texi2html-1.82/0000755000175000017500000000000011264347221015232 5ustar flichtenheldflichtenheldtexi2html-1.82/ChangeLog0000644000175000017500000043064111264347127017021 0ustar flichtenheldflichtenheld2009-01-05 Derek Price * NEWS: Transform a few of Patrice's ChangeLog entries into what are hopefully accurate NEWS entries for the 1.82 release. * configure.ac: Update version # for 1.82 release. * INSTALL, config.guess, config.sub, install-sh, missing, mkinstalldirs, mdate-sh, doc/mdate-sh, doc/texinfo.tex: Updated from versions in Automake 1.10. 2009-01-05 Patrice Dumas * texi2html.pl: don't duplicate the state for menu entry formatting, use the main state. 2009-01-04 Patrice Dumas * texi2html.pl: add a hook at for the end of special regions processing. 2009-01-04 Derek Price * NEWS: Note more robust tests. * test/run_test.sh, test/many_input_files/tex_l2h.sh, test/many_input_files/tex_t4ht.sh: Pass a default temporary directory to `mktemp'. 2009-01-01 Derek Price * configure.ac: Update version # for post 1.80 development. * NEWS: Add section for 1.82 release information. * test/encodings/Makefile.am (EXTRA_DIST), test/formatting/Makefile.am (EXTRA_DIST): Remove references to unversioned files. * configure.ac: Update version # for 1.80 release. * NEWS: Add date for 1.80 release. 2009-01-01 Patrice Dumas * texi2html.init: remove space in front of @quotation argument. * texi2html.pl: add a key in duplicated state. Return the remaining line after a kept misc command. Go through normal_text for empty lines in preformatted. Open paragraph after unkown command. Call begin_format_texi after closing stuff. 2008-12-24 Patrice Dumas * texi2html.pl: add new hooks for user functions, for simple @-commands, and at the beginning of special regions. * T2h_i18n.pm, texi2html.pl, texi2html.init, examples/*: use main state in translation string only when needed. 2008-12-23 Patrice Dumas * texi2html.pl: correct transliteration when USE_UNICODE or USE_UNIDECODE are not set. * test/encoding/*: tests for transliteration with all possibilities. 2008-12-23 Patrice Dumas * texi2html.pl: don't use unidecode on unicode characters that are known not to have a good transliteration. This corresponds with characters with an @-command that don't have a transliteration, like @exclamdown... * test/*: avoid more spurious differences in latex2html output. 2008-12-22 Derek Price * doc/.cvsignore: Ignore this... * doc/texi2html.html: ...removed file, since it is generated during build. 2008-12-16 Patrice Dumas * test/*: handle more gracefully missing latex2html or tex4ht. Try to avoid spurious differences in latex2html output. 2008-12-11 Derek Price * texi2html.pl: Set $T2H_HOME based on the path to the script when it is not found set in the environment. * test/run_test.sh: Use mktemp more portably. 2008-11-28 Patrice Dumas * texi2html.pl: in format_line_number, use @ in front of a macro name, suggestion from Werner LEMBERG. 2008-11-26 Patrice Dumas * texi2html.pl, texi2html.init: add hooks for user functions at @-command beginning for commands taking arguments, at paragraph beginning and when @item or @tab appears. Use it to determine the number of paragraph in cell. * MySimple.pm: add a sentence about -- being the same as -. Report from Werner LEMBERG. 2008-11-20 Patrice Dumas * texi2html.pl: replace an empty macro by an empty string instead of breaking. report from Werner LEMBERG. 2008-11-14 Patrice Dumas * texi2html.pl: duplicate stack to keep right paragraph nesting from top to bottom. * formatting/double_style_paragraph.texi: test for double style commands enclosing 2 paragraphs. 2008-11-11 Patrice Dumas * texi2html.init: set %simple_map_texi = %ascii_simple_map. @ followed by a newline or a tab should be replaced by a space. 2008-11-10 Patrice Dumas * texi2html.init: add support for @ogonek. * texi2html.init, texi2html.pl: encode correctly texi dumped. 2008-11-08 Patrice Dumas * texi2html.init, texi2html.pl: move index splitting code back to texi2html.pl, but still in the Config namespace, to mark clearly that this code is GPL. summary_letter is also put in texi2html.pl since it share a variable at file scope. * examples/*: add copyright notices to most init files, except xml.init and book.init that should remain as an example users can copy from. 2008-11-03 Patrice Dumas * texi2html.init: remove leading spaces and trailing spaces in multitable cells. * texi2html.pl: do human-readable id for toc, and different id for stoc. * texi2html.pl, texi2html.init, examples/makeinfo.init: with OVERVIEW_LINK_TO_TOC set, overview links to toc as in makeinfo. 2008-11-01 Patrice Dumas * texi2html.init: don't do paragraphs in multitables. * texi2html.pl, texi2html.init: handle @smallquotation, change quotation_prepend_text and quotation function reference APIs. * texi2html.init: put a table line in if and only if there is a code-like environment enclosing the construct. * texi2html.pl: warn if the menu order doesn't follow the sectionning order. 2008-11-01 Patrice Dumas * texi2html.pl, texi2html.init: associate node with the right file, even if after section and split index. Handle better empty @elements_list. 2008-09-25 Patrice Dumas * texi2html.pl: associate nodes that are not already associated with the top node in case only sections are used. * texi2html.init: associate elements in split indices to the split indice added element. 2008-09-24 Patrice Dumas * texi2html.pl, texi2html.init: remove THIS_HEADER. Instead everything goes to THIS_SECTION. New function reference, element_heading, to format a node or a section heading, including navigation and label. Accordingly, print_Top and one_section don't print the element header anymore. print_element_header and print_navigation now return their result. new argument for print_misc and print_misc_header, the misc page name. labels and headings appear where the command is, instead of always appearing at the beginning of the elements. 2008-09-23 Patrice Dumas * texi2html.pl,texi2html.init: do added index pages in texi2html.init. Add an element for an index page only it begins a new file. Avoid changing directions as best as possible, while still linking to the added index element (with Following, Back and Prev). Never consider printindex as elements, but instead put them in places. 2008-09-07 Patrice Dumas * texi2html.pl: always use a distinct label for index entries, and use id, target like for other placed items. Give more informations for index entry formatting. 2008-09-06 Patrice Dumas * texi2html.pl: when node Top is considered as a @top, don't associate the following nodes to it, but rather to the next section. When there is no section and USE_NODES is not set don't split by node. Split only by node when USE_SECTIONS is not set and USE_NODES is. Default for USE_SECTIONS is 1, and default for USE_NODES is now undef. When there is no texinfo sectionning element at all or no element for texi2html (for example no section but USE_SECTIONS == 1 and USE_NODES undef). always use THIS_SECTION and THIS_HEADER such that formatting functions can modify them. * texi2html.pl, texi2html.init: progress towards index formatting simplification and handling out of the main program. 2008-09-04 Patrice Dumas * texi2html.pl: don't consider Top node is like @top when finding automatic directions for nodes. And use up node for up if element is a node, instead of relying on the section the node is within. Use toplevelnext and toplevelprev when finding node directions for sections not associated with nodes. 2008-09-03 Patrice Dumas * texi2html.pl: add prepare_state_multiple_pass function to ease formatting more than once specific texts (in index entries, prepended in @itemize, @caption formatting outside of document...) as if they were in special regions (@copying, @titlepage...). * examples/docbook: create valid docbook in @?(v|f)table taking into account the strictness of docbook. Remove title for text before first item, docbook handles right anything before the real table beginning. 2008-09-02 Patrice Dumas * texi2html.pl, texi2html.init: section names and headings cross ref are now human readable and constructed using the section name. Better index summary letters and index page labels that also ensures that there is no clash with node labels. * texi2html.init: when split at node, output navigation heading even when SECTION_NAVIGATION is true, but never output navigation footings. 2008-08-31 Patrice Dumas * texi2html.pl, texi2html.init: only one @title should appear in a document. So now, what was title before is fulltitle. Simplify fulltitle determination, now try @settitle first. @shortittle doesn't exist. Accept more than one file on the command line. Config variables are read-only after command line switches expansion. If defined, they set $Texi2HTML::THISDOC{'VAR'} and if not defined, $Texi2HTML::THISDOC{'VAR'} is autodetected. $Texi2HTML::THISDOC{'VAR'} is then used in the code. Better handling of 8byte encodings. Generate human readable index labels. Fix element_target_name return result order (report from Reinhold). * texi2html.init: Modify elements formatting functions such that they call print_foot_navigation instead of doing the formatting themselves, and also such that they never call print_navigation directly. This is more consistent with the docs. * test/many_input_files: test for more than one file on the command line. 2008-08-29 Patrice Dumas * texi2html.pl: expand macros and value in all the @-commands that need to. Also treat as normal text more @-commands. More places with code_style, as agreed on bug-texinfo. Don't normalize spaces in images. Protect text in @verb in simple_format. As said on the texinfo list in menu only the node is in code_style. Transliterate index entries in index labels. * i18n/es: new translation from Francisco Vila. 2008-08-26 Patrice Dumas * texi2html.pl, examples/makeinfo.init: put everything needed for footnote formatting in the footnote state, to be able to use it in formatting function. This allows to mimic the makeinfo formatting of footnotes. * texi2html.pl, doc/*: add function references to be able to modify target and id for elements, placed items and nodes (Reinhold suggestion). * texi2html.pl: initialize file relative foot number to 0 (report from Reinhold). Fix numbering of numbered subsections in unnumbered such that every numbered section has an increasing number. * texi2html.pl, texi2html.init: @display and @format inherit the code_style and font. * examples/book.init: better conformant ouput. 2008-08-25 Patrice Dumas * texi2html.pl, texi2html.init: modify menu preformatted handling such that the preformatted needs not be done in the formatting function. This allowed to remove simple_menu_link since now menu_link is always like simple_menu_link with detection of commands added. Now things should be right in html, and also xml, and with SIMPLE_MENU even for complicated nestings in menus. Give to formatting functions for formats like @itemize, @table, @multitable... the information that the element is before the first @item, or that only commands listed in %inter_item_commands were seen. Always call $heading when a heading is seen, even if it is not associated with the element. * texi2html.init: Keep better original code end of lines in @def* and put the anchor at the definition line beginning. 2008-08-21 Patrice Dumas * texi2html.pl: simplify handling of table and list items, get rid of table_list_stack, instead use the regular stack. Close all formats closed by end of line (center and table term) at end of line. Don't call scan_line recursively in close_stack. Keep the styles to be reopened in next paragraphs in close_paragraph and not in close_stack. Now format_style{'table'} is only for (|v|f)table. 2008-08-20 Patrice Dumas * texi2html.pl: parse correctly menu node with name. Simplify deff item opening. Handle *headingmarks, *footingmarks. 2008-08-19 Patrice Dumas * texi2html.pl: images don't start a paragraph. @* is better as a new line with remove texi. Allow to have @insertcopying simply pasted during the second pass with INLINE_INSERTCOPYING. * texi2html.pl, texi2html.init, examples/*: pass all the files found for images. * docbook.init: correct @image handling and other fixes. * test/*: adapt to cvs and regenerate. 2008-08-18 Patrice Dumas * texi2html.init: in the default case, don't complete image paths as suggested by Reinhold. It is what makeinfo does, completing paths is confusing and use case is dubious. Complete paths if $COMPLETE_IMAGE_PATHS is set. * texi2html.pl, texi2html.init: remove the possibility to have format_in_paragraph for any @-commands, but only for raw @-commands. Otherwise the nesting may be messed up, if such command is closed in the middle of a paragraph, or a paragraph is closed in the middle of such command. Give simple_text formatted output for special region formatting. * texi2html.pl: accept accent commands followed by spaces for accent command not consisting in special characters. Handle better documents without elements. Never use $_ (report from Reinhold). * l2h.init: move to ... * examples/l2h.init: comment out variables that override the command line. * examples/enable_encoding.init: new init file, should do the same than makeinfo --enable-encoding. * test/: test suite replacing the old one in Test, with better design and the same files used, + texinfo test files. 2008-08-14 Patrice Dumas * texi2html.pl: only use the basename when dumping texi. Really use what is in Texi2HTML::Config::CONF_DIRS, including during command line arguments parsing. 2008-08-13 Patrice Dumas * texi2html.pl: don't mess the relative working directory by removing most of it (report from Reinhold). If the --out argument is a directory, and not splitting, this is considered to be the out directory and the out file is the manual name. * Tests/*: enhance and correct the test suite. 2008-08-09 Patrice Dumas * texi2html.pl: use the global formatting state in definitions argument formatting. Correct the max_columns count with @columnfractions. * texi2html.pl, texi2html.init: handle @: with punctuation character. * examples/docbook.init: new backend for docbook to produce docbook like makeinfo --docbook. 2008-08-08 Patrice Dumas * texi2html.pl: use relative file names for hrefs for misc elements (patch from Reinhold Kainhofer reinhold at kainhofer dot com). And also to determine if the file has to be reopened (report from Reinhold). 2008-08-07 Patrice Dumas * texi2html.pl: move initialisations before the functions that use the global values. Treat setfilename like a normal misc command, not like titlepage commands. Set rightly (dir) as up node for Top, even if there are no automatic directions. region lines are kept to be reparsed in the last pass if in %region_formats_kept. Give also the prototypes lengths for multitables. @-commands in stop_paragraph_command close paragraphs. external nodes begin with ( (report from Reinhold). * texi2html.pl, texi2html.init: With USE_SETFILENAME, the filename is taken from @setfilename, if found, like makeinfo. With IGNORE_BEFORE_SETFILENAME, everything before @setfilename is ignored (now the default). With TOP_HEADING_AT_BEGINNING false, the top heading appears where top heading command is, not always at the beginning of the top element. Put %texi_formats_map (former %text_macros) and %no_line_commands (former %no_line_macros) in Texi2HTML::Config. New function reference, definition_index_entry to format definition index entries separately from definition categories. A new funtion reference begin_format_texi to be able to do something at a format opening. Used to set a stack for multitable to make sure that the cell is the top multitable cell. With this change, the begin_format_texi, row, table_list function reference are interdependent. Pass inforef macros to the formatting references, and also the *ref command parameters unmodified. New caption_shortcaption_command function reference that can be used when a caption is closed. New index_entry_command function reference used for @*index lines. Pass more information to def_line, cell, list_item and many others. add insertcopying for insertcopying formatting. * examples/xml.init: init file to produce xml like makeinfo --xml. 2008-08-04 Patrice Dumas * texi2html.pl, texi2html.init: parse definition lines like makeinfo does. 2008-08-01 Patrice Dumas * texi2html.pl: pass line_nr down more functions. 2008-07-31 Patrice Dumas * texi2html.pl: use simple_format for image alt text. Allow no_line_macro to be set by the user, and use cindex for all the index commands. 2008-07-30 Patrice Dumas * texi2html.pl, texi2html.init: add 3 function references to avoid using anchor for different label formatting and allows to customize the labels. Give the element in argument of more function references. Always give the name to simple_menu_link and menu_link, and a new argument tells if there was an explicit name. Node names are formatted with code_style true. Keep @*contents for misc_command processing if it should be kept. 2008-07-29 Patrice Dumas * texi2html.pl: a menu comment is started by a blank line, and not by a character at the beginning of the line. 2008-07-28 Patrice Dumas * texi2html.pl, texi2html.init: handle a menu_comment like a normal format. detailmenu isn't a misc_command anymore, but is handled like a normal format, like a menu @-command. put format opening in a separate subsection, begin_format, to be able to open a menu_comment right after a beginning of a menu, of a detailmenu, or right after the end of those commands. add command line option --error-limit. * texi2html.pl: better comment about texi2html that states more clearly that the authors are the texi2html authors (from Reinhold Kainhofer). Handle better codepoints above 0xFFFF (Reinhold Kainhofer report). Add $Texi2HTML::THISDOC{'input_file_name'} for the file given on the command line (report from Reinhold Kainhofer). 2008-07-19 Patrice Dumas * texi2html.pl, doc/*: synchronize command-line switches with makeinfo. * i18n/fr, Tests/*: revised french translation from Jean-Charles Malahieude. 2008-07-18 Patrice Dumas * texi2html.pl: get rid of m_cedilla, instead a specific function for the node parsing, scan_node_line, is used. * Tests/formatting/detailmenus.texi: new test case for detailmenu. 2008-07-16 Patrice Dumas * texi2html.pl, texi2html.init: give columnfractions and row prototypes to the multitable cell and row formatting functions. * texi2html.init: use columnfractions to determine the cell widths. 2008-06-12 Patrice Dumas * texi2html.pl, texi2html.init: dynamically determine file hrefs for misc elements. Generalize code common for all misc elements. In toc and footnotes use real filenames instead of empty filenames when not split. monolithic option is not obsolete and does something different from no split (toc, about... are in different files if set to no). Code cleanups in rearrange_elements. * Tests/*: add a test for -no-monolithic. * */Makefile.in: use autoconf 2.62 2008-05-18 Patrice Dumas * texi2html.init: complete unicode mapping for @-commands. * texi2html.pl, Tests/*, doc/*: separate id of element from what should be used to target the element. This allows to use node id as target for sections (suggestion from Karl Berry). This is done if $USE_NODE_TARGET is set (the default). 2008-05-16 Patrice Dumas * T2h_i18n.pm,i18n/*: correct the presentation of the date (report from Karl Berry). * texi2html.pl: remove an infinite loop workaround, the up for an element should never be itself. This has certainly be fixed on 2008-03-20, by treating top like any other element. 2008-05-15 Patrice Dumas * texi2html.init, Tests/*, examples/*: handle @leq and @geq. 2008-03-25 Patrice Dumas * texi2html.pl: use do_unknown and unknown in pass 0 too. * texi2html.init, examples/makeinfo.init: honor USE_ACCESSKEY even if not split at node (report from Reinhold Kainhofer). * texi2html.pl, texi2html.init, ChangeLog: correct typo in already (report from Reinhold Kainhofer). 2008-03-23 Patrice Dumas * texi2html.pl, texi2html.init, doc/*, examples/makeinfo.init: use accesskey attribute and link element if set in the init file. Add FileNext and FilePrev directions (for link, but can be used anywhere). * texi2html.pl, examples/*: change in unknown function reference API, now there is a pass argument to be able to handle unknown macros in other passes than the last. * i18n/de: update translation (Reinhold Kainhofer). * texi2html.pl, doc/*: handle frame files like other files, and document them. * texi2html.pl, doc/*: use do_unknown and unknown in pass 1 too. 2008-03-20 Patrice Dumas * texi2html.pl: treat the @top element like any section element, except that the previous chapter is still considered to be the previous element at its level. Find previous and next toplevel better. * Makefile.am,...: better handling of mediawiki tests and regenerate with automake 1.10.1. 2008-03-17 Patrice Dumas * texi2html.pl, texi2html.init: @itemize should produce bullets by default (report from Reinhold Kainhofer, and bugfix) * texi2html.init: handle @click, @clickstyle, @click, @arrow, @clicksequence * texi2html.pl: defer setting the date after all initializations are done. * texi2html.pl, texi2html.init, doc: TOC_LIST_ATTRIBUTE replaced by NO_BULLET_LIST_ATTRIBUTE, TOC_LIST_STYLE replaced by NO_BULLET_LIST_STYLE * Tests/formatting/comments.texi,formatting.texi,clean.texi: test for @click, @clickstyle, @click, @arrow, @clicksequence 2008-03-12 Patrice Dumas * texi2html.pl, texi2html.init, examples/mediawiki.init: add the program_string reference. * examples/mediawiki.init: cleanup perl warnings. * texi2html.pl: element_file_name called with doc sets docu_doc and not docu_top (Reinhold Kainhofer). * Tests/test.sh: more robust for files with spaces. * Tests/*: add tests for mediawiki output. 2007-10-07 Patrice Dumas * texi2html.pl: better handling of special regions. * Tests/*: test for more possibility regarding titlepage output or not with copying output or not. Use the actual state for titlepage generation in print_Top. rename formatting-regions to formatting_regions. 2007-10-06 Patrice Dumas * texi2html.pl, texi2html.init: handle titlepage like other special regions. Don't add the index entries in footnote within special regions. * Tests/*: test for footnote in float caption and anchor and index in that footnote. test for titlepage with most of the constructs within. 2007-10-05 Patrice Dumas * texi2html.pl: separate global variables of pass_structure and pass_texi, prefix some of those vaiables, and clean variable and function names. add more information relative to the special regions. Treat more systematically the special regions with an initialization code allowing to fill the state with relevant information. Don't output footnote lines for footnotes not part of the document. Better id generation for headings in region. Better handling of anchors in special regions. Prefix the targets in special regions with t_h. * texi2html.pl, texi2html.init: use a formatting function for documentdescription and give more arguments to copying_comment. 2007-10-04 Patrice Dumas * texi2html.pl, texi2html.init: handle headings more like normal @-commands and not like sectionning commands. Don't associate headings with the following index entries. Separate heading absolute number and heading id from section number and id. * Tests/*: add tests for headings 2007-10-03 Patrice Dumas * texi2html.pl, texi2html.init: use relative file names for frame file names (report from Graham Percival). * texi2html.init: use entities for simple quotes in normal text. 2007-10-02 Patrice Dumas * texi2html.pl, T2h_i18n.pm: keep the state in the global hash and use it in translations. * texi2html.pl, texi2html.init, examples/*, doc/*: modify the normal_text function reference API, add an input variable true if in simple text. * Tests/formatting/*: test for symbols kept in preformatted and @-commands in @*ref appearing in @example. 2007-10-02 Patrice Dumas * texi2html.init: remove trailing new line in @html block (report from Graham Percival). * Tests/formatting/block_EOL.texi: test for end of lines in raw block formatting. 2007-10-01 Patrice Dumas * texi2html.pl, texi2html.init: Handle @end commands entered as misc commands like other misc commands during pass_text. Don't add a space after an @end command, and don't remove it when there is no reason to. Handle right @end block commands followed by something else than a spacing character (report from Graham Percival). * Tests/formatting/symbol_after_block.texi: test for symbols after @end block commands. 2007-09-30 Patrice Dumas * texi2html.pl: don't have # perl on the shebang line. Report by Martin Koeppe. 2007-09-27 Patrice Dumas * texi2html.init: handle @textdegree, @hyphenation. * texi2html.pl, texi2html.init: reset the language for each appearance of @documentlanguage (except if language was set on the command line). For a language like pt_BR, try pt_BR, and, if not found, use pt. add a new function reference, print_element_header to print the beginning of an element, to be able to print it right when it is ready, and not when starting the next element. Add --css-ref and --transliterate-file-names options. @set, @clear are kept for later passes. Many @-commands are now handled equally in pass_structure and pass_text, and are reset at the beginning of the pass. * Tests/documentlanguage/multi_lang.texi: test for multiple @documentlanguage changes. * Tests/documentlanguage/unknown_language.texi: test for unknown languages. * Tests/formatting/comments.texi: test for @hyphenation, @allowcodebreaks, @fonttextsize, @frenchspacing. * Tests/navigation*: test for vertical headers, no section navigation, use of noheader.init, for all the splitting possibilities. * Tests/*, examples/html32.init: update html32.init and test for most of the formatting. Remaining invalid warnings are like: '"333" is not a character number in the document character set' even when setting charset is utf-8. 2007-09-22 Patrice Dumas * texi2html.pl: handle @alias. * texi2html.init: handle @quote*, @guillem*, @allowcodebreaks, @fonttextsize commands. use 3 dots for @enddots, like makeinfo. * Tests/*: new test file for @alias. Test @quote* and @guillem*. 2007-09-11 Patrice Dumas * examples/tex4ht.init: chdir to the out dir only once. Add the texinfo comment at a better place. 2007-09-10 Patrice Dumas * texi2html.pl, texi2html.init: avoid content elements being defined only if they are used inline and the corresponding macro never appeared. Avoid defining variables when there is no target. * Tests/*: add tests for all the DO_CONTENTS/setcontentsaftertitlepage and INLINE_CONTENTS combinations when there is no @contents in the document. 2007-09-09 Patrice Dumas * texi2html.pl, texi2html.init: handle @\ and matching { } in @math. fix simple_style to be really used (typos in texi2html.init). * examples/tex4ht.init: use httexi to handle @math, since texinfo @-commands are allowed in @math, and httex for @tex. * Tests/*: add test for simple_style with a paragraph within. more tests for @math. 2007-08-21 Patrice Dumas * texi2html.pl: handle @, command without brace like @,c. Report from Jorge Barros de Abreu. * examples/roff.init, texi2html.init: treat @, more like other accent @-commands. * Tests/*: more tests for accents and cedillas. * Makefile.am: don't write the spec file in $(srcdir). * *Makefile.in, configure: regenerate with automake 1.10, and autoconf 2.61. 2007-06-04 Derek Price * configure.ac: Update to version 1.79 for development. * Makefile.am: Use $(SHELL) explicitly. * configure.ac: Update to version 1.78 for release. 2007-06-01 Patrice Dumas * doc/texi2html.texi: update copyright years, clarify that the license in comment is the license for texi2html, not for the manual. 2007-04-07 Patrice Dumas * texi2html.init, texi2html.pl: when INLINE_CONTENTS is set, the table of contents and short table of contents are output where they are defined, except if setcontentsaftertitlepage is set. If setcontentsaftertitlepage is set the contents is associated with the title. Handle @setcontentsaftertitlepage and @setshortcontentsaftertitlepage. Don't output a navigation panel nor an about page when not SPLIT and no SECTION_NAVIGATION. * Tests/contents*: new tests for contents * examples/book.init,noheaders.init: update * doc/*: update 2007-04-06 Patrice Dumas * texi2html.init: Texi2HTML::THIS_SECTION is always defined, it is empty when it has no elements. Print table of contents when there is no top node content and no Overview. Don't add the section title to the html title when the document isn't split. * Tests/*: regenerate 2007-02-17 Derek Price * doc/texi2html.texi: Clean out some old, commented-out cruft. 2007-02-05 Patrice Dumas * texi2html.init: set default out encoding to utf8. This could help with translations. * Makefile.am, manage_i18n.pl.in: add japanese translations, from fedora. * doc/Makefile.am: call perl with -x when called directly on texi2html.pl 2007-01-08 Patrice Dumas * texi2html.pl: correctly set node filenames even if NODE_FILES isn't set. Handle right 2 @def-like commands on a line. Collect split and mono entry in htmlxref.cnf. * texi2html.init: take into account when a target is split in crossref. When there is a split and a mono entry, chose based on split. * examples/book.init: update to new use of directions. * Tests/*: new tests for htmlxref.cnf file use. New test for double @deffn on the same line. * */Makefile.in, aclocal.m4, configure: use automake 1.10 and autoconf 2.61. 2006-08-06 Patrice Dumas * texi2html.pl, texi2html.init: accept - in @-command names. ignore @allow-recursion and @quote-arg. In macro args parsing, a comma in brace is protected. Rewrite index names handling to be simpler and accept more than one prefix for an index name. The main hash has now index names as key instead of prefixes. * Tests/*: add the tar manual. add macros/quote-args.txi from the makeinfo test suite. 2006-08-05 Patrice Dumas * texi2html.pl, texi2html.init: use the same code for file name determination with NODE_FILES than with the traditional scheme. node_file_name is now used only to change the node file name, not for the determination of the html page file name anymore. With this change the top file isn't necessarily index.html, even if it is the node_file_name it is index.html only if explicitly set. * texi2html.pl: simplify index handling code. when NODE_FILES is true, use the node file name for the html files whenever possible. * Tests/*: Regenerate * NEWS, doc/*: document the api node_file_name api change 2006-08-04 Patrice Dumas * texi2html.pl: fixes for split indices. Fix detection of already present heading. Don't split top element accross pages because of split indices. Simplify the file name determination. * Tests/*: add a test case for split indices in chapter and more tests for split indices. Put index_nodes result in a directory. Regenerate. 2006-06-07 Patrice Dumas * texi2html.pl: Accept empty value set by @set (bug #16774). Don't eat the line after a macro without arg (bug #16773). * Tests/*: test for those issues. 2006-05-17 Patrice Dumas * texi2html.pl, texi2html.init: rework image formatting, more is done in the formatting functions. Redundancy between menu entry and menu description is handled in the formatting functions. * texi2html.pl: Close correctly the @-commands in pass_structure. Remove unneeded error messages for formats not matching when it cannot happen. Use the same element in menu description and menu links. Try to close paragraph when searching for the right format to close. Remove unclosed accent commands from the 'command_stack'. Indentation fixes. * T2h_l2h.pm: use the document name in the perl cache name. * Tests/*: more tests for unclosed @-commands. 2006-05-17 Patrice Dumas * texi2html.pl, texi2html.init: teletype style is set in table item formatting in texi2html.init, not in the main program. Add the formats to the 'command_stack' ('style_stack' is renamed to 'command_stack'). Clean the 'cmd_line' related code. End of lines are removed in formatting function related with 'cmd_line', not in the main program. Commands surrounding paragraphs aren't handled in the main program anymore, but using 2 'command_stack', one at the beginning of the paragraph and one at the end of the paragraph. rename 'name' of element to 'text_nonumber'. call heading_texi even for nodes. give more information to index_element_heading_texi such that it is easier to customize those headings. Handle NUMBER_SECTIONS in heading_texi and not in the main program styles considered to be simple may be customized. indentation cleanups. * texi2html.pl: handle @center like a regular format. Many fixes for @center. rename some hash keys to avoid hash keys name clashes. revert a change in merge_element_before_anything such that it is only done for the first node. more duplicate_stack when giving the state to a formatting function. This has the added benefit that it sets the command_stack at preformatted beginning to the current command_stack, which is right in thoses case (it is done by begin_paragraph in other cases). protect end of lines with @ only for deff, and in that case protect it better. remove unneeded spaces added during close_stack. use begin_paragraph_after_command to generalize reopening of paragraph after a commmand, replace automatic_preformatted. Use iso entities in titles (in simple_format). * Tests/formatting/def_cmds.texi: test file only for def stuff (excerpted from formatting.texi with additional tests). * Tests/formatting/center.texi: test file only for center (excerpted from verbatim_html.texi with addtional tests). * Tests/formatting/tables.texi: test file with tests for tables. * doc/texi2html.texi: update. 2006-04-23 Patrice Dumas * texi2html.pl, texi2html.init, T2h_l2h.pm: handle @tex, @verbatim and @verbatiminclude in @copying comments (with 'remove_texi'). Handle @float and @need at the right place. * texi2html.init: More cleanings of -- in html comments. * Tests/*: add test for @tex and @float in @copying, for @node in @copying. 2006-04-17 Patrice Dumas * texi2html.pl, texi2html.init: hanldle rightly centerchap. Footnote really appear at the foot of the file when there are different nodes in one file. * texi2html.pl, MySimple.pm: avoid Getopt::Long warning when trying obsolete options. * texi2html.pl: handle more sanely some special @-commands (@anchor, @*index) in @copying and similar regions, by associating them with top element and ignoring them during expansions that are done more than once. Set titlefont if @titlefont appears before any sectionning command. Collect the @-command associated with index entries. Collect all the index entries even the wrong ones, during pass_structure, but don't add the wrong ones to the per index hash. * Tests/*: test @centerchap. Better tests for not separated footnotes. 2006-04-10 Patrice Dumas * texi2html.pl: use nodes for refs with USE_NODES. Handle right footnotes at the end of the document and SEPARATED_FOOTNOTES false. * Tests: test for footnotes at the end of the document and SEPARATED_FOOTNOTES false. More tests. 2006-04-09 Patrice Dumas * texi2html.init: really use roman type for @r. Format @key more in line with what is done in texinfo, and makes more sense. * texi2html.pl, texi2html.init: use a function reference to define the numbered heading texinfo, and the index page headings texinfo. * texi2html.pl: don't take into account new indices with index name clashing with existing indices, or with file extensions (because texi2dvi uses the index name as file extension). 2006-04-08 Patrice Dumas * texi2html.pl: take into account the equivalent nodes (after @-commands removal) when a node isn't found. * texi2html.pl, texi2html.init: new variable $TOP_NODE_UP used for the top node up node name with automatic top node directions. Another variable $USE_MENU_DIRECTIONS. When unset the missing node directions are not set using the information given by menus. Use entities for OPEN_QUOTE_SYMBOL and CLOSE_QUOTE_SYMBOL with $USE_ISO. Use sectionprev, sectionnext and sectionup for section directions. next, prev are set more sanely. up still means the same. * texi2html.pl: Remove element_next, element_prev and element_up. They were duplicating sectionup or useless. Homogeneize and clean the coding style, remove comments. Don't reset %Texi2HTML::NAME/NO_TEXI... such that a ref to those structures is valid. * Tests/formatting/equivalent_nodes.texi: test equivalent nodes. * Tests/*: test for different quotes. Test for more directions. 2006-03-27 Patrice Dumas * texi2html.pl,texi2html.init: if $TRANSLITERATE_NODE is set transliterate the non ascii characters in node names as discussed on the texinfo list. Optionally Use Text::Unidecode to do more transliteration that what is available through the maps ($USE_UNIDECODE set). Some changes for better node targets generation. Really put more than one node in a file if needed. * configure.ac: Text::Unidecode detection. * Tests/formatting/node_*translit*: test for node names transliteration. 2006-03-27 Patrice Dumas * examples/chm.init: set the encoding conditionnaly on OUT_ENCODING being defined. * texi2html.pl,texi2html.init: add $USE_NUMERIC_ENTITY variable, set to true in the default case. Use numeric entities for accented letters if this variable is true. Use numeric entity for @l{} and @L{} instead of /l and /L. * examples/chm.init: use numerical entities instead of textual entities for @oe, @OE and @euro, some viewers have trouble with the corresponding textual entities. 2006-03-26 Patrice Dumas * texi2html.init,texi2html.pl: clean the encoding related code by adding more variables associated with the different encodings. Remove unneeded conversion code, given that the text is already in the perl internal encoding. * doc/, NEWS: document the changes. * texi2html.pl: put explicitely the ref on hashes in the main namespace such that they are usable in init files. * Tests/: new tests for the utf8.init file, tests for doubly accented characters. * examples/chm.init: don't try to output utf8 encoded files, as htmlhelp 1.x doesn't seems to be utf8 aware. * examples/utf8.init: encode characters in preformatted environments. 2006-03-25 Patrice Dumas * texi2html.init: handle @indent. Remove an empty line generated by @indent and @noindent. Add an end of line after a complex format. * texi2html.init,texi2html.pl,examples/roff.init: add an indent information to the paragraph command. * doc/, NEWS: document the changes. * T2h_l2h.pm: merge init_to_latex() into init(). 2006-01-28 Patrice Dumas * texi2html.pl,Makefile.am,buildt2h.sh: move latex2html stuff out of texi2html.pl, to T2h_l2h.pm. 2006-01-27 Patrice Dumas * texi2html.pl: don't remove spaces around @-commands in xhtml refs. add back caching of html generated by latex2html. More accurate counts and error messages for latex2html and other cleanings. Cleaner interface for debug and verbose with main namespace. * Tests/formatting/at_commands_in_refs.texi: test for @-commands in external ref. 2005-11-30 Patrice Dumas * texi2html.pl, texi2html.init, examples/tex4ht.init, doc/*: allows customization of CSS_FILES in init_handler and adding to css lines by the process handler. * Tests/singular: use png images. * i18n/,translation.pl: updated pt translations from Jorge Barros de Abreu. 2005-11-29 Patrice Dumas * texi2html.pl, texi2html.init: add a possibility to set the user and date with the USER and DATE variables. 2005-11-27 Patrice Dumas * i18n/,translation.pl,manage_i18n.pl.in: update pt and add pt_BR translation, from Jorge Barros de Abreu. 2005-11-14 Patrice Dumas * texi2html.pl: remove the @special_regions array. Special regions are parsed like raw regions but are handled especially. * texi2html.init: add a space after added before printindex, _$sec_num is appended to printindex, to keep track of the section number. images extention is taken from the @image tag if available everything which was splitted accross pass2, pass3 and pass4 is now done in pass2. in pass3 only very little cleaning is done, pass4 is removed. 2003-02-21 Patrice Dumas * texi2html.pl: added handling of overbar accent @= is transformed in = the handling of multi lines macro is done in a function, scan_line which scans a line, keeping a record of the text already ready, the macro stack and a state which for now only contains 'verb' if in @verb macro. The @verb macro is handled by this function (but since things have already been substituted, it cannot give the right result easily) 2003-02-19 Patrice Dumas * texi2html.pl, texi2html.init: T2H_DEFAULT_button_icon_img behaves better when it has some undef arguments the variables which may be redefined by the user are now global. They are grouped in texi2html.init, and also in the Declaration in texi2html.pl and sorted by class. new elements in %T2H_THISDOC for items which are global but shouldn't be redefined by the user (instead of $T2H_HOMEPAGE, $THISPROG...). t2h_Init_global has been removed and the code scattered according to the principles above other minor fixes 2003-02-18 Patrice Dumas * texi2html.pl: handle @verbatim, and @html differently. Added push_until function which shift from a lines array and push to another array until @end tag. Remove PROTECTTAG remove unneeded push of index entry for vtable or ftable which created 2 indices entry * Tests: added more tests 2003-02-13 Patrice Dumas * texi2html.pl: avoid using $_ in functions, as it is a global variable, use my variables instead * Tests/test.sh: if called with arguments, the test specified by the arguments is the only one done * Tests/*: add Makefile.in, more subdirectories, synchronise reference files with changes in the code 2003-02-12 Patrice Dumas * texi2html.pl: add prototype for the functions ; remove & in front of functions ; remove the unusefull main() and Unprotect_texi functions * Tests/Makefile.am, Tests/test.sh: add regenerate target to redo the reference files add test with tidy, remove cvs/rcs tags when doing diffs 2003-02-11 Patrice Dumas * Tests/Makefile.am, Tests/test.sh: changes to reflect change in directory name for the cvs manual from cvs to ccvs 2003-02-11 Patrice Dumas * texi2html.pl, texi2html.init: unused variables removed use_bibliography removed, lots of global variables made lexical. open renamed open_file to avoid clashing with perl builtin. remove sub init_input, the initialization is done in the script itself. add meta http-equiv="Content-Type" tag for the charset declaration. 2003-02-06 Patrice Dumas * texi2html.pl, texi2html.init: some unused variables removed use_acc not used anymore, accents are always handled Remove a lot of global variables. Use global lexical or lexically scoped variables (with my) when possible. Pass variables as arguments when the function is in texi2html.init bugfixes: frame target is the top file, and not the toc file during pass1 some lines where pushed in @lines2 instead of @lines * Tests/test.sh: ignore CVS directory when doing diffs 2003-02-03 Patrice Dumas * texi2html.pl: Remove handling of setref which is a TeX macro. The corresponding texinfo macro is anchor. Remove an unneeded protect_texi * configure.in, Makefile.am, Tests/test.sh, Tests/Makefile.am Tests/*: Files used for testing added, texinfo manuals and the html results for some of the texinfo manuals 2003-01-30 Patrice Dumas * texi2html.pl: fix nesting of multi line style macros (previously, @kbd{@code{my thing}} became my thing (or something approaching) no style substitution is done in indexes (indexes are already good html). Added %sec2index which is undef for a section name not in index, 1 if the section name is in index. the value of $docu_doc set if $T2H_OUT was set (option -o) wasn't used to define docu_doc_file, thus the output file was the basename of the texinfo file with extension appended, and not $T2H_OUT. 2003-01-28 Patrice Dumas * texi2html.pl: fixes in the handling of characters which are special in html (&, "), involving some rewriting/replacements of other functions which were bugged normalise_node now really uses protect_html new function protect_space_style used to normalise nodes without calling protect_html 2003-01-24 Patrice Dumas * texi2html.pl: fixes for @multitables: size detection, elements out of bounds are ignored @item and @tab may appear anywhere within table lines 2003-01-22 Patrice Dumas * texi2html.pl: Ref to info files are handled correctly @ref{(perl)Top} is transformed into @ref{Top,,,perl}. Any character is allowed in menu comments In menu, lines begining with * which are not menu entries are allowed and treated as comments Added a style handle for @bullet (do_bullet) such that @bullet{text} is handled Cedilla are now accepted in node names. Added protect_cedilla and unprotect_cedilla functions. * texi2html.pl, texi2html.init: Add -test option which sets $T2H_TODAY $T2H_USER $THISPROG to given values. This is in order to be able to compare with reference files for testing purproses. 2003-01-16 Patrice Dumas * texi2html.pl: @H{a} is changed in a'' and not á which was wrong, as there are 2 acute accents on @H{a}. 2003-01-09 Patrice Dumas * texi2html.pl: Suppress warnings for undefined patterns or variables when running with -w 2003-01-08 Patrice Dumas * texi2html.init: small typo in a french word corrected * texi2html.pl: @dotless macros are processed before accents constructs like @'{a} are handled, typo in variable names corrected 2002-06-25 Derek Price * texi2html.init, texi2html.pl: Miscellaneous HTML improvements, towards strictness and easier transition to XHTML later; lowercase elements and attributes, avoid using deprecated elements and attributes, always quote attribute values, avoid use of minimized attributes. Internal cleanups. (Patch from Ville Skytt through Adrian Aichner .) 2002-06-08 Derek Price * configure: Update to a new development release number. * NEWS: Add news template for next release. * configure.in: Regenerated. * doc/stamp-vti: Ditto. * doc/version.texi: Ditto. 2002-06-08 Derek Price * configure.in: Update Texi2HTML date. * NEWS: Update for new release. * .cvsignore: Add autom4te.cache for new version of Autoconf. * Makefile.in: Regenerated. * aclocal.m4: Ditto. * configure: Ditto. * doc/Makefile.in: Ditto. * doc/stamp-vti: Ditto. * doc/version.texi: Ditto. 2001-11-27 Adrian Aichner * texi2html.pl (pass5): Improve wording to say "# writing X sections ...". * texi2html.pl (next_doc): Skip over $docu_top_file and issue warning. 2001-11-25 Adrian Aichner * texi2html.init (T2H_InitGlobals): Improve documentation. Prepend $T2H_ADDRESS, which contains nothing but the address now, with "by". * texi2html.init (T2H_DEFAULT_print_page_foot): Prepend $T2H_ADDRESS, which contains nothing but the address now, with "by". * texi2html.init (T2H_PRE_ABOUT): Ditto. * texi2html.init (T2H_AFTER_ABOUT): Make it a lexical. * texi2html.pl: Remove trailing whitespace from lines. Use protect_html of HREF and NAME. Use /o where possible in substitutions. * texi2html.pl (T2H_HOMEPAGE): Get rid of newlines. * texi2html.pl (T2H_ADDRESS): Move to texi2html.init. * texi2html.pl (pass1): Fix severe top node matching bug. * texi2html.pl (do_uref): Don't markup obviously bad uref. * texi2html.pl (t2h_anchor): Use protect_html to allow double-quoting of all html attributes. 2001-11-19 Adrian Aichner * texi2html.init: Initialize T2H_INCLUDE_DIRS to the empty list. * texi2html.pl (LocateIncludeFile): Don't look in ., unless it's part of T2H_INCLUDE_DIRS. 2001-09-18 Derek Price * texi2html.pl (T2H_HOMEPAGE): Use new link. (T2H_AUTHORS): Direct to dev@texi2html.cvshome.org for maintainer. (T2H_ADDRESS): Default to "an unknown user". 2001-09-18 Derek Price * doc/.cvsignore: Add several files generated by pdftex. 2001-09-18 Derek Price * doc/Makefile.am (texi2html_TEXINFOS): Remove version.texi - AM includes it automatically. (texi2html.html): Include version.texi as a dependency. (texi2html.pdf): Use pdftex to create instead of ps2pdf - hyperlinks! * doc/Makefile.in: Regenerated. 2001-09-18 Derek Price * configure.in: Bump package version number. * Makefile.am (AUTOMAKE_OPTIONS): Bump required Automake version to 1.5. * doc/texinfo.tex: New File. * TODO: Add note about `make distcheck' being broken and about lack of a comprehensive test suite. * Makefile.in: Regenerated using Automake 1.5. * aclocal.m4: Ditto. * configure: Ditto. * doc/Makefile.in: Ditto. * doc/stamp-vti: Ditto. * doc/version.texi: Ditto. 2001-09-17 Derek Price * texi2html.init (T2H_WORDS_FR, MONTH_NAMES_FR): Add French translations. (Patch from Dumas Patrice .) 2001-09-17 Derek Price * texi2html.1.in (AVAILABILITY): Add detail. 2001-09-17 Derek Price * .cvsignore: Add `texi2html.1'. 2001-09-17 Derek Price * texi2html.1: Removed this file since it is generated by configure. 2001-08-10 Derek Price * INTRODUCTION: Fix email addresses and links. * README: Ditto. * NEWS: Update. 2001-08-10 Derek Price * doc/Makefile.am: Made a few changes so we can build in a dir other than $(srcdir). (Bug report from Richard Pixley .) * Makefile.am: Remove some useless comments. * doc/Makefile.am: Simplify some targets which Automake already knew how to handle. * aclocal.m4: Regenerated. * configure: Regenerated. * Makefile.in: Regenerated. * doc/Makefile.in: Ditto. 2001-01-20 Adrian Aichner * INTRODUCTION (http): Typo fixes. * texi2html.init (T2H_DEFAULT_print_toc_frame): Improve wording. * texi2html.pl: Avoid newlines around URL in $T2H_HOMEPAGE. * texi2html.pl (pass1): Remove incorrect "node is undefined ..." warnings (as pointed out by larry.jones@sdrc.com (Larry Jones) in <200011152253.RAA16633@thor.sdrc.com>. * texi2html.pl (Sec2PrevNode): Fix bug of calculating next node instead of previous. * texi2html.pl (main): Provide Windows NT workaround for $T2H_USER until getpwuid gets implemented there. 2000-11-15 Adrian Aichner * texi2html.pl: Comment out warnings pragma which, according to larry.jones@sdrc.com (Larry Jones), is not available in perl5.004_02. 2000-11-12 Adrian Aichner * doc/custhtml.texi: Fix @node and @menu commands according to feedback from makeinfo and texi2html, which reports undefined nodes now. * doc/custhtml.texi (CustHTMLBody): Ditto. * doc/custhtml.texi (CustHTMLBodyText): Ditto. * doc/custhtml.texi (CustHTMLAfterBody): Ditto. * doc/custpage.texi: Ditto. * doc/custpage.texi (TipsNewDesign): Ditto. * doc/custpage.texi (CustPagePhil): Ditto. * doc/custpage.texi (CustPagePhilNav): Ditto. * doc/custpage.texi (CustPageMiscPage): Ditto. * doc/custpage.texi (CustPagePageHeadToc): Ditto. * doc/custpage.texi (CustPagePageHead): Ditto. * doc/initfile.texi: Ditto. * doc/initfile.texi (InitFileBasics): Ditto. * doc/reference.texi: Ditto. * doc/reference.texi (Refptocframe): Ditto. * doc/stamp-vti: Updated. * doc/texi2html.texi: Ditto. * doc/texi2html.texi (Top): Ditto. * doc/texi2html.texi (Indexvr): Ditto. * doc/version.texi: Ditto. 2000-11-12 Adrian Aichner * texi2html.init: Re-format file according to M-x cperl-set-style RET C++ RET. Following subs are affected by re-indentatition and bug fixes due to use of warnings pragma. * texi2html.init (T2H_DEFAULT_print_section): * texi2html.init (T2H_DEFAULT_print_Top_header): * texi2html.init (T2H_DEFAULT_print_Top): * texi2html.init (T2H_DEFAULT_print_misc_header): * texi2html.init (T2H_DEFAULT_print_misc): * texi2html.init (T2H_DEFAULT_print_chapter_header): * texi2html.init (T2H_DEFAULT_print_chapter_footer): * texi2html.init (T2H_InitGlobals): * texi2html.init (T2H_DEFAULT_print_page_head): * texi2html.init (T2H_DEFAULT_print_page_foot): * texi2html.init (T2H_DEFAULT_print_foot_navigation): * texi2html.init (T2H_DEFAULT_button_icon_img): * texi2html.init (T2H_DEFAULT_print_navigation): * texi2html.init (T2H_DEFAULT_print_frame): * texi2html.init (T2H_DEFAULT_print_toc_frame): * texi2html.init (T2H_DEFAULT_about_body): * texi2html.pl: Re-format file according to M-x cperl-set-style RET C++ RET. Add pragma: use warnings; Following subs are affected by re-indentatition and bug fixes due to use of warnings pragma. * texi2html.pl (LoadInitFile): * texi2html.pl (SetDocumentLanguage): * texi2html.pl (l2h_Init): * texi2html.pl (l2h_InitToLatex): * texi2html.pl (l2h_ToLatex): * texi2html.pl (l2h_FinishToLatex): * texi2html.pl (l2h_ToHtml): * texi2html.pl (getcwd): * texi2html.pl (l2h_InitFromHtml): * texi2html.pl (l2h_FromHtml): * texi2html.pl (l2h_ExtractFromHtml): * texi2html.pl (l2h_Finish): * texi2html.pl (l2h_InitCache): * texi2html.pl (l2h_StoreCache): * texi2html.pl (l2h_FromCache): * texi2html.pl (l2h_ToCache): * texi2html.pl (pass1): * texi2html.pl (EnterIndexEntry): * texi2html.pl (IndexName2Prefix): * texi2html.pl (GetIndexEntries): * texi2html.pl (byAlpha): * texi2html.pl (GetIndexPages): * texi2html.pl (GetIndexSummary): * texi2html.pl (PrintIndexPage): * texi2html.pl (PrintIndex): 2000-11-05 Adrian Aichner * MySimple.pm (getOptions): Correct typo found with "use strict;". * texi2html.init: Convert from dynamically to lexically scoped variables. * texi2html.init (pretty_date): Ditto. This sub is defined in texi2html.pl as well! * texi2html.pl: Ditto. * texi2html.pl (l2h_FromHtml): Ditto. * texi2html.pl (pass1): Ditto. * texi2html.pl (pass2): Ditto. * texi2html.pl (pass3): Ditto. * texi2html.pl (pass4): Ditto. * texi2html.pl (update_sec_num): Ditto. * texi2html.pl (open): Ditto. * texi2html.pl (next_line): Ditto. * texi2html.pl (html_debug): Ditto. * texi2html.pl (debug): Ditto. * texi2html.pl (do_email): Ditto. * texi2html.pl (do_math): Ditto. * texi2html.pl (do_uref): Ditto. * texi2html.pl (apply_style): Ditto. * texi2html.pl (substitute_style): Ditto, except $_. * texi2html.pl (t2h_anchor): Ditto. * texi2html.pl (pretty_date): Ditto. This sub is defined in texi2html.init as well! 2000-11-05 Adrian Aichner * texi2html.pl (pass1): Generate valid HTML for anchors produced for @itemx?. 2000-11-05 Adrian Aichner * texi2html.init: Eliminate bare-word use of variable T2H_OPTIONS. 2000-11-05 Adrian Aichner * texi2html.pl: Use strict pragma to detect potential bugs. Declare local variables (currently 396!). Fix HTML syntax in $complex_format_map. Eliminate bare-word use of variables (eg. use $T2H_LANG instead of T2H_LANG). * texi2html.pl (GetIndexSummary): Remove
after . * texi2html.pl (Sec2NextNode): Re-write section-number regexp for readability and to make cperl-mode happy. * texi2html.pl (Sec2PrevNode): Ditto. * texi2html.pl (main): New sub encapsulating top-level code. * texi2html.pl (pass1): Ditto. Re-write texinfo comment regexp for readability and to make cperl-mode happy. End HTML

before @printindex,

, and
. * texi2html.pl (pass2): Ditto. Quote
attributes. * texi2html.pl (pass3): Ditto. * texi2html.pl (pass4): Ditto. Remove

before first paragraph! * texi2html.pl (pass5): Ditto. * texi2html.pl (open): Use no strict "refs" to allow symbolic reference. * texi2html.pl (apply_style): Ditto. 2000-11-04 Adrian Aichner * texi2html.init ($T2H_DOCTYPE): Add SystemLiteral to identify the canonical DTD. * texi2html.init (T2H_DEFAULT_about_body): Fix HTML syntax of Subsubsection One-Two-Three example. * texi2html.pl: Close HTML

before HTML

and HTML
. Correct handling of texinfo menu comment lines. * texi2html.pl (protect_html): Simplify. This subroutine was way too smart! Use Character entity references (eg <) instead of Numeric character references (eg. <). * texi2html.pl (unprotect_html): Use Character entity references (eg <) instead of Numeric character references (eg. <). 2000-09-14 Eric Sunshine * doc/Makefile.in: Added missing doc/Makefile.in since its absence caused 'configure' and make targets (such as 'distclean') to bomb. 2000-09-14 Olaf Bachmann * applied patches/fixes from Eric Marsden . o DTD now at the beginning of the document o default language to 'en' wasn't working which led to empty LANG="" in o missing in footer blurb o when the ToC was generated in some cases, the code used
    to indent, but didn't have any
  • tags.
    is now used in such cases, instead. 2000-09-11 Eric Sunshine * texi2html.pl: Fixed severe macro expansion bug. Macro argument parsing code did not handle nested braces ('{' and '}') at all, thus valid macro invocations such as "@mymacro{Hello @emph{there} @strong{world}.}" would fail. Prior to this fix, @mymacro would be handed the argument "Hello @emph{there", which is clearly incorrect. Now @mymacro correctly receives "Hello @emph{there} @strong{world}." as its argument. This fix also deals properly with the protected brace sequences \{, \}, @{, and @}. * texi2html.pl: Fixed severe macro expansion bug. Macro argument parsing code did not handle arguments split over multiple lines, such as "@mymacro{Hello \n world.}". Now it correctly handles macro invocations split across any number of lines, and properly flags an error at the correct location if the user forgets the closing brace '}'. * texi2html.pl: Fixed formatting errors in expansions of @SPACE, @TAB, and @NL (where SPACE, TAB, and NL represent the actual space, tab, and newline characters). The Texinfo manual explicitly states that each of these sequences should expand to a "printable" space in the [rendered] output. The example given in the manual shows that "Spacey@ @ @ @ example" should expand to "Spacey example". However, texi2html was only emitting the insignificant whitespace ' ' and '\n' into the HTML output which did not properly preserve the hard spaces in "Spacey example". Now each of these directives expands to ' ' instead. * texi2html.pl: Made aesthetic improvement to the output of @file{}, @option{}, and @samp{}. The argument string is now quoted with ` and ' _after_ the style has been applied. For instance, @samp{perl} now expands to "`perl'", whereas it used to expand to "`perl'". In my tests, this change results in more aesthetically pleasing rendered output on various browsers. 2000-08-16 Olaf Bachmann * texi2html.pl: Bug fix from: "joseph" MySimple.pm should be 'require'd, but checked is still texi2html.init. 2000-08-14 Karl Heinz Marbaise * new command line switch (Test purposes only!) to show new layout in HTML for @def stuff. * Texinfo-Documentation updated. - New chapter about ``customizing HTML'' started. - multiple files instead of one. - subdirectory doc. 2000-07-27 Olaf Bachmann * texi2html.pl: Fixed Getopt::Long::Configure("pass_through") for older versions of Getopt::Long which do not support his function. 2000-07-11 Olaf Bachmann * implemented @documentlanguage: - sets language of document, unless overwritten by -lang, or explicitly set $T2H_LANG * introduced T2H_OBSOLETE_OPTIONS to prevent obsolete options to ambiguate current options 2000-07-09 Karl Heinz Marbaise * Texinfo-Documentation: - fixes from Peter Moulder incorporated into manual. - Updated Manual o improved o indices for options, variables of script. o much more. * texi2html.init: - improvements for different languages (month names, words in different languages). 2000-07-05 Olaf Bachmann * Provided CVS anonymous read-access to Texi2html: cvs -d :pserver:t2h-anon@urmel.mathematik.uni-kl.de:/usr/local/Singular/cvsroot login cvs -d :pserver:t2h-anon@urmel.mathematik.uni-kl.de:/usr/local/Singular/cvsroot co Texi2html Passwd: texi2html * Provided CVS write-access to Texi2html: contact me for instructions 2000-07-01 Olaf Bachmann * primitive support for some toher def stuff (needs to be fixed, though) * Distribution: Incorporated texi2html.texi authored by Karl Heinz Marbaise (THANKS!) * texi2html.1.in: Updates to reflect new cmd-line options * Rewrote handling of command-line options: - based on (My)Simple.pm, and Getopt::Long -help now works and is up-to-date -help 1 lists also "not-so-important" options -help 2 lists also obsolete options - the following options were renamed: (old options still work, but are marked as obsolete) verbose ==> Verbose section_navigation ==> sec_nav output_file ==> out_file - the following options are obsoleted (still work, though): no-section_navigation ==> -nosec_nav use_acc ==> ALWAYS use accents expandinfo ==> -expand info expandtex ==> -expand tex no_verbose ==> default case monolithic ==> default case split_node ==> -split section split_chapter ==> -split chapter 2000-06-27 Olaf Bachmann * Fixed bug in anchor generation (reported by various people who noticed that @anchor may not be on one line with @item) * Fixed infinite loop on missing '@end macro' * texi2html.pl: -expandinfo and -expandtex command-line options for backward compatibility * texi2html.init: Use ISO 639 language codes for keys in $T2H_LANG hash. 2000-06-26 Olaf Bachmann * texi2html.pl: new command-line options: -nonumber, -nomenu to unset the default -number -menu * texi2html.pl: As suggested by "Richard Y. Kim" : insert for each nodename in a document (nodename is exactly as in texinfo source). * From: "Richard Y. Kim" o $T2H_FRAMES internal boolean variable which defaults to 0 o -frames command line option which changes $T2H_FRAMES to 1. o If $T2H_FRAMES is 1, then two additional files are output. If mydoc.html is output normally, then mydoc_frame.html and mydoc_frame_toc.html files are output. o The functions T2H_print_frame, and T2H_print_toc_frame are used to generate contents of these files. o The T2H_DEFAULT_print_frame and T2H_DEFAULT_print_toc_frame (defined in texi2html.ini) do the following: mydoc_frame.html is the short file with tags. mydoc_frame_toc.html is basically the short table of contents which goes on the narrow left frame. * texi2html.pl: @,{c} --> ç 2000-06-23 Olaf Bachmann * released version 1.63 * texi2html.init (T2H_DEFAULT_print_page_head): make tag very first thing in every file * fixed macro quoting and special cases of macro invocation * from "Richard Y. Kim" : o handle \} in macro arguments * from brlewis@alum.mit.edu: o Changes to facilitate CSS o -toc_file option for those who want the TOC to be index.html o Config variable $T2H_HREF_DIR_INSTEAD_FILE: if set (e.g., to index.html) replace hrefs to this file (i.e., to index.html) by ./ * texi2html.pl: index generation after value substitution 2000-05-31 Olaf Bachmann * texi2html.pl: for def_map stuff before output * texi2html.pl: applied patch from "Richard Y. Kim" for @refs with 2 or 3 args: use 3rd or 2nd argor section (in that order) as text for reference. 2000-04-18 Olaf Bachmann * texi2html.pl: Applied patches of to make texi2html work with older versions of Perl 2000-04-13 Olaf Bachmann * texi2html.pl: fixed unmacro * distribution: applied patches from Peter Moulder and Teun Burgers. * fixed "Duplicate section found" -- section may now have duplicate names * fixed bug related to $T2H_AVOID_MENU_REDUNDANCY 2000-04-12 Olaf Bachmann * release 1.62 * added $T2H_NODE_NAME_IN_MENU for enforcing node names in meny entries, and $T2H_AVOID_MENU_REDUNDANCY to avoid display of duplicate meny entry information 2000-04-11 Olaf Bachmann * texi2html.pl: fixed two small bugs reported by sunshine@sunshineco.com ( in menu,

    after itemize). * implemented @ftable, @vtable * index generation reimplemented: - Can be split over several pages, depending on the value of $T2H_SPLIT_INDEX - typesetting in fixed-width font is observed * texi2html.init: T2H_IDX_SUMMARY either set or not set, takes no argument. 2000-04-08 Peter Moulder * Makefile.am, configure.in: Generate texi2html in configure script instead of Makefile. (Due mostly to Teun Burgers.) * README, TODO, texi2html.1.in, texi2html.init, texi2html.pl: Misc. documentation changes. 2000-04-07 Olaf Bachmann * texi2html.init: $T2H_INDEX_CHAPTER introduced: if set, use this chapter for Index button, else use first chapter whose name matches 'index' (case insensitive) * fixed atuomatic pointer creation for appendix chapters * fixed handling of menu entries with description going into the next line, use numbered section names, if $T2H_NUMBER_SECTIONS * texi2html.init: $T2H_TOP_HEADING for explicitly specifying heading of top node * fixed handling of headings (no new page on -split section) * fixed bug in index (generation of section names) * stoc in _ovr.html within BLOCKQUOTES * get rid of bullets in ToC, if $T2H_NUMBER_SECTIONS 2000-04-06 Olaf Bachmann * fixed bug in creation of index entries (eval of section names) * fixed table within itemize and parapgraphs * surpress

    when within
    	* allow @include within top node
    
    2000-04-03  Olaf Bachmann  
    
    	* texi2html.init: By default, T2H_TOP_FILE is set to '' 
    	* texi2html.pl: $docu_top=$T2H_TOP_FILE || $docu_name. $docu_ext;
    
    2000-03-31  Olaf Bachmann  
    
    	* texi2html.pl: $complex_format_map for complex enclosing
    	constructs where which: 
    	* texi2html.init:$T2H_EXAMPLE_INDENT_CELL,
    	$T2H_SMALL_EXAMPLE_INDENT_CELL, $T2H_SMALL_FONT_SIZE for
    	customizing indent/font size of block-enclosing texinfo command
    	(@example, @format, @display, etc).
    	* Release version 1.61.
    
    2000-03-29  Olaf Bachmann  
    
    	* Cleaned up texi2html.pl and added loading of init file (when
    	texi2html.pl is run) such that it can directly be used as script
    	(otherwise, debugging is much harder).
    
    	* fixed getpwuid 
    
    	* Added T2H_print_chapter_header, T2H_print_chapter_footer for
    	more fine-grained control of T2H_SPLIT eq 'chapter', added option
    	-section_navigation, $T2H_SECTION_NAVIGATION to suppress output of
    	navigation panels per section
    
    	* Changed naming and and calling convention of customizable subs:
    	They all have prefix T2H_, are called with &$T2H_, are assigned by 
    	$T2H_ = \&T2H_DEFAULT_.
    
    	* texi2html.init: Incorporated changed of Peter Moulder:
    	
    2000-03-27  Olaf Bachmann  
    
    	* debian/*: deleted
    	* texi2html.pl: Incorporated changes of Peter Moulder
    	* texi2html.pl: Automatic node pointer creation added
    	* texi2html.pl: @enddots, @exclamdown, etc added
    
    2000-03-26  Peter Moulder  
    
    	* texi2html.init: Address a couple of weblint/tidy warnings.
    
    	* texi2html.init:
    	* texi2html.pl: The init file is inserted into the executable at
    	build time (see Makefile.am).
    
    	* texi2html.pl: Source each of @sysconfdir@/texi2htmlrc and
    	$HOME/.texi2htmlrc if it exists, after processing texi2html.init
    	but before anything on the command-line.
    	
    	Allow -split_chapter, -split_node, -monolithic options, which is
    	what previous versions of texi2html used.
    	
    	Support `@command{...}'.
    	
    	Add --help, --version options.
    	
    	-sidx isn't used, so comment out.
    
    	* configure.in:
    	* Makefile.am:
    	* autogen.sh: New files.
    
    	* configure.in: Change version number from 1.60Beta to 1.59.2.
    
    	* debian/*: New files.
    
    	* texi2html.1.in:
    	* texi2html.pl: Extract the man page into a separate file.  At the
    	moment, the man page is even installed separately (with
    	texi2html.pl having `.so @MANPAGE_PATH@' in place of the
    	manpage).  Conceivably we could add a configure option to
    	construct everything as one file like we used to; just replace
    	that text with `@EMBEDDED_MANPAGE@', which would be replaced with
    	either the existing `.so @MANPAGE_PATH@' or with texi2html.1
    	contents the way texi2html.init is done.
    	
    2000-03-14  Olaf Bachmann  
    
    	* texi2html.pl: center @image by default, can be overwritten by
    	T2H_CENTER_IMAGE (sunshine@sunshineco.com)
    
    # vim:tabstop=8:shiftwidth=8
    texi2html-1.82/texi2html.spec0000644000175000017500000000502511264347127020035 0ustar  flichtenheldflichtenheldName: texi2html
    Version: 1.82
    Release: 1
    # GPLv2+ is for the code
    # OFSFDL (Old FSF Documentation License) for the documentation
    # CC-BY-SA or GPLv2 for the images
    License: GPLv2+ and OFSFDL and (CC-BY-SA or GPLv2)
    Group: Applications/Text
    Summary: A highly customizable texinfo to HTML and other formats translator
    Source0: http://download.savannah.nongnu.org/releases/%{name}/%{name}-%{version}.tar.bz2
    URL: http://www.nongnu.org/texi2html/
    Requires(post): /sbin/install-info
    Requires(preun): /sbin/install-info
    # perl is picked up automatically in most cases and the package may have 
    # a different name so it is better not to require it. Moreover such old perl
    # is unlikely to show up in a rpm based distribution.
    #Requires: perl >= 5.004
    Requires: latex2html
    BuildRequires: perl(Text::Unidecode) 
    # not detected automatically because it is required at runtime based on
    # user configuration
    Requires: perl(Text::Unidecode)
    BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
    BuildArch: noarch
    
    %description
    The basic purpose of texi2html is to convert Texinfo documents into HTML, 
    and other formats.  Configuration files written in perl provide fine degree 
    of control over the final output, allowing most every aspect of the final 
    output not specified in the Texinfo input file to be specified.  
    
    %prep
    %setup -q
    
    %build
    %configure
    make %{?_smp_mflags}
    
    %install
    rm -rf $RPM_BUILD_ROOT
    make install DESTDIR=$RPM_BUILD_ROOT 
    rm -f $RPM_BUILD_ROOT%{_infodir}/dir
    
    # directories shared by all the texinfo implementations for common
    # config files, like htmlxref.cnf
    mkdir -p $RPM_BUILD_ROOT%{_datadir}/texinfo $RPM_BUILD_ROOT%{_sysconfdir}/texinfo
    
    
    %clean
    rm -rf $RPM_BUILD_ROOT
    
    %post
    /sbin/install-info %{_infodir}/%{name}.info %{_infodir}/dir || :
    
    %preun
    if [ $1 = 0 ]; then
      /sbin/install-info --delete %{_infodir}/%{name}.info %{_infodir}/dir || :
    fi
    
    %files
    %defattr(-,root,root,-)
    %doc AUTHORS COPYING ChangeLog NEWS README TODO %{name}.init
    %{_bindir}/%{name}
    %{_datadir}/texinfo/html/%{name}.html
    %{_mandir}/man*/%{name}*
    %{_infodir}/%{name}.info*
    %dir %{_datadir}/%{name}
    %{_datadir}/%{name}/*.init
    %{_datadir}/%{name}/*.texi
    %dir %{_datadir}/%{name}/i18n/
    %{_datadir}/%{name}/i18n/*
    %dir %{_datadir}/%{name}/images/
    %{_datadir}/%{name}/images/*
    %dir %{_datadir}/texinfo
    %dir %{_sysconfdir}/texinfo
    
    %changelog
    * Sun Sep  9 2007 Patrice Dumas  1.82-1
    - update to 1.82
    
    * Mon Nov 14 2005 Patrice Dumas  1.77-1
    - cleanups
    
    * Mon Mar 23 2004 Patrice Dumas  0:1.69-0.fdr.1
    - Initial build.
    texi2html-1.82/buildt2h.sh0000644000175000017500000000043311264347127017310 0ustar  flichtenheldflichtenheld#! /bin/sh
    
    if [ -z $8 ]; then
    	exit 1
    fi
    
    echo "regenerating $1 from $3 $4 $5 $6 $2 $7 $8"
    
    sed -e "/@MYSIMPLE@/r $3" \
    	    -e "/@T2H_I18N@/r $4" \
    	    -e "/@INIT@/r $5" \
    	    -e "/@T2H_TRANSLATIONS_FILE@/r $6" \
    	    -e "/@T2H_L2H_INIT@/r $7" \
    	    -e "/@T2H_L2H@/r $8" $2 >$1
    texi2html-1.82/install-sh0000755000175000017500000003160011264347127017243 0ustar  flichtenheldflichtenheld#!/bin/sh
    # install - install a program, script, or datafile
    
    scriptversion=2006-10-14.15
    
    # This originates from X11R5 (mit/util/scripts/install.sh), which was
    # later released in X11R6 (xc/config/util/install.sh) with the
    # following copyright and license.
    #
    # Copyright (C) 1994 X Consortium
    #
    # Permission is hereby granted, free of charge, to any person obtaining a copy
    # of this software and associated documentation files (the "Software"), to
    # deal in the Software without restriction, including without limitation the
    # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
    # sell copies of the Software, and to permit persons to whom the Software is
    # furnished to do so, subject to the following conditions:
    #
    # The above copyright notice and this permission notice shall be included in
    # all copies or substantial portions of the Software.
    #
    # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
    # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
    # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
    # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    #
    # Except as contained in this notice, the name of the X Consortium shall not
    # be used in advertising or otherwise to promote the sale, use or other deal-
    # ings in this Software without prior written authorization from the X Consor-
    # tium.
    #
    #
    # FSF changes to this file are in the public domain.
    #
    # Calling this script install-sh is preferred over install.sh, to prevent
    # `make' implicit rules from creating a file called install from it
    # when there is no Makefile.
    #
    # This script is compatible with the BSD install script, but was written
    # from scratch.
    
    nl='
    '
    IFS=" ""	$nl"
    
    # set DOITPROG to echo to test this script
    
    # Don't use :- since 4.3BSD and earlier shells don't like it.
    doit="${DOITPROG-}"
    if test -z "$doit"; then
      doit_exec=exec
    else
      doit_exec=$doit
    fi
    
    # Put in absolute file names if you don't have them in your path;
    # or use environment vars.
    
    mvprog="${MVPROG-mv}"
    cpprog="${CPPROG-cp}"
    chmodprog="${CHMODPROG-chmod}"
    chownprog="${CHOWNPROG-chown}"
    chgrpprog="${CHGRPPROG-chgrp}"
    stripprog="${STRIPPROG-strip}"
    rmprog="${RMPROG-rm}"
    mkdirprog="${MKDIRPROG-mkdir}"
    
    posix_glob=
    posix_mkdir=
    
    # Desired mode of installed file.
    mode=0755
    
    chmodcmd=$chmodprog
    chowncmd=
    chgrpcmd=
    stripcmd=
    rmcmd="$rmprog -f"
    mvcmd="$mvprog"
    src=
    dst=
    dir_arg=
    dstarg=
    no_target_directory=
    
    usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
       or: $0 [OPTION]... SRCFILES... DIRECTORY
       or: $0 [OPTION]... -t DIRECTORY SRCFILES...
       or: $0 [OPTION]... -d DIRECTORIES...
    
    In the 1st form, copy SRCFILE to DSTFILE.
    In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
    In the 4th, create DIRECTORIES.
    
    Options:
    -c         (ignored)
    -d         create directories instead of installing files.
    -g GROUP   $chgrpprog installed files to GROUP.
    -m MODE    $chmodprog installed files to MODE.
    -o USER    $chownprog installed files to USER.
    -s         $stripprog installed files.
    -t DIRECTORY  install into DIRECTORY.
    -T         report an error if DSTFILE is a directory.
    --help     display this help and exit.
    --version  display version info and exit.
    
    Environment variables override the default commands:
      CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
    "
    
    while test $# -ne 0; do
      case $1 in
        -c) shift
            continue;;
    
        -d) dir_arg=true
            shift
            continue;;
    
        -g) chgrpcmd="$chgrpprog $2"
            shift
            shift
            continue;;
    
        --help) echo "$usage"; exit $?;;
    
        -m) mode=$2
            shift
            shift
    	case $mode in
    	  *' '* | *'	'* | *'
    '*	  | *'*'* | *'?'* | *'['*)
    	    echo "$0: invalid mode: $mode" >&2
    	    exit 1;;
    	esac
            continue;;
    
        -o) chowncmd="$chownprog $2"
            shift
            shift
            continue;;
    
        -s) stripcmd=$stripprog
            shift
            continue;;
    
        -t) dstarg=$2
    	shift
    	shift
    	continue;;
    
        -T) no_target_directory=true
    	shift
    	continue;;
    
        --version) echo "$0 $scriptversion"; exit $?;;
    
        --)	shift
    	break;;
    
        -*)	echo "$0: invalid option: $1" >&2
    	exit 1;;
    
        *)  break;;
      esac
    done
    
    if test $# -ne 0 && test -z "$dir_arg$dstarg"; then
      # When -d is used, all remaining arguments are directories to create.
      # When -t is used, the destination is already specified.
      # Otherwise, the last argument is the destination.  Remove it from $@.
      for arg
      do
        if test -n "$dstarg"; then
          # $@ is not empty: it contains at least $arg.
          set fnord "$@" "$dstarg"
          shift # fnord
        fi
        shift # arg
        dstarg=$arg
      done
    fi
    
    if test $# -eq 0; then
      if test -z "$dir_arg"; then
        echo "$0: no input file specified." >&2
        exit 1
      fi
      # It's OK to call `install-sh -d' without argument.
      # This can happen when creating conditional directories.
      exit 0
    fi
    
    if test -z "$dir_arg"; then
      trap '(exit $?); exit' 1 2 13 15
    
      # Set umask so as not to create temps with too-generous modes.
      # However, 'strip' requires both read and write access to temps.
      case $mode in
        # Optimize common cases.
        *644) cp_umask=133;;
        *755) cp_umask=22;;
    
        *[0-7])
          if test -z "$stripcmd"; then
    	u_plus_rw=
          else
    	u_plus_rw='% 200'
          fi
          cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
        *)
          if test -z "$stripcmd"; then
    	u_plus_rw=
          else
    	u_plus_rw=,u+rw
          fi
          cp_umask=$mode$u_plus_rw;;
      esac
    fi
    
    for src
    do
      # Protect names starting with `-'.
      case $src in
        -*) src=./$src ;;
      esac
    
      if test -n "$dir_arg"; then
        dst=$src
        dstdir=$dst
        test -d "$dstdir"
        dstdir_status=$?
      else
    
        # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
        # might cause directories to be created, which would be especially bad
        # if $src (and thus $dsttmp) contains '*'.
        if test ! -f "$src" && test ! -d "$src"; then
          echo "$0: $src does not exist." >&2
          exit 1
        fi
    
        if test -z "$dstarg"; then
          echo "$0: no destination specified." >&2
          exit 1
        fi
    
        dst=$dstarg
        # Protect names starting with `-'.
        case $dst in
          -*) dst=./$dst ;;
        esac
    
        # If destination is a directory, append the input filename; won't work
        # if double slashes aren't ignored.
        if test -d "$dst"; then
          if test -n "$no_target_directory"; then
    	echo "$0: $dstarg: Is a directory" >&2
    	exit 1
          fi
          dstdir=$dst
          dst=$dstdir/`basename "$src"`
          dstdir_status=0
        else
          # Prefer dirname, but fall back on a substitute if dirname fails.
          dstdir=`
    	(dirname "$dst") 2>/dev/null ||
    	expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
    	     X"$dst" : 'X\(//\)[^/]' \| \
    	     X"$dst" : 'X\(//\)$' \| \
    	     X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
    	echo X"$dst" |
    	    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
    		   s//\1/
    		   q
    		 }
    		 /^X\(\/\/\)[^/].*/{
    		   s//\1/
    		   q
    		 }
    		 /^X\(\/\/\)$/{
    		   s//\1/
    		   q
    		 }
    		 /^X\(\/\).*/{
    		   s//\1/
    		   q
    		 }
    		 s/.*/./; q'
          `
    
          test -d "$dstdir"
          dstdir_status=$?
        fi
      fi
    
      obsolete_mkdir_used=false
    
      if test $dstdir_status != 0; then
        case $posix_mkdir in
          '')
    	# Create intermediate dirs using mode 755 as modified by the umask.
    	# This is like FreeBSD 'install' as of 1997-10-28.
    	umask=`umask`
    	case $stripcmd.$umask in
    	  # Optimize common cases.
    	  *[2367][2367]) mkdir_umask=$umask;;
    	  .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
    
    	  *[0-7])
    	    mkdir_umask=`expr $umask + 22 \
    	      - $umask % 100 % 40 + $umask % 20 \
    	      - $umask % 10 % 4 + $umask % 2
    	    `;;
    	  *) mkdir_umask=$umask,go-w;;
    	esac
    
    	# With -d, create the new directory with the user-specified mode.
    	# Otherwise, rely on $mkdir_umask.
    	if test -n "$dir_arg"; then
    	  mkdir_mode=-m$mode
    	else
    	  mkdir_mode=
    	fi
    
    	posix_mkdir=false
    	case $umask in
    	  *[123567][0-7][0-7])
    	    # POSIX mkdir -p sets u+wx bits regardless of umask, which
    	    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
    	    ;;
    	  *)
    	    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
    	    trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
    
    	    if (umask $mkdir_umask &&
    		exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
    	    then
    	      if test -z "$dir_arg" || {
    		   # Check for POSIX incompatibilities with -m.
    		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
    		   # other-writeable bit of parent directory when it shouldn't.
    		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
    		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
    		   case $ls_ld_tmpdir in
    		     d????-?r-*) different_mode=700;;
    		     d????-?--*) different_mode=755;;
    		     *) false;;
    		   esac &&
    		   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
    		     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
    		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
    		   }
    		 }
    	      then posix_mkdir=:
    	      fi
    	      rmdir "$tmpdir/d" "$tmpdir"
    	    else
    	      # Remove any dirs left behind by ancient mkdir implementations.
    	      rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
    	    fi
    	    trap '' 0;;
    	esac;;
        esac
    
        if
          $posix_mkdir && (
    	umask $mkdir_umask &&
    	$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
          )
        then :
        else
    
          # The umask is ridiculous, or mkdir does not conform to POSIX,
          # or it failed possibly due to a race condition.  Create the
          # directory the slow way, step by step, checking for races as we go.
    
          case $dstdir in
    	/*) prefix=/ ;;
    	-*) prefix=./ ;;
    	*)  prefix= ;;
          esac
    
          case $posix_glob in
            '')
    	  if (set -f) 2>/dev/null; then
    	    posix_glob=true
    	  else
    	    posix_glob=false
    	  fi ;;
          esac
    
          oIFS=$IFS
          IFS=/
          $posix_glob && set -f
          set fnord $dstdir
          shift
          $posix_glob && set +f
          IFS=$oIFS
    
          prefixes=
    
          for d
          do
    	test -z "$d" && continue
    
    	prefix=$prefix$d
    	if test -d "$prefix"; then
    	  prefixes=
    	else
    	  if $posix_mkdir; then
    	    (umask=$mkdir_umask &&
    	     $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
    	    # Don't fail if two instances are running concurrently.
    	    test -d "$prefix" || exit 1
    	  else
    	    case $prefix in
    	      *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
    	      *) qprefix=$prefix;;
    	    esac
    	    prefixes="$prefixes '$qprefix'"
    	  fi
    	fi
    	prefix=$prefix/
          done
    
          if test -n "$prefixes"; then
    	# Don't fail if two instances are running concurrently.
    	(umask $mkdir_umask &&
    	 eval "\$doit_exec \$mkdirprog $prefixes") ||
    	  test -d "$dstdir" || exit 1
    	obsolete_mkdir_used=true
          fi
        fi
      fi
    
      if test -n "$dir_arg"; then
        { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
        { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
        { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
          test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
      else
    
        # Make a couple of temp file names in the proper directory.
        dsttmp=$dstdir/_inst.$$_
        rmtmp=$dstdir/_rm.$$_
    
        # Trap to clean up those temp files at exit.
        trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
    
        # Copy the file name to the temp name.
        (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
    
        # and set any options; do chmod last to preserve setuid bits.
        #
        # If any of these fail, we abort the whole thing.  If we want to
        # ignore errors from any of these, just make sure not to ignore
        # errors from the above "$doit $cpprog $src $dsttmp" command.
        #
        { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
          && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
          && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
          && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
    
        # Now rename the file to the real destination.
        { $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null \
          || {
    	   # The rename failed, perhaps because mv can't rename something else
    	   # to itself, or perhaps because mv is so ancient that it does not
    	   # support -f.
    
    	   # Now remove or move aside any old file at destination location.
    	   # We try this two ways since rm can't unlink itself on some
    	   # systems and the destination file might be busy for other
    	   # reasons.  In this case, the final cleanup might fail but the new
    	   # file should still install successfully.
    	   {
    	     if test -f "$dst"; then
    	       $doit $rmcmd -f "$dst" 2>/dev/null \
    	       || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null \
    		     && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }; }\
    	       || {
    		 echo "$0: cannot unlink or rename $dst" >&2
    		 (exit 1); exit 1
    	       }
    	     else
    	       :
    	     fi
    	   } &&
    
    	   # Now rename the file to the real destination.
    	   $doit $mvcmd "$dsttmp" "$dst"
    	 }
        } || exit 1
    
        trap '' 0
      fi
    done
    
    # Local variables:
    # eval: (add-hook 'write-file-hooks 'time-stamp)
    # time-stamp-start: "scriptversion="
    # time-stamp-format: "%:y-%02m-%02d.%02H"
    # time-stamp-end: "$"
    # End:
    texi2html-1.82/translations.pl0000644000175000017500000025676011264347127020335 0ustar  flichtenheldflichtenheld$LANGUAGES->{'de'} = {
                           '  The buttons in the navigation panels have the following meaning:' => ' Die Links in der Navigationsleiste haben die folgende Bedeutung: ',
                           '  where the @strong{ Example } assumes that the current position is at @strong{ Subsubsection One-Two-Three } of a document of the following structure:' => ' wobei das @strong{ Beispiel } annimmt, dass die aktuelle Position bei @strong{ Unterabschnitt 1-2-3 } in einem Dokument mit folgender Struktur liegt:',
                           ' Up ' => ' Nach oben ',
                           '%{acronym_like} (%{explanation})' => '%{acronym_like} (%{explanation})',
                           '%{month} %{day}, %{year}' => '%{day}. %{month} %{year}',
                           '%{name} of %{class}' => '',
                           '%{name} on %{class}' => '',
                           '%{node_file_href}' => '',
                           '%{node_file_href} @cite{%{book}}' => '',
                           '%{node_file_href} section `%{section}\' in @cite{%{book}}' => '%{node_file_href} in Abschnitt `%{section}\' in @cite{%{book}}',
                           '%{reference_name}' => '%{reference_name}',
                           '%{style} %{number}' => '%{style} %{number}',
                           '%{style}: %{caption_first_line}' => '%{style}: %{caption_first_line}',
                           '%{style}: %{shortcaption_first_line}' => '%{style}: %{shortcaption_first_line}',
                           '@b{%{quotation_arg}:} ' => '@b{%{quotation_arg}:} ',
                           '@cite{%{book}}' => '@cite{%{book}}',
                           'About' => '@"Uber',
                           'About (help)' => '@"Uber (Hilfe)',
                           'About This Document' => '@"Uber dieses Dokument',
                           'April' => 'April',
                           'August' => 'August',
                           'Back' => 'Zur@"uck',
                           'Back section in previous file' => '',
                           'Beginning of this chapter or previous chapter' => 'Anfang dieses oder des letzten Kapitels',
                           'Button' => '',
                           'Contents' => 'Inhalt',
                           'Cover (top) of document' => 'Titelseite des Dokuments',
                           'Current Position' => 'Aktuelle Position',
                           'Current section' => 'Aktueller Abschnitt',
                           'December' => 'Dezember',
                           'FastBack' => '',
                           'FastForward' => '',
                           'February' => 'Februar',
                           'First' => '',
                           'First section in reading order' => 'Erster Abschnitt in Lesereihenfolge',
                           'Following' => '',
                           'Following node' => 'N@"achster Knoten',
                           'Footnotes' => 'Fu@ss{}noten',
                           'Forward' => 'Nach vorne',
                           'Forward section in next file' => '',
                           'From 1.2.3 go to' => 'Von 1.2.3 gehe zu',
                           'Go to' => 'Gehe zu',
                           'Index' => 'Index',
                           'Index Entry' => 'Indexeintrag',
                           'January' => 'Januar',
                           'July' => 'Juli',
                           'Jump to' => 'Springe zu',
                           'June' => 'Juni',
                           'Last' => '',
                           'Last section in reading order' => 'Letzter Abschnitt in Lesereihenfolge',
                           'March' => 'M@"arz',
                           'May' => 'Mai',
                           'Menu:' => 'Auswahl:',
                           'Name' => 'Name',
                           'Next' => '',
                           'Next chapter' => 'N@"achstes Kapitel',
                           'Next file' => '',
                           'Next node' => 'N@"achster Knoten',
                           'Next section in reading order' => 'N@"achster Abschnitt in Lesereihenfolge',
                           'Next section on same level' => 'N@"achster Abschitt derselben Ebene',
                           'NextFile' => '',
                           'Node following in node reading order' => 'N@"achster Abschnitt in Lesereihenfolge',
                           'Node up' => 'Knoten nach oben',
                           'NodeNext' => '',
                           'NodePrev' => '',
                           'NodeUp' => '',
                           'November' => 'November',
                           'October' => 'Oktober',
                           'Overview' => '@"Ubersicht',
                           'Overview:' => '@"Ubersicht:',
                           'Prev' => '',
                           'PrevFile' => '',
                           'Previous file' => '',
                           'Previous node' => 'Voriger Knoten',
                           'Previous section in reading order' => 'Voriger Abschnitt in Lesereihenfolge',
                           'Previous section on same level' => 'Voriger Abschnitt derselben Ebene',
                           'Section' => 'Abschnitt',
                           'Section One' => 'Abschnitt 1',
                           'See %{node_file_href}' => 'Siehe %{node_file_href}',
                           'See %{node_file_href} @cite{%{book}}' => 'Siehe %{node_file_href} @cite{%{book}}',
                           'See %{node_file_href} section `%{section}\' in @cite{%{book}}' => 'Siehe %{node_file_href} in Abschnitt `%{section}\' in @cite{%{book}}',
                           'See %{reference_name}' => '',
                           'See @cite{%{book}}' => '',
                           'See section %{reference_name}' => '',
                           'See section `%{section}\' in @cite{%{book}}' => 'Siehe Abschnitt `%{section}\' in @cite{%{book}}',
                           'September' => 'September',
                           'Short Table of Contents' => 'Kurzes Inhaltsverzeichnis',
                           'Short table of contents' => 'Kurzes Inhaltsverzeichnis',
                           'Subsection One-Four' => 'Unterabschnitt 1-4',
                           'Subsection One-One' => 'Unterabschnitt 1-1',
                           'Subsection One-Three' => 'Unterabschnitt 1-3',
                           'Subsection One-Two' => 'Unterabschnitt 1-2',
                           'Subsubsection One-Two-Four' => 'Unterabschnitt 1-2-4',
                           'Subsubsection One-Two-One' => 'Unterabschnitt 1-2-1',
                           'Subsubsection One-Two-Three' => 'Unterabschnitt 1-2-3',
                           'Subsubsection One-Two-Two' => 'Unterabschnitt 1-2-2',
                           'T2H_today' => '',
                           'Table of Contents' => 'Inhaltsverzeichnis',
                           'Table of contents' => 'Inhaltsverzeichnis',
                           'The node you are looking for is at %{href}.' => 'Der Knoten, den Sie sehen, befindet sich bei %{href}',
                           'This' => '',
                           'This document was generated by @emph{%{user}} on @emph{%{date}} using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Dieses Dokument wurde erzeugt von @emph{%{user}} am @emph{%{date}} durch @uref{%{program_homepage}, @emph{%{program}}}.',
                           'This document was generated by @emph{%{user}} using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Dieses Dokument wurde erzeugt von @emph{%{user}} durch @uref{%{program_homepage}, @emph{%{program}}}.',
                           'This document was generated on @i{%{date}} using @uref{%{program_homepage}, @i{%{program}}}.' => 'Dieses Dokument wurde erzeugt am @i{%{date}} durch @uref{%{program_homepage}, @i{%{program}}}.',
                           'This document was generated using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Dieses Dokument wurde erzeugt durch @uref{%{program_homepage}, @emph{%{program}}}.',
                           'Top' => 'Anfang',
                           'Untitled Document' => 'Unbenanntes Dokumen',
                           'Up' => 'Nach oben',
                           'Up node' => 'Knoten nach oben',
                           'Up section' => 'Abschnitt nach oben',
                           'by @emph{%{user}}' => 'von @emph{%{user}}',
                           'by @emph{%{user}} on @emph{%{date}}' => 'von @emph{%{user}} am @emph{%{date}}',
                           'current' => '',
                           'on @emph{%{date}}' => 'am @emph{%{date}}',
                           'section `%{section}\' in @cite{%{book}}' => 'Abschnitt `%{section}\' in @cite{%{book}}',
                           'see %{node_file_href}' => 'siehe %{node_file_href}',
                           'see %{node_file_href} @cite{%{book}}' => 'siehe %{node_file_href} @cite{%{book}}',
                           'see %{node_file_href} section `%{section}\' in @cite{%{book}}' => 'siehe %{node_file_href} im Abschnitt `%{section}\' in @cite{%{book}}',
                           'see %{reference_name}' => 'siehe %{reference_name}',
                           'see @cite{%{book}}' => 'siehe @cite{%{book}}',
                           'see section %{reference_name}' => 'siehe Abschnitt %{reference_name}',
                           'see section `%{section}\' in @cite{%{book}}' => 'siehe Abschnitt `%{section}\' in @cite{%{book}}',
                           'unknown' => 'unbekannt'
                         };
    
    $T2H_OBSOLETE_STRINGS->{'de'} = {
                                      'See' => 'Siehe',
                                      'section' => 'Abschnitt',
                                      'see' => 'siehe'
                                    };
    
    
    $LANGUAGES->{'en'} = {
                           '  The buttons in the navigation panels have the following meaning:' => '',
                           '  where the @strong{ Example } assumes that the current position is at @strong{ Subsubsection One-Two-Three } of a document of the following structure:' => '',
                           ' Up ' => '',
                           '%{acronym_like} (%{explanation})' => '',
                           '%{month} %{day}, %{year}' => '',
                           '%{name} of %{class}' => '',
                           '%{name} on %{class}' => '',
                           '%{node_file_href}' => '',
                           '%{node_file_href} @cite{%{book}}' => '',
                           '%{node_file_href} section `%{section}\' in @cite{%{book}}' => '',
                           '%{reference_name}' => '',
                           '%{style} %{number}' => '',
                           '%{style}: %{caption_first_line}' => '',
                           '%{style}: %{shortcaption_first_line}' => '',
                           '@b{%{quotation_arg}:} ' => '',
                           '@cite{%{book}}' => '',
                           'About' => '',
                           'About (help)' => '',
                           'About This Document' => '',
                           'April' => '',
                           'August' => '',
                           'Back' => '',
                           'Back section in previous file' => '',
                           'Beginning of this chapter or previous chapter' => '',
                           'Button' => '',
                           'Contents' => '',
                           'Cover (top) of document' => '',
                           'Current Position' => '',
                           'Current section' => '',
                           'December' => '',
                           'FastBack' => '',
                           'FastForward' => '',
                           'February' => '',
                           'First' => '',
                           'First section in reading order' => '',
                           'Following' => '',
                           'Following node' => '',
                           'Footnotes' => '',
                           'Forward' => '',
                           'Forward section in next file' => '',
                           'From 1.2.3 go to' => '',
                           'Go to' => '',
                           'Index' => '',
                           'Index Entry' => '',
                           'January' => '',
                           'July' => '',
                           'Jump to' => '',
                           'June' => '',
                           'Last' => '',
                           'Last section in reading order' => '',
                           'March' => '',
                           'May' => '',
                           'Menu:' => '',
                           'Name' => '',
                           'Next' => '',
                           'Next chapter' => '',
                           'Next file' => '',
                           'Next node' => '',
                           'Next section in reading order' => '',
                           'Next section on same level' => '',
                           'NextFile' => '',
                           'Node following in node reading order' => '',
                           'Node up' => '',
                           'NodeNext' => '',
                           'NodePrev' => '',
                           'NodeUp' => '',
                           'November' => '',
                           'October' => '',
                           'Overview' => '',
                           'Overview:' => '',
                           'Prev' => '',
                           'PrevFile' => '',
                           'Previous file' => '',
                           'Previous node' => '',
                           'Previous section in reading order' => '',
                           'Previous section on same level' => '',
                           'Section' => '',
                           'Section One' => '',
                           'See %{node_file_href}' => '',
                           'See %{node_file_href} @cite{%{book}}' => '',
                           'See %{node_file_href} section `%{section}\' in @cite{%{book}}' => '',
                           'See %{reference_name}' => '',
                           'See @cite{%{book}}' => '',
                           'See section %{reference_name}' => '',
                           'See section `%{section}\' in @cite{%{book}}' => '',
                           'September' => '',
                           'Short Table of Contents' => '',
                           'Short table of contents' => '',
                           'Subsection One-Four' => '',
                           'Subsection One-One' => '',
                           'Subsection One-Three' => '',
                           'Subsection One-Two' => '',
                           'Subsubsection One-Two-Four' => '',
                           'Subsubsection One-Two-One' => '',
                           'Subsubsection One-Two-Three' => '',
                           'Subsubsection One-Two-Two' => '',
                           'T2H_today' => '%s, %d %d',
                           'Table of Contents' => '',
                           'Table of contents' => '',
                           'The node you are looking for is at %{href}.' => '',
                           'This' => '',
                           'This document was generated by @emph{%{user}} on @emph{%{date}} using @uref{%{program_homepage}, @emph{%{program}}}.' => '',
                           'This document was generated by @emph{%{user}} using @uref{%{program_homepage}, @emph{%{program}}}.' => '',
                           'This document was generated on @i{%{date}} using @uref{%{program_homepage}, @i{%{program}}}.' => '',
                           'This document was generated using @uref{%{program_homepage}, @emph{%{program}}}.' => '',
                           'Top' => '',
                           'Untitled Document' => '',
                           'Up' => '',
                           'Up node' => '',
                           'Up section' => '',
                           'by @emph{%{user}}' => '',
                           'by @emph{%{user}} on @emph{%{date}}' => '',
                           'current' => '',
                           'on @emph{%{date}}' => '',
                           'section `%{section}\' in @cite{%{book}}' => '',
                           'see %{node_file_href}' => '',
                           'see %{node_file_href} @cite{%{book}}' => '',
                           'see %{node_file_href} section `%{section}\' in @cite{%{book}}' => '',
                           'see %{reference_name}' => '',
                           'see @cite{%{book}}' => '',
                           'see section %{reference_name}' => '',
                           'see section `%{section}\' in @cite{%{book}}' => '',
                           'unknown' => ''
                         };
    
    $T2H_OBSOLETE_STRINGS->{'en'} = {};
    
    
    $LANGUAGES->{'es'} = {
                           '  The buttons in the navigation panels have the following meaning:' => '  Los botones de los paneles de navegaci@\'on tienen el significado siguiente:',
                           '  where the @strong{ Example } assumes that the current position is at @strong{ Subsubsection One-Two-Three } of a document of the following structure:' => '  donde el @strong{ Ejemplo } supone que la posición actual está en la @strong{ Sub-subsecci@\'on uno-dos-tres } de un documento de la estructura siguiente:',
                           ' Up ' => ' Subir ',
                           '%{acronym_like} (%{explanation})' => '',
                           '%{month} %{day}, %{year}' => 'el %{day} %{month} %{year}',
                           '%{name} of %{class}' => '%{name} de %{class}',
                           '%{name} on %{class}' => '%{name} en %{class}',
                           '%{node_file_href}' => '',
                           '%{node_file_href} @cite{%{book}}' => '',
                           '%{node_file_href} section `%{section}\' in @cite{%{book}}' => '%{node_file_href} secci@\'on `%{section}\' en @cite{%{book}}',
                           '%{reference_name}' => '',
                           '%{style} %{number}' => '',
                           '%{style}: %{caption_first_line}' => '',
                           '%{style}: %{shortcaption_first_line}' => '',
                           '@b{%{quotation_arg}:} ' => '',
                           '@cite{%{book}}' => '',
                           'About' => 'Acerca de',
                           'About (help)' => 'Acerca de (p@\'agina de ayuda)',
                           'About This Document' => 'Acerca de este documento',
                           'April' => 'abril',
                           'August' => 'agosto',
                           'Back' => 'Atr@\'as',
                           'Back section in previous file' => 'Retroceder secci@\'on en el archivo anterior',
                           'Beginning of this chapter or previous chapter' => 'Inicio de este cap@\'itulo o cap@\'itulo anterior',
                           'Button' => 'Bot@\'on',
                           'Contents' => '@\'Indice general',
                           'Cover (top) of document' => 'Portada del documento',
                           'Current Position' => 'Posici@\'on actual',
                           'Current section' => 'Secci@\'on actual',
                           'December' => 'diciembre',
                           'FastBack' => 'Retroceso r@\'apido',
                           'FastForward' => 'Avance r@\'apido',
                           'February' => 'febrero',
                           'First' => 'Primero',
                           'First section in reading order' => 'Primera secci@\'on en orden de lectura',
                           'Following' => 'Siguiente',
                           'Following node' => 'Nodo siguiente',
                           'Footnotes' => 'Notas el pie',
                           'Forward' => 'Adelante',
                           'Forward section in next file' => 'Avanzar secci@\'on en el pr@\'oximo archivo',
                           'From 1.2.3 go to' => 'Desde 1.2.3 ir a',
                           'Go to' => 'Ir a',
                           'Index' => '@\'Indice',
                           'Index Entry' => 'Entrada de @\'indice',
                           'January' => 'enero',
                           'July' => 'julio',
                           'Jump to' => 'Saltar a',
                           'June' => 'junio',
                           'Last' => '@\'Ultimo',
                           'Last section in reading order' => '@\'Ultima secci@\'on en orden de lectura',
                           'March' => 'marzo',
                           'May' => 'mayo',
                           'Menu:' => 'Men@\'u:',
                           'Name' => 'Nombre',
                           'Next' => 'Siguiente',
                           'Next chapter' => 'Cap@\'itulo siguiente',
                           'Next file' => 'Archivo siguiente',
                           'Next node' => 'Nodo siguiente',
                           'Next section in reading order' => 'Secci@\'on siguiente en orden de lectura',
                           'Next section on same level' => 'Secci@\'on siguiente en el mismo nivel',
                           'NextFile' => 'ArchivoSiguiente',
                           'Node following in node reading order' => 'Nodo siguiente en orden de lectura de nodos',
                           'Node up' => 'Subir nodo',
                           'NodeNext' => 'NodoSiguiente',
                           'NodePrev' => 'NodoAnterior',
                           'NodeUp' => 'SubirNodo',
                           'November' => 'noviembre',
                           'October' => 'octubre',
                           'Overview' => 'Panor@\'amica',
                           'Overview:' => 'Panor@\'amica:',
                           'Prev' => 'Ant',
                           'PrevFile' => 'ArchivoAnt',
                           'Previous file' => 'Archivo anterior',
                           'Previous node' => 'Nodo anterior',
                           'Previous section in reading order' => 'Secci@\'on anterior en orden de lectura',
                           'Previous section on same level' => 'Secci@\'on anterior en el mismo nivel',
                           'Section' => 'Secci@\'on',
                           'Section One' => 'Secci@\'on Uno',
                           'See %{node_file_href}' => 'V@\'ease %{node_file_href}',
                           'See %{node_file_href} @cite{%{book}}' => 'V@\'ease %{node_file_href} @cite{%{book}}',
                           'See %{node_file_href} section `%{section}\' in @cite{%{book}}' => 'V@\'ease %{node_file_href} secci@\'on `%{section}\' en @cite{%{book}}',
                           'See %{reference_name}' => 'V@\'ease %{reference_name}',
                           'See @cite{%{book}}' => 'V@\'ease @cite{%{book}}',
                           'See section %{reference_name}' => 'V@\'ease la secci@\'on  %{reference_name}',
                           'See section `%{section}\' in @cite{%{book}}' => 'V@\'ease la secci@\'on `%{section}\' en @cite{%{book}}',
                           'September' => 'septiembre',
                           'Short Table of Contents' => 'Resumen del Contenido',
                           'Short table of contents' => 'Resumen del contenido',
                           'Subsection One-Four' => 'Subsecci@\'on uno-cuatro',
                           'Subsection One-One' => 'Subsecci@\'on uno-uno',
                           'Subsection One-Three' => 'Subsecci@\'on uno-tres',
                           'Subsection One-Two' => 'Subsecci@\'on uno-dos',
                           'Subsubsection One-Two-Four' => 'Sub-subsecci@\'on uno-dos-cuatro',
                           'Subsubsection One-Two-One' => 'Sub-subsecci@\'on uno-dos-uno',
                           'Subsubsection One-Two-Three' => 'Sub-subsecci@\'on uno-dos-tres',
                           'Subsubsection One-Two-Two' => 'Sub-subsecci@\'on uno-dos-dos',
                           'T2H_today' => '%2$d %1$s %3$d',
                           'Table of Contents' => '@\'{@dotless{I}}ndice General',
                           'Table of contents' => '@\'{@dotless{I}}ndice general',
                           'The node you are looking for is at %{href}.' => 'El nodo que busca se encuentra en %{href}.',
                           'This' => 'Este',
                           'This document was generated by @emph{%{user}} on @emph{%{date}} using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Este documento ha sido generado por @emph{%{user}} el @emph{%{date}} utilizando @uref{%{program_homepage}, @emph{%{program}}}.',
                           'This document was generated by @emph{%{user}} using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Este documento ha sido generado por @emph{%{user}} utilizando @uref{%{program_homepage}, @emph{%{program}}}.',
                           'This document was generated on @i{%{date}} using @uref{%{program_homepage}, @i{%{program}}}.' => 'Este documento se generó el @i{%{date}} utilizando @uref{%{program_homepage}, @i{%{program}}}.',
                           'This document was generated using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Este documento se generó utilizando @uref{%{program_homepage}, @emph{%{program}}}.',
                           'Top' => 'Arriba',
                           'Untitled Document' => 'Documento sin t@\'itulo',
                           'Up' => 'Subir',
                           'Up node' => 'Subir nodo',
                           'Up section' => 'Subir secci@\'on',
                           'by @emph{%{user}}' => 'por @emph{%{user}',
                           'by @emph{%{user}} on @emph{%{date}}' => 'por @emph{%{user}} el @emph{%{date}}',
                           'current' => 'actual',
                           'on @emph{%{date}}' => 'el @emph{%{date}}',
                           'section `%{section}\' in @cite{%{book}}' => 'secci@\'on `%{section}\' en @cite{%{book}}',
                           'see %{node_file_href}' => 'v@\'ease %{node_file_href}',
                           'see %{node_file_href} @cite{%{book}}' => 'v@\'ease %{node_file_href} @cite{%{book}}',
                           'see %{node_file_href} section `%{section}\' in @cite{%{book}}' => 'v@\'ease %{node_file_href} secci@\'on `%{section}\' en @cite{%{book}}',
                           'see %{reference_name}' => 'v@\'ease %{reference_name}',
                           'see @cite{%{book}}' => 'v@\'ease @cite{%{book}}',
                           'see section %{reference_name}' => 'v@\'ease la secci@\'on %{reference_name}',
                           'see section `%{section}\' in @cite{%{book}}' => 'v@\'ease la secci@\'on `%{section}\' en @cite{%{book}}',
                           'unknown' => 'desconocido'
                         };
    
    $T2H_OBSOLETE_STRINGS->{'es'} = {
                                      'See' => 'V@\'ease',
                                      'section' => 'secci@\'on',
                                      'see' => 'v@\'ease'
                                    };
    
    
    $LANGUAGES->{'fr'} = {
                           '  The buttons in the navigation panels have the following meaning:' => '  Les boutons de navigation ont la signification suivante :',
                           '  where the @strong{ Example } assumes that the current position is at @strong{ Subsubsection One-Two-Three } of a document of the following structure:' => '  Dans cet exemple on est @`a @strong{ Sous sous section un-deux-trois } dans un document dont la structure est :',
                           ' Up ' => 'Plus haut',
                           '%{acronym_like} (%{explanation})' => '',
                           '%{month} %{day}, %{year}' => 'le %{day} %{month} %{year}',
                           '%{name} of %{class}' => '%{name} de %{class}',
                           '%{name} on %{class}' => '%{name} de %{class}',
                           '%{node_file_href}' => '',
                           '%{node_file_href} @cite{%{book}}' => '',
                           '%{node_file_href} section `%{section}\' in @cite{%{book}}' => '%{node_file_href} section `%{section}\' dans @cite{%{book}}',
                           '%{reference_name}' => '',
                           '%{style} %{number}' => '',
                           '%{style}: %{caption_first_line}' => '',
                           '%{style}: %{shortcaption_first_line}' => '',
                           '@b{%{quotation_arg}:} ' => '',
                           '@cite{%{book}}' => '',
                           'About' => 'A propos',
                           'About (help)' => 'A propos (page d\'aide)',
                           'About This Document' => 'A propos de ce document',
                           'April' => 'avril',
                           'August' => 'ao@^ut',
                           'Back' => 'Retour',
                           'Back section in previous file' => '',
                           'Beginning of this chapter or previous chapter' => 'D@\'ebut de ce chapitre ou chapitre pr@\'ec@\'edent',
                           'Button' => 'Bouton',
                           'Contents' => 'Table des mati@`eres',
                           'Cover (top) of document' => 'Couverture (top) du document',
                           'Current Position' => 'Position',
                           'Current section' => 'Section actuelle',
                           'December' => 'd@\'ecembre',
                           'FastBack' => 'RetourRapide',
                           'FastForward' => 'AvanceRapide',
                           'February' => 'f@\'evrier',
                           'First' => 'Premier',
                           'First section in reading order' => 'Premi@`e section dans l\'ordre de lecture',
                           'Following' => 'Suivant',
                           'Following node' => 'N@oe{}ud suivant',
                           'Footnotes' => 'Notes de bas de page',
                           'Forward' => 'Avant',
                           'Forward section in next file' => '',
                           'From 1.2.3 go to' => 'Depuis 1.2.3 aller @`a',
                           'Go to' => 'Aller @`a',
                           'Index' => 'Index',
                           'Index Entry' => 'Entr@\'ee d\'index',
                           'January' => 'janvier',
                           'July' => 'juillet',
                           'Jump to' => 'Aller @`a',
                           'June' => 'juin',
                           'Last' => 'Dernier',
                           'Last section in reading order' => 'Derni@`ere section dans l\'ordre de lecture',
                           'March' => 'mars',
                           'May' => 'mai',
                           'Menu:' => 'Menu@ :',
                           'Name' => 'Nom',
                           'Next' => 'Suivant',
                           'Next chapter' => 'Chapitre suivant',
                           'Next file' => 'Fichier suivant',
                           'Next node' => 'N@oe{}ud suivant',
                           'Next section in reading order' => 'Section suivante dans l\'ordre de lecture',
                           'Next section on same level' => 'Section suivante au m@^eme niveau',
                           'NextFile' => 'FichierSuivant',
                           'Node following in node reading order' => 'N@oe{}ud suivant dans l\'ordre de lecture',
                           'Node up' => 'N@oe{}ud au dessus',
                           'NodeNext' => 'N@oe{}udSuivant',
                           'NodePrev' => 'N@oe{}udPr@\'ec@\'edent',
                           'NodeUp' => 'N@oe{}udMonter',
                           'November' => 'novembre',
                           'October' => 'octobre',
                           'Overview' => 'Vue d\'ensemble',
                           'Overview:' => 'Vue d\'ensemble@ :',
                           'Prev' => 'Pr@\'ec@\'edent',
                           'PrevFile' => '',
                           'Previous file' => 'Fichier pr@\'ec@\'edent',
                           'Previous node' => 'N@oe{}ud pr@\'ec@\'edent',
                           'Previous section in reading order' => 'Section pr@\'ec@\'edente dans l\'ordre de lecture',
                           'Previous section on same level' => 'Section pr@\'ec@\'edente au m@^eme niveau',
                           'Section' => '',
                           'Section One' => 'Section un',
                           'See %{node_file_href}' => 'Voir %{node_file_href}',
                           'See %{node_file_href} @cite{%{book}}' => 'Voir %{node_file_href} @cite{%{book}}',
                           'See %{node_file_href} section `%{section}\' in @cite{%{book}}' => 'Voir %{node_file_href} section `%{section}\' dans @cite{%{book}}',
                           'See %{reference_name}' => 'Voir %{reference_name}',
                           'See @cite{%{book}}' => 'Voir @cite{%{book}}',
                           'See section %{reference_name}' => 'Voir la section %{reference_name}',
                           'See section `%{section}\' in @cite{%{book}}' => 'Voir la section `%{section}\' dans @cite{%{book}}',
                           'September' => 'septembre',
                           'Short Table of Contents' => 'R@\'esum@\'e du contenu',
                           'Short table of contents' => 'R@\'esum@\'e du contenu',
                           'Subsection One-Four' => 'Sous section un-quatre',
                           'Subsection One-One' => 'Sous section un-un',
                           'Subsection One-Three' => 'Sous section un-trois',
                           'Subsection One-Two' => 'Sous section un-deux',
                           'Subsubsection One-Two-Four' => 'Sous sous section un-deux-quatre',
                           'Subsubsection One-Two-One' => 'Sous sous section un-deux-un',
                           'Subsubsection One-Two-Three' => 'Sous sous section un-deux-trois',
                           'Subsubsection One-Two-Two' => 'Sous sous section un-deux-deux',
                           'T2H_today' => '%2$d %1$s %3$d',
                           'Table of Contents' => 'Table des mati@`eres',
                           'Table of contents' => 'Table des mati@`eres',
                           'The node you are looking for is at %{href}.' => 'Le n@oe{}ud que vous recherchez est ici@ : %{href}.',
                           'This' => 'Ici',
                           'This document was generated by @emph{%{user}} on @emph{%{date}} using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Ce document a @\'et@\'e g@\'en@\'er@\'e le @emph{%{date}} par @emph{%{user}} en utilisant @uref{%{program_homepage}, @emph{%{program}}}.',
                           'This document was generated by @emph{%{user}} using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Ce document a @\'et@\'e g@\'en@\'er@\'e par @emph{%{user}} en utilisant @uref{%{program_homepage}, @emph{%{program}}}.',
                           'This document was generated on @i{%{date}} using @uref{%{program_homepage}, @i{%{program}}}.' => 'Ce document a @\'et@\'e g@\'en@\'er@\'e le @emph{%{date}} en utilisant @uref{%{program_homepage}, @emph{%{program}}}',
                           'This document was generated using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Ce document a @\'et@\'e g@\'en@\'er@\'e en utilisant @uref{%{program_homepage}, @emph{%{program}}}.',
                           'Top' => 'Racine',
                           'Untitled Document' => 'Document sans titre',
                           'Up' => 'Monter',
                           'Up node' => 'N@oe{}ud au dessus',
                           'Up section' => 'Section sup@\'erieure',
                           'by @emph{%{user}}' => 'par @emph{%{user}}',
                           'by @emph{%{user}} on @emph{%{date}}' => 'par @emph{%{user}} le @emph{%{date}}',
                           'current' => 'courante',
                           'on @emph{%{date}}' => 'le @emph{%{date}}',
                           'section `%{section}\' in @cite{%{book}}' => 'section `%{section}\' dans @cite{%{book}}',
                           'see %{node_file_href}' => 'voir %{node_file_href}',
                           'see %{node_file_href} @cite{%{book}}' => 'voir %{node_file_href} @cite{%{book}}',
                           'see %{node_file_href} section `%{section}\' in @cite{%{book}}' => 'voir %{node_file_href} section `%{section}\' dans @cite{%{book}}',
                           'see %{reference_name}' => 'voir %{reference_name}',
                           'see @cite{%{book}}' => 'voir @cite{%{book}}',
                           'see section %{reference_name}' => 'voir la section %{reference_name}',
                           'see section `%{section}\' in @cite{%{book}}' => 'voir la section `%{section}\' dans @cite{{book}}',
                           'unknown' => 'inconnu'
                         };
    
    $T2H_OBSOLETE_STRINGS->{'fr'} = {
                                      '  This document was generated %{who_and_when_generated} using %{program_homepage_href}.' => '  Ce document a été généré %{who_and_when_generated} en utilisant %{program_homepage_href}.',
                                      '  where the  Example  assumes that the current position is at  Subsubsection One-Two-Three  of a document of the following structure:' => '  Dans cet exemple on est à  Sous section un-deux-trois  dans un document dont la structure est :',
                                      '%{node_file_href} section `%{section}\' in %{book}' => '%{node_file_href} section `%{section}\' dans %{book}',
                                      'See' => 'Voir',
                                      'See %{node_file_href} %{book}' => 'Voir %{node_file_href} %{book}',
                                      'See %{node_file_href} section `%{section}\' in %{book}' => 'Voir %{node_file_href} section `%{section}\' dans %{book}',
                                      'See %{book}' => 'Voir %{book}',
                                      'See section `%{section}\' in %{book}' => 'Voir la section `%{section}\' dans %{book}',
                                      'This document was generated by %{user} on %{date} using %{program_homepage_href}.' => 'Ce document a été généré par %{user} %{date} en utilisant %{program_homepage_href}.',
                                      'This document was generated by %{user} using %{program_homepage_href}.' => 'Ce document a été généré par %{user} en utilisant %{program_homepage_href}.',
                                      'This document was generated by @emph{%{user}} on @emph{%{date}} using %{program_homepage_href}.' => 'Ce document a @\'et@\'e g@\'en@\'er@\'e par @emph{%{user}} @emph{%{date}} en utilisant %{program_homepage_href}.',
                                      'This document was generated by @emph{%{user}} using %{program_homepage_href}.' => 'Ce document a @\'et@\'e g@\'en@\'er@\'e par @emph{%{user}} en utilisant %{program_homepage_href}.',
                                      'This document was generated on %{date} using %{program_homepage_href}.' => 'Ce document a été généré %{date} en utilisant %{program_homepage_href}.',
                                      'This document was generated on @emph{%{date}} using %{program_homepage_href}.' => 'Ce document a @\'et@\'e g@\'en@\'er@\'e @emph{%{date}} en utilisant %{program_homepage_href}.',
                                      'This document was generated on @emph{%{date}} using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Ce document a @\'et@\'e g@\'en@\'er@\'e @emph{%{date}} en utilisant @uref{%{program_homepage}, @emph{%{program}}}.',
                                      'This document was generated using %{program_homepage_href}.' => 'Ce document a @\'et@\'e g@\'en@\'er@\'e en utilisant %{program_homepage_href}.',
                                      'about (help)' => '@`a propos (page d\'aide)',
                                      'about (this page)' => 'a propos (cette page)',
                                      'beginning of this chapter or previous chapter' => 'd@\'ebut de ce chapitre ou chapitre pr@\'ec@\'edent',
                                      'by %{user}' => 'par %{user}',
                                      'by %{user} on %{date}' => 'par %{user} %{date}',
                                      'concept index' => 'index',
                                      'cover (top) of document' => 'couverture (top) du document',
                                      'current section' => 'section actuelle',
                                      'first section in reading order' => 'premi@`e section dans l\'ordre de lecture',
                                      'following node' => 'node suivant',
                                      'index' => 'index',
                                      'last section in reading order' => 'derni@`ere section dans l\'ordre de lecture',
                                      'next chapter' => 'chapitre suivant',
                                      'next node' => 'node suivant',
                                      'next section in reading order' => 'section suivante dans l\'ordre de lecture',
                                      'next section on same level' => 'section suivante au m@^eme niveau',
                                      'node following in node reading order' => 'node suivant dans l\'ordre des nodes',
                                      'node up' => 'node au dessus',
                                      'on %{date}' => '%{date}',
                                      'previous node' => 'node pr@\'ec@\'edent',
                                      'previous section in reading order' => 'section pr@\'ec@\'edente dans l\'ordre de lecture',
                                      'previous section on same level' => 'section pr@\'ec@\'edente au m@^eme niveau',
                                      'section' => 'section',
                                      'section `%{section}\' in %{book}' => 'section `%{section}\' dans %{book}',
                                      'see' => 'voir',
                                      'see %{node_file_href} %{book}' => 'voir %{node_file_href} %{book}',
                                      'see %{node_file_href} section `%{section}\' in %{book}' => 'voir %{node_file_href} section `%{section}\' dans %{book}',
                                      'see %{book}' => 'voir %{book}',
                                      'see section `%{section}\' in %{book}' => 'voir la section `%{section}\' dans %{book}',
                                      'short table of contents' => 'table des mati@`eres r@\'esum@\'ee',
                                      'table of contents' => 'table des mati@`eres',
                                      'up node' => 'node au dessus',
                                      'up section' => 'section sup@\'erieure'
                                    };
    
    
    $LANGUAGES->{'ja'} = {
                           '  The buttons in the navigation panels have the following meaning:' => 'ナビゲーションパネル中のボタンには以下の意味があります。',
                           '  where the @strong{ Example } assumes that the current position is at @strong{ Subsubsection One-Two-Three } of a document of the following structure:' => '@strong{例}では、以下に示す構造を持つ文書の@strong{1.2.3項}を現在位置に仮定しています。',
                           ' Up ' => '上',
                           '%{acronym_like} (%{explanation})' => '',
                           '%{month} %{day}, %{year}' => '%{year}年%{month}月%{day}日',
                           '%{name} of %{class}' => '',
                           '%{name} on %{class}' => '',
                           '%{node_file_href}' => '',
                           '%{node_file_href} @cite{%{book}}' => '',
                           '%{node_file_href} section `%{section}\' in @cite{%{book}}' => '',
                           '%{reference_name}' => '',
                           '%{style} %{number}' => '',
                           '%{style}: %{caption_first_line}' => '',
                           '%{style}: %{shortcaption_first_line}' => '',
                           '@b{%{quotation_arg}:} ' => '',
                           '@cite{%{book}}' => '',
                           'About' => '',
                           'About (help)' => '',
                           'About This Document' => 'この文書について',
                           'April' => '4月',
                           'August' => '8月',
                           'Back' => '',
                           'Back section in previous file' => '',
                           'Beginning of this chapter or previous chapter' => '',
                           'Button' => 'ボタン',
                           'Contents' => '目次',
                           'Cover (top) of document' => '',
                           'Current Position' => '現在位置',
                           'Current section' => '',
                           'December' => '12月',
                           'FastBack' => '',
                           'FastForward' => '',
                           'February' => '2月',
                           'First' => '',
                           'First section in reading order' => '',
                           'Following' => '',
                           'Following node' => '',
                           'Footnotes' => '脚注',
                           'Forward' => '',
                           'Forward section in next file' => '',
                           'From 1.2.3 go to' => '1.2.3項からの移動先',
                           'Go to' => '移動先',
                           'Index' => '見出し',
                           'Index Entry' => '見出し一覧',
                           'January' => '1月',
                           'July' => '7月',
                           'Jump to' => '移動',
                           'June' => '6月',
                           'Last' => '',
                           'Last section in reading order' => '',
                           'March' => '3月',
                           'May' => '5月',
                           'Menu:' => 'メニュー',
                           'Name' => '名称',
                           'Next' => '次',
                           'Next chapter' => '',
                           'Next file' => '',
                           'Next node' => '',
                           'Next section in reading order' => '',
                           'Next section on same level' => '',
                           'NextFile' => '',
                           'Node following in node reading order' => '',
                           'Node up' => '',
                           'NodeNext' => '',
                           'NodePrev' => '',
                           'NodeUp' => '',
                           'November' => '11月',
                           'October' => '10月',
                           'Overview' => '概要',
                           'Overview:' => '概要:',
                           'Prev' => '前',
                           'PrevFile' => '',
                           'Previous file' => '',
                           'Previous node' => '',
                           'Previous section in reading order' => '',
                           'Previous section on same level' => '',
                           'Section' => '項',
                           'Section One' => '第1項',
                           'See %{node_file_href}' => '',
                           'See %{node_file_href} @cite{%{book}}' => '',
                           'See %{node_file_href} section `%{section}\' in @cite{%{book}}' => '',
                           'See %{reference_name}' => '',
                           'See @cite{%{book}}' => '',
                           'See section %{reference_name}' => '',
                           'See section `%{section}\' in @cite{%{book}}' => '',
                           'September' => '9月',
                           'Short Table of Contents' => '簡略化した目次',
                           'Short table of contents' => '',
                           'Subsection One-Four' => '第1.4項',
                           'Subsection One-One' => '第1.1項',
                           'Subsection One-Three' => '第1.3項',
                           'Subsection One-Two' => '第1.2項',
                           'Subsubsection One-Two-Four' => '第1.2.4項',
                           'Subsubsection One-Two-One' => '第1.2.1項',
                           'Subsubsection One-Two-Three' => '第1.2.3項',
                           'Subsubsection One-Two-Two' => '第1.2.2項',
                           'T2H_today' => '%s, %d %d',
                           'Table of Contents' => '目次',
                           'Table of contents' => '',
                           'The node you are looking for is at %{href}.' => '',
                           'This' => '',
                           'This document was generated by @emph{%{user}} on @emph{%{date}} using @uref{%{program_homepage}, @emph{%{program}}}.' => 'この文書は@emph{%{user}}によって@emph{%{date}}に@uref{%{program_homepage}, @emph{%{program}}}を用いて生成されました。',
                           'This document was generated by @emph{%{user}} using @uref{%{program_homepage}, @emph{%{program}}}.' => 'この文書は@emph{%{user}}によって@uref{%{program_homepage}, @emph{%{program}}}を用いて生成されました。',
                           'This document was generated on @i{%{date}} using @uref{%{program_homepage}, @i{%{program}}}.' => 'この文書は@emph{%{date}}に@uref{%{program_homepage}, @emph{%{program}}}を用いて生成されました。',
                           'This document was generated using @uref{%{program_homepage}, @emph{%{program}}}.' => 'この文書は@uref{%{program_homepage}, @emph{%{program}}}を用いて生成されました。',
                           'Top' => '冒頭',
                           'Untitled Document' => '無題の文書',
                           'Up' => '',
                           'Up node' => '',
                           'Up section' => '',
                           'by @emph{%{user}}' => '@emph{%{user}}',
                           'by @emph{%{user}} on @emph{%{date}}' => '@emph{%{user}}, @emph{%{date}',
                           'current' => '現在位置',
                           'on @emph{%{date}}' => '@emph{%{date}}',
                           'section `%{section}\' in @cite{%{book}}' => '@cite{%{book}}の `%{section}\' ',
                           'see %{node_file_href}' => '%{node_file_href}参照',
                           'see %{node_file_href} @cite{%{book}}' => '%{node_file_href} @cite{%{book}}参照',
                           'see %{node_file_href} section `%{section}\' in @cite{%{book}}' => '',
                           'see %{reference_name}' => '',
                           'see @cite{%{book}}' => '',
                           'see section %{reference_name}' => '',
                           'see section `%{section}\' in @cite{%{book}}' => '',
                           'unknown' => '不明'
                         };
    
    $T2H_OBSOLETE_STRINGS->{'ja'} = {
                                      'about (help)' => '使用法 (ヘルプ)',
                                      'beginning of this chapter or previous chapter' => 'この章または前の章の冒頭',
                                      'cover (top) of document' => '文書の表紙 (トップ)',
                                      'current section' => '現在の節',
                                      'first section in reading order' => '文書順で前の項',
                                      'following node' => '次の節',
                                      'index' => '見出し',
                                      'last section in reading order' => '文書順で最後の項',
                                      'next chapter' => '次の章',
                                      'next node' => '次の節',
                                      'next section in reading order' => '文書順で次の項',
                                      'next section on same level' => '同じ階層にある次の項',
                                      'node following in node reading order' => '文書順で次の節',
                                      'node up' => '上の節へ',
                                      'previous node' => '前の節',
                                      'previous section in reading order' => '文書順で前の節',
                                      'previous section on same level' => '同じ階層にある前の項',
                                      'short table of contents' => '簡略化した目次',
                                      'table of contents' => '文書の目次',
                                      'up node' => '上の節',
                                      'up section' => '上の項'
                                    };
    
    
    $LANGUAGES->{'nl'} = {
                           '  The buttons in the navigation panels have the following meaning:' => '',
                           '  where the @strong{ Example } assumes that the current position is at @strong{ Subsubsection One-Two-Three } of a document of the following structure:' => '',
                           ' Up ' => '',
                           '%{acronym_like} (%{explanation})' => '',
                           '%{month} %{day}, %{year}' => '',
                           '%{name} of %{class}' => '',
                           '%{name} on %{class}' => '',
                           '%{node_file_href}' => '',
                           '%{node_file_href} @cite{%{book}}' => '',
                           '%{node_file_href} section `%{section}\' in @cite{%{book}}' => '',
                           '%{reference_name}' => '',
                           '%{style} %{number}' => '',
                           '%{style}: %{caption_first_line}' => '',
                           '%{style}: %{shortcaption_first_line}' => '',
                           '@b{%{quotation_arg}:} ' => '',
                           '@cite{%{book}}' => '',
                           'About' => '',
                           'About (help)' => '',
                           'About This Document' => 'No translation available!',
                           'April' => 'April',
                           'August' => 'Augustus',
                           'Back' => '',
                           'Back section in previous file' => '',
                           'Beginning of this chapter or previous chapter' => '',
                           'Button' => '',
                           'Contents' => '',
                           'Cover (top) of document' => '',
                           'Current Position' => '',
                           'Current section' => '',
                           'December' => 'December',
                           'FastBack' => '',
                           'FastForward' => '',
                           'February' => 'Februari',
                           'First' => '',
                           'First section in reading order' => '',
                           'Following' => '',
                           'Following node' => '',
                           'Footnotes' => 'No translation available!',
                           'Forward' => '',
                           'Forward section in next file' => '',
                           'From 1.2.3 go to' => '',
                           'Go to' => '',
                           'Index' => 'Index',
                           'Index Entry' => '',
                           'January' => 'Januari',
                           'July' => 'Juli',
                           'Jump to' => '',
                           'June' => 'Juni',
                           'Last' => '',
                           'Last section in reading order' => '',
                           'March' => 'Maart',
                           'May' => 'Mei',
                           'Menu:' => '',
                           'Name' => '',
                           'Next' => '',
                           'Next chapter' => '',
                           'Next file' => '',
                           'Next node' => '',
                           'Next section in reading order' => '',
                           'Next section on same level' => '',
                           'NextFile' => '',
                           'Node following in node reading order' => '',
                           'Node up' => '',
                           'NodeNext' => '',
                           'NodePrev' => '',
                           'NodeUp' => '',
                           'November' => 'November',
                           'October' => 'Oktober',
                           'Overview' => '',
                           'Overview:' => '',
                           'Prev' => '',
                           'PrevFile' => '',
                           'Previous file' => '',
                           'Previous node' => '',
                           'Previous section in reading order' => '',
                           'Previous section on same level' => '',
                           'Section' => '',
                           'Section One' => '',
                           'See %{node_file_href}' => '',
                           'See %{node_file_href} @cite{%{book}}' => '',
                           'See %{node_file_href} section `%{section}\' in @cite{%{book}}' => '',
                           'See %{reference_name}' => '',
                           'See @cite{%{book}}' => '',
                           'See section %{reference_name}' => '',
                           'See section `%{section}\' in @cite{%{book}}' => '',
                           'September' => 'September',
                           'Short Table of Contents' => 'Korte inhoudsopgave',
                           'Short table of contents' => '',
                           'Subsection One-Four' => '',
                           'Subsection One-One' => '',
                           'Subsection One-Three' => '',
                           'Subsection One-Two' => '',
                           'Subsubsection One-Two-Four' => '',
                           'Subsubsection One-Two-One' => '',
                           'Subsubsection One-Two-Three' => '',
                           'Subsubsection One-Two-Two' => '',
                           'T2H_today' => '',
                           'Table of Contents' => 'Inhoudsopgave',
                           'Table of contents' => '',
                           'The node you are looking for is at %{href}.' => '',
                           'This' => '',
                           'This document was generated by @emph{%{user}} on @emph{%{date}} using @uref{%{program_homepage}, @emph{%{program}}}.' => '',
                           'This document was generated by @emph{%{user}} using @uref{%{program_homepage}, @emph{%{program}}}.' => '',
                           'This document was generated on @i{%{date}} using @uref{%{program_homepage}, @i{%{program}}}.' => '',
                           'This document was generated using @uref{%{program_homepage}, @emph{%{program}}}.' => '',
                           'Top' => '',
                           'Untitled Document' => '',
                           'Up' => '',
                           'Up node' => '',
                           'Up section' => '',
                           'by @emph{%{user}}' => '',
                           'by @emph{%{user}} on @emph{%{date}}' => '',
                           'current' => '',
                           'on @emph{%{date}}' => '',
                           'section `%{section}\' in @cite{%{book}}' => '',
                           'see %{node_file_href}' => '',
                           'see %{node_file_href} @cite{%{book}}' => '',
                           'see %{node_file_href} section `%{section}\' in @cite{%{book}}' => '',
                           'see %{reference_name}' => '',
                           'see @cite{%{book}}' => '',
                           'see section %{reference_name}' => '',
                           'see section `%{section}\' in @cite{%{book}}' => '',
                           'unknown' => ''
                         };
    
    $T2H_OBSOLETE_STRINGS->{'nl'} = {
                                      'See' => 'Zie',
                                      'section' => 'sectie',
                                      'see' => 'zie'
                                    };
    
    
    $LANGUAGES->{'no'} = {
                           '  The buttons in the navigation panels have the following meaning:' => '',
                           '  where the @strong{ Example } assumes that the current position is at @strong{ Subsubsection One-Two-Three } of a document of the following structure:' => '',
                           ' Up ' => '',
                           '%{acronym_like} (%{explanation})' => '',
                           '%{month} %{day}, %{year}' => '',
                           '%{name} of %{class}' => '',
                           '%{name} on %{class}' => '',
                           '%{node_file_href}' => '',
                           '%{node_file_href} @cite{%{book}}' => '',
                           '%{node_file_href} section `%{section}\' in @cite{%{book}}' => '',
                           '%{reference_name}' => '',
                           '%{style} %{number}' => '',
                           '%{style}: %{caption_first_line}' => '',
                           '%{style}: %{shortcaption_first_line}' => '',
                           '@b{%{quotation_arg}:} ' => '',
                           '@cite{%{book}}' => '',
                           'About' => '',
                           'About (help)' => '',
                           'About This Document' => 'No translation available!',
                           'April' => 'april',
                           'August' => 'august',
                           'Back' => '',
                           'Back section in previous file' => '',
                           'Beginning of this chapter or previous chapter' => '',
                           'Button' => '',
                           'Contents' => '',
                           'Cover (top) of document' => '',
                           'Current Position' => '',
                           'Current section' => '',
                           'December' => 'desember',
                           'FastBack' => '',
                           'FastForward' => '',
                           'February' => 'februar',
                           'First' => '',
                           'First section in reading order' => '',
                           'Following' => '',
                           'Following node' => '',
                           'Footnotes' => 'No translation available!',
                           'Forward' => '',
                           'Forward section in next file' => '',
                           'From 1.2.3 go to' => '',
                           'Go to' => '',
                           'Index' => 'Indeks',
                           'Index Entry' => '',
                           'January' => 'januar',
                           'July' => 'juli',
                           'Jump to' => '',
                           'June' => 'juni',
                           'Last' => '',
                           'Last section in reading order' => '',
                           'March' => 'mars',
                           'May' => 'mai',
                           'Menu:' => '',
                           'Name' => '',
                           'Next' => '',
                           'Next chapter' => '',
                           'Next file' => '',
                           'Next node' => '',
                           'Next section in reading order' => '',
                           'Next section on same level' => '',
                           'NextFile' => '',
                           'Node following in node reading order' => '',
                           'Node up' => '',
                           'NodeNext' => '',
                           'NodePrev' => '',
                           'NodeUp' => '',
                           'November' => 'november',
                           'October' => 'oktober',
                           'Overview' => '',
                           'Overview:' => '',
                           'Prev' => '',
                           'PrevFile' => '',
                           'Previous file' => '',
                           'Previous node' => '',
                           'Previous section in reading order' => '',
                           'Previous section on same level' => '',
                           'Section' => '',
                           'Section One' => '',
                           'See %{node_file_href}' => '',
                           'See %{node_file_href} @cite{%{book}}' => '',
                           'See %{node_file_href} section `%{section}\' in @cite{%{book}}' => '',
                           'See %{reference_name}' => '',
                           'See @cite{%{book}}' => '',
                           'See section %{reference_name}' => '',
                           'See section `%{section}\' in @cite{%{book}}' => '',
                           'September' => 'september',
                           'Short Table of Contents' => 'Kort innholdsfortegnelse',
                           'Short table of contents' => '',
                           'Subsection One-Four' => '',
                           'Subsection One-One' => '',
                           'Subsection One-Three' => '',
                           'Subsection One-Two' => '',
                           'Subsubsection One-Two-Four' => '',
                           'Subsubsection One-Two-One' => '',
                           'Subsubsection One-Two-Three' => '',
                           'Subsubsection One-Two-Two' => '',
                           'T2H_today' => '',
                           'Table of Contents' => 'Innholdsfortegnelse',
                           'Table of contents' => '',
                           'The node you are looking for is at %{href}.' => '',
                           'This' => '',
                           'This document was generated by @emph{%{user}} on @emph{%{date}} using @uref{%{program_homepage}, @emph{%{program}}}.' => '',
                           'This document was generated by @emph{%{user}} using @uref{%{program_homepage}, @emph{%{program}}}.' => '',
                           'This document was generated on @i{%{date}} using @uref{%{program_homepage}, @i{%{program}}}.' => '',
                           'This document was generated using @uref{%{program_homepage}, @emph{%{program}}}.' => '',
                           'Top' => '',
                           'Untitled Document' => '',
                           'Up' => '',
                           'Up node' => '',
                           'Up section' => '',
                           'by @emph{%{user}}' => '',
                           'by @emph{%{user}} on @emph{%{date}}' => '',
                           'current' => '',
                           'on @emph{%{date}}' => '',
                           'section `%{section}\' in @cite{%{book}}' => '',
                           'see %{node_file_href}' => '',
                           'see %{node_file_href} @cite{%{book}}' => '',
                           'see %{node_file_href} section `%{section}\' in @cite{%{book}}' => '',
                           'see %{reference_name}' => '',
                           'see @cite{%{book}}' => '',
                           'see section %{reference_name}' => '',
                           'see section `%{section}\' in @cite{%{book}}' => '',
                           'unknown' => ''
                         };
    
    $T2H_OBSOLETE_STRINGS->{'no'} = {
                                      'See' => 'Se',
                                      'section' => 'avsnitt',
                                      'see' => 'se'
                                    };
    
    
    $LANGUAGES->{'pt'} = {
                           '  The buttons in the navigation panels have the following meaning:' => '  Os bot@~oes nos pain@\'eis de navega@,{c}@~ao possuem os seguintes significados:',
                           '  where the @strong{ Example } assumes that the current position is at @strong{ Subsubsection One-Two-Three } of a document of the following structure:' => '  onde o @strong{ Exemplo } assume que a posi@,{c}@~ao atual localiza-se em @strong{ Subsub@,{c}@~ao Um-Dois-Tr@^es } de um documento com a seguinte estrutura:',
                           ' Up ' => ' Acima ',
                           '%{acronym_like} (%{explanation})' => '',
                           '%{month} %{day}, %{year}' => '%{day} de %{month} de %{year}',
                           '%{name} of %{class}' => '%{name} da %{class}',
                           '%{name} on %{class}' => '%{name} na %{class}',
                           '%{node_file_href}' => '',
                           '%{node_file_href} @cite{%{book}}' => '',
                           '%{node_file_href} section `%{section}\' in @cite{%{book}}' => '%{node_file_href} se@,{c}@~ao `%{section}\' em @cite{%{book}}',
                           '%{reference_name}' => '',
                           '%{style} %{number}' => '',
                           '%{style}: %{caption_first_line}' => '',
                           '%{style}: %{shortcaption_first_line}' => '',
                           '@b{%{quotation_arg}:} ' => '',
                           '@cite{%{book}}' => '',
                           'About' => 'Sobre',
                           'About (help)' => 'Sobre (ajuda)',
                           'About This Document' => 'Sobre Esse Documento',
                           'April' => 'Abril',
                           'August' => 'Agosto',
                           'Back' => 'Volta',
                           'Back section in previous file' => '',
                           'Beginning of this chapter or previous chapter' => 'Come@,{c}o desse cap@\'itulo ou cap@\'itulo anterior',
                           'Button' => 'Bot@~ao',
                           'Contents' => 'Conte@\'udo',
                           'Cover (top) of document' => 'In@\'icio (topo) do documento',
                           'Current Position' => 'Posi@,{c}@~ao Atual',
                           'Current section' => 'Se@,{c}@~ao atual',
                           'December' => 'Dezembro',
                           'FastBack' => 'Voltar R@\'apido',
                           'FastForward' => 'Avan@,{c}ar R@\'apido',
                           'February' => 'Fevereiro',
                           'First' => 'Primeiro',
                           'First section in reading order' => 'Primeira se@,{c}@~ao na ordem de leitura',
                           'Following' => 'Seguinte',
                           'Following node' => 'Nodo seguinte',
                           'Footnotes' => 'Notas de Rodap@\'e',
                           'Forward' => 'Avan@,{c}ar',
                           'Forward section in next file' => '',
                           'From 1.2.3 go to' => 'De 1.2.3 v@\'a para',
                           'Go to' => 'V@\'a para',
                           'Index' => '@\'Indice',
                           'Index Entry' => 'Entrada de @\'Indice',
                           'January' => 'Janeiro',
                           'July' => 'Julho',
                           'Jump to' => 'Pular para',
                           'June' => 'Junho',
                           'Last' => '@\'Ultimo',
                           'Last section in reading order' => '@\'Ultima se@,{c}@~ao na ordem de leitura',
                           'March' => 'Mar@,{c}o',
                           'May' => 'Maio',
                           'Menu:' => '',
                           'Name' => 'Nome',
                           'Next' => 'Pr@\'oximo',
                           'Next chapter' => 'Pr@\'oximo cap@\'itulo',
                           'Next file' => '',
                           'Next node' => 'Pr@\'oximo nodo',
                           'Next section in reading order' => 'Pr@\'oxima se@,{c}@~ao na ordem de leitura',
                           'Next section on same level' => 'Pr@\'oxima se@,{c}@~ao no mesmo n@\'ivel',
                           'NextFile' => '',
                           'Node following in node reading order' => 'Nodo seguinte na ordem de leitura de nodos',
                           'Node up' => 'Nodo acima',
                           'NodeNext' => 'Pr@\'oximo Nodo',
                           'NodePrev' => 'Nodo Anterior',
                           'NodeUp' => 'Nodo Acima',
                           'November' => 'Novembro',
                           'October' => 'Outubro',
                           'Overview' => 'Vis@~ao geral',
                           'Overview:' => 'Vis@~ao geral:',
                           'Prev' => 'Pr@\'evio',
                           'PrevFile' => '',
                           'Previous file' => '',
                           'Previous node' => 'Nodo anterior',
                           'Previous section in reading order' => 'Se@,{c}@~ao anterior na ordem de leitura',
                           'Previous section on same level' => 'Se@,{c}@~ao anterior no mesmo n@\'ivel',
                           'Section' => 'Se@,{c}@~ao',
                           'Section One' => 'Se@,{c}@~ao Um',
                           'See %{node_file_href}' => 'Veja %{node_file_href}',
                           'See %{node_file_href} @cite{%{book}}' => 'Veja %{node_file_href} @cite{%{book}}',
                           'See %{node_file_href} section `%{section}\' in @cite{%{book}}' => 'Veja %{node_file_href} se@,{c}@~ao `%{section}\' em @cite{%{book}}',
                           'See %{reference_name}' => 'Veja %{reference_name}',
                           'See @cite{%{book}}' => 'Veja @cite{%{book}}',
                           'See section %{reference_name}' => 'Veja se@,{c}@~ao %{reference_name}',
                           'See section `%{section}\' in @cite{%{book}}' => 'Veja se@,{c}@~ao `%{section}\' em @cite{%{book}}',
                           'September' => 'Setembro',
                           'Short Table of Contents' => 'Breve Sum@\'ario',
                           'Short table of contents' => 'Breve sum@\'ario',
                           'Subsection One-Four' => 'Subse@,{c}@~ao Um-Quatro',
                           'Subsection One-One' => 'Subse@,{c}@~ao Um-Um',
                           'Subsection One-Three' => 'Subse@,{c}@~ao Um-Tr@^es',
                           'Subsection One-Two' => 'Subse@,{c}@~ao Um-Dois',
                           'Subsubsection One-Two-Four' => 'Subse@,{c}@~ao Um-Dois-Quatro',
                           'Subsubsection One-Two-One' => 'Subse@,{c}@~ao Um-Dois-Um',
                           'Subsubsection One-Two-Three' => 'Subse@,{c}@~ao Um-Dois-Tr@^es',
                           'Subsubsection One-Two-Two' => 'Subse@,{c}@~ao Um-Dois-Dois',
                           'T2H_today' => '',
                           'Table of Contents' => 'Sum@\'ario',
                           'Table of contents' => 'Sum@\'ario',
                           'The node you are looking for is at %{href}.' => 'O nodo que vo@^e est@\'a olhando est@\'a em %{href}.',
                           'This' => 'Esse',
                           'This document was generated by @emph{%{user}} on @emph{%{date}} using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Esse documento foi gereado por @emph{%{user}} em @emph{%{date}} usando @uref{%{program_homepage}, @emph{%{program}}}.',
                           'This document was generated by @emph{%{user}} using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Esse documento foi gerado por @emph{%{user}} usando @uref{%{program_homepage}, @emph{%{program}}}.',
                           'This document was generated on @i{%{date}} using @uref{%{program_homepage}, @i{%{program}}}.' => 'Esse documento foi gerado em @i{%{date}} usando @uref{%{program_homepage}, @i{%{program}}}.',
                           'This document was generated using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Esse documento foi gerado usando @uref{%{program_homepage}, @emph{%{program}}}.',
                           'Top' => 'Topo',
                           'Untitled Document' => 'Documento Sem Nome',
                           'Up' => 'Acima',
                           'Up node' => 'Nodo acima',
                           'Up section' => 'Se@,{c}@~ao acima',
                           'by @emph{%{user}}' => 'por  @emph{%{user}}',
                           'by @emph{%{user}} on @emph{%{date}}' => 'por @emph{%{user}} em @emph{%{date}}',
                           'current' => 'atual',
                           'on @emph{%{date}}' => 'em @emph{%{date}}',
                           'section `%{section}\' in @cite{%{book}}' => 'se@,{c}@~ao `%{section}\' em @cite{%{book}}',
                           'see %{node_file_href}' => 'veja %{node_file_href}',
                           'see %{node_file_href} @cite{%{book}}' => 'veja %{node_file_href} @cite{%{book}}',
                           'see %{node_file_href} section `%{section}\' in @cite{%{book}}' => 'veja %{node_file_href} se@,{c}@~ao `%{section}\' em @cite{%{book}}',
                           'see %{reference_name}' => 'veja %{reference_name}',
                           'see @cite{%{book}}' => 'veja @cite{%{book}}',
                           'see section %{reference_name}' => 'veja se@,{c}@~ao %{reference_name}',
                           'see section `%{section}\' in @cite{%{book}}' => 'veja se@,{c}@~ao `%{section}\' em @cite{%{book}}',
                           'unknown' => 'desconhecido'
                         };
    
    $T2H_OBSOLETE_STRINGS->{'pt'} = {
                                      'See' => 'Veja',
                                      'about (help)' => 'sobre (ajuda)',
                                      'beginning of this chapter or previous chapter' => 'come@,{c}o desse cap@\'itulo ou cap@\'itulo anterior',
                                      'cover (top) of document' => 'in@\'icio (topo) do documento',
                                      'current section' => 'se@,{c}@~ao atual',
                                      'first section in reading order' => 'primeira se@,{c}@~ao na ordem de leitura',
                                      'following node' => 'nodo seguinte',
                                      'index' => '@\'indice',
                                      'last section in reading order' => '@\'ultima se@,{c}@~ao na ordem de leitura',
                                      'next chapter' => 'pr@\'oximo cap@\'itulo',
                                      'next node' => 'pr@\'oximo nodo',
                                      'next section in reading order' => 'pr@\'oxima se@,{c}@~ao na ordem de leitura',
                                      'next section on same level' => 'pr@\'oxima se@,{c}@~ao no mesmo n@\'ivel',
                                      'node following in node reading order' => 'nodo seguinte na ordem de leitura de nodos',
                                      'node up' => 'nodo acima',
                                      'previous node' => 'nodo anterior',
                                      'previous section in reading order' => 'se@,{c}@~ao anterior na ordem de leitura',
                                      'previous section on same level' => 'se@,{c}@~ao anterior no mesmo n@\'ivel',
                                      'section' => 'Se@,{c}@~ao',
                                      'see' => 'veja',
                                      'short table of contents' => 'breve sum@\'ario',
                                      'table of contents' => 'sum@\'ario',
                                      'up node' => 'nodo acima',
                                      'up section' => 'se@,{c}@~ao acima'
                                    };
    
    
    $LANGUAGES->{'pt_BR'} = {
                              '  The buttons in the navigation panels have the following meaning:' => '  Os bot@~oes nos pain@\'eis de navega@,{c}@~ao possuem os seguintes significados:',
                              '  where the @strong{ Example } assumes that the current position is at @strong{ Subsubsection One-Two-Three } of a document of the following structure:' => '  onde o @strong{ Exemplo } assume que a posi@,{c}@~ao atual localiza-se em @strong{ Subsub@,{c}@~ao Um-Dois-Tr@^es } de um documento com a seguinte estrutura:',
                              ' Up ' => ' Acima ',
                              '%{acronym_like} (%{explanation})' => '',
                              '%{month} %{day}, %{year}' => '%{day} de %{month} de %{year}',
                              '%{name} of %{class}' => '%{name} da %{class}',
                              '%{name} on %{class}' => '%{name} na %{class}',
                              '%{node_file_href}' => '',
                              '%{node_file_href} @cite{%{book}}' => '',
                              '%{node_file_href} section `%{section}\' in @cite{%{book}}' => '%{node_file_href} se@,{c}@~ao `%{section}\' em @cite{%{book}}',
                              '%{reference_name}' => '',
                              '%{style} %{number}' => '',
                              '%{style}: %{caption_first_line}' => '',
                              '%{style}: %{shortcaption_first_line}' => '',
                              '@b{%{quotation_arg}:} ' => '',
                              '@cite{%{book}}' => '',
                              'About' => 'Sobre',
                              'About (help)' => 'Sobre (ajuda)',
                              'About This Document' => 'Sobre Esse Documento',
                              'April' => 'Abril',
                              'August' => 'Agosto',
                              'Back' => 'Volta',
                              'Back section in previous file' => '',
                              'Beginning of this chapter or previous chapter' => 'Come@,{c}o desse cap@\'itulo ou cap@\'itulo anterior',
                              'Button' => 'Bot@~ao',
                              'Contents' => 'Conte@\'udo',
                              'Cover (top) of document' => 'In@\'icio (topo) do documento',
                              'Current Position' => 'Posi@,{c}@~ao Atual',
                              'Current section' => 'Se@,{c}@~ao atual',
                              'December' => 'Dezembro',
                              'FastBack' => 'Voltar R@\'apido',
                              'FastForward' => 'Avan@,{c}ar R@\'apido',
                              'February' => 'Fevereiro',
                              'First' => 'Primeiro',
                              'First section in reading order' => 'Primeira se@,{c}@~ao na ordem de leitura',
                              'Following' => 'Seguinte',
                              'Following node' => 'Nodo seguinte',
                              'Footnotes' => 'Notas de Rodap@\'e',
                              'Forward' => 'Avan@,{c}ar',
                              'Forward section in next file' => '',
                              'From 1.2.3 go to' => 'De 1.2.3 v@\'a para',
                              'Go to' => 'V@\'a para',
                              'Index' => '@\'Indice',
                              'Index Entry' => 'Entrada de @\'Indice',
                              'January' => 'Janeiro',
                              'July' => 'Julho',
                              'Jump to' => 'Pular para',
                              'June' => 'Junho',
                              'Last' => '@\'Ultimo',
                              'Last section in reading order' => '@\'Ultima se@,{c}@~ao na ordem de leitura',
                              'March' => 'Mar@,{c}o',
                              'May' => 'Maio',
                              'Menu:' => '',
                              'Name' => 'Nome',
                              'Next' => 'Pr@\'oximo',
                              'Next chapter' => 'Pr@\'oximo cap@\'itulo',
                              'Next file' => '',
                              'Next node' => 'Pr@\'oximo nodo',
                              'Next section in reading order' => 'Pr@\'oxima se@,{c}@~ao na ordem de leitura',
                              'Next section on same level' => 'Pr@\'oxima se@,{c}@~ao no mesmo n@\'ivel',
                              'NextFile' => '',
                              'Node following in node reading order' => 'Nodo seguinte na ordem de leitura de nodos',
                              'Node up' => 'Nodo acima',
                              'NodeNext' => 'Pr@\'oximo Nodo',
                              'NodePrev' => 'Nodo Anterior',
                              'NodeUp' => 'Nodo Acima',
                              'November' => 'Novembro',
                              'October' => 'Outubro',
                              'Overview' => 'Vis@~ao geral',
                              'Overview:' => 'Vis@~ao geral:',
                              'Prev' => 'Pr@\'evio',
                              'PrevFile' => '',
                              'Previous file' => '',
                              'Previous node' => 'Nodo anterior',
                              'Previous section in reading order' => 'Se@,{c}@~ao anterior na ordem de leitura',
                              'Previous section on same level' => 'Se@,{c}@~ao anterior no mesmo n@\'ivel',
                              'Section' => 'Se@,{c}@~ao',
                              'Section One' => 'Se@,{c}@~ao Um',
                              'See %{node_file_href}' => 'Veja %{node_file_href}',
                              'See %{node_file_href} @cite{%{book}}' => 'Veja %{node_file_href} @cite{%{book}}',
                              'See %{node_file_href} section `%{section}\' in @cite{%{book}}' => 'Veja %{node_file_href} se@,{c}@~ao `%{section}\' em @cite{%{book}}',
                              'See %{reference_name}' => 'Veja %{reference_name}',
                              'See @cite{%{book}}' => 'Veja @cite{%{book}}',
                              'See section %{reference_name}' => 'Veja se@,{c}@~ao %{reference_name}',
                              'See section `%{section}\' in @cite{%{book}}' => 'Veja se@,{c}@~ao `%{section}\' em @cite{%{book}}',
                              'September' => 'Setembro',
                              'Short Table of Contents' => 'Breve Sum@\'ario',
                              'Short table of contents' => 'Breve sum@\'ario',
                              'Subsection One-Four' => 'Subse@,{c}@~ao Um-Quatro',
                              'Subsection One-One' => 'Subse@,{c}@~ao Um-Um',
                              'Subsection One-Three' => 'Subse@,{c}@~ao Um-Tr@^es',
                              'Subsection One-Two' => 'Subse@,{c}@~ao Um-Dois',
                              'Subsubsection One-Two-Four' => 'Subse@,{c}@~ao Um-Dois-Quatro',
                              'Subsubsection One-Two-One' => 'Subse@,{c}@~ao Um-Dois-Um',
                              'Subsubsection One-Two-Three' => 'Subse@,{c}@~ao Um-Dois-Tr@^es',
                              'Subsubsection One-Two-Two' => 'Subse@,{c}@~ao Um-Dois-Dois',
                              'T2H_today' => '',
                              'Table of Contents' => 'Sum@\'ario',
                              'Table of contents' => 'Sum@\'ario',
                              'The node you are looking for is at %{href}.' => 'O nodo que vo@^e est@\'a olhando est@\'a em %{href}.',
                              'This' => 'Esse',
                              'This document was generated by @emph{%{user}} on @emph{%{date}} using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Esse documento foi gereado por @emph{%{user}} em @emph{%{date}} usando @uref{%{program_homepage}, @emph{%{program}}}.',
                              'This document was generated by @emph{%{user}} using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Esse documento foi gerado por @emph{%{user}} usando @uref{%{program_homepage}, @emph{%{program}}}.',
                              'This document was generated on @i{%{date}} using @uref{%{program_homepage}, @i{%{program}}}.' => 'Esse documento foi gerado em @i{%{date}} usando @uref{%{program_homepage}, @i{%{program}}}.',
                              'This document was generated using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Esse documento foi gerado usando @uref{%{program_homepage}, @emph{%{program}}}.',
                              'Top' => 'Topo',
                              'Untitled Document' => 'Documento Sem Nome',
                              'Up' => 'Acima',
                              'Up node' => 'Nodo acima',
                              'Up section' => 'Se@,{c}@~ao acima',
                              'by @emph{%{user}}' => 'por  @emph{%{user}}',
                              'by @emph{%{user}} on @emph{%{date}}' => 'por @emph{%{user}} em @emph{%{date}}',
                              'current' => 'atual',
                              'on @emph{%{date}}' => 'em @emph{%{date}}',
                              'section `%{section}\' in @cite{%{book}}' => 'se@,{c}@~ao `%{section}\' em @cite{%{book}}',
                              'see %{node_file_href}' => 'veja %{node_file_href}',
                              'see %{node_file_href} @cite{%{book}}' => 'veja %{node_file_href} @cite{%{book}}',
                              'see %{node_file_href} section `%{section}\' in @cite{%{book}}' => 'veja %{node_file_href} se@,{c}@~ao `%{section}\' em @cite{%{book}}',
                              'see %{reference_name}' => 'veja %{reference_name}',
                              'see @cite{%{book}}' => 'veja @cite{%{book}}',
                              'see section %{reference_name}' => 'veja se@,{c}@~ao %{reference_name}',
                              'see section `%{section}\' in @cite{%{book}}' => 'veja se@,{c}@~ao `%{section}\' em @cite{%{book}}',
                              'unknown' => 'desconhecido'
                            };
    
    $T2H_OBSOLETE_STRINGS->{'pt_BR'} = {
                                         'See' => 'Veja',
                                         'about (help)' => 'sobre (ajuda)',
                                         'beginning of this chapter or previous chapter' => 'come@,{c}o desse cap@\'itulo ou cap@\'itulo anterior',
                                         'cover (top) of document' => 'in@\'icio (topo) do documento',
                                         'current section' => 'se@,{c}@~ao atual',
                                         'first section in reading order' => 'primeira se@,{c}@~ao na ordem de leitura',
                                         'following node' => 'nodo seguinte',
                                         'index' => '@\'indice',
                                         'last section in reading order' => '@\'ultima se@,{c}@~ao na ordem de leitura',
                                         'next chapter' => 'pr@\'oximo cap@\'itulo',
                                         'next node' => 'pr@\'oximo nodo',
                                         'next section in reading order' => 'pr@\'oxima se@,{c}@~ao na ordem de leitura',
                                         'next section on same level' => 'pr@\'oxima se@,{c}@~ao no mesmo n@\'ivel',
                                         'node following in node reading order' => 'nodo seguinte na ordem de leitura de nodos',
                                         'node up' => 'nodo acima',
                                         'previous node' => 'nodo anterior',
                                         'previous section in reading order' => 'se@,{c}@~ao anterior na ordem de leitura',
                                         'previous section on same level' => 'se@,{c}@~ao anterior no mesmo n@\'ivel',
                                         'section' => 'Se@,{c}@~ao',
                                         'see' => 'veja',
                                         'short table of contents' => 'breve sum@\'ario',
                                         'table of contents' => 'sum@\'ario',
                                         'up node' => 'nodo acima',
                                         'up section' => 'se@,{c}@~ao acima'
                                       };
    
    
    texi2html-1.82/doc/0000755000175000017500000000000011264347115016001 5ustar  flichtenheldflichtenheldtexi2html-1.82/doc/texi2html.texi0000644000175000017500000060616411264347115020631 0ustar  flichtenheldflichtenheld\input texinfo @c -*-texinfo-*-
    @c This is the ``Texinfo to HTML Converter'' manual which
    @c which is part of the ``texi2html'' distribution.
    @setfilename texi2html.info
    
    @copying
    @multitable @columnfractions .12 .88
    @item Portions of @command{texi2html}
    @item @tab Copyright @copyright{} 1999, 2000 Lionel Cons@*
    @item @tab Copyright @copyright{} 1999, 2000 Karl Berry@*
    @item @tab Copyright @copyright{} 1999, 2000 Olaf Bachmann@*
    @item @tab Copyright @copyright{} 2002, 2003, 2004, 2005, 2006, 2007 Patrice Dumas@*
    @item @tab Copyright @copyright{} 2001, 2002, 2003, 2004, 2005, 2006 Derek Price@*
    @item @tab Copyright @copyright{} many others.@*
    @item @tab
    @item @tab
    @item Portions of this manual
    @item @tab Copyright @copyright{} 1999, 2000 Karl Heinz Marbaise (manual)@*
    @item @tab Copyright @copyright{} 2003, 2007 Derek Price (manual)@*
    @item @tab Copyright @copyright{} 2003, 2004, 2005, 2006, 2007 Patrice Dumas (manual)@*
    @end multitable
    
    Permission is granted to make and distribute verbatim
    copies of this manual provided the copyright notice and
    this permission notice are preserved on all copies.
    
    @ignore
    Permission is granted to process this file through TeX and
    print the results, provided the printed document carries
    copying permission notice identical to this one except for
    the removal of this paragraph (this paragraph not being
    relevant to the printed manual).
    
    @end ignore
    Permission is granted to copy and distribute modified
    versions of this manual under the conditions for verbatim
    copying, provided that the entire resulting derived work is
    distributed under the terms of a permission notice
    identical to this one.
    
    Permission is granted to copy and distribute translations
    of this manual into another language, under the above
    conditions for modified versions, except that this
    permission notice may be stated in a translation approved
    by the Free Software Foundation.
    @c Author:
    @c   Karl Heinz Marbaise 
    @c   Patrice Dumas
    @c   Derek Price
    @end copying
    
    @c The following is the Texi2HTML program license, not the manual
    @c license. The manual license is stated above.
    @c
    @c --------------------------------------------------------
    @c    This file is part of the Texi2HTML distribution.
    @c
    @c    Texi2HTML is free software; you can redistribute it
    @c    and/or modify it under the terms of the GNU General Public
    @c    License as published by the Free Software Foundation;
    @c    either version 2 of the License, or (at your option) any
    @c    later version.
    @c
    @c    Texi2HTML is distributed in the hope that it will be
    @c    useful, but WITHOUT ANY WARRANTY; without even the implied
    @c    warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
    @c    PURPOSE.  See the GNU General Public License for more
    @c    details.
    @c
    @c    You should have received a copy of the GNU General
    @c    Public License along with this program; if not, write to
    @c    the Free Software Foundation, Inc., 59 Temple Place, Suite
    @c    330, Boston, MA  02110-1301  USA
    @c
    @c --------------------------------------------------------
    
    @c --------------------------------------------------------
    @c Get the version of the script and the last update time
    @c of this manual.
    @c
    @c version.texi is automatically generated through
    @c configure/autoconf.
    @include version.texi
    @c --------------------------------------------------------
    
    @c --------------------------------------------------------
    @c Define an index for command line options
    @defindex op
    
    @c  Define some macros which affect markup and add to the
    @c  index simultaneously.
    @macro longopt {arg}
    @opindex \arg\
    @option{--\arg\}
    @end macro
    
    @macro shortopt {arg}
    @opindex \arg\
    @option{-\arg\}
    @end macro
    
    @macro variable {arg}
    @vindex \arg\
    @code{\arg\}
    @end macro
    @c --------------------------------------------------------
    
    @settitle Texi2HTML -- Texinfo to HTML v@value{VERSION}
    @setchapternewpage odd
    @footnotestyle separate
    @ifset shorttitlepage-enabled
    @shorttitlepage Texi2HTML -- Texinfo to HTML v@value{VERSION}
    @end ifset
    
    @c --------------------------------------------------------
    @c support old style Info Dir entries.
    @ifset OLDSTYLE-INFO-DIR
    @ifinfo
    @format
    START-INFO-DIR-ENTRY
    * Texi2HTML: (texi2html).  Texinfo 2 HTML Converter (texi2html).
    END-INFO-DIR-ENTRY
    @end format
    @end ifinfo
    @end ifset
    @c --------------------------------------------------------
    @c Informations for install-info.
    @c I think the conversion script should be found
    @c where the documentation system lives.
    @c What do you think?
    @dircategory Texinfo documentation system
    @direntry
    * Texi2HTML: (texi2html).  Texinfo to HTML Converter.
    @end direntry
    @c --------------------------------------------------------
    
    @ifnottex
    @ifnothtml
    This file, last updated @value{UPDATED}, documents the @command{texi2html}
    script which converts @uref{http://www.texinfo.org,Texinfo} into
    @uref{http://w3c.org,HTML}.  This edition is for @command{texi2html} version
    @value{VERSION}.
    @end ifnothtml
    
    @insertcopying
    @end ifnottex
    @c --------------------------------------------------------
    @titlepage
    @title Texi2HTML -- Texinfo to HTML v@value{VERSION}
    @subtitle Last Update: @value{UPDATED}
    @subtitle for Version @value{VERSION} of the @command{texi2html} script.
    @author Lionel Cons
    @author Karl Berry
    @author Olaf Bachmann
    @author Patrice Dumas
    @author Derek Price
    @author and many others.
    @author Karl Heinz Marbaise (manual)
    @author Patrice Dumas (manual)
    @author Derek Price (manual)
    @page
    @vskip 0pt plus 1filll
    @insertcopying
    @end titlepage
    
    @comment ========================================================
    @comment             The real text starts here.
    @comment ========================================================
    
    @summarycontents
    @contents
    
    @ifnottex
    @c ========================================================
    @node Top
    @top Texi2HTML
    
    @cindex bug report
    
    This manual, last updated @value{UPDATED}, describes version @value{VERSION}
    of the @command{texi2html} Perl script which converts
    @c The following construct allows me to get
    @c real URL link in HTML and working refs in
    @c info.
    @c
    @c pertusus: support for html cross manual now
    @c exists in texi2html, but it implies having Texinfo's
    @c HTML manual at the right place, which isn't usually the case.
    @c The resulting ref is also less pretty in info.
    @ifnotinfo
    @uref{http://www.texinfo.org,Texinfo} into @uref{http://w3c.org,HTML}.
    @end ifnotinfo
    @ifinfo
    Texinfo (@pxref{Top,,Texinfo,Texinfo}) into @acronym{HTML}.
    @end ifinfo
    
    Please send bug reports concerning this manual to the Texi2HTML developement
    list @email{texi2html-bug@@nongnu.org}. Please state the exact
    version of the manual which contains the bug, as given above.
    
    @ifinfo
    @insertcopying
    @end ifinfo
    
    @example
    @strong{This manual is currently under construction and of course incomplete.  ;-)}
    @end example
    
    @menu
    @c * MenuName:NodeName.       Description
    * Overview::
    * Obtaining texi2html::
                                  Obtaining a copy of the @command{texi2html}
                                  source code distribution
    * Installation::              Installing @command{texi2html}
    * Invoking texi2html::        Description of the command line options
    * Initialization files::      What kind of variables and subroutines appear
                                  in init files and how they are called
    * Changing the page layout::  Fine tuning of the page layout
    * Customizing HTML::          Fine tuning of the @acronym{HTML} elements
                                  associated with the texinfo constructs
    * Internationalization::      Help translating!
    * Incompatibilities::         Incompatibilities with previous versions
    * Specificities::             The minor differences with regard with texinfo
                                  valid for makeinfo or texi2dvi
    * Indexop::                   Command Line Option Index
    * Indexvr::                   Variable Index
    * Indexcp::                   Concept Index
    
    @end menu
    @end ifnottex
    @c ========================================================
    @node Overview
    @chapter Overview
    
    @cindex Texinfo
    @cindex examples of manuals
    
    @uref{http://www.texinfo.org,Texinfo} is the official
    documentation format of the @uref{http://www.gnu.org,GNU}
    project.  It uses a single source file to produce both
    online information and printed output.
    
    It is often desirable to have a way to produce
    @acronym{HTML} from Texinfo sources, as GNU-Info files are
    produced.  It is much simpler to run a converter than it is to
    rewrite all the documentation in @acronym{HTML}, especially
    considering that there is so much Texinfo documentation in
    the world.
    
    Some time ago @command{makeinfo} wasn't able to produce
    @acronym{HTML} output format, but people still wanted documentation in
    @acronym{HTML}.  This was the birthing hour for
    @command{texi2html}.  The basic purpose of @command{texi2html}
    is to convert Texinfo documents into @acronym{HTML}.
    
    Since then, @acronym{HTML} support in @command{makeinfo} has improved, but
    @command{texi2html} is still stronger in many areas, including the degree to
    which it allows customization.  With @command{texi2html}, some important
    aspects of the resulting @acronym{HTML} files may be specified via command
    line options, and configuration files provide an even finer degree of control
    over the final output, allowing most every aspect of the final output not
    specified in the Texinfo input file to be specified.  Configuration files are
    written in @command{perl}, like the main program, and anything which may be
    specified on the command line may also be specified within a configuration
    file.
    
    For an example of the kind of pages @command{texi2html} is capable of
    producing, have a look at the following sites:
    @uref{http://www.singular.uni-kl.de/Manual/html/,the Singular Manual},
    @uref{http://ccvs.cvshome.org/docs/manual,the Cederqvist (CVS Manual)}.
    
    @menu
    * whytexi2html::       Why @command{texi2html} and not @command{makeinfo}?.
    @end menu
    @c --------------------------------------------------------
    
    @node whytexi2html
    @section Why @command{texi2html} and not @command{makeinfo}?
    
    @cindex makeinfo
    
    You would like to produce @acronym{HTML} files from your existing Texinfo
    files?  There are two programs you can use to do this.  The first is
    @command{makeinfo} (@pxref{Generating HTML,,,texinfo,GNU Texinfo}).
    The second is @command{texi2html}.
    
    The design goal of @command{makeinfo}'s @acronym{HTML} output was to produce
    readable @acronym{HTML} output. It is now possible to use @acronym{CSS}
    for @acronym{HTML} customization. Another possibility is to use intermediate 
    formats, like docbook or @command{makeinfo} @acronym{XML} 
    and @acronym{XSL} stylesheets to customize the resulting document. Still the 
    output produced by @command{makeinfo} isn't customizable.
    
    The current development of @command{texi2html} tries to
    provide for producing the more interesting and sophisticated @acronym{HTML}
    pages that today's Internet users have come to expect.
    The goal behind @command{texi2html} is to generate attractive @acronym{HTML} by
    default but also to allow users considerable freedom to affect the final
    style and design of the output @acronym{HTML} pages.  This is achieved via
    command line options and flexible configuration files. 
    
    @c The main disadvantage of @command{makeinfo}'s
    @c @acronym{HTML} output is that it is only available as one big file.
    @c This is of course readable but not very usable.  This would be hard to
    @c remedy in @command{makeinfo}, as the Texinfo source has to be read in at
    @c least twice to implement split nodes.  This would require a major
    @c rewrite of the @command{makeinfo} source.
    
    @c think more about this????
    In contrast to the @acronym{HTML} produced by @command{makeinfo --html} (the
    @command{makeinfo} program is part of the Texinfo distribution), the
    @command{texi2html} program, among other differences, allows for the
    customization of the entire page layout, including headers, footers, style
    sheets, etc., allows for customization of the low level @acronym{HTML}
    formatting, provides for splitting documents at various levels, and provides
    for using the @command{latex2html} program to convert @code{@@tex} sections of
    the Texinfo source.
    
    The focus on @acronym{HTML} is still present but with the help of the
    customization files it is now possible to use @command{texi2html} to
    produce other formats as well. @command{texi2html} may for example be
    turned into a texinfo to roff translator with the help of a customization file 
    provided with the distribution.
    
    @command{texi2html} should reasonably convert all Texinfo
    4.8 constructs.  If you find it does not, please send a bug report to the
    @email{texi2html-bug@@nongnu.org} email list.
    
    @c ========================================================
    @node Obtaining texi2html
    @chapter Obtaining @command{texi2html}
    @cindex downloading @command{texi2html} source
    @cindex @command{texi2html} source, downloading
    @cindex source code for @command{texi2html}, downloading
    
    The latest version of the source code for @command{texi2html} should be
    available from
    @uref{http://www.nongnu.org/texi2html/,www.nongnu.org/texi2html/}.
    @command{texi2html} is also available with 
    @uref{http://www.tug.org/teTeX/,teTeX} and 
    @uref{http://www.tug.org/texlive/, TeX Live}.
    
    @c ========================================================
    @node Installation
    @chapter Installation of @command{texi2html}
    @cindex Installation
    @cindex configure
    
    @menu
    * Requirements::
    * Configuring and rebuilding::
    * Installing::
    * Advanced build features::
    @end menu
    
    @node Requirements
    @section Requirements
    
    To install @command{texi2html}, you must first obtain a copy of the
    source distribution.  @xref{Obtaining texi2html}.
    
    @command{texi2html} requires @command{perl} version 
    5.00405 or above to be run. An older perl 5 version with 
    @code{File::Spec} is also likely to work.  The current version has 
    been lightly tested on a wide range of perl, but has not been 
    tested extensively on versions of @command{perl} below 5.6.
    To play nice with encodings you 
    also need the @code{Encode} and @code{Unicode::Normalize} modules.
    
    To rebuild the script perl isn't required in most cases. For more
    information about advanced build features, see @ref{Advanced build features}.
    
    @node Configuring and rebuilding
    @section Configuring the source and rebuilding
    
    @command{texi2html} is a standard Automake-based distribution.
    If you have a source version, you should run @command{./configure}
    to configure the sources and @command{make} to build the script.  
    
    @command{./configure}
    accepts options to select the installation directory for the @file{texi2html}
    file, the default directories @command{texi2html} will use to look for
    configuration files, and other details.  Run @command{./configure --help} for
    more information.
    Running @command{./configure} creates @file{texi2html_configured.pl} from
    @file{texi2html.pl}, and also builds the @command{make} configuration
    files (@file{Makefile}s).
    
    Running @command{make} combines five files into the final
    @file{texi2html} program file:
    @itemize
    @item @file{texi2html_configured.pl} contains the base program,
    @item @file{MySimple.pm} handles the command line options, 
    @item @file{texi2html.init} is the default configuration file, and 
    @item @file{T2h_i18n.pm} is used for internationalization.
    @item @file{translations.pl} contains the translations of the strings used in
    documents.
    @end itemize
    
    Running @command{make} also rebuilds the documentation if needed.
     
    @node Installing
    @section Installing
    
    @command{make install} performs the installation to the locations specified to
    the @command{./configure} script.  This usually involves placing the actual
    @file{texi2html} file someplace in your path, such as @file{/usr/local/bin} or
    @file{/usr/bin}.
    
    Installing @command{texi2html} in your path should be sufficient 
    to run it.  To use default initialization files, or a configuration file for
    La@TeX{}2HTML when using @command{latex2html} to convert @code{@@tex} sections
    (@pxref{Expanding TeX regions}), install them in the package data directory
    specified to configure.  This is @file{/usr/local/share/texi2html/} by default,
    but depends on the value of the @longopt{pkgdatadir=@var{dir}} option passed to
    the @command{./configure} script. Files used for strings customization and
    internationalization are also searched for in the @file{i18n} directory
    of this directory. @xref{Using init files} for more. 
    
    @node Advanced build features
    @section Advanced build features
    
    This section documents features that are unlikely to be used but deserve
    a bit of documentation. 
    
    A @command{./configure} switch, 
    @longopt{with-unicode} allows to choose whether the unicode code should
    be used or not. The default is to detect it with a test. This
    code requires @code{Encode} and @code{Unicode::Normalize} modules.
    
    A similar @command{./configure} switch, 
    @longopt{with-unidecode} allows to choose whether the perl module
    @code{Text::Unidecode} should be used or not. The default is to detect it 
    with a test. This code requires the @code{Text::Unidecode} module.
    
    @command{perl} isn't 
    needed to build the script. the script is build by @file{./configure} 
    and a shell script launched by @command{make} which is a simple 
    wrapper around a @command{sed} one-liner. The @command{perl} command
    can be specified with the environment variable @code{$PERL}, otherwise
    it is detected. @command{perl} is required to rebuild the documentation
    as the @acronym{HTML} documentation is rebuild with @command{texi2html}
    itself.
    
    The translations are managed by a script @command{manage_i18n.pl}, created
    by @command{./configure}. @command{manage_i18n.pl} requires 
    @code{Data::Dumper} to function normally. If this module isn't there 
    @command{./configure} detects it and @command{manage_i18n.pl} doesn't
    really rebuild the translations, but only copy files. It is possible
    to use the @command{./configure} switch @longopt{enable-translations}
    to override the @command{./configure} detection. For more about 
    translations, see @ref{Internationalization}.
    
    It is possible to build from outside of the source directory, for example
    the following should work:
    
    @example
    tar xzvf texi2html-@value{VERSION}.tar.gz
    mkdir texi2html_build
    cd texi2html_build
    ../texi2html-@value{VERSION}/configure && make
    @end example
    
    All these features enables to build @command{texi2html} on a platform 
    in order to run it on another platform, a kind of cross-building. The 
    @command{./configure} switches and @code{$PERL} allows to specify 
    everything needed for the build of the @command{texi2html} script.
    
    @c ========================================================
    @node Invoking texi2html
    @chapter Invoking @command{texi2html}
    
    To produce an @acronym{HTML} manual, run @command{texi2html} with a Texinfo
    file as an argument.  For example, this manual is created with:
    
    @example
    $ texi2html texi2html.texi
    @end example
    
    @command{texi2html} can accept more than one manual on the command line, and
    will proceed with each of the manuals in turn.
    
    The behaviour of @command{texi2html} may be changed with command line
    options.  These command line options are always associated with corresponding
    @command{perl} variables which may appear in init files, and these 
    variables are presented in this chapter each time a switch is described. 
    
    Boolean command line switches always have a corresponding negated switch,
    obtained by prepending @samp{no} or @samp{no-} to the switch name. For example
    @c PAT maybe it should be better to have @option{--nomenu} and @option{--menu}
    @c as it is not needed and maybe harmfull to have an index entry for these
    @c options here
    @longopt{nomenu} does the reverse of @longopt{menu}.
    
    When more than one manual is processed, the command line apply to all the 
    manuals, except for command-line switches setting the output file names.
    
    @menu
    * General options::
    * Splitting output::          The @acronym{HTML} output may be split at 
                                  different levels
    * Output files::
    * Expansion::
    * Texinfo related options::
    * Page layout options::       Customizing page layout
    * Style options::             Customizing the @acronym{HTML} and text style
    * Expanding TeX regions::
    * Using init files::          Specifying initialization files for fine tuning
    @end menu
    
    @c --------------------------------------------------------
    @node General options
    @section General options
    
    Miscellaneous general options:
    @table @asis
    @item @longopt{error-limit=@var{num}}
    Quit after @var{num} errors (default 1000), (variable @variable{$ERROR_LIMIT}).
    @item @longopt{help}
    Display a short help and exit.
    @item @longopt{verbose}
    Be verbose.
    @item @longopt{version}
    Display version information and exit.
    @end table
    
    @c --------------------------------------------------------
    @node Splitting output
    @section Specifying where to split the generated document
    
    The @acronym{HTML} manual resulting from the processing of the Texinfo source
    may be split into files at different levels.  This is specified with the
    option @longopt{split} which takes an argument, namely the level of splitting
    (variable: @variable{$SPLIT}). This level may be: 
    
    @table @asis
    @item @samp{chapter}
    The document is split at @code{@@chapter}, @code{@@appendix}, or @code{@@unnumbered}.
    @item @samp{section}
    The document is split at the same places as it is using the @samp{chapter}
    argument, and also at @code{@@section}, @code{@@appendixsec} or
    @code{@@unnumberedsec}.
    @item @samp{node}
    The document is split at every sectioning command.  It is not necessarily 
    split at each node, if the @code{@@node} structure doesn't correspond with
    the sectioning command structure (see below).
    @item @samp{none}
    The document isn't split.  This is the default.
    @end table
    
    There are two kinds of commands which may be used to define sectioning
    elements in Texinfo: @code{@@node} and the structuring commands (@code{@@top},
    @code{@@section}, @code{@@appendixsubsec},  and so on).  A node just preceding
    a structuring command is considered to be part of the same sectioning element
    as that command.  If the @code{@@node Top} isn't associated with a structuring
    command it also defines a sectioning element.
    
    By default, nodes which aren't associated with a structuring command are not
    considered to be sectioning commands.  They are always considered to be part
    of a sectioning element defined by a structuring command.  It is possible to
    change this behaviour via the @longopt{use-nodes} option (variable
    @variable{$USE_NODES}).  In this case, nodes not associated with structuring
    commands are also considered to be sectioning commands defining a sectioning
    element. 
    
    This default behaviour mimics @command{texi2dvi} behaviour, which ignores 
    @code{@@node} commands for the purprose of sectioning, while the second
    looks like @command{makeinfo} behaviour (@pxref{Two Paths,,,texinfo,GNU Texinfo}). 
    
    As an illustration, the following table shows how a sample Texinfo document is
    divided into sectioning elements when @longopt{use-nodes} is used and not:
    
    @multitable @columnfractions .2 .1 .2 .1 .2
    @item Texinfo code
    @tab
    @tab
    default case
    @tab
    @tab
    with @longopt{use-nodes}
    @item
    @*
    @*
    @example
    @@node node1
    @@chapter node 1
    node1 text
    
    @@node node2
    node2 text
    
    @@node node3
    node3 text
    @@chapter node 3
    chapter text
    @end example
    @tab
    @tab
    first element:
    
    @example
    @@node node1
    @@chapter node 1
    node1 text
    
    @@node node2
    node2 text
    @end example
    
    second element:
    
    @example
    @@node node3
    node3 text
    @@chapter node 3
    chapter text
    @end example
    
    @tab
    @tab
    first element:
    
    @example
    @@node node1
    @@chapter node 1
    node1 text
    @end example
    
    second element:
    
    @example
    @@node node2
    node2 text
    @end example
    
    third element:
    
    @example
    @@node node3
    node3 text
    @@chapter node 3
    chapter text
    @end example
    
    @end multitable
    
    @c --------------------------------------------------------
    @node Output files
    @section Setting output file and directory names
    
    The manual name is constructed by stripping the @samp{.texi},
    @samp{.txi}, @samp{.texinfo}, or @samp{.txinfo} extension from the Texinfo file
    name. 
    
    By default, @command{texi2html} generates the manual file in the current 
    directory if the manual isn't split. A @samp{.html} file extension is appended
    to the manual name.
    
    If the manual is split the files are put in a directory named after the
    manual name. The file name is constructed using the manual name as basename.
    An underscore followed by a number is appended
    to the basename for each files corresponding with sectioning elements, with the
    exception of the top element. For the top element there is nothing appended.
    The files containing special elements pages
    have an underscore and a 3 letter code corresponding to their content
    (@samp{toc} for table of contents, @samp{abt} for about, @samp{ovr} for
    overview, @samp{fot} for footnotes if they are separated) appended.  
    Lastly, an @samp{.html} file extension is appended.
    
    Thus, if the texinfo file @file{afile.texi} is processed and split at chapters
    into 3 files, the generated files (in directory @file{afile}) will be:
    
    @example
    afile.html         --> @code{@@node Top} or @code{@@top} section
    afile_1.html       --> Chapter 1
    afile_2.html       --> Chapter 2
    afile_toc.html     --> Table of Contents
    afile_abt.html     --> About Page
    @end example
    
    This default behavior may be modified by several command line options. If the
    output isn't split, the prefix file name may be overrided by the
    @longopt{output} command line option (variable @variable{$OUT}). If the output
    is split, and @longopt{output} is set, the files are placed in the directory
    specified by the argument to the option.
    
    The basename may be overridden with @longopt{prefix} (variable
    @variable{$PREFIX}).  If @longopt{short-ext} is given, @samp{.htm} is appended
    instead of @samp{.html} in the final step (variable @variable{$SHORTEXTN}).  
    The @longopt{top-file} option
    overrides the top element file name (variable @variable{$TOP_FILE}).  This can
    be used to name the top element file @samp{index.html}.  Similarly,
    @longopt{toc-file} changes the name of the table of contents file (variable
    @variable{$TOC_FILE}).
    
    Reusing the example above, but this time calling @command{texi2html} like so:
    
    @example
    $ texi2html -split chapter -prefix manual -short-ext -top-file index.htm -toc-file contents.htm afile.texi
    @end example
    
    we get, in @file{manual}:
    
    @example
    index.htm          --> @code{@@node Top} or @code{@@top} section
    manual_1.htm       --> Chapter 1
    manual_2.htm       --> Chapter 2
    contents.htm       --> Table of Contents
    manual_abt.htm     --> About Page
    @end example
    
    The file names generated by @command{texi2html} differ from those generated
    by @command{makeinfo}. @command{makeinfo} uses the @code{@@setfilename}
    to determine the manual name@footnote{This behaviour is triggered only by a 
    variable set in an init file,  @variable{$USE_SETFILENAME} 
    (@pxref{Using init files}).}. 
    Also @command{makeinfo} uses the node name to construct
    the file names while splitting at nodes.  
    
    It is possible to get the same
    behaviour out of @command{texi2html} by specifying the
    @longopt{node-files} option (variable @variable{$NODE_FILES}).  
    The default is false for this option.
    If the output
    isn't split at nodes, @command{texi2html} will still output files named after
    the nodes, without real content but redirecting to the right file.
    @c Is this true?  It wasn't in the last version.  -DRP
    This trick enables the generated @acronym{HTML} manual to be a
    target for the cross-references of other manuals generated by
    @command{makeinfo} or @command{texi2html}. 
    
    In case the files are named after the node names, 
    another command-line option, @longopt{transliterate-file-names}
    can be set to trigger ASCII transliteration of node file names 
    (variable @variable{$TRANSLITERATE_NODE}). Transliteration is set in the 
    default case.
    
    @c --------------------------------------------------------
    @node Expansion
    @section Specifying which regions get expanded
    
    The default for @command{texi2html} is to expand the @code{@@ifhtml}, 
    @code{@@html}, and @code{@@menu} regions, all the @code{@@ifnot} regions 
    except @code{@@ifnothtml}, and no other @code{@@if} regions.
    
    It is possible to expand other regions by setting @longopt{if},
    where @samp{} is replaced by the literal name of the region (for
    example, @samp{--iftex}).  Symetrically, if @longopt{no-if} is
    specified, the @samp{} region is ignored.  The configuration file
    array, @variable{@@EXPAND}, holds the names of regions which should be 
    expanded. The only region name present in @code{@@EXPAND} in the default case 
    is @samp{html}. 
    
    If @longopt{nomenu} is set, the @code{@@menu} sections are not expanded
    (variable @variable{$SHOW_MENU}). The default is to expand @code{@@menu}
    sections.
    @c How is --no-ifhtml specified?  -DRP
    
    @c --------------------------------------------------------
    @node Texinfo related options
    @section Command line options related to Texinfo language features
      
    Miscalleneous Texinfo related things may be specified via command line options. 
    
    @table @asis
    @item @longopt{lang=@var{lang}}
    Sets the document language similar to the Texinfo directive,
    @code{@@documentlanguage @var{lang}} (variable @variable{$LANG}).
    The default is @samp{en}, that is, use the english language strings.
    @item @shortopt{D@var{var}}
    Sets @var{var}.  Equivalent to, @code{@@set @var{var} 1}, in Texinfo.
    @item @shortopt{U@var{var}}
    Clears @var{var}.  Equivalent to, @code{@@clear @var{var}}, in Texinfo.
    @item @shortopt{P@var{dir}}
    Prepend @var{dir} to the list of directories to search for
    @code{@@include} files (the associated array is @variable{@@PREPEND_DIRS},
    empty in the default case).
    @item @shortopt{I@var{dir}}
    Append @var{dir} to the list of directories to search for 
    @code{@@include} files (the associated array is @variable{@@INCLUDE_DIRS},
    empty in the default case).
    @end table
    
    The include files are always searched for in the current directory.
    
    @c --------------------------------------------------------
    @node Page layout options
    @section Page layout related command line options
    
    If the @longopt{frames} option is specified, @acronym{HTML} frames 
    are used.  A file describing the frame layout is generated, and the
    document page is associated with a frame where the short table of
    content appears (variable @variable{$FRAMES}). The default is not
    to use frames.
    
    It is also possible to suppress the section navigation panel with
    @longopt{no-headers} (variable @variable{$SECTION_NAVIGATION}, the default
    is to output all the navigation panels), and to specify
    whether footnotes should appear at the foot of the same page which contains
    the reference to the note with @longopt{footnote-style} set to
    @samp{end} or on a separate page with @option{--footnote-style} 
    set to @samp{separate} (variable @variable{$SEPARATED_FOOTNOTES} set to 0 
    or 1).
    The default is to have separated footnotes.
    
    @c --------------------------------------------------------
    @node Style options
    @section Customizing the @acronym{HTML} and text style
    
    @cindex @acronym{CSS}
    
    Miscalleneous style changes may be achieved with command line options. 
    
    @table @asis
    @item @longopt{doctype=@var{DTD}}
    @itemx @longopt{frameset-doctype=@var{DTD}}
    You can specify the document DTD by setting these options. 
    @longopt{frameset-doctype} applies to the file describing the frames when 
    frames are used (corresponding variables are @variable{$DOCTYPE} and 
    @variable{$FRAMESET_DOCTYPE}).
    
    The default for the document doctype is:
    @example
    
    @end example
    And for the frameset doctype:
    @example
    
    @end example
    
    @item @longopt{iso}
    If this option is set, ISO8859 entities are used for some special symbols,
    like Copyright @copyright{} (variable @variable{$USE_ISO}). It is the default.
    
    @item @longopt{css-include=@var{file}}
    This command line switch provides for the inclusion of an external
    Cascading Style Sheet (@acronym{CSS}) file.  More than one file may be
    specified, and @samp{-} stands for the standard input (array
    @variable{@@CSS_FILES}). 
    
    The option use is the same than for @command{makeinfo} and is described
    extensively in @ref{HTML CSS,,,texinfo,GNU Texinfo}.
    Briefly, the @acronym{CSS} @code{@@import} lines from the external file
    @acronym{CSS} file are pasted  before the
    @c What does this mean?  I don't think I clarified this one much.  -DRP
    @c Is it better ? -PAT
    @command{texi2html} @acronym{CSS} rules, and the external file @acronym{CSS}
    rules are pasted after the @command{texi2html} @acronym{CSS} rules.  
    
    @item @longopt{css-ref=@var{URL}}
    This command line switch provides for the inclusion of an reference
    to a Cascading Style Sheet (@acronym{CSS}) URL.  More than one URL may be
    specified (array @variable{@@CSS_REFS}). 
    
    @item @longopt{html-xref-prefix=@var{path}}
    This option sets the base directory for external @acronym{HTML} texinfo manuals 
    (variable @variable{$EXTERNAL_DIR}).  Defaults to @samp{../}.
    
    @item @longopt{def-table}
    If this option is set, @acronym{HTML} tables are used to format definition 
    commands, rather than @acronym{HTML} definition tables (variable
    @variable{$DEF_TABLE}). Default is false.
    
    @item @longopt{short-ref}
    If this option is set, cross-references are given without section numbers
    (variable @variable{$SHORT_REF}). Default is false.
    
    @item @longopt{number-sections}
    If this option is set, sections are numbered (variable
    @variable{$NUMBER_SECTIONS}).  This is the default.
    
    @item @longopt{toc-links}
    If this option is set, links from headings to @acronym{TOC} entries are
    created (variable @variable{$TOC_LINKS}). Default is false.
    @end table
    
    @c --------------------------------------------------------
    @node Expanding TeX regions
    @section Expanding @code{@@tex} and @code{@@math} regions using La@TeX{}2HTML
    
    It is possible to use @uref{http://www.latex2html.org/,La@TeX{}2HTML}  
    to process @code{@@tex} regions and @code{@@math@{@}} commands.  This is an
    attractive way to display mathematical constructs in the @acronym{HTML}
    manual.  The @longopt{l2h} option activates this feature (variable
    @var{$L2H}).  It is usually desirable to expand @code{@@tex} sections when this
    option is specified (@pxref{Expansion}). The default is not to use this
    feature.
    
    The @longopt{l2h-l2h=@var{program}} option enables changing the name/location
    of the La@TeX{}2HTML program processing @TeX{} regions (variable
    @variable{$L2H_L2H}). The default is @command{latex2html}.
    
    @longopt{l2h-tmp} sets the directory used for temporary
    files, this name shouldn't contain a dot @samp{.}
    @c Why not?  -DRP
    (variable is @variable{$L2H_TMP}). Defaults to the current dir.
    
    The file specified by @longopt{l2h-file} is
    used as La@TeX{}2HTML init file. It is searched at the same places than
    init files (@pxref{Using init files}), and the default is @file{l2h.init}.
    
    @c --------------------------------------------------------
    @node Using init files
    @section Use initialization files for fine tuning
    
    @cindex internationalization
    @cindex @file{Config}
    
    Initialization variables are read first from
    @file{/usr/local/share/texi2html/Config} (the exact location being
    changeable with the @longopt{pkgdatadir=dir} option of the
    @command{configure} script, see @ref{Installation}),
    @file{/usr/local/etc/texi2html/Config} (the exact location being
    changeable with the @longopt{sysconfdir=dir} option of the
    @command{configure} script, see @ref{Installation}), from @file{./Config}
    then from @file{$HOME/.texi2html/Config}. Any command-line option 
    can override the corresponding option set in init file, and the 
    option @longopt{init-file} specifies an init file to be loaded, with 
    later settings overriding earlier ones.
    
    The init files specified with @longopt{init-file} are searched
    first in the current directory, then in the @file{$HOME/.texi2html/}
    directory, in the @file{/usr/local/etc/texi2html/} directory and lastly 
    in the @file{/usr/local/share/texi2html/} directory.
    
    A file is also included based on the language selected,
    by @variable{$LANG}, @longopt{document-language} or 
    @code{@@documentlanguage}.
    If no language was selected @samp{en} is considered to be
    the language. All the files with name the language name in 
    @file{/usr/local/share/texi2html/i18n/}, 
    @file{/usr/local/etc/texi2html/i18n/},
    @file{$HOME/.texi2html/i18n/} and then @file{./i18n/} are included.
    
    The default initialization options are defined in the
    @file{texi2html.init} file contained in the @command{texi2html}
    distribution (which gets included near the beginning of the
    @command{texi2html} script that gets installed).
    
    To customize @command{texi2html} it is best if you copy the
    appropriate sections from the @file{texi2html.init}
    contents into an appropriate local initialization file,
    make the necessary changes there, and then have
    @command{texi2html} read this initialization file by one of
    the means described above.
    
    Some init files are provided with @command{texi2html}, for example
    @file{book.init} which produces an output more in line with 
    what could be in a book, or @file{chm.init} outputs files
    that can be used to produce a CHM file.
    
    @c ========================================================
    @node Initialization files
    @chapter Overview of initialization files content and loading
    
    The initialization files are @command{perl} files, read as explained 
    in @ref{Using init files}. You don't need to know much of @command{perl}
    to do some simple changes in variable values, however, to be able to 
    really take advantage of all the features of the initialization file,
    a good knowledge of @command{perl} is required.
    
    In initialization file two kind of variables appear. These are normal
    variables (including arrays and hashes) and references on functions. 
    The later permits the dynamic redefinition of functions used to produce
    the @acronym{HTML} manual. You should be able to change the value of some  
    normal variables without a deep knowledge of @command{perl}, by looking
    at the existing examples. The possible mistakes in that case could be
    omitted @samp{;}, and bad quoting.
    
    Initialization file are loaded from the main program by
    the mean of a @code{require}, while in the @code{Texi2HTML::Config}
    namespace. This means that the namespace of the main program and
    the namespace of initialization files are distinct, which ensures
    that no name clash should happen. The variables are declared with
    @code{use vars}, such that it should be possible to use the 
    @code{use strict} pragma in the initialization file code.
    
    To avoid messing with the variables in the @code{main} namespace
    all the global variables which could be of use in the init files 
    are in the @code{Texi2HTML} namespace. Notice that the functions 
    of the main program are still in the @code{main} namespace.
    
    Since @command{texi2html} can proceed more than one file on the
    command line, you should make sure that you initialize the variables
    that are used during a manual formatting. The handlers explained
    later can be used for that (@pxref{Bypassing normal formatting}).
    
    @menu
    * Encodings::                 Setting the encodings.
    * Redefining functions::      Function redefinition is achieved with 
                                  redefinition of references on functions.
    * Function prototypes::       Conventions used in that manual for function 
                                  reference prototypes display.
    @end menu
    
    @c --------------------------------------------------------
    @node Encodings
    @section Setting the encodings
    
    There are four encodings relevant for @command{texi2html}, they are
    associated with corresponding configuration variables. If these 
    variables are defined they
    determine a corresponding value in @code{%Texi2HTML::THISDOC}
    which is otherwise autodetected:
    @enumerate 
    @item The variable @variable{$DOCUMENT_ENCODING} corresponds with 
    the document encoding.
    If defined, this variable sets 
    @variable{$Texi2HTML::THISDOC@{'DOCUMENT_ENCODING'@}}.
    If not defined, the encoding appearing in @code{@@documentencoding} will
    be used to set @variable{$Texi2HTML::THISDOC@{'DOCUMENT_ENCODING'@}}.
    The @code{@@documentencoding} value appears in 
    @variable{$Texi2HTML::THISDOC@{'documentencoding'@}}.
    @item The texinfo files encoding.
    If @variable{$IN_ENCODING} is set, this sets 
    @variable{$Texi2HTML::THISDOC@{'IN_ENCODING'@}}.
    Otherwise, when @code{$Texi2HTML::THISDOC@{'DOCUMENT_ENCODING'@}}
    is set, @code{$Texi2HTML::THISDOC@{'IN_ENCODING'@}} is also set
    if the encoding is supported by perl.
    @item The out files encoding. It is associated with the variable
    @variable{$OUT_ENCODING}. If defined, 
    @variable{$Texi2HTML::THISDOC@{'OUT_ENCODING'@}} is set accordingly.
    If not defined, the value of
    @code{$Texi2HTML::THISDOC@{'ENCODING_NAME'@}} 
    or 
    @code{$Texi2HTML::THISDOC@{'IN_ENCODING'@}}
    is used if one of these variables is set.
    @item The encoding advertized in out files, associated with the variable
    @variable{$ENCODING_NAME}. It sets 
    @variable{$Texi2HTML::THISDOC@{'ENCODING_NAME'@}} if defined.
    
    If unset the value of this variable is based on the
    other ENCODING values, and if they are all undefined, the variable
    @variable{$DEFAULT_ENCODING} is used.
    @end enumerate
    
    The values for the encoding related variables are set in the default 
    @code{init_out} function reference (@pxref{Output initialization}).
    
    In general the @code{$DOCUMENT_ENCODING} and @code{$IN_ENCODING} are
    set to the right values. @code{$OUT_ENCODING} is also rightly set
    according to @code{$ENCODING_NAME}. 
    To force a given encoding for the output, the
    @code{$ENCODING_NAME} value may be set. The current default output encoding
    is UTF-8. 
    
    @c --------------------------------------------------------
    @node Redefining functions
    @section Redefining functions in initialization files
    
    To redefine a function you must replace the corresponding funtion
    reference with a reference on your function. 
    Thus you should write your function, give it a name you
    are certain it is unique in the @code{Texi2HTML::Config} namespace,
    and override the value of the function reference with your own 
    function reference. When another function from the main program
    (or from another functions of an initialization file) calls the reference,
    your function will be used. 
    
    For example the function
    reference corresponding with the function called when doing an
    anchor is called @code{$anchor}. Thus if you want to override the
    corresponding function
    you could write:
    
    @example
    # override the function reference
    $anchor = \&my_own_function;
    
    # the function reference now refers to
    sub my_own_function @{
    # process arguments and return an html anchor
    @}
    @end example
    
    @c --------------------------------------------------------
    @node Function prototypes
    @section Conventions used for function prototypes
    
    As the functions are defined by a reference name, we will always
    use the reference name in function prototypes. For the function arguments
    we will use @code{\@@array} for a reference on an array and similarly 
    @code{\%hash} for a reference on a hash.
    
    Thus, the prototype for the function associated with the function
    reference @samp{$formatting_function} will be:
    
    @deftypefn {Function Reference} $text formatting_function $arg1 \@@arg2
    @code{formatting_function} takes as first argument @var{$arg2},
    as second argument a reference on an array @var{\@@arg2}
    and returns the formatted text @var{$text}.
    @end deftypefn
    
    To redefined the corresponding function, you should write:
    
    @example
    $formatting_function = \&my_formatting_function
    
    sub my_formatting_function($ $)
    @{
        my $arg1 = shift;
        my $arg2 = shift;
        # prepare $formatted_text
        .....
        return $formatted_text
    @}
    @end example
    
    @c --------------------------------------------------------
    @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    @c ========================================================
    @c @include custpage.texi
    @node Changing the page layout
    @chapter Fine tuning of the page layout
    
    Some features of the page layout might be specified with command line
    options, the corresponding variables are described in 
    @ref{Page layout options}.
    Fine tuning of the page layout may be achieved
    with redefinition of other variables and function references in the 
    initialization files.
    
    @menu
    * The different pages::       The different categories of pages.
    * The page layout::           The elements of a page.
    * Navigation panel::          How to change the navigation panel.
    * Program variables::         The available main program variables and some 
                                  usefull functions from the main program.
    * Output initialization::     Setting variables before the document
                                  production but after the texinfo parsing.
    * Output finalization::       Cleaning after document generation.
    * css::                       Customizing css lines.
    * Customizing header::
    * Customizing section::
    * Customizing footer::
    * Special pages::             Customizing table of contents, top, about page.
    * File and target names::     Customizing the file and target names.
    * External index files::      Putting index entries in external files.
    @end menu
    
    @c --------------------------------------------------------
    @node The different pages
    @section The different categories of pages and sectioning elements
    
    The following sectioning elements can be associated with pages:
    
    @table @emph
    @item Normal elements
    These are normal sections or nodes. Their association with pages is
    determined by the splitting of the document. @xref{Splitting output}.
    @item Top element
    The top element is the higher element in the document structure.
    If there is a @code{@@top} section it is the element associated with
    that section. Otherwise it is the element associated with the 
    @code{@@node Top}. If there is no @code{@@node Top} the first element is the 
    top element.
    
    The top element is formatted differently than a normal element if there
    is a @code{@@top} section or the @code{@@node Top} isn't associated 
    with a sectioning command.
    @item Misc elements
    These elements are associated with pages if the document is split.
    There are four misc elements:
    @enumerate
    @item Table of contents
    @item Short table of contents, also called Overview
    @item Footnotes page
    @item About page
    @end enumerate
    
    The @emph{About page} shouldn't be present for documents consisting
    in only one sectioning element, or for documents unsplit and without
    navigation information. The @emph{Footnote page} should only
    be present if the footnotes appear on a separated page 
    (@pxref{Page layout options}), however a footnote element is present if
    the document isn't split. The @emph{Table of contents} should only
    be formatted if @code{@@contents} is present in the document.
    Similarly the @emph{Overview} should only appear if @code{@@shortcontents}
    or @code{@@summarycontents} is present. The Table of contents and 
    the Overview may also be directly included within the document, not
    as separate pages (@pxref{Contents and Overview text}).
    @end table
    
    @c --------------------------------------------------------
    @node The page layout
    @section Page layout and navigation panel overview
    
    A page is broken up in three parts. A page header, the sections 
    and a page footer. A common element in the page layout is a navigation
    panel with icons or text linking to other sections or pages. Another
    common element is a rule, separating sections or footer. The navigation
    panel and the rules may be part of the sections or part of headers or
    footers. You may use the variables @variable{$SMALL_RULE}, 
    @variable{$DEFAULT_RULE}, @variable{$MIDDLE_RULE} and @variable{$BIG_RULE} 
    for rules of different sizes.
    The defaults are 
    @example
    $SMALL_RULE = '
    '; $DEFAULT_RULE = '
    '; $MIDDLE_RULE = '
    '; $BIG_RULE = '
    '; @end example In the header some important meta data may be defined, like the title or style information, and textual informations may be present in comments. All this doesn't appear directly in the displayed @acronym{HTML}, though. The page layout is mainly controlled by functions, the precise functions called depending on the document splitting. The navigation panel, however, can be customized with variables. @subheading Element labels @anchor{Element labels} There are 19 items associated with elements. Each of these is associated with a name and a reference to the element they represent, when such an element exists. The element is either a global element or an element relative to the current element. The relative elements are found with respect with the document structure defined by the section structuring commands (@code{@@chapter}, @code{@@unnumbered}@dots{}) or by the nodes (in that case the node directions are specified on node line or in menu organization). These items are called @dfn{element labels}. They may be associated with a button (@pxref{Button specifications}), and used in the formatting functions (@pxref{Program variables}). Here is the list: @table @emph @item @samp{@ } An empty button @item Top Top element. The associated name is @variable{$TOP_HEADING} if that variable is defined. This variable is not set by default. @item Contents Table of contents @item About About (help) page @item Overview Overview, short table of contents @item First First element in reading order @item Last Last element in reading order @item Index The first chapter with @code{@@printindex}. The associated name is @variable{$INDEX_CHAPTER}, if the variable is set. This variable is not set by default. @item This The current element @item Back Preceding element in reading order @item FastBack Beginning of this chapter or previous chapter if the element is a chapter @item Prev Previous section on the same level @item NodePrev Previous node @item Forward Next element in reading order @item FastForward Next chapter @item Next Next section on the same level @item NodeNext Next node @item Following Next node in node reading order @item Up Up section @item NodeUp Up node @item FileNext Forward element first in the next page (or file) @item FilePrev Backward element first in the previous page (or file) @end table @c -------------------------------------------------------- @node Navigation panel @section Customization of the navigation panels buttons A lot of customization of the navigation panel may be achieved without redefining functions, with variables redefinition. In case it isn't enough, it is also possible to redefine the function doing the navigation panel formatting. @menu * General purpose variables:: Variables controlling the navigation panel at a global level * Button specifications:: * Panel formatting function:: @end menu @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= @node General purpose variables @subsection Controlling the navigation panel panel at a high level The global formatting of the navigation panels may be changed with the following variables: @vtable @code @item $VERTICAL_HEAD_NAVIGATION A vertical navigation panel will be used for the header navigation panel if this variable is true. @item $ICONS Icons are used instead of textual buttons if this variable is true. @item $SECTION_NAVIGATION If this variable is false there is no section navigation, no navigation panels for the elements within the pages, only at the beginning and the end of the page (@pxref{Page layout options}). @end vtable @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= @node Button specifications @subsection Specifying the buttons formatting Several arrays and hashes enable a precise control on the buttons and their display. The following arrays determine the buttons present in navigation panels: @vtable @code @item @@SECTION_BUTTONS This array is used for the navigation panel buttons present at the begining of sectioning elements. If split at node or section they are also used at the page footer, and in the case of section navigation at the page header. @item @@SECTION_FOOTER_BUTTONS @itemx @@NODE_FOOTER_BUTTONS This array is used for the navigation panel buttons present at the footer of pages when split at node or at section. If @variable{$WORDS_IN_PAGE} is set and the output is split at nodes, these buttons are only present if there are more than @variable{$WORDS_IN_PAGE} words in the sectioning element text. This counting is very rough and include punctuation marks, html elements, numbers. The default is to include the buttons after 300 words. @item @@CHAPTER_BUTTONS This array is used for the buttons appearing at the page footer if split at chapter, and at the page header if split at chapter and there is no section navigation. @item @@MISC_BUTTONS These buttons appear at the beginning of special and sections and at the end of these section pages if the output is split. @item @@LINKS_BUTTONS These are used for @code{} elements if they are output in the headers. @end vtable The array specify the buttons displayed in navigation panels, and how the button is displayed. Each element is associated with a button of the navigation panel from left to right. The signification of the array element value is the following: @table @emph @item reference on a function The function is called with argument a boolean true if the navigation panel should be vertical. Should return the formatted button text. @item reference on a scalar The scalar value is printed. For some possibly usefull scalars, @ref{Elements hashes}. @item reference on an array In this case the first array element should be a reference on text and the second element an element label. In that case a link to the element associated with the element label with the scalar value text is generated. For example if the buttons array element is @example [ 'Next', \$Texi2HTML::NODE@{Next@} ] @end example The button will be a link to the next section with text @variable{$Texi2HTML::NODE@{Next@}}. @item element label If icons are not used, the button is a link to the corresponding element which text is defined by the value associated with the element label in the @variable{%NAVIGATION_TEXT} hash, surrounded by @samp{[} and @samp{]}. If the element label is @samp{ }, there is no @samp{[} and @samp{]}. The element of the @code{%NAVIGATION_TEXT} hash are defined dynamically, in the @code{init_out} function reference (@pxref{Output initialization}). If icons are used, the button is an image with file determined by the value associated with the element label in the @variable{%ACTIVE_ICONS} hash if the the link really leads to an element, or in the @variable{%PASSIVE_ICONS} hash if there is no element to link to. Of course if there is a link to the element the icon links to that element. The button name and the button description are used in HTML attributes to have a textual description of the icon. The corresponding strings are in @variable{%BUTTONS_NAME} for the button name and @code{%NAVIGATION_TEXT} for the description. @end table If @variable{$USE_ACCESSKEY} is set, the @code{accesskey} attribute is used in navigation. In that case the @variable{%BUTTONS_ACCESSKEY} hash is used for the access key. Similarly, if If @variable{$USE_REL_REV} is set, the @code{rel} attribute is used in navigation. In that case the @variable{%BUTTONS_REL} hash is used for the rel attribute. @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= @node Panel formatting function @subsection Changing the navigation panel formatting If you are not satisfied with this scheme, it is possible to control exactly the formatting of navigation panels by redefining a function reference. The function controlling the display of navigation panel is associated with the following function reference: @deftypefn {Function Reference} $navigation_text print_navigation \@@buttons $vertical @var{\@@buttons} is an array reference which should hold the specification of the buttons for that navigation panel. @var{$vertical} is true if the navigation panel should be vertical. Returns the formatted navigation panel in @var{$navigation_text}. @end deftypefn @c -------------------------------------------------------- @node Program variables @section Main program variables and usefull functions In the functions controlling the page layout some global variables set by the main program are available, with value corresponding with the current layout element. @menu * Elements hashes:: Accessing information related with the different elements * Global informations:: Accessing global informations, like date, title@dots{} * Global functions:: main program usefull functions @end menu @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= @node Elements hashes @subsection Accessing elements informations Four hashes are available, with key the elements labels (as described in @ref{Element labels}) and values: @vtable @code @item %Texi2HTML::NAME The formatted element name @item %Texi2HTML::HREF The element hypertext reference @item %Texi2HTML::NODE The element node name @item %Texi2HTML::NO_TEXI The element name after removal of texi commands @end vtable If @variable{$USE_NODE_TARGET} is set, the node anchors are used as target for the section HREF, if there is a node associated to that section. @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= @node Global informations @subsection Accessing global informations Three kinds of global informations are available, miscalleneous global strings, flags set by @code{@@set} and special flags and section lines. @subsubheading Global strings The @variable{%Texi2HTML::THISDOC} hash holds some global informations: @table @code @item fulltitle title set by @code{@@settitle}. If there is no @code{@@settitle} other possibilities are tried (@code{@@title}, @code{@@shorttitlepage}@dots{}). @item fulltitle_no_texi fulltitle without texi formatting @item fulltitle_texi fulltitle with texi commands @item title @c title set by @code{@@settitle}, or @code{fulltitle}. title set by @code{@@title}. @item title_no_texi title without texi formatting @item title_texi title with texi commands @item author Authors list set by @code{@@author}. @item authors A reference on an array containing each author set by @code{@@author}. @item copying_comment Text appearing in @code{@@copying} with all the texinfo commands removed, put in comments. @item program The name and version of @command{texi2html}. @item program_homepage Homepage for @command{texi2html}. @item program_authors Authors of @command{texi2html}. @item file_base_name base name of the texinfo manual file. @item filename This is a reference on a hash that holds the filenames for special elements. These files may not be used in certain cases, for example the @code{toc} element file name may not be relevant if table of contents is not output separately. The keys are @table @code @item doc the document file if not split, if split should be the top element file. @item top Top element file name. @item toc Table of contents element file name. @item stoc Overview (also called short table of contents) element file name. @item about About element file name. @item foot Footnotes element file name. @item frame Main frame file. @item toc_frame Table of contents frame file name. @end table @item input_file_name Name of the texinfo manual file given on the command line. @item destination_directory Destination directory for the resulting files. @item extension Extension for the output files. @item toc_file The file name of the table of contents, should always be valid, even when table of contents are output directly in the document. @item inline_contents A reference on a hash containing two key, one for each type of table of contents: @table @code @item contents The associated value is a reference on an array containg the line resulting from formatting the table of contents, including a heading and a reference. @item shortcontents The associated value is a reference on an array containg the line resulting from formatting the short table of contents, including a heading and a reference. @end table @item today The date. May be overriden by @code{$DATE}. @item user The user running @command{texi2html}. Maybe overriden by @code{$USER}. @item css_import_lines reference on an array containing the @code{@@import} lines of @acronym{CSS} files. @item css_lines reference on an array containing the normal lines of @acronym{CSS} files. @end table It also holds the arg of the following commands, associated with the command name: kbdinputstyle, paragraphindent, setchapternewpage, headings, footnotestyle, exampleindent, firstparagraphindent, everyheading, everyfooting, evenheading, evenfooting, oddheading, oddfooting, setcontentsaftertitlepage, setshortcontentsaftertitlepage, frenchspacing. If the command doesn't have any arg, it will be true is it was set. @subsubheading Flags Flags defined by @code{@@set} may be accessed through the @variable{%main::value} hash. The key is the flag name, the value is the flag value at the end of the document. Special flags are set by the main program. They correspond with a texinfo command, like @code{@@setfilename}, or @code{@@settitle}, @code{@@author}@dots{} The corresponding flag is the command name with @samp{_} appended, for example, @code{_titlefont} corresponds with @code{@@titlefont}. Like other flags they are available in @variable{%main::value}. @subsubheading Section lines The following array references or arrays holds formatted lines: @vtable @code @item $Texi2HTML::THIS_SECTION Lines of the current element. @item $Texi2HTML::OVERVIEW Lines of short table of contents. @xref{Special pages}. @item $Texi2HTML::TOC_LINES Lines of table of contents. @xref{Special pages}. @item $Texi2HTML::TITLEPAGE The title page formatted with special title commands (@code{@@author}, @code{@@title}) expanded. @xref{Title page}. @end vtable @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= @node Global functions @subsection Function usefull in page formatting The usefull function is a function used to print an array of lines, which also counts the number of words in the array, if needed. @deftypefun $words_number main::print_lines $filehandle \@@lines_array @var{$filehandle} is the opened filehandle the function should write to. @var{\@@lines_array} is the array line the function should write to the file. If this argument is omitted, the function uses @variable{$Texi2HTML::THIS_SECTION}. @var{$words_number} is the number of words in the array, only defined if split at nodes and @variable{$WORDS_IN_PAGE} is defined. @end deftypefun @c -------------------------------------------------------- @node Output initialization @section Preparing the output After the texinfo file has been parsed, some information is available which can be used to modify some variables and prepare the outputting. For example the document language, the document encoding, values set with @code{@@set} or @code{@@setfilename} and other similar @@-commands are not known before the texinfo parsing. The following function reference may be redefined to be called after texinfo processing and before document generation: @deffn {Function Reference} init_out This function perform the initialization of variables and any other task before document outputting. @c It returns the encoding used for the @c output files. @end deffn In the default case the @variable{$BODYTEXT} (@pxref{Customizing header}) and the hashes @variable{%NAVIGATION_TEXT}, @variable{%BUTTONS_NAME} (@pxref{Button specifications}), @variable{%BUTTONS_GOTO} (@pxref{About text}) are initialized. Indeed the initialization of these variables is dependent upon the document language selection. Similarly the encoding variables are set based on the information now available (@pxref{Encodings}). To perform the default initializations and also add more code, you could do as in the following example (save the default function reference and call it in your own function) : @example my $default_init_out = $init_out; $init_out = \&makeinfo_like_init_out; sub makeinfo_like_init_out() @{ &$default_init_out(); $NAVIGATION_TEXT@{'Following'@} = ' > '; @} @end example @c -------------------------------------------------------- @node Output finalization @section Finalizing the output If you want to do some cleaning after the document was generated (close files, write at the end of files and so on), the following function reference may be redefined: @deffn {Function Reference} finish_out This function is called after the document generation. @end deffn The default is to do nothing. @c -------------------------------------------------------- @node css @section Customizing the @command{texi2html} css lines @cindex @acronym{CSS} If the variable @variable{$CSS_LINES} is set it is used for the css entries. For example if you don't want any css entries, set @example $CSS_LINES = ''; @end example If this variable is @code{undef} (as in th edefault case), it is possible to modify the @command{texi2html} css lines by modifying the entries or adding to the @variable{%css_map} hash. Each key is a css selector, the corresponding value is a style string. Another possiblility is to modify the array corresponding with the array reference @code{$Texi2HTML::THISDOC@{'css_import_lines'@}} that contains the @code{@@import} lines of @acronym{CSS} files, and similarly it is possible to modify the array corresponding with the array reference @code{$Texi2HTML::THISDOC@{'css_lines'@}} that contains the normal @acronym{CSS} files lines (for details on what corresponds with those different lines, see @ref{HTML CSS,,,texinfo,GNU Texinfo}). The right place to modify these arrays is in a function appearing in the @code{@@command_handler_process} array (@pxref{Bypassing normal formatting}). Later, the @acronym{CSS} lines are allready expanded, by the function reference below. In th edefault case, the resulting css lines are in @variable{$Texi2html::THISDOC@{'CSS_LINES'@}}. It is also possible to change completely the way @code{$Texi2html::THISDOC@{'CSS_LINES'@}} are generated by redefining the following function reference: @deffn {Function Reference} css_lines \@@import_lines \@@rule_lines This function should be used to construct the variable @code{$Texi2html::THISDOC@{'CSS_LINES'@}}. @var{\@@import_lines} are the @code{@@import} lines of the files specified with @longopt{include-css}, and @var{\@@rule_lines} are the css commands lines of these files. @xref{Style options}. @end deffn @c -------------------------------------------------------- @node Customizing header @section Customizing the page header It is possible to add lines to the text within the @code{} @acronym{HTML} elements, by defining the variable @variable{$EXTRA_HEAD}. Similarly it is possible to add text just after the @code{} element with the variable @variable{$AFTER_BODY_OPEN}. These variables are empty by default. The HTML encoding of the resulting document is defined by @variable{$ENCODING_NAME}. If the variable isn't defined, the @code{@@documentencoding} value is used, or the @variable{$OUT_ENCODING} value, if set. @code{$ENCODING_NAME} may influence the value of @code{$OUT_ENCODING}, which corresponds with the encoding used when writing to the resulting files. @xref{Encodings}. The description of the document may be specified in @variable{$DOCUMENT_DESCRIPTION}. If this variable is undef, the text associated with @code{@@documentdescription} is used, and if there isn't such test a default description is constructed using the document title and the name of the first section of the file. The value used during document formatting is @variable{$Texi2HTML::THISDOC@{'DOCUMENT_DESCRIPTION'@}}. The @code{} element attributes may be set by defining the variable @variable{$BODYTEXT}. The resulting attributes are in @variable{$Texi2HTML::THISDOC@{'BODYTEXT'@}}. If you want to define that variable dynamically, you should use the @code{init_out} function reference (@pxref{Output initialization}). @code{} element are used in the header if @variable{$USE_LINKS} is set. @variable{@@LINKS_BUTTONS} determines which links are used. @variable{%BUTTONS_REL} determines the link type associated with the @code{rel} attribute. The default functions call the function associated with @variable{$print_head_navigation} to format the navigation panel for the page header. Thus you can control parts of the formatting by redefining the function reference. @deffn {Function Reference} print_head_navigation $filehandle \@@buttons @var{$filehandle} is the opened filehandle the function should write to. @var{\@@buttons} is an array reference which should hold the specification of the buttons for the navigation panel. @end deffn If you want even more control, you can have full control over the page header formatting by redefining three function references. The function associated with @variable{$print_page_head} is called for all the pages, and after that, the function associated with @variable{$print_chapter_header} is called if the document is split at chapters, or the function associated with @variable{$print_section_header} is called if the document is split at sections. @deffn {Function Reference} print_page_head $filehandle @var{$filehandle} is the opened filehandle the function should write to. This function should print the page head, including the @code{} element. @end deffn @deffn {Function Reference} print_chapter_header $filehandle @var{$filehandle} is the opened filehandle the function should write to. This function is called if the document is split at chapters, after @code{print_page_head}. @end deffn @deffn {Function Reference} print_section_header $filehandle @var{$filehandle} is the opened filehandle the function should write to. This function is called if the document is split at sections, after @code{print_page_head}. @end deffn @c -------------------------------------------------------- @node Customizing section @section Customizing the sections The functions associated with the following function references are used for the formatting of sections: @deftypefn {Function Reference} $element_header print_element_header $first_in_page $previous_is_top @var{$first_in_page} is true if this section is the first section in the page. @var{$previous_is_top} is true if this section is the section following the Top section. This function should return @var{$element_header}, the current section header. @end deftypefn @deffn {Function Reference} print_section $filehandle $first_in_page $previous_is_top @var{$filehandle} is the opened filehandle the function should write to. @var{$first_in_page} is true if this section is the first section in the page. @var{$previous_is_top} is true if this section is the section following the Top section. This function should print the current section contents. @end deffn @deffn {Function Reference} end_section $filehandle $last_element_or_before_top @var{$filehandle} is the opened filehandle the function should write to. @var{$last_element_or_before_top} is true if this section precedes the top element or is the last one in page, or before the special elements. @end deffn @c -------------------------------------------------------- @node Customizing footer @section Customizing the page footer It is possible to add text just before the @code{} element with the variable @variable{$PRE_BODY_CLOSE}. Nothing is added by default. @ignore The footer text may be influenced by @variable{$ADDRESS} which should hold information about who created the document and how. If you want to define that variable dynamically, you could redefine the following function reference: @deftypefn {Function Reference} $address_text address $user $date This function should return the address. @var{$user} is the user name of the user running @command{texi2html}, @var{$date} is the date of the day. @end deftypefn @end ignore A user name and a date are collected to be output in the footer. You can change them by defining @variable{$USER} and @variable{$DATE} in the initialization file. The default functions call the function associated with @variable{$print_foot_navigation} to format the navigation panel for the page footer. Thus you can control parts of the formatting by redefining the function reference. @deffn {Function Reference} print_foot_navigation $filehandle \@@buttons @var{$filehandle} is the opened filehandle the function should write to. @var{\@@buttons} is an array reference which should hold the specification of the buttons for the navigation panel. @end deffn If you want even more control, you can have more control over the page footer formatting by redefining three function references. The function associated with @variable{$print_chapter_footer} is called if the document is split at chapters, or the function associated with @variable{$print_section_footer} is called if the document is split at sections. After that the function associated with @variable{$print_page_foot} is called. @deffn {Function Reference} print_page_foot $filehandle @var{$filehandle} is the opened filehandle the function should write to. This function should print the page foot, including the @code{} element. @end deffn @deffn {Function Reference} print_chapter_footer $filehandle @var{$filehandle} is the opened filehandle the function should write to. This function is called if the document is split at chapters, before @code{print_page_foot}. @end deffn @deffn {Function Reference} print_section_footer $filehandle @var{$filehandle} is the opened filehandle the function should write to. This function is called if the document is split at sections, before @code{print_page_foot}. @end deffn @c -------------------------------------------------------- @node Special pages @section Special pages formatting For the special elements, two things must be formatted: the content and the page layout @menu * Special pages content:: * Special pages layout:: @end menu @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= @node Special pages content @subsection Customizing the content of the special pages The label for the special elements, except for the Top element is formatted according to the function reference @variable{$misc_element_label}: @deftypefn {Function Reference} $misc_element_label misc_element_label $identifier $page_name @var{$identifier} is the identifier associated with the special element. @var{$page_name} is the special element name. It should return a label that can be used for references to the special element. @end deftypefn @menu * Top element text:: * Contents and Overview text:: * Footnotes text:: * About text:: * Title page:: @end menu @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= @node Top element text @subsubsection Top element text formatting The top element formatting is controlled by three function which also controls the layout of the top element page or section. The associated function references are: @deffn {Function Reference} print_Top_header $filehandle $begin_page @var{$filehandle} is the opened filehandle the function should write to. @var{$begin_page} is true if the element is the first in a page. This function should begin the Top element. At the time this function is called the top element text hasn't been parsed. @end deffn @deffn {Function Reference} print_Top $filehandle $has_top_heading @var{$filehandle} is the opened filehandle the function should write to. @var{$has_top_heading} is true if there is a @code{@@heading} command or @code{@@titlefont} command appearing in the Top element text. This function should be used to format the Top element text and navigation panel. @end deffn @deffn {Function Reference} print_Top_footer $filehandle $end_page @var{$filehandle} is the opened filehandle the function should write to. @var{$end_page} is true if the element is the last in a page. This function should end the Top element. @end deffn @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= @node Contents and Overview text @subsubsection Table of contents and Short table of contents Two possibilities exist for the formatting of table of contents (and short table of contents). In the default case, the table of contents are in separate elements, at the end of the document if the document is unsplit or in separate files. This is consistent with @command{makeinfo} where menus are used for navigation. Another mode may be selected by setting @variable{$INLINE_CONTENTS}. In that case the table of contents are not output as separate elements but are instead output where the corresponding @@-command, for example @code{@@contents}, is set. This behaviour is more consistent with @command{texi2dvi}. If @code{@@setcontentsaftertitlepage} appears in the document, and even if @code{$INLINE_CONTENTS} is set, the table of contents are merged in the title (which isn't output in the default case, see @ref{Title page}). Several variables may be used to control the formatting of table of contents and short table of contents: @vtable @code @item $DO_CONTENTS If the variable is true a table of contents is done even if there is no @code{@@contents} command. If it is defined and false, no table of contents is done even if there is a @code{@@contents} command. @item $DO_SCONTENTS If the variable is true a short table of contents is done even if there is no @code{@@summarycontents} command. If it is defined and false, no short table of contents is done even if there is a @code{@@summarycontents} command. @item $BEFORE_OVERVIEW The variable value is inserted before the short table of contents text. @item $AFTER_OVERVIEW The variable value is inserted after the short table of contents text. @item $BEFORE_TOC_LINES The variable value is inserted before the table of contents text. @item $AFTER_TOC_LINES The variable value is inserted after the table of contents text. @item $NO_BULLET_LIST_STYLE This should contain a css style used for the list style when there is no bullet. @item $NO_BULLET_LIST_ATTRIBUTE This should contain an attribute text used for the list element when there is no bullet. For example it is used in the tables of if they are formatted with a list. @end vtable More control on the table of contents and short table of contents formatting may be achieved by redefining a function with the following associated function reference: @deffn {Function Reference} toc_body \@@elements @var{\@@elements} is an array reference contining informations about all the elements of the document. Each of the entry of this array is an hash reference which entries correspond with different informations about the element. Interesting keys have the following meaning: @table @code @item top true if the element is the top element, @item index_page true if the element is an index page added because of index splitting, @item toc_level level of the element in the table of content. Highest level is 1 for the top element and for chapters, appendix and so on, 2 for section, unnumberedsec and so on... @item tocid label used for reference linking to the element in table of contents, @item file the file containing the element, usefull to do href to that file in case the document is split, @item text text of the element, with section number, @item name text of the element, without section number. @end table This function doesn't return anything but should fill the array corresponding with the @variable{$Texi2HTML::TOC_LINES} and @variable{$Texi2HTML::OVERVIEW} references with the table of contents and short table of contents. @end deffn Another function reference is used to add a heading and a reference, to be used with @code{$INLINE_CONTENTS} or merged in the title. Its output is not used when the table of contents are separate elements. @deftypefn {Function Reference} \@@inline_contents_lines inline_contents $filehandle $command $element This function reference returns a reference on an array holding the lines containing the contents, heading and reference. @var{$filehandle} is a reference on the currently opened file if the function is called because a @code{@@contents} or @code{@@shortcontents} command was encountered, it is undef otherwise. @var{$command} is either @samp{contents} or @samp{shortcontents}. @var{$element} is a hash reference containing informations about the table of contents context. Relevant keys are: @table @code @item target The identifier associated with the table of contents, used for example to do references to the table of contents using href in @acronym{HTML}. @item id The identifier associated with the element, used to do labels. In general the same than the @code{target}, but not necessarily. @item file The file name containing the table of contents. @end table @end deftypefn @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= @node Footnotes text @subsubsection Formatting of footnotes text The footnotes text is allready formatting when @code{@@footnote} commands are expanded. @xref{Footnotes}. @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= @node About text @subsubsection Formatting of about text The default about element contains an explaination of the buttons used in the document (@code{@@SECTION_BUTTONS}, @ref{Button specifications}) and an example locating the buttons targets in an example. The formatting of this text may be influenced by the following hashes and variables: @table @code @item $PRE_ABOUT @itemx $AFTER_ABOUT This variable may be a scalar or a function reference. If it is a scalar, the value is used. If this is a function reference it is expanded and the returned text is used. The text is added before or after the main about text. @item %BUTTONS_GOTO The keys of this hash are element labels (@pxref{Element labels}). The value is the text associated with the element label in the about text. The element of the hash are defined dynamically, you should in the @code{init_out} function reference (@pxref{Output initialization}). @item %BUTTONS_EXAMPLE The keys of this hash are element labels (@pxref{Element labels}). The value is the text associated with the element label in the about example, typically a section number. @end table If this is not enough and you want to control exactly the formatting of the about text, you can redefine the function associated with the following function reference: @deftypefn {Function Reference} $about_text print_about This function should return the about text. @end deftypefn @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= @node Title page @subsubsection Formatting of title page The title page is first formatted using the text appearing in the @code{@@titlepage} section, and put in @variable{$Texi2HTML::TITLEPAGE}. The information appearing in @code{@@title}, @code{@@subtitle} or @code{@@author} is then added using the following function reference: @deffn {Function Reference} titlepage This function should complete @code{$Texi2HTML::TITLEPAGE}. @end deffn In the default case, in this function the table of contents and short table of contents are also added if they are to be output and @code{@@setcontentsaftertitlepage} or @code{@@setshortcontentsaftertitlepage} appear in the document (@pxref{Contents and Overview text}). In the default case the resulting title page output is not used in the document, except if the top node is not associated with any content. @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= @node Special pages layout @subsection Customizing the layout of the special pages The formatting of each of the special pages, or section in case the document is not split, is controlled by a function. The associated function reference is called accordingly: @ftable @code @item print_Top @item print_Top_header @item print_Top_footer Formatting of top element page or section. It is also used for the formatting of the top element text (@pxref{Top element text}). @item print_Toc Formatting of table of contents page or section @item print_Overview Formatting of short table of contents page or section @item print_About Formatting of about (help) page or section @item print_Footnotes Formatting of footnotes section or page in case footnotes are on a separated page or the document isn't split. @end ftable In the default case, @variable{$print_Top} calls @variable{$print_Top_header} for the header and @variable{$print_Top_footer} for the footer of top element. All the other function call @variable{$print_misc} which in turn calls @variable{$print_misc_header} for the headers and @variable{$print_misc_footer} for the footers. @c -------------------------------------------------------- @node File and target names @section Customizing the file and target names @subheading File names It is possible to specify the file names with more control than with the command line options (@pxref{Output files}). First the extension may be overrided by the variable @variable{$EXTENSION} value. The variable should be @code{undef} if no extension is to be added. Two function references enable further customization. One is usefull in case @variable{$NODE_FILES} is true and it is used to customize the node file name. @deftypefn {Function Reference} $node_file node_file_name \%node @var{\%node} is a hash reference with the following interesting keys (there are much more keys): @table @code @item texi The texinfo node name. @item with_section True if associated with a section. @end table The result is the node file name @var{$node_file}. @end deftypefn The other is used to customize the file names associated with each element, and the name of the file associated with the special elements. @deftypefn {Function Reference} $file element_file_name \%element $type $docu_name @var{\%element} is undefined for the special elements (about, overview, table of contents, footnotes). Otherwise it is a hash reference with the following interesting keys (there are much more keys): @table @code @item texi The texinfo element name. @item number The number associated with a section. @item doc_nr A number incremented whenever a new file should begin, based on how the document is split (@pxref{Splitting output}). @item text The element text. @item name The element text without section number. @end table @var{$type} is empty for normal elements. For the top element it is @samp{top}, for the table of contents it is @samp{toc}, for the overview it is @samp{stoc}, for the footnotes it is @samp{foot} and for about is @samp{about}. If frames are used (@pxref{Page layout options}), the function reference is also called for @samp{frame}, the frame file name, and @samp{toc_frame} the table of content frame file name. @var{$docu_name} is the basename of the texinfo manual. The result is the element or special element file name. @end deftypefn @subheading target names Similarly target and id may be set. The @dfn{id} is placed where the item is located, the @dfn{target} is used to construct references to that item. In general they should be equal, but not always, for example in the default case, the target for a section is the node id. The following function reference, is for target items (nodes, anchors, floats): @deftypefn {Function Reference} {($target,$id)} node_target_name \%node, $default_target, $default_id @var{\%node} is the same as in the @code{node_file_name} function reference above. @var{$default_target} is the target already set (it is also in @code{$node->@{'target'@}}), and @var{$default_id} is similarly the id already set. @end deftypefn For element associated with files (which may be nodes), the function reference is: @deftypefn {Function Reference} {($target,$id)} element_target_name \%element, $default_target, $default_id the @var{\%element} is the same than in @code{element_file_name}, and @var{$default_target} and @var{$default_id} are the target and id already set. @end deftypefn Placed items (floats, footnotes, index entries, anchors, contents, shortcontents and headings) file and target may also be set. In the default case, they should be rightly set, so be careful when changing them. The following function reference can be used: @deftypefn {Function Reference} {($target, $id, $file)} placed_target_file_name \%placed_item, \%element, $default_target, $default_id, $default_file, $context @var{\%placed_item} is a hash reference describing the placed item, in the same vein than above. the @var{\%element} is the same than in @code{element_file_name}, corresponding with the element containing the placed item. @var{$default_file}, @var{default_id} and @var{$default_target} are the file, id and target already set. @var{$context} describes the context, it is empty in the normal cases, and can also be set to @samp{footnotes} if in footnotes, or to @samp{no_associated_element} if the placed item is out of any element (typically in @code{@@titlepage}, @code{@@copying}). @end deftypefn For special elements, the @variable{%misc_pages_targets} hash is used to set the target and id. The possibilities for the keys are @samp{Overview}, @samp{Contents}, @samp{Footnotes} and @samp{About}. @c -------------------------------------------------------- @node External index files @section Generation of external files for index entries Within the document, @code{@@printindex} commands are expanded as explained in @ref{Index list}. In case you want to do something special with index entries, outside of the document, you should first set the variable @variable{$IDX_SUMMARY} true. After that some function reference will be called for each non empty index. For each index there are 3 function references, one called for initialization, one called for each index entry and the last one called for finalization. @deffn {Function Reference} index_summary_file_begin $index_name $is_printed $manual_name @var{$index_name} is the two letters name for the index. This function is called for each index appearing in the document, before @code{index_summary_file_entry}. @var{$is_printed} is true if there is a @code{@@printindex} for that index. @var{$manual_name} is the manual basename. @end deffn @deffn {Function Reference} index_summary_file_entry $index_name $entry_text $entry_reference $formatted_entry $texi_entry $entry_element_reference $entry_element_header $is_printed $manual_name This function is called for each entry of an index. @var{index_name} is the name of the index. @var{$entry_text} is the entry in plain text, @var{$formatted_entry} is the index entry formatted, @var{$texi_entry} is the entry with texinfo commands. @var{$entry_reference} is the reference placed at the index entry place, in the form @samp{file#id}. @var{$entry_element_header} is the formatted header of the element containing the index entry. @var{entry_element_header} is the reference to the beginning of the element containing the index entry, in the form @samp{file#id}. @var{$is_printed} is true if there is a @code{@@printindex} for that index. @var{$manual_name} is the manual basename. @end deffn @deffn {Function Reference} index_summary_file_end $index_name $is_printed $manual_name @var{$index_name} is the two letters name for the index. This function is called for each index appearing in the document, after @code{index_summary_file_entry}. @var{$is_printed} is true if there is a @code{@@printindex} for that index. @var{$manual_name} is the manual basename. @end deffn @c ======================================================== @node Customizing HTML @chapter Customizing @acronym{HTML} and text style in init files Some simple customization may be achieved with the redefinition of the variables associated with the command line options. For the description and an explanation of the meaning of these variables, @ref{Style options}. Other variables and hash entries can be modified in initialization file to achieve more customization. Lastly, functions references corresponding with functions called from the main program and initialization files may be redefined. @menu * Three contexts:: there are three different contexts for command expansion: normal text, preformatted text and strings. * Three passes:: @command{texi2html} process texinfo in 3 passes. In almost every cases, you shouldn't care. * Commands without argument:: * Punctuation commands:: @code{@@:} * Style and accent commands:: * Anchors images and spaces:: Formatting of @code{@@anchor}, @code{@@image}, @code{@@sp}, @code{@@acronym}, @code{@@abbr} * Text:: Some characters are processed specially * Strings:: @command{texi2html} write some strings in the output different for each languages @c * Skipped commands:: * References:: * Alignement commands:: @code{@@center}, @code{@@flushleft}@dots{} * Paragraph and preformatted region:: * Complex formats:: @code{@@example}, @code{@@display}@dots{} * Lists tables:: * Definitions:: * Headings:: * Special regions:: @code{@@verbatim}, @code{@@cartouche}, @code{@@quotation} * Menus:: * Indices:: * Floats and lists of floats:: @code{@@float} and @code{@@listoffloats} * Footnotes:: * Customizing format opening:: How to run some code when a format is opened (like @code{@@table}, @code{@@flushleft}, @code{@@example}@dots{} * Bypassing normal formatting:: * Handling special regions:: Keep @code{@@titlepage}, @code{@@documentdescription} or @code{@@copying} and format @code{@@insertcopying} * Other and unknown commands:: You can handle specifically other commands @end menu @c -------------------------------------------------------- @node Three contexts @section Three contexts for expansions: preformatted, normal and string There are three contexts of interest, one is the normal context, the other is a special context, called the @dfn{preformatted} context and the last is the string context. The preformatted context occurs when the spacing between words is kept. This is the case, for example, in @code{@@display} or @code{@@example} regions, and in menu comments (@pxref{Menus}). The preformatted regions are usually rendered in @code{
    } elements in @acronym{HTML}.
    The string context occurs when rendering strings without formatting elements,
    in comments or titles for example.
    
    @c --------------------------------------------------------
    @node Three passes
    @section Three passes: macro expansion, document structure and output
    
    There are three passes in @command{texi2html}. During 
    pass 0, the @code{@@macro} are 
    expanded, in pass 1 the document structure is gathered and in pass 2
    the result is output. In most cases you shouldn't care about
    it, as almost all of the output customization is done in pass 2.
    Only if you want to do something before the pass 2 should you care.
    
    @c --------------------------------------------------------
    @node Commands without argument
    @section Customizing the formatting of commands without argument
    
    This includes the commands whose name is a nonletter character like @code{@@@@}, 
    the commands with lettered characters and braces
    but whose braces should be empty, like @code{@@TeX@{@}}, or some commands
    associated with accentted letters like @code{@@AA@{@}}. If there happens to
    be something within the braces, it is put after the command, thus
    @example
    @@TeX@{something@}
    @end example
    leads to the same than
    @example
    @@TeX@{@} something
    @end example
    
    Each of these categories of commands have three associated hashes, one 
    for normal
    context, the other for preformatted context and the last in strings. The 
    keys of the hashes are the 
    command names, the associated value is the text replacing the command.
    
    The hashes are:
    @multitable {one nonlettered character} {normal text} {preformatted text} {string}
    @item command type @tab normal text @tab preformatted text @tab string
    @item one nonlettered character @tab @variable{%simple_map} @tab @variable{%simple_map_pre} @tab @variable{%simple_map_texi}
    @item nothing in braces @tab @variable{%things_map} @tab @variable{%pre_map} @tab @variable{%texi_map}
    @end multitable
    
    To change the @acronym{HTML} resulting from these constructs, just change the
    value. For example, if you want @code{­} to be outputted for @code{@@-}
    in normal and preformatted context, write in your init file:
    
    @example
    $simple_map@{'-'@} = '­';
    $simple_map_pre@{'-'@} = '­';
    @end example
    
    
    @c --------------------------------------------------------
    @node Punctuation commands
    @section Punctuation commands
    
    The formatting of a punctuation character followed by @code{@:} is determined
    by the hash @variable{%colon_command_punctuation_characters}. If a @code{@:}
    command is preceded by a character in th is hash, it is replaced by the 
    associated value. In the default case, the associated value is also the 
    character, so this leave the punctuation character unmodified.
    
    The following function reference may be redefined to handle characters
    that are in @code{%colon_command_punctuation_characters}:
    
    @deftypefn {Function Reference} $punctuation $colon_command $character
    The @var{$character} is a character appearing in 
    @code{%colon_command_punctuation_characters} and preceding a @code{@:} 
    command. In the default case the associated value in
    @code{%colon_command_punctuation_characters} is returned.
    @end deftypefn
    
    @c --------------------------------------------------------
    @node Style and accent commands
    @section Customizing accent, style and other simple commands
    
    The formatting of the @acronym{HTML} produced by style and indicatric 
    commands (@code{@@tt}, @code{@@code}, 
    @code{@@email}, @code{@@titlefont}), the accentuation related
    commands taking argument (@code{@@'}, @code{@@udotaccent}, @code{@@dotless})
    and miscalleneous commands (@code{@@email}, @code{@@verb}, @code{@@w}, 
    @code{@@uref}, @code{@@math}, @code{@@asis}) is controlled by two hash in the
    default case, 
    @variable{%style_map} for normal context, @variable{%style_map_pre} for
    preformatted context and @variable{%style_map_texi} in string context. 
    
    The key of the hashes are the command names. There are two possibilities for
    the values corresponding with two interfaces. The values may be strings or 
    hash references, and you can chose the interface depending on the one you 
    prefer. The interface with hash reference is a bit more flexible but might also
    be regarded as more complex. If you don't like either of these interfaces you
    can define your own.
    
    Some remarks are in order:
    
    @itemize
    @item 
    The nonlettered accent commands which following character is considered
    to be the argument (like in @code{@@`a}) should be keys of the
    hash @variable{%accent_map} hash, even if no value is associated.
    @item
    @code{@@math} is handled differently if La@TeX{}2HTML is used.
    @end itemize
    
    @menu
    * Hash reference interface::
    * String interface::
    * Define your own interface::
    @end menu
    
    @node Hash reference interface
    @subsection An interface for commands formatting with a hash reference
    
    The key of the hashes are the command names. The value determine how the command argument
    is formatted. This value is a reference on a hash. In this hash each key 
    corresponds with a type of information for the formatting, and the value is 
    the corresponding information. For example, in 
    
    @example
    $style_map@{'command'@} = @{ 'args' => ['code'], 'attribute' => 'code'@};
    @end example
    
    the arguments for @code{@@command} are interpreted as specified by 
    the values associated with the @samp{args} key while the attribute associated 
    with that command is @samp{code}.
    
    The following keys in the hashes associated with each command have the
    following meaning:
    
    @table @samp
    @item args
    @anchor{Reference hash args}
    The value associated is a reference on an array. Each element of the array
    defines how the arguments (separated by @samp{,} in the texinfo code) for 
    the @@-command should be 
    formatted. The possibilities are 
    @table @code
    @item normal
    for normal text,
    @item code
    for text with @samp{---}, @samp{--}, @samp{''} and  @samp{``} kept as is,
    @item keep
    if the texinfo should be kept as is, without interpretation of the @@-commands.
    @end table
    
    For example, we have
    @example 
    $style_map@{'email'@}->@{'args'@} = ['code', 'normal'];
    @end example
    
    because @samp{---}, @samp{--}, @samp{''} and  @samp{``} should be kept as is in
    the first argument of @code{@@email}.
    
    The default is @samp{['normal']}.
    
    @item attribute
    
    If the associated value is a word, it is considered to be an @acronym{HTML} 
    element name, and the argument is enclosed between the element opening
    and the element closing. For example, if the value is @code{elem}, the
    resulting @acronym{HTML} is @code{@var{arg}}.
    
    If the text is a word followed by some text,
    the word and is interpreted as above, and the
    text is considered to be the attributes text of the element. 
    Thus @code{elem class="elem"} leads to 
    @code{@var{arg}}.
    
    This works only if there is only one argument.
    
    @item begin
    
    The associated value is added in front of the text.
    
    @item begin
    
    The associated value is added after the text. 
    
    @item quotes
    
    If the corresponding value is true, the result is 
    enclosed in quotes @variable{$OPEN_QUOTE_SYMBOL} and 
    @variable{$CLOSE_QUOTE_SYMBOL}, with defaults 
    @samp{`} and @samp{'}. 
    
    @item function 
    
    The corresponding value should be a function reference. The corresponding
    function is called with the following arguments:
    
    @table @code
    @item $command
    The @@-command name
    @item $args
    A reference on an array containing the arguments of the @@-command.
    @item $command_stack
    A reference on an array containing the name of the @@-commands containing 
    the @@-command being formatted, latest on top.
    @item $state
    A reference on a hash containing a lot of informations about the context
    of the @@-command.
    @item $line_nr
    An opaque structure containing the information about the line number of the 
    @@-command. It can be used to call @code{main::echo_error} or
    @code{main::echo_warning} with first argument a message, and second argument 
    @code{$line_nr}. 
    @end table
    @end table
    
    @node String interface
    @subsection An interface for commands formatting with a string
    
    The keys of the hashes are the command names. The value determine 
    how the command argument
    is formatted. If the value begins with @samp{"}, the result is 
    enclosed in quotes @variable{$OPEN_QUOTE_SYMBOL} and 
    @variable{$CLOSE_QUOTE_SYMBOL}, with defaults 
    @samp{`} and @samp{'}. 
    
    The command argument is allready formatted as @acronym{HTML}.
    The remaining of the value text
    (or the value text if there were no @samp{"}) is interpreted as follow:
    
    @itemize @bullet
    @item
    If the text is empty the argument of the command is left as is. 
    @item
    If the text is a @samp{&} followed by a name,
    like @samp{&function}, the name is considered to be a function name, 
    and this function is called to format the argument of the command. The
    first argument of the function is the command name, the second is 
    the command argument. For example, if the value associated with the
    (fictituous) command @code{@@foo} is @code{&my_func}
    and we have:
    
    @example
    sub my_func
    @{
        my @@args = split /,\s*/ $_[1];
        return "$_[0]: $args[0]" if ($args[1] = 1);
        return "$args[0]";
    @}
    @end example
    
    The result of 
    @example 
    @@foo@{truc, 1@}
    @@foo@{truc, bidule@}
    @end example 
    will be
    @example
    foo: truc
    truc
    @end example
    @item
    If the text is a word, it is considered to be an @acronym{HTML} element
    name, and the argument is enclosed between the element opening
    and the element closing. For example, if the value is @code{elem}, the
    resulting @acronym{HTML} is @code{@var{arg}}.
    Similarly @code{"quoted} leads to
    @code{`@var{arg}'}.
    @item
    If the text is a word followed by some text, 
    the word and is interpreted as above, and the
    text is considered to be the attributes text of the element. 
    Thus @code{elem class="elem"} leads to 
    @code{@var{arg}}.
    @end itemize
    
    @node Define your own interface
    @subsection Defining the style and indicatric commands interface
    
    If you don't like this scheme, it is possible to change how those commands
    are processed by redefining the following function reference:
    
    @deftypefn {Function Reference} $resulting_text style $style $command $text $args $no_close $no_open $line_nr $state $command_stack
    @var{$command} is the @@-command, @var{$style} is the value associated with 
    the @var{$command} in the @code{%style_map}, @code{%style_map_pre} 
    or @code{%style_map_texi} hashes.
    The @var{$text} is the text appearing within the @@-command braces.
    @var{args} is a reference on an array contening the command arguments 
    formatted according to the same conventions than with the reference hash style
    (provided the value associated with the @@-command is a hash reference with a
    @var{$arg} key as described in @ref{Reference hash args}).
    If @var{$text} is split in paragraphs each paragraph is passed through
    the function, and @var{$no_close} is true if it is not the last paragraph,
    while @var{$no_open} is true if it is not the first paragraph.
    @var{$line_nr}
    is an opaque structure containing the information about the line number of the 
    @@-command. It can be used to call @code{main::echo_error} or
    @code{main::echo_warning} with first argument a message, and second argument 
    @code{$line_nr}.
    @var{$state}
    is a reference on a hash containing a lot of informations about the context
    of the @@-command.
    @var{$command_stack}
    is a reference on an array containing the name of the @@-commands containing 
    the @@-command being formatted.
    
    @end deftypefn
    
    @c --------------------------------------------------------
    @node Anchors images and spaces
    @section Formatting of special simple commands
    
    The formatting of special simple commands is controlled by functions. To
    customize the output, the corresponding function references should be
    redefined. All these functions return a formatted text.
    
    The formatting of anchors is controlled by @variable{$anchor_label}.
    
    @deftypefn {Function Reference} $anchor_label anchor_label $identifier $anchor
    @var{$identifier} is the anchor identifier, @var{$anchor}is the @code{@@anchor}
    argument.
    @end deftypefn
    
    In the default case, it uses a function reference,  @variable{$anchor}
     that can do
    a reference target or link. It is especially relevant for @acronym{HTML}
    but can be used in other formats, it is a rather common element
    of different formats.
    @deftypefn {Function Reference} $anchor anchor $identifier $href $text $attributes
    If @var{$identifier} is not empty, this value should be used to create
    a target for links (typically associated with a name or id 
    attribute in @acronym{HTML}).
    The @var{$href} argument specifies a hpertextual reference which should be
    used to link to a target.
    In case both @var{$identifier} and  @var{$href} are given the text produced
    should be both a target for @var{$identifier} and a link to @var{$href}.
    @var{$text} is the text to be displayed. 
    @var{$attributes} are additional attributes.
    It should be reasonable to assume that the attributes are for a @code{}
    @acronym{HTML} element. 
    @end deftypefn
    
    To customize the images produced by @code{@@image}, the first possibility 
    is to modify the @variable{@@IMAGE_EXTENSIONS}, which holds a list of 
    filename extensions for image files. It is also possible to redefine
    the function used to determine the filename of the image:
    
    @quotation Warning
    This description is wrong. The API is still moving, so don't count on it.
    @end quotation
    
    @deftypefn {Function Reference} $filename image_files $basename $extension
    @var{$basename} is the first @code{@@image} argument, @var{$extension}
    is the corresponding @code{@@image} argument. This function reference 
    should return an array of image filenames without path that the main 
    program should look for.
    @end deftypefn
    
    Last, it is possible to control 
    the formatting of @code{@@image} by redefining:
    @deftypefn {Function Reference} $image image $file_path $basename $preformatted $file_name $alt_text $width $height $raw_alt $extension $working_dir $file_relative_path
    @var{$file_path} is the image file name with the path from the output directory
    to the source manual directory prepended, @var{$basename}  
    the file name without extension (the first @code{@@image} argument). 
    @var{$preformatted} is true if the image 
    appears in preformatted text. @var{$file_name} is the file name without path 
    but with extension. @var{$alt_text} is the alternate text, it may be 
    undefined. @var{$width} and @var{$height} are the corresponding arguments 
    of @code{@@image}, @var{$raw_alt} is the unmodified alt argument of 
    @code{@@image} and @var{$extension} holds the corresponding 
    @code{@@image} argument.
    @var{$working_dir} is the path to working dir relative to the output
    directory. @var{$file_relative_path} is the file name relative to the 
    @var{$working_dir}.
    @end deftypefn
    
    The formatting of @code{@@sp} is controlled by:
    @deftypefn {Function Reference} $sp sp $number $preformatted
    @var{$number} is the numeric argument of @code{@@sp}.
    @var{$preformatted} is true if the @code{@@sp} appears in preformatted text.
    @end deftypefn
    
    The formatting of @code{@@acronym} and @code{@@abbr} is controlled by:
    @deftypefn {Function Reference} $acronym acronym_like $acronym_texi $acronym_text $with_explanation \@@explanation_lines $explanation_text $explanation_simply_formatted
    @var{$acronym_texi} is the acronym argument with texinfo @@-commands, 
    @var{$acronym_text} is formatted. 
    
    The other arguments are related with
    the explanation, the second arg of the acronym. @var{$with_explanation} is 
    true if the second argument of the acronym command is present. If an
    explanation exists, coming from previous @code{@@acronym} or as an arg of 
    this command, the other args are defined: @var{\@@explanation_lines} is a 
    reference on an array containing the simply fomatted explanation lines, 
    @var{$explanation_text} is the explanation text formatted,
    @var{$explanation_simply_formatted} is the explanation with a light 
    formatting, unabling in @acronym{HTML} (or @acronym{XML}) the explanation 
    to be in an attribute.
    @end deftypefn
    
    @c --------------------------------------------------------
    @node Text
    @section Processing special characters in text
    
    Some characters are processed especially in text: @samp{---}, @samp{--},
    @samp{``} and @samp{''}. This is done only if in normal text and not in 
    some commands (@code{@@code}, @code{@@env}@dots{}). A function reference
    is called to process the text and should take care of those constructs.
    It may also be used to transform the text, for example set it in upper
    case if it is in @code{@@sc}. This function should also take care
    of protecting special characters
    
    
    @deftypefn {Function Reference} $processed_text normal_text $text $in_raw_text $in_preformatted $in_code $in_simple $command_stack 
    The function processes @var{$text} and returns @var{$processed_text}. 
    The other arguments give some information about the context of the text.
    @var{$in_raw_text} is true if the text appears in special place where
    there is no formatting, typically in comments. @var{$in_preformatted}
    is true if in a preformatted environemnt, and @var{$in_code} is true
    if in a special command like @code{@@code}, @code{@@env} where
    @samp{---}, @samp{--}, @samp{``} and @samp{''} should not be
    touched. @var{$in_simple} is true if in string context.
     @var{$command_stack} is an array containing the name of the 
    formatting @@-command that enclose the text.  
    
    In the default case the @samp{---}, @samp{--}, @samp{``} and @samp{''}
    constructs are expanded if needed and the text is upper-cased if in 
    @code{@@sc}. Special characters (@samp{&}, @samp{"},
    @samp{<} and @samp{>} in @acronym{HTML}) are protected if needed. 
    @end deftypefn
    
    Some characters are special, for example we have  @samp{&}, @samp{"}, 
    @samp{<} and @samp{>} in @acronym{HTML}. In some cases some
    pieces of text don't go through the above function, but still 
    needs to be protected to appear in text.
    This is done by the function associated with the function reference
    
    @deftypefn {Function Reference} $protected_text protect_text $text
    The function processes the unprotected text @var{$text} and returns
    the resulting protected text @var{$protected_text}.
    @end deftypefn
    
    Empty lines are processed by the following function reference, which could
    be usefull if empty lines are to be removed for example
    
    @deftypefn {Function Reference} $resulting_text empty_line $empty_line $state
    This function processes an @var{$empty_line} and returns the resulting
    text @var{$resulting_text}. @var{$state} is a structure that holds informations
    about the state of the parsing.
    Empty lines are left as is by default except right after a definition 
    @@-command.
    @end deftypefn
    
    @c --------------------------------------------------------
    @node Strings
    @section Customizing strings written by @command{texi2html}
    
    @cindex i18n
    
    @command{texi2html} writes some strings in the generated document at
    various places, at the page footers, on the help page, for special 
    section headings, buttons alt text and so on. These strings are
    customizable. The string chosen depends on the language of the
    document (set by @longopt{document-language}, @variable{$LANG} or 
    @code{@@documentlanguage}). This is the basis for internationalization
    as it allows for strings translations.
    
    The strings are found in a hash reference, @variable{$LANGUAGES}. 
    Each key is a language code. The associated value is also a hash
    reference. The key is an english string and the associated value
    is the string replacing the english string, if present. For example,
    we have
    
    @example
    $LANGUAGES->@{'fr'@} = @{
                  ' Up ' => 'Plus haut',
    @};
    @end example
    
    It means that whenever the string @samp{@ Up@ } is to be written
    and the language is @samp{fr}, @samp{Plus haut} is written. It is possible
    to customize the english strings by redefining the @samp{en} language hash.
    
    When a string contains a @samp{%} followed by @samp{@{} @var{name} @samp{@}}
    it means that the string will be expanded by @command{texi2html}. For
    example, if we have
    
    @example
    $LANGUAGES->@{'fr'@} = @{
                  'See %@{node_file_href@}' => 'Voir %@{node_file_href@}',
    @};
    @end example
    
    @samp{%@{node_file_href@}} will be expanded to an href for a node in a 
    file by @command{texi2html} in the string. A @samp{%%} will be expanded
    as @samp{%}.
    
    When a @code{@@documentlanguage} appears in the document and the language
    wasn't set on the command line, it may be convenient for the user to
    redefine some variables based on the new language. There is a function 
    reference that may be used for that, it is called each time  a 
    @code{@@documentlanguage} is encountered:
    
    @deffn {Function Reference} $translate_names
    This function is called each time @code{@@documentlanguage} is encountered
    and the language wasn't seet on the command line. It should be used
    to retranslate some strings based on the new language.
    @end deffn
    
    
    For more on internationalization, see @ref{Internationalization}.
    
    @c --------------------------------------------------------
    @node References
    @section References
    @cindex reference
    
    @menu 
    * Reference to external manual::
    * Internal reference::
    @end menu
    
    @node Reference to external manual
    @subsection Reference to external manual
    @cindex external manual
    
    The references are produced with two function references, one for the
    hypertextual reference construction, the other for the full reference to 
    external manual. 
    
    @deftypefn {Function Reference} $href external_href $node $node_identifier $xml_node_identifier $manual_file_name
    @var{$node} is the node name, with @@-commands. @var{$node_identifer} is the
    node name mapped to an identifier acceptable as a file name. 
    @var{$xml_node_identifier} is the
    node name mapped to an identifier acceptable as an @acronym{XML} identifier.
    Those identifiers are built as explained in @ref{HTML Xref,,,texinfo,GNU Texinfo},
    thus allowing for cross references to external manuals. @var{$file} is the
    manual or file name of the external reference. This function should return an
    href leading to the external manual.
    
    The default for this function is to make a reference compatible with 
    @command{makeinfo}  (@pxref{HTML Xref,,,texinfo,GNU Texinfo}).
    @end deftypefn
    
    @deftypefn {Function Reference} $text external_ref $command $section $book $node_and_file $href $cross_ref_name \@@args_texi \@@formatted_args
    This function formats a reference to an external texinfo manual.
    The @var{$command} is the ref command (@code{ref}, @code{xref} or 
    @code{pxref}, in text, at sentence beginning or in parenthesis).
    The optionnal @var{$section} argument is the section in the book and 
     @var{book} is the book title.
    @var{$node_and_file} is the node and file name formatted according to the 
    convention used in info: @samp{(file)node}. @var{$href} it an hypertextual
    reference to the distant manual constructed using the above function. 
    @var{$cross_ref_name} is an optionnal cross
    reference name appearing in the reference command. 
    @var{\@@args_texi} is a reference on an array containing the @@-command
    arguments, not formatted, with @var{\@@formatted_args} contains the formatted
    @@-command arguments.
    This function returns
    the text corresponding with the external html manual reference.
    This function returns the full formatted text of the external reference.
    @end deftypefn
    
    @node Internal reference
    @subsection Reference to an internal node
    
    A function reference is available for internal references.
    
    @deftypefn {Function Reference} $text internal_ref $command $href $short_name $name $is_section \@@args_texi \@@formatted_args
    This function formats a reference to a node in the current manual.
    The @var{$command} is the ref command (@code{ref}, @code{xref} or 
    @code{pxref}, in text, at sentence beginning or in parenthesis).
    @var{$href} it an hypertextual reference linking to the corresponding
    node or section. @var{$short_name} and @var{$name} hold the text for the 
    reference but @var{$short_name} can be the node name which is assumed to 
    be shorter than the section name.
    @var{$is_section} is a boolean true if the reference is a reference to a 
    section. 
    @var{\@@args_texi} is a reference on an array containing the @@-command
    arguments, not formatted, with @var{\@@formatted_args} contains the formatted
    @@-command arguments.
    This function returns the full formatted text of the internal 
    reference.
    @end deftypefn
    
    
    @c --------------------------------------------------------
    @node Alignement commands
    @section Commands used for centering and flushing of text
    
    @cindex centering
    @cindex flushing text
    @cindex text alignement
    
    When a command controlling the alignement of text is used (@code{@@center},
    @code{@@flushleft} and @code{@@flushright}), the main program takes
    care of opening and closing paragraphs. The alignement commands are the
    key of the @variable{%paragraph_style} hash. 
    The value is used in the function doing the formatting of the paragraphs. 
    @xref{Paragraph and preformatted region}.
    
    A function references allows for a customization of the formatting of the text 
    appearing in the command block.
    
    @deftypefn {Function Reference} $result paragraph_style_command $command $text
    @var{$command} is the command name, @var{$text} is the text appearing within
    the command. This function returns a formatted text.
    The default is to return the text unmodified.
    @end deftypefn
    
    @c --------------------------------------------------------
    @node Paragraph and preformatted region
    @section Formatting (or not) a paragraph and a preformatted region
    
    
    @menu
    * Paragraph and preformatted formatting::
    * Avoiding paragraphs::
    @end menu
    
    @node Paragraph and preformatted formatting
    @subsection Paragraph and preformatted region formatting
    
    @cindex paragraph 
    @cindex preformatted region 
    
    The formatting of a paragraph region or a preformatted region, is controlled
    by function references:
    
    @deftypefn {Function Reference} $paragraph_text paragraph $text $alignement $index $formatting_command $formatting_command_formatted \$paragraph_number $format $item_number $enumerate_style $number $command_stack_at_end $command_stack_at_begin
    This function formats a paragraph. @var{$text} is the text of the paragraph,
    @var{$alignement} is the empty string when no alignement command has
    been seen, otherwise it is the current alignement command name.
    @xref{Alignement commands}.
    @var{$indent} holds @samp{noindent} or @samp{indent} if the corresponding 
    @@-command appeared in the paragraph.
    @var{$command_stack_at_end} and @var{$command_stack_at_begin} are arrays
    containing the opened @@-commands at end and at beginning of the paragraph,
    latest on top.
    
    The remaining arguments are usefull when the paragraph appears within a
    list or table. It is usefull whenever the paragraph has to be formatted
    differently when appearing in such environments. 
    Moreover in that case the format command (@code{@@itemize}@dots{}) 
    may have
    an associated formatting command.
    @var{$formatting_command} is this  formatting command
    (like @code{@@minus}).
    @var{$formatting_command_formatted} is the command formatted in html
    in case the formatting command is a leading command (like @code{@@minus})
    which should be leading the first paragraph.
    @var{\$paragraph_number} is a reference on the number of
    paragraphs in that format command. The corresponding variable should be 
    increased when a paragraph is added. @var{$format} is the format command. 
    @xref{Table and list items}.
    
    If the @var{$format} is an enumerate, @var{$item_number} is the number of 
    the item in the list, @var{$enumerate_style} is the argument of the enumerate,
    @var{$number} is the number or letter corresponding with this item. 
    @end deftypefn
    
    @deftypefn {Function Reference} $preformatted_text preformatted $text $style $region_name $formatting_command $formatting_command_formatted \$preformatted_number $format $item_number $enumerate_style $number $command_stack_at_end $command_stack_at_begin
    This function formats a preformatted region. @var{$text} is the text of the
    preformatted region, @var{$style} is the css style associated with that
    preformatted region (@pxref{css}). @var{$region_name} is the 
    name of the command opening        
    the preformatted region (@code{example}@dots{}, see @ref{Complex formats}) 
    or a identifier for the preformatted context (for example 
    @code{menu-comment}, see @ref{Menus}).
    The alignment commands are not taken into account, as the spaces are
    preserved in preformatted regions, you should flush and center by hand.
    @var{$command_stack_at_end} and @var{$command_stack_at_begin} are arrays
    containing the opened @@-commands at end and at beginning of the preformatted
    region, latest on top.
    
    The remaining arguments are usefull when the preformatted region appears 
    within a list or table. It is usefull whenever the preformatted region 
    has to be formatted
    differently when appearing in such environments. 
    Moreover in that case the format command (@code{@@itemize}@dots{}) 
    may have
    an associated formatting command.
    @var{$formatting_command} is this  formatting command
    (like @code{@@minus}).
    @var{$formatting_command_formatted} is the command formatted in html
    in case the formatting command is a leading command (like @code{@@minus})
    which should be leading the first preformatted region.
    @var{\$preformatted_number} is a reference on the number of
    preformatted regions in that format command. The corresponding variable 
    should be increased when a preformatted region is added. @var{$format} is the 
    format command. 
    @xref{Table and list items}.
    
    If the @var{$format} is an enumerate, @var{$item_number} is the number of 
    the item in the list, @var{$enumerate_style} is the argument of the enumerate,
    @var{$number} is the number or letter corresponding with this item. 
    @end deftypefn
    
    @node Avoiding paragraphs
    @subsection Avoiding paragraphs in formats
    
    @cindex Avoid paragraph opening
    
    It is possible to avoid that a format closes the previous paragraph or
    preformatted region and reopens one, by putting the format command in a 
    hash, @variable{%format_in_paragraph} with a true value. This only 
    makes sense for few commands since otherwise the nesting of formats and
    paragraphs could become wrong.
    
    If the value of @variable{%no_paragraph_commands} associated with a command is
    true, no paragraph is started by the command if outside of a paragraph
    (after an empty line, for example). If the value is set to 0, it will start
    a paragraph. If the value is not set, reasonable defaults are
    set.
    
    It is also possible to stop a paragraph when an @@-command happens by
    putting the @@-command in the @variable{%stop_paragraph_command} hash
    associated with a true value.
    
    
    @c --------------------------------------------------------
    @node Complex formats
    @section Formatting of complex formats (@code{@@example}, @code{@@display}@dots{})
    
    @cindex complex format
    
    Here we see how a whole complex format is formatted. For the formatting
    of the text, see @ref{Paragraph and preformatted region}.
    
    The formatting of the complex formats is ultimately controlled by a
    function, however the default for this function uses a hash reference and 
    changing the hash reference values should be enough in most cases. This
    hash reference is called @variable{$complex_format_map}. It has a key for each
    of the complex format commands (@code{example}, @code{smallexample}, 
    @code{lisp}, @code{smalllisp}, @code{display}, @code{smalldisplay}, 
    @code{format}, @code{smallformat}).
    
    The associated value is also a reference on a hash. The keys are:
    
    @table @code
    @item begin
    An eval of @code{begin} should lead to the beginning of the
    formatted @acronym{HTML}.
    @item end
    An eval of @code{end} should lead to the end of the 
    formatted @acronym{HTML}.
    @item class
    The @acronym{HTML} class. If not defined, the command name.
    @item pre_style
    The preformatted style. If not defined the corresponding @acronym{CSS} style
    is used.
    @item style
    If the associated value is @code{code}, the format is assumed to be in 
    code style, where 
    with @samp{---}, @samp{--}, @samp{''} and  @samp{``} kept as is.
    If the key is absent the format  inherits the code style
    and the font from the enclosing context.
    @end table 
    The enclosed text will be formatted as described in
    @ref{Paragraph and preformatted region}, and the name of the complex
    format will be available to the function formatting the text.
    
    If you aren't satisfied with this scheme, you can redefine the following
    function reference for a better control over the complex format formatting:
    
    @deftypefn {Function Reference} $complex_format_text complex_format $format_name $preformatted_text
    
    @var{$format_name} is the complex format name, @var{$preformatted_text} is the 
    text allready formatted as described in @ref{Paragraph and preformatted region}.
    This function returns the whole complex format.
    @end deftypefn
    
    @c --------------------------------------------------------
    @node Lists tables
    @section Customizing the formatting of lists and tables
    
    The formatting of lists and tables is done at two levels:
    @itemize
    @item 
    At the level of the whole region (table or list),
    @item
    At the level of the individual items, rows or cells of the list or table.
    @end itemize
    
    @menu
    * Table and list items::
    * Whole table list::
    @end menu
    
    @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    @node Table and list items
    @subsection Formatting individual table and list items
    
    In texinfo it is possible to give @code{@@itemize} or table command (hereafter
    called a @dfn{format command}) a @dfn{formatting command}. 
    For example @code{@@minus} is the formatting command here:
    @example
    @@table @@minus
    @end example
    
    The default is to apply the command to the text item, however it is possible
    to avoid it.
    The hash @variable{%special_list_commands} has an entry for each of the 
    format command. Each of these entries is a hash reference. If a formatting
    command is a key of the hash reference, then the formatting command is not
    applied to the text item for that format command. For example, if we have:
    
    @example
    $special_list_commands@{'itemize'@} = @{ 'bullet' => '' @};
    @end example
    
    and we have the following @code{@@itemize}:
    @example
    @@itemize @@bullet
    @@item an item
    @@end itemize
    @end example
    
    then @code{@@bullet} will not be applied to @code{an item}.
    
    More control of the text before formatting of the line or the item is 
    achieved with the following function reference:
    
    @deftypefn {Function Reference} ($result_line, $open_command) format_list_item_texi $format $line $prepended $command
    The @var{$format} is the list or table @@-command, 
    @var{$line} is the item line, @var{$command} is the @dfn{format command},
    @var{$prepended} is set to the text folllowing the @dfn{format command}
    on the format argumlent line.
    The @var{$result_line} replaces the item argument, and if @var{$open_command}
    is true, the @dfn{format command} is opened for the line.
    @end deftypefn
    
    @table @emph
    @item lists
    The items of lists are formatted using the following function reference:
    @deftypefn {Function Reference} $list_item list_item $text $format $command $formatted_command $item_number $enumerate_style $number $prepended_texi $prepended_formatted
    This function formats the text between @code{@@item} commands. @var{$text} 
    is the text corresponding with the item. @var{$format} is the type of format,
    @samp{itemize} or @samp{enumerate}. @var{$command} is the formatting command
    given in argument to @code{@@itemize}, @var{$formatted_command} is this command
    formatted if it is a leading command, like @code{@@minus}.
    
    If the @var{$format} is an enumerate, @var{$item_number} is the number of 
    the item in the list, @var{$enumerate_style} is the argument of the enumerate,
    @var{$number} is the number or letter corresponding with this item. 
    
    If the @var{$format} is an itemize, @var{$prepended_texi} is the text that
    appeared on the itemize line, maybe after the formatting command
    (if any), and @var{$prepended_formatted} is the corresponding text, 
    formatted.
    @end deftypefn
    
    @item two column tables
    The two columns tables (@code{@@table}, @code{@@ftable} and @code{@@vtable}), 
    items are formatted using two function references,
    one for the first line located on the @code{@@item} line corresponding
    with the first column, the other for the text appearing on the
    following lines, corresponding with the second column text.
    
    @deftypefn {Function Reference} $table_item table_item $item_text $index_label_text $format $command $formatted_command $command_stack $text_formatted $text_formatted_leading_spaces $text_formatted_trailing_spaces $item_command
    This function is used to format the text on the @code{@@item} line.
    @var{$text_item} is the text line. In case there is an index entry 
    associated with the @code{@@item} (as with @code{@@ftable} and 
    @code{@@vtable}), @var{$index_label_text} is the text inserted at 
    the place where an index entry appears. @xref{Index entry place}.
    @var{$format} is the type of format,
    @samp{table}, @samp{ftable} or @samp{vtable}. @var{$command} is the formatting command
    given in argument to the table format command, @var{$formatted_command} is 
    this command formatted if it is a leading command, like @code{@@minus}.
    @var{$command_stack} is an array with all the @@-commands opened, latest
    on top.
    @var{$text_formatted} is the text formatted by the formatting command if
    the command is a command with braces like @code{@@code}.
    @var{$text_formatted_leading_spaces} and @var{$text_formatted_trailing_spaces}
    are the spaces removed before closing the format.
    @var{$item_command} is the item command, @samp{@@item} or @samp{@@itemx}.
    @end deftypefn
    
    @deftypefn {Function Reference} $table_line table_line $text
    This function is used to format the text on the lines following
    the @code{@@item} line. @var{$text} is the corresponding text. 
    @end deftypefn
    
    @item multitable
    @anchor{Multitable formatting}
    The multitable elements formatting is controlled by the functions associated
    with two function references. One for a cell, and the other for a row.
    
    @deftypefn {Function Reference} $multitable_cell cell $text $item_command \@@columnfractions \@@prototype_row \@@prototype_lengths $column_number
    This function is used to format the text of a multitable cell, the text 
    following a @code{@@item} or a @code{@@tab}.
    @var{$text} is the corresponding text. @var{$item_command} is the command 
    used to introduce the row, such that it is possible to distinguish 
    between @code{@@item} and @code{@@headitem}.
    @var{\@@columnfractions} is a reference on an array 
    containing the @code{@@columnfraction} arguments, if any, and 
    @var{\@@prototype_row} is a reference on an array containing the row prototypes
    given on the @code{@@multitable} line, if any.
    @var{\@@prototype_lengths} array contains the lengths of the row prototypes
    formatted.
    @var{$column_number} is the maximal number of columns.
    @end deftypefn
    
    @deftypefn {Function Reference} $multitable_row row $text $item_command \@@columnfractions \@@prototype_row \@@prototype_lengths $column_number
    This function is used to format a multitable row. @var{$text} is
    the row text, with cells allready formatted with the @variable{$cell}
    function reference. @var{$item_command}, @var{\@@columnfractions}, 
    @var{\@@prototype_row}, @var{\@@prototype_lengths}
    and @var{$column_number} are the same than in the function reference above.
    
    @end deftypefn
    @end table
    
    In the default case, this function is interlinked with 
    @code{$begin_format_texi} (@pxref{Customizing format opening})
    and @code{@@multitable} formatting
    since a stack of possible nested 
    multitables is kept to know the cell number.
    
    @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    @node Whole table list
    @subsection Formatting of a whole table or list
    
    If the Texinfo command is a key of the @variable{%format_map}, the associated
    value is used to specify the formatting of the construct, otherwise a function 
    is called. 
    The value in @code{%format_map} associated with a command is interpreted 
    similarly with values associated with more simpler commands:
    
    @itemize
    @item
    If the text is a word, it is considered to be an @acronym{HTML} element
    name, and the whole table or list is enclosed between the element opening
    and the element closing.
    @item
    If the text is a word followed by some text, 
    the word and is interpreted as above, and the
    text is considered to be the attributes text of the element. 
    @item
    If the text is empty nothing is added to the text.
    @end itemize
    
    In case the @code{%format_map} isn't used, a function reference called
    @code{$table_list}
    should be redefined, the associated function will be called each time
    a command isn't found in @code{%format_map}.
    
    @deftypefn {Function Reference} $whole_table_list table_list $format_command $text $command $formatted_command $item_nr $enumerate_style $prepended_texi $prepended_formatted \@@columnfractions \@@prototype_row \@@prototype_lengths $column_number
    @var{$format_command} is the Texinfo command name, @var{$text} is the 
    formatted items. @var{$command} is the @dfn{format command} given in argument
    to the format command, @var{$formatted_command} is the same, but formatted.
    @var{$prepended_texi} is the remaining text on the format command line,
    @var{$prepended_formatted} is the same, but formatted.
    Only relevant in @code{@@enumerate}, @var{$item_nr} is the item number, and 
    @var{$enumerate_style} is the @code{@@enumerate} style. Only relevant in 
    @code{@@multitable}
    @var{\@@columnfractions} is a reference on an array 
    containing the @code{@@columnfraction} arguments, if any, 
    @var{\@@prototype_row} is a reference on an array containing the row prototypes
    given on the @code{@@multitable} line, if any,
    @var{\@@prototype_lengths} array contains the lengths of the row prototypes
    formatted and
    @var{$column_number} is the maximal number of columns.
    @end deftypefn
    
    If you still want to use @variable{%format_map} but differently from 
    the default, it is possible to redefine the following function reference:
    
    @deftypefn {Function Reference} $whole_table_list format $command $format $text
    @var{$command} is the @@-command, @var{$format} is the entry associated with
    @var{$command} in @code{%format_map}. @var{$text} is the formatted items.
    @end deftypefn
    
    @c --------------------------------------------------------
    @node Definitions
    @section Definition commands formatting
    
    The formatting of definition commands is controlled by a main hash,
    3 strings and another hash, and and five
    functions. The mainhash describes how the text on the definition line is 
    interpreted, the functions control the formatting of the definition line
    and the definition function text.
    
    @menu
    * Definition line::
    * Definition formatting::
    @end menu
    
    @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    @node Definition line 
    @subsection Customizing the interpretation of a definition line
    
    The keys of the hash @variable{%def_map} are definition command names.
    There are two types of entries:
    
    @itemize
    
    @item If the command is a shortcut for 
    another definition command the value is a text and the definition 
    command is replaced by the text.
    
    For example if we have:
    @example
    $def_map@{'deftruc'@} = '@@defvr @{A truc@}';
    @end example
    
    and a line like
    @example 
    @@deftruc var
    @end example
    
    the line will be transformed in
    @example
    @@defvr @{A truc@} var
    @end example
    
    @item
    If the command isn't a shortcut, it is associated with an array
    reference. The first element is @samp{f}, @samp{v} or @samp{t} corresponding
    with the index type (@samp{f} for function, @samp{v} for variable,
    @samp{t} for type).
    
    The remaining of the array describes how to interpret the text following
    the definition command on the definition command line. 
    The entry item specify what corresponds
    with the next bracketed item or word. Currently the possibilities are
    @samp{category}, @samp{name}, @samp{type}, @samp{class}, @samp{arg} 
    and @samp{argtype}.  @samp{arg} means that the arguments are not mixed 
    with type definitions, with @samp{argtype} types are mixed with 
    definitions. When there is no @samp{arg} nor @samp{argtype} it is 
    the same than  @samp{argtype} (like makeinfo).
    
    For example if we have
    @example
    def_map@{'defvr'@} = [ 'v', 'category', 'name' ];
    @end example
    
    The first bracketed item following @code{@@defvr} is considered
    to be the category and the next one is the name. The index associated
    with the definition line is the variables index.
    @end itemize
    
    Some characters are special with regard with definition parsing, they
    are delimiters, the can have a role in definition argument determination, 
    and also hae a special meaning in arguments parsing. 
    This is not very well documented in the texinfo manual,
    so it is subject to change. Strings allow to determine the delimiters:
    
    @vtable @code
    @item $def_argument_separator_delimiters
    Characters that separate arguments, currently @code{()[],}.
    @item $def_always_delimiters
    Character that are always delimiters, if they appear in a type or a 
    parameter,
    @code{()[]}.
    @item $def_in_type_delimiters
    Character that are considered as delimiters only if in a type. In
    a parameter they are part of the parameter.
    @end vtable
    
    
    @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    @node Definition formatting
    @subsection Customization of the definition formatting
    
    Five functions are used when formatting a definition command:
    
    @table @strong
    @item category name
    @deftypefn {Function Reference} $category definition_category $category $class $style $command
    This function precise a category name associating a class 
    @var{$class} (if given) with @var{$category}. The @var{$style} of the
    definition may be @samp{f}, for function, @samp{v}, for variable or @samp{t}, 
    for type. The @var{$command} is the definition @@-command.
    @end deftypefn
    
    @deftypefn {Function Reference} $entry definition_index_entry $name $class $style $command
    This function precise a name associating a class 
    @var{$class} (if given) with @var{$name}. This is used to do an index
    enntry associated with th edefinition command. The @var{$style} of the
    definition may be @samp{f}, for function, @samp{v}, for variable or @samp{t}, 
    for type. The @var{$command} is the definition @@-command.
    @end deftypefn
    
    @item formatting of the definition line
    @deftypefn {Function Reference} $line def_line $class_category_class $name $type $arguments $index_label \@@arguments_array \@@arguments_type_array \@@unformatted_arguments_array $command $class_name $category $class $style $original_command
    This function formats the definition line. @var{$class_category} is the category
    formatted with @variable{$definition_category}, @var{$name}, @var{$type} and 
    @var{arguments} are the element of the definition line. @var{$index_label} is
    the text inserted at the place where an index entry appears. 
    @xref{Index entry place}.
    @var{\@@arguments_array} is an array holding the definition arguments, 
    formatted. @var{\@@arguments_type_array} holds the type of the definition
    arguments, like @samp{name}, @samp{type} and similar arguments, 
    @samp{paramtype}.
    @samp{delimiter} and  @samp{param}. @var{\@@unformatted_arguments_array} 
    holds the arguments without @@-command substitution. @var{$command} is the
    definition command, after substitution. 
    @var{$class_name} is the class applied on name, formatted
    as specified in @code{definition_index_entry}. @var{$category} and 
    @var{$class} are the corresponding arguments. @var{$style} corresponds with the
    index style, as explained above. @var{$original_command} is the unmodified
    definition @@-command.
    @end deftypefn
    
    @item definition text
    @deftypefn {Function Reference} $definition_text def_item $text
    This function formats the definition text, @var{$text}.
    @end deftypefn
    
    @item the whole definition
    @deftypefn {Function Reference} $definition def $text
    This function formats the whole definition. The definition line and text 
    formatted by the above functions are in @var{$text}.
    @end deftypefn
    
    @end table
    
    @c --------------------------------------------------------
    @node Headings
    @section Customizing headings formatting
    
    A function controls the formatting of sectioning element headings, 
    with the corresponding function reference:
    @deftypefn {Function Reference} $heading_text heading \%element_reference
    The @var{\%element_reference} is a reference on a hash corresponding
    with the sectioning element. The following keys are of interest:
    @table @code
    @item text
    The heading text
    @item name
    The heading text without section number
    @item node
    true if the sectioning element is a node without associated structuring command
    @item level
    The level of the element in the document tree. @samp{0} is for @code{@@top},
    @samp{1} for @code{@@chapter} and so on
    @item tag_level
    the sectioning element name, with @code{@@raisesections} and 
    @code{@@lowersections} taken into account
    @item top
    true if it is the top element
    @end table
    @end deftypefn
    
    It is also possible to customize the heading text with section number
    with the following function reference (called for headings and nodes):
    @deftypefn {Function Reference} $result_texi heading_texi $heading_command $heading $number
    @var{$heading_command} is the sectioning @@-command of that heading. 
    @var{$heading} is the texinfo for that heading. @var{$number} is the
    heading number classicaly computed with dots between numbers, and
    letters for top level appendix numbering. This function should return the 
    texinfo text corresponding with the numbered heading.
    @end deftypefn
    
    The label associated with the heading that can appear before the 
    heading itself and even before the navigation panel is customized with the
    following function reference:
    @deftypefn {Function Reference} $element_label element_label $identifier \%element_reference $command $unformatted_line
    @var{$identifier} is the identifier associated with the heading.
    @var{\%element_reference} is the same as above. @var{$command} is the @@-command
    appearing on the line, and @var{$unformatted_line} is the line, 
    unformatted.
    @end deftypefn
    
    Additionally, for @code{@@node} and sectionning @@-commands the formatting
    of the label, navigation panel and heading is controlled by:
    @deftypefn {Function Reference} $element_heagin_text element_heading \%element_reference $command $command_texi_arg $formatted_arg $in_preformatted $one_section $element_heading $first_in_page $is_top $previous_is_top $unformatted_line $element_id $new_element
    @var{\%element_reference} is the same as above. @var{$command} is the heading @@-command.
    @var{$command_texi_arg} is the argument of the @@-command, unformatted. @var{$formatted_arg}
    is is the argument of the @@-command, formatted. @var{$in_preformatted} is true
    if in preformatted environment. @var{$one_section} is true if there is only one 
    section. @var{$first_in_page} is true if this is the first heading  in a page.
    @var{$is_top} is true if the heading is considered as a top element heading.
    @var{$previous_is_top} is true if the previous helement was a top element.
    @var{$unformatted_line} holds the whole line, unformatted. @var{$element_id}
    is the id of the heading. @var{$new_element} is true if the heading is the first
    of an element block.
    @end deftypefn
    
    @c --------------------------------------------------------
    @node Special regions
    @section Formatting of special regions (@code{@@verbatim}, @code{@@cartouche}, @code{@@quotation})
    
    Regions corresponding with raw text, like @code{@@verbatim}, @code{@@html}
    or @code{@@tex} are formatted according to the following function reference:
    
    @deftypefn {Function Reference} $raw_region raw $command $text
    @var{$command} is the command name, @var{$text} is the raw text.
    @end deftypefn
    
    If La@TeX{}2HTML is used, @code{@@tex} regions are handled differently,
    (@pxref{Bypassing normal formatting}).
    
    The @code{@@cartouche} command formatting is controlled by the
    function reference:
    
    @deftypefn {Function Reference} $cartouche cartouche $text
    @var{$text} is the text appearing within the cartouche.
    @end deftypefn
    
    The formatting of @code{@@quotation} and @code{@@smallquotation} 
    is controlled by two function references.
    The first one is usefull in case the @code{@@quotation} has an argument, as
    it allows to prepend a string to the quotation text:
    
    @deftypefn {Function Reference} $prepended_string quotation_prepend_text $command $text
    @var{$command} is the @@-command.
    @var{$text} is the argument of the quotation with @@-commands not 
    interpreted. This function
    can return a string which will be prepended to the quotation text.
    @end deftypefn
    
    @ignore
    @deftypefn {Function Reference} $prepended_string quotation_prepend_text $style $text
    @var{$style} is the first argument of the @code{@@quotation} if there are
    two arguments. @var{$text} is the second argument or the first if there is
    one argument. There are still @@-commands in these strings. This function
    can return a string which will be prepended to the quotation text.
    @end deftypefn
    @end ignore
    
    The whole quotation is formatted by:
    
    @deftypefn {Function Reference} $quotation quotation $command $quotation_text $argument_text $argument_text_texi
    @var{$command} is the @@-command.
    @var{$quotation_text} is the quotation text, formatted, with the text 
    prepended by the function above. @var{$argument_text} is the argument 
    of the @code{@@quotation}, formatted. @var{$argument_text_texi} is the argument
    of the @code{@@quotation}, simply formatted.
    @end deftypefn
    
    @ignore
    @deftypefn {Function Reference} $quotation quotation $quotation_text $argument_text $argument_style_texi $argument_style_id
    @var{$quotation_text} is the quotation text, formatted, with the text 
    prepended by the function above. @var{$argument_text} is the second argument 
    of the @code{@@quotation} or the first if there is one argument, formatted.
    The other arguments are defiend if there are two arguments for the 
    @code{@@quotation}, @var{$argument_style_texi} is this argument, with 
    @@-commands, and  @var{$argument_style_id} is this argument transformed in 
    an identifier which can be used as an @acronym{XML} identifier.
    @end deftypefn
    @end ignore
    
    @c --------------------------------------------------------
    @node Menus
    @section Menu formatting
    
    There are two possibilities for menu formatting:
    
    @itemize @bullet
    @item format the whole menu in a preformatted environment, like 
    in @ref{Complex formats};
    @item format the menu in table with more specialized formatting for each
    part of the menu; 
    @end itemize
    
    The simple formatting in a preformatted is used if 
    @variable{$SIMPLE_MENU} is true, 
    otherwise the format with tables is used (this is the default).
    
    If @variable{$USE_ACCESSKEY} is set, the @code{accesskey} attribute 
    is used in anchors. In that case the @variable{%BUTTONS_ACCESSKEY}
    hash is used for the access key.
    
    To understand how the formatting of menus is controlled, the different
    parts of a menu are first described, then how to control the formatting
    of each of these parts, for each possible formatting.
    
    @menu
    * Menu parts::                  A menu consists in menu entry and menu 
                                    comments
    * Menu components formatting::  
    * Simple menu formatting::      formatting of a whole menu in a simple 
                                    preformatted environement
    * Table menu formatting::       formatting of a whole menu in a
                                    table environment
    @end menu
    
    @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    @node Menu parts
    @subsection The structure of a menu
    
    In @command{texi2html}, a menu is considered to be composed of 2 parts, the
    @dfn{menu entries} and the @dfn{menu comments}. Menu entries are further 
    divided in an @dfn{entry link} and optionnaly an @dfn{entry description}.
    The entry link consists in a node name and an optionnal menu entry
    name.
    
    A menu entry begins with @samp{*} at the beginning of the line. It begins
    with the entry link, followed by the description. The description spans until
    the next menu entry, 
    or an empty line not contained within a command block which begun in the 
    description. An empty line or
    starts a menu comment, which spans until the next menu entry.
    
    Here is an illustration of these rules:
    
    @example
    @@menu
    * entry name: node name.        description begins
       description continues
    * another menu entry::
       description begins
                        description continues
    
       A menu comment, after an empty line
    
    * node::                        description begins
    still in description.
    
    * last entry::         description begins @@emph@{text
    
    of the description, even if there is an empty line,
    because we are in @@emph@}.
    @@end menu
    @end example
    
    @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    @node Menu components formatting
    @subsection The formatting of the different menu components
    
    If in a preformatted context (and @code{$SIMPLE_MENU} isn't set), the 
    menu link and description are put in the same preformatted environment.
    This can be avoided with @variable{$SEPARATE_DESCRIPTION}.
    
    Two function references are associated with the formatting of the 
    different parts of a menu:
    @deftypefn {Function Reference} $link menu_link $section \%state $href $node $name $ending $has_name $command_stack $preformatted
    @var{$section} is the section name corresponding with the link, @var{$href}
    is the link hypertextual reference. @var{$href} may be absent. @var{\%state}
    holds informations about the current context. 
    @c The only key which could be
    @c of interest is @code{preformatted}, true if the context is a preformatted
    @c context. 
    @var{$node} is the node name, @var{$name} is the
    name of the node. @var{$ending} is the text ending the link entry, 
    in general @samp{::} followed by some spaces.
    @var{$has_name} is true if the entry has an explicit name, otherwise
    @var{$name} has been constructed using the formatted node name.
    @var{$command_stack} is an array containing the commands enclosing
    the menu link. It is used in the default case to detect if the 
    menu link is right in the @command{@@menu} or not, since if it is not 
    right below the menu the formatting is simpler.
    @var{$preformatted} is true if in preformatted context.
    @xref{Three contexts}. 
    @end deftypefn
    
    This command is not called if @code{$SIMPLE_MENU} is set.
    
    @deftypefn {Function Reference} $description menu_description $description_text \%state $element_text
    @var{$description_text} is the text of the menu description. 
    The formatted link is also here if in preformatted context and 
    @code{$SEPARATE_DESCRIPTION} is not set.
    @var{\%state}
    should be used similarly than for the menu link. @var{$element_text}
    is the heading of the element associated with the node.
    @var{$command_stack} and @var{$preformatted} are the same than for the
    menu link.
    @end deftypefn
    
    The @dfn{menu comment} part is formatted like a normal command, 
    called @code{menu_comment}. It is only used if not in preformatted 
    environment and if just below a @code{@@menu} since otherwise one
    cannot tell if it is a menu commment or normal text.
    The default is to have it be formatted
    like a @ref{Complex formats}, with
    @example
    $complex_format_map->@{'menu_comment'@} =
    @{
       'begin' => q@{"
  • "@}, 'pre_style' => "$MENU_PRE_STYLE", 'class' => 'menu-comment', @} @end example @c @deftypefn {Function Reference} $menu_comment menu_comment $text @c @var{$text} is the text of the menu comment. It is always in a preformatted @c environment. @c @end deftypefn @c Another function reference corresponds with a special case. It @c is used when a menu entry appears within another block command, to @c avoid the possibilities of invalid @acronym{HTML} production. @c In that case the menu description and menu comments are not formatted @c specially, but treated like normal text. @c @deftypefn {Function Reference} $link simple_menu_link $link_text $href $node $name $ending $has_name @c @var{$link_text} is the text corresponding with the link name, @var{$href} @c is the link hypertextual reference. @c @var{$node} is the node name, @var{$name} is the @c name of the node, and @var{$ending} is the text ending the link entry. @c @var{$has_name} is true if the entry has an explicit name, otherwise @c @var{$name} has been constructed using the formatted node name. @c @end deftypefn @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= @node Simple menu formatting @subsection Simple menu formatting in a preformatted environment If the menu is to be formatted in a single preformatted environment, an entry for @samp{menu} and @samp{detailmenu} should be added to the @code{$complex_format_map} hash reference (@pxref{Complex formats}). In the default case, if the user didn't add an entry himself, a very simple entry is used, with: @example $complex_format_map->@{'menu'@} = @{ 'begin' => q@{''@} , 'end' => q@{''@}, 'pre_style' => "$MENU_PRE_STYLE", 'class' => 'menu-preformatted' @}; @end example @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= @node Table menu formatting @subsection The formatting of the menu in a table In the default case, the name of the section corresponding with the node is used instead of the node name. If @variable{$NODE_NAME_IN_MENU} is true, however, node names are used. If @variable{$AVOID_MENU_REDUNDANCY} is true and menu entry equal menu description the description isn't printed. This is the default. Likewise, if node or section name equal entry name, do not print entry name. A symbol, @variable{$MENU_SYMBOL} is put at the beginning of menu entries when the node name is used. The default is @samp{•}. If @variable{$UNNUMBERED_SYMBOL_IN_MENU} is true it is also put at the beginning of unnumbered section names. This is not done by default. The menu comments are considered to be preformatted text. The style associated with this preformatted text is determined by @variable{$MENU_PRE_STYLE}. Default is @samp{font-family: serif}. The entry similar with an entry in @code{$complex_format_map} (@pxref{Complex formats}) used when the menu appears in a preformatted enviroment is in @variable{$MENU_PRE_COMPLEX_FORMAT}, and, in the default case is: @example $MENU_PRE_COMPLEX_FORMAT = @{ 'pre_style' => $MENU_PRE_STYLE, 'class' => 'menu-preformatted' @}; @end example The css class associated with menu comments is @code{menu-comments}. The following function reference controls the formatting of a wole menu or a detailmenu in that case: @deftypefn {Function Reference} $menu menu_command $command $menu_components_text @var{$command} is the menu command, currently @samp{menu} or @samp{detailmenu}. @var{$menu_components_text} is the formatted menu components text, obtained as explained above. @end deftypefn @c -------------------------------------------------------- @node Indices @section Indices formatting Two different things needs to be handled for indices formatting, the place where the index term appears, the index entry, and the index list itself. The indexing commands like @code{@@cindex} determines where index entries appear, and the index list is printed with a @code{@@printindex} command. @menu * Index entry place:: Index entries in the main document are targets for hypertext references * Index list:: Customizing the formatting of the index list @end menu @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= @node Index entry place @subsection Formatting of index entries Index entry places in the main text may be the target for hypertext references. Their formatting is controlled by the function associated with the following function reference: @deftypefn {Function Reference} $target index_entry_label $identifier $preformatted $entry $index_name $index_command $texi_entry $formatted_entry @var{$identifier} should be used to create a target for links (typically associated with a name or id attribute in @acronym{HTML}). @var{$preformatted} is true if the index entry appeared in preformatted text. @var{$entry} is the index entry with all the @@-commands removed. @var{$index_name} is the index name, @var{$command} is the index command which may be a index command like @code{@@cindex}, but also a definition or a table. @var{$texi_entry} is th eindex entry with @@-commands, and @var{$formatted_entry} the entry formatted. @end deftypefn Regular index entries are (like @code{@@cindex}) are formatted using the following function reference: @deftypefn {Function Reference} $index_entry index_entry_command $command $index_name $label $entry_texi $entry_formatted @var{$command}, @var{$index_name}, @var{$entry_texi} and @var{$entry_formatted} are the same as above, and @var{$label} is what could be used as a label, formatted using the function above. @end deftypefn @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= @node Index list @subsection Customizing the formatting of index lists There is an elaborate default index formatting in texi2html, with index summary by letter linking to index entries grouped by letters too, with the possibility of index pages split accross files. This system may be completly bypassed by redefining the function reference that is called when @code{@@printindex} is encountered: @deftypefn {Function Reference} $index_text printindex $index_name @var{$index_name} is the index name appearing on the @code{@@printindex} line. The index formatted should be returned by this function reference. @end deftypefn If the default index formatting is used, there are still possibilities to customize part of the formatting. The index entries are sorted alphabetically. A whole index list is considered to be composed of letter entries. A letter entry is composed by all the index entries beginning with that letter. A letter may be a non alphabetical character, but we call it letter here. An index summary appears at the beginning and at the end of an index list, and should be used to jump directly to a letter entry. Indices lists may be split across pages, thus the different letters may appear on different files. The number of index entries appearing on each page is determined by a variable @variable{$SPLIT_INDEX} if set. The default is to split indices after 100 entries. The formatting of all these elements is controlled by the following function references: @table @emph @item formatting of a letter in a summary @deftypefn {Function Reference} $letter summary_letter $letter $file $identifier This function is used to format a letter appearing in a summary, refering to a letter entry in the index list. @var{$letter} is the letter. @var{$file} is the file name where the letter entry appears. More precisely, it is empty when the letter entry is on the same page than the summary, it contains the file name when the index page is split accross page. @var{$identifier} is an identifier for the target letter entry. @end deftypefn @item formatting of a summary @deftypefn {Function Reference} $summary index_summary \@@alphabetical_letters \@@nonalphabetical_letters @var{\@@alphabetical_letters} and @var{\@@nonalphabetical_letters} contain the formatted summary letters, formatted with the above function. @end deftypefn @item formatting of an index entry @deftypefn {Function Reference} $entry index_entry $entry_href $entry_text $section_href $section_heading @var{$entry_href} is a reference to the place where the index entry appeared, @var{$entry_text} is the corresponding text. @var{$section_href} is a reference to the beginning of the sectioning element containing the index entry, @var{$section_heading} is the heading of the element. @end deftypefn @item formatting of letter entry @deftypefn {Function Reference} $letter_entry index_letter $letter $identifier $index_entries_text This function formats a letter entry, consisting in all the index entries beginning with this letter. @var{$letter} is the letter, @var{$identifier} should be used to create a target for links (typically links from summaries), and @var{$index_entries_text} is the text of the index entries formatted as described above. @end deftypefn @item formatting of whole index @deftypefn {Function Reference} $index print_index $index_text $index_name @var{$index_text} is the text of all the index entries grouped by letter appearing in that page formatted as above. It is undef if there are no entries or theindex name isn't known. @var{index_name} is the name of the index, the argument of @code{@@printindex}. @end deftypefn @end table @c -------------------------------------------------------- @node Floats and lists of floats @section Floats and lists of floats Floats appear in the @code{@@float} environment, optionaly with a style and a label, and with optionnal @code{@@caption} and @code{@@shortcaption}. Their list appear after a @code{@@listoffloats}. A hash reference is associated with each float, it is available in some formatting functions. The keys are: @table @code @item caption_texi @itemx shortcaption_texi A reference on an array containing the caption or shortcaption lines, with texi @@-commands. @item style_texi The style with texi @@-commands. @item style_id The unique identifier associated with the style. @item style The style formatted. @item nr The number with the same conventions than makeinfo (use the chapter number a dot and then the number of the float of that style in the chapter, or an absolute number if in unnumbered). @item chapter_nr The number of the chapter containing the float. @item nr_in_chapter The number of the float in the chapter. @item absolut_nr The number of the float in the document. @item texi The label with @@-commands. @item name The label formatted. @item id The unique identifier associated with the label. Usefull to make an anchor or a reference. @item target The target that can be used to refer to that float. @item element A reference on a structure representing the element the float appear in. @end table @menu * Floats:: Formatting of floats * Lists of floats:: Formatting the lists of floats @end menu @node Floats @subsection Formatting a float First there is an occasion to construct a texinfo text for the caption, using the caption texinfo lines and the informations in the float structure. The returned lines will be formatted in the main program. A function reference is used here: @deftypefn {Function Reference} {(\@@caption_lines_returned, \@@shortcaption_lines_returned)} caption_shortcaption \%float \@@caption_lines \@@shortcaption_lines @var{\%float} is the structure defined above. @var{\@@caption_lines} and @var{\@@shortcaption_lines} are references on arrays containing the texinfo lines for caption and short caption. @var{\@@caption_lines_returned} and @var{\@@shortcaption_lines_returned} are references on an array containing the texinfo lines for the caption and shortcaption. @end deftypefn Then the float is formatted with the following function reference: @deftypefn {Function Reference} $text float $float_text \%float $caption_text $shortcaption_text @var{$float_text} is the text appearing within the @code{@@float}, formatted. @var{\%float} is still the structure defined above. @var{$caption_text} and @var{$shortcaption_text} are the caption and short caption build with the above function and formatted. @end deftypefn It is also possible to do something when a caption or a shortcaption appear with t hefollowing function reference: @deftypefn {Function Reference} $text caption_shortcaption_command $command $formatted_caption \@@texi_lines \%float @var{$command} is the @@-command, @samp{caption} or @samp{shortcaption}. @var{$formatted_caption} is the caption text, formatted, while @var{\@@texi_lines} is a reference on an array containing the caption lines, this time without any formatting. @var{\%float} is still the structure defined above. In the default case this function reference returns an empty string. @end deftypefn @node Lists of floats @subsection Formatting lists of floats A list of floats is introduced by @code{@@listoffloats}. The argument of @code{@@listoffloats} is the @dfn{style}. First the style texinfo can be modified with the following function reference: @deftypefn {Function Reference} $style_texi_returned listoffloats_style $style_texi @var{$style_texi} is the @code{@@listoffloats} argument with texinfo @@-commands kept. It is possible to make changes to the @var{$style_texi} and return a modified string, still with @@-commands. The modified string is formatted in the main program. @end deftypefn After that, for each of the floats with that style, first there is a possibility to modify the float style and the float caption before they are formatted in the main program, with the following function references: @deftypefn {Function Reference} $float_style_texi_returned listoffloats_float_style $style_texi \%float @var{$style_texi} is the style, and @var{\%float} is the structure described above. This function reference returns a style to be formatted in the main program. @end deftypefn @deftypefn {Function Reference} $caption_texi_returned listoffloats_caption \%float @var{\%float} is the structure described above. This function reference returns a caption to be formatted in the main program. @end deftypefn Each entry is formatted by: @deftypefn {Function Reference} $listoffloats_entry listoffloats_entry $style_texi \%float $float_style $caption $href @var{$style_texi} is the style with @@-commands, @var{$float_style} is the style returned by the above function and formatted. @var{$caption} is the caption returned by the above function formatted. @var{\%float} is the structure corresponding with the float, and @var{$href} is an href pointing to the float location. @end deftypefn Lastly, the whole @code{@@listoffloats} is formatted by: @deftypefn {Function Reference} $listoffloats listoffloats $style_texi $style \@@listoffloats_entries @var{$style_texi} is the style with @@-commands, @var{$style} is the style returned by the above function and formatted. The array reference @var{\@@listoffloats_entries} holds the entries formatted by the above function. @end deftypefn @c -------------------------------------------------------- @node Footnotes @section Customizing the footnotes formatting Each footnote is associated with a footnote entry. Several footnote entries are grouped in a footnote section. When a footnote appears, two things must be formatted: in the main text the place where the footnote appear and the footnote text. Two functions, with corresponding function references control the formatting of the footnotes: @deftypefn {Function Reference} {(\@@lines $text_for_document)} foot_line_and_ref $number_in_doc $number_in_page $footnote_id $place_id $document_file $footnote_file \@@lines \%state @var{$number_in_doc} is the footnote number in the whole document, @var{$number_in_page} is the footnote number in the current page. @var{$footnote_id} is an identifier for the footnote in the footnote text which should be used to make target for references to that footnote, while @var{$place_id} is an identifier for the location of the footnote in the main document. Similarly, @var{$document_file} is the file name of the file containing the text where the footnote appears in the main document, while @var{$footnote_file} is the file name of the file where the footnote text appears. @var{\@@lines} is a reference on an array containing the footnote text lines, allready formatted. And @var{\%state} holds informations about the context at the footnote place in the main document. As usual the most usefull entry is @code{preformatted} which is true if the footnote appears in a preformatted context. This function returns a reference on an array, @var{\@@lines} containing the updated footnote text for the footnote entry, and @var{$text_for_document}, the text appearing at the footnote place in the main document, linking to the footnote entry. @end deftypefn The following function is only used when footnotes are at the bottom of a page and the document is split. For customization of the footnotes page in case they are on a separated page or section, @ref{Special pages layout}. For the determination of the footnote locations, @ref{Page layout options}. @deffn {Function Reference} foot_section \@@footnotes_lines This function formats a group of footnotes. @var{\@@footnotes_lines} is a reference on an array holding the lines of all the footnote entries formatted as explained above. This function modifies the reference. @end deffn @c -------------------------------------------------------- @node Customizing format opening @section Customizing format opening The following function reference is called when a format is opened. A format is any @@-command that ends with a @code{@@end} except @@-commands that only select if the input is processed (like @code{@@ignore} or @code{@@ifhtml}) or raw @@-commands (like @code{@@verbatim} and @code{@@html}). @deftypefn {Function Reference} $line begin_format_texi $command $line \%state The @var{$command} is the format command, the @var{$line} is the line following the @@-command, @var{\%state} is a reference on a hash containing many formatting information. It can modify the line and return something else. In the default case, it is used to keep track of the multitable nesting. As a consequence, it is linked with the multitable formating. @xref{Multitable formatting}. @end deftypefn @c -------------------------------------------------------- @node Bypassing normal formatting @section Bypassing normal formatting It is possible to bypass completely the normal formatting of @@-commands with braces and raw regions (@code{@@html}, @code{@@tex}, @code{@@xml}@dots{} regions). In that case the @@-commands and the text within are passed to a user defined function early, in a pass when no expansion of output takes place, called the collecting pass. Another user defined function is called during the output expansion phase. Moreover, arbitrary user defined functions may be called between the different texinfo parsing and outputting passes. This could be used, for example to initialize some things before collecting the @@-commands and their text, expanding them between the collecting and expansion phase and doing some cleaning after the expansion pass. These possibilities are used for the interface to La@TeX{}2HTML (@pxref{Expanding TeX regions}), and the examples are taken from that use. The @@-commands that are keys of the @variable{%command_handler} hash are collected in the collecting pass and expanded in the expansion pass using user defined functions. The associated value is a reference on a hash used to specify the user defined function references. The key of the hash reference are @code{'init'} for the function reference called during the collecting pass, and @code{'expand'} during the expansion pass. Here is an example for an @@-command with braces: @example $command_handler@{'math'@} = @{ 'init' => \&Texi2HTML::LaTeX2HTML::to_latex, 'expand' => \&Texi2HTML::LaTeX2HTML::do_tex @}; @end example And an example for a raw region @@-command: @example $command_handler@{'tex'@} = @{ 'init' => \&Texi2HTML::LaTeX2HTML::to_latex, 'expand' => \&Texi2HTML::LaTeX2HTML::do_tex @}; @end example The function references are called like: @deftypefn {Function Reference} $status $command_handler@{'$command'@}->@{'init'@} $command $text $count @var{$command} is the @@-command name, @var{$text} is the text appearing within the @@-command. @var{$count} is a counter counting how many times this @@-command appeared. @var{$status} is a boolean which should be true if the collecting was succesfull. If false the @@-command and the text is discarded. @end deftypefn @deftypefn {Function Reference} $result $command_handler@{'$command'@}->@{'expand'@} $command $count $state $text @var{$command} is the @@-command name, @var{$count} is a counter counting how many times this @@-command appeared. @var{$state} is a reference on a hash containing many informations about the context. @var{$text} should be empty. @var{$result} is the expanded resulting text. @end deftypefn There are three places for user defined functions, associated with arrays: @vtable @code @item @@command_handler_init The function references in that array are called before the collecting pass. At that time the information available is essentially the file names. @item @@command_handler_process The function references in that array are called between the collecting pass and the expansion pass. At that time all the special @@-commands have been collected as explained above but no output has been produced. @item @@command_handler_finish he function references in that array are called after the end of the output generation. @end vtable Here is an example of these arrays use: @example push @@command_handler_init, \&Texi2HTML::LaTeX2HTML::init; push @@command_handler_process, \&Texi2HTML::LaTeX2HTML::latex2html; push @@command_handler_finish, \&Texi2HTML::LaTeX2HTML::finish; @end example @c -------------------------------------------------------- @node Handling special regions @section Handling special regions Special regions @code{@@titlepage}, @code{@@documentdescription} and @code{@@copying} are removed from the document before the last pass in the default case. They can be kept if the value associated with the @@-command in the @variable{%region_formats_kept} hash is true. The @code{@@insertcopying} @@-command is formatted by @deftypefn {Function Reference} $insertcopying insertcopying $text $comment $simple_text @var{$text} is the text appearing in @code{@@copying}, formatted. @var{$comment} is the text with texi removed, should be very simple text. @var{$simple_text} is the text formatted in string context. @end deftypefn The title page handling is described in @ref{Title page}. @c -------------------------------------------------------- @node Other and unknown commands @section Customizing other commands, and unknown commands @ignore # The command_handler arrays are for commands formatted externally. # The function references in @command_handler_init are called # before the second pass, before the @-commands text collection. # Those in @command_handler_process are called between the second pass # and the third pass, after collection of @-commands text and before their # expansion. # Those in @command_handler_process are called after the third pass, # after the document generation. @command_handler_init = (); @command_handler_process = (); @command_handler_finish = (); @end ignore @c -------------------------------------------------------- @c @node Skipped commands @c @section Customizing ignored commands and text @cindex skipped command @cindex unknown command Many commands without braces are available in texinfo, sometimes with a specific syntax. For example we have @code{@@sp}, @code{@@noindent}, @code{@@documentlanguage}, @code{@@oddheading}, @code{@@headings}, @code{@@shortcontents}, @code{@@shorttitlepage} or @code{@@comment}. @command{texi2html} interprets some of these commands and some functions or variables are used for their formatting or to access their information. In the default case, however, most of these constructs are ignored. It is possible to change how the things following these commands on the line are handled, what is considered to be an arg for those commands and it is also possible to keep them instead of discarding them such that it is possible to handle them specially, with the same function than the one used for unknown commands. Those special commands without braces are the key of a hash: @variable{%misc_command}. The associated value is a reference on a hash enabling to set the properties of these commands. The keys of this hash reference is the name of a property, the value is the value of the property. For example here we have @code{line} for the @code{arg} property for the @code{command} @@-command. @example $misc_command@{'command'@} = @{'arg' => 'line', 'skip' => 'space'@}; @end example The properties and possible values are: @table @code @item skip This property enables to set what is skipped after the command arguments. Here are the possible values: @table @code @item line The remaining of the line is skipped. @item space Spaces are skipped but not newline. @item whitespace Spaces are skipped @item linewhitespace Spaces are skipped if there are only spaces remaining on the line. @item linespace Spaces are skipped, but not newline if there are only spaces remaining on the line @end table @item arg If the associated value is @code{line} the line is considered to be the argument. If it is a number it is the number of args (separated by spaces). @item keep If true the args and the macro are kept, otherwise they are discarded. The defaut is to have @code{keep} undef for all the commands. If @code{keep} is true for @code{@@verbatiminclude} the default action for this macro isn't done. @end table Commands which don't appear in the hashes @c @variable{%things_map} @variable{%pre_map} @variable{%simple_map}, @variable{%simple_map_pre}, @variable{%simple_map_texi} and @code{%misc_command}, or that appear in @code{%misc_command} but with @code{keep} true are processed by the following function reference: @deftypefn {Function Reference} {($result_line, $result, $result_text, $message)} unknown $command $line $pass @var{$command} is the @@-command, @var{$line} is the line following the @var{$command}. @var{$pass} is the pass of texi2html (@pxref{Three passes}). @var{$result} is a boolean. If it is true then the other return values are taken into account otherwise the default actions are used. In case @var{$result} is true, @var{$result_line} is the new line to be processed further, @var{$result_text} is the resulting formatted text and @var{$message}, if defined is a message outputted to the output with line number added by @command{texi2html}. @end deftypefn Commands with braces not specified above nor in @variable{%style_map}, @variable{%style_map_pre} and @variable{%style_map_texi} are processed by the following function reference @deftypefn {Function Reference} {($result, $result_text, $message)} unknown_style $command $text @var{$command} is the @@-command, @var{$text} is the text appearing within the braces (allready formatted). @var{$result} is a boolean. If it is true then the other return values are taken into account otherwise the default actions are used. In case @var{$result} is true, @var{$result_text} is the resulting formatted text and @var{$message}, if defined is a message outputted to the output with line number added by @command{texi2html}. @end deftypefn @c -------------------------------------------------------- @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= @c ======================================================== @c ======================================================== @node Internationalization @appendix Internationalization The strings written in the document are selected based on the document language. This can be used to customize the strings, as described in @ref{Strings}. This also enables translation of the strings. @menu * Translating strings:: * Adding new strings:: @end menu @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= @node Translating strings @appendixsec Translating strings @cindex Translation @cindex i18n @vindex $LANGUAGES @vindex $T2H_OBSOLETE_STRINGS @menu * Supported language:: * New language:: @end menu @node Supported language @appendixsubsec Contributing to existing translations If the language is allready supported, then there will be a file in the @file{i18n} directory with name the two-letter ISO-639 language code. In that case you can enhance the translations by editing this file. There is a @code{$LANGUAGES->@{'@var{language}'@}} hash in that file. The keys are the english strings, in @code{''}, the values (in @code{''} after @code{=>}) are the translations. When a string contains a @samp{%} followed by @samp{@{} @var{name} @samp{@}} it means that the string will be expanded by @command{texi2html}. For an example, see @ref{Strings}. After that you should run the command @command{./manage_i18n.pl merge} in the top directory, it should merge your file with the existing files in @file{translations.pl}, which is incorporated to the @file{texi2html} script by @command{make}. @node New language @appendixsubsec Contributing translations to another language If the language isn't currently supported, copy the @file{en} file in @file{i18n} to a file with name the two-letter ISO-639 language code of your language and then add your translations to the strings. You could also add your two-letter language code in the @file{manage_i18n.pl} file in the @code{@@known_languages} array. After that you should run the command @command{./manage_i18n.pl update @var{lang}} and @command{./manage_i18n.pl merge} in the top directory. Obsoleted strings are not removed from the files, they are still present in the @code{$T2H_OBSOLETE_STRINGS->@{'@var{language}'@}} hash in case the string is reused later. If you made change to strings specified in installed files (@pxref{Installation}) you will have to reinstall them otherwise the installated files will take precedence (@pxref{Using init files}). @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= @node Adding new strings @appendixsec Adding new strings written to document @cindex internationalized strings @cindex @command{manage_i18n.pl} If you need to write strings, for example the new string @var{a string} to the resulting document, call @code{&$I('a string')}. Use simple quotes. If you want to substitute a value in the string put @code{%@{@var{string_value}@}}, in the string, and give a second argument to @code{&$I}, a hash reference with key @var{string_value} and value the what you want to substitute. Here is an example: @example return &$I('%@{name@} of %@{class@}', @{ 'name' => $name, 'class' => $class @}); @end example In that case @code{%@{name@}} is substituted by @code{$name} in the translated string. After that you should run the command @command{./manage_i18n.pl} in the top directory, to add your new strings to the template file, that is the file for english and to all the files in the @file{i18n} directory. This is achieved with @example ./manage_i18n.pl template ./manage_i18n.pl update @end example These two commands won't work if you don't have the @code{Data::Dumper} module installed. And to merge the new translation files in @file{translations.pl}, do @example ./manage_i18n.pl merge @end example All these steps may be performed by @command{make}, once the language file is added to @file{Makefile.am} in the @code{i18n_files} variable. @c -------------------------------------------------------- @node Incompatibilities @chapter Incompatibilities with previous versions @command{texi2html} has accumulated a lot of incompatibilities with previous versions. They are documented in the @file{NEWS} file, we discuss them here nevertheless. Most of the incompatibilities were introduced in version 1.68. API changed also a lot between 1.78 and 1.80. @itemize @bullet @item API changes between 1.78 and 1.80: @itemize @bullet @item what was done in the beginning of the $print_section function reference is now done in $print_element_header. @item there is a new argument for $normal_text. @item there is a new argument for $menu_link and $simple_menu_link, and the name argument is always set, even if there is no explicit name. The new argument is true if there really was an explicit name. @item $internal_ref and $external_ref don't change inforef to xref anymore. @item in $table_item the text is not formatted with the format command, the text_formatted argument is. @item definition index entries are now formatted with $definition_index_entry, not with $definition_category anymore. @item $printindex is called if an index appears, even if the index is not defined or there are no index entries. @item new argument (@@-command name) for $quotation and $quotation_prepend_text. @item change in the heading API. THIS_HEADER is not used anymore. New function reference, element_heading to format a node or a section heading, including navigation and label. Accordingly, print_Top and one_section don't print the element header anymore. Also it is reported if the element is a new element, is the main element and more arguments, and top element heading is always done in heading. @item print_element_header and print_navigation now return their result. @item the @code{copying} key of %Texi2HTML::THISDOC is now called @code{copying_comment}. @item TOC_LIST_ATTRIBUTE is now called NO_BULLET_LIST_ATTRIBUTE. @item TOC_LIST_STYLE is now called NO_BULLET_LIST_STYLE. @item the $unknown function reference has a new argument, the pass number. @item @option{--sec-nav} is replaced by @option{--headers}. @item @option{--Verbose} is replaced by @option{--verbose}. @item @option{--lang} is replaced by @option{--document-language}. @item @option{--separated-footnotes} is replaced by @option{--footnote-style}. @item @option{--lang} is replaced by @option{--document-language}. @item @code{&$menu_comment} is removed, @code{menu_comment} is now handled like an @@-command. @item @code{@@detailmenu} is now formatted more like @code{@@menu}, and the @code{&$menu} function reference is replaced by @code{&$menu_command}. @code{&$menu} is kept for backward compatibility. If @code{&$menu} is defined, @code{@@detailmenu} is ignored. @item the API for the formatting of menus completly changed. $simple_menu_link is removed, everything should be done in $menu_link. @item image API changed, and is unstable, so not documented. @item image file paths are not completed anymore in the default case. The previous behaviour can be restored with @code{$COMPLETE_IMAGE_PATHS} set to true. @item in %misc_command @samp{texi} is not used anymore. The value and macros are expanded as they should be unconditionnally. @item there is a new 'style' key in $complex_format_map, to be able to differentiate complex formats inheriting fonts and code_style (like @@format, @@display). @item $EXTENSION should be undef if one doesn't want an extension to be added. @item THISDOC@{'title'@} and similar are now for @@title since only one @@title should appear in the document. @@settitle is tried first to set fulltitle. @item Configuration variables are modified anymore, instead the variable value is put in $Texi2HTML::THISDOC@{'VAR'@}. This is the case for DO_CONTENTS, DO_SCONTENTS, CSS_LINES, BODYTEXT, DOCUMENT_DESCRIPTION, DOCUMENT_ENCODING, IN_ENCODING, ENCODING_NAME, OUT_ENCODING. For example, if $CSS_LINES is defined, the value is put in $Texi2HTML::THISDOC@{'CSS_LINES'@} which is used for formatting, and if $CSS_LINES is not defined, $Texi2HTML::THISDOC@{'CSS_LINES'@} is autodetected. @item When there is no section and $USE_NODES is not set don't split by node. This behaviour and the previous aren't documented, so it could change in the future. @end itemize @item API changes between 1.76 and 1.78: @itemize @bullet @item paragraph has new arguments with indentation information, added as the third argument, and other context information. The formatting linked with commands opened before the paragraph and closed after the paragraph are done in the formatting function. Similar things are done for preformatted. @item normal_text changed completely. There are much more arguments to give informations about the context, and normal_text now does more text manipulation. @item New arguments for image the alt text, the height and width, the path to working dir and the path to image file relative to working dir. More image formatting is done in the formatting function. @item New argument for empty_line. @item End of line removal is done in formatting function of definition line formatting. @item node_file_name now should only returns the node file, since the redirection file isn't used anymore. element_file_name only is used for file names, whatever NODES_FILES is. @end itemize @item changes between 1.66 and 1.68: @itemize @bullet @item When the manual is split the default is to put resulting files in a directory with name the manual file basename (previously they were left in the current directory). To avoid that, call texi2html with @option{-output .}. This has been changed to be compatible with @command{makeinfo} and also because it fits better with the cross manuals reference scheme. @item The option @option{--output} signification changed. It now has the same meaning than for @command{makeinfo}. It seems that in 1.66 it was the same than @option{-out-file}. @option{--output} new meaning allows to replace @option{-out-file} and @option{-subdir} with a unique option. More precisely @option{-out-file} forces the output to be unsplit while @option{--output} behaves differently when split (it specifies the directory where the manual files should be outputted) and unsplit (it specifies the output file). @option{-subdir} is retained for backward compatibility. If you want a backward compatibility you can use @option{-subdir} for the output directory if the document is split, and @option{-out-file} if the document isn't split. This hasn't been tested extensively though. @item Many options has been obsoleted but they are retained for backward compatibility. @item The init files are searched in new directories, however they are still searched for in the old directories for backward compatibility. @item the option @option{--glossary} doesn't do anything. Likely nothing specific is done regarding bibliographies. This has been decided because this added some semantics to the texinfo formatting language that weren't part of texinfo. It should be possible to do something similar with macros. See for example @file{glossary.texi} for glossary and @file{my-bib-macros.texi} for bibliography in the directory @file{examples}. In the web2c package there is an example of use of BibTeX, see @url{http://tug.org/texlive/devsrc/Build/source/TeX/texk/web2c/doc/} (the examples for bibliography are taken from the texinfo home page @url{http://www.gnu.org/software/texinfo/texinfo.html}). @item don't use @code{T2H_CENTER_IMAGE}. @code{@@center} should be used insead, it will give the right output for all the formats. @item If a directory creation fails the program aborts. This is much safer. @item The interface for internationalisation changed, although the previous wasn't documented a lot. @item the API described in this manual changed a lot. A important change was to use the @code{Texi2HTML::Config} names space instead of variables prefixed with @samp{T2H_} or @samp{t2h_}. To cope with the change the prefix should be removed from variables in init files. Some variables are now in @code{%Texi2HTML::THISDOC}. @item @code{@@ifinfo} regions are not expanded by default. This may lead to warnings or errors especially if the Top node is enclosed in @code{@@ifinfo}, as some node won't appear in menus. The quick fix is to call @command{texi2html} with the option @option{--ifinfo} and the right way should be to make more use of @code{@@ifnottex}. @item The code appearing before the first node is now outputted, it was ignored before. @option{--ignore-preamble-text} revert to the previous behaviour. Enclosing in @code{@@ifnothtml} would be much cleaner. @end itemize @end itemize @c -------------------------------------------------------- @node Specificities @chapter How little texi2html texinfo differs from GNU texinfo For features documented in the texinfo manual, the texinfo interpretation by @command{texi2html} shouldn't differ from the interpretation of @command{makeinfo} or @command{texi2dvi}. However for constructs with unspecified behaviour @command{texi2html} often doesn't lead to the same result than @command{makeinfo} or @command{texi2dvi}. @command{makeinfo} and @command{texi2dvi} are also inconsistent in most of these cases (or broken). You are urged not to use these features unless absolutely necessary. This information is only here to help understand why @command{texi2html} differ from other texinfo interpreters, it may be inacurate and the @command{texi2html} behaviour may change in the future and was different in the past. @table @asis @item @@-commands with text on the line In the texinfo manual it is specified that block @@-commands should appear on a line without text and the closing @code{@@end} should also be on a line by himself. With @command{texi2html} it is possible to add text before and after the command, so the following is right: @example something @@example the example @@end example after the example @end example @command{makeinfo} and @command{texi2dvi} may also accept text before the command and text after the @code{@@end} command, sometimes ignoring it after the @code{@@end}. This is a feature you should especially not rely on. @item special @@-commands handling The special @@-commands are commands like @code{@@pagesizes}, @code{@@sp}, @code{@@evenheading}, @code{@@raisesections}, @code{@@defindex} and a lot more. In many cases @command{makeinfo} and @code{texi2dvi} don't parse those commands the same way too. @command{texi2html} may also show some differences in parsing of the arguments of these commands, in case there are wrong arguments, and also ignore differently things following those commands. How user defined macros, set and values are expanded in those commands may also be different. Part of the specification of how these commands are handled is configureable (@pxref{Other and unknown commands}), but not what happens during the beginning of the parsing for some of those commands. @item features different between @command{makeinfo} and @command{texi2dvi} When @command{makeinfo} or @command{texi2dvi} use a feature which is reserved for one or the other translator, @command{texi2html} uses that feature. So for example @code{@@definfoenclose} which is ignored by @command{texi2dvi} is taken into account and @code{@@kbdinputstyle} which is ignored by @command{makeinfo} is taken into account. @item user defined macros and values In this area @command{makeinfo} and @command{texi2dvi} also differ a lot. The reference implementation is the @command{makeinfo} implementation as @command{texi2dvi} is easily broken when macros are not used simply. @itemize @bullet @item @code{@@rmacro} and @code{@@macro} behave exactly the same. In fact this goes against a documented behaviour, however if a user don't want a recursive macro he can simply avoid reusing the macro in the definition. If somebody report that the feature is usefull we could try to implement it. @item It is possible to escape the end of a macro definition with @example \@@end macro @end example with the @samp{\} being removed after the first expansion. Otherwise it is not possible to produce a @code{\@@end macro} in a macro. @item @code{@@unmacro} is interpreted during the macro argument expansion. Don't know what @command{makeinfo} exactly do. @item Some @code{@@value} may be expanded later than the others, those that are in special commands, like @code{@@node}. @end itemize @item @code{@@,} in @code{@@node} Like @command{texi2dvi} but unlike @command{makeinfo} @code{@@,} don't break @code{@@node} arguments like a regular @samp{,}. @item Things before first node or preamble Things before the first node or before the preamble may not be exactly interpreted or discarded as @command{makeinfo} or @command{texi2dvi} do. @item encodings @command{texi2html} knows more encodings, in fact all encodings @command{perl} knows about. @item commands in @code{@@ifset} and @code{@@ifclear} @command{texi2html} doesn't need a proper nesting of internal @code{@@ifset} or @code{@@ifclear} if they are in ignored or raw regions (like @code{@@html} or @code{@@verbatim}). For example the following is accepted by @command{texi2html} and not by @command{makeinfo}: @example @@ifset notset @@ignore @@ifset @@end ignore @@end ifset @end example In @code{@@ifset} and @code{@@ifclear} texi2html also accepts a lot more of invalid constructs. For example the following is accepted by @command{texi2html} but not by @command{makeinfo}: @example @@set flag @@ifset flag @@itemize @@item my item @@end ifset text @@ifset flag @@end itemize @@end ifset @end example @end table @c -------------------------------------------------------- @c commandline option index. @node Indexop @appendix Command Line Option Index @printindex op @c -------------------------------------------------------- @node Indexvr @appendix Variable Index @printindex vr @c -------------------------------------------------------- @node Indexcp @appendix Concept Index @printindex cp @bye texi2html-1.82/doc/TODO0000644000175000017500000000026611264347115016475 0ustar flichtenheldflichtenheld- use hightlighter perl script (change code2html.pl let it produce Texinfo code instead of HTML) - More reference parts. - Examples on how to make customizations to HTML output. texi2html-1.82/doc/Makefile.in0000644000175000017500000005405111264347115020053 0ustar flichtenheldflichtenheld# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/stamp-vti $(srcdir)/version.texi TODO mdate-sh \ texinfo.tex ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = INFO_DEPS = $(srcdir)/texi2html.info am__TEXINFO_TEX_DIR = $(srcdir) DVIS = texi2html.dvi PDFS = texi2html.pdf PSS = texi2html.ps HTMLS = texi2html.html TEXINFOS = texi2html.texi TEXI2DVI = texi2dvi TEXI2PDF = $(TEXI2DVI) --pdf --batch MAKEINFOHTML = $(MAKEINFO) --html AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) DVIPS = dvips am__installdirs = "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" \ "$(DESTDIR)$(texinfohtmldir)" am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man_MANS) texinfohtmlDATA_INSTALL = $(INSTALL_DATA) DATA = $(texinfohtml_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DATE = @PACKAGE_DATE@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ REQUIRE_DATA_DUMPER = @REQUIRE_DATA_DUMPER@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_DATA_DUMPER = @USE_DATA_DUMPER@ USE_UNICODE = @USE_UNICODE@ USE_UNIDECODE = @USE_UNIDECODE@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ am__leading_dot = @am__leading_dot@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # info_TEXINFOS = texi2html.texi #CLEANFILES = texi2html.ps texi2html.pdf texi2html.html \ # texi2html.ascii # texinfodata = $(datadir)/texinfo texinfohtmldir = $(texinfodata)/html texinfohtml_DATA = texi2html.html # use the script out of the distribution NOT # an old one which is installed on the client. TEXI2HTML = $(top_builddir)/texi2html man_MANS = texi2html.1 EXTRA_DIST = \ texi2html.1.in \ texi2html.html CLEANFILES = texi2html.1 SUFFIXES = .txt all: all-am .SUFFIXES: .SUFFIXES: .txt .dvi .html .info .pdf .ps .texi .texinfo .txi $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh .texi.info: restore=: && backupdir="$(am__leading_dot)am$$$$" && \ am__cwd=`pwd` && cd $(srcdir) && \ rm -rf $$backupdir && mkdir $$backupdir && \ if ($(MAKEINFO) --version) >/dev/null 2>&1; then \ for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \ done; \ else :; fi && \ cd "$$am__cwd"; \ if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ -o $@ $<; \ then \ rc=0; \ cd $(srcdir); \ else \ rc=$$?; \ cd $(srcdir) && \ $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ fi; \ rm -rf $$backupdir; exit $$rc .texi.dvi: TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ $(TEXI2DVI) $< .texi.pdf: TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ $(TEXI2PDF) $< .texi.html: rm -rf $(@:.html=.htp) if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ -o $(@:.html=.htp) $<; \ then \ rm -rf $@; \ if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \ else \ if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \ exit 1; \ fi $(srcdir)/texi2html.info: texi2html.texi $(srcdir)/version.texi texi2html.dvi: texi2html.texi $(srcdir)/version.texi texi2html.pdf: texi2html.texi $(srcdir)/version.texi $(srcdir)/version.texi: @MAINTAINER_MODE_TRUE@ $(srcdir)/stamp-vti $(srcdir)/stamp-vti: texi2html.texi $(top_srcdir)/configure @(dir=.; test -f ./texi2html.texi || dir=$(srcdir); \ set `$(SHELL) $(srcdir)/mdate-sh $$dir/texi2html.texi`; \ echo "@set UPDATED $$1 $$2 $$3"; \ echo "@set UPDATED-MONTH $$2 $$3"; \ echo "@set EDITION $(VERSION)"; \ echo "@set VERSION $(VERSION)") > vti.tmp @cmp -s vti.tmp $(srcdir)/version.texi \ || (echo "Updating $(srcdir)/version.texi"; \ cp vti.tmp $(srcdir)/version.texi) -@rm -f vti.tmp @cp $(srcdir)/version.texi $@ mostlyclean-vti: -rm -f vti.tmp maintainer-clean-vti: @MAINTAINER_MODE_TRUE@ -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi .dvi.ps: TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ $(DVIPS) -o $@ $< uninstall-dvi-am: @$(NORMAL_UNINSTALL) @list='$(DVIS)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \ rm -f "$(DESTDIR)$(dvidir)/$$f"; \ done uninstall-html-am: @$(NORMAL_UNINSTALL) @list='$(HTMLS)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \ rm -rf "$(DESTDIR)$(htmldir)/$$f"; \ done uninstall-info-am: @$(PRE_UNINSTALL) @if test -d '$(DESTDIR)$(infodir)' && \ (install-info --version && \ install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \ install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ done; \ else :; fi @$(NORMAL_UNINSTALL) @list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \ (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \ echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \ rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \ else :; fi); \ done uninstall-pdf-am: @$(NORMAL_UNINSTALL) @list='$(PDFS)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \ rm -f "$(DESTDIR)$(pdfdir)/$$f"; \ done uninstall-ps-am: @$(NORMAL_UNINSTALL) @list='$(PSS)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \ rm -f "$(DESTDIR)$(psdir)/$$f"; \ done dist-info: $(INFO_DEPS) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; \ for base in $$list; do \ case $$base in \ $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ esac; \ if test -f $$base; then d=.; else d=$(srcdir); fi; \ base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \ for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ if test -f $$file; then \ relfile=`expr "$$file" : "$$d/\(.*\)"`; \ test -f $(distdir)/$$relfile || \ cp -p $$file $(distdir)/$$relfile; \ else :; fi; \ done; \ done mostlyclean-aminfo: -rm -rf texi2html.aux texi2html.cp texi2html.cps texi2html.fn texi2html.fns \ texi2html.ky texi2html.kys texi2html.log texi2html.op \ texi2html.ops texi2html.pg texi2html.pgs texi2html.tmp \ texi2html.toc texi2html.tp texi2html.tps texi2html.vr \ texi2html.vrs texi2html.dvi texi2html.pdf texi2html.ps \ texi2html.html maintainer-clean-aminfo: @list='$(INFO_DEPS)'; for i in $$list; do \ i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \ echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \ rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \ done install-man1: $(man1_MANS) $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ for i in $$l2; do \ case "$$i" in \ *.1*) list="$$list $$i" ;; \ esac; \ done; \ for i in $$list; do \ if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ else file=$$i; fi; \ ext=`echo $$i | sed -e 's/^.*\\.//'`; \ case "$$ext" in \ 1*) ;; \ *) ext='1' ;; \ esac; \ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ inst=`echo $$inst | sed -e 's/^.*\///'`; \ inst=`echo $$inst | sed '$(transform)'`.$$ext; \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \ done uninstall-man1: @$(NORMAL_UNINSTALL) @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ for i in $$l2; do \ case "$$i" in \ *.1*) list="$$list $$i" ;; \ esac; \ done; \ for i in $$list; do \ ext=`echo $$i | sed -e 's/^.*\\.//'`; \ case "$$ext" in \ 1*) ;; \ *) ext='1' ;; \ esac; \ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ inst=`echo $$inst | sed -e 's/^.*\///'`; \ inst=`echo $$inst | sed '$(transform)'`.$$ext; \ echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \ rm -f "$(DESTDIR)$(man1dir)/$$inst"; \ done install-texinfohtmlDATA: $(texinfohtml_DATA) @$(NORMAL_INSTALL) test -z "$(texinfohtmldir)" || $(MKDIR_P) "$(DESTDIR)$(texinfohtmldir)" @list='$(texinfohtml_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(texinfohtmlDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(texinfohtmldir)/$$f'"; \ $(texinfohtmlDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(texinfohtmldir)/$$f"; \ done uninstall-texinfohtmlDATA: @$(NORMAL_UNINSTALL) @list='$(texinfohtml_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(texinfohtmldir)/$$f'"; \ rm -f "$(DESTDIR)$(texinfohtmldir)/$$f"; \ done tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-info check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-local check: check-am all-am: Makefile $(INFO_DEPS) $(MANS) $(DATA) installdirs: for dir in "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(texinfohtmldir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: $(DVIS) html: html-am html-am: $(HTMLS) info: info-am info-am: $(INFO_DEPS) install-data-am: install-info-am install-man install-texinfohtmlDATA install-dvi: install-dvi-am install-dvi-am: $(DVIS) @$(NORMAL_INSTALL) test -z "$(dvidir)" || $(MKDIR_P) "$(DESTDIR)$(dvidir)" @list='$(DVIS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(dvidir)/$$f'"; \ $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(dvidir)/$$f"; \ done install-exec-am: install-html: install-html-am install-html-am: $(HTMLS) @$(NORMAL_INSTALL) test -z "$(htmldir)" || $(MKDIR_P) "$(DESTDIR)$(htmldir)" @list='$(HTMLS)'; for p in $$list; do \ if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ if test -d "$$d$$p"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \ $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \ $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f"; \ else \ echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(htmldir)/$$f'"; \ $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(htmldir)/$$f"; \ fi; \ done install-info: install-info-am install-info-am: $(INFO_DEPS) @$(NORMAL_INSTALL) test -z "$(infodir)" || $(MKDIR_P) "$(DESTDIR)$(infodir)" @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; \ for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ esac; \ if test -f $$file; then d=.; else d=$(srcdir); fi; \ file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \ for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ if test -f $$ifile; then \ relfile=`echo "$$ifile" | sed 's|^.*/||'`; \ echo " $(INSTALL_DATA) '$$ifile' '$(DESTDIR)$(infodir)/$$relfile'"; \ $(INSTALL_DATA) "$$ifile" "$(DESTDIR)$(infodir)/$$relfile"; \ else : ; fi; \ done; \ done @$(POST_INSTALL) @if (install-info --version && \ install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\ done; \ else : ; fi install-man: install-man1 install-pdf: install-pdf-am install-pdf-am: $(PDFS) @$(NORMAL_INSTALL) test -z "$(pdfdir)" || $(MKDIR_P) "$(DESTDIR)$(pdfdir)" @list='$(PDFS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(pdfdir)/$$f'"; \ $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/$$f"; \ done install-ps: install-ps-am install-ps-am: $(PSS) @$(NORMAL_INSTALL) test -z "$(psdir)" || $(MKDIR_P) "$(DESTDIR)$(psdir)" @list='$(PSS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(psdir)/$$f'"; \ $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(psdir)/$$f"; \ done installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-aminfo \ maintainer-clean-generic maintainer-clean-vti mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-aminfo mostlyclean-generic mostlyclean-vti pdf: pdf-am pdf-am: $(PDFS) ps: ps-am ps-am: $(PSS) uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \ uninstall-man uninstall-pdf-am uninstall-ps-am \ uninstall-texinfohtmlDATA uninstall-man: uninstall-man1 .MAKE: install-am install-strip .PHONY: all all-am check check-am check-local clean clean-generic \ dist-info distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-man1 install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ install-texinfohtmlDATA installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-aminfo \ maintainer-clean-generic maintainer-clean-vti mostlyclean \ mostlyclean-aminfo mostlyclean-generic mostlyclean-vti pdf \ pdf-am ps ps-am uninstall uninstall-am uninstall-dvi-am \ uninstall-html-am uninstall-info-am uninstall-man \ uninstall-man1 uninstall-pdf-am uninstall-ps-am \ uninstall-texinfohtmlDATA #texi2html.html: texi2html.texi $(srcdir)/version.texi \ # $(TEXI2HTML) texi2html.html: texi2html.texi $(srcdir)/version.texi \ $(top_srcdir)/texi2html.pl $(top_srcdir)/texi2html.init \ $(top_srcdir)/MySimple.pm $(top_srcdir)/T2h_i18n.pm TEXINPUTS=$(srcdir)::$$TEXINPUTS T2H_HOME=$(top_srcdir) \ $(SHELL) $(top_srcdir)/missing-texi2html --run \ $(PERL) -x $(top_srcdir)/texi2html.pl -V $< $(TEXI2HTML): @(cd $(top_builddir) && make texi2html) texi2html.1: texi2html.1.in ../config.status @echo Generating $@... @sed -e "s/[@]PACKAGE_VERSION[@]/$(PACKAGE_VERSION)/" \ -e "s/[@]PACKAGE_DATE[@]/$(PACKAGE_DATE)/" \ -e "s#[@]sysconfdir[@]#$(sysconfdir)#" \ -e "s#[@]pkgdatadir[@]#$(pkgdatadir)#" $< >texi2html.tmp @mv texi2html.tmp $@ txt: texi2html.txt check-local: $(TEXI2HTML) TEXINPUTS=$(srcdir)::$$TEXINPUTS \ $(TEXI2HTML) -V $(srcdir)/texi2html.texi # texinfo based targets automake neglects to include .texinfo.txt: $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ --no-headers -o $@ `test -f '$<' || echo '$(srcdir)/'`$< .txi.txt: $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ --no-headers -o $@ `test -f '$<' || echo '$(srcdir)/'`$< .texi.txt: $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ --no-headers -o $@ `test -f '$<' || echo '$(srcdir)/'`$< # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: texi2html-1.82/doc/texi2html.info0000644000175000017500000066471111264347115020615 0ustar flichtenheldflichtenheldThis is texi2html.info, produced by makeinfo version 4.11 from texi2html.texi. Portions of `texi2html' Copyright (C) 1999, 2000 Lionel Cons Copyright (C) 1999, 2000 Karl Berry Copyright (C) 1999, 2000 Olaf Bachmann Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Patrice Dumas Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 Derek Price Copyright (C) many others. Portions of this manual Copyright (C) 1999, 2000 Karl Heinz Marbaise (manual) Copyright (C) 2003, 2007 Derek Price (manual) Copyright (C) 2003, 2004, 2005, 2006, 2007 Patrice Dumas (manual) Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Free Software Foundation. INFO-DIR-SECTION Texinfo documentation system START-INFO-DIR-ENTRY * Texi2HTML: (texi2html). Texinfo to HTML Converter. END-INFO-DIR-ENTRY This file, last updated 3 November 2008, documents the `texi2html' script which converts Texinfo (http://www.texinfo.org) into HTML (http://w3c.org). This edition is for `texi2html' version 1.82. Portions of `texi2html' Copyright (C) 1999, 2000 Lionel Cons Copyright (C) 1999, 2000 Karl Berry Copyright (C) 1999, 2000 Olaf Bachmann Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Patrice Dumas Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 Derek Price Copyright (C) many others. Portions of this manual Copyright (C) 1999, 2000 Karl Heinz Marbaise (manual) Copyright (C) 2003, 2007 Derek Price (manual) Copyright (C) 2003, 2004, 2005, 2006, 2007 Patrice Dumas (manual) Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Free Software Foundation.  File: texi2html.info, Node: Top, Next: Overview, Up: (dir) Texi2HTML ********* This manual, last updated 3 November 2008, describes version 1.82 of the `texi2html' Perl script which converts Texinfo (*note Texinfo: (Texinfo)Top.) into HTML. Please send bug reports concerning this manual to the Texi2HTML developement list . Please state the exact version of the manual which contains the bug, as given above. Portions of `texi2html' Copyright (C) 1999, 2000 Lionel Cons Copyright (C) 1999, 2000 Karl Berry Copyright (C) 1999, 2000 Olaf Bachmann Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Patrice Dumas Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 Derek Price Copyright (C) many others. Portions of this manual Copyright (C) 1999, 2000 Karl Heinz Marbaise (manual) Copyright (C) 2003, 2007 Derek Price (manual) Copyright (C) 2003, 2004, 2005, 2006, 2007 Patrice Dumas (manual) Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Free Software Foundation. *This manual is currently under construction and of course incomplete. ;-)* * Menu: * Overview:: * Obtaining texi2html:: Obtaining a copy of the `texi2html' source code distribution * Installation:: Installing `texi2html' * Invoking texi2html:: Description of the command line options * Initialization files:: What kind of variables and subroutines appear in init files and how they are called * Changing the page layout:: Fine tuning of the page layout * Customizing HTML:: Fine tuning of the HTML elements associated with the texinfo constructs * Internationalization:: Help translating! * Incompatibilities:: Incompatibilities with previous versions * Specificities:: The minor differences with regard with texinfo valid for makeinfo or texi2dvi * Indexop:: Command Line Option Index * Indexvr:: Variable Index * Indexcp:: Concept Index  File: texi2html.info, Node: Overview, Next: Obtaining texi2html, Prev: Top, Up: Top 1 Overview ********** Texinfo (http://www.texinfo.org) is the official documentation format of the GNU (http://www.gnu.org) project. It uses a single source file to produce both online information and printed output. It is often desirable to have a way to produce HTML from Texinfo sources, as GNU-Info files are produced. It is much simpler to run a converter than it is to rewrite all the documentation in HTML, especially considering that there is so much Texinfo documentation in the world. Some time ago `makeinfo' wasn't able to produce HTML output format, but people still wanted documentation in HTML. This was the birthing hour for `texi2html'. The basic purpose of `texi2html' is to convert Texinfo documents into HTML. Since then, HTML support in `makeinfo' has improved, but `texi2html' is still stronger in many areas, including the degree to which it allows customization. With `texi2html', some important aspects of the resulting HTML files may be specified via command line options, and configuration files provide an even finer degree of control over the final output, allowing most every aspect of the final output not specified in the Texinfo input file to be specified. Configuration files are written in `perl', like the main program, and anything which may be specified on the command line may also be specified within a configuration file. For an example of the kind of pages `texi2html' is capable of producing, have a look at the following sites: the Singular Manual (http://www.singular.uni-kl.de/Manual/html/), the Cederqvist (CVS Manual) (http://ccvs.cvshome.org/docs/manual). * Menu: * whytexi2html:: Why `texi2html' and not `makeinfo'?.  File: texi2html.info, Node: whytexi2html, Up: Overview 1.1 Why `texi2html' and not `makeinfo'? ======================================= You would like to produce HTML files from your existing Texinfo files? There are two programs you can use to do this. The first is `makeinfo' (*note Generating HTML: (texinfo)Generating HTML.). The second is `texi2html'. The design goal of `makeinfo''s HTML output was to produce readable HTML output. It is now possible to use CSS for HTML customization. Another possibility is to use intermediate formats, like docbook or `makeinfo' XML and XSL stylesheets to customize the resulting document. Still the output produced by `makeinfo' isn't customizable. The current development of `texi2html' tries to provide for producing the more interesting and sophisticated HTML pages that today's Internet users have come to expect. The goal behind `texi2html' is to generate attractive HTML by default but also to allow users considerable freedom to affect the final style and design of the output HTML pages. This is achieved via command line options and flexible configuration files. In contrast to the HTML produced by `makeinfo --html' (the `makeinfo' program is part of the Texinfo distribution), the `texi2html' program, among other differences, allows for the customization of the entire page layout, including headers, footers, style sheets, etc., allows for customization of the low level HTML formatting, provides for splitting documents at various levels, and provides for using the `latex2html' program to convert `@tex' sections of the Texinfo source. The focus on HTML is still present but with the help of the customization files it is now possible to use `texi2html' to produce other formats as well. `texi2html' may for example be turned into a texinfo to roff translator with the help of a customization file provided with the distribution. `texi2html' should reasonably convert all Texinfo 4.8 constructs. If you find it does not, please send a bug report to the email list.  File: texi2html.info, Node: Obtaining texi2html, Next: Installation, Prev: Overview, Up: Top 2 Obtaining `texi2html' *********************** The latest version of the source code for `texi2html' should be available from www.nongnu.org/texi2html/ (http://www.nongnu.org/texi2html/). `texi2html' is also available with teTeX (http://www.tug.org/teTeX/) and TeX Live (http://www.tug.org/texlive/).  File: texi2html.info, Node: Installation, Next: Invoking texi2html, Prev: Obtaining texi2html, Up: Top 3 Installation of `texi2html' ***************************** * Menu: * Requirements:: * Configuring and rebuilding:: * Installing:: * Advanced build features::  File: texi2html.info, Node: Requirements, Next: Configuring and rebuilding, Up: Installation 3.1 Requirements ================ To install `texi2html', you must first obtain a copy of the source distribution. *Note Obtaining texi2html::. `texi2html' requires `perl' version 5.00405 or above to be run. An older perl 5 version with `File::Spec' is also likely to work. The current version has been lightly tested on a wide range of perl, but has not been tested extensively on versions of `perl' below 5.6. To play nice with encodings you also need the `Encode' and `Unicode::Normalize' modules. To rebuild the script perl isn't required in most cases. For more information about advanced build features, see *note Advanced build features::.  File: texi2html.info, Node: Configuring and rebuilding, Next: Installing, Prev: Requirements, Up: Installation 3.2 Configuring the source and rebuilding ========================================= `texi2html' is a standard Automake-based distribution. If you have a source version, you should run `./configure' to configure the sources and `make' to build the script. `./configure' accepts options to select the installation directory for the `texi2html' file, the default directories `texi2html' will use to look for configuration files, and other details. Run `./configure --help' for more information. Running `./configure' creates `texi2html_configured.pl' from `texi2html.pl', and also builds the `make' configuration files (`Makefile's). Running `make' combines five files into the final `texi2html' program file: * `texi2html_configured.pl' contains the base program, * `MySimple.pm' handles the command line options, * `texi2html.init' is the default configuration file, and * `T2h_i18n.pm' is used for internationalization. * `translations.pl' contains the translations of the strings used in documents. Running `make' also rebuilds the documentation if needed.  File: texi2html.info, Node: Installing, Next: Advanced build features, Prev: Configuring and rebuilding, Up: Installation 3.3 Installing ============== `make install' performs the installation to the locations specified to the `./configure' script. This usually involves placing the actual `texi2html' file someplace in your path, such as `/usr/local/bin' or `/usr/bin'. Installing `texi2html' in your path should be sufficient to run it. To use default initialization files, or a configuration file for LaTeX2HTML when using `latex2html' to convert `@tex' sections (*note Expanding TeX regions::), install them in the package data directory specified to configure. This is `/usr/local/share/texi2html/' by default, but depends on the value of the `--pkgdatadir=DIR' option passed to the `./configure' script. Files used for strings customization and internationalization are also searched for in the `i18n' directory of this directory. *Note Using init files:: for more.  File: texi2html.info, Node: Advanced build features, Prev: Installing, Up: Installation 3.4 Advanced build features =========================== This section documents features that are unlikely to be used but deserve a bit of documentation. A `./configure' switch, `--with-unicode' allows to choose whether the unicode code should be used or not. The default is to detect it with a test. This code requires `Encode' and `Unicode::Normalize' modules. A similar `./configure' switch, `--with-unidecode' allows to choose whether the perl module `Text::Unidecode' should be used or not. The default is to detect it with a test. This code requires the `Text::Unidecode' module. `perl' isn't needed to build the script. the script is build by `./configure' and a shell script launched by `make' which is a simple wrapper around a `sed' one-liner. The `perl' command can be specified with the environment variable `$PERL', otherwise it is detected. `perl' is required to rebuild the documentation as the HTML documentation is rebuild with `texi2html' itself. The translations are managed by a script `manage_i18n.pl', created by `./configure'. `manage_i18n.pl' requires `Data::Dumper' to function normally. If this module isn't there `./configure' detects it and `manage_i18n.pl' doesn't really rebuild the translations, but only copy files. It is possible to use the `./configure' switch `--enable-translations' to override the `./configure' detection. For more about translations, see *note Internationalization::. It is possible to build from outside of the source directory, for example the following should work: tar xzvf texi2html-1.82.tar.gz mkdir texi2html_build cd texi2html_build ../texi2html-1.82/configure && make All these features enables to build `texi2html' on a platform in order to run it on another platform, a kind of cross-building. The `./configure' switches and `$PERL' allows to specify everything needed for the build of the `texi2html' script.  File: texi2html.info, Node: Invoking texi2html, Next: Initialization files, Prev: Installation, Up: Top 4 Invoking `texi2html' ********************** To produce an HTML manual, run `texi2html' with a Texinfo file as an argument. For example, this manual is created with: $ texi2html texi2html.texi `texi2html' can accept more than one manual on the command line, and will proceed with each of the manuals in turn. The behaviour of `texi2html' may be changed with command line options. These command line options are always associated with corresponding `perl' variables which may appear in init files, and these variables are presented in this chapter each time a switch is described. Boolean command line switches always have a corresponding negated switch, obtained by prepending `no' or `no-' to the switch name. For example `--nomenu' does the reverse of `--menu'. When more than one manual is processed, the command line apply to all the manuals, except for command-line switches setting the output file names. * Menu: * General options:: * Splitting output:: The HTML output may be split at different levels * Output files:: * Expansion:: * Texinfo related options:: * Page layout options:: Customizing page layout * Style options:: Customizing the HTML and text style * Expanding TeX regions:: * Using init files:: Specifying initialization files for fine tuning  File: texi2html.info, Node: General options, Next: Splitting output, Up: Invoking texi2html 4.1 General options =================== Miscellaneous general options: `--error-limit=NUM' Quit after NUM errors (default 1000), (variable `$ERROR_LIMIT'). `--help' Display a short help and exit. `--verbose' Be verbose. `--version' Display version information and exit.  File: texi2html.info, Node: Splitting output, Next: Output files, Prev: General options, Up: Invoking texi2html 4.2 Specifying where to split the generated document ==================================================== The HTML manual resulting from the processing of the Texinfo source may be split into files at different levels. This is specified with the option `--split' which takes an argument, namely the level of splitting (variable: `$SPLIT'). This level may be: `chapter' The document is split at `@chapter', `@appendix', or `@unnumbered'. `section' The document is split at the same places as it is using the `chapter' argument, and also at `@section', `@appendixsec' or `@unnumberedsec'. `node' The document is split at every sectioning command. It is not necessarily split at each node, if the `@node' structure doesn't correspond with the sectioning command structure (see below). `none' The document isn't split. This is the default. There are two kinds of commands which may be used to define sectioning elements in Texinfo: `@node' and the structuring commands (`@top', `@section', `@appendixsubsec', and so on). A node just preceding a structuring command is considered to be part of the same sectioning element as that command. If the `@node Top' isn't associated with a structuring command it also defines a sectioning element. By default, nodes which aren't associated with a structuring command are not considered to be sectioning commands. They are always considered to be part of a sectioning element defined by a structuring command. It is possible to change this behaviour via the `--use-nodes' option (variable `$USE_NODES'). In this case, nodes not associated with structuring commands are also considered to be sectioning commands defining a sectioning element. This default behaviour mimics `texi2dvi' behaviour, which ignores `@node' commands for the purprose of sectioning, while the second looks like `makeinfo' behaviour (*note Two Paths: (texinfo)Two Paths.). As an illustration, the following table shows how a sample Texinfo document is divided into sectioning elements when `--use-nodes' is used and not: Texinfo code default case with `--use-nodes' @node node1 first element: first element: @chapter node 1 node1 text @node node1 @node node1 @chapter node 1 @chapter node 1 @node node2 node1 text node1 text node2 text second @node node2 element: @node node3 node2 text node3 text second @node node2 @chapter node 3 element: node2 text chapter text third @node node3 element: node3 text @chapter node 3 @node node3 chapter text node3 text @chapter node 3 chapter text  File: texi2html.info, Node: Output files, Next: Expansion, Prev: Splitting output, Up: Invoking texi2html 4.3 Setting output file and directory names =========================================== The manual name is constructed by stripping the `.texi', `.txi', `.texinfo', or `.txinfo' extension from the Texinfo file name. By default, `texi2html' generates the manual file in the current directory if the manual isn't split. A `.html' file extension is appended to the manual name. If the manual is split the files are put in a directory named after the manual name. The file name is constructed using the manual name as basename. An underscore followed by a number is appended to the basename for each files corresponding with sectioning elements, with the exception of the top element. For the top element there is nothing appended. The files containing special elements pages have an underscore and a 3 letter code corresponding to their content (`toc' for table of contents, `abt' for about, `ovr' for overview, `fot' for footnotes if they are separated) appended. Lastly, an `.html' file extension is appended. Thus, if the texinfo file `afile.texi' is processed and split at chapters into 3 files, the generated files (in directory `afile') will be: afile.html --> `@node Top' or `@top' section afile_1.html --> Chapter 1 afile_2.html --> Chapter 2 afile_toc.html --> Table of Contents afile_abt.html --> About Page This default behavior may be modified by several command line options. If the output isn't split, the prefix file name may be overrided by the `--output' command line option (variable `$OUT'). If the output is split, and `--output' is set, the files are placed in the directory specified by the argument to the option. The basename may be overridden with `--prefix' (variable `$PREFIX'). If `--short-ext' is given, `.htm' is appended instead of `.html' in the final step (variable `$SHORTEXTN'). The `--top-file' option overrides the top element file name (variable `$TOP_FILE'). This can be used to name the top element file `index.html'. Similarly, `--toc-file' changes the name of the table of contents file (variable `$TOC_FILE'). Reusing the example above, but this time calling `texi2html' like so: $ texi2html -split chapter -prefix manual -short-ext -top-file index.htm -toc-file contents.htm afile.texi we get, in `manual': index.htm --> `@node Top' or `@top' section manual_1.htm --> Chapter 1 manual_2.htm --> Chapter 2 contents.htm --> Table of Contents manual_abt.htm --> About Page The file names generated by `texi2html' differ from those generated by `makeinfo'. `makeinfo' uses the `@setfilename' to determine the manual name(1) (*note Output files-Footnote-1::). Also `makeinfo' uses the node name to construct the file names while splitting at nodes. It is possible to get the same behaviour out of `texi2html' by specifying the `--node-files' option (variable `$NODE_FILES'). The default is false for this option. If the output isn't split at nodes, `texi2html' will still output files named after the nodes, without real content but redirecting to the right file. This trick enables the generated HTML manual to be a target for the cross-references of other manuals generated by `makeinfo' or `texi2html'. In case the files are named after the node names, another command-line option, `--transliterate-file-names' can be set to trigger ASCII transliteration of node file names (variable `$TRANSLITERATE_NODE'). Transliteration is set in the default case.  File: texi2html.info, Node: Output files-Footnotes, Up: Output files (1) This behaviour is triggered only by a variable set in an init file, `$USE_SETFILENAME' (*note Using init files::).  File: texi2html.info, Node: Expansion, Next: Texinfo related options, Prev: Output files, Up: Invoking texi2html 4.4 Specifying which regions get expanded ========================================= The default for `texi2html' is to expand the `@ifhtml', `@html', and `@menu' regions, all the `@ifnot' regions except `@ifnothtml', and no other `@if' regions. It is possible to expand other regions by setting `--if', where `' is replaced by the literal name of the region (for example, `--iftex'). Symetrically, if `--no-if' is specified, the `' region is ignored. The configuration file array, `@EXPAND', holds the names of regions which should be expanded. The only region name present in `@EXPAND' in the default case is `html'. If `--nomenu' is set, the `@menu' sections are not expanded (variable `$SHOW_MENU'). The default is to expand `@menu' sections.  File: texi2html.info, Node: Texinfo related options, Next: Page layout options, Prev: Expansion, Up: Invoking texi2html 4.5 Command line options related to Texinfo language features ============================================================= Miscalleneous Texinfo related things may be specified via command line options. `--lang=LANG' Sets the document language similar to the Texinfo directive, `@documentlanguage LANG' (variable `$LANG'). The default is `en', that is, use the english language strings. `-DVAR' Sets VAR. Equivalent to, `@set VAR 1', in Texinfo. `-UVAR' Clears VAR. Equivalent to, `@clear VAR', in Texinfo. `-PDIR' Prepend DIR to the list of directories to search for `@include' files (the associated array is `@PREPEND_DIRS', empty in the default case). `-IDIR' Append DIR to the list of directories to search for `@include' files (the associated array is `@INCLUDE_DIRS', empty in the default case). The include files are always searched for in the current directory.  File: texi2html.info, Node: Page layout options, Next: Style options, Prev: Texinfo related options, Up: Invoking texi2html 4.6 Page layout related command line options ============================================ If the `--frames' option is specified, HTML frames are used. A file describing the frame layout is generated, and the document page is associated with a frame where the short table of content appears (variable `$FRAMES'). The default is not to use frames. It is also possible to suppress the section navigation panel with `--no-headers' (variable `$SECTION_NAVIGATION', the default is to output all the navigation panels), and to specify whether footnotes should appear at the foot of the same page which contains the reference to the note with `--footnote-style' set to `end' or on a separate page with `--footnote-style' set to `separate' (variable `$SEPARATED_FOOTNOTES' set to 0 or 1). The default is to have separated footnotes.  File: texi2html.info, Node: Style options, Next: Expanding TeX regions, Prev: Page layout options, Up: Invoking texi2html 4.7 Customizing the HTML and text style ======================================= Miscalleneous style changes may be achieved with command line options. `--doctype=DTD' `--frameset-doctype=DTD' You can specify the document DTD by setting these options. `--frameset-doctype' applies to the file describing the frames when frames are used (corresponding variables are `$DOCTYPE' and `$FRAMESET_DOCTYPE'). The default for the document doctype is: And for the frameset doctype: `--iso' If this option is set, ISO8859 entities are used for some special symbols, like Copyright (C) (variable `$USE_ISO'). It is the default. `--css-include=FILE' This command line switch provides for the inclusion of an external Cascading Style Sheet (CSS) file. More than one file may be specified, and `-' stands for the standard input (array `@CSS_FILES'). The option use is the same than for `makeinfo' and is described extensively in *note HTML CSS: (texinfo)HTML CSS. Briefly, the CSS `@import' lines from the external file CSS file are pasted before the `texi2html' CSS rules, and the external file CSS rules are pasted after the `texi2html' CSS rules. `--css-ref=URL' This command line switch provides for the inclusion of an reference to a Cascading Style Sheet (CSS) URL. More than one URL may be specified (array `@CSS_REFS'). `--html-xref-prefix=PATH' This option sets the base directory for external HTML texinfo manuals (variable `$EXTERNAL_DIR'). Defaults to `../'. `--def-table' If this option is set, HTML tables are used to format definition commands, rather than HTML definition tables (variable `$DEF_TABLE'). Default is false. `--short-ref' If this option is set, cross-references are given without section numbers (variable `$SHORT_REF'). Default is false. `--number-sections' If this option is set, sections are numbered (variable `$NUMBER_SECTIONS'). This is the default. `--toc-links' If this option is set, links from headings to TOC entries are created (variable `$TOC_LINKS'). Default is false.  File: texi2html.info, Node: Expanding TeX regions, Next: Using init files, Prev: Style options, Up: Invoking texi2html 4.8 Expanding `@tex' and `@math' regions using LaTeX2HTML ========================================================= It is possible to use LaTeX2HTML (http://www.latex2html.org/) to process `@tex' regions and `@math{}' commands. This is an attractive way to display mathematical constructs in the HTML manual. The `--l2h' option activates this feature (variable $L2H). It is usually desirable to expand `@tex' sections when this option is specified (*note Expansion::). The default is not to use this feature. The `--l2h-l2h=PROGRAM' option enables changing the name/location of the LaTeX2HTML program processing TeX regions (variable `$L2H_L2H'). The default is `latex2html'. `--l2h-tmp' sets the directory used for temporary files, this name shouldn't contain a dot `.' (variable is `$L2H_TMP'). Defaults to the current dir. The file specified by `--l2h-file' is used as LaTeX2HTML init file. It is searched at the same places than init files (*note Using init files::), and the default is `l2h.init'.  File: texi2html.info, Node: Using init files, Prev: Expanding TeX regions, Up: Invoking texi2html 4.9 Use initialization files for fine tuning ============================================ Initialization variables are read first from `/usr/local/share/texi2html/Config' (the exact location being changeable with the `--pkgdatadir=dir' option of the `configure' script, see *note Installation::), `/usr/local/etc/texi2html/Config' (the exact location being changeable with the `--sysconfdir=dir' option of the `configure' script, see *note Installation::), from `./Config' then from `$HOME/.texi2html/Config'. Any command-line option can override the corresponding option set in init file, and the option `--init-file' specifies an init file to be loaded, with later settings overriding earlier ones. The init files specified with `--init-file' are searched first in the current directory, then in the `$HOME/.texi2html/' directory, in the `/usr/local/etc/texi2html/' directory and lastly in the `/usr/local/share/texi2html/' directory. A file is also included based on the language selected, by `$LANG', `--document-language' or `@documentlanguage'. If no language was selected `en' is considered to be the language. All the files with name the language name in `/usr/local/share/texi2html/i18n/', `/usr/local/etc/texi2html/i18n/', `$HOME/.texi2html/i18n/' and then `./i18n/' are included. The default initialization options are defined in the `texi2html.init' file contained in the `texi2html' distribution (which gets included near the beginning of the `texi2html' script that gets installed). To customize `texi2html' it is best if you copy the appropriate sections from the `texi2html.init' contents into an appropriate local initialization file, make the necessary changes there, and then have `texi2html' read this initialization file by one of the means described above. Some init files are provided with `texi2html', for example `book.init' which produces an output more in line with what could be in a book, or `chm.init' outputs files that can be used to produce a CHM file.  File: texi2html.info, Node: Initialization files, Next: Changing the page layout, Prev: Invoking texi2html, Up: Top 5 Overview of initialization files content and loading ****************************************************** The initialization files are `perl' files, read as explained in *note Using init files::. You don't need to know much of `perl' to do some simple changes in variable values, however, to be able to really take advantage of all the features of the initialization file, a good knowledge of `perl' is required. In initialization file two kind of variables appear. These are normal variables (including arrays and hashes) and references on functions. The later permits the dynamic redefinition of functions used to produce the HTML manual. You should be able to change the value of some normal variables without a deep knowledge of `perl', by looking at the existing examples. The possible mistakes in that case could be omitted `;', and bad quoting. Initialization file are loaded from the main program by the mean of a `require', while in the `Texi2HTML::Config' namespace. This means that the namespace of the main program and the namespace of initialization files are distinct, which ensures that no name clash should happen. The variables are declared with `use vars', such that it should be possible to use the `use strict' pragma in the initialization file code. To avoid messing with the variables in the `main' namespace all the global variables which could be of use in the init files are in the `Texi2HTML' namespace. Notice that the functions of the main program are still in the `main' namespace. Since `texi2html' can proceed more than one file on the command line, you should make sure that you initialize the variables that are used during a manual formatting. The handlers explained later can be used for that (*note Bypassing normal formatting::). * Menu: * Encodings:: Setting the encodings. * Redefining functions:: Function redefinition is achieved with redefinition of references on functions. * Function prototypes:: Conventions used in that manual for function reference prototypes display.  File: texi2html.info, Node: Encodings, Next: Redefining functions, Up: Initialization files 5.1 Setting the encodings ========================= There are four encodings relevant for `texi2html', they are associated with corresponding configuration variables. If these variables are defined they determine a corresponding value in `%Texi2HTML::THISDOC' which is otherwise autodetected: 1. The variable `$DOCUMENT_ENCODING' corresponds with the document encoding. If defined, this variable sets `$Texi2HTML::THISDOC{'DOCUMENT_ENCODING'}'. If not defined, the encoding appearing in `@documentencoding' will be used to set `$Texi2HTML::THISDOC{'DOCUMENT_ENCODING'}'. The `@documentencoding' value appears in `$Texi2HTML::THISDOC{'documentencoding'}'. 2. The texinfo files encoding. If `$IN_ENCODING' is set, this sets `$Texi2HTML::THISDOC{'IN_ENCODING'}'. Otherwise, when `$Texi2HTML::THISDOC{'DOCUMENT_ENCODING'}' is set, `$Texi2HTML::THISDOC{'IN_ENCODING'}' is also set if the encoding is supported by perl. 3. The out files encoding. It is associated with the variable `$OUT_ENCODING'. If defined, `$Texi2HTML::THISDOC{'OUT_ENCODING'}' is set accordingly. If not defined, the value of `$Texi2HTML::THISDOC{'ENCODING_NAME'}' or `$Texi2HTML::THISDOC{'IN_ENCODING'}' is used if one of these variables is set. 4. The encoding advertized in out files, associated with the variable `$ENCODING_NAME'. It sets `$Texi2HTML::THISDOC{'ENCODING_NAME'}' if defined. If unset the value of this variable is based on the other ENCODING values, and if they are all undefined, the variable `$DEFAULT_ENCODING' is used. The values for the encoding related variables are set in the default `init_out' function reference (*note Output initialization::). In general the `$DOCUMENT_ENCODING' and `$IN_ENCODING' are set to the right values. `$OUT_ENCODING' is also rightly set according to `$ENCODING_NAME'. To force a given encoding for the output, the `$ENCODING_NAME' value may be set. The current default output encoding is UTF-8.  File: texi2html.info, Node: Redefining functions, Next: Function prototypes, Prev: Encodings, Up: Initialization files 5.2 Redefining functions in initialization files ================================================ To redefine a function you must replace the corresponding funtion reference with a reference on your function. Thus you should write your function, give it a name you are certain it is unique in the `Texi2HTML::Config' namespace, and override the value of the function reference with your own function reference. When another function from the main program (or from another functions of an initialization file) calls the reference, your function will be used. For example the function reference corresponding with the function called when doing an anchor is called `$anchor'. Thus if you want to override the corresponding function you could write: # override the function reference $anchor = \&my_own_function; # the function reference now refers to sub my_own_function { # process arguments and return an html anchor }  File: texi2html.info, Node: Function prototypes, Prev: Redefining functions, Up: Initialization files 5.3 Conventions used for function prototypes ============================================ As the functions are defined by a reference name, we will always use the reference name in function prototypes. For the function arguments we will use `\@array' for a reference on an array and similarly `\%hash' for a reference on a hash. Thus, the prototype for the function associated with the function reference `$formatting_function' will be: -- Function Reference: $text formatting_function $arg1 \@arg2 `formatting_function' takes as first argument $ARG2, as second argument a reference on an array \@ARG2 and returns the formatted text $TEXT. To redefined the corresponding function, you should write: $formatting_function = \&my_formatting_function sub my_formatting_function($ $) { my $arg1 = shift; my $arg2 = shift; # prepare $formatted_text ..... return $formatted_text }  File: texi2html.info, Node: Changing the page layout, Next: Customizing HTML, Prev: Initialization files, Up: Top 6 Fine tuning of the page layout ******************************** Some features of the page layout might be specified with command line options, the corresponding variables are described in *note Page layout options::. Fine tuning of the page layout may be achieved with redefinition of other variables and function references in the initialization files. * Menu: * The different pages:: The different categories of pages. * The page layout:: The elements of a page. * Navigation panel:: How to change the navigation panel. * Program variables:: The available main program variables and some usefull functions from the main program. * Output initialization:: Setting variables before the document production but after the texinfo parsing. * Output finalization:: Cleaning after document generation. * css:: Customizing css lines. * Customizing header:: * Customizing section:: * Customizing footer:: * Special pages:: Customizing table of contents, top, about page. * File and target names:: Customizing the file and target names. * External index files:: Putting index entries in external files.  File: texi2html.info, Node: The different pages, Next: The page layout, Up: Changing the page layout 6.1 The different categories of pages and sectioning elements ============================================================= The following sectioning elements can be associated with pages: _Normal elements_ These are normal sections or nodes. Their association with pages is determined by the splitting of the document. *Note Splitting output::. _Top element_ The top element is the higher element in the document structure. If there is a `@top' section it is the element associated with that section. Otherwise it is the element associated with the `@node Top'. If there is no `@node Top' the first element is the top element. The top element is formatted differently than a normal element if there is a `@top' section or the `@node Top' isn't associated with a sectioning command. _Misc elements_ These elements are associated with pages if the document is split. There are four misc elements: 1. Table of contents 2. Short table of contents, also called Overview 3. Footnotes page 4. About page The _About page_ shouldn't be present for documents consisting in only one sectioning element, or for documents unsplit and without navigation information. The _Footnote page_ should only be present if the footnotes appear on a separated page (*note Page layout options::), however a footnote element is present if the document isn't split. The _Table of contents_ should only be formatted if `@contents' is present in the document. Similarly the _Overview_ should only appear if `@shortcontents' or `@summarycontents' is present. The Table of contents and the Overview may also be directly included within the document, not as separate pages (*note Contents and Overview text::).  File: texi2html.info, Node: The page layout, Next: Navigation panel, Prev: The different pages, Up: Changing the page layout 6.2 Page layout and navigation panel overview ============================================= A page is broken up in three parts. A page header, the sections and a page footer. A common element in the page layout is a navigation panel with icons or text linking to other sections or pages. Another common element is a rule, separating sections or footer. The navigation panel and the rules may be part of the sections or part of headers or footers. You may use the variables `$SMALL_RULE', `$DEFAULT_RULE', `$MIDDLE_RULE' and `$BIG_RULE' for rules of different sizes. The defaults are $SMALL_RULE = '
    '; $DEFAULT_RULE = '
    '; $MIDDLE_RULE = '
    '; $BIG_RULE = '
    '; In the header some important meta data may be defined, like the title or style information, and textual informations may be present in comments. All this doesn't appear directly in the displayed HTML, though. The page layout is mainly controlled by functions, the precise functions called depending on the document splitting. The navigation panel, however, can be customized with variables. Element labels -------------- There are 19 items associated with elements. Each of these is associated with a name and a reference to the element they represent, when such an element exists. The element is either a global element or an element relative to the current element. The relative elements are found with respect with the document structure defined by the section structuring commands (`@chapter', `@unnumbered'...) or by the nodes (in that case the node directions are specified on node line or in menu organization). These items are called "element labels". They may be associated with a button (*note Button specifications::), and used in the formatting functions (*note Program variables::). Here is the list: _` '_ An empty button _Top_ Top element. The associated name is `$TOP_HEADING' if that variable is defined. This variable is not set by default. _Contents_ Table of contents _About_ About (help) page _Overview_ Overview, short table of contents _First_ First element in reading order _Last_ Last element in reading order _Index_ The first chapter with `@printindex'. The associated name is `$INDEX_CHAPTER', if the variable is set. This variable is not set by default. _This_ The current element _Back_ Preceding element in reading order _FastBack_ Beginning of this chapter or previous chapter if the element is a chapter _Prev_ Previous section on the same level _NodePrev_ Previous node _Forward_ Next element in reading order _FastForward_ Next chapter _Next_ Next section on the same level _NodeNext_ Next node _Following_ Next node in node reading order _Up_ Up section _NodeUp_ Up node _FileNext_ Forward element first in the next page (or file) _FilePrev_ Backward element first in the previous page (or file)  File: texi2html.info, Node: Navigation panel, Next: Program variables, Prev: The page layout, Up: Changing the page layout 6.3 Customization of the navigation panels buttons ================================================== A lot of customization of the navigation panel may be achieved without redefining functions, with variables redefinition. In case it isn't enough, it is also possible to redefine the function doing the navigation panel formatting. * Menu: * General purpose variables:: Variables controlling the navigation panel at a global level * Button specifications:: * Panel formatting function::  File: texi2html.info, Node: General purpose variables, Next: Button specifications, Up: Navigation panel 6.3.1 Controlling the navigation panel panel at a high level ------------------------------------------------------------ The global formatting of the navigation panels may be changed with the following variables: `$VERTICAL_HEAD_NAVIGATION' A vertical navigation panel will be used for the header navigation panel if this variable is true. `$ICONS' Icons are used instead of textual buttons if this variable is true. `$SECTION_NAVIGATION' If this variable is false there is no section navigation, no navigation panels for the elements within the pages, only at the beginning and the end of the page (*note Page layout options::).  File: texi2html.info, Node: Button specifications, Next: Panel formatting function, Prev: General purpose variables, Up: Navigation panel 6.3.2 Specifying the buttons formatting --------------------------------------- Several arrays and hashes enable a precise control on the buttons and their display. The following arrays determine the buttons present in navigation panels: `@SECTION_BUTTONS' This array is used for the navigation panel buttons present at the begining of sectioning elements. If split at node or section they are also used at the page footer, and in the case of section navigation at the page header. `@SECTION_FOOTER_BUTTONS' `@NODE_FOOTER_BUTTONS' This array is used for the navigation panel buttons present at the footer of pages when split at node or at section. If `$WORDS_IN_PAGE' is set and the output is split at nodes, these buttons are only present if there are more than `$WORDS_IN_PAGE' words in the sectioning element text. This counting is very rough and include punctuation marks, html elements, numbers. The default is to include the buttons after 300 words. `@CHAPTER_BUTTONS' This array is used for the buttons appearing at the page footer if split at chapter, and at the page header if split at chapter and there is no section navigation. `@MISC_BUTTONS' These buttons appear at the beginning of special and sections and at the end of these section pages if the output is split. `@LINKS_BUTTONS' These are used for `' elements if they are output in the headers. The array specify the buttons displayed in navigation panels, and how the button is displayed. Each element is associated with a button of the navigation panel from left to right. The signification of the array element value is the following: _reference on a function_ The function is called with argument a boolean true if the navigation panel should be vertical. Should return the formatted button text. _reference on a scalar_ The scalar value is printed. For some possibly usefull scalars, *note Elements hashes::. _reference on an array_ In this case the first array element should be a reference on text and the second element an element label. In that case a link to the element associated with the element label with the scalar value text is generated. For example if the buttons array element is [ 'Next', \$Texi2HTML::NODE{Next} ] The button will be a link to the next section with text `$Texi2HTML::NODE{Next}'. _element label_ If icons are not used, the button is a link to the corresponding element which text is defined by the value associated with the element label in the `%NAVIGATION_TEXT' hash, surrounded by `[' and `]'. If the element label is ` ', there is no `[' and `]'. The element of the `%NAVIGATION_TEXT' hash are defined dynamically, in the `init_out' function reference (*note Output initialization::). If icons are used, the button is an image with file determined by the value associated with the element label in the `%ACTIVE_ICONS' hash if the the link really leads to an element, or in the `%PASSIVE_ICONS' hash if there is no element to link to. Of course if there is a link to the element the icon links to that element. The button name and the button description are used in HTML attributes to have a textual description of the icon. The corresponding strings are in `%BUTTONS_NAME' for the button name and `%NAVIGATION_TEXT' for the description. If `$USE_ACCESSKEY' is set, the `accesskey' attribute is used in navigation. In that case the `%BUTTONS_ACCESSKEY' hash is used for the access key. Similarly, if If `$USE_REL_REV' is set, the `rel' attribute is used in navigation. In that case the `%BUTTONS_REL' hash is used for the rel attribute.  File: texi2html.info, Node: Panel formatting function, Prev: Button specifications, Up: Navigation panel 6.3.3 Changing the navigation panel formatting ---------------------------------------------- If you are not satisfied with this scheme, it is possible to control exactly the formatting of navigation panels by redefining a function reference. The function controlling the display of navigation panel is associated with the following function reference: -- Function Reference: $navigation_text print_navigation \@buttons $vertical \@BUTTONS is an array reference which should hold the specification of the buttons for that navigation panel. $VERTICAL is true if the navigation panel should be vertical. Returns the formatted navigation panel in $NAVIGATION_TEXT.  File: texi2html.info, Node: Program variables, Next: Output initialization, Prev: Navigation panel, Up: Changing the page layout 6.4 Main program variables and usefull functions ================================================ In the functions controlling the page layout some global variables set by the main program are available, with value corresponding with the current layout element. * Menu: * Elements hashes:: Accessing information related with the different elements * Global informations:: Accessing global informations, like date, title... * Global functions:: main program usefull functions  File: texi2html.info, Node: Elements hashes, Next: Global informations, Up: Program variables 6.4.1 Accessing elements informations ------------------------------------- Four hashes are available, with key the elements labels (as described in *note Element labels::) and values: `%Texi2HTML::NAME' The formatted element name `%Texi2HTML::HREF' The element hypertext reference `%Texi2HTML::NODE' The element node name `%Texi2HTML::NO_TEXI' The element name after removal of texi commands If `$USE_NODE_TARGET' is set, the node anchors are used as target for the section HREF, if there is a node associated to that section.  File: texi2html.info, Node: Global informations, Next: Global functions, Prev: Elements hashes, Up: Program variables 6.4.2 Accessing global informations ----------------------------------- Three kinds of global informations are available, miscalleneous global strings, flags set by `@set' and special flags and section lines. Global strings .............. The `%Texi2HTML::THISDOC' hash holds some global informations: `fulltitle' title set by `@settitle'. If there is no `@settitle' other possibilities are tried (`@title', `@shorttitlepage'...). `fulltitle_no_texi' fulltitle without texi formatting `fulltitle_texi' fulltitle with texi commands `title' title set by `@title'. `title_no_texi' title without texi formatting `title_texi' title with texi commands `author' Authors list set by `@author'. `authors' A reference on an array containing each author set by `@author'. `copying_comment' Text appearing in `@copying' with all the texinfo commands removed, put in comments. `program' The name and version of `texi2html'. `program_homepage' Homepage for `texi2html'. `program_authors' Authors of `texi2html'. `file_base_name' base name of the texinfo manual file. `filename' This is a reference on a hash that holds the filenames for special elements. These files may not be used in certain cases, for example the `toc' element file name may not be relevant if table of contents is not output separately. The keys are `doc' the document file if not split, if split should be the top element file. `top' Top element file name. `toc' Table of contents element file name. `stoc' Overview (also called short table of contents) element file name. `about' About element file name. `foot' Footnotes element file name. `frame' Main frame file. `toc_frame' Table of contents frame file name. `input_file_name' Name of the texinfo manual file given on the command line. `destination_directory' Destination directory for the resulting files. `extension' Extension for the output files. `toc_file' The file name of the table of contents, should always be valid, even when table of contents are output directly in the document. `inline_contents' A reference on a hash containing two key, one for each type of table of contents: `contents' The associated value is a reference on an array containg the line resulting from formatting the table of contents, including a heading and a reference. `shortcontents' The associated value is a reference on an array containg the line resulting from formatting the short table of contents, including a heading and a reference. `today' The date. May be overriden by `$DATE'. `user' The user running `texi2html'. Maybe overriden by `$USER'. `css_import_lines' reference on an array containing the `@import' lines of CSS files. `css_lines' reference on an array containing the normal lines of CSS files. It also holds the arg of the following commands, associated with the command name: kbdinputstyle, paragraphindent, setchapternewpage, headings, footnotestyle, exampleindent, firstparagraphindent, everyheading, everyfooting, evenheading, evenfooting, oddheading, oddfooting, setcontentsaftertitlepage, setshortcontentsaftertitlepage, frenchspacing. If the command doesn't have any arg, it will be true is it was set. Flags ..... Flags defined by `@set' may be accessed through the `%main::value' hash. The key is the flag name, the value is the flag value at the end of the document. Special flags are set by the main program. They correspond with a texinfo command, like `@setfilename', or `@settitle', `@author'... The corresponding flag is the command name with `_' appended, for example, `_titlefont' corresponds with `@titlefont'. Like other flags they are available in `%main::value'. Section lines ............. The following array references or arrays holds formatted lines: `$Texi2HTML::THIS_SECTION' Lines of the current element. `$Texi2HTML::OVERVIEW' Lines of short table of contents. *Note Special pages::. `$Texi2HTML::TOC_LINES' Lines of table of contents. *Note Special pages::. `$Texi2HTML::TITLEPAGE' The title page formatted with special title commands (`@author', `@title') expanded. *Note Title page::.  File: texi2html.info, Node: Global functions, Prev: Global informations, Up: Program variables 6.4.3 Function usefull in page formatting ----------------------------------------- The usefull function is a function used to print an array of lines, which also counts the number of words in the array, if needed. -- Function: $words_number main::print_lines $filehandle \@lines_array $FILEHANDLE is the opened filehandle the function should write to. \@LINES_ARRAY is the array line the function should write to the file. If this argument is omitted, the function uses `$Texi2HTML::THIS_SECTION'. $WORDS_NUMBER is the number of words in the array, only defined if split at nodes and `$WORDS_IN_PAGE' is defined.  File: texi2html.info, Node: Output initialization, Next: Output finalization, Prev: Program variables, Up: Changing the page layout 6.5 Preparing the output ======================== After the texinfo file has been parsed, some information is available which can be used to modify some variables and prepare the outputting. For example the document language, the document encoding, values set with `@set' or `@setfilename' and other similar @-commands are not known before the texinfo parsing. The following function reference may be redefined to be called after texinfo processing and before document generation: -- Function Reference: init_out This function perform the initialization of variables and any other task before document outputting. In the default case the `$BODYTEXT' (*note Customizing header::) and the hashes `%NAVIGATION_TEXT', `%BUTTONS_NAME' (*note Button specifications::), `%BUTTONS_GOTO' (*note About text::) are initialized. Indeed the initialization of these variables is dependent upon the document language selection. Similarly the encoding variables are set based on the information now available (*note Encodings::). To perform the default initializations and also add more code, you could do as in the following example (save the default function reference and call it in your own function) : my $default_init_out = $init_out; $init_out = \&makeinfo_like_init_out; sub makeinfo_like_init_out() { &$default_init_out(); $NAVIGATION_TEXT{'Following'} = ' > '; }  File: texi2html.info, Node: Output finalization, Next: css, Prev: Output initialization, Up: Changing the page layout 6.6 Finalizing the output ========================= If you want to do some cleaning after the document was generated (close files, write at the end of files and so on), the following function reference may be redefined: -- Function Reference: finish_out This function is called after the document generation. The default is to do nothing.  File: texi2html.info, Node: css, Next: Customizing header, Prev: Output finalization, Up: Changing the page layout 6.7 Customizing the `texi2html' css lines ========================================= If the variable `$CSS_LINES' is set it is used for the css entries. For example if you don't want any css entries, set $CSS_LINES = ''; If this variable is `undef' (as in th edefault case), it is possible to modify the `texi2html' css lines by modifying the entries or adding to the `%css_map' hash. Each key is a css selector, the corresponding value is a style string. Another possiblility is to modify the array corresponding with the array reference `$Texi2HTML::THISDOC{'css_import_lines'}' that contains the `@import' lines of CSS files, and similarly it is possible to modify the array corresponding with the array reference `$Texi2HTML::THISDOC{'css_lines'}' that contains the normal CSS files lines (for details on what corresponds with those different lines, see *note HTML CSS: (texinfo)HTML CSS.). The right place to modify these arrays is in a function appearing in the `@command_handler_process' array (*note Bypassing normal formatting::). Later, the CSS lines are allready expanded, by the function reference below. In th edefault case, the resulting css lines are in `$Texi2html::THISDOC{'CSS_LINES'}'. It is also possible to change completely the way `$Texi2html::THISDOC{'CSS_LINES'}' are generated by redefining the following function reference: -- Function Reference: css_lines \@import_lines \@rule_lines This function should be used to construct the variable `$Texi2html::THISDOC{'CSS_LINES'}'. \@IMPORT_LINES are the `@import' lines of the files specified with `--include-css', and \@RULE_LINES are the css commands lines of these files. *Note Style options::.  File: texi2html.info, Node: Customizing header, Next: Customizing section, Prev: css, Up: Changing the page layout 6.8 Customizing the page header =============================== It is possible to add lines to the text within the `' HTML elements, by defining the variable `$EXTRA_HEAD'. Similarly it is possible to add text just after the `' element with the variable `$AFTER_BODY_OPEN'. These variables are empty by default. The HTML encoding of the resulting document is defined by `$ENCODING_NAME'. If the variable isn't defined, the `@documentencoding' value is used, or the `$OUT_ENCODING' value, if set. `$ENCODING_NAME' may influence the value of `$OUT_ENCODING', which corresponds with the encoding used when writing to the resulting files. *Note Encodings::. The description of the document may be specified in `$DOCUMENT_DESCRIPTION'. If this variable is undef, the text associated with `@documentdescription' is used, and if there isn't such test a default description is constructed using the document title and the name of the first section of the file. The value used during document formatting is `$Texi2HTML::THISDOC{'DOCUMENT_DESCRIPTION'}'. The `' element attributes may be set by defining the variable `$BODYTEXT'. The resulting attributes are in `$Texi2HTML::THISDOC{'BODYTEXT'}'. If you want to define that variable dynamically, you should use the `init_out' function reference (*note Output initialization::). `' element are used in the header if `$USE_LINKS' is set. `@LINKS_BUTTONS' determines which links are used. `%BUTTONS_REL' determines the link type associated with the `rel' attribute. The default functions call the function associated with `$print_head_navigation' to format the navigation panel for the page header. Thus you can control parts of the formatting by redefining the function reference. -- Function Reference: print_head_navigation $filehandle \@buttons $FILEHANDLE is the opened filehandle the function should write to. \@BUTTONS is an array reference which should hold the specification of the buttons for the navigation panel. If you want even more control, you can have full control over the page header formatting by redefining three function references. The function associated with `$print_page_head' is called for all the pages, and after that, the function associated with `$print_chapter_header' is called if the document is split at chapters, or the function associated with `$print_section_header' is called if the document is split at sections. -- Function Reference: print_page_head $filehandle $FILEHANDLE is the opened filehandle the function should write to. This function should print the page head, including the `' element. -- Function Reference: print_chapter_header $filehandle $FILEHANDLE is the opened filehandle the function should write to. This function is called if the document is split at chapters, after `print_page_head'. -- Function Reference: print_section_header $filehandle $FILEHANDLE is the opened filehandle the function should write to. This function is called if the document is split at sections, after `print_page_head'.  File: texi2html.info, Node: Customizing section, Next: Customizing footer, Prev: Customizing header, Up: Changing the page layout 6.9 Customizing the sections ============================ The functions associated with the following function references are used for the formatting of sections: -- Function Reference: $element_header print_element_header $first_in_page $previous_is_top $FIRST_IN_PAGE is true if this section is the first section in the page. $PREVIOUS_IS_TOP is true if this section is the section following the Top section. This function should return $ELEMENT_HEADER, the current section header. -- Function Reference: print_section $filehandle $first_in_page $previous_is_top $FILEHANDLE is the opened filehandle the function should write to. $FIRST_IN_PAGE is true if this section is the first section in the page. $PREVIOUS_IS_TOP is true if this section is the section following the Top section. This function should print the current section contents. -- Function Reference: end_section $filehandle $last_element_or_before_top $FILEHANDLE is the opened filehandle the function should write to. $LAST_ELEMENT_OR_BEFORE_TOP is true if this section precedes the top element or is the last one in page, or before the special elements.  File: texi2html.info, Node: Customizing footer, Next: Special pages, Prev: Customizing section, Up: Changing the page layout 6.10 Customizing the page footer ================================ It is possible to add text just before the `' element with the variable `$PRE_BODY_CLOSE'. Nothing is added by default. A user name and a date are collected to be output in the footer. You can change them by defining `$USER' and `$DATE' in the initialization file. The default functions call the function associated with `$print_foot_navigation' to format the navigation panel for the page footer. Thus you can control parts of the formatting by redefining the function reference. -- Function Reference: print_foot_navigation $filehandle \@buttons $FILEHANDLE is the opened filehandle the function should write to. \@BUTTONS is an array reference which should hold the specification of the buttons for the navigation panel. If you want even more control, you can have more control over the page footer formatting by redefining three function references. The function associated with `$print_chapter_footer' is called if the document is split at chapters, or the function associated with `$print_section_footer' is called if the document is split at sections. After that the function associated with `$print_page_foot' is called. -- Function Reference: print_page_foot $filehandle $FILEHANDLE is the opened filehandle the function should write to. This function should print the page foot, including the `' element. -- Function Reference: print_chapter_footer $filehandle $FILEHANDLE is the opened filehandle the function should write to. This function is called if the document is split at chapters, before `print_page_foot'. -- Function Reference: print_section_footer $filehandle $FILEHANDLE is the opened filehandle the function should write to. This function is called if the document is split at sections, before `print_page_foot'.  File: texi2html.info, Node: Special pages, Next: File and target names, Prev: Customizing footer, Up: Changing the page layout 6.11 Special pages formatting ============================= For the special elements, two things must be formatted: the content and the page layout * Menu: * Special pages content:: * Special pages layout::  File: texi2html.info, Node: Special pages content, Next: Special pages layout, Up: Special pages 6.11.1 Customizing the content of the special pages --------------------------------------------------- The label for the special elements, except for the Top element is formatted according to the function reference `$misc_element_label': -- Function Reference: $misc_element_label misc_element_label $identifier $page_name $IDENTIFIER is the identifier associated with the special element. $PAGE_NAME is the special element name. It should return a label that can be used for references to the special element. * Menu: * Top element text:: * Contents and Overview text:: * Footnotes text:: * About text:: * Title page::  File: texi2html.info, Node: Top element text, Next: Contents and Overview text, Up: Special pages content 6.11.1.1 Top element text formatting .................................... The top element formatting is controlled by three function which also controls the layout of the top element page or section. The associated function references are: -- Function Reference: print_Top_header $filehandle $begin_page $FILEHANDLE is the opened filehandle the function should write to. $BEGIN_PAGE is true if the element is the first in a page. This function should begin the Top element. At the time this function is called the top element text hasn't been parsed. -- Function Reference: print_Top $filehandle $has_top_heading $FILEHANDLE is the opened filehandle the function should write to. $HAS_TOP_HEADING is true if there is a `@heading' command or `@titlefont' command appearing in the Top element text. This function should be used to format the Top element text and navigation panel. -- Function Reference: print_Top_footer $filehandle $end_page $FILEHANDLE is the opened filehandle the function should write to. $END_PAGE is true if the element is the last in a page. This function should end the Top element.  File: texi2html.info, Node: Contents and Overview text, Next: Footnotes text, Prev: Top element text, Up: Special pages content 6.11.1.2 Table of contents and Short table of contents ...................................................... Two possibilities exist for the formatting of table of contents (and short table of contents). In the default case, the table of contents are in separate elements, at the end of the document if the document is unsplit or in separate files. This is consistent with `makeinfo' where menus are used for navigation. Another mode may be selected by setting `$INLINE_CONTENTS'. In that case the table of contents are not output as separate elements but are instead output where the corresponding @-command, for example `@contents', is set. This behaviour is more consistent with `texi2dvi'. If `@setcontentsaftertitlepage' appears in the document, and even if `$INLINE_CONTENTS' is set, the table of contents are merged in the title (which isn't output in the default case, see *note Title page::). Several variables may be used to control the formatting of table of contents and short table of contents: `$DO_CONTENTS' If the variable is true a table of contents is done even if there is no `@contents' command. If it is defined and false, no table of contents is done even if there is a `@contents' command. `$DO_SCONTENTS' If the variable is true a short table of contents is done even if there is no `@summarycontents' command. If it is defined and false, no short table of contents is done even if there is a `@summarycontents' command. `$BEFORE_OVERVIEW' The variable value is inserted before the short table of contents text. `$AFTER_OVERVIEW' The variable value is inserted after the short table of contents text. `$BEFORE_TOC_LINES' The variable value is inserted before the table of contents text. `$AFTER_TOC_LINES' The variable value is inserted after the table of contents text. `$NO_BULLET_LIST_STYLE' This should contain a css style used for the list style when there is no bullet. `$NO_BULLET_LIST_ATTRIBUTE' This should contain an attribute text used for the list element when there is no bullet. For example it is used in the tables of if they are formatted with a list. More control on the table of contents and short table of contents formatting may be achieved by redefining a function with the following associated function reference: -- Function Reference: toc_body \@elements \@ELEMENTS is an array reference contining informations about all the elements of the document. Each of the entry of this array is an hash reference which entries correspond with different informations about the element. Interesting keys have the following meaning: `top' true if the element is the top element, `index_page' true if the element is an index page added because of index splitting, `toc_level' level of the element in the table of content. Highest level is 1 for the top element and for chapters, appendix and so on, 2 for section, unnumberedsec and so on... `tocid' label used for reference linking to the element in table of contents, `file' the file containing the element, usefull to do href to that file in case the document is split, `text' text of the element, with section number, `name' text of the element, without section number. This function doesn't return anything but should fill the array corresponding with the `$Texi2HTML::TOC_LINES' and `$Texi2HTML::OVERVIEW' references with the table of contents and short table of contents. Another function reference is used to add a heading and a reference, to be used with `$INLINE_CONTENTS' or merged in the title. Its output is not used when the table of contents are separate elements. -- Function Reference: \ @inline_contents_lines inline_contents $filehandle $command $element This function reference returns a reference on an array holding the lines containing the contents, heading and reference. $FILEHANDLE is a reference on the currently opened file if the function is called because a `@contents' or `@shortcontents' command was encountered, it is undef otherwise. $COMMAND is either `contents' or `shortcontents'. $ELEMENT is a hash reference containing informations about the table of contents context. Relevant keys are: `target' The identifier associated with the table of contents, used for example to do references to the table of contents using href in HTML. `id' The identifier associated with the element, used to do labels. In general the same than the `target', but not necessarily. `file' The file name containing the table of contents.  File: texi2html.info, Node: Footnotes text, Next: About text, Prev: Contents and Overview text, Up: Special pages content 6.11.1.3 Formatting of footnotes text ..................................... The footnotes text is allready formatting when `@footnote' commands are expanded. *Note Footnotes::.  File: texi2html.info, Node: About text, Next: Title page, Prev: Footnotes text, Up: Special pages content 6.11.1.4 Formatting of about text ................................. The default about element contains an explaination of the buttons used in the document (`@SECTION_BUTTONS', *note Button specifications::) and an example locating the buttons targets in an example. The formatting of this text may be influenced by the following hashes and variables: `$PRE_ABOUT' `$AFTER_ABOUT' This variable may be a scalar or a function reference. If it is a scalar, the value is used. If this is a function reference it is expanded and the returned text is used. The text is added before or after the main about text. `%BUTTONS_GOTO' The keys of this hash are element labels (*note Element labels::). The value is the text associated with the element label in the about text. The element of the hash are defined dynamically, you should in the `init_out' function reference (*note Output initialization::). `%BUTTONS_EXAMPLE' The keys of this hash are element labels (*note Element labels::). The value is the text associated with the element label in the about example, typically a section number. If this is not enough and you want to control exactly the formatting of the about text, you can redefine the function associated with the following function reference: -- Function Reference: $about_text print_about This function should return the about text.  File: texi2html.info, Node: Title page, Prev: About text, Up: Special pages content 6.11.1.5 Formatting of title page ................................. The title page is first formatted using the text appearing in the `@titlepage' section, and put in `$Texi2HTML::TITLEPAGE'. The information appearing in `@title', `@subtitle' or `@author' is then added using the following function reference: -- Function Reference: titlepage This function should complete `$Texi2HTML::TITLEPAGE'. In the default case, in this function the table of contents and short table of contents are also added if they are to be output and `@setcontentsaftertitlepage' or `@setshortcontentsaftertitlepage' appear in the document (*note Contents and Overview text::). In the default case the resulting title page output is not used in the document, except if the top node is not associated with any content.  File: texi2html.info, Node: Special pages layout, Prev: Special pages content, Up: Special pages 6.11.2 Customizing the layout of the special pages -------------------------------------------------- The formatting of each of the special pages, or section in case the document is not split, is controlled by a function. The associated function reference is called accordingly: `print_Top' `print_Top_header' `print_Top_footer' Formatting of top element page or section. It is also used for the formatting of the top element text (*note Top element text::). `print_Toc' Formatting of table of contents page or section `print_Overview' Formatting of short table of contents page or section `print_About' Formatting of about (help) page or section `print_Footnotes' Formatting of footnotes section or page in case footnotes are on a separated page or the document isn't split. In the default case, `$print_Top' calls `$print_Top_header' for the header and `$print_Top_footer' for the footer of top element. All the other function call `$print_misc' which in turn calls `$print_misc_header' for the headers and `$print_misc_footer' for the footers.  File: texi2html.info, Node: File and target names, Next: External index files, Prev: Special pages, Up: Changing the page layout 6.12 Customizing the file and target names ========================================== File names ---------- It is possible to specify the file names with more control than with the command line options (*note Output files::). First the extension may be overrided by the variable `$EXTENSION' value. The variable should be `undef' if no extension is to be added. Two function references enable further customization. One is usefull in case `$NODE_FILES' is true and it is used to customize the node file name. -- Function Reference: $node_file node_file_name \%node \%NODE is a hash reference with the following interesting keys (there are much more keys): `texi' The texinfo node name. `with_section' True if associated with a section. The result is the node file name $NODE_FILE. The other is used to customize the file names associated with each element, and the name of the file associated with the special elements. -- Function Reference: $file element_file_name \%element $type $docu_name \%ELEMENT is undefined for the special elements (about, overview, table of contents, footnotes). Otherwise it is a hash reference with the following interesting keys (there are much more keys): `texi' The texinfo element name. `number' The number associated with a section. `doc_nr' A number incremented whenever a new file should begin, based on how the document is split (*note Splitting output::). `text' The element text. `name' The element text without section number. $TYPE is empty for normal elements. For the top element it is `top', for the table of contents it is `toc', for the overview it is `stoc', for the footnotes it is `foot' and for about is `about'. If frames are used (*note Page layout options::), the function reference is also called for `frame', the frame file name, and `toc_frame' the table of content frame file name. $DOCU_NAME is the basename of the texinfo manual. The result is the element or special element file name. target names ------------ Similarly target and id may be set. The "id" is placed where the item is located, the "target" is used to construct references to that item. In general they should be equal, but not always, for example in the default case, the target for a section is the node id. The following function reference, is for target items (nodes, anchors, floats): -- Function Reference: ($target,$id) node_target_name \%node, $default_target, $default_id \%NODE is the same as in the `node_file_name' function reference above. $DEFAULT_TARGET is the target already set (it is also in `$node->{'target'}'), and $DEFAULT_ID is similarly the id already set. For element associated with files (which may be nodes), the function reference is: -- Function Reference: ($target,$id) element_target_name \%element, $default_target, $default_id the \%ELEMENT is the same than in `element_file_name', and $DEFAULT_TARGET and $DEFAULT_ID are the target and id already set. Placed items (floats, footnotes, index entries, anchors, contents, shortcontents and headings) file and target may also be set. In the default case, they should be rightly set, so be careful when changing them. The following function reference can be used: -- Function Reference: ($target, $id, $file) placed_target_file_name \%placed_item, \%element, $default_target, $default_id, $default_file, $context \%PLACED_ITEM is a hash reference describing the placed item, in the same vein than above. the \%ELEMENT is the same than in `element_file_name', corresponding with the element containing the placed item. $DEFAULT_FILE, DEFAULT_ID and $DEFAULT_TARGET are the file, id and target already set. $CONTEXT describes the context, it is empty in the normal cases, and can also be set to `footnotes' if in footnotes, or to `no_associated_element' if the placed item is out of any element (typically in `@titlepage', `@copying'). For special elements, the `%misc_pages_targets' hash is used to set the target and id. The possibilities for the keys are `Overview', `Contents', `Footnotes' and `About'.  File: texi2html.info, Node: External index files, Prev: File and target names, Up: Changing the page layout 6.13 Generation of external files for index entries =================================================== Within the document, `@printindex' commands are expanded as explained in *note Index list::. In case you want to do something special with index entries, outside of the document, you should first set the variable `$IDX_SUMMARY' true. After that some function reference will be called for each non empty index. For each index there are 3 function references, one called for initialization, one called for each index entry and the last one called for finalization. -- Function Reference: index_summary_file_begin $index_name $is_printed $manual_name $INDEX_NAME is the two letters name for the index. This function is called for each index appearing in the document, before `index_summary_file_entry'. $IS_PRINTED is true if there is a `@printindex' for that index. $MANUAL_NAME is the manual basename. -- Function Reference: index_summary_file_entry $index_name $entry_text $entry_reference $formatted_entry $texi_entry $entry_element_reference $entry_element_header $is_printed $manual_name This function is called for each entry of an index. INDEX_NAME is the name of the index. $ENTRY_TEXT is the entry in plain text, $FORMATTED_ENTRY is the index entry formatted, $TEXI_ENTRY is the entry with texinfo commands. $ENTRY_REFERENCE is the reference placed at the index entry place, in the form `file#id'. $ENTRY_ELEMENT_HEADER is the formatted header of the element containing the index entry. ENTRY_ELEMENT_HEADER is the reference to the beginning of the element containing the index entry, in the form `file#id'. $IS_PRINTED is true if there is a `@printindex' for that index. $MANUAL_NAME is the manual basename. -- Function Reference: index_summary_file_end $index_name $is_printed $manual_name $INDEX_NAME is the two letters name for the index. This function is called for each index appearing in the document, after `index_summary_file_entry'. $IS_PRINTED is true if there is a `@printindex' for that index. $MANUAL_NAME is the manual basename.  File: texi2html.info, Node: Customizing HTML, Next: Internationalization, Prev: Changing the page layout, Up: Top 7 Customizing HTML and text style in init files *********************************************** Some simple customization may be achieved with the redefinition of the variables associated with the command line options. For the description and an explanation of the meaning of these variables, *note Style options::. Other variables and hash entries can be modified in initialization file to achieve more customization. Lastly, functions references corresponding with functions called from the main program and initialization files may be redefined. * Menu: * Three contexts:: there are three different contexts for command expansion: normal text, preformatted text and strings. * Three passes:: `texi2html' process texinfo in 3 passes. In almost every cases, you shouldn't care. * Commands without argument:: * Punctuation commands:: `@:' * Style and accent commands:: * Anchors images and spaces:: Formatting of `@anchor', `@image', `@sp', `@acronym', `@abbr' * Text:: Some characters are processed specially * Strings:: `texi2html' write some strings in the output different for each languages * References:: * Alignement commands:: `@center', `@flushleft'... * Paragraph and preformatted region:: * Complex formats:: `@example', `@display'... * Lists tables:: * Definitions:: * Headings:: * Special regions:: `@verbatim', `@cartouche', `@quotation' * Menus:: * Indices:: * Floats and lists of floats:: `@float' and `@listoffloats' * Footnotes:: * Customizing format opening:: How to run some code when a format is opened (like `@table', `@flushleft', `@example'... * Bypassing normal formatting:: * Handling special regions:: Keep `@titlepage', `@documentdescription' or `@copying' and format `@insertcopying' * Other and unknown commands:: You can handle specifically other commands  File: texi2html.info, Node: Three contexts, Next: Three passes, Up: Customizing HTML 7.1 Three contexts for expansions: preformatted, normal and string ================================================================== There are three contexts of interest, one is the normal context, the other is a special context, called the "preformatted" context and the last is the string context. The preformatted context occurs when the spacing between words is kept. This is the case, for example, in `@display' or `@example' regions, and in menu comments (*note Menus::). The preformatted regions are usually rendered in `
    ' elements in
    HTML.  The string context occurs when rendering strings without
    formatting elements, in comments or titles for example.
    
    
    File: texi2html.info,  Node: Three passes,  Next: Commands without argument,  Prev: Three contexts,  Up: Customizing HTML
    
    7.2 Three passes: macro expansion, document structure and output
    ================================================================
    
    There are three passes in `texi2html'. During pass 0, the `@macro' are
    expanded, in pass 1 the document structure is gathered and in pass 2
    the result is output. In most cases you shouldn't care about it, as
    almost all of the output customization is done in pass 2.  Only if you
    want to do something before the pass 2 should you care.
    
    
    File: texi2html.info,  Node: Commands without argument,  Next: Punctuation commands,  Prev: Three passes,  Up: Customizing HTML
    
    7.3 Customizing the formatting of commands without argument
    ===========================================================
    
    This includes the commands whose name is a nonletter character like
    `@@', the commands with lettered characters and braces but whose braces
    should be empty, like `@TeX{}', or some commands associated with
    accentted letters like `@AA{}'. If there happens to be something within
    the braces, it is put after the command, thus
         @TeX{something}
       leads to the same than
         @TeX{} something
    
       Each of these categories of commands have three associated hashes,
    one for normal context, the other for preformatted context and the last
    in strings. The keys of the hashes are the command names, the
    associated value is the text replacing the command.
    
       The hashes are:
    command type                normal text   preformatted text   string
    one nonlettered character   `%simple_map' `%simple_map_pre'   `%simple_map_texi'
    nothing in braces           `%things_map' `%pre_map'          `%texi_map'
    
       To change the HTML resulting from these constructs, just change the
    value. For example, if you want `­' to be outputted for `@-' in
    normal and preformatted context, write in your init file:
    
         $simple_map{'-'} = '­';
         $simple_map_pre{'-'} = '­';
    
    
    File: texi2html.info,  Node: Punctuation commands,  Next: Style and accent commands,  Prev: Commands without argument,  Up: Customizing HTML
    
    7.4 Punctuation commands
    ========================
    
    The formatting of a punctuation character followed by `' is determined
    by the hash `%colon_command_punctuation_characters'. If a `' command is
    preceded by a character in th is hash, it is replaced by the associated
    value. In the default case, the associated value is also the character,
    so this leave the punctuation character unmodified.
    
       The following function reference may be redefined to handle
    characters that are in `%colon_command_punctuation_characters':
    
     -- Function Reference: $punctuation $colon_command $character
         The $CHARACTER is a character appearing in
         `%colon_command_punctuation_characters' and preceding a `'
         command. In the default case the associated value in
         `%colon_command_punctuation_characters' is returned.
    
    
    File: texi2html.info,  Node: Style and accent commands,  Next: Anchors images and spaces,  Prev: Punctuation commands,  Up: Customizing HTML
    
    7.5 Customizing accent, style and other simple commands
    =======================================================
    
    The formatting of the HTML produced by style and indicatric commands
    (`@tt', `@code', `@email', `@titlefont'), the accentuation related
    commands taking argument (`@'', `@udotaccent', `@dotless') and
    miscalleneous commands (`@email', `@verb', `@w', `@uref', `@math',
    `@asis') is controlled by two hash in the default case, `%style_map'
    for normal context, `%style_map_pre' for preformatted context and `%style_map_texi'
    in string context.
    
       The key of the hashes are the command names. There are two
    possibilities for the values corresponding with two interfaces. The
    values may be strings or hash references, and you can chose the
    interface depending on the one you prefer. The interface with hash
    reference is a bit more flexible but might also be regarded as more
    complex. If you don't like either of these interfaces you can define
    your own.
    
       Some remarks are in order:
    
       * The nonlettered accent commands which following character is
         considered to be the argument (like in `@`a') should be keys of the
         hash `%accent_map' hash, even if no value is associated.
    
       * `@math' is handled differently if LaTeX2HTML is used.
    
    * Menu:
    
    * Hash reference interface::
    * String interface::
    * Define your own interface::
    
    
    File: texi2html.info,  Node: Hash reference interface,  Next: String interface,  Up: Style and accent commands
    
    7.5.1 An interface for commands formatting with a hash reference
    ----------------------------------------------------------------
    
    The key of the hashes are the command names. The value determine how
    the command argument is formatted. This value is a reference on a hash.
    In this hash each key corresponds with a type of information for the
    formatting, and the value is the corresponding information. For
    example, in
    
         $style_map{'command'} = { 'args' => ['code'], 'attribute' => 'code'};
    
       the arguments for `@command' are interpreted as specified by the
    values associated with the `args' key while the attribute associated
    with that command is `code'.
    
       The following keys in the hashes associated with each command have
    the following meaning:
    
    `args'
         The value associated is a reference on an array. Each element of
         the array defines how the arguments (separated by `,' in the
         texinfo code) for the @-command should be formatted. The
         possibilities are
        `normal'
              for normal text,
    
        `code'
              for text with `---', `--', `''' and  ```' kept as is,
    
        `keep'
              if the texinfo should be kept as is, without interpretation
              of the @-commands.
    
         For example, we have
              $style_map{'email'}->{'args'} = ['code', 'normal'];
    
         because `---', `--', `''' and  ```' should be kept as is in the
         first argument of `@email'.
    
         The default is `['normal']'.
    
    `attribute'
         If the associated value is a word, it is considered to be an HTML
         element name, and the argument is enclosed between the element
         opening and the element closing. For example, if the value is
         `elem', the resulting HTML is `ARG'.
    
         If the text is a word followed by some text, the word and is
         interpreted as above, and the text is considered to be the
         attributes text of the element.  Thus `elem class="elem"' leads to
         `ARG'.
    
         This works only if there is only one argument.
    
    `begin'
         The associated value is added in front of the text.
    
    `begin'
         The associated value is added after the text.
    
    `quotes'
         If the corresponding value is true, the result is enclosed in
         quotes `$OPEN_QUOTE_SYMBOL' and `$CLOSE_QUOTE_SYMBOL', with
         defaults ``' and `''.
    
    `function'
         The corresponding value should be a function reference. The
         corresponding function is called with the following arguments:
    
        `$command'
              The @-command name
    
        `$args'
              A reference on an array containing the arguments of the
              @-command.
    
        `$command_stack'
              A reference on an array containing the name of the @-commands
              containing the @-command being formatted, latest on top.
    
        `$state'
              A reference on a hash containing a lot of informations about
              the context of the @-command.
    
        `$line_nr'
              An opaque structure containing the information about the line
              number of the @-command. It can be used to call
              `main::echo_error' or `main::echo_warning' with first
              argument a message, and second argument `$line_nr'.
    
    
    File: texi2html.info,  Node: String interface,  Next: Define your own interface,  Prev: Hash reference interface,  Up: Style and accent commands
    
    7.5.2 An interface for commands formatting with a string
    --------------------------------------------------------
    
    The keys of the hashes are the command names. The value determine how
    the command argument is formatted. If the value begins with `"', the
    result is enclosed in quotes `$OPEN_QUOTE_SYMBOL' and `$CLOSE_QUOTE_SYMBOL',
    with defaults ``' and `''.
    
       The command argument is allready formatted as HTML.  The remaining
    of the value text (or the value text if there were no `"') is
    interpreted as follow:
    
       * If the text is empty the argument of the command is left as is.
    
       * If the text is a `&' followed by a name, like `&function', the
         name is considered to be a function name, and this function is
         called to format the argument of the command. The first argument
         of the function is the command name, the second is the command
         argument. For example, if the value associated with the
         (fictituous) command `@foo' is `&my_func' and we have:
    
              sub my_func
              {
                  my @args = split /,\s*/ $_[1];
                  return "$_[0]: $args[0]" if ($args[1] = 1);
                  return "$args[0]";
              }
    
         The result of
              @foo{truc, 1}
              @foo{truc, bidule}
         will be
              foo: truc
              truc
    
       * If the text is a word, it is considered to be an HTML element
         name, and the argument is enclosed between the element opening and
         the element closing. For example, if the value is `elem', the
         resulting HTML is `ARG'.  Similarly `"quoted' leads to
         ``ARG''.
    
       * If the text is a word followed by some text, the word and is
         interpreted as above, and the text is considered to be the
         attributes text of the element.  Thus `elem class="elem"' leads to
         `ARG'.
    
    
    File: texi2html.info,  Node: Define your own interface,  Prev: String interface,  Up: Style and accent commands
    
    7.5.3 Defining the style and indicatric commands interface
    ----------------------------------------------------------
    
    If you don't like this scheme, it is possible to change how those
    commands are processed by redefining the following function reference:
    
     -- Function Reference: $resulting_text style $style $command $text
              $args $no_close $no_open $line_nr $state $command_stack
         $COMMAND is the @-command, $STYLE is the value associated with the
         $COMMAND in the `%style_map', `%style_map_pre' or
         `%style_map_texi' hashes.  The $TEXT is the text appearing within
         the @-command braces.  ARGS is a reference on an array contening
         the command arguments formatted according to the same conventions
         than with the reference hash style (provided the value associated
         with the @-command is a hash reference with a $ARG key as
         described in *note Reference hash args::).  If $TEXT is split in
         paragraphs each paragraph is passed through the function, and
         $NO_CLOSE is true if it is not the last paragraph, while $NO_OPEN
         is true if it is not the first paragraph.  $LINE_NR is an opaque
         structure containing the information about the line number of the
         @-command. It can be used to call `main::echo_error' or
         `main::echo_warning' with first argument a message, and second
         argument `$line_nr'.  $STATE is a reference on a hash containing a
         lot of informations about the context of the @-command.
         $COMMAND_STACK is a reference on an array containing the name of
         the @-commands containing the @-command being formatted.
    
    
    
    File: texi2html.info,  Node: Anchors images and spaces,  Next: Text,  Prev: Style and accent commands,  Up: Customizing HTML
    
    7.6 Formatting of special simple commands
    =========================================
    
    The formatting of special simple commands is controlled by functions. To
    customize the output, the corresponding function references should be
    redefined. All these functions return a formatted text.
    
       The formatting of anchors is controlled by `$anchor_label'.
    
     -- Function Reference: $anchor_label anchor_label $identifier $anchor
         $IDENTIFIER is the anchor identifier, $ANCHORis the `@anchor'
         argument.
    
       In the default case, it uses a function reference,  `$anchor'  that
    can do a reference target or link. It is especially relevant for HTML
    but can be used in other formats, it is a rather common element of
    different formats.
    
     -- Function Reference: $anchor anchor $identifier $href $text
              $attributes
         If $IDENTIFIER is not empty, this value should be used to create a
         target for links (typically associated with a name or id attribute
         in HTML).  The $HREF argument specifies a hpertextual reference
         which should be used to link to a target.  In case both
         $IDENTIFIER and  $HREF are given the text produced should be both
         a target for $IDENTIFIER and a link to $HREF.  $TEXT is the text
         to be displayed.  $ATTRIBUTES are additional attributes.  It
         should be reasonable to assume that the attributes are for a `'
         HTML element.
    
       To customize the images produced by `@image', the first possibility
    is to modify the `@IMAGE_EXTENSIONS', which holds a list of filename
    extensions for image files. It is also possible to redefine the
    function used to determine the filename of the image:
    
         Warning: This description is wrong. The API is still moving, so
         don't count on it.
    
     -- Function Reference: $filename image_files $basename $extension
         $BASENAME is the first `@image' argument, $EXTENSION is the
         corresponding `@image' argument. This function reference should
         return an array of image filenames without path that the main
         program should look for.
    
       Last, it is possible to control the formatting of `@image' by
    redefining:
    
     -- Function Reference: $image image $file_path $basename $preformatted
              $file_name $alt_text $width $height $raw_alt $extension
              $working_dir $file_relative_path
         $FILE_PATH is the image file name with the path from the output
         directory to the source manual directory prepended, $BASENAME the
         file name without extension (the first `@image' argument).
         $PREFORMATTED is true if the image appears in preformatted text.
         $FILE_NAME is the file name without path but with extension.
         $ALT_TEXT is the alternate text, it may be undefined. $WIDTH and
         $HEIGHT are the corresponding arguments of `@image', $RAW_ALT is
         the unmodified alt argument of `@image' and $EXTENSION holds the
         corresponding `@image' argument.  $WORKING_DIR is the path to
         working dir relative to the output directory. $FILE_RELATIVE_PATH
         is the file name relative to the $WORKING_DIR.
    
       The formatting of `@sp' is controlled by:
    
     -- Function Reference: $sp sp $number $preformatted
         $NUMBER is the numeric argument of `@sp'.  $PREFORMATTED is true
         if the `@sp' appears in preformatted text.
    
       The formatting of `@acronym' and `@abbr' is controlled by:
    
     -- Function Reference: $acronym acronym_like $acronym_texi
              $acronym_text $with_explanation \@explanation_lines
              $explanation_text $explanation_simply_formatted
         $ACRONYM_TEXI is the acronym argument with texinfo @-commands,
         $ACRONYM_TEXT is formatted.
    
         The other arguments are related with the explanation, the second
         arg of the acronym. $WITH_EXPLANATION is true if the second
         argument of the acronym command is present. If an explanation
         exists, coming from previous `@acronym' or as an arg of this
         command, the other args are defined: \@EXPLANATION_LINES is a
         reference on an array containing the simply fomatted explanation
         lines, $EXPLANATION_TEXT is the explanation text formatted,
         $EXPLANATION_SIMPLY_FORMATTED is the explanation with a light
         formatting, unabling in HTML (or XML) the explanation to be in an
         attribute.
    
    
    File: texi2html.info,  Node: Text,  Next: Strings,  Prev: Anchors images and spaces,  Up: Customizing HTML
    
    7.7 Processing special characters in text
    =========================================
    
    Some characters are processed especially in text: `---', `--', ```' and
    `'''. This is done only if in normal text and not in some commands
    (`@code', `@env'...). A function reference is called to process the
    text and should take care of those constructs.  It may also be used to
    transform the text, for example set it in upper case if it is in `@sc'.
    This function should also take care of protecting special characters
    
     -- Function Reference: $processed_text normal_text $text $in_raw_text
              $in_preformatted $in_code $in_simple $command_stack
         The function processes $TEXT and returns $PROCESSED_TEXT.  The
         other arguments give some information about the context of the
         text.  $IN_RAW_TEXT is true if the text appears in special place
         where there is no formatting, typically in comments.
         $IN_PREFORMATTED is true if in a preformatted environemnt, and
         $IN_CODE is true if in a special command like `@code', `@env' where
         `---', `--', ```' and `''' should not be touched. $IN_SIMPLE is
         true if in string context.   $COMMAND_STACK is an array containing
         the name of the formatting @-command that enclose the text.
    
         In the default case the `---', `--', ```' and `''' constructs are
         expanded if needed and the text is upper-cased if in `@sc'.
         Special characters (`&', `"', `<' and `>' in HTML) are protected
         if needed.
    
       Some characters are special, for example we have  `&', `"', `<' and
    `>' in HTML. In some cases some pieces of text don't go through the
    above function, but still needs to be protected to appear in text.
    This is done by the function associated with the function reference
    
     -- Function Reference: $protected_text protect_text $text
         The function processes the unprotected text $TEXT and returns the
         resulting protected text $PROTECTED_TEXT.
    
       Empty lines are processed by the following function reference, which
    could be usefull if empty lines are to be removed for example
    
     -- Function Reference: $resulting_text empty_line $empty_line $state
         This function processes an $EMPTY_LINE and returns the resulting
         text $RESULTING_TEXT. $STATE is a structure that holds informations
         about the state of the parsing.  Empty lines are left as is by
         default except right after a definition @-command.
    
    
    File: texi2html.info,  Node: Strings,  Next: References,  Prev: Text,  Up: Customizing HTML
    
    7.8 Customizing strings written by `texi2html'
    ==============================================
    
    `texi2html' writes some strings in the generated document at various
    places, at the page footers, on the help page, for special section
    headings, buttons alt text and so on. These strings are customizable.
    The string chosen depends on the language of the document (set by `--document-language', `$LANG'
    or `@documentlanguage'). This is the basis for internationalization as
    it allows for strings translations.
    
       The strings are found in a hash reference, `$LANGUAGES'.  Each key
    is a language code. The associated value is also a hash reference. The
    key is an english string and the associated value is the string
    replacing the english string, if present. For example, we have
    
         $LANGUAGES->{'fr'} = {
                       ' Up ' => 'Plus haut',
         };
    
       It means that whenever the string ` Up ' is to be written and the
    language is `fr', `Plus haut' is written. It is possible to customize
    the english strings by redefining the `en' language hash.
    
       When a string contains a `%' followed by `{' NAME `}' it means that
    the string will be expanded by `texi2html'. For example, if we have
    
         $LANGUAGES->{'fr'} = {
                       'See %{node_file_href}' => 'Voir %{node_file_href}',
         };
    
       `%{node_file_href}' will be expanded to an href for a node in a file
    by `texi2html' in the string. A `%%' will be expanded as `%'.
    
       When a `@documentlanguage' appears in the document and the language
    wasn't set on the command line, it may be convenient for the user to
    redefine some variables based on the new language. There is a function
    reference that may be used for that, it is called each time  a
    `@documentlanguage' is encountered:
    
     -- Function Reference: $translate_names
         This function is called each time `@documentlanguage' is
         encountered and the language wasn't seet on the command line. It
         should be used to retranslate some strings based on the new
         language.
    
       For more on internationalization, see *note Internationalization::.
    
    
    File: texi2html.info,  Node: References,  Next: Alignement commands,  Prev: Strings,  Up: Customizing HTML
    
    7.9 References
    ==============
    
    * Menu:
    
    * Reference to external manual::
    * Internal reference::
    
    
    File: texi2html.info,  Node: Reference to external manual,  Next: Internal reference,  Up: References
    
    7.9.1 Reference to external manual
    ----------------------------------
    
    The references are produced with two function references, one for the
    hypertextual reference construction, the other for the full reference to
    external manual.
    
     -- Function Reference: $href external_href $node $node_identifier
              $xml_node_identifier $manual_file_name
         $NODE is the node name, with @-commands. $NODE_IDENTIFER is the
         node name mapped to an identifier acceptable as a file name.
         $XML_NODE_IDENTIFIER is the node name mapped to an identifier
         acceptable as an XML identifier.  Those identifiers are built as
         explained in *note HTML Xref: (texinfo)HTML Xref, thus allowing
         for cross references to external manuals. $FILE is the manual or
         file name of the external reference. This function should return an
         href leading to the external manual.
    
         The default for this function is to make a reference compatible
         with `makeinfo'  (*note HTML Xref: (texinfo)HTML Xref.).
    
     -- Function Reference: $text external_ref $command $section $book
              $node_and_file $href $cross_ref_name \@args_texi
              \@formatted_args
         This function formats a reference to an external texinfo manual.
         The $COMMAND is the ref command (`ref', `xref' or `pxref', in
         text, at sentence beginning or in parenthesis).  The optionnal
         $SECTION argument is the section in the book and  BOOK is the book
         title.  $NODE_AND_FILE is the node and file name formatted
         according to the convention used in info: `(file)node'. $HREF it
         an hypertextual reference to the distant manual constructed using
         the above function.  $CROSS_REF_NAME is an optionnal cross
         reference name appearing in the reference command.  \@ARGS_TEXI is
         a reference on an array containing the @-command arguments, not
         formatted, with \@FORMATTED_ARGS contains the formatted @-command
         arguments.  This function returns the text corresponding with the
         external html manual reference.  This function returns the full
         formatted text of the external reference.
    
    
    File: texi2html.info,  Node: Internal reference,  Prev: Reference to external manual,  Up: References
    
    7.9.2 Reference to an internal node
    -----------------------------------
    
    A function reference is available for internal references.
    
     -- Function Reference: $text internal_ref $command $href $short_name
              $name $is_section \@args_texi \@formatted_args
         This function formats a reference to a node in the current manual.
         The $COMMAND is the ref command (`ref', `xref' or `pxref', in
         text, at sentence beginning or in parenthesis).  $HREF it an
         hypertextual reference linking to the corresponding node or
         section. $SHORT_NAME and $NAME hold the text for the reference but
         $SHORT_NAME can be the node name which is assumed to be shorter
         than the section name.  $IS_SECTION is a boolean true if the
         reference is a reference to a section.  \@ARGS_TEXI is a reference
         on an array containing the @-command arguments, not formatted,
         with \@FORMATTED_ARGS contains the formatted @-command arguments.
         This function returns the full formatted text of the internal
         reference.
    
    
    File: texi2html.info,  Node: Alignement commands,  Next: Paragraph and preformatted region,  Prev: References,  Up: Customizing HTML
    
    7.10 Commands used for centering and flushing of text
    =====================================================
    
    When a command controlling the alignement of text is used (`@center',
    `@flushleft' and `@flushright'), the main program takes care of opening
    and closing paragraphs. The alignement commands are the key of the `%paragraph_style'
    hash.  The value is used in the function doing the formatting of the
    paragraphs.  *Note Paragraph and preformatted region::.
    
       A function references allows for a customization of the formatting
    of the text appearing in the command block.
    
     -- Function Reference: $result paragraph_style_command $command $text
         $COMMAND is the command name, $TEXT is the text appearing within
         the command. This function returns a formatted text.  The default
         is to return the text unmodified.
    
    
    File: texi2html.info,  Node: Paragraph and preformatted region,  Next: Complex formats,  Prev: Alignement commands,  Up: Customizing HTML
    
    7.11 Formatting (or not) a paragraph and a preformatted region
    ==============================================================
    
    * Menu:
    
    * Paragraph and preformatted formatting::
    * Avoiding paragraphs::
    
    
    File: texi2html.info,  Node: Paragraph and preformatted formatting,  Next: Avoiding paragraphs,  Up: Paragraph and preformatted region
    
    7.11.1 Paragraph and preformatted region formatting
    ---------------------------------------------------
    
    The formatting of a paragraph region or a preformatted region, is
    controlled by function references:
    
     -- Function Reference: $paragraph_text paragraph $text $alignement
              $index $formatting_command $formatting_command_formatted
              \$paragraph_number $format $item_number $enumerate_style
              $number $command_stack_at_end $command_stack_at_begin
         This function formats a paragraph. $TEXT is the text of the
         paragraph, $ALIGNEMENT is the empty string when no alignement
         command has been seen, otherwise it is the current alignement
         command name.  *Note Alignement commands::.  $INDENT holds
         `noindent' or `indent' if the corresponding @-command appeared in
         the paragraph.  $COMMAND_STACK_AT_END and $COMMAND_STACK_AT_BEGIN
         are arrays containing the opened @-commands at end and at
         beginning of the paragraph, latest on top.
    
         The remaining arguments are usefull when the paragraph appears
         within a list or table. It is usefull whenever the paragraph has
         to be formatted differently when appearing in such environments.
         Moreover in that case the format command (`@itemize'...)  may have
         an associated formatting command.  $FORMATTING_COMMAND is this
         formatting command (like `@minus').  $FORMATTING_COMMAND_FORMATTED
         is the command formatted in html in case the formatting command is
         a leading command (like `@minus') which should be leading the
         first paragraph.  \$PARAGRAPH_NUMBER is a reference on the number
         of paragraphs in that format command. The corresponding variable
         should be increased when a paragraph is added. $FORMAT is the
         format command.  *Note Table and list items::.
    
         If the $FORMAT is an enumerate, $ITEM_NUMBER is the number of the
         item in the list, $ENUMERATE_STYLE is the argument of the
         enumerate, $NUMBER is the number or letter corresponding with this
         item.
    
     -- Function Reference: $preformatted_text preformatted $text $style
              $region_name $formatting_command
              $formatting_command_formatted \$preformatted_number $format
              $item_number $enumerate_style $number $command_stack_at_end
              $command_stack_at_begin
         This function formats a preformatted region. $TEXT is the text of
         the preformatted region, $STYLE is the css style associated with
         that preformatted region (*note css::). $REGION_NAME is the name
         of the command opening the preformatted region (`example'..., see
         *note Complex formats::) or a identifier for the preformatted
         context (for example `menu-comment', see *note Menus::).  The
         alignment commands are not taken into account, as the spaces are
         preserved in preformatted regions, you should flush and center by
         hand.  $COMMAND_STACK_AT_END and $COMMAND_STACK_AT_BEGIN are arrays
         containing the opened @-commands at end and at beginning of the
         preformatted region, latest on top.
    
         The remaining arguments are usefull when the preformatted region
         appears within a list or table. It is usefull whenever the
         preformatted region has to be formatted differently when appearing
         in such environments.  Moreover in that case the format command
         (`@itemize'...)  may have an associated formatting command.
         $FORMATTING_COMMAND is this  formatting command (like `@minus').
         $FORMATTING_COMMAND_FORMATTED is the command formatted in html in
         case the formatting command is a leading command (like `@minus')
         which should be leading the first preformatted region.
         \$PREFORMATTED_NUMBER is a reference on the number of preformatted
         regions in that format command. The corresponding variable should
         be increased when a preformatted region is added. $FORMAT is the
         format command.  *Note Table and list items::.
    
         If the $FORMAT is an enumerate, $ITEM_NUMBER is the number of the
         item in the list, $ENUMERATE_STYLE is the argument of the
         enumerate, $NUMBER is the number or letter corresponding with this
         item.
    
    
    File: texi2html.info,  Node: Avoiding paragraphs,  Prev: Paragraph and preformatted formatting,  Up: Paragraph and preformatted region
    
    7.11.2 Avoiding paragraphs in formats
    -------------------------------------
    
    It is possible to avoid that a format closes the previous paragraph or
    preformatted region and reopens one, by putting the format command in a
    hash, `%format_in_paragraph' with a true value. This only makes sense
    for few commands since otherwise the nesting of formats and paragraphs
    could become wrong.
    
       If the value of `%no_paragraph_commands' associated with a command is
    true, no paragraph is started by the command if outside of a paragraph
    (after an empty line, for example). If the value is set to 0, it will
    start a paragraph. If the value is not set, reasonable defaults are set.
    
       It is also possible to stop a paragraph when an @-command happens by
    putting the @-command in the `%stop_paragraph_command' hash associated
    with a true value.
    
    
    File: texi2html.info,  Node: Complex formats,  Next: Lists tables,  Prev: Paragraph and preformatted region,  Up: Customizing HTML
    
    7.12 Formatting of complex formats (`@example', `@display'...)
    ==============================================================
    
    Here we see how a whole complex format is formatted. For the formatting
    of the text, see *note Paragraph and preformatted region::.
    
       The formatting of the complex formats is ultimately controlled by a
    function, however the default for this function uses a hash reference
    and changing the hash reference values should be enough in most cases.
    This hash reference is called `$complex_format_map'. It has a key for
    each of the complex format commands (`example', `smallexample', `lisp',
    `smalllisp', `display', `smalldisplay', `format', `smallformat').
    
       The associated value is also a reference on a hash. The keys are:
    
    `begin'
         An eval of `begin' should lead to the beginning of the formatted
         HTML.
    
    `end'
         An eval of `end' should lead to the end of the formatted HTML.
    
    `class'
         The HTML class. If not defined, the command name.
    
    `pre_style'
         The preformatted style. If not defined the corresponding CSS style
         is used.
    
    `style'
         If the associated value is `code', the format is assumed to be in
         code style, where with `---', `--', `''' and  ```' kept as is.  If
         the key is absent the format  inherits the code style and the font
         from the enclosing context.
       The enclosed text will be formatted as described in *note Paragraph
    and preformatted region::, and the name of the complex format will be
    available to the function formatting the text.
    
       If you aren't satisfied with this scheme, you can redefine the
    following function reference for a better control over the complex
    format formatting:
    
     -- Function Reference: $complex_format_text complex_format
              $format_name $preformatted_text
         $FORMAT_NAME is the complex format name, $PREFORMATTED_TEXT is the
         text allready formatted as described in *note Paragraph and
         preformatted region::.  This function returns the whole complex
         format.
    
    
    File: texi2html.info,  Node: Lists tables,  Next: Definitions,  Prev: Complex formats,  Up: Customizing HTML
    
    7.13 Customizing the formatting of lists and tables
    ===================================================
    
    The formatting of lists and tables is done at two levels:
       * At the level of the whole region (table or list),
    
       * At the level of the individual items, rows or cells of the list or
         table.
    
    * Menu:
    
    * Table and list items::
    * Whole table list::
    
    
    File: texi2html.info,  Node: Table and list items,  Next: Whole table list,  Up: Lists tables
    
    7.13.1 Formatting individual table and list items
    -------------------------------------------------
    
    In texinfo it is possible to give `@itemize' or table command (hereafter
    called a "format command") a "formatting command".  For example
    `@minus' is the formatting command here:
         @table @minus
    
       The default is to apply the command to the text item, however it is
    possible to avoid it.  The hash `%special_list_commands' has an entry
    for each of the format command. Each of these entries is a hash
    reference. If a formatting command is a key of the hash reference, then
    the formatting command is not applied to the text item for that format
    command. For example, if we have:
    
         $special_list_commands{'itemize'} = { 'bullet' => '' };
    
       and we have the following `@itemize':
         @itemize @bullet
         @item an item
         @end itemize
    
       then `@bullet' will not be applied to `an item'.
    
       More control of the text before formatting of the line or the item is
    achieved with the following function reference:
    
     -- Function Reference: ( $result_line, $open_command)
              format_list_item_texi $format $line $prepended $command
         The $FORMAT is the list or table @-command, $LINE is the item
         line, $COMMAND is the "format command", $PREPENDED is set to the
         text folllowing the "format command" on the format argumlent line.
         The $RESULT_LINE replaces the item argument, and if $OPEN_COMMAND
         is true, the "format command" is opened for the line.
    
    _lists_
         The items of lists are formatted using the following function
         reference:
    
          -- Function Reference: $list_item list_item $text $format
                   $command $formatted_command $item_number
                   $enumerate_style $number $prepended_texi
                   $prepended_formatted
              This function formats the text between `@item' commands. $TEXT
              is the text corresponding with the item. $FORMAT is the type
              of format, `itemize' or `enumerate'. $COMMAND is the
              formatting command given in argument to `@itemize',
              $FORMATTED_COMMAND is this command formatted if it is a
              leading command, like `@minus'.
    
              If the $FORMAT is an enumerate, $ITEM_NUMBER is the number of
              the item in the list, $ENUMERATE_STYLE is the argument of the
              enumerate, $NUMBER is the number or letter corresponding with
              this item.
    
              If the $FORMAT is an itemize, $PREPENDED_TEXI is the text that
              appeared on the itemize line, maybe after the formatting
              command (if any), and $PREPENDED_FORMATTED is the
              corresponding text, formatted.
    
    _two column tables_
         The two columns tables (`@table', `@ftable' and `@vtable'), items
         are formatted using two function references, one for the first
         line located on the `@item' line corresponding with the first
         column, the other for the text appearing on the following lines,
         corresponding with the second column text.
    
          -- Function Reference: $table_item table_item $item_text
                   $index_label_text $format $command $formatted_command
                   $command_stack $text_formatted
                   $text_formatted_leading_spaces
                   $text_formatted_trailing_spaces $item_command
              This function is used to format the text on the `@item' line.
              $TEXT_ITEM is the text line. In case there is an index entry
              associated with the `@item' (as with `@ftable' and
              `@vtable'), $INDEX_LABEL_TEXT is the text inserted at the
              place where an index entry appears. *Note Index entry place::.
              $FORMAT is the type of format, `table', `ftable' or `vtable'.
              $COMMAND is the formatting command given in argument to the
              table format command, $FORMATTED_COMMAND is this command
              formatted if it is a leading command, like `@minus'.
              $COMMAND_STACK is an array with all the @-commands opened,
              latest on top.  $TEXT_FORMATTED is the text formatted by the
              formatting command if the command is a command with braces
              like `@code'.  $TEXT_FORMATTED_LEADING_SPACES and
              $TEXT_FORMATTED_TRAILING_SPACES are the spaces removed before
              closing the format.  $ITEM_COMMAND is the item command,
              `@item' or `@itemx'.
    
          -- Function Reference: $table_line table_line $text
              This function is used to format the text on the lines
              following the `@item' line. $TEXT is the corresponding text.
    
    _multitable_
         The multitable elements formatting is controlled by the functions
         associated with two function references. One for a cell, and the
         other for a row.
    
          -- Function Reference: $multitable_cell cell $text $item_command
                   \@columnfractions \@prototype_row \@prototype_lengths
                   $column_number
              This function is used to format the text of a multitable
              cell, the text following a `@item' or a `@tab'.  $TEXT is the
              corresponding text. $ITEM_COMMAND is the command used to
              introduce the row, such that it is possible to distinguish
              between `@item' and `@headitem'.  \@COLUMNFRACTIONS is a
              reference on an array containing the `@columnfraction'
              arguments, if any, and \@PROTOTYPE_ROW is a reference on an
              array containing the row prototypes given on the
              `@multitable' line, if any.  \@PROTOTYPE_LENGTHS array
              contains the lengths of the row prototypes formatted.
              $COLUMN_NUMBER is the maximal number of columns.
    
          -- Function Reference: $multitable_row row $text $item_command
                   \@columnfractions \@prototype_row \@prototype_lengths
                   $column_number
              This function is used to format a multitable row. $TEXT is
              the row text, with cells allready formatted with the `$cell'
              function reference. $ITEM_COMMAND, \@COLUMNFRACTIONS,
              \@PROTOTYPE_ROW, \@PROTOTYPE_LENGTHS and $COLUMN_NUMBER are
              the same than in the function reference above.
    
    
       In the default case, this function is interlinked with
    `$begin_format_texi' (*note Customizing format opening::) and
    `@multitable' formatting since a stack of possible nested multitables
    is kept to know the cell number.
    
    
    File: texi2html.info,  Node: Whole table list,  Prev: Table and list items,  Up: Lists tables
    
    7.13.2 Formatting of a whole table or list
    ------------------------------------------
    
    If the Texinfo command is a key of the `%format_map', the associated
    value is used to specify the formatting of the construct, otherwise a
    function is called.  The value in `%format_map' associated with a
    command is interpreted similarly with values associated with more
    simpler commands:
    
       * If the text is a word, it is considered to be an HTML element
         name, and the whole table or list is enclosed between the element
         opening and the element closing.
    
       * If the text is a word followed by some text, the word and is
         interpreted as above, and the text is considered to be the
         attributes text of the element.
    
       * If the text is empty nothing is added to the text.
    
       In case the `%format_map' isn't used, a function reference called
    `$table_list' should be redefined, the associated function will be
    called each time a command isn't found in `%format_map'.
    
     -- Function Reference: $whole_table_list table_list $format_command
              $text $command $formatted_command $item_nr $enumerate_style
              $prepended_texi $prepended_formatted \@columnfractions
              \@prototype_row \@prototype_lengths $column_number
         $FORMAT_COMMAND is the Texinfo command name, $TEXT is the
         formatted items. $COMMAND is the "format command" given in argument
         to the format command, $FORMATTED_COMMAND is the same, but
         formatted.  $PREPENDED_TEXI is the remaining text on the format
         command line, $PREPENDED_FORMATTED is the same, but formatted.
         Only relevant in `@enumerate', $ITEM_NR is the item number, and
         $ENUMERATE_STYLE is the `@enumerate' style. Only relevant in
         `@multitable' \@COLUMNFRACTIONS is a reference on an array
         containing the `@columnfraction' arguments, if any,
         \@PROTOTYPE_ROW is a reference on an array containing the row
         prototypes given on the `@multitable' line, if any,
         \@PROTOTYPE_LENGTHS array contains the lengths of the row
         prototypes formatted and $COLUMN_NUMBER is the maximal number of
         columns.
    
       If you still want to use `%format_map' but differently from the
    default, it is possible to redefine the following function reference:
    
     -- Function Reference: $whole_table_list format $command $format $text
         $COMMAND is the @-command, $FORMAT is the entry associated with
         $COMMAND in `%format_map'. $TEXT is the formatted items.
    
    
    File: texi2html.info,  Node: Definitions,  Next: Headings,  Prev: Lists tables,  Up: Customizing HTML
    
    7.14 Definition commands formatting
    ===================================
    
    The formatting of definition commands is controlled by a main hash, 3
    strings and another hash, and and five functions. The mainhash
    describes how the text on the definition line is interpreted, the
    functions control the formatting of the definition line and the
    definition function text.
    
    * Menu:
    
    * Definition line::
    * Definition formatting::
    
    
    File: texi2html.info,  Node: Definition line,  Next: Definition formatting,  Up: Definitions
    
    7.14.1 Customizing the interpretation of a definition line
    ----------------------------------------------------------
    
    The keys of the hash `%def_map' are definition command names.  There
    are two types of entries:
    
       * If the command is a shortcut for another definition command the
         value is a text and the definition command is replaced by the text.
    
         For example if we have:
              $def_map{'deftruc'} = '@defvr {A truc}';
    
         and a line like
              @deftruc var
    
         the line will be transformed in
              @defvr {A truc} var
    
       * If the command isn't a shortcut, it is associated with an array
         reference. The first element is `f', `v' or `t' corresponding with
         the index type (`f' for function, `v' for variable, `t' for type).
    
         The remaining of the array describes how to interpret the text
         following the definition command on the definition command line.
         The entry item specify what corresponds with the next bracketed
         item or word. Currently the possibilities are `category', `name',
         `type', `class', `arg' and `argtype'.  `arg' means that the
         arguments are not mixed with type definitions, with `argtype'
         types are mixed with definitions. When there is no `arg' nor
         `argtype' it is the same than  `argtype' (like makeinfo).
    
         For example if we have
              def_map{'defvr'} = [ 'v', 'category', 'name' ];
    
         The first bracketed item following `@defvr' is considered to be
         the category and the next one is the name. The index associated
         with the definition line is the variables index.
    
       Some characters are special with regard with definition parsing, they
    are delimiters, the can have a role in definition argument
    determination, and also hae a special meaning in arguments parsing.
    This is not very well documented in the texinfo manual, so it is
    subject to change. Strings allow to determine the delimiters:
    
    `$def_argument_separator_delimiters'
         Characters that separate arguments, currently `()[],'.
    
    `$def_always_delimiters'
         Character that are always delimiters, if they appear in a type or a
         parameter, `()[]'.
    
    `$def_in_type_delimiters'
         Character that are considered as delimiters only if in a type. In
         a parameter they are part of the parameter.
    
    
    File: texi2html.info,  Node: Definition formatting,  Prev: Definition line,  Up: Definitions
    
    7.14.2 Customization of the definition formatting
    -------------------------------------------------
    
    Five functions are used when formatting a definition command:
    
    *category name*
          -- Function Reference: $category definition_category $category
                   $class $style $command
              This function precise a category name associating a class
              $CLASS (if given) with $CATEGORY. The $STYLE of the
              definition may be `f', for function, `v', for variable or `t',
              for type. The $COMMAND is the definition @-command.
    
          -- Function Reference: $entry definition_index_entry $name $class
                   $style $command
              This function precise a name associating a class $CLASS (if
              given) with $NAME. This is used to do an index enntry
              associated with th edefinition command. The $STYLE of the
              definition may be `f', for function, `v', for variable or `t',
              for type. The $COMMAND is the definition @-command.
    
    *formatting of the definition line*
          -- Function Reference: $line def_line $class_category_class $name
                   $type $arguments $index_label \@arguments_array
                   \@arguments_type_array \@unformatted_arguments_array
                   $command $class_name $category $class $style
                   $original_command
              This function formats the definition line. $CLASS_CATEGORY is
              the category formatted with `$definition_category', $NAME,
              $TYPE and ARGUMENTS are the element of the definition line.
              $INDEX_LABEL is the text inserted at the place where an index
              entry appears.  *Note Index entry place::.  \@ARGUMENTS_ARRAY
              is an array holding the definition arguments, formatted.
              \@ARGUMENTS_TYPE_ARRAY holds the type of the definition
              arguments, like `name', `type' and similar arguments,
              `paramtype'.  `delimiter' and  `param'.
              \@UNFORMATTED_ARGUMENTS_ARRAY holds the arguments without
              @-command substitution. $COMMAND is the definition command,
              after substitution.  $CLASS_NAME is the class applied on
              name, formatted as specified in `definition_index_entry'.
              $CATEGORY and $CLASS are the corresponding arguments. $STYLE
              corresponds with the index style, as explained above.
              $ORIGINAL_COMMAND is the unmodified definition @-command.
    
    *definition text*
          -- Function Reference: $definition_text def_item $text
              This function formats the definition text, $TEXT.
    
    *the whole definition*
          -- Function Reference: $definition def $text
              This function formats the whole definition. The definition
              line and text formatted by the above functions are in $TEXT.
    
    
    
    File: texi2html.info,  Node: Headings,  Next: Special regions,  Prev: Definitions,  Up: Customizing HTML
    
    7.15 Customizing headings formatting
    ====================================
    
    A function controls the formatting of sectioning element headings, with
    the corresponding function reference:
    
     -- Function Reference: $heading_text heading \%element_reference
         The \%ELEMENT_REFERENCE is a reference on a hash corresponding
         with the sectioning element. The following keys are of interest:
        `text'
              The heading text
    
        `name'
              The heading text without section number
    
        `node'
              true if the sectioning element is a node without associated
              structuring command
    
        `level'
              The level of the element in the document tree. `0' is for
              `@top', `1' for `@chapter' and so on
    
        `tag_level'
              the sectioning element name, with `@raisesections' and
              `@lowersections' taken into account
    
        `top'
              true if it is the top element
    
       It is also possible to customize the heading text with section number
    with the following function reference (called for headings and nodes):
    
     -- Function Reference: $result_texi heading_texi $heading_command
              $heading $number
         $HEADING_COMMAND is the sectioning @-command of that heading.
         $HEADING is the texinfo for that heading. $NUMBER is the heading
         number classicaly computed with dots between numbers, and letters
         for top level appendix numbering. This function should return the
         texinfo text corresponding with the numbered heading.
    
       The label associated with the heading that can appear before the
    heading itself and even before the navigation panel is customized with
    the following function reference:
    
     -- Function Reference: $element_label element_label $identifier
              \%element_reference $command $unformatted_line
         $IDENTIFIER is the identifier associated with the heading.
         \%ELEMENT_REFERENCE is the same as above. $COMMAND is the @-command
         appearing on the line, and $UNFORMATTED_LINE is the line,
         unformatted.
    
       Additionally, for `@node' and sectionning @-commands the formatting
    of the label, navigation panel and heading is controlled by:
    
     -- Function Reference: $element_heagin_text element_heading
              \%element_reference $command $command_texi_arg $formatted_arg
              $in_preformatted $one_section $element_heading $first_in_page
              $is_top $previous_is_top $unformatted_line $element_id
              $new_element
         \%ELEMENT_REFERENCE is the same as above. $COMMAND is the heading
         @-command.  $COMMAND_TEXI_ARG is the argument of the @-command,
         unformatted. $FORMATTED_ARG is is the argument of the @-command,
         formatted. $IN_PREFORMATTED is true if in preformatted
         environment. $ONE_SECTION is true if there is only one section.
         $FIRST_IN_PAGE is true if this is the first heading  in a page.
         $IS_TOP is true if the heading is considered as a top element
         heading.  $PREVIOUS_IS_TOP is true if the previous helement was a
         top element.  $UNFORMATTED_LINE holds the whole line, unformatted.
         $ELEMENT_ID is the id of the heading. $NEW_ELEMENT is true if the
         heading is the first of an element block.
    
    
    File: texi2html.info,  Node: Special regions,  Next: Menus,  Prev: Headings,  Up: Customizing HTML
    
    7.16 Formatting of special regions (`@verbatim', `@cartouche', `@quotation')
    ============================================================================
    
    Regions corresponding with raw text, like `@verbatim', `@html' or
    `@tex' are formatted according to the following function reference:
    
     -- Function Reference: $raw_region raw $command $text
         $COMMAND is the command name, $TEXT is the raw text.
    
       If LaTeX2HTML is used, `@tex' regions are handled differently,
    (*note Bypassing normal formatting::).
    
       The `@cartouche' command formatting is controlled by the function
    reference:
    
     -- Function Reference: $cartouche cartouche $text
         $TEXT is the text appearing within the cartouche.
    
       The formatting of `@quotation' and `@smallquotation' is controlled
    by two function references.  The first one is usefull in case the
    `@quotation' has an argument, as it allows to prepend a string to the
    quotation text:
    
     -- Function Reference: $prepended_string quotation_prepend_text
              $command $text
         $COMMAND is the @-command.  $TEXT is the argument of the quotation
         with @-commands not interpreted. This function can return a string
         which will be prepended to the quotation text.
    
       The whole quotation is formatted by:
    
     -- Function Reference: $quotation quotation $command $quotation_text
              $argument_text $argument_text_texi
         $COMMAND is the @-command.  $QUOTATION_TEXT is the quotation text,
         formatted, with the text prepended by the function above.
         $ARGUMENT_TEXT is the argument of the `@quotation', formatted.
         $ARGUMENT_TEXT_TEXI is the argument of the `@quotation', simply
         formatted.
    
    
    File: texi2html.info,  Node: Menus,  Next: Indices,  Prev: Special regions,  Up: Customizing HTML
    
    7.17 Menu formatting
    ====================
    
    There are two possibilities for menu formatting:
    
       * format the whole menu in a preformatted environment, like in *note
         Complex formats::;
    
       * format the menu in table with more specialized formatting for each
         part of the menu;
    
       The simple formatting in a preformatted is used if `$SIMPLE_MENU' is
    true, otherwise the format with tables is used (this is the default).
    
       If `$USE_ACCESSKEY' is set, the `accesskey' attribute is used in
    anchors. In that case the `%BUTTONS_ACCESSKEY' hash is used for the
    access key.
    
       To understand how the formatting of menus is controlled, the
    different parts of a menu are first described, then how to control the
    formatting of each of these parts, for each possible formatting.
    
    * Menu:
    
    * Menu parts::                  A menu consists in menu entry and menu
                                    comments
    * Menu components formatting::
    * Simple menu formatting::      formatting of a whole menu in a simple
                                    preformatted environement
    * Table menu formatting::       formatting of a whole menu in a
                                    table environment
    
    
    File: texi2html.info,  Node: Menu parts,  Next: Menu components formatting,  Up: Menus
    
    7.17.1 The structure of a menu
    ------------------------------
    
    In `texi2html', a menu is considered to be composed of 2 parts, the
    "menu entries" and the "menu comments". Menu entries are further
    divided in an "entry link" and optionnaly an "entry description".  The
    entry link consists in a node name and an optionnal menu entry name.
    
       A menu entry begins with `*' at the beginning of the line. It begins
    with the entry link, followed by the description. The description spans
    until the next menu entry, or an empty line not contained within a
    command block which begun in the description. An empty line or starts a
    menu comment, which spans until the next menu entry.
    
       Here is an illustration of these rules:
    
         @menu
         * entry name: node name.        description begins
            description continues
         * another menu entry::
            description begins
                             description continues
    
            A menu comment, after an empty line
    
         * node::                        description begins
         still in description.
    
         * last entry::         description begins @emph{text
    
         of the description, even if there is an empty line,
         because we are in @emph}.
         @end menu
    
    
    File: texi2html.info,  Node: Menu components formatting,  Next: Simple menu formatting,  Prev: Menu parts,  Up: Menus
    
    7.17.2 The formatting of the different menu components
    ------------------------------------------------------
    
    If in a preformatted context (and `$SIMPLE_MENU' isn't set), the menu
    link and description are put in the same preformatted environment.
    This can be avoided with `$SEPARATE_DESCRIPTION'.
    
       Two function references are associated with the formatting of the
    different parts of a menu:
    
     -- Function Reference: $link menu_link $section \%state $href $node
              $name $ending $has_name $command_stack $preformatted
         $SECTION is the section name corresponding with the link, $HREF is
         the link hypertextual reference. $HREF may be absent. \%STATE
         holds informations about the current context.  $NODE is the node
         name, $NAME is the name of the node. $ENDING is the text ending
         the link entry, in general `::' followed by some spaces.
         $HAS_NAME is true if the entry has an explicit name, otherwise
         $NAME has been constructed using the formatted node name.
         $COMMAND_STACK is an array containing the commands enclosing the
         menu link. It is used in the default case to detect if the menu
         link is right in the `@menu' or not, since if it is not right
         below the menu the formatting is simpler.  $PREFORMATTED is true
         if in preformatted context.  *Note Three contexts::.
    
       This command is not called if `$SIMPLE_MENU' is set.
    
     -- Function Reference: $description menu_description $description_text
              \%state $element_text
         $DESCRIPTION_TEXT is the text of the menu description.  The
         formatted link is also here if in preformatted context and
         `$SEPARATE_DESCRIPTION' is not set.  \%STATE should be used
         similarly than for the menu link. $ELEMENT_TEXT is the heading of
         the element associated with the node.  $COMMAND_STACK and
         $PREFORMATTED are the same than for the menu link.
    
       The "menu comment" part is formatted like a normal command, called
    `menu_comment'. It is only used if not in preformatted environment and
    if just below a `@menu' since otherwise one cannot tell if it is a menu
    commment or normal text.  The default is to have it be formatted like a
    *note Complex formats::, with
         $complex_format_map->{'menu_comment'} =
         {
            'begin' => q{"
    "}, 'pre_style' => "$MENU_PRE_STYLE", 'class' => 'menu-comment', }  File: texi2html.info, Node: Simple menu formatting, Next: Table menu formatting, Prev: Menu components formatting, Up: Menus 7.17.3 Simple menu formatting in a preformatted environment ----------------------------------------------------------- If the menu is to be formatted in a single preformatted environment, an entry for `menu' and `detailmenu' should be added to the `$complex_format_map' hash reference (*note Complex formats::). In the default case, if the user didn't add an entry himself, a very simple entry is used, with: $complex_format_map->{'menu'} = { 'begin' => q{''} , 'end' => q{''}, 'pre_style' => "$MENU_PRE_STYLE", 'class' => 'menu-preformatted' };  File: texi2html.info, Node: Table menu formatting, Prev: Simple menu formatting, Up: Menus 7.17.4 The formatting of the menu in a table -------------------------------------------- In the default case, the name of the section corresponding with the node is used instead of the node name. If `$NODE_NAME_IN_MENU' is true, however, node names are used. If `$AVOID_MENU_REDUNDANCY' is true and menu entry equal menu description the description isn't printed. This is the default. Likewise, if node or section name equal entry name, do not print entry name. A symbol, `$MENU_SYMBOL' is put at the beginning of menu entries when the node name is used. The default is `•'. If `$UNNUMBERED_SYMBOL_IN_MENU' is true it is also put at the beginning of unnumbered section names. This is not done by default. The menu comments are considered to be preformatted text. The style associated with this preformatted text is determined by `$MENU_PRE_STYLE'. Default is `font-family: serif'. The entry similar with an entry in `$complex_format_map' (*note Complex formats::) used when the menu appears in a preformatted enviroment is in `$MENU_PRE_COMPLEX_FORMAT', and, in the default case is: $MENU_PRE_COMPLEX_FORMAT = { 'pre_style' => $MENU_PRE_STYLE, 'class' => 'menu-preformatted' }; The css class associated with menu comments is `menu-comments'. The following function reference controls the formatting of a wole menu or a detailmenu in that case: -- Function Reference: $menu menu_command $command $menu_components_text $COMMAND is the menu command, currently `menu' or `detailmenu'. $MENU_COMPONENTS_TEXT is the formatted menu components text, obtained as explained above.  File: texi2html.info, Node: Indices, Next: Floats and lists of floats, Prev: Menus, Up: Customizing HTML 7.18 Indices formatting ======================= Two different things needs to be handled for indices formatting, the place where the index term appears, the index entry, and the index list itself. The indexing commands like `@cindex' determines where index entries appear, and the index list is printed with a `@printindex' command. * Menu: * Index entry place:: Index entries in the main document are targets for hypertext references * Index list:: Customizing the formatting of the index list  File: texi2html.info, Node: Index entry place, Next: Index list, Up: Indices 7.18.1 Formatting of index entries ---------------------------------- Index entry places in the main text may be the target for hypertext references. Their formatting is controlled by the function associated with the following function reference: -- Function Reference: $target index_entry_label $identifier $preformatted $entry $index_name $index_command $texi_entry $formatted_entry $IDENTIFIER should be used to create a target for links (typically associated with a name or id attribute in HTML). $PREFORMATTED is true if the index entry appeared in preformatted text. $ENTRY is the index entry with all the @-commands removed. $INDEX_NAME is the index name, $COMMAND is the index command which may be a index command like `@cindex', but also a definition or a table. $TEXI_ENTRY is th eindex entry with @-commands, and $FORMATTED_ENTRY the entry formatted. Regular index entries are (like `@cindex') are formatted using the following function reference: -- Function Reference: $index_entry index_entry_command $command $index_name $label $entry_texi $entry_formatted $COMMAND, $INDEX_NAME, $ENTRY_TEXI and $ENTRY_FORMATTED are the same as above, and $LABEL is what could be used as a label, formatted using the function above.  File: texi2html.info, Node: Index list, Prev: Index entry place, Up: Indices 7.18.2 Customizing the formatting of index lists ------------------------------------------------ There is an elaborate default index formatting in texi2html, with index summary by letter linking to index entries grouped by letters too, with the possibility of index pages split accross files. This system may be completly bypassed by redefining the function reference that is called when `@printindex' is encountered: -- Function Reference: $index_text printindex $index_name $INDEX_NAME is the index name appearing on the `@printindex' line. The index formatted should be returned by this function reference. If the default index formatting is used, there are still possibilities to customize part of the formatting. The index entries are sorted alphabetically. A whole index list is considered to be composed of letter entries. A letter entry is composed by all the index entries beginning with that letter. A letter may be a non alphabetical character, but we call it letter here. An index summary appears at the beginning and at the end of an index list, and should be used to jump directly to a letter entry. Indices lists may be split across pages, thus the different letters may appear on different files. The number of index entries appearing on each page is determined by a variable `$SPLIT_INDEX' if set. The default is to split indices after 100 entries. The formatting of all these elements is controlled by the following function references: _formatting of a letter in a summary_ -- Function Reference: $letter summary_letter $letter $file $identifier This function is used to format a letter appearing in a summary, refering to a letter entry in the index list. $LETTER is the letter. $FILE is the file name where the letter entry appears. More precisely, it is empty when the letter entry is on the same page than the summary, it contains the file name when the index page is split accross page. $IDENTIFIER is an identifier for the target letter entry. _formatting of a summary_ -- Function Reference: $summary index_summary \@alphabetical_letters \@nonalphabetical_letters \@ALPHABETICAL_LETTERS and \@NONALPHABETICAL_LETTERS contain the formatted summary letters, formatted with the above function. _formatting of an index entry_ -- Function Reference: $entry index_entry $entry_href $entry_text $section_href $section_heading $ENTRY_HREF is a reference to the place where the index entry appeared, $ENTRY_TEXT is the corresponding text. $SECTION_HREF is a reference to the beginning of the sectioning element containing the index entry, $SECTION_HEADING is the heading of the element. _formatting of letter entry_ -- Function Reference: $letter_entry index_letter $letter $identifier $index_entries_text This function formats a letter entry, consisting in all the index entries beginning with this letter. $LETTER is the letter, $IDENTIFIER should be used to create a target for links (typically links from summaries), and $INDEX_ENTRIES_TEXT is the text of the index entries formatted as described above. _formatting of whole index_ -- Function Reference: $index print_index $index_text $index_name $INDEX_TEXT is the text of all the index entries grouped by letter appearing in that page formatted as above. It is undef if there are no entries or theindex name isn't known. INDEX_NAME is the name of the index, the argument of `@printindex'.  File: texi2html.info, Node: Floats and lists of floats, Next: Footnotes, Prev: Indices, Up: Customizing HTML 7.19 Floats and lists of floats =============================== Floats appear in the `@float' environment, optionaly with a style and a label, and with optionnal `@caption' and `@shortcaption'. Their list appear after a `@listoffloats'. A hash reference is associated with each float, it is available in some formatting functions. The keys are: `caption_texi' `shortcaption_texi' A reference on an array containing the caption or shortcaption lines, with texi @-commands. `style_texi' The style with texi @-commands. `style_id' The unique identifier associated with the style. `style' The style formatted. `nr' The number with the same conventions than makeinfo (use the chapter number a dot and then the number of the float of that style in the chapter, or an absolute number if in unnumbered). `chapter_nr' The number of the chapter containing the float. `nr_in_chapter' The number of the float in the chapter. `absolut_nr' The number of the float in the document. `texi' The label with @-commands. `name' The label formatted. `id' The unique identifier associated with the label. Usefull to make an anchor or a reference. `target' The target that can be used to refer to that float. `element' A reference on a structure representing the element the float appear in. * Menu: * Floats:: Formatting of floats * Lists of floats:: Formatting the lists of floats  File: texi2html.info, Node: Floats, Next: Lists of floats, Up: Floats and lists of floats 7.19.1 Formatting a float ------------------------- First there is an occasion to construct a texinfo text for the caption, using the caption texinfo lines and the informations in the float structure. The returned lines will be formatted in the main program. A function reference is used here: -- Function Reference: (\@caption_lines_returned, \@shortcaption_lines_returned) caption_shortcaption \%float \@caption_lines \@shortcaption_lines \%FLOAT is the structure defined above. \@CAPTION_LINES and \@SHORTCAPTION_LINES are references on arrays containing the texinfo lines for caption and short caption. \@CAPTION_LINES_RETURNED and \@SHORTCAPTION_LINES_RETURNED are references on an array containing the texinfo lines for the caption and shortcaption. Then the float is formatted with the following function reference: -- Function Reference: $text float $float_text \%float $caption_text $shortcaption_text $FLOAT_TEXT is the text appearing within the `@float', formatted. \%FLOAT is still the structure defined above. $CAPTION_TEXT and $SHORTCAPTION_TEXT are the caption and short caption build with the above function and formatted. It is also possible to do something when a caption or a shortcaption appear with t hefollowing function reference: -- Function Reference: $text caption_shortcaption_command $command $formatted_caption \@texi_lines \%float $COMMAND is the @-command, `caption' or `shortcaption'. $FORMATTED_CAPTION is the caption text, formatted, while \@TEXI_LINES is a reference on an array containing the caption lines, this time without any formatting. \%FLOAT is still the structure defined above. In the default case this function reference returns an empty string.  File: texi2html.info, Node: Lists of floats, Prev: Floats, Up: Floats and lists of floats 7.19.2 Formatting lists of floats --------------------------------- A list of floats is introduced by `@listoffloats'. The argument of `@listoffloats' is the "style". First the style texinfo can be modified with the following function reference: -- Function Reference: $style_texi_returned listoffloats_style $style_texi $STYLE_TEXI is the `@listoffloats' argument with texinfo @-commands kept. It is possible to make changes to the $STYLE_TEXI and return a modified string, still with @-commands. The modified string is formatted in the main program. After that, for each of the floats with that style, first there is a possibility to modify the float style and the float caption before they are formatted in the main program, with the following function references: -- Function Reference: $float_style_texi_returned listoffloats_float_style $style_texi \%float $STYLE_TEXI is the style, and \%FLOAT is the structure described above. This function reference returns a style to be formatted in the main program. -- Function Reference: $caption_texi_returned listoffloats_caption \%float \%FLOAT is the structure described above. This function reference returns a caption to be formatted in the main program. Each entry is formatted by: -- Function Reference: $listoffloats_entry listoffloats_entry $style_texi \%float $float_style $caption $href $STYLE_TEXI is the style with @-commands, $FLOAT_STYLE is the style returned by the above function and formatted. $CAPTION is the caption returned by the above function formatted. \%FLOAT is the structure corresponding with the float, and $HREF is an href pointing to the float location. Lastly, the whole `@listoffloats' is formatted by: -- Function Reference: $listoffloats listoffloats $style_texi $style \@listoffloats_entries $STYLE_TEXI is the style with @-commands, $STYLE is the style returned by the above function and formatted. The array reference \@LISTOFFLOATS_ENTRIES holds the entries formatted by the above function.  File: texi2html.info, Node: Footnotes, Next: Customizing format opening, Prev: Floats and lists of floats, Up: Customizing HTML 7.20 Customizing the footnotes formatting ========================================= Each footnote is associated with a footnote entry. Several footnote entries are grouped in a footnote section. When a footnote appears, two things must be formatted: in the main text the place where the footnote appear and the footnote text. Two functions, with corresponding function references control the formatting of the footnotes: -- Function Reference: (\@lines $text_for_document) foot_line_and_ref $number_in_doc $number_in_page $footnote_id $place_id $document_file $footnote_file \@lines \%state $NUMBER_IN_DOC is the footnote number in the whole document, $NUMBER_IN_PAGE is the footnote number in the current page. $FOOTNOTE_ID is an identifier for the footnote in the footnote text which should be used to make target for references to that footnote, while $PLACE_ID is an identifier for the location of the footnote in the main document. Similarly, $DOCUMENT_FILE is the file name of the file containing the text where the footnote appears in the main document, while $FOOTNOTE_FILE is the file name of the file where the footnote text appears. \@LINES is a reference on an array containing the footnote text lines, allready formatted. And \%STATE holds informations about the context at the footnote place in the main document. As usual the most usefull entry is `preformatted' which is true if the footnote appears in a preformatted context. This function returns a reference on an array, \@LINES containing the updated footnote text for the footnote entry, and $TEXT_FOR_DOCUMENT, the text appearing at the footnote place in the main document, linking to the footnote entry. The following function is only used when footnotes are at the bottom of a page and the document is split. For customization of the footnotes page in case they are on a separated page or section, *note Special pages layout::. For the determination of the footnote locations, *note Page layout options::. -- Function Reference: foot_section \@footnotes_lines This function formats a group of footnotes. \@FOOTNOTES_LINES is a reference on an array holding the lines of all the footnote entries formatted as explained above. This function modifies the reference.  File: texi2html.info, Node: Customizing format opening, Next: Bypassing normal formatting, Prev: Footnotes, Up: Customizing HTML 7.21 Customizing format opening =============================== The following function reference is called when a format is opened. A format is any @-command that ends with a `@end' except @-commands that only select if the input is processed (like `@ignore' or `@ifhtml') or raw @-commands (like `@verbatim' and `@html'). -- Function Reference: $line begin_format_texi $command $line \%state The $COMMAND is the format command, the $LINE is the line following the @-command, \%STATE is a reference on a hash containing many formatting information. It can modify the line and return something else. In the default case, it is used to keep track of the multitable nesting. As a consequence, it is linked with the multitable formating. *Note Multitable formatting::.  File: texi2html.info, Node: Bypassing normal formatting, Next: Handling special regions, Prev: Customizing format opening, Up: Customizing HTML 7.22 Bypassing normal formatting ================================ It is possible to bypass completely the normal formatting of @-commands with braces and raw regions (`@html', `@tex', `@xml'... regions). In that case the @-commands and the text within are passed to a user defined function early, in a pass when no expansion of output takes place, called the collecting pass. Another user defined function is called during the output expansion phase. Moreover, arbitrary user defined functions may be called between the different texinfo parsing and outputting passes. This could be used, for example to initialize some things before collecting the @-commands and their text, expanding them between the collecting and expansion phase and doing some cleaning after the expansion pass. These possibilities are used for the interface to LaTeX2HTML (*note Expanding TeX regions::), and the examples are taken from that use. The @-commands that are keys of the `%command_handler' hash are collected in the collecting pass and expanded in the expansion pass using user defined functions. The associated value is a reference on a hash used to specify the user defined function references. The key of the hash reference are `'init'' for the function reference called during the collecting pass, and `'expand'' during the expansion pass. Here is an example for an @-command with braces: $command_handler{'math'} = { 'init' => \&Texi2HTML::LaTeX2HTML::to_latex, 'expand' => \&Texi2HTML::LaTeX2HTML::do_tex }; And an example for a raw region @-command: $command_handler{'tex'} = { 'init' => \&Texi2HTML::LaTeX2HTML::to_latex, 'expand' => \&Texi2HTML::LaTeX2HTML::do_tex }; The function references are called like: -- Function Reference: $status $command_handler{'$command'}->{'init'} $command $text $count $COMMAND is the @-command name, $TEXT is the text appearing within the @-command. $COUNT is a counter counting how many times this @-command appeared. $STATUS is a boolean which should be true if the collecting was succesfull. If false the @-command and the text is discarded. -- Function Reference: $result $command_handler{'$command'}->{'expand'} $command $count $state $text $COMMAND is the @-command name, $COUNT is a counter counting how many times this @-command appeared. $STATE is a reference on a hash containing many informations about the context. $TEXT should be empty. $RESULT is the expanded resulting text. There are three places for user defined functions, associated with arrays: `@command_handler_init' The function references in that array are called before the collecting pass. At that time the information available is essentially the file names. `@command_handler_process' The function references in that array are called between the collecting pass and the expansion pass. At that time all the special @-commands have been collected as explained above but no output has been produced. `@command_handler_finish' he function references in that array are called after the end of the output generation. Here is an example of these arrays use: push @command_handler_init, \&Texi2HTML::LaTeX2HTML::init; push @command_handler_process, \&Texi2HTML::LaTeX2HTML::latex2html; push @command_handler_finish, \&Texi2HTML::LaTeX2HTML::finish;  File: texi2html.info, Node: Handling special regions, Next: Other and unknown commands, Prev: Bypassing normal formatting, Up: Customizing HTML 7.23 Handling special regions ============================= Special regions `@titlepage', `@documentdescription' and `@copying' are removed from the document before the last pass in the default case. They can be kept if the value associated with the @-command in the `%region_formats_kept' hash is true. The `@insertcopying' @-command is formatted by -- Function Reference: $insertcopying insertcopying $text $comment $simple_text $TEXT is the text appearing in `@copying', formatted. $COMMENT is the text with texi removed, should be very simple text. $SIMPLE_TEXT is the text formatted in string context. The title page handling is described in *note Title page::.  File: texi2html.info, Node: Other and unknown commands, Prev: Handling special regions, Up: Customizing HTML 7.24 Customizing other commands, and unknown commands ===================================================== Many commands without braces are available in texinfo, sometimes with a specific syntax. For example we have `@sp', `@noindent', `@documentlanguage', `@oddheading', `@headings', `@shortcontents', `@shorttitlepage' or `@comment'. `texi2html' interprets some of these commands and some functions or variables are used for their formatting or to access their information. In the default case, however, most of these constructs are ignored. It is possible to change how the things following these commands on the line are handled, what is considered to be an arg for those commands and it is also possible to keep them instead of discarding them such that it is possible to handle them specially, with the same function than the one used for unknown commands. Those special commands without braces are the key of a hash: `%misc_command'. The associated value is a reference on a hash enabling to set the properties of these commands. The keys of this hash reference is the name of a property, the value is the value of the property. For example here we have `line' for the `arg' property for the `command' @-command. $misc_command{'command'} = {'arg' => 'line', 'skip' => 'space'}; The properties and possible values are: `skip' This property enables to set what is skipped after the command arguments. Here are the possible values: `line' The remaining of the line is skipped. `space' Spaces are skipped but not newline. `whitespace' Spaces are skipped `linewhitespace' Spaces are skipped if there are only spaces remaining on the line. `linespace' Spaces are skipped, but not newline if there are only spaces remaining on the line `arg' If the associated value is `line' the line is considered to be the argument. If it is a number it is the number of args (separated by spaces). `keep' If true the args and the macro are kept, otherwise they are discarded. The defaut is to have `keep' undef for all the commands. If `keep' is true for `@verbatiminclude' the default action for this macro isn't done. Commands which don't appear in the hashes `%simple_map', `%simple_map_pre', `%simple_map_texi' and `%misc_command', or that appear in `%misc_command' but with `keep' true are processed by the following function reference: -- Function Reference: ($result_line, $result, $result_text, $message) unknown $command $line $pass $COMMAND is the @-command, $LINE is the line following the $COMMAND. $PASS is the pass of texi2html (*note Three passes::). $RESULT is a boolean. If it is true then the other return values are taken into account otherwise the default actions are used. In case $RESULT is true, $RESULT_LINE is the new line to be processed further, $RESULT_TEXT is the resulting formatted text and $MESSAGE, if defined is a message outputted to the output with line number added by `texi2html'. Commands with braces not specified above nor in `%style_map', `%style_map_pre' and `%style_map_texi' are processed by the following function reference -- Function Reference: ($result, $result_text, $message) unknown_style $command $text $COMMAND is the @-command, $TEXT is the text appearing within the braces (allready formatted). $RESULT is a boolean. If it is true then the other return values are taken into account otherwise the default actions are used. In case $RESULT is true, $RESULT_TEXT is the resulting formatted text and $MESSAGE, if defined is a message outputted to the output with line number added by `texi2html'.  File: texi2html.info, Node: Internationalization, Next: Incompatibilities, Prev: Customizing HTML, Up: Top Appendix A Internationalization ******************************* The strings written in the document are selected based on the document language. This can be used to customize the strings, as described in *note Strings::. This also enables translation of the strings. * Menu: * Translating strings:: * Adding new strings::  File: texi2html.info, Node: Translating strings, Next: Adding new strings, Up: Internationalization A.1 Translating strings ======================= * Menu: * Supported language:: * New language::  File: texi2html.info, Node: Supported language, Next: New language, Up: Translating strings A.1.1 Contributing to existing translations ------------------------------------------- If the language is allready supported, then there will be a file in the `i18n' directory with name the two-letter ISO-639 language code. In that case you can enhance the translations by editing this file. There is a `$LANGUAGES->{'LANGUAGE'}' hash in that file. The keys are the english strings, in `''', the values (in `''' after `=>') are the translations. When a string contains a `%' followed by `{' NAME `}' it means that the string will be expanded by `texi2html'. For an example, see *note Strings::. After that you should run the command `./manage_i18n.pl merge' in the top directory, it should merge your file with the existing files in `translations.pl', which is incorporated to the `texi2html' script by `make'.  File: texi2html.info, Node: New language, Prev: Supported language, Up: Translating strings A.1.2 Contributing translations to another language --------------------------------------------------- If the language isn't currently supported, copy the `en' file in `i18n' to a file with name the two-letter ISO-639 language code of your language and then add your translations to the strings. You could also add your two-letter language code in the `manage_i18n.pl' file in the `@known_languages' array. After that you should run the command `./manage_i18n.pl update LANG' and `./manage_i18n.pl merge' in the top directory. Obsoleted strings are not removed from the files, they are still present in the `$T2H_OBSOLETE_STRINGS->{'LANGUAGE'}' hash in case the string is reused later. If you made change to strings specified in installed files (*note Installation::) you will have to reinstall them otherwise the installated files will take precedence (*note Using init files::).  File: texi2html.info, Node: Adding new strings, Prev: Translating strings, Up: Internationalization A.2 Adding new strings written to document ========================================== If you need to write strings, for example the new string A STRING to the resulting document, call `&$I('a string')'. Use simple quotes. If you want to substitute a value in the string put `%{STRING_VALUE}', in the string, and give a second argument to `&$I', a hash reference with key STRING_VALUE and value the what you want to substitute. Here is an example: return &$I('%{name} of %{class}', { 'name' => $name, 'class' => $class }); In that case `%{name}' is substituted by `$name' in the translated string. After that you should run the command `./manage_i18n.pl' in the top directory, to add your new strings to the template file, that is the file for english and to all the files in the `i18n' directory. This is achieved with ./manage_i18n.pl template ./manage_i18n.pl update These two commands won't work if you don't have the `Data::Dumper' module installed. And to merge the new translation files in `translations.pl', do ./manage_i18n.pl merge All these steps may be performed by `make', once the language file is added to `Makefile.am' in the `i18n_files' variable.  File: texi2html.info, Node: Incompatibilities, Next: Specificities, Prev: Internationalization, Up: Top 2 Incompatibilities with previous versions ****************************************** `texi2html' has accumulated a lot of incompatibilities with previous versions. They are documented in the `NEWS' file, we discuss them here nevertheless. Most of the incompatibilities were introduced in version 1.68. API changed also a lot between 1.78 and 1.80. * API changes between 1.78 and 1.80: * what was done in the beginning of the $print_section function reference is now done in $print_element_header. * there is a new argument for $normal_text. * there is a new argument for $menu_link and $simple_menu_link, and the name argument is always set, even if there is no explicit name. The new argument is true if there really was an explicit name. * $internal_ref and $external_ref don't change inforef to xref anymore. * in $table_item the text is not formatted with the format command, the text_formatted argument is. * definition index entries are now formatted with $definition_index_entry, not with $definition_category anymore. * $printindex is called if an index appears, even if the index is not defined or there are no index entries. * new argument (@-command name) for $quotation and $quotation_prepend_text. * change in the heading API. THIS_HEADER is not used anymore. New function reference, element_heading to format a node or a section heading, including navigation and label. Accordingly, print_Top and one_section don't print the element header anymore. Also it is reported if the element is a new element, is the main element and more arguments, and top element heading is always done in heading. * print_element_header and print_navigation now return their result. * the `copying' key of %Texi2HTML::THISDOC is now called `copying_comment'. * TOC_LIST_ATTRIBUTE is now called NO_BULLET_LIST_ATTRIBUTE. * TOC_LIST_STYLE is now called NO_BULLET_LIST_STYLE. * the $unknown function reference has a new argument, the pass number. * `--sec-nav' is replaced by `--headers'. * `--Verbose' is replaced by `--verbose'. * `--lang' is replaced by `--document-language'. * `--separated-footnotes' is replaced by `--footnote-style'. * `--lang' is replaced by `--document-language'. * `&$menu_comment' is removed, `menu_comment' is now handled like an @-command. * `@detailmenu' is now formatted more like `@menu', and the `&$menu' function reference is replaced by `&$menu_command'. `&$menu' is kept for backward compatibility. If `&$menu' is defined, `@detailmenu' is ignored. * the API for the formatting of menus completly changed. $simple_menu_link is removed, everything should be done in $menu_link. * image API changed, and is unstable, so not documented. * image file paths are not completed anymore in the default case. The previous behaviour can be restored with `$COMPLETE_IMAGE_PATHS' set to true. * in %misc_command `texi' is not used anymore. The value and macros are expanded as they should be unconditionnally. * there is a new 'style' key in $complex_format_map, to be able to differentiate complex formats inheriting fonts and code_style (like @format, @display). * $EXTENSION should be undef if one doesn't want an extension to be added. * THISDOC{'title'} and similar are now for @title since only one @title should appear in the document. @settitle is tried first to set fulltitle. * Configuration variables are modified anymore, instead the variable value is put in $Texi2HTML::THISDOC{'VAR'}. This is the case for DO_CONTENTS, DO_SCONTENTS, CSS_LINES, BODYTEXT, DOCUMENT_DESCRIPTION, DOCUMENT_ENCODING, IN_ENCODING, ENCODING_NAME, OUT_ENCODING. For example, if $CSS_LINES is defined, the value is put in $Texi2HTML::THISDOC{'CSS_LINES'} which is used for formatting, and if $CSS_LINES is not defined, $Texi2HTML::THISDOC{'CSS_LINES'} is autodetected. * When there is no section and $USE_NODES is not set don't split by node. This behaviour and the previous aren't documented, so it could change in the future. * API changes between 1.76 and 1.78: * paragraph has new arguments with indentation information, added as the third argument, and other context information. The formatting linked with commands opened before the paragraph and closed after the paragraph are done in the formatting function. Similar things are done for preformatted. * normal_text changed completely. There are much more arguments to give informations about the context, and normal_text now does more text manipulation. * New arguments for image the alt text, the height and width, the path to working dir and the path to image file relative to working dir. More image formatting is done in the formatting function. * New argument for empty_line. * End of line removal is done in formatting function of definition line formatting. * node_file_name now should only returns the node file, since the redirection file isn't used anymore. element_file_name only is used for file names, whatever NODES_FILES is. * changes between 1.66 and 1.68: * When the manual is split the default is to put resulting files in a directory with name the manual file basename (previously they were left in the current directory). To avoid that, call texi2html with `-output .'. This has been changed to be compatible with `makeinfo' and also because it fits better with the cross manuals reference scheme. * The option `--output' signification changed. It now has the same meaning than for `makeinfo'. It seems that in 1.66 it was the same than `-out-file'. `--output' new meaning allows to replace `-out-file' and `-subdir' with a unique option. More precisely `-out-file' forces the output to be unsplit while `--output' behaves differently when split (it specifies the directory where the manual files should be outputted) and unsplit (it specifies the output file). `-subdir' is retained for backward compatibility. If you want a backward compatibility you can use `-subdir' for the output directory if the document is split, and `-out-file' if the document isn't split. This hasn't been tested extensively though. * Many options has been obsoleted but they are retained for backward compatibility. * The init files are searched in new directories, however they are still searched for in the old directories for backward compatibility. * the option `--glossary' doesn't do anything. Likely nothing specific is done regarding bibliographies. This has been decided because this added some semantics to the texinfo formatting language that weren't part of texinfo. It should be possible to do something similar with macros. See for example `glossary.texi' for glossary and `my-bib-macros.texi' for bibliography in the directory `examples'. In the web2c package there is an example of use of BibTeX, see `http://tug.org/texlive/devsrc/Build/source/TeX/texk/web2c/doc/' (the examples for bibliography are taken from the texinfo home page `http://www.gnu.org/software/texinfo/texinfo.html'). * don't use `T2H_CENTER_IMAGE'. `@center' should be used insead, it will give the right output for all the formats. * If a directory creation fails the program aborts. This is much safer. * The interface for internationalisation changed, although the previous wasn't documented a lot. * the API described in this manual changed a lot. A important change was to use the `Texi2HTML::Config' names space instead of variables prefixed with `T2H_' or `t2h_'. To cope with the change the prefix should be removed from variables in init files. Some variables are now in `%Texi2HTML::THISDOC'. * `@ifinfo' regions are not expanded by default. This may lead to warnings or errors especially if the Top node is enclosed in `@ifinfo', as some node won't appear in menus. The quick fix is to call `texi2html' with the option `--ifinfo' and the right way should be to make more use of `@ifnottex'. * The code appearing before the first node is now outputted, it was ignored before. `--ignore-preamble-text' revert to the previous behaviour. Enclosing in `@ifnothtml' would be much cleaner.  File: texi2html.info, Node: Specificities, Next: Indexop, Prev: Incompatibilities, Up: Top 3 How little texi2html texinfo differs from GNU texinfo ******************************************************* For features documented in the texinfo manual, the texinfo interpretation by `texi2html' shouldn't differ from the interpretation of `makeinfo' or `texi2dvi'. However for constructs with unspecified behaviour `texi2html' often doesn't lead to the same result than `makeinfo' or `texi2dvi'. `makeinfo' and `texi2dvi' are also inconsistent in most of these cases (or broken). You are urged not to use these features unless absolutely necessary. This information is only here to help understand why `texi2html' differ from other texinfo interpreters, it may be inacurate and the `texi2html' behaviour may change in the future and was different in the past. @-commands with text on the line In the texinfo manual it is specified that block @-commands should appear on a line without text and the closing `@end' should also be on a line by himself. With `texi2html' it is possible to add text before and after the command, so the following is right: something @example the example @end example after the example `makeinfo' and `texi2dvi' may also accept text before the command and text after the `@end' command, sometimes ignoring it after the `@end'. This is a feature you should especially not rely on. special @-commands handling The special @-commands are commands like `@pagesizes', `@sp', `@evenheading', `@raisesections', `@defindex' and a lot more. In many cases `makeinfo' and `texi2dvi' don't parse those commands the same way too. `texi2html' may also show some differences in parsing of the arguments of these commands, in case there are wrong arguments, and also ignore differently things following those commands. How user defined macros, set and values are expanded in those commands may also be different. Part of the specification of how these commands are handled is configureable (*note Other and unknown commands::), but not what happens during the beginning of the parsing for some of those commands. features different between `makeinfo' and `texi2dvi' When `makeinfo' or `texi2dvi' use a feature which is reserved for one or the other translator, `texi2html' uses that feature. So for example `@definfoenclose' which is ignored by `texi2dvi' is taken into account and `@kbdinputstyle' which is ignored by `makeinfo' is taken into account. user defined macros and values In this area `makeinfo' and `texi2dvi' also differ a lot. The reference implementation is the `makeinfo' implementation as `texi2dvi' is easily broken when macros are not used simply. * `@rmacro' and `@macro' behave exactly the same. In fact this goes against a documented behaviour, however if a user don't want a recursive macro he can simply avoid reusing the macro in the definition. If somebody report that the feature is usefull we could try to implement it. * It is possible to escape the end of a macro definition with \@end macro with the `\' being removed after the first expansion. Otherwise it is not possible to produce a `\@end macro' in a macro. * `@unmacro' is interpreted during the macro argument expansion. Don't know what `makeinfo' exactly do. * Some `@value' may be expanded later than the others, those that are in special commands, like `@node'. `@,' in `@node' Like `texi2dvi' but unlike `makeinfo' `@,' don't break `@node' arguments like a regular `,'. Things before first node or preamble Things before the first node or before the preamble may not be exactly interpreted or discarded as `makeinfo' or `texi2dvi' do. encodings `texi2html' knows more encodings, in fact all encodings `perl' knows about. commands in `@ifset' and `@ifclear' `texi2html' doesn't need a proper nesting of internal `@ifset' or `@ifclear' if they are in ignored or raw regions (like `@html' or `@verbatim'). For example the following is accepted by `texi2html' and not by `makeinfo': @ifset notset @ignore @ifset @end ignore @end ifset In `@ifset' and `@ifclear' texi2html also accepts a lot more of invalid constructs. For example the following is accepted by `texi2html' but not by `makeinfo': @set flag @ifset flag @itemize @item my item @end ifset text @ifset flag @end itemize @end ifset  File: texi2html.info, Node: Indexop, Next: Indexvr, Prev: Specificities, Up: Top Appendix A Command Line Option Index ************************************ [index] * Menu: * css-include=FILE: Style options. (line 24) * css-ref=URL: Style options. (line 35) * def-table: Style options. (line 44) * doctype=DTD: Style options. (line 8) * document-language <1>: Strings. (line 9) * document-language: Using init files. (line 22) * DVAR: Texinfo related options. (line 14) * enable-translations: Advanced build features. (line 30) * error-limit=NUM: General options. (line 7) * footnote-style: Page layout options. (line 14) * frames: Page layout options. (line 6) * frameset-doctype: Style options. (line 10) * frameset-doctype=DTD: Style options. (line 9) * help: General options. (line 10) * html-xref-prefix=PATH: Style options. (line 40) * IDIR: Texinfo related options. (line 25) * if: Expansion. (line 10) * include-css: css. (line 35) * init-file: Using init files. (line 13) * iso: Style options. (line 19) * l2h: Expanding TeX regions. (line 8) * l2h-file: Expanding TeX regions. (line 21) * l2h-l2h=PROGRAM: Expanding TeX regions. (line 13) * l2h-tmp: Expanding TeX regions. (line 17) * lang=LANG: Texinfo related options. (line 9) * menu: Invoking texi2html. (line 21) * no-headers: Page layout options. (line 11) * no-if: Expansion. (line 12) * node-files: Output files. (line 65) * nomenu <1>: Expansion. (line 17) * nomenu: Invoking texi2html. (line 21) * number-sections: Style options. (line 53) * output: Output files. (line 36) * PDIR: Texinfo related options. (line 20) * pkgdatadir=dir: Using init files. (line 8) * pkgdatadir=DIR: Installing. (line 16) * prefix: Output files. (line 40) * short-ext: Output files. (line 41) * short-ref: Style options. (line 49) * split: Splitting output. (line 8) * sysconfdir=dir: Using init files. (line 10) * toc-file: Output files. (line 44) * toc-links: Style options. (line 57) * top-file: Output files. (line 42) * transliterate-file-names: Output files. (line 73) * use-nodes: Splitting output. (line 38) * UVAR: Texinfo related options. (line 17) * verbose: General options. (line 13) * version: General options. (line 16) * with-unicode: Advanced build features. (line 9) * with-unidecode: Advanced build features. (line 14)  File: texi2html.info, Node: Indexvr, Next: Indexcp, Prev: Indexop, Up: Top Appendix B Variable Index ************************* [index] * Menu: * $AFTER_BODY_OPEN: Customizing header. (line 8) * $AFTER_OVERVIEW: Contents and Overview text. (line 36) * $AFTER_TOC_LINES: Contents and Overview text. (line 43) * $anchor: Anchors images and spaces. (line 16) * $anchor_label: Anchors images and spaces. (line 10) * $AVOID_MENU_REDUNDANCY: Table menu formatting. (line 8) * $BEFORE_OVERVIEW: Contents and Overview text. (line 32) * $BEFORE_TOC_LINES: Contents and Overview text. (line 40) * $BIG_RULE: The page layout. (line 12) * $BODYTEXT <1>: Customizing header. (line 24) * $BODYTEXT: Output initialization. (line 19) * $cell: Table and list items. (line 120) * $CLOSE_QUOTE_SYMBOL <1>: String interface. (line 8) * $CLOSE_QUOTE_SYMBOL: Hash reference interface. (line 65) * $complex_format_map: Complex formats. (line 12) * $CSS_LINES: css. (line 6) * $DATE: Customizing footer. (line 10) * $def_always_delimiters: Definition line. (line 50) * $def_argument_separator_delimiters: Definition line. (line 47) * $def_in_type_delimiters: Definition line. (line 54) * $DEF_TABLE: Style options. (line 46) * $DEFAULT_ENCODING: Encodings. (line 32) * $DEFAULT_RULE: The page layout. (line 11) * $definition_category: Definition formatting. (line 31) * $DO_CONTENTS: Contents and Overview text. (line 21) * $DO_SCONTENTS: Contents and Overview text. (line 26) * $DOCTYPE: Style options. (line 12) * $DOCUMENT_DESCRIPTION: Customizing header. (line 17) * $DOCUMENT_ENCODING: Encodings. (line 10) * $ENCODING_NAME <1>: Customizing header. (line 11) * $ENCODING_NAME: Encodings. (line 28) * $ERROR_LIMIT: General options. (line 8) * $EXTENSION: File and target names. (line 11) * $EXTERNAL_DIR: Style options. (line 42) * $EXTRA_HEAD: Customizing header. (line 7) * $FRAMES: Page layout options. (line 9) * $FRAMESET_DOCTYPE: Style options. (line 12) * $ICONS: General purpose variables. (line 13) * $IDX_SUMMARY: External index files. (line 9) * $IN_ENCODING: Encodings. (line 16) * $INDEX_CHAPTER: The page layout. (line 66) * $INLINE_CONTENTS: Contents and Overview text. (line 10) * $L2H_L2H: Expanding TeX regions. (line 14) * $L2H_TMP: Expanding TeX regions. (line 18) * $LANG <1>: Strings. (line 9) * $LANG <2>: Using init files. (line 22) * $LANG: Texinfo related options. (line 11) * $LANGUAGES <1>: Translating strings. (line 6) * $LANGUAGES: Strings. (line 13) * $MENU_PRE_COMPLEX_FORMAT: Table menu formatting. (line 22) * $MENU_PRE_STYLE: Table menu formatting. (line 19) * $MENU_SYMBOL: Table menu formatting. (line 13) * $MIDDLE_RULE: The page layout. (line 11) * $misc_element_label: Special pages content. (line 7) * $NO_BULLET_LIST_ATTRIBUTE: Contents and Overview text. (line 50) * $NO_BULLET_LIST_STYLE: Contents and Overview text. (line 46) * $NODE_FILES <1>: File and target names. (line 13) * $NODE_FILES: Output files. (line 65) * $NODE_NAME_IN_MENU: Table menu formatting. (line 7) * $NUMBER_SECTIONS: Style options. (line 54) * $OPEN_QUOTE_SYMBOL <1>: String interface. (line 8) * $OPEN_QUOTE_SYMBOL: Hash reference interface. (line 65) * $OUT: Output files. (line 36) * $OUT_ENCODING <1>: Customizing header. (line 13) * $OUT_ENCODING: Encodings. (line 21) * $PRE_BODY_CLOSE: Customizing footer. (line 7) * $PREFIX: Output files. (line 40) * $print_chapter_footer: Customizing footer. (line 24) * $print_chapter_header: Customizing header. (line 45) * $print_foot_navigation: Customizing footer. (line 13) * $print_head_navigation: Customizing header. (line 33) * $print_misc: Special pages layout. (line 33) * $print_misc_footer: Special pages layout. (line 34) * $print_misc_header: Special pages layout. (line 33) * $print_page_foot: Customizing footer. (line 27) * $print_page_head: Customizing header. (line 44) * $print_section_footer: Customizing footer. (line 25) * $print_section_header: Customizing header. (line 47) * $print_Top: Special pages layout. (line 31) * $print_Top_footer: Special pages layout. (line 32) * $print_Top_header: Special pages layout. (line 31) * $SECTION_NAVIGATION <1>: General purpose variables. (line 16) * $SECTION_NAVIGATION: Page layout options. (line 12) * $SEPARATE_DESCRIPTION: Menu components formatting. (line 8) * $SEPARATED_FOOTNOTES: Page layout options. (line 16) * $SHORT_REF: Style options. (line 51) * $SHORTEXTN: Output files. (line 42) * $SHOW_MENU: Expansion. (line 18) * $SIMPLE_MENU: Menus. (line 14) * $SMALL_RULE: The page layout. (line 11) * $SPLIT: Splitting output. (line 9) * $SPLIT_INDEX: Index list. (line 27) * $T2H_OBSOLETE_STRINGS: Translating strings. (line 6) * $Texi2HTML::NODE{Next}: Button specifications. (line 63) * $Texi2HTML::OVERVIEW <1>: Contents and Overview text. (line 93) * $Texi2HTML::OVERVIEW: Global informations. (line 153) * $Texi2HTML::THIS_SECTION <1>: Global functions. (line 12) * $Texi2HTML::THIS_SECTION: Global informations. (line 150) * $Texi2HTML::THISDOC{'BODYTEXT'}: Customizing header. (line 25) * $Texi2html::THISDOC{'CSS_LINES'}: css. (line 27) * $Texi2HTML::THISDOC{'DOCUMENT_DESCRIPTION'}: Customizing header. (line 22) * $Texi2HTML::THISDOC{'DOCUMENT_ENCODING'}: Encodings. (line 11) * $Texi2HTML::THISDOC{'documentencoding'}: Encodings. (line 14) * $Texi2HTML::THISDOC{'ENCODING_NAME'}: Encodings. (line 29) * $Texi2HTML::THISDOC{'IN_ENCODING'}: Encodings. (line 16) * $Texi2HTML::THISDOC{'OUT_ENCODING'}: Encodings. (line 22) * $Texi2HTML::TITLEPAGE <1>: Title page. (line 7) * $Texi2HTML::TITLEPAGE: Global informations. (line 159) * $Texi2HTML::TOC_LINES <1>: Contents and Overview text. (line 93) * $Texi2HTML::TOC_LINES: Global informations. (line 156) * $TOC_FILE: Output files. (line 45) * $TOC_LINKS: Style options. (line 59) * $TOP_FILE: Output files. (line 43) * $TOP_HEADING: The page layout. (line 47) * $TRANSLITERATE_NODE: Output files. (line 74) * $UNNUMBERED_SYMBOL_IN_MENU: Table menu formatting. (line 14) * $USE_ACCESSKEY <1>: Menus. (line 17) * $USE_ACCESSKEY: Button specifications. (line 84) * $USE_ISO: Style options. (line 21) * $USE_LINKS: Customizing header. (line 29) * $USE_NODE_TARGET: Elements hashes. (line 21) * $USE_NODES: Splitting output. (line 39) * $USE_REL_REV: Button specifications. (line 88) * $USE_SETFILENAME: Output files. (line 4) * $USER: Customizing footer. (line 10) * $VERTICAL_HEAD_NAVIGATION: General purpose variables. (line 9) * $WORDS_IN_PAGE <1>: Global functions. (line 14) * $WORDS_IN_PAGE: Button specifications. (line 21) * %accent_map: Style and accent commands. (line 26) * %ACTIVE_ICONS: Button specifications. (line 75) * %BUTTONS_ACCESSKEY <1>: Menus. (line 18) * %BUTTONS_ACCESSKEY: Button specifications. (line 85) * %BUTTONS_GOTO: Output initialization. (line 21) * %BUTTONS_NAME <1>: Output initialization. (line 20) * %BUTTONS_NAME: Button specifications. (line 81) * %BUTTONS_REL <1>: Customizing header. (line 30) * %BUTTONS_REL: Button specifications. (line 89) * %colon_command_punctuation_characters: Punctuation commands. (line 7) * %command_handler: Bypassing normal formatting. (line 21) * %css_map: css. (line 13) * %def_map: Definition line. (line 6) * %format_in_paragraph: Avoiding paragraphs. (line 8) * %format_map: Whole table list. (line 6) * %main::value: Global informations. (line 135) * %misc_command: Other and unknown commands. (line 20) * %misc_pages_targets: File and target names. (line 100) * %NAVIGATION_TEXT <1>: Output initialization. (line 20) * %NAVIGATION_TEXT: Button specifications. (line 68) * %no_paragraph_commands: Avoiding paragraphs. (line 12) * %paragraph_style: Alignement commands. (line 8) * %PASSIVE_ICONS: Button specifications. (line 76) * %pre_map: Commands without argument. (line 23) * %region_formats_kept: Handling special regions. (line 8) * %simple_map <1>: Other and unknown commands. (line 61) * %simple_map: Commands without argument. (line 22) * %simple_map_pre <1>: Other and unknown commands. (line 61) * %simple_map_pre: Commands without argument. (line 22) * %simple_map_texi <1>: Other and unknown commands. (line 61) * %simple_map_texi: Commands without argument. (line 22) * %special_list_commands: Table and list items. (line 12) * %stop_paragraph_command: Avoiding paragraphs. (line 18) * %style_map <1>: Other and unknown commands. (line 76) * %style_map: Style and accent commands. (line 10) * %style_map_pre <1>: Other and unknown commands. (line 76) * %style_map_pre: Style and accent commands. (line 11) * %style_map_texi <1>: Other and unknown commands. (line 77) * %style_map_texi: Style and accent commands. (line 11) * %Texi2HTML::HREF: Elements hashes. (line 12) * %Texi2HTML::NAME: Elements hashes. (line 9) * %Texi2HTML::NO_TEXI: Elements hashes. (line 18) * %Texi2HTML::NODE: Elements hashes. (line 15) * %Texi2HTML::THISDOC: Global informations. (line 12) * %texi_map: Commands without argument. (line 23) * %things_map: Commands without argument. (line 23) * @CHAPTER_BUTTONS: Button specifications. (line 27) * @command_handler_finish: Bypassing normal formatting. (line 72) * @command_handler_init: Bypassing normal formatting. (line 61) * @command_handler_process: Bypassing normal formatting. (line 66) * @CSS_FILES: Style options. (line 27) * @CSS_REFS: Style options. (line 38) * @EXPAND: Expansion. (line 13) * @IMAGE_EXTENSIONS: Anchors images and spaces. (line 34) * @INCLUDE_DIRS: Texinfo related options. (line 27) * @LINKS_BUTTONS <1>: Customizing header. (line 29) * @LINKS_BUTTONS: Button specifications. (line 36) * @MISC_BUTTONS: Button specifications. (line 32) * @NODE_FOOTER_BUTTONS: Button specifications. (line 17) * @PREPEND_DIRS: Texinfo related options. (line 22) * @SECTION_BUTTONS: Button specifications. (line 10) * @SECTION_FOOTER_BUTTONS: Button specifications. (line 16)  File: texi2html.info, Node: Indexcp, Prev: Indexvr, Up: Top Appendix C Concept Index ************************ [index] * Menu: * Avoid paragraph opening: Avoiding paragraphs. (line 6) * bug report: Top. (line 6) * centering: Alignement commands. (line 6) * complex format: Complex formats. (line 6) * Config: Using init files. (line 6) * configure: Installation. (line 6) * CSS <1>: css. (line 6) * CSS: Style options. (line 6) * downloading texi2html source: Obtaining texi2html. (line 6) * examples of manuals: Overview. (line 6) * external manual: Reference to external manual. (line 6) * flushing text: Alignement commands. (line 6) * i18n <1>: Translating strings. (line 6) * i18n: Strings. (line 6) * Installation: Installation. (line 6) * internationalization: Using init files. (line 6) * internationalized strings: Adding new strings. (line 6) * makeinfo: whytexi2html. (line 6) * manage_i18n.pl: Adding new strings. (line 6) * paragraph: Paragraph and preformatted formatting. (line 6) * preformatted region: Paragraph and preformatted formatting. (line 6) * reference: References. (line 6) * skipped command: Other and unknown commands. (line 6) * source code for texi2html, downloading: Obtaining texi2html. (line 6) * texi2html source, downloading: Obtaining texi2html. (line 6) * Texinfo: Overview. (line 6) * text alignement: Alignement commands. (line 6) * Translation: Translating strings. (line 6) * unknown command: Other and unknown commands. (line 6)  Tag Table: Node: Top2968 Node: Overview5802 Node: whytexi2html7592 Node: Obtaining texi2html9672 Node: Installation10077 Node: Requirements10349 Node: Configuring and rebuilding11108 Node: Installing12325 Node: Advanced build features13312 Node: Invoking texi2html15328 Node: General options16799 Node: Splitting output17192 Node: Output files20550 Node: Output files-Footnotes24223 Ref: Output files-Footnote-124297 Node: Expansion24421 Node: Texinfo related options25330 Node: Page layout options26397 Node: Style options27360 Node: Expanding TeX regions29884 Node: Using init files31030 Node: Initialization files33143 Node: Encodings35393 Node: Redefining functions37516 Node: Function prototypes38600 Node: Changing the page layout39676 Node: The different pages41045 Node: The page layout42989 Ref: Element labels44273 Node: Navigation panel46139 Node: General purpose variables46802 Node: Button specifications47579 Node: Panel formatting function51543 Node: Program variables52351 Node: Elements hashes53061 Node: Global informations53719 Node: Global functions58313 Node: Output initialization59058 Node: Output finalization60626 Node: css61103 Node: Customizing header62945 Node: Customizing section66192 Node: Customizing footer67560 Node: Special pages69595 Node: Special pages content69940 Node: Top element text70695 Node: Contents and Overview text71984 Node: Footnotes text77009 Node: About text77317 Node: Title page78856 Node: Special pages layout79761 Node: File and target names80962 Node: External index files85458 Node: Customizing HTML87782 Node: Three contexts90029 Node: Three passes90790 Node: Commands without argument91382 Node: Punctuation commands92797 Node: Style and accent commands93752 Node: Hash reference interface95240 Ref: Reference hash args96116 Node: String interface98503 Node: Define your own interface100488 Node: Anchors images and spaces102212 Node: Text106569 Node: Strings109078 Node: References111246 Node: Reference to external manual111453 Node: Internal reference113664 Node: Alignement commands114801 Node: Paragraph and preformatted region115767 Node: Paragraph and preformatted formatting116111 Node: Avoiding paragraphs120399 Node: Complex formats121370 Node: Lists tables123503 Node: Table and list items123975 Ref: Multitable formatting128608 Node: Whole table list130392 Node: Definitions132934 Node: Definition line133458 Node: Definition formatting135836 Node: Headings138693 Node: Special regions141967 Node: Menus143722 Node: Menu parts144998 Node: Menu components formatting146298 Node: Simple menu formatting148847 Node: Table menu formatting149544 Node: Indices151317 Node: Index entry place151994 Node: Index list153407 Node: Floats and lists of floats157236 Node: Floats158866 Node: Lists of floats160789 Node: Footnotes163018 Node: Customizing format opening165533 Node: Bypassing normal formatting166477 Node: Handling special regions170122 Node: Other and unknown commands170979 Node: Internationalization174891 Node: Translating strings175331 Node: Supported language175536 Node: New language176453 Node: Adding new strings177448 Node: Incompatibilities178774 Node: Specificities188306 Node: Indexop193112 Node: Indexvr197804 Node: Indexcp217718  End Tag Table texi2html-1.82/doc/mdate-sh0000755000175000017500000001255311264347115017437 0ustar flichtenheldflichtenheld#!/bin/sh # Get modification time of a file or directory and pretty-print it. scriptversion=2005-06-29.22 # Copyright (C) 1995, 1996, 1997, 2003, 2004, 2005 Free Software # Foundation, Inc. # written by Ulrich Drepper , June 1995 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . case $1 in '') echo "$0: No file. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: mdate-sh [--help] [--version] FILE Pretty-print the modification time of FILE. Report bugs to . EOF exit $? ;; -v | --v*) echo "mdate-sh $scriptversion" exit $? ;; esac # Prevent date giving response in another language. LANG=C export LANG LC_ALL=C export LC_ALL LC_TIME=C export LC_TIME # GNU ls changes its time format in response to the TIME_STYLE # variable. Since we cannot assume `unset' works, revert this # variable to its documented default. if test "${TIME_STYLE+set}" = set; then TIME_STYLE=posix-long-iso export TIME_STYLE fi save_arg1=$1 # Find out how to get the extended ls output of a file or directory. if ls -L /dev/null 1>/dev/null 2>&1; then ls_command='ls -L -l -d' else ls_command='ls -l -d' fi # A `ls -l' line looks as follows on OS/2. # drwxrwx--- 0 Aug 11 2001 foo # This differs from Unix, which adds ownership information. # drwxrwx--- 2 root root 4096 Aug 11 2001 foo # # To find the date, we split the line on spaces and iterate on words # until we find a month. This cannot work with files whose owner is a # user named `Jan', or `Feb', etc. However, it's unlikely that `/' # will be owned by a user whose name is a month. So we first look at # the extended ls output of the root directory to decide how many # words should be skipped to get the date. # On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below. set x`ls -l -d /` # Find which argument is the month. month= command= until test $month do shift # Add another shift to the command. command="$command shift;" case $1 in Jan) month=January; nummonth=1;; Feb) month=February; nummonth=2;; Mar) month=March; nummonth=3;; Apr) month=April; nummonth=4;; May) month=May; nummonth=5;; Jun) month=June; nummonth=6;; Jul) month=July; nummonth=7;; Aug) month=August; nummonth=8;; Sep) month=September; nummonth=9;; Oct) month=October; nummonth=10;; Nov) month=November; nummonth=11;; Dec) month=December; nummonth=12;; esac done # Get the extended ls output of the file or directory. set dummy x`eval "$ls_command \"\$save_arg1\""` # Remove all preceding arguments eval $command # Because of the dummy argument above, month is in $2. # # On a POSIX system, we should have # # $# = 5 # $1 = file size # $2 = month # $3 = day # $4 = year or time # $5 = filename # # On Darwin 7.7.0 and 7.6.0, we have # # $# = 4 # $1 = day # $2 = month # $3 = year or time # $4 = filename # Get the month. case $2 in Jan) month=January; nummonth=1;; Feb) month=February; nummonth=2;; Mar) month=March; nummonth=3;; Apr) month=April; nummonth=4;; May) month=May; nummonth=5;; Jun) month=June; nummonth=6;; Jul) month=July; nummonth=7;; Aug) month=August; nummonth=8;; Sep) month=September; nummonth=9;; Oct) month=October; nummonth=10;; Nov) month=November; nummonth=11;; Dec) month=December; nummonth=12;; esac case $3 in ???*) day=$1;; *) day=$3; shift;; esac # Here we have to deal with the problem that the ls output gives either # the time of day or the year. case $3 in *:*) set `date`; eval year=\$$# case $2 in Jan) nummonthtod=1;; Feb) nummonthtod=2;; Mar) nummonthtod=3;; Apr) nummonthtod=4;; May) nummonthtod=5;; Jun) nummonthtod=6;; Jul) nummonthtod=7;; Aug) nummonthtod=8;; Sep) nummonthtod=9;; Oct) nummonthtod=10;; Nov) nummonthtod=11;; Dec) nummonthtod=12;; esac # For the first six month of the year the time notation can also # be used for files modified in the last year. if (expr $nummonth \> $nummonthtod) > /dev/null; then year=`expr $year - 1` fi;; *) year=$3;; esac # The result. echo $day $month $year # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: texi2html-1.82/doc/texi2html.1.in0000644000175000017500000001316511264347115020416 0ustar flichtenheldflichtenheld.TH TEXI2HTML 1 "@PACKAGE_DATE@" .AT 3 .SH NAME texi2html \- a Texinfo to HTML converter .SH SYNOPSIS .B texi2html [options] file .SH DESCRIPTION .I Texi2html converts the given Texinfo file to a set of HTML files. It tries to handle most of the Texinfo commands. It creates hypertext links for cross-references, footnotes... .PP .I Texi2html may furthermore use latex2html to generate HTML (code and/or images) for @math and @iftex tags (see the .B \-\-l2h option). .PP .I Texi2html creates several files depending on the contents of the Texinfo file and on the chosen options (see FILES). .PP The HTML files created by .I texi2html are in general closer to TeX than to Info. Using init files (see the .B \-\-init\-file option), other styles or output formats may be selected. .SH OPTIONS Options may be abbreviated to th shortests unique prefix. The following is only an incomplete list of the available options: .TP 12 .B \-\-help [1|2] Print usage instructions and list the most important, all relevant, or all recognised (including obsolete) command-line options, and exit. .TP .B \-\-split chapter|section|node Split the output into several HTML files (one per main chapter/section or node). .TP .B \-\-ifinfo \-\-iftex \-\-ifxml \-\-ifplaintext \-\-ifhtml Expand @ifinfo, @iftex and @tex, @ifxml and @xml, @ifplaintext, @ifhtml and @html regions, and don't expand @ifnot corresponding regions (default: ifhtml). .TP .B \-\-no\-ifinfo \-\-no\-iftex \-\-no\-ifxml \-\-no\-ifplaintext \-\-no\-html Don't expand @ifinfo, @iftex, @ifxml, @ifplaintext regions and expand @ifnot corresponding regions. .TP .B \-I \fIdir\fP Append \fIdir\fP to the directory list searched for included files. .TP .B \-P \fIdir\fP Prepend \fIdir\fP to the directory list searched for included files. .TP .B \-\-l2h Use latex2html for content of @math and @tex tags. Content must be such that both, latex and tex, can translate it correctly. I.e., no tex-only constructs must be used. .TP .B \-\-css\-include \fIfile\fP Use css file \fIfile\fP. .TP .B \-\-init\-file \fIfile\fP Load init file \fIfile\fP (see also FILES). .TP .B \-\-document\-language \fIlang\fP Use \fIlang\fP as document language. .TP .B \-\-macro\-expand \fIfile\fP output macro expanded source in \fIfile\fP. .TP .B \-\-no\-menu Don't show the Texinfo menus; by default they are shown. .TP .B \-\-no\-number Don't number the sections. .TP .B \-\-use\-nodes Use nodes for sectionning. .TP .B \-\-prefix Use as prefix for output files, instead of basename. .TP .B \-\-node\-files Produce one file per node for cross references. .TP .B \-\-l2h\-l2h \fIprog\fP Use \fIprog\fP as latex2html program (default \fIlatex2html\fP). Program must be executable. .TP .B \-\-l2h\-init \fIfile\fP Use \fIfile\fP as latex2html init file. \fIfile\fP should be used to specify in which way latex2html handles mathematical expressions and formulas. .TP .B \-\-l2h\-tmp \fIdir\fP Use \fIdir\fP as tmp dir for latex2html. This directory (resp. its path) must not contain a dot (i.e., a "."). .TP .B \-\-l2h\-clean remove all intermediate files generated by latex2html (prevents caching!) .TP .B \-\-l2h\-skip Do not really run latex2html. Use (kept) files of previous runs, instead. .TP .B \-\-verbose Give a verbose output. .TP .B \-\-version Print version and exit. .PP .SH FILES Initialisation options are read first from @pkgdatadir@/texi2html/Config (the exact location being changeable with the .RI --datadir=dir option to the configure script), then from @sysconfdir@/texi2html/Config (the exact location being changeable with the .RI --sysconfdir=dir option to the configure script), then from ./Config, from $HOME/.texi2html/Config, and from any command-line options including \-\-init\-file options; with later settings overriding earlier ones. .P By default .I texi2html my creates the following files (foo being the name of the Texinfo file): .TP 16 .B foo_toc.html The table of contents (if @contents is present). .TP .B foo.html The document's contents or the Top element. .TP .B foo_fot.html The footnotes (if any). .TP .B foo_abt.html An help section. .TP .B foo_l2h_img* Images generated by latex2html (if any). .PP When used with the .B \-\-split option, it creates several files (one per chapter or node), named .B foo_n.html (n being the index of the chapter or node), and the .B foo.html file contains the Top element. .PP Otherwise it creates only one file: .B foo.html .SH VERSION This is \fItexi2html\fP version @PACKAGE_VERSION@, @PACKAGE_DATE@. .SH AUTHOR Texi2html was originally written by is Lionel Cons, CERN IT/DIS/OSE, Lionel.Cons@cern.ch. Over time, many other people around the net contributed to this program. It was maintained by Olaf Bachmann, obachman@mathematik.uni-kl.de, and is now maintained by Derek Price. .SH AVAILABILITY The latest version of this program, as well as support in the form of mailing lists with archives, bug tracking, documentation, and other tools can be found at: http://www.nongnu.org/texi2html/ .SH COPYRIGHT Copyright \(co 1999-2005 Patrice Dumas , Derek Price , Adrian Aichner , & others. There is NO warranty. You may redistribute this software under the terms of the GNU General Public License. For more information about these matters, see the file named COPYING. .SH "SEE ALSO" GNU Texinfo Documentation Format .br http://texinfo.org/ .br World Wide Web (WWW), HyperText Markup Language (HTML) .br http://www.w3.org .br LaTeX2HTML .br http://www-dsed.llnl.gov/files/programs/unix/latex2html .SH BUGS This man-page is often out-of-date. The info manual should be more up-to-date. .ex texi2html-1.82/doc/stamp-vti0000644000175000017500000000014211264347115017645 0ustar flichtenheldflichtenheld@set UPDATED 3 November 2008 @set UPDATED-MONTH November 2008 @set EDITION 1.82 @set VERSION 1.82 texi2html-1.82/doc/texi2html.html0000644000175000017500000166110711264347115020623 0ustar flichtenheldflichtenheld Texi2HTML – Texinfo to HTML v1.82
    "@}, 'end' => q@{"
    "}, 'end' => q{"
    Portions of texi2html
    Copyright © 1999, 2000 Lionel Cons
    Copyright © 1999, 2000 Karl Berry
    Copyright © 1999, 2000 Olaf Bachmann
    Copyright © 2002, 2003, 2004, 2005, 2006, 2007 Patrice Dumas
    Copyright © 2001, 2002, 2003, 2004, 2005, 2006 Derek Price
    Copyright © many others.
    Portions of this manual
    Copyright © 1999, 2000 Karl Heinz Marbaise (manual)
    Copyright © 2003, 2007 Derek Price (manual)
    Copyright © 2003, 2004, 2005, 2006, 2007 Patrice Dumas (manual)

    Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.

    Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.

    Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Free Software Foundation.

    [Top] [Contents] [Index] [ ? ]

    Texi2HTML

    This manual, last updated 3 November 2008, describes version 1.82 of the texi2html Perl script which converts Texinfo into HTML.

    Please send bug reports concerning this manual to the Texi2HTML developement list texi2html-bug@nongnu.org. Please state the exact version of the manual which contains the bug, as given above.

     
    This manual is currently under construction and of course incomplete.  ;-)
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Overview

    Texinfo is the official documentation format of the GNU project. It uses a single source file to produce both online information and printed output.

    It is often desirable to have a way to produce HTML from Texinfo sources, as GNU-Info files are produced. It is much simpler to run a converter than it is to rewrite all the documentation in HTML, especially considering that there is so much Texinfo documentation in the world.

    Some time ago makeinfo wasn’t able to produce HTML output format, but people still wanted documentation in HTML. This was the birthing hour for texi2html. The basic purpose of texi2html is to convert Texinfo documents into HTML.

    Since then, HTML support in makeinfo has improved, but texi2html is still stronger in many areas, including the degree to which it allows customization. With texi2html, some important aspects of the resulting HTML files may be specified via command line options, and configuration files provide an even finer degree of control over the final output, allowing most every aspect of the final output not specified in the Texinfo input file to be specified. Configuration files are written in perl, like the main program, and anything which may be specified on the command line may also be specified within a configuration file.

    For an example of the kind of pages texi2html is capable of producing, have a look at the following sites: the Singular Manual, the Cederqvist (CVS Manual).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 Why texi2html and not makeinfo?

    You would like to produce HTML files from your existing Texinfo files? There are two programs you can use to do this. The first is makeinfo (see (texinfo)Generating HTML section ‘Generating HTML’ in GNU Texinfo). The second is texi2html.

    The design goal of makeinfo’s HTML output was to produce readable HTML output. It is now possible to use CSS for HTML customization. Another possibility is to use intermediate formats, like docbook or makeinfo XML and XSL stylesheets to customize the resulting document. Still the output produced by makeinfo isn’t customizable.

    The current development of texi2html tries to provide for producing the more interesting and sophisticated HTML pages that today’s Internet users have come to expect. The goal behind texi2html is to generate attractive HTML by default but also to allow users considerable freedom to affect the final style and design of the output HTML pages. This is achieved via command line options and flexible configuration files.

    In contrast to the HTML produced by makeinfo --html (the makeinfo program is part of the Texinfo distribution), the texi2html program, among other differences, allows for the customization of the entire page layout, including headers, footers, style sheets, etc., allows for customization of the low level HTML formatting, provides for splitting documents at various levels, and provides for using the latex2html program to convert @tex sections of the Texinfo source.

    The focus on HTML is still present but with the help of the customization files it is now possible to use texi2html to produce other formats as well. texi2html may for example be turned into a texinfo to roff translator with the help of a customization file provided with the distribution.

    texi2html should reasonably convert all Texinfo 4.8 constructs. If you find it does not, please send a bug report to the texi2html-bug@nongnu.org email list.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. Obtaining texi2html

    The latest version of the source code for texi2html should be available from www.nongnu.org/texi2html/. texi2html is also available with teTeX and TeX Live.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. Installation of texi2html


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.1 Requirements

    To install texi2html, you must first obtain a copy of the source distribution. See section Obtaining texi2html.

    texi2html requires perl version 5.00405 or above to be run. An older perl 5 version with File::Spec is also likely to work. The current version has been lightly tested on a wide range of perl, but has not been tested extensively on versions of perl below 5.6. To play nice with encodings you also need the Encode and Unicode::Normalize modules.

    To rebuild the script perl isn’t required in most cases. For more information about advanced build features, see Advanced build features.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.2 Configuring the source and rebuilding

    texi2html is a standard Automake-based distribution. If you have a source version, you should run ./configure to configure the sources and make to build the script.

    ./configure accepts options to select the installation directory for the ‘texi2html’ file, the default directories texi2html will use to look for configuration files, and other details. Run ./configure --help for more information. Running ./configure creates ‘texi2html_configured.pl’ from ‘texi2html.pl’, and also builds the make configuration files (‘Makefile’s).

    Running make combines five files into the final ‘texi2html’ program file:

    • texi2html_configured.pl’ contains the base program,
    • MySimple.pm’ handles the command line options,
    • texi2html.init’ is the default configuration file, and
    • T2h_i18n.pm’ is used for internationalization.
    • translations.pl’ contains the translations of the strings used in documents.

    Running make also rebuilds the documentation if needed.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.3 Installing

    make install performs the installation to the locations specified to the ./configure script. This usually involves placing the actual ‘texi2html’ file someplace in your path, such as ‘/usr/local/bin’ or ‘/usr/bin’.

    Installing texi2html in your path should be sufficient to run it. To use default initialization files, or a configuration file for LaTeX2HTML when using latex2html to convert @tex sections (see section Expanding @tex and @math regions using LaTeX2HTML), install them in the package data directory specified to configure. This is ‘/usr/local/share/texi2html/’ by default, but depends on the value of the --pkgdatadir=dir’ option passed to the ./configure script. Files used for strings customization and internationalization are also searched for in the ‘i18n’ directory of this directory. See section Use initialization files for fine tuning for more.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.4 Advanced build features

    This section documents features that are unlikely to be used but deserve a bit of documentation.

    A ./configure switch, --with-unicode’ allows to choose whether the unicode code should be used or not. The default is to detect it with a test. This code requires Encode and Unicode::Normalize modules.

    A similar ./configure switch, --with-unidecode’ allows to choose whether the perl module Text::Unidecode should be used or not. The default is to detect it with a test. This code requires the Text::Unidecode module.

    perl isn’t needed to build the script. the script is build by ‘./configure’ and a shell script launched by make which is a simple wrapper around a sed one-liner. The perl command can be specified with the environment variable $PERL, otherwise it is detected. perl is required to rebuild the documentation as the HTML documentation is rebuild with texi2html itself.

    The translations are managed by a script manage_i18n.pl, created by ./configure. manage_i18n.pl requires Data::Dumper to function normally. If this module isn’t there ./configure detects it and manage_i18n.pl doesn’t really rebuild the translations, but only copy files. It is possible to use the ./configure switch --enable-translations’ to override the ./configure detection. For more about translations, see Internationalization.

    It is possible to build from outside of the source directory, for example the following should work:

     
    tar xzvf texi2html-1.82.tar.gz
    mkdir texi2html_build
    cd texi2html_build
    ../texi2html-1.82/configure && make
    

    All these features enables to build texi2html on a platform in order to run it on another platform, a kind of cross-building. The ./configure switches and $PERL allows to specify everything needed for the build of the texi2html script.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4. Invoking texi2html

    To produce an HTML manual, run texi2html with a Texinfo file as an argument. For example, this manual is created with:

     
    $ texi2html texi2html.texi
    

    texi2html can accept more than one manual on the command line, and will proceed with each of the manuals in turn.

    The behaviour of texi2html may be changed with command line options. These command line options are always associated with corresponding perl variables which may appear in init files, and these variables are presented in this chapter each time a switch is described.

    Boolean command line switches always have a corresponding negated switch, obtained by prepending ‘no’ or ‘no-’ to the switch name. For example --nomenu’ does the reverse of --menu’.

    When more than one manual is processed, the command line apply to all the manuals, except for command-line switches setting the output file names.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.1 General options

    Miscellaneous general options:

    --error-limit=num

    Quit after num errors (default 1000), (variable $ERROR_LIMIT).

    --help

    Display a short help and exit.

    --verbose

    Be verbose.

    --version

    Display version information and exit.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.2 Specifying where to split the generated document

    The HTML manual resulting from the processing of the Texinfo source may be split into files at different levels. This is specified with the option --split’ which takes an argument, namely the level of splitting (variable: $SPLIT). This level may be:

    chapter

    The document is split at @chapter, @appendix, or @unnumbered.

    section

    The document is split at the same places as it is using the ‘chapter’ argument, and also at @section, @appendixsec or @unnumberedsec.

    node

    The document is split at every sectioning command. It is not necessarily split at each node, if the @node structure doesn’t correspond with the sectioning command structure (see below).

    none

    The document isn’t split. This is the default.

    There are two kinds of commands which may be used to define sectioning elements in Texinfo: @node and the structuring commands (@top, @section, @appendixsubsec, and so on). A node just preceding a structuring command is considered to be part of the same sectioning element as that command. If the @node Top isn’t associated with a structuring command it also defines a sectioning element.

    By default, nodes which aren’t associated with a structuring command are not considered to be sectioning commands. They are always considered to be part of a sectioning element defined by a structuring command. It is possible to change this behaviour via the --use-nodes’ option (variable $USE_NODES). In this case, nodes not associated with structuring commands are also considered to be sectioning commands defining a sectioning element.

    This default behaviour mimics texi2dvi behaviour, which ignores @node commands for the purprose of sectioning, while the second looks like makeinfo behaviour (see (texinfo)Two Paths section ‘Two Paths’ in GNU Texinfo).

    As an illustration, the following table shows how a sample Texinfo document is divided into sectioning elements when --use-nodes’ is used and not:

    Texinfo codedefault casewith --use-nodes


     
    @node node1
    @chapter node 1
    node1 text
    
    @node node2
    node2 text
    
    @node node3
    node3 text
    @chapter node 3
    chapter text
    
    first element:
     
    @node node1
    @chapter node 1
    node1 text
    
    @node node2
    node2 text
    

    second element:

     
    @node node3
    node3 text
    @chapter node 3
    chapter text
    
    first element:
     
    @node node1
    @chapter node 1
    node1 text
    

    second element:

     
    @node node2
    node2 text
    

    third element:

     
    @node node3
    node3 text
    @chapter node 3
    chapter text
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3 Setting output file and directory names

    The manual name is constructed by stripping the ‘.texi’, ‘.txi’, ‘.texinfo’, or ‘.txinfo’ extension from the Texinfo file name.

    By default, texi2html generates the manual file in the current directory if the manual isn’t split. A ‘.html’ file extension is appended to the manual name.

    If the manual is split the files are put in a directory named after the manual name. The file name is constructed using the manual name as basename. An underscore followed by a number is appended to the basename for each files corresponding with sectioning elements, with the exception of the top element. For the top element there is nothing appended. The files containing special elements pages have an underscore and a 3 letter code corresponding to their content (‘toc’ for table of contents, ‘abt’ for about, ‘ovr’ for overview, ‘fot’ for footnotes if they are separated) appended. Lastly, an ‘.html’ file extension is appended.

    Thus, if the texinfo file ‘afile.texi’ is processed and split at chapters into 3 files, the generated files (in directory ‘afile’) will be:

     
    afile.html         --> @node Top or @top section
    afile_1.html       --> Chapter 1
    afile_2.html       --> Chapter 2
    afile_toc.html     --> Table of Contents
    afile_abt.html     --> About Page
    

    This default behavior may be modified by several command line options. If the output isn’t split, the prefix file name may be overrided by the --output’ command line option (variable $OUT). If the output is split, and --output’ is set, the files are placed in the directory specified by the argument to the option.

    The basename may be overridden with --prefix’ (variable $PREFIX). If --short-ext’ is given, ‘.htm’ is appended instead of ‘.html’ in the final step (variable $SHORTEXTN). The --top-file’ option overrides the top element file name (variable $TOP_FILE). This can be used to name the top element file ‘index.html’. Similarly, --toc-file’ changes the name of the table of contents file (variable $TOC_FILE).

    Reusing the example above, but this time calling texi2html like so:

     
    $ texi2html -split chapter -prefix manual -short-ext -top-file index.htm -toc-file contents.htm afile.texi
    

    we get, in ‘manual’:

     
    index.htm          --> @node Top or @top section
    manual_1.htm       --> Chapter 1
    manual_2.htm       --> Chapter 2
    contents.htm       --> Table of Contents
    manual_abt.htm     --> About Page
    

    The file names generated by texi2html differ from those generated by makeinfo. makeinfo uses the @setfilename to determine the manual name(1). Also makeinfo uses the node name to construct the file names while splitting at nodes.

    It is possible to get the same behaviour out of texi2html by specifying the --node-files’ option (variable $NODE_FILES). The default is false for this option. If the output isn’t split at nodes, texi2html will still output files named after the nodes, without real content but redirecting to the right file. This trick enables the generated HTML manual to be a target for the cross-references of other manuals generated by makeinfo or texi2html.

    In case the files are named after the node names, another command-line option, --transliterate-file-names’ can be set to trigger ASCII transliteration of node file names (variable $TRANSLITERATE_NODE). Transliteration is set in the default case.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.4 Specifying which regions get expanded

    The default for texi2html is to expand the @ifhtml, @html, and @menu regions, all the @ifnot regions except @ifnothtml, and no other @if regions.

    It is possible to expand other regions by setting --if<region>’, where ‘<region>’ is replaced by the literal name of the region (for example, ‘--iftex’). Symetrically, if --no-if<region>’ is specified, the ‘<region>’ region is ignored. The configuration file array, @EXPAND, holds the names of regions which should be expanded. The only region name present in @EXPAND in the default case is ‘html’.

    If --nomenu’ is set, the @menu sections are not expanded (variable $SHOW_MENU). The default is to expand @menu sections.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.5 Command line options related to Texinfo language features

    Miscalleneous Texinfo related things may be specified via command line options.

    --lang=lang

    Sets the document language similar to the Texinfo directive, @documentlanguage lang (variable $LANG). The default is ‘en’, that is, use the english language strings.

    -Dvar

    Sets var. Equivalent to, @set var 1, in Texinfo.

    -Uvar

    Clears var. Equivalent to, @clear var, in Texinfo.

    -Pdir

    Prepend dir to the list of directories to search for @include files (the associated array is @PREPEND_DIRS, empty in the default case).

    -Idir

    Append dir to the list of directories to search for @include files (the associated array is @INCLUDE_DIRS, empty in the default case).

    The include files are always searched for in the current directory.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.6 Page layout related command line options

    If the --frames’ option is specified, HTML frames are used. A file describing the frame layout is generated, and the document page is associated with a frame where the short table of content appears (variable $FRAMES). The default is not to use frames.

    It is also possible to suppress the section navigation panel with --no-headers’ (variable $SECTION_NAVIGATION, the default is to output all the navigation panels), and to specify whether footnotes should appear at the foot of the same page which contains the reference to the note with --footnote-style’ set to ‘end’ or on a separate page with ‘--footnote-style’ set to ‘separate’ (variable $SEPARATED_FOOTNOTES set to 0 or 1). The default is to have separated footnotes.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.7 Customizing the HTML and text style

    Miscalleneous style changes may be achieved with command line options.

    --doctype=DTD

    --frameset-doctype=DTD

    You can specify the document DTD by setting these options. --frameset-doctype’ applies to the file describing the frames when frames are used (corresponding variables are $DOCTYPE and $FRAMESET_DOCTYPE).

    The default for the document doctype is:

     
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html401/loose.dtd">
    

    And for the frameset doctype:

     
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html401/frameset.dtd">
    

    --iso

    If this option is set, ISO8859 entities are used for some special symbols, like Copyright © (variable $USE_ISO). It is the default.

    --css-include=file

    This command line switch provides for the inclusion of an external Cascading Style Sheet (CSS) file. More than one file may be specified, and ‘-’ stands for the standard input (array @CSS_FILES).

    The option use is the same than for makeinfo and is described extensively in (texinfo)HTML CSS section ‘HTML CSS’ in GNU Texinfo. Briefly, the CSS @import lines from the external file CSS file are pasted before the texi2html CSS rules, and the external file CSS rules are pasted after the texi2html CSS rules.

    --css-ref=URL

    This command line switch provides for the inclusion of an reference to a Cascading Style Sheet (CSS) URL. More than one URL may be specified (array @CSS_REFS).

    --html-xref-prefix=path

    This option sets the base directory for external HTML texinfo manuals (variable $EXTERNAL_DIR). Defaults to ‘../’.

    --def-table

    If this option is set, HTML tables are used to format definition commands, rather than HTML definition tables (variable $DEF_TABLE). Default is false.

    --short-ref

    If this option is set, cross-references are given without section numbers (variable $SHORT_REF). Default is false.

    --number-sections

    If this option is set, sections are numbered (variable $NUMBER_SECTIONS). This is the default.

    --toc-links

    If this option is set, links from headings to TOC entries are created (variable $TOC_LINKS). Default is false.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.8 Expanding @tex and @math regions using LaTeX2HTML

    It is possible to use LaTeX2HTML to process @tex regions and @math{} commands. This is an attractive way to display mathematical constructs in the HTML manual. The --l2h’ option activates this feature (variable $L2H). It is usually desirable to expand @tex sections when this option is specified (see section Specifying which regions get expanded). The default is not to use this feature.

    The --l2h-l2h=program’ option enables changing the name/location of the LaTeX2HTML program processing TeX regions (variable $L2H_L2H). The default is latex2html.

    --l2h-tmp’ sets the directory used for temporary files, this name shouldn’t contain a dot ‘.’ (variable is $L2H_TMP). Defaults to the current dir.

    The file specified by --l2h-file’ is used as LaTeX2HTML init file. It is searched at the same places than init files (see section Use initialization files for fine tuning), and the default is ‘l2h.init’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.9 Use initialization files for fine tuning

    Initialization variables are read first from ‘/usr/local/share/texi2html/Config’ (the exact location being changeable with the --pkgdatadir=dir’ option of the configure script, see Installation of texi2html), ‘/usr/local/etc/texi2html/Config’ (the exact location being changeable with the --sysconfdir=dir’ option of the configure script, see Installation of texi2html), from ‘./Config’ then from ‘$HOME/.texi2html/Config’. Any command-line option can override the corresponding option set in init file, and the option --init-file’ specifies an init file to be loaded, with later settings overriding earlier ones.

    The init files specified with --init-file’ are searched first in the current directory, then in the ‘$HOME/.texi2html/’ directory, in the ‘/usr/local/etc/texi2html/’ directory and lastly in the ‘/usr/local/share/texi2html/’ directory.

    A file is also included based on the language selected, by $LANG, --document-language’ or @documentlanguage. If no language was selected ‘en’ is considered to be the language. All the files with name the language name in ‘/usr/local/share/texi2html/i18n/’, ‘/usr/local/etc/texi2html/i18n/’, ‘$HOME/.texi2html/i18n/’ and then ‘./i18n/’ are included.

    The default initialization options are defined in the ‘texi2html.init’ file contained in the texi2html distribution (which gets included near the beginning of the texi2html script that gets installed).

    To customize texi2html it is best if you copy the appropriate sections from the ‘texi2html.init’ contents into an appropriate local initialization file, make the necessary changes there, and then have texi2html read this initialization file by one of the means described above.

    Some init files are provided with texi2html, for example ‘book.init’ which produces an output more in line with what could be in a book, or ‘chm.init’ outputs files that can be used to produce a CHM file.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5. Overview of initialization files content and loading

    The initialization files are perl files, read as explained in Use initialization files for fine tuning. You don’t need to know much of perl to do some simple changes in variable values, however, to be able to really take advantage of all the features of the initialization file, a good knowledge of perl is required.

    In initialization file two kind of variables appear. These are normal variables (including arrays and hashes) and references on functions. The later permits the dynamic redefinition of functions used to produce the HTML manual. You should be able to change the value of some normal variables without a deep knowledge of perl, by looking at the existing examples. The possible mistakes in that case could be omitted ‘;’, and bad quoting.

    Initialization file are loaded from the main program by the mean of a require, while in the Texi2HTML::Config namespace. This means that the namespace of the main program and the namespace of initialization files are distinct, which ensures that no name clash should happen. The variables are declared with use vars, such that it should be possible to use the use strict pragma in the initialization file code.

    To avoid messing with the variables in the main namespace all the global variables which could be of use in the init files are in the Texi2HTML namespace. Notice that the functions of the main program are still in the main namespace.

    Since texi2html can proceed more than one file on the command line, you should make sure that you initialize the variables that are used during a manual formatting. The handlers explained later can be used for that (see section Bypassing normal formatting).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.1 Setting the encodings

    There are four encodings relevant for texi2html, they are associated with corresponding configuration variables. If these variables are defined they determine a corresponding value in %Texi2HTML::THISDOC which is otherwise autodetected:

    1. The variable $DOCUMENT_ENCODING corresponds with the document encoding. If defined, this variable sets $Texi2HTML::THISDOC{'DOCUMENT_ENCODING'}. If not defined, the encoding appearing in @documentencoding will be used to set $Texi2HTML::THISDOC{'DOCUMENT_ENCODING'}. The @documentencoding value appears in $Texi2HTML::THISDOC{'documentencoding'}.
    2. The texinfo files encoding. If $IN_ENCODING is set, this sets $Texi2HTML::THISDOC{'IN_ENCODING'}. Otherwise, when $Texi2HTML::THISDOC{'DOCUMENT_ENCODING'} is set, $Texi2HTML::THISDOC{'IN_ENCODING'} is also set if the encoding is supported by perl.
    3. The out files encoding. It is associated with the variable $OUT_ENCODING. If defined, $Texi2HTML::THISDOC{'OUT_ENCODING'} is set accordingly. If not defined, the value of $Texi2HTML::THISDOC{'ENCODING_NAME'} or $Texi2HTML::THISDOC{'IN_ENCODING'} is used if one of these variables is set.
    4. The encoding advertized in out files, associated with the variable $ENCODING_NAME. It sets $Texi2HTML::THISDOC{'ENCODING_NAME'} if defined.

      If unset the value of this variable is based on the other ENCODING values, and if they are all undefined, the variable $DEFAULT_ENCODING is used.

    The values for the encoding related variables are set in the default init_out function reference (see section Preparing the output).

    In general the $DOCUMENT_ENCODING and $IN_ENCODING are set to the right values. $OUT_ENCODING is also rightly set according to $ENCODING_NAME. To force a given encoding for the output, the $ENCODING_NAME value may be set. The current default output encoding is UTF-8.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.2 Redefining functions in initialization files

    To redefine a function you must replace the corresponding funtion reference with a reference on your function. Thus you should write your function, give it a name you are certain it is unique in the Texi2HTML::Config namespace, and override the value of the function reference with your own function reference. When another function from the main program (or from another functions of an initialization file) calls the reference, your function will be used.

    For example the function reference corresponding with the function called when doing an anchor is called $anchor. Thus if you want to override the corresponding function you could write:

     
    # override the function reference
    $anchor = \&my_own_function;
    
    # the function reference now refers to
    sub my_own_function {
    # process arguments and return an html anchor
    }
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.3 Conventions used for function prototypes

    As the functions are defined by a reference name, we will always use the reference name in function prototypes. For the function arguments we will use \@array for a reference on an array and similarly \%hash for a reference on a hash.

    Thus, the prototype for the function associated with the function reference ‘$formatting_function’ will be:

    Function Reference: $text formatting_function $arg1 \@arg2

    formatting_function takes as first argument $arg2, as second argument a reference on an array \@arg2 and returns the formatted text $text.

    To redefined the corresponding function, you should write:

     
    $formatting_function = \&my_formatting_function
    
    sub my_formatting_function($ $)
    {
        my $arg1 = shift;
        my $arg2 = shift;
        # prepare $formatted_text
        .....
        return $formatted_text
    }
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6. Fine tuning of the page layout

    Some features of the page layout might be specified with command line options, the corresponding variables are described in Page layout related command line options. Fine tuning of the page layout may be achieved with redefinition of other variables and function references in the initialization files.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.1 The different categories of pages and sectioning elements

    The following sectioning elements can be associated with pages:

    Normal elements

    These are normal sections or nodes. Their association with pages is determined by the splitting of the document. See section Specifying where to split the generated document.

    Top element

    The top element is the higher element in the document structure. If there is a @top section it is the element associated with that section. Otherwise it is the element associated with the @node Top. If there is no @node Top the first element is the top element.

    The top element is formatted differently than a normal element if there is a @top section or the @node Top isn’t associated with a sectioning command.

    Misc elements

    These elements are associated with pages if the document is split. There are four misc elements:

    1. Table of contents
    2. Short table of contents, also called Overview
    3. Footnotes page
    4. About page

    The About page shouldn’t be present for documents consisting in only one sectioning element, or for documents unsplit and without navigation information. The Footnote page should only be present if the footnotes appear on a separated page (see section Page layout related command line options), however a footnote element is present if the document isn’t split. The Table of contents should only be formatted if @contents is present in the document. Similarly the Overview should only appear if @shortcontents or @summarycontents is present. The Table of contents and the Overview may also be directly included within the document, not as separate pages (see section Table of contents and Short table of contents).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.2 Page layout and navigation panel overview

    A page is broken up in three parts. A page header, the sections and a page footer. A common element in the page layout is a navigation panel with icons or text linking to other sections or pages. Another common element is a rule, separating sections or footer. The navigation panel and the rules may be part of the sections or part of headers or footers. You may use the variables $SMALL_RULE, $DEFAULT_RULE, $MIDDLE_RULE and $BIG_RULE for rules of different sizes. The defaults are

     
    $SMALL_RULE = '<hr size="1">';
    $DEFAULT_RULE = '<hr>';
    $MIDDLE_RULE = '<hr size="2">';
    $BIG_RULE = '<hr size="6">';
    

    In the header some important meta data may be defined, like the title or style information, and textual informations may be present in comments. All this doesn’t appear directly in the displayed HTML, though.

    The page layout is mainly controlled by functions, the precise functions called depending on the document splitting. The navigation panel, however, can be customized with variables.

    Element labels

    There are 19 items associated with elements. Each of these is associated with a name and a reference to the element they represent, when such an element exists. The element is either a global element or an element relative to the current element. The relative elements are found with respect with the document structure defined by the section structuring commands (@chapter, @unnumbered…) or by the nodes (in that case the node directions are specified on node line or in menu organization). These items are called element labels. They may be associated with a button (see section Specifying the buttons formatting), and used in the formatting functions (see section Main program variables and usefull functions).

    Here is the list:

     

    An empty button

    Top

    Top element. The associated name is $TOP_HEADING if that variable is defined. This variable is not set by default.

    Contents

    Table of contents

    About

    About (help) page

    Overview

    Overview, short table of contents

    First

    First element in reading order

    Last

    Last element in reading order

    Index

    The first chapter with @printindex. The associated name is $INDEX_CHAPTER, if the variable is set. This variable is not set by default.

    This

    The current element

    Back

    Preceding element in reading order

    FastBack

    Beginning of this chapter or previous chapter if the element is a chapter

    Prev

    Previous section on the same level

    NodePrev

    Previous node

    Forward

    Next element in reading order

    FastForward

    Next chapter

    Next

    Next section on the same level

    NodeNext

    Next node

    Following

    Next node in node reading order

    Up

    Up section

    NodeUp

    Up node

    FileNext

    Forward element first in the next page (or file)

    FilePrev

    Backward element first in the previous page (or file)


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.3 Customization of the navigation panels buttons

    A lot of customization of the navigation panel may be achieved without redefining functions, with variables redefinition. In case it isn’t enough, it is also possible to redefine the function doing the navigation panel formatting.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.3.1 Controlling the navigation panel panel at a high level

    The global formatting of the navigation panels may be changed with the following variables:

    $VERTICAL_HEAD_NAVIGATION

    A vertical navigation panel will be used for the header navigation panel if this variable is true.

    $ICONS

    Icons are used instead of textual buttons if this variable is true.

    $SECTION_NAVIGATION

    If this variable is false there is no section navigation, no navigation panels for the elements within the pages, only at the beginning and the end of the page (see section Page layout related command line options).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.3.2 Specifying the buttons formatting

    Several arrays and hashes enable a precise control on the buttons and their display. The following arrays determine the buttons present in navigation panels:

    @SECTION_BUTTONS

    This array is used for the navigation panel buttons present at the begining of sectioning elements. If split at node or section they are also used at the page footer, and in the case of section navigation at the page header.

    @SECTION_FOOTER_BUTTONS
    @NODE_FOOTER_BUTTONS

    This array is used for the navigation panel buttons present at the footer of pages when split at node or at section.

    If $WORDS_IN_PAGE is set and the output is split at nodes, these buttons are only present if there are more than $WORDS_IN_PAGE words in the sectioning element text. This counting is very rough and include punctuation marks, html elements, numbers. The default is to include the buttons after 300 words.

    @CHAPTER_BUTTONS

    This array is used for the buttons appearing at the page footer if split at chapter, and at the page header if split at chapter and there is no section navigation.

    @MISC_BUTTONS

    These buttons appear at the beginning of special and sections and at the end of these section pages if the output is split.

    @LINKS_BUTTONS

    These are used for <link> elements if they are output in the headers.

    The array specify the buttons displayed in navigation panels, and how the button is displayed. Each element is associated with a button of the navigation panel from left to right. The signification of the array element value is the following:

    reference on a function

    The function is called with argument a boolean true if the navigation panel should be vertical. Should return the formatted button text.

    reference on a scalar

    The scalar value is printed. For some possibly usefull scalars, Accessing elements informations.

    reference on an array

    In this case the first array element should be a reference on text and the second element an element label. In that case a link to the element associated with the element label with the scalar value text is generated.

    For example if the buttons array element is

     
    [ 'Next', \$Texi2HTML::NODE{Next} ] 
    

    The button will be a link to the next section with text $Texi2HTML::NODE{Next}.

    element label

    If icons are not used, the button is a link to the corresponding element which text is defined by the value associated with the element label in the %NAVIGATION_TEXT hash, surrounded by ‘[’ and ‘]’. If the element label is ‘ ’, there is no ‘[’ and ‘]’. The element of the %NAVIGATION_TEXT hash are defined dynamically, in the init_out function reference (see section Preparing the output).

    If icons are used, the button is an image with file determined by the value associated with the element label in the %ACTIVE_ICONS hash if the the link really leads to an element, or in the %PASSIVE_ICONS hash if there is no element to link to. Of course if there is a link to the element the icon links to that element. The button name and the button description are used in HTML attributes to have a textual description of the icon. The corresponding strings are in %BUTTONS_NAME for the button name and %NAVIGATION_TEXT for the description.

    If $USE_ACCESSKEY is set, the accesskey attribute is used in navigation. In that case the %BUTTONS_ACCESSKEY hash is used for the access key.

    Similarly, if If $USE_REL_REV is set, the rel attribute is used in navigation. In that case the %BUTTONS_REL hash is used for the rel attribute.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.3.3 Changing the navigation panel formatting

    If you are not satisfied with this scheme, it is possible to control exactly the formatting of navigation panels by redefining a function reference. The function controlling the display of navigation panel is associated with the following function reference:

    Function Reference: $navigation_text print_navigation \@buttons $vertical

    \@buttons is an array reference which should hold the specification of the buttons for that navigation panel. $vertical is true if the navigation panel should be vertical. Returns the formatted navigation panel in $navigation_text.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.4 Main program variables and usefull functions

    In the functions controlling the page layout some global variables set by the main program are available, with value corresponding with the current layout element.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.4.1 Accessing elements informations

    Four hashes are available, with key the elements labels (as described in Element labels) and values:

    %Texi2HTML::NAME

    The formatted element name

    %Texi2HTML::HREF

    The element hypertext reference

    %Texi2HTML::NODE

    The element node name

    %Texi2HTML::NO_TEXI

    The element name after removal of texi commands

    If $USE_NODE_TARGET is set, the node anchors are used as target for the section HREF, if there is a node associated to that section.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.4.2 Accessing global informations

    Three kinds of global informations are available, miscalleneous global strings, flags set by @set and special flags and section lines.

    Global strings

    The %Texi2HTML::THISDOC hash holds some global informations:

    fulltitle

    title set by @settitle. If there is no @settitle other possibilities are tried (@title, @shorttitlepage…).

    fulltitle_no_texi

    fulltitle without texi formatting

    fulltitle_texi

    fulltitle with texi commands

    title

    title set by @title.

    title_no_texi

    title without texi formatting

    title_texi

    title with texi commands

    author

    Authors list set by @author.

    authors

    A reference on an array containing each author set by @author.

    copying_comment

    Text appearing in @copying with all the texinfo commands removed, put in comments.

    program

    The name and version of texi2html.

    program_homepage

    Homepage for texi2html.

    program_authors

    Authors of texi2html.

    file_base_name

    base name of the texinfo manual file.

    filename

    This is a reference on a hash that holds the filenames for special elements. These files may not be used in certain cases, for example the toc element file name may not be relevant if table of contents is not output separately. The keys are

    doc

    the document file if not split, if split should be the top element file.

    top

    Top element file name.

    toc

    Table of contents element file name.

    stoc

    Overview (also called short table of contents) element file name.

    about

    About element file name.

    foot

    Footnotes element file name.

    frame

    Main frame file.

    toc_frame

    Table of contents frame file name.

    input_file_name

    Name of the texinfo manual file given on the command line.

    destination_directory

    Destination directory for the resulting files.

    extension

    Extension for the output files.

    toc_file

    The file name of the table of contents, should always be valid, even when table of contents are output directly in the document.

    inline_contents

    A reference on a hash containing two key, one for each type of table of contents:

    contents

    The associated value is a reference on an array containg the line resulting from formatting the table of contents, including a heading and a reference.

    shortcontents

    The associated value is a reference on an array containg the line resulting from formatting the short table of contents, including a heading and a reference.

    today

    The date. May be overriden by $DATE.

    user

    The user running texi2html. Maybe overriden by $USER.

    css_import_lines

    reference on an array containing the @import lines of CSS files.

    css_lines

    reference on an array containing the normal lines of CSS files.

    It also holds the arg of the following commands, associated with the command name: kbdinputstyle, paragraphindent, setchapternewpage, headings, footnotestyle, exampleindent, firstparagraphindent, everyheading, everyfooting, evenheading, evenfooting, oddheading, oddfooting, setcontentsaftertitlepage, setshortcontentsaftertitlepage, frenchspacing. If the command doesn’t have any arg, it will be true is it was set.

    Flags

    Flags defined by @set may be accessed through the %main::value hash. The key is the flag name, the value is the flag value at the end of the document.

    Special flags are set by the main program. They correspond with a texinfo command, like @setfilename, or @settitle, @author… The corresponding flag is the command name with ‘_’ appended, for example, _titlefont corresponds with @titlefont. Like other flags they are available in %main::value.

    Section lines

    The following array references or arrays holds formatted lines:

    $Texi2HTML::THIS_SECTION

    Lines of the current element.

    $Texi2HTML::OVERVIEW

    Lines of short table of contents. See section Special pages formatting.

    $Texi2HTML::TOC_LINES

    Lines of table of contents. See section Special pages formatting.

    $Texi2HTML::TITLEPAGE

    The title page formatted with special title commands (@author, @title) expanded. See section Formatting of title page.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.4.3 Function usefull in page formatting

    The usefull function is a function used to print an array of lines, which also counts the number of words in the array, if needed.

    Function: $words_number main::print_lines $filehandle \@lines_array

    $filehandle is the opened filehandle the function should write to. \@lines_array is the array line the function should write to the file. If this argument is omitted, the function uses $Texi2HTML::THIS_SECTION. $words_number is the number of words in the array, only defined if split at nodes and $WORDS_IN_PAGE is defined.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.5 Preparing the output

    After the texinfo file has been parsed, some information is available which can be used to modify some variables and prepare the outputting. For example the document language, the document encoding, values set with @set or @setfilename and other similar @-commands are not known before the texinfo parsing.

    The following function reference may be redefined to be called after texinfo processing and before document generation:

    Function Reference: init_out

    This function perform the initialization of variables and any other task before document outputting.

    In the default case the $BODYTEXT (see section Customizing the page header) and the hashes %NAVIGATION_TEXT, %BUTTONS_NAME (see section Specifying the buttons formatting), %BUTTONS_GOTO (see section Formatting of about text) are initialized. Indeed the initialization of these variables is dependent upon the document language selection. Similarly the encoding variables are set based on the information now available (see section Setting the encodings).

    To perform the default initializations and also add more code, you could do as in the following example (save the default function reference and call it in your own function) :

     
    my $default_init_out = $init_out;
    $init_out = \&makeinfo_like_init_out;
    sub makeinfo_like_init_out() 
    {
       &$default_init_out();
       $NAVIGATION_TEXT{'Following'} = ' &gt; ';
    }
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.6 Finalizing the output

    If you want to do some cleaning after the document was generated (close files, write at the end of files and so on), the following function reference may be redefined:

    Function Reference: finish_out

    This function is called after the document generation.

    The default is to do nothing.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.7 Customizing the texi2html css lines

    If the variable $CSS_LINES is set it is used for the css entries. For example if you don’t want any css entries, set

     
    $CSS_LINES = '';
    

    If this variable is undef (as in th edefault case), it is possible to modify the texi2html css lines by modifying the entries or adding to the %css_map hash. Each key is a css selector, the corresponding value is a style string.

    Another possiblility is to modify the array corresponding with the array reference $Texi2HTML::THISDOC{'css_import_lines'} that contains the @import lines of CSS files, and similarly it is possible to modify the array corresponding with the array reference $Texi2HTML::THISDOC{'css_lines'} that contains the normal CSS files lines (for details on what corresponds with those different lines, see (texinfo)HTML CSS section ‘HTML CSS’ in GNU Texinfo). The right place to modify these arrays is in a function appearing in the @command_handler_process array (see section Bypassing normal formatting). Later, the CSS lines are allready expanded, by the function reference below.

    In th edefault case, the resulting css lines are in $Texi2html::THISDOC{'CSS_LINES'}. It is also possible to change completely the way $Texi2html::THISDOC{'CSS_LINES'} are generated by redefining the following function reference:

    Function Reference: css_lines \@import_lines \@rule_lines

    This function should be used to construct the variable $Texi2html::THISDOC{'CSS_LINES'}. \@import_lines are the @import lines of the files specified with --include-css’, and \@rule_lines are the css commands lines of these files. See section Customizing the HTML and text style.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.8 Customizing the page header

    It is possible to add lines to the text within the <head> HTML elements, by defining the variable $EXTRA_HEAD. Similarly it is possible to add text just after the <body> element with the variable $AFTER_BODY_OPEN. These variables are empty by default.

    The HTML encoding of the resulting document is defined by $ENCODING_NAME. If the variable isn’t defined, the @documentencoding value is used, or the $OUT_ENCODING value, if set. $ENCODING_NAME may influence the value of $OUT_ENCODING, which corresponds with the encoding used when writing to the resulting files. See section Setting the encodings.

    The description of the document may be specified in $DOCUMENT_DESCRIPTION. If this variable is undef, the text associated with @documentdescription is used, and if there isn’t such test a default description is constructed using the document title and the name of the first section of the file. The value used during document formatting is $Texi2HTML::THISDOC{'DOCUMENT_DESCRIPTION'}.

    The <body> element attributes may be set by defining the variable $BODYTEXT. The resulting attributes are in $Texi2HTML::THISDOC{'BODYTEXT'}. If you want to define that variable dynamically, you should use the init_out function reference (see section Preparing the output).

    <link> element are used in the header if $USE_LINKS is set. @LINKS_BUTTONS determines which links are used. %BUTTONS_REL determines the link type associated with the rel attribute.

    The default functions call the function associated with $print_head_navigation to format the navigation panel for the page header. Thus you can control parts of the formatting by redefining the function reference.

    Function Reference: print_head_navigation $filehandle \@buttons

    $filehandle is the opened filehandle the function should write to. \@buttons is an array reference which should hold the specification of the buttons for the navigation panel.

    If you want even more control, you can have full control over the page header formatting by redefining three function references. The function associated with $print_page_head is called for all the pages, and after that, the function associated with $print_chapter_header is called if the document is split at chapters, or the function associated with $print_section_header is called if the document is split at sections.

    Function Reference: print_page_head $filehandle

    $filehandle is the opened filehandle the function should write to. This function should print the page head, including the <body> element.

    Function Reference: print_chapter_header $filehandle

    $filehandle is the opened filehandle the function should write to. This function is called if the document is split at chapters, after print_page_head.

    Function Reference: print_section_header $filehandle

    $filehandle is the opened filehandle the function should write to. This function is called if the document is split at sections, after print_page_head.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.9 Customizing the sections

    The functions associated with the following function references are used for the formatting of sections:

    Function Reference: $element_header print_element_header $first_in_page $previous_is_top

    $first_in_page is true if this section is the first section in the page. $previous_is_top is true if this section is the section following the Top section. This function should return $element_header, the current section header.

    Function Reference: print_section $filehandle $first_in_page $previous_is_top

    $filehandle is the opened filehandle the function should write to. $first_in_page is true if this section is the first section in the page. $previous_is_top is true if this section is the section following the Top section. This function should print the current section contents.

    Function Reference: end_section $filehandle $last_element_or_before_top

    $filehandle is the opened filehandle the function should write to. $last_element_or_before_top is true if this section precedes the top element or is the last one in page, or before the special elements.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.10 Customizing the page footer

    It is possible to add text just before the </body> element with the variable $PRE_BODY_CLOSE. Nothing is added by default.

    A user name and a date are collected to be output in the footer. You can change them by defining $USER and $DATE in the initialization file.

    The default functions call the function associated with $print_foot_navigation to format the navigation panel for the page footer. Thus you can control parts of the formatting by redefining the function reference.

    Function Reference: print_foot_navigation $filehandle \@buttons

    $filehandle is the opened filehandle the function should write to. \@buttons is an array reference which should hold the specification of the buttons for the navigation panel.

    If you want even more control, you can have more control over the page footer formatting by redefining three function references. The function associated with $print_chapter_footer is called if the document is split at chapters, or the function associated with $print_section_footer is called if the document is split at sections. After that the function associated with $print_page_foot is called.

    Function Reference: print_page_foot $filehandle

    $filehandle is the opened filehandle the function should write to. This function should print the page foot, including the </body> element.

    Function Reference: print_chapter_footer $filehandle

    $filehandle is the opened filehandle the function should write to. This function is called if the document is split at chapters, before print_page_foot.

    Function Reference: print_section_footer $filehandle

    $filehandle is the opened filehandle the function should write to. This function is called if the document is split at sections, before print_page_foot.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.11 Special pages formatting

    For the special elements, two things must be formatted: the content and the page layout


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.11.1 Customizing the content of the special pages

    The label for the special elements, except for the Top element is formatted according to the function reference $misc_element_label:

    Function Reference: $misc_element_label misc_element_label $identifier $page_name

    $identifier is the identifier associated with the special element. $page_name is the special element name. It should return a label that can be used for references to the special element.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.11.1.1 Top element text formatting

    The top element formatting is controlled by three function which also controls the layout of the top element page or section. The associated function references are:

    Function Reference: print_Top_header $filehandle $begin_page

    $filehandle is the opened filehandle the function should write to. $begin_page is true if the element is the first in a page. This function should begin the Top element. At the time this function is called the top element text hasn’t been parsed.

    Function Reference: print_Top $filehandle $has_top_heading

    $filehandle is the opened filehandle the function should write to. $has_top_heading is true if there is a @heading command or @titlefont command appearing in the Top element text. This function should be used to format the Top element text and navigation panel.

    Function Reference: print_Top_footer $filehandle $end_page

    $filehandle is the opened filehandle the function should write to. $end_page is true if the element is the last in a page. This function should end the Top element.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.11.1.2 Table of contents and Short table of contents

    Two possibilities exist for the formatting of table of contents (and short table of contents). In the default case, the table of contents are in separate elements, at the end of the document if the document is unsplit or in separate files. This is consistent with makeinfo where menus are used for navigation. Another mode may be selected by setting $INLINE_CONTENTS. In that case the table of contents are not output as separate elements but are instead output where the corresponding @-command, for example @contents, is set. This behaviour is more consistent with texi2dvi. If @setcontentsaftertitlepage appears in the document, and even if $INLINE_CONTENTS is set, the table of contents are merged in the title (which isn’t output in the default case, see Formatting of title page).

    Several variables may be used to control the formatting of table of contents and short table of contents:

    $DO_CONTENTS

    If the variable is true a table of contents is done even if there is no @contents command. If it is defined and false, no table of contents is done even if there is a @contents command.

    $DO_SCONTENTS

    If the variable is true a short table of contents is done even if there is no @summarycontents command. If it is defined and false, no short table of contents is done even if there is a @summarycontents command.

    $BEFORE_OVERVIEW

    The variable value is inserted before the short table of contents text.

    $AFTER_OVERVIEW

    The variable value is inserted after the short table of contents text.

    $BEFORE_TOC_LINES

    The variable value is inserted before the table of contents text.

    $AFTER_TOC_LINES

    The variable value is inserted after the table of contents text.

    $NO_BULLET_LIST_STYLE

    This should contain a css style used for the list style when there is no bullet.

    $NO_BULLET_LIST_ATTRIBUTE

    This should contain an attribute text used for the list element when there is no bullet. For example it is used in the tables of if they are formatted with a list.

    More control on the table of contents and short table of contents formatting may be achieved by redefining a function with the following associated function reference:

    Function Reference: toc_body \@elements

    \@elements is an array reference contining informations about all the elements of the document. Each of the entry of this array is an hash reference which entries correspond with different informations about the element. Interesting keys have the following meaning:

    top

    true if the element is the top element,

    index_page

    true if the element is an index page added because of index splitting,

    toc_level

    level of the element in the table of content. Highest level is 1 for the top element and for chapters, appendix and so on, 2 for section, unnumberedsec and so on...

    tocid

    label used for reference linking to the element in table of contents,

    file

    the file containing the element, usefull to do href to that file in case the document is split,

    text

    text of the element, with section number,

    name

    text of the element, without section number.

    This function doesn’t return anything but should fill the array corresponding with the $Texi2HTML::TOC_LINES and $Texi2HTML::OVERVIEW references with the table of contents and short table of contents.

    Another function reference is used to add a heading and a reference, to be used with $INLINE_CONTENTS or merged in the title. Its output is not used when the table of contents are separate elements.

    Function Reference: \ @inline_contents_lines inline_contents $filehandle $command $element

    This function reference returns a reference on an array holding the lines containing the contents, heading and reference. $filehandle is a reference on the currently opened file if the function is called because a @contents or @shortcontents command was encountered, it is undef otherwise. $command is either ‘contents’ or ‘shortcontents’. $element is a hash reference containing informations about the table of contents context. Relevant keys are:

    target

    The identifier associated with the table of contents, used for example to do references to the table of contents using href in HTML.

    id

    The identifier associated with the element, used to do labels. In general the same than the target, but not necessarily.

    file

    The file name containing the table of contents.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.11.1.3 Formatting of footnotes text

    The footnotes text is allready formatting when @footnote commands are expanded. See section Customizing the footnotes formatting.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.11.1.4 Formatting of about text

    The default about element contains an explaination of the buttons used in the document (@SECTION_BUTTONS, Specifying the buttons formatting) and an example locating the buttons targets in an example. The formatting of this text may be influenced by the following hashes and variables:

    $PRE_ABOUT
    $AFTER_ABOUT

    This variable may be a scalar or a function reference. If it is a scalar, the value is used. If this is a function reference it is expanded and the returned text is used. The text is added before or after the main about text.

    %BUTTONS_GOTO

    The keys of this hash are element labels (see Element labels). The value is the text associated with the element label in the about text. The element of the hash are defined dynamically, you should in the init_out function reference (see section Preparing the output).

    %BUTTONS_EXAMPLE

    The keys of this hash are element labels (see Element labels). The value is the text associated with the element label in the about example, typically a section number.

    If this is not enough and you want to control exactly the formatting of the about text, you can redefine the function associated with the following function reference:

    Function Reference: $about_text print_about

    This function should return the about text.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.11.1.5 Formatting of title page

    The title page is first formatted using the text appearing in the @titlepage section, and put in $Texi2HTML::TITLEPAGE. The information appearing in @title, @subtitle or @author is then added using the following function reference:

    Function Reference: titlepage

    This function should complete $Texi2HTML::TITLEPAGE.

    In the default case, in this function the table of contents and short table of contents are also added if they are to be output and @setcontentsaftertitlepage or @setshortcontentsaftertitlepage appear in the document (see section Table of contents and Short table of contents).

    In the default case the resulting title page output is not used in the document, except if the top node is not associated with any content.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.11.2 Customizing the layout of the special pages

    The formatting of each of the special pages, or section in case the document is not split, is controlled by a function. The associated function reference is called accordingly:

    print_Top
    print_Top_header
    print_Top_footer

    Formatting of top element page or section. It is also used for the formatting of the top element text (see section Top element text formatting).

    print_Toc

    Formatting of table of contents page or section

    print_Overview

    Formatting of short table of contents page or section

    print_About

    Formatting of about (help) page or section

    print_Footnotes

    Formatting of footnotes section or page in case footnotes are on a separated page or the document isn’t split.

    In the default case, $print_Top calls $print_Top_header for the header and $print_Top_footer for the footer of top element. All the other function call $print_misc which in turn calls $print_misc_header for the headers and $print_misc_footer for the footers.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.12 Customizing the file and target names

    File names

    It is possible to specify the file names with more control than with the command line options (see section Setting output file and directory names). First the extension may be overrided by the variable $EXTENSION value. The variable should be undef if no extension is to be added. Two function references enable further customization. One is usefull in case $NODE_FILES is true and it is used to customize the node file name.

    Function Reference: $node_file node_file_name \%node

    \%node is a hash reference with the following interesting keys (there are much more keys):

    texi

    The texinfo node name.

    with_section

    True if associated with a section.

    The result is the node file name $node_file.

    The other is used to customize the file names associated with each element, and the name of the file associated with the special elements.

    Function Reference: $file element_file_name \%element $type $docu_name

    \%element is undefined for the special elements (about, overview, table of contents, footnotes). Otherwise it is a hash reference with the following interesting keys (there are much more keys):

    texi

    The texinfo element name.

    number

    The number associated with a section.

    doc_nr

    A number incremented whenever a new file should begin, based on how the document is split (see section Specifying where to split the generated document).

    text

    The element text.

    name

    The element text without section number.

    $type is empty for normal elements. For the top element it is ‘top’, for the table of contents it is ‘toc’, for the overview it is ‘stoc’, for the footnotes it is ‘foot’ and for about is ‘about’. If frames are used (see section Page layout related command line options), the function reference is also called for ‘frame’, the frame file name, and ‘toc_frame’ the table of content frame file name. $docu_name is the basename of the texinfo manual. The result is the element or special element file name.

    target names

    Similarly target and id may be set. The id is placed where the item is located, the target is used to construct references to that item. In general they should be equal, but not always, for example in the default case, the target for a section is the node id. The following function reference, is for target items (nodes, anchors, floats):

    Function Reference: ($target,$id) node_target_name \%node, $default_target, $default_id

    \%node is the same as in the node_file_name function reference above. $default_target is the target already set (it is also in $node->{'target'}), and $default_id is similarly the id already set.

    For element associated with files (which may be nodes), the function reference is:

    Function Reference: ($target,$id) element_target_name \%element, $default_target, $default_id

    the \%element is the same than in element_file_name, and $default_target and $default_id are the target and id already set.

    Placed items (floats, footnotes, index entries, anchors, contents, shortcontents and headings) file and target may also be set. In the default case, they should be rightly set, so be careful when changing them. The following function reference can be used:

    Function Reference: ($target, $id, $file) placed_target_file_name \%placed_item, \%element, $default_target, $default_id, $default_file, $context

    \%placed_item is a hash reference describing the placed item, in the same vein than above. the \%element is the same than in element_file_name, corresponding with the element containing the placed item. $default_file, default_id and $default_target are the file, id and target already set. $context describes the context, it is empty in the normal cases, and can also be set to ‘footnotes’ if in footnotes, or to ‘no_associated_element’ if the placed item is out of any element (typically in @titlepage, @copying).

    For special elements, the %misc_pages_targets hash is used to set the target and id. The possibilities for the keys are ‘Overview’, ‘Contents’, ‘Footnotes’ and ‘About’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.13 Generation of external files for index entries

    Within the document, @printindex commands are expanded as explained in Customizing the formatting of index lists. In case you want to do something special with index entries, outside of the document, you should first set the variable $IDX_SUMMARY true. After that some function reference will be called for each non empty index. For each index there are 3 function references, one called for initialization, one called for each index entry and the last one called for finalization.

    Function Reference: index_summary_file_begin $index_name $is_printed $manual_name

    $index_name is the two letters name for the index. This function is called for each index appearing in the document, before index_summary_file_entry. $is_printed is true if there is a @printindex for that index. $manual_name is the manual basename.

    Function Reference: index_summary_file_entry $index_name $entry_text $entry_reference $formatted_entry $texi_entry $entry_element_reference $entry_element_header $is_printed $manual_name

    This function is called for each entry of an index. index_name is the name of the index. $entry_text is the entry in plain text, $formatted_entry is the index entry formatted, $texi_entry is the entry with texinfo commands. $entry_reference is the reference placed at the index entry place, in the form ‘file#id’. $entry_element_header is the formatted header of the element containing the index entry. entry_element_header is the reference to the beginning of the element containing the index entry, in the form ‘file#id’. $is_printed is true if there is a @printindex for that index. $manual_name is the manual basename.

    Function Reference: index_summary_file_end $index_name $is_printed $manual_name

    $index_name is the two letters name for the index. This function is called for each index appearing in the document, after index_summary_file_entry. $is_printed is true if there is a @printindex for that index. $manual_name is the manual basename.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7. Customizing HTML and text style in init files

    Some simple customization may be achieved with the redefinition of the variables associated with the command line options. For the description and an explanation of the meaning of these variables, Customizing the HTML and text style.

    Other variables and hash entries can be modified in initialization file to achieve more customization. Lastly, functions references corresponding with functions called from the main program and initialization files may be redefined.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.1 Three contexts for expansions: preformatted, normal and string

    There are three contexts of interest, one is the normal context, the other is a special context, called the preformatted context and the last is the string context. The preformatted context occurs when the spacing between words is kept. This is the case, for example, in @display or @example regions, and in menu comments (see section Menu formatting). The preformatted regions are usually rendered in <pre> elements in HTML. The string context occurs when rendering strings without formatting elements, in comments or titles for example.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.2 Three passes: macro expansion, document structure and output

    There are three passes in texi2html. During pass 0, the @macro are expanded, in pass 1 the document structure is gathered and in pass 2 the result is output. In most cases you shouldn’t care about it, as almost all of the output customization is done in pass 2. Only if you want to do something before the pass 2 should you care.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.3 Customizing the formatting of commands without argument

    This includes the commands whose name is a nonletter character like @@, the commands with lettered characters and braces but whose braces should be empty, like @TeX{}, or some commands associated with accentted letters like @AA{}. If there happens to be something within the braces, it is put after the command, thus

     
    @TeX{something}
    

    leads to the same than

     
    @TeX{} something
    

    Each of these categories of commands have three associated hashes, one for normal context, the other for preformatted context and the last in strings. The keys of the hashes are the command names, the associated value is the text replacing the command.

    The hashes are:

    command typenormal textpreformatted textstring
    one nonlettered character %simple_map %simple_map_pre %simple_map_texi
    nothing in braces %things_map %pre_map %texi_map

    To change the HTML resulting from these constructs, just change the value. For example, if you want &shy; to be outputted for @- in normal and preformatted context, write in your init file:

     
    $simple_map{'-'} = '&shy;';
    $simple_map_pre{'-'} = '&shy;';
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.4 Punctuation commands

    The formatting of a punctuation character followed by is determined by the hash %colon_command_punctuation_characters. If a command is preceded by a character in th is hash, it is replaced by the associated value. In the default case, the associated value is also the character, so this leave the punctuation character unmodified.

    The following function reference may be redefined to handle characters that are in %colon_command_punctuation_characters:

    Function Reference: $punctuation $colon_command $character

    The $character is a character appearing in %colon_command_punctuation_characters and preceding a command. In the default case the associated value in %colon_command_punctuation_characters is returned.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.5 Customizing accent, style and other simple commands

    The formatting of the HTML produced by style and indicatric commands (@tt, @code, @email, @titlefont), the accentuation related commands taking argument (@', @udotaccent, @dotless) and miscalleneous commands (@email, @verb, @w, @uref, @math, @asis) is controlled by two hash in the default case, %style_map for normal context, %style_map_pre for preformatted context and %style_map_texi in string context.

    The key of the hashes are the command names. There are two possibilities for the values corresponding with two interfaces. The values may be strings or hash references, and you can chose the interface depending on the one you prefer. The interface with hash reference is a bit more flexible but might also be regarded as more complex. If you don’t like either of these interfaces you can define your own.

    Some remarks are in order:

    • The nonlettered accent commands which following character is considered to be the argument (like in @`a) should be keys of the hash %accent_map hash, even if no value is associated.
    • @math is handled differently if LaTeX2HTML is used.

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.5.1 An interface for commands formatting with a hash reference

    The key of the hashes are the command names. The value determine how the command argument is formatted. This value is a reference on a hash. In this hash each key corresponds with a type of information for the formatting, and the value is the corresponding information. For example, in

     
    $style_map{'command'} = { 'args' => ['code'], 'attribute' => 'code'};
    

    the arguments for @command are interpreted as specified by the values associated with the ‘args’ key while the attribute associated with that command is ‘code’.

    The following keys in the hashes associated with each command have the following meaning:

    args

    The value associated is a reference on an array. Each element of the array defines how the arguments (separated by ‘,’ in the texinfo code) for the @-command should be formatted. The possibilities are

    normal

    for normal text,

    code

    for text with ‘---’, ‘--’, ‘''’ and ‘``’ kept as is,

    keep

    if the texinfo should be kept as is, without interpretation of the @-commands.

    For example, we have

     
    $style_map{'email'}->{'args'} = ['code', 'normal'];
    

    because ‘---’, ‘--’, ‘''’ and ‘``’ should be kept as is in the first argument of @email.

    The default is ‘['normal']’.

    attribute

    If the associated value is a word, it is considered to be an HTML element name, and the argument is enclosed between the element opening and the element closing. For example, if the value is elem, the resulting HTML is <elem>arg</elem>.

    If the text is a word followed by some text, the word and is interpreted as above, and the text is considered to be the attributes text of the element. Thus elem class="elem" leads to <elem class="elem">arg</elem>.

    This works only if there is only one argument.

    begin

    The associated value is added in front of the text.

    begin

    The associated value is added after the text.

    quotes

    If the corresponding value is true, the result is enclosed in quotes $OPEN_QUOTE_SYMBOL and $CLOSE_QUOTE_SYMBOL, with defaults ‘`’ and ‘'’.

    function

    The corresponding value should be a function reference. The corresponding function is called with the following arguments:

    $command

    The @-command name

    $args

    A reference on an array containing the arguments of the @-command.

    $command_stack

    A reference on an array containing the name of the @-commands containing the @-command being formatted, latest on top.

    $state

    A reference on a hash containing a lot of informations about the context of the @-command.

    $line_nr

    An opaque structure containing the information about the line number of the @-command. It can be used to call main::echo_error or main::echo_warning with first argument a message, and second argument $line_nr.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.5.2 An interface for commands formatting with a string

    The keys of the hashes are the command names. The value determine how the command argument is formatted. If the value begins with ‘"’, the result is enclosed in quotes $OPEN_QUOTE_SYMBOL and $CLOSE_QUOTE_SYMBOL, with defaults ‘`’ and ‘'’.

    The command argument is allready formatted as HTML. The remaining of the value text (or the value text if there were no ‘"’) is interpreted as follow:

    • If the text is empty the argument of the command is left as is.
    • If the text is a ‘&’ followed by a name, like ‘&function’, the name is considered to be a function name, and this function is called to format the argument of the command. The first argument of the function is the command name, the second is the command argument. For example, if the value associated with the (fictituous) command @foo is &my_func and we have:
       
      sub my_func
      {
          my @args = split /,\s*/ $_[1];
          return "$_[0]: $args[0]" if ($args[1] = 1);
          return "$args[0]";
      }
      

      The result of

       
      @foo{truc, 1}
      @foo{truc, bidule}
      

      will be

       
      foo: truc
      truc
      
    • If the text is a word, it is considered to be an HTML element name, and the argument is enclosed between the element opening and the element closing. For example, if the value is elem, the resulting HTML is <elem>arg</elem>. Similarly "quoted leads to `<quoted>arg</quoted>'.
    • If the text is a word followed by some text, the word and is interpreted as above, and the text is considered to be the attributes text of the element. Thus elem class="elem" leads to <elem class="elem">arg</elem>.

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.5.3 Defining the style and indicatric commands interface

    If you don’t like this scheme, it is possible to change how those commands are processed by redefining the following function reference:

    Function Reference: $resulting_text style $style $command $text $args $no_close $no_open $line_nr $state $command_stack

    $command is the @-command, $style is the value associated with the $command in the %style_map, %style_map_pre or %style_map_texi hashes. The $text is the text appearing within the @-command braces. args is a reference on an array contening the command arguments formatted according to the same conventions than with the reference hash style (provided the value associated with the @-command is a hash reference with a $arg key as described in Reference hash args). If $text is split in paragraphs each paragraph is passed through the function, and $no_close is true if it is not the last paragraph, while $no_open is true if it is not the first paragraph. $line_nr is an opaque structure containing the information about the line number of the @-command. It can be used to call main::echo_error or main::echo_warning with first argument a message, and second argument $line_nr. $state is a reference on a hash containing a lot of informations about the context of the @-command. $command_stack is a reference on an array containing the name of the @-commands containing the @-command being formatted.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.6 Formatting of special simple commands

    The formatting of special simple commands is controlled by functions. To customize the output, the corresponding function references should be redefined. All these functions return a formatted text.

    The formatting of anchors is controlled by $anchor_label.

    Function Reference: $anchor_label anchor_label $identifier $anchor

    $identifier is the anchor identifier, $anchoris the @anchor argument.

    In the default case, it uses a function reference, $anchor that can do a reference target or link. It is especially relevant for HTML but can be used in other formats, it is a rather common element of different formats.

    Function Reference: $anchor anchor $identifier $href $text $attributes

    If $identifier is not empty, this value should be used to create a target for links (typically associated with a name or id attribute in HTML). The $href argument specifies a hpertextual reference which should be used to link to a target. In case both $identifier and $href are given the text produced should be both a target for $identifier and a link to $href. $text is the text to be displayed. $attributes are additional attributes. It should be reasonable to assume that the attributes are for a <a> HTML element.

    To customize the images produced by @image, the first possibility is to modify the @IMAGE_EXTENSIONS, which holds a list of filename extensions for image files. It is also possible to redefine the function used to determine the filename of the image:

    Warning: This description is wrong. The API is still moving, so don’t count on it.

    Function Reference: $filename image_files $basename $extension

    $basename is the first @image argument, $extension is the corresponding @image argument. This function reference should return an array of image filenames without path that the main program should look for.

    Last, it is possible to control the formatting of @image by redefining:

    Function Reference: $image image $file_path $basename $preformatted $file_name $alt_text $width $height $raw_alt $extension $working_dir $file_relative_path

    $file_path is the image file name with the path from the output directory to the source manual directory prepended, $basename the file name without extension (the first @image argument). $preformatted is true if the image appears in preformatted text. $file_name is the file name without path but with extension. $alt_text is the alternate text, it may be undefined. $width and $height are the corresponding arguments of @image, $raw_alt is the unmodified alt argument of @image and $extension holds the corresponding @image argument. $working_dir is the path to working dir relative to the output directory. $file_relative_path is the file name relative to the $working_dir.

    The formatting of @sp is controlled by:

    Function Reference: $sp sp $number $preformatted

    $number is the numeric argument of @sp. $preformatted is true if the @sp appears in preformatted text.

    The formatting of @acronym and @abbr is controlled by:

    Function Reference: $acronym acronym_like $acronym_texi $acronym_text $with_explanation \@explanation_lines $explanation_text $explanation_simply_formatted

    $acronym_texi is the acronym argument with texinfo @-commands, $acronym_text is formatted.

    The other arguments are related with the explanation, the second arg of the acronym. $with_explanation is true if the second argument of the acronym command is present. If an explanation exists, coming from previous @acronym or as an arg of this command, the other args are defined: \@explanation_lines is a reference on an array containing the simply fomatted explanation lines, $explanation_text is the explanation text formatted, $explanation_simply_formatted is the explanation with a light formatting, unabling in HTML (or XML) the explanation to be in an attribute.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.7 Processing special characters in text

    Some characters are processed especially in text: ‘---’, ‘--’, ‘``’ and ‘''’. This is done only if in normal text and not in some commands (@code, @env…). A function reference is called to process the text and should take care of those constructs. It may also be used to transform the text, for example set it in upper case if it is in @sc. This function should also take care of protecting special characters

    Function Reference: $processed_text normal_text $text $in_raw_text $in_preformatted $in_code $in_simple $command_stack

    The function processes $text and returns $processed_text. The other arguments give some information about the context of the text. $in_raw_text is true if the text appears in special place where there is no formatting, typically in comments. $in_preformatted is true if in a preformatted environemnt, and $in_code is true if in a special command like @code, @env where ‘---’, ‘--’, ‘``’ and ‘''’ should not be touched. $in_simple is true if in string context. $command_stack is an array containing the name of the formatting @-command that enclose the text.

    In the default case the ‘---’, ‘--’, ‘``’ and ‘''’ constructs are expanded if needed and the text is upper-cased if in @sc. Special characters (‘&’, ‘"’, ‘<’ and ‘>’ in HTML) are protected if needed.

    Some characters are special, for example we have ‘&’, ‘"’, ‘<’ and ‘>’ in HTML. In some cases some pieces of text don’t go through the above function, but still needs to be protected to appear in text. This is done by the function associated with the function reference

    Function Reference: $protected_text protect_text $text

    The function processes the unprotected text $text and returns the resulting protected text $protected_text.

    Empty lines are processed by the following function reference, which could be usefull if empty lines are to be removed for example

    Function Reference: $resulting_text empty_line $empty_line $state

    This function processes an $empty_line and returns the resulting text $resulting_text. $state is a structure that holds informations about the state of the parsing. Empty lines are left as is by default except right after a definition @-command.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.8 Customizing strings written by texi2html

    texi2html writes some strings in the generated document at various places, at the page footers, on the help page, for special section headings, buttons alt text and so on. These strings are customizable. The string chosen depends on the language of the document (set by --document-language’, $LANG or @documentlanguage). This is the basis for internationalization as it allows for strings translations.

    The strings are found in a hash reference, $LANGUAGES. Each key is a language code. The associated value is also a hash reference. The key is an english string and the associated value is the string replacing the english string, if present. For example, we have

     
    $LANGUAGES->{'fr'} = {
                  ' Up ' => 'Plus haut',
    };
    

    It means that whenever the string ‘ Up ’ is to be written and the language is ‘fr’, ‘Plus haut’ is written. It is possible to customize the english strings by redefining the ‘en’ language hash.

    When a string contains a ‘%’ followed by ‘{name}’ it means that the string will be expanded by texi2html. For example, if we have

     
    $LANGUAGES->{'fr'} = {
                  'See %{node_file_href}' => 'Voir %{node_file_href}',
    };
    

    %{node_file_href}’ will be expanded to an href for a node in a file by texi2html in the string. A ‘%%’ will be expanded as ‘%’.

    When a @documentlanguage appears in the document and the language wasn’t set on the command line, it may be convenient for the user to redefine some variables based on the new language. There is a function reference that may be used for that, it is called each time a @documentlanguage is encountered:

    Function Reference: $translate_names

    This function is called each time @documentlanguage is encountered and the language wasn’t seet on the command line. It should be used to retranslate some strings based on the new language.

    For more on internationalization, see Internationalization.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.9 References


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.9.1 Reference to external manual

    The references are produced with two function references, one for the hypertextual reference construction, the other for the full reference to external manual.

    Function Reference: $href external_href $node $node_identifier $xml_node_identifier $manual_file_name

    $node is the node name, with @-commands. $node_identifer is the node name mapped to an identifier acceptable as a file name. $xml_node_identifier is the node name mapped to an identifier acceptable as an XML identifier. Those identifiers are built as explained in (texinfo)HTML Xref section ‘HTML Xref’ in GNU Texinfo, thus allowing for cross references to external manuals. $file is the manual or file name of the external reference. This function should return an href leading to the external manual.

    The default for this function is to make a reference compatible with makeinfo (see (texinfo)HTML Xref section ‘HTML Xref’ in GNU Texinfo).

    Function Reference: $text external_ref $command $section $book $node_and_file $href $cross_ref_name \@args_texi \@formatted_args

    This function formats a reference to an external texinfo manual. The $command is the ref command (ref, xref or pxref, in text, at sentence beginning or in parenthesis). The optionnal $section argument is the section in the book and book is the book title. $node_and_file is the node and file name formatted according to the convention used in info: ‘(file)node’. $href it an hypertextual reference to the distant manual constructed using the above function. $cross_ref_name is an optionnal cross reference name appearing in the reference command. \@args_texi is a reference on an array containing the @-command arguments, not formatted, with \@formatted_args contains the formatted @-command arguments. This function returns the text corresponding with the external html manual reference. This function returns the full formatted text of the external reference.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.9.2 Reference to an internal node

    A function reference is available for internal references.

    Function Reference: $text internal_ref $command $href $short_name $name $is_section \@args_texi \@formatted_args

    This function formats a reference to a node in the current manual. The $command is the ref command (ref, xref or pxref, in text, at sentence beginning or in parenthesis). $href it an hypertextual reference linking to the corresponding node or section. $short_name and $name hold the text for the reference but $short_name can be the node name which is assumed to be shorter than the section name. $is_section is a boolean true if the reference is a reference to a section. \@args_texi is a reference on an array containing the @-command arguments, not formatted, with \@formatted_args contains the formatted @-command arguments. This function returns the full formatted text of the internal reference.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.10 Commands used for centering and flushing of text

    When a command controlling the alignement of text is used (@center, @flushleft and @flushright), the main program takes care of opening and closing paragraphs. The alignement commands are the key of the %paragraph_style hash. The value is used in the function doing the formatting of the paragraphs. See section Formatting (or not) a paragraph and a preformatted region.

    A function references allows for a customization of the formatting of the text appearing in the command block.

    Function Reference: $result paragraph_style_command $command $text

    $command is the command name, $text is the text appearing within the command. This function returns a formatted text. The default is to return the text unmodified.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.11 Formatting (or not) a paragraph and a preformatted region


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.11.1 Paragraph and preformatted region formatting

    The formatting of a paragraph region or a preformatted region, is controlled by function references:

    Function Reference: $paragraph_text paragraph $text $alignement $index $formatting_command $formatting_command_formatted \$paragraph_number $format $item_number $enumerate_style $number $command_stack_at_end $command_stack_at_begin

    This function formats a paragraph. $text is the text of the paragraph, $alignement is the empty string when no alignement command has been seen, otherwise it is the current alignement command name. See section Commands used for centering and flushing of text. $indent holds ‘noindent’ or ‘indent’ if the corresponding @-command appeared in the paragraph. $command_stack_at_end and $command_stack_at_begin are arrays containing the opened @-commands at end and at beginning of the paragraph, latest on top.

    The remaining arguments are usefull when the paragraph appears within a list or table. It is usefull whenever the paragraph has to be formatted differently when appearing in such environments. Moreover in that case the format command (@itemize…) may have an associated formatting command. $formatting_command is this formatting command (like @minus). $formatting_command_formatted is the command formatted in html in case the formatting command is a leading command (like @minus) which should be leading the first paragraph. \$paragraph_number is a reference on the number of paragraphs in that format command. The corresponding variable should be increased when a paragraph is added. $format is the format command. See section Formatting individual table and list items.

    If the $format is an enumerate, $item_number is the number of the item in the list, $enumerate_style is the argument of the enumerate, $number is the number or letter corresponding with this item.

    Function Reference: $preformatted_text preformatted $text $style $region_name $formatting_command $formatting_command_formatted \$preformatted_number $format $item_number $enumerate_style $number $command_stack_at_end $command_stack_at_begin

    This function formats a preformatted region. $text is the text of the preformatted region, $style is the css style associated with that preformatted region (see section Customizing the texi2html css lines). $region_name is the name of the command opening the preformatted region (example…, see Formatting of complex formats (@example, @display…)) or a identifier for the preformatted context (for example menu-comment, see Menu formatting). The alignment commands are not taken into account, as the spaces are preserved in preformatted regions, you should flush and center by hand. $command_stack_at_end and $command_stack_at_begin are arrays containing the opened @-commands at end and at beginning of the preformatted region, latest on top.

    The remaining arguments are usefull when the preformatted region appears within a list or table. It is usefull whenever the preformatted region has to be formatted differently when appearing in such environments. Moreover in that case the format command (@itemize…) may have an associated formatting command. $formatting_command is this formatting command (like @minus). $formatting_command_formatted is the command formatted in html in case the formatting command is a leading command (like @minus) which should be leading the first preformatted region. \$preformatted_number is a reference on the number of preformatted regions in that format command. The corresponding variable should be increased when a preformatted region is added. $format is the format command. See section Formatting individual table and list items.

    If the $format is an enumerate, $item_number is the number of the item in the list, $enumerate_style is the argument of the enumerate, $number is the number or letter corresponding with this item.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.11.2 Avoiding paragraphs in formats

    It is possible to avoid that a format closes the previous paragraph or preformatted region and reopens one, by putting the format command in a hash, %format_in_paragraph with a true value. This only makes sense for few commands since otherwise the nesting of formats and paragraphs could become wrong.

    If the value of %no_paragraph_commands associated with a command is true, no paragraph is started by the command if outside of a paragraph (after an empty line, for example). If the value is set to 0, it will start a paragraph. If the value is not set, reasonable defaults are set.

    It is also possible to stop a paragraph when an @-command happens by putting the @-command in the %stop_paragraph_command hash associated with a true value.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.12 Formatting of complex formats (@example, @display…)

    Here we see how a whole complex format is formatted. For the formatting of the text, see Formatting (or not) a paragraph and a preformatted region.

    The formatting of the complex formats is ultimately controlled by a function, however the default for this function uses a hash reference and changing the hash reference values should be enough in most cases. This hash reference is called $complex_format_map. It has a key for each of the complex format commands (example, smallexample, lisp, smalllisp, display, smalldisplay, format, smallformat).

    The associated value is also a reference on a hash. The keys are:

    begin

    An eval of begin should lead to the beginning of the formatted HTML.

    end

    An eval of end should lead to the end of the formatted HTML.

    class

    The HTML class. If not defined, the command name.

    pre_style

    The preformatted style. If not defined the corresponding CSS style is used.

    style

    If the associated value is code, the format is assumed to be in code style, where with ‘---’, ‘--’, ‘''’ and ‘``’ kept as is. If the key is absent the format inherits the code style and the font from the enclosing context.

    The enclosed text will be formatted as described in Formatting (or not) a paragraph and a preformatted region, and the name of the complex format will be available to the function formatting the text.

    If you aren’t satisfied with this scheme, you can redefine the following function reference for a better control over the complex format formatting:

    Function Reference: $complex_format_text complex_format $format_name $preformatted_text

    $format_name is the complex format name, $preformatted_text is the text allready formatted as described in Formatting (or not) a paragraph and a preformatted region. This function returns the whole complex format.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.13 Customizing the formatting of lists and tables

    The formatting of lists and tables is done at two levels:

    • At the level of the whole region (table or list),
    • At the level of the individual items, rows or cells of the list or table.

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.13.1 Formatting individual table and list items

    In texinfo it is possible to give @itemize or table command (hereafter called a format command) a formatting command. For example @minus is the formatting command here:

     
    @table @minus
    

    The default is to apply the command to the text item, however it is possible to avoid it. The hash %special_list_commands has an entry for each of the format command. Each of these entries is a hash reference. If a formatting command is a key of the hash reference, then the formatting command is not applied to the text item for that format command. For example, if we have:

     
    $special_list_commands{'itemize'} = { 'bullet' => '' };
    

    and we have the following @itemize:

     
    @itemize @bullet
    @item an item
    @end itemize
    

    then @bullet will not be applied to an item.

    More control of the text before formatting of the line or the item is achieved with the following function reference:

    Function Reference: ( $result_line, $open_command) format_list_item_texi $format $line $prepended $command

    The $format is the list or table @-command, $line is the item line, $command is the format command, $prepended is set to the text folllowing the format command on the format argumlent line. The $result_line replaces the item argument, and if $open_command is true, the format command is opened for the line.

    lists

    The items of lists are formatted using the following function reference:

    Function Reference: $list_item list_item $text $format $command $formatted_command $item_number $enumerate_style $number $prepended_texi $prepended_formatted

    This function formats the text between @item commands. $text is the text corresponding with the item. $format is the type of format, ‘itemize’ or ‘enumerate’. $command is the formatting command given in argument to @itemize, $formatted_command is this command formatted if it is a leading command, like @minus.

    If the $format is an enumerate, $item_number is the number of the item in the list, $enumerate_style is the argument of the enumerate, $number is the number or letter corresponding with this item.

    If the $format is an itemize, $prepended_texi is the text that appeared on the itemize line, maybe after the formatting command (if any), and $prepended_formatted is the corresponding text, formatted.

    two column tables

    The two columns tables (@table, @ftable and @vtable), items are formatted using two function references, one for the first line located on the @item line corresponding with the first column, the other for the text appearing on the following lines, corresponding with the second column text.

    Function Reference: $table_item table_item $item_text $index_label_text $format $command $formatted_command $command_stack $text_formatted $text_formatted_leading_spaces $text_formatted_trailing_spaces $item_command

    This function is used to format the text on the @item line. $text_item is the text line. In case there is an index entry associated with the @item (as with @ftable and @vtable), $index_label_text is the text inserted at the place where an index entry appears. See section Formatting of index entries. $format is the type of format, ‘table’, ‘ftable’ or ‘vtable’. $command is the formatting command given in argument to the table format command, $formatted_command is this command formatted if it is a leading command, like @minus. $command_stack is an array with all the @-commands opened, latest on top. $text_formatted is the text formatted by the formatting command if the command is a command with braces like @code. $text_formatted_leading_spaces and $text_formatted_trailing_spaces are the spaces removed before closing the format. $item_command is the item command, ‘@item’ or ‘@itemx’.

    Function Reference: $table_line table_line $text

    This function is used to format the text on the lines following the @item line. $text is the corresponding text.

    multitable

    The multitable elements formatting is controlled by the functions associated with two function references. One for a cell, and the other for a row.

    Function Reference: $multitable_cell cell $text $item_command \@columnfractions \@prototype_row \@prototype_lengths $column_number

    This function is used to format the text of a multitable cell, the text following a @item or a @tab. $text is the corresponding text. $item_command is the command used to introduce the row, such that it is possible to distinguish between @item and @headitem. \@columnfractions is a reference on an array containing the @columnfraction arguments, if any, and \@prototype_row is a reference on an array containing the row prototypes given on the @multitable line, if any. \@prototype_lengths array contains the lengths of the row prototypes formatted. $column_number is the maximal number of columns.

    Function Reference: $multitable_row row $text $item_command \@columnfractions \@prototype_row \@prototype_lengths $column_number

    This function is used to format a multitable row. $text is the row text, with cells allready formatted with the $cell function reference. $item_command, \@columnfractions, \@prototype_row, \@prototype_lengths and $column_number are the same than in the function reference above.

    In the default case, this function is interlinked with $begin_format_texi (see section Customizing format opening) and @multitable formatting since a stack of possible nested multitables is kept to know the cell number.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.13.2 Formatting of a whole table or list

    If the Texinfo command is a key of the %format_map, the associated value is used to specify the formatting of the construct, otherwise a function is called. The value in %format_map associated with a command is interpreted similarly with values associated with more simpler commands:

    • If the text is a word, it is considered to be an HTML element name, and the whole table or list is enclosed between the element opening and the element closing.
    • If the text is a word followed by some text, the word and is interpreted as above, and the text is considered to be the attributes text of the element.
    • If the text is empty nothing is added to the text.

    In case the %format_map isn’t used, a function reference called $table_list should be redefined, the associated function will be called each time a command isn’t found in %format_map.

    Function Reference: $whole_table_list table_list $format_command $text $command $formatted_command $item_nr $enumerate_style $prepended_texi $prepended_formatted \@columnfractions \@prototype_row \@prototype_lengths $column_number

    $format_command is the Texinfo command name, $text is the formatted items. $command is the format command given in argument to the format command, $formatted_command is the same, but formatted. $prepended_texi is the remaining text on the format command line, $prepended_formatted is the same, but formatted. Only relevant in @enumerate, $item_nr is the item number, and $enumerate_style is the @enumerate style. Only relevant in @multitable \@columnfractions is a reference on an array containing the @columnfraction arguments, if any, \@prototype_row is a reference on an array containing the row prototypes given on the @multitable line, if any, \@prototype_lengths array contains the lengths of the row prototypes formatted and $column_number is the maximal number of columns.

    If you still want to use %format_map but differently from the default, it is possible to redefine the following function reference:

    Function Reference: $whole_table_list format $command $format $text

    $command is the @-command, $format is the entry associated with $command in %format_map. $text is the formatted items.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.14 Definition commands formatting

    The formatting of definition commands is controlled by a main hash, 3 strings and another hash, and and five functions. The mainhash describes how the text on the definition line is interpreted, the functions control the formatting of the definition line and the definition function text.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.14.1 Customizing the interpretation of a definition line

    The keys of the hash %def_map are definition command names. There are two types of entries:

    • If the command is a shortcut for another definition command the value is a text and the definition command is replaced by the text.

      For example if we have:

       
      $def_map{'deftruc'} = '@defvr {A truc}';
      

      and a line like

       
      @deftruc var
      

      the line will be transformed in

       
      @defvr {A truc} var
      
    • If the command isn’t a shortcut, it is associated with an array reference. The first element is ‘f’, ‘v’ or ‘t’ corresponding with the index type (‘f’ for function, ‘v’ for variable, ‘t’ for type).

      The remaining of the array describes how to interpret the text following the definition command on the definition command line. The entry item specify what corresponds with the next bracketed item or word. Currently the possibilities are ‘category’, ‘name’, ‘type’, ‘class’, ‘arg’ and ‘argtype’. ‘arg’ means that the arguments are not mixed with type definitions, with ‘argtype’ types are mixed with definitions. When there is no ‘arg’ nor ‘argtype’ it is the same than ‘argtype’ (like makeinfo).

      For example if we have

       
      def_map{'defvr'} = [ 'v', 'category', 'name' ];
      

      The first bracketed item following @defvr is considered to be the category and the next one is the name. The index associated with the definition line is the variables index.

    Some characters are special with regard with definition parsing, they are delimiters, the can have a role in definition argument determination, and also hae a special meaning in arguments parsing. This is not very well documented in the texinfo manual, so it is subject to change. Strings allow to determine the delimiters:

    $def_argument_separator_delimiters

    Characters that separate arguments, currently ()[],.

    $def_always_delimiters

    Character that are always delimiters, if they appear in a type or a parameter, ()[].

    $def_in_type_delimiters

    Character that are considered as delimiters only if in a type. In a parameter they are part of the parameter.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.14.2 Customization of the definition formatting

    Five functions are used when formatting a definition command:

    category name
    Function Reference: $category definition_category $category $class $style $command

    This function precise a category name associating a class $class (if given) with $category. The $style of the definition may be ‘f’, for function, ‘v’, for variable or ‘t’, for type. The $command is the definition @-command.

    Function Reference: $entry definition_index_entry $name $class $style $command

    This function precise a name associating a class $class (if given) with $name. This is used to do an index enntry associated with th edefinition command. The $style of the definition may be ‘f’, for function, ‘v’, for variable or ‘t’, for type. The $command is the definition @-command.

    formatting of the definition line
    Function Reference: $line def_line $class_category_class $name $type $arguments $index_label \@arguments_array \@arguments_type_array \@unformatted_arguments_array $command $class_name $category $class $style $original_command

    This function formats the definition line. $class_category is the category formatted with $definition_category, $name, $type and arguments are the element of the definition line. $index_label is the text inserted at the place where an index entry appears. See section Formatting of index entries. \@arguments_array is an array holding the definition arguments, formatted. \@arguments_type_array holds the type of the definition arguments, like ‘name’, ‘type’ and similar arguments, ‘paramtype’. ‘delimiter’ and ‘param’. \@unformatted_arguments_array holds the arguments without @-command substitution. $command is the definition command, after substitution. $class_name is the class applied on name, formatted as specified in definition_index_entry. $category and $class are the corresponding arguments. $style corresponds with the index style, as explained above. $original_command is the unmodified definition @-command.

    definition text
    Function Reference: $definition_text def_item $text

    This function formats the definition text, $text.

    the whole definition
    Function Reference: $definition def $text

    This function formats the whole definition. The definition line and text formatted by the above functions are in $text.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.15 Customizing headings formatting

    A function controls the formatting of sectioning element headings, with the corresponding function reference:

    Function Reference: $heading_text heading \%element_reference

    The \%element_reference is a reference on a hash corresponding with the sectioning element. The following keys are of interest:

    text

    The heading text

    name

    The heading text without section number

    node

    true if the sectioning element is a node without associated structuring command

    level

    The level of the element in the document tree. ‘0’ is for @top, ‘1’ for @chapter and so on

    tag_level

    the sectioning element name, with @raisesections and @lowersections taken into account

    top

    true if it is the top element

    It is also possible to customize the heading text with section number with the following function reference (called for headings and nodes):

    Function Reference: $result_texi heading_texi $heading_command $heading $number

    $heading_command is the sectioning @-command of that heading. $heading is the texinfo for that heading. $number is the heading number classicaly computed with dots between numbers, and letters for top level appendix numbering. This function should return the texinfo text corresponding with the numbered heading.

    The label associated with the heading that can appear before the heading itself and even before the navigation panel is customized with the following function reference:

    Function Reference: $element_label element_label $identifier \%element_reference $command $unformatted_line

    $identifier is the identifier associated with the heading. \%element_reference is the same as above. $command is the @-command appearing on the line, and $unformatted_line is the line, unformatted.

    Additionally, for @node and sectionning @-commands the formatting of the label, navigation panel and heading is controlled by:

    Function Reference: $element_heagin_text element_heading \%element_reference $command $command_texi_arg $formatted_arg $in_preformatted $one_section $element_heading $first_in_page $is_top $previous_is_top $unformatted_line $element_id $new_element

    \%element_reference is the same as above. $command is the heading @-command. $command_texi_arg is the argument of the @-command, unformatted. $formatted_arg is is the argument of the @-command, formatted. $in_preformatted is true if in preformatted environment. $one_section is true if there is only one section. $first_in_page is true if this is the first heading in a page. $is_top is true if the heading is considered as a top element heading. $previous_is_top is true if the previous helement was a top element. $unformatted_line holds the whole line, unformatted. $element_id is the id of the heading. $new_element is true if the heading is the first of an element block.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.16 Formatting of special regions (@verbatim, @cartouche, @quotation)

    Regions corresponding with raw text, like @verbatim, @html or @tex are formatted according to the following function reference:

    Function Reference: $raw_region raw $command $text

    $command is the command name, $text is the raw text.

    If LaTeX2HTML is used, @tex regions are handled differently, (see section Bypassing normal formatting).

    The @cartouche command formatting is controlled by the function reference:

    Function Reference: $cartouche cartouche $text

    $text is the text appearing within the cartouche.

    The formatting of @quotation and @smallquotation is controlled by two function references. The first one is usefull in case the @quotation has an argument, as it allows to prepend a string to the quotation text:

    Function Reference: $prepended_string quotation_prepend_text $command $text

    $command is the @-command. $text is the argument of the quotation with @-commands not interpreted. This function can return a string which will be prepended to the quotation text.

    The whole quotation is formatted by:

    Function Reference: $quotation quotation $command $quotation_text $argument_text $argument_text_texi

    $command is the @-command. $quotation_text is the quotation text, formatted, with the text prepended by the function above. $argument_text is the argument of the @quotation, formatted. $argument_text_texi is the argument of the @quotation, simply formatted.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.17 Menu formatting

    There are two possibilities for menu formatting:

    The simple formatting in a preformatted is used if $SIMPLE_MENU is true, otherwise the format with tables is used (this is the default).

    If $USE_ACCESSKEY is set, the accesskey attribute is used in anchors. In that case the %BUTTONS_ACCESSKEY hash is used for the access key.

    To understand how the formatting of menus is controlled, the different parts of a menu are first described, then how to control the formatting of each of these parts, for each possible formatting.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.17.1 The structure of a menu

    In texi2html, a menu is considered to be composed of 2 parts, the menu entries and the menu comments. Menu entries are further divided in an entry link and optionnaly an entry description. The entry link consists in a node name and an optionnal menu entry name.

    A menu entry begins with ‘*’ at the beginning of the line. It begins with the entry link, followed by the description. The description spans until the next menu entry, or an empty line not contained within a command block which begun in the description. An empty line or starts a menu comment, which spans until the next menu entry.

    Here is an illustration of these rules:

     
    @menu
    * entry name: node name.        description begins
       description continues
    * another menu entry::
       description begins
                        description continues
    
       A menu comment, after an empty line
    
    * node::                        description begins
    still in description.
    
    * last entry::         description begins @emph{text
    
    of the description, even if there is an empty line,
    because we are in @emph}.
    @end menu
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.17.2 The formatting of the different menu components

    If in a preformatted context (and $SIMPLE_MENU isn’t set), the menu link and description are put in the same preformatted environment. This can be avoided with $SEPARATE_DESCRIPTION.

    Two function references are associated with the formatting of the different parts of a menu:

    Function Reference: $link menu_link $section \%state $href $node $name $ending $has_name $command_stack $preformatted

    $section is the section name corresponding with the link, $href is the link hypertextual reference. $href may be absent. \%state holds informations about the current context. $node is the node name, $name is the name of the node. $ending is the text ending the link entry, in general ‘::’ followed by some spaces. $has_name is true if the entry has an explicit name, otherwise $name has been constructed using the formatted node name. $command_stack is an array containing the commands enclosing the menu link. It is used in the default case to detect if the menu link is right in the @menu or not, since if it is not right below the menu the formatting is simpler. $preformatted is true if in preformatted context. See section Three contexts for expansions: preformatted, normal and string.

    This command is not called if $SIMPLE_MENU is set.

    Function Reference: $description menu_description $description_text \%state $element_text

    $description_text is the text of the menu description. The formatted link is also here if in preformatted context and $SEPARATE_DESCRIPTION is not set. \%state should be used similarly than for the menu link. $element_text is the heading of the element associated with the node. $command_stack and $preformatted are the same than for the menu link.

    The menu comment part is formatted like a normal command, called menu_comment. It is only used if not in preformatted environment and if just below a @menu since otherwise one cannot tell if it is a menu commment or normal text. The default is to have it be formatted like a Formatting of complex formats (@example, @display…), with

     
    $complex_format_map->{'menu_comment'} =
    {
       'begin' => q{"<tr><th colspan=\"3\" align=\"left\" valign=\"top\">"},
       'end' => q{"</th></tr>"}, 'pre_style' => "$MENU_PRE_STYLE", 'class' => 'menu-comment',
    }
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.17.3 Simple menu formatting in a preformatted environment

    If the menu is to be formatted in a single preformatted environment, an entry for ‘menu’ and ‘detailmenu’ should be added to the $complex_format_map hash reference (see section Formatting of complex formats (@example, @display…)). In the default case, if the user didn’t add an entry himself, a very simple entry is used, with:

     
    $complex_format_map->{'menu'} = { 'begin' => q{''} , 'end' => q{''},
        'pre_style' => "$MENU_PRE_STYLE", 'class' => 'menu-preformatted' };
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.17.4 The formatting of the menu in a table

    In the default case, the name of the section corresponding with the node is used instead of the node name. If $NODE_NAME_IN_MENU is true, however, node names are used. If $AVOID_MENU_REDUNDANCY is true and menu entry equal menu description the description isn’t printed. This is the default. Likewise, if node or section name equal entry name, do not print entry name.

    A symbol, $MENU_SYMBOL is put at the beginning of menu entries when the node name is used. The default is ‘&bull;’. If $UNNUMBERED_SYMBOL_IN_MENU is true it is also put at the beginning of unnumbered section names. This is not done by default.

    The menu comments are considered to be preformatted text. The style associated with this preformatted text is determined by $MENU_PRE_STYLE. Default is ‘font-family: serif’. The entry similar with an entry in $complex_format_map (see section Formatting of complex formats (@example, @display…)) used when the menu appears in a preformatted enviroment is in $MENU_PRE_COMPLEX_FORMAT, and, in the default case is:

     
    $MENU_PRE_COMPLEX_FORMAT = {
                  'pre_style' => $MENU_PRE_STYLE, 
                  'class' => 'menu-preformatted'
       };
    

    The css class associated with menu comments is menu-comments.

    The following function reference controls the formatting of a wole menu or a detailmenu in that case:

    Function Reference: $menu menu_command $command $menu_components_text

    $command is the menu command, currently ‘menu’ or ‘detailmenu’. $menu_components_text is the formatted menu components text, obtained as explained above.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.18 Indices formatting

    Two different things needs to be handled for indices formatting, the place where the index term appears, the index entry, and the index list itself. The indexing commands like @cindex determines where index entries appear, and the index list is printed with a @printindex command.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.18.1 Formatting of index entries

    Index entry places in the main text may be the target for hypertext references. Their formatting is controlled by the function associated with the following function reference:

    Function Reference: $target index_entry_label $identifier $preformatted $entry $index_name $index_command $texi_entry $formatted_entry

    $identifier should be used to create a target for links (typically associated with a name or id attribute in HTML). $preformatted is true if the index entry appeared in preformatted text. $entry is the index entry with all the @-commands removed. $index_name is the index name, $command is the index command which may be a index command like @cindex, but also a definition or a table. $texi_entry is th eindex entry with @-commands, and $formatted_entry the entry formatted.

    Regular index entries are (like @cindex) are formatted using the following function reference:

    Function Reference: $index_entry index_entry_command $command $index_name $label $entry_texi $entry_formatted

    $command, $index_name, $entry_texi and $entry_formatted are the same as above, and $label is what could be used as a label, formatted using the function above.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.18.2 Customizing the formatting of index lists

    There is an elaborate default index formatting in texi2html, with index summary by letter linking to index entries grouped by letters too, with the possibility of index pages split accross files. This system may be completly bypassed by redefining the function reference that is called when @printindex is encountered:

    Function Reference: $index_text printindex $index_name

    $index_name is the index name appearing on the @printindex line. The index formatted should be returned by this function reference.

    If the default index formatting is used, there are still possibilities to customize part of the formatting. The index entries are sorted alphabetically. A whole index list is considered to be composed of letter entries. A letter entry is composed by all the index entries beginning with that letter. A letter may be a non alphabetical character, but we call it letter here.

    An index summary appears at the beginning and at the end of an index list, and should be used to jump directly to a letter entry. Indices lists may be split across pages, thus the different letters may appear on different files. The number of index entries appearing on each page is determined by a variable $SPLIT_INDEX if set. The default is to split indices after 100 entries.

    The formatting of all these elements is controlled by the following function references:

    formatting of a letter in a summary
    Function Reference: $letter summary_letter $letter $file $identifier

    This function is used to format a letter appearing in a summary, refering to a letter entry in the index list. $letter is the letter. $file is the file name where the letter entry appears. More precisely, it is empty when the letter entry is on the same page than the summary, it contains the file name when the index page is split accross page. $identifier is an identifier for the target letter entry.

    formatting of a summary
    Function Reference: $summary index_summary \@alphabetical_letters \@nonalphabetical_letters

    \@alphabetical_letters and \@nonalphabetical_letters contain the formatted summary letters, formatted with the above function.

    formatting of an index entry
    Function Reference: $entry index_entry $entry_href $entry_text $section_href $section_heading

    $entry_href is a reference to the place where the index entry appeared, $entry_text is the corresponding text. $section_href is a reference to the beginning of the sectioning element containing the index entry, $section_heading is the heading of the element.

    formatting of letter entry
    Function Reference: $letter_entry index_letter $letter $identifier $index_entries_text

    This function formats a letter entry, consisting in all the index entries beginning with this letter. $letter is the letter, $identifier should be used to create a target for links (typically links from summaries), and $index_entries_text is the text of the index entries formatted as described above.

    formatting of whole index
    Function Reference: $index print_index $index_text $index_name

    $index_text is the text of all the index entries grouped by letter appearing in that page formatted as above. It is undef if there are no entries or theindex name isn’t known. index_name is the name of the index, the argument of @printindex.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.19 Floats and lists of floats

    Floats appear in the @float environment, optionaly with a style and a label, and with optionnal @caption and @shortcaption. Their list appear after a @listoffloats.

    A hash reference is associated with each float, it is available in some formatting functions. The keys are:

    caption_texi
    shortcaption_texi

    A reference on an array containing the caption or shortcaption lines, with texi @-commands.

    style_texi

    The style with texi @-commands.

    style_id

    The unique identifier associated with the style.

    style

    The style formatted.

    nr

    The number with the same conventions than makeinfo (use the chapter number a dot and then the number of the float of that style in the chapter, or an absolute number if in unnumbered).

    chapter_nr

    The number of the chapter containing the float.

    nr_in_chapter

    The number of the float in the chapter.

    absolut_nr

    The number of the float in the document.

    texi

    The label with @-commands.

    name

    The label formatted.

    id

    The unique identifier associated with the label. Usefull to make an anchor or a reference.

    target

    The target that can be used to refer to that float.

    element

    A reference on a structure representing the element the float appear in.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.19.1 Formatting a float

    First there is an occasion to construct a texinfo text for the caption, using the caption texinfo lines and the informations in the float structure. The returned lines will be formatted in the main program. A function reference is used here:

    Function Reference: (\@caption_lines_returned, \@shortcaption_lines_returned) caption_shortcaption \%float \@caption_lines \@shortcaption_lines

    \%float is the structure defined above. \@caption_lines and \@shortcaption_lines are references on arrays containing the texinfo lines for caption and short caption. \@caption_lines_returned and \@shortcaption_lines_returned are references on an array containing the texinfo lines for the caption and shortcaption.

    Then the float is formatted with the following function reference:

    Function Reference: $text float $float_text \%float $caption_text $shortcaption_text

    $float_text is the text appearing within the @float, formatted. \%float is still the structure defined above. $caption_text and $shortcaption_text are the caption and short caption build with the above function and formatted.

    It is also possible to do something when a caption or a shortcaption appear with t hefollowing function reference:

    Function Reference: $text caption_shortcaption_command $command $formatted_caption \@texi_lines \%float

    $command is the @-command, ‘caption’ or ‘shortcaption’. $formatted_caption is the caption text, formatted, while \@texi_lines is a reference on an array containing the caption lines, this time without any formatting. \%float is still the structure defined above.

    In the default case this function reference returns an empty string.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.19.2 Formatting lists of floats

    A list of floats is introduced by @listoffloats. The argument of @listoffloats is the style. First the style texinfo can be modified with the following function reference:

    Function Reference: $style_texi_returned listoffloats_style $style_texi

    $style_texi is the @listoffloats argument with texinfo @-commands kept. It is possible to make changes to the $style_texi and return a modified string, still with @-commands. The modified string is formatted in the main program.

    After that, for each of the floats with that style, first there is a possibility to modify the float style and the float caption before they are formatted in the main program, with the following function references:

    Function Reference: $float_style_texi_returned listoffloats_float_style $style_texi \%float

    $style_texi is the style, and \%float is the structure described above. This function reference returns a style to be formatted in the main program.

    Function Reference: $caption_texi_returned listoffloats_caption \%float

    \%float is the structure described above. This function reference returns a caption to be formatted in the main program.

    Each entry is formatted by:

    Function Reference: $listoffloats_entry listoffloats_entry $style_texi \%float $float_style $caption $href

    $style_texi is the style with @-commands, $float_style is the style returned by the above function and formatted. $caption is the caption returned by the above function formatted. \%float is the structure corresponding with the float, and $href is an href pointing to the float location.

    Lastly, the whole @listoffloats is formatted by:

    Function Reference: $listoffloats listoffloats $style_texi $style \@listoffloats_entries

    $style_texi is the style with @-commands, $style is the style returned by the above function and formatted. The array reference \@listoffloats_entries holds the entries formatted by the above function.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.20 Customizing the footnotes formatting

    Each footnote is associated with a footnote entry. Several footnote entries are grouped in a footnote section. When a footnote appears, two things must be formatted: in the main text the place where the footnote appear and the footnote text.

    Two functions, with corresponding function references control the formatting of the footnotes:

    Function Reference: (\@lines $text_for_document) foot_line_and_ref $number_in_doc $number_in_page $footnote_id $place_id $document_file $footnote_file \@lines \%state

    $number_in_doc is the footnote number in the whole document, $number_in_page is the footnote number in the current page. $footnote_id is an identifier for the footnote in the footnote text which should be used to make target for references to that footnote, while $place_id is an identifier for the location of the footnote in the main document. Similarly, $document_file is the file name of the file containing the text where the footnote appears in the main document, while $footnote_file is the file name of the file where the footnote text appears.

    \@lines is a reference on an array containing the footnote text lines, allready formatted. And \%state holds informations about the context at the footnote place in the main document. As usual the most usefull entry is preformatted which is true if the footnote appears in a preformatted context.

    This function returns a reference on an array, \@lines containing the updated footnote text for the footnote entry, and $text_for_document, the text appearing at the footnote place in the main document, linking to the footnote entry.

    The following function is only used when footnotes are at the bottom of a page and the document is split. For customization of the footnotes page in case they are on a separated page or section, Customizing the layout of the special pages. For the determination of the footnote locations, Page layout related command line options.

    Function Reference: foot_section \@footnotes_lines

    This function formats a group of footnotes. \@footnotes_lines is a reference on an array holding the lines of all the footnote entries formatted as explained above. This function modifies the reference.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.21 Customizing format opening

    The following function reference is called when a format is opened. A format is any @-command that ends with a @end except @-commands that only select if the input is processed (like @ignore or @ifhtml) or raw @-commands (like @verbatim and @html).

    Function Reference: $line begin_format_texi $command $line \%state

    The $command is the format command, the $line is the line following the @-command, \%state is a reference on a hash containing many formatting information. It can modify the line and return something else.

    In the default case, it is used to keep track of the multitable nesting. As a consequence, it is linked with the multitable formating. See Multitable formatting.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.22 Bypassing normal formatting

    It is possible to bypass completely the normal formatting of @-commands with braces and raw regions (@html, @tex, @xml… regions). In that case the @-commands and the text within are passed to a user defined function early, in a pass when no expansion of output takes place, called the collecting pass. Another user defined function is called during the output expansion phase.

    Moreover, arbitrary user defined functions may be called between the different texinfo parsing and outputting passes. This could be used, for example to initialize some things before collecting the @-commands and their text, expanding them between the collecting and expansion phase and doing some cleaning after the expansion pass. These possibilities are used for the interface to LaTeX2HTML (see section Expanding @tex and @math regions using LaTeX2HTML), and the examples are taken from that use.

    The @-commands that are keys of the %command_handler hash are collected in the collecting pass and expanded in the expansion pass using user defined functions. The associated value is a reference on a hash used to specify the user defined function references. The key of the hash reference are 'init' for the function reference called during the collecting pass, and 'expand' during the expansion pass. Here is an example for an @-command with braces:

     
    $command_handler{'math'} =
         { 'init' => \&Texi2HTML::LaTeX2HTML::to_latex,
           'expand' => \&Texi2HTML::LaTeX2HTML::do_tex
         };
    

    And an example for a raw region @-command:

     
    $command_handler{'tex'} =
         { 'init' => \&Texi2HTML::LaTeX2HTML::to_latex,
           'expand' => \&Texi2HTML::LaTeX2HTML::do_tex
         };
    

    The function references are called like:

    Function Reference: $status $command_handler{'$command'}->{'init'} $command $text $count

    $command is the @-command name, $text is the text appearing within the @-command. $count is a counter counting how many times this @-command appeared. $status is a boolean which should be true if the collecting was succesfull. If false the @-command and the text is discarded.

    Function Reference: $result $command_handler{'$command'}->{'expand'} $command $count $state $text

    $command is the @-command name, $count is a counter counting how many times this @-command appeared. $state is a reference on a hash containing many informations about the context. $text should be empty. $result is the expanded resulting text.

    There are three places for user defined functions, associated with arrays:

    @command_handler_init

    The function references in that array are called before the collecting pass. At that time the information available is essentially the file names.

    @command_handler_process

    The function references in that array are called between the collecting pass and the expansion pass. At that time all the special @-commands have been collected as explained above but no output has been produced.

    @command_handler_finish

    he function references in that array are called after the end of the output generation.

    Here is an example of these arrays use:

     
    push @command_handler_init, \&Texi2HTML::LaTeX2HTML::init;
    push @command_handler_process, \&Texi2HTML::LaTeX2HTML::latex2html;
    push @command_handler_finish, \&Texi2HTML::LaTeX2HTML::finish;
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.23 Handling special regions

    Special regions @titlepage, @documentdescription and @copying are removed from the document before the last pass in the default case. They can be kept if the value associated with the @-command in the %region_formats_kept hash is true.

    The @insertcopying @-command is formatted by

    Function Reference: $insertcopying insertcopying $text $comment $simple_text

    $text is the text appearing in @copying, formatted. $comment is the text with texi removed, should be very simple text. $simple_text is the text formatted in string context.

    The title page handling is described in Formatting of title page.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.24 Customizing other commands, and unknown commands

    Many commands without braces are available in texinfo, sometimes with a specific syntax. For example we have @sp, @noindent, @documentlanguage, @oddheading, @headings, @shortcontents, @shorttitlepage or @comment. texi2html interprets some of these commands and some functions or variables are used for their formatting or to access their information. In the default case, however, most of these constructs are ignored.

    It is possible to change how the things following these commands on the line are handled, what is considered to be an arg for those commands and it is also possible to keep them instead of discarding them such that it is possible to handle them specially, with the same function than the one used for unknown commands.

    Those special commands without braces are the key of a hash: %misc_command. The associated value is a reference on a hash enabling to set the properties of these commands. The keys of this hash reference is the name of a property, the value is the value of the property. For example here we have line for the arg property for the command @-command.

     
    $misc_command{'command'} = {'arg' => 'line', 'skip' => 'space'};
    

    The properties and possible values are:

    skip

    This property enables to set what is skipped after the command arguments. Here are the possible values:

    line

    The remaining of the line is skipped.

    space

    Spaces are skipped but not newline.

    whitespace

    Spaces are skipped

    linewhitespace

    Spaces are skipped if there are only spaces remaining on the line.

    linespace

    Spaces are skipped, but not newline if there are only spaces remaining on the line

    arg

    If the associated value is line the line is considered to be the argument. If it is a number it is the number of args (separated by spaces).

    keep

    If true the args and the macro are kept, otherwise they are discarded. The defaut is to have keep undef for all the commands. If keep is true for @verbatiminclude the default action for this macro isn’t done.

    Commands which don’t appear in the hashes %simple_map, %simple_map_pre, %simple_map_texi and %misc_command, or that appear in %misc_command but with keep true are processed by the following function reference:

    Function Reference: ($result_line, $result, $result_text, $message) unknown $command $line $pass

    $command is the @-command, $line is the line following the $command. $pass is the pass of texi2html (see section Three passes: macro expansion, document structure and output). $result is a boolean. If it is true then the other return values are taken into account otherwise the default actions are used. In case $result is true, $result_line is the new line to be processed further, $result_text is the resulting formatted text and $message, if defined is a message outputted to the output with line number added by texi2html.

    Commands with braces not specified above nor in %style_map, %style_map_pre and %style_map_texi are processed by the following function reference

    Function Reference: ($result, $result_text, $message) unknown_style $command $text

    $command is the @-command, $text is the text appearing within the braces (allready formatted). $result is a boolean. If it is true then the other return values are taken into account otherwise the default actions are used. In case $result is true, $result_text is the resulting formatted text and $message, if defined is a message outputted to the output with line number added by texi2html.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A. Internationalization

    The strings written in the document are selected based on the document language. This can be used to customize the strings, as described in Customizing strings written by texi2html. This also enables translation of the strings.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.1 Translating strings


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.1.1 Contributing to existing translations

    If the language is allready supported, then there will be a file in the ‘i18n’ directory with name the two-letter ISO-639 language code. In that case you can enhance the translations by editing this file. There is a $LANGUAGES->{'language'} hash in that file. The keys are the english strings, in '', the values (in '' after =>) are the translations. When a string contains a ‘%’ followed by ‘{name}’ it means that the string will be expanded by texi2html. For an example, see Customizing strings written by texi2html.

    After that you should run the command ./manage_i18n.pl merge in the top directory, it should merge your file with the existing files in ‘translations.pl’, which is incorporated to the ‘texi2html’ script by make.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.1.2 Contributing translations to another language

    If the language isn’t currently supported, copy the ‘en’ file in ‘i18n’ to a file with name the two-letter ISO-639 language code of your language and then add your translations to the strings. You could also add your two-letter language code in the ‘manage_i18n.pl’ file in the @known_languages array.

    After that you should run the command ./manage_i18n.pl update lang and ./manage_i18n.pl merge in the top directory.

    Obsoleted strings are not removed from the files, they are still present in the $T2H_OBSOLETE_STRINGS->{'language'} hash in case the string is reused later.

    If you made change to strings specified in installed files (see section Installation of texi2html) you will have to reinstall them otherwise the installated files will take precedence (see section Use initialization files for fine tuning).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.2 Adding new strings written to document

    If you need to write strings, for example the new string a string to the resulting document, call &$I('a string'). Use simple quotes. If you want to substitute a value in the string put %{string_value}, in the string, and give a second argument to &$I, a hash reference with key string_value and value the what you want to substitute. Here is an example:

     
    return &$I('%{name} of %{class}', 
           { 'name' => $name, 'class' => $class });
    

    In that case %{name} is substituted by $name in the translated string.

    After that you should run the command ./manage_i18n.pl in the top directory, to add your new strings to the template file, that is the file for english and to all the files in the ‘i18n’ directory. This is achieved with

     
    ./manage_i18n.pl template
    ./manage_i18n.pl update
    

    These two commands won’t work if you don’t have the Data::Dumper module installed. And to merge the new translation files in ‘translations.pl’, do

     
    ./manage_i18n.pl merge
    

    All these steps may be performed by make, once the language file is added to ‘Makefile.am’ in the i18n_files variable.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    B. Incompatibilities with previous versions

    texi2html has accumulated a lot of incompatibilities with previous versions. They are documented in the ‘NEWS’ file, we discuss them here nevertheless. Most of the incompatibilities were introduced in version 1.68. API changed also a lot between 1.78 and 1.80.

    • API changes between 1.78 and 1.80:
      • what was done in the beginning of the $print_section function reference is now done in $print_element_header.
      • there is a new argument for $normal_text.
      • there is a new argument for $menu_link and $simple_menu_link, and the name argument is always set, even if there is no explicit name. The new argument is true if there really was an explicit name.
      • $internal_ref and $external_ref don’t change inforef to xref anymore.
      • in $table_item the text is not formatted with the format command, the text_formatted argument is.
      • definition index entries are now formatted with $definition_index_entry, not with $definition_category anymore.
      • $printindex is called if an index appears, even if the index is not defined or there are no index entries.
      • new argument (@-command name) for $quotation and $quotation_prepend_text.
      • change in the heading API. THIS_HEADER is not used anymore. New function reference, element_heading to format a node or a section heading, including navigation and label. Accordingly, print_Top and one_section don’t print the element header anymore. Also it is reported if the element is a new element, is the main element and more arguments, and top element heading is always done in heading.
      • print_element_header and print_navigation now return their result.
      • the copying key of %Texi2HTML::THISDOC is now called copying_comment.
      • TOC_LIST_ATTRIBUTE is now called NO_BULLET_LIST_ATTRIBUTE.
      • TOC_LIST_STYLE is now called NO_BULLET_LIST_STYLE.
      • the $unknown function reference has a new argument, the pass number.
      • --sec-nav’ is replaced by ‘--headers’.
      • --Verbose’ is replaced by ‘--verbose’.
      • --lang’ is replaced by ‘--document-language’.
      • --separated-footnotes’ is replaced by ‘--footnote-style’.
      • --lang’ is replaced by ‘--document-language’.
      • &$menu_comment is removed, menu_comment is now handled like an @-command.
      • @detailmenu is now formatted more like @menu, and the &$menu function reference is replaced by &$menu_command. &$menu is kept for backward compatibility. If &$menu is defined, @detailmenu is ignored.
      • the API for the formatting of menus completly changed. $simple_menu_link is removed, everything should be done in $menu_link.
      • image API changed, and is unstable, so not documented.
      • image file paths are not completed anymore in the default case. The previous behaviour can be restored with $COMPLETE_IMAGE_PATHS set to true.
      • in %misc_command ‘texi’ is not used anymore. The value and macros are expanded as they should be unconditionnally.
      • there is a new ’style’ key in $complex_format_map, to be able to differentiate complex formats inheriting fonts and code_style (like @format, @display).
      • $EXTENSION should be undef if one doesn’t want an extension to be added.
      • THISDOC{’title’} and similar are now for @title since only one @title should appear in the document. @settitle is tried first to set fulltitle.
      • Configuration variables are modified anymore, instead the variable value is put in $Texi2HTML::THISDOC{’VAR’}. This is the case for DO_CONTENTS, DO_SCONTENTS, CSS_LINES, BODYTEXT, DOCUMENT_DESCRIPTION, DOCUMENT_ENCODING, IN_ENCODING, ENCODING_NAME, OUT_ENCODING.

        For example, if $CSS_LINES is defined, the value is put in $Texi2HTML::THISDOC{’CSS_LINES’} which is used for formatting, and if $CSS_LINES is not defined, $Texi2HTML::THISDOC{’CSS_LINES’} is autodetected.

      • When there is no section and $USE_NODES is not set don’t split by node. This behaviour and the previous aren’t documented, so it could change in the future.
    • API changes between 1.76 and 1.78:
      • paragraph has new arguments with indentation information, added as the third argument, and other context information. The formatting linked with commands opened before the paragraph and closed after the paragraph are done in the formatting function. Similar things are done for preformatted.
      • normal_text changed completely. There are much more arguments to give informations about the context, and normal_text now does more text manipulation.
      • New arguments for image the alt text, the height and width, the path to working dir and the path to image file relative to working dir. More image formatting is done in the formatting function.
      • New argument for empty_line.
      • End of line removal is done in formatting function of definition line formatting.
      • node_file_name now should only returns the node file, since the redirection file isn’t used anymore. element_file_name only is used for file names, whatever NODES_FILES is.
    • changes between 1.66 and 1.68:
      • When the manual is split the default is to put resulting files in a directory with name the manual file basename (previously they were left in the current directory). To avoid that, call texi2html with ‘-output .’. This has been changed to be compatible with makeinfo and also because it fits better with the cross manuals reference scheme.
      • The option ‘--output’ signification changed. It now has the same meaning than for makeinfo. It seems that in 1.66 it was the same than ‘-out-file’. ‘--output’ new meaning allows to replace ‘-out-file’ and ‘-subdir’ with a unique option.

        More precisely ‘-out-file’ forces the output to be unsplit while ‘--output’ behaves differently when split (it specifies the directory where the manual files should be outputted) and unsplit (it specifies the output file). ‘-subdir’ is retained for backward compatibility.

        If you want a backward compatibility you can use ‘-subdir’ for the output directory if the document is split, and ‘-out-file’ if the document isn’t split. This hasn’t been tested extensively though.

      • Many options has been obsoleted but they are retained for backward compatibility.
      • The init files are searched in new directories, however they are still searched for in the old directories for backward compatibility.
      • the option ‘--glossary’ doesn’t do anything. Likely nothing specific is done regarding bibliographies. This has been decided because this added some semantics to the texinfo formatting language that weren’t part of texinfo.

        It should be possible to do something similar with macros. See for example ‘glossary.texi’ for glossary and ‘my-bib-macros.texi’ for bibliography in the directory ‘examples’. In the web2c package there is an example of use of BibTeX, see http://tug.org/texlive/devsrc/Build/source/TeX/texk/web2c/doc/ (the examples for bibliography are taken from the texinfo home page http://www.gnu.org/software/texinfo/texinfo.html).

      • don’t use T2H_CENTER_IMAGE. @center should be used insead, it will give the right output for all the formats.
      • If a directory creation fails the program aborts. This is much safer.
      • The interface for internationalisation changed, although the previous wasn’t documented a lot.
      • the API described in this manual changed a lot. A important change was to use the Texi2HTML::Config names space instead of variables prefixed with ‘T2H_’ or ‘t2h_’. To cope with the change the prefix should be removed from variables in init files. Some variables are now in %Texi2HTML::THISDOC.
      • @ifinfo regions are not expanded by default. This may lead to warnings or errors especially if the Top node is enclosed in @ifinfo, as some node won’t appear in menus. The quick fix is to call texi2html with the option ‘--ifinfo’ and the right way should be to make more use of @ifnottex.
      • The code appearing before the first node is now outputted, it was ignored before. ‘--ignore-preamble-text’ revert to the previous behaviour. Enclosing in @ifnothtml would be much cleaner.

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    C. How little texi2html texinfo differs from GNU texinfo

    For features documented in the texinfo manual, the texinfo interpretation by texi2html shouldn’t differ from the interpretation of makeinfo or texi2dvi. However for constructs with unspecified behaviour texi2html often doesn’t lead to the same result than makeinfo or texi2dvi. makeinfo and texi2dvi are also inconsistent in most of these cases (or broken). You are urged not to use these features unless absolutely necessary. This information is only here to help understand why texi2html differ from other texinfo interpreters, it may be inacurate and the texi2html behaviour may change in the future and was different in the past.

    @-commands with text on the line

    In the texinfo manual it is specified that block @-commands should appear on a line without text and the closing @end should also be on a line by himself. With texi2html it is possible to add text before and after the command, so the following is right:

     
    something @example the example @end example after the example
    

    makeinfo and texi2dvi may also accept text before the command and text after the @end command, sometimes ignoring it after the @end.

    This is a feature you should especially not rely on.

    special @-commands handling

    The special @-commands are commands like @pagesizes, @sp, @evenheading, @raisesections, @defindex and a lot more. In many cases makeinfo and texi2dvi don’t parse those commands the same way too. texi2html may also show some differences in parsing of the arguments of these commands, in case there are wrong arguments, and also ignore differently things following those commands. How user defined macros, set and values are expanded in those commands may also be different. Part of the specification of how these commands are handled is configureable (see section Customizing other commands, and unknown commands), but not what happens during the beginning of the parsing for some of those commands.

    features different between makeinfo and texi2dvi

    When makeinfo or texi2dvi use a feature which is reserved for one or the other translator, texi2html uses that feature. So for example @definfoenclose which is ignored by texi2dvi is taken into account and @kbdinputstyle which is ignored by makeinfo is taken into account.

    user defined macros and values

    In this area makeinfo and texi2dvi also differ a lot. The reference implementation is the makeinfo implementation as texi2dvi is easily broken when macros are not used simply.

    • @rmacro and @macro behave exactly the same. In fact this goes against a documented behaviour, however if a user don’t want a recursive macro he can simply avoid reusing the macro in the definition. If somebody report that the feature is usefull we could try to implement it.
    • It is possible to escape the end of a macro definition with
       
      \@end macro
      

      with the ‘\’ being removed after the first expansion. Otherwise it is not possible to produce a \@end macro in a macro.

    • @unmacro is interpreted during the macro argument expansion. Don’t know what makeinfo exactly do.
    • Some @value may be expanded later than the others, those that are in special commands, like @node.
    @, in @node

    Like texi2dvi but unlike makeinfo @, don’t break @node arguments like a regular ‘,’.

    Things before first node or preamble

    Things before the first node or before the preamble may not be exactly interpreted or discarded as makeinfo or texi2dvi do.

    encodings

    texi2html knows more encodings, in fact all encodings perl knows about.

    commands in @ifset and @ifclear

    texi2html doesn’t need a proper nesting of internal @ifset or @ifclear if they are in ignored or raw regions (like @html or @verbatim). For example the following is accepted by texi2html and not by makeinfo:

     
    @ifset notset
    @ignore
    @ifset
    @end ignore
    @end ifset
    

    In @ifset and @ifclear texi2html also accepts a lot more of invalid constructs. For example the following is accepted by texi2html but not by makeinfo:

     
    @set flag
    @ifset flag
    @itemize
    @item my item
    @end ifset
    text
    @ifset flag
    @end itemize
    @end ifset
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    D. Command Line Option Index

    Jump to:   C   D   E   F   H   I   L   M   N   O   P   S   T   U   V   W  
    Index Entry Section

    C
    css-include=file4.7 Customizing the HTML and text style
    css-ref=URL4.7 Customizing the HTML and text style

    D
    def-table4.7 Customizing the HTML and text style
    doctype=DTD4.7 Customizing the HTML and text style
    document-language4.9 Use initialization files for fine tuning
    document-language7.8 Customizing strings written by texi2html
    Dvar4.5 Command line options related to Texinfo language features

    E
    enable-translations3.4 Advanced build features
    error-limit=num4.1 General options

    F
    footnote-style4.6 Page layout related command line options
    frames4.6 Page layout related command line options
    frameset-doctype4.7 Customizing the HTML and text style
    frameset-doctype=DTD4.7 Customizing the HTML and text style

    H
    help4.1 General options
    html-xref-prefix=path4.7 Customizing the HTML and text style

    I
    Idir4.5 Command line options related to Texinfo language features
    if<region>4.4 Specifying which regions get expanded
    include-css6.7 Customizing the texi2html css lines
    init-file4.9 Use initialization files for fine tuning
    init-file4.9 Use initialization files for fine tuning
    iso4.7 Customizing the HTML and text style

    L
    l2h4.8 Expanding @tex and @math regions using LaTeX2HTML
    l2h-file4.8 Expanding @tex and @math regions using LaTeX2HTML
    l2h-l2h=program4.8 Expanding @tex and @math regions using LaTeX2HTML
    l2h-tmp4.8 Expanding @tex and @math regions using LaTeX2HTML
    lang=lang4.5 Command line options related to Texinfo language features

    M
    menu4. Invoking texi2html

    N
    no-headers4.6 Page layout related command line options
    no-if<region>4.4 Specifying which regions get expanded
    node-files4.3 Setting output file and directory names
    nomenu4. Invoking texi2html
    nomenu4.4 Specifying which regions get expanded
    number-sections4.7 Customizing the HTML and text style

    O
    output4.3 Setting output file and directory names
    output4.3 Setting output file and directory names

    P
    Pdir4.5 Command line options related to Texinfo language features
    pkgdatadir=dir3.3 Installing
    pkgdatadir=dir4.9 Use initialization files for fine tuning
    prefix4.3 Setting output file and directory names

    S
    short-ext4.3 Setting output file and directory names
    short-ref4.7 Customizing the HTML and text style
    split4.2 Specifying where to split the generated document
    sysconfdir=dir4.9 Use initialization files for fine tuning

    T
    toc-file4.3 Setting output file and directory names
    toc-links4.7 Customizing the HTML and text style
    top-file4.3 Setting output file and directory names
    transliterate-file-names4.3 Setting output file and directory names

    U
    use-nodes4.2 Specifying where to split the generated document
    use-nodes4.2 Specifying where to split the generated document
    use-nodes4.2 Specifying where to split the generated document
    Uvar4.5 Command line options related to Texinfo language features

    V
    verbose4.1 General options
    version4.1 General options

    W
    with-unicode3.4 Advanced build features
    with-unidecode3.4 Advanced build features

    Jump to:   C   D   E   F   H   I   L   M   N   O   P   S   T   U   V   W  

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    E. Variable Index

    Jump to:   $   %   @
    Index Entry Section

    $
    $AFTER_BODY_OPEN6.8 Customizing the page header
    $AFTER_OVERVIEW6.11.1.2 Table of contents and Short table of contents
    $AFTER_TOC_LINES6.11.1.2 Table of contents and Short table of contents
    $anchor7.6 Formatting of special simple commands
    $anchor_label7.6 Formatting of special simple commands
    $AVOID_MENU_REDUNDANCY7.17.4 The formatting of the menu in a table
    $BEFORE_OVERVIEW6.11.1.2 Table of contents and Short table of contents
    $BEFORE_TOC_LINES6.11.1.2 Table of contents and Short table of contents
    $BIG_RULE6.2 Page layout and navigation panel overview
    $BODYTEXT6.5 Preparing the output
    $BODYTEXT6.8 Customizing the page header
    $cell7.13.1 Formatting individual table and list items
    $CLOSE_QUOTE_SYMBOL7.5.1 An interface for commands formatting with a hash reference
    $CLOSE_QUOTE_SYMBOL7.5.2 An interface for commands formatting with a string
    $complex_format_map7.12 Formatting of complex formats (@example, @display…)
    $CSS_LINES6.7 Customizing the texi2html css lines
    $DATE6.10 Customizing the page footer
    $DEFAULT_ENCODING5.1 Setting the encodings
    $DEFAULT_RULE6.2 Page layout and navigation panel overview
    $definition_category7.14.2 Customization of the definition formatting
    $def_always_delimiters7.14.1 Customizing the interpretation of a definition line
    $def_argument_separator_delimiters7.14.1 Customizing the interpretation of a definition line
    $def_in_type_delimiters7.14.1 Customizing the interpretation of a definition line
    $DEF_TABLE4.7 Customizing the HTML and text style
    $DOCTYPE4.7 Customizing the HTML and text style
    $DOCUMENT_DESCRIPTION6.8 Customizing the page header
    $DOCUMENT_ENCODING5.1 Setting the encodings
    $DO_CONTENTS6.11.1.2 Table of contents and Short table of contents
    $DO_SCONTENTS6.11.1.2 Table of contents and Short table of contents
    $ENCODING_NAME5.1 Setting the encodings
    $ENCODING_NAME6.8 Customizing the page header
    $ERROR_LIMIT4.1 General options
    $EXTENSIONFile names
    $EXTERNAL_DIR4.7 Customizing the HTML and text style
    $EXTRA_HEAD6.8 Customizing the page header
    $FRAMES4.6 Page layout related command line options
    $FRAMESET_DOCTYPE4.7 Customizing the HTML and text style
    $ICONS6.3.1 Controlling the navigation panel panel at a high level
    $IDX_SUMMARY6.13 Generation of external files for index entries
    $INDEX_CHAPTERElement labels
    $INLINE_CONTENTS6.11.1.2 Table of contents and Short table of contents
    $IN_ENCODING5.1 Setting the encodings
    $L2H_L2H4.8 Expanding @tex and @math regions using LaTeX2HTML
    $L2H_TMP4.8 Expanding @tex and @math regions using LaTeX2HTML
    $LANG4.5 Command line options related to Texinfo language features
    $LANG4.9 Use initialization files for fine tuning
    $LANG7.8 Customizing strings written by texi2html
    $LANGUAGES7.8 Customizing strings written by texi2html
    $LANGUAGESA.1 Translating strings
    $MENU_PRE_COMPLEX_FORMAT7.17.4 The formatting of the menu in a table
    $MENU_PRE_STYLE7.17.4 The formatting of the menu in a table
    $MENU_SYMBOL7.17.4 The formatting of the menu in a table
    $MIDDLE_RULE6.2 Page layout and navigation panel overview
    $misc_element_label6.11.1 Customizing the content of the special pages
    $NODE_FILES4.3 Setting output file and directory names
    $NODE_FILESFile names
    $NODE_NAME_IN_MENU7.17.4 The formatting of the menu in a table
    $NO_BULLET_LIST_ATTRIBUTE6.11.1.2 Table of contents and Short table of contents
    $NO_BULLET_LIST_STYLE6.11.1.2 Table of contents and Short table of contents
    $NUMBER_SECTIONS4.7 Customizing the HTML and text style
    $OPEN_QUOTE_SYMBOL7.5.1 An interface for commands formatting with a hash reference
    $OPEN_QUOTE_SYMBOL7.5.2 An interface for commands formatting with a string
    $OUT4.3 Setting output file and directory names
    $OUT_ENCODING5.1 Setting the encodings
    $OUT_ENCODING6.8 Customizing the page header
    $PREFIX4.3 Setting output file and directory names
    $PRE_BODY_CLOSE6.10 Customizing the page footer
    $print_chapter_footer6.10 Customizing the page footer
    $print_chapter_header6.8 Customizing the page header
    $print_foot_navigation6.10 Customizing the page footer
    $print_head_navigation6.8 Customizing the page header
    $print_misc6.11.2 Customizing the layout of the special pages
    $print_misc_footer6.11.2 Customizing the layout of the special pages
    $print_misc_header6.11.2 Customizing the layout of the special pages
    $print_page_foot6.10 Customizing the page footer
    $print_page_head6.8 Customizing the page header
    $print_section_footer6.10 Customizing the page footer
    $print_section_header6.8 Customizing the page header
    $print_Top6.11.2 Customizing the layout of the special pages
    $print_Top_footer6.11.2 Customizing the layout of the special pages
    $print_Top_header6.11.2 Customizing the layout of the special pages
    $SECTION_NAVIGATION4.6 Page layout related command line options
    $SECTION_NAVIGATION6.3.1 Controlling the navigation panel panel at a high level
    $SEPARATED_FOOTNOTES4.6 Page layout related command line options
    $SEPARATE_DESCRIPTION7.17.2 The formatting of the different menu components
    $SHORTEXTN4.3 Setting output file and directory names
    $SHORT_REF4.7 Customizing the HTML and text style
    $SHOW_MENU4.4 Specifying which regions get expanded
    $SIMPLE_MENU7.17 Menu formatting
    $SMALL_RULE6.2 Page layout and navigation panel overview
    $SPLIT4.2 Specifying where to split the generated document
    $SPLIT_INDEX7.18.2 Customizing the formatting of index lists
    $T2H_OBSOLETE_STRINGSA.1 Translating strings
    $Texi2HTML::NODE{Next}6.3.2 Specifying the buttons formatting
    $Texi2HTML::OVERVIEWSection lines
    $Texi2HTML::OVERVIEW6.11.1.2 Table of contents and Short table of contents
    $Texi2HTML::THISDOC{'BODYTEXT'}6.8 Customizing the page header
    $Texi2html::THISDOC{'CSS_LINES'}6.7 Customizing the texi2html css lines
    $Texi2HTML::THISDOC{'documentencoding'}5.1 Setting the encodings
    $Texi2HTML::THISDOC{'DOCUMENT_DESCRIPTION'}6.8 Customizing the page header
    $Texi2HTML::THISDOC{'DOCUMENT_ENCODING'}5.1 Setting the encodings
    $Texi2HTML::THISDOC{'DOCUMENT_ENCODING'}5.1 Setting the encodings
    $Texi2HTML::THISDOC{'ENCODING_NAME'}5.1 Setting the encodings
    $Texi2HTML::THISDOC{'IN_ENCODING'}5.1 Setting the encodings
    $Texi2HTML::THISDOC{'OUT_ENCODING'}5.1 Setting the encodings
    $Texi2HTML::THIS_SECTIONSection lines
    $Texi2HTML::THIS_SECTION6.4.3 Function usefull in page formatting
    $Texi2HTML::TITLEPAGESection lines
    $Texi2HTML::TITLEPAGE6.11.1.5 Formatting of title page
    $Texi2HTML::TOC_LINESSection lines
    $Texi2HTML::TOC_LINES6.11.1.2 Table of contents and Short table of contents
    $TOC_FILE4.3 Setting output file and directory names
    $TOC_LINKS4.7 Customizing the HTML and text style
    $TOP_FILE4.3 Setting output file and directory names
    $TOP_HEADINGElement labels
    $TRANSLITERATE_NODE4.3 Setting output file and directory names
    $UNNUMBERED_SYMBOL_IN_MENU7.17.4 The formatting of the menu in a table
    $USER6.10 Customizing the page footer
    $USE_ACCESSKEY6.3.2 Specifying the buttons formatting
    $USE_ACCESSKEY7.17 Menu formatting
    $USE_ISO4.7 Customizing the HTML and text style
    $USE_LINKS6.8 Customizing the page header
    $USE_NODES4.2 Specifying where to split the generated document
    $USE_NODE_TARGET6.4.1 Accessing elements informations
    $USE_REL_REV6.3.2 Specifying the buttons formatting
    $USE_SETFILENAME
    $VERTICAL_HEAD_NAVIGATION6.3.1 Controlling the navigation panel panel at a high level
    $WORDS_IN_PAGE6.3.2 Specifying the buttons formatting
    $WORDS_IN_PAGE6.3.2 Specifying the buttons formatting
    $WORDS_IN_PAGE6.4.3 Function usefull in page formatting

    %
    %accent_map7.5 Customizing accent, style and other simple commands
    %ACTIVE_ICONS6.3.2 Specifying the buttons formatting
    %BUTTONS_ACCESSKEY6.3.2 Specifying the buttons formatting
    %BUTTONS_ACCESSKEY7.17 Menu formatting
    %BUTTONS_GOTO6.5 Preparing the output
    %BUTTONS_NAME6.3.2 Specifying the buttons formatting
    %BUTTONS_NAME6.5 Preparing the output
    %BUTTONS_REL6.3.2 Specifying the buttons formatting
    %BUTTONS_REL6.8 Customizing the page header
    %colon_command_punctuation_characters7.4 Punctuation commands
    %command_handler7.22 Bypassing normal formatting
    %css_map6.7 Customizing the texi2html css lines
    %def_map7.14.1 Customizing the interpretation of a definition line
    %format_in_paragraph7.11.2 Avoiding paragraphs in formats
    %format_map7.13.2 Formatting of a whole table or list
    %format_map7.13.2 Formatting of a whole table or list
    %main::valueFlags
    %main::valueFlags
    %misc_command7.24 Customizing other commands, and unknown commands
    %misc_pages_targetstarget names
    %NAVIGATION_TEXT6.3.2 Specifying the buttons formatting
    %NAVIGATION_TEXT6.5 Preparing the output
    %no_paragraph_commands7.11.2 Avoiding paragraphs in formats
    %paragraph_style7.10 Commands used for centering and flushing of text
    %PASSIVE_ICONS6.3.2 Specifying the buttons formatting
    %pre_map7.3 Customizing the formatting of commands without argument
    %region_formats_kept7.23 Handling special regions
    %simple_map7.3 Customizing the formatting of commands without argument
    %simple_map7.24 Customizing other commands, and unknown commands
    %simple_map_pre7.3 Customizing the formatting of commands without argument
    %simple_map_pre7.24 Customizing other commands, and unknown commands
    %simple_map_texi7.3 Customizing the formatting of commands without argument
    %simple_map_texi7.24 Customizing other commands, and unknown commands
    %special_list_commands7.13.1 Formatting individual table and list items
    %stop_paragraph_command7.11.2 Avoiding paragraphs in formats
    %style_map7.5 Customizing accent, style and other simple commands
    %style_map7.24 Customizing other commands, and unknown commands
    %style_map_pre7.5 Customizing accent, style and other simple commands
    %style_map_pre7.24 Customizing other commands, and unknown commands
    %style_map_texi7.5 Customizing accent, style and other simple commands
    %style_map_texi7.24 Customizing other commands, and unknown commands
    %Texi2HTML::HREF6.4.1 Accessing elements informations
    %Texi2HTML::NAME6.4.1 Accessing elements informations
    %Texi2HTML::NODE6.4.1 Accessing elements informations
    %Texi2HTML::NO_TEXI6.4.1 Accessing elements informations
    %Texi2HTML::THISDOCGlobal strings
    %texi_map7.3 Customizing the formatting of commands without argument
    %things_map7.3 Customizing the formatting of commands without argument

    @
    @CHAPTER_BUTTONS6.3.2 Specifying the buttons formatting
    @command_handler_finish7.22 Bypassing normal formatting
    @command_handler_init7.22 Bypassing normal formatting
    @command_handler_process7.22 Bypassing normal formatting
    @CSS_FILES4.7 Customizing the HTML and text style
    @CSS_REFS4.7 Customizing the HTML and text style
    @EXPAND4.4 Specifying which regions get expanded
    @IMAGE_EXTENSIONS7.6 Formatting of special simple commands
    @INCLUDE_DIRS4.5 Command line options related to Texinfo language features
    @LINKS_BUTTONS6.3.2 Specifying the buttons formatting
    @LINKS_BUTTONS6.8 Customizing the page header
    @MISC_BUTTONS6.3.2 Specifying the buttons formatting
    @NODE_FOOTER_BUTTONS6.3.2 Specifying the buttons formatting
    @PREPEND_DIRS4.5 Command line options related to Texinfo language features
    @SECTION_BUTTONS6.3.2 Specifying the buttons formatting
    @SECTION_FOOTER_BUTTONS6.3.2 Specifying the buttons formatting

    Jump to:   $   %   @

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    F. Concept Index

    Jump to:   A   B   C   D   E   F   I   M   P   R   S   T   U  
    Index Entry Section

    A
    Avoid paragraph opening7.11.2 Avoiding paragraphs in formats

    B
    bug reportTexi2HTML

    C
    centering7.10 Commands used for centering and flushing of text
    complex format7.12 Formatting of complex formats (@example, @display…)
    Config4.9 Use initialization files for fine tuning
    configure3. Installation of texi2html
    CSS4.7 Customizing the HTML and text style
    CSS6.7 Customizing the texi2html css lines

    D
    downloading texi2html source2. Obtaining texi2html

    E
    examples of manuals1. Overview
    external manual7.9.1 Reference to external manual

    F
    flushing text7.10 Commands used for centering and flushing of text

    I
    i18n7.8 Customizing strings written by texi2html
    i18nA.1 Translating strings
    Installation3. Installation of texi2html
    internationalization4.9 Use initialization files for fine tuning
    internationalized stringsA.2 Adding new strings written to document

    M
    makeinfo1.1 Why texi2html and not makeinfo?
    manage_i18n.plA.2 Adding new strings written to document

    P
    paragraph7.11.1 Paragraph and preformatted region formatting
    preformatted region7.11.1 Paragraph and preformatted region formatting

    R
    reference7.9 References

    S
    skipped command7.24 Customizing other commands, and unknown commands
    source code for texi2html, downloading2. Obtaining texi2html

    T
    texi2html source, downloading2. Obtaining texi2html
    Texinfo1. Overview
    text alignement7.10 Commands used for centering and flushing of text
    TranslationA.1 Translating strings

    U
    unknown command7.24 Customizing other commands, and unknown commands

    Jump to:   A   B   C   D   E   F   I   M   P   R   S   T   U  

    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)

    This behaviour is triggered only by a variable set in an init file, $USE_SETFILENAME (see section Use initialization files for fine tuning).


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    Short Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by Derek Price on January 5, 2009 using texi2html @PACKAGE_VERSION@.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by Derek Price on January 5, 2009 using texi2html @PACKAGE_VERSION@.

    texi2html-1.82/doc/texinfo.tex0000644000175000017500000072311511264347115020210 0ustar flichtenheldflichtenheld% texinfo.tex -- TeX macros to handle Texinfo files. % % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % \def\texinfoversion{2006-10-04.17} % % Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free % Software Foundation, Inc. % % This texinfo.tex file is free software; you can redistribute it and/or % modify it under the terms of the GNU General Public License as % published by the Free Software Foundation; either version 2, or (at % your option) any later version. % % This texinfo.tex file is distributed in the hope that it will be % useful, but WITHOUT ANY WARRANTY; without even the implied warranty % of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this texinfo.tex file; see the file COPYING. If not, write % to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, % Boston, MA 02110-1301, USA. % % As a special exception, when this file is read by TeX when processing % a Texinfo source document, you may use the result without % restriction. (This has been our intent since Texinfo was invented.) % % Please try the latest version of texinfo.tex before submitting bug % reports; you can get the latest version from: % http://www.gnu.org/software/texinfo/ (the Texinfo home page), or % ftp://tug.org/tex/texinfo.tex % (and all CTAN mirrors, see http://www.ctan.org). % The texinfo.tex in any given distribution could well be out % of date, so if that's what you're using, please check. % % Send bug reports to bug-texinfo@gnu.org. Please include including a % complete document in each bug report with which we can reproduce the % problem. Patches are, of course, greatly appreciated. % % To process a Texinfo manual with TeX, it's most reliable to use the % texi2dvi shell script that comes with the distribution. For a simple % manual foo.texi, however, you can get away with this: % tex foo.texi % texindex foo.?? % tex foo.texi % tex foo.texi % dvips foo.dvi -o # or whatever; this makes foo.ps. % The extra TeX runs get the cross-reference information correct. % Sometimes one run after texindex suffices, and sometimes you need more % than two; texi2dvi does it as many times as necessary. % % It is possible to adapt texinfo.tex for other languages, to some % extent. You can get the existing language-specific files from the % full Texinfo distribution. % % The GNU Texinfo home page is http://www.gnu.org/software/texinfo. \message{Loading texinfo [version \texinfoversion]:} % If in a .fmt file, print the version number % and turn on active characters that we couldn't do earlier because % they might have appeared in the input file name. \everyjob{\message{[Texinfo version \texinfoversion]}% \catcode`+=\active \catcode`\_=\active} \message{Basics,} \chardef\other=12 % We never want plain's \outer definition of \+ in Texinfo. % For @tex, we can use \tabalign. \let\+ = \relax % Save some plain tex macros whose names we will redefine. \let\ptexb=\b \let\ptexbullet=\bullet \let\ptexc=\c \let\ptexcomma=\, \let\ptexdot=\. \let\ptexdots=\dots \let\ptexend=\end \let\ptexequiv=\equiv \let\ptexexclam=\! \let\ptexfootnote=\footnote \let\ptexgtr=> \let\ptexhat=^ \let\ptexi=\i \let\ptexindent=\indent \let\ptexinsert=\insert \let\ptexlbrace=\{ \let\ptexless=< \let\ptexnewwrite\newwrite \let\ptexnoindent=\noindent \let\ptexplus=+ \let\ptexrbrace=\} \let\ptexslash=\/ \let\ptexstar=\* \let\ptext=\t % If this character appears in an error message or help string, it % starts a new line in the output. \newlinechar = `^^J % Use TeX 3.0's \inputlineno to get the line number, for better error % messages, but if we're using an old version of TeX, don't do anything. % \ifx\inputlineno\thisisundefined \let\linenumber = \empty % Pre-3.0. \else \def\linenumber{l.\the\inputlineno:\space} \fi % Set up fixed words for English if not already set. \ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi \ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi \ifx\putwordfile\undefined \gdef\putwordfile{file}\fi \ifx\putwordin\undefined \gdef\putwordin{in}\fi \ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi \ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi \ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi \ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi \ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi \ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi \ifx\putwordof\undefined \gdef\putwordof{of}\fi \ifx\putwordon\undefined \gdef\putwordon{on}\fi \ifx\putwordpage\undefined \gdef\putwordpage{page}\fi \ifx\putwordsection\undefined \gdef\putwordsection{section}\fi \ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi \ifx\putwordsee\undefined \gdef\putwordsee{see}\fi \ifx\putwordSee\undefined \gdef\putwordSee{See}\fi \ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi \ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi % \ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi \ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi \ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi \ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi \ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi \ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi \ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi \ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi \ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi \ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi \ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi \ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi % \ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi \ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi \ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi \ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi \ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi % Since the category of space is not known, we have to be careful. \chardef\spacecat = 10 \def\spaceisspace{\catcode`\ =\spacecat} % sometimes characters are active, so we need control sequences. \chardef\colonChar = `\: \chardef\commaChar = `\, \chardef\dashChar = `\- \chardef\dotChar = `\. \chardef\exclamChar= `\! \chardef\lquoteChar= `\` \chardef\questChar = `\? \chardef\rquoteChar= `\' \chardef\semiChar = `\; \chardef\underChar = `\_ % Ignore a token. % \def\gobble#1{} % The following is used inside several \edef's. \def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} % Hyphenation fixes. \hyphenation{ Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script ap-pen-dix bit-map bit-maps data-base data-bases eshell fall-ing half-way long-est man-u-script man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces spell-ing spell-ings stand-alone strong-est time-stamp time-stamps which-ever white-space wide-spread wrap-around } % Margin to add to right of even pages, to left of odd pages. \newdimen\bindingoffset \newdimen\normaloffset \newdimen\pagewidth \newdimen\pageheight % For a final copy, take out the rectangles % that mark overfull boxes (in case you have decided % that the text looks ok even though it passes the margin). % \def\finalout{\overfullrule=0pt} % @| inserts a changebar to the left of the current line. It should % surround any changed text. This approach does *not* work if the % change spans more than two lines of output. To handle that, we would % have adopt a much more difficult approach (putting marks into the main % vertical list for the beginning and end of each change). % \def\|{% % \vadjust can only be used in horizontal mode. \leavevmode % % Append this vertical mode material after the current line in the output. \vadjust{% % We want to insert a rule with the height and depth of the current % leading; that is exactly what \strutbox is supposed to record. \vskip-\baselineskip % % \vadjust-items are inserted at the left edge of the type. So % the \llap here moves out into the left-hand margin. \llap{% % % For a thicker or thinner bar, change the `1pt'. \vrule height\baselineskip width1pt % % This is the space between the bar and the text. \hskip 12pt }% }% } % Sometimes it is convenient to have everything in the transcript file % and nothing on the terminal. We don't just call \tracingall here, % since that produces some useless output on the terminal. We also make % some effort to order the tracing commands to reduce output in the log % file; cf. trace.sty in LaTeX. % \def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% \def\loggingall{% \tracingstats2 \tracingpages1 \tracinglostchars2 % 2 gives us more in etex \tracingparagraphs1 \tracingoutput1 \tracingmacros2 \tracingrestores1 \showboxbreadth\maxdimen \showboxdepth\maxdimen \ifx\eTeXversion\undefined\else % etex gives us more logging \tracingscantokens1 \tracingifs1 \tracinggroups1 \tracingnesting2 \tracingassigns1 \fi \tracingcommands3 % 3 gives us more in etex \errorcontextlines16 }% % add check for \lastpenalty to plain's definitions. If the last thing % we did was a \nobreak, we don't want to insert more space. % \def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount \removelastskip\penalty-50\smallskip\fi\fi} \def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount \removelastskip\penalty-100\medskip\fi\fi} \def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount \removelastskip\penalty-200\bigskip\fi\fi} % For @cropmarks command. % Do @cropmarks to get crop marks. % \newif\ifcropmarks \let\cropmarks = \cropmarkstrue % % Dimensions to add cropmarks at corners. % Added by P. A. MacKay, 12 Nov. 1986 % \newdimen\outerhsize \newdimen\outervsize % set by the paper size routines \newdimen\cornerlong \cornerlong=1pc \newdimen\cornerthick \cornerthick=.3pt \newdimen\topandbottommargin \topandbottommargin=.75in % Main output routine. \chardef\PAGE = 255 \output = {\onepageout{\pagecontents\PAGE}} \newbox\headlinebox \newbox\footlinebox % \onepageout takes a vbox as an argument. Note that \pagecontents % does insertions, but you have to call it yourself. \def\onepageout#1{% \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi % \ifodd\pageno \advance\hoffset by \bindingoffset \else \advance\hoffset by -\bindingoffset\fi % % Do this outside of the \shipout so @code etc. will be expanded in % the headline as they should be, not taken literally (outputting ''code). \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% % {% % Have to do this stuff outside the \shipout because we want it to % take effect in \write's, yet the group defined by the \vbox ends % before the \shipout runs. % \indexdummies % don't expand commands in the output. \normalturnoffactive % \ in index entries must not stay \, e.g., if % the page break happens to be in the middle of an example. % We don't want .vr (or whatever) entries like this: % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}} % "\acronym" won't work when it's read back in; % it needs to be % {\code {{\tt \backslashcurfont }acronym} \shipout\vbox{% % Do this early so pdf references go to the beginning of the page. \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi % \ifcropmarks \vbox to \outervsize\bgroup \hsize = \outerhsize \vskip-\topandbottommargin \vtop to0pt{% \line{\ewtop\hfil\ewtop}% \nointerlineskip \line{% \vbox{\moveleft\cornerthick\nstop}% \hfill \vbox{\moveright\cornerthick\nstop}% }% \vss}% \vskip\topandbottommargin \line\bgroup \hfil % center the page within the outer (page) hsize. \ifodd\pageno\hskip\bindingoffset\fi \vbox\bgroup \fi % \unvbox\headlinebox \pagebody{#1}% \ifdim\ht\footlinebox > 0pt % Only leave this space if the footline is nonempty. % (We lessened \vsize for it in \oddfootingyyy.) % The \baselineskip=24pt in plain's \makefootline has no effect. \vskip 24pt \unvbox\footlinebox \fi % \ifcropmarks \egroup % end of \vbox\bgroup \hfil\egroup % end of (centering) \line\bgroup \vskip\topandbottommargin plus1fill minus1fill \boxmaxdepth = \cornerthick \vbox to0pt{\vss \line{% \vbox{\moveleft\cornerthick\nsbot}% \hfill \vbox{\moveright\cornerthick\nsbot}% }% \nointerlineskip \line{\ewbot\hfil\ewbot}% }% \egroup % \vbox from first cropmarks clause \fi }% end of \shipout\vbox }% end of group with \indexdummies \advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi } \newinsert\margin \dimen\margin=\maxdimen \def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} {\catcode`\@ =11 \gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi % marginal hacks, juha@viisa.uucp (Juha Takala) \ifvoid\margin\else % marginal info is present \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi \dimen@=\dp#1 \unvbox#1 \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi \ifr@ggedbottom \kern-\dimen@ \vfil \fi} } % Here are the rules for the cropmarks. Note that they are % offset so that the space between them is truly \outerhsize or \outervsize % (P. A. MacKay, 12 November, 1986) % \def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} \def\nstop{\vbox {\hrule height\cornerthick depth\cornerlong width\cornerthick}} \def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} \def\nsbot{\vbox {\hrule height\cornerlong depth\cornerthick width\cornerthick}} % Parse an argument, then pass it to #1. The argument is the rest of % the input line (except we remove a trailing comment). #1 should be a % macro which expects an ordinary undelimited TeX argument. % \def\parsearg{\parseargusing{}} \def\parseargusing#1#2{% \def\argtorun{#2}% \begingroup \obeylines \spaceisspace #1% \parseargline\empty% Insert the \empty token, see \finishparsearg below. } {\obeylines % \gdef\parseargline#1^^M{% \endgroup % End of the group started in \parsearg. \argremovecomment #1\comment\ArgTerm% }% } % First remove any @comment, then any @c comment. \def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} \def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} % Each occurence of `\^^M' or `\^^M' is replaced by a single space. % % \argremovec might leave us with trailing space, e.g., % @end itemize @c foo % This space token undergoes the same procedure and is eventually removed % by \finishparsearg. % \def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} \def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} \def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% \def\temp{#3}% \ifx\temp\empty % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp: \let\temp\finishparsearg \else \let\temp\argcheckspaces \fi % Put the space token in: \temp#1 #3\ArgTerm } % If a _delimited_ argument is enclosed in braces, they get stripped; so % to get _exactly_ the rest of the line, we had to prevent such situation. % We prepended an \empty token at the very beginning and we expand it now, % just before passing the control to \argtorun. % (Similarily, we have to think about #3 of \argcheckspacesY above: it is % either the null string, or it ends with \^^M---thus there is no danger % that a pair of braces would be stripped. % % But first, we have to remove the trailing space token. % \def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}} % \parseargdef\foo{...} % is roughly equivalent to % \def\foo{\parsearg\Xfoo} % \def\Xfoo#1{...} % % Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my % favourite TeX trick. --kasal, 16nov03 \def\parseargdef#1{% \expandafter \doparseargdef \csname\string#1\endcsname #1% } \def\doparseargdef#1#2{% \def#2{\parsearg#1}% \def#1##1% } % Several utility definitions with active space: { \obeyspaces \gdef\obeyedspace{ } % Make each space character in the input produce a normal interword % space in the output. Don't allow a line break at this space, as this % is used only in environments like @example, where each line of input % should produce a line of output anyway. % \gdef\sepspaces{\obeyspaces\let =\tie} % If an index command is used in an @example environment, any spaces % therein should become regular spaces in the raw index file, not the % expansion of \tie (\leavevmode \penalty \@M \ ). \gdef\unsepspaces{\let =\space} } \def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} % Define the framework for environments in texinfo.tex. It's used like this: % % \envdef\foo{...} % \def\Efoo{...} % % It's the responsibility of \envdef to insert \begingroup before the % actual body; @end closes the group after calling \Efoo. \envdef also % defines \thisenv, so the current environment is known; @end checks % whether the environment name matches. The \checkenv macro can also be % used to check whether the current environment is the one expected. % % Non-false conditionals (@iftex, @ifset) don't fit into this, so they % are not treated as enviroments; they don't open a group. (The % implementation of @end takes care not to call \endgroup in this % special case.) % At runtime, environments start with this: \def\startenvironment#1{\begingroup\def\thisenv{#1}} % initialize \let\thisenv\empty % ... but they get defined via ``\envdef\foo{...}'': \long\def\envdef#1#2{\def#1{\startenvironment#1#2}} \def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} % Check whether we're in the right environment: \def\checkenv#1{% \def\temp{#1}% \ifx\thisenv\temp \else \badenverr \fi } % Evironment mismatch, #1 expected: \def\badenverr{% \errhelp = \EMsimple \errmessage{This command can appear only \inenvironment\temp, not \inenvironment\thisenv}% } \def\inenvironment#1{% \ifx#1\empty out of any environment% \else in environment \expandafter\string#1% \fi } % @end foo executes the definition of \Efoo. % But first, it executes a specialized version of \checkenv % \parseargdef\end{% \if 1\csname iscond.#1\endcsname \else % The general wording of \badenverr may not be ideal, but... --kasal, 06nov03 \expandafter\checkenv\csname#1\endcsname \csname E#1\endcsname \endgroup \fi } \newhelp\EMsimple{Press RETURN to continue.} %% Simple single-character @ commands % @@ prints an @ % Kludge this until the fonts are right (grr). \def\@{{\tt\char64}} % This is turned off because it was never documented % and you can use @w{...} around a quote to suppress ligatures. %% Define @` and @' to be the same as ` and ' %% but suppressing ligatures. %\def\`{{`}} %\def\'{{'}} % Used to generate quoted braces. \def\mylbrace {{\tt\char123}} \def\myrbrace {{\tt\char125}} \let\{=\mylbrace \let\}=\myrbrace \begingroup % Definitions to produce \{ and \} commands for indices, % and @{ and @} for the aux/toc files. \catcode`\{ = \other \catcode`\} = \other \catcode`\[ = 1 \catcode`\] = 2 \catcode`\! = 0 \catcode`\\ = \other !gdef!lbracecmd[\{]% !gdef!rbracecmd[\}]% !gdef!lbraceatcmd[@{]% !gdef!rbraceatcmd[@}]% !endgroup % @comma{} to avoid , parsing problems. \let\comma = , % Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent % Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. \let\, = \c \let\dotaccent = \. \def\ringaccent#1{{\accent23 #1}} \let\tieaccent = \t \let\ubaraccent = \b \let\udotaccent = \d % Other special characters: @questiondown @exclamdown @ordf @ordm % Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. \def\questiondown{?`} \def\exclamdown{!`} \def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}} \def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}} % Dotless i and dotless j, used for accents. \def\imacro{i} \def\jmacro{j} \def\dotless#1{% \def\temp{#1}% \ifx\temp\imacro \ptexi \else\ifx\temp\jmacro \j \else \errmessage{@dotless can be used only with i or j}% \fi\fi } % The \TeX{} logo, as in plain, but resetting the spacing so that a % period following counts as ending a sentence. (Idea found in latex.) % \edef\TeX{\TeX \spacefactor=1000 } % @LaTeX{} logo. Not quite the same results as the definition in % latex.ltx, since we use a different font for the raised A; it's most % convenient for us to use an explicitly smaller font, rather than using % the \scriptstyle font (since we don't reset \scriptstyle and % \scriptscriptstyle). % \def\LaTeX{% L\kern-.36em {\setbox0=\hbox{T}% \vbox to \ht0{\hbox{\selectfonts\lllsize A}\vss}}% \kern-.15em \TeX } % Be sure we're in horizontal mode when doing a tie, since we make space % equivalent to this in @example-like environments. Otherwise, a space % at the beginning of a line will start with \penalty -- and % since \penalty is valid in vertical mode, we'd end up putting the % penalty on the vertical list instead of in the new paragraph. {\catcode`@ = 11 % Avoid using \@M directly, because that causes trouble % if the definition is written into an index file. \global\let\tiepenalty = \@M \gdef\tie{\leavevmode\penalty\tiepenalty\ } } % @: forces normal size whitespace following. \def\:{\spacefactor=1000 } % @* forces a line break. \def\*{\hfil\break\hbox{}\ignorespaces} % @/ allows a line break. \let\/=\allowbreak % @. is an end-of-sentence period. \def\.{.\spacefactor=\endofsentencespacefactor\space} % @! is an end-of-sentence bang. \def\!{!\spacefactor=\endofsentencespacefactor\space} % @? is an end-of-sentence query. \def\?{?\spacefactor=\endofsentencespacefactor\space} % @frenchspacing on|off says whether to put extra space after punctuation. % \def\onword{on} \def\offword{off} % \parseargdef\frenchspacing{% \def\temp{#1}% \ifx\temp\onword \plainfrenchspacing \else\ifx\temp\offword \plainnonfrenchspacing \else \errhelp = \EMsimple \errmessage{Unknown @frenchspacing option `\temp', must be on/off}% \fi\fi } % @w prevents a word break. Without the \leavevmode, @w at the % beginning of a paragraph, when TeX is still in vertical mode, would % produce a whole line of output instead of starting the paragraph. \def\w#1{\leavevmode\hbox{#1}} % @group ... @end group forces ... to be all on one page, by enclosing % it in a TeX vbox. We use \vtop instead of \vbox to construct the box % to keep its height that of a normal line. According to the rules for % \topskip (p.114 of the TeXbook), the glue inserted is % max (\topskip - \ht (first item), 0). If that height is large, % therefore, no glue is inserted, and the space between the headline and % the text is small, which looks bad. % % Another complication is that the group might be very large. This can % cause the glue on the previous page to be unduly stretched, because it % does not have much material. In this case, it's better to add an % explicit \vfill so that the extra space is at the bottom. The % threshold for doing this is if the group is more than \vfilllimit % percent of a page (\vfilllimit can be changed inside of @tex). % \newbox\groupbox \def\vfilllimit{0.7} % \envdef\group{% \ifnum\catcode`\^^M=\active \else \errhelp = \groupinvalidhelp \errmessage{@group invalid in context where filling is enabled}% \fi \startsavinginserts % \setbox\groupbox = \vtop\bgroup % Do @comment since we are called inside an environment such as % @example, where each end-of-line in the input causes an % end-of-line in the output. We don't want the end-of-line after % the `@group' to put extra space in the output. Since @group % should appear on a line by itself (according to the Texinfo % manual), we don't worry about eating any user text. \comment } % % The \vtop produces a box with normal height and large depth; thus, TeX puts % \baselineskip glue before it, and (when the next line of text is done) % \lineskip glue after it. Thus, space below is not quite equal to space % above. But it's pretty close. \def\Egroup{% % To get correct interline space between the last line of the group % and the first line afterwards, we have to propagate \prevdepth. \endgraf % Not \par, as it may have been set to \lisppar. \global\dimen1 = \prevdepth \egroup % End the \vtop. % \dimen0 is the vertical size of the group's box. \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox % \dimen2 is how much space is left on the page (more or less). \dimen2 = \pageheight \advance\dimen2 by -\pagetotal % if the group doesn't fit on the current page, and it's a big big % group, force a page break. \ifdim \dimen0 > \dimen2 \ifdim \pagetotal < \vfilllimit\pageheight \page \fi \fi \box\groupbox \prevdepth = \dimen1 \checkinserts } % % TeX puts in an \escapechar (i.e., `@') at the beginning of the help % message, so this ends up printing `@group can only ...'. % \newhelp\groupinvalidhelp{% group can only be used in environments such as @example,^^J% where each line of input produces a line of output.} % @need space-in-mils % forces a page break if there is not space-in-mils remaining. \newdimen\mil \mil=0.001in % Old definition--didn't work. %\parseargdef\need{\par % %% This method tries to make TeX break the page naturally %% if the depth of the box does not fit. %{\baselineskip=0pt% %\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak %\prevdepth=-1000pt %}} \parseargdef\need{% % Ensure vertical mode, so we don't make a big box in the middle of a % paragraph. \par % % If the @need value is less than one line space, it's useless. \dimen0 = #1\mil \dimen2 = \ht\strutbox \advance\dimen2 by \dp\strutbox \ifdim\dimen0 > \dimen2 % % Do a \strut just to make the height of this box be normal, so the % normal leading is inserted relative to the preceding line. % And a page break here is fine. \vtop to #1\mil{\strut\vfil}% % % TeX does not even consider page breaks if a penalty added to the % main vertical list is 10000 or more. But in order to see if the % empty box we just added fits on the page, we must make it consider % page breaks. On the other hand, we don't want to actually break the % page after the empty box. So we use a penalty of 9999. % % There is an extremely small chance that TeX will actually break the % page at this \penalty, if there are no other feasible breakpoints in % sight. (If the user is using lots of big @group commands, which % almost-but-not-quite fill up a page, TeX will have a hard time doing % good page breaking, for example.) However, I could not construct an % example where a page broke at this \penalty; if it happens in a real % document, then we can reconsider our strategy. \penalty9999 % % Back up by the size of the box, whether we did a page break or not. \kern -#1\mil % % Do not allow a page break right after this kern. \nobreak \fi } % @br forces paragraph break (and is undocumented). \let\br = \par % @page forces the start of a new page. % \def\page{\par\vfill\supereject} % @exdent text.... % outputs text on separate line in roman font, starting at standard page margin % This records the amount of indent in the innermost environment. % That's how much \exdent should take out. \newskip\exdentamount % This defn is used inside fill environments such as @defun. \parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} % This defn is used inside nofill environments such as @example. \parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount \leftline{\hskip\leftskip{\rm#1}}}} % @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current % paragraph. For more general purposes, use the \margin insertion % class. WHICH is `l' or `r'. % \newskip\inmarginspacing \inmarginspacing=1cm \def\strutdepth{\dp\strutbox} % \def\doinmargin#1#2{\strut\vadjust{% \nobreak \kern-\strutdepth \vtop to \strutdepth{% \baselineskip=\strutdepth \vss % if you have multiple lines of stuff to put here, you'll need to % make the vbox yourself of the appropriate size. \ifx#1l% \llap{\ignorespaces #2\hskip\inmarginspacing}% \else \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% \fi \null }% }} \def\inleftmargin{\doinmargin l} \def\inrightmargin{\doinmargin r} % % @inmargin{TEXT [, RIGHT-TEXT]} % (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; % else use TEXT for both). % \def\inmargin#1{\parseinmargin #1,,\finish} \def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \def\lefttext{#1}% have both texts \def\righttext{#2}% \else \def\lefttext{#1}% have only one text \def\righttext{#1}% \fi % \ifodd\pageno \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin \else \def\temp{\inleftmargin\lefttext}% \fi \temp } % @include file insert text of that file as input. % \def\include{\parseargusing\filenamecatcodes\includezzz} \def\includezzz#1{% \pushthisfilestack \def\thisfile{#1}% {% \makevalueexpandable \def\temp{\input #1 }% \expandafter }\temp \popthisfilestack } \def\filenamecatcodes{% \catcode`\\=\other \catcode`~=\other \catcode`^=\other \catcode`_=\other \catcode`|=\other \catcode`<=\other \catcode`>=\other \catcode`+=\other \catcode`-=\other } \def\pushthisfilestack{% \expandafter\pushthisfilestackX\popthisfilestack\StackTerm } \def\pushthisfilestackX{% \expandafter\pushthisfilestackY\thisfile\StackTerm } \def\pushthisfilestackY #1\StackTerm #2\StackTerm {% \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% } \def\popthisfilestack{\errthisfilestackempty} \def\errthisfilestackempty{\errmessage{Internal error: the stack of filenames is empty.}} \def\thisfile{} % @center line % outputs that line, centered. % \parseargdef\center{% \ifhmode \let\next\centerH \else \let\next\centerV \fi \next{\hfil \ignorespaces#1\unskip \hfil}% } \def\centerH#1{% {% \hfil\break \advance\hsize by -\leftskip \advance\hsize by -\rightskip \line{#1}% \break }% } \def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}} % @sp n outputs n lines of vertical space \parseargdef\sp{\vskip #1\baselineskip} % @comment ...line which is ignored... % @c is the same as @comment % @ignore ... @end ignore is another way to write a comment \def\comment{\begingroup \catcode`\^^M=\other% \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% \commentxxx} {\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} \let\c=\comment % @paragraphindent NCHARS % We'll use ems for NCHARS, close enough. % NCHARS can also be the word `asis' or `none'. % We cannot feasibly implement @paragraphindent asis, though. % \def\asisword{asis} % no translation, these are keywords \def\noneword{none} % \parseargdef\paragraphindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \defaultparindent = 0pt \else \defaultparindent = #1em \fi \fi \parindent = \defaultparindent } % @exampleindent NCHARS % We'll use ems for NCHARS like @paragraphindent. % It seems @exampleindent asis isn't necessary, but % I preserve it to make it similar to @paragraphindent. \parseargdef\exampleindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \lispnarrowing = 0pt \else \lispnarrowing = #1em \fi \fi } % @firstparagraphindent WORD % If WORD is `none', then suppress indentation of the first paragraph % after a section heading. If WORD is `insert', then do indent at such % paragraphs. % % The paragraph indentation is suppressed or not by calling % \suppressfirstparagraphindent, which the sectioning commands do. % We switch the definition of this back and forth according to WORD. % By default, we suppress indentation. % \def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} \def\insertword{insert} % \parseargdef\firstparagraphindent{% \def\temp{#1}% \ifx\temp\noneword \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent \else\ifx\temp\insertword \let\suppressfirstparagraphindent = \relax \else \errhelp = \EMsimple \errmessage{Unknown @firstparagraphindent option `\temp'}% \fi\fi } % Here is how we actually suppress indentation. Redefine \everypar to % \kern backwards by \parindent, and then reset itself to empty. % % We also make \indent itself not actually do anything until the next % paragraph. % \gdef\dosuppressfirstparagraphindent{% \gdef\indent{% \restorefirstparagraphindent \indent }% \gdef\noindent{% \restorefirstparagraphindent \noindent }% \global\everypar = {% \kern -\parindent \restorefirstparagraphindent }% } \gdef\restorefirstparagraphindent{% \global \let \indent = \ptexindent \global \let \noindent = \ptexnoindent \global \everypar = {}% } % @asis just yields its argument. Used with @table, for example. % \def\asis#1{#1} % @math outputs its argument in math mode. % % One complication: _ usually means subscripts, but it could also mean % an actual _ character, as in @math{@var{some_variable} + 1}. So make % _ active, and distinguish by seeing if the current family is \slfam, % which is what @var uses. { \catcode`\_ = \active \gdef\mathunderscore{% \catcode`\_=\active \def_{\ifnum\fam=\slfam \_\else\sb\fi}% } } % Another complication: we want \\ (and @\) to output a \ character. % FYI, plain.tex uses \\ as a temporary control sequence (why?), but % this is not advertised and we don't care. Texinfo does not % otherwise define @\. % % The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. \def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} % \def\math{% \tex \mathunderscore \let\\ = \mathbackslash \mathactive $\finishmath } \def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. % Some active characters (such as <) are spaced differently in math. % We have to reset their definitions in case the @math was an argument % to a command which sets the catcodes (such as @item or @section). % { \catcode`^ = \active \catcode`< = \active \catcode`> = \active \catcode`+ = \active \gdef\mathactive{% \let^ = \ptexhat \let< = \ptexless \let> = \ptexgtr \let+ = \ptexplus } } % @bullet and @minus need the same treatment as @math, just above. \def\bullet{$\ptexbullet$} \def\minus{$-$} % @dots{} outputs an ellipsis using the current font. % We do .5em per period so that it has the same spacing in the cm % typewriter fonts as three actual period characters; on the other hand, % in other typewriter fonts three periods are wider than 1.5em. So do % whichever is larger. % \def\dots{% \leavevmode \setbox0=\hbox{...}% get width of three periods \ifdim\wd0 > 1.5em \dimen0 = \wd0 \else \dimen0 = 1.5em \fi \hbox to \dimen0{% \hskip 0pt plus.25fil .\hskip 0pt plus1fil .\hskip 0pt plus1fil .\hskip 0pt plus.5fil }% } % @enddots{} is an end-of-sentence ellipsis. % \def\enddots{% \dots \spacefactor=\endofsentencespacefactor } % @comma{} is so commas can be inserted into text without messing up % Texinfo's parsing. % \let\comma = , % @refill is a no-op. \let\refill=\relax % If working on a large document in chapters, it is convenient to % be able to disable indexing, cross-referencing, and contents, for test runs. % This is done with @novalidate (before @setfilename). % \newif\iflinks \linkstrue % by default we want the aux files. \let\novalidate = \linksfalse % @setfilename is done at the beginning of every texinfo file. % So open here the files we need to have open while reading the input. % This makes it possible to make a .fmt file for texinfo. \def\setfilename{% \fixbackslash % Turn off hack to swallow `\input texinfo'. \iflinks \tryauxfile % Open the new aux file. TeX will close it automatically at exit. \immediate\openout\auxfile=\jobname.aux \fi % \openindices needs to do some work in any case. \openindices \let\setfilename=\comment % Ignore extra @setfilename cmds. % % If texinfo.cnf is present on the system, read it. % Useful for site-wide @afourpaper, etc. \openin 1 texinfo.cnf \ifeof 1 \else \input texinfo.cnf \fi \closein 1 % \comment % Ignore the actual filename. } % Called from \setfilename. % \def\openindices{% \newindex{cp}% \newcodeindex{fn}% \newcodeindex{vr}% \newcodeindex{tp}% \newcodeindex{ky}% \newcodeindex{pg}% } % @bye. \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} \message{pdf,} % adobe `portable' document format \newcount\tempnum \newcount\lnkcount \newtoks\filename \newcount\filenamelength \newcount\pgn \newtoks\toksA \newtoks\toksB \newtoks\toksC \newtoks\toksD \newbox\boxA \newcount\countA \newif\ifpdf \newif\ifpdfmakepagedest % when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 % can be set). So we test for \relax and 0 as well as \undefined, % borrowed from ifpdf.sty. \ifx\pdfoutput\undefined \else \ifx\pdfoutput\relax \else \ifcase\pdfoutput \else \pdftrue \fi \fi \fi % PDF uses PostScript string constants for the names of xref targets, % for display in the outlines, and in other places. Thus, we have to % double any backslashes. Otherwise, a name like "\node" will be % interpreted as a newline (\n), followed by o, d, e. Not good. % http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html % (and related messages, the final outcome is that it is up to the TeX % user to double the backslashes and otherwise make the string valid, so % that's what we do). % double active backslashes. % {\catcode`\@=0 \catcode`\\=\active @gdef@activebackslashdouble{% @catcode`@\=@active @let\=@doublebackslash} } % To handle parens, we must adopt a different approach, since parens are % not active characters. hyperref.dtx (which has the same problem as % us) handles it with this amazing macro to replace tokens. I've % tinkered with it a little for texinfo, but it's definitely from there. % % #1 is the tokens to replace. % #2 is the replacement. % #3 is the control sequence with the string. % \def\HyPsdSubst#1#2#3{% \def\HyPsdReplace##1#1##2\END{% ##1% \ifx\\##2\\% \else #2% \HyReturnAfterFi{% \HyPsdReplace##2\END }% \fi }% \xdef#3{\expandafter\HyPsdReplace#3#1\END}% } \long\def\HyReturnAfterFi#1\fi{\fi#1} % #1 is a control sequence in which to do the replacements. \def\backslashparens#1{% \xdef#1{#1}% redefine it as its expansion; the definition is simply % \lastnode when called from \setref -> \pdfmkdest. \HyPsdSubst{(}{\realbackslash(}{#1}% \HyPsdSubst{)}{\realbackslash)}{#1}% } \ifpdf \input pdfcolor \pdfcatalog{/PageMode /UseOutlines}% % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). \def\dopdfimage#1#2#3{% \def\imagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% \def\imageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% % without \immediate, pdftex seg faults when the same image is % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) \ifnum\pdftexversion < 14 \immediate\pdfimage \else \immediate\pdfximage \fi \ifdim \wd0 >0pt width \imagewidth \fi \ifdim \wd2 >0pt height \imageheight \fi \ifnum\pdftexversion<13 #1.pdf% \else {#1.pdf}% \fi \ifnum\pdftexversion < 14 \else \pdfrefximage \pdflastximage \fi} \def\pdfmkdest#1{{% % We have to set dummies so commands such as @code, and characters % such as \, aren't expanded when present in a section title. \atdummies \activebackslashdouble \def\pdfdestname{#1}% \backslashparens\pdfdestname \pdfdest name{\pdfdestname} xyz% }}% % % used to mark target names; must be expandable. \def\pdfmkpgn#1{#1}% % \let\linkcolor = \Blue % was Cyan, but that seems light? \def\endlink{\Black\pdfendlink} % Adding outlines to PDF; macros for calculating structure of outlines % come from Petr Olsak \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% \else \csname#1\endcsname \fi} \def\advancenumber#1{\tempnum=\expnumber{#1}\relax \advance\tempnum by 1 \expandafter\xdef\csname#1\endcsname{\the\tempnum}} % % #1 is the section text, which is what will be displayed in the % outline by the pdf viewer. #2 is the pdf expression for the number % of subentries (or empty, for subsubsections). #3 is the node text, % which might be empty if this toc entry had no corresponding node. % #4 is the page number % \def\dopdfoutline#1#2#3#4{% % Generate a link to the node text if that exists; else, use the % page number. We could generate a destination for the section % text in the case where a section has no node, but it doesn't % seem worth the trouble, since most documents are normally structured. \def\pdfoutlinedest{#3}% \ifx\pdfoutlinedest\empty \def\pdfoutlinedest{#4}% \else % Doubled backslashes in the name. {\activebackslashdouble \xdef\pdfoutlinedest{#3}% \backslashparens\pdfoutlinedest}% \fi % % Also double the backslashes in the display string. {\activebackslashdouble \xdef\pdfoutlinetext{#1}% \backslashparens\pdfoutlinetext}% % \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}% } % \def\pdfmakeoutlines{% \begingroup % Thanh's hack / proper braces in bookmarks \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace % % Read toc silently, to get counts of subentries for \pdfoutline. \def\numchapentry##1##2##3##4{% \def\thischapnum{##2}% \def\thissecnum{0}% \def\thissubsecnum{0}% }% \def\numsecentry##1##2##3##4{% \advancenumber{chap\thischapnum}% \def\thissecnum{##2}% \def\thissubsecnum{0}% }% \def\numsubsecentry##1##2##3##4{% \advancenumber{sec\thissecnum}% \def\thissubsecnum{##2}% }% \def\numsubsubsecentry##1##2##3##4{% \advancenumber{subsec\thissubsecnum}% }% \def\thischapnum{0}% \def\thissecnum{0}% \def\thissubsecnum{0}% % % use \def rather than \let here because we redefine \chapentry et % al. a second time, below. \def\appentry{\numchapentry}% \def\appsecentry{\numsecentry}% \def\appsubsecentry{\numsubsecentry}% \def\appsubsubsecentry{\numsubsubsecentry}% \def\unnchapentry{\numchapentry}% \def\unnsecentry{\numsecentry}% \def\unnsubsecentry{\numsubsecentry}% \def\unnsubsubsecentry{\numsubsubsecentry}% \readdatafile{toc}% % % Read toc second time, this time actually producing the outlines. % The `-' means take the \expnumber as the absolute number of % subentries, which we calculated on our first read of the .toc above. % % We use the node names as the destinations. \def\numchapentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% \def\numsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% \def\numsubsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% \def\numsubsubsecentry##1##2##3##4{% count is always zero \dopdfoutline{##1}{}{##3}{##4}}% % % PDF outlines are displayed using system fonts, instead of % document fonts. Therefore we cannot use special characters, % since the encoding is unknown. For example, the eogonek from % Latin 2 (0xea) gets translated to a | character. Info from % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. % % xx to do this right, we have to translate 8-bit characters to % their "best" equivalent, based on the @documentencoding. Right % now, I guess we'll just let the pdf reader have its way. \indexnofonts \setupdatafile \catcode`\\=\active \otherbackslash \input \jobname.toc \endgroup } % \def\skipspaces#1{\def\PP{#1}\def\D{|}% \ifx\PP\D\let\nextsp\relax \else\let\nextsp\skipspaces \ifx\p\space\else\addtokens{\filename}{\PP}% \advance\filenamelength by 1 \fi \fi \nextsp} \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax} \ifnum\pdftexversion < 14 \let \startlink \pdfannotlink \else \let \startlink \pdfstartlink \fi % make a live url in pdf output. \def\pdfurl#1{% \begingroup % it seems we really need yet another set of dummies; have not % tried to figure out what each command should do in the context % of @url. for now, just make @/ a no-op, that's the only one % people have actually reported a problem with. % \normalturnoffactive \def\@{@}% \let\/=\empty \makevalueexpandable \leavevmode\Red \startlink attr{/Border [0 0 0]}% user{/Subtype /Link /A << /S /URI /URI (#1) >>}% \endgroup} \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} \def\maketoks{% \expandafter\poptoks\the\toksA|ENDTOKS|\relax \ifx\first0\adn0 \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 \else \ifnum0=\countA\else\makelink\fi \ifx\first.\let\next=\done\else \let\next=\maketoks \addtokens{\toksB}{\the\toksD} \ifx\first,\addtokens{\toksB}{\space}\fi \fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next} \def\makelink{\addtokens{\toksB}% {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} \def\pdflink#1{% \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} \linkcolor #1\endlink} \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} \else \let\pdfmkdest = \gobble \let\pdfurl = \gobble \let\endlink = \relax \let\linkcolor = \relax \let\pdfmakeoutlines = \relax \fi % \ifx\pdfoutput \message{fonts,} % Change the current font style to #1, remembering it in \curfontstyle. % For now, we do not accumulate font styles: @b{@i{foo}} prints foo in % italics, not bold italics. % \def\setfontstyle#1{% \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. \csname ten#1\endcsname % change the current font } % Select #1 fonts with the current style. % \def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname} \def\rm{\fam=0 \setfontstyle{rm}} \def\it{\fam=\itfam \setfontstyle{it}} \def\sl{\fam=\slfam \setfontstyle{sl}} \def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} \def\tt{\fam=\ttfam \setfontstyle{tt}} % Texinfo sort of supports the sans serif font style, which plain TeX does not. % So we set up a \sf. \newfam\sffam \def\sf{\fam=\sffam \setfontstyle{sf}} \let\li = \sf % Sometimes we call it \li, not \sf. % We don't need math for this font style. \def\ttsl{\setfontstyle{ttsl}} % Default leading. \newdimen\textleading \textleading = 13.2pt % Set the baselineskip to #1, and the lineskip and strut size % correspondingly. There is no deep meaning behind these magic numbers % used as factors; they just match (closely enough) what Knuth defined. % \def\lineskipfactor{.08333} \def\strutheightpercent{.70833} \def\strutdepthpercent {.29167} % \def\setleading#1{% \normalbaselineskip = #1\relax \normallineskip = \lineskipfactor\normalbaselineskip \normalbaselines \setbox\strutbox =\hbox{% \vrule width0pt height\strutheightpercent\baselineskip depth \strutdepthpercent \baselineskip }% } % Set the font macro #1 to the font named #2, adding on the % specified font prefix (normally `cm'). % #3 is the font's design size, #4 is a scale factor \def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4} % Use cm as the default font prefix. % To specify the font prefix, you must define \fontprefix % before you read in texinfo.tex. \ifx\fontprefix\undefined \def\fontprefix{cm} \fi % Support font families that don't use the same naming scheme as CM. \def\rmshape{r} \def\rmbshape{bx} %where the normal face is bold \def\bfshape{b} \def\bxshape{bx} \def\ttshape{tt} \def\ttbshape{tt} \def\ttslshape{sltt} \def\itshape{ti} \def\itbshape{bxti} \def\slshape{sl} \def\slbshape{bxsl} \def\sfshape{ss} \def\sfbshape{ss} \def\scshape{csc} \def\scbshape{csc} % Definitions for a main text size of 11pt. This is the default in % Texinfo. % \def\definetextfontsizexi{ % Text fonts (11.2pt, magstep1). \def\textnominalsize{11pt} \edef\mainmagstep{\magstephalf} \setfont\textrm\rmshape{10}{\mainmagstep} \setfont\texttt\ttshape{10}{\mainmagstep} \setfont\textbf\bfshape{10}{\mainmagstep} \setfont\textit\itshape{10}{\mainmagstep} \setfont\textsl\slshape{10}{\mainmagstep} \setfont\textsf\sfshape{10}{\mainmagstep} \setfont\textsc\scshape{10}{\mainmagstep} \setfont\textttsl\ttslshape{10}{\mainmagstep} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstep1} \setfont\deftt\ttshape{10}{\magstep1} \setfont\defttsl\ttslshape{10}{\magstep1} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000} \setfont\smalltt\ttshape{9}{1000} \setfont\smallbf\bfshape{10}{900} \setfont\smallit\itshape{9}{1000} \setfont\smallsl\slshape{9}{1000} \setfont\smallsf\sfshape{9}{1000} \setfont\smallsc\scshape{10}{900} \setfont\smallttsl\ttslshape{10}{900} \font\smalli=cmmi9 \font\smallsy=cmsy9 % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000} \setfont\smallertt\ttshape{8}{1000} \setfont\smallerbf\bfshape{10}{800} \setfont\smallerit\itshape{8}{1000} \setfont\smallersl\slshape{8}{1000} \setfont\smallersf\sfshape{8}{1000} \setfont\smallersc\scshape{10}{800} \setfont\smallerttsl\ttslshape{10}{800} \font\smalleri=cmmi8 \font\smallersy=cmsy8 % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3} \setfont\titleit\itbshape{10}{\magstep4} \setfont\titlesl\slbshape{10}{\magstep4} \setfont\titlett\ttbshape{12}{\magstep3} \setfont\titlettsl\ttslshape{10}{\magstep4} \setfont\titlesf\sfbshape{17}{\magstep1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\authorrm{\secrm} \def\authortt{\sectt} % Chapter (and unnumbered) fonts (17.28pt). \def\chapnominalsize{17pt} \setfont\chaprm\rmbshape{12}{\magstep2} \setfont\chapit\itbshape{10}{\magstep3} \setfont\chapsl\slbshape{10}{\magstep3} \setfont\chaptt\ttbshape{12}{\magstep2} \setfont\chapttsl\ttslshape{10}{\magstep3} \setfont\chapsf\sfbshape{17}{1000} \let\chapbf=\chaprm \setfont\chapsc\scbshape{10}{\magstep3} \font\chapi=cmmi12 scaled \magstep2 \font\chapsy=cmsy10 scaled \magstep3 % Section fonts (14.4pt). \def\secnominalsize{14pt} \setfont\secrm\rmbshape{12}{\magstep1} \setfont\secit\itbshape{10}{\magstep2} \setfont\secsl\slbshape{10}{\magstep2} \setfont\sectt\ttbshape{12}{\magstep1} \setfont\secttsl\ttslshape{10}{\magstep2} \setfont\secsf\sfbshape{12}{\magstep1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep2} \font\seci=cmmi12 scaled \magstep1 \font\secsy=cmsy10 scaled \magstep2 % Subsection fonts (13.15pt). \def\ssecnominalsize{13pt} \setfont\ssecrm\rmbshape{12}{\magstephalf} \setfont\ssecit\itbshape{10}{1315} \setfont\ssecsl\slbshape{10}{1315} \setfont\ssectt\ttbshape{12}{\magstephalf} \setfont\ssecttsl\ttslshape{10}{1315} \setfont\ssecsf\sfbshape{12}{\magstephalf} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1315} \font\sseci=cmmi12 scaled \magstephalf \font\ssecsy=cmsy10 scaled 1315 % Reduced fonts for @acro in text (10pt). \def\reducednominalsize{10pt} \setfont\reducedrm\rmshape{10}{1000} \setfont\reducedtt\ttshape{10}{1000} \setfont\reducedbf\bfshape{10}{1000} \setfont\reducedit\itshape{10}{1000} \setfont\reducedsl\slshape{10}{1000} \setfont\reducedsf\sfshape{10}{1000} \setfont\reducedsc\scshape{10}{1000} \setfont\reducedttsl\ttslshape{10}{1000} \font\reducedi=cmmi10 \font\reducedsy=cmsy10 % reset the current fonts \textfonts \rm } % end of 11pt text font size definitions % Definitions to make the main text be 10pt Computer Modern, with % section, chapter, etc., sizes following suit. This is for the GNU % Press printing of the Emacs 22 manual. Maybe other manuals in the % future. Used with @smallbook, which sets the leading to 12pt. % \def\definetextfontsizex{% % Text fonts (10pt). \def\textnominalsize{10pt} \edef\mainmagstep{1000} \setfont\textrm\rmshape{10}{\mainmagstep} \setfont\texttt\ttshape{10}{\mainmagstep} \setfont\textbf\bfshape{10}{\mainmagstep} \setfont\textit\itshape{10}{\mainmagstep} \setfont\textsl\slshape{10}{\mainmagstep} \setfont\textsf\sfshape{10}{\mainmagstep} \setfont\textsc\scshape{10}{\mainmagstep} \setfont\textttsl\ttslshape{10}{\mainmagstep} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstephalf} \setfont\deftt\ttshape{10}{\magstephalf} \setfont\defttsl\ttslshape{10}{\magstephalf} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000} \setfont\smalltt\ttshape{9}{1000} \setfont\smallbf\bfshape{10}{900} \setfont\smallit\itshape{9}{1000} \setfont\smallsl\slshape{9}{1000} \setfont\smallsf\sfshape{9}{1000} \setfont\smallsc\scshape{10}{900} \setfont\smallttsl\ttslshape{10}{900} \font\smalli=cmmi9 \font\smallsy=cmsy9 % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000} \setfont\smallertt\ttshape{8}{1000} \setfont\smallerbf\bfshape{10}{800} \setfont\smallerit\itshape{8}{1000} \setfont\smallersl\slshape{8}{1000} \setfont\smallersf\sfshape{8}{1000} \setfont\smallersc\scshape{10}{800} \setfont\smallerttsl\ttslshape{10}{800} \font\smalleri=cmmi8 \font\smallersy=cmsy8 % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3} \setfont\titleit\itbshape{10}{\magstep4} \setfont\titlesl\slbshape{10}{\magstep4} \setfont\titlett\ttbshape{12}{\magstep3} \setfont\titlettsl\ttslshape{10}{\magstep4} \setfont\titlesf\sfbshape{17}{\magstep1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\authorrm{\secrm} \def\authortt{\sectt} % Chapter fonts (14.4pt). \def\chapnominalsize{14pt} \setfont\chaprm\rmbshape{12}{\magstep1} \setfont\chapit\itbshape{10}{\magstep2} \setfont\chapsl\slbshape{10}{\magstep2} \setfont\chaptt\ttbshape{12}{\magstep1} \setfont\chapttsl\ttslshape{10}{\magstep2} \setfont\chapsf\sfbshape{12}{\magstep1} \let\chapbf\chaprm \setfont\chapsc\scbshape{10}{\magstep2} \font\chapi=cmmi12 scaled \magstep1 \font\chapsy=cmsy10 scaled \magstep2 % Section fonts (12pt). \def\secnominalsize{12pt} \setfont\secrm\rmbshape{12}{1000} \setfont\secit\itbshape{10}{\magstep1} \setfont\secsl\slbshape{10}{\magstep1} \setfont\sectt\ttbshape{12}{1000} \setfont\secttsl\ttslshape{10}{\magstep1} \setfont\secsf\sfbshape{12}{1000} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep1} \font\seci=cmmi12 \font\secsy=cmsy10 scaled \magstep1 % Subsection fonts (10pt). \def\ssecnominalsize{10pt} \setfont\ssecrm\rmbshape{10}{1000} \setfont\ssecit\itbshape{10}{1000} \setfont\ssecsl\slbshape{10}{1000} \setfont\ssectt\ttbshape{10}{1000} \setfont\ssecttsl\ttslshape{10}{1000} \setfont\ssecsf\sfbshape{10}{1000} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1000} \font\sseci=cmmi10 \font\ssecsy=cmsy10 % Reduced fonts for @acro in text (9pt). \def\reducednominalsize{9pt} \setfont\reducedrm\rmshape{9}{1000} \setfont\reducedtt\ttshape{9}{1000} \setfont\reducedbf\bfshape{10}{900} \setfont\reducedit\itshape{9}{1000} \setfont\reducedsl\slshape{9}{1000} \setfont\reducedsf\sfshape{9}{1000} \setfont\reducedsc\scshape{10}{900} \setfont\reducedttsl\ttslshape{10}{900} \font\reducedi=cmmi9 \font\reducedsy=cmsy9 % reduce space between paragraphs \divide\parskip by 2 % reset the current fonts \textfonts \rm } % end of 10pt text font size definitions % We provide the user-level command % @fonttextsize 10 % (or 11) to redefine the text font size. pt is assumed. % \def\xword{10} \def\xiword{11} % \parseargdef\fonttextsize{% \def\textsizearg{#1}% \wlog{doing @fonttextsize \textsizearg}% % % Set \globaldefs so that documents can use this inside @tex, since % makeinfo 4.8 does not support it, but we need it nonetheless. % \begingroup \globaldefs=1 \ifx\textsizearg\xword \definetextfontsizex \else \ifx\textsizearg\xiword \definetextfontsizexi \else \errhelp=\EMsimple \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'} \fi\fi \endgroup } % In order for the font changes to affect most math symbols and letters, % we have to define the \textfont of the standard families. Since % texinfo doesn't allow for producing subscripts and superscripts except % in the main text, we don't bother to reset \scriptfont and % \scriptscriptfont (which would also require loading a lot more fonts). % \def\resetmathfonts{% \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf \textfont\ttfam=\tentt \textfont\sffam=\tensf } % The font-changing commands redefine the meanings of \tenSTYLE, instead % of just \STYLE. We do this because \STYLE needs to also set the % current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire % \tenSTYLE to set the current font. % % Each font-changing command also sets the names \lsize (one size lower) % and \lllsize (three sizes lower). These relative commands are used in % the LaTeX logo and acronyms. % % This all needs generalizing, badly. % \def\textfonts{% \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl \def\curfontsize{text}% \def\lsize{reduced}\def\lllsize{smaller}% \resetmathfonts \setleading{\textleading}} \def\titlefonts{% \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy \let\tenttsl=\titlettsl \def\curfontsize{title}% \def\lsize{chap}\def\lllsize{subsec}% \resetmathfonts \setleading{25pt}} \def\titlefont#1{{\titlefonts\rm #1}} \def\chapfonts{% \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl \def\curfontsize{chap}% \def\lsize{sec}\def\lllsize{text}% \resetmathfonts \setleading{19pt}} \def\secfonts{% \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl \def\curfontsize{sec}% \def\lsize{subsec}\def\lllsize{reduced}% \resetmathfonts \setleading{16pt}} \def\subsecfonts{% \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl \def\curfontsize{ssec}% \def\lsize{text}\def\lllsize{small}% \resetmathfonts \setleading{15pt}} \let\subsubsecfonts = \subsecfonts \def\reducedfonts{% \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy \let\tenttsl=\reducedttsl \def\curfontsize{reduced}% \def\lsize{small}\def\lllsize{smaller}% \resetmathfonts \setleading{10.5pt}} \def\smallfonts{% \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy \let\tenttsl=\smallttsl \def\curfontsize{small}% \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{10.5pt}} \def\smallerfonts{% \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy \let\tenttsl=\smallerttsl \def\curfontsize{smaller}% \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{9.5pt}} % Set the fonts to use with the @small... environments. \let\smallexamplefonts = \smallfonts % About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample % can fit this many characters: % 8.5x11=86 smallbook=72 a4=90 a5=69 % If we use \scriptfonts (8pt), then we can fit this many characters: % 8.5x11=90+ smallbook=80 a4=90+ a5=77 % For me, subjectively, the few extra characters that fit aren't worth % the additional smallness of 8pt. So I'm making the default 9pt. % % By the way, for comparison, here's what fits with @example (10pt): % 8.5x11=71 smallbook=60 a4=75 a5=58 % % I wish the USA used A4 paper. % --karl, 24jan03. % Set up the default fonts, so we can use them for creating boxes. % \definetextfontsizexi % Define these so they can be easily changed for other fonts. \def\angleleft{$\langle$} \def\angleright{$\rangle$} % Count depth in font-changes, for error checks \newcount\fontdepth \fontdepth=0 % Fonts for short table of contents. \setfont\shortcontrm\rmshape{12}{1000} \setfont\shortcontbf\bfshape{10}{\magstep1} % no cmb12 \setfont\shortcontsl\slshape{12}{1000} \setfont\shortconttt\ttshape{12}{1000} %% Add scribe-like font environments, plus @l for inline lisp (usually sans %% serif) and @ii for TeX italic % \smartitalic{ARG} outputs arg in italics, followed by an italic correction % unless the following character is such as not to need one. \def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else \ptexslash\fi\fi\fi} \def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx} \def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx} % like \smartslanted except unconditionally uses \ttsl. % @var is set to this for defun arguments. \def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx} % like \smartslanted except unconditionally use \sl. We never want % ttsl for book titles, do we? \def\cite#1{{\sl #1}\futurelet\next\smartitalicx} \let\i=\smartitalic \let\slanted=\smartslanted \let\var=\smartslanted \let\dfn=\smartslanted \let\emph=\smartitalic % @b, explicit bold. \def\b#1{{\bf #1}} \let\strong=\b % @sansserif, explicit sans. \def\sansserif#1{{\sf #1}} % We can't just use \exhyphenpenalty, because that only has effect at % the end of a paragraph. Restore normal hyphenation at the end of the % group within which \nohyphenation is presumably called. % \def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} \def\restorehyphenation{\hyphenchar\font = `- } % Set sfcode to normal for the chars that usually have another value. % Can't use plain's \frenchspacing because it uses the `\x notation, and % sometimes \x has an active definition that messes things up. % \catcode`@=11 \def\plainfrenchspacing{% \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m \def\endofsentencespacefactor{1000}% for @. and friends } \def\plainnonfrenchspacing{% \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000 \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 \def\endofsentencespacefactor{3000}% for @. and friends } \catcode`@=\other \def\endofsentencespacefactor{3000}% default \def\t#1{% {\tt \rawbackslash \plainfrenchspacing #1}% \null } \def\samp#1{`\tclose{#1}'\null} \setfont\keyrm\rmshape{8}{1000} \font\keysy=cmsy9 \def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% \vbox{\hrule\kern-0.4pt \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% \kern-0.4pt\hrule}% \kern-.06em\raise0.4pt\hbox{\angleright}}}} % The old definition, with no lozenge: %\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null} \def\ctrl #1{{\tt \rawbackslash \hat}#1} % @file, @option are the same as @samp. \let\file=\samp \let\option=\samp % @code is a modification of @t, % which makes spaces the same size as normal in the surrounding text. \def\tclose#1{% {% % Change normal interword space to be same as for the current font. \spaceskip = \fontdimen2\font % % Switch to typewriter. \tt % % But `\ ' produces the large typewriter interword space. \def\ {{\spaceskip = 0pt{} }}% % % Turn off hyphenation. \nohyphenation % \rawbackslash \plainfrenchspacing #1% }% \null } % We *must* turn on hyphenation at `-' and `_' in @code. % Otherwise, it is too hard to avoid overfull hboxes % in the Emacs manual, the Library manual, etc. % Unfortunately, TeX uses one parameter (\hyphenchar) to control % both hyphenation at - and hyphenation within words. % We must therefore turn them both off (\tclose does that) % and arrange explicitly to hyphenate at a dash. % -- rms. { \catcode`\-=\active \catcode`\_=\active \catcode`\'=\active \catcode`\`=\active % \global\def\code{\begingroup \catcode\rquoteChar=\active \catcode\lquoteChar=\active \let'\codequoteright \let`\codequoteleft % \catcode\dashChar=\active \catcode\underChar=\active \ifallowcodebreaks \let-\codedash \let_\codeunder \else \let-\realdash \let_\realunder \fi \codex } } \def\realdash{-} \def\codedash{-\discretionary{}{}{}} \def\codeunder{% % this is all so @math{@code{var_name}+1} can work. In math mode, _ % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) % will therefore expand the active definition of _, which is us % (inside @code that is), therefore an endless loop. \ifusingtt{\ifmmode \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. \else\normalunderscore \fi \discretionary{}{}{}}% {\_}% } \def\codex #1{\tclose{#1}\endgroup} % An additional complication: the above will allow breaks after, e.g., % each of the four underscores in __typeof__. This is undesirable in % some manuals, especially if they don't have long identifiers in % general. @allowcodebreaks provides a way to control this. % \newif\ifallowcodebreaks \allowcodebreakstrue \def\keywordtrue{true} \def\keywordfalse{false} \parseargdef\allowcodebreaks{% \def\txiarg{#1}% \ifx\txiarg\keywordtrue \allowcodebreakstrue \else\ifx\txiarg\keywordfalse \allowcodebreaksfalse \else \errhelp = \EMsimple \errmessage{Unknown @allowcodebreaks option `\txiarg'}% \fi\fi } % @kbd is like @code, except that if the argument is just one @key command, % then @kbd has no effect. % @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), % `example' (@kbd uses ttsl only inside of @example and friends), % or `code' (@kbd uses normal tty font always). \parseargdef\kbdinputstyle{% \def\txiarg{#1}% \ifx\txiarg\worddistinct \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% \else\ifx\txiarg\wordexample \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% \else\ifx\txiarg\wordcode \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% \else \errhelp = \EMsimple \errmessage{Unknown @kbdinputstyle option `\txiarg'}% \fi\fi\fi } \def\worddistinct{distinct} \def\wordexample{example} \def\wordcode{code} % Default is `distinct.' \kbdinputstyle distinct \def\xkey{\key} \def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}% \ifx\one\xkey\ifx\threex\three \key{#2}% \else{\tclose{\kbdfont\look}}\fi \else{\tclose{\kbdfont\look}}\fi} % For @indicateurl, @env, @command quotes seem unnecessary, so use \code. \let\indicateurl=\code \let\env=\code \let\command=\code % @uref (abbreviation for `urlref') takes an optional (comma-separated) % second argument specifying the text to display and an optional third % arg as text to display instead of (rather than in addition to) the url % itself. First (mandatory) arg is the url. Perhaps eventually put in % a hypertex \special here. % \def\uref#1{\douref #1,,,\finish} \def\douref#1,#2,#3,#4\finish{\begingroup \unsepspaces \pdfurl{#1}% \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \unhbox0 % third arg given, show only that \else \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \ifpdf \unhbox0 % PDF: 2nd arg given, show only it \else \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url \fi \else \code{#1}% only url given, so show it \fi \fi \endlink \endgroup} % @url synonym for @uref, since that's how everyone uses it. % \let\url=\uref % rms does not like angle brackets --karl, 17may97. % So now @email is just like @uref, unless we are pdf. % %\def\email#1{\angleleft{\tt #1}\angleright} \ifpdf \def\email#1{\doemail#1,,\finish} \def\doemail#1,#2,#3\finish{\begingroup \unsepspaces \pdfurl{mailto:#1}% \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi \endlink \endgroup} \else \let\email=\uref \fi % Check if we are currently using a typewriter font. Since all the % Computer Modern typewriter fonts have zero interword stretch (and % shrink), and it is reasonable to expect all typewriter fonts to have % this property, we can check that font parameter. % \def\ifmonospace{\ifdim\fontdimen3\font=0pt } % Typeset a dimension, e.g., `in' or `pt'. The only reason for the % argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. % \def\dmn#1{\thinspace #1} \def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par} % @l was never documented to mean ``switch to the Lisp font'', % and it is not used as such in any manual I can find. We need it for % Polish suppressed-l. --karl, 22sep96. %\def\l#1{{\li #1}\null} % Explicit font changes: @r, @sc, undocumented @ii. \def\r#1{{\rm #1}} % roman font \def\sc#1{{\smallcaps#1}} % smallcaps font \def\ii#1{{\it #1}} % italic font % @acronym for "FBI", "NATO", and the like. % We print this one point size smaller, since it's intended for % all-uppercase. % \def\acronym#1{\doacronym #1,,\finish} \def\doacronym#1,#2,#3\finish{% {\selectfonts\lsize #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi } % @abbr for "Comput. J." and the like. % No font change, but don't do end-of-sentence spacing. % \def\abbr#1{\doabbr #1,,\finish} \def\doabbr#1,#2,#3\finish{% {\plainfrenchspacing #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi } % @pounds{} is a sterling sign, which Knuth put in the CM italic font. % \def\pounds{{\it\$}} % @euro{} comes from a separate font, depending on the current style. % We use the free feym* fonts from the eurosym package by Henrik % Theiling, which support regular, slanted, bold and bold slanted (and % "outlined" (blackboard board, sort of) versions, which we don't need). % It is available from http://www.ctan.org/tex-archive/fonts/eurosym. % % Although only regular is the truly official Euro symbol, we ignore % that. The Euro is designed to be slightly taller than the regular % font height. % % feymr - regular % feymo - slanted % feybr - bold % feybo - bold slanted % % There is no good (free) typewriter version, to my knowledge. % A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. % Hmm. % % Also doesn't work in math. Do we need to do math with euro symbols? % Hope not. % % \def\euro{{\eurofont e}} \def\eurofont{% % We set the font at each command, rather than predefining it in % \textfonts and the other font-switching commands, so that % installations which never need the symbol don't have to have the % font installed. % % There is only one designed size (nominal 10pt), so we always scale % that to the current nominal size. % % By the way, simply using "at 1em" works for cmr10 and the like, but % does not work for cmbx10 and other extended/shrunken fonts. % \def\eurosize{\csname\curfontsize nominalsize\endcsname}% % \ifx\curfontstyle\bfstylename % bold: \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize \else % regular: \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize \fi \thiseurofont } % @registeredsymbol - R in a circle. The font for the R should really % be smaller yet, but lllsize is the best we can do for now. % Adapted from the plain.tex definition of \copyright. % \def\registeredsymbol{% $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}% \hfil\crcr\Orb}}% }$% } % @textdegree - the normal degrees sign. % \def\textdegree{$^\circ$} % Laurent Siebenmann reports \Orb undefined with: % Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 % so we'll define it if necessary. % \ifx\Orb\undefined \def\Orb{\mathhexbox20D} \fi \message{page headings,} \newskip\titlepagetopglue \titlepagetopglue = 1.5in \newskip\titlepagebottomglue \titlepagebottomglue = 2pc % First the title page. Must do @settitle before @titlepage. \newif\ifseenauthor \newif\iffinishedtitlepage % Do an implicit @contents or @shortcontents after @end titlepage if the % user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. % \newif\ifsetcontentsaftertitlepage \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue \newif\ifsetshortcontentsaftertitlepage \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue \parseargdef\shorttitlepage{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}% \endgroup\page\hbox{}\page} \envdef\titlepage{% % Open one extra group, as we want to close it in the middle of \Etitlepage. \begingroup \parindent=0pt \textfonts % Leave some space at the very top of the page. \vglue\titlepagetopglue % No rule at page bottom unless we print one at the top with @title. \finishedtitlepagetrue % % Most title ``pages'' are actually two pages long, with space % at the top of the second. We don't want the ragged left on the second. \let\oldpage = \page \def\page{% \iffinishedtitlepage\else \finishtitlepage \fi \let\page = \oldpage \page \null }% } \def\Etitlepage{% \iffinishedtitlepage\else \finishtitlepage \fi % It is important to do the page break before ending the group, % because the headline and footline are only empty inside the group. % If we use the new definition of \page, we always get a blank page % after the title page, which we certainly don't want. \oldpage \endgroup % % Need this before the \...aftertitlepage checks so that if they are % in effect the toc pages will come out with page numbers. \HEADINGSon % % If they want short, they certainly want long too. \ifsetshortcontentsaftertitlepage \shortcontents \contents \global\let\shortcontents = \relax \global\let\contents = \relax \fi % \ifsetcontentsaftertitlepage \contents \global\let\contents = \relax \global\let\shortcontents = \relax \fi } \def\finishtitlepage{% \vskip4pt \hrule height 2pt width \hsize \vskip\titlepagebottomglue \finishedtitlepagetrue } %%% Macros to be used within @titlepage: \let\subtitlerm=\tenrm \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines \let\tt=\authortt} \parseargdef\title{% \checkenv\titlepage \leftline{\titlefonts\rm #1} % print a rule at the page bottom also. \finishedtitlepagefalse \vskip4pt \hrule height 4pt width \hsize \vskip4pt } \parseargdef\subtitle{% \checkenv\titlepage {\subtitlefont \rightline{#1}}% } % @author should come last, but may come many times. % It can also be used inside @quotation. % \parseargdef\author{% \def\temp{\quotation}% \ifx\thisenv\temp \def\quotationauthor{#1}% printed in \Equotation. \else \checkenv\titlepage \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi {\authorfont \leftline{#1}}% \fi } %%% Set up page headings and footings. \let\thispage=\folio \newtoks\evenheadline % headline on even pages \newtoks\oddheadline % headline on odd pages \newtoks\evenfootline % footline on even pages \newtoks\oddfootline % footline on odd pages % Now make TeX use those variables \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline \else \the\evenheadline \fi}} \footline={{\textfonts\rm \ifodd\pageno \the\oddfootline \else \the\evenfootline \fi}\HEADINGShook} \let\HEADINGShook=\relax % Commands to set those variables. % For example, this is what @headings on does % @evenheading @thistitle|@thispage|@thischapter % @oddheading @thischapter|@thispage|@thistitle % @evenfooting @thisfile|| % @oddfooting ||@thisfile \def\evenheading{\parsearg\evenheadingxxx} \def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} \def\evenheadingyyy #1\|#2\|#3\|#4\finish{% \global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddheading{\parsearg\oddheadingxxx} \def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} \def\oddheadingyyy #1\|#2\|#3\|#4\finish{% \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% \def\evenfooting{\parsearg\evenfootingxxx} \def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} \def\evenfootingyyy #1\|#2\|#3\|#4\finish{% \global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddfooting{\parsearg\oddfootingxxx} \def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} \def\oddfootingyyy #1\|#2\|#3\|#4\finish{% \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% % % Leave some space for the footline. Hopefully ok to assume % @evenfooting will not be used by itself. \global\advance\pageheight by -12pt \global\advance\vsize by -12pt } \parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} % @headings double turns headings on for double-sided printing. % @headings single turns headings on for single-sided printing. % @headings off turns them off. % @headings on same as @headings double, retained for compatibility. % @headings after turns on double-sided headings after this page. % @headings doubleafter turns on double-sided headings after this page. % @headings singleafter turns on single-sided headings after this page. % By default, they are off at the start of a document, % and turned `on' after @end titlepage. \def\headings #1 {\csname HEADINGS#1\endcsname} \def\HEADINGSoff{% \global\evenheadline={\hfil} \global\evenfootline={\hfil} \global\oddheadline={\hfil} \global\oddfootline={\hfil}} \HEADINGSoff % When we turn headings on, set the page number to 1. % For double-sided printing, put current file name in lower left corner, % chapter name on inside top of right hand pages, document % title on inside top of left hand pages, and page numbers on outside top % edge of all pages. \def\HEADINGSdouble{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \let\contentsalignmacro = \chappager % For single-sided printing, chapter title goes across top left of page, % page number on top right. \def\HEADINGSsingle{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } \def\HEADINGSon{\HEADINGSdouble} \def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} \let\HEADINGSdoubleafter=\HEADINGSafter \def\HEADINGSdoublex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} \def\HEADINGSsinglex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } % Subroutines used in generating headings % This produces Day Month Year style of output. % Only define if not already defined, in case a txi-??.tex file has set % up a different format (e.g., txi-cs.tex does this). \ifx\today\undefined \def\today{% \number\day\space \ifcase\month \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec \fi \space\number\year} \fi % @settitle line... specifies the title of the document, for headings. % It generates no output of its own. \def\thistitle{\putwordNoTitle} \def\settitle{\parsearg{\gdef\thistitle}} \message{tables,} % Tables -- @table, @ftable, @vtable, @item(x). % default indentation of table text \newdimen\tableindent \tableindent=.8in % default indentation of @itemize and @enumerate text \newdimen\itemindent \itemindent=.3in % margin between end of table item and start of table text. \newdimen\itemmargin \itemmargin=.1in % used internally for \itemindent minus \itemmargin \newdimen\itemmax % Note @table, @ftable, and @vtable define @item, @itemx, etc., with % these defs. % They also define \itemindex % to index the item name in whatever manner is desired (perhaps none). \newif\ifitemxneedsnegativevskip \def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} \def\internalBitem{\smallbreak \parsearg\itemzzz} \def\internalBitemx{\itemxpar \parsearg\itemzzz} \def\itemzzz #1{\begingroup % \advance\hsize by -\rightskip \advance\hsize by -\tableindent \setbox0=\hbox{\itemindicate{#1}}% \itemindex{#1}% \nobreak % This prevents a break before @itemx. % % If the item text does not fit in the space we have, put it on a line % by itself, and do not allow a page break either before or after that % line. We do not start a paragraph here because then if the next % command is, e.g., @kindex, the whatsit would get put into the % horizontal list on a line by itself, resulting in extra blank space. \ifdim \wd0>\itemmax % % Make this a paragraph so we get the \parskip glue and wrapping, % but leave it ragged-right. \begingroup \advance\leftskip by-\tableindent \advance\hsize by\tableindent \advance\rightskip by0pt plus1fil \leavevmode\unhbox0\par \endgroup % % We're going to be starting a paragraph, but we don't want the % \parskip glue -- logically it's part of the @item we just started. \nobreak \vskip-\parskip % % Stop a page break at the \parskip glue coming up. However, if % what follows is an environment such as @example, there will be no % \parskip glue; then the negative vskip we just inserted would % cause the example and the item to crash together. So we use this % bizarre value of 10001 as a signal to \aboveenvbreak to insert % \parskip glue after all. Section titles are handled this way also. % \penalty 10001 \endgroup \itemxneedsnegativevskipfalse \else % The item text fits into the space. Start a paragraph, so that the % following text (if any) will end up on the same line. \noindent % Do this with kerns and \unhbox so that if there is a footnote in % the item text, it can migrate to the main vertical list and % eventually be printed. \nobreak\kern-\tableindent \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 \unhbox0 \nobreak\kern\dimen0 \endgroup \itemxneedsnegativevskiptrue \fi } \def\item{\errmessage{@item while not in a list environment}} \def\itemx{\errmessage{@itemx while not in a list environment}} % @table, @ftable, @vtable. \envdef\table{% \let\itemindex\gobble \tablecheck{table}% } \envdef\ftable{% \def\itemindex ##1{\doind {fn}{\code{##1}}}% \tablecheck{ftable}% } \envdef\vtable{% \def\itemindex ##1{\doind {vr}{\code{##1}}}% \tablecheck{vtable}% } \def\tablecheck#1{% \ifnum \the\catcode`\^^M=\active \endgroup \errmessage{This command won't work in this context; perhaps the problem is that we are \inenvironment\thisenv}% \def\next{\doignore{#1}}% \else \let\next\tablex \fi \next } \def\tablex#1{% \def\itemindicate{#1}% \parsearg\tabley } \def\tabley#1{% {% \makevalueexpandable \edef\temp{\noexpand\tablez #1\space\space\space}% \expandafter }\temp \endtablez } \def\tablez #1 #2 #3 #4\endtablez{% \aboveenvbreak \ifnum 0#1>0 \advance \leftskip by #1\mil \fi \ifnum 0#2>0 \tableindent=#2\mil \fi \ifnum 0#3>0 \advance \rightskip by #3\mil \fi \itemmax=\tableindent \advance \itemmax by -\itemmargin \advance \leftskip by \tableindent \exdentamount=\tableindent \parindent = 0pt \parskip = \smallskipamount \ifdim \parskip=0pt \parskip=2pt \fi \let\item = \internalBitem \let\itemx = \internalBitemx } \def\Etable{\endgraf\afterenvbreak} \let\Eftable\Etable \let\Evtable\Etable \let\Eitemize\Etable \let\Eenumerate\Etable % This is the counter used by @enumerate, which is really @itemize \newcount \itemno \envdef\itemize{\parsearg\doitemize} \def\doitemize#1{% \aboveenvbreak \itemmax=\itemindent \advance\itemmax by -\itemmargin \advance\leftskip by \itemindent \exdentamount=\itemindent \parindent=0pt \parskip=\smallskipamount \ifdim\parskip=0pt \parskip=2pt \fi \def\itemcontents{#1}% % @itemize with no arg is equivalent to @itemize @bullet. \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi \let\item=\itemizeitem } % Definition of @item while inside @itemize and @enumerate. % \def\itemizeitem{% \advance\itemno by 1 % for enumerations {\let\par=\endgraf \smallbreak}% reasonable place to break {% % If the document has an @itemize directly after a section title, a % \nobreak will be last on the list, and \sectionheading will have % done a \vskip-\parskip. In that case, we don't want to zero % parskip, or the item text will crash with the heading. On the % other hand, when there is normal text preceding the item (as there % usually is), we do want to zero parskip, or there would be too much % space. In that case, we won't have a \nobreak before. At least % that's the theory. \ifnum\lastpenalty<10000 \parskip=0in \fi \noindent \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% \vadjust{\penalty 1200}}% not good to break after first line of item. \flushcr } % \splitoff TOKENS\endmark defines \first to be the first token in % TOKENS, and \rest to be the remainder. % \def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% % Allow an optional argument of an uppercase letter, lowercase letter, % or number, to specify the first label in the enumerated list. No % argument is the same as `1'. % \envparseargdef\enumerate{\enumeratey #1 \endenumeratey} \def\enumeratey #1 #2\endenumeratey{% % If we were given no argument, pretend we were given `1'. \def\thearg{#1}% \ifx\thearg\empty \def\thearg{1}\fi % % Detect if the argument is a single token. If so, it might be a % letter. Otherwise, the only valid thing it can be is a number. % (We will always have one token, because of the test we just made. % This is a good thing, since \splitoff doesn't work given nothing at % all -- the first parameter is undelimited.) \expandafter\splitoff\thearg\endmark \ifx\rest\empty % Only one token in the argument. It could still be anything. % A ``lowercase letter'' is one whose \lccode is nonzero. % An ``uppercase letter'' is one whose \lccode is both nonzero, and % not equal to itself. % Otherwise, we assume it's a number. % % We need the \relax at the end of the \ifnum lines to stop TeX from % continuing to look for a . % \ifnum\lccode\expandafter`\thearg=0\relax \numericenumerate % a number (we hope) \else % It's a letter. \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax \lowercaseenumerate % lowercase letter \else \uppercaseenumerate % uppercase letter \fi \fi \else % Multiple tokens in the argument. We hope it's a number. \numericenumerate \fi } % An @enumerate whose labels are integers. The starting integer is % given in \thearg. % \def\numericenumerate{% \itemno = \thearg \startenumeration{\the\itemno}% } % The starting (lowercase) letter is in \thearg. \def\lowercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more lowercase letters in @enumerate; get a bigger alphabet}% \fi \char\lccode\itemno }% } % The starting (uppercase) letter is in \thearg. \def\uppercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more uppercase letters in @enumerate; get a bigger alphabet} \fi \char\uccode\itemno }% } % Call \doitemize, adding a period to the first argument and supplying the % common last two arguments. Also subtract one from the initial value in % \itemno, since @item increments \itemno. % \def\startenumeration#1{% \advance\itemno by -1 \doitemize{#1.}\flushcr } % @alphaenumerate and @capsenumerate are abbreviations for giving an arg % to @enumerate. % \def\alphaenumerate{\enumerate{a}} \def\capsenumerate{\enumerate{A}} \def\Ealphaenumerate{\Eenumerate} \def\Ecapsenumerate{\Eenumerate} % @multitable macros % Amy Hendrickson, 8/18/94, 3/6/96 % % @multitable ... @end multitable will make as many columns as desired. % Contents of each column will wrap at width given in preamble. Width % can be specified either with sample text given in a template line, % or in percent of \hsize, the current width of text on page. % Table can continue over pages but will only break between lines. % To make preamble: % % Either define widths of columns in terms of percent of \hsize: % @multitable @columnfractions .25 .3 .45 % @item ... % % Numbers following @columnfractions are the percent of the total % current hsize to be used for each column. You may use as many % columns as desired. % Or use a template: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item ... % using the widest term desired in each column. % Each new table line starts with @item, each subsequent new column % starts with @tab. Empty columns may be produced by supplying @tab's % with nothing between them for as many times as empty columns are needed, % ie, @tab@tab@tab will produce two empty columns. % @item, @tab do not need to be on their own lines, but it will not hurt % if they are. % Sample multitable: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item first col stuff @tab second col stuff @tab third col % @item % first col stuff % @tab % second col stuff % @tab % third col % @item first col stuff @tab second col stuff % @tab Many paragraphs of text may be used in any column. % % They will wrap at the width determined by the template. % @item@tab@tab This will be in third column. % @end multitable % Default dimensions may be reset by user. % @multitableparskip is vertical space between paragraphs in table. % @multitableparindent is paragraph indent in table. % @multitablecolmargin is horizontal space to be left between columns. % @multitablelinespace is space to leave between table items, baseline % to baseline. % 0pt means it depends on current normal line spacing. % \newskip\multitableparskip \newskip\multitableparindent \newdimen\multitablecolspace \newskip\multitablelinespace \multitableparskip=0pt \multitableparindent=6pt \multitablecolspace=12pt \multitablelinespace=0pt % Macros used to set up halign preamble: % \let\endsetuptable\relax \def\xendsetuptable{\endsetuptable} \let\columnfractions\relax \def\xcolumnfractions{\columnfractions} \newif\ifsetpercent % #1 is the @columnfraction, usually a decimal number like .5, but might % be just 1. We just use it, whatever it is. % \def\pickupwholefraction#1 {% \global\advance\colcount by 1 \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% \setuptable } \newcount\colcount \def\setuptable#1{% \def\firstarg{#1}% \ifx\firstarg\xendsetuptable \let\go = \relax \else \ifx\firstarg\xcolumnfractions \global\setpercenttrue \else \ifsetpercent \let\go\pickupwholefraction \else \global\advance\colcount by 1 \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a % separator; typically that is always in the input, anyway. \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% \fi \fi \ifx\go\pickupwholefraction % Put the argument back for the \pickupwholefraction call, so % we'll always have a period there to be parsed. \def\go{\pickupwholefraction#1}% \else \let\go = \setuptable \fi% \fi \go } % multitable-only commands. % % @headitem starts a heading row, which we typeset in bold. % Assignments have to be global since we are inside the implicit group % of an alignment entry. Note that \everycr resets \everytab. \def\headitem{\checkenv\multitable \crcr \global\everytab={\bf}\the\everytab}% % % A \tab used to include \hskip1sp. But then the space in a template % line is not enough. That is bad. So let's go back to just `&' until % we encounter the problem it was intended to solve again. % --karl, nathan@acm.org, 20apr99. \def\tab{\checkenv\multitable &\the\everytab}% % @multitable ... @end multitable definitions: % \newtoks\everytab % insert after every tab. % \envdef\multitable{% \vskip\parskip \startsavinginserts % % @item within a multitable starts a normal row. % We use \def instead of \let so that if one of the multitable entries % contains an @itemize, we don't choke on the \item (seen as \crcr aka % \endtemplate) expanding \doitemize. \def\item{\crcr}% % \tolerance=9500 \hbadness=9500 \setmultitablespacing \parskip=\multitableparskip \parindent=\multitableparindent \overfullrule=0pt \global\colcount=0 % \everycr = {% \noalign{% \global\everytab={}% \global\colcount=0 % Reset the column counter. % Check for saved footnotes, etc. \checkinserts % Keeps underfull box messages off when table breaks over pages. %\filbreak % Maybe so, but it also creates really weird page breaks when the % table breaks over pages. Wouldn't \vfil be better? Wait until the % problem manifests itself, so it can be fixed for real --karl. }% }% % \parsearg\domultitable } \def\domultitable#1{% % To parse everything between @multitable and @item: \setuptable#1 \endsetuptable % % This preamble sets up a generic column definition, which will % be used as many times as user calls for columns. % \vtop will set a single line and will also let text wrap and % continue for many paragraphs if desired. \halign\bgroup &% \global\advance\colcount by 1 \multistrut \vtop{% % Use the current \colcount to find the correct column width: \hsize=\expandafter\csname col\the\colcount\endcsname % % In order to keep entries from bumping into each other % we will add a \leftskip of \multitablecolspace to all columns after % the first one. % % If a template has been used, we will add \multitablecolspace % to the width of each template entry. % % If the user has set preamble in terms of percent of \hsize we will % use that dimension as the width of the column, and the \leftskip % will keep entries from bumping into each other. Table will start at % left margin and final column will justify at right margin. % % Make sure we don't inherit \rightskip from the outer environment. \rightskip=0pt \ifnum\colcount=1 % The first column will be indented with the surrounding text. \advance\hsize by\leftskip \else \ifsetpercent \else % If user has not set preamble in terms of percent of \hsize % we will advance \hsize by \multitablecolspace. \advance\hsize by \multitablecolspace \fi % In either case we will make \leftskip=\multitablecolspace: \leftskip=\multitablecolspace \fi % Ignoring space at the beginning and end avoids an occasional spurious % blank line, when TeX decides to break the line at the space before the % box from the multistrut, so the strut ends up on a line by itself. % For example: % @multitable @columnfractions .11 .89 % @item @code{#} % @tab Legal holiday which is valid in major parts of the whole country. % Is automatically provided with highlighting sequences respectively % marking characters. \noindent\ignorespaces##\unskip\multistrut }\cr } \def\Emultitable{% \crcr \egroup % end the \halign \global\setpercentfalse } \def\setmultitablespacing{% \def\multistrut{\strut}% just use the standard line spacing % % Compute \multitablelinespace (if not defined by user) for use in % \multitableparskip calculation. We used define \multistrut based on % this, but (ironically) that caused the spacing to be off. % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100. \ifdim\multitablelinespace=0pt \setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip \global\advance\multitablelinespace by-\ht0 \fi %% Test to see if parskip is larger than space between lines of %% table. If not, do nothing. %% If so, set to same dimension as multitablelinespace. \ifdim\multitableparskip>\multitablelinespace \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller %% than skip between lines in the table. \fi% \ifdim\multitableparskip=0pt \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller %% than skip between lines in the table. \fi} \message{conditionals,} % @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, % @ifnotxml always succeed. They currently do nothing; we don't % attempt to check whether the conditionals are properly nested. But we % have to remember that they are conditionals, so that @end doesn't % attempt to close an environment group. % \def\makecond#1{% \expandafter\let\csname #1\endcsname = \relax \expandafter\let\csname iscond.#1\endcsname = 1 } \makecond{iftex} \makecond{ifnotdocbook} \makecond{ifnothtml} \makecond{ifnotinfo} \makecond{ifnotplaintext} \makecond{ifnotxml} % Ignore @ignore, @ifhtml, @ifinfo, and the like. % \def\direntry{\doignore{direntry}} \def\documentdescription{\doignore{documentdescription}} \def\docbook{\doignore{docbook}} \def\html{\doignore{html}} \def\ifdocbook{\doignore{ifdocbook}} \def\ifhtml{\doignore{ifhtml}} \def\ifinfo{\doignore{ifinfo}} \def\ifnottex{\doignore{ifnottex}} \def\ifplaintext{\doignore{ifplaintext}} \def\ifxml{\doignore{ifxml}} \def\ignore{\doignore{ignore}} \def\menu{\doignore{menu}} \def\xml{\doignore{xml}} % Ignore text until a line `@end #1', keeping track of nested conditionals. % % A count to remember the depth of nesting. \newcount\doignorecount \def\doignore#1{\begingroup % Scan in ``verbatim'' mode: \obeylines \catcode`\@ = \other \catcode`\{ = \other \catcode`\} = \other % % Make sure that spaces turn into tokens that match what \doignoretext wants. \spaceisspace % % Count number of #1's that we've seen. \doignorecount = 0 % % Swallow text until we reach the matching `@end #1'. \dodoignore{#1}% } { \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. \obeylines % % \gdef\dodoignore#1{% % #1 contains the command name as a string, e.g., `ifinfo'. % % Define a command to find the next `@end #1'. \long\def\doignoretext##1^^M@end #1{% \doignoretextyyy##1^^M@#1\_STOP_}% % % And this command to find another #1 command, at the beginning of a % line. (Otherwise, we would consider a line `@c @ifset', for % example, to count as an @ifset for nesting.) \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% % % And now expand that command. \doignoretext ^^M% }% } \def\doignoreyyy#1{% \def\temp{#1}% \ifx\temp\empty % Nothing found. \let\next\doignoretextzzz \else % Found a nested condition, ... \advance\doignorecount by 1 \let\next\doignoretextyyy % ..., look for another. % If we're here, #1 ends with ^^M\ifinfo (for example). \fi \next #1% the token \_STOP_ is present just after this macro. } % We have to swallow the remaining "\_STOP_". % \def\doignoretextzzz#1{% \ifnum\doignorecount = 0 % We have just found the outermost @end. \let\next\enddoignore \else % Still inside a nested condition. \advance\doignorecount by -1 \let\next\doignoretext % Look for the next @end. \fi \next } % Finish off ignored text. { \obeylines% % Ignore anything after the last `@end #1'; this matters in verbatim % environments, where otherwise the newline after an ignored conditional % would result in a blank line in the output. \gdef\enddoignore#1^^M{\endgroup\ignorespaces}% } % @set VAR sets the variable VAR to an empty value. % @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. % % Since we want to separate VAR from REST-OF-LINE (which might be % empty), we can't just use \parsearg; we have to insert a space of our % own to delimit the rest of the line, and then take it out again if we % didn't need it. % We rely on the fact that \parsearg sets \catcode`\ =10. % \parseargdef\set{\setyyy#1 \endsetyyy} \def\setyyy#1 #2\endsetyyy{% {% \makevalueexpandable \def\temp{#2}% \edef\next{\gdef\makecsname{SET#1}}% \ifx\temp\empty \next{}% \else \setzzz#2\endsetzzz \fi }% } % Remove the trailing space \setxxx inserted. \def\setzzz#1 \endsetzzz{\next{#1}} % @clear VAR clears (i.e., unsets) the variable VAR. % \parseargdef\clear{% {% \makevalueexpandable \global\expandafter\let\csname SET#1\endcsname=\relax }% } % @value{foo} gets the text saved in variable foo. \def\value{\begingroup\makevalueexpandable\valuexxx} \def\valuexxx#1{\expandablevalue{#1}\endgroup} { \catcode`\- = \active \catcode`\_ = \active % \gdef\makevalueexpandable{% \let\value = \expandablevalue % We don't want these characters active, ... \catcode`\-=\other \catcode`\_=\other % ..., but we might end up with active ones in the argument if % we're called from @code, as @code{@value{foo-bar_}}, though. % So \let them to their normal equivalents. \let-\realdash \let_\normalunderscore } } % We have this subroutine so that we can handle at least some @value's % properly in indexes (we call \makevalueexpandable in \indexdummies). % The command has to be fully expandable (if the variable is set), since % the result winds up in the index file. This means that if the % variable's value contains other Texinfo commands, it's almost certain % it will fail (although perhaps we could fix that with sufficient work % to do a one-level expansion on the result, instead of complete). % \def\expandablevalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax {[No value for ``#1'']}% \message{Variable `#1', used in @value, is not set.}% \else \csname SET#1\endcsname \fi } % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined % with @set. % % To get special treatment of `@end ifset,' call \makeond and the redefine. % \makecond{ifset} \def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} \def\doifset#1#2{% {% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname SET#2\endcsname\relax #1% If not set, redefine \next. \fi \expandafter }\next } \def\ifsetfail{\doignore{ifset}} % @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been % defined with @set, or has been undefined with @clear. % % The `\else' inside the `\doifset' parameter is a trick to reuse the % above code: if the variable is not set, do nothing, if it is set, % then redefine \next to \ifclearfail. % \makecond{ifclear} \def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} \def\ifclearfail{\doignore{ifclear}} % @dircategory CATEGORY -- specify a category of the dir file % which this file should belong to. Ignore this in TeX. \let\dircategory=\comment % @defininfoenclose. \let\definfoenclose=\comment \message{indexing,} % Index generation facilities % Define \newwrite to be identical to plain tex's \newwrite % except not \outer, so it can be used within macros and \if's. \edef\newwrite{\makecsname{ptexnewwrite}} % \newindex {foo} defines an index named foo. % It automatically defines \fooindex such that % \fooindex ...rest of line... puts an entry in the index foo. % It also defines \fooindfile to be the number of the output channel for % the file that accumulates this index. The file's extension is foo. % The name of an index should be no more than 2 characters long % for the sake of vms. % \def\newindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 % Open the file \fi \expandafter\xdef\csname#1index\endcsname{% % Define @#1index \noexpand\doindex{#1}} } % @defindex foo == \newindex{foo} % \def\defindex{\parsearg\newindex} % Define @defcodeindex, like @defindex except put all entries in @code. % \def\defcodeindex{\parsearg\newcodeindex} % \def\newcodeindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 \fi \expandafter\xdef\csname#1index\endcsname{% \noexpand\docodeindex{#1}}% } % @synindex foo bar makes index foo feed into index bar. % Do this instead of @defindex foo if you don't want it as a separate index. % % @syncodeindex foo bar similar, but put all entries made for index foo % inside @code. % \def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} \def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} % #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), % #3 the target index (bar). \def\dosynindex#1#2#3{% % Only do \closeout if we haven't already done it, else we'll end up % closing the target index. \expandafter \ifx\csname donesynindex#2\endcsname \undefined % The \closeout helps reduce unnecessary open files; the limit on the % Acorn RISC OS is a mere 16 files. \expandafter\closeout\csname#2indfile\endcsname \expandafter\let\csname\donesynindex#2\endcsname = 1 \fi % redefine \fooindfile: \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname \expandafter\let\csname#2indfile\endcsname=\temp % redefine \fooindex: \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% } % Define \doindex, the driver for all \fooindex macros. % Argument #1 is generated by the calling \fooindex macro, % and it is "foo", the name of the index. % \doindex just uses \parsearg; it calls \doind for the actual work. % This is because \doind is more useful to call from other macros. % There is also \dosubind {index}{topic}{subtopic} % which makes an entry in a two-level index such as the operation index. \def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} \def\singleindexer #1{\doind{\indexname}{#1}} % like the previous two, but they put @code around the argument. \def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} % Take care of Texinfo commands that can appear in an index entry. % Since there are some commands we want to expand, and others we don't, % we have to laboriously prevent expansion for those that we don't. % \def\indexdummies{% \escapechar = `\\ % use backslash in output files. \def\@{@}% change to @@ when we switch to @ as escape char in index files. \def\ {\realbackslash\space }% % % Need these in case \tex is in effect and \{ is a \delimiter again. % But can't use \lbracecmd and \rbracecmd because texindex assumes % braces and backslashes are used only as delimiters. \let\{ = \mylbrace \let\} = \myrbrace % % I don't entirely understand this, but when an index entry is % generated from a macro call, the \endinput which \scanmacro inserts % causes processing to be prematurely terminated. This is, % apparently, because \indexsorttmp is fully expanded, and \endinput % is an expandable command. The redefinition below makes \endinput % disappear altogether for that purpose -- although logging shows that % processing continues to some further point. On the other hand, it % seems \endinput does not hurt in the printed index arg, since that % is still getting written without apparent harm. % % Sample source (mac-idx3.tex, reported by Graham Percival to % help-texinfo, 22may06): % @macro funindex {WORD} % @findex xyz % @end macro % ... % @funindex commtest % % The above is not enough to reproduce the bug, but it gives the flavor. % % Sample whatsit resulting: % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}} % % So: \let\endinput = \empty % % Do the redefinitions. \commondummies } % For the aux and toc files, @ is the escape character. So we want to % redefine everything using @ as the escape character (instead of % \realbackslash, still used for index files). When everything uses @, % this will be simpler. % \def\atdummies{% \def\@{@@}% \def\ {@ }% \let\{ = \lbraceatcmd \let\} = \rbraceatcmd % % Do the redefinitions. \commondummies \otherbackslash } % Called from \indexdummies and \atdummies. % \def\commondummies{% % % \definedummyword defines \#1 as \string\#1\space, thus effectively % preventing its expansion. This is used only for control% words, % not control letters, because the \space would be incorrect for % control characters, but is needed to separate the control word % from whatever follows. % % For control letters, we have \definedummyletter, which omits the % space. % % These can be used both for control words that take an argument and % those that do not. If it is followed by {arg} in the input, then % that will dutifully get written to the index (or wherever). % \def\definedummyword ##1{\def##1{\string##1\space}}% \def\definedummyletter##1{\def##1{\string##1}}% \let\definedummyaccent\definedummyletter % \commondummiesnofonts % \definedummyletter\_% % % Non-English letters. \definedummyword\AA \definedummyword\AE \definedummyword\L \definedummyword\OE \definedummyword\O \definedummyword\aa \definedummyword\ae \definedummyword\l \definedummyword\oe \definedummyword\o \definedummyword\ss \definedummyword\exclamdown \definedummyword\questiondown \definedummyword\ordf \definedummyword\ordm % % Although these internal commands shouldn't show up, sometimes they do. \definedummyword\bf \definedummyword\gtr \definedummyword\hat \definedummyword\less \definedummyword\sf \definedummyword\sl \definedummyword\tclose \definedummyword\tt % \definedummyword\LaTeX \definedummyword\TeX % % Assorted special characters. \definedummyword\bullet \definedummyword\comma \definedummyword\copyright \definedummyword\registeredsymbol \definedummyword\dots \definedummyword\enddots \definedummyword\equiv \definedummyword\error \definedummyword\euro \definedummyword\expansion \definedummyword\minus \definedummyword\pounds \definedummyword\point \definedummyword\print \definedummyword\result \definedummyword\textdegree % % We want to disable all macros so that they are not expanded by \write. \macrolist % \normalturnoffactive % % Handle some cases of @value -- where it does not contain any % (non-fully-expandable) commands. \makevalueexpandable } % \commondummiesnofonts: common to \commondummies and \indexnofonts. % \def\commondummiesnofonts{% % Control letters and accents. \definedummyletter\!% \definedummyaccent\"% \definedummyaccent\'% \definedummyletter\*% \definedummyaccent\,% \definedummyletter\.% \definedummyletter\/% \definedummyletter\:% \definedummyaccent\=% \definedummyletter\?% \definedummyaccent\^% \definedummyaccent\`% \definedummyaccent\~% \definedummyword\u \definedummyword\v \definedummyword\H \definedummyword\dotaccent \definedummyword\ringaccent \definedummyword\tieaccent \definedummyword\ubaraccent \definedummyword\udotaccent \definedummyword\dotless % % Texinfo font commands. \definedummyword\b \definedummyword\i \definedummyword\r \definedummyword\sc \definedummyword\t % % Commands that take arguments. \definedummyword\acronym \definedummyword\cite \definedummyword\code \definedummyword\command \definedummyword\dfn \definedummyword\emph \definedummyword\env \definedummyword\file \definedummyword\kbd \definedummyword\key \definedummyword\math \definedummyword\option \definedummyword\pxref \definedummyword\ref \definedummyword\samp \definedummyword\strong \definedummyword\tie \definedummyword\uref \definedummyword\url \definedummyword\var \definedummyword\verb \definedummyword\w \definedummyword\xref } % \indexnofonts is used when outputting the strings to sort the index % by, and when constructing control sequence names. It eliminates all % control sequences and just writes whatever the best ASCII sort string % would be for a given command (usually its argument). % \def\indexnofonts{% % Accent commands should become @asis. \def\definedummyaccent##1{\let##1\asis}% % We can just ignore other control letters. \def\definedummyletter##1{\let##1\empty}% % Hopefully, all control words can become @asis. \let\definedummyword\definedummyaccent % \commondummiesnofonts % % Don't no-op \tt, since it isn't a user-level command % and is used in the definitions of the active chars like <, >, |, etc. % Likewise with the other plain tex font commands. %\let\tt=\asis % \def\ { }% \def\@{@}% % how to handle braces? \def\_{\normalunderscore}% % % Non-English letters. \def\AA{AA}% \def\AE{AE}% \def\L{L}% \def\OE{OE}% \def\O{O}% \def\aa{aa}% \def\ae{ae}% \def\l{l}% \def\oe{oe}% \def\o{o}% \def\ss{ss}% \def\exclamdown{!}% \def\questiondown{?}% \def\ordf{a}% \def\ordm{o}% % \def\LaTeX{LaTeX}% \def\TeX{TeX}% % % Assorted special characters. % (The following {} will end up in the sort string, but that's ok.) \def\bullet{bullet}% \def\comma{,}% \def\copyright{copyright}% \def\registeredsymbol{R}% \def\dots{...}% \def\enddots{...}% \def\equiv{==}% \def\error{error}% \def\euro{euro}% \def\expansion{==>}% \def\minus{-}% \def\pounds{pounds}% \def\point{.}% \def\print{-|}% \def\result{=>}% \def\textdegree{degrees}% % % We need to get rid of all macros, leaving only the arguments (if present). % Of course this is not nearly correct, but it is the best we can do for now. % makeinfo does not expand macros in the argument to @deffn, which ends up % writing an index entry, and texindex isn't prepared for an index sort entry % that starts with \. % % Since macro invocations are followed by braces, we can just redefine them % to take a single TeX argument. The case of a macro invocation that % goes to end-of-line is not handled. % \macrolist } \let\indexbackslash=0 %overridden during \printindex. \let\SETmarginindex=\relax % put index entries in margin (undocumented)? % Most index entries go through here, but \dosubind is the general case. % #1 is the index name, #2 is the entry text. \def\doind#1#2{\dosubind{#1}{#2}{}} % Workhorse for all \fooindexes. % #1 is name of index, #2 is stuff to put there, #3 is subentry -- % empty if called from \doind, as we usually are (the main exception % is with most defuns, which call us directly). % \def\dosubind#1#2#3{% \iflinks {% % Store the main index entry text (including the third arg). \toks0 = {#2}% % If third arg is present, precede it with a space. \def\thirdarg{#3}% \ifx\thirdarg\empty \else \toks0 = \expandafter{\the\toks0 \space #3}% \fi % \edef\writeto{\csname#1indfile\endcsname}% % \ifvmode \dosubindsanitize \else \dosubindwrite \fi }% \fi } % Write the entry in \toks0 to the index file: % \def\dosubindwrite{% % Put the index entry in the margin if desired. \ifx\SETmarginindex\relax\else \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% \fi % % Remember, we are within a group. \indexdummies % Must do this here, since \bf, etc expand at this stage \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now % so it will be output as is; and it will print as backslash. % % Process the index entry with all font commands turned off, to % get the string to sort by. {\indexnofonts \edef\temp{\the\toks0}% need full expansion \xdef\indexsorttmp{\temp}% }% % % Set up the complete index entry, with both the sort key and % the original text, including any font commands. We write % three arguments to \entry to the .?? file (four in the % subentry case), texindex reduces to two when writing the .??s % sorted result. \edef\temp{% \write\writeto{% \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}% }% \temp } % Take care of unwanted page breaks: % % If a skip is the last thing on the list now, preserve it % by backing up by \lastskip, doing the \write, then inserting % the skip again. Otherwise, the whatsit generated by the % \write will make \lastskip zero. The result is that sequences % like this: % @end defun % @tindex whatever % @defun ... % will have extra space inserted, because the \medbreak in the % start of the @defun won't see the skip inserted by the @end of % the previous defun. % % But don't do any of this if we're not in vertical mode. We % don't want to do a \vskip and prematurely end a paragraph. % % Avoid page breaks due to these extra skips, too. % % But wait, there is a catch there: % We'll have to check whether \lastskip is zero skip. \ifdim is not % sufficient for this purpose, as it ignores stretch and shrink parts % of the skip. The only way seems to be to check the textual % representation of the skip. % % The following is almost like \def\zeroskipmacro{0.0pt} except that % the ``p'' and ``t'' characters have catcode \other, not 11 (letter). % \edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} % % ..., ready, GO: % \def\dosubindsanitize{% % \lastskip and \lastpenalty cannot both be nonzero simultaneously. \skip0 = \lastskip \edef\lastskipmacro{\the\lastskip}% \count255 = \lastpenalty % % If \lastskip is nonzero, that means the last item was a % skip. And since a skip is discardable, that means this % -\skip0 glue we're inserting is preceded by a % non-discardable item, therefore it is not a potential % breakpoint, therefore no \nobreak needed. \ifx\lastskipmacro\zeroskipmacro \else \vskip-\skip0 \fi % \dosubindwrite % \ifx\lastskipmacro\zeroskipmacro % If \lastskip was zero, perhaps the last item was a penalty, and % perhaps it was >=10000, e.g., a \nobreak. In that case, we want % to re-insert the same penalty (values >10000 are used for various % signals); since we just inserted a non-discardable item, any % following glue (such as a \parskip) would be a breakpoint. For example: % % @deffn deffn-whatever % @vindex index-whatever % Description. % would allow a break between the index-whatever whatsit % and the "Description." paragraph. \ifnum\count255>9999 \penalty\count255 \fi \else % On the other hand, if we had a nonzero \lastskip, % this make-up glue would be preceded by a non-discardable item % (the whatsit from the \write), so we must insert a \nobreak. \nobreak\vskip\skip0 \fi } % The index entry written in the file actually looks like % \entry {sortstring}{page}{topic} % or % \entry {sortstring}{page}{topic}{subtopic} % The texindex program reads in these files and writes files % containing these kinds of lines: % \initial {c} % before the first topic whose initial is c % \entry {topic}{pagelist} % for a topic that is used without subtopics % \primary {topic} % for the beginning of a topic that is used with subtopics % \secondary {subtopic}{pagelist} % for each subtopic. % Define the user-accessible indexing commands % @findex, @vindex, @kindex, @cindex. \def\findex {\fnindex} \def\kindex {\kyindex} \def\cindex {\cpindex} \def\vindex {\vrindex} \def\tindex {\tpindex} \def\pindex {\pgindex} \def\cindexsub {\begingroup\obeylines\cindexsub} {\obeylines % \gdef\cindexsub "#1" #2^^M{\endgroup % \dosubind{cp}{#2}{#1}}} % Define the macros used in formatting output of the sorted index material. % @printindex causes a particular index (the ??s file) to get printed. % It does not print any chapter heading (usually an @unnumbered). % \parseargdef\printindex{\begingroup \dobreak \chapheadingskip{10000}% % \smallfonts \rm \tolerance = 9500 \everypar = {}% don't want the \kern\-parindent from indentation suppression. % % See if the index file exists and is nonempty. % Change catcode of @ here so that if the index file contains % \initial {@} % as its first line, TeX doesn't complain about mismatched braces % (because it thinks @} is a control sequence). \catcode`\@ = 11 \openin 1 \jobname.#1s \ifeof 1 % \enddoublecolumns gets confused if there is no text in the index, % and it loses the chapter title and the aux file entries for the % index. The easiest way to prevent this problem is to make sure % there is some text. \putwordIndexNonexistent \else % % If the index file exists but is empty, then \openin leaves \ifeof % false. We have to make TeX try to read something from the file, so % it can discover if there is anything in it. \read 1 to \temp \ifeof 1 \putwordIndexIsEmpty \else % Index files are almost Texinfo source, but we use \ as the escape % character. It would be better to use @, but that's too big a change % to make right now. \def\indexbackslash{\backslashcurfont}% \catcode`\\ = 0 \escapechar = `\\ \begindoublecolumns \input \jobname.#1s \enddoublecolumns \fi \fi \closein 1 \endgroup} % These macros are used by the sorted index file itself. % Change them to control the appearance of the index. \def\initial#1{{% % Some minor font changes for the special characters. \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt % % Remove any glue we may have, we'll be inserting our own. \removelastskip % % We like breaks before the index initials, so insert a bonus. \nobreak \vskip 0pt plus 3\baselineskip \penalty 0 \vskip 0pt plus -3\baselineskip % % Typeset the initial. Making this add up to a whole number of % baselineskips increases the chance of the dots lining up from column % to column. It still won't often be perfect, because of the stretch % we need before each entry, but it's better. % % No shrink because it confuses \balancecolumns. \vskip 1.67\baselineskip plus .5\baselineskip \leftline{\secbf #1}% % Do our best not to break after the initial. \nobreak \vskip .33\baselineskip plus .1\baselineskip }} % \entry typesets a paragraph consisting of the text (#1), dot leaders, and % then page number (#2) flushed to the right margin. It is used for index % and table of contents entries. The paragraph is indented by \leftskip. % % A straightforward implementation would start like this: % \def\entry#1#2{... % But this frozes the catcodes in the argument, and can cause problems to % @code, which sets - active. This problem was fixed by a kludge--- % ``-'' was active throughout whole index, but this isn't really right. % % The right solution is to prevent \entry from swallowing the whole text. % --kasal, 21nov03 \def\entry{% \begingroup % % Start a new paragraph if necessary, so our assignments below can't % affect previous text. \par % % Do not fill out the last line with white space. \parfillskip = 0in % % No extra space above this paragraph. \parskip = 0in % % Do not prefer a separate line ending with a hyphen to fewer lines. \finalhyphendemerits = 0 % % \hangindent is only relevant when the entry text and page number % don't both fit on one line. In that case, bob suggests starting the % dots pretty far over on the line. Unfortunately, a large % indentation looks wrong when the entry text itself is broken across % lines. So we use a small indentation and put up with long leaders. % % \hangafter is reset to 1 (which is the value we want) at the start % of each paragraph, so we need not do anything with that. \hangindent = 2em % % When the entry text needs to be broken, just fill out the first line % with blank space. \rightskip = 0pt plus1fil % % A bit of stretch before each entry for the benefit of balancing % columns. \vskip 0pt plus1pt % % Swallow the left brace of the text (first parameter): \afterassignment\doentry \let\temp = } \def\doentry{% \bgroup % Instead of the swallowed brace. \noindent \aftergroup\finishentry % And now comes the text of the entry. } \def\finishentry#1{% % #1 is the page number. % % The following is kludged to not output a line of dots in the index if % there are no page numbers. The next person who breaks this will be % cursed by a Unix daemon. \def\tempa{{\rm }}% \def\tempb{#1}% \edef\tempc{\tempa}% \edef\tempd{\tempb}% \ifx\tempc\tempd \ % \else % % If we must, put the page number on a line of its own, and fill out % this line with blank space. (The \hfil is overwhelmed with the % fill leaders glue in \indexdotfill if the page number does fit.) \hfil\penalty50 \null\nobreak\indexdotfill % Have leaders before the page number. % % The `\ ' here is removed by the implicit \unskip that TeX does as % part of (the primitive) \par. Without it, a spurious underfull % \hbox ensues. \ifpdf \pdfgettoks#1.% \ \the\toksA \else \ #1% \fi \fi \par \endgroup } % Like plain.tex's \dotfill, except uses up at least 1 em. \def\indexdotfill{\cleaders \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill} \def\primary #1{\line{#1\hfil}} \newskip\secondaryindent \secondaryindent=0.5cm \def\secondary#1#2{{% \parfillskip=0in \parskip=0in \hangindent=1in \hangafter=1 \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill \ifpdf \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. \else #2 \fi \par }} % Define two-column mode, which we use to typeset indexes. % Adapted from the TeXbook, page 416, which is to say, % the manmac.tex format used to print the TeXbook itself. \catcode`\@=11 \newbox\partialpage \newdimen\doublecolumnhsize \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns % Grab any single-column material above us. \output = {% % % Here is a possibility not foreseen in manmac: if we accumulate a % whole lot of material, we might end up calling this \output % routine twice in a row (see the doublecol-lose test, which is % essentially a couple of indexes with @setchapternewpage off). In % that case we just ship out what is in \partialpage with the normal % output routine. Generally, \partialpage will be empty when this % runs and this will be a no-op. See the indexspread.tex test case. \ifvoid\partialpage \else \onepageout{\pagecontents\partialpage}% \fi % \global\setbox\partialpage = \vbox{% % Unvbox the main output page. \unvbox\PAGE \kern-\topskip \kern\baselineskip }% }% \eject % run that output routine to set \partialpage % % Use the double-column output routine for subsequent pages. \output = {\doublecolumnout}% % % Change the page size parameters. We could do this once outside this % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 % format, but then we repeat the same computation. Repeating a couple % of assignments once per index is clearly meaningless for the % execution time, so we may as well do it in one place. % % First we halve the line length, less a little for the gutter between % the columns. We compute the gutter based on the line length, so it % changes automatically with the paper format. The magic constant % below is chosen so that the gutter has the same value (well, +-<1pt) % as it did when we hard-coded it. % % We put the result in a separate register, \doublecolumhsize, so we % can restore it in \pagesofar, after \hsize itself has (potentially) % been clobbered. % \doublecolumnhsize = \hsize \advance\doublecolumnhsize by -.04154\hsize \divide\doublecolumnhsize by 2 \hsize = \doublecolumnhsize % % Double the \vsize as well. (We don't need a separate register here, % since nobody clobbers \vsize.) \vsize = 2\vsize } % The double-column output routine for all double-column pages except % the last. % \def\doublecolumnout{% \splittopskip=\topskip \splitmaxdepth=\maxdepth % Get the available space for the double columns -- the normal % (undoubled) page height minus any material left over from the % previous page. \dimen@ = \vsize \divide\dimen@ by 2 \advance\dimen@ by -\ht\partialpage % % box0 will be the left-hand column, box2 the right. \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ \onepageout\pagesofar \unvbox255 \penalty\outputpenalty } % % Re-output the contents of the output page -- any previous material, % followed by the two boxes we just split, in box0 and box2. \def\pagesofar{% \unvbox\partialpage % \hsize = \doublecolumnhsize \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}% } % % All done with double columns. \def\enddoublecolumns{% \output = {% % Split the last of the double-column material. Leave it on the % current page, no automatic page break. \balancecolumns % % If we end up splitting too much material for the current page, % though, there will be another page break right after this \output % invocation ends. Having called \balancecolumns once, we do not % want to call it again. Therefore, reset \output to its normal % definition right away. (We hope \balancecolumns will never be % called on to balance too much material, but if it is, this makes % the output somewhat more palatable.) \global\output = {\onepageout{\pagecontents\PAGE}}% }% \eject \endgroup % started in \begindoublecolumns % % \pagegoal was set to the doubled \vsize above, since we restarted % the current page. We're now back to normal single-column % typesetting, so reset \pagegoal to the normal \vsize (after the % \endgroup where \vsize got restored). \pagegoal = \vsize } % % Called at the end of the double column material. \def\balancecolumns{% \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. \dimen@ = \ht0 \advance\dimen@ by \topskip \advance\dimen@ by-\baselineskip \divide\dimen@ by 2 % target to split to %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% \splittopskip = \topskip % Loop until we get a decent breakpoint. {% \vbadness = 10000 \loop \global\setbox3 = \copy0 \global\setbox1 = \vsplit3 to \dimen@ \ifdim\ht3>\dimen@ \global\advance\dimen@ by 1pt \repeat }% %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% \setbox0=\vbox to\dimen@{\unvbox1}% \setbox2=\vbox to\dimen@{\unvbox3}% % \pagesofar } \catcode`\@ = \other \message{sectioning,} % Chapters, sections, etc. % \unnumberedno is an oxymoron, of course. But we count the unnumbered % sections so that we can refer to them unambiguously in the pdf % outlines by their "section number". We avoid collisions with chapter % numbers by starting them at 10000. (If a document ever has 10000 % chapters, we're in trouble anyway, I'm sure.) \newcount\unnumberedno \unnumberedno = 10000 \newcount\chapno \newcount\secno \secno=0 \newcount\subsecno \subsecno=0 \newcount\subsubsecno \subsubsecno=0 % This counter is funny since it counts through charcodes of letters A, B, ... \newcount\appendixno \appendixno = `\@ % % \def\appendixletter{\char\the\appendixno} % We do the following ugly conditional instead of the above simple % construct for the sake of pdftex, which needs the actual % letter in the expansion, not just typeset. % \def\appendixletter{% \ifnum\appendixno=`A A% \else\ifnum\appendixno=`B B% \else\ifnum\appendixno=`C C% \else\ifnum\appendixno=`D D% \else\ifnum\appendixno=`E E% \else\ifnum\appendixno=`F F% \else\ifnum\appendixno=`G G% \else\ifnum\appendixno=`H H% \else\ifnum\appendixno=`I I% \else\ifnum\appendixno=`J J% \else\ifnum\appendixno=`K K% \else\ifnum\appendixno=`L L% \else\ifnum\appendixno=`M M% \else\ifnum\appendixno=`N N% \else\ifnum\appendixno=`O O% \else\ifnum\appendixno=`P P% \else\ifnum\appendixno=`Q Q% \else\ifnum\appendixno=`R R% \else\ifnum\appendixno=`S S% \else\ifnum\appendixno=`T T% \else\ifnum\appendixno=`U U% \else\ifnum\appendixno=`V V% \else\ifnum\appendixno=`W W% \else\ifnum\appendixno=`X X% \else\ifnum\appendixno=`Y Y% \else\ifnum\appendixno=`Z Z% % The \the is necessary, despite appearances, because \appendixletter is % expanded while writing the .toc file. \char\appendixno is not % expandable, thus it is written literally, thus all appendixes come out % with the same letter (or @) in the toc without it. \else\char\the\appendixno \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} % Each @chapter defines this as the name of the chapter. % page headings and footings can use it. @section does likewise. % However, they are not reliable, because we don't use marks. \def\thischapter{} \def\thissection{} \newcount\absseclevel % used to calculate proper heading level \newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count % @raisesections: treat @section as chapter, @subsection as section, etc. \def\raisesections{\global\advance\secbase by -1} \let\up=\raisesections % original BFox name % @lowersections: treat @chapter as section, @section as subsection, etc. \def\lowersections{\global\advance\secbase by 1} \let\down=\lowersections % original BFox name % we only have subsub. \chardef\maxseclevel = 3 % % A numbered section within an unnumbered changes to unnumbered too. % To achive this, remember the "biggest" unnum. sec. we are currently in: \chardef\unmlevel = \maxseclevel % % Trace whether the current chapter is an appendix or not: % \chapheadtype is "N" or "A", unnumbered chapters are ignored. \def\chapheadtype{N} % Choose a heading macro % #1 is heading type % #2 is heading level % #3 is text for heading \def\genhead#1#2#3{% % Compute the abs. sec. level: \absseclevel=#2 \advance\absseclevel by \secbase % Make sure \absseclevel doesn't fall outside the range: \ifnum \absseclevel < 0 \absseclevel = 0 \else \ifnum \absseclevel > 3 \absseclevel = 3 \fi \fi % The heading type: \def\headtype{#1}% \if \headtype U% \ifnum \absseclevel < \unmlevel \chardef\unmlevel = \absseclevel \fi \else % Check for appendix sections: \ifnum \absseclevel = 0 \edef\chapheadtype{\headtype}% \else \if \headtype A\if \chapheadtype N% \errmessage{@appendix... within a non-appendix chapter}% \fi\fi \fi % Check for numbered within unnumbered: \ifnum \absseclevel > \unmlevel \def\headtype{U}% \else \chardef\unmlevel = 3 \fi \fi % Now print the heading: \if \headtype U% \ifcase\absseclevel \unnumberedzzz{#3}% \or \unnumberedseczzz{#3}% \or \unnumberedsubseczzz{#3}% \or \unnumberedsubsubseczzz{#3}% \fi \else \if \headtype A% \ifcase\absseclevel \appendixzzz{#3}% \or \appendixsectionzzz{#3}% \or \appendixsubseczzz{#3}% \or \appendixsubsubseczzz{#3}% \fi \else \ifcase\absseclevel \chapterzzz{#3}% \or \seczzz{#3}% \or \numberedsubseczzz{#3}% \or \numberedsubsubseczzz{#3}% \fi \fi \fi \suppressfirstparagraphindent } % an interface: \def\numhead{\genhead N} \def\apphead{\genhead A} \def\unnmhead{\genhead U} % @chapter, @appendix, @unnumbered. Increment top-level counter, reset % all lower-level sectioning counters to zero. % % Also set \chaplevelprefix, which we prepend to @float sequence numbers % (e.g., figures), q.v. By default (before any chapter), that is empty. \let\chaplevelprefix = \empty % \outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz \def\chapterzzz#1{% % section resetting is \global in case the chapter is in a group, such % as an @include file. \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\chapno by 1 % % Used for \float. \gdef\chaplevelprefix{\the\chapno.}% \resetallfloatnos % \message{\putwordChapter\space \the\chapno}% % % Write the actual heading. \chapmacro{#1}{Ynumbered}{\the\chapno}% % % So @section and the like are numbered underneath this chapter. \global\let\section = \numberedsec \global\let\subsection = \numberedsubsec \global\let\subsubsection = \numberedsubsubsec } \outer\parseargdef\appendix{\apphead0{#1}} % normally apphead0 calls appendixzzz \def\appendixzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\appendixno by 1 \gdef\chaplevelprefix{\appendixletter.}% \resetallfloatnos % \def\appendixnum{\putwordAppendix\space \appendixletter}% \message{\appendixnum}% % \chapmacro{#1}{Yappendix}{\appendixletter}% % \global\let\section = \appendixsec \global\let\subsection = \appendixsubsec \global\let\subsubsection = \appendixsubsubsec } \outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz \def\unnumberedzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\unnumberedno by 1 % % Since an unnumbered has no number, no prefix for figures. \global\let\chaplevelprefix = \empty \resetallfloatnos % % This used to be simply \message{#1}, but TeX fully expands the % argument to \message. Therefore, if #1 contained @-commands, TeX % expanded them. For example, in `@unnumbered The @cite{Book}', TeX % expanded @cite (which turns out to cause errors because \cite is meant % to be executed, not expanded). % % Anyway, we don't want the fully-expanded definition of @cite to appear % as a result of the \message, we just want `@cite' itself. We use % \the to achieve this: TeX expands \the only once, % simply yielding the contents of . (We also do this for % the toc entries.) \toks0 = {#1}% \message{(\the\toks0)}% % \chapmacro{#1}{Ynothing}{\the\unnumberedno}% % \global\let\section = \unnumberedsec \global\let\subsection = \unnumberedsubsec \global\let\subsubsection = \unnumberedsubsubsec } % @centerchap is like @unnumbered, but the heading is centered. \outer\parseargdef\centerchap{% % Well, we could do the following in a group, but that would break % an assumption that \chapmacro is called at the outermost level. % Thus we are safer this way: --kasal, 24feb04 \let\centerparametersmaybe = \centerparameters \unnmhead0{#1}% \let\centerparametersmaybe = \relax } % @top is like @unnumbered. \let\top\unnumbered % Sections. \outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz \def\seczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% } \outer\parseargdef\appendixsection{\apphead1{#1}} % normally calls appendixsectionzzz \def\appendixsectionzzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% } \let\appendixsec\appendixsection \outer\parseargdef\unnumberedsec{\unnmhead1{#1}} % normally calls unnumberedseczzz \def\unnumberedseczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% } % Subsections. \outer\parseargdef\numberedsubsec{\numhead2{#1}} % normally calls numberedsubseczzz \def\numberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% } \outer\parseargdef\appendixsubsec{\apphead2{#1}} % normally calls appendixsubseczzz \def\appendixsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno}% } \outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} %normally calls unnumberedsubseczzz \def\unnumberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno}% } % Subsubsections. \outer\parseargdef\numberedsubsubsec{\numhead3{#1}} % normally numberedsubsubseczzz \def\numberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynumbered}% {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% } \outer\parseargdef\appendixsubsubsec{\apphead3{#1}} % normally appendixsubsubseczzz \def\appendixsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% } \outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} %normally unnumberedsubsubseczzz \def\unnumberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% } % These macros control what the section commands do, according % to what kind of chapter we are in (ordinary, appendix, or unnumbered). % Define them by default for a numbered chapter. \let\section = \numberedsec \let\subsection = \numberedsubsec \let\subsubsection = \numberedsubsubsec % Define @majorheading, @heading and @subheading % NOTE on use of \vbox for chapter headings, section headings, and such: % 1) We use \vbox rather than the earlier \line to permit % overlong headings to fold. % 2) \hyphenpenalty is set to 10000 because hyphenation in a % heading is obnoxious; this forbids it. % 3) Likewise, headings look best if no \parindent is used, and % if justification is not attempted. Hence \raggedright. \def\majorheading{% {\advance\chapheadingskip by 10pt \chapbreak }% \parsearg\chapheadingzzz } \def\chapheading{\chapbreak \parsearg\chapheadingzzz} \def\chapheadingzzz#1{% {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt\raggedright \rm #1\hfill}}% \bigskip \par\penalty 200\relax \suppressfirstparagraphindent } % @heading, @subheading, @subsubheading. \parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} % These macros generate a chapter, section, etc. heading only % (including whitespace, linebreaking, etc. around it), % given all the information in convenient, parsed form. %%% Args are the skip and penalty (usually negative) \def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} %%% Define plain chapter starts, and page on/off switching for it % Parameter controlling skip before chapter headings (if needed) \newskip\chapheadingskip \def\chapbreak{\dobreak \chapheadingskip {-4000}} \def\chappager{\par\vfill\supereject} \def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi} \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} \def\CHAPPAGoff{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chapbreak \global\let\pagealignmacro=\chappager} \def\CHAPPAGon{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chappager \global\let\pagealignmacro=\chappager \global\def\HEADINGSon{\HEADINGSsingle}} \def\CHAPPAGodd{% \global\let\contentsalignmacro = \chapoddpage \global\let\pchapsepmacro=\chapoddpage \global\let\pagealignmacro=\chapoddpage \global\def\HEADINGSon{\HEADINGSdouble}} \CHAPPAGon % Chapter opening. % % #1 is the text, #2 is the section type (Ynumbered, Ynothing, % Yappendix, Yomitfromtoc), #3 the chapter number. % % To test against our argument. \def\Ynothingkeyword{Ynothing} \def\Yomitfromtockeyword{Yomitfromtoc} \def\Yappendixkeyword{Yappendix} % \def\chapmacro#1#2#3{% \pchapsepmacro {% \chapfonts \rm % % Have to define \thissection before calling \donoderef, because the % xref code eventually uses it. On the other hand, it has to be called % after \pchapsepmacro, or the headline will change too soon. \gdef\thissection{#1}% \gdef\thischaptername{#1}% % % Only insert the separating space if we have a chapter/appendix % number, and don't print the unnumbered ``number''. \def\temptype{#2}% \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unnchap}% \gdef\thischapternum{}% \gdef\thischapter{#1}% \else\ifx\temptype\Yomitfromtockeyword \setbox0 = \hbox{}% contents like unnumbered, but no toc entry \def\toctype{omit}% \gdef\thischapternum{}% \gdef\thischapter{}% \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% \def\toctype{app}% \xdef\thischapternum{\appendixletter}% % We don't substitute the actual chapter name into \thischapter % because we don't want its macros evaluated now. And we don't % use \thissection because that changes with each section. % \xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}% \else \setbox0 = \hbox{#3\enspace}% \def\toctype{numchap}% \xdef\thischapternum{\the\chapno}% \xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}% \fi\fi\fi % % Write the toc entry for this chapter. Must come before the % \donoderef, because we include the current node name in the toc % entry, and \donoderef resets it to empty. \writetocentry{\toctype}{#1}{#3}% % % For pdftex, we have to write out the node definition (aka, make % the pdfdest) after any page break, but before the actual text has % been typeset. If the destination for the pdf outline is after the % text, then jumping from the outline may wind up with the text not % being visible, for instance under high magnification. \donoderef{#2}% % % Typeset the actual heading. \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright \hangindent=\wd0 \centerparametersmaybe \unhbox0 #1\par}% }% \nobreak\bigskip % no page break after a chapter title \nobreak } % @centerchap -- centered and unnumbered. \let\centerparametersmaybe = \relax \def\centerparameters{% \advance\rightskip by 3\rightskip \leftskip = \rightskip \parfillskip = 0pt } % I don't think this chapter style is supported any more, so I'm not % updating it with the new noderef stuff. We'll see. --karl, 11aug03. % \def\setchapterstyle #1 {\csname CHAPF#1\endcsname} % \def\unnchfopen #1{% \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt\raggedright \rm #1\hfill}}\bigskip \par\nobreak } \def\chfopen #1#2{\chapoddpage {\chapfonts \vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% \par\penalty 5000 % } \def\centerchfopen #1{% \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt \hfill {\rm #1}\hfill}}\bigskip \par\nobreak } \def\CHAPFopen{% \global\let\chapmacro=\chfopen \global\let\centerchapmacro=\centerchfopen} % Section titles. These macros combine the section number parts and % call the generic \sectionheading to do the printing. % \newskip\secheadingskip \def\secheadingbreak{\dobreak \secheadingskip{-1000}} % Subsection titles. \newskip\subsecheadingskip \def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} % Subsubsection titles. \def\subsubsecheadingskip{\subsecheadingskip} \def\subsubsecheadingbreak{\subsecheadingbreak} % Print any size, any type, section title. % % #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is % the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the % section number. % \def\sectionheading#1#2#3#4{% {% % Switch to the right set of fonts. \csname #2fonts\endcsname \rm % % Insert space above the heading. \csname #2headingbreak\endcsname % % Only insert the space after the number if we have a section number. \def\sectionlevel{#2}% \def\temptype{#3}% % \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unn}% \gdef\thissection{#1}% \else\ifx\temptype\Yomitfromtockeyword % for @headings -- no section number, don't include in toc, % and don't redefine \thissection. \setbox0 = \hbox{}% \def\toctype{omit}% \let\sectionlevel=\empty \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{#4\enspace}% \def\toctype{app}% \gdef\thissection{#1}% \else \setbox0 = \hbox{#4\enspace}% \def\toctype{num}% \gdef\thissection{#1}% \fi\fi\fi % % Write the toc entry (before \donoderef). See comments in \chapmacro. \writetocentry{\toctype\sectionlevel}{#1}{#4}% % % Write the node reference (= pdf destination for pdftex). % Again, see comments in \chapmacro. \donoderef{#3}% % % Interline glue will be inserted when the vbox is completed. % That glue will be a valid breakpoint for the page, since it'll be % preceded by a whatsit (usually from the \donoderef, or from the % \writetocentry if there was no node). We don't want to allow that % break, since then the whatsits could end up on page n while the % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000. \nobreak % % Output the actual section heading. \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright \hangindent=\wd0 % zero if no section number \unhbox0 #1}% }% % Add extra space after the heading -- half of whatever came above it. % Don't allow stretch, though. \kern .5 \csname #2headingskip\endcsname % % Do not let the kern be a potential breakpoint, as it would be if it % was followed by glue. \nobreak % % We'll almost certainly start a paragraph next, so don't let that % glue accumulate. (Not a breakpoint because it's preceded by a % discardable item.) \vskip-\parskip % % This is purely so the last item on the list is a known \penalty > % 10000. This is so \startdefun can avoid allowing breakpoints after % section headings. Otherwise, it would insert a valid breakpoint between: % % @section sec-whatever % @deffn def-whatever \penalty 10001 } \message{toc,} % Table of contents. \newwrite\tocfile % Write an entry to the toc file, opening it if necessary. % Called from @chapter, etc. % % Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} % We append the current node name (if any) and page number as additional % arguments for the \{chap,sec,...}entry macros which will eventually % read this. The node name is used in the pdf outlines as the % destination to jump to. % % We open the .toc file for writing here instead of at @setfilename (or % any other fixed time) so that @contents can be anywhere in the document. % But if #1 is `omit', then we don't do anything. This is used for the % table of contents chapter openings themselves. % \newif\iftocfileopened \def\omitkeyword{omit}% % \def\writetocentry#1#2#3{% \edef\writetoctype{#1}% \ifx\writetoctype\omitkeyword \else \iftocfileopened\else \immediate\openout\tocfile = \jobname.toc \global\tocfileopenedtrue \fi % \iflinks {\atdummies \edef\temp{% \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}% \temp }% \fi \fi % % Tell \shipout to create a pdf destination on each page, if we're % writing pdf. These are used in the table of contents. We can't % just write one on every page because the title pages are numbered % 1 and 2 (the page numbers aren't printed), and so are the first % two pages of the document. Thus, we'd have two destinations named % `1', and two named `2'. \ifpdf \global\pdfmakepagedesttrue \fi } % These characters do not print properly in the Computer Modern roman % fonts, so we must take special care. This is more or less redundant % with the Texinfo input format setup at the end of this file. % \def\activecatcodes{% \catcode`\"=\active \catcode`\$=\active \catcode`\<=\active \catcode`\>=\active \catcode`\\=\active \catcode`\^=\active \catcode`\_=\active \catcode`\|=\active \catcode`\~=\active } % Read the toc file, which is essentially Texinfo input. \def\readtocfile{% \setupdatafile \activecatcodes \input \jobname.toc } \newskip\contentsrightmargin \contentsrightmargin=1in \newcount\savepageno \newcount\lastnegativepageno \lastnegativepageno = -1 % Prepare to read what we've written to \tocfile. % \def\startcontents#1{% % If @setchapternewpage on, and @headings double, the contents should % start on an odd page, unlike chapters. Thus, we maintain % \contentsalignmacro in parallel with \pagealignmacro. % From: Torbjorn Granlund \contentsalignmacro \immediate\closeout\tocfile % % Don't need to put `Contents' or `Short Contents' in the headline. % It is abundantly clear what they are. \def\thischapter{}% \chapmacro{#1}{Yomitfromtoc}{}% % \savepageno = \pageno \begingroup % Set up to handle contents files properly. \raggedbottom % Worry more about breakpoints than the bottom. \advance\hsize by -\contentsrightmargin % Don't use the full line length. % % Roman numerals for page numbers. \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi } % Normal (long) toc. \def\contents{% \startcontents{\putwordTOC}% \openin 1 \jobname.toc \ifeof 1 \else \readtocfile \fi \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \ifeof 1 \else \pdfmakeoutlines \fi \closein 1 \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } % And just the chapters. \def\summarycontents{% \startcontents{\putwordShortTOC}% % \let\numchapentry = \shortchapentry \let\appentry = \shortchapentry \let\unnchapentry = \shortunnchapentry % We want a true roman here for the page numbers. \secfonts \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl \let\tt=\shortconttt \rm \hyphenpenalty = 10000 \advance\baselineskip by 1pt % Open it up a little. \def\numsecentry##1##2##3##4{} \let\appsecentry = \numsecentry \let\unnsecentry = \numsecentry \let\numsubsecentry = \numsecentry \let\appsubsecentry = \numsecentry \let\unnsubsecentry = \numsecentry \let\numsubsubsecentry = \numsecentry \let\appsubsubsecentry = \numsecentry \let\unnsubsubsecentry = \numsecentry \openin 1 \jobname.toc \ifeof 1 \else \readtocfile \fi \closein 1 \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } \let\shortcontents = \summarycontents % Typeset the label for a chapter or appendix for the short contents. % The arg is, e.g., `A' for an appendix, or `3' for a chapter. % \def\shortchaplabel#1{% % This space should be enough, since a single number is .5em, and the % widest letter (M) is 1em, at least in the Computer Modern fonts. % But use \hss just in case. % (This space doesn't include the extra space that gets added after % the label; that gets put in by \shortchapentry above.) % % We'd like to right-justify chapter numbers, but that looks strange % with appendix letters. And right-justifying numbers and % left-justifying letters looks strange when there is less than 10 % chapters. Have to read the whole toc once to know how many chapters % there are before deciding ... \hbox to 1em{#1\hss}% } % These macros generate individual entries in the table of contents. % The first argument is the chapter or section name. % The last argument is the page number. % The arguments in between are the chapter number, section number, ... % Chapters, in the main contents. \def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} % % Chapters, in the short toc. % See comments in \dochapentry re vbox and related settings. \def\shortchapentry#1#2#3#4{% \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% } % Appendices, in the main contents. % Need the word Appendix, and a fixed-size box. % \def\appendixbox#1{% % We use M since it's probably the widest letter. \setbox0 = \hbox{\putwordAppendix{} M}% \hbox to \wd0{\putwordAppendix{} #1\hss}} % \def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}} % Unnumbered chapters. \def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} \def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} % Sections. \def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} \let\appsecentry=\numsecentry \def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} % Subsections. \def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} \let\appsubsecentry=\numsubsecentry \def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} % And subsubsections. \def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} \let\appsubsubsecentry=\numsubsubsecentry \def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} % This parameter controls the indentation of the various levels. % Same as \defaultparindent. \newdimen\tocindent \tocindent = 15pt % Now for the actual typesetting. In all these, #1 is the text and #2 is the % page number. % % If the toc has to be broken over pages, we want it to be at chapters % if at all possible; hence the \penalty. \def\dochapentry#1#2{% \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip \begingroup \chapentryfonts \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup \nobreak\vskip .25\baselineskip plus.1\baselineskip } \def\dosecentry#1#2{\begingroup \secentryfonts \leftskip=\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsecentry#1#2{\begingroup \subsecentryfonts \leftskip=2\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsubsecentry#1#2{\begingroup \subsubsecentryfonts \leftskip=3\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} % We use the same \entry macro as for the index entries. \let\tocentry = \entry % Space between chapter (or whatever) number and the title. \def\labelspace{\hskip1em \relax} \def\dopageno#1{{\rm #1}} \def\doshortpageno#1{{\rm #1}} \def\chapentryfonts{\secfonts \rm} \def\secentryfonts{\textfonts} \def\subsecentryfonts{\textfonts} \def\subsubsecentryfonts{\textfonts} \message{environments,} % @foo ... @end foo. % @point{}, @result{}, @expansion{}, @print{}, @equiv{}. % % Since these characters are used in examples, it should be an even number of % \tt widths. Each \tt character is 1en, so two makes it 1em. % \def\point{$\star$} \def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} \def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}} \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} \def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}} % The @error{} command. % Adapted from the TeXbook's \boxit. % \newbox\errorbox % {\tentt \global\dimen0 = 3em}% Width of the box. \dimen2 = .55pt % Thickness of rules % The text. (`r' is open on the right, `e' somewhat less so on the left.) \setbox0 = \hbox{\kern-.75pt \reducedsf error\kern-1.5pt} % \setbox\errorbox=\hbox to \dimen0{\hfil \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. \advance\hsize by -2\dimen2 % Rules. \vbox{% \hrule height\dimen2 \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. \kern3pt\vrule width\dimen2}% Space to right. \hrule height\dimen2} \hfil} % \def\error{\leavevmode\lower.7ex\copy\errorbox} % @tex ... @end tex escapes into raw Tex temporarily. % One exception: @ is still an escape character, so that @end tex works. % But \@ or @@ will get a plain tex @ character. \envdef\tex{% \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie \catcode `\%=14 \catcode `\+=\other \catcode `\"=\other \catcode `\|=\other \catcode `\<=\other \catcode `\>=\other \escapechar=`\\ % \let\b=\ptexb \let\bullet=\ptexbullet \let\c=\ptexc \let\,=\ptexcomma \let\.=\ptexdot \let\dots=\ptexdots \let\equiv=\ptexequiv \let\!=\ptexexclam \let\i=\ptexi \let\indent=\ptexindent \let\noindent=\ptexnoindent \let\{=\ptexlbrace \let\+=\tabalign \let\}=\ptexrbrace \let\/=\ptexslash \let\*=\ptexstar \let\t=\ptext \let\frenchspacing=\plainfrenchspacing % \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% \def\@{@}% } % There is no need to define \Etex. % Define @lisp ... @end lisp. % @lisp environment forms a group so it can rebind things, % including the definition of @end lisp (which normally is erroneous). % Amount to narrow the margins by for @lisp. \newskip\lispnarrowing \lispnarrowing=0.4in % This is the definition that ^^M gets inside @lisp, @example, and other % such environments. \null is better than a space, since it doesn't % have any width. \def\lisppar{\null\endgraf} % This space is always present above and below environments. \newskip\envskipamount \envskipamount = 0pt % Make spacing and below environment symmetrical. We use \parskip here % to help in doing that, since in @example-like environments \parskip % is reset to zero; thus the \afterenvbreak inserts no space -- but the % start of the next paragraph will insert \parskip. % \def\aboveenvbreak{{% % =10000 instead of <10000 because of a special case in \itemzzz and % \sectionheading, q.v. \ifnum \lastpenalty=10000 \else \advance\envskipamount by \parskip \endgraf \ifdim\lastskip<\envskipamount \removelastskip % it's not a good place to break if the last penalty was \nobreak % or better ... \ifnum\lastpenalty<10000 \penalty-50 \fi \vskip\envskipamount \fi \fi }} \let\afterenvbreak = \aboveenvbreak % \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will % also clear it, so that its embedded environments do the narrowing again. \let\nonarrowing=\relax % @cartouche ... @end cartouche: draw rectangle w/rounded corners around % environment contents. \font\circle=lcircle10 \newdimen\circthick \newdimen\cartouter\newdimen\cartinner \newskip\normbskip\newskip\normpskip\newskip\normlskip \circthick=\fontdimen8\circle % \def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth \def\ctr{{\hskip 6pt\circle\char'010}} \def\cbl{{\circle\char'012\hskip -6pt}} \def\cbr{{\hskip 6pt\circle\char'011}} \def\carttop{\hbox to \cartouter{\hskip\lskip \ctl\leaders\hrule height\circthick\hfil\ctr \hskip\rskip}} \def\cartbot{\hbox to \cartouter{\hskip\lskip \cbl\leaders\hrule height\circthick\hfil\cbr \hskip\rskip}} % \newskip\lskip\newskip\rskip \envdef\cartouche{% \ifhmode\par\fi % can't be in the midst of a paragraph. \startsavinginserts \lskip=\leftskip \rskip=\rightskip \leftskip=0pt\rightskip=0pt % we want these *outside*. \cartinner=\hsize \advance\cartinner by-\lskip \advance\cartinner by-\rskip \cartouter=\hsize \advance\cartouter by 18.4pt % allow for 3pt kerns on either % side, and for 6pt waste from % each corner char, and rule thickness \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip % Flag to tell @lisp, etc., not to narrow margin. \let\nonarrowing = t% \vbox\bgroup \baselineskip=0pt\parskip=0pt\lineskip=0pt \carttop \hbox\bgroup \hskip\lskip \vrule\kern3pt \vbox\bgroup \kern3pt \hsize=\cartinner \baselineskip=\normbskip \lineskip=\normlskip \parskip=\normpskip \vskip -\parskip \comment % For explanation, see the end of \def\group. } \def\Ecartouche{% \ifhmode\par\fi \kern3pt \egroup \kern3pt\vrule \hskip\rskip \egroup \cartbot \egroup \checkinserts } % This macro is called at the beginning of all the @example variants, % inside a group. \def\nonfillstart{% \aboveenvbreak \hfuzz = 12pt % Don't be fussy \sepspaces % Make spaces be word-separators rather than space tokens. \let\par = \lisppar % don't ignore blank lines \obeylines % each line of input is a line of output \parskip = 0pt \parindent = 0pt \emergencystretch = 0pt % don't try to avoid overfull boxes \ifx\nonarrowing\relax \advance \leftskip by \lispnarrowing \exdentamount=\lispnarrowing \else \let\nonarrowing = \relax \fi \let\exdent=\nofillexdent } % If you want all examples etc. small: @set dispenvsize small. % If you want even small examples the full size: @set dispenvsize nosmall. % This affects the following displayed environments: % @example, @display, @format, @lisp % \def\smallword{small} \def\nosmallword{nosmall} \let\SETdispenvsize\relax \def\setnormaldispenv{% \ifx\SETdispenvsize\smallword \smallexamplefonts \rm \fi } \def\setsmalldispenv{% \ifx\SETdispenvsize\nosmallword \else \smallexamplefonts \rm \fi } % We often define two environments, @foo and @smallfoo. % Let's do it by one command: \def\makedispenv #1#2{ \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2} \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2} \expandafter\let\csname E#1\endcsname \afterenvbreak \expandafter\let\csname Esmall#1\endcsname \afterenvbreak } % Define two synonyms: \def\maketwodispenvs #1#2#3{ \makedispenv{#1}{#3} \makedispenv{#2}{#3} } % @lisp: indented, narrowed, typewriter font; @example: same as @lisp. % % @smallexample and @smalllisp: use smaller fonts. % Originally contributed by Pavel@xerox. % \maketwodispenvs {lisp}{example}{% \nonfillstart \tt\quoteexpand \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. \gobble % eat return } % @display/@smalldisplay: same as @lisp except keep current font. % \makedispenv {display}{% \nonfillstart \gobble } % @format/@smallformat: same as @display except don't narrow margins. % \makedispenv{format}{% \let\nonarrowing = t% \nonfillstart \gobble } % @flushleft: same as @format, but doesn't obey \SETdispenvsize. \envdef\flushleft{% \let\nonarrowing = t% \nonfillstart \gobble } \let\Eflushleft = \afterenvbreak % @flushright. % \envdef\flushright{% \let\nonarrowing = t% \nonfillstart \advance\leftskip by 0pt plus 1fill \gobble } \let\Eflushright = \afterenvbreak % @quotation does normal linebreaking (hence we can't use \nonfillstart) % and narrows the margins. We keep \parskip nonzero in general, since % we're doing normal filling. So, when using \aboveenvbreak and % \afterenvbreak, temporarily make \parskip 0. % \envdef\quotation{% {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip \parindent=0pt % % @cartouche defines \nonarrowing to inhibit narrowing at next level down. \ifx\nonarrowing\relax \advance\leftskip by \lispnarrowing \advance\rightskip by \lispnarrowing \exdentamount = \lispnarrowing \else \let\nonarrowing = \relax \fi \parsearg\quotationlabel } % We have retained a nonzero parskip for the environment, since we're % doing normal filling. % \def\Equotation{% \par \ifx\quotationauthor\undefined\else % indent a bit. \leftline{\kern 2\leftskip \sl ---\quotationauthor}% \fi {\parskip=0pt \afterenvbreak}% } % If we're given an argument, typeset it in bold with a colon after. \def\quotationlabel#1{% \def\temp{#1}% \ifx\temp\empty \else {\bf #1: }% \fi } % LaTeX-like @verbatim...@end verbatim and @verb{...} % If we want to allow any as delimiter, % we need the curly braces so that makeinfo sees the @verb command, eg: % `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org % % [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. % % [Knuth] p.344; only we need to do the other characters Texinfo sets % active too. Otherwise, they get lost as the first character on a % verbatim line. \def\dospecials{% \do\ \do\\\do\{\do\}\do\$\do\&% \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% \do\<\do\>\do\|\do\@\do+\do\"% } % % [Knuth] p. 380 \def\uncatcodespecials{% \def\do##1{\catcode`##1=\other}\dospecials} % % [Knuth] pp. 380,381,391 % Disable Spanish ligatures ?` and !` of \tt font \begingroup \catcode`\`=\active\gdef`{\relax\lq} \endgroup % % Setup for the @verb command. % % Eight spaces for a tab \begingroup \catcode`\^^I=\active \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} \endgroup % \def\setupverb{% \tt % easiest (and conventionally used) font for verbatim \def\par{\leavevmode\endgraf}% \catcode`\`=\active \tabeightspaces % Respect line breaks, % print special symbols as themselves, and % make each space count % must do in this order: \obeylines \uncatcodespecials \sepspaces } % Setup for the @verbatim environment % % Real tab expansion \newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount % \def\starttabbox{\setbox0=\hbox\bgroup} % Allow an option to not replace quotes with a regular directed right % quote/apostrophe (char 0x27), but instead use the undirected quote % from cmtt (char 0x0d). The undirected quote is ugly, so don't make it % the default, but it works for pasting with more pdf viewers (at least % evince), the lilypond developers report. xpdf does work with the % regular 0x27. % \def\codequoteright{% \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax '% \else \char'15 \fi } % % and a similar option for the left quote char vs. a grave accent. % Modern fonts display ASCII 0x60 as a grave accent, so some people like % the code environments to do likewise. % \def\codequoteleft{% \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax `% \else \char'22 \fi } % \begingroup \catcode`\^^I=\active \gdef\tabexpand{% \catcode`\^^I=\active \def^^I{\leavevmode\egroup \dimen0=\wd0 % the width so far, or since the previous tab \divide\dimen0 by\tabw \multiply\dimen0 by\tabw % compute previous multiple of \tabw \advance\dimen0 by\tabw % advance to next multiple of \tabw \wd0=\dimen0 \box0 \starttabbox }% } \catcode`\'=\active \gdef\rquoteexpand{\catcode\rquoteChar=\active \def'{\codequoteright}}% % \catcode`\`=\active \gdef\lquoteexpand{\catcode\lquoteChar=\active \def`{\codequoteleft}}% % \gdef\quoteexpand{\rquoteexpand \lquoteexpand}% \endgroup % start the verbatim environment. \def\setupverbatim{% \let\nonarrowing = t% \nonfillstart % Easiest (and conventionally used) font for verbatim \tt \def\par{\leavevmode\egroup\box0\endgraf}% \catcode`\`=\active \tabexpand \quoteexpand % Respect line breaks, % print special symbols as themselves, and % make each space count % must do in this order: \obeylines \uncatcodespecials \sepspaces \everypar{\starttabbox}% } % Do the @verb magic: verbatim text is quoted by unique % delimiter characters. Before first delimiter expect a % right brace, after last delimiter expect closing brace: % % \def\doverb'{'#1'}'{#1} % % [Knuth] p. 382; only eat outer {} \begingroup \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] \endgroup % \def\verb{\begingroup\setupverb\doverb} % % % Do the @verbatim magic: define the macro \doverbatim so that % the (first) argument ends when '@end verbatim' is reached, ie: % % \def\doverbatim#1@end verbatim{#1} % % For Texinfo it's a lot easier than for LaTeX, % because texinfo's \verbatim doesn't stop at '\end{verbatim}': % we need not redefine '\', '{' and '}'. % % Inspired by LaTeX's verbatim command set [latex.ltx] % \begingroup \catcode`\ =\active \obeylines % % ignore everything up to the first ^^M, that's the newline at the end % of the @verbatim input line itself. Otherwise we get an extra blank % line in the output. \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}% % We really want {...\end verbatim} in the body of the macro, but % without the active space; thus we have to use \xdef and \gobble. \endgroup % \envdef\verbatim{% \setupverbatim\doverbatim } \let\Everbatim = \afterenvbreak % @verbatiminclude FILE - insert text of file in verbatim environment. % \def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} % \def\doverbatiminclude#1{% {% \makevalueexpandable \setupverbatim \input #1 \afterenvbreak }% } % @copying ... @end copying. % Save the text away for @insertcopying later. % % We save the uninterpreted tokens, rather than creating a box. % Saving the text in a box would be much easier, but then all the % typesetting commands (@smallbook, font changes, etc.) have to be done % beforehand -- and a) we want @copying to be done first in the source % file; b) letting users define the frontmatter in as flexible order as % possible is very desirable. % \def\copying{\checkenv{}\begingroup\scanargctxt\docopying} \def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} % \def\insertcopying{% \begingroup \parindent = 0pt % paragraph indentation looks wrong on title page \scanexp\copyingtext \endgroup } \message{defuns,} % @defun etc. \newskip\defbodyindent \defbodyindent=.4in \newskip\defargsindent \defargsindent=50pt \newskip\deflastargmargin \deflastargmargin=18pt % Start the processing of @deffn: \def\startdefun{% \ifnum\lastpenalty<10000 \medbreak \else % If there are two @def commands in a row, we'll have a \nobreak, % which is there to keep the function description together with its % header. But if there's nothing but headers, we need to allow a % break somewhere. Check specifically for penalty 10002, inserted % by \defargscommonending, instead of 10000, since the sectioning % commands also insert a nobreak penalty, and we don't want to allow % a break between a section heading and a defun. % \ifnum\lastpenalty=10002 \penalty2000 \fi % % Similarly, after a section heading, do not allow a break. % But do insert the glue. \medskip % preceded by discardable penalty, so not a breakpoint \fi % \parindent=0in \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent } \def\dodefunx#1{% % First, check whether we are in the right environment: \checkenv#1% % % As above, allow line break if we have multiple x headers in a row. % It's not a great place, though. \ifnum\lastpenalty=10002 \penalty3000 \fi % % And now, it's time to reuse the body of the original defun: \expandafter\gobbledefun#1% } \def\gobbledefun#1\startdefun{} % \printdefunline \deffnheader{text} % \def\printdefunline#1#2{% \begingroup % call \deffnheader: #1#2 \endheader % common ending: \interlinepenalty = 10000 \advance\rightskip by 0pt plus 1fil \endgraf \nobreak\vskip -\parskip \penalty 10002 % signal to \startdefun and \dodefunx % Some of the @defun-type tags do not enable magic parentheses, % rendering the following check redundant. But we don't optimize. \checkparencounts \endgroup } \def\Edefun{\endgraf\medbreak} % \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; % the only thing remainnig is to define \deffnheader. % \def\makedefun#1{% \expandafter\let\csname E#1\endcsname = \Edefun \edef\temp{\noexpand\domakedefun \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% \temp } % \domakedefun \deffn \deffnx \deffnheader % % Define \deffn and \deffnx, without parameters. % \deffnheader has to be defined explicitly. % \def\domakedefun#1#2#3{% \envdef#1{% \startdefun \parseargusing\activeparens{\printdefunline#3}% }% \def#2{\dodefunx#1}% \def#3% } %%% Untyped functions: % @deffn category name args \makedefun{deffn}{\deffngeneral{}} % @deffn category class name args \makedefun{defop}#1 {\defopon{#1\ \putwordon}} % \defopon {category on}class name args \def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deffngeneral {subind}category name args % \def\deffngeneral#1#2 #3 #4\endheader{% % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. \dosubind{fn}{\code{#3}}{#1}% \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% } %%% Typed functions: % @deftypefn category type name args \makedefun{deftypefn}{\deftypefngeneral{}} % @deftypeop category class type name args \makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} % \deftypeopon {category on}class type name args \def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deftypefngeneral {subind}category type name args % \def\deftypefngeneral#1#2 #3 #4 #5\endheader{% \dosubind{fn}{\code{#4}}{#1}% \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } %%% Typed variables: % @deftypevr category type var args \makedefun{deftypevr}{\deftypecvgeneral{}} % @deftypecv category class type var args \makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} % \deftypecvof {category of}class type var args \def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } % \deftypecvgeneral {subind}category type var args % \def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% \dosubind{vr}{\code{#4}}{#1}% \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } %%% Untyped variables: % @defvr category var args \makedefun{defvr}#1 {\deftypevrheader{#1} {} } % @defcv category class var args \makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} % \defcvof {category of}class var args \def\defcvof#1#2 {\deftypecvof{#1}#2 {} } %%% Type: % @deftp category name args \makedefun{deftp}#1 #2 #3\endheader{% \doind{tp}{\code{#2}}% \defname{#1}{}{#2}\defunargs{#3\unskip}% } % Remaining @defun-like shortcuts: \makedefun{defun}{\deffnheader{\putwordDeffunc} } \makedefun{defmac}{\deffnheader{\putwordDefmac} } \makedefun{defspec}{\deffnheader{\putwordDefspec} } \makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } \makedefun{defvar}{\defvrheader{\putwordDefvar} } \makedefun{defopt}{\defvrheader{\putwordDefopt} } \makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } \makedefun{defmethod}{\defopon\putwordMethodon} \makedefun{deftypemethod}{\deftypeopon\putwordMethodon} \makedefun{defivar}{\defcvof\putwordInstanceVariableof} \makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} % \defname, which formats the name of the @def (not the args). % #1 is the category, such as "Function". % #2 is the return type, if any. % #3 is the function name. % % We are followed by (but not passed) the arguments, if any. % \def\defname#1#2#3{% % Get the values of \leftskip and \rightskip as they were outside the @def... \advance\leftskip by -\defbodyindent % % How we'll format the type name. Putting it in brackets helps % distinguish it from the body text that may end up on the next line % just below it. \def\temp{#1}% \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} % % Figure out line sizes for the paragraph shape. % The first line needs space for \box0; but if \rightskip is nonzero, % we need only space for the part of \box0 which exceeds it: \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip % The continuations: \dimen2=\hsize \advance\dimen2 by -\defargsindent % (plain.tex says that \dimen1 should be used only as global.) \parshape 2 0in \dimen0 \defargsindent \dimen2 % % Put the type name to the right margin. \noindent \hbox to 0pt{% \hfil\box0 \kern-\hsize % \hsize has to be shortened this way: \kern\leftskip % Intentionally do not respect \rightskip, since we need the space. }% % % Allow all lines to be underfull without complaint: \tolerance=10000 \hbadness=10000 \exdentamount=\defbodyindent {% % defun fonts. We use typewriter by default (used to be bold) because: % . we're printing identifiers, they should be in tt in principle. % . in languages with many accents, such as Czech or French, it's % common to leave accents off identifiers. The result looks ok in % tt, but exceedingly strange in rm. % . we don't want -- and --- to be treated as ligatures. % . this still does not fix the ?` and !` ligatures, but so far no % one has made identifiers using them :). \df \tt \def\temp{#2}% return value type \ifx\temp\empty\else \tclose{\temp} \fi #3% output function name }% {\rm\enskip}% hskip 0.5 em of \tenrm % \boldbrax % arguments will be output next, if any. } % Print arguments in slanted roman (not ttsl), inconsistently with using % tt for the name. This is because literal text is sometimes needed in % the argument list (groff manual), and ttsl and tt are not very % distinguishable. Prevent hyphenation at `-' chars. % \def\defunargs#1{% % use sl by default (not ttsl), % tt for the names. \df \sl \hyphenchar\font=0 % % On the other hand, if an argument has two dashes (for instance), we % want a way to get ttsl. Let's try @var for that. \let\var=\ttslanted #1% \sl\hyphenchar\font=45 } % We want ()&[] to print specially on the defun line. % \def\activeparens{% \catcode`\(=\active \catcode`\)=\active \catcode`\[=\active \catcode`\]=\active \catcode`\&=\active } % Make control sequences which act like normal parenthesis chars. \let\lparen = ( \let\rparen = ) % Be sure that we always have a definition for `(', etc. For example, % if the fn name has parens in it, \boldbrax will not be in effect yet, % so TeX would otherwise complain about undefined control sequence. { \activeparens \global\let(=\lparen \global\let)=\rparen \global\let[=\lbrack \global\let]=\rbrack \global\let& = \& \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} \gdef\magicamp{\let&=\amprm} } \newcount\parencount % If we encounter &foo, then turn on ()-hacking afterwards \newif\ifampseen \def\amprm#1 {\ampseentrue{\bf\ }} \def\parenfont{% \ifampseen % At the first level, print parens in roman, % otherwise use the default font. \ifnum \parencount=1 \rm \fi \else % The \sf parens (in \boldbrax) actually are a little bolder than % the contained text. This is especially needed for [ and ] . \sf \fi } \def\infirstlevel#1{% \ifampseen \ifnum\parencount=1 #1% \fi \fi } \def\bfafterword#1 {#1 \bf} \def\opnr{% \global\advance\parencount by 1 {\parenfont(}% \infirstlevel \bfafterword } \def\clnr{% {\parenfont)}% \infirstlevel \sl \global\advance\parencount by -1 } \newcount\brackcount \def\lbrb{% \global\advance\brackcount by 1 {\bf[}% } \def\rbrb{% {\bf]}% \global\advance\brackcount by -1 } \def\checkparencounts{% \ifnum\parencount=0 \else \badparencount \fi \ifnum\brackcount=0 \else \badbrackcount \fi } \def\badparencount{% \errmessage{Unbalanced parentheses in @def}% \global\parencount=0 } \def\badbrackcount{% \errmessage{Unbalanced square braces in @def}% \global\brackcount=0 } \message{macros,} % @macro. % To do this right we need a feature of e-TeX, \scantokens, % which we arrange to emulate with a temporary file in ordinary TeX. \ifx\eTeXversion\undefined \newwrite\macscribble \def\scantokens#1{% \toks0={#1}% \immediate\openout\macscribble=\jobname.tmp \immediate\write\macscribble{\the\toks0}% \immediate\closeout\macscribble \input \jobname.tmp } \fi \def\scanmacro#1{% \begingroup \newlinechar`\^^M \let\xeatspaces\eatspaces % Undo catcode changes of \startcontents and \doprintindex % When called from @insertcopying or (short)caption, we need active % backslash to get it printed correctly. Previously, we had % \catcode`\\=\other instead. We'll see whether a problem appears % with macro expansion. --kasal, 19aug04 \catcode`\@=0 \catcode`\\=\active \escapechar=`\@ % ... and \example \spaceisspace % % Append \endinput to make sure that TeX does not see the ending newline. % I've verified that it is necessary both for e-TeX and for ordinary TeX % --kasal, 29nov03 \scantokens{#1\endinput}% \endgroup } \def\scanexp#1{% \edef\temp{\noexpand\scanmacro{#1}}% \temp } \newcount\paramno % Count of parameters \newtoks\macname % Macro name \newif\ifrecursive % Is it recursive? % List of all defined macros in the form % \definedummyword\macro1\definedummyword\macro2... % Currently is also contains all @aliases; the list can be split % if there is a need. \def\macrolist{} % Add the macro to \macrolist \def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname} \def\addtomacrolistxxx#1{% \toks0 = \expandafter{\macrolist\definedummyword#1}% \xdef\macrolist{\the\toks0}% } % Utility routines. % This does \let #1 = #2, with \csnames; that is, % \let \csname#1\endcsname = \csname#2\endcsname % (except of course we have to play expansion games). % \def\cslet#1#2{% \expandafter\let \csname#1\expandafter\endcsname \csname#2\endcsname } % Trim leading and trailing spaces off a string. % Concepts from aro-bend problem 15 (see CTAN). {\catcode`\@=11 \gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} \gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} \gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} \def\unbrace#1{#1} \unbrace{\gdef\trim@@@ #1 } #2@{#1} } % Trim a single trailing ^^M off a string. {\catcode`\^^M=\other \catcode`\Q=3% \gdef\eatcr #1{\eatcra #1Q^^MQ}% \gdef\eatcra#1^^MQ{\eatcrb#1Q}% \gdef\eatcrb#1Q#2Q{#1}% } % Macro bodies are absorbed as an argument in a context where % all characters are catcode 10, 11 or 12, except \ which is active % (as in normal texinfo). It is necessary to change the definition of \. % It's necessary to have hard CRs when the macro is executed. This is % done by making ^^M (\endlinechar) catcode 12 when reading the macro % body, and then making it the \newlinechar in \scanmacro. \def\scanctxt{% \catcode`\"=\other \catcode`\+=\other \catcode`\<=\other \catcode`\>=\other \catcode`\@=\other \catcode`\^=\other \catcode`\_=\other \catcode`\|=\other \catcode`\~=\other } \def\scanargctxt{% \scanctxt \catcode`\\=\other \catcode`\^^M=\other } \def\macrobodyctxt{% \scanctxt \catcode`\{=\other \catcode`\}=\other \catcode`\^^M=\other \usembodybackslash } \def\macroargctxt{% \scanctxt \catcode`\\=\other } % \mbodybackslash is the definition of \ in @macro bodies. % It maps \foo\ => \csname macarg.foo\endcsname => #N % where N is the macro parameter number. % We define \csname macarg.\endcsname to be \realbackslash, so % \\ in macro replacement text gets you a backslash. {\catcode`@=0 @catcode`@\=@active @gdef@usembodybackslash{@let\=@mbodybackslash} @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} } \expandafter\def\csname macarg.\endcsname{\realbackslash} \def\macro{\recursivefalse\parsearg\macroxxx} \def\rmacro{\recursivetrue\parsearg\macroxxx} \def\macroxxx#1{% \getargs{#1}% now \macname is the macname and \argl the arglist \ifx\argl\empty % no arguments \paramno=0% \else \expandafter\parsemargdef \argl;% \fi \if1\csname ismacro.\the\macname\endcsname \message{Warning: redefining \the\macname}% \else \expandafter\ifx\csname \the\macname\endcsname \relax \else \errmessage{Macro name \the\macname\space already defined}\fi \global\cslet{macsave.\the\macname}{\the\macname}% \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% \addtomacrolist{\the\macname}% \fi \begingroup \macrobodyctxt \ifrecursive \expandafter\parsermacbody \else \expandafter\parsemacbody \fi} \parseargdef\unmacro{% \if1\csname ismacro.#1\endcsname \global\cslet{#1}{macsave.#1}% \global\expandafter\let \csname ismacro.#1\endcsname=0% % Remove the macro name from \macrolist: \begingroup \expandafter\let\csname#1\endcsname \relax \let\definedummyword\unmacrodo \xdef\macrolist{\macrolist}% \endgroup \else \errmessage{Macro #1 not defined}% \fi } % Called by \do from \dounmacro on each macro. The idea is to omit any % macro definitions that have been changed to \relax. % \def\unmacrodo#1{% \ifx #1\relax % remove this \else \noexpand\definedummyword \noexpand#1% \fi } % This makes use of the obscure feature that if the last token of a % is #, then the preceding argument is delimited by % an opening brace, and that opening brace is not consumed. \def\getargs#1{\getargsxxx#1{}} \def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} \def\getmacname #1 #2\relax{\macname={#1}} \def\getmacargs#1{\def\argl{#1}} % Parse the optional {params} list. Set up \paramno and \paramlist % so \defmacro knows what to do. Define \macarg.blah for each blah % in the params list, to be ##N where N is the position in that list. % That gets used by \mbodybackslash (above). % We need to get `macro parameter char #' into several definitions. % The technique used is stolen from LaTeX: let \hash be something % unexpandable, insert that wherever you need a #, and then redefine % it to # just before using the token list produced. % % The same technique is used to protect \eatspaces till just before % the macro is used. \def\parsemargdef#1;{\paramno=0\def\paramlist{}% \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,} \def\parsemargdefxxx#1,{% \if#1;\let\next=\relax \else \let\next=\parsemargdefxxx \advance\paramno by 1% \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname {\xeatspaces{\hash\the\paramno}}% \edef\paramlist{\paramlist\hash\the\paramno,}% \fi\next} % These two commands read recursive and nonrecursive macro bodies. % (They're different since rec and nonrec macros end differently.) \long\def\parsemacbody#1@end macro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% \long\def\parsermacbody#1@end rmacro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% % This defines the macro itself. There are six cases: recursive and % nonrecursive macros of zero, one, and many arguments. % Much magic with \expandafter here. % \xdef is used so that macro definitions will survive the file % they're defined in; @include reads the file inside a group. \def\defmacro{% \let\hash=##% convert placeholders to macro parameter chars \ifrecursive \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\scanmacro{\temp}}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup\noexpand\scanmacro{\temp}}% \else % many \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\csname\the\macname xx\endcsname}% \expandafter\xdef\csname\the\macname xx\endcsname##1{% \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{\egroup\noexpand\scanmacro{\temp}}% \fi \else \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \else % many \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \expandafter\noexpand\csname\the\macname xx\endcsname}% \expandafter\xdef\csname\the\macname xx\endcsname##1{% \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \fi \fi} \def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} % \braceorline decides whether the next nonwhitespace character is a % {. If so it reads up to the closing }, if not, it reads the whole % line. Whatever was read is then fed to the next control sequence % as an argument (by \parsebrace or \parsearg) \def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx} \def\braceorlinexxx{% \ifx\nchar\bgroup\else \expandafter\parsearg \fi \macnamexxx} % @alias. % We need some trickery to remove the optional spaces around the equal % sign. Just make them active and then expand them all to nothing. \def\alias{\parseargusing\obeyspaces\aliasxxx} \def\aliasxxx #1{\aliasyyy#1\relax} \def\aliasyyy #1=#2\relax{% {% \expandafter\let\obeyedspace=\empty \addtomacrolist{#1}% \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% }% \next } \message{cross references,} \newwrite\auxfile \newif\ifhavexrefs % True if xref values are known. \newif\ifwarnedxrefs % True if we warned once that they aren't known. % @inforef is relatively simple. \def\inforef #1{\inforefzzz #1,,,,**} \def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, node \samp{\ignorespaces#1{}}} % @node's only job in TeX is to define \lastnode, which is used in % cross-references. The @node line might or might not have commas, and % might or might not have spaces before the first comma, like: % @node foo , bar , ... % We don't want such trailing spaces in the node name. % \parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} % % also remove a trailing comma, in case of something like this: % @node Help-Cross, , , Cross-refs \def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} \def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}} \let\nwnode=\node \let\lastnode=\empty % Write a cross-reference definition for the current node. #1 is the % type (Ynumbered, Yappendix, Ynothing). % \def\donoderef#1{% \ifx\lastnode\empty\else \setref{\lastnode}{#1}% \global\let\lastnode=\empty \fi } % @anchor{NAME} -- define xref target at arbitrary point. % \newcount\savesfregister % \def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} \def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} \def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} % \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an % anchor), which consists of three parts: % 1) NAME-title - the current sectioning name taken from \thissection, % or the anchor name. % 2) NAME-snt - section number and type, passed as the SNT arg, or % empty for anchors. % 3) NAME-pg - the page number. % % This is called from \donoderef, \anchor, and \dofloat. In the case of % floats, there is an additional part, which is not written here: % 4) NAME-lof - the text as it should appear in a @listoffloats. % \def\setref#1#2{% \pdfmkdest{#1}% \iflinks {% \atdummies % preserve commands, but don't expand them \edef\writexrdef##1##2{% \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef ##1}{##2}}% these are parameters of \writexrdef }% \toks0 = \expandafter{\thissection}% \immediate \writexrdef{title}{\the\toks0 }% \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. \writexrdef{pg}{\folio}% will be written later, during \shipout }% \fi } % @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is % the node name, #2 the name of the Info cross-reference, #3 the printed % node name, #4 the name of the Info file, #5 the name of the printed % manual. All but the node name can be omitted. % \def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} \def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} \def\ref#1{\xrefX[#1,,,,,,,]} \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup \unsepspaces \def\printedmanual{\ignorespaces #5}% \def\printedrefname{\ignorespaces #3}% \setbox1=\hbox{\printedmanual\unskip}% \setbox0=\hbox{\printedrefname\unskip}% \ifdim \wd0 = 0pt % No printed node name was explicitly given. \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax % Use the node name inside the square brackets. \def\printedrefname{\ignorespaces #1}% \else % Use the actual chapter/section title appear inside % the square brackets. Use the real section title if we have it. \ifdim \wd1 > 0pt % It is in another manual, so we don't have it. \def\printedrefname{\ignorespaces #1}% \else \ifhavexrefs % We know the real title if we have the xref values. \def\printedrefname{\refx{#1-title}{}}% \else % Otherwise just copy the Info node name. \def\printedrefname{\ignorespaces #1}% \fi% \fi \fi \fi % % Make link in pdf output. \ifpdf \leavevmode \getfilename{#4}% {\turnoffactive % See comments at \activebackslashdouble. {\activebackslashdouble \xdef\pdfxrefdest{#1}% \backslashparens\pdfxrefdest}% % \ifnum\filenamelength>0 \startlink attr{/Border [0 0 0]}% goto file{\the\filename.pdf} name{\pdfxrefdest}% \else \startlink attr{/Border [0 0 0]}% goto name{\pdfmkpgn{\pdfxrefdest}}% \fi }% \linkcolor \fi % % Float references are printed completely differently: "Figure 1.2" % instead of "[somenode], p.3". We distinguish them by the % LABEL-title being set to a magic string. {% % Have to otherify everything special to allow the \csname to % include an _ in the xref name, etc. \indexnofonts \turnoffactive \expandafter\global\expandafter\let\expandafter\Xthisreftitle \csname XR#1-title\endcsname }% \iffloat\Xthisreftitle % If the user specified the print name (third arg) to the ref, % print it instead of our usual "Figure 1.2". \ifdim\wd0 = 0pt \refx{#1-snt}{}% \else \printedrefname \fi % % if the user also gave the printed manual name (fifth arg), append % "in MANUALNAME". \ifdim \wd1 > 0pt \space \putwordin{} \cite{\printedmanual}% \fi \else % node/anchor (non-float) references. % % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not % insert empty discretionaries after hyphens, which means that it will % not find a line break at a hyphen in a node names. Since some manuals % are best written with fairly long node names, containing hyphens, this % is a loss. Therefore, we give the text of the node name again, so it % is as if TeX is seeing it for the first time. \ifdim \wd1 > 0pt \putwordsection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}% \else % _ (for example) has to be the character _ for the purposes of the % control sequence corresponding to the node, but it has to expand % into the usual \leavevmode...\vrule stuff for purposes of % printing. So we \turnoffactive for the \refx-snt, back on for the % printing, back off for the \refx-pg. {\turnoffactive % Only output a following space if the -snt ref is nonempty; for % @unnumbered and @anchor, it won't be. \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi }% % output the `[mynode]' via a macro so it can be overridden. \xrefprintnodename\printedrefname % % But we always want a comma and a space: ,\space % % output the `page 3'. \turnoffactive \putwordpage\tie\refx{#1-pg}{}% \fi \fi \endlink \endgroup} % This macro is called from \xrefX for the `[nodename]' part of xref % output. It's a separate macro only so it can be changed more easily, % since square brackets don't work well in some documents. Particularly % one that Bob is working on :). % \def\xrefprintnodename#1{[#1]} % Things referred to by \setref. % \def\Ynothing{} \def\Yomitfromtoc{} \def\Ynumbered{% \ifnum\secno=0 \putwordChapter@tie \the\chapno \else \ifnum\subsecno=0 \putwordSection@tie \the\chapno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie \the\chapno.\the\secno.\the\subsecno \else \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } \def\Yappendix{% \ifnum\secno=0 \putwordAppendix@tie @char\the\appendixno{}% \else \ifnum\subsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno \else \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } % Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. % If its value is nonempty, SUFFIX is output afterward. % \def\refx#1#2{% {% \indexnofonts \otherbackslash \expandafter\global\expandafter\let\expandafter\thisrefX \csname XR#1\endcsname }% \ifx\thisrefX\relax % If not defined, say something at least. \angleleft un\-de\-fined\angleright \iflinks \ifhavexrefs \message{\linenumber Undefined cross reference `#1'.}% \else \ifwarnedxrefs\else \global\warnedxrefstrue \message{Cross reference values unknown; you must run TeX again.}% \fi \fi \fi \else % It's defined, so just use it. \thisrefX \fi #2% Output the suffix in any case. } % This is the macro invoked by entries in the aux file. Usually it's % just a \def (we prepend XR to the control sequence name to avoid % collisions). But if this is a float type, we have more work to do. % \def\xrdef#1#2{% \expandafter\gdef\csname XR#1\endcsname{#2}% remember this xref value. % % Was that xref control sequence that we just defined for a float? \expandafter\iffloat\csname XR#1\endcsname % it was a float, and we have the (safe) float type in \iffloattype. \expandafter\let\expandafter\floatlist \csname floatlist\iffloattype\endcsname % % Is this the first time we've seen this float type? \expandafter\ifx\floatlist\relax \toks0 = {\do}% yes, so just \do \else % had it before, so preserve previous elements in list. \toks0 = \expandafter{\floatlist\do}% \fi % % Remember this xref in the control sequence \floatlistFLOATTYPE, % for later use in \listoffloats. \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0{#1}}% \fi } % Read the last existing aux file, if any. No error if none exists. % \def\tryauxfile{% \openin 1 \jobname.aux \ifeof 1 \else \readdatafile{aux}% \global\havexrefstrue \fi \closein 1 } \def\setupdatafile{% \catcode`\^^@=\other \catcode`\^^A=\other \catcode`\^^B=\other \catcode`\^^C=\other \catcode`\^^D=\other \catcode`\^^E=\other \catcode`\^^F=\other \catcode`\^^G=\other \catcode`\^^H=\other \catcode`\^^K=\other \catcode`\^^L=\other \catcode`\^^N=\other \catcode`\^^P=\other \catcode`\^^Q=\other \catcode`\^^R=\other \catcode`\^^S=\other \catcode`\^^T=\other \catcode`\^^U=\other \catcode`\^^V=\other \catcode`\^^W=\other \catcode`\^^X=\other \catcode`\^^Z=\other \catcode`\^^[=\other \catcode`\^^\=\other \catcode`\^^]=\other \catcode`\^^^=\other \catcode`\^^_=\other % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. % in xref tags, i.e., node names. But since ^^e4 notation isn't % supported in the main text, it doesn't seem desirable. Furthermore, % that is not enough: for node names that actually contain a ^ % character, we would end up writing a line like this: 'xrdef {'hat % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first % argument, and \hat is not an expandable control sequence. It could % all be worked out, but why? Either we support ^^ or we don't. % % The other change necessary for this was to define \auxhat: % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter % and then to call \auxhat in \setq. % \catcode`\^=\other % % Special characters. Should be turned off anyway, but... \catcode`\~=\other \catcode`\[=\other \catcode`\]=\other \catcode`\"=\other \catcode`\_=\other \catcode`\|=\other \catcode`\<=\other \catcode`\>=\other \catcode`\$=\other \catcode`\#=\other \catcode`\&=\other \catcode`\%=\other \catcode`+=\other % avoid \+ for paranoia even though we've turned it off % % This is to support \ in node names and titles, since the \ % characters end up in a \csname. It's easier than % leaving it active and making its active definition an actual \ % character. What I don't understand is why it works in the *value* % of the xrdef. Seems like it should be a catcode12 \, and that % should not typeset properly. But it works, so I'm moving on for % now. --karl, 15jan04. \catcode`\\=\other % % Make the characters 128-255 be printing characters. {% \count1=128 \def\loop{% \catcode\count1=\other \advance\count1 by 1 \ifnum \count1<256 \loop \fi }% }% % % @ is our escape character in .aux files, and we need braces. \catcode`\{=1 \catcode`\}=2 \catcode`\@=0 } \def\readdatafile#1{% \begingroup \setupdatafile \input\jobname.#1 \endgroup} \message{insertions,} % including footnotes. \newcount \footnoteno % The trailing space in the following definition for supereject is % vital for proper filling; pages come out unaligned when you do a % pagealignmacro call if that space before the closing brace is % removed. (Generally, numeric constants should always be followed by a % space to prevent strange expansion errors.) \def\supereject{\par\penalty -20000\footnoteno =0 } % @footnotestyle is meaningful for info output only. \let\footnotestyle=\comment {\catcode `\@=11 % % Auto-number footnotes. Otherwise like plain. \gdef\footnote{% \let\indent=\ptexindent \let\noindent=\ptexnoindent \global\advance\footnoteno by \@ne \edef\thisfootno{$^{\the\footnoteno}$}% % % In case the footnote comes at the end of a sentence, preserve the % extra spacing after we do the footnote number. \let\@sf\empty \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi % % Remove inadvertent blank space before typesetting the footnote number. \unskip \thisfootno\@sf \dofootnote }% % Don't bother with the trickery in plain.tex to not require the % footnote text as a parameter. Our footnotes don't need to be so general. % % Oh yes, they do; otherwise, @ifset (and anything else that uses % \parseargline) fails inside footnotes because the tokens are fixed when % the footnote is read. --karl, 16nov96. % \gdef\dofootnote{% \insert\footins\bgroup % We want to typeset this text as a normal paragraph, even if the % footnote reference occurs in (for example) a display environment. % So reset some parameters. \hsize=\pagewidth \interlinepenalty\interfootnotelinepenalty \splittopskip\ht\strutbox % top baseline for broken footnotes \splitmaxdepth\dp\strutbox \floatingpenalty\@MM \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip \parindent\defaultparindent % \smallfonts \rm % % Because we use hanging indentation in footnotes, a @noindent appears % to exdent this text, so make it be a no-op. makeinfo does not use % hanging indentation so @noindent can still be needed within footnote % text after an @example or the like (not that this is good style). \let\noindent = \relax % % Hang the footnote text off the number. Use \everypar in case the % footnote extends for more than one paragraph. \everypar = {\hang}% \textindent{\thisfootno}% % % Don't crash into the line above the footnote text. Since this % expands into a box, it must come within the paragraph, lest it % provide a place where TeX can split the footnote. \footstrut \futurelet\next\fo@t } }%end \catcode `\@=11 % In case a @footnote appears in a vbox, save the footnote text and create % the real \insert just after the vbox finished. Otherwise, the insertion % would be lost. % Similarily, if a @footnote appears inside an alignment, save the footnote % text to a box and make the \insert when a row of the table is finished. % And the same can be done for other insert classes. --kasal, 16nov03. % Replace the \insert primitive by a cheating macro. % Deeper inside, just make sure that the saved insertions are not spilled % out prematurely. % \def\startsavinginserts{% \ifx \insert\ptexinsert \let\insert\saveinsert \else \let\checkinserts\relax \fi } % This \insert replacement works for both \insert\footins{foo} and % \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. % \def\saveinsert#1{% \edef\next{\noexpand\savetobox \makeSAVEname#1}% \afterassignment\next % swallow the left brace \let\temp = } \def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} \def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} \def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} \def\placesaveins#1{% \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname {\box#1}% } % eat @SAVE -- beware, all of them have catcode \other: { \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) \gdef\gobblesave @SAVE{} } % initialization: \def\newsaveins #1{% \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% \next } \def\newsaveinsX #1{% \csname newbox\endcsname #1% \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts \checksaveins #1}% } % initialize: \let\checkinserts\empty \newsaveins\footins \newsaveins\margin % @image. We use the macros from epsf.tex to support this. % If epsf.tex is not installed and @image is used, we complain. % % Check for and read epsf.tex up front. If we read it only at @image % time, we might be inside a group, and then its definitions would get % undone and the next image would fail. \openin 1 = epsf.tex \ifeof 1 \else % Do not bother showing banner with epsf.tex v2.7k (available in % doc/epsf.tex and on ctan). \def\epsfannounce{\toks0 = }% \input epsf.tex \fi \closein 1 % % We will only complain once about lack of epsf.tex. \newif\ifwarnednoepsf \newhelp\noepsfhelp{epsf.tex must be installed for images to work. It is also included in the Texinfo distribution, or you can get it from ftp://tug.org/tex/epsf.tex.} % \def\image#1{% \ifx\epsfbox\undefined \ifwarnednoepsf \else \errhelp = \noepsfhelp \errmessage{epsf.tex not found, images will be ignored}% \global\warnednoepsftrue \fi \else \imagexxx #1,,,,,\finish \fi } % % Arguments to @image: % #1 is (mandatory) image filename; we tack on .eps extension. % #2 is (optional) width, #3 is (optional) height. % #4 is (ignored optional) html alt text. % #5 is (ignored optional) extension. % #6 is just the usual extra ignored arg for parsing this stuff. \newif\ifimagevmode \def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup \catcode`\^^M = 5 % in case we're inside an example \normalturnoffactive % allow _ et al. in names % If the image is by itself, center it. \ifvmode \imagevmodetrue \nobreak\bigskip % Usually we'll have text after the image which will insert % \parskip glue, so insert it here too to equalize the space % above and below. \nobreak\vskip\parskip \nobreak \line\bgroup \fi % % Output the image. \ifpdf \dopdfimage{#1}{#2}{#3}% \else % \epsfbox itself resets \epsf?size at each figure. \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi \epsfbox{#1.eps}% \fi % \ifimagevmode \egroup \bigbreak \fi % space after the image \endgroup} % @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, % etc. We don't actually implement floating yet, we always include the % float "here". But it seemed the best name for the future. % \envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} % There may be a space before second and/or third parameter; delete it. \def\eatcommaspace#1, {#1,} % #1 is the optional FLOATTYPE, the text label for this float, typically % "Figure", "Table", "Example", etc. Can't contain commas. If omitted, % this float will not be numbered and cannot be referred to. % % #2 is the optional xref label. Also must be present for the float to % be referable. % % #3 is the optional positioning argument; for now, it is ignored. It % will somehow specify the positions allowed to float to (here, top, bottom). % % We keep a separate counter for each FLOATTYPE, which we reset at each % chapter-level command. \let\resetallfloatnos=\empty % \def\dofloat#1,#2,#3,#4\finish{% \let\thiscaption=\empty \let\thisshortcaption=\empty % % don't lose footnotes inside @float. % % BEWARE: when the floats start float, we have to issue warning whenever an % insert appears inside a float which could possibly float. --kasal, 26may04 % \startsavinginserts % % We can't be used inside a paragraph. \par % \vtop\bgroup \def\floattype{#1}% \def\floatlabel{#2}% \def\floatloc{#3}% we do nothing with this yet. % \ifx\floattype\empty \let\safefloattype=\empty \else {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% \fi % % If label is given but no type, we handle that as the empty type. \ifx\floatlabel\empty \else % We want each FLOATTYPE to be numbered separately (Figure 1, % Table 1, Figure 2, ...). (And if no label, no number.) % \expandafter\getfloatno\csname\safefloattype floatno\endcsname \global\advance\floatno by 1 % {% % This magic value for \thissection is output by \setref as the % XREFLABEL-title value. \xrefX uses it to distinguish float % labels (which have a completely different output format) from % node and anchor labels. And \xrdef uses it to construct the % lists of floats. % \edef\thissection{\floatmagic=\safefloattype}% \setref{\floatlabel}{Yfloat}% }% \fi % % start with \parskip glue, I guess. \vskip\parskip % % Don't suppress indentation if a float happens to start a section. \restorefirstparagraphindent } % we have these possibilities: % @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap % @float Foo,lbl & no caption: Foo 1.1 % @float Foo & @caption{Cap}: Foo: Cap % @float Foo & no caption: Foo % @float ,lbl & Caption{Cap}: 1.1: Cap % @float ,lbl & no caption: 1.1 % @float & @caption{Cap}: Cap % @float & no caption: % \def\Efloat{% \let\floatident = \empty % % In all cases, if we have a float type, it comes first. \ifx\floattype\empty \else \def\floatident{\floattype}\fi % % If we have an xref label, the number comes next. \ifx\floatlabel\empty \else \ifx\floattype\empty \else % if also had float type, need tie first. \appendtomacro\floatident{\tie}% \fi % the number. \appendtomacro\floatident{\chaplevelprefix\the\floatno}% \fi % % Start the printed caption with what we've constructed in % \floatident, but keep it separate; we need \floatident again. \let\captionline = \floatident % \ifx\thiscaption\empty \else \ifx\floatident\empty \else \appendtomacro\captionline{: }% had ident, so need a colon between \fi % % caption text. \appendtomacro\captionline{\scanexp\thiscaption}% \fi % % If we have anything to print, print it, with space before. % Eventually this needs to become an \insert. \ifx\captionline\empty \else \vskip.5\parskip \captionline % % Space below caption. \vskip\parskip \fi % % If have an xref label, write the list of floats info. Do this % after the caption, to avoid chance of it being a breakpoint. \ifx\floatlabel\empty \else % Write the text that goes in the lof to the aux file as % \floatlabel-lof. Besides \floatident, we include the short % caption if specified, else the full caption if specified, else nothing. {% \atdummies % % since we read the caption text in the macro world, where ^^M % is turned into a normal character, we have to scan it back, so % we don't write the literal three characters "^^M" into the aux file. \scanexp{% \xdef\noexpand\gtemp{% \ifx\thisshortcaption\empty \thiscaption \else \thisshortcaption \fi }% }% \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident \ifx\gtemp\empty \else : \gtemp \fi}}% }% \fi \egroup % end of \vtop % % place the captured inserts % % BEWARE: when the floats start floating, we have to issue warning % whenever an insert appears inside a float which could possibly % float. --kasal, 26may04 % \checkinserts } % Append the tokens #2 to the definition of macro #1, not expanding either. % \def\appendtomacro#1#2{% \expandafter\def\expandafter#1\expandafter{#1#2}% } % @caption, @shortcaption % \def\caption{\docaption\thiscaption} \def\shortcaption{\docaption\thisshortcaption} \def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} \def\defcaption#1#2{\egroup \def#1{#2}} % The parameter is the control sequence identifying the counter we are % going to use. Create it if it doesn't exist and assign it to \floatno. \def\getfloatno#1{% \ifx#1\relax % Haven't seen this figure type before. \csname newcount\endcsname #1% % % Remember to reset this floatno at the next chap. \expandafter\gdef\expandafter\resetallfloatnos \expandafter{\resetallfloatnos #1=0 }% \fi \let\floatno#1% } % \setref calls this to get the XREFLABEL-snt value. We want an @xref % to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we % first read the @float command. % \def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% % Magic string used for the XREFLABEL-title value, so \xrefX can % distinguish floats from other xref types. \def\floatmagic{!!float!!} % #1 is the control sequence we are passed; we expand into a conditional % which is true if #1 represents a float ref. That is, the magic % \thissection value which we \setref above. % \def\iffloat#1{\expandafter\doiffloat#1==\finish} % % #1 is (maybe) the \floatmagic string. If so, #2 will be the % (safe) float type for this float. We set \iffloattype to #2. % \def\doiffloat#1=#2=#3\finish{% \def\temp{#1}% \def\iffloattype{#2}% \ifx\temp\floatmagic } % @listoffloats FLOATTYPE - print a list of floats like a table of contents. % \parseargdef\listoffloats{% \def\floattype{#1}% floattype {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% % % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax \ifhavexrefs % if the user said @listoffloats foo but never @float foo. \message{\linenumber No `\safefloattype' floats to list.}% \fi \else \begingroup \leftskip=\tocindent % indent these entries like a toc \let\do=\listoffloatsdo \csname floatlist\safefloattype\endcsname \endgroup \fi } % This is called on each entry in a list of floats. We're passed the % xref label, in the form LABEL-title, which is how we save it in the % aux file. We strip off the -title and look up \XRLABEL-lof, which % has the text we're supposed to typeset here. % % Figures without xref labels will not be included in the list (since % they won't appear in the aux file). % \def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} \def\listoffloatsdoentry#1-title\finish{{% % Can't fully expand XR#1-lof because it can contain anything. Just % pass the control sequence. On the other hand, XR#1-pg is just the % page number, and we want to fully expand that so we can get a link % in pdf output. \toksA = \expandafter{\csname XR#1-lof\endcsname}% % % use the same \entry macro we use to generate the TOC and index. \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% \writeentry }} \message{localization,} % and i18n. % @documentlanguage is usually given very early, just after % @setfilename. If done too late, it may not override everything % properly. Single argument is the language abbreviation. % It would be nice if we could set up a hyphenation file here. % \parseargdef\documentlanguage{% \tex % read txi-??.tex file in plain TeX. % Read the file if it exists. \openin 1 txi-#1.tex \ifeof 1 \errhelp = \nolanghelp \errmessage{Cannot read language file txi-#1.tex}% \else \input txi-#1.tex \fi \closein 1 \endgroup } \newhelp\nolanghelp{The given language definition file cannot be found or is empty. Maybe you need to install it? In the current directory should work if nowhere else does.} % @documentencoding should change something in TeX eventually, most % likely, but for now just recognize it. \let\documentencoding = \comment % Page size parameters. % \newdimen\defaultparindent \defaultparindent = 15pt \chapheadingskip = 15pt plus 4pt minus 2pt \secheadingskip = 12pt plus 3pt minus 2pt \subsecheadingskip = 9pt plus 2pt minus 2pt % Prevent underfull vbox error messages. \vbadness = 10000 % Don't be so finicky about underfull hboxes, either. \hbadness = 2000 % Following George Bush, just get rid of widows and orphans. \widowpenalty=10000 \clubpenalty=10000 % Use TeX 3.0's \emergencystretch to help line breaking, but if we're % using an old version of TeX, don't do anything. We want the amount of % stretch added to depend on the line length, hence the dependence on % \hsize. We call this whenever the paper size is set. % \def\setemergencystretch{% \ifx\emergencystretch\thisisundefined % Allow us to assign to \emergencystretch anyway. \def\emergencystretch{\dimen0}% \else \emergencystretch = .15\hsize \fi } % Parameters in order: 1) textheight; 2) textwidth; % 3) voffset; 4) hoffset; 5) binding offset; 6) topskip; % 7) physical page height; 8) physical page width. % % We also call \setleading{\textleading}, so the caller should define % \textleading. The caller should also set \parskip. % \def\internalpagesizes#1#2#3#4#5#6#7#8{% \voffset = #3\relax \topskip = #6\relax \splittopskip = \topskip % \vsize = #1\relax \advance\vsize by \topskip \outervsize = \vsize \advance\outervsize by 2\topandbottommargin \pageheight = \vsize % \hsize = #2\relax \outerhsize = \hsize \advance\outerhsize by 0.5in \pagewidth = \hsize % \normaloffset = #4\relax \bindingoffset = #5\relax % \ifpdf \pdfpageheight #7\relax \pdfpagewidth #8\relax \fi % \setleading{\textleading} % \parindent = \defaultparindent \setemergencystretch } % @letterpaper (the default). \def\letterpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % If page is nothing but text, make it come out even. \internalpagesizes{46\baselineskip}{6in}% {\voffset}{.25in}% {\bindingoffset}{36pt}% {11in}{8.5in}% }} % Use @smallbook to reset parameters for 7x9.25 trim size. \def\smallbook{{\globaldefs = 1 \parskip = 2pt plus 1pt \textleading = 12pt % \internalpagesizes{7.5in}{5in}% {\voffset}{.25in}% {\bindingoffset}{16pt}% {9.25in}{7in}% % \lispnarrowing = 0.3in \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = .5cm }} % Use @smallerbook to reset parameters for 6x9 trim size. % (Just testing, parameters still in flux.) \def\smallerbook{{\globaldefs = 1 \parskip = 1.5pt plus 1pt \textleading = 12pt % \internalpagesizes{7.4in}{4.8in}% {-.2in}{-.4in}% {0pt}{14pt}% {9in}{6in}% % \lispnarrowing = 0.25in \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = .4cm }} % Use @afourpaper to print on European A4 paper. \def\afourpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % Double-side printing via postscript on Laserjet 4050 % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. % To change the settings for a different printer or situation, adjust % \normaloffset until the front-side and back-side texts align. Then % do the same for \bindingoffset. You can set these for testing in % your texinfo source file like this: % @tex % \global\normaloffset = -6mm % \global\bindingoffset = 10mm % @end tex \internalpagesizes{51\baselineskip}{160mm} {\voffset}{\hoffset}% {\bindingoffset}{44pt}% {297mm}{210mm}% % \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = 5mm }} % Use @afivepaper to print on European A5 paper. % From romildo@urano.iceb.ufop.br, 2 July 2000. % He also recommends making @example and @lisp be small. \def\afivepaper{{\globaldefs = 1 \parskip = 2pt plus 1pt minus 0.1pt \textleading = 12.5pt % \internalpagesizes{160mm}{120mm}% {\voffset}{\hoffset}% {\bindingoffset}{8pt}% {210mm}{148mm}% % \lispnarrowing = 0.2in \tolerance = 800 \hfuzz = 1.2pt \contentsrightmargin = 0pt \defbodyindent = 2mm \tableindent = 12mm }} % A specific text layout, 24x15cm overall, intended for A4 paper. \def\afourlatex{{\globaldefs = 1 \afourpaper \internalpagesizes{237mm}{150mm}% {\voffset}{4.6mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% % % Must explicitly reset to 0 because we call \afourpaper. \globaldefs = 0 }} % Use @afourwide to print on A4 paper in landscape format. \def\afourwide{{\globaldefs = 1 \afourpaper \internalpagesizes{241mm}{165mm}% {\voffset}{-2.95mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% \globaldefs = 0 }} % @pagesizes TEXTHEIGHT[,TEXTWIDTH] % Perhaps we should allow setting the margins, \topskip, \parskip, % and/or leading, also. Or perhaps we should compute them somehow. % \parseargdef\pagesizes{\pagesizesyyy #1,,\finish} \def\pagesizesyyy#1,#2,#3\finish{{% \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi \globaldefs = 1 % \parskip = 3pt plus 2pt minus 1pt \setleading{\textleading}% % \dimen0 = #1 \advance\dimen0 by \voffset % \dimen2 = \hsize \advance\dimen2 by \normaloffset % \internalpagesizes{#1}{\hsize}% {\voffset}{\normaloffset}% {\bindingoffset}{44pt}% {\dimen0}{\dimen2}% }} % Set default to letter. % \letterpaper \message{and turning on texinfo input format.} % Define macros to output various characters with catcode for normal text. \catcode`\"=\other \catcode`\~=\other \catcode`\^=\other \catcode`\_=\other \catcode`\|=\other \catcode`\<=\other \catcode`\>=\other \catcode`\+=\other \catcode`\$=\other \def\normaldoublequote{"} \def\normaltilde{~} \def\normalcaret{^} \def\normalunderscore{_} \def\normalverticalbar{|} \def\normalless{<} \def\normalgreater{>} \def\normalplus{+} \def\normaldollar{$}%$ font-lock fix % This macro is used to make a character print one way in \tt % (where it can probably be output as-is), and another way in other fonts, % where something hairier probably needs to be done. % % #1 is what to print if we are indeed using \tt; #2 is what to print % otherwise. Since all the Computer Modern typewriter fonts have zero % interword stretch (and shrink), and it is reasonable to expect all % typewriter fonts to have this, we can check that font parameter. % \def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} % Same as above, but check for italic font. Actually this also catches % non-italic slanted fonts since it is impossible to distinguish them from % italic fonts. But since this is only used by $ and it uses \sl anyway % this is not a problem. \def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} % Turn off all special characters except @ % (and those which the user can use as if they were ordinary). % Most of these we simply print from the \tt font, but for some, we can % use math or other variants that look better in normal text. \catcode`\"=\active \def\activedoublequote{{\tt\char34}} \let"=\activedoublequote \catcode`\~=\active \def~{{\tt\char126}} \chardef\hat=`\^ \catcode`\^=\active \def^{{\tt \hat}} \catcode`\_=\active \def_{\ifusingtt\normalunderscore\_} \let\realunder=_ % Subroutine for the previous macro. \def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } \catcode`\|=\active \def|{{\tt\char124}} \chardef \less=`\< \catcode`\<=\active \def<{{\tt \less}} \chardef \gtr=`\> \catcode`\>=\active \def>{{\tt \gtr}} \catcode`\+=\active \def+{{\tt \char 43}} \catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix % If a .fmt file is being used, characters that might appear in a file % name cannot be active until we have parsed the command line. % So turn them off again, and have \everyjob (or @setfilename) turn them on. % \otherifyactive is called near the end of this file. \def\otherifyactive{\catcode`+=\other \catcode`\_=\other} % Used sometimes to turn off (effectively) the active characters even after % parsing them. \def\turnoffactive{% \normalturnoffactive \otherbackslash } \catcode`\@=0 % \backslashcurfont outputs one backslash character in current font, % as in \char`\\. \global\chardef\backslashcurfont=`\\ \global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work % \realbackslash is an actual character `\' with catcode other, and % \doublebackslash is two of them (for the pdf outlines). {\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}} % In texinfo, backslash is an active character; it prints the backslash % in fixed width font. \catcode`\\=\active @def@normalbackslash{{@tt@backslashcurfont}} % On startup, @fixbackslash assigns: % @let \ = @normalbackslash % \rawbackslash defines an active \ to do \backslashcurfont. % \otherbackslash defines an active \ to be a literal `\' character with % catcode other. @gdef@rawbackslash{@let\=@backslashcurfont} @gdef@otherbackslash{@let\=@realbackslash} % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of % the literal character `\'. % @def@normalturnoffactive{% @let\=@normalbackslash @let"=@normaldoublequote @let~=@normaltilde @let^=@normalcaret @let_=@normalunderscore @let|=@normalverticalbar @let<=@normalless @let>=@normalgreater @let+=@normalplus @let$=@normaldollar %$ font-lock fix @unsepspaces } % Make _ and + \other characters, temporarily. % This is canceled by @fixbackslash. @otherifyactive % If a .fmt file is being used, we don't want the `\input texinfo' to show up. % That is what \eatinput is for; after that, the `\' should revert to printing % a backslash. % @gdef@eatinput input texinfo{@fixbackslash} @global@let\ = @eatinput % On the other hand, perhaps the file did not have a `\input texinfo'. Then % the first `\' in the file would cause an error. This macro tries to fix % that, assuming it is called before the first `\' could plausibly occur. % Also turn back on active characters that might appear in the input % file name, in case not using a pre-dumped format. % @gdef@fixbackslash{% @ifx\@eatinput @let\ = @normalbackslash @fi @catcode`+=@active @catcode`@_=@active } % Say @foo, not \foo, in error messages. @escapechar = `@@ % These look ok in all fonts, so just make them not special. @catcode`@& = @other @catcode`@# = @other @catcode`@% = @other @c Local variables: @c eval: (add-hook 'write-file-hooks 'time-stamp) @c page-delimiter: "^\\\\message" @c time-stamp-start: "def\\\\texinfoversion{" @c time-stamp-format: "%:y-%02m-%02d.%02H" @c time-stamp-end: "}" @c End: @c vim:sw=2: @ignore arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115 @end ignore texi2html-1.82/doc/version.texi0000644000175000017500000000014211264347115020356 0ustar flichtenheldflichtenheld@set UPDATED 3 November 2008 @set UPDATED-MONTH November 2008 @set EDITION 1.82 @set VERSION 1.82 texi2html-1.82/doc/Makefile.am0000644000175000017500000000345711264347115020046 0ustar flichtenheldflichtenheld# info_TEXINFOS = texi2html.texi #CLEANFILES = texi2html.ps texi2html.pdf texi2html.html \ # texi2html.ascii # texinfodata = $(datadir)/texinfo texinfohtmldir = $(texinfodata)/html texinfohtml_DATA = texi2html.html # use the script out of the distribution NOT # an old one which is installed on the client. TEXI2HTML = $(top_builddir)/texi2html man_MANS = texi2html.1 EXTRA_DIST = \ texi2html.1.in \ texi2html.html CLEANFILES = texi2html.1 #texi2html.html: texi2html.texi $(srcdir)/version.texi \ # $(TEXI2HTML) texi2html.html: texi2html.texi $(srcdir)/version.texi \ $(top_srcdir)/texi2html.pl $(top_srcdir)/texi2html.init \ $(top_srcdir)/MySimple.pm $(top_srcdir)/T2h_i18n.pm TEXINPUTS=$(srcdir)::$$TEXINPUTS T2H_HOME=$(top_srcdir) \ $(SHELL) $(top_srcdir)/missing-texi2html --run \ $(PERL) -x $(top_srcdir)/texi2html.pl -V $< $(TEXI2HTML): @(cd $(top_builddir) && make texi2html) texi2html.1: texi2html.1.in ../config.status @echo Generating $@... @sed -e "s/[@]PACKAGE_VERSION[@]/$(PACKAGE_VERSION)/" \ -e "s/[@]PACKAGE_DATE[@]/$(PACKAGE_DATE)/" \ -e "s#[@]sysconfdir[@]#$(sysconfdir)#" \ -e "s#[@]pkgdatadir[@]#$(pkgdatadir)#" $< >texi2html.tmp @mv texi2html.tmp $@ txt: texi2html.txt SUFFIXES = .txt check-local: $(TEXI2HTML) TEXINPUTS=$(srcdir)::$$TEXINPUTS \ $(TEXI2HTML) -V $(srcdir)/texi2html.texi # texinfo based targets automake neglects to include .texinfo.txt: $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ --no-headers -o $@ `test -f '$<' || echo '$(srcdir)/'`$< .txi.txt: $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ --no-headers -o $@ `test -f '$<' || echo '$(srcdir)/'`$< .texi.txt: $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ --no-headers -o $@ `test -f '$<' || echo '$(srcdir)/'`$< texi2html-1.82/texi2html.pl0000644000175000017500000177026611264347127017537 0ustar flichtenheldflichtenheld#! @PERL@ -- # perl 'di '; 'ig 00 '; #+############################################################################## # # texi2html: Program to transform Texinfo documents to HTML # # Copyright (C) 1999-2005 Patrice Dumas , # Derek Price , # Adrian Aichner , # & others. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 USA # #-############################################################################## # The man page for this program is included at the end of this file and can be # viewed using the command 'nroff -man texi2html'. # for POSIX::setlocale and File::Spec require 5.00405; # Perl pragma to restrict unsafe constructs use strict; # used in case of tests, to revert to "C" locale. use POSIX qw(setlocale LC_ALL LC_CTYPE); # used to obtain the name of the current working directory use Cwd; # Used to find the parent directory of this script. use File::Basename; # used to find a relative path back to the current working directory use File::Spec; # # According to # larry.jones@sdrc.com (Larry Jones) # this pragma is not present in perl5.004_02: # # Perl pragma to control optional warnings # use warnings; #++########################################################################## # # NOTE FOR DEBUGGING THIS SCRIPT: # You can run 'perl texi2html.pl' directly, provided you have the script # in the same directory with, or the environment variable T2H_HOME set to # the directory containing, the texi2html.init, T2h_i18n.pm, translations.pl, # l2h.init, & T2h_l2h.pm files # #--########################################################################## my $T2H_HOME = defined $ENV{T2H_HOME} ? $ENV{T2H_HOME} : dirname $0; if ($0 =~ /\.pl$/) { # Issue a warning in debugging mode if $T2H_HOME is set but isn't # accessible. if (!-e $T2H_HOME) { warn "T2H_HOME ($T2H_HOME) does not exist."; } elsif (!-d $T2H_HOME) { warn "T2H_HOME ($T2H_HOME) is not a directory."; } elsif (!-x $T2H_HOME) { warn "T2H_HOME ($T2H_HOME) is not accessible."; } } # CVS version: # $Id: texi2html.pl,v 1.255 2009/01/05 11:44:48 pertusus Exp $ # Homepage: my $T2H_HOMEPAGE = "http://www.nongnu.org/texi2html/"; # Authors (appears in comments): my $T2H_AUTHORS = < (original author) Karl Berry Olaf Bachmann and many others. Maintained by: Many creative people. Send bugs and suggestions to EOT # Version: set in configure.in my $THISVERSION = '@PACKAGE_VERSION@'; my $THISPROG = "texi2html $THISVERSION"; # program name and version #+++######################################################################## # # # Paths and file names # # # #---######################################################################## # set by configure, prefix for the sysconfdir and so on my $prefix = '@prefix@'; my $datarootdir = '@datarootdir@'; my $sysconfdir; my $pkgdatadir; my $datadir; # We need to eval as $prefix has to be expanded. However when we haven't # run configure @sysconfdir will be expanded as an array, thus we verify # whether configure was run or not if ('@sysconfdir@' ne '@' . 'sysconfdir@') { $sysconfdir = eval '"@sysconfdir@"'; } else { $sysconfdir = "/usr/local/etc"; } if ('@datadir@' ne '@' . 'datadir@') { $pkgdatadir = eval '"@datadir@/@PACKAGE@"'; $datadir = eval '"@datadir@"'; } else { $pkgdatadir = "/usr/local/share/texi2html"; $datadir = "/usr/local/share"; } my $i18n_dir = 'i18n'; # name of the directory containing the per language files my $conf_file_name = 'Config' ; my $texinfo_htmlxref = 'htmlxref.cnf'; my $target_prefix = "t_h"; # directories for texi2html init files my @texi2html_config_dirs = ('./'); push @texi2html_config_dirs, "$ENV{'HOME'}/.texi2html/" if (defined($ENV{'HOME'})); push @texi2html_config_dirs, "$sysconfdir/texi2html/" if (defined($sysconfdir)); push @texi2html_config_dirs, "$pkgdatadir" if (defined($pkgdatadir)); # directories for texinfo configuration files my @texinfo_config_dirs = ('./.texinfo/'); push @texinfo_config_dirs, "$ENV{'HOME'}/.texinfo/" if (defined($ENV{'HOME'})); push @texinfo_config_dirs, "$sysconfdir/texinfo/" if (defined($sysconfdir)); push @texinfo_config_dirs, "$datadir/texinfo/" if (defined($datadir)); #+++######################################################################## # # # Constants # # # #---######################################################################## my $DEBUG_MENU = 1; my $DEBUG_INDEX = 2; my $DEBUG_TEXI = 4; my $DEBUG_MACROS = 8; my $DEBUG_FORMATS = 16; my $DEBUG_ELEMENTS = 32; my $DEBUG_USER = 64; my $DEBUG_L2H = 128; my $ERROR = "***"; # prefix for errors my $WARN = "**"; # prefix for warnings my $VARRE = '[\w\-]+'; # RE for a variable name my $NODERE = '[^:]+'; # RE for node names my $MAX_LEVEL = 4; my $MIN_LEVEL = 1; #+++########################################################################### # # # Initialization # # Some declarations, some functions that are GPL and therefore cannot be in # # texi2html.init, some functions that are not to be customized. # # Pasted content of File $(srcdir)/texi2html.init: Default initializations # # # #---########################################################################### { package Texi2HTML::Config; sub load($) { my $file = shift; eval { require($file) ;}; if ($@ ne '') { print STDERR "error loading $file: $@\n"; return 0; } return 1; } # customization options variables use vars qw( $DEBUG $PREFIX $VERBOSE $SUBDIR $IDX_SUMMARY $SPLIT $SHORT_REF @EXPAND $EXPAND $TOP $DOCTYPE $FRAMESET_DOCTYPE $ERROR_LIMIT $CHECK $TEST $DUMP_TEXI $MACRO_EXPAND $USE_GLOSSARY $INVISIBLE_MARK $USE_ISO $TOP_FILE $TOC_FILE $FRAMES $SHOW_MENU $NUMBER_SECTIONS $USE_NODES $USE_SECTIONS $USE_NODE_TARGET $USE_UNICODE $USE_UNIDECODE $TRANSLITERATE_NODE $NODE_FILES $NODE_NAME_IN_MENU $AVOID_MENU_REDUNDANCY $SECTION_NAVIGATION $MONOLITHIC $SHORTEXTN $EXTENSION $OUT $NOVALIDATE $DEF_TABLE $LANG $DO_CONTENTS $DO_SCONTENTS $SEPARATED_FOOTNOTES $TOC_LINKS $L2H $L2H_L2H $L2H_SKIP $L2H_TMP $L2H_CLEAN $L2H_FILE $L2H_HTML_VERSION $EXTERNAL_DIR @INCLUDE_DIRS @PREPEND_DIRS @CONF_DIRS $IGNORE_PREAMBLE_TEXT @CSS_FILES @CSS_REFS $INLINE_CONTENTS $INLINE_INSERTCOPYING ); # customization variables # ENCODING is deprecated use vars qw( $ENCODING $ENCODING_NAME $DOCUMENT_ENCODING $OUT_ENCODING $IN_ENCODING $DEFAULT_ENCODING $MENU_PRE_STYLE $MENU_PRE_COMPLEX_FORMAT $CENTER_IMAGE $EXAMPLE_INDENT_CELL $SMALL_EXAMPLE_INDENT_CELL $SMALL_FONT_SIZE $SMALL_RULE $DEFAULT_RULE $MIDDLE_RULE $BIG_RULE $TOP_HEADING $INDEX_CHAPTER $SPLIT_INDEX $HREF_DIR_INSTEAD_FILE $USE_MENU_DIRECTIONS $USE_UP_FOR_ADJACENT_NODES $AFTER_BODY_OPEN $PRE_BODY_CLOSE $EXTRA_HEAD $VERTICAL_HEAD_NAVIGATION $WORDS_IN_PAGE $ICONS $UNNUMBERED_SYMBOL_IN_MENU $SIMPLE_MENU $MENU_SYMBOL $USE_ACCESSKEY $USE_REL_REV $USE_LINKS $OPEN_QUOTE_SYMBOL $CLOSE_QUOTE_SYMBOL $NO_BULLET_LIST_STYLE $NO_BULLET_LIST_ATTRIBUTE $TOP_NODE_FILE $TOP_NODE_UP $NODE_FILE_EXTENSION $BEFORE_OVERVIEW $AFTER_OVERVIEW $BEFORE_TOC_LINES $AFTER_TOC_LINES $NEW_CROSSREF_STYLE $TOP_HEADING_AT_BEGINNING $USER $USE_NUMERIC_ENTITY $USE_SETFILENAME $SEPARATE_DESCRIPTION $IGNORE_BEFORE_SETFILENAME $OVERVIEW_LINK_TO_TOC $COMPLETE_IMAGE_PATHS $DATE %ACTIVE_ICONS %NAVIGATION_TEXT %PASSIVE_ICONS %BUTTONS_NAME %BUTTONS_GOTO %BUTTONS_EXAMPLE %BUTTONS_ACCESSKEY %BUTTONS_REL @CHAPTER_BUTTONS @MISC_BUTTONS @SECTION_BUTTONS @SECTION_FOOTER_BUTTONS @NODE_FOOTER_BUTTONS @LINKS_BUTTONS @IMAGE_EXTENSIONS ); # customization variables which may be guessed in the script #our $ADDRESS; use vars qw( $BODYTEXT $CSS_LINES $DOCUMENT_DESCRIPTION $EXTERNAL_CROSSREF_SPLIT ); # I18n use vars qw( $I $LANGUAGES ); # customizable subroutines references use vars qw( $print_section $one_section $end_section $print_Top_header $print_Top_footer $print_Top $print_Toc $print_Overview $print_Footnotes $print_About $print_misc_header $print_misc_footer $print_misc $print_section_header $print_section_footer $print_chapter_header $print_chapter_footer $print_element_header $print_page_head $print_page_foot $print_head_navigation $print_foot_navigation $button_icon_img $print_navigation $about_body $print_frame $print_toc_frame $toc_body $titlepage $insertcopying $css_lines $print_redirection_page $translate_names $init_out $finish_out $node_file_name $element_file_name $node_target_name $element_target_name $placed_target_file_name $inline_contents $program_string $preserve_misc_command $protect_text $anchor $anchor_label $element_label $misc_element_label $def_item $def $menu $menu_command $menu_link $menu_description $menu_comment $simple_menu_link $ref_beginning $info_ref $book_ref $external_href $external_ref $internal_ref $table_item $table_line $row $cell $list_item $comment $def_line $def_line_no_texi $heading_no_texi $raw $raw_no_texi $heading $element_heading $paragraph $preformatted $foot_line_and_ref $foot_section $address $image $image_files $index_entry_label $index_entry $index_entry_command $index_letter $print_index $printindex $index_summary $summary_letter $complex_format $cartouche $sp $definition_category $definition_index_entry $table_list $copying_comment $documentdescription $index_summary_file_entry $index_summary_file_end $index_summary_file_begin $style $format $normal_text $empty_line $unknown $unknown_style $float $caption_shortcaption $caption_shortcaption_command $listoffloats $listoffloats_entry $listoffloats_caption $listoffloats_float_style $listoffloats_style $acronym_like $quotation $quotation_prepend_text $paragraph_style_command $heading_texi $index_element_heading_texi $format_list_item_texi $begin_format_texi $begin_style_texi $begin_paragraph_texi $tab_item_texi $colon_command $simple_command $thing_command $begin_special_region $end_special_region $PRE_ABOUT $AFTER_ABOUT ); # hash which entries might be redefined by the user use vars qw( $complex_format_map %accent_map %def_map %format_map %simple_map %simple_map_pre %simple_map_texi %simple_map_math %simple_map_pre_math %simple_map_texi_math %style_map %style_map_pre %style_map_texi %simple_format_simple_map_texi %simple_format_style_map_texi %simple_format_texi_map %command_type %paragraph_style %stop_paragraph_command %format_code_style %region_formats_kept %texi_formats_map %things_map %pre_map %texi_map %unicode_map %unicode_diacritical %transliterate_map %transliterate_accent_map %no_transliterate_map %ascii_character_map %ascii_simple_map %ascii_things_map %numeric_entity_map %perl_charset_to_html %misc_pages_targets %iso_symbols %misc_command %no_paragraph_commands %css_map %format_in_paragraph %special_list_commands %accent_letters %unicode_accents %special_accents %inter_item_commands $def_always_delimiters $def_in_type_delimiters $def_argument_separator_delimiters %colon_command_punctuation_characters @command_handler_init @command_handler_process @command_handler_finish %command_handler %special_style ); # subject to change use vars qw( %makeinfo_encoding_to_map %makeinfo_unicode_to_eight_bit %eight_bit_to_unicode %t2h_encoding_aliases ); # needed in this namespace for translations $I = \&Texi2HTML::I18n::get_string; # # Function refs covered by the GPL as part of the texi2html.pl original # code. As such they cannot appear in texi2html.init which is public # domain (at least the things coded by me, and, if I'm not wrong also the # things coded by Olaf -- Pat). # $toc_body = \&T2H_GPL_toc_body; $style = \&T2H_GPL_style; $format = \&T2H_GPL_format; $printindex = \&t2h_GPL_default_printindex; $summary_letter = \&t2h_default_summary_letter; sub T2H_GPL_toc_body($) { my $elements_list = shift; return unless ($Texi2HTML::THISDOC{'DO_CONTENTS'} or $Texi2HTML::THISDOC{'DO_SCONTENTS'} or $FRAMES); my $current_level = 0; my $ul_style = $NUMBER_SECTIONS ? $NO_BULLET_LIST_ATTRIBUTE : ''; foreach my $element (@$elements_list) { next if ($element->{'top'}); my $ind = ' ' x $current_level; my $level = $element->{'toc_level'}; print STDERR "Bug no toc_level for ($element) $element->{'texi'}\n" if (!defined ($level)); if ($level > $current_level) { while ($level > $current_level) { $current_level++; my $ln = "\n$ind\n"; $ind = ' ' x $current_level; push(@{$Texi2HTML::TOC_LINES}, $ln); } } elsif ($level < $current_level) { while ($level < $current_level) { $current_level--; $ind = ' ' x $current_level; my $line = "\n$ind"; $line .= "" if ($level == $current_level); push(@{$Texi2HTML::TOC_LINES}, "$line\n"); } } else { push(@{$Texi2HTML::TOC_LINES}, "\n"); } # if there is more than one toc, in different files, the toc in # the file different from $Texi2HTML::THISDOC{'toc_file'} may have # wrong links, that is links that point to the same file and are # therefore empty, although the section isn't in the current file, # since it is in $Texi2HTML::THISDOC{'toc_file'}. my $dest_for_toc = $element->{'file'}; my $dest_for_stoc = $element->{'file'}; my $dest_target_for_stoc = $element->{'target'}; if ($Texi2HTML::Config::OVERVIEW_LINK_TO_TOC) { $dest_for_stoc = $Texi2HTML::THISDOC{'toc_file'}; $dest_target_for_stoc = $element->{'tocid'}; } $dest_for_toc = '' if ($dest_for_toc eq $Texi2HTML::THISDOC{'toc_file'}); $dest_for_stoc = '' if ($dest_for_stoc eq $Texi2HTML::THISDOC{'stoc_file'}); my $text = $element->{'text'}; #$text = $element->{'name'} unless ($NUMBER_SECTIONS); my $toc_entry = "
  • " . &$anchor ($element->{'tocid'}, "$dest_for_toc#$element->{'target'}",$text); my $stoc_entry = "
  • " . &$anchor ($element->{'stocid'}, "$dest_for_stoc#$dest_target_for_stoc",$text); push (@{$Texi2HTML::TOC_LINES}, $ind . $toc_entry); push(@{$Texi2HTML::OVERVIEW}, $stoc_entry. "
  • \n") if ($level == 1); } while (0 < $current_level) { $current_level--; my $ind = ' ' x $current_level; push(@{$Texi2HTML::TOC_LINES}, "\n$ind\n"); } @{$Texi2HTML::TOC_LINES} = () unless ($Texi2HTML::THISDOC{'DO_CONTENTS'}); if (@{$Texi2HTML::TOC_LINES}) { unshift @{$Texi2HTML::TOC_LINES}, $BEFORE_TOC_LINES; push @{$Texi2HTML::TOC_LINES}, $AFTER_TOC_LINES; } @{$Texi2HTML::OVERVIEW} = () unless ($Texi2HTML::THISDOC{'DO_SCONTENTS'} or $FRAMES); if (@{$Texi2HTML::OVERVIEW}) { unshift @{$Texi2HTML::OVERVIEW}, "\n"; push @{$Texi2HTML::OVERVIEW}, "\n"; unshift @{$Texi2HTML::OVERVIEW}, $BEFORE_OVERVIEW; push @{$Texi2HTML::OVERVIEW}, $AFTER_OVERVIEW; } } sub T2H_GPL_style($$$$$$$$$) { # known style my $style = shift; my $command = shift; my $text = shift; my $args = shift; my $no_close = shift; my $no_open = shift; my $line_nr = shift; my $state = shift; my $style_stack = shift; my $do_quotes = 0; my $use_attribute = 0; my $use_begin_end = 0; if (ref($style) eq 'HASH') { #print STDERR "GPL_STYLE $command ($style)\n"; #print STDERR " @$args\n"; if (ref($style->{'args'}) ne 'ARRAY') { print STDERR "BUG: args not an array for command `$command'\n"; } $do_quotes = $style->{'quote'}; if ((@{$style->{'args'}} == 1) and defined($style->{'attribute'})) { $style = $style->{'attribute'}; $use_attribute = 1; $text = $args->[0]; } elsif (defined($style->{'function'})) { $text = &{$style->{'function'}}($command, $args, $style_stack, $state, $line_nr); } } else { if ($style =~ s/^\"//) { # add quotes $do_quotes = 1; } if ($style =~ s/^\&//) { # custom $style = 'Texi2HTML::Config::' . $style; eval "\$text = &$style(\$text, \$command, \$style_stack)"; } elsif ($style ne '') { $use_attribute = 1; } else { # no style } } if ($use_attribute) { # good style my $attribute_text = ''; if ($style =~ /^(\w+)(\s+.*)/) { $style = $1; $attribute_text = $2; } # $text = "<${style}$attribute_text>$text" ; $text = "<${style}$attribute_text>" . "$text" if (!$no_open); $text .= "" if (!$no_close); if ($do_quotes) { $text = $OPEN_QUOTE_SYMBOL . "$text" if (!$no_open); $text .= $CLOSE_QUOTE_SYMBOL if (!$no_close); } } if (ref($style) eq 'HASH') { if (defined($style->{'begin'}) and !$no_open) { $text = $style->{'begin'} . $text; } if (defined($style->{'end'}) and !$no_close) { $text = $text . $style->{'end'}; } } if ($do_quotes and !$use_attribute) { $text = $OPEN_QUOTE_SYMBOL . "$text" if (!$no_open); $text .= $CLOSE_QUOTE_SYMBOL if (!$no_close); } return $text; } sub T2H_GPL_format($$$) { my $tag = shift; my $element = shift; my $text = shift; return '' if (!defined($element) or ($text !~ /\S/)); return $text if ($element eq ''); my $attribute_text = ''; if ($element =~ /^(\w+)(\s+.*)/) { $element = $1; $attribute_text = $2; } return "<${element}$attribute_text>\n" . $text. "\n"; } my $t2h_default_file_number; my $t2h_default_index_page_nr; #my %t2h_default_element_indices; my %t2h_default_index_letters_hash; my %t2h_default_index_letters_array; my %t2h_default_seen_files; my $t2h_default_element_split_printindices; my %t2h_default_split_files; # FIXME call it where indices are split in main program sub t2h_default_init_split_indices () { #print STDERR "Do splitting of index letters, once.\n"; push @command_handler_process, \&t2h_default_index_rearrange_directions; %t2h_default_index_letters_hash = (); %t2h_default_index_letters_array = (); %t2h_default_seen_files = (); %t2h_default_split_files = (); $t2h_default_element_split_printindices = undef; $t2h_default_index_page_nr = 0; $t2h_default_file_number = 0; foreach my $index_name (keys %{$Texi2HTML::THISDOC{'indices'}}) { #print STDERR "Gathering and sorting $index_name letters\n"; foreach my $key (keys %{$Texi2HTML::THISDOC{'indices'}->{$index_name}->[0]->{'entries'}}) { my $letter = uc(substr($key, 0, 1)); $t2h_default_index_letters_hash{$index_name}->{$letter}->{$key} = $Texi2HTML::THISDOC{'indices'}->{$index_name}->[0]->{'entries'}->{$key}; } my $entries_count = 0; my @letters = (); # use cmp if only letters or only symbols, otherwise symbols before # letters foreach my $letter (sort { ((($a =~ /^[[:alpha:]]/ and $b =~ /^[[:alpha:]]/) or ($a !~ /^[[:alpha:]]/ and $b !~ /^[[:alpha:]]/)) && $a cmp $b) || ($a =~ /^[[:alpha:]]/ && 1) || -1 } (keys(%{$t2h_default_index_letters_hash{$index_name}}))) { my $letter_entry = {'letter' => $letter }; foreach my $key (sort {uc($a) cmp uc($b)} (keys(%{$t2h_default_index_letters_hash{$index_name}->{$letter}}))) { push @{$letter_entry->{'entries'}}, $t2h_default_index_letters_hash{$index_name}->{$letter}->{$key}; } push @letters, $letter_entry; $entries_count += scalar(@{$letter_entry->{'entries'}}); #if ($SPLIT and $SPLIT_INDEX and $entries_count >= $SPLIT_INDEX) # FIXME this is not right, above is right # Don't split if document is not split if ($SPLIT and $SPLIT_INDEX and $entries_count > $SPLIT_INDEX) { push @{$t2h_default_index_letters_array{$index_name}}, [ @letters ]; @letters = (); $entries_count = 0; } } push @{$t2h_default_index_letters_array{$index_name}}, [ @letters ] if (scalar(@letters)); } } sub t2h_default_associate_index_element($$$$) { my $element = shift; my $is_top = shift; my $docu_name = shift; my $use_node_file = shift; my ($file, $default_element_file); if ($SPLIT) { # respect the default splitting $default_element_file = $element->{'file'}; if ($t2h_default_seen_files{$default_element_file}) { $file = $t2h_default_seen_files{$default_element_file}; } else { if ($is_top eq 'top') { $file = $default_element_file; } else { $file = "${docu_name}_$t2h_default_file_number"; $file .= '.' . $Texi2HTML::THISDOC{'extension'} if (defined($Texi2HTML::THISDOC{'extension'})); } $t2h_default_file_number++; $t2h_default_seen_files{$default_element_file} = $file; } } my $modify_file = ($SPLIT and (!$use_node_file or $t2h_default_split_files{$default_element_file})); $element->{'file'} = $file if ($modify_file); my $current_element = $element; #print STDERR "Doing printindices for $element $element->{'texi'}, file $file (@{$element->{'place'}})\n"; my @places = @{$element->{'place'}}; @{$element->{'place'}} = (); foreach my $place (@places) { unless ($place->{'command'} and $place->{'command'} eq 'printindex') { #print STDERR "HHHHHHHHH ($element->{'texi'}) place: $place->{'texi'}, current: $current_element->{'texi'}, $current_element->{'file'}\n"; push @{$current_element->{'place'}}, $place; $place->{'file'} = $current_element->{'file'}; $place->{'element_ref'} = $current_element if ($place->{'element_ref'} and $current_element ne $element); next; } my $printindex = $place; my $index_name = $printindex->{'name'}; #print STDERR "Associate letters in $element->{'texi'} for $index_name\n"; my @letter_groups = (); # empty index next if (!exists($t2h_default_index_letters_array{$index_name})); my @letters_split = @{$t2h_default_index_letters_array{$index_name}}; # index is not split if (scalar(@letters_split) eq 1) { push @{$letter_groups[0]->{'letters'}}, @{$letters_split[0]}; } # the element is at the level of splitting, then we split according to # INDEX_SPLIT elsif (!$element->{'top'} and $SPLIT and (($SPLIT eq 'node') or (defined($element->{'level'}) and $element->{'level'} <= $Texi2HTML::THISDOC{'split_level'}))) { $t2h_default_split_files{$default_element_file} = 1; foreach my $letters_split (@letters_split) { push @letter_groups, {'letters' => [@$letters_split]}; } } else { # we 'unsplit' index split if not located where document is indeed split #print STDERR "UNSPLIT $element->{'texi'}, $index_name\n"; foreach my $letters_split (@letters_split) { push @{$letter_groups[0]->{'letters'}}, @$letters_split; } } $letter_groups[0]->{'element'} = $current_element; # may only happen if SPLIT if (scalar(@letter_groups) > 1) { # this weird construct is there because the element use as a key is # converted to a string by perl, losing its meaning as a reference, # the reference must be recorded explicitly $t2h_default_element_split_printindices->{$element}->{'element'} = $element; push @{$t2h_default_element_split_printindices->{$element}->{'printindices'}}, $printindex; #print STDERR "Pushing $element, $element->{'texi'}, $printindex\n"; foreach my $split_group (@letter_groups) { my $first_letter = $split_group->{'letters'}->[0]->{'letter'}; my $last_letter = $split_group->{'letters'}->[-1]->{'letter'}; if (!$split_group->{'element'}) { #construct new element name my $letters_heading; if ($last_letter ne $first_letter) { $letters_heading = &$normal_text("$first_letter -- $last_letter"); } else { $letters_heading = &$normal_text("$first_letter"); } my ($name, $simple); my $texi = "ADDED ELEMENT $element->{'texi'}: $letters_heading"; if (!defined($element->{'text'})) { my $element_heading_texi = &$heading_texi($element->{'tag'}, $element->{'texi'}, $element->{'number'}); my $heading_texi = &$index_element_heading_texi( $element_heading_texi, $element->{'tag'}, $element->{'texi'}, $element->{'number'}, $first_letter, $last_letter); $name = main::substitute_line($heading_texi); $simple = main::simple_format(undef,undef,$heading_texi); } else { # should never happen $name = "$element->{'text'}: $letters_heading"; $simple = "$element->{'simple_format'}: $letters_heading"; } #file and id my $relative_file = $Texi2HTML::THISDOC{'file_base_name'} . '_' . $t2h_default_file_number; $t2h_default_file_number++; $relative_file .= '.' . $Texi2HTML::THISDOC{'extension'} if (defined($Texi2HTML::THISDOC{'extension'})); my $id = "index_split-$t2h_default_index_page_nr"; $t2h_default_index_page_nr++; my $new_element = { 'file' => $relative_file, 'id' => $id, 'target' => $id, 'text' => $name, 'texi' => $texi, 'seen' => 1, 'simple_format' => $simple }; $split_group->{'element'} = $new_element; $current_element = $new_element; #print STDERR "Added $new_element->{'file'} for $new_element->{'texi'} ($first_letter:$last_letter)\n"; } else { # this is the first index split, it is still associated with the element #print STDERR "No file added for ($first_letter:$last_letter)\n"; } } $t2h_default_seen_files{$default_element_file} = $current_element->{'file'}; } else { push @{$current_element->{'place'}}, $place; } $printindex->{'split_groups'} = \@letter_groups; #print STDERR "$index_name processed for $element, $element->{'texi'} (@{$printindex->{'split_groups'}})\n"; } return $file if ($modify_file); return undef; } sub t2h_default_index_rearrange_directions() { return if (!defined($t2h_default_element_split_printindices)); foreach my $element_string (keys(%$t2h_default_element_split_printindices)) { my $element = $t2h_default_element_split_printindices->{$element_string}->{'element'}; my $current_element = $element; #print STDERR " E Processing $element_string,$current_element $current_element->{'texi'}\n"; foreach my $printindex (@{$t2h_default_element_split_printindices->{$element_string}->{'printindices'}}) { #print STDERR " I Processing $printindex $printindex->{'name'} (@{$printindex->{'split_groups'}})\n"; foreach my $split_group (@{$printindex->{'split_groups'}}) { my $first_letter = $split_group->{'letters'}->[0]->{'letter'}; my $last_letter = $split_group->{'letters'}->[-1]->{'letter'}; my $new_element = $split_group->{'element'}; next if ($current_element eq $new_element); #print STDERR " G Processing ($first_letter:$last_letter) in $element->{'texi'}, index $printindex->{'name'}: $new_element->{'texi'}\n"; $new_element->{'This'} = $new_element; if ($current_element->{'Forward'}) { $current_element->{'Forward'}->{'Back'} = $new_element; $new_element->{'Forward'} = $current_element->{'Forward'}; } $current_element->{'Forward'} = $new_element; $new_element->{'Back'} = $current_element; if ($current_element->{'Following'}) { #print STDERR "F: C($current_element): $current_element->{'texi'}, N($new_element): $new_element->{'texi'} -- C->F: $current_element->{'Following'}->{'texi'}\n"; $new_element->{'Following'} = $current_element->{'Following'}; $current_element->{'Following'} = $new_element; } foreach my $key ('FastForward', 'FastBack', 'Up', 'tag_level', 'tag', 'level', 'node') { $new_element->{$key} = $element->{$key} if (defined($element->{$key})); } $current_element = $new_element; } } } } # not needed to initialize it for a document, since it is reset # in index_summary my $t2h_symbol_indices = 0; # format a letter appearing in a summary for an index. The letter links to # the place where the index elements beginning with this letter are (called # a letter entry). # # arguments: # letter # file where the target letter entry is # identifier for the target letter entry # This should better be in texi2html.init, but $t2h_symbol_indices # has to be in the same file scope than printindeex. sub t2h_default_summary_letter($$$$$$$) { my $letter = shift; my $file = shift; my $default_identifier = shift; my $index_element_id = shift; my $number = shift; my $index_element = shift; my $index_name = shift; my $is_symbol = $letter !~ /^[A-Za-z]/; my $identifier = $default_identifier; if ($NEW_CROSSREF_STYLE) { if ($is_symbol) { $t2h_symbol_indices++; $identifier = $index_element_id . "_${index_name}_symbol-$t2h_symbol_indices"; } else { $identifier = $index_element_id . "_${index_name}_letter-${letter}"; } } my $result = &$anchor('', $file . '#' . $identifier, '' . &$protect_text($letter) . '', 'class="summary-letter"'); return $result unless ($NEW_CROSSREF_STYLE); return ($result, $identifier, $is_symbol); } # this replaces do_index_page # args should be: # index_name sub t2h_GPL_default_printindex($) { my $index_name = shift; my %letter_entries; my $identifier_index_nr = 0; # could be cross verified with argument my $printindex = shift @{$Texi2HTML::THISDOC{'printindices'}}; if ($printindex->{'name'} ne $index_name) { print STDERR "BUG: THISDOC{'printindices'} $printindex->{'name'} ne $index_name\n"; } #print STDERR "Doing printindex $index_name\n"; return '' if (! defined($printindex->{'split_groups'})); my @split_letters = @{$printindex->{'split_groups'}}; return '' if (!scalar(@split_letters)); foreach my $split_group (@split_letters) { #do summmary my @non_alpha = (); my @alpha = (); my $file = $split_group->{'element'}->{'file'}; # letter_id could be done once for all instead of for each split_group # and outside of t2h_default_summary_letter (or t2h_default_summary_letter # could be simplified and inlined my %letter_id; foreach my $summary_split_group (@split_letters) { foreach my $letter_entry (@{$summary_split_group->{'letters'}}) { my $letter = $letter_entry->{'letter'}; #my $letter = $letter_entry; my $dest_file = ''; $dest_file = $summary_split_group->{'element'}->{'file'} if ($summary_split_group ne $split_group); my $index_element_id = $summary_split_group->{'element'}->{'id'}; my $default_identifier = $index_element_id . "_$identifier_index_nr"; $identifier_index_nr++; my ($result, $identifier, $is_symbol) = &$summary_letter($letter, $dest_file, $default_identifier, $index_element_id, '', '', $index_name); $identifier = $default_identifier if (!defined($identifier)); $letter_id{$letter} = $identifier; $is_symbol = $letter !~ /^[A-Za-z]/ if (!defined($is_symbol)); if ($is_symbol) { push @non_alpha, $result; } else { push @alpha, $result; } } } my $summary = &$index_summary(\@alpha, \@non_alpha); # reset symbols numbering $t2h_symbol_indices = 0; my $letters_text = ''; foreach my $letter_entry (@{$split_group->{'letters'}}) { my $letter = $letter_entry->{'letter'}; my $entries_text = ''; #foreach my $entry (@{$letter_entries{$letter}->{'entries'}}) foreach my $index_entry_ref (@{$letter_entry->{'entries'}}) { #my $entry_infos = main::get_index_entry_infos($index_entry, $split_group->{'element'}); #my ($text_href, $entry, $element_href, $element_text, $entry_file, $element_file, $entry_target, $entry_element_target) = @$entry_infos; my ($text_href, $entry_file, $element_file, $entry_target, $entry_element_target, $formatted_entry, $element_href, $entry_element_text) = main::get_index_entry_infos($index_entry_ref, $split_group->{'element'}); $entries_text .= &$index_entry ($text_href, $formatted_entry, $element_href, $entry_element_text, $entry_file, $element_file, $entry_target, $entry_element_target); } $letters_text .= &$index_letter ($letter, $letter_id{$letter}, $entries_text) } my $index_text = &$print_index($letters_text, $index_name); $split_group->{'text'} = $summary . $index_text . $summary; # print STDERR " ---> $index_name @{$split_group->{'letters'}} # * elt: $split_group->{'element'}->{'id'}, $split_group->{'element'}->{'file'}, $split_group->{'element'}->{'name'} # * directions: B: $split_group->{'element'}->{'Back'}->{'name'}, F: $split_group->{'element'}->{'Forward'}->{'name'}, FB: $split_group->{'element'}->{'FastBack'}->{'name'}, FF: $split_group->{'element'}->{'FastForward'}->{'name'} # * text # #$split_group->{'text'} # #"; } my $current_page = shift @split_letters; if (!scalar(@split_letters)) { return $current_page->{'text'}; } while (1) { # print the index letters push @{$Texi2HTML::THIS_SECTION}, $current_page->{'text'}; $current_page = shift @split_letters; last if (!defined($current_page)); # end the previous element main::finish_element ($Texi2HTML::THISDOC{'FH'}, $Texi2HTML::THIS_ELEMENT, $Texi2HTML::THIS_ELEMENT->{'Forward'}, 0); # do the new element beginning $Texi2HTML::THIS_ELEMENT = $current_page->{'element'}; main::do_element_directions($Texi2HTML::THIS_ELEMENT); main::open_out_file($current_page->{'element'}->{'file'}); &$print_page_head($Texi2HTML::THISDOC{'FH'}); &$print_chapter_header($Texi2HTML::THISDOC{'FH'}, $Texi2HTML::THIS_ELEMENT) if $Texi2HTML::Config::SPLIT eq 'chapter'; &$print_section_header($Texi2HTML::THISDOC{'FH'}, $Texi2HTML::THIS_ELEMENT) if $Texi2HTML::Config::SPLIT eq 'section'; @{$Texi2HTML::THIS_SECTION} = &$element_label($Texi2HTML::THIS_ELEMENT->{'id'}, $Texi2HTML::THIS_ELEMENT, undef, undef); push @{$Texi2HTML::THIS_SECTION}, &$print_element_header(1, 0); push @{$Texi2HTML::THIS_SECTION}, &$heading($Texi2HTML::THIS_ELEMENT); } return ''; } # leave this within comments, and keep the require statement # This way, you can directly run texi2html.pl, if # $T2H_HOME/texi2html.init exists. # @INIT@ require "$T2H_HOME/texi2html.init" if ($0 =~ /\.pl$/ && -e "$T2H_HOME/texi2html.init" && -r "$T2H_HOME/texi2html.init"); my $translation_file = 'translations.pl'; # file containing all the translations my $T2H_OBSOLETE_STRINGS; # leave this within comments, and keep the require statement # This way, you can directly run texi2html.pl, # if $T2H_HOME/translations.pl exists. # # @T2H_TRANSLATIONS_FILE@ require "$T2H_HOME/$translation_file" if ($0 =~ /\.pl$/ && -e "$T2H_HOME/$translation_file" && -r "$T2H_HOME/$translation_file"); # # Some functions used to override normal formatting functions in specific # cases. The user shouldn't want to change them, but can use them. # # used to utf8 encode the result sub t2h_utf8_accent($$$) { my $accent = shift; my $args = shift; my $style_stack = shift; my $text = $args->[0]; #print STDERR "$accent\[".scalar(@$style_stack) ."\] (@$style_stack)\n"; # special handling of @dotless{i} if ($accent eq 'dotless') { if (($text eq 'i') and (!defined($style_stack->[-1]) or (!defined($unicode_accents{$style_stack->[-1]})) or ($style_stack->[-1] eq 'tieaccent'))) { return "\x{0131}"; } #return "\x{}" if ($text eq 'j'); # not found ! return $text; } # FIXME \x{0131}\x{0308} for @dotless{i} @" doesn't lead to NFC 00ef. return Unicode::Normalize::NFC($text . chr(hex($unicode_diacritical{$accent}))) if (defined($unicode_diacritical{$accent})); return ascii_accents($text, $accent); } sub t2h_utf8_normal_text($$$$$) { my $text = shift; my $in_raw_text = shift; my $in_preformatted = shift; my $in_code = shift; my $in_simple = shift; my $style_stack = shift; $text = &$protect_text($text) unless($in_raw_text); $text = uc($text) if (in_small_caps($style_stack)); if (!$in_code and !$in_preformatted) { $text =~ s/---/\x{2014}/g; $text =~ s/--/\x{2013}/g; $text =~ s/``/\x{201C}/g; $text =~ s/''/\x{201D}/g; } return Unicode::Normalize::NFC($text); } # these are unlikely to be used by users, as they are essentially # used to follow the html external refs specification in texinfo sub t2h_cross_manual_normal_text($$$$$) { my $text = shift; my $in_raw_text = shift; my $in_preformatted = shift; my $in_code =shift; my $in_simple =shift; my $style_stack = shift; $text = uc($text) if (in_small_caps($style_stack)); return $text if ($USE_UNICODE); return t2h_no_unicode_cross_manual_normal_text($text, 0); } sub t2h_cross_manual_normal_text_transliterate($$$$$) { my $text = shift; my $in_raw_text = shift; my $in_preformatted = shift; my $in_code =shift; my $in_simple =shift; my $style_stack = shift; $text = uc($text) if (in_small_caps($style_stack)); return $text if ($USE_UNICODE); return t2h_no_unicode_cross_manual_normal_text($text, 1); } sub t2h_no_unicode_cross_manual_normal_text($$) { # if there is no unicode support, we do all the transformations here my $text = shift; my $transliterate = shift; my $result = ''; my $encoding = $Texi2HTML::THISDOC{'DOCUMENT_ENCODING'}; if (defined($encoding) and exists($t2h_encoding_aliases{$encoding})) { $encoding = $t2h_encoding_aliases{$encoding}; } while ($text ne '') { if ($text =~ s/^([A-Za-z0-9]+)//o) { $result .= $1; } elsif ($text =~ s/^ //o) { $result .= '-'; } elsif ($text =~ s/^(.)//o) { if (exists($ascii_character_map{$1})) { $result .= '_' . lc($ascii_character_map{$1}); } else { my $character = $1; my $charcode = uc(sprintf("%02x",ord($1))); my $done = 0; if (defined($encoding) and exists($eight_bit_to_unicode{$encoding}) and exists($eight_bit_to_unicode{$encoding}->{$charcode})) { $done = 1; my $unicode_point = $eight_bit_to_unicode{$encoding}->{$charcode}; if (!$transliterate) { $result .= '_' . lc($unicode_point); } elsif (exists($transliterate_map{$unicode_point})) { $result .= $transliterate_map{$unicode_point}; } elsif (exists($unicode_diacritical{$unicode_point})) { $result .= ''; } else { $done = 0; } } if (!$done) { # wild guess that work for latin1, and thus, should fail $result .= '_' . '00' . lc($charcode); } } } else { echo_error("Bug: unknown character in cross ref (likely in infinite loop)"); } } return $result; } sub t2h_nounicode_cross_manual_accent($$$) { my $accent = shift; my $args = shift; my $style_stack = shift; my $text = $args->[0]; if ($accent eq 'dotless') { if (($text eq 'i') and (!defined($style_stack->[-1]) or (!defined($unicode_accents{$style_stack->[-1]})) or ($style_stack->[-1] eq 'tieaccent'))) { return "_0131"; } #return "\x{}" if ($text eq 'j'); # not found ! return $text; } return '_' . lc($unicode_accents{$accent}->{$text}) if (defined($unicode_accents{$accent}->{$text})); return ($text . '_' . lc($unicode_diacritical{$accent})) if (defined($unicode_diacritical{$accent})); return ascii_accents($text, $accent); } sub t2h_transliterate_cross_manual_accent($$) { my $accent = shift; my $args = shift; my $text = $args->[0]; if (exists($unicode_accents{$accent}->{$text}) and exists ($transliterate_map{$unicode_accents{$accent}->{$text}})) { return $transliterate_map{$unicode_accents{$accent}->{$text}}; } return $text; } } # end package Texi2HTML::Config use vars qw( %value %alias ); # variables which might be redefined by the user but aren't likely to be # they seem to be in the main namespace use vars qw( %index_names %index_prefix_to_name %predefined_index %valid_index %reference_sec2level %code_style_map %forbidden_index_name ); # Some global variables are set in the script, and used in the subroutines # they are in the Texi2HTML namespace, thus prefixed with Texi2HTML::. # see texi2html.init for details. #+++############################################################################ # # # Pasted content of File $(srcdir)/MySimple.pm: Command-line processing # # # #---############################################################################ # leave this within comments, and keep the require statement # This way, you can directly run texi2html.pl, if $T2H_HOME/MySimple.pm # exists. # @MYSIMPLE@ require "$T2H_HOME/MySimple.pm" if ($0 =~ /\.pl$/ && -e "$T2H_HOME/MySimple.pm" && -r "$T2H_HOME/MySimple.pm"); #+++######################################################################## # # # Pasted content of File $(srcdir)/T2h_i18n.pm: Internationalisation # # # #---######################################################################## # leave this within comments, and keep the require statement # This way, you can directly run texi2html.pl, if $T2H_HOME/T2h_i18n.pm # exists. # @T2H_I18N@ require "$T2H_HOME/T2h_i18n.pm" if ($0 =~ /\.pl$/ && -e "$T2H_HOME/T2h_i18n.pm" && -r "$T2H_HOME/T2h_i18n.pm"); ######################################################################### # # latex2html code # #---###################################################################### { # leave this within comments, and keep the require statement # This way, you can directly run texi2html.pl, if $ENV{T2H_HOME}/T2h_l2h.pm # exists. # @T2H_L2H@ require "$T2H_HOME/T2h_l2h.pm" if ($0 =~ /\.pl$/ && -e "$T2H_HOME/T2h_l2h.pm" && -r "$T2H_HOME/T2h_l2h.pm"); } { package Texi2HTML::LaTeX2HTML::Config; # latex2html variables # These variables are not used. They are here for information only, and # an example of config file for latex2html file is included. my $ADDRESS; my $ANTI_ALIAS; my $ANTI_ALIAS_TEXT; my $ASCII_MODE; my $AUTO_LINK; my $AUTO_PREFIX; my $CHILDLINE; my $DEBUG; my $DESTDIR; my $DVIPS; my $ERROR; my $EXTERNAL_FILE; my $EXTERNAL_IMAGES; my $EXTERNAL_UP_LINK; my $EXTERNAL_UP_TITLE; my $FIGURE_SCALE_FACTOR; my $HTML_VERSION; my $IMAGES_ONLY; my $INFO; my $LINE_WIDTH; my $LOCAL_ICONS; my $LONG_TITLES; my $MATH_SCALE_FACTOR; my $MAX_LINK_DEPTH; my $MAX_SPLIT_DEPTH; my $NETSCAPE_HTML; my $NOLATEX; my $NO_FOOTNODE; my $NO_IMAGES; my $NO_NAVIGATION; my $NO_SIMPLE_MATH; my $NO_SUBDIR; my $PAPERSIZE; my $PREFIX; my $PS_IMAGES; my $REUSE; my $SCALABLE_FONTS; my $SHORTEXTN; my $SHORT_INDEX; my $SHOW_SECTION_NUMBERS; my $SPLIT; my $TEXDEFS; my $TITLE; my $TITLES_LANGUAGE; my $TMP; my $VERBOSE; my $WORDS_IN_NAVIGATION_PANEL_TITLES; my $WORDS_IN_PAGE; # @T2H_L2H_INIT@ } package main; # # flush stdout and stderr after every write # select(STDERR); $| = 1; select(STDOUT); $| = 1; my $I = \&Texi2HTML::I18n::get_string; ######################################################################## # # Global variable initialization # ######################################################################## # # pre-defined indices # %index_prefix_to_name = (); %index_names = ( 'cp' => { 'prefix' => ['cp','c']}, 'fn' => { 'prefix' => ['fn', 'f'], code => 1}, 'vr' => { 'prefix' => ['vr', 'v'], code => 1}, 'ky' => { 'prefix' => ['ky', 'k'], code => 1}, 'pg' => { 'prefix' => ['pg', 'p'], code => 1}, 'tp' => { 'prefix' => ['tp', 't'], code => 1} ); foreach my $name(keys(%index_names)) { foreach my $prefix (@{$index_names{$name}->{'prefix'}}) { $forbidden_index_name{$prefix} = 1; $index_prefix_to_name{$prefix} = $name; } } foreach my $other_forbidden_index_name ('info','ps','pdf','htm', 'log','aux','dvi','texi','txi','texinfo','tex','bib') { $forbidden_index_name{$other_forbidden_index_name} = 1; } # commands with ---, -- '' and `` preserved # usefull with the old interface %code_style_map = ( 'code' => 1, 'command' => 1, 'env' => 1, 'file' => 1, 'kbd' => 1, 'option' => 1, 'samp' => 1, 'verb' => 1, ); my @element_directions = ('Up', 'Forward', 'Back', 'Next', 'Prev', 'SectionNext', 'SectionPrev', 'SectionUp', 'FastForward', 'FastBack', 'This', 'NodeUp', 'NodePrev', 'NodeNext', 'Following', 'NextFile', 'PrevFile', 'ToplevelNext', 'ToplevelPrev'); $::simple_map_ref = \%Texi2HTML::Config::simple_map; $::simple_map_pre_ref = \%Texi2HTML::Config::simple_map_pre; $::simple_map_texi_ref = \%Texi2HTML::Config::simple_map_texi; $::style_map_ref = \%Texi2HTML::Config::style_map; $::style_map_pre_ref = \%Texi2HTML::Config::style_map_pre; $::style_map_texi_ref = \%Texi2HTML::Config::style_map_texi; $::things_map_ref = \%Texi2HTML::Config::things_map; $::pre_map_ref = \%Texi2HTML::Config::pre_map; $::texi_map_ref = \%Texi2HTML::Config::texi_map; #print STDERR "MAPS: $::simple_map_ref $::simple_map_pre_ref $::simple_map_texi_ref $::style_map_ref $::style_map_pre_ref $::style_map_texi_ref $::things_map_ref $::pre_map_ref $::texi_map_ref\n"; # delete from hash if we are using the new interface foreach my $code (keys(%code_style_map)) { delete ($code_style_map{$code}) if (ref($::style_map_ref->{$code}) eq 'HASH'); } # no paragraph in these commands my %no_paragraph_macro = ( 'xref' => 1, 'ref' => 1, 'pxref' => 1, 'inforef' => 1, 'anchor' => 1, ); # # texinfo section names to level # my %reference_sec2level = ( 'top', 0, 'chapter', 1, 'unnumbered', 1, 'chapheading', 1, 'appendix', 1, 'section', 2, 'unnumberedsec', 2, 'heading', 2, 'appendixsec', 2, 'subsection', 3, 'unnumberedsubsec', 3, 'subheading', 3, 'appendixsubsec', 3, 'subsubsection', 4, 'unnumberedsubsubsec', 4, 'subsubheading', 4, 'appendixsubsubsec', 4, ); # the reverse mapping. There is an entry for each sectionning command. # The value is a ref on an array containing at each index the corresponding # sectionning command name. my %level2sec; { my $sections = [ ]; my $appendices = [ ]; my $unnumbered = [ ]; my $headings = [ ]; foreach my $command (keys (%reference_sec2level)) { if ($command =~ /^appendix/) { $level2sec{$command} = $appendices; } elsif ($command =~ /^unnumbered/ or $command eq 'top') { $level2sec{$command} = $unnumbered; } elsif ($command =~ /section$/ or $command eq 'chapter') { $level2sec{$command} = $sections; } else { $level2sec{$command} = $headings; } $level2sec{$command}->[$reference_sec2level{$command}] = $command; } } # this are synonyms $reference_sec2level{'appendixsection'} = 2; # sec2level{'majorheading'} is also 1 and not 0 $reference_sec2level{'majorheading'} = 1; $reference_sec2level{'chapheading'} = 1; $reference_sec2level{'centerchap'} = 1; sub set_no_line_macro($$) { my $macro = shift; my $value = shift; $Texi2HTML::Config::no_paragraph_commands{$macro} = $value unless defined($Texi2HTML::Config::no_paragraph_commands{$macro}); } # those macros aren't considered as beginning a paragraph foreach my $no_line_macro ('alias', 'macro', 'unmacro', 'rmacro', 'titlefont', 'include', 'copying', 'end copying', 'tab', 'item', 'itemx', '*', 'float', 'end float', 'caption', 'shortcaption', 'cindex', 'image') { set_no_line_macro($no_line_macro, 1); } foreach my $key (keys(%Texi2HTML::Config::misc_command), keys(%reference_sec2level)) { set_no_line_macro($key, 1); } # a hash associating a format @thing / @end thing with the type of the format # 'complex_format' 'simple_format' 'deff' 'list' 'menu' 'paragraph_format' my %format_type = (); foreach my $simple_format (keys(%Texi2HTML::Config::format_map)) { $format_type{$simple_format} = 'simple_format'; } foreach my $paragraph_style (keys(%Texi2HTML::Config::paragraph_style)) { $format_type{$paragraph_style} = 'paragraph_format'; } foreach my $complex_format (keys(%$Texi2HTML::Config::complex_format_map)) { $format_type{$complex_format} = 'complex_format'; } foreach my $table (('table', 'ftable', 'vtable')) { $format_type{$table} = 'table'; } $format_type{'multitable'} = 'multitable'; foreach my $def_format (keys(%Texi2HTML::Config::def_map)) { $format_type{$def_format} = 'deff'; } $format_type{'itemize'} = 'list'; $format_type{'enumerate'} = 'list'; $format_type{'menu'} = 'menu'; $format_type{'detailmenu'} = 'menu'; $format_type{'cartouche'} = 'cartouche'; $format_type{'float'} = 'float'; $format_type{'quotation'} = 'quotation'; $format_type{'smallquotation'} = 'quotation'; $format_type{'group'} = 'group'; $format_type{'titlepage'} = 'region'; $format_type{'copying'} = 'region'; $format_type{'documentdescription'} = 'region'; foreach my $key (keys(%format_type)) { set_no_line_macro($key, 1); set_no_line_macro("end $key", 1); } foreach my $macro (keys(%Texi2HTML::Config::format_in_paragraph)) { set_no_line_macro($macro, 1); set_no_line_macro("end $macro", 1); } # fake format at the bottom of the stack $format_type{'noformat'} = ''; # fake formats are formats used internally within other formats # we associate them with a real format, for the error messages my %fake_format = ( 'line' => 'table', 'term' => 'table', 'item' => 'list or table', 'row' => 'multitable row', 'cell' => 'multitable cell', 'deff_item' => 'definition command', 'menu_comment' => 'menu', 'menu_description' => 'menu', ); foreach my $key (keys(%fake_format)) { $format_type{$key} = 'fake'; } # raw formats which are expanded especially my @raw_regions = ('html', 'verbatim', 'tex', 'xml', 'docbook'); # The css formats are associated with complex format commands, and associated # with the 'pre_style' key foreach my $complex_format (keys(%$Texi2HTML::Config::complex_format_map)) { next if (defined($Texi2HTML::Config::complex_format_map->{$complex_format}->{'pre_style'})); $Texi2HTML::Config::complex_format_map->{$complex_format}->{'pre_style'} = ''; $Texi2HTML::Config::complex_format_map->{$complex_format}->{'pre_style'} = $Texi2HTML::Config::css_map{"pre.$complex_format"} if (exists($Texi2HTML::Config::css_map{"pre.$complex_format"})); } #+++############################################################################ # # # Argument parsing, initialisation # # # #---############################################################################ my $T2H_USER; # user running the script # shorthand for Texi2HTML::Config::VERBOSE my $T2H_VERBOSE; my $T2H_DEBUG; sub echo_warn($;$); #print STDERR "" . &$I('test i18n: \' , \a \\ %% %{unknown}a %known % %{known} \\', { 'known' => 'a known string', 'no' => 'nope'}); exit 0; # file: file name to locate. It can be a file path. # all_files: if true collect all the files with that name, otherwise stop # at first match. # directories: a reference on a array containing a list of directories to # search the file in. default is # @Texi2HTML::Config::CONF_DIRS, @texi2html_config_dirs. sub locate_init_file($;$$) { my $file = shift; my $all_files = shift; my $directories = shift; $directories = [ @Texi2HTML::Config::CONF_DIRS, @texi2html_config_dirs ] if !defined($directories); if ($file =~ /^\//) { return $file if (-e $file and -r $file); } else { my @files; foreach my $dir (@$directories) { next unless (-d "$dir"); if ($all_files) { push (@files, "$dir/$file") if (-e "$dir/$file" and -r "$dir/$file"); } else { return "$dir/$file" if (-e "$dir/$file" and -r "$dir/$file"); } } return @files if ($all_files); } return undef; } # called on -init-file sub load_init_file { # First argument is option shift; # second argument is value of options my $init_file = shift; my $file; if ($file = locate_init_file($init_file)) { print STDERR "# reading initialization file from $file\n" if ($T2H_VERBOSE); # require the file in the Texi2HTML::Config namespace return (Texi2HTML::Config::load($file)); } else { print STDERR "$ERROR Error: can't read init file $init_file\n"; return 0; } } sub set_date() { if (!$Texi2HTML::Config::TEST) { print STDERR "# Setting date in $Texi2HTML::THISDOC{'current_lang'}\n" if ($T2H_DEBUG); $Texi2HTML::THISDOC{'today'} = Texi2HTML::I18n::pretty_date($Texi2HTML::THISDOC{'current_lang'}); # like "20 September 1993"; } else { $Texi2HTML::THISDOC{'today'} = 'a sunny day'; } $Texi2HTML::THISDOC{'today'} = $Texi2HTML::Config::DATE if (defined($Texi2HTML::Config::DATE)); $::things_map_ref->{'today'} = $Texi2HTML::THISDOC{'today'}; $::pre_map_ref->{'today'} = $Texi2HTML::THISDOC{'today'}; $::texi_map_ref->{'today'} = $Texi2HTML::THISDOC{'today'}; } # # called on -lang, and when a @documentlanguage appears sub set_document_language ($;$$$) { my $lang = shift; my $from_command_line = shift; my $silent = shift; my $line_nr = shift; my @langs = ($lang); my $main_lang; if ($lang =~ /^([a-z]+)_([A-Z]+)/) { $main_lang = $1; push @langs, $main_lang; } my @files = locate_init_file("$i18n_dir/$lang", 1); if (! scalar(@files) and defined($main_lang)) { @files = locate_init_file("$i18n_dir/$main_lang", 1); } foreach my $file (@files) { Texi2HTML::Config::load($file); } foreach my $language (@langs) { if (Texi2HTML::I18n::set_language($language)) { print STDERR "# using '$language' as document language\n" if ($T2H_VERBOSE); $Texi2HTML::THISDOC{'current_lang'} = $language; # when processing the command line everything isn't already # set, so we cannot set the date. It is done as soon as possible # after arguments parsing and initializations, for a file. if ($from_command_line) { $Texi2HTML::GLOBAL{'current_lang'} = $language; } else { set_date(); } return 1; } } echo_error ("Language specs for '$lang' do not exists. Reverting to '$Texi2HTML::THISDOC{'current_lang'}'", $line_nr) unless ($silent); return 0; } # used to manage expanded sections from the command line sub set_expansion($$) { my $region = shift; my $set = shift; $set = 1 if (!defined($set)); if ($set) { push (@Texi2HTML::Config::EXPAND, $region) unless (grep {$_ eq $region} @Texi2HTML::Config::EXPAND); } else { @Texi2HTML::Config::EXPAND = grep {$_ ne $region} @Texi2HTML::Config::EXPAND; } } # manage footnote style sub set_footnote_style($$) { if ($_[1] eq 'separate') { $Texi2HTML::Config::SEPARATED_FOOTNOTES = 1; } elsif ($_[1] eq 'end') { $Texi2HTML::Config::SEPARATED_FOOTNOTES = 0; } else { echo_error ('Bad argument for --footnote-style'); } } # find the encoding alias. # with encoding support (USE_UNICODE), may return undef if no alias was found sub encoding_alias($) { my $encoding = shift; return $encoding if (!defined($encoding) or $encoding eq ''); if ($Texi2HTML::Config::USE_UNICODE) { if (! Encode::resolve_alias($encoding)) { echo_warn("Encoding name unknown: $encoding"); return undef; } print STDERR "# Using encoding " . Encode::resolve_alias($encoding) . "\n" if ($T2H_VERBOSE); return Encode::resolve_alias($encoding); } else { #echo_warn("No alias searched for encoding"); if (exists($Texi2HTML::Config::t2h_encoding_aliases{$encoding})) { $encoding = $Texi2HTML::Config::t2h_encoding_aliases{$encoding}; echo_warn ("Document encoding is utf8, but there is no unicode support") if ($encoding eq 'utf-8'); return $encoding; } echo_warn("Encoding certainly poorly supported"); return $encoding; } } my %nodes; # nodes hash. The key is the texi node name my %cross_reference_nodes; # normalized node names arrays # # %value hold texinfo variables, see also -D, -U, @set and @clear. # we predefine html (the output format) and texi2html (the translator) # it is initialized with %value_initial at the beginning of the # document parsing and filled and emptied as @set and @clear are # encountered my %value_initial = ( 'html' => 1, 'texi2html' => $THISVERSION, ); # # _foo: internal variables to track @foo # foreach my $key ('_author', '_title', '_subtitle', '_shorttitlepage', '_settitle', '_setfilename', '_titlefont') { $value_initial{$key} = ''; # prevent -w warnings } sub unicode_to_protected($) { my $text = shift; my $result = ''; while ($text ne '') { if ($text =~ s/^([A-Za-z0-9]+)//o) { $result .= $1; } elsif ($text =~ s/^ //o) { $result .= '-'; } elsif ($text =~ s/^(.)//o) { my $char = $1; if (exists($Texi2HTML::Config::ascii_character_map{$char})) { $result .= '_' . lc($Texi2HTML::Config::ascii_character_map{$char}); } else { if (ord($char) <= hex(0xFFFF)) { $result .= '_' . lc(sprintf("%04x",ord($char))); } else { $result .= '__' . lc(sprintf("%06x",ord($char))); } } } else { print STDERR "Bug: unknown character in a cross ref (likely in infinite loop)\n"; print STDERR "Text: !!$text!!\n"; sleep 1; } } return $result; } sub unicode_to_transliterate($) { my $text = shift; my $result = ''; while ($text ne '') { if ($text =~ s/^([A-Za-z0-9 ]+)//o) { $result .= $1; } elsif ($text =~ s/^(.)//o) { my $char = $1; if (exists($Texi2HTML::Config::ascii_character_map{$char})) { $result .= $char; } elsif (ord($char) <= hex(0xFFFF) and exists($Texi2HTML::Config::transliterate_map{uc(sprintf("%04x",ord($char)))})) { $result .= $Texi2HTML::Config::transliterate_map{uc(sprintf("%04x",ord($char)))}; } elsif (ord($char) <= hex(0xFFFF) and exists($Texi2HTML::Config::unicode_diacritical{uc(sprintf("%04x",ord($char)))})) { $result .= ''; } # in this case, we want to avoid calling unidecode, as we are sure # that there is no useful transliteration of the unicode character # instead we want to keep it as is. # This is the case, for example, for @exclamdown, is corresponds # with x00a1, but unidecode transliterates it to a !, we want # to avoid that and keep x00a1. elsif (ord($char) <= hex(0xFFFF) and exists($Texi2HTML::Config::no_transliterate_map{uc(sprintf("%04x",ord($char)))})) { $result .= $char; } else { if ($Texi2HTML::Config::USE_UNIDECODE) { $result .= unidecode($char); } else { $result .= $char; } } } else { print STDERR "Bug: unknown character in cross ref transliteration (likely in infinite loop)\n"; sleep 1; } } return $result; } # T2H_OPTIONS is a hash whose keys are the (long) names of valid # command-line options and whose values are a hash with the following keys: # type ==> one of !|=i|:i|=s|:s (see Getopt::Long for more info) # linkage ==> ref to scalar, array, or subroutine (see Getopt::Long for more info) # verbose ==> short description of option (displayed by -h) # noHelp ==> if 1 -> for "not so important options": only print description on -h 1 # 2 -> for obsolete options: only print description on -h 2 my $T2H_OPTIONS; $T2H_OPTIONS -> {'debug'} = { type => '=i', linkage => \$Texi2HTML::Config::DEBUG, verbose => 'output HTML with debuging information', }; $T2H_OPTIONS -> {'doctype'} = { type => '=s', linkage => \$Texi2HTML::Config::DOCTYPE, verbose => 'document type which is output in header of HTML files', noHelp => 1 }; $T2H_OPTIONS -> {'frameset-doctype'} = { type => '=s', linkage => \$Texi2HTML::Config::FRAMESET_DOCTYPE, verbose => 'document type for HTML frameset documents', noHelp => 1 }; $T2H_OPTIONS -> {'test'} = { type => '!', linkage => \$Texi2HTML::Config::TEST, verbose => 'use predefined information to avoid differences with reference files', noHelp => 1 }; $T2H_OPTIONS -> {'dump-texi'} = { type => '!', linkage => \$Texi2HTML::Config::DUMP_TEXI, verbose => 'dump the output of first pass into a file with extension passfirst and exit', noHelp => 1 }; $T2H_OPTIONS -> {'E'} = { type => '=s', linkage => \$Texi2HTML::Config::MACRO_EXPAND, verbose => 'output macro expanded source in ', noHelp => 2 }; $T2H_OPTIONS -> {'macro-expand'} = { type => '=s', linkage => \$Texi2HTML::Config::MACRO_EXPAND, verbose => 'output macro expanded source in ', }; $T2H_OPTIONS -> {'expand'} = { type => '=s', linkage => sub {set_expansion($_[1], 1);}, verbose => 'Expand info|tex|none section of texinfo source', noHelp => 1, }; $T2H_OPTIONS -> {'no-expand'} = { type => '=s', linkage => sub {set_expansion ($_[1], 0);}, verbose => 'Don\'t expand the given section of texinfo source', }; $T2H_OPTIONS -> {'noexpand'} = { type => '=s', linkage => $T2H_OPTIONS->{'no-expand'}->{'linkage'}, verbose => $T2H_OPTIONS->{'no-expand'}->{'verbose'}, noHelp => 1, }; $T2H_OPTIONS -> {'ifhtml'} = { type => '!', linkage => sub { set_expansion('html', $_[1]); }, verbose => "expand ifhtml and html sections", }; $T2H_OPTIONS -> {'ifinfo'} = { type => '!', linkage => sub { set_expansion('info', $_[1]); }, verbose => "expand ifinfo", }; $T2H_OPTIONS -> {'ifxml'} = { type => '!', linkage => sub { set_expansion('xml', $_[1]); }, verbose => "expand ifxml and xml sections", }; $T2H_OPTIONS -> {'ifdocbook'} = { type => '!', linkage => sub { set_expansion('docbook', $_[1]); }, verbose => "expand ifdocbook and docbook sections", }; $T2H_OPTIONS -> {'iftex'} = { type => '!', linkage => sub { set_expansion('tex', $_[1]); }, verbose => "expand iftex and tex sections", }; $T2H_OPTIONS -> {'ifplaintext'} = { type => '!', linkage => sub { set_expansion('plaintext', $_[1]); }, verbose => "expand ifplaintext sections", }; # actually a noop, since it is not used anywhere $T2H_OPTIONS -> {'invisible'} = { type => '=s', linkage => \$Texi2HTML::Config::INVISIBLE_MARK, verbose => 'use text in invisble anchor', noHelp => 2, }; $T2H_OPTIONS -> {'iso'} = { type => 'iso', linkage => \$Texi2HTML::Config::USE_ISO, verbose => 'if set, ISO8859 characters are used for special symbols (like copyright, etc)', noHelp => 1, }; $T2H_OPTIONS -> {'I'} = { type => '=s', linkage => \@Texi2HTML::Config::INCLUDE_DIRS, verbose => 'append $s to the @include search path', }; $T2H_OPTIONS -> {'conf-dir'} = { type => '=s', linkage => \@Texi2HTML::Config::CONF_DIRS, verbose => 'append $s to the init file directories', }; $T2H_OPTIONS -> {'P'} = { type => '=s', linkage => sub {unshift (@Texi2HTML::Config::PREPEND_DIRS, $_[1]);}, verbose => 'prepend $s to the @include search path', }; $T2H_OPTIONS -> {'top-file'} = { type => '=s', linkage => \$Texi2HTML::Config::TOP_FILE, verbose => 'use $s as top file, instead of .html', }; $T2H_OPTIONS -> {'toc-file'} = { type => '=s', linkage => \$Texi2HTML::Config::TOC_FILE, verbose => 'use $s as ToC file, instead of _toc.html', }; $T2H_OPTIONS -> {'frames'} = { type => '!', linkage => \$Texi2HTML::Config::FRAMES, verbose => 'output files which use HTML 4.0 frames (experimental)', noHelp => 1, }; $T2H_OPTIONS -> {'menu'} = { type => '!', linkage => \$Texi2HTML::Config::SHOW_MENU, verbose => 'output Texinfo menus', }; $T2H_OPTIONS -> {'number-sections'} = { type => '!', linkage => \$Texi2HTML::Config::NUMBER_SECTIONS, verbose => 'use numbered sections', }; $T2H_OPTIONS -> {'use-nodes'} = { type => '!', linkage => \$Texi2HTML::Config::USE_NODES, verbose => 'use nodes for sectionning', }; $T2H_OPTIONS -> {'node-files'} = { type => '!', linkage => \$Texi2HTML::Config::NODE_FILES, verbose => 'produce one file per node for cross references' }; $T2H_OPTIONS -> {'footnote-style'} = { type => '=s', linkage => sub {set_footnote_style ($_[0], $_[1]);}, verbose => 'output footnotes separate|end', }; $T2H_OPTIONS -> {'toc-links'} = { type => '!', linkage => \$Texi2HTML::Config::TOC_LINKS, verbose => 'create links from headings to toc entries' }; $T2H_OPTIONS -> {'split'} = { type => '=s', linkage => \$Texi2HTML::Config::SPLIT, verbose => 'split document on section|chapter|node else no splitting', }; $T2H_OPTIONS -> {'no-split'} = { type => '!', linkage => sub {$Texi2HTML::Config::SPLIT = '';}, verbose => 'no splitting of document', noHelp => 1, }; $T2H_OPTIONS -> {'header'} = { type => '!', linkage => \$Texi2HTML::Config::SECTION_NAVIGATION, verbose => 'output navigation headers for each section', }; $T2H_OPTIONS -> {'subdir'} = { type => '=s', linkage => \$Texi2HTML::Config::SUBDIR, verbose => 'put files in directory $s, not $cwd', noHelp => 1, }; $T2H_OPTIONS -> {'short-ext'} = { type => '!', linkage => \$Texi2HTML::Config::SHORTEXTN, verbose => 'use "htm" extension for output HTML files', }; $T2H_OPTIONS -> {'prefix'} = { type => '=s', linkage => \$Texi2HTML::Config::PREFIX, verbose => 'use as prefix for output files, instead of ', }; $T2H_OPTIONS -> {'o'} = { type => '=s', linkage => \$Texi2HTML::Config::OUT, verbose => 'output goes to $s (directory if split)', noHelp => 2, }; $T2H_OPTIONS -> {'output'} = { type => '=s', linkage => \$Texi2HTML::Config::OUT, verbose => 'output goes to $s (directory if split)', }; $T2H_OPTIONS -> {'no-validate'} = { type => '!', linkage => \$Texi2HTML::Config::NOVALIDATE, verbose => 'suppress node cross-reference validation', }; $T2H_OPTIONS -> {'short-ref'} = { type => '!', linkage => \$Texi2HTML::Config::SHORT_REF, verbose => 'if set, references are without section numbers', }; $T2H_OPTIONS -> {'idx-sum'} = { type => '!', linkage => \$Texi2HTML::Config::IDX_SUMMARY, verbose => 'if set, also output index summary', noHelp => 1, }; $T2H_OPTIONS -> {'def-table'} = { type => '!', linkage => \$Texi2HTML::Config::DEF_TABLE, verbose => 'if set, \@def.. are converted using tables.', noHelp => 1, }; # disambiguate verbose and version, like makeinfo does $T2H_OPTIONS -> {'v'} = { type => '!', linkage=> \$Texi2HTML::Config::VERBOSE, verbose => 'print progress info to stdout', noHelp => 2, }; $T2H_OPTIONS -> {'verbose'} = { type => '!', linkage=> \$Texi2HTML::Config::VERBOSE, verbose => 'print progress info to stdout', }; $T2H_OPTIONS -> {'document-language'} = { type => '=s', linkage => sub {set_document_language($_[1], 1)}, verbose => 'use $s as document language', }; $T2H_OPTIONS -> {'ignore-preamble-text'} = { type => '!', linkage => \$Texi2HTML::Config::IGNORE_PREAMBLE_TEXT, verbose => 'if set, ignore the text before @node and sectionning commands', noHelp => 1, }; $T2H_OPTIONS -> {'html-xref-prefix'} = { type => '=s', linkage => \$Texi2HTML::Config::EXTERNAL_DIR, verbose => '$s is the base dir for external manual references', noHelp => 1, }; $T2H_OPTIONS -> {'l2h'} = { type => '!', linkage => \$Texi2HTML::Config::L2H, verbose => 'if set, uses latex2html for @math and @tex', }; $T2H_OPTIONS -> {'l2h-l2h'} = { type => '=s', linkage => \$Texi2HTML::Config::L2H_L2H, verbose => 'program to use for latex2html translation', noHelp => 1, }; $T2H_OPTIONS -> {'l2h-skip'} = { type => '!', linkage => \$Texi2HTML::Config::L2H_SKIP, verbose => 'if set, tries to reuse previously latex2html output', noHelp => 1, }; $T2H_OPTIONS -> {'l2h-tmp'} = { type => '=s', linkage => \$Texi2HTML::Config::L2H_TMP, verbose => 'if set, uses $s as temporary latex2html directory', noHelp => 1, }; $T2H_OPTIONS -> {'l2h-file'} = { type => '=s', linkage => \$Texi2HTML::Config::L2H_FILE, verbose => 'if set, uses $s as latex2html init file', noHelp => 1, }; $T2H_OPTIONS -> {'l2h-clean'} = { type => '!', linkage => \$Texi2HTML::Config::L2H_CLEAN, verbose => 'if set, do not keep intermediate latex2html files for later reuse', noHelp => 1, }; $T2H_OPTIONS -> {'D'} = { type => '=s', linkage => sub {$value_initial{$_[1]} = 1;}, verbose => 'equivalent to Texinfo "@set $s 1"', noHelp => 1, }; $T2H_OPTIONS -> {'U'} = { type => '=s', linkage => sub {delete $value_initial{$_[1]};}, verbose => 'equivalent to Texinfo "@clear $s"', noHelp => 1, }; $T2H_OPTIONS -> {'init-file'} = { type => '=s', linkage => \&load_init_file, verbose => 'load init file $s' }; $T2H_OPTIONS -> {'css-include'} = { type => '=s', linkage => \@Texi2HTML::Config::CSS_FILES, verbose => 'use css file $s' }; $T2H_OPTIONS -> {'css-ref'} = { type => '=s', linkage => \@Texi2HTML::Config::CSS_REFS, verbose => 'generate reference to the CSS URL $s' }; $T2H_OPTIONS -> {'transliterate-file-names'} = { type => '!', linkage=> \$Texi2HTML::Config::TRANSLITERATE_NODE, verbose => 'produce file names in ASCII transliteration', }; $T2H_OPTIONS -> {'error-limit'} = { type => '=i', linkage => \$Texi2HTML::Config::ERROR_LIMIT, verbose => 'quit after NUM errors (default 1000).', }; $T2H_OPTIONS -> {'monolithic'} = { type => '!', linkage => \$Texi2HTML::Config::MONOLITHIC, verbose => 'output only one file including ToC, About...', noHelp => 1 }; ## ## obsolete cmd line options ## my $T2H_OBSOLETE_OPTIONS; $T2H_OBSOLETE_OPTIONS -> {'out-file'} = { type => '=s', linkage => sub {$Texi2HTML::Config::OUT = $_[1]; $Texi2HTML::Config::SPLIT = '';}, verbose => 'if set, all HTML output goes into file $s, obsoleted by "-output" with different semantics', noHelp => 2 }; $T2H_OBSOLETE_OPTIONS -> {'lang'} = { type => '=s', linkage => sub {set_document_language($_[1], 1)}, verbose => 'obsolete, use "--document-language" instead', noHelp => 2 }; $T2H_OBSOLETE_OPTIONS -> {'number'} = { type => '!', linkage => \$Texi2HTML::Config::NUMBER_SECTIONS, verbose => 'obsolete, use "--number-sections" instead', noHelp => 2 }; $T2H_OBSOLETE_OPTIONS -> {'separated-footnotes'} = { type => '!', linkage => \$Texi2HTML::Config::SEPARATED_FOOTNOTES, verbose => 'obsolete, use "--footnote-style" instead', noHelp => 2 }; $T2H_OBSOLETE_OPTIONS -> {'Verbose'} = { type => '!', linkage=> \$Texi2HTML::Config::VERBOSE, verbose => 'obsolete, use "--verbose" instead', noHelp => 2 }; $T2H_OBSOLETE_OPTIONS -> {init_file} = { type => '=s', linkage => \&load_init_file, verbose => 'obsolete, use "-init-file" instead', noHelp => 2 }; $T2H_OBSOLETE_OPTIONS -> {l2h_clean} = { type => '!', linkage => \$Texi2HTML::Config::L2H_CLEAN, verbose => 'obsolete, use "-l2h-clean" instead', noHelp => 2, }; $T2H_OBSOLETE_OPTIONS -> {l2h_l2h} = { type => '=s', linkage => \$Texi2HTML::Config::L2H_L2H, verbose => 'obsolete, use "-l2h-l2h" instead', noHelp => 2 }; $T2H_OBSOLETE_OPTIONS -> {l2h_skip} = { type => '!', linkage => \$Texi2HTML::Config::L2H_SKIP, verbose => 'obsolete, use "-l2h-skip" instead', noHelp => 2 }; $T2H_OBSOLETE_OPTIONS -> {l2h_tmp} = { type => '=s', linkage => \$Texi2HTML::Config::L2H_TMP, verbose => 'obsolete, use "-l2h-tmp" instead', noHelp => 2 }; $T2H_OBSOLETE_OPTIONS -> {out_file} = { type => '=s', linkage => sub {$Texi2HTML::Config::OUT = $_[1]; $Texi2HTML::Config::SPLIT = '';}, verbose => 'obsolete, use "-out-file" instead', noHelp => 2 }; $T2H_OBSOLETE_OPTIONS -> {short_ref} = { type => '!', linkage => \$Texi2HTML::Config::SHORT_REF, verbose => 'obsolete, use "-short-ref" instead', noHelp => 2 }; $T2H_OBSOLETE_OPTIONS -> {idx_sum} = { type => '!', linkage => \$Texi2HTML::Config::IDX_SUMMARY, verbose => 'obsolete, use "-idx-sum" instead', noHelp => 2 }; $T2H_OBSOLETE_OPTIONS -> {def_table} = { type => '!', linkage => \$Texi2HTML::Config::DEF_TABLE, verbose => 'obsolete, use "-def-table" instead', noHelp => 2 }; $T2H_OBSOLETE_OPTIONS -> {short_ext} = { type => '!', linkage => \$Texi2HTML::Config::SHORTEXTN, verbose => 'obsolete, use "-short-ext" instead', noHelp => 2 }; $T2H_OBSOLETE_OPTIONS -> {sec_nav} = { type => '!', linkage => \$Texi2HTML::Config::SECTION_NAVIGATION, verbose => 'obsolete, use "-header" instead', noHelp => 2 }; $T2H_OBSOLETE_OPTIONS -> {'sec-nav'} = { type => '!', linkage => \$Texi2HTML::Config::SECTION_NAVIGATION, verbose => 'obsolete, use "--header" instead', noHelp => 2 }; $T2H_OBSOLETE_OPTIONS -> {top_file} = { type => '=s', linkage => \$Texi2HTML::Config::TOP_FILE, verbose => 'obsolete, use "-top-file" instead', noHelp => 2 }; $T2H_OBSOLETE_OPTIONS -> {toc_file} = { type => '=s', linkage => \$Texi2HTML::Config::TOC_FILE, verbose => 'obsolete, use "-toc-file" instead', noHelp => 2 }; $T2H_OBSOLETE_OPTIONS -> {glossary} = { type => '!', linkage => \$Texi2HTML::Config::USE_GLOSSARY, verbose => "this does nothing", noHelp => 2, }; $T2H_OBSOLETE_OPTIONS -> {check} = { type => '!', linkage => sub {exit 0;}, verbose => "exit without doing anything", noHelp => 2, }; $T2H_OBSOLETE_OPTIONS -> {dump_texi} = { type => '!', linkage => \$Texi2HTML::Config::DUMP_TEXI, verbose => 'obsolete, use "-dump-texi" instead', noHelp => 1 }; $T2H_OBSOLETE_OPTIONS -> {frameset_doctype} = { type => '=s', linkage => \$Texi2HTML::Config::FRAMESET_DOCTYPE, verbose => 'obsolete, use "-frameset-doctype" instead', noHelp => 2 }; $T2H_OBSOLETE_OPTIONS -> {'no-section_navigation'} = { type => '!', linkage => sub {$Texi2HTML::Config::SECTION_NAVIGATION = 0;}, verbose => 'obsolete, use -nosec_nav', noHelp => 2, }; my $use_acc; # not used $T2H_OBSOLETE_OPTIONS -> {use_acc} = { type => '!', linkage => \$use_acc, verbose => 'obsolete, set to true unconditionnaly', noHelp => 2 }; $T2H_OBSOLETE_OPTIONS -> {expandinfo} = { type => '!', linkage => sub {push @Texi2HTML::Config::EXPAND, 'info';}, verbose => 'obsolete, use "-expand info" instead', noHelp => 2, }; $T2H_OBSOLETE_OPTIONS -> {expandtex} = { type => '!', linkage => sub {push @Texi2HTML::Config::EXPAND, 'tex';}, verbose => 'obsolete, use "-expand tex" instead', noHelp => 2, }; $T2H_OBSOLETE_OPTIONS -> {split_node} = { type => '!', linkage => sub{$Texi2HTML::Config::SPLIT = 'section';}, verbose => 'obsolete, use "-split section" instead', noHelp => 2, }; $T2H_OBSOLETE_OPTIONS -> {split_chapter} = { type => '!', linkage => sub{$Texi2HTML::Config::SPLIT = 'chapter';}, verbose => 'obsolete, use "-split chapter" instead', noHelp => 2, }; $T2H_OBSOLETE_OPTIONS -> {no_verbose} = { type => '!', linkage => sub {$Texi2HTML::Config::VERBOSE = 0;}, verbose => 'obsolete, use -noverbose instead', noHelp => 2, }; $T2H_OBSOLETE_OPTIONS -> {output_file} = { type => '=s', linkage => sub {$Texi2HTML::Config::OUT = $_[1]; $Texi2HTML::Config::SPLIT = '';}, verbose => 'obsolete, use --out-file instead', noHelp => 2 }; $T2H_OBSOLETE_OPTIONS -> {section_navigation} = { type => '!', linkage => \$Texi2HTML::Config::SECTION_NAVIGATION, verbose => 'obsolete, use --sec-nav instead', noHelp => 2, }; $T2H_OBSOLETE_OPTIONS -> {verbose} = { type => '!', linkage=> \$Texi2HTML::Config::VERBOSE, verbose => 'obsolete, use -Verbose instead', noHelp => 2 }; # read initialzation from $sysconfdir/texi2htmlrc or $HOME/.texi2htmlrc # (this is obsolete) my @rc_files = (); push @rc_files, "$sysconfdir/texi2htmlrc" if defined($sysconfdir); push @rc_files, "$ENV{'HOME'}/.texi2htmlrc" if (defined($ENV{HOME})); foreach my $i (@rc_files) { if (-e $i and -r $i) { print STDERR "# reading initialization file from $i\n" if ($T2H_VERBOSE); print STDERR "Reading config from $i is obsolete, use texi2html/$conf_file_name instead\n"; Texi2HTML::Config::load($i); } } # read initialization files foreach my $file (locate_init_file($conf_file_name, 1)) { print STDERR "# reading initialization file from $file\n" if ($T2H_VERBOSE); Texi2HTML::Config::load($file); } #+++############################################################################ # # # parse command-line options # # #---############################################################################ my $T2H_USAGE_TEXT = < {'help'} = { type => ':i', default => '', linkage => sub {$options->helpOptions($_[1]); print "\nSend bugs and suggestions to \n"; exit (0);}, verbose => "print help and exit" }; # this avoids getOptions defining twice 'help' and 'version'. $T2H_OBSOLETE_OPTIONS->{'help'} = 0; $T2H_OBSOLETE_OPTIONS->{'version'} = 0; $T2H_OBSOLETE_OPTIONS->{'verbose'} = 0; # this is more compatible with makeinfo. But it changes how command lines # are parsed, for example -init file.init dodesn't work anymore. #Getopt::Long::Configure ("gnu_getopt"); # some older version of GetOpt::Long don't have # Getopt::Long::Configure("pass_through") eval {Getopt::Long::Configure("pass_through");}; my $Configure_failed = $@ && <getOptions($T2H_OPTIONS, $T2H_USAGE_TEXT, "$THISVERSION\n")) { print STDERR "$Configure_failed" if $Configure_failed; die $T2H_FAILURE_TEXT; } if (@ARGV > 1) { eval {Getopt::Long::Configure("no_pass_through");}; if (! $options->getOptions($T2H_OBSOLETE_OPTIONS, $T2H_USAGE_TEXT, "$THISVERSION\n")) { print STDERR "$Configure_failed" if $Configure_failed; die $T2H_FAILURE_TEXT; } } # $T2H_DEBUG and $T2H_VERBOSE are shorthands $T2H_DEBUG = $Texi2HTML::Config::DEBUG; $T2H_VERBOSE = $Texi2HTML::Config::VERBOSE; # # read texi2html extensions (if any) # It is obsolete (obsoleted by -init-file). we keep it for backward # compatibility. my $extensions = 'texi2html.ext'; # extensions in working directory if (-f $extensions) { print STDERR "# reading extensions from $extensions\n" if $T2H_VERBOSE; require($extensions); } my $progdir; ($progdir = $0) =~ s/[^\/]+$//; if ($progdir && ($progdir ne './')) { $extensions = "${progdir}texi2html.ext"; # extensions in texi2html directory if (-f $extensions) { print STDERR "# reading extensions from $extensions\n" if $T2H_VERBOSE; require($extensions); } } #+++############################################################################ # # # evaluation of cmd line options # # #---############################################################################ # set the default 'args' entry to normal for each style hash (and each command # within) my $name_index = -1; my @hash_names = ('style_map', 'style_map_pre', 'style_map_texi', 'simple_format_style_map_texi'); foreach my $hash (\%Texi2HTML::Config::style_map, \%Texi2HTML::Config::style_map_pre, \%Texi2HTML::Config::style_map_texi, \%Texi2HTML::Config::simple_format_style_map_texi) { $name_index++; my $name = $hash_names[$name_index]; # name associated with hash ref foreach my $style (keys(%{$hash})) { next unless (ref($hash->{$style}) eq 'HASH'); $hash->{$style}->{'args'} = ['normal'] if (!exists($hash->{$style}->{'args'})); die "Bug: args not defined, but existing, for $style in $name" if (!defined($hash->{$style}->{'args'})); #print STDERR "DEFAULT($name, $hash) add normal as arg for $style ($hash->{$style}), $hash->{$style}->{'args'}\n"; } } my (%cross_ref_simple_map_texi, %cross_ref_style_map_texi, %cross_ref_texi_map, %cross_transliterate_style_map_texi, %cross_transliterate_texi_map); # setup hashes used for html manual cross references in texinfo %cross_ref_texi_map = %Texi2HTML::Config::texi_map; $cross_ref_texi_map{'enddots'} = '...'; %cross_ref_simple_map_texi = %Texi2HTML::Config::simple_map_texi; %cross_transliterate_texi_map = %cross_ref_texi_map; foreach my $command (keys(%Texi2HTML::Config::style_map_texi)) { $cross_ref_style_map_texi{$command} = {}; $cross_transliterate_style_map_texi{$command} = {}; foreach my $key (keys (%{$Texi2HTML::Config::style_map_texi{$command}})) { #print STDERR "$command, $key, $style_map_texi{$command}->{$key}\n"; $cross_ref_style_map_texi{$command}->{$key} = $Texi2HTML::Config::style_map_texi{$command}->{$key}; $cross_transliterate_style_map_texi{$command}->{$key} = $Texi2HTML::Config::style_map_texi{$command}->{$key}; } } $cross_ref_simple_map_texi{"\n"} = ' '; $cross_ref_simple_map_texi{"*"} = ' '; # Fill in the %style_type hash, a hash associating style @-comand with # the type, 'accent', real 'style', simple' style, or 'special'. # 'simple_style' styles don't extend accross lines. my %style_type = (); my @simple_styles = ('ctrl', 'w', 'url','uref','indicateurl','email', 'titlefont'); foreach my $style (keys(%Texi2HTML::Config::style_map)) { if (exists $Texi2HTML::Config::command_type{$style}) { $style_type{$style} = $Texi2HTML::Config::command_type{$style}; next; } if (ref($Texi2HTML::Config::style_map{$style} eq 'HASH')) { $style_type{$style} = $Texi2HTML::Config::style_map{$style}->{'type'} if (exists($Texi2HTML::Config::style_map{$style}->{'type'})); } else { $style_type{$style} = 'simple_style' if (grep {$_ eq $style} @simple_styles); } $style_type{$style} = 'style' unless (defined($style_type{$style})); } foreach my $accent (keys(%Texi2HTML::Config::unicode_accents), 'tieaccent', 'dotless') { if (exists $Texi2HTML::Config::command_type{$accent}) { $style_type{$accent} = $Texi2HTML::Config::command_type{$accent}; next; } $style_type{$accent} = 'accent'; } foreach my $special ('footnote', 'ref', 'xref', 'pxref', 'inforef', 'anchor', 'image', 'hyphenation') { if (exists $Texi2HTML::Config::command_type{$special}) { $style_type{$special} = $Texi2HTML::Config::command_type{$special}; next; } $style_type{$special} = 'special'; } # retro compatibility for $Texi2HTML::Config::EXPAND push (@Texi2HTML::Config::EXPAND, $Texi2HTML::Config::EXPAND) if ($Texi2HTML::Config::EXPAND); # correct %Texi2HTML::Config::texi_formats_map based on command line and init # variables $Texi2HTML::Config::texi_formats_map{'menu'} = 1 if ($Texi2HTML::Config::SHOW_MENU); foreach my $expanded (@Texi2HTML::Config::EXPAND) { $Texi2HTML::Config::texi_formats_map{"if$expanded"} = 1 if (exists($Texi2HTML::Config::texi_formats_map{"if$expanded"})); next unless (exists($Texi2HTML::Config::texi_formats_map{$expanded})); if (grep {$_ eq $expanded} @raw_regions) { $Texi2HTML::Config::texi_formats_map{$expanded} = 'raw'; } else { $Texi2HTML::Config::texi_formats_map{$expanded} = 1; } } foreach my $key (keys(%Texi2HTML::Config::texi_formats_map)) { unless ($Texi2HTML::Config::texi_formats_map{$key} eq 'raw') { set_no_line_macro($key, 1); set_no_line_macro("end $key", 1); } } # handle ifnot regions foreach my $region (keys (%Texi2HTML::Config::texi_formats_map)) { next if ($region =~ /^ifnot/); if ($Texi2HTML::Config::texi_formats_map{$region} and $region =~ /^if(\w+)$/) { $Texi2HTML::Config::texi_formats_map{"ifnot$1"} = 0; } } if ($T2H_VERBOSE) { print STDERR "# Expanded: "; foreach my $text_macro (keys(%Texi2HTML::Config::texi_formats_map)) { print STDERR "$text_macro " if ($Texi2HTML::Config::texi_formats_map{$text_macro}); } print STDERR "\n"; } # This is kept in that file although it is html formatting as it seems to # be rather obsolete $Texi2HTML::Config::INVISIBLE_MARK = '' if $Texi2HTML::Config::INVISIBLE_MARK eq 'xbm'; $T2H_DEBUG |= $DEBUG_TEXI if ($Texi2HTML::Config::DUMP_TEXI); # no user provided USE_UNICODE, use configure provided if (!defined($Texi2HTML::Config::USE_UNICODE)) { $Texi2HTML::Config::USE_UNICODE = '@USE_UNICODE@'; } # no user provided nor configured, run time test if ($Texi2HTML::Config::USE_UNICODE eq '@' .'USE_UNICODE@') { $Texi2HTML::Config::USE_UNICODE = 1; eval { require Encode; require Unicode::Normalize; Encode->import('encode'); }; $Texi2HTML::Config::USE_UNICODE = 0 if ($@); } elsif ($Texi2HTML::Config::USE_UNICODE) {# user provided or set by configure require Encode; require Unicode::Normalize; Encode->import('encode'); } # no user provided USE_UNIDECODE, use configure provided if (!defined($Texi2HTML::Config::USE_UNIDECODE)) { $Texi2HTML::Config::USE_UNIDECODE = '@USE_UNIDECODE@'; } # no user provided nor configured, run time test if ($Texi2HTML::Config::USE_UNIDECODE eq '@' .'USE_UNIDECODE@') { $Texi2HTML::Config::USE_UNIDECODE = 1; eval { require Text::Unidecode; Text::Unidecode->import('unidecode'); }; $Texi2HTML::Config::USE_UNIDECODE = 0 if ($@); } elsif ($Texi2HTML::Config::USE_UNIDECODE) {# user provided or set by configure require Text::Unidecode; Text::Unidecode->import('unidecode'); } print STDERR "# USE_UNICODE $Texi2HTML::Config::USE_UNICODE, USE_UNIDECODE $Texi2HTML::Config::USE_UNIDECODE \n" if ($T2H_VERBOSE); # Construct hashes used for cross references generation # Do it now as the user may have changed $USE_UNICODE foreach my $key (keys(%Texi2HTML::Config::unicode_map)) { if ($Texi2HTML::Config::unicode_map{$key} ne '') { if ($Texi2HTML::Config::USE_UNICODE) { $cross_ref_texi_map{$key} = chr(hex($Texi2HTML::Config::unicode_map{$key})); # cross_transliterate_texi_map is only used if USE_UNICODE or # USE_UNIDECODE is unset and TRANSLITERATE_NODE is set if (exists ($Texi2HTML::Config::transliterate_map{$Texi2HTML::Config::unicode_map{$key}})) { $cross_transliterate_texi_map{$key} = $Texi2HTML::Config::transliterate_map{$Texi2HTML::Config::unicode_map{$key}}; } else { $cross_transliterate_texi_map{$key} = chr(hex($Texi2HTML::Config::unicode_map{$key})); } } else { $cross_ref_texi_map{$key} = '_' . lc($Texi2HTML::Config::unicode_map{$key}); # cross_transliterate_texi_map is only used if USE_UNICODE or # USE_UNIDECODE is unset and TRANSLITERATE_NODE is set if (exists ($Texi2HTML::Config::transliterate_map{$Texi2HTML::Config::unicode_map{$key}})) { $cross_transliterate_texi_map{$key} = $Texi2HTML::Config::transliterate_map{$Texi2HTML::Config::unicode_map{$key}}; } else { $cross_transliterate_texi_map{$key} = '_' . lc($Texi2HTML::Config::unicode_map{$key}); } } } } #if ($Texi2HTML::Config::USE_UNICODE and $Texi2HTML::Config::TRANSLITERATE_NODE if ($Texi2HTML::Config::TRANSLITERATE_NODE and ( ($Texi2HTML::Config::USE_UNICODE and ! $Texi2HTML::Config::USE_UNIDECODE) or !$Texi2HTML::Config::USE_UNICODE)) { foreach my $key (keys (%Texi2HTML::Config::transliterate_accent_map)) { $Texi2HTML::Config::transliterate_map{$key} = $Texi2HTML::Config::transliterate_accent_map{$key}; } } foreach my $key (keys(%cross_ref_style_map_texi)) { if ($style_type{$key} eq 'accent' and (ref($cross_ref_style_map_texi{$key}) eq 'HASH')) { if ($Texi2HTML::Config::USE_UNICODE) { $cross_ref_style_map_texi{$key}->{'function'} = \&Texi2HTML::Config::t2h_utf8_accent; } else { $cross_ref_style_map_texi{$key}->{'function'} = \&Texi2HTML::Config::t2h_nounicode_cross_manual_accent; } # this is only used if TRANSLITERATE_NODE is set and USE_UNICODE # or USE_UNIDECODE is not set $cross_transliterate_style_map_texi{$key}->{'function'} = \&Texi2HTML::Config::t2h_transliterate_cross_manual_accent; } } if ($Texi2HTML::Config::L2H) { push @Texi2HTML::Config::command_handler_init, \&Texi2HTML::LaTeX2HTML::init; push @Texi2HTML::Config::command_handler_process, \&Texi2HTML::LaTeX2HTML::latex2html; push @Texi2HTML::Config::command_handler_finish, \&Texi2HTML::LaTeX2HTML::finish; $Texi2HTML::Config::command_handler{'math'} = { 'init' => \&Texi2HTML::LaTeX2HTML::to_latex, 'expand' => \&Texi2HTML::LaTeX2HTML::do_tex }; $Texi2HTML::Config::command_handler{'tex'} = { 'init' => \&Texi2HTML::LaTeX2HTML::to_latex, 'expand' => \&Texi2HTML::LaTeX2HTML::do_tex }; } if (defined($Texi2HTML::Config::DO_CONTENTS)) { $Texi2HTML::GLOBAL{'DO_CONTENTS'} = $Texi2HTML::Config::DO_CONTENTS; } if (defined($Texi2HTML::Config::DO_SCONTENTS)) { $Texi2HTML::GLOBAL{'DO_SCONTENTS'} = $Texi2HTML::Config::DO_SCONTENTS; } # FIXME encoding for first file or all files? if (defined($Texi2HTML::Config::IN_ENCODING)) { $Texi2HTML::GLOBAL{'IN_ENCODING'} = $Texi2HTML::Config::IN_ENCODING; } if (defined($Texi2HTML::Config::DOCUMENT_ENCODING)) { $Texi2HTML::GLOBAL{'DOCUMENT_ENCODING'} = $Texi2HTML::Config::DOCUMENT_ENCODING; } # Backward compatibility for deprecated $Texi2HTML::Config::ENCODING $Texi2HTML::Config::ENCODING_NAME = $Texi2HTML::Config::ENCODING if (!defined($Texi2HTML::Config::ENCODING_NAME) and defined($Texi2HTML::Config::ENCODING)); # APA: There's got to be a better way: if ($Texi2HTML::Config::TEST) { # to generate files similar to reference ones to be able to check for # real changes we use these dummy values if -test is given $T2H_USER = 'a tester'; $THISPROG = 'texi2html'; setlocale( LC_ALL, "C" ); } else { # the eval prevents this from breaking on system which do not have # a proper getpwuid implemented eval { ($T2H_USER = (getpwuid ($<))[6]) =~ s/,.*//;}; # Who am i # APA: Provide Windows NT workaround until getpwuid gets # implemented there. $T2H_USER = $ENV{'USERNAME'} unless (defined($T2H_USER)); } $T2H_USER = &$I('unknown') unless (defined($T2H_USER)); $Texi2HTML::GLOBAL{'debug_l2h'} = 1 if ($T2H_DEBUG & $DEBUG_L2H); # # can I use ISO8859 characters? (HTML+) # if ($Texi2HTML::Config::USE_ISO) { foreach my $thing (keys(%Texi2HTML::Config::iso_symbols)) { next unless exists ($::things_map_ref->{$thing}); $::things_map_ref->{$thing} = $Texi2HTML::Config::iso_symbols{$thing}; $::pre_map_ref->{$thing} = $Texi2HTML::Config::iso_symbols{$thing}; $Texi2HTML::Config::simple_format_texi_map{$thing} = $Texi2HTML::Config::iso_symbols{$thing}; } # we don't override the user defined quote, but beware that this works # only if the hardcoded defaults, '`' and "'" match with the defaults # in the default init file $Texi2HTML::Config::OPEN_QUOTE_SYMBOL = $Texi2HTML::Config::iso_symbols{'`'} if (exists($Texi2HTML::Config::iso_symbols{'`'}) and ($Texi2HTML::Config::OPEN_QUOTE_SYMBOL eq '`')); $Texi2HTML::Config::CLOSE_QUOTE_SYMBOL = $Texi2HTML::Config::iso_symbols{"'"} if (exists($Texi2HTML::Config::iso_symbols{"'"}) and ($Texi2HTML::Config::CLOSE_QUOTE_SYMBOL eq "'")); } # parse texinfo cnf file for external manual specifications. This was # discussed on texinfo list but not in makeinfo for now. my @texinfo_htmlxref_files = locate_init_file ($texinfo_htmlxref, 1, \@texinfo_config_dirs); foreach my $file (@texinfo_htmlxref_files) { print STDERR "html refs config file: $file\n" if ($T2H_DEBUG); unless (open (HTMLXREF, $file)) { warn "Cannot open html refs config file ${file}: $!"; next; } while (my $hline = ) { my $line = $hline; $hline =~ s/[#]\s.*//; $hline =~ s/^\s*//; next if $hline =~ /^\s*$/; my @htmlxref = split /\s+/, $hline; my $manual = shift @htmlxref; my $split_or_mono = shift @htmlxref; if (!defined($split_or_mono) or ($split_or_mono ne 'split' and $split_or_mono ne 'mono')) { echo_warn("Bad line in $file: $line"); next; } my $href = shift @htmlxref; next if (exists($Texi2HTML::GLOBAL{'htmlxref'}->{$manual}->{$split_or_mono}) and exists($Texi2HTML::GLOBAL{'htmlxref'}->{$manual}->{$split_or_mono}->{'href'})); if (defined($href)) { $href =~ s/\/*$// if ($split_or_mono eq 'split'); $Texi2HTML::GLOBAL{'htmlxref'}->{$manual}->{$split_or_mono}->{'href'} = $href; } else { $Texi2HTML::GLOBAL{'htmlxref'}->{$manual}->{$split_or_mono} = {}; } } close (HTMLXREF); } if ($T2H_DEBUG) { foreach my $manual (keys(%{$Texi2HTML::GLOBAL{'htmlxref'}})) { foreach my $split ('split', 'mono') { my $href = 'NO'; next unless (exists($Texi2HTML::GLOBAL{'htmlxref'}->{$manual}->{$split})); $href = $Texi2HTML::GLOBAL{'htmlxref'}->{$manual}->{$split}->{'href'} if exists($Texi2HTML::GLOBAL{'htmlxref'}->{$manual}->{$split}->{'href'}); print STDERR "$manual: $split, href: $href\n"; } } } # resulting files splitting if ($Texi2HTML::Config::SPLIT =~ /section/i) { $Texi2HTML::Config::SPLIT = 'section'; } elsif ($Texi2HTML::Config::SPLIT =~ /node/i) { $Texi2HTML::Config::SPLIT = 'node'; } elsif ($Texi2HTML::Config::SPLIT =~ /chapter/i) { $Texi2HTML::Config::SPLIT = 'chapter'; } else { $Texi2HTML::Config::SPLIT = ''; } $Texi2HTML::Config::SPLIT_INDEX = 0 unless $Texi2HTML::Config::SPLIT; # Something like backward compatibility if ($Texi2HTML::Config::SPLIT and defined($Texi2HTML::Config::SUBDIR) and ($Texi2HTML::Config::SUBDIR ne '') and (!defined($Texi2HTML::Config::OUT) or ($Texi2HTML::Config::OUT eq ''))) { $Texi2HTML::Config::OUT = $Texi2HTML::Config::SUBDIR; } die "output to STDOUT and split or frames incompatible\n" if (($Texi2HTML::Config::SPLIT or $Texi2HTML::Config::FRAMES) and ($Texi2HTML::Config::OUT eq '-')); if ($Texi2HTML::Config::SPLIT and ($Texi2HTML::Config::OUT eq '.')) {# This is to avoid trouble with latex2html $Texi2HTML::Config::OUT = ''; } my @include_dirs_orig = @Texi2HTML::Config::INCLUDE_DIRS; # extension $Texi2HTML::GLOBAL{'extension'} = $Texi2HTML::Config::EXTENSION; if ($Texi2HTML::Config::SHORTEXTN) { $Texi2HTML::GLOBAL{'extension'} = "htm"; } # # file name business # my $docu_dir; # directory of the document my $docu_name; # basename of the document my $docu_rdir; # directory for the output my $docu_toc; # document's table of contents my $docu_stoc; # document's short toc my $docu_foot; # document's footnotes my $docu_about; # about this document my $docu_top; # document top my $docu_doc; # document (or document top of split) my $docu_frame; # main frame file my $docu_toc_frame; # toc frame file my $path_to_working_dir; # relative path leading to the working # directory from the document directory my $docu_doc_file; my $docu_toc_file; my $docu_stoc_file; my $docu_foot_file; my $docu_about_file; my $docu_top_file; my $docu_frame_file; my $docu_toc_frame_file; sub set_docu_names($$) { my $docu_base_name = shift; my $file_nr = shift; if ($docu_base_name =~ /(.*\/)/) { $docu_dir = $1; chop($docu_dir); $docu_name = $docu_base_name; $docu_name =~ s/.*\///; } else { $docu_dir = '.'; $docu_name = $docu_base_name; } @Texi2HTML::Config::INCLUDE_DIRS = @include_dirs_orig; unshift(@Texi2HTML::Config::INCLUDE_DIRS, $docu_dir); unshift(@Texi2HTML::Config::INCLUDE_DIRS, @Texi2HTML::Config::PREPEND_DIRS); # AAAA $docu_name = $Texi2HTML::Config::PREFIX if ($Texi2HTML::Config::PREFIX and ($file_nr == 0)); # subdir $docu_rdir = ''; if ($Texi2HTML::Config::SPLIT) { if (defined($Texi2HTML::Config::OUT) and ($file_nr == 0)) { $docu_rdir = $Texi2HTML::Config::OUT; } else { $docu_rdir = $docu_name; } if ($docu_rdir ne '') { $docu_rdir =~ s|/*$||; $docu_rdir .= '/'; } } else { my $out_file; # AAAA # even if the out file is not set by OUT, in case it is not the first # file, the out directory is still used if (defined($Texi2HTML::Config::OUT) and $Texi2HTML::Config::OUT ne '') { $out_file = $Texi2HTML::Config::OUT; } else { $out_file = $docu_name; } if ($out_file =~ m|(.*)/|) {# there is a leading directories $docu_rdir = "$1/"; } } if ($docu_rdir ne '') { unless (-d $docu_rdir) { if ( mkdir($docu_rdir, oct(755))) { print STDERR "# created directory $docu_rdir\n" if ($T2H_VERBOSE); } else { die "$ERROR can't create directory $docu_rdir\n"; } } print STDERR "# putting result files into directory $docu_rdir\n" if ($T2H_VERBOSE); } else { print STDERR "# putting result files into current directory \n" if ($T2H_VERBOSE); } # We don't use "./" as $docu_rdir when $docu_rdir is the current directory # because it is problematic for latex2html. To test writability with -w, # however we need a real directory. my $result_rdir = $docu_rdir; $result_rdir = "." if ($docu_rdir eq ''); unless (-w $result_rdir) { $docu_rdir = 'current directory' if ($docu_rdir eq ''); die "$ERROR $docu_rdir not writable\n"; } # relative path leading to the working directory from the document directory $path_to_working_dir = $docu_rdir; if ($docu_rdir ne '') { my $cwd = cwd; my $docu_path = $docu_rdir; $docu_path = $cwd . '/' . $docu_path unless ($docu_path =~ /^\//); my @result = (); # this code simplify the paths. The cwd is absolute, while in the # document path there may be some .., a .. is removed with the # previous path element, such that something like # /cwd/directory/../somewhere/ # leads to # /cwd/somewhere/ # with directory/.. removed foreach my $element (split /\//, File::Spec->canonpath($docu_path)) { if ($element eq '') { push @result, ''; } elsif ($element eq '..') { if (@result and ($result[-1] eq '')) { print STDERR "Too much .. in absolute file name\n"; } elsif (@result and ($result[-1] ne '..')) { pop @result; } else { push @result, $element; } } else { push @result, $element; } } $path_to_working_dir = File::Spec->abs2rel($cwd, join ('/', @result)); # this should not be needed given what canonpath does $path_to_working_dir =~ s:/*$::; $path_to_working_dir .= '/' unless($path_to_working_dir eq ''); } my $docu_ext = $Texi2HTML::THISDOC{'extension'}; # out_dir is undocummented, should never be used, use destination_directory $Texi2HTML::THISDOC{'out_dir'} = $docu_rdir; $Texi2HTML::THISDOC{'destination_directory'} = $docu_rdir; $Texi2HTML::THISDOC{'file_base_name'} = $docu_name; $docu_doc = $docu_name . (defined($docu_ext) ? ".$docu_ext" : ""); # document's contents if ($Texi2HTML::Config::SPLIT) { # AAAA if (defined($Texi2HTML::Config::TOP_FILE) and ($Texi2HTML::Config::TOP_FILE ne '') and ($file_nr == 0)) { $docu_top = $Texi2HTML::Config::TOP_FILE; } else { $docu_top = $docu_doc; } } else { # AAAA if (defined($Texi2HTML::Config::OUT) and ($file_nr == 0)) { my $out_file = $Texi2HTML::Config::OUT; $out_file =~ s|.*/||; $docu_doc = $out_file if ($out_file !~ /^\s*$/); } if (defined $Texi2HTML::Config::element_file_name) { my $docu_doc_set = &$Texi2HTML::Config::element_file_name (undef, "doc", $docu_name); $docu_doc = $docu_doc_set if (defined($docu_doc_set)); } $docu_top = $docu_doc; } if ($Texi2HTML::Config::SPLIT or !$Texi2HTML::Config::MONOLITHIC) { if (defined $Texi2HTML::Config::element_file_name) { $docu_toc = &$Texi2HTML::Config::element_file_name (undef, "toc", $docu_name); $docu_stoc = &$Texi2HTML::Config::element_file_name (undef, "stoc", $docu_name); $docu_foot = &$Texi2HTML::Config::element_file_name (undef, "foot", $docu_name); $docu_about = &$Texi2HTML::Config::element_file_name (undef, "about", $docu_name); # $docu_top may be overwritten later. } if (!defined($docu_toc)) { my $default_toc = "${docu_name}_toc"; $default_toc .= ".$docu_ext" if (defined($docu_ext)); # AAAA if (defined($Texi2HTML::Config::TOC_FILE) and ($Texi2HTML::Config::TOC_FILE ne '') and ($file_nr == 0)) { $docu_toc = $Texi2HTML::Config::TOC_FILE; } else { $docu_toc = $default_toc; } } if (!defined($docu_stoc)) { $docu_stoc = "${docu_name}_ovr"; $docu_stoc .= ".$docu_ext" if (defined($docu_ext)); } if (!defined($docu_foot)) { $docu_foot = "${docu_name}_fot"; $docu_foot .= ".$docu_ext" if (defined($docu_ext)); } if (!defined($docu_about)) { $docu_about = "${docu_name}_abt"; $docu_about .= ".$docu_ext" if (defined($docu_ext)); } } else { $docu_toc = $docu_foot = $docu_stoc = $docu_about = $docu_doc; } # Note that file extension has already been added here. if ($Texi2HTML::Config::FRAMES) { if (defined $Texi2HTML::Config::element_file_name) { $docu_frame = &$Texi2HTML::Config::element_file_name (undef, "frame", $docu_name); $docu_toc_frame = &$Texi2HTML::Config::element_file_name (undef, "toc_frame", $docu_name); } } if (!defined($docu_frame)) { $docu_frame = "${docu_name}_frame"; $docu_frame .= ".$docu_ext" if (defined($docu_ext)); } if (!defined($docu_toc_frame)) { $docu_toc_frame = "${docu_name}_toc_frame"; $docu_toc_frame .= ".$docu_ext" if (defined($docu_ext)); } if ($T2H_VERBOSE) { print STDERR "# Files and directories:\n"; print STDERR "# rdir($docu_rdir) path_to_working_dir($path_to_working_dir)\n"; print STDERR "# doc($docu_doc) top($docu_top) toc($docu_toc) stoc($docu_stoc)\n"; print STDERR "# foot($docu_foot) about($docu_about) frame($docu_toc) toc_frame($docu_toc_frame)\n"; } $docu_doc_file = "$docu_rdir$docu_doc"; $docu_toc_file = "$docu_rdir$docu_toc"; $docu_stoc_file = "$docu_rdir$docu_stoc"; $docu_foot_file = "$docu_rdir$docu_foot"; $docu_about_file = "$docu_rdir$docu_about"; $docu_top_file = "$docu_rdir$docu_top"; $docu_frame_file = "$docu_rdir$docu_frame"; $docu_toc_frame_file = "$docu_rdir$docu_toc_frame"; # For use in init files $Texi2HTML::THISDOC{'filename'}->{'top'} = $docu_top; $Texi2HTML::THISDOC{'filename'}->{'foot'} = $docu_foot; $Texi2HTML::THISDOC{'filename'}->{'stoc'} = $docu_stoc; $Texi2HTML::THISDOC{'filename'}->{'about'} = $docu_about; $Texi2HTML::THISDOC{'filename'}->{'toc'} = $docu_toc; # FIXME document that $Texi2HTML::THISDOC{'filename'}->{'toc_frame'} = $docu_toc_frame; $Texi2HTML::THISDOC{'filename'}->{'frame'} = $docu_frame; } # # Common initializations # sub texinfo_initialization($) { my $pass = shift; # All the initialization used the last @documentlanguage found during # pass_structure. Now we reset it, if it is not set on the command line # such that the @documentlanguage macros are used when they arrive # FIXME ask on bug-texinfo if (!$Texi2HTML::GLOBAL{'current_lang'}) { set_document_language($Texi2HTML::Config::LANG) if defined($Texi2HTML::Config::LANG); # $LANG isn't known set_document_language('en') unless ($Texi2HTML::THISDOC{'current_lang'}); } # reset the @set/@clear values %value = %value_initial; # set_special_names(); foreach my $init_mac ('everyheading', 'everyfooting', 'evenheading', 'evenfooting', 'oddheading', 'oddfooting', 'headings', 'allowcodebreaks', 'frenchspacing', 'exampleindent', 'firstparagraphindent', 'paragraphindent', 'clickstyle') { $Texi2HTML::THISDOC{$init_mac} = undef; delete $Texi2HTML::THISDOC{$init_mac}; } } #+++########################################################################### # # # Pass texi: read source, handle variable, ignored text, # # # #---########################################################################### my @fhs = (); # hold the file handles to read #my @lines = (); # whole document #my @lines_numbers = (); # line number, originating file associated with # whole document my $macros = undef; # macros. reference on a hash my %info_enclose = (); # macros defined with definfoenclose my @floats = (); # floats list my %floats = (); # floats by style sub initialise_state_texi($) { my $state = shift; $state->{'texi'} = 1; # for substitute_text and close_stack: # 1 if pass_texi/scan_texi is to be used $state->{'macro_inside'} = 0 unless(defined($state->{'macro_inside'})); $state->{'ifvalue_inside'} = 0 unless(defined($state->{'ifvalue_inside'})); $state->{'arg_expansion'} = 0 unless(defined($state->{'arg_expansion'})); } sub pass_texi($) { my $input_file_name = shift; #my $texi_line_number = { 'file_name' => '', 'line_nr' => 0, 'macro' => '' }; my @lines = (); # whole document my @lines_numbers = (); # line number, originating file associated with # whole document my @first_lines = (); my $first_lines = 1; # is it the first lines my $state = {}; # holds the informations about the context # to pass it down to the functions initialise_state_texi($state); my $texi_line_number; ($texi_line_number, $state->{'input_spool'}) = open_file($input_file_name, ''); my @stack; my $text; my $cline; INPUT_LINE: while (1) { ($cline, $state->{'input_spool'}) = next_line($texi_line_number); last if (!defined($cline)); # # remove the lines preceding \input or an @-command # if ($first_lines) { if ($cline =~ /^\\input/) { push @first_lines, $cline; $first_lines = 0; next; } if ($cline =~ /^\s*\@/) { $first_lines = 0; } else { push @first_lines, $cline; next; } } #print STDERR "PASS_TEXI($texi_line_number->{'line_nr'})$cline"; my $chomped_line = $cline; if (scan_texi ($cline, \$text, \@stack, $state, $texi_line_number) and chomp($chomped_line)) { #print STDERR "==> new page (line_nr $texi_line_number->{'line_nr'},$texi_line_number->{'file_name'},$texi_line_number->{'macro'})\n"; push (@lines_numbers, { 'file_name' => $texi_line_number->{'file_name'}, 'line_nr' => $texi_line_number->{'line_nr'}, 'macro' => $texi_line_number->{'macro'} }); } #dump_stack (\$text, \@stack, $state); if ($state->{'bye'}) { #dump_stack(\$text, \@stack, $state); # close stack after bye #print STDERR "close stack after bye\n"; close_stack_texi_structure(\$text, \@stack, $state, $texi_line_number); #dump_stack(\$text, \@stack, $state); } next if (@stack); $cline = $text; $text = ''; if (!defined($cline)) {# FIXME: remove the error message if it is reported too often print STDERR "# \$cline undefined after scan_texi. This may be a bug, or not.\n"; print STDERR "# Report (with texinfo file) if you want, otherwise ignore that message.\n"; next unless ($state->{'bye'}); } push @lines, split_lines($cline); last if ($state->{'bye'}); } # close stack at the end of pass texi #print STDERR "close stack at the end of pass texi\n"; close_stack_texi_structure(\$text, \@stack, $state, $texi_line_number); push @lines, split_lines($text); print STDERR "# end of pass texi\n" if $T2H_VERBOSE; return (\@lines, \@first_lines, \@lines_numbers); } #+++########################################################################### # # # Pass structure: parse document structure # # # #---########################################################################### sub initialise_state_structure($) { my $state = shift; $state->{'structure'} = 1; # for substitute_text and close_stack: # 1 if pass_structure/scan_structure is # to be used $state->{'menu'} = 0; # number of opened menus $state->{'detailmenu'} = 0; # number of opened detailed menus $state->{'sectionning_base'} = 0; # current base sectionning level $state->{'table_stack'} = [ "no table" ]; # a stack of opened tables/lists # seems to be only debug if (exists($state->{'region_lines'}) and !defined($state->{'region_lines'})) { delete ($state->{'region_lines'}); print STDERR "Bug: state->{'region_lines'} exists but undef.\n"; } } # This is a virtual element for things appearing before @node and # sectionning commands my $element_before_anything; # # initial counters. Global variables for pass_structure. # my $document_idx_num; my $document_sec_num; my $document_head_num; my $document_anchor_num; # section to level hash not taking into account raise and lower sections my %sec2level; # initial state for the special regions. my %region_initial_state; my %region_lines; # This is a place for index entries, anchors and so on appearing in # copying or documentdescription my $no_element_associated_place; my @nodes_list; # nodes in document reading order # each member is a reference on a hash my @sections_list; # sections in reading order # each member is a reference on a hash my @all_elements; # sectionning elements (nodes and sections) # in reading order. Each member is a reference # on a hash which also appears in %nodes, # @sections_list @nodes_list, @elements_list my @elements_list; # all the resulting elements in document order my %sections; # sections hash. The key is the section number my %headings; # headings hash. The key is the heading number my $section_top; # @top section my $element_top; # Top element my $node_top; # Top node my $node_first; # First node my $element_index; # element with first index my $element_chapter_index; # chapter with first index my $element_first; # first element my $element_last; # last element my %special_commands; # hash for the commands specially handled # by the user # element for content and shortcontent if on a separate page my %content_element; # common code for headings and sections sub new_section_heading($$$) { my $command = shift; my $name = shift; my $state = shift; $name = normalise_space($name); $name = '' if (!defined($name)); # no increase if in @copying and the like. Also no increase if it is top # since top has number 0. my $docid; my $num; my $section_ref = { 'texi' => $name, 'level' => $sec2level{$command}, 'tag' => $command, }; return $section_ref; } sub scan_node_line($) { my $node_line = shift; $node_line =~ s/^\@node\s+//; $node_line =~ s/\s*$//; my @command_stack; my @results; my $node_arg = ''; while (1) { if ($node_line =~ s/^([^{},@]*)\@(["'~\@\}\{,\.!\?\s\*\-\^`=:\|\/\\])//o or $node_line =~ s/^([^{}@,]*)\@([a-zA-Z][\w-]*)([\s\{\}\@])/$3/o or $node_line =~ s/^([^{},@]*)\@([a-zA-Z][\w-]*)$//o) { $node_arg .= $1; my $macro = $2; $node_arg .= "\@$macro"; $macro = $alias{$macro} if (exists($alias{$macro})); if ($node_line =~ s/^{//) { push @command_stack, $macro; $node_arg .= '{'; } } elsif ($node_line =~ s/^([^{},]*)([{}])//o) { $node_arg .= $1 . $2; my $brace = $2; if (@command_stack) { pop @command_stack; } } elsif ($node_line =~ s/^([^,]*)[,]//o) { $node_arg .= $1; if (@command_stack) { $node_arg .= ','; } else { push @results, normalise_node($node_arg); $node_arg = ''; } } else { $node_arg .= $node_line; push @results, normalise_node($node_arg); return @results; } } } sub pass_structure($$) { my $texi_lines = shift; my $lines_numbers = shift; my @doc_lines; # whole document my @doc_numbers; # whole document line numbers and file names my $state = {}; # holds the informations about the context # to pass it down to the functions initialise_state_structure($state); $state->{'element'} = $element_before_anything; $state->{'place'} = $element_before_anything->{'place'}; my @stack; my $text; my $line_nr; while (@$texi_lines or $state->{'in_deff_line'}) { my $cline = shift @$texi_lines; my $chomped_line = $cline; if (@$texi_lines and !chomp($chomped_line)) { $texi_lines->[0] = $cline . $texi_lines->[0]; next; } if ($state->{'in_deff_line'}) { # line stored in $state->{'in_deff_line'} was protected by @ # and can be concatenated with the next line if (defined($cline)) { $cline = $state->{'in_deff_line'} . $cline; } else {# end of line protected at the very end of the file $cline = $state->{'in_deff_line'}; } delete $state->{'in_deff_line'}; } $line_nr = shift (@$lines_numbers); #print STDERR "PASS_STRUCTURE: $cline"; if (!$state->{'raw'} and !$state->{'verb'}) { my $tag = ''; if ($cline =~ /^\s*\@(\w+)\b/) { $tag = $1; } # # analyze the tag # if ($tag and $tag eq 'node' or (defined($sec2level{$tag}) and ($tag !~ /heading/)) or $tag eq 'printindex' or ($tag eq 'insertcopying' and $Texi2HTML::Config::INLINE_INSERTCOPYING)) { my @added_lines = ($cline); my @added_numbers = ($line_nr); if ($tag eq 'node' or defined($sec2level{$tag})) {# in pass structure node shouldn't appear in formats close_stack_texi_structure(\$text, \@stack, $state, $line_nr); if (exists($state->{'region_lines'})) { push @{$region_lines{$state->{'region_lines'}->{'format'}}}, split_lines($text); push @doc_lines, split_lines($text) if ($Texi2HTML::Config::region_formats_kept{$state->{'region_lines'}->{'format'}}); $state->{'region_lines'}->{'number'} = 0; close_region($state); } else { push @doc_lines, split_lines($text); } $text = ''; } if ($tag eq 'node') { my $node_ref; my $auto_directions; my @node_res = scan_node_line($cline); $auto_directions = 1 if (scalar(@node_res) == 1); my ($node, $node_next, $node_prev, $node_up) = @node_res; if (defined($node) and ($node ne '')) { if (exists($nodes{$node}) and defined($nodes{$node}) and $nodes{$node}->{'seen'}) { echo_error ("Duplicate node found: $node", $line_nr); next; } else { if (exists($nodes{$node}) and defined($nodes{$node})) { # node appeared in a menu $node_ref = $nodes{$node}; } else { my $first; $first = 1 if (!defined($node_ref)); $node_ref = {}; $node_first = $node_ref if ($first); $nodes{$node} = $node_ref; } $node_ref->{'node'} = 1; $node_ref->{'tag'} = 'node'; $node_ref->{'tag_level'} = 'node'; $node_ref->{'texi'} = $node; $node_ref->{'seen'} = 1; $node_ref->{'automatic_directions'} = $auto_directions; $node_ref->{'place'} = []; $node_ref->{'current_place'} = []; merge_element_before_anything($node_ref); $node_ref->{'index_names'} = []; $state->{'place'} = $node_ref->{'current_place'}; $state->{'element'} = $node_ref; $state->{'node_ref'} = $node_ref; # makeinfo treats differently case variants of # top in nodes and anchors and in refs commands and # refs from nodes. if ($node =~ /^top$/i) { if (!defined($node_top)) { $node_top = $node_ref; $node_top->{'texi'} = 'Top'; delete $nodes{$node}; $nodes{$node_top->{'texi'}} = $node_ref; } else { # All the refs are going to point to the first Top echo_warn ("Top node already exists", $line_nr); #warn "$WARN Top node already exists\n"; } } unless (@nodes_list) { $node_ref->{'first'} = 1; } push (@nodes_list, $node_ref); push @all_elements, $node_ref; } } else { echo_error ("Node is undefined: $cline (eg. \@node NODE-NAME, NEXT, PREVIOUS, UP)", $line_nr); next; } if (defined($node_next) and ($node_next ne '')) { $node_ref->{'node_next'} = $node_next; } if (defined($node_prev) and ($node_prev ne '')) { $node_ref->{'node_prev'} = $node_prev; } if (defined($node_up) and ($node_up ne '')) { $node_ref->{'node_up'} = $node_up; } } elsif (defined($sec2level{$tag})) { # section if ($cline =~ /^\@$tag\s*(.*)$/) { my $name = $1; my $section_ref = new_section_heading($tag, $name, $state); $document_sec_num++ if($tag ne 'top'); $section_ref->{'sec_num'} = $document_sec_num; $section_ref->{'id'} = "SEC$document_sec_num"; $section_ref->{'seen'} = 1; $section_ref->{'index_names'} = []; $section_ref->{'current_place'} = []; $section_ref->{'place'} = []; $section_ref->{'section'} = 1; if ($tag eq 'top') { $section_ref->{'top'} = 1; $section_ref->{'number'} = ''; $section_ref->{'id'} = "SEC_Top"; $section_ref->{'sec_num'} = 0; $sections{0} = $section_ref; $section_top = $section_ref; } else { $sections{$section_ref->{'sec_num'}} = $section_ref; } merge_element_before_anything($section_ref); if ($state->{'node_ref'}) { $section_ref->{'node_ref'} = $state->{'node_ref'}; push @{$state->{'node_ref'}->{'sections'}}, $section_ref; } if ($state->{'node_ref'} and !exists($state->{'node_ref'}->{'with_section'})) { my $node_ref = $state->{'node_ref'}; $section_ref->{'with_node'} = $node_ref; $section_ref->{'titlefont'} = $node_ref->{'titlefont'}; $node_ref->{'with_section'} = $section_ref; $node_ref->{'top'} = 1 if ($tag eq 'top'); } if (! $name and $section_ref->{'level'}) { echo_warn ("$tag without name", $line_nr); } push @sections_list, $section_ref; push @all_elements, $section_ref; $state->{'element'} = $section_ref; $state->{'place'} = $section_ref->{'current_place'}; ################# debug my $node_ref = "NO NODE"; my $node_texi =''; if ($state->{'node_ref'}) { $node_ref = $state->{'node_ref'}; $node_texi = $state->{'node_ref'}->{'texi'}; } print STDERR "# pass_structure node($node_ref)$node_texi, tag \@$tag($section_ref->{'level'}) ref $section_ref, num,id $section_ref->{'sec_num'},$section_ref->{'id'}\n $name\n" if $T2H_DEBUG & $DEBUG_ELEMENTS; ################# end debug } } elsif ($cline =~ /^\@printindex\s+(\w+)/) { unless (@all_elements) { echo_warn ("Printindex before document beginning: \@printindex $1", $line_nr); next; } my $index_name = $1; # $element_index is the first element with index $element_index = $all_elements[-1] unless (defined($element_index)); # associate the index to the element my $printindex = { 'element' => $all_elements[-1], 'name' => $index_name, 'command' => 'printindex' }; push @{$state->{'place'}}, $printindex; push @{$Texi2HTML::THISDOC{'indices'}->{$index_name}}, $printindex; push @{$Texi2HTML::THISDOC{'printindices'}}, $printindex; } elsif ($cline =~ /^\@insertcopying\s*/) { @added_lines = @{$region_lines{'copying'}}; @added_numbers = (); my $copying_line_nr = 0; foreach my $line_added (@added_lines) { $copying_line_nr++; push @added_numbers, { 'file_name' => '', 'macro' => 'copying', 'line_nr' => $copying_line_nr }; } unshift (@$texi_lines, @added_lines); unshift (@$lines_numbers, @added_numbers); next; } if (exists($state->{'region_lines'})) { push @{$region_lines{$state->{'region_lines'}->{'format'}}}, @added_lines; if ($Texi2HTML::Config::region_formats_kept{$state->{'region_lines'}->{'format'}}) { push @doc_lines, @added_lines; push @doc_numbers, @added_numbers; } } else { push @doc_lines, @added_lines; push @doc_numbers, @added_numbers; } next; } } if (scan_structure ($cline, \$text, \@stack, $state, $line_nr) and (!exists($state->{'region_lines'}) or $Texi2HTML::Config::region_formats_kept{$state->{'region_lines'}->{'format'}})) { push (@doc_numbers, $line_nr); } next if (scalar(@stack) or $state->{'in_deff_line'}); $cline = $text; $text = ''; next if (!defined($cline)); if ($state->{'region_lines'}) { # the first line is like @copying, it is not put in the region # lines push @{$region_lines{$state->{'region_lines'}->{'format'}}}, split_lines($cline) unless ($state->{'region_lines'}->{'first_line'}); delete $state->{'region_lines'}->{'first_line'}; push @doc_lines, split_lines($cline) if ($Texi2HTML::Config::region_formats_kept{$state->{'region_lines'}->{'format'}}); } else { push @doc_lines, split_lines($cline); } } if (@stack) {# close stack at the end of pass structure close_stack_texi_structure(\$text, \@stack, $state, $line_nr); if ($text) { if (exists($state->{'region_lines'})) { push @{$region_lines{$state->{'region_lines'}->{'format'}}}, split_lines($text); push @doc_lines, split_lines($text) if ($Texi2HTML::Config::region_formats_kept{$state->{'region_lines'}->{'format'}}); } else { push @doc_lines, split_lines($text); } } } echo_warn ("At end of document, $state->{'region_lines'}->{'number'} $state->{'region_lines'}->{'format'} not closed") if (exists($state->{'region_lines'})); print STDERR "# end of pass structure\n" if $T2H_VERBOSE; # To remove once they are handled #print STDERR "No node nor section, texi2html won't be able to place things rightly\n" if ($element_before_anything->{'place'} and @{$element_before_anything->{'place'}}); return (\@doc_lines, \@doc_numbers); } # split line at end of line and put each resulting line in an array # FIXME there must be a more perlish way to do it... Not a big deal # as long as it work sub split_lines($) { my $line = shift; my @result = (); return @result if (!defined($line)); my $i = 0; while ($line ne '') { $result[$i] = ''; $line =~ s/^(.*)//; $result[$i] .= $1; $result[$i] .= "\n" if ($line =~ s/^\n//); #print STDERR "$i: $result[$i]"; $i++; } return @result; } # handle @documentlanguage sub do_documentlanguage($$$$) { my $macro = shift; my $line = shift; my $silent = shift; my $line_nr = shift; my $return_value = 0; if ($line =~ /\s+(\w+)/) { my $lang = $1; if (!$Texi2HTML::GLOBAL{'current_lang'} && $lang) { $return_value = set_document_language($lang, 0, $silent, $line_nr); # warning, this is not the language of the document but the one that # appear in the texinfo. It could have been different # if $Texi2HTML::GLOBAL{'current_lang'} was set and not # taken into account in the if $Texi2HTML::THISDOC{$macro} = $lang; } } return $return_value; } # actions that should be done in more than one pass. In fact most are not # to be done in pass_texi. The $pass argument is the number of the pass, # 0 for pass_texi, 1 for pass_structure, 2 for pass_text sub common_misc_commands($$$$) { my $macro = shift; my $line = shift; my $pass = shift; my $line_nr = shift; # track variables if ($macro eq 'set') { if ($line =~ /^(\s+)($VARRE)(\s+)(.*)$/) { $value{$2} = $4; } else { echo_warn ("Missing argument for \@$macro", $line_nr) if (!$pass); } } elsif ($macro eq 'clear') { if ($line =~ /^(\s+)($VARRE)/) { delete $value{$2}; } else { echo_warn ("Missing argument for \@$macro", $line_nr) if (!$pass); } } elsif ($macro eq 'clickstyle') { if ($line =~ /^\s+@([^\s\{\}\@]+)/) { $Texi2HTML::THISDOC{$macro} = $1; } else { echo_error ("\@$macro should only accept a macro as argument", $line_nr) if ($pass == 1); } } if ($pass) { # these commands are only taken into account here in pass_structure 1 # and pass_text 2 if ($macro eq 'setfilename') { my $filename = $line; $filename =~ s/^\s*//; $filename =~ s/\s*$//; if ($filename ne '') { $filename = substitute_line($filename, {'code_style' => 1, 'remove_texi' => 1}); #$filename = substitute_line($filename, {'code_style' => 1}); $Texi2HTML::THISDOC{$macro} = $filename; $value{"_$macro"} = $filename if ($pass == 1); } } elsif ($macro eq 'paragraphindent') { if ($line =~ /\s+([0-9]+)/) { $Texi2HTML::THISDOC{$macro} = $1; } elsif (($line =~ /\s+(none)[^\w\-]/) or ($line =~ /\s+(asis)[^\w\-]/)) { $Texi2HTML::THISDOC{$macro} = $1; } else { echo_error ("Bad \@$macro", $line_nr) if ($pass == 1); } } elsif ($macro eq 'firstparagraphindent') { if (($line =~ /\s+(none)[^\w\-]/) or ($line =~ /\s+(insert)[^\w\-]/)) { $Texi2HTML::THISDOC{$macro} = $1; } else { echo_error ("Bad \@$macro", $line_nr) if ($pass == 1); } } elsif ($macro eq 'exampleindent') { if ($line =~ /^\s+([0-9]+)/) { $Texi2HTML::THISDOC{$macro} = $1; } elsif ($line =~ /^\s+(asis)[^\w\-]/) { $Texi2HTML::THISDOC{$macro} = $1; } else { echo_error ("Bad \@$macro", $line_nr) if ($pass == 1); } } elsif ($macro eq 'frenchspacing') { if (($line =~ /^\s+(on)[^\w\-]/) or ($line =~ /^\s+(off)[^\w\-]/)) { $Texi2HTML::THISDOC{$macro} = $1; } else { echo_error ("Bad \@$macro", $line_nr) if ($pass == 1); } } elsif (grep {$macro eq $_} ('everyheading', 'everyfooting', 'evenheading', 'evenfooting', 'oddheading', 'oddfooting')) { # FIXME have a _texi and without texi, and without texi, # and expand rightly @this*? And use @| to separate, and give # an array for user consumption? This should be done for each new # chapter, section, and page. What is a page is not necessarily # well defined in html, however... # @thisfile is the @include file. Shoule be in $line_nr. my $arg = $line; $arg =~ s/^\s+//; $Texi2HTML::THISDOC{$macro} = $arg; } elsif ($macro eq 'allowcodebreaks') { if (($line =~ /^\s+(true)[^\w\-]/) or ($line =~ /^\s+(false)[^\w\-]/)) { $Texi2HTML::THISDOC{$macro} = $1; } else { echo_error ("Bad \@$macro", $line_nr) if ($pass == 1); } } elsif ($macro eq 'headings') { my $valid_arg = 0; foreach my $possible_arg (('off','on','single','double', 'singleafter','doubleafter')) { if ($line =~ /^\s+($possible_arg)[^\w\-]/) { $valid_arg = 1; $Texi2HTML::THISDOC{$macro} = $possible_arg; last; } } unless ($valid_arg) { echo_error ("Bad \@$macro", $line_nr) if ($pass == 1); } } elsif ($macro eq 'documentlanguage') { if (do_documentlanguage($macro, $line, $pass -1, $line_nr)) { &$Texi2HTML::Config::translate_names(); set_special_names(); } } } } sub misc_command_texi($$$$) { my $line = shift; my $macro = shift; my $state = shift; my $line_nr = shift; my $text; my $args; if (!$state->{'ignored'} and !$state->{'arg_expansion'}) { if ($macro eq 'documentencoding') { #my $encoding = ''; if ($line =~ /(\s+)([0-9\w\-]+)/) { my $encoding = $2; #$Texi2HTML::Config::DOCUMENT_ENCODING = $encoding; $Texi2HTML::THISDOC{'documentencoding'} = $encoding; $Texi2HTML::THISDOC{'DOCUMENT_ENCODING'} = $Texi2HTML::THISDOC{'documentencoding'} unless (defined($Texi2HTML::Config::DOCUMENT_ENCODING)); my $from_encoding; if (!defined($Texi2HTML::Config::IN_ENCODING)) { $from_encoding = encoding_alias($encoding); $Texi2HTML::THISDOC{'IN_ENCODING'} = $from_encoding if (defined($from_encoding)); } #$Texi2HTML::Config::IN_ENCODING = $from_encoding if # defined($from_encoding); if (defined($from_encoding) and $Texi2HTML::Config::USE_UNICODE) { foreach my $file (@fhs) { binmode($file->{'fh'}, ":encoding($from_encoding)"); } } } } else { if ($macro eq 'setfilename' and $Texi2HTML::Config::USE_SETFILENAME) { my $filename = $line; $filename =~ s/^\s*//; $filename =~ s/\s*$//; #$filename = substitute_line($filename, {'code_style' => 1}); $filename = substitute_line($filename, {'code_style' => 1, 'remove_texi' => 1}); # remove extension $filename =~ s/\.[^\.]*$//; init_with_file_name ($filename) if ($filename ne ''); } # in reality, do only set, clear and clickstyle. # though we should never go there for clickstyle... common_misc_commands($macro, $line, 0, $line_nr); } } ($text, $line, $args) = &$Texi2HTML::Config::preserve_misc_command($line, $macro); return ($text, $line); } # initial kdb styles my $kept_kdb_style; my $kept_kdb_pre_style; # novalidate seen? my $novalidate; # handle misc commands and misc command args sub misc_command_structure($$$$) { my $line = shift; my $macro = shift; my $state = shift; my $line_nr = shift; my $text; my $args; if ($macro eq 'lowersections') { my ($sec, $level); while (($sec, $level) = each %sec2level) { $sec2level{$sec} = $level + 1; } $state->{'sectionning_base'}--; } elsif ($macro eq 'raisesections') { my ($sec, $level); while (($sec, $level) = each %sec2level) { $sec2level{$sec} = $level - 1; } $state->{'sectionning_base'}++; } elsif (($macro eq 'contents') or ($macro eq 'summarycontents') or ($macro eq 'shortcontents')) { if ($macro eq 'contents') { $Texi2HTML::THISDOC{'DO_CONTENTS'} = 1 unless (defined($Texi2HTML::Config::DO_CONTENTS)); $Texi2HTML::THISDOC{$macro} = 1; } else { $macro = 'shortcontents'; $Texi2HTML::THISDOC{'DO_SCONTENTS'} = 1 unless (defined($Texi2HTML::Config::DO_SCONTENTS)); $Texi2HTML::THISDOC{$macro} = 1; } push @{$state->{'place'}}, $content_element{$macro}; } elsif ($macro eq 'novalidate') { $novalidate = 1; $Texi2HTML::THISDOC{$macro} = 1; } elsif (grep {$_ eq $macro} ('settitle','shorttitlepage','title') and ($line =~ /^\s+(.*)$/)) { my $arg = $1; chomp($arg); $value{"_$macro"} = $arg; # backward compatibility if ($macro eq 'title') { $Texi2HTML::THISDOC{"${macro}s_texi"} = [ $arg ]; $Texi2HTML::THISDOC{"${macro}s"} = [ $arg ]; } } elsif (grep {$_ eq $macro} ('author','subtitle') and ($line =~ /^\s+(.*)$/)) { my $arg = $1; $value{"_$macro"} .= $arg."\n"; chomp($arg); push @{$Texi2HTML::THISDOC{"${macro}s_texi"}}, $arg; push @{$Texi2HTML::THISDOC{"${macro}s"}}, $arg; } elsif ($macro eq 'synindex' || $macro eq 'syncodeindex') { if ($line =~ /^\s+(\w+)\s+(\w+)/) { my $index_from = $1; my $index_to = $2; echo_error ("unknown from index name $index_from in \@$macro", $line_nr) unless $index_names{$index_from}; echo_error ("unknown to index name $index_to in \@$macro", $line_nr) unless $index_names{$index_to}; if ($index_names{$index_from} and $index_names{$index_to}) { if ($macro eq 'syncodeindex') { $index_names{$index_to}->{'associated_indices_code'}->{$index_from} = 1; } else { $index_names{$index_to}->{'associated_indices'}->{$index_from} = 1; } push @{$Texi2HTML::THISDOC{$macro}}, [$index_from,$index_to]; } } else { echo_error ("Bad $macro line: $line", $line_nr); } } elsif ($macro eq 'defindex' || $macro eq 'defcodeindex') { if ($line =~ /^\s+(\w+)\s*$/) { my $name = $1; if ($forbidden_index_name{$name}) { echo_error("Reserved index name $name", $line_nr); } else { @{$index_names{$name}->{'prefix'}} = ($name); $index_names{$name}->{'code'} = 1 if $macro eq 'defcodeindex'; $index_prefix_to_name{$name} = $name; push @{$Texi2HTML::THISDOC{$macro}}, $name; } } else {# makeinfo don't warn and even accepts index with empty name # and index with numbers only. I reported it on the mailing list # this should be fixed in future makeinfo versions. echo_error ("Bad $macro line: $line", $line_nr); } } elsif ($macro eq 'kbdinputstyle') {# makeinfo ignores that with --html. I reported it and it should be # fixed in future makeinfo releases # FIXME it should be dynamically defined in pass 2 if ($line =~ /\s+([a-z]+)/) { if ($1 eq 'code') { $::style_map_ref->{'kbd'} = $::style_map_ref->{'code'}; $::style_map_pre_ref->{'kbd'} = $::style_map_pre_ref->{'code'}; $Texi2HTML::THISDOC{$macro} = $1; } elsif ($1 eq 'example') { $::style_map_pre_ref->{'kbd'} = $::style_map_pre_ref->{'code'}; $Texi2HTML::THISDOC{$macro} = $1; } elsif ($1 eq 'distinct') { $Texi2HTML::THISDOC{$macro} = $1; $::style_map_ref->{'kbd'} = $kept_kdb_style; $::style_map_pre_ref->{'kbd'} = $kept_kdb_pre_style; } else { echo_error ("Unknown argument for \@$macro: $1", $line_nr); } } else { echo_error ("Bad \@$macro", $line_nr); } } elsif (grep {$_ eq $macro} ('everyheadingmarks','everyfootingmarks', 'evenheadingmarks','oddheadingmarks','evenfootingmarks','oddfootingmarks')) { if (($line =~ /^\s+(top)[^\w\-]/) or ($line =~ /^\s+(bottom)[^\w\-]/)) { $Texi2HTML::THISDOC{$macro} = $1; } else { echo_error ("Bad \@$macro", $line_nr); } } elsif ($macro eq 'fonttextsize') { if (($line =~ /^\s+(10)[^\w\-]/) or ($line =~ /^\s+(11)[^\w\-]/)) { $Texi2HTML::THISDOC{$macro} = $1; } else { echo_error ("Bad \@$macro", $line_nr); } } elsif ($macro eq 'pagesizes') { if ($line =~ /^\s+(.*)\s*$/) { $Texi2HTML::THISDOC{$macro} = $1; } } elsif ($macro eq 'footnotestyle') { if (($line =~ /^\s+(end)[^\w\-]/) or ($line =~ /^\s+(separate)[^\w\-]/)) { $Texi2HTML::THISDOC{$macro} = $1; } else { echo_error ("Bad \@$macro", $line_nr); } } elsif ($macro eq 'setchapternewpage') { if (($line =~ /^\s+(on)[^\w\-]/) or ($line =~ /^\s+(off)[^\w\-]/) or ($line =~ /^\s+(odd)[^\w\-]/)) { $Texi2HTML::THISDOC{$macro} = $1; } else { echo_error ("Bad \@$macro", $line_nr); } } elsif ($macro eq 'setcontentsaftertitlepage' or $macro eq 'setshortcontentsaftertitlepage') { $Texi2HTML::THISDOC{$macro} = 1; my $tag = 'contents'; $tag = 'shortcontents' if ($macro ne 'setcontentsaftertitlepage'); $content_element{$tag}->{'aftertitlepage'} = 1; } elsif ($macro eq 'need') { # only a warning unless (($line =~ /^\s+([0-9]+(\.[0-9]*)?)[^\w\-]/) or ($line =~ /^\s+(\.[0-9]+)[^\w\-]/)) { echo_warn ("Bad \@$macro", $line_nr); } } else { common_misc_commands($macro, $line, 1, $line_nr); } ($text, $line, $args) = &$Texi2HTML::Config::preserve_misc_command($line, $macro); return ($text, $line); } sub set_special_names() { $Texi2HTML::NAME{'About'} = &$I('About This Document'); $Texi2HTML::NAME{'Contents'} = &$I('Table of Contents'); $Texi2HTML::NAME{'Overview'} = &$I('Short Table of Contents'); $Texi2HTML::NAME{'Footnotes'} = &$I('Footnotes'); $Texi2HTML::NO_TEXI{'About'} = &$I('About This Document', {}, {'remove_texi' => 1} ); $Texi2HTML::NO_TEXI{'Contents'} = &$I('Table of Contents', {}, {'remove_texi' => 1} ); $Texi2HTML::NO_TEXI{'Overview'} = &$I('Short Table of Contents', {}, {'remove_texi' => 1} ); $Texi2HTML::NO_TEXI{'Footnotes'} = &$I('Footnotes', {}, {'remove_texi' => 1} ); $Texi2HTML::SIMPLE_TEXT{'About'} = &$I('About This Document', {}, {'simple_format' => 1}); $Texi2HTML::SIMPLE_TEXT{'Contents'} = &$I('Table of Contents',{}, {'simple_format' => 1}); $Texi2HTML::SIMPLE_TEXT{'Overview'} = &$I('Short Table of Contents', {}, {'simple_format' => 1}); $Texi2HTML::SIMPLE_TEXT{'Footnotes'} = &$I('Footnotes', {},{'simple_format' => 1}); } # return the line after removing things according to misc_command map. # if the skipped macro has an effect it is done here # this is used during pass_text sub misc_command_text($$$$$$) { my $line = shift; my $macro = shift; my $stack = shift; my $state = shift; my $text = shift; my $line_nr = shift; my ($skipped, $remaining, $args); # The strange condition associated with 'keep_texi' is # there because for an argument appearing on an @itemize # line (we're in 'check_item'), meant to be prepended to an # @item we don't want to keep @c or @comment as otherwise it # eats the @item line. Other commands could do that too but # then the user deserves what he gets. if ($state->{'keep_texi'} and (!$state->{'check_item'} or ($macro ne 'c' and $macro ne 'comment'))) { ($remaining, $skipped, $args) = &$Texi2HTML::Config::preserve_misc_command($line, $macro); add_prev($text, $stack, "\@$macro". $skipped); return $remaining; } # if it is true the command args are kept so the user can modify how # they are skipped and handle them as unknown @-commands my $keep = $Texi2HTML::Config::misc_command{$macro}->{'keep'}; if ($macro eq 'sp') { my $sp_number; if ($line =~ /^\s+(\d+)\s/) { $sp_number = $1; } elsif ($line =~ /(\s*)$/) { $sp_number = ''; } else { echo_error ("\@$macro needs a numeric arg or no arg", $line_nr); } $sp_number = 1 if ($sp_number eq ''); if (!$state->{'remove_texi'}) { add_prev($text, $stack, &$Texi2HTML::Config::sp($sp_number, $state->{'preformatted'})); } } elsif($macro eq 'verbatiminclude' and !$keep) { if ($line =~ /\s+(.+)/) { my $arg = $1; my $file = locate_include_file(substitute_line($arg, {'code_style' => 1})); if (defined($file)) { if (!open(VERBINCLUDE, $file)) { echo_warn ("Can't read file $file: $!",$line_nr); } else { my $verb_text = ''; while (my $line = ) { $verb_text .= $line; } if ($state->{'remove_texi'}) { add_prev ($text, $stack, &$Texi2HTML::Config::raw_no_texi('verbatim', $verb_text)); } else { add_prev($text, $stack, &$Texi2HTML::Config::raw('verbatim', $verb_text)); } close VERBINCLUDE; } } else { echo_error ("Can't find $arg, skipping", $line_nr); } } else { echo_error ("Bad \@$macro line: $line", $line_nr); } } elsif ($macro eq 'indent' or $macro eq 'noindent') { $state->{'paragraph_indent'} = $macro; } else { common_misc_commands($macro, $line, 2, $line_nr); } ($remaining, $skipped, $args) = &$Texi2HTML::Config::preserve_misc_command($line, $macro); #print STDERR "ZZZZZZZZZZZ r $remaining ZZ a @$args ZZZZ s `$skipped'\n" if ($keep); return ($skipped.$remaining) if ($keep); return $remaining if ($remaining ne ''); return undef; } # merge the things appearing before the first @node or sectionning command # (held by element_before_anything) with the current element # do that only once. sub merge_element_before_anything($) { my $element = shift; if (exists($element_before_anything->{'place'})) { $element->{'current_place'} = $element_before_anything->{'place'}; delete $element_before_anything->{'place'}; foreach my $placed_thing (@{$element->{'current_place'}}) { $placed_thing->{'element'} = $element if (exists($placed_thing->{'element'})); } } # this is certainly redundant with the above condition, but cleaner # that way if (exists($element_before_anything->{'titlefont'})) { $element->{'titlefont'} = $element_before_anything->{'titlefont'}; delete $element_before_anything->{'titlefont'}; } } # find menu_prev, menu_up... for a node in menu sub menu_entry_texi($$$) { my $node = shift; my $state = shift; my $line_nr = shift; my $node_menu_ref = {}; if (exists($nodes{$node})) { $node_menu_ref = $nodes{$node}; } else { $nodes{$node} = $node_menu_ref; $node_menu_ref->{'texi'} = $node; $node_menu_ref->{'external_node'} = 1 if ($node =~ /^\(.+\)/); } return if ($state->{'detailmenu'}); if ($state->{'node_ref'}) { $node_menu_ref->{'menu_up'} = $state->{'node_ref'}; $node_menu_ref->{'menu_up_hash'}->{$state->{'node_ref'}->{'texi'}} = 1; } else { echo_warn ("menu entry without previous node: $node", $line_nr) unless ($node =~ /\(.+\)/); } if ($state->{'prev_menu_node'}) { $node_menu_ref->{'menu_prev'} = $state->{'prev_menu_node'}; $state->{'prev_menu_node'}->{'menu_next'} = $node_menu_ref; } elsif ($state->{'node_ref'} and !$state->{'node_ref'}->{'menu_child'}) { $state->{'node_ref'}->{'menu_child'} = $node_menu_ref; } $state->{'prev_menu_node'} = $node_menu_ref; } sub prepare_indices() { foreach my $index_name (keys(%{$Texi2HTML::THISDOC{'indices'}})) { #my ($pages, $entries) = get_index($index_name, undef, 1); #my $entries = get_index($index_name, undef, 1); my $entries = get_index($index_name); foreach my $printindex (@{$Texi2HTML::THISDOC{'indices'}->{$index_name}}) { $printindex->{'entries'} = $entries; } } Texi2HTML::Config::t2h_default_init_split_indices(); } my @index_labels; # array corresponding with @?index commands # constructed during pass_structure, used to # put labels in pass_text # This function is used to construct link names from node names as # specified for texinfo sub cross_manual_links() { print STDERR "# Doing ".scalar(keys(%nodes))." cross manual links ". scalar(@index_labels). "index entries\n" if ($T2H_DEBUG); my $normal_text_kept = $Texi2HTML::Config::normal_text; $::simple_map_texi_ref = \%cross_ref_simple_map_texi; $::style_map_texi_ref = \%cross_ref_style_map_texi; $::texi_map_ref = \%cross_ref_texi_map; $Texi2HTML::Config::normal_text = \&Texi2HTML::Config::t2h_cross_manual_normal_text; foreach my $key (keys(%nodes)) { my $node = $nodes{$key}; #print STDERR "CROSS_MANUAL:$key,$node\n"; if (!defined($node->{'texi'})) { ###################### debug section foreach my $key (keys(%$node)) { #print STDERR "$key:$node->{$key}!!!\n"; } ###################### end debug section } else { $node->{'cross_manual_target'} = remove_texi($node->{'texi'}); if ($Texi2HTML::Config::USE_UNICODE) { $node->{'cross_manual_target'} = Unicode::Normalize::NFC($node->{'cross_manual_target'}); if ($Texi2HTML::Config::TRANSLITERATE_NODE and $Texi2HTML::Config::USE_UNIDECODE) { $node->{'cross_manual_file'} = unicode_to_protected(unicode_to_transliterate($node->{'cross_manual_target'})); } $node->{'cross_manual_target'} = unicode_to_protected($node->{'cross_manual_target'}); } #print STDERR "CROSS_MANUAL_TARGET $node->{'cross_manual_target'}\n"; unless ($node->{'external_node'}) { if (exists($cross_reference_nodes{$node->{'cross_manual_target'}})) { my $other_node_array = $cross_reference_nodes{$node->{'cross_manual_target'}}; my $node_seen; foreach my $other_node (@{$other_node_array}) { # find the first node seen for the error message $node_seen = $other_node; last if ($nodes{$other_node}->{'seen'}) } echo_error("Node equivalent with `$node->{'texi'}' already used `$node_seen'"); push @{$other_node_array}, $node->{'texi'}; } else { push @{$cross_reference_nodes{$node->{'cross_manual_target'}}}, $node->{'texi'}; } } } } if ($Texi2HTML::Config::TRANSLITERATE_NODE and (!$Texi2HTML::Config::USE_UNICODE or !$Texi2HTML::Config::USE_UNIDECODE)) { $::style_map_texi_ref = \%cross_transliterate_style_map_texi; $::texi_map_ref = \%cross_transliterate_texi_map; $Texi2HTML::Config::normal_text = \&Texi2HTML::Config::t2h_cross_manual_normal_text_transliterate if (!$Texi2HTML::Config::USE_UNICODE); foreach my $key (keys(%nodes)) { my $node = $nodes{$key}; if (defined($node->{'texi'})) { $node->{'cross_manual_file'} = remove_texi($node->{'texi'}); $node->{'cross_manual_file'} = unicode_to_protected(unicode_to_transliterate($node->{'cross_manual_file'})) if ($Texi2HTML::Config::USE_UNICODE); } } foreach my $entry (@index_labels, values(%sections), values(%headings)) { $entry->{'cross'} = remove_texi($entry->{'texi'}); $entry->{'cross'} = unicode_to_protected(unicode_to_transliterate($entry->{'cross'})) if ($Texi2HTML::Config::USE_UNICODE); } } else { foreach my $entry (@index_labels, values(%sections), values(%headings)) { $entry->{'cross'} = remove_texi($entry->{'texi'}); if ($Texi2HTML::Config::USE_UNICODE) { $entry->{'cross'} = Unicode::Normalize::NFC($entry->{'cross'}); if ($Texi2HTML::Config::TRANSLITERATE_NODE and $Texi2HTML::Config::USE_UNIDECODE) # USE_UNIDECODE is redundant { $entry->{'cross'} = unicode_to_protected(unicode_to_transliterate($entry->{'cross'})); } else { $entry->{'cross'} = unicode_to_protected($entry->{'cross'}); } } } } $Texi2HTML::Config::normal_text = $normal_text_kept; $::simple_map_texi_ref = \%Texi2HTML::Config::simple_map_texi; $::style_map_texi_ref = \%Texi2HTML::Config::style_map_texi; $::texi_map_ref = \%Texi2HTML::Config::texi_map; } # This function is used to construct a link name from a node name as # specified for texinfo sub cross_manual_line($;$) { my $text = shift; my $transliterate = shift; #print STDERR "cross_manual_line $text\n"; #print STDERR "remove_texi text ". remove_texi($text)."\n\n\n"; $::simple_map_texi_ref = \%cross_ref_simple_map_texi; $::style_map_texi_ref = \%cross_ref_style_map_texi; $::texi_map_ref = \%cross_ref_texi_map; my $normal_text_kept = $Texi2HTML::Config::normal_text; $Texi2HTML::Config::normal_text = \&Texi2HTML::Config::t2h_cross_manual_normal_text; my ($cross_ref_target, $cross_ref_file); if ($Texi2HTML::Config::USE_UNICODE) { $cross_ref_target = Unicode::Normalize::NFC(remove_texi($text)); if ($transliterate and $Texi2HTML::Config::USE_UNIDECODE) { $cross_ref_file = unicode_to_protected(unicode_to_transliterate($cross_ref_target)); } $cross_ref_target = unicode_to_protected($cross_ref_target); } else { $cross_ref_target = remove_texi($text); } if ($transliterate and (!$Texi2HTML::Config::USE_UNICODE or !$Texi2HTML::Config::USE_UNIDECODE)) { $::style_map_texi_ref = \%cross_transliterate_style_map_texi; $::texi_map_ref = \%cross_transliterate_texi_map; $Texi2HTML::Config::normal_text = \&Texi2HTML::Config::t2h_cross_manual_normal_text_transliterate if (!$Texi2HTML::Config::USE_UNICODE); $cross_ref_file = remove_texi($text); $cross_ref_file = unicode_to_protected(unicode_to_transliterate($cross_ref_file)) if ($Texi2HTML::Config::USE_UNICODE); } $Texi2HTML::Config::normal_text = $normal_text_kept; $::simple_map_texi_ref = \%Texi2HTML::Config::simple_map_texi; $::style_map_texi_ref = \%Texi2HTML::Config::style_map_texi; $::texi_map_ref = \%Texi2HTML::Config::texi_map; #print STDERR "\n\ncross_ref $cross_ref\n"; unless ($transliterate) { return $cross_ref_target; } # print STDERR "$text|$cross_ref_target|$cross_ref_file\n"; return ($cross_ref_target, $cross_ref_file); } sub equivalent_nodes($) { my $name = shift; #print STDERR "equivalent_nodes $name\n"; my $node = normalise_node($name); $name = cross_manual_line($node); my @equivalent_nodes = (); if (exists($cross_reference_nodes{$name})) { @equivalent_nodes = grep {$_ ne $node} @{$cross_reference_nodes{$name}}; } return @equivalent_nodes; } sub do_place_target_file($$$) { my $place = shift; my $element = shift; my $context = shift; $place->{'file'} = $element->{'file'} unless defined($place->{'file'}); $place->{'target'} = $element->{'target'} unless defined($place->{'target'}); # $place->{'doc_nr'} = $element->{'doc_nr'} unless defined($place->{'doc_nr'}); if (defined($Texi2HTML::Config::placed_target_file_name)) { my ($target, $id, $file) = &$Texi2HTML::Config::placed_target_file_name($place,$element,$place->{'target'}, $place->{'id'}, $place->{'file'},$context); $place->{'target'} = $target if (defined($target)); $place->{'file'} = $file if (defined($file)); $place->{'id'} = $id if (defined($id)); } } sub do_node_target_file($$) { my $node = shift; my $type_of_node = shift; my $node_file = &$Texi2HTML::Config::node_file_name($node,$type_of_node); $node->{'node_file'} = $node_file if (defined($node_file)); if (defined($Texi2HTML::Config::node_target_name)) { my ($target,$id) = &$Texi2HTML::Config::node_target_name($node,$node->{'target'},$node->{'id'}, $type_of_node); $node->{'target'} = $target if (defined($target)); $node->{'id'} = $id if (defined($id)); } } sub do_element_targets($;$) { my $element = shift; my $use_node_file = shift; my $is_top = ''; $is_top = "top" if ($element->{'top'} or (defined($element->{'with_node'}) and $element->{'with_node'} eq $element_top)); my $file_index_split = Texi2HTML::Config::t2h_default_associate_index_element($element, $is_top, $docu_name, $use_node_file); $element->{'file'} = $file_index_split if (defined($file_index_split)); if (defined($Texi2HTML::Config::element_file_name)) { my $previous_file_name = $element->{'file'}; my $filename = &$Texi2HTML::Config::element_file_name ($element, $is_top, $docu_name); if (defined($filename)) { foreach my $place (@{$element->{'place'}}) { $place->{'file'} = $filename if (defined($place->{'file'}) and ($place->{'file'} eq $previous_file_name)); } $element->{'file'} = $filename; } } print STDERR "file !defined for element $element->{'texi'}\n" if (!defined($element->{'file'})); if (defined($Texi2HTML::Config::element_target_name)) { my ($target,$id) = &$Texi2HTML::Config::element_target_name($element, $element->{'target'}, $element->{'id'}); $element->{'target'} = $target if (defined($target)); $element->{'id'} = $id if (defined($id)); } foreach my $place(@{$element->{'place'}}) { do_place_target_file($place, $element, ''); } } sub add_t2h_element($$$) { my $element = shift; my $elements_list = shift; my $prev_element = shift; push @$elements_list, $element; $element->{'element_ref'} = $element; $element->{'this'} = $element; if (defined($prev_element)) { $element->{'back'} = $prev_element; $prev_element->{'forward'} = $element; } push @{$element->{'place'}}, $element; push @{$element->{'place'}}, @{$element->{'current_place'}}; return $element; } sub add_t2h_dependent_element ($$) { my $element = shift; my $element_ref = shift; $element->{'element_ref'} = $element_ref; $element_index = $element_ref if ($element_index and ($element_index eq $element)); push @{$element_ref->{'place'}}, $element; push @{$element_ref->{'place'}}, @{$element->{'current_place'}}; } my %files = (); # keys are files. This is used to avoid reusing an already # used file name my %empty_indices = (); # value is true for an index name key if the index # is empty my %printed_indices = (); # value is true for an index name not empty and # printed # This is a virtual element used to have the right hrefs for index entries # and anchors in footnotes. my $footnote_element; # find next, prev, up, back, forward, fastback, fastforward # find element id and file # split index pages # associate placed items (items which have links to them) with the right # file and id # associate nodes with sections sub rearrange_elements() { print STDERR "# find sections levels and toplevel\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); my $toplevel = 4; # correct level if raisesections or lowersections overflowed # and find toplevel level # use %sections and %headings to modify also the headings foreach my $section (values(%sections), values(%headings)) { my $level = $section->{'level'}; if ($level > $MAX_LEVEL) { $section->{'level'} = $MAX_LEVEL; } elsif ($level < $MIN_LEVEL and !$section->{'top'}) { $section->{'level'} = $MIN_LEVEL; } else { $section->{'level'} = $level; } $section->{'toc_level'} = $section->{'level'}; # This is for top $section->{'toc_level'} = $MIN_LEVEL if ($section->{'level'} < $MIN_LEVEL); # find the new tag corresponding with the level of the section if ($section->{'tag'} !~ /heading/ and ($level ne $reference_sec2level{$section->{'tag'}})) { $section->{'tag_level'} = $level2sec{$section->{'tag'}}->[$section->{'level'}]; } else { $section->{'tag_level'} = $section->{'tag'}; } $toplevel = $section->{'level'} if (($section->{'level'} < $toplevel) and ($section->{'level'} > 0 and ($section->{'tag'} !~ /heading/))); print STDERR "# section level $level: $section->{'texi'}\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); } print STDERR "# find sections structure, construct section numbers (toplevel=$toplevel)\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); my $in_appendix = 0; # these arrays have an element per sectionning level. my @previous_numbers = (); # holds the number of the previous sections # at the same and upper levels my @previous_sections = (); # holds the ref of the previous sections my $previous_toplevel; foreach my $section (@sections_list) { ########################### debug print STDERR "BUG: node or section_ref defined for section $section->{'texi'}\n" if (exists($section->{'node'}) or exists($section->{'section_ref'})); ########################### end debug # associate with first node if it is a section appearing before # the first node $section->{'node_ref'} = $nodes_list[0] if ($nodes_list[0] and !$section->{'node_ref'}); print STDERR "Bug level undef for ($section) $section->{'texi'}\n" if (!defined($section->{'level'})); # we track the toplevel next and previous because there is no # strict child parent relationship between chapters and top. Indeed # a chapter may appear before @top, it may be better to consider them # on the same toplevel. if ($section->{'level'} <= $toplevel) { $section->{'toplevel'} = 1; if (defined($previous_toplevel)) { $previous_toplevel->{'toplevelnext'} = $section; $section->{'toplevelprev'} = $previous_toplevel; } $previous_toplevel = $section; if (defined($section_top) and $section ne $section_top) { $section->{'sectionup'} = $section_top; } } # undef things under that section level my $section_level = $section->{'level'}; # if it is the top element, the previous chapter is not wiped out $section_level++ if ($section->{'tag'} eq 'top'); for (my $level = $section_level + 1; $level < $MAX_LEVEL + 1 ; $level++) { $previous_numbers[$level] = undef unless ($section->{'tag'} =~ /unnumbered/); $previous_sections[$level] = undef; } my $number_set; # find number at the current level if ($section->{'tag'} =~ /appendix/ and !$in_appendix) { $previous_numbers[$toplevel] = 'A'; $in_appendix = 1; $number_set = 1 if ($section->{'level'} <= $toplevel); } if (!defined($previous_numbers[$section->{'level'}]) and !$number_set) { if ($section->{'tag'} =~ /unnumbered/) { $previous_numbers[$section->{'level'}] = undef; } else { $previous_numbers[$section->{'level'}] = 1; } } elsif ($section->{'tag'} !~ /unnumbered/ and !$number_set) { $previous_numbers[$section->{'level'}]++; } # construct the section number $section->{'number'} = ''; unless ($section->{'tag'} =~ /unnumbered/ or $section->{'tag'} eq 'top') { my $level = $section->{'level'}; while ($level > $toplevel) { my $number = $previous_numbers[$level]; $number = 0 if (!defined($number)); if ($section->{'number'}) { $section->{'number'} = "$number.$section->{'number'}"; } else { $section->{'number'} = $number; } $level--; } my $toplevel_number = $previous_numbers[$toplevel]; $toplevel_number = 0 if (!defined($toplevel_number)); $section->{'number'} = "$toplevel_number.$section->{'number'}"; } # find the previous section if (defined($previous_sections[$section->{'level'}])) { my $prev_section = $previous_sections[$section->{'level'}]; $section->{'sectionprev'} = $prev_section; $prev_section->{'sectionnext'} = $section; } # find the up section my $level = $section->{'level'} - 1; while (!defined($previous_sections[$level]) and ($level >= 0)) { $level--; } if ($level >= 0) { $section->{'sectionup'} = $previous_sections[$level]; # 'child' is the first child $section->{'sectionup'}->{'child'} = $section unless ($section->{'sectionprev'}); push @{$section->{'sectionup'}->{'section_childs'}}, $section; } $previous_sections[$section->{'level'}] = $section; # This is what is used in the .init file. $section->{'up'} = $section->{'sectionup'}; # Not used but documented. $section->{'next'} = $section->{'sectionnext'}; $section->{'prev'} = $section->{'sectionprev'}; ############################# debug my $up = "NO_UP"; $up = $section->{'sectionup'} if (defined($section->{'sectionup'})); print STDERR "# numbering section ($section->{'level'}): $section->{'number'}: (up: $up) $section->{'texi'}\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); ############################# end debug } # at that point there are still some node structures that are not # in %nodes, (the external nodes, and unknown nodes in case # novalidate is true) so we cannot find the id. The consequence is that # some node equivalent with another node may not be catched during # that pass. We mark the nodes that have directions for unreferenced # nodes and make a second pass for these nodes afterwards. my @nodes_with_unknown_directions = (); my %node_directions = ( 'node_prev' => 'nodeprev', 'node_next' => 'nodenext', 'node_up' => 'nodeup'); # handle nodes # the node_prev... are texinfo strings, find the associated node references print STDERR "# Resolve nodes directions\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); foreach my $node (@nodes_list) { foreach my $direction (keys(%node_directions)) { if (defined($node->{$direction})) { if ($nodes{$node->{$direction}} and $nodes{$node->{$direction}}->{'seen'}) { $node->{$node_directions{$direction}} = $nodes{$node->{$direction}}; } elsif (($node->{$direction} =~ /^\(.*\)/) or $novalidate) { # ref to an external node if (exists($nodes{$node->{$direction}})) { $node->{$node_directions{$direction}} = $nodes{$node->{$direction}}; } else { # FIXME if {'seen'} this is a node appearing in the # document and a node like `(file)node'. What to # do then ? my $node_ref = { 'texi' => $node->{$direction} }; $node_ref->{'external_node'} = 1 if ($node->{$direction} =~ /^\(.*\)/); $nodes{$node->{$direction}} = $node_ref; $node->{$node_directions{$direction}} = $node_ref; } } else { push @nodes_with_unknown_directions, $node; } } } } # Find cross manual links as explained on the texinfo mailing list # The specification is such that cross manual links formatting should # be insensitive to the manual split cross_manual_links(); # Now it is possible to find the unknown directions that are equivalent # (have same node id) than an existing node foreach my $node (@nodes_with_unknown_directions) { foreach my $direction (keys(%node_directions)) { if (defined($node->{$direction}) and !$node->{$node_directions{$direction}}) { echo_warn ("$direction `$node->{$direction}' for `$node->{'texi'}' not found"); my @equivalent_nodes = equivalent_nodes($node->{$direction}); my $node_seen; foreach my $equivalent_node (@equivalent_nodes) { if ($nodes{$equivalent_node}->{'seen'}) { $node_seen = $equivalent_node; last; } } if (defined($node_seen)) { echo_warn (" ---> but equivalent node `$node_seen' found"); $node->{$node_directions{$direction}} = $nodes{$node_seen}; } } } } # nodes are attached to the section preceding them if not already # associated with a section my $current_section = $sections_list[0]; foreach my $element (@all_elements) { if ($element->{'node'}) { if ($element->{'with_section'}) { # the node is associated with a section $element->{'section_ref'} = $element->{'with_section'}; } elsif (defined($current_section)) {# node appearing after a section, but not before another section, # or appearing before any section $element->{'section_ref'} = $current_section; push @{$current_section->{'node_childs'}}, $element; } } else { $current_section = $element; } } print STDERR "# Complete nodes next prev and up based on menus and sections\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); # set the default id based on the node number my $node_nr = 1; # find the node* directions # find the directions corresponding with sections # and set 'up' for the node foreach my $node (@nodes_list) { # first a warning if the node and the equivalent nodes don't # appear in menus if (!$node->{'first'} and !$node->{'top'} and !$node->{'menu_up'} and ($node->{'texi'} !~ /^top$/i) and $Texi2HTML::Config::SHOW_MENU) { my @equivalent_nodes = equivalent_nodes($node->{'texi'}); my $found = 0; foreach my $equivalent_node (@equivalent_nodes) { if ($nodes{$equivalent_node}->{'first'} or $nodes{$equivalent_node}->{'menu_up'}) { $found = 1; last; } } unless ($found) { warn "$WARN `$node->{'texi'}' doesn't appear in menus\n"; } } # use values deduced from menus to complete missing up, next, prev # or from sectionning commands if automatic sectionning if (!$node->{'nodeup'}) { if (defined($node_top) and ($node eq $node_top)) { # Top node has a special up, which is (dir) by default my $top_nodeup = $Texi2HTML::Config::TOP_NODE_UP; if (exists($nodes{$top_nodeup})) { $node->{'nodeup'} = $nodes{$top_nodeup}; } else { my $node_ref = { 'texi' => $top_nodeup }; $node_ref->{'external_node'} = 1; $nodes{$top_nodeup} = $node_ref; $node->{'nodeup'} = $node_ref; } } elsif ($node->{'automatic_directions'} and $node->{'with_section'}) { if (defined($node->{'with_section'}->{'sectionup'})) { $node->{'nodeup'} = get_node($node->{'with_section'}->{'sectionup'}); } elsif ($node->{'with_section'}->{'toplevel'} and defined($section_top) and ($node->{'with_section'} ne $section_top)) { $node->{'nodeup'} = get_node($section_top); } } print STDERR "# Deducing from section node_up $node->{'nodeup'}->{'texi'} for $node->{'texi'}\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS and defined($node->{'nodeup'})); } if (!$node->{'nodeup'} and $node->{'menu_up'} and $Texi2HTML::Config::USE_MENU_DIRECTIONS) { # makeinfo don't do that $node->{'nodeup'} = $node->{'menu_up'}; print STDERR "# Deducing from menu node_up $node->{'menu_up'}->{'texi'} for $node->{'texi'}\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); } if ($node->{'nodeup'} and !$node->{'nodeup'}->{'external_node'}) { # We detect when the up node has no menu entry for that node, as # there may be infinite loops when finding following node (see below) unless (defined($node->{'menu_up_hash'}) and ($node->{'menu_up_hash'}->{$node->{'nodeup'}->{'texi'}})) { print STDERR "$WARN `$node->{'nodeup'}->{'texi'}' is up for `$node->{'texi'}', but has no menu entry for this node\n" if ($Texi2HTML::Config::SHOW_MENU); push @{$node->{'up_not_in_menu'}}, $node->{'nodeup'}->{'texi'}; } } # Find next node if not already found if ($node->{'nodenext'}) {} elsif ($node->{'texi'} eq 'Top') { # special case as said in the texinfo manual if ($node->{'menu_child'}) { $node->{'nodenext'} = $node->{'menu_child'}; $node->{'menu_child'}->{'nodeprev'} = $node; } } elsif ($node->{'automatic_directions'} and defined($node->{'with_section'})) { my $next; my $section = $node->{'with_section'}; if (defined($section->{'sectionnext'})) { $next = get_node($section->{'sectionnext'}); if (defined($next) and $Texi2HTML::Config::SHOW_MENU) { echo_warn ("No node following `$node->{'texi'}' in menu, but `$next->{'texi'}' follows in sectionning") if (!defined($node->{'menu_next'})); echo_warn ("Node following `$node->{'texi'}' in menu `$node->{'menu_next'}->{'texi'}' and in sectionning `$next->{'texi'}' differ") if (defined($node->{'menu_next'}) and $next ne $node->{'menu_next'}); } } elsif ($Texi2HTML::Config::USE_UP_FOR_ADJACENT_NODES) { # makeinfo don't do that while (defined($section->{'sectionup'}) and !defined($section->{'sectionnext'})) { $section = $section->{'sectionup'}; } if (defined($section->{'sectionnext'})) { $next = get_node($section->{'sectionnext'}); } } $node->{'nodenext'} = $next; } # next we try menus. makeinfo don't do that if (!defined($node->{'nodenext'}) and $node->{'menu_next'} and $Texi2HTML::Config::USE_MENU_DIRECTIONS) { $node->{'nodenext'} = $node->{'menu_next'}; } # Find prev node if (!$node->{'nodeprev'} and $node->{'automatic_directions'}) { if (defined($node->{'with_section'})) { my $section = $node->{'with_section'}; if (defined($section->{'sectionprev'})) { $node->{'nodeprev'} = get_node($section->{'sectionprev'}); } elsif ($Texi2HTML::Config::USE_UP_FOR_ADJACENT_NODES and defined($section->{'sectionup'})) { # makeinfo don't do that $node->{'nodeprev'} = get_node($section->{'sectionup'}); } } } # next we try menus. makeinfo don't do that if (!defined($node->{'nodeprev'}) and $node->{'menu_prev'} and $Texi2HTML::Config::USE_MENU_DIRECTIONS) { $node->{'nodeprev'} = $node->{'menu_prev'}; } # the prev node is the parent node elsif (!defined($node->{'nodeprev'}) and $node->{'menu_up'} and $Texi2HTML::Config::USE_MENU_DIRECTIONS) { $node->{'nodeprev'} = $node->{'menu_up'}; } # the following node is the node following in node reading order # it is thus first the child, else the next, else the next following # the up if ($node->{'menu_child'}) { $node->{'following'} = $node->{'menu_child'}; } elsif ($node->{'automatic_directions'} and defined($node->{'with_section'}) and defined($node->{'with_section'}->{'child'})) { $node->{'following'} = get_node($node->{'with_section'}->{'child'}); } elsif (defined($node->{'nodenext'})) { $node->{'following'} = $node->{'nodenext'}; } else { my $up = $node->{'nodeup'}; # in order to avoid infinite recursion in case the up node is the # node itself we use the up node as following when there isn't # a correct menu structure, here and also below. $node->{'following'} = $up if (defined($up) and grep {$_ eq $up->{'texi'}} @{$node->{'up_not_in_menu'}}); while ((!defined($node->{'following'})) and (defined($up))) { if (($node_top) and ($up eq $node_top)) { # if we are at Top, Top is following $node->{'following'} = $node_top; $up = undef; } if (defined($up->{'nodenext'})) { $node->{'following'} = $up->{'nodenext'}; } elsif (defined($up->{'nodeup'})) { if (! grep { $_ eq $up->{'nodeup'}->{'texi'} } @{$node->{'up_not_in_menu'}}) { $up = $up->{'nodeup'}; } else { # in that case we can go into a infinite loop $node->{'following'} = $up->{'nodeup'}; } } else { $up = undef; } } } # FIXME with_section or node_ref? with with_section, as it is now # it is only done for the node associated with the section, with # section_ref it will be done for all the nodes after the section but # not associated with another section (as it was before) if (defined($node->{'with_section'})) { my $section = $node->{'with_section'}; foreach my $direction ('sectionnext', 'sectionprev', 'sectionup') { $node->{$direction} = $section->{$direction} if (defined($section->{$direction})); } # FIXME the following is wrong now, since it is only done for # the node->with_section. If done for node->section_ref it # could be true. # this is a node appearing within a section but not associated # with that section. We consider that it is below that section. $node->{'sectionup'} = $section if (grep {$node eq $_} @{$section->{'node_childs'}}); } # 'up' is used in .init files. Maybe should go away. if (defined($node->{'sectionup'})) { $node->{'up'} = $node->{'sectionup'}; } elsif (defined($node->{'nodeup'}) and (!$node_top or ($node ne $node_top))) { $node->{'up'} = $node->{'nodeup'}; } # 'next' not used but documented. if (defined($node->{'sectionnext'})) { $node->{'next'} = $node->{'sectionnext'}; } if (defined($node->{'sectionprev'})) { $node->{'prev'} = $node->{'sectionprev'}; } # default id for nodes. Should be overriden later. $node->{'id'} = 'NOD' . $node_nr; $node_nr++; } # do node directions for sections # FIXME: really do that? foreach my $section (@sections_list) { # If the element is not a node, then all the node directions are copied # if there is an associated node if (defined($section->{'with_node'})) { $section->{'nodenext'} = $section->{'with_node'}->{'nodenext'}; $section->{'nodeprev'} = $section->{'with_node'}->{'nodeprev'}; $section->{'menu_next'} = $section->{'with_node'}->{'menu_next'}; $section->{'menu_prev'} = $section->{'with_node'}->{'menu_prev'}; $section->{'menu_child'} = $section->{'with_node'}->{'menu_child'}; $section->{'menu_up'} = $section->{'with_node'}->{'menu_up'}; $section->{'nodeup'} = $section->{'with_node'}->{'nodeup'}; $section->{'following'} = $section->{'with_node'}->{'following'}; } else { # the section has no node associated. Find the node directions using # sections if (defined($section->{'toplevelnext'})) { $section->{'nodenext'} = get_node($section->{'toplevelnext'}); } elsif (defined($section->{'sectionnext'})) { $section->{'nodenext'} = get_node($section->{'sectionnext'}); } if (defined($section->{'toplevelprev'})) { $section->{'nodeprev'} = get_node($section->{'toplevelprev'}); } elsif (defined($section->{'sectionprev'})) { $section->{'nodeprev'} = get_node($section->{'sectionprev'}); } if (defined($section->{'sectionup'})) { $section->{'nodeup'} = get_node($section->{'sectionup'}); } if ($section->{'child'}) { $section->{'following'} = get_node($section->{'child'}); } elsif ($section->{'toplevelnext'}) { $section->{'following'} = get_node($section->{'toplevelnext'}); } elsif ($section->{'sectionnext'}) { $section->{'following'} = get_node($section->{'sectionnext'}); } elsif ($section->{'sectionup'}) { my $up = $section; while ($up->{'sectionup'} and !$section->{'following'}) { print STDERR "# Going up, searching next section from $up->{'texi'}\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); die "BUG: $up->{'texi'} is up for itself\n" if ($up eq $up->{'sectionup'}); $up = $up->{'sectionup'}; if ($up->{'sectionnext'}) { $section->{'following'} = get_node ($up->{'sectionnext'}); } } } } } my $only_nodes = 0; my $only_sections = 0; # for legibility my $use_nodes = $Texi2HTML::Config::USE_NODES; my $use_sections = $Texi2HTML::Config::USE_SECTIONS; $only_nodes = 1 if ( (!scalar(@sections_list) and ($use_nodes or (!$use_sections and !defined($use_nodes)))) or ($use_nodes and !$use_sections) ); $only_sections = 1 if (!$only_nodes and !$use_nodes and ($use_sections or !defined($use_sections))); #print STDERR "only_nodes: $only_nodes, only_sections $only_sections\n"; my $prev_element; print STDERR "# Build the elements list\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); foreach my $element (@all_elements) { if ($element->{'node'}) { if (!$only_nodes and $node_top and $element eq $node_top and !$section_top and !$node_top->{'with_section'}) { # special case for the top node if it isn't associated with # a section. # FIXME Config variable print STDERR "# Top not associated with a section\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); $node_top->{'top_as_section'} = 1; $node_top->{'section_ref'} = $node_top; $prev_element = add_t2h_element($element, \@elements_list, $prev_element); } elsif ($element->{'section_ref'} and ($only_sections or (!$only_nodes and $element->{'with_section'}))) { add_t2h_dependent_element ($element, $element->{'section_ref'}); $element->{'toc_level'} = $element->{'section_ref'}->{'toc_level'}; } elsif (!$only_sections) { $prev_element = add_t2h_element($element, \@elements_list, $prev_element); if ($element->{'section_ref'}) { # may happen if $only_nodes $element->{'toc_level'} = $element->{'section_ref'}->{'toc_level'}; } } else # $only_section and !$section_ref. This should only # happen when there are no sections # in that case it is possible that the node_top is an # element, so it is associated with this one. Maybe it # may happen that the node_top is not an element, not sure # what would be the consequence ni that case. { if ($node_top) { add_t2h_dependent_element ($element, $node_top); } else { #print STDERR "node $element->{'texi'} not associated with an element\n"; } } # FIXME use Texi2HTML::Config::NODE_TOC_LEVEL? $element->{'toc_level'} = $MIN_LEVEL if (!defined($element->{'toc_level'})); } else { if ($element->{'node_ref'} and $only_nodes) { add_t2h_dependent_element ($element, $element->{'node_ref'}); } elsif (!$only_nodes) { $prev_element = add_t2h_element($element, \@elements_list, $prev_element); } } } # find texi2html specific directions and elements that are not texinfo # language features. # # Maybe Config hooks should be used at that point (up to index # preparation) # # find first, last and top elements if (@elements_list) { $element_first = $elements_list[0]; print STDERR "# element first: $element_first->{'texi'}\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); # It is the last element before indices split, which may add new # elements $element_last = $elements_list[-1]; } else { print STDERR "# \@elements_list is empty\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); } print STDERR "# top node: $node_top->{'texi'}\n" if (defined($node_top) and ($T2H_DEBUG & $DEBUG_ELEMENTS)); if (defined($section_top)) { # element top is the element with @top. $element_top = $section_top; } elsif (defined($node_top)) { # If the top node is associated with a section it is the top_element # otherwise element top may be the top node $element_top = $node_top; } elsif (defined($element_first)) { # If there is no @top section no top node the first node is the top element $element_top = $element_first; } if (defined($element_top)) { $element_top->{'top'} = 1 if ($element_top->{'node'}); print STDERR "# element top: $element_top->{'texi'}\n" if ($element_top and ($T2H_DEBUG & $DEBUG_ELEMENTS)); } print STDERR "# find fastback and fastforward\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); foreach my $element (@elements_list) { my $up = get_top($element); # this is a node not associated with a section $up = get_top($element->{'section_ref'}) if (!defined($up) and $element->{'node'} and $element->{'section_ref'}); next unless (defined($up)); # take the opportunity to set the first chapter with index $element_chapter_index = $up if ($element_index and ($element_index eq $element)); # fastforward is the next element on same level than the upper parent # element. if (exists ($up->{'toplevelnext'})) { $element->{'fastforward'} = $up->{'toplevelnext'} } # if the element isn't at the highest level, fastback is the # highest parent element if ($up and ($up ne $element)) { $element->{'fastback'} = $up; } elsif ($element->{'toplevel'}) { # the element is a top level element, we adjust the next # toplevel element fastback $element->{'fastforward'}->{'fastback'} = $element if ($element->{'fastforward'}); } } foreach my $element (@elements_list) { # FIXME: certainly wrong. Indeed this causes the section associated # with the @node Top to be up for a @chapter, even if it is a # @chapter and not @top. It could even be up and, say, a @section! if ($element->{'toplevel'} and ($element ne $element_top)) { $element->{'up'} = $element_top; } } # set 'reference_element' which is used each time there is a cross ref # to that node. # It is the section associated with the node if there are only sections # FIXME with only_nodes there should certainly be a corresponding # reference_element set. # also should certainly be done above if ($only_sections) { foreach my $node(@nodes_list) { if ($node->{'with_section'}) { $node->{'reference_element'} = $node->{'with_section'}; } } } # do human readable id print STDERR "# find float id\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); foreach my $float (@floats) { $float->{'style_id'} = cross_manual_line(normalise_space($float->{'style_texi'})); my $float_style = { }; if (exists($floats{$float->{'style_id'}})) { $float_style = $floats{$float->{'style_id'}}; } else { $floats{$float->{'style_id'}} = $float_style; } push @{$float_style->{'floats'}}, $float; $float->{'absolute_nr'} = scalar(@{$float_style->{'floats'}}); my $up = get_top($float->{'element'}); if (defined($up) and (!defined($float_style->{'current_chapter'}) or ($up->{'texi'} ne $float_style->{'current_chapter'}))) { $float_style->{'current_chapter'} = $up->{'texi'}; $float_style->{'nr_in_chapter'} = 1; } else { $float_style->{'nr_in_chapter'}++; } if (defined($up) and $up->{'number'} ne '') { $float->{'chapter_nr'} = $up->{'number'}; $float->{'nr'} = $float->{'chapter_nr'} . $float_style->{'nr_in_chapter'}; } else { $float->{'nr'} = $float->{'absolute_nr'}; } } print STDERR "# do human-readable index entries id\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); if ($Texi2HTML::Config::NEW_CROSSREF_STYLE) { foreach my $index_entry (@index_labels) { my $index_id = "index-" . $index_entry->{'cross'}; my $index = 1; # $index > 0 should prevent integer overflow, hopefully while (exists($cross_reference_nodes{$index_id}) and $index > 0) { $index_id = "index-" . $index_entry->{'cross'} . "-" .$index; $index++; } $index_entry->{'id'} = $index_id; $index_entry->{'target'} = $index_id; my $texi_entry = "index-".$index_entry->{'texi'}; $texi_entry .= "-".$index if ($index > 1); push @{$cross_reference_nodes{$index_id}}, $texi_entry; } } if ($Texi2HTML::Config::NEW_CROSSREF_STYLE) { foreach my $key (keys(%nodes)) { my $node = $nodes{$key}; next if ($node->{'external_node'}); $node->{'id'} = node_to_id($node->{'cross_manual_target'}); # FIXME if NEW_CROSSREF_STYLE false is it done for anchors? $node->{'target'} = $node->{'id'}; } } # use %sections and %headings to modify also the headings foreach my $section (values(%sections), values(%headings)) { if ($Texi2HTML::Config::NEW_CROSSREF_STYLE and ($section->{'cross'} =~ /\S/)) { my $section_cross = $section->{'cross'}; if (defined($section->{'region'})) { # for headings appearing in special regions like @copying... $section_cross = "${target_prefix}-$section->{'region'}_$section_cross"; } $section->{'cross_manual_target'} = $section_cross; my $index = 1; # $index > 0 should prevent integer overflow, hopefully while (exists($cross_reference_nodes{$section->{'cross_manual_target'}}) and $index > 0) { $section->{'cross_manual_target'} = $section_cross . "-" .$index; $index++; } my $texi_entry = $section->{'texi'}; $texi_entry .= "-".$index if ($index > 1); push @{$cross_reference_nodes{$section->{'cross_manual_target'}}}, $texi_entry; $section->{'id'} = node_to_id($section->{'cross_manual_target'}); } if ($Texi2HTML::Config::USE_NODE_TARGET and $section->{'with_node'}) { $section->{'target'} = $section->{'with_node'}->{'target'}; } else { $section->{'target'} = $section->{'id'}; } } # construct human readable tocid foreach my $section (values(%sections)) { if ($Texi2HTML::Config::NEW_CROSSREF_STYLE and ($section->{'cross'} =~ /\S/)) { foreach my $toc_id (['tocid','toc'], ['stocid', 'stoc']) { my $id_string = $toc_id->[0]; my $prefix_string = $toc_id->[1]; my $cross_string = '-' . $section->{'cross_manual_target'}; $section->{$id_string} = $prefix_string . $cross_string; my $index = 1; # $index > 0 should prevent integer overflow, hopefully while (exists($cross_reference_nodes{$section->{$id_string}}) and $index > 0) { $section->{$id_string} = $prefix_string . "-" .$index .$cross_string; $index++; } my $texi_entry = $prefix_string.'-'.$section->{'texi'}; $texi_entry = $prefix_string .'-'.$index.'-'.$section->{'texi'} if ($index > 1); push @{$cross_reference_nodes{$section->{$id_string}}}, $texi_entry; } } } if (!$Texi2HTML::Config::NEW_CROSSREF_STYLE) { my $tocnr = 1; foreach my $element (@elements_list) { $element->{'tocid'} = 'TOC' . $tocnr; $tocnr++; } } # Set file names # Find node file names and file names for nodes considered as elements my $node_as_top; if ($node_top) { $node_as_top = $node_top; } elsif ($element_top->{'with_node'}) { $node_as_top = $element_top->{'with_node'}; } else { $node_as_top = $node_first; } if ($node_as_top) { do_node_target_file($node_as_top, 'top'); } foreach my $key (keys(%nodes)) { my $node = $nodes{$key}; next if (defined($node_as_top) and ($node eq $node_as_top)); do_node_target_file($node,''); } print STDERR "# split and set files\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); # find document nr and document file for sections and nodes. # Split according to Texi2HTML::Config::SPLIT. # find file and id for placed elements (anchors, index entries, headings) if ($Texi2HTML::Config::SPLIT) { $Texi2HTML::THISDOC{'split_level'} = $toplevel; my $doc_nr = -1; if ($Texi2HTML::Config::SPLIT eq 'section') { $Texi2HTML::THISDOC{'split_level'} = 2 if ($toplevel <= 2); } my $previous_file; foreach my $element (@elements_list) { print STDERR "# Splitting ($Texi2HTML::Config::SPLIT:$Texi2HTML::THISDOC{'split_level'}) $element->{'texi'}\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); my $new_file = 0; if ( ($Texi2HTML::Config::SPLIT eq 'node') or ( defined($element->{'level'}) and ($element->{'level'} <= $Texi2HTML::THISDOC{'split_level'}) ) ) { $new_file = 1; $doc_nr++; } $doc_nr = 0 if ($doc_nr < 0); # happens if first elements are nodes $element->{'doc_nr'} = $doc_nr; my $is_top = ''; $element->{'file'} = "${docu_name}_$doc_nr" . (defined($Texi2HTML::THISDOC{'extension'}) ? ".$Texi2HTML::THISDOC{'extension'}" : ''); my $use_node_file = 0; if ($element->{'top'} or (defined($element->{'with_node'}) and $element->{'with_node'} eq $element_top)) { # the top elements $is_top = "top"; $element->{'file'} = $docu_top; } elsif ($Texi2HTML::Config::NODE_FILES) { $use_node_file = 1; if ($new_file) { my $node = get_node($element) unless(exists($element->{'with_node'}) and $element->{'with_node'}->{'element_added'}); if ($node and defined($node->{'node_file'})) { $element->{'file'} = $node->{'node_file'}; } $previous_file = $element->{'file'}; } elsif($previous_file) { $element->{'file'} = $previous_file; } } do_element_targets($element, $use_node_file); print STDERR "# add_file($use_node_file) $element->{'file'} for $element->{'texi'}\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); add_file($element->{'file'}); } } else { # not split add_file($docu_doc); foreach my $element(@elements_list) { $element->{'file'} = $docu_doc; $element->{'doc_nr'} = 0; do_element_targets($element); } } # 'pathological' cases. No texinfo sectionning element at all or no # texi2html sectionning elements if (!@elements_list) { if (@all_elements) { foreach my $element (@all_elements) { #print STDERR "# no \@elements_list. Processing $element->{'texi'}\n"; $element->{'file'} = $docu_doc; $element->{'doc_nr'} = 0; push @{$element->{'place'}}, @{$element->{'current_place'}}; do_element_targets($element); } } else { $element_before_anything->{'file'} = $docu_doc; $element_before_anything->{'doc_nr'} = 0; do_element_targets($element_before_anything); } } # correct the id and file for the things placed in footnotes foreach my $place(@{$footnote_element->{'place'}}) { do_place_target_file ($place, $footnote_element, 'footnotes'); } # if setcontentsaftertitlepage is set, the contents should be associated # with the titlepage. That's wat is done there. push @$no_element_associated_place, $content_element{'contents'} if ($Texi2HTML::THISDOC{'DO_CONTENTS'} and $Texi2HTML::THISDOC{'setcontentsaftertitlepage'}); push @$no_element_associated_place, $content_element{'shortcontents'} if ($Texi2HTML::THISDOC{'DO_SCONTENTS'} and $Texi2HTML::THISDOC{'setshortcontentsaftertitlepage'}); # correct the id and file for the things placed in regions (copying...) foreach my $place(@$no_element_associated_place) { #print STDERR "entry $place->{'entry'} texi $place->{'texi'}\n"; $place->{'element'} = $element_top if (exists($place->{'element'})); do_place_target_file ($place, $element_top, 'no_associated_element'); } foreach my $content_type(keys(%content_element)) { # with set*aftertitlepage, there will always be a href to Contents # or Overview pointing to the top element, even if there is no # titlepage outputed. if ((!defined($content_element{$content_type}->{'file'})) and $Texi2HTML::Config::INLINE_CONTENTS) { print STDERR "# No content $content_type\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); $content_element{$content_type} = undef; } } my ($toc_file, $stoc_file); $toc_file = $docu_toc; $stoc_file = $docu_stoc; if ($Texi2HTML::Config::INLINE_CONTENTS) { $toc_file = $content_element{'contents'}->{'file'} if (defined($content_element{'contents'})); $stoc_file = $content_element{'shortcontents'}->{'file'} if (defined($content_element{'shortcontents'})); } $Texi2HTML::THISDOC{'toc_file'} = $toc_file; $Texi2HTML::THISDOC{'stoc_file'} = $stoc_file; print STDERR "# find NextFile and PrevFile\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); foreach my $element (@elements_list) { my $current_element = $element; my $file = $current_element->{'file'}; my $previous_file; while ($current_element->{'back'}) { #print STDERR "Back $current_element->{'texi'}\n"; $current_element = $current_element->{'back'}; if ($current_element->{'file'} ne $file) { $previous_file = $current_element->{'file'}; last; } } if (defined($previous_file)) { while ($current_element->{'back'}) { if ($current_element->{'back'}->{'file'} ne $previous_file) { last; } $current_element = $current_element->{'back'}; } $element->{'prevfile'} = $current_element; } $current_element = $element; while ($current_element->{'forward'}) { #print STDERR "Fwd $current_element->{'texi'}\n"; $current_element = $current_element->{'forward'}; if ($current_element->{'file'} ne $file) { $element->{'nextfile'} = $current_element; } } } # convert directions in direction with first letter in all caps, to be # consistent with the convention used in the .init file. foreach my $element (@elements_list) { foreach my $direction (@element_directions) { my $direction_no_caps = $direction; $direction_no_caps =~ tr/A-Z/a-z/; $element->{$direction} = $element->{$direction_no_caps}; } } ########################### debug prints foreach my $file (keys(%files)) { last unless ($T2H_DEBUG & $DEBUG_ELEMENTS); print STDERR "$file: counter $files{$file}->{'counter'}\n"; } my $output_elements = \@elements_list; if (!scalar(@elements_list) and ($T2H_DEBUG & $DEBUG_ELEMENTS)) { print STDERR "No elements_list, no texi2html elements\n"; $output_elements = \@all_elements; } foreach my $element ((@$output_elements, $footnote_element)) { last unless ($T2H_DEBUG & $DEBUG_ELEMENTS); my $is_toplevel = 'not toplevel'; $is_toplevel = 'toplevel' if ($element->{'toplevel'}); print STDERR "$element "; if ($element->{'node'}) { print STDERR "node($element->{'id'}, toc_level $element->{'toc_level'}, $is_toplevel, doc_nr $element->{'doc_nr'}($element->{'file'})) $element->{'texi'}:\n"; print STDERR " section_ref: $element->{'section_ref'}->{'texi'}\n" if (defined($element->{'section_ref'})); print STDERR " with_section: $element->{'with_section'}->{'texi'}\n" if (defined($element->{'with_section'})); } elsif ($element->{'footnote'}) { print STDERR "footnotes($element->{'id'}, file $element->{'file'})\n"; } else { my $number = "UNNUMBERED"; $number = $element->{'number'} if ($element->{'number'}); print STDERR "$number ($element->{'id'}, $is_toplevel, level $element->{'level'}-$element->{'toc_level'}, doc_nr $element->{'doc_nr'}($element->{'file'})) $element->{'texi'}:\n"; print STDERR " with_node: $element->{'with_node'}->{'texi'}\n" if (defined($element->{'with_node'})); print STDERR " node_ref: $element->{'node_ref'}->{'texi'}\n" if (defined($element->{'node_ref'})); } if (!$element->{'footnote'}) { if (!defined($files{$element->{'file'}})) { die "Bug: files{\$element->{'file'}} undef element $element->{'texi'}, file $element->{'file'}."; } print STDERR " file: $element->{'file'} $files{$element->{'file'}}, counter $files{$element->{'file'}}->{'counter'}\n"; } print STDERR " TOP($toplevel) " if ($element->{'top'}); print STDERR " u: $element->{'up'}->{'texi'}\n" if (defined($element->{'up'})); print STDERR " ch: $element->{'child'}->{'texi'}\n" if (defined($element->{'child'})); print STDERR " fb: $element->{'fastback'}->{'texi'}\n" if (defined($element->{'fastback'})); print STDERR " b: $element->{'back'}->{'texi'}\n" if (defined($element->{'back'})); print STDERR " p: $element->{'prev'}->{'texi'}\n" if (defined($element->{'prev'})); print STDERR " u: $element->{'sectionup'}->{'texi'}\n" if (defined($element->{'sectionup'})); print STDERR " n: $element->{'sectionnext'}->{'texi'}\n" if (defined($element->{'sectionnext'})); print STDERR " t_n: $element->{'toplevelnext'}->{'texi'}\n" if (defined($element->{'toplevelnext'})); print STDERR " t_p: $element->{'toplevelprev'}->{'texi'}\n" if (defined($element->{'toplevelprev'})); print STDERR " n_u: $element->{'nodeup'}->{'texi'}\n" if (defined($element->{'nodeup'})); print STDERR " f: $element->{'forward'}->{'texi'}\n" if (defined($element->{'forward'})); print STDERR " follow: $element->{'following'}->{'texi'}\n" if (defined($element->{'following'})); print STDERR " m_p: $element->{'menu_prev'}->{'texi'}\n" if (defined($element->{'menu_prev'})); print STDERR " m_n: $element->{'menu_next'}->{'texi'}\n" if (defined($element->{'menu_next'})); print STDERR " m_u: $element->{'menu_up'}->{'texi'}\n" if (defined($element->{'menu_up'})); print STDERR " m_ch: $element->{'menu_child'}->{'texi'}\n" if (defined($element->{'menu_child'})); print STDERR " ff: $element->{'fastforward'}->{'texi'}\n" if (defined($element->{'fastforward'})); print STDERR " n_f: $element->{'nextfile'}->{'texi'}\n" if (defined($element->{'nextfile'})); print STDERR " p_f: $element->{'prevfile'}->{'texi'}\n" if (defined($element->{'prevfile'})); my $section_childs = ''; if (defined($element->{'section_childs'})) { foreach my $child (@{$element->{'section_childs'}}) { $section_childs .= "$child->{'texi'}|"; } } print STDERR " s_chs: $section_childs\n" if ($section_childs ne ''); my $node_childs = ''; if (defined($element->{'node_childs'})) { foreach my $child (@{$element->{'node_childs'}}) { $node_childs .= "$child->{'texi'}|"; } } print STDERR " n_chs: $node_childs\n" if ($node_childs ne ''); if (defined($element->{'menu_up_hash'})) { print STDERR " parent nodes:\n"; foreach my $menu_up (keys%{$element->{'menu_up_hash'}}) { print STDERR " $menu_up ($element->{'menu_up_hash'}->{$menu_up})\n"; } } print STDERR " places: $element->{'place'}\n"; foreach my $place(@{$element->{'place'}}) { if (!$place->{'entry'} and !$place->{'float'} and !$place->{'texi'} and !$place->{'contents'} and !$place->{'shortcontents'} and (!defined($place->{'command'} or $place->{'command'} ne 'printindex'))) { print STDERR "BUG: unknown placed stuff ========\n"; foreach my $key (keys(%$place)) { print STDERR "$key: $place->{$key}\n"; } print STDERR "==================================\n"; } elsif ($place->{'entry'}) { print STDERR " index($place): $place->{'entry'} ($place->{'id'}, $place->{'file'})\n"; } elsif ($place->{'anchor'}) { print STDERR " anchor: $place->{'texi'} ($place->{'id'}, $place->{'file'})\n"; } elsif ($place->{'float'}) { if (defined($place->{'texi'})) { print STDERR " float($place): $place->{'texi'} ($place->{'id'}, $place->{'file'})\n"; } else { print STDERR " float($place): NO LABEL ($place->{'id'}, $place->{'file'})\n"; } } elsif ($place->{'contents'}) { print STDERR " contents\n"; } elsif ($place->{'shortcontents'}) { print STDERR " shortcontents\n"; } elsif (defined($place->{'command'}) and $place->{'command'} eq 'printindex') { print STDERR " printindex $place->{'name'}\n"; } else { print STDERR " heading: $place->{'texi'} ($place->{'id'}, $place->{'file'})\n"; } } } ########################### end debug prints } sub add_file($) { my $file = shift; if ($files{$file}) { $files{$file}->{'counter'}++; } else { $files{$file} = { #'type' => 'section', 'counter' => 1, 'relative_foot_num' => 0, 'foot_lines' => [] }; } } # find parent element which is a top element, or a node within the top section sub get_top($) { my $element = shift; my $up = $element; while (!$up->{'toplevel'} and !$up->{'top'}) { $up = $up->{'sectionup'}; if (!defined($up)) { # If there is no section, it is normal not to have toplevel element, # and it is also the case if there is a low level element before # a top level element return undef; } } return $up; } sub get_node($) { my $element = shift; return undef if (!defined($element)); return $element if ($element->{'node'}); return $element->{'with_node'} if ($element->{'with_node'}); return $element; } sub do_section_names($$) { my $number = shift; my $section = shift; #$section->{'name'} = substitute_line($section->{'texi'}); my $texi = &$Texi2HTML::Config::heading_texi($section->{'tag'}, $section->{'texi'}, $section->{'number'}); $section->{'text'} = substitute_line($texi); $section->{'text_nonumber'} = substitute_line($section->{'texi'}); # backward compatibility $section->{'name'} = $section->{'text_nonumber'}; $section->{'no_texi'} = remove_texi($texi); $section->{'simple_format'} = simple_format(undef,undef,$texi); $section->{'heading_texi'} = $texi; } # get the html names from the texi for all elements sub do_names() { print STDERR "# Doing ". scalar(keys(%nodes)) . " nodes, ". scalar(keys(%sections)) . " sections, " . scalar(keys(%headings)) . " headings in ". $#elements_list . " elements\n" if ($T2H_DEBUG); # for nodes and anchors we haven't any state defined # This seems right, however, as we don't want @refs or @footnotes # or @anchors within nodes, section commands or anchors. foreach my $node (keys(%nodes)) { my $texi = &$Texi2HTML::Config::heading_texi($nodes{$node}->{'tag'}, $nodes{$node}->{'texi'}, undef); $nodes{$node}->{'text'} = substitute_line ($texi, {'code_style' => 1}); $nodes{$node}->{'text_nonumber'} = $nodes{$node}->{'text'}; # backward compatibility -> maybe used to have the name without code_style ? $nodes{$node}->{'name'} = substitute_line($texi); $nodes{$node}->{'no_texi'} = remove_texi($texi); $nodes{$node}->{'simple_format'} = simple_format(undef, undef, $texi); $nodes{$node}->{'heading_texi'} = $texi; # FIXME : what to do if $nodes{$node}->{'external_node'} and # $nodes{$node}->{'seen'} } foreach my $number (keys(%sections)) { do_section_names($number, $sections{$number}); } foreach my $number (keys(%headings)) { do_section_names($number, $headings{$number}); } print STDERR "# Names done\n" if ($T2H_DEBUG); } #+++############################################################################ # # # Stuff related to Index generation # # # #---############################################################################ my $index_entries; # ref on a hash for the index entries # called during pass_structure sub enter_index_entry($$$$$$$) { my $prefix = shift; my $line_nr = shift; my $entry = shift; my $place = shift; my $element = shift; my $command = shift; my $region = shift; unless ($index_prefix_to_name{$prefix}) { echo_error ("Undefined index command: ${prefix}index", $line_nr); $entry = ''; } if (!exists($element->{'tag'}) and !$element->{'footnote'}) { echo_warn ("Index entry before document: \@${prefix}index $entry", $line_nr); } #print STDERR "($region) $key" if $region; $entry =~ s/\s+$//; $entry =~ s/^\s*//; # The $key is mostly usefull for alphabetical sorting. # beware that an entry beginning with a format will lead to an empty # key, but with some texi. # FIXME this should be done later, during formatting. my $key = remove_texi($entry); my $id; my $index_entry_hidden = (($place eq $no_element_associated_place) or $region); # don't add a specific index target if after a section or the index # entry is in @copying or the like unless ($index_entry_hidden) { $id = 'IDX' . ++$document_idx_num; } my $target = $id; # entry will later be in @code for code-like index entry. texi stays # the same. my $index_entry = { 'entry' => $entry, 'key' => $key, 'texi' => $entry, 'element' => $element, 'prefix' => $prefix, 'id' => $id, 'target' => $target, 'command' => $command, }; print STDERR "# enter \@$command ${prefix}index($key) [$entry] with id $id ($index_entry)\n" if ($T2H_DEBUG & $DEBUG_INDEX); if ($entry =~ /^\s*$/) { # makeinfo doesn't warn, but texi2dvi breaks. echo_warn("Empty index entry for \@$command",$line_nr); # don't add the index entry to the list of index entries used for index # entry formatting,if the index entry appears in a region like copying push @index_labels, $index_entry unless $index_entry_hidden; return; } while (exists $index_entries->{$prefix}->{$key}) { $key .= ' '; } $index_entries->{$prefix}->{$key} = $index_entry; push @$place, $index_entry; # don't add the index entry to the list of index entries used for index # entry formatting,if the index entry appears in a region like copying push @index_labels, $index_entry unless ($index_entry_hidden); } # sort according to cmp if both $a and $b are alphabetical or non alphabetical, # otherwise the alphabetical is ranked first sub by_alpha { if ($a =~ /^[A-Za-z]/) { if ($b =~ /^[A-Za-z]/) { return lc($a) cmp lc($b); } else { return 1; } } elsif ($b =~ /^[A-Za-z]/) { return -1; } else { return lc($a) cmp lc($b); } } my %indices; # hash of indices names containing #[ $pages, $entries ] (page indices and # raw index entries) # return the page and the entries. Cache the result in %indices. sub get_index($;$$) { my $index_name = shift; my $line_nr = shift; my $no_warn = shift; #return (@{$indices{$index_name}}) if ($indices{$index_name}); return ($indices{$index_name}) if ($indices{$index_name}); unless (exists($index_names{$index_name})) { echo_error ("Bad index name: $index_name", $line_nr) unless ($no_warn); return; } # add the index name itself to the index names searched for index # prefixes. Only those found associated by synindex or syncodeindex are # already there (unless this code has already been called). if ($index_names{$index_name}->{'code'}) { $index_names{$index_name}->{'associated_indices_code'}->{$index_name} = 1; } else { $index_names{$index_name}->{'associated_indices'}->{$index_name} = 1; } # find all the index names associated with the prefixes and then # all the entries associated with each prefix my $entries = {}; foreach my $associated_indice(keys %{$index_names{$index_name}->{'associated_indices'}}) { foreach my $prefix(@{$index_names{$associated_indice}->{'prefix'}}) { foreach my $key (keys %{$index_entries->{$prefix}}) { $entries->{$key} = $index_entries->{$prefix}->{$key}; } } } foreach my $associated_indice (keys %{$index_names{$index_name}->{'associated_indices_code'}}) { unless (exists ($index_names{$index_name}->{'associated_indices'}->{$associated_indice})) { foreach my $prefix (@{$index_names{$associated_indice}->{'prefix'}}) { foreach my $key (keys (%{$index_entries->{$prefix}})) { $entries->{$key} = $index_entries->{$prefix}->{$key}; # use @code for code style index entry $entries->{$key}->{'entry'} = "\@code{$entries->{$key}->{entry}}"; } } } } return unless %$entries; $indices{$index_name} = $entries; return $entries; } # these variables are global, so great care should be taken with # state->{'multiple_state'}, ->{'region'}, ->{'region_pass'} and # {'outside_document'}. my $global_head_num = 0; # heading index. it is global for the main doc, # and taken from the state if in multiple_pass. my $global_foot_num = 0; my $global_relative_foot_num = 0; my @foot_lines = (); # footnotes my $copying_comment = ''; # comment constructed from text between # @copying and @end copying with licence my %acronyms_like = (); # acronyms or similar commands associated texts # the key are the commands, the values are # hash references associating shorthands to # texts. sub fill_state($) { my $state = shift; $state->{'preformatted'} = 0 unless exists($state->{'preformatted'}); $state->{'code_style'} = 0 unless exists($state->{'code_style'}); $state->{'math_style'} = 0 unless exists($state->{'math_style'}); $state->{'keep_texi'} = 0 unless exists($state->{'keep_texi'}); $state->{'keep_nr'} = 0 unless exists($state->{'keep_nr'}); $state->{'detailmenu'} = 0 unless exists($state->{'detailmenu'}); # number of opened detailed menus $state->{'sec_num'} = 0 unless exists($state->{'sec_num'}); $state->{'paragraph_style'} = [ '' ] unless exists($state->{'paragraph_style'}); $state->{'preformatted_stack'} = [ '' ] unless exists($state->{'preformatted_stack'}); $state->{'menu'} = 0 unless exists($state->{'menu'}); $state->{'command_stack'} = [] unless exists($state->{'command_stack'}); $state->{'quotation_stack'} = [] unless exists($state->{'quotation_stack'}); # if there is no $state->{'element'} the first element is used if ((!$state->{'element'} or $state->{'element'}->{'before_anything'}) and (@elements_list)) { $state->{'element'} = $elements_list[0]; } $state->{'element'} = {'file' => $docu_doc, 'texi' => 'VIRTUAL ELEMENT'} if (!$state->{'element'}); #$state->{'element'} = $elements_list[0] unless ((!@elements_list) or (exists($state->{'element'}) and !$state->{'element'}->{'before_anything'})); } sub do_element_directions ($) { my $this_element = shift; #print STDERR "Doing hrefs for $this_element->{'texi'} First "; $Texi2HTML::HREF{'First'} = href($element_first, $this_element->{'file'}); #print STDERR "Last "; $Texi2HTML::HREF{'Last'} = href($element_last, $this_element->{'file'}); #print STDERR "Index "; $Texi2HTML::HREF{'Index'} = href($element_chapter_index, $this_element->{'file'}) if (defined($element_chapter_index)); #print STDERR "Top "; $Texi2HTML::HREF{'Top'} = href($element_top, $this_element->{'file'}); if ($Texi2HTML::Config::INLINE_CONTENTS) { $Texi2HTML::HREF{'Contents'} = href($content_element{'contents'}, $this_element->{'file'}); $Texi2HTML::HREF{'Overview'} = href($content_element{'shortcontents'}, $this_element->{'file'}); } else { $Texi2HTML::HREF{'Contents'} = file_target_href($Texi2HTML::THISDOC{'toc_file'}, $this_element->{'file'}, $content_element{'contents'}->{'target'}) if (@{$Texi2HTML::TOC_LINES} and defined($content_element{'contents'})); $Texi2HTML::HREF{'Overview'} = file_target_href($Texi2HTML::THISDOC{'stoc_file'}, $this_element->{'file'}, $content_element{'shortcontents'}->{'target'}) if (@{$Texi2HTML::OVERVIEW} and defined($content_element{'shortcontents'})); } if ($Texi2HTML::THISDOC{'do_about'}) { $Texi2HTML::HREF{'About'} = file_target_href($docu_about, $this_element->{'file'}, $Texi2HTML::Config::misc_pages_targets{'About'}); } $Texi2HTML::HREF{'Footnotes'} = file_target_href($docu_foot, $this_element->{'file'}, $Texi2HTML::Config::misc_pages_targets{'Footnotes'}); foreach my $direction (@element_directions) { my $elem = $this_element->{$direction}; $Texi2HTML::NODE{$direction} = undef; $Texi2HTML::HREF{$direction} = undef; $Texi2HTML::NAME{$direction} = undef; #print STDERR "$direction \n"; next unless (defined($elem)); if ($elem->{'node'} or $elem->{'external_node'} or !$elem->{'seen'}) { $Texi2HTML::NODE{$direction} = $elem->{'text'}; } elsif ($elem->{'with_node'}) { $Texi2HTML::NODE{$direction} = $elem->{'with_node'}->{'text'}; } if (!$elem->{'seen'}) { $Texi2HTML::HREF{$direction} = do_external_href($elem->{'texi'}); } else { $Texi2HTML::HREF{$direction} = href($elem, $this_element->{'file'}); } $Texi2HTML::NAME{$direction} = $elem->{'text'}; $Texi2HTML::NO_TEXI{$direction} = $elem->{'no_texi'}; $Texi2HTML::SIMPLE_TEXT{$direction} = $elem->{'simple_format'}; #print STDERR "$direction ($this_element->{'texi'}): \n NO_TEXI: $Texi2HTML::NO_TEXI{$direction}\n NAME $Texi2HTML::NAME{$direction}\n NODE $Texi2HTML::NODE{$direction}\n HREF $Texi2HTML::HREF{$direction}\n\n"; } #print STDERR "\nDone hrefs for $this_element->{'texi'}\n"; } sub open_out_file($) { my $new_file = shift; my $do_page_head = 0; if ($files{$new_file}->{'filehandle'}) { $Texi2HTML::THISDOC{'FH'} = $files{$new_file}->{'filehandle'}; } else { $Texi2HTML::THISDOC{'FH'} = open_out("$docu_rdir$new_file"); #print STDERR "OPEN $docu_rdir$file, $Texi2HTML::THISDOC{'FH'}". scalar($Texi2HTML::THISDOC{'FH'})."\n"; $files{$new_file}->{'filehandle'} = $Texi2HTML::THISDOC{'FH'}; $do_page_head = 1; } return $do_page_head; } sub pass_text($$) { my $doc_lines = shift; my $doc_numbers = shift; my %state; fill_state(\%state); my @stack; my $text; my $doc_nr; my $in_doc = 0; my @text =(); my $one_section = 1 if (@elements_list <= 1); push_state(\%state); set_special_names(); # We set titlefont only if the titlefont appeared in the top element if (defined($element_top->{'titlefont'})) { $value{'_titlefont'} = $element_top->{'titlefont'}; } # prepare %Texi2HTML::THISDOC $Texi2HTML::THISDOC{'command_stack'} = $state{'command_stack'}; # $Texi2HTML::THISDOC{'settitle_texi'} = $value{'_settitle'}; $Texi2HTML::THISDOC{'fulltitle_texi'} = ''; $Texi2HTML::THISDOC{'title_texi'} = ''; foreach my $possible_fulltitle (('_settitle', '_title', '_shorttitlepage', '_titlefont')) { if ($value{$possible_fulltitle} ne '') { $Texi2HTML::THISDOC{'fulltitle_texi'} = $value{$possible_fulltitle}; last; } } # foreach my $possible_title_texi ($value{'_settitle'}, $Texi2HTML::THISDOC{'fulltitle_texi'}) # { # if ($possible_title_texi ne '') # { # $Texi2HTML::THISDOC{'title_texi'} = $possible_title_texi; # last; # } # } # $Texi2HTML::THISDOC{'fulltitle_texi'} = $value{'_title'} || $value{'_settitle'} || $value{'_shorttitlepage'} || $value{'_titlefont'}; # $Texi2HTML::THISDOC{'title_texi'} = $value{'_title'} || $value{'_settitle'} || $value{'_shorttitlepage'} || $value{'_titlefont'}; foreach my $texi_cmd (('shorttitlepage', 'settitle', 'author', 'title', 'titlefont', 'subtitle')) { $Texi2HTML::THISDOC{$texi_cmd . '_texi'} = $value{'_' . $texi_cmd}; } foreach my $doc_thing (('shorttitlepage', 'settitle', 'author', 'titlefont', 'subtitle', 'title', 'fulltitle')) { my $thing_texi = $Texi2HTML::THISDOC{$doc_thing . '_texi'}; $Texi2HTML::THISDOC{$doc_thing} = substitute_line($thing_texi); $Texi2HTML::THISDOC{$doc_thing . '_no_texi'} = remove_texi($thing_texi); $Texi2HTML::THISDOC{$doc_thing . '_simple_format'} = simple_format(undef, undef, $thing_texi); } # find Top name my $element_top_text = ''; my $top_no_texi = ''; my $top_simple_format = ''; my $top_name; if ($element_top and $element_top->{'text'} and (!$node_top or ($element_top ne $node_top))) { $element_top_text = $element_top->{'text'}; $top_no_texi = $element_top->{'no_texi'}; $top_simple_format = $element_top->{'simple_format'}; } foreach my $possible_top_name ($Texi2HTML::Config::TOP_HEADING, $element_top_text, $Texi2HTML::THISDOC{'fulltitle'}, #$Texi2HTML::THISDOC{'shorttitle'}, &$I('Top')) { if (defined($possible_top_name) and $possible_top_name ne '') { $top_name = $possible_top_name; last; } } foreach my $possible_top_no_texi ($Texi2HTML::Config::TOP_HEADING, $top_no_texi, $Texi2HTML::THISDOC{'fulltitle_no_texi'}, #$Texi2HTML::THISDOC{'shorttitle_no_texi'}, &$I('Top',{},{'remove_texi' => 1})) { if (defined($possible_top_no_texi) and $possible_top_no_texi ne '') { $top_no_texi = $possible_top_no_texi; last; } } foreach my $possible_top_simple_format ($top_simple_format, $Texi2HTML::THISDOC{'fulltitle_simple_format'}, #$Texi2HTML::THISDOC{'shorttitle_simple_format'}, &$I('Top',{}, {'simple_format' => 1})) { if (defined($possible_top_simple_format) and $possible_top_simple_format ne '') { $top_simple_format = $possible_top_simple_format; last; } } # my $top_name = $Texi2HTML::Config::TOP_HEADING || $element_top_text || $Texi2HTML::THISDOC{'title'} || $Texi2HTML::THISDOC{'shorttitle'} || &$I('Top'); if ($Texi2HTML::THISDOC{'fulltitle_texi'} eq '') { $Texi2HTML::THISDOC{'fulltitle_texi'} = &$I('Untitled Document',{}, {'keep_texi' => 1}); } #$Texi2HTML::THISDOC{'title_texi'} = $Texi2HTML::THISDOC{'settitle_texi'}; #$Texi2HTML::THISDOC{'title_texi'} = $Texi2HTML::THISDOC{'fulltitle_texi'} # if ($Texi2HTML::THISDOC{'title_texi'} eq ''); foreach my $doc_thing (('fulltitle')) # title { my $thing_texi = $Texi2HTML::THISDOC{$doc_thing . '_texi'}; $Texi2HTML::THISDOC{$doc_thing} = substitute_line($thing_texi); $Texi2HTML::THISDOC{$doc_thing . '_no_texi'} = remove_texi($thing_texi); $Texi2HTML::THISDOC{$doc_thing . '_simple_format'} = simple_format(undef, undef, $thing_texi); } $Texi2HTML::THISDOC{'program'} = $THISPROG; $Texi2HTML::THISDOC{'program_homepage'} = $T2H_HOMEPAGE; $Texi2HTML::THISDOC{'program_authors'} = $T2H_AUTHORS; $Texi2HTML::THISDOC{'user'} = $T2H_USER; $Texi2HTML::THISDOC{'user'} = $Texi2HTML::Config::USER if (defined($Texi2HTML::Config::USER)); $Texi2HTML::THISDOC{'authors'} = [] if (!defined($Texi2HTML::THISDOC{'authors'})); $Texi2HTML::THISDOC{'subtitles'} = [] if (!defined($Texi2HTML::THISDOC{'subtitles'})); # backward compatibility, titles should go away $Texi2HTML::THISDOC{'titles'} = [] if (!defined($Texi2HTML::THISDOC{'titles'})); foreach my $command (('authors', 'subtitles', 'titles')) { my $i; for ($i = 0; $i < $#{$Texi2HTML::THISDOC{$command}} + 1; $i++) { chomp ($Texi2HTML::THISDOC{$command}->[$i]); $Texi2HTML::THISDOC{$command}->[$i] = substitute_line($Texi2HTML::THISDOC{$command}->[$i]); #print STDERR "$command:$i: $Texi2HTML::THISDOC{$command}->[$i]\n"; } } $Texi2HTML::THISDOC{'do_about'} = 1 unless (defined($Texi2HTML::THISDOC{'do_about'}) or $one_section or (not $Texi2HTML::Config::SPLIT and not $Texi2HTML::Config::SECTION_NAVIGATION)); $Texi2HTML::NAME{'First'} = $element_first->{'text'}; $Texi2HTML::NAME{'Last'} = $element_last->{'text'}; $Texi2HTML::NAME{'Top'} = $top_name; $Texi2HTML::NAME{'Index'} = $element_chapter_index->{'text'} if (defined($element_chapter_index)); $Texi2HTML::NAME{'Index'} = $Texi2HTML::Config::INDEX_CHAPTER if ($Texi2HTML::Config::INDEX_CHAPTER ne ''); $Texi2HTML::NO_TEXI{'First'} = $element_first->{'no_texi'}; $Texi2HTML::NO_TEXI{'Last'} = $element_last->{'no_texi'}; $Texi2HTML::NO_TEXI{'Top'} = $top_no_texi; $Texi2HTML::NO_TEXI{'Index'} = $element_chapter_index->{'no_texi'} if (defined($element_chapter_index)); $Texi2HTML::SIMPLE_TEXT{'First'} = $element_first->{'simple_format'}; $Texi2HTML::SIMPLE_TEXT{'Last'} = $element_last->{'simple_format'}; $Texi2HTML::SIMPLE_TEXT{'Top'} = $top_simple_format; $Texi2HTML::SIMPLE_TEXT{'Index'} = $element_chapter_index->{'simple_format'} if (defined($element_chapter_index)); # FIXME we do the regions formatting here, even if they never appear. # so we should be very carefull to take into accout 'outside_document' to # avoid messing with information that has to be set in the main document. # also the error messages will appear even though the corresponding # texinfo is never used. my ($region_text, $region_no_texi, $region_simple_format); ($region_text, $region_no_texi, $region_simple_format) = do_special_region_lines('documentdescription'); &$Texi2HTML::Config::documentdescription($region_lines{'documentdescription'},$region_text, $region_no_texi, $region_simple_format); # do copyright notice inserted in comment at the beginning of the files ($region_text, $region_no_texi, $region_simple_format) = do_special_region_lines('copying'); $copying_comment = &$Texi2HTML::Config::copying_comment($region_lines{'copying'}, $region_text, $region_no_texi, $region_simple_format); $Texi2HTML::THISDOC{'copying_comment'} = $copying_comment; # must be after toc_body, but before titlepage foreach my $command ('contents', 'shortcontents') { next if (!defined($content_element{$command})); my $toc_lines = &$Texi2HTML::Config::inline_contents(undef, $command, $content_element{$command}); @{$Texi2HTML::THISDOC{'inline_contents'}->{$command}} = @$toc_lines if (defined($toc_lines)); } ($region_text, $region_no_texi, $region_simple_format) = do_special_region_lines('titlepage'); &$Texi2HTML::Config::titlepage($region_lines{'titlepage'}, $region_text, $region_no_texi, $region_simple_format); &$Texi2HTML::Config::init_out(); ############################################################################ # print frame and frame toc file # if ( $Texi2HTML::Config::FRAMES ) { my $FH = open_out($docu_frame_file); print STDERR "# Creating frame in $docu_frame_file ...\n" if $T2H_VERBOSE; &$Texi2HTML::Config::print_frame($FH, $docu_toc_frame_file, $docu_top_file); close_out($FH, $docu_frame_file); $FH = open_out($docu_toc_frame_file); print STDERR "# Creating toc frame in $docu_frame_file ...\n" if $T2H_VERBOSE; &$Texi2HTML::Config::print_toc_frame($FH, $Texi2HTML::OVERVIEW); close_out($FH, $docu_toc_frame_file); } texinfo_initialization(2); ############################################################################ # Start processing the document # #my $FH; my $line_nr; my $current_file; my $first_section = 0; # 1 if it is the first section of a page my $previous_is_top = 0; # 1 if it is the element following the top element my $cline; # this is true for the state that goes through the document $state{'inside_document'} = 1; while (@$doc_lines) { $cline = shift @$doc_lines; my $chomped_line = $cline; if (!chomp($chomped_line) and @$doc_lines) { # if the line has no end of line it is concatenated with the next $doc_lines->[0] = $cline . $doc_lines->[0]; next; } $line_nr = shift (@$doc_numbers); #print STDERR "$line_nr->{'file_name'}($line_nr->{'macro'},$line_nr->{'line_nr'}) $cline" if ($line_nr); #print STDERR "PASS_TEXT: $cline"; #dump_stack(\$text, \@stack, \%state); # make sure the current state from here is $Texi2HTML::THIS_ELEMENT # in case it was set by the user. $state{'element'} = $Texi2HTML::THIS_ELEMENT if (defined($Texi2HTML::THIS_ELEMENT)); if (!$state{'raw'} and !$state{'verb'}) { my $tag = ''; $tag = $1 if ($cline =~ /^\@(\w+)/); if ($tag eq 'setfilename' and $Texi2HTML::Config::IGNORE_BEFORE_SETFILENAME) { @{$Texi2HTML::THIS_SECTION} = (); } if (($tag eq 'node') or (defined($sec2level{$tag}) and ($tag !~ /heading/))) { if (@stack or (defined($text) and $text ne '')) {# in pass text node and section shouldn't appear in formats #print STDERR "close_stack before \@$tag\n"; #print STDERR "text!$text%" if (! @stack); close_stack(\$text, \@stack, \%state, $line_nr); push @{$Texi2HTML::THIS_SECTION}, $text; $text = ''; } $state{'sec_num'}++ if ($sec2level{$tag} and ($tag ne 'top')); my $new_element; my $current_element; # handle node and structuring elements $current_element = shift (@all_elements); ########################## begin debug section if ($current_element->{'node'}) { print STDERR 'NODE ' . "$current_element->{'texi'}($current_element->{'file'})" if ($T2H_DEBUG & $DEBUG_ELEMENTS); print STDERR "($current_element->{'section_ref'}->{'texi'})" if ($current_element->{'section_ref'} and ($T2H_DEBUG & $DEBUG_ELEMENTS)); } else { print STDERR 'SECTION ' . $current_element->{'texi'} if ($T2H_DEBUG & $DEBUG_ELEMENTS); } print STDERR ": $cline" if ($T2H_DEBUG & $DEBUG_ELEMENTS); ########################## end debug section # The element begins a new section if there is no previous # or the reference element is not the same #if (!$Texi2HTML::THIS_ELEMENT or (defined($current_element->{'element_ref'}) and $current_element->{'element_ref'} ne $Texi2HTML::THIS_ELEMENT)) if (defined($current_element->{'element_ref'}) and (!$Texi2HTML::THIS_ELEMENT or ($current_element->{'element_ref'} ne $Texi2HTML::THIS_ELEMENT))) { $new_element = $current_element->{'element_ref'}; ########################### debug my $old = 'NO_OLD'; $old = $Texi2HTML::THIS_ELEMENT->{'texi'} if (defined($Texi2HTML::THIS_ELEMENT)); print STDERR "NEW: $new_element->{'texi'}, OLD: $old\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); # print the element that just finished ########################### end debug if ($Texi2HTML::THIS_ELEMENT) { finish_element($Texi2HTML::THISDOC{'FH'}, $Texi2HTML::THIS_ELEMENT, $new_element, $first_section); $first_section = 0; $previous_is_top = 0 if (!$Texi2HTML::THIS_ELEMENT->{'top'}); @{$Texi2HTML::THIS_SECTION} = (); } else { print STDERR "# Writing elements:" if ($T2H_VERBOSE); if ($Texi2HTML::Config::IGNORE_PREAMBLE_TEXT) { @{$Texi2HTML::THIS_SECTION} = (); } # remove empty for the first document lines shift @{$Texi2HTML::THIS_SECTION} while (@{$Texi2HTML::THIS_SECTION} and ($Texi2HTML::THIS_SECTION->[0] =~ /^\s*$/)); } # begin new element #my $previous_file; #$previous_file = $Texi2HTML::THIS_ELEMENT->{'file'} if (defined($Texi2HTML::THIS_ELEMENT)); $Texi2HTML::THIS_ELEMENT = $new_element; $state{'element'} = $Texi2HTML::THIS_ELEMENT; do_element_directions($Texi2HTML::THIS_ELEMENT); $files{$Texi2HTML::THIS_ELEMENT->{'file'}}->{'counter'}--; #if (!defined($previous_file) or ($Texi2HTML::THIS_ELEMENT->{'file'} ne $previous_file)) if (!defined($current_file) or ($Texi2HTML::THIS_ELEMENT->{'file'} ne $current_file)) { $current_file = $Texi2HTML::THIS_ELEMENT->{'file'}; print STDERR "\n" if ($T2H_VERBOSE and !$T2H_DEBUG); print STDERR "# Writing to $docu_rdir$current_file " if $T2H_VERBOSE; my $do_page_head = open_out_file($current_file); if ($Texi2HTML::THIS_ELEMENT->{'top'}) { &$Texi2HTML::Config::print_Top_header($Texi2HTML::THISDOC{'FH'}, $do_page_head); $previous_is_top = 1; } else { &$Texi2HTML::Config::print_page_head($Texi2HTML::THISDOC{'FH'}) if ($do_page_head); &$Texi2HTML::Config::print_chapter_header($Texi2HTML::THISDOC{'FH'}, $Texi2HTML::THIS_ELEMENT) if $Texi2HTML::Config::SPLIT eq 'chapter'; &$Texi2HTML::Config::print_section_header($Texi2HTML::THISDOC{'FH'}, $Texi2HTML::THIS_ELEMENT) if $Texi2HTML::Config::SPLIT eq 'section'; } $first_section = 1; } print STDERR "." if ($T2H_VERBOSE); print STDERR "\n" if ($T2H_DEBUG); } my $cmd_line = $cline; $cmd_line =~ s/\@$tag\s*//; my $heading_formatted = &$Texi2HTML::Config::element_heading($current_element, $tag, $cmd_line, substitute_line($cmd_line), undef, $one_section, $current_element->{'this'}, $first_section, $current_element->{'top'}, $previous_is_top, $cline, $current_element->{'id'}, $new_element); push @{$Texi2HTML::THIS_SECTION}, $heading_formatted if (defined($heading_formatted) and ($heading_formatted ne '')); next; } elsif ($tag eq 'printindex') { $cline =~ s/\s+(\w+)\s*//; my $name = $1; close_paragraph(\$text, \@stack, \%state); if (!@stack) { push @{$Texi2HTML::THIS_SECTION}, $text; $text = ''; } add_prev(\$text, \@stack, &$Texi2HTML::Config::printindex($name)); if (!@stack) { push @{$Texi2HTML::THIS_SECTION}, $text; $text = ''; } begin_paragraph (\@stack, \%state) if ($state{'preformatted'}); next; } elsif (($tag eq 'contents') or ($tag eq 'summarycontents') or ($tag eq 'shortcontents')) { my $element_tag = $tag; $element_tag = 'shortcontents' if ($element_tag ne 'contents'); # at that point the content_element is defined for sure since # we already saw the tag if ($Texi2HTML::Config::INLINE_CONTENTS and !$content_element{$element_tag}->{'aftertitlepage'}) { if (@stack or (defined($text) and $text ne '')) {# in pass text contents shouldn't appear in formats close_stack(\$text, \@stack, \%state, $line_nr); push @{$Texi2HTML::THIS_SECTION}, $text; $text = ''; } my $toc_lines = &$Texi2HTML::Config::inline_contents($Texi2HTML::THISDOC{'FH'}, $tag, $content_element{$element_tag}); push (@{$Texi2HTML::THIS_SECTION}, @$toc_lines) if (defined($toc_lines)) ; } next unless (exists($Texi2HTML::Config::misc_command{$tag}) and $Texi2HTML::Config::misc_command{$tag}->{'keep'}); } } scan_line($cline, \$text, \@stack, \%state, $line_nr); #print STDERR "after scan_line: $cline"; #dump_stack(\$text, \@stack, \%state); next if (@stack); if ($text ne '' ) { push @{$Texi2HTML::THIS_SECTION}, $text; $text = ''; } } if (@stack) {# close stack at the end of pass text close_stack(\$text, \@stack, \%state, $line_nr); } if (defined($text)) { push @{$Texi2HTML::THIS_SECTION}, $text; } print STDERR "\n" if ($T2H_VERBOSE); # if no sections, then simply print document as is if ($one_section) { # may happen if there are 0 sections if (! defined($Texi2HTML::THISDOC{'FH'})) { open_out_file($docu_doc); &$Texi2HTML::Config::print_page_head($Texi2HTML::THISDOC{'FH'}); } if (@foot_lines) { &$Texi2HTML::Config::foot_section (\@foot_lines); push @{$Texi2HTML::THIS_SECTION}, @foot_lines; } print STDERR "# Write the section $Texi2HTML::THIS_ELEMENT->{'texi'}\n" if ($T2H_VERBOSE); &$Texi2HTML::Config::one_section($Texi2HTML::THISDOC{'FH'}, $Texi2HTML::THIS_ELEMENT); close_out($Texi2HTML::THISDOC{'FH'}); # no misc element is done return; } finish_element ($Texi2HTML::THISDOC{'FH'}, $Texi2HTML::THIS_ELEMENT, undef, $first_section); ############################################################################ # Print ToC, Overview, Footnotes # foreach my $direction (@element_directions) { $Texi2HTML::HREF{$direction} = undef; delete $Texi2HTML::HREF{$direction}; # it is better to undef in case the references to these hash entries # are used, as if deleted, the # references are still refering to the old, undeleted element # (we could do both) $Texi2HTML::NAME{$direction} = undef; $Texi2HTML::NO_TEXI{$direction} = undef; $Texi2HTML::SIMPLE_TEXT{$direction} = undef; $Texi2HTML::NODE{$direction} = undef; $Texi2HTML::THIS_ELEMENT = undef; } my $about_body; $about_body = &$Texi2HTML::Config::about_body(); # @foot_lines is emptied in finish_element if SEPARATED_FOOTNOTES my %misc_page_infos = ( 'Footnotes' => { 'file' => $docu_foot_file, 'relative_file' => $docu_foot, 'process' => $Texi2HTML::Config::print_Footnotes, 'section' => \@foot_lines }, 'Contents' => { 'file' => $docu_toc_file, 'relative_file' => $docu_toc, 'process' => $Texi2HTML::Config::print_Toc, 'section' => $Texi2HTML::TOC_LINES }, 'Overview' => { 'file' => $docu_stoc_file, 'relative_file' => $docu_stoc, 'process' => $Texi2HTML::Config::print_Overview, 'section' => $Texi2HTML::OVERVIEW }, 'About' => { 'file' => $docu_about_file, 'relative_file' => $docu_about, 'process' => $Texi2HTML::Config::print_About, 'section' => [$about_body] } ); $misc_page_infos{'Footnotes'}->{'do'} = 1 if (@foot_lines); $misc_page_infos{'Contents'}->{'do'} = 1 if (@{$Texi2HTML::TOC_LINES} and !$Texi2HTML::Config::INLINE_CONTENTS); $misc_page_infos{'Overview'}->{'do'} = 1 if (@{$Texi2HTML::OVERVIEW} and !$Texi2HTML::Config::INLINE_CONTENTS); #FIXME: ... and $Texi2HTML::THISDOC{'do_about'}) ? $misc_page_infos{'About'}->{'do'} = 1 if ($about_body); foreach my $misc_page('Footnotes', 'Contents', 'Overview', 'About') { next unless ($misc_page_infos{$misc_page}->{'do'}); my $file = $misc_page_infos{$misc_page}->{'file'}; my $relative_file = $misc_page_infos{$misc_page}->{'relative_file'}; print STDERR "# writing $misc_page in $file\n" if $T2H_VERBOSE; my $saved_FH; my $open_new = 0; if ($relative_file ne $docu_doc) { $saved_FH = $Texi2HTML::THISDOC{'FH'}; # FIXME the file may have the same name than another file. Use # open_out_file? $Texi2HTML::THISDOC{'FH'} = open_out ($file); print STDERR "# Opening $file for $misc_page\n" if $T2H_VERBOSE; $open_new = 1; } else { print STDERR "# writing $misc_page in current file\n" if $T2H_VERBOSE; } foreach my $href_page (keys(%misc_page_infos)) { $Texi2HTML::HREF{$href_page} = file_target_href( $misc_page_infos{$href_page}->{'relative_file'}, $relative_file, $Texi2HTML::Config::misc_pages_targets{$href_page}) if ($misc_page_infos{$href_page}->{'do'}); } #print STDERR "Doing hrefs for $misc_page First "; $Texi2HTML::HREF{'First'} = href($element_first, $relative_file); #print STDERR "Last "; $Texi2HTML::HREF{'Last'} = href($element_last, $relative_file); #print STDERR "Index "; $Texi2HTML::HREF{'Index'} = href($element_chapter_index, $relative_file) if (defined($element_chapter_index)); #print STDERR "Top "; $Texi2HTML::HREF{'Top'} = href($element_top, $relative_file); if ($Texi2HTML::Config::INLINE_CONTENTS) { $Texi2HTML::HREF{'Contents'} = href($content_element{'contents'}, $relative_file); $Texi2HTML::HREF{'Overview'} = href($content_element{'shortcontents'}, $relative_file); } $Texi2HTML::HREF{$misc_page} = '#' . $Texi2HTML::Config::misc_pages_targets{$misc_page}; $Texi2HTML::HREF{'This'} = $Texi2HTML::HREF{$misc_page}; $Texi2HTML::NAME{'This'} = $Texi2HTML::NAME{$misc_page}; $Texi2HTML::NO_TEXI{'This'} = $Texi2HTML::NO_TEXI{$misc_page}; $Texi2HTML::SIMPLE_TEXT{'This'} = $Texi2HTML::SIMPLE_TEXT{$misc_page}; $Texi2HTML::THIS_SECTION = $misc_page_infos{$misc_page}->{'section'} if defined($misc_page_infos{$misc_page}->{'section'}); &{$misc_page_infos{$misc_page}->{'process'}}($Texi2HTML::THISDOC{'FH'}, $open_new, $misc_page); if ($open_new) { close_out($Texi2HTML::THISDOC{'FH'}, $file); $Texi2HTML::THISDOC{'FH'} = $saved_FH; } } unless ($Texi2HTML::Config::SPLIT) { &$Texi2HTML::Config::print_page_foot($Texi2HTML::THISDOC{'FH'}); close_out ($Texi2HTML::THISDOC{'FH'}); } pop_state(); } # print section, close file if needed. sub finish_element($$$$) { my $FH = shift; my $element = shift; my $new_element = shift; my $first_section = shift; #print STDERR "FINISH_ELEMENT($FH)($element->{'texi'})[$element->{'file'}] counter $files{$element->{'file'}}->{'counter'}\n"; # handle foot notes if ($Texi2HTML::Config::SPLIT and scalar(@foot_lines) and !$Texi2HTML::Config::SEPARATED_FOOTNOTES and (! $new_element or ($element and ($new_element->{'file'} ne $element->{'file'}))) ) { if ($files{$element->{'file'}}->{'counter'}) {# there are other elements in that page we are not on its foot $files{$element->{'file'}}->{'relative_foot_num'} = $global_relative_foot_num; push @{$files{$element->{'file'}}->{'foot_lines'}}, @foot_lines; } else {# we output the footnotes as we are at the file end unshift @foot_lines, @{$files{$element->{'file'}}->{'foot_lines'}}; &$Texi2HTML::Config::foot_section (\@foot_lines); push @{$Texi2HTML::THIS_SECTION}, @foot_lines; } if ($new_element) { $global_relative_foot_num = $files{$new_element->{'file'}}->{'relative_foot_num'}; } @foot_lines = (); } if ($element->{'top'}) { my $top_file = $docu_top_file; #print STDERR "TOP $element->{'texi'}, @{$Texi2HTML::THIS_SECTION}\n"; print STDERR "# Doing element top\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); print STDERR "[Top]" if ($T2H_VERBOSE); $Texi2HTML::HREF{'Top'} = href($element_top, $element->{'file'}); &$Texi2HTML::Config::print_Top($FH, $element->{'titlefont'}, $element); my $end_page = 0; if ($Texi2HTML::Config::SPLIT) { if (!$files{$element->{'file'}}->{'counter'}) { $end_page = 1; } } &$Texi2HTML::Config::print_Top_footer($FH, $end_page, $element); close_out($FH, $top_file) if ($end_page); } else { print STDERR "# do element $element->{'texi'}\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); &$Texi2HTML::Config::print_section($FH, $first_section, 0, $element); ################# debug my $new_elem_file = 'NO ELEM'; $new_elem_file = $new_element->{'file'} if (defined($new_element)); print STDERR "# FILES new: $new_elem_file old: $element->{'file'}\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); ################# end debug if (defined($new_element) and ($new_element->{'file'} ne $element->{'file'})) { print STDERR "# End of section with change in file\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); if (!$files{$element->{'file'}}->{'counter'}) { &$Texi2HTML::Config::print_chapter_footer($FH, $element) if ($Texi2HTML::Config::SPLIT eq 'chapter'); &$Texi2HTML::Config::print_section_footer($FH, $element) if ($Texi2HTML::Config::SPLIT eq 'section'); print STDERR "# Close file after $element->{'texi'}\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); &$Texi2HTML::Config::print_page_foot($FH); close_out($FH); } else { print STDERR "# Counter $files{$element->{'file'}}->{'counter'} ne 0, file $element->{'file'}\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); } } elsif (!defined($new_element)) { print STDERR "# End of last section\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); if ($Texi2HTML::Config::SPLIT) { # end of last splitted section &$Texi2HTML::Config::print_chapter_footer($FH, $element) if ($Texi2HTML::Config::SPLIT eq 'chapter'); &$Texi2HTML::Config::print_section_footer($FH, $element) if ($Texi2HTML::Config::SPLIT eq 'section'); &$Texi2HTML::Config::print_page_foot($FH); close_out($FH); } else { # end of last unsplit section &$Texi2HTML::Config::end_section($FH, 1, $element); } } elsif ($new_element->{'top'}) { print STDERR "# Section followed by Top\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); &$Texi2HTML::Config::end_section($FH, 1, $element); } else { # end of section followed by another one print STDERR "# Section followed by another one\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); &$Texi2HTML::Config::end_section($FH, 0, $element); } } } # write to files with name the node name for cross manual references. sub do_node_files() { foreach my $key (keys(%nodes)) { my $node = $nodes{$key}; next unless ($node->{'node_file'}); my $redirection_file = $docu_doc; $redirection_file = $node->{'file'} if ($Texi2HTML::Config::SPLIT); if (!$redirection_file) { print STDERR "Bug: file for redirection for `$node->{'texi'}' don't exist\n" unless ($novalidate or !$node->{'seen'}); next; } next if ($redirection_file eq $node->{'node_file'}); my $file = "${docu_rdir}$node->{'node_file'}"; $Texi2HTML::NODE{'This'} = $node->{'text'}; $Texi2HTML::NO_TEXI{'This'} = $node->{'no_texi'}; $Texi2HTML::SIMPLE_TEXT{'This'} = $node->{'simple_format'}; $Texi2HTML::NAME{'This'} = $node->{'text'}; $Texi2HTML::HREF{'This'} = "$node->{'file'}#$node->{'id'}"; my $NODEFILE = open_out ($file); &$Texi2HTML::Config::print_redirection_page ($NODEFILE); close $NODEFILE || die "$ERROR: Can't close $file: $!\n"; } } #+++############################################################################ # # # Low level functions # # # #---############################################################################ sub locate_include_file($) { my $file = shift; # APA: Don't implicitely search ., to conform with the docs! # return $file if (-e $file && -r $file); foreach my $dir (@Texi2HTML::Config::INCLUDE_DIRS) { return "$dir/$file" if (-e "$dir/$file" && -r "$dir/$file"); } return undef; } sub open_file($$) { my $name = shift; # my $line_number = shift; my $macro = shift; my $line_number; my $input_spool; local *FH; if (open(*FH, "<$name")) { if (defined($Texi2HTML::THISDOC{'IN_ENCODING'}) and $Texi2HTML::Config::USE_UNICODE) { binmode(*FH, ":encoding($Texi2HTML::THISDOC{'IN_ENCODING'})"); } my $file = { 'fh' => *FH, 'input_spool' => { 'spool' => [], 'macro' => '' }, 'name' => $name, 'line_nr' => 0 }; unshift(@fhs, $file); $input_spool = $file->{'input_spool'}; $line_number->{'file_name'} = $name; $line_number->{'line_nr'} = 1; $line_number->{'macro'} = $macro; } else { warn "$ERROR Can't read file $name: $!\n"; } return ($line_number, $input_spool); } sub open_out($) { my $file = shift; local *FILE; #print STDERR "open_out $file $Texi2HTML::THISDOC{'OUT_ENCODING'}\n"; if ($file eq '-') { binmode(STDOUT, ":encoding($Texi2HTML::THISDOC{'OUT_ENCODING'})") if (defined($Texi2HTML::THISDOC{'OUT_ENCODING'}) and $Texi2HTML::Config::USE_UNICODE); return \*STDOUT; } unless (open(FILE, ">$file")) { die "$ERROR Can't open $file for writing: $!\n"; } if (defined($Texi2HTML::THISDOC{'OUT_ENCODING'}) and $Texi2HTML::Config::USE_UNICODE) { if ($Texi2HTML::THISDOC{'OUT_ENCODING'} eq 'utf8' or $Texi2HTML::THISDOC{'OUT_ENCODING'} eq 'utf-8-strict') { binmode(FILE, ':utf8'); } else { binmode(FILE, ':bytes'); } binmode(FILE, ":encoding($Texi2HTML::THISDOC{'OUT_ENCODING'})"); } return *FILE; } # FIXME not used when split sub close_out($;$) { my $FH = shift; my $file = shift; $file = '' if (!defined($file)); return if ($file eq '-'); #print STDERR "close_out $file\n"; close ($FH) || die "$ERROR: Error occurred when closing $file: $!\n"; } sub next_line($$) { my $line_number = shift; my $input_spool; while (@fhs) { my $file = $fhs[0]; $line_number->{'file_name'} = $file->{'name'}; $input_spool = $file->{'input_spool'}; if (@{$input_spool->{'spool'}}) { $line_number->{'macro'} = $file->{'input_spool'}->{'macro'}; $line_number->{'line_nr'} = $file->{'line_nr'}; my $line = shift(@{$input_spool->{'spool'}}); print STDERR "# unspooling $line" if ($T2H_DEBUG & $DEBUG_MACROS); return($line, $input_spool); } else { $file->{'input_spool'}->{'macro'} = ''; $line_number->{'macro'} = ''; } my $fh = $file->{'fh'}; no strict "refs"; my $line = <$fh>; use strict "refs"; my $chomped_line = $line; $file->{'line_nr'}++ if (defined($line) and chomp($chomped_line)); $line_number->{'line_nr'} = $file->{'line_nr'}; return($line, $input_spool) if (defined($line)); no strict "refs"; close($fh); use strict "refs"; shift(@fhs); } return(undef, $input_spool); } # echo a warning sub echo_warn($;$) { my $text = shift; chomp ($text); my $line_number = shift; warn "$WARN $text " . format_line_number($line_number) . "\n"; } my $error_nrs = 0; sub echo_error($;$) { my $text = shift; chomp ($text); my $line_number = shift; warn "$ERROR $text " . format_line_number($line_number) . "\n"; $error_nrs ++; die "Max error number exceeded\n" if ($error_nrs >= $Texi2HTML::Config::ERROR_LIMIT); } sub format_line_number($) { my $line_number = shift; my $macro_text = ''; #$line_number = undef; return '' unless (defined($line_number)); $macro_text = " in \@$line_number->{'macro'}" if ($line_number->{'macro'} ne ''); my $file_text = '('; $file_text = "(in $line_number->{'file_name'} " if ($line_number->{'file_name'} ne $Texi2HTML::THISDOC{'input_file_name'}); return "${file_text}l. $line_number->{'line_nr'}" . $macro_text . ')'; } # to debug, dump the result of pass_texi and pass_structure in a file sub dump_texi($$;$$) { my $lines = shift; my $pass = shift; my $numbers = shift; my $file = shift; $file = "$docu_rdir$docu_name" . ".pass$pass" if (!defined($file)); my $FH = open_out($file); print STDERR "# Dump texi\n" if ($T2H_VERBOSE); my $index = 0; foreach my $line (@$lines) { my $number_information = ''; my $chomped_line = $line; # if defined, it means that an output of the file is asked for if (defined($numbers)) { my $basefile = $numbers->[$index]->{'file_name'}; $basefile = 'no file' if (!defined($basefile)); $basefile =~ s|.*/||; my $macro_name = $numbers->[$index]->{'macro'}; $macro_name = '' if (!defined($macro_name)); my $line_number = $numbers->[$index]->{'line_nr'}; $line_number = '' if (!defined($line_number)); $number_information = "${basefile}($macro_name,$line_number) "; } print $FH "${number_information}$line"; $index++ if (chomp($chomped_line)); } close_out ($FH, $file); } # return next tag on the line sub next_tag($) { my $line = shift; # macro_regexp if ($line =~ /^\s*\@(["'~\@\}\{,\.!\?\s\*\-\^`=:\|\/\\])/o or $line =~ /^\s*\@([a-zA-Z][\w-]*)([\s\{\}\@])/ or $line =~ /^\s*\@([a-zA-Z][\w-]*)$/) { return ($1); } return ''; } sub next_end_tag($) { my $line = shift; if ($line =~ /^\s*\@end\s+([a-zA-Z][\w-]*)/) { return $1; } return ''; } sub next_tag_or_end_tag($) { my $line = shift; my $next_tag = next_tag($line); return $next_tag if (defined($next_tag) and $next_tag ne ''); return next_end_tag($line); } sub top_stack($;$) { my $stack = shift; my $ignore_para = shift; my $index = scalar (@$stack); return undef unless ($index); return $stack->[-1] unless ($ignore_para); if ($ignore_para == 1) { if (exists($stack->[-1]->{'format'}) and ($stack->[-1]->{'format'} eq 'paragraph' or $stack->[-1]->{'format'} eq 'preformatted')) { if (exists($stack->[-2])) { return $stack->[-2]; } else { return undef; } } else { return $stack->[-1]; } } else { while ($index and ( (exists($stack->[$index-1]->{'format'}) and ($stack->[$index-1]->{'format'} eq 'paragraph' or $stack->[$index-1]->{'format'} eq 'preformatted')) or (exists($stack->[$index-1]->{'style'})) )) { $index--; } } return undef unless ($index); return $stack->[$index-1]; } # return the next element with balanced {} sub next_bracketed($$;$) { my $line = shift; my $line_nr = shift; my $report = shift; my $opened_braces = 0; my $result = ''; my $spaces; #print STDERR "next_bracketed $line"; if ($line =~ /^(\s*)$/) { return ('','',$1); } while ($line !~ /^\s*$/) { #print STDERR "next_bracketed($opened_braces): $result !!! $line"; if (!$opened_braces) { # beginning of item $line =~ s/^(\s*)//; $spaces = $1; #if ($line =~ s/^([^\{\}\s]+)//) if ($line =~ s/^([^\{\}]+?)(\s+)/$2/ or $line =~ s/^([^\{\}]+?)$//) { $result = $1; $result =~ s/\s*$//; return ($result, $line, $spaces); } elsif ($line =~ s/^([^\{\}]+?)([\{\}])/$2/) { $result = $1; } } elsif($line =~ s/^([^\{\}]+)//) { $result .= $1; } if ($line =~ s/^([\{\}])//) { my $brace = $1; $opened_braces++ if ($brace eq '{'); $opened_braces-- if ($brace eq '}'); if ($opened_braces < 0) { echo_error("too much '}' in specification", $line_nr) if ($report); $opened_braces = 0; #next; } $result .= $brace; return ($result, $line, $spaces) if ($opened_braces == 0); } } if ($opened_braces) { echo_error("'{' not closed in specification", $line_nr) if ($report); return ($result, '', $spaces); #return ($result . ( '}' x $opened_braces), '', $spaces); } print STDERR "BUG: at the end of next_bracketed\n"; return undef; } # def prams are also split at @-commands if not in brackets sub next_def_param($$;$) { my $line = shift; my $line_nr = shift; my $report = shift; my ($item, $spaces); ($item, $line, $spaces) = next_bracketed($line, $line_nr, $report); return ($item, $line, $spaces) if (!defined($item)); if ($item =~ /^\{/) { $item =~ s/^\{(.*)\}$/$1/; } else { my $delimeter_quoted = quotemeta($Texi2HTML::Config::def_argument_separator_delimiters); if ($item =~ s/^([^\@$delimeter_quoted]+)//) { $line = $item . $line; $item = $1; } elsif ($item =~ s/^([$delimeter_quoted])//) { $line = $item . $line; $item = $1; } elsif ($item =~ s/^(\@[^\@\{]+)(\@)/$2/) { $line = $item . $line; $item = $1; } } return ($item, $line, $spaces); } # do a href using file and id and taking care of ommitting file if it is # the same # element: structuring element to point to # file: current file sub href($$;$) { my $element = shift; my $file = shift; my $line_nr = shift; return '' unless defined($element); my $href = ''; echo_error("Bug: $element->{'texi'}, target undef", $line_nr) if (!defined($element->{'target'})); echo_error("Bug: $element->{'texi'}, file undef", $line_nr) if (!defined($element->{'file'})); echo_error("Bug: file undef in href", $line_nr) if (!defined($file)); #foreach my $key (keys(%{$element})) #{ # my $value = 'UNDEF'; $value = $element->{$key} if defined($element->{$key}); # print STDERR "$key: $value\n"; #}print STDERR "\n"; $href .= $element->{'file'} if (defined($element->{'file'}) and $file ne $element->{'file'}); $href .= "#$element->{'target'}" if (defined($element->{'target'})); return $href; } sub file_target_href($$$) { my $dest_file = shift; my $orig_file = shift; my $target = shift; my $href = ''; $href .= $dest_file if (defined($dest_file) and ($dest_file ne $orig_file)); $href .= "#$target" if (defined($target)); return $href; } sub normalise_space($) { return undef unless (defined ($_[0])); my $text = shift; $text =~ s/\s+/ /go; $text =~ s/ $//; $text =~ s/^ //; return $text; } sub normalise_node($) { return undef unless (defined ($_[0])); my $text = shift; $text = normalise_space($text); $text =~ s/^top$/Top/i; return $text; } sub do_anchor_label($$$$) { my $command = shift; #my $anchor = shift; my $args = shift; my $anchor = $args->[0]; my $style_stack = shift; my $state = shift; my $line_nr = shift; # FIXME anchor may appear twice when outside document and first time # it appears in the document return '' if (($state->{'region'} and $state->{'multiple_pass'} > 0) or $state->{'remove_texi'}); $anchor = normalise_node($anchor); if (!exists($nodes{$anchor}) or !defined($nodes{$anchor}->{'id'})) { print STDERR "Bug: unknown anchor `$anchor'\n"; } return &$Texi2HTML::Config::anchor_label($nodes{$anchor}->{'id'}, $anchor, $nodes{$anchor}); } sub get_format_command($) { my $format = shift; my $command = ''; my $format_name = ''; my $term = 0; my $item_nr; my $paragraph_number; my $enumerate_type; my $number; $command = $format->{'command'} if (defined($format->{'command'})); $format_name = $format->{'format'} if (defined($format->{'format'})); return ($format_name,$command,\$format->{'paragraph_number'},$term, $format->{'item_nr'}, $format->{'spec'}, $format->{'number'}, $format->{'stack_at_beginning'}, $format->{'command_opened'}); } sub do_paragraph($$;$) { my $text = shift; my $state = shift; my $stack = shift; if (!defined ($state->{'paragraph_context'})) { echo_error ("paragraph_context undef"); dump_stack (undef, $stack, $state); } my ($format, $paragraph_command, $paragraph_number, $term, $item_nr, $enumerate_type, $number,$stack_at_beginning, $command_opened) = get_format_command ($state->{'paragraph_context'}); delete $state->{'paragraph_context'}; my $indent_style = ''; if (exists($state->{'paragraph_indent'})) { $indent_style = $state->{'paragraph_indent'}; $state->{'paragraph_indent'} = undef; delete $state->{'paragraph_indent'}; } my $paragraph_command_formatted; $state->{'paragraph_nr'}--; (print STDERR "Bug text undef in do_paragraph", return '') unless defined($text); my $align = ''; $align = $state->{'paragraph_style'}->[-1] if ($state->{'paragraph_style'}->[-1]); if (exists($::style_map_ref->{$paragraph_command}) and !exists($Texi2HTML::Config::special_list_commands{$format}->{$paragraph_command}) and $command_opened) { if ($format eq 'itemize') { chomp ($text); $text = do_simple($paragraph_command, $text, $state, [$text]); $text = $text . "\n"; } } elsif (exists($::things_map_ref->{$paragraph_command})) { $paragraph_command_formatted = do_simple($paragraph_command, '', $state); } return &$Texi2HTML::Config::paragraph($text, $align, $indent_style, $paragraph_command, $paragraph_command_formatted, $paragraph_number, $format, $item_nr, $enumerate_type, $number,$state->{'command_stack'},$stack_at_beginning); } sub do_preformatted($$;$) { my $text = shift; my $state = shift; my $stack = shift; if (!defined ($state->{'preformatted_context'})) { echo_error ("preformatted_context undef"); dump_stack (undef, $stack, $state); } my ($format, $leading_command, $preformatted_number, $term, $item_nr, $enumerate_type, $number,$stack_at_beginning, $command_opened) = get_format_command($state->{'preformatted_context'}); delete ($state->{'preformatted_context'}); my $leading_command_formatted; my $pre_style = ''; my $class = ''; $pre_style = $state->{'preformatted_stack'}->[-1]->{'pre_style'} if ($state->{'preformatted_stack'}->[-1]->{'pre_style'}); $class = $state->{'preformatted_stack'}->[-1]->{'class'}; print STDERR "BUG: !state->{'preformatted_stack'}->[-1]->{'class'}\n" unless ($class); if (exists($::style_map_ref->{$leading_command}) and !exists($Texi2HTML::Config::special_list_commands{$format}->{$leading_command}) and ($style_type{$leading_command} eq 'style')) { $text = do_simple($leading_command, $text, $state,[$text]) if ($format eq 'itemize'); } elsif (exists($::things_map_ref->{$leading_command})) { $leading_command_formatted = do_simple($leading_command, '', $state); } return &$Texi2HTML::Config::preformatted($text, $pre_style, $class, $leading_command, $leading_command_formatted, $preformatted_number, $format, $item_nr, $enumerate_type, $number,$state->{'command_stack'},$stack_at_beginning); } sub do_external_href($) { # node_id is a unique node identifier with only letters, digits, - and _ # node_xhtml_id is almost the same, but xhtml id can only begin with # letters, so a prefix has to be appended my $texi_node = shift; my $file = ''; my $node_file = ''; my $node_id = ''; my $node_xhtml_id = ''; #print STDERR "do_external_href $texi_node\n"; if ($texi_node =~ s/^\((.+?)\)//) { $file = $1; } $texi_node = normalise_node($texi_node); if ($texi_node ne '') { if (exists($nodes{$texi_node}) and ($nodes{$texi_node}->{'cross_manual_target'})) { $node_id = $nodes{$texi_node}->{'cross_manual_target'}; if ($Texi2HTML::Config::TRANSLITERATE_NODE) { $node_file = $nodes{$texi_node}->{'cross_manual_file'}; } } else { if ($Texi2HTML::Config::TRANSLITERATE_NODE) { ($node_id, $node_file) = cross_manual_line($texi_node,1); } else { $node_id = cross_manual_line($texi_node); } } $node_xhtml_id = node_to_id($node_id); $node_file = $node_id unless ($Texi2HTML::Config::TRANSLITERATE_NODE); } return &$Texi2HTML::Config::external_href($texi_node, $node_file, $node_xhtml_id, $file); } # transform node for cross ref name to id suitable for xhtml: an xhtml id # must begin with a letter. sub node_to_id($) { my $cross_ref_node_name = shift; $cross_ref_node_name =~ s/^([0-9_])/g_t$1/; return $cross_ref_node_name; } # return an empty string if the command is not a index command, the prefix # if it is one sub index_command_prefix($) { my $command = shift; return $1 if ($command =~ /^(\w+?)index/ and ($1 ne 'print') and ($1 ne 'syncode') and ($1 ne 'syn') and ($1 ne 'def') and ($1 ne 'defcode')); return ''; } # return 1 if the following tag shouldn't begin a line sub no_line($) { my $line = shift; my $next_tag = next_tag($line); return 1 if (($line =~ /^\s*$/) or $Texi2HTML::Config::no_paragraph_commands{$next_tag} or ($Texi2HTML::Config::no_paragraph_commands{'cindex'} and (index_command_prefix($next_tag) ne '')) or (($line =~ /^\@end\s+(\w+)/) and $Texi2HTML::Config::no_paragraph_commands{"end $1"})); return 0; } sub no_paragraph($$) { my $state = shift; my $line = shift; return ($state->{'paragraph_context'} or $state->{'preformatted'} or $state->{'remove_texi'} or no_line($line) or $state->{'no_paragraph'}); } # We restart the preformatted format which was stopped # by the format if in preformatted, and start a paragraph # for the text following the end of the format, if needed sub begin_paragraph_after_command($$$$) { my $state = shift; my $stack = shift; my $command = shift; my $text_following = shift; #if (($state->{'preformatted'} # and !$Texi2HTML::Config::format_in_paragraph{$command}) if ($state->{'preformatted'} or (!no_paragraph($state,$text_following))) { begin_paragraph($stack, $state); } } # handle raw formatting, ignored regions... sub do_text_macro($$$$$) { my $type = shift; my $line = shift; my $state = shift; my $stack = shift; my $line_nr = shift; my $value; #print STDERR "do_text_macro $type\n"; if ($Texi2HTML::Config::texi_formats_map{$type} eq 'raw') { $state->{'raw'} = $type; #print STDERR "RAW\n"; if ($state->{'raw'}) { push @$stack, { 'style' => $type, 'text' => '' }; } } elsif ($Texi2HTML::Config::texi_formats_map{$type} eq 'value') { if (($line =~ s/(\s+)($VARRE)$//) or ($line =~ s/(\s+)($VARRE)(\s)//)) { $value = $1 . $2; $value .= $3 if defined($3); if ($state->{'ignored'}) { if ($type eq $state->{'ignored'}) { $state->{'ifvalue_inside'}++; } # if 'ignored' we don't care about the command as long as # the nesting is correct return ($line,''); } my $open_ifvalue = 0; if ($type eq 'ifclear') { if (defined($value{$2})) { $open_ifvalue = 1; } else { push @{$state->{'text_macro_stack'}}, $type; } } elsif ($type eq 'ifset') { unless (defined($value{$2})) { $open_ifvalue = 1; } else { push @{$state->{'text_macro_stack'}}, $type; } } if ($open_ifvalue) { $state->{'ignored'} = $type; $state->{'ifvalue'} = $type; $state->{'ifvalue_inside'} = 1; # We add at the top of the stack to be able to close all # opened comands when closing the ifset/ifclear (and ignore # everything that is in those commands) push @$stack, { 'style' => 'ifvalue', 'text' => '' }; } } else { # we accept a lone @ifset or @ifclear if it is inside an if ($type eq $state->{'ifvalue'}) { $state->{'ifvalue_inside'}++; return ($line,''); } echo_error ("Bad $type line: $line", $line_nr) unless ($state->{'ignored'}); } } elsif (not $Texi2HTML::Config::texi_formats_map{$type}) { # ignored text $state->{'ignored'} = $type; #print STDERR "IGNORED\n"; } else { push @{$state->{'text_macro_stack'}}, $type unless($state->{'ignored'}) ; } my $text = "\@$type"; $text .= $value if defined($value); return ($line, $text); } # do regions handled specially, currently only tex, going through latex2html sub init_special($$) { my $style = shift; my $text = shift; if (defined($Texi2HTML::Config::command_handler{$style}) and defined($Texi2HTML::Config::command_handler{$style}->{'init'})) { $special_commands{$style}->{'count'} = 0 if (!defined($special_commands{$style})); if ($Texi2HTML::Config::command_handler{$style}->{'init'}($style,$text, $special_commands{$style}->{'count'} +1)) { $special_commands{$style}->{'count'}++; return "\@special_${style}_".$special_commands{$style}->{'count'}."{}"; } return ''; } } # FIXME we cannot go through the commands too 'often'. The error messages # are duplicated and global stuff is changed. # -> identify what is global # -> use local state sub do_special_region_lines($;$) { my $region = shift; my $state = shift; # this case covers something like # @copying # @insertcopying # @end copying if (defined($state) and exists($state->{'region'}) and ($region eq $state->{'region'})) { echo_error("Recursively expanding region $region in $state->{'region'}"); return ('','', ''); } print STDERR "# do_special_region_lines for region $region ($region_initial_state{$region}->{'multiple_pass'}, region_initial_state{$region}->{'region_pass'})" if ($T2H_DEBUG); if (!defined($state)) { fill_state($state); $state->{'outside_document'} = 1; print STDERR " outside document\n" if ($T2H_DEBUG); } elsif (!$state->{'outside_document'}) { $region_initial_state{$region}->{'multiple_pass'}++; print STDERR " multiple pass $region_initial_state{$region}->{'multiple_pass'}\n" if ($T2H_DEBUG); } else { print STDERR " in $state->{'region'}, outside document\n" if ($T2H_DEBUG); } return ('','','') unless @{$region_lines{$region}}; my $new_state = duplicate_formatting_state($state); foreach my $key (keys(%{$region_initial_state{$region}})) { $new_state->{$key} = $region_initial_state{$region}->{$key}; } &$Texi2HTML::Config::begin_special_region($region,$new_state,$region_lines{$region}) if (defined($Texi2HTML::Config::begin_special_region)); my $text = substitute_text($new_state, undef, @{$region_lines{$region}}); $text = &$Texi2HTML::Config::end_special_region($region,$new_state,$text) if (defined($Texi2HTML::Config::end_special_region)); $region_initial_state{$region}->{'region_pass'}++; my $remove_texi_state = duplicate_formatting_state($state); $remove_texi_state->{'remove_texi'} = 1; foreach my $key (keys(%{$region_initial_state{$region}})) { $remove_texi_state->{$key} = $region_initial_state{$region}->{$key}; } &$Texi2HTML::Config::begin_special_region($region,$remove_texi_state,$region_lines{$region}) if (defined($Texi2HTML::Config::begin_special_region)); print STDERR "# remove texi\n" if ($T2H_DEBUG); my $removed_texi = substitute_text($remove_texi_state, undef, @{$region_lines{$region}}); $removed_texi = &$Texi2HTML::Config::end_special_region($region,$remove_texi_state, $removed_texi) if (defined($Texi2HTML::Config::end_special_region)); $region_initial_state{$region}->{'region_pass'}++; my $simple_format_state = duplicate_formatting_state($state); foreach my $key (keys(%{$region_initial_state{$region}})) { $simple_format_state->{$key} = $region_initial_state{$region}->{$key}; } &$Texi2HTML::Config::begin_special_region($region,$simple_format_state,$region_lines{$region}) if (defined($Texi2HTML::Config::begin_special_region)); print STDERR "# simple format\n" if ($T2H_DEBUG); my $simple_format = simple_format($simple_format_state, undef, @{$region_lines{$region}}); $simple_format = &$Texi2HTML::Config::end_special_region($region,$simple_format_state, $simple_format) if (defined($Texi2HTML::Config::end_special_region)); $region_initial_state{$region}->{'region_pass'}++; return ($text, $removed_texi, $simple_format); } sub do_insertcopying($) { my $state = shift; my ($text, $comment, $simple_formatted) = do_special_region_lines('copying', $state); return &$Texi2HTML::Config::insertcopying($text, $comment, $simple_formatted); } sub get_deff_index($$$) { my $tag = shift; my $line = shift; my $line_nr = shift; $tag =~ s/x$//; my ($command, $style, $category, $name, $type, $class, $arguments, $args_array, $args_type_array); ($command, $style, $category, $name, $type, $class, $arguments, $args_array, $args_type_array) = parse_def($tag, $line, $line_nr, 1); $name = &$Texi2HTML::Config::definition_index_entry($name, $class, $style, $command); return ($style, '') if (!defined($name) or ($name =~ /^\s*$/)); return ($style, $name, $arguments); } sub parse_def($$$;$) { my $command = shift; my $line = shift; my $line_nr = shift; my $report = shift; my $format = $command; if (!ref ($Texi2HTML::Config::def_map{$command})) { # substitute shortcuts for definition commands my $substituted = $Texi2HTML::Config::def_map{$command}; $substituted =~ s/(\w+)//; $format = $1; $line = $substituted . $line; } #print STDERR "PARSE_DEF($command,$format) $line"; my ($category, $name, $type, $class, $arguments); my @arguments = (); my @args = @{$Texi2HTML::Config::def_map{$format}}; my $style = shift @args; my @arg_types = (); while (@args and $args[0] ne 'arg' and $args[0] ne 'argtype') { my $arg = shift @args; # backward compatibility, it was possible to have a { in front. $arg =~ s/^\{//; my ($item, $spaces); ($item, $line, $spaces) = next_def_param($line, $line_nr, $report); last if (!defined($item)); #$item =~ s/^\{(.*)\}$/$1/ if ($item =~ /^\{/); if ($arg eq 'category') { $category = $item; } elsif ($arg eq 'name') { $name = $item; } elsif ($arg eq 'type') { $type = $item; } elsif ($arg eq 'class') { $class = $item; } push @arg_types, $arg; push @arguments, $item; } my $line_remaining = $line; $line = ''; my $arg_and_type = 1; foreach my $arg (@args) { if ($arg eq 'arg') { $arg_and_type = 0; last; } elsif ($arg eq 'argtype') { last; } } my $always_delimiter_quoted = quotemeta($Texi2HTML::Config::def_always_delimiters); my $in_type_delimiter_quoted = quotemeta($Texi2HTML::Config::def_in_type_delimiters); my $after_type = 0; while ($line_remaining !~ /^\s*$/) { my ($item, $spaces); ($item, $line_remaining,$spaces) = next_def_param($line_remaining, $line_nr); if ($item =~ /^([$always_delimiter_quoted])/ or (!$arg_and_type and $item =~ /^([$in_type_delimiter_quoted].*)/)) { $item = $1; push @arg_types, 'delimiter'; $after_type = 0; } elsif (!$arg_and_type or $item =~ /^\@/ or $after_type) { push @arg_types, 'param'; $after_type = 0; } elsif ($item =~ /^([$in_type_delimiter_quoted])/) { push @arg_types, 'delimiter'; } else { push @arg_types, 'paramtype'; $after_type = 1; } #$item =~ s/^\{(.*)\}$/$1/ if ($item =~ /^\{/); $line .= $spaces . $item; push @arguments, $spaces .$item; } #print STDERR "PARSE_DEF (style $style, category $category, name $name, type $type, class $class, line $line)\n"; return ($format, $style, $category, $name, $type, $class, $line, \@arguments, \@arg_types); } sub begin_paragraph($$) { my $stack = shift; my $state = shift; my $command = { }; my $top_format = top_format($stack); if (defined($top_format)) { $command = $top_format; } $command->{'stack_at_beginning'} = [ @{$state->{'command_stack'}} ]; my $paragraph_or_preformatted = 'paragraph'; if ($state->{'preformatted'}) { $paragraph_or_preformatted = 'preformatted'; $state->{'preformatted_context'} = $command; } else { $state->{'paragraph_context'} = $command; $state->{'paragraph_nr'}++; } push @$stack, {'format' => $paragraph_or_preformatted, 'text' => '' }; # FIXME give line, and modify line? &$Texi2HTML::Config::begin_paragraph_texi($paragraph_or_preformatted, $state->{'paragraph_macros'}, $command, $state, $stack) if (defined($Texi2HTML::Config::begin_paragraph_texi)); # if there are macros which weren't closed when the previous # paragraph was closed we reopen them here push @$stack, @{$state->{'paragraph_macros'}} if $state->{'paragraph_macros'}; delete $state->{'paragraph_macros'}; } sub parse_format_command($$) { my $line = shift; my $tag = shift; my $command = ''; # macro_regexp if ($line =~ /^\s*\@([A-Za-z][\w-]*)(\{\})?$/ or $line =~ /^\s*\@([A-Za-z][\w-]*)(\{\})?\s/) { my $macro = $1; $macro = $alias{$macro} if (exists($alias{$macro})); if ($::things_map_ref->{$macro} or defined($::style_map_ref->{$macro})) { # macro_regexp $line =~ s/^\s*\@([A-Za-z][\w-]*)(\{\})?\s*//; $command = $1; } } return ('', $command) if ($line =~ /^\s*$/); chomp $line; $line = substitute_text ({'keep_nr' => 1, 'keep_texi' => 1, 'check_item' => $tag}, undef, $line); return ($line, $command); } sub parse_enumerate($) { my $line = shift; my $spec; if ($line =~ /^\s*(\w)\b/ and ($1 ne '_')) { $spec = $1; $line =~ s/^\s*(\w)\s*//; } return ($line, $spec); } sub parse_multitable($$) { my $line = shift; my $line_nr = shift; # first find the table width my $table_width = 0; my $fractions; my $elements; if ($line =~ s/^\s+\@columnfractions\s+//) { @$fractions = split /\s+/, $line; $table_width = scalar(@$fractions); foreach my $fraction (@$fractions) { unless ($fraction =~ /^(\d*\.\d+)|(\d+)\.?$/) { echo_error ("column fraction not a number: $fraction", $line_nr); #warn "$ERROR column fraction not a number: $fraction"; } } } else { my $element; my $line_orig = $line; while ($line !~ /^\s*$/) { my $spaces; ($element, $line, $spaces) = next_bracketed($line, $line_nr, 1); if ($element =~ /^\{/) { $table_width++; $element =~ s/^\{//; $element =~ s/\}\s*$//; push @$elements, $element; } else { echo_warn ("garbage in multitable specification: $element", $line_nr); } } } return ($table_width, $fractions, $elements); } sub end_format($$$$$) { my $text = shift; my $stack = shift; my $state = shift; my $format = shift; my $line_nr = shift; #print STDERR "END FORMAT $format ".format_line_number($line_nr)."\n"; #dump_stack($text, $stack, $state); #sleep 1; if ($format_type{$format} eq 'menu') { $state->{$format}--; if ($state->{$format} < 0) { # FIXME currently happens, see invalid/not_closed_in_menu.texi echo_error("Too many menu closed", $line_nr); #print STDERR "Bug, $format counter negative: $state->{$format}\n"; #dump_stack($text, $stack, $state); #exit 1; $state->{$format} = 0; } close_menu_comment($text, $stack, $state, $line_nr); } if ($format_type{$format} eq 'list') { # those functions return if they detect an inapropriate context add_item($text, $stack, $state, $line_nr); # handle lists } elsif ($format eq 'multitable') { add_row($text, $stack, $state, $line_nr); # handle multitable } elsif ($format_type{$format} eq 'table') { add_term($text, $stack, $state, $line_nr); # handle table add_line($text, $stack, $state, $line_nr); # handle table } #print STDERR "END_FORMAT\n"; #dump_stack($text, $stack, $state); # set to 1 if there is a mismatch between the closed format and format # opened before my $format_mismatch = 0; # set to 1 in normal menu context after an end menu or detailmenu my $begin_menu_comment_after_end_format = 0; my $format_ref = pop @$stack; ######################### debug if (!defined($format_ref->{'text'})) { push @$stack, $format_ref; print STDERR "Bug: text undef in end_format $format\n"; dump_stack($text, $stack, $state); pop @$stack; } ######################### end debug if ($region_lines{$format}) { ######################### debug if ($format ne $state->{'region_lines'}->{'format'}) { echo_warn ("Bug: mismatched region `$format' ne `$state->{'region_lines'}->{'format'}'"); } ######################### end debug $state->{'region_lines'}->{'number'}--; if ($state->{'region_lines'}->{'number'} == 0) { close_region($state); } } if (defined($Texi2HTML::Config::def_map{$format})) { close_stack($text, $stack, $state, $line_nr, 'deff_item') unless ($format_ref->{'format'} eq 'deff_item'); add_prev($text, $stack, &$Texi2HTML::Config::def_item($format_ref->{'text'}, $format_ref->{'only_inter_commands'})); $format_ref = pop @$stack; # pop deff ######################################### debug if (!defined($format_ref->{'format'}) or !defined($Texi2HTML::Config::def_map{$format_ref->{'format'}})) { print STDERR "Bug: not a def* under deff_item\n"; push (@$stack, $format_ref); dump_stack($text, $stack, $state); pop @$stack; } ######################################### end debug elsif ($format_ref->{'format'} ne $format) { $format_mismatch = 1; echo_warn ("Waiting for \@end $format_ref->{'format'}, found \@end $format", $line_nr); } add_prev($text, $stack, &$Texi2HTML::Config::def($format_ref->{'text'})); } elsif ($format_type{$format} eq 'cartouche') { add_prev($text, $stack, &$Texi2HTML::Config::cartouche($format_ref->{'text'},$state->{'command_stack'})); } elsif ($format eq 'float') { unless (defined($state->{'float'})) { print STDERR "Bug: state->{'float'} not defined in float\n"; next; } my ($caption_lines, $shortcaption_lines) = &$Texi2HTML::Config::caption_shortcaption($state->{'float'}); my ($caption_text, $shortcaption_text); my $caption_state = duplicate_formatting_state($state); push @{$caption_state->{'command_stack'}}, 'caption'; $caption_text = substitute_text($caption_state, undef, @$caption_lines) if (defined($caption_lines)); my $shortcaption_state = duplicate_formatting_state($state); push @{$shortcaption_state->{'command_stack'}}, 'shortcaption'; $shortcaption_text = substitute_text($shortcaption_state,undef, @$shortcaption_lines) if (defined($shortcaption_lines)); add_prev($text, $stack, &$Texi2HTML::Config::float($format_ref->{'text'}, $state->{'float'}, $caption_text, $shortcaption_text)); delete $state->{'float'}; } elsif (exists ($Texi2HTML::Config::complex_format_map->{$format})) { $state->{'preformatted'}--; pop @{$state->{'preformatted_stack'}}; # debug if (!defined($Texi2HTML::Config::complex_format_map->{$format_ref->{'format'}}->{'begin'})) { print STDERR "Bug undef $format_ref->{'format'}" . "->{'begin'} (for $format...)\n"; dump_stack ($text, $stack, $state); } if ($fake_format{$format_ref->{'format'}} and $format_ref->{'text'} =~ /^\s*$/) { # discard empty fake formats } #print STDERR "before $format\n"; #dump_stack ($text, $stack, $state); else { add_prev($text, $stack, &$Texi2HTML::Config::complex_format($format_ref->{'format'}, $format_ref->{'text'})); } #print STDERR "after $format\n"; #dump_stack ($text, $stack, $state); } elsif ($format_type{$format} eq 'table' or $format_type{$format} eq 'list' or $format eq 'multitable') { #print STDERR "CLOSE $format ($format_ref->{'format'})\n$format_ref->{'text'}\n"; #dump_stack($text, $stack, $state); if ($format_ref->{'format'} ne $format) { # for example vtable closing a table. Cannot be known # before if in a cell $format_mismatch = 1; echo_warn ("Waiting for \@end $format_ref->{'format'}, found \@end $format ", $line_nr); } if ($Texi2HTML::Config::format_map{$format}) { # table or list has a simple format add_prev($text, $stack, end_simple_format($format_ref->{'format'}, $format_ref->{'text'}, $state)); } else { # table or list handler defined by the user add_prev($text, $stack, &$Texi2HTML::Config::table_list($format_ref->{'format'}, $format_ref->{'text'}, $format_ref->{'command'}, $format_ref->{'formatted_command'}, $format_ref->{'item_nr'}, $format_ref->{'spec'}, $format_ref->{'prepended'}, $format_ref->{'prepended_formatted'}, $format_ref->{'columnfractions'}, $format_ref->{'prototype_row'}, $format_ref->{'prototype_lengths'}, $format_ref->{'max_columns'})); } } elsif ($format_type{$format} eq 'quotation') { my $quotation_args = pop @{$state->{'quotation_stack'}}; #add_prev($text, $stack, &$Texi2HTML::Config::quotation($format_ref->{'text'}, $quotation_args->{'text'}, $quotation_args->{'style_texi'}, $quotation_args->{'style_id'})); add_prev($text, $stack, &$Texi2HTML::Config::quotation($format, $format_ref->{'text'}, $quotation_args->{'text'}, $quotation_args->{'text_texi'})); } elsif ($Texi2HTML::Config::paragraph_style{$format}) { if ($state->{'paragraph_style'}->[-1] eq $format) { pop @{$state->{'paragraph_style'}}; } if ($fake_format{$format_ref->{'format'}} and $format_ref->{'text'} =~ /^\s*$/) { # discard empty fake formats } else { add_prev($text, $stack, &$Texi2HTML::Config::paragraph_style_command($format_ref->{'format'},$format_ref->{'text'})); } } elsif (exists($Texi2HTML::Config::format_map{$format})) { if ($fake_format{$format_ref->{'format'}} and $format_ref->{'text'} =~ /^\s*$/) { # discard empty fake formats } else { add_prev($text, $stack, end_simple_format($format_ref->{'format'}, $format_ref->{'text'}, $state)); } } elsif ($format_type{$format} eq 'menu') { # it should be short-circuited if $Texi2HTML::Config::SIMPLE_MENU if ($state->{'preformatted'}) { # remove the fake complex style $state->{'preformatted'}--; pop @{$state->{'preformatted_stack'}}; } # backward compatibility with 1.78 if (defined($Texi2HTML::Config::menu)) { if ($format eq 'menu') { add_prev($text, $stack, &$Texi2HTML::Config::menu($format_ref->{'text'})); } else # detailmenu { add_prev($text, $stack, $format_ref->{'text'}); } } else { add_prev($text, $stack, &$Texi2HTML::Config::menu_command($format, $format_ref->{'text'}, $state->{'preformatted'})); } $begin_menu_comment_after_end_format = 1; } else { echo_warn("Unknown format $format", $line_nr); } # fake formats are not on the command_stack return 1 if ($fake_format{$format_ref->{'format'}}); # special case for center as it is at the bottom of the stack my $removed_from_stack; if ($format eq 'center') { $removed_from_stack = shift @{$state->{'command_stack'}}; } else { $removed_from_stack = pop @{$state->{'command_stack'}}; } if ($removed_from_stack ne $format and !$format_mismatch) { #echo_error ("Bug: removed_from_stack $removed_from_stack ne format $format", $line_nr); # it may not be a bug. Consider, for example a @code{in code # @end cartouche # The @code is closed when the paragraph is closed by # @end cartouche but not really closed since it might have been # a multiple paragraph @code. So it is not removed from # command_stack but still have disapeared from the stack! echo_error("Closing format $format, got $removed_from_stack", $line_nr); } if ($begin_menu_comment_after_end_format and $state->{'menu'}) { begin_format($text, $stack, $state, 'menu_comment', '', $line_nr); return 0; } return 1; } sub push_complex_format_style($$$) { my $command = shift; my $complex_format = shift; my $state = shift; my $class = $command; $class = $complex_format->{'class'} if (defined($complex_format->{'class'})); my $format_style = {'pre_style' =>$complex_format->{'pre_style'}, 'class' => $class, 'command' => $command }; if (defined($complex_format->{'style'})) { $format_style->{'style'} = $complex_format->{'style'}; } else { if ($state->{'preformatted'} and defined($state->{'preformatted_stack'}->[-1]->{'style'})) { $format_style->{'style'} = $state->{'preformatted_stack'}->[-1]->{'style'}; } my $index = scalar(@{$state->{'preformatted_stack'}}) -1; # since preformatted styles are not nested, the preformatted format # of the first format with style has to be used if ($index > 0) { while ($index) { if ($state->{'preformatted_stack'}->[$index]->{'style'}) { $format_style->{'class'} = $state->{'preformatted_stack'}->[$index]->{'class'} if (defined($state->{'preformatted_stack'}->[$index]->{'class'})); last; } $index--; } } } $state->{'preformatted'}++; push @{$state->{'preformatted_stack'}}, $format_style; } sub prepare_state_multiple_pass($$) { my $command = shift; my $state = shift; my $return_state = { 'multiple_pass' => 1, 'region_pass' => 1, 'element' => $state->{'element'}, }; if (defined($command)) { $return_state->{'region'} = $command; $return_state->{'command_stack'} = ["$command"]; } return $return_state; } sub begin_format($$$$$$); sub begin_format($$$$$$) { my $text = shift; my $stack = shift; my $state = shift; my $macro = shift; my $line = shift; my $line_nr = shift; #print STDERR "BEGIN FORMAT $macro".format_line_number($line_nr)."\n"; if ($format_type{$macro} eq 'menu') { if ($state->{'menu'}) { # there should not be any paragraph/preformatted to close # if the comment or the description were closed since they # close it if (! close_menu_comment($text, $stack, $state, $line_nr) and !close_menu_description($text, $stack, $state, $line_nr)) { close_paragraph($text, $stack, $state, $line_nr); } } else { close_paragraph($text, $stack, $state, $line_nr); } $state->{$macro}++; } else { close_paragraph($text, $stack, $state, $line_nr); } $line = &$Texi2HTML::Config::begin_format_texi($macro, $line, $state) unless($fake_format{$macro}); push (@{$state->{'command_stack'}}, $macro) unless ($fake_format{$macro}); if ($region_lines{$macro}) { open_region($macro,$state); } # A deff like macro if (defined($Texi2HTML::Config::def_map{$macro})) { my $top_format = top_format($stack); if (defined($top_format) and ("$top_format->{'format'}x" eq $macro)) { # this is a matching @DEFx command. # the @DEFx macro has been put at the top of the # command_stack, although there is no real format opening pop @{$state->{'command_stack'}}; $macro =~ s/x$//o; my $deff_item = pop @$stack; if ($deff_item->{'text'} !~ /s^\*$/) { add_prev($text, $stack, &$Texi2HTML::Config::def_item($deff_item->{'text'}, $deff_item->{'only_inter_commands'})); } #print STDERR "DEFx $macro\n"; } else { # a new @def. $macro =~ s/x$//o; # we remove what is on the stack and put it back, # to make sure that it is the form without x. pop @{$state->{'command_stack'}}; push @{$state->{'command_stack'}}, $macro; #print STDERR "DEF begin $macro\n"; $top_format = { 'format' => $macro, 'text' => '' }; push @$stack, $top_format; } #print STDERR "BEGIN_DEFF $macro\n"; #dump_stack ($text, $stack, $state); my ($command, $style, $category, $name, $type, $class, $args_array, $args_type_array); ($command, $style, $category, $name, $type, $class, $line, $args_array, $args_type_array) = parse_def($macro, $line, $line_nr); #print STDERR "AFTER parse_def $line"; my @formatted_args = (); my $arguments = ''; my %formatted_arguments = (); my @types = @$args_type_array; foreach my $arg (@$args_array) { my $type = shift @types; my $substitution_state = duplicate_formatting_state($state); $substitution_state->{'code_style'}++; push @formatted_args, substitute_line($arg, $substitution_state, $line_nr); if (grep {$_ eq $type} ('param', 'paramtype', 'delimiter')) { $arguments .= $formatted_args[-1]; } else { $formatted_arguments{$type} = $formatted_args[-1]; } #if (grep {$_ eq $type} ('param', 'paramtype', 'delimiter')) #{ # if ($arg =~ /^\s*\@/) # { # push @formatted_args, substitute_line($arg, $substitution_state, $line_nr); # } # else # { # $substitution_state->{'code_style'}++; # push @formatted_args, substitute_line($arg, $substitution_state, $line_nr); # } # $arguments .= $formatted_args[-1]; #} #else #{ # push @formatted_args, substitute_line($arg, $substitution_state, $line_nr); # $formatted_arguments{$type} = $formatted_args[-1]; #} } $name = $formatted_arguments{'name'}; $category = $formatted_arguments{'category'}; $type = $formatted_arguments{'type'}; $class = $formatted_arguments{'class'}; $name = '' if (!defined($name)); $category = '' if (!defined($category)); my $class_category = &$Texi2HTML::Config::definition_category($category, $class, $style, $command); my $class_name = &$Texi2HTML::Config::definition_index_entry($name, $class, $style, $command); my ($index_entry, $index_label) = do_index_entry_label($macro, $state,$line_nr); add_prev($text, $stack, &$Texi2HTML::Config::def_line($class_category, $name, $type, $arguments, $index_label, \@formatted_args, $args_type_array, $args_array, $command, $class_name, $category, $class, $style, $macro)); $line = ''; push @$stack, { 'format' => 'deff_item', 'text' => '', 'only_inter_commands' => 1, 'format_ref' => $top_format}; begin_paragraph_after_command($state, $stack, $macro, $line); } elsif (exists ($Texi2HTML::Config::complex_format_map->{$macro})) { # handle menu if SIMPLE_MENU. see texi2html.init my $complex_format = $Texi2HTML::Config::complex_format_map->{$macro}; my $format = { 'format' => $macro, 'text' => '', 'pre_style' => $complex_format->{'pre_style'} }; push_complex_format_style($macro, $complex_format, $state); push @$stack, $format; begin_paragraph($stack, $state); } elsif ($Texi2HTML::Config::paragraph_style{$macro}) { push (@$stack, { 'format' => $macro, 'text' => '' }); begin_paragraph_after_command($state,$stack,$macro,$line); push @{$state->{'paragraph_style'}}, $macro; if ($macro eq 'center') { # @center may be in a weird state with regard with # nesting, so we put it on the bottom of the stack pop @{$state->{'command_stack'}}; unshift @{$state->{'command_stack'}}, $macro; # for similar reasons, we may have a bad stack nesting # which results in } after a closing. # The following isn't really true anymore, I think: for example # @center @samp{something @center end of samp} # resulted to samp being kept in the 'command_stack' } } elsif ($format_type{$macro} eq 'list' or $format_type{$macro} eq 'table' or $macro eq 'multitable') { my $format; #print STDERR "LIST_TABLE $macro\n"; #dump_stack($text, $stack, $state); if ($macro eq 'itemize' or $format_type{$macro} eq 'table') { my $command; my $prepended; ($prepended, $command) = parse_format_command($line,$macro); $command = 'asis' if (($command eq '') and ($macro ne 'itemize')); my $prepended_formatted; $prepended_formatted = substitute_line($prepended, prepare_state_multiple_pass('item', $state)) if (defined($prepended)); $format = { 'format' => $macro, 'text' => '', 'command' => $command, 'prepended' => $prepended, 'prepended_formatted' => $prepended_formatted }; $line = ''; } elsif ($macro eq 'enumerate') { my $spec; ($line, $spec) = parse_enumerate ($line); $spec = 1 if (!defined($spec)); $format = { 'format' => $macro, 'text' => '', 'spec' => $spec, 'item_nr' => 0 }; } elsif ($macro eq 'multitable') { my ($max_columns, $fractions, $prototype_row) = parse_multitable ($line, $line_nr); if (!$max_columns) { echo_warn ("empty multitable", $line_nr); $max_columns = 0; } my @prototype_lengths = (); if (defined($prototype_row)) { foreach my $prototype (@$prototype_row) { push @prototype_lengths, 2+length(substitute_line($prototype, prepare_state_multiple_pass('columnfractions', $state))); } } $format = { 'format' => $macro, 'text' => '', 'max_columns' => $max_columns, 'columnfractions' => $fractions, 'prototype_row' => $prototype_row, 'prototype_lengths' => \@prototype_lengths, 'cell' => 1 }; } $format->{'first'} = 1; $format->{'paragraph_number'} = 0; push @$stack, $format; if ($format_type{$macro} eq 'table') { push @$stack, { 'format' => 'line', 'text' => '', 'format_ref' => $format, 'only_inter_commands' => 1}; } elsif ($macro eq 'multitable') { push @$stack, { 'format' => 'row', 'text' => '', 'format_ref' => $format, 'item_cmd' => $macro }; push @$stack, { 'format' => 'cell', 'text' => '', 'format_ref' => $format, 'only_inter_commands' => 1}; } if ($format_type{$macro} eq 'list') { push @$stack, { 'format' => 'item', 'text' => '', 'format_ref' => $format, 'only_inter_commands' => 1}; } begin_paragraph_after_command($state,$stack,$macro,$line) if ($macro ne 'multitable'); return '' unless ($macro eq 'enumerate'); } elsif ($macro eq 'float' or $format_type{$macro} eq 'quotation') { push @$stack, {'format' => $macro, 'text' => '' }; if ($macro eq 'float') { open_cmd_line($stack, $state, ['keep','keep'], \&do_float_line); } elsif ($format_type{$macro} eq 'quotation') { open_cmd_line($stack, $state, ['keep'], \&do_quotation_line); } #dump_stack($text, $stack, $state); #next; } # keep this one at the end as there are some other formats # which are also in format_map elsif (defined($Texi2HTML::Config::format_map{$macro}) or ($format_type{$macro} eq 'cartouche')) { push @$stack, { 'format' => $macro, 'text' => '' }; $state->{'code_style'}++ if ($Texi2HTML::Config::format_code_style{$macro}); begin_paragraph_after_command($state,$stack,$macro,$line); } elsif ($format_type{$macro} eq 'menu') { # if $Texi2HTML::Config::SIMPLE_MENU we won't get there # as the menu is a complex format in that case, so it # is handled above push @$stack, { 'format' => $macro, 'text' => '' }; if ($state->{'preformatted'}) { # add a fake complex style in order to have a given pre style # FIXME check 'style' on bug-texinfo push_complex_format_style('menu', $Texi2HTML::Config::MENU_PRE_COMPLEX_FORMAT # { # 'pre_style' => $Texi2HTML::Config::MENU_PRE_STYLE, # 'class' => 'menu-preformatted', ## 'style' => 'code' # } , $state); begin_paragraph_after_command($state,$stack,$macro,$line); } else { begin_format($text, $stack, $state, 'menu_comment', $line, $line_nr); } } return $line; } sub do_text($;$) { my $text = shift; my $state = shift; return $text if ($state->{'keep_texi'}); my $remove_texi = 1 if ($state->{'remove_texi'} and !$state->{'simple_format'}); my $preformatted_style = 0; if ($state->{'preformatted'}) { $preformatted_style = $state->{'preformatted_stack'}->[-1]->{'style'}; } return (&$Texi2HTML::Config::normal_text($text, $remove_texi, $preformatted_style, $state->{'code_style'},$state->{'simple_format'},$state->{'command_stack'}, $state)); } sub end_simple_format($$$) { my $command = shift; my $text = shift; my $state = shift; my $element = $Texi2HTML::Config::format_map{$command}; my $result = &$Texi2HTML::Config::format($command, $element, $text); $state->{'code_style'}-- if ($Texi2HTML::Config::format_code_style{$command}); return $result; } # only get there if not in SIMPLE_MENU and not in preformatted and # right in @menu sub close_menu_comment($$$$) { my $text = shift; my $stack = shift; my $state = shift; my $line_nr = shift; my $top_format = top_stack($stack,2); if (defined($top_format->{'format'}) and $top_format->{'format'} eq 'menu_comment') { # this is needed to avoid empty menu-comments ...
    
            abort_empty_preformatted($stack, $state);
    
            close_paragraph($text, $stack, $state, $line_nr);
            end_format($text, $stack, $state, 'menu_comment', $line_nr);
            return 1;
        }
    }
    
    # never get there if in $SIMPLE_MENU
    # the last arg is used only if in description and an empty line may 
    # stop it and begin a menu_comment
    sub close_menu_description($$$$;$)
    {
        my $text = shift;
        my $stack = shift;
        my $state = shift;
        my $line_nr = shift;
        my $line = shift;
    
        my $top_format = top_stack($stack,1);
        if (!$state->{'preformatted'})
        {
           $top_format = top_stack($stack);
        }
    
        if (defined($top_format->{'format'}) and $top_format->{'format'} eq 'menu_description' and (!defined($line) or $line =~ /^\s*$/) )
        {
            close_paragraph($text, $stack, $state, $line_nr) if ($state->{'preformatted'});
            my $descr = pop(@$stack);
            add_prev($text, $stack, do_menu_description($descr, $state));
            print STDERR "# close_menu: close description\n" if ($T2H_DEBUG & $DEBUG_MENU);
            $state->{'code_style'}-- if ($Texi2HTML::Config::format_code_style{'menu_description'});
            return 1;
        }
    }
    
    # Format menu link
    # FIXME also pass node and name?
    sub do_menu_link($$$)
    {
        my $state = shift;
        my $line_nr = shift;
        my $menu_entry = shift;
    #    my $menu_entry = $state->{'menu_entry'};
        my $file = $state->{'element'}->{'file'};
        my $node_name = normalise_node($menu_entry->{'node'});
        # normalise_node is used in fact to determine if name is empty. 
        # It is not passed down to the function reference.
        my $name = normalise_node($menu_entry->{'name'});
    
        my $node_substitution_state = duplicate_formatting_state($state);
        my $name_substitution_state = duplicate_formatting_state($state);
        # normalise_node is not used, so that spaces are kept, like makeinfo.
        # also code_style is used, like makeinfo.
        $node_substitution_state->{'code_style'} = 1;
        $name_substitution_state->{'code_style'} = 1 if ($Texi2HTML::Config::format_code_style{'menu_name'});
        my $node_formatted = substitute_line($menu_entry->{'node'}, $node_substitution_state, $line_nr);
        my $name_formatted;
        my $has_name = 0;
        if (defined($name) and $name ne '')
        {
            $name_formatted = substitute_line($menu_entry->{'name'}, $name_substitution_state, $line_nr);
            $has_name = 1;
        }
        else
        {
            $name_formatted = substitute_line($menu_entry->{'node'}, $name_substitution_state);
        }
    
        my $entry = '';
        my $href;
        my $element = $nodes{$node_name};
    
        # menu points to an unknown node
        if (!$element->{'seen'})
        {
            if ($menu_entry->{'node'} =~ /^\s*\(.*\)/o or $novalidate)
            {
                # menu entry points to another info manual or invalid nodes
                # and novalidate is set
                #$href = $nodes{$node_name}->{'file'};
                $href = do_external_href($node_name);
            }
            else
            {
                echo_error ("Unknown node in menu entry `$node_name'", $line_nr);
                # try to find an equivalent node
                my @equivalent_nodes = equivalent_nodes($node_name);
                my $node_seen;
                foreach my $equivalent_node (@equivalent_nodes)
                {
                    if ($nodes{$equivalent_node}->{'seen'})
                    {
                        $node_seen = $equivalent_node;
                        last;
                    }
                }
                if (defined($node_seen))
                {
                    echo_warn (" ---> but equivalent node `$node_seen' found");
                    $element = $nodes{$node_seen};
                }
            }
        }
    
        # the original node or an equivalent node was seen
        if ($element->{'seen'})
        {
            if ($element->{'reference_element'})
            {
                $element = $element->{'reference_element'};
            }
        
            #print STDERR "SUBHREF in menu for `$element->{'texi'}'\n";
            $href = href($element, $file, $line_nr);
            if (! $element->{'node'})
            {
                $entry = $element->{'text'}; # this is the section/node name
                $entry = "$Texi2HTML::Config::MENU_SYMBOL $entry" if (($entry ne '') and (!defined($element->{'number'}) or ($element->{'number'} =~ /^\s*$/)) and $Texi2HTML::Config::UNNUMBERED_SYMBOL_IN_MENU);
            }
        }
        # save the element used for the href for the description
        $menu_entry->{'menu_reference_element'} = $element;
    
        return &$Texi2HTML::Config::menu_link($entry, $state, $href, $node_formatted, $name_formatted, $menu_entry->{'ending'}, $has_name, $state->{'command_stack'}, $state->{'preformatted'});
    }
    
    sub do_menu_description($$)
    {
        my $descr = shift;
        my $state = shift;
        my $text = $descr->{'text'};
        my $menu_entry = $descr->{'menu_entry'};
    
        my $element = $menu_entry->{'menu_reference_element'};
    
        return &$Texi2HTML::Config::menu_description($text, duplicate_formatting_state($state),$element->{'text_nonumber'}, $state->{'command_stack'}, $state->{'preformatted'});
    }
    
    sub do_xref($$$$)
    {
        my $macro = shift;
        my $args = shift;
        my $style_stack = shift;
        my $state = shift;
        my $line_nr = shift;
    
        my $result = '';
        my @args = @$args;
    
        my $j;
        for ($j = 0; $j <= $#$args; $j++)
        {
            $args[$j] = normalise_space($args[$j]);
        #     print STDERR " ($j)$args[$j]\n";
        }
        #print STDERR "DO_XREF: $macro\n";
        if ($macro eq 'inforef')
        {
            if ((@args < 1) or $args[0] eq '')
            {
                echo_error ("First argument to \@$macro may not be empty", $line_nr);
                return '';
            }
        }
        
        #print STDERR "XREF: (@args)\n";
        my $i;
        my $new_state = duplicate_formatting_state($state);
        $new_state->{'keep_texi'} = 0;
        $new_state->{'keep_nr'} = 0;
    
        my $remove_texi = $new_state->{'remove_texi'};
    
        my @formatted_args;
        for ($i = 0; $i < 5; $i++)
        {
            $args[$i] = '' if (!defined($args[$i]));
            my $in_file_style;
            $in_file_style = 1 if ($i == 2 and $macro eq 'inforef' or $i == 3 and $macro ne 'inforef');
            $new_state->{'code_style'}++ if ($in_file_style or $i == 0);
            $new_state->{'remove_texi'} = 1 if ($in_file_style);
            $formatted_args[$i] = substitute_line($args[$i], $new_state, $line_nr);
            $new_state->{'code_style'}-- if ($in_file_style or $i == 0);
            $new_state->{'remove_texi'} = $remove_texi if ($in_file_style);
        }
    
        my $node_texi = $args[0];
        $node_texi = normalise_node($node_texi);
    
        my ($file_texi, $file);
        if ($macro eq 'inforef')
        {
           $file_texi = $args[2];
           $file = $formatted_args[2];
        }
        else
        {
           $file_texi = $args[3];
           $file = $formatted_args[3];
        }
        
        # can be an argument or extracted from the node name
        my $file_arg_or_node_texi = $file_texi;
        my $file_arg_or_node = $file;
    
        my $node_name;
        # the file in parenthesis is removed from node_without_file_texi if needed
        my $node_without_file_texi = $node_texi;
        # node with file, like (file)node
        my $node_and_file_texi;
        # the file in parenthesis present with the node
        my ($file_of_node_texi, $file_of_node);
        if ($node_without_file_texi =~ s/^\(([^\)]+)\)\s*//)
        {
           $file_of_node_texi = $1;
           $file_of_node = substitute_line($file_of_node_texi, $new_state);
           $node_name = substitute_line($node_without_file_texi, $new_state);
           $file_arg_or_node_texi = $file_of_node_texi if ($file_arg_or_node_texi eq '');
           $file_arg_or_node = $file_of_node if ($file_arg_or_node eq '');
           # the file argument takes precedence
           $node_and_file_texi = "($file_arg_or_node_texi)$node_without_file_texi";
        }
        else
        {
            $node_name = $formatted_args[0];
            if (defined ($file_texi) and $file_texi ne '')
            {
                $node_and_file_texi = "($file_texi)$node_texi";
            }
        }
    
        my $node_and_file;
        if (defined($node_and_file_texi))
        {
           $node_and_file = substitute_line($node_and_file_texi, $new_state);
        }
        else
        {
           $node_and_file_texi = $node_texi;
           $node_and_file = $node_name;
        }
    
        my $cross_ref_texi = $args[1];
        my $cross_ref = $formatted_args[1];
        
        my ($manual_texi, $section_texi, $manual, $section);
        if ($macro ne 'inforef')
        {
            $manual_texi = $args[4];
            $section_texi = $args[2];
            $manual = $formatted_args[4];
            $section = $formatted_args[2];
        }
        else
        {
            $manual = $section = '';
        }
        
        #print STDERR "XREF: (@args)\n";
        
        if (($macro eq 'inforef') or ($file_arg_or_node_texi ne '') or ($manual_texi ne ''))
        {# external ref
            my $href = '';
            if ($file_arg_or_node_texi ne '')
            {
                $href = do_external_href($node_and_file_texi);
            }
            else
            {
                $node_and_file = '';
            }
            my $section_or_node = '';
            if ($manual ne '')
            {
                $section_or_node = $node_name;
                if ($section ne '')
                {
                    $section_or_node = $section;
                }
            }
            $result = &$Texi2HTML::Config::external_ref($macro, $section_or_node, $manual, $node_and_file, $href, $cross_ref, \@args, \@formatted_args);
        }
        else
        {
            my $element = $nodes{$node_without_file_texi};
            if ($element and $element->{'seen'})
            {
                if ($element->{'reference_element'})
                {
                    $element = $element->{'reference_element'};
                }
                my $file = '';
                if (defined($state->{'element'}))
                {
                    $file = $state->{'element'}->{'file'};
                }
                else
                {
                    echo_warn ("\@$macro not in text (in anchor, node, section...)", $line_nr);
                    # if Texi2HTML::Config::SPLIT the file is '' which ensures 
                    # a href with the file name. if ! Texi2HTML::Config::SPLIT 
                    # the 2 file will be the same thus there won't be the file name
                    $file = $element->{'file'} unless ($Texi2HTML::Config::SPLIT);
                }
    	    #print STDERR "SUBHREF in ref to node `$node_texi'";
                my $href = href($element, $file, $line_nr);
                my $section_or_cross_ref = $section;
                $section_or_cross_ref = $cross_ref if ($section eq '');
                my $name = $section_or_cross_ref;
                my $short_name = $section_or_cross_ref;
                if ($section_or_cross_ref eq '')
                {
                    # FIXME maybe one should use 'text' instead of 'text_nonumber'
                    # However the real fix would be to have an internal_ref call
                    # with more informations 
                    $name = $element->{'text_nonumber'};
                    $short_name = $node_name;
                }
                $result = &$Texi2HTML::Config::internal_ref ($macro, $href, $short_name, $name, $element->{'section'}, \@args, \@formatted_args);
            }
            else
            {
               if (($node_texi eq '') or !$novalidate)
               {
                   echo_error ("Undefined node `$node_texi' in \@$macro", $line_nr);
                   my $text = '';
                   for (my $i = 0; $i < @$args -1; $i++)
                   {
                        $text .= $args->[$i] .',';
                   }
                   $text .= $args->[-1];
                   $result = "\@$macro"."{${text}}";
               }
               else
               {
                   $result = &$Texi2HTML::Config::external_ref($macro, '', '', $node_name, do_external_href($node_texi), $cross_ref, \@args, \@formatted_args);
               }
            }
        }
        return $result;
    }
    
    sub do_acronym_like($$$$$)
    {
        my $command = shift;
        my $args = shift;
        my $acronym_texi = shift @$args;
        my $explanation = shift @$args;
        my $style_stack = shift;
        my $state = shift;
        my $line_nr = shift;
    
        my $explanation_lines;
        my $explanation_text;
        my $explanation_simple_format;
    
        if (defined($explanation))
        {
            $explanation =~ s/^\s*//;
            $explanation =~ s/\s*$//;
            $explanation = undef if ($explanation eq '');
        }
        $acronym_texi =~ s/^\s*//;
        $acronym_texi =~ s/\s*$//;
        
        return '' if ($acronym_texi eq '');
        
        my $with_explanation = 0;
        my $normalized_text =  cross_manual_line(normalise_node($acronym_texi));
        if (defined($explanation))
        {
            $with_explanation = 1;
            $acronyms_like{$command}->{$normalized_text} = $explanation;
        }
        elsif (exists($acronyms_like{$command}->{$normalized_text}))
        {
            $explanation = $acronyms_like{$command}->{$normalized_text};
        }
    
        if (defined($explanation))
        {
             @$explanation_lines = map {$_ = $_."\n"} split (/\n/, $explanation);
             my $text = '';
             foreach my $line(@$explanation_lines)
             {
                  $line .= ' ' if (chomp ($line));
                  $text .= $line
             }
             $text =~ s/ $//;
             $explanation_simple_format = simple_format($state, undef, $text);
             $explanation_text = substitute_line($text, duplicate_formatting_state($state), $line_nr);
        }
        return &$Texi2HTML::Config::acronym_like($command, $acronym_texi, substitute_line($acronym_texi, duplicate_formatting_state($state), $line_nr), 
           $with_explanation, $explanation_lines, $explanation_text, $explanation_simple_format);
    }
    
    sub do_caption_shortcaption($$$$$)
    {
        my $command = shift;
        my $args = shift;
        my $text_texi = $args->[0];
        my $style_stack = shift;
        my $state = shift;
        my $line_nr = shift;
    
        if (!exists($state->{'float'}))
        {
    #dump_stack(\"", [], $state);
             echo_error("\@$command outside of float", $line_nr);
             return '';
        }
        my $float = $state->{'float'};
        my @texi_lines = map {$_ = $_."\n"} split (/\n/, $text_texi);
        $float->{"${command}_texi"} = \@texi_lines;
        return  &$Texi2HTML::Config::caption_shortcaption_command($command, 
           substitute_text(prepare_state_multiple_pass($command, $state) , undef, @texi_lines), \@texi_lines, $float);
    }
    
    # function called when a @float is encountered. Don't do any output
    # but prepare $state->{'float'}
    sub do_float_line($$$$$)
    {
        my $command = shift;
        my $args = shift;
        my $style_stack = shift;
        my $state = shift;
        my $line_nr = shift;
    
        my @args = @$args;
        my $style_texi = shift @args;
        my $label_texi = shift @args;
    
        $style_texi = undef if (defined($style_texi) and $style_texi=~/^\s*$/);
        $label_texi = undef if (defined($label_texi) and $label_texi=~/^\s*$/);
        if (defined($label_texi))
        { # the float is considered as a node as it may be a target for refs.
          # it was entered as a node in the pass_structure and the float
          # line was parsed at that time
             $state->{'float'} = $nodes{normalise_node($label_texi)};
             #print STDERR "float: $state->{'float'}, $state->{'float'}->{'texi'}\n";
        }
        else 
        { # a float without label. It can't be the target for refs.
             $state->{'float'} = { 'float' => 1 };
             if (defined($style_texi))
             {
                  $state->{'float'}->{'style_texi'} = normalise_space($style_texi);
                  $state->{'float'}->{'style_id'} = 
                      cross_manual_line($state->{'float'}->{'style_texi'});
             }
             #print STDERR "float: (no label) $state->{'float'}\n";
        }
        $state->{'float'}->{'style'} = substitute_line($state->{'float'}->{'style_texi'}, undef, $line_nr);
    #    $state->{'cmd_line'} = 0;
        return '';
    }
    
    sub do_quotation_line($$$$$)
    {
        my $command = shift;
        my $args = shift;
        my @args = @$args;
        my $text_texi = shift @args;
        my $style_stack = shift;
        my $state = shift;
        my $line_nr = shift;
        my $text;
    
        $text_texi = undef if (defined($text_texi) and $text_texi=~/^\s*$/);
        if (defined($text_texi))
        {
             $text = substitute_line($text_texi, duplicate_formatting_state($state), $line_nr);
             $text =~ s/\s*$//;
        }
        my $quotation_args = { 'text' => $text, 'text_texi' => $text_texi };
        push @{$state->{'quotation_stack'}}, $quotation_args;
        $state->{'prepend_text'} = &$Texi2HTML::Config::quotation_prepend_text($command, $text_texi);
    #    $state->{'cmd_line'} = 0;
        return '';
    }
    
    sub do_footnote($$$$)
    {
        my $command = shift;
        my $args = shift;
        my $text = $args->[0];
        my $style_stack = shift;
        my $doc_state = shift;
        my $line_nr = shift;
    
        $text .= "\n";
    
    #print STDERR "FOOTNOTE($global_foot_num, $doc_state->{'outside_document'} or $doc_state->{'multiple_pass'}) $text";
        my $foot_state = duplicate_state($doc_state);
        fill_state($foot_state);
        push @{$foot_state->{'command_stack'}}, 'footnote';
    
        push_state($foot_state);
    
        my ($foot_num, $relative_foot_num);
        if (!$foot_state->{'region'})
        {
            $foot_num = \$global_foot_num;
            $relative_foot_num = \$global_relative_foot_num;
        }
        else
        {
            $foot_num = \$doc_state->{'foot_num'};
            $relative_foot_num = \$doc_state->{'relative_foot_num'};
        }
        $$foot_num++;
        $$relative_foot_num++;   
     
        my $docid  = "DOCF$$foot_num";
        my $footid = "FOOT$$foot_num";
        if ($doc_state->{'region'})
        {
            $docid = $target_prefix . $doc_state->{'region'} . "_$docid";
            $footid = $target_prefix . $doc_state->{'region'} . "_$footid";
        }
        my $from_file = $docu_doc;
        if ($doc_state->{'element'})
        { 
            $from_file = $doc_state->{'element'}->{'file'};
        }
        
        if ($Texi2HTML::Config::SEPARATED_FOOTNOTES)
        {
            $foot_state->{'element'} = $footnote_element;
        }
        
        $foot_state->{'footnote_number_in_doc'} = $$foot_num;
        $foot_state->{'footnote_number_in_page'} = $$relative_foot_num;
        $foot_state->{'footnote_footnote_id'} = $footid;
        $foot_state->{'footnote_place_id'} = $docid;
        $foot_state->{'footnote_document_file'} = $from_file;
        $foot_state->{'footnote_footnote_file'} = $foot_state->{'element'}->{'file'};
        $foot_state->{'footnote_document_state'} = $doc_state;
        
        # FIXME use split_lines ? It seems to work like it is now ?
        my @lines = substitute_text($foot_state, undef, map {$_ = $_."\n"} split (/\n/, $text));
        my ($foot_lines, $foot_label) = &$Texi2HTML::Config::foot_line_and_ref($$foot_num,
             $$relative_foot_num, $footid, $docid, $from_file, $foot_state->{'element'}->{'file'}, \@lines, $doc_state);
        if ($doc_state->{'outside_document'} or ($doc_state->{'region'} and $doc_state->{'multiple_pass'} > 0))
        {
    #print STDERR "multiple_pass $doc_state->{'multiple_pass'}, 'outside_document' $doc_state->{'outside_document'}\n";
    #print STDERR "REGION FOOTNOTE($$foot_num): $doc_state->{'region'} ($doc_state->{'region_pass'})\n";
            $region_initial_state{$doc_state->{'region'}}->{'footnotes'}->{$$foot_num}->{$doc_state->{'region_pass'}} = $foot_lines;
        }
        else
        {
    #print STDERR "GLOBAL FOOTNOTE($$foot_num)\n";
             push(@foot_lines, @{$foot_lines});
        }
        pop_state();
        return $foot_label;
    }
    
    sub do_image($$$$$)
    {
        # replace images
        my $command = shift;
        my $args = shift;
        my $style_stack = shift;
        my $state = shift;
        my $line_nr = shift;
        my @args;
        foreach my $arg (@$args)
        {
           $arg =~ s/^\s*//;
           $arg =~ s/\s*$//;
           push @args, $arg;
        }
        #my $base = substitute_line($args[0], {'code_style' => 1});
        my $base = substitute_line($args[0], {'code_style' => 1, 'remove_texi' => 1});
        my $base_simple = substitute_line($args[0], {'simple_format' => 1, 'code_style' => 1});
        if ($base eq '')
        {
             echo_error ("no file argument for \@image", $line_nr);
             return '';
        }
        $args[4] = '' if (!defined($args[4]));
        $args[3] = '' if (!defined($args[3]));
        my $image;
        #my $extension = substitute_line($args[4], {'code_style' => 1});
        my $extension = substitute_line($args[4], {'code_style' => 1, 'remove_texi' => 1});
        my $extension_simple = substitute_line($args[4], {'simple_format' => 1, 'code_style' => 1});
        my ($file_name, $image_name, $simple_file_name);
        my @file_locations;
        my @file_names = &$Texi2HTML::Config::image_files($base,$extension,$args[0],$args[4]);
    #    $image = locate_include_file("$base.$args[4]") if ($args[4] ne '');
        foreach my $file (@file_names)
        {
            my $simple_file = substitute_line($file->[1], {'simple_format' => 1, 'code_style' => 1});
            if ($image = locate_include_file($file->[0]))
            {
                if (!defined($file_name))
                {
                    $file_name = $file->[0];
                    $image_name = $image;
                    $simple_file_name = $simple_file;
                }
                push @file_locations, [$file, $image, $simple_file];
            }
            else
            {
                push @file_locations, [$file, undef, $simple_file];
            }
        }
        $image_name = '' if (!defined($image_name));
        $simple_file_name = '' if (!defined($simple_file_name));
        
        my $alt; 
        if ($args[3] =~ /\S/)
        {
            $alt = substitute_line($args[3], {'simple_format' => 1}, $line_nr);
        }
        return &$Texi2HTML::Config::image($path_to_working_dir . $image_name, 
            $base, 
            $state->{'preformatted'}, $file_name, $alt, $args[1], $args[2], 
            $args[3], $extension, $path_to_working_dir, $image_name, 
            $state->{'paragraph_context'}, \@file_locations, $base_simple,
            $extension_simple, $simple_file_name);
    }
    
    # usefull if we want to duplicate only the global state, nothing related with
    # formatting
    sub duplicate_state($)
    {
        my $state = shift;
        my $new_state = { 'element' => $state->{'element'},
             'multiple_pass' => $state->{'multiple_pass'},
             'region_pass' => $state->{'region_pass'},
             'region' => $state->{'region'},
             'sec_num' => $state->{'sec_num'},
             'outside_document' => $state->{'outside_document'},
             'inside_document' => $state->{'inside_document'},
             'duplicated' => 1
        };
        return $new_state;
    }
    
    # duplicate global and formatting state.
    sub duplicate_formatting_state($)
    {
        my $state = shift;
        my $new_state = duplicate_state($state);
    
        # Things passed here should be things that are not emptied/set to 0 by
        # any command. Also they shouldn't need anything to be on the 
        # stack. This rules out paragraphs, for example.
        foreach my $format_key ('preformatted', 'code_style', 'keep_texi',
              'keep_nr', 'preformatted_stack')
        {
            $new_state->{$format_key} = $state->{$format_key}; 
        }
    # this is needed for preformatted
        my $command_stack = $state->{'command_stack'};
        $command_stack = [] if (!defined($command_stack));
        $new_state->{'command_stack'} = [ @$command_stack ];
        $new_state->{'preformatted_context'} = {'stack_at_beginning' => [ @$command_stack ]};
        $new_state->{'code_style'} = 0 if (!defined($new_state->{'code_style'}));
        return $new_state;
    }
    
    sub expand_macro($$$$$)
    {
        my $name = shift;
        my $args = shift;
        my $end_line = shift;
        my $line_nr = shift;
        my $state = shift;
    
        # we dont expand macros when in ignored environment.
        return if ($state->{'ignored'});
    
        die "Bug end_line not defined" if (!defined($end_line));
        
        my $index = 0;
        foreach my $arg (@$args)
        { # expand @macros in arguments. It is complicated because we must be
          # carefull not to expand macros in @ignore section or the like, and 
          # still keep every single piece of text (including the @ignore macros).
            $args->[$index] = substitute_text({'texi' => 1, 'arg_expansion' => 1}, undef, split_lines($arg));
            $index++;
        }
        # retrieve the macro definition
        my $macrobody = $macros->{$name}->{'body'};
        my $formal_args = $macros->{$name}->{'args'};
        my $args_index =  $macros->{$name}->{'args_index'};
    
        my $i;    
        for ($i=0; $i<=$#$formal_args; $i++)
        {
            $args->[$i] = "" unless (defined($args->[$i]));
            print STDERR "# arg($i): $args->[$i]\n" if ($T2H_DEBUG & $DEBUG_MACROS);
        }
        echo_error ("too much arguments for macro $name", $line_nr) if (defined($args->[$i + 1]));
        my $result = '';
        while ($macrobody ne '')
        {
            if ($macrobody =~ s/^([^\\]*)\\//o)
            {
                $result .= $1 if defined($1);
                if ($macrobody =~ s/^\\//)
                {
                    $result .= '\\';
                }
                elsif ($macrobody =~ s/^(\@end\sr?macro)$// or $macrobody =~ s/^(\@end\sr?macro\s)// or $macrobody =~ s/^(\@r?macro\s+\w+\s*.*)//)
                { # \ protect @end macro
                    $result .= $1;
                }
                elsif ($macrobody =~ s/^([^\\]*)\\//)
                {
                   my $arg = $1;
                   if (defined($args_index->{$arg}))
                   {
                       $result .= $args->[$args_index->{$arg}];
                   }
                   else
                   {
                       warn "$ERROR \\ not followed by \\ or an arg but by $arg in macro\n";
                       $result .= '\\' . $arg;
                   }
                }
                next;
            }
            $result .= $macrobody;
            last;
        }
        my @result = split(/^/m, $result);
        # for a completly empty macro, $result = '', and the split leads
        # to an empty array, so add back an empty string
        @result = ('') if (!scalar(@result));
        # Add the result of the macro expansion back to the input_spool.
        # Set the macro name if in the outer macro
        if ($state->{'arg_expansion'})
        { # in that case we are in substitute_text for an arg
            unshift @{$state->{'spool'}}, (@result, $end_line);
        }
        else
        {
            #$result[-1].=$end_line;
    #foreach my $res (@result)
    #{
    #   print STDERR "RESULT:$res";
    #}
    #print STDERR "#########end->$end_line";
            my $last_line = $result[-1];
            if (chomp($last_line))
            {
                push @result, $end_line;
            }
            else
            {
                $result[-1] .= $end_line;
            }
            unshift @{$state->{'input_spool'}->{'spool'}}, (@result); #, $end_line);
            $state->{'input_spool'}->{'macro'} = $name if ($state->{'input_spool'}->{'macro'} eq '');
        }
        if ($T2H_DEBUG & $DEBUG_MACROS)
        {
            print STDERR "# macro expansion result:\n";
            #print STDERR "$first_line";
            foreach my $line (@result)
            {
                print STDERR "$line";
            }
            print STDERR "# macro expansion result end\n";
        }
    }
    
    sub do_index_summary_file($$)
    {
        my $name = shift;
        my $docu_name = shift;
        my $entries = get_index($name);
        &$Texi2HTML::Config::index_summary_file_begin ($name, $printed_indices{$name}, $docu_name);
        print STDERR "# writing $name index summary for $docu_name\n" if $T2H_VERBOSE;
    
        foreach my $key (sort keys %$entries)
        {
            my $entry = $entries->{$key};
            my $indexed_element = $entry->{'element'};
            my $entry_element = $indexed_element;
            $entry_element = $entry_element->{'element_ref'} if (defined($entry_element->{'element_ref'}));
            my $origin_href = $entry->{'file'};
       #print STDERR "$entry $entry->{'entry'}, real elem $indexed_element->{'texi'}, section $entry_element->{'texi'}, real $indexed_element->{'file'}, entry file $entry->{'file'}\n";
            if ($entry->{'target'})
            { 
                 $origin_href .= '#' . $entry->{'target'};
            }
            else
            {
                $origin_href .= '#' . $indexed_element->{'target'};
            }
            &$Texi2HTML::Config::index_summary_file_entry ($name,
              $key, $origin_href, 
              substitute_line($entry->{'entry'}), $entry->{'entry'},
              href($entry_element, ''),
              $entry_element->{'text'},
              $printed_indices{$name},
              $docu_name);
        }
        &$Texi2HTML::Config::index_summary_file_end ($name, $printed_indices{$name}, $docu_name);
    }
    
    sub get_index_entry_infos($$;$)
    {
        my $entry = shift;
        my $element = shift;
        my $line_nr = shift;
        my $indexed_element = $entry->{'element'};
        my $entry_element = $indexed_element;
        # we always use the associated element_ref, instead of the original
        # element
        $entry_element = $entry_element->{'element_ref'} if (defined($entry_element->{'element_ref'}));
        my $origin_href = '';
        print STDERR "BUG: entry->{'file'} not defined for `$entry->{'entry'}'\n"
           if (!defined($entry->{'file'}));
        print STDERR "BUG: element->{'file'} not defined for `$entry->{'entry'}', `$element->{'texi'}'\n"
           if (!defined($element->{'file'}));
        $origin_href = $entry->{'file'} if ($entry->{'file'} ne $element->{'file'});
    #print STDERR "$entry $entry->{'entry'}, real elem $indexed_element->{'texi'}, section $entry_element->{'texi'}, real $indexed_element->{'file'}, entry file $entry->{'file'}\n";
        if (defined($entry->{'target'}))
        { 
             $origin_href .= '#' . $entry->{'target'};
        }
        else
        { # this means that the index entry is in a special region like @copying...
             $origin_href .= '#' . $indexed_element->{'target'};
        }
       #print STDERR "SUBHREF in index entry `$entry->{'entry'}' for `$entry_element->{'texi'}'\n";
        return ($origin_href, 
                $entry->{'file'},
                $element->{'file'},
                $entry->{'target'},
                $indexed_element->{'target'},
                substitute_line($entry->{'entry'}),
                href($entry_element, $element->{'file'}, $line_nr),
                $entry_element->{'text'});
    }
    
    # remove texi commands, replacing with what seems adequate. see simple_map_texi
    # and texi_map.
    # Doesn't protect html
    sub remove_texi(@)
    {
        return substitute_text ({ 'remove_texi' => 1}, undef, @_);
    }
    
    # Same as remove texi but protect text and use special maps for @-commands
    sub simple_format($$@)
    {
        my $state = shift;
        my $line_nr = shift;
        if (!defined($state))
        {
            $state = {};
        }
        else
        {
            $state = duplicate_formatting_state($state);
        }
        $state->{'remove_texi'} = 1;
        $state->{'simple_format'} = 1;
        $::simple_map_texi_ref = \%Texi2HTML::Config::simple_format_simple_map_texi;
        $::style_map_texi_ref = \%Texi2HTML::Config::simple_format_style_map_texi;
        $::texi_map_ref = \%Texi2HTML::Config::simple_format_texi_map;
        my $text = substitute_text($state, $line_nr, @_);
        $::simple_map_texi_ref = \%Texi2HTML::Config::simple_map_texi;
        $::style_map_texi_ref = \%Texi2HTML::Config::style_map_texi;
        $::texi_map_ref = \%Texi2HTML::Config::texi_map;
        return $text;
    }
    
    sub enter_table_index_entry($$$$)
    {
        my $text = shift;
        my $stack = shift;
        my $state = shift;
        my $line_nr = shift;
        if ($state->{'item'} and ($state->{'table_stack'}->[-1] =~ /^(v|f)table$/))
        {
             my $index = $1;
             my $macro = $state->{'item'};
             delete $state->{'item'};
             close_stack($text, $stack, $state, $line_nr, 'index_item');
             my $item = pop @$stack;
             my $element = $state->{'element'};
             $element = $state->{'node_ref'} unless ($element);
             enter_index_entry($index, $line_nr, $item->{'text'}, 
                $state->{'place'}, $element, $state->{'table_stack'}->[-1], $state->{'region'});
             add_prev($text, $stack, "\@$macro" . $item->{'text'});
        }
    }
    
    sub scan_texi($$$$;$)
    {
        my $line = shift;
        my $text = shift;
        my $stack = shift;
        my $state = shift;
        my $line_nr = shift;
        
        die "stack not an array ref"  unless (ref($stack) eq "ARRAY");
        my $cline = $line;
    
        while(1)
        {
            # scan_texi
            #print STDERR "WHILE:$cline";
            #print STDERR "ARG_EXPANSION: $state->{'arg_expansion'}\n" if ($state->{'arg_expansion'});
            #dump_stack($text, $stack, $state);
            #print STDERR "ifvalue_inside $state->{'ifvalue_inside'}\n";
    
    
            # first we handle special cases:
            # macro definition: $state->{'macro_inside'}
            # macro arguments:  $state->{'macro_name'}
            # raw format:       $state->{'raw'}
            # @verb:            $state->{'verb'}
            # ignored:          $state->{'ignored'}
            # and then the remaining text/macros.
    
            # in macro definition
            if ($state->{'macro_inside'})
            {
                if ($cline =~ s/^([^\\\@]*\\)//)
                {# protected character or @end macro
                     $state->{'macro'}->{'body'} .= $1 unless ($state->{'ignored'});
                     if ($cline =~ s/^\\//)
                     {
                          $state->{'macro'}->{'body'} .= '\\' unless ($state->{'ignored'});
                          next;
                     }
                     # I believe it is correct, although makeinfo don't do that.
                     elsif ($cline =~ s/^(\@end\sr?macro)$//o or $cline =~ s/^(\@end\sr?macro\s)//o
                          or $cline =~ s/^(\@r?macro\s+\w+\s*.*)//o) 
                     {
                          $state->{'macro'}->{'body'} .= $1 unless ($state->{'ignored'});
                          next;
                     }
                }
                #if ($cline =~ s/^(.*?)\@end\sr?macro$//o or $cline =~ s/^(.*?)\@end\sr?macro\s+//o)
                if ($cline =~ s/^(\@end\sr?macro)$//o or $cline =~ s/^(\@end\sr?macro\s+)//o)
                {
                     $state->{'macro_inside'}--;
                     next if ($state->{'ignored'});
                     if ($state->{'macro_inside'})
                     {
                         $state->{'macro'}->{'body'} .= $1;
                         next;
                     }
                     chomp $state->{'macro'}->{'body'};
                     print STDERR "# end macro def. Body:\n$state->{'macro'}->{'body'}"
                         if ($T2H_DEBUG & $DEBUG_MACROS);
                     delete $state->{'macro'};
                     return if ($cline =~ /^\s*$/);
                     next;
                }
                elsif($cline =~ /^(\@r?macro\s+\w+\s*.*)/)
                {
                     $state->{'macro'}->{'body'} .= $cline unless ($state->{'ignored'});
                     $state->{'macro_inside'}++;
                     return;
                }
                elsif ($cline =~ s/^\@(.)//)
                {
                     $state->{'macro'}->{'body'} .= '@' . $1 unless ($state->{'ignored'});
                     next;
                }
                elsif ($cline =~ s/^\@//)
                {
                     $state->{'macro'}->{'body'} .= '@' unless ($state->{'ignored'});
                     next;
                }
                else
                {
                     $cline =~ s/([^\@\\]*)//;
                     if ($state->{'ignored'})
                     {
                         return if ($cline =~ /^$/);
                         next;
                     }
                     $state->{'macro'}->{'body'} .= $1 if (defined($1));
                     if ($cline =~ /^$/)
                     {
                          $state->{'macro'}->{'body'} .= $cline;
                          return;
                     }
                     next;
                }
            }
            # in macro arguments parsing/expansion. Here \ { } and , if this is a
            # multi args macro have a signification, the remaining is passed 
            # unmodified
            if (defined($state->{'macro_name'}))
            {
                my $special_chars = quotemeta ('\{}');
                my $multi_args = 0;
                my $formal_args = $macros->{$state->{'macro_name'}}->{'args'};
                $multi_args = 1 if ($#$formal_args >= 1);
                $special_chars .= quotemeta(',') if ($multi_args);
                if ($state->{'macro_args'}->[-1] eq '')
                {# remove space at the very beginning
                    $cline =~ s/^\s*//o;
                }
                if ($cline =~ s/^([^$special_chars]*)([$special_chars])//)
                {
                    $state->{'macro_args'}->[-1] .= $1 if defined($1);
                    # \ protects any character in macro arguments
                    if ($2 eq '\\')
                    {
                        print STDERR "# macro call: protected char\n" if ($T2H_DEBUG & $DEBUG_MACROS);
                        if ($cline =~ s/^(.)//)
                        {
                            $state->{'macro_args'}->[-1] .= $1;
                        }
                        else
                        {
                            $state->{'macro_args'}->[-1] .= '\\';
                        }
                    }
                    elsif ($2 eq ',')
                    { # in texinfo 4.8.90 a comma in braces is protected
                        if ($state->{'macro_depth'} > 1)
                        {
                            $state->{'macro_args'}->[-1] .= ',';
                        }
                        else
                        { # separate args
                            print STDERR "# macro call: new arg\n" if ($T2H_DEBUG & $DEBUG_MACROS);
                            $cline =~ s/^\s*//o;
                            push @{$state->{'macro_args'}}, '';
                        }
                    }
                    elsif ($2 eq '}')
                    { # balanced } ends the macro call, otherwise it is in the arg
                        $state->{'macro_depth'}--;
                        if ($state->{'macro_depth'} == 0)
                        {
    #print STDERR "BEFORE: $cline";
                            print STDERR "# expanding macro $state->{'macro_name'}\n" if ($T2H_DEBUG & $DEBUG_MACROS);
                            $cline = expand_macro($state->{'macro_name'}, $state->{'macro_args'}, $cline, $line_nr, $state);
                            delete $state->{'macro_name'};
                            delete $state->{'macro_depth'};
                            delete $state->{'macro_args'};
    #print STDERR "AFTER: $cline";
                            return;
                        }
                        else
                        {
                            print STDERR "# macro call: closing }\n" if ($T2H_DEBUG & $DEBUG_MACROS);
                            add_text('}', \$state->{'macro_args'}->[-1]);
                        }
                    }
                    elsif ($2 eq '{')
                    {
                        print STDERR "# macro call: opening {\n" if ($T2H_DEBUG & $DEBUG_MACROS);
                        $state->{'macro_depth'}++;
                        add_text('{', \$state->{'macro_args'}->[-1]);
                    }
                    next;
                }
                print STDERR "# macro call: end of line\n" if ($T2H_DEBUG & $DEBUG_MACROS);
                $state->{'macro_args'}->[-1] .= $cline;
                return;
            }
            # in a raw format, verbatim, tex or html
            if ($state->{'raw'}) 
            {
                my $tag = $state->{'raw'};
    
                # debugging
                if (! @$stack or ($stack->[-1]->{'style'} ne $tag))
                {
                    print STDERR "Bug: raw or special: $tag but not on top of stack\n";
                    print STDERR "line: $cline";
                    dump_stack($text, $stack, $state);
                    exit 1;
                }
    	    
                # macro_regexp
                if ($cline =~ /^(.*?)\@end\s([a-zA-Z][\w-]*)/o and ($2 eq $tag))
                {
                    $cline =~ s/^(.*?)(\@end\s$tag)//;
                # we add it even if 'ignored', it'll be discarded when there is
                # the @end
                    add_prev ($text, $stack, $1);
                    my $end = $2;
                    my $style = pop @$stack;
                    if ($style->{'text'} !~ /^\s*$/ or $state->{'arg_expansion'})
                    # FIXME if 'arg_expansion' and also 'ignored' is true, 
                    # theoretically we should keep
                    # what is in the raw format however
                    # it will be removed later anyway 
                    {# ARG_EXPANSION
                        add_prev ($text, $stack, $style->{'text'} . $end) unless ($state->{'ignored'});
                        delete $state->{'raw'};
                    }
                    next;
                }
                else
                {# we add it even if 'ignored', it'll be discarded when there is 
                 # the @end
                     add_prev ($text, $stack, $cline);
                     last;
                }
            }
    
            # in a @verb{ .. } macro
            if (defined($state->{'verb'}))
            {
                #dump_stack($text, $stack, $state);
                my $char = quotemeta($state->{'verb'});
                #print STDERR "VERB $char\n";
                if ($cline =~ s/^(.*?)$char\}/\}/)
                {# we add it even if 'ignored', it'll be discarded when closing
                     add_prev($text, $stack, $1 . $state->{'verb'});
                     $stack->[-1]->{'text'} = $state->{'verb'} . $stack->[-1]->{'text'};
                     delete $state->{'verb'};
                     next;
                }
                else
                {# we add it even if 'ignored', it'll be discarded when closing
                     add_prev($text, $stack, $cline);
                     last;
                }
            }
            # In ignored region
            if ($state->{'ignored'})
            {
                #print STDERR "IGNORED(ifvalue($state->{'ifvalue_inside'})): $state->{'ignored'}\n";
                if ($cline =~ /^.*?\@end(\s+)([a-zA-Z]\w+)/)
                {
                    if ($2 eq $state->{'ignored'})
                    {
                        $cline =~ s/^(.*?\@end)(\s+)([a-zA-Z]\w+)//; 
                        my $end_ignore = $1.$2.$3;
                        if (($state->{'ifvalue_inside'}) and $state->{'ignored'} eq $state->{'ifvalue'})
                        {
                             if ($state->{'ifvalue_inside'} == 1)
                             {# closing still opened @-commands with braces
                                 pop (@$stack) while (@$stack and $stack->[-1]->{'style'} ne 'ifvalue')
                             }
                             pop (@$stack);
                             $state->{'ifvalue_inside'}--;
                        }
                        $state->{'ignored'} = undef;
                        delete $state->{'ignored'};
                        # We are stil in the ignored ifset or ifclear section
                        $state->{'ignored'} = $state->{'ifvalue'} if ($state->{'ifvalue_inside'});
                        #dump_stack($text, $stack, $state);
                        # MACRO_ARG => keep ignored text
                        if ($state->{'arg_expansion'})
                        {# this may not be very usefull as it'll be remove later
                            add_prev ($text, $stack, $end_ignore);
                            next;
                        }
                        return if ($cline =~ /^\s*$/o);
                        next;
                    }
                }
                add_prev ($text, $stack, $cline) if ($state->{'arg_expansion'});
                # we could theoretically continue for ignored commands other
                # than ifset or ifclear, however it isn't usefull.
                return unless ($state->{'ifvalue_inside'} and ($state->{'ignored'} eq $state->{'ifvalue'}));
            }
    
    	
            # an @end tag
            # macro_regexp
            if ($cline =~ s/^([^{}@]*)\@end(\s+)([a-zA-Z][\w-]*)//)
            {
                my $leading_text = $1;
                my $space = $2;
                my $end_tag = $3;
                # when 'ignored' we don't open environments that aren't associated
                # with ignored regions, so we don't need to close them.
                next if ($state->{'ignored'});# ARG_EXPANSION
                add_prev($text, $stack, $leading_text);
                if (defined($state->{'text_macro_stack'})
                   and @{$state->{'text_macro_stack'}}
                   and ($end_tag eq $state->{'text_macro_stack'}->[-1]))
                {
                    pop @{$state->{'text_macro_stack'}};
                    # we keep menu and titlepage for the following pass
                    if ((($end_tag eq 'menu') and $Texi2HTML::Config::texi_formats_map{'menu'}) or ($region_lines{$end_tag}) or $state->{'arg_expansion'})
                    {
                         add_prev($text, $stack, "\@end${space}$end_tag");
                    }
                    else
                    {
                        #print STDERR "End $end_tag\n";
                        #dump_stack($text, $stack, $state);
                        return if ($cline =~ /^\s*$/);
                    }
                }
                elsif ($Texi2HTML::Config::texi_formats_map{$end_tag})
                {
                    echo_error ("\@end $end_tag without corresponding element", $line_nr);
                }
                else
                {# ARG_EXPANSION
                    add_prev($text, $stack, "\@end${space}$end_tag");
                }
                next;
            }
            # macro_regexp
            elsif ($cline =~ s/^([^{}@]*)\@(["'~\@\}\{,\.!\?\s\*\-\^`=:\|\/\\])//o or $cline =~ s/^([^{}@]*)\@([a-zA-Z][\w-]*)([\s\{\}\@])/$3/o or $cline =~ s/^([^{}@]*)\@([a-zA-Z][\w-]*)$//o)
            {# ARG_EXPANSION
                add_prev($text, $stack, $1) unless $state->{'ignored'};
                my $macro = $2;
                # FIXME: if it is an alias, it is substituted below, in the
                # diverse add_prev and output of \@$macro. Maybe it could be
                # kept and only substituted in the last passes?
                $macro = $alias{$macro} if (exists($alias{$macro}));
    	    #print STDERR "MACRO $macro\n";
                # handle skipped @-commands
                $state->{'bye'} = 1 if ($macro eq 'bye' and !$state->{'ignored'} and !$state->{'arg_expansion'});
                # 'ignored' and 'arg_expansion' are handled in misc_command_texi
                # these are the commands in which the @value and @macro
                # and @-commands in general should not be expanded
                if (defined($Texi2HTML::Config::misc_command{$macro}) and
                     ($macro eq 'c' or $macro eq 'comment' or $macro eq 'set' 
                       or $macro eq 'clear' or $macro eq 'bye'))
                {
                    ($cline, $line) = misc_command_texi($cline, $macro, $state,
                           $line_nr);
                    add_prev ($text, $stack, "\@$macro" . $line) unless $state->{'ignored'};
                }
                elsif ($macro eq 'setfilename' or $macro eq 'documentencoding'
                          or $macro eq 'definfoenclose' or $macro eq 'include')
                { # special commands whose arguments will have @macro and
                  # @value expanded, and that are processed in this pass
                    if ($state->{'ignored'})
                    {
                        $cline = '';
                    }
                    elsif ($state->{'arg_expansion'})
                    {
                        add_prev($text, $stack, "\@$macro" . $cline);
                        return;
                    }
                    else
                    {
                        $cline =~ s/^(\s+)//;
                        my $space = $1;
                        # not sure if it happpens at end of line, or with 
                        # special char following the @-command or only at end of file
                        $space = '' if (!defined($space));
                        if (!$state->{'line_command'})
                        { 
                            #print STDERR "LINE_COMMAND Start line_command $macro, cline $cline";
                            $state->{'line_command'} = $macro;
                            push @$stack, { 'line_command' => $macro, 'text' => $space };
                        }
                        else
                        {# FIXME warn/error? or just discard?
                            add_prev($text, $stack, "\@$macro" . $space);
                        }
                    }
                }
                # pertusus: it seems that value substitution are performed after
                # macro argument expansions: if we have 
                # @set comma ,
                # and a call to a macro @macro {arg1 @value{comma} arg2}
                # the macro arg is arg1 , arg2 and the comma don't separate
                # args. Likewise it seems that the @value are not expanded
                # in macro definitions
    
                elsif ($macro =~ /^r?macro$/)
                { #FIXME what to do if 'arg_expansion' is true (ie within another
                  # macro call arguments?
                    if ($cline =~ /^\s+(\w[\w-]*)\s*(.*)/)
                    {
                        my $name = $1;
                        unless ($state->{'ignored'})
                        {
                             if (exists($macros->{$name}))
                             {
                                 echo_warn ("macro `$name' already defined " . 
                                     format_line_number($macros->{$name}->{'line_nr'}) . " redefined", $line_nr);
                             }
                             
                        }
                        $state->{'macro_inside'} = 1;
                        next if ($state->{'ignored'});
                        # if in 'arg_expansion' we really want to take into account
                        # that we are in an ignored ifclear.
                        my @args = ();
                        @args = split(/\s*,\s*/ , $1)
                           if ($2 =~ /^\s*{\s*(.*?)\s*}\s*/);
                        # keep the context information of the definition
                        $macros->{$name}->{'line_nr'} = { 'file_name' => $line_nr->{'file_name'}, 
                             'line_nr' => $line_nr->{'line_nr'}, 'macro' => $line_nr->{'macro'} } if (defined($line_nr));
                        $macros->{$name}->{'args'} = \@args;
                        my $arg_index = 0;
                        my $debug_msg = '';
                        foreach my $arg (@args)
                        { # when expanding macros, the argument index is retrieved
                          # with args_index
                            $macros->{$name}->{'args_index'}->{$arg} = $arg_index;
                            $debug_msg .= "$arg($arg_index) ";
                            $arg_index++;
                        }
                        $macros->{$name}->{'body'} = '';
                        $state->{'macro'} = $macros->{$name};
                        print STDERR "# macro def $name: $debug_msg\n"
                             if ($T2H_DEBUG & $DEBUG_MACROS);
                    }
                    else
                    {# it means we have a macro without a name
                        echo_error ("Macro definition without macro name $cline", $line_nr)
                            unless ($state->{'ignored'});
                    }
                    return;
                }
                elsif (defined($Texi2HTML::Config::texi_formats_map{$macro}))
                {
                    my $tag;
                    ($cline, $tag) = do_text_macro($macro, $cline, $state, $stack, $line_nr); 
                    # if it is a raw formatting command or a menu command
                    # we must keep it for later, unless we are in an 'ignored'.
                    # if in 'arg_expansion' we keep everything.
                    my $macro_kept;
                    if ((($state->{'raw'} or (($macro eq 'menu') and $Texi2HTML::Config::texi_formats_map{'menu'}) or (exists($region_lines{$macro}))) and !$state->{'ignored'}) or $state->{'arg_expansion'})
                    {
                        add_prev($text, $stack, $tag);
                        $macro_kept = 1;
                    }
                    #dump_stack ($text, $stack, $state);
                    next if $macro_kept;
                    return if ($cline =~ /^\s*$/);
                }
    #            elsif ($macro eq 'definfoenclose')
    #            {
    #                die "Not here definfoenclose expansion";
    #                # FIXME if 'ignored' or 'arg_expansion' maybe we could parse
    #                # the args anyway and don't take away the whole line?
    #
    #                # as in the makeinfo doc 'definfoenclose' may override
    #                # texinfo @-commands like @i. It is what we do here.
    #                if ($state->{'arg_expansion'})
    #                {
    #                    add_prev($text, $stack, "\@$macro" . $cline);
    #                    return;
    #                }
    #                return if ($state->{'ignored'});
    #                if ($cline =~ s/^\s+([a-z]+)\s*,\s*([^\s]+)\s*,\s*([^\s]+)//)
    #                {
    #                    $info_enclose{$1} = [ $2, $3 ];
    #                }
    #                else
    #                {
    #                    echo_error("Bad \@$macro", $line_nr);
    #                }
    #                return if ($cline =~ /^\s*$/);
    #                $cline =~ s/^\s*//;
    #            }
    #            elsif ($macro eq 'include')
    #            {
    #                die "Not here include expansion";
    #                if ($state->{'arg_expansion'})
    #                {
    #                    add_prev($text, $stack, "\@$macro" . $cline);
    #                    return;
    #                }
    #                return if ($state->{'ignored'});
    #                #if (s/^\s+([\/\w.+-]+)//o)
    #                if ($cline =~ s/^(\s+)(.*)//o)
    #                {
    #                    my $file_name = $2;
    #                    $file_name =~ s/\s*$//;
    #                    my $file = locate_include_file($file_name);
    #                    if (defined($file))
    #                    {
    #                        open_file($file, $line_nr);
    #                        print STDERR "# including $file\n" if $T2H_VERBOSE;
    #                    }
    #                    else
    #                    {
    #                        echo_error ("Can't find $file_name, skipping", $line_nr);
    #                    }
    #                }
    #                else
    #                {
    #                    echo_error ("Bad include line: $cline", $line_nr);
    #                    return;
    #                } 
    #                return;
    #            }
                elsif ($macro eq 'value')
                {
                    if ($cline =~ s/^{($VARRE)}//)
                    {
                        my $value = $1;
                        if ($state->{'arg_expansion'})
                        {
                            add_prev($text, $stack, "\@$macro" .'{'. $value .'}');
                            next;
                        }
                        next if ($state->{'ignored'});
                        my $expansion = "No value for $value";
                        $expansion = $value{$value} if (defined($value{$value}));
                        $cline = $expansion . $cline;
                    }
                    else
                    {
                        if ($state->{'arg_expansion'})
                        {
                            add_prev($text, $stack, "\@$macro");
                            next;
                        }
                        next if ($state->{'ignored'});
                        echo_error ("bad \@value macro", $line_nr);
                    }
                }
                elsif ($macro eq 'unmacro')
                { #FIXME with 'arg_expansion' should it be passed unmodified ?
                    if ($state->{'ignored'})
                    {
                        $cline =~ s/^\s+(\w+)//;
                    }
                    else
                    {
                        delete $macros->{$1} if ($cline =~ s/^\s+(\w+)//);
                    }
                    return if ($cline =~ /^\s*$/);
                    $cline =~ s/^\s*//;
                }
                elsif ($macro eq 'alias')
                { # FIXME what to do with 'arg_expansion' ?
                    if ($cline =~ s/(\s+)([a-zA-Z][\w-]*)(\s*=\s*)([a-zA-Z][\w-]*)(\s*)//)
                    {
                        if ($state->{'arg_expansion'})
                        {
                             my $line = "\@$macro" . $1.$2.$3.$4;
                             $line .= $5 if (defined($4));
                             add_prev($text, $stack, $line); 
                             next;
                        }
                        next if $state->{'ignored'};
                        $alias{$2} = $4;
                    }
                    else
                    {
                        echo_error ("bad \@alias line", $line_nr);
                    }
                }
                elsif (exists($macros->{$macro}))
                {# it must be before the handling of {, otherwise it is considered
                 # to be regular texinfo @-command. Maybe it could be placed higher
                 # if we want user defined macros to override texinfo @-commands
    
                 # in 'ignored' we parse macro defined args anyway as it removes 
                 # some text, but we don't expand the macro
    
                    my $ref = $macros->{$macro}->{'args'};
                    # we remove any space/new line before the argument
                    if ($cline =~ s/^\s*{\s*//)
                    { # the macro has args
                        $state->{'macro_args'} = [ "" ];
                        $state->{'macro_name'} = $macro;
                        $state->{'macro_depth'} = 1;
                    }
                    elsif (($#$ref >= 1) or ($#$ref <0))
                    { # no brace -> no arg
                        $cline = expand_macro ($macro, [], $cline, $line_nr, $state);
                        return;
                    }
                    else
                    { # macro with one arg on the line
                        chomp $cline;
                        $cline = expand_macro ($macro, [$cline], "\n", $line_nr, $state);
                        return;
                    }
                }
                elsif ($cline =~ s/^{//)
                {# we add nested commands in a stack. verb is also on the stack
                 # but handled specifically.
                 # we add it the comands even in 'ignored' as their result is 
                 # discarded when the closing brace appear, or the ifset or 
                 # iclear is closed.
                    if ($macro eq 'verb')
                    {
                        if ($cline =~ /^$/)
                        {
                            echo_error ("without associated character", $line_nr);
                            #warn "$ERROR verb at end of line";
                        }
                        else
                        {
                            $cline =~ s/^(.)//;
                            $state->{'verb'} = $1;
                        }
                    }
                    push (@$stack, { 'style' => $macro, 'text' => '' });
                }
                else
                {
                    $cline = do_unknown(0, $macro, $cline, $text, $stack, $state, $line_nr);
                }
                next;
            }
            #elsif(s/^([^{}@]*)\@(.)//o)
            elsif($cline =~ s/^([^{}@]*)\@([^\s\}\{\@]*)//o)
            {# ARG_EXPANSION
                # No need to warn here for @ followed by a character that
                # is not in any @-command and it is done later
                add_prev($text, $stack, $1) unless($state->{'ignored'});
                $cline = do_unknown(0, $2, $cline, $text, $stack, $state, $line_nr);
                next;
            }
            elsif ($cline =~ s/^([^{}]*)([{}])//o)
            {
             # in ignored section we cannot be sure that there is an @-command
             # already opened so we must discard the text.
             # ARG_EXPANSION
                add_prev($text, $stack, $1) unless($state->{'ignored'});
                if ($2 eq '{')
                {
                  # this empty style is for a lone brace.
                  # we add it even in 'ignored' as it is discarded when the closing
                  # brace appear, or the ifset or iclear is closed.
                    push @$stack, { 'style' => '', 'text' => '' };
                }
                else
                {
                    if (@$stack)
                    {
                        my $style = pop @$stack;
                        my $result;
                        if (($style->{'style'} ne '') and exists($info_enclose{$style->{'style'}}) and !$state->{'arg_expansion'})
                        {
                            $result = $info_enclose{$style->{'style'}}->[0] . $style->{'text'} . $info_enclose{$style->{'style'}}->[1];      
                        }              
                        elsif ($style->{'style'} ne '')
                        {
                            $result = '@' . $style->{'style'} . '{' . $style->{'text'} . '}';
                        }
                        else
                        {
                            $result = '{' . $style->{'text'};
                            # don't close { if we are closing stack as we are not 
                            # sure this is a { ... } construct. i.e. we are
                            # not sure that the user properly closed the matching
                            # brace, so we don't close it ourselves
                            $result .= '}' unless ($state->{'close_stack'} or $state->{'arg_expansion'});
                        }
                        if ($state->{'ignored'})
                        {# ARG_EXPANSION
                            print STDERR "# Popped `$style->{'style'}' in ifset/ifclear\n" if ($T2H_DEBUG);
                            next;
                        }
                        add_prev ($text, $stack, $result);
                        #print STDERR "MACRO end $style->{'style'} remaining: $cline";
                        next;
                    }
                    else
                    {# ARG_EXPANSION
                        # we warn in the last pass that there is a } without open
                        add_prev ($text, $stack, '}') unless($state->{'ignored'});
                    }
                }
            }
            else
            {# ARG_EXPANSION
                #print STDERR "END_LINE $cline";
                add_prev($text, $stack, $cline) unless($state->{'ignored'});
                if ($state->{'line_command'})
                {
                   if (!scalar(@$stack))
                   {
                       print STDERR "BUG: empty state for $state->{'line_command'}\n";
                       return;
                       delete $state->{'line_command'};
                   }
                   while (!defined($stack->[-1]->{'line_command'}))
                   {
                      my $top = pop @$stack;
                      # defer this to later?
                      echo_error ("unclosed command in \@$state->{'line_command'}: $top->{'style'}");
                      add_prev($text, $stack, "\@$top->{'style'}".'{'.$top->{'text'}.'}');
                   }
                   my $command = pop @$stack;
                   ###################### debug
                   if (!defined($command) or !defined($command->{'text'}) or 
                     !defined($command->{'line_command'}) or ($command->{'line_command'} ne $state->{'line_command'}))
                   {
                       print STDERR "BUG: messed $state->{'line_command'} stack\n";
                       delete $state->{'line_command'};
                       return;
                   }
                   ###################### end debug
                   else
                   {
                       delete $state->{'line_command'};
                       my $macro = $command->{'line_command'};
                       # definfoenclose and include are not kept
                       if ($macro eq 'definfoenclose')
                       {
                       # FIXME if 'ignored' or 'arg_expansion' maybe we could parse
                       # the args anyway and don't take away the whole line?
    
                       # as in the makeinfo doc 'definfoenclose' may override
                       # texinfo @-commands like @i. It is what we do here.
                           if ($command->{'text'} =~ s/^\s+([a-z]+)\s*,\s*([^\s]+)\s*,\s*([^\s]+)//)
                           {
                               $info_enclose{$1} = [ $2, $3 ];
                           }
                           else
                           {
                               echo_error("Bad \@$macro", $line_nr);
    #print STDERR "arg: $command->{'text'}\n";
                           }
                           # ignore everything else on the line
                           return;# if ($cline =~ /^\s*$/);
                           #$cline =~ s/^\s*//;
                       }
                       elsif ($macro eq 'include')
                       {
                        #if (s/^\s+([\/\w.+-]+)//o)
                           if ($command->{'text'} =~ s/^(\s+)(.*)//o)
                           {
                               my $file_name = $2;
                               $file_name =~ s/\s*$//;
                               #$file_name = substitute_line($file_name, {'code_style' => 1});
                               $file_name = substitute_line($file_name, {'code_style' => 1, 'remove_texi' => 1});
                               my $file = locate_include_file($file_name);
                               if (defined($file))
                               {
                                   my ($line_nr_file, $input_spool_file) = open_file($file, $line_nr->{'macro'});
                                   ($line_nr, $state->{'input_spool'}) = ($line_nr_file, $input_spool_file) if (defined($line_nr_file));
                                   print STDERR "# including $file\n" if $T2H_VERBOSE;
                               }
                               else
                               {
                                  echo_error ("Can't find $file_name, skipping", $line_nr);
                               }
                           }
                           else
                           {
                               echo_error ("Bad include line: $command->{'text'}", $line_nr);
                           }
                           return;
                       }
                       else
                       { # these are kept (setfilename and documentencoding)
                           ($cline, $line) = misc_command_texi($command->{'text'}, 
                             $macro, $state, $line_nr);
                           add_prev ($text, $stack, "\@$macro" . $line);
                           next;
                       }
                   }
                }
                last;
            }
        }
        return undef if ($state->{'ignored'});
        return 1;
    } # end scan_texi
    
    sub close_structure_command($$$$)
    {
        my $cmd_ref = shift;
        my $state = shift;
        my $unclosed_commands = shift;
        my $line_nr = shift;
        my $result;
        
        if ($cmd_ref->{'style'} eq 'anchor')
        {
            my $anchor = $cmd_ref->{'text'};
            $anchor = normalise_node($anchor);
            if ($nodes{$anchor})
            {
                echo_error ("Duplicate node for anchor found: $anchor", $line_nr);
                return '';
            }
            $document_anchor_num++;
            $nodes{$anchor} = { 'anchor' => 1, 'seen' => 1, 'texi' => $anchor, 'id' => 'ANC' . $document_anchor_num};
            push @{$state->{'place'}}, $nodes{$anchor};
        }
        elsif ($cmd_ref->{'style'} eq 'footnote')
        {
            if ($Texi2HTML::Config::SEPARATED_FOOTNOTES)
            {
                $state->{'element'} = $state->{'footnote_element'};
                $state->{'place'} = $state->{'footnote_place'};
            }
        }
        elsif ($cmd_ref->{'style'} eq 'caption' or $cmd_ref->{'style'}
           eq 'shortcaption' and $state->{'float'})
        {
            my @texi_lines = map {$_ = $_."\n"} split (/\n/, $cmd_ref->{'text'});
            $state->{'float'}->{$cmd_ref->{'style'} . "_texi"} = \@texi_lines;
        }
        if (($cmd_ref->{'style'} eq 'titlefont') and ($cmd_ref->{'text'} =~ /\S/))
        {
            $state->{'element'}->{'titlefont'} = $cmd_ref->{'text'} unless ((exists($state->{'region'}) and ($state->{'region'} eq 'titlepage')) or defined($state->{'element'}->{'titlefont'})) ;
        }
        if (defined($Texi2HTML::Config::command_handler{$cmd_ref->{'style'}}))
        {
            $result = init_special($cmd_ref->{'style'},$cmd_ref->{'text'});
            if ($unclosed_commands)
            {
                $result .= "\n"; # the end of line is eaten by init_special
                echo_error("Closing specially handled \@-command $cmd_ref->{'style'}",$line_nr);
            }
        }
        elsif ($cmd_ref->{'style'})
        {
            $result = '@' . $cmd_ref->{'style'} . '{' . $cmd_ref->{'text'};
            $result .= '}' unless ($unclosed_commands);
        }
        else
        {
            $result = '{' . $cmd_ref->{'text'};
            # don't close { if we are closing stack as we are not
            # sure this is a licit { ... } construct.
            $result .= '}' unless ($unclosed_commands);
        }
        return $result;
    }
    
    sub scan_structure($$$$;$)
    {
        my $line = shift;
        my $text = shift;
        my $stack = shift;
        my $state = shift;
        my $line_nr = shift;
    
        die "stack not an array ref"  unless (ref($stack) eq "ARRAY");
        my $cline = $line;
        #print STDERR "SCAN_STRUCTURE: $line";
        #dump_stack ($text, $stack, $state); 
        if (!$state->{'raw'} and (!exists($state->{'region_lines'})))
        { 
            if (!$state->{'verb'} and $state->{'menu'} and $cline =~ /^\*/o)
            {
            # new menu entry
                my $menu_line = $cline;
                my $node;
                if ($cline =~ /^\*\s+($NODERE)::/)
                {
                    $node = $1;
                }
                elsif ($cline =~ /^\*\s+([^:]+):\s*([^\t,\n]*?)([\t,\n]|\.\s)/)
                {
                    #$name = $1;
                    $node = $2;
                }
                if ($node)
                {
                    menu_entry_texi(normalise_node($node), $state, $line_nr);
                }
            }
        }
    
        while(1)
        {
            # scan structure
    	#print STDERR "WHILE (s):$cline";
    	#dump_stack($text, $stack, $state);
    
            # as texinfo 4.5
            # verbatim might begin at another position than beginning
            # of line, and end verbatim might too. To end a verbatim section
            # @end verbatim must have exactly one space between end and verbatim
            # things following end verbatim are not ignored.
            #
            # html might begin at another position than beginning
            # of line, but @end html must begin the line, and have
            # exactly one space. Things following end html are ignored.
            # tex and ignore works like html
            #
            # ifnothtml might begin at another position than beginning
            # of line, and @end  ifnothtml might too, there might be more
            # than one space between @end and ifnothtml but nothing more on 
            # the line.
            # @end itemize, @end ftable works like @end ifnothtml.
            # except that @item on the same line than @end vtable doesn't work
            # 
            # text right after the itemize before an item is displayed.
            # @item might be somewhere in a line. 
            # strangely @item on the same line than @end vtable doesn't work
            # there should be nothing else than a command following @itemize...
            #
            # see more examples in formatting directory
    
            if ($state->{'raw'}) 
            {
                my $tag = $state->{'raw'};
                ################# debug 
                if (! @$stack or ($stack->[-1]->{'style'} ne $tag))
                {
                    print STDERR "Bug: raw or special: $tag but not on top of stack\n";
                    print STDERR "line: $cline";
                    dump_stack($text, $stack, $state);
                    exit 1;
                }
                ################# end debug 
                # macro_regexp
                if ($cline =~ /^(.*?)\@end\s([a-zA-Z][\w-]*)/o and ($2 eq $tag))
                {
                    $cline =~ s/^(.*?)\@end\s$tag//;
                    add_prev ($text, $stack, $1);
                    delete $state->{'raw'};
                    my $style = pop @$stack;
                    if (defined($Texi2HTML::Config::command_handler{$tag})) 
                    { # replace the special region by what init_special give
                        if ($style->{'text'} !~ /^\s*$/)
                        {
                            add_prev ($text, $stack, init_special($style->{'style'}, $style->{'text'}));
                        }
                        
                    }
                    else
                    {
                        add_prev ($text, $stack, $style->{'text'} . "\@end $tag");
                    }
                    next;
                }
                else
                {
                    add_prev ($text, $stack, $cline);
                    return if (defined($Texi2HTML::Config::command_handler{$tag})); 
                    last;
                }
            }
    	
            if (defined($state->{'verb'}))
            {
                my $char = quotemeta($state->{'verb'});
                if ($cline =~ s/^(.*?)$char\}/\}/)
                {
                    add_prev($text, $stack, $1 . $state->{'verb'});
                    $stack->[-1]->{'text'} = $state->{'verb'} . $stack->[-1]->{'text'};
                    delete $state->{'verb'};
                    next;
                }
                else
                {
                    add_prev($text, $stack, $cline);
                    last;
                }
            }
    	
            # macro_regexp
            if ($cline =~ s/^([^{}@]*)\@end\s+([a-zA-Z][\w-]*)//)
            {
                add_prev($text, $stack, $1);
                my $end_tag = $2;
                #print STDERR "END STRUCTURE $end_tag\n";
                $state->{'detailmenu'}-- if ($end_tag eq 'detailmenu' and $state->{'detailmenu'});
                if (defined($state->{'text_macro_stack'})
                   and @{$state->{'text_macro_stack'}}
                   and ($end_tag eq $state->{'text_macro_stack'}->[-1]))
                {
                    pop @{$state->{'text_macro_stack'}};
                    if (exists($region_lines{$end_tag}))
                    { # end a region_line macro, like documentdescription, copying
                        print STDERR "Bug: end_tag $end_tag ne $state->{'region_lines'}->{'format'}\n" 
                            if ($end_tag ne $state->{'region_lines'}->{'format'});
                        print STDERR "Bug: end_tag $end_tag ne $state->{'region'}\n" 
                            if ($end_tag ne $state->{'region'});
                        $state->{'region_lines'}->{'number'}--;
                        if ($state->{'region_lines'}->{'number'} == 0)
                        { 
                            close_region($state);
                        }
    		    #dump_stack($text, $stack, $state); 
                    }
                    if ($end_tag eq 'menu' or $Texi2HTML::Config::region_formats_kept{$end_tag})
                    {
                        add_prev($text, $stack, "\@end $end_tag");
                    }
                    else
                    {
    			#print STDERR "End $end_tag\n";
    			#dump_stack($text, $stack, $state);
                        return if ($cline =~ /^\s*$/);
                    }
                    $state->{'menu'}-- if ($end_tag eq 'menu');
                }
                elsif ($Texi2HTML::Config::texi_formats_map{$end_tag})
                {
                    echo_error ("\@end $end_tag without corresponding element", $line_nr);
                    #dump_stack($text, $stack, $state);
                }
                else
                {
                    if ($end_tag eq 'float' and $state->{'float'})
                    {
                        delete $state->{'float'};
                    }
                    elsif ($end_tag eq $state->{'table_stack'}->[-1])
                    {
                        enter_table_index_entry($text, $stack, $state, $line_nr);
                        pop @{$state->{'table_stack'}};
                    }
                    #add end tag
                    add_prev($text, $stack, "\@end $end_tag");
                }
                next;
            }
            #elsif ($cline =~ s/^([^{}@]*)\@([a-zA-Z]\w*|["'~\@\}\{,\.!\?\s\*\-\^`=:\/])//o)
            # macro_regexp
            elsif ($cline =~ s/^([^{}@]*)\@(["'~\@\}\{,\.!\?\s\*\-\^`=:\|\/\\])//o or $cline =~ s/^([^{}@]*)\@([a-zA-Z][\w-]*)([\s\{\}\@])/$3/o or $cline =~ s/^([^{}@]*)\@([a-zA-Z][\w-]*)$//o)
            {
                add_prev($text, $stack, $1);
                my $macro = $2;
                #print STDERR "MACRO $macro\n";
                $macro = $alias{$macro} if (exists($alias{$macro}));
                if (defined($Texi2HTML::Config::misc_command{$macro}))
                {
                     my $line;
                     ($cline, $line) = misc_command_structure($cline, $macro, $state, 
                           $line_nr);
                     add_prev ($text, $stack, "\@$macro".$line); 
                     next;
                }
                elsif ($macro eq 'detailmenu')
                {
                    add_prev ($text, $stack, "\@$macro" .  $cline);
                    $state->{'detailmenu'}++;
                    last;
                }
                elsif ($sec2level{$macro})
                {
                    if ($cline =~ /^\s*(.*)$/)
                    {
                        my $name = $1;
                        my $heading_ref = new_section_heading($macro, $name, $state);
                        #if ($state->{'place'} eq $no_element_associated_place)
                        if (exists($state->{'region_lines'}) and $state->{'region_lines'}->{'format'})
                        {
                            my $region = $state->{'region_lines'}->{'format'};
                            $state->{'region_lines'}->{'head_num'}++;
                            my $num = $state->{'region_lines'}->{'head_num'};
                            $heading_ref->{'id'} = "${target_prefix}${region}_HEAD$num";
                            $heading_ref->{'sec_num'} = "${region}_$num";
                            $heading_ref->{'region'} = $region;
                            $heading_ref->{'region_head_num'} = $num;
                        }
                        else
                        {
                            $document_head_num++;
                            $heading_ref->{'id'} = "HEAD$document_head_num";
                            $heading_ref->{'sec_num'} = $document_head_num;
                        }
                        # this is only used when there is a index entry after the 
                        # heading
                        $heading_ref->{'target'} = $heading_ref->{'id'};
                        $heading_ref->{'heading'} = 1;
                        $heading_ref->{'tag_level'} = $macro;
                        $heading_ref->{'number'} = '';
    
                        $state->{'element'} = $heading_ref;
                        push @{$state->{'place'}}, $heading_ref;
                        $headings{$heading_ref->{'sec_num'}} = $heading_ref;
                    }
                    add_prev ($text, $stack, "\@$macro" .  $cline);
                    last;
                }
                elsif (index_command_prefix($macro) ne '')
                { # if we are already in a (v|f)table the construct is quite 
                  # wrong
                  # FIXME should it be discarded?
                  #  if ($state->{'item'})
                  #  {
                  #     echo_error("ignored \@$macro already in an \@$state->{'item'} entry", $line_nr);
                  #     next;
                  #  }
                    my $index_prefix = index_command_prefix($macro);
                    my $key = $cline;
                    $key =~ s/^\s*//;
                    enter_index_entry($index_prefix, $line_nr, $key, $state->{'place'}, $state->{'element'}, $macro, $state->{'region'});
                    add_prev ($text, $stack, "\@$macro" .  $cline);
                    last;
                }
                elsif (defined($Texi2HTML::Config::texi_formats_map{$macro}))
                {
                    my $macro_kept; 
                    #print STDERR "TEXT_MACRO: $macro\n";
                    if ($Texi2HTML::Config::texi_formats_map{$macro} eq 'raw')
                    {
                        $state->{'raw'} = $macro;
                        #print STDERR "RAW\n";
                    }
                    elsif ($macro eq 'menu')
                    {
                        $state->{'menu'}++;
                        delete ($state->{'prev_menu_node'});
                        push @{$state->{'text_macro_stack'}}, $macro;
                        #print STDERR "MENU (text_macro_stack: @{$state->{'text_macro_stack'}})\n";
                    }
                    elsif (exists($region_lines{$macro}))
                    {
                        if (exists($state->{'region_lines'}) and ($state->{'region_lines'}->{'format'} ne $macro))
                        {
                            echo_error("\@$macro not allowed within $state->{'region_lines'}->{'format'}", $line_nr);
                            next;
                        }
                        open_region ($macro, $state);
                        if ($Texi2HTML::Config::region_formats_kept{$macro})
                        {
                            add_prev($text, $stack, "\@$macro");
                            $macro_kept = 1;
                            $state->{'region_lines'}->{'first_line'} = 1;
                        }
                        push @{$state->{'text_macro_stack'}}, $macro;
                    }
                    # if it is a raw formatting command or a menu command
                    # we must keep it for later
                    if (($state->{'raw'} and (!defined($Texi2HTML::Config::command_handler{$macro}))) or ($macro eq 'menu'))
                    {
                        add_prev($text, $stack, "\@$macro");
                        $macro_kept = 1;
                    }
                    if ($state->{'raw'})
                    {
                        push @$stack, { 'style' => $macro, 'text' => '' };
                    }
                    next if $macro_kept;
                    #dump_stack ($text, $stack, $state);
                    return if ($cline =~ /^\s*$/);
                }
                elsif ($macro eq 'float')
                { 
                    my ($style_texi, $label_texi) = split(/,/, $cline);
                    $style_texi = normalise_space($style_texi);
                    $label_texi = undef if (defined($label_texi) and ($label_texi =~ /^\s*$/));
                    if (defined($label_texi))
                    { # The float may be a target for refs if it has a label
                        $label_texi = normalise_node($label_texi);
                        if (exists($nodes{$label_texi}) and defined($nodes{$label_texi})
                             and $nodes{$label_texi}->{'seen'})
                        {
                            echo_error ("Duplicate label found: $label_texi", $line_nr);
                            while ($cline =~ /,/)
                            {
                                $cline =~ s/,.*$//;
                            }
                        }
                        else
                        {
                            my $float = { };
                            if (exists($nodes{$label_texi}) and defined($nodes{$label_texi}))
                            { # float appeared in a menu
                                $float = $nodes{$label_texi};
                            }
                            else
                            {
                                $nodes{$label_texi} = $float;
                            }
                            $float->{'float'} = 1;
                            $float->{'tag'} = 'float';
                            $float->{'texi'} = $label_texi;
                            $float->{'seen'} = 1;
                            $float->{'id'} = $label_texi;
                            $float->{'target'} = $label_texi;
    #print STDERR "FLOAT: $float $float->{'texi'}, place $state->{'place'}\n";
                            push @{$state->{'place'}}, $float;
                            $float->{'element'} = $state->{'element'};
                            $state->{'float'} = $float;
                            $float->{'style_texi'} = $style_texi;
                            push @floats, $float;
                        }
                    }
                    add_prev($text, $stack, "\@$macro" . $cline);
                    last;
                }
                elsif (defined($Texi2HTML::Config::def_map{$macro}))
                {
                    # @ may protect end of line in @def. We reconstruct lines here.
                    # in the texinfo manual is said that spaces after @ collapse 
                    if ($cline =~ /(\@+)\s*$/)
                    {
                        my $at_at_end_of_line = $1;
                        if ((length($at_at_end_of_line) % 2) == 1)
                        {
                            #print STDERR "Line continue $cline";
                            my $def_line = $cline;
                            $def_line =~ s/\@\s*$//;
                            chomp($def_line);
                            $state->{'in_deff_line'} = "\@$macro" .$def_line;
                            return;
                        }
                    }
                    #We must enter the index entries
                    my ($prefix, $entry, $argument) = get_deff_index($macro, $cline, $line_nr);
                    # use deffn instead of deffnx for @-command record 
                    # associated with index entry
                    my $idx_macro = $macro;
                    $idx_macro =~ s/x$//;
                    enter_index_entry($prefix, $line_nr, $entry, $state->{'place'},
                       $state->{'element'}, $idx_macro, $state->{'region'}) if ($prefix);
                    $cline =~ s/(.*)//;
                    add_prev($text, $stack, "\@$macro" . $1);
                    # the text is discarded but we must handle correctly bad
                    # texinfo with 2 @def-like commands on the same line
                    substitute_text({'structure' => 1, 'place' => $state->{'place'} },undef, $argument);
                }
                elsif ($macro =~ /^itemx?$/)
                {
                    enter_table_index_entry($text, $stack, $state, $line_nr);
                    if ($state->{'table_stack'}->[-1] =~ /^(v|f)table$/)
                    {
                        $state->{'item'} = $macro;
                        push @$stack, { 'format' => 'index_item', 'text' => '' };
                    }
                    else
                    {
                        add_prev($text, $stack, "\@$macro");
                    }
                }
                elsif ($format_type{$macro} and ($format_type{$macro} eq 'table' or $format_type{$macro} eq 'list' or $macro eq 'multitable'))
                { # We must enter the index entries of (v|f)table thus we track
                  # in which table we are
                    push @{$state->{'table_stack'}}, $macro;
                    add_prev($text, $stack, "\@$macro");
                }
                elsif ($cline =~ s/^{//)
                {
                    if ($macro eq 'verb')
                    {
                        if ($cline =~ /^$/)
                        {
                            # We already warned in pass texi
                            #warn "$ERROR verb at end of line";
                        }
                        else
                        {
                            $cline =~ s/^(.)//;
                            $state->{'verb'} = $1;
                        }
                    }
                    elsif ($macro eq 'footnote' and $Texi2HTML::Config::SEPARATED_FOOTNOTES)
                    {
                        $state->{'footnote_element'} = $state->{'element'};
                        $state->{'footnote_place'} = $state->{'place'};
                        $state->{'element'} = $footnote_element;
                        $state->{'place'} = $footnote_element->{'place'};
                    }
                    push (@$stack, { 'style' => $macro, 'text' => '' });
                }
                else
                {
                    $cline = do_unknown (1, $macro, $cline, $text, $stack, $state, $line_nr);
                }
                next;
            }
            #elsif($cline =~ s/^([^{}@]*)\@(.)//o)
            elsif($cline =~ s/^([^{}@]*)\@([^\s\}\{\@]*)//o)
            {
                add_prev($text, $stack, $1);
                $cline = do_unknown (1, $2, $cline, $text, $stack, $state, $line_nr);
                next;
            }
            elsif ($cline =~ s/^([^{}]*)([{}])//o)
            {
                add_prev($text, $stack, $1);
                if ($2 eq '{')
                {
                    push @$stack, { 'style' => '', 'text' => '' };
                }
                else
                {
                    if (@$stack)
                    {
                        my $style = pop @$stack;
                        my $result;
                        add_prev ($text, $stack, close_structure_command($style,
                             $state, 0, $line_nr));
                        next;
                    }
                    else
                    {
                        # We warn in the last pass
                        add_prev ($text, $stack, '}');
                    }
                }
            }
            else
            {
                #print STDERR "END_LINE $cline";
                add_prev($text, $stack, $cline);
                enter_table_index_entry($text, $stack, $state, $line_nr);
                last;
            }
        }
        return 1;
    } # end scan_structure
    
    sub close_style_command($$$$$)
    {
      my $text = shift;
      my $stack = shift;
      my $state = shift;
      my $line_nr = shift;
      my $line = shift;
    
      my $style = pop @$stack;
      my $command = $style->{'style'};
      my $result;
      if (!defined($command))
      {
         print STDERR "Bug: empty style in pass_text\n";
         return ($result, $command);
      }
      if (ref($::style_map_ref->{$command}) eq 'HASH')
      {
        push (@{$style->{'args'}}, $style->{'text'});
        $style->{'fulltext'} .= $style->{'text'};
        #my $number = 0;
        #foreach my $arg(@{$style->{'args'}})
        #{
           #print STDERR "  $number: $arg\n";
        #     $number++;
        #}
        $style->{'text'} = $style->{'fulltext'};
        $state->{'keep_texi'} = 0 if (
         ($::style_map_ref->{$command}->{'args'}->[$style->{'arg_nr'}] eq 'keep') 
        and ($state->{'keep_nr'} == 1));
      }
      $state->{'no_paragraph'}-- if ($no_paragraph_macro{$command});
      $style->{'no_close'} = 1 if ($state->{'no_close'});
      if ($::style_map_ref->{$command} and (defined($style_type{$command})) and ((!$style->{'no_close'} and ($style_type{$command} eq 'style')) or ($style_type{$command} eq 'accent')))
      {
        my $style_command = pop @{$state->{'command_stack'}};
        ############################ debug
        if ($style_command ne $command)
        {
          print STDERR "Bug: $style_command on 'command_stack', not $command\n";
          push @$stack, $style;
          push @{$state->{'command_stack'}}, $style_command;
          print STDERR "Stacks before pop top:\n";
          dump_stack($text, $stack, $state);
          pop @$stack;
        }
        ############################ end debug
      }
      if ($state->{'keep_texi'})
      { # don't expand @-commands in anchor, refs...
        close_arg ($command, $style->{'arg_nr'}, $state);
        $result = '@' . $command . '{' . $style->{'text'} . '}';
      }
      else
      {
        $result = do_simple($command, $style->{'text'}, $state, $style->{'args'}, $line_nr, $style->{'no_open'}, $style->{'no_close'});
        if ($state->{'code_style'} < 0)
        {
          echo_error ("Bug: negative code_style: $state->{'code_style'}, line:$line", $line_nr);
        }
        if ($state->{'math_style'} < 0)
        {
          echo_error ("Bug: negative math_style: $state->{'math_style'}, line:$line", $line_nr);
        }
      }
      return ($result, $command);
    }
    
    sub top_stack_is_menu($)
    {
       my $stack = shift;
       my $top_stack = top_stack($stack, 1);
       return 0 if (!$format_type{$top_stack->{'format'}} or $format_type{$top_stack->{'format'}} ne 'menu');
       return 1;
    }
    
    sub scan_line($$$$;$)
    {
        my $original_line = shift;
        my $text = shift;
        my $stack = shift;
        my $state = shift;
        my $line_nr = shift;
    
        die "stack not an array ref"  unless (ref($stack) eq "ARRAY");
        my $cline = $original_line;
        #print STDERR "SCAN_LINE (@{$state->{'command_stack'}})".format_line_number($line_nr).": $original_line";
        #dump_stack($text, $stack,  $state );
        my $new_menu_entry; # true if there is a new menu entry
    #    my $menu_description_in_format; # true if we are in a menu description 
    #                                # but in another format section (@table....)
    
        # this can happen currently with quotations
        if (defined($state->{'prepend_text'}))
        {
            $cline = $state->{'prepend_text'} . $cline;
            $state->{'prepend_text'} = undef;
            delete $state->{'prepend_text'};
        }
    
        # end of lines are really protected only for @def*
        # this cannot happen anymore, because the lines are concatenated 
        # in pass_structure
        unless ($state->{'end_of_line_protected'}) # and $in_some_format)
        { 
            if (!$state->{'raw'} and !$state->{'verb'} and $state->{'menu'})
            { # new menu entry
                my ($node, $name, $ending);
                if ($cline =~ s/^\*(\s+$NODERE)(::)//o)
                {
                    $node = $1;
                    $ending = $2;
                }
                elsif ($cline =~ s/^\*(\s+[^:]+):(\s*[^\t,\n]*?)(([\t,\n])|((\.)(\s)))//o)
                {
                    $name = $1;
                    $node = $2;
                    $ending = $4;
                    $ending = $6 if (!$ending);
                    $cline = $7.$cline if (defined($7));
                }
                if ($node)
                {
                    print STDERR "# Potential menu entry: $node\n" if ($T2H_DEBUG & $DEBUG_MENU);
                    $new_menu_entry = 1;
                    my $menu_entry = { 'name' => $name, 'node' => $node, 'ending' => $ending };
                    # in SIMPLE_MENU case we don't begin a description, description is 
                    # just some normal (preformatted) text
                    if ($Texi2HTML::Config::SIMPLE_MENU)
                    {
                        add_prev ($text, $stack, do_menu_link($state, $line_nr, $menu_entry));
                        #dump_stack($text, $stack, $state);
                    }
                    else
                    {
                        # close description and comment, if they are opened.
                        if (!close_menu_comment($text, $stack, $state, $line_nr) 
                          and !close_menu_description($text, $stack, $state, $line_nr)
                          and $state->{'preformatted'})
                        {
                            close_paragraph($text, $stack, $state, $line_nr);
                        }
                        print STDERR "# New menu entry: $node\n" if ($T2H_DEBUG & $DEBUG_MENU);
                        my $fusionned_description = 0;
                        # fusionned looks better in preformatted. But some formats
                        # want to always distinguish link and description 
                        if ($Texi2HTML::Config::SEPARATE_DESCRIPTION or !$state->{'preformatted'})
                        {
                            add_prev ($text, $stack, do_menu_link($state, $line_nr, $menu_entry));
                        }
                        else
                        {
                            $fusionned_description = 1;
                        }
                        push @$stack, {'format' => 'menu_description', 'text' => '', 'menu_entry' => $menu_entry, 'fusionned_description' => $fusionned_description};
                        $state->{'code_style'}++ if ($Texi2HTML::Config::format_code_style{'menu_description'});
                        if ($fusionned_description)
                        {
                            begin_paragraph($stack, $state) if $state->{'preformatted'};
                            add_prev ($text, $stack, do_menu_link($state, $line_nr, $menu_entry));
                        }
                     }
                }
                # we may be in a menu entry description, we close it 
                # if there is an empty line, so the last arg is $cline
                 if (!$new_menu_entry and close_menu_description($text, $stack, $state, $line_nr, $cline))
                 {
                    if ($state->{'preformatted'})
                    {
                        begin_paragraph($stack, $state);
                    }
                    else
                    {
                       # only start a menu_comment if right in menu and not in 
                       # an en format below a menu because if not right
                       # in a menu we have no way to distinguish a menu_comment
                       # and some normal text in the format.
                       # also it is not started in preformatted environment
                       begin_format($text, $stack, $state, 'menu_comment', $cline, $line_nr) if ($stack->[-1]->{'format'} and $format_type{$stack->[-1]->{'format'}} and $format_type{$stack->[-1]->{'format'}} eq 'menu');
                    }
                }
            }
            my $top_stack = top_stack($stack);
            if (($top_stack->{'format'} and $top_stack->{'format'} eq 'menu_description') or $state->{'raw'} or $state->{'preformatted'}  or $state->{'no_paragraph'} or $state->{'keep_texi'} or $state->{'remove_texi'})
            { # empty lines are left unmodified in these contexts.
              # it is also possible to be in preformatted within a menu_description
                if ($cline =~ /^\s*$/)
                {
                    add_prev($text, $stack, do_text($cline,$state));
                    return;
                }
            }
            else
            {
                if ($cline =~ /^\s*$/)
                {
                    if ($state->{'paragraph_context'})
                    { # An empty line ends a paragraph
                        close_paragraph($text, $stack, $state, $line_nr);
                    }
                    add_prev($text, $stack, &$Texi2HTML::Config::empty_line($cline,$state));
                    return 1;
                }
                else
                {
                    if (!no_paragraph($state,$cline))
                    { # open a paragraph, unless the line begins with a macro that
                      # shouldn't trigger a paragraph opening
                        begin_paragraph($stack, $state);
                    }
                }
            }
            # we flag specially deff_item and table line that contain only 
            # inter_item_command, which typically is be @c, @comment, @*index, such
            # that the formatter can treat those specifically.
            my $top_format = top_stack($stack,2);
            if ($top_format->{'only_inter_commands'} and !$state->{'keep_texi'})
            {
                my $real_format = $top_format->{'format_ref'}->{'format'};
                my $next_tag = next_tag($cline);
                $next_tag = '' if (!defined($next_tag));
                my $next_end_tag = next_end_tag($cline);
                $next_end_tag = '' if (!defined($next_end_tag));
    #print STDERR "$top_format->{'format'} $next_tag, end $next_end_tag :::$cline";
                delete $top_format->{'only_inter_commands'} unless
                 (
                  $Texi2HTML::Config::inter_item_commands{$next_tag} or 
                  (index_command_prefix($next_tag) ne '' and $Texi2HTML::Config::inter_item_commands{'cindex'}) or
                  ($top_format->{'format'} eq 'deff_item' and "${real_format}x" eq $next_tag) or
                  ($top_format->{'format'} ne 'deff_item' and $next_tag =~ /^itemx?$/) or
                  ( $next_end_tag eq $real_format )
                 );
                  #print STDERR "STILL $top_format->{'only_inter_commands'}\n" if ($top_format->{'only_inter_commands'});
            }
        }
        delete $state->{'end_of_line_protected'} 
           if ($state->{'end_of_line_protected'});
    
        while(1)
        {
            # scan_line
            #print STDERR "WHILE (l): $cline|";
            # dump_stack($text, $stack, $state);
            # we're in a raw format (html, tex if !L2H, verbatim)
            if (defined($state->{'raw'})) 
            {
                (dump_stack($text, $stack, $state), die "Bug for raw ($state->{'raw'})") if (! @$stack or ! ($stack->[-1]->{'style'} eq $state->{'raw'}));
                # macro_regexp
                if ($cline =~ /^(.*?)\@end\s([a-zA-Z][\w-]*)/o and ($2 eq $state->{'raw'}))
                # don't protect html, it is done by Texi2HTML::Config::raw if needed
                {
                    $cline =~ s/^(.*?)\@end\s$state->{'raw'}//;
                    print STDERR "# end raw $state->{'raw'}\n" if ($T2H_DEBUG & $DEBUG_FORMATS);
                    add_prev ($text, $stack, $1);
                    my $style = pop @$stack;
                    if ($style->{'text'} !~ /^\s*$/)
                    {
                        if ($state->{'keep_texi'})
                        {
                            add_prev ($text, $stack, $style->{'text'} . "\@end $state->{'raw'}");
                        }
                        elsif ($state->{'remove_texi'})
                        {
                            add_prev ($text, $stack, &$Texi2HTML::Config::raw_no_texi($style->{'style'}, $style->{'text'}));
                        }
                        else
                        { 
                            add_prev($text, $stack, &$Texi2HTML::Config::raw($style->{'style'}, $style->{'text'}));
                        }
                    }
                    if (!$state->{'keep_texi'} and !$state->{'remove_texi'})
                    {
                        # reopen preformatted if it was interrupted by the raw format
                        # if raw format is html the preformatted wasn't interrupted
                        begin_paragraph($stack, $state) if ($state->{'preformatted'} and (!$Texi2HTML::Config::format_in_paragraph{$state->{'raw'}})); 
                        delete $state->{'raw'};
                        return if ($cline =~ /^\s*$/);
                    }
                    delete $state->{'raw'};
                    next;
                }
                else
                {
                    print STDERR "#within raw $state->{'raw'}:$cline" if ($T2H_DEBUG & $DEBUG_FORMATS);
                    add_prev ($text, $stack, $cline);
                    last;
                }
            }
    
            # we are within a @verb
            if (defined($state->{'verb'}))
            {
                my $char = quotemeta($state->{'verb'});
                if ($cline =~ s/^(.*?)$char\}/\}/)
                {
                     if ($state->{'keep_texi'})
                     {
                         add_prev($text, $stack, $1 . $state->{'verb'});
                         $stack->[-1]->{'text'} = $state->{'verb'} . $stack->[-1]->{'text'};
                     }
                     else
                     {
                         add_prev($text, $stack, do_text($1, $state));
                     }
                     delete $state->{'verb'};
                     next;
                }
                else
                {
                     add_prev($text, $stack, $cline);
                     last;
                }
            }
    
            # a special case for @ followed by an end of line in deff
            # FIXME this is similar with makeinfo, but shouldn't that
            # be done for @floats and @quotations too? and @item, @center?
            # this piece of code is required, to avoid the 'cmd_line' to be 
            # closed below 
            # this cannot happen anymore, because the lines are concatenated 
            # in pass_structure
            if ($state->{'end_of_line_protected'})# and in some format
            { 
                print STDERR "Bug: 'end_of_line_protected' with text following: $cline\n" 
                    unless $cline =~ /^$/;
                return;
            }
    
            # We handle now the end tags 
            # macro_regexp
            if ($state->{'keep_texi'} and $cline =~ s/^([^{}@]*)\@end\s+([a-zA-Z][\w-]*)//)
            {
                my $end_tag = $2;
                add_prev($text, $stack, $1 . "\@end $end_tag");
                next;
            }
            # macro_regexp
            elsif ($state->{'remove_texi'} and $cline =~ s/^([^{}@]*)\@end\s+([a-zA-Z][\w-]*)//)
            {
                add_prev($text, $stack, $1);
                next;
            }
    	# macro_regexp
            #if (s/^([^{}@,]*)\@end\s+([a-zA-Z][\w-]*)\s//o or s/^([^{}@,]*)\@end\s+([a-zA-Z][\w-]*)$//o)
            if ($cline =~ s/^([^{}@,]*)\@end\s+([a-zA-Z][\w-]*)//o)
            {
                add_prev($text, $stack, do_text($1, $state));
                my $end_tag = $2;
    	    #print STDERR "END_MACRO $end_tag\n";
    	    #dump_stack ($text, $stack, $state);
    
                # First we test if the stack is not empty.
                # Then we test if the end tag is a format tag.
                # We then close paragraphs and preformatted at top of the stack.
                # We handle the end tag (even when it was not the tag which appears
                # on the top of the stack; in that case we close anything 
                # until that element)
                my $top_stack = top_stack($stack);
                if (!$top_stack)
                {
                    echo_error ("\@end $end_tag without corresponding opening", $line_nr);
                    add_prev($text, $stack, "\@end $end_tag");
                    next;
                }
    
                if (!$format_type{$end_tag})
                {
                    echo_warn ("Unknown \@end $end_tag", $line_nr);
                    #warn "$ERROR Unknown \@end $end_tag\n";
                    add_prev($text, $stack, "\@end $end_tag");
                    next;
                }
                if (!close_menu_description($text, $stack, $state, $line_nr))
                {
                   close_paragraph($text, $stack, $state, $line_nr); 
                }
    
                $top_stack = top_stack($stack);
                if (!$top_stack or (!defined($top_stack->{'format'})))
                {
                    echo_error ("\@end $end_tag without corresponding opening element", $line_nr);
                    add_prev($text, $stack, "\@end $end_tag");
                    dump_stack ($text, $stack, $state) if ($T2H_DEBUG);
                    next;
                }
                # Warn if the format on top of stack is not compatible with the 
                # end tag, and find the end tag.
                unless (
                    ($top_stack->{'format'} eq $end_tag)
                    or
                    (
                     $format_type{$end_tag} eq 'menu' and
                      $top_stack->{'format'} eq 'menu_comment'
                    ) or
                    (
                     $end_tag eq 'multitable' and $top_stack->{'format'} eq 'cell'
                    ) or
                    (
                     $format_type{$end_tag} eq 'list' and $top_stack->{'format'} eq 'item'
                    ) or
                    (
                      $format_type{$end_tag} eq 'table'
                      and
                      ($top_stack->{'format'} eq 'term' or $top_stack->{'format'} eq 'line')
                    ) or
                    (
                     defined($Texi2HTML::Config::def_map{$end_tag}) and
                     $top_stack->{'format'} eq 'deff_item'
                    )
                   )
                {
                    # this is not the right format. We try to close other
                    # formats to find the format we are searching for.
                    # First we close paragraphs, as with a wrong $end_format
                    # they may not be closed properly.
    
                    #print STDERR "  MISMATCH got $top_stack->{'format'} waited \@end $end_tag($top_stack->{'format'})\n";
                    #dump_stack ($text, $stack, $state);
                    close_paragraph($text, $stack, $state, $line_nr);
                    $top_stack = top_stack($stack);
                    if (!$top_stack or (!defined($top_stack->{'format'})))
                    {
                        echo_error ("\@end $end_tag without corresponding opening element", $line_nr);
                        add_prev($text, $stack, "\@end $end_tag");
                        # at that point the dump_stack is not very useful, since
                        # close_paragraph above may hide interesting info
                        dump_stack ($text, $stack, $state) if ($T2H_DEBUG);
                        next;
                    }
                    my $waited_format = $top_stack->{'format'};
                    $waited_format = $fake_format{$top_stack->{'format'}} if ($format_type{$top_stack->{'format'}} eq 'fake');
                    echo_error ("waiting for end of $waited_format, found \@end $end_tag", $line_nr);
                    #dump_stack ($text, $stack, $state);
                    close_stack($text, $stack, $state, $line_nr, $end_tag);
                    # FIXME this is too complex
                    # an empty preformatted may appear when closing things as
                    # when closed, formats reopen the preformatted environment
                    # in case there is some text following, but we know it isn't 
                    # the case here, thus we can close paragraphs.
                    close_paragraph($text, $stack, $state);
                    my $new_top_stack = top_stack($stack);
                    next unless ($new_top_stack and defined($new_top_stack->{'format'}) and (($new_top_stack->{'format'} eq $end_tag) 
                       or (($format_type{$new_top_stack->{'format'}} eq 'fake') and ($fake_format{$new_top_stack->{'format'}} eq $format_type{$end_tag}))));
                }
                # We should now be able to handle the format
                if (defined($format_type{$end_tag}))
                {# remove the space or new line following the @end command
                    $cline =~ s/\s//;
                    if (end_format($text, $stack, $state, $end_tag, $line_nr))
                    { # if end_format is false, paragraph is already begun
                        begin_paragraph_after_command($state,$stack,$end_tag,$cline);
                    }
                }
                next;
            }
            # This is a macro
    	#elsif (s/^([^{}@]*)\@([a-zA-Z]\w*|["'~\@\}\{,\.!\?\s\*\-\^`=:\/])//o)
            # macro_regexp
            elsif ($cline =~ s/^([^{},@]*)\@(["'~\@\}\{,\.!\?\s\*\-\^`=:\|\/\\])//o or $cline =~ s/^([^{}@,]*)\@([a-zA-Z][\w-]*)([\s\{\}\@])/$3/o or $cline =~ s/^([^{},@]*)\@([a-zA-Z][\w-]*)$//o)
            {
                my $before_macro = $1;
                my $macro = $2;
                $macro = $alias{$macro} if (exists($alias{$macro}));
                my $punct;
                if (!$state->{'keep_texi'} and $macro eq ':' and $before_macro =~ /(.)$/ and $Texi2HTML::Config::colon_command_punctuation_characters{$1})
                {
                    $before_macro =~ s/(.)$//;
                    $punct = $1;
                }
                add_prev($text, $stack, do_text($before_macro, $state));
                add_prev($text, $stack, &$Texi2HTML::Config::colon_command($punct)) if (defined($punct));
    	    #print STDERR "MACRO $macro\n";
    	    #print STDERR "LINE $cline";
    	    #dump_stack ($text, $stack, $state);
    
                close_paragraph($text, $stack, $state, $line_nr, 1) if ($Texi2HTML::Config::stop_paragraph_command{$macro} and !$state->{'keep_texi'});
    
                if (defined($Texi2HTML::Config::misc_command{$macro}))
                {
                    # Handle the misc command
                    $cline = misc_command_text($cline, $macro, $stack, $state, $text, $line_nr);
                    return unless (defined($cline));
                    unless ($Texi2HTML::Config::misc_command{$macro}->{'keep'})
                    {
                         begin_paragraph($stack, $state) if 
                           (!no_paragraph($state,$cline));
                         next;
                    }
                }
                if ($macro eq 'listoffloats')
                {
                    if ($state->{'keep_texi'})
                    {
                        if ($cline =~ s/(.*)//o)
                        {
                            add_prev($text, $stack, "\@$macro" . $1);
                        }
                        next;
                    }
                    return undef if ($state->{'remove_texi'});
                    
                    if ($cline =~ s/^(\s+)(.*)//o)
                    {
                        my $arg = $2;
                        my $style_id = cross_manual_line(normalise_space($arg));
                        my $style = substitute_line (&$Texi2HTML::Config::listoffloats_style($arg));
                        if (exists ($floats{$style_id}))
                        {
                             close_paragraph($text, $stack, $state, $line_nr);
                             my @listoffloats_entries = ();
                             foreach my $float (@{$floats{$style_id}->{'floats'}})
                             {
                                  my $float_style = substitute_line(&$Texi2HTML::Config::listoffloats_float_style($arg, $float));
                                  my $caption_lines = &$Texi2HTML::Config::listoffloats_caption($float);
                                  # we set 'multiple_pass', 'region' and 
                                  # 'region_pass'such that index entries
                                  # and anchors are not handled one more time;
                                  # the caption has already been formatted, 
                                  # and these have been handled at the right place
                                  # FIXME footnotes?
                                  my $caption = substitute_text(prepare_state_multiple_pass($macro, $state), undef, @$caption_lines);
                                  push @listoffloats_entries, &$Texi2HTML::Config::listoffloats_entry($arg, $float, $float_style, $caption, href($float, $state->{'element'}->{'file'}, $line_nr));
                             }
                             add_prev($text, $stack, &$Texi2HTML::Config::listoffloats($arg, $style, \@listoffloats_entries));
                        }
                        else
                        {
                             echo_warn ("Unknown float style $arg", $line_nr); 
                        }
                    }
                    else
                    {
                        echo_error ("Bad \@$macro line: $cline", $line_nr);
                    } 
                    return undef;
                }
                # This is a @macroname{...} construct. We add it on top of stack
                # It will be handled when we encounter the '}'
                # There is a special case for def macros as @deffn{def} is licit
                if (!$Texi2HTML::Config::def_map{$macro} and $cline =~ s/^{//) #}
                {
                    if ($macro eq 'verb')
                    {
                        if ($cline =~ /^$/)
                        {
                            # Allready warned 
                            #warn "$ERROR verb at end of line";
                        }
                        else
                        {
                            $cline =~ s/^(.)//;
                            $state->{'verb'} = $1;
                        }
                    } 
                    # currently if remove_texi and anchor/ref/footnote
                    # the text within the command is ignored
                    # see t2h_remove_command in texi2html.init
                    push (@$stack, { 'style' => $macro, 'text' => '', 'arg_nr' => 0 });
                    $state->{'no_paragraph'}++ if ($no_paragraph_macro{$macro});
                    open_arg($macro, 0, $state);
                    my $real_style_command = 0;
                    if (defined($style_type{$macro}) and (($style_type{$macro} eq 'style') or ($style_type{$macro} eq 'accent')))
                    {
                         push (@{$state->{'command_stack'}}, $macro);
                         $real_style_command = 1;
                         #print STDERR "# Stacked $macro (@{$state->{'command_stack'}})\n" if ($T2H_DEBUG); 
                    }
                    # FIXME give line, and modify line?
                    &$Texi2HTML::Config::begin_style_texi($macro, $state, $stack, $real_style_command)
                      if (defined($Texi2HTML::Config::begin_style_texi) 
                          and !($state->{'keep_texi'} or $state->{'remove_texi'}));
                    next;
                }
    
                # special case if we are checking itemize line. In that case
                # we want to make sure that there is no @item on the @itemize
                # line, otherwise it will be added on the front of another @item,
                # leading to an infinite loop...
    
                if ($state->{'check_item'} and ($macro =~ /^itemx?$/ or $macro eq 'headitem'))
                {
                    echo_error("\@$macro on \@$state->{'check_item'} line", $line_nr);
                    next;
                }
    
                # if we're keeping texi unmodified we can do it now
                if ($state->{'keep_texi'})
                {
                    # We treat specially formats accepting {} on command line
                    if ($macro eq 'multitable' or defined($Texi2HTML::Config::def_map{$macro}) or defined($sec2level{$macro}))
                    {
                        add_prev($text, $stack, "\@$macro" . $cline);
                        $cline = '';
                        next;
                    }
                    # @ at the end of line may protect the end of line even when
                    # keeping texi
                    # FIXME: with deff handled differently, now this is unused.
                    # in any case it should only be done in specific contexts
                  #  if ($macro eq "\n")
                  #  {
                  #       $state->{'end_of_line_protected'} = 1;
                  #       #print STDERR "PROTECTING END OF LINE\n";
                  #  }
    
                    add_prev($text, $stack, "\@$macro");
                    if ($Texi2HTML::Config::texi_formats_map{$macro} and $Texi2HTML::Config::texi_formats_map{$macro} eq 'raw')
                    {
                        $state->{'raw'} = $macro;
                        push (@$stack, {'style' => $macro, 'text' => ''});
                    }
                    next;
                }
    
                # If we are removing texi, the following macros are not removed 
                # as is but modified. So they are collected first, as if we were
                # in normal text
    
                # a raw macro beginning
                if ($Texi2HTML::Config::texi_formats_map{$macro} and $Texi2HTML::Config::texi_formats_map{$macro} eq 'raw')
                {
                    if (!$Texi2HTML::Config::format_in_paragraph{$macro})
                    { # close paragraph before verbatim (and tex if !L2H)
                        close_paragraph($text, $stack, $state, $line_nr);
                    }
                    $state->{'raw'} = $macro;
                    push (@$stack, {'style' => $macro, 'text' => ''});
                    return if ($cline =~ /^\s*$/);
                    next;
                }
                my $simple_macro = 1;
                # An accent macro
                if (exists($Texi2HTML::Config::accent_map{$macro}))
                {
                    # the command itself is not in the command stack, since with
                    # braces, it is already popped when do_simple is called
                    #push (@{$state->{'command_stack'}}, $macro);
                    $cline =~ s/^\s*// if ($macro =~ /^[a-zA-Z]/);
                    if ($cline =~ s/^(\S)//o)
                    {
                        add_prev($text, $stack, do_simple($macro, $1, $state, [ $1 ], $line_nr));
                    }
                    else
                    { # The accent is at end of line
                        add_prev($text, $stack, do_text($macro, $state));
                    }
                    #pop @{$state->{'command_stack'}};
                }
                # an @-command which should be like @command{}. We handle it...
                elsif ($::things_map_ref->{$macro})
                {
                    echo_warn ("$macro requires {}", $line_nr);
                    add_prev($text, $stack, do_simple($macro, '', $state));
                }
                # an @-command like @command
                elsif (defined($::simple_map_ref->{$macro}))
                {
                    add_prev($text, $stack, do_simple($macro, '', $state));
                }
                else
                {
                    $simple_macro = 0;
                }
                if ($simple_macro)
                {# if the macro didn't triggered a paragraph start it might now
                    begin_paragraph($stack, $state) if 
                       ($Texi2HTML::Config::no_paragraph_commands{$macro} and !no_paragraph($state,$cline));
                    next;
                }
                # the following macros are modified or ignored if we are 
                # removing texi, and they are not handled like macros in normal text
                if ($state->{'remove_texi'})
                {
                     # handle specially some macros
                     if ((index_command_prefix($macro) ne '') or 
                          ($macro eq 'itemize') or 
                          ($format_type{$macro} and ($format_type{$macro} eq 'table' or $format_type{$macro} eq 'quotation'))
                          or ($macro eq 'multitable'))
                     {
                          return;
                     }
                     elsif ($macro eq 'enumerate')
                     {
                          my $spec;
                          ($cline, $spec) = parse_enumerate ($cline);
                          return if ($cline =~ /^\s*$/);
                          next;
                     }
                     elsif (defined($Texi2HTML::Config::def_map{$macro}))
                     {
                         my ($command, $style, $category, $name, $type, $class, $arguments, $args_array);
                         ($command, $style, $category, $name, $type, $class, $arguments, $args_array) = parse_def($macro, $cline, $line_nr); 
                         # FIXME -- --- ''... lead to simple text in texi2html
                         # while they are kept as is in html coments by makeinfo
                         $category = remove_texi($category) if (defined($category));
                         $name = remove_texi($name) if (defined($name));
                         $type = remove_texi($type) if (defined($type));
                         $class = remove_texi($class) if (defined($class));
                         $arguments = remove_texi($arguments) if (defined($arguments));
                         chomp($arguments);
                         add_prev($text, $stack, &$Texi2HTML::Config::def_line_no_texi($category, $name, $type, $arguments));
                         return;
                    }
                    elsif (defined($sec2level{$macro}))
                    { #FIXME  there is certainly more intelligent stuff to do
                        my $num;
                        if ($state->{'region'})
                        {
                            $state->{'head_num'}++;
                            $num = "$state->{'region'}_$state->{'head_num'}";
                        }
                        else
                        {
    #                        $global_head_num++;
                            $num = $global_head_num;
                        }
                        my $heading_element = $headings{$num};
                        add_prev($text, $stack, &$Texi2HTML::Config::heading_no_texi($heading_element, $macro, $cline));
                        return;
                    }
    
                    # ignore other macros
                    next;
                }
    
                # handle the other macros, we are in the context of normal text
                if (defined($sec2level{$macro}))
                {
                     #dump_stack($text, $stack, $state);
                     my $num;
                     if ($state->{'region'})
                     {
                         $state->{'head_num'}++;
                         $num = "$state->{'region'}_$state->{'head_num'}";
                         #$num = $state->{'head_num'};
                     }
                     else
                     {
                         $global_head_num++;
                         $num = $global_head_num;
                     }
                     my $heading_element = $headings{$num};
                     add_prev($text, $stack, &$Texi2HTML::Config::element_label($heading_element->{'id'}, $heading_element, $macro, $cline));
                     add_prev($text, $stack, &$Texi2HTML::Config::heading($heading_element, $macro, $cline, substitute_line($cline), $state->{'preformatted'}));
                     return;
                }
    
                if (index_command_prefix($macro) ne '')
                {
                    my $index_name = index_command_prefix($macro);
                    $cline =~ s/^\s*//;
                    my $entry_texi = $cline;
                    chomp($entry_texi);
                    $entry_texi =~ s/\s*$//;
                    # FIXME multiple_pass?
                    my $entry_text = substitute_line($entry_texi, prepare_state_multiple_pass($macro, $state));
                    my ($index_entry, $index_label) = do_index_entry_label($macro,$state,$line_nr);
    
                    if (defined($index_entry))
                    {
                       echo_warn ("(bug?) Index out of sync `$index_entry->{'texi'}' ne `$entry_texi'", $line_nr) if ($index_entry->{'texi'} ne $entry_texi);
                    }
                    add_prev($text, $stack, &$Texi2HTML::Config::index_entry_command($macro, $index_name, $index_label, $entry_texi, $entry_text));
                    # it eats the end of line and therefore don't start
                    # table entries nor close @center. These should be stopped
                    # on the next line, though.
                    return;
                }
                if ($macro eq 'insertcopying')
                {
                    #close_paragraph($text, $stack, $state, $line_nr);
                    add_prev($text, $stack, do_insertcopying($state));
                    # reopen a preformatted format if it was interrupted by the macro
                    begin_paragraph ($stack, $state) if ($state->{'preformatted'});
                    return;
                }
                if ($macro =~ /^itemx?$/o or ($macro eq 'headitem'))
                {
    		    #print STDERR "ITEM: $cline";
    		    #dump_stack($text, $stack, $state);
                    abort_empty_preformatted($stack, $state);
                    # FIXME let the user be able not to close the paragraph
                    close_paragraph($text, $stack, $state, $line_nr);
    
                    if (defined($Texi2HTML::Config::tab_item_texi))
                    {
                       my $resline = &$Texi2HTML::Config::tab_item_texi($macro, $state->{'command_stack'}, $stack, $state, $cline, $line_nr);
                       $cline = $resline if (defined($resline));
                    }
    		    #print STDERR "ITEM after close para: $cline";
    		    #dump_stack($text, $stack, $state);
                    # these functions return the format if in the right context
                    my $format;
                    if ($format = add_item($text, $stack, $state, $line_nr))
                    { # handle lists
                        push (@$stack, { 'format' => 'item', 'text' => '', 'format_ref' => $format });
                        begin_paragraph($stack, $state) unless (!$state->{'preformatted'} and no_line($cline));
    #print STDERR "BEGIN ITEM $format->{'format'}\n";
    #dump_stack($text, $stack, $state);
                    }
                    elsif ($format = add_term($text, $stack, $state, $line_nr))
                    {# handle table @item term and restart another one
                        push (@$stack, { 'format' => 'term', 'text' => '', 'format_ref' => $format });
                        #$state->{'no_paragraph'}++;
                    }
                    elsif ($format = add_line($text, $stack, $state, $line_nr)) 
                    {# close table text and erstart a term
                        push (@$stack, { 'format' => 'term', 'text' => '', 'format_ref' => $format });
                        #$state->{'no_paragraph'}++;
                    }
                    if ($format)
                    {
                        my ($line, $open_command) = &$Texi2HTML::Config::format_list_item_texi($format->{'format'}, $cline, $format->{'prepended'}, $format->{'command'});
                        $cline = $line if (defined($line));
                        if ($open_command)
                        { 
                             open_arg($format->{'command'},0, $state);
                             $format->{'command_opened'} = 1;
                        }
                        $format->{'item_cmd'} = $macro;
                        next;
                    }
                    $format = add_row ($text, $stack, $state, $line_nr); # handle multitable
                    if (!$format)
                    {
                        echo_warn ("\@$macro outside of table or list", $line_nr);
                    }
                    else
                    {
                        push @$stack, {'format' => 'row', 'text' => '', 'item_cmd' => $macro, 'format_ref' => $format };
                        push @$stack, {'format' => 'cell', 'text' => '', 'format_ref' => $format};
                        $format->{'cell'} = 1;
                        if ($format->{'max_columns'})
                        {
                            begin_paragraph_after_command($state,$stack,$macro,$cline);
                        }
                        else
                        {
                            echo_warn ("\@$macro in empty multitable", $line_nr);
                        }
                    }
                    next;
                }
    
                if ($macro eq 'tab')
                {
                    abort_empty_preformatted($stack, $state);
                    # FIXME let the user be able not to close the paragraph?
                    close_paragraph($text, $stack, $state, $line_nr);
    
                    if (defined($Texi2HTML::Config::tab_item_texi))
                    {
                       my $resline = &$Texi2HTML::Config::tab_item_texi($macro, $state->{'command_stack'}, $stack, $state, $cline, $line_nr);
                       $cline = $resline if (defined($resline));
                    }
                    my $format = add_cell ($text, $stack, $state);
                    if (!$format)
                    {
                        echo_warn ("\@$macro outside of multitable", $line_nr);
                    }
                    else
                    {
                        push @$stack, {'format' => 'cell', 'text' => '', 'format_ref' => $format};
                        if (!$format->{'max_columns'})
                        {
                           echo_warn ("\@$macro in empty multitable", $line_nr);
                        }
                        elsif ($format->{'cell'} > $format->{'max_columns'})
                        {
                           echo_warn ("too much \@$macro (multitable has only $format->{'max_columns'} column(s))", $line_nr);
                        }
                    }
                    begin_paragraph_after_command($state,$stack,$macro,$cline);
                    next;
                }
                # Macro opening a format (table, list, deff, example...)
                if ($format_type{$macro} and ($format_type{$macro} ne 'fake'))
                {
                    $cline = begin_format($text, $stack, $state, $macro, $cline, $line_nr);
                    # we keep the end of line for @center, and for formats
                    # that have cmd_line opened and need to see the end of line
                    next if (($macro eq 'center') or 
                       (defined($Texi2HTML::Config::def_map{$macro}))
                       or ($macro eq 'float') or ($format_type{$macro} eq 'quotation'));
                    return if ($cline =~ /^\s*$/);
                    next;
                }
                $cline = do_unknown (2, $macro, $cline, $text, $stack, $state, $line_nr);
                next;
            }
            elsif($cline =~ s/^([^{}@,]*)\@([^\s\}\{\@]*)//o)
            { # A macro with a character which shouldn't appear in macro name
                add_prev($text, $stack, do_text($1, $state));
                $cline = do_unknown (2, $2, $cline, $text, $stack, $state, $line_nr);
                next;
            }
            # a brace, or an end of line and 'cmd_line' is on the top
            # of the stack
            elsif ($cline =~ s/^([^{},]*)([{}])//o or (@$stack and 
                 defined($stack->[-1]->{'style'}) and
                 ($stack->[-1]->{'style'} eq 'cmd_line') and $cline =~ /^([^{},]*)$/o))
            {
                my $leading_text = $1;
                my $brace = $2;
                add_prev($text, $stack, do_text($leading_text, $state));
                if (defined($brace) and ($brace eq '{')) #'}'
                {
                    add_prev($text, $stack, do_text('{',$state)); #}
                    if ($state->{'math_style'})
                    {
                        $state->{'math_brace'}++;
                    }
                    else 
                    {
                        unless ($state->{'keep_texi'} or $state->{'remove_texi'})
                        {
                            echo_error ("'{' without macro. Before: $cline", $line_nr);
                        }
                    }
                }
                elsif (defined($brace) and ($brace eq '}') and 
                        (!@$stack or (!defined($stack->[-1]->{'style'}))
                # with a non empty stack, but with 'cmd_line' as first item on 
                # the stack there should not be a }
                           or ($stack->[-1]->{'style'} eq 'cmd_line'))
                # braces are allowed in math
                        or $state->{'math_brace'})
                {
                    if ($state->{'keep_texi'})
                    {
                        add_prev($text, $stack, '}');
                    }
                    elsif($state->{'math_style'} and $state->{'math_brace'})
                    {
                        add_prev($text, $stack, do_text('}',$state));
                        $state->{'math_brace'}--;
                    }
                    else
                    {
                        echo_error("'}' without opening '{' before: $cline", $line_nr);
                        #dump_stack($text, $stack, $state);
                    }
                }
                else
                { # A @-command{ ...} is closed
                    my ($result, $command) = close_style_command($text, $stack, $state, $line_nr, $cline);
                    add_prev($text, $stack, $result);
                    if ($command eq 'cmd_line')
                    {
                        if ($state->{'preformatted'})
                        { # inconditionally begin a preformatted section if needed
                            begin_paragraph($stack, $state);
                        }
                        $state->{'no_paragraph'}--;
                        return;
                    }
                    elsif ($Texi2HTML::Config::no_paragraph_commands{$command} 
                      and !$state->{'keep_texi'} and !no_paragraph($state,$cline))
                    {
                       begin_paragraph($stack, $state);
                    }
                }
            }
            elsif ($cline =~ s/^([^,]*)[,]//o)
            {
                 add_prev($text, $stack, do_text($1, $state));
                 if (@$stack and defined($stack->[-1]->{'style'})
                      and (ref($::style_map_ref->{$stack->[-1]->{'style'}}) eq 'HASH'))
                 {
                      my $macro = $stack->[-1]->{'style'};
                      my $style_args = $::style_map_ref->{$macro}->{'args'};
                      if (defined($style_args->[$stack->[-1]->{'arg_nr'} + 1]))
                      {
                           push (@{$stack->[-1]->{'args'}}, $stack->[-1]->{'text'});
                           $stack->[-1]->{'fulltext'} .= $stack->[-1]->{'text'} . do_text(',', $state);
                           $stack->[-1]->{'text'} = '';
                           close_arg ($macro, $stack->[-1]->{'arg_nr'}, $state);
                           $stack->[-1]->{'arg_nr'}++;
                           open_arg ($macro, $stack->[-1]->{'arg_nr'}, $state);
                           next;
                      }
                 }
                 add_prev($text, $stack, do_text(',', $state));
            }
            else
            { # no macro nor '}', but normal text
                add_prev($text, $stack, do_text($cline, $state));
                # @center/line term is closed at the end of line. When a 
                # @-command which 
                # keeps the texi as is happens on the @center line, the @center
                # is closed at the end of line appearing after the @-command
                # closing (for example @ref, @footnote).
                last if ($state->{'keep_texi'});
                #print STDERR "END LINE:$cline!!!\n";
                #dump_stack($text, $stack, $state);
                my $maybe_format_to_close = 1;
                my $in_table;
                while ($maybe_format_to_close)
                {
                   $maybe_format_to_close = 0;
                   my $top_format = top_stack($stack, 1);
                   # the stack cannot easily be used, because there may be 
                   # opened commands in paragraphs if the center is in a 
                   # style command, like
                   # @b{
                   # bold
                   #
                   # @center centered bold
                   # 
                   # }
                   #
                   # Therefore $state->{'paragraph_style'}->[-1] is used.
                   #
                   # The close_stack until 'center' is needed because
                   # of constructs like 
                   #
                   # @center something @table
                   #
                   # In that case what would be removed from the stack after
                   # paragraph closing wold not be the @center. Such construct
                   # is certainly incorrect, though.
                   #
                   # when 'closing_center' is true we don't retry to close 
                   # the @center line.
                   if ($state->{'paragraph_style'}->[-1] eq 'center' 
                       and !$state->{'closing_center'} and !$state->{'keep_texi'})
                   {
                       $state->{'closing_center'} = 1;
                       close_paragraph($text, $stack, $state, $line_nr); 
                       close_stack($text, $stack, $state, $line_nr, 'center');
                       delete $state->{'closing_center'};
                       my $center = pop @$stack;
                       add_prev($text, $stack, &$Texi2HTML::Config::paragraph_style_command('center',$center->{'text'}));
                       my $top_paragraph_style = pop @{$state->{'paragraph_style'}};
                       
                       # center is at the bottom of the comand_stack because it 
                       # may be nested in many way
                       my $bottom_command_stack = shift @{$state->{'command_stack'}};
                       print STDERR "Bug: closing center, top_paragraph_style: $top_paragraph_style, bottom_command_stack: $bottom_command_stack.\n"
                          if ($bottom_command_stack ne 'center' or $top_paragraph_style ne 'center');
                       $maybe_format_to_close = 1;
                       next;
                   }
                   
                   # @item line is closed by end of line. In general there should
                   # not be a paragraph in a term. However it may currently
                   # happen in construct like
                   #
                   # @table @asis
                   # @item @cindex index entry
                   # some text still in term, and in paragraph
                   # Not in term anymore
                   # ....
                   #
                   if (defined($top_format->{'format'}) and $top_format->{'format'} eq 'term')
                   {
                       close_paragraph($text, $stack, $state, $line_nr)
                           if ($state->{'paragraph_context'});
                       $in_table = add_term($text, $stack, $state, $line_nr);
                       if ($in_table)
                       {
                          $maybe_format_to_close = 1;
                          next;
                       }
                   }
                }
                if ($in_table)
                {
                   push (@$stack, { 'format' => 'line', 'text' => '', 'only_inter_commands' => 1, 'format_ref' => $in_table });
                   begin_paragraph($stack, $state) if ($state->{'preformatted'});
                }
                last;
            }
        }
        return 1;
    } # end scan_line
    
    sub open_arg($$$)
    {
        my $macro = shift;
        my $arg_nr = shift;
        my $state = shift;
        if (ref($::style_map_ref->{$macro}) eq 'HASH')
        {
             my $arg = $::style_map_ref->{$macro}->{'args'}->[$arg_nr];
             if ($arg eq 'keep')
             {
                 $state->{'keep_nr'}++;
                 $state->{'keep_texi'} = 1;
             }
             elsif (!$state->{'keep_texi'})
             {
                 if ($arg eq 'code')
                 {
                     $state->{'code_style'}++;
                 }
                 elsif ($arg eq 'math')
                 {
                     $state->{'math_style'}++;
                     if ($state->{'math_style'} == 1)
                     {
                         $state->{'math_brace'} = 0;
                         # FIXME quick hack to define @\ in @math 
                         $::simple_map_ref->{'\\'} = $Texi2HTML::Config::simple_map_math{'\\'};
                         $::simple_map_pre_ref->{'\\'} = $Texi2HTML::Config::simple_map_pre_math{'\\'};
                         $::simple_map_texi_ref->{'\\'} = $Texi2HTML::Config::simple_map_texi_math{'\\'};
                     }
                 }
             }
        }
        elsif ($code_style_map{$macro} and !$state->{'keep_texi'})
        {
             $state->{'code_style'}++;
        }
    }
    
    sub close_arg($$$)
    {
        my $macro = shift;
        my $arg_nr = shift;
        my $state = shift;
        if (ref($::style_map_ref->{$macro}) eq 'HASH')
        {
             my $arg = $::style_map_ref->{$macro}->{'args'}->[$arg_nr];
             if ($arg eq 'keep')
             {
                 $state->{'keep_nr'}--;
                 $state->{'keep_texi'} = 0 if ($state->{'keep_nr'} == 0);
             }
             elsif (!$state->{'keep_texi'})
             {
                 if ($arg eq 'code')
                 {
                     $state->{'code_style'}--;
                 }
                 elsif ($arg eq 'math')
                 {
                     $state->{'math_style'}--;
                     if ($state->{'math_style'} == 0)
                     {
                         delete $::simple_map_ref->{'\\'};
                         delete $::simple_map_pre_ref->{'\\'};
                         delete $::simple_map_texi_ref->{'\\'};
                     }
                 }
             }
    #print STDERR "c $arg_nr $macro $arg $state->{'code_style'}\n";
        }
        elsif ($code_style_map{$macro} and !$state->{'keep_texi'})
        {
             $state->{'code_style'}--;
        }
    }
    
    # add a special style on the top of the stack. This is used for commands
    # that extend until the end of the line. Also add an entry in the @-command
    # hashes for this fakes style.
    sub open_cmd_line($$$$)
    {
        my $stack = shift;
        my $state = shift;
        my $args = shift;
        my $function = shift;
        push @$stack, {'style' => 'cmd_line', 'text' => '', 'arg_nr' => 0};
        foreach my $hash (\%Texi2HTML::Config::style_map, \%Texi2HTML::Config::style_map_pre, \%Texi2HTML::Config::style_map_texi, \%Texi2HTML::Config::simple_format_style_map_texi)
        {
             $hash->{'cmd_line'}->{'args'} = $args;
             $hash->{'cmd_line'}->{'function'} = $function;
        }
        $state->{'no_paragraph'}++;
    #    $state->{'cmd_line'} = 1;
        open_arg ('cmd_line', 0, $state);
    }
    
    # finish @item line in @*table
    sub add_term($$$$)
    {
        my $text = shift;
        my $stack = shift;
        my $state = shift;
        my $line_nr = shift;
    
        my $top_format = top_stack($stack);
        # FIXME: if there is a style on the stack, the closing of the term is 
        # postpopned until the next end of line without opened @-command.
        # It is demonstrated in formatting/tables.texi.
        # to avoid that we should search deeper in the stack and close until
        # the term (what was done before)
        return unless (defined($top_format->{'format'}) and $top_format->{'format'} eq 'term');
        
        #print STDERR "ADD_TERM\n";
    
        my $term = pop @$stack;
        my $format = $stack->[-1];
        $format->{'paragraph_number'} = 0;
        my $formatted_command;
        my $leading_spaces;
        my $trailing_spaces;
        my $term_formatted;
        chomp ($term->{'text'});
        if (exists($::style_map_ref->{$format->{'command'}}) and ($style_type{$format->{'command'}} eq 'style'))
    # and 
    #       !exists($Texi2HTML::Config::special_list_commands{$format->{'format'}}->{$format->{'command'}}) and ($style_type{$format->{'command'}} eq 'style'))
        {
             $leading_spaces = '';
             $trailing_spaces = '';
             $term_formatted = $term->{'text'};
             $term_formatted  =~ s/^(\s*)//o;
             $leading_spaces = $1 if (defined($1));
             $term_formatted  =~ s/(\s*)$//o;
             $trailing_spaces = $1 if (defined($1));
             unless ($format->{'command_opened'})
             {
                 open_arg($format->{'command'}, 0, $state);
             }
             $term_formatted = do_simple($format->{'command'}, $term_formatted, $state, [$term_formatted]); 
    #         $term->{'text'} = $leading_spaces. $term->{'text'} .$trailing_spaces;
        }
        elsif (exists($::things_map_ref->{$format->{'command'}}))
        {
            $formatted_command = do_simple($format->{'command'}, '', $state);
            $format->{'formatted_command'} = $formatted_command;
        }
        my $index_label;
        if ($format->{'format'} =~ /^(f|v)/o)
        {
            my $index_entry;
            ($index_entry, $index_label) = do_index_entry_label($format->{'format'}, $state,$line_nr);
            print STDERR "Bug: no index entry for $term->{'text'}" unless defined($index_label);
        }
        add_prev($text, $stack, &$Texi2HTML::Config::table_item($term->{'text'}, $index_label,$format->{'format'},$format->{'command'}, $formatted_command,$state->{'command_stack'}, $term_formatted, $leading_spaces, $trailing_spaces, $format->{'item_cmd'}));
        #$state->{'no_paragraph'}--;
        return $format;
    }
    
    sub add_row($$$$)
    {
        my $text = shift;
        my $stack = shift;
        my $state = shift;
        my $line_nr = shift;
        
        my $top_format = top_stack($stack);
        # @center a @item
        # will lead to row not being closed since a close paragraph doesn't
        # end the center.
        return unless (defined($top_format->{'format'}) and $top_format->{'format'} eq 'cell');
        my $cell = $top_format;
        my $format = $stack->[-3];
        print STDERR "Bug under row cell row not a multitable\n" if (!defined($format->{'format'}) or $format->{'format'} ne 'multitable'); 
        # print STDERR "ADD_ROW\n";
        # dump_stack($text, $stack, $state);
    
        my $empty_first;
        if ($format->{'first'} and $format->{'cell'} == 1 and $stack->[-1]->{'text'} =~ /^\s*$/)
        {
           $empty_first = 1;
        }
        if ($format->{'cell'} > $format->{'max_columns'} or $empty_first)
        {
           my $cell = pop @$stack;
           print STDERR "Bug: not a cell ($cell->{'format'}) in multitable\n" if ($cell->{'format'} ne 'cell');
        }
        else
        {
           add_cell($text, $stack, $state);
        }
        my $row = pop @$stack;
        print STDERR "Bug: not a row ($row->{'format'}) in multitable\n" if ($row->{'format'} ne 'row');
        if ($format->{'max_columns'} and !$empty_first)
        {
           # FIXME have the cell count in row and not in table. table could have
           # the whole structure, but cell count doesn't make much sense 
           add_prev($text, $stack, &$Texi2HTML::Config::row($row->{'text'}, $row->{'item_cmd'}, $format->{'columnfractions'}, $format->{'prototype_row'}, $format->{'prototype_lengths'}, $format->{'max_columns'}, $cell->{'only_inter_commands'}, $format->{'first'}));
        }
    
        $format->{'first'} = 0 if ($format->{'first'});
    
        return $format;
    }
    
    # FIXME remove and merge, too much double checks and code
    sub add_cell($$$$)
    {
        my $text = shift;
        my $stack = shift;
        my $state = shift;
        my $line_nr = shift;
        my $top_format = top_stack($stack);
    
        return unless (defined($top_format) and $top_format->{'format'} eq 'cell');
    
        my $cell = pop @$stack;
        my $row = top_stack($stack);
        print STDERR "Bug: top_stack of cell not a row\n" if (!defined($row->{'format'}) or ($row->{'format'} ne 'row'));
        my $format = $stack->[-2];
        print STDERR "Bug under cell row not a multitable\n" if (!defined($format->{'format'}) or $format->{'format'} ne 'multitable'); 
        if ($format->{'cell'} <= $format->{'max_columns'})
        {
            add_prev($text, $stack, &$Texi2HTML::Config::cell($cell->{'text'}, $row->{'item_cmd'}, $format->{'columnfractions'}, $format->{'prototype_row'}, $format->{'prototype_lengths'}, $format->{'max_columns'}, $cell->{'only_inter_commands'}, $format->{'first'}));
        }
        $format->{'cell'}++;
        return $format;
    }
    
    sub add_line($$$$)
    {
        my $text = shift;
        my $stack = shift;
        my $state = shift;
        my $line_nr = shift;
        my $top_stack = top_stack($stack);
    
        # if there is something like
        # @center centered @item new item
        # the item isn't opened since it is in @center, and center isn't closed 
        # by an @item appearing here (unlike a paragraph).
        # the error message is '@item outside of table or list'.
        # texi2dvi also has issue, but makeinfo is happy, however it 
        # produces bad nesting.
        return unless(defined($top_stack->{'format'}) and $top_stack->{'format'} eq 'line');
        #print STDERR "ADD_LINE\n";
        #dump_stack($text, $stack, $state);
    
        my $line = pop @$stack;
        my $format = $stack->[-1];
        $format->{'paragraph_number'} = 0;
        if ($format->{'first'})
        {
            $format->{'first'} = 0;
            # we must have 
    or
    following
    thus we do a # &$Texi2HTML::Config::table_line here too, although it could have # been a normal paragraph. add_prev($text, $stack, &$Texi2HTML::Config::table_line($line->{'text'}, $line->{'only_inter_commands'}, 1)) if ($line->{'text'} =~ /\S/o); } else { add_prev($text, $stack, &$Texi2HTML::Config::table_line($line->{'text'}, $line->{'only_inter_commands'}, 0)); } return $format; } # finish @enumerate or @itemize @item sub add_item($$$$) { my $text = shift; my $stack = shift; my $state = shift; my $line_nr = shift; my $top_stack = top_stack($stack); return unless (defined($top_stack->{'format'}) and $top_stack->{'format'} eq 'item'); #print STDERR "ADD_ITEM: \n"; #dump_stack($text, $stack, $state); # as in pre the end of line are kept, we must explicitely abort empty # preformatted, close_stack doesn't do that. my $item = pop @$stack; my $format = $stack->[-1]; $format->{'paragraph_number'} = 0; if ($format->{'format'} eq 'enumerate') { $format->{'number'} = ''; my $spec = $format->{'spec'}; $format->{'item_nr'}++; if ($spec =~ /^[0-9]$/) { $format->{'number'} = $spec + $format->{'item_nr'} - 1; } else { my $base_letter = ord('a'); $base_letter = ord('A') if (ucfirst($spec) eq $spec); my @letter_ords = decompose(ord($spec) - $base_letter + $format->{'item_nr'} - 1, 26); foreach my $ord (@letter_ords) {# FIXME we go directly to 'ba' after 'z', and not 'aa' #because 'ba' is 1,0 and 'aa' is 0,0. $format->{'number'} = chr($base_letter + $ord) . $format->{'number'}; } } } #dump_stack ($text, $stack, $state); # the element following ol or ul must be li. Thus even though there # is no @item we put a normal item. # don't do an item if it is the first and it is empty if (!$format->{'first'} or ($item->{'text'} =~ /\S/o)) { my $formatted_command; if (defined($format->{'command'}) and exists($::things_map_ref->{$format->{'command'}})) { $formatted_command = do_simple($format->{'command'}, '', $state); $format->{'formatted_command'} = $formatted_command; } #chomp($item->{'text'}); add_prev($text, $stack, &$Texi2HTML::Config::list_item($item->{'text'},$format->{'format'},$format->{'command'}, $formatted_command, $format->{'item_nr'}, $format->{'spec'}, $format->{'number'}, $format->{'prepended'}, $format->{'prepended_formatted'}, $item->{'only_inter_commands'}, $format->{'first'})); } if ($format->{'first'}) { $format->{'first'} = 0; } return $format; } # format ``simple'' macros, that is macros without arg or style macros sub do_simple($$$;$$$$) { my $macro = shift; my $text = shift; my $state = shift; my $args = shift; my $line_nr = shift; my $no_open = shift; my $no_close = shift; my $arg_nr = 0; $arg_nr = @$args - 1 if (defined($args)); #print STDERR "DO_SIMPLE $macro ".format_line_number($line_nr)." $args $arg_nr (@$args)\n" if (defined($args)); if (defined($::simple_map_ref->{$macro})) { # \n may in certain circumstances, protect end of lines # FIXME this cannot happen anymore, because the lines are concatenated # in pass_structure # if ($macro eq "\n") # { # $state->{'end_of_line_protected'} = 1; # #print STDERR "PROTECTING END OF LINE\n"; # } if ($state->{'keep_texi'}) { return "\@$macro"; } elsif ($state->{'remove_texi'}) { #print STDERR "DO_SIMPLE remove_texi $macro\n"; return $::simple_map_texi_ref->{$macro}; } else { return &$Texi2HTML::Config::simple_command($macro, $state->{'preformatted'}, $line_nr, $state); } } if (defined($::things_map_ref->{$macro})) { my $result; if ($state->{'keep_texi'}) { return "\@$macro" . '{}'.$text; } elsif ($state->{'remove_texi'}) { return $::texi_map_ref->{$macro}.$text; #print STDERR "DO_SIMPLE remove_texi texi_map $macro\n"; } else { return &$Texi2HTML::Config::thing_command($macro, $text, $state->{'preformatted'}, $line_nr, $state); } } elsif (defined($::style_map_ref->{$macro})) { if ($state->{'keep_texi'}) { return "\@$macro" . '{' . $text . '}'; } else { my $style; my $result; if ($state->{'remove_texi'}) { #print STDERR "REMOVE $macro, $style_map_texi_ref->{$macro}, fun $style_map_texi_ref->{$macro}->{'function'} remove cmd " . \&Texi2HTML::Config::t2h_remove_command . " ascii acc " . \&t2h_default_ascii_accent; $style = $::style_map_texi_ref->{$macro}; } elsif ($state->{'preformatted'}) { $style = $::style_map_pre_ref->{$macro}; } else { $style = $::style_map_ref->{$macro}; } if (defined($style)) { # known style $result = &$Texi2HTML::Config::style($style, $macro, $text, $args, $no_close, $no_open, $line_nr, $state, $state->{'command_stack'}); } if (!$no_close) { close_arg($macro,$arg_nr, $state); } return $result; } } elsif ($macro =~ /^special_(\w+)_(\d+)$/o) { my $style = $1; my $count = $2; print STDERR "Bug? text in \@$macro not empty.\n" if ($text ne ''); if ($state->{'keep_texi'}) {# text should be empty return "\@$macro" . '{' . $text . '}'; } if (defined($Texi2HTML::Config::command_handler{$style}) and defined($Texi2HTML::Config::command_handler{$style}->{'expand'})) { my $struct_count = 1+ $special_commands{$style}->{'max'} - $special_commands{$style}->{'count'}; if (($count != $struct_count) and $T2H_DEBUG) { print STDERR "count $count in \@special $style and structure $struct_count differ\n"; } $special_commands{$style}->{'count'}--; } my $result = $Texi2HTML::Config::command_handler{$style}->{'expand'} ($style,$count,$state,$text); $result = '' if (!defined($result)); return $result; } # Unknown macro my $result = ''; my ($done, $result_text, $message) = &$Texi2HTML::Config::unknown_style($macro, $text,$state); if ($done) { echo_warn($message, $line_nr) if (defined($message)); if (defined($result_text)) { $result = $result_text; } } else { unless ($no_open) { # we warn only if no_open is true, i.e. it is the first time we # close the macro for a multiline macro echo_warn ("Unknown command with braces `\@$macro'", $line_nr); $result = do_text("\@$macro") . "{"; } $result .= $text; $result .= '}' unless ($no_close); } return $result; } sub do_unknown($$$$$$$) { my $pass = shift; my $macro = shift; my $line = shift; my $text = shift; my $stack = shift; my $state = shift; my $line_nr = shift; #print STDERR "do_unknown[$pass]($macro) ::: $line"; my ($result_line, $result, $result_text, $message) = &$Texi2HTML::Config::unknown($macro, $line, $pass, $stack,$state); if ($result) { add_prev ($text, $stack, $result_text) if (defined($result_text)); echo_warn($message, $line_nr) if (defined($message)); # if $state->{'preformatted'}, assume that the preformatted is # already opened. Otherwise we may end up opening one each time # there is an unknown command. begin_paragraph_after_command($state, $stack, $macro, $result_line) if (!$state->{'preformatted'}); return $result_line; } elsif ($pass == 2) { echo_warn ("Unknown command `\@$macro' (left as is)", $line_nr); add_prev ($text, $stack, do_text("\@$macro")); return $line; } elsif ($pass == 1) { add_prev ($text, $stack, "\@$macro"); return $line; } elsif ($pass == 0) { add_prev ($text, $stack, "\@$macro") unless($state->{'ignored'}); return $line; } } # used only during @macro processing sub add_text($@) { my $string = shift; return if (!defined($string)); foreach my $scalar_ref (@_) { next unless defined($scalar_ref); if (!defined($$scalar_ref)) { $$scalar_ref = $string; } else { $$scalar_ref .= $string; } return; } } sub add_prev ($$$) { my $text = shift; my $stack = shift; my $string = shift; unless (defined($text) and ref($text) eq "SCALAR") { die "text not a SCALAR ref: " . ref($text) . ""; } #if (!defined($stack) or (ref($stack) ne "ARRAY")) #{ # $string = $stack; # $stack = []; #} return if (!defined($string)); if (@$stack) { $stack->[-1]->{'text'} .= $string; return; } if (!defined($$text)) { $$text = $string; } else { $$text .= $string; } } sub close_stack_texi_structure($$$$) { my $text = shift; my $stack = shift; my $state = shift; my $line_nr = shift; return undef unless (@$stack or $state->{'raw'} or $state->{'macro'} or $state->{'macro_name'} or $state->{'ignored'}); #print STDERR "close_stack_texi_structure\n"; #dump_stack ($text, $stack, $state); my $stack_level = $#$stack + 1; my $string = ''; if ($state->{'ignored'}) { $string .= "\@end $state->{'ignored'} "; echo_warn ("closing $state->{'ignored'}", $line_nr); } if ($state->{'texi'}) { if ($state->{'macro'}) { $string .= "\@end macro "; echo_warn ("closing macro", $line_nr); } elsif ($state->{'macro_name'}) { $string .= ('}' x $state->{'macro_depth'}) . " "; echo_warn ("closing $state->{'macro_name'} ($state->{'macro_depth'} braces missing)", $line_nr); } elsif ($state->{'verb'}) { echo_warn ("closing \@verb", $line_nr); $string .= $state->{'verb'} . '}'; } elsif ($state->{'raw'}) { echo_warn ("closing \@$state->{'raw'} raw format", $line_nr); $string .= "\@end $state->{'raw'}"; } if ($string ne '') { #print STDERR "close_stack scan_texi ($string)\n"; scan_texi ($string, $text, $stack, $state, $line_nr); $string = ''; } } elsif ($state->{'verb'}) { $string .= $state->{'verb'}; } while ($stack_level--) { my $stack_text = $stack->[$stack_level]->{'text'}; $stack_text = '' if (!defined($stack_text)); if ($stack->[$stack_level]->{'format'}) { my $format = $stack->[$stack_level]->{'format'}; if ($format eq 'index_item') { enter_table_index_entry($text, $stack, $state, $line_nr); next; } elsif (!defined($format_type{$format}) or ($format_type{$format} ne 'fake')) { $stack_text = "\@$format\n" . $stack_text; } } elsif (defined($stack->[$stack_level]->{'style'})) { if ($state->{'structure'}) { $stack_text = close_structure_command($stack->[$stack_level], $state,1,$line_nr) } else { my $style = $stack->[$stack_level]->{'style'}; if ($style ne '') { $stack_text = "\@$style\{" . $stack_text; } else {# this is a lone opened brace. We readd it there. $stack_text = "\{" . $stack_text; } } } pop @$stack; add_prev($text, $stack, $stack_text); } $stack = [ ]; $state->{'close_stack'} = 1; if ($string ne '') { if ($state->{'texi'}) { #print STDERR "scan_texi in close_stack ($string)\n"; scan_texi($string, $text, $stack, $state, $line_nr); } elsif ($state->{'structure'}) { #print STDERR "scan_structure in close_stack ($string)\n"; scan_structure($string, $text, $stack, $state, $line_nr); } } delete $state->{'close_stack'}; } sub open_region($$) { my $command = shift; my $state = shift; if (!exists($state->{'region_lines'})) { $state->{'region_lines'}->{'format'} = $command; $state->{'region_lines'}->{'number'} = 1; $state->{'region_lines'}->{'kept_place'} = $state->{'place'}; $state->{'place'} = $no_element_associated_place; $state->{'region'} = $command; $state->{'multiple_pass'}++; $state->{'region_pass'} = 1; } else { $state->{'region_lines'}->{'number'}++; } } # close region like @insertcopying, titlepage... # restore $state and delete the structure sub close_region($) { my $state = shift; $state->{'place'} = $state->{'region_lines'}->{'kept_place'}; $state->{'multiple_pass'}--; delete $state->{'region_lines'}->{'number'}; delete $state->{'region_lines'}->{'format'}; delete $state->{'region_lines'}->{'kept_place'}; delete $state->{'region_lines'}; delete $state->{'region'}; delete $state->{'region_pass'}; } # close the stack, closing @-commands and formats left open. # if a $format is given if $format is encountered the closing stops sub close_stack($$$$;$) { my $text = shift; my $stack = shift; my $state = shift; my $line_nr = shift; my $format = shift; #print STDERR "sub_close_stack\n"; return unless (@$stack); my $stack_level = $#$stack + 1; #debugging #my $print_format = 'NO FORMAT'; #$print_format = $format if ($format); #print STDERR "Close_stack: format $print_format\n"; while ($stack_level--) { if ($stack->[$stack_level]->{'format'}) { my $stack_format = $stack->[$stack_level]->{'format'}; last if (defined($format) and $stack_format eq $format); # We silently close paragraphs, preformatted sections and fake formats if ($stack_format eq 'paragraph') { my $paragraph = pop @$stack; add_prev ($text, $stack, do_paragraph($paragraph->{'text'}, $state, $stack)); } elsif ($stack_format eq 'preformatted') { my $paragraph = pop @$stack; add_prev ($text, $stack, do_preformatted($paragraph->{'text'}, $state, $stack)); } else { if ($fake_format{$stack_format}) { warn "# Closing a fake format `$stack_format'\n" if ($T2H_VERBOSE); } elsif ($stack_format ne 'center') { # we don't warn for center echo_error ("closing `$stack_format'", $line_nr); #dump_stack ($text, $stack, $state); } if ($state->{'keep_texi'}) { add_prev($text, $stack, "\@end $stack_format"); } elsif (!$state->{'remove_texi'}) { end_format($text, $stack, $state, $stack_format, $line_nr) unless ($format_type{$stack_format} eq 'fake'); } } } else { my $style = $stack->[$stack_level]->{'style'}; ########################## debug if (!defined($style)) { print STDERR "Bug: style not defined, on stack\n"; dump_stack ($text, $stack, $state); # bug } ########################## end debug echo_warn ("closing \@-command $style", $line_nr) if ($style); my ($result, $command) = close_style_command($text, $stack, $state, $line_nr, ''); add_prev($text, $stack, $result) if (defined($result)); } } } # given a stack and a list of formats, return true if the stack contains # these formats, first on top sub stack_order($@) { my $stack = shift; my $stack_level = $#$stack + 1; while (@_) { my $format = shift; while ($stack_level--) { if ($stack->[$stack_level]->{'format'}) { if ($stack->[$stack_level]->{'format'} eq $format) { $format = undef; last; } else { return 0; } } } return 0 if ($format); } return 1; } sub top_format($) { my $stack = shift; my $stack_level = $#$stack + 1; while ($stack_level--) { if ($stack->[$stack_level]->{'format'} and !$fake_format{$stack->[$stack_level]->{'format'}}) { return $stack->[$stack_level]; } } return undef; } sub close_paragraph($$$;$$) { my $text = shift; my $stack = shift; my $state = shift; my $line_nr = shift; my $no_preformatted_closing = shift; #print STDERR "CLOSE_PARAGRAPH\n"; #dump_stack($text, $stack, $state); # close until the first format, # duplicate stack of styles not closed my $new_stack; my $stack_level = $#$stack + 1; while ($stack_level--) { last if ($stack->[$stack_level]->{'format'}); my $style = $stack->[$stack_level]->{'style'}; # FIXME images, footnotes, xrefs, anchors? # seems that it is not possible, as # close_paragraph shouldn't be called with keep_texi # and when the arguments are expanded, there is a # substitute_line or similar with a new stack. # the !exists($style_type{$style}) condition catches the unknown # @-commands: by default they are considered as style commands if (!exists($style_type{$style}) or $style_type{$style} eq 'style') { unshift @$new_stack, { 'style' => $style, 'text' => '', 'no_open' => 1, 'arg_nr' => 0 }; } elsif (($style_type{$style} eq 'simple_style') or ($style_type{$style} eq 'accent')) { } else { print STDERR "BUG: special $style while closing paragraph\n"; } $state->{'no_close'} = 1; my ($result, $command) = close_style_command($text, $stack, $state, $line_nr, ''); add_prev($text, $stack, $result) if (defined($result)); delete $state->{'no_close'}; } if (!$state->{'paragraph_context'} and !$state->{'preformatted'} and defined($new_stack) and scalar(@$new_stack)) { # in that case the $new_stack isn't recorded in $state->{'paragraph_macros'} # and therefore, it is lost print STDERR "BUG: closing paragraph, but not in paragraph/preformatted, and new_stack not empty ".format_line_number($line_nr)."\n"; dump_stack($text, $stack, $state); } my $top_stack = top_stack($stack); if ($top_stack and !defined($top_stack->{'format'})) { #debug print STDERR "Bug: no format on top stack\n"; dump_stack($text, $stack, $state); } if ($top_stack and ($top_stack->{'format'} eq 'paragraph')) { my $paragraph = pop @$stack; add_prev($text, $stack, do_paragraph($paragraph->{'text'}, $state, $stack)); $state->{'paragraph_macros'} = $new_stack; return 1; } elsif ($top_stack and ($top_stack->{'format'} eq 'preformatted') and !$no_preformatted_closing) { my $paragraph = pop @$stack; add_prev($text, $stack, do_preformatted($paragraph->{'text'}, $state, $stack)); $state->{'paragraph_macros'} = $new_stack; return 1; } return; } sub abort_empty_preformatted($$) { my $stack = shift; my $state = shift; if (@$stack and $stack->[-1]->{'format'} and ($stack->[-1]->{'format'} eq 'preformatted') and ($stack->[-1]->{'text'} !~ /\S/)) { pop @$stack; } } # for debugging sub dump_stack($$$) { my $text = shift; my $stack = shift; my $state = shift; if (defined($$text)) { print STDERR "text: $$text\n"; } else { print STDERR "text: UNDEF\n"; } my $in_remove = 0; my $in_simple_format = 0; my $in_keep = 0; $in_keep = 1 if ($state->{'keep_texi'}); if (!$in_keep) { $in_simple_format = 1 if ($state->{'simple_format'}); $in_remove = 1 if ($state->{'remove_texi'} and !$in_simple_format); } print STDERR "state(k${in_keep}s${in_simple_format}r${in_remove}): "; foreach my $key (keys(%$state)) { my $value = 'UNDEF'; $value = $state->{$key} if (defined($state->{$key})); print STDERR "$key: $value " if (!ref($value)); } print STDERR "\n"; my $stack_level = $#$stack + 1; while ($stack_level--) { print STDERR " $stack_level-> "; foreach my $key (keys(%{$stack->[$stack_level]})) { my $value = 'UNDEF'; $value = $stack->[$stack_level]->{$key} if (defined($stack->[$stack_level]->{$key})); print STDERR "$key: $value "; } print STDERR "\n"; } if (defined($state->{'command_stack'})) { print STDERR "command_stack: "; foreach my $style (@{$state->{'command_stack'}}) { print STDERR "($style) "; } print STDERR "\n"; } if (defined($state->{'region_lines'})) { print STDERR "region_lines($state->{'region_lines'}->{'number'}): $state->{'region_lines'}->{'format'}\n"; } if (defined($state->{'paragraph_macros'})) { print STDERR "paragraph_macros: "; foreach my $style (@{$state->{'paragraph_macros'}}) { print STDERR "($style->{'style'})"; } print STDERR "\n"; } if (defined($state->{'preformatted_stack'})) { print STDERR "preformatted_stack: "; foreach my $preformatted_style (@{$state->{'preformatted_stack'}}) { if ($preformatted_style eq '') { print STDERR "."; next; } my $pre_style = ''; $pre_style = $preformatted_style->{'pre_style'} if (exists $preformatted_style->{'pre_style'}); my $class = ''; $class = $preformatted_style->{'class'} if (exists $preformatted_style->{'class'}); my $style = ''; $style = $preformatted_style->{'style'} if (exists $preformatted_style->{'style'}); print STDERR "($pre_style, $class,$style)"; } print STDERR "\n"; } if (defined($state->{'text_macro_stack'}) and @{$state->{'text_macro_stack'}}) { print STDERR "text_macro_stack: (@{$state->{'text_macro_stack'}})\n"; } } # for debugging sub print_elements($) { my $elements = shift; foreach my $elem(@$elements) { if ($elem->{'node'}) { print STDERR "node-> $elem "; } else { print STDERR "chap=> $elem "; } foreach my $key (keys(%$elem)) { my $value = "UNDEF"; $value = $elem->{$key} if (defined($elem->{$key})); print STDERR "$key: $value "; } print STDERR "\n"; } } my @states_stack = (); sub push_state($) { my $new_state = shift; push @states_stack, $new_state; $Texi2HTML::THISDOC{'state'} = $new_state; } sub pop_state() { pop @states_stack; if (@states_stack) { $Texi2HTML::THISDOC{'state'} = $states_stack[-1]; } else { $Texi2HTML::THISDOC{'state'} = undef; } } sub substitute_line($;$$) { my $line = shift; my $state = shift; my $line_nr = shift; $state = {} if (!defined($state)); $state->{'no_paragraph'} = 1; # this is usefull when called from &$I, and also for image files return simple_format($state, $line_nr, $line) if ($state->{'simple_format'}); return substitute_text($state, $line_nr, $line); } sub substitute_text($$@) { my $state = shift; my $line_nr = shift; my @stack = (); my $text = ''; my $result = ''; if ($state->{'structure'}) { initialise_state_structure($state); } elsif ($state->{'texi'}) { # only in arg_expansion initialise_state_texi($state); } else { #print STDERR "FILL_STATE substitute_text ($state->{'preformatted'}): @_\n"; fill_state($state); } $state->{'spool'} = []; #print STDERR "SUBST_TEXT begin\n"; push_state($state); while (@_ or @{$state->{'spool'}} or $state->{'in_deff_line'}) { my $line; if (@{$state->{'spool'}}) { $line = shift @{$state->{'spool'}}; } else { $line = shift @_; } if ($state->{'in_deff_line'}) { if (defined($line)) { $line = $state->{'in_deff_line'} . $line; } else { $line = $state->{'in_deff_line'}; } delete $state->{'in_deff_line'}; } else { next unless (defined($line)); } #{ my $p_line = $line; chomp($p_line); print STDERR "SUBST_TEXT $p_line\n"; } if ($state->{'structure'}) { scan_structure ($line, \$text, \@stack, $state); } elsif ($state->{'texi'}) { scan_texi ($line, \$text, \@stack, $state); } else { scan_line($line, \$text, \@stack, $state, $line_nr); } next if (@stack); $result .= $text; $text = ''; } # FIXME could we have the line number ? # close stack in substitute_text if ($state->{'texi'} or $state->{'structure'}) { close_stack_texi_structure(\$text, \@stack, $state, undef); } else { close_stack(\$text, \@stack, $state, $line_nr); } #print STDERR "SUBST_TEXT end\n"; pop_state(); return $result . $text; } sub print_lines($;$) { my ($fh, $lines) = @_; $lines = $Texi2HTML::THIS_SECTION unless $lines; my @cnt; my $cnt; for my $line (@$lines) { print $fh $line; if (defined($Texi2HTML::Config::WORDS_IN_PAGE) and ($Texi2HTML::Config::SPLIT eq 'node')) { @cnt = split(/\W*\s+\W*/, $line); $cnt += scalar(@cnt); } } return $cnt; } sub do_index_entry_label($$$) { my $command = shift; my $state = shift; my $line_nr = shift; # index entries are not entered in special regions return (undef,'') if ($state->{'region'}); # return '' if ($state->{'multiple_pass'} or $state->{'outside_document'}); my $entry = shift @index_labels; if (!defined($entry)) { echo_warn ("Not enough index entries !", $line_nr); return (undef,''); } if ($command ne $entry->{'command'}) { # happens with bad texinfo with a line like # @deffn func aaaa args @defvr c--ategory d--efvr_name echo_warn ("Waiting for index cmd \@$entry->{'command'}, got \@$command", $line_nr); } print STDERR "(index $command) [$entry->{'entry'}] $entry->{'id'}\n" if ($T2H_DEBUG & $DEBUG_INDEX); return ($entry, &$Texi2HTML::Config::index_entry_label ($entry->{'id'}, $state->{'preformatted'}, substitute_line($entry->{'entry'}, prepare_state_multiple_pass("${command}_index", $state)), $index_prefix_to_name{$entry->{'prefix'}}, $command, $entry->{'texi'}, substitute_line($entry->{'texi'}, prepare_state_multiple_pass("${command}_index", $state)))); } # decompose a decimal number on a given base. The algorithm looks like # the division with growing powers (division suivant les puissances # croissantes) ? sub decompose($$) { my $number = shift; my $base = shift; my @result = (); return (0) if ($number == 0); my $power = 1; my $remaining = $number; while ($remaining) { my $factor = $remaining % ($base ** $power); $remaining -= $factor; push (@result, $factor / ($base ** ($power - 1))); $power++; } return @result; } # process a css file sub process_css_file ($$) { my $fh =shift; my $file = shift; my $in_rules = 0; my $in_comment = 0; my $in_import = 0; my $in_string = 0; my $rules = []; my $imports = []; while (my $line = <$fh>) { #print STDERR "Line: $line"; if ($in_rules) { push @$rules, $line; next; } my $text = ''; while (1) { #sleep 1; #print STDERR "${text}!in_comment $in_comment in_rules $in_rules in_import $in_import in_string $in_string: $line"; if ($in_comment) { if ($line =~ s/^(.*?\*\/)//) { $text .= $1; $in_comment = 0; } else { push @$imports, $text . $line; last; } } elsif (!$in_string and $line =~ s/^\///) { # what do '\' do here ? if ($line =~ s/^\*//) { $text .= '/*'; $in_comment = 1; } else { push (@$imports, $text. "\n") if ($text ne ''); push (@$rules, '/' . $line); $in_rules = 1; last; } } elsif (!$in_string and $in_import and $line =~ s/^([\"\'])//) { # strings outside of import start rules $text .= "$1"; $in_string = quotemeta("$1"); } elsif ($in_string and $line =~ s/^(\\$in_string)//) { $text .= $1; } elsif ($in_string and $line =~ s/^($in_string)//) { $text .= $1; $in_string = 0; } elsif ((! $in_string and !$in_import) and ($line =~ s/^([\\]?\@import)$// or $line =~ s/^([\\]?\@import\s+)//)) { $text .= $1; $in_import = 1; } elsif (!$in_string and $in_import and $line =~ s/^\;//) { $text .= ';'; $in_import = 0; } elsif (($in_import or $in_string) and $line =~ s/^(.)//) { $text .= $1; } elsif (!$in_import and $line =~ s/^([^\s])//) { push (@$imports, $text. "\n") if ($text ne ''); push (@$rules, $1 . $line); $in_rules = 1; last; } elsif ($line =~ s/^(\s)//) { $text .= $1; } elsif ($line eq '') { push (@$imports, $text); last; } } } warn "$WARN string not closed in css file $file\n" if ($in_string); warn "$WARN comment not closed in css file $file\n" if ($in_comment); warn "$WARN \@import not finished in css file $file\n" if ($in_import and !$in_comment and !$in_string); return ($imports, $rules); } sub collect_all_css_files() { my @css_import_lines; my @css_rule_lines; # process css files foreach my $file (@Texi2HTML::Config::CSS_FILES) { my $css_file_fh; my $css_file; if ($file eq '-') { $css_file_fh = \*STDIN; $css_file = '-'; } else { $css_file = locate_include_file ($file); unless (defined($css_file)) { warn "css file $file not found\n"; next; } unless (open (CSSFILE, "$css_file")) { warn "Cannot open ${css_file}: $!"; next; } $css_file_fh = \*CSSFILE; } my ($import_lines, $rules_lines); ($import_lines, $rules_lines) = process_css_file ($css_file_fh, $css_file); push @css_import_lines, @$import_lines; push @css_rule_lines, @$rules_lines; } if ($T2H_DEBUG & $DEBUG_USER) { if (@css_import_lines) { print STDERR "# css import lines\n"; foreach my $line (@css_import_lines) { print STDERR "$line"; } } if (@css_rule_lines) { print STDERR "# css rule lines\n"; foreach my $line (@css_rule_lines) { print STDERR "$line"; } } } return (\@css_import_lines, \@css_rule_lines); } sub init_with_file_name($) { my $base_file = shift; set_docu_names($base_file, $Texi2HTML::THISDOC{'input_file_number'}); foreach my $handler(@Texi2HTML::Config::command_handler_init) { &$handler; } } ####################################################################### # # Main processing, process all the files given on the command line # ####################################################################### die "$0: missing file argument.\n$T2H_FAILURE_TEXT" unless (scalar(@ARGV) >= 1); my $file_number = 0; # main processing while(@ARGV) { my $input_file_name = shift(@ARGV); %Texi2HTML::THISDOC = (); $Texi2HTML::THIS_ELEMENT = undef; foreach my $global_key (keys(%Texi2HTML::GLOBAL)) { $Texi2HTML::THISDOC{$global_key} = $Texi2HTML::GLOBAL{$global_key}; } set_date() if ($Texi2HTML::GLOBAL{'current_lang'}); $Texi2HTML::THISDOC{'input_file_name'} = $input_file_name; $Texi2HTML::THISDOC{'input_file_number'} = $file_number; my $input_file_base = $input_file_name; $input_file_base =~ s/\.te?x(i|info)?$//; @{$Texi2HTML::TOC_LINES} = (); # table of contents @{$Texi2HTML::OVERVIEW} = (); # short table of contents # this could be done here, but perl warns that # `"Texi2HTML::TITLEPAGE" used only once' and it is reset in # &$Texi2HTML::Config::titlepage anyway # $Texi2HTML::TITLEPAGE = undef; @{$Texi2HTML::THIS_SECTION} = (); # the reference to these hashes may be used before this point (for example # see makeinfo.init), so they should be kept as is and the values undef # but the key should not be deleted because the ref is on the key. foreach my $hash (\%Texi2HTML::HREF, \%Texi2HTML::NAME, \%Texi2HTML::NODE, \%Texi2HTML::NO_TEXI, \%Texi2HTML::SIMPLE_TEXT) { foreach my $key (keys(%$hash)) { $hash->{$key} = undef; } } $docu_dir = undef; # directory of the document $docu_name = undef; # basename of the document $docu_rdir = undef; # directory for the output $docu_toc = undef; # document's table of contents $docu_stoc = undef; # document's short toc $docu_foot = undef; # document's footnotes $docu_about = undef; # about this document $docu_top = undef; # document top $docu_doc = undef; # document (or document top of split) $docu_frame = undef; # main frame file $docu_toc_frame = undef; # toc frame file $path_to_working_dir = undef; # relative path leading to the working # directory from the document directory $docu_doc_file = undef; $docu_toc_file = undef; $docu_stoc_file = undef; $docu_foot_file = undef; $docu_about_file = undef; $docu_top_file = undef; $docu_frame_file = undef; $docu_toc_frame_file = undef; if (!$Texi2HTML::Config::USE_SETFILENAME) { init_with_file_name ($input_file_base); } # FIXME when to do that? ($Texi2HTML::THISDOC{'css_import_lines'}, $Texi2HTML::THISDOC{'css_lines'}) = collect_all_css_files(); %region_lines = ( 'titlepage' => [ ], 'documentdescription' => [ ], 'copying' => [ ], ); texinfo_initialization(0); print STDERR "# reading from $input_file_name\n" if $T2H_VERBOSE; @fhs = (); # hold the file handles to read $macros = undef; # macros. reference on a hash %info_enclose = (); # macros defined with definfoenclose @floats = (); # floats list %floats = (); # floats by style %nodes = (); # nodes hash. The key is the texi node name %cross_reference_nodes = (); # normalized node names arrays my ($texi_lines, $first_texi_lines, $lines_numbers) = pass_texi($input_file_name); if ($Texi2HTML::Config::USE_SETFILENAME and !defined($docu_name)) { init_with_file_name ($input_file_base); } Texi2HTML::Config::t2h_default_set_out_encoding(); dump_texi($texi_lines, 'texi', $lines_numbers) if ($T2H_DEBUG & $DEBUG_TEXI); if (defined($Texi2HTML::Config::MACRO_EXPAND)) { my @texi_lines = (@$first_texi_lines, @$texi_lines); dump_texi(\@texi_lines, '', undef, $Texi2HTML::Config::MACRO_EXPAND); } %content_element = ( 'contents' => { 'id' => $Texi2HTML::Config::misc_pages_targets{'Contents'}, 'target' => $Texi2HTML::Config::misc_pages_targets{'Contents'}, 'contents' => 1, 'texi' => '_contents' }, 'shortcontents' => { 'id' => $Texi2HTML::Config::misc_pages_targets{'Overview'}, 'target' => $Texi2HTML::Config::misc_pages_targets{'Overview'}, 'shortcontents' => 1, 'texi' => '_shortcontents' }, ); %sec2level = %reference_sec2level; $element_before_anything = { 'before_anything' => 1, 'place' => [], 'texi' => 'VIRTUAL ELEMENT BEFORE ANYTHING', }; $footnote_element = { 'id' => $Texi2HTML::Config::misc_pages_targets{'Footnotes'}, 'target' => $Texi2HTML::Config::misc_pages_targets{'Footnotes'}, 'file' => $docu_foot, 'footnote' => 1, 'place' => [], }; %region_initial_state = ( 'titlepage' => { }, 'documentdescription' => { }, 'copying' => { }, ); # to determine if a command has to be processed the following are interesting # (and can be faked): # 'region': the name of the special region we are processing # 'region_pass': the number of passes in that specific region (both outside # of the main document, and in the main document) # 'multiple_pass': the number of pass in the formatting of the region in the # main document # 'outside_document': set to 1 if outside of the main document formatting foreach my $key (keys(%region_initial_state)) { $region_initial_state{$key}->{'multiple_pass'} = -1; $region_initial_state{$key}->{'region_pass'} = 0; $region_initial_state{$key}->{'num_head'} = 0; $region_initial_state{$key}->{'foot_num'} = 0; $region_initial_state{$key}->{'relative_foot_num'} = 0; $region_initial_state{$key}->{'region'} = $key; } texinfo_initialization(1); $no_element_associated_place = []; $document_idx_num = 0; $document_sec_num = 0; $document_head_num = 0; $document_anchor_num = 0; $novalidate = $Texi2HTML::Config::NOVALIDATE; # @novalidate appeared @nodes_list = (); # nodes in document reading order # each member is a reference on a hash @sections_list = (); # sections in reading order # each member is a reference on a hash @all_elements = (); # sectionning elements (nodes and sections) # in reading order. Each member is a reference # on a hash which also appears in %nodes, # @sections_list @nodes_list, @elements_list @elements_list = (); # all the resulting elements in document order %sections = (); # sections hash. The key is the section number %headings = (); # headings hash. The key is the heading number $section_top = undef; # @top section $element_top = undef; # Top element $node_top = undef; # Top node $node_first = undef; # First node $element_index = undef; # element with first index $element_chapter_index = undef; # chapter with first index $element_first = undef; # first element $element_last = undef; # last element %special_commands = (); # hash for the commands specially handled # by the user @index_labels = (); # array corresponding with @?index commands # constructed during pass_texi, used to # put labels in pass_text $index_entries = undef; # original kdb styles used if @kbdinputstyle distinct $kept_kdb_style = $::style_map_ref->{'kbd'}; $kept_kdb_pre_style = $::style_map_pre_ref->{'kbd'}; my ($doc_lines, $doc_numbers) = pass_structure($texi_lines, $lines_numbers); if ($T2H_DEBUG & $DEBUG_TEXI) { dump_texi($doc_lines, 'first', $doc_numbers); if (defined($Texi2HTML::Config::MACRO_EXPAND and $Texi2HTML::Config::DUMP_TEXI)) { unshift (@$doc_lines, @$first_texi_lines); push (@$doc_lines, "\@bye\n"); dump_texi($doc_lines, '', undef, $Texi2HTML::Config::MACRO_EXPAND . ".first"); } } next if ($Texi2HTML::Config::DUMP_TEXI or defined($Texi2HTML::Config::MACRO_EXPAND)); foreach my $style (keys(%special_commands)) { $special_commands{$style}->{'max'} = $special_commands{$style}->{'count'}; } %files = (); # keys are files. This is used to avoid reusing an already # used file name %empty_indices = (); # value is true for an index name key if the index # is empty %printed_indices = (); # value is true for an index name not empty and # printed %indices = (); # hash of indices names containing #[ $pages, $entries ] (page indices and # raw index entries) prepare_indices(); rearrange_elements(); do_names(); #Texi2HTML::LaTeX2HTML::latex2html(); foreach my $handler(@Texi2HTML::Config::command_handler_process) { &$handler; } # maybe do that later to have more elements ready? &$Texi2HTML::Config::toc_body(\@elements_list); &$Texi2HTML::Config::css_lines($Texi2HTML::THISDOC{'css_import_lines'}, $Texi2HTML::THISDOC{'css_lines'}); $global_head_num = 0; # heading index. it is global for the main doc, # and taken from the state if in multiple_pass. $global_foot_num = 0; $global_relative_foot_num = 0; @foot_lines = (); # footnotes $copying_comment = ''; # comment constructed from text between # @copying and @end copying with licence %acronyms_like = (); # acronyms or similar commands associated texts # the key are the commands, the values are # hash references associating shorthands to # texts. @states_stack = (); pass_text($doc_lines, $doc_numbers); print STDERR "BUG: " . scalar(@index_labels) . " index entries pending\n" if (scalar(@index_labels)); foreach my $special (keys(%special_commands)) { my $count = $special_commands{$special}->{'count'}; if (($count != 0) and $T2H_VERBOSE) { echo_warn ("$count special \@$special were not processed.\n"); } } if ($Texi2HTML::Config::IDX_SUMMARY) { foreach my $entry (keys(%index_names)) { do_index_summary_file($entry, $docu_name) unless ($empty_indices{$entry}); } } do_node_files() if ($Texi2HTML::Config::NODE_FILES); #l2h_FinishFromHtml() if ($Texi2HTML::Config::L2H); #l2h_Finish() if($Texi2HTML::Config::L2H); #Texi2HTML::LaTeX2HTML::finish(); foreach my $handler(@Texi2HTML::Config::command_handler_finish) { &$handler; } &$Texi2HTML::Config::finish_out(); print STDERR "# File ($file_number) $input_file_name processed\n" if $T2H_VERBOSE; $file_number++; } print STDERR "# that's all folks\n" if $T2H_VERBOSE; exit(0); ############################################################################## # These next few lines are legal in both Perl and nroff. .00 ; # finish .ig 'di \" finish diversion--previous line must be blank .nr nl 0-1 \" fake up transition to first page again .nr % 0 \" start at page 1 '; __END__ ############# From here on it's a standard manual page ############ .so @mandir@/man1/texi2html.1 texi2html-1.82/parse_8bit_makeinfo_maps.pl0000755000175000017500000000335611264347127022537 0ustar flichtenheldflichtenheld#! /usr/bin/perl -w # Patrice Dumas pertusus at free.fr, 2008: # this file is in the public domain # the resulting code may be under the texinfo/makeinfo/lang.c license. # ./parse_8bit_makeinfo_maps.pl > eigth_bit_makeinfo_maps.pl use strict; my $lang_file = '../texinfo/makeinfo/lang.c'; open (LANGF, "$lang_file") or die "Cannot open $lang_file: $!\n"; my $in_map=0; my %unicode_translit = (); print "%makeinfo_eight_bit_map = (\n"; while () { if ($in_map) { if (/^\s*\{\s*NULL\s*,\s*0\s*,\s*0\s*\}/) { $in_map=0; print " },\n"; next; } elsif (/^\s*\{\s*\"(\w*)\"\s*,\s*0x([0-9abcdef]{2})\s*,\s*0x([0-9abcdef]{4})\s*(,\s*\"(\w*)\"\s*)?\}/i) { my $entity = $1; my $eight_bit = uc($2); my $unicode = uc($3); my $transliteration_str = 'UNDEF'; my $transliteration; if (defined($5)) { $transliteration_str = $transliteration = $5; if (exists($unicode_translit{$unicode}) and $unicode_translit{$unicode} ne $transliteration) { print STDERR "$in_map,$eight_bit,$unicode: $unicode_translit{$unicode} ne $transliteration\n"; } $unicode_translit{$unicode} = $transliteration; } print " '$unicode' => '$eight_bit',\n"; #print STDERR "$entity $eight_bit $unicode $transliteration_str\n"; } } elsif (/^\s*static\s+iso_map_type\s+(\w+?)_map/) { next if /\s*\{\s*NULL\s*,\s*0\s*,\s*0\s*\}/; $in_map = $1; #print STDERR "$in_map\n"; print " '$in_map' => {\n"; } } print ");\n\n"; print "%makeinfo_transliterate_map = (\n"; foreach my $unicode (keys(%unicode_translit)) { print " '$unicode' => '$unicode_translit{$unicode}',\n"; } print ");\n\n"; texi2html-1.82/config.guess0000755000175000017500000012626011264347127017566 0ustar flichtenheldflichtenheld#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, # Inc. timestamp='2006-07-02' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[45]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep __LP64__ >/dev/null then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) case ${UNAME_MACHINE} in pc98) echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; x86:Interix*:[3456]*) echo i586-pc-interix${UNAME_RELEASE} exit ;; EM64T:Interix*:[3456]*) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^LIBC/{ s: ::g p }'`" test x"${LIBC}" != x && { echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit } test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: texi2html-1.82/TODO0000644000175000017500000003322411264347115015730 0ustar flichtenheldflichtenheldThis file contains a list of things yet to be done (see also in doc/TODO): * Create detailed texinfo documentation (see in doc) * add sample init files for different layouts - use events (onmousover, etc) for anchors - use style-sheets for formatting of various elements (like @example, etc). - xhtml with in line style - Singular manual style - How complicated could it be to get a creation of SGML ? - to LaTeX - to RTF - to open document * document css classes, and have similar classes with makeinfo - makeinfo classes: ul menu, ul index-cp index-*, div node (navigation bar), - texi2html classes: table index-cp index-*, table menu, h3 node ul toc, - same classes: pre verbatim, pre example display..., table cartouche, small dots, small enddots, div contents shortcontents, div footnote, h? unnumbered chapter appendix..., h1 settitle (title before contents, if not set by titlefont), h1 titlefont (@titlefont), * Document Texi2HTML::THIS_ELEMENT $NEW_CROSSREF_STYLE, $EXTERNAL_CROSSREF_SPLIT, $INLINE_INSERTCOPYING $OVERVIEW_LINK_TO_TOC $Texi2HTML::THISDOC{'htmlxref'} $Texi2HTML::THISDOC{'current_lang'} $Texi2HTML::THISDOC{macro name} $Texi2HTML::THISDOC{'hyphenation'} $Texi2HTML::THISDOC{'do_about'} $Texi2HTML::THISDOC{'split_level'} $copying_comment, $titlepage better and $documentdescription $program_string $heading arguments $begin_paragraph_texi $tab_item_texi $begin_style_texi $begin_special_region $end_special_region $simple_command $thing_command Also element formatting documentation, especially print_foot_navigation is not up to date. new arguments and return args of index_summary_letter * document the 'math' in 'args', in style_map, and simple_*math*. It could also be more flexible and similar with other environments, that is not only add a fixed key, but duplicate all the keys and add one. Documentation should only done once the interface is stable. * document the new $image arguments/API * don't double in title when the @top and @settitle are the same * the following is erroneous, but maybe it could be better handled anyway -> error with @item on same line than @table @xref{node, @table @emph @item line text @end table } * test @printindex in diverse contexts and handle right things like @code{ @printindex cp } * maybe some @-commands appearing on lines should stop paragraphs, namely @page or @indent. That's not sure. More likely this should be up to the writer to add a line. There is a Config hash now for @style_map commands. formats automatically stop paragraphs. * honor stop_paragraph_command for misc_commands? * @macro definition in @ifset is parsed but ignored. So in the following, the @end ifset appearing in the macro is ignored, and the macro isn't defined. Don't know if it's right. @ifset a @macro bidule @end ifset @end macro @end ifset * in chm.init (Jose Fonseca) [WINDOWS] Default=,"ug.hhc","ug.hhk","ug.html","ug.html",,,,,0x22520,,0x384e,,,,,,,,0 The numbers are a bitmask of the enabled buttons. The ones here are IMO a good default. In the future you may also add that as an option, as the Docbook XSL stylesheets do (see in http://docbook.sourceforge.net/release/xsl/snapshot/doc/html/rn20.html all the CHM related parameters one can change). * many FIXME in the code * in index_split the section associated with indices is the numbered section not the associated node where the @cindex are. Good or bad? * maybe be quiet during special region expansion outside of document. It is not very clear that it is wrong, though. multiple_pass could be passed down to echo_warn/echo_error and no warning would be produced with multiple_pass > 1. Alternatively, line numbers could be passed down like what is done with inline_insertcopying * antispam @email <bug-gnulib@gnu.org> * menu_description is menucomment in xml. menuentry is the menunode+menutitle+menucomment menu_comment in makeinfo --xml treated as normal text. the documentation, however uses the same words than in texi2html. * Tests/formatting/code_not_closed.texi should trigger 2 errors, none are triggered currently. * a FIXME in Tests/formatting/detailmenus.texi with a warning missing for a menu entry for a spurious entry with no corresponding node entry. more precisely the node is not among the direct subsections. * roff is certainly not uptodate. At least the @quote* and @guillem* * the code of xml.c in makeinfo shows specific treatement of & in definition arguments. I don't know what it corresponds with. All the definition argument parsing stuff is certainly worth asking on the texinfo list. * something like @math{@minus{} {\frac{1}{2}}} leads to errors in makeinfo about misplaced { } because it seems that @minus turns on texinfo mode or the like, while @math{{\frac{1}{2}} @minus{}} is error free. * formatting/nodename_parentheses.texi gives wrong output. * in @example, makeinfo --xml @ followed by a space &space;@ followed by a tab &space;@ followed texi2html @ followed by a space &space; @ followed by a tab &space; @ followed * in xml @itemize @item i--temize @end itemize makeinfo: i--temize texi2html: i--temize * in xml @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize makeinfo: • a--n itemize line i--tem 1 i--tem 2 texi2html: • a–n itemize line i--tem 1 i--tem 2 * in xml @enumerate @item e--numerate @end enumerate makeinfo: e--numerate texi2html: e--numerate * add @detailmenu in coverage, and @group * in imbrications.texi there should be a warning for @defun aaaa @deffnx bbbb @end deffn @end defun Makeinfo gives: imbrications.texi:241: Must be in `@deffn' environment to use `@deffnx'. imbrications.texi:259: `@end' expected `defun', but saw `deffn'. * makeinfo doesn't warn for empty heading commands, like ** unnumberedsubsec without name (l. 284) * makeinfo warn when there is no @settitle nor @top where it finds its title in texi2tml there is no warning, and also the title is constructed differently. * makeinfo don't warn for empty deffn, but texi2dvi cannot process them * enable_encoding.init is certainly dependent on USE_UNICODE through the use of non 8 bit representation of characters. * makeinfo in title, for @code{something} leads to `something'. In texi2html all the style commands are removed without extra formatting. * test for @deffn with end of line protected in @footnote (to test end of line protection in keep_texi). * empty lines in @hyphenation are not valid for texi2dvi * manuals/mini_ker result is not valid, but it looks like a validate bug? In any case, it may make sense to have @tex not starting paragraph, like @html, at least when expanding it. * texinfo expands @-commands normally in @documentdescription, but keeps --, texi2html uses simple_format which removes most @commands but uses entities * clean formatting/def_cmds.texi to remove invalid texinfo and put it in an ifset. * if a 'term' triggers no_paragraph, the ouput may be more valid. But a center won't have any effect in it. * end of line after a @contents should certainly be kept in xml.init * texi2dvi doesn't accept @table in @format * warnings and errors are somewhat random at present. Also it would be nice to have the same error messages than makeinfo. * when there are nested complex_formats, a small format that doesn't have style, like smalldisplay in a format with style, like example, the smalldisplay will use the class of the above format, and lose the small font property. * macros/value_in_pass0_macros result is very different from texi2dvi and makeinfo. To be verified that cp in fn is style not in @code. Also certainly simpler and more focused tests to do for syn/syncode * decide @documentencoding @. And maybe change regexp. * html32 is not up to date: Error at line 2159, character 8: unknown entity "euro" Error at line 2161, character 7: unknown entity "le" Error at line 2162, character 7: unknown entity "ge" For headings. In normal it is strong. Error at line 2616, character 4: element "H1" not allowed here; check which elements this element may be contained within Error at line 2619, character 4: element "H1" not allowed here; check which elements this element may be contained within Error at line 2622, character 4: element "H2" not allowed here; check which elements this element may be contained within Error at line 2625, character 4: element "H3" not allowed here; check which elements this element may be contained within Error at line 2628, character 4: element "H4" not allowed here; check which elements this element may be contained within * verify that code_style is used for code_style style @-commands in remove_texi. * docbook: in function no style. replaceable is for @var or function argument. Only characters. Instead of synopsis may use specialized synopsis, funcsynopsis/funcprototype for deftype*, funcdef for defffn, ooclass for object oriented. also informalfigure in @float * to solve above issue, the definition arg formatted with simple_format should alo be passed down * in docbook, when there is only one section
    should be better than book. Maybe the best way to do that would be passing the information that there is only one section to the functions formatting the page header and page footer. * makeinfo has a lot of other short command line switches, but implement only those that are documented, in --help or info makeinfo. * -I can take paths (separated by : or ;) not only directories. * does documentlanguage cmd line apply to first or all files? ask on bug-texinfo. * now config variables are read-only after command line switches expansion. If defined, they set $Texi2HTML::THISDOC{'VAR'} and if not defined, $Texi2HTML::THISDOC{'VAR'} is autodetected. $Texi2HTML::THISDOC{'VAR'} is then used in the code. This means that, if a variable that was not autodetected becomes autodetected, the code will have to switch to using $Texi2HTML::THISDOC{'VAR'} instead of $VAR. This is very bad since it means API breaking. * makeinfo --no-header implies --no-split (and default for out file is stdout). * in @titlepage, @title, @authors and similar commands should be formatted when they happen and not at the beginning. @titlepage @titlefont{Software} @sp 1 @title for something @subtitle subtitle @author by Somebody and Someone @author and Other people * makeinfo.init not uptodate with makeinfo --html. Index entries link back now. And also look at floats? menu name is used instead of node in menu links url text. * change LINK_BUTTONS for makeinfo.init to have next, up... nodes * ignore spaces after @ command, before {, like texi2dvi does? * failures with split index between node and section in indices/ makeinfo_index_split first.html is missing makeinfo_nodes_before_top_and_sections needs to be checkedd (first should be in first.html?). * error message when xref is followed by something else than . is missing. * no line numbers when in footnotes. * ignore spaces at end of @item line for @(|v|f)table. Also maybe after @item, but to be careful with things prepended or commands used in for the whole line. * add --command command line that gives inserted lines. * @ogonek has 2 test files, and is in coverage. Maybe add it to encoding/* where other accents are used too. Or maybe tests should be more focused? * empty macro in macros/empty_macro.texi is replaced by a new line, even without arg, ie the form @foo Should the new line be stripped? makeinfo does the same, so things are likely to be right as is. * for makeinfo, the following are not the same, looks like -I is not taken into account with a leading ./: @include ./d2t_singular/surf_lib_noEx.tex @include d2t_singular/surf_lib_noEx.tex for texi2html they are the same. * makeinfo keeps @macro definitions in -E output. Maybe it should be done, too, for expansion in places that are only expanded by texi2dvi, namely in @*headings, it could be better to delay @macro expansion to allow for different expansions at different places in the document, something that cannot be done with texi2html -E. * add 0x7F as a comment character (ignore to eol). * add as a filter when things come from STDIN, and there is no file in argument. If there is no setfilename, file name is stdin.info. * @FORMAT like @tex, @html... should be kept with -E and certainly handled in formatting function. Cf test/macros/out/texi_cond for a wrong output. * texi2html doesn't understand `-o /dev/null'. It aborts with *** /dev/ not writable report from Werner LEMBERG. * texi2html's option -E suppresses creation of the default output file. Since texi2html shall replace makeinfo completely, it should rather produce the output file instead for compatibility. report from Werner LEMBERG. texi2html-1.82/MySimple.pm0000644000175000017500000001465711264347127017351 0ustar flichtenheldflichtenheldpackage Getopt::MySimple; # Name: # Getopt::MySimple. # # Documentation: # POD-style (incomplete) documentation is in file MySimple.pod # # Tabs: # 4 spaces || die. # # Author: # Ron Savage rpsavage@ozemail.com.au. # 1.00 19-Aug-97 Initial version. # 1.10 13-Oct-97 Add arrays of switches (eg '=s@'). # 1.20 3-Dec-97 Add 'Help' on a per-switch basis. # 1.30 11-Dec-97 Change 'Help' to 'verbose'. Make all hash keys lowercase. # 1.40 10-Nov-98 Change width of help report. Restructure tests. # 1-Jul-00 Modifications for Texi2html # -------------------------------------------------------------------------- # Locally modified by obachman (Display type instead of env, order by cmp) # $Id: MySimple.pm,v 1.6 2008/11/26 19:09:01 pertusus Exp $ # use strict; # no strict 'refs'; use vars qw(@EXPORT @EXPORT_OK @ISA); use vars qw($fieldWidth $opt $VERSION); use Exporter(); use Getopt::Long; @ISA = qw(Exporter); @EXPORT = qw(); @EXPORT_OK = qw($opt); # An alias for $self -> {'opt'}. # -------------------------------------------------------------------------- $fieldWidth = 20; $VERSION = '1.41'; # -------------------------------------------------------------------------- sub byOrder { my($self) = @_; return uc($a) cmp (uc($b)); } # -------------------------------------------------------------------------- sub dumpOptions { my($self) = @_; print 'Option', ' ' x ($fieldWidth - length('Option') ), "Value\n"; for (sort byOrder keys(%{$self -> {'opt'} }) ) { print "-$_", ' ' x ($fieldWidth - (1 + length) ), "${$self->{'opt'} }{$_}\n"; } print "\n"; } # End of dumpOptions. # -------------------------------------------------------------------------- # Return: # 0 -> Error. # 1 -> Ok. sub getOptions { push(@_, 0) if ($#_ == 2); # Default for $ignoreCase is 0. push(@_, 1) if ($#_ == 3); # Default for $helpThenExit is 1. my($self, $default, $helpText, $versionText, $helpThenExit, $versionThenExit, $ignoreCase) = @_; $helpThenExit = 1 unless (defined($helpThenExit)); $versionThenExit = 1 unless (defined($versionThenExit)); $ignoreCase = 0 unless (defined($ignoreCase)); $self -> {'default'} = $default; $self -> {'helpText'} = $helpText; $self -> {'versionText'} = $versionText; $Getopt::Long::ignorecase = $ignoreCase; unless (defined($self -> {'default'}{'help'})) { $self -> {'default'}{'help'} = { type => ':i', default => '', linkage => sub {$self->helpOptions($_[1]); sleep 5;exit (0) if $helpThenExit;}, verbose => "print help and exit" }; } unless (defined($self -> {'default'}{'version'})) { $self -> {'default'}{'version'} = { type => '', default => '', linkage => sub {print $self->{'versionText'}; exit (0) if $versionThenExit;}, verbose => "print version and exit" }; } for (keys(%{$self -> {'default'} }) ) { next unless (ref(${$self -> {'default'} }{$_}) eq 'HASH'); my $type = ${$self -> {'default'} }{$_}{'type'}; push(@{$self -> {'type'} }, "$_$type"); $self->{'opt'}->{$_} = ${$self -> {'default'} }{$_}{'linkage'} if ${$self -> {'default'} }{$_}{'linkage'}; } my($result) = &GetOptions($self -> {'opt'}, @{$self -> {'type'} }); return $result unless $result; for (keys(%{$self -> {'default'} }) ) { if (! defined(${$self -> {'opt'} }{$_})) #{ { ${$self -> {'opt'} }{$_} = ${$self -> {'default'} }{$_}{'default'}; } } $result; } # End of getOptions. # -------------------------------------------------------------------------- sub helpOptions { my($self) = shift; my($noHelp) = shift; $noHelp = 0 unless $noHelp; my($optwidth, $typewidth, $defaultwidth, $maxlinewidth, $valind, $valwidth) = (10, 5, 9, 78, 4, 11); print "$self->{'helpText'}" if ($self -> {'helpText'}); print ' Option', ' ' x ($optwidth - length('Option') -1 ), 'Type', ' ' x ($typewidth - length('Type') + 1), 'Default', ' ' x ($defaultwidth - length('Default') ), "Description\n"; for (sort byOrder keys(%{$self -> {'default'} }) ) { my($line, $help, $option, $val); $option = $_; next if ${$self->{'default'} }{$_}{'noHelp'} && ${$self->{'default'} }{$_}{'noHelp'} > $noHelp; #$line = " -$_" . ' ' x ($optwidth - (2 + length) ) . # "${$self->{'default'} }{$_}{'type'} ". # ' ' x ($typewidth - (1+length(${$self -> {'default'} }{$_}{'type'}) )); $line = " --$_" . "${$self->{'default'} }{$_}{'type'}". ' ' x ($typewidth - (1+length(${$self -> {'default'} }{$_}{'type'}) )); $val = ${$self->{'default'} }{$_}{'linkage'}; if ($val) { if ((ref($val) eq 'SCALAR') and (defined($$val))) { $val = $$val; } else { $val = ''; } } elsif (defined(${$self->{'default'} }{$_}{'default'})) { $val = ${$self->{'default'} }{$_}{'default'}; } else { $val = ''; } $line .= "$val "; $line .= ' ' x ($optwidth + $typewidth + $defaultwidth + 1 - length($line)); if (defined(${$self -> {'default'} }{$_}{'verbose'}) && ${$self -> {'default'} }{$_}{'verbose'} ne '') { $help = "${$self->{'default'} }{$_}{'verbose'}"; } else { $help = ' '; } if ((length("$line") + length($help)) < $maxlinewidth) { print $line , $help, "\n"; } else { print $line, "\n", ' ' x $valind, $help, "\n"; } for $val (sort byOrder keys(%{${$self->{'default'}}{$option}{'values'}})) { print ' ' x ($valind + 2); print $val, ' ', ' ' x ($valwidth - length($val) - 2); print ${$self->{'default'}}{$option}{'values'}{$val}, "\n"; } } print <| ! no argument: variable is set to 1 on -foo (or, to 0 on -nofoo) =s | :s mandatory (or, optional) string argument =i | :i mandatory (or, optional) integer argument EOT } # End of helpOptions. #------------------------------------------------------------------- sub new { my($class) = @_; my($self) = {}; $self -> {'default'} = {}; $self -> {'helpText'} = ''; $self -> {'opt'} = {}; $opt = $self -> {'opt'}; # An alias for $self -> {'opt'}. $self -> {'type'} = (); return bless $self, $class; } # End of new. # -------------------------------------------------------------------------- 1; # End MySimple.pm texi2html-1.82/manage_i18n.pl0000755000175000017500000003776211264347127017705 0ustar flichtenheldflichtenheld#! /usr/bin/perl -w #+############################################################################## # # manage_i18n.pl: manage translation files # # Copyright (C) 2003-2005 Patrice Dumas , # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 USA # #-############################################################################## # This requires perl version 5 or higher require 5.0; use strict; use File::Copy; #use Data::Dumper; use Data::Dumper; use Getopt::Long qw(GetOptions); my $USE_DATA_DUMPER = '1'; select(STDERR); $| = 1; select(STDOUT); $| = 1; my $help = 0; my $language; my $dir = 'i18n'; # name of the directory containing the per language files my $output; # file containing all the translations or output directory # = 'translations.pl'; # file containing all the translations my @known_languages = ('en', 'de', 'nl', 'es', 'no', 'pt', 'pt_BR', 'ja', 'fr'); # The supported languages my @searched_dirs = (); # dir searched for sources and language files #my $template = 'template'; my $template_lang = 'en'; my @sources = ('texi2html.pl', 'texi2html.init', 'T2h_i18n.pm', 'examples/roff.init', 'examples/noheaders.init'); GetOptions('Include=s' => \@searched_dirs, 'output=s' => \$output, 'directory=s' => \$dir, 'help+' => \$help); if ($help) { my $command_basename = $0; $command_basename =~ s%.*/%%; my $usage_text = <][-d ][-o ] template source_files... $command_basename [-I ][-d ][-o ] update [ language... ] $command_basename [-I ][-d ][-o ] merge Default languages are files in the i18n_dir without the following extensions: .bak,.orig,.old,.dpkg-old,.rpmnew,.rpmsave EOT print $usage_text; exit 0; } if (!@searched_dirs) { @searched_dirs = ('.'); } if (@ARGV < 1) { die "Need a command\n"; } my $command = shift @ARGV; my $output_dir = $dir; $output_dir = $output if (defined($output)); my $translations_file = 'translations.pl'; $translations_file = $output if (defined($output)); sub locate_file($$) { my $file = shift; my $directories = shift; $directories = \@searched_dirs if !defined($directories); if ($file =~ /^\//) { return $file if (-e $file and -r $file); } else { foreach my $dir (@$directories) { next unless (-d "$dir"); return "$dir/$file" if (-e "$dir/$file" and -r "$dir/$file"); } } return undef; } my $defaults_file = "$dir/$template_lang"; use vars qw( $LANGUAGES $T2H_OBSOLETE_STRINGS ); # Strings not in code my $template_strings = { 'January' => '', 'February' => '', 'March' => '', 'April' => '', 'May' => '', 'June' => '', 'July' => '', 'August' => '', 'September' => '', 'October' => '', 'November' => '', 'December' => '', 'T2H_today' => '%s, %d %d', }; # Handle per language files if ($USE_DATA_DUMPER) { $Data::Dumper::Sortkeys = 1; } sub update_language_file($$$$$); #die "No suitable $dir directory\n" unless (-d $dir and -r $dir); sub get_languages($$) { my $directories = shift; my $i18n_dir = shift; my @languages = (); foreach my $searched_dir (@$directories) { my $dir = "$searched_dir/$i18n_dir"; if (opendir DIR, $dir) { my @new_languages = grep { ! /^\./ && ! /\.(bak|orig|old|dpkg-old|rpmnew|rpmsave)$/ && ! /~$/ && ! /^#.*#$/ && -f $dir . '/' . $_ } readdir DIR; closedir DIR; foreach my $language (@new_languages) { push @languages, $language unless grep {$_ eq $language} @languages; } } } my @known = @known_languages; foreach my $lang (@languages) { if (grep {$_ eq $lang} @known) { @known = grep {$_ ne $lang} @known; } else { warn "Remark: you could update the known languages array for `$lang'\n"; } } warn "Remark: the following known languages have no corresponding file: @known\n" if (@known); return @languages; } sub merge_i18n_files($$$) { my $directories = shift; my $i18n_dir = shift; my $translation_file = shift; my @languages = get_languages($directories, $i18n_dir); die "No languages found\n" unless (@languages); if (-f $translation_file) { unless (File::Copy::copy ($translation_file, "$translation_file.old")) { die "Error copying $translation_file to $translation_file.old\n"; } } #foreach my $lang ($template, @known_languages) die "open $translation_file failed" unless (open (TRANSLATIONS, ">$translation_file")); foreach my $lang (@languages) { my $file = locate_file("$i18n_dir/$lang", $directories); next unless defined($file); unless (open (FILE, $file)) { warn "open $file failed: $!\n"; return; } while () { print TRANSLATIONS; } close FILE; } } sub update_language_hash($$$) { my $from_file = shift; my $lang = shift; my $reference = shift; if (defined($from_file) and -f $from_file) { eval { require($from_file) ;}; if ($@) { warn "require $from_file failed: $@\n"; return; } if (!defined($LANGUAGES->{$lang})) { warn "LANGUAGES->{$lang} not defined in $from_file\n"; return; } } if (!defined($T2H_OBSOLETE_STRINGS->{$lang})) { $T2H_OBSOLETE_STRINGS->{$lang} = {}; } if (!defined($LANGUAGES->{$lang})) { $LANGUAGES->{$lang} = {}; } foreach my $string (keys %{$LANGUAGES->{$lang}}) { $T2H_OBSOLETE_STRINGS->{$lang}->{$string} = $LANGUAGES->{$lang}->{$string} if (defined($LANGUAGES->{$lang}->{$string}) and ($LANGUAGES->{$lang}->{$string} ne '')); } $LANGUAGES->{$lang} = {}; foreach my $string (keys (%{$reference})) { if (exists($T2H_OBSOLETE_STRINGS->{$lang}->{$string}) and defined($T2H_OBSOLETE_STRINGS->{$lang}->{$string}) and ($T2H_OBSOLETE_STRINGS->{$lang}->{$string} ne '')) { $LANGUAGES->{$lang}->{$string} = $T2H_OBSOLETE_STRINGS->{$lang}->{$string}; delete $T2H_OBSOLETE_STRINGS->{$lang}->{$string}; } else { $LANGUAGES->{$lang}->{$string} = ''; } } return 1; } # Based on the template file, update the different language files sub update_i18n_files($$$$@) { my $directories = shift; my $i18n_dir = shift; my $out_i18n_dir = shift; my $template_language = shift; my @languages = grep {$template_language ne $_} get_languages($directories, $i18n_dir); if (@_) { @languages = (); foreach my $lang (@_) { unless (grep {$lang eq $_} @known_languages) { warn "Remark: you could update the known languages array for `$lang'\n"; } push (@languages, $lang) unless (grep {$lang eq $_} @languages); } } unless (@languages) { warn "No languages to update\n" ; return; } my $template_file = locate_file("$i18n_dir/$template_language", $directories); die "No $i18n_dir/$template_language found\n" unless (defined($template_file)); eval { require($template_file) ;}; if ($@) { die "require $template_file failed: $@\n"; } die "LANGUAGE->{'$template_language'} undef after require $template_file\n" unless (defined($LANGUAGES) and defined($LANGUAGES->{$template_language})); foreach my $string (keys(%$template_strings)) { die "template string $string undef" unless (defined($LANGUAGES->{$template_language}->{$string})); } unless (-d $out_i18n_dir) { if (!mkdir($out_i18n_dir, oct(755))) { die "cannot mkdir $out_i18n_dir: $!\n"; } } foreach my $lang (@languages) { update_language_file($directories, $i18n_dir, $out_i18n_dir, $template_language, $lang); } return 1; } sub copy_or_touch($$) { my $from_file = shift; my $to_file = shift; my $atime = time; my $mtime = $atime; if ($to_file eq $from_file) { utime $atime, $mtime, $from_file; return; } elsif (-f $to_file) { my $identical_files = 1; if (open(FROMFILE, $from_file)) { if (open(TOFILE, $to_file)) { my $to_file_lines = ''; my $from_file_lines = ''; while () { $from_file_lines .= $_; } while () { $to_file_lines .= $_; } if ($from_file_lines eq $to_file_lines) { utime $atime, $mtime, $from_file; return; } } } else { warn "Error opening $from_file\n"; utime $atime, $mtime, $to_file; } } unless (File::Copy::copy($from_file, $to_file)) { warn "Error copying $from_file to $to_file\n"; } } sub update_language_file($$$$$) { my $directories = shift; my $i18n_dir = shift; my $out_i18n_dir = shift; my $template_language = shift; my $lang = shift; my $from_file = locate_file("$i18n_dir/$lang", $directories); my $to_file = "$out_i18n_dir/$lang"; return unless (defined($from_file)); return unless (update_language_hash($from_file, $lang, $LANGUAGES->{$template_language})); if (-f $to_file) { unless (File::Copy::copy($to_file, "$to_file.old")) { warn "Error copying $to_file to $to_file.old\n"; return; } } if (!$USE_DATA_DUMPER) { copy_or_touch($from_file, $to_file); return; } unless (open(FILE, ">$to_file")) { warn "open $to_file failed: $!\n"; return; } print FILE "" . Data::Dumper->Dump([$LANGUAGES->{$lang}], [ "LANGUAGES->{'$lang'}" ]); print FILE "\n"; print FILE Data::Dumper->Dump([$T2H_OBSOLETE_STRINGS->{$lang}], [ "T2H_OBSOLETE_STRINGS->{'$lang'}"]); print FILE "\n"; print FILE "\n"; close FILE; } sub update_template($$$$@) { my $directories = shift; my $i18n_dir = shift; my $template_language = shift; my $out_dir = shift; my $source_strings = {}; unless (@_) { die "No source files\n"; } foreach my $source (@_) { my $source_file = locate_file($source, $directories); unless (defined($source_file)) { warn "$source_file not found\n"; next; } unless (open (FILE, "$source_file")) { warn "open $source_file failed: $!\n"; next; } my $line_nr = 0; while () { $line_nr++; my $string; next if /^\s*#/; while ($_) { if (defined($string)) { if (s/^([^\\']*)(\\|')//) { $string .= $1 if (defined($1)); if ($2 eq "'") { $source_strings->{$string} = '' ; $string = undef; } else { if (s/^(.)//) { #$string .= '\\' . $1; $string .= $1; } else { warn "\\ at end of line, file $source_file, line nr $line_nr\n"; $source_strings->{$string} = '' ; $string = undef; } } } else { warn "string not closed file $source_file, line nr $line_nr\n"; $source_strings->{$string} = '' ; $string = undef; } } elsif (s/^.*?&\$I\s*\('//) { $string = ''; } else { last; } } } close FILE; } foreach my $string (keys(%$template_strings)) { $source_strings->{$string} = $template_strings->{$string}; } my $template_file = locate_file("$i18n_dir/$template_language",$directories); die unless (update_language_hash($template_file, $template_language, $source_strings)); foreach my $string (keys(%$template_strings)) { # use values in template_srings if it exists my $existing_string = $LANGUAGES->{$template_language}->{$string}; $LANGUAGES->{$template_language}->{$string} = $template_strings->{$string} if ((!defined($existing_string)) or ($existing_string eq '')); } unless (-d $out_dir) { if (!mkdir($out_dir, oct(755))) { die "cannot mkdir $out_dir: $!\n"; } } my $out_template_file = "$out_dir/$template_language"; if (!$USE_DATA_DUMPER) { return if (!defined($template_file)); copy_or_touch($template_file, $out_template_file); return; } unless (open(TEMPLATE, ">$out_template_file")) { die "open $out_template_file failed: $!\n"; } print TEMPLATE "" . Data::Dumper->Dump([$LANGUAGES->{$template_language}], [ "LANGUAGES->{'$template_language'}" ]); print TEMPLATE "\n"; print TEMPLATE Data::Dumper->Dump([$T2H_OBSOLETE_STRINGS->{$template_language}], [ "T2H_OBSOLETE_STRINGS->{'$template_language'}"]); print TEMPLATE "\n"; print TEMPLATE "\n"; close TEMPLATE; } if ($command eq 'update') { update_i18n_files(\@searched_dirs, $dir, $output_dir, $template_lang, @ARGV); } elsif ($command eq 'merge') { merge_i18n_files(\@searched_dirs, $dir, $translations_file); } elsif ($command eq 'template') { my @source_files = @ARGV; unless (@source_files) { @source_files = @sources; } update_template(\@searched_dirs, $dir, $template_lang, $output_dir, @source_files); } #elsif ($command eq 'all') #{ # my @source_files = @ARGV; # unless (@source_files) # { # @source_files = @sources; # } # update_template(\@searched_dirs, $dir, $output_dir, $template_lang, # @source_files); # update_i18n_files(\@searched_dirs, $dir, $dir, # $template_lang, "$output_dir/$template_lang"); # merge_i18n_files(\@searched_dirs, $dir, $translations_file); #} else { warn "Unknown i18n command: $command\n"; } exit 0; 1; texi2html-1.82/NEWS0000644000175000017500000005713311264347115015744 0ustar flichtenheldflichtenheldThis file records noteworthy changes. 1.82 (2009-01-05) * NEW FEATURES ------------ * Add new hooks for user functions, for simple @-commands, and at the start and end of special regions. * BUG FIXES --------- * Tests are now more cross-platform and more tolerant of missing optional dependencies. * Don't use unidecode on unicode characters that are known not to have a good transliteration. This corresponds with characters with an @-command that don't have a transliteration, like @exclamdown... * Misc minor bug fixes. 1.80 (2009-01-01) * NEW FEATURES ------------ * handle @alias, @quote*, @guillem*, @textdegree, @allowcodebreaks, @fonttextsize, @hyphenation, @click, @clickstyle, @click, @arrow, @clicksequence, @geq, @leq, @*headingmarks, @*footingmarks, @smallquotation, @ogonek. Handle @columnfractions and row prototypes in @multitable better. * @documentlanguage is used to set the language each time it is seen (except if the language was set on the command line). * new option --css-ref, generate reference to a CSS URL. * new option --transliterate-file-names, produce file names in ASCII transliteration (set in the default case). * use accesskey and rel attributes, use link element if set in the init file. * use node id as targets for sections. * COMPATIBILITY ------------- * the API for the formatting of menus completly changed. $simple_menu_link is removed, everything should be done in $menu_link. * change handling of @detailmenu and menu comments, with (among other changes) the menu function reference replaced by the menu_command function reference also handling @detailmenu. * tex4ht.init now may use a different external program for @tex and for @math, and therefore the configuration variables were doubled and their name changed. * change in the interface, a new function reference print_element_header has been added, that should print the heading navigation of an element. Previously it was done in print_section. * change in the normal_text function reference API, now there is an input variable true if in simple text. * change in the menu_entry and simple_menu_entry function reference API, the name is always assed, and a new argument tells if there was an explicit name. * change in unknown function reference API, now there is a pass argument to be able to handle unknown macros in other passes than the last. Report from Reinhold Kainhofer. * in table_item the text is not formatted with the format command, the text_formatted argument is. * definition index entries are now formatted with $definition_index_entry, not with $definition_category anymore. * $Texi2HTML::THISDOC{copying} is now $Texi2HTML::THISDOC{copying_comment}. * TOC_LIST_ATTRIBUTE is now called NO_BULLET_LIST_ATTRIBUTE. * TOC_LIST_STYLE is now called NO_BULLET_LIST_STYLE. * changes in command line switches to synchronize with makeinfo: --number becomes --number-sections --separated-footnotes becomes --footnote-style --sec-nav becomes --header --Verbose becomes --verbose --lang becomes --document-language * everything before @setfilename is not outputted, like makeinfo. The previous behaviour can be restored with $IGNORE_BEFORE_SETFILENAME = 0; * Now there is an argtype possibility for definition specification and the arg meaning changed. The whole definition parsing is now more like makeinfo. * internal_ref and external_ref don't change inforef to xref anymore. * change in the heading API. THIS_HEADER is not used anymore. New function reference, element_heading to format a node or a section heading, including navigation and label. Accordingly, print_Top and one_section don't print the element header anymore. Also it is reported if the element is a new element, is the main element and more arguments, and top element heading is always done in heading. * print_element_header and print_navigation now return their result. * new argument for print_misc and print_misc_header, the misc page name. * printindex is called if it appears, even if the index is not defined or there are no index entries. * image API completly changed. The current behaviour is not stable, so is not documented. * new argument (@@-command name) for quotation and quotation_prepend_text. * image file paths are not completed anymore in the default case. The previous behaviour can be restored with $COMPLETE_IMAGE_PATHS set to true. * there is a new 'style' key in $complex_format_map, to be able to differentiate complex formats inheriting fonts and code_style (like @format, @display). * $EXTENSION should be undef if one doesn't want an extension to be added. * THISDOC{'title'} and similar are now for @title since only one @title should appear in the document. @settitle is tried first to set fulltitle. * Configuration variables are not modified anymore, instead the variable value is put in $Texi2HTML::THISDOC{'VAR'}. This is the case for DO_CONTENTS, DO_SCONTENTS, CSS_LINES, BODYTEXT, DOCUMENT_DESCRIPTION, DOCUMENT_ENCODING, IN_ENCODING, ENCODING_NAME, OUT_ENCODING. For example, if $CSS_LINES is defined, the value is put in $Texi2HTML::THISDOC{'CSS_LINES'} which is used for formatting, and if $CSS_LINES is not defined, $Texi2HTML::THISDOC{'CSS_LINES'} is autodetected. * When there is no section and $USE_NODES is not set don't split by node. This behaviour and the previous aren't documented, so it could change in the future. * BUG FIXES --------- * --no-monolithic is reenabled. * @, followed by an argument without brace is now handled. Report from Jorge Barros de Abreu. * @, is kept with --macro-expand. * @math is more compatible with makeinfo/texi2dvi when no external program is used. Using tex4ht for html generation should also lead to a correct result. * Handle right @end block commands followed by something else than a spacing character. * Remove trailing end of line in @html block. * @itemize should produce bullets by default. Report from Reinhold Kainhofer. * handle frame files like other files. Report from Reinhold Kainhofer. 1.78 (2007-06-05) * NEW FEATURES ------------ * Transliterate accented characters in file names. Use Text::Unidecode if detected. * Handle @frenchspacing, @tie, @indent, @setcontentsaftertitlepage, @setshortcontentsaftertitlepage and the obsolete @allow-recursion and @quote-arg. * With book style the Table of Contents is put where it is set. * Use more numeric entities, especially for accented letters. * The `examples' directory now contains an init file for Mediawiki output. Mediawiki is the GPL'd wiki used by Wikipedia. * new init file tex4ht.init. With this init file, httex or htlatex from tex4ht is used to format @tex and @math. * Init files now have a chance to override all file names, rather than just page names. * Put the images under a double licence by adding back their original GPL licence. * If SIMPLE_MENU is true the menu is simply enclosed in a preformatted environment. * The user can bypass the texi2html functions and provide his own function to do things similar that what is done for interfacing with LaTeX2HTML or tex4ht. * LaTeX2HTML stuff is moved out of texi2html.pl, to T2h_l2h.pm. * Add $USER and $DATE variables to override the defaults detected for the footer. * COMPATIBILITY ------------- * $TOP_FILE and $TOC_FILE are only set if set by the user. The elements file names are in the hash reference $Texi2HTML::THISDOC{'filename'} for use in init files. * The API for image, normal_text, paragraph and node_file_name has changed. * The $ENCODING variable is deprecated, replaced by $ENCODING_NAME and $OUT_ENCODING. * utf8 is used as default out file encoding. This should allow for utf8 translations for languages which cannot use @-commands for non ascii characters. * Use entities for ``, '', ---, -- and quotes used for some formatting @-commands if $USE_ISO is set. * don't set unset MENU-ENTRY-NAME if it is similar with the NODE-NAME, it is useless as it is a construct that shouldn't happen. * avoid menu entry and description redundancy in the formatting function and not in the main program. * accept - in @-command names (compatibility with makeinfo) * in user-defined macro arguments a comma in brace is escaped (compatibility with makeinfo from texinfo 4.8.90) * don't add the section title to the html title when the document isn't split * BUG FIXES --------- * When the file extension is set to the empty string, a trailing `.' will not be automatically added to file names. * The texi2html script is now created by make and not configure. * It is possible to build the translation files from outside of the build directory. * When configure detects that no Data::Dumper is present, the build scripts will simply copy the files instead of breaking. * remove handling of quotation second arg, quotation has only one arg. * handle nested ifset/ifclear. * Improved handling of @sc and @centerchap. * More flexible normal_text. * style_stack really contains the formatting @-commands. * caching of html generated by latex2html reenabled. * when not split and no section navigation is output, the about page and navigation direction are not output for all the elements. * FOR DEVELOPERS -------------- * Standardized on Automake 1.10.0 1.76 (February 3 2005) * BUG FIXES --------- * Perl no longer needs to be installed at build time, but when it is not, the path to `perl' that will be used at run time must be passed to the `configure' script. 1.74 (January 31 2005) * COMPATIBILITY ------------- * The argument on def like commands line (@deffn and friends) may be bracketed, therefore there is no difference between this element and others. There is no need of items with { in front in the %def_map anymore. * NEW FEATURES ------------ * More @-commands are available to the user, that were ignored before. Most of these @-commands are those related with structure or printed output. * BUG FIXES --------- * many deffn and friends line parsing bugs fixed. 1.72 (December 29 2004) * NEW FEATURES ------------ * Handle texinfo 4.7 constructs: @caption, @shortcaption, @ordf, @ordm, @registeredsymbol, @deftypecv, @LaTeX, @indicateurl, @docbook, @ifdocbook, @ifnotdocbook, @comma, @headitem, @quotation second arg, @acronym second arg. @url is now a synonym for @uref. @ at the end of a @def* line continues the line. Handle texinfo 4.8 constructs: @abbr, @slanted, @euro and @sansserif. * Cross refs are done according to the specification presented in the texinfo manual in the node HTML Xref. * BUG FIXES --------- * Re enable compatibility with perl older that 5.6. 1.70 (March 24 2004) * BUG FIXES --------- * use i18n files even when translations.pl is not included. Include translations.pl. * COMPATIBILITY ------------- * install html manual in $datadir/texinfo/html. * NEW FEATURES ------------ * Add a spec file, usefull to build a rpm. * FOR DEVELOPERS -------------- * Standardized on Autoconf 2.59 & Automake 1.8.3 1.68 (March 20 2004) * COMPATIBILITY ------------- * When the manual is split the default is to put resulting files in a directory with name the manual file basename (previously they were left in the current directory). To avoid that, call texi2html with '-output .'. * The main configuration files are now ./Config, ~/.texi2html/Config, $sysconfdir/texi2html/Config and last $datadir/texi2html/Config. They are sourced in that order. In the future `/etc/texi2htmlrc' and `~/.texi2htmlrc' will no longer be sourced and any existing site or user configuration should be moved to the new locations if you wish it to be used by newer versions of Texi2HTML. * Translation files are now stored in $datadir/texi2html/i18n/*, $sysconfdir/texi2html/i18n/*, ~/.texi2html/i18n/*, and sourced in that order. The translated strings are now associated with the english strings. Please see the documentation for the format of the new translation files. * First index page is the first page with a non empty index (with @printindex). * The glossary and bibliography terms aren't searched anymore. You should use @macro to simulate these features (look at Tests/macros/glossary.texi for an example). * We've standardized on GNU-style `--' prefixed long options, rather than the old single-dash prefixed long options in the help, but the single-dash style is still accepted on the command line for the time being. We also changed `_' to `-' in option names. * @setref handling is removed as the right corresponding @-command is @anchor. * No more global variables outside of namespaces. Global variables are now in the Texi2HTML namespace. leading T2H_ is stripped from variable, hashes and array names. You should change your variable names for the new release. As the global variables (%THISDOC, $THIS_SECTION...) are in the Texi2HTML namespace you should use, for example, $Texi2HTML::THISDOC{'fulltitle'} now. functions from the main program should now be qualified in the main namespace. t2h_ is stripped from the function names too. t2h_anchor is now a function reference in init file, and thus should be called like &$anchor(...). toc file and main file are arguments for print_frame, overview lines are arguments for print_toc_frame (instead of global variables). * $THISPROG, $T2H_HOMEPAGE, $T2H_AUTHORS, $T2H_TODAY, $T2H_USER are now values associated with the following keys in %Texi2HTML::THISDOC: `program', `program_homepage', `today', `user'. * Changes in the function reference used for the page layout: print_section don't do the end of page or section anymore (except when split at node), end_section does the end of a section, and print_*_footer does the end of page. the print_*_header, print_*_footer... functions take a ref on the buttons array as argument, instead of using the $T2H_BUTTONS global variable. Have a look at the texi2html.init file to update your configuration files. * T2H_InitGlobals is not used anymore. Use the function reference init_out to define $BODYTEXT dynamically and %Texi2HTML::THISDOC values in print_page_foot and about_body to recreate the address instead of the $T2H_ADDRESS. You can have a look at program_string in texi2html.init which recreates the address. $T2H_ADDRESS isn't used anymore. * variables for latex2html are not in texi2html init file anymore but in l2h.init. * don't expand @ifinfo regions by default. * option --output obsoletes -out_file and -subdir. It is the same than --out_file when output is not split, and the same than --subdir when it is split. * If not split, the resulting file has a leading directory, and the directory doesn't exist, it is created. * If a directory creation fails the program aborts. * Don't use T2H_CENTER_IMAGE, @center should be used. * the init_out function redefines dynamically %NAVIGATION_TEXT, %BUTTONS_GOTO and $BODYTEXT. You should redefine the hash values in that function. If you want to reuse the values of the default values set by init_out, you could do something like: my $default_init_out = $init_out; $init_out = \&makeinfo_like_init_out; sub makeinfo_like_init_out() { my $encoding = &$default_init_out(); $NAVIGATION_TEXT{'Following'} = ' > '; return $encoding; } * NEW FEATURES ------------ * Many changes towards output of stricter HTML. * initialization files for html 3.2, xhtml, html 4.0 with inline style, no header, utf8 characters outputted, makeinfo style, book style, conversion to chm files and conversion to roff. Initialization files are searched in ./, ~/.texi2html, $sysconfdir/texi2html and last $datadir/texi2html. The file names are html32.init, xhtml.init, inlinestyle.init, noheaders.init, utf8.init, makeinfo.init, book.init, chm.init and roff.init. * The test suite is much more comprehensive and uses validate and tidy to assess the correctness of the HTML. * Handling of @html, @verbatim, @verb, @sp, @=, @copying, @insertcopying, @cartouche, @titlefont, @dircategory, @direntry, @shorttitlepage, @\, @afourlatex, @afourwide, @firstparagraphindent, @exampleindent, @novalidate, @definfoenclose, @kbdinputstyle, @centerchap, @documentdescription, @documentencoding, @contents, @shortcontents, @verbatiminclude. * With --no-validate node cross-reference validation is suppressed (like @novalidate). * --expand may be specified more than once such that more than one additional region could be expanded. --noexpand does the reverse. --iftex, --ifinfo... and --no-ifinfo... can be used instead. * add http-equiv="Content-Type" tag for the charset declaration. * HTML formatting is isolated in customizable functions located in the initialization files. * menu comments are in a preformatted context. * Any combination of caps for `top' leads to the top node. * @ref{(perl)Top} leads to a ref to the info manual. * References to external manual in @ref and menus are links to the html pages (with the same convention than makeinfo --html use). --html-xref-prefix is the base dir for external manual references. * With --node-files do a file per node which can be used as a target for cross references from other manuals (including manuals generated with makeinfo --html). * With --use-nodes nodes are sectionning commands whe they are not associated with a structuring command. * With --toc-links create links from headings to toc entries. * distinct directions (next, prev...) for nodes and sections, more directions. * split at chapter, section or for every node. * new possibilities for buttons. If this is a ref to a scalar, the text appears in navigation. If it is an array, the first element is a direction used for the href, the second element is a scalar ref for the text. * With --noseparated-footnotes the footnotes are in the same page than the text. * %NO_TEXI hash similar with %HREF but without texinfo commands, %THISDOC{'title_no_texi'} * "-U value" does the same than "@clear value". * -P option prepends directory for include files before the document directory. * -macro-expand generates a file with expanded macros and @include. * pass $L2H_HTML_VERSION for the html version to latex2html. * support for css. The --css-include option does the same than in makeinfo (parse the file, and echo the @import part before the texi2html css rules, the rules part after the texi2html css rules). The texi2html css commands may be customized too. * Text before the first @node or sectionning command is part of the first section unless -ignore-preamble-text is set. * if `-' is given to the -output option, output on STDOUT. * Add images from the Singular project. * All the strings appearing in the HTML are internationalized. * centering and flushing is really handled. * Format titlepage (even though the formatted text isn't used by default). * Handle all the encodings perl knows about. * BUG FIXES --------- * @multitable size determination, out of bounds columns ignored. * In @table and @itemize, @item is replaced by the @-command argument. * nested @-commands are better handled. * in index keys @-commands are replaced by the right symbols. * files are omitted in hrefs when they points to the same file. * $value{_title}... are expanded during HTML generation. * @H{a} leads to a'' and not á * cedilla are accepted in node names. * Any characters are accepted in menu comments. * frame target is the top file, and not the toc file. * rewriting of the @macro code completely. This likely fixed some bugs but this hasn't been verified by running the new, more complex test cases against the old code. * rewriting of the document structure resolution. unnumbered regions are at the right level and splitted indices don't break the document structure anymore. index entries and footnotes are more precisely located. * @-commands ignored are ignored with the line, the arg or following spaces like makeinfo does. * FOR DEVELOPERS -------------- * Standardized on Autoconf 2.59 & Automake 1.8.2 * The --enable-maintainer-mode option is now required by configure to enable what is considered the maintainer-specific portions of Makefiles. This includes the portions which automatically rebuild the configure and build files (configure, aclocal, Makefile.in, etc) when configure.in or other dependencies are changed. * The config is in the Texi2HTML::Config namespace. The latex2html related functions are in the Texi2HTML::LaTeX2HTML namespace. The internationalization functions are in the Texi2HTML::I18n namespace in T2h_i18n.pm. 1.66 (June 8 2002) * Many bug fixes. 1.65 (August 26 2001) * Many bug fixes. * The operation of the previously broken << (FastBack) and >> (FastForward) buttons has changed slightly. FastBack now returns to the beginning of the current chapter and FastForward now jumps to the beginning of the next chapter. 1.64 (July 3 2000) * Incorporated first version of Texi2html Texinfo manual, authored by Karl Heinz Marbaise * New handling of command line options: - can be abbreviated to shortest unique prefix -help now works and is up-to-date 1.63 (June 23 2000) * New customization variable: $T2H_HREF_DIR_INSTEAD_FILE: if set (e.g., to index.html) replace hrefs to this file (i.e., to index.html) by ./ * New command-line option: -toc_file FILE for those who want the TOC to be in FILE * bug fixes related to macro invocation 1.62 (12 April 2000) * New customization variables: $T2H_SPLIT_INDEX [default: = 100] index pages are split at next letter, if more than that many entries $T2H_NODE_NAME_IN_MENU [default = 0] for enforcing node names in meny entries $T2H_AVOID_MENU_REDUNDANCY [default = 1] to avoid display of duplicate meny entry information $T2H_INDEX_CHAPTER [default = ''] if set, use chapter of this name for 'Index' Button in navigation bars, else use first chapter whose name matches "index" (case insensitive). $T2H_TOP_HEADING [ default = ''] if non-empty, and no heading is in Top node, then use this as heading for top node/section; otherwise, use @settitle, @shorttitle. * index generation: observes typesetting in fixed-width font, @ftable, @vtable implemented * Peter Moulder & Teun Burgers: Misc documentation and distribution changes * numerous small bugs fixed (handling of menu entries, paragraphs in lists/tables, etc). 1.61 (31 March 2000) * By default, $T2H_TOP_FILE is not set, and so $docu_name.html is used. * Added T2H_print_chapter_header, T2H_print_chapter_footer for more fine-grained control of T2H_SPLIT eq 'chapter', added option -section_navigation, $T2H_SECTION_NAVIGATION to supress output of navigation panels per section * naming scheme and calling convention of customizable subs changed: prefix T2H_, call &$T2H_, assignment $T2H_ = \&T2H_DEFAULT_ * mailinglist created: texi2html@mathematik.uni-kl.de * conversion to standard gnu package with Makefile.am, README, AUTHORS, etc. (Peter Moulder ) * Initialization as suggested by Peter Moulder: 1. /usr/local/etc/texi2htmlrc (or whatever given by --sysconfdir to configure) 2. $HOME/.texi2htmlrc 3. command-line options, including -init_file where later options override previous ones. * incoporated patches from Peter Moulder (backward-compatible command-line options, separate man-page, etc). * Automatic node pointer creation added * @enddots, @exclamdown, @pounds, and relatives added. Major Changes from 1.58 to 1.60 * primitve foreign language support * support of all "Umlaute" * anchors, macros * latex2html incooperation * customizable page layout (texi2html.init) * index as table with corresponding sections texi2html-1.82/manage_i18n.pl.in0000644000175000017500000004000011264347127020262 0ustar flichtenheldflichtenheld#! @PERL@ -w #+############################################################################## # # manage_i18n.pl: manage translation files # # Copyright (C) 2003-2005 Patrice Dumas , # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 USA # #-############################################################################## # This requires perl version 5 or higher require 5.0; use strict; use File::Copy; #use Data::Dumper; @REQUIRE_DATA_DUMPER@; use Getopt::Long qw(GetOptions); my $USE_DATA_DUMPER = '@USE_DATA_DUMPER@'; select(STDERR); $| = 1; select(STDOUT); $| = 1; my $help = 0; my $language; my $dir = 'i18n'; # name of the directory containing the per language files my $output; # file containing all the translations or output directory # = 'translations.pl'; # file containing all the translations my @known_languages = ('en', 'de', 'nl', 'es', 'no', 'pt', 'pt_BR', 'ja', 'fr'); # The supported languages my @searched_dirs = (); # dir searched for sources and language files #my $template = 'template'; my $template_lang = 'en'; my @sources = ('texi2html.pl', 'texi2html.init', 'T2h_i18n.pm', 'examples/roff.init', 'examples/noheaders.init'); GetOptions('Include=s' => \@searched_dirs, 'output=s' => \$output, 'directory=s' => \$dir, 'help+' => \$help); if ($help) { my $command_basename = $0; $command_basename =~ s%.*/%%; my $usage_text = <][-d ][-o ] template source_files... $command_basename [-I ][-d ][-o ] update [ language... ] $command_basename [-I ][-d ][-o ] merge Default languages are files in the i18n_dir without the following extensions: .bak,.orig,.old,.dpkg-old,.rpmnew,.rpmsave EOT print $usage_text; exit 0; } if (!@searched_dirs) { @searched_dirs = ('.'); } if (@ARGV < 1) { die "Need a command\n"; } my $command = shift @ARGV; my $output_dir = $dir; $output_dir = $output if (defined($output)); my $translations_file = 'translations.pl'; $translations_file = $output if (defined($output)); sub locate_file($$) { my $file = shift; my $directories = shift; $directories = \@searched_dirs if !defined($directories); if ($file =~ /^\//) { return $file if (-e $file and -r $file); } else { foreach my $dir (@$directories) { next unless (-d "$dir"); return "$dir/$file" if (-e "$dir/$file" and -r "$dir/$file"); } } return undef; } my $defaults_file = "$dir/$template_lang"; use vars qw( $LANGUAGES $T2H_OBSOLETE_STRINGS ); # Strings not in code my $template_strings = { 'January' => '', 'February' => '', 'March' => '', 'April' => '', 'May' => '', 'June' => '', 'July' => '', 'August' => '', 'September' => '', 'October' => '', 'November' => '', 'December' => '', 'T2H_today' => '%s, %d %d', }; # Handle per language files if ($USE_DATA_DUMPER) { $Data::Dumper::Sortkeys = 1; } sub update_language_file($$$$$); #die "No suitable $dir directory\n" unless (-d $dir and -r $dir); sub get_languages($$) { my $directories = shift; my $i18n_dir = shift; my @languages = (); foreach my $searched_dir (@$directories) { my $dir = "$searched_dir/$i18n_dir"; if (opendir DIR, $dir) { my @new_languages = grep { ! /^\./ && ! /\.(bak|orig|old|dpkg-old|rpmnew|rpmsave)$/ && ! /~$/ && ! /^#.*#$/ && -f $dir . '/' . $_ } readdir DIR; closedir DIR; foreach my $language (@new_languages) { push @languages, $language unless grep {$_ eq $language} @languages; } } } my @known = @known_languages; foreach my $lang (@languages) { if (grep {$_ eq $lang} @known) { @known = grep {$_ ne $lang} @known; } else { warn "Remark: you could update the known languages array for `$lang'\n"; } } warn "Remark: the following known languages have no corresponding file: @known\n" if (@known); return @languages; } sub merge_i18n_files($$$) { my $directories = shift; my $i18n_dir = shift; my $translation_file = shift; my @languages = get_languages($directories, $i18n_dir); die "No languages found\n" unless (@languages); if (-f $translation_file) { unless (File::Copy::copy ($translation_file, "$translation_file.old")) { die "Error copying $translation_file to $translation_file.old\n"; } } #foreach my $lang ($template, @known_languages) die "open $translation_file failed" unless (open (TRANSLATIONS, ">$translation_file")); foreach my $lang (@languages) { my $file = locate_file("$i18n_dir/$lang", $directories); next unless defined($file); unless (open (FILE, $file)) { warn "open $file failed: $!\n"; return; } while () { print TRANSLATIONS; } close FILE; } } sub update_language_hash($$$) { my $from_file = shift; my $lang = shift; my $reference = shift; if (defined($from_file) and -f $from_file) { eval { require($from_file) ;}; if ($@) { warn "require $from_file failed: $@\n"; return; } if (!defined($LANGUAGES->{$lang})) { warn "LANGUAGES->{$lang} not defined in $from_file\n"; return; } } if (!defined($T2H_OBSOLETE_STRINGS->{$lang})) { $T2H_OBSOLETE_STRINGS->{$lang} = {}; } if (!defined($LANGUAGES->{$lang})) { $LANGUAGES->{$lang} = {}; } foreach my $string (keys %{$LANGUAGES->{$lang}}) { $T2H_OBSOLETE_STRINGS->{$lang}->{$string} = $LANGUAGES->{$lang}->{$string} if (defined($LANGUAGES->{$lang}->{$string}) and ($LANGUAGES->{$lang}->{$string} ne '')); } $LANGUAGES->{$lang} = {}; foreach my $string (keys (%{$reference})) { if (exists($T2H_OBSOLETE_STRINGS->{$lang}->{$string}) and defined($T2H_OBSOLETE_STRINGS->{$lang}->{$string}) and ($T2H_OBSOLETE_STRINGS->{$lang}->{$string} ne '')) { $LANGUAGES->{$lang}->{$string} = $T2H_OBSOLETE_STRINGS->{$lang}->{$string}; delete $T2H_OBSOLETE_STRINGS->{$lang}->{$string}; } else { $LANGUAGES->{$lang}->{$string} = ''; } } return 1; } # Based on the template file, update the different language files sub update_i18n_files($$$$@) { my $directories = shift; my $i18n_dir = shift; my $out_i18n_dir = shift; my $template_language = shift; my @languages = grep {$template_language ne $_} get_languages($directories, $i18n_dir); if (@_) { @languages = (); foreach my $lang (@_) { unless (grep {$lang eq $_} @known_languages) { warn "Remark: you could update the known languages array for `$lang'\n"; } push (@languages, $lang) unless (grep {$lang eq $_} @languages); } } unless (@languages) { warn "No languages to update\n" ; return; } my $template_file = locate_file("$i18n_dir/$template_language", $directories); die "No $i18n_dir/$template_language found\n" unless (defined($template_file)); eval { require($template_file) ;}; if ($@) { die "require $template_file failed: $@\n"; } die "LANGUAGE->{'$template_language'} undef after require $template_file\n" unless (defined($LANGUAGES) and defined($LANGUAGES->{$template_language})); foreach my $string (keys(%$template_strings)) { die "template string $string undef" unless (defined($LANGUAGES->{$template_language}->{$string})); } unless (-d $out_i18n_dir) { if (!mkdir($out_i18n_dir, oct(755))) { die "cannot mkdir $out_i18n_dir: $!\n"; } } foreach my $lang (@languages) { update_language_file($directories, $i18n_dir, $out_i18n_dir, $template_language, $lang); } return 1; } sub copy_or_touch($$) { my $from_file = shift; my $to_file = shift; my $atime = time; my $mtime = $atime; if ($to_file eq $from_file) { utime $atime, $mtime, $from_file; return; } elsif (-f $to_file) { my $identical_files = 1; if (open(FROMFILE, $from_file)) { if (open(TOFILE, $to_file)) { my $to_file_lines = ''; my $from_file_lines = ''; while () { $from_file_lines .= $_; } while () { $to_file_lines .= $_; } if ($from_file_lines eq $to_file_lines) { utime $atime, $mtime, $from_file; return; } } } else { warn "Error opening $from_file\n"; utime $atime, $mtime, $to_file; } } unless (File::Copy::copy($from_file, $to_file)) { warn "Error copying $from_file to $to_file\n"; } } sub update_language_file($$$$$) { my $directories = shift; my $i18n_dir = shift; my $out_i18n_dir = shift; my $template_language = shift; my $lang = shift; my $from_file = locate_file("$i18n_dir/$lang", $directories); my $to_file = "$out_i18n_dir/$lang"; return unless (defined($from_file)); return unless (update_language_hash($from_file, $lang, $LANGUAGES->{$template_language})); if (-f $to_file) { unless (File::Copy::copy($to_file, "$to_file.old")) { warn "Error copying $to_file to $to_file.old\n"; return; } } if (!$USE_DATA_DUMPER) { copy_or_touch($from_file, $to_file); return; } unless (open(FILE, ">$to_file")) { warn "open $to_file failed: $!\n"; return; } print FILE "" . Data::Dumper->Dump([$LANGUAGES->{$lang}], [ "LANGUAGES->{'$lang'}" ]); print FILE "\n"; print FILE Data::Dumper->Dump([$T2H_OBSOLETE_STRINGS->{$lang}], [ "T2H_OBSOLETE_STRINGS->{'$lang'}"]); print FILE "\n"; print FILE "\n"; close FILE; } sub update_template($$$$@) { my $directories = shift; my $i18n_dir = shift; my $template_language = shift; my $out_dir = shift; my $source_strings = {}; unless (@_) { die "No source files\n"; } foreach my $source (@_) { my $source_file = locate_file($source, $directories); unless (defined($source_file)) { warn "$source_file not found\n"; next; } unless (open (FILE, "$source_file")) { warn "open $source_file failed: $!\n"; next; } my $line_nr = 0; while () { $line_nr++; my $string; next if /^\s*#/; while ($_) { if (defined($string)) { if (s/^([^\\']*)(\\|')//) { $string .= $1 if (defined($1)); if ($2 eq "'") { $source_strings->{$string} = '' ; $string = undef; } else { if (s/^(.)//) { #$string .= '\\' . $1; $string .= $1; } else { warn "\\ at end of line, file $source_file, line nr $line_nr\n"; $source_strings->{$string} = '' ; $string = undef; } } } else { warn "string not closed file $source_file, line nr $line_nr\n"; $source_strings->{$string} = '' ; $string = undef; } } elsif (s/^.*?&\$I\s*\('//) { $string = ''; } else { last; } } } close FILE; } foreach my $string (keys(%$template_strings)) { $source_strings->{$string} = $template_strings->{$string}; } my $template_file = locate_file("$i18n_dir/$template_language",$directories); die unless (update_language_hash($template_file, $template_language, $source_strings)); foreach my $string (keys(%$template_strings)) { # use values in template_srings if it exists my $existing_string = $LANGUAGES->{$template_language}->{$string}; $LANGUAGES->{$template_language}->{$string} = $template_strings->{$string} if ((!defined($existing_string)) or ($existing_string eq '')); } unless (-d $out_dir) { if (!mkdir($out_dir, oct(755))) { die "cannot mkdir $out_dir: $!\n"; } } my $out_template_file = "$out_dir/$template_language"; if (!$USE_DATA_DUMPER) { return if (!defined($template_file)); copy_or_touch($template_file, $out_template_file); return; } unless (open(TEMPLATE, ">$out_template_file")) { die "open $out_template_file failed: $!\n"; } print TEMPLATE "" . Data::Dumper->Dump([$LANGUAGES->{$template_language}], [ "LANGUAGES->{'$template_language'}" ]); print TEMPLATE "\n"; print TEMPLATE Data::Dumper->Dump([$T2H_OBSOLETE_STRINGS->{$template_language}], [ "T2H_OBSOLETE_STRINGS->{'$template_language'}"]); print TEMPLATE "\n"; print TEMPLATE "\n"; close TEMPLATE; } if ($command eq 'update') { update_i18n_files(\@searched_dirs, $dir, $output_dir, $template_lang, @ARGV); } elsif ($command eq 'merge') { merge_i18n_files(\@searched_dirs, $dir, $translations_file); } elsif ($command eq 'template') { my @source_files = @ARGV; unless (@source_files) { @source_files = @sources; } update_template(\@searched_dirs, $dir, $template_lang, $output_dir, @source_files); } #elsif ($command eq 'all') #{ # my @source_files = @ARGV; # unless (@source_files) # { # @source_files = @sources; # } # update_template(\@searched_dirs, $dir, $output_dir, $template_lang, # @source_files); # update_i18n_files(\@searched_dirs, $dir, $dir, # $template_lang, "$output_dir/$template_lang"); # merge_i18n_files(\@searched_dirs, $dir, $translations_file); #} else { warn "Unknown i18n command: $command\n"; } exit 0; 1; texi2html-1.82/INSTALL0000644000175000017500000002231011264347127016266 0ustar flichtenheldflichtenheldInstallation Instructions ************************* Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, 2006 Free Software Foundation, Inc. This file is free documentation; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Basic Installation ================== Briefly, the shell commands `./configure; make; make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the `README' file for instructions specific to this package. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. Running `configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. With a non-GNU `make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to an Autoconf bug. Until the bug is fixed you can use this workaround: CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of the options to `configure', and exit. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. texi2html-1.82/mkinstalldirs0000755000175000017500000000664711264347127020062 0ustar flichtenheldflichtenheld#! /bin/sh # mkinstalldirs --- make directory hierarchy scriptversion=2006-05-11.19 # Original author: Noah Friedman # Created: 1993-05-16 # Public domain. # # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' IFS=" "" $nl" errstatus=0 dirmode= usage="\ Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... Create each directory DIR (with mode MODE, if specified), including all leading file name components. Report bugs to ." # process command line arguments while test $# -gt 0 ; do case $1 in -h | --help | --h*) # -h for help echo "$usage" exit $? ;; -m) # -m PERM arg shift test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } dirmode=$1 shift ;; --version) echo "$0 $scriptversion" exit $? ;; --) # stop option processing shift break ;; -*) # unknown option echo "$usage" 1>&2 exit 1 ;; *) # first non-opt arg break ;; esac done for file do if test -d "$file"; then shift else break fi done case $# in 0) exit 0 ;; esac # Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and # mkdir -p a/c at the same time, both will detect that a is missing, # one will create a, then the other will try to create a and die with # a "File exists" error. This is a problem when calling mkinstalldirs # from a parallel make. We use --version in the probe to restrict # ourselves to GNU mkdir, which is thread-safe. case $dirmode in '') if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then echo "mkdir -p -- $*" exec mkdir -p -- "$@" else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. test -d ./-p && rmdir ./-p test -d ./--version && rmdir ./--version fi ;; *) if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 && test ! -d ./--version; then echo "mkdir -m $dirmode -p -- $*" exec mkdir -m "$dirmode" -p -- "$@" else # Clean up after NextStep and OpenStep mkdir. for d in ./-m ./-p ./--version "./$dirmode"; do test -d $d && rmdir $d done fi ;; esac for file do case $file in /*) pathcomp=/ ;; *) pathcomp= ;; esac oIFS=$IFS IFS=/ set fnord $file shift IFS=$oIFS for d do test "x$d" = x && continue pathcomp=$pathcomp$d case $pathcomp in -*) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr else if test ! -z "$dirmode"; then echo "chmod $dirmode $pathcomp" lasterr= chmod "$dirmode" "$pathcomp" || lasterr=$? if test ! -z "$lasterr"; then errstatus=$lasterr fi fi fi fi pathcomp=$pathcomp/ done done exit $errstatus # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: texi2html-1.82/Makefile.in0000644000175000017500000006515211264347127017315 0ustar flichtenheldflichtenheld# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = . DIST_COMMON = README $(am__configure_deps) $(dist_i18n_DATA) \ $(dist_images_DATA) $(dist_pkgdata_DATA) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/check_texinfo.pl.in \ $(srcdir)/manage_i18n.pl.in $(srcdir)/texi2html.pl \ $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \ TODO config.guess config.sub install-sh mdate-sh missing \ mkinstalldirs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = texi2html_configured.pl check_texinfo.pl \ manage_i18n.pl am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(i18ndir)" \ "$(DESTDIR)$(imagesdir)" "$(DESTDIR)$(pkgdatadir)" binSCRIPT_INSTALL = $(INSTALL_SCRIPT) SCRIPTS = $(bin_SCRIPTS) $(noinst_SCRIPTS) SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; dist_i18nDATA_INSTALL = $(INSTALL_DATA) dist_imagesDATA_INSTALL = $(INSTALL_DATA) dist_pkgdataDATA_INSTALL = $(INSTALL_DATA) DATA = $(dist_i18n_DATA) $(dist_images_DATA) $(dist_pkgdata_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d $(distdir) \ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr $(distdir); }; } DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2 $(distdir).zip GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DATE = @PACKAGE_DATE@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ REQUIRE_DATA_DUMPER = @REQUIRE_DATA_DUMPER@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_DATA_DUMPER = @USE_DATA_DUMPER@ USE_UNICODE = @USE_UNICODE@ USE_UNIDECODE = @USE_UNIDECODE@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ am__leading_dot = @am__leading_dot@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = . doc Tests test imagesdir = $(pkgdatadir)/images i18ndir = $(pkgdatadir)/i18n # # This is to prevent texinfo.tex from being included # in the top-level distribution directory. TEXINFO_TEX = doc/texinfo.tex bin_SCRIPTS = texi2html texi2html_additional_scripts = \ MySimple.pm \ T2h_i18n.pm \ texi2html.init \ translations.pl \ examples/l2h.init \ T2h_l2h.pm texi2html_sources = texi2html_configured.pl $(texi2html_additional_scripts) noinst_SCRIPTS = manage_i18n.pl buildt2h.sh parse_8bit_makeinfo_maps.pl EXTRA_DIST = \ MySimple.pod \ autogen.sh \ $(noinst_SCRIPTS) \ missing-texi2html \ texi2html.pl \ texi2html.spec \ texi2html.spec.in \ texi2html.pl \ $(texi2html_additional_scripts) dist_pkgdata_DATA = examples/l2h.init \ examples/makeinfo.init \ examples/xhtml.init \ examples/html32.init \ examples/book.init \ examples/noheaders.init \ examples/inlinestyle.init \ examples/utf8.init \ examples/enable_encoding.init \ examples/chm.init \ examples/roff.init \ examples/xml.init \ examples/mediawiki.init \ examples/docbook.init \ examples/tex4ht.init \ examples/my-bib-macros.texi \ examples/bib-example.texi \ examples/glossary.texi i18n_files = i18n/de \ i18n/es \ i18n/fr \ i18n/nl \ i18n/no \ i18n/pt \ i18n/pt_BR \ i18n/ja dist_i18n_DATA = i18n/en \ $(i18n_files) dist_images_DATA = images/a_begin.png \ images/a_begin_na.png \ images/a_document.png \ images/a_document_na.png \ images/a_empty.png \ images/a_end.png \ images/a_end_na.png \ images/a_help.png \ images/a_help_na.png \ images/a_index.png \ images/a_index_na.png \ images/a_leftdouble.png \ images/a_leftdouble_na.png \ images/a_left.png \ images/a_left_na.png \ images/a_page.png \ images/a_page_na.png \ images/a_rightdouble.png \ images/a_rightdouble_na.png \ images/a_right.png \ images/a_right_na.png \ images/a_searchdoc.png \ images/a_searchdoc_na.png \ images/a_search.png \ images/a_search_na.png \ images/a_tableofcon.png \ images/a_tableofcon_na.png \ images/a_top.png \ images/a_top_na.png \ images/a_up.png \ images/a_up_na.png \ images/bg.jpg \ images/bg_left.png \ images/bg_right.png \ images/blue_dir.png \ images/blue_down.png \ images/blue_grab.png \ images/blue_help.png \ images/blue_next.png \ images/blue_nnext.png \ images/blue_pprev.png \ images/blue_prev.png \ images/blue_readme.png \ images/blue_top.png \ images/blue_up.png \ images/blue_uup.png \ images/contents_motif.png \ images/COPYING \ images/COPYING.Attribution-ShareAlike \ images/GPL \ images/README \ images/index_motif.png \ images/Mybg.png \ images/next_motif.png \ images/next_motif_gr.png \ images/previous_motif.png \ images/previous_motif_gr.png \ images/spacer3.png \ images/xy_contents.png \ images/xy_foot.png \ images/xy_next.png \ images/xy_next_gr.png \ images/xy_nextsection.png \ images/xy_nextsection_gr.png \ images/xy_previous.png \ images/xy_previous_gr.png \ images/xy_previoussection.png \ images/xy_previoussection_gr.png \ images/xy_up.png \ images/xy_up_gr.png all: all-recursive .SUFFIXES: am--refresh: @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \ cd $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) texi2html_configured.pl: $(top_builddir)/config.status $(srcdir)/texi2html.pl cd $(top_builddir) && $(SHELL) ./config.status $@ check_texinfo.pl: $(top_builddir)/config.status $(srcdir)/check_texinfo.pl.in cd $(top_builddir) && $(SHELL) ./config.status $@ manage_i18n.pl: $(top_builddir)/config.status $(srcdir)/manage_i18n.pl.in cd $(top_builddir) && $(SHELL) ./config.status $@ install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_SCRIPTS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f $$d$$p; then \ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ echo " $(binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \ $(binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \ else :; fi; \ done uninstall-binSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(bin_SCRIPTS)'; for p in $$list; do \ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ rm -f "$(DESTDIR)$(bindir)/$$f"; \ done install-dist_i18nDATA: $(dist_i18n_DATA) @$(NORMAL_INSTALL) test -z "$(i18ndir)" || $(MKDIR_P) "$(DESTDIR)$(i18ndir)" @list='$(dist_i18n_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(dist_i18nDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(i18ndir)/$$f'"; \ $(dist_i18nDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(i18ndir)/$$f"; \ done uninstall-dist_i18nDATA: @$(NORMAL_UNINSTALL) @list='$(dist_i18n_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(i18ndir)/$$f'"; \ rm -f "$(DESTDIR)$(i18ndir)/$$f"; \ done install-dist_imagesDATA: $(dist_images_DATA) @$(NORMAL_INSTALL) test -z "$(imagesdir)" || $(MKDIR_P) "$(DESTDIR)$(imagesdir)" @list='$(dist_images_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(dist_imagesDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(imagesdir)/$$f'"; \ $(dist_imagesDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(imagesdir)/$$f"; \ done uninstall-dist_imagesDATA: @$(NORMAL_UNINSTALL) @list='$(dist_images_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(imagesdir)/$$f'"; \ rm -f "$(DESTDIR)$(imagesdir)/$$f"; \ done install-dist_pkgdataDATA: $(dist_pkgdata_DATA) @$(NORMAL_INSTALL) test -z "$(pkgdatadir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" @list='$(dist_pkgdata_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(dist_pkgdataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgdatadir)/$$f'"; \ $(dist_pkgdataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgdatadir)/$$f"; \ done uninstall-dist_pkgdataDATA: @$(NORMAL_UNINSTALL) @list='$(dist_pkgdata_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(pkgdatadir)/$$f'"; \ rm -f "$(DESTDIR)$(pkgdatadir)/$$f"; \ done # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) test -d $(distdir) || mkdir $(distdir) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ (cd $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ am__remove_distdir=: \ am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ done -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r $(distdir) dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && cd $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @cd $(distuninstallcheck_dir) \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(SCRIPTS) $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(i18ndir)" "$(DESTDIR)$(imagesdir)" "$(DESTDIR)$(pkgdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: html-local info: info-recursive info-am: install-data-am: install-dist_i18nDATA install-dist_imagesDATA \ install-dist_pkgdataDATA install-dvi: install-dvi-recursive install-exec-am: install-binSCRIPTS install-html: install-html-recursive install-info: install-info-recursive install-man: install-pdf: install-pdf-recursive install-ps: install-ps-recursive installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binSCRIPTS uninstall-dist_i18nDATA \ uninstall-dist_imagesDATA uninstall-dist_pkgdataDATA .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ install-strip .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-generic \ clean-local ctags ctags-recursive dist dist-all dist-bzip2 \ dist-gzip dist-shar dist-tarZ dist-zip distcheck distclean \ distclean-generic distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am html-local info \ info-am install install-am install-binSCRIPTS install-data \ install-data-am install-dist_i18nDATA install-dist_imagesDATA \ install-dist_pkgdataDATA install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am uninstall-binSCRIPTS \ uninstall-dist_i18nDATA uninstall-dist_imagesDATA \ uninstall-dist_pkgdataDATA #texi2html: $(texi2html_sources) # sed -e "/@MYSIMPLE@/r $(srcdir)/MySimple.pm" \ # -e "/@INIT@/r $(srcdir)/texi2html.init" \ # -e "/@T2H_TRANSLATIONS_FILE@/r $(srcdir)/translations.pl" \ # -e "/@T2H_L2H_INIT@/r $(srcdir)/l2h.init" \ # -e "/@T2H_I18N@/r $(srcdir)/T2h_i18n.pm" \ # -e "/@T2H_L2H@/r $(srcdir)/T2h_l2h.pm" $< >$@ # chmod a+x $@ texi2html: $(texi2html_sources) $(SHELL) $(srcdir)/buildt2h.sh $@ $^ chmod a+x $@ texi2html.spec: texi2html.spec.in configure @echo Generating $@... @sed -e "s/[@]PACKAGE_VERSION[@]/$(PACKAGE_VERSION)/" \ -e "s/[@]PACKAGE_TARNAME[@]/$(PACKAGE_TARNAME)/" $< >texi2html.tmp @cp texi2html.tmp texi2html.spec -@rm texi2html.tmp i18n/en: texi2html.pl texi2html.init T2h_i18n.pm examples/roff.init \ examples/noheaders.init $(PERL) $(top_builddir)/manage_i18n.pl -d i18n -I . -I $(srcdir) template $^ #i18n/de i18n/nl i18n/es i18n/no i18n/pt i18n/fr: i18n/en $(i18n_files): i18n/en $(PERL) $(top_builddir)/manage_i18n.pl -d i18n -I . -I $(srcdir) update #translations.pl: i18n/de i18n/nl i18n/es i18n/no i18n/pt i18n/fr i18n/en translations.pl: $(dist_i18n_DATA) $(PERL) $(top_builddir)/manage_i18n.pl -d i18n -o $@ -I . -I $(srcdir) merge html-local: texi2html clean-local: -rm -f texi2html # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: texi2html-1.82/config.sub0000755000175000017500000007746011264347127017240 0ustar flichtenheldflichtenheld#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, # Inc. timestamp='2006-09-20' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | mt \ | msp430 \ | nios | nios2 \ | ns16k | ns32k \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | score \ | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ | xstormy16-* | xtensa-* \ | ymp-* \ | z8k-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16c) basic_machine=cr16c-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: texi2html-1.82/AUTHORS0000644000175000017500000000062011264347127016305 0ustar flichtenheldflichtenheldLionel Cons, Karl Berry, Olaf Bachmann, Karl-Heinz Marbaise (texi2html manual) and many others. Images in the images directory come from the Singular project: http://www.singular.uni-kl.de/ Translations (since 2001): fr: Patrice Dumas and Jean-Charles Malahieude de: Reinhold Kainhofer pt_BR, pt: Jorge Barros de Abreu ja: Found in Fedora. Don't know the author. es: Francisco Vila texi2html-1.82/missing-texi2html0000754000175000017500000000672211264347127020562 0ustar flichtenheldflichtenheld#! /bin/sh # Common stub for a few missing GNU programs while installing. # Copyright 1996, 1997, 1999, 2000, 2005 Free Software Foundation, Inc. # Copyright (C) 2005 Derek Price , # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: case "$1" in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case "$1" in -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: texi2html touch output file" ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing 0.3 - GNU automake (modified in texi2html)" ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; */perl) case "$2" in */texi2html.pl) ;; *) echo 1>&2 "\ WARNING: \`$1 $2' is needed, and you do not seem to have it handy on your system. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequirements for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac echo 1>&2 "\ WARNING: \`$1 $2' is missing or broken on your system. You should only need it if you modified \`texi2html.info'. You might want to install the \`Perl' package. Grab it from any GNU archive site." if test -z "$3"; then echo 1>&2 "ERROR: No output file specified!" exit 1 fi while test -n "$4"; do shift done file=`echo "$3" |sed 's/\.texi$/.html/'` file=`echo "$file" |sed 's/\.texinfo$/.html/'` touch "$file" ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and you do not seem to have it handy on your system. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequirements for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 texi2html-1.82/Tests/0000755000175000017500000000000011264347127016341 5ustar flichtenheldflichtenheldtexi2html-1.82/Tests/Makefile.in0000644000175000017500000002415711264347127020417 0ustar flichtenheldflichtenheld# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = Tests DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DATE = @PACKAGE_DATE@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ REQUIRE_DATA_DUMPER = @REQUIRE_DATA_DUMPER@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_DATA_DUMPER = @USE_DATA_DUMPER@ USE_UNICODE = @USE_UNICODE@ USE_UNIDECODE = @USE_UNIDECODE@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ am__leading_dot = @am__leading_dot@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIR_TESTS = GermanNodeTest xemacs texinfo sectionning ccvs viper \ viper_monolithic texi2html xemacs_frame index_table formatting macros \ nodes_texinfo singular floats node_translit node_translit_no_unicode \ node_translit_no_unidecode node_utf8_translit \ node_utf8_translit_no_unidecode index_split_nodes \ more_before_top_section node_footnote node_in_chapter_index_split \ index_nodes tar htmlxref htmlxref-only_mono htmlxref-only_split \ contents contents_book contents_inline tex_httex documentlanguage \ navigation navigation_node_no_nav navigation_chapter \ navigation_node_no_nav_vert \ navigation_chapter_no_header navigation_node_vert \ navigation_chapter_no_nav navigation_section \ navigation_chapter_no_nav_vert navigation_section_no_header \ navigation_chapter_vert navigation_section_no_nav \ navigation_node navigation_section_no_nav_vert \ navigation_node_no_header navigation_section_vert ccvs_mediawiki \ ccvs_mediawiki_nosplit no_monolithic complex_no_monolithic all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Tests/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu Tests/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-exec-am: install-html: install-html-am install-info: install-info-am install-man: install-pdf: install-pdf-am install-ps: install-ps-am installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-local \ distclean distclean-generic distdir dvi dvi-am html html-am \ info info-am install install-am install-data install-data-am \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ uninstall-am #check-local: # $(srcdir)/test.sh regenerate: -for dir in ${SUBDIR_TESTS}; do \ [ -d $${dir}_res ] && cp $$dir/*.passfirst $$dir/*.html $$dir/*.htm $$dir/*.2 $$dir/*.passtexi $${dir}_res;\ done -rm -f formatting_res/*_l2h.html formatting_res/tex.2 \ formatting_res/tex_in_copying.2 formatting_res/math_not_closed.2 \ tex_httex_res/tex.2 tex_httex_res/*_tex4ht_*.html -rm -f singular_res/*_l2h.html singular_res/sing.2 cp ccvs_mediawiki/cvs:* ccvs_mediawiki/cvs ccvs_mediawiki_res cp ccvs_mediawiki_nosplit/cvs ccvs_mediawiki_nosplit_res clean-local: for dir in ${SUBDIR_TESTS}; do \ (if [ -d $$dir ]; then cd $$dir && $(RM) -- $$dir $$dir-* *.toc *.aux *.log *.op *.cp *.cps \ *.fn *.fns *.ky *.kys *.pg *.pgs *.tp *.tps *.vr *.vrs \ *.dvi *.html *.htm *.info *.info-? *.info-?? *.info-??? *.html_tempnotag \ *.2 *.passfirst *.passtexi \ *_?.png *_??.png *_???.png *_l2h_img?.old *_l2h_img??.old *_l2h_img???.old \ *_l2h_img?.png *_l2h_img??.png *_l2h_img???.png \ *_l2h.tex *_l2h.css *_l2h_images.pl *_l2h_images.tex \ *_l2h_labels.pl *-l2h_cache.pm l2h_cache.pm *.out; fi) ; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: texi2html-1.82/Tests/README0000644000175000017500000000766311264347127017235 0ustar flichtenheldflichtenheldRunning the tests and understanding the results ----------------------------------------------- To run all the tests just do $ ./test.sh For each test the output begins with the line: making test: dir/file options... dir is the dir where the test is made, file is the texinfo file processed and the optional options are the options passed to texi2html when doing the test. Then the test results are outputted. There are 5 type of results outputed: status -> always stderr line count -> always diffs -> optionnal test with tidy -> optionnal test validity -> optionnal For each of these, the type is outputted indented. The results appear on lines below, more indented. When the test fails there is !!! on the line. For example: making test: formatting/not_closed_in_menu.texi status: passed stderr line count: !!! bad line count: 7 != 0 I now turn the the individual result type: * status The exit status of the command is tested for success or failure. * stderr line count The number of stderr lines is compared against a reference. * diffs out files are diffed against reference files present in dir_res. A '.' means a successfull comparison. If there are more than one test in that dir, there might be files differing or files not found if the files haven't allready been regenerated. * test with tidy tidy is run on resulting html files. * test validity validate is run on resulting html files. Adding a test ------------- To add a test, you have to add a line in test.sh, near the end. Here is the syntax: test_texi dir file "option1 option2" stderr_lines suffix basename ignore_tags validate test_tidy fail dir is the only mandatory argument. There are defaults for the other arguments when not given. However if you want to specify, say, basename and use the defaults for the preceding ones, you have to set them explicitely. dir: the directory where the files are. file: the texinfo file. If not present dir.texi is used "option1 option2": options passed to texi2html. Default is no option stderr_lines: number of lines of stderr. Default is 0 suffix: suffix of the file, used to find the basename. 'texi' is assumed basename: basename of the generated files. The basename of file is the default ignore_tags: if set to 'ignore_tags' or 'yes' rcs tags are ignored validate: if unset or set to 'validate' validation is tried test_tidy: if unset or set to 'tidy' or 'test_tidy', tidy is tried fail: if unset or set to 'success' the exit code should be 0 * Simple example: test_texi macros test macros.texi in the macros dir, without options, assuming generated files beginning with macros. * Complex example: test_texi sectionning no_node.texi "-prefix chapter_split_no_node -split chapter" 0 texi chapter_split_no_node Test no_node.texi in the sectionning dir, with the options: -prefix chapter_split_no_node -split chapter no lines on stderr, suffix is texi and basename for generated files is chapter_split_no_node (which matches the option -prefix chapter_split_no_node). Remarks: The stderr output is in basename.2, the result of the first pass in basename.passtexi, of the second pass in basename.passfirst. the -test option is always passed. To run a single test you can run test.sh with the arguments you would have passed to test_texi. For example $./test.sh viper viper.texi "-split chapter" will run a test for viper.texi in the viper directory with option -split chapter Regenerating tests ------------------ make regenerate copy all the *.html, *.2, *.passtexi and *.passfirst from the test directories to the result directories (test directory with _res appended). This is usefull when the new result is the good result and you want to avoid manually copying the good files to the result directory. To add a new test directory add it to the SUBDIR_TESTS variable in Makefile.am (and rerun automake, autoconf...). texi2html-1.82/Tests/Makefile.am0000644000175000017500000000422011264347127020373 0ustar flichtenheldflichtenheldSUBDIR_TESTS = GermanNodeTest xemacs texinfo sectionning ccvs viper \ viper_monolithic texi2html xemacs_frame index_table formatting macros \ nodes_texinfo singular floats node_translit node_translit_no_unicode \ node_translit_no_unidecode node_utf8_translit \ node_utf8_translit_no_unidecode index_split_nodes \ more_before_top_section node_footnote node_in_chapter_index_split \ index_nodes tar htmlxref htmlxref-only_mono htmlxref-only_split \ contents contents_book contents_inline tex_httex documentlanguage \ navigation navigation_node_no_nav navigation_chapter \ navigation_node_no_nav_vert \ navigation_chapter_no_header navigation_node_vert \ navigation_chapter_no_nav navigation_section \ navigation_chapter_no_nav_vert navigation_section_no_header \ navigation_chapter_vert navigation_section_no_nav \ navigation_node navigation_section_no_nav_vert \ navigation_node_no_header navigation_section_vert ccvs_mediawiki \ ccvs_mediawiki_nosplit no_monolithic complex_no_monolithic #check-local: # $(srcdir)/test.sh regenerate: -for dir in ${SUBDIR_TESTS}; do \ [ -d $${dir}_res ] && cp $$dir/*.passfirst $$dir/*.html $$dir/*.htm $$dir/*.2 $$dir/*.passtexi $${dir}_res;\ done -rm -f formatting_res/*_l2h.html formatting_res/tex.2 \ formatting_res/tex_in_copying.2 formatting_res/math_not_closed.2 \ tex_httex_res/tex.2 tex_httex_res/*_tex4ht_*.html -rm -f singular_res/*_l2h.html singular_res/sing.2 cp ccvs_mediawiki/cvs:* ccvs_mediawiki/cvs ccvs_mediawiki_res cp ccvs_mediawiki_nosplit/cvs ccvs_mediawiki_nosplit_res clean-local: for dir in ${SUBDIR_TESTS}; do \ (if [ -d $$dir ]; then cd $$dir && $(RM) -- $$dir $$dir-* *.toc *.aux *.log *.op *.cp *.cps \ *.fn *.fns *.ky *.kys *.pg *.pgs *.tp *.tps *.vr *.vrs \ *.dvi *.html *.htm *.info *.info-? *.info-?? *.info-??? *.html_tempnotag \ *.2 *.passfirst *.passtexi \ *_?.png *_??.png *_???.png *_l2h_img?.old *_l2h_img??.old *_l2h_img???.old \ *_l2h_img?.png *_l2h_img??.png *_l2h_img???.png \ *_l2h.tex *_l2h.css *_l2h_images.pl *_l2h_images.tex \ *_l2h_labels.pl *-l2h_cache.pm l2h_cache.pm *.out; fi) ; \ done texi2html-1.82/mdate-sh0000754000175000017500000000516311264347127016673 0ustar flichtenheldflichtenheld#!/bin/sh # Get modification time of a file or directory and pretty-print it. # Copyright 1995, 1996, 1997 Free Software Foundation, Inc. # written by Ulrich Drepper , June 1995 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 59 Temple Place - Suite 330, Boston, MA 02110-1301, USA. # Prevent date giving response in another language. LANG=C export LANG LC_ALL=C export LC_ALL LC_TIME=C export LC_TIME # Get the extended ls output of the file or directory. # On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below. if ls -L /dev/null 1>/dev/null 2>&1; then set - x`ls -L -l -d $1` else set - x`ls -l -d $1` fi # The month is at least the fourth argument # (3 shifts here, the next inside the loop). shift shift shift # Find the month. Next argument is day, followed by the year or time. month= until test $month do shift case $1 in Jan) month=January; nummonth=1;; Feb) month=February; nummonth=2;; Mar) month=March; nummonth=3;; Apr) month=April; nummonth=4;; May) month=May; nummonth=5;; Jun) month=June; nummonth=6;; Jul) month=July; nummonth=7;; Aug) month=August; nummonth=8;; Sep) month=September; nummonth=9;; Oct) month=October; nummonth=10;; Nov) month=November; nummonth=11;; Dec) month=December; nummonth=12;; esac done day=$2 # Here we have to deal with the problem that the ls output gives either # the time of day or the year. case $3 in *:*) set `date`; eval year=\$$# case $2 in Jan) nummonthtod=1;; Feb) nummonthtod=2;; Mar) nummonthtod=3;; Apr) nummonthtod=4;; May) nummonthtod=5;; Jun) nummonthtod=6;; Jul) nummonthtod=7;; Aug) nummonthtod=8;; Sep) nummonthtod=9;; Oct) nummonthtod=10;; Nov) nummonthtod=11;; Dec) nummonthtod=12;; esac # For the first six month of the year the time notation can also # be used for files modified in the last year. if (expr $nummonth \> $nummonthtod) > /dev/null; then year=`expr $year - 1` fi;; *) year=$3;; esac # The result. echo $day $month $year texi2html-1.82/COPYING0000644000175000017500000004312211264347127016274 0ustar flichtenheldflichtenheld GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. texi2html-1.82/texi2html.init0000644000175000017500000061111211264347127020046 0ustar flichtenheldflichtenheld# -*-perl-*- ###################################################################### # File: texi2html.init # # Default values for command-line arguments and for various customizable # procedures are set in this file. # # A copy of this file is pasted into the beginning of texi2html by # running './configure'. # # Copy this file, rename it and make changes to it, if you like. # Afterwards, load the file with command-line # option -init-file # # $Id: texi2html.init,v 1.173 2009/01/01 22:35:10 pertusus Exp $ ###################################################################### # The following variables can also be set by command-line options # # # The default values are set in this file, texi2html.init and the content # of this file is included at the beginning of the texi2html script file. # Those values may be overrided by values set in $sysconfdir/texi2htmlrc # and then by values set in $HOME/texi2htmlrc. # # command line switches may override these values, and values set in files # specified by -init-file are also taken into account. # values set in these files overwrite values set by the command-line # options appearing before -init-file and might still be overwritten by # command-line arguments following the -init-file option. # -debug # The integer value specifies what kind of debugging output is generated. $DEBUG = 0; # -doctype # The value is the 'SystemLiteral' which identifies the canonical DTD # for the document. # Definition: The SystemLiteral is called the entity's system # identifier. It is a URI, which may be used to retrieve the entity. # See http://www.xml.com/axml/target.html#NT-ExternalID $DOCTYPE = ''; # -frameset-doctype # When frames are used, this SystemLiteral identifies the DTD used for # the file containing the frame description. $FRAMESET_DOCTYPE = ''; # -test # If this value is true, some variables which should be dynamically generated # (the date, the user running texi2html, the version of texi2html) are set to # fix and given values. This is usefull in case the resulting manual is # compared with a reference. For example this is used in the tests of test.sh. $TEST = 0; # -dump-texi # This value is usefull for debugging purposes. The result of the first pass is # put in .passtexi, the result of the second pass is put in # .passfirst. $DUMP_TEXI = 0; # -expand # the @EXPAND array contains the expanded section names. @EXPAND = ('html'); # -invisible # This seems obsolete and is not used anywhere. # This was a workaround for a known bug of many WWW browsers, including # netscape. This was used to create invisible destination in anchors. $INVISIBLE_MARK = ''; # $INVISIBLE_MARK = ' '; # -iso # if this value is true, ISO8859 characters are used for special symbols # (like copyright, etc). $USE_ISO = 1; # -I # add a directory to the list of directories where @include files are # searched for (besides the directory of the file). additional '-I' # args are appended to this list. # (APA: Don't implicitely search ., to conform with the docs!) # my @INCLUDE_DIRS = ("."); @INCLUDE_DIRS = (); # -P # prepend a directory to the list of directories where @include files are # searched for before the directory of the file. additional '-P' # args are prepended to this list. @PREPEND_DIRS = (); # --conf-dir # append to the files searched for init files. @CONF_DIRS = (); # -top-file # This file name is used for the top-level file. # The extension is set appropriately, if necessary. # If empty, .html is used. # Typically, you would set this to "index.html". $TOP_FILE = ''; # -toc-file # This file name is used for the table of contents. The # extension is set appropriately, if necessary. # If empty, _toc.html is used. $TOC_FILE = ''; # -frames # if the value is true, HTML 4.0 "frames" are used. # A file describing the frame layout is generated, together with a file # with the short table of contents. $FRAMES = 0; # -menu | -nomenu # if the value is true the Texinfo menus are shown. $SHOW_MENU = 1; # -number | -nonumber # if this is set the sections are numbered, and section names and numbers # are used in references and menus (instead of node names). $NUMBER_SECTIONS = 1; # -use-nodes # if this is set the nodes are used as sectionning elements. # Otherwise the nodes are incorporated in sections. #$USE_NODES = 0; $USE_NODES = undef; $USE_SECTIONS = 1; # -node-files # if this is set one file per node is generated, which can be a target for # cross manual references. $NODE_FILES = 0; # -split section|chapter|node|none # if $SPLIT is set to 'section' (resp. 'chapter') one html file per section # (resp. chapter) is generated. If $SPLIT is set to 'node' one html file per # node or sectionning element is generated. In all these cases separate pages # for Top, Table of content (Toc), Overview and About are generated. # Otherwise a monolithic html file that contains the whole document is # created. #$SPLIT = 'section'; $SPLIT = ''; # -sec-nav|-nosec-nav # if this is set then navigation panels are printed at the beginning of each # section. # If the document is split at nodes then navigation panels are # printed at the end if there were more than $WORDS_IN_PAGE words on page. # # Navigation panels are always printed at the beginning of output files. # # This is most useful if you do not want to have section navigation # with -split chapter. There will be chapter navigation panel at the # beginning and at the end of chapters anyway. $SECTION_NAVIGATION = 1; # -separated-footnotes # if this is set footnotes are on a separated page. Otherwise they are at # the end of each file (if the document is split). $SEPARATED_FOOTNOTES = 1; # -toc-links # if this is set, links from headings to toc entries are created. $TOC_LINKS = 0; # -subdir # If this is set, then put result files into the specified directory. # If not set, then result files are put into the current directory. #$SUBDIR = 'html'; $SUBDIR = ''; # -short-extn # If this is set, then all HTML files will have extension ".htm" instead of # ".html". This is helpful when shipping the document to DOS-based systems. $SHORTEXTN = 0; # -prefix # This set the output file prefix, prepended to all .html, .gif and .pl files. # By default, this is the basename of the document. $PREFIX = ''; # -o filename # If this is set a monolithic document is outputted into $filename. $OUT = ''; # -no-validate # suppress node cross-reference validation $NOVALIDATE = 0; # -short-ref # if this is set cross-references are given without section numbers. $SHORT_REF = ''; # -idx-sum # if value is set, then for each @printindex # _.idx is created which contains lines of the form # key ref sorted alphabetically (case matters). $IDX_SUMMARY = 0; # -def-table # If this is set a table construction for @def.... instead of definition # lists. # (New Option: 27.07.2000 Karl Heinz Marbaise) $DEF_TABLE = 0; # -verbose # if this is set chatter about what we are doing. $VERBOSE = ''; # -lang # use &$I('my string') if you want to have translations of 'my string' # and provide the translations in $LANGUAGES->{$LANG} with 'my string' # as key. # To add a new language use ISO 639 language codes (see e.g. perl module # Locale-Codes-1.02 for definitions). Supply translations in the # $LANGUAGES hash and put it in a file with $LANG as name in an i18n # directory. # This is used for the initial language, it is overriden during # document processing if there is a @documentlanguage. # It is ignored if the language is passed on the command line. $LANG = 'en'; # -ignore-preamble-text # If this is set the text before @node and sectionning commands is ignored. $IGNORE_PREAMBLE_TEXT = 0; # -html-xref-prefix # base directory for external manuals. #$EXTERNAL_DIR = '../'; $EXTERNAL_DIR = undef; # -l2h # if this is set, latex2html is used for generation of math content. $L2H = ''; # -transliterate-file-names # transliterate node names for external refs (and internal if NODE_FILES) $TRANSLITERATE_NODE = 1; # --error-limit # quit after NUM errors (default 1000). $ERROR_LIMIT = 1000; # -monolithic # output only one file including ToC. It only makes sense when not split $MONOLITHIC = 1; # -css-include # All the specified css files are used. More precisely the @import sections # are added to the beginning of the CSS_LINES the remaining is added at # the end of the CSS_LINES (after the css rules generated by texi2html). # cf texinfo manual for more info. # - means STDIN @CSS_FILES = (); # -css-ref # the specified url are used as stylesheet links @CSS_REFS = (); ###################### # The following options are only relevant if $L2H is set # # -l2h-l2h # name/location of latex2html program $L2H_L2H = "latex2html"; # -l2h-skip # If this is set the actual call to latex2html is skipped. The previously # generated content is reused, instead. $L2H_SKIP = ''; # -l2h-tmp # If this is set l2h uses the specified directory for temporary files. The path # leading to this directory may not contain a dot (i.e., a "."); # otherwise, l2h will fail. $L2H_TMP = ''; # -l2h-file # If set, l2h uses the file as latex2html init file $L2H_FILE = 'l2h.init'; # -l2h-clean # if this is set the intermediate files generated by texi2html in relation with # latex2html are cleaned (they all have the prefix _l2h_). $L2H_CLEAN = 1; ############################################################################## # # The following can only be set in the init file # ############################################################################## # If true do table of contents even if there is no @content $DO_CONTENTS = undef; # If true do short table of contents even if there is no @shortcontent $DO_SCONTENTS = undef; # if set, output the contents where the command is located $INLINE_CONTENTS = 0; # if this variable is true, numeric entities are used when there is no # corresponding textual entity. $USE_NUMERIC_ENTITY = 1; # if set, the image files are completed to be relative from the # document directory, to the source manual directory and then to # the image $COMPLETE_IMAGE_PATHS = 0; # if this variable is true, @setfilename is used if found to determine the # out file name $USE_SETFILENAME = 0; # if true, begin outputting at @setfilename, if this command is present. $IGNORE_BEFORE_SETFILENAME = 1; # if true the link in Overview link to the corresponding Toc entry. $OVERVIEW_LINK_TO_TOC = 0; # if set always separate description and menu link, even in # preformatted environment $SEPARATE_DESCRIPTION = 0; # if set, then use node names in menu entries, instead of section names $NODE_NAME_IN_MENU = 0; # if set, use node anchors for sections targets $USE_NODE_TARGET = 1; # new style for crossrefs $NEW_CROSSREF_STYLE = 1; # top heading is always at the beginning of the element. $TOP_HEADING_AT_BEGINNING = 1; # if set and menu entry equals menu description, then do not print # menu description. # Likewise, if node name equals entry name, do not print entry name. $AVOID_MENU_REDUNDANCY = 1; # if set, center @image by default # otherwise, do not center by default # Deprecated and not used anymore $CENTER_IMAGE = 1; # used as identation for block enclosing command @example, etc # If not empty, must be enclosed in $EXAMPLE_INDENT_CELL = ' '; # same as above, only for @small $SMALL_EXAMPLE_INDENT_CELL = ' '; # font size for @small $SMALL_FONT_SIZE = '-1'; # horizontal rules $SMALL_RULE = '
    '; $DEFAULT_RULE = '
    '; $MIDDLE_RULE = '
    '; $BIG_RULE = '
    '; # if non-empty, and no @..heading appeared in Top node, then # use this as header for top node/section, otherwise use value of # @settitle or @shorttitle (in that order) $TOP_HEADING = ''; # if set, use this chapter for 'Index' button, else # use first chapter with @printindex $INDEX_CHAPTER = ''; # if set and $SPLIT is set, then split index pages at the next letter # after they have more than that many entries $SPLIT_INDEX = 100; # symbol put at the beginning of nodes entry in menu (and optionnaly of # unnumbered in menus, see next variable) $MENU_SYMBOL = '•'; #$MENU_SYMBOL = '*'; $SIMPLE_MENU = 0; $OPEN_QUOTE_SYMBOL = "\`"; $CLOSE_QUOTE_SYMBOL = "'"; # if true put a $MENU_SYMBOL before unnumbered in menus $UNNUMBERED_SYMBOL_IN_MENU = 0; # extension for nodes files when NODE_FILES is true $NODE_FILE_EXTENSION = 'html'; # extension $EXTENSION = 'html'; # file name used for Top node when NODE_FILES is true $TOP_NODE_FILE = 'index'; # node name used for Top node when automatic node directions are used $TOP_NODE_UP = '(dir)'; # this controls the pre style for menus $MENU_PRE_STYLE = 'font-family: serif'; # on bug-texinfo is has been said the the style is not code_style # for menus (except for the node name). # this controls the menu preformatted format # FIXME this is not dynamic, so change in MENU_PRE_STYLE is not taken # into account. $MENU_PRE_COMPLEX_FORMAT = { 'pre_style' => $MENU_PRE_STYLE, 'class' => 'menu-preformatted', # 'style' => 'code' }; # This controls the ul style for toc $NO_BULLET_LIST_STYLE = 'list-style: none'; $NO_BULLET_LIST_ATTRIBUTE = ' class="toc"'; # These lines are inserted before and after the shortcontents $BEFORE_OVERVIEW = "
    \n"; $AFTER_OVERVIEW = "
    \n"; # These lines are inserted before and after the contents $BEFORE_TOC_LINES = "
    \n"; $AFTER_TOC_LINES = "
    \n"; # if set (e.g., to index.html) replace hrefs to this file # (i.e., to index.html) by ./ # Obsolete. Worked around a bug that is fixed now. $HREF_DIR_INSTEAD_FILE = ''; # text inserted after $AFTER_BODY_OPEN = ''; # text inserted before , this will be automatically inside

    $PRE_BODY_CLOSE = ''; # this is added inside after and some <meta name> # stuff, it can be used for eg. <style>, <script>, <meta> etc. tags. $EXTRA_HEAD = ''; # Specifies the minimum page length required before a navigation panel # is placed at the bottom of a page # FIXME this is not true: # THIS_WORDS_IN_PAGE holds number of words of current page $WORDS_IN_PAGE = 300; # if this is set a vertical navigation panel is used. $VERTICAL_HEAD_NAVIGATION = 0; # html version for latex2html $L2H_HTML_VERSION = "4.0"; # use the information given by menus to complete the node directions $USE_MENU_DIRECTIONS = 1; # try up sections to complete the node directions $USE_UP_FOR_ADJACENT_NODES = 1; # use accesskey in hrefs $USE_ACCESSKEY = 0; # use rel= and rev= in hrefs. Currently only rel is used $USE_REL_REV = 0; # generate <link> elements in head $USE_LINKS = 0; # specify in this array which "buttons" should appear in which order # in the navigation panel for sections; use ' ' for empty buttons (space) @SECTION_BUTTONS = ( 'Back', 'Forward', ' ', 'FastBack', 'Up', 'FastForward', ' ', ' ', ' ', ' ', 'Top', 'Contents', 'Index', 'About', ); # buttons for misc stuff @MISC_BUTTONS = ('Top', 'Contents', 'Index', 'About'); # buttons for chapter file footers # (and headers but only if SECTION_NAVIGATION is false) @CHAPTER_BUTTONS = ( 'FastBack', 'FastForward', ' ', ' ', ' ', ' ', ' ', 'Top', 'Contents', 'Index', 'About', ); # buttons for section file footers @SECTION_FOOTER_BUTTONS = ( 'Back', 'Forward', ' ', 'FastBack', 'Up', 'FastForward' ); @NODE_FOOTER_BUTTONS = ( 'Back', 'Forward', ' ', 'FastBack', 'Up', 'FastForward', ' ', ' ', ' ', ' ', 'Top', 'Contents', 'Index', 'About', # 'Back', 'Forward', ' ', 'FastBack', 'Up', 'FastForward' ); @LINKS_BUTTONS = ( 'Top', 'Index', 'Contents', 'About', 'Up', 'NextFile', 'PrevFile' ); $ICONS = 0; # insert here name of icon images for buttons # Icons are used, if $ICONS and resp. value are set %ACTIVE_ICONS = ( 'Top', '', 'Contents', '', 'Overview', '', 'Index', '', 'This', '', 'Back', '', 'FastBack', '', 'Prev', '', 'Up', '', 'Next', '', 'NodeUp', '', 'NodeNext', '', 'NodePrev', '', 'Following', '', 'Forward', '', 'FastForward', '', 'About' , '', 'First', '', 'Last', '', 'NextFile', '', 'PrevFile', '', ' ', '', ); # insert here name of icon images for these, if button is inactive %PASSIVE_ICONS = ( 'Top', '', 'Contents', '', 'Overview', '', 'Index', '', 'This', '', 'Back', '', 'FastBack', '', 'Prev', '', 'Up', '', 'Next', '', 'NodeUp', '', 'NodeNext', '', 'NodePrev', '', 'Following', '', 'Forward', '', 'FastForward', '', 'About', '', 'First', '', 'Last', '', 'NextFile', '', 'PrevFile', '', ); @IMAGE_EXTENSIONS = ('png','jpg','jpeg','gif'); #, 'txt'); %misc_pages_targets = ( 'Overview' => 'SEC_Overview', 'Contents' => 'SEC_Contents', 'Footnotes' => 'SEC_Foot', 'About' => 'SEC_About' ); $init_out = \&t2h_default_init_out; $finish_out = \&t2h_default_finish_out; $translate_names = \&t2h_default_translate_names; sub t2h_default_translate_names() { # Names of text as alternative for icons # FIXME maybe get those in simple_format? %NAVIGATION_TEXT = ( 'Top', &$I('Top'), 'Contents', &$I('Contents'), 'Overview', &$I('Overview'), 'Index', &$I('Index'), ' ', '   ', 'This', &$I('current'), 'Back', ' < ', 'FastBack', ' << ', 'Prev', &$I('Prev'), 'Up', &$I(' Up '), 'Next', &$I('Next'), 'NodeUp', &$I('Node up'), 'NodeNext', &$I('Next node'), 'NodePrev', &$I('Previous node'), 'Following', &$I('Following node'), 'Forward', ' > ', 'FastForward', ' >> ', 'About', ' ? ', 'First', ' |< ', 'Last', ' >| ', 'NextFile', &$I('Next file'), 'PrevFile', &$I('Previous file'), ); %BUTTONS_GOTO = ( 'Top', &$I('Cover (top) of document'), 'Contents', &$I('Table of contents'), 'Overview', &$I('Short table of contents'), 'Index', &$I('Index'), 'This', &$I('Current section'), 'Back', &$I('Previous section in reading order'), 'FastBack', &$I('Beginning of this chapter or previous chapter'), 'Prev', &$I('Previous section on same level'), 'Up', &$I('Up section'), 'Next', &$I('Next section on same level'), 'NodeUp', &$I('Up node'), 'NodeNext', &$I('Next node'), 'NodePrev', &$I('Previous node'), 'Following', &$I('Node following in node reading order'), 'Forward', &$I('Next section in reading order'), 'FastForward', &$I('Next chapter'), 'About' , &$I('About (help)'), 'First', &$I('First section in reading order'), 'Last', &$I('Last section in reading order'), 'NextFile', &$I('Forward section in next file'), 'PrevFile', &$I('Back section in previous file'), ); %BUTTONS_NAME = ( 'Top', &$I('Top'), 'Contents', &$I('Contents'), 'Overview', &$I('Overview'), 'Index', &$I('Index'), ' ', ' ', 'This', &$I('This'), 'Back', &$I('Back'), 'FastBack', &$I('FastBack'), 'Prev', &$I('Prev'), 'Up', &$I('Up'), 'Next', &$I('Next'), 'NodeUp', &$I('NodeUp'), 'NodeNext', &$I('NodeNext'), 'NodePrev', &$I('NodePrev'), 'Following', &$I('Following'), 'Forward', &$I('Forward'), 'FastForward', &$I('FastForward'), 'About', &$I('About'), 'First', &$I('First'), 'Last', &$I('Last'), 'NextFile', &$I('NextFile'), 'PrevFile', &$I('PrevFile'), ); %BUTTONS_ACCESSKEY = ( 'Top', '', 'Contents', '', 'Overview', '', 'Index', '', 'This', '', 'Back', 'p', 'FastBack', '', 'Prev', 'p', 'Up', 'u', 'Next', 'n', 'NodeUp', 'u', 'NodeNext', 'n', 'NodePrev', 'p', 'Following', '', 'Forward', 'n', 'FastForward', '', 'About' , '', 'First', '', 'Last', '', 'NextFile', '', 'PrevFile', '', ); # see http://www.w3.org/TR/REC-html40/types.html#type-links %BUTTONS_REL = ( 'Top', 'start', 'Contents', 'contents', 'Overview', '', 'Index', 'index', 'This', '', 'Back', 'previous', 'FastBack', '', 'Prev', 'previous', 'Up', 'up', 'Next', 'next', 'NodeUp', 'up', 'NodeNext', 'next', 'NodePrev', 'previous', 'Following', '', 'Forward', 'next', 'FastForward', '', 'About' , 'help', 'First', '', 'Last', '', 'NextFile', 'next', 'PrevFile', 'previous', ); } # is used in main program for dumping texi too. sub t2h_default_set_out_encoding() { # these variables are used for the corresponding # $Texi2HTML::THISDOC{'*_ENCODING'} to keep code shorter my ($out_encoding, $encoding_name, $document_encoding); if (defined($DOCUMENT_ENCODING)) { $document_encoding = $DOCUMENT_ENCODING; } elsif (defined($Texi2HTML::THISDOC{'documentencoding'})) { $document_encoding = $Texi2HTML::THISDOC{'documentencoding'}; } if (defined($OUT_ENCODING)) { $out_encoding = $OUT_ENCODING; } if (defined($ENCODING_NAME)) { $encoding_name = $ENCODING_NAME; } if (!defined($out_encoding) and (defined($encoding_name))) { $out_encoding = main::encoding_alias ($encoding_name); $out_encoding = $encoding_name if (!defined($out_encoding)); } if (!defined($out_encoding) and (defined($Texi2HTML::THISDOC{'IN_ENCODING'}))) { $out_encoding = $Texi2HTML::THISDOC{'IN_ENCODING'}; } if (!defined($out_encoding) and (defined($document_encoding))) { $out_encoding = main::encoding_alias ($document_encoding); $out_encoding = $document_encoding if (!defined($out_encoding)); } if (!defined($encoding_name)) { if (defined($out_encoding) and defined($perl_charset_to_html{$out_encoding})) { $encoding_name = $perl_charset_to_html{$out_encoding}; } elsif (defined($Texi2HTML::THISDOC{'IN_ENCODING'}) and defined($perl_charset_to_html{$Texi2HTML::THISDOC{'IN_ENCODING'}})) { $encoding_name = $perl_charset_to_html{$Texi2HTML::THISDOC{'IN_ENCODING'}}; } elsif (defined($document_encoding) and defined($perl_charset_to_html{$document_encoding})) { $encoding_name = $perl_charset_to_html{$document_encoding}; } elsif (defined($out_encoding)) { $encoding_name = $out_encoding; } elsif (defined($Texi2HTML::THISDOC{'IN_ENCODING'})) { $encoding_name = $Texi2HTML::THISDOC{'IN_ENCODING'}; } elsif (defined($document_encoding)) { $encoding_name = $document_encoding; } elsif (defined($perl_charset_to_html{$DEFAULT_ENCODING})) { $encoding_name = $perl_charset_to_html{$DEFAULT_ENCODING}; } else { $encoding_name = 'us-ascii'; } } $Texi2HTML::THISDOC{'OUT_ENCODING'} = $out_encoding; $Texi2HTML::THISDOC{'ENCODING_NAME'} = $encoding_name; $Texi2HTML::THISDOC{'DOCUMENT_ENCODING'} = $document_encoding; $out_encoding = 'UNDEF' if (!defined($out_encoding)); my $in_encoding = $Texi2HTML::THISDOC{'IN_ENCODING'}; $in_encoding = 'UNDEF' if (!defined($in_encoding)); $document_encoding = 'UNDEF' if (!defined($document_encoding)); print STDERR "# Encodings: doc $document_encoding, in $in_encoding out $out_encoding, name $encoding_name\n" if ($VERBOSE); } my @t2h_default_multitable_stack; # We have to do this dynamically because of internationalization and because # in body $LANG could be used. sub t2h_default_init_out() { @t2h_default_multitable_stack = (); &$translate_names; # Set the default body text, inserted between <body ... > if (defined($BODYTEXT)) { $Texi2HTML::THISDOC{'BODYTEXT'} = $BODYTEXT; } else { $Texi2HTML::THISDOC{'BODYTEXT'} = 'lang="' . $Texi2HTML::THISDOC{'current_lang'} . '" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000"'; } if (!defined($EXTERNAL_CROSSREF_SPLIT)) { if ($SPLIT) { $Texi2HTML::THISDOC{'EXTERNAL_CROSSREF_SPLIT'} = 1; } else { $Texi2HTML::THISDOC{'EXTERNAL_CROSSREF_SPLIT'} = 0; } } else { $Texi2HTML::THISDOC{'EXTERNAL_CROSSREF_SPLIT'} = $EXTERNAL_CROSSREF_SPLIT; } t2h_default_set_out_encoding(); # not in code_style, according to post on bug-texinfo if ($SIMPLE_MENU) { foreach my $format ('menu', 'detailmenu') { if (!defined($complex_format_map->{$format})) { $complex_format_map->{$format} = { 'begin' => q{''} , 'end' => q{''}, 'pre_style' => "$MENU_PRE_STYLE", 'class' => 'menu-preformatted', # 'style' => 'code' }; } } #$SEPARATE_DESCRIPTION = 1; #$format_map{'menu_comment'} = '' if (!defined($format_map{'menu_comment'})); } elsif (!defined($format_map{'menu_comment'}) and !defined($complex_format_map->{'menu_comment'})) { $complex_format_map->{'menu_comment'} = { 'begin' => q{"<tr><th colspan=\"3\" align=\"left\" valign=\"top\">"}, 'end' => q{"</th></tr>"}, 'pre_style' => "$MENU_PRE_STYLE", 'class' => 'menu-comment', # 'style' => 'code' } } # obsolete #return $OUT_ENCODING; }; sub t2h_default_finish_out() { } ####################################################################### # # Values guessed if not set here. The value used is in # $Texi2HTML::THISDOC{'VARNAME'} # ####################################################################### $BODYTEXT = undef; # default used in init_out for the setting of the ENCODING_NAME variable $DEFAULT_ENCODING = 'utf8'; # In file encoding. The @documentencoding allows autodetection of # that variable. $DOCUMENT_ENCODING = undef; # In file encoding, understandable by perl. Set according to DOCUMENT_ENCODING $IN_ENCODING = undef; # Formatted document encoding name. If undef, set in init_out based on # $OUT_ENCODING or $DOCUMENT_ENCODING if they are defined $ENCODING_NAME = undef; # Out files encoding, understandable by perl. If undef, set in init_out # using $ENCODING_NAME or $IN_ENCODING if they are defined $OUT_ENCODING = undef; # Used to set $Texi2HTML::THISDOC{'DOCUMENT_DESCRIPTION'}. # if undef set to @documentdescription. If there is no @documentdescription, # set in page_head. $DOCUMENT_DESCRIPTION = undef; # if undef $Texi2HTML::THISDOC{'EXTERNAL_CROSSREF_SPLIT'} set 1 if SPLIT, # to 0 otherwise $EXTERNAL_CROSSREF_SPLIT = undef; $USER = undef; $DATE = undef; ######################################################################## # Control of Page layout: # You can make changes of the Page layout at two levels: # 1.) For small changes, it is often enough to change the value of # some global string/hash/array variables # 2.) For larger changes, reimplement one of the T2H_DEFAULT_<fnc>* routines, # give them another name, and assign them to the respective # $<fnc> variable. # As a general interface, the hashes Texi2HTML::HREF, Texi2HTML::NAME, Texi2HTML::NODE, Texi2HTML::NO_TEXI, Texi2HTML::SIMPLE_TEXT hold # href, html-name, node-name, name after removal of texi commands of # This -- current section (resp. html page) # Top -- top element # Contents -- Table of contents element # Overview -- Short table of contents element # Index -- Index page element # About -- page which explain "navigation buttons" element # First -- first node element # Last -- last node element # # Whether or not the following hash values are set, depends on the context # (all values are w.r.t. 'This' section) # Next -- next element of texinfo # Prev -- previous element of texinfo # NodeUp -- up node of texinfo # Following -- following node in node reading order, taking menu into account # Forward -- next node in reading order # Back -- previous node in reading order # Up -- parent given by sectionning commands # FastForward -- if leave node, up and next, else next node # FastBackward-- if leave node, up and prev, else prev node # # Furthermore, the following global variabels are set: # $Texi2HTML::THISDOC{title} -- title as set by @title... # $Texi2HTML::THISDOC{title_no_texi} -- title without texi (without html elements) # $Texi2HTML::THISDOC{title_texi} -- title with texinfo @-commands # $Texi2HTML::THISDOC{fulltitle} -- full title as set by @title... # $Texi2HTML::THISDOC{subtitle} -- subtitle as set by @subtitle # $Texi2HTML::THISDOC{author} -- author as set by @author # $Texi2HTML::THISDOC{copying_comment} -- text of @copying and @end copying in comment # # $Texi2HTML::THISDOC{program} -- name and version of texi2html # $Texi2HTML::THISDOC{program_homepage} -- homepage for texi2html # $Texi2HTML::THISDOC{program_authors} -- authors of texi2html # $Texi2HTML::THISDOC{today} -- date formatted with pretty_date # $Texi2HTML::THISDOC{toc_file} -- table of contents file # $Texi2HTML::THISDOC{file_base_name} -- base name of the texinfo manual file # $Texi2HTML::THISDOC{input_file_name} -- name of the texinfo manual file # $Texi2HTML::THISDOC{destination_directory} # -- directory for the resulting files # $Texi2HTML::THISDOC{user} -- user running the script # $Texi2HTML::THISDOC{css_import_lines} -- ref on @import lines in css files # $Texi2HTML::THISDOC{css_lines} -- ref on css rules lines # other $Texi2HTML::THISDOC keys corresponds with texinfo commands, the value # being the command arg, for the following commands: # kbdinputstyle, paragraphindent, setchapternewpage, headings, footnotestyle, # exampleindent, firstparagraphindent, everyheading, everyfooting, # evenheading, evenfooting, oddheading, oddfooting # # and pointer to arrays of lines which need to be printed by main::print_lines # $Texi2HTML::THIS_SECTION -- lines of 'This' section # $Texi2HTML::OVERVIEW -- lines of short table of contents # $Texi2HTML::TOC_LINES -- lines of table of contents # $Texi2HTML::TITLEPAGE -- lines of title page # # $Texi2HTML::THIS_ELEMENT holds the element reference. # # There are the following subs which control the layout: # $print_section = \&T2H_DEFAULT_print_section; $end_section = \&T2H_DEFAULT_end_section; $one_section = \&T2H_DEFAULT_one_section; $print_Top_header = \&T2H_DEFAULT_print_Top_header; $print_Top_footer = \&T2H_DEFAULT_print_Top_footer; $print_Top = \&T2H_DEFAULT_print_Top; $print_Toc = \&T2H_DEFAULT_print_Toc; $print_Overview = \&T2H_DEFAULT_print_Overview; $print_Footnotes = \&T2H_DEFAULT_print_Footnotes; $print_About = \&T2H_DEFAULT_print_About; $print_misc_header = \&T2H_DEFAULT_print_misc_header; $print_misc_footer = \&T2H_DEFAULT_print_misc_footer; $print_misc = \&T2H_DEFAULT_print_misc; $print_section_footer = \&T2H_DEFAULT_print_section_footer; $print_chapter_header = \&T2H_DEFAULT_print_chapter_header; $print_section_header = \&T2H_DEFAULT_print_section_header; $print_element_header = \&T2H_DEFAULT_print_element_header; $print_chapter_footer = \&T2H_DEFAULT_print_chapter_footer; $print_page_head = \&T2H_DEFAULT_print_page_head; $print_page_foot = \&T2H_DEFAULT_print_page_foot; $print_head_navigation = \&T2H_DEFAULT_print_head_navigation; $print_foot_navigation = \&T2H_DEFAULT_print_foot_navigation; $button_icon_img = \&T2H_DEFAULT_button_icon_img; $print_navigation = \&T2H_DEFAULT_print_navigation; $about_body = \&T2H_DEFAULT_about_body; $print_frame = \&T2H_DEFAULT_print_frame; $print_toc_frame = \&T2H_DEFAULT_print_toc_frame; #$toc_body = \&T2H_DEFAULT_toc_body; $titlepage = \&T2H_DEFAULT_titlepage; $css_lines = \&T2H_DEFAULT_css_lines; $print_redirection_page = \&T2H_DEFAULT_print_redirection_page; $node_file_name = \&T2H_DEFAULT_node_file_name; $inline_contents = \&T2H_DEFAULT_inline_contents; $program_string = \&T2H_DEFAULT_program_string; ######################################################################## # Layout for html for every sections # sub T2H_DEFAULT_print_element_header { my $first_in_page = shift; my $previous_is_top = shift; my $buttons = \@SECTION_BUTTONS; if (($first_in_page or $previous_is_top) and $SECTION_NAVIGATION) { return &$print_head_navigation(undef, $buttons); } else { # got to do this here, as it isn't done in print_head_navigation return &$print_navigation($buttons) if ($SECTION_NAVIGATION or $SPLIT eq 'node'); } } sub T2H_DEFAULT_print_section { my $fh = shift; my $first_in_page = shift; my $previous_is_top = shift; my $element = shift; my $buttons = \@SECTION_BUTTONS; my $nw = main::print_lines($fh); if (defined $SPLIT and (($SPLIT eq 'node') && $SECTION_NAVIGATION)) { my $buttons = \@NODE_FOOTER_BUTTONS; &$print_foot_navigation($fh, $buttons, $SMALL_RULE, (!defined($WORDS_IN_PAGE) or (defined ($nw) and $nw >= $WORDS_IN_PAGE)), $element); # print $fh "$SMALL_RULE\n"; # &$print_navigation($buttons) if (!defined($WORDS_IN_PAGE) or (defined ($nw) # and $nw >= $WORDS_IN_PAGE)); } } sub T2H_DEFAULT_one_section($$) { my $fh = shift; my $element = shift; main::print_lines($fh); print $fh "$SMALL_RULE\n"; &$print_page_foot($fh); } ################################################################### # Layout of top-page I recommend that you use @ifnothtml, @ifhtml, # @html within the Top texinfo node to specify content of top-level # page. # # If you enclose everything in @ifnothtml, then title, subtitle, # author and overview is printed # Texi2HTML::HREF of Next, Prev, Up, Forward, Back are not defined # if $T2H_SPLIT then Top page is in its own html file sub T2H_DEFAULT_print_Top_header($$) { my $fh = shift; my $do_page_head = shift; &$print_page_head($fh) if ($do_page_head); } sub T2H_DEFAULT_print_Top_footer($$$) { my $fh = shift; my $end_page = shift; my $element = shift; my $buttons = \@MISC_BUTTONS; &$print_foot_navigation($fh, $buttons, $SMALL_RULE, ($end_page and ($SECTION_NAVIGATION or ($SPLIT and $SPLIT ne 'node'))), $element); # &$print_foot_navigation($fh); # print $fh "$SMALL_RULE\n"; if ($end_page) { # &$print_navigation($fh, $buttons); &$print_page_foot($fh); } } sub T2H_DEFAULT_print_Top($$$) { my $fh = shift; my $has_top_heading = shift; my $element = shift; # for redefining navigation buttons use: # my $buttons = [...]; # as it is, 'Top', 'Contents', 'Index', 'About' are printed my $buttons = \@MISC_BUTTONS; my $nw; # a dirty hack. A section is considered to be empty if there are 2 # lines or less in it. Indeed, this catches the sectionning command like # @top and the @node. if (scalar(@$Texi2HTML::THIS_SECTION) > 2) { # if top-level node has content $nw = main::print_lines($fh, $Texi2HTML::THIS_SECTION); } else { # top-level node is fully enclosed in @ifnothtml # print fulltitle, subtitle, author, Overview or table of contents # redo the titlepage with the actual state my ($titlepage_text, $titlepage_no_texi, $titlepage_simple_format) = main::do_special_region_lines('titlepage',$Texi2HTML::THISDOC{'state'}); &$titlepage([],$titlepage_text, $titlepage_no_texi, $titlepage_simple_format); # only print the header and node label print $fh $Texi2HTML::THIS_SECTION->[0]; print $fh $Texi2HTML::TITLEPAGE; if (@{$Texi2HTML::OVERVIEW} and !$Texi2HTML::THISDOC{'setshortcontentsaftertitlepage'}) { print $fh '<h2> ' . $Texi2HTML::NAME{'Overview'} . "</h2>\n" . "<blockquote\n"; my $nw = main::print_lines($fh, $Texi2HTML::OVERVIEW); print $fh "</blockquote>\n"; } elsif (@{$Texi2HTML::TOC_LINES} and !$Texi2HTML::THISDOC{'setcontentsaftertitlepage'}) { print $fh '<h1> ' . $Texi2HTML::NAME{'Contents'} . "</h1>\n"; my $nw = main::print_lines($fh, $Texi2HTML::TOC_LINES); } } } ################################################################### # Layout of Toc, Overview, and Footnotes pages # By default, we use "normal" layout # Texi2HTML::HREF of Next, Prev, Up, Forward, Back, etc are not defined # use: my $buttons = [...] to redefine navigation buttons sub T2H_DEFAULT_print_Toc { return &$print_misc(@_); } sub T2H_DEFAULT_print_Overview { return &$print_misc(@_); } sub T2H_DEFAULT_print_Footnotes { return &$print_misc(@_); } sub T2H_DEFAULT_print_About { # if there is no section navigation and it is not split, the # navigation information is useless return &$print_misc(@_) if ($SPLIT or $SECTION_NAVIGATION); } sub T2H_DEFAULT_print_misc_header { my $fh = shift; my $buttons = shift; my $new_file = shift; my $misc_page = shift; &$print_page_head($fh) if ($new_file); print $fh "".&$misc_element_label($misc_pages_targets{$misc_page}, $misc_page); &$print_head_navigation($fh, $buttons) if ($new_file or $SECTION_NAVIGATION); } sub T2H_DEFAULT_print_misc_footer { my $fh = shift; my $buttons = shift; my $new_file = shift; &$print_foot_navigation($fh, $buttons, $SMALL_RULE, ($new_file and ($SECTION_NAVIGATION or ($SPLIT and $SPLIT ne 'node'))), undef); # print $fh "$SMALL_RULE\n"; if ($new_file) { # &$print_navigation($fh, $buttons);# if ($SPLIT ne 'node'); &$print_page_foot($fh); } } sub T2H_DEFAULT_print_misc { my $fh = shift; my $new_file = shift; my $misc_page = shift; my $buttons = \@MISC_BUTTONS; &$print_misc_header($fh, $buttons, $new_file, $misc_page); print $fh "<h1>$Texi2HTML::NAME{This}</h1>\n"; main::print_lines($fh); &$print_misc_footer($fh, $buttons, $new_file); } ################################################################## # section_footer is only called if SPLIT eq 'section' # section_footer: after print_section of last section, before print_page_foot # sub T2H_DEFAULT_print_section_footer { my $fh = shift; my $element = shift; my $buttons = \@SECTION_FOOTER_BUTTONS; &$print_foot_navigation($fh, $buttons, $BIG_RULE, 1, $element); # &$end_section ($fh, 1, $element); # &$print_navigation($fh, $buttons); } ################################################################### # chapter_header and chapter_footer are only called if # SPLIT eq 'chapter' # chapter_header: after print_page_head, before print_section # chapter_footer: after print_section of last section, before print_page_foot # # If you want to get rid of navigation stuff after each section, # redefine print_section such that it does not call print_navigation, # and put print_navigation into print_chapter_header sub T2H_DEFAULT_print_chapter_header { my $fh = shift; my $element = shift; # nothing to do there, by default, the navigation panel # is the section navigation panel if (! $SECTION_NAVIGATION) { # in this case print_navigation is called here. my $buttons = \@CHAPTER_BUTTONS; &$print_head_navigation($fh, $buttons); print $fh "\n$MIDDLE_RULE\n" unless ($VERTICAL_HEAD_NAVIGATION); } } sub T2H_DEFAULT_print_chapter_footer { my $fh = shift; my $element = shift; my $buttons = \@CHAPTER_BUTTONS; &$print_foot_navigation($fh, $buttons, $BIG_RULE, 1, $element); # print $fh "$BIG_RULE\n"; # &$print_navigation($fh, $buttons); } sub T2H_DEFAULT_print_section_header { # nothing to do there, by default if (! $SECTION_NAVIGATION) { # in this case print_navigation is called here. my $fh = shift; my $buttons = \@SECTION_BUTTONS; &$print_head_navigation($fh, $buttons); } } ################################################################### # Layout of standard header and footer # sub T2H_DEFAULT_print_page_head($) { my $fh = shift; my $longtitle = "$Texi2HTML::THISDOC{'fulltitle_simple_format'}"; $longtitle .= ": $Texi2HTML::SIMPLE_TEXT{'This'}" if (defined ($Texi2HTML::SIMPLE_TEXT{'This'}) and ($Texi2HTML::SIMPLE_TEXT{'This'} !~ /^\s*$/) and $SPLIT); my $description = $Texi2HTML::THISDOC{'DOCUMENT_DESCRIPTION'}; $description = $longtitle if (!defined($description)); $description = "<meta name=\"description\" content=\"$description\">" if ($description ne ''); my $encoding = ''; $encoding = "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=$Texi2HTML::THISDOC{'ENCODING_NAME'}\">" if (defined($Texi2HTML::THISDOC{'ENCODING_NAME'}) and ($Texi2HTML::THISDOC{'ENCODING_NAME'} ne '')); my $links = ''; if ($USE_LINKS) { foreach my $link (@LINKS_BUTTONS) { #print STDERR "$link!!$Texi2HTML::HREF{$link}\n"; if (defined($Texi2HTML::HREF{$link}) and $Texi2HTML::HREF{$link} ne '') { my $title = ''; $title = " title=\"$Texi2HTML::SIMPLE_TEXT{$link}\"" if (defined($Texi2HTML::SIMPLE_TEXT{$link})); my $rel = ''; $rel = " rel=\"$BUTTONS_REL{$link}\"" if (defined($BUTTONS_REL{$link})); $links .= "<link href=\"$Texi2HTML::HREF{$link}\"${rel}${title}>\n"; } } } print $fh <<EOT; $DOCTYPE <html> $Texi2HTML::THISDOC{'copying_comment'}<!-- Created on $Texi2HTML::THISDOC{today} by $Texi2HTML::THISDOC{program} $Texi2HTML::THISDOC{program_authors}--> <head> <title>$longtitle $description $encoding ${links}$Texi2HTML::THISDOC{'CSS_LINES'} $EXTRA_HEAD $AFTER_BODY_OPEN EOT } sub T2H_DEFAULT_program_string() { my $user = $Texi2HTML::THISDOC{'user'}; my $date = $Texi2HTML::THISDOC{'today'}; $user = '' if (!defined($user)); $date = '' if (!defined($date)); if (($user ne '') and ($date ne '')) { return &$I('This document was generated by @emph{%{user}} on @emph{%{date}} using @uref{%{program_homepage}, @emph{%{program}}}.', { 'user' => $user, 'date' => $date, 'program_homepage' => $Texi2HTML::THISDOC{'program_homepage'}, 'program' => $Texi2HTML::THISDOC{'program'} }, {'duplicate'=>1}); } elsif ($user ne '') { return &$I('This document was generated by @emph{%{user}} using @uref{%{program_homepage}, @emph{%{program}}}.', { 'user' => $user, 'program_homepage' => $Texi2HTML::THISDOC{'program_homepage'}, 'program' => $Texi2HTML::THISDOC{'program'} }, {'duplicate'=>1}); } elsif ($date ne '') { return &$I('This document was generated on @i{%{date}} using @uref{%{program_homepage}, @i{%{program}}}.', { 'date' => $date, 'program_homepage' => $Texi2HTML::THISDOC{'program_homepage'}, 'program' => $Texi2HTML::THISDOC{'program'} },{'duplicate'=>1}); } return &$I('This document was generated using @uref{%{program_homepage}, @emph{%{program}}}.', { 'program_homepage' => $Texi2HTML::THISDOC{'program_homepage'}, 'program' => $Texi2HTML::THISDOC{'program'} },{'duplicate'=>1}); } sub T2H_DEFAULT_end_section($$$) { my $fh = shift; my $misc_and_section_separation = shift; my $element = shift; #&$print_foot_navigation($fh) if ($end_foot_navigation); #print $fh "$BIG_RULE\n"; if ($misc_and_section_separation) { &$print_foot_navigation($fh, undef, $BIG_RULE, 0, $element); } else { print $fh "$BIG_RULE\n"; } } sub T2H_DEFAULT_print_page_foot($) { my $fh = shift; my $program_string = &$program_string(); print $fh < $program_string
    $PRE_BODY_CLOSE

    EOT } ################################################################### # Layout of navigation panel sub T2H_DEFAULT_print_head_navigation($$) { my $fh = shift; my $buttons = shift; my $result = ''; if ($VERTICAL_HEAD_NAVIGATION) { $result .= < EOT } $result .= &$print_navigation($buttons, $VERTICAL_HEAD_NAVIGATION); if ($VERTICAL_HEAD_NAVIGATION) { $result .= < EOT } elsif (defined $SPLIT and ($SPLIT eq 'node')) { $result .= "$SMALL_RULE\n"; } print $fh $result if (defined($fh)); return $result; } sub T2H_DEFAULT_print_foot_navigation { my $fh = shift; my $buttons = shift; my $rule = shift; my $print_navigation_panel = shift; my $element = shift; $rule = '' if (!defined($rule)); $print_navigation_panel = 1 if (!defined($print_navigation_panel) and defined($buttons)); if ($VERTICAL_HEAD_NAVIGATION) { print $fh < EOT } print $fh "$rule\n" if ($rule ne ''); print $fh "".&$print_navigation($buttons) if ($print_navigation_panel); } ###################################################################### # navigation panel # # how to create IMG tag sub T2H_DEFAULT_button_icon_img { my $button = shift; my $icon = shift; my $name = shift; return '' if (!defined($icon)); $button = "" if (!defined ($button)); $name = '' if (!defined($name)); my $alt = ''; if ($name ne '') { if ($button ne '') { $alt = "$button: $name"; } else { $alt = $name; } } else { $alt = $button; } return qq{$alt}; } sub T2H_DEFAULT_print_navigation { my $buttons = shift; my $vertical = shift; my $result = ''; $result .= ''."\n"; $result .= "" unless $vertical; for my $button (@$buttons) { $result .= qq{\n} if $vertical; $result .= qq{\n"; $result .= "\n" if $vertical; } $result .= "" unless $vertical; $result .= "
    }; if (ref($button) eq 'CODE') { $result .= &$button($vertical); } elsif (ref($button) eq 'SCALAR') { $result .= "$$button" if defined($$button); } elsif (ref($button) eq 'ARRAY') { my $text = $button->[1]; my $button_href = $button->[0]; # verify that $button_href is simple text and text is a reference if (defined($button_href) and !ref($button_href) and defined($text) and (ref($text) eq 'SCALAR') and defined($$text)) { # use given text if ($Texi2HTML::HREF{$button_href}) { my $anchor_attributes = ''; if ($USE_ACCESSKEY and (defined($BUTTONS_ACCESSKEY{$button_href})) and ($BUTTONS_ACCESSKEY{$button_href} ne '')) { $anchor_attributes = "accesskey=\"$BUTTONS_ACCESSKEY{$button_href}\""; } if ($USE_REL_REV and (defined($BUTTONS_REL{$button_href})) and ($BUTTONS_REL{$button_href} ne '')) { $anchor_attributes .= " rel=\"$BUTTONS_REL{$button_href}\""; } $result .= "" . &$anchor('', $Texi2HTML::HREF{$button_href}, $$text, $anchor_attributes ) ; } else { $result .= $$text; } } } elsif ($button eq ' ') { # handle space button $result .= ($ICONS && $ACTIVE_ICONS{' '}) ? &$button_icon_img($BUTTONS_NAME{$button}, $ACTIVE_ICONS{' '}) : $NAVIGATION_TEXT{' '}; #next; } elsif ($Texi2HTML::HREF{$button}) { # button is active my $btitle = $BUTTONS_GOTO{$button} ? 'title="' . $BUTTONS_GOTO{$button} . '"' : ''; if ($USE_ACCESSKEY and (defined($BUTTONS_ACCESSKEY{$button})) and ($BUTTONS_ACCESSKEY{$button} ne '')) { $btitle .= " accesskey=\"$BUTTONS_ACCESSKEY{$button}\""; } if ($USE_REL_REV and (defined($BUTTONS_REL{$button})) and ($BUTTONS_REL{$button} ne '')) { $btitle .= " rel=\"$BUTTONS_REL{$button}\""; } if ($ICONS && $ACTIVE_ICONS{$button}) { # use icon $result .= '' . &$anchor('', $Texi2HTML::HREF{$button}, &$button_icon_img($BUTTONS_NAME{$button}, $ACTIVE_ICONS{$button}, $Texi2HTML::SIMPLE_TEXT{$button}), $btitle ); } else { # use text $result .= '[' . &$anchor('', $Texi2HTML::HREF{$button}, $NAVIGATION_TEXT{$button}, $btitle ) . ']'; } } else { # button is passive $result .= $ICONS && $PASSIVE_ICONS{$button} ? &$button_icon_img($BUTTONS_NAME{$button}, $PASSIVE_ICONS{$button}, $Texi2HTML::SIMPLE_TEXT{$button}) : "[" . $NAVIGATION_TEXT{$button} . "]"; } $result .= "
    \n"; return $result; } ###################################################################### # Frames: this is from "Richard Y. Kim" # Should be improved to be more conforming to other _print* functions # toc_file and main_file passed as args are relative to the texinfo manual # location, and therefore are not used. sub T2H_DEFAULT_print_frame { my $fh = shift; my $toc_file = shift; my $main_file = shift; $main_file = $Texi2HTML::THISDOC{'filename'}->{'top'}; $toc_file = $Texi2HTML::THISDOC{'filename'}->{'toc_frame'}; print $fh < $Texi2HTML::THISDOC{'fulltitle'} EOT } sub T2H_DEFAULT_print_toc_frame { my $fh = shift; my $stoc_lines = shift; &$print_page_head($fh); print $fh <Content EOT print $fh map {s/\bhref=/target="main" href=/; $_;} @$stoc_lines; print $fh "\n"; } # This subroutine is intended to fill @Texi2HTML::TOC_LINES and # @Texi2HTML::OVERVIEW with the table of contents and short table of # contents. # # arguments: # ref on an array containing all the elements # each element is a reference on a hash. The following keys might be of # use: # 'top': true if this is the top element # 'toc_level': level of the element in the table of content. Highest level # is 1 for the @top element and for chapters, appendix and so on, # 2 for section, unnumberedsec and so on... # 'tocid': label used for reference linking to the element in table of # contents # 'file': the file containing the element, usefull to do href to that file # in case the document is split. # 'text': text of the element, with section number # 'text_nonumber': text of the element, without section number # Relevant configuration variables are: # $NUMBER_SECTIONS # $NO_BULLET_LIST_ATTRIBUTE: usefull in case a list is used # $FRAMES: @Texi2HTML::OVERVIEW is used in one of the frames. # $BEFORE_OVERVIEW # $AFTER_OVERVIEW # $BEFORE_TOC_LINES # $AFTER_TOC_LINES # $DO_CONTENTS # $DO_SCONTENTS sub T2H_DEFAULT_toc_body($) { } sub T2H_DEFAULT_inline_contents($$$) { my $fh = shift; my $command = shift; my $element = shift; my $name; my $lines; my $result = undef; if ($command eq 'contents') { $name = $Texi2HTML::NAME{'Contents'}; $lines = $Texi2HTML::TOC_LINES; } else { $name = $Texi2HTML::NAME{'Overview'}; $lines = $Texi2HTML::OVERVIEW; } if (@{$lines}) { $result = [ "".&$anchor($element->{'id'})."\n", "

    $name

    \n" ]; push @$result, @$lines; } return $result; } sub T2H_DEFAULT_css_lines ($$) { my $import_lines = shift; my $rule_lines = shift; # return if (defined($CSS_LINES) or (!@$rule_lines and !@$import_lines and (! keys(%css_map)))); if (defined($CSS_LINES)) { # if predefined, use CSS_LINES. $Texi2HTML::THISDOC{'CSS_LINES'} = $CSS_LINES; return; } return if (!@$rule_lines and !@$import_lines and (! keys(%css_map))); my $css_lines = "\n"; foreach my $ref (@CSS_REFS) { $css_lines .= "\n"; } $Texi2HTML::THISDOC{'CSS_LINES'} = $css_lines; } ###################################################################### # About page # # PRE_ABOUT can be a function reference or a scalar. # Note that if it is a scalar, T2H_InitGlobals has not been called, # and all global variables like $ADDRESS are not available. $PRE_ABOUT = sub { return ' ' . &$program_string() . "\n"; }; # If customizing $AFTER_ABOUT, be sure to put the content inside

    . $AFTER_ABOUT = ''; %BUTTONS_EXAMPLE = ( 'Top', '   ', 'Contents', '   ', 'Overview', '   ', 'Index', '   ', 'This', '1.2.3', 'Back', '1.2.2', 'FastBack', '1', 'Prev', '1.2.2', 'Up', '1.2', 'Next', '1.2.4', 'NodeUp', '1.2', 'NodeNext', '1.2.4', 'NodePrev', '1.2.2', 'Following', '1.2.4', 'Forward', '1.2.4', 'FastForward', '2', 'About', '   ', 'First', '1.', 'Last', '1.2.4', 'NextFile', '   ', 'PrevFile', '   ', ); sub T2H_DEFAULT_about_body { my $about = "

    \n"; if (ref($PRE_ABOUT) eq 'CODE') { $about .= &$PRE_ABOUT(); } else { $about .= $PRE_ABOUT; } $about .= <

    EOT $about .= &$I(' The buttons in the navigation panels have the following meaning:') . "\n"; $about .= < EOT $about .= ' \n" . ' \n" . ' \n" . ' \n" . " \n"; for my $button (@SECTION_BUTTONS) { next if $button eq ' ' || ref($button) eq 'CODE' || ref($button) eq 'SCALAR' || ref($button) eq 'ARRAY'; $about .= " \n \n"; $about .= <$BUTTONS_NAME{$button} EOT } $about .= <

    EOT $about .= &$I(' where the @strong{ Example } assumes that the current position is at @strong{ Subsubsection One-Two-Three } of a document of the following structure:') . "\n"; # where the Example assumes that the current position # is at Subsubsection One-Two-Three of a document of # the following structure: $about .= <

      EOT $about .= '
    • 1. ' . &$I('Section One') . "\n" . "
        \n" . '
      • 1.1 ' . &$I('Subsection One-One') . "\n"; $about .= <
      • ...
    • EOT $about .= '
    • 1.2 ' . &$I('Subsection One-Two') . "\n" . "
        \n" . '
      • 1.2.1 ' . &$I('Subsubsection One-Two-One') . "
      • \n" . '
      • 1.2.2 ' . &$I('Subsubsection One-Two-Two') . "
      • \n" . '
      • 1.2.3 ' . &$I('Subsubsection One-Two-Three') . "    \n" . ' <== ' . &$I('Current Position') . "
      • \n" . '
      • 1.2.4 ' . &$I('Subsubsection One-Two-Four') . "
      • \n" . "
      \n" . "
    • \n" . '
    • 1.3 ' . &$I('Subsection One-Three') . "\n"; $about .= <
    • ...
    EOT $about .= '
  • 1.4 ' . &$I('Subsection One-Four') . "
  • \n"; $about .= < $AFTER_ABOUT EOT return $about; } # return value is currently ignored sub T2H_DEFAULT_titlepage($$$$) { my $titlepage_lines = shift; my $titlepage_text = shift; my $titlepage_no_texi = shift; my $titlepage_simple_format = shift; my $result = ''; my $title = ''; $title = $Texi2HTML::THISDOC{'title'} if (defined($Texi2HTML::THISDOC{'title'}) and $Texi2HTML::THISDOC{'title'} !~ /^\s*$/); if ($title ne '' or @{$Texi2HTML::THISDOC{'subtitles'}} or @{$Texi2HTML::THISDOC{'authors'}}) { $result = "
    \n"; if ($title ne '') { $result .= '

    ' . $title . "

    \n"; } foreach my $subtitle (@{$Texi2HTML::THISDOC{'subtitles'}}) { $result .= '

    ' . $subtitle . "

    \n"; } foreach my $author (@{$Texi2HTML::THISDOC{'authors'}}) { $result .= ' ' . $author . "
    \n"; } $result .= "
    \n$DEFAULT_RULE\n"; } $Texi2HTML::TITLEPAGE = $titlepage_text; $Texi2HTML::TITLEPAGE = $result . $Texi2HTML::TITLEPAGE; if ($Texi2HTML::THISDOC{'setcontentsaftertitlepage'} and (defined($Texi2HTML::THISDOC{'inline_contents'}->{'contents'})) and @{$Texi2HTML::THISDOC{'inline_contents'}->{'contents'}}) { foreach my $line(@{$Texi2HTML::THISDOC{'inline_contents'}->{'contents'}}) { $Texi2HTML::TITLEPAGE .= $line; } $Texi2HTML::TITLEPAGE .= "$DEFAULT_RULE\n"; } if ($Texi2HTML::THISDOC{'setshortcontentsaftertitlepage'} and (defined($Texi2HTML::THISDOC{'inline_contents'}->{'shortcontents'})) and @{$Texi2HTML::THISDOC{'inline_contents'}->{'shortcontents'}}) { foreach my $line(@{$Texi2HTML::THISDOC{'inline_contents'}->{'shortcontents'}}) { $Texi2HTML::TITLEPAGE .= $line; } $Texi2HTML::TITLEPAGE .= "$DEFAULT_RULE\n"; } return $Texi2HTML::TITLEPAGE; } # FIXME Honor DOCUMENT_DESCRIPTION? sub T2H_DEFAULT_print_redirection_page($) { my $fh = shift; my $longtitle = "$Texi2HTML::THISDOC{'fulltitle_simple_format'}"; $longtitle .= ": $Texi2HTML::SIMPLE_TEXT{'This'}" if exists $Texi2HTML::SIMPLE_TEXT{'This'}; my $description = $longtitle; my $encoding = ''; $encoding = "" if (defined($Texi2HTML::THISDOC{'ENCODING_NAME'}) and ($Texi2HTML::THISDOC{'ENCODING_NAME'} ne '')); my $href = &$anchor('', $Texi2HTML::HREF{'This'}, $Texi2HTML::NAME{'This'}); my $string = &$I('The node you are looking for is at %{href}.', { 'href' => $href }); print $fh < $longtitle $encoding $Texi2HTML::THISDOC{'CSS_LINES'} $EXTRA_HEAD $AFTER_BODY_OPEN

    $string

    EOT } sub T2H_DEFAULT_node_file_name($$) { my $node = shift; my $type = shift; return undef if ($node->{'external_node'} or ($type eq 'top' and !$NEW_CROSSREF_STYLE)); my $node_file_base; if ($type eq 'top' and defined($TOP_NODE_FILE)) { $node_file_base = $TOP_NODE_FILE; } elsif ($NEW_CROSSREF_STYLE) { if ($TRANSLITERATE_NODE) { $node_file_base = $node->{'cross_manual_file'}; } else { $node_file_base = $node->{'cross_manual_target'}; } } else { $node_file_base = main::remove_texi($node->{'texi'}); $node_file_base =~ s/[^\w\.\-]/-/g; } if (defined($NODE_FILE_EXTENSION) and $NODE_FILE_EXTENSION ne '') { return ($node_file_base . ".$NODE_FILE_EXTENSION"); } return $node_file_base; } ######################################################################## # Control of formatting: # 1.) For some changes, it is often enough to change the value of # some global map. It might necessitate building a little # function along with the change in hash, if the change is the use # of another function (in style_map). # 2.) For other changes, reimplement one of the t2h_default_* routines, # give them another name, and assign them to the respective # $ variable (below). # # This hash should have keys corresponding with the nonletter command accent # whose following character is considered to be the argument # This hash associates an accent macro to the ISO name for the accent if any. # The customary use of this map is to find the ISO name appearing in html # entity (like é) associated with a texinfo accent macro. # # The keys of the hash are # ": umlaut # ~: tilda accent # ^: circumflex accent # `: grave accent # ': acute accent # =: macron accent %accent_map = ( '"', 'uml', '~', 'tilde', '^', 'circ', '`', 'grave', "'", 'acute', ",", 'cedil', '=', '', 'ringaccent', 'ring', 'H', '', 'dotaccent', '', 'u', '', 'ubaraccent', '', 'udotaccent', '', 'v', '', 'ogonek', 'ogon', ); # # texinfo "simple things" (@foo) to HTML ones # %simple_map = ( '*', "
    ", # HTML+ ' ', ' ', "\t", ' ', "\n", ' ', # "­" or "­" could also be possible for @-, but it seems # that some browser will consider this as an always visible hyphen mark # which is not what we want (see http://www.cs.tut.fi/~jkorpela/shy.html) '-', '', # hyphenation hint '|', '', # used in formatting commands @evenfooting and friends '/', '', # spacing commands ':', '', '!', '!', '?', '?', '.', '.', '@', '@', '}', '}', '{', '{', ); # this map is used in preformatted text %simple_map_pre = %simple_map; $simple_map_pre{'*'} = "\n"; # maps for the math specific commands %simple_map_math = ( '\\', '\\' ); %simple_map_pre_math = %simple_map_math; %simple_map_texi_math = %simple_map_math; %colon_command_punctuation_characters = ( '.' => '.', ':' => ':', '?' => '?', '!' => '!' ); # # texinfo "things" (@foo{}) to HTML ones # %things_map = ( 'TeX' => 'TeX', 'LaTeX' => 'LaTeX', # pertusus: unknown by makeinfo, not in texinfo manual (@* is the right thing) # 'br', '
    ', # paragraph break 'bullet' => '*', # #'copyright' => '(C)', 'copyright' => '©', 'registeredsymbol' => '®', 'dots' => '...', 'enddots' => '...', 'equiv' => '==', # FIXME i18n 'error' => 'error-->', 'expansion' => '==>', 'arrow' => '->', 'minus' => '-', 'point' => '-!-', 'print' => '-|', 'result' => '=>', # set in code using the language # 'today', &pretty_date, 'today' => '', 'aa' => 'å', 'AA' => 'Å', 'ae' => 'æ', 'oe' => 'œ', #pertusus: also œ. œ not in html 3.2 'AE' => 'Æ', 'OE' => 'Œ', #pertusus: also Œ. Œ not in html 3.2 'o' => 'ø', 'O' => 'Ø', 'ss' => 'ß', 'l' => 'ł', 'L' => 'Ł', 'exclamdown' => '¡', 'questiondown' => '¿', 'pounds' => '£', 'ordf' => 'ª', 'ordm' => 'º', 'comma' => ',', 'euro' => '€', 'geq' => '≥', 'leq' => '≤', 'tie' => ' ', 'textdegree' => '°', 'quotedblleft' => '“', 'quotedblright' => '”', 'quoteleft' => '‘', 'quoteright' => '’', 'quotedblbase' => '„', 'quotesinglbase' => '‚', 'guillemetleft' => '«', 'guillemetright' => '»', 'guillemotleft' => '«', 'guillemotright' => '»', 'guilsinglleft' => '‹', 'guilsinglright' => '›', ); # This map is used in preformatted environments %pre_map = %things_map; $pre_map{'dots'} = '...'; $pre_map{'enddots'} = '...'; #$pre_map{'br'} = "\n"; %ascii_things_map = ( 'TeX' => 'TeX', 'LaTeX' => 'LaTeX', 'bullet' => '*', 'copyright' => '(C)', 'registeredsymbol' => '(R)', 'dots' => '...', 'enddots' => '...', 'equiv' => '==', # FIXME i18n 'error' => 'error-->', 'expansion' => '==>', 'arrow' => '->', 'minus' => '-', 'point' => '-!-', 'print' => '-|', 'result' => '=>', 'today' => '', 'aa' => 'aa', 'AA' => 'AA', 'ae' => 'ae', 'oe' => 'oe', 'AE' => 'AE', 'OE' => 'OE', 'o' => '/o', 'O' => '/O', 'ss' => 'ss', 'l' => '/l', 'L' => '/L', 'exclamdown' => '?', 'questiondown' => '!', 'pounds' => '#', 'ordf' => 'a', 'ordm' => 'o', 'comma' => ',', 'euro' => 'Euro', 'geq' => '>=', 'leq' => '<=', 'tie' => ' ', 'textdegree' => 'o', 'quotedblleft' => '``', 'quotedblright' => "''", 'quoteleft' => '`', 'quoteright' => "'", 'quotedblbase' => ',,', 'quotesinglbase' => ',', 'guillemetleft' => '<<', 'guillemetright' => '>>', 'guillemotleft' => '<<', 'guillemotright' => '>>', 'guilsinglleft' => '<', 'guilsinglright' => '>', ); # ascii representation of @-commands %ascii_simple_map = ( '*', "\n", ' ', ' ', "\t", ' ', "\n", ' ', '-', '', # hyphenation hint '|', '', # used in formatting commands @evenfooting and friends '/', '', ':', '', '!', '!', '?', '?', '.', '.', '@', '@', '}', '}', '{', '{', ); # # This map is used when texi elements are removed and replaced # by simple text # %simple_map_texi = %ascii_simple_map; # text replacing macros when texi commands are removed and plain text is # produced %texi_map = ( 'TeX', 'TeX', 'LaTeX', 'LaTeX', 'bullet', '*', 'copyright', 'C', 'registeredsymbol', 'R', 'dots', '...', 'enddots', '...', 'equiv', '==', 'error', 'error-->', 'expansion', '==>', 'arrow', '->', 'minus', '-', 'point', '-!-', 'print', '-|', 'result', '=>', 'today' => '', 'aa', 'aa', 'AA', 'AA', 'ae', 'ae', 'oe', 'oe', 'AE', 'AE', 'OE', 'OE', 'o', 'o', 'O', 'O', 'ss', 'ss', 'l', 'l', 'L', 'L', 'exclamdown', '! upside-down', #'exclamdown', '¡', 'questiondown', '? upside-down', #'questiondown', '¿', 'pounds', 'pound sterling', #'pounds', '£' 'ordf' => 'a', 'ordm' => 'o', 'comma' => ',', 'euro' => 'Euro', 'geq' => '>=', 'leq' => '<=', 'tie' => ' ', 'textdegree' => 'o', 'quotedblleft' => '``', 'quotedblright' => "''", 'quoteleft' => '`', 'quoteright' => "'", 'quotedblbase' => ',,', 'quotesinglbase' => ',', 'guillemetleft' => '<<', 'guillemetright' => '>>', 'guillemotleft' => '<<', 'guillemotright' => '>>', 'guilsinglleft' => '<', 'guilsinglright' => '>', ); # taken from #Latin extended additionnal #http://www.alanwood.net/unicode/latin_extended_additional.html #C1 Controls and Latin-1 Supplement #http://www.alanwood.net/unicode/latin_1_supplement.html #Latin Extended-A #http://www.alanwood.net/unicode/latin_extended_a.html #Latin Extended-B #http://www.alanwood.net/unicode/latin_extended_b.html #dotless i: 0131 #http://www.alanwood.net/unicode/arrows.html 21** #http://www.alanwood.net/unicode/general_punctuation.html 20** #http://www.alanwood.net/unicode/mathematical_operators.html 22** %unicode_map = ( 'bullet' => '2022', 'copyright' => '00A9', 'registeredsymbol' => '00AE', 'dots' => '2026', 'enddots' => '', 'equiv' => '2261', 'error' => '', 'expansion' => '2192', 'arrow' => '2192', 'minus' => '2212', # in mathematical operators # 'minus' => '002D', # in latin1 'point' => '2605', 'print' => '22A3', 'result' => '21D2', 'today' => '', 'aa' => '00E5', 'AA' => '00C5', 'ae' => '00E6', 'oe' => '0153', 'AE' => '00C6', 'OE' => '0152', 'o' => '00F8', 'O' => '00D8', 'ss' => '00DF', 'l' => '0142', 'L' => '0141', 'exclamdown' => '00A1', 'questiondown' => '00BF', 'pounds' => '00A3', 'ordf' => '00AA', 'ordm' => '00BA', 'comma' => '002C', 'euro' => '20AC', 'geq' => '2265', 'leq' => '2264', 'tie' => '', # 'tie' => '0020', 'textdegree' => '00B0', 'quotedblleft' => '201C', 'quotedblright' => '201D', 'quoteleft' => '2018', 'quoteright' => '2019', 'quotedblbase' => '201E', 'quotesinglbase' => '201A', 'guillemetleft' => '00AB', 'guillemetright' => '00BB', 'guillemotleft' => '00AB', 'guillemotright' => '00BB', 'guilsinglleft' => '2039', 'guilsinglright' => '203A', ); %makeinfo_encoding_to_map = ( "iso-8859-1", 'iso8859_1', "iso-8859-2", 'iso8859_2', "iso-8859-15", 'iso8859_15', "koi8-r", 'koi8', "koi8-u", 'koi8', ); foreach my $encoding (keys(%makeinfo_encoding_to_map)) { $t2h_encoding_aliases{$encoding} = $encoding; $t2h_encoding_aliases{$makeinfo_encoding_to_map{$encoding}} = $encoding; } # cut and pasted from eigth_bit_makeinfo_maps.pl, in turn generated with # ./parse_8bit_makeinfo_maps.pl %makeinfo_unicode_to_eight_bit = ( 'iso8859_1' => { '00A0' => 'A0', '00A1' => 'A1', '00A2' => 'A2', '00A3' => 'A3', '00A4' => 'A4', '00A5' => 'A5', '00A6' => 'A6', '00A7' => 'A7', '00A8' => 'A8', '00A9' => 'A9', '00AA' => 'AA', '00AB' => 'AB', '00AC' => 'AC', '00AD' => 'AD', '00AE' => 'AE', '00AF' => 'AF', '00B0' => 'B0', '00B1' => 'B1', '00B2' => 'B2', '00B3' => 'B3', '00B4' => 'B4', '00B5' => 'B5', '00B6' => 'B6', '00B7' => 'B7', '00B8' => 'B8', '00B9' => 'B9', '00BA' => 'BA', '00BB' => 'BB', '00BC' => 'BC', '00BD' => 'BD', '00BE' => 'BE', '00BF' => 'BF', '00C0' => 'C0', '00C1' => 'C1', '00C2' => 'C2', '00C3' => 'C3', '00C4' => 'C4', '00C5' => 'C5', '00C6' => 'C6', '00C7' => 'C7', '00C7' => 'C7', '00C8' => 'C8', '00C9' => 'C9', '00CA' => 'CA', '00CB' => 'CB', '00CC' => 'CC', '00CD' => 'CD', '00CE' => 'CE', '00CF' => 'CF', '00D0' => 'D0', '00D1' => 'D1', '00D2' => 'D2', '00D3' => 'D3', '00D4' => 'D4', '00D5' => 'D5', '00D6' => 'D6', '00D7' => 'D7', '00D8' => 'D8', '00D9' => 'D9', '00DA' => 'DA', '00DB' => 'DB', '00DC' => 'DC', '00DD' => 'DD', '00DE' => 'DE', '00DF' => 'DF', '00E0' => 'E0', '00E1' => 'E1', '00E2' => 'E2', '00E3' => 'E3', '00E4' => 'E4', '00E5' => 'E5', '00E6' => 'E6', '00E7' => 'E7', '00E8' => 'E8', '00E9' => 'E9', '00EA' => 'EA', '00EB' => 'EB', '00EC' => 'EC', '00ED' => 'ED', '00EE' => 'EE', '00EF' => 'EF', '00F0' => 'F0', '00F1' => 'F1', '00F2' => 'F2', '00F3' => 'F3', '00F4' => 'F4', '00F5' => 'F5', '00F6' => 'F6', '00F7' => 'F7', '00F8' => 'F8', '00F9' => 'F9', '00FA' => 'FA', '00FB' => 'FB', '00FC' => 'FC', '00FD' => 'FD', '00FE' => 'FE', '00FF' => 'FF', }, 'iso8859_15' => { '00A0' => 'A0', '00A1' => 'A1', '00A2' => 'A2', '00A3' => 'A3', '20AC' => 'A4', '00A5' => 'A5', '0160' => 'A6', '00A7' => 'A7', '0161' => 'A8', '00A9' => 'A9', '00AA' => 'AA', '00AB' => 'AB', '00AC' => 'AC', '00AD' => 'AD', '00AE' => 'AE', '00AF' => 'AF', '00B0' => 'B0', '00B1' => 'B1', '00B2' => 'B2', '00B3' => 'B3', '017D' => 'B4', '00B5' => 'B5', '00B6' => 'B6', '00B7' => 'B7', '017E' => 'B8', '00B9' => 'B9', '00BA' => 'BA', '00BB' => 'BB', '0152' => 'BC', '0153' => 'BD', '0178' => 'BE', '00BF' => 'BF', '00C0' => 'C0', '00C1' => 'C1', '00C2' => 'C2', '00C3' => 'C3', '00C4' => 'C4', '00C5' => 'C5', '00C6' => 'C6', '00C7' => 'C7', '00C8' => 'C8', '00C9' => 'C9', '00CA' => 'CA', '00CB' => 'CB', '00CC' => 'CC', '00CD' => 'CD', '00CE' => 'CE', '00CF' => 'CF', '00D0' => 'D0', '00D1' => 'D1', '00D2' => 'D2', '00D3' => 'D3', '00D4' => 'D4', '00D5' => 'D5', '00D6' => 'D6', '00D7' => 'D7', '00D8' => 'D8', '00D9' => 'D9', '00DA' => 'DA', '00DB' => 'DB', '00DC' => 'DC', '00DD' => 'DD', '00DE' => 'DE', '00DF' => 'DF', '00E0' => 'E0', '00E1' => 'E1', '00E2' => 'E2', '00E3' => 'E3', '00E4' => 'E4', '00E5' => 'E5', '00E6' => 'E6', '00E7' => 'E7', '00E8' => 'E8', '00E9' => 'E9', '00EA' => 'EA', '00EB' => 'EB', '00EC' => 'EC', '00ED' => 'ED', '00EE' => 'EE', '00EF' => 'EF', '00F0' => 'F0', '00F1' => 'F1', '00F2' => 'F2', '00F3' => 'F3', '00F4' => 'F4', '00F5' => 'F5', '00F6' => 'F6', '00F7' => 'F7', '00F8' => 'F8', '00F9' => 'F9', '00FA' => 'FA', '00FB' => 'FB', '00FC' => 'FC', '00FD' => 'FD', '00FE' => 'FE', '00FF' => 'FF', }, 'iso8859_2' => { '00A0' => 'A0', '0104' => 'A1', '02D8' => 'A2', '0141' => 'A3', '00A4' => 'A4', '013D' => 'A5', '015A' => 'A6', '00A7' => 'A7', '00A8' => 'A8', '015E' => 'AA', '0164' => 'AB', '0179' => 'AC', '00AD' => 'AD', '017D' => 'AE', '017B' => 'AF', '00B0' => 'B0', '0105' => 'B1', '02DB' => 'B2', '0142' => 'B3', '00B4' => 'B4', '013E' => 'B5', '015B' => 'B6', '02C7' => 'B7', '00B8' => 'B8', '0161' => 'B9', '015F' => 'BA', '0165' => 'BB', '017A' => 'BC', '02DD' => 'BD', '017E' => 'BE', '017C' => 'BF', '0154' => 'C0', '00C1' => 'C1', '00C2' => 'C2', '0102' => 'C3', '00C4' => 'C4', '0139' => 'C5', '0106' => 'C6', '00C7' => 'C7', '010C' => 'C8', '00C9' => 'C9', '0118' => 'CA', '00CB' => 'CB', '011A' => 'CC', '00CD' => 'CD', '00CE' => 'CE', '010E' => 'CF', '0110' => 'D0', '0143' => 'D1', '0147' => 'D2', '00D3' => 'D3', '00D4' => 'D4', '0150' => 'D5', '00D6' => 'D6', '00D7' => 'D7', '0158' => 'D8', '016E' => 'D9', '00DA' => 'DA', '0170' => 'DB', '00DC' => 'DC', '00DD' => 'DD', '0162' => 'DE', '00DF' => 'DF', '0155' => 'E0', '00E1' => 'E1', '00E2' => 'E2', '0103' => 'E3', '00E4' => 'E4', '013A' => 'E5', '0107' => 'E6', '00E7' => 'E7', '010D' => 'E8', '00E9' => 'E9', '0119' => 'EA', '00EB' => 'EB', '011B' => 'EC', '00ED' => 'ED', '00EE' => 'EE', '010F' => 'EF', '0111' => 'F0', '0144' => 'F1', '0148' => 'F2', '00F3' => 'F3', '00F4' => 'F4', '0151' => 'F5', '00F6' => 'F6', '00F7' => 'F7', '0159' => 'F8', '016F' => 'F9', '00FA' => 'FA', '0171' => 'FB', '00FC' => 'FC', '00FD' => 'FD', '0163' => 'FE', '02D9' => 'FF', }, 'koi8' => { '0415' => 'A3', '0454' => 'A4', '0456' => 'A6', '0457' => 'A7', '04D7' => 'B3', '0404' => 'B4', '0406' => 'B6', '0407' => 'B7', '042E' => 'C0', '0430' => 'C1', '0431' => 'C2', '0446' => 'C3', '0434' => 'C4', '0435' => 'C5', '0444' => 'C6', '0433' => 'C7', '0445' => 'C8', '0438' => 'C9', '0439' => 'CA', '043A' => 'CB', '043B' => 'CC', '043C' => 'CD', '043D' => 'CE', '043E' => 'CF', '043F' => 'D0', '044F' => 'D1', '0440' => 'D2', '0441' => 'D3', '0442' => 'D4', '0443' => 'D5', '0436' => 'D6', '0432' => 'D7', '044C' => 'D8', '044B' => 'D9', '0437' => 'DA', '0448' => 'DB', '044D' => 'DC', '0449' => 'DD', '0447' => 'DE', '044A' => 'DF', '042D' => 'E0', '0410' => 'E1', '0411' => 'E2', '0426' => 'E3', '0414' => 'E4', '0415' => 'E5', '0424' => 'E6', '0413' => 'E7', '0425' => 'E8', '0418' => 'E9', '0419' => 'EA', '041A' => 'EB', '041B' => 'EC', '041C' => 'ED', '041D' => 'EE', '041E' => 'EF', '041F' => 'F0', '042F' => 'F1', '0420' => 'F2', '0421' => 'F3', '0422' => 'F4', '0423' => 'F5', '0416' => 'F6', '0412' => 'F7', '042C' => 'F8', '042B' => 'F9', '0417' => 'FA', '0428' => 'FB', '042D' => 'FC', '0429' => 'FD', '0427' => 'FE', '042A' => 'FF', }, ); %eight_bit_to_unicode = (); foreach my $encoding (keys(%makeinfo_encoding_to_map)) { my $unicode_to_eight = $makeinfo_unicode_to_eight_bit{$makeinfo_encoding_to_map{$encoding}}; #print STDERR "$encoding, $makeinfo_encoding_to_map{$encoding}, $unicode_to_eight\n"; foreach my $utf8_key (keys(%{$unicode_to_eight})) { $eight_bit_to_unicode{$encoding}->{$unicode_to_eight->{$utf8_key}} = $utf8_key; } } my %makeinfo_transliterate_map = ( '0416' => 'ZH', '0447' => 'ch', '00EB' => 'e', '0414' => 'D', '0159' => 'r', '00E6' => 'ae', '042B' => 'Y', '00FA' => 'u', '043B' => 'l', '00DE' => 'TH', '00D9' => 'U', '00C4' => 'A', '0148' => 'n', '00F6' => 'o', '0434' => 'd', '041E' => 'O', '041B' => 'L', '044B' => 'y', '0107' => 'c', '0415' => 'E', '00C1' => 'A', '00D3' => 'O', '00DB' => 'U', '016E' => 'U', '013A' => 'l', '017B' => 'Z', '00F1' => 'n', '0428' => 'SH', '0153' => 'oe', '00F4' => 'o', '0144' => 'n', '0404' => 'IE', '0427' => 'CH', '0162' => 'T', '017A' => 'z', '0448' => 'sh', '0436' => 'zh', '00F9' => 'u', '0406' => 'I', '0103' => 'a', '0422' => 'T', '0160' => 'S', '0165' => 't', '017E' => 'z', '00F0' => 'd', '043E' => 'o', '043D' => 'n', '013E' => 'l', '0412' => 'V', '0111' => 'd', '0155' => 's', '017C' => 'z', '00CE' => 'I', '042D' => 'E', '00C8' => 'E', '00F8' => 'oe', '00F2' => 'o', '00FF' => 'y', '0420' => 'R', '0119' => 'e', '00D2' => 'O', '043C' => 'm', '00D0' => 'DH', '0179' => 'Z', '0110' => 'D', '043F' => 'p', '0170' => 'U', '011A' => 'E', '010C' => 'C', '015A' => 'S', '0433' => 'g', '00E1' => 'a', '010D' => 'c', '00CC' => 'I', '016F' => 'u', '0457' => 'yi', '00C2' => 'A', '0438' => 'i', '00E3' => 'a', '0435' => 'e', '0440' => 'r', '042A' => 'W', '0431' => 'b', '00EE' => 'i', '0150' => 'O', '00E8' => 'e', '0418' => 'I', '00CF' => 'I', '015F' => 's', '0142' => 'l', '0147' => 'N', '00DF' => 'ss', '00E5' => 'aa', '00C3' => 'A', '0106' => 'C', '0141' => 'L', '0164' => 'T', '017D' => 'Z', '00EC' => 'i', '041C' => 'M', '00C9' => 'E', '00E0' => 'a', '043A' => 'k', '00F5' => 'o', '042C' => 'X', '0449' => 'shch', '0444' => 'f', '0139' => 'L', '0158' => 'R', '00F3' => 'o', '00FB' => 'u', '0424' => 'F', '0446' => 'c', '0423' => 'U', '0442' => 't', '00FD' => 'y', '0102' => 'A', '0104' => 'A', '00CB' => 'E', '0426' => 'C', '00CD' => 'I', '0437' => 'z', '0178' => 'y', '00D4' => 'O', '044D' => 'e', '0432' => 'v', '013D' => 'L', '0163' => 't', '0456' => 'i', '011B' => 'e', '044F' => 'ya', '0429' => 'SHCH', '0411' => 'B', '044A' => 'w', '00C6' => 'AE', '041D' => 'N', '00DA' => 'U', '00C0' => 'A', '0152' => 'OE', '00DD' => 'Y', '0154' => 'R', '00E9' => 'e', '00D5' => 'O', '041F' => 'P', '0161' => 's', '0430' => 'a', '0445' => 'h', '00E2' => 'a', '00D6' => 'O', '0407' => 'YI', '00CA' => 'E', '0439' => 'i', '0171' => 'u', '00DC' => 'U', '042F' => 'YA', '0425' => 'H', '00FE' => 'th', '00D1' => 'N', '044C' => 'x', '010F' => 'd', '0410' => 'A', '0443' => 'u', '00EF' => 'i', '0105' => 'a', '00EA' => 'e', '00E4' => 'a', '015E' => 'S', '0417' => 'Z', '00ED' => 'i', '00FC' => 'u', '04D7' => 'IO', '00D8' => 'OE', '0419' => 'I', '0421' => 'S', '0143' => 'N', '010E' => 'D', '0413' => 'G', '015B' => 's', '0151' => 'o', '00E7' => 'c', '00C5' => 'AA', '0441' => 's', '0118' => 'E', '00C7' => 'C', '041A' => 'K', '0454' => 'ie', '042E' => 'yu', ); %transliterate_map = ( '00C5' => 'AA', '00E5' => 'aa', '00D8' => 'OE', '00F8' => 'oe', '00E6' => 'ae', '0153' => 'oe', '00C6' => 'AE', '0152' => 'OE', '00DF' => 'ss', '0141' => 'L', '0142' => 'l', '00D0' => 'DH', '0415' => 'E', '0435' => 'e', '0426' => 'C', '042A' => 'W', '044A' => 'w', '042C' => 'X', '044C' => 'x', '042E' => 'yu', '042F' => 'YA', '044F' => 'ya', '0433' => 'g', '0446' => 'c', '04D7' => 'IO', '00DD' => 'Y', # unidecode gets this wrong ? ); foreach my $symbol(keys(%unicode_map)) { if ($unicode_map{$symbol} ne '' and !exists($transliterate_map{$symbol})) { $no_transliterate_map{$unicode_map{$symbol}} = 1; } } %ascii_character_map = ( ' ' => '0020', '!' => '0021', '"' => '0022', '#' => '0023', '$' => '0024', '%' => '0025', '&' => '0026', "'" => '0027', '(' => '0028', ')' => '0029', '*' => '002A', '+' => '002B', ',' => '002C', '-' => '002D', '.' => '002E', '/' => '002F', ':' => '003A', ';' => '003B', '<' => '003C', '=' => '003D', '>' => '003E', '?' => '003F', '@' => '0040', '[' => '005B', '\\' => '005C', ']' => '005D', '^' => '005E', '_' => '005F', '`' => '0060', '{' => '007B', '|' => '007C', '}' => '007D', '~' => '007E', ); %perl_charset_to_html = ( 'utf8' => 'utf-8', 'utf-8-strict' => 'utf-8', 'ascii' => 'us-ascii', ); %t2h_encoding_aliases = ( 'latin1' => 'iso-8859-1', ); foreach my $perl_charset (keys(%perl_charset_to_html)) { $t2h_encoding_aliases{$perl_charset} = $perl_charset_to_html{$perl_charset}; $t2h_encoding_aliases{$perl_charset_to_html{$perl_charset}} = $perl_charset_to_html{$perl_charset}; } # symbols used for the commands if $USE_ISO is true. %iso_symbols = ( 'equiv' => '≡', 'dots' => '…', 'bullet' => '•', 'result' => '⇒', 'expansion' => '→', 'arrow' => '→', 'point' => '∗', "'" => '’', '`' => '‘', ); %stop_paragraph_command = ( 'titlefont' => 1, 'insertcopying' => 1 ); # on bug-texinfo verified that code_style shouldn't be used for anything # else than node. # anyway it doesn't make sense since the section name normally formatted # is used #%format_code_style = ( # 'menu_name' => 1, # 'menu_description' => 1 #); # not used currently for html, but used in chm.init %numeric_entity_map = (); foreach my $symbol (keys(%unicode_map)) { if ($symbol ne '') { $numeric_entity_map{$symbol} = '&#' . hex($unicode_map{$symbol}) . ';'; } } # When the value begins with & the function with that name is used to do the # html. The first argument is the text enclosed within {}, the second is the # style name (which is also the key of the hash) # # Otherwithe the value is the html element used to enclose the text, and if # there is a " the resulting text is also enclosed within `' my %old_style_map = ( 'acronym', '', 'asis', '', 'b', 'b', 'cite', 'cite', 'clicksequence', '', 'code', 'code', 'command', 'code', 'ctrl', '&default_ctrl', 'dfn', 'em', 'dmn', '', 'email', '&default_email', 'emph', 'em', 'env', 'code', 'file', '"tt', 'i', 'i', 'kbd', 'kbd', 'key', 'kbd', 'math', 'em', 'option', '"samp', 'r', '', 'samp', '"samp', 'sc', '&default_sc', 'strong', 'strong', 't', 'tt', 'uref', '&default_uref', 'url', '&default_url', 'var', 'var', 'verb', 'tt', 'titlefont', '&default_titlefont', 'w', '', ); # default is {'args' => ['normal'], 'attribute' => ''}, %style_map = ( 'asis', {}, 'b', {'attribute' => 'b'}, 'cite', {'attribute' => 'cite'}, 'clicksequence', {}, 'click', {'function' => \&t2h_default_click_normal}, 'code', {'args' => ['code'], 'attribute' => 'code'}, 'command', {'args' => ['code'], 'attribute' => 'code'}, 'ctrl', {'function' => \&t2h_default_ctrl,'type' => 'simple_style'}, 'dfn', {'attribute' => 'em'}, 'dmn', {}, 'email', {'args' => ['code', 'normal'], 'function' => \&t2h_default_email, 'type' => 'simple_style'}, #'email', {'args' => ['normal', 'normal'], # 'function' => \&t2h_default_email}, 'emph', {'attribute' => 'em'}, 'env', {'args' => ['code'], 'attribute' => 'code'}, 'file', {'args' => ['code'], 'attribute' => 'tt', 'quote' => '"'}, 'i', {'attribute' => 'i'}, 'slanted', {'attribute' => 'i'}, 'sansserif', {'attribute' => 'span class="sansserif"'}, 'kbd', {'args' => ['code'], 'attribute' => 'kbd'}, 'key', {'args' => ['code'], 'begin' => '<', 'end' => '>'}, 'math', {'function' => \&t2h_default_math, 'args' => ['math'] }, 'option', {'args' => ['code'], 'attribute' => 'samp', 'quote' => '"'}, 'r', {'attribute' => 'span class="roman"'}, 'samp', {'args' => ['code'], 'attribute' => 'samp', 'quote' => '"'}, # 'sc', {'function' => \&t2h_default_sc}, 'sc', {'attribute' => 'small'}, 'strong', {'attribute' => 'strong'}, 't', {'attribute' => 'tt'}, 'uref', {'function' => \&t2h_default_uref, 'args' => ['code', 'normal', 'normal'], 'type' => 'simple_style' }, #'uref', {'function' => \&t2h_default_uref, # 'args' => ['normal', 'normal', 'normal']}, 'url', {'function' => \&t2h_default_uref, 'args' => ['code', 'normal', 'normal'], 'type' => 'simple_style'}, 'indicateurl', {'args' => ['code'], 'begin' => '<', 'end' => '>','type' => 'simple_style'}, 'var', {'attribute' => 'var'}, 'verb', {'args' => ['code'], 'attribute' => 'tt'}, 'titlefont', {'function' => \&t2h_default_titlefont, 'type' => 'simple_style'}, 'w', {'type' => 'simple_style'}, 'hyphenation', {'function' => \&t2h_default_hyphenation, 'args' => ['keep']}, ); %command_type = (); foreach my $style (keys(%style_map)) { if (exists($style_map{$style}->{'type'})) { $command_type{$style} = $style_map{$style}->{'type'}; } else { $command_type{$style} = 'style'; } } %unicode_diacritical = ( 'H' => '030B', 'ringaccent' => '030A', "'" => '0301', 'v' => '030C', ',' => '0327', '^' => '0302', 'dotaccent' => '0307', '`' => '0300', '=' => '0304', '~' => '0303', '"' => '0308', 'udotaccent' => '0323', 'ubaraccent' => '0332', 'u' => '0306', 'tieaccent' => '0361', 'ogonek' => '0328' ); %unicode_accents = ( 'dotaccent' => { # dot above 'A' => '0226', #C moz-1.2 'a' => '0227', #c moz-1.2 'B' => '1E02', 'b' => '1E03', 'C' => '010A', 'c' => '010B', 'D' => '1E0A', 'd' => '1E0B', 'E' => '0116', 'e' => '0117', 'F' => '1E1E', 'f' => '1E1F', 'G' => '0120', 'g' => '0121', 'H' => '1E22', 'h' => '1E23', 'i' => '0069', 'I' => '0130', 'N' => '1E44', 'n' => '1E45', 'O' => '022E', #Y moz-1.2 'o' => '022F', #v moz-1.2 'P' => '1E56', 'p' => '1E57', 'R' => '1E58', 'r' => '1E59', 'S' => '1E60', 's' => '1E61', 'T' => '1E6A', 't' => '1E6B', 'W' => '1E86', 'w' => '1E87', 'X' => '1E8A', 'x' => '1E8B', 'Y' => '1E8E', 'y' => '1E8F', 'Z' => '017B', 'z' => '017C', }, 'udotaccent' => { # dot below 'A' => '1EA0', 'a' => '1EA1', 'B' => '1E04', 'b' => '1E05', 'D' => '1E0C', 'd' => '1E0D', 'E' => '1EB8', 'e' => '1EB9', 'H' => '1E24', 'h' => '1E25', 'I' => '1ECA', 'i' => '1ECB', 'K' => '1E32', 'k' => '1E33', 'L' => '1E36', 'l' => '1E37', 'M' => '1E42', 'm' => '1E43', 'N' => '1E46', 'n' => '1E47', 'O' => '1ECC', 'o' => '1ECD', 'R' => '1E5A', 'r' => '1E5B', 'S' => '1E62', 's' => '1E63', 'T' => '1E6C', 't' => '1E6D', 'U' => '1EE4', 'u' => '1EE5', 'V' => '1E7E', 'v' => '1E7F', 'W' => '1E88', 'w' => '1E89', 'Y' => '1EF4', 'y' => '1EF5', 'Z' => '1E92', 'z' => '1E93', }, 'ubaraccent' => { # line below 'B' => '1E06', 'b' => '1E07', 'D' => '1E0E', 'd' => '1E0F', 'h' => '1E96', 'K' => '1E34', 'k' => '1E35', 'L' => '1E3A', 'l' => '1E3B', 'N' => '1E48', 'n' => '1E49', 'R' => '1E5E', 'r' => '1E5F', 'T' => '1E6E', 't' => '1E6F', 'Z' => '1E94', 'z' => '1E95', }, ',' => { # cedilla 'C' => '00C7', 'c' => '00E7', 'D' => '1E10', 'd' => '1E11', 'E' => '0228', #C moz-1.2 'e' => '0229', #c moz-1.2 'G' => '0122', 'g' => '0123', 'H' => '1E28', 'h' => '1E29', 'K' => '0136', 'k' => '0137', 'L' => '013B', 'l' => '013C', 'N' => '0145', 'n' => '0146', 'R' => '0156', 'r' => '0157', 'S' => '015E', 's' => '015F', 'T' => '0162', 't' => '0163', }, '=' => { # macron 'A' => '0100', 'a' => '0101', 'E' => '0112', 'e' => '0113', 'I' => '012A', 'i' => '012B', 'G' => '1E20', 'g' => '1E21', 'O' => '014C', 'o' => '014D', 'U' => '016A', 'u' => '016B', 'Y' => '0232', #? moz-1.2 'y' => '0233', #? moz-1.2 }, '"' => { # diaeresis 'A' => '00C4', 'a' => '00E4', 'E' => '00CB', 'e' => '00EB', 'H' => '1E26', 'h' => '1E27', 'I' => '00CF', 'i' => '00EF', 'O' => '00D6', 'o' => '00F6', 't' => '1E97', 'U' => '00DC', 'u' => '00FC', 'W' => '1E84', 'w' => '1E85', 'X' => '1E8C', 'x' => '1E8D', 'y' => '00FF', 'Y' => '0178', }, 'u' => { # breve 'A' => '0102', 'a' => '0103', 'E' => '0114', 'e' => '0115', 'G' => '011E', 'g' => '011F', 'I' => '012C', 'i' => '012D', 'O' => '014E', 'o' => '014F', 'U' => '016C', 'u' => '016D', }, "'" => { # acute 'A' => '00C1', 'a' => '00E1', 'C' => '0106', 'c' => '0107', 'E' => '00C9', 'e' => '00E9', 'G' => '01F4', 'g' => '01F5', 'I' => '00CD', 'i' => '00ED', 'K' => '1E30', 'k' => '1E31', 'L' => '0139', 'l' => '013A', 'M' => '1E3E', 'm' => '1E3F', 'N' => '0143', 'n' => '0144', 'O' => '00D3', 'o' => '00F3', 'P' => '1E54', 'p' => '1E55', 'R' => '0154', 'r' => '0155', 'S' => '015A', 's' => '015B', 'U' => '00DA', 'u' => '00FA', 'W' => '1E82', 'w' => '1E83', 'Y' => '00DD', 'y' => '00FD', 'Z' => '0179', 'z' => '018A', }, '~' => { # tilde 'A' => '00C3', 'a' => '00E3', 'E' => '1EBC', 'e' => '1EBD', 'I' => '0128', 'i' => '0129', 'N' => '00D1', 'n' => '00F1', 'O' => '00D5', 'o' => '00F5', 'U' => '0168', 'u' => '0169', 'V' => '1E7C', 'v' => '1E7D', 'Y' => '1EF8', 'y' => '1EF9', }, '`' => { # grave 'A' => '00C0', 'a' => '00E0', 'E' => '00C8', 'e' => '00E8', 'I' => '00CC', 'i' => '00EC', 'N' => '01F8', 'n' => '01F9', 'O' => '00D2', 'o' => '00F2', 'U' => '00D9', 'u' => '00F9', 'W' => '1E80', 'w' => '1E81', 'Y' => '1EF2', 'y' => '1EF3', }, '^' => { # circumflex 'A' => '00C2', 'a' => '00E2', 'C' => '0108', 'c' => '0109', 'E' => '00CA', 'e' => '00EA', 'G' => '011C', 'g' => '011D', 'H' => '0124', 'h' => '0125', 'I' => '00CE', 'i' => '00EE', 'J' => '0134', 'j' => '0135', 'O' => '00D4', 'o' => '00F4', 'S' => '015C', 's' => '015D', 'U' => '00DB', 'u' => '00FB', 'W' => '0174', 'w' => '0175', 'Y' => '0176', 'y' => '0177', 'Z' => '1E90', 'z' => '1E91', }, 'ringaccent' => { # ring 'A' => '00C5', 'a' => '00E5', 'U' => '016E', 'u' => '016F', 'w' => '1E98', 'y' => '1E99', }, 'v' => { # caron 'A' => '01CD', 'a' => '01CE', 'C' => '010C', 'c' => '010D', 'D' => '010E', 'd' => '010F', 'E' => '011A', 'e' => '011B', 'G' => '01E6', 'g' => '01E7', 'H' => '021E', #K with moz-1.2 'h' => '021F', #k with moz-1.2 'I' => '01CF', 'i' => '01D0', 'K' => '01E8', 'k' => '01E9', 'L' => '013D', #L' with moz-1.2 'l' => '013E', #l' with moz-1.2 'N' => '0147', 'n' => '0148', 'O' => '01D1', 'o' => '01D2', 'R' => '0158', 'r' => '0159', 'S' => '0160', 's' => '0161', 'T' => '0164', 't' => '0165', 'U' => '01D3', 'u' => '01D4', 'Z' => '017D', 'z' => '017E', }, 'H' => { # double acute 'O' => '0150', 'o' => '0151', 'U' => '0170', 'u' => '0171', }, 'ogonek' => { 'A' => '0104', 'a' => '0105', 'E' => '0118', 'e' => '0119', 'I' => '012E', 'i' => '012F', 'U' => '0172', 'u' => '0173', 'O' => '01EA', 'o' => '01EB', }, ); %transliterate_accent_map = (); foreach my $command (keys(%unicode_accents)) { foreach my $letter(keys (%{$unicode_accents{$command}})) { $transliterate_accent_map{$unicode_accents{$command}->{$letter}} = $letter unless (exists($transliterate_map{$unicode_accents{$command}->{$letter}})); } } %special_accents = ( 'ringaccent' => 'aA', "'" => 'aeiouyAEIOUY', ',' => 'cC', '^' => 'aeiouAEIOU', '`' => 'aeiouAEIOU', '~' => 'nNaoAO', '"' => 'aeiouyAEIOU', # according to http://www2.lib.virginia.edu/small/vhp/download/ISO.txt # however this doesn't seems to work in firefox # 'ogonek' => 'aeiuAEIU', ); foreach my $accent_command ('tieaccent', 'dotless', keys(%unicode_accents)) { $style_map{$accent_command} = { 'function' => \&t2h_default_accent }; $old_style_map{$accent_command} = '&default_accent'; $style_map_texi{$accent_command} = { 'function' => \&t2h_default_ascii_accent }; } sub default_accent($$) { my $text = shift; my $accent = shift; return "&${text}$accent_map{$accent};" if (defined($accent_map{$accent}) and defined($special_accents{$accent}) and ($text =~ /^[$special_accents{$accent}]$/)); return '&' . $text . 'ring;' if (($accent eq 'ringaccent') and (defined($special_accents{$accent})) and ($text =~ /^[$special_accents{$accent}]$/)); return $text . '<' if ($accent eq 'v'); return ascii_accents($text, $accent); } sub t2h_default_accent($$) { my $accent = shift; my $args = shift; my $text = $args->[0]; return "&${text}$accent_map{$accent};" if (defined($accent_map{$accent}) and defined($special_accents{$accent}) and ($text =~ /^[$special_accents{$accent}]$/)); return '&' . $text . 'ring;' if (($accent eq 'ringaccent') and (defined($special_accents{$accent})) and ($text =~ /^[$special_accents{$accent}]$/)); return $text . '<' if ($accent eq 'v'); # FIXME here there could be a conversion to the character in the right # encoding, like # if ($USE_UNICODE and defined($OUT_ENCODING) and $OUT_ENCODING ne '' # and exists($unicode_accents{$accent}) and exists($unicode_accents{$accent}->{$text})) # { # my $encoded_char = Encode::encode($OUT_ENCODING, chr(hex($unicode_map{$thing})), Encode::FB_QUIET); # return $encoded_char if ($encoded_char ne ''); # } if ($USE_NUMERIC_ENTITY) { if (exists($unicode_accents{$accent}) and exists($unicode_accents{$accent}->{$text})) { return ('&#' . hex($unicode_accents{$accent}->{$text}) . ';'); } } return ascii_accents($text, $accent); } sub ascii_accents($$) { my $text = shift; my $accent = shift; return $text if ($accent eq 'dotless'); return $text . "''" if ($accent eq 'H'); return $text . '.' if ($accent eq 'dotaccent'); return $text . '*' if ($accent eq 'ringaccent'); return $text . '[' if ($accent eq 'tieaccent'); return $text . '(' if ($accent eq 'u'); return $text . '_' if ($accent eq 'ubaraccent'); return '.' . $text if ($accent eq 'udotaccent'); return $text . '<' if ($accent eq 'v'); return $text . ';' if ($accent eq 'ogonek'); return $text . $accent if (defined($accent_map{$accent})); } sub default_sc($$) { return '' . uc($_[0]) . ''; } # now unused, upcasing is done in normal_text sub t2h_default_sc($$$) { shift; my $args = shift; return '' . uc($args->[0]) . ''; } sub default_ctrl($$) { return "^$_[0]"; } # obsolete, no warning, but noop sub t2h_default_ctrl($$$) { shift; my $args = shift; #return "^$args->[0]"; return "$args->[0]"; } sub default_sc_pre($$) { return uc($_[0]); } # now unused, upcasing is done in normal_text sub t2h_default_sc_pre($$$) { shift; my $args = shift; return uc($args->[0]); } sub default_titlefont($$) { return "

    $_[0]

    " if ($_[0] =~ /\S/); return ''; } # Avoid adding h1 if the text is empty sub t2h_default_titlefont($$$) { shift; my $args = shift; return "

    $args->[0]

    " if ($args->[0] =~ /\S/); return ''; } # At some point in time (before 4.7?) according to the texinfo # manual, url shouldn't lead to a link but rather be formatted # like text. It is now what indicateurl do, url is the same that # uref with one arg. If we did like makeinfo did it would have been #sub url($$) #{ # return '<' . $_[0] . '>'; #} # # This is unused, t2h_default_uref is used instead sub t2h_default_url ($$) { shift; my $args = shift; my $url = shift @$args; #$url =~ s/\s*$//; #$url =~ s/^\s*//; $url = main::normalise_space($url); return '' unless ($url =~ /\S/); return &$anchor('', $url, $url); } sub default_url ($$) { my $url = shift; my $command = shift; $url =~ s/\s*$//; $url =~ s/^\s*//; return '' unless ($url =~ /\S/); return &$anchor('', $url, $url); } sub default_uref($$) { my $arg = shift; my $command = shift; my ($url, $text, $replacement); ($url, $text, $replacement) = split /,\s*/, $arg; $url =~ s/\s*$//; $url =~ s/^\s*//; $text = $replacement if (defined($replacement)); $text = $url unless ($text); return $text if ($url eq ''); return &$anchor('', $url, $text); } sub t2h_default_uref($$) { shift; my $args = shift; my $url = shift @$args; my $text = shift @$args; my $replacement = shift @$args; #$url =~ s/\s*$//; #$url =~ s/^\s*//; $url = main::normalise_space($url); $replacement = '' if (!defined($replacement)); $replacement = main::normalise_space($replacement); $text = '' if (!defined($text)); $text = main::normalise_space($text); $text = $replacement if ($replacement ne ''); $text = $url unless ($text ne ''); return $text if ($url eq ''); return &$anchor('', $url, $text); } sub t2h_default_math($$) { shift; my $args = shift; my $text = shift @$args; #print STDERR "t2h_default_math $text\n"; $text =~ s/[{}]//g; # $text =~ s/\@\\/\\/g; return "$text"; } sub default_email($$) { my $arg = shift; my $command = shift; my ($mail, $text); ($mail, $text) = split /,\s*/, $arg; $mail =~ s/\s*$//; $mail =~ s/^\s*//; $text = $mail unless ($text); return $text if ($mail eq ''); return &$anchor('', "mailto:$mail", $text); } sub t2h_default_email($$) { my $command = shift; my $args = shift; my $mail = shift @$args; my $text = shift @$args; $mail = main::normalise_space($mail); #$mail =~ s/\s*$//; #$mail =~ s/^\s*//; $text = $mail unless (defined($text) and ($text ne '')); $text = main::normalise_space($text); return $text if ($mail eq ''); return &$anchor('', "mailto:$mail", $text); } sub t2h_default_click_normal($$$) { return t2h_default_click('normal', @_); } sub t2h_default_click_pre($$$) { return t2h_default_click('pre', @_); } sub t2h_default_click_texi($$$) { return t2h_default_click('texi', @_); } sub t2h_default_click($$$$$) { my $context = shift; my $command = shift; my $args = shift; my $arg = shift @$args; my $cmd = $Texi2HTML::THISDOC{'clickstyle'}; $cmd = 'arrow' if (!defined($cmd) or ($cmd eq '')); my $hash = \%things_map; if ($context eq 'pre') { $hash = \%pre_map; } elsif ($context eq 'texi') { $hash = \%texi_map; } return $hash->{$cmd} . $arg if (exists($hash->{$cmd})); return $arg; } sub t2h_default_hyphenation($$) { my $command = shift; my $args = shift; my $text = shift @$args; $text =~ s/^\s*//; $text =~ s/\s*$//; my @list = split /\s+/, $text; foreach my $entry (@list) { my $word = $entry; $word =~ s/-//g; $Texi2HTML::THISDOC{'hyphenation'}->{$word} = $entry; } } sub t2h_default_ascii_accent($$$$) { my $accent = shift; my $args = shift; my $text = $args->[0]; return ascii_accents($text, $accent); } sub t2h_default_no_texi_email { my $command = shift; my $args = shift; my $mail = shift @$args; my $text = shift @$args; $mail = main::normalise_space($mail); #$mail =~ s/\s*$//; #$mail =~ s/^\s*//; return $text if (defined($text) and ($text ne '')); return $mail; } sub t2h_default_no_texi_image($$$$) { my $command = shift; my $args = shift; #my $text = $args->[0]; #$text = main::normalise_space($text); #my @args = split (/\s*,\s*/, $text); my $file = $args->[0]; $file =~ s/^\s*//; $file =~ s/\s*$//; return main::substitute_line($file, {'remove_texi' => 1, 'code_style' => 1}); } sub t2h_default_no_texi_acronym_like($$) { my $command = shift; my $args = shift; my $acronym_texi = $args->[0]; return (main::remove_texi($acronym_texi)); } sub t2h_remove_command($$$$) { return ''; } # This is used for style in preformatted sections my %old_style_map_pre = %old_style_map; $old_style_map_pre{'sc'} = '&default_sc_pre'; $old_style_map_pre{'titlefont'} = ''; foreach my $command (keys(%style_map)) { $style_map_pre{$command} = {}; $style_map_texi{$command} = {} if (!exists($style_map_texi{$command})); $style_map_texi{$command}->{'args'} = $style_map{$command}->{'args'} if (exists($style_map{$command}->{'args'})); #print STDERR "COMMAND $command"; foreach my $key (keys(%{$style_map{$command}})) { $style_map_pre{$command}->{$key} = $style_map{$command}->{$key}; } } #$style_map_pre{'sc'}->{'function'} = \&t2h_default_sc_pre; $style_map_pre{'sc'} = {}; $style_map_pre{'titlefont'} = {}; $style_map_pre{'click'}->{'function'} = \&t2h_default_click_pre; #$style_map_texi{'sc'}->{'function'} = \&t2h_default_sc_pre; $style_map_texi{'sc'} = {}; $style_map_texi{'email'}->{'function'} = \&t2h_default_no_texi_email; $style_map_texi{'click'}->{'function'} = \&t2h_default_click_texi; ####### special styles. You shouldn't need to change them %special_style = ( #'xref' => ['keep','normal','normal','keep','normal'], 'xref' => { 'args' => ['keep','keep','keep','keep','keep'], 'function' => \&main::do_xref }, 'ref' => { 'args' => ['keep','keep','keep','keep','keep'], 'function' => \&main::do_xref }, 'pxref' => { 'args' => ['keep','keep','keep','keep','keep'], 'function' => \&main::do_xref }, 'inforef' => { 'args' => ['keep','keep','keep'], 'function' => \&main::do_xref }, 'image' => { 'args' => ['keep','keep','keep','keep','keep'], 'function' => \&main::do_image }, 'anchor' => { 'args' => ['keep'], 'function' => \&main::do_anchor_label }, 'footnote' => { 'args' => ['keep'], 'function' => \&main::do_footnote }, 'shortcaption' => { 'args' => ['keep'], 'function' => \&main::do_caption_shortcaption }, 'caption' => { 'args' => ['keep'], 'function' => \&main::do_caption_shortcaption }, 'acronym', {'args' => ['keep','keep'], 'function' => \&main::do_acronym_like}, 'abbr', {'args' => ['keep','keep'], 'function' => \&main::do_acronym_like}, ); # @image is replaced by the first arg in strings $style_map_texi{'image'} = { 'args' => ['keep','keep','keep','keep','keep'], 'function' => \&t2h_default_no_texi_image }; $style_map_texi{'acronym'} = { 'args' => ['keep','keep'], 'function' => \&t2h_default_no_texi_acronym_like }; $style_map_texi{'abbr'} = { 'args' => ['keep','keep'], 'function' => \&t2h_default_no_texi_acronym_like }; foreach my $special (keys(%special_style)) { $style_map{$special} = $special_style{$special} unless (defined($style_map{$special})); $style_map_pre{$special} = $special_style{$special} unless (defined($style_map_pre{$special})); $style_map_texi{$special} = { 'args' => ['keep'], 'function' => \&t2h_remove_command } unless (defined($style_map_texi{$special})); } ####### end special styles. #foreach my $command (keys(%style_map)) #{ # print STDERR "STYLE_MAP_TEXI $command($style_map_texi{$command}) "; # print STDERR "ARGS $style_map_texi{$command}->{'args'} " if (defined($style_map_texi{$command}->{'args'})); # print STDERR "FUN $style_map_texi{$command}->{'function'} " if (defined($style_map_texi{$command}->{'function'})); # print STDERR "\n"; #} # uncomment to use the old interface #%style_map = %old_style_map; #%style_map_pre = %old_style_map_pre; %simple_format_simple_map_texi = %simple_map_pre; %simple_format_texi_map = %pre_map; %simple_format_style_map_texi = (); foreach my $command (keys(%style_map_texi)) { #$simple_format_style_map_texi{$command} = {}; foreach my $key (keys (%{$style_map_texi{$command}})) { #print STDERR "$command, $key, $style_map_texi{$command}->{$key}\n"; $simple_format_style_map_texi{$command}->{$key} = $style_map_texi{$command}->{$key}; } $simple_format_style_map_texi{$command} = {} if (!defined($simple_format_style_map_texi{$command})); } foreach my $accent_command ('tieaccent', 'dotless', keys(%unicode_accents)) { # $simple_format_style_map_texi{$accent_command}->{'args'} = ['normal']; $simple_format_style_map_texi{$accent_command}->{'function'} = \&t2h_default_accent; } # regions expanded or not depending on the value of this hash. # @EXPAND sets entries in this hash, and you should better use # @EXPAND unless you know what you are doing. %texi_formats_map = ( 'iftex' => 0, 'ignore' => 0, 'menu' => 0, 'ifplaintext' => 0, 'ifinfo' => 0, 'ifxml' => 0, 'ifhtml' => 0, 'ifdocbook' => 0, 'html' => 0, 'tex' => 0, 'xml' => 0, 'docbook' => 0, 'titlepage' => 1, 'documentdescription' => 1, 'copying' => 1, 'ifnothtml' => 1, 'ifnottex' => 1, 'ifnotplaintext' => 1, 'ifnotinfo' => 1, 'ifnotxml' => 1, 'ifnotdocbook' => 1, 'direntry' => 0, 'verbatim' => 'raw', 'ifclear' => 'value', 'ifset' => 'value' , ); %format_map = ( # 'quotation' => 'blockquote', # lists # 'itemize' => 'ul', 'enumerate' => 'ol', # 'multitable' => 'table', 'table' => 'dl compact="compact"', 'vtable' => 'dl compact="compact"', 'ftable' => 'dl compact="compact"', 'group' => '', # 'detailmenu' => '', ); %special_list_commands = ( 'table' => {}, 'vtable' => {}, 'ftable' => {}, 'itemize' => { 'bullet' => '' } ); %inter_item_commands = ( 'c' => 1, 'comment' => 1, 'cindex' => 1 ); # # texinfo format to align attribute of paragraphs # %paragraph_style = ( 'center' => 'center', 'flushleft' => 'left', 'flushright' => 'right', ); # an eval of these $complex_format_map->{what}->{'begin'} yields beginning # an eval of these $complex_format_map->{what}->{'end'} yields end # $EXAMPLE_INDENT_CELL and SMALL_EXAMPLE_INDENT_CELL can be usefull here $complex_format_map = { 'example' => { 'begin' => q{"
    ' . &$I('Button') . " ' . &$I('Name') . " ' . &$I('Go to') . " ' . &$I('From 1.2.3 go to') . "
    "; $about .= ($ICONS && $ACTIVE_ICONS{$button} ? &$button_icon_img($BUTTONS_NAME{$button}, $ACTIVE_ICONS{$button}) : ' [' . $NAVIGATION_TEXT{$button} . '] '); $about .= "$BUTTONS_GOTO{$button} $BUTTONS_EXAMPLE{$button}
    $EXAMPLE_INDENT_CELL
    "}, 'end' => q{"
    \n"}, 'style' => 'code', }, 'smallexample' => { 'begin' => q{"$SMALL_EXAMPLE_INDENT_CELL
    "}, 'end' => q{"
    \n"}, 'style' => 'code', }, 'display' => { 'begin' => q{"$EXAMPLE_INDENT_CELL
    "}, 'end' => q{"
    \n"}, }, 'smalldisplay' => { 'begin' => q{"$SMALL_EXAMPLE_INDENT_CELL
    "}, 'end' => q{"
    \n"}, } }; # format shouldn't narrow the margins $complex_format_map->{'lisp'} = $complex_format_map->{'example'}; $complex_format_map->{'smalllisp'} = $complex_format_map->{'smallexample'}; $complex_format_map->{'format'} = $complex_format_map->{'display'}; $complex_format_map->{'smallformat'} = $complex_format_map->{'smalldisplay'}; %def_map = ( # basic commands 'deffn', [ 'f', 'category', 'name', 'arg' ], 'defvr', [ 'v', 'category', 'name' ], 'deftypefn', [ 'f', 'category', 'type', 'name', 'argtype' ], 'deftypeop', [ 'f', 'category', 'class' , 'type', 'name', 'argtype' ], 'deftypevr', [ 'v', 'category', 'type', 'name' ], 'defcv', [ 'v', 'category', 'class' , 'name' ], 'deftypecv', [ 'v', 'category', 'class' , 'type', 'name' ], 'defop', [ 'f', 'category', 'class' , 'name', 'arg' ], 'deftp', [ 't', 'category', 'name', 'argtype' ], # shortcuts # FIXME i18n 'defun', 'deffn Function', 'defmac', 'deffn Macro', 'defspec', 'deffn {Special Form}', 'defvar', 'defvr Variable', 'defopt', 'defvr {User Option}', 'deftypefun', 'deftypefn {Function}', 'deftypevar', 'deftypevr Variable', 'defivar', 'defcv {Instance Variable}', 'deftypeivar', 'deftypecv {Instance Variable}', 'defmethod', 'defop Method', 'deftypemethod', 'deftypeop Method', ); $def_always_delimiters = "()[]"; $def_in_type_delimiters = ",;"; $def_argument_separator_delimiters = "()[],"; # basic x commands foreach my $key (keys(%def_map)) { $def_map{$key . 'x'} = $def_map{$key}; } # # miscalleneous commands # # Depending on the value, the command arg or spaces following the command # are handled differently: # # the value is a reference on a hash. # the hash keys are # 'arg' if the value is 'line' then the remaining of the line is the arg # if it is a number it is the number of args (separated by spaces) # 'skip' if the value is 'line' then the remaining of the line is skipped # if the value is 'space' space but no newline is skipped # if the value is 'whitespace' space is skipped # if the value is 'linewhitespace' space is skipped if there are # only spaces remaining on the line # if the value is 'linespace' space but no newline is skipped if # there are only spaces remaining on the line # 'keep' if true the args and the macro are kept, otherwise the macro # args and skipped stuffs are removed %misc_command = ( 'bye' => {'skip' => 'line'}, # no arg # set, clear 'set' => {'skip' => 'line'}, # special arg 'clear' => {'skip' => 'line'}, # special arg # comments 'comment' => {'arg' => 'line'}, 'c' => {'arg' => 'line'}, # not needed for formatting 'raisesections' => {'skip' => 'line'}, # no arg 'lowersections' => {'skip' => 'line'}, # no arg 'contents' => {}, # no arg 'shortcontents' => {}, # no arg 'summarycontents'=> {}, # no arg 'setcontentsaftertitlepage' => {}, # no arg 'setshortcontentsaftertitlepage' => {}, # no arg # 'detailmenu' => {'skip' => 'whitespace'}, # no arg # 'end detailmenu' => {'skip' => 'whitespace'}, # no arg 'clickstyle' => {'skip' => 'line'}, # arg should be an @-command # in preamble 'novalidate' => {}, # no arg 'dircategory'=> {'arg' => 'line'}, # line. Position with regard # with direntry is significant 'pagesizes' => {'skip' => 'line', 'arg' => 'line'}, # can have 2 args # or one? 200mm,150mm 11.5in 'finalout' => {}, # no arg 'paragraphindent' => {'skip' => 'line', 'arg' => 1}, # arg none asis # or a number and forbids anything else on the line 'firstparagraphindent' => {'skip' => 'line', 'arg' => 1}, # none insert 'frenchspacing' => {'arg' => 1}, # on off 'fonttextsize' => {'arg' => 1}, # 10 11 'allowcodebreaks' => {'arg' => 1}, # false or true 'exampleindent' => {'skip' => 'line', 'arg' => 1}, # asis or a number 'footnotestyle'=> {'skip' => 'line', 'arg' => 1}, # end and separate # and nothing else on the line 'afourpaper' => {'skip' => 'line'}, # no arg 'afivepaper' => {'skip' => 'line'}, # no arg 'afourlatex' => {'skip' => 'line'}, # no arg 'afourwide' => {'skip' => 'line'}, # no arg 'headings'=> {'skip' => 'line', 'arg' => 1}, #off on single double singleafter doubleafter # interacts with setchapternewpage 'setchapternewpage' => {'skip' => 'line', 'arg' => 1}, # off on odd 'everyheading' => {'arg' => 'line'}, 'everyfooting' => {'arg' => 'line'}, 'evenheading' => {'arg' => 'line'}, 'evenfooting' => {'arg' => 'line'}, 'oddheading' => {'arg' => 'line'}, 'oddfooting' => {'arg' => 'line'}, 'smallbook' => {'skip' => 'line'}, # no arg 'setfilename' => {'arg' => 'line'}, #'shorttitle' => {'arg' => 'line', 'texi' => 1}, #'shorttitlepage' => {'arg' => 'line', 'texi' => 1}, #'settitle' => {'arg' => 'line', 'texi' => 1}, #'author' => {'arg' => 'line', 'texi' => 1}, #'subtitle' => {'arg' => 'line', 'texi' => 1}, #'title' => {'arg' => 'line', 'texi' => 1}, 'shorttitle' => {'arg' => 'line'}, 'shorttitlepage' => {'arg' => 'line'}, 'settitle' => {'arg' => 'line'}, 'author' => {'arg' => 'line'}, 'subtitle' => {'arg' => 'line'}, 'title' => {'arg' => 'line'}, 'syncodeindex' => {'skip' => 'linespace', 'arg' => 2}, # args are index identifiers 'synindex' => {'skip' => 'linespace', 'arg' => 2}, 'defindex' => {'skip' => 'line', 'arg' => 1}, # one identifier arg 'defcodeindex' => {'skip' => 'line', 'arg' => 1}, # one identifier arg 'documentlanguage' => {'skip' => 'whitespace', 'arg' => 1}, # language code arg 'kbdinputstyle' => {'skip' => 'whitespace', 'arg' => 1}, # code #example distinct 'everyheadingmarks' => {'skip' => 'whitespace', 'arg' => 1}, # top bottom #makeinfo ignore line 'everyfootingmarks' => {'skip' => 'whitespace', 'arg' => 1}, 'evenheadingmarks' => {'skip' => 'whitespace', 'arg' => 1}, 'oddheadingmarks' => {'skip' => 'whitespace', 'arg' => 1}, 'evenfootingmarks' => {'skip' => 'whitespace', 'arg' => 1}, 'oddfootingmarks' => {'skip' => 'whitespace', 'arg' => 1}, 'sp' => {'skip' => 'whitespace', 'arg' => 1}, # no arg # at the end of line or a numerical arg # formatting 'page' => {}, # no arg (pagebreak) 'refill' => {}, # no arg (obsolete, to be ignored) 'noindent' => {'skip' => 'whitespace'}, # no arg 'indent' => {'skip' => 'whitespace'}, 'need' => {'skip' => 'line', 'arg' => 1}, # one numerical/real arg 'exdent' => {'skip' => 'space'}, # not valid for info (should be in @iftex) 'vskip' => {'arg' => 'line'}, # arg line in TeX 'cropmarks' => {}, # no arg # miscalleneous 'verbatiminclude'=> {'skip' => 'line'}, 'documentencoding' => {'arg' => 1}, # makeinfo ignore the whole line # ??? 'filbreak' => {}, # obsolete @-commands 'quote-arg' => {}, 'allow-recursion' => {}, ); my %misc_command_old = ( # not needed for formatting 'raisesections', 'line', # no arg 'lowersections', 'line', # no arg 'contents', 1, # no arg 'shortcontents', 1, # no arg 'summarycontents', 1, # no arg 'detailmenu', 'whitespace', # no arg 'end detailmenu', 'whitespace', # no arg #'end detailmenu', 1, # no arg 'novalidate', 1, # no arg 'bye', 'line', # no arg # comments 'comment', 'line', 'c', 'line', # in preamble 'dircategory', 'line', # line. Position with regard with direntry is # significant 'pagesizes', 'line arg2', # can have 2 args 'finalout', 1, # no arg 'paragraphindent', 'line arg1', # in fact accepts only none asis # or a number and forbids anything else on the line 'firstparagraphindent', 'line arg1', # in fact accepts only none insert 'exampleindent', 'line arg1', # in fact accepts only asis or a number 'footnotestyle', 'line arg1', # in fact accepts only end and separate # and nothing else on the line 'afourpaper', 'line', # no arg 'afourlatex', 'line', # no arg 'afourwide', 'line', # no arg 'headings', 'line', # one arg, possibilities are #off on single double singleafter doubleafter # interacts with setchapternewpage 'setchapternewpage', 'line', # no arg 'everyheading', 'line', 'everyfooting', 'line', 'evenheading', 'line', 'evenfooting', 'line', 'oddheading', 'line', 'oddfooting', 'line', 'smallbook', 'line', # no arg 'setfilename', 'line', 'shorttitle', 'linetexi', 'shorttitlepage', 'linetexi', 'settitle', 'linetexi', 'author', 'linetexi', 'subtitle', 'linetexi', 'title','linetexi', 'syncodeindex','linespace arg2', # args are 'synindex','linespace arg2', 'defindex', 'line arg1', # one identifier arg 'defcodeindex', 'line arg1', # one identifier arg 'documentlanguage', 'whitespace arg1', # one language code arg 'kbdinputstyle', 'whitespace arg1', # one arg within #code example distnct 'sp', 'whitespace arg1', # no arg at the en of line or a numerical arg # formatting 'page', 1, # no arg (pagebreak) 'refill', 1, # no arg (obsolete, to be ignored)) 'noindent', 'space', # no arg 'need', 'line arg1', # one numerical/real arg 'exdent', 'space', # not valid for info (should be in @iftex) 'vskip', 'line', # arg line in TeX 'cropmarks', 1, # no arg # miscalleneous 'verbatiminclude', 'line', 'documentencoding', 'arg1', # ??? 'filbreak', 1, ); %format_in_paragraph = ( 'html' => 1, ); # map mapping css specification to style %css_map = ( 'ul.toc' => "$NO_BULLET_LIST_STYLE", 'pre.menu-comment' => "$MENU_PRE_STYLE", 'pre.menu-preformatted' => "$MENU_PRE_STYLE", 'a.summary-letter' => 'text-decoration: none', 'blockquote.smallquotation' => 'font-size: smaller', # 'pre.display' => 'font-family: inherit', # 'pre.smalldisplay' => 'font-family: inherit; font-size: smaller', 'pre.display' => 'font-family: serif', 'pre.smalldisplay' => 'font-family: serif; font-size: smaller', 'pre.smallexample' => 'font-size: smaller', 'span.sansserif' => 'font-family:sans-serif; font-weight:normal;', 'span.roman' => 'font-family:serif; font-weight:normal;' ); $css_map{'pre.format'} = $css_map{'pre.display'}; $css_map{'pre.smallformat'} = $css_map{'pre.smalldisplay'}; $css_map{'pre.smalllisp'} = $css_map{'pre.smallexample'}; # The command_handler arrays are for commands formatted externally. # The function references in @command_handler_init are called # before the second pass, before the @-commands text collection. # Those in @command_handler_process are called between the second pass # and the third pass, after collection of @-commands text and before their # expansion. # Those in @command_handler_process are called after the third pass, # after the document generation. @command_handler_init = (); @command_handler_process = (); @command_handler_finish = (); # the keys of %command_handler are @-command names and the value # is a hash reference with the following keys: # 'init' function reference used to collect the @-command text # 'expand' function reference used when expanding the @-command text %command_handler = (); # formatting functions $anchor = \&t2h_default_anchor; $def_item = \&t2h_default_def_item; $def = \&t2h_default_def; $menu_command = \&t2h_default_menu_command; $menu_link = \&t2h_default_menu_link; #$menu_comment = \&t2h_default_menu_comment; $menu_description = \&t2h_default_menu_description; #$simple_menu_link = \&t2h_default_simple_menu_link; $external_ref = \&t2h_default_external_ref; $external_href = \&t2h_default_external_href; $internal_ref = \&t2h_default_internal_ref; $table_item = \&t2h_default_table_item; $table_line = \&t2h_default_table_line; $table_list = \&t2h_default_table_list; $row = \&t2h_default_row; $cell = \&t2h_default_cell; $list_item = \&t2h_default_list_item; $comment = \&t2h_default_comment; $def_line = \&t2h_default_def_line; $def_line_no_texi = \&t2h_default_def_line_no_texi; $raw = \&t2h_default_raw; $raw_no_texi = \&t2h_default_raw_no_texi; $heading = \&t2h_default_heading; $element_heading = \&t2h_default_element_heading; $heading_no_texi = \&t2h_default_heading_no_texi; $paragraph = \&t2h_default_paragraph; $preformatted = \&t2h_default_preformatted; $foot_line_and_ref = \&t2h_default_foot_line_and_ref; $foot_section = \&t2h_default_foot_section; $image_files = \&t2h_default_image_files; $image = \&t2h_default_image; $address = \&t2h_default_address; $index_entry_label = \&t2h_default_index_entry_label; $index_summary = \&t2h_default_index_summary; #$summary_letter = \&t2h_default_summary_letter; $index_entry = \&t2h_default_index_entry; $index_entry_command = \&t2h_default_index_entry_command; $index_letter = \&t2h_default_index_letter; #$printindex = \&t2h_default_printindex; $print_index = \&t2h_default_print_index; $protect_text = \&t2h_default_protect_text; $normal_text = \&t2h_default_normal_text; $complex_format = \&t2h_default_complex_format; $cartouche = \&t2h_default_cartouche; $sp = \&t2h_default_sp; $definition_category = \&t2h_default_definition_category; $definition_index_entry = \&t2h_default_definition_index_entry; $copying_comment = \&t2h_default_copying_comment; $documentdescription = \&t2h_default_documentdescription; $index_summary_file_entry = \&t2h_default_index_summary_file_entry; $index_summary_file_end = \&t2h_default_index_summary_file_end; $index_summary_file_begin = \&t2h_default_index_summary_file_begin; $empty_line = \&t2h_default_empty_line; $unknown = \&t2h_default_unknown; $unknown_style = \&t2h_default_unknown_style; $caption_shortcaption = \&t2h_default_caption_shortcaption; $caption_shortcaption_command = \&t2h_default_caption_shortcaption_command; $float = \&t2h_default_float; $listoffloats = \&t2h_default_listoffloats; $listoffloats_entry = \&t2h_default_listoffloats_entry; $listoffloats_caption = \&t2h_default_listoffloats_caption; $listoffloats_float_style = \&t2h_default_listoffloats_float_style; $listoffloats_style = \&t2h_default_listoffloats_style; $acronym_like = \&t2h_default_acronym_like; $quotation = \&t2h_default_quotation; $quotation_prepend_text = \&t2h_default_quotation_prepend_text; $paragraph_style_command = \&t2h_default_paragraph_style_command; $heading_texi = \&t2h_default_heading_texi; $index_element_heading_texi = \&t2h_default_index_element_heading_texi; $element_label = \&t2h_default_element_label; $misc_element_label = \&t2h_default_misc_element_label; $anchor_label = \&t2h_default_anchor_label; $preserve_misc_command = \&t2h_default_preserve_misc_command; $format_list_item_texi = \&t2h_default_format_list_item_texi; $begin_format_texi = \&t2h_default_begin_format_texi; $tab_item_texi = \&t2h_default_tab_item_texi; $insertcopying = \&t2h_default_insertcopying; $colon_command = \&t2h_default_colon_command; $simple_command = \&t2h_default_simple_command; $thing_command = \&t2h_default_thing_command; # return the line after preserving things according to misc_command map. # You should not change it. It is here, nevertheless, to be used # in other function references if needed. sub t2h_default_preserve_misc_command($$) { my $line = shift; my $macro = shift; my $text = ''; my $args = []; my $skip_spec = ''; my $arg_spec = ''; #print STDERR "HHHHHHHHH $line $macro\n"; $skip_spec = $misc_command{$macro}->{'skip'} if (defined($misc_command{$macro}->{'skip'})); $arg_spec = $misc_command{$macro}->{'arg'} if (defined($misc_command{$macro}->{'arg'})); if ($arg_spec eq 'line') { $text .= $line; $args = [ $line ]; $line = ''; } elsif ($arg_spec) { my $arg_nr = $misc_command{$macro}->{'arg'}; while ($arg_nr) { $line =~ s/(\s+\S*)//o; my $argument = $1; if (defined($argument)) { $text .= $argument; push @$args, $argument; } $arg_nr--; } } if ($macro eq 'bye') { $line = ''; $text = "\n"; } elsif ($skip_spec eq 'linespace') { if ($line =~ /^\s*$/o) { $line =~ s/([ \t]*)//o; $text .= $1; } } elsif ($skip_spec eq 'linewhitespace') { if ($line =~ /^\s*$/o) { $text .= $line; $line = ''; } } elsif ($skip_spec eq 'line') { $text .= $line; $line = ''; } elsif ($skip_spec eq 'whitespace') { $line =~ s/(\s*)//o; $text .= $1; } elsif ($skip_spec eq 'space') { $line =~ s/([ \t]*)//o; $text .= $1; } $line = '' if (!defined($line)); return ($line, $text, $args); } sub t2h_default_simple_command($$$$) { my $command = shift; my $in_preformatted = shift; my $line_nr = shift; my $state = shift; if ($in_preformatted) { return $simple_map_pre{$command}; } else { return $simple_map{$command}; } } sub t2h_default_thing_command($$$$$) { my $command = shift; my $text = shift; my $in_preformatted = shift; my $line_nr = shift; my $state = shift; my $result; if ($in_preformatted) { $result = $pre_map{$command}; } else { $result = $things_map{$command}; } return $result . $text; } # this is called each time a format begins. Here it is used to keep a # record of the multitables to have a faithful count of the cell nr. sub t2h_default_begin_format_texi($$$) { my $command = shift; my $line = shift; my $state = shift; # first array element is the number of cell in a row # second is the number of paragraphs in a cell push (@t2h_default_multitable_stack, [-1,-1]) if ($command eq 'multitable'); return $line; } # This function is called whenever a complex format is processed # # arguments: # name of the format # text appearing inside the format # # an eval of $complex_format->{format name}->{'begin'} should lead to the # beginning of the complex format, an eval of # $complex_format->{format name}->{'end'} should lead to the end of the # complex format. sub t2h_default_complex_format($$) { my $name = shift; my $text = shift; return '' if ($text eq ''); my $beginning = eval "$complex_format_map->{$name}->{'begin'}"; if ($@ ne '') { print STDERR "$ERROR Evaluation of $complex_format_map->{$name}->{'begin'}: $@"; $beginning = ''; } my $end = eval "$complex_format_map->{$name}->{'end'}"; if ($@ ne '') { print STDERR "$ERROR Evaluation of $complex_format_map->{$name}->{'end'}: $@"; $end = ''; } return $beginning . $text . $end; } sub t2h_default_empty_line($$) { my $text = shift; my $state = shift; #ignore the line if it just follows a deff return '' if ($state->{'deff_line'}); return $text; } sub t2h_default_unknown($$$$$) { my $macro = shift; my $line = shift; my $pass = shift; my $stack = shift; my $state = shift; my ($result_line, $result, $result_text, $message); return ($line, 0, undef, undef); } sub t2h_default_unknown_style($$$$) { my $command = shift; my $text = shift; my $state = shift; my ($result, $result_text, $message); return (0, undef, undef); } sub t2h_default_caption_shortcaption($) { my $float = shift; my $caption_lines; my $shortcaption_lines; my $style = $float->{'style_texi'}; if (defined($float->{'nr'})) { my $nr = $float->{'nr'}; if ($style ne '') { $style = &$I('%{style} %{number}', { 'style' => $style, 'number' => $nr}); } else { $style = $nr; } } if (defined($float->{'caption_texi'})) { @$caption_lines = @{$float->{'caption_texi'}}; if (defined($style)) { $caption_lines->[0] = '@strong{' . &$I('%{style}: %{caption_first_line}', { 'style' => $style, 'caption_first_line' => $caption_lines->[0] }); } else { $caption_lines->[0] = '@strong{' . $caption_lines->[0]; } push @$caption_lines, "}\n"; } elsif (defined($style)) { $caption_lines->[0] = '@strong{' . $style . '}' . "\n"; } if (defined($float->{'shortcaption_texi'})) { @$shortcaption_lines = @{$float->{'shortcaption_texi'}}; if (defined($style)) { $shortcaption_lines->[0] = '@strong{' . &$I('%{style}: %{shortcaption_first_line}', { 'style' => $style, 'shortcaption_first_line' => $shortcaption_lines->[0] }); } else { $shortcaption_lines->[0] = '@strong{' . $shortcaption_lines->[0]; } push @$shortcaption_lines, "}\n"; } elsif (defined($style)) { $shortcaption_lines->[0] = '@strong{' . $style . '}' . "\n"; } return ($caption_lines, $shortcaption_lines); } # everything is done in &$float sub t2h_default_caption_shortcaption_command($$$$) { my $command = shift; my $text = shift; my $texi_lines = shift; my $float_element = shift; return ''; } sub t2h_default_float($$$$$) { my $text = shift; my $float = shift; my $caption = shift; my $shortcaption = shift; my $label = ''; if (exists($float->{'id'})) { $label = &$anchor($float->{'id'}); } my $caption_text = ''; if (defined($float->{'caption_texi'})) { $caption_text = $caption; } elsif (defined($float->{'shortcaption_texi'})) { $caption_text = $shortcaption; } elsif (defined($caption)) { $caption_text = $caption; } return '

    ' . "$label\n" . $text . '
    ' . $caption_text; } sub t2h_default_listoffloats_style($) { my $style_texi = shift; return ($style_texi); } sub t2h_default_listoffloats_float_style($$) { my $style_texi = shift; my $float = shift; my $style = $float->{'style_texi'}; if (defined($float->{'nr'})) { my $nr = $float->{'nr'}; if ($style ne '') { $style = &$I('%{style} %{number}', { 'style' => $style, 'number' => $nr}); } else { $style = $nr; } } return $style; } sub t2h_default_listoffloats_caption($) { my $float = shift; if (defined($float->{'shortcaption_texi'})) { return [ @{$float->{'shortcaption_texi'}} ]; } elsif (defined($float->{'caption_texi'})) { return [ @{$float->{'caption_texi'}} ]; } return [ ]; } sub t2h_default_listoffloats_entry($$$$) { my $style_texi = shift; my $float = shift; my $float_style = shift; my $caption = shift; my $href = shift; return '
    ' . &$anchor('', $href, $float_style) . '
    ' . $caption . '
    ' . "\n"; } sub t2h_default_listoffloats($$$) { my $style_texi = shift; my $style = shift; my $float_entries = shift; my $result = "
    \n" ; foreach my $float_entry (@$float_entries) { $result .= $float_entry; } return $result . "
    \n"; } sub t2h_default_insertcopying($$$) { my $text = shift; my $comment = shift; my $simple_text = shift; return $text; } # This function is used to protect characters which are special in html # in inline text: &, ", <, and >. # # argument: # text to be protected sub t2h_default_protect_text($) { my $text = shift; $text =~ s/&/&/g; $text =~ s//>/g; $text =~ s/\"/"/g; return $text; } sub in_cmd($$) { my $style_stack = shift; my $command = shift; my $result = 0; if ($style_stack and scalar(@{$style_stack})) { my $level = $#$style_stack; #print STDERR ":::$level ::@{$style_stack}\n"; while ($level >= 0) { if ($style_stack->[$level] eq $command) { $result = 1; last; } $level--; } } return $result; } # # sub in_small_caps($) { my $style_stack = shift; my $in_sc = 0; if ($style_stack and scalar(@{$style_stack})) { my $level = $#$style_stack; #print STDERR ":::$level ::@{$style_stack}\n"; while ($level >= 0) { if ($style_stack->[$level] eq 'sc') { $in_sc = 1; last; } $level--; } } return $in_sc; } # # sub t2h_default_normal_text($$$$$$;$) { my $text = shift; my $in_raw_text = shift; # remove_texi my $in_preformatted = shift; my $in_code = shift; my $in_simple = shift; my $style_stack = shift; my $state = shift; $text = uc($text) if (in_cmd($style_stack, 'sc')); $text = &$protect_text($text) unless($in_raw_text); if (! $in_code and !$in_preformatted) { if ($USE_ISO and !$in_raw_text) { $text =~ s/---/\&mdash\;/g; $text =~ s/--/\&ndash\;/g; $text =~ s/``/\&ldquo\;/g; $text =~ s/''/\&rdquo\;/g; if (! $in_simple) { # lquot and rquot don't seem to be accepted in title. $text =~ s/'/$iso_symbols{"'"}/g if (defined ($iso_symbols{"'"})); $text =~ s/`/$iso_symbols{'`'}/g if (defined ($iso_symbols{'`'})); } } else { if ($in_raw_text) #FIXME really do that ? It is done by makeinfo { $text =~ s/``/"/g; $text =~ s/''/"/g; } else { $text =~ s/``/"/g; $text =~ s/''/"/g; # to be like texinfo #$text =~ s/'/\&rsquo\;/g; #$text =~ s/`/\&lsquo\;/g; } # temporary reuse '' to store --- !.... # FIXME won't '---' be handled wrongly? # FIXME really do that in raw text? $text =~ s/---/''/g; $text =~ s/--/-/g; $text =~ s/''/--/g; } } else { # to be like texinfo # my $special_code = 0; # $special_code = 1 if (in_cmd($style_stack, 'code') or # in_cmd($style_stack, 'example') or in_cmd($style_stack, 'verbatim')); # $text =~ s/'/\&rsquo\;/g unless ($special_code and exists($main::value{'txicodequoteundirected'})); # $text =~ s/`/\&lsquo\;/g unless ($special_code and exists($main::value{'txicodequotebacktick'})); } return $text; } # This function produces an anchor # # arguments: # $name : anchor name # $href : anchor href # text : text displayed # extra_attribs : added to anchor attributes list sub t2h_default_anchor($;$$$) { my $name = shift; my $href = shift; my $text = shift; my $attributes = shift; #print STDERR "!$name!$href!$text!$attributes!\n"; if (!defined($attributes) or ($attributes !~ /\S/)) { $attributes = ''; } else { $attributes = ' ' . $attributes; } $name = '' if (!defined($name) or ($name !~ /\S/)); $href = '' if (!defined($href) or ($href !~ /\S/)); $text = '' if (!defined($text)); return $text if (($name eq '') and ($href eq '')); $name = "name=\"$name\"" if ($name ne ''); $href = "href=\"$href\"" if ($href ne ''); $href = ' ' . $href if (($name ne '') and ($href ne '')); #print STDERR "!!!$name!$href!$text!$attributes!\n"; return "$text"; } # This function is used to format the text associated with a @deff/@end deff # # argument: # text # # $DEF_TABLE should be used to distinguish between @def formatted as table # and as definition lists. sub t2h_default_def_item($$) { my $text = shift; my $only_inter_item_commands = shift; if ($text =~ /\S/) { if (! $DEF_TABLE) { return '
    ' . $text . '
    ';# unless $only_inter_item_commands; #return $text; # invalid without dd in ul } else { return '' . $text . ''; } } return ''; } sub t2h_default_definition_category($$$$) { my $name = shift; my $class = shift; my $style = shift; my $command = shift; return ($name) if (!defined($class) or $class =~ /^\s*$/); if ($style eq 'f') { return &$I('%{name} on %{class}', { 'name' => $name, 'class' => $class }); } elsif ($style eq 'v') { return &$I('%{name} of %{class}', { 'name' => $name, 'class' => $class }); } else { return $name; } } sub t2h_default_definition_index_entry($$$$) { my $name = shift; my $class = shift; my $style = shift; my $command = shift; return ($name) if (!defined($class) or $class =~ /^\s*$/); if ($style eq 'f') { return &$I('%{name} on %{class}', { 'name' => $name, 'class' => $class }); } elsif ($style eq 'v' and $command ne 'defcv') { return &$I('%{name} of %{class}', { 'name' => $name, 'class' => $class }); } else { return $name; } } # format the container for the @deffn line and text # # argument # text of the whole @def, line and associated text. # # $DEF_TABLE should be used. sub t2h_default_def($) { my $text = shift; if ($text =~ /\S/) { if (! $DEF_TABLE) { return "
    \n" . $text . "
    \n"; } else { return "\n" . $text . "
    \n"; } } return ''; } # tracks menu entry index my $menu_entry_index; # a whole menu # # argument: # the whole menu text (entries and menu comments) # # argument: # whole menu text. sub t2h_default_menu_command($$$) { my $format = shift; my $text = shift; my $in_preformatted = shift; $menu_entry_index=0; my $begin_row = ''; my $end_row = ''; if ($in_preformatted) { $begin_row = ''; $end_row = ''; } if ($text =~ /\S/) { return $text if ($format eq 'detailmenu'); return "${begin_row}\n" . $text . "${end_row}
    \n"; } } # obsolete # a simple menu entry ref in case we aren't in a standard menu context #sub t2h_default_simple_menu_link($$$$$$$) #{ # my $entry = shift; # my $preformatted = shift; # my $href = shift; # my $node = shift; # my $title = shift; # my $ending = shift; # my $has_title = shift; # $title = '' unless($has_title); # $ending = '' if (!defined($ending)); # if (($entry eq '') or $NODE_NAME_IN_MENU or $preformatted) # { # $title .= ':' if ($title ne ''); # $entry = "$MENU_SYMBOL$title$node"; # } # $menu_entry_index++; # my $accesskey; # $accesskey = "accesskey=\"$menu_entry_index\"" if ($USE_ACCESSKEY and ($menu_entry_index < 10)); # $entry = &$anchor('', $href, $entry, $accesskey) if ($href); # $entry .= $ending if ($preformatted); # $entry .= ' ' unless $preformatted; # return $entry; #} # formats a menu entry link pointing to a node or section # # arguments: # the entry text # the state, a hash reference holding informations about the context, with a # usefull entry, 'preformatted', true if we are in a preformatted format # (a format keeping space between words). In that case a function # of the main program, main::do_preformatted($text, $state) might # be used to format the text with the current format style. # href is optionnal. It is the reference to the section or the node anchor # which should be used to make the link (typically it is the argument # of a href= attribute in a element). sub t2h_default_menu_link($$$$$$$$) { my $entry = shift; my $state = shift; my $href = shift; my $node = shift; my $title = shift; my $ending = shift; my $has_title = shift; my $command_stack = shift; my $preformatted = shift; my $in_commands = 0; $in_commands = 1 if ($command_stack->[-1] and $command_stack->[-1] ne 'menu' and $command_stack->[-1] ne 'detailmenu'); $title = '' unless ($has_title); #print STDERR "MENU_LINK($in_commands)($state->{'preformatted'})\n"; if (($entry eq '') or $NODE_NAME_IN_MENU or $preformatted) { $title .= ':' if ($title ne ''); $entry = "$MENU_SYMBOL$title$node"; } $menu_entry_index++; my $accesskey; $accesskey = "accesskey=\"$menu_entry_index\"" if ($USE_ACCESSKEY and ($menu_entry_index < 10)); $entry = &$anchor ('', $href, $entry, $accesskey) if (defined($href)); return $entry.$ending if ($preformatted); return $entry .' ' if ($in_commands); return "$entry  "; } sub simplify_text($) { my $text = shift; $text =~ s/[^\w]//og; return $text; } # formats a menu entry description, ie the text appearing after the node # specification in a menu entry an spanning until there is another # menu entry, an empty line or some text at the very beginning of the line # (we consider that text at the beginning of the line begins a menu comment) # # arguments: # the description text # the state. See menu_entry. # the heading of the element associated with the node. sub t2h_default_menu_description($$$$) { my $text = shift; my $state = shift; my $element_text = shift; my $command_stack = shift; my $preformatted = shift; my $in_commands = 0; $in_commands = 1 if ($command_stack->[-1] and $command_stack->[-1] ne 'menu' and $command_stack->[-1] ne 'detailmenu'); return $text if ($preformatted or $in_commands); # FIXME: the following is better-looking. #return $text."
    " if ($in_commands and !$state->{'preformatted'}); if ($AVOID_MENU_REDUNDANCY) { $text = '' if (simplify_text($element_text) eq simplify_text($text)); } return "$text\n"; } # a menu comment (between menu lines, obsolete) # formats the container of a menu comment. A menu comment is any text # appearing between menu lines, either separated by an empty line from # the preceding menu entry, or a text beginning at the first character # of the line (text not at the very beginning of the line is considered to # be the continuation of a menu entry description text). # # The text itself is considered to be in a preformatted environment # with name 'menu-commment' and with style $MENU_PRE_STYLE. # # argument # text contained in the menu comment. #sub t2h_default_menu_comment($) #{ # my $text = shift; # return $text if ($SIMPLE_MENU); # if ($text =~ /\S/) # { # return "$text"; # } # return ''; #} # Construct a href to an external source of information. # node is the node with texinfo @-commands # node_id is the node transliterated and transformed as explained in the # texinfo manual # node_xhtml_id is the node transformed such that it is unique and can # be used to make an html cross ref as explained in the texinfo manual # file is the file in '(file)node' sub t2h_default_external_href($$$) { my $node = shift; my $node_id = shift; my $node_xhtml_id = shift; my $file = shift; $file = '' if (!defined($file)); my $default_target_split = $Texi2HTML::THISDOC{'EXTERNAL_CROSSREF_SPLIT'}; my $target_split; my $target_mono; my $href_split; my $href_mono; if ($file ne '') { if ($NEW_CROSSREF_STYLE) { $file =~ s/\.[^\.]*$//; $file =~ s/^.*\///; my $href; if (exists($Texi2HTML::THISDOC{'htmlxref'}->{$file})) { if (exists($Texi2HTML::THISDOC{'htmlxref'}->{$file}->{'split'})) { $target_split = 1; $href_split = $Texi2HTML::THISDOC{'htmlxref'}->{$file}->{'split'}->{'href'}; } if (exists($Texi2HTML::THISDOC{'htmlxref'}->{$file}->{'mono'})) { $target_mono = 1; $href_mono = $Texi2HTML::THISDOC{'htmlxref'}->{$file}->{'mono'}->{'href'}; } } if ((not $target_mono) and (not $target_split)) { # nothing specified for that manual, use default $target_split = $default_target_split; } elsif ($target_split and $target_mono) { # depends on the splitting of the manual $target_split = $SPLIT; } elsif ($target_mono) { # only mono specified $target_split = 0; } if ($target_split) { if (defined($href_split)) { $file = "$href_split"; } elsif (defined($EXTERNAL_DIR)) { $file = "$EXTERNAL_DIR/$file"; } elsif ($SPLIT) { $file = "../$file"; } $file .= "/"; } else {# target not split if (defined($href_mono)) { $file = "$href_mono"; } else { if (defined($EXTERNAL_DIR)) { $file = "$EXTERNAL_DIR/$file"; } elsif ($SPLIT) { $file = "../$file"; } $file .= "." . $NODE_FILE_EXTENSION; } } } else { $file .= "/"; if (defined($EXTERNAL_DIR)) { $file = $EXTERNAL_DIR . $file; } else { $file = '../' . $file; } } } else { $target_split = $default_target_split; } if ($node eq '') { if ($NEW_CROSSREF_STYLE) { if ($target_split) { return $file . $TOP_NODE_FILE . '.' . $NODE_FILE_EXTENSION . '#Top'; # or ? #return $file . '#Top'; } else { return $file . '#Top'; } } else { return $file; } } my $target; if ($NEW_CROSSREF_STYLE) { $node = $node_id; $target = $node_xhtml_id; } else { $node = main::remove_texi($node); $node =~ s/[^\w\.\-]/-/g; } my $file_basename = $node; $file_basename = $TOP_NODE_FILE if ($node =~ /^top$/i); if ($NEW_CROSSREF_STYLE) { if ($target_split) { return $file . $file_basename . ".$NODE_FILE_EXTENSION" . '#' . $target; } else { return $file . '#' . $target; } } else { return $file . $file_basename . ".$NODE_FILE_EXTENSION"; } } # format a reference external to the generated manual. This produces a full # reference with introductive words and the reference itself. # # arguments: # type of the reference: xref (reference at the beginning of a sentence), # pxref (reference in a parenthesis), # section in the book. This might be undef. # book name. # node and file name formatted according to the convention used in info # '(file)node' and no node means the Top node. # href linking to the html page containing the referenced node. A typical # use for this href is a href attribute in an
    element # an optionnal cross reference name sub t2h_default_external_ref($$$$$$$$) { my $type = shift; my $section = shift; my $book = shift; my $file_node = shift; my $href = shift; my $cross_ref = shift; my $args_texi = shift; my $formatted_args = shift; $file_node = "$cross_ref: $file_node" if (($file_node ne '') and ($cross_ref ne '')); $file_node = &$anchor('', $href, $file_node) if ($file_node ne ''); # Yes, this is ugly, but this helps internationalization if ($type eq 'pxref') { if (($book ne '') and ($file_node ne '')) { return &$I('see %{node_file_href} section `%{section}\' in @cite{%{book}}', { 'node_file_href' => $file_node, 'book' => $book, 'section' => $section },{'duplicate'=>1}) if ($section ne ''); return &$I('see %{node_file_href} @cite{%{book}}', { 'node_file_href' => $file_node, 'book' => $book },{'duplicate'=>1}); } elsif ($book ne '') { return &$I('see section `%{section}\' in @cite{%{book}}', { 'book' => $book, 'section' => $section },{'duplicate'=>1}) if ($section ne ''); return &$I('see @cite{%{book}}', { 'book' => $book },{'duplicate'=>1}); } elsif ($file_node ne '') { return &$I('see %{node_file_href}', { 'node_file_href' => $file_node },{'duplicate'=>1}); } } if ($type eq 'xref' or $type eq 'inforef') { if (($book ne '') and ($file_node ne '')) { return &$I('See %{node_file_href} section `%{section}\' in @cite{%{book}}', { 'node_file_href' => $file_node, 'book' => $book, 'section' => $section },{'duplicate'=>1}) if ($section ne ''); return &$I('See %{node_file_href} @cite{%{book}}', { 'node_file_href' => $file_node, 'book' => $book },{'duplicate'=>1}); } elsif ($book ne '') { return &$I('See section `%{section}\' in @cite{%{book}}', { 'book' => $book, 'section' => $section },{'duplicate'=>1}) if ($section ne ''); return &$I('See @cite{%{book}}', { 'book' => $book },{'duplicate'=>1}); } elsif ($file_node ne '') { return &$I('See %{node_file_href}', { 'node_file_href' => $file_node },{'duplicate'=>1}); } } if ($type eq 'ref') { if (($book ne '') and ($file_node ne '')) { return &$I('%{node_file_href} section `%{section}\' in @cite{%{book}}', { 'node_file_href' => $file_node, 'book' => $book, 'section' => $section },{'duplicate'=>1}) if ($section ne ''); return &$I('%{node_file_href} @cite{%{book}}', { 'node_file_href' => $file_node, 'book' => $book },{'duplicate'=>1}); } elsif ($book ne '') { return &$I('section `%{section}\' in @cite{%{book}}', { 'book' => $book, 'section' => $section },{'duplicate'=>1}) if ($section ne ''); return &$I('@cite{%{book}}', { 'book' => $book },{'duplicate'=>1}); } elsif ($file_node ne '') { return &$I('%{node_file_href}', { 'node_file_href' => $file_node },{'duplicate'=>1}); } } return ''; } # format a reference to a node or a section in the generated manual. This # produces a full reference with introductive words and the reference itself. # # arguments: # type of the reference: xref (reference at the beginning of a sentence), # pxref (reference in a parenthesis), # href linking to the html page containing the node or the section. A typical # use for this href is a href attribute in an element # short name for this reference # name for this reference # boolean true if the reference is a reference to a section # # $SHORT_REF should be used. sub t2h_default_internal_ref($$$$$$$) { my $type = shift; my $href = shift; my $short_name = shift; my $name = shift; my $is_section = shift; my $args_texi = shift; my $formatted_args = shift; if (! $SHORT_REF) { $name = &$anchor('', $href, $name); if ($type eq 'pxref') { return &$I('see section %{reference_name}', { 'reference_name' => $name },{'duplicate'=>1}) if ($is_section); return &$I('see %{reference_name}', { 'reference_name' => $name },{'duplicate'=>1}); } elsif ($type eq 'xref' or $type eq 'inforef') { return &$I('See section %{reference_name}', { 'reference_name' => $name },{'duplicate'=>1}) if ($is_section); return &$I('See %{reference_name}', { 'reference_name' => $name },{'duplicate'=>1}); } elsif ($type eq 'ref') { return &$I('%{reference_name}', { 'reference_name' => $name },{'duplicate'=>1}); } } else { $name = &$anchor('', $href, $short_name); if ($type eq 'pxref') { return &$I('see %{reference_name}', { 'reference_name' => $name },{'duplicate'=>1}); } elsif ($type eq 'xref' or $type eq 'inforef') { return &$I('See %{reference_name}', { 'reference_name' => $name },{'duplicate'=>1}); } elsif ($type eq 'ref') { return &$I('%{reference_name}', { 'reference_name' => $name },{'duplicate'=>1}); } } return ''; } sub teletyped_in_stack($) { my $stack = shift; foreach my $element(reverse(@$stack)) { return 1 if ($complex_format_map->{$element} and $complex_format_map->{$element}->{'style'} and $complex_format_map->{$element}->{'style'} eq 'code'); } return 0; } # text after @item in table, vtable and ftable sub t2h_default_table_item($$$$$$$$$) { my $text = shift; my $index_label = shift; my $format = shift; my $command = shift; my $formatted_command = shift; my $style_stack = shift; my $text_formatted = shift; my $text_formatted_leading_spaces = shift; my $text_formatted_trailing_spaces = shift; my $item_cmd = shift; #print STDERR "-> $format (@$style_stack)\n"; if (defined($text_formatted) and !exists $special_list_commands{$format}->{$command}) { $text = $text_formatted_leading_spaces . $text_formatted .$text_formatted_trailing_spaces; } $formatted_command = '' if (!defined($formatted_command) or exists($special_list_commands{$format}->{$command})); if (teletyped_in_stack($style_stack)) { $text .= '
    '; $formatted_command = '' . $formatted_command; } $text .= "\n" . $index_label if (defined($index_label)); return '
    ' . $formatted_command . $text . '
    ' . "\n"; } # format text on the line following the @item line (in table, vtable and ftable) sub t2h_default_table_line($$$) { my $text = shift; my $only_inter_item_commands = shift; my $before_items = shift; $only_inter_item_commands = '' if (!defined($only_inter_item_commands)); if ($text =~ /\S/) { return '
    ' . $text . '
    ' . "\n";# unless ($only_inter_item_commands); #return $text; # invalid without dd in ul } return ''; } #my $cell_nr = -1; # row in multitable sub t2h_default_row($$$$$$$$) { my $text = shift; my $macro = shift; my $columnfractions = shift; my $prototype_row = shift; my $prototype_lengths = shift; my $column_number = shift; my $only_inter_item_commands = shift; my $before_items = shift; $only_inter_item_commands = '' if (!defined($only_inter_item_commands)); # this is used to keep the cell number $t2h_default_multitable_stack[-1]->[0] = -1; if ($text =~ /\S/) { if ($macro eq 'headitem') { return '' . $text . '' . "\n"; } return '' . $text . '' . "\n"; } return ''; } # cell in multitable sub t2h_default_cell($$$$$$$$) { my $text = shift; my $row_macro = shift; my $columnfractions = shift; my $prototype_row = shift; my $prototype_lengths = shift; my $column_number = shift; my $only_inter_item_commands = shift; my $before_items = shift; $only_inter_item_commands = '' if (!defined($only_inter_item_commands)); $t2h_default_multitable_stack[-1]->[0]++; my $cell_nr = $t2h_default_multitable_stack[-1]->[0]; my $fractions = ''; if (defined($columnfractions) and (ref($columnfractions) eq 'ARRAY') and exists($columnfractions->[$cell_nr])) { my $fraction = sprintf('%d', 100*$columnfractions->[$cell_nr]); $fractions = " width=\"$fraction%\""; } # in constructs like # @strong{ # @multitable .... # } # the space won't be removed since the is put before the space. $text =~ s/^\s*//; $text =~ s/\s*$//; if ($row_macro eq 'headitem') { return "" . $text . ''; } return "" . $text . ''; } sub t2h_default_format_list_item_texi($$$$) { my $format = shift; my $line = shift; my $prepended = shift; my $command = shift; my $result_line; my $open_command = 0; if (defined($prepended) and $prepended ne '') { $result_line = $prepended . ' ' . $line; } $open_command = 1 if (defined($command)); return ($result_line, $open_command); } # format an item in a list # # argument: # text of the item # format of the list (itemize or enumerate) # command passed as argument to the format # formatted_command leading command formatted, if it is a thing command sub t2h_default_list_item($$$$$$$$$$$) { my $text = shift; my $format = shift; my $command = shift; my $formatted_command = shift; my $item_nr = shift; my $enumerate_style = shift; my $number = shift; my $prepended = shift; my $prepended_formatted = shift; my $only_inter_item_commands = shift; my $before_items = shift; $only_inter_item_commands = '' if (!defined($only_inter_item_commands)); $formatted_command = '' if (!defined($formatted_command) or exists($special_list_commands{$format}->{$command})); my $prepend = ''; # if (defined($prepended) and $prepended ne '') # { # $prepend = $prepended; # } # elsif ($formatted_command ne '') if ($formatted_command ne '') { $prepend = $formatted_command; } if ($text =~ /\S/) { return '
  • ' . $prepend . $text . '
  • '; } return ''; } sub t2h_default_table_list($$$$$$$$$) { my $format_command = shift; my $text = shift; my $command = shift; my $formatted_command = shift; # enumerate my $item_nr = shift; my $enumerate_style = shift; # itemize my $prepended = shift; my $prepended_formatted = shift; # multitable my $columnfractions = shift; my $prototype_row = shift; my $prototype_lengths = shift; my $column_number = shift; # my $number = shift; $formatted_command = '' if (!defined($formatted_command) or exists($special_list_commands{$format}->{$command})); if ($format_command eq 'itemize') { return "
      \n" . $text . "
    \n" if (($command eq 'bullet') or (($command eq '') and ($prepended eq ''))); return "\n" . $text . "\n"; } elsif ($format_command eq 'multitable') { pop @t2h_default_multitable_stack; return &$format('multitable', 'table', $text); } } # an html comment sub t2h_default_comment($) { my $text = shift; $text =~ s/--+/-/go; return '' . "\n"; } sub t2h_collect_styles($) { my $cmd_stack = shift; my @result = (); foreach my $style (reverse(@$cmd_stack)) { # last unless (defined($command_type{$style}) and $command_type{$style} eq 'style'); push @result, $style if (defined($command_type{$style}) and $command_type{$style} eq 'style'); } return @result; } sub t2h_get_attribute($;$) { my $command = shift; my $map_ref = shift; $map_ref = \%style_map if (!defined($map_ref)); return '' unless (defined($map_ref->{$command})); if ((ref($map_ref->{$command}) eq 'HASH') and exists($map_ref->{$command}->{'attribute'})) { return $map_ref->{$command}->{'attribute'}; } elsif ($map_ref->{$command} !~ /^&/) { my $attribute = $map_ref->{$command}; $attribute =~ s/^\"//; return $attribute; } return ''; } sub t2h_begin_style($$;$) { my $command = shift; my $text = shift; my $map_ref = shift; my $attribute = t2h_get_attribute($command,$map_ref); $attribute = "<$attribute>" if ($attribute ne ''); return $attribute.$text; } sub t2h_end_style($$;$) { my $command = shift; my $text = shift; my $map_ref = shift; my $attribute = t2h_get_attribute($command,$map_ref); if ($attribute =~ /^(\w+)/) { $attribute = $1; } $attribute = "" if ($attribute ne ''); return $text.$attribute; } # a paragraph # arguments: # $text of the paragraph # $align for the alignement # $indent for the indent style (indent or noindent) # The following is usefull if the paragraph is in an itemize. # $paragraph_command is the leading formatting command (like @minus) # $paragraph_command_formatted is the leading formatting command formatted # $paragraph_number is a reference on the number of paragraphs appearing # in the format. The value should be increased if a paragraph is done # $format is the format name (@itemize) sub t2h_default_paragraph($$$$$$$$$$$$) { my $text = shift; my $align = shift; my $indent = shift; my $paragraph_command = shift; my $paragraph_command_formatted = shift; my $paragraph_number = shift; my $format = shift; my $item_nr = shift; my $enumerate_style = shift; my $number = shift; my $command_stack_at_end = shift; my $command_stack_at_begin = shift; #print STDERR "format: $format\n" if (defined($format)); #print STDERR "paragraph @$command_stack_at_end; @$command_stack_at_begin\n"; $paragraph_command_formatted = '' if (!defined($paragraph_command_formatted) or exists($special_list_commands{$format}->{$paragraph_command})); return '' if ($text =~ /^\s*$/); foreach my $style(t2h_collect_styles($command_stack_at_begin)) { $text = t2h_begin_style($style, $text); } foreach my $style(t2h_collect_styles($command_stack_at_end)) { $text = t2h_end_style($style, $text); } if (defined($paragraph_number) and defined($$paragraph_number)) { $$paragraph_number++; return $text if (($format eq 'itemize' or $format eq 'enumerate') and ($$paragraph_number == 1)); } my $top_stack = ''; $top_stack = $command_stack_at_begin->[-1] if (scalar (@$command_stack_at_begin)); if ($top_stack eq 'multitable') { $t2h_default_multitable_stack[-1]->[1]++; if ($t2h_default_multitable_stack[-1]->[1] == 0) { return $text; } } my $open = '

    '; if ($align) { $open = "

    "; } return $open.$text.'

    '; } # a preformatted region # arguments: # $text of the preformatted region # $pre_style css style # $class identifier for the preformatted region (example, menu-comment) # The following is usefull if the preformatted is in an itemize. # $leading_command is the leading formatting command (like @minus) # $leading_command_formatted is the leading formatting command formatted # $preformatted_number is a reference on the number of preformatteds appearing # in the format. The value should be increased if a preformatted is done sub t2h_default_preformatted($$$$$$$$$$$$) { my $text = shift; my $pre_style = shift; my $class = shift; my $leading_command = shift; my $leading_command_formatted = shift; my $preformatted_number = shift; my $format = shift; my $item_nr = shift; my $enumerate_style = shift; my $number = shift; my $command_stack_at_end = shift; my $command_stack_at_begin = shift; #print STDERR "preformatted @$command_stack_at_end; @$command_stack_at_begin\n"; return '' if ($text eq ''); $leading_command_formatted = '' if (!defined($leading_command_formatted) or exists($special_list_commands{$format}->{$leading_command})); if (defined($preformatted_number) and defined($$preformatted_number)) { $$preformatted_number++; } my $top_stack = ''; $top_stack = $command_stack_at_begin->[-1] if (scalar (@$command_stack_at_begin)); if ($top_stack eq 'multitable') { $text =~ s/^\s*//; $text =~ s/\s*$//; } foreach my $style(t2h_collect_styles($command_stack_at_begin)) { $text = t2h_begin_style($style, $text, \%style_map_pre); } foreach my $style(t2h_collect_styles($command_stack_at_end)) { $text = t2h_end_style($style, $text, \%style_map_pre); } return "
    ".$text."
    "; } # This function formats a heading for an element # # argument: # an element. It is a hash reference for a node or a sectionning command. # it may be the wrong one in case of headings. # The interesting keys are: # 'text': the heading text # 'text_nonumber': the heading text without section number # 'node': true if it is a node # 'level': level of the element. 0 for @top, 1 for chapter, heading, # appendix..., 2 for section and so on... # 'tag_level': the sectionning element name, raisesections and lowersections # taken into account sub t2h_default_element_heading($$$$$$$$$$$$) { my $element = shift; my $command = shift; my $texi_line = shift; my $line = shift; my $in_preformatted = shift; my $one_section = shift; my $element_heading = shift; my $first_in_page = shift; my $is_top = shift; my $previous_is_top = shift; my $command_line = shift; my $element_id = shift; my $new_element = shift; #print STDERR ":::::::: $element $command i_p $in_preformatted o_s $one_section e_h $element_heading f_p $first_in_page i_t $is_top p_i_t $previous_is_top id $element_id new $new_element\n"; my $result = &$element_label($element_id, $element, $command, $command_line); if ($new_element and !$one_section) { if (!$element->{'element_ref'}->{'top'}) { #return $result if (defined($command) and $command eq 'node' and !$element_heading); $result .= &$print_element_header($first_in_page, $previous_is_top); } else { $result .= &$print_head_navigation(undef, \@MISC_BUTTONS) if ($SPLIT or $SECTION_NAVIGATION); } } return $result if (!$element_heading); return $result. &$heading($element, $command, $texi_line, $line, $in_preformatted, $one_section, $element_heading); } sub t2h_default_heading($$$$$;$$) { my $element = shift; my $command = shift; my $texi_line = shift; my $line = shift; my $in_preformatted = shift; my $one_section = shift; my $element_heading = shift; my $level = 3; if (!$element->{'node'}) { $level = $element->{'level'}; } my $text = $element->{'text'}; my $class = $element->{'tag_level'}; $class = 'unnumbered' if ($class eq 'top'); my $align = ''; $align = ' align="center"' if ($element->{'tag'} eq 'centerchap'); if ($element->{'top'}) { return '' if ($element->{'titlefont'}); $level = 1; $text = $Texi2HTML::NAME{'Top'}; $class = 'settitle' unless ($one_section); } # when it is a heading, the element is irrelevant, so the command and the # line are used... if (defined($command) and $command =~ /heading/) { $level = $main::sec2level{$command} if (defined($main::sec2level{$command})); if (defined($line)) { $text = $line; # this isn't done in main program in that case... chomp ($text); $text =~ s/^\s*//; } $class = $command; } elsif (defined($element->{'tocid'}) and $TOC_LINKS) { $text = &$anchor ('', "$Texi2HTML::THISDOC{'toc_file'}#$element->{'tocid'}", $text); } $level = 1 if ($level == 0); return '' if ($text !~ /\S/); if (!$in_preformatted) { return "$text\n"; } else { return "$text\n"; } } sub t2h_default_heading_no_texi($$$) { my $element = shift; my $command = shift; my $line = shift; return main::remove_texi($line); } # formatting of raw regions # if L2H is true another mechanism is used for tex sub t2h_default_raw($$) { my $style = shift; my $text = shift; if ($style eq 'verbatim' or $style eq 'tex') { return "
    " . &$protect_text($text) . '
    '; } elsif ($style eq 'html') { chomp ($text); return $text; } else { main::echo_warn ("Raw style $style not handled"); return &$protect_text($text); } } # raw environment when removing texi (in comments) sub t2h_default_raw_no_texi($$) { my $style = shift; my $text = shift; return $text; } # This function formats a footnote reference and the footnote text associated # with a given footnote. # The footnote reference is the text appearing in the main document pointing # to the footnote text. # # arguments: # absolute number of the footnote (in the document) # relative number of the footnote (in the page) # identifier for the footnote # identifier for the footnote reference in the main document # main document file # footnote text file # array with the footnote text lines # the state. See menu entry. # # returns: # reference on an array containing the footnote text lines which should # have been updated # the text for the reference pointing on the footnote text sub t2h_default_foot_line_and_ref($$$$$$$$$) { my $number_in_doc = shift; my $number_in_page = shift; my $footnote_id = shift; my $place_id = shift; my $document_file = shift; my $footnote_file = shift; my $lines = shift; my $document_state = shift; if ($document_file eq $footnote_file) { $document_file = $footnote_file = ''; } unshift (@$lines, '

    ' . &$anchor($footnote_id, $document_file . "#$place_id", "($number_in_doc)") . "

    \n"); # this is a bit obscure, this allows to add an anchor only if formatted # as part of the document. $place_id = '' if ($document_state->{'outside_document'} or $document_state->{'multiple_pass'}); return ($lines, &$anchor($place_id, $footnote_file . "#$footnote_id", "($number_in_doc)")); } # formats a group of footnotes. # # argument: # array reference on the footnotes texts lines # # returns an array reference on the group of footnotes lines sub t2h_default_foot_section($) { my $lines = shift; unshift (@$lines, "
    \n" ,"$DEFAULT_RULE\n", "

    " . &$I('Footnotes') . "

    \n"); push (@$lines, "
    \n"); return $lines; } sub t2h_default_image_files($$$$) { my $base = shift; my $extension = shift; my $texi_base = shift; my $texi_extension = shift; my @files = (); return @files if (!defined($base) or ($base eq '')); if (defined($extension) and ($extension ne '')) { push @files,["$base.$extension", "$texi_base.$texi_extension"]; } foreach my $ext (@IMAGE_EXTENSIONS) { push @files,["$base.$ext", "$texi_base.$ext"]; } return @files; } # format an image # # arguments: # image file name with path # image basename # a boolean true if we are in a preformatted format # image file name without path # alt text # width # height # raw alt # extension # path to working dir # path to file relative from working dir sub t2h_default_image($$$$$$$$$$$$$$$$) { my $file = shift; my $base = shift; my $preformatted = shift; my $file_name = shift; my $alt = shift; my $width = shift; my $height = shift; my $raw_alt = shift; my $extension = shift; my $working_dir = shift; my $file_path = shift; my $in_paragraph = shift; my $file_locations = shift; my $base_simple_format = shift; my $extension_simple_format = shift; my $file_name_simple_format = shift; if (!defined($file_path) or $file_path eq '') { if (defined($extension) and $extension ne '') { $file = "$base.$extension"; } else { $file = "$base.jpg"; } main::echo_warn ("no image file for $base, (using $file)"); } elsif (! $COMPLETE_IMAGE_PATHS) { $file = $file_name; } $alt = &$protect_text($base) if (!defined($alt) or ($alt eq '')); return "[ $alt ]" if ($preformatted); # it is possible that $file_name is more correct as it allows the user # to chose the relative path. $file = &$protect_text($file); return "\"$alt\""; } # address put in footer describing when was generated and who did the manual sub t2h_default_address($$) { my $user = shift; my $date = shift; $user = '' if (!defined($user)); $date = '' if (!defined($date)); if (($user ne '') and ($date ne '')) { return &$I('by @emph{%{user}} on @emph{%{date}}', { 'user' => $user, 'date' => $date }); } elsif ($user ne '') { return &$I('by @emph{%{user}}', { 'user' => $user }); } elsif ($date ne '') { return &$I('on @emph{%{date}}', { 'date' => $date }); } return ''; } # format a target in the main document for an index entry. # # arguments: # target identifier # boolean true if in preformatted format # FIXME document the remaining sub t2h_default_index_entry_label($$$$$) { my $identifier = shift; my $preformatted = shift; my $entry = shift; my $index_name = shift; my $index_command = shift; my $texi_entry = shift; my $formatted_entry = shift; return '' if (!defined($identifier) or ($identifier !~ /\S/)); my $label = &$anchor($identifier); return $label . "\n" if (!$preformatted); return $label; } sub t2h_default_index_entry_command($$$$$) { my $command = shift; my $index_name = shift; my $label = shift; my $entry_texi = shift; my $entry_formatted = shift; return $label; } # process definition commands line @deffn for example sub t2h_default_def_line($$$$$$$$$$$$$$$$) { my $category_prepared = shift; my $name = shift; my $type = shift; my $arguments = shift; my $index_label = shift; my $arguments_array = shift; my $arguments_type_array = shift; my $unformatted_arguments_array = shift; my $command = shift; my $class_name = shift; my $category = shift; my $class = shift; my $style = shift; my $original_command = shift; $index_label = '' if (!defined($index_label)); chomp($index_label); $category_prepared = '' if (!defined($category_prepared) or ($category_prepared =~ /^\s*$/)); $name = '' if (!defined($name) or ($name =~ /^\s*$/)); $type = '' if (!defined($type) or $type =~ /^\s*$/); if (!defined($arguments) or $arguments =~ /^\s*$/) { $arguments = ''; } else { chomp ($arguments); $arguments = '' . $arguments . ''; } my $type_name = ''; $type_name = " $type" if ($type ne ''); $type_name .= ' ' . $name . '' if ($name ne ''); $type_name .= $arguments; if (! $DEF_TABLE) { return '
    '. $index_label. '' . $category_prepared . ':' . $type_name . "
    \n"; } else { return "" . $type_name . "" . $category_prepared . $index_label . "\n"; } } # process definition commands line @deffn for example while removing texi # commands sub t2h_default_def_line_no_texi($$$$$) { my $category = shift; my $name = shift; my $type = shift; my $arguments = shift; $name = '' if (!defined($name) or ($name =~ /^\s*$/)); $type = '' if (!defined($type) or $type =~ /^\s*$/); if (!defined($arguments) or $arguments =~ /^\s*$/) { $arguments = ''; } my $type_name = ''; $type_name = " $type" if ($type ne ''); $type_name .= ' ' . $name if ($name ne ''); $type_name .= $arguments; if (! $DEF_TABLE) { return $category . ':' . $type_name . "\n"; } else { return $type_name . " " . $category . "\n"; } } # a cartouche sub t2h_default_cartouche($$) { my $text = shift; if ($text =~ /\S/) { return "
    \n" . $text . "
    \n"; } return ''; } # key: # origin_href: # entry: # texi entry: # element_href: # element_text: sub t2h_default_index_summary_file_entry ($$$$$$$$$) { my $index_name = shift; my $key = shift; my $origin_href = shift; my $entry = shift; my $texi_entry = shift; my $element_href = shift; my $element_text = shift; my $is_printed = shift; my $manual_name = shift; print IDXFILE "key: $key\n origin_href: $origin_href\n entry: $entry\n" . " texi_entry: $texi_entry\n" . " element_href: $element_href\n element_text: $element_text\n"; } sub t2h_default_index_summary_file_begin($$$) { my $name = shift; my $is_printed = shift; my $manual_name = shift; open(IDXFILE, ">$Texi2HTML::THISDOC{'destination_directory'}$Texi2HTML::THISDOC{'file_base_name'}" . "_$name.idx") || die "Can't open >$Texi2HTML::THISDOC{'destination_directory'}$Texi2HTML::THISDOC{'file_base_name'}" . "_$name.idx for writing: $!\n"; } sub t2h_default_index_summary_file_end($$$) { my $name = shift; my $is_printed = shift; my $manual_name = shift; close (IDXFILE); } sub t2h_default_sp($$) { my $number = shift; my $preformatted = shift; return "
    \n" x $number if (!$preformatted); return "\n" x $number; } sub t2h_default_acronym_like($$$$$$) { my $command = shift; my $acronym_texi = shift; my $acronym_text = shift; my $with_explanation = shift; my $explanation_lines = shift; my $explanation_text = shift; my $explanation_simply_formatted = shift; my $attribute = $command; my $opening = "<$attribute>"; if (defined($explanation_simply_formatted)) { $opening = "<$attribute title=\"$explanation_simply_formatted\">"; } if ($with_explanation) { return &$I('%{acronym_like} (%{explanation})', {'acronym_like' => $opening . $acronym_text . "", 'explanation' => $explanation_text},{'duplicate'=>1}) } else { return $opening . $acronym_text . ""; } } sub t2h_default_quotation_prepend_text($$) { my $command = shift; my $text = shift; return undef if (!defined($text) or $text =~ /^$/); $text =~ s/^\s*//; # FIXME if there is a @ protecting the end of line the result is # @b{some text @:} # It is likely not to be what was intended chomp($text); return &$I('@b{%{quotation_arg}:} ', {'quotation_arg' => $text}, {'keep_texi' => 1}); } sub t2h_default_quotation($$$$) { my $command = shift; my $text = shift; my $argument_text = shift; my $argument_text_texi = shift; my $class_text = ''; $class_text = " class=\"$command\"" if ($command ne 'quotation'); return "" . $text . "\n"; } # format the text within a paragraph style format, # # argument: # format name # text within the format sub t2h_default_paragraph_style_command($$) { my $format = shift; my $text = shift; return $text; } # format a whole index # # argument: # index text # index name sub t2h_default_print_index($$) { my $text = shift; my $name = shift; return '' if (!defined($text)); return "\n" . "\n" . "\n" . $text . "
    " . &$I('Index Entry') . " " . &$I('Section') . "
    $DEFAULT_RULE
    \n"; } # format a letter entry in an index page. The letter entry contains # the index entries for the words beginning with that letter. It is # a target for links pointing from the summary of the index. # # arguments: # the letter # identifier for the letter entry. This should be used to make the target # identifier # text of the index entries sub t2h_default_index_letter($$$) { my $letter = shift; my $id = shift; my $text = shift; return '' . &$anchor($id,'',&$protect_text($letter)) . "\n" . $text . " $DEFAULT_RULE\n"; } # format an index entry (in a letter entry). # # arguments: # href to the main text, linking to the place where the index entry appears # entry text # href to the main text, linking to the section or node where the index # entry appears # section or node heading sub t2h_default_index_entry($$$$$$$$) { my $text_href = shift; my $entry = shift; my $element_href = shift; my $element_text = shift; my $entry_file = shift; my $current_element_file = shift; my $entry_target = shift; my $entry_element_target = shift; return '' . &$anchor('', $text_href, $entry) . '' . &$anchor('', $element_href, $element_text) . "\n"; } sub t2h_default_copying_comment($$$$) { my $copying_lines = shift; my $copying_text = shift; my $copying_no_texi = shift; my $copying_simple_text = shift; return '' if ($copying_no_texi eq ''); my $text = &$comment($copying_no_texi); return $text; } # return value is currently ignored sub t2h_default_documentdescription($$$$) { my $decription_lines = shift; my $description_text = shift; my $description_no_texi = shift; my $description_simple_text = shift; if (defined($DOCUMENT_DESCRIPTION)) { $Texi2HTML::THISDOC{'DOCUMENT_DESCRIPTION'} = $DOCUMENT_DESCRIPTION; return $DOCUMENT_DESCRIPTION; } #return '' if ($description_no_texi eq ''); #my @documentdescription = split (/\n/, $description_no_texi); if ($description_simple_text eq '') { $Texi2HTML::THISDOC{'DOCUMENT_DESCRIPTION'} = undef; return undef; } my @documentdescription = split (/\n/, $description_simple_text); my $document_description = shift @documentdescription; chomp $document_description; foreach my $line (@documentdescription) { chomp $line; $document_description .= ' ' . $line; } $Texi2HTML::THISDOC{'DOCUMENT_DESCRIPTION'} = $document_description; return $document_description; } # format an index summary. This is a list of letters linking to the letter # entries. # # arguments: # array reference containing the formatted alphabetical letters # array reference containing the formatted non lphabetical letters sub t2h_default_index_summary($$) { my $alpha = shift; my $nonalpha = shift; my $join = ''; my $nonalpha_text = ''; my $alpha_text = ''; $join = "   \n
    \n" if (@$nonalpha and @$alpha); if (@$nonalpha) { $nonalpha_text = join("\n   \n", @$nonalpha) . "\n"; } if (@$alpha) { $alpha_text = join("\n   \n", @$alpha) . "\n   \n"; } return "
    " . &$I('Jump to') .":   " . $nonalpha_text . $join . $alpha_text . "
    \n"; } # return the heading with number texinfo text # also called for nodes. sub t2h_default_heading_texi($$$) { my $tag = shift; my $texi = shift; my $number = shift; $texi =~ s/\s*$//; $texi =~ s/^\s*//; return "$number $texi" if ($NUMBER_SECTIONS and defined($number) and ($number !~ /^\s*$/)) ; return $texi; } # return the heading texinfo text for split index sections sub t2h_default_index_element_heading_texi($$$) { # FIXME i18n my $heading_texi = shift; my $tag = shift; my $texi = shift; my $number = shift; my $first_letter = shift; my $last_letter = shift; return "$heading_texi: $first_letter -- $last_letter" if ($last_letter ne $first_letter); return "$heading_texi: $first_letter"; } sub t2h_default_element_label($$$$) { my $id = shift; my $element = shift; my $command = shift; my $line = shift; return &$anchor($id) . "\n"; } sub t2h_default_misc_element_label($$) { my $id = shift; my $misc_page_name = shift; return &$anchor($id) . "\n"; } sub t2h_default_anchor_label($$$) { my $id = shift; my $anchor_text = shift; my $anchor_reference = shift; return &$anchor($id); } sub t2h_default_colon_command($) { my $punctuation_character = shift; return $colon_command_punctuation_characters{$punctuation_character} if defined($colon_command_punctuation_characters{$punctuation_character}); return $punctuation_character; } sub t2h_default_tab_item_texi($$$$$$) { my $comand = shift; my $commands_stack = shift; my $state = shift; my $stack = shift; my $line = shift; my $line_nr = shift; if (defined($commands_stack) and @$commands_stack and $commands_stack->[-1] eq 'multitable' and @t2h_default_multitable_stack) { $t2h_default_multitable_stack[-1]->[1] = -1; } return undef; } 1; texi2html-1.82/examples/0000755000175000017500000000000011264347127017055 5ustar flichtenheldflichtenheldtexi2html-1.82/examples/inlinestyle.init0000644000175000017500000000403511264347127022303 0ustar flichtenheldflichtenheld#+############################################################################## # # inlinestyle.init: style is inlined instead of being in a css file # # Copyright (C) 2003-2008 Patrice Dumas # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 USA # #-############################################################################## $NO_BULLET_LIST_ATTRIBUTE = $NO_BULLET_LIST_ATTRIBUTE . " style=\"$NO_BULLET_LIST_STYLE\""; # we empty CSS_LINES as all styles are inlined $CSS_LINES = ""; $style_map{'sansserif'} = { 'attribute' => "span style=\"$css_map{'span.sansserif'}\""}; $style_map{'r'} = { 'attribute' => "span style=\"$css_map{'span.roman'}\""}; # formatting functions $preformatted = \&t2h_inlinestyle_preformatted; $summary_letter = \&t2h_inline_summary_letter; sub t2h_inlinestyle_preformatted($$$) { my $text = shift; my $pre_style = shift; my $class = shift; return '' if ($text eq ''); my $open = '$text"; } sub t2h_inline_summary_letter($$$) { my $letter = shift; my $file = shift; my $identifier = shift; return &$anchor('', $file . '#' . $identifier, '' . &$protect_html($letter) . '', 'class="summary-letter" style="text-decoration: none"'); } 1; texi2html-1.82/examples/noheaders.init0000644000175000017500000001222511264347127021714 0ustar flichtenheldflichtenheld# -*-perl-*- #+############################################################################## # # noheaders.init: output html without headers. Obsoleted by --no-header # # Copyright (C) 2003-2008 Patrice Dumas # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 USA # #-############################################################################## #$SPLIT = 'none'; $print_section = \&T2H_NOHEAD_print_section; #$print_element_header = \&T2H_NOHEAD_print_element_header; $print_element_header = \&T2H_NOHEAD_noop; $end_section = \&T2H_NOHEAD_end_section; $one_section = \&T2H_NOHEAD_one_section; #$print_Top_header = \&T2H_NOHEAD_print_Top_header; $print_Top_footer = \&T2H_NOHEAD_print_Top_footer; $print_Top = \&T2H_NOHEAD_print_Top; #$print_misc_header = \&T2H_NOHEAD_print_misc_header; $print_misc_footer = \&T2H_NOHEAD_print_misc_footer; #$print_misc = \&T2H_NOHEAD_print_misc; #$print_head_navigation = \&T2H_NOHEAD_print_head_navigation; $print_head_navigation = \&T2H_NOHEAD_noop; $about_body = \&T2H_NOHEAD_about_body; #$toc_body = \&T2H_NOHEAD_toc_body; sub T2H_NOHEAD_noop { return ''; } ######################################################################## # Layout for html for every sections # sub T2H_NOHEAD_print_section { my $fh = shift; my $first_in_page = shift; my $previous_is_top = shift; my $nw = main::print_lines($fh); } sub T2H_NOHEAD_one_section($$) { my $fh = shift; my $element = shift; main::print_lines($fh); print $fh "$SMALL_RULE\n"; &$print_page_foot($fh); } ################################################################### # Layout of top-page I recommend that you use @ifnothtml, @ifhtml, # @html within the Top texinfo node to specify content of top-level # page. # # If you enclose everything in @ifnothtml, then title, subtitle, # author and overview is printed # Texi2HTML::HREF of Next, Prev, Up, Forward, Back are not defined # if $T2H_SPLIT then Top page is in its own html file sub T2H_NOHEAD_print_Top_footer($$) { my $fh = shift; print $fh "$SMALL_RULE\n"; } sub T2H_NOHEAD_print_Top { my $fh = shift; my $has_top_heading = shift; # FIXME take what is in texi2html.init, or maybe this is not needed # anymore if (@$Texi2HTML::THIS_SECTION) { # if top-level node has content, then print it with extra header #print $fh "

    $Texi2HTML::NAME{Top}

    \n" # print $fh "

    $Texi2HTML::NAME{Top}

    \n" # unless ($has_top_heading); main::print_lines($fh, $Texi2HTML::THIS_SECTION); } else { # top-level node is fully enclosed in @ifnothtml # print fulltitle, subtitle, author, Overview # redo the titlepage with the actual state my ($titlepage_text, $titlepage_no_texi, $titlepage_simple_text) = main::do_special_region_lines('titlepage',$Texi2HTML::THISDOC{'state'}); &$titlepage([],$titlepage_text, $titlepage_no_texi, $titlepage_simple_text); print $fh $Texi2HTML::TITLEPAGE; if (@{$Texi2HTML::OVERVIEW}) { print $fh '

    ' . &$I('Overview:') . "

    \n" . "
    \n"; my $nw = main::print_lines($fh, $Texi2HTML::OVERVIEW); print $fh "
    \n"; } elsif (@{$Texi2HTML::TOC_LINES}) { print $fh '

    ' . &$I('Table of contents') . "

    \n"; my $nw = main::print_lines($fh, $Texi2HTML::TOC_LINES); } } } ################################################################### # Layout of Toc, Overview, and Footnotes pages # By default, we use "normal" layout # Texi2HTML::HREF of Next, Prev, Up, Forward, Back, etc are not defined # use: my $buttons = [...] to redefine navigation buttons sub T2H_NOHEAD_print_misc_header { my $fh = shift; &$print_page_head($fh) if $SPLIT; } sub T2H_NOHEAD_print_misc_footer { my $fh = shift; print $fh "$SMALL_RULE\n"; if ($SPLIT) { &$print_page_foot($fh); } } sub T2H_NOHEAD_print_misc { my $fh = shift; &$print_misc_header($fh); print $fh "

    $Texi2HTML::NAME{This}

    \n"; main::print_lines($fh); &$print_misc_footer($fh); } sub T2H_NOHEAD_end_section($) { my $fh = shift; print $fh "$BIG_RULE\n"; } ################################################################### # Layout of navigation panel sub T2H_NOHEAD_about_body { } texi2html-1.82/examples/l2h.init0000644000175000017500000001025011264347127020425 0ustar flichtenheldflichtenheld ###################################################################### # from here on, its l2h init stuff # ## initialization for latex2html as for Singular manual generation ## obachman 3/99 # # Options controlling Titles, File-Names, Tracing and Sectioning # $TITLE = ''; $SHORTEXTN = 0; $LONG_TITLES = 0; #$DESTDIR = ''; $NO_SUBDIR = 1; #$PREFIX = ''; $AUTO_PREFIX = 0; $AUTO_LINK = 0; $SPLIT = 0; $MAX_LINK_DEPTH = 0; #$TMP = ''; $DEBUG = 0; $VERBOSE = 1; # # Options controlling Extensions and Special Features # #$HTML_VERSION = "3.2"; # set by command line $TEXDEFS = 1; # we absolutely need that $EXTERNAL_FILE = ''; $SCALABLE_FONTS = 1; $NO_SIMPLE_MATH = 1; $LOCAL_ICONS = 1; $SHORT_INDEX = 0; $NO_FOOTNODE = 1; $ADDRESS = ''; $INFO = ''; # # Switches controlling Image Generation # $ASCII_MODE = 0; $NOLATEX = 0; $EXTERNAL_IMAGES = 0; $PS_IMAGES = 0; $NO_IMAGES = 0; $IMAGES_ONLY = 0; $REUSE = 2; $ANTI_ALIAS = 1; $ANTI_ALIAS_TEXT = 1; # #Switches controlling Navigation Panels # $NO_NAVIGATION = 1; $ADDRESS = ''; $INFO = 0; # 0 = do not make a "About this document..." section # #Switches for Linking to other documents # # currently -- we don't care $MAX_SPLIT_DEPTH = 0; # Stop making separate files at this depth $MAX_LINK_DEPTH = 0; # Stop showing child nodes at this depth $NOLATEX = 0; # 1 = do not pass unknown environments to Latex $EXTERNAL_IMAGES = 0; # 1 = leave the images outside the document $ASCII_MODE = 0; # 1 = do not use any icons or internal images # 1 = use links to external postscript images rather than inlined bitmap # images. $PS_IMAGES = 0; $SHOW_SECTION_NUMBERS = 0; ### Other global variables ############################################### # put dvips stderr on stdout since latex2html is alread very verbose $DVIPS = "$DVIPS ".' 2>&1'; $CHILDLINE = ""; # This is the line width measured in pixels and it is used to right justify # equations and equation arrays; $LINE_WIDTH = 500; # Used in conjunction with AUTO_NAVIGATION $WORDS_IN_PAGE = 300; # The value of this variable determines how many words to use in each # title that is added to the navigation panel (see below) # $WORDS_IN_NAVIGATION_PANEL_TITLES = 0; # This number will determine the size of the equations, special characters, # and anything which will be converted into an inlined image # *except* "image generating environments" such as "figure", "table" # or "minipage". # Effective values are those greater than 0. # Sensible values are between 0.1 - 4. $MATH_SCALE_FACTOR = 1.5; # This number will determine the size of # image generating environments such as "figure", "table" or "minipage". # Effective values are those greater than 0. # Sensible values are between 0.1 - 4. $FIGURE_SCALE_FACTOR = 1.6; # If both of the following two variables are set then the "Up" button # of the navigation panel in the first node/page of a converted document # will point to $EXTERNAL_UP_LINK. $EXTERNAL_UP_TITLE should be set # to some text which describes this external link. $EXTERNAL_UP_LINK = ""; $EXTERNAL_UP_TITLE = ""; # If this is set then the resulting HTML will look marginally better if viewed # with Netscape. $NETSCAPE_HTML = 1; # Valid paper sizes are "letter", "legal", "a4","a3","a2" and "a0" # Paper sizes has no effect other than in the time it takes to create inlined # images and in whether large images can be created at all ie # - larger paper sizes *MAY* help with large image problems # - smaller paper sizes are quicker to handle $PAPERSIZE = "a4"; # Replace "english" with another language in order to tell LaTeX2HTML that you # want some generated section titles (eg "Table of Contents" or "References") # to appear in a different language. Currently only "english" and "french" # is supported but it is very easy to add your own. See the example in the # file "latex2html.config" $TITLES_LANGUAGE = "english"; 1; # This must be the last non-comment line # End File l2h.init ###################################################################### texi2html-1.82/examples/tex4ht.init0000644000175000017500000002330411264347127021164 0ustar flichtenheldflichtenheld# -*-perl-*- #+############################################################################## # # tex4ht.init: use tex4ht to convert tex to html # # Copyright (C) 2005-2008 Patrice Dumas # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 USA # #-############################################################################## # To customize the command and the options, you could set # $Texi2HTML::TeX4HT::STYLE_MATH to latex/tex # $Texi2HTML::TeX4HT::STYLE_TEX to latex/texi # and/or change # $Texi2HTML::TeX4HT::tex4ht_command_math # and $Texi2HTML::TeX4HT::tex4ht_options_math # $Texi2HTML::TeX4HT::tex4ht_command_tex # and $Texi2HTML::TeX4HT::tex4ht_options_tex push @command_handler_init, \&Texi2HTML::TeX4HT::tex4ht_init; push @command_handler_process, \&Texi2HTML::TeX4HT::tex4ht_process; push @command_handler_finish, \&Texi2HTML::TeX4HT::tex4ht_finish; $command_handler{'math'} = { 'init' => \&Texi2HTML::TeX4HT::tex4ht_to_latex, 'expand' => \&Texi2HTML::TeX4HT::tex4ht_do_tex }; $command_handler{'tex'} = { 'init' => \&Texi2HTML::TeX4HT::tex4ht_to_latex, 'expand' => \&Texi2HTML::TeX4HT::tex4ht_do_tex }; { use Cwd; package Texi2HTML::TeX4HT; $STYLE_MATH = 'texi' if (!defined($STYLE_MATH)); $STYLE_TEX = 'tex' if (!defined($STYLE_TEX)); if (!defined($tex4ht_command_math)) { $tex4ht_command_math = 'httexi'; $tex4ht_command_math = 'htlatex' if ($STYLE_MATH eq 'latex'); $tex4ht_command_math = 'httex' if ($STYLE_MATH eq 'tex'); } if (!defined($tex4ht_command_tex)) { $tex4ht_command_tex = 'httex'; $tex4ht_command_tex = 'htlatex' if ($STYLE_TEX eq 'latex'); $tex4ht_command_tex = 'httexi' if ($STYLE_TEX eq 'texi'); } my %commands = (); my $tex4ht_initial_dir; my $tex4ht_out_dir; my $tex4ht_latex_failed = 0; sub tex4ht_init { # set file names $tex4ht_initial_dir = Cwd::abs_path; $tex4ht_out_dir = "$Texi2HTML::THISDOC{'destination_directory'}"; $tex4ht_out_dir = './' if (!defined($tex4ht_out_dir) or $tex4ht_out_dir =~ /^\s*$/); my $tex4ht_basename = "$Texi2HTML::THISDOC{'file_base_name'}_tex4ht"; $tex4ht_output_counter = 0; %tex4ht_results = (); $tex4ht_latex_failed = 0; # this initialization doesn't seems to be needed, but it is cleaner anyway %commands = (); $commands{'math'}->{'style'} = $STYLE_MATH; $commands{'tex'}->{'style'} = $STYLE_TEX; $commands{'math'}->{'exec'} = $tex4ht_command_math; $commands{'tex'}->{'exec'} = $tex4ht_command_tex; foreach my $command ('math', 'tex') { my $style = $commands{$command}->{'style'}; $commands{$command}->{'basename'} = $tex4ht_basename . "_$command"; my $suffix = '.tex'; $suffix = '.texi' if ($style eq 'texi'); $commands{$command}->{'basefile'} = $commands{$command}->{'basename'} . $suffix; $commands{$command}->{'html_file'} = $commands{$command}->{'basename'} . '.html'; $commands{$command}->{'rfile'} = $tex4ht_out_dir . $commands{$command}->{'basefile'}; my $rfile = $commands{$command}->{'rfile'}; local *TEX4HT_TEXFILE; unless (open (*TEX4HT_TEXFILE, ">$rfile")) { warn "* t2h_tex4ht error opening $rfile: $!\n"; $tex4ht_latex_failed = 1; return; } $commands{$command}->{'handle'} = *TEX4HT_TEXFILE; } foreach my $command ('math', 'tex') { $commands{$command}->{'counter'} = 0; my $style = $commands{$command}->{'style'}; my $fh = $commands{$command}->{'handle'}; my $comment = '@c'; $comment = '%' if ($style ne 'texi'); $comment .= " Automatically generated\n"; if ($style eq 'texi') { print $fh "\\input texinfo \@setfilename $commands{$command}->{'basename'}.info\n"; print $fh "$comment"; } else { print $fh "$comment"; if ($style eq 'latex') { print $fh "\\documentstyle{article}\n\\begin{document}\n"; } elsif ($style eq 'tex') { print $fh "\\csname tex4ht\\endcsname\n"; } } } } sub tex4ht_to_latex { my $command = shift; my $text = shift; my $counter = shift; my $style = $commands{$command}->{'style'}; my $fh = $commands{$command}->{'handle'}; # write to tex file my $before_comment = "\@verbatim\n"; $before_comment = "\\HCode{\\Hnewline " if ($style ne 'texi'); my $after_comment = "\n\@end verbatim\n"; $after_comment = "\\Hnewline}\n" if ($style ne 'texi'); my $begin_comment = ""; print $fh "$before_comment$begin_comment$after_comment"; if ($command eq 'tex') { print $fh $text; } elsif ($command eq 'math') { if ($style eq 'texi') { print $fh '@math{' . $text . "}\n"; } else { print $fh "\\IgnorePar \$" . $text . "\$"; } } my $end_comment = ""; print $fh "$before_comment$end_comment$after_comment"; $commands{$command}->{'counter'}++; return 1; } my %tex4ht_results; sub tex4ht_process { foreach my $command ('math', 'tex') { tex4ht_finish_latex($command); } unless (chdir $tex4ht_out_dir) { warn "* t2h_tex4ht chdir to $tex4ht_out_dir failed\n"; $tex4ht_latex_failed = 1; return; } print STDERR "cwd($tex4ht_out_dir):" . Cwd::cwd() ."\n" if ($Texi2HTML::Config::VERBOSE); foreach my $command ('math', 'tex') { tex4ht_process_command($command); } tex4ht_return_to_dir(); } sub tex4ht_finish_latex { #print STDERR "$style $tex4ht_latex_failed $tex4ht_counter\n"; my $command = shift; my $style = $commands{$command}->{'style'}; my $fh = $commands{$command}->{'handle'}; return if ($tex4ht_latex_failed); # finish the tex file if ($style eq 'latex') { print $fh "\\end{document}\n"; } elsif ($style eq 'tex') { print $fh "\n\\bye\n"; } else { print $fh "\n\@bye\n"; } close ($fh); } sub tex4ht_process_command { my $command = shift; return unless ($commands{$command}->{'counter'}); warn "* t2h_tex4ht $commands{$command}->{'basefile'} missing" unless (-f $commands{$command}->{'basefile'}); my $style = $commands{$command}->{'style'}; # now run tex4ht my $options = ''; $options = $tex4ht_options_math if (($style eq 'math') and defined($tex4ht_options_math)); $options = $tex4ht_options_tex if (($style eq 'tex') and defined($tex4ht_options_tex)); my $cmd = "$commands{$command}->{'exec'} $commands{$command}->{'basefile'} $options"; print STDERR "tex4ht command: $cmd\n" if ($Texi2HTML::Config::VERBOSE); if (system($cmd)) { warn "* t2h_tex4ht command: $cmd failed"; tex4ht_return_to_dir(); $tex4ht_latex_failed = 1; return; } # extract the html from the file created by tex4ht my $html_basefile = $commands{$command}->{'html_file'}; unless (open (TEX4HT_HTMLFILE, $html_basefile)) { warn "* t2h_tex4ht error opening $html_basefile: $!\n"; tex4ht_return_to_dir(); $tex4ht_latex_failed = 1; return; } my $got_count = 0; my $line; while ($line = ) { #print STDERR "while $line"; if ($line =~ /!-- tex4ht_begin $commands{$command}->{'basename'} (\w+) (\d+) --/) { my $command = $1; my $count = $2; my $text = ''; my $end_found = 0; while ($line = ) { #print STDERR "while search $command $count $line"; if ($line =~ /!-- tex4ht_end $commands{$command}->{'basename'} $command $count --/) { $got_count++; chomp($text); $tex4ht_results{"${command}_$count"} = $text; $end_found = 1; last; } else { $text .= $line; } } unless ($end_found) { warn "* t2h_tex4ht: end of $command $count not found\n"; } } } if ($got_count != $commands{$command}->{'counter'} and ($Texi2HTML::Config::VERBOSE)) { warn "* t2h_tex4ht: got $got_count for $commands{$command}->{'counter'} items entered\n"; } close (TEX4HT_HTMLFILE); push @{$Texi2HTML::THISDOC{'css_import_lines'}}, "\@import \"$commands{$command}->{'basename'}.css\";\n"; } sub tex4ht_return_to_dir { unless (chdir $tex4ht_initial_dir) { die "* t2h_tex4ht unable to return to the initial dir\n"; } } my $tex4ht_output_counter = 0; sub tex4ht_do_tex { my $command = shift; my $counter = shift; # return the resulting html if (exists ($tex4ht_results{"${command}_$counter"}) and defined($tex4ht_results{"${command}_$counter"})) { $tex4ht_output_counter++; return $tex4ht_results{"${command}_$counter"}; } else { warn "* t2h_tex4ht: cannot find text to output for $command number $counter\n"; return ''; } } sub tex4ht_finish { my $tex4ht_in_counter = 0; foreach my $command (keys(%commands)) { $tex4ht_in_counter += $commands{$command}->{'counter'}; } if (($tex4ht_output_counter != $tex4ht_in_counter) and ($Texi2HTML::Config::VERBOSE)) { warn "* t2h_tex4ht: output $tex4ht_output_counter for $tex4ht_in_counter items entered\n"; } } } 1; texi2html-1.82/examples/my-bib-macros.texi0000644000175000017500000001456211264347127022421 0ustar flichtenheldflichtenheld@c \input texinfo @c -*-texinfo-*- @c %% my-bib-macros.texi --- Texinfo macros providing a crude @c %% bibliography and citation capability. @c % Copyright (C) 2004 Aaron S. Hawley @c % Author: Aaron S. Hawley @c % Keywords: docs, texinfo, extensions, bib @c % This file is free software; you can redistribute it and/or modify @c % it under the terms of the GNU General Public License as published by @c % the Free Software Foundation; either version 2, or (at your option) @c % any later version. @c % This file is distributed in the hope that it will be useful, @c % but WITHOUT ANY WARRANTY; without even the implied warranty of @c % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @c % GNU General Public License for more details. @c % You should have received a copy of the GNU General Public License @c % along with texi2html; see the file COPYING. If not, write to @c % the Free Software Foundation, Inc., 59 Temple Place - Suite 330, @c % Boston, MA 02111-1307, USA. @c %% Commentary: @c %%% Introduction @c %% Creates references to a ``Bibliography'' or ``References'' @c %% section of a Texinfo document, using Texinfo's @c %% macro system. Although not as terse a way to cite systems as is @c %% found in document systems like TeX, the format is simpler and @c %% the rendering is easier for non-academic readers. @c % @c %%% Usage @c %% References to cited works can be put in any section of a document. @c %% The cited works must be put in either a Texinfo table (for @c %% instance with ``@table @asis ... @end table'') or within a @c %% Texinfo list (something like ``@enumerate ... @end enumerate'' @c %% or ``@itemize @bullet ... @end itemize''). They are created @c %% with the command ``@mybibitem{REF-NAME}''. To cite a reference @c %% with a @mybibitem use ``@mybibcite{REF-NAME}''. @c %% The beginning of a document must include (using the @include @c %% command) the file my-bib-macros.texi, which should be made @c %% available in the current directory of the parent file. A single @c %% call should be made to choose to use a list or a table. The @c %% command to chose is called @mybibuselist{NODE}, where NODE is @c %% the node containing the location where the references are listed. @c % @c %%% Example @c %% \input texinfo @c -*-texinfo-*- @c %% @comment %**start of header @c %% @setfilename my-file-with-bib.info @c %% @settitle Texinfo with a Bibliography and References @c %% @c %% @include my-bib-macros.texi @c %% @mybibuselist{References} @c %% @c %% @comment %**end of header @c %% @c %% @node Top @c %% @top Top @c %% @c %% @menu @c %% * Introduction:: @c %% * @mybibnode{}:: @c %% @c %% @end menu @c %% @c %% @node Introduction @c %% @chapter Introduction @c %% @c %% The ability of a documentation format to make cross references to a @c %% bibliography, a feature of LaTeX @mybibcite{LaTeX2e}, isn't @c %% currently supported in Texinfo. @c %% @c %% @node @mybibnode{} @c %% @chapter References @c %% @c %% @itemize @asis @c %% @c %% @mybibitem{LaTeX2e} Leslie Lamport, LaTeX User's Guide and @c %% Reference Manual, 2nd edition, Addison-Wesley, Reading, @c %% Massachusetts, 1994. @c %% @c %% @end itemize @c %% @c %% @bye @c %% @c %% This example produces (in Info): @c %% 1 Introduction @c %% ************** @c %% @c %% The ability of a documentation format to make cross @c %% references to a bibliography, a feature of LaTeX (See item @c %% [LaTeX2e] in *Note LaTeX2e: References.), is not currently @c %% supported in Texinfo. @c %% @c %% @c %% 2 References @c %% ************ @c %% @c %% [LaTeX2e] Leslie Lamport, LaTeX User's Guide and Reference @c %% Manual, 2nd edition, Addison-Wesley, Reading, @c %% Massachusetts, 1994. @c %% and (in printed output): @c %% 1 Introduction @c %% ************** @c %% @c %% The ability of a documentation format to make cross @c %% references to a bibliography, a feature of LaTeX (See item @c %% [LaTeX2e] in Chapter 2 [References], page 3.), is not @c %% currently supported in Texinfo. @c %% @c %% @c %% 2 References @c %% ************ @c %% @c %% [LaTeX2e] Leslie Lamport, LaTeX User's Guide and Reference @c %% Manual, 2nd edition, Addison-Wesley, Reading, @c %% Massachusetts, 1994. @c % @c %%% Notes @c %% The pointers to references will be functional in hypertext @c %% documentation (info, HTML, XML and others) and properly rendered @c %% in print documents, because they are implemented with Texinfo's @c %% cross referencing capabilities (using @anchor and @ref). Failures @c %% by an author to make proper references with ``my-bib-macros'' in @c %% their document will give cross referencing errors by Texinfo @c %% conversion tools. @c %% Only one ``Reference'' section is allowed per document. @c %% An improvement of this system would create cross references @c %% (with @xref) at each cited work to all the originating cross @c %% refererences. @c % @c %% Code: @c % Configuration Options @c %% @mybibsetrefnode : Defines the name of the node to contain @c %% references. @macro mybibsetrefnode{node} @set mybibrefnode \node\ @end macro @c %% @mybibnode{} : Macro to be placed at node containing references @c %% and calls to @mybibcite{} @macro mybibnode{} @value{mybibrefnode} @end macro @c %% @mybibusetable : Whether each @mybibitem will be put in a @c %% table. @macro mybibusetable{node} @set mybibtable true @ifset mybiblist @clear mybiblist @end ifset @mybibsetrefnode{\node\} @end macro @c %% @mybibuselist : Whether each @mybibitem will be put in a @c %% list. @macro mybibuselist{node} @set mybiblist true @ifset mybibtable @clear mybibtable @end ifset @mybibsetrefnode{\node\} @end macro @c %% @mybibcite{REF} : Cites the cross reference REF. @macro mybibcite{ref} @ifclear mybibrefnode @mybibmakeref{mybibsetrefnode was not used, \ref\} @end ifclear @c %**else if @ifset mybibrefnode @mybibmakeref{@mybibnode{}, \ref\} @end ifset @end macro @macro mybibmakeref{node, ref} (See item [\ref\] in @ref{\node\, \ref\}.) @end macro @c %% @mybibcite{REF} : Creates a cross referenced citation REF. @macro mybibitem{ref} @ifclear mybiblist @ifclear mybibtable @set mybiblist true @end ifclear @end ifclear @ifset mybiblist @item @anchor{\ref\}[\ref\] @end ifset @c %**else if @ifset mybibtable @item @anchor{\ref\}[\ref\] @end ifset @end macro @c %% my-bib-macros.texi ends here texi2html-1.82/examples/glossary.texi0000644000175000017500000000124611264347127021616 0ustar flichtenheldflichtenheld\input texinfo.tex @setfilename glossary @macro glossarytext @table @asis @end macro @macro glossary @glossarytext @end table @end macro @macro gentry {id, name, text} @ifhtml @ref{\id\,\name\} @end ifhtml @ifnothtml \name\ (@pxref{\id\}) @end ifnothtml @unmacro expandglossary @macro expandglossary{glossary} @unmacro glossarytext @macro glossarytext \\glossary\\ @item \name\ @anchor{\id\} \text\ @end macro @end macro @expandglossary {@glossarytext} @end macro @node Top @top Top @menu * glossary:: @end menu The @gentry{id1, name1, text1\, arg1 } is used in many cases while @gentry{id2, name2, text2} is quite specific @node glossary @chapter glossary @glossary texi2html-1.82/examples/xhtml.init0000644000175000017500000001402211264347127021075 0ustar flichtenheldflichtenheld# -*-perl-*- #+############################################################################## # # xhtml.init: convert to well-formed xhtml transitional # # Copyright (C) 2003-2008 Patrice Dumas # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 USA # #-############################################################################## # APA: Add SystemLiteral to identify the canonical DTD. # [Definition:] The SystemLiteral is called the entity's system # identifier. It is a URI, which may be used to retrieve the entity. # See http://www.xml.com/axml/target.html#NT-ExternalID $DOCTYPE = ''; $FRAMESET_DOCTYPE = ''; # -iso # if set, ISO8859 characters are used for special symbols (like copyright, etc) $USE_ISO = 1; # horizontal rules $SMALL_RULE = '
    '; $DEFAULT_RULE = '
    '; $MIDDLE_RULE = '
    '; $BIG_RULE = '
    '; # this is added inside after and some <meta name> # stuff, it can be used for eg. <style>, <script>, <meta> etc. tags. $EXTRA_HEAD = ''; $print_page_head = \&T2H_XHTML_print_page_head; $print_page_foot = \&T2H_XHTML_print_page_foot; $print_frame = \&T2H_XHTML_print_frame; $button_icon_img = \&T2H_XHTML_button_icon_img; #FIXME update once it is more stabilized in texi2html.init sub T2H_XHTML_print_page_head { my $fh = shift; my $longtitle = "$Texi2HTML::THISDOC{'title_no_texi'}"; $longtitle .= ": $Texi2HTML::NO_TEXI{'This'}" if exists $T2H_NO_TEXI{'This'}; print $fh <<EOT; <?xml version="1.0" encoding="iso-8859-1"?> $T2H_DOCTYPE <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="$T2H_LANG" lang="$T2H_LANG"> $T2H_THISDOC{'copying'}<!-- Created on $Texi2HTML::THISDOC{today} by $Texi2HTML::THISDOC{program} --> <!-- $Texi2HTML::THISDOC{program_authors} --> <head> <title>$longtitle $EXTRA_HEAD $AFTER_BODY_OPEN EOT } # instead of sub T2H_XHTML_print_page_foot { my $fh = shift; print $fh < This document was generated $ADDRESS using
    $Texi2HTML::THISDOC{program}.
    $PRE_BODY_CLOSE

    EOT } sub T2H_XHTML_print_frame { my $fh = shift; my $toc_file = shift; my $main_file = shift; print $fh < $Texi2HTML::THISDOC{title} EOT } # / in sub T2H_XHTML_button_icon_img { my $button = shift; my $icon = shift; my $name = shift; return '' if (!defined($icon)); if (defined($name) && $name) { $name = ": $name"; } else { $name = ''; } $button = "" if (!defined ($button)); return qq{$button$name}; } $simple_map{'*'} = '
    '; # formatting functions $def_line = \&t2h_xhtml_def_line; $index_summary = \&t2h_xhtml_index_summary; $image = \&t2h_xhtml_image; # need / in sub t2h_xhtml_image($$$) { my $file = shift; my $base = shift; my $preformatted = shift; return "[ $base ]" if ($preformatted); return "\"$base\"/"; } # process definition commands line @deffn for example # replaced by sub t2h_xhtml_def_line($$$$$) { my $category = shift; my $name = shift; my $type = shift; my $arguments = shift; my $index_label = shift; $index_label = '' if (!defined($index_label)); $name = '' if (!defined($name) or ($name =~ /^\s*$/)); $type = '' if (!defined($type) or $type =~ /^\s*$/); if (!defined($arguments) or $arguments =~ /^\s*$/) { $arguments = ''; } else { $arguments = '' . $arguments . ''; } my $type_name = ''; $type_name = " $type" if ($type ne ''); $type_name .= ' ' . $name . '' if ($name ne ''); $type_name .= $arguments . "\n"; if (! $DEF_TABLE) { return '
    '. '' . $category . ':' . $type_name . $index_label . "
    \n"; } else { return "\n" . $type_name . "\n" . $category . $index_label . "\n" . "\n"; } } # There is a br which needs / sub t2h_xhtml_index_summary($$) { my $alpha = shift; my $nonalpha = shift; my $join = ''; my $nonalpha_text = ''; my $alpha_text = ''; $join = "   \n
    \n" if (@$nonalpha and @$alpha); if (@$nonalpha) { $nonalpha_text = join("\n   \n", @$nonalpha) . "\n"; } if (@$alpha) { $alpha_text = join("\n   \n", @$alpha) . "\n   \n"; } #I18n return "
    Jump to:   " . $nonalpha_text . $join . $alpha_text . '
    '; } texi2html-1.82/examples/mediawiki.init0000644000175000017500000004644611264347127021723 0ustar flichtenheldflichtenheld# -*-perl-*- ###################################################################### # File: mediawiki.init # # Override values for various customizable procedures are set in this file # in such a way as to create text suitable for pasting into a MediaWiki. # # Load the file with command-line # option -init-file mediawiki.init # # $Id: mediawiki.init,v 1.12 2008/11/03 12:33:16 pertusus Exp $ ###################################################################### # The following variables can also be set by command-line options # # # The default values are set in this file, texi2html.init and the content # of this file is included at the beginning of the texi2html script file. # Those values may be overrided by values set in $sysconfdir/texi2htmlrc # and then by values set in $HOME/texi2htmlrc. # # command line switches may override these values, and values set in files # specified by -init-file are also taken into account. # values set in these files overwrite values set by the command-line # options appearing before -init-file and might still be overwritten by # command-line arguments following the -init-file option. # -number | -nonumber # if this is set the sections are numbered, and section names and numbers # are used in references and menus (instead of node names). $NUMBER_SECTIONS = 0; # -separated-footnotes # if this is set footnotes are on a separated page. Otherwise they are at # the end of each file (if the document is split). $SEPARATED_FOOTNOTES = 1; # extension $EXTENSION = undef; # extension for nodes files when NODE_FILES is true $NODE_FILE_EXTENSION = ""; # Use "title: section" name as the file name. $SECTION_AS_FILE_NAME = 1; # if set and $SPLIT is set, then split index pages at the next letter # after they have more than that many entries undef $SPLIT_INDEX; # Use preformatted menus. $SIMPLE_MENU = 1; push @command_handler_init, \&mediawiki_initialize_variables; my %doc_nr_to_file; # File name cache based on file index. sub mediawiki_initialize_variables() { %doc_nr_to_file = (); # File name cache based on file index. } ################################################################### # Layout of standard header and footer # $print_page_head = \&mediawiki_print_page_head; $print_page_foot = \&mediawiki_print_page_foot; $program_string = \&mediawiki_program_string; sub mediawiki_print_page_head($) { my $fh = shift; print $fh "$AFTER_BODY_OPEN\n" if $AFTER_BODY_OPEN; } sub mediawiki_program_string() { my $user = $Texi2HTML::THISDOC{'user'}; my $date = $Texi2HTML::THISDOC{'today'}; $user = '' if (!defined($user)); $date = '' if (!defined($date)); if (($user ne '') and ($date ne '')) { return &$I('This document was generated by @emph{%{user}} on @emph{%{date}} using @uref{%{program_homepage}, @emph{%{program}}}.', { 'user' => $user, 'date' => $date, 'program_homepage' => $Texi2HTML::THISDOC{'program_homepage'}, 'program' => $Texi2HTML::THISDOC{'program'} }); } elsif ($user ne '') { return &$I('This document was generated by @emph{%{user}} using @uref{%{program_homepage}, @emph{%{program}}}.', { 'user' => $user, 'program_homepage' => $Texi2HTML::THISDOC{'program_homepage'}, 'program' => $Texi2HTML::THISDOC{'program'} }); } elsif ($date ne '') { return &$I('This document was generated on @i{%{date}} using @uref{%{program_homepage}, @i{%{program}}}.', { 'date' => $date, 'program_homepage' => $Texi2HTML::THISDOC{'program_homepage'}, 'program' => $Texi2HTML::THISDOC{'program'} }); } return &$I('This document was generated using @uref{%{program_homepage}, @emph{%{program}}}.', { 'program_homepage' => $Texi2HTML::THISDOC{'program_homepage'}, 'program' => $Texi2HTML::THISDOC{'program'} }); } sub mediawiki_print_page_foot($) { my $fh = shift; my $program_string = &$program_string(); print $fh $program_string, "\n"; print $fh $PRE_BODY_CLOSE, "\n" if $PRE_BODY_CLOSE; } # This function produces an anchor # # arguments: # $name : anchor name # $href : anchor href # $text : text displayed # extra_attribs : added to anchor attributes list $anchor = \&mediawiki_anchor; sub mediawiki_anchor($;$$$) { my $name = shift; my $href = shift; my $text = shift; my $attributes = shift; # ignored $href = '' if !defined $href or $href !~ /\S/; $text = '' if !defined $text or $text !~ /\S/; return $text if $name eq '' and $href eq ''; $name = "
    " if $name ne ''; if ($href) { if ($href =~ /^\w+:/ # If the i18n will replace this later, assume it's a full URL. || $href =~ /^%/) { $text = " $text" if $text; $href = "[$href$text]"; } else { $text = "|$text" if $text; $href = "[[$href$text]]"; } } else { $href = $text; } #print STDERR "!!!$name!$href!$text!$attributes!\n"; return "$name$href"; } # When the value begins with & the function with that name is used to do the # # Otherwithe the value is the html element used to enclose the text, and if # there is a " the resulting text is also enclosed within `' # default is {'args' => ['normal'], 'attribute' => ''}, $style_map{'titlefont'} = {'function' => \&mediawiki_titlefont}; #$style_map{'option'} = {'args' => ['code'], # 'attribute' => 'code', # 'quote' => '"'}; #$style_map{'samp'} = {'args' => ['code'], # 'attribute' => 'code', # 'quote' => '"'}; $print_Top = \&mediawiki_print_Top; $print_misc = \&mediawiki_print_misc; $titlepage = \&mediawiki_titlepage; sub mediawiki_print_Top { my $fh = shift; my $has_top_heading = shift; # for redefining navigation buttons use: # my $buttons = [...]; # as it is, 'Top', 'Contents', 'Index', 'About' are printed my $buttons = \@MISC_BUTTONS; # &$print_head_navigation($fh, $buttons); my $nw; if ($Texi2HTML::THIS_SECTION) { # if top-level node has content, then print it with extra header #print $fh "

    $Texi2HTML::NAME{Top}

    \n" #print $fh "

    $Texi2HTML::NAME{Top}

    \n" # chomp $Texi2HTML::NAME{Top}; # print $fh "== $Texi2HTML::NAME{Top} ==\n" # unless ($has_top_heading); $nw = main::print_lines($fh, $Texi2HTML::THIS_SECTION); } else { # top-level node is fully enclosed in @ifnothtml # print fulltitle, subtitle, author, Overview # redo the titlepage with the actual state my ($titlepage_text, $titlepage_no_texi, $titlepage_simple_text) = main::do_special_region_lines('titlepage',$Texi2HTML::THISDOC{'state'}); &$titlepage([],$titlepage_text, $titlepage_no_texi, $titlepage_simple_text); print $fh $Texi2HTML::TITLEPAGE; if (@{$Texi2HTML::OVERVIEW}) { print $fh '=== ' . &$I('Overview:') . " ===\n" . "
    \n"; my $nw = main::print_lines($fh, $Texi2HTML::OVERVIEW); print $fh "
    \n"; } } } sub mediawiki_print_misc { my $fh = shift; my $new_file = shift; my $misc_page = shift; my $buttons = \@MISC_BUTTONS; &$print_misc_header($fh, $buttons, $new_file, $misc_page); print $fh "== $Texi2HTML::NAME{This} ==\n"; main::print_lines($fh); &$print_misc_footer($fh, $buttons, $new_file); } sub mediawiki_titlepage($$$$) { my $titlepage_lines = shift; my $titlepage_text = shift; my $titlepage_no_texi = shift; my $titlepage_simple_text = shift; my $result = ''; if (@{$Texi2HTML::THISDOC{'titles'}} or @{$Texi2HTML::THISDOC{'subtitles'}} or @{$Texi2HTML::THISDOC{'authors'}}) { foreach my $title (@{$Texi2HTML::THISDOC{'titles'}}) { $result .= '== ' . $title . " ==\n"; } foreach my $subtitle (@{$Texi2HTML::THISDOC{'subtitles'}}) { $result .= '=== ' . $subtitle . " ===\n"; } foreach my $author (@{$Texi2HTML::THISDOC{'authors'}}) { $result .= ' ' . $author . "
    \n"; } $result .= "$DEFAULT_RULE\n" if $DEFAULT_RULE; } $Texi2HTML::TITLEPAGE = $result . $titlepage_text; } sub mediawiki_titlefont($$$) { shift; my $args = shift; return "\n== $args->[0] ==\n" if $args->[0] =~ /\S/; return ''; } # This function formats a footnote reference and the footnote text associated # with a given footnote. # The footnote reference is the text appearing in the main document pointing # to the footnote text. # # arguments: # absolute number of the footnote (in the document) # relative number of the footnote (in the page) # identifier for the footnote # identifier for the footnote reference in the main document # main document file # footnote text file # array with the footnote text lines # the state. See menu entry. # # returns: # reference on an array containing the footnote text lines which should # have been updated # the text for the reference pointing on the footnote text $foot_line_and_ref = \&mediawiki_foot_line_and_ref; $foot_section = \&mediawiki_default_foot_section; sub medaiwiki_foot_line_and_ref($$$$$$$) { my $number_in_doc = shift; my $number_in_page = shift; my $footnote_id = shift; my $place_id = shift; my $document_file = shift; my $footnote_file = shift; my $lines = shift; my $state = shift; unshift (@$lines, &$anchor($footnote_id, $document_file . "#$place_id", "($number_in_doc)") . "\n"); return ($lines, &$anchor($place_id, $footnote_file . "#$footnote_id", "($number_in_doc)")); } # formats a group of footnotes. # # argument: # array reference on the footnotes texts lines # # returns an array reference on the group of footnotes lines sub mediawiki_foot_section($) { my $lines = shift; unshift @$lines, "$DEFAULT_RULE\n" if $DEFAULT_RULE; unshift @$lines, "==== " . &$I('Footnotes') . " ====\n"; return $lines; } # This function formats a heading for an element # # argument: # an element. It is a hash reference for a node or a sectionning command. # The interesting keys are: # 'text': the heading text # 'name': the heading text without section number # 'node': true if it is a node # 'level': level of the element. 0 for @top, 1 for chapter, heading, # appendix..., 2 for section and so on... # 'tag_level': the sectionning element name, raisesections and lowersections # taken into account # # relevant configuration variable: # $NUMBER_SECTIONS $heading = \&mediawiki_heading; sub mediawiki_heading($$$$$;$$) { my $element = shift; my $command = shift; my $texi_line = shift; my $line = shift; my $in_preformatted = shift; my $one_section = shift; my $element_heading = shift; #return '' if (defined($command) and $command eq 'node' and !$element_heading); my $level = 3; if (!$element->{'node'}) { $level = $element->{'level'}; } $level = 1 if ($level == 0); my $text = $element->{'text'}; if (!$element->{'node'} and (!$NUMBER_SECTIONS)) { $text = $element->{'name'}; } if ($element->{'top'}) { return '' if ($element->{'titlefont'}); $level = 1; $text = $Texi2HTML::NAME{'Top'}; chomp $text; } return '' if ($text !~ /\S/); my $class = $element->{'tag_level'}; $class = 'unnumbered' if ($class eq 'top'); if (defined($element->{'tocid'}) and $TOC_LINKS) { $text = &$anchor ('', "$Texi2HTML::THISDOC{'toc_file'}#$element->{'tocid'}", $text); } return (("=" x $level) . "= $text =" . ("=" x $level) . "\n"); } $print_navigation = \&mediawiki_print_navigation; sub mediawiki_print_navigation { my $buttons = shift; my $vertical = shift; my $spacing = 1; my $result = ''."\n"; $result .= "" unless $vertical; for my $button (@$buttons) { $result .= qq{\n} if $vertical; $result .= qq{\n"; $result .= "\n" if $vertical; } $result .= "" unless $vertical; $result .= "
    }; if (ref($button) eq 'CODE') { $result .= &$button($vertical); } elsif (ref($button) eq 'SCALAR') { $result .= "$$button" if defined($$button); } elsif (ref($button) eq 'ARRAY') { my $text = $button->[1]; my $button_href = $button->[0]; if (defined($button_href) and !ref($button_href) and defined($text) and (ref($text) eq 'SCALAR') and defined($$text)) { # use given text if ($Texi2HTML::HREF{$button_href}) { $result .= "" . &$anchor('', $Texi2HTML::HREF{$button_href}, $$text ) ; } else { $result .= $$text; } } } elsif ($button eq ' ') { # handle space button $result .= $ICONS && $ACTIVE_ICONS{' '} ? &$button_icon_img($button, $ACTIVE_ICONS{' '}) : $NAVIGATION_TEXT{' '}; #next; } elsif ($Texi2HTML::HREF{$button}) { # button is active my $btitle = $BUTTONS_GOTO{$button} ? 'title="' . ucfirst($BUTTONS_GOTO{$button}) . '"' : ''; if ($ICONS && $ACTIVE_ICONS{$button}) { # use icon $result .= '' . &$anchor('', $Texi2HTML::HREF{$button}, &$button_icon_img($button, $ACTIVE_ICONS{$button}, #$Texi2HTML::NAME{$button}), $Texi2HTML::NO_TEXI{$button}), $btitle ); } else { # use text $result .= '|' . &$anchor('', $Texi2HTML::HREF{$button}, $NAVIGATION_TEXT{$button}, $btitle ) . '|'; } } else { # button is passive $result .= $ICONS && $PASSIVE_ICONS{$button} ? &$button_icon_img($button, $PASSIVE_ICONS{$button}, #$Texi2HTML::NAME{$button}) : $Texi2HTML::NO_TEXI{$button}) : "[" . $NAVIGATION_TEXT{$button} . "]"; } $result .= "
    \n"; return $result; } $element_file_name = \&mediawiki_element_file_name; sub mediawiki_element_file_name { my $element = shift; my $type = shift; my $docu_name = shift; my $file; #print STDERR "!$element!$type!$docu_name!\n"; if (!$element) { if ($type =~ /^toc$/) { $file = $docu_name . ": Table of Contents"; } elsif ($type =~ /^stoc$/) { $file = $docu_name . ": Short Table of Contents"; } elsif ($type =~ /^foot$/) { $file = $docu_name . ": Footnotes"; } elsif ($type =~ /^about$/) { $file = $docu_name . ": About this Manual"; } elsif ($type =~ /^doc$/) { $file = $docu_name; } } elsif (exists $doc_nr_to_file{$element->{'doc_nr'}}) { $file = $doc_nr_to_file{$element->{'doc_nr'}}; $doc_nr_to_file{$element->{'doc_nr'}} = $file; } else { $file = "$docu_name" . ($type ? "" : ": " . $element->{'texi'}); $doc_nr_to_file{$element->{'doc_nr'}} = $file; } return $file; } # a preformatted region # arguments: # $text of the preformatted region # $pre_style css style # $class identifier for the preformatted region (example, menu-comment) # The following is usefull if the preformatted is in an itemize. # $leading_command is the leading formatting command (like @minus) # $leading_command_formatted is the leading formatting command formatted # $preformatted_number is a reference on the number of preformatteds appearing # in the format. The value should be increased if a preformatted is done $preformatted = \&mediawiki_preformatted; sub mediawiki_preformatted($$$$$$$$$$) { my $text = shift; my $pre_style = shift; my $class = shift; my $leading_command = shift; my $leading_command_formatted = shift; my $preformatted_number = shift; my $format = shift; my $item_nr = shift; my $enumerate_style = shift; my $number = shift; my $command_stack_at_end = shift; my $command_stack_at_begin = shift; return '' if ($text eq ''); $leading_command_formatted = '' if (!defined($leading_command_formatted) or exists($special_list_commands{$format}->{$leading_command})); if (defined($preformatted_number) and defined($$preformatted_number)) { $$preformatted_number++; } my $top_stack = ''; $top_stack = $command_stack_at_begin->[-1] if (scalar (@$command_stack_at_begin)); if ($top_stack eq 'multitable') { $text =~ s/^\s*//; $text =~ s/\s*$//; } return "
    $text
    "; } # format an index summary. This is a list of letters linking to the letter # entries. # # arguments: # array reference containing the formatted alphabetical letters # array reference containing the formatted non lphabetical letters $index_summary = \&mediawiki_index_summary; sub mediawiki_index_summary($$) { my $alpha = shift; my $nonalpha = shift; my $join = ''; my $nonalpha_text = ''; my $alpha_text = ''; return "" if !@$nonalpha and !@$alpha; $nonalpha_text = join ("", map {"$_"} @$nonalpha) . "\n" if @$nonalpha; $alpha_text = join ("", @$alpha) . "\n   \n" if @$alpha; return '' . "\n" . join ("", map {"\n"} @$nonalpha, @$alpha), . "
    " . &$I('Jump to') .":$_
    \n"; } ## a simple menu entry ref in case we aren't in a standard menu context #$simple_menu_link = \&mediawiki_simple_menu_link; # a menu link. We are always in preformatted because of SIMPLE_MENU. $menu_link = \&mediawiki_simple_menu_link; sub mediawiki_simple_menu_link($$$$$$$) { my $entry = shift; # my $preformatted = shift; # We assume this is true. my $state = shift; my $href = shift; my $node = shift; my $title = shift; my $ending = shift; my $has_title = shift; my $command_stack = shift; my $preformatted = shift; $title = '' unless ($has_title); $ending = '' unless defined $ending; $entry = ""; $entry .= "$MENU_SYMBOL"; if ($href) { $entry .= &$anchor ('', $href, $node); } else { $title .= ":" if ($title ne ''); $entry .= "$title$node"; } $entry .= $ending; $entry .= ""; return $entry; } texi2html-1.82/examples/utf8.init0000644000175000017500000000322311264347127020630 0ustar flichtenheldflichtenheld# -*-perl-*- #+############################################################################## # # utf8.init: convert accented letters to utf8 # # Copyright (C) 2003-2008 Patrice Dumas # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 USA # #-############################################################################## $USE_ISO = 0; $ENCODING_NAME = 'utf-8'; use Encode; use Unicode::Normalize; foreach my $key (keys(%unicode_accents), 'dotless') { $style_map{$key}->{'function'} = \&t2h_utf8_accent; $style_map_texi{$key}->{'function'} = \&t2h_utf8_accent; $style_map_pre{$key}->{'function'} = \&t2h_utf8_accent; } foreach my $key (%things_map) { if (exists($unicode_map{$key}) and ($unicode_map{$key} ne '')) { $things_map{$key} = chr(hex($unicode_map{$key})); $texi_map{$key} = chr(hex($unicode_map{$key})); $pre_map{$key} = chr(hex($unicode_map{$key})); } } $normal_text = \&t2h_utf8_normal_text; 1; texi2html-1.82/examples/html32.init0000644000175000017500000002403111264347127021053 0ustar flichtenheldflichtenheld# -*-perl-*- #+############################################################################## # # html32.init: output HTML 3.2 # # Copyright (C) 2003-2008 Patrice Dumas # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 USA # #-############################################################################## # APA: Add SystemLiteral to identify the canonical DTD. # [Definition:] The SystemLiteral is called the entity's system # identifier. It is a URI, which may be used to retrieve the entity. # See http://www.xml.com/axml/target.html#NT-ExternalID $DOCTYPE = ''; $FRAMESET_DOCTYPE = $DOCTYPE; $BODYTEXT = 'bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000"'; # this controls the pre style for menus $MENU_PRE_STYLE = ''; $NO_BULLET_LIST_STYLE =''; $USE_ISO = 0; $MENU_SYMBOL = '*'; # This lines are inserted before and after the shortcontents $BEFORE_OVERVIEW = ""; $AFTER_OVERVIEW = ''; # This lines are inserted before and after the contents $BEFORE_TOC_LINES = ""; $AFTER_TOC_LINES = ''; # html version for latex2html $L2H_HTML_VERSION = "3.2"; # no class in html 32 $NO_BULLET_LIST_ATTRIBUTE = ''; # no css $CSS_LINES = ""; %css_map = (); $things_map{'oe'} = 'œ'; $things_map{'OE'} = 'Œ'; $things_map{'dots'} = '...'; $things_map{'enddots'} = '...'; $things_map{'euro'} = 'Euro'; $things_map{'geq'} = '>='; $things_map{'leq'} = '<='; $things_map{'quotedblleft'} = '``'; $things_map{'quotedblright'} = "''"; $things_map{'quoteleft'} = '`'; $things_map{'quoteright'} = "'"; $things_map{'quotedblbase'} = ',,'; $things_map{'quotesinglbase'} = ','; $things_map{'guillemetleft'} = '<<'; $things_map{'guillemetright'} = '>>'; $things_map{'guillemotleft'} = '<<'; $things_map{'guillemotright'} = '>>'; $things_map{'guilsinglleft'} = '<'; $things_map{'guilsinglright'} = '>'; foreach my $style ('oe', 'OE', 'quotedblleft', 'quotedblright', 'quoteleft', 'quoteright', 'quotedblbase', 'quotesinglbase', 'guillemetleft', 'guillemetright', 'guillemotleft', 'guillemotright', 'guilsinglleft', 'guilsinglright') { $pre_map{$style} = $things_map{$style}; } $style_map{'sansserif'} = {}; $style_map{'r'} = {}; $style_map_pre{'r'} = {}; $style_map_pre{'sansserif'} = {}; $style_map{'titlefont'} = {'function' => \&t2h_html32_titlefont, 'type' => 'simple_style'}; $style_map_pre{'titlefont'} = {}; $format_map{'multitable'} = 'table'; # Avoid adding h1 if the text is empty # no class in html 3.2 sub t2h_html32_titlefont($$$) { shift; my $args = shift; return "

    $args->[0]

    " if ($args->[0] =~ /\S/); return ''; } # formatting functions $summary_letter = \&t2h_html32_summary_letter; $print_index = \&t2h_html32_print_index; $protect_text = \&t2h_html32_protect_text; $normal_text = \&t2h_html32_normal_text; $heading = \&t2h_html32_heading; $preformatted = \&t2h_html32_preformatted; $raw = \&t2h_html32_raw; $menu = \&t2h_html32_menu; $foot_section = \&t2h_html32_foot_section; $cartouche = \&t2h_html32_cartouche; $listoffloats = \&t2h_html32_listoffloats; $float = \&t2h_html32_float; $acronym_like = \&t2h_html32_acronym_like; $row = \&t2h_html32_row; $cell = \&t2h_html32_cell; $quotation = \&t2h_html32_quotation; # " is not in html 3.2 sub t2h_html32_protect_text($) { my $text = shift; $text =~ s/&/&/g; $text =~ s//>/g; $text =~ s/\"/"/g; return $text; } sub t2h_html32_normal_text($$$$$) { my $text = shift; my $in_raw_text = shift; my $in_preformatted = shift; my $in_code = shift; my $in_simple = shift; my $style_stack = shift; $text = uc($text) if (in_cmd($style_stack, 'sc')); $text = &$protect_text($text) unless($in_raw_text); if (! $in_code and !$in_preformatted) { if ($in_raw_text) #FIXME really do that ? It is done by makeinfo { $text =~ s/``/"/g; $text =~ s/''/"/g; } else { $text =~ s/``/"/g; $text =~ s/''/"/g; } # temporary reuse '' to store --- !.... # FIXME won't '---' be handled wrongly? # FIXME really do that in raw text? $text =~ s/---/''/g; $text =~ s/--/-/g; $text =~ s/''/--/g; } return $text; } # a preformatted section sub t2h_html32_preformatted($$$) { my $text = shift; my $pre_style = shift; my $class = shift; return '' if ($text eq ''); return "
    $text
    "; } # a heading for an element sub t2h_html32_heading($) { my $element = shift; my $command = shift; my $texi_line = shift; my $line = shift; my $in_preformatted = shift; my $one_section = shift; my $element_heading = shift; return '' if (defined($command) and $command eq 'node' and !$element_heading); my $level = 3; if (!$element->{'node'}) { $level = $element->{'level'}; } $level = 1 if ($level == 0); my $text = $element->{'text'}; if (!$element->{'node'} and (!$NUMBER_SECTIONS)) { $text = $element->{'name'}; } return '' if ($text !~ /\S/); if (defined($element->{'tocid'}) and $TOC_LINKS) { $text = &$anchor ('', "$Texi2HTML::THISDOC{'toc_file'}#$element->{'tocid'}", $text); } return " $text \n"; } # formatting of raw regions # ih L2H is true another mechanism is used for tex sub t2h_html32_raw($$) { my $style = shift; my $text = shift; if ($style eq 'verbatim' or $style eq 'tex') { return "
    " . &$protect_text($text) . '
    '; } elsif ($style eq 'html') { return $text; } else { warn "$WARN (bug) unknown style $style\n"; return &$protect_text($text); } } # a whole menu sub t2h_html32_menu($) { my $text = shift; if ($text =~ /\S/) { return "\n" . $text . "
    \n"; } } # a simple menu entry ref in case we aren't in a standard menu context sub t2h_html32_foot_section($) { my $lines = shift; unshift (@$lines, "
    \n", "

    Footnotes

    \n"); return $lines; } # a cartouche sub t2h_html32_cartouche($) { my $text = shift; if ($text =~ /\S/) { return "
    \n" . $text . "
    \n"; } return ''; } # no style sub t2h_html32_summary_letter($$$$$$$) { my $letter = shift; my $file = shift; my $identifier = shift; my $index_element_id = shift; my $number = shift; my $index_element = shift; my $index_name = shift; return &$anchor('', $file . '#' . $identifier, '' . &$protect_text($letter) . ''); } # format a whole index # # argument: # index text # index name sub t2h_html32_print_index($$) { my $text = shift; my $name = shift; return '' if (!defined($text)); return "\n" . "\n" . "\n" . $text . "
    " . &$I('Index Entry') . " " . &$I('Section') . "
    $DEFAULT_RULE
    \n"; } sub t2h_html32_float($$$$$) { my $text = shift; my $float = shift; my $caption = shift; my $shortcaption = shift; my $label = ''; if (exists($float->{'id'})) { $label = &$anchor($float->{'id'}); } my $caption_text = ''; if (defined($float->{'caption_texi'})) { $caption_text = $caption; } elsif (defined($float->{'shortcaption_texi'})) { $caption_text = $shortcaption; } elsif (defined($caption)) { $caption_text = $caption; } return "$label\n" . $text . $caption_text; } sub t2h_html32_listoffloats($$$) { my $style_texi = shift; my $style = shift; my $float_entries = shift; my $result = "
    \n" ; foreach my $float_entry (@$float_entries) { $result .= $float_entry; } return $result . "
    \n"; } # no acronym, and no abbr in html 3.2 sub t2h_html32_acronym_like($$$$$$) { my $command = shift; my $acronym_texi = shift; my $acronym_text = shift; my $with_explanation = shift; my $explanation_lines = shift; my $explanation_text = shift; my $explanation_simply_formatted = shift; if ($with_explanation) { return &$I('%{acronym_like} (%{explanation})', {'acronym_like' => $acronym_text, 'explanation' => $explanation_text},{'duplicate'=>1}) } else { return $acronym_text; } } # row in multitable sub t2h_html32_row($$) { my $text = shift; my $macro = shift; if ($text =~ /\S/) { return '' . $text . '' . "\n"; } return ''; } # cell in multitable sub t2h_html32_cell($$) { my $text = shift; my $row_macro = shift; my $columnfractions = shift; my $prototype_row = shift; $text =~ s/^\s*//; $text =~ s/\s*$//; if ($row_macro eq 'headitem') { return "" . $text . ''; } return "" . $text . ''; } sub t2h_html32_quotation($$$$) { my $command = shift; my $text = shift; my $argument_text = shift; my $argument_text_texi = shift; return "
    " . $text . "
    \n"; } texi2html-1.82/examples/xml.init0000644000175000017500000007547711264347127020566 0ustar flichtenheldflichtenheld$EXTENSION = "xml"; $DOCTYPE = ''; $USE_MENU_DIRECTIONS = 0; $USE_UP_FOR_ADJACENT_NODES = 0; $USE_NUMERIC_ENTITY = 0; $USE_SETFILENAME = 1; $SEPARATE_DESCRIPTION = 1; $USE_NODES = 1; @EXPAND = ('xml'); $USE_ISO = 0; $SECTION_NAVIGATION = 0; push @Texi2HTML::Config::command_handler_process, \&xml_init_variables; $colon_command_punctuation_characters{'.'} = '.'; $colon_command_punctuation_characters{':'} = ':'; $colon_command_punctuation_characters{'?'} = '?'; $colon_command_punctuation_characters{'!'} = '!'; $simple_map{'*'} = '&linebreak;'; $simple_map{' '} = '&space;'; $simple_map{"\t"} = '&space;'; $simple_map{"\n"} = '&space;'; $simple_map{'.'} = '&eosperiod;'; $simple_map{'!'} = '&eosexcl;'; $simple_map{'?'} = '&eosquest;'; %simple_map_pre = %simple_map; # FIXME right? $things_map{'l'} = '/l'; $things_map{'L'} = '/L'; $things_map{'enddots'} = '&enddots;'; $things_map{'dots'} = '&dots;'; # FIXME ≡ #$things_map{'equiv'} = '=='; $things_map{'minus'} = '−'; $things_map{'result'} = '⇒'; $things_map{'bullet'} = '•'; $things_map{'copyright'} = '©right;'; $things_map{'registeredsymbol'} = '®istered;'; $things_map{'arrow'} = '→'; $things_map{'TeX'} = '&tex;'; $things_map{'LaTeX'} = '&latex;'; %pre_map = %things_map; $stop_paragraph_command{'caption'} = 1; $stop_paragraph_command{'shortcaption'} = 1; $format_map{'copying'} = ''; $format_map{'titlepage'} = 'titlepage'; $format_map{'documentdescription'} = 'documentdescription'; $format_map{'group'} = 'group'; foreach my $region ('titlepage', 'documentdescription', 'copying') { $region_formats_kept{$region} = 1; } foreach my $style (keys(%style_map)) { next if grep {$style eq $_} ('asis', 'ctrl', 'w', 'tieaccent', 'dotless', keys(%unicode_accents)); if (!exists($style_map{$style}->{'args'}) or (scalar(@{$style_map{$style}->{'args'}}) eq 1 and $style_map{$style}->{'args'}->[0] eq 'code')) { $style_map{$style}->{'attribute'} = $style; delete ($style_map{$style}->{'quote'}); delete ($style_map{$style}->{'begin'}); delete ($style_map{$style}->{'end'}); } } foreach my $complex_format (keys(%$complex_format_map)) { my $style = $complex_format_map->{$complex_format}->{'style'}; delete $complex_format_map->{$complex_format}; $complex_format_map->{$complex_format}->{'begin'} = "\"<$complex_format xml:space=\\\"preserve\\\">\""; $complex_format_map->{$complex_format}->{'end'} = "\"\""; $complex_format_map->{$complex_format}->{'style'} = $style if (defined($style)); } delete $iso_symbols{'`'}; delete $iso_symbols{"'"}; delete $style_map{'verb'}->{'attribute'}; $style_map{'indicateurl'}->{'attribute'} = 'url'; $style_map{'w'}->{'end'} = ''; $style_map{'='}->{'function'} = \&xml_macron; $style_map{'email'}->{'function'} = \&xml_email; $style_map{'titlefont'}->{'function'} = \&xml_titlefont; $style_map{'math'}->{'function'} = \&xml_math; $style_map{'uref'}->{'function'} = \&xml_uref; $style_map{'url'}->{'function'} = \&xml_uref; $style_map{'t'}->{'attribute'} = 'tt'; # FIXME delete $special_accents{'ringaccent'}; $special_accents{'ogonek'} = 'aeiuAEIU'; %style_map_pre = %style_map; sub xml_macron($$) { my $accent = shift; my $args = shift; return $args->[0] . "¯"; } sub xml_email($$) { my $command = shift; my $args = shift; my $mail = shift @$args; my $text = shift @$args; $mail = main::normalise_space($mail); my $result = "$mail"; if (defined($text) and $text =~ /\S/) { $result .= "".main::normalise_space($text).""; } return $result . ''; } sub xml_uref($$) { shift; my $args = shift; my $url = shift @$args; my $text = shift @$args; my $replacement = shift @$args; $url = main::normalise_space($url); $replacement = '' if (!defined($replacement)); $replacement = main::normalise_space($replacement); $text = '' if (!defined($text)); $text = main::normalise_space($text); my $result = "$url"; $result .= "$text" if ($text ne ''); $result .= "$replacement" if ($replacement ne ''); return $result.''; } sub xml_titlefont($$) { shift; my $args = shift; return "$args->[0]" if ($args->[0] =~ /\S/); return ''; } sub xml_math($$) { shift; my $args = shift; my $text = shift @$args; $text =~ s/[{}]//g; return "$text"; } $no_paragraph_commands{'cindex'} = 0; #my @xml_ignored_misc_commands = ('bye', 'sp', 'verbatiminclude'); @xml_ignored_misc_commands = ('bye', 'sp', 'verbatiminclude', 'clickstyle', 'defcodeindex', 'syncodeindex', 'paragraphindent', 'shorttitlepage', 'refill', 'noindent'); # we want to proceed all the misc commands # makeinfo ignores clickstyle, changes setfilename. Not sure it is right. foreach my $misc_command (keys(%misc_command)) { next if (grep {$misc_command eq $_} @xml_ignored_misc_commands); $misc_command{$misc_command}->{'keep'} = 1; } $format_map{'menu'} = 'menu'; # checked on bug-texinfo, only node is in code_style, as with makeinfo --xml #$format_code_style{'menu'} = 1; #$format_code_style{'menu_name'} = 1; #$format_code_style{'menu_description'} = 1; $format_map{'detailmenu'} = 'detailmenu'; $format_map{'menu_comment'} = ''; delete $format_map{'enumerate'}; foreach my $table ('table', 'ftable', 'vtable') { #$format_map{$table} = 'table'; delete $format_map{$table}; } $menu_description = \&xml_menu_description; $menu_link = \&xml_menu_link; $element_heading = \&xml_heading; $heading = \&xml_heading; $heading_texi = \&xml_heading_texi; $paragraph = \&xml_paragraph; $preformatted = \&xml_preformatted; $misc_element_label = \&xml_noop; $element_label = \&xml_noop; $anchor_label = \&xml_anchor_label; $index_entry_label = \&xml_index_entry_label; $index_entry_command = \&xml_index_entry_command; $listoffloats = \&xml_listoffloats; $acronym_like = \&xml_acronym_like; $foot_line_and_ref = \&xml_foot_line_and_ref; $image = \&xml_image; $sp = \&xml_sp; $quotation = \&xml_quotation; $table_list = \&xml_table_list; $row = \&xml_row; $cell = \&xml_cell; $list_item = \&xml_list_item; $format_list_item_texi = \&xml_format_list_item_texi; $unknown = \&xml_misc_commands; $begin_format_texi = \&xml_begin_format_texi; $def_line = \&xml_def_line; $def = \&xml_def; $def_item = \&xml_def_item; $printindex = \&xml_printindex; $index_summary = \&xml_index_summary; $external_ref = \&xml_external_ref; $internal_ref = \&xml_internal_ref; $table_item = \&xml_table_item; $table_line = \&xml_table_line; $float = \&xml_float; $caption_shortcaption = \&xml_caption_shortcaption; $caption_shortcaption_command = \&xml_caption_shortcaption_command; $normal_text = \&xml_normal_text; $paragraph_style_command = \&xml_paragraph_style_command; $raw = \&xml_raw; $cartouche = \&xml_cartouche; $print_Top = \&xml_print_Top; $print_Top_footer = \&xml_print_Top_footer; $print_page_head = \&xml_print_page_head; #$print_navigation = \&xml_noop; $print_foot_navigation = \&xml_noop; $toc_body = \&xml_noop; $about_body = \&xml_noop; $print_page_foot = \&xml_print_page_foot; $end_section = \&xml_end_section; $one_section = \&xml_one_section; sub xml_menu_description($$$) { my $text = shift; my $state = shift; my $element_text = shift; return "$text\n"; } sub xml_menu_link($$$$$$$) { my $entry = shift; my $state = shift; my $href = shift; my $menunode = shift; my $menutitle = shift; my $ending = shift; my $has_title = shift; return "\n$menunode\n$menutitle\n"; } sub xml_print_page_head($) { my $fh = shift; my $setfilename = ''; $setfilename = "$Texi2HTML::THISDOC{file_base_name}.$EXTENSION" unless (defined($Texi2HTML::THISDOC{'setfilename'}) and $Texi2HTML::THISDOC{'setfilename'} ne ''); print $fh < $DOCTYPE $setfilename EOT } sub xml_print_page_foot($) { my $fh = shift; print $fh < EOT } sub xml_heading_texi($$$) { my $tag = shift; my $texi = shift; my $number = shift; $texi =~ s/\s*$//; $texi =~ s/^\s*//; return $texi; } sub xml_one_section($$) { my $fh = shift; my $element = shift; main::print_lines($fh); print $fh "". xml_footing($element); &$print_foot_navigation($fh); &$print_page_foot($fh); } sub xml_heading($$$$$) { my $element = shift; my $command = shift; my $texi_line = shift; my $line = shift; my $in_preformatted = shift; #print STDERR "'$command' $line"; if (defined($command) and $command =~ /heading/) { if (defined($line)) { $text = $line; # this isn't done in main program in that case... chomp ($text); $text =~ s/^\s*//; } return "<${command}>$text\n"; } my $node_element; if ($element->{'node'}) { $node_element = $element; } elsif (defined($element->{'node_ref'})) { $node_element = $element->{'node_ref'}; } my $result = ''; if (defined($node_element) and $command eq 'node') { #print STDERR "node $command $node_element->{'texi'}\n"; $result .= "\n"; $result .= "$node_element->{'text'}\n"; foreach my $direction('nodenext', 'nodeprev', 'nodeup') { if ($node_element->{$direction}) { $result .= "<${direction}>$node_element->{$direction}->{'text'}\n"; } } } if (!$element->{'node'}) { my $class = $element->{'tag_level'}; # FIXME wrong? $class = 'unnumbered' if ($class eq 'top' or $class eq 'centerchap'); $result .= "<${class}>\n$element->{'text'}\n"; } return $result; } sub xml_footing($) { my $element = shift; my $result = ''; if (!$element->{'node'}) { my $class = $element->{'tag_level'}; # FIXME wrong? $class = 'unnumbered' if ($class eq 'top' or $class eq 'centerchap'); $result .= "\n"; } if ($element->{'node'} or defined($element->{'node_ref'})) { $result .= "\n"; } return $result; } sub xml_end_section($$$) { my $fh = shift; my $end_foot_navigation = shift; my $element = shift; print $fh "". xml_footing($element); } sub xml_print_Top($$$) { my $fh = shift; my $has_top_heading = shift; my $element = shift; #print $fh "".xml_heading($element); main::print_lines($fh, $Texi2HTML::THIS_SECTION); } sub xml_print_Top_footer($$) { my $fh = shift; my $end_page = shift; my $element = shift; print $fh "". xml_footing($element); } # FIXME warning: # # @code{first para # # second para}. # # leads to: # first para second para. sub xml_paragraph($$$$$$$$$$$$) { my $text = shift; my $align = shift; my $indent = shift; my $paragraph_command = shift; my $paragraph_command_formatted = shift; my $paragraph_number = shift; my $format = shift; my $item_nr = shift; my $enumerate_style = shift; my $number = shift; my $command_stack_at_end = shift; my $command_stack_at_begin = shift; foreach my $style(t2h_collect_styles($command_stack_at_begin)) { $text = t2h_begin_style($style, $text); } foreach my $style(t2h_collect_styles($command_stack_at_end)) { $text = t2h_end_style($style, $text); } # no para in multitables, caption and shortcaptions. my $top_stack = ''; $top_stack = $command_stack_at_begin->[-1] if (scalar (@$command_stack_at_begin)); return $text if ($top_stack eq 'multitable' or $top_stack eq 'shortcaption' or $top_stack eq 'caption' or $top_stack eq 'documentdescription'); if ($text =~ /\S/) { return "$text"; } return $text; } sub xml_preformatted($$$$$$$$$$$$) { my $text = shift; my $pre_style = shift; my $class = shift; my $leading_command = shift; my $leading_command_formatted = shift; my $preformatted_number = shift; my $format = shift; my $item_nr = shift; my $enumerate_style = shift; my $number = shift; my $command_stack_at_end = shift; my $command_stack_at_begin = shift; return $text; } my %xml_misc_elements_with_arg_map = ( 'title' => 'booktitle', 'subtitle' => 'booksubtitle' ); my @xml_misc_elements_with_arg = ('author', 'dircategory', 'settitle'); #my @xml_misc_elements_with_arg = ('author', 'shorttitlepage', # 'vskip', 'dircategory', 'settitle'); sub xml_misc_commands($$$$$) { my $macro = shift; my $line = shift; my $pass = shift; my $stack = shift; my $state = shift; #print STDERR "$macro $pass $line"; return ($line, 0, undef, undef) unless ($pass == 2); return ($line, 0, undef, undef) unless defined($misc_command{$macro}); my $value_name = ''; my $value = ''; if ($macro eq 'set' or $macro eq 'clear') { my $value_line = $line; if ($value_line =~ s/^\s+([\w\-]+)//) { $value_name = $1; if ($macro eq 'set') { $value = $value_line; chomp ($value); $value =~ s/^\s*//; } } } my ($result_line, $text, $args) = &$preserve_misc_command ($line, $macro); #print STDERR "$macro $pass $line"; #print STDERR "ARGS @$args\n" if defined ($args); my $result_text = "<${macro}>"; if ($macro eq 'set' or $macro eq 'clear') { $result_text = "<${macro}value name=\"$value_name\">$value\n"; } if ($macro eq 'c' or $macro eq 'comment' and scalar(@$args)) { my $comment_line = $args->[0]; chomp ($comment_line); # makeinfo remove all the leading spaces $comment_line =~ s/^\s//; $result_text = &$comment ($comment_line); } if ($macro eq 'frenchspacing') { my $value = $args->[0]; $value =~ s/\s*//g; $result_text = "<${macro} var=\"$value\">"; } if (grep {$macro eq $_} @xml_misc_elements_with_arg) { my $arg = $args->[0]; $arg =~ s/^\s*//; chomp($arg); $result_text = "<${macro}>".main::substitute_line($arg)."\n"; } if (exists($xml_misc_elements_with_arg_map{$macro})) { my $arg = $args->[0]; $arg =~ s/^\s*//; chomp($arg); $result_text = "<$xml_misc_elements_with_arg_map{$macro}>".main::substitute_line($arg)."\n"; } if ($macro eq 'setfilename') { my $arg = $args->[0]; $arg =~ s/^\s*//; $arg =~ s/\s*$//; $arg = main::substitute_line($arg); $arg =~ s/\.[^\.]*$//; $result_text = "<${macro}>${arg}.xml\n"; } return ($result_line, 1, $result_text, undef); } sub xml_anchor_label($$) { my $id = shift; my $anchor_text = shift; return ''; } sub xml_index_entry_command($$$$$) { my $command = shift; my $index_name = shift; my $label = shift; my $entry_texi = shift; my $entry_formatted = shift; return $label if (defined($label) and $label ne ''); return xml_index_entry_label('','','',$main::index_prefix_to_name{$index_name}, '', '', $entry_formatted); } sub xml_index_entry_label($$$$$) { my $identifier = shift; my $preformatted = shift; my $entry = shift; my $index_name = shift; my $index_command = shift; my $texi_entry = shift; my $formatted_entry = shift; return "${formatted_entry}"; } sub xml_listoffloats($$$) { my $style_texi = shift; my $style = shift; my $float_entries = shift; # FIXME style, style_texi? Protected? return ""; } sub xml_acronym_like($$$$$$) { my $command = shift; my $acronym_texi = shift; my $acronym_text = shift; my $with_explanation = shift; my $explanation_lines = shift; my $explanation_text = shift; my $explanation_simply_formatted = shift; $command = 'abbrev' if ($command eq 'abbr'); my $opening = "<${command}><${command}word>$acronym_text"; if ($with_explanation) { $opening .= "<${command}desc>$explanation_text"; } return $opening . ""; } sub xml_foot_line_and_ref($$$$$$$) { my $number_in_doc = shift; my $number_in_page = shift; my $footnote_id = shift; my $place_id = shift; my $document_file = shift; my $footnote_file = shift; my $lines = shift; my $state = shift; my $result = ''; foreach my $line (@$lines) { $result .= $line; } return ([], $result . ''); } sub xml_image($$$$$$$$$$$$$) { my $file = shift; my $base = shift; my $preformatted = shift; my $file_name = shift; my $alt = shift; my $width = shift; my $height = shift; my $raw_alt = shift; my $extension = shift; my $working_dir = shift; my $file_path = shift; my $in_paragraph = shift; my $file_locations = shift; $alt = '' if (!defined($alt)); # dirty hack to avoid " that can be here because of a @verb $alt =~ s/"/"/g; $width = '' if (!defined($width)); $height = '' if (!defined($height)); my $tag = 'inlineimage'; $tag = 'image' if ($preformatted or !$in_paragraph); return "<$tag width=\"$width\" height=\"$height\" name=\"". &$protect_text($base)."\" extension=\"$extension\">$alt"; } sub xml_sp($$) { my $number = shift; my $preformatted = shift; return "\n"; } sub xml_quotation($$$$) { my $command = shift; my $text = shift; my $argument_text = shift; my $argument_text_texi = shift; return "<$command>\n" . $text . "\n"; } sub xml_format_list_item_texi($$$$) { my $format = shift; my $line = shift; my $prepended = shift; my $command = shift; return (undef, 0); } sub xml_list_item($$$$$$$$$) { my $text = shift; my $format = shift; my $command = shift; my $formatted_command = shift; my $item_nr = shift; my $enumerate_style = shift; my $number = shift; my $prepended = shift; my $prepended_formatted = shift; return '' . $text . "\n"; } my @xml_multitable_stack = (); my @xml_table_stack = (); sub xml_init_variables() { @xml_multitable_stack = (); @xml_table_stack = (); } # row in multitable sub xml_row($$;$$) { my $text = shift; my $macro = shift; my $columnfractions = shift; my $prototype_row = shift; my $prototype_lengths = shift; my $column_number = shift; my $result = ''; if ($macro eq 'headitem') { if ($xml_multitable_stack[-1] != 0) { $result .= ""; $result = "" . $result if ($xml_multitable_stack[-1] == 1); $xml_multitable_stack[-1] = 0; } } elsif ($xml_multitable_stack[-1] != 1) { $result .= ""; $result = "" . $result if ($xml_multitable_stack[-1] == 0); $xml_multitable_stack[-1] = 1; } $result .= "$text"; return $result; } # cell in multitable sub xml_cell($$;$$) { my $text = shift; my $row_macro = shift; my $columnfractions = shift; my $prototype_row = shift; my $prototype_lengths = shift; my $column_number = shift; return "" . $text . ''; } sub xml_table_list($$$$$$$$$) { my $format_command = shift; my $text = shift; my $command = shift; my $formatted_command = shift; # enumerate my $item_nr = shift; my $enumerate_style = shift; # itemize my $prepended = shift; my $prepended_formatted = shift; # multitable my $columnfractions = shift; my $prototype_row = shift; my $prototype_lengths = shift; my $number = shift; $result = "<$format_command>"; if ($format_command eq 'itemize') { my $itemfunction; $prepended_formatted =~ s/^\s*// if (defined($prepended_formatted)); if (defined($formatted_command) and $formatted_command ne '') { $itemfunction = $formatted_command; $itemfunction .= " $prepended_formatted" if (defined($prepended_formatted) and $prepended_formatted ne ''); } elsif (defined($prepended_formatted)) { $itemfunction = $prepended_formatted; } $itemfunction = "•" if (!defined($itemfunction) or $itemfunction eq ''); $result .= "$itemfunction"; } elsif ($format_command eq 'enumerate') { $result = "<$format_command first=\"$enumerate_style\">"; } elsif ($format_command eq 'multitable') { my $fractions; my $multiply = 1; if (defined($columnfractions) and (ref($columnfractions) eq 'ARRAY') and scalar(@$columnfractions)) { $fractions = [ @$columnfractions ]; $multiply = 100; } elsif (defined($prototype_lengths) and (ref($prototype_lengths) eq 'ARRAY') and scalar(@$prototype_lengths)) { $fractions = [ @$prototype_lengths ]; } if (defined ($fractions)) { foreach my $fraction (@$fractions) { $result .= "".($fraction*$multiply)."\n"; } } $text .= "" if ($xml_multitable_stack[-1] == 1); $text .= "" if ($xml_multitable_stack[-1] == 0); pop @xml_multitable_stack; } elsif ($format_command =~ /^(v|f)?table$/) { $result = ''; $text .= '' if ($xml_table_stack[-1] == 1); pop @xml_table_stack; return $result . "$text
    \n"; } return $result . "$text\n"; } sub xml_begin_format_texi($$$) { my $command = shift; my $line = shift; my $state = shift; push (@xml_multitable_stack, -1) if ($command eq 'multitable'); push (@xml_table_stack, 0) if ($command =~ /^(v|f)?table/); return $line; } my %def_format_xml = ( 'deffn' => [ ['category', 'category'], ['function', 'name'] ], 'defvr' => [ ['category', 'category'], ['variable', 'name'] ], 'deftypefn' => [ ['category', 'category'], ['type', 'type'], ['function', 'name'] ], 'deftypeop' => [ ['category', 'category'], ['type', 'type'], ['operation', 'name'] ], 'deftypevr' => [ ['category', 'category'], ['type', 'type'], ['variable', 'name'] ], 'defcv' => [ ['category' , 'category'], ['class', 'class'], ['classvar', 'name'] ], 'deftypecv' => [ ['category', 'category'], ['type', 'type'], ['classvar', 'name'] ], 'defop' => [ ['category', 'category'], ['class', 'class'], ['operation', 'name'] ], 'deftp' => [ ['category', 'category'], ['datatype', 'name'] ] ); sub xml_def_line($$$$$$$$$$$$$$$) { my $category_prepared = shift; my $name = shift; my $type = shift; my $arguments = shift; my $index_label = shift; my $arguments_array = shift; my $arguments_type_array = shift; my $unformatted_arguments_array = shift; my $command = shift; my $class_name = shift; my $category = shift; my $class = shift; my $style = shift; my $original_command = shift; my $result = "$class_name"; my %arguments = ( 'prepared_category' => $category_prepared, 'category' => $category, 'name' => $name, 'type' => $type, 'class' => $class ); foreach my $type (keys(%arguments)) { $arguments{$type} = '' if (!defined($arguments{$type})); } foreach my $mandatory_arg (@{$def_format_xml{$command}}) { my $elem = $mandatory_arg->[0]; $result .= "$arguments{$mandatory_arg->[1]}"; } my $params = ''; my @types = @$arguments_type_array; foreach my $arg (@$arguments_array) { my $type = shift @types; if (grep {$_ eq $type} ('param', 'paramtype', 'delimiter')) { $result .= "$arg"; } } $result .= "\n"; return $result; } # FIXME # @deffn # @c comment # @end deffn # leads to the creation of a with a comment within, # while there should be no definitionitem sub xml_def_item($$) { my $text = shift; my $only_inter_item_commands = shift; if ($text =~ /\S/) { return '' . $text . '' unless $only_inter_item_commands; return $text; } return ''; } sub xml_def($) { my $text = shift; return ''.$text.''; } sub xml_index_summary($$) { my $alpha = shift; my $nonalpha = shift; return ''; } sub xml_printindex($) { my $name = shift; return "$name\n"; } sub xml_any_ref($$) { my $type = shift; my $args = shift; my $result = ''; if ($type eq 'pxref') { $result = &$I('see ',{'duplicate'=>1}); } elsif ($type eq 'xref' or $type eq 'inforef') { $result = &$I('See ',{'duplicate'=>1}); } if ($type eq 'inforef') { $result .= "$args->[0]"; $result .= "$args->[1]" if ($args->[1] ne ''); $result .= "$args->[2]" } else { $result .= "$args->[0]"; $result .= "$args->[1]" if ($args->[1] ne ''); $result .= "$args->[2]" if ($args->[2] ne ''); $result .= "$args->[3]" if ($args->[3] ne ''); $result .= "$args->[4]" if ($args->[4] ne ''); $result .= ''; } return $result; } sub xml_external_ref($$$$$$) { my $type = shift; my $section = shift; my $book = shift; my $file_node = shift; my $href = shift; my $cross_ref = shift; my $args_texi = shift; my $formatted_args = shift; return xml_any_ref ($type, $formatted_args); } sub xml_internal_ref($$$$$) { my $type = shift; my $href = shift; my $short_name = shift; my $name = shift; my $is_section = shift; my $args_texi = shift; my $formatted_args = shift; return xml_any_ref ($type, $formatted_args); } sub xml_table_item($$$$$$$$$) { my $text = shift; my $index_label = shift; my $format = shift; my $command = shift; my $formatted_command = shift; my $style_stack = shift; my $text_formatted = shift; my $text_formatted_leading_spaces = shift; my $text_formatted_trailing_spaces = shift; my $item_cmd = shift; $formatted_command = '' if (!defined($formatted_command)); if (defined($text_formatted)) { $text_item = $text_formatted_leading_spaces . $text_formatted .$text_formatted_trailing_spaces; } else { $text_item = $text; } my $result = ''; if ($item_cmd eq 'item') { $result .= '' if ($xml_table_stack[-1] == 1); $xml_table_stack[-1] = 1; $result .= ''; } $result .= ''; #print STDERR "$text | $format | $command | $formatted_command | $text_formatted | $item_cmd \n"; if ($format =~ /^(v|f)/) { my $index_prefix = $1; $indexterm = $text; $indexterm =~ s/^\s*//; $result .= "$indexterm"; } $result .= $formatted_command . $text_item ."\n"; return $result; } sub xml_table_line($) { my $text = shift; my $only_inter_item_commands = shift; my $before_items = shift; if ($text =~ /\S/) { return "$text" unless $only_inter_item_commands; return $text; } else { return ''; } } sub xml_caption_shortcaption($) { my $float = shift; my $caption_lines; my $shortcaption_lines; if (defined($float->{'caption_texi'})) { @$caption_lines = @{$float->{'caption_texi'}}; } if (defined($float->{'shortcaption_texi'})) { @$shortcaption_lines = @{$float->{'shortcaption_texi'}}; } return ($caption_lines, $shortcaption_lines); } sub xml_caption_shortcaption_command($$$) { my $command = shift; my $text = shift; my $texi_lines = shift; my $float_element = shift; if ($text =~ /\S/) { return "<$command>$text"; } $result .= ""; return ''; } sub xml_float($$$$$) { my $text = shift; my $float = shift; my $caption = shift; my $shortcaption = shift; my $label_texi = $float->{'texi'}; $label_texi = '' if (!defined($label_texi)); my $result = "\n"; my $style = $float->{'style'}; $style = '' if (!defined($style)); $result .= "$style\n"; $result .= "\n"; $result .= $text; return $result."\n"; } sub xml_normal_text($$$$$$) { my $text = shift; my $in_raw_text = shift; my $in_preformatted = shift; my $in_code = shift; my $in_simple = shift; #print STDERR "Bug: in_raw_text in_simple $text\n" if ($in_raw_text and $in_simple); my $style_stack = shift; $text = &$protect_text($text) unless($in_raw_text); if (! $in_code and !$in_preformatted and !$in_raw_text) { $text =~ s/---/\&mdash\;/g; $text =~ s/--/\&ndash\;/g; $text =~ s/``/\&ldquo\;/g; $text =~ s/''/\&rdquo\;/g; } return $text; } sub xml_paragraph_style_command($$) { my $format = shift; my $text = shift; return "<$format>$text" if ($format eq 'center'); return $text; } sub xml_raw($$) { my $style = shift; my $text = shift; if ($style eq 'verbatim') { return '' . &$protect_text($text) . ''; } elsif ($style eq 'xml') { chomp ($text); return $text; } else { main::echo_warn ("Raw style $style not handled"); return &$protect_text($text); } } sub xml_cartouche($$) { my $text = shift; return "$text"; } sub xml_noop { return ''; } 1; texi2html-1.82/examples/enable_encoding.init0000644000175000017500000002015111264347127023035 0ustar flichtenheldflichtenheld# -*-perl-*- #+############################################################################## # # enable_encoding.init: handle --enable-encoding # # Copyright (C) 2008 Patrice Dumas # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 USA # #-############################################################################## # for debugging printouts #use Encode; use strict; use vars '$ENABLE_ENCODING_USE_ENTITY'; if (!$ENABLE_ENCODING_USE_ENTITY) { $USE_ISO = 0; } my $enable_encoding_default_init_out = $init_out; $init_out = \&enable_encoding_init_out; sub enable_encoding_is_entity($) { my $text = shift; return 0 if (!$ENABLE_ENCODING_USE_ENTITY); return 1 if ($text =~ /^&/ and $text =~ /;$/); } push @command_handler_process, \&enable_encoding_initialize_variables; my @enable_encoding_accents_stack; sub enable_encoding_initialize_variables() { @enable_encoding_accents_stack = (); } my %enable_encoding_default_accent; sub enable_encoding_init_out() { &$enable_encoding_default_init_out(); # like utf8.init if ($Texi2HTML::THISDOC{'ENCODING_NAME'} eq 'utf-8') { $normal_text = \&t2h_utf8_normal_text unless ($ENABLE_ENCODING_USE_ENTITY); foreach my $key (keys(%unicode_accents), 'dotless') { $style_map{$key}->{'function'} = \&t2h_utf8_accent; $style_map_texi{$key}->{'function'} = \&t2h_utf8_accent; $style_map_pre{$key}->{'function'} = \&t2h_utf8_accent; } foreach my $key (%things_map) { if (exists($unicode_map{$key}) and ($unicode_map{$key} ne '')) { $things_map{$key} = chr(hex($unicode_map{$key})) unless (enable_encoding_is_entity($things_map{$key})); $texi_map{$key} = chr(hex($unicode_map{$key})) unless (enable_encoding_is_entity($texi_map{$key})); $pre_map{$key} = chr(hex($unicode_map{$key})) unless (enable_encoding_is_entity($pre_map{$key})); } } } elsif (exists($makeinfo_encoding_to_map{$Texi2HTML::THISDOC{'ENCODING_NAME'}})) { my $enc_map = $makeinfo_encoding_to_map{$Texi2HTML::THISDOC{'ENCODING_NAME'}}; foreach my $key (keys(%unicode_accents), 'dotless') { $enable_encoding_default_accent{'normal'}->{$key} = $style_map{$key}->{'function'}; $enable_encoding_default_accent{'texi'}->{$key} = $style_map_texi{$key}->{'function'}; $enable_encoding_default_accent{'pre'}->{$key} = $style_map_pre{$key}->{'function'}; $style_map{$key}->{'function'} = \&enable_encoding_normal_accent; $style_map_texi{$key}->{'function'} = \&enable_encoding_texi_accent; $style_map_pre{$key}->{'function'} = \&enable_encoding_pre_accent; } foreach my $key (%things_map) { if (exists($unicode_map{$key}) and ($unicode_map{$key} ne '') and exists($makeinfo_unicode_to_eight_bit{$enc_map}->{$unicode_map{$key}})) { # we let perl handle the conversion $things_map{$key} = chr(hex($unicode_map{$key})) unless (enable_encoding_is_entity($things_map{$key})); $texi_map{$key} = chr(hex($unicode_map{$key})) unless (enable_encoding_is_entity($texi_map{$key})); $pre_map{$key} = chr(hex($unicode_map{$key})) unless (enable_encoding_is_entity($pre_map{$key})); } } } } sub enable_encoding_normal_accent($$$) { return enable_encoding_accent ('normal', @_); } sub enable_encoding_texi_accent($$$) { return enable_encoding_accent ('texi', @_); } sub enable_encoding_pre_accent($$$) { return enable_encoding_accent ('pre', @_); } sub enable_encoding_accent($$$$) { my $in = shift; my @other_args = @_; my $accent = shift; my $args = shift; my $style_stack = shift; my $text = $args->[0]; if (scalar(@enable_encoding_accents_stack)) { # in that case, we already have a result ready that corresponds with the # formatting of a part of the stack mapped to # enable_encoding_accents_stack, so it is emptied and the innermost # $text is returned as is such that the unmodified already formatted # innermost formatted accented text is returned. #print STDERR " doing nothing, still in stack (@enable_encoding_accents_stack), accent: $accent"; my $stack_accent = shift @enable_encoding_accents_stack; #print STDERR " stack_accent $stack_accent\n"; return $text; } # in that case there is no enable_encoding_accents_stack, so we are # at the closing of the innermost accented command. We will try to format # all the stack in reverse(@$style_stack) that coresponds with # accent commands my @accents_stack = (); my @styles = reverse(@$style_stack); # accents are formatted and the intermediate results are kept, such # that we can return the maximum of multiaccented letters that can be # rendered with a given eight bit formatting. # first put the letter in the stack my @utf8_partial_results = { 'result' => $text, 'accents_stack' => [ @accents_stack ]}; # then the accent that is associated with the function call my $current_accent = t2h_utf8_accent($accent,[$text],$style_stack); @accents_stack = ($accent); push @utf8_partial_results, { 'result' => $current_accent, 'accents_stack' => [ @accents_stack ]}; # and then all the other accents on the stack while (scalar(@styles) and (defined($unicode_accents{$styles[0]}) or $styles[0] eq 'dotless')) { my $next_style = shift @styles; my @new_stack = reverse(@styles); $current_accent = t2h_utf8_accent($next_style,[$current_accent],\@new_stack); push @accents_stack, $next_style; push @utf8_partial_results, { 'result' => $current_accent, 'accents_stack' => [ @accents_stack ]} ; } my $enc_map = $makeinfo_encoding_to_map{$Texi2HTML::THISDOC{'ENCODING_NAME'}}; my $eight_bit; my $result; # At this point we have the utf8 encoded results for the accent # commands stack, with all the intermediate results. # For each one we'll check if it is possible to encode it in the # current eight bit output encoding table foreach my $partial_result (@utf8_partial_results) { my $char = $partial_result->{'result'}; my $new_eight_bit = ''; my $new_codepoint; if (ord($char) <= 128) { $new_eight_bit = uc(sprintf("%02x",ord($char))); $new_codepoint = uc(sprintf("%04x",ord($char))); } elsif (ord($char) <= hex(0xFFFF)) { $new_codepoint = uc(sprintf("%04x",ord($char))); if (exists($makeinfo_unicode_to_eight_bit{$enc_map}->{$new_codepoint})) { $new_eight_bit = $makeinfo_unicode_to_eight_bit{$enc_map}->{$new_codepoint}; } } #print STDERR "" . encode('utf8', "$char") . " (@{$partial_result->{'accents_stack'}}), 8bit: $new_eight_bit\n"; last if ($new_eight_bit eq ''); last if (defined($eight_bit) and (($new_eight_bit eq $eight_bit) and !($partial_result->{'accents_stack'}[0] eq 'dotless' and $char eq 'i'))); $result = $partial_result; $eight_bit = $new_eight_bit; } if (defined($result) and scalar(@{$result->{'accents_stack'}})) { # we got a result, return it and put in enable_encoding_accents_stack # the stack of accent commands that were processed. #print STDERR "Result: ".encode('utf8', $result->{'result'}) ." '$eight_bit' (@{$result->{'accents_stack'}})\n" if defined($result); @enable_encoding_accents_stack = @{$result->{'accents_stack'}}; # remove the first, it is the accent being processed shift @enable_encoding_accents_stack; return $result->{'result'}; } return &{$enable_encoding_default_accent{$in}->{$accent}}(@other_args); } 1; texi2html-1.82/examples/makeinfo.init0000644000175000017500000002722011264347127021536 0ustar flichtenheldflichtenheld# -*-perl-*- #+############################################################################## # # makeinfo.init: output html in the makeinfo style. Tend not to be up-to-date # # Copyright (C) 2003-2008 Patrice Dumas # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 USA # #-############################################################################## $TOP_FILE = 'index.html'; $SHOW_MENU = 1; $USE_NODES = 1; #$ONLY_NODES = 1; $SPLIT = 'node'; $NODE_FILES = 1; $USE_SETFILENAME = 1; $IGNORE_BEFORE_SETFILENAME = 1; # to mimic makeinfo the following have to be set. #$USE_MENU_DIRECTIONS = 0; #$USE_UP_FOR_ADJACENT_NODES = 0; $SECTION_NAVIGATION = 1; $SHORT_REF = 1; $NODE_NAME_IN_MENU = 1; $AVOID_MENU_REDUNDANCY = 0; $SPLIT_INDEX = 0; $MENU_SYMBOL = '*'; $WORDS_IN_PAGE = 200; $SEPARATED_FOOTNOTES = 0; $USE_ACCESSKEY = 1; $USE_REL_REV = 1; $USE_LINKS = 1; $INLINE_CONTENTS = 1; $OVERVIEW_LINK_TO_TOC = 1; @SECTION_BUTTONS = ( \"node: ", \$Texi2HTML::NODE{This}, [ 'NodeNext', \$Texi2HTML::NODE{NodeNext} ] , \",", [ 'NodePrev', \$Texi2HTML::NODE{NodePrev} ], \",", [ 'NodeUp', \$Texi2HTML::NODE{NodeUp} ], 'Following' ); push @command_handler_process, \&makeinfo_like_initialize_variables; my $makekinfo_like_footnote_absolute_number; my %makekinfo_like_paragraph_in_footnote_nr; sub makeinfo_like_initialize_variables() { $makekinfo_like_footnote_absolute_number = 0; %makekinfo_like_paragraph_in_footnote_nr = (); } my $default_init_out = $init_out; $init_out = \&makeinfo_like_init_out; sub makeinfo_like_init_out() { &$default_init_out(); $NAVIGATION_TEXT{'Following'} = ' > '; } # FIXME: images not in paragraphs are in

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. constructs

    < > " & ’ ‘

    “simple-double–three—four—-”
    code: ``simple-double--three---four----''
    asis: “simple-double–three—four—-”
    strong: “simple-double–three—four—-”
    kbd: ``simple-double--three---four----''

    ‘‘simple-double--three—four—-’’

    @"u ü @"{U} Ü @~n ñ @^a â @’e é @=o ō @‘i ì @’{e} é @’{@dotless{i}} í @dotless{i} i @dotless{j} j @‘{@=E} Ē` @l{} ł @,{@’C} Ć, @,c ç @,c@"u çü

    @*
    @ followed by a space   @ followed by a tab   @ followed by a new line  @- @| @: @! ! @? ? @. . @@ @ @} } @{ { @/

    foo vs. bar. colon :And something else. semi colon ;. And ? ?. Now ! !@ but , ,

    @TeX TeX @LaTeX LaTeX @bullet • @copyright © @dots … @enddots ... @equiv ≡ @error error--> @expansion → @minus - @point ∗ @print -| @result ⇒ @today a sunny day @aa å @AA Å @ae æ @oe œ @AE Æ @OE Œ @o ø @O Ø @ss ß @l ł @L Ł @exclamdown ¡ @questiondown ¿ @pounds £ @registeredsymbol ® @ordf ª @ordm º @comma , @quotedblleft “ @quotedblright ” @quoteleft ‘ @quoteright ’ @quotedblbase „ @quotesinglbase ‚ @guillemetleft « @guillemetright » @guillemotleft « @guillemotright » @guilsinglleft ‹ @guilsinglright › @textdegree ° @euro € @arrow → @leq ≤ @geq ≥

    @acronym{--a,an accronym} –a (an accronym) @acronym{--a} –a @abbr{@'E--. @comma{}A., @'Etude Autonome } É–. ,A. (Étude Autonome) @abbr{@'E--. @comma{}A.} É–. ,A. @asis{--a} –a @b{--a} –a @cite{--a} –a @code{--a} --a @command{--a} --a @ctrl{--a} –a @dfn{--a} –a @dmn{--a} –a @email{--a,--b} –b @email{,--b} –b @email{--a} --a @emph{--a} –a @env{--a} --a @file{--a}--a@i{--a} –a @kbd{--a} --a @key{--a} <--a> @math{--a {\frac{1}{2}} @minus{}} –a \frac12 - @option{--a}--a@r{--a} –a @samp{--a}--a@sc{--a} –A @strong{--a} –a @t{--a} –a @sansserif{--a} –a @titlefont{--a}

    –a

    @indicateurl{--a} <--a> @uref{--a,--b} –b @uref{--a} --a @uref{,--b} –b @uref{--a,--b,--c} –c @uref{,--b,--c} –c @uref{--a,,--c} –c @uref{,,--c} –c @url{--a,--b} –b @url{--a,} --a @url{,--b} –b @var{--a} –a @verb{:--a:} --a @verb{:a < & @ % " -- b:} a < & @ % " -- b @w{} @H{a} a'' @H{--a} –a'' @dotaccent{a} ȧ @dotaccent{--a} –a. @ringaccent{a} å @ringaccent{--a} –a* @tieaccent{a} a[ @tieaccent{--a} –a[ @u{a} ă @u{--a} –a( @ubaraccent{a} a_ @ubaraccent{--a} –a_ @udotaccent{a}@udotaccent{--a} .–a @v{a} a< @v{--a} –a< @,{c} ç @,{--c} –c, @ogonek{a} ą @ogonek{--a} –a; @footnote{in footnote} (1) @footnote{in footnote2} (2)

    @image{f--ile} f--ile @image{f--ile,l--i} f--ile @image{f--ile,,l--e} f--ile @image{f--ile,,,alt} alt @image{f--ile,,,,e-d-xt} f--ile @image{f--ile,aze,az,alt,e--xt} alt @image{f-ile,aze,,a--lt} a–lt @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} alt



    @clicksequence{click @click{} A} click → A After clickstyle ⇒ @clicksequence{click @click{} A} click ⇒ A

    A quot—ation

    Note: A Note

    note: A note

    Caution: Caution

    Important: Important

    Tip: a Tip

    Warning: a Warning.

    something é TeX: The something é TeX is here.

    @ at the end of line A @ at the end of the @quotation line.

    something, other thing: something, other thing

    Note, the note: Note, the note

    Empty:

    :


    :

    A small quot—ation

    Note: A small Note

    something, other thing: something, other thing

    • i–temize
    • + i–tem +
    • b–ullet
    • - minu–s
    • e–mph item
    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
    trucbidule
     
    e--xample  some
       text
    
     
    s--mallexample
    
     
    d–isplay
    
     
    s–malldisplay
    
     
    l--isp
    
     
    s--malllisp
    
     
    f–ormat
    
     
    s–mallformat
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    cate--gory: de--ffn_name ar--guments more args
    even more so

    def–fn

    fset: i a g
    cmde: truc
    Command: log trap
    Command: log trap1
    Command: log trap2
    cmde: id ule truc
    cmde2: id ‘i’ ule truc
    id ‘i’ ule:
    :
    aaa:
    :
    :
    : machin
    : bidule machin
    truc: machin
    truc:
    truc: followed by a comment
    truc:
    :
    truc: a b c d e f g h i
    truc: deffnx before end deffn
    empty: deffn
    empty: deffn with deffnx
    empty: deffnx
    fset: i a g
    cmde: truc

    text in def item for second def item

    c--ategory: d--efvr_name

    d–efvr

    c--ategory: t--ype d--eftypefn_name a--rguments...

    d–eftypefn

    c--ategory on c--lass: t--ype d--eftypeop_name a--rguments...

    d–eftypeop

    c--ategory: t--ype d--eftypevr_name

    d–eftypevr

    c--ategory of c--lass: d--efcv_name

    d–efcv

    c--ategory on c--lass: d--efop_name a--rguments...

    d–efop

    c--ategory: d--eftp_name a--ttributes...

    d–eftp

    Function: d--efun_name a--rguments...

    d–efun

    Macro: d--efmac_name a--rguments...

    d–efmac

    Special Form: d--efspec_name a--rguments...

    d–efspec

    Variable: d--efvar_name argvar argvar1

    d–efvar

    User Option: d--efopt_name

    d–efopt

    Function: t--ype d--eftypefun_name a--rguments...

    d–eftypefun

    Variable: t--ype d--eftypevar_name

    d–eftypevar

    Instance Variable of c--lass: d--efivar_name

    d–efivar

    Instance Variable of c--lass: t--ype d--eftypeivar_name

    d–eftypeivar

    Method on c--lass: d--efmethod_name a--rguments...

    d–efmethod

    Method on c--lass: t--ype d--eftypemethod_name a--rguments...

    d–eftypemethod

    @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} See cross r—ef name@: (file n—ame@)c—hapter@ section ‘t—itle@’ in ma—nual@. @ref{chapter, cross ref name, title, file name, manual} cross ref name: (file name)chapter section ‘title’ in manual @pxref{chapter, cross ref name, title, file name, manual} see cross ref name: (file name)chapter section ‘title’ in manual @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter

    @ref{chapter} chapter @xref{chapter} See section chapter. @pxref{chapter} see section chapter @ref{s--ect@comma{}ion} A section

    @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } a , in cross ref: (a comma, in file)s–ect,ion section ‘a comma, in title’ in a , in manual name

    @ref{chapter,cross ref name} cross ref name @ref{chapter,,title} title @ref{chapter,,,file name} (file name)chapter @ref{chapter,,,,manual} section ‘chapter’ in manual @ref{chapter,cross ref name,title,} title @ref{chapter,cross ref name,,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,,,manual} section ‘chapter’ in manual @ref{chapter,cross ref name,title,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,title,,manual} section ‘title’ in manual @ref{chapter,cross ref name,title, file name, manual} cross ref name: (file name)chapter section ‘title’ in manual @ref{chapter,,title,file name} (file name)chapter @ref{chapter,,title,,manual} section ‘title’ in manual @ref{chapter,,title, file name, manual} (file name)chapter section ‘title’ in manual @ref{chapter,,,file name,manual} (file name)chapter section ‘chapter’ in manual

    @ref{(pman)anode,cross ref name} cross ref name: (pman)anode @ref{(pman)anode,,title} (pman)anode @ref{(pman)anode,,,file name} (file name)anode @ref{(pman)anode,,,,manual} (pman)anode section ‘anode’ in manual @ref{(pman)anode,cross ref name,title,} cross ref name: (pman)anode @ref{(pman)anode,cross ref name,,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,,,manual} cross ref name: (pman)anode section ‘anode’ in manual @ref{(pman)anode,cross ref name,title,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,title,,manual} cross ref name: (pman)anode section ‘title’ in manual @ref{(pman)anode,cross ref name,title, file name, manual} cross ref name: (file name)anode section ‘title’ in manual @ref{(pman)anode,,title,file name} (file name)anode @ref{(pman)anode,,title,,manual} (pman)anode section ‘title’ in manual @ref{(pman)anode,,title, file name, manual} (file name)anode section ‘title’ in manual @ref{(pman)anode,,,file name,manual} (file name)anode section ‘anode’ in manual

    @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter @inforef{chapter} @inforef{chapter, cross ref name} @inforef{chapter,,file name} See (file name)chapter @inforef{node, cross ref name, file name} See cross ref name: (file name)node @inforef{node} @inforef{node, cross ref name} @inforef{node,,file name} See (file name)node @inforef{chapter, cross ref name, file name, spurious arg} See cross ref name: (file name, spurious arg)chapter

    @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} See a , in cross ref: (a comma, in file)s–ect,ion

    • a

    l–ine

    a
    b

    l–ine

    - a
    - b

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in verbatim ''
    
    html ''

    majorheading

    chapheading

    heading

    subheading

    subsubheading

    @acronym{--a,an accronym @comma{} @enddots{}} –a (an accronym , ...) @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } É–. ,A. (Étude–, Autonome) @abbr{@'E--. @comma{}A.} É–. ,A.

    @math{--a@minus{} {\frac{1}{2}}} –a- \frac12

    @image{f-ile,,,alt@verb{:jk _" %}} altjk _" %@ @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} jk _" %@ in b " @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} altjk _" %@

    Somehow invalid use of @,:
    @, ,
    @,@"u @,"u

    Invalid use of @’:
    @’ ’
    @’@"u @'"u

    @dotless{truc} truc @dotless{ij} ij @dotless{--a} –a @dotless{a} a

    @TeX, but without brace TeX

    @# @#

    @w{--a} –a

    @image{,1--xt} @image{,,2--xt} @image{,,,3--xt}


    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    fun:
    truc: machin bidule chose and
    truc: machin bidule chose and after
    truc: machin bidule chose and {
    truc: machin bidule chose and { and after
    truc: followed by a comment

    Various deff lines

    truc: after a deff item

    @ref{node} @ref{node}

    @ref{,cross ref name} @ref{,cross ref name} @ref{,,title} @ref{,,title} @ref{,,,file name} (file name) @ref{,,,,manual} manual @ref{node,cross ref name} @ref{node,cross ref name} @ref{node,,title} @ref{node,,title} @ref{node,,,file name} (file name)node @ref{node,,,,manual} section ‘node’ in manual @ref{node,cross ref name,title,} @ref{node,cross ref name,title,} @ref{node,cross ref name,,file name} cross ref name: (file name)node @ref{node,cross ref name,,,manual} section ‘node’ in manual @ref{node,cross ref name,title,file name} cross ref name: (file name)node @ref{node,cross ref name,title,,manual} section ‘title’ in manual @ref{node,cross ref name,title, file name, manual} cross ref name: (file name)node section ‘title’ in manual @ref{node,,title,file name} (file name)node @ref{node,,title,,manual} section ‘title’ in manual @ref{chapter,,title, file name, manual} (file name)chapter section ‘title’ in manual @ref{node,,title, file name, manual} (file name)node section ‘title’ in manual @ref{node,,,file name,manual} (file name)node section ‘node’ in manual @ref{,cross ref name,title,} @ref{,cross ref name,title,} @ref{,cross ref name,,file name} cross ref name: (file name) @ref{,cross ref name,,,manual} manual @ref{,cross ref name,title,file name} cross ref name: (file name) @ref{,cross ref name,title,,manual} section ‘title’ in manual @ref{,cross ref name,title, file name, manual} cross ref name: (file name) section ‘title’ in manual @ref{,,title,file name} (file name) @ref{,,title,,manual} section ‘title’ in manual @ref{,,title, file name, manual} (file name) section ‘title’ in manual @ref{,,,file name,manual} (file name) manual

    @inforef{,cross ref name } @inforef{,,file name} @inforef{,cross ref name, file name} @inforef{}

     
    <
    >
    "
    &
    '
    `
    
    ``simple-double--three---four----''
    
    code: ``simple-double--three---four----'' 
    
    asis: ``simple-double--three---four----'' 
    
    strong: ``simple-double--three---four----'' 
    
    kbd: ``simple-double--three---four----'' 
    
    
    ``simple-double--three---four----''
    
    
    
    @"u ü 
    @"{U} Ü 
    @~n ñ
    @^a â
    @'e é
    @=o ō
    @`i ì
    @'{e} é
    @'{@dotless{i}} í 
    @dotless{i} i
    @dotless{j} j
    @`{@=E} Ē` 
    @l{} ł
    @,{@'C} Ć,
    @,c ç
    @,c@"u çü 
    
    
    @* 
    
    @ followed by a space
     
    @ followed by a tab
     
    @ followed by a new line
     @- 
    @| 
    @: 
    @! !
    @? ?
    @. .
    @@ @
    @} }
    @{ {
    @/ 
    
    foo vs. bar. 
    colon :And something else.
    semi colon ;.
    And ? ?.
    Now ! !@
    but , ,
    
    @TeX TeX
    @LaTeX LaTeX
    @bullet •
    @copyright ©
    @dots …
    @enddots ...
    @equiv ≡
    @error error-->
    @expansion →
    @minus -
    @point ∗
    @print -|
    @result ⇒
    @today a sunny day
    @aa å
    @AA Å
    @ae æ
    @oe œ
    @AE Æ
    @OE Œ
    @o ø
    @O Ø
    @ss ß
    @l ł
    @L Ł
    @exclamdown ¡
    @questiondown ¿
    @pounds £
    @registeredsymbol ®
    @ordf ª
    @ordm º
    @comma ,
    @quotedblleft “
    @quotedblright ”
    @quoteleft ‘
    @quoteright ’
    @quotedblbase „
    @quotesinglbase ‚
    @guillemetleft «
    @guillemetright »
    @guillemotleft «
    @guillemotright »
    @guilsinglleft ‹
    @guilsinglright ›
    @textdegree °
    @euro €
    @arrow →
    @leq ≤
    @geq ≥
    
    @acronym{--a,an accronym} --a (an accronym)
    @acronym{--a} --a
    @abbr{@'E--. @comma{}A., @'Etude Autonome } É--. ,A. (Étude Autonome)
    @abbr{@'E--. @comma{}A.} É--. ,A.
    @asis{--a} --a
    @b{--a} --a
    @cite{--a} --a
    @code{--a} --a
    @command{--a} --a
    @ctrl{--a} --a
    @dfn{--a} --a
    @dmn{--a} --a
    @email{--a,--b} --b
    @email{,--b} --b
    @email{--a} --a
    @emph{--a} --a
    @env{--a} --a
    @file{--a}--a@i{--a} --a
    @kbd{--a} --a
    @key{--a} <--a>
    @math{--a {\frac{1}{2}} @minus{}} --a \frac12 -
    @option{--a}--a@r{--a} --a
    @samp{--a}--a@sc{--a} --A
    @strong{--a} --a
    @t{--a} --a
    @sansserif{--a} --a
    @titlefont{--a} --a
    @indicateurl{--a} <--a>
    @uref{--a,--b} --b
    @uref{--a} --a
    @uref{,--b} --b
    @uref{--a,--b,--c} --c
    @uref{,--b,--c} --c
    @uref{--a,,--c} --c
    @uref{,,--c} --c
    @url{--a,--b} --b
    @url{--a,} --a
    @url{,--b} --b
    @var{--a} --a
    @verb{:--a:} --a
    @verb{:a  < & @ % " --    b:} a  < & @ % " --    b
    @w{} 
    @H{a} a''
    @H{--a} --a''
    @dotaccent{a} ȧ
    @dotaccent{--a} --a.
    @ringaccent{a} å
    @ringaccent{--a} --a*
    @tieaccent{a} a[
    @tieaccent{--a} --a[
    @u{a} ă
    @u{--a} --a(
    @ubaraccent{a} a_
    @ubaraccent{--a} --a_
    @udotaccent{a}@udotaccent{--a} .--a
    @v{a} a<
    @v{--a} --a<
    @,{c} ç
    @,{--c} --c,
    @ogonek{a} ą
    @ogonek{--a} --a;
    @footnote{in footnote} (3)
    @footnote{in footnote2} (4)
    
    @image{f--ile} [ f--ile ]
    @image{f--ile,l--i} [ f--ile ]
    @image{f--ile,,l--e} [ f--ile ]
    @image{f--ile,,,alt} [ alt ]
    @image{f--ile,,,,e-d-xt} [ f--ile ]
    @image{f--ile,aze,az,alt,e--xt} [ alt ]
    @image{f-ile,aze,,a--lt} [ a–lt ]
    @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} [ alt ]
    
    
    
    
    @clicksequence{click @click{} A} click → A
    After clickstyle ⇒
    @clicksequence{click @click{} A} click ⇒ A
    
    
    A quot---ation
    
    Note: A Note
    
    note: A note
    
    Caution: Caution
    
    Important: Important
    
    Tip: a Tip
    
    Warning: a Warning.
    
    something é TeX: The something é TeX is here.
    
    @ at the end of line  A @ at the end of the @quotation line.
    
    something, other thing: something, other thing
    
    Note, the note: Note, the note
    
    Empty: 
    : 
    
    : 
    A small quot---ation
    
    Note: A small Note
    
    something, other thing: something, other thing
    
    •  i--temize
      
    •  +  i--tem +
      
    •  b--ullet
      
    • -
       minu--s
      
    •  e--mph item
      
    •  after emph  e--mph item
      
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    
    lone mu--ltitable item
    truc
    bidule
     
    e--xample  some
       text
    
     
    s--mallexample
    
     
    d--isplay
    
     
    s--malldisplay
    
     
    l--isp
    
     
    s--malllisp
    
     
    f--ormat
    
     
    s--mallformat
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    cate--gory: de--ffn_name ar--guments more args even more so
    def--fn
    
     
    
    fset: i a g
    cmde: truc
    Command: log trap
    Command: log trap1
    Command: log trap2
    cmde: id ule truc
    cmde2: id ‘i’ ule truc
    id ‘i’ ule:
    :
    aaa:
    :
    :
    : machin
    : bidule machin
    truc: machin
    truc:
    truc: followed by a comment
    truc:
    :
    truc: a b c d e f g h i
    truc: deffnx before end deffn
    empty: deffn
    empty: deffn with deffnx
    empty: deffnx
    fset: i a g
    cmde: truc
    text in def item for second def item
    
    c--ategory: d--efvr_name
    d--efvr
    
    c--ategory: t--ype d--eftypefn_name a--rguments...
    d--eftypefn
    
    c--ategory on c--lass: t--ype d--eftypeop_name a--rguments...
    d--eftypeop
    
    c--ategory: t--ype d--eftypevr_name
    d--eftypevr
    
    c--ategory of c--lass: d--efcv_name
    d--efcv
    
    c--ategory on c--lass: d--efop_name a--rguments...
    d--efop
    
    c--ategory: d--eftp_name a--ttributes...
    d--eftp
    
    Function: d--efun_name a--rguments...
    d--efun
    
    Macro: d--efmac_name a--rguments...
    d--efmac
    
    Special Form: d--efspec_name a--rguments...
    d--efspec
    
    Variable: d--efvar_name argvar argvar1
    d--efvar
    
    User Option: d--efopt_name
    d--efopt
    
    Function: t--ype d--eftypefun_name a--rguments...
    d--eftypefun
    
    Variable: t--ype d--eftypevar_name
    d--eftypevar
    
    Instance Variable of c--lass: d--efivar_name
    d--efivar
    
    Instance Variable of c--lass: t--ype d--eftypeivar_name
    d--eftypeivar
    
    Method on c--lass: d--efmethod_name a--rguments...
    d--efmethod
    
    Method on c--lass: t--ype d--eftypemethod_name a--rguments...
    d--eftypemethod
    
    @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} See cross r---ef name@: (file n---ame@)c---hapter@ section `t---itle@' in ma---nual@.
    @ref{chapter, cross ref name, title, file name, manual} cross ref name: (file name)chapter section `title' in manual
    @pxref{chapter, cross ref name, title, file name, manual} see cross ref name: (file name)chapter section `title' in manual
    @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter
    
    @ref{chapter} chapter
    @xref{chapter} See section chapter.
    @pxref{chapter} see section chapter
    @ref{s--ect@comma{}ion} A section
    
    @ref{s--ect@comma{}ion, a @comma{} in cross
    ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name }
    a , in cross ref: (a comma, in file)s--ect,ion section `a comma, in title' in a , in manual name
    
    @ref{chapter,cross ref name} cross ref name
    @ref{chapter,,title} title
    @ref{chapter,,,file name} (file name)chapter
    @ref{chapter,,,,manual} section `chapter' in manual
    @ref{chapter,cross ref name,title,} title
    @ref{chapter,cross ref name,,file name} cross ref name: (file name)chapter
    @ref{chapter,cross ref name,,,manual} section `chapter' in manual
    @ref{chapter,cross ref name,title,file name} cross ref name: (file name)chapter
    @ref{chapter,cross ref name,title,,manual} section `title' in manual
    @ref{chapter,cross ref name,title, file name, manual} cross ref name: (file name)chapter section `title' in manual
    @ref{chapter,,title,file name} (file name)chapter
    @ref{chapter,,title,,manual} section `title' in manual
    @ref{chapter,,title, file name, manual} (file name)chapter section `title' in manual
    @ref{chapter,,,file name,manual} (file name)chapter section `chapter' in manual
    
    
    @ref{(pman)anode,cross ref name} cross ref name: (pman)anode
    @ref{(pman)anode,,title} (pman)anode
    @ref{(pman)anode,,,file name} (file name)anode
    @ref{(pman)anode,,,,manual} (pman)anode section `anode' in manual
    @ref{(pman)anode,cross ref name,title,} cross ref name: (pman)anode
    @ref{(pman)anode,cross ref name,,file name} cross ref name: (file name)anode
    @ref{(pman)anode,cross ref name,,,manual} cross ref name: (pman)anode section `anode' in manual
    @ref{(pman)anode,cross ref name,title,file name} cross ref name: (file name)anode
    @ref{(pman)anode,cross ref name,title,,manual} cross ref name: (pman)anode section `title' in manual
    @ref{(pman)anode,cross ref name,title, file name, manual} cross ref name: (file name)anode section `title' in manual
    @ref{(pman)anode,,title,file name} (file name)anode
    @ref{(pman)anode,,title,,manual} (pman)anode section `title' in manual
    @ref{(pman)anode,,title, file name, manual} (file name)anode section `title' in manual
    @ref{(pman)anode,,,file name,manual} (file name)anode section `anode' in manual
    
    
    @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter
    @inforef{chapter} 
    @inforef{chapter, cross ref name} 
    @inforef{chapter,,file name} See (file name)chapter
    @inforef{node, cross ref name, file name} See cross ref name: (file name)node
    @inforef{node} 
    @inforef{node, cross ref name} 
    @inforef{node,,file name} See (file name)node
    @inforef{chapter, cross ref name, file name, spurious arg} See cross ref name: (file name, spurious arg)chapter
    
    @inforef{s--ect@comma{}ion, a @comma{} in cross
    ref, a comma@comma{} in file}
    See a , in cross ref: (a comma, in file)s--ect,ion
    
    
    
    • a
    l--ine
    
    a
    b
    l--ine
    
    - a
    - b
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    in verbatim ''
    
    
    html ''
    
    
    
    majorheading
    
    
    chapheading
    
    
    heading
    
    
    subheading
    
    
    subsubheading
    
    
    @acronym{--a,an accronym @comma{} @enddots{}} --a (an accronym , ...)
    @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } É--. ,A. (Étude--, Autonome)
    @abbr{@'E--. @comma{}A.} É--. ,A.
    
    @math{--a@minus{} {\frac{1}{2}}} --a- \frac12
    
    @image{f-ile,,,alt@verb{:jk _" %}} [ altjk _" %@ ]
    @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} [ jk _" %@ in b " ]
    @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} [ altjk _" %@ ]
    
    
    
    
    Somehow invalid use of @,:
    
    @, ,
    
    
    @,@"u @,"u
    
    Invalid use of @':
    
    @' '
    
    
    @'@"u @'"u
    
    @dotless{truc} truc
    @dotless{ij} ij
    @dotless{--a} --a
    @dotless{a} a
    
    @TeX, but without brace TeX
    
    @# @#
    
    @w{--a} --a
    
    @image{,1--xt} 
    @image{,,2--xt} 
    @image{,,,3--xt} 
    
    
    
    
    • after emph  e--mph item
      
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    fun:
    truc: machin bidule chose and
    truc: machin bidule chose and after
    truc: machin bidule chose and {
    truc: machin bidule chose and { and after
    truc: followed by a comment
    Various deff lines
    
    truc: after a deff item
    @ref{node} @ref{node}
    
    @ref{,cross ref name} @ref{,cross ref name}
    @ref{,,title} @ref{,,title}
    @ref{,,,file name} (file name)
    @ref{,,,,manual} manual
    @ref{node,cross ref name} @ref{node,cross ref name}
    @ref{node,,title} @ref{node,,title}
    @ref{node,,,file name} (file name)node
    @ref{node,,,,manual} section `node' in manual
    @ref{node,cross ref name,title,} @ref{node,cross ref name,title,}
    @ref{node,cross ref name,,file name} cross ref name: (file name)node
    @ref{node,cross ref name,,,manual} section `node' in manual
    @ref{node,cross ref name,title,file name} cross ref name: (file name)node
    @ref{node,cross ref name,title,,manual} section `title' in manual
    @ref{node,cross ref name,title, file name, manual} cross ref name: (file name)node section `title' in manual
    @ref{node,,title,file name} (file name)node
    @ref{node,,title,,manual} section `title' in manual
    @ref{chapter,,title, file name, manual} (file name)chapter section `title' in manual
    @ref{node,,title, file name, manual} (file name)node section `title' in manual
    @ref{node,,,file name,manual} (file name)node section `node' in manual
    @ref{,cross ref name,title,} @ref{,cross ref name,title,}
    @ref{,cross ref name,,file name} cross ref name: (file name)
    @ref{,cross ref name,,,manual} manual
    @ref{,cross ref name,title,file name} cross ref name: (file name)
    @ref{,cross ref name,title,,manual} section `title' in manual
    @ref{,cross ref name,title, file name, manual} cross ref name: (file name) section `title' in manual
    @ref{,,title,file name} (file name)
    @ref{,,title,,manual} section `title' in manual
    @ref{,,title, file name, manual} (file name) section `title' in manual
    @ref{,,,file name,manual} (file name) manual
    
    @inforef{,cross ref name } 
    @inforef{,,file name} 
    @inforef{,cross ref name, file name} 
    @inforef{} 
    
    
    

    insertcopying

    < > " & ’ ‘

    “simple-double–three—four—-”
    code: ``simple-double--three---four----''
    asis: “simple-double–three—four—-”
    strong: “simple-double–three—four—-”
    kbd: ``simple-double--three---four----''

    ‘‘simple-double--three—four—-’’

    @"u ü @"{U} Ü @~n ñ @^a â @’e é @=o ō @‘i ì @’{e} é @’{@dotless{i}} í @dotless{i} i @dotless{j} j @‘{@=E} Ē` @l{} ł @,{@’C} Ć, @,c ç @,c@"u çü

    @*
    @ followed by a space   @ followed by a tab   @ followed by a new line  @- @| @: @! ! @? ? @. . @@ @ @} } @{ { @/

    foo vs. bar. colon :And something else. semi colon ;. And ? ?. Now ! !@ but , ,

    @TeX TeX @LaTeX LaTeX @bullet • @copyright © @dots … @enddots ... @equiv ≡ @error error--> @expansion → @minus - @point ∗ @print -| @result ⇒ @today a sunny day @aa å @AA Å @ae æ @oe œ @AE Æ @OE Œ @o ø @O Ø @ss ß @l ł @L Ł @exclamdown ¡ @questiondown ¿ @pounds £ @registeredsymbol ® @ordf ª @ordm º @comma , @quotedblleft “ @quotedblright ” @quoteleft ‘ @quoteright ’ @quotedblbase „ @quotesinglbase ‚ @guillemetleft « @guillemetright » @guillemotleft « @guillemotright » @guilsinglleft ‹ @guilsinglright › @textdegree ° @euro € @arrow → @leq ≤ @geq ≥

    @acronym{--a,an accronym} –a (an accronym) @acronym{--a} –a @abbr{@'E--. @comma{}A., @'Etude Autonome } É–. ,A. (Étude Autonome) @abbr{@'E--. @comma{}A.} É–. ,A. @asis{--a} –a @b{--a} –a @cite{--a} –a @code{--a} --a @command{--a} --a @ctrl{--a} –a @dfn{--a} –a @dmn{--a} –a @email{--a,--b} –b @email{,--b} –b @email{--a} --a @emph{--a} –a @env{--a} --a @file{--a}--a@i{--a} –a @kbd{--a} --a @key{--a} <--a> @math{--a {\frac{1}{2}} @minus{}} –a \frac12 - @option{--a}--a@r{--a} –a @samp{--a}--a@sc{--a} –A @strong{--a} –a @t{--a} –a @sansserif{--a} –a @titlefont{--a}

    –a

    @indicateurl{--a} <--a> @uref{--a,--b} –b @uref{--a} --a @uref{,--b} –b @uref{--a,--b,--c} –c @uref{,--b,--c} –c @uref{--a,,--c} –c @uref{,,--c} –c @url{--a,--b} –b @url{--a,} --a @url{,--b} –b @var{--a} –a @verb{:--a:} --a @verb{:a < & @ % " -- b:} a < & @ % " -- b @w{} @H{a} a'' @H{--a} –a'' @dotaccent{a} ȧ @dotaccent{--a} –a. @ringaccent{a} å @ringaccent{--a} –a* @tieaccent{a} a[ @tieaccent{--a} –a[ @u{a} ă @u{--a} –a( @ubaraccent{a} a_ @ubaraccent{--a} –a_ @udotaccent{a}@udotaccent{--a} .–a @v{a} a< @v{--a} –a< @,{c} ç @,{--c} –c, @ogonek{a} ą @ogonek{--a} –a; @footnote{in footnote} (1) @footnote{in footnote2} (2)

    @image{f--ile} f--ile @image{f--ile,l--i} f--ile @image{f--ile,,l--e} f--ile @image{f--ile,,,alt} alt @image{f--ile,,,,e-d-xt} f--ile @image{f--ile,aze,az,alt,e--xt} alt @image{f-ile,aze,,a--lt} a–lt @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} alt



    @clicksequence{click @click{} A} click → A After clickstyle ⇒ @clicksequence{click @click{} A} click ⇒ A

    A quot—ation

    Note: A Note

    note: A note

    Caution: Caution

    Important: Important

    Tip: a Tip

    Warning: a Warning.

    something é TeX: The something é TeX is here.

    @ at the end of line A @ at the end of the @quotation line.

    something, other thing: something, other thing

    Note, the note: Note, the note

    Empty:

    :


    :

    A small quot—ation

    Note: A small Note

    something, other thing: something, other thing

    • i–temize
    • + i–tem +
    • b–ullet
    • - minu–s
    • e–mph item
    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
    trucbidule
     
    e--xample  some
       text
    
     
    s--mallexample
    
     
    d–isplay
    
     
    s–malldisplay
    
     
    l--isp
    
     
    s--malllisp
    
     
    f–ormat
    
     
    s–mallformat
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    cate--gory: de--ffn_name ar--guments more args
    even more so

    def–fn

    fset: i a g
    cmde: truc
    Command: log trap
    Command: log trap1
    Command: log trap2
    cmde: id ule truc
    cmde2: id ‘i’ ule truc
    id ‘i’ ule:
    :
    aaa:
    :
    :
    : machin
    : bidule machin
    truc: machin
    truc:
    truc: followed by a comment
    truc:
    :
    truc: a b c d e f g h i
    truc: deffnx before end deffn
    empty: deffn
    empty: deffn with deffnx
    empty: deffnx
    fset: i a g
    cmde: truc

    text in def item for second def item

    c--ategory: d--efvr_name

    d–efvr

    c--ategory: t--ype d--eftypefn_name a--rguments...

    d–eftypefn

    c--ategory on c--lass: t--ype d--eftypeop_name a--rguments...

    d–eftypeop

    c--ategory: t--ype d--eftypevr_name

    d–eftypevr

    c--ategory of c--lass: d--efcv_name

    d–efcv

    c--ategory on c--lass: d--efop_name a--rguments...

    d–efop

    c--ategory: d--eftp_name a--ttributes...

    d–eftp

    Function: d--efun_name a--rguments...

    d–efun

    Macro: d--efmac_name a--rguments...

    d–efmac

    Special Form: d--efspec_name a--rguments...

    d–efspec

    Variable: d--efvar_name argvar argvar1

    d–efvar

    User Option: d--efopt_name

    d–efopt

    Function: t--ype d--eftypefun_name a--rguments...

    d–eftypefun

    Variable: t--ype d--eftypevar_name

    d–eftypevar

    Instance Variable of c--lass: d--efivar_name

    d–efivar

    Instance Variable of c--lass: t--ype d--eftypeivar_name

    d–eftypeivar

    Method on c--lass: d--efmethod_name a--rguments...

    d–efmethod

    Method on c--lass: t--ype d--eftypemethod_name a--rguments...

    d–eftypemethod

    @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} See cross r—ef name@: (file n—ame@)c—hapter@ section ‘t—itle@’ in ma—nual@. @ref{chapter, cross ref name, title, file name, manual} cross ref name: (file name)chapter section ‘title’ in manual @pxref{chapter, cross ref name, title, file name, manual} see cross ref name: (file name)chapter section ‘title’ in manual @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter

    @ref{chapter} chapter @xref{chapter} See section chapter. @pxref{chapter} see section chapter @ref{s--ect@comma{}ion} A section

    @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } a , in cross ref: (a comma, in file)s–ect,ion section ‘a comma, in title’ in a , in manual name

    @ref{chapter,cross ref name} cross ref name @ref{chapter,,title} title @ref{chapter,,,file name} (file name)chapter @ref{chapter,,,,manual} section ‘chapter’ in manual @ref{chapter,cross ref name,title,} title @ref{chapter,cross ref name,,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,,,manual} section ‘chapter’ in manual @ref{chapter,cross ref name,title,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,title,,manual} section ‘title’ in manual @ref{chapter,cross ref name,title, file name, manual} cross ref name: (file name)chapter section ‘title’ in manual @ref{chapter,,title,file name} (file name)chapter @ref{chapter,,title,,manual} section ‘title’ in manual @ref{chapter,,title, file name, manual} (file name)chapter section ‘title’ in manual @ref{chapter,,,file name,manual} (file name)chapter section ‘chapter’ in manual

    @ref{(pman)anode,cross ref name} cross ref name: (pman)anode @ref{(pman)anode,,title} (pman)anode @ref{(pman)anode,,,file name} (file name)anode @ref{(pman)anode,,,,manual} (pman)anode section ‘anode’ in manual @ref{(pman)anode,cross ref name,title,} cross ref name: (pman)anode @ref{(pman)anode,cross ref name,,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,,,manual} cross ref name: (pman)anode section ‘anode’ in manual @ref{(pman)anode,cross ref name,title,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,title,,manual} cross ref name: (pman)anode section ‘title’ in manual @ref{(pman)anode,cross ref name,title, file name, manual} cross ref name: (file name)anode section ‘title’ in manual @ref{(pman)anode,,title,file name} (file name)anode @ref{(pman)anode,,title,,manual} (pman)anode section ‘title’ in manual @ref{(pman)anode,,title, file name, manual} (file name)anode section ‘title’ in manual @ref{(pman)anode,,,file name,manual} (file name)anode section ‘anode’ in manual

    @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter @inforef{chapter} @inforef{chapter, cross ref name} @inforef{chapter,,file name} See (file name)chapter @inforef{node, cross ref name, file name} See cross ref name: (file name)node @inforef{node} @inforef{node, cross ref name} @inforef{node,,file name} See (file name)node @inforef{chapter, cross ref name, file name, spurious arg} See cross ref name: (file name, spurious arg)chapter

    @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} See a , in cross ref: (a comma, in file)s–ect,ion

    • a

    l–ine

    a
    b

    l–ine

    - a
    - b

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in verbatim ''
    
    html ''

    majorheading

    chapheading

    heading

    subheading

    subsubheading

    @acronym{--a,an accronym @comma{} @enddots{}} –a (an accronym , ...) @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } É–. ,A. (Étude–, Autonome) @abbr{@'E--. @comma{}A.} É–. ,A.

    @math{--a@minus{} {\frac{1}{2}}} –a- \frac12

    @image{f-ile,,,alt@verb{:jk _" %}} altjk _" %@ @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} jk _" %@ in b " @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} altjk _" %@

    Somehow invalid use of @,:
    @, ,
    @,@"u @,"u

    Invalid use of @’:
    @’ ’
    @’@"u @'"u

    @dotless{truc} truc @dotless{ij} ij @dotless{--a} –a @dotless{a} a

    @TeX, but without brace TeX

    @# @#

    @w{--a} –a

    @image{,1--xt} @image{,,2--xt} @image{,,,3--xt}


    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    fun:
    truc: machin bidule chose and
    truc: machin bidule chose and after
    truc: machin bidule chose and {
    truc: machin bidule chose and { and after
    truc: followed by a comment

    Various deff lines

    truc: after a deff item

    @ref{node} @ref{node}

    @ref{,cross ref name} @ref{,cross ref name} @ref{,,title} @ref{,,title} @ref{,,,file name} (file name) @ref{,,,,manual} manual @ref{node,cross ref name} @ref{node,cross ref name} @ref{node,,title} @ref{node,,title} @ref{node,,,file name} (file name)node @ref{node,,,,manual} section ‘node’ in manual @ref{node,cross ref name,title,} @ref{node,cross ref name,title,} @ref{node,cross ref name,,file name} cross ref name: (file name)node @ref{node,cross ref name,,,manual} section ‘node’ in manual @ref{node,cross ref name,title,file name} cross ref name: (file name)node @ref{node,cross ref name,title,,manual} section ‘title’ in manual @ref{node,cross ref name,title, file name, manual} cross ref name: (file name)node section ‘title’ in manual @ref{node,,title,file name} (file name)node @ref{node,,title,,manual} section ‘title’ in manual @ref{chapter,,title, file name, manual} (file name)chapter section ‘title’ in manual @ref{node,,title, file name, manual} (file name)node section ‘title’ in manual @ref{node,,,file name,manual} (file name)node section ‘node’ in manual @ref{,cross ref name,title,} @ref{,cross ref name,title,} @ref{,cross ref name,,file name} cross ref name: (file name) @ref{,cross ref name,,,manual} manual @ref{,cross ref name,title,file name} cross ref name: (file name) @ref{,cross ref name,title,,manual} section ‘title’ in manual @ref{,cross ref name,title, file name, manual} cross ref name: (file name) section ‘title’ in manual @ref{,,title,file name} (file name) @ref{,,title,,manual} section ‘title’ in manual @ref{,,title, file name, manual} (file name) section ‘title’ in manual @ref{,,,file name,manual} (file name) manual

    @inforef{,cross ref name } @inforef{,,file name} @inforef{,cross ref name, file name} @inforef{}

    cp

    Jump to:   "   -   .   ?  
    A   I   T  
    Index Entry Section

    "
    Top section
    Top section
    subsubheading
    subsubheading

    -
    –optionTop section
    –optionTop section
    –optionsubsubheading
    –optionsubsubheading

    .
    .subsubheading

    ?
    ?subsubheading

    A
    asubsubheading

    I
    index entry between item and itemxTop section
    index entry between item and itemxTop section
    index entry between item and itemxsubsubheading
    index entry between item and itemxsubsubheading
    index entry within deffnTop section
    index entry within deffnTop section
    index entry within deffnsubsubheading
    index entry within deffnsubsubheading
    index entry within itemizeTop section
    index entry within itemizeTop section
    index entry within itemizesubsubheading
    index entry within itemizesubsubheading
    index entry within multitableTop section
    index entry within multitableTop section
    index entry within multitablesubsubheading
    index entry within multitablesubsubheading

    T
    t–rucsubsubheading
    T–rucsubsubheading

    Jump to:   "   -   .   ?  
    A   I   T  

    fn

    Jump to:   "   -   .   ?  
    A   B   D   F   I   L   M   T  
    Index Entry Section

    "
    ``Top section
    ``Top section
    ``subsubheading
    ``subsubheading

    -
    --foptionTop section
    --foptionTop section
    --foptionsubsubheading
    --foptionsubsubheading

    .
    .subsubheading

    ?
    ?subsubheading

    A
    aTop section
    aTop section
    aTop section
    aTop section
    asubsubheading
    asubsubheading
    asubsubheading
    asubsubheading
    asubsubheading
    afterTop section
    afterTop section
    aftersubsubheading
    aftersubsubheading

    B
    bTop section
    bTop section
    bsubsubheading
    bsubsubheading
    bidule machinTop section
    bidule machinTop section
    bidule machinsubsubheading
    bidule machinsubsubheading

    D
    d--effn_nameTop section
    d--effn_nameTop section
    d--effn_namesubsubheading
    d--effn_namesubsubheading
    d--efmac_nameTop section
    d--efmac_nameTop section
    d--efmac_namesubsubheading
    d--efmac_namesubsubheading
    d--efmethod_name on c--lassTop section
    d--efmethod_name on c--lassTop section
    d--efmethod_name on c--lasssubsubheading
    d--efmethod_name on c--lasssubsubheading
    d--efop_name on c--lassTop section
    d--efop_name on c--lassTop section
    d--efop_name on c--lasssubsubheading
    d--efop_name on c--lasssubsubheading
    d--efspec_nameTop section
    d--efspec_nameTop section
    d--efspec_namesubsubheading
    d--efspec_namesubsubheading
    d--eftypefn_nameTop section
    d--eftypefn_nameTop section
    d--eftypefn_namesubsubheading
    d--eftypefn_namesubsubheading
    d--eftypefun_nameTop section
    d--eftypefun_nameTop section
    d--eftypefun_namesubsubheading
    d--eftypefun_namesubsubheading
    d--eftypemethod_name on c--lassTop section
    d--eftypemethod_name on c--lassTop section
    d--eftypemethod_name on c--lasssubsubheading
    d--eftypemethod_name on c--lasssubsubheading
    d--eftypeop_name on c--lassTop section
    d--eftypeop_name on c--lassTop section
    d--eftypeop_name on c--lasssubsubheading
    d--eftypeop_name on c--lasssubsubheading
    d--efun_nameTop section
    d--efun_nameTop section
    d--efun_namesubsubheading
    d--efun_namesubsubheading
    de--ffn_nameTop section
    de--ffn_nameTop section
    de--ffn_namesubsubheading
    de--ffn_namesubsubheading
    deffnTop section
    deffnTop section
    deffnTop section
    deffnTop section
    deffnsubsubheading
    deffnsubsubheading
    deffnsubsubheading
    deffnsubsubheading
    deffnxTop section
    deffnxTop section
    deffnxTop section
    deffnxTop section
    deffnxsubsubheading
    deffnxsubsubheading
    deffnxsubsubheading
    deffnxsubsubheading

    F
    followedTop section
    followedTop section
    followedTop section
    followedTop section
    followedsubsubheading
    followedsubsubheading
    followedsubsubheading
    followedsubsubheading

    I
    iTop section
    iTop section
    iTop section
    iTop section
    isubsubheading
    isubsubheading
    isubsubheading
    isubsubheading
    id ‘i’ uleTop section
    id ‘i’ uleTop section
    id ‘i’ ulesubsubheading
    id ‘i’ ulesubsubheading
    id uleTop section
    id uleTop section
    id ulesubsubheading
    id ulesubsubheading

    L
    log trapTop section
    log trapTop section
    log trapsubsubheading
    log trapsubsubheading
    log trap1Top section
    log trap1Top section
    log trap1subsubheading
    log trap1subsubheading
    log trap2Top section
    log trap2Top section
    log trap2subsubheading
    log trap2subsubheading

    M
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading

    T
    t--rucsubsubheading
    T--rucsubsubheading
    trucTop section
    trucTop section
    trucTop section
    trucTop section
    trucsubsubheading
    trucsubsubheading
    trucsubsubheading
    trucsubsubheading

    Jump to:   "   -   .   ?  
    A   B   D   F   I   L   M   T  

    vr

    Jump to:   A   B   D  
    Index Entry Section

    A
    aTop section
    aTop section
    asubsubheading
    asubsubheading

    B
    bTop section
    bTop section
    bsubsubheading
    bsubsubheading

    D
    d--efcv_nameTop section
    d--efcv_nameTop section
    d--efcv_namesubsubheading
    d--efcv_namesubsubheading
    d--efivar_nameTop section
    d--efivar_nameTop section
    d--efivar_namesubsubheading
    d--efivar_namesubsubheading
    d--efopt_nameTop section
    d--efopt_nameTop section
    d--efopt_namesubsubheading
    d--efopt_namesubsubheading
    d--eftypeivar_name of c--lassTop section
    d--eftypeivar_name of c--lassTop section
    d--eftypeivar_name of c--lasssubsubheading
    d--eftypeivar_name of c--lasssubsubheading
    d--eftypevar_nameTop section
    d--eftypevar_nameTop section
    d--eftypevar_namesubsubheading
    d--eftypevar_namesubsubheading
    d--eftypevr_nameTop section
    d--eftypevr_nameTop section
    d--eftypevr_namesubsubheading
    d--eftypevr_namesubsubheading
    d--efvar_nameTop section
    d--efvar_nameTop section
    d--efvar_namesubsubheading
    d--efvar_namesubsubheading
    d--efvr_nameTop section
    d--efvr_nameTop section
    d--efvr_namesubsubheading
    d--efvr_namesubsubheading

    Jump to:   A   B   D  

    ky

    pg

    tp

    Jump to:   D  
    Index Entry Section

    D
    d--eftp_nameTop section
    d--eftp_nameTop section
    d--eftp_namesubsubheading
    d--eftp_namesubsubheading

    Jump to:   D  

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. chapter

    (5)

     

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.1 A section


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.1.1 subsection


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.1.1.1 subsubsection


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. chapter 2

    Jump to:   "   -   .   ?  
    A   I   T  
    Index Entry Section

    "
    Top section
    Top section
    subsubheading
    subsubheading

    -
    –optionTop section
    –optionTop section
    –optionsubsubheading
    –optionsubsubheading

    .
    .subsubheading

    ?
    ?subsubheading

    A
    asubsubheading

    I
    index entry between item and itemxTop section
    index entry between item and itemxTop section
    index entry between item and itemxsubsubheading
    index entry between item and itemxsubsubheading
    index entry within deffnTop section
    index entry within deffnTop section
    index entry within deffnsubsubheading
    index entry within deffnsubsubheading
    index entry within itemizeTop section
    index entry within itemizeTop section
    index entry within itemizesubsubheading
    index entry within itemizesubsubheading
    index entry within multitableTop section
    index entry within multitableTop section
    index entry within multitablesubsubheading
    index entry within multitablesubsubheading

    T
    t–rucsubsubheading
    T–rucsubsubheading

    Jump to:   "   -   .   ?  
    A   I   T  
    Jump to:   "   -   .   ?  
    A   B   D   F   I   L   M   T  
    Index Entry Section

    "
    ``Top section
    ``Top section
    ``subsubheading
    ``subsubheading

    -
    --foptionTop section
    --foptionTop section
    --foptionsubsubheading
    --foptionsubsubheading

    .
    .subsubheading

    ?
    ?subsubheading

    A
    aTop section
    aTop section
    aTop section
    aTop section
    asubsubheading
    asubsubheading
    asubsubheading
    asubsubheading
    asubsubheading
    afterTop section
    afterTop section
    aftersubsubheading
    aftersubsubheading

    B
    bTop section
    bTop section
    bsubsubheading
    bsubsubheading
    bidule machinTop section
    bidule machinTop section
    bidule machinsubsubheading
    bidule machinsubsubheading

    D
    d--effn_nameTop section
    d--effn_nameTop section
    d--effn_namesubsubheading
    d--effn_namesubsubheading
    d--efmac_nameTop section
    d--efmac_nameTop section
    d--efmac_namesubsubheading
    d--efmac_namesubsubheading
    d--efmethod_name on c--lassTop section
    d--efmethod_name on c--lassTop section
    d--efmethod_name on c--lasssubsubheading
    d--efmethod_name on c--lasssubsubheading
    d--efop_name on c--lassTop section
    d--efop_name on c--lassTop section
    d--efop_name on c--lasssubsubheading
    d--efop_name on c--lasssubsubheading
    d--efspec_nameTop section
    d--efspec_nameTop section
    d--efspec_namesubsubheading
    d--efspec_namesubsubheading
    d--eftypefn_nameTop section
    d--eftypefn_nameTop section
    d--eftypefn_namesubsubheading
    d--eftypefn_namesubsubheading
    d--eftypefun_nameTop section
    d--eftypefun_nameTop section
    d--eftypefun_namesubsubheading
    d--eftypefun_namesubsubheading
    d--eftypemethod_name on c--lassTop section
    d--eftypemethod_name on c--lassTop section
    d--eftypemethod_name on c--lasssubsubheading
    d--eftypemethod_name on c--lasssubsubheading
    d--eftypeop_name on c--lassTop section
    d--eftypeop_name on c--lassTop section
    d--eftypeop_name on c--lasssubsubheading
    d--eftypeop_name on c--lasssubsubheading
    d--efun_nameTop section
    d--efun_nameTop section
    d--efun_namesubsubheading
    d--efun_namesubsubheading
    de--ffn_nameTop section
    de--ffn_nameTop section
    de--ffn_namesubsubheading
    de--ffn_namesubsubheading
    deffnTop section
    deffnTop section
    deffnTop section
    deffnTop section
    deffnsubsubheading
    deffnsubsubheading
    deffnsubsubheading
    deffnsubsubheading
    deffnxTop section
    deffnxTop section
    deffnxTop section
    deffnxTop section
    deffnxsubsubheading
    deffnxsubsubheading
    deffnxsubsubheading
    deffnxsubsubheading

    F
    followedTop section
    followedTop section
    followedTop section
    followedTop section
    followedsubsubheading
    followedsubsubheading
    followedsubsubheading
    followedsubsubheading

    I
    iTop section
    iTop section
    iTop section
    iTop section
    isubsubheading
    isubsubheading
    isubsubheading
    isubsubheading
    id ‘i’ uleTop section
    id ‘i’ uleTop section
    id ‘i’ ulesubsubheading
    id ‘i’ ulesubsubheading
    id uleTop section
    id uleTop section
    id ulesubsubheading
    id ulesubsubheading

    L
    log trapTop section
    log trapTop section
    log trapsubsubheading
    log trapsubsubheading
    log trap1Top section
    log trap1Top section
    log trap1subsubheading
    log trap1subsubheading
    log trap2Top section
    log trap2Top section
    log trap2subsubheading
    log trap2subsubheading

    M
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading

    T
    t--rucsubsubheading
    T--rucsubsubheading
    trucTop section
    trucTop section
    trucTop section
    trucTop section
    trucsubsubheading
    trucsubsubheading
    trucsubsubheading
    trucsubsubheading

    Jump to:   "   -   .   ?  
    A   B   D   F   I   L   M   T  

    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)

    in footnote

    (2)

    in footnote2

    (1)

    in footnote

    (2)

    in footnote2

    (1)

    in footnote

    (2)

    in footnote2

    (3)

    in footnote

    (4)

    in footnote2

    (5)

    in footnote


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    Short Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/formatting_regions/formatting_regions.20000644000175000017500000003732311264347122030212 0ustar flichtenheldflichtenheld** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 39 in @mymacro) ** Empty index entry for @deffn (l. 39 in @mymacro) ** Empty index entry for @deffn (l. 39 in @mymacro) ** Empty index entry for @deffn (l. 39 in @mymacro) ** Empty index entry for @deffn (l. 39 in @mymacro) ** Empty index entry for @deffn (l. 39 in @mymacro) ** Empty index entry for @deffn (l. 39 in @mymacro) ** Empty index entry for @deffn (l. 39 in @mymacro) ** Empty index entry for @deffn (l. 39 in @mymacro) ** Empty index entry for @deffn (l. 46 in @mymacro) ** Empty index entry for @deffn (l. 46 in @mymacro) ** Empty index entry for @deffn (l. 46 in @mymacro) ** Empty index entry for @deffn (l. 46 in @mymacro) ** Empty index entry for @deffn (l. 46 in @mymacro) ** Empty index entry for @deffn (l. 46 in @mymacro) ** Empty index entry for @deffn (l. 46 in @mymacro) ** Empty index entry for @deffn (l. 46 in @mymacro) ** Empty index entry for @deffn (l. 46 in @mymacro) ** Empty index entry for @deffn (l. 49 in @mymacro) ** Empty index entry for @deffn (l. 49 in @mymacro) ** Empty index entry for @deffn (l. 49 in @mymacro) ** Empty index entry for @deffn (l. 49 in @mymacro) ** Empty index entry for @deffn (l. 49 in @mymacro) ** Empty index entry for @deffn (l. 49 in @mymacro) ** Empty index entry for @deffn (l. 49 in @mymacro) ** Empty index entry for @deffn (l. 49 in @mymacro) ** Empty index entry for @deffn (l. 49 in @mymacro) ** `constructs' doesn't appear in menus ** `Top' is up for `constructs', but has no menu entry for this node ** No node following `constructs' in menu, but `chapter' follows in sectionning ** `chapter' doesn't appear in menus ** `Top' is up for `chapter', but has no menu entry for this node ** No node following `chapter' in menu, but `chapter2' follows in sectionning ** `chapter2' doesn't appear in menus ** `Top' is up for `chapter2', but has no menu entry for this node ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) *** Can't find simplest.texi, skipping ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** Can't find simplest.texi, skipping ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after *** Can't find simplest.texi, skipping ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) *** Can't find simplest.texi, skipping ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) *** Can't find simplest.texi, skipping ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** Can't find simplest.texi, skipping ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after *** Can't find simplest.texi, skipping ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after *** Can't find simplest.texi, skipping ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after *** Can't find simplest.texi, skipping ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) *** Can't find simplest.texi, skipping ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) *** Can't find simplest.texi, skipping ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** Can't find simplest.texi, skipping ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after *** Can't find simplest.texi, skipping ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after *** Can't find simplest.texi, skipping ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after *** Can't find simplest.texi, skipping ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) *** Can't find simplest.texi, skipping (l. 46 in @mymacro) ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} (l. 46 in @mymacro) ** Unknown command `@#' (left as is) (l. 46 in @mymacro) *** no file argument for @image (l. 46 in @mymacro) *** no file argument for @image (l. 46 in @mymacro) *** no file argument for @image (l. 46 in @mymacro) *** '}' without opening '{' before: (l. 46 in @mymacro) *** '}' without opening '{' before: (l. 46 in @mymacro) *** '{' without macro. Before: (l. 46 in @mymacro) *** '{' without macro. Before: and after (l. 46 in @mymacro) *** Undefined node `node' in @ref (l. 46 in @mymacro) *** Undefined node `' in @ref (l. 46 in @mymacro) *** Undefined node `' in @ref (l. 46 in @mymacro) *** Undefined node `node' in @ref (l. 46 in @mymacro) *** Undefined node `node' in @ref (l. 46 in @mymacro) *** Undefined node `node' in @ref (l. 46 in @mymacro) *** Undefined node `' in @ref (l. 46 in @mymacro) *** First argument to @inforef may not be empty (l. 46 in @mymacro) *** First argument to @inforef may not be empty (l. 46 in @mymacro) *** First argument to @inforef may not be empty (l. 46 in @mymacro) *** First argument to @inforef may not be empty (l. 46 in @mymacro) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) *** Can't find simplest.texi, skipping (l. 49 in @mymacro) ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} (l. 49 in @mymacro) ** Unknown command `@#' (left as is) (l. 49 in @mymacro) *** no file argument for @image (l. 49 in @mymacro) *** no file argument for @image (l. 49 in @mymacro) *** no file argument for @image (l. 49 in @mymacro) *** '}' without opening '{' before: (l. 49 in @mymacro) *** '}' without opening '{' before: (l. 49 in @mymacro) *** '{' without macro. Before: (l. 49 in @mymacro) *** '{' without macro. Before: and after (l. 49 in @mymacro) *** Undefined node `node' in @ref (l. 49 in @mymacro) *** Undefined node `' in @ref (l. 49 in @mymacro) *** Undefined node `' in @ref (l. 49 in @mymacro) *** Undefined node `node' in @ref (l. 49 in @mymacro) *** Undefined node `node' in @ref (l. 49 in @mymacro) *** Undefined node `node' in @ref (l. 49 in @mymacro) *** Undefined node `' in @ref (l. 49 in @mymacro) *** First argument to @inforef may not be empty (l. 49 in @mymacro) *** First argument to @inforef may not be empty (l. 49 in @mymacro) *** First argument to @inforef may not be empty (l. 49 in @mymacro) *** First argument to @inforef may not be empty (l. 49 in @mymacro) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) *** Can't find simplest.texi, skipping ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** Can't find simplest.texi, skipping ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after *** Can't find simplest.texi, skipping ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after texi2html-1.82/test/layout/res/navigation_noheaders_init/0000755000175000017500000000000011264347122025531 5ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation_noheaders_init/navigation.html0000644000175000017500000000705011264347122030560 0ustar flichtenheldflichtenheld Untitled Document

    File used for navigation testing


    1. First chapter


    1.1 Section in chapter

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b bb b b b b b b bb b bb.


    1.1.1 Sub section in section


    Table of Contents


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_noheaders_init/navigation.20000644000175000017500000000000011264347122027741 0ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation_chapter_vertical/0000755000175000017500000000000011264347122026055 5ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation_chapter_vertical/navigation.html0000644000175000017500000000643311264347122031110 0ustar flichtenheldflichtenheld Untitled Document: File used for navigation testing
    [Top]
    [Contents]
    [Index]
    [ ? ]

    File used for navigation testing


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_chapter_vertical/navigation_1.html0000644000175000017500000001733711264347122031335 0ustar flichtenheldflichtenheld Untitled Document: 1. First chapter
    [ < ]
    [ > ]
     
    [ << ]
    [ Up ]
    [ >> ]
     
     
     
     
    [Top]
    [Contents]
    [Index]
    [ ? ]

    1. First chapter


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 Section in chapter

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b bb b b b b b b bb b bb.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.1 Sub section in section


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_chapter_vertical/navigation.20000644000175000017500000000000011264347122030265 0ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation_chapter_vertical/navigation_abt.html0000644000175000017500000001256511264347122031741 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top]
    [Contents]
    [Index]
    [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_chapter_vertical/navigation_toc.html0000644000175000017500000000657011264347122031757 0ustar flichtenheldflichtenheld Untitled Document: Table of Contents
    [Top]
    [Contents]
    [Index]
    [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_section_vertical/0000755000175000017500000000000011264347122026073 5ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation_section_vertical/navigation.html0000644000175000017500000000643311264347122031126 0ustar flichtenheldflichtenheld Untitled Document: File used for navigation testing
    [Top]
    [Contents]
    [Index]
    [ ? ]

    File used for navigation testing


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_section_vertical/navigation_1.html0000644000175000017500000001105011264347122031335 0ustar flichtenheldflichtenheld Untitled Document: 1. First chapter
    [ < ]
    [ > ]
     
    [ << ]
    [ Up ]
    [ >> ]
     
     
     
     
    [Top]
    [Contents]
    [Index]
    [ ? ]

    1. First chapter


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_section_vertical/navigation.20000644000175000017500000000000011264347122030303 0ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation_section_vertical/navigation_2.html0000644000175000017500000001401111264347122031336 0ustar flichtenheldflichtenheld Untitled Document: 1.1 Section in chapter
    [ < ]
    [ > ]
     
    [ << ]
    [ Up ]
    [ >> ]
     
     
     
     
    [Top]
    [Contents]
    [Index]
    [ ? ]

    1.1 Section in chapter

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b bb b b b b b b bb b bb.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.1 Sub section in section


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_section_vertical/navigation_abt.html0000644000175000017500000001256511264347122031757 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top]
    [Contents]
    [Index]
    [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_section_vertical/navigation_toc.html0000644000175000017500000000657011264347122031775 0ustar flichtenheldflichtenheld Untitled Document: Table of Contents
    [Top]
    [Contents]
    [Index]
    [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_chapter/0000755000175000017500000000000011264347122024164 5ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation_chapter/navigation.html0000644000175000017500000000601411264347122027212 0ustar flichtenheldflichtenheld Untitled Document: File used for navigation testing
    [Top] [Contents] [Index] [ ? ]

    File used for navigation testing


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_chapter/navigation_1.html0000644000175000017500000001613611264347122027440 0ustar flichtenheldflichtenheld Untitled Document: 1. First chapter
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. First chapter


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 Section in chapter

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b bb b b b b b b bb b bb.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.1 Sub section in section


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_chapter/navigation.20000644000175000017500000000000011264347122026374 0ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation_chapter/navigation_abt.html0000644000175000017500000001214611264347122030043 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_chapter/navigation_toc.html0000644000175000017500000000615111264347122030061 0ustar flichtenheldflichtenheld Untitled Document: Table of Contents
    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/no_monolithic/0000755000175000017500000000000011264347122023160 5ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/no_monolithic/no_monolithic_ovr.html0000644000175000017500000000566511264347122027611 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Short Table of Contents


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/no_monolithic/no_monolithic.html0000644000175000017500000001074211264347122026713 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Not monolithic

    Not monolitic manual(1).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter

    Chapter.

    Jump to:   T  
    Index Entry Section

    T
    topNot monolithic

    Jump to:   T  

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/no_monolithic/no_monolithic_abt.html0000644000175000017500000001224111264347122027535 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/no_monolithic/no_monolithic_fot.html0000644000175000017500000000555411264347122027570 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)

    my footnote


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/no_monolithic/no_monolithic.20000644000175000017500000000000011264347122026072 0ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/no_monolithic/no_monolithic_toc.html0000644000175000017500000000560011264347122027555 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/formatting_chm/0000755000175000017500000000000011264347122023320 5ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/formatting_chm/formatting_abt.html0000644000175000017500000003122511264347122027211 0ustar flichtenheldflichtenheld title –a: About This Document

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    texi2html-1.82/test/layout/res/formatting_chm/formatting_4.html0000644000175000017500000002522411264347122026610 0ustar flichtenheldflichtenheld title –a: 1.1.1.1 subsubsection “simple-double–three—four—-”

    1.1.1.1 subsubsection “simple-double–three—four—-”

    texi2html-1.82/test/layout/res/formatting_chm/formatting_3.html0000644000175000017500000002446211264347122026612 0ustar flichtenheldflichtenheld title –a: 1.1.1 subsection

    1.1.1 subsection

    texi2html-1.82/test/layout/res/formatting_chm/formatting_ovr.html0000644000175000017500000002473311264347122027257 0ustar flichtenheldflichtenheld title –a: Short Table of Contents

    Short Table of Contents

    texi2html-1.82/test/layout/res/formatting_chm/formatting_2.html0000644000175000017500000002442111264347122026604 0ustar flichtenheldflichtenheld title –a: 1.1 A section

    1.1 A section

    texi2html-1.82/test/layout/res/formatting_chm/formatting.20000644000175000017500000002243411264347122025562 0ustar flichtenheldflichtenheld** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} (l. 38 in @mymacro) ** Unknown command `@#' (left as is) (l. 38 in @mymacro) *** no file argument for @image (l. 38 in @mymacro) *** no file argument for @image (l. 38 in @mymacro) *** no file argument for @image (l. 38 in @mymacro) *** '}' without opening '{' before: (l. 38 in @mymacro) *** '}' without opening '{' before: (l. 38 in @mymacro) *** '{' without macro. Before: (l. 38 in @mymacro) *** '{' without macro. Before: and after (l. 38 in @mymacro) *** Undefined node `node' in @ref (l. 38 in @mymacro) *** Undefined node `' in @ref (l. 38 in @mymacro) *** Undefined node `' in @ref (l. 38 in @mymacro) *** Undefined node `node' in @ref (l. 38 in @mymacro) *** Undefined node `node' in @ref (l. 38 in @mymacro) *** Undefined node `node' in @ref (l. 38 in @mymacro) *** Undefined node `' in @ref (l. 38 in @mymacro) *** First argument to @inforef may not be empty (l. 38 in @mymacro) *** First argument to @inforef may not be empty (l. 38 in @mymacro) *** First argument to @inforef may not be empty (l. 38 in @mymacro) *** First argument to @inforef may not be empty (l. 38 in @mymacro) ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} (l. 42 in @mymacro) ** Unknown command `@#' (left as is) (l. 42 in @mymacro) *** no file argument for @image (l. 42 in @mymacro) *** no file argument for @image (l. 42 in @mymacro) *** no file argument for @image (l. 42 in @mymacro) *** '}' without opening '{' before: (l. 42 in @mymacro) *** '}' without opening '{' before: (l. 42 in @mymacro) *** '{' without macro. Before: (l. 42 in @mymacro) *** '{' without macro. Before: and after (l. 42 in @mymacro) *** Undefined node `node' in @ref (l. 42 in @mymacro) *** Undefined node `' in @ref (l. 42 in @mymacro) *** Undefined node `' in @ref (l. 42 in @mymacro) *** Undefined node `node' in @ref (l. 42 in @mymacro) *** Undefined node `node' in @ref (l. 42 in @mymacro) *** Undefined node `node' in @ref (l. 42 in @mymacro) *** Undefined node `' in @ref (l. 42 in @mymacro) *** First argument to @inforef may not be empty (l. 42 in @mymacro) *** First argument to @inforef may not be empty (l. 42 in @mymacro) *** First argument to @inforef may not be empty (l. 42 in @mymacro) *** First argument to @inforef may not be empty (l. 42 in @mymacro) texi2html-1.82/test/layout/res/formatting_chm/formatting.hhk0000644000175000017500000010464411264347122026177 0ustar flichtenheldflichtenheld
  • texi2html-1.82/test/layout/res/formatting_chm/formatting.html0000644000175000017500000041265011264347122026370 0ustar flichtenheldflichtenheld title –a: Top section

    Insertcopying in normal text

    In copying

    < > " & ’ ‘

    “simple-double–three—four—-”
    code: ``simple-double--three---four----''
    asis: “simple-double–three—four—-”
    strong: “simple-double–three—four—-”
    kbd: ``simple-double--three---four----''

    ‘‘simple-double--three—four—-’’

    @"u ü @"{U} Ü @~n ñ @^a â @’e é @=o ō @‘i ì @’{e} é @’{@dotless{i}} í @dotless{i} i @dotless{j} j @‘{@=E} Ē` @l{} ł @,{@’C} Ć, @,c ç @,c@"u çü

    @*
    @ followed by a space   @ followed by a tab   @ followed by a new line  @- @| @: @! ! @? ? @. . @@ @ @} } @{ { @/

    foo vs. bar. colon :And something else. semi colon ;. And ? ?. Now ! !@ but , ,

    @TeX TeX @LaTeX LaTeX @bullet • @copyright © @dots … @enddots ... @equiv ≡ @error error--> @expansion → @minus - @point ∗ @print -| @result ⇒ @today a sunny day @aa å @AA Å @ae æ @oe œ @AE Æ @OE Œ @o ø @O Ø @ss ß @l ł @L Ł @exclamdown ¡ @questiondown ¿ @pounds £ @registeredsymbol ® @ordf ª @ordm º @comma , @quotedblleft “ @quotedblright ” @quoteleft ‘ @quoteright ’ @quotedblbase „ @quotesinglbase ‚ @guillemetleft « @guillemetright » @guillemotleft « @guillemotright » @guilsinglleft ‹ @guilsinglright › @textdegree ° @euro € @arrow → @leq ≤ @geq ≥

    @acronym{--a,an accronym} –a (an accronym) @acronym{--a} –a @abbr{@'E--. @comma{}A., @'Etude Autonome } É–. ,A. (Étude Autonome) @abbr{@'E--. @comma{}A.} É–. ,A. @asis{--a} –a @b{--a} –a @cite{--a} –a @code{--a} --a @command{--a} --a @ctrl{--a} –a @dfn{--a} –a @dmn{--a} –a @email{--a,--b} –b @email{,--b} –b @email{--a} --a @emph{--a} –a @env{--a} --a @file{--a}--a@i{--a} –a @kbd{--a} --a @key{--a} <--a> @math{--a {\frac{1}{2}} @minus{}} –a \frac12 - @option{--a}--a@r{--a} –a @samp{--a}--a@sc{--a} –A @strong{--a} –a @t{--a} –a @sansserif{--a} –a @titlefont{--a}

    –a

    @indicateurl{--a} <--a> @uref{--a,--b} –b @uref{--a} --a @uref{,--b} –b @uref{--a,--b,--c} –c @uref{,--b,--c} –c @uref{--a,,--c} –c @uref{,,--c} –c @url{--a,--b} –b @url{--a,} --a @url{,--b} –b @var{--a} –a @verb{:--a:} --a @verb{:a < & @ % " -- b:} a < & @ % " -- b @w{} @H{a} a'' @H{--a} –a'' @dotaccent{a} ȧ @dotaccent{--a} –a. @ringaccent{a} å @ringaccent{--a} –a* @tieaccent{a} a[ @tieaccent{--a} –a[ @u{a} ă @u{--a} –a( @ubaraccent{a} a_ @ubaraccent{--a} –a_ @udotaccent{a}@udotaccent{--a} .–a @v{a} a< @v{--a} –a< @,{c} ç @,{--c} –c, @ogonek{a} ą @ogonek{--a} –a; @footnote{in footnote} (1) @footnote{in footnote2} (2)

    @image{f--ile} f--ile @image{f--ile,l--i} f--ile @image{f--ile,,l--e} f--ile @image{f--ile,,,alt} alt @image{f--ile,,,,e-d-xt} f--ile @image{f--ile,aze,az,alt,e--xt} alt @image{f-ile,aze,,a--lt} a–lt @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} alt



    @clicksequence{click @click{} A} click → A After clickstyle ⇒ @clicksequence{click @click{} A} click ⇒ A

    A quot—ation

    Note: A Note

    note: A note

    Caution: Caution

    Important: Important

    Tip: a Tip

    Warning: a Warning.

    something é TeX: The something é TeX is here.

    @ at the end of line A @ at the end of the @quotation line.

    something, other thing: something, other thing

    Note, the note: Note, the note

    Empty:

    :


    :

    A small quot—ation

    Note: A small Note

    something, other thing: something, other thing

    • i–temize
    • + i–tem +
    • b–ullet
    • - minu–s
    • e–mph item
    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
    trucbidule
     
    e--xample  some
       text
    
     
    s--mallexample
    
     
    d–isplay
    
     
    s–malldisplay
    
     
    l--isp
    
     
    s--malllisp
    
     
    f–ormat
    
     
    s–mallformat
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    cate--gory: de--ffn_name ar--guments more args
    even more so

    def–fn

    fset: i a g
    cmde: truc
    Command: log trap
    Command: log trap1
    Command: log trap2
    cmde: id ule truc
    cmde2: id ‘i’ ule truc
    id ‘i’ ule:
    :
    aaa:
    :
    :
    : machin
    : bidule machin
    truc: machin
    truc:
    truc: followed by a comment
    truc:
    :
    truc: a b c d e f g h i
    truc: deffnx before end deffn
    empty: deffn
    empty: deffn with deffnx
    empty: deffnx
    fset: i a g
    cmde: truc

    text in def item for second def item

    c--ategory: d--efvr_name

    d–efvr

    c--ategory: t--ype d--eftypefn_name a--rguments...

    d–eftypefn

    c--ategory on c--lass: t--ype d--eftypeop_name a--rguments...

    d–eftypeop

    c--ategory: t--ype d--eftypevr_name

    d–eftypevr

    c--ategory of c--lass: d--efcv_name

    d–efcv

    c--ategory on c--lass: d--efop_name a--rguments...

    d–efop

    c--ategory: d--eftp_name a--ttributes...

    d–eftp

    Function: d--efun_name a--rguments...

    d–efun

    Macro: d--efmac_name a--rguments...

    d–efmac

    Special Form: d--efspec_name a--rguments...

    d–efspec

    Variable: d--efvar_name argvar argvar1

    d–efvar

    User Option: d--efopt_name

    d–efopt

    Function: t--ype d--eftypefun_name a--rguments...

    d–eftypefun

    Variable: t--ype d--eftypevar_name

    d–eftypevar

    Instance Variable of c--lass: d--efivar_name

    d–efivar

    Instance Variable of c--lass: t--ype d--eftypeivar_name

    d–eftypeivar

    Method on c--lass: d--efmethod_name a--rguments...

    d–efmethod

    Method on c--lass: t--ype d--eftypemethod_name a--rguments...

    d–eftypemethod

    @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} See cross r—ef name@: (file n—ame@)c—hapter@ section ‘t—itle@’ in ma—nual@. @ref{chapter, cross ref name, title, file name, manual} cross ref name: (file name)chapter section ‘title’ in manual @pxref{chapter, cross ref name, title, file name, manual} see cross ref name: (file name)chapter section ‘title’ in manual @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter

    @ref{chapter} chapter @xref{chapter} See section chapter. @pxref{chapter} see section chapter @ref{s--ect@comma{}ion} A section

    @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } a , in cross ref: (a comma, in file)s–ect,ion section ‘a comma, in title’ in a , in manual name

    @ref{chapter,cross ref name} cross ref name @ref{chapter,,title} title @ref{chapter,,,file name} (file name)chapter @ref{chapter,,,,manual} section ‘chapter’ in manual @ref{chapter,cross ref name,title,} title @ref{chapter,cross ref name,,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,,,manual} section ‘chapter’ in manual @ref{chapter,cross ref name,title,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,title,,manual} section ‘title’ in manual @ref{chapter,cross ref name,title, file name, manual} cross ref name: (file name)chapter section ‘title’ in manual @ref{chapter,,title,file name} (file name)chapter @ref{chapter,,title,,manual} section ‘title’ in manual @ref{chapter,,title, file name, manual} (file name)chapter section ‘title’ in manual @ref{chapter,,,file name,manual} (file name)chapter section ‘chapter’ in manual

    @ref{(pman)anode,cross ref name} cross ref name: (pman)anode @ref{(pman)anode,,title} (pman)anode @ref{(pman)anode,,,file name} (file name)anode @ref{(pman)anode,,,,manual} (pman)anode section ‘anode’ in manual @ref{(pman)anode,cross ref name,title,} cross ref name: (pman)anode @ref{(pman)anode,cross ref name,,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,,,manual} cross ref name: (pman)anode section ‘anode’ in manual @ref{(pman)anode,cross ref name,title,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,title,,manual} cross ref name: (pman)anode section ‘title’ in manual @ref{(pman)anode,cross ref name,title, file name, manual} cross ref name: (file name)anode section ‘title’ in manual @ref{(pman)anode,,title,file name} (file name)anode @ref{(pman)anode,,title,,manual} (pman)anode section ‘title’ in manual @ref{(pman)anode,,title, file name, manual} (file name)anode section ‘title’ in manual @ref{(pman)anode,,,file name,manual} (file name)anode section ‘anode’ in manual

    @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter @inforef{chapter} @inforef{chapter, cross ref name} @inforef{chapter,,file name} See (file name)chapter @inforef{node, cross ref name, file name} See cross ref name: (file name)node @inforef{node} @inforef{node, cross ref name} @inforef{node,,file name} See (file name)node @inforef{chapter, cross ref name, file name, spurious arg} See cross ref name: (file name, spurious arg)chapter

    @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} See a , in cross ref: (a comma, in file)s–ect,ion

    • a

    l–ine

    a
    b

    l–ine

    - a
    - b

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    \input texinfo @c -*-texinfo-*-
    
    @setfilename simplest.info
    
    @node Top
    
    This is a very simple texi manual @  <>.
    
    @bye
    
    in verbatim ''
    
    html ''

    majorheading

    chapheading

    heading

    subheading

    subsubheading

    @acronym{--a,an accronym @comma{} @enddots{}} –a (an accronym , ...) @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } É–. ,A. (Étude–, Autonome) @abbr{@'E--. @comma{}A.} É–. ,A.

    @math{--a@minus{} {\frac{1}{2}}} –a- \frac12

    @image{f-ile,,,alt@verb{:jk _" %}} altjk _" %@ @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} jk _" %@ in b " @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} altjk _" %@

    Somehow invalid use of @,:
    @, ,
    @,@"u @,"u

    Invalid use of @’:
    @’ ’
    @’@"u @'"u

    @dotless{truc} truc @dotless{ij} ij @dotless{--a} –a @dotless{a} a

    @TeX, but without brace TeX

    @# @#

    @w{--a} –a

    @image{,1--xt} @image{,,2--xt} @image{,,,3--xt}


    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    fun:
    truc: machin bidule chose and
    truc: machin bidule chose and after
    truc: machin bidule chose and {
    truc: machin bidule chose and { and after
    truc: followed by a comment

    Various deff lines

    truc: after a deff item

    @ref{node} @ref{node}

    @ref{,cross ref name} @ref{,cross ref name} @ref{,,title} @ref{,,title} @ref{,,,file name} (file name) @ref{,,,,manual} manual @ref{node,cross ref name} @ref{node,cross ref name} @ref{node,,title} @ref{node,,title} @ref{node,,,file name} (file name)node @ref{node,,,,manual} section ‘node’ in manual @ref{node,cross ref name,title,} @ref{node,cross ref name,title,} @ref{node,cross ref name,,file name} cross ref name: (file name)node @ref{node,cross ref name,,,manual} section ‘node’ in manual @ref{node,cross ref name,title,file name} cross ref name: (file name)node @ref{node,cross ref name,title,,manual} section ‘title’ in manual @ref{node,cross ref name,title, file name, manual} cross ref name: (file name)node section ‘title’ in manual @ref{node,,title,file name} (file name)node @ref{node,,title,,manual} section ‘title’ in manual @ref{chapter,,title, file name, manual} (file name)chapter section ‘title’ in manual @ref{node,,title, file name, manual} (file name)node section ‘title’ in manual @ref{node,,,file name,manual} (file name)node section ‘node’ in manual @ref{,cross ref name,title,} @ref{,cross ref name,title,} @ref{,cross ref name,,file name} cross ref name: (file name) @ref{,cross ref name,,,manual} manual @ref{,cross ref name,title,file name} cross ref name: (file name) @ref{,cross ref name,title,,manual} section ‘title’ in manual @ref{,cross ref name,title, file name, manual} cross ref name: (file name) section ‘title’ in manual @ref{,,title,file name} (file name) @ref{,,title,,manual} section ‘title’ in manual @ref{,,title, file name, manual} (file name) section ‘title’ in manual @ref{,,,file name,manual} (file name) manual

    @inforef{,cross ref name } @inforef{,,file name} @inforef{,cross ref name, file name} @inforef{}

    Normal text

    < > " & ’ ‘

    “simple-double–three—four—-”
    code: ``simple-double--three---four----''
    asis: “simple-double–three—four—-”
    strong: “simple-double–three—four—-”
    kbd: ``simple-double--three---four----''

    ‘‘simple-double--three—four—-’’

    @"u ü @"{U} Ü @~n ñ @^a â @’e é @=o ō @‘i ì @’{e} é @’{@dotless{i}} í @dotless{i} i @dotless{j} j @‘{@=E} Ē` @l{} ł @,{@’C} Ć, @,c ç @,c@"u çü

    @*
    @ followed by a space   @ followed by a tab   @ followed by a new line  @- @| @: @! ! @? ? @. . @@ @ @} } @{ { @/

    foo vs. bar. colon :And something else. semi colon ;. And ? ?. Now ! !@ but , ,

    @TeX TeX @LaTeX LaTeX @bullet • @copyright © @dots … @enddots ... @equiv ≡ @error error--> @expansion → @minus - @point ∗ @print -| @result ⇒ @today a sunny day @aa å @AA Å @ae æ @oe œ @AE Æ @OE Œ @o ø @O Ø @ss ß @l ł @L Ł @exclamdown ¡ @questiondown ¿ @pounds £ @registeredsymbol ® @ordf ª @ordm º @comma , @quotedblleft “ @quotedblright ” @quoteleft ‘ @quoteright ’ @quotedblbase „ @quotesinglbase ‚ @guillemetleft « @guillemetright » @guillemotleft « @guillemotright » @guilsinglleft ‹ @guilsinglright › @textdegree ° @euro € @arrow → @leq ≤ @geq ≥

    @acronym{--a,an accronym} –a (an accronym) @acronym{--a} –a @abbr{@'E--. @comma{}A., @'Etude Autonome } É–. ,A. (Étude Autonome) @abbr{@'E--. @comma{}A.} É–. ,A. @asis{--a} –a @b{--a} –a @cite{--a} –a @code{--a} --a @command{--a} --a @ctrl{--a} –a @dfn{--a} –a @dmn{--a} –a @email{--a,--b} –b @email{,--b} –b @email{--a} --a @emph{--a} –a @env{--a} --a @file{--a}--a@i{--a} –a @kbd{--a} --a @key{--a} <--a> @math{--a {\frac{1}{2}} @minus{}} –a \frac12 - @option{--a}--a@r{--a} –a @samp{--a}--a@sc{--a} –A @strong{--a} –a @t{--a} –a @sansserif{--a} –a @titlefont{--a}

    –a

    @indicateurl{--a} <--a> @uref{--a,--b} –b @uref{--a} --a @uref{,--b} –b @uref{--a,--b,--c} –c @uref{,--b,--c} –c @uref{--a,,--c} –c @uref{,,--c} –c @url{--a,--b} –b @url{--a,} --a @url{,--b} –b @var{--a} –a @verb{:--a:} --a @verb{:a < & @ % " -- b:} a < & @ % " -- b @w{} @H{a} a'' @H{--a} –a'' @dotaccent{a} ȧ @dotaccent{--a} –a. @ringaccent{a} å @ringaccent{--a} –a* @tieaccent{a} a[ @tieaccent{--a} –a[ @u{a} ă @u{--a} –a( @ubaraccent{a} a_ @ubaraccent{--a} –a_ @udotaccent{a}@udotaccent{--a} .–a @v{a} a< @v{--a} –a< @,{c} ç @,{--c} –c, @ogonek{a} ą @ogonek{--a} –a; @footnote{in footnote} (1) @footnote{in footnote2} (2)

    @image{f--ile} f--ile @image{f--ile,l--i} f--ile @image{f--ile,,l--e} f--ile @image{f--ile,,,alt} alt @image{f--ile,,,,e-d-xt} f--ile @image{f--ile,aze,az,alt,e--xt} alt @image{f-ile,aze,,a--lt} a–lt @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} alt



    @clicksequence{click @click{} A} click → A After clickstyle ⇒ @clicksequence{click @click{} A} click ⇒ A

    A quot—ation

    Note: A Note

    note: A note

    Caution: Caution

    Important: Important

    Tip: a Tip

    Warning: a Warning.

    something é TeX: The something é TeX is here.

    @ at the end of line A @ at the end of the @quotation line.

    something, other thing: something, other thing

    Note, the note: Note, the note

    Empty:

    :


    :

    A small quot—ation

    Note: A small Note

    something, other thing: something, other thing

    • i–temize
    • + i–tem +
    • b–ullet
    • - minu–s
    • e–mph item
    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
    trucbidule
     
    e--xample  some
       text
    
     
    s--mallexample
    
     
    d–isplay
    
     
    s–malldisplay
    
     
    l--isp
    
     
    s--malllisp
    
     
    f–ormat
    
     
    s–mallformat
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    cate--gory: de--ffn_name ar--guments more args
    even more so

    def–fn

    fset: i a g
    cmde: truc
    Command: log trap
    Command: log trap1
    Command: log trap2
    cmde: id ule truc
    cmde2: id ‘i’ ule truc
    id ‘i’ ule:
    :
    aaa:
    :
    :
    : machin
    : bidule machin
    truc: machin
    truc:
    truc: followed by a comment
    truc:
    :
    truc: a b c d e f g h i
    truc: deffnx before end deffn
    empty: deffn
    empty: deffn with deffnx
    empty: deffnx
    fset: i a g
    cmde: truc

    text in def item for second def item

    c--ategory: d--efvr_name

    d–efvr

    c--ategory: t--ype d--eftypefn_name a--rguments...

    d–eftypefn

    c--ategory on c--lass: t--ype d--eftypeop_name a--rguments...

    d–eftypeop

    c--ategory: t--ype d--eftypevr_name

    d–eftypevr

    c--ategory of c--lass: d--efcv_name

    d–efcv

    c--ategory on c--lass: d--efop_name a--rguments...

    d–efop

    c--ategory: d--eftp_name a--ttributes...

    d–eftp

    Function: d--efun_name a--rguments...

    d–efun

    Macro: d--efmac_name a--rguments...

    d–efmac

    Special Form: d--efspec_name a--rguments...

    d–efspec

    Variable: d--efvar_name argvar argvar1

    d–efvar

    User Option: d--efopt_name

    d–efopt

    Function: t--ype d--eftypefun_name a--rguments...

    d–eftypefun

    Variable: t--ype d--eftypevar_name

    d–eftypevar

    Instance Variable of c--lass: d--efivar_name

    d–efivar

    Instance Variable of c--lass: t--ype d--eftypeivar_name

    d–eftypeivar

    Method on c--lass: d--efmethod_name a--rguments...

    d–efmethod

    Method on c--lass: t--ype d--eftypemethod_name a--rguments...

    d–eftypemethod

    @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} See cross r—ef name@: (file n—ame@)c—hapter@ section ‘t—itle@’ in ma—nual@. @ref{chapter, cross ref name, title, file name, manual} cross ref name: (file name)chapter section ‘title’ in manual @pxref{chapter, cross ref name, title, file name, manual} see cross ref name: (file name)chapter section ‘title’ in manual @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter

    @ref{chapter} chapter @xref{chapter} See section chapter. @pxref{chapter} see section chapter @ref{s--ect@comma{}ion} A section

    @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } a , in cross ref: (a comma, in file)s–ect,ion section ‘a comma, in title’ in a , in manual name

    @ref{chapter,cross ref name} cross ref name @ref{chapter,,title} title @ref{chapter,,,file name} (file name)chapter @ref{chapter,,,,manual} section ‘chapter’ in manual @ref{chapter,cross ref name,title,} title @ref{chapter,cross ref name,,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,,,manual} section ‘chapter’ in manual @ref{chapter,cross ref name,title,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,title,,manual} section ‘title’ in manual @ref{chapter,cross ref name,title, file name, manual} cross ref name: (file name)chapter section ‘title’ in manual @ref{chapter,,title,file name} (file name)chapter @ref{chapter,,title,,manual} section ‘title’ in manual @ref{chapter,,title, file name, manual} (file name)chapter section ‘title’ in manual @ref{chapter,,,file name,manual} (file name)chapter section ‘chapter’ in manual

    @ref{(pman)anode,cross ref name} cross ref name: (pman)anode @ref{(pman)anode,,title} (pman)anode @ref{(pman)anode,,,file name} (file name)anode @ref{(pman)anode,,,,manual} (pman)anode section ‘anode’ in manual @ref{(pman)anode,cross ref name,title,} cross ref name: (pman)anode @ref{(pman)anode,cross ref name,,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,,,manual} cross ref name: (pman)anode section ‘anode’ in manual @ref{(pman)anode,cross ref name,title,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,title,,manual} cross ref name: (pman)anode section ‘title’ in manual @ref{(pman)anode,cross ref name,title, file name, manual} cross ref name: (file name)anode section ‘title’ in manual @ref{(pman)anode,,title,file name} (file name)anode @ref{(pman)anode,,title,,manual} (pman)anode section ‘title’ in manual @ref{(pman)anode,,title, file name, manual} (file name)anode section ‘title’ in manual @ref{(pman)anode,,,file name,manual} (file name)anode section ‘anode’ in manual

    @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter @inforef{chapter} @inforef{chapter, cross ref name} @inforef{chapter,,file name} See (file name)chapter @inforef{node, cross ref name, file name} See cross ref name: (file name)node @inforef{node} @inforef{node, cross ref name} @inforef{node,,file name} See (file name)node @inforef{chapter, cross ref name, file name, spurious arg} See cross ref name: (file name, spurious arg)chapter

    @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} See a , in cross ref: (a comma, in file)s–ect,ion

    • a

    l–ine

    a
    b

    l–ine

    - a
    - b

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    \input texinfo @c -*-texinfo-*-
    
    @setfilename simplest.info
    
    @node Top
    
    This is a very simple texi manual @  <>.
    
    @bye
    
    in verbatim ''
    
    html ''

    majorheading

    chapheading

    heading

    subheading

    subsubheading

    @acronym{--a,an accronym @comma{} @enddots{}} –a (an accronym , ...) @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } É–. ,A. (Étude–, Autonome) @abbr{@'E--. @comma{}A.} É–. ,A.

    @math{--a@minus{} {\frac{1}{2}}} –a- \frac12

    @image{f-ile,,,alt@verb{:jk _" %}} altjk _" %@ @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} jk _" %@ in b " @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} altjk _" %@

    Somehow invalid use of @,:
    @, ,
    @,@"u @,"u

    Invalid use of @’:
    @’ ’
    @’@"u @'"u

    @dotless{truc} truc @dotless{ij} ij @dotless{--a} –a @dotless{a} a

    @TeX, but without brace TeX

    @# @#

    @w{--a} –a

    @image{,1--xt} @image{,,2--xt} @image{,,,3--xt}


    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    fun:
    truc: machin bidule chose and
    truc: machin bidule chose and after
    truc: machin bidule chose and {
    truc: machin bidule chose and { and after
    truc: followed by a comment

    Various deff lines

    truc: after a deff item

    @ref{node} @ref{node}

    @ref{,cross ref name} @ref{,cross ref name} @ref{,,title} @ref{,,title} @ref{,,,file name} (file name) @ref{,,,,manual} manual @ref{node,cross ref name} @ref{node,cross ref name} @ref{node,,title} @ref{node,,title} @ref{node,,,file name} (file name)node @ref{node,,,,manual} section ‘node’ in manual @ref{node,cross ref name,title,} @ref{node,cross ref name,title,} @ref{node,cross ref name,,file name} cross ref name: (file name)node @ref{node,cross ref name,,,manual} section ‘node’ in manual @ref{node,cross ref name,title,file name} cross ref name: (file name)node @ref{node,cross ref name,title,,manual} section ‘title’ in manual @ref{node,cross ref name,title, file name, manual} cross ref name: (file name)node section ‘title’ in manual @ref{node,,title,file name} (file name)node @ref{node,,title,,manual} section ‘title’ in manual @ref{chapter,,title, file name, manual} (file name)chapter section ‘title’ in manual @ref{node,,title, file name, manual} (file name)node section ‘title’ in manual @ref{node,,,file name,manual} (file name)node section ‘node’ in manual @ref{,cross ref name,title,} @ref{,cross ref name,title,} @ref{,cross ref name,,file name} cross ref name: (file name) @ref{,cross ref name,,,manual} manual @ref{,cross ref name,title,file name} cross ref name: (file name) @ref{,cross ref name,title,,manual} section ‘title’ in manual @ref{,cross ref name,title, file name, manual} cross ref name: (file name) section ‘title’ in manual @ref{,,title,file name} (file name) @ref{,,title,,manual} section ‘title’ in manual @ref{,,title, file name, manual} (file name) section ‘title’ in manual @ref{,,,file name,manual} (file name) manual

    @inforef{,cross ref name } @inforef{,,file name} @inforef{,cross ref name, file name} @inforef{}

    In example.

     
    <
    >
    "
    &
    '
    `
    
    ``simple-double--three---four----''
    
    code: ``simple-double--three---four----'' 
    
    asis: ``simple-double--three---four----'' 
    
    strong: ``simple-double--three---four----'' 
    
    kbd: ``simple-double--three---four----'' 
    
    
    ``simple-double--three---four----''
    
    
    
    @"u ü 
    @"{U} Ü 
    @~n ñ
    @^a â
    @'e é
    @=o ō
    @`i ì
    @'{e} é
    @'{@dotless{i}} í 
    @dotless{i} i
    @dotless{j} j
    @`{@=E} Ē` 
    @l{} ł
    @,{@'C} Ć,
    @,c ç
    @,c@"u çü 
    
    
    @* 
    
    @ followed by a space
     
    @ followed by a tab
     
    @ followed by a new line
     @- 
    @| 
    @: 
    @! !
    @? ?
    @. .
    @@ @
    @} }
    @{ {
    @/ 
    
    foo vs. bar. 
    colon :And something else.
    semi colon ;.
    And ? ?.
    Now ! !@
    but , ,
    
    @TeX TeX
    @LaTeX LaTeX
    @bullet •
    @copyright ©
    @dots …
    @enddots ...
    @equiv ≡
    @error error-->
    @expansion →
    @minus -
    @point ∗
    @print -|
    @result ⇒
    @today a sunny day
    @aa å
    @AA Å
    @ae æ
    @oe œ
    @AE Æ
    @OE Œ
    @o ø
    @O Ø
    @ss ß
    @l ł
    @L Ł
    @exclamdown ¡
    @questiondown ¿
    @pounds £
    @registeredsymbol ®
    @ordf ª
    @ordm º
    @comma ,
    @quotedblleft “
    @quotedblright ”
    @quoteleft ‘
    @quoteright ’
    @quotedblbase „
    @quotesinglbase ‚
    @guillemetleft «
    @guillemetright »
    @guillemotleft «
    @guillemotright »
    @guilsinglleft ‹
    @guilsinglright ›
    @textdegree °
    @euro €
    @arrow →
    @leq ≤
    @geq ≥
    
    @acronym{--a,an accronym} --a (an accronym)
    @acronym{--a} --a
    @abbr{@'E--. @comma{}A., @'Etude Autonome } É--. ,A. (Étude Autonome)
    @abbr{@'E--. @comma{}A.} É--. ,A.
    @asis{--a} --a
    @b{--a} --a
    @cite{--a} --a
    @code{--a} --a
    @command{--a} --a
    @ctrl{--a} --a
    @dfn{--a} --a
    @dmn{--a} --a
    @email{--a,--b} --b
    @email{,--b} --b
    @email{--a} --a
    @emph{--a} --a
    @env{--a} --a
    @file{--a}--a@i{--a} --a
    @kbd{--a} --a
    @key{--a} <--a>
    @math{--a {\frac{1}{2}} @minus{}} --a \frac12 -
    @option{--a}--a@r{--a} --a
    @samp{--a}--a@sc{--a} --A
    @strong{--a} --a
    @t{--a} --a
    @sansserif{--a} --a
    @titlefont{--a} --a
    @indicateurl{--a} <--a>
    @uref{--a,--b} --b
    @uref{--a} --a
    @uref{,--b} --b
    @uref{--a,--b,--c} --c
    @uref{,--b,--c} --c
    @uref{--a,,--c} --c
    @uref{,,--c} --c
    @url{--a,--b} --b
    @url{--a,} --a
    @url{,--b} --b
    @var{--a} --a
    @verb{:--a:} --a
    @verb{:a  < & @ % " --    b:} a  < & @ % " --    b
    @w{} 
    @H{a} a''
    @H{--a} --a''
    @dotaccent{a} ȧ
    @dotaccent{--a} --a.
    @ringaccent{a} å
    @ringaccent{--a} --a*
    @tieaccent{a} a[
    @tieaccent{--a} --a[
    @u{a} ă
    @u{--a} --a(
    @ubaraccent{a} a_
    @ubaraccent{--a} --a_
    @udotaccent{a}@udotaccent{--a} .--a
    @v{a} a<
    @v{--a} --a<
    @,{c} ç
    @,{--c} --c,
    @ogonek{a} ą
    @ogonek{--a} --a;
    @footnote{in footnote} (3)
    @footnote{in footnote2} (4)
    
    @image{f--ile} [ f--ile ]
    @image{f--ile,l--i} [ f--ile ]
    @image{f--ile,,l--e} [ f--ile ]
    @image{f--ile,,,alt} [ alt ]
    @image{f--ile,,,,e-d-xt} [ f--ile ]
    @image{f--ile,aze,az,alt,e--xt} [ alt ]
    @image{f-ile,aze,,a--lt} [ a–lt ]
    @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} [ alt ]
    
    
    
    
    @clicksequence{click @click{} A} click → A
    After clickstyle ⇒
    @clicksequence{click @click{} A} click ⇒ A
    
    
    A quot---ation
    
    Note: A Note
    
    note: A note
    
    Caution: Caution
    
    Important: Important
    
    Tip: a Tip
    
    Warning: a Warning.
    
    something é TeX: The something é TeX is here.
    
    @ at the end of line  A @ at the end of the @quotation line.
    
    something, other thing: something, other thing
    
    Note, the note: Note, the note
    
    Empty: 
    : 
    
    : 
    A small quot---ation
    
    Note: A small Note
    
    something, other thing: something, other thing
    
    •  i--temize
      
    •  +  i--tem +
      
    •  b--ullet
      
    • -
       minu--s
      
    •  e--mph item
      
    •  after emph  e--mph item
      
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    
    lone mu--ltitable item
    truc
    bidule
     
    e--xample  some
       text
    
     
    s--mallexample
    
     
    d--isplay
    
     
    s--malldisplay
    
     
    l--isp
    
     
    s--malllisp
    
     
    f--ormat
    
     
    s--mallformat
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    cate--gory: de--ffn_name ar--guments more args even more so
    def--fn
    
     
    
    fset: i a g
    cmde: truc
    Command: log trap
    Command: log trap1
    Command: log trap2
    cmde: id ule truc
    cmde2: id ‘i’ ule truc
    id ‘i’ ule:
    :
    aaa:
    :
    :
    : machin
    : bidule machin
    truc: machin
    truc:
    truc: followed by a comment
    truc:
    :
    truc: a b c d e f g h i
    truc: deffnx before end deffn
    empty: deffn
    empty: deffn with deffnx
    empty: deffnx
    fset: i a g
    cmde: truc
    text in def item for second def item
    
    c--ategory: d--efvr_name
    d--efvr
    
    c--ategory: t--ype d--eftypefn_name a--rguments...
    d--eftypefn
    
    c--ategory on c--lass: t--ype d--eftypeop_name a--rguments...
    d--eftypeop
    
    c--ategory: t--ype d--eftypevr_name
    d--eftypevr
    
    c--ategory of c--lass: d--efcv_name
    d--efcv
    
    c--ategory on c--lass: d--efop_name a--rguments...
    d--efop
    
    c--ategory: d--eftp_name a--ttributes...
    d--eftp
    
    Function: d--efun_name a--rguments...
    d--efun
    
    Macro: d--efmac_name a--rguments...
    d--efmac
    
    Special Form: d--efspec_name a--rguments...
    d--efspec
    
    Variable: d--efvar_name argvar argvar1
    d--efvar
    
    User Option: d--efopt_name
    d--efopt
    
    Function: t--ype d--eftypefun_name a--rguments...
    d--eftypefun
    
    Variable: t--ype d--eftypevar_name
    d--eftypevar
    
    Instance Variable of c--lass: d--efivar_name
    d--efivar
    
    Instance Variable of c--lass: t--ype d--eftypeivar_name
    d--eftypeivar
    
    Method on c--lass: d--efmethod_name a--rguments...
    d--efmethod
    
    Method on c--lass: t--ype d--eftypemethod_name a--rguments...
    d--eftypemethod
    
    @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} See cross r---ef name@: (file n---ame@)c---hapter@ section `t---itle@' in ma---nual@.
    @ref{chapter, cross ref name, title, file name, manual} cross ref name: (file name)chapter section `title' in manual
    @pxref{chapter, cross ref name, title, file name, manual} see cross ref name: (file name)chapter section `title' in manual
    @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter
    
    @ref{chapter} chapter
    @xref{chapter} See section chapter.
    @pxref{chapter} see section chapter
    @ref{s--ect@comma{}ion} A section
    
    @ref{s--ect@comma{}ion, a @comma{} in cross
    ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name }
    a , in cross ref: (a comma, in file)s--ect,ion section `a comma, in title' in a , in manual name
    
    @ref{chapter,cross ref name} cross ref name
    @ref{chapter,,title} title
    @ref{chapter,,,file name} (file name)chapter
    @ref{chapter,,,,manual} section `chapter' in manual
    @ref{chapter,cross ref name,title,} title
    @ref{chapter,cross ref name,,file name} cross ref name: (file name)chapter
    @ref{chapter,cross ref name,,,manual} section `chapter' in manual
    @ref{chapter,cross ref name,title,file name} cross ref name: (file name)chapter
    @ref{chapter,cross ref name,title,,manual} section `title' in manual
    @ref{chapter,cross ref name,title, file name, manual} cross ref name: (file name)chapter section `title' in manual
    @ref{chapter,,title,file name} (file name)chapter
    @ref{chapter,,title,,manual} section `title' in manual
    @ref{chapter,,title, file name, manual} (file name)chapter section `title' in manual
    @ref{chapter,,,file name,manual} (file name)chapter section `chapter' in manual
    
    
    @ref{(pman)anode,cross ref name} cross ref name: (pman)anode
    @ref{(pman)anode,,title} (pman)anode
    @ref{(pman)anode,,,file name} (file name)anode
    @ref{(pman)anode,,,,manual} (pman)anode section `anode' in manual
    @ref{(pman)anode,cross ref name,title,} cross ref name: (pman)anode
    @ref{(pman)anode,cross ref name,,file name} cross ref name: (file name)anode
    @ref{(pman)anode,cross ref name,,,manual} cross ref name: (pman)anode section `anode' in manual
    @ref{(pman)anode,cross ref name,title,file name} cross ref name: (file name)anode
    @ref{(pman)anode,cross ref name,title,,manual} cross ref name: (pman)anode section `title' in manual
    @ref{(pman)anode,cross ref name,title, file name, manual} cross ref name: (file name)anode section `title' in manual
    @ref{(pman)anode,,title,file name} (file name)anode
    @ref{(pman)anode,,title,,manual} (pman)anode section `title' in manual
    @ref{(pman)anode,,title, file name, manual} (file name)anode section `title' in manual
    @ref{(pman)anode,,,file name,manual} (file name)anode section `anode' in manual
    
    
    @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter
    @inforef{chapter} 
    @inforef{chapter, cross ref name} 
    @inforef{chapter,,file name} See (file name)chapter
    @inforef{node, cross ref name, file name} See cross ref name: (file name)node
    @inforef{node} 
    @inforef{node, cross ref name} 
    @inforef{node,,file name} See (file name)node
    @inforef{chapter, cross ref name, file name, spurious arg} See cross ref name: (file name, spurious arg)chapter
    
    @inforef{s--ect@comma{}ion, a @comma{} in cross
    ref, a comma@comma{} in file}
    See a , in cross ref: (a comma, in file)s--ect,ion
    
    
    
    • a
    l--ine
    
    a
    b
    l--ine
    
    - a
    - b
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    \input texinfo @c -*-texinfo-*-
    
    @setfilename simplest.info
    
    @node Top
    
    This is a very simple texi manual @  <>.
    
    @bye
    
    in verbatim ''
    
    
    html ''
    
    
    
    majorheading
    
    
    chapheading
    
    
    heading
    
    
    subheading
    
    
    subsubheading
    
    
    @acronym{--a,an accronym @comma{} @enddots{}} --a (an accronym , ...)
    @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } É--. ,A. (Étude--, Autonome)
    @abbr{@'E--. @comma{}A.} É--. ,A.
    
    @math{--a@minus{} {\frac{1}{2}}} --a- \frac12
    
    @image{f-ile,,,alt@verb{:jk _" %}} [ altjk _" %@ ]
    @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} [ jk _" %@ in b " ]
    @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} [ altjk _" %@ ]
    
    
    
    
    Somehow invalid use of @,:
    
    @, ,
    
    
    @,@"u @,"u
    
    Invalid use of @':
    
    @' '
    
    
    @'@"u @'"u
    
    @dotless{truc} truc
    @dotless{ij} ij
    @dotless{--a} --a
    @dotless{a} a
    
    @TeX, but without brace TeX
    
    @# @#
    
    @w{--a} --a
    
    @image{,1--xt} 
    @image{,,2--xt} 
    @image{,,,3--xt} 
    
    
    
    
    • after emph  e--mph item
      
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    fun:
    truc: machin bidule chose and
    truc: machin bidule chose and after
    truc: machin bidule chose and {
    truc: machin bidule chose and { and after
    truc: followed by a comment
    Various deff lines
    
    truc: after a deff item
    @ref{node} @ref{node}
    
    @ref{,cross ref name} @ref{,cross ref name}
    @ref{,,title} @ref{,,title}
    @ref{,,,file name} (file name)
    @ref{,,,,manual} manual
    @ref{node,cross ref name} @ref{node,cross ref name}
    @ref{node,,title} @ref{node,,title}
    @ref{node,,,file name} (file name)node
    @ref{node,,,,manual} section `node' in manual
    @ref{node,cross ref name,title,} @ref{node,cross ref name,title,}
    @ref{node,cross ref name,,file name} cross ref name: (file name)node
    @ref{node,cross ref name,,,manual} section `node' in manual
    @ref{node,cross ref name,title,file name} cross ref name: (file name)node
    @ref{node,cross ref name,title,,manual} section `title' in manual
    @ref{node,cross ref name,title, file name, manual} cross ref name: (file name)node section `title' in manual
    @ref{node,,title,file name} (file name)node
    @ref{node,,title,,manual} section `title' in manual
    @ref{chapter,,title, file name, manual} (file name)chapter section `title' in manual
    @ref{node,,title, file name, manual} (file name)node section `title' in manual
    @ref{node,,,file name,manual} (file name)node section `node' in manual
    @ref{,cross ref name,title,} @ref{,cross ref name,title,}
    @ref{,cross ref name,,file name} cross ref name: (file name)
    @ref{,cross ref name,,,manual} manual
    @ref{,cross ref name,title,file name} cross ref name: (file name)
    @ref{,cross ref name,title,,manual} section `title' in manual
    @ref{,cross ref name,title, file name, manual} cross ref name: (file name) section `title' in manual
    @ref{,,title,file name} (file name)
    @ref{,,title,,manual} section `title' in manual
    @ref{,,title, file name, manual} (file name) section `title' in manual
    @ref{,,,file name,manual} (file name) manual
    
    @inforef{,cross ref name } 
    @inforef{,,file name} 
    @inforef{,cross ref name, file name} 
    @inforef{} 
    
    
    

    cp

    Jump to:   "   -   .   ?  
    A   I   T  
    Index Entry Section
    "
    Top section
    Top section
    subsubheading
    subsubheading
    -
    –optionTop section
    –optionTop section
    –optionsubsubheading
    –optionsubsubheading
    .
    .subsubheading
    ?
    ?subsubheading
    A
    asubsubheading
    I
    index entry between item and itemxTop section
    index entry between item and itemxTop section
    index entry between item and itemxsubsubheading
    index entry between item and itemxsubsubheading
    index entry within deffnTop section
    index entry within deffnTop section
    index entry within deffnsubsubheading
    index entry within deffnsubsubheading
    index entry within itemizeTop section
    index entry within itemizeTop section
    index entry within itemizesubsubheading
    index entry within itemizesubsubheading
    index entry within multitableTop section
    index entry within multitableTop section
    index entry within multitablesubsubheading
    index entry within multitablesubsubheading
    T
    t–rucsubsubheading
    T–rucsubsubheading
    Jump to:   "   -   .   ?  
    A   I   T  

    fn

    Jump to:   "   -   .   ?  
    A   B   D   F   I   L   M   T  
    Index Entry Section
    "
    ``Top section
    ``Top section
    ``subsubheading
    ``subsubheading
    -
    --foptionTop section
    --foptionTop section
    --foptionsubsubheading
    --foptionsubsubheading
    .
    .subsubheading
    ?
    ?subsubheading
    A
    aTop section
    aTop section
    aTop section
    aTop section
    asubsubheading
    asubsubheading
    asubsubheading
    asubsubheading
    asubsubheading
    afterTop section
    afterTop section
    aftersubsubheading
    aftersubsubheading
    B
    bTop section
    bTop section
    bsubsubheading
    bsubsubheading
    bidule machinTop section
    bidule machinTop section
    bidule machinsubsubheading
    bidule machinsubsubheading
    D
    d--effn_nameTop section
    d--effn_nameTop section
    d--effn_namesubsubheading
    d--effn_namesubsubheading
    d--efmac_nameTop section
    d--efmac_nameTop section
    d--efmac_namesubsubheading
    d--efmac_namesubsubheading
    d--efmethod_name on c--lassTop section
    d--efmethod_name on c--lassTop section
    d--efmethod_name on c--lasssubsubheading
    d--efmethod_name on c--lasssubsubheading
    d--efop_name on c--lassTop section
    d--efop_name on c--lassTop section
    d--efop_name on c--lasssubsubheading
    d--efop_name on c--lasssubsubheading
    d--efspec_nameTop section
    d--efspec_nameTop section
    d--efspec_namesubsubheading
    d--efspec_namesubsubheading
    d--eftypefn_nameTop section
    d--eftypefn_nameTop section
    d--eftypefn_namesubsubheading
    d--eftypefn_namesubsubheading
    d--eftypefun_nameTop section
    d--eftypefun_nameTop section
    d--eftypefun_namesubsubheading
    d--eftypefun_namesubsubheading
    d--eftypemethod_name on c--lassTop section
    d--eftypemethod_name on c--lassTop section
    d--eftypemethod_name on c--lasssubsubheading
    d--eftypemethod_name on c--lasssubsubheading
    d--eftypeop_name on c--lassTop section
    d--eftypeop_name on c--lassTop section
    d--eftypeop_name on c--lasssubsubheading
    d--eftypeop_name on c--lasssubsubheading
    d--efun_nameTop section
    d--efun_nameTop section
    d--efun_namesubsubheading
    d--efun_namesubsubheading
    de--ffn_nameTop section
    de--ffn_nameTop section
    de--ffn_namesubsubheading
    de--ffn_namesubsubheading
    deffnTop section
    deffnTop section
    deffnTop section
    deffnTop section
    deffnsubsubheading
    deffnsubsubheading
    deffnsubsubheading
    deffnsubsubheading
    deffnxTop section
    deffnxTop section
    deffnxTop section
    deffnxTop section
    deffnxsubsubheading
    deffnxsubsubheading
    deffnxsubsubheading
    deffnxsubsubheading
    F
    followedTop section
    followedTop section
    followedTop section
    followedTop section
    followedsubsubheading
    followedsubsubheading
    followedsubsubheading
    followedsubsubheading
    I
    iTop section
    iTop section
    iTop section
    iTop section
    isubsubheading
    isubsubheading
    isubsubheading
    isubsubheading
    id ‘i’ uleTop section
    id ‘i’ uleTop section
    id ‘i’ ulesubsubheading
    id ‘i’ ulesubsubheading
    id uleTop section
    id uleTop section
    id ulesubsubheading
    id ulesubsubheading
    L
    log trapTop section
    log trapTop section
    log trapsubsubheading
    log trapsubsubheading
    log trap1Top section
    log trap1Top section
    log trap1subsubheading
    log trap1subsubheading
    log trap2Top section
    log trap2Top section
    log trap2subsubheading
    log trap2subsubheading
    M
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    T
    t--rucsubsubheading
    T--rucsubsubheading
    trucTop section
    trucTop section
    trucTop section
    trucTop section
    trucsubsubheading
    trucsubsubheading
    trucsubsubheading
    trucsubsubheading
    Jump to:   "   -   .   ?  
    A   B   D   F   I   L   M   T  

    vr

    Jump to:   A   B   D  
    Index Entry Section
    A
    aTop section
    aTop section
    asubsubheading
    asubsubheading
    B
    bTop section
    bTop section
    bsubsubheading
    bsubsubheading
    D
    d--efcv_nameTop section
    d--efcv_nameTop section
    d--efcv_namesubsubheading
    d--efcv_namesubsubheading
    d--efivar_nameTop section
    d--efivar_nameTop section
    d--efivar_namesubsubheading
    d--efivar_namesubsubheading
    d--efopt_nameTop section
    d--efopt_nameTop section
    d--efopt_namesubsubheading
    d--efopt_namesubsubheading
    d--eftypeivar_name of c--lassTop section
    d--eftypeivar_name of c--lassTop section
    d--eftypeivar_name of c--lasssubsubheading
    d--eftypeivar_name of c--lasssubsubheading
    d--eftypevar_nameTop section
    d--eftypevar_nameTop section
    d--eftypevar_namesubsubheading
    d--eftypevar_namesubsubheading
    d--eftypevr_nameTop section
    d--eftypevr_nameTop section
    d--eftypevr_namesubsubheading
    d--eftypevr_namesubsubheading
    d--efvar_nameTop section
    d--efvar_nameTop section
    d--efvar_namesubsubheading
    d--efvar_namesubsubheading
    d--efvr_nameTop section
    d--efvr_nameTop section
    d--efvr_namesubsubheading
    d--efvr_namesubsubheading
    Jump to:   A   B   D  

    ky

    pg

    tp

    Jump to:   D  
    Index Entry Section
    D
    d--eftp_nameTop section
    d--eftp_nameTop section
    d--eftp_namesubsubheading
    d--eftp_namesubsubheading
    Jump to:   D  

    Footnotes

    (1)

    in footnote

    (2)

    in footnote2

    (1)

    in footnote

    (2)

    in footnote2

    (3)

    in footnote

    (4)

    in footnote2

    texi2html-1.82/test/layout/res/formatting_chm/formatting.hhp0000644000175000017500000000077711264347122026206 0ustar flichtenheldflichtenheld[OPTIONS] Compatibility=1.1 or later Compiled file=formatting.chm Contents file=formatting.hhc Default Window=Default Default topic=formatting.html Display compile progress=No Full-text search=Yes Index file=formatting.hhk Language=0x409 English (United States) Title=title -a [WINDOWS] Default=,"formatting.hhc","formatting.hhk","formatting.html","formatting.html",,,,,0x22520,,0x384e,,,,,,,,0 [FILES] formatting.html formatting_1.html formatting_2.html formatting_3.html formatting_4.html formatting_5.html texi2html-1.82/test/layout/res/formatting_chm/formatting_5.html0000644000175000017500000014376311264347122026622 0ustar flichtenheldflichtenheld title –a: 2. chapter 2

    2. chapter 2

    Jump to:   "   -   .   ?  
    A   I   T  
    Index Entry Section
    "
    Top section
    Top section
    subsubheading
    subsubheading
    -
    –optionTop section
    –optionTop section
    –optionsubsubheading
    –optionsubsubheading
    .
    .subsubheading
    ?
    ?subsubheading
    A
    asubsubheading
    I
    index entry between item and itemxTop section
    index entry between item and itemxTop section
    index entry between item and itemxsubsubheading
    index entry between item and itemxsubsubheading
    index entry within deffnTop section
    index entry within deffnTop section
    index entry within deffnsubsubheading
    index entry within deffnsubsubheading
    index entry within itemizeTop section
    index entry within itemizeTop section
    index entry within itemizesubsubheading
    index entry within itemizesubsubheading
    index entry within multitableTop section
    index entry within multitableTop section
    index entry within multitablesubsubheading
    index entry within multitablesubsubheading
    T
    t–rucsubsubheading
    T–rucsubsubheading
    Jump to:   "   -   .   ?  
    A   I   T  
    Jump to:   "   -   .   ?  
    A   B   D   F   I   L   M   T  
    Index Entry Section
    "
    ``Top section
    ``Top section
    ``subsubheading
    ``subsubheading
    -
    --foptionTop section
    --foptionTop section
    --foptionsubsubheading
    --foptionsubsubheading
    .
    .subsubheading
    ?
    ?subsubheading
    A
    aTop section
    aTop section
    aTop section
    aTop section
    asubsubheading
    asubsubheading
    asubsubheading
    asubsubheading
    asubsubheading
    afterTop section
    afterTop section
    aftersubsubheading
    aftersubsubheading
    B
    bTop section
    bTop section
    bsubsubheading
    bsubsubheading
    bidule machinTop section
    bidule machinTop section
    bidule machinsubsubheading
    bidule machinsubsubheading
    D
    d--effn_nameTop section
    d--effn_nameTop section
    d--effn_namesubsubheading
    d--effn_namesubsubheading
    d--efmac_nameTop section
    d--efmac_nameTop section
    d--efmac_namesubsubheading
    d--efmac_namesubsubheading
    d--efmethod_name on c--lassTop section
    d--efmethod_name on c--lassTop section
    d--efmethod_name on c--lasssubsubheading
    d--efmethod_name on c--lasssubsubheading
    d--efop_name on c--lassTop section
    d--efop_name on c--lassTop section
    d--efop_name on c--lasssubsubheading
    d--efop_name on c--lasssubsubheading
    d--efspec_nameTop section
    d--efspec_nameTop section
    d--efspec_namesubsubheading
    d--efspec_namesubsubheading
    d--eftypefn_nameTop section
    d--eftypefn_nameTop section
    d--eftypefn_namesubsubheading
    d--eftypefn_namesubsubheading
    d--eftypefun_nameTop section
    d--eftypefun_nameTop section
    d--eftypefun_namesubsubheading
    d--eftypefun_namesubsubheading
    d--eftypemethod_name on c--lassTop section
    d--eftypemethod_name on c--lassTop section
    d--eftypemethod_name on c--lasssubsubheading
    d--eftypemethod_name on c--lasssubsubheading
    d--eftypeop_name on c--lassTop section
    d--eftypeop_name on c--lassTop section
    d--eftypeop_name on c--lasssubsubheading
    d--eftypeop_name on c--lasssubsubheading
    d--efun_nameTop section
    d--efun_nameTop section
    d--efun_namesubsubheading
    d--efun_namesubsubheading
    de--ffn_nameTop section
    de--ffn_nameTop section
    de--ffn_namesubsubheading
    de--ffn_namesubsubheading
    deffnTop section
    deffnTop section
    deffnTop section
    deffnTop section
    deffnsubsubheading
    deffnsubsubheading
    deffnsubsubheading
    deffnsubsubheading
    deffnxTop section
    deffnxTop section
    deffnxTop section
    deffnxTop section
    deffnxsubsubheading
    deffnxsubsubheading
    deffnxsubsubheading
    deffnxsubsubheading
    F
    followedTop section
    followedTop section
    followedTop section
    followedTop section
    followedsubsubheading
    followedsubsubheading
    followedsubsubheading
    followedsubsubheading
    I
    iTop section
    iTop section
    iTop section
    iTop section
    isubsubheading
    isubsubheading
    isubsubheading
    isubsubheading
    id ‘i’ uleTop section
    id ‘i’ uleTop section
    id ‘i’ ulesubsubheading
    id ‘i’ ulesubsubheading
    id uleTop section
    id uleTop section
    id ulesubsubheading
    id ulesubsubheading
    L
    log trapTop section
    log trapTop section
    log trapsubsubheading
    log trapsubsubheading
    log trap1Top section
    log trap1Top section
    log trap1subsubheading
    log trap1subsubheading
    log trap2Top section
    log trap2Top section
    log trap2subsubheading
    log trap2subsubheading
    M
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    T
    t--rucsubsubheading
    T--rucsubsubheading
    trucTop section
    trucTop section
    trucTop section
    trucTop section
    trucsubsubheading
    trucsubsubheading
    trucsubsubheading
    trucsubsubheading
    Jump to:   "   -   .   ?  
    A   B   D   F   I   L   M   T  

    texi2html-1.82/test/layout/res/formatting_chm/formatting.hhc0000644000175000017500000000250111264347122026154 0ustar flichtenheldflichtenheld
    texi2html-1.82/test/layout/res/formatting_chm/formatting_1.html0000644000175000017500000002463311264347122026610 0ustar flichtenheldflichtenheld title –a: 1. chapter

    1. chapter

    (5)

    Footnotes

    (5)

    in footnote

    texi2html-1.82/test/layout/res/formatting_chm/formatting_toc.html0000644000175000017500000002612311264347122027231 0ustar flichtenheldflichtenheld title –a: Table of Contents

    Table of Contents

    texi2html-1.82/test/layout/res/navigation_section_no_header/0000755000175000017500000000000011264347122026206 5ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation_section_no_header/navigation.html0000644000175000017500000000601411264347122031234 0ustar flichtenheldflichtenheld Untitled Document: File used for navigation testing
    [Top] [Contents] [Index] [ ? ]

    File used for navigation testing


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_section_no_header/navigation_1.html0000644000175000017500000000764711264347122031471 0ustar flichtenheldflichtenheld Untitled Document: 1. First chapter
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. First chapter


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_section_no_header/navigation.20000644000175000017500000000000011264347122030416 0ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation_section_no_header/navigation_2.html0000644000175000017500000001043311264347122031455 0ustar flichtenheldflichtenheld Untitled Document: 1.1 Section in chapter
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 Section in chapter

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b bb b b b b b b bb b bb.


    1.1.1 Sub section in section


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_section_no_header/navigation_abt.html0000644000175000017500000001214611264347122032065 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_section_no_header/navigation_toc.html0000644000175000017500000000615111264347122032103 0ustar flichtenheldflichtenheld Untitled Document: Table of Contents
    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/texi_formatting_regions/0000755000175000017500000000000011264347122025250 5ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/texi_formatting_regions/formatting_regions.passtexi0000644000175000017500000053567111264347122032753 0ustar flichtenheldflichtenheldformatting_regions.texi(,2) @setfilename formatting-regions.info formatting_regions.texi(,3) formatting_regions.texi(,4) @documentdescription formatting_regions.texi(,5) This is the explicit d--ocument @code{d@'escription}. formatting_regions.texi(,6) @end documentdescription formatting_regions.texi(,7) formatting_regions.texi(,8) @node Top formatting_regions.texi(,9) @top Top section formatting_regions.texi(,22) @node constructs formatting_regions.texi(,23) @chapter constructs formatting_regions.texi(,24) formatting_regions.texi(,26) formatting_regions.texi(,27) @copying formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) < formatting_regions.texi(mymacro,28) > formatting_regions.texi(mymacro,28) " formatting_regions.texi(mymacro,28) & formatting_regions.texi(mymacro,28) ' formatting_regions.texi(mymacro,28) ` formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) ``simple-double--three---four----''@* formatting_regions.texi(mymacro,28) code: @code{``simple-double--three---four----''} @* formatting_regions.texi(mymacro,28) asis: @asis{``simple-double--three---four----''} @* formatting_regions.texi(mymacro,28) strong: @strong{``simple-double--three---four----''} @* formatting_regions.texi(mymacro,28) kbd: @kbd{``simple-double--three---four----''} @* formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) `@w{}`simple-double-@w{}-three---four----'@w{}'@* formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @cindex --option formatting_regions.texi(mymacro,28) @cindex `` formatting_regions.texi(mymacro,28) @findex `` formatting_regions.texi(mymacro,28) @findex --foption formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @@"u @"u formatting_regions.texi(mymacro,28) @@"@{U@} @"{U} formatting_regions.texi(mymacro,28) @@~n @~n formatting_regions.texi(mymacro,28) @@^a @^a formatting_regions.texi(mymacro,28) @@'e @'e formatting_regions.texi(mymacro,28) @@=o @=o formatting_regions.texi(mymacro,28) @@`i @`i formatting_regions.texi(mymacro,28) @@'@{e@} @'{e} formatting_regions.texi(mymacro,28) @@'@{@@dotless@{i@}@} @'{@dotless{i}} formatting_regions.texi(mymacro,28) @@dotless@{i@} @dotless{i} formatting_regions.texi(mymacro,28) @@dotless@{j@} @dotless{j} formatting_regions.texi(mymacro,28) @@`@{@@=E@} @`{@=E} formatting_regions.texi(mymacro,28) @@l@{@} @l{} formatting_regions.texi(mymacro,28) @@,@{@@'C@} @,{@'C} formatting_regions.texi(mymacro,28) @@,c @,c formatting_regions.texi(mymacro,28) @@,c@@"u @,c@"u @* formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @@* @* formatting_regions.texi(mymacro,28) @@ followed by a space formatting_regions.texi(mymacro,28) @ formatting_regions.texi(mymacro,28) @@ followed by a tab formatting_regions.texi(mymacro,28) @ formatting_regions.texi(mymacro,28) @@ followed by a new line formatting_regions.texi(mymacro,28) @ formatting_regions.texi(mymacro,28) @code{@@-} @- formatting_regions.texi(mymacro,28) @code{@@|} @| formatting_regions.texi(mymacro,28) @code{@@:} @: formatting_regions.texi(mymacro,28) @code{@@!} @! formatting_regions.texi(mymacro,28) @code{@@?} @? formatting_regions.texi(mymacro,28) @code{@@.} @. formatting_regions.texi(mymacro,28) @code{@@@@} @@ formatting_regions.texi(mymacro,28) @code{@@@}} @} formatting_regions.texi(mymacro,28) @code{@@@{} @{ formatting_regions.texi(mymacro,28) @code{@@/} @/ formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) foo vs.@: bar. formatting_regions.texi(mymacro,28) colon :@:And something else. formatting_regions.texi(mymacro,28) semi colon ;@:. formatting_regions.texi(mymacro,28) And ? ?@:. formatting_regions.texi(mymacro,28) Now ! !@:@@ formatting_regions.texi(mymacro,28) but , ,@: formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @@TeX @TeX{} formatting_regions.texi(mymacro,28) @@LaTeX @LaTeX{} formatting_regions.texi(mymacro,28) @@bullet @bullet{} formatting_regions.texi(mymacro,28) @@copyright @copyright{} formatting_regions.texi(mymacro,28) @@dots @dots{} formatting_regions.texi(mymacro,28) @@enddots @enddots{} formatting_regions.texi(mymacro,28) @@equiv @equiv{} formatting_regions.texi(mymacro,28) @@error @error{} formatting_regions.texi(mymacro,28) @@expansion @expansion{} formatting_regions.texi(mymacro,28) @@minus @minus{} formatting_regions.texi(mymacro,28) @@point @point{} formatting_regions.texi(mymacro,28) @@print @print{} formatting_regions.texi(mymacro,28) @@result @result{} formatting_regions.texi(mymacro,28) @@today @today{} formatting_regions.texi(mymacro,28) @@aa @aa{} formatting_regions.texi(mymacro,28) @@AA @AA{} formatting_regions.texi(mymacro,28) @@ae @ae{} formatting_regions.texi(mymacro,28) @@oe @oe{} formatting_regions.texi(mymacro,28) @@AE @AE{} formatting_regions.texi(mymacro,28) @@OE @OE{} formatting_regions.texi(mymacro,28) @@o @o{} formatting_regions.texi(mymacro,28) @@O @O{} formatting_regions.texi(mymacro,28) @@ss @ss{} formatting_regions.texi(mymacro,28) @@l @l{} formatting_regions.texi(mymacro,28) @@L @L{} formatting_regions.texi(mymacro,28) @@exclamdown @exclamdown{} formatting_regions.texi(mymacro,28) @@questiondown @questiondown{} formatting_regions.texi(mymacro,28) @@pounds @pounds{} formatting_regions.texi(mymacro,28) @@registeredsymbol @registeredsymbol{} formatting_regions.texi(mymacro,28) @@ordf @ordf{} formatting_regions.texi(mymacro,28) @@ordm @ordm{} formatting_regions.texi(mymacro,28) @@comma @comma{} formatting_regions.texi(mymacro,28) @@quotedblleft @quotedblleft{} formatting_regions.texi(mymacro,28) @@quotedblright @quotedblright{} formatting_regions.texi(mymacro,28) @@quoteleft @quoteleft{} formatting_regions.texi(mymacro,28) @@quoteright @quoteright{} formatting_regions.texi(mymacro,28) @@quotedblbase @quotedblbase{} formatting_regions.texi(mymacro,28) @@quotesinglbase @quotesinglbase{} formatting_regions.texi(mymacro,28) @@guillemetleft @guillemetleft{} formatting_regions.texi(mymacro,28) @@guillemetright @guillemetright{} formatting_regions.texi(mymacro,28) @@guillemotleft @guillemotleft{} formatting_regions.texi(mymacro,28) @@guillemotright @guillemotright{} formatting_regions.texi(mymacro,28) @@guilsinglleft @guilsinglleft{} formatting_regions.texi(mymacro,28) @@guilsinglright @guilsinglright{} formatting_regions.texi(mymacro,28) @@textdegree @textdegree{} formatting_regions.texi(mymacro,28) @@euro @euro{} formatting_regions.texi(mymacro,28) @@arrow @arrow{} formatting_regions.texi(mymacro,28) @@leq @leq{} formatting_regions.texi(mymacro,28) @@geq @geq{} formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @code{@@acronym@{--a,an accronym@}} @acronym{--a,an accronym} formatting_regions.texi(mymacro,28) @code{@@acronym@{--a@}} @acronym{--a} formatting_regions.texi(mymacro,28) @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude Autonome @}} @abbr{@'E--. @comma{}A., @'Etude Autonome } formatting_regions.texi(mymacro,28) @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} formatting_regions.texi(mymacro,28) @code{@@asis@{--a@}} @asis{--a} formatting_regions.texi(mymacro,28) @code{@@b@{--a@}} @b{--a} formatting_regions.texi(mymacro,28) @code{@@cite@{--a@}} @cite{--a} formatting_regions.texi(mymacro,28) @code{@@code@{--a@}} @code{--a} formatting_regions.texi(mymacro,28) @code{@@command@{--a@}} @command{--a} formatting_regions.texi(mymacro,28) @code{@@ctrl@{--a@}} @ctrl{--a} formatting_regions.texi(mymacro,28) @code{@@dfn@{--a@}} @dfn{--a} formatting_regions.texi(mymacro,28) @code{@@dmn@{--a@}} @dmn{--a} formatting_regions.texi(mymacro,28) @code{@@email@{--a,--b@}} @email{--a,--b} formatting_regions.texi(mymacro,28) @code{@@email@{,--b@}} @email{,--b} formatting_regions.texi(mymacro,28) @code{@@email@{--a@}} @email{--a} formatting_regions.texi(mymacro,28) @code{@@emph@{--a@}} @emph{--a} formatting_regions.texi(mymacro,28) @code{@@env@{--a@}} @env{--a} formatting_regions.texi(mymacro,28) @code{@@file@{--a@}} @file{--a} formatting_regions.texi(mymacro,28) @code{@@i@{--a@}} @i{--a} formatting_regions.texi(mymacro,28) @code{@@kbd@{--a@}} @kbd{--a} formatting_regions.texi(mymacro,28) @code{@@key@{--a@}} @key{--a} formatting_regions.texi(mymacro,28) @code{@@math@{--a @{\frac@{1@}@{2@}@} @@minus@{@}@}} @math{--a {\frac{1}{2}} @minus{}} formatting_regions.texi(mymacro,28) @code{@@option@{--a@}} @option{--a} formatting_regions.texi(mymacro,28) @code{@@r@{--a@}} @r{--a} formatting_regions.texi(mymacro,28) @code{@@samp@{--a@}} @samp{--a} formatting_regions.texi(mymacro,28) @code{@@sc@{--a@}} @sc{--a} formatting_regions.texi(mymacro,28) @code{@@strong@{--a@}} @strong{--a} formatting_regions.texi(mymacro,28) @code{@@t@{--a@}} @t{--a} formatting_regions.texi(mymacro,28) @code{@@sansserif@{--a@}} @sansserif{--a} formatting_regions.texi(mymacro,28) @code{@@titlefont@{--a@}} @titlefont{--a} formatting_regions.texi(mymacro,28) @code{@@indicateurl@{--a@}} @indicateurl{--a} formatting_regions.texi(mymacro,28) @code{@@uref@{--a,--b@}} @uref{--a,--b} formatting_regions.texi(mymacro,28) @code{@@uref@{--a@}} @uref{--a} formatting_regions.texi(mymacro,28) @code{@@uref@{,--b@}} @uref{,--b} formatting_regions.texi(mymacro,28) @code{@@uref@{--a,--b,--c@}} @uref{--a,--b,--c} formatting_regions.texi(mymacro,28) @code{@@uref@{,--b,--c@}} @uref{,--b,--c} formatting_regions.texi(mymacro,28) @code{@@uref@{--a,,--c@}} @uref{--a,,--c} formatting_regions.texi(mymacro,28) @code{@@uref@{,,--c@}} @uref{,,--c} formatting_regions.texi(mymacro,28) @code{@@url@{--a,--b@}} @url{--a,--b} formatting_regions.texi(mymacro,28) @code{@@url@{--a,@}} @url{--a,} formatting_regions.texi(mymacro,28) @code{@@url@{,--b@}} @url{,--b} formatting_regions.texi(mymacro,28) @code{@@var@{--a@}} @var{--a} formatting_regions.texi(mymacro,28) @code{@@verb@{:--a:@}} @verb{:--a:} formatting_regions.texi(mymacro,28) @code{@@verb@{:a < & @@ % " -- b:@}} @verb{:a < & @ % " -- b:} formatting_regions.texi(mymacro,28) @code{@@w@{@}} @w{} formatting_regions.texi(mymacro,28) @code{@@H@{a@}} @H{a} formatting_regions.texi(mymacro,28) @code{@@H@{--a@}} @H{--a} formatting_regions.texi(mymacro,28) @code{@@dotaccent@{a@}} @dotaccent{a} formatting_regions.texi(mymacro,28) @code{@@dotaccent@{--a@}} @dotaccent{--a} formatting_regions.texi(mymacro,28) @code{@@ringaccent@{a@}} @ringaccent{a} formatting_regions.texi(mymacro,28) @code{@@ringaccent@{--a@}} @ringaccent{--a} formatting_regions.texi(mymacro,28) @code{@@tieaccent@{a@}} @tieaccent{a} formatting_regions.texi(mymacro,28) @code{@@tieaccent@{--a@}} @tieaccent{--a} formatting_regions.texi(mymacro,28) @code{@@u@{a@}} @u{a} formatting_regions.texi(mymacro,28) @code{@@u@{--a@}} @u{--a} formatting_regions.texi(mymacro,28) @code{@@ubaraccent@{a@}} @ubaraccent{a} formatting_regions.texi(mymacro,28) @code{@@ubaraccent@{--a@}} @ubaraccent{--a} formatting_regions.texi(mymacro,28) @code{@@udotaccent@{a@}} @udotaccent{a} formatting_regions.texi(mymacro,28) @code{@@udotaccent@{--a@}} @udotaccent{--a} formatting_regions.texi(mymacro,28) @code{@@v@{a@}} @v{a} formatting_regions.texi(mymacro,28) @code{@@v@{--a@}} @v{--a} formatting_regions.texi(mymacro,28) @code{@@,@{c@}} @,{c} formatting_regions.texi(mymacro,28) @code{@@,@{--c@}} @,{--c} formatting_regions.texi(mymacro,28) @code{@@ogonek@{a@}} @ogonek{a} formatting_regions.texi(mymacro,28) @code{@@ogonek@{--a@}} @ogonek{--a} formatting_regions.texi(mymacro,28) @code{@@footnote@{in footnote@}} @footnote{in footnote} formatting_regions.texi(mymacro,28) @code{@@footnote@{in footnote2@}} @footnote{in footnote2} formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @code{@@image@{f--ile@}} @image{f--ile} formatting_regions.texi(mymacro,28) @code{@@image@{f--ile,l--i@}} @image{f--ile,l--i} formatting_regions.texi(mymacro,28) @code{@@image@{f--ile,,l--e@}} @image{f--ile,,l--e} formatting_regions.texi(mymacro,28) @code{@@image@{f--ile,,,alt@}} @image{f--ile,,,alt} formatting_regions.texi(mymacro,28) @code{@@image@{f--ile,,,,e-d-xt@}} @image{f--ile,,,,e--xt} formatting_regions.texi(mymacro,28) @code{@@image@{f--ile,aze,az,alt,e--xt@}} @image{f--ile,aze,az,alt,e--xt} formatting_regions.texi(mymacro,28) @code{@@image@{f-ile,aze,,a--lt@}} @image{f-ile,aze,,a--lt} formatting_regions.texi(mymacro,28) @code{@@image@{@@file@{f--ile@}@@@@@@.,aze,az,alt,@@file@{file ext@} e--xt@@@}} @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@}} formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @sp 2 formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} formatting_regions.texi(mymacro,28) @clickstyle @result formatting_regions.texi(mymacro,28) After clickstyle @result{} formatting_regions.texi(mymacro,28) @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} formatting_regions.texi(mymacro,28) @clickstyle @arrow formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @quotation formatting_regions.texi(mymacro,28) A quot---ation formatting_regions.texi(mymacro,28) @end quotation formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @quotation Note formatting_regions.texi(mymacro,28) A Note formatting_regions.texi(mymacro,28) @end quotation formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @quotation note formatting_regions.texi(mymacro,28) A note formatting_regions.texi(mymacro,28) @end quotation formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @quotation Caution formatting_regions.texi(mymacro,28) Caution formatting_regions.texi(mymacro,28) @end quotation formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @quotation Important formatting_regions.texi(mymacro,28) Important formatting_regions.texi(mymacro,28) @end quotation formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @quotation Tip formatting_regions.texi(mymacro,28) a Tip formatting_regions.texi(mymacro,28) @end quotation formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @quotation Warning formatting_regions.texi(mymacro,28) a Warning. formatting_regions.texi(mymacro,28) @end quotation formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @quotation something @'e @TeX{} formatting_regions.texi(mymacro,28) The something @'e @TeX{} is here. formatting_regions.texi(mymacro,28) @end quotation formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @quotation @@ at the end of line @ formatting_regions.texi(mymacro,28) A @@ at the end of the @@quotation line. formatting_regions.texi(mymacro,28) @end quotation formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @quotation something, other thing formatting_regions.texi(mymacro,28) something, other thing formatting_regions.texi(mymacro,28) @end quotation formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @quotation Note, the note formatting_regions.texi(mymacro,28) Note, the note formatting_regions.texi(mymacro,28) @end quotation formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @quotation formatting_regions.texi(mymacro,28) @end quotation formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @quotation Empty formatting_regions.texi(mymacro,28) @end quotation formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @quotation @asis{} formatting_regions.texi(mymacro,28) @end quotation formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @quotation @* formatting_regions.texi(mymacro,28) @end quotation formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @smallquotation formatting_regions.texi(mymacro,28) A small quot---ation formatting_regions.texi(mymacro,28) @end smallquotation formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @smallquotation Note formatting_regions.texi(mymacro,28) A small Note formatting_regions.texi(mymacro,28) @end smallquotation formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @smallquotation something, other thing formatting_regions.texi(mymacro,28) something, other thing formatting_regions.texi(mymacro,28) @end smallquotation formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @itemize formatting_regions.texi(mymacro,28) @item i--temize formatting_regions.texi(mymacro,28) @end itemize formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @itemize + formatting_regions.texi(mymacro,28) @item i--tem + formatting_regions.texi(mymacro,28) @end itemize formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @itemize @bullet formatting_regions.texi(mymacro,28) @item b--ullet formatting_regions.texi(mymacro,28) @end itemize formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @itemize @minus formatting_regions.texi(mymacro,28) @item minu--s formatting_regions.texi(mymacro,28) @end itemize formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @itemize @emph formatting_regions.texi(mymacro,28) @item e--mph item formatting_regions.texi(mymacro,28) @end itemize formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @itemize @emph{after emph} formatting_regions.texi(mymacro,28) @c comment in itemize formatting_regions.texi(mymacro,28) @item e--mph item formatting_regions.texi(mymacro,28) @end itemize formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @itemize @bullet{} a--n itemize line formatting_regions.texi(mymacro,28) @cindex index entry within itemize formatting_regions.texi(mymacro,28) @item i--tem 1 formatting_regions.texi(mymacro,28) @item i--tem 2 formatting_regions.texi(mymacro,28) @end itemize formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @enumerate formatting_regions.texi(mymacro,28) @item e--numerate formatting_regions.texi(mymacro,28) @end enumerate formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @multitable @columnfractions 6 7 formatting_regions.texi(mymacro,28) @headitem mu--ltitable headitem @tab another tab formatting_regions.texi(mymacro,28) @item mu--ltitable item @tab multitable tab formatting_regions.texi(mymacro,28) @c comment in multitable formatting_regions.texi(mymacro,28) @item mu--ltitable item 2 @tab multitable tab 2 formatting_regions.texi(mymacro,28) @cindex index entry within multitable formatting_regions.texi(mymacro,28) @item lone mu--ltitable item formatting_regions.texi(mymacro,28) @end multitable formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @multitable {truc} {bidule} formatting_regions.texi(mymacro,28) @item truc @tab bidule formatting_regions.texi(mymacro,28) @end multitable formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @example formatting_regions.texi(mymacro,28) e--xample some formatting_regions.texi(mymacro,28) text formatting_regions.texi(mymacro,28) @end example formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @smallexample formatting_regions.texi(mymacro,28) s--mallexample formatting_regions.texi(mymacro,28) @end smallexample formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @display formatting_regions.texi(mymacro,28) d--isplay formatting_regions.texi(mymacro,28) @end display formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @smalldisplay formatting_regions.texi(mymacro,28) s--malldisplay formatting_regions.texi(mymacro,28) @end smalldisplay formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @lisp formatting_regions.texi(mymacro,28) l--isp formatting_regions.texi(mymacro,28) @end lisp formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @smalllisp formatting_regions.texi(mymacro,28) s--malllisp formatting_regions.texi(mymacro,28) @end smalllisp formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @format formatting_regions.texi(mymacro,28) f--ormat formatting_regions.texi(mymacro,28) @end format formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @smallformat formatting_regions.texi(mymacro,28) s--mallformat formatting_regions.texi(mymacro,28) @end smallformat formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @deffn c--ategory d--effn_name a--rguments... formatting_regions.texi(mymacro,28) d--effn formatting_regions.texi(mymacro,28) @end deffn formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @deffn cate--gory de--ffn_name ar--guments @ formatting_regions.texi(mymacro,28) more args @* even more so formatting_regions.texi(mymacro,28) def--fn formatting_regions.texi(mymacro,28) @end deffn formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @deffn fset @var{i} a g formatting_regions.texi(mymacro,28) @cindex index entry within deffn formatting_regions.texi(mymacro,28) @deffnx {cmde} truc {} formatting_regions.texi(mymacro,28) @deffnx Command {log trap} {} formatting_regions.texi(mymacro,28) @deffnx Command { log trap1} {} formatting_regions.texi(mymacro,28) @deffnx Command {log trap2 } {} formatting_regions.texi(mymacro,28) @deffnx cmde @b{id ule} truc formatting_regions.texi(mymacro,28) @deffnx cmde2 @b{id @samp{i} ule} truc formatting_regions.texi(mymacro,28) @deffnx @b{id @samp{i} ule} formatting_regions.texi(mymacro,28) @deffnx formatting_regions.texi(mymacro,28) @deffnx aaa formatting_regions.texi(mymacro,28) @deffnx {} {} formatting_regions.texi(mymacro,28) @deffnx{} formatting_regions.texi(mymacro,28) @deffnx{} machin formatting_regions.texi(mymacro,28) @deffnx{} {bidule machin} formatting_regions.texi(mymacro,28) @deffnx{truc} machin formatting_regions.texi(mymacro,28) @deffnx{truc} { } formatting_regions.texi(mymacro,28) @deffnx{truc} followed by a comment formatting_regions.texi(mymacro,28) @c comment formatting_regions.texi(mymacro,28) @deffnx{truc} formatting_regions.texi(mymacro,28) @deffnx{} {} formatting_regions.texi(mymacro,28) @deffnx {truc} a b c d e @b{f g} {h i} formatting_regions.texi(mymacro,28) @deffnx {truc} deffnx before end deffn formatting_regions.texi(mymacro,28) @end deffn formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @deffn empty deffn formatting_regions.texi(mymacro,28) @end deffn formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @deffn empty deffn with deffnx formatting_regions.texi(mymacro,28) @c comment between deffn and deffnx formatting_regions.texi(mymacro,28) @deffnx empty deffnx formatting_regions.texi(mymacro,28) @end deffn formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @deffn fset @var{i} a g formatting_regions.texi(mymacro,28) @deffnx {cmde} truc {} formatting_regions.texi(mymacro,28) @c comment formatting_regions.texi(mymacro,28) text in def item for second def item formatting_regions.texi(mymacro,28) @end deffn formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @defvr c--ategory d--efvr_name formatting_regions.texi(mymacro,28) d--efvr formatting_regions.texi(mymacro,28) @end defvr formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... formatting_regions.texi(mymacro,28) d--eftypefn formatting_regions.texi(mymacro,28) @end deftypefn formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... formatting_regions.texi(mymacro,28) d--eftypeop formatting_regions.texi(mymacro,28) @end deftypeop formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @deftypevr c--ategory t--ype d--eftypevr_name formatting_regions.texi(mymacro,28) d--eftypevr formatting_regions.texi(mymacro,28) @end deftypevr formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @defcv c--ategory c--lass d--efcv_name formatting_regions.texi(mymacro,28) d--efcv formatting_regions.texi(mymacro,28) @end defcv formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @defop c--ategory c--lass d--efop_name a--rguments... formatting_regions.texi(mymacro,28) d--efop formatting_regions.texi(mymacro,28) @end defop formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @deftp c--ategory d--eftp_name a--ttributes... formatting_regions.texi(mymacro,28) d--eftp formatting_regions.texi(mymacro,28) @end deftp formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @defun d--efun_name a--rguments... formatting_regions.texi(mymacro,28) d--efun formatting_regions.texi(mymacro,28) @end defun formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @defmac d--efmac_name a--rguments... formatting_regions.texi(mymacro,28) d--efmac formatting_regions.texi(mymacro,28) @end defmac formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @defspec d--efspec_name a--rguments... formatting_regions.texi(mymacro,28) d--efspec formatting_regions.texi(mymacro,28) @end defspec formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @defvar d--efvar_name argvar argvar1 formatting_regions.texi(mymacro,28) d--efvar formatting_regions.texi(mymacro,28) @end defvar formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @defopt d--efopt_name formatting_regions.texi(mymacro,28) d--efopt formatting_regions.texi(mymacro,28) @end defopt formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @deftypefun t--ype d--eftypefun_name a--rguments... formatting_regions.texi(mymacro,28) d--eftypefun formatting_regions.texi(mymacro,28) @end deftypefun formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @deftypevar t--ype d--eftypevar_name formatting_regions.texi(mymacro,28) d--eftypevar formatting_regions.texi(mymacro,28) @end deftypevar formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @defivar c--lass d--efivar_name formatting_regions.texi(mymacro,28) d--efivar formatting_regions.texi(mymacro,28) @end defivar formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @deftypeivar c--lass t--ype d--eftypeivar_name formatting_regions.texi(mymacro,28) d--eftypeivar formatting_regions.texi(mymacro,28) @end deftypeivar formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @defmethod c--lass d--efmethod_name a--rguments... formatting_regions.texi(mymacro,28) d--efmethod formatting_regions.texi(mymacro,28) @end defmethod formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... formatting_regions.texi(mymacro,28) d--eftypemethod formatting_regions.texi(mymacro,28) @end deftypemethod formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @code{@@xref@{c---hapter@@@@, cross r---ef name@@@@, t---itle@@@@, file n---ame@@@@, ma---nual@@@@@}} @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@}. formatting_regions.texi(mymacro,28) @code{@@ref@{chapter, cross ref name, title, file name, manual@}} @ref{chapter, cross ref name, title, file name, manual} formatting_regions.texi(mymacro,28) @code{@@pxref@{chapter, cross ref name, title, file name, manual@}} @pxref{chapter, cross ref name, title, file name, manual} formatting_regions.texi(mymacro,28) @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @code{@@ref@{chapter@}} @ref{chapter} formatting_regions.texi(mymacro,28) @code{@@xref@{chapter@}} @xref{chapter}. formatting_regions.texi(mymacro,28) @code{@@pxref@{chapter@}} @pxref{chapter} formatting_regions.texi(mymacro,28) @code{@@ref@{s--ect@@comma@{@}ion@}} @ref{s--ect@comma{}ion} formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @code{@@ref@{s--ect@@comma@{@}ion, a @@comma@{@} in cross formatting_regions.texi(mymacro,28) ref, a comma@@comma@{@} in title, a comma@@comma@{@} in file, a @@comma@{@} in manual name @}} formatting_regions.texi(mymacro,28) @ref{s--ect@comma{}ion, a @comma{} in cross formatting_regions.texi(mymacro,28) ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @code{@@ref@{chapter,cross ref name@}} @ref{chapter,cross ref name} formatting_regions.texi(mymacro,28) @code{@@ref@{chapter,,title@}} @ref{chapter,,title} formatting_regions.texi(mymacro,28) @code{@@ref@{chapter,,,file name@}} @ref{chapter,,,file name} formatting_regions.texi(mymacro,28) @code{@@ref@{chapter,,,,manual@}} @ref{chapter,,,,manual} formatting_regions.texi(mymacro,28) @code{@@ref@{chapter,cross ref name,title,@}} @ref{chapter,cross ref name,title,} formatting_regions.texi(mymacro,28) @code{@@ref@{chapter,cross ref name,,file name@}} @ref{chapter,cross ref name,,file name} formatting_regions.texi(mymacro,28) @code{@@ref@{chapter,cross ref name,,,manual@}} @ref{chapter,cross ref name,,,manual} formatting_regions.texi(mymacro,28) @code{@@ref@{chapter,cross ref name,title,file name@}} @ref{chapter,cross ref name,title,file name} formatting_regions.texi(mymacro,28) @code{@@ref@{chapter,cross ref name,title,,manual@}} @ref{chapter,cross ref name,title,,manual} formatting_regions.texi(mymacro,28) @code{@@ref@{chapter,cross ref name,title, file name, manual@}} @ref{chapter,cross ref name,title, file name, manual} formatting_regions.texi(mymacro,28) @code{@@ref@{chapter,,title,file name@}} @ref{chapter,,title,file name} formatting_regions.texi(mymacro,28) @code{@@ref@{chapter,,title,,manual@}} @ref{chapter,,title,,manual} formatting_regions.texi(mymacro,28) @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} formatting_regions.texi(mymacro,28) @code{@@ref@{chapter,,,file name,manual@}} @ref{chapter,,,file name,manual} formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @code{@@ref@{(pman)anode,cross ref name@}} @ref{(pman)anode,cross ref name} formatting_regions.texi(mymacro,28) @code{@@ref@{(pman)anode,,title@}} @ref{(pman)anode,,title} formatting_regions.texi(mymacro,28) @code{@@ref@{(pman)anode,,,file name@}} @ref{(pman)anode,,,file name} formatting_regions.texi(mymacro,28) @code{@@ref@{(pman)anode,,,,manual@}} @ref{(pman)anode,,,,manual} formatting_regions.texi(mymacro,28) @code{@@ref@{(pman)anode,cross ref name,title,@}} @ref{(pman)anode,cross ref name,title,} formatting_regions.texi(mymacro,28) @code{@@ref@{(pman)anode,cross ref name,,file name@}} @ref{(pman)anode,cross ref name,,file name} formatting_regions.texi(mymacro,28) @code{@@ref@{(pman)anode,cross ref name,,,manual@}} @ref{(pman)anode,cross ref name,,,manual} formatting_regions.texi(mymacro,28) @code{@@ref@{(pman)anode,cross ref name,title,file name@}} @ref{(pman)anode,cross ref name,title,file name} formatting_regions.texi(mymacro,28) @code{@@ref@{(pman)anode,cross ref name,title,,manual@}} @ref{(pman)anode,cross ref name,title,,manual} formatting_regions.texi(mymacro,28) @code{@@ref@{(pman)anode,cross ref name,title, file name, manual@}} @ref{(pman)anode,cross ref name,title, file name, manual} formatting_regions.texi(mymacro,28) @code{@@ref@{(pman)anode,,title,file name@}} @ref{(pman)anode,,title,file name} formatting_regions.texi(mymacro,28) @code{@@ref@{(pman)anode,,title,,manual@}} @ref{(pman)anode,,title,,manual} formatting_regions.texi(mymacro,28) @code{@@ref@{(pman)anode,,title, file name, manual@}} @ref{(pman)anode,,title, file name, manual} formatting_regions.texi(mymacro,28) @code{@@ref@{(pman)anode,,,file name,manual@}} @ref{(pman)anode,,,file name,manual} formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} formatting_regions.texi(mymacro,28) @code{@@inforef@{chapter@}} @inforef{chapter} formatting_regions.texi(mymacro,28) @code{@@inforef@{chapter, cross ref name@}} @inforef{chapter, cross ref name} formatting_regions.texi(mymacro,28) @code{@@inforef@{chapter,,file name@}} @inforef{chapter,,file name} formatting_regions.texi(mymacro,28) @code{@@inforef@{node, cross ref name, file name@}} @inforef{node, cross ref name, file name} formatting_regions.texi(mymacro,28) @code{@@inforef@{node@}} @inforef{node} formatting_regions.texi(mymacro,28) @code{@@inforef@{node, cross ref name@}} @inforef{node, cross ref name} formatting_regions.texi(mymacro,28) @code{@@inforef@{node,,file name@}} @inforef{node,,file name} formatting_regions.texi(mymacro,28) @code{@@inforef@{chapter, cross ref name, file name, spurious arg@}} @inforef{chapter, cross ref name, file name, spurious arg} formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @code{@@inforef@{s--ect@@comma@{@}ion, a @@comma@{@} in cross formatting_regions.texi(mymacro,28) ref, a comma@@comma@{@} in file@}} formatting_regions.texi(mymacro,28) @inforef{s--ect@comma{}ion, a @comma{} in cross formatting_regions.texi(mymacro,28) ref, a comma@comma{} in file} formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @table @bullet formatting_regions.texi(mymacro,28) @c comment in table formatting_regions.texi(mymacro,28) @item a formatting_regions.texi(mymacro,28) l--ine formatting_regions.texi(mymacro,28) @end table formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @vtable @asis formatting_regions.texi(mymacro,28) @item a formatting_regions.texi(mymacro,28) @c comment between item and itemx formatting_regions.texi(mymacro,28) @itemx b formatting_regions.texi(mymacro,28) l--ine formatting_regions.texi(mymacro,28) @end vtable formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @ftable @minus formatting_regions.texi(mymacro,28) @item a formatting_regions.texi(mymacro,28) @cindex index entry between item and itemx formatting_regions.texi(mymacro,28) @itemx b formatting_regions.texi(mymacro,28) l--ine formatting_regions.texi(mymacro,28) @end ftable formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @cartouche formatting_regions.texi(mymacro,28) c--artouche formatting_regions.texi(mymacro,28) @end cartouche formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @flushleft formatting_regions.texi(mymacro,28) f--lushleft formatting_regions.texi(mymacro,28) @end flushleft formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @flushright formatting_regions.texi(mymacro,28) f--lushright formatting_regions.texi(mymacro,28) @end flushright formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @center ce--ntered line formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @verbatiminclude simplest.texi formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @verbatim formatting_regions.texi(mymacro,28) in verbatim '' formatting_regions.texi(mymacro,28) @end verbatim formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @html formatting_regions.texi(mymacro,28) html '' formatting_regions.texi(mymacro,28) @end html formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @majorheading majorheading formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @chapheading chapheading formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @heading heading formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @subheading subheading formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @subsubheading subsubheading formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @c makeinfo cannot handle that formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @code{@@acronym@{--a,an accronym @@comma@{@} @@enddots@{@}@}} @acronym{--a,an accronym @comma{} @enddots{}} formatting_regions.texi(mymacro,28) @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude--@@comma@{@} @@b@{Autonome@} @}} @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } formatting_regions.texi(mymacro,28) @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @code{@@math@{--a@@minus@{@} @{\frac@{1@}@{2@}@}@}} @math{--a@minus{} {\frac{1}{2}}} formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @code{@@image@{f-ile,,,alt@@verb@{:jk _" %@:@}@}} @image{f-ile,,,alt@verb{:jk _" %@:}} formatting_regions.texi(mymacro,28) @code{@@image@{f--ile,aze,az,@@verb@{:jk _" %@@:@} @@b@{in b "@},e--xt@}} @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} formatting_regions.texi(mymacro,28) @code{@@image@{file@@verb@{:jk _" %@@:@},,,alt@@verb@{:jk _" %@@:@}@}} @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @set invalid formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @c invalid texinfo formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) Somehow invalid use of @@,:@* formatting_regions.texi(mymacro,28) @@, @, formatting_regions.texi(mymacro,28) @* formatting_regions.texi(mymacro,28) @@,@@"u @,@"u formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) Invalid use of @@':@* formatting_regions.texi(mymacro,28) @@' @' formatting_regions.texi(mymacro,28) @* formatting_regions.texi(mymacro,28) @@'@@"u @'@"u formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @c only i or j as arg formatting_regions.texi(mymacro,28) @@dotless@{truc@} @dotless{truc} formatting_regions.texi(mymacro,28) @@dotless@{ij@} @dotless{ij} formatting_regions.texi(mymacro,28) @code{@@dotless@{--a@}} @dotless{--a} formatting_regions.texi(mymacro,28) @code{@@dotless@{a@}} @dotless{a} formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @c braces missing formatting_regions.texi(mymacro,28) @@TeX, but without brace @TeX formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @c unknown command formatting_regions.texi(mymacro,28) @code{@@#} @# formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @c no arg formatting_regions.texi(mymacro,28) @code{@@w@{--a@}} @w{--a} formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @c no file formatting_regions.texi(mymacro,28) @code{@@image@{,1--xt@}} @image{,1--xt} formatting_regions.texi(mymacro,28) @code{@@image@{,,2--xt@}} @image{,,2--xt} formatting_regions.texi(mymacro,28) @code{@@image@{,,,3--xt@}} @image{,,,3--xt} formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @sp formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @c braces missing formatting_regions.texi(mymacro,28) @itemize @emph after emph formatting_regions.texi(mymacro,28) @item e--mph item formatting_regions.texi(mymacro,28) @end itemize formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @c braces missing formatting_regions.texi(mymacro,28) @itemize @bullet a--n itemize line formatting_regions.texi(mymacro,28) @item i--tem 1 formatting_regions.texi(mymacro,28) @item i--tem 2 formatting_regions.texi(mymacro,28) @end itemize formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @c deffnx after deff lines formatting_regions.texi(mymacro,28) @deffn fun formatting_regions.texi(mymacro,28) @deffnx truc machin bidule chose and } formatting_regions.texi(mymacro,28) @deffnx truc machin bidule chose and } after formatting_regions.texi(mymacro,28) @deffnx truc machin bidule chose and { formatting_regions.texi(mymacro,28) @deffnx truc machin bidule chose and { and after formatting_regions.texi(mymacro,28) @deffnx {truc} followed by a comment formatting_regions.texi(mymacro,28) @c comment formatting_regions.texi(mymacro,28) Various deff lines formatting_regions.texi(mymacro,28) @deffnx {truc} after a deff item formatting_regions.texi(mymacro,28) @end deffn formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @c node is non existent, or missing first arg formatting_regions.texi(mymacro,28) @code{@@ref@{node@}} @ref{node} formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @code{@@ref@{,cross ref name@}} @ref{,cross ref name} formatting_regions.texi(mymacro,28) @code{@@ref@{,,title@}} @ref{,,title} formatting_regions.texi(mymacro,28) @code{@@ref@{,,,file name@}} @ref{,,,file name} formatting_regions.texi(mymacro,28) @code{@@ref@{,,,,manual@}} @ref{,,,,manual} formatting_regions.texi(mymacro,28) @code{@@ref@{node,cross ref name@}} @ref{node,cross ref name} formatting_regions.texi(mymacro,28) @code{@@ref@{node,,title@}} @ref{node,,title} formatting_regions.texi(mymacro,28) @code{@@ref@{node,,,file name@}} @ref{node,,,file name} formatting_regions.texi(mymacro,28) @code{@@ref@{node,,,,manual@}} @ref{node,,,,manual} formatting_regions.texi(mymacro,28) @code{@@ref@{node,cross ref name,title,@}} @ref{node,cross ref name,title,} formatting_regions.texi(mymacro,28) @code{@@ref@{node,cross ref name,,file name@}} @ref{node,cross ref name,,file name} formatting_regions.texi(mymacro,28) @code{@@ref@{node,cross ref name,,,manual@}} @ref{node,cross ref name,,,manual} formatting_regions.texi(mymacro,28) @code{@@ref@{node,cross ref name,title,file name@}} @ref{node,cross ref name,title,file name} formatting_regions.texi(mymacro,28) @code{@@ref@{node,cross ref name,title,,manual@}} @ref{node,cross ref name,title,,manual} formatting_regions.texi(mymacro,28) @code{@@ref@{node,cross ref name,title, file name, manual@}} @ref{node,cross ref name,title, file name, manual} formatting_regions.texi(mymacro,28) @code{@@ref@{node,,title,file name@}} @ref{node,,title,file name} formatting_regions.texi(mymacro,28) @code{@@ref@{node,,title,,manual@}} @ref{node,,title,,manual} formatting_regions.texi(mymacro,28) @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} formatting_regions.texi(mymacro,28) @code{@@ref@{node,,title, file name, manual@}} @ref{node,,title, file name, manual} formatting_regions.texi(mymacro,28) @code{@@ref@{node,,,file name,manual@}} @ref{node,,,file name,manual} formatting_regions.texi(mymacro,28) @code{@@ref@{,cross ref name,title,@}} @ref{,cross ref name,title,} formatting_regions.texi(mymacro,28) @code{@@ref@{,cross ref name,,file name@}} @ref{,cross ref name,,file name} formatting_regions.texi(mymacro,28) @code{@@ref@{,cross ref name,,,manual@}} @ref{,cross ref name,,,manual} formatting_regions.texi(mymacro,28) @code{@@ref@{,cross ref name,title,file name@}} @ref{,cross ref name,title,file name} formatting_regions.texi(mymacro,28) @code{@@ref@{,cross ref name,title,,manual@}} @ref{,cross ref name,title,,manual} formatting_regions.texi(mymacro,28) @code{@@ref@{,cross ref name,title, file name, manual@}} @ref{,cross ref name,title, file name, manual} formatting_regions.texi(mymacro,28) @code{@@ref@{,,title,file name@}} @ref{,,title,file name} formatting_regions.texi(mymacro,28) @code{@@ref@{,,title,,manual@}} @ref{,,title,,manual} formatting_regions.texi(mymacro,28) @code{@@ref@{,,title, file name, manual@}} @ref{,,title, file name, manual} formatting_regions.texi(mymacro,28) @code{@@ref@{,,,file name,manual@}} @ref{,,,file name,manual} formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) @code{@@inforef@{,cross ref name @}} @inforef{,cross ref name } formatting_regions.texi(mymacro,28) @code{@@inforef@{,,file name@}} @inforef{,,file name} formatting_regions.texi(mymacro,28) @code{@@inforef@{,cross ref name, file name@}} @inforef{,cross ref name, file name} formatting_regions.texi(mymacro,28) @code{@@inforef@{@}} @inforef{} formatting_regions.texi(mymacro,28) formatting_regions.texi(mymacro,28) formatting_regions.texi(,29) @end copying formatting_regions.texi(,30) formatting_regions.texi(,31) @titlepage formatting_regions.texi(,32) @title title --a formatting_regions.texi(,33) @subtitle formatting subtitle --a formatting_regions.texi(,34) @subtitle subtitle 2 --a formatting_regions.texi(,35) @author author1 --a with accents in name T@'e@,ca formatting_regions.texi(,36) @author author2 --a formatting_regions.texi(,37) formatting_regions.texi(,38) Titlepage formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) < formatting_regions.texi(mymacro,39) > formatting_regions.texi(mymacro,39) " formatting_regions.texi(mymacro,39) & formatting_regions.texi(mymacro,39) ' formatting_regions.texi(mymacro,39) ` formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) ``simple-double--three---four----''@* formatting_regions.texi(mymacro,39) code: @code{``simple-double--three---four----''} @* formatting_regions.texi(mymacro,39) asis: @asis{``simple-double--three---four----''} @* formatting_regions.texi(mymacro,39) strong: @strong{``simple-double--three---four----''} @* formatting_regions.texi(mymacro,39) kbd: @kbd{``simple-double--three---four----''} @* formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) `@w{}`simple-double-@w{}-three---four----'@w{}'@* formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @cindex --option formatting_regions.texi(mymacro,39) @cindex `` formatting_regions.texi(mymacro,39) @findex `` formatting_regions.texi(mymacro,39) @findex --foption formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @@"u @"u formatting_regions.texi(mymacro,39) @@"@{U@} @"{U} formatting_regions.texi(mymacro,39) @@~n @~n formatting_regions.texi(mymacro,39) @@^a @^a formatting_regions.texi(mymacro,39) @@'e @'e formatting_regions.texi(mymacro,39) @@=o @=o formatting_regions.texi(mymacro,39) @@`i @`i formatting_regions.texi(mymacro,39) @@'@{e@} @'{e} formatting_regions.texi(mymacro,39) @@'@{@@dotless@{i@}@} @'{@dotless{i}} formatting_regions.texi(mymacro,39) @@dotless@{i@} @dotless{i} formatting_regions.texi(mymacro,39) @@dotless@{j@} @dotless{j} formatting_regions.texi(mymacro,39) @@`@{@@=E@} @`{@=E} formatting_regions.texi(mymacro,39) @@l@{@} @l{} formatting_regions.texi(mymacro,39) @@,@{@@'C@} @,{@'C} formatting_regions.texi(mymacro,39) @@,c @,c formatting_regions.texi(mymacro,39) @@,c@@"u @,c@"u @* formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @@* @* formatting_regions.texi(mymacro,39) @@ followed by a space formatting_regions.texi(mymacro,39) @ formatting_regions.texi(mymacro,39) @@ followed by a tab formatting_regions.texi(mymacro,39) @ formatting_regions.texi(mymacro,39) @@ followed by a new line formatting_regions.texi(mymacro,39) @ formatting_regions.texi(mymacro,39) @code{@@-} @- formatting_regions.texi(mymacro,39) @code{@@|} @| formatting_regions.texi(mymacro,39) @code{@@:} @: formatting_regions.texi(mymacro,39) @code{@@!} @! formatting_regions.texi(mymacro,39) @code{@@?} @? formatting_regions.texi(mymacro,39) @code{@@.} @. formatting_regions.texi(mymacro,39) @code{@@@@} @@ formatting_regions.texi(mymacro,39) @code{@@@}} @} formatting_regions.texi(mymacro,39) @code{@@@{} @{ formatting_regions.texi(mymacro,39) @code{@@/} @/ formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) foo vs.@: bar. formatting_regions.texi(mymacro,39) colon :@:And something else. formatting_regions.texi(mymacro,39) semi colon ;@:. formatting_regions.texi(mymacro,39) And ? ?@:. formatting_regions.texi(mymacro,39) Now ! !@:@@ formatting_regions.texi(mymacro,39) but , ,@: formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @@TeX @TeX{} formatting_regions.texi(mymacro,39) @@LaTeX @LaTeX{} formatting_regions.texi(mymacro,39) @@bullet @bullet{} formatting_regions.texi(mymacro,39) @@copyright @copyright{} formatting_regions.texi(mymacro,39) @@dots @dots{} formatting_regions.texi(mymacro,39) @@enddots @enddots{} formatting_regions.texi(mymacro,39) @@equiv @equiv{} formatting_regions.texi(mymacro,39) @@error @error{} formatting_regions.texi(mymacro,39) @@expansion @expansion{} formatting_regions.texi(mymacro,39) @@minus @minus{} formatting_regions.texi(mymacro,39) @@point @point{} formatting_regions.texi(mymacro,39) @@print @print{} formatting_regions.texi(mymacro,39) @@result @result{} formatting_regions.texi(mymacro,39) @@today @today{} formatting_regions.texi(mymacro,39) @@aa @aa{} formatting_regions.texi(mymacro,39) @@AA @AA{} formatting_regions.texi(mymacro,39) @@ae @ae{} formatting_regions.texi(mymacro,39) @@oe @oe{} formatting_regions.texi(mymacro,39) @@AE @AE{} formatting_regions.texi(mymacro,39) @@OE @OE{} formatting_regions.texi(mymacro,39) @@o @o{} formatting_regions.texi(mymacro,39) @@O @O{} formatting_regions.texi(mymacro,39) @@ss @ss{} formatting_regions.texi(mymacro,39) @@l @l{} formatting_regions.texi(mymacro,39) @@L @L{} formatting_regions.texi(mymacro,39) @@exclamdown @exclamdown{} formatting_regions.texi(mymacro,39) @@questiondown @questiondown{} formatting_regions.texi(mymacro,39) @@pounds @pounds{} formatting_regions.texi(mymacro,39) @@registeredsymbol @registeredsymbol{} formatting_regions.texi(mymacro,39) @@ordf @ordf{} formatting_regions.texi(mymacro,39) @@ordm @ordm{} formatting_regions.texi(mymacro,39) @@comma @comma{} formatting_regions.texi(mymacro,39) @@quotedblleft @quotedblleft{} formatting_regions.texi(mymacro,39) @@quotedblright @quotedblright{} formatting_regions.texi(mymacro,39) @@quoteleft @quoteleft{} formatting_regions.texi(mymacro,39) @@quoteright @quoteright{} formatting_regions.texi(mymacro,39) @@quotedblbase @quotedblbase{} formatting_regions.texi(mymacro,39) @@quotesinglbase @quotesinglbase{} formatting_regions.texi(mymacro,39) @@guillemetleft @guillemetleft{} formatting_regions.texi(mymacro,39) @@guillemetright @guillemetright{} formatting_regions.texi(mymacro,39) @@guillemotleft @guillemotleft{} formatting_regions.texi(mymacro,39) @@guillemotright @guillemotright{} formatting_regions.texi(mymacro,39) @@guilsinglleft @guilsinglleft{} formatting_regions.texi(mymacro,39) @@guilsinglright @guilsinglright{} formatting_regions.texi(mymacro,39) @@textdegree @textdegree{} formatting_regions.texi(mymacro,39) @@euro @euro{} formatting_regions.texi(mymacro,39) @@arrow @arrow{} formatting_regions.texi(mymacro,39) @@leq @leq{} formatting_regions.texi(mymacro,39) @@geq @geq{} formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @code{@@acronym@{--a,an accronym@}} @acronym{--a,an accronym} formatting_regions.texi(mymacro,39) @code{@@acronym@{--a@}} @acronym{--a} formatting_regions.texi(mymacro,39) @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude Autonome @}} @abbr{@'E--. @comma{}A., @'Etude Autonome } formatting_regions.texi(mymacro,39) @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} formatting_regions.texi(mymacro,39) @code{@@asis@{--a@}} @asis{--a} formatting_regions.texi(mymacro,39) @code{@@b@{--a@}} @b{--a} formatting_regions.texi(mymacro,39) @code{@@cite@{--a@}} @cite{--a} formatting_regions.texi(mymacro,39) @code{@@code@{--a@}} @code{--a} formatting_regions.texi(mymacro,39) @code{@@command@{--a@}} @command{--a} formatting_regions.texi(mymacro,39) @code{@@ctrl@{--a@}} @ctrl{--a} formatting_regions.texi(mymacro,39) @code{@@dfn@{--a@}} @dfn{--a} formatting_regions.texi(mymacro,39) @code{@@dmn@{--a@}} @dmn{--a} formatting_regions.texi(mymacro,39) @code{@@email@{--a,--b@}} @email{--a,--b} formatting_regions.texi(mymacro,39) @code{@@email@{,--b@}} @email{,--b} formatting_regions.texi(mymacro,39) @code{@@email@{--a@}} @email{--a} formatting_regions.texi(mymacro,39) @code{@@emph@{--a@}} @emph{--a} formatting_regions.texi(mymacro,39) @code{@@env@{--a@}} @env{--a} formatting_regions.texi(mymacro,39) @code{@@file@{--a@}} @file{--a} formatting_regions.texi(mymacro,39) @code{@@i@{--a@}} @i{--a} formatting_regions.texi(mymacro,39) @code{@@kbd@{--a@}} @kbd{--a} formatting_regions.texi(mymacro,39) @code{@@key@{--a@}} @key{--a} formatting_regions.texi(mymacro,39) @code{@@math@{--a @{\frac@{1@}@{2@}@} @@minus@{@}@}} @math{--a {\frac{1}{2}} @minus{}} formatting_regions.texi(mymacro,39) @code{@@option@{--a@}} @option{--a} formatting_regions.texi(mymacro,39) @code{@@r@{--a@}} @r{--a} formatting_regions.texi(mymacro,39) @code{@@samp@{--a@}} @samp{--a} formatting_regions.texi(mymacro,39) @code{@@sc@{--a@}} @sc{--a} formatting_regions.texi(mymacro,39) @code{@@strong@{--a@}} @strong{--a} formatting_regions.texi(mymacro,39) @code{@@t@{--a@}} @t{--a} formatting_regions.texi(mymacro,39) @code{@@sansserif@{--a@}} @sansserif{--a} formatting_regions.texi(mymacro,39) @code{@@titlefont@{--a@}} @titlefont{--a} formatting_regions.texi(mymacro,39) @code{@@indicateurl@{--a@}} @indicateurl{--a} formatting_regions.texi(mymacro,39) @code{@@uref@{--a,--b@}} @uref{--a,--b} formatting_regions.texi(mymacro,39) @code{@@uref@{--a@}} @uref{--a} formatting_regions.texi(mymacro,39) @code{@@uref@{,--b@}} @uref{,--b} formatting_regions.texi(mymacro,39) @code{@@uref@{--a,--b,--c@}} @uref{--a,--b,--c} formatting_regions.texi(mymacro,39) @code{@@uref@{,--b,--c@}} @uref{,--b,--c} formatting_regions.texi(mymacro,39) @code{@@uref@{--a,,--c@}} @uref{--a,,--c} formatting_regions.texi(mymacro,39) @code{@@uref@{,,--c@}} @uref{,,--c} formatting_regions.texi(mymacro,39) @code{@@url@{--a,--b@}} @url{--a,--b} formatting_regions.texi(mymacro,39) @code{@@url@{--a,@}} @url{--a,} formatting_regions.texi(mymacro,39) @code{@@url@{,--b@}} @url{,--b} formatting_regions.texi(mymacro,39) @code{@@var@{--a@}} @var{--a} formatting_regions.texi(mymacro,39) @code{@@verb@{:--a:@}} @verb{:--a:} formatting_regions.texi(mymacro,39) @code{@@verb@{:a < & @@ % " -- b:@}} @verb{:a < & @ % " -- b:} formatting_regions.texi(mymacro,39) @code{@@w@{@}} @w{} formatting_regions.texi(mymacro,39) @code{@@H@{a@}} @H{a} formatting_regions.texi(mymacro,39) @code{@@H@{--a@}} @H{--a} formatting_regions.texi(mymacro,39) @code{@@dotaccent@{a@}} @dotaccent{a} formatting_regions.texi(mymacro,39) @code{@@dotaccent@{--a@}} @dotaccent{--a} formatting_regions.texi(mymacro,39) @code{@@ringaccent@{a@}} @ringaccent{a} formatting_regions.texi(mymacro,39) @code{@@ringaccent@{--a@}} @ringaccent{--a} formatting_regions.texi(mymacro,39) @code{@@tieaccent@{a@}} @tieaccent{a} formatting_regions.texi(mymacro,39) @code{@@tieaccent@{--a@}} @tieaccent{--a} formatting_regions.texi(mymacro,39) @code{@@u@{a@}} @u{a} formatting_regions.texi(mymacro,39) @code{@@u@{--a@}} @u{--a} formatting_regions.texi(mymacro,39) @code{@@ubaraccent@{a@}} @ubaraccent{a} formatting_regions.texi(mymacro,39) @code{@@ubaraccent@{--a@}} @ubaraccent{--a} formatting_regions.texi(mymacro,39) @code{@@udotaccent@{a@}} @udotaccent{a} formatting_regions.texi(mymacro,39) @code{@@udotaccent@{--a@}} @udotaccent{--a} formatting_regions.texi(mymacro,39) @code{@@v@{a@}} @v{a} formatting_regions.texi(mymacro,39) @code{@@v@{--a@}} @v{--a} formatting_regions.texi(mymacro,39) @code{@@,@{c@}} @,{c} formatting_regions.texi(mymacro,39) @code{@@,@{--c@}} @,{--c} formatting_regions.texi(mymacro,39) @code{@@ogonek@{a@}} @ogonek{a} formatting_regions.texi(mymacro,39) @code{@@ogonek@{--a@}} @ogonek{--a} formatting_regions.texi(mymacro,39) @code{@@footnote@{in footnote@}} @footnote{in footnote} formatting_regions.texi(mymacro,39) @code{@@footnote@{in footnote2@}} @footnote{in footnote2} formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @code{@@image@{f--ile@}} @image{f--ile} formatting_regions.texi(mymacro,39) @code{@@image@{f--ile,l--i@}} @image{f--ile,l--i} formatting_regions.texi(mymacro,39) @code{@@image@{f--ile,,l--e@}} @image{f--ile,,l--e} formatting_regions.texi(mymacro,39) @code{@@image@{f--ile,,,alt@}} @image{f--ile,,,alt} formatting_regions.texi(mymacro,39) @code{@@image@{f--ile,,,,e-d-xt@}} @image{f--ile,,,,e--xt} formatting_regions.texi(mymacro,39) @code{@@image@{f--ile,aze,az,alt,e--xt@}} @image{f--ile,aze,az,alt,e--xt} formatting_regions.texi(mymacro,39) @code{@@image@{f-ile,aze,,a--lt@}} @image{f-ile,aze,,a--lt} formatting_regions.texi(mymacro,39) @code{@@image@{@@file@{f--ile@}@@@@@@.,aze,az,alt,@@file@{file ext@} e--xt@@@}} @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@}} formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @sp 2 formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} formatting_regions.texi(mymacro,39) @clickstyle @result formatting_regions.texi(mymacro,39) After clickstyle @result{} formatting_regions.texi(mymacro,39) @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} formatting_regions.texi(mymacro,39) @clickstyle @arrow formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @quotation formatting_regions.texi(mymacro,39) A quot---ation formatting_regions.texi(mymacro,39) @end quotation formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @quotation Note formatting_regions.texi(mymacro,39) A Note formatting_regions.texi(mymacro,39) @end quotation formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @quotation note formatting_regions.texi(mymacro,39) A note formatting_regions.texi(mymacro,39) @end quotation formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @quotation Caution formatting_regions.texi(mymacro,39) Caution formatting_regions.texi(mymacro,39) @end quotation formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @quotation Important formatting_regions.texi(mymacro,39) Important formatting_regions.texi(mymacro,39) @end quotation formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @quotation Tip formatting_regions.texi(mymacro,39) a Tip formatting_regions.texi(mymacro,39) @end quotation formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @quotation Warning formatting_regions.texi(mymacro,39) a Warning. formatting_regions.texi(mymacro,39) @end quotation formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @quotation something @'e @TeX{} formatting_regions.texi(mymacro,39) The something @'e @TeX{} is here. formatting_regions.texi(mymacro,39) @end quotation formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @quotation @@ at the end of line @ formatting_regions.texi(mymacro,39) A @@ at the end of the @@quotation line. formatting_regions.texi(mymacro,39) @end quotation formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @quotation something, other thing formatting_regions.texi(mymacro,39) something, other thing formatting_regions.texi(mymacro,39) @end quotation formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @quotation Note, the note formatting_regions.texi(mymacro,39) Note, the note formatting_regions.texi(mymacro,39) @end quotation formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @quotation formatting_regions.texi(mymacro,39) @end quotation formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @quotation Empty formatting_regions.texi(mymacro,39) @end quotation formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @quotation @asis{} formatting_regions.texi(mymacro,39) @end quotation formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @quotation @* formatting_regions.texi(mymacro,39) @end quotation formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @smallquotation formatting_regions.texi(mymacro,39) A small quot---ation formatting_regions.texi(mymacro,39) @end smallquotation formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @smallquotation Note formatting_regions.texi(mymacro,39) A small Note formatting_regions.texi(mymacro,39) @end smallquotation formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @smallquotation something, other thing formatting_regions.texi(mymacro,39) something, other thing formatting_regions.texi(mymacro,39) @end smallquotation formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @itemize formatting_regions.texi(mymacro,39) @item i--temize formatting_regions.texi(mymacro,39) @end itemize formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @itemize + formatting_regions.texi(mymacro,39) @item i--tem + formatting_regions.texi(mymacro,39) @end itemize formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @itemize @bullet formatting_regions.texi(mymacro,39) @item b--ullet formatting_regions.texi(mymacro,39) @end itemize formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @itemize @minus formatting_regions.texi(mymacro,39) @item minu--s formatting_regions.texi(mymacro,39) @end itemize formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @itemize @emph formatting_regions.texi(mymacro,39) @item e--mph item formatting_regions.texi(mymacro,39) @end itemize formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @itemize @emph{after emph} formatting_regions.texi(mymacro,39) @c comment in itemize formatting_regions.texi(mymacro,39) @item e--mph item formatting_regions.texi(mymacro,39) @end itemize formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @itemize @bullet{} a--n itemize line formatting_regions.texi(mymacro,39) @cindex index entry within itemize formatting_regions.texi(mymacro,39) @item i--tem 1 formatting_regions.texi(mymacro,39) @item i--tem 2 formatting_regions.texi(mymacro,39) @end itemize formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @enumerate formatting_regions.texi(mymacro,39) @item e--numerate formatting_regions.texi(mymacro,39) @end enumerate formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @multitable @columnfractions 6 7 formatting_regions.texi(mymacro,39) @headitem mu--ltitable headitem @tab another tab formatting_regions.texi(mymacro,39) @item mu--ltitable item @tab multitable tab formatting_regions.texi(mymacro,39) @c comment in multitable formatting_regions.texi(mymacro,39) @item mu--ltitable item 2 @tab multitable tab 2 formatting_regions.texi(mymacro,39) @cindex index entry within multitable formatting_regions.texi(mymacro,39) @item lone mu--ltitable item formatting_regions.texi(mymacro,39) @end multitable formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @multitable {truc} {bidule} formatting_regions.texi(mymacro,39) @item truc @tab bidule formatting_regions.texi(mymacro,39) @end multitable formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @example formatting_regions.texi(mymacro,39) e--xample some formatting_regions.texi(mymacro,39) text formatting_regions.texi(mymacro,39) @end example formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @smallexample formatting_regions.texi(mymacro,39) s--mallexample formatting_regions.texi(mymacro,39) @end smallexample formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @display formatting_regions.texi(mymacro,39) d--isplay formatting_regions.texi(mymacro,39) @end display formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @smalldisplay formatting_regions.texi(mymacro,39) s--malldisplay formatting_regions.texi(mymacro,39) @end smalldisplay formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @lisp formatting_regions.texi(mymacro,39) l--isp formatting_regions.texi(mymacro,39) @end lisp formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @smalllisp formatting_regions.texi(mymacro,39) s--malllisp formatting_regions.texi(mymacro,39) @end smalllisp formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @format formatting_regions.texi(mymacro,39) f--ormat formatting_regions.texi(mymacro,39) @end format formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @smallformat formatting_regions.texi(mymacro,39) s--mallformat formatting_regions.texi(mymacro,39) @end smallformat formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @deffn c--ategory d--effn_name a--rguments... formatting_regions.texi(mymacro,39) d--effn formatting_regions.texi(mymacro,39) @end deffn formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @deffn cate--gory de--ffn_name ar--guments @ formatting_regions.texi(mymacro,39) more args @* even more so formatting_regions.texi(mymacro,39) def--fn formatting_regions.texi(mymacro,39) @end deffn formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @deffn fset @var{i} a g formatting_regions.texi(mymacro,39) @cindex index entry within deffn formatting_regions.texi(mymacro,39) @deffnx {cmde} truc {} formatting_regions.texi(mymacro,39) @deffnx Command {log trap} {} formatting_regions.texi(mymacro,39) @deffnx Command { log trap1} {} formatting_regions.texi(mymacro,39) @deffnx Command {log trap2 } {} formatting_regions.texi(mymacro,39) @deffnx cmde @b{id ule} truc formatting_regions.texi(mymacro,39) @deffnx cmde2 @b{id @samp{i} ule} truc formatting_regions.texi(mymacro,39) @deffnx @b{id @samp{i} ule} formatting_regions.texi(mymacro,39) @deffnx formatting_regions.texi(mymacro,39) @deffnx aaa formatting_regions.texi(mymacro,39) @deffnx {} {} formatting_regions.texi(mymacro,39) @deffnx{} formatting_regions.texi(mymacro,39) @deffnx{} machin formatting_regions.texi(mymacro,39) @deffnx{} {bidule machin} formatting_regions.texi(mymacro,39) @deffnx{truc} machin formatting_regions.texi(mymacro,39) @deffnx{truc} { } formatting_regions.texi(mymacro,39) @deffnx{truc} followed by a comment formatting_regions.texi(mymacro,39) @c comment formatting_regions.texi(mymacro,39) @deffnx{truc} formatting_regions.texi(mymacro,39) @deffnx{} {} formatting_regions.texi(mymacro,39) @deffnx {truc} a b c d e @b{f g} {h i} formatting_regions.texi(mymacro,39) @deffnx {truc} deffnx before end deffn formatting_regions.texi(mymacro,39) @end deffn formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @deffn empty deffn formatting_regions.texi(mymacro,39) @end deffn formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @deffn empty deffn with deffnx formatting_regions.texi(mymacro,39) @c comment between deffn and deffnx formatting_regions.texi(mymacro,39) @deffnx empty deffnx formatting_regions.texi(mymacro,39) @end deffn formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @deffn fset @var{i} a g formatting_regions.texi(mymacro,39) @deffnx {cmde} truc {} formatting_regions.texi(mymacro,39) @c comment formatting_regions.texi(mymacro,39) text in def item for second def item formatting_regions.texi(mymacro,39) @end deffn formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @defvr c--ategory d--efvr_name formatting_regions.texi(mymacro,39) d--efvr formatting_regions.texi(mymacro,39) @end defvr formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... formatting_regions.texi(mymacro,39) d--eftypefn formatting_regions.texi(mymacro,39) @end deftypefn formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... formatting_regions.texi(mymacro,39) d--eftypeop formatting_regions.texi(mymacro,39) @end deftypeop formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @deftypevr c--ategory t--ype d--eftypevr_name formatting_regions.texi(mymacro,39) d--eftypevr formatting_regions.texi(mymacro,39) @end deftypevr formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @defcv c--ategory c--lass d--efcv_name formatting_regions.texi(mymacro,39) d--efcv formatting_regions.texi(mymacro,39) @end defcv formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @defop c--ategory c--lass d--efop_name a--rguments... formatting_regions.texi(mymacro,39) d--efop formatting_regions.texi(mymacro,39) @end defop formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @deftp c--ategory d--eftp_name a--ttributes... formatting_regions.texi(mymacro,39) d--eftp formatting_regions.texi(mymacro,39) @end deftp formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @defun d--efun_name a--rguments... formatting_regions.texi(mymacro,39) d--efun formatting_regions.texi(mymacro,39) @end defun formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @defmac d--efmac_name a--rguments... formatting_regions.texi(mymacro,39) d--efmac formatting_regions.texi(mymacro,39) @end defmac formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @defspec d--efspec_name a--rguments... formatting_regions.texi(mymacro,39) d--efspec formatting_regions.texi(mymacro,39) @end defspec formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @defvar d--efvar_name argvar argvar1 formatting_regions.texi(mymacro,39) d--efvar formatting_regions.texi(mymacro,39) @end defvar formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @defopt d--efopt_name formatting_regions.texi(mymacro,39) d--efopt formatting_regions.texi(mymacro,39) @end defopt formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @deftypefun t--ype d--eftypefun_name a--rguments... formatting_regions.texi(mymacro,39) d--eftypefun formatting_regions.texi(mymacro,39) @end deftypefun formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @deftypevar t--ype d--eftypevar_name formatting_regions.texi(mymacro,39) d--eftypevar formatting_regions.texi(mymacro,39) @end deftypevar formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @defivar c--lass d--efivar_name formatting_regions.texi(mymacro,39) d--efivar formatting_regions.texi(mymacro,39) @end defivar formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @deftypeivar c--lass t--ype d--eftypeivar_name formatting_regions.texi(mymacro,39) d--eftypeivar formatting_regions.texi(mymacro,39) @end deftypeivar formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @defmethod c--lass d--efmethod_name a--rguments... formatting_regions.texi(mymacro,39) d--efmethod formatting_regions.texi(mymacro,39) @end defmethod formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... formatting_regions.texi(mymacro,39) d--eftypemethod formatting_regions.texi(mymacro,39) @end deftypemethod formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @code{@@xref@{c---hapter@@@@, cross r---ef name@@@@, t---itle@@@@, file n---ame@@@@, ma---nual@@@@@}} @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@}. formatting_regions.texi(mymacro,39) @code{@@ref@{chapter, cross ref name, title, file name, manual@}} @ref{chapter, cross ref name, title, file name, manual} formatting_regions.texi(mymacro,39) @code{@@pxref@{chapter, cross ref name, title, file name, manual@}} @pxref{chapter, cross ref name, title, file name, manual} formatting_regions.texi(mymacro,39) @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @code{@@ref@{chapter@}} @ref{chapter} formatting_regions.texi(mymacro,39) @code{@@xref@{chapter@}} @xref{chapter}. formatting_regions.texi(mymacro,39) @code{@@pxref@{chapter@}} @pxref{chapter} formatting_regions.texi(mymacro,39) @code{@@ref@{s--ect@@comma@{@}ion@}} @ref{s--ect@comma{}ion} formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @code{@@ref@{s--ect@@comma@{@}ion, a @@comma@{@} in cross formatting_regions.texi(mymacro,39) ref, a comma@@comma@{@} in title, a comma@@comma@{@} in file, a @@comma@{@} in manual name @}} formatting_regions.texi(mymacro,39) @ref{s--ect@comma{}ion, a @comma{} in cross formatting_regions.texi(mymacro,39) ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @code{@@ref@{chapter,cross ref name@}} @ref{chapter,cross ref name} formatting_regions.texi(mymacro,39) @code{@@ref@{chapter,,title@}} @ref{chapter,,title} formatting_regions.texi(mymacro,39) @code{@@ref@{chapter,,,file name@}} @ref{chapter,,,file name} formatting_regions.texi(mymacro,39) @code{@@ref@{chapter,,,,manual@}} @ref{chapter,,,,manual} formatting_regions.texi(mymacro,39) @code{@@ref@{chapter,cross ref name,title,@}} @ref{chapter,cross ref name,title,} formatting_regions.texi(mymacro,39) @code{@@ref@{chapter,cross ref name,,file name@}} @ref{chapter,cross ref name,,file name} formatting_regions.texi(mymacro,39) @code{@@ref@{chapter,cross ref name,,,manual@}} @ref{chapter,cross ref name,,,manual} formatting_regions.texi(mymacro,39) @code{@@ref@{chapter,cross ref name,title,file name@}} @ref{chapter,cross ref name,title,file name} formatting_regions.texi(mymacro,39) @code{@@ref@{chapter,cross ref name,title,,manual@}} @ref{chapter,cross ref name,title,,manual} formatting_regions.texi(mymacro,39) @code{@@ref@{chapter,cross ref name,title, file name, manual@}} @ref{chapter,cross ref name,title, file name, manual} formatting_regions.texi(mymacro,39) @code{@@ref@{chapter,,title,file name@}} @ref{chapter,,title,file name} formatting_regions.texi(mymacro,39) @code{@@ref@{chapter,,title,,manual@}} @ref{chapter,,title,,manual} formatting_regions.texi(mymacro,39) @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} formatting_regions.texi(mymacro,39) @code{@@ref@{chapter,,,file name,manual@}} @ref{chapter,,,file name,manual} formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @code{@@ref@{(pman)anode,cross ref name@}} @ref{(pman)anode,cross ref name} formatting_regions.texi(mymacro,39) @code{@@ref@{(pman)anode,,title@}} @ref{(pman)anode,,title} formatting_regions.texi(mymacro,39) @code{@@ref@{(pman)anode,,,file name@}} @ref{(pman)anode,,,file name} formatting_regions.texi(mymacro,39) @code{@@ref@{(pman)anode,,,,manual@}} @ref{(pman)anode,,,,manual} formatting_regions.texi(mymacro,39) @code{@@ref@{(pman)anode,cross ref name,title,@}} @ref{(pman)anode,cross ref name,title,} formatting_regions.texi(mymacro,39) @code{@@ref@{(pman)anode,cross ref name,,file name@}} @ref{(pman)anode,cross ref name,,file name} formatting_regions.texi(mymacro,39) @code{@@ref@{(pman)anode,cross ref name,,,manual@}} @ref{(pman)anode,cross ref name,,,manual} formatting_regions.texi(mymacro,39) @code{@@ref@{(pman)anode,cross ref name,title,file name@}} @ref{(pman)anode,cross ref name,title,file name} formatting_regions.texi(mymacro,39) @code{@@ref@{(pman)anode,cross ref name,title,,manual@}} @ref{(pman)anode,cross ref name,title,,manual} formatting_regions.texi(mymacro,39) @code{@@ref@{(pman)anode,cross ref name,title, file name, manual@}} @ref{(pman)anode,cross ref name,title, file name, manual} formatting_regions.texi(mymacro,39) @code{@@ref@{(pman)anode,,title,file name@}} @ref{(pman)anode,,title,file name} formatting_regions.texi(mymacro,39) @code{@@ref@{(pman)anode,,title,,manual@}} @ref{(pman)anode,,title,,manual} formatting_regions.texi(mymacro,39) @code{@@ref@{(pman)anode,,title, file name, manual@}} @ref{(pman)anode,,title, file name, manual} formatting_regions.texi(mymacro,39) @code{@@ref@{(pman)anode,,,file name,manual@}} @ref{(pman)anode,,,file name,manual} formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} formatting_regions.texi(mymacro,39) @code{@@inforef@{chapter@}} @inforef{chapter} formatting_regions.texi(mymacro,39) @code{@@inforef@{chapter, cross ref name@}} @inforef{chapter, cross ref name} formatting_regions.texi(mymacro,39) @code{@@inforef@{chapter,,file name@}} @inforef{chapter,,file name} formatting_regions.texi(mymacro,39) @code{@@inforef@{node, cross ref name, file name@}} @inforef{node, cross ref name, file name} formatting_regions.texi(mymacro,39) @code{@@inforef@{node@}} @inforef{node} formatting_regions.texi(mymacro,39) @code{@@inforef@{node, cross ref name@}} @inforef{node, cross ref name} formatting_regions.texi(mymacro,39) @code{@@inforef@{node,,file name@}} @inforef{node,,file name} formatting_regions.texi(mymacro,39) @code{@@inforef@{chapter, cross ref name, file name, spurious arg@}} @inforef{chapter, cross ref name, file name, spurious arg} formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @code{@@inforef@{s--ect@@comma@{@}ion, a @@comma@{@} in cross formatting_regions.texi(mymacro,39) ref, a comma@@comma@{@} in file@}} formatting_regions.texi(mymacro,39) @inforef{s--ect@comma{}ion, a @comma{} in cross formatting_regions.texi(mymacro,39) ref, a comma@comma{} in file} formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @table @bullet formatting_regions.texi(mymacro,39) @c comment in table formatting_regions.texi(mymacro,39) @item a formatting_regions.texi(mymacro,39) l--ine formatting_regions.texi(mymacro,39) @end table formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @vtable @asis formatting_regions.texi(mymacro,39) @item a formatting_regions.texi(mymacro,39) @c comment between item and itemx formatting_regions.texi(mymacro,39) @itemx b formatting_regions.texi(mymacro,39) l--ine formatting_regions.texi(mymacro,39) @end vtable formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @ftable @minus formatting_regions.texi(mymacro,39) @item a formatting_regions.texi(mymacro,39) @cindex index entry between item and itemx formatting_regions.texi(mymacro,39) @itemx b formatting_regions.texi(mymacro,39) l--ine formatting_regions.texi(mymacro,39) @end ftable formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @cartouche formatting_regions.texi(mymacro,39) c--artouche formatting_regions.texi(mymacro,39) @end cartouche formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @flushleft formatting_regions.texi(mymacro,39) f--lushleft formatting_regions.texi(mymacro,39) @end flushleft formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @flushright formatting_regions.texi(mymacro,39) f--lushright formatting_regions.texi(mymacro,39) @end flushright formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @center ce--ntered line formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @verbatiminclude simplest.texi formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @verbatim formatting_regions.texi(mymacro,39) in verbatim '' formatting_regions.texi(mymacro,39) @end verbatim formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @html formatting_regions.texi(mymacro,39) html '' formatting_regions.texi(mymacro,39) @end html formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @majorheading majorheading formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @chapheading chapheading formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @heading heading formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @subheading subheading formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @subsubheading subsubheading formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @c makeinfo cannot handle that formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @code{@@acronym@{--a,an accronym @@comma@{@} @@enddots@{@}@}} @acronym{--a,an accronym @comma{} @enddots{}} formatting_regions.texi(mymacro,39) @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude--@@comma@{@} @@b@{Autonome@} @}} @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } formatting_regions.texi(mymacro,39) @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @code{@@math@{--a@@minus@{@} @{\frac@{1@}@{2@}@}@}} @math{--a@minus{} {\frac{1}{2}}} formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @code{@@image@{f-ile,,,alt@@verb@{:jk _" %@:@}@}} @image{f-ile,,,alt@verb{:jk _" %@:}} formatting_regions.texi(mymacro,39) @code{@@image@{f--ile,aze,az,@@verb@{:jk _" %@@:@} @@b@{in b "@},e--xt@}} @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} formatting_regions.texi(mymacro,39) @code{@@image@{file@@verb@{:jk _" %@@:@},,,alt@@verb@{:jk _" %@@:@}@}} @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @set invalid formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @c invalid texinfo formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) Somehow invalid use of @@,:@* formatting_regions.texi(mymacro,39) @@, @, formatting_regions.texi(mymacro,39) @* formatting_regions.texi(mymacro,39) @@,@@"u @,@"u formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) Invalid use of @@':@* formatting_regions.texi(mymacro,39) @@' @' formatting_regions.texi(mymacro,39) @* formatting_regions.texi(mymacro,39) @@'@@"u @'@"u formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @c only i or j as arg formatting_regions.texi(mymacro,39) @@dotless@{truc@} @dotless{truc} formatting_regions.texi(mymacro,39) @@dotless@{ij@} @dotless{ij} formatting_regions.texi(mymacro,39) @code{@@dotless@{--a@}} @dotless{--a} formatting_regions.texi(mymacro,39) @code{@@dotless@{a@}} @dotless{a} formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @c braces missing formatting_regions.texi(mymacro,39) @@TeX, but without brace @TeX formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @c unknown command formatting_regions.texi(mymacro,39) @code{@@#} @# formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @c no arg formatting_regions.texi(mymacro,39) @code{@@w@{--a@}} @w{--a} formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @c no file formatting_regions.texi(mymacro,39) @code{@@image@{,1--xt@}} @image{,1--xt} formatting_regions.texi(mymacro,39) @code{@@image@{,,2--xt@}} @image{,,2--xt} formatting_regions.texi(mymacro,39) @code{@@image@{,,,3--xt@}} @image{,,,3--xt} formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @sp formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @c braces missing formatting_regions.texi(mymacro,39) @itemize @emph after emph formatting_regions.texi(mymacro,39) @item e--mph item formatting_regions.texi(mymacro,39) @end itemize formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @c braces missing formatting_regions.texi(mymacro,39) @itemize @bullet a--n itemize line formatting_regions.texi(mymacro,39) @item i--tem 1 formatting_regions.texi(mymacro,39) @item i--tem 2 formatting_regions.texi(mymacro,39) @end itemize formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @c deffnx after deff lines formatting_regions.texi(mymacro,39) @deffn fun formatting_regions.texi(mymacro,39) @deffnx truc machin bidule chose and } formatting_regions.texi(mymacro,39) @deffnx truc machin bidule chose and } after formatting_regions.texi(mymacro,39) @deffnx truc machin bidule chose and { formatting_regions.texi(mymacro,39) @deffnx truc machin bidule chose and { and after formatting_regions.texi(mymacro,39) @deffnx {truc} followed by a comment formatting_regions.texi(mymacro,39) @c comment formatting_regions.texi(mymacro,39) Various deff lines formatting_regions.texi(mymacro,39) @deffnx {truc} after a deff item formatting_regions.texi(mymacro,39) @end deffn formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @c node is non existent, or missing first arg formatting_regions.texi(mymacro,39) @code{@@ref@{node@}} @ref{node} formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @code{@@ref@{,cross ref name@}} @ref{,cross ref name} formatting_regions.texi(mymacro,39) @code{@@ref@{,,title@}} @ref{,,title} formatting_regions.texi(mymacro,39) @code{@@ref@{,,,file name@}} @ref{,,,file name} formatting_regions.texi(mymacro,39) @code{@@ref@{,,,,manual@}} @ref{,,,,manual} formatting_regions.texi(mymacro,39) @code{@@ref@{node,cross ref name@}} @ref{node,cross ref name} formatting_regions.texi(mymacro,39) @code{@@ref@{node,,title@}} @ref{node,,title} formatting_regions.texi(mymacro,39) @code{@@ref@{node,,,file name@}} @ref{node,,,file name} formatting_regions.texi(mymacro,39) @code{@@ref@{node,,,,manual@}} @ref{node,,,,manual} formatting_regions.texi(mymacro,39) @code{@@ref@{node,cross ref name,title,@}} @ref{node,cross ref name,title,} formatting_regions.texi(mymacro,39) @code{@@ref@{node,cross ref name,,file name@}} @ref{node,cross ref name,,file name} formatting_regions.texi(mymacro,39) @code{@@ref@{node,cross ref name,,,manual@}} @ref{node,cross ref name,,,manual} formatting_regions.texi(mymacro,39) @code{@@ref@{node,cross ref name,title,file name@}} @ref{node,cross ref name,title,file name} formatting_regions.texi(mymacro,39) @code{@@ref@{node,cross ref name,title,,manual@}} @ref{node,cross ref name,title,,manual} formatting_regions.texi(mymacro,39) @code{@@ref@{node,cross ref name,title, file name, manual@}} @ref{node,cross ref name,title, file name, manual} formatting_regions.texi(mymacro,39) @code{@@ref@{node,,title,file name@}} @ref{node,,title,file name} formatting_regions.texi(mymacro,39) @code{@@ref@{node,,title,,manual@}} @ref{node,,title,,manual} formatting_regions.texi(mymacro,39) @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} formatting_regions.texi(mymacro,39) @code{@@ref@{node,,title, file name, manual@}} @ref{node,,title, file name, manual} formatting_regions.texi(mymacro,39) @code{@@ref@{node,,,file name,manual@}} @ref{node,,,file name,manual} formatting_regions.texi(mymacro,39) @code{@@ref@{,cross ref name,title,@}} @ref{,cross ref name,title,} formatting_regions.texi(mymacro,39) @code{@@ref@{,cross ref name,,file name@}} @ref{,cross ref name,,file name} formatting_regions.texi(mymacro,39) @code{@@ref@{,cross ref name,,,manual@}} @ref{,cross ref name,,,manual} formatting_regions.texi(mymacro,39) @code{@@ref@{,cross ref name,title,file name@}} @ref{,cross ref name,title,file name} formatting_regions.texi(mymacro,39) @code{@@ref@{,cross ref name,title,,manual@}} @ref{,cross ref name,title,,manual} formatting_regions.texi(mymacro,39) @code{@@ref@{,cross ref name,title, file name, manual@}} @ref{,cross ref name,title, file name, manual} formatting_regions.texi(mymacro,39) @code{@@ref@{,,title,file name@}} @ref{,,title,file name} formatting_regions.texi(mymacro,39) @code{@@ref@{,,title,,manual@}} @ref{,,title,,manual} formatting_regions.texi(mymacro,39) @code{@@ref@{,,title, file name, manual@}} @ref{,,title, file name, manual} formatting_regions.texi(mymacro,39) @code{@@ref@{,,,file name,manual@}} @ref{,,,file name,manual} formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) @code{@@inforef@{,cross ref name @}} @inforef{,cross ref name } formatting_regions.texi(mymacro,39) @code{@@inforef@{,,file name@}} @inforef{,,file name} formatting_regions.texi(mymacro,39) @code{@@inforef@{,cross ref name, file name@}} @inforef{,cross ref name, file name} formatting_regions.texi(mymacro,39) @code{@@inforef@{@}} @inforef{} formatting_regions.texi(mymacro,39) formatting_regions.texi(mymacro,39) formatting_regions.texi(,40) formatting_regions.texi(,41) insertcopying in titlepage formatting_regions.texi(,42) @insertcopying formatting_regions.texi(,43) end titlepage formatting_regions.texi(,44) @end titlepage formatting_regions.texi(,45) formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) < formatting_regions.texi(mymacro,46) > formatting_regions.texi(mymacro,46) " formatting_regions.texi(mymacro,46) & formatting_regions.texi(mymacro,46) ' formatting_regions.texi(mymacro,46) ` formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) ``simple-double--three---four----''@* formatting_regions.texi(mymacro,46) code: @code{``simple-double--three---four----''} @* formatting_regions.texi(mymacro,46) asis: @asis{``simple-double--three---four----''} @* formatting_regions.texi(mymacro,46) strong: @strong{``simple-double--three---four----''} @* formatting_regions.texi(mymacro,46) kbd: @kbd{``simple-double--three---four----''} @* formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) `@w{}`simple-double-@w{}-three---four----'@w{}'@* formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @cindex --option formatting_regions.texi(mymacro,46) @cindex `` formatting_regions.texi(mymacro,46) @findex `` formatting_regions.texi(mymacro,46) @findex --foption formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @@"u @"u formatting_regions.texi(mymacro,46) @@"@{U@} @"{U} formatting_regions.texi(mymacro,46) @@~n @~n formatting_regions.texi(mymacro,46) @@^a @^a formatting_regions.texi(mymacro,46) @@'e @'e formatting_regions.texi(mymacro,46) @@=o @=o formatting_regions.texi(mymacro,46) @@`i @`i formatting_regions.texi(mymacro,46) @@'@{e@} @'{e} formatting_regions.texi(mymacro,46) @@'@{@@dotless@{i@}@} @'{@dotless{i}} formatting_regions.texi(mymacro,46) @@dotless@{i@} @dotless{i} formatting_regions.texi(mymacro,46) @@dotless@{j@} @dotless{j} formatting_regions.texi(mymacro,46) @@`@{@@=E@} @`{@=E} formatting_regions.texi(mymacro,46) @@l@{@} @l{} formatting_regions.texi(mymacro,46) @@,@{@@'C@} @,{@'C} formatting_regions.texi(mymacro,46) @@,c @,c formatting_regions.texi(mymacro,46) @@,c@@"u @,c@"u @* formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @@* @* formatting_regions.texi(mymacro,46) @@ followed by a space formatting_regions.texi(mymacro,46) @ formatting_regions.texi(mymacro,46) @@ followed by a tab formatting_regions.texi(mymacro,46) @ formatting_regions.texi(mymacro,46) @@ followed by a new line formatting_regions.texi(mymacro,46) @ formatting_regions.texi(mymacro,46) @code{@@-} @- formatting_regions.texi(mymacro,46) @code{@@|} @| formatting_regions.texi(mymacro,46) @code{@@:} @: formatting_regions.texi(mymacro,46) @code{@@!} @! formatting_regions.texi(mymacro,46) @code{@@?} @? formatting_regions.texi(mymacro,46) @code{@@.} @. formatting_regions.texi(mymacro,46) @code{@@@@} @@ formatting_regions.texi(mymacro,46) @code{@@@}} @} formatting_regions.texi(mymacro,46) @code{@@@{} @{ formatting_regions.texi(mymacro,46) @code{@@/} @/ formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) foo vs.@: bar. formatting_regions.texi(mymacro,46) colon :@:And something else. formatting_regions.texi(mymacro,46) semi colon ;@:. formatting_regions.texi(mymacro,46) And ? ?@:. formatting_regions.texi(mymacro,46) Now ! !@:@@ formatting_regions.texi(mymacro,46) but , ,@: formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @@TeX @TeX{} formatting_regions.texi(mymacro,46) @@LaTeX @LaTeX{} formatting_regions.texi(mymacro,46) @@bullet @bullet{} formatting_regions.texi(mymacro,46) @@copyright @copyright{} formatting_regions.texi(mymacro,46) @@dots @dots{} formatting_regions.texi(mymacro,46) @@enddots @enddots{} formatting_regions.texi(mymacro,46) @@equiv @equiv{} formatting_regions.texi(mymacro,46) @@error @error{} formatting_regions.texi(mymacro,46) @@expansion @expansion{} formatting_regions.texi(mymacro,46) @@minus @minus{} formatting_regions.texi(mymacro,46) @@point @point{} formatting_regions.texi(mymacro,46) @@print @print{} formatting_regions.texi(mymacro,46) @@result @result{} formatting_regions.texi(mymacro,46) @@today @today{} formatting_regions.texi(mymacro,46) @@aa @aa{} formatting_regions.texi(mymacro,46) @@AA @AA{} formatting_regions.texi(mymacro,46) @@ae @ae{} formatting_regions.texi(mymacro,46) @@oe @oe{} formatting_regions.texi(mymacro,46) @@AE @AE{} formatting_regions.texi(mymacro,46) @@OE @OE{} formatting_regions.texi(mymacro,46) @@o @o{} formatting_regions.texi(mymacro,46) @@O @O{} formatting_regions.texi(mymacro,46) @@ss @ss{} formatting_regions.texi(mymacro,46) @@l @l{} formatting_regions.texi(mymacro,46) @@L @L{} formatting_regions.texi(mymacro,46) @@exclamdown @exclamdown{} formatting_regions.texi(mymacro,46) @@questiondown @questiondown{} formatting_regions.texi(mymacro,46) @@pounds @pounds{} formatting_regions.texi(mymacro,46) @@registeredsymbol @registeredsymbol{} formatting_regions.texi(mymacro,46) @@ordf @ordf{} formatting_regions.texi(mymacro,46) @@ordm @ordm{} formatting_regions.texi(mymacro,46) @@comma @comma{} formatting_regions.texi(mymacro,46) @@quotedblleft @quotedblleft{} formatting_regions.texi(mymacro,46) @@quotedblright @quotedblright{} formatting_regions.texi(mymacro,46) @@quoteleft @quoteleft{} formatting_regions.texi(mymacro,46) @@quoteright @quoteright{} formatting_regions.texi(mymacro,46) @@quotedblbase @quotedblbase{} formatting_regions.texi(mymacro,46) @@quotesinglbase @quotesinglbase{} formatting_regions.texi(mymacro,46) @@guillemetleft @guillemetleft{} formatting_regions.texi(mymacro,46) @@guillemetright @guillemetright{} formatting_regions.texi(mymacro,46) @@guillemotleft @guillemotleft{} formatting_regions.texi(mymacro,46) @@guillemotright @guillemotright{} formatting_regions.texi(mymacro,46) @@guilsinglleft @guilsinglleft{} formatting_regions.texi(mymacro,46) @@guilsinglright @guilsinglright{} formatting_regions.texi(mymacro,46) @@textdegree @textdegree{} formatting_regions.texi(mymacro,46) @@euro @euro{} formatting_regions.texi(mymacro,46) @@arrow @arrow{} formatting_regions.texi(mymacro,46) @@leq @leq{} formatting_regions.texi(mymacro,46) @@geq @geq{} formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @code{@@acronym@{--a,an accronym@}} @acronym{--a,an accronym} formatting_regions.texi(mymacro,46) @code{@@acronym@{--a@}} @acronym{--a} formatting_regions.texi(mymacro,46) @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude Autonome @}} @abbr{@'E--. @comma{}A., @'Etude Autonome } formatting_regions.texi(mymacro,46) @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} formatting_regions.texi(mymacro,46) @code{@@asis@{--a@}} @asis{--a} formatting_regions.texi(mymacro,46) @code{@@b@{--a@}} @b{--a} formatting_regions.texi(mymacro,46) @code{@@cite@{--a@}} @cite{--a} formatting_regions.texi(mymacro,46) @code{@@code@{--a@}} @code{--a} formatting_regions.texi(mymacro,46) @code{@@command@{--a@}} @command{--a} formatting_regions.texi(mymacro,46) @code{@@ctrl@{--a@}} @ctrl{--a} formatting_regions.texi(mymacro,46) @code{@@dfn@{--a@}} @dfn{--a} formatting_regions.texi(mymacro,46) @code{@@dmn@{--a@}} @dmn{--a} formatting_regions.texi(mymacro,46) @code{@@email@{--a,--b@}} @email{--a,--b} formatting_regions.texi(mymacro,46) @code{@@email@{,--b@}} @email{,--b} formatting_regions.texi(mymacro,46) @code{@@email@{--a@}} @email{--a} formatting_regions.texi(mymacro,46) @code{@@emph@{--a@}} @emph{--a} formatting_regions.texi(mymacro,46) @code{@@env@{--a@}} @env{--a} formatting_regions.texi(mymacro,46) @code{@@file@{--a@}} @file{--a} formatting_regions.texi(mymacro,46) @code{@@i@{--a@}} @i{--a} formatting_regions.texi(mymacro,46) @code{@@kbd@{--a@}} @kbd{--a} formatting_regions.texi(mymacro,46) @code{@@key@{--a@}} @key{--a} formatting_regions.texi(mymacro,46) @code{@@math@{--a @{\frac@{1@}@{2@}@} @@minus@{@}@}} @math{--a {\frac{1}{2}} @minus{}} formatting_regions.texi(mymacro,46) @code{@@option@{--a@}} @option{--a} formatting_regions.texi(mymacro,46) @code{@@r@{--a@}} @r{--a} formatting_regions.texi(mymacro,46) @code{@@samp@{--a@}} @samp{--a} formatting_regions.texi(mymacro,46) @code{@@sc@{--a@}} @sc{--a} formatting_regions.texi(mymacro,46) @code{@@strong@{--a@}} @strong{--a} formatting_regions.texi(mymacro,46) @code{@@t@{--a@}} @t{--a} formatting_regions.texi(mymacro,46) @code{@@sansserif@{--a@}} @sansserif{--a} formatting_regions.texi(mymacro,46) @code{@@titlefont@{--a@}} @titlefont{--a} formatting_regions.texi(mymacro,46) @code{@@indicateurl@{--a@}} @indicateurl{--a} formatting_regions.texi(mymacro,46) @code{@@uref@{--a,--b@}} @uref{--a,--b} formatting_regions.texi(mymacro,46) @code{@@uref@{--a@}} @uref{--a} formatting_regions.texi(mymacro,46) @code{@@uref@{,--b@}} @uref{,--b} formatting_regions.texi(mymacro,46) @code{@@uref@{--a,--b,--c@}} @uref{--a,--b,--c} formatting_regions.texi(mymacro,46) @code{@@uref@{,--b,--c@}} @uref{,--b,--c} formatting_regions.texi(mymacro,46) @code{@@uref@{--a,,--c@}} @uref{--a,,--c} formatting_regions.texi(mymacro,46) @code{@@uref@{,,--c@}} @uref{,,--c} formatting_regions.texi(mymacro,46) @code{@@url@{--a,--b@}} @url{--a,--b} formatting_regions.texi(mymacro,46) @code{@@url@{--a,@}} @url{--a,} formatting_regions.texi(mymacro,46) @code{@@url@{,--b@}} @url{,--b} formatting_regions.texi(mymacro,46) @code{@@var@{--a@}} @var{--a} formatting_regions.texi(mymacro,46) @code{@@verb@{:--a:@}} @verb{:--a:} formatting_regions.texi(mymacro,46) @code{@@verb@{:a < & @@ % " -- b:@}} @verb{:a < & @ % " -- b:} formatting_regions.texi(mymacro,46) @code{@@w@{@}} @w{} formatting_regions.texi(mymacro,46) @code{@@H@{a@}} @H{a} formatting_regions.texi(mymacro,46) @code{@@H@{--a@}} @H{--a} formatting_regions.texi(mymacro,46) @code{@@dotaccent@{a@}} @dotaccent{a} formatting_regions.texi(mymacro,46) @code{@@dotaccent@{--a@}} @dotaccent{--a} formatting_regions.texi(mymacro,46) @code{@@ringaccent@{a@}} @ringaccent{a} formatting_regions.texi(mymacro,46) @code{@@ringaccent@{--a@}} @ringaccent{--a} formatting_regions.texi(mymacro,46) @code{@@tieaccent@{a@}} @tieaccent{a} formatting_regions.texi(mymacro,46) @code{@@tieaccent@{--a@}} @tieaccent{--a} formatting_regions.texi(mymacro,46) @code{@@u@{a@}} @u{a} formatting_regions.texi(mymacro,46) @code{@@u@{--a@}} @u{--a} formatting_regions.texi(mymacro,46) @code{@@ubaraccent@{a@}} @ubaraccent{a} formatting_regions.texi(mymacro,46) @code{@@ubaraccent@{--a@}} @ubaraccent{--a} formatting_regions.texi(mymacro,46) @code{@@udotaccent@{a@}} @udotaccent{a} formatting_regions.texi(mymacro,46) @code{@@udotaccent@{--a@}} @udotaccent{--a} formatting_regions.texi(mymacro,46) @code{@@v@{a@}} @v{a} formatting_regions.texi(mymacro,46) @code{@@v@{--a@}} @v{--a} formatting_regions.texi(mymacro,46) @code{@@,@{c@}} @,{c} formatting_regions.texi(mymacro,46) @code{@@,@{--c@}} @,{--c} formatting_regions.texi(mymacro,46) @code{@@ogonek@{a@}} @ogonek{a} formatting_regions.texi(mymacro,46) @code{@@ogonek@{--a@}} @ogonek{--a} formatting_regions.texi(mymacro,46) @code{@@footnote@{in footnote@}} @footnote{in footnote} formatting_regions.texi(mymacro,46) @code{@@footnote@{in footnote2@}} @footnote{in footnote2} formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @code{@@image@{f--ile@}} @image{f--ile} formatting_regions.texi(mymacro,46) @code{@@image@{f--ile,l--i@}} @image{f--ile,l--i} formatting_regions.texi(mymacro,46) @code{@@image@{f--ile,,l--e@}} @image{f--ile,,l--e} formatting_regions.texi(mymacro,46) @code{@@image@{f--ile,,,alt@}} @image{f--ile,,,alt} formatting_regions.texi(mymacro,46) @code{@@image@{f--ile,,,,e-d-xt@}} @image{f--ile,,,,e--xt} formatting_regions.texi(mymacro,46) @code{@@image@{f--ile,aze,az,alt,e--xt@}} @image{f--ile,aze,az,alt,e--xt} formatting_regions.texi(mymacro,46) @code{@@image@{f-ile,aze,,a--lt@}} @image{f-ile,aze,,a--lt} formatting_regions.texi(mymacro,46) @code{@@image@{@@file@{f--ile@}@@@@@@.,aze,az,alt,@@file@{file ext@} e--xt@@@}} @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@}} formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @sp 2 formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} formatting_regions.texi(mymacro,46) @clickstyle @result formatting_regions.texi(mymacro,46) After clickstyle @result{} formatting_regions.texi(mymacro,46) @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} formatting_regions.texi(mymacro,46) @clickstyle @arrow formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @quotation formatting_regions.texi(mymacro,46) A quot---ation formatting_regions.texi(mymacro,46) @end quotation formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @quotation Note formatting_regions.texi(mymacro,46) A Note formatting_regions.texi(mymacro,46) @end quotation formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @quotation note formatting_regions.texi(mymacro,46) A note formatting_regions.texi(mymacro,46) @end quotation formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @quotation Caution formatting_regions.texi(mymacro,46) Caution formatting_regions.texi(mymacro,46) @end quotation formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @quotation Important formatting_regions.texi(mymacro,46) Important formatting_regions.texi(mymacro,46) @end quotation formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @quotation Tip formatting_regions.texi(mymacro,46) a Tip formatting_regions.texi(mymacro,46) @end quotation formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @quotation Warning formatting_regions.texi(mymacro,46) a Warning. formatting_regions.texi(mymacro,46) @end quotation formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @quotation something @'e @TeX{} formatting_regions.texi(mymacro,46) The something @'e @TeX{} is here. formatting_regions.texi(mymacro,46) @end quotation formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @quotation @@ at the end of line @ formatting_regions.texi(mymacro,46) A @@ at the end of the @@quotation line. formatting_regions.texi(mymacro,46) @end quotation formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @quotation something, other thing formatting_regions.texi(mymacro,46) something, other thing formatting_regions.texi(mymacro,46) @end quotation formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @quotation Note, the note formatting_regions.texi(mymacro,46) Note, the note formatting_regions.texi(mymacro,46) @end quotation formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @quotation formatting_regions.texi(mymacro,46) @end quotation formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @quotation Empty formatting_regions.texi(mymacro,46) @end quotation formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @quotation @asis{} formatting_regions.texi(mymacro,46) @end quotation formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @quotation @* formatting_regions.texi(mymacro,46) @end quotation formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @smallquotation formatting_regions.texi(mymacro,46) A small quot---ation formatting_regions.texi(mymacro,46) @end smallquotation formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @smallquotation Note formatting_regions.texi(mymacro,46) A small Note formatting_regions.texi(mymacro,46) @end smallquotation formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @smallquotation something, other thing formatting_regions.texi(mymacro,46) something, other thing formatting_regions.texi(mymacro,46) @end smallquotation formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @itemize formatting_regions.texi(mymacro,46) @item i--temize formatting_regions.texi(mymacro,46) @end itemize formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @itemize + formatting_regions.texi(mymacro,46) @item i--tem + formatting_regions.texi(mymacro,46) @end itemize formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @itemize @bullet formatting_regions.texi(mymacro,46) @item b--ullet formatting_regions.texi(mymacro,46) @end itemize formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @itemize @minus formatting_regions.texi(mymacro,46) @item minu--s formatting_regions.texi(mymacro,46) @end itemize formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @itemize @emph formatting_regions.texi(mymacro,46) @item e--mph item formatting_regions.texi(mymacro,46) @end itemize formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @itemize @emph{after emph} formatting_regions.texi(mymacro,46) @c comment in itemize formatting_regions.texi(mymacro,46) @item e--mph item formatting_regions.texi(mymacro,46) @end itemize formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @itemize @bullet{} a--n itemize line formatting_regions.texi(mymacro,46) @cindex index entry within itemize formatting_regions.texi(mymacro,46) @item i--tem 1 formatting_regions.texi(mymacro,46) @item i--tem 2 formatting_regions.texi(mymacro,46) @end itemize formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @enumerate formatting_regions.texi(mymacro,46) @item e--numerate formatting_regions.texi(mymacro,46) @end enumerate formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @multitable @columnfractions 6 7 formatting_regions.texi(mymacro,46) @headitem mu--ltitable headitem @tab another tab formatting_regions.texi(mymacro,46) @item mu--ltitable item @tab multitable tab formatting_regions.texi(mymacro,46) @c comment in multitable formatting_regions.texi(mymacro,46) @item mu--ltitable item 2 @tab multitable tab 2 formatting_regions.texi(mymacro,46) @cindex index entry within multitable formatting_regions.texi(mymacro,46) @item lone mu--ltitable item formatting_regions.texi(mymacro,46) @end multitable formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @multitable {truc} {bidule} formatting_regions.texi(mymacro,46) @item truc @tab bidule formatting_regions.texi(mymacro,46) @end multitable formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @example formatting_regions.texi(mymacro,46) e--xample some formatting_regions.texi(mymacro,46) text formatting_regions.texi(mymacro,46) @end example formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @smallexample formatting_regions.texi(mymacro,46) s--mallexample formatting_regions.texi(mymacro,46) @end smallexample formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @display formatting_regions.texi(mymacro,46) d--isplay formatting_regions.texi(mymacro,46) @end display formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @smalldisplay formatting_regions.texi(mymacro,46) s--malldisplay formatting_regions.texi(mymacro,46) @end smalldisplay formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @lisp formatting_regions.texi(mymacro,46) l--isp formatting_regions.texi(mymacro,46) @end lisp formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @smalllisp formatting_regions.texi(mymacro,46) s--malllisp formatting_regions.texi(mymacro,46) @end smalllisp formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @format formatting_regions.texi(mymacro,46) f--ormat formatting_regions.texi(mymacro,46) @end format formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @smallformat formatting_regions.texi(mymacro,46) s--mallformat formatting_regions.texi(mymacro,46) @end smallformat formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @deffn c--ategory d--effn_name a--rguments... formatting_regions.texi(mymacro,46) d--effn formatting_regions.texi(mymacro,46) @end deffn formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @deffn cate--gory de--ffn_name ar--guments @ formatting_regions.texi(mymacro,46) more args @* even more so formatting_regions.texi(mymacro,46) def--fn formatting_regions.texi(mymacro,46) @end deffn formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @deffn fset @var{i} a g formatting_regions.texi(mymacro,46) @cindex index entry within deffn formatting_regions.texi(mymacro,46) @deffnx {cmde} truc {} formatting_regions.texi(mymacro,46) @deffnx Command {log trap} {} formatting_regions.texi(mymacro,46) @deffnx Command { log trap1} {} formatting_regions.texi(mymacro,46) @deffnx Command {log trap2 } {} formatting_regions.texi(mymacro,46) @deffnx cmde @b{id ule} truc formatting_regions.texi(mymacro,46) @deffnx cmde2 @b{id @samp{i} ule} truc formatting_regions.texi(mymacro,46) @deffnx @b{id @samp{i} ule} formatting_regions.texi(mymacro,46) @deffnx formatting_regions.texi(mymacro,46) @deffnx aaa formatting_regions.texi(mymacro,46) @deffnx {} {} formatting_regions.texi(mymacro,46) @deffnx{} formatting_regions.texi(mymacro,46) @deffnx{} machin formatting_regions.texi(mymacro,46) @deffnx{} {bidule machin} formatting_regions.texi(mymacro,46) @deffnx{truc} machin formatting_regions.texi(mymacro,46) @deffnx{truc} { } formatting_regions.texi(mymacro,46) @deffnx{truc} followed by a comment formatting_regions.texi(mymacro,46) @c comment formatting_regions.texi(mymacro,46) @deffnx{truc} formatting_regions.texi(mymacro,46) @deffnx{} {} formatting_regions.texi(mymacro,46) @deffnx {truc} a b c d e @b{f g} {h i} formatting_regions.texi(mymacro,46) @deffnx {truc} deffnx before end deffn formatting_regions.texi(mymacro,46) @end deffn formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @deffn empty deffn formatting_regions.texi(mymacro,46) @end deffn formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @deffn empty deffn with deffnx formatting_regions.texi(mymacro,46) @c comment between deffn and deffnx formatting_regions.texi(mymacro,46) @deffnx empty deffnx formatting_regions.texi(mymacro,46) @end deffn formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @deffn fset @var{i} a g formatting_regions.texi(mymacro,46) @deffnx {cmde} truc {} formatting_regions.texi(mymacro,46) @c comment formatting_regions.texi(mymacro,46) text in def item for second def item formatting_regions.texi(mymacro,46) @end deffn formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @defvr c--ategory d--efvr_name formatting_regions.texi(mymacro,46) d--efvr formatting_regions.texi(mymacro,46) @end defvr formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... formatting_regions.texi(mymacro,46) d--eftypefn formatting_regions.texi(mymacro,46) @end deftypefn formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... formatting_regions.texi(mymacro,46) d--eftypeop formatting_regions.texi(mymacro,46) @end deftypeop formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @deftypevr c--ategory t--ype d--eftypevr_name formatting_regions.texi(mymacro,46) d--eftypevr formatting_regions.texi(mymacro,46) @end deftypevr formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @defcv c--ategory c--lass d--efcv_name formatting_regions.texi(mymacro,46) d--efcv formatting_regions.texi(mymacro,46) @end defcv formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @defop c--ategory c--lass d--efop_name a--rguments... formatting_regions.texi(mymacro,46) d--efop formatting_regions.texi(mymacro,46) @end defop formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @deftp c--ategory d--eftp_name a--ttributes... formatting_regions.texi(mymacro,46) d--eftp formatting_regions.texi(mymacro,46) @end deftp formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @defun d--efun_name a--rguments... formatting_regions.texi(mymacro,46) d--efun formatting_regions.texi(mymacro,46) @end defun formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @defmac d--efmac_name a--rguments... formatting_regions.texi(mymacro,46) d--efmac formatting_regions.texi(mymacro,46) @end defmac formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @defspec d--efspec_name a--rguments... formatting_regions.texi(mymacro,46) d--efspec formatting_regions.texi(mymacro,46) @end defspec formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @defvar d--efvar_name argvar argvar1 formatting_regions.texi(mymacro,46) d--efvar formatting_regions.texi(mymacro,46) @end defvar formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @defopt d--efopt_name formatting_regions.texi(mymacro,46) d--efopt formatting_regions.texi(mymacro,46) @end defopt formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @deftypefun t--ype d--eftypefun_name a--rguments... formatting_regions.texi(mymacro,46) d--eftypefun formatting_regions.texi(mymacro,46) @end deftypefun formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @deftypevar t--ype d--eftypevar_name formatting_regions.texi(mymacro,46) d--eftypevar formatting_regions.texi(mymacro,46) @end deftypevar formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @defivar c--lass d--efivar_name formatting_regions.texi(mymacro,46) d--efivar formatting_regions.texi(mymacro,46) @end defivar formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @deftypeivar c--lass t--ype d--eftypeivar_name formatting_regions.texi(mymacro,46) d--eftypeivar formatting_regions.texi(mymacro,46) @end deftypeivar formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @defmethod c--lass d--efmethod_name a--rguments... formatting_regions.texi(mymacro,46) d--efmethod formatting_regions.texi(mymacro,46) @end defmethod formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... formatting_regions.texi(mymacro,46) d--eftypemethod formatting_regions.texi(mymacro,46) @end deftypemethod formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @code{@@xref@{c---hapter@@@@, cross r---ef name@@@@, t---itle@@@@, file n---ame@@@@, ma---nual@@@@@}} @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@}. formatting_regions.texi(mymacro,46) @code{@@ref@{chapter, cross ref name, title, file name, manual@}} @ref{chapter, cross ref name, title, file name, manual} formatting_regions.texi(mymacro,46) @code{@@pxref@{chapter, cross ref name, title, file name, manual@}} @pxref{chapter, cross ref name, title, file name, manual} formatting_regions.texi(mymacro,46) @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @code{@@ref@{chapter@}} @ref{chapter} formatting_regions.texi(mymacro,46) @code{@@xref@{chapter@}} @xref{chapter}. formatting_regions.texi(mymacro,46) @code{@@pxref@{chapter@}} @pxref{chapter} formatting_regions.texi(mymacro,46) @code{@@ref@{s--ect@@comma@{@}ion@}} @ref{s--ect@comma{}ion} formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @code{@@ref@{s--ect@@comma@{@}ion, a @@comma@{@} in cross formatting_regions.texi(mymacro,46) ref, a comma@@comma@{@} in title, a comma@@comma@{@} in file, a @@comma@{@} in manual name @}} formatting_regions.texi(mymacro,46) @ref{s--ect@comma{}ion, a @comma{} in cross formatting_regions.texi(mymacro,46) ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @code{@@ref@{chapter,cross ref name@}} @ref{chapter,cross ref name} formatting_regions.texi(mymacro,46) @code{@@ref@{chapter,,title@}} @ref{chapter,,title} formatting_regions.texi(mymacro,46) @code{@@ref@{chapter,,,file name@}} @ref{chapter,,,file name} formatting_regions.texi(mymacro,46) @code{@@ref@{chapter,,,,manual@}} @ref{chapter,,,,manual} formatting_regions.texi(mymacro,46) @code{@@ref@{chapter,cross ref name,title,@}} @ref{chapter,cross ref name,title,} formatting_regions.texi(mymacro,46) @code{@@ref@{chapter,cross ref name,,file name@}} @ref{chapter,cross ref name,,file name} formatting_regions.texi(mymacro,46) @code{@@ref@{chapter,cross ref name,,,manual@}} @ref{chapter,cross ref name,,,manual} formatting_regions.texi(mymacro,46) @code{@@ref@{chapter,cross ref name,title,file name@}} @ref{chapter,cross ref name,title,file name} formatting_regions.texi(mymacro,46) @code{@@ref@{chapter,cross ref name,title,,manual@}} @ref{chapter,cross ref name,title,,manual} formatting_regions.texi(mymacro,46) @code{@@ref@{chapter,cross ref name,title, file name, manual@}} @ref{chapter,cross ref name,title, file name, manual} formatting_regions.texi(mymacro,46) @code{@@ref@{chapter,,title,file name@}} @ref{chapter,,title,file name} formatting_regions.texi(mymacro,46) @code{@@ref@{chapter,,title,,manual@}} @ref{chapter,,title,,manual} formatting_regions.texi(mymacro,46) @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} formatting_regions.texi(mymacro,46) @code{@@ref@{chapter,,,file name,manual@}} @ref{chapter,,,file name,manual} formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @code{@@ref@{(pman)anode,cross ref name@}} @ref{(pman)anode,cross ref name} formatting_regions.texi(mymacro,46) @code{@@ref@{(pman)anode,,title@}} @ref{(pman)anode,,title} formatting_regions.texi(mymacro,46) @code{@@ref@{(pman)anode,,,file name@}} @ref{(pman)anode,,,file name} formatting_regions.texi(mymacro,46) @code{@@ref@{(pman)anode,,,,manual@}} @ref{(pman)anode,,,,manual} formatting_regions.texi(mymacro,46) @code{@@ref@{(pman)anode,cross ref name,title,@}} @ref{(pman)anode,cross ref name,title,} formatting_regions.texi(mymacro,46) @code{@@ref@{(pman)anode,cross ref name,,file name@}} @ref{(pman)anode,cross ref name,,file name} formatting_regions.texi(mymacro,46) @code{@@ref@{(pman)anode,cross ref name,,,manual@}} @ref{(pman)anode,cross ref name,,,manual} formatting_regions.texi(mymacro,46) @code{@@ref@{(pman)anode,cross ref name,title,file name@}} @ref{(pman)anode,cross ref name,title,file name} formatting_regions.texi(mymacro,46) @code{@@ref@{(pman)anode,cross ref name,title,,manual@}} @ref{(pman)anode,cross ref name,title,,manual} formatting_regions.texi(mymacro,46) @code{@@ref@{(pman)anode,cross ref name,title, file name, manual@}} @ref{(pman)anode,cross ref name,title, file name, manual} formatting_regions.texi(mymacro,46) @code{@@ref@{(pman)anode,,title,file name@}} @ref{(pman)anode,,title,file name} formatting_regions.texi(mymacro,46) @code{@@ref@{(pman)anode,,title,,manual@}} @ref{(pman)anode,,title,,manual} formatting_regions.texi(mymacro,46) @code{@@ref@{(pman)anode,,title, file name, manual@}} @ref{(pman)anode,,title, file name, manual} formatting_regions.texi(mymacro,46) @code{@@ref@{(pman)anode,,,file name,manual@}} @ref{(pman)anode,,,file name,manual} formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} formatting_regions.texi(mymacro,46) @code{@@inforef@{chapter@}} @inforef{chapter} formatting_regions.texi(mymacro,46) @code{@@inforef@{chapter, cross ref name@}} @inforef{chapter, cross ref name} formatting_regions.texi(mymacro,46) @code{@@inforef@{chapter,,file name@}} @inforef{chapter,,file name} formatting_regions.texi(mymacro,46) @code{@@inforef@{node, cross ref name, file name@}} @inforef{node, cross ref name, file name} formatting_regions.texi(mymacro,46) @code{@@inforef@{node@}} @inforef{node} formatting_regions.texi(mymacro,46) @code{@@inforef@{node, cross ref name@}} @inforef{node, cross ref name} formatting_regions.texi(mymacro,46) @code{@@inforef@{node,,file name@}} @inforef{node,,file name} formatting_regions.texi(mymacro,46) @code{@@inforef@{chapter, cross ref name, file name, spurious arg@}} @inforef{chapter, cross ref name, file name, spurious arg} formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @code{@@inforef@{s--ect@@comma@{@}ion, a @@comma@{@} in cross formatting_regions.texi(mymacro,46) ref, a comma@@comma@{@} in file@}} formatting_regions.texi(mymacro,46) @inforef{s--ect@comma{}ion, a @comma{} in cross formatting_regions.texi(mymacro,46) ref, a comma@comma{} in file} formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @table @bullet formatting_regions.texi(mymacro,46) @c comment in table formatting_regions.texi(mymacro,46) @item a formatting_regions.texi(mymacro,46) l--ine formatting_regions.texi(mymacro,46) @end table formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @vtable @asis formatting_regions.texi(mymacro,46) @item a formatting_regions.texi(mymacro,46) @c comment between item and itemx formatting_regions.texi(mymacro,46) @itemx b formatting_regions.texi(mymacro,46) l--ine formatting_regions.texi(mymacro,46) @end vtable formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @ftable @minus formatting_regions.texi(mymacro,46) @item a formatting_regions.texi(mymacro,46) @cindex index entry between item and itemx formatting_regions.texi(mymacro,46) @itemx b formatting_regions.texi(mymacro,46) l--ine formatting_regions.texi(mymacro,46) @end ftable formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @cartouche formatting_regions.texi(mymacro,46) c--artouche formatting_regions.texi(mymacro,46) @end cartouche formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @flushleft formatting_regions.texi(mymacro,46) f--lushleft formatting_regions.texi(mymacro,46) @end flushleft formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @flushright formatting_regions.texi(mymacro,46) f--lushright formatting_regions.texi(mymacro,46) @end flushright formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @center ce--ntered line formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @verbatiminclude simplest.texi formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @verbatim formatting_regions.texi(mymacro,46) in verbatim '' formatting_regions.texi(mymacro,46) @end verbatim formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @html formatting_regions.texi(mymacro,46) html '' formatting_regions.texi(mymacro,46) @end html formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @majorheading majorheading formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @chapheading chapheading formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @heading heading formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @subheading subheading formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @subsubheading subsubheading formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @c makeinfo cannot handle that formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @code{@@acronym@{--a,an accronym @@comma@{@} @@enddots@{@}@}} @acronym{--a,an accronym @comma{} @enddots{}} formatting_regions.texi(mymacro,46) @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude--@@comma@{@} @@b@{Autonome@} @}} @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } formatting_regions.texi(mymacro,46) @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @code{@@math@{--a@@minus@{@} @{\frac@{1@}@{2@}@}@}} @math{--a@minus{} {\frac{1}{2}}} formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @code{@@image@{f-ile,,,alt@@verb@{:jk _" %@:@}@}} @image{f-ile,,,alt@verb{:jk _" %@:}} formatting_regions.texi(mymacro,46) @code{@@image@{f--ile,aze,az,@@verb@{:jk _" %@@:@} @@b@{in b "@},e--xt@}} @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} formatting_regions.texi(mymacro,46) @code{@@image@{file@@verb@{:jk _" %@@:@},,,alt@@verb@{:jk _" %@@:@}@}} @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @set invalid formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @c invalid texinfo formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) Somehow invalid use of @@,:@* formatting_regions.texi(mymacro,46) @@, @, formatting_regions.texi(mymacro,46) @* formatting_regions.texi(mymacro,46) @@,@@"u @,@"u formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) Invalid use of @@':@* formatting_regions.texi(mymacro,46) @@' @' formatting_regions.texi(mymacro,46) @* formatting_regions.texi(mymacro,46) @@'@@"u @'@"u formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @c only i or j as arg formatting_regions.texi(mymacro,46) @@dotless@{truc@} @dotless{truc} formatting_regions.texi(mymacro,46) @@dotless@{ij@} @dotless{ij} formatting_regions.texi(mymacro,46) @code{@@dotless@{--a@}} @dotless{--a} formatting_regions.texi(mymacro,46) @code{@@dotless@{a@}} @dotless{a} formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @c braces missing formatting_regions.texi(mymacro,46) @@TeX, but without brace @TeX formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @c unknown command formatting_regions.texi(mymacro,46) @code{@@#} @# formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @c no arg formatting_regions.texi(mymacro,46) @code{@@w@{--a@}} @w{--a} formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @c no file formatting_regions.texi(mymacro,46) @code{@@image@{,1--xt@}} @image{,1--xt} formatting_regions.texi(mymacro,46) @code{@@image@{,,2--xt@}} @image{,,2--xt} formatting_regions.texi(mymacro,46) @code{@@image@{,,,3--xt@}} @image{,,,3--xt} formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @sp formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @c braces missing formatting_regions.texi(mymacro,46) @itemize @emph after emph formatting_regions.texi(mymacro,46) @item e--mph item formatting_regions.texi(mymacro,46) @end itemize formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @c braces missing formatting_regions.texi(mymacro,46) @itemize @bullet a--n itemize line formatting_regions.texi(mymacro,46) @item i--tem 1 formatting_regions.texi(mymacro,46) @item i--tem 2 formatting_regions.texi(mymacro,46) @end itemize formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @c deffnx after deff lines formatting_regions.texi(mymacro,46) @deffn fun formatting_regions.texi(mymacro,46) @deffnx truc machin bidule chose and } formatting_regions.texi(mymacro,46) @deffnx truc machin bidule chose and } after formatting_regions.texi(mymacro,46) @deffnx truc machin bidule chose and { formatting_regions.texi(mymacro,46) @deffnx truc machin bidule chose and { and after formatting_regions.texi(mymacro,46) @deffnx {truc} followed by a comment formatting_regions.texi(mymacro,46) @c comment formatting_regions.texi(mymacro,46) Various deff lines formatting_regions.texi(mymacro,46) @deffnx {truc} after a deff item formatting_regions.texi(mymacro,46) @end deffn formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @c node is non existent, or missing first arg formatting_regions.texi(mymacro,46) @code{@@ref@{node@}} @ref{node} formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @code{@@ref@{,cross ref name@}} @ref{,cross ref name} formatting_regions.texi(mymacro,46) @code{@@ref@{,,title@}} @ref{,,title} formatting_regions.texi(mymacro,46) @code{@@ref@{,,,file name@}} @ref{,,,file name} formatting_regions.texi(mymacro,46) @code{@@ref@{,,,,manual@}} @ref{,,,,manual} formatting_regions.texi(mymacro,46) @code{@@ref@{node,cross ref name@}} @ref{node,cross ref name} formatting_regions.texi(mymacro,46) @code{@@ref@{node,,title@}} @ref{node,,title} formatting_regions.texi(mymacro,46) @code{@@ref@{node,,,file name@}} @ref{node,,,file name} formatting_regions.texi(mymacro,46) @code{@@ref@{node,,,,manual@}} @ref{node,,,,manual} formatting_regions.texi(mymacro,46) @code{@@ref@{node,cross ref name,title,@}} @ref{node,cross ref name,title,} formatting_regions.texi(mymacro,46) @code{@@ref@{node,cross ref name,,file name@}} @ref{node,cross ref name,,file name} formatting_regions.texi(mymacro,46) @code{@@ref@{node,cross ref name,,,manual@}} @ref{node,cross ref name,,,manual} formatting_regions.texi(mymacro,46) @code{@@ref@{node,cross ref name,title,file name@}} @ref{node,cross ref name,title,file name} formatting_regions.texi(mymacro,46) @code{@@ref@{node,cross ref name,title,,manual@}} @ref{node,cross ref name,title,,manual} formatting_regions.texi(mymacro,46) @code{@@ref@{node,cross ref name,title, file name, manual@}} @ref{node,cross ref name,title, file name, manual} formatting_regions.texi(mymacro,46) @code{@@ref@{node,,title,file name@}} @ref{node,,title,file name} formatting_regions.texi(mymacro,46) @code{@@ref@{node,,title,,manual@}} @ref{node,,title,,manual} formatting_regions.texi(mymacro,46) @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} formatting_regions.texi(mymacro,46) @code{@@ref@{node,,title, file name, manual@}} @ref{node,,title, file name, manual} formatting_regions.texi(mymacro,46) @code{@@ref@{node,,,file name,manual@}} @ref{node,,,file name,manual} formatting_regions.texi(mymacro,46) @code{@@ref@{,cross ref name,title,@}} @ref{,cross ref name,title,} formatting_regions.texi(mymacro,46) @code{@@ref@{,cross ref name,,file name@}} @ref{,cross ref name,,file name} formatting_regions.texi(mymacro,46) @code{@@ref@{,cross ref name,,,manual@}} @ref{,cross ref name,,,manual} formatting_regions.texi(mymacro,46) @code{@@ref@{,cross ref name,title,file name@}} @ref{,cross ref name,title,file name} formatting_regions.texi(mymacro,46) @code{@@ref@{,cross ref name,title,,manual@}} @ref{,cross ref name,title,,manual} formatting_regions.texi(mymacro,46) @code{@@ref@{,cross ref name,title, file name, manual@}} @ref{,cross ref name,title, file name, manual} formatting_regions.texi(mymacro,46) @code{@@ref@{,,title,file name@}} @ref{,,title,file name} formatting_regions.texi(mymacro,46) @code{@@ref@{,,title,,manual@}} @ref{,,title,,manual} formatting_regions.texi(mymacro,46) @code{@@ref@{,,title, file name, manual@}} @ref{,,title, file name, manual} formatting_regions.texi(mymacro,46) @code{@@ref@{,,,file name,manual@}} @ref{,,,file name,manual} formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @code{@@inforef@{,cross ref name @}} @inforef{,cross ref name } formatting_regions.texi(mymacro,46) @code{@@inforef@{,,file name@}} @inforef{,,file name} formatting_regions.texi(mymacro,46) @code{@@inforef@{,cross ref name, file name@}} @inforef{,cross ref name, file name} formatting_regions.texi(mymacro,46) @code{@@inforef@{@}} @inforef{} formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) formatting_regions.texi(,47) formatting_regions.texi(,48) @example formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) < formatting_regions.texi(mymacro,49) > formatting_regions.texi(mymacro,49) " formatting_regions.texi(mymacro,49) & formatting_regions.texi(mymacro,49) ' formatting_regions.texi(mymacro,49) ` formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) ``simple-double--three---four----''@* formatting_regions.texi(mymacro,49) code: @code{``simple-double--three---four----''} @* formatting_regions.texi(mymacro,49) asis: @asis{``simple-double--three---four----''} @* formatting_regions.texi(mymacro,49) strong: @strong{``simple-double--three---four----''} @* formatting_regions.texi(mymacro,49) kbd: @kbd{``simple-double--three---four----''} @* formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) `@w{}`simple-double-@w{}-three---four----'@w{}'@* formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @cindex --option formatting_regions.texi(mymacro,49) @cindex `` formatting_regions.texi(mymacro,49) @findex `` formatting_regions.texi(mymacro,49) @findex --foption formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @@"u @"u formatting_regions.texi(mymacro,49) @@"@{U@} @"{U} formatting_regions.texi(mymacro,49) @@~n @~n formatting_regions.texi(mymacro,49) @@^a @^a formatting_regions.texi(mymacro,49) @@'e @'e formatting_regions.texi(mymacro,49) @@=o @=o formatting_regions.texi(mymacro,49) @@`i @`i formatting_regions.texi(mymacro,49) @@'@{e@} @'{e} formatting_regions.texi(mymacro,49) @@'@{@@dotless@{i@}@} @'{@dotless{i}} formatting_regions.texi(mymacro,49) @@dotless@{i@} @dotless{i} formatting_regions.texi(mymacro,49) @@dotless@{j@} @dotless{j} formatting_regions.texi(mymacro,49) @@`@{@@=E@} @`{@=E} formatting_regions.texi(mymacro,49) @@l@{@} @l{} formatting_regions.texi(mymacro,49) @@,@{@@'C@} @,{@'C} formatting_regions.texi(mymacro,49) @@,c @,c formatting_regions.texi(mymacro,49) @@,c@@"u @,c@"u @* formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @@* @* formatting_regions.texi(mymacro,49) @@ followed by a space formatting_regions.texi(mymacro,49) @ formatting_regions.texi(mymacro,49) @@ followed by a tab formatting_regions.texi(mymacro,49) @ formatting_regions.texi(mymacro,49) @@ followed by a new line formatting_regions.texi(mymacro,49) @ formatting_regions.texi(mymacro,49) @code{@@-} @- formatting_regions.texi(mymacro,49) @code{@@|} @| formatting_regions.texi(mymacro,49) @code{@@:} @: formatting_regions.texi(mymacro,49) @code{@@!} @! formatting_regions.texi(mymacro,49) @code{@@?} @? formatting_regions.texi(mymacro,49) @code{@@.} @. formatting_regions.texi(mymacro,49) @code{@@@@} @@ formatting_regions.texi(mymacro,49) @code{@@@}} @} formatting_regions.texi(mymacro,49) @code{@@@{} @{ formatting_regions.texi(mymacro,49) @code{@@/} @/ formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) foo vs.@: bar. formatting_regions.texi(mymacro,49) colon :@:And something else. formatting_regions.texi(mymacro,49) semi colon ;@:. formatting_regions.texi(mymacro,49) And ? ?@:. formatting_regions.texi(mymacro,49) Now ! !@:@@ formatting_regions.texi(mymacro,49) but , ,@: formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @@TeX @TeX{} formatting_regions.texi(mymacro,49) @@LaTeX @LaTeX{} formatting_regions.texi(mymacro,49) @@bullet @bullet{} formatting_regions.texi(mymacro,49) @@copyright @copyright{} formatting_regions.texi(mymacro,49) @@dots @dots{} formatting_regions.texi(mymacro,49) @@enddots @enddots{} formatting_regions.texi(mymacro,49) @@equiv @equiv{} formatting_regions.texi(mymacro,49) @@error @error{} formatting_regions.texi(mymacro,49) @@expansion @expansion{} formatting_regions.texi(mymacro,49) @@minus @minus{} formatting_regions.texi(mymacro,49) @@point @point{} formatting_regions.texi(mymacro,49) @@print @print{} formatting_regions.texi(mymacro,49) @@result @result{} formatting_regions.texi(mymacro,49) @@today @today{} formatting_regions.texi(mymacro,49) @@aa @aa{} formatting_regions.texi(mymacro,49) @@AA @AA{} formatting_regions.texi(mymacro,49) @@ae @ae{} formatting_regions.texi(mymacro,49) @@oe @oe{} formatting_regions.texi(mymacro,49) @@AE @AE{} formatting_regions.texi(mymacro,49) @@OE @OE{} formatting_regions.texi(mymacro,49) @@o @o{} formatting_regions.texi(mymacro,49) @@O @O{} formatting_regions.texi(mymacro,49) @@ss @ss{} formatting_regions.texi(mymacro,49) @@l @l{} formatting_regions.texi(mymacro,49) @@L @L{} formatting_regions.texi(mymacro,49) @@exclamdown @exclamdown{} formatting_regions.texi(mymacro,49) @@questiondown @questiondown{} formatting_regions.texi(mymacro,49) @@pounds @pounds{} formatting_regions.texi(mymacro,49) @@registeredsymbol @registeredsymbol{} formatting_regions.texi(mymacro,49) @@ordf @ordf{} formatting_regions.texi(mymacro,49) @@ordm @ordm{} formatting_regions.texi(mymacro,49) @@comma @comma{} formatting_regions.texi(mymacro,49) @@quotedblleft @quotedblleft{} formatting_regions.texi(mymacro,49) @@quotedblright @quotedblright{} formatting_regions.texi(mymacro,49) @@quoteleft @quoteleft{} formatting_regions.texi(mymacro,49) @@quoteright @quoteright{} formatting_regions.texi(mymacro,49) @@quotedblbase @quotedblbase{} formatting_regions.texi(mymacro,49) @@quotesinglbase @quotesinglbase{} formatting_regions.texi(mymacro,49) @@guillemetleft @guillemetleft{} formatting_regions.texi(mymacro,49) @@guillemetright @guillemetright{} formatting_regions.texi(mymacro,49) @@guillemotleft @guillemotleft{} formatting_regions.texi(mymacro,49) @@guillemotright @guillemotright{} formatting_regions.texi(mymacro,49) @@guilsinglleft @guilsinglleft{} formatting_regions.texi(mymacro,49) @@guilsinglright @guilsinglright{} formatting_regions.texi(mymacro,49) @@textdegree @textdegree{} formatting_regions.texi(mymacro,49) @@euro @euro{} formatting_regions.texi(mymacro,49) @@arrow @arrow{} formatting_regions.texi(mymacro,49) @@leq @leq{} formatting_regions.texi(mymacro,49) @@geq @geq{} formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @code{@@acronym@{--a,an accronym@}} @acronym{--a,an accronym} formatting_regions.texi(mymacro,49) @code{@@acronym@{--a@}} @acronym{--a} formatting_regions.texi(mymacro,49) @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude Autonome @}} @abbr{@'E--. @comma{}A., @'Etude Autonome } formatting_regions.texi(mymacro,49) @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} formatting_regions.texi(mymacro,49) @code{@@asis@{--a@}} @asis{--a} formatting_regions.texi(mymacro,49) @code{@@b@{--a@}} @b{--a} formatting_regions.texi(mymacro,49) @code{@@cite@{--a@}} @cite{--a} formatting_regions.texi(mymacro,49) @code{@@code@{--a@}} @code{--a} formatting_regions.texi(mymacro,49) @code{@@command@{--a@}} @command{--a} formatting_regions.texi(mymacro,49) @code{@@ctrl@{--a@}} @ctrl{--a} formatting_regions.texi(mymacro,49) @code{@@dfn@{--a@}} @dfn{--a} formatting_regions.texi(mymacro,49) @code{@@dmn@{--a@}} @dmn{--a} formatting_regions.texi(mymacro,49) @code{@@email@{--a,--b@}} @email{--a,--b} formatting_regions.texi(mymacro,49) @code{@@email@{,--b@}} @email{,--b} formatting_regions.texi(mymacro,49) @code{@@email@{--a@}} @email{--a} formatting_regions.texi(mymacro,49) @code{@@emph@{--a@}} @emph{--a} formatting_regions.texi(mymacro,49) @code{@@env@{--a@}} @env{--a} formatting_regions.texi(mymacro,49) @code{@@file@{--a@}} @file{--a} formatting_regions.texi(mymacro,49) @code{@@i@{--a@}} @i{--a} formatting_regions.texi(mymacro,49) @code{@@kbd@{--a@}} @kbd{--a} formatting_regions.texi(mymacro,49) @code{@@key@{--a@}} @key{--a} formatting_regions.texi(mymacro,49) @code{@@math@{--a @{\frac@{1@}@{2@}@} @@minus@{@}@}} @math{--a {\frac{1}{2}} @minus{}} formatting_regions.texi(mymacro,49) @code{@@option@{--a@}} @option{--a} formatting_regions.texi(mymacro,49) @code{@@r@{--a@}} @r{--a} formatting_regions.texi(mymacro,49) @code{@@samp@{--a@}} @samp{--a} formatting_regions.texi(mymacro,49) @code{@@sc@{--a@}} @sc{--a} formatting_regions.texi(mymacro,49) @code{@@strong@{--a@}} @strong{--a} formatting_regions.texi(mymacro,49) @code{@@t@{--a@}} @t{--a} formatting_regions.texi(mymacro,49) @code{@@sansserif@{--a@}} @sansserif{--a} formatting_regions.texi(mymacro,49) @code{@@titlefont@{--a@}} @titlefont{--a} formatting_regions.texi(mymacro,49) @code{@@indicateurl@{--a@}} @indicateurl{--a} formatting_regions.texi(mymacro,49) @code{@@uref@{--a,--b@}} @uref{--a,--b} formatting_regions.texi(mymacro,49) @code{@@uref@{--a@}} @uref{--a} formatting_regions.texi(mymacro,49) @code{@@uref@{,--b@}} @uref{,--b} formatting_regions.texi(mymacro,49) @code{@@uref@{--a,--b,--c@}} @uref{--a,--b,--c} formatting_regions.texi(mymacro,49) @code{@@uref@{,--b,--c@}} @uref{,--b,--c} formatting_regions.texi(mymacro,49) @code{@@uref@{--a,,--c@}} @uref{--a,,--c} formatting_regions.texi(mymacro,49) @code{@@uref@{,,--c@}} @uref{,,--c} formatting_regions.texi(mymacro,49) @code{@@url@{--a,--b@}} @url{--a,--b} formatting_regions.texi(mymacro,49) @code{@@url@{--a,@}} @url{--a,} formatting_regions.texi(mymacro,49) @code{@@url@{,--b@}} @url{,--b} formatting_regions.texi(mymacro,49) @code{@@var@{--a@}} @var{--a} formatting_regions.texi(mymacro,49) @code{@@verb@{:--a:@}} @verb{:--a:} formatting_regions.texi(mymacro,49) @code{@@verb@{:a < & @@ % " -- b:@}} @verb{:a < & @ % " -- b:} formatting_regions.texi(mymacro,49) @code{@@w@{@}} @w{} formatting_regions.texi(mymacro,49) @code{@@H@{a@}} @H{a} formatting_regions.texi(mymacro,49) @code{@@H@{--a@}} @H{--a} formatting_regions.texi(mymacro,49) @code{@@dotaccent@{a@}} @dotaccent{a} formatting_regions.texi(mymacro,49) @code{@@dotaccent@{--a@}} @dotaccent{--a} formatting_regions.texi(mymacro,49) @code{@@ringaccent@{a@}} @ringaccent{a} formatting_regions.texi(mymacro,49) @code{@@ringaccent@{--a@}} @ringaccent{--a} formatting_regions.texi(mymacro,49) @code{@@tieaccent@{a@}} @tieaccent{a} formatting_regions.texi(mymacro,49) @code{@@tieaccent@{--a@}} @tieaccent{--a} formatting_regions.texi(mymacro,49) @code{@@u@{a@}} @u{a} formatting_regions.texi(mymacro,49) @code{@@u@{--a@}} @u{--a} formatting_regions.texi(mymacro,49) @code{@@ubaraccent@{a@}} @ubaraccent{a} formatting_regions.texi(mymacro,49) @code{@@ubaraccent@{--a@}} @ubaraccent{--a} formatting_regions.texi(mymacro,49) @code{@@udotaccent@{a@}} @udotaccent{a} formatting_regions.texi(mymacro,49) @code{@@udotaccent@{--a@}} @udotaccent{--a} formatting_regions.texi(mymacro,49) @code{@@v@{a@}} @v{a} formatting_regions.texi(mymacro,49) @code{@@v@{--a@}} @v{--a} formatting_regions.texi(mymacro,49) @code{@@,@{c@}} @,{c} formatting_regions.texi(mymacro,49) @code{@@,@{--c@}} @,{--c} formatting_regions.texi(mymacro,49) @code{@@ogonek@{a@}} @ogonek{a} formatting_regions.texi(mymacro,49) @code{@@ogonek@{--a@}} @ogonek{--a} formatting_regions.texi(mymacro,49) @code{@@footnote@{in footnote@}} @footnote{in footnote} formatting_regions.texi(mymacro,49) @code{@@footnote@{in footnote2@}} @footnote{in footnote2} formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @code{@@image@{f--ile@}} @image{f--ile} formatting_regions.texi(mymacro,49) @code{@@image@{f--ile,l--i@}} @image{f--ile,l--i} formatting_regions.texi(mymacro,49) @code{@@image@{f--ile,,l--e@}} @image{f--ile,,l--e} formatting_regions.texi(mymacro,49) @code{@@image@{f--ile,,,alt@}} @image{f--ile,,,alt} formatting_regions.texi(mymacro,49) @code{@@image@{f--ile,,,,e-d-xt@}} @image{f--ile,,,,e--xt} formatting_regions.texi(mymacro,49) @code{@@image@{f--ile,aze,az,alt,e--xt@}} @image{f--ile,aze,az,alt,e--xt} formatting_regions.texi(mymacro,49) @code{@@image@{f-ile,aze,,a--lt@}} @image{f-ile,aze,,a--lt} formatting_regions.texi(mymacro,49) @code{@@image@{@@file@{f--ile@}@@@@@@.,aze,az,alt,@@file@{file ext@} e--xt@@@}} @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@}} formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @sp 2 formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} formatting_regions.texi(mymacro,49) @clickstyle @result formatting_regions.texi(mymacro,49) After clickstyle @result{} formatting_regions.texi(mymacro,49) @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} formatting_regions.texi(mymacro,49) @clickstyle @arrow formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @quotation formatting_regions.texi(mymacro,49) A quot---ation formatting_regions.texi(mymacro,49) @end quotation formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @quotation Note formatting_regions.texi(mymacro,49) A Note formatting_regions.texi(mymacro,49) @end quotation formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @quotation note formatting_regions.texi(mymacro,49) A note formatting_regions.texi(mymacro,49) @end quotation formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @quotation Caution formatting_regions.texi(mymacro,49) Caution formatting_regions.texi(mymacro,49) @end quotation formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @quotation Important formatting_regions.texi(mymacro,49) Important formatting_regions.texi(mymacro,49) @end quotation formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @quotation Tip formatting_regions.texi(mymacro,49) a Tip formatting_regions.texi(mymacro,49) @end quotation formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @quotation Warning formatting_regions.texi(mymacro,49) a Warning. formatting_regions.texi(mymacro,49) @end quotation formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @quotation something @'e @TeX{} formatting_regions.texi(mymacro,49) The something @'e @TeX{} is here. formatting_regions.texi(mymacro,49) @end quotation formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @quotation @@ at the end of line @ formatting_regions.texi(mymacro,49) A @@ at the end of the @@quotation line. formatting_regions.texi(mymacro,49) @end quotation formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @quotation something, other thing formatting_regions.texi(mymacro,49) something, other thing formatting_regions.texi(mymacro,49) @end quotation formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @quotation Note, the note formatting_regions.texi(mymacro,49) Note, the note formatting_regions.texi(mymacro,49) @end quotation formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @quotation formatting_regions.texi(mymacro,49) @end quotation formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @quotation Empty formatting_regions.texi(mymacro,49) @end quotation formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @quotation @asis{} formatting_regions.texi(mymacro,49) @end quotation formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @quotation @* formatting_regions.texi(mymacro,49) @end quotation formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @smallquotation formatting_regions.texi(mymacro,49) A small quot---ation formatting_regions.texi(mymacro,49) @end smallquotation formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @smallquotation Note formatting_regions.texi(mymacro,49) A small Note formatting_regions.texi(mymacro,49) @end smallquotation formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @smallquotation something, other thing formatting_regions.texi(mymacro,49) something, other thing formatting_regions.texi(mymacro,49) @end smallquotation formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @itemize formatting_regions.texi(mymacro,49) @item i--temize formatting_regions.texi(mymacro,49) @end itemize formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @itemize + formatting_regions.texi(mymacro,49) @item i--tem + formatting_regions.texi(mymacro,49) @end itemize formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @itemize @bullet formatting_regions.texi(mymacro,49) @item b--ullet formatting_regions.texi(mymacro,49) @end itemize formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @itemize @minus formatting_regions.texi(mymacro,49) @item minu--s formatting_regions.texi(mymacro,49) @end itemize formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @itemize @emph formatting_regions.texi(mymacro,49) @item e--mph item formatting_regions.texi(mymacro,49) @end itemize formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @itemize @emph{after emph} formatting_regions.texi(mymacro,49) @c comment in itemize formatting_regions.texi(mymacro,49) @item e--mph item formatting_regions.texi(mymacro,49) @end itemize formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @itemize @bullet{} a--n itemize line formatting_regions.texi(mymacro,49) @cindex index entry within itemize formatting_regions.texi(mymacro,49) @item i--tem 1 formatting_regions.texi(mymacro,49) @item i--tem 2 formatting_regions.texi(mymacro,49) @end itemize formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @enumerate formatting_regions.texi(mymacro,49) @item e--numerate formatting_regions.texi(mymacro,49) @end enumerate formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @multitable @columnfractions 6 7 formatting_regions.texi(mymacro,49) @headitem mu--ltitable headitem @tab another tab formatting_regions.texi(mymacro,49) @item mu--ltitable item @tab multitable tab formatting_regions.texi(mymacro,49) @c comment in multitable formatting_regions.texi(mymacro,49) @item mu--ltitable item 2 @tab multitable tab 2 formatting_regions.texi(mymacro,49) @cindex index entry within multitable formatting_regions.texi(mymacro,49) @item lone mu--ltitable item formatting_regions.texi(mymacro,49) @end multitable formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @multitable {truc} {bidule} formatting_regions.texi(mymacro,49) @item truc @tab bidule formatting_regions.texi(mymacro,49) @end multitable formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @example formatting_regions.texi(mymacro,49) e--xample some formatting_regions.texi(mymacro,49) text formatting_regions.texi(mymacro,49) @end example formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @smallexample formatting_regions.texi(mymacro,49) s--mallexample formatting_regions.texi(mymacro,49) @end smallexample formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @display formatting_regions.texi(mymacro,49) d--isplay formatting_regions.texi(mymacro,49) @end display formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @smalldisplay formatting_regions.texi(mymacro,49) s--malldisplay formatting_regions.texi(mymacro,49) @end smalldisplay formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @lisp formatting_regions.texi(mymacro,49) l--isp formatting_regions.texi(mymacro,49) @end lisp formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @smalllisp formatting_regions.texi(mymacro,49) s--malllisp formatting_regions.texi(mymacro,49) @end smalllisp formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @format formatting_regions.texi(mymacro,49) f--ormat formatting_regions.texi(mymacro,49) @end format formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @smallformat formatting_regions.texi(mymacro,49) s--mallformat formatting_regions.texi(mymacro,49) @end smallformat formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @deffn c--ategory d--effn_name a--rguments... formatting_regions.texi(mymacro,49) d--effn formatting_regions.texi(mymacro,49) @end deffn formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @deffn cate--gory de--ffn_name ar--guments @ formatting_regions.texi(mymacro,49) more args @* even more so formatting_regions.texi(mymacro,49) def--fn formatting_regions.texi(mymacro,49) @end deffn formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @deffn fset @var{i} a g formatting_regions.texi(mymacro,49) @cindex index entry within deffn formatting_regions.texi(mymacro,49) @deffnx {cmde} truc {} formatting_regions.texi(mymacro,49) @deffnx Command {log trap} {} formatting_regions.texi(mymacro,49) @deffnx Command { log trap1} {} formatting_regions.texi(mymacro,49) @deffnx Command {log trap2 } {} formatting_regions.texi(mymacro,49) @deffnx cmde @b{id ule} truc formatting_regions.texi(mymacro,49) @deffnx cmde2 @b{id @samp{i} ule} truc formatting_regions.texi(mymacro,49) @deffnx @b{id @samp{i} ule} formatting_regions.texi(mymacro,49) @deffnx formatting_regions.texi(mymacro,49) @deffnx aaa formatting_regions.texi(mymacro,49) @deffnx {} {} formatting_regions.texi(mymacro,49) @deffnx{} formatting_regions.texi(mymacro,49) @deffnx{} machin formatting_regions.texi(mymacro,49) @deffnx{} {bidule machin} formatting_regions.texi(mymacro,49) @deffnx{truc} machin formatting_regions.texi(mymacro,49) @deffnx{truc} { } formatting_regions.texi(mymacro,49) @deffnx{truc} followed by a comment formatting_regions.texi(mymacro,49) @c comment formatting_regions.texi(mymacro,49) @deffnx{truc} formatting_regions.texi(mymacro,49) @deffnx{} {} formatting_regions.texi(mymacro,49) @deffnx {truc} a b c d e @b{f g} {h i} formatting_regions.texi(mymacro,49) @deffnx {truc} deffnx before end deffn formatting_regions.texi(mymacro,49) @end deffn formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @deffn empty deffn formatting_regions.texi(mymacro,49) @end deffn formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @deffn empty deffn with deffnx formatting_regions.texi(mymacro,49) @c comment between deffn and deffnx formatting_regions.texi(mymacro,49) @deffnx empty deffnx formatting_regions.texi(mymacro,49) @end deffn formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @deffn fset @var{i} a g formatting_regions.texi(mymacro,49) @deffnx {cmde} truc {} formatting_regions.texi(mymacro,49) @c comment formatting_regions.texi(mymacro,49) text in def item for second def item formatting_regions.texi(mymacro,49) @end deffn formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @defvr c--ategory d--efvr_name formatting_regions.texi(mymacro,49) d--efvr formatting_regions.texi(mymacro,49) @end defvr formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... formatting_regions.texi(mymacro,49) d--eftypefn formatting_regions.texi(mymacro,49) @end deftypefn formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... formatting_regions.texi(mymacro,49) d--eftypeop formatting_regions.texi(mymacro,49) @end deftypeop formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @deftypevr c--ategory t--ype d--eftypevr_name formatting_regions.texi(mymacro,49) d--eftypevr formatting_regions.texi(mymacro,49) @end deftypevr formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @defcv c--ategory c--lass d--efcv_name formatting_regions.texi(mymacro,49) d--efcv formatting_regions.texi(mymacro,49) @end defcv formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @defop c--ategory c--lass d--efop_name a--rguments... formatting_regions.texi(mymacro,49) d--efop formatting_regions.texi(mymacro,49) @end defop formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @deftp c--ategory d--eftp_name a--ttributes... formatting_regions.texi(mymacro,49) d--eftp formatting_regions.texi(mymacro,49) @end deftp formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @defun d--efun_name a--rguments... formatting_regions.texi(mymacro,49) d--efun formatting_regions.texi(mymacro,49) @end defun formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @defmac d--efmac_name a--rguments... formatting_regions.texi(mymacro,49) d--efmac formatting_regions.texi(mymacro,49) @end defmac formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @defspec d--efspec_name a--rguments... formatting_regions.texi(mymacro,49) d--efspec formatting_regions.texi(mymacro,49) @end defspec formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @defvar d--efvar_name argvar argvar1 formatting_regions.texi(mymacro,49) d--efvar formatting_regions.texi(mymacro,49) @end defvar formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @defopt d--efopt_name formatting_regions.texi(mymacro,49) d--efopt formatting_regions.texi(mymacro,49) @end defopt formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @deftypefun t--ype d--eftypefun_name a--rguments... formatting_regions.texi(mymacro,49) d--eftypefun formatting_regions.texi(mymacro,49) @end deftypefun formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @deftypevar t--ype d--eftypevar_name formatting_regions.texi(mymacro,49) d--eftypevar formatting_regions.texi(mymacro,49) @end deftypevar formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @defivar c--lass d--efivar_name formatting_regions.texi(mymacro,49) d--efivar formatting_regions.texi(mymacro,49) @end defivar formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @deftypeivar c--lass t--ype d--eftypeivar_name formatting_regions.texi(mymacro,49) d--eftypeivar formatting_regions.texi(mymacro,49) @end deftypeivar formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @defmethod c--lass d--efmethod_name a--rguments... formatting_regions.texi(mymacro,49) d--efmethod formatting_regions.texi(mymacro,49) @end defmethod formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... formatting_regions.texi(mymacro,49) d--eftypemethod formatting_regions.texi(mymacro,49) @end deftypemethod formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @code{@@xref@{c---hapter@@@@, cross r---ef name@@@@, t---itle@@@@, file n---ame@@@@, ma---nual@@@@@}} @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@}. formatting_regions.texi(mymacro,49) @code{@@ref@{chapter, cross ref name, title, file name, manual@}} @ref{chapter, cross ref name, title, file name, manual} formatting_regions.texi(mymacro,49) @code{@@pxref@{chapter, cross ref name, title, file name, manual@}} @pxref{chapter, cross ref name, title, file name, manual} formatting_regions.texi(mymacro,49) @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @code{@@ref@{chapter@}} @ref{chapter} formatting_regions.texi(mymacro,49) @code{@@xref@{chapter@}} @xref{chapter}. formatting_regions.texi(mymacro,49) @code{@@pxref@{chapter@}} @pxref{chapter} formatting_regions.texi(mymacro,49) @code{@@ref@{s--ect@@comma@{@}ion@}} @ref{s--ect@comma{}ion} formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @code{@@ref@{s--ect@@comma@{@}ion, a @@comma@{@} in cross formatting_regions.texi(mymacro,49) ref, a comma@@comma@{@} in title, a comma@@comma@{@} in file, a @@comma@{@} in manual name @}} formatting_regions.texi(mymacro,49) @ref{s--ect@comma{}ion, a @comma{} in cross formatting_regions.texi(mymacro,49) ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @code{@@ref@{chapter,cross ref name@}} @ref{chapter,cross ref name} formatting_regions.texi(mymacro,49) @code{@@ref@{chapter,,title@}} @ref{chapter,,title} formatting_regions.texi(mymacro,49) @code{@@ref@{chapter,,,file name@}} @ref{chapter,,,file name} formatting_regions.texi(mymacro,49) @code{@@ref@{chapter,,,,manual@}} @ref{chapter,,,,manual} formatting_regions.texi(mymacro,49) @code{@@ref@{chapter,cross ref name,title,@}} @ref{chapter,cross ref name,title,} formatting_regions.texi(mymacro,49) @code{@@ref@{chapter,cross ref name,,file name@}} @ref{chapter,cross ref name,,file name} formatting_regions.texi(mymacro,49) @code{@@ref@{chapter,cross ref name,,,manual@}} @ref{chapter,cross ref name,,,manual} formatting_regions.texi(mymacro,49) @code{@@ref@{chapter,cross ref name,title,file name@}} @ref{chapter,cross ref name,title,file name} formatting_regions.texi(mymacro,49) @code{@@ref@{chapter,cross ref name,title,,manual@}} @ref{chapter,cross ref name,title,,manual} formatting_regions.texi(mymacro,49) @code{@@ref@{chapter,cross ref name,title, file name, manual@}} @ref{chapter,cross ref name,title, file name, manual} formatting_regions.texi(mymacro,49) @code{@@ref@{chapter,,title,file name@}} @ref{chapter,,title,file name} formatting_regions.texi(mymacro,49) @code{@@ref@{chapter,,title,,manual@}} @ref{chapter,,title,,manual} formatting_regions.texi(mymacro,49) @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} formatting_regions.texi(mymacro,49) @code{@@ref@{chapter,,,file name,manual@}} @ref{chapter,,,file name,manual} formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @code{@@ref@{(pman)anode,cross ref name@}} @ref{(pman)anode,cross ref name} formatting_regions.texi(mymacro,49) @code{@@ref@{(pman)anode,,title@}} @ref{(pman)anode,,title} formatting_regions.texi(mymacro,49) @code{@@ref@{(pman)anode,,,file name@}} @ref{(pman)anode,,,file name} formatting_regions.texi(mymacro,49) @code{@@ref@{(pman)anode,,,,manual@}} @ref{(pman)anode,,,,manual} formatting_regions.texi(mymacro,49) @code{@@ref@{(pman)anode,cross ref name,title,@}} @ref{(pman)anode,cross ref name,title,} formatting_regions.texi(mymacro,49) @code{@@ref@{(pman)anode,cross ref name,,file name@}} @ref{(pman)anode,cross ref name,,file name} formatting_regions.texi(mymacro,49) @code{@@ref@{(pman)anode,cross ref name,,,manual@}} @ref{(pman)anode,cross ref name,,,manual} formatting_regions.texi(mymacro,49) @code{@@ref@{(pman)anode,cross ref name,title,file name@}} @ref{(pman)anode,cross ref name,title,file name} formatting_regions.texi(mymacro,49) @code{@@ref@{(pman)anode,cross ref name,title,,manual@}} @ref{(pman)anode,cross ref name,title,,manual} formatting_regions.texi(mymacro,49) @code{@@ref@{(pman)anode,cross ref name,title, file name, manual@}} @ref{(pman)anode,cross ref name,title, file name, manual} formatting_regions.texi(mymacro,49) @code{@@ref@{(pman)anode,,title,file name@}} @ref{(pman)anode,,title,file name} formatting_regions.texi(mymacro,49) @code{@@ref@{(pman)anode,,title,,manual@}} @ref{(pman)anode,,title,,manual} formatting_regions.texi(mymacro,49) @code{@@ref@{(pman)anode,,title, file name, manual@}} @ref{(pman)anode,,title, file name, manual} formatting_regions.texi(mymacro,49) @code{@@ref@{(pman)anode,,,file name,manual@}} @ref{(pman)anode,,,file name,manual} formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} formatting_regions.texi(mymacro,49) @code{@@inforef@{chapter@}} @inforef{chapter} formatting_regions.texi(mymacro,49) @code{@@inforef@{chapter, cross ref name@}} @inforef{chapter, cross ref name} formatting_regions.texi(mymacro,49) @code{@@inforef@{chapter,,file name@}} @inforef{chapter,,file name} formatting_regions.texi(mymacro,49) @code{@@inforef@{node, cross ref name, file name@}} @inforef{node, cross ref name, file name} formatting_regions.texi(mymacro,49) @code{@@inforef@{node@}} @inforef{node} formatting_regions.texi(mymacro,49) @code{@@inforef@{node, cross ref name@}} @inforef{node, cross ref name} formatting_regions.texi(mymacro,49) @code{@@inforef@{node,,file name@}} @inforef{node,,file name} formatting_regions.texi(mymacro,49) @code{@@inforef@{chapter, cross ref name, file name, spurious arg@}} @inforef{chapter, cross ref name, file name, spurious arg} formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @code{@@inforef@{s--ect@@comma@{@}ion, a @@comma@{@} in cross formatting_regions.texi(mymacro,49) ref, a comma@@comma@{@} in file@}} formatting_regions.texi(mymacro,49) @inforef{s--ect@comma{}ion, a @comma{} in cross formatting_regions.texi(mymacro,49) ref, a comma@comma{} in file} formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @table @bullet formatting_regions.texi(mymacro,49) @c comment in table formatting_regions.texi(mymacro,49) @item a formatting_regions.texi(mymacro,49) l--ine formatting_regions.texi(mymacro,49) @end table formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @vtable @asis formatting_regions.texi(mymacro,49) @item a formatting_regions.texi(mymacro,49) @c comment between item and itemx formatting_regions.texi(mymacro,49) @itemx b formatting_regions.texi(mymacro,49) l--ine formatting_regions.texi(mymacro,49) @end vtable formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @ftable @minus formatting_regions.texi(mymacro,49) @item a formatting_regions.texi(mymacro,49) @cindex index entry between item and itemx formatting_regions.texi(mymacro,49) @itemx b formatting_regions.texi(mymacro,49) l--ine formatting_regions.texi(mymacro,49) @end ftable formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @cartouche formatting_regions.texi(mymacro,49) c--artouche formatting_regions.texi(mymacro,49) @end cartouche formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @flushleft formatting_regions.texi(mymacro,49) f--lushleft formatting_regions.texi(mymacro,49) @end flushleft formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @flushright formatting_regions.texi(mymacro,49) f--lushright formatting_regions.texi(mymacro,49) @end flushright formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @center ce--ntered line formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @verbatiminclude simplest.texi formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @verbatim formatting_regions.texi(mymacro,49) in verbatim '' formatting_regions.texi(mymacro,49) @end verbatim formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @html formatting_regions.texi(mymacro,49) html '' formatting_regions.texi(mymacro,49) @end html formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @majorheading majorheading formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @chapheading chapheading formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @heading heading formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @subheading subheading formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @subsubheading subsubheading formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @c makeinfo cannot handle that formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @code{@@acronym@{--a,an accronym @@comma@{@} @@enddots@{@}@}} @acronym{--a,an accronym @comma{} @enddots{}} formatting_regions.texi(mymacro,49) @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude--@@comma@{@} @@b@{Autonome@} @}} @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } formatting_regions.texi(mymacro,49) @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @code{@@math@{--a@@minus@{@} @{\frac@{1@}@{2@}@}@}} @math{--a@minus{} {\frac{1}{2}}} formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @code{@@image@{f-ile,,,alt@@verb@{:jk _" %@:@}@}} @image{f-ile,,,alt@verb{:jk _" %@:}} formatting_regions.texi(mymacro,49) @code{@@image@{f--ile,aze,az,@@verb@{:jk _" %@@:@} @@b@{in b "@},e--xt@}} @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} formatting_regions.texi(mymacro,49) @code{@@image@{file@@verb@{:jk _" %@@:@},,,alt@@verb@{:jk _" %@@:@}@}} @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @set invalid formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @c invalid texinfo formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) Somehow invalid use of @@,:@* formatting_regions.texi(mymacro,49) @@, @, formatting_regions.texi(mymacro,49) @* formatting_regions.texi(mymacro,49) @@,@@"u @,@"u formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) Invalid use of @@':@* formatting_regions.texi(mymacro,49) @@' @' formatting_regions.texi(mymacro,49) @* formatting_regions.texi(mymacro,49) @@'@@"u @'@"u formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @c only i or j as arg formatting_regions.texi(mymacro,49) @@dotless@{truc@} @dotless{truc} formatting_regions.texi(mymacro,49) @@dotless@{ij@} @dotless{ij} formatting_regions.texi(mymacro,49) @code{@@dotless@{--a@}} @dotless{--a} formatting_regions.texi(mymacro,49) @code{@@dotless@{a@}} @dotless{a} formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @c braces missing formatting_regions.texi(mymacro,49) @@TeX, but without brace @TeX formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @c unknown command formatting_regions.texi(mymacro,49) @code{@@#} @# formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @c no arg formatting_regions.texi(mymacro,49) @code{@@w@{--a@}} @w{--a} formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @c no file formatting_regions.texi(mymacro,49) @code{@@image@{,1--xt@}} @image{,1--xt} formatting_regions.texi(mymacro,49) @code{@@image@{,,2--xt@}} @image{,,2--xt} formatting_regions.texi(mymacro,49) @code{@@image@{,,,3--xt@}} @image{,,,3--xt} formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @sp formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @c braces missing formatting_regions.texi(mymacro,49) @itemize @emph after emph formatting_regions.texi(mymacro,49) @item e--mph item formatting_regions.texi(mymacro,49) @end itemize formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @c braces missing formatting_regions.texi(mymacro,49) @itemize @bullet a--n itemize line formatting_regions.texi(mymacro,49) @item i--tem 1 formatting_regions.texi(mymacro,49) @item i--tem 2 formatting_regions.texi(mymacro,49) @end itemize formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @c deffnx after deff lines formatting_regions.texi(mymacro,49) @deffn fun formatting_regions.texi(mymacro,49) @deffnx truc machin bidule chose and } formatting_regions.texi(mymacro,49) @deffnx truc machin bidule chose and } after formatting_regions.texi(mymacro,49) @deffnx truc machin bidule chose and { formatting_regions.texi(mymacro,49) @deffnx truc machin bidule chose and { and after formatting_regions.texi(mymacro,49) @deffnx {truc} followed by a comment formatting_regions.texi(mymacro,49) @c comment formatting_regions.texi(mymacro,49) Various deff lines formatting_regions.texi(mymacro,49) @deffnx {truc} after a deff item formatting_regions.texi(mymacro,49) @end deffn formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @c node is non existent, or missing first arg formatting_regions.texi(mymacro,49) @code{@@ref@{node@}} @ref{node} formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @code{@@ref@{,cross ref name@}} @ref{,cross ref name} formatting_regions.texi(mymacro,49) @code{@@ref@{,,title@}} @ref{,,title} formatting_regions.texi(mymacro,49) @code{@@ref@{,,,file name@}} @ref{,,,file name} formatting_regions.texi(mymacro,49) @code{@@ref@{,,,,manual@}} @ref{,,,,manual} formatting_regions.texi(mymacro,49) @code{@@ref@{node,cross ref name@}} @ref{node,cross ref name} formatting_regions.texi(mymacro,49) @code{@@ref@{node,,title@}} @ref{node,,title} formatting_regions.texi(mymacro,49) @code{@@ref@{node,,,file name@}} @ref{node,,,file name} formatting_regions.texi(mymacro,49) @code{@@ref@{node,,,,manual@}} @ref{node,,,,manual} formatting_regions.texi(mymacro,49) @code{@@ref@{node,cross ref name,title,@}} @ref{node,cross ref name,title,} formatting_regions.texi(mymacro,49) @code{@@ref@{node,cross ref name,,file name@}} @ref{node,cross ref name,,file name} formatting_regions.texi(mymacro,49) @code{@@ref@{node,cross ref name,,,manual@}} @ref{node,cross ref name,,,manual} formatting_regions.texi(mymacro,49) @code{@@ref@{node,cross ref name,title,file name@}} @ref{node,cross ref name,title,file name} formatting_regions.texi(mymacro,49) @code{@@ref@{node,cross ref name,title,,manual@}} @ref{node,cross ref name,title,,manual} formatting_regions.texi(mymacro,49) @code{@@ref@{node,cross ref name,title, file name, manual@}} @ref{node,cross ref name,title, file name, manual} formatting_regions.texi(mymacro,49) @code{@@ref@{node,,title,file name@}} @ref{node,,title,file name} formatting_regions.texi(mymacro,49) @code{@@ref@{node,,title,,manual@}} @ref{node,,title,,manual} formatting_regions.texi(mymacro,49) @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} formatting_regions.texi(mymacro,49) @code{@@ref@{node,,title, file name, manual@}} @ref{node,,title, file name, manual} formatting_regions.texi(mymacro,49) @code{@@ref@{node,,,file name,manual@}} @ref{node,,,file name,manual} formatting_regions.texi(mymacro,49) @code{@@ref@{,cross ref name,title,@}} @ref{,cross ref name,title,} formatting_regions.texi(mymacro,49) @code{@@ref@{,cross ref name,,file name@}} @ref{,cross ref name,,file name} formatting_regions.texi(mymacro,49) @code{@@ref@{,cross ref name,,,manual@}} @ref{,cross ref name,,,manual} formatting_regions.texi(mymacro,49) @code{@@ref@{,cross ref name,title,file name@}} @ref{,cross ref name,title,file name} formatting_regions.texi(mymacro,49) @code{@@ref@{,cross ref name,title,,manual@}} @ref{,cross ref name,title,,manual} formatting_regions.texi(mymacro,49) @code{@@ref@{,cross ref name,title, file name, manual@}} @ref{,cross ref name,title, file name, manual} formatting_regions.texi(mymacro,49) @code{@@ref@{,,title,file name@}} @ref{,,title,file name} formatting_regions.texi(mymacro,49) @code{@@ref@{,,title,,manual@}} @ref{,,title,,manual} formatting_regions.texi(mymacro,49) @code{@@ref@{,,title, file name, manual@}} @ref{,,title, file name, manual} formatting_regions.texi(mymacro,49) @code{@@ref@{,,,file name,manual@}} @ref{,,,file name,manual} formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @code{@@inforef@{,cross ref name @}} @inforef{,cross ref name } formatting_regions.texi(mymacro,49) @code{@@inforef@{,,file name@}} @inforef{,,file name} formatting_regions.texi(mymacro,49) @code{@@inforef@{,cross ref name, file name@}} @inforef{,cross ref name, file name} formatting_regions.texi(mymacro,49) @code{@@inforef@{@}} @inforef{} formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) formatting_regions.texi(,50) @end example formatting_regions.texi(,51) formatting_regions.texi(,52) insertcopying formatting_regions.texi(,53) @insertcopying formatting_regions.texi(,54) formatting_regions.texi(,55) @cindex t--ruc formatting_regions.texi(,56) @cindex T--ruc formatting_regions.texi(,57) @cindex . formatting_regions.texi(,58) @cindex ? formatting_regions.texi(,59) @cindex a formatting_regions.texi(,60) @findex t--ruc formatting_regions.texi(,61) @findex T--ruc formatting_regions.texi(,62) @findex . formatting_regions.texi(,63) @findex ? formatting_regions.texi(,64) @findex a formatting_regions.texi(,65) formatting_regions.texi(,66) formatting_regions.texi(,67) cp formatting_regions.texi(,68) @printindex cp formatting_regions.texi(,69) formatting_regions.texi(,70) fn formatting_regions.texi(,71) @printindex fn formatting_regions.texi(,72) formatting_regions.texi(,73) vr formatting_regions.texi(,74) @printindex vr formatting_regions.texi(,75) formatting_regions.texi(,76) ky formatting_regions.texi(,77) @printindex ky formatting_regions.texi(,78) formatting_regions.texi(,79) pg formatting_regions.texi(,80) @printindex pg formatting_regions.texi(,81) formatting_regions.texi(,82) tp formatting_regions.texi(,83) @printindex tp formatting_regions.texi(,84) formatting_regions.texi(,85) formatting_regions.texi(,86) formatting_regions.texi(,87) @node chapter formatting_regions.texi(,88) @chapter chapter formatting_regions.texi(,89) formatting_regions.texi(,90) @footnote{in footnote} formatting_regions.texi(,91) formatting_regions.texi(,92) @format formatting_regions.texi(,93) @menu formatting_regions.texi(,94) * s--ect@comma{}ion:: s--ect@comma{}ion formatting_regions.texi(,95) formatting_regions.texi(,96) Menu comment formatting_regions.texi(,97) ``simple-double--three---four----''@* formatting_regions.texi(,98) formatting_regions.texi(,99) @end menu formatting_regions.texi(,100) @end format formatting_regions.texi(,101) formatting_regions.texi(,102) @node s--ect@comma{}ion formatting_regions.texi(,103) @section A section formatting_regions.texi(,104) formatting_regions.texi(,105) @menu formatting_regions.texi(,106) * subsection:: formatting_regions.texi(,107) @end menu formatting_regions.texi(,108) formatting_regions.texi(,109) @node subsection formatting_regions.texi(,110) @subsection subsection formatting_regions.texi(,111) formatting_regions.texi(,112) @menu formatting_regions.texi(,113) * subsubsection:: formatting_regions.texi(,114) @end menu formatting_regions.texi(,115) formatting_regions.texi(,116) @anchor{anchor} formatting_regions.texi(,117) formatting_regions.texi(,118) @node subsubsection formatting_regions.texi(,119) @subsubsection subsubsection formatting_regions.texi(,120) formatting_regions.texi(,121) @node chapter2 formatting_regions.texi(,122) @centerchap chapter 2 formatting_regions.texi(,123) formatting_regions.texi(,124) @printindex cp formatting_regions.texi(,125) @printindex fn formatting_regions.texi(,126) formatting_regions.texi(,127) @contents formatting_regions.texi(,128) @shortcontents texi2html-1.82/test/layout/res/texi_formatting_regions/formatting_regions.texi0000644000175000017500000022325611264347122032055 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename formatting-regions.info @documentdescription This is the explicit d--ocument @code{d@'escription}. @end documentdescription @node Top @top Top section @node constructs @chapter constructs @copying < > " & ' ` ``simple-double--three---four----''@* code: @code{``simple-double--three---four----''} @* asis: @asis{``simple-double--three---four----''} @* strong: @strong{``simple-double--three---four----''} @* kbd: @kbd{``simple-double--three---four----''} @* `@w{}`simple-double-@w{}-three---four----'@w{}'@* @cindex --option @cindex `` @findex `` @findex --foption @@"u @"u @@"@{U@} @"{U} @@~n @~n @@^a @^a @@'e @'e @@=o @=o @@`i @`i @@'@{e@} @'{e} @@'@{@@dotless@{i@}@} @'{@dotless{i}} @@dotless@{i@} @dotless{i} @@dotless@{j@} @dotless{j} @@`@{@@=E@} @`{@=E} @@l@{@} @l{} @@,@{@@'C@} @,{@'C} @@,c @,c @@,c@@"u @,c@"u @* @@* @* @@ followed by a space @ @@ followed by a tab @ @@ followed by a new line @ @code{@@-} @- @code{@@|} @| @code{@@:} @: @code{@@!} @! @code{@@?} @? @code{@@.} @. @code{@@@@} @@ @code{@@@}} @} @code{@@@{} @{ @code{@@/} @/ foo vs.@: bar. colon :@:And something else. semi colon ;@:. And ? ?@:. Now ! !@:@@ but , ,@: @@TeX @TeX{} @@LaTeX @LaTeX{} @@bullet @bullet{} @@copyright @copyright{} @@dots @dots{} @@enddots @enddots{} @@equiv @equiv{} @@error @error{} @@expansion @expansion{} @@minus @minus{} @@point @point{} @@print @print{} @@result @result{} @@today @today{} @@aa @aa{} @@AA @AA{} @@ae @ae{} @@oe @oe{} @@AE @AE{} @@OE @OE{} @@o @o{} @@O @O{} @@ss @ss{} @@l @l{} @@L @L{} @@exclamdown @exclamdown{} @@questiondown @questiondown{} @@pounds @pounds{} @@registeredsymbol @registeredsymbol{} @@ordf @ordf{} @@ordm @ordm{} @@comma @comma{} @@quotedblleft @quotedblleft{} @@quotedblright @quotedblright{} @@quoteleft @quoteleft{} @@quoteright @quoteright{} @@quotedblbase @quotedblbase{} @@quotesinglbase @quotesinglbase{} @@guillemetleft @guillemetleft{} @@guillemetright @guillemetright{} @@guillemotleft @guillemotleft{} @@guillemotright @guillemotright{} @@guilsinglleft @guilsinglleft{} @@guilsinglright @guilsinglright{} @@textdegree @textdegree{} @@euro @euro{} @@arrow @arrow{} @@leq @leq{} @@geq @geq{} @code{@@acronym@{--a,an accronym@}} @acronym{--a,an accronym} @code{@@acronym@{--a@}} @acronym{--a} @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude Autonome @}} @abbr{@'E--. @comma{}A., @'Etude Autonome } @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} @code{@@asis@{--a@}} @asis{--a} @code{@@b@{--a@}} @b{--a} @code{@@cite@{--a@}} @cite{--a} @code{@@code@{--a@}} @code{--a} @code{@@command@{--a@}} @command{--a} @code{@@ctrl@{--a@}} @ctrl{--a} @code{@@dfn@{--a@}} @dfn{--a} @code{@@dmn@{--a@}} @dmn{--a} @code{@@email@{--a,--b@}} @email{--a,--b} @code{@@email@{,--b@}} @email{,--b} @code{@@email@{--a@}} @email{--a} @code{@@emph@{--a@}} @emph{--a} @code{@@env@{--a@}} @env{--a} @code{@@file@{--a@}} @file{--a} @code{@@i@{--a@}} @i{--a} @code{@@kbd@{--a@}} @kbd{--a} @code{@@key@{--a@}} @key{--a} @code{@@math@{--a @{\frac@{1@}@{2@}@} @@minus@{@}@}} @math{--a {\frac{1}{2}} @minus{}} @code{@@option@{--a@}} @option{--a} @code{@@r@{--a@}} @r{--a} @code{@@samp@{--a@}} @samp{--a} @code{@@sc@{--a@}} @sc{--a} @code{@@strong@{--a@}} @strong{--a} @code{@@t@{--a@}} @t{--a} @code{@@sansserif@{--a@}} @sansserif{--a} @code{@@titlefont@{--a@}} @titlefont{--a} @code{@@indicateurl@{--a@}} @indicateurl{--a} @code{@@uref@{--a,--b@}} @uref{--a,--b} @code{@@uref@{--a@}} @uref{--a} @code{@@uref@{,--b@}} @uref{,--b} @code{@@uref@{--a,--b,--c@}} @uref{--a,--b,--c} @code{@@uref@{,--b,--c@}} @uref{,--b,--c} @code{@@uref@{--a,,--c@}} @uref{--a,,--c} @code{@@uref@{,,--c@}} @uref{,,--c} @code{@@url@{--a,--b@}} @url{--a,--b} @code{@@url@{--a,@}} @url{--a,} @code{@@url@{,--b@}} @url{,--b} @code{@@var@{--a@}} @var{--a} @code{@@verb@{:--a:@}} @verb{:--a:} @code{@@verb@{:a < & @@ % " -- b:@}} @verb{:a < & @ % " -- b:} @code{@@w@{@}} @w{} @code{@@H@{a@}} @H{a} @code{@@H@{--a@}} @H{--a} @code{@@dotaccent@{a@}} @dotaccent{a} @code{@@dotaccent@{--a@}} @dotaccent{--a} @code{@@ringaccent@{a@}} @ringaccent{a} @code{@@ringaccent@{--a@}} @ringaccent{--a} @code{@@tieaccent@{a@}} @tieaccent{a} @code{@@tieaccent@{--a@}} @tieaccent{--a} @code{@@u@{a@}} @u{a} @code{@@u@{--a@}} @u{--a} @code{@@ubaraccent@{a@}} @ubaraccent{a} @code{@@ubaraccent@{--a@}} @ubaraccent{--a} @code{@@udotaccent@{a@}} @udotaccent{a} @code{@@udotaccent@{--a@}} @udotaccent{--a} @code{@@v@{a@}} @v{a} @code{@@v@{--a@}} @v{--a} @code{@@,@{c@}} @,{c} @code{@@,@{--c@}} @,{--c} @code{@@ogonek@{a@}} @ogonek{a} @code{@@ogonek@{--a@}} @ogonek{--a} @code{@@footnote@{in footnote@}} @footnote{in footnote} @code{@@footnote@{in footnote2@}} @footnote{in footnote2} @code{@@image@{f--ile@}} @image{f--ile} @code{@@image@{f--ile,l--i@}} @image{f--ile,l--i} @code{@@image@{f--ile,,l--e@}} @image{f--ile,,l--e} @code{@@image@{f--ile,,,alt@}} @image{f--ile,,,alt} @code{@@image@{f--ile,,,,e-d-xt@}} @image{f--ile,,,,e--xt} @code{@@image@{f--ile,aze,az,alt,e--xt@}} @image{f--ile,aze,az,alt,e--xt} @code{@@image@{f-ile,aze,,a--lt@}} @image{f-ile,aze,,a--lt} @code{@@image@{@@file@{f--ile@}@@@@@@.,aze,az,alt,@@file@{file ext@} e--xt@@@}} @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@}} @sp 2 @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} @clickstyle @result After clickstyle @result{} @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} @clickstyle @arrow @quotation A quot---ation @end quotation @quotation Note A Note @end quotation @quotation note A note @end quotation @quotation Caution Caution @end quotation @quotation Important Important @end quotation @quotation Tip a Tip @end quotation @quotation Warning a Warning. @end quotation @quotation something @'e @TeX{} The something @'e @TeX{} is here. @end quotation @quotation @@ at the end of line @ A @@ at the end of the @@quotation line. @end quotation @quotation something, other thing something, other thing @end quotation @quotation Note, the note Note, the note @end quotation @quotation @end quotation @quotation Empty @end quotation @quotation @asis{} @end quotation @quotation @* @end quotation @smallquotation A small quot---ation @end smallquotation @smallquotation Note A small Note @end smallquotation @smallquotation something, other thing something, other thing @end smallquotation @itemize @item i--temize @end itemize @itemize + @item i--tem + @end itemize @itemize @bullet @item b--ullet @end itemize @itemize @minus @item minu--s @end itemize @itemize @emph @item e--mph item @end itemize @itemize @emph{after emph} @c comment in itemize @item e--mph item @end itemize @itemize @bullet{} a--n itemize line @cindex index entry within itemize @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 6 7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @c comment in multitable @item mu--ltitable item 2 @tab multitable tab 2 @cindex index entry within multitable @item lone mu--ltitable item @end multitable @multitable {truc} {bidule} @item truc @tab bidule @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @display d--isplay @end display @smalldisplay s--malldisplay @end smalldisplay @lisp l--isp @end lisp @smalllisp s--malllisp @end smalllisp @format f--ormat @end format @smallformat s--mallformat @end smallformat @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @deffn cate--gory de--ffn_name ar--guments @ more args @* even more so def--fn @end deffn @deffn fset @var{i} a g @cindex index entry within deffn @deffnx {cmde} truc {} @deffnx Command {log trap} {} @deffnx Command { log trap1} {} @deffnx Command {log trap2 } {} @deffnx cmde @b{id ule} truc @deffnx cmde2 @b{id @samp{i} ule} truc @deffnx @b{id @samp{i} ule} @deffnx @deffnx aaa @deffnx {} {} @deffnx{} @deffnx{} machin @deffnx{} {bidule machin} @deffnx{truc} machin @deffnx{truc} { } @deffnx{truc} followed by a comment @c comment @deffnx{truc} @deffnx{} {} @deffnx {truc} a b c d e @b{f g} {h i} @deffnx {truc} deffnx before end deffn @end deffn @deffn empty deffn @end deffn @deffn empty deffn with deffnx @c comment between deffn and deffnx @deffnx empty deffnx @end deffn @deffn fset @var{i} a g @deffnx {cmde} truc {} @c comment text in def item for second def item @end deffn @defvr c--ategory d--efvr_name d--efvr @end defvr @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... d--eftypefn @end deftypefn @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... d--eftypeop @end deftypeop @deftypevr c--ategory t--ype d--eftypevr_name d--eftypevr @end deftypevr @defcv c--ategory c--lass d--efcv_name d--efcv @end defcv @defop c--ategory c--lass d--efop_name a--rguments... d--efop @end defop @deftp c--ategory d--eftp_name a--ttributes... d--eftp @end deftp @defun d--efun_name a--rguments... d--efun @end defun @defmac d--efmac_name a--rguments... d--efmac @end defmac @defspec d--efspec_name a--rguments... d--efspec @end defspec @defvar d--efvar_name argvar argvar1 d--efvar @end defvar @defopt d--efopt_name d--efopt @end defopt @deftypefun t--ype d--eftypefun_name a--rguments... d--eftypefun @end deftypefun @deftypevar t--ype d--eftypevar_name d--eftypevar @end deftypevar @defivar c--lass d--efivar_name d--efivar @end defivar @deftypeivar c--lass t--ype d--eftypeivar_name d--eftypeivar @end deftypeivar @defmethod c--lass d--efmethod_name a--rguments... d--efmethod @end defmethod @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... d--eftypemethod @end deftypemethod @code{@@xref@{c---hapter@@@@, cross r---ef name@@@@, t---itle@@@@, file n---ame@@@@, ma---nual@@@@@}} @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@}. @code{@@ref@{chapter, cross ref name, title, file name, manual@}} @ref{chapter, cross ref name, title, file name, manual} @code{@@pxref@{chapter, cross ref name, title, file name, manual@}} @pxref{chapter, cross ref name, title, file name, manual} @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} @code{@@ref@{chapter@}} @ref{chapter} @code{@@xref@{chapter@}} @xref{chapter}. @code{@@pxref@{chapter@}} @pxref{chapter} @code{@@ref@{s--ect@@comma@{@}ion@}} @ref{s--ect@comma{}ion} @code{@@ref@{s--ect@@comma@{@}ion, a @@comma@{@} in cross ref, a comma@@comma@{@} in title, a comma@@comma@{@} in file, a @@comma@{@} in manual name @}} @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } @code{@@ref@{chapter,cross ref name@}} @ref{chapter,cross ref name} @code{@@ref@{chapter,,title@}} @ref{chapter,,title} @code{@@ref@{chapter,,,file name@}} @ref{chapter,,,file name} @code{@@ref@{chapter,,,,manual@}} @ref{chapter,,,,manual} @code{@@ref@{chapter,cross ref name,title,@}} @ref{chapter,cross ref name,title,} @code{@@ref@{chapter,cross ref name,,file name@}} @ref{chapter,cross ref name,,file name} @code{@@ref@{chapter,cross ref name,,,manual@}} @ref{chapter,cross ref name,,,manual} @code{@@ref@{chapter,cross ref name,title,file name@}} @ref{chapter,cross ref name,title,file name} @code{@@ref@{chapter,cross ref name,title,,manual@}} @ref{chapter,cross ref name,title,,manual} @code{@@ref@{chapter,cross ref name,title, file name, manual@}} @ref{chapter,cross ref name,title, file name, manual} @code{@@ref@{chapter,,title,file name@}} @ref{chapter,,title,file name} @code{@@ref@{chapter,,title,,manual@}} @ref{chapter,,title,,manual} @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} @code{@@ref@{chapter,,,file name,manual@}} @ref{chapter,,,file name,manual} @code{@@ref@{(pman)anode,cross ref name@}} @ref{(pman)anode,cross ref name} @code{@@ref@{(pman)anode,,title@}} @ref{(pman)anode,,title} @code{@@ref@{(pman)anode,,,file name@}} @ref{(pman)anode,,,file name} @code{@@ref@{(pman)anode,,,,manual@}} @ref{(pman)anode,,,,manual} @code{@@ref@{(pman)anode,cross ref name,title,@}} @ref{(pman)anode,cross ref name,title,} @code{@@ref@{(pman)anode,cross ref name,,file name@}} @ref{(pman)anode,cross ref name,,file name} @code{@@ref@{(pman)anode,cross ref name,,,manual@}} @ref{(pman)anode,cross ref name,,,manual} @code{@@ref@{(pman)anode,cross ref name,title,file name@}} @ref{(pman)anode,cross ref name,title,file name} @code{@@ref@{(pman)anode,cross ref name,title,,manual@}} @ref{(pman)anode,cross ref name,title,,manual} @code{@@ref@{(pman)anode,cross ref name,title, file name, manual@}} @ref{(pman)anode,cross ref name,title, file name, manual} @code{@@ref@{(pman)anode,,title,file name@}} @ref{(pman)anode,,title,file name} @code{@@ref@{(pman)anode,,title,,manual@}} @ref{(pman)anode,,title,,manual} @code{@@ref@{(pman)anode,,title, file name, manual@}} @ref{(pman)anode,,title, file name, manual} @code{@@ref@{(pman)anode,,,file name,manual@}} @ref{(pman)anode,,,file name,manual} @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} @code{@@inforef@{chapter@}} @inforef{chapter} @code{@@inforef@{chapter, cross ref name@}} @inforef{chapter, cross ref name} @code{@@inforef@{chapter,,file name@}} @inforef{chapter,,file name} @code{@@inforef@{node, cross ref name, file name@}} @inforef{node, cross ref name, file name} @code{@@inforef@{node@}} @inforef{node} @code{@@inforef@{node, cross ref name@}} @inforef{node, cross ref name} @code{@@inforef@{node,,file name@}} @inforef{node,,file name} @code{@@inforef@{chapter, cross ref name, file name, spurious arg@}} @inforef{chapter, cross ref name, file name, spurious arg} @code{@@inforef@{s--ect@@comma@{@}ion, a @@comma@{@} in cross ref, a comma@@comma@{@} in file@}} @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} @table @bullet @c comment in table @item a l--ine @end table @vtable @asis @item a @c comment between item and itemx @itemx b l--ine @end vtable @ftable @minus @item a @cindex index entry between item and itemx @itemx b l--ine @end ftable @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @verbatiminclude simplest.texi @verbatim in verbatim '' @end verbatim @html html '' @end html @majorheading majorheading @chapheading chapheading @heading heading @subheading subheading @subsubheading subsubheading @c makeinfo cannot handle that @code{@@acronym@{--a,an accronym @@comma@{@} @@enddots@{@}@}} @acronym{--a,an accronym @comma{} @enddots{}} @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude--@@comma@{@} @@b@{Autonome@} @}} @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} @code{@@math@{--a@@minus@{@} @{\frac@{1@}@{2@}@}@}} @math{--a@minus{} {\frac{1}{2}}} @code{@@image@{f-ile,,,alt@@verb@{:jk _" %@:@}@}} @image{f-ile,,,alt@verb{:jk _" %@:}} @code{@@image@{f--ile,aze,az,@@verb@{:jk _" %@@:@} @@b@{in b "@},e--xt@}} @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} @code{@@image@{file@@verb@{:jk _" %@@:@},,,alt@@verb@{:jk _" %@@:@}@}} @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} @set invalid @c invalid texinfo Somehow invalid use of @@,:@* @@, @, @* @@,@@"u @,@"u Invalid use of @@':@* @@' @' @* @@'@@"u @'@"u @c only i or j as arg @@dotless@{truc@} @dotless{truc} @@dotless@{ij@} @dotless{ij} @code{@@dotless@{--a@}} @dotless{--a} @code{@@dotless@{a@}} @dotless{a} @c braces missing @@TeX, but without brace @TeX @c unknown command @code{@@#} @# @c no arg @code{@@w@{--a@}} @w{--a} @c no file @code{@@image@{,1--xt@}} @image{,1--xt} @code{@@image@{,,2--xt@}} @image{,,2--xt} @code{@@image@{,,,3--xt@}} @image{,,,3--xt} @sp @c braces missing @itemize @emph after emph @item e--mph item @end itemize @c braces missing @itemize @bullet a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @c deffnx after deff lines @deffn fun @deffnx truc machin bidule chose and } @deffnx truc machin bidule chose and } after @deffnx truc machin bidule chose and { @deffnx truc machin bidule chose and { and after @deffnx {truc} followed by a comment @c comment Various deff lines @deffnx {truc} after a deff item @end deffn @c node is non existent, or missing first arg @code{@@ref@{node@}} @ref{node} @code{@@ref@{,cross ref name@}} @ref{,cross ref name} @code{@@ref@{,,title@}} @ref{,,title} @code{@@ref@{,,,file name@}} @ref{,,,file name} @code{@@ref@{,,,,manual@}} @ref{,,,,manual} @code{@@ref@{node,cross ref name@}} @ref{node,cross ref name} @code{@@ref@{node,,title@}} @ref{node,,title} @code{@@ref@{node,,,file name@}} @ref{node,,,file name} @code{@@ref@{node,,,,manual@}} @ref{node,,,,manual} @code{@@ref@{node,cross ref name,title,@}} @ref{node,cross ref name,title,} @code{@@ref@{node,cross ref name,,file name@}} @ref{node,cross ref name,,file name} @code{@@ref@{node,cross ref name,,,manual@}} @ref{node,cross ref name,,,manual} @code{@@ref@{node,cross ref name,title,file name@}} @ref{node,cross ref name,title,file name} @code{@@ref@{node,cross ref name,title,,manual@}} @ref{node,cross ref name,title,,manual} @code{@@ref@{node,cross ref name,title, file name, manual@}} @ref{node,cross ref name,title, file name, manual} @code{@@ref@{node,,title,file name@}} @ref{node,,title,file name} @code{@@ref@{node,,title,,manual@}} @ref{node,,title,,manual} @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} @code{@@ref@{node,,title, file name, manual@}} @ref{node,,title, file name, manual} @code{@@ref@{node,,,file name,manual@}} @ref{node,,,file name,manual} @code{@@ref@{,cross ref name,title,@}} @ref{,cross ref name,title,} @code{@@ref@{,cross ref name,,file name@}} @ref{,cross ref name,,file name} @code{@@ref@{,cross ref name,,,manual@}} @ref{,cross ref name,,,manual} @code{@@ref@{,cross ref name,title,file name@}} @ref{,cross ref name,title,file name} @code{@@ref@{,cross ref name,title,,manual@}} @ref{,cross ref name,title,,manual} @code{@@ref@{,cross ref name,title, file name, manual@}} @ref{,cross ref name,title, file name, manual} @code{@@ref@{,,title,file name@}} @ref{,,title,file name} @code{@@ref@{,,title,,manual@}} @ref{,,title,,manual} @code{@@ref@{,,title, file name, manual@}} @ref{,,title, file name, manual} @code{@@ref@{,,,file name,manual@}} @ref{,,,file name,manual} @code{@@inforef@{,cross ref name @}} @inforef{,cross ref name } @code{@@inforef@{,,file name@}} @inforef{,,file name} @code{@@inforef@{,cross ref name, file name@}} @inforef{,cross ref name, file name} @code{@@inforef@{@}} @inforef{} @end copying @titlepage @title title --a @subtitle formatting subtitle --a @subtitle subtitle 2 --a @author author1 --a with accents in name T@'e@,ca @author author2 --a Titlepage < > " & ' ` ``simple-double--three---four----''@* code: @code{``simple-double--three---four----''} @* asis: @asis{``simple-double--three---four----''} @* strong: @strong{``simple-double--three---four----''} @* kbd: @kbd{``simple-double--three---four----''} @* `@w{}`simple-double-@w{}-three---four----'@w{}'@* @cindex --option @cindex `` @findex `` @findex --foption @@"u @"u @@"@{U@} @"{U} @@~n @~n @@^a @^a @@'e @'e @@=o @=o @@`i @`i @@'@{e@} @'{e} @@'@{@@dotless@{i@}@} @'{@dotless{i}} @@dotless@{i@} @dotless{i} @@dotless@{j@} @dotless{j} @@`@{@@=E@} @`{@=E} @@l@{@} @l{} @@,@{@@'C@} @,{@'C} @@,c @,c @@,c@@"u @,c@"u @* @@* @* @@ followed by a space @ @@ followed by a tab @ @@ followed by a new line @ @code{@@-} @- @code{@@|} @| @code{@@:} @: @code{@@!} @! @code{@@?} @? @code{@@.} @. @code{@@@@} @@ @code{@@@}} @} @code{@@@{} @{ @code{@@/} @/ foo vs.@: bar. colon :@:And something else. semi colon ;@:. And ? ?@:. Now ! !@:@@ but , ,@: @@TeX @TeX{} @@LaTeX @LaTeX{} @@bullet @bullet{} @@copyright @copyright{} @@dots @dots{} @@enddots @enddots{} @@equiv @equiv{} @@error @error{} @@expansion @expansion{} @@minus @minus{} @@point @point{} @@print @print{} @@result @result{} @@today @today{} @@aa @aa{} @@AA @AA{} @@ae @ae{} @@oe @oe{} @@AE @AE{} @@OE @OE{} @@o @o{} @@O @O{} @@ss @ss{} @@l @l{} @@L @L{} @@exclamdown @exclamdown{} @@questiondown @questiondown{} @@pounds @pounds{} @@registeredsymbol @registeredsymbol{} @@ordf @ordf{} @@ordm @ordm{} @@comma @comma{} @@quotedblleft @quotedblleft{} @@quotedblright @quotedblright{} @@quoteleft @quoteleft{} @@quoteright @quoteright{} @@quotedblbase @quotedblbase{} @@quotesinglbase @quotesinglbase{} @@guillemetleft @guillemetleft{} @@guillemetright @guillemetright{} @@guillemotleft @guillemotleft{} @@guillemotright @guillemotright{} @@guilsinglleft @guilsinglleft{} @@guilsinglright @guilsinglright{} @@textdegree @textdegree{} @@euro @euro{} @@arrow @arrow{} @@leq @leq{} @@geq @geq{} @code{@@acronym@{--a,an accronym@}} @acronym{--a,an accronym} @code{@@acronym@{--a@}} @acronym{--a} @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude Autonome @}} @abbr{@'E--. @comma{}A., @'Etude Autonome } @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} @code{@@asis@{--a@}} @asis{--a} @code{@@b@{--a@}} @b{--a} @code{@@cite@{--a@}} @cite{--a} @code{@@code@{--a@}} @code{--a} @code{@@command@{--a@}} @command{--a} @code{@@ctrl@{--a@}} @ctrl{--a} @code{@@dfn@{--a@}} @dfn{--a} @code{@@dmn@{--a@}} @dmn{--a} @code{@@email@{--a,--b@}} @email{--a,--b} @code{@@email@{,--b@}} @email{,--b} @code{@@email@{--a@}} @email{--a} @code{@@emph@{--a@}} @emph{--a} @code{@@env@{--a@}} @env{--a} @code{@@file@{--a@}} @file{--a} @code{@@i@{--a@}} @i{--a} @code{@@kbd@{--a@}} @kbd{--a} @code{@@key@{--a@}} @key{--a} @code{@@math@{--a @{\frac@{1@}@{2@}@} @@minus@{@}@}} @math{--a {\frac{1}{2}} @minus{}} @code{@@option@{--a@}} @option{--a} @code{@@r@{--a@}} @r{--a} @code{@@samp@{--a@}} @samp{--a} @code{@@sc@{--a@}} @sc{--a} @code{@@strong@{--a@}} @strong{--a} @code{@@t@{--a@}} @t{--a} @code{@@sansserif@{--a@}} @sansserif{--a} @code{@@titlefont@{--a@}} @titlefont{--a} @code{@@indicateurl@{--a@}} @indicateurl{--a} @code{@@uref@{--a,--b@}} @uref{--a,--b} @code{@@uref@{--a@}} @uref{--a} @code{@@uref@{,--b@}} @uref{,--b} @code{@@uref@{--a,--b,--c@}} @uref{--a,--b,--c} @code{@@uref@{,--b,--c@}} @uref{,--b,--c} @code{@@uref@{--a,,--c@}} @uref{--a,,--c} @code{@@uref@{,,--c@}} @uref{,,--c} @code{@@url@{--a,--b@}} @url{--a,--b} @code{@@url@{--a,@}} @url{--a,} @code{@@url@{,--b@}} @url{,--b} @code{@@var@{--a@}} @var{--a} @code{@@verb@{:--a:@}} @verb{:--a:} @code{@@verb@{:a < & @@ % " -- b:@}} @verb{:a < & @ % " -- b:} @code{@@w@{@}} @w{} @code{@@H@{a@}} @H{a} @code{@@H@{--a@}} @H{--a} @code{@@dotaccent@{a@}} @dotaccent{a} @code{@@dotaccent@{--a@}} @dotaccent{--a} @code{@@ringaccent@{a@}} @ringaccent{a} @code{@@ringaccent@{--a@}} @ringaccent{--a} @code{@@tieaccent@{a@}} @tieaccent{a} @code{@@tieaccent@{--a@}} @tieaccent{--a} @code{@@u@{a@}} @u{a} @code{@@u@{--a@}} @u{--a} @code{@@ubaraccent@{a@}} @ubaraccent{a} @code{@@ubaraccent@{--a@}} @ubaraccent{--a} @code{@@udotaccent@{a@}} @udotaccent{a} @code{@@udotaccent@{--a@}} @udotaccent{--a} @code{@@v@{a@}} @v{a} @code{@@v@{--a@}} @v{--a} @code{@@,@{c@}} @,{c} @code{@@,@{--c@}} @,{--c} @code{@@ogonek@{a@}} @ogonek{a} @code{@@ogonek@{--a@}} @ogonek{--a} @code{@@footnote@{in footnote@}} @footnote{in footnote} @code{@@footnote@{in footnote2@}} @footnote{in footnote2} @code{@@image@{f--ile@}} @image{f--ile} @code{@@image@{f--ile,l--i@}} @image{f--ile,l--i} @code{@@image@{f--ile,,l--e@}} @image{f--ile,,l--e} @code{@@image@{f--ile,,,alt@}} @image{f--ile,,,alt} @code{@@image@{f--ile,,,,e-d-xt@}} @image{f--ile,,,,e--xt} @code{@@image@{f--ile,aze,az,alt,e--xt@}} @image{f--ile,aze,az,alt,e--xt} @code{@@image@{f-ile,aze,,a--lt@}} @image{f-ile,aze,,a--lt} @code{@@image@{@@file@{f--ile@}@@@@@@.,aze,az,alt,@@file@{file ext@} e--xt@@@}} @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@}} @sp 2 @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} @clickstyle @result After clickstyle @result{} @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} @clickstyle @arrow @quotation A quot---ation @end quotation @quotation Note A Note @end quotation @quotation note A note @end quotation @quotation Caution Caution @end quotation @quotation Important Important @end quotation @quotation Tip a Tip @end quotation @quotation Warning a Warning. @end quotation @quotation something @'e @TeX{} The something @'e @TeX{} is here. @end quotation @quotation @@ at the end of line @ A @@ at the end of the @@quotation line. @end quotation @quotation something, other thing something, other thing @end quotation @quotation Note, the note Note, the note @end quotation @quotation @end quotation @quotation Empty @end quotation @quotation @asis{} @end quotation @quotation @* @end quotation @smallquotation A small quot---ation @end smallquotation @smallquotation Note A small Note @end smallquotation @smallquotation something, other thing something, other thing @end smallquotation @itemize @item i--temize @end itemize @itemize + @item i--tem + @end itemize @itemize @bullet @item b--ullet @end itemize @itemize @minus @item minu--s @end itemize @itemize @emph @item e--mph item @end itemize @itemize @emph{after emph} @c comment in itemize @item e--mph item @end itemize @itemize @bullet{} a--n itemize line @cindex index entry within itemize @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 6 7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @c comment in multitable @item mu--ltitable item 2 @tab multitable tab 2 @cindex index entry within multitable @item lone mu--ltitable item @end multitable @multitable {truc} {bidule} @item truc @tab bidule @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @display d--isplay @end display @smalldisplay s--malldisplay @end smalldisplay @lisp l--isp @end lisp @smalllisp s--malllisp @end smalllisp @format f--ormat @end format @smallformat s--mallformat @end smallformat @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @deffn cate--gory de--ffn_name ar--guments @ more args @* even more so def--fn @end deffn @deffn fset @var{i} a g @cindex index entry within deffn @deffnx {cmde} truc {} @deffnx Command {log trap} {} @deffnx Command { log trap1} {} @deffnx Command {log trap2 } {} @deffnx cmde @b{id ule} truc @deffnx cmde2 @b{id @samp{i} ule} truc @deffnx @b{id @samp{i} ule} @deffnx @deffnx aaa @deffnx {} {} @deffnx{} @deffnx{} machin @deffnx{} {bidule machin} @deffnx{truc} machin @deffnx{truc} { } @deffnx{truc} followed by a comment @c comment @deffnx{truc} @deffnx{} {} @deffnx {truc} a b c d e @b{f g} {h i} @deffnx {truc} deffnx before end deffn @end deffn @deffn empty deffn @end deffn @deffn empty deffn with deffnx @c comment between deffn and deffnx @deffnx empty deffnx @end deffn @deffn fset @var{i} a g @deffnx {cmde} truc {} @c comment text in def item for second def item @end deffn @defvr c--ategory d--efvr_name d--efvr @end defvr @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... d--eftypefn @end deftypefn @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... d--eftypeop @end deftypeop @deftypevr c--ategory t--ype d--eftypevr_name d--eftypevr @end deftypevr @defcv c--ategory c--lass d--efcv_name d--efcv @end defcv @defop c--ategory c--lass d--efop_name a--rguments... d--efop @end defop @deftp c--ategory d--eftp_name a--ttributes... d--eftp @end deftp @defun d--efun_name a--rguments... d--efun @end defun @defmac d--efmac_name a--rguments... d--efmac @end defmac @defspec d--efspec_name a--rguments... d--efspec @end defspec @defvar d--efvar_name argvar argvar1 d--efvar @end defvar @defopt d--efopt_name d--efopt @end defopt @deftypefun t--ype d--eftypefun_name a--rguments... d--eftypefun @end deftypefun @deftypevar t--ype d--eftypevar_name d--eftypevar @end deftypevar @defivar c--lass d--efivar_name d--efivar @end defivar @deftypeivar c--lass t--ype d--eftypeivar_name d--eftypeivar @end deftypeivar @defmethod c--lass d--efmethod_name a--rguments... d--efmethod @end defmethod @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... d--eftypemethod @end deftypemethod @code{@@xref@{c---hapter@@@@, cross r---ef name@@@@, t---itle@@@@, file n---ame@@@@, ma---nual@@@@@}} @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@}. @code{@@ref@{chapter, cross ref name, title, file name, manual@}} @ref{chapter, cross ref name, title, file name, manual} @code{@@pxref@{chapter, cross ref name, title, file name, manual@}} @pxref{chapter, cross ref name, title, file name, manual} @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} @code{@@ref@{chapter@}} @ref{chapter} @code{@@xref@{chapter@}} @xref{chapter}. @code{@@pxref@{chapter@}} @pxref{chapter} @code{@@ref@{s--ect@@comma@{@}ion@}} @ref{s--ect@comma{}ion} @code{@@ref@{s--ect@@comma@{@}ion, a @@comma@{@} in cross ref, a comma@@comma@{@} in title, a comma@@comma@{@} in file, a @@comma@{@} in manual name @}} @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } @code{@@ref@{chapter,cross ref name@}} @ref{chapter,cross ref name} @code{@@ref@{chapter,,title@}} @ref{chapter,,title} @code{@@ref@{chapter,,,file name@}} @ref{chapter,,,file name} @code{@@ref@{chapter,,,,manual@}} @ref{chapter,,,,manual} @code{@@ref@{chapter,cross ref name,title,@}} @ref{chapter,cross ref name,title,} @code{@@ref@{chapter,cross ref name,,file name@}} @ref{chapter,cross ref name,,file name} @code{@@ref@{chapter,cross ref name,,,manual@}} @ref{chapter,cross ref name,,,manual} @code{@@ref@{chapter,cross ref name,title,file name@}} @ref{chapter,cross ref name,title,file name} @code{@@ref@{chapter,cross ref name,title,,manual@}} @ref{chapter,cross ref name,title,,manual} @code{@@ref@{chapter,cross ref name,title, file name, manual@}} @ref{chapter,cross ref name,title, file name, manual} @code{@@ref@{chapter,,title,file name@}} @ref{chapter,,title,file name} @code{@@ref@{chapter,,title,,manual@}} @ref{chapter,,title,,manual} @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} @code{@@ref@{chapter,,,file name,manual@}} @ref{chapter,,,file name,manual} @code{@@ref@{(pman)anode,cross ref name@}} @ref{(pman)anode,cross ref name} @code{@@ref@{(pman)anode,,title@}} @ref{(pman)anode,,title} @code{@@ref@{(pman)anode,,,file name@}} @ref{(pman)anode,,,file name} @code{@@ref@{(pman)anode,,,,manual@}} @ref{(pman)anode,,,,manual} @code{@@ref@{(pman)anode,cross ref name,title,@}} @ref{(pman)anode,cross ref name,title,} @code{@@ref@{(pman)anode,cross ref name,,file name@}} @ref{(pman)anode,cross ref name,,file name} @code{@@ref@{(pman)anode,cross ref name,,,manual@}} @ref{(pman)anode,cross ref name,,,manual} @code{@@ref@{(pman)anode,cross ref name,title,file name@}} @ref{(pman)anode,cross ref name,title,file name} @code{@@ref@{(pman)anode,cross ref name,title,,manual@}} @ref{(pman)anode,cross ref name,title,,manual} @code{@@ref@{(pman)anode,cross ref name,title, file name, manual@}} @ref{(pman)anode,cross ref name,title, file name, manual} @code{@@ref@{(pman)anode,,title,file name@}} @ref{(pman)anode,,title,file name} @code{@@ref@{(pman)anode,,title,,manual@}} @ref{(pman)anode,,title,,manual} @code{@@ref@{(pman)anode,,title, file name, manual@}} @ref{(pman)anode,,title, file name, manual} @code{@@ref@{(pman)anode,,,file name,manual@}} @ref{(pman)anode,,,file name,manual} @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} @code{@@inforef@{chapter@}} @inforef{chapter} @code{@@inforef@{chapter, cross ref name@}} @inforef{chapter, cross ref name} @code{@@inforef@{chapter,,file name@}} @inforef{chapter,,file name} @code{@@inforef@{node, cross ref name, file name@}} @inforef{node, cross ref name, file name} @code{@@inforef@{node@}} @inforef{node} @code{@@inforef@{node, cross ref name@}} @inforef{node, cross ref name} @code{@@inforef@{node,,file name@}} @inforef{node,,file name} @code{@@inforef@{chapter, cross ref name, file name, spurious arg@}} @inforef{chapter, cross ref name, file name, spurious arg} @code{@@inforef@{s--ect@@comma@{@}ion, a @@comma@{@} in cross ref, a comma@@comma@{@} in file@}} @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} @table @bullet @c comment in table @item a l--ine @end table @vtable @asis @item a @c comment between item and itemx @itemx b l--ine @end vtable @ftable @minus @item a @cindex index entry between item and itemx @itemx b l--ine @end ftable @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @verbatiminclude simplest.texi @verbatim in verbatim '' @end verbatim @html html '' @end html @majorheading majorheading @chapheading chapheading @heading heading @subheading subheading @subsubheading subsubheading @c makeinfo cannot handle that @code{@@acronym@{--a,an accronym @@comma@{@} @@enddots@{@}@}} @acronym{--a,an accronym @comma{} @enddots{}} @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude--@@comma@{@} @@b@{Autonome@} @}} @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} @code{@@math@{--a@@minus@{@} @{\frac@{1@}@{2@}@}@}} @math{--a@minus{} {\frac{1}{2}}} @code{@@image@{f-ile,,,alt@@verb@{:jk _" %@:@}@}} @image{f-ile,,,alt@verb{:jk _" %@:}} @code{@@image@{f--ile,aze,az,@@verb@{:jk _" %@@:@} @@b@{in b "@},e--xt@}} @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} @code{@@image@{file@@verb@{:jk _" %@@:@},,,alt@@verb@{:jk _" %@@:@}@}} @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} @set invalid @c invalid texinfo Somehow invalid use of @@,:@* @@, @, @* @@,@@"u @,@"u Invalid use of @@':@* @@' @' @* @@'@@"u @'@"u @c only i or j as arg @@dotless@{truc@} @dotless{truc} @@dotless@{ij@} @dotless{ij} @code{@@dotless@{--a@}} @dotless{--a} @code{@@dotless@{a@}} @dotless{a} @c braces missing @@TeX, but without brace @TeX @c unknown command @code{@@#} @# @c no arg @code{@@w@{--a@}} @w{--a} @c no file @code{@@image@{,1--xt@}} @image{,1--xt} @code{@@image@{,,2--xt@}} @image{,,2--xt} @code{@@image@{,,,3--xt@}} @image{,,,3--xt} @sp @c braces missing @itemize @emph after emph @item e--mph item @end itemize @c braces missing @itemize @bullet a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @c deffnx after deff lines @deffn fun @deffnx truc machin bidule chose and } @deffnx truc machin bidule chose and } after @deffnx truc machin bidule chose and { @deffnx truc machin bidule chose and { and after @deffnx {truc} followed by a comment @c comment Various deff lines @deffnx {truc} after a deff item @end deffn @c node is non existent, or missing first arg @code{@@ref@{node@}} @ref{node} @code{@@ref@{,cross ref name@}} @ref{,cross ref name} @code{@@ref@{,,title@}} @ref{,,title} @code{@@ref@{,,,file name@}} @ref{,,,file name} @code{@@ref@{,,,,manual@}} @ref{,,,,manual} @code{@@ref@{node,cross ref name@}} @ref{node,cross ref name} @code{@@ref@{node,,title@}} @ref{node,,title} @code{@@ref@{node,,,file name@}} @ref{node,,,file name} @code{@@ref@{node,,,,manual@}} @ref{node,,,,manual} @code{@@ref@{node,cross ref name,title,@}} @ref{node,cross ref name,title,} @code{@@ref@{node,cross ref name,,file name@}} @ref{node,cross ref name,,file name} @code{@@ref@{node,cross ref name,,,manual@}} @ref{node,cross ref name,,,manual} @code{@@ref@{node,cross ref name,title,file name@}} @ref{node,cross ref name,title,file name} @code{@@ref@{node,cross ref name,title,,manual@}} @ref{node,cross ref name,title,,manual} @code{@@ref@{node,cross ref name,title, file name, manual@}} @ref{node,cross ref name,title, file name, manual} @code{@@ref@{node,,title,file name@}} @ref{node,,title,file name} @code{@@ref@{node,,title,,manual@}} @ref{node,,title,,manual} @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} @code{@@ref@{node,,title, file name, manual@}} @ref{node,,title, file name, manual} @code{@@ref@{node,,,file name,manual@}} @ref{node,,,file name,manual} @code{@@ref@{,cross ref name,title,@}} @ref{,cross ref name,title,} @code{@@ref@{,cross ref name,,file name@}} @ref{,cross ref name,,file name} @code{@@ref@{,cross ref name,,,manual@}} @ref{,cross ref name,,,manual} @code{@@ref@{,cross ref name,title,file name@}} @ref{,cross ref name,title,file name} @code{@@ref@{,cross ref name,title,,manual@}} @ref{,cross ref name,title,,manual} @code{@@ref@{,cross ref name,title, file name, manual@}} @ref{,cross ref name,title, file name, manual} @code{@@ref@{,,title,file name@}} @ref{,,title,file name} @code{@@ref@{,,title,,manual@}} @ref{,,title,,manual} @code{@@ref@{,,title, file name, manual@}} @ref{,,title, file name, manual} @code{@@ref@{,,,file name,manual@}} @ref{,,,file name,manual} @code{@@inforef@{,cross ref name @}} @inforef{,cross ref name } @code{@@inforef@{,,file name@}} @inforef{,,file name} @code{@@inforef@{,cross ref name, file name@}} @inforef{,cross ref name, file name} @code{@@inforef@{@}} @inforef{} insertcopying in titlepage @insertcopying end titlepage @end titlepage < > " & ' ` ``simple-double--three---four----''@* code: @code{``simple-double--three---four----''} @* asis: @asis{``simple-double--three---four----''} @* strong: @strong{``simple-double--three---four----''} @* kbd: @kbd{``simple-double--three---four----''} @* `@w{}`simple-double-@w{}-three---four----'@w{}'@* @cindex --option @cindex `` @findex `` @findex --foption @@"u @"u @@"@{U@} @"{U} @@~n @~n @@^a @^a @@'e @'e @@=o @=o @@`i @`i @@'@{e@} @'{e} @@'@{@@dotless@{i@}@} @'{@dotless{i}} @@dotless@{i@} @dotless{i} @@dotless@{j@} @dotless{j} @@`@{@@=E@} @`{@=E} @@l@{@} @l{} @@,@{@@'C@} @,{@'C} @@,c @,c @@,c@@"u @,c@"u @* @@* @* @@ followed by a space @ @@ followed by a tab @ @@ followed by a new line @ @code{@@-} @- @code{@@|} @| @code{@@:} @: @code{@@!} @! @code{@@?} @? @code{@@.} @. @code{@@@@} @@ @code{@@@}} @} @code{@@@{} @{ @code{@@/} @/ foo vs.@: bar. colon :@:And something else. semi colon ;@:. And ? ?@:. Now ! !@:@@ but , ,@: @@TeX @TeX{} @@LaTeX @LaTeX{} @@bullet @bullet{} @@copyright @copyright{} @@dots @dots{} @@enddots @enddots{} @@equiv @equiv{} @@error @error{} @@expansion @expansion{} @@minus @minus{} @@point @point{} @@print @print{} @@result @result{} @@today @today{} @@aa @aa{} @@AA @AA{} @@ae @ae{} @@oe @oe{} @@AE @AE{} @@OE @OE{} @@o @o{} @@O @O{} @@ss @ss{} @@l @l{} @@L @L{} @@exclamdown @exclamdown{} @@questiondown @questiondown{} @@pounds @pounds{} @@registeredsymbol @registeredsymbol{} @@ordf @ordf{} @@ordm @ordm{} @@comma @comma{} @@quotedblleft @quotedblleft{} @@quotedblright @quotedblright{} @@quoteleft @quoteleft{} @@quoteright @quoteright{} @@quotedblbase @quotedblbase{} @@quotesinglbase @quotesinglbase{} @@guillemetleft @guillemetleft{} @@guillemetright @guillemetright{} @@guillemotleft @guillemotleft{} @@guillemotright @guillemotright{} @@guilsinglleft @guilsinglleft{} @@guilsinglright @guilsinglright{} @@textdegree @textdegree{} @@euro @euro{} @@arrow @arrow{} @@leq @leq{} @@geq @geq{} @code{@@acronym@{--a,an accronym@}} @acronym{--a,an accronym} @code{@@acronym@{--a@}} @acronym{--a} @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude Autonome @}} @abbr{@'E--. @comma{}A., @'Etude Autonome } @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} @code{@@asis@{--a@}} @asis{--a} @code{@@b@{--a@}} @b{--a} @code{@@cite@{--a@}} @cite{--a} @code{@@code@{--a@}} @code{--a} @code{@@command@{--a@}} @command{--a} @code{@@ctrl@{--a@}} @ctrl{--a} @code{@@dfn@{--a@}} @dfn{--a} @code{@@dmn@{--a@}} @dmn{--a} @code{@@email@{--a,--b@}} @email{--a,--b} @code{@@email@{,--b@}} @email{,--b} @code{@@email@{--a@}} @email{--a} @code{@@emph@{--a@}} @emph{--a} @code{@@env@{--a@}} @env{--a} @code{@@file@{--a@}} @file{--a} @code{@@i@{--a@}} @i{--a} @code{@@kbd@{--a@}} @kbd{--a} @code{@@key@{--a@}} @key{--a} @code{@@math@{--a @{\frac@{1@}@{2@}@} @@minus@{@}@}} @math{--a {\frac{1}{2}} @minus{}} @code{@@option@{--a@}} @option{--a} @code{@@r@{--a@}} @r{--a} @code{@@samp@{--a@}} @samp{--a} @code{@@sc@{--a@}} @sc{--a} @code{@@strong@{--a@}} @strong{--a} @code{@@t@{--a@}} @t{--a} @code{@@sansserif@{--a@}} @sansserif{--a} @code{@@titlefont@{--a@}} @titlefont{--a} @code{@@indicateurl@{--a@}} @indicateurl{--a} @code{@@uref@{--a,--b@}} @uref{--a,--b} @code{@@uref@{--a@}} @uref{--a} @code{@@uref@{,--b@}} @uref{,--b} @code{@@uref@{--a,--b,--c@}} @uref{--a,--b,--c} @code{@@uref@{,--b,--c@}} @uref{,--b,--c} @code{@@uref@{--a,,--c@}} @uref{--a,,--c} @code{@@uref@{,,--c@}} @uref{,,--c} @code{@@url@{--a,--b@}} @url{--a,--b} @code{@@url@{--a,@}} @url{--a,} @code{@@url@{,--b@}} @url{,--b} @code{@@var@{--a@}} @var{--a} @code{@@verb@{:--a:@}} @verb{:--a:} @code{@@verb@{:a < & @@ % " -- b:@}} @verb{:a < & @ % " -- b:} @code{@@w@{@}} @w{} @code{@@H@{a@}} @H{a} @code{@@H@{--a@}} @H{--a} @code{@@dotaccent@{a@}} @dotaccent{a} @code{@@dotaccent@{--a@}} @dotaccent{--a} @code{@@ringaccent@{a@}} @ringaccent{a} @code{@@ringaccent@{--a@}} @ringaccent{--a} @code{@@tieaccent@{a@}} @tieaccent{a} @code{@@tieaccent@{--a@}} @tieaccent{--a} @code{@@u@{a@}} @u{a} @code{@@u@{--a@}} @u{--a} @code{@@ubaraccent@{a@}} @ubaraccent{a} @code{@@ubaraccent@{--a@}} @ubaraccent{--a} @code{@@udotaccent@{a@}} @udotaccent{a} @code{@@udotaccent@{--a@}} @udotaccent{--a} @code{@@v@{a@}} @v{a} @code{@@v@{--a@}} @v{--a} @code{@@,@{c@}} @,{c} @code{@@,@{--c@}} @,{--c} @code{@@ogonek@{a@}} @ogonek{a} @code{@@ogonek@{--a@}} @ogonek{--a} @code{@@footnote@{in footnote@}} @footnote{in footnote} @code{@@footnote@{in footnote2@}} @footnote{in footnote2} @code{@@image@{f--ile@}} @image{f--ile} @code{@@image@{f--ile,l--i@}} @image{f--ile,l--i} @code{@@image@{f--ile,,l--e@}} @image{f--ile,,l--e} @code{@@image@{f--ile,,,alt@}} @image{f--ile,,,alt} @code{@@image@{f--ile,,,,e-d-xt@}} @image{f--ile,,,,e--xt} @code{@@image@{f--ile,aze,az,alt,e--xt@}} @image{f--ile,aze,az,alt,e--xt} @code{@@image@{f-ile,aze,,a--lt@}} @image{f-ile,aze,,a--lt} @code{@@image@{@@file@{f--ile@}@@@@@@.,aze,az,alt,@@file@{file ext@} e--xt@@@}} @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@}} @sp 2 @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} @clickstyle @result After clickstyle @result{} @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} @clickstyle @arrow @quotation A quot---ation @end quotation @quotation Note A Note @end quotation @quotation note A note @end quotation @quotation Caution Caution @end quotation @quotation Important Important @end quotation @quotation Tip a Tip @end quotation @quotation Warning a Warning. @end quotation @quotation something @'e @TeX{} The something @'e @TeX{} is here. @end quotation @quotation @@ at the end of line @ A @@ at the end of the @@quotation line. @end quotation @quotation something, other thing something, other thing @end quotation @quotation Note, the note Note, the note @end quotation @quotation @end quotation @quotation Empty @end quotation @quotation @asis{} @end quotation @quotation @* @end quotation @smallquotation A small quot---ation @end smallquotation @smallquotation Note A small Note @end smallquotation @smallquotation something, other thing something, other thing @end smallquotation @itemize @item i--temize @end itemize @itemize + @item i--tem + @end itemize @itemize @bullet @item b--ullet @end itemize @itemize @minus @item minu--s @end itemize @itemize @emph @item e--mph item @end itemize @itemize @emph{after emph} @c comment in itemize @item e--mph item @end itemize @itemize @bullet{} a--n itemize line @cindex index entry within itemize @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 6 7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @c comment in multitable @item mu--ltitable item 2 @tab multitable tab 2 @cindex index entry within multitable @item lone mu--ltitable item @end multitable @multitable {truc} {bidule} @item truc @tab bidule @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @display d--isplay @end display @smalldisplay s--malldisplay @end smalldisplay @lisp l--isp @end lisp @smalllisp s--malllisp @end smalllisp @format f--ormat @end format @smallformat s--mallformat @end smallformat @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @deffn cate--gory de--ffn_name ar--guments @ more args @* even more so def--fn @end deffn @deffn fset @var{i} a g @cindex index entry within deffn @deffnx {cmde} truc {} @deffnx Command {log trap} {} @deffnx Command { log trap1} {} @deffnx Command {log trap2 } {} @deffnx cmde @b{id ule} truc @deffnx cmde2 @b{id @samp{i} ule} truc @deffnx @b{id @samp{i} ule} @deffnx @deffnx aaa @deffnx {} {} @deffnx{} @deffnx{} machin @deffnx{} {bidule machin} @deffnx{truc} machin @deffnx{truc} { } @deffnx{truc} followed by a comment @c comment @deffnx{truc} @deffnx{} {} @deffnx {truc} a b c d e @b{f g} {h i} @deffnx {truc} deffnx before end deffn @end deffn @deffn empty deffn @end deffn @deffn empty deffn with deffnx @c comment between deffn and deffnx @deffnx empty deffnx @end deffn @deffn fset @var{i} a g @deffnx {cmde} truc {} @c comment text in def item for second def item @end deffn @defvr c--ategory d--efvr_name d--efvr @end defvr @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... d--eftypefn @end deftypefn @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... d--eftypeop @end deftypeop @deftypevr c--ategory t--ype d--eftypevr_name d--eftypevr @end deftypevr @defcv c--ategory c--lass d--efcv_name d--efcv @end defcv @defop c--ategory c--lass d--efop_name a--rguments... d--efop @end defop @deftp c--ategory d--eftp_name a--ttributes... d--eftp @end deftp @defun d--efun_name a--rguments... d--efun @end defun @defmac d--efmac_name a--rguments... d--efmac @end defmac @defspec d--efspec_name a--rguments... d--efspec @end defspec @defvar d--efvar_name argvar argvar1 d--efvar @end defvar @defopt d--efopt_name d--efopt @end defopt @deftypefun t--ype d--eftypefun_name a--rguments... d--eftypefun @end deftypefun @deftypevar t--ype d--eftypevar_name d--eftypevar @end deftypevar @defivar c--lass d--efivar_name d--efivar @end defivar @deftypeivar c--lass t--ype d--eftypeivar_name d--eftypeivar @end deftypeivar @defmethod c--lass d--efmethod_name a--rguments... d--efmethod @end defmethod @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... d--eftypemethod @end deftypemethod @code{@@xref@{c---hapter@@@@, cross r---ef name@@@@, t---itle@@@@, file n---ame@@@@, ma---nual@@@@@}} @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@}. @code{@@ref@{chapter, cross ref name, title, file name, manual@}} @ref{chapter, cross ref name, title, file name, manual} @code{@@pxref@{chapter, cross ref name, title, file name, manual@}} @pxref{chapter, cross ref name, title, file name, manual} @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} @code{@@ref@{chapter@}} @ref{chapter} @code{@@xref@{chapter@}} @xref{chapter}. @code{@@pxref@{chapter@}} @pxref{chapter} @code{@@ref@{s--ect@@comma@{@}ion@}} @ref{s--ect@comma{}ion} @code{@@ref@{s--ect@@comma@{@}ion, a @@comma@{@} in cross ref, a comma@@comma@{@} in title, a comma@@comma@{@} in file, a @@comma@{@} in manual name @}} @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } @code{@@ref@{chapter,cross ref name@}} @ref{chapter,cross ref name} @code{@@ref@{chapter,,title@}} @ref{chapter,,title} @code{@@ref@{chapter,,,file name@}} @ref{chapter,,,file name} @code{@@ref@{chapter,,,,manual@}} @ref{chapter,,,,manual} @code{@@ref@{chapter,cross ref name,title,@}} @ref{chapter,cross ref name,title,} @code{@@ref@{chapter,cross ref name,,file name@}} @ref{chapter,cross ref name,,file name} @code{@@ref@{chapter,cross ref name,,,manual@}} @ref{chapter,cross ref name,,,manual} @code{@@ref@{chapter,cross ref name,title,file name@}} @ref{chapter,cross ref name,title,file name} @code{@@ref@{chapter,cross ref name,title,,manual@}} @ref{chapter,cross ref name,title,,manual} @code{@@ref@{chapter,cross ref name,title, file name, manual@}} @ref{chapter,cross ref name,title, file name, manual} @code{@@ref@{chapter,,title,file name@}} @ref{chapter,,title,file name} @code{@@ref@{chapter,,title,,manual@}} @ref{chapter,,title,,manual} @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} @code{@@ref@{chapter,,,file name,manual@}} @ref{chapter,,,file name,manual} @code{@@ref@{(pman)anode,cross ref name@}} @ref{(pman)anode,cross ref name} @code{@@ref@{(pman)anode,,title@}} @ref{(pman)anode,,title} @code{@@ref@{(pman)anode,,,file name@}} @ref{(pman)anode,,,file name} @code{@@ref@{(pman)anode,,,,manual@}} @ref{(pman)anode,,,,manual} @code{@@ref@{(pman)anode,cross ref name,title,@}} @ref{(pman)anode,cross ref name,title,} @code{@@ref@{(pman)anode,cross ref name,,file name@}} @ref{(pman)anode,cross ref name,,file name} @code{@@ref@{(pman)anode,cross ref name,,,manual@}} @ref{(pman)anode,cross ref name,,,manual} @code{@@ref@{(pman)anode,cross ref name,title,file name@}} @ref{(pman)anode,cross ref name,title,file name} @code{@@ref@{(pman)anode,cross ref name,title,,manual@}} @ref{(pman)anode,cross ref name,title,,manual} @code{@@ref@{(pman)anode,cross ref name,title, file name, manual@}} @ref{(pman)anode,cross ref name,title, file name, manual} @code{@@ref@{(pman)anode,,title,file name@}} @ref{(pman)anode,,title,file name} @code{@@ref@{(pman)anode,,title,,manual@}} @ref{(pman)anode,,title,,manual} @code{@@ref@{(pman)anode,,title, file name, manual@}} @ref{(pman)anode,,title, file name, manual} @code{@@ref@{(pman)anode,,,file name,manual@}} @ref{(pman)anode,,,file name,manual} @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} @code{@@inforef@{chapter@}} @inforef{chapter} @code{@@inforef@{chapter, cross ref name@}} @inforef{chapter, cross ref name} @code{@@inforef@{chapter,,file name@}} @inforef{chapter,,file name} @code{@@inforef@{node, cross ref name, file name@}} @inforef{node, cross ref name, file name} @code{@@inforef@{node@}} @inforef{node} @code{@@inforef@{node, cross ref name@}} @inforef{node, cross ref name} @code{@@inforef@{node,,file name@}} @inforef{node,,file name} @code{@@inforef@{chapter, cross ref name, file name, spurious arg@}} @inforef{chapter, cross ref name, file name, spurious arg} @code{@@inforef@{s--ect@@comma@{@}ion, a @@comma@{@} in cross ref, a comma@@comma@{@} in file@}} @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} @table @bullet @c comment in table @item a l--ine @end table @vtable @asis @item a @c comment between item and itemx @itemx b l--ine @end vtable @ftable @minus @item a @cindex index entry between item and itemx @itemx b l--ine @end ftable @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @verbatiminclude simplest.texi @verbatim in verbatim '' @end verbatim @html html '' @end html @majorheading majorheading @chapheading chapheading @heading heading @subheading subheading @subsubheading subsubheading @c makeinfo cannot handle that @code{@@acronym@{--a,an accronym @@comma@{@} @@enddots@{@}@}} @acronym{--a,an accronym @comma{} @enddots{}} @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude--@@comma@{@} @@b@{Autonome@} @}} @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} @code{@@math@{--a@@minus@{@} @{\frac@{1@}@{2@}@}@}} @math{--a@minus{} {\frac{1}{2}}} @code{@@image@{f-ile,,,alt@@verb@{:jk _" %@:@}@}} @image{f-ile,,,alt@verb{:jk _" %@:}} @code{@@image@{f--ile,aze,az,@@verb@{:jk _" %@@:@} @@b@{in b "@},e--xt@}} @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} @code{@@image@{file@@verb@{:jk _" %@@:@},,,alt@@verb@{:jk _" %@@:@}@}} @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} @set invalid @c invalid texinfo Somehow invalid use of @@,:@* @@, @, @* @@,@@"u @,@"u Invalid use of @@':@* @@' @' @* @@'@@"u @'@"u @c only i or j as arg @@dotless@{truc@} @dotless{truc} @@dotless@{ij@} @dotless{ij} @code{@@dotless@{--a@}} @dotless{--a} @code{@@dotless@{a@}} @dotless{a} @c braces missing @@TeX, but without brace @TeX @c unknown command @code{@@#} @# @c no arg @code{@@w@{--a@}} @w{--a} @c no file @code{@@image@{,1--xt@}} @image{,1--xt} @code{@@image@{,,2--xt@}} @image{,,2--xt} @code{@@image@{,,,3--xt@}} @image{,,,3--xt} @sp @c braces missing @itemize @emph after emph @item e--mph item @end itemize @c braces missing @itemize @bullet a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @c deffnx after deff lines @deffn fun @deffnx truc machin bidule chose and } @deffnx truc machin bidule chose and } after @deffnx truc machin bidule chose and { @deffnx truc machin bidule chose and { and after @deffnx {truc} followed by a comment @c comment Various deff lines @deffnx {truc} after a deff item @end deffn @c node is non existent, or missing first arg @code{@@ref@{node@}} @ref{node} @code{@@ref@{,cross ref name@}} @ref{,cross ref name} @code{@@ref@{,,title@}} @ref{,,title} @code{@@ref@{,,,file name@}} @ref{,,,file name} @code{@@ref@{,,,,manual@}} @ref{,,,,manual} @code{@@ref@{node,cross ref name@}} @ref{node,cross ref name} @code{@@ref@{node,,title@}} @ref{node,,title} @code{@@ref@{node,,,file name@}} @ref{node,,,file name} @code{@@ref@{node,,,,manual@}} @ref{node,,,,manual} @code{@@ref@{node,cross ref name,title,@}} @ref{node,cross ref name,title,} @code{@@ref@{node,cross ref name,,file name@}} @ref{node,cross ref name,,file name} @code{@@ref@{node,cross ref name,,,manual@}} @ref{node,cross ref name,,,manual} @code{@@ref@{node,cross ref name,title,file name@}} @ref{node,cross ref name,title,file name} @code{@@ref@{node,cross ref name,title,,manual@}} @ref{node,cross ref name,title,,manual} @code{@@ref@{node,cross ref name,title, file name, manual@}} @ref{node,cross ref name,title, file name, manual} @code{@@ref@{node,,title,file name@}} @ref{node,,title,file name} @code{@@ref@{node,,title,,manual@}} @ref{node,,title,,manual} @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} @code{@@ref@{node,,title, file name, manual@}} @ref{node,,title, file name, manual} @code{@@ref@{node,,,file name,manual@}} @ref{node,,,file name,manual} @code{@@ref@{,cross ref name,title,@}} @ref{,cross ref name,title,} @code{@@ref@{,cross ref name,,file name@}} @ref{,cross ref name,,file name} @code{@@ref@{,cross ref name,,,manual@}} @ref{,cross ref name,,,manual} @code{@@ref@{,cross ref name,title,file name@}} @ref{,cross ref name,title,file name} @code{@@ref@{,cross ref name,title,,manual@}} @ref{,cross ref name,title,,manual} @code{@@ref@{,cross ref name,title, file name, manual@}} @ref{,cross ref name,title, file name, manual} @code{@@ref@{,,title,file name@}} @ref{,,title,file name} @code{@@ref@{,,title,,manual@}} @ref{,,title,,manual} @code{@@ref@{,,title, file name, manual@}} @ref{,,title, file name, manual} @code{@@ref@{,,,file name,manual@}} @ref{,,,file name,manual} @code{@@inforef@{,cross ref name @}} @inforef{,cross ref name } @code{@@inforef@{,,file name@}} @inforef{,,file name} @code{@@inforef@{,cross ref name, file name@}} @inforef{,cross ref name, file name} @code{@@inforef@{@}} @inforef{} @example < > " & ' ` ``simple-double--three---four----''@* code: @code{``simple-double--three---four----''} @* asis: @asis{``simple-double--three---four----''} @* strong: @strong{``simple-double--three---four----''} @* kbd: @kbd{``simple-double--three---four----''} @* `@w{}`simple-double-@w{}-three---four----'@w{}'@* @cindex --option @cindex `` @findex `` @findex --foption @@"u @"u @@"@{U@} @"{U} @@~n @~n @@^a @^a @@'e @'e @@=o @=o @@`i @`i @@'@{e@} @'{e} @@'@{@@dotless@{i@}@} @'{@dotless{i}} @@dotless@{i@} @dotless{i} @@dotless@{j@} @dotless{j} @@`@{@@=E@} @`{@=E} @@l@{@} @l{} @@,@{@@'C@} @,{@'C} @@,c @,c @@,c@@"u @,c@"u @* @@* @* @@ followed by a space @ @@ followed by a tab @ @@ followed by a new line @ @code{@@-} @- @code{@@|} @| @code{@@:} @: @code{@@!} @! @code{@@?} @? @code{@@.} @. @code{@@@@} @@ @code{@@@}} @} @code{@@@{} @{ @code{@@/} @/ foo vs.@: bar. colon :@:And something else. semi colon ;@:. And ? ?@:. Now ! !@:@@ but , ,@: @@TeX @TeX{} @@LaTeX @LaTeX{} @@bullet @bullet{} @@copyright @copyright{} @@dots @dots{} @@enddots @enddots{} @@equiv @equiv{} @@error @error{} @@expansion @expansion{} @@minus @minus{} @@point @point{} @@print @print{} @@result @result{} @@today @today{} @@aa @aa{} @@AA @AA{} @@ae @ae{} @@oe @oe{} @@AE @AE{} @@OE @OE{} @@o @o{} @@O @O{} @@ss @ss{} @@l @l{} @@L @L{} @@exclamdown @exclamdown{} @@questiondown @questiondown{} @@pounds @pounds{} @@registeredsymbol @registeredsymbol{} @@ordf @ordf{} @@ordm @ordm{} @@comma @comma{} @@quotedblleft @quotedblleft{} @@quotedblright @quotedblright{} @@quoteleft @quoteleft{} @@quoteright @quoteright{} @@quotedblbase @quotedblbase{} @@quotesinglbase @quotesinglbase{} @@guillemetleft @guillemetleft{} @@guillemetright @guillemetright{} @@guillemotleft @guillemotleft{} @@guillemotright @guillemotright{} @@guilsinglleft @guilsinglleft{} @@guilsinglright @guilsinglright{} @@textdegree @textdegree{} @@euro @euro{} @@arrow @arrow{} @@leq @leq{} @@geq @geq{} @code{@@acronym@{--a,an accronym@}} @acronym{--a,an accronym} @code{@@acronym@{--a@}} @acronym{--a} @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude Autonome @}} @abbr{@'E--. @comma{}A., @'Etude Autonome } @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} @code{@@asis@{--a@}} @asis{--a} @code{@@b@{--a@}} @b{--a} @code{@@cite@{--a@}} @cite{--a} @code{@@code@{--a@}} @code{--a} @code{@@command@{--a@}} @command{--a} @code{@@ctrl@{--a@}} @ctrl{--a} @code{@@dfn@{--a@}} @dfn{--a} @code{@@dmn@{--a@}} @dmn{--a} @code{@@email@{--a,--b@}} @email{--a,--b} @code{@@email@{,--b@}} @email{,--b} @code{@@email@{--a@}} @email{--a} @code{@@emph@{--a@}} @emph{--a} @code{@@env@{--a@}} @env{--a} @code{@@file@{--a@}} @file{--a} @code{@@i@{--a@}} @i{--a} @code{@@kbd@{--a@}} @kbd{--a} @code{@@key@{--a@}} @key{--a} @code{@@math@{--a @{\frac@{1@}@{2@}@} @@minus@{@}@}} @math{--a {\frac{1}{2}} @minus{}} @code{@@option@{--a@}} @option{--a} @code{@@r@{--a@}} @r{--a} @code{@@samp@{--a@}} @samp{--a} @code{@@sc@{--a@}} @sc{--a} @code{@@strong@{--a@}} @strong{--a} @code{@@t@{--a@}} @t{--a} @code{@@sansserif@{--a@}} @sansserif{--a} @code{@@titlefont@{--a@}} @titlefont{--a} @code{@@indicateurl@{--a@}} @indicateurl{--a} @code{@@uref@{--a,--b@}} @uref{--a,--b} @code{@@uref@{--a@}} @uref{--a} @code{@@uref@{,--b@}} @uref{,--b} @code{@@uref@{--a,--b,--c@}} @uref{--a,--b,--c} @code{@@uref@{,--b,--c@}} @uref{,--b,--c} @code{@@uref@{--a,,--c@}} @uref{--a,,--c} @code{@@uref@{,,--c@}} @uref{,,--c} @code{@@url@{--a,--b@}} @url{--a,--b} @code{@@url@{--a,@}} @url{--a,} @code{@@url@{,--b@}} @url{,--b} @code{@@var@{--a@}} @var{--a} @code{@@verb@{:--a:@}} @verb{:--a:} @code{@@verb@{:a < & @@ % " -- b:@}} @verb{:a < & @ % " -- b:} @code{@@w@{@}} @w{} @code{@@H@{a@}} @H{a} @code{@@H@{--a@}} @H{--a} @code{@@dotaccent@{a@}} @dotaccent{a} @code{@@dotaccent@{--a@}} @dotaccent{--a} @code{@@ringaccent@{a@}} @ringaccent{a} @code{@@ringaccent@{--a@}} @ringaccent{--a} @code{@@tieaccent@{a@}} @tieaccent{a} @code{@@tieaccent@{--a@}} @tieaccent{--a} @code{@@u@{a@}} @u{a} @code{@@u@{--a@}} @u{--a} @code{@@ubaraccent@{a@}} @ubaraccent{a} @code{@@ubaraccent@{--a@}} @ubaraccent{--a} @code{@@udotaccent@{a@}} @udotaccent{a} @code{@@udotaccent@{--a@}} @udotaccent{--a} @code{@@v@{a@}} @v{a} @code{@@v@{--a@}} @v{--a} @code{@@,@{c@}} @,{c} @code{@@,@{--c@}} @,{--c} @code{@@ogonek@{a@}} @ogonek{a} @code{@@ogonek@{--a@}} @ogonek{--a} @code{@@footnote@{in footnote@}} @footnote{in footnote} @code{@@footnote@{in footnote2@}} @footnote{in footnote2} @code{@@image@{f--ile@}} @image{f--ile} @code{@@image@{f--ile,l--i@}} @image{f--ile,l--i} @code{@@image@{f--ile,,l--e@}} @image{f--ile,,l--e} @code{@@image@{f--ile,,,alt@}} @image{f--ile,,,alt} @code{@@image@{f--ile,,,,e-d-xt@}} @image{f--ile,,,,e--xt} @code{@@image@{f--ile,aze,az,alt,e--xt@}} @image{f--ile,aze,az,alt,e--xt} @code{@@image@{f-ile,aze,,a--lt@}} @image{f-ile,aze,,a--lt} @code{@@image@{@@file@{f--ile@}@@@@@@.,aze,az,alt,@@file@{file ext@} e--xt@@@}} @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@}} @sp 2 @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} @clickstyle @result After clickstyle @result{} @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} @clickstyle @arrow @quotation A quot---ation @end quotation @quotation Note A Note @end quotation @quotation note A note @end quotation @quotation Caution Caution @end quotation @quotation Important Important @end quotation @quotation Tip a Tip @end quotation @quotation Warning a Warning. @end quotation @quotation something @'e @TeX{} The something @'e @TeX{} is here. @end quotation @quotation @@ at the end of line @ A @@ at the end of the @@quotation line. @end quotation @quotation something, other thing something, other thing @end quotation @quotation Note, the note Note, the note @end quotation @quotation @end quotation @quotation Empty @end quotation @quotation @asis{} @end quotation @quotation @* @end quotation @smallquotation A small quot---ation @end smallquotation @smallquotation Note A small Note @end smallquotation @smallquotation something, other thing something, other thing @end smallquotation @itemize @item i--temize @end itemize @itemize + @item i--tem + @end itemize @itemize @bullet @item b--ullet @end itemize @itemize @minus @item minu--s @end itemize @itemize @emph @item e--mph item @end itemize @itemize @emph{after emph} @c comment in itemize @item e--mph item @end itemize @itemize @bullet{} a--n itemize line @cindex index entry within itemize @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 6 7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @c comment in multitable @item mu--ltitable item 2 @tab multitable tab 2 @cindex index entry within multitable @item lone mu--ltitable item @end multitable @multitable {truc} {bidule} @item truc @tab bidule @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @display d--isplay @end display @smalldisplay s--malldisplay @end smalldisplay @lisp l--isp @end lisp @smalllisp s--malllisp @end smalllisp @format f--ormat @end format @smallformat s--mallformat @end smallformat @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @deffn cate--gory de--ffn_name ar--guments @ more args @* even more so def--fn @end deffn @deffn fset @var{i} a g @cindex index entry within deffn @deffnx {cmde} truc {} @deffnx Command {log trap} {} @deffnx Command { log trap1} {} @deffnx Command {log trap2 } {} @deffnx cmde @b{id ule} truc @deffnx cmde2 @b{id @samp{i} ule} truc @deffnx @b{id @samp{i} ule} @deffnx @deffnx aaa @deffnx {} {} @deffnx{} @deffnx{} machin @deffnx{} {bidule machin} @deffnx{truc} machin @deffnx{truc} { } @deffnx{truc} followed by a comment @c comment @deffnx{truc} @deffnx{} {} @deffnx {truc} a b c d e @b{f g} {h i} @deffnx {truc} deffnx before end deffn @end deffn @deffn empty deffn @end deffn @deffn empty deffn with deffnx @c comment between deffn and deffnx @deffnx empty deffnx @end deffn @deffn fset @var{i} a g @deffnx {cmde} truc {} @c comment text in def item for second def item @end deffn @defvr c--ategory d--efvr_name d--efvr @end defvr @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... d--eftypefn @end deftypefn @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... d--eftypeop @end deftypeop @deftypevr c--ategory t--ype d--eftypevr_name d--eftypevr @end deftypevr @defcv c--ategory c--lass d--efcv_name d--efcv @end defcv @defop c--ategory c--lass d--efop_name a--rguments... d--efop @end defop @deftp c--ategory d--eftp_name a--ttributes... d--eftp @end deftp @defun d--efun_name a--rguments... d--efun @end defun @defmac d--efmac_name a--rguments... d--efmac @end defmac @defspec d--efspec_name a--rguments... d--efspec @end defspec @defvar d--efvar_name argvar argvar1 d--efvar @end defvar @defopt d--efopt_name d--efopt @end defopt @deftypefun t--ype d--eftypefun_name a--rguments... d--eftypefun @end deftypefun @deftypevar t--ype d--eftypevar_name d--eftypevar @end deftypevar @defivar c--lass d--efivar_name d--efivar @end defivar @deftypeivar c--lass t--ype d--eftypeivar_name d--eftypeivar @end deftypeivar @defmethod c--lass d--efmethod_name a--rguments... d--efmethod @end defmethod @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... d--eftypemethod @end deftypemethod @code{@@xref@{c---hapter@@@@, cross r---ef name@@@@, t---itle@@@@, file n---ame@@@@, ma---nual@@@@@}} @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@}. @code{@@ref@{chapter, cross ref name, title, file name, manual@}} @ref{chapter, cross ref name, title, file name, manual} @code{@@pxref@{chapter, cross ref name, title, file name, manual@}} @pxref{chapter, cross ref name, title, file name, manual} @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} @code{@@ref@{chapter@}} @ref{chapter} @code{@@xref@{chapter@}} @xref{chapter}. @code{@@pxref@{chapter@}} @pxref{chapter} @code{@@ref@{s--ect@@comma@{@}ion@}} @ref{s--ect@comma{}ion} @code{@@ref@{s--ect@@comma@{@}ion, a @@comma@{@} in cross ref, a comma@@comma@{@} in title, a comma@@comma@{@} in file, a @@comma@{@} in manual name @}} @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } @code{@@ref@{chapter,cross ref name@}} @ref{chapter,cross ref name} @code{@@ref@{chapter,,title@}} @ref{chapter,,title} @code{@@ref@{chapter,,,file name@}} @ref{chapter,,,file name} @code{@@ref@{chapter,,,,manual@}} @ref{chapter,,,,manual} @code{@@ref@{chapter,cross ref name,title,@}} @ref{chapter,cross ref name,title,} @code{@@ref@{chapter,cross ref name,,file name@}} @ref{chapter,cross ref name,,file name} @code{@@ref@{chapter,cross ref name,,,manual@}} @ref{chapter,cross ref name,,,manual} @code{@@ref@{chapter,cross ref name,title,file name@}} @ref{chapter,cross ref name,title,file name} @code{@@ref@{chapter,cross ref name,title,,manual@}} @ref{chapter,cross ref name,title,,manual} @code{@@ref@{chapter,cross ref name,title, file name, manual@}} @ref{chapter,cross ref name,title, file name, manual} @code{@@ref@{chapter,,title,file name@}} @ref{chapter,,title,file name} @code{@@ref@{chapter,,title,,manual@}} @ref{chapter,,title,,manual} @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} @code{@@ref@{chapter,,,file name,manual@}} @ref{chapter,,,file name,manual} @code{@@ref@{(pman)anode,cross ref name@}} @ref{(pman)anode,cross ref name} @code{@@ref@{(pman)anode,,title@}} @ref{(pman)anode,,title} @code{@@ref@{(pman)anode,,,file name@}} @ref{(pman)anode,,,file name} @code{@@ref@{(pman)anode,,,,manual@}} @ref{(pman)anode,,,,manual} @code{@@ref@{(pman)anode,cross ref name,title,@}} @ref{(pman)anode,cross ref name,title,} @code{@@ref@{(pman)anode,cross ref name,,file name@}} @ref{(pman)anode,cross ref name,,file name} @code{@@ref@{(pman)anode,cross ref name,,,manual@}} @ref{(pman)anode,cross ref name,,,manual} @code{@@ref@{(pman)anode,cross ref name,title,file name@}} @ref{(pman)anode,cross ref name,title,file name} @code{@@ref@{(pman)anode,cross ref name,title,,manual@}} @ref{(pman)anode,cross ref name,title,,manual} @code{@@ref@{(pman)anode,cross ref name,title, file name, manual@}} @ref{(pman)anode,cross ref name,title, file name, manual} @code{@@ref@{(pman)anode,,title,file name@}} @ref{(pman)anode,,title,file name} @code{@@ref@{(pman)anode,,title,,manual@}} @ref{(pman)anode,,title,,manual} @code{@@ref@{(pman)anode,,title, file name, manual@}} @ref{(pman)anode,,title, file name, manual} @code{@@ref@{(pman)anode,,,file name,manual@}} @ref{(pman)anode,,,file name,manual} @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} @code{@@inforef@{chapter@}} @inforef{chapter} @code{@@inforef@{chapter, cross ref name@}} @inforef{chapter, cross ref name} @code{@@inforef@{chapter,,file name@}} @inforef{chapter,,file name} @code{@@inforef@{node, cross ref name, file name@}} @inforef{node, cross ref name, file name} @code{@@inforef@{node@}} @inforef{node} @code{@@inforef@{node, cross ref name@}} @inforef{node, cross ref name} @code{@@inforef@{node,,file name@}} @inforef{node,,file name} @code{@@inforef@{chapter, cross ref name, file name, spurious arg@}} @inforef{chapter, cross ref name, file name, spurious arg} @code{@@inforef@{s--ect@@comma@{@}ion, a @@comma@{@} in cross ref, a comma@@comma@{@} in file@}} @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} @table @bullet @c comment in table @item a l--ine @end table @vtable @asis @item a @c comment between item and itemx @itemx b l--ine @end vtable @ftable @minus @item a @cindex index entry between item and itemx @itemx b l--ine @end ftable @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @verbatiminclude simplest.texi @verbatim in verbatim '' @end verbatim @html html '' @end html @majorheading majorheading @chapheading chapheading @heading heading @subheading subheading @subsubheading subsubheading @c makeinfo cannot handle that @code{@@acronym@{--a,an accronym @@comma@{@} @@enddots@{@}@}} @acronym{--a,an accronym @comma{} @enddots{}} @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude--@@comma@{@} @@b@{Autonome@} @}} @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} @code{@@math@{--a@@minus@{@} @{\frac@{1@}@{2@}@}@}} @math{--a@minus{} {\frac{1}{2}}} @code{@@image@{f-ile,,,alt@@verb@{:jk _" %@:@}@}} @image{f-ile,,,alt@verb{:jk _" %@:}} @code{@@image@{f--ile,aze,az,@@verb@{:jk _" %@@:@} @@b@{in b "@},e--xt@}} @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} @code{@@image@{file@@verb@{:jk _" %@@:@},,,alt@@verb@{:jk _" %@@:@}@}} @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} @set invalid @c invalid texinfo Somehow invalid use of @@,:@* @@, @, @* @@,@@"u @,@"u Invalid use of @@':@* @@' @' @* @@'@@"u @'@"u @c only i or j as arg @@dotless@{truc@} @dotless{truc} @@dotless@{ij@} @dotless{ij} @code{@@dotless@{--a@}} @dotless{--a} @code{@@dotless@{a@}} @dotless{a} @c braces missing @@TeX, but without brace @TeX @c unknown command @code{@@#} @# @c no arg @code{@@w@{--a@}} @w{--a} @c no file @code{@@image@{,1--xt@}} @image{,1--xt} @code{@@image@{,,2--xt@}} @image{,,2--xt} @code{@@image@{,,,3--xt@}} @image{,,,3--xt} @sp @c braces missing @itemize @emph after emph @item e--mph item @end itemize @c braces missing @itemize @bullet a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @c deffnx after deff lines @deffn fun @deffnx truc machin bidule chose and } @deffnx truc machin bidule chose and } after @deffnx truc machin bidule chose and { @deffnx truc machin bidule chose and { and after @deffnx {truc} followed by a comment @c comment Various deff lines @deffnx {truc} after a deff item @end deffn @c node is non existent, or missing first arg @code{@@ref@{node@}} @ref{node} @code{@@ref@{,cross ref name@}} @ref{,cross ref name} @code{@@ref@{,,title@}} @ref{,,title} @code{@@ref@{,,,file name@}} @ref{,,,file name} @code{@@ref@{,,,,manual@}} @ref{,,,,manual} @code{@@ref@{node,cross ref name@}} @ref{node,cross ref name} @code{@@ref@{node,,title@}} @ref{node,,title} @code{@@ref@{node,,,file name@}} @ref{node,,,file name} @code{@@ref@{node,,,,manual@}} @ref{node,,,,manual} @code{@@ref@{node,cross ref name,title,@}} @ref{node,cross ref name,title,} @code{@@ref@{node,cross ref name,,file name@}} @ref{node,cross ref name,,file name} @code{@@ref@{node,cross ref name,,,manual@}} @ref{node,cross ref name,,,manual} @code{@@ref@{node,cross ref name,title,file name@}} @ref{node,cross ref name,title,file name} @code{@@ref@{node,cross ref name,title,,manual@}} @ref{node,cross ref name,title,,manual} @code{@@ref@{node,cross ref name,title, file name, manual@}} @ref{node,cross ref name,title, file name, manual} @code{@@ref@{node,,title,file name@}} @ref{node,,title,file name} @code{@@ref@{node,,title,,manual@}} @ref{node,,title,,manual} @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} @code{@@ref@{node,,title, file name, manual@}} @ref{node,,title, file name, manual} @code{@@ref@{node,,,file name,manual@}} @ref{node,,,file name,manual} @code{@@ref@{,cross ref name,title,@}} @ref{,cross ref name,title,} @code{@@ref@{,cross ref name,,file name@}} @ref{,cross ref name,,file name} @code{@@ref@{,cross ref name,,,manual@}} @ref{,cross ref name,,,manual} @code{@@ref@{,cross ref name,title,file name@}} @ref{,cross ref name,title,file name} @code{@@ref@{,cross ref name,title,,manual@}} @ref{,cross ref name,title,,manual} @code{@@ref@{,cross ref name,title, file name, manual@}} @ref{,cross ref name,title, file name, manual} @code{@@ref@{,,title,file name@}} @ref{,,title,file name} @code{@@ref@{,,title,,manual@}} @ref{,,title,,manual} @code{@@ref@{,,title, file name, manual@}} @ref{,,title, file name, manual} @code{@@ref@{,,,file name,manual@}} @ref{,,,file name,manual} @code{@@inforef@{,cross ref name @}} @inforef{,cross ref name } @code{@@inforef@{,,file name@}} @inforef{,,file name} @code{@@inforef@{,cross ref name, file name@}} @inforef{,cross ref name, file name} @code{@@inforef@{@}} @inforef{} @end example insertcopying @insertcopying @cindex t--ruc @cindex T--ruc @cindex . @cindex ? @cindex a @findex t--ruc @findex T--ruc @findex . @findex ? @findex a cp @printindex cp fn @printindex fn vr @printindex vr ky @printindex ky pg @printindex pg tp @printindex tp @node chapter @chapter chapter @footnote{in footnote} @format @menu * s--ect@comma{}ion:: s--ect@comma{}ion Menu comment ``simple-double--three---four----''@* @end menu @end format @node s--ect@comma{}ion @section A section @menu * subsection:: @end menu @node subsection @subsection subsection @menu * subsubsection:: @end menu @anchor{anchor} @node subsubsection @subsubsection subsubsection @node chapter2 @centerchap chapter 2 @printindex cp @printindex fn @contents @shortcontents texi2html-1.82/test/layout/res/texi_formatting_regions/formatting_regions.passfirst0000644000175000017500000026133411264347122033121 0ustar flichtenheldflichtenheldformatting_regions.texi(,2) @setfilename formatting-regions.info formatting_regions.texi(,3) formatting_regions.texi(,7) formatting_regions.texi(,8) @node Top formatting_regions.texi(,9) @top Top section formatting_regions.texi(,22) @node constructs formatting_regions.texi(,23) @chapter constructs formatting_regions.texi(,24) formatting_regions.texi(,26) formatting_regions.texi(,30) formatting_regions.texi(,45) formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) < formatting_regions.texi(mymacro,46) > formatting_regions.texi(mymacro,46) " formatting_regions.texi(mymacro,46) & formatting_regions.texi(mymacro,46) ' formatting_regions.texi(mymacro,46) ` formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) ``simple-double--three---four----''@* formatting_regions.texi(mymacro,46) code: @code{``simple-double--three---four----''} @* formatting_regions.texi(mymacro,46) asis: @asis{``simple-double--three---four----''} @* formatting_regions.texi(mymacro,46) strong: @strong{``simple-double--three---four----''} @* formatting_regions.texi(mymacro,46) kbd: @kbd{``simple-double--three---four----''} @* formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) `@w{}`simple-double-@w{}-three---four----'@w{}'@* formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @cindex --option formatting_regions.texi(mymacro,46) @cindex `` formatting_regions.texi(mymacro,46) @findex `` formatting_regions.texi(mymacro,46) @findex --foption formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @@"u @"u formatting_regions.texi(mymacro,46) @@"@{U@} @"{U} formatting_regions.texi(mymacro,46) @@~n @~n formatting_regions.texi(mymacro,46) @@^a @^a formatting_regions.texi(mymacro,46) @@'e @'e formatting_regions.texi(mymacro,46) @@=o @=o formatting_regions.texi(mymacro,46) @@`i @`i formatting_regions.texi(mymacro,46) @@'@{e@} @'{e} formatting_regions.texi(mymacro,46) @@'@{@@dotless@{i@}@} @'{@dotless{i}} formatting_regions.texi(mymacro,46) @@dotless@{i@} @dotless{i} formatting_regions.texi(mymacro,46) @@dotless@{j@} @dotless{j} formatting_regions.texi(mymacro,46) @@`@{@@=E@} @`{@=E} formatting_regions.texi(mymacro,46) @@l@{@} @l{} formatting_regions.texi(mymacro,46) @@,@{@@'C@} @,{@'C} formatting_regions.texi(mymacro,46) @@,c @,c formatting_regions.texi(mymacro,46) @@,c@@"u @,c@"u @* formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @@* @* formatting_regions.texi(mymacro,46) @@ followed by a space formatting_regions.texi(mymacro,46) @ formatting_regions.texi(mymacro,46) @@ followed by a tab formatting_regions.texi(mymacro,46) @ formatting_regions.texi(mymacro,46) @@ followed by a new line formatting_regions.texi(mymacro,46) @ formatting_regions.texi(mymacro,46) @code{@@-} @- formatting_regions.texi(mymacro,46) @code{@@|} @| formatting_regions.texi(mymacro,46) @code{@@:} @: formatting_regions.texi(mymacro,46) @code{@@!} @! formatting_regions.texi(mymacro,46) @code{@@?} @? formatting_regions.texi(mymacro,46) @code{@@.} @. formatting_regions.texi(mymacro,46) @code{@@@@} @@ formatting_regions.texi(mymacro,46) @code{@@@}} @} formatting_regions.texi(mymacro,46) @code{@@@{} @{ formatting_regions.texi(mymacro,46) @code{@@/} @/ formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) foo vs.@: bar. formatting_regions.texi(mymacro,46) colon :@:And something else. formatting_regions.texi(mymacro,46) semi colon ;@:. formatting_regions.texi(mymacro,46) And ? ?@:. formatting_regions.texi(mymacro,46) Now ! !@:@@ formatting_regions.texi(mymacro,46) but , ,@: formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @@TeX @TeX{} formatting_regions.texi(mymacro,46) @@LaTeX @LaTeX{} formatting_regions.texi(mymacro,46) @@bullet @bullet{} formatting_regions.texi(mymacro,46) @@copyright @copyright{} formatting_regions.texi(mymacro,46) @@dots @dots{} formatting_regions.texi(mymacro,46) @@enddots @enddots{} formatting_regions.texi(mymacro,46) @@equiv @equiv{} formatting_regions.texi(mymacro,46) @@error @error{} formatting_regions.texi(mymacro,46) @@expansion @expansion{} formatting_regions.texi(mymacro,46) @@minus @minus{} formatting_regions.texi(mymacro,46) @@point @point{} formatting_regions.texi(mymacro,46) @@print @print{} formatting_regions.texi(mymacro,46) @@result @result{} formatting_regions.texi(mymacro,46) @@today @today{} formatting_regions.texi(mymacro,46) @@aa @aa{} formatting_regions.texi(mymacro,46) @@AA @AA{} formatting_regions.texi(mymacro,46) @@ae @ae{} formatting_regions.texi(mymacro,46) @@oe @oe{} formatting_regions.texi(mymacro,46) @@AE @AE{} formatting_regions.texi(mymacro,46) @@OE @OE{} formatting_regions.texi(mymacro,46) @@o @o{} formatting_regions.texi(mymacro,46) @@O @O{} formatting_regions.texi(mymacro,46) @@ss @ss{} formatting_regions.texi(mymacro,46) @@l @l{} formatting_regions.texi(mymacro,46) @@L @L{} formatting_regions.texi(mymacro,46) @@exclamdown @exclamdown{} formatting_regions.texi(mymacro,46) @@questiondown @questiondown{} formatting_regions.texi(mymacro,46) @@pounds @pounds{} formatting_regions.texi(mymacro,46) @@registeredsymbol @registeredsymbol{} formatting_regions.texi(mymacro,46) @@ordf @ordf{} formatting_regions.texi(mymacro,46) @@ordm @ordm{} formatting_regions.texi(mymacro,46) @@comma @comma{} formatting_regions.texi(mymacro,46) @@quotedblleft @quotedblleft{} formatting_regions.texi(mymacro,46) @@quotedblright @quotedblright{} formatting_regions.texi(mymacro,46) @@quoteleft @quoteleft{} formatting_regions.texi(mymacro,46) @@quoteright @quoteright{} formatting_regions.texi(mymacro,46) @@quotedblbase @quotedblbase{} formatting_regions.texi(mymacro,46) @@quotesinglbase @quotesinglbase{} formatting_regions.texi(mymacro,46) @@guillemetleft @guillemetleft{} formatting_regions.texi(mymacro,46) @@guillemetright @guillemetright{} formatting_regions.texi(mymacro,46) @@guillemotleft @guillemotleft{} formatting_regions.texi(mymacro,46) @@guillemotright @guillemotright{} formatting_regions.texi(mymacro,46) @@guilsinglleft @guilsinglleft{} formatting_regions.texi(mymacro,46) @@guilsinglright @guilsinglright{} formatting_regions.texi(mymacro,46) @@textdegree @textdegree{} formatting_regions.texi(mymacro,46) @@euro @euro{} formatting_regions.texi(mymacro,46) @@arrow @arrow{} formatting_regions.texi(mymacro,46) @@leq @leq{} formatting_regions.texi(mymacro,46) @@geq @geq{} formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @code{@@acronym@{--a,an accronym@}} @acronym{--a,an accronym} formatting_regions.texi(mymacro,46) @code{@@acronym@{--a@}} @acronym{--a} formatting_regions.texi(mymacro,46) @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude Autonome @}} @abbr{@'E--. @comma{}A., @'Etude Autonome } formatting_regions.texi(mymacro,46) @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} formatting_regions.texi(mymacro,46) @code{@@asis@{--a@}} @asis{--a} formatting_regions.texi(mymacro,46) @code{@@b@{--a@}} @b{--a} formatting_regions.texi(mymacro,46) @code{@@cite@{--a@}} @cite{--a} formatting_regions.texi(mymacro,46) @code{@@code@{--a@}} @code{--a} formatting_regions.texi(mymacro,46) @code{@@command@{--a@}} @command{--a} formatting_regions.texi(mymacro,46) @code{@@ctrl@{--a@}} @ctrl{--a} formatting_regions.texi(mymacro,46) @code{@@dfn@{--a@}} @dfn{--a} formatting_regions.texi(mymacro,46) @code{@@dmn@{--a@}} @dmn{--a} formatting_regions.texi(mymacro,46) @code{@@email@{--a,--b@}} @email{--a,--b} formatting_regions.texi(mymacro,46) @code{@@email@{,--b@}} @email{,--b} formatting_regions.texi(mymacro,46) @code{@@email@{--a@}} @email{--a} formatting_regions.texi(mymacro,46) @code{@@emph@{--a@}} @emph{--a} formatting_regions.texi(mymacro,46) @code{@@env@{--a@}} @env{--a} formatting_regions.texi(mymacro,46) @code{@@file@{--a@}} @file{--a} formatting_regions.texi(mymacro,46) @code{@@i@{--a@}} @i{--a} formatting_regions.texi(mymacro,46) @code{@@kbd@{--a@}} @kbd{--a} formatting_regions.texi(mymacro,46) @code{@@key@{--a@}} @key{--a} formatting_regions.texi(mymacro,46) @code{@@math@{--a @{\frac@{1@}@{2@}@} @@minus@{@}@}} @math{--a {\frac{1}{2}} @minus{}} formatting_regions.texi(mymacro,46) @code{@@option@{--a@}} @option{--a} formatting_regions.texi(mymacro,46) @code{@@r@{--a@}} @r{--a} formatting_regions.texi(mymacro,46) @code{@@samp@{--a@}} @samp{--a} formatting_regions.texi(mymacro,46) @code{@@sc@{--a@}} @sc{--a} formatting_regions.texi(mymacro,46) @code{@@strong@{--a@}} @strong{--a} formatting_regions.texi(mymacro,46) @code{@@t@{--a@}} @t{--a} formatting_regions.texi(mymacro,46) @code{@@sansserif@{--a@}} @sansserif{--a} formatting_regions.texi(mymacro,46) @code{@@titlefont@{--a@}} @titlefont{--a} formatting_regions.texi(mymacro,46) @code{@@indicateurl@{--a@}} @indicateurl{--a} formatting_regions.texi(mymacro,46) @code{@@uref@{--a,--b@}} @uref{--a,--b} formatting_regions.texi(mymacro,46) @code{@@uref@{--a@}} @uref{--a} formatting_regions.texi(mymacro,46) @code{@@uref@{,--b@}} @uref{,--b} formatting_regions.texi(mymacro,46) @code{@@uref@{--a,--b,--c@}} @uref{--a,--b,--c} formatting_regions.texi(mymacro,46) @code{@@uref@{,--b,--c@}} @uref{,--b,--c} formatting_regions.texi(mymacro,46) @code{@@uref@{--a,,--c@}} @uref{--a,,--c} formatting_regions.texi(mymacro,46) @code{@@uref@{,,--c@}} @uref{,,--c} formatting_regions.texi(mymacro,46) @code{@@url@{--a,--b@}} @url{--a,--b} formatting_regions.texi(mymacro,46) @code{@@url@{--a,@}} @url{--a,} formatting_regions.texi(mymacro,46) @code{@@url@{,--b@}} @url{,--b} formatting_regions.texi(mymacro,46) @code{@@var@{--a@}} @var{--a} formatting_regions.texi(mymacro,46) @code{@@verb@{:--a:@}} @verb{:--a:} formatting_regions.texi(mymacro,46) @code{@@verb@{:a < & @@ % " -- b:@}} @verb{:a < & @ % " -- b:} formatting_regions.texi(mymacro,46) @code{@@w@{@}} @w{} formatting_regions.texi(mymacro,46) @code{@@H@{a@}} @H{a} formatting_regions.texi(mymacro,46) @code{@@H@{--a@}} @H{--a} formatting_regions.texi(mymacro,46) @code{@@dotaccent@{a@}} @dotaccent{a} formatting_regions.texi(mymacro,46) @code{@@dotaccent@{--a@}} @dotaccent{--a} formatting_regions.texi(mymacro,46) @code{@@ringaccent@{a@}} @ringaccent{a} formatting_regions.texi(mymacro,46) @code{@@ringaccent@{--a@}} @ringaccent{--a} formatting_regions.texi(mymacro,46) @code{@@tieaccent@{a@}} @tieaccent{a} formatting_regions.texi(mymacro,46) @code{@@tieaccent@{--a@}} @tieaccent{--a} formatting_regions.texi(mymacro,46) @code{@@u@{a@}} @u{a} formatting_regions.texi(mymacro,46) @code{@@u@{--a@}} @u{--a} formatting_regions.texi(mymacro,46) @code{@@ubaraccent@{a@}} @ubaraccent{a} formatting_regions.texi(mymacro,46) @code{@@ubaraccent@{--a@}} @ubaraccent{--a} formatting_regions.texi(mymacro,46) @code{@@udotaccent@{a@}} @udotaccent{a} formatting_regions.texi(mymacro,46) @code{@@udotaccent@{--a@}} @udotaccent{--a} formatting_regions.texi(mymacro,46) @code{@@v@{a@}} @v{a} formatting_regions.texi(mymacro,46) @code{@@v@{--a@}} @v{--a} formatting_regions.texi(mymacro,46) @code{@@,@{c@}} @,{c} formatting_regions.texi(mymacro,46) @code{@@,@{--c@}} @,{--c} formatting_regions.texi(mymacro,46) @code{@@ogonek@{a@}} @ogonek{a} formatting_regions.texi(mymacro,46) @code{@@ogonek@{--a@}} @ogonek{--a} formatting_regions.texi(mymacro,46) @code{@@footnote@{in footnote@}} @footnote{in footnote} formatting_regions.texi(mymacro,46) @code{@@footnote@{in footnote2@}} @footnote{in footnote2} formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @code{@@image@{f--ile@}} @image{f--ile} formatting_regions.texi(mymacro,46) @code{@@image@{f--ile,l--i@}} @image{f--ile,l--i} formatting_regions.texi(mymacro,46) @code{@@image@{f--ile,,l--e@}} @image{f--ile,,l--e} formatting_regions.texi(mymacro,46) @code{@@image@{f--ile,,,alt@}} @image{f--ile,,,alt} formatting_regions.texi(mymacro,46) @code{@@image@{f--ile,,,,e-d-xt@}} @image{f--ile,,,,e--xt} formatting_regions.texi(mymacro,46) @code{@@image@{f--ile,aze,az,alt,e--xt@}} @image{f--ile,aze,az,alt,e--xt} formatting_regions.texi(mymacro,46) @code{@@image@{f-ile,aze,,a--lt@}} @image{f-ile,aze,,a--lt} formatting_regions.texi(mymacro,46) @code{@@image@{@@file@{f--ile@}@@@@@@.,aze,az,alt,@@file@{file ext@} e--xt@@@}} @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@}} formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @sp 2 formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} formatting_regions.texi(mymacro,46) @clickstyle @result formatting_regions.texi(mymacro,46) After clickstyle @result{} formatting_regions.texi(mymacro,46) @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} formatting_regions.texi(mymacro,46) @clickstyle @arrow formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @quotation formatting_regions.texi(mymacro,46) A quot---ation formatting_regions.texi(mymacro,46) @end quotation formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @quotation Note formatting_regions.texi(mymacro,46) A Note formatting_regions.texi(mymacro,46) @end quotation formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @quotation note formatting_regions.texi(mymacro,46) A note formatting_regions.texi(mymacro,46) @end quotation formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @quotation Caution formatting_regions.texi(mymacro,46) Caution formatting_regions.texi(mymacro,46) @end quotation formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @quotation Important formatting_regions.texi(mymacro,46) Important formatting_regions.texi(mymacro,46) @end quotation formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @quotation Tip formatting_regions.texi(mymacro,46) a Tip formatting_regions.texi(mymacro,46) @end quotation formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @quotation Warning formatting_regions.texi(mymacro,46) a Warning. formatting_regions.texi(mymacro,46) @end quotation formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @quotation something @'e @TeX{} formatting_regions.texi(mymacro,46) The something @'e @TeX{} is here. formatting_regions.texi(mymacro,46) @end quotation formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @quotation @@ at the end of line @ formatting_regions.texi(mymacro,46) A @@ at the end of the @@quotation line. formatting_regions.texi(mymacro,46) @end quotation formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @quotation something, other thing formatting_regions.texi(mymacro,46) something, other thing formatting_regions.texi(mymacro,46) @end quotation formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @quotation Note, the note formatting_regions.texi(mymacro,46) Note, the note formatting_regions.texi(mymacro,46) @end quotation formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @quotation formatting_regions.texi(mymacro,46) @end quotation formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @quotation Empty formatting_regions.texi(mymacro,46) @end quotation formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @quotation @asis{} formatting_regions.texi(mymacro,46) @end quotation formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @quotation @* formatting_regions.texi(mymacro,46) @end quotation formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @smallquotation formatting_regions.texi(mymacro,46) A small quot---ation formatting_regions.texi(mymacro,46) @end smallquotation formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @smallquotation Note formatting_regions.texi(mymacro,46) A small Note formatting_regions.texi(mymacro,46) @end smallquotation formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @smallquotation something, other thing formatting_regions.texi(mymacro,46) something, other thing formatting_regions.texi(mymacro,46) @end smallquotation formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @itemize formatting_regions.texi(mymacro,46) @item i--temize formatting_regions.texi(mymacro,46) @end itemize formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @itemize + formatting_regions.texi(mymacro,46) @item i--tem + formatting_regions.texi(mymacro,46) @end itemize formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @itemize @bullet formatting_regions.texi(mymacro,46) @item b--ullet formatting_regions.texi(mymacro,46) @end itemize formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @itemize @minus formatting_regions.texi(mymacro,46) @item minu--s formatting_regions.texi(mymacro,46) @end itemize formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @itemize @emph formatting_regions.texi(mymacro,46) @item e--mph item formatting_regions.texi(mymacro,46) @end itemize formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @itemize @emph{after emph} formatting_regions.texi(mymacro,46) @c comment in itemize formatting_regions.texi(mymacro,46) @item e--mph item formatting_regions.texi(mymacro,46) @end itemize formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @itemize @bullet{} a--n itemize line formatting_regions.texi(mymacro,46) @cindex index entry within itemize formatting_regions.texi(mymacro,46) @item i--tem 1 formatting_regions.texi(mymacro,46) @item i--tem 2 formatting_regions.texi(mymacro,46) @end itemize formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @enumerate formatting_regions.texi(mymacro,46) @item e--numerate formatting_regions.texi(mymacro,46) @end enumerate formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @multitable @columnfractions 6 7 formatting_regions.texi(mymacro,46) @headitem mu--ltitable headitem @tab another tab formatting_regions.texi(mymacro,46) @item mu--ltitable item @tab multitable tab formatting_regions.texi(mymacro,46) @c comment in multitable formatting_regions.texi(mymacro,46) @item mu--ltitable item 2 @tab multitable tab 2 formatting_regions.texi(mymacro,46) @cindex index entry within multitable formatting_regions.texi(mymacro,46) @item lone mu--ltitable item formatting_regions.texi(mymacro,46) @end multitable formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @multitable {truc} {bidule} formatting_regions.texi(mymacro,46) @item truc @tab bidule formatting_regions.texi(mymacro,46) @end multitable formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @example formatting_regions.texi(mymacro,46) e--xample some formatting_regions.texi(mymacro,46) text formatting_regions.texi(mymacro,46) @end example formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @smallexample formatting_regions.texi(mymacro,46) s--mallexample formatting_regions.texi(mymacro,46) @end smallexample formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @display formatting_regions.texi(mymacro,46) d--isplay formatting_regions.texi(mymacro,46) @end display formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @smalldisplay formatting_regions.texi(mymacro,46) s--malldisplay formatting_regions.texi(mymacro,46) @end smalldisplay formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @lisp formatting_regions.texi(mymacro,46) l--isp formatting_regions.texi(mymacro,46) @end lisp formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @smalllisp formatting_regions.texi(mymacro,46) s--malllisp formatting_regions.texi(mymacro,46) @end smalllisp formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @format formatting_regions.texi(mymacro,46) f--ormat formatting_regions.texi(mymacro,46) @end format formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @smallformat formatting_regions.texi(mymacro,46) s--mallformat formatting_regions.texi(mymacro,46) @end smallformat formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @deffn c--ategory d--effn_name a--rguments... formatting_regions.texi(mymacro,46) d--effn formatting_regions.texi(mymacro,46) @end deffn formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @deffn cate--gory de--ffn_name ar--guments more args @* even more so formatting_regions.texi(mymacro,46) def--fn formatting_regions.texi(mymacro,46) @end deffn formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @deffn fset @var{i} a g formatting_regions.texi(mymacro,46) @cindex index entry within deffn formatting_regions.texi(mymacro,46) @deffnx {cmde} truc {} formatting_regions.texi(mymacro,46) @deffnx Command {log trap} {} formatting_regions.texi(mymacro,46) @deffnx Command { log trap1} {} formatting_regions.texi(mymacro,46) @deffnx Command {log trap2 } {} formatting_regions.texi(mymacro,46) @deffnx cmde @b{id ule} truc formatting_regions.texi(mymacro,46) @deffnx cmde2 @b{id @samp{i} ule} truc formatting_regions.texi(mymacro,46) @deffnx @b{id @samp{i} ule} formatting_regions.texi(mymacro,46) @deffnx formatting_regions.texi(mymacro,46) @deffnx aaa formatting_regions.texi(mymacro,46) @deffnx {} {} formatting_regions.texi(mymacro,46) @deffnx{} formatting_regions.texi(mymacro,46) @deffnx{} machin formatting_regions.texi(mymacro,46) @deffnx{} {bidule machin} formatting_regions.texi(mymacro,46) @deffnx{truc} machin formatting_regions.texi(mymacro,46) @deffnx{truc} { } formatting_regions.texi(mymacro,46) @deffnx{truc} followed by a comment formatting_regions.texi(mymacro,46) @c comment formatting_regions.texi(mymacro,46) @deffnx{truc} formatting_regions.texi(mymacro,46) @deffnx{} {} formatting_regions.texi(mymacro,46) @deffnx {truc} a b c d e @b{f g} {h i} formatting_regions.texi(mymacro,46) @deffnx {truc} deffnx before end deffn formatting_regions.texi(mymacro,46) @end deffn formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @deffn empty deffn formatting_regions.texi(mymacro,46) @end deffn formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @deffn empty deffn with deffnx formatting_regions.texi(mymacro,46) @c comment between deffn and deffnx formatting_regions.texi(mymacro,46) @deffnx empty deffnx formatting_regions.texi(mymacro,46) @end deffn formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @deffn fset @var{i} a g formatting_regions.texi(mymacro,46) @deffnx {cmde} truc {} formatting_regions.texi(mymacro,46) @c comment formatting_regions.texi(mymacro,46) text in def item for second def item formatting_regions.texi(mymacro,46) @end deffn formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @defvr c--ategory d--efvr_name formatting_regions.texi(mymacro,46) d--efvr formatting_regions.texi(mymacro,46) @end defvr formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... formatting_regions.texi(mymacro,46) d--eftypefn formatting_regions.texi(mymacro,46) @end deftypefn formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... formatting_regions.texi(mymacro,46) d--eftypeop formatting_regions.texi(mymacro,46) @end deftypeop formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @deftypevr c--ategory t--ype d--eftypevr_name formatting_regions.texi(mymacro,46) d--eftypevr formatting_regions.texi(mymacro,46) @end deftypevr formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @defcv c--ategory c--lass d--efcv_name formatting_regions.texi(mymacro,46) d--efcv formatting_regions.texi(mymacro,46) @end defcv formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @defop c--ategory c--lass d--efop_name a--rguments... formatting_regions.texi(mymacro,46) d--efop formatting_regions.texi(mymacro,46) @end defop formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @deftp c--ategory d--eftp_name a--ttributes... formatting_regions.texi(mymacro,46) d--eftp formatting_regions.texi(mymacro,46) @end deftp formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @defun d--efun_name a--rguments... formatting_regions.texi(mymacro,46) d--efun formatting_regions.texi(mymacro,46) @end defun formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @defmac d--efmac_name a--rguments... formatting_regions.texi(mymacro,46) d--efmac formatting_regions.texi(mymacro,46) @end defmac formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @defspec d--efspec_name a--rguments... formatting_regions.texi(mymacro,46) d--efspec formatting_regions.texi(mymacro,46) @end defspec formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @defvar d--efvar_name argvar argvar1 formatting_regions.texi(mymacro,46) d--efvar formatting_regions.texi(mymacro,46) @end defvar formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @defopt d--efopt_name formatting_regions.texi(mymacro,46) d--efopt formatting_regions.texi(mymacro,46) @end defopt formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @deftypefun t--ype d--eftypefun_name a--rguments... formatting_regions.texi(mymacro,46) d--eftypefun formatting_regions.texi(mymacro,46) @end deftypefun formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @deftypevar t--ype d--eftypevar_name formatting_regions.texi(mymacro,46) d--eftypevar formatting_regions.texi(mymacro,46) @end deftypevar formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @defivar c--lass d--efivar_name formatting_regions.texi(mymacro,46) d--efivar formatting_regions.texi(mymacro,46) @end defivar formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @deftypeivar c--lass t--ype d--eftypeivar_name formatting_regions.texi(mymacro,46) d--eftypeivar formatting_regions.texi(mymacro,46) @end deftypeivar formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @defmethod c--lass d--efmethod_name a--rguments... formatting_regions.texi(mymacro,46) d--efmethod formatting_regions.texi(mymacro,46) @end defmethod formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... formatting_regions.texi(mymacro,46) d--eftypemethod formatting_regions.texi(mymacro,46) @end deftypemethod formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @code{@@xref@{c---hapter@@@@, cross r---ef name@@@@, t---itle@@@@, file n---ame@@@@, ma---nual@@@@@}} @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@}. formatting_regions.texi(mymacro,46) @code{@@ref@{chapter, cross ref name, title, file name, manual@}} @ref{chapter, cross ref name, title, file name, manual} formatting_regions.texi(mymacro,46) @code{@@pxref@{chapter, cross ref name, title, file name, manual@}} @pxref{chapter, cross ref name, title, file name, manual} formatting_regions.texi(mymacro,46) @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @code{@@ref@{chapter@}} @ref{chapter} formatting_regions.texi(mymacro,46) @code{@@xref@{chapter@}} @xref{chapter}. formatting_regions.texi(mymacro,46) @code{@@pxref@{chapter@}} @pxref{chapter} formatting_regions.texi(mymacro,46) @code{@@ref@{s--ect@@comma@{@}ion@}} @ref{s--ect@comma{}ion} formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @code{@@ref@{s--ect@@comma@{@}ion, a @@comma@{@} in cross formatting_regions.texi(mymacro,46) ref, a comma@@comma@{@} in title, a comma@@comma@{@} in file, a @@comma@{@} in manual name @}} formatting_regions.texi(mymacro,46) @ref{s--ect@comma{}ion, a @comma{} in cross formatting_regions.texi(mymacro,46) ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @code{@@ref@{chapter,cross ref name@}} @ref{chapter,cross ref name} formatting_regions.texi(mymacro,46) @code{@@ref@{chapter,,title@}} @ref{chapter,,title} formatting_regions.texi(mymacro,46) @code{@@ref@{chapter,,,file name@}} @ref{chapter,,,file name} formatting_regions.texi(mymacro,46) @code{@@ref@{chapter,,,,manual@}} @ref{chapter,,,,manual} formatting_regions.texi(mymacro,46) @code{@@ref@{chapter,cross ref name,title,@}} @ref{chapter,cross ref name,title,} formatting_regions.texi(mymacro,46) @code{@@ref@{chapter,cross ref name,,file name@}} @ref{chapter,cross ref name,,file name} formatting_regions.texi(mymacro,46) @code{@@ref@{chapter,cross ref name,,,manual@}} @ref{chapter,cross ref name,,,manual} formatting_regions.texi(mymacro,46) @code{@@ref@{chapter,cross ref name,title,file name@}} @ref{chapter,cross ref name,title,file name} formatting_regions.texi(mymacro,46) @code{@@ref@{chapter,cross ref name,title,,manual@}} @ref{chapter,cross ref name,title,,manual} formatting_regions.texi(mymacro,46) @code{@@ref@{chapter,cross ref name,title, file name, manual@}} @ref{chapter,cross ref name,title, file name, manual} formatting_regions.texi(mymacro,46) @code{@@ref@{chapter,,title,file name@}} @ref{chapter,,title,file name} formatting_regions.texi(mymacro,46) @code{@@ref@{chapter,,title,,manual@}} @ref{chapter,,title,,manual} formatting_regions.texi(mymacro,46) @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} formatting_regions.texi(mymacro,46) @code{@@ref@{chapter,,,file name,manual@}} @ref{chapter,,,file name,manual} formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @code{@@ref@{(pman)anode,cross ref name@}} @ref{(pman)anode,cross ref name} formatting_regions.texi(mymacro,46) @code{@@ref@{(pman)anode,,title@}} @ref{(pman)anode,,title} formatting_regions.texi(mymacro,46) @code{@@ref@{(pman)anode,,,file name@}} @ref{(pman)anode,,,file name} formatting_regions.texi(mymacro,46) @code{@@ref@{(pman)anode,,,,manual@}} @ref{(pman)anode,,,,manual} formatting_regions.texi(mymacro,46) @code{@@ref@{(pman)anode,cross ref name,title,@}} @ref{(pman)anode,cross ref name,title,} formatting_regions.texi(mymacro,46) @code{@@ref@{(pman)anode,cross ref name,,file name@}} @ref{(pman)anode,cross ref name,,file name} formatting_regions.texi(mymacro,46) @code{@@ref@{(pman)anode,cross ref name,,,manual@}} @ref{(pman)anode,cross ref name,,,manual} formatting_regions.texi(mymacro,46) @code{@@ref@{(pman)anode,cross ref name,title,file name@}} @ref{(pman)anode,cross ref name,title,file name} formatting_regions.texi(mymacro,46) @code{@@ref@{(pman)anode,cross ref name,title,,manual@}} @ref{(pman)anode,cross ref name,title,,manual} formatting_regions.texi(mymacro,46) @code{@@ref@{(pman)anode,cross ref name,title, file name, manual@}} @ref{(pman)anode,cross ref name,title, file name, manual} formatting_regions.texi(mymacro,46) @code{@@ref@{(pman)anode,,title,file name@}} @ref{(pman)anode,,title,file name} formatting_regions.texi(mymacro,46) @code{@@ref@{(pman)anode,,title,,manual@}} @ref{(pman)anode,,title,,manual} formatting_regions.texi(mymacro,46) @code{@@ref@{(pman)anode,,title, file name, manual@}} @ref{(pman)anode,,title, file name, manual} formatting_regions.texi(mymacro,46) @code{@@ref@{(pman)anode,,,file name,manual@}} @ref{(pman)anode,,,file name,manual} formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} formatting_regions.texi(mymacro,46) @code{@@inforef@{chapter@}} @inforef{chapter} formatting_regions.texi(mymacro,46) @code{@@inforef@{chapter, cross ref name@}} @inforef{chapter, cross ref name} formatting_regions.texi(mymacro,46) @code{@@inforef@{chapter,,file name@}} @inforef{chapter,,file name} formatting_regions.texi(mymacro,46) @code{@@inforef@{node, cross ref name, file name@}} @inforef{node, cross ref name, file name} formatting_regions.texi(mymacro,46) @code{@@inforef@{node@}} @inforef{node} formatting_regions.texi(mymacro,46) @code{@@inforef@{node, cross ref name@}} @inforef{node, cross ref name} formatting_regions.texi(mymacro,46) @code{@@inforef@{node,,file name@}} @inforef{node,,file name} formatting_regions.texi(mymacro,46) @code{@@inforef@{chapter, cross ref name, file name, spurious arg@}} @inforef{chapter, cross ref name, file name, spurious arg} formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @code{@@inforef@{s--ect@@comma@{@}ion, a @@comma@{@} in cross formatting_regions.texi(mymacro,46) ref, a comma@@comma@{@} in file@}} formatting_regions.texi(mymacro,46) @inforef{s--ect@comma{}ion, a @comma{} in cross formatting_regions.texi(mymacro,46) ref, a comma@comma{} in file} formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @table @bullet formatting_regions.texi(mymacro,46) @c comment in table formatting_regions.texi(mymacro,46) @item a formatting_regions.texi(mymacro,46) l--ine formatting_regions.texi(mymacro,46) @end table formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @vtable @asis formatting_regions.texi(mymacro,46) @item a formatting_regions.texi(mymacro,46) @c comment between item and itemx formatting_regions.texi(mymacro,46) @itemx b formatting_regions.texi(mymacro,46) l--ine formatting_regions.texi(mymacro,46) @end vtable formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @ftable @minus formatting_regions.texi(mymacro,46) @item a formatting_regions.texi(mymacro,46) @cindex index entry between item and itemx formatting_regions.texi(mymacro,46) @itemx b formatting_regions.texi(mymacro,46) l--ine formatting_regions.texi(mymacro,46) @end ftable formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @cartouche formatting_regions.texi(mymacro,46) c--artouche formatting_regions.texi(mymacro,46) @end cartouche formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @flushleft formatting_regions.texi(mymacro,46) f--lushleft formatting_regions.texi(mymacro,46) @end flushleft formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @flushright formatting_regions.texi(mymacro,46) f--lushright formatting_regions.texi(mymacro,46) @end flushright formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @center ce--ntered line formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @verbatiminclude simplest.texi formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @verbatim formatting_regions.texi(mymacro,46) in verbatim '' formatting_regions.texi(mymacro,46) @end verbatim formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @html formatting_regions.texi(mymacro,46) html '' formatting_regions.texi(mymacro,46) @end html formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @majorheading majorheading formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @chapheading chapheading formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @heading heading formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @subheading subheading formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @subsubheading subsubheading formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @c makeinfo cannot handle that formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @code{@@acronym@{--a,an accronym @@comma@{@} @@enddots@{@}@}} @acronym{--a,an accronym @comma{} @enddots{}} formatting_regions.texi(mymacro,46) @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude--@@comma@{@} @@b@{Autonome@} @}} @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } formatting_regions.texi(mymacro,46) @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @code{@@math@{--a@@minus@{@} @{\frac@{1@}@{2@}@}@}} @math{--a@minus{} {\frac{1}{2}}} formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @code{@@image@{f-ile,,,alt@@verb@{:jk _" %@:@}@}} @image{f-ile,,,alt@verb{:jk _" %@:}} formatting_regions.texi(mymacro,46) @code{@@image@{f--ile,aze,az,@@verb@{:jk _" %@@:@} @@b@{in b "@},e--xt@}} @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} formatting_regions.texi(mymacro,46) @code{@@image@{file@@verb@{:jk _" %@@:@},,,alt@@verb@{:jk _" %@@:@}@}} @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @set invalid formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @c invalid texinfo formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) Somehow invalid use of @@,:@* formatting_regions.texi(mymacro,46) @@, @, formatting_regions.texi(mymacro,46) @* formatting_regions.texi(mymacro,46) @@,@@"u @,@"u formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) Invalid use of @@':@* formatting_regions.texi(mymacro,46) @@' @' formatting_regions.texi(mymacro,46) @* formatting_regions.texi(mymacro,46) @@'@@"u @'@"u formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @c only i or j as arg formatting_regions.texi(mymacro,46) @@dotless@{truc@} @dotless{truc} formatting_regions.texi(mymacro,46) @@dotless@{ij@} @dotless{ij} formatting_regions.texi(mymacro,46) @code{@@dotless@{--a@}} @dotless{--a} formatting_regions.texi(mymacro,46) @code{@@dotless@{a@}} @dotless{a} formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @c braces missing formatting_regions.texi(mymacro,46) @@TeX, but without brace @TeX formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @c unknown command formatting_regions.texi(mymacro,46) @code{@@#} @# formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @c no arg formatting_regions.texi(mymacro,46) @code{@@w@{--a@}} @w{--a} formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @c no file formatting_regions.texi(mymacro,46) @code{@@image@{,1--xt@}} @image{,1--xt} formatting_regions.texi(mymacro,46) @code{@@image@{,,2--xt@}} @image{,,2--xt} formatting_regions.texi(mymacro,46) @code{@@image@{,,,3--xt@}} @image{,,,3--xt} formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @sp formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @c braces missing formatting_regions.texi(mymacro,46) @itemize @emph after emph formatting_regions.texi(mymacro,46) @item e--mph item formatting_regions.texi(mymacro,46) @end itemize formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @c braces missing formatting_regions.texi(mymacro,46) @itemize @bullet a--n itemize line formatting_regions.texi(mymacro,46) @item i--tem 1 formatting_regions.texi(mymacro,46) @item i--tem 2 formatting_regions.texi(mymacro,46) @end itemize formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @c deffnx after deff lines formatting_regions.texi(mymacro,46) @deffn fun formatting_regions.texi(mymacro,46) @deffnx truc machin bidule chose and } formatting_regions.texi(mymacro,46) @deffnx truc machin bidule chose and } after formatting_regions.texi(mymacro,46) @deffnx truc machin bidule chose and { formatting_regions.texi(mymacro,46) @deffnx truc machin bidule chose and { and after formatting_regions.texi(mymacro,46) @deffnx {truc} followed by a comment formatting_regions.texi(mymacro,46) @c comment formatting_regions.texi(mymacro,46) Various deff lines formatting_regions.texi(mymacro,46) @deffnx {truc} after a deff item formatting_regions.texi(mymacro,46) @end deffn formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @c node is non existent, or missing first arg formatting_regions.texi(mymacro,46) @code{@@ref@{node@}} @ref{node} formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @code{@@ref@{,cross ref name@}} @ref{,cross ref name} formatting_regions.texi(mymacro,46) @code{@@ref@{,,title@}} @ref{,,title} formatting_regions.texi(mymacro,46) @code{@@ref@{,,,file name@}} @ref{,,,file name} formatting_regions.texi(mymacro,46) @code{@@ref@{,,,,manual@}} @ref{,,,,manual} formatting_regions.texi(mymacro,46) @code{@@ref@{node,cross ref name@}} @ref{node,cross ref name} formatting_regions.texi(mymacro,46) @code{@@ref@{node,,title@}} @ref{node,,title} formatting_regions.texi(mymacro,46) @code{@@ref@{node,,,file name@}} @ref{node,,,file name} formatting_regions.texi(mymacro,46) @code{@@ref@{node,,,,manual@}} @ref{node,,,,manual} formatting_regions.texi(mymacro,46) @code{@@ref@{node,cross ref name,title,@}} @ref{node,cross ref name,title,} formatting_regions.texi(mymacro,46) @code{@@ref@{node,cross ref name,,file name@}} @ref{node,cross ref name,,file name} formatting_regions.texi(mymacro,46) @code{@@ref@{node,cross ref name,,,manual@}} @ref{node,cross ref name,,,manual} formatting_regions.texi(mymacro,46) @code{@@ref@{node,cross ref name,title,file name@}} @ref{node,cross ref name,title,file name} formatting_regions.texi(mymacro,46) @code{@@ref@{node,cross ref name,title,,manual@}} @ref{node,cross ref name,title,,manual} formatting_regions.texi(mymacro,46) @code{@@ref@{node,cross ref name,title, file name, manual@}} @ref{node,cross ref name,title, file name, manual} formatting_regions.texi(mymacro,46) @code{@@ref@{node,,title,file name@}} @ref{node,,title,file name} formatting_regions.texi(mymacro,46) @code{@@ref@{node,,title,,manual@}} @ref{node,,title,,manual} formatting_regions.texi(mymacro,46) @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} formatting_regions.texi(mymacro,46) @code{@@ref@{node,,title, file name, manual@}} @ref{node,,title, file name, manual} formatting_regions.texi(mymacro,46) @code{@@ref@{node,,,file name,manual@}} @ref{node,,,file name,manual} formatting_regions.texi(mymacro,46) @code{@@ref@{,cross ref name,title,@}} @ref{,cross ref name,title,} formatting_regions.texi(mymacro,46) @code{@@ref@{,cross ref name,,file name@}} @ref{,cross ref name,,file name} formatting_regions.texi(mymacro,46) @code{@@ref@{,cross ref name,,,manual@}} @ref{,cross ref name,,,manual} formatting_regions.texi(mymacro,46) @code{@@ref@{,cross ref name,title,file name@}} @ref{,cross ref name,title,file name} formatting_regions.texi(mymacro,46) @code{@@ref@{,cross ref name,title,,manual@}} @ref{,cross ref name,title,,manual} formatting_regions.texi(mymacro,46) @code{@@ref@{,cross ref name,title, file name, manual@}} @ref{,cross ref name,title, file name, manual} formatting_regions.texi(mymacro,46) @code{@@ref@{,,title,file name@}} @ref{,,title,file name} formatting_regions.texi(mymacro,46) @code{@@ref@{,,title,,manual@}} @ref{,,title,,manual} formatting_regions.texi(mymacro,46) @code{@@ref@{,,title, file name, manual@}} @ref{,,title, file name, manual} formatting_regions.texi(mymacro,46) @code{@@ref@{,,,file name,manual@}} @ref{,,,file name,manual} formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) @code{@@inforef@{,cross ref name @}} @inforef{,cross ref name } formatting_regions.texi(mymacro,46) @code{@@inforef@{,,file name@}} @inforef{,,file name} formatting_regions.texi(mymacro,46) @code{@@inforef@{,cross ref name, file name@}} @inforef{,cross ref name, file name} formatting_regions.texi(mymacro,46) @code{@@inforef@{@}} @inforef{} formatting_regions.texi(mymacro,46) formatting_regions.texi(mymacro,46) formatting_regions.texi(,47) formatting_regions.texi(,48) @example formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) < formatting_regions.texi(mymacro,49) > formatting_regions.texi(mymacro,49) " formatting_regions.texi(mymacro,49) & formatting_regions.texi(mymacro,49) ' formatting_regions.texi(mymacro,49) ` formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) ``simple-double--three---four----''@* formatting_regions.texi(mymacro,49) code: @code{``simple-double--three---four----''} @* formatting_regions.texi(mymacro,49) asis: @asis{``simple-double--three---four----''} @* formatting_regions.texi(mymacro,49) strong: @strong{``simple-double--three---four----''} @* formatting_regions.texi(mymacro,49) kbd: @kbd{``simple-double--three---four----''} @* formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) `@w{}`simple-double-@w{}-three---four----'@w{}'@* formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @cindex --option formatting_regions.texi(mymacro,49) @cindex `` formatting_regions.texi(mymacro,49) @findex `` formatting_regions.texi(mymacro,49) @findex --foption formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @@"u @"u formatting_regions.texi(mymacro,49) @@"@{U@} @"{U} formatting_regions.texi(mymacro,49) @@~n @~n formatting_regions.texi(mymacro,49) @@^a @^a formatting_regions.texi(mymacro,49) @@'e @'e formatting_regions.texi(mymacro,49) @@=o @=o formatting_regions.texi(mymacro,49) @@`i @`i formatting_regions.texi(mymacro,49) @@'@{e@} @'{e} formatting_regions.texi(mymacro,49) @@'@{@@dotless@{i@}@} @'{@dotless{i}} formatting_regions.texi(mymacro,49) @@dotless@{i@} @dotless{i} formatting_regions.texi(mymacro,49) @@dotless@{j@} @dotless{j} formatting_regions.texi(mymacro,49) @@`@{@@=E@} @`{@=E} formatting_regions.texi(mymacro,49) @@l@{@} @l{} formatting_regions.texi(mymacro,49) @@,@{@@'C@} @,{@'C} formatting_regions.texi(mymacro,49) @@,c @,c formatting_regions.texi(mymacro,49) @@,c@@"u @,c@"u @* formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @@* @* formatting_regions.texi(mymacro,49) @@ followed by a space formatting_regions.texi(mymacro,49) @ formatting_regions.texi(mymacro,49) @@ followed by a tab formatting_regions.texi(mymacro,49) @ formatting_regions.texi(mymacro,49) @@ followed by a new line formatting_regions.texi(mymacro,49) @ formatting_regions.texi(mymacro,49) @code{@@-} @- formatting_regions.texi(mymacro,49) @code{@@|} @| formatting_regions.texi(mymacro,49) @code{@@:} @: formatting_regions.texi(mymacro,49) @code{@@!} @! formatting_regions.texi(mymacro,49) @code{@@?} @? formatting_regions.texi(mymacro,49) @code{@@.} @. formatting_regions.texi(mymacro,49) @code{@@@@} @@ formatting_regions.texi(mymacro,49) @code{@@@}} @} formatting_regions.texi(mymacro,49) @code{@@@{} @{ formatting_regions.texi(mymacro,49) @code{@@/} @/ formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) foo vs.@: bar. formatting_regions.texi(mymacro,49) colon :@:And something else. formatting_regions.texi(mymacro,49) semi colon ;@:. formatting_regions.texi(mymacro,49) And ? ?@:. formatting_regions.texi(mymacro,49) Now ! !@:@@ formatting_regions.texi(mymacro,49) but , ,@: formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @@TeX @TeX{} formatting_regions.texi(mymacro,49) @@LaTeX @LaTeX{} formatting_regions.texi(mymacro,49) @@bullet @bullet{} formatting_regions.texi(mymacro,49) @@copyright @copyright{} formatting_regions.texi(mymacro,49) @@dots @dots{} formatting_regions.texi(mymacro,49) @@enddots @enddots{} formatting_regions.texi(mymacro,49) @@equiv @equiv{} formatting_regions.texi(mymacro,49) @@error @error{} formatting_regions.texi(mymacro,49) @@expansion @expansion{} formatting_regions.texi(mymacro,49) @@minus @minus{} formatting_regions.texi(mymacro,49) @@point @point{} formatting_regions.texi(mymacro,49) @@print @print{} formatting_regions.texi(mymacro,49) @@result @result{} formatting_regions.texi(mymacro,49) @@today @today{} formatting_regions.texi(mymacro,49) @@aa @aa{} formatting_regions.texi(mymacro,49) @@AA @AA{} formatting_regions.texi(mymacro,49) @@ae @ae{} formatting_regions.texi(mymacro,49) @@oe @oe{} formatting_regions.texi(mymacro,49) @@AE @AE{} formatting_regions.texi(mymacro,49) @@OE @OE{} formatting_regions.texi(mymacro,49) @@o @o{} formatting_regions.texi(mymacro,49) @@O @O{} formatting_regions.texi(mymacro,49) @@ss @ss{} formatting_regions.texi(mymacro,49) @@l @l{} formatting_regions.texi(mymacro,49) @@L @L{} formatting_regions.texi(mymacro,49) @@exclamdown @exclamdown{} formatting_regions.texi(mymacro,49) @@questiondown @questiondown{} formatting_regions.texi(mymacro,49) @@pounds @pounds{} formatting_regions.texi(mymacro,49) @@registeredsymbol @registeredsymbol{} formatting_regions.texi(mymacro,49) @@ordf @ordf{} formatting_regions.texi(mymacro,49) @@ordm @ordm{} formatting_regions.texi(mymacro,49) @@comma @comma{} formatting_regions.texi(mymacro,49) @@quotedblleft @quotedblleft{} formatting_regions.texi(mymacro,49) @@quotedblright @quotedblright{} formatting_regions.texi(mymacro,49) @@quoteleft @quoteleft{} formatting_regions.texi(mymacro,49) @@quoteright @quoteright{} formatting_regions.texi(mymacro,49) @@quotedblbase @quotedblbase{} formatting_regions.texi(mymacro,49) @@quotesinglbase @quotesinglbase{} formatting_regions.texi(mymacro,49) @@guillemetleft @guillemetleft{} formatting_regions.texi(mymacro,49) @@guillemetright @guillemetright{} formatting_regions.texi(mymacro,49) @@guillemotleft @guillemotleft{} formatting_regions.texi(mymacro,49) @@guillemotright @guillemotright{} formatting_regions.texi(mymacro,49) @@guilsinglleft @guilsinglleft{} formatting_regions.texi(mymacro,49) @@guilsinglright @guilsinglright{} formatting_regions.texi(mymacro,49) @@textdegree @textdegree{} formatting_regions.texi(mymacro,49) @@euro @euro{} formatting_regions.texi(mymacro,49) @@arrow @arrow{} formatting_regions.texi(mymacro,49) @@leq @leq{} formatting_regions.texi(mymacro,49) @@geq @geq{} formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @code{@@acronym@{--a,an accronym@}} @acronym{--a,an accronym} formatting_regions.texi(mymacro,49) @code{@@acronym@{--a@}} @acronym{--a} formatting_regions.texi(mymacro,49) @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude Autonome @}} @abbr{@'E--. @comma{}A., @'Etude Autonome } formatting_regions.texi(mymacro,49) @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} formatting_regions.texi(mymacro,49) @code{@@asis@{--a@}} @asis{--a} formatting_regions.texi(mymacro,49) @code{@@b@{--a@}} @b{--a} formatting_regions.texi(mymacro,49) @code{@@cite@{--a@}} @cite{--a} formatting_regions.texi(mymacro,49) @code{@@code@{--a@}} @code{--a} formatting_regions.texi(mymacro,49) @code{@@command@{--a@}} @command{--a} formatting_regions.texi(mymacro,49) @code{@@ctrl@{--a@}} @ctrl{--a} formatting_regions.texi(mymacro,49) @code{@@dfn@{--a@}} @dfn{--a} formatting_regions.texi(mymacro,49) @code{@@dmn@{--a@}} @dmn{--a} formatting_regions.texi(mymacro,49) @code{@@email@{--a,--b@}} @email{--a,--b} formatting_regions.texi(mymacro,49) @code{@@email@{,--b@}} @email{,--b} formatting_regions.texi(mymacro,49) @code{@@email@{--a@}} @email{--a} formatting_regions.texi(mymacro,49) @code{@@emph@{--a@}} @emph{--a} formatting_regions.texi(mymacro,49) @code{@@env@{--a@}} @env{--a} formatting_regions.texi(mymacro,49) @code{@@file@{--a@}} @file{--a} formatting_regions.texi(mymacro,49) @code{@@i@{--a@}} @i{--a} formatting_regions.texi(mymacro,49) @code{@@kbd@{--a@}} @kbd{--a} formatting_regions.texi(mymacro,49) @code{@@key@{--a@}} @key{--a} formatting_regions.texi(mymacro,49) @code{@@math@{--a @{\frac@{1@}@{2@}@} @@minus@{@}@}} @math{--a {\frac{1}{2}} @minus{}} formatting_regions.texi(mymacro,49) @code{@@option@{--a@}} @option{--a} formatting_regions.texi(mymacro,49) @code{@@r@{--a@}} @r{--a} formatting_regions.texi(mymacro,49) @code{@@samp@{--a@}} @samp{--a} formatting_regions.texi(mymacro,49) @code{@@sc@{--a@}} @sc{--a} formatting_regions.texi(mymacro,49) @code{@@strong@{--a@}} @strong{--a} formatting_regions.texi(mymacro,49) @code{@@t@{--a@}} @t{--a} formatting_regions.texi(mymacro,49) @code{@@sansserif@{--a@}} @sansserif{--a} formatting_regions.texi(mymacro,49) @code{@@titlefont@{--a@}} @titlefont{--a} formatting_regions.texi(mymacro,49) @code{@@indicateurl@{--a@}} @indicateurl{--a} formatting_regions.texi(mymacro,49) @code{@@uref@{--a,--b@}} @uref{--a,--b} formatting_regions.texi(mymacro,49) @code{@@uref@{--a@}} @uref{--a} formatting_regions.texi(mymacro,49) @code{@@uref@{,--b@}} @uref{,--b} formatting_regions.texi(mymacro,49) @code{@@uref@{--a,--b,--c@}} @uref{--a,--b,--c} formatting_regions.texi(mymacro,49) @code{@@uref@{,--b,--c@}} @uref{,--b,--c} formatting_regions.texi(mymacro,49) @code{@@uref@{--a,,--c@}} @uref{--a,,--c} formatting_regions.texi(mymacro,49) @code{@@uref@{,,--c@}} @uref{,,--c} formatting_regions.texi(mymacro,49) @code{@@url@{--a,--b@}} @url{--a,--b} formatting_regions.texi(mymacro,49) @code{@@url@{--a,@}} @url{--a,} formatting_regions.texi(mymacro,49) @code{@@url@{,--b@}} @url{,--b} formatting_regions.texi(mymacro,49) @code{@@var@{--a@}} @var{--a} formatting_regions.texi(mymacro,49) @code{@@verb@{:--a:@}} @verb{:--a:} formatting_regions.texi(mymacro,49) @code{@@verb@{:a < & @@ % " -- b:@}} @verb{:a < & @ % " -- b:} formatting_regions.texi(mymacro,49) @code{@@w@{@}} @w{} formatting_regions.texi(mymacro,49) @code{@@H@{a@}} @H{a} formatting_regions.texi(mymacro,49) @code{@@H@{--a@}} @H{--a} formatting_regions.texi(mymacro,49) @code{@@dotaccent@{a@}} @dotaccent{a} formatting_regions.texi(mymacro,49) @code{@@dotaccent@{--a@}} @dotaccent{--a} formatting_regions.texi(mymacro,49) @code{@@ringaccent@{a@}} @ringaccent{a} formatting_regions.texi(mymacro,49) @code{@@ringaccent@{--a@}} @ringaccent{--a} formatting_regions.texi(mymacro,49) @code{@@tieaccent@{a@}} @tieaccent{a} formatting_regions.texi(mymacro,49) @code{@@tieaccent@{--a@}} @tieaccent{--a} formatting_regions.texi(mymacro,49) @code{@@u@{a@}} @u{a} formatting_regions.texi(mymacro,49) @code{@@u@{--a@}} @u{--a} formatting_regions.texi(mymacro,49) @code{@@ubaraccent@{a@}} @ubaraccent{a} formatting_regions.texi(mymacro,49) @code{@@ubaraccent@{--a@}} @ubaraccent{--a} formatting_regions.texi(mymacro,49) @code{@@udotaccent@{a@}} @udotaccent{a} formatting_regions.texi(mymacro,49) @code{@@udotaccent@{--a@}} @udotaccent{--a} formatting_regions.texi(mymacro,49) @code{@@v@{a@}} @v{a} formatting_regions.texi(mymacro,49) @code{@@v@{--a@}} @v{--a} formatting_regions.texi(mymacro,49) @code{@@,@{c@}} @,{c} formatting_regions.texi(mymacro,49) @code{@@,@{--c@}} @,{--c} formatting_regions.texi(mymacro,49) @code{@@ogonek@{a@}} @ogonek{a} formatting_regions.texi(mymacro,49) @code{@@ogonek@{--a@}} @ogonek{--a} formatting_regions.texi(mymacro,49) @code{@@footnote@{in footnote@}} @footnote{in footnote} formatting_regions.texi(mymacro,49) @code{@@footnote@{in footnote2@}} @footnote{in footnote2} formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @code{@@image@{f--ile@}} @image{f--ile} formatting_regions.texi(mymacro,49) @code{@@image@{f--ile,l--i@}} @image{f--ile,l--i} formatting_regions.texi(mymacro,49) @code{@@image@{f--ile,,l--e@}} @image{f--ile,,l--e} formatting_regions.texi(mymacro,49) @code{@@image@{f--ile,,,alt@}} @image{f--ile,,,alt} formatting_regions.texi(mymacro,49) @code{@@image@{f--ile,,,,e-d-xt@}} @image{f--ile,,,,e--xt} formatting_regions.texi(mymacro,49) @code{@@image@{f--ile,aze,az,alt,e--xt@}} @image{f--ile,aze,az,alt,e--xt} formatting_regions.texi(mymacro,49) @code{@@image@{f-ile,aze,,a--lt@}} @image{f-ile,aze,,a--lt} formatting_regions.texi(mymacro,49) @code{@@image@{@@file@{f--ile@}@@@@@@.,aze,az,alt,@@file@{file ext@} e--xt@@@}} @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@}} formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @sp 2 formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} formatting_regions.texi(mymacro,49) @clickstyle @result formatting_regions.texi(mymacro,49) After clickstyle @result{} formatting_regions.texi(mymacro,49) @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} formatting_regions.texi(mymacro,49) @clickstyle @arrow formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @quotation formatting_regions.texi(mymacro,49) A quot---ation formatting_regions.texi(mymacro,49) @end quotation formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @quotation Note formatting_regions.texi(mymacro,49) A Note formatting_regions.texi(mymacro,49) @end quotation formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @quotation note formatting_regions.texi(mymacro,49) A note formatting_regions.texi(mymacro,49) @end quotation formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @quotation Caution formatting_regions.texi(mymacro,49) Caution formatting_regions.texi(mymacro,49) @end quotation formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @quotation Important formatting_regions.texi(mymacro,49) Important formatting_regions.texi(mymacro,49) @end quotation formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @quotation Tip formatting_regions.texi(mymacro,49) a Tip formatting_regions.texi(mymacro,49) @end quotation formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @quotation Warning formatting_regions.texi(mymacro,49) a Warning. formatting_regions.texi(mymacro,49) @end quotation formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @quotation something @'e @TeX{} formatting_regions.texi(mymacro,49) The something @'e @TeX{} is here. formatting_regions.texi(mymacro,49) @end quotation formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @quotation @@ at the end of line @ formatting_regions.texi(mymacro,49) A @@ at the end of the @@quotation line. formatting_regions.texi(mymacro,49) @end quotation formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @quotation something, other thing formatting_regions.texi(mymacro,49) something, other thing formatting_regions.texi(mymacro,49) @end quotation formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @quotation Note, the note formatting_regions.texi(mymacro,49) Note, the note formatting_regions.texi(mymacro,49) @end quotation formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @quotation formatting_regions.texi(mymacro,49) @end quotation formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @quotation Empty formatting_regions.texi(mymacro,49) @end quotation formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @quotation @asis{} formatting_regions.texi(mymacro,49) @end quotation formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @quotation @* formatting_regions.texi(mymacro,49) @end quotation formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @smallquotation formatting_regions.texi(mymacro,49) A small quot---ation formatting_regions.texi(mymacro,49) @end smallquotation formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @smallquotation Note formatting_regions.texi(mymacro,49) A small Note formatting_regions.texi(mymacro,49) @end smallquotation formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @smallquotation something, other thing formatting_regions.texi(mymacro,49) something, other thing formatting_regions.texi(mymacro,49) @end smallquotation formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @itemize formatting_regions.texi(mymacro,49) @item i--temize formatting_regions.texi(mymacro,49) @end itemize formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @itemize + formatting_regions.texi(mymacro,49) @item i--tem + formatting_regions.texi(mymacro,49) @end itemize formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @itemize @bullet formatting_regions.texi(mymacro,49) @item b--ullet formatting_regions.texi(mymacro,49) @end itemize formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @itemize @minus formatting_regions.texi(mymacro,49) @item minu--s formatting_regions.texi(mymacro,49) @end itemize formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @itemize @emph formatting_regions.texi(mymacro,49) @item e--mph item formatting_regions.texi(mymacro,49) @end itemize formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @itemize @emph{after emph} formatting_regions.texi(mymacro,49) @c comment in itemize formatting_regions.texi(mymacro,49) @item e--mph item formatting_regions.texi(mymacro,49) @end itemize formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @itemize @bullet{} a--n itemize line formatting_regions.texi(mymacro,49) @cindex index entry within itemize formatting_regions.texi(mymacro,49) @item i--tem 1 formatting_regions.texi(mymacro,49) @item i--tem 2 formatting_regions.texi(mymacro,49) @end itemize formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @enumerate formatting_regions.texi(mymacro,49) @item e--numerate formatting_regions.texi(mymacro,49) @end enumerate formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @multitable @columnfractions 6 7 formatting_regions.texi(mymacro,49) @headitem mu--ltitable headitem @tab another tab formatting_regions.texi(mymacro,49) @item mu--ltitable item @tab multitable tab formatting_regions.texi(mymacro,49) @c comment in multitable formatting_regions.texi(mymacro,49) @item mu--ltitable item 2 @tab multitable tab 2 formatting_regions.texi(mymacro,49) @cindex index entry within multitable formatting_regions.texi(mymacro,49) @item lone mu--ltitable item formatting_regions.texi(mymacro,49) @end multitable formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @multitable {truc} {bidule} formatting_regions.texi(mymacro,49) @item truc @tab bidule formatting_regions.texi(mymacro,49) @end multitable formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @example formatting_regions.texi(mymacro,49) e--xample some formatting_regions.texi(mymacro,49) text formatting_regions.texi(mymacro,49) @end example formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @smallexample formatting_regions.texi(mymacro,49) s--mallexample formatting_regions.texi(mymacro,49) @end smallexample formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @display formatting_regions.texi(mymacro,49) d--isplay formatting_regions.texi(mymacro,49) @end display formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @smalldisplay formatting_regions.texi(mymacro,49) s--malldisplay formatting_regions.texi(mymacro,49) @end smalldisplay formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @lisp formatting_regions.texi(mymacro,49) l--isp formatting_regions.texi(mymacro,49) @end lisp formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @smalllisp formatting_regions.texi(mymacro,49) s--malllisp formatting_regions.texi(mymacro,49) @end smalllisp formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @format formatting_regions.texi(mymacro,49) f--ormat formatting_regions.texi(mymacro,49) @end format formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @smallformat formatting_regions.texi(mymacro,49) s--mallformat formatting_regions.texi(mymacro,49) @end smallformat formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @deffn c--ategory d--effn_name a--rguments... formatting_regions.texi(mymacro,49) d--effn formatting_regions.texi(mymacro,49) @end deffn formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @deffn cate--gory de--ffn_name ar--guments more args @* even more so formatting_regions.texi(mymacro,49) def--fn formatting_regions.texi(mymacro,49) @end deffn formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @deffn fset @var{i} a g formatting_regions.texi(mymacro,49) @cindex index entry within deffn formatting_regions.texi(mymacro,49) @deffnx {cmde} truc {} formatting_regions.texi(mymacro,49) @deffnx Command {log trap} {} formatting_regions.texi(mymacro,49) @deffnx Command { log trap1} {} formatting_regions.texi(mymacro,49) @deffnx Command {log trap2 } {} formatting_regions.texi(mymacro,49) @deffnx cmde @b{id ule} truc formatting_regions.texi(mymacro,49) @deffnx cmde2 @b{id @samp{i} ule} truc formatting_regions.texi(mymacro,49) @deffnx @b{id @samp{i} ule} formatting_regions.texi(mymacro,49) @deffnx formatting_regions.texi(mymacro,49) @deffnx aaa formatting_regions.texi(mymacro,49) @deffnx {} {} formatting_regions.texi(mymacro,49) @deffnx{} formatting_regions.texi(mymacro,49) @deffnx{} machin formatting_regions.texi(mymacro,49) @deffnx{} {bidule machin} formatting_regions.texi(mymacro,49) @deffnx{truc} machin formatting_regions.texi(mymacro,49) @deffnx{truc} { } formatting_regions.texi(mymacro,49) @deffnx{truc} followed by a comment formatting_regions.texi(mymacro,49) @c comment formatting_regions.texi(mymacro,49) @deffnx{truc} formatting_regions.texi(mymacro,49) @deffnx{} {} formatting_regions.texi(mymacro,49) @deffnx {truc} a b c d e @b{f g} {h i} formatting_regions.texi(mymacro,49) @deffnx {truc} deffnx before end deffn formatting_regions.texi(mymacro,49) @end deffn formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @deffn empty deffn formatting_regions.texi(mymacro,49) @end deffn formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @deffn empty deffn with deffnx formatting_regions.texi(mymacro,49) @c comment between deffn and deffnx formatting_regions.texi(mymacro,49) @deffnx empty deffnx formatting_regions.texi(mymacro,49) @end deffn formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @deffn fset @var{i} a g formatting_regions.texi(mymacro,49) @deffnx {cmde} truc {} formatting_regions.texi(mymacro,49) @c comment formatting_regions.texi(mymacro,49) text in def item for second def item formatting_regions.texi(mymacro,49) @end deffn formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @defvr c--ategory d--efvr_name formatting_regions.texi(mymacro,49) d--efvr formatting_regions.texi(mymacro,49) @end defvr formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... formatting_regions.texi(mymacro,49) d--eftypefn formatting_regions.texi(mymacro,49) @end deftypefn formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... formatting_regions.texi(mymacro,49) d--eftypeop formatting_regions.texi(mymacro,49) @end deftypeop formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @deftypevr c--ategory t--ype d--eftypevr_name formatting_regions.texi(mymacro,49) d--eftypevr formatting_regions.texi(mymacro,49) @end deftypevr formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @defcv c--ategory c--lass d--efcv_name formatting_regions.texi(mymacro,49) d--efcv formatting_regions.texi(mymacro,49) @end defcv formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @defop c--ategory c--lass d--efop_name a--rguments... formatting_regions.texi(mymacro,49) d--efop formatting_regions.texi(mymacro,49) @end defop formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @deftp c--ategory d--eftp_name a--ttributes... formatting_regions.texi(mymacro,49) d--eftp formatting_regions.texi(mymacro,49) @end deftp formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @defun d--efun_name a--rguments... formatting_regions.texi(mymacro,49) d--efun formatting_regions.texi(mymacro,49) @end defun formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @defmac d--efmac_name a--rguments... formatting_regions.texi(mymacro,49) d--efmac formatting_regions.texi(mymacro,49) @end defmac formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @defspec d--efspec_name a--rguments... formatting_regions.texi(mymacro,49) d--efspec formatting_regions.texi(mymacro,49) @end defspec formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @defvar d--efvar_name argvar argvar1 formatting_regions.texi(mymacro,49) d--efvar formatting_regions.texi(mymacro,49) @end defvar formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @defopt d--efopt_name formatting_regions.texi(mymacro,49) d--efopt formatting_regions.texi(mymacro,49) @end defopt formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @deftypefun t--ype d--eftypefun_name a--rguments... formatting_regions.texi(mymacro,49) d--eftypefun formatting_regions.texi(mymacro,49) @end deftypefun formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @deftypevar t--ype d--eftypevar_name formatting_regions.texi(mymacro,49) d--eftypevar formatting_regions.texi(mymacro,49) @end deftypevar formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @defivar c--lass d--efivar_name formatting_regions.texi(mymacro,49) d--efivar formatting_regions.texi(mymacro,49) @end defivar formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @deftypeivar c--lass t--ype d--eftypeivar_name formatting_regions.texi(mymacro,49) d--eftypeivar formatting_regions.texi(mymacro,49) @end deftypeivar formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @defmethod c--lass d--efmethod_name a--rguments... formatting_regions.texi(mymacro,49) d--efmethod formatting_regions.texi(mymacro,49) @end defmethod formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... formatting_regions.texi(mymacro,49) d--eftypemethod formatting_regions.texi(mymacro,49) @end deftypemethod formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @code{@@xref@{c---hapter@@@@, cross r---ef name@@@@, t---itle@@@@, file n---ame@@@@, ma---nual@@@@@}} @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@}. formatting_regions.texi(mymacro,49) @code{@@ref@{chapter, cross ref name, title, file name, manual@}} @ref{chapter, cross ref name, title, file name, manual} formatting_regions.texi(mymacro,49) @code{@@pxref@{chapter, cross ref name, title, file name, manual@}} @pxref{chapter, cross ref name, title, file name, manual} formatting_regions.texi(mymacro,49) @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @code{@@ref@{chapter@}} @ref{chapter} formatting_regions.texi(mymacro,49) @code{@@xref@{chapter@}} @xref{chapter}. formatting_regions.texi(mymacro,49) @code{@@pxref@{chapter@}} @pxref{chapter} formatting_regions.texi(mymacro,49) @code{@@ref@{s--ect@@comma@{@}ion@}} @ref{s--ect@comma{}ion} formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @code{@@ref@{s--ect@@comma@{@}ion, a @@comma@{@} in cross formatting_regions.texi(mymacro,49) ref, a comma@@comma@{@} in title, a comma@@comma@{@} in file, a @@comma@{@} in manual name @}} formatting_regions.texi(mymacro,49) @ref{s--ect@comma{}ion, a @comma{} in cross formatting_regions.texi(mymacro,49) ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @code{@@ref@{chapter,cross ref name@}} @ref{chapter,cross ref name} formatting_regions.texi(mymacro,49) @code{@@ref@{chapter,,title@}} @ref{chapter,,title} formatting_regions.texi(mymacro,49) @code{@@ref@{chapter,,,file name@}} @ref{chapter,,,file name} formatting_regions.texi(mymacro,49) @code{@@ref@{chapter,,,,manual@}} @ref{chapter,,,,manual} formatting_regions.texi(mymacro,49) @code{@@ref@{chapter,cross ref name,title,@}} @ref{chapter,cross ref name,title,} formatting_regions.texi(mymacro,49) @code{@@ref@{chapter,cross ref name,,file name@}} @ref{chapter,cross ref name,,file name} formatting_regions.texi(mymacro,49) @code{@@ref@{chapter,cross ref name,,,manual@}} @ref{chapter,cross ref name,,,manual} formatting_regions.texi(mymacro,49) @code{@@ref@{chapter,cross ref name,title,file name@}} @ref{chapter,cross ref name,title,file name} formatting_regions.texi(mymacro,49) @code{@@ref@{chapter,cross ref name,title,,manual@}} @ref{chapter,cross ref name,title,,manual} formatting_regions.texi(mymacro,49) @code{@@ref@{chapter,cross ref name,title, file name, manual@}} @ref{chapter,cross ref name,title, file name, manual} formatting_regions.texi(mymacro,49) @code{@@ref@{chapter,,title,file name@}} @ref{chapter,,title,file name} formatting_regions.texi(mymacro,49) @code{@@ref@{chapter,,title,,manual@}} @ref{chapter,,title,,manual} formatting_regions.texi(mymacro,49) @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} formatting_regions.texi(mymacro,49) @code{@@ref@{chapter,,,file name,manual@}} @ref{chapter,,,file name,manual} formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @code{@@ref@{(pman)anode,cross ref name@}} @ref{(pman)anode,cross ref name} formatting_regions.texi(mymacro,49) @code{@@ref@{(pman)anode,,title@}} @ref{(pman)anode,,title} formatting_regions.texi(mymacro,49) @code{@@ref@{(pman)anode,,,file name@}} @ref{(pman)anode,,,file name} formatting_regions.texi(mymacro,49) @code{@@ref@{(pman)anode,,,,manual@}} @ref{(pman)anode,,,,manual} formatting_regions.texi(mymacro,49) @code{@@ref@{(pman)anode,cross ref name,title,@}} @ref{(pman)anode,cross ref name,title,} formatting_regions.texi(mymacro,49) @code{@@ref@{(pman)anode,cross ref name,,file name@}} @ref{(pman)anode,cross ref name,,file name} formatting_regions.texi(mymacro,49) @code{@@ref@{(pman)anode,cross ref name,,,manual@}} @ref{(pman)anode,cross ref name,,,manual} formatting_regions.texi(mymacro,49) @code{@@ref@{(pman)anode,cross ref name,title,file name@}} @ref{(pman)anode,cross ref name,title,file name} formatting_regions.texi(mymacro,49) @code{@@ref@{(pman)anode,cross ref name,title,,manual@}} @ref{(pman)anode,cross ref name,title,,manual} formatting_regions.texi(mymacro,49) @code{@@ref@{(pman)anode,cross ref name,title, file name, manual@}} @ref{(pman)anode,cross ref name,title, file name, manual} formatting_regions.texi(mymacro,49) @code{@@ref@{(pman)anode,,title,file name@}} @ref{(pman)anode,,title,file name} formatting_regions.texi(mymacro,49) @code{@@ref@{(pman)anode,,title,,manual@}} @ref{(pman)anode,,title,,manual} formatting_regions.texi(mymacro,49) @code{@@ref@{(pman)anode,,title, file name, manual@}} @ref{(pman)anode,,title, file name, manual} formatting_regions.texi(mymacro,49) @code{@@ref@{(pman)anode,,,file name,manual@}} @ref{(pman)anode,,,file name,manual} formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} formatting_regions.texi(mymacro,49) @code{@@inforef@{chapter@}} @inforef{chapter} formatting_regions.texi(mymacro,49) @code{@@inforef@{chapter, cross ref name@}} @inforef{chapter, cross ref name} formatting_regions.texi(mymacro,49) @code{@@inforef@{chapter,,file name@}} @inforef{chapter,,file name} formatting_regions.texi(mymacro,49) @code{@@inforef@{node, cross ref name, file name@}} @inforef{node, cross ref name, file name} formatting_regions.texi(mymacro,49) @code{@@inforef@{node@}} @inforef{node} formatting_regions.texi(mymacro,49) @code{@@inforef@{node, cross ref name@}} @inforef{node, cross ref name} formatting_regions.texi(mymacro,49) @code{@@inforef@{node,,file name@}} @inforef{node,,file name} formatting_regions.texi(mymacro,49) @code{@@inforef@{chapter, cross ref name, file name, spurious arg@}} @inforef{chapter, cross ref name, file name, spurious arg} formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @code{@@inforef@{s--ect@@comma@{@}ion, a @@comma@{@} in cross formatting_regions.texi(mymacro,49) ref, a comma@@comma@{@} in file@}} formatting_regions.texi(mymacro,49) @inforef{s--ect@comma{}ion, a @comma{} in cross formatting_regions.texi(mymacro,49) ref, a comma@comma{} in file} formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @table @bullet formatting_regions.texi(mymacro,49) @c comment in table formatting_regions.texi(mymacro,49) @item a formatting_regions.texi(mymacro,49) l--ine formatting_regions.texi(mymacro,49) @end table formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @vtable @asis formatting_regions.texi(mymacro,49) @item a formatting_regions.texi(mymacro,49) @c comment between item and itemx formatting_regions.texi(mymacro,49) @itemx b formatting_regions.texi(mymacro,49) l--ine formatting_regions.texi(mymacro,49) @end vtable formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @ftable @minus formatting_regions.texi(mymacro,49) @item a formatting_regions.texi(mymacro,49) @cindex index entry between item and itemx formatting_regions.texi(mymacro,49) @itemx b formatting_regions.texi(mymacro,49) l--ine formatting_regions.texi(mymacro,49) @end ftable formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @cartouche formatting_regions.texi(mymacro,49) c--artouche formatting_regions.texi(mymacro,49) @end cartouche formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @flushleft formatting_regions.texi(mymacro,49) f--lushleft formatting_regions.texi(mymacro,49) @end flushleft formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @flushright formatting_regions.texi(mymacro,49) f--lushright formatting_regions.texi(mymacro,49) @end flushright formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @center ce--ntered line formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @verbatiminclude simplest.texi formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @verbatim formatting_regions.texi(mymacro,49) in verbatim '' formatting_regions.texi(mymacro,49) @end verbatim formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @html formatting_regions.texi(mymacro,49) html '' formatting_regions.texi(mymacro,49) @end html formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @majorheading majorheading formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @chapheading chapheading formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @heading heading formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @subheading subheading formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @subsubheading subsubheading formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @c makeinfo cannot handle that formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @code{@@acronym@{--a,an accronym @@comma@{@} @@enddots@{@}@}} @acronym{--a,an accronym @comma{} @enddots{}} formatting_regions.texi(mymacro,49) @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude--@@comma@{@} @@b@{Autonome@} @}} @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } formatting_regions.texi(mymacro,49) @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @code{@@math@{--a@@minus@{@} @{\frac@{1@}@{2@}@}@}} @math{--a@minus{} {\frac{1}{2}}} formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @code{@@image@{f-ile,,,alt@@verb@{:jk _" %@:@}@}} @image{f-ile,,,alt@verb{:jk _" %@:}} formatting_regions.texi(mymacro,49) @code{@@image@{f--ile,aze,az,@@verb@{:jk _" %@@:@} @@b@{in b "@},e--xt@}} @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} formatting_regions.texi(mymacro,49) @code{@@image@{file@@verb@{:jk _" %@@:@},,,alt@@verb@{:jk _" %@@:@}@}} @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @set invalid formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @c invalid texinfo formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) Somehow invalid use of @@,:@* formatting_regions.texi(mymacro,49) @@, @, formatting_regions.texi(mymacro,49) @* formatting_regions.texi(mymacro,49) @@,@@"u @,@"u formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) Invalid use of @@':@* formatting_regions.texi(mymacro,49) @@' @' formatting_regions.texi(mymacro,49) @* formatting_regions.texi(mymacro,49) @@'@@"u @'@"u formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @c only i or j as arg formatting_regions.texi(mymacro,49) @@dotless@{truc@} @dotless{truc} formatting_regions.texi(mymacro,49) @@dotless@{ij@} @dotless{ij} formatting_regions.texi(mymacro,49) @code{@@dotless@{--a@}} @dotless{--a} formatting_regions.texi(mymacro,49) @code{@@dotless@{a@}} @dotless{a} formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @c braces missing formatting_regions.texi(mymacro,49) @@TeX, but without brace @TeX formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @c unknown command formatting_regions.texi(mymacro,49) @code{@@#} @# formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @c no arg formatting_regions.texi(mymacro,49) @code{@@w@{--a@}} @w{--a} formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @c no file formatting_regions.texi(mymacro,49) @code{@@image@{,1--xt@}} @image{,1--xt} formatting_regions.texi(mymacro,49) @code{@@image@{,,2--xt@}} @image{,,2--xt} formatting_regions.texi(mymacro,49) @code{@@image@{,,,3--xt@}} @image{,,,3--xt} formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @sp formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @c braces missing formatting_regions.texi(mymacro,49) @itemize @emph after emph formatting_regions.texi(mymacro,49) @item e--mph item formatting_regions.texi(mymacro,49) @end itemize formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @c braces missing formatting_regions.texi(mymacro,49) @itemize @bullet a--n itemize line formatting_regions.texi(mymacro,49) @item i--tem 1 formatting_regions.texi(mymacro,49) @item i--tem 2 formatting_regions.texi(mymacro,49) @end itemize formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @c deffnx after deff lines formatting_regions.texi(mymacro,49) @deffn fun formatting_regions.texi(mymacro,49) @deffnx truc machin bidule chose and } formatting_regions.texi(mymacro,49) @deffnx truc machin bidule chose and } after formatting_regions.texi(mymacro,49) @deffnx truc machin bidule chose and { formatting_regions.texi(mymacro,49) @deffnx truc machin bidule chose and { and after formatting_regions.texi(mymacro,49) @deffnx {truc} followed by a comment formatting_regions.texi(mymacro,49) @c comment formatting_regions.texi(mymacro,49) Various deff lines formatting_regions.texi(mymacro,49) @deffnx {truc} after a deff item formatting_regions.texi(mymacro,49) @end deffn formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @c node is non existent, or missing first arg formatting_regions.texi(mymacro,49) @code{@@ref@{node@}} @ref{node} formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @code{@@ref@{,cross ref name@}} @ref{,cross ref name} formatting_regions.texi(mymacro,49) @code{@@ref@{,,title@}} @ref{,,title} formatting_regions.texi(mymacro,49) @code{@@ref@{,,,file name@}} @ref{,,,file name} formatting_regions.texi(mymacro,49) @code{@@ref@{,,,,manual@}} @ref{,,,,manual} formatting_regions.texi(mymacro,49) @code{@@ref@{node,cross ref name@}} @ref{node,cross ref name} formatting_regions.texi(mymacro,49) @code{@@ref@{node,,title@}} @ref{node,,title} formatting_regions.texi(mymacro,49) @code{@@ref@{node,,,file name@}} @ref{node,,,file name} formatting_regions.texi(mymacro,49) @code{@@ref@{node,,,,manual@}} @ref{node,,,,manual} formatting_regions.texi(mymacro,49) @code{@@ref@{node,cross ref name,title,@}} @ref{node,cross ref name,title,} formatting_regions.texi(mymacro,49) @code{@@ref@{node,cross ref name,,file name@}} @ref{node,cross ref name,,file name} formatting_regions.texi(mymacro,49) @code{@@ref@{node,cross ref name,,,manual@}} @ref{node,cross ref name,,,manual} formatting_regions.texi(mymacro,49) @code{@@ref@{node,cross ref name,title,file name@}} @ref{node,cross ref name,title,file name} formatting_regions.texi(mymacro,49) @code{@@ref@{node,cross ref name,title,,manual@}} @ref{node,cross ref name,title,,manual} formatting_regions.texi(mymacro,49) @code{@@ref@{node,cross ref name,title, file name, manual@}} @ref{node,cross ref name,title, file name, manual} formatting_regions.texi(mymacro,49) @code{@@ref@{node,,title,file name@}} @ref{node,,title,file name} formatting_regions.texi(mymacro,49) @code{@@ref@{node,,title,,manual@}} @ref{node,,title,,manual} formatting_regions.texi(mymacro,49) @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} formatting_regions.texi(mymacro,49) @code{@@ref@{node,,title, file name, manual@}} @ref{node,,title, file name, manual} formatting_regions.texi(mymacro,49) @code{@@ref@{node,,,file name,manual@}} @ref{node,,,file name,manual} formatting_regions.texi(mymacro,49) @code{@@ref@{,cross ref name,title,@}} @ref{,cross ref name,title,} formatting_regions.texi(mymacro,49) @code{@@ref@{,cross ref name,,file name@}} @ref{,cross ref name,,file name} formatting_regions.texi(mymacro,49) @code{@@ref@{,cross ref name,,,manual@}} @ref{,cross ref name,,,manual} formatting_regions.texi(mymacro,49) @code{@@ref@{,cross ref name,title,file name@}} @ref{,cross ref name,title,file name} formatting_regions.texi(mymacro,49) @code{@@ref@{,cross ref name,title,,manual@}} @ref{,cross ref name,title,,manual} formatting_regions.texi(mymacro,49) @code{@@ref@{,cross ref name,title, file name, manual@}} @ref{,cross ref name,title, file name, manual} formatting_regions.texi(mymacro,49) @code{@@ref@{,,title,file name@}} @ref{,,title,file name} formatting_regions.texi(mymacro,49) @code{@@ref@{,,title,,manual@}} @ref{,,title,,manual} formatting_regions.texi(mymacro,49) @code{@@ref@{,,title, file name, manual@}} @ref{,,title, file name, manual} formatting_regions.texi(mymacro,49) @code{@@ref@{,,,file name,manual@}} @ref{,,,file name,manual} formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) @code{@@inforef@{,cross ref name @}} @inforef{,cross ref name } formatting_regions.texi(mymacro,49) @code{@@inforef@{,,file name@}} @inforef{,,file name} formatting_regions.texi(mymacro,49) @code{@@inforef@{,cross ref name, file name@}} @inforef{,cross ref name, file name} formatting_regions.texi(mymacro,49) @code{@@inforef@{@}} @inforef{} formatting_regions.texi(mymacro,49) formatting_regions.texi(mymacro,49) formatting_regions.texi(,50) @end example formatting_regions.texi(,51) formatting_regions.texi(,52) insertcopying formatting_regions.texi(,53) @insertcopying formatting_regions.texi(,54) formatting_regions.texi(,55) @cindex t--ruc formatting_regions.texi(,56) @cindex T--ruc formatting_regions.texi(,57) @cindex . formatting_regions.texi(,58) @cindex ? formatting_regions.texi(,59) @cindex a formatting_regions.texi(,60) @findex t--ruc formatting_regions.texi(,61) @findex T--ruc formatting_regions.texi(,62) @findex . formatting_regions.texi(,63) @findex ? formatting_regions.texi(,64) @findex a formatting_regions.texi(,65) formatting_regions.texi(,66) formatting_regions.texi(,67) cp formatting_regions.texi(,68) @printindex cp formatting_regions.texi(,69) formatting_regions.texi(,70) fn formatting_regions.texi(,71) @printindex fn formatting_regions.texi(,72) formatting_regions.texi(,73) vr formatting_regions.texi(,74) @printindex vr formatting_regions.texi(,75) formatting_regions.texi(,76) ky formatting_regions.texi(,77) @printindex ky formatting_regions.texi(,78) formatting_regions.texi(,79) pg formatting_regions.texi(,80) @printindex pg formatting_regions.texi(,81) formatting_regions.texi(,82) tp formatting_regions.texi(,83) @printindex tp formatting_regions.texi(,84) formatting_regions.texi(,85) formatting_regions.texi(,86) formatting_regions.texi(,87) @node chapter formatting_regions.texi(,88) @chapter chapter formatting_regions.texi(,89) formatting_regions.texi(,90) @footnote{in footnote} formatting_regions.texi(,91) formatting_regions.texi(,92) @format formatting_regions.texi(,93) @menu formatting_regions.texi(,94) * s--ect@comma{}ion:: s--ect@comma{}ion formatting_regions.texi(,95) formatting_regions.texi(,96) Menu comment formatting_regions.texi(,97) ``simple-double--three---four----''@* formatting_regions.texi(,98) formatting_regions.texi(,99) @end menu formatting_regions.texi(,100) @end format formatting_regions.texi(,101) formatting_regions.texi(,102) @node s--ect@comma{}ion formatting_regions.texi(,103) @section A section formatting_regions.texi(,104) formatting_regions.texi(,105) @menu formatting_regions.texi(,106) * subsection:: formatting_regions.texi(,107) @end menu formatting_regions.texi(,108) formatting_regions.texi(,109) @node subsection formatting_regions.texi(,110) @subsection subsection formatting_regions.texi(,111) formatting_regions.texi(,112) @menu formatting_regions.texi(,113) * subsubsection:: formatting_regions.texi(,114) @end menu formatting_regions.texi(,115) formatting_regions.texi(,116) @anchor{anchor} formatting_regions.texi(,117) formatting_regions.texi(,118) @node subsubsection formatting_regions.texi(,119) @subsubsection subsubsection formatting_regions.texi(,120) formatting_regions.texi(,121) @node chapter2 formatting_regions.texi(,122) @centerchap chapter 2 formatting_regions.texi(,123) formatting_regions.texi(,124) @printindex cp formatting_regions.texi(,125) @printindex fn formatting_regions.texi(,126) formatting_regions.texi(,127) @contents formatting_regions.texi(,128) @shortcontents texi2html-1.82/test/layout/res/texi_formatting_regions/formatting_regions.20000644000175000017500000000724011264347122031236 0ustar flichtenheldflichtenheld** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 39 in @mymacro) ** Empty index entry for @deffn (l. 39 in @mymacro) ** Empty index entry for @deffn (l. 39 in @mymacro) ** Empty index entry for @deffn (l. 39 in @mymacro) ** Empty index entry for @deffn (l. 39 in @mymacro) ** Empty index entry for @deffn (l. 39 in @mymacro) ** Empty index entry for @deffn (l. 39 in @mymacro) ** Empty index entry for @deffn (l. 39 in @mymacro) ** Empty index entry for @deffn (l. 39 in @mymacro) ** Empty index entry for @deffn (l. 46 in @mymacro) ** Empty index entry for @deffn (l. 46 in @mymacro) ** Empty index entry for @deffn (l. 46 in @mymacro) ** Empty index entry for @deffn (l. 46 in @mymacro) ** Empty index entry for @deffn (l. 46 in @mymacro) ** Empty index entry for @deffn (l. 46 in @mymacro) ** Empty index entry for @deffn (l. 46 in @mymacro) ** Empty index entry for @deffn (l. 46 in @mymacro) ** Empty index entry for @deffn (l. 46 in @mymacro) ** Empty index entry for @deffn (l. 49 in @mymacro) ** Empty index entry for @deffn (l. 49 in @mymacro) ** Empty index entry for @deffn (l. 49 in @mymacro) ** Empty index entry for @deffn (l. 49 in @mymacro) ** Empty index entry for @deffn (l. 49 in @mymacro) ** Empty index entry for @deffn (l. 49 in @mymacro) ** Empty index entry for @deffn (l. 49 in @mymacro) ** Empty index entry for @deffn (l. 49 in @mymacro) ** Empty index entry for @deffn (l. 49 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 39 in @mymacro) ** Empty index entry for @deffn (l. 39 in @mymacro) ** Empty index entry for @deffn (l. 39 in @mymacro) ** Empty index entry for @deffn (l. 39 in @mymacro) ** Empty index entry for @deffn (l. 39 in @mymacro) ** Empty index entry for @deffn (l. 39 in @mymacro) ** Empty index entry for @deffn (l. 39 in @mymacro) ** Empty index entry for @deffn (l. 39 in @mymacro) ** Empty index entry for @deffn (l. 39 in @mymacro) ** Empty index entry for @deffn (l. 46 in @mymacro) ** Empty index entry for @deffn (l. 46 in @mymacro) ** Empty index entry for @deffn (l. 46 in @mymacro) ** Empty index entry for @deffn (l. 46 in @mymacro) ** Empty index entry for @deffn (l. 46 in @mymacro) ** Empty index entry for @deffn (l. 46 in @mymacro) ** Empty index entry for @deffn (l. 46 in @mymacro) ** Empty index entry for @deffn (l. 46 in @mymacro) ** Empty index entry for @deffn (l. 46 in @mymacro) ** Empty index entry for @deffn (l. 49 in @mymacro) ** Empty index entry for @deffn (l. 49 in @mymacro) ** Empty index entry for @deffn (l. 49 in @mymacro) ** Empty index entry for @deffn (l. 49 in @mymacro) ** Empty index entry for @deffn (l. 49 in @mymacro) ** Empty index entry for @deffn (l. 49 in @mymacro) ** Empty index entry for @deffn (l. 49 in @mymacro) ** Empty index entry for @deffn (l. 49 in @mymacro) ** Empty index entry for @deffn (l. 49 in @mymacro) texi2html-1.82/test/layout/res/navigation_chapter_noheaders_init/0000755000175000017500000000000011264347122027237 5ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation_chapter_noheaders_init/navigation.html0000644000175000017500000000371311264347122032270 0ustar flichtenheldflichtenheld Untitled Document: File used for navigation testing

    File used for navigation testing


    texi2html-1.82/test/layout/res/navigation_chapter_noheaders_init/navigation_1.html0000644000175000017500000000725411264347122032514 0ustar flichtenheldflichtenheld Untitled Document: 1. First chapter

    1. First chapter


    1.1 Section in chapter

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b bb b b b b b b bb b bb.


    1.1.1 Sub section in section


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_chapter_noheaders_init/navigation.20000644000175000017500000000000011264347122031447 0ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation_chapter_noheaders_init/navigation_toc.html0000644000175000017500000000437711264347122033144 0ustar flichtenheldflichtenheld Untitled Document: Table of Contents

    Table of Contents


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/formatting_makeinfo/0000755000175000017500000000000011264347122024342 5ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/formatting_makeinfo/formatting_abt.html0000644000175000017500000003136711264347122030242 0ustar flichtenheldflichtenheld title –a: About This Document
    node: , , [ > ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ > ] Following Node following in node reading order 1.2.4

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    node: , , [ > ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/formatting_makeinfo/anchor.html0000644000175000017500000000327411264347122026510 0ustar flichtenheldflichtenheld title –a: anchor

    The node you are looking for is at anchor.

    texi2html-1.82/test/layout/res/formatting_makeinfo/chapter.html0000644000175000017500000003007011264347122026656 0ustar flichtenheldflichtenheld title –a: 1. chapter
    node: chapter , Top , Top [ > ]

    1. chapter

    1

     

    Footnotes

    [1] in footnote


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/formatting_makeinfo/index.html0000644000175000017500000033276311264347122026355 0ustar flichtenheldflichtenheld title –a: Top section
    node: Top , , (dir) [ > ]

    Insertcopying in normal text

    In copying

    < > " & ’ ‘

    “simple-double–three—four—-”
    code: ``simple-double--three---four----''
    asis: “simple-double–three—four—-”
    strong: “simple-double–three—four—-”
    kbd: ``simple-double--three---four----''

    ‘‘simple-double--three—four—-’’

    @"u ü @"{U} Ü @~n ñ @^a â @’e é @=o ō @‘i ì @’{e} é @’{@dotless{i}} í @dotless{i} i @dotless{j} j @‘{@=E} Ē` @l{} ł @,{@’C} Ć, @,c ç @,c@"u çü

    @*
    @ followed by a space   @ followed by a tab   @ followed by a new line  @- @| @: @! ! @? ? @. . @@ @ @} } @{ { @/

    foo vs. bar. colon :And something else. semi colon ;. And ? ?. Now ! !@ but , ,

    @TeX TeX @LaTeX LaTeX @bullet • @copyright © @dots … @enddots ... @equiv ≡ @error error--> @expansion → @minus - @point ∗ @print -| @result ⇒ @today a sunny day @aa å @AA Å @ae æ @oe œ @AE Æ @OE Œ @o ø @O Ø @ss ß @l ł @L Ł @exclamdown ¡ @questiondown ¿ @pounds £ @registeredsymbol ® @ordf ª @ordm º @comma , @quotedblleft “ @quotedblright ” @quoteleft ‘ @quoteright ’ @quotedblbase „ @quotesinglbase ‚ @guillemetleft « @guillemetright » @guillemotleft « @guillemotright » @guilsinglleft ‹ @guilsinglright › @textdegree ° @euro € @arrow → @leq ≤ @geq ≥

    @acronym{--a,an accronym} –a (an accronym) @acronym{--a} –a @abbr{@'E--. @comma{}A., @'Etude Autonome } É–. ,A. (Étude Autonome) @abbr{@'E--. @comma{}A.} É–. ,A. @asis{--a} –a @b{--a} –a @cite{--a} –a @code{--a} --a @command{--a} --a @ctrl{--a} –a @dfn{--a} –a @dmn{--a} –a @email{--a,--b} –b @email{,--b} –b @email{--a} --a @emph{--a} –a @env{--a} --a @file{--a}--a@i{--a} –a @kbd{--a} --a @key{--a} <--a> @math{--a {\frac{1}{2}} @minus{}} –a \frac12 - @option{--a}--a@r{--a} –a @samp{--a}--a@sc{--a} –A @strong{--a} –a @t{--a} –a @sansserif{--a} –a @titlefont{--a}

    –a

    @indicateurl{--a} <--a> @uref{--a,--b} –b @uref{--a} --a @uref{,--b} –b @uref{--a,--b,--c} –c @uref{,--b,--c} –c @uref{--a,,--c} –c @uref{,,--c} –c @url{--a,--b} –b @url{--a,} --a @url{,--b} –b @var{--a} –a @verb{:--a:} --a @verb{:a < & @ % " -- b:} a < & @ % " -- b @w{} @H{a} a'' @H{--a} –a'' @dotaccent{a} ȧ @dotaccent{--a} –a. @ringaccent{a} å @ringaccent{--a} –a* @tieaccent{a} a[ @tieaccent{--a} –a[ @u{a} ă @u{--a} –a( @ubaraccent{a} a_ @ubaraccent{--a} –a_ @udotaccent{a}@udotaccent{--a} .–a @v{a} a< @v{--a} –a< @,{c} ç @,{--c} –c, @ogonek{a} ą @ogonek{--a} –a; @footnote{in footnote} 1 @footnote{in footnote2} 2

    @image{f--ile} f--ile @image{f--ile,l--i} f--ile @image{f--ile,,l--e} f--ile @image{f--ile,,,alt} alt @image{f--ile,,,,e-d-xt} f--ile @image{f--ile,aze,az,alt,e--xt} alt @image{f-ile,aze,,a--lt} a–lt @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} alt



    @clicksequence{click @click{} A} click → A After clickstyle ⇒ @clicksequence{click @click{} A} click ⇒ A

    A quot—ation

    Note: A Note

    note: A note

    Caution: Caution

    Important: Important

    Tip: a Tip

    Warning: a Warning.

    something é TeX: The something é TeX is here.

    @ at the end of line A @ at the end of the @quotation line.

    something, other thing: something, other thing

    Note, the note: Note, the note

    Empty:

    :


    :

    A small quot—ation

    Note: A small Note

    something, other thing: something, other thing

    • i–temize
    • + i–tem +
    • b–ullet
    • - minu–s
    • e–mph item
    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
    trucbidule
     
    e--xample  some
       text
    
     
    s--mallexample
    
     
    d–isplay
    
     
    s–malldisplay
    
     
    l--isp
    
     
    s--malllisp
    
     
    f–ormat
    
     
    s–mallformat
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    cate--gory: de--ffn_name ar--guments more args
    even more so

    def–fn

    fset: i a g
    cmde: truc
    Command: log trap
    Command: log trap1
    Command: log trap2
    cmde: id ule truc
    cmde2: id ‘i’ ule truc
    id ‘i’ ule:
    :
    aaa:
    :
    :
    : machin
    : bidule machin
    truc: machin
    truc:
    truc: followed by a comment
    truc:
    :
    truc: a b c d e f g h i
    truc: deffnx before end deffn
    empty: deffn
    empty: deffn with deffnx
    empty: deffnx
    fset: i a g
    cmde: truc

    text in def item for second def item

    c--ategory: d--efvr_name

    d–efvr

    c--ategory: t--ype d--eftypefn_name a--rguments...

    d–eftypefn

    c--ategory on c--lass: t--ype d--eftypeop_name a--rguments...

    d–eftypeop

    c--ategory: t--ype d--eftypevr_name

    d–eftypevr

    c--ategory of c--lass: d--efcv_name

    d–efcv

    c--ategory on c--lass: d--efop_name a--rguments...

    d–efop

    c--ategory: d--eftp_name a--ttributes...

    d–eftp

    Function: d--efun_name a--rguments...

    d–efun

    Macro: d--efmac_name a--rguments...

    d–efmac

    Special Form: d--efspec_name a--rguments...

    d–efspec

    Variable: d--efvar_name argvar argvar1

    d–efvar

    User Option: d--efopt_name

    d–efopt

    Function: t--ype d--eftypefun_name a--rguments...

    d–eftypefun

    Variable: t--ype d--eftypevar_name

    d–eftypevar

    Instance Variable of c--lass: d--efivar_name

    d–efivar

    Instance Variable of c--lass: t--ype d--eftypeivar_name

    d–eftypeivar

    Method on c--lass: d--efmethod_name a--rguments...

    d–efmethod

    Method on c--lass: t--ype d--eftypemethod_name a--rguments...

    d–eftypemethod

    @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} See cross r—ef name@: (file n—ame@)c—hapter@ section ‘t—itle@’ in ma—nual@. @ref{chapter, cross ref name, title, file name, manual} cross ref name: (file name)chapter section ‘title’ in manual @pxref{chapter, cross ref name, title, file name, manual} see cross ref name: (file name)chapter section ‘title’ in manual @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter

    @ref{chapter} chapter @xref{chapter} See chapter. @pxref{chapter} see chapter @ref{s--ect@comma{}ion} s--ect,ion

    @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } a , in cross ref: (a comma, in file)s–ect,ion section ‘a comma, in title’ in a , in manual name

    @ref{chapter,cross ref name} cross ref name @ref{chapter,,title} title @ref{chapter,,,file name} (file name)chapter @ref{chapter,,,,manual} section ‘chapter’ in manual @ref{chapter,cross ref name,title,} title @ref{chapter,cross ref name,,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,,,manual} section ‘chapter’ in manual @ref{chapter,cross ref name,title,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,title,,manual} section ‘title’ in manual @ref{chapter,cross ref name,title, file name, manual} cross ref name: (file name)chapter section ‘title’ in manual @ref{chapter,,title,file name} (file name)chapter @ref{chapter,,title,,manual} section ‘title’ in manual @ref{chapter,,title, file name, manual} (file name)chapter section ‘title’ in manual @ref{chapter,,,file name,manual} (file name)chapter section ‘chapter’ in manual

    @ref{(pman)anode,cross ref name} cross ref name: (pman)anode @ref{(pman)anode,,title} (pman)anode @ref{(pman)anode,,,file name} (file name)anode @ref{(pman)anode,,,,manual} (pman)anode section ‘anode’ in manual @ref{(pman)anode,cross ref name,title,} cross ref name: (pman)anode @ref{(pman)anode,cross ref name,,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,,,manual} cross ref name: (pman)anode section ‘anode’ in manual @ref{(pman)anode,cross ref name,title,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,title,,manual} cross ref name: (pman)anode section ‘title’ in manual @ref{(pman)anode,cross ref name,title, file name, manual} cross ref name: (file name)anode section ‘title’ in manual @ref{(pman)anode,,title,file name} (file name)anode @ref{(pman)anode,,title,,manual} (pman)anode section ‘title’ in manual @ref{(pman)anode,,title, file name, manual} (file name)anode section ‘title’ in manual @ref{(pman)anode,,,file name,manual} (file name)anode section ‘anode’ in manual

    @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter @inforef{chapter} @inforef{chapter, cross ref name} @inforef{chapter,,file name} See (file name)chapter @inforef{node, cross ref name, file name} See cross ref name: (file name)node @inforef{node} @inforef{node, cross ref name} @inforef{node,,file name} See (file name)node @inforef{chapter, cross ref name, file name, spurious arg} See cross ref name: (file name, spurious arg)chapter

    @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} See a , in cross ref: (a comma, in file)s–ect,ion

    • a

    l–ine

    a
    b

    l–ine

    - a
    - b

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in verbatim ''
    
    html ''

    majorheading

    chapheading

    heading

    subheading

    subsubheading

    @acronym{--a,an accronym @comma{} @enddots{}} –a (an accronym , ...) @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } É–. ,A. (Étude–, Autonome) @abbr{@'E--. @comma{}A.} É–. ,A.

    @math{--a@minus{} {\frac{1}{2}}} –a- \frac12

    @image{f-ile,,,alt@verb{:jk _" %}} altjk _" %@ @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} jk _" %@ in b " @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} altjk _" %@

    Somehow invalid use of @,:
    @, ,
    @,@"u @,"u

    Invalid use of @’:
    @’ ’
    @’@"u @'"u

    @dotless{truc} truc @dotless{ij} ij @dotless{--a} –a @dotless{a} a

    @TeX, but without brace TeX

    @# @#

    @w{--a} –a

    @image{,1--xt} @image{,,2--xt} @image{,,,3--xt}


    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    fun:
    truc: machin bidule chose and
    truc: machin bidule chose and after
    truc: machin bidule chose and {
    truc: machin bidule chose and { and after
    truc: followed by a comment

    Various deff lines

    truc: after a deff item

    @ref{node} @ref{node}

    @ref{,cross ref name} @ref{,cross ref name} @ref{,,title} @ref{,,title} @ref{,,,file name} (file name) @ref{,,,,manual} manual @ref{node,cross ref name} @ref{node,cross ref name} @ref{node,,title} @ref{node,,title} @ref{node,,,file name} (file name)node @ref{node,,,,manual} section ‘node’ in manual @ref{node,cross ref name,title,} @ref{node,cross ref name,title,} @ref{node,cross ref name,,file name} cross ref name: (file name)node @ref{node,cross ref name,,,manual} section ‘node’ in manual @ref{node,cross ref name,title,file name} cross ref name: (file name)node @ref{node,cross ref name,title,,manual} section ‘title’ in manual @ref{node,cross ref name,title, file name, manual} cross ref name: (file name)node section ‘title’ in manual @ref{node,,title,file name} (file name)node @ref{node,,title,,manual} section ‘title’ in manual @ref{chapter,,title, file name, manual} (file name)chapter section ‘title’ in manual @ref{node,,title, file name, manual} (file name)node section ‘title’ in manual @ref{node,,,file name,manual} (file name)node section ‘node’ in manual @ref{,cross ref name,title,} @ref{,cross ref name,title,} @ref{,cross ref name,,file name} cross ref name: (file name) @ref{,cross ref name,,,manual} manual @ref{,cross ref name,title,file name} cross ref name: (file name) @ref{,cross ref name,title,,manual} section ‘title’ in manual @ref{,cross ref name,title, file name, manual} cross ref name: (file name) section ‘title’ in manual @ref{,,title,file name} (file name) @ref{,,title,,manual} section ‘title’ in manual @ref{,,title, file name, manual} (file name) section ‘title’ in manual @ref{,,,file name,manual} (file name) manual

    @inforef{,cross ref name } @inforef{,,file name} @inforef{,cross ref name, file name} @inforef{}

    Normal text

    < > " & ’ ‘

    “simple-double–three—four—-”
    code: ``simple-double--three---four----''
    asis: “simple-double–three—four—-”
    strong: “simple-double–three—four—-”
    kbd: ``simple-double--three---four----''

    ‘‘simple-double--three—four—-’’

    @"u ü @"{U} Ü @~n ñ @^a â @’e é @=o ō @‘i ì @’{e} é @’{@dotless{i}} í @dotless{i} i @dotless{j} j @‘{@=E} Ē` @l{} ł @,{@’C} Ć, @,c ç @,c@"u çü

    @*
    @ followed by a space   @ followed by a tab   @ followed by a new line  @- @| @: @! ! @? ? @. . @@ @ @} } @{ { @/

    foo vs. bar. colon :And something else. semi colon ;. And ? ?. Now ! !@ but , ,

    @TeX TeX @LaTeX LaTeX @bullet • @copyright © @dots … @enddots ... @equiv ≡ @error error--> @expansion → @minus - @point ∗ @print -| @result ⇒ @today a sunny day @aa å @AA Å @ae æ @oe œ @AE Æ @OE Œ @o ø @O Ø @ss ß @l ł @L Ł @exclamdown ¡ @questiondown ¿ @pounds £ @registeredsymbol ® @ordf ª @ordm º @comma , @quotedblleft “ @quotedblright ” @quoteleft ‘ @quoteright ’ @quotedblbase „ @quotesinglbase ‚ @guillemetleft « @guillemetright » @guillemotleft « @guillemotright » @guilsinglleft ‹ @guilsinglright › @textdegree ° @euro € @arrow → @leq ≤ @geq ≥

    @acronym{--a,an accronym} –a (an accronym) @acronym{--a} –a @abbr{@'E--. @comma{}A., @'Etude Autonome } É–. ,A. (Étude Autonome) @abbr{@'E--. @comma{}A.} É–. ,A. @asis{--a} –a @b{--a} –a @cite{--a} –a @code{--a} --a @command{--a} --a @ctrl{--a} –a @dfn{--a} –a @dmn{--a} –a @email{--a,--b} –b @email{,--b} –b @email{--a} --a @emph{--a} –a @env{--a} --a @file{--a}--a@i{--a} –a @kbd{--a} --a @key{--a} <--a> @math{--a {\frac{1}{2}} @minus{}} –a \frac12 - @option{--a}--a@r{--a} –a @samp{--a}--a@sc{--a} –A @strong{--a} –a @t{--a} –a @sansserif{--a} –a @titlefont{--a}

    –a

    @indicateurl{--a} <--a> @uref{--a,--b} –b @uref{--a} --a @uref{,--b} –b @uref{--a,--b,--c} –c @uref{,--b,--c} –c @uref{--a,,--c} –c @uref{,,--c} –c @url{--a,--b} –b @url{--a,} --a @url{,--b} –b @var{--a} –a @verb{:--a:} --a @verb{:a < & @ % " -- b:} a < & @ % " -- b @w{} @H{a} a'' @H{--a} –a'' @dotaccent{a} ȧ @dotaccent{--a} –a. @ringaccent{a} å @ringaccent{--a} –a* @tieaccent{a} a[ @tieaccent{--a} –a[ @u{a} ă @u{--a} –a( @ubaraccent{a} a_ @ubaraccent{--a} –a_ @udotaccent{a}@udotaccent{--a} .–a @v{a} a< @v{--a} –a< @,{c} ç @,{--c} –c, @ogonek{a} ą @ogonek{--a} –a; @footnote{in footnote} 1 @footnote{in footnote2} 2

    @image{f--ile} f--ile @image{f--ile,l--i} f--ile @image{f--ile,,l--e} f--ile @image{f--ile,,,alt} alt @image{f--ile,,,,e-d-xt} f--ile @image{f--ile,aze,az,alt,e--xt} alt @image{f-ile,aze,,a--lt} a–lt @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} alt



    @clicksequence{click @click{} A} click → A After clickstyle ⇒ @clicksequence{click @click{} A} click ⇒ A

    A quot—ation

    Note: A Note

    note: A note

    Caution: Caution

    Important: Important

    Tip: a Tip

    Warning: a Warning.

    something é TeX: The something é TeX is here.

    @ at the end of line A @ at the end of the @quotation line.

    something, other thing: something, other thing

    Note, the note: Note, the note

    Empty:

    :


    :

    A small quot—ation

    Note: A small Note

    something, other thing: something, other thing

    • i–temize
    • + i–tem +
    • b–ullet
    • - minu–s
    • e–mph item
    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
    trucbidule
     
    e--xample  some
       text
    
     
    s--mallexample
    
     
    d–isplay
    
     
    s–malldisplay
    
     
    l--isp
    
     
    s--malllisp
    
     
    f–ormat
    
     
    s–mallformat
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    cate--gory: de--ffn_name ar--guments more args
    even more so

    def–fn

    fset: i a g
    cmde: truc
    Command: log trap
    Command: log trap1
    Command: log trap2
    cmde: id ule truc
    cmde2: id ‘i’ ule truc
    id ‘i’ ule:
    :
    aaa:
    :
    :
    : machin
    : bidule machin
    truc: machin
    truc:
    truc: followed by a comment
    truc:
    :
    truc: a b c d e f g h i
    truc: deffnx before end deffn
    empty: deffn
    empty: deffn with deffnx
    empty: deffnx
    fset: i a g
    cmde: truc

    text in def item for second def item

    c--ategory: d--efvr_name

    d–efvr

    c--ategory: t--ype d--eftypefn_name a--rguments...

    d–eftypefn

    c--ategory on c--lass: t--ype d--eftypeop_name a--rguments...

    d–eftypeop

    c--ategory: t--ype d--eftypevr_name

    d–eftypevr

    c--ategory of c--lass: d--efcv_name

    d–efcv

    c--ategory on c--lass: d--efop_name a--rguments...

    d–efop

    c--ategory: d--eftp_name a--ttributes...

    d–eftp

    Function: d--efun_name a--rguments...

    d–efun

    Macro: d--efmac_name a--rguments...

    d–efmac

    Special Form: d--efspec_name a--rguments...

    d–efspec

    Variable: d--efvar_name argvar argvar1

    d–efvar

    User Option: d--efopt_name

    d–efopt

    Function: t--ype d--eftypefun_name a--rguments...

    d–eftypefun

    Variable: t--ype d--eftypevar_name

    d–eftypevar

    Instance Variable of c--lass: d--efivar_name

    d–efivar

    Instance Variable of c--lass: t--ype d--eftypeivar_name

    d–eftypeivar

    Method on c--lass: d--efmethod_name a--rguments...

    d–efmethod

    Method on c--lass: t--ype d--eftypemethod_name a--rguments...

    d–eftypemethod

    @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} See cross r—ef name@: (file n—ame@)c—hapter@ section ‘t—itle@’ in ma—nual@. @ref{chapter, cross ref name, title, file name, manual} cross ref name: (file name)chapter section ‘title’ in manual @pxref{chapter, cross ref name, title, file name, manual} see cross ref name: (file name)chapter section ‘title’ in manual @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter

    @ref{chapter} chapter @xref{chapter} See chapter. @pxref{chapter} see chapter @ref{s--ect@comma{}ion} s--ect,ion

    @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } a , in cross ref: (a comma, in file)s–ect,ion section ‘a comma, in title’ in a , in manual name

    @ref{chapter,cross ref name} cross ref name @ref{chapter,,title} title @ref{chapter,,,file name} (file name)chapter @ref{chapter,,,,manual} section ‘chapter’ in manual @ref{chapter,cross ref name,title,} title @ref{chapter,cross ref name,,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,,,manual} section ‘chapter’ in manual @ref{chapter,cross ref name,title,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,title,,manual} section ‘title’ in manual @ref{chapter,cross ref name,title, file name, manual} cross ref name: (file name)chapter section ‘title’ in manual @ref{chapter,,title,file name} (file name)chapter @ref{chapter,,title,,manual} section ‘title’ in manual @ref{chapter,,title, file name, manual} (file name)chapter section ‘title’ in manual @ref{chapter,,,file name,manual} (file name)chapter section ‘chapter’ in manual

    @ref{(pman)anode,cross ref name} cross ref name: (pman)anode @ref{(pman)anode,,title} (pman)anode @ref{(pman)anode,,,file name} (file name)anode @ref{(pman)anode,,,,manual} (pman)anode section ‘anode’ in manual @ref{(pman)anode,cross ref name,title,} cross ref name: (pman)anode @ref{(pman)anode,cross ref name,,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,,,manual} cross ref name: (pman)anode section ‘anode’ in manual @ref{(pman)anode,cross ref name,title,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,title,,manual} cross ref name: (pman)anode section ‘title’ in manual @ref{(pman)anode,cross ref name,title, file name, manual} cross ref name: (file name)anode section ‘title’ in manual @ref{(pman)anode,,title,file name} (file name)anode @ref{(pman)anode,,title,,manual} (pman)anode section ‘title’ in manual @ref{(pman)anode,,title, file name, manual} (file name)anode section ‘title’ in manual @ref{(pman)anode,,,file name,manual} (file name)anode section ‘anode’ in manual

    @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter @inforef{chapter} @inforef{chapter, cross ref name} @inforef{chapter,,file name} See (file name)chapter @inforef{node, cross ref name, file name} See cross ref name: (file name)node @inforef{node} @inforef{node, cross ref name} @inforef{node,,file name} See (file name)node @inforef{chapter, cross ref name, file name, spurious arg} See cross ref name: (file name, spurious arg)chapter

    @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} See a , in cross ref: (a comma, in file)s–ect,ion

    • a

    l–ine

    a
    b

    l–ine

    - a
    - b

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in verbatim ''
    
    html ''

    majorheading

    chapheading

    heading

    subheading

    subsubheading

    @acronym{--a,an accronym @comma{} @enddots{}} –a (an accronym , ...) @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } É–. ,A. (Étude–, Autonome) @abbr{@'E--. @comma{}A.} É–. ,A.

    @math{--a@minus{} {\frac{1}{2}}} –a- \frac12

    @image{f-ile,,,alt@verb{:jk _" %}} altjk _" %@ @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} jk _" %@ in b " @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} altjk _" %@

    Somehow invalid use of @,:
    @, ,
    @,@"u @,"u

    Invalid use of @’:
    @’ ’
    @’@"u @'"u

    @dotless{truc} truc @dotless{ij} ij @dotless{--a} –a @dotless{a} a

    @TeX, but without brace TeX

    @# @#

    @w{--a} –a

    @image{,1--xt} @image{,,2--xt} @image{,,,3--xt}


    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    fun:
    truc: machin bidule chose and
    truc: machin bidule chose and after
    truc: machin bidule chose and {
    truc: machin bidule chose and { and after
    truc: followed by a comment

    Various deff lines

    truc: after a deff item

    @ref{node} @ref{node}

    @ref{,cross ref name} @ref{,cross ref name} @ref{,,title} @ref{,,title} @ref{,,,file name} (file name) @ref{,,,,manual} manual @ref{node,cross ref name} @ref{node,cross ref name} @ref{node,,title} @ref{node,,title} @ref{node,,,file name} (file name)node @ref{node,,,,manual} section ‘node’ in manual @ref{node,cross ref name,title,} @ref{node,cross ref name,title,} @ref{node,cross ref name,,file name} cross ref name: (file name)node @ref{node,cross ref name,,,manual} section ‘node’ in manual @ref{node,cross ref name,title,file name} cross ref name: (file name)node @ref{node,cross ref name,title,,manual} section ‘title’ in manual @ref{node,cross ref name,title, file name, manual} cross ref name: (file name)node section ‘title’ in manual @ref{node,,title,file name} (file name)node @ref{node,,title,,manual} section ‘title’ in manual @ref{chapter,,title, file name, manual} (file name)chapter section ‘title’ in manual @ref{node,,title, file name, manual} (file name)node section ‘title’ in manual @ref{node,,,file name,manual} (file name)node section ‘node’ in manual @ref{,cross ref name,title,} @ref{,cross ref name,title,} @ref{,cross ref name,,file name} cross ref name: (file name) @ref{,cross ref name,,,manual} manual @ref{,cross ref name,title,file name} cross ref name: (file name) @ref{,cross ref name,title,,manual} section ‘title’ in manual @ref{,cross ref name,title, file name, manual} cross ref name: (file name) section ‘title’ in manual @ref{,,title,file name} (file name) @ref{,,title,,manual} section ‘title’ in manual @ref{,,title, file name, manual} (file name) section ‘title’ in manual @ref{,,,file name,manual} (file name) manual

    @inforef{,cross ref name } @inforef{,,file name} @inforef{,cross ref name, file name} @inforef{}

    In example.

     
    <
    >
    "
    &
    '
    `
    
    ``simple-double--three---four----''
    
    code: ``simple-double--three---four----'' 
    
    asis: ``simple-double--three---four----'' 
    
    strong: ``simple-double--three---four----'' 
    
    kbd: ``simple-double--three---four----'' 
    
    
    ``simple-double--three---four----''
    
    
    
    @"u ü 
    @"{U} Ü 
    @~n ñ
    @^a â
    @'e é
    @=o ō
    @`i ì
    @'{e} é
    @'{@dotless{i}} í 
    @dotless{i} i
    @dotless{j} j
    @`{@=E} Ē` 
    @l{} ł
    @,{@'C} Ć,
    @,c ç
    @,c@"u çü 
    
    
    @* 
    
    @ followed by a space
     
    @ followed by a tab
     
    @ followed by a new line
     @- 
    @| 
    @: 
    @! !
    @? ?
    @. .
    @@ @
    @} }
    @{ {
    @/ 
    
    foo vs. bar. 
    colon :And something else.
    semi colon ;.
    And ? ?.
    Now ! !@
    but , ,
    
    @TeX TeX
    @LaTeX LaTeX
    @bullet •
    @copyright ©
    @dots …
    @enddots ...
    @equiv ≡
    @error error-->
    @expansion →
    @minus -
    @point ∗
    @print -|
    @result ⇒
    @today a sunny day
    @aa å
    @AA Å
    @ae æ
    @oe œ
    @AE Æ
    @OE Œ
    @o ø
    @O Ø
    @ss ß
    @l ł
    @L Ł
    @exclamdown ¡
    @questiondown ¿
    @pounds £
    @registeredsymbol ®
    @ordf ª
    @ordm º
    @comma ,
    @quotedblleft “
    @quotedblright ”
    @quoteleft ‘
    @quoteright ’
    @quotedblbase „
    @quotesinglbase ‚
    @guillemetleft «
    @guillemetright »
    @guillemotleft «
    @guillemotright »
    @guilsinglleft ‹
    @guilsinglright ›
    @textdegree °
    @euro €
    @arrow →
    @leq ≤
    @geq ≥
    
    @acronym{--a,an accronym} --a (an accronym)
    @acronym{--a} --a
    @abbr{@'E--. @comma{}A., @'Etude Autonome } É--. ,A. (Étude Autonome)
    @abbr{@'E--. @comma{}A.} É--. ,A.
    @asis{--a} --a
    @b{--a} --a
    @cite{--a} --a
    @code{--a} --a
    @command{--a} --a
    @ctrl{--a} --a
    @dfn{--a} --a
    @dmn{--a} --a
    @email{--a,--b} --b
    @email{,--b} --b
    @email{--a} --a
    @emph{--a} --a
    @env{--a} --a
    @file{--a}--a@i{--a} --a
    @kbd{--a} --a
    @key{--a} <--a>
    @math{--a {\frac{1}{2}} @minus{}} --a \frac12 -
    @option{--a}--a@r{--a} --a
    @samp{--a}--a@sc{--a} --A
    @strong{--a} --a
    @t{--a} --a
    @sansserif{--a} --a
    @titlefont{--a} --a
    @indicateurl{--a} <--a>
    @uref{--a,--b} --b
    @uref{--a} --a
    @uref{,--b} --b
    @uref{--a,--b,--c} --c
    @uref{,--b,--c} --c
    @uref{--a,,--c} --c
    @uref{,,--c} --c
    @url{--a,--b} --b
    @url{--a,} --a
    @url{,--b} --b
    @var{--a} --a
    @verb{:--a:} --a
    @verb{:a  < & @ % " --    b:} a  < & @ % " --    b
    @w{} 
    @H{a} a''
    @H{--a} --a''
    @dotaccent{a} ȧ
    @dotaccent{--a} --a.
    @ringaccent{a} å
    @ringaccent{--a} --a*
    @tieaccent{a} a[
    @tieaccent{--a} --a[
    @u{a} ă
    @u{--a} --a(
    @ubaraccent{a} a_
    @ubaraccent{--a} --a_
    @udotaccent{a}@udotaccent{--a} .--a
    @v{a} a<
    @v{--a} --a<
    @,{c} ç
    @,{--c} --c,
    @ogonek{a} ą
    @ogonek{--a} --a;
    @footnote{in footnote} (3)
    @footnote{in footnote2} (4)
    
    @image{f--ile} [ f--ile ]
    @image{f--ile,l--i} [ f--ile ]
    @image{f--ile,,l--e} [ f--ile ]
    @image{f--ile,,,alt} [ alt ]
    @image{f--ile,,,,e-d-xt} [ f--ile ]
    @image{f--ile,aze,az,alt,e--xt} [ alt ]
    @image{f-ile,aze,,a--lt} [ a–lt ]
    @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} [ alt ]
    
    
    
    
    @clicksequence{click @click{} A} click → A
    After clickstyle ⇒
    @clicksequence{click @click{} A} click ⇒ A
    
    
    A quot---ation
    
    Note: A Note
    
    note: A note
    
    Caution: Caution
    
    Important: Important
    
    Tip: a Tip
    
    Warning: a Warning.
    
    something é TeX: The something é TeX is here.
    
    @ at the end of line  A @ at the end of the @quotation line.
    
    something, other thing: something, other thing
    
    Note, the note: Note, the note
    
    Empty: 
    : 
    
    : 
    A small quot---ation
    
    Note: A small Note
    
    something, other thing: something, other thing
    
    •  i--temize
      
    •  +  i--tem +
      
    •  b--ullet
      
    • -
       minu--s
      
    •  e--mph item
      
    •  after emph  e--mph item
      
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    
    lone mu--ltitable item
    truc
    bidule
     
    e--xample  some
       text
    
     
    s--mallexample
    
     
    d--isplay
    
     
    s--malldisplay
    
     
    l--isp
    
     
    s--malllisp
    
     
    f--ormat
    
     
    s--mallformat
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    cate--gory: de--ffn_name ar--guments more args even more so
    def--fn
    
     
    
    fset: i a g
    cmde: truc
    Command: log trap
    Command: log trap1
    Command: log trap2
    cmde: id ule truc
    cmde2: id ‘i’ ule truc
    id ‘i’ ule:
    :
    aaa:
    :
    :
    : machin
    : bidule machin
    truc: machin
    truc:
    truc: followed by a comment
    truc:
    :
    truc: a b c d e f g h i
    truc: deffnx before end deffn
    empty: deffn
    empty: deffn with deffnx
    empty: deffnx
    fset: i a g
    cmde: truc
    text in def item for second def item
    
    c--ategory: d--efvr_name
    d--efvr
    
    c--ategory: t--ype d--eftypefn_name a--rguments...
    d--eftypefn
    
    c--ategory on c--lass: t--ype d--eftypeop_name a--rguments...
    d--eftypeop
    
    c--ategory: t--ype d--eftypevr_name
    d--eftypevr
    
    c--ategory of c--lass: d--efcv_name
    d--efcv
    
    c--ategory on c--lass: d--efop_name a--rguments...
    d--efop
    
    c--ategory: d--eftp_name a--ttributes...
    d--eftp
    
    Function: d--efun_name a--rguments...
    d--efun
    
    Macro: d--efmac_name a--rguments...
    d--efmac
    
    Special Form: d--efspec_name a--rguments...
    d--efspec
    
    Variable: d--efvar_name argvar argvar1
    d--efvar
    
    User Option: d--efopt_name
    d--efopt
    
    Function: t--ype d--eftypefun_name a--rguments...
    d--eftypefun
    
    Variable: t--ype d--eftypevar_name
    d--eftypevar
    
    Instance Variable of c--lass: d--efivar_name
    d--efivar
    
    Instance Variable of c--lass: t--ype d--eftypeivar_name
    d--eftypeivar
    
    Method on c--lass: d--efmethod_name a--rguments...
    d--efmethod
    
    Method on c--lass: t--ype d--eftypemethod_name a--rguments...
    d--eftypemethod
    
    @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} See cross r---ef name@: (file n---ame@)c---hapter@ section `t---itle@' in ma---nual@.
    @ref{chapter, cross ref name, title, file name, manual} cross ref name: (file name)chapter section `title' in manual
    @pxref{chapter, cross ref name, title, file name, manual} see cross ref name: (file name)chapter section `title' in manual
    @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter
    
    @ref{chapter} chapter
    @xref{chapter} See chapter.
    @pxref{chapter} see chapter
    @ref{s--ect@comma{}ion} s--ect,ion
    
    @ref{s--ect@comma{}ion, a @comma{} in cross
    ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name }
    a , in cross ref: (a comma, in file)s--ect,ion section `a comma, in title' in a , in manual name
    
    @ref{chapter,cross ref name} cross ref name
    @ref{chapter,,title} title
    @ref{chapter,,,file name} (file name)chapter
    @ref{chapter,,,,manual} section `chapter' in manual
    @ref{chapter,cross ref name,title,} title
    @ref{chapter,cross ref name,,file name} cross ref name: (file name)chapter
    @ref{chapter,cross ref name,,,manual} section `chapter' in manual
    @ref{chapter,cross ref name,title,file name} cross ref name: (file name)chapter
    @ref{chapter,cross ref name,title,,manual} section `title' in manual
    @ref{chapter,cross ref name,title, file name, manual} cross ref name: (file name)chapter section `title' in manual
    @ref{chapter,,title,file name} (file name)chapter
    @ref{chapter,,title,,manual} section `title' in manual
    @ref{chapter,,title, file name, manual} (file name)chapter section `title' in manual
    @ref{chapter,,,file name,manual} (file name)chapter section `chapter' in manual
    
    
    @ref{(pman)anode,cross ref name} cross ref name: (pman)anode
    @ref{(pman)anode,,title} (pman)anode
    @ref{(pman)anode,,,file name} (file name)anode
    @ref{(pman)anode,,,,manual} (pman)anode section `anode' in manual
    @ref{(pman)anode,cross ref name,title,} cross ref name: (pman)anode
    @ref{(pman)anode,cross ref name,,file name} cross ref name: (file name)anode
    @ref{(pman)anode,cross ref name,,,manual} cross ref name: (pman)anode section `anode' in manual
    @ref{(pman)anode,cross ref name,title,file name} cross ref name: (file name)anode
    @ref{(pman)anode,cross ref name,title,,manual} cross ref name: (pman)anode section `title' in manual
    @ref{(pman)anode,cross ref name,title, file name, manual} cross ref name: (file name)anode section `title' in manual
    @ref{(pman)anode,,title,file name} (file name)anode
    @ref{(pman)anode,,title,,manual} (pman)anode section `title' in manual
    @ref{(pman)anode,,title, file name, manual} (file name)anode section `title' in manual
    @ref{(pman)anode,,,file name,manual} (file name)anode section `anode' in manual
    
    
    @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter
    @inforef{chapter} 
    @inforef{chapter, cross ref name} 
    @inforef{chapter,,file name} See (file name)chapter
    @inforef{node, cross ref name, file name} See cross ref name: (file name)node
    @inforef{node} 
    @inforef{node, cross ref name} 
    @inforef{node,,file name} See (file name)node
    @inforef{chapter, cross ref name, file name, spurious arg} See cross ref name: (file name, spurious arg)chapter
    
    @inforef{s--ect@comma{}ion, a @comma{} in cross
    ref, a comma@comma{} in file}
    See a , in cross ref: (a comma, in file)s--ect,ion
    
    
    
    • a
    l--ine
    
    a
    b
    l--ine
    
    - a
    - b
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    in verbatim ''
    
    
    html ''
    
    
    
    majorheading
    
    
    chapheading
    
    
    heading
    
    
    subheading
    
    
    subsubheading
    
    
    @acronym{--a,an accronym @comma{} @enddots{}} --a (an accronym , ...)
    @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } É--. ,A. (Étude--, Autonome)
    @abbr{@'E--. @comma{}A.} É--. ,A.
    
    @math{--a@minus{} {\frac{1}{2}}} --a- \frac12
    
    @image{f-ile,,,alt@verb{:jk _" %}} [ altjk _" %@ ]
    @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} [ jk _" %@ in b " ]
    @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} [ altjk _" %@ ]
    
    
    
    
    Somehow invalid use of @,:
    
    @, ,
    
    
    @,@"u @,"u
    
    Invalid use of @':
    
    @' '
    
    
    @'@"u @'"u
    
    @dotless{truc} truc
    @dotless{ij} ij
    @dotless{--a} --a
    @dotless{a} a
    
    @TeX, but without brace TeX
    
    @# @#
    
    @w{--a} --a
    
    @image{,1--xt} 
    @image{,,2--xt} 
    @image{,,,3--xt} 
    
    
    
    
    • after emph  e--mph item
      
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    fun:
    truc: machin bidule chose and
    truc: machin bidule chose and after
    truc: machin bidule chose and {
    truc: machin bidule chose and { and after
    truc: followed by a comment
    Various deff lines
    
    truc: after a deff item
    @ref{node} @ref{node}
    
    @ref{,cross ref name} @ref{,cross ref name}
    @ref{,,title} @ref{,,title}
    @ref{,,,file name} (file name)
    @ref{,,,,manual} manual
    @ref{node,cross ref name} @ref{node,cross ref name}
    @ref{node,,title} @ref{node,,title}
    @ref{node,,,file name} (file name)node
    @ref{node,,,,manual} section `node' in manual
    @ref{node,cross ref name,title,} @ref{node,cross ref name,title,}
    @ref{node,cross ref name,,file name} cross ref name: (file name)node
    @ref{node,cross ref name,,,manual} section `node' in manual
    @ref{node,cross ref name,title,file name} cross ref name: (file name)node
    @ref{node,cross ref name,title,,manual} section `title' in manual
    @ref{node,cross ref name,title, file name, manual} cross ref name: (file name)node section `title' in manual
    @ref{node,,title,file name} (file name)node
    @ref{node,,title,,manual} section `title' in manual
    @ref{chapter,,title, file name, manual} (file name)chapter section `title' in manual
    @ref{node,,title, file name, manual} (file name)node section `title' in manual
    @ref{node,,,file name,manual} (file name)node section `node' in manual
    @ref{,cross ref name,title,} @ref{,cross ref name,title,}
    @ref{,cross ref name,,file name} cross ref name: (file name)
    @ref{,cross ref name,,,manual} manual
    @ref{,cross ref name,title,file name} cross ref name: (file name)
    @ref{,cross ref name,title,,manual} section `title' in manual
    @ref{,cross ref name,title, file name, manual} cross ref name: (file name) section `title' in manual
    @ref{,,title,file name} (file name)
    @ref{,,title,,manual} section `title' in manual
    @ref{,,title, file name, manual} (file name) section `title' in manual
    @ref{,,,file name,manual} (file name) manual
    
    @inforef{,cross ref name } 
    @inforef{,,file name} 
    @inforef{,cross ref name, file name} 
    @inforef{} 
    
    
    

    cp

    fn

    vr

    ky

    pg

    tp


    Footnotes

    [1] in footnote

    [2] in footnote2

    [1] in footnote

    [2] in footnote2

    [3] in footnote

    [4] in footnote2


    node: Top , , (dir) [ > ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/formatting_makeinfo/formatting.20000644000175000017500000002764011264347122026610 0ustar flichtenheldflichtenheld** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) *** Can't find simplest.texi, skipping ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** Can't find simplest.texi, skipping ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after *** Can't find simplest.texi, skipping ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) *** Can't find simplest.texi, skipping ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) *** Can't find simplest.texi, skipping ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** Can't find simplest.texi, skipping ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after *** Can't find simplest.texi, skipping ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after *** Can't find simplest.texi, skipping ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after *** Can't find simplest.texi, skipping ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) *** Can't find simplest.texi, skipping ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** Can't find simplest.texi, skipping ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after *** Can't find simplest.texi, skipping ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) *** Can't find simplest.texi, skipping (l. 38 in @mymacro) ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} (l. 38 in @mymacro) ** Unknown command `@#' (left as is) (l. 38 in @mymacro) *** no file argument for @image (l. 38 in @mymacro) *** no file argument for @image (l. 38 in @mymacro) *** no file argument for @image (l. 38 in @mymacro) *** '}' without opening '{' before: (l. 38 in @mymacro) *** '}' without opening '{' before: (l. 38 in @mymacro) *** '{' without macro. Before: (l. 38 in @mymacro) *** '{' without macro. Before: and after (l. 38 in @mymacro) *** Undefined node `node' in @ref (l. 38 in @mymacro) *** Undefined node `' in @ref (l. 38 in @mymacro) *** Undefined node `' in @ref (l. 38 in @mymacro) *** Undefined node `node' in @ref (l. 38 in @mymacro) *** Undefined node `node' in @ref (l. 38 in @mymacro) *** Undefined node `node' in @ref (l. 38 in @mymacro) *** Undefined node `' in @ref (l. 38 in @mymacro) *** First argument to @inforef may not be empty (l. 38 in @mymacro) *** First argument to @inforef may not be empty (l. 38 in @mymacro) *** First argument to @inforef may not be empty (l. 38 in @mymacro) *** First argument to @inforef may not be empty (l. 38 in @mymacro) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.jpg) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) *** Can't find simplest.texi, skipping (l. 42 in @mymacro) ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile, (using f--ile.e--xt) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} (l. 42 in @mymacro) ** Unknown command `@#' (left as is) (l. 42 in @mymacro) *** no file argument for @image (l. 42 in @mymacro) *** no file argument for @image (l. 42 in @mymacro) *** no file argument for @image (l. 42 in @mymacro) *** '}' without opening '{' before: (l. 42 in @mymacro) *** '}' without opening '{' before: (l. 42 in @mymacro) *** '{' without macro. Before: (l. 42 in @mymacro) *** '{' without macro. Before: and after (l. 42 in @mymacro) *** Undefined node `node' in @ref (l. 42 in @mymacro) *** Undefined node `' in @ref (l. 42 in @mymacro) *** Undefined node `' in @ref (l. 42 in @mymacro) *** Undefined node `node' in @ref (l. 42 in @mymacro) *** Undefined node `node' in @ref (l. 42 in @mymacro) *** Undefined node `node' in @ref (l. 42 in @mymacro) *** Undefined node `' in @ref (l. 42 in @mymacro) *** First argument to @inforef may not be empty (l. 42 in @mymacro) *** First argument to @inforef may not be empty (l. 42 in @mymacro) *** First argument to @inforef may not be empty (l. 42 in @mymacro) *** First argument to @inforef may not be empty (l. 42 in @mymacro) texi2html-1.82/test/layout/res/formatting_makeinfo/s_002d_002dect_002cion.html0000644000175000017500000002725111264347122030701 0ustar flichtenheldflichtenheld title –a: 1.1 A section
    node: s--ect,ion , chapter , chapter [ > ]

    1.1 A section


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/formatting_makeinfo/subsection.html0000644000175000017500000003036311264347122027413 0ustar flichtenheldflichtenheld title –a: 1.1.1 subsection
    node: subsection , s--ect,ion , s--ect,ion [ > ]

    1.1.1 subsection


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/formatting_makeinfo/chapter2.html0000644000175000017500000007414411264347122026752 0ustar flichtenheldflichtenheld title –a: 2. chapter 2
    node: chapter2 , chapter , Top [ > ]

    2. chapter 2

    Table of Contents

    Short Table of Contents


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    ././@LongLink0000000000000000000000000000024200000000000011563 Lustar rootroottexi2html-1.82/test/layout/res/formatting_makeinfo/subsubsection-_0060_0060simple_002ddouble_002d_002dthree_002d_002d_002dfour_002d_002d_002d_002d_0027_0027.htmltexi2html-1.82/test/layout/res/formatting_makeinfo/subsubsection-_0060_0060simple_002ddouble_002d_000000644000175000017500000003014211264347122034522 0ustar flichtenheldflichtenheld title –a: 1.1.1.1 subsubsection “simple-double–three—four—-”
    node: subsubsection ``simple-double--three---four----'' , subsection , subsection [ > ]

    1.1.1.1 subsubsection “simple-double–three—four—-”


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_node_no_header/0000755000175000017500000000000011264347122025467 5ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation_node_no_header/navigation.html0000644000175000017500000000514111264347122030515 0ustar flichtenheldflichtenheld Untitled Document: File used for navigation testing
    [Top] [Contents] [Index] [ ? ]

    File used for navigation testing


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_node_no_header/navigation_1.html0000644000175000017500000000641511264347122030742 0ustar flichtenheldflichtenheld Untitled Document: 1. First chapter
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. First chapter

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_node_no_header/navigation.20000644000175000017500000000000011264347122027677 0ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation_node_no_header/navigation_3.html0000644000175000017500000000606311264347122030743 0ustar flichtenheldflichtenheld Untitled Document: 1.1.1 Sub section in section
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.1 Sub section in section

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_node_no_header/navigation_2.html0000644000175000017500000000717011264347122030742 0ustar flichtenheldflichtenheld Untitled Document: 1.1 Section in chapter
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 Section in chapter

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b bb b b b b b b bb b bb.

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_node_no_header/navigation_abt.html0000644000175000017500000001127711264347122031352 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_node_no_header/navigation_toc.html0000644000175000017500000000530211264347122031361 0ustar flichtenheldflichtenheld Untitled Document: Table of Contents
    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_section_noheaders_init/0000755000175000017500000000000011264347122027255 5ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation_section_noheaders_init/navigation.html0000644000175000017500000000371311264347122032306 0ustar flichtenheldflichtenheld Untitled Document: File used for navigation testing

    File used for navigation testing


    texi2html-1.82/test/layout/res/navigation_section_noheaders_init/navigation_1.html0000644000175000017500000000533411264347122032527 0ustar flichtenheldflichtenheld Untitled Document: 1. First chapter

    1. First chapter


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_section_noheaders_init/navigation.20000644000175000017500000000000011264347122031465 0ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation_section_noheaders_init/navigation_2.html0000644000175000017500000000611411264347122032525 0ustar flichtenheldflichtenheld Untitled Document: 1.1 Section in chapter

    1.1 Section in chapter

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b bb b b b b b b bb b bb.


    1.1.1 Sub section in section


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_section_noheaders_init/navigation_toc.html0000644000175000017500000000437711264347122033162 0ustar flichtenheldflichtenheld Untitled Document: Table of Contents

    Table of Contents


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_chapter_no_header_vertical/0000755000175000017500000000000011264347122030061 5ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation_chapter_no_header_vertical/navigation.html0000644000175000017500000000643311264347122033114 0ustar flichtenheldflichtenheld Untitled Document: File used for navigation testing
    [Top]
    [Contents]
    [Index]
    [ ? ]

    File used for navigation testing


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_chapter_no_header_vertical/navigation_1.html0000644000175000017500000001205711264347122033333 0ustar flichtenheldflichtenheld Untitled Document: 1. First chapter
    [ << ]
    [ >> ]
     
     
     
     
     
    [Top]
    [Contents]
    [Index]
    [ ? ]

    1. First chapter


    1.1 Section in chapter

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b bb b b b b b b bb b bb.


    1.1.1 Sub section in section


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_chapter_no_header_vertical/navigation.20000644000175000017500000000000011264347122032271 0ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation_chapter_no_header_vertical/navigation_abt.html0000644000175000017500000001256511264347122033745 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top]
    [Contents]
    [Index]
    [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_chapter_no_header_vertical/navigation_toc.html0000644000175000017500000000657011264347122033763 0ustar flichtenheldflichtenheld Untitled Document: Table of Contents
    [Top]
    [Contents]
    [Index]
    [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_section/0000755000175000017500000000000011264347122024202 5ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation_section/navigation.html0000644000175000017500000000601411264347122027230 0ustar flichtenheldflichtenheld Untitled Document: File used for navigation testing
    [Top] [Contents] [Index] [ ? ]

    File used for navigation testing


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_section/navigation_1.html0000644000175000017500000000764711264347122027465 0ustar flichtenheldflichtenheld Untitled Document: 1. First chapter
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. First chapter


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_section/navigation.20000644000175000017500000000000011264347122026412 0ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation_section/navigation_2.html0000644000175000017500000001261011264347122027450 0ustar flichtenheldflichtenheld Untitled Document: 1.1 Section in chapter
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 Section in chapter

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b bb b b b b b b bb b bb.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.1 Sub section in section


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_section/navigation_abt.html0000644000175000017500000001214611264347122030061 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_section/navigation_toc.html0000644000175000017500000000615111264347122030077 0ustar flichtenheldflichtenheld Untitled Document: Table of Contents
    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/texi_navigation/0000755000175000017500000000000011264347122023507 5ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/texi_navigation/navigation.passtexi0000644000175000017500000000327211264347122027434 0ustar flichtenheldflichtenheldnavigation.texi(,2) navigation.texi(,3) @setfilename navigation.info navigation.texi(,4) navigation.texi(,5) @node Top navigation.texi(,6) @top File used for navigation testing navigation.texi(,7) navigation.texi(,8) @menu navigation.texi(,9) * chapter:: navigation.texi(,10) @end menu navigation.texi(,11) navigation.texi(,12) @node chapter navigation.texi(,13) @chapter First chapter navigation.texi(,14) navigation.texi(,15) @menu navigation.texi(,16) * section:: navigation.texi(,17) @end menu navigation.texi(,18) navigation.texi(,19) @node section navigation.texi(,20) @section Section in chapter navigation.texi(,21) navigation.texi(,22) AAAA navigation.texi(,23) navigation.texi(,24) AAAA navigation.texi(,25) navigation.texi(,26) AAAA navigation.texi(,27) navigation.texi(,28) AAAA navigation.texi(,29) navigation.texi(,30) AAAA navigation.texi(,31) navigation.texi(,32) AAAA navigation.texi(,33) navigation.texi(,34) AAAA navigation.texi(,35) navigation.texi(,36) AAAA navigation.texi(,37) navigation.texi(,38) AAAA navigation.texi(,39) navigation.texi(,40) AAAA navigation.texi(,41) navigation.texi(,42) AAAA navigation.texi(,43) navigation.texi(,44) AAAA navigation.texi(,45) navigation.texi(,46) b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b navigation.texi(,47) b b b b b b b b b b b b b b b b b b b b b bb b b b b b b bb b bb. navigation.texi(,48) navigation.texi(,49) @menu navigation.texi(,50) * subsection:: navigation.texi(,51) @end menu navigation.texi(,52) navigation.texi(,53) @node subsection navigation.texi(,54) @subsection Sub section in section navigation.texi(,55) navigation.texi(,56) @contents navigation.texi(,57) navigation.texi(,58) @bye texi2html-1.82/test/layout/res/texi_navigation/navigation.20000644000175000017500000000000011264347122025717 0ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/texi_navigation/navigation.passfirst0000644000175000017500000000327211264347122027612 0ustar flichtenheldflichtenheldnavigation.texi(,2) navigation.texi(,3) @setfilename navigation.info navigation.texi(,4) navigation.texi(,5) @node Top navigation.texi(,6) @top File used for navigation testing navigation.texi(,7) navigation.texi(,8) @menu navigation.texi(,9) * chapter:: navigation.texi(,10) @end menu navigation.texi(,11) navigation.texi(,12) @node chapter navigation.texi(,13) @chapter First chapter navigation.texi(,14) navigation.texi(,15) @menu navigation.texi(,16) * section:: navigation.texi(,17) @end menu navigation.texi(,18) navigation.texi(,19) @node section navigation.texi(,20) @section Section in chapter navigation.texi(,21) navigation.texi(,22) AAAA navigation.texi(,23) navigation.texi(,24) AAAA navigation.texi(,25) navigation.texi(,26) AAAA navigation.texi(,27) navigation.texi(,28) AAAA navigation.texi(,29) navigation.texi(,30) AAAA navigation.texi(,31) navigation.texi(,32) AAAA navigation.texi(,33) navigation.texi(,34) AAAA navigation.texi(,35) navigation.texi(,36) AAAA navigation.texi(,37) navigation.texi(,38) AAAA navigation.texi(,39) navigation.texi(,40) AAAA navigation.texi(,41) navigation.texi(,42) AAAA navigation.texi(,43) navigation.texi(,44) AAAA navigation.texi(,45) navigation.texi(,46) b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b navigation.texi(,47) b b b b b b b b b b b b b b b b b b b b b bb b b b b b b bb b bb. navigation.texi(,48) navigation.texi(,49) @menu navigation.texi(,50) * subsection:: navigation.texi(,51) @end menu navigation.texi(,52) navigation.texi(,53) @node subsection navigation.texi(,54) @subsection Sub section in section navigation.texi(,55) navigation.texi(,56) @contents navigation.texi(,57) navigation.texi(,58) @bye texi2html-1.82/test/layout/res/texi_navigation/navigation.texi0000644000175000017500000000106511264347122026543 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename navigation.info @node Top @top File used for navigation testing @menu * chapter:: @end menu @node chapter @chapter First chapter @menu * section:: @end menu @node section @section Section in chapter AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b bb b b b b b b bb b bb. @menu * subsection:: @end menu @node subsection @subsection Sub section in section @contents @bye texi2html-1.82/test/layout/res/navigation_node_vertical/0000755000175000017500000000000011264347122025354 5ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation_node_vertical/navigation.html0000644000175000017500000000643311264347122030407 0ustar flichtenheldflichtenheld Untitled Document: File used for navigation testing
    [Top]
    [Contents]
    [Index]
    [ ? ]

    File used for navigation testing


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_node_vertical/navigation_1.html0000644000175000017500000000763411264347122030633 0ustar flichtenheldflichtenheld Untitled Document: 1. First chapter
    [ < ]
    [ > ]
     
    [ << ]
    [ Up ]
    [ >> ]
     
     
     
     
    [Top]
    [Contents]
    [Index]
    [ ? ]

    1. First chapter


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_node_vertical/navigation.20000644000175000017500000000000011264347122027564 0ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation_node_vertical/navigation_3.html0000644000175000017500000000730211264347122030625 0ustar flichtenheldflichtenheld Untitled Document: 1.1.1 Sub section in section
    [ < ]
    [ > ]
     
    [ << ]
    [ Up ]
    [ >> ]
     
     
     
     
    [Top]
    [Contents]
    [Index]
    [ ? ]

    1.1.1 Sub section in section


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_node_vertical/navigation_2.html0000644000175000017500000001040711264347122030624 0ustar flichtenheldflichtenheld Untitled Document: 1.1 Section in chapter
    [ < ]
    [ > ]
     
    [ << ]
    [ Up ]
    [ >> ]
     
     
     
     
    [Top]
    [Contents]
    [Index]
    [ ? ]

    1.1 Section in chapter

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b bb b b b b b b bb b bb.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_node_vertical/navigation_abt.html0000644000175000017500000001256511264347122031240 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top]
    [Contents]
    [Index]
    [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_node_vertical/navigation_toc.html0000644000175000017500000000657011264347122031256 0ustar flichtenheldflichtenheld Untitled Document: Table of Contents
    [Top]
    [Contents]
    [Index]
    [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_section_no_header_vertical/0000755000175000017500000000000011264347122030077 5ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation_section_no_header_vertical/navigation.html0000644000175000017500000000643311264347122033132 0ustar flichtenheldflichtenheld Untitled Document: File used for navigation testing
    [Top]
    [Contents]
    [Index]
    [ ? ]

    File used for navigation testing


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_section_no_header_vertical/navigation_1.html0000644000175000017500000001105011264347122033341 0ustar flichtenheldflichtenheld Untitled Document: 1. First chapter
    [ < ]
    [ > ]
     
    [ << ]
    [ Up ]
    [ >> ]
     
     
     
     
    [Top]
    [Contents]
    [Index]
    [ ? ]

    1. First chapter


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_section_no_header_vertical/navigation.20000644000175000017500000000000011264347122032307 0ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation_section_no_header_vertical/navigation_2.html0000644000175000017500000001163411264347122033352 0ustar flichtenheldflichtenheld Untitled Document: 1.1 Section in chapter
    [ < ]
    [ > ]
     
    [ << ]
    [ Up ]
    [ >> ]
     
     
     
     
    [Top]
    [Contents]
    [Index]
    [ ? ]

    1.1 Section in chapter

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b bb b b b b b b bb b bb.


    1.1.1 Sub section in section


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_section_no_header_vertical/navigation_abt.html0000644000175000017500000001256511264347122033763 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top]
    [Contents]
    [Index]
    [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_section_no_header_vertical/navigation_toc.html0000644000175000017500000000657011264347122034001 0ustar flichtenheldflichtenheld Untitled Document: Table of Contents
    [Top]
    [Contents]
    [Index]
    [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/no_monolithic_only_toc_out/0000755000175000017500000000000011264347122025755 5ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/no_monolithic_only_toc_out/no_monolithic.html0000644000175000017500000002106711264347122031512 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Not monolithic

    Not monolitic manual(1).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter

    Chapter.

    Jump to:   T  
    Index Entry Section

    T
    topNot monolithic

    Jump to:   T  

    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)

    my footnote


    [Top] [Contents] [Index] [ ? ]

    Short Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/no_monolithic_only_toc_out/no_monolithic.20000644000175000017500000000000011264347122030667 0ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/no_monolithic_only_toc_out/no_monolithic_toc.html0000644000175000017500000000557011264347122032360 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/formatting_exotic/0000755000175000017500000000000011264347122024044 5ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/formatting_exotic/formatting_abt.html0000644000175000017500000003417011264347122027737 0ustar flichtenheldflichtenheld title –a: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/formatting_exotic/formatting_4.html0000644000175000017500000005644111264347122027341 0ustar flichtenheldflichtenheld title –a: chapter 2: L – T
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    chapter 2: L – T

    Jump to:   "   -   .   ?  
    A   B   D   F   I   L   M   T  
    Index Entry Section

    L
    log trapTop section
    log trapTop section
    log trapsubsubheading
    log trapsubsubheading
    log trap1Top section
    log trap1Top section
    log trap1subsubheading
    log trap1subsubheading
    log trap2Top section
    log trap2Top section
    log trap2subsubheading
    log trap2subsubheading

    M
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading

    T
    t--rucsubsubheading
    T--rucsubsubheading
    trucTop section
    trucTop section
    trucTop section
    trucTop section
    trucsubsubheading
    trucsubsubheading
    trucsubsubheading
    trucsubsubheading

    Jump to:   "   -   .   ?  
    A   B   D   F   I   L   M   T  

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/formatting_exotic/formatting_3.html0000644000175000017500000013116111264347122027331 0ustar flichtenheldflichtenheld title –a: chapter 2
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    chapter 2

    Jump to:   "   -   .   ?  
    A   I   T  
    Index Entry Section

    "
    Top section
    Top section
    subsubheading
    subsubheading

    -
    –optionTop section
    –optionTop section
    –optionsubsubheading
    –optionsubsubheading

    .
    .subsubheading

    ?
    ?subsubheading

    A
    asubsubheading

    I
    index entry between item and itemxTop section
    index entry between item and itemxTop section
    index entry between item and itemxsubsubheading
    index entry between item and itemxsubsubheading
    index entry within deffnTop section
    index entry within deffnTop section
    index entry within deffnsubsubheading
    index entry within deffnsubsubheading
    index entry within itemizeTop section
    index entry within itemizeTop section
    index entry within itemizesubsubheading
    index entry within itemizesubsubheading
    index entry within multitableTop section
    index entry within multitableTop section
    index entry within multitablesubsubheading
    index entry within multitablesubsubheading

    T
    t–rucsubsubheading
    T–rucsubsubheading

    Jump to:   "   -   .   ?  
    A   I   T  
    Jump to:   "   -   .   ?  
    A   B   D   F   I   L   M   T  
    Index Entry Section

    "
    ``Top section
    ``Top section
    ``subsubheading
    ``subsubheading

    -
    --foptionTop section
    --foptionTop section
    --foptionsubsubheading
    --foptionsubsubheading

    .
    .subsubheading

    ?
    ?subsubheading

    A
    aTop section
    aTop section
    aTop section
    aTop section
    asubsubheading
    asubsubheading
    asubsubheading
    asubsubheading
    asubsubheading
    afterTop section
    afterTop section
    aftersubsubheading
    aftersubsubheading

    B
    bTop section
    bTop section
    bsubsubheading
    bsubsubheading
    bidule machinTop section
    bidule machinTop section
    bidule machinsubsubheading
    bidule machinsubsubheading

    D
    d--effn_nameTop section
    d--effn_nameTop section
    d--effn_namesubsubheading
    d--effn_namesubsubheading
    d--efmac_nameTop section
    d--efmac_nameTop section
    d--efmac_namesubsubheading
    d--efmac_namesubsubheading
    d--efmethod_name on c--lassTop section
    d--efmethod_name on c--lassTop section
    d--efmethod_name on c--lasssubsubheading
    d--efmethod_name on c--lasssubsubheading
    d--efop_name on c--lassTop section
    d--efop_name on c--lassTop section
    d--efop_name on c--lasssubsubheading
    d--efop_name on c--lasssubsubheading
    d--efspec_nameTop section
    d--efspec_nameTop section
    d--efspec_namesubsubheading
    d--efspec_namesubsubheading
    d--eftypefn_nameTop section
    d--eftypefn_nameTop section
    d--eftypefn_namesubsubheading
    d--eftypefn_namesubsubheading
    d--eftypefun_nameTop section
    d--eftypefun_nameTop section
    d--eftypefun_namesubsubheading
    d--eftypefun_namesubsubheading
    d--eftypemethod_name on c--lassTop section
    d--eftypemethod_name on c--lassTop section
    d--eftypemethod_name on c--lasssubsubheading
    d--eftypemethod_name on c--lasssubsubheading
    d--eftypeop_name on c--lassTop section
    d--eftypeop_name on c--lassTop section
    d--eftypeop_name on c--lasssubsubheading
    d--eftypeop_name on c--lasssubsubheading
    d--efun_nameTop section
    d--efun_nameTop section
    d--efun_namesubsubheading
    d--efun_namesubsubheading
    de--ffn_nameTop section
    de--ffn_nameTop section
    de--ffn_namesubsubheading
    de--ffn_namesubsubheading
    deffnTop section
    deffnTop section
    deffnTop section
    deffnTop section
    deffnsubsubheading
    deffnsubsubheading
    deffnsubsubheading
    deffnsubsubheading
    deffnxTop section
    deffnxTop section
    deffnxTop section
    deffnxTop section
    deffnxsubsubheading
    deffnxsubsubheading
    deffnxsubsubheading
    deffnxsubsubheading

    F
    followedTop section
    followedTop section
    followedTop section
    followedTop section
    followedsubsubheading
    followedsubsubheading
    followedsubsubheading
    followedsubsubheading

    I
    iTop section
    iTop section
    iTop section
    iTop section
    isubsubheading
    isubsubheading
    isubsubheading
    isubsubheading
    id ‘i’ uleTop section
    id ‘i’ uleTop section
    id ‘i’ ulesubsubheading
    id ‘i’ ulesubsubheading
    id uleTop section
    id uleTop section
    id ulesubsubheading
    id ulesubsubheading

    Jump to:   "   -   .   ?  
    A   B   D   F   I   L   M   T  

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/formatting_exotic/formatting_ovr.html0000644000175000017500000002772611264347122030010 0ustar flichtenheldflichtenheld title –a: Short Table of Contents
    [Top] [Contents] [Index] [ ? ]

    Short Table of Contents


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/formatting_exotic/formatting_2.html0000644000175000017500000003404111264347122027327 0ustar flichtenheldflichtenheld title –a: A section
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A section


    subsection


    subsubsection “simple-double–three—four—-”


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/formatting_exotic/formatting.20000644000175000017500000002243411264347122026306 0ustar flichtenheldflichtenheld** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} (l. 38 in @mymacro) ** Unknown command `@#' (left as is) (l. 38 in @mymacro) *** no file argument for @image (l. 38 in @mymacro) *** no file argument for @image (l. 38 in @mymacro) *** no file argument for @image (l. 38 in @mymacro) *** '}' without opening '{' before: (l. 38 in @mymacro) *** '}' without opening '{' before: (l. 38 in @mymacro) *** '{' without macro. Before: (l. 38 in @mymacro) *** '{' without macro. Before: and after (l. 38 in @mymacro) *** Undefined node `node' in @ref (l. 38 in @mymacro) *** Undefined node `' in @ref (l. 38 in @mymacro) *** Undefined node `' in @ref (l. 38 in @mymacro) *** Undefined node `node' in @ref (l. 38 in @mymacro) *** Undefined node `node' in @ref (l. 38 in @mymacro) *** Undefined node `node' in @ref (l. 38 in @mymacro) *** Undefined node `' in @ref (l. 38 in @mymacro) *** First argument to @inforef may not be empty (l. 38 in @mymacro) *** First argument to @inforef may not be empty (l. 38 in @mymacro) *** First argument to @inforef may not be empty (l. 38 in @mymacro) *** First argument to @inforef may not be empty (l. 38 in @mymacro) ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} (l. 42 in @mymacro) ** Unknown command `@#' (left as is) (l. 42 in @mymacro) *** no file argument for @image (l. 42 in @mymacro) *** no file argument for @image (l. 42 in @mymacro) *** no file argument for @image (l. 42 in @mymacro) *** '}' without opening '{' before: (l. 42 in @mymacro) *** '}' without opening '{' before: (l. 42 in @mymacro) *** '{' without macro. Before: (l. 42 in @mymacro) *** '{' without macro. Before: and after (l. 42 in @mymacro) *** Undefined node `node' in @ref (l. 42 in @mymacro) *** Undefined node `' in @ref (l. 42 in @mymacro) *** Undefined node `' in @ref (l. 42 in @mymacro) *** Undefined node `node' in @ref (l. 42 in @mymacro) *** Undefined node `node' in @ref (l. 42 in @mymacro) *** Undefined node `node' in @ref (l. 42 in @mymacro) *** Undefined node `' in @ref (l. 42 in @mymacro) *** First argument to @inforef may not be empty (l. 42 in @mymacro) *** First argument to @inforef may not be empty (l. 42 in @mymacro) *** First argument to @inforef may not be empty (l. 42 in @mymacro) *** First argument to @inforef may not be empty (l. 42 in @mymacro) texi2html-1.82/test/layout/res/formatting_exotic/formatting.html0000644000175000017500000043765311264347122027126 0ustar flichtenheldflichtenheld title –a: Top section
    [Top] [Contents] [Index] [ ? ]

    Insertcopying in normal text

    In copying

    < > " & ’ ‘

    “simple-double–three—four—-”
    code: ``simple-double--three---four----''
    asis: “simple-double–three—four—-”
    strong: “simple-double–three—four—-”
    kbd: ``simple-double--three---four----''

    ‘‘simple-double--three—four—-’’

    @"u ü @"{U} Ü @~n ñ @^a â @’e é @=o ō @‘i ì @’{e} é @’{@dotless{i}} í @dotless{i} i @dotless{j} j @‘{@=E} Ē` @l{} ł @,{@’C} Ć, @,c ç @,c@"u çü

    @*
    @ followed by a space   @ followed by a tab   @ followed by a new line  @- @| @: @! ! @? ? @. . @@ @ @} } @{ { @/

    foo vs. bar. colon :And something else. semi colon ;. And ? ?. Now ! !@ but , ,

    @TeX TeX @LaTeX LaTeX @bullet • @copyright © @dots … @enddots ... @equiv ≡ @error error--> @expansion → @minus - @point ∗ @print -| @result ⇒ @today a sunny day @aa å @AA Å @ae æ @oe œ @AE Æ @OE Œ @o ø @O Ø @ss ß @l ł @L Ł @exclamdown ¡ @questiondown ¿ @pounds £ @registeredsymbol ® @ordf ª @ordm º @comma , @quotedblleft “ @quotedblright ” @quoteleft ‘ @quoteright ’ @quotedblbase „ @quotesinglbase ‚ @guillemetleft « @guillemetright » @guillemotleft « @guillemotright » @guilsinglleft ‹ @guilsinglright › @textdegree ° @euro € @arrow → @leq ≤ @geq ≥

    @acronym{--a,an accronym} –a (an accronym) @acronym{--a} –a @abbr{@'E--. @comma{}A., @'Etude Autonome } É–. ,A. (Étude Autonome) @abbr{@'E--. @comma{}A.} É–. ,A. @asis{--a} –a @b{--a} –a @cite{--a} –a @code{--a} --a @command{--a} --a @ctrl{--a} –a @dfn{--a} –a @dmn{--a} –a @email{--a,--b} –b @email{,--b} –b @email{--a} --a @emph{--a} –a @env{--a} --a @file{--a}--a@i{--a} –a @kbd{--a} --a @key{--a} <--a> @math{--a {\frac{1}{2}} @minus{}} –a \frac12 - @option{--a}--a@r{--a} –a @samp{--a}--a@sc{--a} –A @strong{--a} –a @t{--a} –a @sansserif{--a} –a @titlefont{--a}

    –a

    @indicateurl{--a} <--a> @uref{--a,--b} –b @uref{--a} --a @uref{,--b} –b @uref{--a,--b,--c} –c @uref{,--b,--c} –c @uref{--a,,--c} –c @uref{,,--c} –c @url{--a,--b} –b @url{--a,} --a @url{,--b} –b @var{--a} –a @verb{:--a:} --a @verb{:a < & @ % " -- b:} a < & @ % " -- b @w{} @H{a} a'' @H{--a} –a'' @dotaccent{a} ȧ @dotaccent{--a} –a. @ringaccent{a} å @ringaccent{--a} –a* @tieaccent{a} a[ @tieaccent{--a} –a[ @u{a} ă @u{--a} –a( @ubaraccent{a} a_ @ubaraccent{--a} –a_ @udotaccent{a}@udotaccent{--a} .–a @v{a} a< @v{--a} –a< @,{c} ç @,{--c} –c, @ogonek{a} ą @ogonek{--a} –a; @footnote{in footnote} (1) @footnote{in footnote2} (2)

    @image{f--ile} f--ile @image{f--ile,l--i} f--ile @image{f--ile,,l--e} f--ile @image{f--ile,,,alt} alt @image{f--ile,,,,e-d-xt} f--ile @image{f--ile,aze,az,alt,e--xt} alt @image{f-ile,aze,,a--lt} a–lt @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} alt



    @clicksequence{click @click{} A} click → A After clickstyle ⇒ @clicksequence{click @click{} A} click ⇒ A

    A quot—ation

    Note: A Note

    note: A note

    Caution: Caution

    Important: Important

    Tip: a Tip

    Warning: a Warning.

    something é TeX: The something é TeX is here.

    @ at the end of line A @ at the end of the @quotation line.

    something, other thing: something, other thing

    Note, the note: Note, the note

    Empty:

    :


    :

    A small quot—ation

    Note: A small Note

    something, other thing: something, other thing

    • i–temize
    • + i–tem +
    • b–ullet
    • - minu–s
    • e–mph item
    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
    trucbidule
     
    e--xample  some
       text
    
     
    s--mallexample
    
     
    d–isplay
    
     
    s–malldisplay
    
     
    l--isp
    
     
    s--malllisp
    
     
    f–ormat
    
     
    s–mallformat
    
    d--effn_name a--rguments...c--ategory

    d–effn

    de--ffn_name ar--guments more args
    even more so
    cate--gory

    def–fn

    i a gfset
    truccmde
    log trapCommand
    log trap1Command
    log trap2 Command
    id ule truccmde
    id ‘i’ ule truccmde2
    id ‘i’ ule
    aaa
    machin
    bidule machin
    machintruc
    truc
    followed by a commenttruc
    truc
    a b c d e f g h itruc
    deffnx before end deffntruc
    deffnempty
    deffn with deffnxempty
    deffnxempty
    i a gfset
    truccmde

    text in def item for second def item

    d--efvr_namec--ategory

    d–efvr

    t--ype d--eftypefn_name a--rguments...c--ategory

    d–eftypefn

    t--ype d--eftypeop_name a--rguments...c--ategory on c--lass

    d–eftypeop

    t--ype d--eftypevr_namec--ategory

    d–eftypevr

    d--efcv_namec--ategory of c--lass

    d–efcv

    d--efop_name a--rguments...c--ategory on c--lass

    d–efop

    d--eftp_name a--ttributes...c--ategory

    d–eftp

    d--efun_name a--rguments...Function

    d–efun

    d--efmac_name a--rguments...Macro

    d–efmac

    d--efspec_name a--rguments...Special Form

    d–efspec

    d--efvar_name argvar argvar1Variable

    d–efvar

    d--efopt_nameUser Option

    d–efopt

    t--ype d--eftypefun_name a--rguments...Function

    d–eftypefun

    t--ype d--eftypevar_nameVariable

    d–eftypevar

    d--efivar_nameInstance Variable of c--lass

    d–efivar

    t--ype d--eftypeivar_nameInstance Variable of c--lass

    d–eftypeivar

    d--efmethod_name a--rguments...Method on c--lass

    d–efmethod

    t--ype d--eftypemethod_name a--rguments...Method on c--lass

    d–eftypemethod

    @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} See cross r—ef name@: (file n—ame@)c—hapter@ section ‘t—itle@’ in ma—nual@. @ref{chapter, cross ref name, title, file name, manual} cross ref name: (file name)chapter section ‘title’ in manual @pxref{chapter, cross ref name, title, file name, manual} see cross ref name: (file name)chapter section ‘title’ in manual @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter

    @ref{chapter} chapter @xref{chapter} See chapter. @pxref{chapter} see chapter @ref{s--ect@comma{}ion} s--ect,ion

    @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } a , in cross ref: (a comma, in file)s–ect,ion section ‘a comma, in title’ in a , in manual name

    @ref{chapter,cross ref name} cross ref name @ref{chapter,,title} title @ref{chapter,,,file name} (file name)chapter @ref{chapter,,,,manual} section ‘chapter’ in manual @ref{chapter,cross ref name,title,} title @ref{chapter,cross ref name,,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,,,manual} section ‘chapter’ in manual @ref{chapter,cross ref name,title,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,title,,manual} section ‘title’ in manual @ref{chapter,cross ref name,title, file name, manual} cross ref name: (file name)chapter section ‘title’ in manual @ref{chapter,,title,file name} (file name)chapter @ref{chapter,,title,,manual} section ‘title’ in manual @ref{chapter,,title, file name, manual} (file name)chapter section ‘title’ in manual @ref{chapter,,,file name,manual} (file name)chapter section ‘chapter’ in manual

    @ref{(pman)anode,cross ref name} cross ref name: (pman)anode @ref{(pman)anode,,title} (pman)anode @ref{(pman)anode,,,file name} (file name)anode @ref{(pman)anode,,,,manual} (pman)anode section ‘anode’ in manual @ref{(pman)anode,cross ref name,title,} cross ref name: (pman)anode @ref{(pman)anode,cross ref name,,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,,,manual} cross ref name: (pman)anode section ‘anode’ in manual @ref{(pman)anode,cross ref name,title,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,title,,manual} cross ref name: (pman)anode section ‘title’ in manual @ref{(pman)anode,cross ref name,title, file name, manual} cross ref name: (file name)anode section ‘title’ in manual @ref{(pman)anode,,title,file name} (file name)anode @ref{(pman)anode,,title,,manual} (pman)anode section ‘title’ in manual @ref{(pman)anode,,title, file name, manual} (file name)anode section ‘title’ in manual @ref{(pman)anode,,,file name,manual} (file name)anode section ‘anode’ in manual

    @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter @inforef{chapter} @inforef{chapter, cross ref name} @inforef{chapter,,file name} See (file name)chapter @inforef{node, cross ref name, file name} See cross ref name: (file name)node @inforef{node} @inforef{node, cross ref name} @inforef{node,,file name} See (file name)node @inforef{chapter, cross ref name, file name, spurious arg} See cross ref name: (file name, spurious arg)chapter

    @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} See a , in cross ref: (a comma, in file)s–ect,ion

    • a

    l–ine

    a
    b

    l–ine

    - a
    - b

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    \input texinfo @c -*-texinfo-*-
    
    @setfilename simplest.info
    
    @node Top
    
    This is a very simple texi manual @  <>.
    
    @bye
    
    in verbatim ''
    
    html ''

    majorheading

    chapheading

    heading

    subheading

    subsubheading

    @acronym{--a,an accronym @comma{} @enddots{}} –a (an accronym , ...) @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } É–. ,A. (Étude–, Autonome) @abbr{@'E--. @comma{}A.} É–. ,A.

    @math{--a@minus{} {\frac{1}{2}}} –a- \frac12

    @image{f-ile,,,alt@verb{:jk _" %}} altjk _" %@ @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} jk _" %@ in b " @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} altjk _" %@

    Somehow invalid use of @,:
    @, ,
    @,@"u @,"u

    Invalid use of @’:
    @’ ’
    @’@"u @'"u

    @dotless{truc} truc @dotless{ij} ij @dotless{--a} –a @dotless{a} a

    @TeX, but without brace TeX

    @# @#

    @w{--a} –a

    @image{,1--xt} @image{,,2--xt} @image{,,,3--xt}


    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    fun
    machin bidule chose and truc
    machin bidule chose and aftertruc
    machin bidule chose and {truc
    machin bidule chose and { and aftertruc
    followed by a commenttruc

    Various deff lines

    after a deff itemtruc

    @ref{node} @ref{node}

    @ref{,cross ref name} @ref{,cross ref name} @ref{,,title} @ref{,,title} @ref{,,,file name} (file name) @ref{,,,,manual} manual @ref{node,cross ref name} @ref{node,cross ref name} @ref{node,,title} @ref{node,,title} @ref{node,,,file name} (file name)node @ref{node,,,,manual} section ‘node’ in manual @ref{node,cross ref name,title,} @ref{node,cross ref name,title,} @ref{node,cross ref name,,file name} cross ref name: (file name)node @ref{node,cross ref name,,,manual} section ‘node’ in manual @ref{node,cross ref name,title,file name} cross ref name: (file name)node @ref{node,cross ref name,title,,manual} section ‘title’ in manual @ref{node,cross ref name,title, file name, manual} cross ref name: (file name)node section ‘title’ in manual @ref{node,,title,file name} (file name)node @ref{node,,title,,manual} section ‘title’ in manual @ref{chapter,,title, file name, manual} (file name)chapter section ‘title’ in manual @ref{node,,title, file name, manual} (file name)node section ‘title’ in manual @ref{node,,,file name,manual} (file name)node section ‘node’ in manual @ref{,cross ref name,title,} @ref{,cross ref name,title,} @ref{,cross ref name,,file name} cross ref name: (file name) @ref{,cross ref name,,,manual} manual @ref{,cross ref name,title,file name} cross ref name: (file name) @ref{,cross ref name,title,,manual} section ‘title’ in manual @ref{,cross ref name,title, file name, manual} cross ref name: (file name) section ‘title’ in manual @ref{,,title,file name} (file name) @ref{,,title,,manual} section ‘title’ in manual @ref{,,title, file name, manual} (file name) section ‘title’ in manual @ref{,,,file name,manual} (file name) manual

    @inforef{,cross ref name } @inforef{,,file name} @inforef{,cross ref name, file name} @inforef{}

    Normal text

    < > " & ’ ‘

    “simple-double–three—four—-”
    code: ``simple-double--three---four----''
    asis: “simple-double–three—four—-”
    strong: “simple-double–three—four—-”
    kbd: ``simple-double--three---four----''

    ‘‘simple-double--three—four—-’’

    @"u ü @"{U} Ü @~n ñ @^a â @’e é @=o ō @‘i ì @’{e} é @’{@dotless{i}} í @dotless{i} i @dotless{j} j @‘{@=E} Ē` @l{} ł @,{@’C} Ć, @,c ç @,c@"u çü

    @*
    @ followed by a space   @ followed by a tab   @ followed by a new line  @- @| @: @! ! @? ? @. . @@ @ @} } @{ { @/

    foo vs. bar. colon :And something else. semi colon ;. And ? ?. Now ! !@ but , ,

    @TeX TeX @LaTeX LaTeX @bullet • @copyright © @dots … @enddots ... @equiv ≡ @error error--> @expansion → @minus - @point ∗ @print -| @result ⇒ @today a sunny day @aa å @AA Å @ae æ @oe œ @AE Æ @OE Œ @o ø @O Ø @ss ß @l ł @L Ł @exclamdown ¡ @questiondown ¿ @pounds £ @registeredsymbol ® @ordf ª @ordm º @comma , @quotedblleft “ @quotedblright ” @quoteleft ‘ @quoteright ’ @quotedblbase „ @quotesinglbase ‚ @guillemetleft « @guillemetright » @guillemotleft « @guillemotright » @guilsinglleft ‹ @guilsinglright › @textdegree ° @euro € @arrow → @leq ≤ @geq ≥

    @acronym{--a,an accronym} –a (an accronym) @acronym{--a} –a @abbr{@'E--. @comma{}A., @'Etude Autonome } É–. ,A. (Étude Autonome) @abbr{@'E--. @comma{}A.} É–. ,A. @asis{--a} –a @b{--a} –a @cite{--a} –a @code{--a} --a @command{--a} --a @ctrl{--a} –a @dfn{--a} –a @dmn{--a} –a @email{--a,--b} –b @email{,--b} –b @email{--a} --a @emph{--a} –a @env{--a} --a @file{--a}--a@i{--a} –a @kbd{--a} --a @key{--a} <--a> @math{--a {\frac{1}{2}} @minus{}} –a \frac12 - @option{--a}--a@r{--a} –a @samp{--a}--a@sc{--a} –A @strong{--a} –a @t{--a} –a @sansserif{--a} –a @titlefont{--a}

    –a

    @indicateurl{--a} <--a> @uref{--a,--b} –b @uref{--a} --a @uref{,--b} –b @uref{--a,--b,--c} –c @uref{,--b,--c} –c @uref{--a,,--c} –c @uref{,,--c} –c @url{--a,--b} –b @url{--a,} --a @url{,--b} –b @var{--a} –a @verb{:--a:} --a @verb{:a < & @ % " -- b:} a < & @ % " -- b @w{} @H{a} a'' @H{--a} –a'' @dotaccent{a} ȧ @dotaccent{--a} –a. @ringaccent{a} å @ringaccent{--a} –a* @tieaccent{a} a[ @tieaccent{--a} –a[ @u{a} ă @u{--a} –a( @ubaraccent{a} a_ @ubaraccent{--a} –a_ @udotaccent{a}@udotaccent{--a} .–a @v{a} a< @v{--a} –a< @,{c} ç @,{--c} –c, @ogonek{a} ą @ogonek{--a} –a; @footnote{in footnote} (1) @footnote{in footnote2} (2)

    @image{f--ile} f--ile @image{f--ile,l--i} f--ile @image{f--ile,,l--e} f--ile @image{f--ile,,,alt} alt @image{f--ile,,,,e-d-xt} f--ile @image{f--ile,aze,az,alt,e--xt} alt @image{f-ile,aze,,a--lt} a–lt @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} alt



    @clicksequence{click @click{} A} click → A After clickstyle ⇒ @clicksequence{click @click{} A} click ⇒ A

    A quot—ation

    Note: A Note

    note: A note

    Caution: Caution

    Important: Important

    Tip: a Tip

    Warning: a Warning.

    something é TeX: The something é TeX is here.

    @ at the end of line A @ at the end of the @quotation line.

    something, other thing: something, other thing

    Note, the note: Note, the note

    Empty:

    :


    :

    A small quot—ation

    Note: A small Note

    something, other thing: something, other thing

    • i–temize
    • + i–tem +
    • b–ullet
    • - minu–s
    • e–mph item
    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
    trucbidule
     
    e--xample  some
       text
    
     
    s--mallexample
    
     
    d–isplay
    
     
    s–malldisplay
    
     
    l--isp
    
     
    s--malllisp
    
     
    f–ormat
    
     
    s–mallformat
    
    d--effn_name a--rguments...c--ategory

    d–effn

    de--ffn_name ar--guments more args
    even more so
    cate--gory

    def–fn

    i a gfset
    truccmde
    log trapCommand
    log trap1Command
    log trap2 Command
    id ule truccmde
    id ‘i’ ule truccmde2
    id ‘i’ ule
    aaa
    machin
    bidule machin
    machintruc
    truc
    followed by a commenttruc
    truc
    a b c d e f g h itruc
    deffnx before end deffntruc
    deffnempty
    deffn with deffnxempty
    deffnxempty
    i a gfset
    truccmde

    text in def item for second def item

    d--efvr_namec--ategory

    d–efvr

    t--ype d--eftypefn_name a--rguments...c--ategory

    d–eftypefn

    t--ype d--eftypeop_name a--rguments...c--ategory on c--lass

    d–eftypeop

    t--ype d--eftypevr_namec--ategory

    d–eftypevr

    d--efcv_namec--ategory of c--lass

    d–efcv

    d--efop_name a--rguments...c--ategory on c--lass

    d–efop

    d--eftp_name a--ttributes...c--ategory

    d–eftp

    d--efun_name a--rguments...Function

    d–efun

    d--efmac_name a--rguments...Macro

    d–efmac

    d--efspec_name a--rguments...Special Form

    d–efspec

    d--efvar_name argvar argvar1Variable

    d–efvar

    d--efopt_nameUser Option

    d–efopt

    t--ype d--eftypefun_name a--rguments...Function

    d–eftypefun

    t--ype d--eftypevar_nameVariable

    d–eftypevar

    d--efivar_nameInstance Variable of c--lass

    d–efivar

    t--ype d--eftypeivar_nameInstance Variable of c--lass

    d–eftypeivar

    d--efmethod_name a--rguments...Method on c--lass

    d–efmethod

    t--ype d--eftypemethod_name a--rguments...Method on c--lass

    d–eftypemethod

    @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} See cross r—ef name@: (file n—ame@)c—hapter@ section ‘t—itle@’ in ma—nual@. @ref{chapter, cross ref name, title, file name, manual} cross ref name: (file name)chapter section ‘title’ in manual @pxref{chapter, cross ref name, title, file name, manual} see cross ref name: (file name)chapter section ‘title’ in manual @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter

    @ref{chapter} chapter @xref{chapter} See chapter. @pxref{chapter} see chapter @ref{s--ect@comma{}ion} s--ect,ion

    @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } a , in cross ref: (a comma, in file)s–ect,ion section ‘a comma, in title’ in a , in manual name

    @ref{chapter,cross ref name} cross ref name @ref{chapter,,title} title @ref{chapter,,,file name} (file name)chapter @ref{chapter,,,,manual} section ‘chapter’ in manual @ref{chapter,cross ref name,title,} title @ref{chapter,cross ref name,,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,,,manual} section ‘chapter’ in manual @ref{chapter,cross ref name,title,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,title,,manual} section ‘title’ in manual @ref{chapter,cross ref name,title, file name, manual} cross ref name: (file name)chapter section ‘title’ in manual @ref{chapter,,title,file name} (file name)chapter @ref{chapter,,title,,manual} section ‘title’ in manual @ref{chapter,,title, file name, manual} (file name)chapter section ‘title’ in manual @ref{chapter,,,file name,manual} (file name)chapter section ‘chapter’ in manual

    @ref{(pman)anode,cross ref name} cross ref name: (pman)anode @ref{(pman)anode,,title} (pman)anode @ref{(pman)anode,,,file name} (file name)anode @ref{(pman)anode,,,,manual} (pman)anode section ‘anode’ in manual @ref{(pman)anode,cross ref name,title,} cross ref name: (pman)anode @ref{(pman)anode,cross ref name,,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,,,manual} cross ref name: (pman)anode section ‘anode’ in manual @ref{(pman)anode,cross ref name,title,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,title,,manual} cross ref name: (pman)anode section ‘title’ in manual @ref{(pman)anode,cross ref name,title, file name, manual} cross ref name: (file name)anode section ‘title’ in manual @ref{(pman)anode,,title,file name} (file name)anode @ref{(pman)anode,,title,,manual} (pman)anode section ‘title’ in manual @ref{(pman)anode,,title, file name, manual} (file name)anode section ‘title’ in manual @ref{(pman)anode,,,file name,manual} (file name)anode section ‘anode’ in manual

    @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter @inforef{chapter} @inforef{chapter, cross ref name} @inforef{chapter,,file name} See (file name)chapter @inforef{node, cross ref name, file name} See cross ref name: (file name)node @inforef{node} @inforef{node, cross ref name} @inforef{node,,file name} See (file name)node @inforef{chapter, cross ref name, file name, spurious arg} See cross ref name: (file name, spurious arg)chapter

    @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} See a , in cross ref: (a comma, in file)s–ect,ion

    • a

    l–ine

    a
    b

    l–ine

    - a
    - b

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    \input texinfo @c -*-texinfo-*-
    
    @setfilename simplest.info
    
    @node Top
    
    This is a very simple texi manual @  <>.
    
    @bye
    
    in verbatim ''
    
    html ''

    majorheading

    chapheading

    heading

    subheading

    subsubheading

    @acronym{--a,an accronym @comma{} @enddots{}} –a (an accronym , ...) @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } É–. ,A. (Étude–, Autonome) @abbr{@'E--. @comma{}A.} É–. ,A.

    @math{--a@minus{} {\frac{1}{2}}} –a- \frac12

    @image{f-ile,,,alt@verb{:jk _" %}} altjk _" %@ @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} jk _" %@ in b " @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} altjk _" %@

    Somehow invalid use of @,:
    @, ,
    @,@"u @,"u

    Invalid use of @’:
    @’ ’
    @’@"u @'"u

    @dotless{truc} truc @dotless{ij} ij @dotless{--a} –a @dotless{a} a

    @TeX, but without brace TeX

    @# @#

    @w{--a} –a

    @image{,1--xt} @image{,,2--xt} @image{,,,3--xt}


    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    fun
    machin bidule chose and truc
    machin bidule chose and aftertruc
    machin bidule chose and {truc
    machin bidule chose and { and aftertruc
    followed by a commenttruc

    Various deff lines

    after a deff itemtruc

    @ref{node} @ref{node}

    @ref{,cross ref name} @ref{,cross ref name} @ref{,,title} @ref{,,title} @ref{,,,file name} (file name) @ref{,,,,manual} manual @ref{node,cross ref name} @ref{node,cross ref name} @ref{node,,title} @ref{node,,title} @ref{node,,,file name} (file name)node @ref{node,,,,manual} section ‘node’ in manual @ref{node,cross ref name,title,} @ref{node,cross ref name,title,} @ref{node,cross ref name,,file name} cross ref name: (file name)node @ref{node,cross ref name,,,manual} section ‘node’ in manual @ref{node,cross ref name,title,file name} cross ref name: (file name)node @ref{node,cross ref name,title,,manual} section ‘title’ in manual @ref{node,cross ref name,title, file name, manual} cross ref name: (file name)node section ‘title’ in manual @ref{node,,title,file name} (file name)node @ref{node,,title,,manual} section ‘title’ in manual @ref{chapter,,title, file name, manual} (file name)chapter section ‘title’ in manual @ref{node,,title, file name, manual} (file name)node section ‘title’ in manual @ref{node,,,file name,manual} (file name)node section ‘node’ in manual @ref{,cross ref name,title,} @ref{,cross ref name,title,} @ref{,cross ref name,,file name} cross ref name: (file name) @ref{,cross ref name,,,manual} manual @ref{,cross ref name,title,file name} cross ref name: (file name) @ref{,cross ref name,title,,manual} section ‘title’ in manual @ref{,cross ref name,title, file name, manual} cross ref name: (file name) section ‘title’ in manual @ref{,,title,file name} (file name) @ref{,,title,,manual} section ‘title’ in manual @ref{,,title, file name, manual} (file name) section ‘title’ in manual @ref{,,,file name,manual} (file name) manual

    @inforef{,cross ref name } @inforef{,,file name} @inforef{,cross ref name, file name} @inforef{}

    In example.

     
    <
    >
    "
    &
    '
    `
    
    ``simple-double--three---four----''
    
    code: ``simple-double--three---four----'' 
    
    asis: ``simple-double--three---four----'' 
    
    strong: ``simple-double--three---four----'' 
    
    kbd: ``simple-double--three---four----'' 
    
    
    ``simple-double--three---four----''
    
    
    
    @"u ü 
    @"{U} Ü 
    @~n ñ
    @^a â
    @'e é
    @=o ō
    @`i ì
    @'{e} é
    @'{@dotless{i}} í 
    @dotless{i} i
    @dotless{j} j
    @`{@=E} Ē` 
    @l{} ł
    @,{@'C} Ć,
    @,c ç
    @,c@"u çü 
    
    
    @* 
    
    @ followed by a space
     
    @ followed by a tab
     
    @ followed by a new line
     @- 
    @| 
    @: 
    @! !
    @? ?
    @. .
    @@ @
    @} }
    @{ {
    @/ 
    
    foo vs. bar. 
    colon :And something else.
    semi colon ;.
    And ? ?.
    Now ! !@
    but , ,
    
    @TeX TeX
    @LaTeX LaTeX
    @bullet •
    @copyright ©
    @dots …
    @enddots ...
    @equiv ≡
    @error error-->
    @expansion →
    @minus -
    @point ∗
    @print -|
    @result ⇒
    @today a sunny day
    @aa å
    @AA Å
    @ae æ
    @oe œ
    @AE Æ
    @OE Œ
    @o ø
    @O Ø
    @ss ß
    @l ł
    @L Ł
    @exclamdown ¡
    @questiondown ¿
    @pounds £
    @registeredsymbol ®
    @ordf ª
    @ordm º
    @comma ,
    @quotedblleft “
    @quotedblright ”
    @quoteleft ‘
    @quoteright ’
    @quotedblbase „
    @quotesinglbase ‚
    @guillemetleft «
    @guillemetright »
    @guillemotleft «
    @guillemotright »
    @guilsinglleft ‹
    @guilsinglright ›
    @textdegree °
    @euro €
    @arrow →
    @leq ≤
    @geq ≥
    
    @acronym{--a,an accronym} --a (an accronym)
    @acronym{--a} --a
    @abbr{@'E--. @comma{}A., @'Etude Autonome } É--. ,A. (Étude Autonome)
    @abbr{@'E--. @comma{}A.} É--. ,A.
    @asis{--a} --a
    @b{--a} --a
    @cite{--a} --a
    @code{--a} --a
    @command{--a} --a
    @ctrl{--a} --a
    @dfn{--a} --a
    @dmn{--a} --a
    @email{--a,--b} --b
    @email{,--b} --b
    @email{--a} --a
    @emph{--a} --a
    @env{--a} --a
    @file{--a}--a@i{--a} --a
    @kbd{--a} --a
    @key{--a} <--a>
    @math{--a {\frac{1}{2}} @minus{}} --a \frac12 -
    @option{--a}--a@r{--a} --a
    @samp{--a}--a@sc{--a} --A
    @strong{--a} --a
    @t{--a} --a
    @sansserif{--a} --a
    @titlefont{--a} --a
    @indicateurl{--a} <--a>
    @uref{--a,--b} --b
    @uref{--a} --a
    @uref{,--b} --b
    @uref{--a,--b,--c} --c
    @uref{,--b,--c} --c
    @uref{--a,,--c} --c
    @uref{,,--c} --c
    @url{--a,--b} --b
    @url{--a,} --a
    @url{,--b} --b
    @var{--a} --a
    @verb{:--a:} --a
    @verb{:a  < & @ % " --    b:} a  < & @ % " --    b
    @w{} 
    @H{a} a''
    @H{--a} --a''
    @dotaccent{a} ȧ
    @dotaccent{--a} --a.
    @ringaccent{a} å
    @ringaccent{--a} --a*
    @tieaccent{a} a[
    @tieaccent{--a} --a[
    @u{a} ă
    @u{--a} --a(
    @ubaraccent{a} a_
    @ubaraccent{--a} --a_
    @udotaccent{a}@udotaccent{--a} .--a
    @v{a} a<
    @v{--a} --a<
    @,{c} ç
    @,{--c} --c,
    @ogonek{a} ą
    @ogonek{--a} --a;
    @footnote{in footnote} (3)
    @footnote{in footnote2} (4)
    
    @image{f--ile} [ f--ile ]
    @image{f--ile,l--i} [ f--ile ]
    @image{f--ile,,l--e} [ f--ile ]
    @image{f--ile,,,alt} [ alt ]
    @image{f--ile,,,,e-d-xt} [ f--ile ]
    @image{f--ile,aze,az,alt,e--xt} [ alt ]
    @image{f-ile,aze,,a--lt} [ a–lt ]
    @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} [ alt ]
    
    
    
    
    @clicksequence{click @click{} A} click → A
    After clickstyle ⇒
    @clicksequence{click @click{} A} click ⇒ A
    
    
    A quot---ation
    
    Note: A Note
    
    note: A note
    
    Caution: Caution
    
    Important: Important
    
    Tip: a Tip
    
    Warning: a Warning.
    
    something é TeX: The something é TeX is here.
    
    @ at the end of line  A @ at the end of the @quotation line.
    
    something, other thing: something, other thing
    
    Note, the note: Note, the note
    
    Empty: 
    : 
    
    : 
    A small quot---ation
    
    Note: A small Note
    
    something, other thing: something, other thing
    
    •  i--temize
      
    •  +  i--tem +
      
    •  b--ullet
      
    • -
       minu--s
      
    •  e--mph item
      
    •  after emph  e--mph item
      
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    
    lone mu--ltitable item
    truc
    bidule
     
    e--xample  some
       text
    
     
    s--mallexample
    
     
    d--isplay
    
     
    s--malldisplay
    
     
    l--isp
    
     
    s--malllisp
    
     
    f--ormat
    
     
    s--mallformat
    
    d--effn_name a--rguments...c--ategory
    d--effn
    
    de--ffn_name ar--guments more args even more socate--gory
    def--fn
    
     
    
    i a gfset
    truccmde
    log trapCommand
    log trap1Command
    log trap2 Command
    id ule truccmde
    id ‘i’ ule truccmde2
    id ‘i’ ule
    aaa
    machin
    bidule machin
    machintruc
    truc
    followed by a commenttruc
    truc
    a b c d e f g h itruc
    deffnx before end deffntruc
    deffnempty
    deffn with deffnxempty
    deffnxempty
    i a gfset
    truccmde
    text in def item for second def item
    
    d--efvr_namec--ategory
    d--efvr
    
    t--ype d--eftypefn_name a--rguments...c--ategory
    d--eftypefn
    
    t--ype d--eftypeop_name a--rguments...c--ategory on c--lass
    d--eftypeop
    
    t--ype d--eftypevr_namec--ategory
    d--eftypevr
    
    d--efcv_namec--ategory of c--lass
    d--efcv
    
    d--efop_name a--rguments...c--ategory on c--lass
    d--efop
    
    d--eftp_name a--ttributes...c--ategory
    d--eftp
    
    d--efun_name a--rguments...Function
    d--efun
    
    d--efmac_name a--rguments...Macro
    d--efmac
    
    d--efspec_name a--rguments...Special Form
    d--efspec
    
    d--efvar_name argvar argvar1Variable
    d--efvar
    
    d--efopt_nameUser Option
    d--efopt
    
    t--ype d--eftypefun_name a--rguments...Function
    d--eftypefun
    
    t--ype d--eftypevar_nameVariable
    d--eftypevar
    
    d--efivar_nameInstance Variable of c--lass
    d--efivar
    
    t--ype d--eftypeivar_nameInstance Variable of c--lass
    d--eftypeivar
    
    d--efmethod_name a--rguments...Method on c--lass
    d--efmethod
    
    t--ype d--eftypemethod_name a--rguments...Method on c--lass
    d--eftypemethod
    
    @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} See cross r---ef name@: (file n---ame@)c---hapter@ section `t---itle@' in ma---nual@.
    @ref{chapter, cross ref name, title, file name, manual} cross ref name: (file name)chapter section `title' in manual
    @pxref{chapter, cross ref name, title, file name, manual} see cross ref name: (file name)chapter section `title' in manual
    @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter
    
    @ref{chapter} chapter
    @xref{chapter} See chapter.
    @pxref{chapter} see chapter
    @ref{s--ect@comma{}ion} s--ect,ion
    
    @ref{s--ect@comma{}ion, a @comma{} in cross
    ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name }
    a , in cross ref: (a comma, in file)s--ect,ion section `a comma, in title' in a , in manual name
    
    @ref{chapter,cross ref name} cross ref name
    @ref{chapter,,title} title
    @ref{chapter,,,file name} (file name)chapter
    @ref{chapter,,,,manual} section `chapter' in manual
    @ref{chapter,cross ref name,title,} title
    @ref{chapter,cross ref name,,file name} cross ref name: (file name)chapter
    @ref{chapter,cross ref name,,,manual} section `chapter' in manual
    @ref{chapter,cross ref name,title,file name} cross ref name: (file name)chapter
    @ref{chapter,cross ref name,title,,manual} section `title' in manual
    @ref{chapter,cross ref name,title, file name, manual} cross ref name: (file name)chapter section `title' in manual
    @ref{chapter,,title,file name} (file name)chapter
    @ref{chapter,,title,,manual} section `title' in manual
    @ref{chapter,,title, file name, manual} (file name)chapter section `title' in manual
    @ref{chapter,,,file name,manual} (file name)chapter section `chapter' in manual
    
    
    @ref{(pman)anode,cross ref name} cross ref name: (pman)anode
    @ref{(pman)anode,,title} (pman)anode
    @ref{(pman)anode,,,file name} (file name)anode
    @ref{(pman)anode,,,,manual} (pman)anode section `anode' in manual
    @ref{(pman)anode,cross ref name,title,} cross ref name: (pman)anode
    @ref{(pman)anode,cross ref name,,file name} cross ref name: (file name)anode
    @ref{(pman)anode,cross ref name,,,manual} cross ref name: (pman)anode section `anode' in manual
    @ref{(pman)anode,cross ref name,title,file name} cross ref name: (file name)anode
    @ref{(pman)anode,cross ref name,title,,manual} cross ref name: (pman)anode section `title' in manual
    @ref{(pman)anode,cross ref name,title, file name, manual} cross ref name: (file name)anode section `title' in manual
    @ref{(pman)anode,,title,file name} (file name)anode
    @ref{(pman)anode,,title,,manual} (pman)anode section `title' in manual
    @ref{(pman)anode,,title, file name, manual} (file name)anode section `title' in manual
    @ref{(pman)anode,,,file name,manual} (file name)anode section `anode' in manual
    
    
    @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter
    @inforef{chapter} 
    @inforef{chapter, cross ref name} 
    @inforef{chapter,,file name} See (file name)chapter
    @inforef{node, cross ref name, file name} See cross ref name: (file name)node
    @inforef{node} 
    @inforef{node, cross ref name} 
    @inforef{node,,file name} See (file name)node
    @inforef{chapter, cross ref name, file name, spurious arg} See cross ref name: (file name, spurious arg)chapter
    
    @inforef{s--ect@comma{}ion, a @comma{} in cross
    ref, a comma@comma{} in file}
    See a , in cross ref: (a comma, in file)s--ect,ion
    
    
    
    • a
    l--ine
    
    a
    b
    l--ine
    
    - a
    - b
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    \input texinfo @c -*-texinfo-*-
    
    @setfilename simplest.info
    
    @node Top
    
    This is a very simple texi manual @  <>.
    
    @bye
    
    in verbatim ''
    
    
    html ''
    
    
    
    majorheading
    
    
    chapheading
    
    
    heading
    
    
    subheading
    
    
    subsubheading
    
    
    @acronym{--a,an accronym @comma{} @enddots{}} --a (an accronym , ...)
    @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } É--. ,A. (Étude--, Autonome)
    @abbr{@'E--. @comma{}A.} É--. ,A.
    
    @math{--a@minus{} {\frac{1}{2}}} --a- \frac12
    
    @image{f-ile,,,alt@verb{:jk _" %}} [ altjk _" %@ ]
    @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} [ jk _" %@ in b " ]
    @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} [ altjk _" %@ ]
    
    
    
    
    Somehow invalid use of @,:
    
    @, ,
    
    
    @,@"u @,"u
    
    Invalid use of @':
    
    @' '
    
    
    @'@"u @'"u
    
    @dotless{truc} truc
    @dotless{ij} ij
    @dotless{--a} --a
    @dotless{a} a
    
    @TeX, but without brace TeX
    
    @# @#
    
    @w{--a} --a
    
    @image{,1--xt} 
    @image{,,2--xt} 
    @image{,,,3--xt} 
    
    
    
    
    • after emph  e--mph item
      
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    fun
    machin bidule chose and truc
    machin bidule chose and aftertruc
    machin bidule chose and {truc
    machin bidule chose and { and aftertruc
    followed by a commenttruc
    Various deff lines
    
    after a deff itemtruc
    @ref{node} @ref{node}
    
    @ref{,cross ref name} @ref{,cross ref name}
    @ref{,,title} @ref{,,title}
    @ref{,,,file name} (file name)
    @ref{,,,,manual} manual
    @ref{node,cross ref name} @ref{node,cross ref name}
    @ref{node,,title} @ref{node,,title}
    @ref{node,,,file name} (file name)node
    @ref{node,,,,manual} section `node' in manual
    @ref{node,cross ref name,title,} @ref{node,cross ref name,title,}
    @ref{node,cross ref name,,file name} cross ref name: (file name)node
    @ref{node,cross ref name,,,manual} section `node' in manual
    @ref{node,cross ref name,title,file name} cross ref name: (file name)node
    @ref{node,cross ref name,title,,manual} section `title' in manual
    @ref{node,cross ref name,title, file name, manual} cross ref name: (file name)node section `title' in manual
    @ref{node,,title,file name} (file name)node
    @ref{node,,title,,manual} section `title' in manual
    @ref{chapter,,title, file name, manual} (file name)chapter section `title' in manual
    @ref{node,,title, file name, manual} (file name)node section `title' in manual
    @ref{node,,,file name,manual} (file name)node section `node' in manual
    @ref{,cross ref name,title,} @ref{,cross ref name,title,}
    @ref{,cross ref name,,file name} cross ref name: (file name)
    @ref{,cross ref name,,,manual} manual
    @ref{,cross ref name,title,file name} cross ref name: (file name)
    @ref{,cross ref name,title,,manual} section `title' in manual
    @ref{,cross ref name,title, file name, manual} cross ref name: (file name) section `title' in manual
    @ref{,,title,file name} (file name)
    @ref{,,title,,manual} section `title' in manual
    @ref{,,title, file name, manual} (file name) section `title' in manual
    @ref{,,,file name,manual} (file name) manual
    
    @inforef{,cross ref name } 
    @inforef{,,file name} 
    @inforef{,cross ref name, file name} 
    @inforef{} 
    
    
    

    cp

    Jump to:   "   -   .   ?  
    A   I   T  
    Index Entry Section

    "
    Top section
    Top section
    subsubheading
    subsubheading

    -
    –optionTop section
    –optionTop section
    –optionsubsubheading
    –optionsubsubheading

    .
    .subsubheading

    ?
    ?subsubheading

    A
    asubsubheading

    I
    index entry between item and itemxTop section
    index entry between item and itemxTop section
    index entry between item and itemxsubsubheading
    index entry between item and itemxsubsubheading
    index entry within deffnTop section
    index entry within deffnTop section
    index entry within deffnsubsubheading
    index entry within deffnsubsubheading
    index entry within itemizeTop section
    index entry within itemizeTop section
    index entry within itemizesubsubheading
    index entry within itemizesubsubheading
    index entry within multitableTop section
    index entry within multitableTop section
    index entry within multitablesubsubheading
    index entry within multitablesubsubheading

    T
    t–rucsubsubheading
    T–rucsubsubheading

    Jump to:   "   -   .   ?  
    A   I   T  

    fn

    Jump to:   "   -   .   ?  
    A   B   D   F   I   L   M   T  
    Index Entry Section

    "
    ``Top section
    ``Top section
    ``subsubheading
    ``subsubheading

    -
    --foptionTop section
    --foptionTop section
    --foptionsubsubheading
    --foptionsubsubheading

    .
    .subsubheading

    ?
    ?subsubheading

    A
    aTop section
    aTop section
    aTop section
    aTop section
    asubsubheading
    asubsubheading
    asubsubheading
    asubsubheading
    asubsubheading
    afterTop section
    afterTop section
    aftersubsubheading
    aftersubsubheading

    B
    bTop section
    bTop section
    bsubsubheading
    bsubsubheading
    bidule machinTop section
    bidule machinTop section
    bidule machinsubsubheading
    bidule machinsubsubheading

    D
    d--effn_nameTop section
    d--effn_nameTop section
    d--effn_namesubsubheading
    d--effn_namesubsubheading
    d--efmac_nameTop section
    d--efmac_nameTop section
    d--efmac_namesubsubheading
    d--efmac_namesubsubheading
    d--efmethod_name on c--lassTop section
    d--efmethod_name on c--lassTop section
    d--efmethod_name on c--lasssubsubheading
    d--efmethod_name on c--lasssubsubheading
    d--efop_name on c--lassTop section
    d--efop_name on c--lassTop section
    d--efop_name on c--lasssubsubheading
    d--efop_name on c--lasssubsubheading
    d--efspec_nameTop section
    d--efspec_nameTop section
    d--efspec_namesubsubheading
    d--efspec_namesubsubheading
    d--eftypefn_nameTop section
    d--eftypefn_nameTop section
    d--eftypefn_namesubsubheading
    d--eftypefn_namesubsubheading
    d--eftypefun_nameTop section
    d--eftypefun_nameTop section
    d--eftypefun_namesubsubheading
    d--eftypefun_namesubsubheading
    d--eftypemethod_name on c--lassTop section
    d--eftypemethod_name on c--lassTop section
    d--eftypemethod_name on c--lasssubsubheading
    d--eftypemethod_name on c--lasssubsubheading
    d--eftypeop_name on c--lassTop section
    d--eftypeop_name on c--lassTop section
    d--eftypeop_name on c--lasssubsubheading
    d--eftypeop_name on c--lasssubsubheading
    d--efun_nameTop section
    d--efun_nameTop section
    d--efun_namesubsubheading
    d--efun_namesubsubheading
    de--ffn_nameTop section
    de--ffn_nameTop section
    de--ffn_namesubsubheading
    de--ffn_namesubsubheading
    deffnTop section
    deffnTop section
    deffnTop section
    deffnTop section
    deffnsubsubheading
    deffnsubsubheading
    deffnsubsubheading
    deffnsubsubheading
    deffnxTop section
    deffnxTop section
    deffnxTop section
    deffnxTop section
    deffnxsubsubheading
    deffnxsubsubheading
    deffnxsubsubheading
    deffnxsubsubheading

    F
    followedTop section
    followedTop section
    followedTop section
    followedTop section
    followedsubsubheading
    followedsubsubheading
    followedsubsubheading
    followedsubsubheading

    I
    iTop section
    iTop section
    iTop section
    iTop section
    isubsubheading
    isubsubheading
    isubsubheading
    isubsubheading
    id ‘i’ uleTop section
    id ‘i’ uleTop section
    id ‘i’ ulesubsubheading
    id ‘i’ ulesubsubheading
    id uleTop section
    id uleTop section
    id ulesubsubheading
    id ulesubsubheading

    L
    log trapTop section
    log trapTop section
    log trapsubsubheading
    log trapsubsubheading
    log trap1Top section
    log trap1Top section
    log trap1subsubheading
    log trap1subsubheading
    log trap2Top section
    log trap2Top section
    log trap2subsubheading
    log trap2subsubheading

    M
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading

    T
    t--rucsubsubheading
    T--rucsubsubheading
    trucTop section
    trucTop section
    trucTop section
    trucTop section
    trucsubsubheading
    trucsubsubheading
    trucsubsubheading
    trucsubsubheading

    Jump to:   "   -   .   ?  
    A   B   D   F   I   L   M   T  

    vr

    Jump to:   A   B   D  
    Index Entry Section

    A
    aTop section
    aTop section
    asubsubheading
    asubsubheading

    B
    bTop section
    bTop section
    bsubsubheading
    bsubsubheading

    D
    d--efcv_nameTop section
    d--efcv_nameTop section
    d--efcv_namesubsubheading
    d--efcv_namesubsubheading
    d--efivar_nameTop section
    d--efivar_nameTop section
    d--efivar_namesubsubheading
    d--efivar_namesubsubheading
    d--efopt_nameTop section
    d--efopt_nameTop section
    d--efopt_namesubsubheading
    d--efopt_namesubsubheading
    d--eftypeivar_name of c--lassTop section
    d--eftypeivar_name of c--lassTop section
    d--eftypeivar_name of c--lasssubsubheading
    d--eftypeivar_name of c--lasssubsubheading
    d--eftypevar_nameTop section
    d--eftypevar_nameTop section
    d--eftypevar_namesubsubheading
    d--eftypevar_namesubsubheading
    d--eftypevr_nameTop section
    d--eftypevr_nameTop section
    d--eftypevr_namesubsubheading
    d--eftypevr_namesubsubheading
    d--efvar_nameTop section
    d--efvar_nameTop section
    d--efvar_namesubsubheading
    d--efvar_namesubsubheading
    d--efvr_nameTop section
    d--efvr_nameTop section
    d--efvr_namesubsubheading
    d--efvr_namesubsubheading

    Jump to:   A   B   D  

    ky

    pg

    tp

    Jump to:   D  
    Index Entry Section

    D
    d--eftp_nameTop section
    d--eftp_nameTop section
    d--eftp_namesubsubheading
    d--eftp_namesubsubheading

    Jump to:   D  

    Footnotes

    (1)

    in footnote

    (2)

    in footnote2

    (1)

    in footnote

    (2)

    in footnote2

    (3)

    in footnote

    (4)

    in footnote2


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/formatting_exotic/formatting_1.html0000644000175000017500000003254011264347122027330 0ustar flichtenheldflichtenheld title –a: chapter
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    chapter

    (5)

     

    Footnotes

    (5)

    in footnote


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/formatting_exotic/formatting_toc.html0000644000175000017500000003075411264347122027762 0ustar flichtenheldflichtenheld title –a: Table of Contents
    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_no_header_vertical/0000755000175000017500000000000011264347122026353 5ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation_no_header_vertical/navigation.html0000644000175000017500000000714711264347122031411 0ustar flichtenheldflichtenheld Untitled Document

    File used for navigation testing


    1. First chapter


    1.1 Section in chapter

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b bb b b b b b b bb b bb.


    1.1.1 Sub section in section


    Table of Contents


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_no_header_vertical/navigation.20000644000175000017500000000000011264347122030563 0ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation_chapter_no_header/0000755000175000017500000000000011264347122026170 5ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation_chapter_no_header/navigation.html0000644000175000017500000000601411264347122031216 0ustar flichtenheldflichtenheld Untitled Document: File used for navigation testing
    [Top] [Contents] [Index] [ ? ]

    File used for navigation testing


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_chapter_no_header/navigation_1.html0000644000175000017500000001105411264347122031436 0ustar flichtenheldflichtenheld Untitled Document: 1. First chapter
    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    1. First chapter


    1.1 Section in chapter

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b bb b b b b b b bb b bb.


    1.1.1 Sub section in section


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_chapter_no_header/navigation.20000644000175000017500000000000011264347122030400 0ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation_chapter_no_header/navigation_abt.html0000644000175000017500000001214611264347122032047 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_chapter_no_header/navigation_toc.html0000644000175000017500000000615111264347122032065 0ustar flichtenheldflichtenheld Untitled Document: Table of Contents
    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_node_no_header_vertical/0000755000175000017500000000000011264347122027360 5ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation_node_no_header_vertical/navigation.html0000644000175000017500000000554211264347122032413 0ustar flichtenheldflichtenheld Untitled Document: File used for navigation testing
    [Top]
    [Contents]
    [Index]
    [ ? ]

    File used for navigation testing


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_node_no_header_vertical/navigation_1.html0000644000175000017500000000641511264347122032633 0ustar flichtenheldflichtenheld Untitled Document: 1. First chapter
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. First chapter

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_node_no_header_vertical/navigation.20000644000175000017500000000000011264347122031570 0ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation_node_no_header_vertical/navigation_3.html0000644000175000017500000000606311264347122032634 0ustar flichtenheldflichtenheld Untitled Document: 1.1.1 Sub section in section
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.1 Sub section in section

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_node_no_header_vertical/navigation_2.html0000644000175000017500000000717011264347122032633 0ustar flichtenheldflichtenheld Untitled Document: 1.1 Section in chapter
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 Section in chapter

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b bb b b b b b b bb b bb.

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_node_no_header_vertical/navigation_abt.html0000644000175000017500000001170011264347122033232 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top]
    [Contents]
    [Index]
    [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_node_no_header_vertical/navigation_toc.html0000644000175000017500000000570311264347122033257 0ustar flichtenheldflichtenheld Untitled Document: Table of Contents
    [Top]
    [Contents]
    [Index]
    [ ? ]

    Table of Contents


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/texi_no_monolithic/0000755000175000017500000000000011264347122024211 5ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/texi_no_monolithic/no_monolithic.passtexi0000644000175000017500000000145011264347122030634 0ustar flichtenheldflichtenheldno_monolithic.texi(,2) no_monolithic.texi(,3) @setfilename no_monolithic.info no_monolithic.texi(,4) no_monolithic.texi(,5) @node Top no_monolithic.texi(,6) @top Not monolithic no_monolithic.texi(,7) no_monolithic.texi(,8) Not monolitic manual@footnote{my footnote}. no_monolithic.texi(,9) no_monolithic.texi(,10) @cindex top no_monolithic.texi(,11) no_monolithic.texi(,12) @menu no_monolithic.texi(,13) * chapter:: no_monolithic.texi(,14) @end menu no_monolithic.texi(,15) no_monolithic.texi(,16) @node chapter no_monolithic.texi(,17) @chapter Chapter no_monolithic.texi(,18) no_monolithic.texi(,19) Chapter. no_monolithic.texi(,20) no_monolithic.texi(,21) @contents no_monolithic.texi(,22) @shortcontents no_monolithic.texi(,23) no_monolithic.texi(,24) @printindex cp no_monolithic.texi(,25) @bye texi2html-1.82/test/layout/res/texi_no_monolithic/no_monolithic.20000644000175000017500000000000011264347122027123 0ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/texi_no_monolithic/no_monolithic.texi0000644000175000017500000000042011264347122027741 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename no_monolithic.info @node Top @top Not monolithic Not monolitic manual@footnote{my footnote}. @cindex top @menu * chapter:: @end menu @node chapter @chapter Chapter Chapter. @contents @shortcontents @printindex cp @bye texi2html-1.82/test/layout/res/texi_no_monolithic/no_monolithic.passfirst0000644000175000017500000000145011264347122031012 0ustar flichtenheldflichtenheldno_monolithic.texi(,2) no_monolithic.texi(,3) @setfilename no_monolithic.info no_monolithic.texi(,4) no_monolithic.texi(,5) @node Top no_monolithic.texi(,6) @top Not monolithic no_monolithic.texi(,7) no_monolithic.texi(,8) Not monolitic manual@footnote{my footnote}. no_monolithic.texi(,9) no_monolithic.texi(,10) @cindex top no_monolithic.texi(,11) no_monolithic.texi(,12) @menu no_monolithic.texi(,13) * chapter:: no_monolithic.texi(,14) @end menu no_monolithic.texi(,15) no_monolithic.texi(,16) @node chapter no_monolithic.texi(,17) @chapter Chapter no_monolithic.texi(,18) no_monolithic.texi(,19) Chapter. no_monolithic.texi(,20) no_monolithic.texi(,21) @contents no_monolithic.texi(,22) @shortcontents no_monolithic.texi(,23) no_monolithic.texi(,24) @printindex cp no_monolithic.texi(,25) @bye texi2html-1.82/test/layout/res/navigation_no_header/0000755000175000017500000000000011264347122024462 5ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation_no_header/navigation.html0000644000175000017500000000705011264347122027511 0ustar flichtenheldflichtenheld Untitled Document

    File used for navigation testing


    1. First chapter


    1.1 Section in chapter

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b bb b b b b b b bb b bb.


    1.1.1 Sub section in section


    Table of Contents


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_no_header/navigation.20000644000175000017500000000000011264347122026672 0ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation_vertical/0000755000175000017500000000000011264347122024347 5ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation_vertical/navigation.html0000644000175000017500000002754311264347122027407 0ustar flichtenheldflichtenheld Untitled Document
    [Top]
    [Contents]
    [Index]
    [ ? ]

    File used for navigation testing


    [ < ]
    [ > ]
     
    [ << ]
    [ Up ]
    [ >> ]
     
     
     
     
    [Top]
    [Contents]
    [Index]
    [ ? ]

    1. First chapter


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 Section in chapter

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b bb b b b b b b bb b bb.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.1 Sub section in section


    [Top]
    [Contents]
    [Index]
    [ ? ]

    Table of Contents


    [Top]
    [Contents]
    [Index]
    [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_vertical/navigation.20000644000175000017500000000000011264347122026557 0ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/no_monolithic.texi0000644000175000017500000000042011264347122023256 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename no_monolithic.info @node Top @top Not monolithic Not monolitic manual@footnote{my footnote}. @cindex top @menu * chapter:: @end menu @node chapter @chapter Chapter Chapter. @contents @shortcontents @printindex cp @bye texi2html-1.82/test/layout/tests.txt0000644000175000017500000000375511264347122021443 0ustar flichtenheldflichtenheldtexi no_monolithic.texi texi navigation.texi texi formatting_regions.texi no_monolithic no_monolithic.texi -no-monolithic no_monolithic_only_toc_out no_monolithic.texi -no-monolithic -init only_toc_out.init navigation navigation.texi navigation_no_header navigation.texi --no-header navigation_noheaders_init navigation.texi -init noheaders.init navigation_vertical navigation.texi -init vertical_nav.init navigation_no_header_vertical navigation.texi -init vertical_nav.init --no-header navigation_chapter navigation.texi -split chapter navigation_section navigation.texi -split section navigation_node navigation.texi -split node navigation_chapter_no_header navigation.texi -split chapter -no-header navigation_section_no_header navigation.texi -split section -no-header navigation_node_no_header navigation.texi -split node -no-header navigation_chapter_noheaders_init navigation.texi -split chapter -init noheaders.init navigation_section_noheaders_init navigation.texi -split section -init noheaders.init navigation_node_noheaders_init navigation.texi -split node -init noheaders.init navigation_chapter_vertical navigation.texi -init vertical_nav.init -split chapter navigation_section_vertical navigation.texi -init vertical_nav.init -split section navigation_node_vertical navigation.texi -init vertical_nav.init -split node navigation_chapter_no_header_vertical navigation.texi -init vertical_nav.init -split chapter -no-header navigation_section_no_header_vertical navigation.texi -init vertical_nav.init -split section -no-header navigation_node_no_header_vertical navigation.texi -init vertical_nav.init -split node -no-header formatting_regions formatting_regions.texi formatting_exotic ../coverage/formatting.texi -split section -no-header -nonumber-sections -toc-links -def-table -short-ref -footnote-style=end --css-ref http://www.environnement.ens.fr/perso/dumas/background-color.css formatting_makeinfo ../coverage/formatting.texi -init makeinfo.init formatting_chm ../coverage/formatting.texi -init chm.init texi2html-1.82/test/layout/Makefile.am0000644000175000017500000000041411264347122021561 0ustar flichtenheldflichtenheldEXTRA_DIST = no_monolithic.texi navigation.texi formatting_regions.texi \ only_toc_out.init vertical_nav.init tests.txt res DISTCLEANFILES = l2h_tmp_dir.init tests.log tests.out distclean-local: rm -rf out diffs dist-hook: rm -rf `find $(distdir)/res -name CVS` texi2html-1.82/test/layout/navigation.texi0000644000175000017500000000106511264347122022562 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename navigation.info @node Top @top File used for navigation testing @menu * chapter:: @end menu @node chapter @chapter First chapter @menu * section:: @end menu @node section @section Section in chapter AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA AAAA b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b bb b b b b b b bb b bb. @menu * subsection:: @end menu @node subsection @subsection Sub section in section @contents @bye texi2html-1.82/test/macros/0000755000175000017500000000000011264347123017476 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/inc_@f--ile.texi0000644000175000017500000000002211264347123022365 0ustar flichtenheldflichtenheldIn included file. texi2html-1.82/test/macros/quote-args.texi0000644000175000017500000000054111264347123022460 0ustar flichtenheldflichtenheld\input texinfo @smallbook @setfilename quote-args.info @settitle Quote-args facility in macros @rmacro cat{a,b} \a\\b\ @end rmacro @macro FIXME{a} @strong{FIXME: \a\} @end macro @node Top, , (dir), (dir) @noindent @FIXME{Many arguments, separated by commas, are processed here} @cat{@cat{@cat{@cat{@cat{@cat{na, to}, po}, co}, tu}, oto},tam} @bye texi2html-1.82/test/macros/incl-incl.txi0000644000175000017500000000006711264347123022077 0ustar flichtenheldflichtenheldThis is the @emph{included} file (include-value2.txi). texi2html-1.82/test/macros/alias.texi0000644000175000017500000000075711264347123021473 0ustar flichtenheldflichtenheld\input texinfo @setfilename alias.info @top test alias @alias myalias = code @ignore @alias ignored = file @end ignore @macro mymacro{arg} before \arg\ after arg @end macro @mymacro{ @alias inmymacro = verb @ignore @alias ignoredinmymacro = file @end ignore } Should be code: @myalias{code} Should be verb: @inmymacro{!verb!} Should not be defined: @ignored{ignored} Should not be defined: @ignoredinmymacro{ignoredinmymacro} @table @myalias @item table item (code) @end table @bye texi2html-1.82/test/macros/inc_file.texi0000644000175000017500000000002211264347123022133 0ustar flichtenheldflichtenheldIn included file. texi2html-1.82/test/macros/macro_zero.texi0000644000175000017500000000026711264347123022536 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename macro_zero.info @node Top @top top macro/value is a zero @set zero 0 @macro zero 0 @end macro Macro @zero{} Value @value{zero} @bye texi2html-1.82/test/macros/macro_in_pass_texi_commands.texi0000644000175000017500000000113111264347123026114 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @macro begin_file macro_in_pass @end macro @macro end_file_name {ext} texi_commands.\ext\ @end macro @setfilename @begin_file{}@end_file_name{info} @macro definfoenclose_name phi @end macro @definfoenclose @definfoenclose_name{},:,: @macro latin1 ISO-8859-1 @end macro @macro documentencoding_command @documentencoding @end macro @documentencoding_command @latin1{} @macro multiinclude macro_included.texi @include inc_file.texi @end macro @node Top @top top @include @multiinclude @themacro macro_in_pass_texi_commands@{info@} @end_file_name{info} @bye texi2html-1.82/test/macros/nested_ignore.texi0000644000175000017500000000035211264347123023216 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @comment %**start of header @setfilename nested_ignore.info @node Top @top Top @ignore @ignore @end ignore @ignore @end iftex @ifinfo @end ignore @ignore @end ifclear @ifclear @end ignore @bye texi2html-1.82/test/macros/my-bib-macros.texi0000644000175000017500000001456211264347123023042 0ustar flichtenheldflichtenheld@c \input texinfo @c -*-texinfo-*- @c %% my-bib-macros.texi --- Texinfo macros providing a crude @c %% bibliography and citation capability. @c % Copyright (C) 2004 Aaron S. Hawley @c % Author: Aaron S. Hawley @c % Keywords: docs, texinfo, extensions, bib @c % This file is free software; you can redistribute it and/or modify @c % it under the terms of the GNU General Public License as published by @c % the Free Software Foundation; either version 2, or (at your option) @c % any later version. @c % This file is distributed in the hope that it will be useful, @c % but WITHOUT ANY WARRANTY; without even the implied warranty of @c % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @c % GNU General Public License for more details. @c % You should have received a copy of the GNU General Public License @c % along with texi2html; see the file COPYING. If not, write to @c % the Free Software Foundation, Inc., 59 Temple Place - Suite 330, @c % Boston, MA 02111-1307, USA. @c %% Commentary: @c %%% Introduction @c %% Creates references to a ``Bibliography'' or ``References'' @c %% section of a Texinfo document, using Texinfo's @c %% macro system. Although not as terse a way to cite systems as is @c %% found in document systems like TeX, the format is simpler and @c %% the rendering is easier for non-academic readers. @c % @c %%% Usage @c %% References to cited works can be put in any section of a document. @c %% The cited works must be put in either a Texinfo table (for @c %% instance with ``@table @asis ... @end table'') or within a @c %% Texinfo list (something like ``@enumerate ... @end enumerate'' @c %% or ``@itemize @bullet ... @end itemize''). They are created @c %% with the command ``@mybibitem{REF-NAME}''. To cite a reference @c %% with a @mybibitem use ``@mybibcite{REF-NAME}''. @c %% The beginning of a document must include (using the @include @c %% command) the file my-bib-macros.texi, which should be made @c %% available in the current directory of the parent file. A single @c %% call should be made to choose to use a list or a table. The @c %% command to chose is called @mybibuselist{NODE}, where NODE is @c %% the node containing the location where the references are listed. @c % @c %%% Example @c %% \input texinfo @c -*-texinfo-*- @c %% @comment %**start of header @c %% @setfilename my-file-with-bib.info @c %% @settitle Texinfo with a Bibliography and References @c %% @c %% @include my-bib-macros.texi @c %% @mybibuselist{References} @c %% @c %% @comment %**end of header @c %% @c %% @node Top @c %% @top Top @c %% @c %% @menu @c %% * Introduction:: @c %% * @mybibnode{}:: @c %% @c %% @end menu @c %% @c %% @node Introduction @c %% @chapter Introduction @c %% @c %% The ability of a documentation format to make cross references to a @c %% bibliography, a feature of LaTeX @mybibcite{LaTeX2e}, isn't @c %% currently supported in Texinfo. @c %% @c %% @node @mybibnode{} @c %% @chapter References @c %% @c %% @itemize @asis @c %% @c %% @mybibitem{LaTeX2e} Leslie Lamport, LaTeX User's Guide and @c %% Reference Manual, 2nd edition, Addison-Wesley, Reading, @c %% Massachusetts, 1994. @c %% @c %% @end itemize @c %% @c %% @bye @c %% @c %% This example produces (in Info): @c %% 1 Introduction @c %% ************** @c %% @c %% The ability of a documentation format to make cross @c %% references to a bibliography, a feature of LaTeX (See item @c %% [LaTeX2e] in *Note LaTeX2e: References.), is not currently @c %% supported in Texinfo. @c %% @c %% @c %% 2 References @c %% ************ @c %% @c %% [LaTeX2e] Leslie Lamport, LaTeX User's Guide and Reference @c %% Manual, 2nd edition, Addison-Wesley, Reading, @c %% Massachusetts, 1994. @c %% and (in printed output): @c %% 1 Introduction @c %% ************** @c %% @c %% The ability of a documentation format to make cross @c %% references to a bibliography, a feature of LaTeX (See item @c %% [LaTeX2e] in Chapter 2 [References], page 3.), is not @c %% currently supported in Texinfo. @c %% @c %% @c %% 2 References @c %% ************ @c %% @c %% [LaTeX2e] Leslie Lamport, LaTeX User's Guide and Reference @c %% Manual, 2nd edition, Addison-Wesley, Reading, @c %% Massachusetts, 1994. @c % @c %%% Notes @c %% The pointers to references will be functional in hypertext @c %% documentation (info, HTML, XML and others) and properly rendered @c %% in print documents, because they are implemented with Texinfo's @c %% cross referencing capabilities (using @anchor and @ref). Failures @c %% by an author to make proper references with ``my-bib-macros'' in @c %% their document will give cross referencing errors by Texinfo @c %% conversion tools. @c %% Only one ``Reference'' section is allowed per document. @c %% An improvement of this system would create cross references @c %% (with @xref) at each cited work to all the originating cross @c %% refererences. @c % @c %% Code: @c % Configuration Options @c %% @mybibsetrefnode : Defines the name of the node to contain @c %% references. @macro mybibsetrefnode{node} @set mybibrefnode \node\ @end macro @c %% @mybibnode{} : Macro to be placed at node containing references @c %% and calls to @mybibcite{} @macro mybibnode{} @value{mybibrefnode} @end macro @c %% @mybibusetable : Whether each @mybibitem will be put in a @c %% table. @macro mybibusetable{node} @set mybibtable true @ifset mybiblist @clear mybiblist @end ifset @mybibsetrefnode{\node\} @end macro @c %% @mybibuselist : Whether each @mybibitem will be put in a @c %% list. @macro mybibuselist{node} @set mybiblist true @ifset mybibtable @clear mybibtable @end ifset @mybibsetrefnode{\node\} @end macro @c %% @mybibcite{REF} : Cites the cross reference REF. @macro mybibcite{ref} @ifclear mybibrefnode @mybibmakeref{mybibsetrefnode was not used, \ref\} @end ifclear @c %**else if @ifset mybibrefnode @mybibmakeref{@mybibnode{}, \ref\} @end ifset @end macro @macro mybibmakeref{node, ref} (See item [\ref\] in @ref{\node\, \ref\}.) @end macro @c %% @mybibcite{REF} : Creates a cross referenced citation REF. @macro mybibitem{ref} @ifclear mybiblist @ifclear mybibtable @set mybiblist true @end ifclear @end ifclear @ifset mybiblist @item @anchor{\ref\}[\ref\] @end ifset @c %**else if @ifset mybibtable @item @anchor{\ref\}[\ref\] @end ifset @end macro @c %% my-bib-macros.texi ends here texi2html-1.82/test/macros/macro_in_misc.texi0000644000175000017500000000752411264347123023203 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename macro_in_misc.info @hyphenation{some-where be-low may-be to-morow } @macro text atext @end macro @node Top @top top @text{} @subheading Comment like: @text{} Text line followed by a comment on the same line and another below @c comment @text{} @c comment @text{} @macro pagesizes_arg 200mm,150mm @end macro @macro afourpaper_macro @afourpaper @end macro @pagesizes @pagesizes_arg{} @afourpaper_macro{} @headings on line following headings @text{} @oddfooting some text ignored @text{} @everyheading on line following everyheading @text{} @macro need_arg 0.1 @end macro @need @need_arg{} @macro raisesections_macro @raisesections @end macro @raisesections_macro{} @macro lowersections_macro @lowersections @end macro @lowersections_macro{} @c tex error: Use of \ doesn't match its definition. @ifnottex @@definfoenclose phoo,//,\\ @definfoenclose phoo,//,\\ @phoo{bar} @end ifnottex @macro definfoenclose_name phi @end macro @definfoenclose @definfoenclose_name{},:,: @c this is required @iftex @global@let@phi=@i @end iftex @phi{bar} @macro strong_macro @strong @end macro @macro strong_name strong @end macro @strong_macro{}{very strong} @definfoenclose @strong_name{},(@strong_name{}:,:) @strong_macro{}{ is it really strong? } @kbd{something before kbdinputstyle} @macro kbdinputstyle_arg code @end macro @kbdinputstyle @kbdinputstyle_arg{} @kbd{truc} @example @kbd{example} @end example @macro asis_arg asis @end macro @macro zero 0 @end macro @macro none_arg none @end macro @macro four 4 @end macro @macro six 6 @end macro @paragraphindent @asis_arg{} @paragraphindent @zero{} @paragraphindent @none_arg{} @paragraphindent @four{} @firstparagraphindent @none_arg{} @exampleindent @six{} @macro end_arg end @end macro @macro separate_arg separate @end macro @footnotestyle @end_arg{} @footnotestyle @separate_arg{} @macro latin1 ISO-8859-1 @end macro @documentencoding @latin1{} @macro on_arg on @end macro @macro off_arg off @end macro @frenchspacing @on_arg{} @frenchspacing @off_arg{} @c accepts 10 or 11 @macro ten 10 @end macro @fonttextsize @ten{} @c accept false or true @c makeinfo don't care about the arg and remove the remainiing of the line @macro false_arg false @end macro @macro true_arg true @end macro @allowcodebreaks @false_arg{} @code{false aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa} @allowcodebreaks @true_arg{} @code{true aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa} @subheading command removed @finalout @macro page_macro @page @end macro @macro noindent_macro @noindent @end macro @macro refill_macro @refill @end macro @@page @page_macro{} @@noindent @noindent_macro{} @@refill @refill_macro{} something @noindent_macro{} noindent at beginning of line @noindent_macro{} noindent on the preceding line @noindent_macro{} noindent after space at beginning of line @page page at beginning of line @page After page on it's own line. @@page @page_macro{} @@noindent @noindent_macro{} @@refill @refill_macro{} @macro contents_macro @contents @end macro @contents_macro{} @subheading special Only valid between iftex: @c @@vskip @vskip @@cropmarks @cropmarks Unknown ??? @c @@fillbreak @fillbreak eol @macro exdent_macro @exdent @end macro @exdent_macro{} line after exdent And now sp: @macro two 2 @end macro @sp @two{} @macro result_macro @result @end macro @clickstyle @result_macro{} @menu * node @text{}:: * bidule:: * bidule2:: @end menu @node node @text{} @chapter chapter @menu * truc:: @end menu @node truc @section section @contents_macro{} @node bidule @chapter bidule @macro shortcontents_macro @shortcontents @end macro @shortcontents_macro{} @node bidule2 @chapter last @bye texi2html-1.82/test/macros/defxcond.texi0000644000175000017500000000031011264347123022155 0ustar flichtenheldflichtenheld\input texinfo @setfilename defxcond.info @c set this from the command line. @c set bar @c deffnx inside conditional. @deffn foo @ifset bar @deffnx bar @end ifset Documentation. @end deffn @bye texi2html-1.82/test/macros/Makefile.in0000644000175000017500000002206411264347123021547 0ustar flichtenheldflichtenheld# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = test/macros DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DATE = @PACKAGE_DATE@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ REQUIRE_DATA_DUMPER = @REQUIRE_DATA_DUMPER@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_DATA_DUMPER = @USE_DATA_DUMPER@ USE_UNICODE = @USE_UNICODE@ USE_UNIDECODE = @USE_UNIDECODE@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ am__leading_dot = @am__leading_dot@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = macros.texi simple_macro.texi nested_macro_calls.texi \ glossary.texi imbricated_macros.texi expansion_order.texi \ ifclear_in_macro.texi macro_call_in_ifset.texi ifset_in_macro.texi \ not_ifset_text.texi bib-example.texi quote-args.texi alias.texi \ test_include.texi nested_ignore.texi include_macro.texi \ cond.texi defxcond.texi include-value.texi macro_in_misc.texi \ value_in_misc_valid.texi macro-at.texi node-expand.texi \ value_in_pass0_macros.texi macros_in_pass0_macros.texi macro_zero.texi \ macro_in_pass_texi_commands.texi two_macros_on_a_line.texi \ macro_commands_in_pass_texi_commands.texi node-value.texi empty_macro.texi \ inc_@f--ile.texi \ file.texi inc_file.texi macro_included.texi my-bib-macros.texi \ incl-incl.txi \ tests.txt res DISTCLEANFILES = l2h_tmp_dir.init tests.log tests.out all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/macros/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu test/macros/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-exec-am: install-html: install-html-am install-info: install-info-am install-man: install-pdf: install-pdf-am install-ps: install-ps-am installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic dist-hook \ distclean distclean-generic distclean-local distdir dvi dvi-am \ html html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am distclean-local: rm -rf out diffs dist-hook: rm -rf `find $(distdir)/res -name CVS` # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: texi2html-1.82/test/macros/glossary.texi0000644000175000017500000000124711264347123022240 0ustar flichtenheldflichtenheld\input texinfo.tex @setfilename glossary @macro glossarytext @table @asis @end macro @macro glossary @glossarytext @end table @end macro @macro gentry {id, name, text} @ifhtml @ref{\id\,\name\} @end ifhtml @ifnothtml \name\ (@pxref{\id\}) @end ifnothtml @unmacro expandglossary @macro expandglossary{glossary} @unmacro glossarytext @macro glossarytext \\glossary\\ @item \name\ @anchor{\id\} \text\ @end macro @end macro @expandglossary {@glossarytext} @end macro @node Top @top Top @menu * glossary:: @end menu The @gentry{id1, name1, text1\, arg1 } is used in many cases while @gentry{id2, name2, text2} is quite specific @node glossary @chapter glossary @glossary texi2html-1.82/test/macros/not_ifset_text.texi0000644000175000017500000000023711264347123023431 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @comment %**start of header @setfilename not_ifset_text.info @node Top @top Top @ifset a Flag a is set. @end ifset @bye texi2html-1.82/test/macros/value_in_pass0_macros.texi0000644000175000017500000000230311264347123024643 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename value_in_pass0_macros.info @node Top @top value in index commands @set cp cp @set fn fn @set syncodeindex_command @syncodeindex @syncodeindex @value{cp} @value{fn} @value{syncodeindex_command} cp fn @set en en @set documentlanguage_command @documentlanguage documentlanguage @documentlanguage @value{en} documentlanguage on its line @value{documentlanguage_command} en line following documentlanguage @set truc truc definedx truc @defindex @value{truc} after @set trucindex_command @trucindex @value{trucindex_command} index truc @set codeidx codeidx @defcodeindex @value{codeidx} @set defcodeindex_entry a @var{index entry} t@'e @^{@dotless{i}} @codeidxindex @value{defcodeindex_entry} @cindex cindex entry @syncodeindex ky pg @kindex @value{truc} kindex @pindex pindex @value{codeidx} @synindex truc cp @defindex abc @defindex defg @synindex abc defg @synindex defg ky @defgindex defg index entry @abcindex abc index entry pg @printindex pg ky @printindex ky truc @printindex truc value truc @printindex @value{truc} cp @printindex cp value cp @printindex @value{cp} defg @printindex defg abc @printindex abc fn @printindex fn @bye texi2html-1.82/test/macros/res/0000755000175000017500000000000011264347123020267 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_imbricated_macros/0000755000175000017500000000000011264347122024766 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_imbricated_macros/imbricated_macros.20000644000175000017500000000000011264347122030506 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_imbricated_macros/imbricated_macros.passfirst0000644000175000017500000000362311264347122032401 0ustar flichtenheldflichtenheldimbricated_macros.texi(,2) imbricated_macros.texi(,3) @setfilename imbricated_macros imbricated_macros.texi(,4) imbricated_macros.texi(,5) @node Top imbricated_macros.texi(,6) imbricated_macros.texi(,13) imbricated_macros.texi(,17) imbricated_macros.texi(,22) imbricated_macros.texi(,29) imbricated_macros.texi(,30) @c the arguments are broken at , before macro expansion imbricated_macros.texi(,31) @c @ protect the following @. imbricated_macros.texi(,32) @c imbricated_macros.texi(macro3,33) a, coucou after arg imbricated_macros.texi(macro3,33) text for macro2 imbricated_macros.texi(macro3,33) &&&& imbricated_macros.texi(,34) imbricated_macros.texi(,35) @c the macro inside @macro1 is expanded before the remaining args imbricated_macros.texi(,36) @c are appended. imbricated_macros.texi(,37) imbricated_macros.texi(macro3,38) a, macro2text for macro2 imbricated_macros.texi(macro3,38) &&&& imbricated_macros.texi(,39) imbricated_macros.texi(macro3,61) @verb{% @macro2 %} imbricated_macros.texi(macro3,61) @c @macro4 imbricated_macros.texi(macro3,61) @pagesizes 4 1 imbricated_macros.texi(macro3,61) 2 imbricated_macros.texi(macro3,61) 3 imbricated_macros.texi(macro3,61) 4 imbricated_macros.texi(macro3,61) @headings doubleafter 1 imbricated_macros.texi(macro3,61) 2 imbricated_macros.texi(macro3,61) 3 imbricated_macros.texi(macro3,61) 4 imbricated_macros.texi(macro3,61) @verbatim imbricated_macros.texi(macro3,61) @macro2 imbricated_macros.texi(macro3,61) @end verbatim imbricated_macros.texi(macro3,61) macro7 defined imbricated_macros.texi(macro3,61) 1 imbricated_macros.texi(macro3,61) 2 imbricated_macros.texi(macro3,61) 3 imbricated_macros.texi(macro3,61) 4 imbricated_macros.texi(macro3,61) imbricated_macros.texi(macro3,61) &&&& imbricated_macros.texi(,62) imbricated_macros.texi(,63) Call macro7 imbricated_macros.texi(macro7,64) @emph{aaa} imbricated_macros.texi(,65) imbricated_macros.texi(,66) @bye texi2html-1.82/test/macros/res/texi_imbricated_macros/imbricated_macros.texi0000644000175000017500000000075311264347122031335 0ustar flichtenheldflichtenheld\input texinfo.tex @setfilename imbricated_macros @node Top @c the arguments are broken at , before macro expansion @c @ protect the following @. @c a, coucou after arg text for macro2 &&&& @c the macro inside @macro1 is expanded before the remaining args @c are appended. a, macro2text for macro2 &&&& @verb{% @macro2 %} @c @macro4 @pagesizes 4 1 2 3 4 @headings doubleafter 1 2 3 4 @verbatim @macro2 @end verbatim macro7 defined 1 2 3 4 &&&& Call macro7 @emph{aaa} @bye texi2html-1.82/test/macros/res/texi_imbricated_macros/imbricated_macros.passtexi0000644000175000017500000000362311264347122032223 0ustar flichtenheldflichtenheldimbricated_macros.texi(,2) imbricated_macros.texi(,3) @setfilename imbricated_macros imbricated_macros.texi(,4) imbricated_macros.texi(,5) @node Top imbricated_macros.texi(,6) imbricated_macros.texi(,13) imbricated_macros.texi(,17) imbricated_macros.texi(,22) imbricated_macros.texi(,29) imbricated_macros.texi(,30) @c the arguments are broken at , before macro expansion imbricated_macros.texi(,31) @c @ protect the following @. imbricated_macros.texi(,32) @c imbricated_macros.texi(macro3,33) a, coucou after arg imbricated_macros.texi(macro3,33) text for macro2 imbricated_macros.texi(macro3,33) &&&& imbricated_macros.texi(,34) imbricated_macros.texi(,35) @c the macro inside @macro1 is expanded before the remaining args imbricated_macros.texi(,36) @c are appended. imbricated_macros.texi(,37) imbricated_macros.texi(macro3,38) a, macro2text for macro2 imbricated_macros.texi(macro3,38) &&&& imbricated_macros.texi(,39) imbricated_macros.texi(macro3,61) @verb{% @macro2 %} imbricated_macros.texi(macro3,61) @c @macro4 imbricated_macros.texi(macro3,61) @pagesizes 4 1 imbricated_macros.texi(macro3,61) 2 imbricated_macros.texi(macro3,61) 3 imbricated_macros.texi(macro3,61) 4 imbricated_macros.texi(macro3,61) @headings doubleafter 1 imbricated_macros.texi(macro3,61) 2 imbricated_macros.texi(macro3,61) 3 imbricated_macros.texi(macro3,61) 4 imbricated_macros.texi(macro3,61) @verbatim imbricated_macros.texi(macro3,61) @macro2 imbricated_macros.texi(macro3,61) @end verbatim imbricated_macros.texi(macro3,61) macro7 defined imbricated_macros.texi(macro3,61) 1 imbricated_macros.texi(macro3,61) 2 imbricated_macros.texi(macro3,61) 3 imbricated_macros.texi(macro3,61) 4 imbricated_macros.texi(macro3,61) imbricated_macros.texi(macro3,61) &&&& imbricated_macros.texi(,62) imbricated_macros.texi(,63) Call macro7 imbricated_macros.texi(macro7,64) @emph{aaa} imbricated_macros.texi(,65) imbricated_macros.texi(,66) @bye texi2html-1.82/test/macros/res/macros_in_pass0_macros/0000755000175000017500000000000011264347122024712 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/macros_in_pass0_macros/index.html0000644000175000017500000000755411264347122026722 0ustar flichtenheldflichtenheld Untitled Document: macro in index commands

    macro in index commands

    documentlanguage

    documentlanguage on its line line following documentlanguage

    definedx truc after

    pg

    ky

    truc

    value truc

    cp

    value cp

    defg

    abc

    fn


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/macros/res/macros_in_pass0_macros/macros_in_pass0_macros.20000644000175000017500000000000011264347122031407 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/cond_ifhtml_ifinfo_iftex/0000755000175000017500000000000011264347123025306 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/cond_ifhtml_ifinfo_iftex/cond.html0000644000175000017500000000364311264347123027125 0ustar flichtenheldflichtenheld Untitled Document

    Top

    This is html text.

    This is ifhtml text.

    This is ifinfo text.

    This is tex text.
    

    This is iftex text.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/macros/res/cond_ifhtml_ifinfo_iftex/cond.20000644000175000017500000000000011264347123026302 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/cond_xml/0000755000175000017500000000000011264347122022071 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/cond_xml/cond.20000644000175000017500000000000011264347122023065 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/cond_xml/cond.xml0000644000175000017500000000101111264347122023527 0ustar flichtenheldflichtenheld cond.xml Top (dir) This is ifnothtml text. This is ifnotinfo text. This is ifnottex text. texi2html-1.82/test/macros/res/defcondx_Ubar/0000755000175000017500000000000011264347122023031 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/defcondx_Ubar/defxcond.20000644000175000017500000000012711264347122024706 0ustar flichtenheldflichtenheld** Index entry before document: @findex (l. 8) ** Empty index entry for @deffn (l. 8) texi2html-1.82/test/macros/res/defcondx_Ubar/defxcond.html0000644000175000017500000000346711264347122025523 0ustar flichtenheldflichtenheld Untitled Document
    foo:

    Documentation.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/macros/res/texi_macros_in_pass0_macros/0000755000175000017500000000000011264347123025744 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_macros_in_pass0_macros/macros_in_pass0_macros.texi0000644000175000017500000000153511264347123033267 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename macros_in_pass0_macros.info @node Top @top macro in index commands @syncodeindex cp fn @syncodeindex cp fn documentlanguage @documentlanguage en documentlanguage on its line @documentlanguage en line following documentlanguage definedx truc @defindex truc after @trucindex index truc @defcodeindex codeidx @codeidxindex a @var{index entry} t@'e @^{@dotless{i}} @cindex cindex entry @syncodeindex ky pg @kindex truc kindex @pindex pindex codeidx @synindex truc cp @defindex abc @defindex defg @synindex abc defg @synindex defg ky @defgindex defg index entry @abcindex abc index entry pg @printindex pg ky @printindex ky truc @printindex truc value truc @printindex truc cp @printindex cp value cp @printindex cp defg @printindex defg abc @printindex abc fn @printindex fn @bye texi2html-1.82/test/macros/res/texi_macros_in_pass0_macros/macros_in_pass0_macros.20000644000175000017500000000000011264347123032441 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_macros_in_pass0_macros/macros_in_pass0_macros.passtexi0000644000175000017500000000747111264347123034163 0ustar flichtenheldflichtenheldmacros_in_pass0_macros.texi(,2) macros_in_pass0_macros.texi(,3) @setfilename macros_in_pass0_macros.info macros_in_pass0_macros.texi(,4) macros_in_pass0_macros.texi(,5) @node Top macros_in_pass0_macros.texi(,6) @top macro in index commands macros_in_pass0_macros.texi(,7) macros_in_pass0_macros.texi(,17) macros_in_pass0_macros.texi(cp,18) @syncodeindex macros_in_pass0_macros.texi(cp,18) cp macros_in_pass0_macros.texi(cp,18) fn macros_in_pass0_macros.texi(syncodeindex_command,19) @syncodeindex cp fn macros_in_pass0_macros.texi(,20) macros_in_pass0_macros.texi(,27) macros_in_pass0_macros.texi(en,28) documentlanguage @documentlanguage macros_in_pass0_macros.texi(en,28) en macros_in_pass0_macros.texi(,29) macros_in_pass0_macros.texi(,30) documentlanguage on its line macros_in_pass0_macros.texi(documentlanguage_command,31) @documentlanguage en macros_in_pass0_macros.texi(,32) line following documentlanguage macros_in_pass0_macros.texi(,33) macros_in_pass0_macros.texi(,37) macros_in_pass0_macros.texi(,38) definedx truc macros_in_pass0_macros.texi(truc,39) @defindex macros_in_pass0_macros.texi(truc,39) truc macros_in_pass0_macros.texi(,40) after macros_in_pass0_macros.texi(,41) macros_in_pass0_macros.texi(,45) macros_in_pass0_macros.texi(trucindex_command,46) @trucindex index truc macros_in_pass0_macros.texi(,47) macros_in_pass0_macros.texi(,51) macros_in_pass0_macros.texi(codeidx,52) @defcodeindex macros_in_pass0_macros.texi(codeidx,52) codeidx macros_in_pass0_macros.texi(,53) macros_in_pass0_macros.texi(,57) macros_in_pass0_macros.texi(defcodeindex_entry,58) @codeidxindex macros_in_pass0_macros.texi(defcodeindex_entry,58) a @var{index entry} t@'e @^{@dotless{i}} macros_in_pass0_macros.texi(,59) macros_in_pass0_macros.texi(,60) @cindex cindex entry macros_in_pass0_macros.texi(,61) macros_in_pass0_macros.texi(,62) @syncodeindex ky pg macros_in_pass0_macros.texi(,63) macros_in_pass0_macros.texi(truc,64) @kindex macros_in_pass0_macros.texi(truc,64) truc kindex macros_in_pass0_macros.texi(codeidx,65) @pindex pindex macros_in_pass0_macros.texi(codeidx,65) codeidx macros_in_pass0_macros.texi(,66) macros_in_pass0_macros.texi(,67) @synindex truc cp macros_in_pass0_macros.texi(,68) macros_in_pass0_macros.texi(,69) @defindex abc macros_in_pass0_macros.texi(,70) @defindex defg macros_in_pass0_macros.texi(,71) macros_in_pass0_macros.texi(,72) @synindex abc defg macros_in_pass0_macros.texi(,73) @synindex defg ky macros_in_pass0_macros.texi(,74) macros_in_pass0_macros.texi(,75) @defgindex defg index entry macros_in_pass0_macros.texi(,76) macros_in_pass0_macros.texi(,77) @abcindex abc index entry macros_in_pass0_macros.texi(,78) macros_in_pass0_macros.texi(,79) pg macros_in_pass0_macros.texi(,80) @printindex pg macros_in_pass0_macros.texi(,81) macros_in_pass0_macros.texi(,82) ky macros_in_pass0_macros.texi(,83) @printindex ky macros_in_pass0_macros.texi(,84) macros_in_pass0_macros.texi(,85) truc macros_in_pass0_macros.texi(,86) @printindex truc macros_in_pass0_macros.texi(,87) macros_in_pass0_macros.texi(,88) value truc macros_in_pass0_macros.texi(truc,89) @printindex macros_in_pass0_macros.texi(truc,89) truc macros_in_pass0_macros.texi(,90) macros_in_pass0_macros.texi(,91) cp macros_in_pass0_macros.texi(,92) @printindex cp macros_in_pass0_macros.texi(,93) macros_in_pass0_macros.texi(,94) value cp macros_in_pass0_macros.texi(cp,95) @printindex macros_in_pass0_macros.texi(cp,95) cp macros_in_pass0_macros.texi(,96) macros_in_pass0_macros.texi(,97) defg macros_in_pass0_macros.texi(,98) @printindex defg macros_in_pass0_macros.texi(,99) macros_in_pass0_macros.texi(,100) abc macros_in_pass0_macros.texi(,101) @printindex abc macros_in_pass0_macros.texi(,102) macros_in_pass0_macros.texi(,103) fn macros_in_pass0_macros.texi(,104) @printindex fn macros_in_pass0_macros.texi(,105) macros_in_pass0_macros.texi(,106) @bye texi2html-1.82/test/macros/res/texi_macros_in_pass0_macros/macros_in_pass0_macros.passfirst0000644000175000017500000000667311264347123034344 0ustar flichtenheldflichtenheldmacros_in_pass0_macros.texi(,2) macros_in_pass0_macros.texi(,3) @setfilename macros_in_pass0_macros.info macros_in_pass0_macros.texi(,4) macros_in_pass0_macros.texi(,5) @node Top macros_in_pass0_macros.texi(,6) @top macro in index commands macros_in_pass0_macros.texi(,7) macros_in_pass0_macros.texi(,17) macros_in_pass0_macros.texi(cp,18) @syncodeindex cp fn macros_in_pass0_macros.texi(syncodeindex_command,19) @syncodeindex cp fn macros_in_pass0_macros.texi(,20) macros_in_pass0_macros.texi(,27) macros_in_pass0_macros.texi(en,28) documentlanguage @documentlanguage en macros_in_pass0_macros.texi(,29) macros_in_pass0_macros.texi(,30) documentlanguage on its line macros_in_pass0_macros.texi(documentlanguage_command,31) @documentlanguage en macros_in_pass0_macros.texi(,32) line following documentlanguage macros_in_pass0_macros.texi(,33) macros_in_pass0_macros.texi(,37) macros_in_pass0_macros.texi(,38) definedx truc macros_in_pass0_macros.texi(truc,39) @defindex truc macros_in_pass0_macros.texi(,40) after macros_in_pass0_macros.texi(,41) macros_in_pass0_macros.texi(,45) macros_in_pass0_macros.texi(trucindex_command,46) @trucindex index truc macros_in_pass0_macros.texi(,47) macros_in_pass0_macros.texi(,51) macros_in_pass0_macros.texi(codeidx,52) @defcodeindex codeidx macros_in_pass0_macros.texi(,53) macros_in_pass0_macros.texi(,57) macros_in_pass0_macros.texi(defcodeindex_entry,58) @codeidxindex a @var{index entry} t@'e @^{@dotless{i}} macros_in_pass0_macros.texi(,59) macros_in_pass0_macros.texi(,60) @cindex cindex entry macros_in_pass0_macros.texi(,61) macros_in_pass0_macros.texi(,62) @syncodeindex ky pg macros_in_pass0_macros.texi(,63) macros_in_pass0_macros.texi(truc,64) @kindex truc kindex macros_in_pass0_macros.texi(codeidx,65) @pindex pindex codeidx macros_in_pass0_macros.texi(,66) macros_in_pass0_macros.texi(,67) @synindex truc cp macros_in_pass0_macros.texi(,68) macros_in_pass0_macros.texi(,69) @defindex abc macros_in_pass0_macros.texi(,70) @defindex defg macros_in_pass0_macros.texi(,71) macros_in_pass0_macros.texi(,72) @synindex abc defg macros_in_pass0_macros.texi(,73) @synindex defg ky macros_in_pass0_macros.texi(,74) macros_in_pass0_macros.texi(,75) @defgindex defg index entry macros_in_pass0_macros.texi(,76) macros_in_pass0_macros.texi(,77) @abcindex abc index entry macros_in_pass0_macros.texi(,78) macros_in_pass0_macros.texi(,79) pg macros_in_pass0_macros.texi(,80) @printindex pg macros_in_pass0_macros.texi(,81) macros_in_pass0_macros.texi(,82) ky macros_in_pass0_macros.texi(,83) @printindex ky macros_in_pass0_macros.texi(,84) macros_in_pass0_macros.texi(,85) truc macros_in_pass0_macros.texi(,86) @printindex truc macros_in_pass0_macros.texi(,87) macros_in_pass0_macros.texi(,88) value truc macros_in_pass0_macros.texi(truc,89) @printindex truc macros_in_pass0_macros.texi(,90) macros_in_pass0_macros.texi(,91) cp macros_in_pass0_macros.texi(,92) @printindex cp macros_in_pass0_macros.texi(,93) macros_in_pass0_macros.texi(,94) value cp macros_in_pass0_macros.texi(cp,95) @printindex cp macros_in_pass0_macros.texi(,96) macros_in_pass0_macros.texi(,97) defg macros_in_pass0_macros.texi(,98) @printindex defg macros_in_pass0_macros.texi(,99) macros_in_pass0_macros.texi(,100) abc macros_in_pass0_macros.texi(,101) @printindex abc macros_in_pass0_macros.texi(,102) macros_in_pass0_macros.texi(,103) fn macros_in_pass0_macros.texi(,104) @printindex fn macros_in_pass0_macros.texi(,105) macros_in_pass0_macros.texi(,106) @bye texi2html-1.82/test/macros/res/texi_quote-args/0000755000175000017500000000000011264347122023406 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_quote-args/quote-args.texi0000644000175000017500000000034611264347122026373 0ustar flichtenheldflichtenheld\input texinfo @smallbook @setfilename quote-args.info @settitle Quote-args facility in macros @node Top, , (dir), (dir) @noindent @strong{FIXME: Many arguments, separated by commas, are processed here} natopocotuototam @bye texi2html-1.82/test/macros/res/texi_quote-args/quote-args.20000644000175000017500000000000011264347122025546 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_quote-args/quote-args.passtexi0000644000175000017500000000072511264347122027263 0ustar flichtenheldflichtenheldquote-args.texi(,2) @smallbook quote-args.texi(,3) @setfilename quote-args.info quote-args.texi(,4) @settitle Quote-args facility in macros quote-args.texi(,5) quote-args.texi(,9) quote-args.texi(,13) quote-args.texi(,14) @node Top, , (dir), (dir) quote-args.texi(,15) quote-args.texi(,16) @noindent quote-args.texi(FIXME,17) @strong{FIXME: Many arguments, separated by commas, are processed here} quote-args.texi(cat,18) natopocotuototam quote-args.texi(,19) @bye texi2html-1.82/test/macros/res/texi_quote-args/quote-args.passfirst0000644000175000017500000000072511264347122027441 0ustar flichtenheldflichtenheldquote-args.texi(,2) @smallbook quote-args.texi(,3) @setfilename quote-args.info quote-args.texi(,4) @settitle Quote-args facility in macros quote-args.texi(,5) quote-args.texi(,9) quote-args.texi(,13) quote-args.texi(,14) @node Top, , (dir), (dir) quote-args.texi(,15) quote-args.texi(,16) @noindent quote-args.texi(FIXME,17) @strong{FIXME: Many arguments, separated by commas, are processed here} quote-args.texi(cat,18) natopocotuototam quote-args.texi(,19) @bye texi2html-1.82/test/macros/res/texi_test_include/0000755000175000017500000000000011264347122024001 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_test_include/test_include.passfirst0000644000175000017500000000055211264347122030425 0ustar flichtenheldflichtenheldtest_include.texi(,2) test_include.texi(,3) @setfilename test_include.info test_include.texi(,4) test_include.texi(,5) @node Top test_include.texi(,6) test_include.texi(,7) This is a very simple texi manual. inc_file.texi(,1) In included file. test_include.texi(,9) test_include.texi(,10) After inclusion. test_include.texi(,11) test_include.texi(,12) @bye texi2html-1.82/test/macros/res/texi_test_include/test_include.passtexi0000644000175000017500000000055211264347122030247 0ustar flichtenheldflichtenheldtest_include.texi(,2) test_include.texi(,3) @setfilename test_include.info test_include.texi(,4) test_include.texi(,5) @node Top test_include.texi(,6) test_include.texi(,7) This is a very simple texi manual. inc_file.texi(,1) In included file. test_include.texi(,9) test_include.texi(,10) After inclusion. test_include.texi(,11) test_include.texi(,12) @bye texi2html-1.82/test/macros/res/texi_test_include/test_include.20000644000175000017500000000000011264347122026534 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_test_include/test_include.texi0000644000175000017500000000023111264347122027352 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename test_include.info @node Top This is a very simple texi manual. In included file. After inclusion. @bye texi2html-1.82/test/macros/res/texi_macro_commands_in_pass_texi_commands/0000755000175000017500000000000011264347122030727 5ustar flichtenheldflichtenheld././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootroottexi2html-1.82/test/macros/res/texi_macro_commands_in_pass_texi_commands/macro_commands_in_pass_texi_commands.passfirsttexi2html-1.82/test/macros/res/texi_macro_commands_in_pass_texi_commands/macro_commands_in_pass_texi0000644000175000017500000000256111264347122036405 0ustar flichtenheldflichtenheldmacro_commands_in_pass_texi_commands.texi(,2) macro_commands_in_pass_texi_commands.texi(,9) macro_commands_in_pass_texi_commands.texi(begin_file,10) @setfilename macro_i--n_pass@@texi_commands.info macro_commands_in_pass_texi_commands.texi(,11) macro_commands_in_pass_texi_commands.texi(,16) macro_commands_in_pass_texi_commands.texi(,20) macro_commands_in_pass_texi_commands.texi(,24) macro_commands_in_pass_texi_commands.texi(documentencoding_command,25) @documentencoding ISO-8859-1@@ macro_commands_in_pass_texi_commands.texi(,26) macro_commands_in_pass_texi_commands.texi(,27) macro_commands_in_pass_texi_commands.texi(,32) macro_commands_in_pass_texi_commands.texi(,33) @node Top macro_commands_in_pass_texi_commands.texi(,34) @top top macro_commands_in_pass_texi_commands.texi(,35) inc_@f--ile.texi(,1) In included file. macro_commands_in_pass_texi_commands.texi(,37) macro_commands_in_pass_texi_commands.texi(themacro,38) in themacro macro_commands_in_pass_texi_commands.texi(,39) macro_commands_in_pass_texi_commands.texi(,40) macro_in_pass_texi_commands@{info@} macro_commands_in_pass_texi_commands.texi(end_file_name,41) texi_commands.info macro_commands_in_pass_texi_commands.texi(,42) macro_commands_in_pass_texi_commands.texi(,43) @verbatiminclude inc_@@f--ile.texi macro_commands_in_pass_texi_commands.texi(,44) macro_commands_in_pass_texi_commands.texi(,45) @bye ././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootroottexi2html-1.82/test/macros/res/texi_macro_commands_in_pass_texi_commands/macro_commands_in_pass_texi_commands.2texi2html-1.82/test/macros/res/texi_macro_commands_in_pass_texi_commands/macro_commands_in_pass_texi0000644000175000017500000000000011264347122036367 0ustar flichtenheldflichtenheld././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootroottexi2html-1.82/test/macros/res/texi_macro_commands_in_pass_texi_commands/macro_commands_in_pass_texi_commands.passtexitexi2html-1.82/test/macros/res/texi_macro_commands_in_pass_texi_commands/macro_commands_in_pass_texi0000644000175000017500000000256111264347122036405 0ustar flichtenheldflichtenheldmacro_commands_in_pass_texi_commands.texi(,2) macro_commands_in_pass_texi_commands.texi(,9) macro_commands_in_pass_texi_commands.texi(begin_file,10) @setfilename macro_i--n_pass@@texi_commands.info macro_commands_in_pass_texi_commands.texi(,11) macro_commands_in_pass_texi_commands.texi(,16) macro_commands_in_pass_texi_commands.texi(,20) macro_commands_in_pass_texi_commands.texi(,24) macro_commands_in_pass_texi_commands.texi(documentencoding_command,25) @documentencoding ISO-8859-1@@ macro_commands_in_pass_texi_commands.texi(,26) macro_commands_in_pass_texi_commands.texi(,27) macro_commands_in_pass_texi_commands.texi(,32) macro_commands_in_pass_texi_commands.texi(,33) @node Top macro_commands_in_pass_texi_commands.texi(,34) @top top macro_commands_in_pass_texi_commands.texi(,35) inc_@f--ile.texi(,1) In included file. macro_commands_in_pass_texi_commands.texi(,37) macro_commands_in_pass_texi_commands.texi(themacro,38) in themacro macro_commands_in_pass_texi_commands.texi(,39) macro_commands_in_pass_texi_commands.texi(,40) macro_in_pass_texi_commands@{info@} macro_commands_in_pass_texi_commands.texi(end_file_name,41) texi_commands.info macro_commands_in_pass_texi_commands.texi(,42) macro_commands_in_pass_texi_commands.texi(,43) @verbatiminclude inc_@@f--ile.texi macro_commands_in_pass_texi_commands.texi(,44) macro_commands_in_pass_texi_commands.texi(,45) @bye ././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootroottexi2html-1.82/test/macros/res/texi_macro_commands_in_pass_texi_commands/macro_commands_in_pass_texi_commands.texitexi2html-1.82/test/macros/res/texi_macro_commands_in_pass_texi_commands/macro_commands_in_pass_texi0000644000175000017500000000041611264347122036402 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename macro_i--n_pass@@texi_commands.info @documentencoding ISO-8859-1@@ @node Top @top top In included file. in themacro macro_in_pass_texi_commands@{info@} texi_commands.info @verbatiminclude inc_@@f--ile.texi @bye texi2html-1.82/test/macros/res/defcondx_Dbar/0000755000175000017500000000000011264347122023010 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/defcondx_Dbar/defxcond.20000644000175000017500000000026011264347122024663 0ustar flichtenheldflichtenheld** Index entry before document: @findex (l. 8) ** Empty index entry for @deffn (l. 8) ** Index entry before document: @findex (l. 11) ** Empty index entry for @deffn (l. 11) texi2html-1.82/test/macros/res/defcondx_Dbar/defxcond.html0000644000175000017500000000354211264347122025474 0ustar flichtenheldflichtenheld Untitled Document
    foo:
    bar:

    Documentation.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/macros/res/cond/0000755000175000017500000000000011264347122021211 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/cond/cond.html0000644000175000017500000000360011264347122023021 0ustar flichtenheldflichtenheld Untitled Document

    Top

    This is html text.

    This is ifhtml text.

    This is ifnotinfo text.

    This is ifnottex text.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/macros/res/cond/cond.20000644000175000017500000000000011264347122022205 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/dumptexi_ifset_defined/0000755000175000017500000000000011264347122024775 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/dumptexi_ifset_defined/ifset_in_macro.passtexi0000644000175000017500000000052711264347122031544 0ustar flichtenheldflichtenheldifset_in_macro.texi(,2) ifset_in_macro.texi(,3) @setfilename ifset_in_macro.info ifset_in_macro.texi(,9) ifset_in_macro.texi(,10) @node Top ifset_in_macro.texi(,11) ifset_in_macro.texi(note,14) arg ifset_in_macro.texi(note,14) ifset_in_macro.texi(,15) ifset_in_macro.texi(,16) text ifset_in_macro.texi(,17) ifset_in_macro.texi(,18) @bye texi2html-1.82/test/macros/res/dumptexi_ifset_defined/ifset_in_macro.20000644000175000017500000000000011264347122030027 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/dumptexi_ifset_defined/ifset_in_macro.passfirst0000644000175000017500000000052711264347122031722 0ustar flichtenheldflichtenheldifset_in_macro.texi(,2) ifset_in_macro.texi(,3) @setfilename ifset_in_macro.info ifset_in_macro.texi(,9) ifset_in_macro.texi(,10) @node Top ifset_in_macro.texi(,11) ifset_in_macro.texi(note,14) arg ifset_in_macro.texi(note,14) ifset_in_macro.texi(,15) ifset_in_macro.texi(,16) text ifset_in_macro.texi(,17) ifset_in_macro.texi(,18) @bye texi2html-1.82/test/macros/res/texi_value_in_misc_valid/0000755000175000017500000000000011264347122025313 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_value_in_misc_valid/value_in_misc_valid.20000644000175000017500000000000011264347122031360 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_value_in_misc_valid/value_in_misc_valid.passtexi0000644000175000017500000002004511264347122033072 0ustar flichtenheldflichtenheldvalue_in_misc_valid.texi(,2) @setfilename value_in_misc.info value_in_misc_valid.texi(,3) value_in_misc_valid.texi(,4) @hyphenation{some-where value_in_misc_valid.texi(,5) be-low value_in_misc_valid.texi(,6) may-be to-morow value_in_misc_valid.texi(,7) } value_in_misc_valid.texi(,8) value_in_misc_valid.texi(,9) @set text atext value_in_misc_valid.texi(,10) value_in_misc_valid.texi(,11) @node Top value_in_misc_valid.texi(,12) @top top atext value_in_misc_valid.texi(,13) @subheading Comment like: atext value_in_misc_valid.texi(,14) value_in_misc_valid.texi(,15) Text line followed by a comment on the same line and another below @c comment @value{text} value_in_misc_valid.texi(,16) @c comment @value{text} value_in_misc_valid.texi(,17) value_in_misc_valid.texi(,18) @set pagesizes_arg 200mm,150mm value_in_misc_valid.texi(,19) @set afourpaper_macro @afourpaper value_in_misc_valid.texi(,20) value_in_misc_valid.texi(,22) @pagesizes 200mm,150mm value_in_misc_valid.texi(,24) @afourpaper value_in_misc_valid.texi(,25) @headings on line following headings atext value_in_misc_valid.texi(,26) @oddfooting some text ignored atext value_in_misc_valid.texi(,27) @everyheading on line following everyheading atext value_in_misc_valid.texi(,28) value_in_misc_valid.texi(,29) @set need_arg 0.1 value_in_misc_valid.texi(,30) value_in_misc_valid.texi(,32) @need 0.1 value_in_misc_valid.texi(,34) value_in_misc_valid.texi(,35) @set raisesections_macro @raisesections value_in_misc_valid.texi(,36) @raisesections value_in_misc_valid.texi(,37) @set lowersections_macro @lowersections value_in_misc_valid.texi(,38) @lowersections value_in_misc_valid.texi(,39) value_in_misc_valid.texi(,40) @c tex error: Use of \ doesn't match its definition. value_in_misc_valid.texi(,43) @@definfoenclose phoo,//,\\ value_in_misc_valid.texi(,43) value_in_misc_valid.texi(,44) //bar\\ value_in_misc_valid.texi(,46) value_in_misc_valid.texi(,47) @set definfoenclose_name phi value_in_misc_valid.texi(,49) value_in_misc_valid.texi(,56) value_in_misc_valid.texi(,57) :bar: value_in_misc_valid.texi(,58) value_in_misc_valid.texi(,59) @set strong_macro @strong value_in_misc_valid.texi(,60) @set strong_name strong value_in_misc_valid.texi(,61) value_in_misc_valid.texi(,65) @strong{very strong} value_in_misc_valid.texi(,66) value_in_misc_valid.texi(,68) value_in_misc_valid.texi(,72) (strong: is it really strong? :) value_in_misc_valid.texi(,73) value_in_misc_valid.texi(,74) @kbd{something before kbdinputstyle} value_in_misc_valid.texi(,75) value_in_misc_valid.texi(,76) @set kbdinputstyle_arg code value_in_misc_valid.texi(,78) @kbdinputstyle code value_in_misc_valid.texi(,80) value_in_misc_valid.texi(,81) @kbd{truc} value_in_misc_valid.texi(,82) value_in_misc_valid.texi(,83) @example value_in_misc_valid.texi(,84) @kbd{example} value_in_misc_valid.texi(,85) @end example value_in_misc_valid.texi(,86) value_in_misc_valid.texi(,87) @set asis_arg asis value_in_misc_valid.texi(,88) @set zero 0 value_in_misc_valid.texi(,89) @set none_arg none value_in_misc_valid.texi(,90) @set four 4 value_in_misc_valid.texi(,91) @set six 6 value_in_misc_valid.texi(,92) value_in_misc_valid.texi(,94) @paragraphindent asis value_in_misc_valid.texi(,95) @paragraphindent 0 value_in_misc_valid.texi(,96) @paragraphindent none value_in_misc_valid.texi(,97) @paragraphindent 4 value_in_misc_valid.texi(,98) @firstparagraphindent none value_in_misc_valid.texi(,99) @exampleindent 6 value_in_misc_valid.texi(,101) value_in_misc_valid.texi(,102) @set end_arg end value_in_misc_valid.texi(,103) @set separate_arg separate value_in_misc_valid.texi(,104) @footnotestyle end value_in_misc_valid.texi(,105) @footnotestyle separate value_in_misc_valid.texi(,106) value_in_misc_valid.texi(,107) @set latin1 ISO-8859-1 value_in_misc_valid.texi(,109) @documentencoding ISO-8859-1 value_in_misc_valid.texi(,111) value_in_misc_valid.texi(,112) @set on_arg on value_in_misc_valid.texi(,113) @set off_arg off value_in_misc_valid.texi(,115) @frenchspacing on value_in_misc_valid.texi(,116) @frenchspacing off value_in_misc_valid.texi(,118) value_in_misc_valid.texi(,119) @c accepts 10 or 11 value_in_misc_valid.texi(,120) @set ten 10 value_in_misc_valid.texi(,122) @fonttextsize 10 value_in_misc_valid.texi(,124) @c accept false or true value_in_misc_valid.texi(,125) @c makeinfo don't care about the arg and remove the remainiing of the line value_in_misc_valid.texi(,126) @set false_arg false value_in_misc_valid.texi(,127) @set true_arg true value_in_misc_valid.texi(,129) @allowcodebreaks false value_in_misc_valid.texi(,131) @code{false aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa} value_in_misc_valid.texi(,132) value_in_misc_valid.texi(,134) @allowcodebreaks true value_in_misc_valid.texi(,136) @code{true aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa} value_in_misc_valid.texi(,137) value_in_misc_valid.texi(,138) @subheading command removed value_in_misc_valid.texi(,139) value_in_misc_valid.texi(,140) @finalout value_in_misc_valid.texi(,141) value_in_misc_valid.texi(,142) @set page_macro @page value_in_misc_valid.texi(,143) @set noindent_macro @noindent value_in_misc_valid.texi(,144) @set refill_macro @refill value_in_misc_valid.texi(,145) value_in_misc_valid.texi(,146) @@page @page @@noindent @noindent @@refill @refill something value_in_misc_valid.texi(,147) value_in_misc_valid.texi(,148) @noindent noindent at beginning of line value_in_misc_valid.texi(,149) @noindent value_in_misc_valid.texi(,150) noindent on the preceding line value_in_misc_valid.texi(,151) @noindent noindent after space at beginning of line value_in_misc_valid.texi(,152) @page page at beginning of line value_in_misc_valid.texi(,153) @page value_in_misc_valid.texi(,154) After page on it's own line. value_in_misc_valid.texi(,155) value_in_misc_valid.texi(,156) @@page @page @@noindent @noindent @@refill @refill value_in_misc_valid.texi(,157) value_in_misc_valid.texi(,158) @set contents_macro @contents value_in_misc_valid.texi(,159) @contents value_in_misc_valid.texi(,160) value_in_misc_valid.texi(,161) @subheading special value_in_misc_valid.texi(,162) value_in_misc_valid.texi(,163) Only valid between iftex: value_in_misc_valid.texi(,164) @c @@vskip @vskip @@cropmarks @cropmarks value_in_misc_valid.texi(,165) Unknown ??? value_in_misc_valid.texi(,166) @c @@fillbreak @fillbreak eol value_in_misc_valid.texi(,167) value_in_misc_valid.texi(,168) @set exdent_macro @exdent value_in_misc_valid.texi(,170) @exdent line after exdent value_in_misc_valid.texi(,172) value_in_misc_valid.texi(,173) And now sp: value_in_misc_valid.texi(,174) value_in_misc_valid.texi(,175) @set two 2 value_in_misc_valid.texi(,181) @sp 2 value_in_misc_valid.texi(,182) value_in_misc_valid.texi(,183) @set result_macro @result value_in_misc_valid.texi(,184) value_in_misc_valid.texi(,185) @clickstyle @result value_in_misc_valid.texi(,186) value_in_misc_valid.texi(,187) @menu value_in_misc_valid.texi(,188) * node atext:: value_in_misc_valid.texi(,189) * bidule:: value_in_misc_valid.texi(,190) * bidule2:: value_in_misc_valid.texi(,191) @end menu value_in_misc_valid.texi(,192) value_in_misc_valid.texi(,193) value_in_misc_valid.texi(,194) @node node atext value_in_misc_valid.texi(,195) @chapter chapter value_in_misc_valid.texi(,196) @menu value_in_misc_valid.texi(,197) * truc:: value_in_misc_valid.texi(,198) @end menu value_in_misc_valid.texi(,199) value_in_misc_valid.texi(,200) @node truc value_in_misc_valid.texi(,201) @section section value_in_misc_valid.texi(,202) value_in_misc_valid.texi(,203) @contents value_in_misc_valid.texi(,204) value_in_misc_valid.texi(,205) @node bidule value_in_misc_valid.texi(,206) @chapter bidule value_in_misc_valid.texi(,207) value_in_misc_valid.texi(,208) @set shortcontents_macro @shortcontents value_in_misc_valid.texi(,209) @shortcontents value_in_misc_valid.texi(,210) value_in_misc_valid.texi(,211) @node bidule2 value_in_misc_valid.texi(,212) @chapter last value_in_misc_valid.texi(,213) value_in_misc_valid.texi(,214) @bye texi2html-1.82/test/macros/res/texi_value_in_misc_valid/value_in_misc_valid.passfirst0000644000175000017500000002000711264347122033246 0ustar flichtenheldflichtenheldvalue_in_misc_valid.texi(,2) @setfilename value_in_misc.info value_in_misc_valid.texi(,3) value_in_misc_valid.texi(,4) @hyphenation{some-where value_in_misc_valid.texi(,5) be-low value_in_misc_valid.texi(,6) may-be to-morow value_in_misc_valid.texi(,7) } value_in_misc_valid.texi(,8) value_in_misc_valid.texi(,9) @set text atext value_in_misc_valid.texi(,10) value_in_misc_valid.texi(,11) @node Top value_in_misc_valid.texi(,12) @top top atext value_in_misc_valid.texi(,13) @subheading Comment like: atext value_in_misc_valid.texi(,14) value_in_misc_valid.texi(,15) Text line followed by a comment on the same line and another below @c comment @value{text} value_in_misc_valid.texi(,16) @c comment @value{text} value_in_misc_valid.texi(,17) value_in_misc_valid.texi(,18) @set pagesizes_arg 200mm,150mm value_in_misc_valid.texi(,19) @set afourpaper_macro @afourpaper value_in_misc_valid.texi(,20) value_in_misc_valid.texi(,22) @pagesizes 200mm,150mm value_in_misc_valid.texi(,24) @afourpaper value_in_misc_valid.texi(,25) @headings on line following headings atext value_in_misc_valid.texi(,26) @oddfooting some text ignored atext value_in_misc_valid.texi(,27) @everyheading on line following everyheading atext value_in_misc_valid.texi(,28) value_in_misc_valid.texi(,29) @set need_arg 0.1 value_in_misc_valid.texi(,30) value_in_misc_valid.texi(,32) @need 0.1 value_in_misc_valid.texi(,34) value_in_misc_valid.texi(,35) @set raisesections_macro @raisesections value_in_misc_valid.texi(,36) @raisesections value_in_misc_valid.texi(,37) @set lowersections_macro @lowersections value_in_misc_valid.texi(,38) @lowersections value_in_misc_valid.texi(,39) value_in_misc_valid.texi(,40) @c tex error: Use of \ doesn't match its definition. value_in_misc_valid.texi(,43) @@definfoenclose phoo,//,\\ value_in_misc_valid.texi(,44) //bar\\ value_in_misc_valid.texi(,46) value_in_misc_valid.texi(,47) @set definfoenclose_name phi value_in_misc_valid.texi(,49) value_in_misc_valid.texi(,56) value_in_misc_valid.texi(,57) :bar: value_in_misc_valid.texi(,58) value_in_misc_valid.texi(,59) @set strong_macro @strong value_in_misc_valid.texi(,60) @set strong_name strong value_in_misc_valid.texi(,61) value_in_misc_valid.texi(,65) @strong{very strong} value_in_misc_valid.texi(,66) value_in_misc_valid.texi(,68) value_in_misc_valid.texi(,72) (strong: is it really strong? :) value_in_misc_valid.texi(,73) value_in_misc_valid.texi(,74) @kbd{something before kbdinputstyle} value_in_misc_valid.texi(,75) value_in_misc_valid.texi(,76) @set kbdinputstyle_arg code value_in_misc_valid.texi(,78) @kbdinputstyle code value_in_misc_valid.texi(,80) value_in_misc_valid.texi(,81) @kbd{truc} value_in_misc_valid.texi(,82) value_in_misc_valid.texi(,83) @example value_in_misc_valid.texi(,84) @kbd{example} value_in_misc_valid.texi(,85) @end example value_in_misc_valid.texi(,86) value_in_misc_valid.texi(,87) @set asis_arg asis value_in_misc_valid.texi(,88) @set zero 0 value_in_misc_valid.texi(,89) @set none_arg none value_in_misc_valid.texi(,90) @set four 4 value_in_misc_valid.texi(,91) @set six 6 value_in_misc_valid.texi(,92) value_in_misc_valid.texi(,94) @paragraphindent asis value_in_misc_valid.texi(,95) @paragraphindent 0 value_in_misc_valid.texi(,96) @paragraphindent none value_in_misc_valid.texi(,97) @paragraphindent 4 value_in_misc_valid.texi(,98) @firstparagraphindent none value_in_misc_valid.texi(,99) @exampleindent 6 value_in_misc_valid.texi(,101) value_in_misc_valid.texi(,102) @set end_arg end value_in_misc_valid.texi(,103) @set separate_arg separate value_in_misc_valid.texi(,104) @footnotestyle end value_in_misc_valid.texi(,105) @footnotestyle separate value_in_misc_valid.texi(,106) value_in_misc_valid.texi(,107) @set latin1 ISO-8859-1 value_in_misc_valid.texi(,109) @documentencoding ISO-8859-1 value_in_misc_valid.texi(,111) value_in_misc_valid.texi(,112) @set on_arg on value_in_misc_valid.texi(,113) @set off_arg off value_in_misc_valid.texi(,115) @frenchspacing on value_in_misc_valid.texi(,116) @frenchspacing off value_in_misc_valid.texi(,118) value_in_misc_valid.texi(,119) @c accepts 10 or 11 value_in_misc_valid.texi(,120) @set ten 10 value_in_misc_valid.texi(,122) @fonttextsize 10 value_in_misc_valid.texi(,124) @c accept false or true value_in_misc_valid.texi(,125) @c makeinfo don't care about the arg and remove the remainiing of the line value_in_misc_valid.texi(,126) @set false_arg false value_in_misc_valid.texi(,127) @set true_arg true value_in_misc_valid.texi(,129) @allowcodebreaks false value_in_misc_valid.texi(,131) @code{false aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa} value_in_misc_valid.texi(,132) value_in_misc_valid.texi(,134) @allowcodebreaks true value_in_misc_valid.texi(,136) @code{true aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa} value_in_misc_valid.texi(,137) value_in_misc_valid.texi(,138) @subheading command removed value_in_misc_valid.texi(,139) value_in_misc_valid.texi(,140) @finalout value_in_misc_valid.texi(,141) value_in_misc_valid.texi(,142) @set page_macro @page value_in_misc_valid.texi(,143) @set noindent_macro @noindent value_in_misc_valid.texi(,144) @set refill_macro @refill value_in_misc_valid.texi(,145) value_in_misc_valid.texi(,146) @@page @page @@noindent @noindent @@refill @refill something value_in_misc_valid.texi(,147) value_in_misc_valid.texi(,148) @noindent noindent at beginning of line value_in_misc_valid.texi(,149) @noindent value_in_misc_valid.texi(,150) noindent on the preceding line value_in_misc_valid.texi(,151) @noindent noindent after space at beginning of line value_in_misc_valid.texi(,152) @page page at beginning of line value_in_misc_valid.texi(,153) @page value_in_misc_valid.texi(,154) After page on it's own line. value_in_misc_valid.texi(,155) value_in_misc_valid.texi(,156) @@page @page @@noindent @noindent @@refill @refill value_in_misc_valid.texi(,157) value_in_misc_valid.texi(,158) @set contents_macro @contents value_in_misc_valid.texi(,159) @contents value_in_misc_valid.texi(,160) value_in_misc_valid.texi(,161) @subheading special value_in_misc_valid.texi(,162) value_in_misc_valid.texi(,163) Only valid between iftex: value_in_misc_valid.texi(,164) @c @@vskip @vskip @@cropmarks @cropmarks value_in_misc_valid.texi(,165) Unknown ??? value_in_misc_valid.texi(,166) @c @@fillbreak @fillbreak eol value_in_misc_valid.texi(,167) value_in_misc_valid.texi(,168) @set exdent_macro @exdent value_in_misc_valid.texi(,170) @exdent line after exdent value_in_misc_valid.texi(,172) value_in_misc_valid.texi(,173) And now sp: value_in_misc_valid.texi(,174) value_in_misc_valid.texi(,175) @set two 2 value_in_misc_valid.texi(,181) @sp 2 value_in_misc_valid.texi(,182) value_in_misc_valid.texi(,183) @set result_macro @result value_in_misc_valid.texi(,184) value_in_misc_valid.texi(,185) @clickstyle @result value_in_misc_valid.texi(,186) value_in_misc_valid.texi(,187) @menu value_in_misc_valid.texi(,188) * node atext:: value_in_misc_valid.texi(,189) * bidule:: value_in_misc_valid.texi(,190) * bidule2:: value_in_misc_valid.texi(,191) @end menu value_in_misc_valid.texi(,192) value_in_misc_valid.texi(,193) value_in_misc_valid.texi(,194) @node node atext value_in_misc_valid.texi(,195) @chapter chapter value_in_misc_valid.texi(,196) @menu value_in_misc_valid.texi(,197) * truc:: value_in_misc_valid.texi(,198) @end menu value_in_misc_valid.texi(,199) value_in_misc_valid.texi(,200) @node truc value_in_misc_valid.texi(,201) @section section value_in_misc_valid.texi(,202) value_in_misc_valid.texi(,203) @contents value_in_misc_valid.texi(,204) value_in_misc_valid.texi(,205) @node bidule value_in_misc_valid.texi(,206) @chapter bidule value_in_misc_valid.texi(,207) value_in_misc_valid.texi(,208) @set shortcontents_macro @shortcontents value_in_misc_valid.texi(,209) @shortcontents value_in_misc_valid.texi(,210) value_in_misc_valid.texi(,211) @node bidule2 value_in_misc_valid.texi(,212) @chapter last value_in_misc_valid.texi(,213) value_in_misc_valid.texi(,214) @bye texi2html-1.82/test/macros/res/texi_value_in_misc_valid/value_in_misc_valid.texi0000644000175000017500000000570411264347122032210 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename value_in_misc.info @hyphenation{some-where be-low may-be to-morow } @set text atext @node Top @top top atext @subheading Comment like: atext Text line followed by a comment on the same line and another below @c comment @value{text} @c comment @value{text} @set pagesizes_arg 200mm,150mm @set afourpaper_macro @afourpaper @pagesizes 200mm,150mm @afourpaper @headings on line following headings atext @oddfooting some text ignored atext @everyheading on line following everyheading atext @set need_arg 0.1 @need 0.1 @set raisesections_macro @raisesections @raisesections @set lowersections_macro @lowersections @lowersections @c tex error: Use of \ doesn't match its definition. @@definfoenclose phoo,//,\\ //bar\\ @set definfoenclose_name phi :bar: @set strong_macro @strong @set strong_name strong @strong{very strong} (strong: is it really strong? :) @kbd{something before kbdinputstyle} @set kbdinputstyle_arg code @kbdinputstyle code @kbd{truc} @example @kbd{example} @end example @set asis_arg asis @set zero 0 @set none_arg none @set four 4 @set six 6 @paragraphindent asis @paragraphindent 0 @paragraphindent none @paragraphindent 4 @firstparagraphindent none @exampleindent 6 @set end_arg end @set separate_arg separate @footnotestyle end @footnotestyle separate @set latin1 ISO-8859-1 @documentencoding ISO-8859-1 @set on_arg on @set off_arg off @frenchspacing on @frenchspacing off @c accepts 10 or 11 @set ten 10 @fonttextsize 10 @c accept false or true @c makeinfo don't care about the arg and remove the remainiing of the line @set false_arg false @set true_arg true @allowcodebreaks false @code{false aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa} @allowcodebreaks true @code{true aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa} @subheading command removed @finalout @set page_macro @page @set noindent_macro @noindent @set refill_macro @refill @@page @page @@noindent @noindent @@refill @refill something @noindent noindent at beginning of line @noindent noindent on the preceding line @noindent noindent after space at beginning of line @page page at beginning of line @page After page on it's own line. @@page @page @@noindent @noindent @@refill @refill @set contents_macro @contents @contents @subheading special Only valid between iftex: @c @@vskip @vskip @@cropmarks @cropmarks Unknown ??? @c @@fillbreak @fillbreak eol @set exdent_macro @exdent @exdent line after exdent And now sp: @set two 2 @sp 2 @set result_macro @result @clickstyle @result @menu * node atext:: * bidule:: * bidule2:: @end menu @node node atext @chapter chapter @menu * truc:: @end menu @node truc @section section @contents @node bidule @chapter bidule @set shortcontents_macro @shortcontents @shortcontents @node bidule2 @chapter last @bye texi2html-1.82/test/macros/res/cond_no-ifhtml_no-ifinfo_no-iftex/0000755000175000017500000000000011264347122026743 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/cond_no-ifhtml_no-ifinfo_no-iftex/cond.html0000644000175000017500000000356111264347122030561 0ustar flichtenheldflichtenheld Untitled Document

    Top

    This is ifnothtml text.

    This is ifnotinfo text.

    This is ifnottex text.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/macros/res/cond_no-ifhtml_no-ifinfo_no-iftex/cond.20000644000175000017500000000000011264347122027737 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/node-expand_xml/0000755000175000017500000000000011264347122023350 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/node-expand_xml/node-expand.xml0000644000175000017500000000551711264347122026304 0ustar flichtenheldflichtenheld node-expand.xml Node 1 Top (dir) (dir) (dir) Expansion in Node Names Node 1 Node 1 @node `2' @node `2' ``node'' with---tricks “node” with—tricks See @node `2'. Node 1 @node `2' Top Top Chapter 1 entry for chapter 1This is chapter 1. See @node `2'. Section 1.1 Section 1.1 Section 1.1 Section 1.1 Node 1 Node 1 entry for section 1.1This is section 1.1. @node `2' ``node'' with---tricks Node 1 Top Node 2 entry for chapter 2This is chapter 2. See Node 1. See Node 1. See ``node'' with---tricksNode with some tricks. ``node'' with---tricks @node `2' Top tricksAnother node. cp texi2html-1.82/test/macros/res/node-expand_xml/node-expand.20000644000175000017500000000003211264347122025630 0ustar flichtenheldflichtenheldi18n: missing string See texi2html-1.82/test/macros/res/texi_macro_zero/0000755000175000017500000000000011264347123023460 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_macro_zero/macro_zero.passfirst0000644000175000017500000000064511264347123027565 0ustar flichtenheldflichtenheldmacro_zero.texi(,2) @setfilename macro_zero.info macro_zero.texi(,3) macro_zero.texi(,4) @node Top macro_zero.texi(,5) @top top macro/value is a zero macro_zero.texi(,6) macro_zero.texi(,7) @set zero 0 macro_zero.texi(,8) macro_zero.texi(,12) macro_zero.texi(,13) Macro macro_zero.texi(zero,14) 0 macro_zero.texi(,15) macro_zero.texi(,16) Value macro_zero.texi(,17) 0 macro_zero.texi(,18) macro_zero.texi(,19) @bye texi2html-1.82/test/macros/res/texi_macro_zero/macro_zero.texi0000644000175000017500000000021511264347123026511 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename macro_zero.info @node Top @top top macro/value is a zero @set zero 0 Macro 0 Value 0 @bye texi2html-1.82/test/macros/res/texi_macro_zero/macro_zero.passtexi0000644000175000017500000000064511264347123027407 0ustar flichtenheldflichtenheldmacro_zero.texi(,2) @setfilename macro_zero.info macro_zero.texi(,3) macro_zero.texi(,4) @node Top macro_zero.texi(,5) @top top macro/value is a zero macro_zero.texi(,6) macro_zero.texi(,7) @set zero 0 macro_zero.texi(,8) macro_zero.texi(,12) macro_zero.texi(,13) Macro macro_zero.texi(zero,14) 0 macro_zero.texi(,15) macro_zero.texi(,16) Value macro_zero.texi(,17) 0 macro_zero.texi(,18) macro_zero.texi(,19) @bye texi2html-1.82/test/macros/res/texi_macro_zero/macro_zero.20000644000175000017500000000000011264347123025671 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_value_in_pass0_macros/0000755000175000017500000000000011264347122025573 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_value_in_pass0_macros/value_in_pass0_macros.20000644000175000017500000000000011264347122032120 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_value_in_pass0_macros/value_in_pass0_macros.passfirst0000644000175000017500000000742411264347122034016 0ustar flichtenheldflichtenheldvalue_in_pass0_macros.texi(,2) value_in_pass0_macros.texi(,3) @setfilename value_in_pass0_macros.info value_in_pass0_macros.texi(,4) value_in_pass0_macros.texi(,5) @node Top value_in_pass0_macros.texi(,6) @top value in index commands value_in_pass0_macros.texi(,7) value_in_pass0_macros.texi(,8) @set cp cp value_in_pass0_macros.texi(,9) @set fn fn value_in_pass0_macros.texi(,10) @set syncodeindex_command @syncodeindex value_in_pass0_macros.texi(,11) value_in_pass0_macros.texi(,12) @syncodeindex cp fn value_in_pass0_macros.texi(,13) @syncodeindex cp fn value_in_pass0_macros.texi(,14) value_in_pass0_macros.texi(,15) @set en en value_in_pass0_macros.texi(,16) @set documentlanguage_command @documentlanguage value_in_pass0_macros.texi(,17) value_in_pass0_macros.texi(,18) documentlanguage @documentlanguage en value_in_pass0_macros.texi(,19) value_in_pass0_macros.texi(,20) documentlanguage on its line value_in_pass0_macros.texi(,21) @documentlanguage en value_in_pass0_macros.texi(,22) line following documentlanguage value_in_pass0_macros.texi(,23) value_in_pass0_macros.texi(,24) @set truc truc value_in_pass0_macros.texi(,25) value_in_pass0_macros.texi(,26) definedx truc value_in_pass0_macros.texi(,27) @defindex truc value_in_pass0_macros.texi(,28) after value_in_pass0_macros.texi(,29) value_in_pass0_macros.texi(,30) @set trucindex_command @trucindex value_in_pass0_macros.texi(,31) value_in_pass0_macros.texi(,32) @trucindex index truc value_in_pass0_macros.texi(,33) value_in_pass0_macros.texi(,34) @set codeidx codeidx value_in_pass0_macros.texi(,35) value_in_pass0_macros.texi(,36) @defcodeindex codeidx value_in_pass0_macros.texi(,37) value_in_pass0_macros.texi(,38) @set defcodeindex_entry a @var{index entry} t@'e @^{@dotless{i}} value_in_pass0_macros.texi(,39) value_in_pass0_macros.texi(,40) @codeidxindex a @var{index entry} t@'e @^{@dotless{i}} value_in_pass0_macros.texi(,41) value_in_pass0_macros.texi(,42) @cindex cindex entry value_in_pass0_macros.texi(,43) value_in_pass0_macros.texi(,44) @syncodeindex ky pg value_in_pass0_macros.texi(,45) value_in_pass0_macros.texi(,46) @kindex truc kindex value_in_pass0_macros.texi(,47) @pindex pindex codeidx value_in_pass0_macros.texi(,48) value_in_pass0_macros.texi(,49) @synindex truc cp value_in_pass0_macros.texi(,50) value_in_pass0_macros.texi(,51) @defindex abc value_in_pass0_macros.texi(,52) @defindex defg value_in_pass0_macros.texi(,53) value_in_pass0_macros.texi(,54) @synindex abc defg value_in_pass0_macros.texi(,55) @synindex defg ky value_in_pass0_macros.texi(,56) value_in_pass0_macros.texi(,57) @defgindex defg index entry value_in_pass0_macros.texi(,58) value_in_pass0_macros.texi(,59) @abcindex abc index entry value_in_pass0_macros.texi(,60) value_in_pass0_macros.texi(,61) pg value_in_pass0_macros.texi(,62) @printindex pg value_in_pass0_macros.texi(,63) value_in_pass0_macros.texi(,64) ky value_in_pass0_macros.texi(,65) @printindex ky value_in_pass0_macros.texi(,66) value_in_pass0_macros.texi(,67) truc value_in_pass0_macros.texi(,68) @printindex truc value_in_pass0_macros.texi(,69) value_in_pass0_macros.texi(,70) value truc value_in_pass0_macros.texi(,71) @printindex truc value_in_pass0_macros.texi(,72) value_in_pass0_macros.texi(,73) cp value_in_pass0_macros.texi(,74) @printindex cp value_in_pass0_macros.texi(,75) value_in_pass0_macros.texi(,76) value cp value_in_pass0_macros.texi(,77) @printindex cp value_in_pass0_macros.texi(,78) value_in_pass0_macros.texi(,79) defg value_in_pass0_macros.texi(,80) @printindex defg value_in_pass0_macros.texi(,81) value_in_pass0_macros.texi(,82) abc value_in_pass0_macros.texi(,83) @printindex abc value_in_pass0_macros.texi(,84) value_in_pass0_macros.texi(,85) fn value_in_pass0_macros.texi(,86) @printindex fn value_in_pass0_macros.texi(,87) value_in_pass0_macros.texi(,88) @bye texi2html-1.82/test/macros/res/texi_value_in_pass0_macros/value_in_pass0_macros.texi0000644000175000017500000000213411264347122032742 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename value_in_pass0_macros.info @node Top @top value in index commands @set cp cp @set fn fn @set syncodeindex_command @syncodeindex @syncodeindex cp fn @syncodeindex cp fn @set en en @set documentlanguage_command @documentlanguage documentlanguage @documentlanguage en documentlanguage on its line @documentlanguage en line following documentlanguage @set truc truc definedx truc @defindex truc after @set trucindex_command @trucindex @trucindex index truc @set codeidx codeidx @defcodeindex codeidx @set defcodeindex_entry a @var{index entry} t@'e @^{@dotless{i}} @codeidxindex a @var{index entry} t@'e @^{@dotless{i}} @cindex cindex entry @syncodeindex ky pg @kindex truc kindex @pindex pindex codeidx @synindex truc cp @defindex abc @defindex defg @synindex abc defg @synindex defg ky @defgindex defg index entry @abcindex abc index entry pg @printindex pg ky @printindex ky truc @printindex truc value truc @printindex truc cp @printindex cp value cp @printindex cp defg @printindex defg abc @printindex abc fn @printindex fn @bye texi2html-1.82/test/macros/res/texi_value_in_pass0_macros/value_in_pass0_macros.passtexi0000644000175000017500000000742411264347122033640 0ustar flichtenheldflichtenheldvalue_in_pass0_macros.texi(,2) value_in_pass0_macros.texi(,3) @setfilename value_in_pass0_macros.info value_in_pass0_macros.texi(,4) value_in_pass0_macros.texi(,5) @node Top value_in_pass0_macros.texi(,6) @top value in index commands value_in_pass0_macros.texi(,7) value_in_pass0_macros.texi(,8) @set cp cp value_in_pass0_macros.texi(,9) @set fn fn value_in_pass0_macros.texi(,10) @set syncodeindex_command @syncodeindex value_in_pass0_macros.texi(,11) value_in_pass0_macros.texi(,12) @syncodeindex cp fn value_in_pass0_macros.texi(,13) @syncodeindex cp fn value_in_pass0_macros.texi(,14) value_in_pass0_macros.texi(,15) @set en en value_in_pass0_macros.texi(,16) @set documentlanguage_command @documentlanguage value_in_pass0_macros.texi(,17) value_in_pass0_macros.texi(,18) documentlanguage @documentlanguage en value_in_pass0_macros.texi(,19) value_in_pass0_macros.texi(,20) documentlanguage on its line value_in_pass0_macros.texi(,21) @documentlanguage en value_in_pass0_macros.texi(,22) line following documentlanguage value_in_pass0_macros.texi(,23) value_in_pass0_macros.texi(,24) @set truc truc value_in_pass0_macros.texi(,25) value_in_pass0_macros.texi(,26) definedx truc value_in_pass0_macros.texi(,27) @defindex truc value_in_pass0_macros.texi(,28) after value_in_pass0_macros.texi(,29) value_in_pass0_macros.texi(,30) @set trucindex_command @trucindex value_in_pass0_macros.texi(,31) value_in_pass0_macros.texi(,32) @trucindex index truc value_in_pass0_macros.texi(,33) value_in_pass0_macros.texi(,34) @set codeidx codeidx value_in_pass0_macros.texi(,35) value_in_pass0_macros.texi(,36) @defcodeindex codeidx value_in_pass0_macros.texi(,37) value_in_pass0_macros.texi(,38) @set defcodeindex_entry a @var{index entry} t@'e @^{@dotless{i}} value_in_pass0_macros.texi(,39) value_in_pass0_macros.texi(,40) @codeidxindex a @var{index entry} t@'e @^{@dotless{i}} value_in_pass0_macros.texi(,41) value_in_pass0_macros.texi(,42) @cindex cindex entry value_in_pass0_macros.texi(,43) value_in_pass0_macros.texi(,44) @syncodeindex ky pg value_in_pass0_macros.texi(,45) value_in_pass0_macros.texi(,46) @kindex truc kindex value_in_pass0_macros.texi(,47) @pindex pindex codeidx value_in_pass0_macros.texi(,48) value_in_pass0_macros.texi(,49) @synindex truc cp value_in_pass0_macros.texi(,50) value_in_pass0_macros.texi(,51) @defindex abc value_in_pass0_macros.texi(,52) @defindex defg value_in_pass0_macros.texi(,53) value_in_pass0_macros.texi(,54) @synindex abc defg value_in_pass0_macros.texi(,55) @synindex defg ky value_in_pass0_macros.texi(,56) value_in_pass0_macros.texi(,57) @defgindex defg index entry value_in_pass0_macros.texi(,58) value_in_pass0_macros.texi(,59) @abcindex abc index entry value_in_pass0_macros.texi(,60) value_in_pass0_macros.texi(,61) pg value_in_pass0_macros.texi(,62) @printindex pg value_in_pass0_macros.texi(,63) value_in_pass0_macros.texi(,64) ky value_in_pass0_macros.texi(,65) @printindex ky value_in_pass0_macros.texi(,66) value_in_pass0_macros.texi(,67) truc value_in_pass0_macros.texi(,68) @printindex truc value_in_pass0_macros.texi(,69) value_in_pass0_macros.texi(,70) value truc value_in_pass0_macros.texi(,71) @printindex truc value_in_pass0_macros.texi(,72) value_in_pass0_macros.texi(,73) cp value_in_pass0_macros.texi(,74) @printindex cp value_in_pass0_macros.texi(,75) value_in_pass0_macros.texi(,76) value cp value_in_pass0_macros.texi(,77) @printindex cp value_in_pass0_macros.texi(,78) value_in_pass0_macros.texi(,79) defg value_in_pass0_macros.texi(,80) @printindex defg value_in_pass0_macros.texi(,81) value_in_pass0_macros.texi(,82) abc value_in_pass0_macros.texi(,83) @printindex abc value_in_pass0_macros.texi(,84) value_in_pass0_macros.texi(,85) fn value_in_pass0_macros.texi(,86) @printindex fn value_in_pass0_macros.texi(,87) value_in_pass0_macros.texi(,88) @bye texi2html-1.82/test/macros/res/texi_node-value/0000755000175000017500000000000011264347123023357 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_node-value/node-value.passtexi0000644000175000017500000000073011264347123027200 0ustar flichtenheldflichtenheldnode-value.texi(,2) @setfilename node-value.info node-value.texi(,3) @set a--foo bar node-value.texi(,4) node-value.texi(,5) @node Top, bar, (dir), (dir) node-value.texi(,6) @top Var bar node-value.texi(,7) bar node-value.texi(,8) node-value.texi(,9) @node bar, BarFoo, Top, (dir) node-value.texi(,10) @chapter BarFoo node-value.texi(,11) node-value.texi(,12) @node BarFoo, , bar, (dir) node-value.texi(,13) @chapter bar node-value.texi(,14) node-value.texi(,15) @bye texi2html-1.82/test/macros/res/texi_node-value/node-value.passfirst0000644000175000017500000000073011264347123027356 0ustar flichtenheldflichtenheldnode-value.texi(,2) @setfilename node-value.info node-value.texi(,3) @set a--foo bar node-value.texi(,4) node-value.texi(,5) @node Top, bar, (dir), (dir) node-value.texi(,6) @top Var bar node-value.texi(,7) bar node-value.texi(,8) node-value.texi(,9) @node bar, BarFoo, Top, (dir) node-value.texi(,10) @chapter BarFoo node-value.texi(,11) node-value.texi(,12) @node BarFoo, , bar, (dir) node-value.texi(,13) @chapter bar node-value.texi(,14) node-value.texi(,15) @bye texi2html-1.82/test/macros/res/texi_node-value/node-value.texi0000644000175000017500000000031111264347123026304 0ustar flichtenheldflichtenheld\input texinfo @setfilename node-value.info @set a--foo bar @node Top, bar, (dir), (dir) @top Var bar bar @node bar, BarFoo, Top, (dir) @chapter BarFoo @node BarFoo, , bar, (dir) @chapter bar @bye texi2html-1.82/test/macros/res/texi_node-value/node-value.20000644000175000017500000000000011264347123025467 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/value_in_pass0_macros/0000755000175000017500000000000011264347123024543 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/value_in_pass0_macros/value_in_pass0_macros.20000644000175000017500000000000011264347123031070 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/value_in_pass0_macros/index.html0000644000175000017500000000755411264347123026553 0ustar flichtenheldflichtenheld Untitled Document: value in index commands

    value in index commands

    documentlanguage

    documentlanguage on its line line following documentlanguage

    definedx truc after

    pg

    ky

    truc

    value truc

    cp

    value cp

    defg

    abc

    fn


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/macros/res/texi_nested_macro_calls/0000755000175000017500000000000011264347122025140 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_nested_macro_calls/nested_macro_calls.20000644000175000017500000000000011264347122031032 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_nested_macro_calls/nested_macro_calls.passtexi0000644000175000017500000000056611264347122032552 0ustar flichtenheldflichtenheldnested_macro_calls.texi(,2) nested_macro_calls.texi(,3) @setfilename nested_macro_calls nested_macro_calls.texi(,4) nested_macro_calls.texi(,5) @node Top nested_macro_calls.texi(,6) nested_macro_calls.texi(,10) nested_macro_calls.texi(,15) nested_macro_calls.texi(truc,16) Before nested_macro_calls.texi(truc,16) (machin) nested_macro_calls.texi(truc,16) after truc. texi2html-1.82/test/macros/res/texi_nested_macro_calls/nested_macro_calls.passfirst0000644000175000017500000000052511264347122032723 0ustar flichtenheldflichtenheldnested_macro_calls.texi(,2) nested_macro_calls.texi(,3) @setfilename nested_macro_calls nested_macro_calls.texi(,4) nested_macro_calls.texi(,5) @node Top nested_macro_calls.texi(,6) nested_macro_calls.texi(,10) nested_macro_calls.texi(,15) nested_macro_calls.texi(truc,16) Before (machin) nested_macro_calls.texi(truc,16) after truc. texi2html-1.82/test/macros/res/texi_nested_macro_calls/nested_macro_calls.texi0000644000175000017500000000015511264347122031655 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename nested_macro_calls @node Top Before (machin) after truc. texi2html-1.82/test/macros/res/texi_include-value/0000755000175000017500000000000011264347123024055 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_include-value/include-value.passtexi0000644000175000017500000000261711264347123030402 0ustar flichtenheldflichtenheldinclude-value.texi(,2) @setfilename include-value.info include-value.texi(,3) @c include-value.texi(,4) include-value.texi(,5) @set testvar incl-incl.txi include-value.texi(,6) include-value.texi(,7) @c test - in the variable name, and concatenation of text after. include-value.texi(,8) @set test-var incl-incl.tx include-value.texi(,9) include-value.texi(,10) @c test - in the variable name, and concatenation of text before and after. include-value.texi(,11) @set test_var ncl-incl.tx include-value.texi(,12) include-value.texi(,13) include-value.texi(,14) @node Top include-value.texi(,15) incl-incl.txi(,1) testvar include: incl-incl.txi(,1) This is the @emph{included} file (include-value2.txi). include-value.texi(,17) include-value.texi(,18) testvar verbatiminclude: @verbatiminclude incl-incl.txi include-value.texi(,19) include-value.texi(,20) incl-incl.txi(,1) test-var include: incl-incl.txi(,1) This is the @emph{included} file (include-value2.txi). include-value.texi(,22) include-value.texi(,23) test-var verbatiminclude: @verbatiminclude incl-incl.txi include-value.texi(,24) include-value.texi(,25) incl-incl.txi(,1) test_var include: incl-incl.txi(,1) This is the @emph{included} file (include-value2.txi). include-value.texi(,27) include-value.texi(,28) test_var verbatiminclude: @verbatiminclude incl-incl.txi include-value.texi(,29) include-value.texi(,30) include-value.texi(,31) @bye texi2html-1.82/test/macros/res/texi_include-value/include-value.20000644000175000017500000000000011264347123026663 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_include-value/include-value.passfirst0000644000175000017500000000253111264347123030553 0ustar flichtenheldflichtenheldinclude-value.texi(,2) @setfilename include-value.info include-value.texi(,3) @c include-value.texi(,4) include-value.texi(,5) @set testvar incl-incl.txi include-value.texi(,6) include-value.texi(,7) @c test - in the variable name, and concatenation of text after. include-value.texi(,8) @set test-var incl-incl.tx include-value.texi(,9) include-value.texi(,10) @c test - in the variable name, and concatenation of text before and after. include-value.texi(,11) @set test_var ncl-incl.tx include-value.texi(,12) include-value.texi(,13) include-value.texi(,14) @node Top include-value.texi(,15) incl-incl.txi(,1) testvar include: This is the @emph{included} file (include-value2.txi). include-value.texi(,17) include-value.texi(,18) testvar verbatiminclude: @verbatiminclude incl-incl.txi include-value.texi(,19) include-value.texi(,20) incl-incl.txi(,1) test-var include: This is the @emph{included} file (include-value2.txi). include-value.texi(,22) include-value.texi(,23) test-var verbatiminclude: @verbatiminclude incl-incl.txi include-value.texi(,24) include-value.texi(,25) incl-incl.txi(,1) test_var include: This is the @emph{included} file (include-value2.txi). include-value.texi(,27) include-value.texi(,28) test_var verbatiminclude: @verbatiminclude incl-incl.txi include-value.texi(,29) include-value.texi(,30) include-value.texi(,31) @bye texi2html-1.82/test/macros/res/texi_include-value/include-value.texi0000644000175000017500000000126211264347123027506 0ustar flichtenheldflichtenheld\input texinfo @setfilename include-value.info @c @set testvar incl-incl.txi @c test - in the variable name, and concatenation of text after. @set test-var incl-incl.tx @c test - in the variable name, and concatenation of text before and after. @set test_var ncl-incl.tx @node Top testvar include: This is the @emph{included} file (include-value2.txi). testvar verbatiminclude: @verbatiminclude incl-incl.txi test-var include: This is the @emph{included} file (include-value2.txi). test-var verbatiminclude: @verbatiminclude incl-incl.txi test_var include: This is the @emph{included} file (include-value2.txi). test_var verbatiminclude: @verbatiminclude incl-incl.txi @bye texi2html-1.82/test/macros/res/macro-at/0000755000175000017500000000000011264347122021771 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/macro-at/macro-at.html0000644000175000017500000001616311264347122024371 0ustar flichtenheldflichtenheld AUTHORS – who did what on GNU LilyPond
    [Top] [Contents] [Index] [ ? ]

    AUTHORS – who did what on GNU LilyPond


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. AUTHORS – who did what on GNU LilyPond?

    This file lists authors of GNU LilyPond, and what they wrote. It also uses foobar{.


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/macros/res/macro-at/macro-at.20000644000175000017500000000000011264347122023545 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/node-expand/0000755000175000017500000000000011264347122022470 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/node-expand/Node-1.html0000644000175000017500000000656411264347122024414 0ustar flichtenheldflichtenheld Untitled Document: 1. Chapter 1
    node: Node 1 , Top , Top [ > ]

    1. Chapter 1

    This is chapter 1. See @node `2'.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/macros/res/node-expand/_0060_0060node_0027_0027-with_002d_002d_002dtricks.html0000644000175000017500000000670711264347122032737 0ustar flichtenheldflichtenheld Untitled Document: “node” with—tricks
    node: ``node'' with---tricks , @node `2' , Top [ > ]

    ``node'' with---tricks

    Another node.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/macros/res/node-expand/Section-1_002e1.html0000644000175000017500000000613011264347122025727 0ustar flichtenheldflichtenheld Untitled Document: Section 1.1
    node: Section 1.1 , Node 1 , Node 1 [ > ]

    Section 1.1

    This is section 1.1.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/macros/res/node-expand/index.html0000644000175000017500000001012311264347122024462 0ustar flichtenheldflichtenheld Untitled Document: Expansion in Node Names
    node: Top , (dir) , (dir) [ > ]

    Expansion in Node Names

    See @node `2'.


    node: Top , (dir) , (dir) [ > ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/macros/res/node-expand/_0040node-_00602_0027.html0000644000175000017500000000707411264347122026232 0ustar flichtenheldflichtenheld Untitled Document: 2. Node 2
    node: @node `2' , Node 1 , Top [ > ]

    2. Node 2

    This is chapter 2. See Node 1. See Node 1. See Node with some tricks.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/macros/res/node-expand/node-expand_abt.html0000644000175000017500000001025011264347122026404 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    node: , , [ > ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ > ] Following Node following in node reading order 1.2.4

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    node: , , [ > ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/macros/res/node-expand/node-expand.20000644000175000017500000000000011264347122024743 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/test_include/0000755000175000017500000000000011264347123022751 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/test_include/test_include.html0000644000175000017500000000354111264347123026324 0ustar flichtenheldflichtenheld Untitled Document

    Top

    This is a very simple texi manual. In included file.

    After inclusion.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/macros/res/test_include/test_include.20000644000175000017500000000000011264347123025504 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_cond/0000755000175000017500000000000011264347122022242 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_cond/cond.20000644000175000017500000000000011264347122023236 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_cond/cond.texi0000644000175000017500000000024511264347122024061 0ustar flichtenheldflichtenheld\input texinfo @setfilename cond.info @node Top @html This is html text. @end html This is ifhtml text. This is ifinfo text. This is ifnottex text. @bye texi2html-1.82/test/macros/res/texi_cond/cond.passfirst0000644000175000017500000000071111264347122025124 0ustar flichtenheldflichtenheldcond.texi(,2) @setfilename cond.info cond.texi(,3) cond.texi(,4) @node Top cond.texi(,5) cond.texi(,6) @html cond.texi(,7) This is html text. cond.texi(,8) @end html cond.texi(,9) cond.texi(,11) This is ifhtml text. cond.texi(,13) cond.texi(,17) cond.texi(,18) cond.texi(,20) This is ifinfo text. cond.texi(,22) cond.texi(,26) cond.texi(,27) cond.texi(,31) cond.texi(,35) cond.texi(,37) This is ifnottex text. cond.texi(,39) cond.texi(,40) @bye texi2html-1.82/test/macros/res/texi_cond/cond.passtexi0000644000175000017500000000071111264347122024746 0ustar flichtenheldflichtenheldcond.texi(,2) @setfilename cond.info cond.texi(,3) cond.texi(,4) @node Top cond.texi(,5) cond.texi(,6) @html cond.texi(,7) This is html text. cond.texi(,8) @end html cond.texi(,9) cond.texi(,11) This is ifhtml text. cond.texi(,13) cond.texi(,17) cond.texi(,18) cond.texi(,20) This is ifinfo text. cond.texi(,22) cond.texi(,26) cond.texi(,27) cond.texi(,31) cond.texi(,35) cond.texi(,37) This is ifnottex text. cond.texi(,39) cond.texi(,40) @bye texi2html-1.82/test/macros/res/texi_macro_in_pass_texi_commands/0000755000175000017500000000000011264347123027047 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_macro_in_pass_texi_commands/macro_in_pass_texi_commands.texi0000644000175000017500000000034411264347123035472 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename macro_in_passtexi_commands.info @documentencoding ISO-8859-1 @node Top @top top In included file. in themacro macro_in_pass_texi_commands@{info@} texi_commands.info @bye texi2html-1.82/test/macros/res/texi_macro_in_pass_texi_commands/macro_in_pass_texi_commands.passtexi0000644000175000017500000000205111264347123036356 0ustar flichtenheldflichtenheldmacro_in_pass_texi_commands.texi(,2) macro_in_pass_texi_commands.texi(,9) macro_in_pass_texi_commands.texi(begin_file,10) @setfilename macro_in_passtexi_commands.info macro_in_pass_texi_commands.texi(,11) macro_in_pass_texi_commands.texi(,16) macro_in_pass_texi_commands.texi(,20) macro_in_pass_texi_commands.texi(,24) macro_in_pass_texi_commands.texi(documentencoding_command,25) @documentencoding ISO-8859-1 macro_in_pass_texi_commands.texi(,26) macro_in_pass_texi_commands.texi(,27) macro_in_pass_texi_commands.texi(,32) macro_in_pass_texi_commands.texi(,33) @node Top macro_in_pass_texi_commands.texi(,34) @top top macro_in_pass_texi_commands.texi(,35) inc_file.texi(,1) In included file. macro_in_pass_texi_commands.texi(,37) macro_in_pass_texi_commands.texi(themacro,38) in themacro macro_in_pass_texi_commands.texi(,39) macro_in_pass_texi_commands.texi(,40) macro_in_pass_texi_commands@{info@} macro_in_pass_texi_commands.texi(end_file_name,41) texi_commands.info macro_in_pass_texi_commands.texi(,42) macro_in_pass_texi_commands.texi(,43) @bye ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootroottexi2html-1.82/test/macros/res/texi_macro_in_pass_texi_commands/macro_in_pass_texi_commands.passfirsttexi2html-1.82/test/macros/res/texi_macro_in_pass_texi_commands/macro_in_pass_texi_commands.passfirs0000644000175000017500000000205111264347123036350 0ustar flichtenheldflichtenheldmacro_in_pass_texi_commands.texi(,2) macro_in_pass_texi_commands.texi(,9) macro_in_pass_texi_commands.texi(begin_file,10) @setfilename macro_in_passtexi_commands.info macro_in_pass_texi_commands.texi(,11) macro_in_pass_texi_commands.texi(,16) macro_in_pass_texi_commands.texi(,20) macro_in_pass_texi_commands.texi(,24) macro_in_pass_texi_commands.texi(documentencoding_command,25) @documentencoding ISO-8859-1 macro_in_pass_texi_commands.texi(,26) macro_in_pass_texi_commands.texi(,27) macro_in_pass_texi_commands.texi(,32) macro_in_pass_texi_commands.texi(,33) @node Top macro_in_pass_texi_commands.texi(,34) @top top macro_in_pass_texi_commands.texi(,35) inc_file.texi(,1) In included file. macro_in_pass_texi_commands.texi(,37) macro_in_pass_texi_commands.texi(themacro,38) in themacro macro_in_pass_texi_commands.texi(,39) macro_in_pass_texi_commands.texi(,40) macro_in_pass_texi_commands@{info@} macro_in_pass_texi_commands.texi(end_file_name,41) texi_commands.info macro_in_pass_texi_commands.texi(,42) macro_in_pass_texi_commands.texi(,43) @bye texi2html-1.82/test/macros/res/texi_macro_in_pass_texi_commands/macro_in_pass_texi_commands.20000644000175000017500000000000011264347123034647 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_ifset_in_macro/0000755000175000017500000000000011264347123024301 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_ifset_in_macro/ifset_in_macro.passtexi0000644000175000017500000000043011264347123031041 0ustar flichtenheldflichtenheldifset_in_macro.texi(,2) ifset_in_macro.texi(,3) @setfilename ifset_in_macro.info ifset_in_macro.texi(,9) ifset_in_macro.texi(,10) @node Top ifset_in_macro.texi(,11) ifset_in_macro.texi(,15) ifset_in_macro.texi(,16) text ifset_in_macro.texi(,17) ifset_in_macro.texi(,18) @bye texi2html-1.82/test/macros/res/texi_ifset_in_macro/ifset_in_macro.20000644000175000017500000000000011264347123027333 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_ifset_in_macro/ifset_in_macro.texi0000644000175000017500000000014111264347123030151 0ustar flichtenheldflichtenheld\input texinfo.tex @c -*-texinfo-*- @setfilename ifset_in_macro.info @node Top text @bye texi2html-1.82/test/macros/res/texi_ifset_in_macro/ifset_in_macro.passfirst0000644000175000017500000000043011264347123031217 0ustar flichtenheldflichtenheldifset_in_macro.texi(,2) ifset_in_macro.texi(,3) @setfilename ifset_in_macro.info ifset_in_macro.texi(,9) ifset_in_macro.texi(,10) @node Top ifset_in_macro.texi(,11) ifset_in_macro.texi(,15) ifset_in_macro.texi(,16) text ifset_in_macro.texi(,17) ifset_in_macro.texi(,18) @bye texi2html-1.82/test/macros/res/texi_ifset_defined/0000755000175000017500000000000011264347123024110 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_ifset_defined/ifset_in_macro.20000644000175000017500000000000011264347123027142 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_ifset_defined/ifset_in_macro.texi0000644000175000017500000000014611264347123027765 0ustar flichtenheldflichtenheld\input texinfo.tex @c -*-texinfo-*- @setfilename ifset_in_macro.info @node Top arg text @bye texi2html-1.82/test/macros/res/texi_ifclear_in_macro/0000755000175000017500000000000011264347123024574 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_ifclear_in_macro/ifclear_in_macro.passfirst0000644000175000017500000000055711264347123032017 0ustar flichtenheldflichtenheldifclear_in_macro.texi(,2) ifclear_in_macro.texi(,3) @setfilename ifclear_in_macro.info ifclear_in_macro.texi(,9) ifclear_in_macro.texi(,10) @node Top ifclear_in_macro.texi(,11) ifclear_in_macro.texi(note,14) arg ifclear_in_macro.texi(note,14) ifclear_in_macro.texi(,15) ifclear_in_macro.texi(,16) text ifclear_in_macro.texi(,17) ifclear_in_macro.texi(,18) @bye texi2html-1.82/test/macros/res/texi_ifclear_in_macro/ifclear_in_macro.texi0000644000175000017500000000015011264347123030737 0ustar flichtenheldflichtenheld\input texinfo.tex @c -*-texinfo-*- @setfilename ifclear_in_macro.info @node Top arg text @bye texi2html-1.82/test/macros/res/texi_ifclear_in_macro/ifclear_in_macro.20000644000175000017500000000000011264347123030121 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_ifclear_in_macro/ifclear_in_macro.passtexi0000644000175000017500000000055711264347123031641 0ustar flichtenheldflichtenheldifclear_in_macro.texi(,2) ifclear_in_macro.texi(,3) @setfilename ifclear_in_macro.info ifclear_in_macro.texi(,9) ifclear_in_macro.texi(,10) @node Top ifclear_in_macro.texi(,11) ifclear_in_macro.texi(note,14) arg ifclear_in_macro.texi(note,14) ifclear_in_macro.texi(,15) ifclear_in_macro.texi(,16) text ifclear_in_macro.texi(,17) ifclear_in_macro.texi(,18) @bye texi2html-1.82/test/macros/res/texi_two_macros_on_a_line/0000755000175000017500000000000011264347122025477 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_two_macros_on_a_line/two_macros_on_a_line.passtexi0000644000175000017500000000256311264347122033447 0ustar flichtenheldflichtenheldtwo_macros_on_a_line.texi(,2) two_macros_on_a_line.texi(,3) @setfilename two_macros_on_a_line two_macros_on_a_line.texi(,4) two_macros_on_a_line.texi(,5) @node Top two_macros_on_a_line.texi(,6) @top top two_macros_on_a_line.texi(,7) two_macros_on_a_line.texi(,11) two_macros_on_a_line.texi(,17) two_macros_on_a_line.texi(,18) two_macros_on_a_line.texi(,19) @@mymacro@{@} @@mymacro@{@} two_macros_on_a_line.texi(mymacro,20) in mymacro two_macros_on_a_line.texi(mymacro,20) in mymacro two_macros_on_a_line.texi(,21) two_macros_on_a_line.texi(,22) @@mymacro @@mymacro@{@} two_macros_on_a_line.texi(mymacro,23) in mymacro two_macros_on_a_line.texi(mymacro,23) in mymacro two_macros_on_a_line.texi(,24) two_macros_on_a_line.texi(,25) @@mymacro@{@} @@mymacro two_macros_on_a_line.texi(mymacro,26) in mymacro two_macros_on_a_line.texi(mymacro,26) in mymacro two_macros_on_a_line.texi(,27) two_macros_on_a_line.texi(,28) with args two_macros_on_a_line.texi(mymacro_with_args,32) in with args two_macros_on_a_line.texi(mymacro_with_args,32) now the arg an two_macros_on_a_line.texi(mymacro_with_args,32) arg two_macros_on_a_line.texi(mymacro_with_args,32) two_macros_on_a_line.texi(mymacro_with_args,32) in macro two_macros_on_a_line.texi(mymacro_with_args,32) after two_macros_on_a_line.texi(mymacro_with_args,32) in mymacro two_macros_on_a_line.texi(,33) two_macros_on_a_line.texi(,34) @bye texi2html-1.82/test/macros/res/texi_two_macros_on_a_line/two_macros_on_a_line.passfirst0000644000175000017500000000232111264347122033615 0ustar flichtenheldflichtenheldtwo_macros_on_a_line.texi(,2) two_macros_on_a_line.texi(,3) @setfilename two_macros_on_a_line two_macros_on_a_line.texi(,4) two_macros_on_a_line.texi(,5) @node Top two_macros_on_a_line.texi(,6) @top top two_macros_on_a_line.texi(,7) two_macros_on_a_line.texi(,11) two_macros_on_a_line.texi(,17) two_macros_on_a_line.texi(,18) two_macros_on_a_line.texi(,19) @@mymacro@{@} @@mymacro@{@} two_macros_on_a_line.texi(mymacro,20) in mymacro in mymacro two_macros_on_a_line.texi(,21) two_macros_on_a_line.texi(,22) @@mymacro @@mymacro@{@} two_macros_on_a_line.texi(mymacro,23) in mymacro in mymacro two_macros_on_a_line.texi(,24) two_macros_on_a_line.texi(,25) @@mymacro@{@} @@mymacro two_macros_on_a_line.texi(mymacro,26) in mymacro in mymacro two_macros_on_a_line.texi(,27) two_macros_on_a_line.texi(,28) with args two_macros_on_a_line.texi(mymacro_with_args,32) in with args two_macros_on_a_line.texi(mymacro_with_args,32) now the arg an two_macros_on_a_line.texi(mymacro_with_args,32) arg two_macros_on_a_line.texi(mymacro_with_args,32) two_macros_on_a_line.texi(mymacro_with_args,32) in macro two_macros_on_a_line.texi(mymacro_with_args,32) after in mymacro two_macros_on_a_line.texi(,33) two_macros_on_a_line.texi(,34) @bye texi2html-1.82/test/macros/res/texi_two_macros_on_a_line/two_macros_on_a_line.texi0000644000175000017500000000046711264347122032561 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename two_macros_on_a_line @node Top @top top @@mymacro@{@} @@mymacro@{@} in mymacro in mymacro @@mymacro @@mymacro@{@} in mymacro in mymacro @@mymacro@{@} @@mymacro in mymacro in mymacro with args in with args now the arg an arg in macro after in mymacro @bye texi2html-1.82/test/macros/res/texi_two_macros_on_a_line/two_macros_on_a_line.20000644000175000017500000000000011264347122031730 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_macro_call_in_ifset/0000755000175000017500000000000011264347122025273 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_macro_call_in_ifset/macro_call_in_ifset.passfirst0000644000175000017500000000070711264347122033213 0ustar flichtenheldflichtenheldmacro_call_in_ifset.texi(,2) @comment %**start of header macro_call_in_ifset.texi(,3) @setfilename macro_in_ifset.info macro_call_in_ifset.texi(,4) macro_call_in_ifset.texi(,8) macro_call_in_ifset.texi(,9) @node Top macro_call_in_ifset.texi(,10) @top Top macro_call_in_ifset.texi(,11) macro_call_in_ifset.texi(,16) macro_call_in_ifset.texi(,23) macro_call_in_ifset.texi(,24) 24 text macro_call_in_ifset.texi(,25) macro_call_in_ifset.texi(,26) @bye texi2html-1.82/test/macros/res/texi_macro_call_in_ifset/macro_call_in_ifset.passtexi0000644000175000017500000000070711264347122033035 0ustar flichtenheldflichtenheldmacro_call_in_ifset.texi(,2) @comment %**start of header macro_call_in_ifset.texi(,3) @setfilename macro_in_ifset.info macro_call_in_ifset.texi(,4) macro_call_in_ifset.texi(,8) macro_call_in_ifset.texi(,9) @node Top macro_call_in_ifset.texi(,10) @top Top macro_call_in_ifset.texi(,11) macro_call_in_ifset.texi(,16) macro_call_in_ifset.texi(,23) macro_call_in_ifset.texi(,24) 24 text macro_call_in_ifset.texi(,25) macro_call_in_ifset.texi(,26) @bye texi2html-1.82/test/macros/res/texi_macro_call_in_ifset/macro_call_in_ifset.texi0000644000175000017500000000020611264347122032140 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @comment %**start of header @setfilename macro_in_ifset.info @node Top @top Top 24 text @bye texi2html-1.82/test/macros/res/texi_macro_call_in_ifset/macro_call_in_ifset.20000644000175000017500000000000011264347122031320 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_empty_macro/0000755000175000017500000000000011264347122023636 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_empty_macro/empty_macro.passfirst0000644000175000017500000000047411264347122030122 0ustar flichtenheldflichtenheldempty_macro.texi(,2) @setfilename empty_macro.info empty_macro.texi(,3) empty_macro.texi(,4) @node Top empty_macro.texi(,5) @top test empty macro empty_macro.texi(,6) empty_macro.texi(,9) empty_macro.texi(foo,10) empty_macro.texi(,11) empty_macro.texi(foo,12) empty_macro.texi(,13) empty_macro.texi(,14) @bye texi2html-1.82/test/macros/res/texi_empty_macro/empty_macro.20000644000175000017500000000000011264347122026226 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_empty_macro/empty_macro.texi0000644000175000017500000000013211264347122027044 0ustar flichtenheldflichtenheld\input texinfo @setfilename empty_macro.info @node Top @top test empty macro @bye texi2html-1.82/test/macros/res/texi_empty_macro/empty_macro.passtexi0000644000175000017500000000047411264347122027744 0ustar flichtenheldflichtenheldempty_macro.texi(,2) @setfilename empty_macro.info empty_macro.texi(,3) empty_macro.texi(,4) @node Top empty_macro.texi(,5) @top test empty macro empty_macro.texi(,6) empty_macro.texi(,9) empty_macro.texi(foo,10) empty_macro.texi(,11) empty_macro.texi(foo,12) empty_macro.texi(,13) empty_macro.texi(,14) @bye texi2html-1.82/test/macros/res/include-value/0000755000175000017500000000000011264347122023023 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/include-value/include-value.20000644000175000017500000000000011264347122025631 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/include-value/include-value.html0000644000175000017500000000454411264347122026455 0ustar flichtenheldflichtenheld Untitled Document

    Top

    testvar include: This is the included file (include-value2.txi).

    testvar verbatiminclude:

    This is the @emph{included} file (include-value2.txi).
    

    test-var include: This is the included file (include-value2.txi).

    test-var verbatiminclude:

    This is the @emph{included} file (include-value2.txi).
    

    test_var include: This is the included file (include-value2.txi).

    test_var verbatiminclude:

    This is the @emph{included} file (include-value2.txi).
    


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/macros/res/texi_macro_in_misc/0000755000175000017500000000000011264347123024122 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_macro_in_misc/macro_in_misc.passfirst0000644000175000017500000001376311264347123030676 0ustar flichtenheldflichtenheldmacro_in_misc.texi(,2) @setfilename macro_in_misc.info macro_in_misc.texi(,3) macro_in_misc.texi(,4) @hyphenation{some-where macro_in_misc.texi(,5) be-low macro_in_misc.texi(,6) may-be to-morow macro_in_misc.texi(,7) } macro_in_misc.texi(,8) macro_in_misc.texi(,12) macro_in_misc.texi(,13) @node Top macro_in_misc.texi(text,14) @top top atext macro_in_misc.texi(text,15) @subheading Comment like: atext macro_in_misc.texi(,16) macro_in_misc.texi(,17) Text line followed by a comment on the same line and another below @c comment @text{} macro_in_misc.texi(,18) @c comment @text{} macro_in_misc.texi(,19) macro_in_misc.texi(,23) macro_in_misc.texi(,27) macro_in_misc.texi(pagesizes_arg,28) @pagesizes 200mm,150mm macro_in_misc.texi(afourpaper_macro,29) @afourpaper macro_in_misc.texi(text,30) @headings on line following headings atext macro_in_misc.texi(text,31) @oddfooting some text ignored atext macro_in_misc.texi(text,32) @everyheading on line following everyheading atext macro_in_misc.texi(,33) macro_in_misc.texi(,37) macro_in_misc.texi(need_arg,38) @need 0.1 macro_in_misc.texi(,39) macro_in_misc.texi(raisesections_macro,43) @raisesections macro_in_misc.texi(lowersections_macro,47) @lowersections macro_in_misc.texi(,48) macro_in_misc.texi(,49) @c tex error: Use of \ doesn't match its definition. macro_in_misc.texi(,52) @@definfoenclose phoo,//,\\ macro_in_misc.texi(,53) //bar\\ macro_in_misc.texi(,55) macro_in_misc.texi(,60) macro_in_misc.texi(,61) @c this is required macro_in_misc.texi(,65) macro_in_misc.texi(,66) :bar: macro_in_misc.texi(,67) macro_in_misc.texi(,74) macro_in_misc.texi(strong_macro,75) @strong{very strong} macro_in_misc.texi(,76) macro_in_misc.texi(,78) macro_in_misc.texi(strong_macro,79) (strong: is it really strong? :) macro_in_misc.texi(,80) macro_in_misc.texi(,81) @kbd{something before kbdinputstyle} macro_in_misc.texi(,82) macro_in_misc.texi(kbdinputstyle_arg,86) @kbdinputstyle code macro_in_misc.texi(,87) macro_in_misc.texi(,88) @kbd{truc} macro_in_misc.texi(,89) macro_in_misc.texi(,90) @example macro_in_misc.texi(,91) @kbd{example} macro_in_misc.texi(,92) @end example macro_in_misc.texi(,93) macro_in_misc.texi(,109) macro_in_misc.texi(asis_arg,110) @paragraphindent asis macro_in_misc.texi(zero,111) @paragraphindent 0 macro_in_misc.texi(none_arg,112) @paragraphindent none macro_in_misc.texi(four,113) @paragraphindent 4 macro_in_misc.texi(none_arg,114) @firstparagraphindent none macro_in_misc.texi(six,115) @exampleindent 6 macro_in_misc.texi(,116) macro_in_misc.texi(end_arg,123) @footnotestyle end macro_in_misc.texi(separate_arg,124) @footnotestyle separate macro_in_misc.texi(,125) macro_in_misc.texi(latin1,129) @documentencoding ISO-8859-1 macro_in_misc.texi(,130) macro_in_misc.texi(on_arg,137) @frenchspacing on macro_in_misc.texi(off_arg,138) @frenchspacing off macro_in_misc.texi(,139) macro_in_misc.texi(,140) @c accepts 10 or 11 macro_in_misc.texi(ten,144) @fonttextsize 10 macro_in_misc.texi(,145) @c accept false or true macro_in_misc.texi(,146) @c makeinfo don't care about the arg and remove the remainiing of the line macro_in_misc.texi(false_arg,153) @allowcodebreaks false macro_in_misc.texi(,154) @code{false aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa} macro_in_misc.texi(,155) macro_in_misc.texi(true_arg,156) @allowcodebreaks true macro_in_misc.texi(,157) @code{true aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa} macro_in_misc.texi(,158) macro_in_misc.texi(,159) @subheading command removed macro_in_misc.texi(,160) macro_in_misc.texi(,161) @finalout macro_in_misc.texi(,162) macro_in_misc.texi(,172) macro_in_misc.texi(page_macro,173) @@page @page @@noindent @noindent @@refill @refill something macro_in_misc.texi(,174) macro_in_misc.texi(noindent_macro,175) @noindent noindent at beginning of line macro_in_misc.texi(noindent_macro,176) @noindent macro_in_misc.texi(,177) noindent on the preceding line macro_in_misc.texi(noindent_macro,178) @noindent noindent after space at beginning of line macro_in_misc.texi(,179) @page page at beginning of line macro_in_misc.texi(,180) @page macro_in_misc.texi(,181) After page on it's own line. macro_in_misc.texi(,182) macro_in_misc.texi(page_macro,183) @@page @page @@noindent @noindent @@refill @refill macro_in_misc.texi(,184) macro_in_misc.texi(contents_macro,188) @contents macro_in_misc.texi(,189) macro_in_misc.texi(,190) @subheading special macro_in_misc.texi(,191) macro_in_misc.texi(,192) Only valid between iftex: macro_in_misc.texi(,193) @c @@vskip @vskip @@cropmarks @cropmarks macro_in_misc.texi(,194) Unknown ??? macro_in_misc.texi(,195) @c @@fillbreak @fillbreak eol macro_in_misc.texi(,196) macro_in_misc.texi(exdent_macro,200) @exdent line after exdent macro_in_misc.texi(,201) macro_in_misc.texi(,202) And now sp: macro_in_misc.texi(,203) macro_in_misc.texi(two,207) @sp 2 macro_in_misc.texi(,208) macro_in_misc.texi(,212) macro_in_misc.texi(result_macro,213) @clickstyle @result macro_in_misc.texi(,214) macro_in_misc.texi(,215) @menu macro_in_misc.texi(text,216) * node atext:: macro_in_misc.texi(,217) * bidule:: macro_in_misc.texi(,218) * bidule2:: macro_in_misc.texi(,219) @end menu macro_in_misc.texi(,220) macro_in_misc.texi(,221) macro_in_misc.texi(text,222) @node node atext macro_in_misc.texi(,223) @chapter chapter macro_in_misc.texi(,224) @menu macro_in_misc.texi(,225) * truc:: macro_in_misc.texi(,226) @end menu macro_in_misc.texi(,227) macro_in_misc.texi(,228) @node truc macro_in_misc.texi(,229) @section section macro_in_misc.texi(,230) macro_in_misc.texi(contents_macro,231) @contents macro_in_misc.texi(,232) macro_in_misc.texi(,233) @node bidule macro_in_misc.texi(,234) @chapter bidule macro_in_misc.texi(,235) macro_in_misc.texi(shortcontents_macro,239) @shortcontents macro_in_misc.texi(,240) macro_in_misc.texi(,241) @node bidule2 macro_in_misc.texi(,242) @chapter last macro_in_misc.texi(,243) macro_in_misc.texi(,244) @bye texi2html-1.82/test/macros/res/texi_macro_in_misc/macro_in_misc.passtexi0000644000175000017500000001602511264347123030512 0ustar flichtenheldflichtenheldmacro_in_misc.texi(,2) @setfilename macro_in_misc.info macro_in_misc.texi(,3) macro_in_misc.texi(,4) @hyphenation{some-where macro_in_misc.texi(,5) be-low macro_in_misc.texi(,6) may-be to-morow macro_in_misc.texi(,7) } macro_in_misc.texi(,8) macro_in_misc.texi(,12) macro_in_misc.texi(,13) @node Top macro_in_misc.texi(text,14) @top top macro_in_misc.texi(text,14) atext macro_in_misc.texi(text,15) @subheading Comment like: macro_in_misc.texi(text,15) atext macro_in_misc.texi(,16) macro_in_misc.texi(,17) Text line followed by a comment on the same line and another below @c comment @text{} macro_in_misc.texi(,18) @c comment @text{} macro_in_misc.texi(,19) macro_in_misc.texi(,23) macro_in_misc.texi(,27) macro_in_misc.texi(pagesizes_arg,28) @pagesizes macro_in_misc.texi(pagesizes_arg,28) 200mm,150mm macro_in_misc.texi(afourpaper_macro,29) @afourpaper macro_in_misc.texi(text,30) @headings on line following headings macro_in_misc.texi(text,30) atext macro_in_misc.texi(text,31) @oddfooting some text ignored macro_in_misc.texi(text,31) atext macro_in_misc.texi(text,32) @everyheading on line following everyheading macro_in_misc.texi(text,32) atext macro_in_misc.texi(,33) macro_in_misc.texi(,37) macro_in_misc.texi(need_arg,38) @need macro_in_misc.texi(need_arg,38) 0.1 macro_in_misc.texi(,39) macro_in_misc.texi(raisesections_macro,43) @raisesections macro_in_misc.texi(lowersections_macro,47) @lowersections macro_in_misc.texi(,48) macro_in_misc.texi(,49) @c tex error: Use of \ doesn't match its definition. macro_in_misc.texi(,52) @@definfoenclose phoo,//,\\ macro_in_misc.texi(,52) macro_in_misc.texi(,53) //bar\\ macro_in_misc.texi(,55) macro_in_misc.texi(,60) macro_in_misc.texi(,61) @c this is required macro_in_misc.texi(,65) macro_in_misc.texi(,66) :bar: macro_in_misc.texi(,67) macro_in_misc.texi(,74) macro_in_misc.texi(strong_macro,75) @strong{very strong} macro_in_misc.texi(,76) macro_in_misc.texi(,78) macro_in_misc.texi(strong_macro,79) (strong: is it really strong? :) macro_in_misc.texi(,80) macro_in_misc.texi(,81) @kbd{something before kbdinputstyle} macro_in_misc.texi(,82) macro_in_misc.texi(kbdinputstyle_arg,86) @kbdinputstyle macro_in_misc.texi(kbdinputstyle_arg,86) code macro_in_misc.texi(,87) macro_in_misc.texi(,88) @kbd{truc} macro_in_misc.texi(,89) macro_in_misc.texi(,90) @example macro_in_misc.texi(,91) @kbd{example} macro_in_misc.texi(,92) @end example macro_in_misc.texi(,93) macro_in_misc.texi(,109) macro_in_misc.texi(asis_arg,110) @paragraphindent macro_in_misc.texi(asis_arg,110) asis macro_in_misc.texi(zero,111) @paragraphindent macro_in_misc.texi(zero,111) 0 macro_in_misc.texi(none_arg,112) @paragraphindent macro_in_misc.texi(none_arg,112) none macro_in_misc.texi(four,113) @paragraphindent macro_in_misc.texi(four,113) 4 macro_in_misc.texi(none_arg,114) @firstparagraphindent macro_in_misc.texi(none_arg,114) none macro_in_misc.texi(six,115) @exampleindent macro_in_misc.texi(six,115) 6 macro_in_misc.texi(,116) macro_in_misc.texi(end_arg,123) @footnotestyle macro_in_misc.texi(end_arg,123) end macro_in_misc.texi(separate_arg,124) @footnotestyle macro_in_misc.texi(separate_arg,124) separate macro_in_misc.texi(,125) macro_in_misc.texi(latin1,129) @documentencoding ISO-8859-1 macro_in_misc.texi(,130) macro_in_misc.texi(on_arg,137) @frenchspacing macro_in_misc.texi(on_arg,137) on macro_in_misc.texi(off_arg,138) @frenchspacing macro_in_misc.texi(off_arg,138) off macro_in_misc.texi(,139) macro_in_misc.texi(,140) @c accepts 10 or 11 macro_in_misc.texi(ten,144) @fonttextsize macro_in_misc.texi(ten,144) 10 macro_in_misc.texi(,145) @c accept false or true macro_in_misc.texi(,146) @c makeinfo don't care about the arg and remove the remainiing of the line macro_in_misc.texi(false_arg,153) @allowcodebreaks macro_in_misc.texi(false_arg,153) false macro_in_misc.texi(,154) @code{false aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa} macro_in_misc.texi(,155) macro_in_misc.texi(true_arg,156) @allowcodebreaks macro_in_misc.texi(true_arg,156) true macro_in_misc.texi(,157) @code{true aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa} macro_in_misc.texi(,158) macro_in_misc.texi(,159) @subheading command removed macro_in_misc.texi(,160) macro_in_misc.texi(,161) @finalout macro_in_misc.texi(,162) macro_in_misc.texi(,172) macro_in_misc.texi(page_macro,173) @@page macro_in_misc.texi(page_macro,173) @page @@noindent macro_in_misc.texi(page_macro,173) @noindent @@refill macro_in_misc.texi(page_macro,173) @refill something macro_in_misc.texi(,174) macro_in_misc.texi(noindent_macro,175) @noindent noindent at beginning of line macro_in_misc.texi(noindent_macro,176) @noindent macro_in_misc.texi(,177) noindent on the preceding line macro_in_misc.texi(noindent_macro,178) macro_in_misc.texi(noindent_macro,178) @noindent noindent after space at beginning of line macro_in_misc.texi(,179) @page page at beginning of line macro_in_misc.texi(,180) @page macro_in_misc.texi(,181) After page on it's own line. macro_in_misc.texi(,182) macro_in_misc.texi(page_macro,183) @@page macro_in_misc.texi(page_macro,183) @page @@noindent macro_in_misc.texi(page_macro,183) @noindent @@refill macro_in_misc.texi(page_macro,183) @refill macro_in_misc.texi(,184) macro_in_misc.texi(contents_macro,188) @contents macro_in_misc.texi(,189) macro_in_misc.texi(,190) @subheading special macro_in_misc.texi(,191) macro_in_misc.texi(,192) Only valid between iftex: macro_in_misc.texi(,193) @c @@vskip @vskip @@cropmarks @cropmarks macro_in_misc.texi(,194) Unknown ??? macro_in_misc.texi(,195) @c @@fillbreak @fillbreak eol macro_in_misc.texi(,196) macro_in_misc.texi(exdent_macro,200) @exdent line after exdent macro_in_misc.texi(,201) macro_in_misc.texi(,202) And now sp: macro_in_misc.texi(,203) macro_in_misc.texi(two,207) @sp macro_in_misc.texi(two,207) 2 macro_in_misc.texi(,208) macro_in_misc.texi(,212) macro_in_misc.texi(result_macro,213) @clickstyle macro_in_misc.texi(result_macro,213) @result macro_in_misc.texi(,214) macro_in_misc.texi(,215) @menu macro_in_misc.texi(text,216) * node macro_in_misc.texi(text,216) atext:: macro_in_misc.texi(,217) * bidule:: macro_in_misc.texi(,218) * bidule2:: macro_in_misc.texi(,219) @end menu macro_in_misc.texi(,220) macro_in_misc.texi(,221) macro_in_misc.texi(text,222) @node node macro_in_misc.texi(text,222) atext macro_in_misc.texi(,223) @chapter chapter macro_in_misc.texi(,224) @menu macro_in_misc.texi(,225) * truc:: macro_in_misc.texi(,226) @end menu macro_in_misc.texi(,227) macro_in_misc.texi(,228) @node truc macro_in_misc.texi(,229) @section section macro_in_misc.texi(,230) macro_in_misc.texi(contents_macro,231) @contents macro_in_misc.texi(,232) macro_in_misc.texi(,233) @node bidule macro_in_misc.texi(,234) @chapter bidule macro_in_misc.texi(,235) macro_in_misc.texi(shortcontents_macro,239) @shortcontents macro_in_misc.texi(,240) macro_in_misc.texi(,241) @node bidule2 macro_in_misc.texi(,242) @chapter last macro_in_misc.texi(,243) macro_in_misc.texi(,244) @bye texi2html-1.82/test/macros/res/texi_macro_in_misc/macro_in_misc.20000644000175000017500000000000011264347123026775 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_macro_in_misc/macro_in_misc.texi0000644000175000017500000000437511264347123027630 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename macro_in_misc.info @hyphenation{some-where be-low may-be to-morow } @node Top @top top atext @subheading Comment like: atext Text line followed by a comment on the same line and another below @c comment @text{} @c comment @text{} @pagesizes 200mm,150mm @afourpaper @headings on line following headings atext @oddfooting some text ignored atext @everyheading on line following everyheading atext @need 0.1 @raisesections @lowersections @c tex error: Use of \ doesn't match its definition. @@definfoenclose phoo,//,\\ //bar\\ @c this is required :bar: @strong{very strong} (strong: is it really strong? :) @kbd{something before kbdinputstyle} @kbdinputstyle code @kbd{truc} @example @kbd{example} @end example @paragraphindent asis @paragraphindent 0 @paragraphindent none @paragraphindent 4 @firstparagraphindent none @exampleindent 6 @footnotestyle end @footnotestyle separate @documentencoding ISO-8859-1 @frenchspacing on @frenchspacing off @c accepts 10 or 11 @fonttextsize 10 @c accept false or true @c makeinfo don't care about the arg and remove the remainiing of the line @allowcodebreaks false @code{false aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa} @allowcodebreaks true @code{true aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa} @subheading command removed @finalout @@page @page @@noindent @noindent @@refill @refill something @noindent noindent at beginning of line @noindent noindent on the preceding line @noindent noindent after space at beginning of line @page page at beginning of line @page After page on it's own line. @@page @page @@noindent @noindent @@refill @refill @contents @subheading special Only valid between iftex: @c @@vskip @vskip @@cropmarks @cropmarks Unknown ??? @c @@fillbreak @fillbreak eol @exdent line after exdent And now sp: @sp 2 @clickstyle @result @menu * node atext:: * bidule:: * bidule2:: @end menu @node node atext @chapter chapter @menu * truc:: @end menu @node truc @section section @contents @node bidule @chapter bidule @shortcontents @node bidule2 @chapter last @bye texi2html-1.82/test/macros/res/texi_macro-at/0000755000175000017500000000000011264347122023022 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_macro-at/macro-at.20000644000175000017500000000000011264347122024576 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_macro-at/macro-at.passtexi0000644000175000017500000000260711264347122026314 0ustar flichtenheldflichtenheldmacro-at.texi(,2) @setfilename macro-at.info macro-at.texi(,3) @settitle AUTHORS -- who did what on GNU LilyPond macro-at.texi(,4) macro-at.texi(,8) macro-at.texi(,12) macro-at.texi(,13) @node Top, , AUTHORS -- who did what on GNU LilyPond, (dir) macro-at.texi(,14) @top macro-at.texi(,15) @menu macro-at.texi(,16) * AUTHORS -- who did what on GNU LilyPond:: AUTHORS -- who did what. macro-at.texi(,17) @end menu macro-at.texi(,18) macro-at.texi(,19) @node AUTHORS -- who did what on GNU LilyPond, Top, , Top macro-at.texi(,20) @chapter AUTHORS -- who did what on GNU LilyPond? macro-at.texi(,21) macro-at.texi(,22) This file lists authors of GNU LilyPond, and what they wrote. macro-at.texi(,23) It also uses foobar@{. macro-at.texi(,24) macro-at.texi(,25) @itemize @bullet macro-at.texi(,26) @item @email{pinard@@iro.montreal.ca, Fran@,{c}ois Pinard}, macro-at.texi(,27) parts of Documentation. macro-at.texi(,28) @item @email{foobar@@baz@@, The Foobar}, macro-at.texi(,29) the usual foobarical thing. macro-at.texi(,30) @item @email{another@@foobar@{, Buzzer}, macro-at.texi(,31) buzzed all the way. macro-at.texi(foo,32) @item @email{foo-expansion@@bar-expansion}, macro-at.texi(,33) also helped. macro-at.texi(,34) @item @email{tomcato@@xoommail.com, Tom Cato Amundsen}, macro-at.texi(,35) cembalo-partita in mundela. macro-at.texi(,36) @end itemize macro-at.texi(,37) macro-at.texi(,38) @bye texi2html-1.82/test/macros/res/texi_macro-at/macro-at.passfirst0000644000175000017500000000260711264347122026472 0ustar flichtenheldflichtenheldmacro-at.texi(,2) @setfilename macro-at.info macro-at.texi(,3) @settitle AUTHORS -- who did what on GNU LilyPond macro-at.texi(,4) macro-at.texi(,8) macro-at.texi(,12) macro-at.texi(,13) @node Top, , AUTHORS -- who did what on GNU LilyPond, (dir) macro-at.texi(,14) @top macro-at.texi(,15) @menu macro-at.texi(,16) * AUTHORS -- who did what on GNU LilyPond:: AUTHORS -- who did what. macro-at.texi(,17) @end menu macro-at.texi(,18) macro-at.texi(,19) @node AUTHORS -- who did what on GNU LilyPond, Top, , Top macro-at.texi(,20) @chapter AUTHORS -- who did what on GNU LilyPond? macro-at.texi(,21) macro-at.texi(,22) This file lists authors of GNU LilyPond, and what they wrote. macro-at.texi(,23) It also uses foobar@{. macro-at.texi(,24) macro-at.texi(,25) @itemize @bullet macro-at.texi(,26) @item @email{pinard@@iro.montreal.ca, Fran@,{c}ois Pinard}, macro-at.texi(,27) parts of Documentation. macro-at.texi(,28) @item @email{foobar@@baz@@, The Foobar}, macro-at.texi(,29) the usual foobarical thing. macro-at.texi(,30) @item @email{another@@foobar@{, Buzzer}, macro-at.texi(,31) buzzed all the way. macro-at.texi(foo,32) @item @email{foo-expansion@@bar-expansion}, macro-at.texi(,33) also helped. macro-at.texi(,34) @item @email{tomcato@@xoommail.com, Tom Cato Amundsen}, macro-at.texi(,35) cembalo-partita in mundela. macro-at.texi(,36) @end itemize macro-at.texi(,37) macro-at.texi(,38) @bye texi2html-1.82/test/macros/res/texi_macro-at/macro-at.texi0000644000175000017500000000153511264347122025424 0ustar flichtenheldflichtenheld\input texinfo @c -*- texinfo -*- @setfilename macro-at.info @settitle AUTHORS -- who did what on GNU LilyPond @node Top, , AUTHORS -- who did what on GNU LilyPond, (dir) @top @menu * AUTHORS -- who did what on GNU LilyPond:: AUTHORS -- who did what. @end menu @node AUTHORS -- who did what on GNU LilyPond, Top, , Top @chapter AUTHORS -- who did what on GNU LilyPond? This file lists authors of GNU LilyPond, and what they wrote. It also uses foobar@{. @itemize @bullet @item @email{pinard@@iro.montreal.ca, Fran@,{c}ois Pinard}, parts of Documentation. @item @email{foobar@@baz@@, The Foobar}, the usual foobarical thing. @item @email{another@@foobar@{, Buzzer}, buzzed all the way. @item @email{foo-expansion@@bar-expansion}, also helped. @item @email{tomcato@@xoommail.com, Tom Cato Amundsen}, cembalo-partita in mundela. @end itemize @bye texi2html-1.82/test/macros/res/texi_nested_ignore/0000755000175000017500000000000011264347122024144 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_nested_ignore/nested_ignore.texi0000644000175000017500000000017311264347122027665 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @comment %**start of header @setfilename nested_ignore.info @node Top @top Top @bye texi2html-1.82/test/macros/res/texi_nested_ignore/nested_ignore.passtexi0000644000175000017500000000050311264347122030551 0ustar flichtenheldflichtenheldnested_ignore.texi(,2) @comment %**start of header nested_ignore.texi(,3) @setfilename nested_ignore.info nested_ignore.texi(,4) nested_ignore.texi(,5) @node Top nested_ignore.texi(,6) @top Top nested_ignore.texi(,7) nested_ignore.texi(,12) nested_ignore.texi(,17) nested_ignore.texi(,22) nested_ignore.texi(,23) @bye texi2html-1.82/test/macros/res/texi_nested_ignore/nested_ignore.20000644000175000017500000000000011264347122027042 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_nested_ignore/nested_ignore.passfirst0000644000175000017500000000050311264347122030727 0ustar flichtenheldflichtenheldnested_ignore.texi(,2) @comment %**start of header nested_ignore.texi(,3) @setfilename nested_ignore.info nested_ignore.texi(,4) nested_ignore.texi(,5) @node Top nested_ignore.texi(,6) @top Top nested_ignore.texi(,7) nested_ignore.texi(,12) nested_ignore.texi(,17) nested_ignore.texi(,22) nested_ignore.texi(,23) @bye texi2html-1.82/test/macros/res/texi_macros/0000755000175000017500000000000011264347123022604 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_macros/macros.passtexi0000644000175000017500000000273311264347123025657 0ustar flichtenheldflichtenheldmacros.texi(,2) macros.texi(,3) @node Top macros.texi(,4) @top Test macro with include file and macro in macro macros.texi(,5) macros.texi(,6) @c makeinfo doesn't like: macros.texi(,7) @c a new macro: @@<: @< !!! macros.texi(,8) macros.texi(,9) @c makeinfo doesn't like: macros.texi(,10) @c @@aa without brace @aa macros.texi(,11) macros.texi(,12) macros.texi(,13) The file included: file.texi(,1) content of included file with arg2: \arg2\ macros.texi(,15) File has been included. macros.texi(,16) macros.texi(,22) macros.texi(macro1,25) Right. macros.texi(macro1,25) result of a macro with @samp{first arg macros.texi(macro1,25) macros.texi(macro1,25) no ?} and file.texi(,1) content of included file with arg2: \arg2\ macros.texi(macro1,25) second arg macros.texi(,26) Now define macro2 macros.texi(,31) Call macro2 macros.texi(macro2,34) With a doubles arg a simple @code{ macros.texi(macro2,34) arg} macros.texi(macro2,34) and re a simple @code{ macros.texi(macro2,34) arg} macros.texi(macro2,34) macros.texi(macro2,34) macros.texi(,35) Call macro2 with 2 args macros.texi(macro2,36) With a doubles arg arg with comma , here and re arg with comma , here macros.texi(macro2,36) macros.texi(,37) Define macro3 macros.texi(,46) Call macro3 macros.texi(macro3,47) @example macros.texi(macro3,47) /arg/ macros.texi(macro3,47) macros.texi(macro3,47) macros.texi(macro3,47) /arg/ macros.texi(macro3,47) @end example macros.texi(,48) macros.texi(,49) @contents macros.texi(,50) @bye texi2html-1.82/test/macros/res/texi_macros/macros.20000644000175000017500000000000011264347122024140 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_macros/macros.texi0000644000175000017500000000125311264347123024764 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top @top Test macro with include file and macro in macro @c makeinfo doesn't like: @c a new macro: @@<: @< !!! @c makeinfo doesn't like: @c @@aa without brace @aa The file included: content of included file with arg2: \arg2\ File has been included. Right. result of a macro with @samp{first arg no ?} and content of included file with arg2: \arg2\ second arg Now define macro2 Call macro2 With a doubles arg a simple @code{ arg} and re a simple @code{ arg} Call macro2 with 2 args With a doubles arg arg with comma , here and re arg with comma , here Define macro3 Call macro3 @example /arg/ /arg/ @end example @contents @bye texi2html-1.82/test/macros/res/texi_macros/macros.passfirst0000644000175000017500000000270411264347122026032 0ustar flichtenheldflichtenheldmacros.texi(,2) macros.texi(,3) @node Top macros.texi(,4) @top Test macro with include file and macro in macro macros.texi(,5) macros.texi(,6) @c makeinfo doesn't like: macros.texi(,7) @c a new macro: @@<: @< !!! macros.texi(,8) macros.texi(,9) @c makeinfo doesn't like: macros.texi(,10) @c @@aa without brace @aa macros.texi(,11) macros.texi(,12) macros.texi(,13) The file included: file.texi(,1) content of included file with arg2: \arg2\ macros.texi(,15) File has been included. macros.texi(,16) macros.texi(,22) macros.texi(macro1,25) Right. result of a macro with @samp{first arg macros.texi(macro1,25) macros.texi(macro1,25) no ?} and file.texi(,1) content of included file with arg2: \arg2\ macros.texi(macro1,25) second arg macros.texi(,26) Now define macro2 macros.texi(,31) Call macro2 macros.texi(macro2,34) With a doubles arg a simple @code{ macros.texi(macro2,34) arg} macros.texi(macro2,34) and re a simple @code{ macros.texi(macro2,34) arg} macros.texi(macro2,34) macros.texi(macro2,34) macros.texi(,35) Call macro2 with 2 args macros.texi(macro2,36) With a doubles arg arg with comma , here and re arg with comma , here macros.texi(macro2,36) macros.texi(,37) Define macro3 macros.texi(,46) Call macro3 macros.texi(macro3,47) @example macros.texi(macro3,47) /arg/ macros.texi(macro3,47) macros.texi(macro3,47) macros.texi(macro3,47) /arg/ macros.texi(macro3,47) @end example macros.texi(,48) macros.texi(,49) @contents macros.texi(,50) @bye texi2html-1.82/test/macros/res/texi_alias/0000755000175000017500000000000011264347122022410 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_alias/alias.texi0000644000175000017500000000045111264347122024374 0ustar flichtenheldflichtenheld\input texinfo @setfilename alias.info @top test alias before after arg Should be code: @code{code} Should be verb: @verb{!verb!} Should not be defined: @ignored{ignored} Should not be defined: @ignoredinmymacro{ignoredinmymacro} @table @code @item table item (code) @end table @bye texi2html-1.82/test/macros/res/texi_alias/alias.passtexi0000644000175000017500000000125011264347122025261 0ustar flichtenheldflichtenheldalias.texi(,2) @setfilename alias.info alias.texi(,3) alias.texi(,4) @top test alias alias.texi(,5) alias.texi(,6) alias.texi(,7) alias.texi(,11) alias.texi(,15) before alias.texi(,15) alias.texi(mymacro,22) after arg alias.texi(mymacro,22) alias.texi(mymacro,22) Should be code: @code{code} alias.texi(,23) alias.texi(,24) Should be verb: @verb{!verb!} alias.texi(,25) alias.texi(,26) Should not be defined: @ignored{ignored} alias.texi(,27) alias.texi(,28) Should not be defined: @ignoredinmymacro{ignoredinmymacro} alias.texi(,29) alias.texi(,30) @table @code alias.texi(,31) @item table item (code) alias.texi(,32) @end table alias.texi(,33) alias.texi(,34) @bye texi2html-1.82/test/macros/res/texi_alias/alias.passfirst0000644000175000017500000000123011264347122025435 0ustar flichtenheldflichtenheldalias.texi(,2) @setfilename alias.info alias.texi(,3) alias.texi(,4) @top test alias alias.texi(,5) alias.texi(,6) alias.texi(,7) alias.texi(,11) alias.texi(,15) before alias.texi(mymacro,22) after arg alias.texi(mymacro,22) alias.texi(mymacro,22) Should be code: @code{code} alias.texi(,23) alias.texi(,24) Should be verb: @verb{!verb!} alias.texi(,25) alias.texi(,26) Should not be defined: @ignored{ignored} alias.texi(,27) alias.texi(,28) Should not be defined: @ignoredinmymacro{ignoredinmymacro} alias.texi(,29) alias.texi(,30) @table @code alias.texi(,31) @item table item (code) alias.texi(,32) @end table alias.texi(,33) alias.texi(,34) @bye texi2html-1.82/test/macros/res/texi_alias/alias.20000644000175000017500000000000011264347122023552 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_expansion_order/0000755000175000017500000000000011264347123024517 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_expansion_order/expansion_order.passfirst0000644000175000017500000000017411264347123031660 0ustar flichtenheldflichtenheldexpansion_order.texi(,5) expansion_order.texi(,10) expansion_order.texi(bidule,11) \arg\ expansion_order.texi(bidule,11) texi2html-1.82/test/macros/res/texi_expansion_order/expansion_order.texi0000644000175000017500000000001211264347123030602 0ustar flichtenheldflichtenheld \arg\ texi2html-1.82/test/macros/res/texi_expansion_order/expansion_order.20000644000175000017500000000000011264347123027767 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_expansion_order/expansion_order.passtexi0000644000175000017500000000017411264347123031502 0ustar flichtenheldflichtenheldexpansion_order.texi(,5) expansion_order.texi(,10) expansion_order.texi(bidule,11) \arg\ expansion_order.texi(bidule,11) texi2html-1.82/test/macros/res/texi_bib-example/0000755000175000017500000000000011264347123023505 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_bib-example/bib-example.passfirst0000644000175000017500000003155511264347123027643 0ustar flichtenheldflichtenheldbib-example.texi(,2) @c % Copyright (C) 2004 Aaron S. Hawley bib-example.texi(,3) bib-example.texi(,4) @c % Author: Aaron S. Hawley bib-example.texi(,5) @c % Keywords: docs, texinfo, extensions, bib bib-example.texi(,6) bib-example.texi(,7) @c % This file is free software; you can redistribute it and/or modify bib-example.texi(,8) @c % it under the terms of the GNU General Public License as published by bib-example.texi(,9) @c % the Free Software Foundation; either version 2, or (at your option) bib-example.texi(,10) @c % any later version. bib-example.texi(,11) bib-example.texi(,12) @c % This file is distributed in the hope that it will be useful, bib-example.texi(,13) @c % but WITHOUT ANY WARRANTY; without even the implied warranty of bib-example.texi(,14) @c % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the bib-example.texi(,15) @c % GNU General Public License for more details. bib-example.texi(,16) bib-example.texi(,17) @c % You should have received a copy of the GNU General Public License bib-example.texi(,18) @c % along with texi2html; see the file COPYING. If not, write to bib-example.texi(,19) @c % the Free Software Foundation, Inc., 59 Temple Place - Suite 330, bib-example.texi(,20) @c % Boston, MA 02111-1307, USA. bib-example.texi(,21) bib-example.texi(,22) @comment %**start of header bib-example.texi(,23) @setfilename my-file-with-bib.info bib-example.texi(,24) @settitle Texinfo with a Bibliography and References bib-example.texi(,25) my-bib-macros.texi(,1) @c \input texinfo @c -*-texinfo-*- my-bib-macros.texi(,2) @c %% my-bib-macros.texi --- Texinfo macros providing a crude my-bib-macros.texi(,3) @c %% bibliography and citation capability. my-bib-macros.texi(,4) my-bib-macros.texi(,5) @c % Copyright (C) 2004 Aaron S. Hawley my-bib-macros.texi(,6) my-bib-macros.texi(,7) @c % Author: Aaron S. Hawley my-bib-macros.texi(,8) @c % Keywords: docs, texinfo, extensions, bib my-bib-macros.texi(,9) my-bib-macros.texi(,10) @c % This file is free software; you can redistribute it and/or modify my-bib-macros.texi(,11) @c % it under the terms of the GNU General Public License as published by my-bib-macros.texi(,12) @c % the Free Software Foundation; either version 2, or (at your option) my-bib-macros.texi(,13) @c % any later version. my-bib-macros.texi(,14) my-bib-macros.texi(,15) @c % This file is distributed in the hope that it will be useful, my-bib-macros.texi(,16) @c % but WITHOUT ANY WARRANTY; without even the implied warranty of my-bib-macros.texi(,17) @c % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the my-bib-macros.texi(,18) @c % GNU General Public License for more details. my-bib-macros.texi(,19) my-bib-macros.texi(,20) @c % You should have received a copy of the GNU General Public License my-bib-macros.texi(,21) @c % along with texi2html; see the file COPYING. If not, write to my-bib-macros.texi(,22) @c % the Free Software Foundation, Inc., 59 Temple Place - Suite 330, my-bib-macros.texi(,23) @c % Boston, MA 02111-1307, USA. my-bib-macros.texi(,24) my-bib-macros.texi(,25) @c %% Commentary: my-bib-macros.texi(,26) my-bib-macros.texi(,27) @c %%% Introduction my-bib-macros.texi(,28) my-bib-macros.texi(,29) @c %% Creates references to a ``Bibliography'' or ``References'' my-bib-macros.texi(,30) @c %% section of a Texinfo document, using Texinfo's my-bib-macros.texi(,31) @c %% macro system. Although not as terse a way to cite systems as is my-bib-macros.texi(,32) @c %% found in document systems like TeX, the format is simpler and my-bib-macros.texi(,33) @c %% the rendering is easier for non-academic readers. my-bib-macros.texi(,34) my-bib-macros.texi(,35) @c % my-bib-macros.texi(,36) my-bib-macros.texi(,37) @c %%% Usage my-bib-macros.texi(,38) my-bib-macros.texi(,39) @c %% References to cited works can be put in any section of a document. my-bib-macros.texi(,40) @c %% The cited works must be put in either a Texinfo table (for my-bib-macros.texi(,41) @c %% instance with ``@table @asis ... @end table'') or within a my-bib-macros.texi(,42) @c %% Texinfo list (something like ``@enumerate ... @end enumerate'' my-bib-macros.texi(,43) @c %% or ``@itemize @bullet ... @end itemize''). They are created my-bib-macros.texi(,44) @c %% with the command ``@mybibitem{REF-NAME}''. To cite a reference my-bib-macros.texi(,45) @c %% with a @mybibitem use ``@mybibcite{REF-NAME}''. my-bib-macros.texi(,46) my-bib-macros.texi(,47) @c %% The beginning of a document must include (using the @include my-bib-macros.texi(,48) @c %% command) the file my-bib-macros.texi, which should be made my-bib-macros.texi(,49) @c %% available in the current directory of the parent file. A single my-bib-macros.texi(,50) @c %% call should be made to choose to use a list or a table. The my-bib-macros.texi(,51) @c %% command to chose is called @mybibuselist{NODE}, where NODE is my-bib-macros.texi(,52) @c %% the node containing the location where the references are listed. my-bib-macros.texi(,53) my-bib-macros.texi(,54) @c % my-bib-macros.texi(,55) my-bib-macros.texi(,56) @c %%% Example my-bib-macros.texi(,57) my-bib-macros.texi(,58) @c %% \input texinfo @c -*-texinfo-*- my-bib-macros.texi(,59) @c %% @comment %**start of header my-bib-macros.texi(,60) @c %% @setfilename my-file-with-bib.info my-bib-macros.texi(,61) @c %% @settitle Texinfo with a Bibliography and References my-bib-macros.texi(,62) @c %% my-bib-macros.texi(,63) @c %% @include my-bib-macros.texi my-bib-macros.texi(,64) @c %% @mybibuselist{References} my-bib-macros.texi(,65) @c %% my-bib-macros.texi(,66) @c %% @comment %**end of header my-bib-macros.texi(,67) @c %% my-bib-macros.texi(,68) @c %% @node Top my-bib-macros.texi(,69) @c %% @top Top my-bib-macros.texi(,70) @c %% my-bib-macros.texi(,71) @c %% @menu my-bib-macros.texi(,72) @c %% * Introduction:: my-bib-macros.texi(,73) @c %% * @mybibnode{}:: my-bib-macros.texi(,74) @c %% my-bib-macros.texi(,75) @c %% @end menu my-bib-macros.texi(,76) @c %% my-bib-macros.texi(,77) @c %% @node Introduction my-bib-macros.texi(,78) @c %% @chapter Introduction my-bib-macros.texi(,79) @c %% my-bib-macros.texi(,80) @c %% The ability of a documentation format to make cross references to a my-bib-macros.texi(,81) @c %% bibliography, a feature of LaTeX @mybibcite{LaTeX2e}, isn't my-bib-macros.texi(,82) @c %% currently supported in Texinfo. my-bib-macros.texi(,83) @c %% my-bib-macros.texi(,84) @c %% @node @mybibnode{} my-bib-macros.texi(,85) @c %% @chapter References my-bib-macros.texi(,86) @c %% my-bib-macros.texi(,87) @c %% @itemize @asis my-bib-macros.texi(,88) @c %% my-bib-macros.texi(,89) @c %% @mybibitem{LaTeX2e} Leslie Lamport, LaTeX User's Guide and my-bib-macros.texi(,90) @c %% Reference Manual, 2nd edition, Addison-Wesley, Reading, my-bib-macros.texi(,91) @c %% Massachusetts, 1994. my-bib-macros.texi(,92) @c %% my-bib-macros.texi(,93) @c %% @end itemize my-bib-macros.texi(,94) @c %% my-bib-macros.texi(,95) @c %% @bye my-bib-macros.texi(,96) my-bib-macros.texi(,97) @c %% my-bib-macros.texi(,98) my-bib-macros.texi(,99) @c %% This example produces (in Info): my-bib-macros.texi(,100) my-bib-macros.texi(,101) @c %% 1 Introduction my-bib-macros.texi(,102) @c %% ************** my-bib-macros.texi(,103) @c %% my-bib-macros.texi(,104) @c %% The ability of a documentation format to make cross my-bib-macros.texi(,105) @c %% references to a bibliography, a feature of LaTeX (See item my-bib-macros.texi(,106) @c %% [LaTeX2e] in *Note LaTeX2e: References.), is not currently my-bib-macros.texi(,107) @c %% supported in Texinfo. my-bib-macros.texi(,108) @c %% my-bib-macros.texi(,109) @c %% my-bib-macros.texi(,110) @c %% 2 References my-bib-macros.texi(,111) @c %% ************ my-bib-macros.texi(,112) @c %% my-bib-macros.texi(,113) @c %% [LaTeX2e] Leslie Lamport, LaTeX User's Guide and Reference my-bib-macros.texi(,114) @c %% Manual, 2nd edition, Addison-Wesley, Reading, my-bib-macros.texi(,115) @c %% Massachusetts, 1994. my-bib-macros.texi(,116) my-bib-macros.texi(,117) @c %% and (in printed output): my-bib-macros.texi(,118) my-bib-macros.texi(,119) @c %% 1 Introduction my-bib-macros.texi(,120) @c %% ************** my-bib-macros.texi(,121) @c %% my-bib-macros.texi(,122) @c %% The ability of a documentation format to make cross my-bib-macros.texi(,123) @c %% references to a bibliography, a feature of LaTeX (See item my-bib-macros.texi(,124) @c %% [LaTeX2e] in Chapter 2 [References], page 3.), is not my-bib-macros.texi(,125) @c %% currently supported in Texinfo. my-bib-macros.texi(,126) @c %% my-bib-macros.texi(,127) @c %% my-bib-macros.texi(,128) @c %% 2 References my-bib-macros.texi(,129) @c %% ************ my-bib-macros.texi(,130) @c %% my-bib-macros.texi(,131) @c %% [LaTeX2e] Leslie Lamport, LaTeX User's Guide and Reference my-bib-macros.texi(,132) @c %% Manual, 2nd edition, Addison-Wesley, Reading, my-bib-macros.texi(,133) @c %% Massachusetts, 1994. my-bib-macros.texi(,134) my-bib-macros.texi(,135) @c % my-bib-macros.texi(,136) my-bib-macros.texi(,137) @c %%% Notes my-bib-macros.texi(,138) my-bib-macros.texi(,139) @c %% The pointers to references will be functional in hypertext my-bib-macros.texi(,140) @c %% documentation (info, HTML, XML and others) and properly rendered my-bib-macros.texi(,141) @c %% in print documents, because they are implemented with Texinfo's my-bib-macros.texi(,142) @c %% cross referencing capabilities (using @anchor and @ref). Failures my-bib-macros.texi(,143) @c %% by an author to make proper references with ``my-bib-macros'' in my-bib-macros.texi(,144) @c %% their document will give cross referencing errors by Texinfo my-bib-macros.texi(,145) @c %% conversion tools. my-bib-macros.texi(,146) my-bib-macros.texi(,147) @c %% Only one ``Reference'' section is allowed per document. my-bib-macros.texi(,148) my-bib-macros.texi(,149) @c %% An improvement of this system would create cross references my-bib-macros.texi(,150) @c %% (with @xref) at each cited work to all the originating cross my-bib-macros.texi(,151) @c %% refererences. my-bib-macros.texi(,152) my-bib-macros.texi(,153) @c % my-bib-macros.texi(,154) my-bib-macros.texi(,155) @c %% Code: my-bib-macros.texi(,156) my-bib-macros.texi(,157) @c % Configuration Options my-bib-macros.texi(,158) my-bib-macros.texi(,159) @c %% @mybibsetrefnode : Defines the name of the node to contain my-bib-macros.texi(,160) @c %% references. my-bib-macros.texi(,161) my-bib-macros.texi(,165) my-bib-macros.texi(,166) @c %% @mybibnode{} : Macro to be placed at node containing references my-bib-macros.texi(,167) @c %% and calls to @mybibcite{} my-bib-macros.texi(,168) my-bib-macros.texi(,172) my-bib-macros.texi(,173) @c %% @mybibusetable : Whether each @mybibitem will be put in a my-bib-macros.texi(,174) @c %% table. my-bib-macros.texi(,175) my-bib-macros.texi(,183) my-bib-macros.texi(,184) @c %% @mybibuselist : Whether each @mybibitem will be put in a my-bib-macros.texi(,185) @c %% list. my-bib-macros.texi(,186) my-bib-macros.texi(,194) my-bib-macros.texi(,195) my-bib-macros.texi(,196) @c %% @mybibcite{REF} : Cites the cross reference REF. my-bib-macros.texi(,197) my-bib-macros.texi(,208) my-bib-macros.texi(,212) my-bib-macros.texi(,213) @c %% @mybibcite{REF} : Creates a cross referenced citation REF. my-bib-macros.texi(,214) my-bib-macros.texi(,231) my-bib-macros.texi(,232) @c %% my-bib-macros.texi ends here bib-example.texi(mybibuselist,27) @set mybiblist true bib-example.texi(mybibuselist,27) @set mybibrefnode References bib-example.texi(,28) bib-example.texi(,29) @comment %**end of header bib-example.texi(,30) bib-example.texi(,31) @node Top bib-example.texi(,32) @top Top bib-example.texi(,33) bib-example.texi(,34) @menu bib-example.texi(,35) * Introduction:: bib-example.texi(mybibnode,36) * References:: bib-example.texi(,37) bib-example.texi(,38) @end menu bib-example.texi(,39) bib-example.texi(,40) @node Introduction bib-example.texi(,41) @chapter Introduction bib-example.texi(,42) bib-example.texi(,43) The ability of a documentation format to make cross references to a bib-example.texi(mybibcite,44) bibliography, a feature of LaTeX @c %**else if bib-example.texi(mybibcite,44) (See item [LaTeX2e] in @ref{References, LaTeX2e}.) bib-example.texi(mybibcite,44) , isn't bib-example.texi(,45) currently supported in Texinfo. bib-example.texi(,46) bib-example.texi(mybibnode,47) @node References bib-example.texi(,48) @chapter References bib-example.texi(,49) bib-example.texi(,50) @itemize @asis bib-example.texi(,51) bib-example.texi(mybibitem,52) @item bib-example.texi(mybibitem,52) @anchor{LaTeX2e}[LaTeX2e] bib-example.texi(mybibitem,52) @c %**else if bib-example.texi(mybibitem,52) Leslie Lamport, LaTeX User's Guide and bib-example.texi(,53) Reference Manual, 2nd edition, Addison-Wesley, Reading, bib-example.texi(,54) Massachusetts, 1994. bib-example.texi(,55) bib-example.texi(,56) @end itemize bib-example.texi(,57) bib-example.texi(,58) @bye texi2html-1.82/test/macros/res/texi_bib-example/bib-example.20000644000175000017500000000004311264347123025752 0ustar flichtenheldflichtenheld# Popped `anchor' in ifset/ifclear texi2html-1.82/test/macros/res/texi_bib-example/bib-example.texi0000644000175000017500000001614711264347123026576 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @c % Copyright (C) 2004 Aaron S. Hawley @c % Author: Aaron S. Hawley @c % Keywords: docs, texinfo, extensions, bib @c % This file is free software; you can redistribute it and/or modify @c % it under the terms of the GNU General Public License as published by @c % the Free Software Foundation; either version 2, or (at your option) @c % any later version. @c % This file is distributed in the hope that it will be useful, @c % but WITHOUT ANY WARRANTY; without even the implied warranty of @c % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @c % GNU General Public License for more details. @c % You should have received a copy of the GNU General Public License @c % along with texi2html; see the file COPYING. If not, write to @c % the Free Software Foundation, Inc., 59 Temple Place - Suite 330, @c % Boston, MA 02111-1307, USA. @comment %**start of header @setfilename my-file-with-bib.info @settitle Texinfo with a Bibliography and References @c \input texinfo @c -*-texinfo-*- @c %% my-bib-macros.texi --- Texinfo macros providing a crude @c %% bibliography and citation capability. @c % Copyright (C) 2004 Aaron S. Hawley @c % Author: Aaron S. Hawley @c % Keywords: docs, texinfo, extensions, bib @c % This file is free software; you can redistribute it and/or modify @c % it under the terms of the GNU General Public License as published by @c % the Free Software Foundation; either version 2, or (at your option) @c % any later version. @c % This file is distributed in the hope that it will be useful, @c % but WITHOUT ANY WARRANTY; without even the implied warranty of @c % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @c % GNU General Public License for more details. @c % You should have received a copy of the GNU General Public License @c % along with texi2html; see the file COPYING. If not, write to @c % the Free Software Foundation, Inc., 59 Temple Place - Suite 330, @c % Boston, MA 02111-1307, USA. @c %% Commentary: @c %%% Introduction @c %% Creates references to a ``Bibliography'' or ``References'' @c %% section of a Texinfo document, using Texinfo's @c %% macro system. Although not as terse a way to cite systems as is @c %% found in document systems like TeX, the format is simpler and @c %% the rendering is easier for non-academic readers. @c % @c %%% Usage @c %% References to cited works can be put in any section of a document. @c %% The cited works must be put in either a Texinfo table (for @c %% instance with ``@table @asis ... @end table'') or within a @c %% Texinfo list (something like ``@enumerate ... @end enumerate'' @c %% or ``@itemize @bullet ... @end itemize''). They are created @c %% with the command ``@mybibitem{REF-NAME}''. To cite a reference @c %% with a @mybibitem use ``@mybibcite{REF-NAME}''. @c %% The beginning of a document must include (using the @include @c %% command) the file my-bib-macros.texi, which should be made @c %% available in the current directory of the parent file. A single @c %% call should be made to choose to use a list or a table. The @c %% command to chose is called @mybibuselist{NODE}, where NODE is @c %% the node containing the location where the references are listed. @c % @c %%% Example @c %% \input texinfo @c -*-texinfo-*- @c %% @comment %**start of header @c %% @setfilename my-file-with-bib.info @c %% @settitle Texinfo with a Bibliography and References @c %% @c %% @include my-bib-macros.texi @c %% @mybibuselist{References} @c %% @c %% @comment %**end of header @c %% @c %% @node Top @c %% @top Top @c %% @c %% @menu @c %% * Introduction:: @c %% * @mybibnode{}:: @c %% @c %% @end menu @c %% @c %% @node Introduction @c %% @chapter Introduction @c %% @c %% The ability of a documentation format to make cross references to a @c %% bibliography, a feature of LaTeX @mybibcite{LaTeX2e}, isn't @c %% currently supported in Texinfo. @c %% @c %% @node @mybibnode{} @c %% @chapter References @c %% @c %% @itemize @asis @c %% @c %% @mybibitem{LaTeX2e} Leslie Lamport, LaTeX User's Guide and @c %% Reference Manual, 2nd edition, Addison-Wesley, Reading, @c %% Massachusetts, 1994. @c %% @c %% @end itemize @c %% @c %% @bye @c %% @c %% This example produces (in Info): @c %% 1 Introduction @c %% ************** @c %% @c %% The ability of a documentation format to make cross @c %% references to a bibliography, a feature of LaTeX (See item @c %% [LaTeX2e] in *Note LaTeX2e: References.), is not currently @c %% supported in Texinfo. @c %% @c %% @c %% 2 References @c %% ************ @c %% @c %% [LaTeX2e] Leslie Lamport, LaTeX User's Guide and Reference @c %% Manual, 2nd edition, Addison-Wesley, Reading, @c %% Massachusetts, 1994. @c %% and (in printed output): @c %% 1 Introduction @c %% ************** @c %% @c %% The ability of a documentation format to make cross @c %% references to a bibliography, a feature of LaTeX (See item @c %% [LaTeX2e] in Chapter 2 [References], page 3.), is not @c %% currently supported in Texinfo. @c %% @c %% @c %% 2 References @c %% ************ @c %% @c %% [LaTeX2e] Leslie Lamport, LaTeX User's Guide and Reference @c %% Manual, 2nd edition, Addison-Wesley, Reading, @c %% Massachusetts, 1994. @c % @c %%% Notes @c %% The pointers to references will be functional in hypertext @c %% documentation (info, HTML, XML and others) and properly rendered @c %% in print documents, because they are implemented with Texinfo's @c %% cross referencing capabilities (using @anchor and @ref). Failures @c %% by an author to make proper references with ``my-bib-macros'' in @c %% their document will give cross referencing errors by Texinfo @c %% conversion tools. @c %% Only one ``Reference'' section is allowed per document. @c %% An improvement of this system would create cross references @c %% (with @xref) at each cited work to all the originating cross @c %% refererences. @c % @c %% Code: @c % Configuration Options @c %% @mybibsetrefnode : Defines the name of the node to contain @c %% references. @c %% @mybibnode{} : Macro to be placed at node containing references @c %% and calls to @mybibcite{} @c %% @mybibusetable : Whether each @mybibitem will be put in a @c %% table. @c %% @mybibuselist : Whether each @mybibitem will be put in a @c %% list. @c %% @mybibcite{REF} : Cites the cross reference REF. @c %% @mybibcite{REF} : Creates a cross referenced citation REF. @c %% my-bib-macros.texi ends here @set mybiblist true @set mybibrefnode References @comment %**end of header @node Top @top Top @menu * Introduction:: * References:: @end menu @node Introduction @chapter Introduction The ability of a documentation format to make cross references to a bibliography, a feature of LaTeX @c %**else if (See item [LaTeX2e] in @ref{References, LaTeX2e}.) , isn't currently supported in Texinfo. @node References @chapter References @itemize @asis @item @anchor{LaTeX2e}[LaTeX2e] @c %**else if Leslie Lamport, LaTeX User's Guide and Reference Manual, 2nd edition, Addison-Wesley, Reading, Massachusetts, 1994. @end itemize @bye texi2html-1.82/test/macros/res/texi_bib-example/bib-example.passtexi0000644000175000017500000003171211264347123027460 0ustar flichtenheldflichtenheldbib-example.texi(,2) @c % Copyright (C) 2004 Aaron S. Hawley bib-example.texi(,3) bib-example.texi(,4) @c % Author: Aaron S. Hawley bib-example.texi(,5) @c % Keywords: docs, texinfo, extensions, bib bib-example.texi(,6) bib-example.texi(,7) @c % This file is free software; you can redistribute it and/or modify bib-example.texi(,8) @c % it under the terms of the GNU General Public License as published by bib-example.texi(,9) @c % the Free Software Foundation; either version 2, or (at your option) bib-example.texi(,10) @c % any later version. bib-example.texi(,11) bib-example.texi(,12) @c % This file is distributed in the hope that it will be useful, bib-example.texi(,13) @c % but WITHOUT ANY WARRANTY; without even the implied warranty of bib-example.texi(,14) @c % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the bib-example.texi(,15) @c % GNU General Public License for more details. bib-example.texi(,16) bib-example.texi(,17) @c % You should have received a copy of the GNU General Public License bib-example.texi(,18) @c % along with texi2html; see the file COPYING. If not, write to bib-example.texi(,19) @c % the Free Software Foundation, Inc., 59 Temple Place - Suite 330, bib-example.texi(,20) @c % Boston, MA 02111-1307, USA. bib-example.texi(,21) bib-example.texi(,22) @comment %**start of header bib-example.texi(,23) @setfilename my-file-with-bib.info bib-example.texi(,24) @settitle Texinfo with a Bibliography and References bib-example.texi(,25) my-bib-macros.texi(,1) @c \input texinfo @c -*-texinfo-*- my-bib-macros.texi(,2) @c %% my-bib-macros.texi --- Texinfo macros providing a crude my-bib-macros.texi(,3) @c %% bibliography and citation capability. my-bib-macros.texi(,4) my-bib-macros.texi(,5) @c % Copyright (C) 2004 Aaron S. Hawley my-bib-macros.texi(,6) my-bib-macros.texi(,7) @c % Author: Aaron S. Hawley my-bib-macros.texi(,8) @c % Keywords: docs, texinfo, extensions, bib my-bib-macros.texi(,9) my-bib-macros.texi(,10) @c % This file is free software; you can redistribute it and/or modify my-bib-macros.texi(,11) @c % it under the terms of the GNU General Public License as published by my-bib-macros.texi(,12) @c % the Free Software Foundation; either version 2, or (at your option) my-bib-macros.texi(,13) @c % any later version. my-bib-macros.texi(,14) my-bib-macros.texi(,15) @c % This file is distributed in the hope that it will be useful, my-bib-macros.texi(,16) @c % but WITHOUT ANY WARRANTY; without even the implied warranty of my-bib-macros.texi(,17) @c % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the my-bib-macros.texi(,18) @c % GNU General Public License for more details. my-bib-macros.texi(,19) my-bib-macros.texi(,20) @c % You should have received a copy of the GNU General Public License my-bib-macros.texi(,21) @c % along with texi2html; see the file COPYING. If not, write to my-bib-macros.texi(,22) @c % the Free Software Foundation, Inc., 59 Temple Place - Suite 330, my-bib-macros.texi(,23) @c % Boston, MA 02111-1307, USA. my-bib-macros.texi(,24) my-bib-macros.texi(,25) @c %% Commentary: my-bib-macros.texi(,26) my-bib-macros.texi(,27) @c %%% Introduction my-bib-macros.texi(,28) my-bib-macros.texi(,29) @c %% Creates references to a ``Bibliography'' or ``References'' my-bib-macros.texi(,30) @c %% section of a Texinfo document, using Texinfo's my-bib-macros.texi(,31) @c %% macro system. Although not as terse a way to cite systems as is my-bib-macros.texi(,32) @c %% found in document systems like TeX, the format is simpler and my-bib-macros.texi(,33) @c %% the rendering is easier for non-academic readers. my-bib-macros.texi(,34) my-bib-macros.texi(,35) @c % my-bib-macros.texi(,36) my-bib-macros.texi(,37) @c %%% Usage my-bib-macros.texi(,38) my-bib-macros.texi(,39) @c %% References to cited works can be put in any section of a document. my-bib-macros.texi(,40) @c %% The cited works must be put in either a Texinfo table (for my-bib-macros.texi(,41) @c %% instance with ``@table @asis ... @end table'') or within a my-bib-macros.texi(,42) @c %% Texinfo list (something like ``@enumerate ... @end enumerate'' my-bib-macros.texi(,43) @c %% or ``@itemize @bullet ... @end itemize''). They are created my-bib-macros.texi(,44) @c %% with the command ``@mybibitem{REF-NAME}''. To cite a reference my-bib-macros.texi(,45) @c %% with a @mybibitem use ``@mybibcite{REF-NAME}''. my-bib-macros.texi(,46) my-bib-macros.texi(,47) @c %% The beginning of a document must include (using the @include my-bib-macros.texi(,48) @c %% command) the file my-bib-macros.texi, which should be made my-bib-macros.texi(,49) @c %% available in the current directory of the parent file. A single my-bib-macros.texi(,50) @c %% call should be made to choose to use a list or a table. The my-bib-macros.texi(,51) @c %% command to chose is called @mybibuselist{NODE}, where NODE is my-bib-macros.texi(,52) @c %% the node containing the location where the references are listed. my-bib-macros.texi(,53) my-bib-macros.texi(,54) @c % my-bib-macros.texi(,55) my-bib-macros.texi(,56) @c %%% Example my-bib-macros.texi(,57) my-bib-macros.texi(,58) @c %% \input texinfo @c -*-texinfo-*- my-bib-macros.texi(,59) @c %% @comment %**start of header my-bib-macros.texi(,60) @c %% @setfilename my-file-with-bib.info my-bib-macros.texi(,61) @c %% @settitle Texinfo with a Bibliography and References my-bib-macros.texi(,62) @c %% my-bib-macros.texi(,63) @c %% @include my-bib-macros.texi my-bib-macros.texi(,64) @c %% @mybibuselist{References} my-bib-macros.texi(,65) @c %% my-bib-macros.texi(,66) @c %% @comment %**end of header my-bib-macros.texi(,67) @c %% my-bib-macros.texi(,68) @c %% @node Top my-bib-macros.texi(,69) @c %% @top Top my-bib-macros.texi(,70) @c %% my-bib-macros.texi(,71) @c %% @menu my-bib-macros.texi(,72) @c %% * Introduction:: my-bib-macros.texi(,73) @c %% * @mybibnode{}:: my-bib-macros.texi(,74) @c %% my-bib-macros.texi(,75) @c %% @end menu my-bib-macros.texi(,76) @c %% my-bib-macros.texi(,77) @c %% @node Introduction my-bib-macros.texi(,78) @c %% @chapter Introduction my-bib-macros.texi(,79) @c %% my-bib-macros.texi(,80) @c %% The ability of a documentation format to make cross references to a my-bib-macros.texi(,81) @c %% bibliography, a feature of LaTeX @mybibcite{LaTeX2e}, isn't my-bib-macros.texi(,82) @c %% currently supported in Texinfo. my-bib-macros.texi(,83) @c %% my-bib-macros.texi(,84) @c %% @node @mybibnode{} my-bib-macros.texi(,85) @c %% @chapter References my-bib-macros.texi(,86) @c %% my-bib-macros.texi(,87) @c %% @itemize @asis my-bib-macros.texi(,88) @c %% my-bib-macros.texi(,89) @c %% @mybibitem{LaTeX2e} Leslie Lamport, LaTeX User's Guide and my-bib-macros.texi(,90) @c %% Reference Manual, 2nd edition, Addison-Wesley, Reading, my-bib-macros.texi(,91) @c %% Massachusetts, 1994. my-bib-macros.texi(,92) @c %% my-bib-macros.texi(,93) @c %% @end itemize my-bib-macros.texi(,94) @c %% my-bib-macros.texi(,95) @c %% @bye my-bib-macros.texi(,96) my-bib-macros.texi(,97) @c %% my-bib-macros.texi(,98) my-bib-macros.texi(,99) @c %% This example produces (in Info): my-bib-macros.texi(,100) my-bib-macros.texi(,101) @c %% 1 Introduction my-bib-macros.texi(,102) @c %% ************** my-bib-macros.texi(,103) @c %% my-bib-macros.texi(,104) @c %% The ability of a documentation format to make cross my-bib-macros.texi(,105) @c %% references to a bibliography, a feature of LaTeX (See item my-bib-macros.texi(,106) @c %% [LaTeX2e] in *Note LaTeX2e: References.), is not currently my-bib-macros.texi(,107) @c %% supported in Texinfo. my-bib-macros.texi(,108) @c %% my-bib-macros.texi(,109) @c %% my-bib-macros.texi(,110) @c %% 2 References my-bib-macros.texi(,111) @c %% ************ my-bib-macros.texi(,112) @c %% my-bib-macros.texi(,113) @c %% [LaTeX2e] Leslie Lamport, LaTeX User's Guide and Reference my-bib-macros.texi(,114) @c %% Manual, 2nd edition, Addison-Wesley, Reading, my-bib-macros.texi(,115) @c %% Massachusetts, 1994. my-bib-macros.texi(,116) my-bib-macros.texi(,117) @c %% and (in printed output): my-bib-macros.texi(,118) my-bib-macros.texi(,119) @c %% 1 Introduction my-bib-macros.texi(,120) @c %% ************** my-bib-macros.texi(,121) @c %% my-bib-macros.texi(,122) @c %% The ability of a documentation format to make cross my-bib-macros.texi(,123) @c %% references to a bibliography, a feature of LaTeX (See item my-bib-macros.texi(,124) @c %% [LaTeX2e] in Chapter 2 [References], page 3.), is not my-bib-macros.texi(,125) @c %% currently supported in Texinfo. my-bib-macros.texi(,126) @c %% my-bib-macros.texi(,127) @c %% my-bib-macros.texi(,128) @c %% 2 References my-bib-macros.texi(,129) @c %% ************ my-bib-macros.texi(,130) @c %% my-bib-macros.texi(,131) @c %% [LaTeX2e] Leslie Lamport, LaTeX User's Guide and Reference my-bib-macros.texi(,132) @c %% Manual, 2nd edition, Addison-Wesley, Reading, my-bib-macros.texi(,133) @c %% Massachusetts, 1994. my-bib-macros.texi(,134) my-bib-macros.texi(,135) @c % my-bib-macros.texi(,136) my-bib-macros.texi(,137) @c %%% Notes my-bib-macros.texi(,138) my-bib-macros.texi(,139) @c %% The pointers to references will be functional in hypertext my-bib-macros.texi(,140) @c %% documentation (info, HTML, XML and others) and properly rendered my-bib-macros.texi(,141) @c %% in print documents, because they are implemented with Texinfo's my-bib-macros.texi(,142) @c %% cross referencing capabilities (using @anchor and @ref). Failures my-bib-macros.texi(,143) @c %% by an author to make proper references with ``my-bib-macros'' in my-bib-macros.texi(,144) @c %% their document will give cross referencing errors by Texinfo my-bib-macros.texi(,145) @c %% conversion tools. my-bib-macros.texi(,146) my-bib-macros.texi(,147) @c %% Only one ``Reference'' section is allowed per document. my-bib-macros.texi(,148) my-bib-macros.texi(,149) @c %% An improvement of this system would create cross references my-bib-macros.texi(,150) @c %% (with @xref) at each cited work to all the originating cross my-bib-macros.texi(,151) @c %% refererences. my-bib-macros.texi(,152) my-bib-macros.texi(,153) @c % my-bib-macros.texi(,154) my-bib-macros.texi(,155) @c %% Code: my-bib-macros.texi(,156) my-bib-macros.texi(,157) @c % Configuration Options my-bib-macros.texi(,158) my-bib-macros.texi(,159) @c %% @mybibsetrefnode : Defines the name of the node to contain my-bib-macros.texi(,160) @c %% references. my-bib-macros.texi(,161) my-bib-macros.texi(,165) my-bib-macros.texi(,166) @c %% @mybibnode{} : Macro to be placed at node containing references my-bib-macros.texi(,167) @c %% and calls to @mybibcite{} my-bib-macros.texi(,168) my-bib-macros.texi(,172) my-bib-macros.texi(,173) @c %% @mybibusetable : Whether each @mybibitem will be put in a my-bib-macros.texi(,174) @c %% table. my-bib-macros.texi(,175) my-bib-macros.texi(,183) my-bib-macros.texi(,184) @c %% @mybibuselist : Whether each @mybibitem will be put in a my-bib-macros.texi(,185) @c %% list. my-bib-macros.texi(,186) my-bib-macros.texi(,194) my-bib-macros.texi(,195) my-bib-macros.texi(,196) @c %% @mybibcite{REF} : Cites the cross reference REF. my-bib-macros.texi(,197) my-bib-macros.texi(,208) my-bib-macros.texi(,212) my-bib-macros.texi(,213) @c %% @mybibcite{REF} : Creates a cross referenced citation REF. my-bib-macros.texi(,214) my-bib-macros.texi(,231) my-bib-macros.texi(,232) @c %% my-bib-macros.texi ends here bib-example.texi(mybibuselist,27) @set mybiblist true bib-example.texi(mybibuselist,27) @set mybibrefnode References bib-example.texi(,28) bib-example.texi(,29) @comment %**end of header bib-example.texi(,30) bib-example.texi(,31) @node Top bib-example.texi(,32) @top Top bib-example.texi(,33) bib-example.texi(,34) @menu bib-example.texi(,35) * Introduction:: bib-example.texi(mybibnode,36) * bib-example.texi(mybibnode,36) References:: bib-example.texi(,37) bib-example.texi(,38) @end menu bib-example.texi(,39) bib-example.texi(,40) @node Introduction bib-example.texi(,41) @chapter Introduction bib-example.texi(,42) bib-example.texi(,43) The ability of a documentation format to make cross references to a bib-example.texi(mybibcite,44) bibliography, a feature of LaTeX bib-example.texi(mybibcite,44) @c %**else if bib-example.texi(mybibcite,44) (See item [LaTeX2e] in @ref{References, LaTeX2e}.) bib-example.texi(mybibcite,44) , isn't bib-example.texi(,45) currently supported in Texinfo. bib-example.texi(,46) bib-example.texi(mybibnode,47) @node bib-example.texi(mybibnode,47) References bib-example.texi(,48) @chapter References bib-example.texi(,49) bib-example.texi(,50) @itemize @asis bib-example.texi(,51) bib-example.texi(mybibitem,52) @item bib-example.texi(mybibitem,52) @anchor{LaTeX2e}[LaTeX2e] bib-example.texi(mybibitem,52) @c %**else if bib-example.texi(mybibitem,52) Leslie Lamport, LaTeX User's Guide and bib-example.texi(,53) Reference Manual, 2nd edition, Addison-Wesley, Reading, bib-example.texi(,54) Massachusetts, 1994. bib-example.texi(,55) bib-example.texi(,56) @end itemize bib-example.texi(,57) bib-example.texi(,58) @bye texi2html-1.82/test/macros/res/macro_commands_in_pass_texi_commands/0000755000175000017500000000000011264347123027677 5ustar flichtenheldflichtenheld././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootroottexi2html-1.82/test/macros/res/macro_commands_in_pass_texi_commands/macro_commands_in_pass_texi_commands.2texi2html-1.82/test/macros/res/macro_commands_in_pass_texi_commands/macro_commands_in_pass_texi_comm0000644000175000017500000000000011264347123036352 0ustar flichtenheldflichtenheld././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootroottexi2html-1.82/test/macros/res/macro_commands_in_pass_texi_commands/macro_commands_in_pass_texi_commands.htmltexi2html-1.82/test/macros/res/macro_commands_in_pass_texi_commands/macro_commands_in_pass_texi_comm0000644000175000017500000000370311264347123036367 0ustar flichtenheldflichtenheld Untitled Document

    top

    In included file.

    in themacro

    macro_in_pass_texi_commands{info} texi_commands.info

    In included file.
    

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/macros/res/value_in_misc/0000755000175000017500000000000011264347123023104 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/value_in_misc/value_in_misc_valid.20000644000175000017500000000000011264347123027151 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/value_in_misc/value_in_misc_valid.html0000644000175000017500000003240511264347123027772 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    top atext

    Comment like: atext

    Text line followed by a comment on the same line and another below

    :bar:

    very strong very strong

    (strong: is it really strong? :) (strong: is it really strong? :)

    something before kbdinputstyle

    truc

     
    example
    

    false aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

    true aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

    command removed

    @page @noindent @refill something

    noindent at beginning of line noindent on the preceding line noindent after space at beginning of line page at beginning of line After page on it’s own line.

    @page @noindent @refill

    special

    Only valid between iftex: Unknown ???

    And now sp:




    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. chapter


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 section


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. bidule


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. last


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    Short Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/macros/res/texi_simple_macro/0000755000175000017500000000000011264347122023771 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_simple_macro/simple_macro.passfirst0000644000175000017500000002543511264347122030414 0ustar flichtenheldflichtenheldsimple_macro.texi(,2) simple_macro.texi(,3) @node Top simple_macro.texi(,4) @top Basic macro calls simple_macro.texi(,5) simple_macro.texi(,6) Define a simple macro simple_macro.texi(,7) @example simple_macro.texi(,8) @@macro macro1 @{arg1, arg2 @} simple_macro.texi(,9) result: @@emph@{\arg1\@} protected \\ -> \\arg1\\ @@emp@{\arg2\@} simple_macro.texi(,10) @@end macro simple_macro.texi(,11) @end example simple_macro.texi(,12) simple_macro.texi(,15) before macro after end macro simple_macro.texi(,16) simple_macro.texi(,17) Calling (normal) simple_macro.texi(,18) @example simple_macro.texi(,19) the @@macro1 @{ @@samp@{f\irst arg@}, second arg @} after macro simple_macro.texi(,20) @end example simple_macro.texi(,21) ================================== simple_macro.texi(,22) simple_macro.texi(macro1,23) the result: @emph{@samp{first arg}} protected \ -> \arg1\ @emph{second arg } after macro simple_macro.texi(,24) simple_macro.texi(,25) ----------------------------------- simple_macro.texi(,26) simple_macro.texi(,27) the result: @emph{@samp{first arg}} protected \ -> \arg1\ @emph{second arg } after macro simple_macro.texi(,28) simple_macro.texi(,29) ==================================== simple_macro.texi(,30) simple_macro.texi(,31) Calling (one arg) simple_macro.texi(,32) @example simple_macro.texi(,33) @@macro1 @{ @@samp@{f\irst arg@}@} simple_macro.texi(,34) @end example simple_macro.texi(,35) ================================== simple_macro.texi(,36) simple_macro.texi(macro1,37) result: @emph{@samp{first arg}} protected \ -> \arg1\ @emph{} simple_macro.texi(,38) simple_macro.texi(,39) ----------------------------------- simple_macro.texi(,40) simple_macro.texi(,41) result: @emph{@samp{first arg}} protected \ -> \arg1\ @emph{} simple_macro.texi(,42) simple_macro.texi(,43) ==================================== simple_macro.texi(,44) simple_macro.texi(,45) Calling (no args) simple_macro.texi(,46) @example simple_macro.texi(,47) @@macro1 @@samp@{f\irst arg@}, second arg simple_macro.texi(,48) @end example simple_macro.texi(,49) ================================== simple_macro.texi(,50) simple_macro.texi(macro1,51) result: @emph{} protected \ -> \arg1\ @emph{} @samp{f\irst arg}, second arg simple_macro.texi(,52) simple_macro.texi(,53) ----------------------------------- simple_macro.texi(,54) simple_macro.texi(,55) result: @emph{} protected \ -> \arg1\ @emph{} @samp{f\irst arg}, second arg simple_macro.texi(,56) simple_macro.texi(,57) ==================================== simple_macro.texi(,58) simple_macro.texi(,60) Calling (three args) simple_macro.texi(,61) @example simple_macro.texi(,62) @@macro1 @{ @@samp@{f\irst arg@}, second arg, third arg@} simple_macro.texi(,63) @end example simple_macro.texi(,64) ================================== simple_macro.texi(,65) simple_macro.texi(macro1,66) result: @emph{@samp{first arg}} protected \ -> \arg1\ @emph{second arg} simple_macro.texi(,67) simple_macro.texi(,68) ----------------------------------- simple_macro.texi(,69) simple_macro.texi(,70) result: @emph{@samp{first arg}} protected \ -> \arg1\ @emph{second arg} simple_macro.texi(,71) simple_macro.texi(,72) ==================================== simple_macro.texi(,74) simple_macro.texi(,75) define a macro with one arg simple_macro.texi(,76) @example simple_macro.texi(,77) @@macro macro2 @{ arg @} simple_macro.texi(,78) we get \arg\ and another \arg\ simple_macro.texi(,79) and a last one on another line \arg\ simple_macro.texi(,80) simple_macro.texi(,81) and a last in another paragraph simple_macro.texi(,82) @@end macro simple_macro.texi(,83) @end example simple_macro.texi(,84) simple_macro.texi(,91) simple_macro.texi(,92) Calling simple_macro.texi(,93) @example simple_macro.texi(,94) @@macro2 @{ arg, comma \, @} simple_macro.texi(,95) @end example simple_macro.texi(,96) ================================== simple_macro.texi(,97) simple_macro.texi(macro2,98) we get arg, comma , and another arg, comma , simple_macro.texi(macro2,98) and another one on another line arg, comma , simple_macro.texi(macro2,98) simple_macro.texi(macro2,98) and a last in another paragraph simple_macro.texi(,99) simple_macro.texi(,100) ----------------------------------- simple_macro.texi(,101) simple_macro.texi(,102) we get arg, comma , and another arg, comma , simple_macro.texi(,103) and another one another line arg, comma , simple_macro.texi(,104) simple_macro.texi(,105) and a last in another paragraph simple_macro.texi(,106) simple_macro.texi(,107) ================================== simple_macro.texi(,108) simple_macro.texi(,109) Calling simple_macro.texi(,110) @example simple_macro.texi(,111) @@macro2 arg, comma \, simple_macro.texi(,112) @end example simple_macro.texi(,113) ================================== simple_macro.texi(,114) simple_macro.texi(macro2,115) we get arg, comma \, and another arg, comma \, simple_macro.texi(macro2,115) and another one on another line arg, comma \, simple_macro.texi(macro2,115) simple_macro.texi(macro2,115) and a last in another paragraph simple_macro.texi(,116) simple_macro.texi(,117) ----------------------------------- simple_macro.texi(,118) simple_macro.texi(,119) we get arg, comma \, and another arg, comma \, simple_macro.texi(,120) and another one on another line arg, comma \, simple_macro.texi(,121) simple_macro.texi(,122) and a last in another paragraph simple_macro.texi(,123) simple_macro.texi(,124) ================================== simple_macro.texi(,125) simple_macro.texi(,126) simple_macro.texi(,132) simple_macro.texi(,133) now @@set comma , simple_macro.texi(,134) @set comma , simple_macro.texi(,135) simple_macro.texi(,136) @@set flagab @@ab simple_macro.texi(,137) @set flagab @ab simple_macro.texi(,138) simple_macro.texi(,139) the values: simple_macro.texi(,140) simple_macro.texi(,141) ====================================== simple_macro.texi(,142) simple_macro.texi(ab,143) flagab: a simple_macro.texi(ab,143) simple_macro.texi(ab,143) b simple_macro.texi(,144) simple_macro.texi(,145) -------------------------------------- simple_macro.texi(,146) simple_macro.texi(,147) makeinfo result (the macro in set is expanded and all the resulting lines simple_macro.texi(,148) are replaced): simple_macro.texi(,149) simple_macro.texi(,150) flagab: a simple_macro.texi(,151) simple_macro.texi(,152) b simple_macro.texi(,153) simple_macro.texi(,154) ====================================== simple_macro.texi(,155) simple_macro.texi(,156) comma: , simple_macro.texi(,157) simple_macro.texi(,158) Calling macro1 with value simple_macro.texi(,159) @example simple_macro.texi(,160) @@macro1 @{ arg1 @@value@{comma@} arg2 @} simple_macro.texi(,161) @end example simple_macro.texi(,162) ======================================= simple_macro.texi(,163) simple_macro.texi(macro1,164) result: @emph{arg1 , arg2 } protected \ -> \arg1\ @emph{} simple_macro.texi(,165) simple_macro.texi(,166) --------------------------------------- simple_macro.texi(,167) simple_macro.texi(,168) makeinfo result (the comma don't separate args ; the value is expanded after simple_macro.texi(,169) arguments parsing): simple_macro.texi(,170) simple_macro.texi(,171) result: @emph{arg1 , arg2 } protected \ -> \arg1\ @emph{} simple_macro.texi(,172) simple_macro.texi(,173) ======================================= simple_macro.texi(,174) simple_macro.texi(,175) In verbatim simple_macro.texi(,176) @verbatim simple_macro.texi(,177) comma: @value{comma} simple_macro.texi(,178) @macro1{ bidule, truc} simple_macro.texi(,179) @end verbatim simple_macro.texi(,180) simple_macro.texi(,181) @set argument arg simple_macro.texi(,182) @set bodyarg \arg\ simple_macro.texi(,183) simple_macro.texi(,184) Define macro simple_macro.texi(,185) @example simple_macro.texi(,186) @@macro testvaluebody @{ arg @} simple_macro.texi(,187) result: @@emph@{\@@value@{bodyarg@}\ @} simple_macro.texi(,188) @@end macro simple_macro.texi(,189) @end example simple_macro.texi(,190) simple_macro.texi(,194) simple_macro.texi(,195) ================================== simple_macro.texi(,196) simple_macro.texi(testvaluebody,197) result: @emph{\\arg\ } simple_macro.texi(,198) simple_macro.texi(,199) ---------------------------------- simple_macro.texi(,200) simple_macro.texi(,201) makeinfo result (according to error message, the value isn't expanded simple_macro.texi(,202) when the body is expanded; it is kept, but the second \ isn't): simple_macro.texi(,203) simple_macro.texi(,204) result: @emph{\\arg\ } simple_macro.texi(,205) simple_macro.texi(,206) ================================== simple_macro.texi(,207) simple_macro.texi(,208) Define macro simple_macro.texi(,209) @example simple_macro.texi(,210) @@macro testvalue @{ arg , the@@value@{argument@} @} simple_macro.texi(,211) result: @@emph@{\arg\@} the \the\ thearg \thearg\ with value \the@@value@{argument@}\ simple_macro.texi(,212) @@end macro simple_macro.texi(,213) @end example simple_macro.texi(,214) simple_macro.texi(,218) simple_macro.texi(,219) ================================== simple_macro.texi(,220) simple_macro.texi(testvalue,221) result: @emph{macro_arg1} the \the thearg \thearg with value \thearg simple_macro.texi(,222) simple_macro.texi(,223) ---------------------------------- simple_macro.texi(,224) simple_macro.texi(,225) makeinfo (breaks) result: simple_macro.texi(,226) simple_macro.texi(,227) result: @emph{macro_arg1} the \the thearg \thearg with value \thearg simple_macro.texi(,228) simple_macro.texi(,229) ================================== simple_macro.texi(,230) simple_macro.texi(,231) Define macro without arg simple_macro.texi(,232) @example simple_macro.texi(,233) @@macro test1 simple_macro.texi(,234) test1 simple_macro.texi(,235) @@end macro simple_macro.texi(,236) @end example simple_macro.texi(,237) simple_macro.texi(,241) simple_macro.texi(,242) Call with @{@}: simple_macro.texi(,243) simple_macro.texi(,244) ================================== simple_macro.texi(,245) simple_macro.texi(test1,246) test1 abc simple_macro.texi(,247) simple_macro.texi(,248) ---------------------------------- simple_macro.texi(,249) simple_macro.texi(,250) test1 abc simple_macro.texi(,251) simple_macro.texi(,252) ================================== simple_macro.texi(,253) simple_macro.texi(,254) Call with something on the line simple_macro.texi(,255) simple_macro.texi(,256) ================================== simple_macro.texi(,257) simple_macro.texi(test1,258) test1 abc simple_macro.texi(,259) simple_macro.texi(,260) ---------------------------------- simple_macro.texi(,261) simple_macro.texi(,262) test1 abc simple_macro.texi(,263) simple_macro.texi(,264) ================================== simple_macro.texi(,265) simple_macro.texi(,266) An empty set value simple_macro.texi(,267) simple_macro.texi(,268) @set myspace simple_macro.texi(,269) simple_macro.texi(,270) 1 1 simple_macro.texi(,271) simple_macro.texi(,272) @contents simple_macro.texi(,273) @bye texi2html-1.82/test/macros/res/texi_simple_macro/simple_macro.passtexi0000644000175000017500000002555311264347122030237 0ustar flichtenheldflichtenheldsimple_macro.texi(,2) simple_macro.texi(,3) @node Top simple_macro.texi(,4) @top Basic macro calls simple_macro.texi(,5) simple_macro.texi(,6) Define a simple macro simple_macro.texi(,7) @example simple_macro.texi(,8) @@macro macro1 @{arg1, arg2 @} simple_macro.texi(,9) result: @@emph@{\arg1\@} protected \\ -> \\arg1\\ @@emp@{\arg2\@} simple_macro.texi(,10) @@end macro simple_macro.texi(,11) @end example simple_macro.texi(,12) simple_macro.texi(,15) before macro simple_macro.texi(,15) after end macro simple_macro.texi(,16) simple_macro.texi(,17) Calling (normal) simple_macro.texi(,18) @example simple_macro.texi(,19) the @@macro1 @{ @@samp@{f\irst arg@}, second arg @} after macro simple_macro.texi(,20) @end example simple_macro.texi(,21) ================================== simple_macro.texi(,22) simple_macro.texi(macro1,23) the simple_macro.texi(macro1,23) result: @emph{@samp{first arg}} protected \ -> \arg1\ @emph{second arg } after macro simple_macro.texi(,24) simple_macro.texi(,25) ----------------------------------- simple_macro.texi(,26) simple_macro.texi(,27) the result: @emph{@samp{first arg}} protected \ -> \arg1\ @emph{second arg } after macro simple_macro.texi(,28) simple_macro.texi(,29) ==================================== simple_macro.texi(,30) simple_macro.texi(,31) Calling (one arg) simple_macro.texi(,32) @example simple_macro.texi(,33) @@macro1 @{ @@samp@{f\irst arg@}@} simple_macro.texi(,34) @end example simple_macro.texi(,35) ================================== simple_macro.texi(,36) simple_macro.texi(macro1,37) result: @emph{@samp{first arg}} protected \ -> \arg1\ @emph{} simple_macro.texi(,38) simple_macro.texi(,39) ----------------------------------- simple_macro.texi(,40) simple_macro.texi(,41) result: @emph{@samp{first arg}} protected \ -> \arg1\ @emph{} simple_macro.texi(,42) simple_macro.texi(,43) ==================================== simple_macro.texi(,44) simple_macro.texi(,45) Calling (no args) simple_macro.texi(,46) @example simple_macro.texi(,47) @@macro1 @@samp@{f\irst arg@}, second arg simple_macro.texi(,48) @end example simple_macro.texi(,49) ================================== simple_macro.texi(,50) simple_macro.texi(macro1,51) result: @emph{} protected \ -> \arg1\ @emph{} @samp{f\irst arg}, second arg simple_macro.texi(,52) simple_macro.texi(,53) ----------------------------------- simple_macro.texi(,54) simple_macro.texi(,55) result: @emph{} protected \ -> \arg1\ @emph{} @samp{f\irst arg}, second arg simple_macro.texi(,56) simple_macro.texi(,57) ==================================== simple_macro.texi(,58) simple_macro.texi(,60) Calling (three args) simple_macro.texi(,61) @example simple_macro.texi(,62) @@macro1 @{ @@samp@{f\irst arg@}, second arg, third arg@} simple_macro.texi(,63) @end example simple_macro.texi(,64) ================================== simple_macro.texi(,65) simple_macro.texi(macro1,66) result: @emph{@samp{first arg}} protected \ -> \arg1\ @emph{second arg} simple_macro.texi(,67) simple_macro.texi(,68) ----------------------------------- simple_macro.texi(,69) simple_macro.texi(,70) result: @emph{@samp{first arg}} protected \ -> \arg1\ @emph{second arg} simple_macro.texi(,71) simple_macro.texi(,72) ==================================== simple_macro.texi(,74) simple_macro.texi(,75) define a macro with one arg simple_macro.texi(,76) @example simple_macro.texi(,77) @@macro macro2 @{ arg @} simple_macro.texi(,78) we get \arg\ and another \arg\ simple_macro.texi(,79) and a last one on another line \arg\ simple_macro.texi(,80) simple_macro.texi(,81) and a last in another paragraph simple_macro.texi(,82) @@end macro simple_macro.texi(,83) @end example simple_macro.texi(,84) simple_macro.texi(,91) simple_macro.texi(,92) Calling simple_macro.texi(,93) @example simple_macro.texi(,94) @@macro2 @{ arg, comma \, @} simple_macro.texi(,95) @end example simple_macro.texi(,96) ================================== simple_macro.texi(,97) simple_macro.texi(macro2,98) we get arg, comma , and another arg, comma , simple_macro.texi(macro2,98) and another one on another line arg, comma , simple_macro.texi(macro2,98) simple_macro.texi(macro2,98) and a last in another paragraph simple_macro.texi(,99) simple_macro.texi(,100) ----------------------------------- simple_macro.texi(,101) simple_macro.texi(,102) we get arg, comma , and another arg, comma , simple_macro.texi(,103) and another one another line arg, comma , simple_macro.texi(,104) simple_macro.texi(,105) and a last in another paragraph simple_macro.texi(,106) simple_macro.texi(,107) ================================== simple_macro.texi(,108) simple_macro.texi(,109) Calling simple_macro.texi(,110) @example simple_macro.texi(,111) @@macro2 arg, comma \, simple_macro.texi(,112) @end example simple_macro.texi(,113) ================================== simple_macro.texi(,114) simple_macro.texi(macro2,115) we get arg, comma \, and another arg, comma \, simple_macro.texi(macro2,115) and another one on another line arg, comma \, simple_macro.texi(macro2,115) simple_macro.texi(macro2,115) and a last in another paragraph simple_macro.texi(,116) simple_macro.texi(,117) ----------------------------------- simple_macro.texi(,118) simple_macro.texi(,119) we get arg, comma \, and another arg, comma \, simple_macro.texi(,120) and another one on another line arg, comma \, simple_macro.texi(,121) simple_macro.texi(,122) and a last in another paragraph simple_macro.texi(,123) simple_macro.texi(,124) ================================== simple_macro.texi(,125) simple_macro.texi(,126) simple_macro.texi(,132) simple_macro.texi(,133) now @@set comma , simple_macro.texi(,134) @set comma , simple_macro.texi(,135) simple_macro.texi(,136) @@set flagab @@ab simple_macro.texi(,137) @set flagab @ab simple_macro.texi(,138) simple_macro.texi(,139) the values: simple_macro.texi(,140) simple_macro.texi(,141) ====================================== simple_macro.texi(,142) simple_macro.texi(ab,143) flagab: simple_macro.texi(ab,143) a simple_macro.texi(ab,143) simple_macro.texi(ab,143) b simple_macro.texi(,144) simple_macro.texi(,145) -------------------------------------- simple_macro.texi(,146) simple_macro.texi(,147) makeinfo result (the macro in set is expanded and all the resulting lines simple_macro.texi(,148) are replaced): simple_macro.texi(,149) simple_macro.texi(,150) flagab: a simple_macro.texi(,151) simple_macro.texi(,152) b simple_macro.texi(,153) simple_macro.texi(,154) ====================================== simple_macro.texi(,155) simple_macro.texi(,156) comma: , simple_macro.texi(,157) simple_macro.texi(,158) Calling macro1 with value simple_macro.texi(,159) @example simple_macro.texi(,160) @@macro1 @{ arg1 @@value@{comma@} arg2 @} simple_macro.texi(,161) @end example simple_macro.texi(,162) ======================================= simple_macro.texi(,163) simple_macro.texi(macro1,164) result: @emph{arg1 , arg2 } protected \ -> \arg1\ @emph{} simple_macro.texi(,165) simple_macro.texi(,166) --------------------------------------- simple_macro.texi(,167) simple_macro.texi(,168) makeinfo result (the comma don't separate args ; the value is expanded after simple_macro.texi(,169) arguments parsing): simple_macro.texi(,170) simple_macro.texi(,171) result: @emph{arg1 , arg2 } protected \ -> \arg1\ @emph{} simple_macro.texi(,172) simple_macro.texi(,173) ======================================= simple_macro.texi(,174) simple_macro.texi(,175) In verbatim simple_macro.texi(,176) @verbatim simple_macro.texi(,177) comma: @value{comma} simple_macro.texi(,178) @macro1{ bidule, truc} simple_macro.texi(,179) @end verbatim simple_macro.texi(,180) simple_macro.texi(,181) @set argument arg simple_macro.texi(,182) @set bodyarg \arg\ simple_macro.texi(,183) simple_macro.texi(,184) Define macro simple_macro.texi(,185) @example simple_macro.texi(,186) @@macro testvaluebody @{ arg @} simple_macro.texi(,187) result: @@emph@{\@@value@{bodyarg@}\ @} simple_macro.texi(,188) @@end macro simple_macro.texi(,189) @end example simple_macro.texi(,190) simple_macro.texi(,194) simple_macro.texi(,195) ================================== simple_macro.texi(,196) simple_macro.texi(testvaluebody,197) result: @emph{\\arg\ } simple_macro.texi(,198) simple_macro.texi(,199) ---------------------------------- simple_macro.texi(,200) simple_macro.texi(,201) makeinfo result (according to error message, the value isn't expanded simple_macro.texi(,202) when the body is expanded; it is kept, but the second \ isn't): simple_macro.texi(,203) simple_macro.texi(,204) result: @emph{\\arg\ } simple_macro.texi(,205) simple_macro.texi(,206) ================================== simple_macro.texi(,207) simple_macro.texi(,208) Define macro simple_macro.texi(,209) @example simple_macro.texi(,210) @@macro testvalue @{ arg , the@@value@{argument@} @} simple_macro.texi(,211) result: @@emph@{\arg\@} the \the\ thearg \thearg\ with value \the@@value@{argument@}\ simple_macro.texi(,212) @@end macro simple_macro.texi(,213) @end example simple_macro.texi(,214) simple_macro.texi(,218) simple_macro.texi(,219) ================================== simple_macro.texi(,220) simple_macro.texi(testvalue,221) result: @emph{macro_arg1} the \the thearg \thearg with value \thearg simple_macro.texi(,222) simple_macro.texi(,223) ---------------------------------- simple_macro.texi(,224) simple_macro.texi(,225) makeinfo (breaks) result: simple_macro.texi(,226) simple_macro.texi(,227) result: @emph{macro_arg1} the \the thearg \thearg with value \thearg simple_macro.texi(,228) simple_macro.texi(,229) ================================== simple_macro.texi(,230) simple_macro.texi(,231) Define macro without arg simple_macro.texi(,232) @example simple_macro.texi(,233) @@macro test1 simple_macro.texi(,234) test1 simple_macro.texi(,235) @@end macro simple_macro.texi(,236) @end example simple_macro.texi(,237) simple_macro.texi(,241) simple_macro.texi(,242) Call with @{@}: simple_macro.texi(,243) simple_macro.texi(,244) ================================== simple_macro.texi(,245) simple_macro.texi(test1,246) test1 abc simple_macro.texi(,247) simple_macro.texi(,248) ---------------------------------- simple_macro.texi(,249) simple_macro.texi(,250) test1 abc simple_macro.texi(,251) simple_macro.texi(,252) ================================== simple_macro.texi(,253) simple_macro.texi(,254) Call with something on the line simple_macro.texi(,255) simple_macro.texi(,256) ================================== simple_macro.texi(,257) simple_macro.texi(test1,258) test1 abc simple_macro.texi(,259) simple_macro.texi(,260) ---------------------------------- simple_macro.texi(,261) simple_macro.texi(,262) test1 abc simple_macro.texi(,263) simple_macro.texi(,264) ================================== simple_macro.texi(,265) simple_macro.texi(,266) An empty set value simple_macro.texi(,267) simple_macro.texi(,268) @set myspace simple_macro.texi(,269) simple_macro.texi(,270) 1 1 simple_macro.texi(,271) simple_macro.texi(,272) @contents simple_macro.texi(,273) @bye texi2html-1.82/test/macros/res/texi_simple_macro/simple_macro.20000644000175000017500000000075611264347122026536 0ustar flichtenheldflichtenheld*** \ not followed by \ or an arg but by @value{bodyarg} in macro *** \ not followed by \ or an arg but by the in macro *** \ not followed by \ or an arg but by thearg in macro *** \ not followed by \ or an arg but by the@value{argument} in macro *** \ not followed by \ or an arg but by @value{bodyarg} in macro *** \ not followed by \ or an arg but by the in macro *** \ not followed by \ or an arg but by thearg in macro *** \ not followed by \ or an arg but by the@value{argument} in macro texi2html-1.82/test/macros/res/texi_simple_macro/simple_macro.texi0000644000175000017500000001145411264347122027343 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top @top Basic macro calls Define a simple macro @example @@macro macro1 @{arg1, arg2 @} result: @@emph@{\arg1\@} protected \\ -> \\arg1\\ @@emp@{\arg2\@} @@end macro @end example before macro after end macro Calling (normal) @example the @@macro1 @{ @@samp@{f\irst arg@}, second arg @} after macro @end example ================================== the result: @emph{@samp{first arg}} protected \ -> \arg1\ @emph{second arg } after macro ----------------------------------- the result: @emph{@samp{first arg}} protected \ -> \arg1\ @emph{second arg } after macro ==================================== Calling (one arg) @example @@macro1 @{ @@samp@{f\irst arg@}@} @end example ================================== result: @emph{@samp{first arg}} protected \ -> \arg1\ @emph{} ----------------------------------- result: @emph{@samp{first arg}} protected \ -> \arg1\ @emph{} ==================================== Calling (no args) @example @@macro1 @@samp@{f\irst arg@}, second arg @end example ================================== result: @emph{} protected \ -> \arg1\ @emph{} @samp{f\irst arg}, second arg ----------------------------------- result: @emph{} protected \ -> \arg1\ @emph{} @samp{f\irst arg}, second arg ==================================== Calling (three args) @example @@macro1 @{ @@samp@{f\irst arg@}, second arg, third arg@} @end example ================================== result: @emph{@samp{first arg}} protected \ -> \arg1\ @emph{second arg} ----------------------------------- result: @emph{@samp{first arg}} protected \ -> \arg1\ @emph{second arg} ==================================== define a macro with one arg @example @@macro macro2 @{ arg @} we get \arg\ and another \arg\ and a last one on another line \arg\ and a last in another paragraph @@end macro @end example Calling @example @@macro2 @{ arg, comma \, @} @end example ================================== we get arg, comma , and another arg, comma , and another one on another line arg, comma , and a last in another paragraph ----------------------------------- we get arg, comma , and another arg, comma , and another one another line arg, comma , and a last in another paragraph ================================== Calling @example @@macro2 arg, comma \, @end example ================================== we get arg, comma \, and another arg, comma \, and another one on another line arg, comma \, and a last in another paragraph ----------------------------------- we get arg, comma \, and another arg, comma \, and another one on another line arg, comma \, and a last in another paragraph ================================== now @@set comma , @set comma , @@set flagab @@ab @set flagab @ab the values: ====================================== flagab: a b -------------------------------------- makeinfo result (the macro in set is expanded and all the resulting lines are replaced): flagab: a b ====================================== comma: , Calling macro1 with value @example @@macro1 @{ arg1 @@value@{comma@} arg2 @} @end example ======================================= result: @emph{arg1 , arg2 } protected \ -> \arg1\ @emph{} --------------------------------------- makeinfo result (the comma don't separate args ; the value is expanded after arguments parsing): result: @emph{arg1 , arg2 } protected \ -> \arg1\ @emph{} ======================================= In verbatim @verbatim comma: @value{comma} @macro1{ bidule, truc} @end verbatim @set argument arg @set bodyarg \arg\ Define macro @example @@macro testvaluebody @{ arg @} result: @@emph@{\@@value@{bodyarg@}\ @} @@end macro @end example ================================== result: @emph{\\arg\ } ---------------------------------- makeinfo result (according to error message, the value isn't expanded when the body is expanded; it is kept, but the second \ isn't): result: @emph{\\arg\ } ================================== Define macro @example @@macro testvalue @{ arg , the@@value@{argument@} @} result: @@emph@{\arg\@} the \the\ thearg \thearg\ with value \the@@value@{argument@}\ @@end macro @end example ================================== result: @emph{macro_arg1} the \the thearg \thearg with value \thearg ---------------------------------- makeinfo (breaks) result: result: @emph{macro_arg1} the \the thearg \thearg with value \thearg ================================== Define macro without arg @example @@macro test1 test1 @@end macro @end example Call with @{@}: ================================== test1 abc ---------------------------------- test1 abc ================================== Call with something on the line ================================== test1 abc ---------------------------------- test1 abc ================================== An empty set value @set myspace 1 1 @contents @bye texi2html-1.82/test/macros/res/texi_node-expand/0000755000175000017500000000000011264347122023521 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_node-expand/node-expand.passfirst0000644000175000017500000000473411264347122027673 0ustar flichtenheldflichtenheldnode-expand.texi(,2) node-expand.texi(,3) @setfilename node-expand.info node-expand.texi(,4) node-expand.texi(,5) @c Makeinfo should expand non-macros such as @@ and @value node-expand.texi(,6) @c in node names and node references, including menus. node-expand.texi(,7) @c This file deliberately references "Node 1" both via node-expand.texi(,8) @c @value and directly; this should not trigger any errors, node-expand.texi(,9) @c as long as --commands-in-node-names is used. node-expand.texi(,10) @c Index entries should all be expanded as well. node-expand.texi(,11) node-expand.texi(,12) @set node1 Node 1 node-expand.texi(,13) node-expand.texi(,15) node-expand.texi(,16) @node Top, (dir), (dir), (dir) node-expand.texi(,17) @top Expansion in Node Names node-expand.texi(,18) node-expand.texi(,20) node-expand.texi(,21) @menu node-expand.texi(,22) * Node 1 :: node-expand.texi(,23) * @@node `2':: node-expand.texi(,24) * ``node'' with---tricks:: node-expand.texi(,25) @end menu node-expand.texi(,26) node-expand.texi(,27) @xref{@@node `2'}. node-expand.texi(,28) node-expand.texi(,29) @node Node 1, @@node `2', Top, Top node-expand.texi(,30) @chapter Chapter 1 node-expand.texi(,31) node-expand.texi(,32) @cindex entry for chapter 1 node-expand.texi(,33) This is chapter 1. node-expand.texi(,34) @xref{@@node `2'}. node-expand.texi(,35) node-expand.texi(,36) @set sec1 Section 1.1 node-expand.texi(,37) node-expand.texi(,38) @menu node-expand.texi(,39) * Section 1.1:: node-expand.texi(,40) @end menu node-expand.texi(,41) node-expand.texi(,42) @node Section 1.1, , Node 1, Node 1 node-expand.texi(,43) @comment node-name, next, previous, up node-expand.texi(,44) node-expand.texi(,45) @cindex entry for section 1.1 node-expand.texi(,46) This is section 1.1. node-expand.texi(,47) node-expand.texi(,48) @node @@node `2', ``node'' with---tricks, Node 1, Top node-expand.texi(,49) @comment node-name, next, previous, up node-expand.texi(,50) @chapter Node 2 node-expand.texi(,51) node-expand.texi(,52) @cindex entry for chapter 2 node-expand.texi(,53) This is chapter 2. node-expand.texi(,54) @xref{Node 1}. @xref{Node 1}. node-expand.texi(,55) @xref{``node'' with---tricks, Node with some tricks}. node-expand.texi(,56) node-expand.texi(,57) @node ``node'' with---tricks, , @@node `2', Top node-expand.texi(,58) node-expand.texi(,59) @cindex tricks node-expand.texi(,60) Another node. node-expand.texi(,61) node-expand.texi(,62) @printindex cp node-expand.texi(,63) node-expand.texi(,64) @bye texi2html-1.82/test/macros/res/texi_node-expand/node-expand.passtexi0000644000175000017500000000473411264347122027515 0ustar flichtenheldflichtenheldnode-expand.texi(,2) node-expand.texi(,3) @setfilename node-expand.info node-expand.texi(,4) node-expand.texi(,5) @c Makeinfo should expand non-macros such as @@ and @value node-expand.texi(,6) @c in node names and node references, including menus. node-expand.texi(,7) @c This file deliberately references "Node 1" both via node-expand.texi(,8) @c @value and directly; this should not trigger any errors, node-expand.texi(,9) @c as long as --commands-in-node-names is used. node-expand.texi(,10) @c Index entries should all be expanded as well. node-expand.texi(,11) node-expand.texi(,12) @set node1 Node 1 node-expand.texi(,13) node-expand.texi(,15) node-expand.texi(,16) @node Top, (dir), (dir), (dir) node-expand.texi(,17) @top Expansion in Node Names node-expand.texi(,18) node-expand.texi(,20) node-expand.texi(,21) @menu node-expand.texi(,22) * Node 1 :: node-expand.texi(,23) * @@node `2':: node-expand.texi(,24) * ``node'' with---tricks:: node-expand.texi(,25) @end menu node-expand.texi(,26) node-expand.texi(,27) @xref{@@node `2'}. node-expand.texi(,28) node-expand.texi(,29) @node Node 1, @@node `2', Top, Top node-expand.texi(,30) @chapter Chapter 1 node-expand.texi(,31) node-expand.texi(,32) @cindex entry for chapter 1 node-expand.texi(,33) This is chapter 1. node-expand.texi(,34) @xref{@@node `2'}. node-expand.texi(,35) node-expand.texi(,36) @set sec1 Section 1.1 node-expand.texi(,37) node-expand.texi(,38) @menu node-expand.texi(,39) * Section 1.1:: node-expand.texi(,40) @end menu node-expand.texi(,41) node-expand.texi(,42) @node Section 1.1, , Node 1, Node 1 node-expand.texi(,43) @comment node-name, next, previous, up node-expand.texi(,44) node-expand.texi(,45) @cindex entry for section 1.1 node-expand.texi(,46) This is section 1.1. node-expand.texi(,47) node-expand.texi(,48) @node @@node `2', ``node'' with---tricks, Node 1, Top node-expand.texi(,49) @comment node-name, next, previous, up node-expand.texi(,50) @chapter Node 2 node-expand.texi(,51) node-expand.texi(,52) @cindex entry for chapter 2 node-expand.texi(,53) This is chapter 2. node-expand.texi(,54) @xref{Node 1}. @xref{Node 1}. node-expand.texi(,55) @xref{``node'' with---tricks, Node with some tricks}. node-expand.texi(,56) node-expand.texi(,57) @node ``node'' with---tricks, , @@node `2', Top node-expand.texi(,58) node-expand.texi(,59) @cindex tricks node-expand.texi(,60) Another node. node-expand.texi(,61) node-expand.texi(,62) @printindex cp node-expand.texi(,63) node-expand.texi(,64) @bye texi2html-1.82/test/macros/res/texi_node-expand/node-expand.texi0000644000175000017500000000231511264347122026617 0ustar flichtenheldflichtenheld\input texinfo.tex @c -*-texinfo-*- @setfilename node-expand.info @c Makeinfo should expand non-macros such as @@ and @value @c in node names and node references, including menus. @c This file deliberately references "Node 1" both via @c @value and directly; this should not trigger any errors, @c as long as --commands-in-node-names is used. @c Index entries should all be expanded as well. @set node1 Node 1 @node Top, (dir), (dir), (dir) @top Expansion in Node Names @menu * Node 1 :: * @@node `2':: * ``node'' with---tricks:: @end menu @xref{@@node `2'}. @node Node 1, @@node `2', Top, Top @chapter Chapter 1 @cindex entry for chapter 1 This is chapter 1. @xref{@@node `2'}. @set sec1 Section 1.1 @menu * Section 1.1:: @end menu @node Section 1.1, , Node 1, Node 1 @comment node-name, next, previous, up @cindex entry for section 1.1 This is section 1.1. @node @@node `2', ``node'' with---tricks, Node 1, Top @comment node-name, next, previous, up @chapter Node 2 @cindex entry for chapter 2 This is chapter 2. @xref{Node 1}. @xref{Node 1}. @xref{``node'' with---tricks, Node with some tricks}. @node ``node'' with---tricks, , @@node `2', Top @cindex tricks Another node. @printindex cp @bye texi2html-1.82/test/macros/res/texi_node-expand/node-expand.20000644000175000017500000000000011264347122025774 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_not_ifset_text/0000755000175000017500000000000011264347123024356 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_not_ifset_text/not_ifset_text.passtexi0000644000175000017500000000043211264347123031175 0ustar flichtenheldflichtenheldnot_ifset_text.texi(,2) @comment %**start of header not_ifset_text.texi(,3) @setfilename not_ifset_text.info not_ifset_text.texi(,4) not_ifset_text.texi(,5) @node Top not_ifset_text.texi(,6) @top Top not_ifset_text.texi(,7) not_ifset_text.texi(,13) not_ifset_text.texi(,14) @bye texi2html-1.82/test/macros/res/texi_not_ifset_text/not_ifset_text.20000644000175000017500000000000011264347123027465 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_not_ifset_text/not_ifset_text.texi0000644000175000017500000000017211264347123030307 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @comment %**start of header @setfilename not_ifset_text.info @node Top @top Top @bye texi2html-1.82/test/macros/res/texi_not_ifset_text/not_ifset_text.passfirst0000644000175000017500000000043211264347123031353 0ustar flichtenheldflichtenheldnot_ifset_text.texi(,2) @comment %**start of header not_ifset_text.texi(,3) @setfilename not_ifset_text.info not_ifset_text.texi(,4) not_ifset_text.texi(,5) @node Top not_ifset_text.texi(,6) @top Top not_ifset_text.texi(,7) not_ifset_text.texi(,13) not_ifset_text.texi(,14) @bye texi2html-1.82/test/macros/res/texi_glossary/0000755000175000017500000000000011264347122023162 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_glossary/glossary.texi0000644000175000017500000000046611264347122025726 0ustar flichtenheldflichtenheld\input texinfo.tex @setfilename glossary @node Top @top Top @menu * glossary:: @end menu The @ref{id1,name1} is used in many cases while @ref{id2,name2} is quite specific @node glossary @chapter glossary @table @asis @item name1 @anchor{id1} text1, arg1 @item name2 @anchor{id2} text2 @end table texi2html-1.82/test/macros/res/texi_glossary/glossary.20000644000175000017500000000000011264347122025076 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_glossary/glossary.passtexi0000644000175000017500000000163411264347122026613 0ustar flichtenheldflichtenheldglossary.texi(,2) glossary.texi(,3) @setfilename glossary glossary.texi(,4) glossary.texi(,8) glossary.texi(,14) glossary.texi(,34) glossary.texi(,35) @node Top glossary.texi(,36) @top Top glossary.texi(,37) glossary.texi(,38) @menu glossary.texi(,39) * glossary:: glossary.texi(,40) @end menu glossary.texi(,41) glossary.texi(gentry,42) The glossary.texi(gentry,42) @ref{id1,name1} glossary.texi(gentry,42) is used in many cases while glossary.texi(gentry,43) @ref{id2,name2} glossary.texi(gentry,43) is quite specific glossary.texi(,44) glossary.texi(,45) @node glossary glossary.texi(,46) @chapter glossary glossary.texi(glossary,47) @table @asis glossary.texi(glossary,47) @item name1 @anchor{id1} glossary.texi(glossary,47) text1, arg1 glossary.texi(glossary,47) @item name2 @anchor{id2} glossary.texi(glossary,47) text2 glossary.texi(glossary,47) @end table glossary.texi(glossary,47) glossary.texi(,48) texi2html-1.82/test/macros/res/texi_glossary/glossary.passfirst0000644000175000017500000000160311264347122026765 0ustar flichtenheldflichtenheldglossary.texi(,2) glossary.texi(,3) @setfilename glossary glossary.texi(,4) glossary.texi(,8) glossary.texi(,14) glossary.texi(,34) glossary.texi(,35) @node Top glossary.texi(,36) @top Top glossary.texi(,37) glossary.texi(,38) @menu glossary.texi(,39) * glossary:: glossary.texi(,40) @end menu glossary.texi(,41) glossary.texi(gentry,42) The @ref{id1,name1} glossary.texi(gentry,42) is used in many cases while glossary.texi(gentry,43) @ref{id2,name2} glossary.texi(gentry,43) is quite specific glossary.texi(,44) glossary.texi(,45) @node glossary glossary.texi(,46) @chapter glossary glossary.texi(glossary,47) @table @asis glossary.texi(glossary,47) @item name1 @anchor{id1} glossary.texi(glossary,47) text1, arg1 glossary.texi(glossary,47) @item name2 @anchor{id2} glossary.texi(glossary,47) text2 glossary.texi(glossary,47) @end table glossary.texi(glossary,47) glossary.texi(,48) texi2html-1.82/test/macros/res/macro_in_misc/0000755000175000017500000000000011264347122023070 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/macro_in_misc/macro_in_misc.20000644000175000017500000000000011264347122025743 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/macro_in_misc/macro_in_misc.html0000644000175000017500000003243611264347122026570 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    top atext

    Comment like: atext

    Text line followed by a comment on the same line and another below

    @definfoenclose phoo,//,\\ //bar\\

    :bar:

    very strong

    (strong: is it really strong? :)

    something before kbdinputstyle

    truc

     
    example
    

    false aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

    true aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

    command removed

    @page @noindent @refill something

    noindent at beginning of line noindent on the preceding line noindent after space at beginning of line page at beginning of line After page on it’s own line.

    @page @noindent @refill

    special

    Only valid between iftex: Unknown ???

    line after exdent

    And now sp:




    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. chapter


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 section


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. bidule


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. last


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    Short Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/macros/res/texi_include_macro/0000755000175000017500000000000011264347122024123 5ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/res/texi_include_macro/include_macro.passtexi0000644000175000017500000000046211264347122030513 0ustar flichtenheldflichtenheldinclude_macro.texi(,2) include_macro.texi(,3) @node Top include_macro.texi(,4) @top test inclusion of a file defining a macro include_macro.texi(,5) include_macro.texi(,7) include_macro.texi(,8) Call macro include_macro.texi(themacro,9) in themacro include_macro.texi(,10) include_macro.texi(,11) @bye texi2html-1.82/test/macros/res/texi_include_macro/include_macro.passfirst0000644000175000017500000000046211264347122030671 0ustar flichtenheldflichtenheldinclude_macro.texi(,2) include_macro.texi(,3) @node Top include_macro.texi(,4) @top test inclusion of a file defining a macro include_macro.texi(,5) include_macro.texi(,7) include_macro.texi(,8) Call macro include_macro.texi(themacro,9) in themacro include_macro.texi(,10) include_macro.texi(,11) @bye texi2html-1.82/test/macros/res/texi_include_macro/include_macro.texi0000644000175000017500000000017111264347122027621 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top @top test inclusion of a file defining a macro Call macro in themacro @bye texi2html-1.82/test/macros/res/texi_include_macro/include_macro.20000644000175000017500000000000011264347122027000 0ustar flichtenheldflichtenheldtexi2html-1.82/test/macros/macros_in_pass0_macros.texi0000644000175000017500000000240011264347123025011 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename macros_in_pass0_macros.info @node Top @top macro in index commands @macro cp cp @end macro @macro fn fn @end macro @macro syncodeindex_command @syncodeindex @end macro @syncodeindex @cp{} @fn{} @syncodeindex_command{} cp fn @macro en en @end macro @macro documentlanguage_command @documentlanguage @end macro documentlanguage @documentlanguage @en{} documentlanguage on its line @documentlanguage_command{} en line following documentlanguage @macro truc truc @end macro definedx truc @defindex @truc{} after @macro trucindex_command @trucindex @end macro @trucindex_command{} index truc @macro codeidx codeidx @end macro @defcodeindex @codeidx{} @macro defcodeindex_entry a @var{index entry} t@'e @^{@dotless{i}} @end macro @codeidxindex @defcodeindex_entry{} @cindex cindex entry @syncodeindex ky pg @kindex @truc{} kindex @pindex pindex @codeidx{} @synindex truc cp @defindex abc @defindex defg @synindex abc defg @synindex defg ky @defgindex defg index entry @abcindex abc index entry pg @printindex pg ky @printindex ky truc @printindex truc value truc @printindex @truc{} cp @printindex cp value cp @printindex @cp{} defg @printindex defg abc @printindex abc fn @printindex fn @bye texi2html-1.82/test/macros/file.texi0000644000175000017500000000005311264347123021306 0ustar flichtenheldflichtenheldcontent of included file with arg2: \arg2\ texi2html-1.82/test/macros/node-value.texi0000644000175000017500000000040011264347123022422 0ustar flichtenheldflichtenheld\input texinfo @setfilename node-value.info @set a--foo bar @node Top, @value{a--foo}, (dir), (dir) @top Var @value{a--foo} @value{a--foo} @node @value{a--foo}, BarFoo, Top, (dir) @chapter BarFoo @node BarFoo, , @value{a--foo}, (dir) @chapter bar @bye texi2html-1.82/test/macros/ifclear_in_macro.texi0000644000175000017500000000026011264347123023643 0ustar flichtenheldflichtenheld\input texinfo.tex @c -*-texinfo-*- @setfilename ifclear_in_macro.info @macro note {arg} @ifclear notes \arg\ @end ifclear @end macro @node Top @note{ arg } text @bye texi2html-1.82/test/macros/include_macro.texi0000644000175000017500000000022411264347123023173 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top @top test inclusion of a file defining a macro @include macro_included.texi Call macro @themacro @bye texi2html-1.82/test/macros/macros.texi0000644000175000017500000000135411264347123021660 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top @top Test macro with include file and macro in macro @c makeinfo doesn't like: @c a new macro: @@<: @< !!! @c makeinfo doesn't like: @c @@aa without brace @aa The file included: @include file.texi File has been included. @macro macro1 {arg1, arg2 } result of a macro with \arg1\ and @include file.texi \arg2\ @end macro Right. @macro1 { @samp{first arg no ?}, second arg} Now define macro2 @macro macro2 { arg } With a doubles arg \arg\ and re \arg\ @end macro Call macro2 @macro2 { a simple @code{ arg} } Call macro2 with 2 args @macro2 { arg with comma , here } Define macro3 @macro macro3 { arg } @example /arg/ /arg/ @end example @end macro Call macro3 @macro3 { an arg } @contents @bye texi2html-1.82/test/macros/empty_macro.texi0000644000175000017500000000017211264347123022710 0ustar flichtenheldflichtenheld\input texinfo @setfilename empty_macro.info @node Top @top test empty macro @macro foo @end macro @foo @foo{} @bye texi2html-1.82/test/macros/macro-at.texi0000644000175000017500000000162711264347123022102 0ustar flichtenheldflichtenheld\input texinfo @c -*- texinfo -*- @setfilename macro-at.info @settitle AUTHORS -- who did what on GNU LilyPond @macro foo foo-expansion @end macro @macro bar bar-expansion @end macro @node Top, , AUTHORS -- who did what on GNU LilyPond, (dir) @top @menu * AUTHORS -- who did what on GNU LilyPond:: AUTHORS -- who did what. @end menu @node AUTHORS -- who did what on GNU LilyPond, Top, , Top @chapter AUTHORS -- who did what on GNU LilyPond? This file lists authors of GNU LilyPond, and what they wrote. It also uses foobar@{. @itemize @bullet @item @email{pinard@@iro.montreal.ca, Fran@,{c}ois Pinard}, parts of Documentation. @item @email{foobar@@baz@@, The Foobar}, the usual foobarical thing. @item @email{another@@foobar@{, Buzzer}, buzzed all the way. @item @email{@foo{}@@@bar{}}, also helped. @item @email{tomcato@@xoommail.com, Tom Cato Amundsen}, cembalo-partita in mundela. @end itemize @bye texi2html-1.82/test/macros/two_macros_on_a_line.texi0000644000175000017500000000063411264347123024554 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename two_macros_on_a_line @node Top @top top @macro mymacro in mymacro @end macro @macro mymacro_with_args{arg} in with args now the arg \arg\ after @end macro @@mymacro@{@} @@mymacro@{@} @mymacro{} @mymacro{} @@mymacro @@mymacro@{@} @mymacro @mymacro{} @@mymacro@{@} @@mymacro @mymacro{} @mymacro with args @mymacro_with_args {an arg in macro} @mymacro{} @bye texi2html-1.82/test/macros/cond.texi0000644000175000017500000000061711264347123021320 0ustar flichtenheldflichtenheld\input texinfo @setfilename cond.info @node Top @html This is html text. @end html @ifhtml This is ifhtml text. @end ifhtml @ifnothtml This is ifnothtml text. @end ifnothtml @ifinfo This is ifinfo text. @end ifinfo @ifnotinfo This is ifnotinfo text. @end ifnotinfo @tex This is tex text. @end tex @iftex This is iftex text. @end iftex @ifnottex This is ifnottex text. @end ifnottex @bye texi2html-1.82/test/macros/imbricated_macros.texi0000644000175000017500000000175611264347123024051 0ustar flichtenheldflichtenheld\input texinfo.tex @setfilename imbricated_macros @node Top @macro macro1 a, @macro2 @end macro @macro macro11 a, macro2 @end macro @macro macro2{arg} coucou \arg\ after arg @end macro @macro macro3{text, arg} \text\ &&&& \arg\ @end macro @macro macro4 {} 1 2 3 4 @end macro @c the arguments are broken at , before macro expansion @c @ protect the following @. @c @macro3{@macro1{}text for macro2} @c the macro inside @macro1 is expanded before the remaining args @c are appended. @macro3{@macro11{}text for macro2} @macro3{@verb{% @macro2 %} @c @macro4 @pagesizes 4 @macro4 @headings doubleafter @macro4 @verbatim @macro2 @end verbatim @ignore @macro4 @end ignore @macro macro7 {truc} @emph{\\truc\\} @end macro macro7 defined @ifinfo @macro4 @end ifinfo @iftex @macro2{aa\,bb} @end iftex @macro4 } Call macro7 @macro7{aaa} @bye @c makeinfo doesn't like not closed environments @macro v1{} @verbatim @end macro @macro v2{} @c @end verbatim @end macro @v1 @c @v2 @c @end verbatim @bye texi2html-1.82/test/macros/tests.txt0000644000175000017500000000352111264347123021402 0ustar flichtenheldflichtenheldtexi test_include.texi texi macros.texi texi macro_zero.texi texi simple_macro.texi texi nested_macro_calls.texi texi two_macros_on_a_line.texi texi glossary.texi texi imbricated_macros.texi texi expansion_order.texi texi ifclear_in_macro.texi texi macro_call_in_ifset.texi texi ifset_in_macro.texi texi_ifset_defined ifset_in_macro.texi -D notes --macro-expand=out/texi_ifset_defined/ifset_in_macro.texi dumptexi_ifset_defined ifset_in_macro.texi -D notes -dump-texi texi not_ifset_text.texi texi bib-example.texi texi quote-args.texi texi macro-at.texi texi alias.texi texi nested_ignore.texi texi include_macro.texi texi node-expand.texi texi node-value.texi texi value_in_pass0_macros.texi texi macros_in_pass0_macros.texi texi include-value.texi texi value_in_misc_valid.texi texi macro_in_misc.texi texi macro_in_pass_texi_commands.texi texi macro_commands_in_pass_texi_commands.texi texi empty_macro.texi texi cond.texi --ifhtml --ifinfo --no-iftex test_include test_include.texi # in the texinfo test suite, the default is info, and there is also a # test with --html which doesn't make much sense here, replaced with --xml # though it is not the same cond cond.texi cond_xml cond.texi --init xml.init cond_no-ifhtml_no-ifinfo_no-iftex cond.texi --no-ifhtml --no-ifinfo --no-iftex cond_ifhtml_ifinfo_iftex cond.texi --ifhtml --ifinfo --iftex defcondx_Dbar defxcond.texi -D bar defcondx_Ubar defxcond.texi -U bar macro-at macro-at.texi value_in_pass0_macros value_in_pass0_macros.texi -init makeinfo.init macros_in_pass0_macros macros_in_pass0_macros.texi -init makeinfo.init node-expand node-expand.texi -init makeinfo.init node-expand_xml node-expand.texi -init xml.init include-value include-value.texi value_in_misc value_in_misc_valid.texi --iftex macro_in_misc macro_in_misc.texi macro_commands_in_pass_texi_commands macro_commands_in_pass_texi_commands.texi texi2html-1.82/test/macros/macro_commands_in_pass_texi_commands.texi0000644000175000017500000000120711264347123030001 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @macro begin_file macro_i--n_pass@@ @end macro @macro end_file_name {ext} texi_commands.\ext\ @end macro @setfilename @begin_file{}@end_file_name{info} @macro definfoenclose_name phi @end macro @definfoenclose @definfoenclose_name{},:,: @macro latin1 ISO-8859-1@@ @end macro @macro documentencoding_command @documentencoding @end macro @documentencoding_command @latin1{} @macro multiinclude macro_included.texi @include inc_@@f--ile.texi @end macro @node Top @top top @include @multiinclude @themacro macro_in_pass_texi_commands@{info@} @end_file_name{info} @verbatiminclude inc_@@f--ile.texi @bye texi2html-1.82/test/macros/value_in_misc_valid.texi0000644000175000017500000001006211264347123024364 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename value_in_misc.info @hyphenation{some-where be-low may-be to-morow } @set text atext @node Top @top top @value{text} @subheading Comment like: @value{text} Text line followed by a comment on the same line and another below @c comment @value{text} @c comment @value{text} @set pagesizes_arg 200mm,150mm @set afourpaper_macro @afourpaper @ifnottex @pagesizes @value{pagesizes_arg} @end ifnottex @value{afourpaper_macro} @headings on line following headings @value{text} @oddfooting some text ignored @value{text} @everyheading on line following everyheading @value{text} @set need_arg 0.1 @ifnottex @need @value{need_arg} @end ifnottex @set raisesections_macro @raisesections @value{raisesections_macro} @set lowersections_macro @lowersections @value{lowersections_macro} @c tex error: Use of \ doesn't match its definition. @ifnottex @@definfoenclose phoo,//,\\ @definfoenclose phoo,//,\\ @phoo{bar} @end ifnottex @set definfoenclose_name phi @definfoenclose @value{definfoenclose_name},:,: @ifclear texi2html @c this is required @iftex @global@let@phi=@i @end iftex @end ifclear @phi{bar} @set strong_macro @strong @set strong_name strong @iftex @value{strong_macro}{very strong} @end iftex @strong{very strong} @definfoenclose @value{strong_name},(@value{strong_name}:,:) @iftex @value{strong_macro}{ is it really strong? } @end iftex @strong{ is it really strong? } @kbd{something before kbdinputstyle} @set kbdinputstyle_arg code @ifnottex @kbdinputstyle @value{kbdinputstyle_arg} @end ifnottex @kbd{truc} @example @kbd{example} @end example @set asis_arg asis @set zero 0 @set none_arg none @set four 4 @set six 6 @ifnottex @paragraphindent @value{asis_arg} @paragraphindent @value{zero} @paragraphindent @value{none_arg} @paragraphindent @value{four} @firstparagraphindent @value{none_arg} @exampleindent @value{six} @end ifnottex @set end_arg end @set separate_arg separate @footnotestyle @value{end_arg} @footnotestyle @value{separate_arg} @set latin1 ISO-8859-1 @ifnottex @documentencoding @value{latin1} @end ifnottex @set on_arg on @set off_arg off @ifnottex @frenchspacing @value{on_arg} @frenchspacing @value{off_arg} @end ifnottex @c accepts 10 or 11 @set ten 10 @ifnottex @fonttextsize @value{ten} @end ifnottex @c accept false or true @c makeinfo don't care about the arg and remove the remainiing of the line @set false_arg false @set true_arg true @ifnottex @allowcodebreaks @value{false_arg} @end ifnottex @code{false aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa} @ifnottex @allowcodebreaks @value{true_arg} @end ifnottex @code{true aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa} @subheading command removed @finalout @set page_macro @page @set noindent_macro @noindent @set refill_macro @refill @@page @value{page_macro} @@noindent @value{noindent_macro} @@refill @value{refill_macro} something @value{noindent_macro} noindent at beginning of line @value{noindent_macro} noindent on the preceding line @value{noindent_macro} noindent after space at beginning of line @page page at beginning of line @page After page on it's own line. @@page @value{page_macro} @@noindent @value{noindent_macro} @@refill @value{refill_macro} @set contents_macro @contents @value{contents_macro} @subheading special Only valid between iftex: @c @@vskip @vskip @@cropmarks @cropmarks Unknown ??? @c @@fillbreak @fillbreak eol @set exdent_macro @exdent @ifnottex @value{exdent_macro} line after exdent @end ifnottex And now sp: @set two 2 @iftex @ifnottex @sp @value{two} @end ifnottex @end iftex @sp 2 @set result_macro @result @clickstyle @value{result_macro} @menu * node @value{text}:: * bidule:: * bidule2:: @end menu @node node @value{text} @chapter chapter @menu * truc:: @end menu @node truc @section section @value{contents_macro} @node bidule @chapter bidule @set shortcontents_macro @shortcontents @value{shortcontents_macro} @node bidule2 @chapter last @bye texi2html-1.82/test/macros/simple_macro.texi0000644000175000017500000001172311264347123023047 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top @top Basic macro calls Define a simple macro @example @@macro macro1 @{arg1, arg2 @} result: @@emph@{\arg1\@} protected \\ -> \\arg1\\ @@emp@{\arg2\@} @@end macro @end example before macro @macro macro1 { arg1 , arg2 } result: @emph{\arg1\} protected \\ -> \\arg1\\ @emph{\arg2\} @end macro after end macro Calling (normal) @example the @@macro1 @{ @@samp@{f\irst arg@}, second arg @} after macro @end example ================================== the @macro1 { @samp{f\irst arg}, second arg } after macro ----------------------------------- the result: @emph{@samp{first arg}} protected \ -> \arg1\ @emph{second arg } after macro ==================================== Calling (one arg) @example @@macro1 @{ @@samp@{f\irst arg@}@} @end example ================================== @macro1 { @samp{f\irst arg}} ----------------------------------- result: @emph{@samp{first arg}} protected \ -> \arg1\ @emph{} ==================================== Calling (no args) @example @@macro1 @@samp@{f\irst arg@}, second arg @end example ================================== @macro1 @samp{f\irst arg}, second arg ----------------------------------- result: @emph{} protected \ -> \arg1\ @emph{} @samp{f\irst arg}, second arg ==================================== @ifhtml Calling (three args) @example @@macro1 @{ @@samp@{f\irst arg@}, second arg, third arg@} @end example ================================== @macro1 { @samp{f\irst arg}, second arg, third arg} ----------------------------------- result: @emph{@samp{first arg}} protected \ -> \arg1\ @emph{second arg} ==================================== @end ifhtml define a macro with one arg @example @@macro macro2 @{ arg @} we get \arg\ and another \arg\ and a last one on another line \arg\ and a last in another paragraph @@end macro @end example @macro macro2 { arg } we get \arg\ and another \arg\ and another one on another line \arg\ and a last in another paragraph @end macro Calling @example @@macro2 @{ arg, comma \, @} @end example ================================== @macro2 { arg, comma \, } ----------------------------------- we get arg, comma , and another arg, comma , and another one another line arg, comma , and a last in another paragraph ================================== Calling @example @@macro2 arg, comma \, @end example ================================== @macro2 arg, comma \, ----------------------------------- we get arg, comma \, and another arg, comma \, and another one on another line arg, comma \, and a last in another paragraph ================================== @macro ab a b @end macro now @@set comma , @set comma , @@set flagab @@ab @set flagab @ab the values: ====================================== flagab: @value{flagab} -------------------------------------- makeinfo result (the macro in set is expanded and all the resulting lines are replaced): flagab: a b ====================================== comma: @value{comma} Calling macro1 with value @example @@macro1 @{ arg1 @@value@{comma@} arg2 @} @end example ======================================= @macro1 { arg1 @value{comma} arg2 } --------------------------------------- makeinfo result (the comma don't separate args ; the value is expanded after arguments parsing): result: @emph{arg1 , arg2 } protected \ -> \arg1\ @emph{} ======================================= In verbatim @verbatim comma: @value{comma} @macro1{ bidule, truc} @end verbatim @set argument arg @set bodyarg \arg\ Define macro @example @@macro testvaluebody @{ arg @} result: @@emph@{\@@value@{bodyarg@}\ @} @@end macro @end example @macro testvaluebody { arg } result: @emph{\@value{bodyarg}\ } @end macro ================================== @testvaluebody{macro_arg1} ---------------------------------- makeinfo result (according to error message, the value isn't expanded when the body is expanded; it is kept, but the second \ isn't): result: @emph{\\arg\ } ================================== Define macro @example @@macro testvalue @{ arg , the@@value@{argument@} @} result: @@emph@{\arg\@} the \the\ thearg \thearg\ with value \the@@value@{argument@}\ @@end macro @end example @macro testvalue { arg , the@value{argument} } result: @emph{\arg\} the \the\ thearg \thearg\ with value \the@value{argument}\ @end macro ================================== @testvalue{macro_arg1} ---------------------------------- makeinfo (breaks) result: result: @emph{macro_arg1} the \the thearg \thearg with value \thearg ================================== Define macro without arg @example @@macro test1 test1 @@end macro @end example @macro test1 test1 @end macro Call with @{@}: ================================== @test1{} abc ---------------------------------- test1 abc ================================== Call with something on the line ================================== @test1 abc ---------------------------------- test1 abc ================================== An empty set value @set myspace 1 @value{myspace} 1 @contents @bye texi2html-1.82/test/macros/node-expand.texi0000644000175000017500000000240211264347123022571 0ustar flichtenheldflichtenheld\input texinfo.tex @c -*-texinfo-*- @setfilename node-expand.info @c Makeinfo should expand non-macros such as @@ and @value @c in node names and node references, including menus. @c This file deliberately references "Node 1" both via @c @value and directly; this should not trigger any errors, @c as long as --commands-in-node-names is used. @c Index entries should all be expanded as well. @set node1 Node 1 @ifnottex @node Top, (dir), (dir), (dir) @top Expansion in Node Names @end ifnottex @menu * @value{node1} :: * @@node `2':: * ``node'' with---tricks:: @end menu @xref{@@node `2'}. @node @value{node1}, @@node `2', Top, Top @chapter Chapter 1 @cindex entry for chapter 1 This is chapter 1. @xref{@@node `2'}. @set sec1 Section 1.1 @menu * @value{sec1}:: @end menu @node Section 1.1, , Node 1, Node 1 @comment node-name, next, previous, up @cindex entry for section 1.1 This is section 1.1. @node @@node `2', ``node'' with---tricks, @value{node1}, Top @comment node-name, next, previous, up @chapter Node 2 @cindex entry for chapter 2 This is chapter 2. @xref{@value{node1}}. @xref{Node 1}. @xref{``node'' with---tricks, Node with some tricks}. @node ``node'' with---tricks, , @@node `2', Top @cindex tricks Another node. @printindex cp @bye texi2html-1.82/test/macros/bib-example.texi0000644000175000017500000000307711264347123022565 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @c % Copyright (C) 2004 Aaron S. Hawley @c % Author: Aaron S. Hawley @c % Keywords: docs, texinfo, extensions, bib @c % This file is free software; you can redistribute it and/or modify @c % it under the terms of the GNU General Public License as published by @c % the Free Software Foundation; either version 2, or (at your option) @c % any later version. @c % This file is distributed in the hope that it will be useful, @c % but WITHOUT ANY WARRANTY; without even the implied warranty of @c % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @c % GNU General Public License for more details. @c % You should have received a copy of the GNU General Public License @c % along with texi2html; see the file COPYING. If not, write to @c % the Free Software Foundation, Inc., 59 Temple Place - Suite 330, @c % Boston, MA 02111-1307, USA. @comment %**start of header @setfilename my-file-with-bib.info @settitle Texinfo with a Bibliography and References @include my-bib-macros.texi @mybibuselist{References} @comment %**end of header @node Top @top Top @menu * Introduction:: * @mybibnode{}:: @end menu @node Introduction @chapter Introduction The ability of a documentation format to make cross references to a bibliography, a feature of LaTeX @mybibcite{LaTeX2e}, isn't currently supported in Texinfo. @node @mybibnode{} @chapter References @itemize @asis @mybibitem{LaTeX2e} Leslie Lamport, LaTeX User's Guide and Reference Manual, 2nd edition, Addison-Wesley, Reading, Massachusetts, 1994. @end itemize @bye texi2html-1.82/test/macros/ifset_in_macro.texi0000644000175000017500000000025211264347123023351 0ustar flichtenheldflichtenheld\input texinfo.tex @c -*-texinfo-*- @setfilename ifset_in_macro.info @macro note {arg} @ifset notes \arg\ @end ifset @end macro @node Top @note{ arg } text @bye texi2html-1.82/test/macros/expansion_order.texi0000644000175000017500000000012711264347123023570 0ustar flichtenheldflichtenheld @macro bidule{arg} @machin @end macro @macro machin \\arg\\ @end macro @bidule{ab} texi2html-1.82/test/macros/macro_included.texi0000644000175000017500000000004711264347123023342 0ustar flichtenheldflichtenheld@macro themacro in themacro @end macro texi2html-1.82/test/macros/macro_call_in_ifset.texi0000644000175000017500000000041011264347123024340 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @comment %**start of header @setfilename macro_in_ifset.info @macro macro1 {arg} @end ifset @end macro @node Top @top Top @ifset a @macro1 in ifset @end ifset @ifset a @macro1{ @end ifset } in ifset @end ifset 24 text @bye texi2html-1.82/test/macros/include-value.texi0000644000175000017500000000115111264347123023124 0ustar flichtenheldflichtenheld\input texinfo @setfilename include-value.info @c @set testvar incl-incl.txi @c test - in the variable name, and concatenation of text after. @set test-var incl-incl.tx @c test - in the variable name, and concatenation of text before and after. @set test_var ncl-incl.tx @node Top testvar include: @include @value{testvar} testvar verbatiminclude: @verbatiminclude @value{testvar} test-var include: @include @value{test-var}i test-var verbatiminclude: @verbatiminclude @value{test-var}i test_var include: @include i@value{test_var}i test_var verbatiminclude: @verbatiminclude i@value{test_var}i @bye texi2html-1.82/test/macros/Makefile.am0000644000175000017500000000163511264347123021537 0ustar flichtenheldflichtenheldEXTRA_DIST = macros.texi simple_macro.texi nested_macro_calls.texi \ glossary.texi imbricated_macros.texi expansion_order.texi \ ifclear_in_macro.texi macro_call_in_ifset.texi ifset_in_macro.texi \ not_ifset_text.texi bib-example.texi quote-args.texi alias.texi \ test_include.texi nested_ignore.texi include_macro.texi \ cond.texi defxcond.texi include-value.texi macro_in_misc.texi \ value_in_misc_valid.texi macro-at.texi node-expand.texi \ value_in_pass0_macros.texi macros_in_pass0_macros.texi macro_zero.texi \ macro_in_pass_texi_commands.texi two_macros_on_a_line.texi \ macro_commands_in_pass_texi_commands.texi node-value.texi empty_macro.texi \ inc_@f--ile.texi \ file.texi inc_file.texi macro_included.texi my-bib-macros.texi \ incl-incl.txi \ tests.txt res DISTCLEANFILES = l2h_tmp_dir.init tests.log tests.out distclean-local: rm -rf out diffs dist-hook: rm -rf `find $(distdir)/res -name CVS` texi2html-1.82/test/macros/test_include.texi0000644000175000017500000000023711264347123023055 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename test_include.info @node Top This is a very simple texi manual. @include inc_file.texi After inclusion. @bye texi2html-1.82/test/macros/nested_macro_calls.texi0000644000175000017500000000026111264347123024211 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename nested_macro_calls @node Top @macro machin{} (machin) @end macro @macro truc{} @machin @end macro Before @truc{} after truc. texi2html-1.82/test/coverage_macro.texi0000644000175000017500000004460311264347123022070 0ustar flichtenheldflichtenheld@macro mymacro < > " & ' ` ``simple-double--three---four----''@* code: @code{``simple-double--three---four----''} @* asis: @asis{``simple-double--three---four----''} @* strong: @strong{``simple-double--three---four----''} @* kbd: @kbd{``simple-double--three---four----''} @* `@w{}`simple-double-@w{}-three---four----'@w{}'@* @cindex --option @cindex `` @findex `` @findex --foption @@"u @"u @@"@{U@} @"{U} @@~n @~n @@^a @^a @@'e @'e @@=o @=o @@`i @`i @@'@{e@} @'{e} @@'@{@@dotless@{i@}@} @'{@dotless{i}} @@dotless@{i@} @dotless{i} @@dotless@{j@} @dotless{j} @@`@{@@=E@} @`{@=E} @@l@{@} @l{} @@,@{@@'C@} @,{@'C} @@,c @,c @@,c@@"u @,c@"u @* @@* @* @@ followed by a space @ @@ followed by a tab @ @@ followed by a new line @ @code{@@-} @- @code{@@|} @| @code{@@:} @: @code{@@!} @! @code{@@?} @? @code{@@.} @. @code{@@@@} @@ @code{@@@}} @} @code{@@@{} @{ @code{@@/} @/ foo vs.@: bar. colon :@:And something else. semi colon ;@:. And ? ?@:. Now ! !@:@@ but , ,@: @@TeX @TeX{} @@LaTeX @LaTeX{} @@bullet @bullet{} @@copyright @copyright{} @@dots @dots{} @@enddots @enddots{} @@equiv @equiv{} @@error @error{} @@expansion @expansion{} @@minus @minus{} @@point @point{} @@print @print{} @@result @result{} @@today @today{} @@aa @aa{} @@AA @AA{} @@ae @ae{} @@oe @oe{} @@AE @AE{} @@OE @OE{} @@o @o{} @@O @O{} @@ss @ss{} @@l @l{} @@L @L{} @@exclamdown @exclamdown{} @@questiondown @questiondown{} @@pounds @pounds{} @@registeredsymbol @registeredsymbol{} @@ordf @ordf{} @@ordm @ordm{} @@comma @comma{} @@quotedblleft @quotedblleft{} @@quotedblright @quotedblright{} @@quoteleft @quoteleft{} @@quoteright @quoteright{} @@quotedblbase @quotedblbase{} @@quotesinglbase @quotesinglbase{} @@guillemetleft @guillemetleft{} @@guillemetright @guillemetright{} @@guillemotleft @guillemotleft{} @@guillemotright @guillemotright{} @@guilsinglleft @guilsinglleft{} @@guilsinglright @guilsinglright{} @@textdegree @textdegree{} @@euro @euro{} @@arrow @arrow{} @@leq @leq{} @@geq @geq{} @code{@@acronym@{--a,an accronym@}} @acronym{--a,an accronym} @code{@@acronym@{--a@}} @acronym{--a} @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude Autonome @}} @abbr{@'E--. @comma{}A., @'Etude Autonome } @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} @code{@@asis@{--a@}} @asis{--a} @code{@@b@{--a@}} @b{--a} @code{@@cite@{--a@}} @cite{--a} @code{@@code@{--a@}} @code{--a} @code{@@command@{--a@}} @command{--a} @code{@@ctrl@{--a@}} @ctrl{--a} @code{@@dfn@{--a@}} @dfn{--a} @code{@@dmn@{--a@}} @dmn{--a} @code{@@email@{--a,--b@}} @email{--a,--b} @code{@@email@{,--b@}} @email{,--b} @code{@@email@{--a@}} @email{--a} @code{@@emph@{--a@}} @emph{--a} @code{@@env@{--a@}} @env{--a} @code{@@file@{--a@}} @file{--a} @code{@@i@{--a@}} @i{--a} @code{@@kbd@{--a@}} @kbd{--a} @code{@@key@{--a@}} @key{--a} @code{@@math@{--a @{\\frac@{1@}@{2@}@} @@minus@{@}@}} @math{--a {\\frac{1}{2}} @minus{}} @code{@@option@{--a@}} @option{--a} @code{@@r@{--a@}} @r{--a} @code{@@samp@{--a@}} @samp{--a} @code{@@sc@{--a@}} @sc{--a} @code{@@strong@{--a@}} @strong{--a} @code{@@t@{--a@}} @t{--a} @code{@@sansserif@{--a@}} @sansserif{--a} @code{@@titlefont@{--a@}} @titlefont{--a} @code{@@indicateurl@{--a@}} @indicateurl{--a} @code{@@uref@{--a,--b@}} @uref{--a,--b} @code{@@uref@{--a@}} @uref{--a} @code{@@uref@{,--b@}} @uref{,--b} @code{@@uref@{--a,--b,--c@}} @uref{--a,--b,--c} @code{@@uref@{,--b,--c@}} @uref{,--b,--c} @code{@@uref@{--a,,--c@}} @uref{--a,,--c} @code{@@uref@{,,--c@}} @uref{,,--c} @code{@@url@{--a,--b@}} @url{--a,--b} @code{@@url@{--a,@}} @url{--a,} @code{@@url@{,--b@}} @url{,--b} @code{@@var@{--a@}} @var{--a} @code{@@verb@{:--a:@}} @verb{:--a:} @code{@@verb@{:a < & @@ % " -- b:@}} @verb{:a < & @ % " -- b:} @code{@@w@{@}} @w{} @code{@@H@{a@}} @H{a} @code{@@H@{--a@}} @H{--a} @code{@@dotaccent@{a@}} @dotaccent{a} @code{@@dotaccent@{--a@}} @dotaccent{--a} @code{@@ringaccent@{a@}} @ringaccent{a} @code{@@ringaccent@{--a@}} @ringaccent{--a} @code{@@tieaccent@{a@}} @tieaccent{a} @code{@@tieaccent@{--a@}} @tieaccent{--a} @code{@@u@{a@}} @u{a} @code{@@u@{--a@}} @u{--a} @code{@@ubaraccent@{a@}} @ubaraccent{a} @code{@@ubaraccent@{--a@}} @ubaraccent{--a} @code{@@udotaccent@{a@}} @udotaccent{a} @code{@@udotaccent@{--a@}} @udotaccent{--a} @code{@@v@{a@}} @v{a} @code{@@v@{--a@}} @v{--a} @code{@@,@{c@}} @,{c} @code{@@,@{--c@}} @,{--c} @ifset texi2html @code{@@ogonek@{a@}} @ogonek{a} @code{@@ogonek@{--a@}} @ogonek{--a} @end ifset @code{@@footnote@{in footnote@}} @footnote{in footnote} @code{@@footnote@{in footnote2@}} @footnote{in footnote2} @code{@@image@{f--ile@}} @image{f--ile} @code{@@image@{f--ile,l--i@}} @image{f--ile,l--i} @code{@@image@{f--ile,,l--e@}} @image{f--ile,,l--e} @code{@@image@{f--ile,,,alt@}} @image{f--ile,,,alt} @code{@@image@{f--ile,,,,e-d-xt@}} @image{f--ile,,,,e--xt} @code{@@image@{f--ile,aze,az,alt,e--xt@}} @image{f--ile,aze,az,alt,e--xt} @code{@@image@{f-ile,aze,,a--lt@}} @image{f-ile,aze,,a--lt} @code{@@image@{@@file@{f--ile@}@@@@@@.,aze,az,alt,@@file@{file ext@} e--xt@@@}} @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@}} @sp 2 @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} @clickstyle @result After clickstyle @result{} @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} @clickstyle @arrow @quotation A quot---ation @end quotation @quotation Note A Note @end quotation @quotation note A note @end quotation @quotation Caution Caution @end quotation @quotation Important Important @end quotation @quotation Tip a Tip @end quotation @quotation Warning a Warning. @end quotation @quotation something @'e @TeX{} The something @'e @TeX{} is here. @end quotation @quotation @@ at the end of line @ A @@ at the end of the @@quotation line. @end quotation @quotation something, other thing something, other thing @end quotation @quotation Note, the note Note, the note @end quotation @quotation @end quotation @quotation Empty @end quotation @quotation @asis{} @end quotation @quotation @* @end quotation @ifset texi2html @smallquotation A small quot---ation @end smallquotation @smallquotation Note A small Note @end smallquotation @smallquotation something, other thing something, other thing @end smallquotation @end ifset @itemize @item i--temize @end itemize @itemize + @item i--tem + @end itemize @itemize @bullet @item b--ullet @end itemize @itemize @minus @item minu--s @end itemize @itemize @emph @item e--mph item @end itemize @itemize @emph{after emph} @c comment in itemize @item e--mph item @end itemize @itemize @bullet{} a--n itemize line @cindex index entry within itemize @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 6 7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @c comment in multitable @item mu--ltitable item 2 @tab multitable tab 2 @cindex index entry within multitable @item lone mu--ltitable item @end multitable @multitable {truc} {bidule} @item truc @tab bidule @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @display d--isplay @end display @smalldisplay s--malldisplay @end smalldisplay @lisp l--isp @end lisp @smalllisp s--malllisp @end smalllisp @format f--ormat @end format @smallformat s--mallformat @end smallformat @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @deffn cate--gory de--ffn_name ar--guments @ more args @* even more so def--fn @end deffn @deffn fset @var{i} a g @cindex index entry within deffn @deffnx {cmde} truc {} @deffnx Command {log trap} {} @deffnx Command { log trap1} {} @deffnx Command {log trap2 } {} @deffnx cmde @b{id ule} truc @deffnx cmde2 @b{id @samp{i} ule} truc @deffnx @b{id @samp{i} ule} @deffnx @deffnx aaa @deffnx {} {} @deffnx{} @deffnx{} machin @deffnx{} {bidule machin} @deffnx{truc} machin @deffnx{truc} { } @deffnx{truc} followed by a comment @c comment @deffnx{truc} @deffnx{} {} @deffnx {truc} a b c d e @b{f g} {h i} @deffnx {truc} deffnx before end deffn @end deffn @deffn empty deffn @end deffn @deffn empty deffn with deffnx @c comment between deffn and deffnx @deffnx empty deffnx @end deffn @deffn fset @var{i} a g @deffnx {cmde} truc {} @c comment text in def item for second def item @end deffn @defvr c--ategory d--efvr_name d--efvr @end defvr @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... d--eftypefn @end deftypefn @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... d--eftypeop @end deftypeop @deftypevr c--ategory t--ype d--eftypevr_name d--eftypevr @end deftypevr @defcv c--ategory c--lass d--efcv_name d--efcv @end defcv @defop c--ategory c--lass d--efop_name a--rguments... d--efop @end defop @deftp c--ategory d--eftp_name a--ttributes... d--eftp @end deftp @defun d--efun_name a--rguments... d--efun @end defun @defmac d--efmac_name a--rguments... d--efmac @end defmac @defspec d--efspec_name a--rguments... d--efspec @end defspec @defvar d--efvar_name argvar argvar1 d--efvar @end defvar @defopt d--efopt_name d--efopt @end defopt @deftypefun t--ype d--eftypefun_name a--rguments... d--eftypefun @end deftypefun @deftypevar t--ype d--eftypevar_name d--eftypevar @end deftypevar @defivar c--lass d--efivar_name d--efivar @end defivar @deftypeivar c--lass t--ype d--eftypeivar_name d--eftypeivar @end deftypeivar @defmethod c--lass d--efmethod_name a--rguments... d--efmethod @end defmethod @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... d--eftypemethod @end deftypemethod @code{@@xref@{c---hapter@@@@, cross r---ef name@@@@, t---itle@@@@, file n---ame@@@@, ma---nual@@@@@}} @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@}. @code{@@ref@{chapter, cross ref name, title, file name, manual@}} @ref{chapter, cross ref name, title, file name, manual} @code{@@pxref@{chapter, cross ref name, title, file name, manual@}} @pxref{chapter, cross ref name, title, file name, manual} @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} @code{@@ref@{chapter@}} @ref{chapter} @code{@@xref@{chapter@}} @xref{chapter}. @code{@@pxref@{chapter@}} @pxref{chapter} @code{@@ref@{s--ect@@comma@{@}ion@}} @ref{s--ect@comma{}ion} @code{@@ref@{s--ect@@comma@{@}ion, a @@comma@{@} in cross ref, a comma@@comma@{@} in title, a comma@@comma@{@} in file, a @@comma@{@} in manual name @}} @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } @code{@@ref@{chapter,cross ref name@}} @ref{chapter,cross ref name} @code{@@ref@{chapter,,title@}} @ref{chapter,,title} @code{@@ref@{chapter,,,file name@}} @ref{chapter,,,file name} @code{@@ref@{chapter,,,,manual@}} @ref{chapter,,,,manual} @code{@@ref@{chapter,cross ref name,title,@}} @ref{chapter,cross ref name,title,} @code{@@ref@{chapter,cross ref name,,file name@}} @ref{chapter,cross ref name,,file name} @code{@@ref@{chapter,cross ref name,,,manual@}} @ref{chapter,cross ref name,,,manual} @code{@@ref@{chapter,cross ref name,title,file name@}} @ref{chapter,cross ref name,title,file name} @code{@@ref@{chapter,cross ref name,title,,manual@}} @ref{chapter,cross ref name,title,,manual} @code{@@ref@{chapter,cross ref name,title, file name, manual@}} @ref{chapter,cross ref name,title, file name, manual} @code{@@ref@{chapter,,title,file name@}} @ref{chapter,,title,file name} @code{@@ref@{chapter,,title,,manual@}} @ref{chapter,,title,,manual} @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} @code{@@ref@{chapter,,,file name,manual@}} @ref{chapter,,,file name,manual} @code{@@ref@{(pman)anode,cross ref name@}} @ref{(pman)anode,cross ref name} @code{@@ref@{(pman)anode,,title@}} @ref{(pman)anode,,title} @code{@@ref@{(pman)anode,,,file name@}} @ref{(pman)anode,,,file name} @code{@@ref@{(pman)anode,,,,manual@}} @ref{(pman)anode,,,,manual} @code{@@ref@{(pman)anode,cross ref name,title,@}} @ref{(pman)anode,cross ref name,title,} @code{@@ref@{(pman)anode,cross ref name,,file name@}} @ref{(pman)anode,cross ref name,,file name} @code{@@ref@{(pman)anode,cross ref name,,,manual@}} @ref{(pman)anode,cross ref name,,,manual} @code{@@ref@{(pman)anode,cross ref name,title,file name@}} @ref{(pman)anode,cross ref name,title,file name} @code{@@ref@{(pman)anode,cross ref name,title,,manual@}} @ref{(pman)anode,cross ref name,title,,manual} @code{@@ref@{(pman)anode,cross ref name,title, file name, manual@}} @ref{(pman)anode,cross ref name,title, file name, manual} @code{@@ref@{(pman)anode,,title,file name@}} @ref{(pman)anode,,title,file name} @code{@@ref@{(pman)anode,,title,,manual@}} @ref{(pman)anode,,title,,manual} @code{@@ref@{(pman)anode,,title, file name, manual@}} @ref{(pman)anode,,title, file name, manual} @code{@@ref@{(pman)anode,,,file name,manual@}} @ref{(pman)anode,,,file name,manual} @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} @code{@@inforef@{chapter@}} @inforef{chapter} @code{@@inforef@{chapter, cross ref name@}} @inforef{chapter, cross ref name} @code{@@inforef@{chapter,,file name@}} @inforef{chapter,,file name} @code{@@inforef@{node, cross ref name, file name@}} @inforef{node, cross ref name, file name} @code{@@inforef@{node@}} @inforef{node} @code{@@inforef@{node, cross ref name@}} @inforef{node, cross ref name} @code{@@inforef@{node,,file name@}} @inforef{node,,file name} @code{@@inforef@{chapter, cross ref name, file name, spurious arg@}} @inforef{chapter, cross ref name, file name, spurious arg} @code{@@inforef@{s--ect@@comma@{@}ion, a @@comma@{@} in cross ref, a comma@@comma@{@} in file@}} @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} @table @bullet @c comment in table @item a l--ine @end table @vtable @asis @item a @c comment between item and itemx @itemx b l--ine @end vtable @ftable @minus @item a @cindex index entry between item and itemx @itemx b l--ine @end ftable @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @verbatiminclude simplest.texi @verbatim in verbatim '' @end verbatim @xml xml para '' @end xml @html html '' @end html @tex $$\\partial_t \\eta (t) = g(\\eta(t),\\varphi(t))$$ '' @end tex @docbook docbook '' @end docbook @majorheading majorheading @chapheading chapheading @heading heading @subheading subheading @subsubheading subsubheading @c makeinfo cannot handle that @ifset texi2html @code{@@acronym@{--a,an accronym @@comma@{@} @@enddots@{@}@}} @acronym{--a,an accronym @comma{} @enddots{}} @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude--@@comma@{@} @@b@{Autonome@} @}} @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} @code{@@math@{--a@@minus@{@} @{\\frac@{1@}@{2@}@}@}} @math{--a@minus{} {\\frac{1}{2}}} @code{@@image@{f-ile,,,alt@@verb@{:jk _" %@:@}@}} @image{f-ile,,,alt@verb{:jk _" %@:}} @code{@@image@{f--ile,aze,az,@@verb@{:jk _" %@@:@} @@b@{in b "@},e--xt@}} @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} @code{@@image@{file@@verb@{:jk _" %@@:@},,,alt@@verb@{:jk _" %@@:@}@}} @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} @set invalid @end ifset @c invalid texinfo @ifset invalid Somehow invalid use of @@,:@* @@, @, @* @@,@@"u @,@"u Invalid use of @@':@* @@' @' @* @@'@@"u @'@"u @c only i or j as arg @@dotless@{truc@} @dotless{truc} @@dotless@{ij@} @dotless{ij} @code{@@dotless@{--a@}} @dotless{--a} @code{@@dotless@{a@}} @dotless{a} @c braces missing @@TeX, but without brace @TeX @c unknown command @code{@@#} @# @c no arg @code{@@w@{--a@}} @w{--a} @c no file @code{@@image@{,1--xt@}} @image{,1--xt} @code{@@image@{,,2--xt@}} @image{,,2--xt} @code{@@image@{,,,3--xt@}} @image{,,,3--xt} @sp @c braces missing @itemize @emph after emph @item e--mph item @end itemize @c braces missing @itemize @bullet a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @c deffnx after deff lines @deffn fun @deffnx truc machin bidule chose and } @deffnx truc machin bidule chose and } after @deffnx truc machin bidule chose and { @deffnx truc machin bidule chose and { and after @deffnx {truc} followed by a comment @c comment Various deff lines @deffnx {truc} after a deff item @end deffn @c node is non existent, or missing first arg @code{@@ref@{node@}} @ref{node} @code{@@ref@{,cross ref name@}} @ref{,cross ref name} @code{@@ref@{,,title@}} @ref{,,title} @code{@@ref@{,,,file name@}} @ref{,,,file name} @code{@@ref@{,,,,manual@}} @ref{,,,,manual} @code{@@ref@{node,cross ref name@}} @ref{node,cross ref name} @code{@@ref@{node,,title@}} @ref{node,,title} @code{@@ref@{node,,,file name@}} @ref{node,,,file name} @code{@@ref@{node,,,,manual@}} @ref{node,,,,manual} @code{@@ref@{node,cross ref name,title,@}} @ref{node,cross ref name,title,} @code{@@ref@{node,cross ref name,,file name@}} @ref{node,cross ref name,,file name} @code{@@ref@{node,cross ref name,,,manual@}} @ref{node,cross ref name,,,manual} @code{@@ref@{node,cross ref name,title,file name@}} @ref{node,cross ref name,title,file name} @code{@@ref@{node,cross ref name,title,,manual@}} @ref{node,cross ref name,title,,manual} @code{@@ref@{node,cross ref name,title, file name, manual@}} @ref{node,cross ref name,title, file name, manual} @code{@@ref@{node,,title,file name@}} @ref{node,,title,file name} @code{@@ref@{node,,title,,manual@}} @ref{node,,title,,manual} @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} @code{@@ref@{node,,title, file name, manual@}} @ref{node,,title, file name, manual} @code{@@ref@{node,,,file name,manual@}} @ref{node,,,file name,manual} @code{@@ref@{,cross ref name,title,@}} @ref{,cross ref name,title,} @code{@@ref@{,cross ref name,,file name@}} @ref{,cross ref name,,file name} @code{@@ref@{,cross ref name,,,manual@}} @ref{,cross ref name,,,manual} @code{@@ref@{,cross ref name,title,file name@}} @ref{,cross ref name,title,file name} @code{@@ref@{,cross ref name,title,,manual@}} @ref{,cross ref name,title,,manual} @code{@@ref@{,cross ref name,title, file name, manual@}} @ref{,cross ref name,title, file name, manual} @code{@@ref@{,,title,file name@}} @ref{,,title,file name} @code{@@ref@{,,title,,manual@}} @ref{,,title,,manual} @code{@@ref@{,,title, file name, manual@}} @ref{,,title, file name, manual} @code{@@ref@{,,,file name,manual@}} @ref{,,,file name,manual} @code{@@inforef@{,cross ref name @}} @inforef{,cross ref name } @code{@@inforef@{,,file name@}} @inforef{,,file name} @code{@@inforef@{,cross ref name, file name@}} @inforef{,cross ref name, file name} @code{@@inforef@{@}} @inforef{} @end ifset @end macro texi2html-1.82/test/invalid/0000755000175000017500000000000011264347126017643 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/verb_not_closed.texi0000644000175000017500000000010711264347126023703 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top texte @verb{* In verb * texi2html-1.82/test/invalid/brace_not_closed.texi0000644000175000017500000000030411264347126024020 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename brace_not_closed @node ToP Top node @samp{Closing} @samp{ @} without opening macro }.} anchor{truc@} @anchor{truc}. Some text @|. More text @bye texi2html-1.82/test/invalid/tex_in_copying.texi0000644000175000017500000000064511264347126023561 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename tex_in_copying.info @copying Some equation is indeed needed to understand the copyright of that file @tex From @ someone <> ! $$ a = \phi $$ @end tex @end copying @node Top @top Top node @insertcopying @menu * chapter:: @end menu @insertcopying @node chapter @chapter chapter The fundamental equation is @tex $$ 2 a = \dot{\phi} $$ @end tex @insertcopying @bye texi2html-1.82/test/invalid/math_not_closed.texi0000644000175000017500000000021111264347126023672 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename math_no_closed.info @node Top @math{\delta + 2 @chapter Chapter @math{3\delta + 2 @bye texi2html-1.82/test/invalid/verbatim_not_closed.texi0000644000175000017500000000013011264347126024552 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top texte @verbatim some verbatim @ @macro texi2html-1.82/test/invalid/titlepage_not_closed.texi0000644000175000017500000000017511264347126024730 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top texte @titlepage This is in title page @titlepage And still in title page texi2html-1.82/test/invalid/recursive_copying.texi0000644000175000017500000000031711264347126024276 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename recursive_copying.info @copying In copying. @insertcopying @end copying @node Top @top Test recursive copying Test recursive copying. @insertcopying @bye texi2html-1.82/test/invalid/def_cmd_dble.texi0000644000175000017500000000042311264347126023104 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename def_cmd_dble.info @node Top @top Test for double definition commands @deffn func plot (a, b, c, ...) @deffnx func plot2 (a, b, c, ..., d) aaa @end deffn @deffn func aaaa args @defvr c--ategory d--efvr_name bbb @end deffn @bye texi2html-1.82/test/invalid/Makefile.in0000644000175000017500000002166611264347126021723 0ustar flichtenheldflichtenheld# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = test/invalid DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DATE = @PACKAGE_DATE@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ REQUIRE_DATA_DUMPER = @REQUIRE_DATA_DUMPER@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_DATA_DUMPER = @USE_DATA_DUMPER@ USE_UNICODE = @USE_UNICODE@ USE_UNIDECODE = @USE_UNIDECODE@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ am__leading_dot = @am__leading_dot@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = brace_not_closed.texi recursive_copying.texi \ bad_nesting.texi code_not_closed.texi formats_not_closed.texi \ commands_not_closed.texi math_not_closed.texi not_closed_in_menu.texi \ macro_call_not_closed.texi macro_def_not_closed.texi ignored_not_closed.texi \ verb_not_closed.texi tex_not_closed.texi html_not_closed.texi \ verbatim_not_closed.texi copying_not_closed.texi node_in_copying.texi \ tex_in_copying.texi titlepage_not_closed.texi footnote_not_closed.texi \ caption_not_closed.texi def_cmd_dble.texi style_not_closed_in_table_line.texi \ style_not_closed_in_cartouche.texi multitable_too_much_col.texi \ tests.txt res DISTCLEANFILES = l2h_tmp_dir.init tests.log tests.out all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/invalid/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu test/invalid/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-exec-am: install-html: install-html-am install-info: install-info-am install-man: install-pdf: install-pdf-am install-ps: install-ps-am installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic dist-hook \ distclean distclean-generic distclean-local distdir dvi dvi-am \ html html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am distclean-local: rm -rf out diffs dist-hook: rm -rf `find $(distdir)/res -name CVS` # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: texi2html-1.82/test/invalid/style_not_closed_in_table_line.texi0000644000175000017500000000033611264347126026755 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename style_not_closed_in_table_line.info @node Top @top Test command not closed on table line @table @asis @item first item line line @code{in code @item in item @end table @bye texi2html-1.82/test/invalid/caption_not_closed.texi0000644000175000017500000000057511264347126024413 0ustar flichtenheldflichtenheld\input texinfo.tex @c -*-texinfo-*- @setfilename caption_not_closed.info @node Top @top Test caption not closed @float Text No label but caption. @caption{Not closed caption The caption trigger a keep_texi, so everything until the end of the file is in the caption. Also the caption is formatted twice which leads to 2 error messages. @end float @listoffloats Text @bye texi2html-1.82/test/invalid/code_not_closed.texi0000644000175000017500000000031711264347126023662 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @settitle code_not_closed @node Top @top Missing closing bracket @menu * chapter:: @end menu @code{not closed @node chapter @chapter chapter @code{still not closed @bye texi2html-1.82/test/invalid/res/0000755000175000017500000000000011264347126020434 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/multitable_too_much_col/0000755000175000017500000000000011264347126025330 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/multitable_too_much_col/multitable_too_much_col.html0000644000175000017500000000420211264347126033110 0ustar flichtenheldflichtenheld Untitled Document

    test multitable with too much cells

    a
    a1
    a2
    a3
    firstsecond
    first1
    first2second2

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/invalid/res/multitable_too_much_col/multitable_too_much_col.20000644000175000017500000000146211264347126032312 0ustar flichtenheldflichtenheld** empty multitable (l. 7) ** @item in empty multitable (l. 8) ** @tab in empty multitable (l. 8) ** @tab in empty multitable (l. 8) ** @item in empty multitable (l. 9) ** too much @tab (multitable has only 1 column(s)) (l. 13) ** too much @tab (multitable has only 1 column(s)) (l. 13) ** too much @tab (multitable has only 1 column(s)) (l. 13) ** too much @tab (multitable has only 1 column(s)) (l. 15) ** too much @tab (multitable has only 1 column(s)) (l. 15) ** too much @tab (multitable has only 1 column(s)) (l. 15) ** too much @tab (multitable has only 1 column(s)) (l. 16) ** too much @tab (multitable has only 2 column(s)) (l. 20) ** too much @tab (multitable has only 2 column(s)) (l. 20) ** too much @tab (multitable has only 2 column(s)) (l. 20) ** too much @tab (multitable has only 2 column(s)) (l. 22) texi2html-1.82/test/invalid/res/node_in_copying/0000755000175000017500000000000011264347126023577 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/node_in_copying/node_in_copying.20000644000175000017500000000000011264347126027013 0ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/node_in_copying/node_in_copying.html0000644000175000017500000000376211264347126027640 0ustar flichtenheldflichtenheld Untitled Document

    Top section

    This is an unterminatted copyright notice

    This is a manual testing @node appearing within an unterminated @copying.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/invalid/res/commands_not_closed/0000755000175000017500000000000011264347126024446 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/commands_not_closed/commands_not_closed.20000644000175000017500000000021511264347126030541 0ustar flichtenheldflichtenheld** closing @-command anchor (l. 17) ** closing @-command ref (l. 25) ** closing @-command math (l. 28) ** closing @-command footnote (l. 34) texi2html-1.82/test/invalid/res/commands_not_closed/commands_not_closed.html0000644000175000017500000002570011264347126031352 0ustar flichtenheldflichtenheld Untitled Document
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    &e acute;

    1. Chapter 1


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. Chapter 2

    See my anchor, and an anchor, and footnote anchor


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. Chapter 3

    an anchor


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4. Chapter 4

    A


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5. Chapter 5

    Footnote(1)


    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)

    Footnote


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/invalid/res/verb_not_closed/0000755000175000017500000000000011264347126023603 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/verb_not_closed/verb_not_closed.20000644000175000017500000000003111264347126027027 0ustar flichtenheldflichtenheld** closing @verb (l. 11) texi2html-1.82/test/invalid/res/verb_not_closed/verb_not_closed.html0000644000175000017500000000352611264347126027646 0ustar flichtenheldflichtenheld Untitled Document

    Top

    texte

    In verb

    *


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/invalid/res/math_not_closed/0000755000175000017500000000000011264347126023576 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/math_not_closed/math_not_closed_l2h.html0000644000175000017500000000235111264347126030374 0ustar flichtenheldflichtenheld math_not_closed_l2h $\delta + 2
$ $3\delta + 2
@bye
$

    texi2html-1.82/test/invalid/res/math_not_closed/math_not_closed_l2h_labels.pl0000644000175000017500000000021011264347126031355 0ustar flichtenheldflichtenheld# LaTeX2HTML # Associate labels original text with physical files. 1; # LaTeX2HTML # labels from external_latex_labels array. 1; texi2html-1.82/test/invalid/res/math_not_closed/math_not_closed_l2h.tex0000644000175000017500000000074511264347126030235 0ustar flichtenheldflichtenheld% This document was automatically generated by the l2h extenstion of texi2html % DO NOT EDIT !!! \documentclass{article} \usepackage{html} \begin{document} \begin{rawhtml} \end{rawhtml} $\delta + 2 $ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $3\delta + 2 @bye $ \begin{rawhtml} \end{rawhtml} \end{document} texi2html-1.82/test/invalid/res/math_not_closed/math_not_closed_l2h_images.tex0000644000175000017500000001433711264347126031564 0ustar flichtenheldflichtenheld\batchmode \documentclass{article} \RequirePackage{ifthen} \usepackage{html} \usepackage[dvips]{color} \pagecolor[gray]{.7} \usepackage[]{inputenc} \makeatletter \makeatletter \count@=\the\catcode`\_ \catcode`\_=8 \newenvironment{tex2html_wrap}{}{}% \catcode`\<=12\catcode`\_=\count@ \newcommand{\providedcommand}[1]{\expandafter\providecommand\csname #1\endcsname}% \newcommand{\renewedcommand}[1]{\expandafter\providecommand\csname #1\endcsname{}% \expandafter\renewcommand\csname #1\endcsname}% \newcommand{\newedenvironment}[1]{\newenvironment{#1}{}{}\renewenvironment{#1}}% \let\newedcommand\renewedcommand \let\renewedenvironment\newedenvironment \makeatother \let\mathon=$ \let\mathoff=$ \ifx\AtBeginDocument\undefined \newcommand{\AtBeginDocument}[1]{}\fi \newbox\sizebox \setlength{\hoffset}{0pt}\setlength{\voffset}{0pt} \addtolength{\textheight}{\footskip}\setlength{\footskip}{0pt} \addtolength{\textheight}{\topmargin}\setlength{\topmargin}{0pt} \addtolength{\textheight}{\headheight}\setlength{\headheight}{0pt} \addtolength{\textheight}{\headsep}\setlength{\headsep}{0pt} \setlength{\textwidth}{451pt} \setlength{\textheight}{554pt} \newwrite\lthtmlwrite \makeatletter \let\realnormalsize=\normalsize \global\topskip=2sp \def\preveqno{}\let\real@float=\@float \let\realend@float=\end@float \def\@float{\let\@savefreelist\@freelist\real@float} \def\liih@math{\ifmmode$\else\bad@math\fi} \def\end@float{\realend@float\global\let\@freelist\@savefreelist} \let\real@dbflt=\@dbflt \let\end@dblfloat=\end@float \let\@largefloatcheck=\relax \let\if@boxedmulticols=\iftrue \def\@dbflt{\let\@savefreelist\@freelist\real@dbflt} \def\adjustnormalsize{\def\normalsize{\mathsurround=0pt \realnormalsize \parindent=0pt\abovedisplayskip=0pt\belowdisplayskip=0pt}% \def\phantompar{\csname par\endcsname}\normalsize}% \def\lthtmltypeout#1{{\let\protect\string \immediate\write\lthtmlwrite{#1}}}% \newcommand\lthtmlhboxmathA{\adjustnormalsize\setbox\sizebox=\hbox\bgroup\kern.05em }% \newcommand\lthtmlhboxmathB{\adjustnormalsize\setbox\sizebox=\hbox to\hsize\bgroup\hfill }% \newcommand\lthtmlvboxmathA{\adjustnormalsize\setbox\sizebox=\vbox\bgroup % \let\ifinner=\iffalse \let\)\liih@math }% \newcommand\lthtmlboxmathZ{\@next\next\@currlist{}{\def\next{\voidb@x}}% \expandafter\box\next\egroup}% \newcommand\lthtmlmathtype[1]{\gdef\lthtmlmathenv{#1}}% \newcommand\lthtmllogmath{\dimen0\ht\sizebox \advance\dimen0\dp\sizebox \ifdim\dimen0>.95\vsize \lthtmltypeout{% *** image for \lthtmlmathenv\space is too tall at \the\dimen0, reducing to .95 vsize ***}% \ht\sizebox.95\vsize \dp\sizebox\z@ \fi \lthtmltypeout{l2hSize % :\lthtmlmathenv:\the\ht\sizebox::\the\dp\sizebox::\the\wd\sizebox.\preveqno}}% \newcommand\lthtmlfigureA[1]{\let\@savefreelist\@freelist \lthtmlmathtype{#1}\lthtmlvboxmathA}% \newcommand\lthtmlpictureA{\bgroup\catcode`\_=8 \lthtmlpictureB}% \newcommand\lthtmlpictureB[1]{\lthtmlmathtype{#1}\egroup \let\@savefreelist\@freelist \lthtmlhboxmathB}% \newcommand\lthtmlpictureZ[1]{\hfill\lthtmlfigureZ}% \newcommand\lthtmlfigureZ{\lthtmlboxmathZ\lthtmllogmath\copy\sizebox \global\let\@freelist\@savefreelist}% \newcommand\lthtmldisplayA{\bgroup\catcode`\_=8 \lthtmldisplayAi}% \newcommand\lthtmldisplayAi[1]{\lthtmlmathtype{#1}\egroup\lthtmlvboxmathA}% \newcommand\lthtmldisplayB[1]{\edef\preveqno{(\theequation)}% \lthtmldisplayA{#1}\let\@eqnnum\relax}% \newcommand\lthtmldisplayZ{\lthtmlboxmathZ\lthtmllogmath\lthtmlsetmath}% \newcommand\lthtmlinlinemathA{\bgroup\catcode`\_=8 \lthtmlinlinemathB} \newcommand\lthtmlinlinemathB[1]{\lthtmlmathtype{#1}\egroup\lthtmlhboxmathA \vrule height1.5ex width0pt }% \newcommand\lthtmlinlineA{\bgroup\catcode`\_=8 \lthtmlinlineB}% \newcommand\lthtmlinlineB[1]{\lthtmlmathtype{#1}\egroup\lthtmlhboxmathA}% \newcommand\lthtmlinlineZ{\egroup\expandafter\ifdim\dp\sizebox>0pt % \expandafter\centerinlinemath\fi\lthtmllogmath\lthtmlsetinline} \newcommand\lthtmlinlinemathZ{\egroup\expandafter\ifdim\dp\sizebox>0pt % \expandafter\centerinlinemath\fi\lthtmllogmath\lthtmlsetmath} \newcommand\lthtmlindisplaymathZ{\egroup % \centerinlinemath\lthtmllogmath\lthtmlsetmath} \def\lthtmlsetinline{\hbox{\vrule width.1em \vtop{\vbox{% \kern.1em\copy\sizebox}\ifdim\dp\sizebox>0pt\kern.1em\else\kern.3pt\fi \ifdim\hsize>\wd\sizebox \hrule depth1pt\fi}}} \def\lthtmlsetmath{\hbox{\vrule width.1em\kern-.05em\vtop{\vbox{% \kern.1em\kern0.75 pt\hbox{\hglue.17em\copy\sizebox\hglue0.75 pt}}\kern.3pt% \ifdim\dp\sizebox>0pt\kern.1em\fi \kern0.75 pt% \ifdim\hsize>\wd\sizebox \hrule depth1pt\fi}}} \def\centerinlinemath{% \dimen1=\ifdim\ht\sizebox<\dp\sizebox \dp\sizebox\else\ht\sizebox\fi \advance\dimen1by.5pt \vrule width0pt height\dimen1 depth\dimen1 \dp\sizebox=\dimen1\ht\sizebox=\dimen1\relax} \def\lthtmlcheckvsize{\ifdim\ht\sizebox<\vsize \ifdim\wd\sizebox<\hsize\expandafter\hfill\fi \expandafter\vfill \else\expandafter\vss\fi}% \providecommand{\selectlanguage}[1]{}% \makeatletter \tracingstats = 1 \begin{document} \pagestyle{empty}\thispagestyle{empty}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength hsize=\the\hsize}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength vsize=\the\vsize}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength hoffset=\the\hoffset}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength voffset=\the\voffset}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength topmargin=\the\topmargin}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength topskip=\the\topskip}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength headheight=\the\headheight}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength headsep=\the\headsep}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength parskip=\the\parskip}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength oddsidemargin=\the\oddsidemargin}\lthtmltypeout{}% \makeatletter \if@twoside\lthtmltypeout{latex2htmlLength evensidemargin=\the\evensidemargin}% \else\lthtmltypeout{latex2htmlLength evensidemargin=\the\oddsidemargin}\fi% \lthtmltypeout{}% \makeatother \setcounter{page}{1} \onecolumn % !!! IMAGES START HERE !!! {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline5}% $\delta + 2 $% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline7}% $3\delta + 2 @bye $% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} \end{document} texi2html-1.82/test/invalid/res/math_not_closed/math_not_closed.html0000644000175000017500000000415411264347126027632 0ustar flichtenheldflichtenheld Untitled Document

    $\delta + 2
$

    1. Chapter

    $3\delta + 2
@bye
$


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/invalid/res/math_not_closed/math_not_closed.20000644000175000017500000000016411264347126027024 0ustar flichtenheldflichtenheld*** Closing specially handled @-command math (l. 8) *** Closing specially handled @-command math (l. 11) texexpand texi2html-1.82/test/invalid/res/math_not_closed/math_not_closed-l2h_cache.pm0000644000175000017500000000070311264347126031104 0ustar flichtenheldflichtenheld $l2h_cache_key = q/$3\delta + 2 @bye $/; $l2h_cache{$l2h_cache_key} = q| $3\delta + 2
@bye
$|; $l2h_cache_key = q/$\delta + 2 $/; $l2h_cache{$l2h_cache_key} = q|$\delta + 2
$|; 1;texi2html-1.82/test/invalid/res/math_not_closed/math_not_closed_l2h_images.pl0000644000175000017500000000070611264347126031372 0ustar flichtenheldflichtenheld# LaTeX2HTML # Associate images original text with physical files. $key = q/3delta+2@bye;MSF=1.5;AAT/; $cached_env_img{$key} = q|$3\delta + 2
@bye
$|; $key = q/delta+2;MSF=1.5;AAT/; $cached_env_img{$key} = q|$\delta + 2
$|; 1; texi2html-1.82/test/invalid/res/texi_tex_in_copying/0000755000175000017500000000000011264347126024503 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/texi_tex_in_copying/tex_in_copying.texi0000644000175000017500000000064511264347126030421 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename tex_in_copying.info @copying Some equation is indeed needed to understand the copyright of that file @tex From @ someone <> ! $$ a = \phi $$ @end tex @end copying @node Top @top Top node @insertcopying @menu * chapter:: @end menu @insertcopying @node chapter @chapter chapter The fundamental equation is @tex $$ 2 a = \dot{\phi} $$ @end tex @insertcopying @bye texi2html-1.82/test/invalid/res/texi_tex_in_copying/tex_in_copying_l2h.tex0000644000175000017500000000075211264347126031014 0ustar flichtenheldflichtenheld% This document was automatically generated by the l2h extenstion of texi2html % DO NOT EDIT !!! \documentclass{article} \usepackage{html} \begin{document} \begin{rawhtml} \end{rawhtml} From @ someone <> ! $$ a = \phi $$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $$ 2 a = \dot{\phi} $$ \begin{rawhtml} \end{rawhtml} texi2html-1.82/test/invalid/res/texi_tex_in_copying/tex_in_copying.20000644000175000017500000000000011264347126027572 0ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/texi_tex_in_copying/tex_in_copying.passfirst0000644000175000017500000000154611264347126031467 0ustar flichtenheldflichtenheldtex_in_copying.texi(,2) tex_in_copying.texi(,3) @setfilename tex_in_copying.info tex_in_copying.texi(,4) tex_in_copying.texi(,16) tex_in_copying.texi(,17) tex_in_copying.texi(,18) @node Top tex_in_copying.texi(,19) @top Top node tex_in_copying.texi(,20) tex_in_copying.texi(,21) @insertcopying tex_in_copying.texi(,22) tex_in_copying.texi(,23) @menu tex_in_copying.texi(,24) * chapter:: tex_in_copying.texi(,25) @end menu tex_in_copying.texi(,26) tex_in_copying.texi(,27) @insertcopying tex_in_copying.texi(,28) tex_in_copying.texi(,29) @node chapter tex_in_copying.texi(,30) @chapter chapter tex_in_copying.texi(,31) tex_in_copying.texi(,32) The fundamental equation is tex_in_copying.texi(,37) @special_tex_2{} tex_in_copying.texi(,38) tex_in_copying.texi(,39) @insertcopying tex_in_copying.texi(,40) tex_in_copying.texi(,41) tex_in_copying.texi(,42) @bye texi2html-1.82/test/invalid/res/texi_tex_in_copying/tex_in_copying.passtexi0000644000175000017500000000257611264347126031315 0ustar flichtenheldflichtenheldtex_in_copying.texi(,2) tex_in_copying.texi(,3) @setfilename tex_in_copying.info tex_in_copying.texi(,4) tex_in_copying.texi(,5) @copying tex_in_copying.texi(,6) Some equation is indeed needed to understand the copyright of tex_in_copying.texi(,7) that file tex_in_copying.texi(,8) @tex tex_in_copying.texi(,9) From @ someone <> ! tex_in_copying.texi(,10) $$ tex_in_copying.texi(,11) a = \phi tex_in_copying.texi(,12) $$ tex_in_copying.texi(,13) @end tex tex_in_copying.texi(,14) tex_in_copying.texi(,15) @end copying tex_in_copying.texi(,16) tex_in_copying.texi(,17) tex_in_copying.texi(,18) @node Top tex_in_copying.texi(,19) @top Top node tex_in_copying.texi(,20) tex_in_copying.texi(,21) @insertcopying tex_in_copying.texi(,22) tex_in_copying.texi(,23) @menu tex_in_copying.texi(,24) * chapter:: tex_in_copying.texi(,25) @end menu tex_in_copying.texi(,26) tex_in_copying.texi(,27) @insertcopying tex_in_copying.texi(,28) tex_in_copying.texi(,29) @node chapter tex_in_copying.texi(,30) @chapter chapter tex_in_copying.texi(,31) tex_in_copying.texi(,32) The fundamental equation is tex_in_copying.texi(,33) @tex tex_in_copying.texi(,34) $$ tex_in_copying.texi(,35) 2 a = \dot{\phi} tex_in_copying.texi(,36) $$ tex_in_copying.texi(,37) @end tex tex_in_copying.texi(,38) tex_in_copying.texi(,39) @insertcopying tex_in_copying.texi(,40) tex_in_copying.texi(,41) tex_in_copying.texi(,42) @bye texi2html-1.82/test/invalid/res/texi_caption_not_closed/0000755000175000017500000000000011264347126025333 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/texi_caption_not_closed/caption_not_closed.passtexi0000644000175000017500000000162211264347126032764 0ustar flichtenheldflichtenheldcaption_not_closed.texi(,2) caption_not_closed.texi(,3) @setfilename caption_not_closed.info caption_not_closed.texi(,4) caption_not_closed.texi(,5) @node Top caption_not_closed.texi(,6) @top Test caption not closed caption_not_closed.texi(,7) caption_not_closed.texi(,8) @float Text caption_not_closed.texi(,9) No label but caption. caption_not_closed.texi(,10) caption_not_closed.texi(,11) @caption{Not closed caption caption_not_closed.texi(,12) caption_not_closed.texi(,13) The caption trigger a keep_texi, so everything until the end of the file caption_not_closed.texi(,14) is in the caption. Also the caption is formatted twice which leads to 2 caption_not_closed.texi(,15) error messages. caption_not_closed.texi(,16) caption_not_closed.texi(,17) @end float caption_not_closed.texi(,18) caption_not_closed.texi(,19) @listoffloats Text caption_not_closed.texi(,20) caption_not_closed.texi(,21) @bye texi2html-1.82/test/invalid/res/texi_caption_not_closed/caption_not_closed.20000644000175000017500000000000011264347126031252 0ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/texi_caption_not_closed/caption_not_closed.passfirst0000644000175000017500000000162211264347126033142 0ustar flichtenheldflichtenheldcaption_not_closed.texi(,2) caption_not_closed.texi(,3) @setfilename caption_not_closed.info caption_not_closed.texi(,4) caption_not_closed.texi(,5) @node Top caption_not_closed.texi(,6) @top Test caption not closed caption_not_closed.texi(,7) caption_not_closed.texi(,8) @float Text caption_not_closed.texi(,9) No label but caption. caption_not_closed.texi(,10) caption_not_closed.texi(,11) @caption{Not closed caption caption_not_closed.texi(,12) caption_not_closed.texi(,13) The caption trigger a keep_texi, so everything until the end of the file caption_not_closed.texi(,14) is in the caption. Also the caption is formatted twice which leads to 2 caption_not_closed.texi(,15) error messages. caption_not_closed.texi(,16) caption_not_closed.texi(,17) @end float caption_not_closed.texi(,18) caption_not_closed.texi(,19) @listoffloats Text caption_not_closed.texi(,20) caption_not_closed.texi(,21) @bye texi2html-1.82/test/invalid/res/texi_caption_not_closed/caption_not_closed.texi0000644000175000017500000000057511264347126032103 0ustar flichtenheldflichtenheld\input texinfo.tex @c -*-texinfo-*- @setfilename caption_not_closed.info @node Top @top Test caption not closed @float Text No label but caption. @caption{Not closed caption The caption trigger a keep_texi, so everything until the end of the file is in the caption. Also the caption is formatted twice which leads to 2 error messages. @end float @listoffloats Text @bye texi2html-1.82/test/invalid/res/code_not_closed/0000755000175000017500000000000011264347126023557 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/code_not_closed/code_not_closed.html0000644000175000017500000001451011264347126027571 0ustar flichtenheldflichtenheld code_not_closed
    [Top] [Contents] [Index] [ ? ]

    Missing closing bracket

    not closed


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. chapter

    still not closed


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/invalid/res/code_not_closed/code_not_closed.20000644000175000017500000000000011264347126026753 0ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/style_not_closed_in_cartouche/0000755000175000017500000000000011264347126026530 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/style_not_closed_in_cartouche/style_not_closed_in_cartouche.html0000644000175000017500000000371611264347126035521 0ustar flichtenheldflichtenheld Untitled Document

    Test command not closed in cartouche

    cartouche in code


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/invalid/res/style_not_closed_in_cartouche/style_not_closed_in_cartouche.20000644000175000017500000000005711264347126034711 0ustar flichtenheldflichtenheld*** Closing format cartouche, got code (l. 10) texi2html-1.82/test/invalid/res/not_closed_in_menu/0000755000175000017500000000000011264347126024277 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/not_closed_in_menu/not_closed_in_menu.20000644000175000017500000000062411264347126030227 0ustar flichtenheldflichtenheld*** waiting for end of table, found @end menu (l. 9) *** closing `table' (l. 9) *** waiting for end of table, found @end menu (l. 20) *** closing `table' (l. 20) *** waiting for end of definition command, found @end menu (l. 26) *** closing `deffn' (l. 26) *** closing `menu' (l. 32) *** closing `menu' (l. 32) *** Too many menu closed (l. 32) *** closing `menu' (l. 32) *** Too many menu closed (l. 32) texi2html-1.82/test/invalid/res/not_closed_in_menu/not_closed_in_menu.html0000644000175000017500000000630711264347126031036 0ustar flichtenheldflichtenheld Untitled Document

    Top

    text
    - item

    table line

    Some text.

    before deff
    bidule: truc chose

    deffn text

    After menu


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/invalid/res/footnote_not_closed/0000755000175000017500000000000011264347126024502 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/footnote_not_closed/footnote_not_closed.20000644000175000017500000000014511264347126030633 0ustar flichtenheldflichtenheld** closing @-command footnote (l. 17) ** closing @-command footnote (l. 25) *** closing `quotation' texi2html-1.82/test/invalid/res/footnote_not_closed/footnote_not_closed.html0000644000175000017500000002050011264347126031433 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Top section

    texte(1)


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter

    In chapter(2)


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. Chapter2


    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)

    We have a footnote.

    This is an important footnote.

    (2)

    Another footnote

    In a quotation


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/invalid/res/texi_macro_call_not_closed/0000755000175000017500000000000011264347126025772 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/texi_macro_call_not_closed/macro_call_not_closed.passfirst0000644000175000017500000000043311264347126034237 0ustar flichtenheldflichtenheldmacro_call_not_closed.texi(,2) macro_call_not_closed.texi(,6) macro_call_not_closed.texi(,7) @node Top macro_call_not_closed.texi(,8) macro_call_not_closed.texi(,9) after end macro macro_call_not_closed.texi(,10) macro_call_not_closed.texi(,11) macro_call_not_closed.texi(,12) texi2html-1.82/test/invalid/res/texi_macro_call_not_closed/macro_call_not_closed.texi0000644000175000017500000000010011264347126033161 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top after end macro texi2html-1.82/test/invalid/res/texi_macro_call_not_closed/macro_call_not_closed.20000644000175000017500000000013211264347126032356 0ustar flichtenheldflichtenheld** closing macro1 (3 braces missing) (l. 15) ** closing macro1 (3 braces missing) (l. 15) texi2html-1.82/test/invalid/res/texi_macro_call_not_closed/macro_call_not_closed.passtexi0000644000175000017500000000043311264347126034061 0ustar flichtenheldflichtenheldmacro_call_not_closed.texi(,2) macro_call_not_closed.texi(,6) macro_call_not_closed.texi(,7) @node Top macro_call_not_closed.texi(,8) macro_call_not_closed.texi(,9) after end macro macro_call_not_closed.texi(,10) macro_call_not_closed.texi(,11) macro_call_not_closed.texi(,12) texi2html-1.82/test/invalid/res/texi_math_not_closed/0000755000175000017500000000000011264347126024627 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/texi_math_not_closed/math_not_closed.texi0000644000175000017500000000021111264347126030656 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename math_no_closed.info @node Top @math{\delta + 2 @chapter Chapter @math{3\delta + 2 @bye texi2html-1.82/test/invalid/res/texi_math_not_closed/math_not_closed.passfirst0000644000175000017500000000050711264347126031733 0ustar flichtenheldflichtenheldmath_not_closed.texi(,2) math_not_closed.texi(,3) @setfilename math_no_closed.info math_not_closed.texi(,4) math_not_closed.texi(,5) @node Top math_not_closed.texi(,6) math_not_closed.texi(,7) @special_math_1{} math_not_closed.texi(,8) @chapter Chapter math_not_closed.texi(,9) math_not_closed.texi(,10) @special_math_2{} texi2html-1.82/test/invalid/res/texi_math_not_closed/math_not_closed.passtexi0000644000175000017500000000054511264347126031557 0ustar flichtenheldflichtenheldmath_not_closed.texi(,2) math_not_closed.texi(,3) @setfilename math_no_closed.info math_not_closed.texi(,4) math_not_closed.texi(,5) @node Top math_not_closed.texi(,6) math_not_closed.texi(,7) @math{\delta + 2 math_not_closed.texi(,8) @chapter Chapter math_not_closed.texi(,9) math_not_closed.texi(,10) @math{3\delta + 2 math_not_closed.texi(,11) @bye texi2html-1.82/test/invalid/res/texi_math_not_closed/math_not_closed_l2h.tex0000644000175000017500000000072611264347126031265 0ustar flichtenheldflichtenheld% This document was automatically generated by the l2h extenstion of texi2html % DO NOT EDIT !!! \documentclass{article} \usepackage{html} \begin{document} \begin{rawhtml} \end{rawhtml} $\delta + 2 $ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $3\delta + 2 @bye $ \begin{rawhtml} \end{rawhtml} texi2html-1.82/test/invalid/res/texi_math_not_closed/math_not_closed.20000644000175000017500000000032211264347126030051 0ustar flichtenheldflichtenheld*** Closing specially handled @-command math (l. 8) *** Closing specially handled @-command math (l. 11) *** Closing specially handled @-command math (l. 8) *** Closing specially handled @-command math (l. 11) texi2html-1.82/test/invalid/res/texi_tex_not_closed/0000755000175000017500000000000011264347126024476 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/texi_tex_not_closed/tex_not_closed.20000644000175000017500000000010611264347126027567 0ustar flichtenheldflichtenheld** closing @tex raw format (l. 10) ** closing @tex raw format (l. 10) texi2html-1.82/test/invalid/res/texi_tex_not_closed/tex_not_closed.texi0000644000175000017500000000013011264347126030374 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top texte @tex This is some \LaTeX{} @end textexi2html-1.82/test/invalid/res/texi_tex_not_closed/tex_not_closed_l2h.tex0000644000175000017500000000047511264347126031004 0ustar flichtenheldflichtenheld% This document was automatically generated by the l2h extenstion of texi2html % DO NOT EDIT !!! \documentclass{article} \usepackage{html} \begin{document} \begin{rawhtml} \end{rawhtml} This is some \LaTeX{} \begin{rawhtml} \end{rawhtml} texi2html-1.82/test/invalid/res/texi_tex_not_closed/tex_not_closed.passfirst0000644000175000017500000000024611264347126031451 0ustar flichtenheldflichtenheldtex_not_closed.texi(,2) tex_not_closed.texi(,3) @node Top tex_not_closed.texi(,4) tex_not_closed.texi(,5) texte tex_not_closed.texi(,6) no file(,) @special_tex_1{}texi2html-1.82/test/invalid/res/texi_tex_not_closed/tex_not_closed.passtexi0000644000175000017500000000043411264347126031272 0ustar flichtenheldflichtenheldtex_not_closed.texi(,2) tex_not_closed.texi(,3) @node Top tex_not_closed.texi(,4) tex_not_closed.texi(,5) texte tex_not_closed.texi(,6) tex_not_closed.texi(,7) @tex tex_not_closed.texi(,8) tex_not_closed.texi(,9) This is some \LaTeX{} tex_not_closed.texi(,10) no file(,) @end textexi2html-1.82/test/invalid/res/tex_in_copying/0000755000175000017500000000000011264347126023452 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/tex_in_copying/tex_in_copying_l2h_labels.pl0000644000175000017500000000021011264347126031105 0ustar flichtenheldflichtenheld# LaTeX2HTML # Associate labels original text with physical files. 1; # LaTeX2HTML # labels from external_latex_labels array. 1; texi2html-1.82/test/invalid/res/tex_in_copying/tex_in_copying-l2h_cache.pm0000644000175000017500000000136411264347126030640 0ustar flichtenheldflichtenheld $l2h_cache_key = q/$$ 2 a = \dot{\phi} $$/; $l2h_cache{$l2h_cache_key} = q|

    \begin{displaymath}
2 a = \dot{\phi}
\end{displaymath}

    |; $l2h_cache_key = q/From @ someone <> ! $$ a = \phi $$/; $l2h_cache{$l2h_cache_key} = q|From @ someone <> !

    \begin{displaymath}
a = \phi
\end{displaymath}

    |; 1;texi2html-1.82/test/invalid/res/tex_in_copying/tex_in_copying_l2h_images.pl0000644000175000017500000000103311264347126031114 0ustar flichtenheldflichtenheld# LaTeX2HTML # Associate images original text with physical files. $key = q/{displaymath}2a=dot{phi}{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}
2 a = \dot{\phi}
\end{displaymath}|; $key = q/{displaymath}a=phi{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}
a = \phi
\end{displaymath}|; 1; texi2html-1.82/test/invalid/res/tex_in_copying/tex_in_copying_l2h.tex0000644000175000017500000000077111264347126027764 0ustar flichtenheldflichtenheld% This document was automatically generated by the l2h extenstion of texi2html % DO NOT EDIT !!! \documentclass{article} \usepackage{html} \begin{document} \begin{rawhtml} \end{rawhtml} From @ someone <> ! $$ a = \phi $$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $$ 2 a = \dot{\phi} $$ \begin{rawhtml} \end{rawhtml} \end{document} texi2html-1.82/test/invalid/res/tex_in_copying/tex_in_copying.html0000644000175000017500000001741111264347126027362 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Top node

    Some equation is indeed needed to understand the copyright of that file From @ someone <> !

    \begin{displaymath}
a = \phi
\end{displaymath}

    Some equation is indeed needed to understand the copyright of that file From @ someone <> !

    \begin{displaymath}
a = \phi
\end{displaymath}


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. chapter

    The fundamental equation is

    \begin{displaymath}
2 a = \dot{\phi}
\end{displaymath}

    Some equation is indeed needed to understand the copyright of that file From @ someone <> !

    \begin{displaymath}
a = \phi
\end{displaymath}


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/invalid/res/tex_in_copying/tex_in_copying.20000644000175000017500000000001311264347126026545 0ustar flichtenheldflichtenheldtexexpand texi2html-1.82/test/invalid/res/tex_in_copying/tex_in_copying_l2h.html0000644000175000017500000000277211264347126030133 0ustar flichtenheldflichtenheld tex_in_copying_l2h From @ someone <> !

    \begin{displaymath}
a = \phi
\end{displaymath}


    \begin{displaymath}
2 a = \dot{\phi}
\end{displaymath}



    texi2html-1.82/test/invalid/res/tex_in_copying/tex_in_copying_l2h_images.tex0000644000175000017500000001440511264347126031310 0ustar flichtenheldflichtenheld\batchmode \documentclass{article} \RequirePackage{ifthen} \usepackage{html} \usepackage[dvips]{color} \pagecolor[gray]{.7} \usepackage[]{inputenc} \makeatletter \makeatletter \count@=\the\catcode`\_ \catcode`\_=8 \newenvironment{tex2html_wrap}{}{}% \catcode`\<=12\catcode`\_=\count@ \newcommand{\providedcommand}[1]{\expandafter\providecommand\csname #1\endcsname}% \newcommand{\renewedcommand}[1]{\expandafter\providecommand\csname #1\endcsname{}% \expandafter\renewcommand\csname #1\endcsname}% \newcommand{\newedenvironment}[1]{\newenvironment{#1}{}{}\renewenvironment{#1}}% \let\newedcommand\renewedcommand \let\renewedenvironment\newedenvironment \makeatother \let\mathon=$ \let\mathoff=$ \ifx\AtBeginDocument\undefined \newcommand{\AtBeginDocument}[1]{}\fi \newbox\sizebox \setlength{\hoffset}{0pt}\setlength{\voffset}{0pt} \addtolength{\textheight}{\footskip}\setlength{\footskip}{0pt} \addtolength{\textheight}{\topmargin}\setlength{\topmargin}{0pt} \addtolength{\textheight}{\headheight}\setlength{\headheight}{0pt} \addtolength{\textheight}{\headsep}\setlength{\headsep}{0pt} \setlength{\textwidth}{451pt} \setlength{\textheight}{554pt} \newwrite\lthtmlwrite \makeatletter \let\realnormalsize=\normalsize \global\topskip=2sp \def\preveqno{}\let\real@float=\@float \let\realend@float=\end@float \def\@float{\let\@savefreelist\@freelist\real@float} \def\liih@math{\ifmmode$\else\bad@math\fi} \def\end@float{\realend@float\global\let\@freelist\@savefreelist} \let\real@dbflt=\@dbflt \let\end@dblfloat=\end@float \let\@largefloatcheck=\relax \let\if@boxedmulticols=\iftrue \def\@dbflt{\let\@savefreelist\@freelist\real@dbflt} \def\adjustnormalsize{\def\normalsize{\mathsurround=0pt \realnormalsize \parindent=0pt\abovedisplayskip=0pt\belowdisplayskip=0pt}% \def\phantompar{\csname par\endcsname}\normalsize}% \def\lthtmltypeout#1{{\let\protect\string \immediate\write\lthtmlwrite{#1}}}% \newcommand\lthtmlhboxmathA{\adjustnormalsize\setbox\sizebox=\hbox\bgroup\kern.05em }% \newcommand\lthtmlhboxmathB{\adjustnormalsize\setbox\sizebox=\hbox to\hsize\bgroup\hfill }% \newcommand\lthtmlvboxmathA{\adjustnormalsize\setbox\sizebox=\vbox\bgroup % \let\ifinner=\iffalse \let\)\liih@math }% \newcommand\lthtmlboxmathZ{\@next\next\@currlist{}{\def\next{\voidb@x}}% \expandafter\box\next\egroup}% \newcommand\lthtmlmathtype[1]{\gdef\lthtmlmathenv{#1}}% \newcommand\lthtmllogmath{\dimen0\ht\sizebox \advance\dimen0\dp\sizebox \ifdim\dimen0>.95\vsize \lthtmltypeout{% *** image for \lthtmlmathenv\space is too tall at \the\dimen0, reducing to .95 vsize ***}% \ht\sizebox.95\vsize \dp\sizebox\z@ \fi \lthtmltypeout{l2hSize % :\lthtmlmathenv:\the\ht\sizebox::\the\dp\sizebox::\the\wd\sizebox.\preveqno}}% \newcommand\lthtmlfigureA[1]{\let\@savefreelist\@freelist \lthtmlmathtype{#1}\lthtmlvboxmathA}% \newcommand\lthtmlpictureA{\bgroup\catcode`\_=8 \lthtmlpictureB}% \newcommand\lthtmlpictureB[1]{\lthtmlmathtype{#1}\egroup \let\@savefreelist\@freelist \lthtmlhboxmathB}% \newcommand\lthtmlpictureZ[1]{\hfill\lthtmlfigureZ}% \newcommand\lthtmlfigureZ{\lthtmlboxmathZ\lthtmllogmath\copy\sizebox \global\let\@freelist\@savefreelist}% \newcommand\lthtmldisplayA{\bgroup\catcode`\_=8 \lthtmldisplayAi}% \newcommand\lthtmldisplayAi[1]{\lthtmlmathtype{#1}\egroup\lthtmlvboxmathA}% \newcommand\lthtmldisplayB[1]{\edef\preveqno{(\theequation)}% \lthtmldisplayA{#1}\let\@eqnnum\relax}% \newcommand\lthtmldisplayZ{\lthtmlboxmathZ\lthtmllogmath\lthtmlsetmath}% \newcommand\lthtmlinlinemathA{\bgroup\catcode`\_=8 \lthtmlinlinemathB} \newcommand\lthtmlinlinemathB[1]{\lthtmlmathtype{#1}\egroup\lthtmlhboxmathA \vrule height1.5ex width0pt }% \newcommand\lthtmlinlineA{\bgroup\catcode`\_=8 \lthtmlinlineB}% \newcommand\lthtmlinlineB[1]{\lthtmlmathtype{#1}\egroup\lthtmlhboxmathA}% \newcommand\lthtmlinlineZ{\egroup\expandafter\ifdim\dp\sizebox>0pt % \expandafter\centerinlinemath\fi\lthtmllogmath\lthtmlsetinline} \newcommand\lthtmlinlinemathZ{\egroup\expandafter\ifdim\dp\sizebox>0pt % \expandafter\centerinlinemath\fi\lthtmllogmath\lthtmlsetmath} \newcommand\lthtmlindisplaymathZ{\egroup % \centerinlinemath\lthtmllogmath\lthtmlsetmath} \def\lthtmlsetinline{\hbox{\vrule width.1em \vtop{\vbox{% \kern.1em\copy\sizebox}\ifdim\dp\sizebox>0pt\kern.1em\else\kern.3pt\fi \ifdim\hsize>\wd\sizebox \hrule depth1pt\fi}}} \def\lthtmlsetmath{\hbox{\vrule width.1em\kern-.05em\vtop{\vbox{% \kern.1em\kern0.75 pt\hbox{\hglue.17em\copy\sizebox\hglue0.75 pt}}\kern.3pt% \ifdim\dp\sizebox>0pt\kern.1em\fi \kern0.75 pt% \ifdim\hsize>\wd\sizebox \hrule depth1pt\fi}}} \def\centerinlinemath{% \dimen1=\ifdim\ht\sizebox<\dp\sizebox \dp\sizebox\else\ht\sizebox\fi \advance\dimen1by.5pt \vrule width0pt height\dimen1 depth\dimen1 \dp\sizebox=\dimen1\ht\sizebox=\dimen1\relax} \def\lthtmlcheckvsize{\ifdim\ht\sizebox<\vsize \ifdim\wd\sizebox<\hsize\expandafter\hfill\fi \expandafter\vfill \else\expandafter\vss\fi}% \providecommand{\selectlanguage}[1]{}% \makeatletter \tracingstats = 1 \begin{document} \pagestyle{empty}\thispagestyle{empty}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength hsize=\the\hsize}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength vsize=\the\vsize}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength hoffset=\the\hoffset}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength voffset=\the\voffset}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength topmargin=\the\topmargin}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength topskip=\the\topskip}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength headheight=\the\headheight}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength headsep=\the\headsep}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength parskip=\the\parskip}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength oddsidemargin=\the\oddsidemargin}\lthtmltypeout{}% \makeatletter \if@twoside\lthtmltypeout{latex2htmlLength evensidemargin=\the\evensidemargin}% \else\lthtmltypeout{latex2htmlLength evensidemargin=\the\oddsidemargin}\fi% \lthtmltypeout{}% \makeatother \setcounter{page}{1} \onecolumn % !!! IMAGES START HERE !!! {\newpage\clearpage \lthtmldisplayA{displaymath6}% \begin{displaymath} a = \phi \end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath8}% \begin{displaymath} 2 a = \dot{\phi} \end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} \end{document} texi2html-1.82/test/invalid/res/texi_multitable_too_much_col/0000755000175000017500000000000011264347126026361 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/texi_multitable_too_much_col/multitable_too_much_col.passfirst0000644000175000017500000000260411264347126035217 0ustar flichtenheldflichtenheldmultitable_too_much_col.texi(,2) multitable_too_much_col.texi(,3) @node Top multitable_too_much_col.texi(,4) @top test multitable with too much cells multitable_too_much_col.texi(,5) multitable_too_much_col.texi(,6) multitable_too_much_col.texi(,7) @multitable multitable_too_much_col.texi(,8) @item item in empty multitable @tab tab in empty m @tab second tab in empty m multitable_too_much_col.texi(,9) @item item in empty m multitable_too_much_col.texi(,10) @end multitable multitable_too_much_col.texi(,11) multitable_too_much_col.texi(,12) @multitable {a} multitable_too_much_col.texi(,13) @item a @tab additional tab @tab other additional tab @tab 3rd additiona tab multitable_too_much_col.texi(,14) @item a1 multitable_too_much_col.texi(,15) @item a2 @tab additional tab2 @tab other additional tab2 @tab 3rd additional tab2 multitable_too_much_col.texi(,16) @item a3 @tab one additional tab multitable_too_much_col.texi(,17) @end multitable multitable_too_much_col.texi(,18) multitable_too_much_col.texi(,19) @multitable @columnfractions 0.4 0.6 multitable_too_much_col.texi(,20) @item first @tab second @tab first out @tab second out @tab third out multitable_too_much_col.texi(,21) @item first1 multitable_too_much_col.texi(,22) @item first2 @tab second2 @tab first2 out multitable_too_much_col.texi(,23) @end multitable multitable_too_much_col.texi(,24) multitable_too_much_col.texi(,25) @bye texi2html-1.82/test/invalid/res/texi_multitable_too_much_col/multitable_too_much_col.20000644000175000017500000000000011264347126033326 0ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/texi_multitable_too_much_col/multitable_too_much_col.texi0000644000175000017500000000117411264347126034153 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top @top test multitable with too much cells @multitable @item item in empty multitable @tab tab in empty m @tab second tab in empty m @item item in empty m @end multitable @multitable {a} @item a @tab additional tab @tab other additional tab @tab 3rd additiona tab @item a1 @item a2 @tab additional tab2 @tab other additional tab2 @tab 3rd additional tab2 @item a3 @tab one additional tab @end multitable @multitable @columnfractions 0.4 0.6 @item first @tab second @tab first out @tab second out @tab third out @item first1 @item first2 @tab second2 @tab first2 out @end multitable @bye texi2html-1.82/test/invalid/res/texi_multitable_too_much_col/multitable_too_much_col.passtexi0000644000175000017500000000260411264347126035041 0ustar flichtenheldflichtenheldmultitable_too_much_col.texi(,2) multitable_too_much_col.texi(,3) @node Top multitable_too_much_col.texi(,4) @top test multitable with too much cells multitable_too_much_col.texi(,5) multitable_too_much_col.texi(,6) multitable_too_much_col.texi(,7) @multitable multitable_too_much_col.texi(,8) @item item in empty multitable @tab tab in empty m @tab second tab in empty m multitable_too_much_col.texi(,9) @item item in empty m multitable_too_much_col.texi(,10) @end multitable multitable_too_much_col.texi(,11) multitable_too_much_col.texi(,12) @multitable {a} multitable_too_much_col.texi(,13) @item a @tab additional tab @tab other additional tab @tab 3rd additiona tab multitable_too_much_col.texi(,14) @item a1 multitable_too_much_col.texi(,15) @item a2 @tab additional tab2 @tab other additional tab2 @tab 3rd additional tab2 multitable_too_much_col.texi(,16) @item a3 @tab one additional tab multitable_too_much_col.texi(,17) @end multitable multitable_too_much_col.texi(,18) multitable_too_much_col.texi(,19) @multitable @columnfractions 0.4 0.6 multitable_too_much_col.texi(,20) @item first @tab second @tab first out @tab second out @tab third out multitable_too_much_col.texi(,21) @item first1 multitable_too_much_col.texi(,22) @item first2 @tab second2 @tab first2 out multitable_too_much_col.texi(,23) @end multitable multitable_too_much_col.texi(,24) multitable_too_much_col.texi(,25) @bye texi2html-1.82/test/invalid/res/recursive_copying/0000755000175000017500000000000011264347126024173 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/recursive_copying/recursive_copying.html0000644000175000017500000000363111264347126030623 0ustar flichtenheldflichtenheld Untitled Document

    Test recursive copying

    Test recursive copying.

    In copying.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/invalid/res/recursive_copying/recursive_copying.20000644000175000017500000000015211264347126030013 0ustar flichtenheldflichtenheld*** Recursively expanding region copying in copying *** Recursively expanding region copying in copying texi2html-1.82/test/invalid/res/texi_bad_nesting/0000755000175000017500000000000011264347126023742 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/texi_bad_nesting/bad_nesting.20000644000175000017500000000000011264347126026270 0ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/texi_bad_nesting/bad_nesting.passfirst0000644000175000017500000000264011264347126030161 0ustar flichtenheldflichtenheldbad_nesting.texi(,2) bad_nesting.texi(,3) @setfilename bad_nesting.info bad_nesting.texi(,4) bad_nesting.texi(,5) @node Top bad_nesting.texi(,6) @top Test for bad nestings bad_nesting.texi(,7) bad_nesting.texi(,8) Tests for environments not matching bad_nesting.texi(,9) bad_nesting.texi(,10) @quotation bad_nesting.texi(,11) A quotation bad_nesting.texi(,12) @end cartouche bad_nesting.texi(,13) bad_nesting.texi(,14) @deffn {Function Reference} print_navigation $filehandle bad_nesting.texi(,15) Text bad_nesting.texi(,16) @end deftypefun bad_nesting.texi(,17) bad_nesting.texi(,18) @table bad_nesting.texi(,19) @item item bad_nesting.texi(,20) line bad_nesting.texi(,21) @end vtable bad_nesting.texi(,22) bad_nesting.texi(,23) @table @emph bad_nesting.texi(,24) @item ref bad_nesting.texi(,25) @example bad_nesting.texi(,26) example bad_nesting.texi(,27) @end display bad_nesting.texi(,28) @end table bad_nesting.texi(,29) bad_nesting.texi(,30) @group bad_nesting.texi(,31) in group bad_nesting.texi(,32) @end table bad_nesting.texi(,33) bad_nesting.texi(,34) @group bad_nesting.texi(,35) in group 2 bad_nesting.texi(,36) @end cartouche bad_nesting.texi(,37) bad_nesting.texi(,38) @cartouche bad_nesting.texi(,39) cartouche bad_nesting.texi(,40) @end group bad_nesting.texi(,41) bad_nesting.texi(,42) @cartouche bad_nesting.texi(,43) carouche bad_nesting.texi(,44) @end float bad_nesting.texi(,45) bad_nesting.texi(,46) @bye texi2html-1.82/test/invalid/res/texi_bad_nesting/bad_nesting.passtexi0000644000175000017500000000264011264347126030003 0ustar flichtenheldflichtenheldbad_nesting.texi(,2) bad_nesting.texi(,3) @setfilename bad_nesting.info bad_nesting.texi(,4) bad_nesting.texi(,5) @node Top bad_nesting.texi(,6) @top Test for bad nestings bad_nesting.texi(,7) bad_nesting.texi(,8) Tests for environments not matching bad_nesting.texi(,9) bad_nesting.texi(,10) @quotation bad_nesting.texi(,11) A quotation bad_nesting.texi(,12) @end cartouche bad_nesting.texi(,13) bad_nesting.texi(,14) @deffn {Function Reference} print_navigation $filehandle bad_nesting.texi(,15) Text bad_nesting.texi(,16) @end deftypefun bad_nesting.texi(,17) bad_nesting.texi(,18) @table bad_nesting.texi(,19) @item item bad_nesting.texi(,20) line bad_nesting.texi(,21) @end vtable bad_nesting.texi(,22) bad_nesting.texi(,23) @table @emph bad_nesting.texi(,24) @item ref bad_nesting.texi(,25) @example bad_nesting.texi(,26) example bad_nesting.texi(,27) @end display bad_nesting.texi(,28) @end table bad_nesting.texi(,29) bad_nesting.texi(,30) @group bad_nesting.texi(,31) in group bad_nesting.texi(,32) @end table bad_nesting.texi(,33) bad_nesting.texi(,34) @group bad_nesting.texi(,35) in group 2 bad_nesting.texi(,36) @end cartouche bad_nesting.texi(,37) bad_nesting.texi(,38) @cartouche bad_nesting.texi(,39) cartouche bad_nesting.texi(,40) @end group bad_nesting.texi(,41) bad_nesting.texi(,42) @cartouche bad_nesting.texi(,43) carouche bad_nesting.texi(,44) @end float bad_nesting.texi(,45) bad_nesting.texi(,46) @bye texi2html-1.82/test/invalid/res/texi_bad_nesting/bad_nesting.texi0000644000175000017500000000075211264347126027116 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename bad_nesting.info @node Top @top Test for bad nestings Tests for environments not matching @quotation A quotation @end cartouche @deffn {Function Reference} print_navigation $filehandle Text @end deftypefun @table @item item line @end vtable @table @emph @item ref @example example @end display @end table @group in group @end table @group in group 2 @end cartouche @cartouche cartouche @end group @cartouche carouche @end float @bye texi2html-1.82/test/invalid/res/texi_ignored_not_closed/0000755000175000017500000000000011264347126025325 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/texi_ignored_not_closed/ignored_not_closed.passtexi0000644000175000017500000000023711264347126032751 0ustar flichtenheldflichtenheldignored_not_closed.texi(,2) ignored_not_closed.texi(,3) @node Top ignored_not_closed.texi(,4) ignored_not_closed.texi(,5) texte ignored_not_closed.texi(,6) texi2html-1.82/test/invalid/res/texi_ignored_not_closed/ignored_not_closed.passfirst0000644000175000017500000000023711264347126033127 0ustar flichtenheldflichtenheldignored_not_closed.texi(,2) ignored_not_closed.texi(,3) @node Top ignored_not_closed.texi(,4) ignored_not_closed.texi(,5) texte ignored_not_closed.texi(,6) texi2html-1.82/test/invalid/res/texi_ignored_not_closed/ignored_not_closed.20000644000175000017500000000006411264347126031250 0ustar flichtenheldflichtenheld** closing ignore (l. 10) ** closing ignore (l. 10) texi2html-1.82/test/invalid/res/texi_ignored_not_closed/ignored_not_closed.texi0000644000175000017500000000006311264347126032057 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top texte texi2html-1.82/test/invalid/res/texi_recursive_copying/0000755000175000017500000000000011264347126025224 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/texi_recursive_copying/recursive_copying.texi0000644000175000017500000000031711264347126031657 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename recursive_copying.info @copying In copying. @insertcopying @end copying @node Top @top Test recursive copying Test recursive copying. @insertcopying @bye texi2html-1.82/test/invalid/res/texi_recursive_copying/recursive_copying.passtexi0000644000175000017500000000123711264347126032550 0ustar flichtenheldflichtenheldrecursive_copying.texi(,2) recursive_copying.texi(,3) @setfilename recursive_copying.info recursive_copying.texi(,4) recursive_copying.texi(,5) @copying recursive_copying.texi(,6) recursive_copying.texi(,7) In copying. recursive_copying.texi(,8) recursive_copying.texi(,9) @insertcopying recursive_copying.texi(,10) @end copying recursive_copying.texi(,11) recursive_copying.texi(,12) @node Top recursive_copying.texi(,13) @top Test recursive copying recursive_copying.texi(,14) recursive_copying.texi(,15) Test recursive copying. recursive_copying.texi(,16) recursive_copying.texi(,17) @insertcopying recursive_copying.texi(,18) recursive_copying.texi(,19) @bye texi2html-1.82/test/invalid/res/texi_recursive_copying/recursive_copying.passfirst0000644000175000017500000000071111264347126032722 0ustar flichtenheldflichtenheldrecursive_copying.texi(,2) recursive_copying.texi(,3) @setfilename recursive_copying.info recursive_copying.texi(,4) recursive_copying.texi(,11) recursive_copying.texi(,12) @node Top recursive_copying.texi(,13) @top Test recursive copying recursive_copying.texi(,14) recursive_copying.texi(,15) Test recursive copying. recursive_copying.texi(,16) recursive_copying.texi(,17) @insertcopying recursive_copying.texi(,18) recursive_copying.texi(,19) @bye texi2html-1.82/test/invalid/res/texi_recursive_copying/recursive_copying.20000644000175000017500000000000011264347126031034 0ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/copying_not_closed/0000755000175000017500000000000011264347126024315 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/copying_not_closed/copying_not_closed.20000644000175000017500000000005511264347126030261 0ustar flichtenheldflichtenheld** At end of document, 2 copying not closed texi2html-1.82/test/invalid/res/copying_not_closed/copying_not_closed.html0000644000175000017500000000363411264347126031072 0ustar flichtenheldflichtenheld Untitled Document

    Top

    texte

    This is a copyright notice

    And a second one (?)


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/invalid/res/tex_not_closed/0000755000175000017500000000000011264347126023445 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/tex_not_closed/tex_not_closed_l2h_labels.pl0000644000175000017500000000021011264347126031073 0ustar flichtenheldflichtenheld# LaTeX2HTML # Associate labels original text with physical files. 1; # LaTeX2HTML # labels from external_latex_labels array. 1; texi2html-1.82/test/invalid/res/tex_not_closed/tex_not_closed.20000644000175000017500000000005611264347126026542 0ustar flichtenheldflichtenheld** closing @tex raw format (l. 10) texexpand texi2html-1.82/test/invalid/res/tex_not_closed/tex_not_closed-l2h_cache.pm0000644000175000017500000000026111264347126030621 0ustar flichtenheldflichtenheld $l2h_cache_key = q/ This is some \LaTeX{}/; $l2h_cache{$l2h_cache_key} = q|

    This is some LATEX|; 1;texi2html-1.82/test/invalid/res/tex_not_closed/tex_not_closed_l2h.html0000644000175000017500000000166311264347126030117 0ustar flichtenheldflichtenheld tex_not_closed_l2h

    This is some LATEX


    texi2html-1.82/test/invalid/res/tex_not_closed/tex_not_closed.html0000644000175000017500000000360011264347126027343 0ustar flichtenheldflichtenheld Untitled Document

    Top

    texte

    This is some LATEX


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/invalid/res/tex_not_closed/tex_not_closed_l2h.tex0000644000175000017500000000051411264347126027745 0ustar flichtenheldflichtenheld% This document was automatically generated by the l2h extenstion of texi2html % DO NOT EDIT !!! \documentclass{article} \usepackage{html} \begin{document} \begin{rawhtml} \end{rawhtml} This is some \LaTeX{} \begin{rawhtml} \end{rawhtml} \end{document} texi2html-1.82/test/invalid/res/texi_code_not_closed/0000755000175000017500000000000011264347126024610 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/texi_code_not_closed/code_not_closed.texi0000644000175000017500000000031711264347126030627 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @settitle code_not_closed @node Top @top Missing closing bracket @menu * chapter:: @end menu @code{not closed @node chapter @chapter chapter @code{still not closed @bye texi2html-1.82/test/invalid/res/texi_code_not_closed/code_not_closed.passtexi0000644000175000017500000000114111264347126031512 0ustar flichtenheldflichtenheldcode_not_closed.texi(,2) @settitle code_not_closed code_not_closed.texi(,3) code_not_closed.texi(,4) @node Top code_not_closed.texi(,5) @top Missing closing bracket code_not_closed.texi(,6) code_not_closed.texi(,7) @menu code_not_closed.texi(,8) * chapter:: code_not_closed.texi(,9) @end menu code_not_closed.texi(,10) code_not_closed.texi(,11) @code{not closed code_not_closed.texi(,12) code_not_closed.texi(,13) @node chapter code_not_closed.texi(,14) @chapter chapter code_not_closed.texi(,15) code_not_closed.texi(,16) @code{still not closed code_not_closed.texi(,17) code_not_closed.texi(,18) @bye texi2html-1.82/test/invalid/res/texi_code_not_closed/code_not_closed.passfirst0000644000175000017500000000114111264347126031670 0ustar flichtenheldflichtenheldcode_not_closed.texi(,2) @settitle code_not_closed code_not_closed.texi(,3) code_not_closed.texi(,4) @node Top code_not_closed.texi(,5) @top Missing closing bracket code_not_closed.texi(,6) code_not_closed.texi(,7) @menu code_not_closed.texi(,8) * chapter:: code_not_closed.texi(,9) @end menu code_not_closed.texi(,10) code_not_closed.texi(,11) @code{not closed code_not_closed.texi(,12) code_not_closed.texi(,13) @node chapter code_not_closed.texi(,14) @chapter chapter code_not_closed.texi(,15) code_not_closed.texi(,16) @code{still not closed code_not_closed.texi(,17) code_not_closed.texi(,18) @bye texi2html-1.82/test/invalid/res/texi_code_not_closed/code_not_closed.20000644000175000017500000000000011264347126030004 0ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/html_not_closed/0000755000175000017500000000000011264347126023611 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/html_not_closed/html_not_closed.html0000644000175000017500000000351611264347126027661 0ustar flichtenheldflichtenheld Untitled Document

    Top

    texte

    This is some html
    my address

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/invalid/res/html_not_closed/html_not_closed.20000644000175000017500000000004411264347126027047 0ustar flichtenheldflichtenheld** closing @html raw format (l. 13) texi2html-1.82/test/invalid/res/macro_call_not_closed/0000755000175000017500000000000011264347126024741 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/macro_call_not_closed/macro_call_not_closed.20000644000175000017500000000005511264347126031331 0ustar flichtenheldflichtenheld** closing macro1 (3 braces missing) (l. 15) texi2html-1.82/test/invalid/res/macro_call_not_closed/macro_call_not_closed.html0000644000175000017500000000344511264347126032142 0ustar flichtenheldflichtenheld Untitled Document

    Top

    after end macro


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/invalid/res/macro_def_not_closed/0000755000175000017500000000000011264347126024564 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/macro_def_not_closed/macro_def_not_closed.20000644000175000017500000000003111264347126030771 0ustar flichtenheldflichtenheld** closing macro (l. 10) texi2html-1.82/test/invalid/res/macro_def_not_closed/macro_def_not_closed.html0000644000175000017500000000343111264347126031603 0ustar flichtenheldflichtenheld Untitled Document

    Top

    texte


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/invalid/res/texi_verb_not_closed/0000755000175000017500000000000011264347126024634 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/texi_verb_not_closed/verb_not_closed.texi0000644000175000017500000000011111264347126030667 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top texte @verb{* In verb * *}texi2html-1.82/test/invalid/res/texi_verb_not_closed/verb_not_closed.passtexi0000644000175000017500000000046011264347126031565 0ustar flichtenheldflichtenheldverb_not_closed.texi(,2) verb_not_closed.texi(,3) @node Top verb_not_closed.texi(,4) verb_not_closed.texi(,5) texte verb_not_closed.texi(,6) verb_not_closed.texi(,7) @verb{* verb_not_closed.texi(,8) verb_not_closed.texi(,9) In verb verb_not_closed.texi(,10) verb_not_closed.texi(,11) * no file(,) *}texi2html-1.82/test/invalid/res/texi_verb_not_closed/verb_not_closed.passfirst0000644000175000017500000000046011264347126031743 0ustar flichtenheldflichtenheldverb_not_closed.texi(,2) verb_not_closed.texi(,3) @node Top verb_not_closed.texi(,4) verb_not_closed.texi(,5) texte verb_not_closed.texi(,6) verb_not_closed.texi(,7) @verb{* verb_not_closed.texi(,8) verb_not_closed.texi(,9) In verb verb_not_closed.texi(,10) verb_not_closed.texi(,11) * no file(,) *}texi2html-1.82/test/invalid/res/texi_verb_not_closed/verb_not_closed.20000644000175000017500000000006211264347126030064 0ustar flichtenheldflichtenheld** closing @verb (l. 11) ** closing @verb (l. 11) texi2html-1.82/test/invalid/res/formats_not_closed/0000755000175000017500000000000011264347126024320 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/formats_not_closed/formats_not_closed.20000644000175000017500000000062311264347126030270 0ustar flichtenheldflichtenheld*** waiting for end of list or table, found @end example (l. 17) *** closing `enumerate' (l. 17) *** closing `table' (l. 17) *** @end table without corresponding opening element (l. 25) *** closing `multitable' (l. 32) *** closing `multitable' (l. 38) *** closing `multitable' (l. 43) *** closing `defvar' (l. 48) *** closing `deffn' (l. 48) *** closing `flushright' (l. 56) *** closing `group' (l. 64) texi2html-1.82/test/invalid/res/formats_not_closed/formats_not_closed.html0000644000175000017500000003043611264347126031100 0ustar flichtenheldflichtenheld Untitled Document
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]
     
    - item
    table line
    
    Some text.
    
    1.  first item
      
    2.  an item
      
      

    1. a section

    Node text

    an end table without correspondiing opening part

    @end table

    Multitable not closed with item and tab

    rtds

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. a section

    Multitable not closed with item

    rt

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. a section

    Multitable not closed


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4. a section

    truc: bidule machin
    truc: chose args
    Variable: type1 var bidule

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5. a section

    flushright not closed

    text flushed right


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6. a section

    group not closed

    text in group


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/invalid/res/caption_not_closed/0000755000175000017500000000000011264347126024302 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/caption_not_closed/caption_not_closed.20000644000175000017500000000032711264347126030235 0ustar flichtenheldflichtenheld** closing @-command caption (l. 21) *** @end float without corresponding opening ** Unknown float style Text *** closing `float' (l. 21) *** @end float without corresponding opening ** Unknown float style Text texi2html-1.82/test/invalid/res/caption_not_closed/caption_not_closed.html0000644000175000017500000000422611264347126031042 0ustar flichtenheldflichtenheld Untitled Document

    Test caption not closed

    No label but caption.

    Text: Not closed caption

    The caption trigger a keep_texi, so everything until the end of the file is in the caption. Also the caption is formatted twice which leads to 2 error messages.

    @end float


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/invalid/res/brace_not_closed/0000755000175000017500000000000011264347126023721 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/brace_not_closed/brace_not_closed.20000644000175000017500000000015111264347126027266 0ustar flichtenheldflichtenheld*** '}' without opening '{' before: (l. 8) *** '{' without macro. Before: truc@} @anchor{truc}. (l. 10) texi2html-1.82/test/invalid/res/brace_not_closed/brace_not_closed.html0000644000175000017500000000370411264347126030100 0ustar flichtenheldflichtenheld Untitled Document

    Top

    Top node

    Closing’ ‘ } without opening macro ’.

    anchor{truc} .

    Some text . More text


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/invalid/res/texi_copying_not_closed/0000755000175000017500000000000011264347126025346 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/texi_copying_not_closed/copying_not_closed.20000644000175000017500000000013211264347126031306 0ustar flichtenheldflichtenheld** At end of document, 2 copying not closed ** At end of document, 2 copying not closed texi2html-1.82/test/invalid/res/texi_copying_not_closed/copying_not_closed.passtexi0000644000175000017500000000106211264347126033010 0ustar flichtenheldflichtenheldcopying_not_closed.texi(,2) copying_not_closed.texi(,3) @node Top copying_not_closed.texi(,4) copying_not_closed.texi(,5) texte copying_not_closed.texi(,6) copying_not_closed.texi(,7) @insertcopying copying_not_closed.texi(,8) copying_not_closed.texi(,9) @copying copying_not_closed.texi(,10) copying_not_closed.texi(,11) This is a copyright notice copying_not_closed.texi(,12) copying_not_closed.texi(,13) copying_not_closed.texi(,14) @copying copying_not_closed.texi(,15) copying_not_closed.texi(,16) And a second one (?) copying_not_closed.texi(,17) texi2html-1.82/test/invalid/res/texi_copying_not_closed/copying_not_closed.texi0000644000175000017500000000021211264347126032115 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top texte @insertcopying @copying This is a copyright notice @copying And a second one (?) texi2html-1.82/test/invalid/res/texi_copying_not_closed/copying_not_closed.passfirst0000644000175000017500000000034711264347126033173 0ustar flichtenheldflichtenheldcopying_not_closed.texi(,2) copying_not_closed.texi(,3) @node Top copying_not_closed.texi(,4) copying_not_closed.texi(,5) texte copying_not_closed.texi(,6) copying_not_closed.texi(,7) @insertcopying copying_not_closed.texi(,8) texi2html-1.82/test/invalid/res/texi_verbatim_not_closed/0000755000175000017500000000000011264347126025507 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/texi_verbatim_not_closed/verbatim_not_closed.texi0000644000175000017500000000014511264347126032424 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top texte @verbatim some verbatim @ @macro @end verbatimtexi2html-1.82/test/invalid/res/texi_verbatim_not_closed/verbatim_not_closed.passfirst0000644000175000017500000000066011264347126033473 0ustar flichtenheldflichtenheldverbatim_not_closed.texi(,2) verbatim_not_closed.texi(,3) @node Top verbatim_not_closed.texi(,4) verbatim_not_closed.texi(,5) texte verbatim_not_closed.texi(,6) verbatim_not_closed.texi(,7) @verbatim verbatim_not_closed.texi(,8) verbatim_not_closed.texi(,9) some verbatim @ verbatim_not_closed.texi(,10) verbatim_not_closed.texi(,11) @macro verbatim_not_closed.texi(,12) verbatim_not_closed.texi(,13) no file(,) @end verbatimtexi2html-1.82/test/invalid/res/texi_verbatim_not_closed/verbatim_not_closed.20000644000175000017500000000012011264347126031605 0ustar flichtenheldflichtenheld** closing @verbatim raw format (l. 13) ** closing @verbatim raw format (l. 13) texi2html-1.82/test/invalid/res/texi_verbatim_not_closed/verbatim_not_closed.passtexi0000644000175000017500000000066011264347126033315 0ustar flichtenheldflichtenheldverbatim_not_closed.texi(,2) verbatim_not_closed.texi(,3) @node Top verbatim_not_closed.texi(,4) verbatim_not_closed.texi(,5) texte verbatim_not_closed.texi(,6) verbatim_not_closed.texi(,7) @verbatim verbatim_not_closed.texi(,8) verbatim_not_closed.texi(,9) some verbatim @ verbatim_not_closed.texi(,10) verbatim_not_closed.texi(,11) @macro verbatim_not_closed.texi(,12) verbatim_not_closed.texi(,13) no file(,) @end verbatimtexi2html-1.82/test/invalid/res/texi_def_cmd_dble/0000755000175000017500000000000011264347126024034 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/texi_def_cmd_dble/def_cmd_dble.texi0000644000175000017500000000042311264347126027275 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename def_cmd_dble.info @node Top @top Test for double definition commands @deffn func plot (a, b, c, ...) @deffnx func plot2 (a, b, c, ..., d) aaa @end deffn @deffn func aaaa args @defvr c--ategory d--efvr_name bbb @end deffn @bye texi2html-1.82/test/invalid/res/texi_def_cmd_dble/def_cmd_dble.passtexi0000644000175000017500000000102611264347126030164 0ustar flichtenheldflichtenhelddef_cmd_dble.texi(,2) @setfilename def_cmd_dble.info def_cmd_dble.texi(,3) @node Top def_cmd_dble.texi(,4) @top Test for double definition commands def_cmd_dble.texi(,5) def_cmd_dble.texi(,6) @deffn func plot (a, b, c, ...) @deffnx func plot2 (a, b, c, ..., d) def_cmd_dble.texi(,7) aaa def_cmd_dble.texi(,8) @end deffn def_cmd_dble.texi(,9) def_cmd_dble.texi(,10) @deffn func aaaa args @defvr c--ategory d--efvr_name def_cmd_dble.texi(,11) bbb def_cmd_dble.texi(,12) @end deffn def_cmd_dble.texi(,13) def_cmd_dble.texi(,14) @bye texi2html-1.82/test/invalid/res/texi_def_cmd_dble/def_cmd_dble.passfirst0000644000175000017500000000102611264347126030342 0ustar flichtenheldflichtenhelddef_cmd_dble.texi(,2) @setfilename def_cmd_dble.info def_cmd_dble.texi(,3) @node Top def_cmd_dble.texi(,4) @top Test for double definition commands def_cmd_dble.texi(,5) def_cmd_dble.texi(,6) @deffn func plot (a, b, c, ...) @deffnx func plot2 (a, b, c, ..., d) def_cmd_dble.texi(,7) aaa def_cmd_dble.texi(,8) @end deffn def_cmd_dble.texi(,9) def_cmd_dble.texi(,10) @deffn func aaaa args @defvr c--ategory d--efvr_name def_cmd_dble.texi(,11) bbb def_cmd_dble.texi(,12) @end deffn def_cmd_dble.texi(,13) def_cmd_dble.texi(,14) @bye texi2html-1.82/test/invalid/res/texi_def_cmd_dble/def_cmd_dble.20000644000175000017500000000031211264347126026462 0ustar flichtenheldflichtenheld** Index entry before document: @findex plot2 ** Index entry before document: @vindex d--efvr_name ** Index entry before document: @findex plot2 ** Index entry before document: @vindex d--efvr_name texi2html-1.82/test/invalid/res/titlepage_not_closed/0000755000175000017500000000000011264347126024623 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/titlepage_not_closed/titlepage_not_closed.20000644000175000017500000000005711264347126031077 0ustar flichtenheldflichtenheld** At end of document, 2 titlepage not closed texi2html-1.82/test/invalid/res/titlepage_not_closed/titlepage_not_closed.html0000644000175000017500000000343211264347126031702 0ustar flichtenheldflichtenheld Untitled Document

    Top

    texte


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/invalid/res/texi_html_not_closed/0000755000175000017500000000000011264347126024642 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/texi_html_not_closed/html_not_closed.passfirst0000644000175000017500000000062311264347126031760 0ustar flichtenheldflichtenheldhtml_not_closed.texi(,2) html_not_closed.texi(,3) @node Top html_not_closed.texi(,4) html_not_closed.texi(,5) texte html_not_closed.texi(,6) html_not_closed.texi(,7) @html html_not_closed.texi(,8) html_not_closed.texi(,9) This is some html html_not_closed.texi(,10)
    my address
    html_not_closed.texi(,11) html_not_closed.texi(,12) html_not_closed.texi(,13) no file(,) @end htmltexi2html-1.82/test/invalid/res/texi_html_not_closed/html_not_closed.passtexi0000644000175000017500000000062311264347126031602 0ustar flichtenheldflichtenheldhtml_not_closed.texi(,2) html_not_closed.texi(,3) @node Top html_not_closed.texi(,4) html_not_closed.texi(,5) texte html_not_closed.texi(,6) html_not_closed.texi(,7) @html html_not_closed.texi(,8) html_not_closed.texi(,9) This is some html html_not_closed.texi(,10)
    my address
    html_not_closed.texi(,11) html_not_closed.texi(,12) html_not_closed.texi(,13) no file(,) @end htmltexi2html-1.82/test/invalid/res/texi_html_not_closed/html_not_closed.20000644000175000017500000000011011264347126030072 0ustar flichtenheldflichtenheld** closing @html raw format (l. 13) ** closing @html raw format (l. 13) texi2html-1.82/test/invalid/res/texi_html_not_closed/html_not_closed.texi0000644000175000017500000000017011264347126030710 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top texte @html This is some html
    my address
    @end htmltexi2html-1.82/test/invalid/res/texi_footnote_not_closed/0000755000175000017500000000000011264347126025533 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/texi_footnote_not_closed/footnote_not_closed.passfirst0000644000175000017500000000225611264347126033546 0ustar flichtenheldflichtenheldfootnote_not_closed.texi(,2) footnote_not_closed.texi(,3) @setfilename footnote_not_closed.info footnote_not_closed.texi(,4) footnote_not_closed.texi(,5) @node Top footnote_not_closed.texi(,6) @top Top section footnote_not_closed.texi(,7) footnote_not_closed.texi(,8) texte@footnote{We have a footnote. footnote_not_closed.texi(,9) footnote_not_closed.texi(,10) This is an important footnote. footnote_not_closed.texi(,11) footnote_not_closed.texi(,12) @menu footnote_not_closed.texi(,13) * chapter:: the chapter footnote_not_closed.texi(,14) * chapter2:: the second chapter footnote_not_closed.texi(,15) @end menu footnote_not_closed.texi(,16) footnote_not_closed.texi(,17) @node chapter footnote_not_closed.texi(,18) @chapter Chapter footnote_not_closed.texi(,19) footnote_not_closed.texi(,20) In chapter@footnote{Another footnote footnote_not_closed.texi(,21) footnote_not_closed.texi(,22) @quotation footnote_not_closed.texi(,23) In a quotation footnote_not_closed.texi(,24) footnote_not_closed.texi(,25) @node chapter2 footnote_not_closed.texi(,26) @chapter Chapter2 footnote_not_closed.texi(,27) footnote_not_closed.texi(,28) footnote_not_closed.texi(,29) @bye texi2html-1.82/test/invalid/res/texi_footnote_not_closed/footnote_not_closed.20000644000175000017500000000000011264347126031652 0ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/texi_footnote_not_closed/footnote_not_closed.passtexi0000644000175000017500000000225611264347126033370 0ustar flichtenheldflichtenheldfootnote_not_closed.texi(,2) footnote_not_closed.texi(,3) @setfilename footnote_not_closed.info footnote_not_closed.texi(,4) footnote_not_closed.texi(,5) @node Top footnote_not_closed.texi(,6) @top Top section footnote_not_closed.texi(,7) footnote_not_closed.texi(,8) texte@footnote{We have a footnote. footnote_not_closed.texi(,9) footnote_not_closed.texi(,10) This is an important footnote. footnote_not_closed.texi(,11) footnote_not_closed.texi(,12) @menu footnote_not_closed.texi(,13) * chapter:: the chapter footnote_not_closed.texi(,14) * chapter2:: the second chapter footnote_not_closed.texi(,15) @end menu footnote_not_closed.texi(,16) footnote_not_closed.texi(,17) @node chapter footnote_not_closed.texi(,18) @chapter Chapter footnote_not_closed.texi(,19) footnote_not_closed.texi(,20) In chapter@footnote{Another footnote footnote_not_closed.texi(,21) footnote_not_closed.texi(,22) @quotation footnote_not_closed.texi(,23) In a quotation footnote_not_closed.texi(,24) footnote_not_closed.texi(,25) @node chapter2 footnote_not_closed.texi(,26) @chapter Chapter2 footnote_not_closed.texi(,27) footnote_not_closed.texi(,28) footnote_not_closed.texi(,29) @bye texi2html-1.82/test/invalid/res/texi_footnote_not_closed/footnote_not_closed.texi0000644000175000017500000000061611264347126032477 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename footnote_not_closed.info @node Top @top Top section texte@footnote{We have a footnote. This is an important footnote. @menu * chapter:: the chapter * chapter2:: the second chapter @end menu @node chapter @chapter Chapter In chapter@footnote{Another footnote @quotation In a quotation @node chapter2 @chapter Chapter2 @bye texi2html-1.82/test/invalid/res/texi_titlepage_not_closed/0000755000175000017500000000000011264347126025654 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/texi_titlepage_not_closed/titlepage_not_closed.passfirst0000644000175000017500000000031011264347126033775 0ustar flichtenheldflichtenheldtitlepage_not_closed.texi(,2) titlepage_not_closed.texi(,3) @node Top titlepage_not_closed.texi(,4) titlepage_not_closed.texi(,5) texte titlepage_not_closed.texi(,6) titlepage_not_closed.texi(,7) texi2html-1.82/test/invalid/res/texi_titlepage_not_closed/titlepage_not_closed.texi0000644000175000017500000000017511264347126032741 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top texte @titlepage This is in title page @titlepage And still in title page texi2html-1.82/test/invalid/res/texi_titlepage_not_closed/titlepage_not_closed.20000644000175000017500000000013611264347126032126 0ustar flichtenheldflichtenheld** At end of document, 2 titlepage not closed ** At end of document, 2 titlepage not closed texi2html-1.82/test/invalid/res/texi_titlepage_not_closed/titlepage_not_closed.passtexi0000644000175000017500000000104611264347126033626 0ustar flichtenheldflichtenheldtitlepage_not_closed.texi(,2) titlepage_not_closed.texi(,3) @node Top titlepage_not_closed.texi(,4) titlepage_not_closed.texi(,5) texte titlepage_not_closed.texi(,6) titlepage_not_closed.texi(,7) titlepage_not_closed.texi(,8) @titlepage titlepage_not_closed.texi(,9) titlepage_not_closed.texi(,10) This is in title page titlepage_not_closed.texi(,11) titlepage_not_closed.texi(,12) titlepage_not_closed.texi(,13) @titlepage titlepage_not_closed.texi(,14) titlepage_not_closed.texi(,15) And still in title page titlepage_not_closed.texi(,16) texi2html-1.82/test/invalid/res/verbatim_not_closed/0000755000175000017500000000000011264347126024456 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/verbatim_not_closed/verbatim_not_closed.html0000644000175000017500000000352011264347126031366 0ustar flichtenheldflichtenheld Untitled Document

    Top

    texte

    some verbatim @
    
    @macro
    
    
    

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/invalid/res/verbatim_not_closed/verbatim_not_closed.20000644000175000017500000000005011264347126030556 0ustar flichtenheldflichtenheld** closing @verbatim raw format (l. 13) texi2html-1.82/test/invalid/res/bad_nesting/0000755000175000017500000000000011264347126022711 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/bad_nesting/bad_nesting.20000644000175000017500000000133111264347126025247 0ustar flichtenheldflichtenheld*** waiting for end of quotation, found @end cartouche (l. 12) *** closing `quotation' (l. 12) ** Waiting for @end deffn, found @end deftypefun (l. 16) ** Waiting for @end table, found @end vtable (l. 21) *** waiting for end of example, found @end display (l. 27) *** closing `example' (l. 27) *** closing `table' (l. 27) *** @end table without corresponding opening (l. 28) *** waiting for end of group, found @end table (l. 32) *** closing `group' (l. 32) *** waiting for end of group, found @end cartouche (l. 36) *** closing `group' (l. 36) *** waiting for end of cartouche, found @end group (l. 40) *** closing `cartouche' (l. 40) *** waiting for end of cartouche, found @end float (l. 44) *** closing `cartouche' (l. 44) texi2html-1.82/test/invalid/res/bad_nesting/bad_nesting.html0000644000175000017500000000475111264347126026063 0ustar flichtenheldflichtenheld Untitled Document

    Test for bad nestings

    Tests for environments not matching

    A quotation

    Function Reference: print_navigation $filehandle

    Text

    item

    line

    ref
     
    example
    
    @end table

    in group

    in group 2

    cartouche

    carouche


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/invalid/res/texi_macro_def_not_closed/0000755000175000017500000000000011264347126025615 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/texi_macro_def_not_closed/macro_def_not_closed.20000644000175000017500000000006211264347126032026 0ustar flichtenheldflichtenheld** closing macro (l. 10) ** closing macro (l. 10) texi2html-1.82/test/invalid/res/texi_macro_def_not_closed/macro_def_not_closed.passfirst0000644000175000017500000000025111264347126033703 0ustar flichtenheldflichtenheldmacro_def_not_closed.texi(,2) macro_def_not_closed.texi(,3) @node Top macro_def_not_closed.texi(,4) macro_def_not_closed.texi(,5) texte macro_def_not_closed.texi(,6) texi2html-1.82/test/invalid/res/texi_macro_def_not_closed/macro_def_not_closed.texi0000644000175000017500000000006311264347126032637 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top texte texi2html-1.82/test/invalid/res/texi_macro_def_not_closed/macro_def_not_closed.passtexi0000644000175000017500000000025111264347126033525 0ustar flichtenheldflichtenheldmacro_def_not_closed.texi(,2) macro_def_not_closed.texi(,3) @node Top macro_def_not_closed.texi(,4) macro_def_not_closed.texi(,5) texte macro_def_not_closed.texi(,6) texi2html-1.82/test/invalid/res/texi_formats_not_closed/0000755000175000017500000000000011264347126025351 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/texi_formats_not_closed/formats_not_closed.20000644000175000017500000000000011264347126031306 0ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/texi_formats_not_closed/formats_not_closed.passtexi0000644000175000017500000000470711264347126033027 0ustar flichtenheldflichtenheldformats_not_closed.texi(,2) formats_not_closed.texi(,3) @node Top formats_not_closed.texi(,4) formats_not_closed.texi(,5) @example formats_not_closed.texi(,6) formats_not_closed.texi(,7) @table @minus formats_not_closed.texi(,8) @item item formats_not_closed.texi(,9) table line formats_not_closed.texi(,10) formats_not_closed.texi(,11) Some text. formats_not_closed.texi(,12) @enumerate formats_not_closed.texi(,13) formats_not_closed.texi(,14) @item first item formats_not_closed.texi(,15) @item an item formats_not_closed.texi(,16) formats_not_closed.texi(,17) @end example formats_not_closed.texi(,18) formats_not_closed.texi(,19) formats_not_closed.texi(,20) @section a section formats_not_closed.texi(,21) formats_not_closed.texi(,22) Node text formats_not_closed.texi(,23) formats_not_closed.texi(,24) an end table without correspondiing opening part formats_not_closed.texi(,25) @end table formats_not_closed.texi(,26) formats_not_closed.texi(,27) Multitable not closed with item and tab formats_not_closed.texi(,28) formats_not_closed.texi(,29) @multitable {r} {t} formats_not_closed.texi(,30) @item rt @tab ds formats_not_closed.texi(,31) formats_not_closed.texi(,32) @section a section formats_not_closed.texi(,33) Multitable not closed with item formats_not_closed.texi(,34) formats_not_closed.texi(,35) @multitable {r} {t} formats_not_closed.texi(,36) @item rt formats_not_closed.texi(,37) formats_not_closed.texi(,38) @section a section formats_not_closed.texi(,39) Multitable not closed formats_not_closed.texi(,40) @multitable {r} {t} formats_not_closed.texi(,41) formats_not_closed.texi(,42) formats_not_closed.texi(,43) @section a section formats_not_closed.texi(,44) @deffn truc bidule machin formats_not_closed.texi(,45) @deffnx truc chose args formats_not_closed.texi(,46) @defvar type1 var bidule formats_not_closed.texi(,47) formats_not_closed.texi(,48) @section a section formats_not_closed.texi(,49) formats_not_closed.texi(,50) flushright not closed formats_not_closed.texi(,51) formats_not_closed.texi(,52) @flushright formats_not_closed.texi(,53) formats_not_closed.texi(,54) text flushed right formats_not_closed.texi(,55) formats_not_closed.texi(,56) @section a section formats_not_closed.texi(,57) formats_not_closed.texi(,58) group not closed formats_not_closed.texi(,59) formats_not_closed.texi(,60) @group formats_not_closed.texi(,61) formats_not_closed.texi(,62) text in group formats_not_closed.texi(,63) formats_not_closed.texi(,64) @bye texi2html-1.82/test/invalid/res/texi_formats_not_closed/formats_not_closed.passfirst0000644000175000017500000000470711264347126033205 0ustar flichtenheldflichtenheldformats_not_closed.texi(,2) formats_not_closed.texi(,3) @node Top formats_not_closed.texi(,4) formats_not_closed.texi(,5) @example formats_not_closed.texi(,6) formats_not_closed.texi(,7) @table @minus formats_not_closed.texi(,8) @item item formats_not_closed.texi(,9) table line formats_not_closed.texi(,10) formats_not_closed.texi(,11) Some text. formats_not_closed.texi(,12) @enumerate formats_not_closed.texi(,13) formats_not_closed.texi(,14) @item first item formats_not_closed.texi(,15) @item an item formats_not_closed.texi(,16) formats_not_closed.texi(,17) @end example formats_not_closed.texi(,18) formats_not_closed.texi(,19) formats_not_closed.texi(,20) @section a section formats_not_closed.texi(,21) formats_not_closed.texi(,22) Node text formats_not_closed.texi(,23) formats_not_closed.texi(,24) an end table without correspondiing opening part formats_not_closed.texi(,25) @end table formats_not_closed.texi(,26) formats_not_closed.texi(,27) Multitable not closed with item and tab formats_not_closed.texi(,28) formats_not_closed.texi(,29) @multitable {r} {t} formats_not_closed.texi(,30) @item rt @tab ds formats_not_closed.texi(,31) formats_not_closed.texi(,32) @section a section formats_not_closed.texi(,33) Multitable not closed with item formats_not_closed.texi(,34) formats_not_closed.texi(,35) @multitable {r} {t} formats_not_closed.texi(,36) @item rt formats_not_closed.texi(,37) formats_not_closed.texi(,38) @section a section formats_not_closed.texi(,39) Multitable not closed formats_not_closed.texi(,40) @multitable {r} {t} formats_not_closed.texi(,41) formats_not_closed.texi(,42) formats_not_closed.texi(,43) @section a section formats_not_closed.texi(,44) @deffn truc bidule machin formats_not_closed.texi(,45) @deffnx truc chose args formats_not_closed.texi(,46) @defvar type1 var bidule formats_not_closed.texi(,47) formats_not_closed.texi(,48) @section a section formats_not_closed.texi(,49) formats_not_closed.texi(,50) flushright not closed formats_not_closed.texi(,51) formats_not_closed.texi(,52) @flushright formats_not_closed.texi(,53) formats_not_closed.texi(,54) text flushed right formats_not_closed.texi(,55) formats_not_closed.texi(,56) @section a section formats_not_closed.texi(,57) formats_not_closed.texi(,58) group not closed formats_not_closed.texi(,59) formats_not_closed.texi(,60) @group formats_not_closed.texi(,61) formats_not_closed.texi(,62) text in group formats_not_closed.texi(,63) formats_not_closed.texi(,64) @bye texi2html-1.82/test/invalid/res/texi_formats_not_closed/formats_not_closed.texi0000644000175000017500000000131411264347126032127 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top @example @table @minus @item item table line Some text. @enumerate @item first item @item an item @end example @section a section Node text an end table without correspondiing opening part @end table Multitable not closed with item and tab @multitable {r} {t} @item rt @tab ds @section a section Multitable not closed with item @multitable {r} {t} @item rt @section a section Multitable not closed @multitable {r} {t} @section a section @deffn truc bidule machin @deffnx truc chose args @defvar type1 var bidule @section a section flushright not closed @flushright text flushed right @section a section group not closed @group text in group @bye texi2html-1.82/test/invalid/res/ignored_not_closed/0000755000175000017500000000000011264347126024274 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/ignored_not_closed/ignored_not_closed.html0000644000175000017500000000343111264347126031023 0ustar flichtenheldflichtenheld Untitled Document

    Top

    texte


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/invalid/res/ignored_not_closed/ignored_not_closed.20000644000175000017500000000003211264347126030212 0ustar flichtenheldflichtenheld** closing ignore (l. 10) texi2html-1.82/test/invalid/res/def_cmd_dble/0000755000175000017500000000000011264347126023003 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/def_cmd_dble/def_cmd_dble.html0000644000175000017500000000436511264347126026250 0ustar flichtenheldflichtenheld Untitled Document

    Test for double definition commands

    func: plot (a, b, c, ...)
    :
    func plot2 (a, b, c, ..., d)

    aaa

    func: aaaa args
    :
    c--ategory d--efvr_name

    bbb


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/invalid/res/def_cmd_dble/def_cmd_dble.20000644000175000017500000000040411264347126025433 0ustar flichtenheldflichtenheld** Index entry before document: @findex plot2 ** Index entry before document: @vindex d--efvr_name *** closing `deffn' (l. 6) ** Waiting for index cmd @deffn, got @defvr (l. 10) *** closing `defvr' (l. 10) ** Waiting for index cmd @defvr, got @deffn (l. 10) texi2html-1.82/test/invalid/res/texi_brace_not_closed/0000755000175000017500000000000011264347126024752 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/texi_brace_not_closed/brace_not_closed.texi0000644000175000017500000000030411264347126031127 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename brace_not_closed @node ToP Top node @samp{Closing} @samp{ @} without opening macro }.} anchor{truc@} @anchor{truc}. Some text @|. More text @bye texi2html-1.82/test/invalid/res/texi_brace_not_closed/brace_not_closed.passfirst0000644000175000017500000000102611264347126032176 0ustar flichtenheldflichtenheldbrace_not_closed.texi(,2) brace_not_closed.texi(,3) @setfilename brace_not_closed brace_not_closed.texi(,4) brace_not_closed.texi(,5) @node ToP brace_not_closed.texi(,6) Top node brace_not_closed.texi(,7) brace_not_closed.texi(,8) @samp{Closing} @samp{ @} without opening macro }.} brace_not_closed.texi(,9) brace_not_closed.texi(,10) anchor{truc@} @anchor{truc}. brace_not_closed.texi(,11) brace_not_closed.texi(,12) Some text @|. brace_not_closed.texi(,13) More text brace_not_closed.texi(,14) brace_not_closed.texi(,15) @bye texi2html-1.82/test/invalid/res/texi_brace_not_closed/brace_not_closed.passtexi0000644000175000017500000000102611264347126032020 0ustar flichtenheldflichtenheldbrace_not_closed.texi(,2) brace_not_closed.texi(,3) @setfilename brace_not_closed brace_not_closed.texi(,4) brace_not_closed.texi(,5) @node ToP brace_not_closed.texi(,6) Top node brace_not_closed.texi(,7) brace_not_closed.texi(,8) @samp{Closing} @samp{ @} without opening macro }.} brace_not_closed.texi(,9) brace_not_closed.texi(,10) anchor{truc@} @anchor{truc}. brace_not_closed.texi(,11) brace_not_closed.texi(,12) Some text @|. brace_not_closed.texi(,13) More text brace_not_closed.texi(,14) brace_not_closed.texi(,15) @bye texi2html-1.82/test/invalid/res/texi_brace_not_closed/brace_not_closed.20000644000175000017500000000000011264347126030310 0ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/texi_not_closed_in_menu/0000755000175000017500000000000011264347126025330 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/texi_not_closed_in_menu/not_closed_in_menu.20000644000175000017500000000000011264347126031244 0ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/texi_not_closed_in_menu/not_closed_in_menu.passfirst0000644000175000017500000000225211264347126033134 0ustar flichtenheldflichtenheldnot_closed_in_menu.texi(,2) not_closed_in_menu.texi(,3) @node Top not_closed_in_menu.texi(,4) not_closed_in_menu.texi(,5) @menu not_closed_in_menu.texi(,6) * (gcc):: text @table @minus not_closed_in_menu.texi(,7) @item item not_closed_in_menu.texi(,8) table line not_closed_in_menu.texi(,9) @end menu not_closed_in_menu.texi(,10) not_closed_in_menu.texi(,11) Some text. not_closed_in_menu.texi(,12) not_closed_in_menu.texi(,13) @menu not_closed_in_menu.texi(,14) * (manual):: desc not_closed_in_menu.texi(,15) not_closed_in_menu.texi(,16) @table @bullet not_closed_in_menu.texi(,17) @item item not_closed_in_menu.texi(,18) comment not_closed_in_menu.texi(,19) * (manual2):: not_closed_in_menu.texi(,20) @end menu not_closed_in_menu.texi(,21) not_closed_in_menu.texi(,22) @menu not_closed_in_menu.texi(,23) * (info):: before deff @deffn bidule truc chose not_closed_in_menu.texi(,24) not_closed_in_menu.texi(,25) deffn text not_closed_in_menu.texi(,26) @end menu not_closed_in_menu.texi(,27) After menu not_closed_in_menu.texi(,28) not_closed_in_menu.texi(,29) @menu not_closed_in_menu.texi(,30) * (manual_in_menu):: desc2 not_closed_in_menu.texi(,31) not_closed_in_menu.texi(,32) @bye texi2html-1.82/test/invalid/res/texi_not_closed_in_menu/not_closed_in_menu.passtexi0000644000175000017500000000225211264347126032756 0ustar flichtenheldflichtenheldnot_closed_in_menu.texi(,2) not_closed_in_menu.texi(,3) @node Top not_closed_in_menu.texi(,4) not_closed_in_menu.texi(,5) @menu not_closed_in_menu.texi(,6) * (gcc):: text @table @minus not_closed_in_menu.texi(,7) @item item not_closed_in_menu.texi(,8) table line not_closed_in_menu.texi(,9) @end menu not_closed_in_menu.texi(,10) not_closed_in_menu.texi(,11) Some text. not_closed_in_menu.texi(,12) not_closed_in_menu.texi(,13) @menu not_closed_in_menu.texi(,14) * (manual):: desc not_closed_in_menu.texi(,15) not_closed_in_menu.texi(,16) @table @bullet not_closed_in_menu.texi(,17) @item item not_closed_in_menu.texi(,18) comment not_closed_in_menu.texi(,19) * (manual2):: not_closed_in_menu.texi(,20) @end menu not_closed_in_menu.texi(,21) not_closed_in_menu.texi(,22) @menu not_closed_in_menu.texi(,23) * (info):: before deff @deffn bidule truc chose not_closed_in_menu.texi(,24) not_closed_in_menu.texi(,25) deffn text not_closed_in_menu.texi(,26) @end menu not_closed_in_menu.texi(,27) After menu not_closed_in_menu.texi(,28) not_closed_in_menu.texi(,29) @menu not_closed_in_menu.texi(,30) * (manual_in_menu):: desc2 not_closed_in_menu.texi(,31) not_closed_in_menu.texi(,32) @bye texi2html-1.82/test/invalid/res/texi_not_closed_in_menu/not_closed_in_menu.texi0000644000175000017500000000051711264347126032071 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top @menu * (gcc):: text @table @minus @item item table line @end menu Some text. @menu * (manual):: desc @table @bullet @item item comment * (manual2):: @end menu @menu * (info):: before deff @deffn bidule truc chose deffn text @end menu After menu @menu * (manual_in_menu):: desc2 @bye texi2html-1.82/test/invalid/res/texi_style_not_closed_in_cartouche/0000755000175000017500000000000011264347126027561 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/texi_style_not_closed_in_cartouche/style_not_closed_in_cartouche.20000644000175000017500000000000011264347126035726 0ustar flichtenheldflichtenheld././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootroottexi2html-1.82/test/invalid/res/texi_style_not_closed_in_cartouche/style_not_closed_in_cartouche.passfirsttexi2html-1.82/test/invalid/res/texi_style_not_closed_in_cartouche/style_not_closed_in_cartouche.pas0000644000175000017500000000112011264347126036354 0ustar flichtenheldflichtenheldstyle_not_closed_in_cartouche.texi(,2) style_not_closed_in_cartouche.texi(,3) @setfilename style_not_closed_in_cartouche.info style_not_closed_in_cartouche.texi(,4) style_not_closed_in_cartouche.texi(,5) @node Top style_not_closed_in_cartouche.texi(,6) @top Test command not closed in cartouche style_not_closed_in_cartouche.texi(,7) style_not_closed_in_cartouche.texi(,8) @cartouche style_not_closed_in_cartouche.texi(,9) cartouche @code{in code style_not_closed_in_cartouche.texi(,10) @end cartouche style_not_closed_in_cartouche.texi(,11) style_not_closed_in_cartouche.texi(,12) @bye ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootroottexi2html-1.82/test/invalid/res/texi_style_not_closed_in_cartouche/style_not_closed_in_cartouche.texitexi2html-1.82/test/invalid/res/texi_style_not_closed_in_cartouche/style_not_closed_in_cartouche.tex0000644000175000017500000000030011264347126036370 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename style_not_closed_in_cartouche.info @node Top @top Test command not closed in cartouche @cartouche cartouche @code{in code @end cartouche @bye ././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootroottexi2html-1.82/test/invalid/res/texi_style_not_closed_in_cartouche/style_not_closed_in_cartouche.passtexitexi2html-1.82/test/invalid/res/texi_style_not_closed_in_cartouche/style_not_closed_in_cartouche.pas0000644000175000017500000000112011264347126036354 0ustar flichtenheldflichtenheldstyle_not_closed_in_cartouche.texi(,2) style_not_closed_in_cartouche.texi(,3) @setfilename style_not_closed_in_cartouche.info style_not_closed_in_cartouche.texi(,4) style_not_closed_in_cartouche.texi(,5) @node Top style_not_closed_in_cartouche.texi(,6) @top Test command not closed in cartouche style_not_closed_in_cartouche.texi(,7) style_not_closed_in_cartouche.texi(,8) @cartouche style_not_closed_in_cartouche.texi(,9) cartouche @code{in code style_not_closed_in_cartouche.texi(,10) @end cartouche style_not_closed_in_cartouche.texi(,11) style_not_closed_in_cartouche.texi(,12) @bye texi2html-1.82/test/invalid/res/style_not_closed_in_table_line/0000755000175000017500000000000011264347126026651 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/style_not_closed_in_table_line/style_not_closed_in_table_line.html0000644000175000017500000000373511264347126035764 0ustar flichtenheldflichtenheld Untitled Document

    Test command not closed on table line

    first item

    line line in code

    in item

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/invalid/res/style_not_closed_in_table_line/style_not_closed_in_table_line.20000644000175000017500000000005311264347126035147 0ustar flichtenheldflichtenheld*** Closing format table, got code (l. 12) texi2html-1.82/test/invalid/res/texi_commands_not_closed/0000755000175000017500000000000011264347126025477 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/texi_commands_not_closed/commands_not_closed.20000644000175000017500000000000011264347126031562 0ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/texi_commands_not_closed/commands_not_closed.passfirst0000644000175000017500000000246311264347126033456 0ustar flichtenheldflichtenheldcommands_not_closed.texi(,2) commands_not_closed.texi(,3) @setfilename commands_not_closed.info commands_not_closed.texi(,4) commands_not_closed.texi(,5) @node Top commands_not_closed.texi(,6) commands_not_closed.texi(,7) @'{e commands_not_closed.texi(,8) commands_not_closed.texi(,9) @chapter Chapter 1 commands_not_closed.texi(,10) commands_not_closed.texi(,11) @anchor{an commands_not_closed.texi(,12) commands_not_closed.texi(,13) anchor} commands_not_closed.texi(,14) commands_not_closed.texi(,15) @anchor{my anchor commands_not_closed.texi(,16) commands_not_closed.texi(,17) @chapter Chapter 2 commands_not_closed.texi(,18) commands_not_closed.texi(,19) See @ref{my anchor}, and @ref{an anchor}, and @ref{footnote anchor} commands_not_closed.texi(,20) commands_not_closed.texi(,21) @chapter Chapter 3 commands_not_closed.texi(,22) commands_not_closed.texi(,23) @ref{an anchor commands_not_closed.texi(,24) commands_not_closed.texi(,25) @chapter Chapter 4 commands_not_closed.texi(,26) commands_not_closed.texi(,27) @math{A commands_not_closed.texi(,28) @chapter Chapter 5 commands_not_closed.texi(,29) commands_not_closed.texi(,30) Footnote@footnote{ commands_not_closed.texi(,31) Footnote commands_not_closed.texi(,32) @anchor{footnote anchor} commands_not_closed.texi(,33) commands_not_closed.texi(,34) @bye texi2html-1.82/test/invalid/res/texi_commands_not_closed/commands_not_closed.passtexi0000644000175000017500000000246311264347126033300 0ustar flichtenheldflichtenheldcommands_not_closed.texi(,2) commands_not_closed.texi(,3) @setfilename commands_not_closed.info commands_not_closed.texi(,4) commands_not_closed.texi(,5) @node Top commands_not_closed.texi(,6) commands_not_closed.texi(,7) @'{e commands_not_closed.texi(,8) commands_not_closed.texi(,9) @chapter Chapter 1 commands_not_closed.texi(,10) commands_not_closed.texi(,11) @anchor{an commands_not_closed.texi(,12) commands_not_closed.texi(,13) anchor} commands_not_closed.texi(,14) commands_not_closed.texi(,15) @anchor{my anchor commands_not_closed.texi(,16) commands_not_closed.texi(,17) @chapter Chapter 2 commands_not_closed.texi(,18) commands_not_closed.texi(,19) See @ref{my anchor}, and @ref{an anchor}, and @ref{footnote anchor} commands_not_closed.texi(,20) commands_not_closed.texi(,21) @chapter Chapter 3 commands_not_closed.texi(,22) commands_not_closed.texi(,23) @ref{an anchor commands_not_closed.texi(,24) commands_not_closed.texi(,25) @chapter Chapter 4 commands_not_closed.texi(,26) commands_not_closed.texi(,27) @math{A commands_not_closed.texi(,28) @chapter Chapter 5 commands_not_closed.texi(,29) commands_not_closed.texi(,30) Footnote@footnote{ commands_not_closed.texi(,31) Footnote commands_not_closed.texi(,32) @anchor{footnote anchor} commands_not_closed.texi(,33) commands_not_closed.texi(,34) @bye texi2html-1.82/test/invalid/res/texi_commands_not_closed/commands_not_closed.texi0000644000175000017500000000057511264347126032413 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename commands_not_closed.info @node Top @'{e @chapter Chapter 1 @anchor{an anchor} @anchor{my anchor @chapter Chapter 2 See @ref{my anchor}, and @ref{an anchor}, and @ref{footnote anchor} @chapter Chapter 3 @ref{an anchor @chapter Chapter 4 @math{A @chapter Chapter 5 Footnote@footnote{ Footnote @anchor{footnote anchor} @bye texi2html-1.82/test/invalid/res/texi_node_in_copying/0000755000175000017500000000000011264347126024630 5ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/texi_node_in_copying/node_in_copying.passfirst0000644000175000017500000000067511264347126031743 0ustar flichtenheldflichtenheldnode_in_copying.texi(,2) node_in_copying.texi(,3) @setfilename node_in_copying.info node_in_copying.texi(,4) node_in_copying.texi(,10) @node Top node_in_copying.texi(,11) @top Top section node_in_copying.texi(,12) node_in_copying.texi(,13) @insertcopying node_in_copying.texi(,14) node_in_copying.texi(,15) This is a manual testing @@node appearing within an unterminated @@copying. node_in_copying.texi(,16) node_in_copying.texi(,17) @bye texi2html-1.82/test/invalid/res/texi_node_in_copying/node_in_copying.texi0000644000175000017500000000037011264347126030666 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename node_in_copying.info @copying This is an unterminatted copyright notice @node Top @top Top section @insertcopying This is a manual testing @@node appearing within an unterminated @@copying. @bye texi2html-1.82/test/invalid/res/texi_node_in_copying/node_in_copying.20000644000175000017500000000000011264347126030044 0ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/res/texi_node_in_copying/node_in_copying.passtexi0000644000175000017500000000116011264347126031553 0ustar flichtenheldflichtenheldnode_in_copying.texi(,2) node_in_copying.texi(,3) @setfilename node_in_copying.info node_in_copying.texi(,4) node_in_copying.texi(,5) @copying node_in_copying.texi(,6) node_in_copying.texi(,7) This is an unterminatted copyright notice node_in_copying.texi(,8) node_in_copying.texi(,9) node_in_copying.texi(,10) @node Top node_in_copying.texi(,11) @top Top section node_in_copying.texi(,12) node_in_copying.texi(,13) @insertcopying node_in_copying.texi(,14) node_in_copying.texi(,15) This is a manual testing @@node appearing within an unterminated @@copying. node_in_copying.texi(,16) node_in_copying.texi(,17) @bye texi2html-1.82/test/invalid/res/texi_style_not_closed_in_table_line/0000755000175000017500000000000011264347126027702 5ustar flichtenheldflichtenheld././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootroottexi2html-1.82/test/invalid/res/texi_style_not_closed_in_table_line/style_not_closed_in_table_line.passfirsttexi2html-1.82/test/invalid/res/texi_style_not_closed_in_table_line/style_not_closed_in_table_line.p0000644000175000017500000000131311264347126036276 0ustar flichtenheldflichtenheldstyle_not_closed_in_table_line.texi(,2) style_not_closed_in_table_line.texi(,3) @setfilename style_not_closed_in_table_line.info style_not_closed_in_table_line.texi(,4) style_not_closed_in_table_line.texi(,5) @node Top style_not_closed_in_table_line.texi(,6) @top Test command not closed on table line style_not_closed_in_table_line.texi(,7) style_not_closed_in_table_line.texi(,8) @table @asis style_not_closed_in_table_line.texi(,9) @item first item style_not_closed_in_table_line.texi(,10) line style_not_closed_in_table_line.texi(,11) line @code{in code @item in item style_not_closed_in_table_line.texi(,12) @end table style_not_closed_in_table_line.texi(,13) style_not_closed_in_table_line.texi(,14) @bye ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootroottexi2html-1.82/test/invalid/res/texi_style_not_closed_in_table_line/style_not_closed_in_table_line.texitexi2html-1.82/test/invalid/res/texi_style_not_closed_in_table_line/style_not_closed_in_table_line.t0000644000175000017500000000033611264347126036306 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename style_not_closed_in_table_line.info @node Top @top Test command not closed on table line @table @asis @item first item line line @code{in code @item in item @end table @bye ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootroottexi2html-1.82/test/invalid/res/texi_style_not_closed_in_table_line/style_not_closed_in_table_line.passtexitexi2html-1.82/test/invalid/res/texi_style_not_closed_in_table_line/style_not_closed_in_table_line.p0000644000175000017500000000131311264347126036276 0ustar flichtenheldflichtenheldstyle_not_closed_in_table_line.texi(,2) style_not_closed_in_table_line.texi(,3) @setfilename style_not_closed_in_table_line.info style_not_closed_in_table_line.texi(,4) style_not_closed_in_table_line.texi(,5) @node Top style_not_closed_in_table_line.texi(,6) @top Test command not closed on table line style_not_closed_in_table_line.texi(,7) style_not_closed_in_table_line.texi(,8) @table @asis style_not_closed_in_table_line.texi(,9) @item first item style_not_closed_in_table_line.texi(,10) line style_not_closed_in_table_line.texi(,11) line @code{in code @item in item style_not_closed_in_table_line.texi(,12) @end table style_not_closed_in_table_line.texi(,13) style_not_closed_in_table_line.texi(,14) @bye texi2html-1.82/test/invalid/res/texi_style_not_closed_in_table_line/style_not_closed_in_table_line.20000644000175000017500000000000011264347126036170 0ustar flichtenheldflichtenheldtexi2html-1.82/test/invalid/html_not_closed.texi0000644000175000017500000000015711264347126023716 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top texte @html This is some html
    my address
    texi2html-1.82/test/invalid/macro_def_not_closed.texi0000644000175000017500000000013611264347126024666 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top texte @macro the_macro {arg1, arg2} Macro body texi2html-1.82/test/invalid/node_in_copying.texi0000644000175000017500000000037011264347126023701 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename node_in_copying.info @copying This is an unterminatted copyright notice @node Top @top Top section @insertcopying This is a manual testing @@node appearing within an unterminated @@copying. @bye texi2html-1.82/test/invalid/macro_call_not_closed.texi0000644000175000017500000000030711264347126025043 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @macro macro1 { arg1 , arg2 } result: @emph{\arg1\} protected \\ -> \\arg1\\ @emph{\arg2\} @end macro @node Top after end macro @macro1 { bidule {truc{machin texi2html-1.82/test/invalid/copying_not_closed.texi0000644000175000017500000000021211264347126024412 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top texte @insertcopying @copying This is a copyright notice @copying And a second one (?) texi2html-1.82/test/invalid/tex_not_closed.texi0000644000175000017500000000012011264347126023540 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top texte @tex This is some \LaTeX{} texi2html-1.82/test/invalid/multitable_too_much_col.texi0000644000175000017500000000117411264347126025435 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top @top test multitable with too much cells @multitable @item item in empty multitable @tab tab in empty m @tab second tab in empty m @item item in empty m @end multitable @multitable {a} @item a @tab additional tab @tab other additional tab @tab 3rd additiona tab @item a1 @item a2 @tab additional tab2 @tab other additional tab2 @tab 3rd additional tab2 @item a3 @tab one additional tab @end multitable @multitable @columnfractions 0.4 0.6 @item first @tab second @tab first out @tab second out @tab third out @item first1 @item first2 @tab second2 @tab first2 out @end multitable @bye texi2html-1.82/test/invalid/not_closed_in_menu.texi0000644000175000017500000000051711264347126024404 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top @menu * (gcc):: text @table @minus @item item table line @end menu Some text. @menu * (manual):: desc @table @bullet @item item comment * (manual2):: @end menu @menu * (info):: before deff @deffn bidule truc chose deffn text @end menu After menu @menu * (manual_in_menu):: desc2 @bye texi2html-1.82/test/invalid/style_not_closed_in_cartouche.texi0000644000175000017500000000030011264347126026623 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename style_not_closed_in_cartouche.info @node Top @top Test command not closed in cartouche @cartouche cartouche @code{in code @end cartouche @bye texi2html-1.82/test/invalid/footnote_not_closed.texi0000644000175000017500000000061611264347126024607 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename footnote_not_closed.info @node Top @top Top section texte@footnote{We have a footnote. This is an important footnote. @menu * chapter:: the chapter * chapter2:: the second chapter @end menu @node chapter @chapter Chapter In chapter@footnote{Another footnote @quotation In a quotation @node chapter2 @chapter Chapter2 @bye texi2html-1.82/test/invalid/formats_not_closed.texi0000644000175000017500000000131411264347126024421 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top @example @table @minus @item item table line Some text. @enumerate @item first item @item an item @end example @section a section Node text an end table without correspondiing opening part @end table Multitable not closed with item and tab @multitable {r} {t} @item rt @tab ds @section a section Multitable not closed with item @multitable {r} {t} @item rt @section a section Multitable not closed @multitable {r} {t} @section a section @deffn truc bidule machin @deffnx truc chose args @defvar type1 var bidule @section a section flushright not closed @flushright text flushed right @section a section group not closed @group text in group @bye texi2html-1.82/test/invalid/commands_not_closed.texi0000644000175000017500000000057511264347126024557 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename commands_not_closed.info @node Top @'{e @chapter Chapter 1 @anchor{an anchor} @anchor{my anchor @chapter Chapter 2 See @ref{my anchor}, and @ref{an anchor}, and @ref{footnote anchor} @chapter Chapter 3 @ref{an anchor @chapter Chapter 4 @math{A @chapter Chapter 5 Footnote@footnote{ Footnote @anchor{footnote anchor} @bye texi2html-1.82/test/invalid/tests.txt0000644000175000017500000000365211264347126021554 0ustar flichtenheldflichtenheldtexi brace_not_closed.texi texi recursive_copying.texi texi bad_nesting.texi texi code_not_closed.texi texi formats_not_closed.texi texi commands_not_closed.texi texi math_not_closed.texi --l2h --iftex texi not_closed_in_menu.texi texi macro_call_not_closed.texi texi macro_def_not_closed.texi texi ignored_not_closed.texi texi verb_not_closed.texi texi tex_not_closed.texi -l2h -expand tex texi html_not_closed.texi texi verbatim_not_closed.texi texi copying_not_closed.texi texi node_in_copying.texi texi tex_in_copying.texi -l2h -expand tex texi titlepage_not_closed.texi texi footnote_not_closed.texi texi caption_not_closed.texi texi def_cmd_dble.texi texi style_not_closed_in_table_line.texi texi style_not_closed_in_cartouche.texi texi multitable_too_much_col.texi brace_not_closed brace_not_closed.texi recursive_copying recursive_copying.texi bad_nesting bad_nesting.texi code_not_closed code_not_closed.texi formats_not_closed formats_not_closed.texi commands_not_closed commands_not_closed.texi math_not_closed math_not_closed.texi --l2h --iftex -init l2h_tmp_dir.init not_closed_in_menu not_closed_in_menu.texi macro_call_not_closed macro_call_not_closed.texi macro_def_not_closed macro_def_not_closed.texi ignored_not_closed ignored_not_closed.texi verb_not_closed verb_not_closed.texi tex_not_closed tex_not_closed.texi -l2h -expand tex -init l2h_tmp_dir.init html_not_closed html_not_closed.texi verbatim_not_closed verbatim_not_closed.texi copying_not_closed copying_not_closed.texi node_in_copying node_in_copying.texi tex_in_copying tex_in_copying.texi -l2h -expand tex -init l2h_tmp_dir.init titlepage_not_closed titlepage_not_closed.texi footnote_not_closed footnote_not_closed.texi caption_not_closed caption_not_closed.texi def_cmd_dble def_cmd_dble.texi style_not_closed_in_table_line style_not_closed_in_table_line.texi style_not_closed_in_cartouche style_not_closed_in_cartouche.texi multitable_too_much_col multitable_too_much_col.texi texi2html-1.82/test/invalid/ignored_not_closed.texi0000644000175000017500000000011511264347126024373 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top texte @ignore This is ignored texi2html-1.82/test/invalid/Makefile.am0000644000175000017500000000143411264347126021701 0ustar flichtenheldflichtenheldEXTRA_DIST = brace_not_closed.texi recursive_copying.texi \ bad_nesting.texi code_not_closed.texi formats_not_closed.texi \ commands_not_closed.texi math_not_closed.texi not_closed_in_menu.texi \ macro_call_not_closed.texi macro_def_not_closed.texi ignored_not_closed.texi \ verb_not_closed.texi tex_not_closed.texi html_not_closed.texi \ verbatim_not_closed.texi copying_not_closed.texi node_in_copying.texi \ tex_in_copying.texi titlepage_not_closed.texi footnote_not_closed.texi \ caption_not_closed.texi def_cmd_dble.texi style_not_closed_in_table_line.texi \ style_not_closed_in_cartouche.texi multitable_too_much_col.texi \ tests.txt res DISTCLEANFILES = l2h_tmp_dir.init tests.log tests.out distclean-local: rm -rf out diffs dist-hook: rm -rf `find $(distdir)/res -name CVS` texi2html-1.82/test/invalid/bad_nesting.texi0000644000175000017500000000075211264347126023017 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename bad_nesting.info @node Top @top Test for bad nestings Tests for environments not matching @quotation A quotation @end cartouche @deffn {Function Reference} print_navigation $filehandle Text @end deftypefun @table @item item line @end vtable @table @emph @item ref @example example @end display @end table @group in group @end table @group in group 2 @end cartouche @cartouche cartouche @end group @cartouche carouche @end float @bye texi2html-1.82/test/contents/0000755000175000017500000000000011264347122020046 5ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/contents_at_begin.texi0000644000175000017500000000034411264347122024427 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename contents_at_begin.info @contents @node Top @top Contents at beginning Content at the beginning. @menu * chapter:: @end menu @node chapter @chapter Chapter 1 The chapter @bye texi2html-1.82/test/contents/no_content.texi0000644000175000017500000000027311264347122023111 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename no_contents.info @node Top @top No ccontent No content. @menu * chapter:: @end menu @node chapter @chapter Chapter 1 The chapter @bye texi2html-1.82/test/contents/inline.init0000644000175000017500000000002611264347122022207 0ustar flichtenheldflichtenheld$INLINE_CONTENTS = 1; texi2html-1.82/test/contents/no_content_setcatpage.texi0000644000175000017500000000034211264347122025306 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename no_contents_setcatpage.info @setcontentsaftertitlepage @node Top @top No ccontent No content. @menu * chapter:: @end menu @node chapter @chapter Chapter 1 The chapter @bye texi2html-1.82/test/contents/Makefile.in0000644000175000017500000002111311264347122022111 0ustar flichtenheldflichtenheld# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = test/contents DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DATE = @PACKAGE_DATE@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ REQUIRE_DATA_DUMPER = @REQUIRE_DATA_DUMPER@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_DATA_DUMPER = @USE_DATA_DUMPER@ USE_UNICODE = @USE_UNICODE@ USE_UNIDECODE = @USE_UNIDECODE@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ am__leading_dot = @am__leading_dot@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = contents_at_begin.texi contents_at_end.texi \ contents_in_middle_chapter.texi contents_in_middle_section.texi \ double_contents.texi double_contents_setcontentsaftertitlepage.texi \ no_content.texi no_content_setcatpage.texi \ do_contents.init inline.init tests.txt res DISTCLEANFILES = l2h_tmp_dir.init tests.log tests.out all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/contents/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu test/contents/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-exec-am: install-html: install-html-am install-info: install-info-am install-man: install-pdf: install-pdf-am install-ps: install-ps-am installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic dist-hook \ distclean distclean-generic distclean-local distdir dvi dvi-am \ html html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am distclean-local: rm -rf out diffs dist-hook: rm -rf `find $(distdir)/res -name CVS` # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: texi2html-1.82/test/contents/res/0000755000175000017500000000000011264347122020637 5ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/contents_at_end/0000755000175000017500000000000011264347122024006 5ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/contents_at_end/contents_at_end.html0000644000175000017500000001601711264347122030050 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Contents at end

    Content at end.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter 1

    The chapter


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/contents_at_end/contents_at_end.20000644000175000017500000000000011264347122027226 0ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/no_content_setcatpage_do_contents/0000755000175000017500000000000011264347122027604 5ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/no_content_setcatpage_do_contents/no_content_setcatpage.html0000644000175000017500000001600311264347122035040 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    No ccontent

    No content.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter 1

    The chapter


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/no_content_setcatpage_do_contents/no_content_setcatpage.20000644000175000017500000000000011264347122034223 0ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/texi_contents_in_middle_chapter/0000755000175000017500000000000011264347122027237 5ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/texi_contents_in_middle_chapter/contents_in_middle_chapter.passtexi0000644000175000017500000000250311264347122036370 0ustar flichtenheldflichtenheldcontents_in_middle_chapter.texi(,2) contents_in_middle_chapter.texi(,3) @setfilename contents_in_middle_chapter.info contents_in_middle_chapter.texi(,4) contents_in_middle_chapter.texi(,5) contents_in_middle_chapter.texi(,6) @node Top contents_in_middle_chapter.texi(,7) @top Contents in chapter contents_in_middle_chapter.texi(,8) contents_in_middle_chapter.texi(,9) Content in chapter. contents_in_middle_chapter.texi(,10) contents_in_middle_chapter.texi(,11) @menu contents_in_middle_chapter.texi(,12) * chapter:: contents_in_middle_chapter.texi(,13) @end menu contents_in_middle_chapter.texi(,14) contents_in_middle_chapter.texi(,15) @node chapter contents_in_middle_chapter.texi(,16) @chapter Chapter 1 contents_in_middle_chapter.texi(,17) contents_in_middle_chapter.texi(,18) The chapter with contents contents_in_middle_chapter.texi(,19) @contents contents_in_middle_chapter.texi(,20) contents_in_middle_chapter.texi(,21) @menu contents_in_middle_chapter.texi(,22) * section:: contents_in_middle_chapter.texi(,23) @end menu contents_in_middle_chapter.texi(,24) contents_in_middle_chapter.texi(,25) @node section contents_in_middle_chapter.texi(,26) @section section contents_in_middle_chapter.texi(,27) contents_in_middle_chapter.texi(,28) Section. contents_in_middle_chapter.texi(,29) contents_in_middle_chapter.texi(,30) @bye texi2html-1.82/test/contents/res/texi_contents_in_middle_chapter/contents_in_middle_chapter.texi0000644000175000017500000000047211264347121035503 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename contents_in_middle_chapter.info @node Top @top Contents in chapter Content in chapter. @menu * chapter:: @end menu @node chapter @chapter Chapter 1 The chapter with contents @contents @menu * section:: @end menu @node section @section section Section. @bye texi2html-1.82/test/contents/res/texi_contents_in_middle_chapter/contents_in_middle_chapter.20000644000175000017500000000000011264347122034657 0ustar flichtenheldflichtenheld././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootroottexi2html-1.82/test/contents/res/texi_contents_in_middle_chapter/contents_in_middle_chapter.passfirsttexi2html-1.82/test/contents/res/texi_contents_in_middle_chapter/contents_in_middle_chapter.passfirs0000644000175000017500000000250311264347122036362 0ustar flichtenheldflichtenheldcontents_in_middle_chapter.texi(,2) contents_in_middle_chapter.texi(,3) @setfilename contents_in_middle_chapter.info contents_in_middle_chapter.texi(,4) contents_in_middle_chapter.texi(,5) contents_in_middle_chapter.texi(,6) @node Top contents_in_middle_chapter.texi(,7) @top Contents in chapter contents_in_middle_chapter.texi(,8) contents_in_middle_chapter.texi(,9) Content in chapter. contents_in_middle_chapter.texi(,10) contents_in_middle_chapter.texi(,11) @menu contents_in_middle_chapter.texi(,12) * chapter:: contents_in_middle_chapter.texi(,13) @end menu contents_in_middle_chapter.texi(,14) contents_in_middle_chapter.texi(,15) @node chapter contents_in_middle_chapter.texi(,16) @chapter Chapter 1 contents_in_middle_chapter.texi(,17) contents_in_middle_chapter.texi(,18) The chapter with contents contents_in_middle_chapter.texi(,19) @contents contents_in_middle_chapter.texi(,20) contents_in_middle_chapter.texi(,21) @menu contents_in_middle_chapter.texi(,22) * section:: contents_in_middle_chapter.texi(,23) @end menu contents_in_middle_chapter.texi(,24) contents_in_middle_chapter.texi(,25) @node section contents_in_middle_chapter.texi(,26) @section section contents_in_middle_chapter.texi(,27) contents_in_middle_chapter.texi(,28) Section. contents_in_middle_chapter.texi(,29) contents_in_middle_chapter.texi(,30) @bye texi2html-1.82/test/contents/res/no_content_do_contents/0000755000175000017500000000000011264347122025404 5ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/no_content_do_contents/no_content.html0000644000175000017500000001600311264347122030440 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    No ccontent

    No content.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter 1

    The chapter


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/no_content_do_contents/no_content.20000644000175000017500000000000011264347122027623 0ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/double_contents_setcontentsaftertitlepage/0000755000175000017500000000000011264347122031400 5ustar flichtenheldflichtenheld././@LongLink0000000000000000000000000000017200000000000011565 Lustar rootroottexi2html-1.82/test/contents/res/double_contents_setcontentsaftertitlepage/double_contents_setcontentsaftertitlepage.htmltexi2html-1.82/test/contents/res/double_contents_setcontentsaftertitlepage/double_contents_setconten0000644000175000017500000002107511264347122036601 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Double contents

    Double contents.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter 1

    The chapter


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 section with contents


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    ././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootroottexi2html-1.82/test/contents/res/double_contents_setcontentsaftertitlepage/double_contents_setcontentsaftertitlepage.2texi2html-1.82/test/contents/res/double_contents_setcontentsaftertitlepage/double_contents_setconten0000644000175000017500000000000011264347122036562 0ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/contents_in_middle_section_inline/0000755000175000017500000000000011264347122027562 5ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/contents_in_middle_section_inline/contents_in_middle_section.20000644000175000017500000000000011264347122035220 0ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/contents_in_middle_section_inline/contents_in_middle_section.html0000644000175000017500000002304611264347122036042 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Contents in section

    Content in section.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter 1


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 section

    The section with contents

    Table of Contents


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2 section 1

    Section 1.


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/no_content_setcatpage/0000755000175000017500000000000011264347122025205 5ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/no_content_setcatpage/no_content_setcatpage.html0000644000175000017500000001441711264347122032450 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    No ccontent

    No content.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter 1

    The chapter


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/no_content_setcatpage/no_content_setcatpage.20000644000175000017500000000000011264347122031624 0ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/double_contents_nodes/0000755000175000017500000000000011264347122025216 5ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/double_contents_nodes/double_contents_2.html0000644000175000017500000000613111264347122031515 0ustar flichtenheldflichtenheld Untitled Document: 1.1 section with contents
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 section with contents


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/double_contents_nodes/double_contents_abt.html0000644000175000017500000001221011264347122032115 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/double_contents_nodes/double_contents_toc.html0000644000175000017500000000577211264347122032153 0ustar flichtenheldflichtenheld Untitled Document: Table of Contents
    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/double_contents_nodes/double_contents_1.html0000644000175000017500000000652411264347122031522 0ustar flichtenheldflichtenheld Untitled Document: 1. Chapter 1
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter 1

    The chapter


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/double_contents_nodes/double_contents.html0000644000175000017500000000576311264347122031306 0ustar flichtenheldflichtenheld Untitled Document: Double contents
    [Top] [Contents] [Index] [ ? ]

    Double contents

    Double contents.


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/double_contents_nodes/double_contents.20000644000175000017500000000000011264347122030456 0ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/double_contents_book/0000755000175000017500000000000011264347122025040 5ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/double_contents_book/double_contents.html0000644000175000017500000001517511264347122031126 0ustar flichtenheldflichtenheld Untitled Document

    Double contents

    Table of Contents

    [Contents] [Index] [ ? ]

    Double contents.


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    1. Chapter 1

    Table of Contents

    The chapter


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    1.1 section with contents

    Table of Contents


    [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/double_contents_book/double_contents.20000644000175000017500000000000011264347122030300 0ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/texi_no_content/0000755000175000017500000000000011264347122024036 5ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/texi_no_content/no_content.texi0000644000175000017500000000027311264347122027101 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename no_contents.info @node Top @top No ccontent No content. @menu * chapter:: @end menu @node chapter @chapter Chapter 1 The chapter @bye texi2html-1.82/test/contents/res/texi_no_content/no_content.passfirst0000644000175000017500000000101511264347122030141 0ustar flichtenheldflichtenheldno_content.texi(,2) no_content.texi(,3) @setfilename no_contents.info no_content.texi(,4) no_content.texi(,5) @node Top no_content.texi(,6) @top No ccontent no_content.texi(,7) no_content.texi(,8) No content. no_content.texi(,9) no_content.texi(,10) @menu no_content.texi(,11) * chapter:: no_content.texi(,12) @end menu no_content.texi(,13) no_content.texi(,14) @node chapter no_content.texi(,15) @chapter Chapter 1 no_content.texi(,16) no_content.texi(,17) The chapter no_content.texi(,18) no_content.texi(,19) @bye texi2html-1.82/test/contents/res/texi_no_content/no_content.20000644000175000017500000000000011264347122026255 0ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/texi_no_content/no_content.passtexi0000644000175000017500000000101511264347122027763 0ustar flichtenheldflichtenheldno_content.texi(,2) no_content.texi(,3) @setfilename no_contents.info no_content.texi(,4) no_content.texi(,5) @node Top no_content.texi(,6) @top No ccontent no_content.texi(,7) no_content.texi(,8) No content. no_content.texi(,9) no_content.texi(,10) @menu no_content.texi(,11) * chapter:: no_content.texi(,12) @end menu no_content.texi(,13) no_content.texi(,14) @node chapter no_content.texi(,15) @chapter Chapter 1 no_content.texi(,16) no_content.texi(,17) The chapter no_content.texi(,18) no_content.texi(,19) @bye texi2html-1.82/test/contents/res/no_content_do_contents_inline/0000755000175000017500000000000011264347122026742 5ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/no_content_do_contents_inline/no_content.html0000644000175000017500000001441711264347122032005 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    No ccontent

    No content.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter 1

    The chapter


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/no_content_do_contents_inline/no_content.20000644000175000017500000000000011264347122031161 0ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/no_content_setcatpage_inline/0000755000175000017500000000000011264347122026543 5ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/no_content_setcatpage_inline/no_content_setcatpage.html0000644000175000017500000001441711264347122034006 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    No ccontent

    No content.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter 1

    The chapter


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/no_content_setcatpage_inline/no_content_setcatpage.20000644000175000017500000000000011264347122033162 0ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/texi_no_content_setcatpage/0000755000175000017500000000000011264347122026236 5ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/texi_no_content_setcatpage/no_content_setcatpage.passtexi0000644000175000017500000000147211264347122034372 0ustar flichtenheldflichtenheldno_content_setcatpage.texi(,2) no_content_setcatpage.texi(,3) @setfilename no_contents_setcatpage.info no_content_setcatpage.texi(,4) no_content_setcatpage.texi(,5) @setcontentsaftertitlepage no_content_setcatpage.texi(,6) no_content_setcatpage.texi(,7) @node Top no_content_setcatpage.texi(,8) @top No ccontent no_content_setcatpage.texi(,9) no_content_setcatpage.texi(,10) No content. no_content_setcatpage.texi(,11) no_content_setcatpage.texi(,12) @menu no_content_setcatpage.texi(,13) * chapter:: no_content_setcatpage.texi(,14) @end menu no_content_setcatpage.texi(,15) no_content_setcatpage.texi(,16) @node chapter no_content_setcatpage.texi(,17) @chapter Chapter 1 no_content_setcatpage.texi(,18) no_content_setcatpage.texi(,19) The chapter no_content_setcatpage.texi(,20) no_content_setcatpage.texi(,21) @bye texi2html-1.82/test/contents/res/texi_no_content_setcatpage/no_content_setcatpage.texi0000644000175000017500000000034211264347122033476 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename no_contents_setcatpage.info @setcontentsaftertitlepage @node Top @top No ccontent No content. @menu * chapter:: @end menu @node chapter @chapter Chapter 1 The chapter @bye texi2html-1.82/test/contents/res/texi_no_content_setcatpage/no_content_setcatpage.passfirst0000644000175000017500000000147211264347122034550 0ustar flichtenheldflichtenheldno_content_setcatpage.texi(,2) no_content_setcatpage.texi(,3) @setfilename no_contents_setcatpage.info no_content_setcatpage.texi(,4) no_content_setcatpage.texi(,5) @setcontentsaftertitlepage no_content_setcatpage.texi(,6) no_content_setcatpage.texi(,7) @node Top no_content_setcatpage.texi(,8) @top No ccontent no_content_setcatpage.texi(,9) no_content_setcatpage.texi(,10) No content. no_content_setcatpage.texi(,11) no_content_setcatpage.texi(,12) @menu no_content_setcatpage.texi(,13) * chapter:: no_content_setcatpage.texi(,14) @end menu no_content_setcatpage.texi(,15) no_content_setcatpage.texi(,16) @node chapter no_content_setcatpage.texi(,17) @chapter Chapter 1 no_content_setcatpage.texi(,18) no_content_setcatpage.texi(,19) The chapter no_content_setcatpage.texi(,20) no_content_setcatpage.texi(,21) @bye texi2html-1.82/test/contents/res/texi_no_content_setcatpage/no_content_setcatpage.20000644000175000017500000000000011264347122032655 0ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/double_contents_section/0000755000175000017500000000000011264347121025551 5ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/double_contents_section/double_contents_2.html0000644000175000017500000000725211264347121032055 0ustar flichtenheldflichtenheld Untitled Document: 1.1 section with contents
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 section with contents


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/double_contents_section/double_contents_abt.html0000644000175000017500000001217211264347121032457 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/double_contents_section/double_contents_toc.html0000644000175000017500000000575411264347121032506 0ustar flichtenheldflichtenheld Untitled Document: Table of Contents
    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/double_contents_section/double_contents_1.html0000644000175000017500000000774611264347121032064 0ustar flichtenheldflichtenheld Untitled Document: 1. Chapter 1
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter 1

    The chapter


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/double_contents_section/double_contents.html0000644000175000017500000000574511264347121031641 0ustar flichtenheldflichtenheld Untitled Document: Double contents
    [Top] [Contents] [Index] [ ? ]

    Double contents

    Double contents.


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/double_contents_section/double_contents.20000644000175000017500000000000011264347121031011 0ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/texi_contents_in_middle_section/0000755000175000017500000000000011264347122027255 5ustar flichtenheldflichtenheld././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootroottexi2html-1.82/test/contents/res/texi_contents_in_middle_section/contents_in_middle_section.passfirsttexi2html-1.82/test/contents/res/texi_contents_in_middle_section/contents_in_middle_section.passfirs0000644000175000017500000000305711264347122036423 0ustar flichtenheldflichtenheldcontents_in_middle_section.texi(,2) contents_in_middle_section.texi(,3) @setfilename contents_in_middle_section.info contents_in_middle_section.texi(,4) contents_in_middle_section.texi(,5) contents_in_middle_section.texi(,6) @node Top contents_in_middle_section.texi(,7) @top Contents in section contents_in_middle_section.texi(,8) contents_in_middle_section.texi(,9) Content in section. contents_in_middle_section.texi(,10) contents_in_middle_section.texi(,11) @menu contents_in_middle_section.texi(,12) * chapter:: contents_in_middle_section.texi(,13) @end menu contents_in_middle_section.texi(,14) contents_in_middle_section.texi(,15) @node chapter contents_in_middle_section.texi(,16) @chapter Chapter 1 contents_in_middle_section.texi(,17) contents_in_middle_section.texi(,18) contents_in_middle_section.texi(,19) @menu contents_in_middle_section.texi(,20) * section:: contents_in_middle_section.texi(,21) * section1:: contents_in_middle_section.texi(,22) @end menu contents_in_middle_section.texi(,23) contents_in_middle_section.texi(,24) @node section contents_in_middle_section.texi(,25) @section section contents_in_middle_section.texi(,26) contents_in_middle_section.texi(,27) The section with contents contents_in_middle_section.texi(,28) @contents contents_in_middle_section.texi(,29) contents_in_middle_section.texi(,30) @node section1 contents_in_middle_section.texi(,31) @section section 1 contents_in_middle_section.texi(,32) contents_in_middle_section.texi(,33) Section 1. contents_in_middle_section.texi(,34) contents_in_middle_section.texi(,35) @bye texi2html-1.82/test/contents/res/texi_contents_in_middle_section/contents_in_middle_section.20000644000175000017500000000000011264347122034713 0ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/texi_contents_in_middle_section/contents_in_middle_section.passtexi0000644000175000017500000000305711264347122036431 0ustar flichtenheldflichtenheldcontents_in_middle_section.texi(,2) contents_in_middle_section.texi(,3) @setfilename contents_in_middle_section.info contents_in_middle_section.texi(,4) contents_in_middle_section.texi(,5) contents_in_middle_section.texi(,6) @node Top contents_in_middle_section.texi(,7) @top Contents in section contents_in_middle_section.texi(,8) contents_in_middle_section.texi(,9) Content in section. contents_in_middle_section.texi(,10) contents_in_middle_section.texi(,11) @menu contents_in_middle_section.texi(,12) * chapter:: contents_in_middle_section.texi(,13) @end menu contents_in_middle_section.texi(,14) contents_in_middle_section.texi(,15) @node chapter contents_in_middle_section.texi(,16) @chapter Chapter 1 contents_in_middle_section.texi(,17) contents_in_middle_section.texi(,18) contents_in_middle_section.texi(,19) @menu contents_in_middle_section.texi(,20) * section:: contents_in_middle_section.texi(,21) * section1:: contents_in_middle_section.texi(,22) @end menu contents_in_middle_section.texi(,23) contents_in_middle_section.texi(,24) @node section contents_in_middle_section.texi(,25) @section section contents_in_middle_section.texi(,26) contents_in_middle_section.texi(,27) The section with contents contents_in_middle_section.texi(,28) @contents contents_in_middle_section.texi(,29) contents_in_middle_section.texi(,30) @node section1 contents_in_middle_section.texi(,31) @section section 1 contents_in_middle_section.texi(,32) contents_in_middle_section.texi(,33) Section 1. contents_in_middle_section.texi(,34) contents_in_middle_section.texi(,35) @bye texi2html-1.82/test/contents/res/texi_contents_in_middle_section/contents_in_middle_section.texi0000644000175000017500000000055511264347122035542 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename contents_in_middle_section.info @node Top @top Contents in section Content in section. @menu * chapter:: @end menu @node chapter @chapter Chapter 1 @menu * section:: * section1:: @end menu @node section @section section The section with contents @contents @node section1 @section section 1 Section 1. @bye texi2html-1.82/test/contents/res/double_contents_inline/0000755000175000017500000000000011264347122025364 5ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/double_contents_inline/double_contents.html0000644000175000017500000002136511264347122031450 0ustar flichtenheldflichtenheld Untitled Document

    Table of Contents

    [Top] [Contents] [Index] [ ? ]

    Double contents

    Double contents.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter 1

    Table of Contents

    The chapter


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 section with contents

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/double_contents_inline/double_contents.20000644000175000017500000000000011264347122030624 0ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/double_contents/0000755000175000017500000000000011264347122024026 5ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/double_contents/double_contents.html0000644000175000017500000002107511264347122030110 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Double contents

    Double contents.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter 1

    The chapter


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 section with contents


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/double_contents/double_contents.20000644000175000017500000000000011264347122027266 0ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/contents_at_begin_inline/0000755000175000017500000000000011264347122025662 5ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/contents_at_begin_inline/contents_at_begin.html0000644000175000017500000001520511264347122032240 0ustar flichtenheldflichtenheld Untitled Document

    Table of Contents

    [Top] [Contents] [Index] [ ? ]

    Contents at beginning

    Content at the beginning.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter 1

    The chapter


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/contents_at_begin_inline/contents_at_begin.20000644000175000017500000000000011264347122031420 0ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/double_contents_inline_section/0000755000175000017500000000000011264347122027110 5ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/double_contents_inline_section/double_contents_2.html0000644000175000017500000000772411264347122033420 0ustar flichtenheldflichtenheld Untitled Document: 1.1 section with contents
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 section with contents

    Table of Contents


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/double_contents_inline_section/double_contents_abt.html0000644000175000017500000001216611264347122034021 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/double_contents_inline_section/double_contents_1.html0000644000175000017500000001044611264347122033412 0ustar flichtenheldflichtenheld Untitled Document: 1. Chapter 1
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter 1

    Table of Contents

    The chapter


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/double_contents_inline_section/double_contents.html0000644000175000017500000000644411264347122033175 0ustar flichtenheldflichtenheld Untitled Document: Double contents

    Table of Contents

    [Top] [Contents] [Index] [ ? ]

    Double contents

    Double contents.


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/double_contents_inline_section/double_contents.20000644000175000017500000000000011264347122032350 0ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/contents_in_middle_chapter_inline/0000755000175000017500000000000011264347122027544 5ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/contents_in_middle_chapter_inline/contents_in_middle_chapter.html0000644000175000017500000002020411264347122035777 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Contents in chapter

    Content in chapter.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter 1

    The chapter with contents

    Table of Contents


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 section

    Section.


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/contents_in_middle_chapter_inline/contents_in_middle_chapter.20000644000175000017500000000000011264347122035164 0ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/no_content/0000755000175000017500000000000011264347122023005 5ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/no_content/no_content.html0000644000175000017500000001441711264347122026050 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    No ccontent

    No content.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter 1

    The chapter


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/no_content/no_content.20000644000175000017500000000000011264347122025224 0ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/double_contents_setcontentsaftertitlepage_book/0000755000175000017500000000000011264347122032412 5ustar flichtenheldflichtenheld././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootroottexi2html-1.82/test/contents/res/double_contents_setcontentsaftertitlepage_book/double_contents_setcontentsaftertitlepage.htmltexi2html-1.82/test/contents/res/double_contents_setcontentsaftertitlepage_book/double_contents_setc0000644000175000017500000001405111264347122036543 0ustar flichtenheldflichtenheld Untitled Document

    Table of Contents


    Double contents

    [Contents] [Index] [ ? ]

    Double contents.


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    1. Chapter 1

    The chapter


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    1.1 section with contents


    [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    ././@LongLink0000000000000000000000000000017400000000000011567 Lustar rootroottexi2html-1.82/test/contents/res/double_contents_setcontentsaftertitlepage_book/double_contents_setcontentsaftertitlepage.2texi2html-1.82/test/contents/res/double_contents_setcontentsaftertitlepage_book/double_contents_setc0000644000175000017500000000000011264347122036530 0ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/contents_at_end_inline/0000755000175000017500000000000011264347122025344 5ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/contents_at_end_inline/contents_at_end.html0000644000175000017500000001515611264347122031411 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Contents at end

    Content at end.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter 1

    The chapter

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/contents_at_end_inline/contents_at_end.20000644000175000017500000000000011264347122030564 0ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/contents_at_begin/0000755000175000017500000000000011264347122024324 5ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/contents_at_begin/contents_at_begin.html0000644000175000017500000001604511264347122030705 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Contents at beginning

    Content at the beginning.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter 1

    The chapter


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/contents_at_begin/contents_at_begin.20000644000175000017500000000000011264347122030062 0ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/double_contents_inline_nodes/0000755000175000017500000000000011264347122026554 5ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/double_contents_inline_nodes/double_contents_2.html0000644000175000017500000000660311264347122033057 0ustar flichtenheldflichtenheld Untitled Document: 1.1 section with contents
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 section with contents

    Table of Contents


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/double_contents_inline_nodes/double_contents_abt.html0000644000175000017500000001220411264347122033456 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/double_contents_inline_nodes/double_contents_1.html0000644000175000017500000000722411264347122033056 0ustar flichtenheldflichtenheld Untitled Document: 1. Chapter 1
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter 1

    Table of Contents

    The chapter


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/double_contents_inline_nodes/double_contents.html0000644000175000017500000000646211264347122032641 0ustar flichtenheldflichtenheld Untitled Document: Double contents

    Table of Contents

    [Top] [Contents] [Index] [ ? ]

    Double contents

    Double contents.


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/double_contents_inline_nodes/double_contents.20000644000175000017500000000000011264347122032014 0ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/double_contents_chapter/0000755000175000017500000000000011264347122025534 5ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/double_contents_chapter/double_contents_abt.html0000644000175000017500000001217211264347122032442 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/double_contents_chapter/double_contents_toc.html0000644000175000017500000000575411264347122032471 0ustar flichtenheldflichtenheld Untitled Document: Table of Contents
    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/double_contents_chapter/double_contents_1.html0000644000175000017500000001257011264347122032036 0ustar flichtenheldflichtenheld Untitled Document: 1. Chapter 1
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter 1

    The chapter


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 section with contents


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/double_contents_chapter/double_contents.html0000644000175000017500000000574511264347122031624 0ustar flichtenheldflichtenheld Untitled Document: Double contents
    [Top] [Contents] [Index] [ ? ]

    Double contents

    Double contents.


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/double_contents_chapter/double_contents.20000644000175000017500000000000011264347122030774 0ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/no_content_setcatpage_do_contents_inline/0000755000175000017500000000000011264347122031142 5ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/no_content_setcatpage_do_contents_inline/no_content_setcatpage.html0000644000175000017500000001466111264347122036406 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    No ccontent

    No content.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter 1

    The chapter


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/no_content_setcatpage_do_contents_inline/no_content_setcatpage.20000644000175000017500000000000011264347122035561 0ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/texi_double_contents/0000755000175000017500000000000011264347122025057 5ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/texi_double_contents/double_contents.passfirst0000644000175000017500000000177411264347122032217 0ustar flichtenheldflichtenhelddouble_contents.texi(,2) double_contents.texi(,3) @setfilename double_contents.info double_contents.texi(,4) double_contents.texi(,5) @contents double_contents.texi(,6) double_contents.texi(,7) @node Top double_contents.texi(,8) @top Double contents double_contents.texi(,9) double_contents.texi(,10) Double contents. double_contents.texi(,11) double_contents.texi(,12) @menu double_contents.texi(,13) * chapter:: double_contents.texi(,14) @end menu double_contents.texi(,15) double_contents.texi(,16) @node chapter double_contents.texi(,17) @chapter Chapter 1 double_contents.texi(,18) double_contents.texi(,19) @contents double_contents.texi(,20) The chapter double_contents.texi(,21) double_contents.texi(,22) @menu double_contents.texi(,23) * section:: double_contents.texi(,24) @end menu double_contents.texi(,25) double_contents.texi(,26) @node section double_contents.texi(,27) @section section with contents double_contents.texi(,28) @contents double_contents.texi(,29) double_contents.texi(,30) @bye texi2html-1.82/test/contents/res/texi_double_contents/double_contents.20000644000175000017500000000000011264347122030317 0ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/texi_double_contents/double_contents.passtexi0000644000175000017500000000177411264347122032041 0ustar flichtenheldflichtenhelddouble_contents.texi(,2) double_contents.texi(,3) @setfilename double_contents.info double_contents.texi(,4) double_contents.texi(,5) @contents double_contents.texi(,6) double_contents.texi(,7) @node Top double_contents.texi(,8) @top Double contents double_contents.texi(,9) double_contents.texi(,10) Double contents. double_contents.texi(,11) double_contents.texi(,12) @menu double_contents.texi(,13) * chapter:: double_contents.texi(,14) @end menu double_contents.texi(,15) double_contents.texi(,16) @node chapter double_contents.texi(,17) @chapter Chapter 1 double_contents.texi(,18) double_contents.texi(,19) @contents double_contents.texi(,20) The chapter double_contents.texi(,21) double_contents.texi(,22) @menu double_contents.texi(,23) * section:: double_contents.texi(,24) @end menu double_contents.texi(,25) double_contents.texi(,26) @node section double_contents.texi(,27) @section section with contents double_contents.texi(,28) @contents double_contents.texi(,29) double_contents.texi(,30) @bye texi2html-1.82/test/contents/res/texi_double_contents/double_contents.texi0000644000175000017500000000046211264347122031143 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename double_contents.info @contents @node Top @top Double contents Double contents. @menu * chapter:: @end menu @node chapter @chapter Chapter 1 @contents The chapter @menu * section:: @end menu @node section @section section with contents @contents @bye texi2html-1.82/test/contents/res/no_content_inline/0000755000175000017500000000000011264347122024343 5ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/no_content_inline/no_content.html0000644000175000017500000001441711264347122027406 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    No ccontent

    No content.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter 1

    The chapter


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/no_content_inline/no_content.20000644000175000017500000000000011264347122026562 0ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/double_contents_inline_chapter/0000755000175000017500000000000011264347122027072 5ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/double_contents_inline_chapter/double_contents_abt.html0000644000175000017500000001216611264347122034003 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/double_contents_inline_chapter/double_contents_1.html0000644000175000017500000001361011264347122033370 0ustar flichtenheldflichtenheld Untitled Document: 1. Chapter 1
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter 1

    Table of Contents

    The chapter


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 section with contents

    Table of Contents


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/double_contents_inline_chapter/double_contents.html0000644000175000017500000000641611264347122033156 0ustar flichtenheldflichtenheld Untitled Document: Double contents

    Table of Contents

    [Top] [Contents] [Index] [ ? ]

    Double contents

    Double contents.


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/double_contents_inline_chapter/double_contents.20000644000175000017500000000000011264347122032332 0ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/texi_contents_at_end/0000755000175000017500000000000011264347122025037 5ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/texi_contents_at_end/contents_at_end.passfirst0000644000175000017500000000126211264347122032147 0ustar flichtenheldflichtenheldcontents_at_end.texi(,2) contents_at_end.texi(,3) @setfilename contents_at_end.info contents_at_end.texi(,4) contents_at_end.texi(,5) contents_at_end.texi(,6) @node Top contents_at_end.texi(,7) @top Contents at end contents_at_end.texi(,8) contents_at_end.texi(,9) Content at end. contents_at_end.texi(,10) contents_at_end.texi(,11) @menu contents_at_end.texi(,12) * chapter:: contents_at_end.texi(,13) @end menu contents_at_end.texi(,14) contents_at_end.texi(,15) @node chapter contents_at_end.texi(,16) @chapter Chapter 1 contents_at_end.texi(,17) contents_at_end.texi(,18) The chapter contents_at_end.texi(,19) contents_at_end.texi(,20) @contents contents_at_end.texi(,21) @bye texi2html-1.82/test/contents/res/texi_contents_at_end/contents_at_end.20000644000175000017500000000000011264347122030257 0ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/texi_contents_at_end/contents_at_end.texi0000644000175000017500000000032211264347122031076 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename contents_at_end.info @node Top @top Contents at end Content at end. @menu * chapter:: @end menu @node chapter @chapter Chapter 1 The chapter @contents @bye texi2html-1.82/test/contents/res/texi_contents_at_end/contents_at_end.passtexi0000644000175000017500000000126211264347122031771 0ustar flichtenheldflichtenheldcontents_at_end.texi(,2) contents_at_end.texi(,3) @setfilename contents_at_end.info contents_at_end.texi(,4) contents_at_end.texi(,5) contents_at_end.texi(,6) @node Top contents_at_end.texi(,7) @top Contents at end contents_at_end.texi(,8) contents_at_end.texi(,9) Content at end. contents_at_end.texi(,10) contents_at_end.texi(,11) @menu contents_at_end.texi(,12) * chapter:: contents_at_end.texi(,13) @end menu contents_at_end.texi(,14) contents_at_end.texi(,15) @node chapter contents_at_end.texi(,16) @chapter Chapter 1 contents_at_end.texi(,17) contents_at_end.texi(,18) The chapter contents_at_end.texi(,19) contents_at_end.texi(,20) @contents contents_at_end.texi(,21) @bye texi2html-1.82/test/contents/res/texi_double_contents_setcontentsaftertitlepage/0000755000175000017500000000000011264347122032431 5ustar flichtenheldflichtenheld././@LongLink0000000000000000000000000000017400000000000011567 Lustar rootroottexi2html-1.82/test/contents/res/texi_double_contents_setcontentsaftertitlepage/double_contents_setcontentsaftertitlepage.2texi2html-1.82/test/contents/res/texi_double_contents_setcontentsaftertitlepage/double_contents_setc0000644000175000017500000000000011264347122036547 0ustar flichtenheldflichtenheld././@LongLink0000000000000000000000000000020300000000000011560 Lustar rootroottexi2html-1.82/test/contents/res/texi_double_contents_setcontentsaftertitlepage/double_contents_setcontentsaftertitlepage.passtexitexi2html-1.82/test/contents/res/texi_double_contents_setcontentsaftertitlepage/double_contents_setc0000644000175000017500000000352711264347122036570 0ustar flichtenheldflichtenhelddouble_contents_setcontentsaftertitlepage.texi(,2) double_contents_setcontentsaftertitlepage.texi(,3) @setfilename double_contents_setcontentsaftertitlepage.info double_contents_setcontentsaftertitlepage.texi(,4) double_contents_setcontentsaftertitlepage.texi(,5) @contents double_contents_setcontentsaftertitlepage.texi(,6) @setcontentsaftertitlepage double_contents_setcontentsaftertitlepage.texi(,7) double_contents_setcontentsaftertitlepage.texi(,8) @node Top double_contents_setcontentsaftertitlepage.texi(,9) @top Double contents double_contents_setcontentsaftertitlepage.texi(,10) double_contents_setcontentsaftertitlepage.texi(,11) Double contents. double_contents_setcontentsaftertitlepage.texi(,12) double_contents_setcontentsaftertitlepage.texi(,13) @menu double_contents_setcontentsaftertitlepage.texi(,14) * chapter:: double_contents_setcontentsaftertitlepage.texi(,15) @end menu double_contents_setcontentsaftertitlepage.texi(,16) double_contents_setcontentsaftertitlepage.texi(,17) @node chapter double_contents_setcontentsaftertitlepage.texi(,18) @chapter Chapter 1 double_contents_setcontentsaftertitlepage.texi(,19) double_contents_setcontentsaftertitlepage.texi(,20) @contents double_contents_setcontentsaftertitlepage.texi(,21) The chapter double_contents_setcontentsaftertitlepage.texi(,22) double_contents_setcontentsaftertitlepage.texi(,23) @menu double_contents_setcontentsaftertitlepage.texi(,24) * section:: double_contents_setcontentsaftertitlepage.texi(,25) @end menu double_contents_setcontentsaftertitlepage.texi(,26) double_contents_setcontentsaftertitlepage.texi(,27) @node section double_contents_setcontentsaftertitlepage.texi(,28) @section section with contents double_contents_setcontentsaftertitlepage.texi(,29) @contents double_contents_setcontentsaftertitlepage.texi(,30) double_contents_setcontentsaftertitlepage.texi(,31) @bye ././@LongLink0000000000000000000000000000017700000000000011572 Lustar rootroottexi2html-1.82/test/contents/res/texi_double_contents_setcontentsaftertitlepage/double_contents_setcontentsaftertitlepage.texitexi2html-1.82/test/contents/res/texi_double_contents_setcontentsaftertitlepage/double_contents_setc0000644000175000017500000000054711264347122036567 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename double_contents_setcontentsaftertitlepage.info @contents @setcontentsaftertitlepage @node Top @top Double contents Double contents. @menu * chapter:: @end menu @node chapter @chapter Chapter 1 @contents The chapter @menu * section:: @end menu @node section @section section with contents @contents @bye ././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootroottexi2html-1.82/test/contents/res/texi_double_contents_setcontentsaftertitlepage/double_contents_setcontentsaftertitlepage.passfirsttexi2html-1.82/test/contents/res/texi_double_contents_setcontentsaftertitlepage/double_contents_setc0000644000175000017500000000352711264347122036570 0ustar flichtenheldflichtenhelddouble_contents_setcontentsaftertitlepage.texi(,2) double_contents_setcontentsaftertitlepage.texi(,3) @setfilename double_contents_setcontentsaftertitlepage.info double_contents_setcontentsaftertitlepage.texi(,4) double_contents_setcontentsaftertitlepage.texi(,5) @contents double_contents_setcontentsaftertitlepage.texi(,6) @setcontentsaftertitlepage double_contents_setcontentsaftertitlepage.texi(,7) double_contents_setcontentsaftertitlepage.texi(,8) @node Top double_contents_setcontentsaftertitlepage.texi(,9) @top Double contents double_contents_setcontentsaftertitlepage.texi(,10) double_contents_setcontentsaftertitlepage.texi(,11) Double contents. double_contents_setcontentsaftertitlepage.texi(,12) double_contents_setcontentsaftertitlepage.texi(,13) @menu double_contents_setcontentsaftertitlepage.texi(,14) * chapter:: double_contents_setcontentsaftertitlepage.texi(,15) @end menu double_contents_setcontentsaftertitlepage.texi(,16) double_contents_setcontentsaftertitlepage.texi(,17) @node chapter double_contents_setcontentsaftertitlepage.texi(,18) @chapter Chapter 1 double_contents_setcontentsaftertitlepage.texi(,19) double_contents_setcontentsaftertitlepage.texi(,20) @contents double_contents_setcontentsaftertitlepage.texi(,21) The chapter double_contents_setcontentsaftertitlepage.texi(,22) double_contents_setcontentsaftertitlepage.texi(,23) @menu double_contents_setcontentsaftertitlepage.texi(,24) * section:: double_contents_setcontentsaftertitlepage.texi(,25) @end menu double_contents_setcontentsaftertitlepage.texi(,26) double_contents_setcontentsaftertitlepage.texi(,27) @node section double_contents_setcontentsaftertitlepage.texi(,28) @section section with contents double_contents_setcontentsaftertitlepage.texi(,29) @contents double_contents_setcontentsaftertitlepage.texi(,30) double_contents_setcontentsaftertitlepage.texi(,31) @bye texi2html-1.82/test/contents/res/double_contents_setcontentsaftertitlepage_inline/0000755000175000017500000000000011264347122032736 5ustar flichtenheldflichtenheld././@LongLink0000000000000000000000000000020100000000000011556 Lustar rootroottexi2html-1.82/test/contents/res/double_contents_setcontentsaftertitlepage_inline/double_contents_setcontentsaftertitlepage.htmltexi2html-1.82/test/contents/res/double_contents_setcontentsaftertitlepage_inline/double_contents_se0000644000175000017500000001756011264347122036550 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Double contents

    Double contents.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter 1

    The chapter


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 section with contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    ././@LongLink0000000000000000000000000000017600000000000011571 Lustar rootroottexi2html-1.82/test/contents/res/double_contents_setcontentsaftertitlepage_inline/double_contents_setcontentsaftertitlepage.2texi2html-1.82/test/contents/res/double_contents_setcontentsaftertitlepage_inline/double_contents_se0000644000175000017500000000000011264347122036525 0ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/contents_in_middle_chapter/0000755000175000017500000000000011264347122026206 5ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/contents_in_middle_chapter/contents_in_middle_chapter.html0000644000175000017500000002104511264347122034445 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Contents in chapter

    Content in chapter.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter 1

    The chapter with contents


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 section

    Section.


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/contents_in_middle_chapter/contents_in_middle_chapter.20000644000175000017500000000000011264347122033626 0ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/contents_in_middle_section/0000755000175000017500000000000011264347122026224 5ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/contents_in_middle_section/contents_in_middle_section.20000644000175000017500000000000011264347122033662 0ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/contents_in_middle_section/contents_in_middle_section.html0000644000175000017500000002370711264347122034510 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Contents in section

    Content in section.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter 1


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 section

    The section with contents


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2 section 1

    Section 1.


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/double_contents_setcontentsaftertitlepage_book_chapter/0000755000175000017500000000000011264347121034117 5ustar flichtenheldflichtenheld././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootroottexi2html-1.82/test/contents/res/double_contents_setcontentsaftertitlepage_book_chapter/double_contents_setcontentsaftertitlepage_top.htmltexi2html-1.82/test/contents/res/double_contents_setcontentsaftertitlepage_book_chapter/double_conte0000644000175000017500000000574411264347121036516 0ustar flichtenheldflichtenheld Untitled Document: Double contents

    Table of Contents


    Double contents

    [Contents] [Index] [ ? ]

    Double contents.


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    ././@LongLink0000000000000000000000000000020400000000000011561 Lustar rootroottexi2html-1.82/test/contents/res/double_contents_setcontentsaftertitlepage_book_chapter/double_contents_setcontentsaftertitlepage.2texi2html-1.82/test/contents/res/double_contents_setcontentsaftertitlepage_book_chapter/double_conte0000644000175000017500000000000011264347121036472 0ustar flichtenheldflichtenheld././@LongLink0000000000000000000000000000021100000000000011557 Lustar rootroottexi2html-1.82/test/contents/res/double_contents_setcontentsaftertitlepage_book_chapter/double_contents_setcontentsaftertitlepage_1.htmltexi2html-1.82/test/contents/res/double_contents_setcontentsaftertitlepage_book_chapter/double_conte0000644000175000017500000000770411264347121036514 0ustar flichtenheldflichtenheld Untitled Document: 1. Chapter 1
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    1. Chapter 1

    The chapter


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    1.1 section with contents


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    ././@LongLink0000000000000000000000000000021300000000000011561 Lustar rootroottexi2html-1.82/test/contents/res/double_contents_setcontentsaftertitlepage_book_chapter/double_contents_setcontentsaftertitlepage_abt.htmltexi2html-1.82/test/contents/res/double_contents_setcontentsaftertitlepage_book_chapter/double_conte0000644000175000017500000001060611264347121036507 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/contents/res/texi_contents_at_begin/0000755000175000017500000000000011264347122025355 5ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/res/texi_contents_at_begin/contents_at_begin.texi0000644000175000017500000000034411264347122031736 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename contents_at_begin.info @contents @node Top @top Contents at beginning Content at the beginning. @menu * chapter:: @end menu @node chapter @chapter Chapter 1 The chapter @bye texi2html-1.82/test/contents/res/texi_contents_at_begin/contents_at_begin.passfirst0000644000175000017500000000135411264347122033005 0ustar flichtenheldflichtenheldcontents_at_begin.texi(,2) contents_at_begin.texi(,3) @setfilename contents_at_begin.info contents_at_begin.texi(,4) contents_at_begin.texi(,5) @contents contents_at_begin.texi(,6) contents_at_begin.texi(,7) @node Top contents_at_begin.texi(,8) @top Contents at beginning contents_at_begin.texi(,9) contents_at_begin.texi(,10) Content at the beginning. contents_at_begin.texi(,11) contents_at_begin.texi(,12) @menu contents_at_begin.texi(,13) * chapter:: contents_at_begin.texi(,14) @end menu contents_at_begin.texi(,15) contents_at_begin.texi(,16) @node chapter contents_at_begin.texi(,17) @chapter Chapter 1 contents_at_begin.texi(,18) contents_at_begin.texi(,19) The chapter contents_at_begin.texi(,20) contents_at_begin.texi(,21) @bye texi2html-1.82/test/contents/res/texi_contents_at_begin/contents_at_begin.passtexi0000644000175000017500000000135411264347122032627 0ustar flichtenheldflichtenheldcontents_at_begin.texi(,2) contents_at_begin.texi(,3) @setfilename contents_at_begin.info contents_at_begin.texi(,4) contents_at_begin.texi(,5) @contents contents_at_begin.texi(,6) contents_at_begin.texi(,7) @node Top contents_at_begin.texi(,8) @top Contents at beginning contents_at_begin.texi(,9) contents_at_begin.texi(,10) Content at the beginning. contents_at_begin.texi(,11) contents_at_begin.texi(,12) @menu contents_at_begin.texi(,13) * chapter:: contents_at_begin.texi(,14) @end menu contents_at_begin.texi(,15) contents_at_begin.texi(,16) @node chapter contents_at_begin.texi(,17) @chapter Chapter 1 contents_at_begin.texi(,18) contents_at_begin.texi(,19) The chapter contents_at_begin.texi(,20) contents_at_begin.texi(,21) @bye texi2html-1.82/test/contents/res/texi_contents_at_begin/contents_at_begin.20000644000175000017500000000000011264347122031113 0ustar flichtenheldflichtenheldtexi2html-1.82/test/contents/contents_in_middle_chapter.texi0000644000175000017500000000047211264347122026313 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename contents_in_middle_chapter.info @node Top @top Contents in chapter Content in chapter. @menu * chapter:: @end menu @node chapter @chapter Chapter 1 The chapter with contents @contents @menu * section:: @end menu @node section @section section Section. @bye texi2html-1.82/test/contents/double_contents_setcontentsaftertitlepage.texi0000644000175000017500000000054711264347122031510 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename double_contents_setcontentsaftertitlepage.info @contents @setcontentsaftertitlepage @node Top @top Double contents Double contents. @menu * chapter:: @end menu @node chapter @chapter Chapter 1 @contents The chapter @menu * section:: @end menu @node section @section section with contents @contents @bye texi2html-1.82/test/contents/do_contents.init0000644000175000017500000000002211264347122023244 0ustar flichtenheldflichtenheld$DO_CONTENTS = 1; texi2html-1.82/test/contents/tests.txt0000644000175000017500000000443111264347122021753 0ustar flichtenheldflichtenheldtexi contents_at_begin.texi texi contents_at_end.texi texi contents_in_middle_chapter.texi texi contents_in_middle_section.texi texi double_contents.texi texi double_contents_setcontentsaftertitlepage.texi texi no_content.texi texi no_content_setcatpage.texi contents_at_begin contents_at_begin.texi contents_at_end contents_at_end.texi contents_in_middle_chapter contents_in_middle_chapter.texi contents_in_middle_section contents_in_middle_section.texi double_contents double_contents.texi double_contents_setcontentsaftertitlepage double_contents_setcontentsaftertitlepage.texi double_contents_chapter double_contents.texi --split chapter double_contents_section double_contents.texi --split section double_contents_nodes double_contents.texi --split node no_content no_content.texi no_content_do_contents no_content.texi -init do_contents.init no_content_setcatpage no_content_setcatpage.texi no_content_setcatpage_do_contents no_content_setcatpage.texi -init do_contents.init contents_at_begin_inline contents_at_begin.texi -init inline.init contents_at_end_inline contents_at_end.texi -init inline.init contents_in_middle_chapter_inline contents_in_middle_chapter.texi -init inline.init contents_in_middle_section_inline contents_in_middle_section.texi -init inline.init double_contents_inline double_contents.texi -init inline.init double_contents_setcontentsaftertitlepage_inline double_contents_setcontentsaftertitlepage.texi -init inline.init double_contents_inline_chapter double_contents.texi -init inline.init --split chapter double_contents_inline_section double_contents.texi -init inline.init --split section double_contents_inline_nodes double_contents.texi -init inline.init --split node no_content_inline no_content.texi -init inline.init no_content_do_contents_inline no_content.texi -init inline.init -init do_contents.init no_content_setcatpage_inline no_content_setcatpage.texi -init inline.init no_content_setcatpage_do_contents_inline no_content_setcatpage.texi -init inline.init -init do_contents.init double_contents_book double_contents.texi -init book.init double_contents_setcontentsaftertitlepage_book double_contents_setcontentsaftertitlepage.texi -init book.init double_contents_setcontentsaftertitlepage_book_chapter double_contents_setcontentsaftertitlepage.texi -init book.init -split chapter texi2html-1.82/test/contents/contents_in_middle_section.texi0000644000175000017500000000055511264347122026333 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename contents_in_middle_section.info @node Top @top Contents in section Content in section. @menu * chapter:: @end menu @node chapter @chapter Chapter 1 @menu * section:: * section1:: @end menu @node section @section section The section with contents @contents @node section1 @section section 1 Section 1. @bye texi2html-1.82/test/contents/contents_at_end.texi0000644000175000017500000000032211264347122024105 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename contents_at_end.info @node Top @top Contents at end Content at end. @menu * chapter:: @end menu @node chapter @chapter Chapter 1 The chapter @contents @bye texi2html-1.82/test/contents/double_contents.texi0000644000175000017500000000046211264347122024132 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename double_contents.info @contents @node Top @top Double contents Double contents. @menu * chapter:: @end menu @node chapter @chapter Chapter 1 @contents The chapter @menu * section:: @end menu @node section @section section with contents @contents @bye texi2html-1.82/test/contents/Makefile.am0000644000175000017500000000065611264347122022111 0ustar flichtenheldflichtenheldEXTRA_DIST = contents_at_begin.texi contents_at_end.texi \ contents_in_middle_chapter.texi contents_in_middle_section.texi \ double_contents.texi double_contents_setcontentsaftertitlepage.texi \ no_content.texi no_content_setcatpage.texi \ do_contents.init inline.init tests.txt res DISTCLEANFILES = l2h_tmp_dir.init tests.log tests.out distclean-local: rm -rf out diffs dist-hook: rm -rf `find $(distdir)/res -name CVS` texi2html-1.82/test/encodings/0000755000175000017500000000000011264347120020160 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/weird_accents.texi0000644000175000017500000000036411264347117023676 0ustar flichtenheldflichtenheld\input texinfo @setfilename accentenc.info @settitle Complex accent encoding test @documentencoding ISO-8859-1 @node Top @top Complex accent encoding test top @={@~{@dotless{i}}} @={@,{@~{n}}} @={@ubaraccent{a}} @={@code{@'{@`{r}}}} @bye texi2html-1.82/test/encodings/at_commands_in_refs_latin1.texi0000644000175000017500000000110211264347117026315 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @comment %**start of header @setfilename at_commands_in_refs_latin1.info @documentencoding latin1 @node Top @top Top @menu * A @sc{sc} node @"i @"{@dotless{i}} @`{@=E} @l{} @,{@'C} @exclamdown{} :: @end menu @node A @sc{sc} node @"i @"{@dotless{i}} @`{@=E} @l{} @,{@'C} @exclamdown{} @chapter A @sc{sc} node @"i @"{@dotless{i}} @`{@=E} @l{} @,{@'C} @exclamdown{} see @ref{a @strong{strong} ref with @sc{sc}@comma{} a i trema @"i@comma{} a dotless i trema @"{@dotless{i}} @`{@=E} and exclamdown @exclamdown{} ,,,manual}. @bye texi2html-1.82/test/encodings/nodetest.texi0000644000175000017500000001574511264347117022722 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @c @c It is not possible to test for @,{c} in @c nodename cause makeinfo can not @c handle cedilla's in node names. A cedilla @c has a comma which was recognized a as @c delimiter between node parts (next,previous etc.) @setfilename nodetest.info @node Top,Umlaut,(dir) @top @menu * Umlaut:: Umlaut. Another Heading * acute accent:: acute accent. * grave accent:: grave accent. * circumflex accent:: circumflex accent. * tilde accent:: tilde accent. * cedilla accent:: cedilla accent. * rest:: rest @@aa@{@} etc. @end menu @c @node Umlaut,,Top,Top @chapter Umlaut @menu * @"a:: @"a. * @"e:: @"e. * @"i:: @"i. * with brace @"{i}:: @"{i}. * with dotless @"{@dotless{i}}:: @"{@dotless{i}}. * @"o:: @"o. * @"u:: @"u. * @"y:: @"y. * @"A:: @"A. * @"E:: @"E. * @"I:: @"I. * @"O:: @"O. * @"U:: @"U. * @ss{}:: @ss{}. * no section:: Node without sectioning command. @end menu @c @node @"a,,,Umlaut @section @"a ref to @,{c} @ref{@,{c}}. @node @"e,,,Umlaut @section @"e @node @"i,,,Umlaut @section @"i @node with brace @"{i},,,Umlaut @section With brace @"{i} @node with dotless @"{@dotless{i}},,,Umlaut @section With dotless @"{@dotless{i}} before footnote @xref{footanchor}. @footnote{@anchor{footanchor}} after footnote @xref{footanchor}. @node @"o,,,Umlaut @section @"o Ref to an anchor at the end of the doc (@pxref{@'e-o, , there is an o-@'e could there be an @^{@dotless{i}}}). @node @"u,,,Umlaut @section @"u Another ref to an anchor (@pxref{x-spot, ,}). @node @"y,,,Umlaut @section @"y This is a ref to a node (@pxref{@'U, ,@'U}). @node @"A,,,Umlaut @section @"A Now a ref to a node without sectionning command, no text (@pxref{no section, , }). With text (@pxref{no section, ,but a text }). @node @"E,,,Umlaut @section @"E @node @"I,,,Umlaut @section @"I @node @"O,,,Umlaut @section @"O @node @"U,,,Umlaut @section @"U @node @ss{},,,Umlaut @section @ss{} @node no section,,,Umlaut This is a node without sectioning command. @c @node acute accent,,Top,Top @chapter acute accent @menu * @'a:: @'a. * @'e:: @'e. * @'i:: @'i. * @'o:: @'o. * @'u:: @'u. * @'y:: @'y. * @'A:: @'A. * @'E:: @'E. * @'I:: @'I. * @'O:: @'O. * @'U:: @'U. * @'Y:: @'Y. @end menu @c @node @'a,,,acute accent @section @'a With brace @'{a}. Testing ' " ` ^. @node @'e,,,acute accent @section @'e @node @'i,,,acute accent @section @'i @node @'o,,,acute accent @section @'o @node @'u,,,acute accent @section @'u @node @'y,,,acute accent @section @'y @node @'A,,,acute accent @section @'A @node @'E,,,acute accent @section @'E @node @'I,,,acute accent @section @'I @node @'O,,,acute accent @section @'O @node @'U,,,acute accent @section @'U @node @'Y,,,acute accent @section @'Y This is a ref to @"u (@pxref{@"u, ,@"u}). Another one, with node only (@pxref{@"u, ,}). @ignore An ignored sentence. @end ignore @c @node grave accent,,Top,Top @chapter grave accent @menu * @`a:: @`a. * @`e:: @`e. * @`i:: @`i. * with brace @`{i}:: @`{i}. * with dotless @`{@dotless{i}}:: @`{@dotless{i}}. * @`o:: @`o. * @`u:: @`u. * @`A:: @`A. * @`E:: @`E. * @`I:: @`I. * @`O:: @`O. * @`U:: @`U. @end menu @c @node @`a,,,grave accent @section @`a @node @`e,,,grave accent @section @`e @node @`i,,,grave accent @section @`i @node with brace @`{i},,,grave accent @section @`{i} @node with dotless @`{@dotless{i}},,,grave accent @section @`{@dotless{i}} @node @`o,,,grave accent @section @`o @node @`u,,,grave accent @section @`u @node @`A,,,grave accent @section @`A @node @`E,,,grave accent @section @`E @node @`I,,,grave accent @section @`I @node @`O,,,grave accent @section @`O @node @`U,,,grave accent @section @`U @c @node circumflex accent,,Top,Top @chapter circumflex accent @menu * @^a:: @^a. * @^e:: @^e. * @^i:: @^i. * with brace @^{i}:: @^{i}. * with dotless @^{@dotless{i}}:: @^{@dotless{i}}. * @^o:: @^o. * @^u:: @^u. * @^A:: @^A. * @^E:: @^E. * @^I:: @^I. * @^O:: @^O. * @^U:: @^U. @end menu @c @node @^a,,,circumflex accent @section @^a @node @^e,,,circumflex accent @section @^e @node @^i,,,circumflex accent @section @^i @node with brace @^{i},,,circumflex accent @section @^{i} Test @@^@{i@}. @node with dotless @^{@dotless{i}},,,circumflex accent @section @^{@dotless{i}} Test @@^@{@@dotless@{i@}@}. @node @^o,,,circumflex accent @section @^o @node @^u,,,circumflex accent @section @^u @node @^A,,,circumflex accent @section @^A @node @^E,,,circumflex accent @section @^E @node @^I,,,circumflex accent @section @^I @node @^O,,,circumflex accent @section @^O @node @^U,,,circumflex accent @section @^U @c @node tilde accent,,Top,Top @chapter tilde accent @menu * @~a:: @~a. * @~n:: @~n. * @~o:: @~o. * @~A:: @~A. * @~O:: @~O. @end menu @c @node @~a,,,tilde accent @section @~a @node @~n,,,tilde accent @section @~n @node @~o,,,tilde accent @section @~o @node @~A,,,tilde accent @section @~A @node @~O,,,tilde accent @section @~O This marks the @anchor{x-spot}spot. A second one with accented char @anchor{@'e-o}. @c @node cedilla accent,,Top,Top @chapter cedilla accent @menu * @,{c}:: @,{c}. * @,{C}:: @,{C}. * @,c no brace:: @,c no brace. @end menu @c @node @,{c},,,cedilla accent @section @,{c} @node @,{C},,,cedilla accent @section @,{C} @node @,c no brace,,,cedilla accent @section @,c no brace @c @node rest,,Top,Top @chapter rest @menu * @aa{}:: @aa{}. * @ae{}:: @ae{}. * @oe{}:: @oe{}. * @AA{}:: @AA{}. * @AE{}:: @AE{}. * @OE{}:: @OE{}. * @l{}:: @l{}. * @o{}:: @o{}. * @L{}:: @L{}. * @O{}:: @O{}. * @H{a}:: @H{a}. * @u{a}:: @u{a}. * @v{a}:: @v{a}. * @udotaccent{a}:: @udotaccent{a} udotaccent. * @dotaccent{a}:: @dotaccent{a} dotaccent. * @ringaccent{a}:: @ringaccent{a} ringaccent. * @tieaccent{a}:: @tieaccent{a} tieaccent. * @ubaraccent{a}:: @ubaraccent{a} ubaraccent. * @dotless{i}:: @dotless{i} dotless i. * @dotless{j}:: @dotless{j} dotless j. * @comma{}:: @comma{} comma @end menu @c @node @aa{},,,rest @section @aa{} @node @ae{},,,rest @section @ae{} @node @oe{},,,rest @section @oe{} @node @AA{},,,rest @section @AA{} @node @AE{},,,rest @section @AE{} @node @OE{},,,rest @section @OE{} @node @l{},,,rest @section @l{} @node @o{},,,rest @section @o{} @node @L{},,,rest @section @L{} @node @O{},,,rest @section @O{} @node @H{a},,,rest @section @H{a} @node @u{a},,,rest @section @u{a} @node @v{a},,,rest @section @v{a} @node @udotaccent{a},,,rest @section @udotaccent{a} Test udotaccent. @node @dotaccent{a},,,rest @section @dotaccent{a} Test dotaccent. @node @ringaccent{a},,,rest @section @ringaccent{a} @node @tieaccent{a},,,rest @section @tieaccent{a} @node @ubaraccent{a},,,rest @section @ubaraccent{a} @node @dotless{i},,,rest @section @dotless{i} @node @dotless{j},,,rest @section @dotless{j} @dots{} @enddots{} @exclamdown{} @questiondown{} @pounds{} @@- : @- @@ followed by end of line: @ @@ followed by tab: @ @@ followed by space @ @@*: @* and text followin @@*. @node @comma{},,,rest @section @comma{} @contents @bye texi2html-1.82/test/encodings/nodetest_latin1.texi0000644000175000017500000001421511264347117024161 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename nodetest_latin1.info @documentencoding latin1 @node Top,Umlaut,(dir) @top @menu * Umlaut:: Umlaut. Another Heading * acute accent:: acute accent. * grave accent:: grave accent. * circumflex accent:: circumflex accent. * tilde accent:: tilde accent. * cedilla accent:: cedilla accent. * rest:: rest @@aa@{@} etc. @end menu @c @node Umlaut,,Top,Top @chapter Umlaut @menu * :: . * :: . * :: . * :: . * :: . * :: . * :: . * :: . * :: . * :: . * :: . * @ss{}:: @ss{}. * no section:: Node without sectioning command. @end menu @c @node ,,,Umlaut @section ref to @ref{}. @node ,,,Umlaut @section @node ,,,Umlaut @section before footnote @xref{footanchor}. @footnote{@anchor{footanchor}} after footnote @xref{footanchor}. @node ,,,Umlaut @section Ref to an anchor at the end of the doc (@pxref{-o, , there is an o- could there be an @^{@dotless{i}}}). @node ,,,Umlaut @section Another ref to an anchor (@pxref{x-spot, ,}). @node ,,,Umlaut @section This is a ref to a node (@pxref{, ,}). @node ,,,Umlaut @section Now a ref to a node without sectionning command, no text (@pxref{no section, , }). With text (@pxref{no section, ,but a text }). @node ,,,Umlaut @section @node ,,,Umlaut @section @node ,,,Umlaut @section @node ,,,Umlaut @section @node @ss{},,,Umlaut @section @ss{} @node no section,,,Umlaut This is a node without sectioning command. @c @node acute accent,,Top,Top @chapter acute accent @menu * @'a:: @'a. * :: . * @'i:: @'i. * @'o:: @'o. * @'u:: @'u. * @'y:: @'y. * @'A:: @'A. * @'E:: @'E. * @'I:: @'I. * @'O:: @'O. * @'U:: @'U. * @'Y:: @'Y. @end menu @c @node @'a,,,acute accent @section @'a With brace @'{a}. Testing ' " ` ^. @node ,,,acute accent @section @node @'i,,,acute accent @section @'i @node @'o,,,acute accent @section @'o @node @'u,,,acute accent @section @'u @node @'y,,,acute accent @section @'y @node @'A,,,acute accent @section @'A @node @'E,,,acute accent @section @'E @node @'I,,,acute accent @section @'I @node @'O,,,acute accent @section @'O @node @'U,,,acute accent @section @'U @node @'Y,,,acute accent @section @'Y This is a ref to (@pxref{, ,}). Another one, with node only (@pxref{, ,}). @ignore An ignored sentence. @end ignore @c @node grave accent,,Top,Top @chapter grave accent @menu * :: . * :: . * @`i:: @`i. * with brace @`{i}:: @`{i}. * with dotless @`{@dotless{i}}:: @`{@dotless{i}}. * @`o:: @`o. * :: . * @`A:: @`A. * @`E:: @`E. * @`I:: @`I. * @`O:: @`O. * @`U:: @`U. @end menu @c @node ,,,grave accent @section @node ,,,grave accent @section @node @`i,,,grave accent @section @`i @node with brace @`{i},,,grave accent @section @`{i} @node with dotless @`{@dotless{i}},,,grave accent @section @`{@dotless{i}} @node @`o,,,grave accent @section @`o @node ,,,grave accent @section @node @`A,,,grave accent @section @`A @node @`E,,,grave accent @section @`E @node @`I,,,grave accent @section @`I @node @`O,,,grave accent @section @`O @node @`U,,,grave accent @section @`U @c @node circumflex accent,,Top,Top @chapter circumflex accent @menu * :: . * :: . * :: . * :: . * :: . * :: . * :: . * :: . * :: . * :: . @end menu @c @node ,,,circumflex accent @section @node ,,,circumflex accent @section @node ,,,circumflex accent @section @node ,,,circumflex accent @section @node ,,,circumflex accent @section @node ,,,circumflex accent @section @node ,,,circumflex accent @section @node ,,,circumflex accent @section @node ,,,circumflex accent @section @node ,,,circumflex accent @section @c @node tilde accent,,Top,Top @chapter tilde accent @menu * @~a:: @~a. * @~n:: @~n. * @~o:: @~o. * @~A:: @~A. * @~O:: @~O. @end menu @c @node @~a,,,tilde accent @section @~a @node @~n,,,tilde accent @section @~n @node @~o,,,tilde accent @section @~o @node @~A,,,tilde accent @section @~A @node @~O,,,tilde accent @section @~O This marks the @anchor{x-spot}spot. A second one with accented char @anchor{-o}. @c @node cedilla accent,,Top,Top @chapter cedilla accent @menu * :: . * @,{C}:: @,{C}. @end menu @c @node ,,,cedilla accent @section @node @,{C},,,cedilla accent @section @,{C} @c @node rest,,Top,Top @chapter rest @menu * @aa{}:: @aa{}. * @ae{}:: @ae{}. * @oe{}:: @oe{}. * @AA{}:: @AA{}. * @AE{}:: @AE{}. * @OE{}:: @OE{}. * @l{}:: @l{}. * @o{}:: @o{}. * @L{}:: @L{}. * @O{}:: @O{}. * @H{a}:: @H{a}. * @u{a}:: @u{a}. * @v{a}:: @v{a}. * @udotaccent{a}:: @udotaccent{a} udotaccent. * @dotaccent{a}:: @dotaccent{a} dotaccent. * @ringaccent{a}:: @ringaccent{a} ringaccent. * @tieaccent{a}:: @tieaccent{a} tieaccent. * @ubaraccent{a}:: @ubaraccent{a} ubaraccent. * @dotless{i}:: @dotless{i} dotless i. * @dotless{j}:: @dotless{j} dotless j. * @comma{}:: @comma{} comma @end menu @c @node @aa{},,,rest @section @aa{} @node @ae{},,,rest @section @ae{} @node @oe{},,,rest @section @oe{} @node @AA{},,,rest @section @AA{} @node @AE{},,,rest @section @AE{} @node @OE{},,,rest @section @OE{} @node @l{},,,rest @section @l{} @node @o{},,,rest @section @o{} @node @L{},,,rest @section @L{} @node @O{},,,rest @section @O{} @node @H{a},,,rest @section @H{a} @node @u{a},,,rest @section @u{a} @node @v{a},,,rest @section @v{a} @node @udotaccent{a},,,rest @section @udotaccent{a} Test udotaccent. @node @dotaccent{a},,,rest @section @dotaccent{a} Test dotaccent. @node @ringaccent{a},,,rest @section @ringaccent{a} @node @tieaccent{a},,,rest @section @tieaccent{a} @node @ubaraccent{a},,,rest @section @ubaraccent{a} @node @dotless{i},,,rest @section @dotless{i} @node @dotless{j},,,rest @section @dotless{j} @dots{} @enddots{} @exclamdown{} @questiondown{} @pounds{} @@- : @- @@ followed by end of line: @ @@ followed by tab: @ @@ followed by space @ @@*: @* and text followin @@*. @node @comma{},,,rest @section @comma{} An index entry with accented letter. @cindex index entry with accented letter: @`a @cindex index entry with accented letter: @`a @printindex cp @contents @bye texi2html-1.82/test/encodings/accent-text.txi0000644000175000017500000000243111264347117023133 0ustar flichtenheldflichtenheld@c args with braces, without braces/following whitespace should be e`: @`{e} @`e should be e': @'{e} @'e should be e^: @^{e} @^e should be u": @"{u} @"u should be i`: @`{i} @`i should be i': @'{i} @'i should be i^: @^{i} @^i should be u": @"{u} @"u should be c,: @,{c} @,c should be n~: @~{n} @~n should be e=: @={e} @=e should be e@w{'}': @H{e} @H e should be e.: @dotaccent{e} @dotaccent e should be e*: @ringaccent{e} @ringaccent e should be ee[: @tieaccent{ee} should be e(: @u{e} @u e should be e_: @ubaraccent{e} @ubaraccent e should be .e: @udotaccent{e} @udotaccent e should be e<: @v{e} @v e upside down: @questiondown{} @exclamdown{} A-with-circle: @aa{},@AA{} AE, OE ligatures: @ae{} @AE{} @oe{} @OE{} dotless i, j: @dotless{i} @dotless{j} Polish suppressed-L: @l{} @L{} O-with-slash: @o{} @O{} es-zet or sharp S: @ss{} pounds sterling: @pounds{} @c arg is command -- @dotless{i} is special-cased for HTML should be dotless i`: @`{@dotless{i}} should be dotless i': @'{@dotless{i}} should be dotless i^: @^{@dotless{i}} should be dotless i": @"{@dotless{i}} @c arg is command -- @dotless{j} should be dotless j`: @`{@dotless{j}} should be dotless j': @'{@dotless{j}} should be dotless j^: @^{@dotless{j}} should be dotless j": @"{@dotless{j}} texi2html-1.82/test/encodings/umlaut.texi0000644000175000017500000000364111264347117022374 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @c @c @c @setfilename umlaut.info @documentlanguage de @c @documentlanguage zv @settitle Test for Umlaute, accent etc. @setchapternewpage on @footnotestyle separate @ifset shorttitlepage-enabled @shorttitlepage ShortTitle @end ifset @titlepage @title Title @subtitle SubTitle @author @copyright{} @page @vskip 0pt plus 1filll Copyright @copyright{} Who it is@* @sp 2 @end titlepage @page @chapter This is what you get Copright Sign: @copyright{} @* Pound Sign: @pounds{} @* Minus Zeichen: @minus{} @* TeX Logo: @TeX{}@* dots@{@}: @dots{}@* bullet@{@}:@bullet{}@* Vertical Bar:@* | valid umlaut @"a @"e @"i @"o @"u @"y @"A @"E @"I @"O @"U Non valid umlaut:@* @"X @"x @"Q @"Y Special characters in HTML:@* < > & acute accent:@* @'a @'e @'i @'o @'u @'y @'A @'E @'I @'O @'U @'Y invalid acute accent:@* @'z @'q @'r @'Z @'Q @'R valid Cedilla:@* @,{c} @,{C} non valid Cedilla:@* @,{H} @,{h} macron:@* @=o I don't know any invalid macron:@* valid circumflex:@* @^a @^e @^i @^o @^u @^A @^E @^I @^O @^U invalid circumflex:@* @^z @^r @^t @^k @^Z @^R @^T @^K grave accent:@* @`a @`e @`i @`o @`u @`A @`E @`I @`O @`U invalid grave accent:@* @`z @`m @`p tilde accent:@* @~a @~n @~o @~A @~O invalid tilde accent:@* @~Z @~s @dotaccent{o} @H{o} @ringaccent{o} @tieaccent{oo} @u{o} @ubaraccent{o} @udotaccent{o} @v{o} @exclamdown{} @questiondown{} @aa{} @AA{} @ae{} @AE{} @dotless{i} @dotless{j} @l{} @L{} @o{} @O{} @oe{} @OE{} @ss{} What about @@url and @@uref @url{http://www.fido.de/~kama} Referenz:@* @uref{http://www.fido.de/~kama} Referenz mit Display Text:@* @uref{http://www.fido.de/~kama, Second Argument of uref} Referenz mit Display Text and special:@* @uref{http://www.fido.de/~kama, Second Argument of uref, Third Argument of uref} Email:@* @email{kama@@hippo.fido.de} Email mit display:@* @email{kama@@hippo.fido.de, Anzeige der email Adrese} @c I don't need any contents. @contents @bye texi2html-1.82/test/encodings/no_unicode.init0000644000175000017500000000002611264347117023173 0ustar flichtenheldflichtenheld$USE_UNICODE = 0; 1; texi2html-1.82/test/encodings/nodetest_utf8.texi0000644000175000017500000001437611264347117023667 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename nodetest_utf8.info @documentencoding utf8 @node Top,Umlaut,(dir) @top @menu * Umlaut:: Umlaut. Another Heading * acute accent:: acute accent. * grave accent:: grave accent. * circumflex accent:: circumflex accent. * tilde accent:: tilde accent. * cedilla accent:: cedilla accent. * rest:: rest @@aa@{@} etc. @end menu @c @node Umlaut,,Top,Top @chapter Umlaut @menu * ä:: ä. * ë:: ë. * ï:: ï. * ö:: ö. * ü:: ü. * ÿ:: ÿ. * Ä:: Ä. * Ë:: Ë. * Ï:: Ï. * Ö:: Ö. * Ü:: Ü. * @ss{}:: @ss{}. * no section:: Node without sectioning command. @end menu @c @node ä,,,Umlaut @section ä ref to ç @ref{ç}. @node ë,,,Umlaut @section ë @node ï,,,Umlaut @section ï before footnote @xref{footanchor}. @footnote{@anchor{footanchor}} after footnote @xref{footanchor}. @node ö,,,Umlaut @section ö Ref to an anchor at the end of the doc (@pxref{é-o, , there is an o-é could there be an @^{@dotless{i}}}). @node ü,,,Umlaut @section ü Another ref to an anchor (@pxref{x-spot, ,}). @node ÿ,,,Umlaut @section ÿ This is a ref to a node (@pxref{à, ,à}). @node Ä,,,Umlaut @section Ä Now a ref to a node without sectionning command, no text (@pxref{no section, , }). With text (@pxref{no section, ,but a text }). @node Ë,,,Umlaut @section Ë @node Ï,,,Umlaut @section Ï @node Ö,,,Umlaut @section Ö @node Ü,,,Umlaut @section Ü @node @ss{},,,Umlaut @section @ss{} @node no section,,,Umlaut This is a node without sectioning command. @c @node acute accent,,Top,Top @chapter acute accent @menu * @'a:: @'a. * é:: é. * @'i:: @'i. * @'o:: @'o. * @'u:: @'u. * @'y:: @'y. * @'A:: @'A. * @'E:: @'E. * @'I:: @'I. * @'O:: @'O. * @'U:: @'U. * @'Y:: @'Y. @end menu @c @node @'a,,,acute accent @section @'a With brace @'{a}. Testing ' " ` ^. @node é,,,acute accent @section é @node @'i,,,acute accent @section @'i @node @'o,,,acute accent @section @'o @node @'u,,,acute accent @section @'u @node @'y,,,acute accent @section @'y @node @'A,,,acute accent @section @'A @node @'E,,,acute accent @section @'E @node @'I,,,acute accent @section @'I @node @'O,,,acute accent @section @'O @node @'U,,,acute accent @section @'U @node @'Y,,,acute accent @section @'Y This is a ref to ü (@pxref{ü, ,ü}). Another one, with node only (@pxref{ü, ,}). @ignore An ignored sentence. @end ignore @c @node grave accent,,Top,Top @chapter grave accent @menu * à:: à. * è:: è. * @`i:: @`i. * with brace @`{i}:: @`{i}. * with dotless @`{@dotless{i}}:: @`{@dotless{i}}. * @`o:: @`o. * ù:: ù. * @`A:: @`A. * @`E:: @`E. * @`I:: @`I. * @`O:: @`O. * @`U:: @`U. @end menu @c @node à,,,grave accent @section à @node è,,,grave accent @section è @node @`i,,,grave accent @section @`i @node with brace @`{i},,,grave accent @section @`{i} @node with dotless @`{@dotless{i}},,,grave accent @section @`{@dotless{i}} @node @`o,,,grave accent @section @`o @node ù,,,grave accent @section ù @node @`A,,,grave accent @section @`A @node @`E,,,grave accent @section @`E @node @`I,,,grave accent @section @`I @node @`O,,,grave accent @section @`O @node @`U,,,grave accent @section @`U @c @node circumflex accent,,Top,Top @chapter circumflex accent @menu * â:: â. * ê:: ê. * î:: î. * ô:: ô. * û:: û. * Â:: Â. * Ê:: Ê. * Î:: Î. * Ô:: Ô. * Û:: Û. @end menu @c @node â,,,circumflex accent @section â @node ê,,,circumflex accent @section ê @node î,,,circumflex accent @section î @node ô,,,circumflex accent @section ô @node û,,,circumflex accent @section û @node Â,,,circumflex accent @section  @node Ê,,,circumflex accent @section Ê @node Î,,,circumflex accent @section Î @node Ô,,,circumflex accent @section Ô @node Û,,,circumflex accent @section Û @c @node tilde accent,,Top,Top @chapter tilde accent @menu * @~a:: @~a. * @~n:: @~n. * @~o:: @~o. * @~A:: @~A. * @~O:: @~O. @end menu @c @node @~a,,,tilde accent @section @~a @node @~n,,,tilde accent @section @~n @node @~o,,,tilde accent @section @~o @node @~A,,,tilde accent @section @~A @node @~O,,,tilde accent @section @~O This marks the @anchor{x-spot}spot. A second one with accented char @anchor{é-o}. @c @node cedilla accent,,Top,Top @chapter cedilla accent @menu * ç:: ç. * @,{C}:: @,{C}. @end menu @c @node ç,,,cedilla accent @section ç @node @,{C},,,cedilla accent @section @,{C} @c @node rest,,Top,Top @chapter rest @menu * @aa{}:: @aa{}. * @ae{}:: @ae{}. * @oe{}:: @oe{}. * @AA{}:: @AA{}. * @AE{}:: @AE{}. * @OE{}:: @OE{}. * @l{}:: @l{}. * @o{}:: @o{}. * @L{}:: @L{}. * @O{}:: @O{}. * @H{a}:: @H{a}. * @u{a}:: @u{a}. * @v{a}:: @v{a}. * @udotaccent{a}:: @udotaccent{a} udotaccent. * @dotaccent{a}:: @dotaccent{a} dotaccent. * @ringaccent{a}:: @ringaccent{a} ringaccent. * @tieaccent{a}:: @tieaccent{a} tieaccent. * @ubaraccent{a}:: @ubaraccent{a} ubaraccent. * @dotless{i}:: @dotless{i} dotless i. * @dotless{j}:: @dotless{j} dotless j. * @comma{}:: @comma{} comma @end menu @c @node @aa{},,,rest @section @aa{} @node @ae{},,,rest @section @ae{} @node @oe{},,,rest @section @oe{} @node @AA{},,,rest @section @AA{} @node @AE{},,,rest @section @AE{} @node @OE{},,,rest @section @OE{} @node @l{},,,rest @section @l{} @node @o{},,,rest @section @o{} @node @L{},,,rest @section @L{} @node @O{},,,rest @section @O{} @node @H{a},,,rest @section @H{a} @node @u{a},,,rest @section @u{a} @node @v{a},,,rest @section @v{a} @node @udotaccent{a},,,rest @section @udotaccent{a} Test udotaccent. @node @dotaccent{a},,,rest @section @dotaccent{a} Test dotaccent. @node @ringaccent{a},,,rest @section @ringaccent{a} @node @tieaccent{a},,,rest @section @tieaccent{a} @node @ubaraccent{a},,,rest @section @ubaraccent{a} @node @dotless{i},,,rest @section @dotless{i} @node @dotless{j},,,rest @section @dotless{j} @dots{} @enddots{} @exclamdown{} @questiondown{} @pounds{} @@- : @- @@ followed by end of line: @ @@ followed by tab: @ @@ followed by space @ @@*: @* and text followin @@*. @node @comma{},,,rest @section @comma{} An index entry with accented letter. @cindex index entry with accented letter: à @`a @cindex index entry with accented letter: â @`a @printindex cp @contents @bye texi2html-1.82/test/encodings/multi_lang.texi0000644000175000017500000000121711264347117023215 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename multi_lang.info @documentlanguage fr_NOWHERE @node Top @top Multi language file This is in french @menu * chapter fr_NOWHERE:: * chapter ja:: * chapter en:: * chapter pt_BR:: @end menu @node chapter fr_NOWHERE @chapter Fr_NOWHERE In french. @xref{Top}. @menu * sub fr_NOWHERE:: @end menu @node sub fr_NOWHERE @section fr_NOWHERE section In fr section. @documentlanguage ja @node chapter ja @chapter ja In japanese. @xref{Top}. @documentlanguage en @node chapter en @chapter en In english. @xref{Top}. @documentlanguage pt_BR @node chapter pt_BR @chapter pt_bR In brazilian. @xref{Top}. @bye texi2html-1.82/test/encodings/Makefile.in0000644000175000017500000002120411264347117022232 0ustar flichtenheldflichtenheld# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = test/encodings DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DATE = @PACKAGE_DATE@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ REQUIRE_DATA_DUMPER = @REQUIRE_DATA_DUMPER@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_DATA_DUMPER = @USE_DATA_DUMPER@ USE_UNICODE = @USE_UNICODE@ USE_UNIDECODE = @USE_UNIDECODE@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ am__leading_dot = @am__leading_dot@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = nodetest.texi nodetest_latin1.texi nodetest_utf8.texi \ multi_lang.texi unknown_language.texi umlaut.texi accent.texi \ weird_accents.texi accentenc.texi \ accent-text.txi ogolat2.texi ogoutf.texi \ at_commands_in_refs_latin1.texi at_commands_in_refs_utf8.texi \ no_unicode.init no_unidecode.init icons.init tests.txt res DISTCLEANFILES = l2h_tmp_dir.init tests.log tests.out all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/encodings/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu test/encodings/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-exec-am: install-html: install-html-am install-info: install-info-am install-man: install-pdf: install-pdf-am install-ps: install-ps-am installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic dist-hook \ distclean distclean-generic distclean-local distdir dvi dvi-am \ html html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am distclean-local: rm -rf out diffs dist-hook: rm -rf `find $(distdir)/res -name CVS` # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: texi2html-1.82/test/encodings/unknown_language.texi0000644000175000017500000000036011264347117024422 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename unknown_language.info @documentlanguage unknown @node Top @top unknkown language Unknown language. @xref{Top}. @documentlanguage another_UNKNOWN Another unknown language. @xref{Top}. @bye texi2html-1.82/test/encodings/ogoutf.texi0000644000175000017500000000070111264347117022362 0ustar flichtenheldflichtenheld\input texinfo @setfilename ogonek.info @documentencoding UTF-8 @settitle Ogonek @titlepage @title AE ĄĘ ae ąę @subtitle AE @ogonek{A}@ogonek{E} @author J@ogonek{a}n Stępień @email{hello@@there} AE ĄĘ ae ąę, looks nice. @end titlepage @node Top @chapter Top AE @ogonek{a}@ogonek{e} @section AE ĄĘ ae ąę Zażółć gęślą jaźń! Zazolc gesla jazn! @cindex @ogonek{A}@ogonek{a} @cindex @ogonek{e}@ogonek{E} @printindex cp @bye texi2html-1.82/test/encodings/no_unidecode.init0000644000175000017500000000003011264347117023477 0ustar flichtenheldflichtenheld$USE_UNIDECODE = 0; 1; texi2html-1.82/test/encodings/res/0000755000175000017500000000000011264347117020757 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/0000755000175000017500000000000011264347116025615 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/U.html0000644000175000017500000001674711264347116026726 0ustar flichtenheldflichtenheld Untitled Document: 1.11 Ü
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.11 Ü


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.11 Ú


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.12 Ù


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.10 Û


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/A.html0000644000175000017500000002206411264347116026667 0ustar flichtenheldflichtenheld Untitled Document: 1.7 Ä
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.7 Ä

    Now a ref to a node without sectionning command, no text (see no section). With text (see but a text).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.7 Á


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.8 À


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.6 Â


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.4 Ã


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/Y.html0000644000175000017500000000651111264347116026716 0ustar flichtenheldflichtenheld Untitled Document: 2.12 Ý
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.12 Ý

    This is a ref to ü (see ü). Another one, with node only (see ü).


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/L.html0000644000175000017500000000610511264347116026700 0ustar flichtenheldflichtenheld Untitled Document: 7.9 Ł
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.9 Ł


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/cedilla-accent.html0000644000175000017500000000702511264347116031337 0ustar flichtenheldflichtenheld Untitled Document: 6. cedilla accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6. cedilla accent


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/AA.html0000644000175000017500000000611211264347116026764 0ustar flichtenheldflichtenheld Untitled Document: 7.4 Å
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.4 Å


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/l.html0000644000175000017500000000610511264347116026740 0ustar flichtenheldflichtenheld Untitled Document: 7.7 ł
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.7 ł


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/with-brace-i.html0000644000175000017500000000633011264347116030760 0ustar flichtenheldflichtenheld Untitled Document: 3.4 ì
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.4 ì


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/aa.html0000644000175000017500000001063311264347116027067 0ustar flichtenheldflichtenheld Untitled Document: 7.1 å
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.1 å


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.16 å


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/nodetest_utf8_abt.html0000644000175000017500000001232611264347116032130 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/footanchor.html0000644000175000017500000000335311264347116030651 0ustar flichtenheldflichtenheld Untitled Document: footanchor

    The node you are looking for is at footanchor.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/nodetest_utf8_toc.html0000644000175000017500000002127711264347116032154 0ustar flichtenheldflichtenheld Untitled Document: Table of Contents
    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/acute-accent.html0000644000175000017500000001171411264347116031043 0ustar flichtenheldflichtenheld Untitled Document: 2. acute accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. acute accent


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/e.html0000644000175000017500000001665311264347116026742 0ustar flichtenheldflichtenheld Untitled Document: 1.2 ë
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2 ë


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2 é


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.2 è


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.2 ê


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/n.html0000644000175000017500000000626111264347116026745 0ustar flichtenheldflichtenheld Untitled Document: 5.2 ñ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.2 ñ


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/rest.html0000644000175000017500000001432211264347116027462 0ustar flichtenheldflichtenheld Untitled Document: 7. rest
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7. rest


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/index.html0000644000175000017500000000327111264347116027615 0ustar flichtenheldflichtenheld Untitled Document: Top

    The node you are looking for is at Top.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/_002c.html0000644000175000017500000001016411264347116027310 0ustar flichtenheldflichtenheld Untitled Document: 7.21 ,
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.21 ,

    An index entry with accented letter.

    Jump to:   I  
    Index Entry Section

    I
    index entry with accented letter: à à7.21 ,
    index entry with accented letter: â à7.21 ,

    Jump to:   I  

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/ae.html0000644000175000017500000000611211264347116027070 0ustar flichtenheldflichtenheld Untitled Document: 7.2 æ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.2 æ


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/nodetest_utf8.html0000644000175000017500000001007311264347116031277 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Top


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/no-section.html0000644000175000017500000000627511264347116030573 0ustar flichtenheldflichtenheld Untitled Document: no section
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    no section

    This is a node without sectioning command.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/tilde-accent.html0000644000175000017500000000774311264347116031052 0ustar flichtenheldflichtenheld Untitled Document: 5. tilde accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5. tilde accent


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/C.html0000644000175000017500000000624411264347116026673 0ustar flichtenheldflichtenheld Untitled Document: 6.2 Ç
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.2 Ç


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/E.html0000644000175000017500000001666711264347116026707 0ustar flichtenheldflichtenheld Untitled Document: 1.8 Ë
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.8 Ë


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.8 É


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.9 È


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.7 Ê


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/u.html0000644000175000017500000001677711264347116026771 0ustar flichtenheldflichtenheld Untitled Document: 1.5 ü
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.5 ü

    Another ref to an anchor (see x-spot).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.5 ú


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.7 ù


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.5 û


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/OE.html0000644000175000017500000001063511264347116027013 0ustar flichtenheldflichtenheld Untitled Document: 7.6 Œ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.6 Œ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.10 Ø


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/c.html0000644000175000017500000000624011264347116026727 0ustar flichtenheldflichtenheld Untitled Document: 6.1 ç
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.1 ç


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/i.html0000644000175000017500000002200511264347116026732 0ustar flichtenheldflichtenheld Untitled Document: 1.3 ï
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.3 ï

    before footnote See footanchor.

    (1)

    after footnote See footanchor.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3 í


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.3 ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3 î


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.19 i


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/oe.html0000644000175000017500000001063711264347116027115 0ustar flichtenheldflichtenheld Untitled Document: 7.3 œ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.3 œ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.8 ø


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/circumflex-accent.html0000644000175000017500000001122111264347116032074 0ustar flichtenheldflichtenheld Untitled Document: 4. circumflex accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4. circumflex accent


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/nodetest_utf8_fot.html0000644000175000017500000000560511264347116032154 0ustar flichtenheldflichtenheld Untitled Document: Footnotes
    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/y.html0000644000175000017500000001117311264347116026756 0ustar flichtenheldflichtenheld Untitled Document: 1.6 ÿ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.6 ÿ

    This is a ref to a node (see à).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.6 ý


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/ss.html0000644000175000017500000000624111264347116027133 0ustar flichtenheldflichtenheld Untitled Document: 1.12 ß
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.12 ß


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/e_002do.html0000644000175000017500000000327311264347116027640 0ustar flichtenheldflichtenheld Untitled Document: é-o

    The node you are looking for is at é-o.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/O.html0000644000175000017500000002177611264347116026716 0ustar flichtenheldflichtenheld Untitled Document: 1.10 Ö
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.10 Ö


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.10 Ó


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.11 Ò


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.9 Ô


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.5 Õ

    This marks the spot. A second one with accented char .


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/o.html0000644000175000017500000002201511264347116026741 0ustar flichtenheldflichtenheld Untitled Document: 1.4 ö
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4 ö

    Ref to an anchor at the end of the doc (see there is an o-é could there be an î).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4 ó


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.6 ò


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.4 ô


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.3 õ


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/grave-accent.html0000644000175000017500000001205011264347116031040 0ustar flichtenheldflichtenheld Untitled Document: 3. grave accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. grave accent


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/I.html0000644000175000017500000001667011264347116026705 0ustar flichtenheldflichtenheld Untitled Document: 1.9 Ï
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.9 Ï


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.9 Í


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.10 Ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.8 Î


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/a.html0000644000175000017500000004451311264347116026732 0ustar flichtenheldflichtenheld Untitled Document: 1.1 ä
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 ä

    ref to ç ç.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.1 á

    With brace á. Testing ’ " ‘ ^.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.1 à


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.1 â


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.1 ã


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.11 a''



    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.12 ă



    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.13 a<



    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.14 ạ

    Test udotaccent.



    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.15 ȧ

    Test dotaccent.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.17 a[



    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.18 a_


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/AE.html0000644000175000017500000000611211264347116026770 0ustar flichtenheldflichtenheld Untitled Document: 7.5 Æ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.5 Æ


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/x_002dspot.html0000644000175000017500000000327311264347116030412 0ustar flichtenheldflichtenheld Untitled Document: x-spot

    The node you are looking for is at x-spot.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/Umlaut.html0000644000175000017500000001205611264347116027756 0ustar flichtenheldflichtenheld Untitled Document: 1. Umlaut
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Umlaut


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/with-dotless-i.html0000644000175000017500000000632411264347116031364 0ustar flichtenheldflichtenheld Untitled Document: 3.5 ì
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.5 ì


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/nodetest_utf8.20000644000175000017500000000010011264347116030462 0ustar flichtenheldflichtenheld*** Node equivalent with `@aa{}' already used `@ringaccent{a}' texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes/j.html0000644000175000017500000000647411264347116026747 0ustar flichtenheldflichtenheld Untitled Document: 7.20 j
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.20 j

    ...

    ¡

    ¿

    £

    @- : @ followed by end of line:   @ followed by tab:   @ followed by space   @*:
    and text followin @*.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/texi_accentenc/0000755000175000017500000000000011264347116023732 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/texi_accentenc/accentenc.20000644000175000017500000000000011264347116025726 0ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/texi_accentenc/accentenc.passtexi0000644000175000017500000000610211264347116027436 0ustar flichtenheldflichtenheldaccentenc.texi(,2) @setfilename accentenc.info accentenc.texi(,3) @settitle Accent encoding test accentenc.texi(,4) @documentencoding ISO-8859-1 accentenc.texi(,5) accentenc.texi(,6) @node Top accentenc.texi(,7) @top Accent encoding test top accentenc.texi(,8) accent-text.txi(,1) @c args with braces, without braces/following whitespace accent-text.txi(,2) accent-text.txi(,3) should be e`: @`{e} @`e accent-text.txi(,4) accent-text.txi(,5) should be e': @'{e} @'e accent-text.txi(,6) accent-text.txi(,7) should be e^: @^{e} @^e accent-text.txi(,8) accent-text.txi(,9) should be u": @"{u} @"u accent-text.txi(,10) accent-text.txi(,11) should be i`: @`{i} @`i accent-text.txi(,12) accent-text.txi(,13) should be i': @'{i} @'i accent-text.txi(,14) accent-text.txi(,15) should be i^: @^{i} @^i accent-text.txi(,16) accent-text.txi(,17) should be u": @"{u} @"u accent-text.txi(,18) accent-text.txi(,19) should be c,: @,{c} @,c accent-text.txi(,20) accent-text.txi(,21) should be n~: @~{n} @~n accent-text.txi(,22) accent-text.txi(,23) should be e=: @={e} @=e accent-text.txi(,24) accent-text.txi(,25) should be e@w{'}': @H{e} @H e accent-text.txi(,26) accent-text.txi(,27) should be e.: @dotaccent{e} @dotaccent e accent-text.txi(,28) accent-text.txi(,29) should be e*: @ringaccent{e} @ringaccent e accent-text.txi(,30) accent-text.txi(,31) should be ee[: @tieaccent{ee} accent-text.txi(,32) accent-text.txi(,33) should be e(: @u{e} @u e accent-text.txi(,34) accent-text.txi(,35) should be e_: @ubaraccent{e} @ubaraccent e accent-text.txi(,36) accent-text.txi(,37) should be .e: @udotaccent{e} @udotaccent e accent-text.txi(,38) accent-text.txi(,39) should be e<: @v{e} @v e accent-text.txi(,40) accent-text.txi(,41) upside down: @questiondown{} @exclamdown{} accent-text.txi(,42) accent-text.txi(,43) A-with-circle: @aa{},@AA{} accent-text.txi(,44) accent-text.txi(,45) AE, OE ligatures: @ae{} @AE{} @oe{} @OE{} accent-text.txi(,46) accent-text.txi(,47) dotless i, j: @dotless{i} @dotless{j} accent-text.txi(,48) accent-text.txi(,49) Polish suppressed-L: @l{} @L{} accent-text.txi(,50) accent-text.txi(,51) O-with-slash: @o{} @O{} accent-text.txi(,52) accent-text.txi(,53) es-zet or sharp S: @ss{} accent-text.txi(,54) accent-text.txi(,55) pounds sterling: @pounds{} accent-text.txi(,56) accent-text.txi(,57) @c arg is command -- @dotless{i} is special-cased for HTML accent-text.txi(,58) should be dotless i`: @`{@dotless{i}} accent-text.txi(,59) accent-text.txi(,60) should be dotless i': @'{@dotless{i}} accent-text.txi(,61) accent-text.txi(,62) should be dotless i^: @^{@dotless{i}} accent-text.txi(,63) accent-text.txi(,64) should be dotless i": @"{@dotless{i}} accent-text.txi(,65) accent-text.txi(,66) @c arg is command -- @dotless{j} accent-text.txi(,67) should be dotless j`: @`{@dotless{j}} accent-text.txi(,68) accent-text.txi(,69) should be dotless j': @'{@dotless{j}} accent-text.txi(,70) accent-text.txi(,71) should be dotless j^: @^{@dotless{j}} accent-text.txi(,72) accent-text.txi(,73) should be dotless j": @"{@dotless{j}} accentenc.texi(,10) accentenc.texi(,11) @bye texi2html-1.82/test/encodings/res/texi_accentenc/accentenc.passfirst0000644000175000017500000000610211264347116027614 0ustar flichtenheldflichtenheldaccentenc.texi(,2) @setfilename accentenc.info accentenc.texi(,3) @settitle Accent encoding test accentenc.texi(,4) @documentencoding ISO-8859-1 accentenc.texi(,5) accentenc.texi(,6) @node Top accentenc.texi(,7) @top Accent encoding test top accentenc.texi(,8) accent-text.txi(,1) @c args with braces, without braces/following whitespace accent-text.txi(,2) accent-text.txi(,3) should be e`: @`{e} @`e accent-text.txi(,4) accent-text.txi(,5) should be e': @'{e} @'e accent-text.txi(,6) accent-text.txi(,7) should be e^: @^{e} @^e accent-text.txi(,8) accent-text.txi(,9) should be u": @"{u} @"u accent-text.txi(,10) accent-text.txi(,11) should be i`: @`{i} @`i accent-text.txi(,12) accent-text.txi(,13) should be i': @'{i} @'i accent-text.txi(,14) accent-text.txi(,15) should be i^: @^{i} @^i accent-text.txi(,16) accent-text.txi(,17) should be u": @"{u} @"u accent-text.txi(,18) accent-text.txi(,19) should be c,: @,{c} @,c accent-text.txi(,20) accent-text.txi(,21) should be n~: @~{n} @~n accent-text.txi(,22) accent-text.txi(,23) should be e=: @={e} @=e accent-text.txi(,24) accent-text.txi(,25) should be e@w{'}': @H{e} @H e accent-text.txi(,26) accent-text.txi(,27) should be e.: @dotaccent{e} @dotaccent e accent-text.txi(,28) accent-text.txi(,29) should be e*: @ringaccent{e} @ringaccent e accent-text.txi(,30) accent-text.txi(,31) should be ee[: @tieaccent{ee} accent-text.txi(,32) accent-text.txi(,33) should be e(: @u{e} @u e accent-text.txi(,34) accent-text.txi(,35) should be e_: @ubaraccent{e} @ubaraccent e accent-text.txi(,36) accent-text.txi(,37) should be .e: @udotaccent{e} @udotaccent e accent-text.txi(,38) accent-text.txi(,39) should be e<: @v{e} @v e accent-text.txi(,40) accent-text.txi(,41) upside down: @questiondown{} @exclamdown{} accent-text.txi(,42) accent-text.txi(,43) A-with-circle: @aa{},@AA{} accent-text.txi(,44) accent-text.txi(,45) AE, OE ligatures: @ae{} @AE{} @oe{} @OE{} accent-text.txi(,46) accent-text.txi(,47) dotless i, j: @dotless{i} @dotless{j} accent-text.txi(,48) accent-text.txi(,49) Polish suppressed-L: @l{} @L{} accent-text.txi(,50) accent-text.txi(,51) O-with-slash: @o{} @O{} accent-text.txi(,52) accent-text.txi(,53) es-zet or sharp S: @ss{} accent-text.txi(,54) accent-text.txi(,55) pounds sterling: @pounds{} accent-text.txi(,56) accent-text.txi(,57) @c arg is command -- @dotless{i} is special-cased for HTML accent-text.txi(,58) should be dotless i`: @`{@dotless{i}} accent-text.txi(,59) accent-text.txi(,60) should be dotless i': @'{@dotless{i}} accent-text.txi(,61) accent-text.txi(,62) should be dotless i^: @^{@dotless{i}} accent-text.txi(,63) accent-text.txi(,64) should be dotless i": @"{@dotless{i}} accent-text.txi(,65) accent-text.txi(,66) @c arg is command -- @dotless{j} accent-text.txi(,67) should be dotless j`: @`{@dotless{j}} accent-text.txi(,68) accent-text.txi(,69) should be dotless j': @'{@dotless{j}} accent-text.txi(,70) accent-text.txi(,71) should be dotless j^: @^{@dotless{j}} accent-text.txi(,72) accent-text.txi(,73) should be dotless j": @"{@dotless{j}} accentenc.texi(,10) accentenc.texi(,11) @bye texi2html-1.82/test/encodings/res/texi_accentenc/accentenc.texi0000644000175000017500000000266011264347116026554 0ustar flichtenheldflichtenheld\input texinfo @setfilename accentenc.info @settitle Accent encoding test @documentencoding ISO-8859-1 @node Top @top Accent encoding test top @c args with braces, without braces/following whitespace should be e`: @`{e} @`e should be e': @'{e} @'e should be e^: @^{e} @^e should be u": @"{u} @"u should be i`: @`{i} @`i should be i': @'{i} @'i should be i^: @^{i} @^i should be u": @"{u} @"u should be c,: @,{c} @,c should be n~: @~{n} @~n should be e=: @={e} @=e should be e@w{'}': @H{e} @H e should be e.: @dotaccent{e} @dotaccent e should be e*: @ringaccent{e} @ringaccent e should be ee[: @tieaccent{ee} should be e(: @u{e} @u e should be e_: @ubaraccent{e} @ubaraccent e should be .e: @udotaccent{e} @udotaccent e should be e<: @v{e} @v e upside down: @questiondown{} @exclamdown{} A-with-circle: @aa{},@AA{} AE, OE ligatures: @ae{} @AE{} @oe{} @OE{} dotless i, j: @dotless{i} @dotless{j} Polish suppressed-L: @l{} @L{} O-with-slash: @o{} @O{} es-zet or sharp S: @ss{} pounds sterling: @pounds{} @c arg is command -- @dotless{i} is special-cased for HTML should be dotless i`: @`{@dotless{i}} should be dotless i': @'{@dotless{i}} should be dotless i^: @^{@dotless{i}} should be dotless i": @"{@dotless{i}} @c arg is command -- @dotless{j} should be dotless j`: @`{@dotless{j}} should be dotless j': @'{@dotless{j}} should be dotless j^: @^{@dotless{j}} should be dotless j": @"{@dotless{j}} @bye texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/0000755000175000017500000000000011264347116026117 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/U.html0000644000175000017500000001677711264347116027233 0ustar flichtenheldflichtenheld Untitled Document: 1.11
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.11


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.11 Ú


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.12 Ù


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.10


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/A.html0000644000175000017500000002210211264347116027162 0ustar flichtenheldflichtenheld Untitled Document: 1.7
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.7

    Now a ref to a node without sectionning command, no text (see no section). With text (see but a text).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.7 Á


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.8 À


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.6


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.4 Ã


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/nodetest_latin1.20000644000175000017500000000010011264347116031266 0ustar flichtenheldflichtenheld*** Node equivalent with `@aa{}' already used `@ringaccent{a}' texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/nodetest_latin1_fot.html0000644000175000017500000000562611264347116032763 0ustar flichtenheldflichtenheld Untitled Document: Footnotes
    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/Y.html0000644000175000017500000000654111264347116027223 0ustar flichtenheldflichtenheld Untitled Document: 2.12 Ý
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.12 Ý

    This is a ref to (see section ). Another one, with node only (see section ).


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/L.html0000644000175000017500000000612011264347116027177 0ustar flichtenheldflichtenheld Untitled Document: 7.9 Ł
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.9 Ł


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/nodetest_latin1_abt.html0000644000175000017500000001234311264347116032733 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/cedilla-accent.html0000644000175000017500000000703311264347116031640 0ustar flichtenheldflichtenheld Untitled Document: 6. cedilla accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6. cedilla accent


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/AA.html0000644000175000017500000000612511264347116027272 0ustar flichtenheldflichtenheld Untitled Document: 7.4 Å
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.4 Å


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/l.html0000644000175000017500000000612011264347116027237 0ustar flichtenheldflichtenheld Untitled Document: 7.7 ł
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.7 ł


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/with-brace-i.html0000644000175000017500000000634311264347116031266 0ustar flichtenheldflichtenheld Untitled Document: 3.4 ì
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.4 ì


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/aa.html0000644000175000017500000001065411264347116027374 0ustar flichtenheldflichtenheld Untitled Document: 7.1 å
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.1 å


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.16 å


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/footanchor.html0000644000175000017500000000336411264347116031155 0ustar flichtenheldflichtenheld Untitled Document: footanchor

    The node you are looking for is at footanchor.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/acute-accent.html0000644000175000017500000001165511264347116031351 0ustar flichtenheldflichtenheld Untitled Document: 2. acute accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. acute accent


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/nodetest_latin1.html0000644000175000017500000001005411264347116032102 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Top


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/e.html0000644000175000017500000001670111264347116027236 0ustar flichtenheldflichtenheld Untitled Document: 1.2
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.2


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.2


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/n.html0000644000175000017500000000627411264347116027253 0ustar flichtenheldflichtenheld Untitled Document: 5.2 ñ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.2 ñ


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/rest.html0000644000175000017500000001425411264347116027770 0ustar flichtenheldflichtenheld Untitled Document: 7. rest
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7. rest


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/index.html0000644000175000017500000000330211264347116030112 0ustar flichtenheldflichtenheld Untitled Document: Top

    The node you are looking for is at Top.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/_002c.html0000644000175000017500000001017511264347116027614 0ustar flichtenheldflichtenheld Untitled Document: 7.21 ,
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.21 ,

    An index entry with accented letter.

    Jump to:   I  
    Index Entry Section

    I
    index entry with accented letter: à7.21 ,
    index entry with accented letter: à7.21 ,

    Jump to:   I  

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/ae.html0000644000175000017500000000612511264347116027376 0ustar flichtenheldflichtenheld Untitled Document: 7.2 æ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.2 æ


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/no-section.html0000644000175000017500000000332211264347116031063 0ustar flichtenheldflichtenheld Untitled Document: no section

    The node you are looking for is at no section.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/tilde-accent.html0000644000175000017500000000774111264347116031352 0ustar flichtenheldflichtenheld Untitled Document: 5. tilde accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5. tilde accent


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/nodetest_latin1_toc.html0000644000175000017500000002116111264347116032750 0ustar flichtenheldflichtenheld Untitled Document: Table of Contents
    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/C.html0000644000175000017500000000625711264347116027201 0ustar flichtenheldflichtenheld Untitled Document: 6.2 Ç
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.2 Ç


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/E.html0000644000175000017500000001671711264347116027205 0ustar flichtenheldflichtenheld Untitled Document: 1.8
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.8


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.8 É


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.9 È


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.7


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/u.html0000644000175000017500000001702611264347116027257 0ustar flichtenheldflichtenheld Untitled Document: 1.5
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.5

    Another ref to an anchor (see x-spot).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.5 ú


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.7


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.5


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/OE.html0000644000175000017500000001065611264347116027320 0ustar flichtenheldflichtenheld Untitled Document: 7.6 Œ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.6 Œ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.10 Ø


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/c.html0000644000175000017500000000624711264347116027240 0ustar flichtenheldflichtenheld Untitled Document: 6.1
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.1


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/i.html0000644000175000017500000002205111264347116027235 0ustar flichtenheldflichtenheld Untitled Document: 1.3
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.3

    before footnote See footanchor.

    (1)

    after footnote See footanchor.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3 í


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.3 ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.19 i


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/oe.html0000644000175000017500000001066011264347116027413 0ustar flichtenheldflichtenheld Untitled Document: 7.3 œ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.3 œ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.8 ø


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/circumflex-accent.html0000644000175000017500000001116711264347116032407 0ustar flichtenheldflichtenheld Untitled Document: 4. circumflex accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4. circumflex accent


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/y.html0000644000175000017500000001121711264347116027257 0ustar flichtenheldflichtenheld Untitled Document: 1.6
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.6

    This is a ref to a node (see section ).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.6 ý


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/ss.html0000644000175000017500000000637411264347116027444 0ustar flichtenheldflichtenheld Untitled Document: 1.12 ß
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.12 ß

    This is a node without sectioning command.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/e_002do.html0000644000175000017500000000327411264347116030143 0ustar flichtenheldflichtenheld Untitled Document: -o

    The node you are looking for is at -o.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/O.html0000644000175000017500000002203411264347116027204 0ustar flichtenheldflichtenheld Untitled Document: 1.10
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.10


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.10 Ó


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.11 Ò


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.9


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.5 Õ

    This marks the spot. A second one with accented char .


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/o.html0000644000175000017500000002205211264347116027244 0ustar flichtenheldflichtenheld Untitled Document: 1.4
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4

    Ref to an anchor at the end of the doc (see there is an o- could there be an î).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4 ó


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.6 ò


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.4


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.3 õ


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/grave-accent.html0000644000175000017500000001173611264347116031354 0ustar flichtenheldflichtenheld Untitled Document: 3. grave accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. grave accent


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/I.html0000644000175000017500000001672011264347116027203 0ustar flichtenheldflichtenheld Untitled Document: 1.9
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.9


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.9 Í


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.10 Ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.8


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/a.html0000644000175000017500000004462011264347116027233 0ustar flichtenheldflichtenheld Untitled Document: 1.1
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1

    ref to .


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.1 á

    With brace á. Testing ’ " ‘ ^.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.1


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.1


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.1 ã


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.11 a''



    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.12 ă



    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.13 a<



    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.14 ạ

    Test udotaccent.



    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.15 ȧ

    Test dotaccent.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.17 a[



    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.18 a_


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/AE.html0000644000175000017500000000612511264347116027276 0ustar flichtenheldflichtenheld Untitled Document: 7.5 Æ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.5 Æ


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/x_002dspot.html0000644000175000017500000000330011264347116030703 0ustar flichtenheldflichtenheld Untitled Document: x-spot

    The node you are looking for is at x-spot.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/Umlaut.html0000644000175000017500000001201311264347116030251 0ustar flichtenheldflichtenheld Untitled Document: 1. Umlaut
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Umlaut


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/with-dotless-i.html0000644000175000017500000000633711264347116031672 0ustar flichtenheldflichtenheld Untitled Document: 3.5 ì
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.5 ì


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes/j.html0000644000175000017500000000650711264347116027246 0ustar flichtenheldflichtenheld Untitled Document: 7.20 j
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.20 j

    ...

    ¡

    ¿

    £

    @- : @ followed by end of line:   @ followed by tab:   @ followed by space   @*:
    and text followin @*.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/texi_accent/0000755000175000017500000000000011264347116023244 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/texi_accent/accent.20000644000175000017500000000000011264347116024552 0ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/texi_accent/accent.passtexi0000644000175000017500000000574411264347116026275 0ustar flichtenheldflichtenheldaccent.texi(,2) @setfilename accent.info accent.texi(,3) @settitle Accent test accent.texi(,4) accent.texi(,5) @node Top accent.texi(,6) @top Accent test top accent.texi(,7) accent-text.txi(,1) @c args with braces, without braces/following whitespace accent-text.txi(,2) accent-text.txi(,3) should be e`: @`{e} @`e accent-text.txi(,4) accent-text.txi(,5) should be e': @'{e} @'e accent-text.txi(,6) accent-text.txi(,7) should be e^: @^{e} @^e accent-text.txi(,8) accent-text.txi(,9) should be u": @"{u} @"u accent-text.txi(,10) accent-text.txi(,11) should be i`: @`{i} @`i accent-text.txi(,12) accent-text.txi(,13) should be i': @'{i} @'i accent-text.txi(,14) accent-text.txi(,15) should be i^: @^{i} @^i accent-text.txi(,16) accent-text.txi(,17) should be u": @"{u} @"u accent-text.txi(,18) accent-text.txi(,19) should be c,: @,{c} @,c accent-text.txi(,20) accent-text.txi(,21) should be n~: @~{n} @~n accent-text.txi(,22) accent-text.txi(,23) should be e=: @={e} @=e accent-text.txi(,24) accent-text.txi(,25) should be e@w{'}': @H{e} @H e accent-text.txi(,26) accent-text.txi(,27) should be e.: @dotaccent{e} @dotaccent e accent-text.txi(,28) accent-text.txi(,29) should be e*: @ringaccent{e} @ringaccent e accent-text.txi(,30) accent-text.txi(,31) should be ee[: @tieaccent{ee} accent-text.txi(,32) accent-text.txi(,33) should be e(: @u{e} @u e accent-text.txi(,34) accent-text.txi(,35) should be e_: @ubaraccent{e} @ubaraccent e accent-text.txi(,36) accent-text.txi(,37) should be .e: @udotaccent{e} @udotaccent e accent-text.txi(,38) accent-text.txi(,39) should be e<: @v{e} @v e accent-text.txi(,40) accent-text.txi(,41) upside down: @questiondown{} @exclamdown{} accent-text.txi(,42) accent-text.txi(,43) A-with-circle: @aa{},@AA{} accent-text.txi(,44) accent-text.txi(,45) AE, OE ligatures: @ae{} @AE{} @oe{} @OE{} accent-text.txi(,46) accent-text.txi(,47) dotless i, j: @dotless{i} @dotless{j} accent-text.txi(,48) accent-text.txi(,49) Polish suppressed-L: @l{} @L{} accent-text.txi(,50) accent-text.txi(,51) O-with-slash: @o{} @O{} accent-text.txi(,52) accent-text.txi(,53) es-zet or sharp S: @ss{} accent-text.txi(,54) accent-text.txi(,55) pounds sterling: @pounds{} accent-text.txi(,56) accent-text.txi(,57) @c arg is command -- @dotless{i} is special-cased for HTML accent-text.txi(,58) should be dotless i`: @`{@dotless{i}} accent-text.txi(,59) accent-text.txi(,60) should be dotless i': @'{@dotless{i}} accent-text.txi(,61) accent-text.txi(,62) should be dotless i^: @^{@dotless{i}} accent-text.txi(,63) accent-text.txi(,64) should be dotless i": @"{@dotless{i}} accent-text.txi(,65) accent-text.txi(,66) @c arg is command -- @dotless{j} accent-text.txi(,67) should be dotless j`: @`{@dotless{j}} accent-text.txi(,68) accent-text.txi(,69) should be dotless j': @'{@dotless{j}} accent-text.txi(,70) accent-text.txi(,71) should be dotless j^: @^{@dotless{j}} accent-text.txi(,72) accent-text.txi(,73) should be dotless j": @"{@dotless{j}} accent.texi(,9) accent.texi(,10) @bye texi2html-1.82/test/encodings/res/texi_accent/accent.texi0000644000175000017500000000257611264347116025406 0ustar flichtenheldflichtenheld\input texinfo @setfilename accent.info @settitle Accent test @node Top @top Accent test top @c args with braces, without braces/following whitespace should be e`: @`{e} @`e should be e': @'{e} @'e should be e^: @^{e} @^e should be u": @"{u} @"u should be i`: @`{i} @`i should be i': @'{i} @'i should be i^: @^{i} @^i should be u": @"{u} @"u should be c,: @,{c} @,c should be n~: @~{n} @~n should be e=: @={e} @=e should be e@w{'}': @H{e} @H e should be e.: @dotaccent{e} @dotaccent e should be e*: @ringaccent{e} @ringaccent e should be ee[: @tieaccent{ee} should be e(: @u{e} @u e should be e_: @ubaraccent{e} @ubaraccent e should be .e: @udotaccent{e} @udotaccent e should be e<: @v{e} @v e upside down: @questiondown{} @exclamdown{} A-with-circle: @aa{},@AA{} AE, OE ligatures: @ae{} @AE{} @oe{} @OE{} dotless i, j: @dotless{i} @dotless{j} Polish suppressed-L: @l{} @L{} O-with-slash: @o{} @O{} es-zet or sharp S: @ss{} pounds sterling: @pounds{} @c arg is command -- @dotless{i} is special-cased for HTML should be dotless i`: @`{@dotless{i}} should be dotless i': @'{@dotless{i}} should be dotless i^: @^{@dotless{i}} should be dotless i": @"{@dotless{i}} @c arg is command -- @dotless{j} should be dotless j`: @`{@dotless{j}} should be dotless j': @'{@dotless{j}} should be dotless j^: @^{@dotless{j}} should be dotless j": @"{@dotless{j}} @bye texi2html-1.82/test/encodings/res/texi_accent/accent.passfirst0000644000175000017500000000574411264347116026453 0ustar flichtenheldflichtenheldaccent.texi(,2) @setfilename accent.info accent.texi(,3) @settitle Accent test accent.texi(,4) accent.texi(,5) @node Top accent.texi(,6) @top Accent test top accent.texi(,7) accent-text.txi(,1) @c args with braces, without braces/following whitespace accent-text.txi(,2) accent-text.txi(,3) should be e`: @`{e} @`e accent-text.txi(,4) accent-text.txi(,5) should be e': @'{e} @'e accent-text.txi(,6) accent-text.txi(,7) should be e^: @^{e} @^e accent-text.txi(,8) accent-text.txi(,9) should be u": @"{u} @"u accent-text.txi(,10) accent-text.txi(,11) should be i`: @`{i} @`i accent-text.txi(,12) accent-text.txi(,13) should be i': @'{i} @'i accent-text.txi(,14) accent-text.txi(,15) should be i^: @^{i} @^i accent-text.txi(,16) accent-text.txi(,17) should be u": @"{u} @"u accent-text.txi(,18) accent-text.txi(,19) should be c,: @,{c} @,c accent-text.txi(,20) accent-text.txi(,21) should be n~: @~{n} @~n accent-text.txi(,22) accent-text.txi(,23) should be e=: @={e} @=e accent-text.txi(,24) accent-text.txi(,25) should be e@w{'}': @H{e} @H e accent-text.txi(,26) accent-text.txi(,27) should be e.: @dotaccent{e} @dotaccent e accent-text.txi(,28) accent-text.txi(,29) should be e*: @ringaccent{e} @ringaccent e accent-text.txi(,30) accent-text.txi(,31) should be ee[: @tieaccent{ee} accent-text.txi(,32) accent-text.txi(,33) should be e(: @u{e} @u e accent-text.txi(,34) accent-text.txi(,35) should be e_: @ubaraccent{e} @ubaraccent e accent-text.txi(,36) accent-text.txi(,37) should be .e: @udotaccent{e} @udotaccent e accent-text.txi(,38) accent-text.txi(,39) should be e<: @v{e} @v e accent-text.txi(,40) accent-text.txi(,41) upside down: @questiondown{} @exclamdown{} accent-text.txi(,42) accent-text.txi(,43) A-with-circle: @aa{},@AA{} accent-text.txi(,44) accent-text.txi(,45) AE, OE ligatures: @ae{} @AE{} @oe{} @OE{} accent-text.txi(,46) accent-text.txi(,47) dotless i, j: @dotless{i} @dotless{j} accent-text.txi(,48) accent-text.txi(,49) Polish suppressed-L: @l{} @L{} accent-text.txi(,50) accent-text.txi(,51) O-with-slash: @o{} @O{} accent-text.txi(,52) accent-text.txi(,53) es-zet or sharp S: @ss{} accent-text.txi(,54) accent-text.txi(,55) pounds sterling: @pounds{} accent-text.txi(,56) accent-text.txi(,57) @c arg is command -- @dotless{i} is special-cased for HTML accent-text.txi(,58) should be dotless i`: @`{@dotless{i}} accent-text.txi(,59) accent-text.txi(,60) should be dotless i': @'{@dotless{i}} accent-text.txi(,61) accent-text.txi(,62) should be dotless i^: @^{@dotless{i}} accent-text.txi(,63) accent-text.txi(,64) should be dotless i": @"{@dotless{i}} accent-text.txi(,65) accent-text.txi(,66) @c arg is command -- @dotless{j} accent-text.txi(,67) should be dotless j`: @`{@dotless{j}} accent-text.txi(,68) accent-text.txi(,69) should be dotless j': @'{@dotless{j}} accent-text.txi(,70) accent-text.txi(,71) should be dotless j^: @^{@dotless{j}} accent-text.txi(,72) accent-text.txi(,73) should be dotless j": @"{@dotless{j}} accent.texi(,9) accent.texi(,10) @bye texi2html-1.82/test/encodings/res/texi_ogolat2/0000755000175000017500000000000011264347116023356 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/texi_ogolat2/ogolat2.20000644000175000017500000000000011264347116024776 0ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/texi_ogolat2/ogolat2.passtexi0000644000175000017500000000151611264347116026512 0ustar flichtenheldflichtenheldogolat2.texi(,2) @setfilename ogonek.info ogolat2.texi(,3) ogolat2.texi(,4) @documentencoding ISO-8859-2 ogolat2.texi(,5) ogolat2.texi(,6) @node Top ogolat2.texi(,7) @top OgoL2 ogolat2.texi(,8) ogolat2.texi(,9) Latin 2 (precomposed). ogolat2.texi(,10) @c 0xa1=0241 ogolat2.texi(,11) Aogonek: ogolat2.texi(,12) @c 0xb1=0261 ogolat2.texi(,13) aogonek: ogolat2.texi(,14) @c 0xb2=0262 ogolat2.texi(,15) standalone ogonek: ogolat2.texi(,16) @c 0xca=0312 ogolat2.texi(,17) Eogonek: ogolat2.texi(,18) @c 0xea=0352 ogolat2.texi(,19) eogonek: ogolat2.texi(,20) ogolat2.texi(,21) @noindent Accented. ogolat2.texi(,22) @ogonek{A} @ogonek{a} ogolat2.texi(,23) @ogonek{E} @ogonek{e} ogolat2.texi(,24) @ogonek{I} @ogonek{i} ogolat2.texi(,25) @ogonek{O} @ogonek{o} ogolat2.texi(,26) @ogonek{U} @ogonek{u} ogolat2.texi(,27) ogolat2.texi(,28) @bye texi2html-1.82/test/encodings/res/texi_ogolat2/ogolat2.passfirst0000644000175000017500000000151611264347116026670 0ustar flichtenheldflichtenheldogolat2.texi(,2) @setfilename ogonek.info ogolat2.texi(,3) ogolat2.texi(,4) @documentencoding ISO-8859-2 ogolat2.texi(,5) ogolat2.texi(,6) @node Top ogolat2.texi(,7) @top OgoL2 ogolat2.texi(,8) ogolat2.texi(,9) Latin 2 (precomposed). ogolat2.texi(,10) @c 0xa1=0241 ogolat2.texi(,11) Aogonek: ogolat2.texi(,12) @c 0xb1=0261 ogolat2.texi(,13) aogonek: ogolat2.texi(,14) @c 0xb2=0262 ogolat2.texi(,15) standalone ogonek: ogolat2.texi(,16) @c 0xca=0312 ogolat2.texi(,17) Eogonek: ogolat2.texi(,18) @c 0xea=0352 ogolat2.texi(,19) eogonek: ogolat2.texi(,20) ogolat2.texi(,21) @noindent Accented. ogolat2.texi(,22) @ogonek{A} @ogonek{a} ogolat2.texi(,23) @ogonek{E} @ogonek{e} ogolat2.texi(,24) @ogonek{I} @ogonek{i} ogolat2.texi(,25) @ogonek{O} @ogonek{o} ogolat2.texi(,26) @ogonek{U} @ogonek{u} ogolat2.texi(,27) ogolat2.texi(,28) @bye texi2html-1.82/test/encodings/res/texi_ogolat2/ogolat2.texi0000644000175000017500000000057711264347116025631 0ustar flichtenheldflichtenheld\input texinfo @setfilename ogonek.info @documentencoding ISO-8859-2 @node Top @top OgoL2 Latin 2 (precomposed). @c 0xa1=0241 Aogonek: @c 0xb1=0261 aogonek: @c 0xb2=0262 standalone ogonek: @c 0xca=0312 Eogonek: @c 0xea=0352 eogonek: @noindent Accented. @ogonek{A} @ogonek{a} @ogonek{E} @ogonek{e} @ogonek{I} @ogonek{i} @ogonek{O} @ogonek{o} @ogonek{U} @ogonek{u} @bye texi2html-1.82/test/encodings/res/umlaut/0000755000175000017500000000000011264347116022265 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/umlaut/umlaut.html0000644000175000017500000000736211264347116024472 0ustar flichtenheldflichtenheld Test for Umlaute, accent etc.

    1. This is what you get

    Copright Sign: ©
    Pound Sign: £
    Minus Zeichen: -
    TeX Logo: TeX
    dots{}: …
    bullet{}:•
    Vertical Bar:
    |

    valid umlaut ä ë ï ö ü ÿ Ä Ë Ï Ö Ü

    Non valid umlaut:
    Ẍ ẍ Q" Ÿ

    Special characters in HTML:
    < > &

    acute accent:
    á é í ó ú ý Á É Í Ó Ú Ý

    invalid acute accent:
    Ɗ q' ŕ Ź Q' Ŕ

    valid Cedilla:
    ç Ç

    non valid Cedilla:
    Ḩ ḩ

    macron:
    ō

    I don’t know any invalid macron:

    valid circumflex:
    â ê î ô û Â Ê Î Ô Û

    invalid circumflex:
    ẑ r^ t^ k^ Ẑ R^ T^ K^

    grave accent:
    à è ì ò ù À È Ì Ò Ù

    invalid grave accent:
    z` m` p`

    tilde accent:
    ã ñ õ Ã Õ

    invalid tilde accent:
    Z~ s~

    ȯ ő o* oo[ ŏ o_ ọ o< ¡ ¿ å Å æ Æ i j ł Ł ø Ø œ Œ ß

    What about @url and @uref

    http://www.fido.de/~kama

    Referenz:
    http://www.fido.de/~kama

    Referenz mit Display Text:
    Second Argument of uref

    Referenz mit Display Text and special:
    Third Argument of uref

    Email:
    kama@hippo.fido.de

    Email mit display:
    Anzeige der email Adrese


    Dieses Dokument wurde erzeugt von a tester am a sunny day durch texi2html.

    texi2html-1.82/test/encodings/res/umlaut/umlaut.20000644000175000017500000000000011264347116023645 0ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/0000755000175000017500000000000011264347116030330 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/U.html0000644000175000017500000001674711264347116031441 0ustar flichtenheldflichtenheld Untitled Document: 1.11 Ü
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.11 Ü


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.11 Ú


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.12 Ù


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.10 Û


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/A.html0000644000175000017500000002206411264347116031402 0ustar flichtenheldflichtenheld Untitled Document: 1.7 Ä
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.7 Ä

    Now a ref to a node without sectionning command, no text (see no section). With text (see but a text).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.7 Á


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.8 À


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.6 Â


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.4 Ã


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/Y.html0000644000175000017500000000651111264347116031431 0ustar flichtenheldflichtenheld Untitled Document: 2.12 Ý
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.12 Ý

    This is a ref to ü (see ü). Another one, with node only (see ü).


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/L.html0000644000175000017500000000610511264347116031413 0ustar flichtenheldflichtenheld Untitled Document: 7.9 Ł
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.9 Ł


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/cedilla-accent.html0000644000175000017500000000702511264347116034052 0ustar flichtenheldflichtenheld Untitled Document: 6. cedilla accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6. cedilla accent


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/AA.html0000644000175000017500000000611211264347116031477 0ustar flichtenheldflichtenheld Untitled Document: 7.4 Å
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.4 Å


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/l.html0000644000175000017500000000610511264347116031453 0ustar flichtenheldflichtenheld Untitled Document: 7.7 ł
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.7 ł


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/with-brace-i.html0000644000175000017500000000633011264347116033473 0ustar flichtenheldflichtenheld Untitled Document: 3.4 ì
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.4 ì


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/aa.html0000644000175000017500000001063311264347116031602 0ustar flichtenheldflichtenheld Untitled Document: 7.1 å
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.1 å


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.16 å


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/nodetest_utf8_abt.html0000644000175000017500000001232611264347116034643 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/footanchor.html0000644000175000017500000000335311264347116033364 0ustar flichtenheldflichtenheld Untitled Document: footanchor

    The node you are looking for is at footanchor.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/nodetest_utf8_toc.html0000644000175000017500000002127711264347116034667 0ustar flichtenheldflichtenheld Untitled Document: Table of Contents
    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/acute-accent.html0000644000175000017500000001171411264347116033556 0ustar flichtenheldflichtenheld Untitled Document: 2. acute accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. acute accent


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/e.html0000644000175000017500000001665311264347116031455 0ustar flichtenheldflichtenheld Untitled Document: 1.2 ë
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2 ë


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2 é


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.2 è


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.2 ê


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/n.html0000644000175000017500000000626111264347116031460 0ustar flichtenheldflichtenheld Untitled Document: 5.2 ñ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.2 ñ


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/rest.html0000644000175000017500000001432211264347116032175 0ustar flichtenheldflichtenheld Untitled Document: 7. rest
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7. rest


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/index.html0000644000175000017500000000327111264347116032330 0ustar flichtenheldflichtenheld Untitled Document: Top

    The node you are looking for is at Top.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/_002c.html0000644000175000017500000001016411264347116032023 0ustar flichtenheldflichtenheld Untitled Document: 7.21 ,
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.21 ,

    An index entry with accented letter.

    Jump to:   I  
    Index Entry Section

    I
    index entry with accented letter: à à7.21 ,
    index entry with accented letter: â à7.21 ,

    Jump to:   I  

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/ae.html0000644000175000017500000000611211264347116031603 0ustar flichtenheldflichtenheld Untitled Document: 7.2 æ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.2 æ


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/nodetest_utf8.html0000644000175000017500000001007311264347116034012 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Top


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/no-section.html0000644000175000017500000000627511264347116033306 0ustar flichtenheldflichtenheld Untitled Document: no section
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    no section

    This is a node without sectioning command.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/tilde-accent.html0000644000175000017500000000774311264347116033565 0ustar flichtenheldflichtenheld Untitled Document: 5. tilde accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5. tilde accent


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/C.html0000644000175000017500000000624411264347116031406 0ustar flichtenheldflichtenheld Untitled Document: 6.2 Ç
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.2 Ç


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/E.html0000644000175000017500000001666711264347116031422 0ustar flichtenheldflichtenheld Untitled Document: 1.8 Ë
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.8 Ë


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.8 É


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.9 È


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.7 Ê


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/u.html0000644000175000017500000001677711264347116031504 0ustar flichtenheldflichtenheld Untitled Document: 1.5 ü
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.5 ü

    Another ref to an anchor (see x-spot).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.5 ú


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.7 ù


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.5 û


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/OE.html0000644000175000017500000001063511264347116031526 0ustar flichtenheldflichtenheld Untitled Document: 7.6 Œ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.6 Œ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.10 Ø


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/c.html0000644000175000017500000000624011264347116031442 0ustar flichtenheldflichtenheld Untitled Document: 6.1 ç
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.1 ç


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/i.html0000644000175000017500000002200511264347116031445 0ustar flichtenheldflichtenheld Untitled Document: 1.3 ï
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.3 ï

    before footnote See footanchor.

    (1)

    after footnote See footanchor.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3 í


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.3 ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3 î


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.19 i


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/oe.html0000644000175000017500000001063711264347116031630 0ustar flichtenheldflichtenheld Untitled Document: 7.3 œ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.3 œ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.8 ø


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/circumflex-accent.html0000644000175000017500000001122111264347116034607 0ustar flichtenheldflichtenheld Untitled Document: 4. circumflex accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4. circumflex accent


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/nodetest_utf8_fot.html0000644000175000017500000000560511264347116034667 0ustar flichtenheldflichtenheld Untitled Document: Footnotes
    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/y.html0000644000175000017500000001117311264347116031471 0ustar flichtenheldflichtenheld Untitled Document: 1.6 ÿ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.6 ÿ

    This is a ref to a node (see à).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.6 ý


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/ss.html0000644000175000017500000000624111264347116031646 0ustar flichtenheldflichtenheld Untitled Document: 1.12 ß
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.12 ß


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/e_002do.html0000644000175000017500000000327311264347116032353 0ustar flichtenheldflichtenheld Untitled Document: é-o

    The node you are looking for is at é-o.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/O.html0000644000175000017500000002177611264347116031431 0ustar flichtenheldflichtenheld Untitled Document: 1.10 Ö
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.10 Ö


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.10 Ó


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.11 Ò


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.9 Ô


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.5 Õ

    This marks the spot. A second one with accented char .


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/o.html0000644000175000017500000002201511264347116031454 0ustar flichtenheldflichtenheld Untitled Document: 1.4 ö
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4 ö

    Ref to an anchor at the end of the doc (see there is an o-é could there be an î).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4 ó


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.6 ò


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.4 ô


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.3 õ


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/grave-accent.html0000644000175000017500000001205011264347116033553 0ustar flichtenheldflichtenheld Untitled Document: 3. grave accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. grave accent


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/I.html0000644000175000017500000001667011264347116031420 0ustar flichtenheldflichtenheld Untitled Document: 1.9 Ï
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.9 Ï


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.9 Í


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.10 Ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.8 Î


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/a.html0000644000175000017500000004451311264347116031445 0ustar flichtenheldflichtenheld Untitled Document: 1.1 ä
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 ä

    ref to ç ç.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.1 á

    With brace á. Testing ’ " ‘ ^.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.1 à


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.1 â


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.1 ã


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.11 a''



    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.12 ă



    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.13 a<



    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.14 ạ

    Test udotaccent.



    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.15 ȧ

    Test dotaccent.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.17 a[



    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.18 a_


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/AE.html0000644000175000017500000000611211264347116031503 0ustar flichtenheldflichtenheld Untitled Document: 7.5 Æ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.5 Æ


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/x_002dspot.html0000644000175000017500000000327311264347116033125 0ustar flichtenheldflichtenheld Untitled Document: x-spot

    The node you are looking for is at x-spot.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/Umlaut.html0000644000175000017500000001205611264347116032471 0ustar flichtenheldflichtenheld Untitled Document: 1. Umlaut
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Umlaut


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/with-dotless-i.html0000644000175000017500000000632411264347116034077 0ustar flichtenheldflichtenheld Untitled Document: 3.5 ì
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.5 ì


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/nodetest_utf8.20000644000175000017500000000010011264347116033175 0ustar flichtenheldflichtenheld*** Node equivalent with `@aa{}' already used `@ringaccent{a}' texi2html-1.82/test/encodings/res/nodetest_utf8_use_nodes_no_unidecode/j.html0000644000175000017500000000647411264347116031462 0ustar flichtenheldflichtenheld Untitled Document: 7.20 j
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.20 j

    ...

    ¡

    ¿

    £

    @- : @ followed by end of line:   @ followed by tab:   @ followed by space   @*:
    and text followin @*.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest/0000755000175000017500000000000011264347117022604 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/nodetest/nodetest.20000644000175000017500000000010011264347117024503 0ustar flichtenheldflichtenheld*** Node equivalent with `@aa{}' already used `@ringaccent{a}' texi2html-1.82/test/encodings/res/nodetest/nodetest.html0000644000175000017500000040774511264347117025340 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Top


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Umlaut


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 ä

    ref to ç ç.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2 ë


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.3 ï


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4 With brace ï


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.5 With dotless ï

    before footnote See footanchor.

    (1)

    after footnote See footanchor.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.6 ö

    Ref to an anchor at the end of the doc (see there is an o-é could there be an î).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.7 ü

    Another ref to an anchor (see x-spot).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.8 ÿ

    This is a ref to a node (see section Ú).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.9 Ä

    Now a ref to a node without sectionning command, no text (see no section). With text (see but a text).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.10 Ë


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.11 Ï


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.12 Ö


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.13 Ü


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.14 ß

    This is a node without sectioning command.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. acute accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.1 á

    With brace á. Testing ’ " ‘ ^.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2 é


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3 í


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4 ó


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.5 ú


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.6 ý


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.7 Á


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.8 É


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.9 Í


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.10 Ó


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.11 Ú


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.12 Ý

    This is a ref to ü (see section ü). Another one, with node only (see section ü).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. grave accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.1 à


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.2 è


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.3 ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.4 ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.5 ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.6 ò


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.7 ù


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.8 À


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.9 È


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.10 Ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.11 Ò


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.12 Ù


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4. circumflex accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.1 â


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.2 ê


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3 î


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.4 î

    Test @^{i}.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.5 î

    Test @^{@dotless{i}}.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.6 ô


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.7 û


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.8 Â


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.9 Ê


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.10 Î


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.11 Ô


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.12 Û


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5. tilde accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.1 ã


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.2 ñ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.3 õ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.4 Ã


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.5 Õ

    This marks the spot. A second one with accented char .


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6. cedilla accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.1 ç


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.2 Ç


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.3 ç no brace


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7. rest


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.1 å


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.2 æ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.3 œ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.4 Å


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.5 Æ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.6 Œ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.7 ł


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.8 ø


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.9 Ł


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.10 Ø


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.11 a''


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.12 ă


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.13 a<


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.14 ạ

    Test udotaccent.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.15 ȧ

    Test dotaccent.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.16 å


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.17 a[


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.18 a_


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.19 i


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.20 j

    ...

    ¡

    ¿

    £

    @- : @ followed by end of line:   @ followed by tab:   @ followed by space   @*:
    and text followin @*.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.21 ,


    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/at_commands_in_refs_utf8_use_nodes_no_unidecode/0000755000175000017500000000000011264347116032475 5ustar flichtenheldflichtenheld././@LongLink0000000000000000000000000000015500000000000011566 Lustar rootroottexi2html-1.82/test/encodings/res/at_commands_in_refs_utf8_use_nodes_no_unidecode/at_commands_in_refs_utf8.2texi2html-1.82/test/encodings/res/at_commands_in_refs_utf8_use_nodes_no_unidecode/at_commands_in_ref0000644000175000017500000000000011264347116036215 0ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/at_commands_in_refs_utf8_use_nodes_no_unidecode/index.html0000644000175000017500000000331711264347116034476 0ustar flichtenheldflichtenheld Untitled Document: Top

    The node you are looking for is at Top.

    ././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootroottexi2html-1.82/test/encodings/res/at_commands_in_refs_utf8_use_nodes_no_unidecode/at_commands_in_refs_utf8_abt.htmltexi2html-1.82/test/encodings/res/at_commands_in_refs_utf8_use_nodes_no_unidecode/at_commands_in_ref0000644000175000017500000001177611264347116036243 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    ././@LongLink0000000000000000000000000000016000000000000011562 Lustar rootroottexi2html-1.82/test/encodings/res/at_commands_in_refs_utf8_use_nodes_no_unidecode/at_commands_in_refs_utf8.htmltexi2html-1.82/test/encodings/res/at_commands_in_refs_utf8_use_nodes_no_unidecode/at_commands_in_ref0000644000175000017500000000562611264347116036240 0ustar flichtenheldflichtenheld Untitled Document: Top
    [Top] [Contents] [Index] [ ? ]

    Top


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    ././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootroottexi2html-1.82/test/encodings/res/at_commands_in_refs_utf8_use_nodes_no_unidecode/A-SC-node-i-i-E-l-C-_00a1-a-A.htmltexi2html-1.82/test/encodings/res/at_commands_in_refs_utf8_use_nodes_no_unidecode/A-SC-node-i-i-E-l-0000644000175000017500000000720611264347116035177 0ustar flichtenheldflichtenheld Untitled Document: 1. A SC node ï ï Ē` ł Ć, ¡ à Â
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. A SC node ï ï Ē` ł Ć, ¡ à Â

    see (manual)a strong ref with SC, a i trema ï, a dotless i trema ï Ē` and exclamdown ¡ à Â.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/at_commands_in_refs_latin1_use_nodes_no_unidecode/0000755000175000017500000000000011264347116032777 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/at_commands_in_refs_latin1_use_nodes_no_unidecode/index.html0000644000175000017500000000333011264347116034773 0ustar flichtenheldflichtenheld Untitled Document: Top

    The node you are looking for is at Top.

    ././@LongLink0000000000000000000000000000017000000000000011563 Lustar rootroottexi2html-1.82/test/encodings/res/at_commands_in_refs_latin1_use_nodes_no_unidecode/at_commands_in_refs_latin1_abt.htmltexi2html-1.82/test/encodings/res/at_commands_in_refs_latin1_use_nodes_no_unidecode/at_commands_in_r0000644000175000017500000001200711264347116036216 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootroottexi2html-1.82/test/encodings/res/at_commands_in_refs_latin1_use_nodes_no_unidecode/at_commands_in_refs_latin1.2texi2html-1.82/test/encodings/res/at_commands_in_refs_latin1_use_nodes_no_unidecode/at_commands_in_r0000644000175000017500000000000011264347116036204 0ustar flichtenheldflichtenheld././@LongLink0000000000000000000000000000016700000000000011571 Lustar rootroottexi2html-1.82/test/encodings/res/at_commands_in_refs_latin1_use_nodes_no_unidecode/A-SC-node-i-i-E-l-C-_00a1-a-A.htmltexi2html-1.82/test/encodings/res/at_commands_in_refs_latin1_use_nodes_no_unidecode/A-SC-node-i-i-E-0000644000175000017500000000721311264347116035246 0ustar flichtenheldflichtenheld Untitled Document: 1. A SC node ï ï Ē` ł Ć, ¡
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. A SC node ï ï Ē` ł Ć, ¡

    see (manual)a strong ref with SC, a i trema ï, a dotless i trema ï Ē` and exclamdown ¡ .


    This document was generated by a tester on a sunny day using texi2html.

    ././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootroottexi2html-1.82/test/encodings/res/at_commands_in_refs_latin1_use_nodes_no_unidecode/at_commands_in_refs_latin1.htmltexi2html-1.82/test/encodings/res/at_commands_in_refs_latin1_use_nodes_no_unidecode/at_commands_in_r0000644000175000017500000000563511264347116036227 0ustar flichtenheldflichtenheld Untitled Document: Top
    [Top] [Contents] [Index] [ ? ]

    Top


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/0000755000175000017500000000000011264347116030321 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/U.html0000644000175000017500000001677711264347116031435 0ustar flichtenheldflichtenheld Untitled Document: 1.11
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.11


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.11 Ú


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.12 Ù


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.10


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/A.html0000644000175000017500000002210211264347116031364 0ustar flichtenheldflichtenheld Untitled Document: 1.7
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.7

    Now a ref to a node without sectionning command, no text (see no section). With text (see but a text).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.7 Á


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.8 À


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.6


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.4 Ã


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/nodetest_latin1.20000644000175000017500000000010011264347116033470 0ustar flichtenheldflichtenheld*** Node equivalent with `@aa{}' already used `@ringaccent{a}' texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/nodetest_latin1_fot.html0000644000175000017500000000562611264347116035165 0ustar flichtenheldflichtenheld Untitled Document: Footnotes
    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/Y.html0000644000175000017500000000654111264347116031425 0ustar flichtenheldflichtenheld Untitled Document: 2.12 Ý
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.12 Ý

    This is a ref to (see section ). Another one, with node only (see section ).


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/L.html0000644000175000017500000000612011264347116031401 0ustar flichtenheldflichtenheld Untitled Document: 7.9 Ł
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.9 Ł


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/nodetest_latin1_abt.html0000644000175000017500000001234311264347116035135 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/cedilla-accent.html0000644000175000017500000000703311264347116034042 0ustar flichtenheldflichtenheld Untitled Document: 6. cedilla accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6. cedilla accent


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/AA.html0000644000175000017500000000612511264347116031474 0ustar flichtenheldflichtenheld Untitled Document: 7.4 Å
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.4 Å


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/l.html0000644000175000017500000000612011264347116031441 0ustar flichtenheldflichtenheld Untitled Document: 7.7 ł
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.7 ł


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/with-brace-i.html0000644000175000017500000000634311264347116033470 0ustar flichtenheldflichtenheld Untitled Document: 3.4 ì
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.4 ì


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/aa.html0000644000175000017500000001065411264347116031576 0ustar flichtenheldflichtenheld Untitled Document: 7.1 å
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.1 å


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.16 å


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/footanchor.html0000644000175000017500000000336411264347116033357 0ustar flichtenheldflichtenheld Untitled Document: footanchor

    The node you are looking for is at footanchor.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/acute-accent.html0000644000175000017500000001165511264347116033553 0ustar flichtenheldflichtenheld Untitled Document: 2. acute accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. acute accent


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/nodetest_latin1.html0000644000175000017500000001005411264347116034304 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Top


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/e.html0000644000175000017500000001670111264347116031440 0ustar flichtenheldflichtenheld Untitled Document: 1.2
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.2


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.2


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/n.html0000644000175000017500000000627411264347116031455 0ustar flichtenheldflichtenheld Untitled Document: 5.2 ñ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.2 ñ


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/rest.html0000644000175000017500000001425411264347116032172 0ustar flichtenheldflichtenheld Untitled Document: 7. rest
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7. rest


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/index.html0000644000175000017500000000330211264347116032314 0ustar flichtenheldflichtenheld Untitled Document: Top

    The node you are looking for is at Top.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/_002c.html0000644000175000017500000001017511264347116032016 0ustar flichtenheldflichtenheld Untitled Document: 7.21 ,
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.21 ,

    An index entry with accented letter.

    Jump to:   I  
    Index Entry Section

    I
    index entry with accented letter: à7.21 ,
    index entry with accented letter: à7.21 ,

    Jump to:   I  

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/ae.html0000644000175000017500000000612511264347116031600 0ustar flichtenheldflichtenheld Untitled Document: 7.2 æ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.2 æ


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/no-section.html0000644000175000017500000000332211264347116033265 0ustar flichtenheldflichtenheld Untitled Document: no section

    The node you are looking for is at no section.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/tilde-accent.html0000644000175000017500000000774111264347116033554 0ustar flichtenheldflichtenheld Untitled Document: 5. tilde accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5. tilde accent


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/nodetest_latin1_toc.html0000644000175000017500000002116111264347116035152 0ustar flichtenheldflichtenheld Untitled Document: Table of Contents
    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/C.html0000644000175000017500000000625711264347116031403 0ustar flichtenheldflichtenheld Untitled Document: 6.2 Ç
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.2 Ç


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/E.html0000644000175000017500000001671711264347116031407 0ustar flichtenheldflichtenheld Untitled Document: 1.8
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.8


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.8 É


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.9 È


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.7


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/u.html0000644000175000017500000001702611264347116031461 0ustar flichtenheldflichtenheld Untitled Document: 1.5
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.5

    Another ref to an anchor (see x-spot).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.5 ú


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.7


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.5


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/OE.html0000644000175000017500000001065611264347116031522 0ustar flichtenheldflichtenheld Untitled Document: 7.6 Œ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.6 Œ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.10 Ø


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/c.html0000644000175000017500000000624711264347116031442 0ustar flichtenheldflichtenheld Untitled Document: 6.1
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.1


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/i.html0000644000175000017500000002205111264347116031437 0ustar flichtenheldflichtenheld Untitled Document: 1.3
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.3

    before footnote See footanchor.

    (1)

    after footnote See footanchor.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3 í


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.3 ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.19 i


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/oe.html0000644000175000017500000001066011264347116031615 0ustar flichtenheldflichtenheld Untitled Document: 7.3 œ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.3 œ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.8 ø


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/circumflex-accent.html0000644000175000017500000001116711264347116034611 0ustar flichtenheldflichtenheld Untitled Document: 4. circumflex accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4. circumflex accent


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/y.html0000644000175000017500000001121711264347116031461 0ustar flichtenheldflichtenheld Untitled Document: 1.6
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.6

    This is a ref to a node (see section ).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.6 ý


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/ss.html0000644000175000017500000000637411264347116031646 0ustar flichtenheldflichtenheld Untitled Document: 1.12 ß
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.12 ß

    This is a node without sectioning command.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/e_002do.html0000644000175000017500000000327411264347116032345 0ustar flichtenheldflichtenheld Untitled Document: -o

    The node you are looking for is at -o.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/O.html0000644000175000017500000002203411264347116031406 0ustar flichtenheldflichtenheld Untitled Document: 1.10
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.10


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.10 Ó


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.11 Ò


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.9


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.5 Õ

    This marks the spot. A second one with accented char .


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/o.html0000644000175000017500000002205211264347116031446 0ustar flichtenheldflichtenheld Untitled Document: 1.4
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4

    Ref to an anchor at the end of the doc (see there is an o- could there be an î).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4 ó


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.6 ò


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.4


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.3 õ


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/grave-accent.html0000644000175000017500000001173611264347116033556 0ustar flichtenheldflichtenheld Untitled Document: 3. grave accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. grave accent


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/I.html0000644000175000017500000001672011264347116031405 0ustar flichtenheldflichtenheld Untitled Document: 1.9
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.9


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.9 Í


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.10 Ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.8


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/a.html0000644000175000017500000004462011264347116031435 0ustar flichtenheldflichtenheld Untitled Document: 1.1
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1

    ref to .


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.1 á

    With brace á. Testing ’ " ‘ ^.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.1


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.1


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.1 ã


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.11 a''



    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.12 ă



    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.13 a<



    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.14 ạ

    Test udotaccent.



    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.15 ȧ

    Test dotaccent.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.17 a[



    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.18 a_


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/AE.html0000644000175000017500000000612511264347116031500 0ustar flichtenheldflichtenheld Untitled Document: 7.5 Æ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.5 Æ


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/x_002dspot.html0000644000175000017500000000330011264347116033105 0ustar flichtenheldflichtenheld Untitled Document: x-spot

    The node you are looking for is at x-spot.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/Umlaut.html0000644000175000017500000001201311264347116032453 0ustar flichtenheldflichtenheld Untitled Document: 1. Umlaut
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Umlaut


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/with-dotless-i.html0000644000175000017500000000633711264347116034074 0ustar flichtenheldflichtenheld Untitled Document: 3.5 ì
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.5 ì


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_use_nodes_no_unicode/j.html0000644000175000017500000000650711264347116031450 0ustar flichtenheldflichtenheld Untitled Document: 7.20 j
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.20 j

    ...

    ¡

    ¿

    £

    @- : @ followed by end of line:   @ followed by tab:   @ followed by space   @*:
    and text followin @*.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_no_unicode/0000755000175000017500000000000011264347117025754 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/nodetest_utf8_no_unicode/nodetest_utf8.html0000644000175000017500000040214311264347117031441 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Top


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Umlaut


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 ä

    ref to ç ç.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2 ë


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.3 ï

    before footnote See footanchor.

    (1)

    after footnote See footanchor.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4 ö

    Ref to an anchor at the end of the doc (see there is an o-é could there be an î).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.5 ü

    Another ref to an anchor (see x-spot).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.6 ÿ

    This is a ref to a node (see section à).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.7 Ä

    Now a ref to a node without sectionning command, no text (see no section). With text (see but a text).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.8 Ë


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.9 Ï


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.10 Ö


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.11 Ü


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.12 ß

    This is a node without sectioning command.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. acute accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.1 á

    With brace á. Testing ’ " ‘ ^.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2 é


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3 í


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4 ó


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.5 ú


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.6 ý


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.7 Á


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.8 É


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.9 Í


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.10 Ó


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.11 Ú


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.12 Ý

    This is a ref to ü (see section ü). Another one, with node only (see section ü).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. grave accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.1 à


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.2 è


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.3 ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.4 ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.5 ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.6 ò


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.7 ù


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.8 À


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.9 È


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.10 Ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.11 Ò


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.12 Ù


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4. circumflex accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.1 â


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.2 ê


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3 î


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.4 ô


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.5 û


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.6 Â


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.7 Ê


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.8 Î


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.9 Ô


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.10 Û


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5. tilde accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.1 ã


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.2 ñ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.3 õ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.4 Ã


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.5 Õ

    This marks the spot. A second one with accented char .


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6. cedilla accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.1 ç


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.2 Ç


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7. rest


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.1 å


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.2 æ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.3 œ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.4 Å


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.5 Æ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.6 Œ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.7 ł


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.8 ø


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.9 Ł


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.10 Ø


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.11 a''


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.12 ă


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.13 a<


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.14 ạ

    Test udotaccent.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.15 ȧ

    Test dotaccent.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.16 å


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.17 a[


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.18 a_


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.19 i


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.20 j

    ...

    ¡

    ¿

    £

    @- : @ followed by end of line:   @ followed by tab:   @ followed by space   @*:
    and text followin @*.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.21 ,

    An index entry with accented letter.

    Jump to:   I  
    Index Entry Section

    I
    index entry with accented letter: à à7.21 ,
    index entry with accented letter: â à7.21 ,

    Jump to:   I  

    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8_no_unicode/nodetest_utf8.20000644000175000017500000000017711264347117030637 0ustar flichtenheldflichtenheld** Document encoding is utf8, but there is no unicode support *** Node equivalent with `@aa{}' already used `@ringaccent{a}' texi2html-1.82/test/encodings/res/at_commands_in_refs_latin1_use_nodes/0000755000175000017500000000000011264347116030264 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/at_commands_in_refs_latin1_use_nodes/index.html0000644000175000017500000000333011264347116032260 0ustar flichtenheldflichtenheld Untitled Document: Top

    The node you are looking for is at Top.

    ././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootroottexi2html-1.82/test/encodings/res/at_commands_in_refs_latin1_use_nodes/at_commands_in_refs_latin1_abt.htmltexi2html-1.82/test/encodings/res/at_commands_in_refs_latin1_use_nodes/at_commands_in_refs_latin1_ab0000644000175000017500000001200711264347116036113 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/at_commands_in_refs_latin1_use_nodes/at_commands_in_refs_latin1.20000644000175000017500000000000011264347116035577 0ustar flichtenheldflichtenheld././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootroottexi2html-1.82/test/encodings/res/at_commands_in_refs_latin1_use_nodes/A-SC-node-i-i-E-l-C-_00a1-a-A.htmltexi2html-1.82/test/encodings/res/at_commands_in_refs_latin1_use_nodes/A-SC-node-i-i-E-l-C-_00a1-a-A0000644000175000017500000000721311264347116034261 0ustar flichtenheldflichtenheld Untitled Document: 1. A SC node ï ï Ē` ł Ć, ¡
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. A SC node ï ï Ē` ł Ć, ¡

    see (manual)a strong ref with SC, a i trema ï, a dotless i trema ï Ē` and exclamdown ¡ .


    This document was generated by a tester on a sunny day using texi2html.

    ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootroottexi2html-1.82/test/encodings/res/at_commands_in_refs_latin1_use_nodes/at_commands_in_refs_latin1.htmltexi2html-1.82/test/encodings/res/at_commands_in_refs_latin1_use_nodes/at_commands_in_refs_latin1.ht0000644000175000017500000000563511264347116036074 0ustar flichtenheldflichtenheld Untitled Document: Top
    [Top] [Contents] [Index] [ ? ]

    Top


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/weird_accents_encoding/0000755000175000017500000000000011264347116025436 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/weird_accents_encoding/weird_accents.20000644000175000017500000000000011264347116030321 0ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/weird_accents_encoding/weird_accents.html0000644000175000017500000000370611264347116031144 0ustar flichtenheldflichtenheld Complex accent encoding test

    Complex accent encoding test top

    ĩ=

    ,=

    a_=

    r`'=


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1/0000755000175000017500000000000011264347116024053 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/nodetest_latin1/nodetest_latin1.20000644000175000017500000000010011264347116027222 0ustar flichtenheldflichtenheld*** Node equivalent with `@aa{}' already used `@ringaccent{a}' texi2html-1.82/test/encodings/res/nodetest_latin1/nodetest_latin1.html0000644000175000017500000037744311264347116030060 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Top


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Umlaut


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1

    ref to .


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.3

    before footnote See footanchor.

    (1)

    after footnote See footanchor.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4

    Ref to an anchor at the end of the doc (see there is an o- could there be an î).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.5

    Another ref to an anchor (see x-spot).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.6

    This is a ref to a node (see section ).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.7

    Now a ref to a node without sectionning command, no text (see no section). With text (see but a text).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.8


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.9


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.10


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.11


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.12 ß

    This is a node without sectioning command.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. acute accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.1 á

    With brace á. Testing ’ " ‘ ^.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3 í


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4 ó


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.5 ú


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.6 ý


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.7 Á


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.8 É


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.9 Í


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.10 Ó


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.11 Ú


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.12 Ý

    This is a ref to (see section ). Another one, with node only (see section ).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. grave accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.1


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.2


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.3 ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.4 ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.5 ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.6 ò


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.7


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.8 À


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.9 È


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.10 Ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.11 Ò


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.12 Ù


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4. circumflex accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.1


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.2


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.4


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.5


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.6


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.7


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.8


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.9


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.10


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5. tilde accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.1 ã


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.2 ñ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.3 õ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.4 Ã


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.5 Õ

    This marks the spot. A second one with accented char .


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6. cedilla accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.1


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.2 Ç


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7. rest


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.1 å


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.2 æ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.3 œ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.4 Å


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.5 Æ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.6 Œ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.7 ł


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.8 ø


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.9 Ł


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.10 Ø


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.11 a''


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.12 ă


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.13 a<


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.14 ạ

    Test udotaccent.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.15 ȧ

    Test dotaccent.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.16 å


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.17 a[


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.18 a_


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.19 i


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.20 j

    ...

    ¡

    ¿

    £

    @- : @ followed by end of line:   @ followed by tab:   @ followed by space   @*:
    and text followin @*.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.21 ,

    An index entry with accented letter.

    Jump to:   I  
    Index Entry Section

    I
    index entry with accented letter: à7.21 ,
    index entry with accented letter: à7.21 ,

    Jump to:   I  

    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/texi_unknown_language/0000755000175000017500000000000011264347116025351 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/texi_unknown_language/unknown_language.passfirst0000644000175000017500000000113511264347116032653 0ustar flichtenheldflichtenheldunknown_language.texi(,2) unknown_language.texi(,3) @setfilename unknown_language.info unknown_language.texi(,4) unknown_language.texi(,5) @documentlanguage unknown unknown_language.texi(,6) unknown_language.texi(,7) @node Top unknown_language.texi(,8) @top unknkown language unknown_language.texi(,9) unknown_language.texi(,10) Unknown language. @xref{Top}. unknown_language.texi(,11) unknown_language.texi(,12) @documentlanguage another_UNKNOWN unknown_language.texi(,13) unknown_language.texi(,14) Another unknown language. @xref{Top}. unknown_language.texi(,15) unknown_language.texi(,16) @bye texi2html-1.82/test/encodings/res/texi_unknown_language/unknown_language.20000644000175000017500000000046611264347116031004 0ustar flichtenheldflichtenheld*** Language specs for 'unknown' do not exists. Reverting to 'en' (l. 5) *** Language specs for 'another_UNKNOWN' do not exists. Reverting to 'en' (l. 12) *** Language specs for 'unknown' do not exists. Reverting to 'en' (l. 5) *** Language specs for 'another_UNKNOWN' do not exists. Reverting to 'en' (l. 12) texi2html-1.82/test/encodings/res/texi_unknown_language/unknown_language.texi0000644000175000017500000000036011264347116031605 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename unknown_language.info @documentlanguage unknown @node Top @top unknkown language Unknown language. @xref{Top}. @documentlanguage another_UNKNOWN Another unknown language. @xref{Top}. @bye texi2html-1.82/test/encodings/res/texi_unknown_language/unknown_language.passtexi0000644000175000017500000000113511264347116032475 0ustar flichtenheldflichtenheldunknown_language.texi(,2) unknown_language.texi(,3) @setfilename unknown_language.info unknown_language.texi(,4) unknown_language.texi(,5) @documentlanguage unknown unknown_language.texi(,6) unknown_language.texi(,7) @node Top unknown_language.texi(,8) @top unknkown language unknown_language.texi(,9) unknown_language.texi(,10) Unknown language. @xref{Top}. unknown_language.texi(,11) unknown_language.texi(,12) @documentlanguage another_UNKNOWN unknown_language.texi(,13) unknown_language.texi(,14) Another unknown language. @xref{Top}. unknown_language.texi(,15) unknown_language.texi(,16) @bye texi2html-1.82/test/encodings/res/at_commands_in_refs_no_unicode/0000755000175000017500000000000011264347116027152 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/at_commands_in_refs_no_unicode/at_commands_in_refs.html0000644000175000017500000001532611264347116034041 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Top


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. A SC node ï ï Ē` ł Ć, ¡

    see (manual)a strong ref with SC, a i trema ï, a dotless i trema ï Ē` and exclamdown ¡.


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/at_commands_in_refs_no_unicode/at_commands_in_refs.20000644000175000017500000000000011264347116033215 0ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/texi_nodetest_utf8/0000755000175000017500000000000011264347116024602 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/texi_nodetest_utf8/nodetest_utf8.texi0000644000175000017500000001432411264347116030274 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename nodetest_utf8.info @documentencoding utf8 @node Top,Umlaut,(dir) @top @menu * Umlaut:: Umlaut. Another Heading * acute accent:: acute accent. * grave accent:: grave accent. * circumflex accent:: circumflex accent. * tilde accent:: tilde accent. * cedilla accent:: cedilla accent. * rest:: rest @@aa@{@} etc. @end menu @c @node Umlaut,,Top,Top @chapter Umlaut @menu * ä:: ä. * ë:: ë. * ï:: ï. * ö:: ö. * ü:: ü. * ÿ:: ÿ. * Ä:: Ä. * Ë:: Ë. * Ï:: Ï. * Ö:: Ö. * Ü:: Ü. * @ss{}:: @ss{}. * no section:: Node without sectioning command. @end menu @c @node ä,,,Umlaut @section ä ref to ç @ref{ç}. @node ë,,,Umlaut @section ë @node ï,,,Umlaut @section ï before footnote @xref{footanchor}. @footnote{@anchor{footanchor}} after footnote @xref{footanchor}. @node ö,,,Umlaut @section ö Ref to an anchor at the end of the doc (@pxref{é-o, , there is an o-é could there be an @^{@dotless{i}}}). @node ü,,,Umlaut @section ü Another ref to an anchor (@pxref{x-spot, ,}). @node ÿ,,,Umlaut @section ÿ This is a ref to a node (@pxref{à, ,à}). @node Ä,,,Umlaut @section Ä Now a ref to a node without sectionning command, no text (@pxref{no section, , }). With text (@pxref{no section, ,but a text }). @node Ë,,,Umlaut @section Ë @node Ï,,,Umlaut @section Ï @node Ö,,,Umlaut @section Ö @node Ü,,,Umlaut @section Ü @node @ss{},,,Umlaut @section @ss{} @node no section,,,Umlaut This is a node without sectioning command. @c @node acute accent,,Top,Top @chapter acute accent @menu * @'a:: @'a. * é:: é. * @'i:: @'i. * @'o:: @'o. * @'u:: @'u. * @'y:: @'y. * @'A:: @'A. * @'E:: @'E. * @'I:: @'I. * @'O:: @'O. * @'U:: @'U. * @'Y:: @'Y. @end menu @c @node @'a,,,acute accent @section @'a With brace @'{a}. Testing ' " ` ^. @node é,,,acute accent @section é @node @'i,,,acute accent @section @'i @node @'o,,,acute accent @section @'o @node @'u,,,acute accent @section @'u @node @'y,,,acute accent @section @'y @node @'A,,,acute accent @section @'A @node @'E,,,acute accent @section @'E @node @'I,,,acute accent @section @'I @node @'O,,,acute accent @section @'O @node @'U,,,acute accent @section @'U @node @'Y,,,acute accent @section @'Y This is a ref to ü (@pxref{ü, ,ü}). Another one, with node only (@pxref{ü, ,}). @c @node grave accent,,Top,Top @chapter grave accent @menu * à:: à. * è:: è. * @`i:: @`i. * with brace @`{i}:: @`{i}. * with dotless @`{@dotless{i}}:: @`{@dotless{i}}. * @`o:: @`o. * ù:: ù. * @`A:: @`A. * @`E:: @`E. * @`I:: @`I. * @`O:: @`O. * @`U:: @`U. @end menu @c @node à,,,grave accent @section à @node è,,,grave accent @section è @node @`i,,,grave accent @section @`i @node with brace @`{i},,,grave accent @section @`{i} @node with dotless @`{@dotless{i}},,,grave accent @section @`{@dotless{i}} @node @`o,,,grave accent @section @`o @node ù,,,grave accent @section ù @node @`A,,,grave accent @section @`A @node @`E,,,grave accent @section @`E @node @`I,,,grave accent @section @`I @node @`O,,,grave accent @section @`O @node @`U,,,grave accent @section @`U @c @node circumflex accent,,Top,Top @chapter circumflex accent @menu * â:: â. * ê:: ê. * î:: î. * ô:: ô. * û:: û. * Â:: Â. * Ê:: Ê. * Î:: Î. * Ô:: Ô. * Û:: Û. @end menu @c @node â,,,circumflex accent @section â @node ê,,,circumflex accent @section ê @node î,,,circumflex accent @section î @node ô,,,circumflex accent @section ô @node û,,,circumflex accent @section û @node Â,,,circumflex accent @section  @node Ê,,,circumflex accent @section Ê @node Î,,,circumflex accent @section Î @node Ô,,,circumflex accent @section Ô @node Û,,,circumflex accent @section Û @c @node tilde accent,,Top,Top @chapter tilde accent @menu * @~a:: @~a. * @~n:: @~n. * @~o:: @~o. * @~A:: @~A. * @~O:: @~O. @end menu @c @node @~a,,,tilde accent @section @~a @node @~n,,,tilde accent @section @~n @node @~o,,,tilde accent @section @~o @node @~A,,,tilde accent @section @~A @node @~O,,,tilde accent @section @~O This marks the @anchor{x-spot}spot. A second one with accented char @anchor{é-o}. @c @node cedilla accent,,Top,Top @chapter cedilla accent @menu * ç:: ç. * @,{C}:: @,{C}. @end menu @c @node ç,,,cedilla accent @section ç @node @,{C},,,cedilla accent @section @,{C} @c @node rest,,Top,Top @chapter rest @menu * @aa{}:: @aa{}. * @ae{}:: @ae{}. * @oe{}:: @oe{}. * @AA{}:: @AA{}. * @AE{}:: @AE{}. * @OE{}:: @OE{}. * @l{}:: @l{}. * @o{}:: @o{}. * @L{}:: @L{}. * @O{}:: @O{}. * @H{a}:: @H{a}. * @u{a}:: @u{a}. * @v{a}:: @v{a}. * @udotaccent{a}:: @udotaccent{a} udotaccent. * @dotaccent{a}:: @dotaccent{a} dotaccent. * @ringaccent{a}:: @ringaccent{a} ringaccent. * @tieaccent{a}:: @tieaccent{a} tieaccent. * @ubaraccent{a}:: @ubaraccent{a} ubaraccent. * @dotless{i}:: @dotless{i} dotless i. * @dotless{j}:: @dotless{j} dotless j. * @comma{}:: @comma{} comma @end menu @c @node @aa{},,,rest @section @aa{} @node @ae{},,,rest @section @ae{} @node @oe{},,,rest @section @oe{} @node @AA{},,,rest @section @AA{} @node @AE{},,,rest @section @AE{} @node @OE{},,,rest @section @OE{} @node @l{},,,rest @section @l{} @node @o{},,,rest @section @o{} @node @L{},,,rest @section @L{} @node @O{},,,rest @section @O{} @node @H{a},,,rest @section @H{a} @node @u{a},,,rest @section @u{a} @node @v{a},,,rest @section @v{a} @node @udotaccent{a},,,rest @section @udotaccent{a} Test udotaccent. @node @dotaccent{a},,,rest @section @dotaccent{a} Test dotaccent. @node @ringaccent{a},,,rest @section @ringaccent{a} @node @tieaccent{a},,,rest @section @tieaccent{a} @node @ubaraccent{a},,,rest @section @ubaraccent{a} @node @dotless{i},,,rest @section @dotless{i} @node @dotless{j},,,rest @section @dotless{j} @dots{} @enddots{} @exclamdown{} @questiondown{} @pounds{} @@- : @- @@ followed by end of line: @ @@ followed by tab: @ @@ followed by space @ @@*: @* and text followin @@*. @node @comma{},,,rest @section @comma{} An index entry with accented letter. @cindex index entry with accented letter: à @`a @cindex index entry with accented letter: â @`a @printindex cp @contents @bye texi2html-1.82/test/encodings/res/texi_nodetest_utf8/nodetest_utf8.passfirst0000644000175000017500000003451411264347116031344 0ustar flichtenheldflichtenheldnodetest_utf8.texi(,2) @setfilename nodetest_utf8.info nodetest_utf8.texi(,3) @documentencoding utf8 nodetest_utf8.texi(,4) @node Top,Umlaut,(dir) nodetest_utf8.texi(,5) @top nodetest_utf8.texi(,6) @menu nodetest_utf8.texi(,7) * Umlaut:: Umlaut. nodetest_utf8.texi(,8) nodetest_utf8.texi(,9) nodetest_utf8.texi(,10) Another Heading nodetest_utf8.texi(,11) nodetest_utf8.texi(,12) nodetest_utf8.texi(,13) * acute accent:: acute accent. nodetest_utf8.texi(,14) * grave accent:: grave accent. nodetest_utf8.texi(,15) * circumflex accent:: circumflex accent. nodetest_utf8.texi(,16) * tilde accent:: tilde accent. nodetest_utf8.texi(,17) * cedilla accent:: cedilla accent. nodetest_utf8.texi(,18) * rest:: rest @@aa@{@} etc. nodetest_utf8.texi(,19) @end menu nodetest_utf8.texi(,20) @c nodetest_utf8.texi(,21) @node Umlaut,,Top,Top nodetest_utf8.texi(,22) @chapter Umlaut nodetest_utf8.texi(,23) @menu nodetest_utf8.texi(,24) * ä:: ä. nodetest_utf8.texi(,25) * ë:: ë. nodetest_utf8.texi(,26) * ï:: ï. nodetest_utf8.texi(,27) * ö:: ö. nodetest_utf8.texi(,28) * ü:: ü. nodetest_utf8.texi(,29) * ÿ:: ÿ. nodetest_utf8.texi(,30) * Ä:: Ä. nodetest_utf8.texi(,31) * Ë:: Ë. nodetest_utf8.texi(,32) * Ï:: Ï. nodetest_utf8.texi(,33) * Ö:: Ö. nodetest_utf8.texi(,34) * Ü:: Ü. nodetest_utf8.texi(,35) * @ss{}:: @ss{}. nodetest_utf8.texi(,36) * no section:: Node without sectioning command. nodetest_utf8.texi(,37) @end menu nodetest_utf8.texi(,38) @c nodetest_utf8.texi(,39) @node ä,,,Umlaut nodetest_utf8.texi(,40) @section ä nodetest_utf8.texi(,41) ref to ç @ref{ç}. nodetest_utf8.texi(,42) @node ë,,,Umlaut nodetest_utf8.texi(,43) @section ë nodetest_utf8.texi(,44) @node ï,,,Umlaut nodetest_utf8.texi(,45) @section ï nodetest_utf8.texi(,46) nodetest_utf8.texi(,47) before footnote @xref{footanchor}. nodetest_utf8.texi(,48) nodetest_utf8.texi(,49) @footnote{@anchor{footanchor}} nodetest_utf8.texi(,50) nodetest_utf8.texi(,51) after footnote @xref{footanchor}. nodetest_utf8.texi(,52) nodetest_utf8.texi(,53) @node ö,,,Umlaut nodetest_utf8.texi(,54) @section ö nodetest_utf8.texi(,55) Ref to an anchor at the end of the doc nodetest_utf8.texi(,56) (@pxref{é-o, , there is an o-é could there be an @^{@dotless{i}}}). nodetest_utf8.texi(,57) @node ü,,,Umlaut nodetest_utf8.texi(,58) @section ü nodetest_utf8.texi(,59) Another ref to an anchor (@pxref{x-spot, ,}). nodetest_utf8.texi(,60) @node ÿ,,,Umlaut nodetest_utf8.texi(,61) @section ÿ nodetest_utf8.texi(,62) This is a ref to a node (@pxref{à, ,à}). nodetest_utf8.texi(,63) nodetest_utf8.texi(,64) @node Ä,,,Umlaut nodetest_utf8.texi(,65) @section Ä nodetest_utf8.texi(,66) nodetest_utf8.texi(,67) Now a ref to a node without sectionning command, nodetest_utf8.texi(,68) no text (@pxref{no section, , }). nodetest_utf8.texi(,69) With text (@pxref{no section, ,but a text }). nodetest_utf8.texi(,70) nodetest_utf8.texi(,71) @node Ë,,,Umlaut nodetest_utf8.texi(,72) @section Ë nodetest_utf8.texi(,73) @node Ï,,,Umlaut nodetest_utf8.texi(,74) @section Ï nodetest_utf8.texi(,75) @node Ö,,,Umlaut nodetest_utf8.texi(,76) @section Ö nodetest_utf8.texi(,77) @node Ü,,,Umlaut nodetest_utf8.texi(,78) @section Ü nodetest_utf8.texi(,79) @node @ss{},,,Umlaut nodetest_utf8.texi(,80) @section @ss{} nodetest_utf8.texi(,81) @node no section,,,Umlaut nodetest_utf8.texi(,82) This is a node without sectioning command. nodetest_utf8.texi(,83) @c nodetest_utf8.texi(,84) @node acute accent,,Top,Top nodetest_utf8.texi(,85) @chapter acute accent nodetest_utf8.texi(,86) @menu nodetest_utf8.texi(,87) * @'a:: @'a. nodetest_utf8.texi(,88) * é:: é. nodetest_utf8.texi(,89) * @'i:: @'i. nodetest_utf8.texi(,90) * @'o:: @'o. nodetest_utf8.texi(,91) * @'u:: @'u. nodetest_utf8.texi(,92) * @'y:: @'y. nodetest_utf8.texi(,93) * @'A:: @'A. nodetest_utf8.texi(,94) * @'E:: @'E. nodetest_utf8.texi(,95) * @'I:: @'I. nodetest_utf8.texi(,96) * @'O:: @'O. nodetest_utf8.texi(,97) * @'U:: @'U. nodetest_utf8.texi(,98) * @'Y:: @'Y. nodetest_utf8.texi(,99) @end menu nodetest_utf8.texi(,100) @c nodetest_utf8.texi(,101) @node @'a,,,acute accent nodetest_utf8.texi(,102) @section @'a nodetest_utf8.texi(,103) With brace @'{a}. Testing ' " ` ^. nodetest_utf8.texi(,104) @node é,,,acute accent nodetest_utf8.texi(,105) @section é nodetest_utf8.texi(,106) @node @'i,,,acute accent nodetest_utf8.texi(,107) @section @'i nodetest_utf8.texi(,108) @node @'o,,,acute accent nodetest_utf8.texi(,109) @section @'o nodetest_utf8.texi(,110) @node @'u,,,acute accent nodetest_utf8.texi(,111) @section @'u nodetest_utf8.texi(,112) @node @'y,,,acute accent nodetest_utf8.texi(,113) @section @'y nodetest_utf8.texi(,114) @node @'A,,,acute accent nodetest_utf8.texi(,115) @section @'A nodetest_utf8.texi(,116) @node @'E,,,acute accent nodetest_utf8.texi(,117) @section @'E nodetest_utf8.texi(,118) @node @'I,,,acute accent nodetest_utf8.texi(,119) @section @'I nodetest_utf8.texi(,120) @node @'O,,,acute accent nodetest_utf8.texi(,121) @section @'O nodetest_utf8.texi(,122) @node @'U,,,acute accent nodetest_utf8.texi(,123) @section @'U nodetest_utf8.texi(,124) @node @'Y,,,acute accent nodetest_utf8.texi(,125) @section @'Y nodetest_utf8.texi(,126) This is a ref to ü (@pxref{ü, ,ü}). nodetest_utf8.texi(,127) Another one, with node only (@pxref{ü, ,}). nodetest_utf8.texi(,128) nodetest_utf8.texi(,132) nodetest_utf8.texi(,133) @c nodetest_utf8.texi(,134) @node grave accent,,Top,Top nodetest_utf8.texi(,135) @chapter grave accent nodetest_utf8.texi(,136) @menu nodetest_utf8.texi(,137) * à:: à. nodetest_utf8.texi(,138) * è:: è. nodetest_utf8.texi(,139) * @`i:: @`i. nodetest_utf8.texi(,140) * with brace @`{i}:: @`{i}. nodetest_utf8.texi(,141) * with dotless @`{@dotless{i}}:: @`{@dotless{i}}. nodetest_utf8.texi(,142) * @`o:: @`o. nodetest_utf8.texi(,143) * ù:: ù. nodetest_utf8.texi(,144) * @`A:: @`A. nodetest_utf8.texi(,145) * @`E:: @`E. nodetest_utf8.texi(,146) * @`I:: @`I. nodetest_utf8.texi(,147) * @`O:: @`O. nodetest_utf8.texi(,148) * @`U:: @`U. nodetest_utf8.texi(,149) @end menu nodetest_utf8.texi(,150) @c nodetest_utf8.texi(,151) @node à,,,grave accent nodetest_utf8.texi(,152) @section à nodetest_utf8.texi(,153) @node è,,,grave accent nodetest_utf8.texi(,154) @section è nodetest_utf8.texi(,155) @node @`i,,,grave accent nodetest_utf8.texi(,156) @section @`i nodetest_utf8.texi(,157) @node with brace @`{i},,,grave accent nodetest_utf8.texi(,158) @section @`{i} nodetest_utf8.texi(,159) @node with dotless @`{@dotless{i}},,,grave accent nodetest_utf8.texi(,160) @section @`{@dotless{i}} nodetest_utf8.texi(,161) @node @`o,,,grave accent nodetest_utf8.texi(,162) @section @`o nodetest_utf8.texi(,163) @node ù,,,grave accent nodetest_utf8.texi(,164) @section ù nodetest_utf8.texi(,165) @node @`A,,,grave accent nodetest_utf8.texi(,166) @section @`A nodetest_utf8.texi(,167) @node @`E,,,grave accent nodetest_utf8.texi(,168) @section @`E nodetest_utf8.texi(,169) @node @`I,,,grave accent nodetest_utf8.texi(,170) @section @`I nodetest_utf8.texi(,171) @node @`O,,,grave accent nodetest_utf8.texi(,172) @section @`O nodetest_utf8.texi(,173) @node @`U,,,grave accent nodetest_utf8.texi(,174) @section @`U nodetest_utf8.texi(,175) @c nodetest_utf8.texi(,176) @node circumflex accent,,Top,Top nodetest_utf8.texi(,177) @chapter circumflex accent nodetest_utf8.texi(,178) @menu nodetest_utf8.texi(,179) * â:: â. nodetest_utf8.texi(,180) * ê:: ê. nodetest_utf8.texi(,181) * î:: î. nodetest_utf8.texi(,182) * ô:: ô. nodetest_utf8.texi(,183) * û:: û. nodetest_utf8.texi(,184) * Â:: Â. nodetest_utf8.texi(,185) * Ê:: Ê. nodetest_utf8.texi(,186) * Î:: Î. nodetest_utf8.texi(,187) * Ô:: Ô. nodetest_utf8.texi(,188) * Û:: Û. nodetest_utf8.texi(,189) @end menu nodetest_utf8.texi(,190) @c nodetest_utf8.texi(,191) @node â,,,circumflex accent nodetest_utf8.texi(,192) @section â nodetest_utf8.texi(,193) @node ê,,,circumflex accent nodetest_utf8.texi(,194) @section ê nodetest_utf8.texi(,195) @node î,,,circumflex accent nodetest_utf8.texi(,196) @section î nodetest_utf8.texi(,197) @node ô,,,circumflex accent nodetest_utf8.texi(,198) @section ô nodetest_utf8.texi(,199) @node û,,,circumflex accent nodetest_utf8.texi(,200) @section û nodetest_utf8.texi(,201) @node Â,,,circumflex accent nodetest_utf8.texi(,202) @section  nodetest_utf8.texi(,203) @node Ê,,,circumflex accent nodetest_utf8.texi(,204) @section Ê nodetest_utf8.texi(,205) @node Î,,,circumflex accent nodetest_utf8.texi(,206) @section Î nodetest_utf8.texi(,207) @node Ô,,,circumflex accent nodetest_utf8.texi(,208) @section Ô nodetest_utf8.texi(,209) @node Û,,,circumflex accent nodetest_utf8.texi(,210) @section Û nodetest_utf8.texi(,211) @c nodetest_utf8.texi(,212) @node tilde accent,,Top,Top nodetest_utf8.texi(,213) @chapter tilde accent nodetest_utf8.texi(,214) @menu nodetest_utf8.texi(,215) * @~a:: @~a. nodetest_utf8.texi(,216) * @~n:: @~n. nodetest_utf8.texi(,217) * @~o:: @~o. nodetest_utf8.texi(,218) * @~A:: @~A. nodetest_utf8.texi(,219) * @~O:: @~O. nodetest_utf8.texi(,220) @end menu nodetest_utf8.texi(,221) @c nodetest_utf8.texi(,222) @node @~a,,,tilde accent nodetest_utf8.texi(,223) @section @~a nodetest_utf8.texi(,224) @node @~n,,,tilde accent nodetest_utf8.texi(,225) @section @~n nodetest_utf8.texi(,226) @node @~o,,,tilde accent nodetest_utf8.texi(,227) @section @~o nodetest_utf8.texi(,228) @node @~A,,,tilde accent nodetest_utf8.texi(,229) @section @~A nodetest_utf8.texi(,230) @node @~O,,,tilde accent nodetest_utf8.texi(,231) @section @~O nodetest_utf8.texi(,232) This marks the @anchor{x-spot}spot. nodetest_utf8.texi(,233) A second one with accented char @anchor{é-o}. nodetest_utf8.texi(,234) @c nodetest_utf8.texi(,235) @node cedilla accent,,Top,Top nodetest_utf8.texi(,236) @chapter cedilla accent nodetest_utf8.texi(,237) @menu nodetest_utf8.texi(,238) * ç:: ç. nodetest_utf8.texi(,239) * @,{C}:: @,{C}. nodetest_utf8.texi(,240) @end menu nodetest_utf8.texi(,241) @c nodetest_utf8.texi(,242) @node ç,,,cedilla accent nodetest_utf8.texi(,243) @section ç nodetest_utf8.texi(,244) @node @,{C},,,cedilla accent nodetest_utf8.texi(,245) @section @,{C} nodetest_utf8.texi(,246) @c nodetest_utf8.texi(,247) @node rest,,Top,Top nodetest_utf8.texi(,248) @chapter rest nodetest_utf8.texi(,249) @menu nodetest_utf8.texi(,250) * @aa{}:: @aa{}. nodetest_utf8.texi(,251) * @ae{}:: @ae{}. nodetest_utf8.texi(,252) * @oe{}:: @oe{}. nodetest_utf8.texi(,253) * @AA{}:: @AA{}. nodetest_utf8.texi(,254) * @AE{}:: @AE{}. nodetest_utf8.texi(,255) * @OE{}:: @OE{}. nodetest_utf8.texi(,256) * @l{}:: @l{}. nodetest_utf8.texi(,257) * @o{}:: @o{}. nodetest_utf8.texi(,258) * @L{}:: @L{}. nodetest_utf8.texi(,259) * @O{}:: @O{}. nodetest_utf8.texi(,260) * @H{a}:: @H{a}. nodetest_utf8.texi(,261) * @u{a}:: @u{a}. nodetest_utf8.texi(,262) * @v{a}:: @v{a}. nodetest_utf8.texi(,263) * @udotaccent{a}:: @udotaccent{a} udotaccent. nodetest_utf8.texi(,264) * @dotaccent{a}:: @dotaccent{a} dotaccent. nodetest_utf8.texi(,265) * @ringaccent{a}:: @ringaccent{a} ringaccent. nodetest_utf8.texi(,266) * @tieaccent{a}:: @tieaccent{a} tieaccent. nodetest_utf8.texi(,267) * @ubaraccent{a}:: @ubaraccent{a} ubaraccent. nodetest_utf8.texi(,268) * @dotless{i}:: @dotless{i} dotless i. nodetest_utf8.texi(,269) * @dotless{j}:: @dotless{j} dotless j. nodetest_utf8.texi(,270) * @comma{}:: @comma{} comma nodetest_utf8.texi(,271) @end menu nodetest_utf8.texi(,272) @c nodetest_utf8.texi(,273) @node @aa{},,,rest nodetest_utf8.texi(,274) @section @aa{} nodetest_utf8.texi(,275) @node @ae{},,,rest nodetest_utf8.texi(,276) @section @ae{} nodetest_utf8.texi(,277) @node @oe{},,,rest nodetest_utf8.texi(,278) @section @oe{} nodetest_utf8.texi(,279) @node @AA{},,,rest nodetest_utf8.texi(,280) @section @AA{} nodetest_utf8.texi(,281) @node @AE{},,,rest nodetest_utf8.texi(,282) @section @AE{} nodetest_utf8.texi(,283) @node @OE{},,,rest nodetest_utf8.texi(,284) @section @OE{} nodetest_utf8.texi(,285) @node @l{},,,rest nodetest_utf8.texi(,286) @section @l{} nodetest_utf8.texi(,287) @node @o{},,,rest nodetest_utf8.texi(,288) @section @o{} nodetest_utf8.texi(,289) @node @L{},,,rest nodetest_utf8.texi(,290) @section @L{} nodetest_utf8.texi(,291) @node @O{},,,rest nodetest_utf8.texi(,292) @section @O{} nodetest_utf8.texi(,293) @node @H{a},,,rest nodetest_utf8.texi(,294) @section @H{a} nodetest_utf8.texi(,295) @node @u{a},,,rest nodetest_utf8.texi(,296) @section @u{a} nodetest_utf8.texi(,297) @node @v{a},,,rest nodetest_utf8.texi(,298) @section @v{a} nodetest_utf8.texi(,299) @node @udotaccent{a},,,rest nodetest_utf8.texi(,300) @section @udotaccent{a} nodetest_utf8.texi(,301) Test udotaccent. nodetest_utf8.texi(,302) @node @dotaccent{a},,,rest nodetest_utf8.texi(,303) @section @dotaccent{a} nodetest_utf8.texi(,304) Test dotaccent. nodetest_utf8.texi(,305) @node @ringaccent{a},,,rest nodetest_utf8.texi(,306) @section @ringaccent{a} nodetest_utf8.texi(,307) @node @tieaccent{a},,,rest nodetest_utf8.texi(,308) @section @tieaccent{a} nodetest_utf8.texi(,309) @node @ubaraccent{a},,,rest nodetest_utf8.texi(,310) @section @ubaraccent{a} nodetest_utf8.texi(,311) @node @dotless{i},,,rest nodetest_utf8.texi(,312) @section @dotless{i} nodetest_utf8.texi(,313) @node @dotless{j},,,rest nodetest_utf8.texi(,314) @section @dotless{j} nodetest_utf8.texi(,315) nodetest_utf8.texi(,316) @dots{} nodetest_utf8.texi(,317) nodetest_utf8.texi(,318) @enddots{} nodetest_utf8.texi(,319) nodetest_utf8.texi(,320) @exclamdown{} nodetest_utf8.texi(,321) nodetest_utf8.texi(,322) @questiondown{} nodetest_utf8.texi(,323) nodetest_utf8.texi(,324) @pounds{} nodetest_utf8.texi(,325) nodetest_utf8.texi(,326) @@- : @- nodetest_utf8.texi(,327) @@ followed by end of line: @ nodetest_utf8.texi(,328) @@ followed by tab: @ nodetest_utf8.texi(,329) @@ followed by space @ nodetest_utf8.texi(,330) @@*: @* and text followin @@*. nodetest_utf8.texi(,331) nodetest_utf8.texi(,332) @node @comma{},,,rest nodetest_utf8.texi(,333) @section @comma{} nodetest_utf8.texi(,334) nodetest_utf8.texi(,335) An index entry with accented letter. nodetest_utf8.texi(,336) @cindex index entry with accented letter: à @`a nodetest_utf8.texi(,337) @cindex index entry with accented letter: â @`a nodetest_utf8.texi(,338) nodetest_utf8.texi(,339) @printindex cp nodetest_utf8.texi(,340) nodetest_utf8.texi(,341) @contents nodetest_utf8.texi(,342) @bye texi2html-1.82/test/encodings/res/texi_nodetest_utf8/nodetest_utf8.passtexi0000644000175000017500000003451411264347116031166 0ustar flichtenheldflichtenheldnodetest_utf8.texi(,2) @setfilename nodetest_utf8.info nodetest_utf8.texi(,3) @documentencoding utf8 nodetest_utf8.texi(,4) @node Top,Umlaut,(dir) nodetest_utf8.texi(,5) @top nodetest_utf8.texi(,6) @menu nodetest_utf8.texi(,7) * Umlaut:: Umlaut. nodetest_utf8.texi(,8) nodetest_utf8.texi(,9) nodetest_utf8.texi(,10) Another Heading nodetest_utf8.texi(,11) nodetest_utf8.texi(,12) nodetest_utf8.texi(,13) * acute accent:: acute accent. nodetest_utf8.texi(,14) * grave accent:: grave accent. nodetest_utf8.texi(,15) * circumflex accent:: circumflex accent. nodetest_utf8.texi(,16) * tilde accent:: tilde accent. nodetest_utf8.texi(,17) * cedilla accent:: cedilla accent. nodetest_utf8.texi(,18) * rest:: rest @@aa@{@} etc. nodetest_utf8.texi(,19) @end menu nodetest_utf8.texi(,20) @c nodetest_utf8.texi(,21) @node Umlaut,,Top,Top nodetest_utf8.texi(,22) @chapter Umlaut nodetest_utf8.texi(,23) @menu nodetest_utf8.texi(,24) * ä:: ä. nodetest_utf8.texi(,25) * ë:: ë. nodetest_utf8.texi(,26) * ï:: ï. nodetest_utf8.texi(,27) * ö:: ö. nodetest_utf8.texi(,28) * ü:: ü. nodetest_utf8.texi(,29) * ÿ:: ÿ. nodetest_utf8.texi(,30) * Ä:: Ä. nodetest_utf8.texi(,31) * Ë:: Ë. nodetest_utf8.texi(,32) * Ï:: Ï. nodetest_utf8.texi(,33) * Ö:: Ö. nodetest_utf8.texi(,34) * Ü:: Ü. nodetest_utf8.texi(,35) * @ss{}:: @ss{}. nodetest_utf8.texi(,36) * no section:: Node without sectioning command. nodetest_utf8.texi(,37) @end menu nodetest_utf8.texi(,38) @c nodetest_utf8.texi(,39) @node ä,,,Umlaut nodetest_utf8.texi(,40) @section ä nodetest_utf8.texi(,41) ref to ç @ref{ç}. nodetest_utf8.texi(,42) @node ë,,,Umlaut nodetest_utf8.texi(,43) @section ë nodetest_utf8.texi(,44) @node ï,,,Umlaut nodetest_utf8.texi(,45) @section ï nodetest_utf8.texi(,46) nodetest_utf8.texi(,47) before footnote @xref{footanchor}. nodetest_utf8.texi(,48) nodetest_utf8.texi(,49) @footnote{@anchor{footanchor}} nodetest_utf8.texi(,50) nodetest_utf8.texi(,51) after footnote @xref{footanchor}. nodetest_utf8.texi(,52) nodetest_utf8.texi(,53) @node ö,,,Umlaut nodetest_utf8.texi(,54) @section ö nodetest_utf8.texi(,55) Ref to an anchor at the end of the doc nodetest_utf8.texi(,56) (@pxref{é-o, , there is an o-é could there be an @^{@dotless{i}}}). nodetest_utf8.texi(,57) @node ü,,,Umlaut nodetest_utf8.texi(,58) @section ü nodetest_utf8.texi(,59) Another ref to an anchor (@pxref{x-spot, ,}). nodetest_utf8.texi(,60) @node ÿ,,,Umlaut nodetest_utf8.texi(,61) @section ÿ nodetest_utf8.texi(,62) This is a ref to a node (@pxref{à, ,à}). nodetest_utf8.texi(,63) nodetest_utf8.texi(,64) @node Ä,,,Umlaut nodetest_utf8.texi(,65) @section Ä nodetest_utf8.texi(,66) nodetest_utf8.texi(,67) Now a ref to a node without sectionning command, nodetest_utf8.texi(,68) no text (@pxref{no section, , }). nodetest_utf8.texi(,69) With text (@pxref{no section, ,but a text }). nodetest_utf8.texi(,70) nodetest_utf8.texi(,71) @node Ë,,,Umlaut nodetest_utf8.texi(,72) @section Ë nodetest_utf8.texi(,73) @node Ï,,,Umlaut nodetest_utf8.texi(,74) @section Ï nodetest_utf8.texi(,75) @node Ö,,,Umlaut nodetest_utf8.texi(,76) @section Ö nodetest_utf8.texi(,77) @node Ü,,,Umlaut nodetest_utf8.texi(,78) @section Ü nodetest_utf8.texi(,79) @node @ss{},,,Umlaut nodetest_utf8.texi(,80) @section @ss{} nodetest_utf8.texi(,81) @node no section,,,Umlaut nodetest_utf8.texi(,82) This is a node without sectioning command. nodetest_utf8.texi(,83) @c nodetest_utf8.texi(,84) @node acute accent,,Top,Top nodetest_utf8.texi(,85) @chapter acute accent nodetest_utf8.texi(,86) @menu nodetest_utf8.texi(,87) * @'a:: @'a. nodetest_utf8.texi(,88) * é:: é. nodetest_utf8.texi(,89) * @'i:: @'i. nodetest_utf8.texi(,90) * @'o:: @'o. nodetest_utf8.texi(,91) * @'u:: @'u. nodetest_utf8.texi(,92) * @'y:: @'y. nodetest_utf8.texi(,93) * @'A:: @'A. nodetest_utf8.texi(,94) * @'E:: @'E. nodetest_utf8.texi(,95) * @'I:: @'I. nodetest_utf8.texi(,96) * @'O:: @'O. nodetest_utf8.texi(,97) * @'U:: @'U. nodetest_utf8.texi(,98) * @'Y:: @'Y. nodetest_utf8.texi(,99) @end menu nodetest_utf8.texi(,100) @c nodetest_utf8.texi(,101) @node @'a,,,acute accent nodetest_utf8.texi(,102) @section @'a nodetest_utf8.texi(,103) With brace @'{a}. Testing ' " ` ^. nodetest_utf8.texi(,104) @node é,,,acute accent nodetest_utf8.texi(,105) @section é nodetest_utf8.texi(,106) @node @'i,,,acute accent nodetest_utf8.texi(,107) @section @'i nodetest_utf8.texi(,108) @node @'o,,,acute accent nodetest_utf8.texi(,109) @section @'o nodetest_utf8.texi(,110) @node @'u,,,acute accent nodetest_utf8.texi(,111) @section @'u nodetest_utf8.texi(,112) @node @'y,,,acute accent nodetest_utf8.texi(,113) @section @'y nodetest_utf8.texi(,114) @node @'A,,,acute accent nodetest_utf8.texi(,115) @section @'A nodetest_utf8.texi(,116) @node @'E,,,acute accent nodetest_utf8.texi(,117) @section @'E nodetest_utf8.texi(,118) @node @'I,,,acute accent nodetest_utf8.texi(,119) @section @'I nodetest_utf8.texi(,120) @node @'O,,,acute accent nodetest_utf8.texi(,121) @section @'O nodetest_utf8.texi(,122) @node @'U,,,acute accent nodetest_utf8.texi(,123) @section @'U nodetest_utf8.texi(,124) @node @'Y,,,acute accent nodetest_utf8.texi(,125) @section @'Y nodetest_utf8.texi(,126) This is a ref to ü (@pxref{ü, ,ü}). nodetest_utf8.texi(,127) Another one, with node only (@pxref{ü, ,}). nodetest_utf8.texi(,128) nodetest_utf8.texi(,132) nodetest_utf8.texi(,133) @c nodetest_utf8.texi(,134) @node grave accent,,Top,Top nodetest_utf8.texi(,135) @chapter grave accent nodetest_utf8.texi(,136) @menu nodetest_utf8.texi(,137) * à:: à. nodetest_utf8.texi(,138) * è:: è. nodetest_utf8.texi(,139) * @`i:: @`i. nodetest_utf8.texi(,140) * with brace @`{i}:: @`{i}. nodetest_utf8.texi(,141) * with dotless @`{@dotless{i}}:: @`{@dotless{i}}. nodetest_utf8.texi(,142) * @`o:: @`o. nodetest_utf8.texi(,143) * ù:: ù. nodetest_utf8.texi(,144) * @`A:: @`A. nodetest_utf8.texi(,145) * @`E:: @`E. nodetest_utf8.texi(,146) * @`I:: @`I. nodetest_utf8.texi(,147) * @`O:: @`O. nodetest_utf8.texi(,148) * @`U:: @`U. nodetest_utf8.texi(,149) @end menu nodetest_utf8.texi(,150) @c nodetest_utf8.texi(,151) @node à,,,grave accent nodetest_utf8.texi(,152) @section à nodetest_utf8.texi(,153) @node è,,,grave accent nodetest_utf8.texi(,154) @section è nodetest_utf8.texi(,155) @node @`i,,,grave accent nodetest_utf8.texi(,156) @section @`i nodetest_utf8.texi(,157) @node with brace @`{i},,,grave accent nodetest_utf8.texi(,158) @section @`{i} nodetest_utf8.texi(,159) @node with dotless @`{@dotless{i}},,,grave accent nodetest_utf8.texi(,160) @section @`{@dotless{i}} nodetest_utf8.texi(,161) @node @`o,,,grave accent nodetest_utf8.texi(,162) @section @`o nodetest_utf8.texi(,163) @node ù,,,grave accent nodetest_utf8.texi(,164) @section ù nodetest_utf8.texi(,165) @node @`A,,,grave accent nodetest_utf8.texi(,166) @section @`A nodetest_utf8.texi(,167) @node @`E,,,grave accent nodetest_utf8.texi(,168) @section @`E nodetest_utf8.texi(,169) @node @`I,,,grave accent nodetest_utf8.texi(,170) @section @`I nodetest_utf8.texi(,171) @node @`O,,,grave accent nodetest_utf8.texi(,172) @section @`O nodetest_utf8.texi(,173) @node @`U,,,grave accent nodetest_utf8.texi(,174) @section @`U nodetest_utf8.texi(,175) @c nodetest_utf8.texi(,176) @node circumflex accent,,Top,Top nodetest_utf8.texi(,177) @chapter circumflex accent nodetest_utf8.texi(,178) @menu nodetest_utf8.texi(,179) * â:: â. nodetest_utf8.texi(,180) * ê:: ê. nodetest_utf8.texi(,181) * î:: î. nodetest_utf8.texi(,182) * ô:: ô. nodetest_utf8.texi(,183) * û:: û. nodetest_utf8.texi(,184) * Â:: Â. nodetest_utf8.texi(,185) * Ê:: Ê. nodetest_utf8.texi(,186) * Î:: Î. nodetest_utf8.texi(,187) * Ô:: Ô. nodetest_utf8.texi(,188) * Û:: Û. nodetest_utf8.texi(,189) @end menu nodetest_utf8.texi(,190) @c nodetest_utf8.texi(,191) @node â,,,circumflex accent nodetest_utf8.texi(,192) @section â nodetest_utf8.texi(,193) @node ê,,,circumflex accent nodetest_utf8.texi(,194) @section ê nodetest_utf8.texi(,195) @node î,,,circumflex accent nodetest_utf8.texi(,196) @section î nodetest_utf8.texi(,197) @node ô,,,circumflex accent nodetest_utf8.texi(,198) @section ô nodetest_utf8.texi(,199) @node û,,,circumflex accent nodetest_utf8.texi(,200) @section û nodetest_utf8.texi(,201) @node Â,,,circumflex accent nodetest_utf8.texi(,202) @section  nodetest_utf8.texi(,203) @node Ê,,,circumflex accent nodetest_utf8.texi(,204) @section Ê nodetest_utf8.texi(,205) @node Î,,,circumflex accent nodetest_utf8.texi(,206) @section Î nodetest_utf8.texi(,207) @node Ô,,,circumflex accent nodetest_utf8.texi(,208) @section Ô nodetest_utf8.texi(,209) @node Û,,,circumflex accent nodetest_utf8.texi(,210) @section Û nodetest_utf8.texi(,211) @c nodetest_utf8.texi(,212) @node tilde accent,,Top,Top nodetest_utf8.texi(,213) @chapter tilde accent nodetest_utf8.texi(,214) @menu nodetest_utf8.texi(,215) * @~a:: @~a. nodetest_utf8.texi(,216) * @~n:: @~n. nodetest_utf8.texi(,217) * @~o:: @~o. nodetest_utf8.texi(,218) * @~A:: @~A. nodetest_utf8.texi(,219) * @~O:: @~O. nodetest_utf8.texi(,220) @end menu nodetest_utf8.texi(,221) @c nodetest_utf8.texi(,222) @node @~a,,,tilde accent nodetest_utf8.texi(,223) @section @~a nodetest_utf8.texi(,224) @node @~n,,,tilde accent nodetest_utf8.texi(,225) @section @~n nodetest_utf8.texi(,226) @node @~o,,,tilde accent nodetest_utf8.texi(,227) @section @~o nodetest_utf8.texi(,228) @node @~A,,,tilde accent nodetest_utf8.texi(,229) @section @~A nodetest_utf8.texi(,230) @node @~O,,,tilde accent nodetest_utf8.texi(,231) @section @~O nodetest_utf8.texi(,232) This marks the @anchor{x-spot}spot. nodetest_utf8.texi(,233) A second one with accented char @anchor{é-o}. nodetest_utf8.texi(,234) @c nodetest_utf8.texi(,235) @node cedilla accent,,Top,Top nodetest_utf8.texi(,236) @chapter cedilla accent nodetest_utf8.texi(,237) @menu nodetest_utf8.texi(,238) * ç:: ç. nodetest_utf8.texi(,239) * @,{C}:: @,{C}. nodetest_utf8.texi(,240) @end menu nodetest_utf8.texi(,241) @c nodetest_utf8.texi(,242) @node ç,,,cedilla accent nodetest_utf8.texi(,243) @section ç nodetest_utf8.texi(,244) @node @,{C},,,cedilla accent nodetest_utf8.texi(,245) @section @,{C} nodetest_utf8.texi(,246) @c nodetest_utf8.texi(,247) @node rest,,Top,Top nodetest_utf8.texi(,248) @chapter rest nodetest_utf8.texi(,249) @menu nodetest_utf8.texi(,250) * @aa{}:: @aa{}. nodetest_utf8.texi(,251) * @ae{}:: @ae{}. nodetest_utf8.texi(,252) * @oe{}:: @oe{}. nodetest_utf8.texi(,253) * @AA{}:: @AA{}. nodetest_utf8.texi(,254) * @AE{}:: @AE{}. nodetest_utf8.texi(,255) * @OE{}:: @OE{}. nodetest_utf8.texi(,256) * @l{}:: @l{}. nodetest_utf8.texi(,257) * @o{}:: @o{}. nodetest_utf8.texi(,258) * @L{}:: @L{}. nodetest_utf8.texi(,259) * @O{}:: @O{}. nodetest_utf8.texi(,260) * @H{a}:: @H{a}. nodetest_utf8.texi(,261) * @u{a}:: @u{a}. nodetest_utf8.texi(,262) * @v{a}:: @v{a}. nodetest_utf8.texi(,263) * @udotaccent{a}:: @udotaccent{a} udotaccent. nodetest_utf8.texi(,264) * @dotaccent{a}:: @dotaccent{a} dotaccent. nodetest_utf8.texi(,265) * @ringaccent{a}:: @ringaccent{a} ringaccent. nodetest_utf8.texi(,266) * @tieaccent{a}:: @tieaccent{a} tieaccent. nodetest_utf8.texi(,267) * @ubaraccent{a}:: @ubaraccent{a} ubaraccent. nodetest_utf8.texi(,268) * @dotless{i}:: @dotless{i} dotless i. nodetest_utf8.texi(,269) * @dotless{j}:: @dotless{j} dotless j. nodetest_utf8.texi(,270) * @comma{}:: @comma{} comma nodetest_utf8.texi(,271) @end menu nodetest_utf8.texi(,272) @c nodetest_utf8.texi(,273) @node @aa{},,,rest nodetest_utf8.texi(,274) @section @aa{} nodetest_utf8.texi(,275) @node @ae{},,,rest nodetest_utf8.texi(,276) @section @ae{} nodetest_utf8.texi(,277) @node @oe{},,,rest nodetest_utf8.texi(,278) @section @oe{} nodetest_utf8.texi(,279) @node @AA{},,,rest nodetest_utf8.texi(,280) @section @AA{} nodetest_utf8.texi(,281) @node @AE{},,,rest nodetest_utf8.texi(,282) @section @AE{} nodetest_utf8.texi(,283) @node @OE{},,,rest nodetest_utf8.texi(,284) @section @OE{} nodetest_utf8.texi(,285) @node @l{},,,rest nodetest_utf8.texi(,286) @section @l{} nodetest_utf8.texi(,287) @node @o{},,,rest nodetest_utf8.texi(,288) @section @o{} nodetest_utf8.texi(,289) @node @L{},,,rest nodetest_utf8.texi(,290) @section @L{} nodetest_utf8.texi(,291) @node @O{},,,rest nodetest_utf8.texi(,292) @section @O{} nodetest_utf8.texi(,293) @node @H{a},,,rest nodetest_utf8.texi(,294) @section @H{a} nodetest_utf8.texi(,295) @node @u{a},,,rest nodetest_utf8.texi(,296) @section @u{a} nodetest_utf8.texi(,297) @node @v{a},,,rest nodetest_utf8.texi(,298) @section @v{a} nodetest_utf8.texi(,299) @node @udotaccent{a},,,rest nodetest_utf8.texi(,300) @section @udotaccent{a} nodetest_utf8.texi(,301) Test udotaccent. nodetest_utf8.texi(,302) @node @dotaccent{a},,,rest nodetest_utf8.texi(,303) @section @dotaccent{a} nodetest_utf8.texi(,304) Test dotaccent. nodetest_utf8.texi(,305) @node @ringaccent{a},,,rest nodetest_utf8.texi(,306) @section @ringaccent{a} nodetest_utf8.texi(,307) @node @tieaccent{a},,,rest nodetest_utf8.texi(,308) @section @tieaccent{a} nodetest_utf8.texi(,309) @node @ubaraccent{a},,,rest nodetest_utf8.texi(,310) @section @ubaraccent{a} nodetest_utf8.texi(,311) @node @dotless{i},,,rest nodetest_utf8.texi(,312) @section @dotless{i} nodetest_utf8.texi(,313) @node @dotless{j},,,rest nodetest_utf8.texi(,314) @section @dotless{j} nodetest_utf8.texi(,315) nodetest_utf8.texi(,316) @dots{} nodetest_utf8.texi(,317) nodetest_utf8.texi(,318) @enddots{} nodetest_utf8.texi(,319) nodetest_utf8.texi(,320) @exclamdown{} nodetest_utf8.texi(,321) nodetest_utf8.texi(,322) @questiondown{} nodetest_utf8.texi(,323) nodetest_utf8.texi(,324) @pounds{} nodetest_utf8.texi(,325) nodetest_utf8.texi(,326) @@- : @- nodetest_utf8.texi(,327) @@ followed by end of line: @ nodetest_utf8.texi(,328) @@ followed by tab: @ nodetest_utf8.texi(,329) @@ followed by space @ nodetest_utf8.texi(,330) @@*: @* and text followin @@*. nodetest_utf8.texi(,331) nodetest_utf8.texi(,332) @node @comma{},,,rest nodetest_utf8.texi(,333) @section @comma{} nodetest_utf8.texi(,334) nodetest_utf8.texi(,335) An index entry with accented letter. nodetest_utf8.texi(,336) @cindex index entry with accented letter: à @`a nodetest_utf8.texi(,337) @cindex index entry with accented letter: â @`a nodetest_utf8.texi(,338) nodetest_utf8.texi(,339) @printindex cp nodetest_utf8.texi(,340) nodetest_utf8.texi(,341) @contents nodetest_utf8.texi(,342) @bye texi2html-1.82/test/encodings/res/texi_nodetest_utf8/nodetest_utf8.20000644000175000017500000000000011264347116027446 0ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/texi_nodetest_latin1/0000755000175000017500000000000011264347117025105 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/texi_nodetest_latin1/nodetest_latin1.20000644000175000017500000000000011264347117030253 0ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/texi_nodetest_latin1/nodetest_latin1.passfirst0000644000175000017500000003557711264347117032163 0ustar flichtenheldflichtenheldnodetest_latin1.texi(,2) @setfilename nodetest_latin1.info nodetest_latin1.texi(,3) @documentencoding latin1 nodetest_latin1.texi(,4) @node Top,Umlaut,(dir) nodetest_latin1.texi(,5) @top nodetest_latin1.texi(,6) @menu nodetest_latin1.texi(,7) * Umlaut:: Umlaut. nodetest_latin1.texi(,8) nodetest_latin1.texi(,9) nodetest_latin1.texi(,10) Another Heading nodetest_latin1.texi(,11) nodetest_latin1.texi(,12) nodetest_latin1.texi(,13) * acute accent:: acute accent. nodetest_latin1.texi(,14) * grave accent:: grave accent. nodetest_latin1.texi(,15) * circumflex accent:: circumflex accent. nodetest_latin1.texi(,16) * tilde accent:: tilde accent. nodetest_latin1.texi(,17) * cedilla accent:: cedilla accent. nodetest_latin1.texi(,18) * rest:: rest @@aa@{@} etc. nodetest_latin1.texi(,19) @end menu nodetest_latin1.texi(,20) @c nodetest_latin1.texi(,21) @node Umlaut,,Top,Top nodetest_latin1.texi(,22) @chapter Umlaut nodetest_latin1.texi(,23) @menu nodetest_latin1.texi(,24) * :: . nodetest_latin1.texi(,25) * :: . nodetest_latin1.texi(,26) * :: . nodetest_latin1.texi(,27) * :: . nodetest_latin1.texi(,28) * :: . nodetest_latin1.texi(,29) * :: . nodetest_latin1.texi(,30) * :: . nodetest_latin1.texi(,31) * :: . nodetest_latin1.texi(,32) * :: . nodetest_latin1.texi(,33) * :: . nodetest_latin1.texi(,34) * :: . nodetest_latin1.texi(,35) * @ss{}:: @ss{}. nodetest_latin1.texi(,36) * no section:: Node without sectioning command. nodetest_latin1.texi(,37) @end menu nodetest_latin1.texi(,38) @c nodetest_latin1.texi(,39) @node ,,,Umlaut nodetest_latin1.texi(,40) @section nodetest_latin1.texi(,41) ref to @ref{}. nodetest_latin1.texi(,42) @node ,,,Umlaut nodetest_latin1.texi(,43) @section nodetest_latin1.texi(,44) @node ,,,Umlaut nodetest_latin1.texi(,45) @section nodetest_latin1.texi(,46) nodetest_latin1.texi(,47) before footnote @xref{footanchor}. nodetest_latin1.texi(,48) nodetest_latin1.texi(,49) @footnote{@anchor{footanchor}} nodetest_latin1.texi(,50) nodetest_latin1.texi(,51) after footnote @xref{footanchor}. nodetest_latin1.texi(,52) nodetest_latin1.texi(,53) @node ,,,Umlaut nodetest_latin1.texi(,54) @section nodetest_latin1.texi(,55) Ref to an anchor at the end of the doc nodetest_latin1.texi(,56) (@pxref{-o, , there is an o- could there be an @^{@dotless{i}}}). nodetest_latin1.texi(,57) @node ,,,Umlaut nodetest_latin1.texi(,58) @section nodetest_latin1.texi(,59) Another ref to an anchor (@pxref{x-spot, ,}). nodetest_latin1.texi(,60) @node ,,,Umlaut nodetest_latin1.texi(,61) @section nodetest_latin1.texi(,62) This is a ref to a node (@pxref{, ,}). nodetest_latin1.texi(,63) nodetest_latin1.texi(,64) @node ,,,Umlaut nodetest_latin1.texi(,65) @section nodetest_latin1.texi(,66) nodetest_latin1.texi(,67) Now a ref to a node without sectionning command, nodetest_latin1.texi(,68) no text (@pxref{no section, , }). nodetest_latin1.texi(,69) With text (@pxref{no section, ,but a text }). nodetest_latin1.texi(,70) nodetest_latin1.texi(,71) @node ,,,Umlaut nodetest_latin1.texi(,72) @section nodetest_latin1.texi(,73) @node ,,,Umlaut nodetest_latin1.texi(,74) @section nodetest_latin1.texi(,75) @node ,,,Umlaut nodetest_latin1.texi(,76) @section nodetest_latin1.texi(,77) @node ,,,Umlaut nodetest_latin1.texi(,78) @section nodetest_latin1.texi(,79) @node @ss{},,,Umlaut nodetest_latin1.texi(,80) @section @ss{} nodetest_latin1.texi(,81) @node no section,,,Umlaut nodetest_latin1.texi(,82) This is a node without sectioning command. nodetest_latin1.texi(,83) @c nodetest_latin1.texi(,84) @node acute accent,,Top,Top nodetest_latin1.texi(,85) @chapter acute accent nodetest_latin1.texi(,86) @menu nodetest_latin1.texi(,87) * @'a:: @'a. nodetest_latin1.texi(,88) * :: . nodetest_latin1.texi(,89) * @'i:: @'i. nodetest_latin1.texi(,90) * @'o:: @'o. nodetest_latin1.texi(,91) * @'u:: @'u. nodetest_latin1.texi(,92) * @'y:: @'y. nodetest_latin1.texi(,93) * @'A:: @'A. nodetest_latin1.texi(,94) * @'E:: @'E. nodetest_latin1.texi(,95) * @'I:: @'I. nodetest_latin1.texi(,96) * @'O:: @'O. nodetest_latin1.texi(,97) * @'U:: @'U. nodetest_latin1.texi(,98) * @'Y:: @'Y. nodetest_latin1.texi(,99) @end menu nodetest_latin1.texi(,100) @c nodetest_latin1.texi(,101) @node @'a,,,acute accent nodetest_latin1.texi(,102) @section @'a nodetest_latin1.texi(,103) With brace @'{a}. Testing ' " ` ^. nodetest_latin1.texi(,104) @node ,,,acute accent nodetest_latin1.texi(,105) @section nodetest_latin1.texi(,106) @node @'i,,,acute accent nodetest_latin1.texi(,107) @section @'i nodetest_latin1.texi(,108) @node @'o,,,acute accent nodetest_latin1.texi(,109) @section @'o nodetest_latin1.texi(,110) @node @'u,,,acute accent nodetest_latin1.texi(,111) @section @'u nodetest_latin1.texi(,112) @node @'y,,,acute accent nodetest_latin1.texi(,113) @section @'y nodetest_latin1.texi(,114) @node @'A,,,acute accent nodetest_latin1.texi(,115) @section @'A nodetest_latin1.texi(,116) @node @'E,,,acute accent nodetest_latin1.texi(,117) @section @'E nodetest_latin1.texi(,118) @node @'I,,,acute accent nodetest_latin1.texi(,119) @section @'I nodetest_latin1.texi(,120) @node @'O,,,acute accent nodetest_latin1.texi(,121) @section @'O nodetest_latin1.texi(,122) @node @'U,,,acute accent nodetest_latin1.texi(,123) @section @'U nodetest_latin1.texi(,124) @node @'Y,,,acute accent nodetest_latin1.texi(,125) @section @'Y nodetest_latin1.texi(,126) This is a ref to (@pxref{, ,}). nodetest_latin1.texi(,127) Another one, with node only (@pxref{, ,}). nodetest_latin1.texi(,128) nodetest_latin1.texi(,132) nodetest_latin1.texi(,133) @c nodetest_latin1.texi(,134) @node grave accent,,Top,Top nodetest_latin1.texi(,135) @chapter grave accent nodetest_latin1.texi(,136) @menu nodetest_latin1.texi(,137) * :: . nodetest_latin1.texi(,138) * :: . nodetest_latin1.texi(,139) * @`i:: @`i. nodetest_latin1.texi(,140) * with brace @`{i}:: @`{i}. nodetest_latin1.texi(,141) * with dotless @`{@dotless{i}}:: @`{@dotless{i}}. nodetest_latin1.texi(,142) * @`o:: @`o. nodetest_latin1.texi(,143) * :: . nodetest_latin1.texi(,144) * @`A:: @`A. nodetest_latin1.texi(,145) * @`E:: @`E. nodetest_latin1.texi(,146) * @`I:: @`I. nodetest_latin1.texi(,147) * @`O:: @`O. nodetest_latin1.texi(,148) * @`U:: @`U. nodetest_latin1.texi(,149) @end menu nodetest_latin1.texi(,150) @c nodetest_latin1.texi(,151) @node ,,,grave accent nodetest_latin1.texi(,152) @section nodetest_latin1.texi(,153) @node ,,,grave accent nodetest_latin1.texi(,154) @section nodetest_latin1.texi(,155) @node @`i,,,grave accent nodetest_latin1.texi(,156) @section @`i nodetest_latin1.texi(,157) @node with brace @`{i},,,grave accent nodetest_latin1.texi(,158) @section @`{i} nodetest_latin1.texi(,159) @node with dotless @`{@dotless{i}},,,grave accent nodetest_latin1.texi(,160) @section @`{@dotless{i}} nodetest_latin1.texi(,161) @node @`o,,,grave accent nodetest_latin1.texi(,162) @section @`o nodetest_latin1.texi(,163) @node ,,,grave accent nodetest_latin1.texi(,164) @section nodetest_latin1.texi(,165) @node @`A,,,grave accent nodetest_latin1.texi(,166) @section @`A nodetest_latin1.texi(,167) @node @`E,,,grave accent nodetest_latin1.texi(,168) @section @`E nodetest_latin1.texi(,169) @node @`I,,,grave accent nodetest_latin1.texi(,170) @section @`I nodetest_latin1.texi(,171) @node @`O,,,grave accent nodetest_latin1.texi(,172) @section @`O nodetest_latin1.texi(,173) @node @`U,,,grave accent nodetest_latin1.texi(,174) @section @`U nodetest_latin1.texi(,175) @c nodetest_latin1.texi(,176) @node circumflex accent,,Top,Top nodetest_latin1.texi(,177) @chapter circumflex accent nodetest_latin1.texi(,178) @menu nodetest_latin1.texi(,179) * :: . nodetest_latin1.texi(,180) * :: . nodetest_latin1.texi(,181) * :: . nodetest_latin1.texi(,182) * :: . nodetest_latin1.texi(,183) * :: . nodetest_latin1.texi(,184) * :: . nodetest_latin1.texi(,185) * :: . nodetest_latin1.texi(,186) * :: . nodetest_latin1.texi(,187) * :: . nodetest_latin1.texi(,188) * :: . nodetest_latin1.texi(,189) @end menu nodetest_latin1.texi(,190) @c nodetest_latin1.texi(,191) @node ,,,circumflex accent nodetest_latin1.texi(,192) @section nodetest_latin1.texi(,193) @node ,,,circumflex accent nodetest_latin1.texi(,194) @section nodetest_latin1.texi(,195) @node ,,,circumflex accent nodetest_latin1.texi(,196) @section nodetest_latin1.texi(,197) @node ,,,circumflex accent nodetest_latin1.texi(,198) @section nodetest_latin1.texi(,199) @node ,,,circumflex accent nodetest_latin1.texi(,200) @section nodetest_latin1.texi(,201) @node ,,,circumflex accent nodetest_latin1.texi(,202) @section nodetest_latin1.texi(,203) @node ,,,circumflex accent nodetest_latin1.texi(,204) @section nodetest_latin1.texi(,205) @node ,,,circumflex accent nodetest_latin1.texi(,206) @section nodetest_latin1.texi(,207) @node ,,,circumflex accent nodetest_latin1.texi(,208) @section nodetest_latin1.texi(,209) @node ,,,circumflex accent nodetest_latin1.texi(,210) @section nodetest_latin1.texi(,211) @c nodetest_latin1.texi(,212) @node tilde accent,,Top,Top nodetest_latin1.texi(,213) @chapter tilde accent nodetest_latin1.texi(,214) @menu nodetest_latin1.texi(,215) * @~a:: @~a. nodetest_latin1.texi(,216) * @~n:: @~n. nodetest_latin1.texi(,217) * @~o:: @~o. nodetest_latin1.texi(,218) * @~A:: @~A. nodetest_latin1.texi(,219) * @~O:: @~O. nodetest_latin1.texi(,220) @end menu nodetest_latin1.texi(,221) @c nodetest_latin1.texi(,222) @node @~a,,,tilde accent nodetest_latin1.texi(,223) @section @~a nodetest_latin1.texi(,224) @node @~n,,,tilde accent nodetest_latin1.texi(,225) @section @~n nodetest_latin1.texi(,226) @node @~o,,,tilde accent nodetest_latin1.texi(,227) @section @~o nodetest_latin1.texi(,228) @node @~A,,,tilde accent nodetest_latin1.texi(,229) @section @~A nodetest_latin1.texi(,230) @node @~O,,,tilde accent nodetest_latin1.texi(,231) @section @~O nodetest_latin1.texi(,232) This marks the @anchor{x-spot}spot. nodetest_latin1.texi(,233) A second one with accented char @anchor{-o}. nodetest_latin1.texi(,234) @c nodetest_latin1.texi(,235) @node cedilla accent,,Top,Top nodetest_latin1.texi(,236) @chapter cedilla accent nodetest_latin1.texi(,237) @menu nodetest_latin1.texi(,238) * :: . nodetest_latin1.texi(,239) * @,{C}:: @,{C}. nodetest_latin1.texi(,240) @end menu nodetest_latin1.texi(,241) @c nodetest_latin1.texi(,242) @node ,,,cedilla accent nodetest_latin1.texi(,243) @section nodetest_latin1.texi(,244) @node @,{C},,,cedilla accent nodetest_latin1.texi(,245) @section @,{C} nodetest_latin1.texi(,246) @c nodetest_latin1.texi(,247) @node rest,,Top,Top nodetest_latin1.texi(,248) @chapter rest nodetest_latin1.texi(,249) @menu nodetest_latin1.texi(,250) * @aa{}:: @aa{}. nodetest_latin1.texi(,251) * @ae{}:: @ae{}. nodetest_latin1.texi(,252) * @oe{}:: @oe{}. nodetest_latin1.texi(,253) * @AA{}:: @AA{}. nodetest_latin1.texi(,254) * @AE{}:: @AE{}. nodetest_latin1.texi(,255) * @OE{}:: @OE{}. nodetest_latin1.texi(,256) * @l{}:: @l{}. nodetest_latin1.texi(,257) * @o{}:: @o{}. nodetest_latin1.texi(,258) * @L{}:: @L{}. nodetest_latin1.texi(,259) * @O{}:: @O{}. nodetest_latin1.texi(,260) * @H{a}:: @H{a}. nodetest_latin1.texi(,261) * @u{a}:: @u{a}. nodetest_latin1.texi(,262) * @v{a}:: @v{a}. nodetest_latin1.texi(,263) * @udotaccent{a}:: @udotaccent{a} udotaccent. nodetest_latin1.texi(,264) * @dotaccent{a}:: @dotaccent{a} dotaccent. nodetest_latin1.texi(,265) * @ringaccent{a}:: @ringaccent{a} ringaccent. nodetest_latin1.texi(,266) * @tieaccent{a}:: @tieaccent{a} tieaccent. nodetest_latin1.texi(,267) * @ubaraccent{a}:: @ubaraccent{a} ubaraccent. nodetest_latin1.texi(,268) * @dotless{i}:: @dotless{i} dotless i. nodetest_latin1.texi(,269) * @dotless{j}:: @dotless{j} dotless j. nodetest_latin1.texi(,270) * @comma{}:: @comma{} comma nodetest_latin1.texi(,271) @end menu nodetest_latin1.texi(,272) @c nodetest_latin1.texi(,273) @node @aa{},,,rest nodetest_latin1.texi(,274) @section @aa{} nodetest_latin1.texi(,275) @node @ae{},,,rest nodetest_latin1.texi(,276) @section @ae{} nodetest_latin1.texi(,277) @node @oe{},,,rest nodetest_latin1.texi(,278) @section @oe{} nodetest_latin1.texi(,279) @node @AA{},,,rest nodetest_latin1.texi(,280) @section @AA{} nodetest_latin1.texi(,281) @node @AE{},,,rest nodetest_latin1.texi(,282) @section @AE{} nodetest_latin1.texi(,283) @node @OE{},,,rest nodetest_latin1.texi(,284) @section @OE{} nodetest_latin1.texi(,285) @node @l{},,,rest nodetest_latin1.texi(,286) @section @l{} nodetest_latin1.texi(,287) @node @o{},,,rest nodetest_latin1.texi(,288) @section @o{} nodetest_latin1.texi(,289) @node @L{},,,rest nodetest_latin1.texi(,290) @section @L{} nodetest_latin1.texi(,291) @node @O{},,,rest nodetest_latin1.texi(,292) @section @O{} nodetest_latin1.texi(,293) @node @H{a},,,rest nodetest_latin1.texi(,294) @section @H{a} nodetest_latin1.texi(,295) @node @u{a},,,rest nodetest_latin1.texi(,296) @section @u{a} nodetest_latin1.texi(,297) @node @v{a},,,rest nodetest_latin1.texi(,298) @section @v{a} nodetest_latin1.texi(,299) @node @udotaccent{a},,,rest nodetest_latin1.texi(,300) @section @udotaccent{a} nodetest_latin1.texi(,301) Test udotaccent. nodetest_latin1.texi(,302) @node @dotaccent{a},,,rest nodetest_latin1.texi(,303) @section @dotaccent{a} nodetest_latin1.texi(,304) Test dotaccent. nodetest_latin1.texi(,305) @node @ringaccent{a},,,rest nodetest_latin1.texi(,306) @section @ringaccent{a} nodetest_latin1.texi(,307) @node @tieaccent{a},,,rest nodetest_latin1.texi(,308) @section @tieaccent{a} nodetest_latin1.texi(,309) @node @ubaraccent{a},,,rest nodetest_latin1.texi(,310) @section @ubaraccent{a} nodetest_latin1.texi(,311) @node @dotless{i},,,rest nodetest_latin1.texi(,312) @section @dotless{i} nodetest_latin1.texi(,313) @node @dotless{j},,,rest nodetest_latin1.texi(,314) @section @dotless{j} nodetest_latin1.texi(,315) nodetest_latin1.texi(,316) @dots{} nodetest_latin1.texi(,317) nodetest_latin1.texi(,318) @enddots{} nodetest_latin1.texi(,319) nodetest_latin1.texi(,320) @exclamdown{} nodetest_latin1.texi(,321) nodetest_latin1.texi(,322) @questiondown{} nodetest_latin1.texi(,323) nodetest_latin1.texi(,324) @pounds{} nodetest_latin1.texi(,325) nodetest_latin1.texi(,326) @@- : @- nodetest_latin1.texi(,327) @@ followed by end of line: @ nodetest_latin1.texi(,328) @@ followed by tab: @ nodetest_latin1.texi(,329) @@ followed by space @ nodetest_latin1.texi(,330) @@*: @* and text followin @@*. nodetest_latin1.texi(,331) nodetest_latin1.texi(,332) @node @comma{},,,rest nodetest_latin1.texi(,333) @section @comma{} nodetest_latin1.texi(,334) nodetest_latin1.texi(,335) An index entry with accented letter. nodetest_latin1.texi(,336) @cindex index entry with accented letter: @`a nodetest_latin1.texi(,337) @cindex index entry with accented letter: @`a nodetest_latin1.texi(,338) nodetest_latin1.texi(,339) @printindex cp nodetest_latin1.texi(,340) nodetest_latin1.texi(,341) @contents nodetest_latin1.texi(,342) @bye texi2html-1.82/test/encodings/res/texi_nodetest_latin1/nodetest_latin1.texi0000644000175000017500000001414311264347117031100 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename nodetest_latin1.info @documentencoding latin1 @node Top,Umlaut,(dir) @top @menu * Umlaut:: Umlaut. Another Heading * acute accent:: acute accent. * grave accent:: grave accent. * circumflex accent:: circumflex accent. * tilde accent:: tilde accent. * cedilla accent:: cedilla accent. * rest:: rest @@aa@{@} etc. @end menu @c @node Umlaut,,Top,Top @chapter Umlaut @menu * :: . * :: . * :: . * :: . * :: . * :: . * :: . * :: . * :: . * :: . * :: . * @ss{}:: @ss{}. * no section:: Node without sectioning command. @end menu @c @node ,,,Umlaut @section ref to @ref{}. @node ,,,Umlaut @section @node ,,,Umlaut @section before footnote @xref{footanchor}. @footnote{@anchor{footanchor}} after footnote @xref{footanchor}. @node ,,,Umlaut @section Ref to an anchor at the end of the doc (@pxref{-o, , there is an o- could there be an @^{@dotless{i}}}). @node ,,,Umlaut @section Another ref to an anchor (@pxref{x-spot, ,}). @node ,,,Umlaut @section This is a ref to a node (@pxref{, ,}). @node ,,,Umlaut @section Now a ref to a node without sectionning command, no text (@pxref{no section, , }). With text (@pxref{no section, ,but a text }). @node ,,,Umlaut @section @node ,,,Umlaut @section @node ,,,Umlaut @section @node ,,,Umlaut @section @node @ss{},,,Umlaut @section @ss{} @node no section,,,Umlaut This is a node without sectioning command. @c @node acute accent,,Top,Top @chapter acute accent @menu * @'a:: @'a. * :: . * @'i:: @'i. * @'o:: @'o. * @'u:: @'u. * @'y:: @'y. * @'A:: @'A. * @'E:: @'E. * @'I:: @'I. * @'O:: @'O. * @'U:: @'U. * @'Y:: @'Y. @end menu @c @node @'a,,,acute accent @section @'a With brace @'{a}. Testing ' " ` ^. @node ,,,acute accent @section @node @'i,,,acute accent @section @'i @node @'o,,,acute accent @section @'o @node @'u,,,acute accent @section @'u @node @'y,,,acute accent @section @'y @node @'A,,,acute accent @section @'A @node @'E,,,acute accent @section @'E @node @'I,,,acute accent @section @'I @node @'O,,,acute accent @section @'O @node @'U,,,acute accent @section @'U @node @'Y,,,acute accent @section @'Y This is a ref to (@pxref{, ,}). Another one, with node only (@pxref{, ,}). @c @node grave accent,,Top,Top @chapter grave accent @menu * :: . * :: . * @`i:: @`i. * with brace @`{i}:: @`{i}. * with dotless @`{@dotless{i}}:: @`{@dotless{i}}. * @`o:: @`o. * :: . * @`A:: @`A. * @`E:: @`E. * @`I:: @`I. * @`O:: @`O. * @`U:: @`U. @end menu @c @node ,,,grave accent @section @node ,,,grave accent @section @node @`i,,,grave accent @section @`i @node with brace @`{i},,,grave accent @section @`{i} @node with dotless @`{@dotless{i}},,,grave accent @section @`{@dotless{i}} @node @`o,,,grave accent @section @`o @node ,,,grave accent @section @node @`A,,,grave accent @section @`A @node @`E,,,grave accent @section @`E @node @`I,,,grave accent @section @`I @node @`O,,,grave accent @section @`O @node @`U,,,grave accent @section @`U @c @node circumflex accent,,Top,Top @chapter circumflex accent @menu * :: . * :: . * :: . * :: . * :: . * :: . * :: . * :: . * :: . * :: . @end menu @c @node ,,,circumflex accent @section @node ,,,circumflex accent @section @node ,,,circumflex accent @section @node ,,,circumflex accent @section @node ,,,circumflex accent @section @node ,,,circumflex accent @section @node ,,,circumflex accent @section @node ,,,circumflex accent @section @node ,,,circumflex accent @section @node ,,,circumflex accent @section @c @node tilde accent,,Top,Top @chapter tilde accent @menu * @~a:: @~a. * @~n:: @~n. * @~o:: @~o. * @~A:: @~A. * @~O:: @~O. @end menu @c @node @~a,,,tilde accent @section @~a @node @~n,,,tilde accent @section @~n @node @~o,,,tilde accent @section @~o @node @~A,,,tilde accent @section @~A @node @~O,,,tilde accent @section @~O This marks the @anchor{x-spot}spot. A second one with accented char @anchor{-o}. @c @node cedilla accent,,Top,Top @chapter cedilla accent @menu * :: . * @,{C}:: @,{C}. @end menu @c @node ,,,cedilla accent @section @node @,{C},,,cedilla accent @section @,{C} @c @node rest,,Top,Top @chapter rest @menu * @aa{}:: @aa{}. * @ae{}:: @ae{}. * @oe{}:: @oe{}. * @AA{}:: @AA{}. * @AE{}:: @AE{}. * @OE{}:: @OE{}. * @l{}:: @l{}. * @o{}:: @o{}. * @L{}:: @L{}. * @O{}:: @O{}. * @H{a}:: @H{a}. * @u{a}:: @u{a}. * @v{a}:: @v{a}. * @udotaccent{a}:: @udotaccent{a} udotaccent. * @dotaccent{a}:: @dotaccent{a} dotaccent. * @ringaccent{a}:: @ringaccent{a} ringaccent. * @tieaccent{a}:: @tieaccent{a} tieaccent. * @ubaraccent{a}:: @ubaraccent{a} ubaraccent. * @dotless{i}:: @dotless{i} dotless i. * @dotless{j}:: @dotless{j} dotless j. * @comma{}:: @comma{} comma @end menu @c @node @aa{},,,rest @section @aa{} @node @ae{},,,rest @section @ae{} @node @oe{},,,rest @section @oe{} @node @AA{},,,rest @section @AA{} @node @AE{},,,rest @section @AE{} @node @OE{},,,rest @section @OE{} @node @l{},,,rest @section @l{} @node @o{},,,rest @section @o{} @node @L{},,,rest @section @L{} @node @O{},,,rest @section @O{} @node @H{a},,,rest @section @H{a} @node @u{a},,,rest @section @u{a} @node @v{a},,,rest @section @v{a} @node @udotaccent{a},,,rest @section @udotaccent{a} Test udotaccent. @node @dotaccent{a},,,rest @section @dotaccent{a} Test dotaccent. @node @ringaccent{a},,,rest @section @ringaccent{a} @node @tieaccent{a},,,rest @section @tieaccent{a} @node @ubaraccent{a},,,rest @section @ubaraccent{a} @node @dotless{i},,,rest @section @dotless{i} @node @dotless{j},,,rest @section @dotless{j} @dots{} @enddots{} @exclamdown{} @questiondown{} @pounds{} @@- : @- @@ followed by end of line: @ @@ followed by tab: @ @@ followed by space @ @@*: @* and text followin @@*. @node @comma{},,,rest @section @comma{} An index entry with accented letter. @cindex index entry with accented letter: @`a @cindex index entry with accented letter: @`a @printindex cp @contents @bye texi2html-1.82/test/encodings/res/texi_nodetest_latin1/nodetest_latin1.passtexi0000644000175000017500000003557711264347117032005 0ustar flichtenheldflichtenheldnodetest_latin1.texi(,2) @setfilename nodetest_latin1.info nodetest_latin1.texi(,3) @documentencoding latin1 nodetest_latin1.texi(,4) @node Top,Umlaut,(dir) nodetest_latin1.texi(,5) @top nodetest_latin1.texi(,6) @menu nodetest_latin1.texi(,7) * Umlaut:: Umlaut. nodetest_latin1.texi(,8) nodetest_latin1.texi(,9) nodetest_latin1.texi(,10) Another Heading nodetest_latin1.texi(,11) nodetest_latin1.texi(,12) nodetest_latin1.texi(,13) * acute accent:: acute accent. nodetest_latin1.texi(,14) * grave accent:: grave accent. nodetest_latin1.texi(,15) * circumflex accent:: circumflex accent. nodetest_latin1.texi(,16) * tilde accent:: tilde accent. nodetest_latin1.texi(,17) * cedilla accent:: cedilla accent. nodetest_latin1.texi(,18) * rest:: rest @@aa@{@} etc. nodetest_latin1.texi(,19) @end menu nodetest_latin1.texi(,20) @c nodetest_latin1.texi(,21) @node Umlaut,,Top,Top nodetest_latin1.texi(,22) @chapter Umlaut nodetest_latin1.texi(,23) @menu nodetest_latin1.texi(,24) * :: . nodetest_latin1.texi(,25) * :: . nodetest_latin1.texi(,26) * :: . nodetest_latin1.texi(,27) * :: . nodetest_latin1.texi(,28) * :: . nodetest_latin1.texi(,29) * :: . nodetest_latin1.texi(,30) * :: . nodetest_latin1.texi(,31) * :: . nodetest_latin1.texi(,32) * :: . nodetest_latin1.texi(,33) * :: . nodetest_latin1.texi(,34) * :: . nodetest_latin1.texi(,35) * @ss{}:: @ss{}. nodetest_latin1.texi(,36) * no section:: Node without sectioning command. nodetest_latin1.texi(,37) @end menu nodetest_latin1.texi(,38) @c nodetest_latin1.texi(,39) @node ,,,Umlaut nodetest_latin1.texi(,40) @section nodetest_latin1.texi(,41) ref to @ref{}. nodetest_latin1.texi(,42) @node ,,,Umlaut nodetest_latin1.texi(,43) @section nodetest_latin1.texi(,44) @node ,,,Umlaut nodetest_latin1.texi(,45) @section nodetest_latin1.texi(,46) nodetest_latin1.texi(,47) before footnote @xref{footanchor}. nodetest_latin1.texi(,48) nodetest_latin1.texi(,49) @footnote{@anchor{footanchor}} nodetest_latin1.texi(,50) nodetest_latin1.texi(,51) after footnote @xref{footanchor}. nodetest_latin1.texi(,52) nodetest_latin1.texi(,53) @node ,,,Umlaut nodetest_latin1.texi(,54) @section nodetest_latin1.texi(,55) Ref to an anchor at the end of the doc nodetest_latin1.texi(,56) (@pxref{-o, , there is an o- could there be an @^{@dotless{i}}}). nodetest_latin1.texi(,57) @node ,,,Umlaut nodetest_latin1.texi(,58) @section nodetest_latin1.texi(,59) Another ref to an anchor (@pxref{x-spot, ,}). nodetest_latin1.texi(,60) @node ,,,Umlaut nodetest_latin1.texi(,61) @section nodetest_latin1.texi(,62) This is a ref to a node (@pxref{, ,}). nodetest_latin1.texi(,63) nodetest_latin1.texi(,64) @node ,,,Umlaut nodetest_latin1.texi(,65) @section nodetest_latin1.texi(,66) nodetest_latin1.texi(,67) Now a ref to a node without sectionning command, nodetest_latin1.texi(,68) no text (@pxref{no section, , }). nodetest_latin1.texi(,69) With text (@pxref{no section, ,but a text }). nodetest_latin1.texi(,70) nodetest_latin1.texi(,71) @node ,,,Umlaut nodetest_latin1.texi(,72) @section nodetest_latin1.texi(,73) @node ,,,Umlaut nodetest_latin1.texi(,74) @section nodetest_latin1.texi(,75) @node ,,,Umlaut nodetest_latin1.texi(,76) @section nodetest_latin1.texi(,77) @node ,,,Umlaut nodetest_latin1.texi(,78) @section nodetest_latin1.texi(,79) @node @ss{},,,Umlaut nodetest_latin1.texi(,80) @section @ss{} nodetest_latin1.texi(,81) @node no section,,,Umlaut nodetest_latin1.texi(,82) This is a node without sectioning command. nodetest_latin1.texi(,83) @c nodetest_latin1.texi(,84) @node acute accent,,Top,Top nodetest_latin1.texi(,85) @chapter acute accent nodetest_latin1.texi(,86) @menu nodetest_latin1.texi(,87) * @'a:: @'a. nodetest_latin1.texi(,88) * :: . nodetest_latin1.texi(,89) * @'i:: @'i. nodetest_latin1.texi(,90) * @'o:: @'o. nodetest_latin1.texi(,91) * @'u:: @'u. nodetest_latin1.texi(,92) * @'y:: @'y. nodetest_latin1.texi(,93) * @'A:: @'A. nodetest_latin1.texi(,94) * @'E:: @'E. nodetest_latin1.texi(,95) * @'I:: @'I. nodetest_latin1.texi(,96) * @'O:: @'O. nodetest_latin1.texi(,97) * @'U:: @'U. nodetest_latin1.texi(,98) * @'Y:: @'Y. nodetest_latin1.texi(,99) @end menu nodetest_latin1.texi(,100) @c nodetest_latin1.texi(,101) @node @'a,,,acute accent nodetest_latin1.texi(,102) @section @'a nodetest_latin1.texi(,103) With brace @'{a}. Testing ' " ` ^. nodetest_latin1.texi(,104) @node ,,,acute accent nodetest_latin1.texi(,105) @section nodetest_latin1.texi(,106) @node @'i,,,acute accent nodetest_latin1.texi(,107) @section @'i nodetest_latin1.texi(,108) @node @'o,,,acute accent nodetest_latin1.texi(,109) @section @'o nodetest_latin1.texi(,110) @node @'u,,,acute accent nodetest_latin1.texi(,111) @section @'u nodetest_latin1.texi(,112) @node @'y,,,acute accent nodetest_latin1.texi(,113) @section @'y nodetest_latin1.texi(,114) @node @'A,,,acute accent nodetest_latin1.texi(,115) @section @'A nodetest_latin1.texi(,116) @node @'E,,,acute accent nodetest_latin1.texi(,117) @section @'E nodetest_latin1.texi(,118) @node @'I,,,acute accent nodetest_latin1.texi(,119) @section @'I nodetest_latin1.texi(,120) @node @'O,,,acute accent nodetest_latin1.texi(,121) @section @'O nodetest_latin1.texi(,122) @node @'U,,,acute accent nodetest_latin1.texi(,123) @section @'U nodetest_latin1.texi(,124) @node @'Y,,,acute accent nodetest_latin1.texi(,125) @section @'Y nodetest_latin1.texi(,126) This is a ref to (@pxref{, ,}). nodetest_latin1.texi(,127) Another one, with node only (@pxref{, ,}). nodetest_latin1.texi(,128) nodetest_latin1.texi(,132) nodetest_latin1.texi(,133) @c nodetest_latin1.texi(,134) @node grave accent,,Top,Top nodetest_latin1.texi(,135) @chapter grave accent nodetest_latin1.texi(,136) @menu nodetest_latin1.texi(,137) * :: . nodetest_latin1.texi(,138) * :: . nodetest_latin1.texi(,139) * @`i:: @`i. nodetest_latin1.texi(,140) * with brace @`{i}:: @`{i}. nodetest_latin1.texi(,141) * with dotless @`{@dotless{i}}:: @`{@dotless{i}}. nodetest_latin1.texi(,142) * @`o:: @`o. nodetest_latin1.texi(,143) * :: . nodetest_latin1.texi(,144) * @`A:: @`A. nodetest_latin1.texi(,145) * @`E:: @`E. nodetest_latin1.texi(,146) * @`I:: @`I. nodetest_latin1.texi(,147) * @`O:: @`O. nodetest_latin1.texi(,148) * @`U:: @`U. nodetest_latin1.texi(,149) @end menu nodetest_latin1.texi(,150) @c nodetest_latin1.texi(,151) @node ,,,grave accent nodetest_latin1.texi(,152) @section nodetest_latin1.texi(,153) @node ,,,grave accent nodetest_latin1.texi(,154) @section nodetest_latin1.texi(,155) @node @`i,,,grave accent nodetest_latin1.texi(,156) @section @`i nodetest_latin1.texi(,157) @node with brace @`{i},,,grave accent nodetest_latin1.texi(,158) @section @`{i} nodetest_latin1.texi(,159) @node with dotless @`{@dotless{i}},,,grave accent nodetest_latin1.texi(,160) @section @`{@dotless{i}} nodetest_latin1.texi(,161) @node @`o,,,grave accent nodetest_latin1.texi(,162) @section @`o nodetest_latin1.texi(,163) @node ,,,grave accent nodetest_latin1.texi(,164) @section nodetest_latin1.texi(,165) @node @`A,,,grave accent nodetest_latin1.texi(,166) @section @`A nodetest_latin1.texi(,167) @node @`E,,,grave accent nodetest_latin1.texi(,168) @section @`E nodetest_latin1.texi(,169) @node @`I,,,grave accent nodetest_latin1.texi(,170) @section @`I nodetest_latin1.texi(,171) @node @`O,,,grave accent nodetest_latin1.texi(,172) @section @`O nodetest_latin1.texi(,173) @node @`U,,,grave accent nodetest_latin1.texi(,174) @section @`U nodetest_latin1.texi(,175) @c nodetest_latin1.texi(,176) @node circumflex accent,,Top,Top nodetest_latin1.texi(,177) @chapter circumflex accent nodetest_latin1.texi(,178) @menu nodetest_latin1.texi(,179) * :: . nodetest_latin1.texi(,180) * :: . nodetest_latin1.texi(,181) * :: . nodetest_latin1.texi(,182) * :: . nodetest_latin1.texi(,183) * :: . nodetest_latin1.texi(,184) * :: . nodetest_latin1.texi(,185) * :: . nodetest_latin1.texi(,186) * :: . nodetest_latin1.texi(,187) * :: . nodetest_latin1.texi(,188) * :: . nodetest_latin1.texi(,189) @end menu nodetest_latin1.texi(,190) @c nodetest_latin1.texi(,191) @node ,,,circumflex accent nodetest_latin1.texi(,192) @section nodetest_latin1.texi(,193) @node ,,,circumflex accent nodetest_latin1.texi(,194) @section nodetest_latin1.texi(,195) @node ,,,circumflex accent nodetest_latin1.texi(,196) @section nodetest_latin1.texi(,197) @node ,,,circumflex accent nodetest_latin1.texi(,198) @section nodetest_latin1.texi(,199) @node ,,,circumflex accent nodetest_latin1.texi(,200) @section nodetest_latin1.texi(,201) @node ,,,circumflex accent nodetest_latin1.texi(,202) @section nodetest_latin1.texi(,203) @node ,,,circumflex accent nodetest_latin1.texi(,204) @section nodetest_latin1.texi(,205) @node ,,,circumflex accent nodetest_latin1.texi(,206) @section nodetest_latin1.texi(,207) @node ,,,circumflex accent nodetest_latin1.texi(,208) @section nodetest_latin1.texi(,209) @node ,,,circumflex accent nodetest_latin1.texi(,210) @section nodetest_latin1.texi(,211) @c nodetest_latin1.texi(,212) @node tilde accent,,Top,Top nodetest_latin1.texi(,213) @chapter tilde accent nodetest_latin1.texi(,214) @menu nodetest_latin1.texi(,215) * @~a:: @~a. nodetest_latin1.texi(,216) * @~n:: @~n. nodetest_latin1.texi(,217) * @~o:: @~o. nodetest_latin1.texi(,218) * @~A:: @~A. nodetest_latin1.texi(,219) * @~O:: @~O. nodetest_latin1.texi(,220) @end menu nodetest_latin1.texi(,221) @c nodetest_latin1.texi(,222) @node @~a,,,tilde accent nodetest_latin1.texi(,223) @section @~a nodetest_latin1.texi(,224) @node @~n,,,tilde accent nodetest_latin1.texi(,225) @section @~n nodetest_latin1.texi(,226) @node @~o,,,tilde accent nodetest_latin1.texi(,227) @section @~o nodetest_latin1.texi(,228) @node @~A,,,tilde accent nodetest_latin1.texi(,229) @section @~A nodetest_latin1.texi(,230) @node @~O,,,tilde accent nodetest_latin1.texi(,231) @section @~O nodetest_latin1.texi(,232) This marks the @anchor{x-spot}spot. nodetest_latin1.texi(,233) A second one with accented char @anchor{-o}. nodetest_latin1.texi(,234) @c nodetest_latin1.texi(,235) @node cedilla accent,,Top,Top nodetest_latin1.texi(,236) @chapter cedilla accent nodetest_latin1.texi(,237) @menu nodetest_latin1.texi(,238) * :: . nodetest_latin1.texi(,239) * @,{C}:: @,{C}. nodetest_latin1.texi(,240) @end menu nodetest_latin1.texi(,241) @c nodetest_latin1.texi(,242) @node ,,,cedilla accent nodetest_latin1.texi(,243) @section nodetest_latin1.texi(,244) @node @,{C},,,cedilla accent nodetest_latin1.texi(,245) @section @,{C} nodetest_latin1.texi(,246) @c nodetest_latin1.texi(,247) @node rest,,Top,Top nodetest_latin1.texi(,248) @chapter rest nodetest_latin1.texi(,249) @menu nodetest_latin1.texi(,250) * @aa{}:: @aa{}. nodetest_latin1.texi(,251) * @ae{}:: @ae{}. nodetest_latin1.texi(,252) * @oe{}:: @oe{}. nodetest_latin1.texi(,253) * @AA{}:: @AA{}. nodetest_latin1.texi(,254) * @AE{}:: @AE{}. nodetest_latin1.texi(,255) * @OE{}:: @OE{}. nodetest_latin1.texi(,256) * @l{}:: @l{}. nodetest_latin1.texi(,257) * @o{}:: @o{}. nodetest_latin1.texi(,258) * @L{}:: @L{}. nodetest_latin1.texi(,259) * @O{}:: @O{}. nodetest_latin1.texi(,260) * @H{a}:: @H{a}. nodetest_latin1.texi(,261) * @u{a}:: @u{a}. nodetest_latin1.texi(,262) * @v{a}:: @v{a}. nodetest_latin1.texi(,263) * @udotaccent{a}:: @udotaccent{a} udotaccent. nodetest_latin1.texi(,264) * @dotaccent{a}:: @dotaccent{a} dotaccent. nodetest_latin1.texi(,265) * @ringaccent{a}:: @ringaccent{a} ringaccent. nodetest_latin1.texi(,266) * @tieaccent{a}:: @tieaccent{a} tieaccent. nodetest_latin1.texi(,267) * @ubaraccent{a}:: @ubaraccent{a} ubaraccent. nodetest_latin1.texi(,268) * @dotless{i}:: @dotless{i} dotless i. nodetest_latin1.texi(,269) * @dotless{j}:: @dotless{j} dotless j. nodetest_latin1.texi(,270) * @comma{}:: @comma{} comma nodetest_latin1.texi(,271) @end menu nodetest_latin1.texi(,272) @c nodetest_latin1.texi(,273) @node @aa{},,,rest nodetest_latin1.texi(,274) @section @aa{} nodetest_latin1.texi(,275) @node @ae{},,,rest nodetest_latin1.texi(,276) @section @ae{} nodetest_latin1.texi(,277) @node @oe{},,,rest nodetest_latin1.texi(,278) @section @oe{} nodetest_latin1.texi(,279) @node @AA{},,,rest nodetest_latin1.texi(,280) @section @AA{} nodetest_latin1.texi(,281) @node @AE{},,,rest nodetest_latin1.texi(,282) @section @AE{} nodetest_latin1.texi(,283) @node @OE{},,,rest nodetest_latin1.texi(,284) @section @OE{} nodetest_latin1.texi(,285) @node @l{},,,rest nodetest_latin1.texi(,286) @section @l{} nodetest_latin1.texi(,287) @node @o{},,,rest nodetest_latin1.texi(,288) @section @o{} nodetest_latin1.texi(,289) @node @L{},,,rest nodetest_latin1.texi(,290) @section @L{} nodetest_latin1.texi(,291) @node @O{},,,rest nodetest_latin1.texi(,292) @section @O{} nodetest_latin1.texi(,293) @node @H{a},,,rest nodetest_latin1.texi(,294) @section @H{a} nodetest_latin1.texi(,295) @node @u{a},,,rest nodetest_latin1.texi(,296) @section @u{a} nodetest_latin1.texi(,297) @node @v{a},,,rest nodetest_latin1.texi(,298) @section @v{a} nodetest_latin1.texi(,299) @node @udotaccent{a},,,rest nodetest_latin1.texi(,300) @section @udotaccent{a} nodetest_latin1.texi(,301) Test udotaccent. nodetest_latin1.texi(,302) @node @dotaccent{a},,,rest nodetest_latin1.texi(,303) @section @dotaccent{a} nodetest_latin1.texi(,304) Test dotaccent. nodetest_latin1.texi(,305) @node @ringaccent{a},,,rest nodetest_latin1.texi(,306) @section @ringaccent{a} nodetest_latin1.texi(,307) @node @tieaccent{a},,,rest nodetest_latin1.texi(,308) @section @tieaccent{a} nodetest_latin1.texi(,309) @node @ubaraccent{a},,,rest nodetest_latin1.texi(,310) @section @ubaraccent{a} nodetest_latin1.texi(,311) @node @dotless{i},,,rest nodetest_latin1.texi(,312) @section @dotless{i} nodetest_latin1.texi(,313) @node @dotless{j},,,rest nodetest_latin1.texi(,314) @section @dotless{j} nodetest_latin1.texi(,315) nodetest_latin1.texi(,316) @dots{} nodetest_latin1.texi(,317) nodetest_latin1.texi(,318) @enddots{} nodetest_latin1.texi(,319) nodetest_latin1.texi(,320) @exclamdown{} nodetest_latin1.texi(,321) nodetest_latin1.texi(,322) @questiondown{} nodetest_latin1.texi(,323) nodetest_latin1.texi(,324) @pounds{} nodetest_latin1.texi(,325) nodetest_latin1.texi(,326) @@- : @- nodetest_latin1.texi(,327) @@ followed by end of line: @ nodetest_latin1.texi(,328) @@ followed by tab: @ nodetest_latin1.texi(,329) @@ followed by space @ nodetest_latin1.texi(,330) @@*: @* and text followin @@*. nodetest_latin1.texi(,331) nodetest_latin1.texi(,332) @node @comma{},,,rest nodetest_latin1.texi(,333) @section @comma{} nodetest_latin1.texi(,334) nodetest_latin1.texi(,335) An index entry with accented letter. nodetest_latin1.texi(,336) @cindex index entry with accented letter: @`a nodetest_latin1.texi(,337) @cindex index entry with accented letter: @`a nodetest_latin1.texi(,338) nodetest_latin1.texi(,339) @printindex cp nodetest_latin1.texi(,340) nodetest_latin1.texi(,341) @contents nodetest_latin1.texi(,342) @bye texi2html-1.82/test/encodings/res/accentenc_encoding/0000755000175000017500000000000011264347116024547 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/accentenc_encoding/accentenc.html0000644000175000017500000000565711264347116027375 0ustar flichtenheldflichtenheld Accent encoding test

    Accent encoding test top

    should be e`:

    should be e':

    should be e^:

    should be u":

    should be i`:

    should be i':

    should be i^:

    should be u":

    should be c,:

    should be n~:

    should be e=: ē ē

    should be e'': e'' e''

    should be e.: ė ė

    should be e*: e* e*

    should be ee[: ee[

    should be e(: ĕ ĕ

    should be e_: e_ e_

    should be .e: ẹ ẹ

    should be e<: e< e<

    upside down:

    A-with-circle: ,

    AE, OE ligatures: œ Œ

    dotless i, j: i j

    Polish suppressed-L: ł Ł

    O-with-slash:

    es-zet or sharp S:

    pounds sterling:

    should be dotless i`:

    should be dotless i':

    should be dotless i^:

    should be dotless i":

    should be dotless j`: j`

    should be dotless j': j'

    should be dotless j^: ĵ

    should be dotless j": j"


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/accentenc_encoding/accentenc.20000644000175000017500000000000011264347116026543 0ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/weird_accents/0000755000175000017500000000000011264347116023570 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/weird_accents/weird_accents.20000644000175000017500000000000011264347116026453 0ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/weird_accents/weird_accents.html0000644000175000017500000000371511264347116027276 0ustar flichtenheldflichtenheld Complex accent encoding test

    Complex accent encoding test top

    ĩ=

    ñ,=

    a_=

    r`'=


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_to_utf8_latin1/0000755000175000017500000000000011264347116025523 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/nodetest_to_utf8_latin1/nodetest_latin1.20000644000175000017500000000010011264347116030672 0ustar flichtenheldflichtenheld*** Node equivalent with `@aa{}' already used `@ringaccent{a}' texi2html-1.82/test/encodings/res/nodetest_to_utf8_latin1/nodetest_latin1.html0000644000175000017500000037620311264347116031521 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Top


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Umlaut


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 ä

    ref to ç ç.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2 ë


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.3 ï

    before footnote See footanchor.

    (1)

    after footnote See footanchor.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4 ö

    Ref to an anchor at the end of the doc (see there is an o-é could there be an î).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.5 ü

    Another ref to an anchor (see x-spot).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.6 ÿ

    This is a ref to a node (see section à).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.7 Ä

    Now a ref to a node without sectionning command, no text (see no section). With text (see but a text).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.8 Ë


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.9 Ï


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.10 Ö


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.11 Ü


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.12 ß

    This is a node without sectioning command.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. acute accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.1 á

    With brace á. Testing ' " ` ^.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2 é


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3 í


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4 ó


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.5 ú


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.6 ý


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.7 Á


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.8 É


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.9 Í


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.10 Ó


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.11 Ú


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.12 Ý

    This is a ref to ü (see section ü). Another one, with node only (see section ü).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. grave accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.1 à


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.2 è


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.3 ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.4 ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.5 ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.6 ò


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.7 ù


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.8 À


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.9 È


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.10 Ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.11 Ò


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.12 Ù


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4. circumflex accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.1 â


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.2 ê


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3 î


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.4 ô


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.5 û


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.6 Â


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.7 Ê


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.8 Î


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.9 Ô


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.10 Û


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5. tilde accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.1 ã


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.2 ñ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.3 õ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.4 Ã


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.5 Õ

    This marks the spot. A second one with accented char .


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6. cedilla accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.1 ç


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.2 Ç


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7. rest


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.1 å


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.2 æ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.3 œ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.4 Å


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.5 Æ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.6 Œ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.7 ł


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.8 ø


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.9 Ł


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.10 Ø


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.11 a̋


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.12 ă


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.13 ǎ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.14 ạ

    Test udotaccent.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.15 ȧ

    Test dotaccent.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.16 å


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.17 a[


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.18 a̲


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.19 ı


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.20 j

    ...

    ¡

    ¿

    £

    @- : @ followed by end of line:   @ followed by tab:   @ followed by space   @*:
    and text followin @*.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.21 ,

    An index entry with accented letter.

    Jump to:   I  
    Index Entry Section

    I
    index entry with accented letter: à à7.21 ,
    index entry with accented letter: â à7.21 ,

    Jump to:   I  

    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/formatting_fr/0000755000175000017500000000000011264347116023617 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/formatting_fr/formatting.20000644000175000017500000002243411264347116026061 0ustar flichtenheldflichtenheld** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} (l. 38 in @mymacro) ** Unknown command `@#' (left as is) (l. 38 in @mymacro) *** no file argument for @image (l. 38 in @mymacro) *** no file argument for @image (l. 38 in @mymacro) *** no file argument for @image (l. 38 in @mymacro) *** '}' without opening '{' before: (l. 38 in @mymacro) *** '}' without opening '{' before: (l. 38 in @mymacro) *** '{' without macro. Before: (l. 38 in @mymacro) *** '{' without macro. Before: and after (l. 38 in @mymacro) *** Undefined node `node' in @ref (l. 38 in @mymacro) *** Undefined node `' in @ref (l. 38 in @mymacro) *** Undefined node `' in @ref (l. 38 in @mymacro) *** Undefined node `node' in @ref (l. 38 in @mymacro) *** Undefined node `node' in @ref (l. 38 in @mymacro) *** Undefined node `node' in @ref (l. 38 in @mymacro) *** Undefined node `' in @ref (l. 38 in @mymacro) *** First argument to @inforef may not be empty (l. 38 in @mymacro) *** First argument to @inforef may not be empty (l. 38 in @mymacro) *** First argument to @inforef may not be empty (l. 38 in @mymacro) *** First argument to @inforef may not be empty (l. 38 in @mymacro) ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} (l. 42 in @mymacro) ** Unknown command `@#' (left as is) (l. 42 in @mymacro) *** no file argument for @image (l. 42 in @mymacro) *** no file argument for @image (l. 42 in @mymacro) *** no file argument for @image (l. 42 in @mymacro) *** '}' without opening '{' before: (l. 42 in @mymacro) *** '}' without opening '{' before: (l. 42 in @mymacro) *** '{' without macro. Before: (l. 42 in @mymacro) *** '{' without macro. Before: and after (l. 42 in @mymacro) *** Undefined node `node' in @ref (l. 42 in @mymacro) *** Undefined node `' in @ref (l. 42 in @mymacro) *** Undefined node `' in @ref (l. 42 in @mymacro) *** Undefined node `node' in @ref (l. 42 in @mymacro) *** Undefined node `node' in @ref (l. 42 in @mymacro) *** Undefined node `node' in @ref (l. 42 in @mymacro) *** Undefined node `' in @ref (l. 42 in @mymacro) *** First argument to @inforef may not be empty (l. 42 in @mymacro) *** First argument to @inforef may not be empty (l. 42 in @mymacro) *** First argument to @inforef may not be empty (l. 42 in @mymacro) *** First argument to @inforef may not be empty (l. 42 in @mymacro) texi2html-1.82/test/encodings/res/formatting_fr/formatting.html0000644000175000017500000055330311264347116026670 0ustar flichtenheldflichtenheld title –a
    [Racine] [Table des matières] [Index] [ ? ]

    Insertcopying in normal text

    In copying

    < > " & ’ ‘

    “simple-double–three—four—-”
    code: ``simple-double--three---four----''
    asis: “simple-double–three—four—-”
    strong: “simple-double–three—four—-”
    kbd: ``simple-double--three---four----''

    ‘‘simple-double--three—four—-’’

    @"u ü @"{U} Ü @~n ñ @^a â @’e é @=o ō @‘i ì @’{e} é @’{@dotless{i}} í @dotless{i} i @dotless{j} j @‘{@=E} Ē` @l{} ł @,{@’C} Ć, @,c ç @,c@"u çü

    @*
    @ followed by a space   @ followed by a tab   @ followed by a new line  @- @| @: @! ! @? ? @. . @@ @ @} } @{ { @/

    foo vs. bar. colon :And something else. semi colon ;. And ? ?. Now ! !@ but , ,

    @TeX TeX @LaTeX LaTeX @bullet • @copyright © @dots … @enddots ... @equiv ≡ @error error--> @expansion → @minus - @point ∗ @print -| @result ⇒ @today a sunny day @aa å @AA Å @ae æ @oe œ @AE Æ @OE Œ @o ø @O Ø @ss ß @l ł @L Ł @exclamdown ¡ @questiondown ¿ @pounds £ @registeredsymbol ® @ordf ª @ordm º @comma , @quotedblleft “ @quotedblright ” @quoteleft ‘ @quoteright ’ @quotedblbase „ @quotesinglbase ‚ @guillemetleft « @guillemetright » @guillemotleft « @guillemotright » @guilsinglleft ‹ @guilsinglright › @textdegree ° @euro € @arrow → @leq ≤ @geq ≥

    @acronym{--a,an accronym} –a (an accronym) @acronym{--a} –a @abbr{@'E--. @comma{}A., @'Etude Autonome } É–. ,A. (Étude Autonome) @abbr{@'E--. @comma{}A.} É–. ,A. @asis{--a} –a @b{--a} –a @cite{--a} –a @code{--a} --a @command{--a} --a @ctrl{--a} –a @dfn{--a} –a @dmn{--a} –a @email{--a,--b} –b @email{,--b} –b @email{--a} --a @emph{--a} –a @env{--a} --a @file{--a}--a@i{--a} –a @kbd{--a} --a @key{--a} <--a> @math{--a {\frac{1}{2}} @minus{}} –a \frac12 - @option{--a}--a@r{--a} –a @samp{--a}--a@sc{--a} –A @strong{--a} –a @t{--a} –a @sansserif{--a} –a @titlefont{--a}

    –a

    @indicateurl{--a} <--a> @uref{--a,--b} –b @uref{--a} --a @uref{,--b} –b @uref{--a,--b,--c} –c @uref{,--b,--c} –c @uref{--a,,--c} –c @uref{,,--c} –c @url{--a,--b} –b @url{--a,} --a @url{,--b} –b @var{--a} –a @verb{:--a:} --a @verb{:a < & @ % " -- b:} a < & @ % " -- b @w{} @H{a} a'' @H{--a} –a'' @dotaccent{a} ȧ @dotaccent{--a} –a. @ringaccent{a} å @ringaccent{--a} –a* @tieaccent{a} a[ @tieaccent{--a} –a[ @u{a} ă @u{--a} –a( @ubaraccent{a} a_ @ubaraccent{--a} –a_ @udotaccent{a}@udotaccent{--a} .–a @v{a} a< @v{--a} –a< @,{c} ç @,{--c} –c, @ogonek{a} ą @ogonek{--a} –a; @footnote{in footnote} (1) @footnote{in footnote2} (2)

    @image{f--ile} f--ile @image{f--ile,l--i} f--ile @image{f--ile,,l--e} f--ile @image{f--ile,,,alt} alt @image{f--ile,,,,e-d-xt} f--ile @image{f--ile,aze,az,alt,e--xt} alt @image{f-ile,aze,,a--lt} a–lt @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} alt



    @clicksequence{click @click{} A} click → A After clickstyle ⇒ @clicksequence{click @click{} A} click ⇒ A

    A quot—ation

    Note: A Note

    note: A note

    Caution: Caution

    Important: Important

    Tip: a Tip

    Warning: a Warning.

    something é TeX: The something é TeX is here.

    @ at the end of line A @ at the end of the @quotation line.

    something, other thing: something, other thing

    Note, the note: Note, the note

    Empty:

    :


    :

    A small quot—ation

    Note: A small Note

    something, other thing: something, other thing

    • i–temize
    • + i–tem +
    • b–ullet
    • - minu–s
    • e–mph item
    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
    trucbidule
     
    e--xample  some
       text
    
     
    s--mallexample
    
     
    d–isplay
    
     
    s–malldisplay
    
     
    l--isp
    
     
    s--malllisp
    
     
    f–ormat
    
     
    s–mallformat
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    cate--gory: de--ffn_name ar--guments more args
    even more so

    def–fn

    fset: i a g
    cmde: truc
    Command: log trap
    Command: log trap1
    Command: log trap2
    cmde: id ule truc
    cmde2: id ‘i’ ule truc
    id ‘i’ ule:
    :
    aaa:
    :
    :
    : machin
    : bidule machin
    truc: machin
    truc:
    truc: followed by a comment
    truc:
    :
    truc: a b c d e f g h i
    truc: deffnx before end deffn
    empty: deffn
    empty: deffn with deffnx
    empty: deffnx
    fset: i a g
    cmde: truc

    text in def item for second def item

    c--ategory: d--efvr_name

    d–efvr

    c--ategory: t--ype d--eftypefn_name a--rguments...

    d–eftypefn

    c--ategory de c--lass: t--ype d--eftypeop_name a--rguments...

    d–eftypeop

    c--ategory: t--ype d--eftypevr_name

    d–eftypevr

    c--ategory de c--lass: d--efcv_name

    d–efcv

    c--ategory de c--lass: d--efop_name a--rguments...

    d–efop

    c--ategory: d--eftp_name a--ttributes...

    d–eftp

    Function: d--efun_name a--rguments...

    d–efun

    Macro: d--efmac_name a--rguments...

    d–efmac

    Special Form: d--efspec_name a--rguments...

    d–efspec

    Variable: d--efvar_name argvar argvar1

    d–efvar

    User Option: d--efopt_name

    d–efopt

    Function: t--ype d--eftypefun_name a--rguments...

    d–eftypefun

    Variable: t--ype d--eftypevar_name

    d–eftypevar

    Instance Variable de c--lass: d--efivar_name

    d–efivar

    Instance Variable de c--lass: t--ype d--eftypeivar_name

    d–eftypeivar

    Method de c--lass: d--efmethod_name a--rguments...

    d–efmethod

    Method de c--lass: t--ype d--eftypemethod_name a--rguments...

    d–eftypemethod

    @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} Voir cross r—ef name@: (file n—ame@)c—hapter@ section ‘t—itle@’ dans ma—nual@. @ref{chapter, cross ref name, title, file name, manual} cross ref name: (file name)chapter section ‘title’ dans manual @pxref{chapter, cross ref name, title, file name, manual} voir cross ref name: (file name)chapter section ‘title’ dans manual @inforef{chapter, cross ref name, file name} Voir cross ref name: (file name)chapter

    @ref{chapter} chapter @xref{chapter} Voir la section chapter. @pxref{chapter} voir la section chapter @ref{s--ect@comma{}ion} A section

    @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } a , in cross ref: (a comma, in file)s–ect,ion section ‘a comma, in title’ dans a , in manual name

    @ref{chapter,cross ref name} cross ref name @ref{chapter,,title} title @ref{chapter,,,file name} (file name)chapter @ref{chapter,,,,manual} section ‘chapter’ dans manual @ref{chapter,cross ref name,title,} title @ref{chapter,cross ref name,,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,,,manual} section ‘chapter’ dans manual @ref{chapter,cross ref name,title,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,title,,manual} section ‘title’ dans manual @ref{chapter,cross ref name,title, file name, manual} cross ref name: (file name)chapter section ‘title’ dans manual @ref{chapter,,title,file name} (file name)chapter @ref{chapter,,title,,manual} section ‘title’ dans manual @ref{chapter,,title, file name, manual} (file name)chapter section ‘title’ dans manual @ref{chapter,,,file name,manual} (file name)chapter section ‘chapter’ dans manual

    @ref{(pman)anode,cross ref name} cross ref name: (pman)anode @ref{(pman)anode,,title} (pman)anode @ref{(pman)anode,,,file name} (file name)anode @ref{(pman)anode,,,,manual} (pman)anode section ‘anode’ dans manual @ref{(pman)anode,cross ref name,title,} cross ref name: (pman)anode @ref{(pman)anode,cross ref name,,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,,,manual} cross ref name: (pman)anode section ‘anode’ dans manual @ref{(pman)anode,cross ref name,title,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,title,,manual} cross ref name: (pman)anode section ‘title’ dans manual @ref{(pman)anode,cross ref name,title, file name, manual} cross ref name: (file name)anode section ‘title’ dans manual @ref{(pman)anode,,title,file name} (file name)anode @ref{(pman)anode,,title,,manual} (pman)anode section ‘title’ dans manual @ref{(pman)anode,,title, file name, manual} (file name)anode section ‘title’ dans manual @ref{(pman)anode,,,file name,manual} (file name)anode section ‘anode’ dans manual

    @inforef{chapter, cross ref name, file name} Voir cross ref name: (file name)chapter @inforef{chapter} @inforef{chapter, cross ref name} @inforef{chapter,,file name} Voir (file name)chapter @inforef{node, cross ref name, file name} Voir cross ref name: (file name)node @inforef{node} @inforef{node, cross ref name} @inforef{node,,file name} Voir (file name)node @inforef{chapter, cross ref name, file name, spurious arg} Voir cross ref name: (file name, spurious arg)chapter

    @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} Voir a , in cross ref: (a comma, in file)s–ect,ion

    • a

    l–ine

    a
    b

    l–ine

    - a
    - b

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    \input texinfo @c -*-texinfo-*-
    
    @setfilename simplest.info
    
    @node Top
    
    This is a very simple texi manual @  <>.
    
    @bye
    
    in verbatim ''
    
    html ''

    majorheading

    chapheading

    heading

    subheading

    subsubheading

    @acronym{--a,an accronym @comma{} @enddots{}} –a (an accronym , ...) @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } É–. ,A. (Étude–, Autonome) @abbr{@'E--. @comma{}A.} É–. ,A.

    @math{--a@minus{} {\frac{1}{2}}} –a- \frac12

    @image{f-ile,,,alt@verb{:jk _" %}} altjk _" %@ @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} jk _" %@ in b " @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} altjk _" %@

    Somehow invalid use of @,:
    @, ,
    @,@"u @,"u

    Invalid use of @’:
    @’ ’
    @’@"u @'"u

    @dotless{truc} truc @dotless{ij} ij @dotless{--a} –a @dotless{a} a

    @TeX, but without brace TeX

    @# @#

    @w{--a} –a

    @image{,1--xt} @image{,,2--xt} @image{,,,3--xt}


    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    fun:
    truc: machin bidule chose and
    truc: machin bidule chose and after
    truc: machin bidule chose and {
    truc: machin bidule chose and { and after
    truc: followed by a comment

    Various deff lines

    truc: after a deff item

    @ref{node} @ref{node}

    @ref{,cross ref name} @ref{,cross ref name} @ref{,,title} @ref{,,title} @ref{,,,file name} (file name) @ref{,,,,manual} manual @ref{node,cross ref name} @ref{node,cross ref name} @ref{node,,title} @ref{node,,title} @ref{node,,,file name} (file name)node @ref{node,,,,manual} section ‘node’ dans manual @ref{node,cross ref name,title,} @ref{node,cross ref name,title,} @ref{node,cross ref name,,file name} cross ref name: (file name)node @ref{node,cross ref name,,,manual} section ‘node’ dans manual @ref{node,cross ref name,title,file name} cross ref name: (file name)node @ref{node,cross ref name,title,,manual} section ‘title’ dans manual @ref{node,cross ref name,title, file name, manual} cross ref name: (file name)node section ‘title’ dans manual @ref{node,,title,file name} (file name)node @ref{node,,title,,manual} section ‘title’ dans manual @ref{chapter,,title, file name, manual} (file name)chapter section ‘title’ dans manual @ref{node,,title, file name, manual} (file name)node section ‘title’ dans manual @ref{node,,,file name,manual} (file name)node section ‘node’ dans manual @ref{,cross ref name,title,} @ref{,cross ref name,title,} @ref{,cross ref name,,file name} cross ref name: (file name) @ref{,cross ref name,,,manual} manual @ref{,cross ref name,title,file name} cross ref name: (file name) @ref{,cross ref name,title,,manual} section ‘title’ dans manual @ref{,cross ref name,title, file name, manual} cross ref name: (file name) section ‘title’ dans manual @ref{,,title,file name} (file name) @ref{,,title,,manual} section ‘title’ dans manual @ref{,,title, file name, manual} (file name) section ‘title’ dans manual @ref{,,,file name,manual} (file name) manual

    @inforef{,cross ref name } @inforef{,,file name} @inforef{,cross ref name, file name} @inforef{}

    Normal text

    < > " & ’ ‘

    “simple-double–three—four—-”
    code: ``simple-double--three---four----''
    asis: “simple-double–three—four—-”
    strong: “simple-double–three—four—-”
    kbd: ``simple-double--three---four----''

    ‘‘simple-double--three—four—-’’

    @"u ü @"{U} Ü @~n ñ @^a â @’e é @=o ō @‘i ì @’{e} é @’{@dotless{i}} í @dotless{i} i @dotless{j} j @‘{@=E} Ē` @l{} ł @,{@’C} Ć, @,c ç @,c@"u çü

    @*
    @ followed by a space   @ followed by a tab   @ followed by a new line  @- @| @: @! ! @? ? @. . @@ @ @} } @{ { @/

    foo vs. bar. colon :And something else. semi colon ;. And ? ?. Now ! !@ but , ,

    @TeX TeX @LaTeX LaTeX @bullet • @copyright © @dots … @enddots ... @equiv ≡ @error error--> @expansion → @minus - @point ∗ @print -| @result ⇒ @today a sunny day @aa å @AA Å @ae æ @oe œ @AE Æ @OE Œ @o ø @O Ø @ss ß @l ł @L Ł @exclamdown ¡ @questiondown ¿ @pounds £ @registeredsymbol ® @ordf ª @ordm º @comma , @quotedblleft “ @quotedblright ” @quoteleft ‘ @quoteright ’ @quotedblbase „ @quotesinglbase ‚ @guillemetleft « @guillemetright » @guillemotleft « @guillemotright » @guilsinglleft ‹ @guilsinglright › @textdegree ° @euro € @arrow → @leq ≤ @geq ≥

    @acronym{--a,an accronym} –a (an accronym) @acronym{--a} –a @abbr{@'E--. @comma{}A., @'Etude Autonome } É–. ,A. (Étude Autonome) @abbr{@'E--. @comma{}A.} É–. ,A. @asis{--a} –a @b{--a} –a @cite{--a} –a @code{--a} --a @command{--a} --a @ctrl{--a} –a @dfn{--a} –a @dmn{--a} –a @email{--a,--b} –b @email{,--b} –b @email{--a} --a @emph{--a} –a @env{--a} --a @file{--a}--a@i{--a} –a @kbd{--a} --a @key{--a} <--a> @math{--a {\frac{1}{2}} @minus{}} –a \frac12 - @option{--a}--a@r{--a} –a @samp{--a}--a@sc{--a} –A @strong{--a} –a @t{--a} –a @sansserif{--a} –a @titlefont{--a}

    –a

    @indicateurl{--a} <--a> @uref{--a,--b} –b @uref{--a} --a @uref{,--b} –b @uref{--a,--b,--c} –c @uref{,--b,--c} –c @uref{--a,,--c} –c @uref{,,--c} –c @url{--a,--b} –b @url{--a,} --a @url{,--b} –b @var{--a} –a @verb{:--a:} --a @verb{:a < & @ % " -- b:} a < & @ % " -- b @w{} @H{a} a'' @H{--a} –a'' @dotaccent{a} ȧ @dotaccent{--a} –a. @ringaccent{a} å @ringaccent{--a} –a* @tieaccent{a} a[ @tieaccent{--a} –a[ @u{a} ă @u{--a} –a( @ubaraccent{a} a_ @ubaraccent{--a} –a_ @udotaccent{a}@udotaccent{--a} .–a @v{a} a< @v{--a} –a< @,{c} ç @,{--c} –c, @ogonek{a} ą @ogonek{--a} –a; @footnote{in footnote} (1) @footnote{in footnote2} (2)

    @image{f--ile} f--ile @image{f--ile,l--i} f--ile @image{f--ile,,l--e} f--ile @image{f--ile,,,alt} alt @image{f--ile,,,,e-d-xt} f--ile @image{f--ile,aze,az,alt,e--xt} alt @image{f-ile,aze,,a--lt} a–lt @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} alt



    @clicksequence{click @click{} A} click → A After clickstyle ⇒ @clicksequence{click @click{} A} click ⇒ A

    A quot—ation

    Note: A Note

    note: A note

    Caution: Caution

    Important: Important

    Tip: a Tip

    Warning: a Warning.

    something é TeX: The something é TeX is here.

    @ at the end of line A @ at the end of the @quotation line.

    something, other thing: something, other thing

    Note, the note: Note, the note

    Empty:

    :


    :

    A small quot—ation

    Note: A small Note

    something, other thing: something, other thing

    • i–temize
    • + i–tem +
    • b–ullet
    • - minu–s
    • e–mph item
    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
    trucbidule
     
    e--xample  some
       text
    
     
    s--mallexample
    
     
    d–isplay
    
     
    s–malldisplay
    
     
    l--isp
    
     
    s--malllisp
    
     
    f–ormat
    
     
    s–mallformat
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    cate--gory: de--ffn_name ar--guments more args
    even more so

    def–fn

    fset: i a g
    cmde: truc
    Command: log trap
    Command: log trap1
    Command: log trap2
    cmde: id ule truc
    cmde2: id ‘i’ ule truc
    id ‘i’ ule:
    :
    aaa:
    :
    :
    : machin
    : bidule machin
    truc: machin
    truc:
    truc: followed by a comment
    truc:
    :
    truc: a b c d e f g h i
    truc: deffnx before end deffn
    empty: deffn
    empty: deffn with deffnx
    empty: deffnx
    fset: i a g
    cmde: truc

    text in def item for second def item

    c--ategory: d--efvr_name

    d–efvr

    c--ategory: t--ype d--eftypefn_name a--rguments...

    d–eftypefn

    c--ategory de c--lass: t--ype d--eftypeop_name a--rguments...

    d–eftypeop

    c--ategory: t--ype d--eftypevr_name

    d–eftypevr

    c--ategory de c--lass: d--efcv_name

    d–efcv

    c--ategory de c--lass: d--efop_name a--rguments...

    d–efop

    c--ategory: d--eftp_name a--ttributes...

    d–eftp

    Function: d--efun_name a--rguments...

    d–efun

    Macro: d--efmac_name a--rguments...

    d–efmac

    Special Form: d--efspec_name a--rguments...

    d–efspec

    Variable: d--efvar_name argvar argvar1

    d–efvar

    User Option: d--efopt_name

    d–efopt

    Function: t--ype d--eftypefun_name a--rguments...

    d–eftypefun

    Variable: t--ype d--eftypevar_name

    d–eftypevar

    Instance Variable de c--lass: d--efivar_name

    d–efivar

    Instance Variable de c--lass: t--ype d--eftypeivar_name

    d–eftypeivar

    Method de c--lass: d--efmethod_name a--rguments...

    d–efmethod

    Method de c--lass: t--ype d--eftypemethod_name a--rguments...

    d–eftypemethod

    @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} Voir cross r—ef name@: (file n—ame@)c—hapter@ section ‘t—itle@’ dans ma—nual@. @ref{chapter, cross ref name, title, file name, manual} cross ref name: (file name)chapter section ‘title’ dans manual @pxref{chapter, cross ref name, title, file name, manual} voir cross ref name: (file name)chapter section ‘title’ dans manual @inforef{chapter, cross ref name, file name} Voir cross ref name: (file name)chapter

    @ref{chapter} chapter @xref{chapter} Voir la section chapter. @pxref{chapter} voir la section chapter @ref{s--ect@comma{}ion} A section

    @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } a , in cross ref: (a comma, in file)s–ect,ion section ‘a comma, in title’ dans a , in manual name

    @ref{chapter,cross ref name} cross ref name @ref{chapter,,title} title @ref{chapter,,,file name} (file name)chapter @ref{chapter,,,,manual} section ‘chapter’ dans manual @ref{chapter,cross ref name,title,} title @ref{chapter,cross ref name,,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,,,manual} section ‘chapter’ dans manual @ref{chapter,cross ref name,title,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,title,,manual} section ‘title’ dans manual @ref{chapter,cross ref name,title, file name, manual} cross ref name: (file name)chapter section ‘title’ dans manual @ref{chapter,,title,file name} (file name)chapter @ref{chapter,,title,,manual} section ‘title’ dans manual @ref{chapter,,title, file name, manual} (file name)chapter section ‘title’ dans manual @ref{chapter,,,file name,manual} (file name)chapter section ‘chapter’ dans manual

    @ref{(pman)anode,cross ref name} cross ref name: (pman)anode @ref{(pman)anode,,title} (pman)anode @ref{(pman)anode,,,file name} (file name)anode @ref{(pman)anode,,,,manual} (pman)anode section ‘anode’ dans manual @ref{(pman)anode,cross ref name,title,} cross ref name: (pman)anode @ref{(pman)anode,cross ref name,,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,,,manual} cross ref name: (pman)anode section ‘anode’ dans manual @ref{(pman)anode,cross ref name,title,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,title,,manual} cross ref name: (pman)anode section ‘title’ dans manual @ref{(pman)anode,cross ref name,title, file name, manual} cross ref name: (file name)anode section ‘title’ dans manual @ref{(pman)anode,,title,file name} (file name)anode @ref{(pman)anode,,title,,manual} (pman)anode section ‘title’ dans manual @ref{(pman)anode,,title, file name, manual} (file name)anode section ‘title’ dans manual @ref{(pman)anode,,,file name,manual} (file name)anode section ‘anode’ dans manual

    @inforef{chapter, cross ref name, file name} Voir cross ref name: (file name)chapter @inforef{chapter} @inforef{chapter, cross ref name} @inforef{chapter,,file name} Voir (file name)chapter @inforef{node, cross ref name, file name} Voir cross ref name: (file name)node @inforef{node} @inforef{node, cross ref name} @inforef{node,,file name} Voir (file name)node @inforef{chapter, cross ref name, file name, spurious arg} Voir cross ref name: (file name, spurious arg)chapter

    @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} Voir a , in cross ref: (a comma, in file)s–ect,ion

    • a

    l–ine

    a
    b

    l–ine

    - a
    - b

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    \input texinfo @c -*-texinfo-*-
    
    @setfilename simplest.info
    
    @node Top
    
    This is a very simple texi manual @  <>.
    
    @bye
    
    in verbatim ''
    
    html ''

    majorheading

    chapheading

    heading

    subheading

    subsubheading

    @acronym{--a,an accronym @comma{} @enddots{}} –a (an accronym , ...) @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } É–. ,A. (Étude–, Autonome) @abbr{@'E--. @comma{}A.} É–. ,A.

    @math{--a@minus{} {\frac{1}{2}}} –a- \frac12

    @image{f-ile,,,alt@verb{:jk _" %}} altjk _" %@ @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} jk _" %@ in b " @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} altjk _" %@

    Somehow invalid use of @,:
    @, ,
    @,@"u @,"u

    Invalid use of @’:
    @’ ’
    @’@"u @'"u

    @dotless{truc} truc @dotless{ij} ij @dotless{--a} –a @dotless{a} a

    @TeX, but without brace TeX

    @# @#

    @w{--a} –a

    @image{,1--xt} @image{,,2--xt} @image{,,,3--xt}


    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    fun:
    truc: machin bidule chose and
    truc: machin bidule chose and after
    truc: machin bidule chose and {
    truc: machin bidule chose and { and after
    truc: followed by a comment

    Various deff lines

    truc: after a deff item

    @ref{node} @ref{node}

    @ref{,cross ref name} @ref{,cross ref name} @ref{,,title} @ref{,,title} @ref{,,,file name} (file name) @ref{,,,,manual} manual @ref{node,cross ref name} @ref{node,cross ref name} @ref{node,,title} @ref{node,,title} @ref{node,,,file name} (file name)node @ref{node,,,,manual} section ‘node’ dans manual @ref{node,cross ref name,title,} @ref{node,cross ref name,title,} @ref{node,cross ref name,,file name} cross ref name: (file name)node @ref{node,cross ref name,,,manual} section ‘node’ dans manual @ref{node,cross ref name,title,file name} cross ref name: (file name)node @ref{node,cross ref name,title,,manual} section ‘title’ dans manual @ref{node,cross ref name,title, file name, manual} cross ref name: (file name)node section ‘title’ dans manual @ref{node,,title,file name} (file name)node @ref{node,,title,,manual} section ‘title’ dans manual @ref{chapter,,title, file name, manual} (file name)chapter section ‘title’ dans manual @ref{node,,title, file name, manual} (file name)node section ‘title’ dans manual @ref{node,,,file name,manual} (file name)node section ‘node’ dans manual @ref{,cross ref name,title,} @ref{,cross ref name,title,} @ref{,cross ref name,,file name} cross ref name: (file name) @ref{,cross ref name,,,manual} manual @ref{,cross ref name,title,file name} cross ref name: (file name) @ref{,cross ref name,title,,manual} section ‘title’ dans manual @ref{,cross ref name,title, file name, manual} cross ref name: (file name) section ‘title’ dans manual @ref{,,title,file name} (file name) @ref{,,title,,manual} section ‘title’ dans manual @ref{,,title, file name, manual} (file name) section ‘title’ dans manual @ref{,,,file name,manual} (file name) manual

    @inforef{,cross ref name } @inforef{,,file name} @inforef{,cross ref name, file name} @inforef{}

    In example.

     
    <
    >
    "
    &
    '
    `
    
    ``simple-double--three---four----''
    
    code: ``simple-double--three---four----'' 
    
    asis: ``simple-double--three---four----'' 
    
    strong: ``simple-double--three---four----'' 
    
    kbd: ``simple-double--three---four----'' 
    
    
    ``simple-double--three---four----''
    
    
    
    @"u ü 
    @"{U} Ü 
    @~n ñ
    @^a â
    @'e é
    @=o ō
    @`i ì
    @'{e} é
    @'{@dotless{i}} í 
    @dotless{i} i
    @dotless{j} j
    @`{@=E} Ē` 
    @l{} ł
    @,{@'C} Ć,
    @,c ç
    @,c@"u çü 
    
    
    @* 
    
    @ followed by a space
     
    @ followed by a tab
     
    @ followed by a new line
     @- 
    @| 
    @: 
    @! !
    @? ?
    @. .
    @@ @
    @} }
    @{ {
    @/ 
    
    foo vs. bar. 
    colon :And something else.
    semi colon ;.
    And ? ?.
    Now ! !@
    but , ,
    
    @TeX TeX
    @LaTeX LaTeX
    @bullet •
    @copyright ©
    @dots …
    @enddots ...
    @equiv ≡
    @error error-->
    @expansion →
    @minus -
    @point ∗
    @print -|
    @result ⇒
    @today a sunny day
    @aa å
    @AA Å
    @ae æ
    @oe œ
    @AE Æ
    @OE Œ
    @o ø
    @O Ø
    @ss ß
    @l ł
    @L Ł
    @exclamdown ¡
    @questiondown ¿
    @pounds £
    @registeredsymbol ®
    @ordf ª
    @ordm º
    @comma ,
    @quotedblleft “
    @quotedblright ”
    @quoteleft ‘
    @quoteright ’
    @quotedblbase „
    @quotesinglbase ‚
    @guillemetleft «
    @guillemetright »
    @guillemotleft «
    @guillemotright »
    @guilsinglleft ‹
    @guilsinglright ›
    @textdegree °
    @euro €
    @arrow →
    @leq ≤
    @geq ≥
    
    @acronym{--a,an accronym} --a (an accronym)
    @acronym{--a} --a
    @abbr{@'E--. @comma{}A., @'Etude Autonome } É--. ,A. (Étude Autonome)
    @abbr{@'E--. @comma{}A.} É--. ,A.
    @asis{--a} --a
    @b{--a} --a
    @cite{--a} --a
    @code{--a} --a
    @command{--a} --a
    @ctrl{--a} --a
    @dfn{--a} --a
    @dmn{--a} --a
    @email{--a,--b} --b
    @email{,--b} --b
    @email{--a} --a
    @emph{--a} --a
    @env{--a} --a
    @file{--a}--a@i{--a} --a
    @kbd{--a} --a
    @key{--a} <--a>
    @math{--a {\frac{1}{2}} @minus{}} --a \frac12 -
    @option{--a}--a@r{--a} --a
    @samp{--a}--a@sc{--a} --A
    @strong{--a} --a
    @t{--a} --a
    @sansserif{--a} --a
    @titlefont{--a} --a
    @indicateurl{--a} <--a>
    @uref{--a,--b} --b
    @uref{--a} --a
    @uref{,--b} --b
    @uref{--a,--b,--c} --c
    @uref{,--b,--c} --c
    @uref{--a,,--c} --c
    @uref{,,--c} --c
    @url{--a,--b} --b
    @url{--a,} --a
    @url{,--b} --b
    @var{--a} --a
    @verb{:--a:} --a
    @verb{:a  < & @ % " --    b:} a  < & @ % " --    b
    @w{} 
    @H{a} a''
    @H{--a} --a''
    @dotaccent{a} ȧ
    @dotaccent{--a} --a.
    @ringaccent{a} å
    @ringaccent{--a} --a*
    @tieaccent{a} a[
    @tieaccent{--a} --a[
    @u{a} ă
    @u{--a} --a(
    @ubaraccent{a} a_
    @ubaraccent{--a} --a_
    @udotaccent{a}@udotaccent{--a} .--a
    @v{a} a<
    @v{--a} --a<
    @,{c} ç
    @,{--c} --c,
    @ogonek{a} ą
    @ogonek{--a} --a;
    @footnote{in footnote} (3)
    @footnote{in footnote2} (4)
    
    @image{f--ile} [ f--ile ]
    @image{f--ile,l--i} [ f--ile ]
    @image{f--ile,,l--e} [ f--ile ]
    @image{f--ile,,,alt} [ alt ]
    @image{f--ile,,,,e-d-xt} [ f--ile ]
    @image{f--ile,aze,az,alt,e--xt} [ alt ]
    @image{f-ile,aze,,a--lt} [ a–lt ]
    @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} [ alt ]
    
    
    
    
    @clicksequence{click @click{} A} click → A
    After clickstyle ⇒
    @clicksequence{click @click{} A} click ⇒ A
    
    
    A quot---ation
    
    Note: A Note
    
    note: A note
    
    Caution: Caution
    
    Important: Important
    
    Tip: a Tip
    
    Warning: a Warning.
    
    something é TeX: The something é TeX is here.
    
    @ at the end of line  A @ at the end of the @quotation line.
    
    something, other thing: something, other thing
    
    Note, the note: Note, the note
    
    Empty: 
    : 
    
    : 
    A small quot---ation
    
    Note: A small Note
    
    something, other thing: something, other thing
    
    •  i--temize
      
    •  +  i--tem +
      
    •  b--ullet
      
    • -
       minu--s
      
    •  e--mph item
      
    •  after emph  e--mph item
      
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    
    lone mu--ltitable item
    truc
    bidule
     
    e--xample  some
       text
    
     
    s--mallexample
    
     
    d--isplay
    
     
    s--malldisplay
    
     
    l--isp
    
     
    s--malllisp
    
     
    f--ormat
    
     
    s--mallformat
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    cate--gory: de--ffn_name ar--guments more args even more so
    def--fn
    
     
    
    fset: i a g
    cmde: truc
    Command: log trap
    Command: log trap1
    Command: log trap2
    cmde: id ule truc
    cmde2: id ‘i’ ule truc
    id ‘i’ ule:
    :
    aaa:
    :
    :
    : machin
    : bidule machin
    truc: machin
    truc:
    truc: followed by a comment
    truc:
    :
    truc: a b c d e f g h i
    truc: deffnx before end deffn
    empty: deffn
    empty: deffn with deffnx
    empty: deffnx
    fset: i a g
    cmde: truc
    text in def item for second def item
    
    c--ategory: d--efvr_name
    d--efvr
    
    c--ategory: t--ype d--eftypefn_name a--rguments...
    d--eftypefn
    
    c--ategory de c--lass: t--ype d--eftypeop_name a--rguments...
    d--eftypeop
    
    c--ategory: t--ype d--eftypevr_name
    d--eftypevr
    
    c--ategory de c--lass: d--efcv_name
    d--efcv
    
    c--ategory de c--lass: d--efop_name a--rguments...
    d--efop
    
    c--ategory: d--eftp_name a--ttributes...
    d--eftp
    
    Function: d--efun_name a--rguments...
    d--efun
    
    Macro: d--efmac_name a--rguments...
    d--efmac
    
    Special Form: d--efspec_name a--rguments...
    d--efspec
    
    Variable: d--efvar_name argvar argvar1
    d--efvar
    
    User Option: d--efopt_name
    d--efopt
    
    Function: t--ype d--eftypefun_name a--rguments...
    d--eftypefun
    
    Variable: t--ype d--eftypevar_name
    d--eftypevar
    
    Instance Variable de c--lass: d--efivar_name
    d--efivar
    
    Instance Variable de c--lass: t--ype d--eftypeivar_name
    d--eftypeivar
    
    Method de c--lass: d--efmethod_name a--rguments...
    d--efmethod
    
    Method de c--lass: t--ype d--eftypemethod_name a--rguments...
    d--eftypemethod
    
    @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} Voir cross r---ef name@: (file n---ame@)c---hapter@ section `t---itle@' dans ma---nual@.
    @ref{chapter, cross ref name, title, file name, manual} cross ref name: (file name)chapter section `title' dans manual
    @pxref{chapter, cross ref name, title, file name, manual} voir cross ref name: (file name)chapter section `title' dans manual
    @inforef{chapter, cross ref name, file name} Voir cross ref name: (file name)chapter
    
    @ref{chapter} chapter
    @xref{chapter} Voir la section chapter.
    @pxref{chapter} voir la section chapter
    @ref{s--ect@comma{}ion} A section
    
    @ref{s--ect@comma{}ion, a @comma{} in cross
    ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name }
    a , in cross ref: (a comma, in file)s--ect,ion section `a comma, in title' dans a , in manual name
    
    @ref{chapter,cross ref name} cross ref name
    @ref{chapter,,title} title
    @ref{chapter,,,file name} (file name)chapter
    @ref{chapter,,,,manual} section `chapter' dans manual
    @ref{chapter,cross ref name,title,} title
    @ref{chapter,cross ref name,,file name} cross ref name: (file name)chapter
    @ref{chapter,cross ref name,,,manual} section `chapter' dans manual
    @ref{chapter,cross ref name,title,file name} cross ref name: (file name)chapter
    @ref{chapter,cross ref name,title,,manual} section `title' dans manual
    @ref{chapter,cross ref name,title, file name, manual} cross ref name: (file name)chapter section `title' dans manual
    @ref{chapter,,title,file name} (file name)chapter
    @ref{chapter,,title,,manual} section `title' dans manual
    @ref{chapter,,title, file name, manual} (file name)chapter section `title' dans manual
    @ref{chapter,,,file name,manual} (file name)chapter section `chapter' dans manual
    
    
    @ref{(pman)anode,cross ref name} cross ref name: (pman)anode
    @ref{(pman)anode,,title} (pman)anode
    @ref{(pman)anode,,,file name} (file name)anode
    @ref{(pman)anode,,,,manual} (pman)anode section `anode' dans manual
    @ref{(pman)anode,cross ref name,title,} cross ref name: (pman)anode
    @ref{(pman)anode,cross ref name,,file name} cross ref name: (file name)anode
    @ref{(pman)anode,cross ref name,,,manual} cross ref name: (pman)anode section `anode' dans manual
    @ref{(pman)anode,cross ref name,title,file name} cross ref name: (file name)anode
    @ref{(pman)anode,cross ref name,title,,manual} cross ref name: (pman)anode section `title' dans manual
    @ref{(pman)anode,cross ref name,title, file name, manual} cross ref name: (file name)anode section `title' dans manual
    @ref{(pman)anode,,title,file name} (file name)anode
    @ref{(pman)anode,,title,,manual} (pman)anode section `title' dans manual
    @ref{(pman)anode,,title, file name, manual} (file name)anode section `title' dans manual
    @ref{(pman)anode,,,file name,manual} (file name)anode section `anode' dans manual
    
    
    @inforef{chapter, cross ref name, file name} Voir cross ref name: (file name)chapter
    @inforef{chapter} 
    @inforef{chapter, cross ref name} 
    @inforef{chapter,,file name} Voir (file name)chapter
    @inforef{node, cross ref name, file name} Voir cross ref name: (file name)node
    @inforef{node} 
    @inforef{node, cross ref name} 
    @inforef{node,,file name} Voir (file name)node
    @inforef{chapter, cross ref name, file name, spurious arg} Voir cross ref name: (file name, spurious arg)chapter
    
    @inforef{s--ect@comma{}ion, a @comma{} in cross
    ref, a comma@comma{} in file}
    Voir a , in cross ref: (a comma, in file)s--ect,ion
    
    
    
    • a
    l--ine
    
    a
    b
    l--ine
    
    - a
    - b
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    \input texinfo @c -*-texinfo-*-
    
    @setfilename simplest.info
    
    @node Top
    
    This is a very simple texi manual @  <>.
    
    @bye
    
    in verbatim ''
    
    
    html ''
    
    
    
    majorheading
    
    
    chapheading
    
    
    heading
    
    
    subheading
    
    
    subsubheading
    
    
    @acronym{--a,an accronym @comma{} @enddots{}} --a (an accronym , ...)
    @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } É--. ,A. (Étude--, Autonome)
    @abbr{@'E--. @comma{}A.} É--. ,A.
    
    @math{--a@minus{} {\frac{1}{2}}} --a- \frac12
    
    @image{f-ile,,,alt@verb{:jk _" %}} [ altjk _" %@ ]
    @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} [ jk _" %@ in b " ]
    @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} [ altjk _" %@ ]
    
    
    
    
    Somehow invalid use of @,:
    
    @, ,
    
    
    @,@"u @,"u
    
    Invalid use of @':
    
    @' '
    
    
    @'@"u @'"u
    
    @dotless{truc} truc
    @dotless{ij} ij
    @dotless{--a} --a
    @dotless{a} a
    
    @TeX, but without brace TeX
    
    @# @#
    
    @w{--a} --a
    
    @image{,1--xt} 
    @image{,,2--xt} 
    @image{,,,3--xt} 
    
    
    
    
    • after emph  e--mph item
      
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    fun:
    truc: machin bidule chose and
    truc: machin bidule chose and after
    truc: machin bidule chose and {
    truc: machin bidule chose and { and after
    truc: followed by a comment
    Various deff lines
    
    truc: after a deff item
    @ref{node} @ref{node}
    
    @ref{,cross ref name} @ref{,cross ref name}
    @ref{,,title} @ref{,,title}
    @ref{,,,file name} (file name)
    @ref{,,,,manual} manual
    @ref{node,cross ref name} @ref{node,cross ref name}
    @ref{node,,title} @ref{node,,title}
    @ref{node,,,file name} (file name)node
    @ref{node,,,,manual} section `node' dans manual
    @ref{node,cross ref name,title,} @ref{node,cross ref name,title,}
    @ref{node,cross ref name,,file name} cross ref name: (file name)node
    @ref{node,cross ref name,,,manual} section `node' dans manual
    @ref{node,cross ref name,title,file name} cross ref name: (file name)node
    @ref{node,cross ref name,title,,manual} section `title' dans manual
    @ref{node,cross ref name,title, file name, manual} cross ref name: (file name)node section `title' dans manual
    @ref{node,,title,file name} (file name)node
    @ref{node,,title,,manual} section `title' dans manual
    @ref{chapter,,title, file name, manual} (file name)chapter section `title' dans manual
    @ref{node,,title, file name, manual} (file name)node section `title' dans manual
    @ref{node,,,file name,manual} (file name)node section `node' dans manual
    @ref{,cross ref name,title,} @ref{,cross ref name,title,}
    @ref{,cross ref name,,file name} cross ref name: (file name)
    @ref{,cross ref name,,,manual} manual
    @ref{,cross ref name,title,file name} cross ref name: (file name)
    @ref{,cross ref name,title,,manual} section `title' dans manual
    @ref{,cross ref name,title, file name, manual} cross ref name: (file name) section `title' dans manual
    @ref{,,title,file name} (file name)
    @ref{,,title,,manual} section `title' dans manual
    @ref{,,title, file name, manual} (file name) section `title' dans manual
    @ref{,,,file name,manual} (file name) manual
    
    @inforef{,cross ref name } 
    @inforef{,,file name} 
    @inforef{,cross ref name, file name} 
    @inforef{} 
    
    
    

    cp

    Aller à:   "   -   .   ?  
    A   I   T  
    Entrée d’index Section

    "
    Top section
    Top section
    subsubheading
    subsubheading

    -
    –optionTop section
    –optionTop section
    –optionsubsubheading
    –optionsubsubheading

    .
    .subsubheading

    ?
    ?subsubheading

    A
    asubsubheading

    I
    index entry between item and itemxTop section
    index entry between item and itemxTop section
    index entry between item and itemxsubsubheading
    index entry between item and itemxsubsubheading
    index entry within deffnTop section
    index entry within deffnTop section
    index entry within deffnsubsubheading
    index entry within deffnsubsubheading
    index entry within itemizeTop section
    index entry within itemizeTop section
    index entry within itemizesubsubheading
    index entry within itemizesubsubheading
    index entry within multitableTop section
    index entry within multitableTop section
    index entry within multitablesubsubheading
    index entry within multitablesubsubheading

    T
    t–rucsubsubheading
    T–rucsubsubheading

    Aller à:   "   -   .   ?  
    A   I   T  

    fn

    Aller à:   "   -   .   ?  
    A   B   D   F   I   L   M   T  
    Entrée d’index Section

    "
    ``Top section
    ``Top section
    ``subsubheading
    ``subsubheading

    -
    --foptionTop section
    --foptionTop section
    --foptionsubsubheading
    --foptionsubsubheading

    .
    .subsubheading

    ?
    ?subsubheading

    A
    aTop section
    aTop section
    aTop section
    aTop section
    asubsubheading
    asubsubheading
    asubsubheading
    asubsubheading
    asubsubheading
    afterTop section
    afterTop section
    aftersubsubheading
    aftersubsubheading

    B
    bTop section
    bTop section
    bsubsubheading
    bsubsubheading
    bidule machinTop section
    bidule machinTop section
    bidule machinsubsubheading
    bidule machinsubsubheading

    D
    d--effn_nameTop section
    d--effn_nameTop section
    d--effn_namesubsubheading
    d--effn_namesubsubheading
    d--efmac_nameTop section
    d--efmac_nameTop section
    d--efmac_namesubsubheading
    d--efmac_namesubsubheading
    d--efmethod_name de c--lassTop section
    d--efmethod_name de c--lassTop section
    d--efmethod_name de c--lasssubsubheading
    d--efmethod_name de c--lasssubsubheading
    d--efop_name de c--lassTop section
    d--efop_name de c--lassTop section
    d--efop_name de c--lasssubsubheading
    d--efop_name de c--lasssubsubheading
    d--efspec_nameTop section
    d--efspec_nameTop section
    d--efspec_namesubsubheading
    d--efspec_namesubsubheading
    d--eftypefn_nameTop section
    d--eftypefn_nameTop section
    d--eftypefn_namesubsubheading
    d--eftypefn_namesubsubheading
    d--eftypefun_nameTop section
    d--eftypefun_nameTop section
    d--eftypefun_namesubsubheading
    d--eftypefun_namesubsubheading
    d--eftypemethod_name de c--lassTop section
    d--eftypemethod_name de c--lassTop section
    d--eftypemethod_name de c--lasssubsubheading
    d--eftypemethod_name de c--lasssubsubheading
    d--eftypeop_name de c--lassTop section
    d--eftypeop_name de c--lassTop section
    d--eftypeop_name de c--lasssubsubheading
    d--eftypeop_name de c--lasssubsubheading
    d--efun_nameTop section
    d--efun_nameTop section
    d--efun_namesubsubheading
    d--efun_namesubsubheading
    de--ffn_nameTop section
    de--ffn_nameTop section
    de--ffn_namesubsubheading
    de--ffn_namesubsubheading
    deffnTop section
    deffnTop section
    deffnTop section
    deffnTop section
    deffnsubsubheading
    deffnsubsubheading
    deffnsubsubheading
    deffnsubsubheading
    deffnxTop section
    deffnxTop section
    deffnxTop section
    deffnxTop section
    deffnxsubsubheading
    deffnxsubsubheading
    deffnxsubsubheading
    deffnxsubsubheading

    F
    followedTop section
    followedTop section
    followedTop section
    followedTop section
    followedsubsubheading
    followedsubsubheading
    followedsubsubheading
    followedsubsubheading

    I
    iTop section
    iTop section
    iTop section
    iTop section
    isubsubheading
    isubsubheading
    isubsubheading
    isubsubheading
    id ‘i’ uleTop section
    id ‘i’ uleTop section
    id ‘i’ ulesubsubheading
    id ‘i’ ulesubsubheading
    id uleTop section
    id uleTop section
    id ulesubsubheading
    id ulesubsubheading

    L
    log trapTop section
    log trapTop section
    log trapsubsubheading
    log trapsubsubheading
    log trap1Top section
    log trap1Top section
    log trap1subsubheading
    log trap1subsubheading
    log trap2Top section
    log trap2Top section
    log trap2subsubheading
    log trap2subsubheading

    M
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading

    T
    t--rucsubsubheading
    T--rucsubsubheading
    trucTop section
    trucTop section
    trucTop section
    trucTop section
    trucsubsubheading
    trucsubsubheading
    trucsubsubheading
    trucsubsubheading

    Aller à:   "   -   .   ?  
    A   B   D   F   I   L   M   T  

    vr

    Aller à:   A   B   D  
    Entrée d’index Section

    A
    aTop section
    aTop section
    asubsubheading
    asubsubheading

    B
    bTop section
    bTop section
    bsubsubheading
    bsubsubheading

    D
    d--efcv_nameTop section
    d--efcv_nameTop section
    d--efcv_namesubsubheading
    d--efcv_namesubsubheading
    d--efivar_nameTop section
    d--efivar_nameTop section
    d--efivar_namesubsubheading
    d--efivar_namesubsubheading
    d--efopt_nameTop section
    d--efopt_nameTop section
    d--efopt_namesubsubheading
    d--efopt_namesubsubheading
    d--eftypeivar_name de c--lassTop section
    d--eftypeivar_name de c--lassTop section
    d--eftypeivar_name de c--lasssubsubheading
    d--eftypeivar_name de c--lasssubsubheading
    d--eftypevar_nameTop section
    d--eftypevar_nameTop section
    d--eftypevar_namesubsubheading
    d--eftypevar_namesubsubheading
    d--eftypevr_nameTop section
    d--eftypevr_nameTop section
    d--eftypevr_namesubsubheading
    d--eftypevr_namesubsubheading
    d--efvar_nameTop section
    d--efvar_nameTop section
    d--efvar_namesubsubheading
    d--efvar_namesubsubheading
    d--efvr_nameTop section
    d--efvr_nameTop section
    d--efvr_namesubsubheading
    d--efvr_namesubsubheading

    Aller à:   A   B   D  

    ky

    pg

    tp

    Aller à:   D  
    Entrée d’index Section

    D
    d--eftp_nameTop section
    d--eftp_nameTop section
    d--eftp_namesubsubheading
    d--eftp_namesubsubheading

    Aller à:   D  

    [ < ] [ > ]   [ << ] [Plus haut] [ >> ]         [Racine] [Table des matières] [Index] [ ? ]

    1. chapter

    (5)

     

    [ < ] [ > ]   [ << ] [Plus haut] [ >> ]         [Racine] [Table des matières] [Index] [ ? ]

    1.1 A section


    [ < ] [ > ]   [ << ] [Plus haut] [ >> ]         [Racine] [Table des matières] [Index] [ ? ]

    1.1.1 subsection


    [ < ] [ > ]   [ << ] [Plus haut] [ >> ]         [Racine] [Table des matières] [Index] [ ? ]

    1.1.1.1 subsubsection “simple-double–three—four—-”


    [ < ] [ > ]   [ << ] [Plus haut] [ >> ]         [Racine] [Table des matières] [Index] [ ? ]

    2. chapter 2

    Aller à:   "   -   .   ?  
    A   I   T  
    Entrée d’index Section

    "
    Top section
    Top section
    subsubheading
    subsubheading

    -
    –optionTop section
    –optionTop section
    –optionsubsubheading
    –optionsubsubheading

    .
    .subsubheading

    ?
    ?subsubheading

    A
    asubsubheading

    I
    index entry between item and itemxTop section
    index entry between item and itemxTop section
    index entry between item and itemxsubsubheading
    index entry between item and itemxsubsubheading
    index entry within deffnTop section
    index entry within deffnTop section
    index entry within deffnsubsubheading
    index entry within deffnsubsubheading
    index entry within itemizeTop section
    index entry within itemizeTop section
    index entry within itemizesubsubheading
    index entry within itemizesubsubheading
    index entry within multitableTop section
    index entry within multitableTop section
    index entry within multitablesubsubheading
    index entry within multitablesubsubheading

    T
    t–rucsubsubheading
    T–rucsubsubheading

    Aller à:   "   -   .   ?  
    A   I   T  
    Aller à:   "   -   .   ?  
    A   B   D   F   I   L   M   T  
    Entrée d’index Section

    "
    ``Top section
    ``Top section
    ``subsubheading
    ``subsubheading

    -
    --foptionTop section
    --foptionTop section
    --foptionsubsubheading
    --foptionsubsubheading

    .
    .subsubheading

    ?
    ?subsubheading

    A
    aTop section
    aTop section
    aTop section
    aTop section
    asubsubheading
    asubsubheading
    asubsubheading
    asubsubheading
    asubsubheading
    afterTop section
    afterTop section
    aftersubsubheading
    aftersubsubheading

    B
    bTop section
    bTop section
    bsubsubheading
    bsubsubheading
    bidule machinTop section
    bidule machinTop section
    bidule machinsubsubheading
    bidule machinsubsubheading

    D
    d--effn_nameTop section
    d--effn_nameTop section
    d--effn_namesubsubheading
    d--effn_namesubsubheading
    d--efmac_nameTop section
    d--efmac_nameTop section
    d--efmac_namesubsubheading
    d--efmac_namesubsubheading
    d--efmethod_name de c--lassTop section
    d--efmethod_name de c--lassTop section
    d--efmethod_name de c--lasssubsubheading
    d--efmethod_name de c--lasssubsubheading
    d--efop_name de c--lassTop section
    d--efop_name de c--lassTop section
    d--efop_name de c--lasssubsubheading
    d--efop_name de c--lasssubsubheading
    d--efspec_nameTop section
    d--efspec_nameTop section
    d--efspec_namesubsubheading
    d--efspec_namesubsubheading
    d--eftypefn_nameTop section
    d--eftypefn_nameTop section
    d--eftypefn_namesubsubheading
    d--eftypefn_namesubsubheading
    d--eftypefun_nameTop section
    d--eftypefun_nameTop section
    d--eftypefun_namesubsubheading
    d--eftypefun_namesubsubheading
    d--eftypemethod_name de c--lassTop section
    d--eftypemethod_name de c--lassTop section
    d--eftypemethod_name de c--lasssubsubheading
    d--eftypemethod_name de c--lasssubsubheading
    d--eftypeop_name de c--lassTop section
    d--eftypeop_name de c--lassTop section
    d--eftypeop_name de c--lasssubsubheading
    d--eftypeop_name de c--lasssubsubheading
    d--efun_nameTop section
    d--efun_nameTop section
    d--efun_namesubsubheading
    d--efun_namesubsubheading
    de--ffn_nameTop section
    de--ffn_nameTop section
    de--ffn_namesubsubheading
    de--ffn_namesubsubheading
    deffnTop section
    deffnTop section
    deffnTop section
    deffnTop section
    deffnsubsubheading
    deffnsubsubheading
    deffnsubsubheading
    deffnsubsubheading
    deffnxTop section
    deffnxTop section
    deffnxTop section
    deffnxTop section
    deffnxsubsubheading
    deffnxsubsubheading
    deffnxsubsubheading
    deffnxsubsubheading

    F
    followedTop section
    followedTop section
    followedTop section
    followedTop section
    followedsubsubheading
    followedsubsubheading
    followedsubsubheading
    followedsubsubheading

    I
    iTop section
    iTop section
    iTop section
    iTop section
    isubsubheading
    isubsubheading
    isubsubheading
    isubsubheading
    id ‘i’ uleTop section
    id ‘i’ uleTop section
    id ‘i’ ulesubsubheading
    id ‘i’ ulesubsubheading
    id uleTop section
    id uleTop section
    id ulesubsubheading
    id ulesubsubheading

    L
    log trapTop section
    log trapTop section
    log trapsubsubheading
    log trapsubsubheading
    log trap1Top section
    log trap1Top section
    log trap1subsubheading
    log trap1subsubheading
    log trap2Top section
    log trap2Top section
    log trap2subsubheading
    log trap2subsubheading

    M
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading

    T
    t--rucsubsubheading
    T--rucsubsubheading
    trucTop section
    trucTop section
    trucTop section
    trucTop section
    trucsubsubheading
    trucsubsubheading
    trucsubsubheading
    trucsubsubheading

    Aller à:   "   -   .   ?  
    A   B   D   F   I   L   M   T  

    [Racine] [Table des matières] [Index] [ ? ]

    Notes de bas de page

    (1)

    in footnote

    (2)

    in footnote2

    (1)

    in footnote

    (2)

    in footnote2

    (3)

    in footnote

    (4)

    in footnote2

    (5)

    in footnote


    [Racine] [Table des matières] [Index] [ ? ]

    Table des matières


    [Racine] [Table des matières] [Index] [ ? ]

    Résumé du contenu


    [Racine] [Table des matières] [Index] [ ? ]

    A propos de ce document

    Ce document a été généré le a sunny day par a tester en utilisant texi2html.

    Les boutons de navigation ont la signification suivante :

    Bouton Nom Aller à Depuis 1.2.3 aller à
    [ < ] Retour Section précédente dans l’ordre de lecture 1.2.2
    [ > ] Avant Section suivante dans l’ordre de lecture 1.2.4
    [ << ] RetourRapide Début de ce chapitre ou chapitre précédent 1
    [Plus haut] Monter Section supérieure 1.2
    [ >> ] AvanceRapide Chapitre suivant 2
    [Racine] Racine Couverture (top) du document  
    [Table des matières] Table des matières Table des matières  
    [Index] Index Index  
    [ ? ] A propos A propos (page d’aide)  

    Dans cet exemple on est à Sous sous section un-deux-trois dans un document dont la structure est :

    • 1. Section un
      • 1.1 Sous section un-un
        • ...
      • 1.2 Sous section un-deux
        • 1.2.1 Sous sous section un-deux-un
        • 1.2.2 Sous sous section un-deux-deux
        • 1.2.3 Sous sous section un-deux-trois     <== Position
        • 1.2.4 Sous sous section un-deux-quatre
      • 1.3 Sous section un-trois
        • ...
      • 1.4 Sous section un-quatre

    Ce document a été généré le a sunny day par a tester en utilisant texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8/0000755000175000017500000000000011264347116023551 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/nodetest_utf8/nodetest_utf8.html0000644000175000017500000037756511264347116027261 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Top


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Umlaut


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 ä

    ref to ç ç.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2 ë


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.3 ï

    before footnote See footanchor.

    (1)

    after footnote See footanchor.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4 ö

    Ref to an anchor at the end of the doc (see there is an o-é could there be an î).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.5 ü

    Another ref to an anchor (see x-spot).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.6 ÿ

    This is a ref to a node (see section à).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.7 Ä

    Now a ref to a node without sectionning command, no text (see no section). With text (see but a text).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.8 Ë


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.9 Ï


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.10 Ö


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.11 Ü


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.12 ß

    This is a node without sectioning command.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. acute accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.1 á

    With brace á. Testing ’ " ‘ ^.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2 é


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3 í


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4 ó


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.5 ú


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.6 ý


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.7 Á


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.8 É


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.9 Í


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.10 Ó


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.11 Ú


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.12 Ý

    This is a ref to ü (see section ü). Another one, with node only (see section ü).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. grave accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.1 à


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.2 è


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.3 ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.4 ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.5 ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.6 ò


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.7 ù


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.8 À


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.9 È


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.10 Ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.11 Ò


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.12 Ù


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4. circumflex accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.1 â


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.2 ê


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3 î


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.4 ô


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.5 û


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.6 Â


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.7 Ê


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.8 Î


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.9 Ô


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.10 Û


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5. tilde accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.1 ã


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.2 ñ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.3 õ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.4 Ã


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.5 Õ

    This marks the spot. A second one with accented char .


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6. cedilla accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.1 ç


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.2 Ç


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7. rest


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.1 å


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.2 æ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.3 œ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.4 Å


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.5 Æ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.6 Œ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.7 ł


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.8 ø


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.9 Ł


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.10 Ø


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.11 a''


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.12 ă


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.13 a<


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.14 ạ

    Test udotaccent.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.15 ȧ

    Test dotaccent.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.16 å


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.17 a[


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.18 a_


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.19 i


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.20 j

    ...

    ¡

    ¿

    £

    @- : @ followed by end of line:   @ followed by tab:   @ followed by space   @*:
    and text followin @*.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.21 ,

    An index entry with accented letter.

    Jump to:   I  
    Index Entry Section

    I
    index entry with accented letter: à à7.21 ,
    index entry with accented letter: â à7.21 ,

    Jump to:   I  

    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_utf8/nodetest_utf8.20000644000175000017500000000010011264347116026416 0ustar flichtenheldflichtenheld*** Node equivalent with `@aa{}' already used `@ringaccent{a}' texi2html-1.82/test/encodings/res/texi_weird_accents/0000755000175000017500000000000011264347116024621 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/texi_weird_accents/weird_accents.texi0000644000175000017500000000036411264347116030331 0ustar flichtenheldflichtenheld\input texinfo @setfilename accentenc.info @settitle Complex accent encoding test @documentencoding ISO-8859-1 @node Top @top Complex accent encoding test top @={@~{@dotless{i}}} @={@,{@~{n}}} @={@ubaraccent{a}} @={@code{@'{@`{r}}}} @bye texi2html-1.82/test/encodings/res/texi_weird_accents/weird_accents.20000644000175000017500000000000011264347116027504 0ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/texi_weird_accents/weird_accents.passfirst0000644000175000017500000000113511264347116031373 0ustar flichtenheldflichtenheldweird_accents.texi(,2) @setfilename accentenc.info weird_accents.texi(,3) @settitle Complex accent encoding test weird_accents.texi(,4) @documentencoding ISO-8859-1 weird_accents.texi(,5) weird_accents.texi(,6) @node Top weird_accents.texi(,7) @top Complex accent encoding test top weird_accents.texi(,8) weird_accents.texi(,9) @={@~{@dotless{i}}} weird_accents.texi(,10) weird_accents.texi(,11) @={@,{@~{n}}} weird_accents.texi(,12) weird_accents.texi(,13) @={@ubaraccent{a}} weird_accents.texi(,14) weird_accents.texi(,15) @={@code{@'{@`{r}}}} weird_accents.texi(,16) weird_accents.texi(,17) @bye texi2html-1.82/test/encodings/res/texi_weird_accents/weird_accents.passtexi0000644000175000017500000000113511264347116031215 0ustar flichtenheldflichtenheldweird_accents.texi(,2) @setfilename accentenc.info weird_accents.texi(,3) @settitle Complex accent encoding test weird_accents.texi(,4) @documentencoding ISO-8859-1 weird_accents.texi(,5) weird_accents.texi(,6) @node Top weird_accents.texi(,7) @top Complex accent encoding test top weird_accents.texi(,8) weird_accents.texi(,9) @={@~{@dotless{i}}} weird_accents.texi(,10) weird_accents.texi(,11) @={@,{@~{n}}} weird_accents.texi(,12) weird_accents.texi(,13) @={@ubaraccent{a}} weird_accents.texi(,14) weird_accents.texi(,15) @={@code{@'{@`{r}}}} weird_accents.texi(,16) weird_accents.texi(,17) @bye texi2html-1.82/test/encodings/res/at_commands_in_refs_no_unidecode/0000755000175000017500000000000011264347117027464 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/at_commands_in_refs_no_unidecode/at_commands_in_refs.html0000644000175000017500000001527511264347117034356 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Top


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. A SC node ï ï Ē` ł Ć, ¡

    see (manual)a strong ref with SC, a i trema ï, a dotless i trema ï Ē` and exclamdown ¡.


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/at_commands_in_refs_no_unidecode/at_commands_in_refs.20000644000175000017500000000000011264347117033527 0ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/formatting_converted_to_utf8/0000755000175000017500000000000011264347117026652 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/formatting_converted_to_utf8/formatting.20000644000175000017500000002243411264347117031114 0ustar flichtenheldflichtenheld** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} (l. 38 in @mymacro) ** Unknown command `@#' (left as is) (l. 38 in @mymacro) *** no file argument for @image (l. 38 in @mymacro) *** no file argument for @image (l. 38 in @mymacro) *** no file argument for @image (l. 38 in @mymacro) *** '}' without opening '{' before: (l. 38 in @mymacro) *** '}' without opening '{' before: (l. 38 in @mymacro) *** '{' without macro. Before: (l. 38 in @mymacro) *** '{' without macro. Before: and after (l. 38 in @mymacro) *** Undefined node `node' in @ref (l. 38 in @mymacro) *** Undefined node `' in @ref (l. 38 in @mymacro) *** Undefined node `' in @ref (l. 38 in @mymacro) *** Undefined node `node' in @ref (l. 38 in @mymacro) *** Undefined node `node' in @ref (l. 38 in @mymacro) *** Undefined node `node' in @ref (l. 38 in @mymacro) *** Undefined node `' in @ref (l. 38 in @mymacro) *** First argument to @inforef may not be empty (l. 38 in @mymacro) *** First argument to @inforef may not be empty (l. 38 in @mymacro) *** First argument to @inforef may not be empty (l. 38 in @mymacro) *** First argument to @inforef may not be empty (l. 38 in @mymacro) ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} (l. 42 in @mymacro) ** Unknown command `@#' (left as is) (l. 42 in @mymacro) *** no file argument for @image (l. 42 in @mymacro) *** no file argument for @image (l. 42 in @mymacro) *** no file argument for @image (l. 42 in @mymacro) *** '}' without opening '{' before: (l. 42 in @mymacro) *** '}' without opening '{' before: (l. 42 in @mymacro) *** '{' without macro. Before: (l. 42 in @mymacro) *** '{' without macro. Before: and after (l. 42 in @mymacro) *** Undefined node `node' in @ref (l. 42 in @mymacro) *** Undefined node `' in @ref (l. 42 in @mymacro) *** Undefined node `' in @ref (l. 42 in @mymacro) *** Undefined node `node' in @ref (l. 42 in @mymacro) *** Undefined node `node' in @ref (l. 42 in @mymacro) *** Undefined node `node' in @ref (l. 42 in @mymacro) *** Undefined node `' in @ref (l. 42 in @mymacro) *** First argument to @inforef may not be empty (l. 42 in @mymacro) *** First argument to @inforef may not be empty (l. 42 in @mymacro) *** First argument to @inforef may not be empty (l. 42 in @mymacro) *** First argument to @inforef may not be empty (l. 42 in @mymacro) texi2html-1.82/test/encodings/res/formatting_converted_to_utf8/formatting.html0000644000175000017500000054231011264347117031717 0ustar flichtenheldflichtenheld title –a
    [Top] [Contents] [Index] [ ? ]

    Insertcopying in normal text

    In copying

    < > " & ' `

    “simple-double–three—four—-”
    code: ``simple-double--three---four----''
    asis: “simple-double–three—four—-”
    strong: “simple-double–three—four—-”
    kbd: ``simple-double--three---four----''

    ``simple-double--three—four—-''

    @"u ü @"{U} Ü @~n ñ @^a â @'e é @=o ō @`i ì @'{e} é @'{@dotless{i}} í @dotless{i} ı @dotless{j} j @`{@=E} Ḕ @l{} ł @,{@'C} Ḉ @,c ç @,c@"u çü

    @*
    @ followed by a space   @ followed by a tab   @ followed by a new line  @- @| @: @! ! @? ? @. . @@ @ @} } @{ { @/

    foo vs. bar. colon :And something else. semi colon ;. And ? ?. Now ! !@ but , ,

    @TeX TeX @LaTeX LaTeX @bullet • @copyright © @dots … @enddots ... @equiv ≡ @error error--> @expansion → @minus − @point ★ @print ⊣ @result ⇒ @today a sunny day @aa å @AA Å @ae æ @oe œ @AE Æ @OE Œ @o ø @O Ø @ss ß @l ł @L Ł @exclamdown ¡ @questiondown ¿ @pounds £ @registeredsymbol ® @ordf ª @ordm º @comma , @quotedblleft “ @quotedblright ” @quoteleft ‘ @quoteright ’ @quotedblbase „ @quotesinglbase ‚ @guillemetleft « @guillemetright » @guillemotleft « @guillemotright » @guilsinglleft ‹ @guilsinglright › @textdegree ° @euro € @arrow → @leq ≤ @geq ≥

    @acronym{--a,an accronym} –a (an accronym) @acronym{--a} –a @abbr{@'E--. @comma{}A., @'Etude Autonome } É–. ,A. (Étude Autonome) @abbr{@'E--. @comma{}A.} É–. ,A. @asis{--a} –a @b{--a} –a @cite{--a} –a @code{--a} --a @command{--a} --a @ctrl{--a} –a @dfn{--a} –a @dmn{--a} –a @email{--a,--b} –b @email{,--b} –b @email{--a} --a @emph{--a} –a @env{--a} --a @file{--a} `--a' @i{--a} –a @kbd{--a} --a @key{--a} <--a> @math{--a {\frac{1}{2}} @minus{}} –a \frac12 − @option{--a} `--a' @r{--a} –a @samp{--a} `--a' @sc{--a} –A @strong{--a} –a @t{--a} –a @sansserif{--a} –a @titlefont{--a}

    –a

    @indicateurl{--a} <--a> @uref{--a,--b} –b @uref{--a} --a @uref{,--b} –b @uref{--a,--b,--c} –c @uref{,--b,--c} –c @uref{--a,,--c} –c @uref{,,--c} –c @url{--a,--b} –b @url{--a,} --a @url{,--b} –b @var{--a} –a @verb{:--a:} --a @verb{:a < & @ % " -- b:} a < & @ % " -- b @w{} @H{a}@H{--a} –a̋ @dotaccent{a} ȧ @dotaccent{--a} –ȧ @ringaccent{a} å @ringaccent{--a} –å @tieaccent{a} a[ @tieaccent{--a} –a[ @u{a} ă @u{--a} –ă @ubaraccent{a}@ubaraccent{--a} –a̲ @udotaccent{a}@udotaccent{--a} –ạ @v{a} ǎ @v{--a} –ǎ @,{c} ç @,{--c} –ç @ogonek{a} ą @ogonek{--a} –ą @footnote{in footnote} (1) @footnote{in footnote2} (2)

    @image{f--ile} f--ile @image{f--ile,l--i} f--ile @image{f--ile,,l--e} f--ile @image{f--ile,,,alt} alt @image{f--ile,,,,e-d-xt} f--ile @image{f--ile,aze,az,alt,e--xt} alt @image{f-ile,aze,,a--lt} a–lt @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} alt



    @clicksequence{click @click{} A} click → A After clickstyle ⇒ @clicksequence{click @click{} A} click ⇒ A

    A quot—ation

    Note: A Note

    note: A note

    Caution: Caution

    Important: Important

    Tip: a Tip

    Warning: a Warning.

    something é TeX: The something é TeX is here.

    @ at the end of line A @ at the end of the @quotation line.

    something, other thing: something, other thing

    Note, the note: Note, the note

    Empty:

    :


    :

    A small quot—ation

    Note: A small Note

    something, other thing: something, other thing

    • i–temize
    • + i–tem +
    • b–ullet
    • − minu–s
    • e–mph item
    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
    trucbidule
     
    e--xample  some
       text
    
     
    s--mallexample
    
     
    d–isplay
    
     
    s–malldisplay
    
     
    l--isp
    
     
    s--malllisp
    
     
    f–ormat
    
     
    s–mallformat
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    cate--gory: de--ffn_name ar--guments more args
    even more so

    def–fn

    fset: i a g
    cmde: truc
    Command: log trap
    Command: log trap1
    Command: log trap2
    cmde: id ule truc
    cmde2: id `i' ule truc
    id `i' ule:
    :
    aaa:
    :
    :
    : machin
    : bidule machin
    truc: machin
    truc:
    truc: followed by a comment
    truc:
    :
    truc: a b c d e f g h i
    truc: deffnx before end deffn
    empty: deffn
    empty: deffn with deffnx
    empty: deffnx
    fset: i a g
    cmde: truc

    text in def item for second def item

    c--ategory: d--efvr_name

    d–efvr

    c--ategory: t--ype d--eftypefn_name a--rguments...

    d–eftypefn

    c--ategory on c--lass: t--ype d--eftypeop_name a--rguments...

    d–eftypeop

    c--ategory: t--ype d--eftypevr_name

    d–eftypevr

    c--ategory of c--lass: d--efcv_name

    d–efcv

    c--ategory on c--lass: d--efop_name a--rguments...

    d–efop

    c--ategory: d--eftp_name a--ttributes...

    d–eftp

    Function: d--efun_name a--rguments...

    d–efun

    Macro: d--efmac_name a--rguments...

    d–efmac

    Special Form: d--efspec_name a--rguments...

    d–efspec

    Variable: d--efvar_name argvar argvar1

    d–efvar

    User Option: d--efopt_name

    d–efopt

    Function: t--ype d--eftypefun_name a--rguments...

    d–eftypefun

    Variable: t--ype d--eftypevar_name

    d–eftypevar

    Instance Variable of c--lass: d--efivar_name

    d–efivar

    Instance Variable of c--lass: t--ype d--eftypeivar_name

    d–eftypeivar

    Method on c--lass: d--efmethod_name a--rguments...

    d–efmethod

    Method on c--lass: t--ype d--eftypemethod_name a--rguments...

    d–eftypemethod

    @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} See cross r—ef name@: (file n—ame@)c—hapter@ section `t—itle@' in ma—nual@. @ref{chapter, cross ref name, title, file name, manual} cross ref name: (file name)chapter section `title' in manual @pxref{chapter, cross ref name, title, file name, manual} see cross ref name: (file name)chapter section `title' in manual @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter

    @ref{chapter} chapter @xref{chapter} See section chapter. @pxref{chapter} see section chapter @ref{s--ect@comma{}ion} A section

    @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } a , in cross ref: (a comma, in file)s–ect,ion section `a comma, in title' in a , in manual name

    @ref{chapter,cross ref name} cross ref name @ref{chapter,,title} title @ref{chapter,,,file name} (file name)chapter @ref{chapter,,,,manual} section `chapter' in manual @ref{chapter,cross ref name,title,} title @ref{chapter,cross ref name,,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,,,manual} section `chapter' in manual @ref{chapter,cross ref name,title,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,title,,manual} section `title' in manual @ref{chapter,cross ref name,title, file name, manual} cross ref name: (file name)chapter section `title' in manual @ref{chapter,,title,file name} (file name)chapter @ref{chapter,,title,,manual} section `title' in manual @ref{chapter,,title, file name, manual} (file name)chapter section `title' in manual @ref{chapter,,,file name,manual} (file name)chapter section `chapter' in manual

    @ref{(pman)anode,cross ref name} cross ref name: (pman)anode @ref{(pman)anode,,title} (pman)anode @ref{(pman)anode,,,file name} (file name)anode @ref{(pman)anode,,,,manual} (pman)anode section `anode' in manual @ref{(pman)anode,cross ref name,title,} cross ref name: (pman)anode @ref{(pman)anode,cross ref name,,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,,,manual} cross ref name: (pman)anode section `anode' in manual @ref{(pman)anode,cross ref name,title,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,title,,manual} cross ref name: (pman)anode section `title' in manual @ref{(pman)anode,cross ref name,title, file name, manual} cross ref name: (file name)anode section `title' in manual @ref{(pman)anode,,title,file name} (file name)anode @ref{(pman)anode,,title,,manual} (pman)anode section `title' in manual @ref{(pman)anode,,title, file name, manual} (file name)anode section `title' in manual @ref{(pman)anode,,,file name,manual} (file name)anode section `anode' in manual

    @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter @inforef{chapter} @inforef{chapter, cross ref name} @inforef{chapter,,file name} See (file name)chapter @inforef{node, cross ref name, file name} See cross ref name: (file name)node @inforef{node} @inforef{node, cross ref name} @inforef{node,,file name} See (file name)node @inforef{chapter, cross ref name, file name, spurious arg} See cross ref name: (file name, spurious arg)chapter

    @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} See a , in cross ref: (a comma, in file)s–ect,ion

    • a

    l–ine

    a
    b

    l–ine

    − a
    − b

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    \input texinfo @c -*-texinfo-*-
    
    @setfilename simplest.info
    
    @node Top
    
    This is a very simple texi manual @  <>.
    
    @bye
    
    in verbatim ''
    
    html ''

    majorheading

    chapheading

    heading

    subheading

    subsubheading

    @acronym{--a,an accronym @comma{} @enddots{}} –a (an accronym , ...) @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } É–. ,A. (Étude–, Autonome) @abbr{@'E--. @comma{}A.} É–. ,A.

    @math{--a@minus{} {\frac{1}{2}}} –a− \frac12

    @image{f-ile,,,alt@verb{:jk _" %}} altjk _" %@ @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} jk _" %@ in b " @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} altjk _" %@

    Somehow invalid use of @,:
    @, ,
    @,@"u @̧"u

    Invalid use of @':
    @' '
    @'@"u @́"u

    @dotless{truc} truc @dotless{ij} ij @dotless{--a} –a @dotless{a} a

    @TeX, but without brace TeX

    @# @#

    @w{--a} –a

    @image{,1--xt} @image{,,2--xt} @image{,,,3--xt}


    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    fun:
    truc: machin bidule chose and
    truc: machin bidule chose and after
    truc: machin bidule chose and {
    truc: machin bidule chose and { and after
    truc: followed by a comment

    Various deff lines

    truc: after a deff item

    @ref{node} @ref{node}

    @ref{,cross ref name} @ref{,cross ref name} @ref{,,title} @ref{,,title} @ref{,,,file name} (file name) @ref{,,,,manual} manual @ref{node,cross ref name} @ref{node,cross ref name} @ref{node,,title} @ref{node,,title} @ref{node,,,file name} (file name)node @ref{node,,,,manual} section `node' in manual @ref{node,cross ref name,title,} @ref{node,cross ref name,title,} @ref{node,cross ref name,,file name} cross ref name: (file name)node @ref{node,cross ref name,,,manual} section `node' in manual @ref{node,cross ref name,title,file name} cross ref name: (file name)node @ref{node,cross ref name,title,,manual} section `title' in manual @ref{node,cross ref name,title, file name, manual} cross ref name: (file name)node section `title' in manual @ref{node,,title,file name} (file name)node @ref{node,,title,,manual} section `title' in manual @ref{chapter,,title, file name, manual} (file name)chapter section `title' in manual @ref{node,,title, file name, manual} (file name)node section `title' in manual @ref{node,,,file name,manual} (file name)node section `node' in manual @ref{,cross ref name,title,} @ref{,cross ref name,title,} @ref{,cross ref name,,file name} cross ref name: (file name) @ref{,cross ref name,,,manual} manual @ref{,cross ref name,title,file name} cross ref name: (file name) @ref{,cross ref name,title,,manual} section `title' in manual @ref{,cross ref name,title, file name, manual} cross ref name: (file name) section `title' in manual @ref{,,title,file name} (file name) @ref{,,title,,manual} section `title' in manual @ref{,,title, file name, manual} (file name) section `title' in manual @ref{,,,file name,manual} (file name) manual

    @inforef{,cross ref name } @inforef{,,file name} @inforef{,cross ref name, file name} @inforef{}

    Normal text

    < > " & ' `

    “simple-double–three—four—-”
    code: ``simple-double--three---four----''
    asis: “simple-double–three—four—-”
    strong: “simple-double–three—four—-”
    kbd: ``simple-double--three---four----''

    ``simple-double--three—four—-''

    @"u ü @"{U} Ü @~n ñ @^a â @'e é @=o ō @`i ì @'{e} é @'{@dotless{i}} í @dotless{i} ı @dotless{j} j @`{@=E} Ḕ @l{} ł @,{@'C} Ḉ @,c ç @,c@"u çü

    @*
    @ followed by a space   @ followed by a tab   @ followed by a new line  @- @| @: @! ! @? ? @. . @@ @ @} } @{ { @/

    foo vs. bar. colon :And something else. semi colon ;. And ? ?. Now ! !@ but , ,

    @TeX TeX @LaTeX LaTeX @bullet • @copyright © @dots … @enddots ... @equiv ≡ @error error--> @expansion → @minus − @point ★ @print ⊣ @result ⇒ @today a sunny day @aa å @AA Å @ae æ @oe œ @AE Æ @OE Œ @o ø @O Ø @ss ß @l ł @L Ł @exclamdown ¡ @questiondown ¿ @pounds £ @registeredsymbol ® @ordf ª @ordm º @comma , @quotedblleft “ @quotedblright ” @quoteleft ‘ @quoteright ’ @quotedblbase „ @quotesinglbase ‚ @guillemetleft « @guillemetright » @guillemotleft « @guillemotright » @guilsinglleft ‹ @guilsinglright › @textdegree ° @euro € @arrow → @leq ≤ @geq ≥

    @acronym{--a,an accronym} –a (an accronym) @acronym{--a} –a @abbr{@'E--. @comma{}A., @'Etude Autonome } É–. ,A. (Étude Autonome) @abbr{@'E--. @comma{}A.} É–. ,A. @asis{--a} –a @b{--a} –a @cite{--a} –a @code{--a} --a @command{--a} --a @ctrl{--a} –a @dfn{--a} –a @dmn{--a} –a @email{--a,--b} –b @email{,--b} –b @email{--a} --a @emph{--a} –a @env{--a} --a @file{--a} `--a' @i{--a} –a @kbd{--a} --a @key{--a} <--a> @math{--a {\frac{1}{2}} @minus{}} –a \frac12 − @option{--a} `--a' @r{--a} –a @samp{--a} `--a' @sc{--a} –A @strong{--a} –a @t{--a} –a @sansserif{--a} –a @titlefont{--a}

    –a

    @indicateurl{--a} <--a> @uref{--a,--b} –b @uref{--a} --a @uref{,--b} –b @uref{--a,--b,--c} –c @uref{,--b,--c} –c @uref{--a,,--c} –c @uref{,,--c} –c @url{--a,--b} –b @url{--a,} --a @url{,--b} –b @var{--a} –a @verb{:--a:} --a @verb{:a < & @ % " -- b:} a < & @ % " -- b @w{} @H{a}@H{--a} –a̋ @dotaccent{a} ȧ @dotaccent{--a} –ȧ @ringaccent{a} å @ringaccent{--a} –å @tieaccent{a} a[ @tieaccent{--a} –a[ @u{a} ă @u{--a} –ă @ubaraccent{a}@ubaraccent{--a} –a̲ @udotaccent{a}@udotaccent{--a} –ạ @v{a} ǎ @v{--a} –ǎ @,{c} ç @,{--c} –ç @ogonek{a} ą @ogonek{--a} –ą @footnote{in footnote} (1) @footnote{in footnote2} (2)

    @image{f--ile} f--ile @image{f--ile,l--i} f--ile @image{f--ile,,l--e} f--ile @image{f--ile,,,alt} alt @image{f--ile,,,,e-d-xt} f--ile @image{f--ile,aze,az,alt,e--xt} alt @image{f-ile,aze,,a--lt} a–lt @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} alt



    @clicksequence{click @click{} A} click → A After clickstyle ⇒ @clicksequence{click @click{} A} click ⇒ A

    A quot—ation

    Note: A Note

    note: A note

    Caution: Caution

    Important: Important

    Tip: a Tip

    Warning: a Warning.

    something é TeX: The something é TeX is here.

    @ at the end of line A @ at the end of the @quotation line.

    something, other thing: something, other thing

    Note, the note: Note, the note

    Empty:

    :


    :

    A small quot—ation

    Note: A small Note

    something, other thing: something, other thing

    • i–temize
    • + i–tem +
    • b–ullet
    • − minu–s
    • e–mph item
    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
    trucbidule
     
    e--xample  some
       text
    
     
    s--mallexample
    
     
    d–isplay
    
     
    s–malldisplay
    
     
    l--isp
    
     
    s--malllisp
    
     
    f–ormat
    
     
    s–mallformat
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    cate--gory: de--ffn_name ar--guments more args
    even more so

    def–fn

    fset: i a g
    cmde: truc
    Command: log trap
    Command: log trap1
    Command: log trap2
    cmde: id ule truc
    cmde2: id `i' ule truc
    id `i' ule:
    :
    aaa:
    :
    :
    : machin
    : bidule machin
    truc: machin
    truc:
    truc: followed by a comment
    truc:
    :
    truc: a b c d e f g h i
    truc: deffnx before end deffn
    empty: deffn
    empty: deffn with deffnx
    empty: deffnx
    fset: i a g
    cmde: truc

    text in def item for second def item

    c--ategory: d--efvr_name

    d–efvr

    c--ategory: t--ype d--eftypefn_name a--rguments...

    d–eftypefn

    c--ategory on c--lass: t--ype d--eftypeop_name a--rguments...

    d–eftypeop

    c--ategory: t--ype d--eftypevr_name

    d–eftypevr

    c--ategory of c--lass: d--efcv_name

    d–efcv

    c--ategory on c--lass: d--efop_name a--rguments...

    d–efop

    c--ategory: d--eftp_name a--ttributes...

    d–eftp

    Function: d--efun_name a--rguments...

    d–efun

    Macro: d--efmac_name a--rguments...

    d–efmac

    Special Form: d--efspec_name a--rguments...

    d–efspec

    Variable: d--efvar_name argvar argvar1

    d–efvar

    User Option: d--efopt_name

    d–efopt

    Function: t--ype d--eftypefun_name a--rguments...

    d–eftypefun

    Variable: t--ype d--eftypevar_name

    d–eftypevar

    Instance Variable of c--lass: d--efivar_name

    d–efivar

    Instance Variable of c--lass: t--ype d--eftypeivar_name

    d–eftypeivar

    Method on c--lass: d--efmethod_name a--rguments...

    d–efmethod

    Method on c--lass: t--ype d--eftypemethod_name a--rguments...

    d–eftypemethod

    @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} See cross r—ef name@: (file n—ame@)c—hapter@ section `t—itle@' in ma—nual@. @ref{chapter, cross ref name, title, file name, manual} cross ref name: (file name)chapter section `title' in manual @pxref{chapter, cross ref name, title, file name, manual} see cross ref name: (file name)chapter section `title' in manual @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter

    @ref{chapter} chapter @xref{chapter} See section chapter. @pxref{chapter} see section chapter @ref{s--ect@comma{}ion} A section

    @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } a , in cross ref: (a comma, in file)s–ect,ion section `a comma, in title' in a , in manual name

    @ref{chapter,cross ref name} cross ref name @ref{chapter,,title} title @ref{chapter,,,file name} (file name)chapter @ref{chapter,,,,manual} section `chapter' in manual @ref{chapter,cross ref name,title,} title @ref{chapter,cross ref name,,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,,,manual} section `chapter' in manual @ref{chapter,cross ref name,title,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,title,,manual} section `title' in manual @ref{chapter,cross ref name,title, file name, manual} cross ref name: (file name)chapter section `title' in manual @ref{chapter,,title,file name} (file name)chapter @ref{chapter,,title,,manual} section `title' in manual @ref{chapter,,title, file name, manual} (file name)chapter section `title' in manual @ref{chapter,,,file name,manual} (file name)chapter section `chapter' in manual

    @ref{(pman)anode,cross ref name} cross ref name: (pman)anode @ref{(pman)anode,,title} (pman)anode @ref{(pman)anode,,,file name} (file name)anode @ref{(pman)anode,,,,manual} (pman)anode section `anode' in manual @ref{(pman)anode,cross ref name,title,} cross ref name: (pman)anode @ref{(pman)anode,cross ref name,,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,,,manual} cross ref name: (pman)anode section `anode' in manual @ref{(pman)anode,cross ref name,title,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,title,,manual} cross ref name: (pman)anode section `title' in manual @ref{(pman)anode,cross ref name,title, file name, manual} cross ref name: (file name)anode section `title' in manual @ref{(pman)anode,,title,file name} (file name)anode @ref{(pman)anode,,title,,manual} (pman)anode section `title' in manual @ref{(pman)anode,,title, file name, manual} (file name)anode section `title' in manual @ref{(pman)anode,,,file name,manual} (file name)anode section `anode' in manual

    @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter @inforef{chapter} @inforef{chapter, cross ref name} @inforef{chapter,,file name} See (file name)chapter @inforef{node, cross ref name, file name} See cross ref name: (file name)node @inforef{node} @inforef{node, cross ref name} @inforef{node,,file name} See (file name)node @inforef{chapter, cross ref name, file name, spurious arg} See cross ref name: (file name, spurious arg)chapter

    @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} See a , in cross ref: (a comma, in file)s–ect,ion

    • a

    l–ine

    a
    b

    l–ine

    − a
    − b

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    \input texinfo @c -*-texinfo-*-
    
    @setfilename simplest.info
    
    @node Top
    
    This is a very simple texi manual @  <>.
    
    @bye
    
    in verbatim ''
    
    html ''

    majorheading

    chapheading

    heading

    subheading

    subsubheading

    @acronym{--a,an accronym @comma{} @enddots{}} –a (an accronym , ...) @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } É–. ,A. (Étude–, Autonome) @abbr{@'E--. @comma{}A.} É–. ,A.

    @math{--a@minus{} {\frac{1}{2}}} –a− \frac12

    @image{f-ile,,,alt@verb{:jk _" %}} altjk _" %@ @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} jk _" %@ in b " @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} altjk _" %@

    Somehow invalid use of @,:
    @, ,
    @,@"u @̧"u

    Invalid use of @':
    @' '
    @'@"u @́"u

    @dotless{truc} truc @dotless{ij} ij @dotless{--a} –a @dotless{a} a

    @TeX, but without brace TeX

    @# @#

    @w{--a} –a

    @image{,1--xt} @image{,,2--xt} @image{,,,3--xt}


    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    fun:
    truc: machin bidule chose and
    truc: machin bidule chose and after
    truc: machin bidule chose and {
    truc: machin bidule chose and { and after
    truc: followed by a comment

    Various deff lines

    truc: after a deff item

    @ref{node} @ref{node}

    @ref{,cross ref name} @ref{,cross ref name} @ref{,,title} @ref{,,title} @ref{,,,file name} (file name) @ref{,,,,manual} manual @ref{node,cross ref name} @ref{node,cross ref name} @ref{node,,title} @ref{node,,title} @ref{node,,,file name} (file name)node @ref{node,,,,manual} section `node' in manual @ref{node,cross ref name,title,} @ref{node,cross ref name,title,} @ref{node,cross ref name,,file name} cross ref name: (file name)node @ref{node,cross ref name,,,manual} section `node' in manual @ref{node,cross ref name,title,file name} cross ref name: (file name)node @ref{node,cross ref name,title,,manual} section `title' in manual @ref{node,cross ref name,title, file name, manual} cross ref name: (file name)node section `title' in manual @ref{node,,title,file name} (file name)node @ref{node,,title,,manual} section `title' in manual @ref{chapter,,title, file name, manual} (file name)chapter section `title' in manual @ref{node,,title, file name, manual} (file name)node section `title' in manual @ref{node,,,file name,manual} (file name)node section `node' in manual @ref{,cross ref name,title,} @ref{,cross ref name,title,} @ref{,cross ref name,,file name} cross ref name: (file name) @ref{,cross ref name,,,manual} manual @ref{,cross ref name,title,file name} cross ref name: (file name) @ref{,cross ref name,title,,manual} section `title' in manual @ref{,cross ref name,title, file name, manual} cross ref name: (file name) section `title' in manual @ref{,,title,file name} (file name) @ref{,,title,,manual} section `title' in manual @ref{,,title, file name, manual} (file name) section `title' in manual @ref{,,,file name,manual} (file name) manual

    @inforef{,cross ref name } @inforef{,,file name} @inforef{,cross ref name, file name} @inforef{}

    In example.

     
    <
    >
    "
    &
    '
    `
    
    ``simple-double--three---four----''
    
    code: ``simple-double--three---four----'' 
    
    asis: ``simple-double--three---four----'' 
    
    strong: ``simple-double--three---four----'' 
    
    kbd: ``simple-double--three---four----'' 
    
    
    ``simple-double--three---four----''
    
    
    
    @"u ü 
    @"{U} Ü 
    @~n ñ
    @^a â
    @'e é
    @=o ō
    @`i ì
    @'{e} é
    @'{@dotless{i}} í 
    @dotless{i} ı
    @dotless{j} j
    @`{@=E} Ḕ 
    @l{} ł
    @,{@'C} Ḉ
    @,c ç
    @,c@"u çü 
    
    
    @* 
    
    @ followed by a space
     
    @ followed by a tab
     
    @ followed by a new line
     @- 
    @| 
    @: 
    @! !
    @? ?
    @. .
    @@ @
    @} }
    @{ {
    @/ 
    
    foo vs. bar. 
    colon :And something else.
    semi colon ;.
    And ? ?.
    Now ! !@
    but , ,
    
    @TeX TeX
    @LaTeX LaTeX
    @bullet •
    @copyright ©
    @dots …
    @enddots ...
    @equiv ≡
    @error error-->
    @expansion →
    @minus −
    @point ★
    @print ⊣
    @result ⇒
    @today a sunny day
    @aa å
    @AA Å
    @ae æ
    @oe œ
    @AE Æ
    @OE Œ
    @o ø
    @O Ø
    @ss ß
    @l ł
    @L Ł
    @exclamdown ¡
    @questiondown ¿
    @pounds £
    @registeredsymbol ®
    @ordf ª
    @ordm º
    @comma ,
    @quotedblleft “
    @quotedblright ”
    @quoteleft ‘
    @quoteright ’
    @quotedblbase „
    @quotesinglbase ‚
    @guillemetleft «
    @guillemetright »
    @guillemotleft «
    @guillemotright »
    @guilsinglleft ‹
    @guilsinglright ›
    @textdegree °
    @euro €
    @arrow →
    @leq ≤
    @geq ≥
    
    @acronym{--a,an accronym} --a (an accronym)
    @acronym{--a} --a
    @abbr{@'E--. @comma{}A., @'Etude Autonome } É--. ,A. (Étude Autonome)
    @abbr{@'E--. @comma{}A.} É--. ,A.
    @asis{--a} --a
    @b{--a} --a
    @cite{--a} --a
    @code{--a} --a
    @command{--a} --a
    @ctrl{--a} --a
    @dfn{--a} --a
    @dmn{--a} --a
    @email{--a,--b} --b
    @email{,--b} --b
    @email{--a} --a
    @emph{--a} --a
    @env{--a} --a
    @file{--a} `--a'
    @i{--a} --a
    @kbd{--a} --a
    @key{--a} <--a>
    @math{--a {\frac{1}{2}} @minus{}} --a \frac12 −
    @option{--a} `--a'
    @r{--a} --a
    @samp{--a} `--a'
    @sc{--a} --A
    @strong{--a} --a
    @t{--a} --a
    @sansserif{--a} --a
    @titlefont{--a} --a
    @indicateurl{--a} <--a>
    @uref{--a,--b} --b
    @uref{--a} --a
    @uref{,--b} --b
    @uref{--a,--b,--c} --c
    @uref{,--b,--c} --c
    @uref{--a,,--c} --c
    @uref{,,--c} --c
    @url{--a,--b} --b
    @url{--a,} --a
    @url{,--b} --b
    @var{--a} --a
    @verb{:--a:} --a
    @verb{:a  < & @ % " --    b:} a  < & @ % " --    b
    @w{} 
    @H{a}@H{--a} --a̋
    @dotaccent{a} ȧ
    @dotaccent{--a} --ȧ
    @ringaccent{a} å
    @ringaccent{--a} --å
    @tieaccent{a} a[
    @tieaccent{--a} --a[
    @u{a} ă
    @u{--a} --ă
    @ubaraccent{a}@ubaraccent{--a} --a̲
    @udotaccent{a}@udotaccent{--a} --ạ
    @v{a} ǎ
    @v{--a} --ǎ
    @,{c} ç
    @,{--c} --ç
    @ogonek{a} ą
    @ogonek{--a} --ą
    @footnote{in footnote} (3)
    @footnote{in footnote2} (4)
    
    @image{f--ile} [ f--ile ]
    @image{f--ile,l--i} [ f--ile ]
    @image{f--ile,,l--e} [ f--ile ]
    @image{f--ile,,,alt} [ alt ]
    @image{f--ile,,,,e-d-xt} [ f--ile ]
    @image{f--ile,aze,az,alt,e--xt} [ alt ]
    @image{f-ile,aze,,a--lt} [ a–lt ]
    @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} [ alt ]
    
    
    
    
    @clicksequence{click @click{} A} click → A
    After clickstyle ⇒
    @clicksequence{click @click{} A} click ⇒ A
    
    
    A quot---ation
    
    Note: A Note
    
    note: A note
    
    Caution: Caution
    
    Important: Important
    
    Tip: a Tip
    
    Warning: a Warning.
    
    something é TeX: The something é TeX is here.
    
    @ at the end of line  A @ at the end of the @quotation line.
    
    something, other thing: something, other thing
    
    Note, the note: Note, the note
    
    Empty: 
    : 
    
    : 
    A small quot---ation
    
    Note: A small Note
    
    something, other thing: something, other thing
    
    •  i--temize
      
    •  +  i--tem +
      
    •  b--ullet
      
    •  minu--s
      
    •  e--mph item
      
    •  after emph  e--mph item
      
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    
    lone mu--ltitable item
    truc
    bidule
     
    e--xample  some
       text
    
     
    s--mallexample
    
     
    d--isplay
    
     
    s--malldisplay
    
     
    l--isp
    
     
    s--malllisp
    
     
    f--ormat
    
     
    s--mallformat
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    cate--gory: de--ffn_name ar--guments more args even more so
    def--fn
    
     
    
    fset: i a g
    cmde: truc
    Command: log trap
    Command: log trap1
    Command: log trap2
    cmde: id ule truc
    cmde2: id `i' ule truc
    id `i' ule:
    :
    aaa:
    :
    :
    : machin
    : bidule machin
    truc: machin
    truc:
    truc: followed by a comment
    truc:
    :
    truc: a b c d e f g h i
    truc: deffnx before end deffn
    empty: deffn
    empty: deffn with deffnx
    empty: deffnx
    fset: i a g
    cmde: truc
    text in def item for second def item
    
    c--ategory: d--efvr_name
    d--efvr
    
    c--ategory: t--ype d--eftypefn_name a--rguments...
    d--eftypefn
    
    c--ategory on c--lass: t--ype d--eftypeop_name a--rguments...
    d--eftypeop
    
    c--ategory: t--ype d--eftypevr_name
    d--eftypevr
    
    c--ategory of c--lass: d--efcv_name
    d--efcv
    
    c--ategory on c--lass: d--efop_name a--rguments...
    d--efop
    
    c--ategory: d--eftp_name a--ttributes...
    d--eftp
    
    Function: d--efun_name a--rguments...
    d--efun
    
    Macro: d--efmac_name a--rguments...
    d--efmac
    
    Special Form: d--efspec_name a--rguments...
    d--efspec
    
    Variable: d--efvar_name argvar argvar1
    d--efvar
    
    User Option: d--efopt_name
    d--efopt
    
    Function: t--ype d--eftypefun_name a--rguments...
    d--eftypefun
    
    Variable: t--ype d--eftypevar_name
    d--eftypevar
    
    Instance Variable of c--lass: d--efivar_name
    d--efivar
    
    Instance Variable of c--lass: t--ype d--eftypeivar_name
    d--eftypeivar
    
    Method on c--lass: d--efmethod_name a--rguments...
    d--efmethod
    
    Method on c--lass: t--ype d--eftypemethod_name a--rguments...
    d--eftypemethod
    
    @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} See cross r---ef name@: (file n---ame@)c---hapter@ section `t---itle@' in ma---nual@.
    @ref{chapter, cross ref name, title, file name, manual} cross ref name: (file name)chapter section `title' in manual
    @pxref{chapter, cross ref name, title, file name, manual} see cross ref name: (file name)chapter section `title' in manual
    @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter
    
    @ref{chapter} chapter
    @xref{chapter} See section chapter.
    @pxref{chapter} see section chapter
    @ref{s--ect@comma{}ion} A section
    
    @ref{s--ect@comma{}ion, a @comma{} in cross
    ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name }
    a , in cross ref: (a comma, in file)s--ect,ion section `a comma, in title' in a , in manual name
    
    @ref{chapter,cross ref name} cross ref name
    @ref{chapter,,title} title
    @ref{chapter,,,file name} (file name)chapter
    @ref{chapter,,,,manual} section `chapter' in manual
    @ref{chapter,cross ref name,title,} title
    @ref{chapter,cross ref name,,file name} cross ref name: (file name)chapter
    @ref{chapter,cross ref name,,,manual} section `chapter' in manual
    @ref{chapter,cross ref name,title,file name} cross ref name: (file name)chapter
    @ref{chapter,cross ref name,title,,manual} section `title' in manual
    @ref{chapter,cross ref name,title, file name, manual} cross ref name: (file name)chapter section `title' in manual
    @ref{chapter,,title,file name} (file name)chapter
    @ref{chapter,,title,,manual} section `title' in manual
    @ref{chapter,,title, file name, manual} (file name)chapter section `title' in manual
    @ref{chapter,,,file name,manual} (file name)chapter section `chapter' in manual
    
    
    @ref{(pman)anode,cross ref name} cross ref name: (pman)anode
    @ref{(pman)anode,,title} (pman)anode
    @ref{(pman)anode,,,file name} (file name)anode
    @ref{(pman)anode,,,,manual} (pman)anode section `anode' in manual
    @ref{(pman)anode,cross ref name,title,} cross ref name: (pman)anode
    @ref{(pman)anode,cross ref name,,file name} cross ref name: (file name)anode
    @ref{(pman)anode,cross ref name,,,manual} cross ref name: (pman)anode section `anode' in manual
    @ref{(pman)anode,cross ref name,title,file name} cross ref name: (file name)anode
    @ref{(pman)anode,cross ref name,title,,manual} cross ref name: (pman)anode section `title' in manual
    @ref{(pman)anode,cross ref name,title, file name, manual} cross ref name: (file name)anode section `title' in manual
    @ref{(pman)anode,,title,file name} (file name)anode
    @ref{(pman)anode,,title,,manual} (pman)anode section `title' in manual
    @ref{(pman)anode,,title, file name, manual} (file name)anode section `title' in manual
    @ref{(pman)anode,,,file name,manual} (file name)anode section `anode' in manual
    
    
    @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter
    @inforef{chapter} 
    @inforef{chapter, cross ref name} 
    @inforef{chapter,,file name} See (file name)chapter
    @inforef{node, cross ref name, file name} See cross ref name: (file name)node
    @inforef{node} 
    @inforef{node, cross ref name} 
    @inforef{node,,file name} See (file name)node
    @inforef{chapter, cross ref name, file name, spurious arg} See cross ref name: (file name, spurious arg)chapter
    
    @inforef{s--ect@comma{}ion, a @comma{} in cross
    ref, a comma@comma{} in file}
    See a , in cross ref: (a comma, in file)s--ect,ion
    
    
    
    • a
    l--ine
    
    a
    b
    l--ine
    
    − a
    − b
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    \input texinfo @c -*-texinfo-*-
    
    @setfilename simplest.info
    
    @node Top
    
    This is a very simple texi manual @  <>.
    
    @bye
    
    in verbatim ''
    
    
    html ''
    
    
    
    majorheading
    
    
    chapheading
    
    
    heading
    
    
    subheading
    
    
    subsubheading
    
    
    @acronym{--a,an accronym @comma{} @enddots{}} --a (an accronym , ...)
    @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } É--. ,A. (Étude--, Autonome)
    @abbr{@'E--. @comma{}A.} É--. ,A.
    
    @math{--a@minus{} {\frac{1}{2}}} --a− \frac12
    
    @image{f-ile,,,alt@verb{:jk _" %}} [ altjk _" %@ ]
    @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} [ jk _" %@ in b " ]
    @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} [ altjk _" %@ ]
    
    
    
    
    Somehow invalid use of @,:
    
    @, ,
    
    
    @,@"u @̧"u
    
    Invalid use of @':
    
    @' '
    
    
    @'@"u @́"u
    
    @dotless{truc} truc
    @dotless{ij} ij
    @dotless{--a} --a
    @dotless{a} a
    
    @TeX, but without brace TeX
    
    @# @#
    
    @w{--a} --a
    
    @image{,1--xt} 
    @image{,,2--xt} 
    @image{,,,3--xt} 
    
    
    
    
    • after emph  e--mph item
      
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    fun:
    truc: machin bidule chose and
    truc: machin bidule chose and after
    truc: machin bidule chose and {
    truc: machin bidule chose and { and after
    truc: followed by a comment
    Various deff lines
    
    truc: after a deff item
    @ref{node} @ref{node}
    
    @ref{,cross ref name} @ref{,cross ref name}
    @ref{,,title} @ref{,,title}
    @ref{,,,file name} (file name)
    @ref{,,,,manual} manual
    @ref{node,cross ref name} @ref{node,cross ref name}
    @ref{node,,title} @ref{node,,title}
    @ref{node,,,file name} (file name)node
    @ref{node,,,,manual} section `node' in manual
    @ref{node,cross ref name,title,} @ref{node,cross ref name,title,}
    @ref{node,cross ref name,,file name} cross ref name: (file name)node
    @ref{node,cross ref name,,,manual} section `node' in manual
    @ref{node,cross ref name,title,file name} cross ref name: (file name)node
    @ref{node,cross ref name,title,,manual} section `title' in manual
    @ref{node,cross ref name,title, file name, manual} cross ref name: (file name)node section `title' in manual
    @ref{node,,title,file name} (file name)node
    @ref{node,,title,,manual} section `title' in manual
    @ref{chapter,,title, file name, manual} (file name)chapter section `title' in manual
    @ref{node,,title, file name, manual} (file name)node section `title' in manual
    @ref{node,,,file name,manual} (file name)node section `node' in manual
    @ref{,cross ref name,title,} @ref{,cross ref name,title,}
    @ref{,cross ref name,,file name} cross ref name: (file name)
    @ref{,cross ref name,,,manual} manual
    @ref{,cross ref name,title,file name} cross ref name: (file name)
    @ref{,cross ref name,title,,manual} section `title' in manual
    @ref{,cross ref name,title, file name, manual} cross ref name: (file name) section `title' in manual
    @ref{,,title,file name} (file name)
    @ref{,,title,,manual} section `title' in manual
    @ref{,,title, file name, manual} (file name) section `title' in manual
    @ref{,,,file name,manual} (file name) manual
    
    @inforef{,cross ref name } 
    @inforef{,,file name} 
    @inforef{,cross ref name, file name} 
    @inforef{} 
    
    
    

    cp

    Jump to:   .   ?      
    A   I   T  
    Index Entry Section

    .
    .subsubheading

    ?
    ?subsubheading

    –optionTop section
    –optionTop section
    –optionsubsubheading
    –optionsubsubheading

    Top section
    Top section
    subsubheading
    subsubheading

    A
    asubsubheading

    I
    index entry between item and itemxTop section
    index entry between item and itemxTop section
    index entry between item and itemxsubsubheading
    index entry between item and itemxsubsubheading
    index entry within deffnTop section
    index entry within deffnTop section
    index entry within deffnsubsubheading
    index entry within deffnsubsubheading
    index entry within itemizeTop section
    index entry within itemizeTop section
    index entry within itemizesubsubheading
    index entry within itemizesubsubheading
    index entry within multitableTop section
    index entry within multitableTop section
    index entry within multitablesubsubheading
    index entry within multitablesubsubheading

    T
    t–rucsubsubheading
    T–rucsubsubheading

    Jump to:   .   ?      
    A   I   T  

    fn

    Jump to:   .   ?      
    A   B   D   F   I   L   M   T  
    Index Entry Section

    .
    .subsubheading

    ?
    ?subsubheading

    --foptionTop section
    --foptionTop section
    --foptionsubsubheading
    --foptionsubsubheading

    ``Top section
    ``Top section
    ``subsubheading
    ``subsubheading

    A
    aTop section
    aTop section
    aTop section
    aTop section
    asubsubheading
    asubsubheading
    asubsubheading
    asubsubheading
    asubsubheading
    afterTop section
    afterTop section
    aftersubsubheading
    aftersubsubheading

    B
    bTop section
    bTop section
    bsubsubheading
    bsubsubheading
    bidule machinTop section
    bidule machinTop section
    bidule machinsubsubheading
    bidule machinsubsubheading

    D
    deffnTop section
    deffnTop section
    deffnTop section
    deffnTop section
    deffnsubsubheading
    deffnsubsubheading
    deffnsubsubheading
    deffnsubsubheading
    deffnxTop section
    deffnxTop section
    deffnxTop section
    deffnxTop section
    deffnxsubsubheading
    deffnxsubsubheading
    deffnxsubsubheading
    deffnxsubsubheading
    de--ffn_nameTop section
    de--ffn_nameTop section
    de--ffn_namesubsubheading
    de--ffn_namesubsubheading
    d--effn_nameTop section
    d--effn_nameTop section
    d--effn_namesubsubheading
    d--effn_namesubsubheading
    d--efmac_nameTop section
    d--efmac_nameTop section
    d--efmac_namesubsubheading
    d--efmac_namesubsubheading
    d--efmethod_name on c--lassTop section
    d--efmethod_name on c--lassTop section
    d--efmethod_name on c--lasssubsubheading
    d--efmethod_name on c--lasssubsubheading
    d--efop_name on c--lassTop section
    d--efop_name on c--lassTop section
    d--efop_name on c--lasssubsubheading
    d--efop_name on c--lasssubsubheading
    d--efspec_nameTop section
    d--efspec_nameTop section
    d--efspec_namesubsubheading
    d--efspec_namesubsubheading
    d--eftypefn_nameTop section
    d--eftypefn_nameTop section
    d--eftypefn_namesubsubheading
    d--eftypefn_namesubsubheading
    d--eftypefun_nameTop section
    d--eftypefun_nameTop section
    d--eftypefun_namesubsubheading
    d--eftypefun_namesubsubheading
    d--eftypemethod_name on c--lassTop section
    d--eftypemethod_name on c--lassTop section
    d--eftypemethod_name on c--lasssubsubheading
    d--eftypemethod_name on c--lasssubsubheading
    d--eftypeop_name on c--lassTop section
    d--eftypeop_name on c--lassTop section
    d--eftypeop_name on c--lasssubsubheading
    d--eftypeop_name on c--lasssubsubheading
    d--efun_nameTop section
    d--efun_nameTop section
    d--efun_namesubsubheading
    d--efun_namesubsubheading

    F
    followedTop section
    followedTop section
    followedTop section
    followedTop section
    followedsubsubheading
    followedsubsubheading
    followedsubsubheading
    followedsubsubheading

    I
    iTop section
    iTop section
    iTop section
    iTop section
    isubsubheading
    isubsubheading
    isubsubheading
    isubsubheading
    id `i' uleTop section
    id `i' uleTop section
    id `i' ulesubsubheading
    id `i' ulesubsubheading
    id uleTop section
    id uleTop section
    id ulesubsubheading
    id ulesubsubheading

    L
    log trapTop section
    log trapTop section
    log trapsubsubheading
    log trapsubsubheading
    log trap1Top section
    log trap1Top section
    log trap1subsubheading
    log trap1subsubheading
    log trap2Top section
    log trap2Top section
    log trap2subsubheading
    log trap2subsubheading

    M
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading

    T
    trucTop section
    trucTop section
    trucTop section
    trucTop section
    trucsubsubheading
    trucsubsubheading
    trucsubsubheading
    trucsubsubheading
    T--rucsubsubheading
    t--rucsubsubheading

    Jump to:   .   ?      
    A   B   D   F   I   L   M   T  

    vr

    Jump to:   A   B   D  
    Index Entry Section

    A
    aTop section
    aTop section
    asubsubheading
    asubsubheading

    B
    bTop section
    bTop section
    bsubsubheading
    bsubsubheading

    D
    d--efcv_nameTop section
    d--efcv_nameTop section
    d--efcv_namesubsubheading
    d--efcv_namesubsubheading
    d--efivar_nameTop section
    d--efivar_nameTop section
    d--efivar_namesubsubheading
    d--efivar_namesubsubheading
    d--efopt_nameTop section
    d--efopt_nameTop section
    d--efopt_namesubsubheading
    d--efopt_namesubsubheading
    d--eftypeivar_name of c--lassTop section
    d--eftypeivar_name of c--lassTop section
    d--eftypeivar_name of c--lasssubsubheading
    d--eftypeivar_name of c--lasssubsubheading
    d--eftypevar_nameTop section
    d--eftypevar_nameTop section
    d--eftypevar_namesubsubheading
    d--eftypevar_namesubsubheading
    d--eftypevr_nameTop section
    d--eftypevr_nameTop section
    d--eftypevr_namesubsubheading
    d--eftypevr_namesubsubheading
    d--efvar_nameTop section
    d--efvar_nameTop section
    d--efvar_namesubsubheading
    d--efvar_namesubsubheading
    d--efvr_nameTop section
    d--efvr_nameTop section
    d--efvr_namesubsubheading
    d--efvr_namesubsubheading

    Jump to:   A   B   D  

    ky

    pg

    tp

    Jump to:   D  
    Index Entry Section

    D
    d--eftp_nameTop section
    d--eftp_nameTop section
    d--eftp_namesubsubheading
    d--eftp_namesubsubheading

    Jump to:   D  

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. chapter

    (5)

     

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 A section


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.1 subsection


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.1.1 subsubsection “simple-double–three—four—-”


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. chapter 2

    Jump to:   .   ?      
    A   I   T  
    Index Entry Section

    .
    .subsubheading

    ?
    ?subsubheading

    –optionTop section
    –optionTop section
    –optionsubsubheading
    –optionsubsubheading

    Top section
    Top section
    subsubheading
    subsubheading

    A
    asubsubheading

    I
    index entry between item and itemxTop section
    index entry between item and itemxTop section
    index entry between item and itemxsubsubheading
    index entry between item and itemxsubsubheading
    index entry within deffnTop section
    index entry within deffnTop section
    index entry within deffnsubsubheading
    index entry within deffnsubsubheading
    index entry within itemizeTop section
    index entry within itemizeTop section
    index entry within itemizesubsubheading
    index entry within itemizesubsubheading
    index entry within multitableTop section
    index entry within multitableTop section
    index entry within multitablesubsubheading
    index entry within multitablesubsubheading

    T
    t–rucsubsubheading
    T–rucsubsubheading

    Jump to:   .   ?      
    A   I   T  
    Jump to:   .   ?      
    A   B   D   F   I   L   M   T  
    Index Entry Section

    .
    .subsubheading

    ?
    ?subsubheading

    --foptionTop section
    --foptionTop section
    --foptionsubsubheading
    --foptionsubsubheading

    ``Top section
    ``Top section
    ``subsubheading
    ``subsubheading

    A
    aTop section
    aTop section
    aTop section
    aTop section
    asubsubheading
    asubsubheading
    asubsubheading
    asubsubheading
    asubsubheading
    afterTop section
    afterTop section
    aftersubsubheading
    aftersubsubheading

    B
    bTop section
    bTop section
    bsubsubheading
    bsubsubheading
    bidule machinTop section
    bidule machinTop section
    bidule machinsubsubheading
    bidule machinsubsubheading

    D
    deffnTop section
    deffnTop section
    deffnTop section
    deffnTop section
    deffnsubsubheading
    deffnsubsubheading
    deffnsubsubheading
    deffnsubsubheading
    deffnxTop section
    deffnxTop section
    deffnxTop section
    deffnxTop section
    deffnxsubsubheading
    deffnxsubsubheading
    deffnxsubsubheading
    deffnxsubsubheading
    de--ffn_nameTop section
    de--ffn_nameTop section
    de--ffn_namesubsubheading
    de--ffn_namesubsubheading
    d--effn_nameTop section
    d--effn_nameTop section
    d--effn_namesubsubheading
    d--effn_namesubsubheading
    d--efmac_nameTop section
    d--efmac_nameTop section
    d--efmac_namesubsubheading
    d--efmac_namesubsubheading
    d--efmethod_name on c--lassTop section
    d--efmethod_name on c--lassTop section
    d--efmethod_name on c--lasssubsubheading
    d--efmethod_name on c--lasssubsubheading
    d--efop_name on c--lassTop section
    d--efop_name on c--lassTop section
    d--efop_name on c--lasssubsubheading
    d--efop_name on c--lasssubsubheading
    d--efspec_nameTop section
    d--efspec_nameTop section
    d--efspec_namesubsubheading
    d--efspec_namesubsubheading
    d--eftypefn_nameTop section
    d--eftypefn_nameTop section
    d--eftypefn_namesubsubheading
    d--eftypefn_namesubsubheading
    d--eftypefun_nameTop section
    d--eftypefun_nameTop section
    d--eftypefun_namesubsubheading
    d--eftypefun_namesubsubheading
    d--eftypemethod_name on c--lassTop section
    d--eftypemethod_name on c--lassTop section
    d--eftypemethod_name on c--lasssubsubheading
    d--eftypemethod_name on c--lasssubsubheading
    d--eftypeop_name on c--lassTop section
    d--eftypeop_name on c--lassTop section
    d--eftypeop_name on c--lasssubsubheading
    d--eftypeop_name on c--lasssubsubheading
    d--efun_nameTop section
    d--efun_nameTop section
    d--efun_namesubsubheading
    d--efun_namesubsubheading

    F
    followedTop section
    followedTop section
    followedTop section
    followedTop section
    followedsubsubheading
    followedsubsubheading
    followedsubsubheading
    followedsubsubheading

    I
    iTop section
    iTop section
    iTop section
    iTop section
    isubsubheading
    isubsubheading
    isubsubheading
    isubsubheading
    id `i' uleTop section
    id `i' uleTop section
    id `i' ulesubsubheading
    id `i' ulesubsubheading
    id uleTop section
    id uleTop section
    id ulesubsubheading
    id ulesubsubheading

    L
    log trapTop section
    log trapTop section
    log trapsubsubheading
    log trapsubsubheading
    log trap1Top section
    log trap1Top section
    log trap1subsubheading
    log trap1subsubheading
    log trap2Top section
    log trap2Top section
    log trap2subsubheading
    log trap2subsubheading

    M
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading

    T
    trucTop section
    trucTop section
    trucTop section
    trucTop section
    trucsubsubheading
    trucsubsubheading
    trucsubsubheading
    trucsubsubheading
    T--rucsubsubheading
    t--rucsubsubheading

    Jump to:   .   ?      
    A   B   D   F   I   L   M   T  

    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)

    in footnote

    (2)

    in footnote2

    (1)

    in footnote

    (2)

    in footnote2

    (3)

    in footnote

    (4)

    in footnote2

    (5)

    in footnote


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    Short Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/texi_umlaut/0000755000175000017500000000000011264347117023317 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/texi_umlaut/umlaut.passtexi0000644000175000017500000001003511264347117026407 0ustar flichtenheldflichtenheldumlaut.texi(,2) @c umlaut.texi(,3) @c umlaut.texi(,4) @c umlaut.texi(,5) @setfilename umlaut.info umlaut.texi(,6) @documentlanguage de umlaut.texi(,7) @c @documentlanguage zv umlaut.texi(,8) @settitle Test for Umlaute, accent etc. umlaut.texi(,9) @setchapternewpage on umlaut.texi(,10) @footnotestyle separate umlaut.texi(,14) @titlepage umlaut.texi(,15) @title Title umlaut.texi(,16) @subtitle SubTitle umlaut.texi(,17) @author @copyright{} umlaut.texi(,18) @page umlaut.texi(,19) @vskip 0pt plus 1filll umlaut.texi(,20) Copyright @copyright{} Who it is@* umlaut.texi(,21) @sp 2 umlaut.texi(,22) @end titlepage umlaut.texi(,23) @page umlaut.texi(,24) @chapter This is what you get umlaut.texi(,25) Copright Sign: @copyright{} @* umlaut.texi(,26) Pound Sign: @pounds{} @* umlaut.texi(,27) Minus Zeichen: @minus{} @* umlaut.texi(,28) TeX Logo: @TeX{}@* umlaut.texi(,29) dots@{@}: @dots{}@* umlaut.texi(,30) bullet@{@}:@bullet{}@* umlaut.texi(,31) Vertical Bar:@* umlaut.texi(,32) | umlaut.texi(,33) umlaut.texi(,34) valid umlaut umlaut.texi(,35) @"a @"e @"i @"o @"u @"y umlaut.texi(,36) @"A @"E @"I @"O @"U umlaut.texi(,37) umlaut.texi(,38) umlaut.texi(,39) Non valid umlaut:@* umlaut.texi(,40) @"X @"x @"Q @"Y umlaut.texi(,41) umlaut.texi(,42) umlaut.texi(,43) Special characters in HTML:@* umlaut.texi(,44) < > & umlaut.texi(,45) umlaut.texi(,46) umlaut.texi(,47) acute accent:@* umlaut.texi(,48) @'a @'e @'i @'o @'u @'y umlaut.texi(,49) @'A @'E @'I @'O @'U @'Y umlaut.texi(,50) umlaut.texi(,51) invalid acute accent:@* umlaut.texi(,52) @'z @'q @'r umlaut.texi(,53) @'Z @'Q @'R umlaut.texi(,54) umlaut.texi(,55) valid Cedilla:@* umlaut.texi(,56) @,{c} @,{C} umlaut.texi(,57) umlaut.texi(,58) umlaut.texi(,59) non valid Cedilla:@* umlaut.texi(,60) @,{H} @,{h} umlaut.texi(,61) umlaut.texi(,62) macron:@* umlaut.texi(,63) @=o umlaut.texi(,64) umlaut.texi(,65) I don't know any invalid macron:@* umlaut.texi(,66) umlaut.texi(,67) umlaut.texi(,68) valid circumflex:@* umlaut.texi(,69) @^a @^e @^i @^o @^u umlaut.texi(,70) @^A @^E @^I @^O @^U umlaut.texi(,71) umlaut.texi(,72) umlaut.texi(,73) invalid circumflex:@* umlaut.texi(,74) @^z @^r @^t @^k umlaut.texi(,75) @^Z @^R @^T @^K umlaut.texi(,76) umlaut.texi(,77) umlaut.texi(,78) grave accent:@* umlaut.texi(,79) @`a @`e @`i @`o @`u umlaut.texi(,80) @`A @`E @`I @`O @`U umlaut.texi(,81) umlaut.texi(,82) umlaut.texi(,83) invalid grave accent:@* umlaut.texi(,84) @`z @`m @`p umlaut.texi(,85) umlaut.texi(,86) umlaut.texi(,87) umlaut.texi(,88) tilde accent:@* umlaut.texi(,89) @~a @~n @~o umlaut.texi(,90) @~A @~O umlaut.texi(,91) umlaut.texi(,92) invalid tilde accent:@* umlaut.texi(,93) @~Z @~s umlaut.texi(,94) umlaut.texi(,95) umlaut.texi(,96) umlaut.texi(,97) @dotaccent{o} umlaut.texi(,98) @H{o} umlaut.texi(,99) @ringaccent{o} umlaut.texi(,100) @tieaccent{oo} umlaut.texi(,101) @u{o} umlaut.texi(,102) @ubaraccent{o} umlaut.texi(,103) @udotaccent{o} umlaut.texi(,104) @v{o} umlaut.texi(,105) @exclamdown{} umlaut.texi(,106) @questiondown{} umlaut.texi(,107) @aa{} @AA{} umlaut.texi(,108) @ae{} @AE{} umlaut.texi(,109) @dotless{i} umlaut.texi(,110) @dotless{j} umlaut.texi(,111) @l{} @L{} umlaut.texi(,112) @o{} @O{} umlaut.texi(,113) @oe{} @OE{} umlaut.texi(,114) @ss{} umlaut.texi(,115) umlaut.texi(,116) What about @@url and @@uref umlaut.texi(,117) umlaut.texi(,118) @url{http://www.fido.de/~kama} umlaut.texi(,119) umlaut.texi(,120) Referenz:@* umlaut.texi(,121) @uref{http://www.fido.de/~kama} umlaut.texi(,122) umlaut.texi(,123) Referenz mit Display Text:@* umlaut.texi(,124) @uref{http://www.fido.de/~kama, Second Argument of uref} umlaut.texi(,125) umlaut.texi(,126) Referenz mit Display Text and special:@* umlaut.texi(,127) @uref{http://www.fido.de/~kama, Second Argument of uref, Third Argument of uref} umlaut.texi(,128) umlaut.texi(,129) Email:@* umlaut.texi(,130) @email{kama@@hippo.fido.de} umlaut.texi(,131) umlaut.texi(,132) Email mit display:@* umlaut.texi(,133) @email{kama@@hippo.fido.de, Anzeige der email Adrese} umlaut.texi(,134) @c I don't need any contents. umlaut.texi(,135) @contents umlaut.texi(,136) @bye texi2html-1.82/test/encodings/res/texi_umlaut/umlaut.passfirst0000644000175000017500000000735711264347117026602 0ustar flichtenheldflichtenheldumlaut.texi(,2) @c umlaut.texi(,3) @c umlaut.texi(,4) @c umlaut.texi(,5) @setfilename umlaut.info umlaut.texi(,6) @documentlanguage de umlaut.texi(,7) @c @documentlanguage zv umlaut.texi(,8) @settitle Test for Umlaute, accent etc. umlaut.texi(,9) @setchapternewpage on umlaut.texi(,10) @footnotestyle separate umlaut.texi(,23) @page umlaut.texi(,24) @chapter This is what you get umlaut.texi(,25) Copright Sign: @copyright{} @* umlaut.texi(,26) Pound Sign: @pounds{} @* umlaut.texi(,27) Minus Zeichen: @minus{} @* umlaut.texi(,28) TeX Logo: @TeX{}@* umlaut.texi(,29) dots@{@}: @dots{}@* umlaut.texi(,30) bullet@{@}:@bullet{}@* umlaut.texi(,31) Vertical Bar:@* umlaut.texi(,32) | umlaut.texi(,33) umlaut.texi(,34) valid umlaut umlaut.texi(,35) @"a @"e @"i @"o @"u @"y umlaut.texi(,36) @"A @"E @"I @"O @"U umlaut.texi(,37) umlaut.texi(,38) umlaut.texi(,39) Non valid umlaut:@* umlaut.texi(,40) @"X @"x @"Q @"Y umlaut.texi(,41) umlaut.texi(,42) umlaut.texi(,43) Special characters in HTML:@* umlaut.texi(,44) < > & umlaut.texi(,45) umlaut.texi(,46) umlaut.texi(,47) acute accent:@* umlaut.texi(,48) @'a @'e @'i @'o @'u @'y umlaut.texi(,49) @'A @'E @'I @'O @'U @'Y umlaut.texi(,50) umlaut.texi(,51) invalid acute accent:@* umlaut.texi(,52) @'z @'q @'r umlaut.texi(,53) @'Z @'Q @'R umlaut.texi(,54) umlaut.texi(,55) valid Cedilla:@* umlaut.texi(,56) @,{c} @,{C} umlaut.texi(,57) umlaut.texi(,58) umlaut.texi(,59) non valid Cedilla:@* umlaut.texi(,60) @,{H} @,{h} umlaut.texi(,61) umlaut.texi(,62) macron:@* umlaut.texi(,63) @=o umlaut.texi(,64) umlaut.texi(,65) I don't know any invalid macron:@* umlaut.texi(,66) umlaut.texi(,67) umlaut.texi(,68) valid circumflex:@* umlaut.texi(,69) @^a @^e @^i @^o @^u umlaut.texi(,70) @^A @^E @^I @^O @^U umlaut.texi(,71) umlaut.texi(,72) umlaut.texi(,73) invalid circumflex:@* umlaut.texi(,74) @^z @^r @^t @^k umlaut.texi(,75) @^Z @^R @^T @^K umlaut.texi(,76) umlaut.texi(,77) umlaut.texi(,78) grave accent:@* umlaut.texi(,79) @`a @`e @`i @`o @`u umlaut.texi(,80) @`A @`E @`I @`O @`U umlaut.texi(,81) umlaut.texi(,82) umlaut.texi(,83) invalid grave accent:@* umlaut.texi(,84) @`z @`m @`p umlaut.texi(,85) umlaut.texi(,86) umlaut.texi(,87) umlaut.texi(,88) tilde accent:@* umlaut.texi(,89) @~a @~n @~o umlaut.texi(,90) @~A @~O umlaut.texi(,91) umlaut.texi(,92) invalid tilde accent:@* umlaut.texi(,93) @~Z @~s umlaut.texi(,94) umlaut.texi(,95) umlaut.texi(,96) umlaut.texi(,97) @dotaccent{o} umlaut.texi(,98) @H{o} umlaut.texi(,99) @ringaccent{o} umlaut.texi(,100) @tieaccent{oo} umlaut.texi(,101) @u{o} umlaut.texi(,102) @ubaraccent{o} umlaut.texi(,103) @udotaccent{o} umlaut.texi(,104) @v{o} umlaut.texi(,105) @exclamdown{} umlaut.texi(,106) @questiondown{} umlaut.texi(,107) @aa{} @AA{} umlaut.texi(,108) @ae{} @AE{} umlaut.texi(,109) @dotless{i} umlaut.texi(,110) @dotless{j} umlaut.texi(,111) @l{} @L{} umlaut.texi(,112) @o{} @O{} umlaut.texi(,113) @oe{} @OE{} umlaut.texi(,114) @ss{} umlaut.texi(,115) umlaut.texi(,116) What about @@url and @@uref umlaut.texi(,117) umlaut.texi(,118) @url{http://www.fido.de/~kama} umlaut.texi(,119) umlaut.texi(,120) Referenz:@* umlaut.texi(,121) @uref{http://www.fido.de/~kama} umlaut.texi(,122) umlaut.texi(,123) Referenz mit Display Text:@* umlaut.texi(,124) @uref{http://www.fido.de/~kama, Second Argument of uref} umlaut.texi(,125) umlaut.texi(,126) Referenz mit Display Text and special:@* umlaut.texi(,127) @uref{http://www.fido.de/~kama, Second Argument of uref, Third Argument of uref} umlaut.texi(,128) umlaut.texi(,129) Email:@* umlaut.texi(,130) @email{kama@@hippo.fido.de} umlaut.texi(,131) umlaut.texi(,132) Email mit display:@* umlaut.texi(,133) @email{kama@@hippo.fido.de, Anzeige der email Adrese} umlaut.texi(,134) @c I don't need any contents. umlaut.texi(,135) @contents umlaut.texi(,136) @bye texi2html-1.82/test/encodings/res/texi_umlaut/umlaut.texi0000644000175000017500000000353411264347117025526 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @c @c @c @setfilename umlaut.info @documentlanguage de @c @documentlanguage zv @settitle Test for Umlaute, accent etc. @setchapternewpage on @footnotestyle separate @titlepage @title Title @subtitle SubTitle @author @copyright{} @page @vskip 0pt plus 1filll Copyright @copyright{} Who it is@* @sp 2 @end titlepage @page @chapter This is what you get Copright Sign: @copyright{} @* Pound Sign: @pounds{} @* Minus Zeichen: @minus{} @* TeX Logo: @TeX{}@* dots@{@}: @dots{}@* bullet@{@}:@bullet{}@* Vertical Bar:@* | valid umlaut @"a @"e @"i @"o @"u @"y @"A @"E @"I @"O @"U Non valid umlaut:@* @"X @"x @"Q @"Y Special characters in HTML:@* < > & acute accent:@* @'a @'e @'i @'o @'u @'y @'A @'E @'I @'O @'U @'Y invalid acute accent:@* @'z @'q @'r @'Z @'Q @'R valid Cedilla:@* @,{c} @,{C} non valid Cedilla:@* @,{H} @,{h} macron:@* @=o I don't know any invalid macron:@* valid circumflex:@* @^a @^e @^i @^o @^u @^A @^E @^I @^O @^U invalid circumflex:@* @^z @^r @^t @^k @^Z @^R @^T @^K grave accent:@* @`a @`e @`i @`o @`u @`A @`E @`I @`O @`U invalid grave accent:@* @`z @`m @`p tilde accent:@* @~a @~n @~o @~A @~O invalid tilde accent:@* @~Z @~s @dotaccent{o} @H{o} @ringaccent{o} @tieaccent{oo} @u{o} @ubaraccent{o} @udotaccent{o} @v{o} @exclamdown{} @questiondown{} @aa{} @AA{} @ae{} @AE{} @dotless{i} @dotless{j} @l{} @L{} @o{} @O{} @oe{} @OE{} @ss{} What about @@url and @@uref @url{http://www.fido.de/~kama} Referenz:@* @uref{http://www.fido.de/~kama} Referenz mit Display Text:@* @uref{http://www.fido.de/~kama, Second Argument of uref} Referenz mit Display Text and special:@* @uref{http://www.fido.de/~kama, Second Argument of uref, Third Argument of uref} Email:@* @email{kama@@hippo.fido.de} Email mit display:@* @email{kama@@hippo.fido.de, Anzeige der email Adrese} @c I don't need any contents. @contents @bye texi2html-1.82/test/encodings/res/texi_umlaut/umlaut.20000644000175000017500000000000011264347117024677 0ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/ogolat2/0000755000175000017500000000000011264347116022325 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/ogolat2/ogolat2.20000644000175000017500000000000011264347116023745 0ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/ogolat2/ogolat2.html0000644000175000017500000000374511264347116024573 0ustar flichtenheldflichtenheld Untitled Document

    OgoL2

    Latin 2 (precomposed). Aogonek: aogonek: standalone ogonek: Eogonek: eogonek:

    Accented. Ą ą Ę ę Į į Ǫ ǫ Ų ų


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/texi_ogoutf/0000755000175000017500000000000011264347116023312 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/texi_ogoutf/ogoutf.20000644000175000017500000000000011264347116024666 0ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/texi_ogoutf/ogoutf.passtexi0000644000175000017500000000152311264347116026400 0ustar flichtenheldflichtenheldogoutf.texi(,2) @setfilename ogonek.info ogoutf.texi(,3) @documentencoding UTF-8 ogoutf.texi(,4) @settitle Ogonek ogoutf.texi(,5) ogoutf.texi(,6) @titlepage ogoutf.texi(,7) @title AE ĄĘ ae ąę ogoutf.texi(,8) @subtitle AE @ogonek{A}@ogonek{E} ogoutf.texi(,9) @author J@ogonek{a}n Stępień @email{hello@@there} ogoutf.texi(,10) AE ĄĘ ae ąę, looks nice. ogoutf.texi(,11) @end titlepage ogoutf.texi(,12) ogoutf.texi(,13) @node Top ogoutf.texi(,14) @chapter Top AE @ogonek{a}@ogonek{e} ogoutf.texi(,15) ogoutf.texi(,16) @section AE ĄĘ ae ąę ogoutf.texi(,17) ogoutf.texi(,18) Zażółć gęślą jaźń! ogoutf.texi(,19) ogoutf.texi(,20) Zazolc gesla jazn! ogoutf.texi(,21) ogoutf.texi(,22) @cindex @ogonek{A}@ogonek{a} ogoutf.texi(,23) @cindex @ogonek{e}@ogonek{E} ogoutf.texi(,24) @printindex cp ogoutf.texi(,25) ogoutf.texi(,26) @bye texi2html-1.82/test/encodings/res/texi_ogoutf/ogoutf.texi0000644000175000017500000000070111264347116025506 0ustar flichtenheldflichtenheld\input texinfo @setfilename ogonek.info @documentencoding UTF-8 @settitle Ogonek @titlepage @title AE ĄĘ ae ąę @subtitle AE @ogonek{A}@ogonek{E} @author J@ogonek{a}n Stępień @email{hello@@there} AE ĄĘ ae ąę, looks nice. @end titlepage @node Top @chapter Top AE @ogonek{a}@ogonek{e} @section AE ĄĘ ae ąę Zażółć gęślą jaźń! Zazolc gesla jazn! @cindex @ogonek{A}@ogonek{a} @cindex @ogonek{e}@ogonek{E} @printindex cp @bye texi2html-1.82/test/encodings/res/texi_ogoutf/ogoutf.passfirst0000644000175000017500000000111511264347116026553 0ustar flichtenheldflichtenheldogoutf.texi(,2) @setfilename ogonek.info ogoutf.texi(,3) @documentencoding UTF-8 ogoutf.texi(,4) @settitle Ogonek ogoutf.texi(,5) ogoutf.texi(,12) ogoutf.texi(,13) @node Top ogoutf.texi(,14) @chapter Top AE @ogonek{a}@ogonek{e} ogoutf.texi(,15) ogoutf.texi(,16) @section AE ĄĘ ae ąę ogoutf.texi(,17) ogoutf.texi(,18) Zażółć gęślą jaźń! ogoutf.texi(,19) ogoutf.texi(,20) Zazolc gesla jazn! ogoutf.texi(,21) ogoutf.texi(,22) @cindex @ogonek{A}@ogonek{a} ogoutf.texi(,23) @cindex @ogonek{e}@ogonek{E} ogoutf.texi(,24) @printindex cp ogoutf.texi(,25) ogoutf.texi(,26) @bye texi2html-1.82/test/encodings/res/accentenc/0000755000175000017500000000000011264347116022701 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/accentenc/accentenc.html0000644000175000017500000000630311264347116025514 0ustar flichtenheldflichtenheld Accent encoding test

    Accent encoding test top

    should be e‘: è è

    should be e’: é é

    should be e^: ê ê

    should be u": ü ü

    should be i‘: ì ì

    should be i’: í í

    should be i^: î î

    should be u": ü ü

    should be c,: ç ç

    should be n~: ñ ñ

    should be e=: ē ē

    should be e’’: e'' e''

    should be e.: ė ė

    should be e*: e* e*

    should be ee[: ee[

    should be e(: ĕ ĕ

    should be e_: e_ e_

    should be .e: ẹ ẹ

    should be e<: e< e<

    upside down: ¿ ¡

    A-with-circle: å,Å

    AE, OE ligatures: æ Æ œ Œ

    dotless i, j: i j

    Polish suppressed-L: ł Ł

    O-with-slash: ø Ø

    es-zet or sharp S: ß

    pounds sterling: £

    should be dotless i‘: ì

    should be dotless i’: í

    should be dotless i^: î

    should be dotless i": ï

    should be dotless j‘: j`

    should be dotless j’: j'

    should be dotless j^: ĵ

    should be dotless j": j"


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/accentenc/accentenc.20000644000175000017500000000000011264347116024675 0ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/unknown_language/0000755000175000017500000000000011264347116024320 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/unknown_language/unknown_language.20000644000175000017500000000023311264347116027743 0ustar flichtenheldflichtenheld*** Language specs for 'unknown' do not exists. Reverting to 'en' (l. 5) *** Language specs for 'another_UNKNOWN' do not exists. Reverting to 'en' (l. 12) texi2html-1.82/test/encodings/res/unknown_language/unknown_language.html0000644000175000017500000000374111264347116030555 0ustar flichtenheldflichtenheld Untitled Document

    unknkown language

    Unknown language. See section unknkown language.

    Another unknown language. See section unknkown language.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_chapter/0000755000175000017500000000000011264347117024312 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/nodetest_chapter/nodetest.20000644000175000017500000000010011264347116026210 0ustar flichtenheldflichtenheld*** Node equivalent with `@aa{}' already used `@ringaccent{a}' texi2html-1.82/test/encodings/res/nodetest_chapter/nodetest_2.html0000644000175000017500000005324611264347117027260 0ustar flichtenheldflichtenheld Untitled Document: 2. acute accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. acute accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.1 á

    With brace á. Testing ’ " ‘ ^.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2 é


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3 í


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4 ó


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.5 ú


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.6 ý


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.7 Á


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.8 É


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.9 Í


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.10 Ó


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.11 Ú


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.12 Ý

    This is a ref to ü (see section ü). Another one, with node only (see section ü).


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_chapter/nodetest_1.html0000644000175000017500000006235411264347117027257 0ustar flichtenheldflichtenheld Untitled Document: 1. Umlaut
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Umlaut


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 ä

    ref to ç ç.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2 ë


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.3 ï


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4 With brace ï


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.5 With dotless ï

    before footnote See footanchor.

    (1)

    after footnote See footanchor.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.6 ö

    Ref to an anchor at the end of the doc (see there is an o-é could there be an î).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.7 ü

    Another ref to an anchor (see x-spot).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.8 ÿ

    This is a ref to a node (see section Ú).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.9 Ä

    Now a ref to a node without sectionning command, no text (see no section). With text (see but a text).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.10 Ë


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.11 Ï


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.12 Ö


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.13 Ü


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.14 ß

    This is a node without sectioning command.


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_chapter/nodetest_abt.html0000644000175000017500000001213611264347117027656 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_chapter/nodetest_5.html0000644000175000017500000002672311264347117027263 0ustar flichtenheldflichtenheld Untitled Document: 5. tilde accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5. tilde accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.1 ã


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.2 ñ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.3 õ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.4 Ã


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.5 Õ

    This marks the spot. A second one with accented char .


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_chapter/nodetest_toc.html0000644000175000017500000002334611264347117027702 0ustar flichtenheldflichtenheld Untitled Document: Table of Contents
    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_chapter/nodetest_6.html0000644000175000017500000002073211264347117027256 0ustar flichtenheldflichtenheld Untitled Document: 6. cedilla accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6. cedilla accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.1 ç


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.2 Ç


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.3 ç no brace


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_chapter/nodetest_fot.html0000644000175000017500000000541411264347116027700 0ustar flichtenheldflichtenheld Untitled Document: Footnotes
    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_chapter/nodetest_4.html0000644000175000017500000005330411264347117027255 0ustar flichtenheldflichtenheld Untitled Document: 4. circumflex accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4. circumflex accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.1 â


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.2 ê


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3 î


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.4 î

    Test @^{i}.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.5 î

    Test @^{@dotless{i}}.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.6 ô


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.7 û


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.8 Â


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.9 Ê


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.10 Î


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.11 Ô


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.12 Û


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_chapter/nodetest.html0000644000175000017500000000764011264347117027034 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Top


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_chapter/nodetest_3.html0000644000175000017500000005312211264347117027252 0ustar flichtenheldflichtenheld Untitled Document: 3. grave accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. grave accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.1 à


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.2 è


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.3 ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.4 ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.5 ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.6 ò


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.7 ù


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.8 À


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.9 È


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.10 Ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.11 Ò


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.12 Ù


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_chapter/nodetest_7.html0000644000175000017500000010153411264347117027257 0ustar flichtenheldflichtenheld Untitled Document: 7. rest
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7. rest


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.1 å


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.2 æ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.3 œ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.4 Å


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.5 Æ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.6 Œ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.7 ł


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.8 ø


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.9 Ł


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.10 Ø


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.11 a''


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.12 ă


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.13 a<


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.14 ạ

    Test udotaccent.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.15 ȧ

    Test dotaccent.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.16 å


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.17 a[


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.18 a_


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.19 i


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.20 j

    ...

    ¡

    ¿

    £

    @- : @ followed by end of line:   @ followed by tab:   @ followed by space   @*:
    and text followin @*.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.21 ,


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/at_commands_in_refs_utf8_use_nodes_no_unicode/0000755000175000017500000000000011264347116032164 5ustar flichtenheldflichtenheld././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootroottexi2html-1.82/test/encodings/res/at_commands_in_refs_utf8_use_nodes_no_unicode/at_commands_in_refs_utf8.2texi2html-1.82/test/encodings/res/at_commands_in_refs_utf8_use_nodes_no_unicode/at_commands_in_refs_0000644000175000017500000000007711264347116036244 0ustar flichtenheldflichtenheld** Document encoding is utf8, but there is no unicode support texi2html-1.82/test/encodings/res/at_commands_in_refs_utf8_use_nodes_no_unicode/index.html0000644000175000017500000000331711264347116034165 0ustar flichtenheldflichtenheld Untitled Document: Top

    The node you are looking for is at Top.

    ././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootroottexi2html-1.82/test/encodings/res/at_commands_in_refs_utf8_use_nodes_no_unicode/at_commands_in_refs_utf8_abt.htmltexi2html-1.82/test/encodings/res/at_commands_in_refs_utf8_use_nodes_no_unicode/at_commands_in_refs_0000644000175000017500000001177611264347116036254 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    ././@LongLink0000000000000000000000000000020500000000000011562 Lustar rootroottexi2html-1.82/test/encodings/res/at_commands_in_refs_utf8_use_nodes_no_unicode/A-SC-node-i-i-E-l-C-_00a1-_00c3_00a0-_00c3_0082.htmltexi2html-1.82/test/encodings/res/at_commands_in_refs_utf8_use_nodes_no_unicode/A-SC-node-i-i-E-l-C-0000644000175000017500000000731511264347116035047 0ustar flichtenheldflichtenheld Untitled Document: 1. A SC node ï ï Ē` ł Ć, ¡ à Â
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. A SC node ï ï Ē` ł Ć, ¡ à Â

    see (manual)a strong ref with SC, a i trema ï, a dotless i trema ï Ē` and exclamdown ¡ à Â.


    This document was generated by a tester on a sunny day using texi2html.

    ././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootroottexi2html-1.82/test/encodings/res/at_commands_in_refs_utf8_use_nodes_no_unicode/at_commands_in_refs_utf8.htmltexi2html-1.82/test/encodings/res/at_commands_in_refs_utf8_use_nodes_no_unicode/at_commands_in_refs_0000644000175000017500000000567411264347116036254 0ustar flichtenheldflichtenheld Untitled Document: Top
    [Top] [Contents] [Index] [ ? ]

    Top


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_latin1_no_unicode/0000755000175000017500000000000011264347116026255 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/nodetest_latin1_no_unicode/nodetest_latin1.20000644000175000017500000000010011264347116031424 0ustar flichtenheldflichtenheld*** Node equivalent with `@aa{}' already used `@ringaccent{a}' texi2html-1.82/test/encodings/res/nodetest_latin1_no_unicode/nodetest_latin1.html0000644000175000017500000037744311264347116032262 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Top


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Umlaut


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1

    ref to .


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.3

    before footnote See footanchor.

    (1)

    after footnote See footanchor.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4

    Ref to an anchor at the end of the doc (see there is an o- could there be an î).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.5

    Another ref to an anchor (see x-spot).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.6

    This is a ref to a node (see section ).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.7

    Now a ref to a node without sectionning command, no text (see no section). With text (see but a text).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.8


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.9


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.10


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.11


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.12 ß

    This is a node without sectioning command.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. acute accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.1 á

    With brace á. Testing ’ " ‘ ^.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3 í


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4 ó


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.5 ú


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.6 ý


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.7 Á


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.8 É


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.9 Í


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.10 Ó


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.11 Ú


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.12 Ý

    This is a ref to (see section ). Another one, with node only (see section ).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. grave accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.1


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.2


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.3 ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.4 ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.5 ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.6 ò


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.7


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.8 À


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.9 È


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.10 Ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.11 Ò


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.12 Ù


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4. circumflex accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.1


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.2


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.4


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.5


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.6


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.7


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.8


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.9


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.10


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5. tilde accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.1 ã


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.2 ñ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.3 õ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.4 Ã


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.5 Õ

    This marks the spot. A second one with accented char .


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6. cedilla accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.1


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.2 Ç


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7. rest


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.1 å


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.2 æ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.3 œ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.4 Å


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.5 Æ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.6 Œ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.7 ł


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.8 ø


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.9 Ł


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.10 Ø


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.11 a''


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.12 ă


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.13 a<


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.14 ạ

    Test udotaccent.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.15 ȧ

    Test dotaccent.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.16 å


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.17 a[


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.18 a_


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.19 i


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.20 j

    ...

    ¡

    ¿

    £

    @- : @ followed by end of line:   @ followed by tab:   @ followed by space   @*:
    and text followin @*.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.21 ,

    An index entry with accented letter.

    Jump to:   I  
    Index Entry Section

    I
    index entry with accented letter: à7.21 ,
    index entry with accented letter: à7.21 ,

    Jump to:   I  

    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/formatting_fr_icons/0000755000175000017500000000000011264347116025012 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/formatting_fr_icons/formatting.20000644000175000017500000002243411264347116027254 0ustar flichtenheldflichtenheld** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} (l. 38 in @mymacro) ** Unknown command `@#' (left as is) (l. 38 in @mymacro) *** no file argument for @image (l. 38 in @mymacro) *** no file argument for @image (l. 38 in @mymacro) *** no file argument for @image (l. 38 in @mymacro) *** '}' without opening '{' before: (l. 38 in @mymacro) *** '}' without opening '{' before: (l. 38 in @mymacro) *** '{' without macro. Before: (l. 38 in @mymacro) *** '{' without macro. Before: and after (l. 38 in @mymacro) *** Undefined node `node' in @ref (l. 38 in @mymacro) *** Undefined node `' in @ref (l. 38 in @mymacro) *** Undefined node `' in @ref (l. 38 in @mymacro) *** Undefined node `node' in @ref (l. 38 in @mymacro) *** Undefined node `node' in @ref (l. 38 in @mymacro) *** Undefined node `node' in @ref (l. 38 in @mymacro) *** Undefined node `' in @ref (l. 38 in @mymacro) *** First argument to @inforef may not be empty (l. 38 in @mymacro) *** First argument to @inforef may not be empty (l. 38 in @mymacro) *** First argument to @inforef may not be empty (l. 38 in @mymacro) *** First argument to @inforef may not be empty (l. 38 in @mymacro) ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} (l. 42 in @mymacro) ** Unknown command `@#' (left as is) (l. 42 in @mymacro) *** no file argument for @image (l. 42 in @mymacro) *** no file argument for @image (l. 42 in @mymacro) *** no file argument for @image (l. 42 in @mymacro) *** '}' without opening '{' before: (l. 42 in @mymacro) *** '}' without opening '{' before: (l. 42 in @mymacro) *** '{' without macro. Before: (l. 42 in @mymacro) *** '{' without macro. Before: and after (l. 42 in @mymacro) *** Undefined node `node' in @ref (l. 42 in @mymacro) *** Undefined node `' in @ref (l. 42 in @mymacro) *** Undefined node `' in @ref (l. 42 in @mymacro) *** Undefined node `node' in @ref (l. 42 in @mymacro) *** Undefined node `node' in @ref (l. 42 in @mymacro) *** Undefined node `node' in @ref (l. 42 in @mymacro) *** Undefined node `' in @ref (l. 42 in @mymacro) *** First argument to @inforef may not be empty (l. 42 in @mymacro) *** First argument to @inforef may not be empty (l. 42 in @mymacro) *** First argument to @inforef may not be empty (l. 42 in @mymacro) *** First argument to @inforef may not be empty (l. 42 in @mymacro) texi2html-1.82/test/encodings/res/formatting_fr_icons/formatting.html0000644000175000017500000056567311264347116030100 0ustar flichtenheldflichtenheld title –a
    Racine: Top section Table des matières: Table des matières Index: Top section A propos: A propos de ce document

    Insertcopying in normal text

    In copying

    < > " & ’ ‘

    “simple-double–three—four—-”
    code: ``simple-double--three---four----''
    asis: “simple-double–three—four—-”
    strong: “simple-double–three—four—-”
    kbd: ``simple-double--three---four----''

    ‘‘simple-double--three—four—-’’

    @"u ü @"{U} Ü @~n ñ @^a â @’e é @=o ō @‘i ì @’{e} é @’{@dotless{i}} í @dotless{i} i @dotless{j} j @‘{@=E} Ē` @l{} ł @,{@’C} Ć, @,c ç @,c@"u çü

    @*
    @ followed by a space   @ followed by a tab   @ followed by a new line  @- @| @: @! ! @? ? @. . @@ @ @} } @{ { @/

    foo vs. bar. colon :And something else. semi colon ;. And ? ?. Now ! !@ but , ,

    @TeX TeX @LaTeX LaTeX @bullet • @copyright © @dots … @enddots ... @equiv ≡ @error error--> @expansion → @minus - @point ∗ @print -| @result ⇒ @today a sunny day @aa å @AA Å @ae æ @oe œ @AE Æ @OE Œ @o ø @O Ø @ss ß @l ł @L Ł @exclamdown ¡ @questiondown ¿ @pounds £ @registeredsymbol ® @ordf ª @ordm º @comma , @quotedblleft “ @quotedblright ” @quoteleft ‘ @quoteright ’ @quotedblbase „ @quotesinglbase ‚ @guillemetleft « @guillemetright » @guillemotleft « @guillemotright » @guilsinglleft ‹ @guilsinglright › @textdegree ° @euro € @arrow → @leq ≤ @geq ≥

    @acronym{--a,an accronym} –a (an accronym) @acronym{--a} –a @abbr{@'E--. @comma{}A., @'Etude Autonome } É–. ,A. (Étude Autonome) @abbr{@'E--. @comma{}A.} É–. ,A. @asis{--a} –a @b{--a} –a @cite{--a} –a @code{--a} --a @command{--a} --a @ctrl{--a} –a @dfn{--a} –a @dmn{--a} –a @email{--a,--b} –b @email{,--b} –b @email{--a} --a @emph{--a} –a @env{--a} --a @file{--a}--a@i{--a} –a @kbd{--a} --a @key{--a} <--a> @math{--a {\frac{1}{2}} @minus{}} –a \frac12 - @option{--a}--a@r{--a} –a @samp{--a}--a@sc{--a} –A @strong{--a} –a @t{--a} –a @sansserif{--a} –a @titlefont{--a}

    –a

    @indicateurl{--a} <--a> @uref{--a,--b} –b @uref{--a} --a @uref{,--b} –b @uref{--a,--b,--c} –c @uref{,--b,--c} –c @uref{--a,,--c} –c @uref{,,--c} –c @url{--a,--b} –b @url{--a,} --a @url{,--b} –b @var{--a} –a @verb{:--a:} --a @verb{:a < & @ % " -- b:} a < & @ % " -- b @w{} @H{a} a'' @H{--a} –a'' @dotaccent{a} ȧ @dotaccent{--a} –a. @ringaccent{a} å @ringaccent{--a} –a* @tieaccent{a} a[ @tieaccent{--a} –a[ @u{a} ă @u{--a} –a( @ubaraccent{a} a_ @ubaraccent{--a} –a_ @udotaccent{a}@udotaccent{--a} .–a @v{a} a< @v{--a} –a< @,{c} ç @,{--c} –c, @ogonek{a} ą @ogonek{--a} –a; @footnote{in footnote} (1) @footnote{in footnote2} (2)

    @image{f--ile} f--ile @image{f--ile,l--i} f--ile @image{f--ile,,l--e} f--ile @image{f--ile,,,alt} alt @image{f--ile,,,,e-d-xt} f--ile @image{f--ile,aze,az,alt,e--xt} alt @image{f-ile,aze,,a--lt} a–lt @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} alt



    @clicksequence{click @click{} A} click → A After clickstyle ⇒ @clicksequence{click @click{} A} click ⇒ A

    A quot—ation

    Note: A Note

    note: A note

    Caution: Caution

    Important: Important

    Tip: a Tip

    Warning: a Warning.

    something é TeX: The something é TeX is here.

    @ at the end of line A @ at the end of the @quotation line.

    something, other thing: something, other thing

    Note, the note: Note, the note

    Empty:

    :


    :

    A small quot—ation

    Note: A small Note

    something, other thing: something, other thing

    • i–temize
    • + i–tem +
    • b–ullet
    • - minu–s
    • e–mph item
    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
    trucbidule
     
    e--xample  some
       text
    
     
    s--mallexample
    
     
    d–isplay
    
     
    s–malldisplay
    
     
    l--isp
    
     
    s--malllisp
    
     
    f–ormat
    
     
    s–mallformat
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    cate--gory: de--ffn_name ar--guments more args
    even more so

    def–fn

    fset: i a g
    cmde: truc
    Command: log trap
    Command: log trap1
    Command: log trap2
    cmde: id ule truc
    cmde2: id ‘i’ ule truc
    id ‘i’ ule:
    :
    aaa:
    :
    :
    : machin
    : bidule machin
    truc: machin
    truc:
    truc: followed by a comment
    truc:
    :
    truc: a b c d e f g h i
    truc: deffnx before end deffn
    empty: deffn
    empty: deffn with deffnx
    empty: deffnx
    fset: i a g
    cmde: truc

    text in def item for second def item

    c--ategory: d--efvr_name

    d–efvr

    c--ategory: t--ype d--eftypefn_name a--rguments...

    d–eftypefn

    c--ategory de c--lass: t--ype d--eftypeop_name a--rguments...

    d–eftypeop

    c--ategory: t--ype d--eftypevr_name

    d–eftypevr

    c--ategory de c--lass: d--efcv_name

    d–efcv

    c--ategory de c--lass: d--efop_name a--rguments...

    d–efop

    c--ategory: d--eftp_name a--ttributes...

    d–eftp

    Function: d--efun_name a--rguments...

    d–efun

    Macro: d--efmac_name a--rguments...

    d–efmac

    Special Form: d--efspec_name a--rguments...

    d–efspec

    Variable: d--efvar_name argvar argvar1

    d–efvar

    User Option: d--efopt_name

    d–efopt

    Function: t--ype d--eftypefun_name a--rguments...

    d–eftypefun

    Variable: t--ype d--eftypevar_name

    d–eftypevar

    Instance Variable de c--lass: d--efivar_name

    d–efivar

    Instance Variable de c--lass: t--ype d--eftypeivar_name

    d–eftypeivar

    Method de c--lass: d--efmethod_name a--rguments...

    d–efmethod

    Method de c--lass: t--ype d--eftypemethod_name a--rguments...

    d–eftypemethod

    @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} Voir cross r—ef name@: (file n—ame@)c—hapter@ section ‘t—itle@’ dans ma—nual@. @ref{chapter, cross ref name, title, file name, manual} cross ref name: (file name)chapter section ‘title’ dans manual @pxref{chapter, cross ref name, title, file name, manual} voir cross ref name: (file name)chapter section ‘title’ dans manual @inforef{chapter, cross ref name, file name} Voir cross ref name: (file name)chapter

    @ref{chapter} chapter @xref{chapter} Voir la section chapter. @pxref{chapter} voir la section chapter @ref{s--ect@comma{}ion} A section

    @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } a , in cross ref: (a comma, in file)s–ect,ion section ‘a comma, in title’ dans a , in manual name

    @ref{chapter,cross ref name} cross ref name @ref{chapter,,title} title @ref{chapter,,,file name} (file name)chapter @ref{chapter,,,,manual} section ‘chapter’ dans manual @ref{chapter,cross ref name,title,} title @ref{chapter,cross ref name,,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,,,manual} section ‘chapter’ dans manual @ref{chapter,cross ref name,title,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,title,,manual} section ‘title’ dans manual @ref{chapter,cross ref name,title, file name, manual} cross ref name: (file name)chapter section ‘title’ dans manual @ref{chapter,,title,file name} (file name)chapter @ref{chapter,,title,,manual} section ‘title’ dans manual @ref{chapter,,title, file name, manual} (file name)chapter section ‘title’ dans manual @ref{chapter,,,file name,manual} (file name)chapter section ‘chapter’ dans manual

    @ref{(pman)anode,cross ref name} cross ref name: (pman)anode @ref{(pman)anode,,title} (pman)anode @ref{(pman)anode,,,file name} (file name)anode @ref{(pman)anode,,,,manual} (pman)anode section ‘anode’ dans manual @ref{(pman)anode,cross ref name,title,} cross ref name: (pman)anode @ref{(pman)anode,cross ref name,,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,,,manual} cross ref name: (pman)anode section ‘anode’ dans manual @ref{(pman)anode,cross ref name,title,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,title,,manual} cross ref name: (pman)anode section ‘title’ dans manual @ref{(pman)anode,cross ref name,title, file name, manual} cross ref name: (file name)anode section ‘title’ dans manual @ref{(pman)anode,,title,file name} (file name)anode @ref{(pman)anode,,title,,manual} (pman)anode section ‘title’ dans manual @ref{(pman)anode,,title, file name, manual} (file name)anode section ‘title’ dans manual @ref{(pman)anode,,,file name,manual} (file name)anode section ‘anode’ dans manual

    @inforef{chapter, cross ref name, file name} Voir cross ref name: (file name)chapter @inforef{chapter} @inforef{chapter, cross ref name} @inforef{chapter,,file name} Voir (file name)chapter @inforef{node, cross ref name, file name} Voir cross ref name: (file name)node @inforef{node} @inforef{node, cross ref name} @inforef{node,,file name} Voir (file name)node @inforef{chapter, cross ref name, file name, spurious arg} Voir cross ref name: (file name, spurious arg)chapter

    @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} Voir a , in cross ref: (a comma, in file)s–ect,ion

    • a

    l–ine

    a
    b

    l–ine

    - a
    - b

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    \input texinfo @c -*-texinfo-*-
    
    @setfilename simplest.info
    
    @node Top
    
    This is a very simple texi manual @  <>.
    
    @bye
    
    in verbatim ''
    
    html ''

    majorheading

    chapheading

    heading

    subheading

    subsubheading

    @acronym{--a,an accronym @comma{} @enddots{}} –a (an accronym , ...) @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } É–. ,A. (Étude–, Autonome) @abbr{@'E--. @comma{}A.} É–. ,A.

    @math{--a@minus{} {\frac{1}{2}}} –a- \frac12

    @image{f-ile,,,alt@verb{:jk _" %}} altjk _" %@ @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} jk _" %@ in b " @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} altjk _" %@

    Somehow invalid use of @,:
    @, ,
    @,@"u @,"u

    Invalid use of @’:
    @’ ’
    @’@"u @'"u

    @dotless{truc} truc @dotless{ij} ij @dotless{--a} –a @dotless{a} a

    @TeX, but without brace TeX

    @# @#

    @w{--a} –a

    @image{,1--xt} @image{,,2--xt} @image{,,,3--xt}


    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    fun:
    truc: machin bidule chose and
    truc: machin bidule chose and after
    truc: machin bidule chose and {
    truc: machin bidule chose and { and after
    truc: followed by a comment

    Various deff lines

    truc: after a deff item

    @ref{node} @ref{node}

    @ref{,cross ref name} @ref{,cross ref name} @ref{,,title} @ref{,,title} @ref{,,,file name} (file name) @ref{,,,,manual} manual @ref{node,cross ref name} @ref{node,cross ref name} @ref{node,,title} @ref{node,,title} @ref{node,,,file name} (file name)node @ref{node,,,,manual} section ‘node’ dans manual @ref{node,cross ref name,title,} @ref{node,cross ref name,title,} @ref{node,cross ref name,,file name} cross ref name: (file name)node @ref{node,cross ref name,,,manual} section ‘node’ dans manual @ref{node,cross ref name,title,file name} cross ref name: (file name)node @ref{node,cross ref name,title,,manual} section ‘title’ dans manual @ref{node,cross ref name,title, file name, manual} cross ref name: (file name)node section ‘title’ dans manual @ref{node,,title,file name} (file name)node @ref{node,,title,,manual} section ‘title’ dans manual @ref{chapter,,title, file name, manual} (file name)chapter section ‘title’ dans manual @ref{node,,title, file name, manual} (file name)node section ‘title’ dans manual @ref{node,,,file name,manual} (file name)node section ‘node’ dans manual @ref{,cross ref name,title,} @ref{,cross ref name,title,} @ref{,cross ref name,,file name} cross ref name: (file name) @ref{,cross ref name,,,manual} manual @ref{,cross ref name,title,file name} cross ref name: (file name) @ref{,cross ref name,title,,manual} section ‘title’ dans manual @ref{,cross ref name,title, file name, manual} cross ref name: (file name) section ‘title’ dans manual @ref{,,title,file name} (file name) @ref{,,title,,manual} section ‘title’ dans manual @ref{,,title, file name, manual} (file name) section ‘title’ dans manual @ref{,,,file name,manual} (file name) manual

    @inforef{,cross ref name } @inforef{,,file name} @inforef{,cross ref name, file name} @inforef{}

    Normal text

    < > " & ’ ‘

    “simple-double–three—four—-”
    code: ``simple-double--three---four----''
    asis: “simple-double–three—four—-”
    strong: “simple-double–three—four—-”
    kbd: ``simple-double--three---four----''

    ‘‘simple-double--three—four—-’’

    @"u ü @"{U} Ü @~n ñ @^a â @’e é @=o ō @‘i ì @’{e} é @’{@dotless{i}} í @dotless{i} i @dotless{j} j @‘{@=E} Ē` @l{} ł @,{@’C} Ć, @,c ç @,c@"u çü

    @*
    @ followed by a space   @ followed by a tab   @ followed by a new line  @- @| @: @! ! @? ? @. . @@ @ @} } @{ { @/

    foo vs. bar. colon :And something else. semi colon ;. And ? ?. Now ! !@ but , ,

    @TeX TeX @LaTeX LaTeX @bullet • @copyright © @dots … @enddots ... @equiv ≡ @error error--> @expansion → @minus - @point ∗ @print -| @result ⇒ @today a sunny day @aa å @AA Å @ae æ @oe œ @AE Æ @OE Œ @o ø @O Ø @ss ß @l ł @L Ł @exclamdown ¡ @questiondown ¿ @pounds £ @registeredsymbol ® @ordf ª @ordm º @comma , @quotedblleft “ @quotedblright ” @quoteleft ‘ @quoteright ’ @quotedblbase „ @quotesinglbase ‚ @guillemetleft « @guillemetright » @guillemotleft « @guillemotright » @guilsinglleft ‹ @guilsinglright › @textdegree ° @euro € @arrow → @leq ≤ @geq ≥

    @acronym{--a,an accronym} –a (an accronym) @acronym{--a} –a @abbr{@'E--. @comma{}A., @'Etude Autonome } É–. ,A. (Étude Autonome) @abbr{@'E--. @comma{}A.} É–. ,A. @asis{--a} –a @b{--a} –a @cite{--a} –a @code{--a} --a @command{--a} --a @ctrl{--a} –a @dfn{--a} –a @dmn{--a} –a @email{--a,--b} –b @email{,--b} –b @email{--a} --a @emph{--a} –a @env{--a} --a @file{--a}--a@i{--a} –a @kbd{--a} --a @key{--a} <--a> @math{--a {\frac{1}{2}} @minus{}} –a \frac12 - @option{--a}--a@r{--a} –a @samp{--a}--a@sc{--a} –A @strong{--a} –a @t{--a} –a @sansserif{--a} –a @titlefont{--a}

    –a

    @indicateurl{--a} <--a> @uref{--a,--b} –b @uref{--a} --a @uref{,--b} –b @uref{--a,--b,--c} –c @uref{,--b,--c} –c @uref{--a,,--c} –c @uref{,,--c} –c @url{--a,--b} –b @url{--a,} --a @url{,--b} –b @var{--a} –a @verb{:--a:} --a @verb{:a < & @ % " -- b:} a < & @ % " -- b @w{} @H{a} a'' @H{--a} –a'' @dotaccent{a} ȧ @dotaccent{--a} –a. @ringaccent{a} å @ringaccent{--a} –a* @tieaccent{a} a[ @tieaccent{--a} –a[ @u{a} ă @u{--a} –a( @ubaraccent{a} a_ @ubaraccent{--a} –a_ @udotaccent{a}@udotaccent{--a} .–a @v{a} a< @v{--a} –a< @,{c} ç @,{--c} –c, @ogonek{a} ą @ogonek{--a} –a; @footnote{in footnote} (1) @footnote{in footnote2} (2)

    @image{f--ile} f--ile @image{f--ile,l--i} f--ile @image{f--ile,,l--e} f--ile @image{f--ile,,,alt} alt @image{f--ile,,,,e-d-xt} f--ile @image{f--ile,aze,az,alt,e--xt} alt @image{f-ile,aze,,a--lt} a–lt @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} alt



    @clicksequence{click @click{} A} click → A After clickstyle ⇒ @clicksequence{click @click{} A} click ⇒ A

    A quot—ation

    Note: A Note

    note: A note

    Caution: Caution

    Important: Important

    Tip: a Tip

    Warning: a Warning.

    something é TeX: The something é TeX is here.

    @ at the end of line A @ at the end of the @quotation line.

    something, other thing: something, other thing

    Note, the note: Note, the note

    Empty:

    :


    :

    A small quot—ation

    Note: A small Note

    something, other thing: something, other thing

    • i–temize
    • + i–tem +
    • b–ullet
    • - minu–s
    • e–mph item
    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
    trucbidule
     
    e--xample  some
       text
    
     
    s--mallexample
    
     
    d–isplay
    
     
    s–malldisplay
    
     
    l--isp
    
     
    s--malllisp
    
     
    f–ormat
    
     
    s–mallformat
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    cate--gory: de--ffn_name ar--guments more args
    even more so

    def–fn

    fset: i a g
    cmde: truc
    Command: log trap
    Command: log trap1
    Command: log trap2
    cmde: id ule truc
    cmde2: id ‘i’ ule truc
    id ‘i’ ule:
    :
    aaa:
    :
    :
    : machin
    : bidule machin
    truc: machin
    truc:
    truc: followed by a comment
    truc:
    :
    truc: a b c d e f g h i
    truc: deffnx before end deffn
    empty: deffn
    empty: deffn with deffnx
    empty: deffnx
    fset: i a g
    cmde: truc

    text in def item for second def item

    c--ategory: d--efvr_name

    d–efvr

    c--ategory: t--ype d--eftypefn_name a--rguments...

    d–eftypefn

    c--ategory de c--lass: t--ype d--eftypeop_name a--rguments...

    d–eftypeop

    c--ategory: t--ype d--eftypevr_name

    d–eftypevr

    c--ategory de c--lass: d--efcv_name

    d–efcv

    c--ategory de c--lass: d--efop_name a--rguments...

    d–efop

    c--ategory: d--eftp_name a--ttributes...

    d–eftp

    Function: d--efun_name a--rguments...

    d–efun

    Macro: d--efmac_name a--rguments...

    d–efmac

    Special Form: d--efspec_name a--rguments...

    d–efspec

    Variable: d--efvar_name argvar argvar1

    d–efvar

    User Option: d--efopt_name

    d–efopt

    Function: t--ype d--eftypefun_name a--rguments...

    d–eftypefun

    Variable: t--ype d--eftypevar_name

    d–eftypevar

    Instance Variable de c--lass: d--efivar_name

    d–efivar

    Instance Variable de c--lass: t--ype d--eftypeivar_name

    d–eftypeivar

    Method de c--lass: d--efmethod_name a--rguments...

    d–efmethod

    Method de c--lass: t--ype d--eftypemethod_name a--rguments...

    d–eftypemethod

    @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} Voir cross r—ef name@: (file n—ame@)c—hapter@ section ‘t—itle@’ dans ma—nual@. @ref{chapter, cross ref name, title, file name, manual} cross ref name: (file name)chapter section ‘title’ dans manual @pxref{chapter, cross ref name, title, file name, manual} voir cross ref name: (file name)chapter section ‘title’ dans manual @inforef{chapter, cross ref name, file name} Voir cross ref name: (file name)chapter

    @ref{chapter} chapter @xref{chapter} Voir la section chapter. @pxref{chapter} voir la section chapter @ref{s--ect@comma{}ion} A section

    @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } a , in cross ref: (a comma, in file)s–ect,ion section ‘a comma, in title’ dans a , in manual name

    @ref{chapter,cross ref name} cross ref name @ref{chapter,,title} title @ref{chapter,,,file name} (file name)chapter @ref{chapter,,,,manual} section ‘chapter’ dans manual @ref{chapter,cross ref name,title,} title @ref{chapter,cross ref name,,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,,,manual} section ‘chapter’ dans manual @ref{chapter,cross ref name,title,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,title,,manual} section ‘title’ dans manual @ref{chapter,cross ref name,title, file name, manual} cross ref name: (file name)chapter section ‘title’ dans manual @ref{chapter,,title,file name} (file name)chapter @ref{chapter,,title,,manual} section ‘title’ dans manual @ref{chapter,,title, file name, manual} (file name)chapter section ‘title’ dans manual @ref{chapter,,,file name,manual} (file name)chapter section ‘chapter’ dans manual

    @ref{(pman)anode,cross ref name} cross ref name: (pman)anode @ref{(pman)anode,,title} (pman)anode @ref{(pman)anode,,,file name} (file name)anode @ref{(pman)anode,,,,manual} (pman)anode section ‘anode’ dans manual @ref{(pman)anode,cross ref name,title,} cross ref name: (pman)anode @ref{(pman)anode,cross ref name,,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,,,manual} cross ref name: (pman)anode section ‘anode’ dans manual @ref{(pman)anode,cross ref name,title,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,title,,manual} cross ref name: (pman)anode section ‘title’ dans manual @ref{(pman)anode,cross ref name,title, file name, manual} cross ref name: (file name)anode section ‘title’ dans manual @ref{(pman)anode,,title,file name} (file name)anode @ref{(pman)anode,,title,,manual} (pman)anode section ‘title’ dans manual @ref{(pman)anode,,title, file name, manual} (file name)anode section ‘title’ dans manual @ref{(pman)anode,,,file name,manual} (file name)anode section ‘anode’ dans manual

    @inforef{chapter, cross ref name, file name} Voir cross ref name: (file name)chapter @inforef{chapter} @inforef{chapter, cross ref name} @inforef{chapter,,file name} Voir (file name)chapter @inforef{node, cross ref name, file name} Voir cross ref name: (file name)node @inforef{node} @inforef{node, cross ref name} @inforef{node,,file name} Voir (file name)node @inforef{chapter, cross ref name, file name, spurious arg} Voir cross ref name: (file name, spurious arg)chapter

    @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} Voir a , in cross ref: (a comma, in file)s–ect,ion

    • a

    l–ine

    a
    b

    l–ine

    - a
    - b

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    \input texinfo @c -*-texinfo-*-
    
    @setfilename simplest.info
    
    @node Top
    
    This is a very simple texi manual @  <>.
    
    @bye
    
    in verbatim ''
    
    html ''

    majorheading

    chapheading

    heading

    subheading

    subsubheading

    @acronym{--a,an accronym @comma{} @enddots{}} –a (an accronym , ...) @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } É–. ,A. (Étude–, Autonome) @abbr{@'E--. @comma{}A.} É–. ,A.

    @math{--a@minus{} {\frac{1}{2}}} –a- \frac12

    @image{f-ile,,,alt@verb{:jk _" %}} altjk _" %@ @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} jk _" %@ in b " @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} altjk _" %@

    Somehow invalid use of @,:
    @, ,
    @,@"u @,"u

    Invalid use of @’:
    @’ ’
    @’@"u @'"u

    @dotless{truc} truc @dotless{ij} ij @dotless{--a} –a @dotless{a} a

    @TeX, but without brace TeX

    @# @#

    @w{--a} –a

    @image{,1--xt} @image{,,2--xt} @image{,,,3--xt}


    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    fun:
    truc: machin bidule chose and
    truc: machin bidule chose and after
    truc: machin bidule chose and {
    truc: machin bidule chose and { and after
    truc: followed by a comment

    Various deff lines

    truc: after a deff item

    @ref{node} @ref{node}

    @ref{,cross ref name} @ref{,cross ref name} @ref{,,title} @ref{,,title} @ref{,,,file name} (file name) @ref{,,,,manual} manual @ref{node,cross ref name} @ref{node,cross ref name} @ref{node,,title} @ref{node,,title} @ref{node,,,file name} (file name)node @ref{node,,,,manual} section ‘node’ dans manual @ref{node,cross ref name,title,} @ref{node,cross ref name,title,} @ref{node,cross ref name,,file name} cross ref name: (file name)node @ref{node,cross ref name,,,manual} section ‘node’ dans manual @ref{node,cross ref name,title,file name} cross ref name: (file name)node @ref{node,cross ref name,title,,manual} section ‘title’ dans manual @ref{node,cross ref name,title, file name, manual} cross ref name: (file name)node section ‘title’ dans manual @ref{node,,title,file name} (file name)node @ref{node,,title,,manual} section ‘title’ dans manual @ref{chapter,,title, file name, manual} (file name)chapter section ‘title’ dans manual @ref{node,,title, file name, manual} (file name)node section ‘title’ dans manual @ref{node,,,file name,manual} (file name)node section ‘node’ dans manual @ref{,cross ref name,title,} @ref{,cross ref name,title,} @ref{,cross ref name,,file name} cross ref name: (file name) @ref{,cross ref name,,,manual} manual @ref{,cross ref name,title,file name} cross ref name: (file name) @ref{,cross ref name,title,,manual} section ‘title’ dans manual @ref{,cross ref name,title, file name, manual} cross ref name: (file name) section ‘title’ dans manual @ref{,,title,file name} (file name) @ref{,,title,,manual} section ‘title’ dans manual @ref{,,title, file name, manual} (file name) section ‘title’ dans manual @ref{,,,file name,manual} (file name) manual

    @inforef{,cross ref name } @inforef{,,file name} @inforef{,cross ref name, file name} @inforef{}

    In example.

     
    <
    >
    "
    &
    '
    `
    
    ``simple-double--three---four----''
    
    code: ``simple-double--three---four----'' 
    
    asis: ``simple-double--three---four----'' 
    
    strong: ``simple-double--three---four----'' 
    
    kbd: ``simple-double--three---four----'' 
    
    
    ``simple-double--three---four----''
    
    
    
    @"u ü 
    @"{U} Ü 
    @~n ñ
    @^a â
    @'e é
    @=o ō
    @`i ì
    @'{e} é
    @'{@dotless{i}} í 
    @dotless{i} i
    @dotless{j} j
    @`{@=E} Ē` 
    @l{} ł
    @,{@'C} Ć,
    @,c ç
    @,c@"u çü 
    
    
    @* 
    
    @ followed by a space
     
    @ followed by a tab
     
    @ followed by a new line
     @- 
    @| 
    @: 
    @! !
    @? ?
    @. .
    @@ @
    @} }
    @{ {
    @/ 
    
    foo vs. bar. 
    colon :And something else.
    semi colon ;.
    And ? ?.
    Now ! !@
    but , ,
    
    @TeX TeX
    @LaTeX LaTeX
    @bullet •
    @copyright ©
    @dots …
    @enddots ...
    @equiv ≡
    @error error-->
    @expansion →
    @minus -
    @point ∗
    @print -|
    @result ⇒
    @today a sunny day
    @aa å
    @AA Å
    @ae æ
    @oe œ
    @AE Æ
    @OE Œ
    @o ø
    @O Ø
    @ss ß
    @l ł
    @L Ł
    @exclamdown ¡
    @questiondown ¿
    @pounds £
    @registeredsymbol ®
    @ordf ª
    @ordm º
    @comma ,
    @quotedblleft “
    @quotedblright ”
    @quoteleft ‘
    @quoteright ’
    @quotedblbase „
    @quotesinglbase ‚
    @guillemetleft «
    @guillemetright »
    @guillemotleft «
    @guillemotright »
    @guilsinglleft ‹
    @guilsinglright ›
    @textdegree °
    @euro €
    @arrow →
    @leq ≤
    @geq ≥
    
    @acronym{--a,an accronym} --a (an accronym)
    @acronym{--a} --a
    @abbr{@'E--. @comma{}A., @'Etude Autonome } É--. ,A. (Étude Autonome)
    @abbr{@'E--. @comma{}A.} É--. ,A.
    @asis{--a} --a
    @b{--a} --a
    @cite{--a} --a
    @code{--a} --a
    @command{--a} --a
    @ctrl{--a} --a
    @dfn{--a} --a
    @dmn{--a} --a
    @email{--a,--b} --b
    @email{,--b} --b
    @email{--a} --a
    @emph{--a} --a
    @env{--a} --a
    @file{--a}--a@i{--a} --a
    @kbd{--a} --a
    @key{--a} <--a>
    @math{--a {\frac{1}{2}} @minus{}} --a \frac12 -
    @option{--a}--a@r{--a} --a
    @samp{--a}--a@sc{--a} --A
    @strong{--a} --a
    @t{--a} --a
    @sansserif{--a} --a
    @titlefont{--a} --a
    @indicateurl{--a} <--a>
    @uref{--a,--b} --b
    @uref{--a} --a
    @uref{,--b} --b
    @uref{--a,--b,--c} --c
    @uref{,--b,--c} --c
    @uref{--a,,--c} --c
    @uref{,,--c} --c
    @url{--a,--b} --b
    @url{--a,} --a
    @url{,--b} --b
    @var{--a} --a
    @verb{:--a:} --a
    @verb{:a  < & @ % " --    b:} a  < & @ % " --    b
    @w{} 
    @H{a} a''
    @H{--a} --a''
    @dotaccent{a} ȧ
    @dotaccent{--a} --a.
    @ringaccent{a} å
    @ringaccent{--a} --a*
    @tieaccent{a} a[
    @tieaccent{--a} --a[
    @u{a} ă
    @u{--a} --a(
    @ubaraccent{a} a_
    @ubaraccent{--a} --a_
    @udotaccent{a}@udotaccent{--a} .--a
    @v{a} a<
    @v{--a} --a<
    @,{c} ç
    @,{--c} --c,
    @ogonek{a} ą
    @ogonek{--a} --a;
    @footnote{in footnote} (3)
    @footnote{in footnote2} (4)
    
    @image{f--ile} [ f--ile ]
    @image{f--ile,l--i} [ f--ile ]
    @image{f--ile,,l--e} [ f--ile ]
    @image{f--ile,,,alt} [ alt ]
    @image{f--ile,,,,e-d-xt} [ f--ile ]
    @image{f--ile,aze,az,alt,e--xt} [ alt ]
    @image{f-ile,aze,,a--lt} [ a–lt ]
    @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} [ alt ]
    
    
    
    
    @clicksequence{click @click{} A} click → A
    After clickstyle ⇒
    @clicksequence{click @click{} A} click ⇒ A
    
    
    A quot---ation
    
    Note: A Note
    
    note: A note
    
    Caution: Caution
    
    Important: Important
    
    Tip: a Tip
    
    Warning: a Warning.
    
    something é TeX: The something é TeX is here.
    
    @ at the end of line  A @ at the end of the @quotation line.
    
    something, other thing: something, other thing
    
    Note, the note: Note, the note
    
    Empty: 
    : 
    
    : 
    A small quot---ation
    
    Note: A small Note
    
    something, other thing: something, other thing
    
    •  i--temize
      
    •  +  i--tem +
      
    •  b--ullet
      
    • -
       minu--s
      
    •  e--mph item
      
    •  after emph  e--mph item
      
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    
    lone mu--ltitable item
    truc
    bidule
     
    e--xample  some
       text
    
     
    s--mallexample
    
     
    d--isplay
    
     
    s--malldisplay
    
     
    l--isp
    
     
    s--malllisp
    
     
    f--ormat
    
     
    s--mallformat
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    cate--gory: de--ffn_name ar--guments more args even more so
    def--fn
    
     
    
    fset: i a g
    cmde: truc
    Command: log trap
    Command: log trap1
    Command: log trap2
    cmde: id ule truc
    cmde2: id ‘i’ ule truc
    id ‘i’ ule:
    :
    aaa:
    :
    :
    : machin
    : bidule machin
    truc: machin
    truc:
    truc: followed by a comment
    truc:
    :
    truc: a b c d e f g h i
    truc: deffnx before end deffn
    empty: deffn
    empty: deffn with deffnx
    empty: deffnx
    fset: i a g
    cmde: truc
    text in def item for second def item
    
    c--ategory: d--efvr_name
    d--efvr
    
    c--ategory: t--ype d--eftypefn_name a--rguments...
    d--eftypefn
    
    c--ategory de c--lass: t--ype d--eftypeop_name a--rguments...
    d--eftypeop
    
    c--ategory: t--ype d--eftypevr_name
    d--eftypevr
    
    c--ategory de c--lass: d--efcv_name
    d--efcv
    
    c--ategory de c--lass: d--efop_name a--rguments...
    d--efop
    
    c--ategory: d--eftp_name a--ttributes...
    d--eftp
    
    Function: d--efun_name a--rguments...
    d--efun
    
    Macro: d--efmac_name a--rguments...
    d--efmac
    
    Special Form: d--efspec_name a--rguments...
    d--efspec
    
    Variable: d--efvar_name argvar argvar1
    d--efvar
    
    User Option: d--efopt_name
    d--efopt
    
    Function: t--ype d--eftypefun_name a--rguments...
    d--eftypefun
    
    Variable: t--ype d--eftypevar_name
    d--eftypevar
    
    Instance Variable de c--lass: d--efivar_name
    d--efivar
    
    Instance Variable de c--lass: t--ype d--eftypeivar_name
    d--eftypeivar
    
    Method de c--lass: d--efmethod_name a--rguments...
    d--efmethod
    
    Method de c--lass: t--ype d--eftypemethod_name a--rguments...
    d--eftypemethod
    
    @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} Voir cross r---ef name@: (file n---ame@)c---hapter@ section `t---itle@' dans ma---nual@.
    @ref{chapter, cross ref name, title, file name, manual} cross ref name: (file name)chapter section `title' dans manual
    @pxref{chapter, cross ref name, title, file name, manual} voir cross ref name: (file name)chapter section `title' dans manual
    @inforef{chapter, cross ref name, file name} Voir cross ref name: (file name)chapter
    
    @ref{chapter} chapter
    @xref{chapter} Voir la section chapter.
    @pxref{chapter} voir la section chapter
    @ref{s--ect@comma{}ion} A section
    
    @ref{s--ect@comma{}ion, a @comma{} in cross
    ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name }
    a , in cross ref: (a comma, in file)s--ect,ion section `a comma, in title' dans a , in manual name
    
    @ref{chapter,cross ref name} cross ref name
    @ref{chapter,,title} title
    @ref{chapter,,,file name} (file name)chapter
    @ref{chapter,,,,manual} section `chapter' dans manual
    @ref{chapter,cross ref name,title,} title
    @ref{chapter,cross ref name,,file name} cross ref name: (file name)chapter
    @ref{chapter,cross ref name,,,manual} section `chapter' dans manual
    @ref{chapter,cross ref name,title,file name} cross ref name: (file name)chapter
    @ref{chapter,cross ref name,title,,manual} section `title' dans manual
    @ref{chapter,cross ref name,title, file name, manual} cross ref name: (file name)chapter section `title' dans manual
    @ref{chapter,,title,file name} (file name)chapter
    @ref{chapter,,title,,manual} section `title' dans manual
    @ref{chapter,,title, file name, manual} (file name)chapter section `title' dans manual
    @ref{chapter,,,file name,manual} (file name)chapter section `chapter' dans manual
    
    
    @ref{(pman)anode,cross ref name} cross ref name: (pman)anode
    @ref{(pman)anode,,title} (pman)anode
    @ref{(pman)anode,,,file name} (file name)anode
    @ref{(pman)anode,,,,manual} (pman)anode section `anode' dans manual
    @ref{(pman)anode,cross ref name,title,} cross ref name: (pman)anode
    @ref{(pman)anode,cross ref name,,file name} cross ref name: (file name)anode
    @ref{(pman)anode,cross ref name,,,manual} cross ref name: (pman)anode section `anode' dans manual
    @ref{(pman)anode,cross ref name,title,file name} cross ref name: (file name)anode
    @ref{(pman)anode,cross ref name,title,,manual} cross ref name: (pman)anode section `title' dans manual
    @ref{(pman)anode,cross ref name,title, file name, manual} cross ref name: (file name)anode section `title' dans manual
    @ref{(pman)anode,,title,file name} (file name)anode
    @ref{(pman)anode,,title,,manual} (pman)anode section `title' dans manual
    @ref{(pman)anode,,title, file name, manual} (file name)anode section `title' dans manual
    @ref{(pman)anode,,,file name,manual} (file name)anode section `anode' dans manual
    
    
    @inforef{chapter, cross ref name, file name} Voir cross ref name: (file name)chapter
    @inforef{chapter} 
    @inforef{chapter, cross ref name} 
    @inforef{chapter,,file name} Voir (file name)chapter
    @inforef{node, cross ref name, file name} Voir cross ref name: (file name)node
    @inforef{node} 
    @inforef{node, cross ref name} 
    @inforef{node,,file name} Voir (file name)node
    @inforef{chapter, cross ref name, file name, spurious arg} Voir cross ref name: (file name, spurious arg)chapter
    
    @inforef{s--ect@comma{}ion, a @comma{} in cross
    ref, a comma@comma{} in file}
    Voir a , in cross ref: (a comma, in file)s--ect,ion
    
    
    
    • a
    l--ine
    
    a
    b
    l--ine
    
    - a
    - b
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    \input texinfo @c -*-texinfo-*-
    
    @setfilename simplest.info
    
    @node Top
    
    This is a very simple texi manual @  <>.
    
    @bye
    
    in verbatim ''
    
    
    html ''
    
    
    
    majorheading
    
    
    chapheading
    
    
    heading
    
    
    subheading
    
    
    subsubheading
    
    
    @acronym{--a,an accronym @comma{} @enddots{}} --a (an accronym , ...)
    @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } É--. ,A. (Étude--, Autonome)
    @abbr{@'E--. @comma{}A.} É--. ,A.
    
    @math{--a@minus{} {\frac{1}{2}}} --a- \frac12
    
    @image{f-ile,,,alt@verb{:jk _" %}} [ altjk _" %@ ]
    @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} [ jk _" %@ in b " ]
    @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} [ altjk _" %@ ]
    
    
    
    
    Somehow invalid use of @,:
    
    @, ,
    
    
    @,@"u @,"u
    
    Invalid use of @':
    
    @' '
    
    
    @'@"u @'"u
    
    @dotless{truc} truc
    @dotless{ij} ij
    @dotless{--a} --a
    @dotless{a} a
    
    @TeX, but without brace TeX
    
    @# @#
    
    @w{--a} --a
    
    @image{,1--xt} 
    @image{,,2--xt} 
    @image{,,,3--xt} 
    
    
    
    
    • after emph  e--mph item
      
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    fun:
    truc: machin bidule chose and
    truc: machin bidule chose and after
    truc: machin bidule chose and {
    truc: machin bidule chose and { and after
    truc: followed by a comment
    Various deff lines
    
    truc: after a deff item
    @ref{node} @ref{node}
    
    @ref{,cross ref name} @ref{,cross ref name}
    @ref{,,title} @ref{,,title}
    @ref{,,,file name} (file name)
    @ref{,,,,manual} manual
    @ref{node,cross ref name} @ref{node,cross ref name}
    @ref{node,,title} @ref{node,,title}
    @ref{node,,,file name} (file name)node
    @ref{node,,,,manual} section `node' dans manual
    @ref{node,cross ref name,title,} @ref{node,cross ref name,title,}
    @ref{node,cross ref name,,file name} cross ref name: (file name)node
    @ref{node,cross ref name,,,manual} section `node' dans manual
    @ref{node,cross ref name,title,file name} cross ref name: (file name)node
    @ref{node,cross ref name,title,,manual} section `title' dans manual
    @ref{node,cross ref name,title, file name, manual} cross ref name: (file name)node section `title' dans manual
    @ref{node,,title,file name} (file name)node
    @ref{node,,title,,manual} section `title' dans manual
    @ref{chapter,,title, file name, manual} (file name)chapter section `title' dans manual
    @ref{node,,title, file name, manual} (file name)node section `title' dans manual
    @ref{node,,,file name,manual} (file name)node section `node' dans manual
    @ref{,cross ref name,title,} @ref{,cross ref name,title,}
    @ref{,cross ref name,,file name} cross ref name: (file name)
    @ref{,cross ref name,,,manual} manual
    @ref{,cross ref name,title,file name} cross ref name: (file name)
    @ref{,cross ref name,title,,manual} section `title' dans manual
    @ref{,cross ref name,title, file name, manual} cross ref name: (file name) section `title' dans manual
    @ref{,,title,file name} (file name)
    @ref{,,title,,manual} section `title' dans manual
    @ref{,,title, file name, manual} (file name) section `title' dans manual
    @ref{,,,file name,manual} (file name) manual
    
    @inforef{,cross ref name } 
    @inforef{,,file name} 
    @inforef{,cross ref name, file name} 
    @inforef{} 
    
    
    

    cp

    Aller à:   "   -   .   ?  
    A   I   T  
    Entrée d’index Section

    "
    Top section
    Top section
    subsubheading
    subsubheading

    -
    –optionTop section
    –optionTop section
    –optionsubsubheading
    –optionsubsubheading

    .
    .subsubheading

    ?
    ?subsubheading

    A
    asubsubheading

    I
    index entry between item and itemxTop section
    index entry between item and itemxTop section
    index entry between item and itemxsubsubheading
    index entry between item and itemxsubsubheading
    index entry within deffnTop section
    index entry within deffnTop section
    index entry within deffnsubsubheading
    index entry within deffnsubsubheading
    index entry within itemizeTop section
    index entry within itemizeTop section
    index entry within itemizesubsubheading
    index entry within itemizesubsubheading
    index entry within multitableTop section
    index entry within multitableTop section
    index entry within multitablesubsubheading
    index entry within multitablesubsubheading

    T
    t–rucsubsubheading
    T–rucsubsubheading

    Aller à:   "   -   .   ?  
    A   I   T  

    fn

    Aller à:   "   -   .   ?  
    A   B   D   F   I   L   M   T  
    Entrée d’index Section

    "
    ``Top section
    ``Top section
    ``subsubheading
    ``subsubheading

    -
    --foptionTop section
    --foptionTop section
    --foptionsubsubheading
    --foptionsubsubheading

    .
    .subsubheading

    ?
    ?subsubheading

    A
    aTop section
    aTop section
    aTop section
    aTop section
    asubsubheading
    asubsubheading
    asubsubheading
    asubsubheading
    asubsubheading
    afterTop section
    afterTop section
    aftersubsubheading
    aftersubsubheading

    B
    bTop section
    bTop section
    bsubsubheading
    bsubsubheading
    bidule machinTop section
    bidule machinTop section
    bidule machinsubsubheading
    bidule machinsubsubheading

    D
    d--effn_nameTop section
    d--effn_nameTop section
    d--effn_namesubsubheading
    d--effn_namesubsubheading
    d--efmac_nameTop section
    d--efmac_nameTop section
    d--efmac_namesubsubheading
    d--efmac_namesubsubheading
    d--efmethod_name de c--lassTop section
    d--efmethod_name de c--lassTop section
    d--efmethod_name de c--lasssubsubheading
    d--efmethod_name de c--lasssubsubheading
    d--efop_name de c--lassTop section
    d--efop_name de c--lassTop section
    d--efop_name de c--lasssubsubheading
    d--efop_name de c--lasssubsubheading
    d--efspec_nameTop section
    d--efspec_nameTop section
    d--efspec_namesubsubheading
    d--efspec_namesubsubheading
    d--eftypefn_nameTop section
    d--eftypefn_nameTop section
    d--eftypefn_namesubsubheading
    d--eftypefn_namesubsubheading
    d--eftypefun_nameTop section
    d--eftypefun_nameTop section
    d--eftypefun_namesubsubheading
    d--eftypefun_namesubsubheading
    d--eftypemethod_name de c--lassTop section
    d--eftypemethod_name de c--lassTop section
    d--eftypemethod_name de c--lasssubsubheading
    d--eftypemethod_name de c--lasssubsubheading
    d--eftypeop_name de c--lassTop section
    d--eftypeop_name de c--lassTop section
    d--eftypeop_name de c--lasssubsubheading
    d--eftypeop_name de c--lasssubsubheading
    d--efun_nameTop section
    d--efun_nameTop section
    d--efun_namesubsubheading
    d--efun_namesubsubheading
    de--ffn_nameTop section
    de--ffn_nameTop section
    de--ffn_namesubsubheading
    de--ffn_namesubsubheading
    deffnTop section
    deffnTop section
    deffnTop section
    deffnTop section
    deffnsubsubheading
    deffnsubsubheading
    deffnsubsubheading
    deffnsubsubheading
    deffnxTop section
    deffnxTop section
    deffnxTop section
    deffnxTop section
    deffnxsubsubheading
    deffnxsubsubheading
    deffnxsubsubheading
    deffnxsubsubheading

    F
    followedTop section
    followedTop section
    followedTop section
    followedTop section
    followedsubsubheading
    followedsubsubheading
    followedsubsubheading
    followedsubsubheading

    I
    iTop section
    iTop section
    iTop section
    iTop section
    isubsubheading
    isubsubheading
    isubsubheading
    isubsubheading
    id ‘i’ uleTop section
    id ‘i’ uleTop section
    id ‘i’ ulesubsubheading
    id ‘i’ ulesubsubheading
    id uleTop section
    id uleTop section
    id ulesubsubheading
    id ulesubsubheading

    L
    log trapTop section
    log trapTop section
    log trapsubsubheading
    log trapsubsubheading
    log trap1Top section
    log trap1Top section
    log trap1subsubheading
    log trap1subsubheading
    log trap2Top section
    log trap2Top section
    log trap2subsubheading
    log trap2subsubheading

    M
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading

    T
    t--rucsubsubheading
    T--rucsubsubheading
    trucTop section
    trucTop section
    trucTop section
    trucTop section
    trucsubsubheading
    trucsubsubheading
    trucsubsubheading
    trucsubsubheading

    Aller à:   "   -   .   ?  
    A   B   D   F   I   L   M   T  

    vr

    Aller à:   A   B   D  
    Entrée d’index Section

    A
    aTop section
    aTop section
    asubsubheading
    asubsubheading

    B
    bTop section
    bTop section
    bsubsubheading
    bsubsubheading

    D
    d--efcv_nameTop section
    d--efcv_nameTop section
    d--efcv_namesubsubheading
    d--efcv_namesubsubheading
    d--efivar_nameTop section
    d--efivar_nameTop section
    d--efivar_namesubsubheading
    d--efivar_namesubsubheading
    d--efopt_nameTop section
    d--efopt_nameTop section
    d--efopt_namesubsubheading
    d--efopt_namesubsubheading
    d--eftypeivar_name de c--lassTop section
    d--eftypeivar_name de c--lassTop section
    d--eftypeivar_name de c--lasssubsubheading
    d--eftypeivar_name de c--lasssubsubheading
    d--eftypevar_nameTop section
    d--eftypevar_nameTop section
    d--eftypevar_namesubsubheading
    d--eftypevar_namesubsubheading
    d--eftypevr_nameTop section
    d--eftypevr_nameTop section
    d--eftypevr_namesubsubheading
    d--eftypevr_namesubsubheading
    d--efvar_nameTop section
    d--efvar_nameTop section
    d--efvar_namesubsubheading
    d--efvar_namesubsubheading
    d--efvr_nameTop section
    d--efvr_nameTop section
    d--efvr_namesubsubheading
    d--efvr_namesubsubheading

    Aller à:   A   B   D  

    ky

    pg

    tp

    Aller à:   D  
    Entrée d’index Section

    D
    d--eftp_nameTop section
    d--eftp_nameTop section
    d--eftp_namesubsubheading
    d--eftp_namesubsubheading

    Aller à:   D  

    Retour: Top section Avant: 1.1 A section   RetourRapide: Top section Monter: Top section AvanceRapide: 2. chapter 2         Racine: Top section Table des matières: Table des matières Index: Top section A propos: A propos de ce document

    1. chapter

    (5)

     

    Retour: 1. chapter Avant: 1.1.1 subsection   RetourRapide: 1. chapter Monter: 1. chapter AvanceRapide: 2. chapter 2         Racine: Top section Table des matières: Table des matières Index: Top section A propos: A propos de ce document

    1.1 A section


    Retour: 1.1 A section Avant: 1.1.1.1 subsubsection “simple-double–three—four—-”   RetourRapide: 1. chapter Monter: 1.1 A section AvanceRapide: 2. chapter 2         Racine: Top section Table des matières: Table des matières Index: Top section A propos: A propos de ce document

    1.1.1 subsection


    Retour: 1.1.1 subsection Avant: 2. chapter 2   RetourRapide: 1. chapter Monter: 1.1.1 subsection AvanceRapide: 2. chapter 2         Racine: Top section Table des matières: Table des matières Index: Top section A propos: A propos de ce document

    1.1.1.1 subsubsection “simple-double–three—four—-”


    Retour: 1.1.1.1 subsubsection “simple-double–three—four—-” Avant: 2. chapter 2   RetourRapide: 1. chapter Monter: Top section AvanceRapide: 2. chapter 2         Racine: Top section Table des matières: Table des matières Index: Top section A propos: A propos de ce document

    2. chapter 2

    Aller à:   "   -   .   ?  
    A   I   T  
    Entrée d’index Section

    "
    Top section
    Top section
    subsubheading
    subsubheading

    -
    –optionTop section
    –optionTop section
    –optionsubsubheading
    –optionsubsubheading

    .
    .subsubheading

    ?
    ?subsubheading

    A
    asubsubheading

    I
    index entry between item and itemxTop section
    index entry between item and itemxTop section
    index entry between item and itemxsubsubheading
    index entry between item and itemxsubsubheading
    index entry within deffnTop section
    index entry within deffnTop section
    index entry within deffnsubsubheading
    index entry within deffnsubsubheading
    index entry within itemizeTop section
    index entry within itemizeTop section
    index entry within itemizesubsubheading
    index entry within itemizesubsubheading
    index entry within multitableTop section
    index entry within multitableTop section
    index entry within multitablesubsubheading
    index entry within multitablesubsubheading

    T
    t–rucsubsubheading
    T–rucsubsubheading

    Aller à:   "   -   .   ?  
    A   I   T  
    Aller à:   "   -   .   ?  
    A   B   D   F   I   L   M   T  
    Entrée d’index Section

    "
    ``Top section
    ``Top section
    ``subsubheading
    ``subsubheading

    -
    --foptionTop section
    --foptionTop section
    --foptionsubsubheading
    --foptionsubsubheading

    .
    .subsubheading

    ?
    ?subsubheading

    A
    aTop section
    aTop section
    aTop section
    aTop section
    asubsubheading
    asubsubheading
    asubsubheading
    asubsubheading
    asubsubheading
    afterTop section
    afterTop section
    aftersubsubheading
    aftersubsubheading

    B
    bTop section
    bTop section
    bsubsubheading
    bsubsubheading
    bidule machinTop section
    bidule machinTop section
    bidule machinsubsubheading
    bidule machinsubsubheading

    D
    d--effn_nameTop section
    d--effn_nameTop section
    d--effn_namesubsubheading
    d--effn_namesubsubheading
    d--efmac_nameTop section
    d--efmac_nameTop section
    d--efmac_namesubsubheading
    d--efmac_namesubsubheading
    d--efmethod_name de c--lassTop section
    d--efmethod_name de c--lassTop section
    d--efmethod_name de c--lasssubsubheading
    d--efmethod_name de c--lasssubsubheading
    d--efop_name de c--lassTop section
    d--efop_name de c--lassTop section
    d--efop_name de c--lasssubsubheading
    d--efop_name de c--lasssubsubheading
    d--efspec_nameTop section
    d--efspec_nameTop section
    d--efspec_namesubsubheading
    d--efspec_namesubsubheading
    d--eftypefn_nameTop section
    d--eftypefn_nameTop section
    d--eftypefn_namesubsubheading
    d--eftypefn_namesubsubheading
    d--eftypefun_nameTop section
    d--eftypefun_nameTop section
    d--eftypefun_namesubsubheading
    d--eftypefun_namesubsubheading
    d--eftypemethod_name de c--lassTop section
    d--eftypemethod_name de c--lassTop section
    d--eftypemethod_name de c--lasssubsubheading
    d--eftypemethod_name de c--lasssubsubheading
    d--eftypeop_name de c--lassTop section
    d--eftypeop_name de c--lassTop section
    d--eftypeop_name de c--lasssubsubheading
    d--eftypeop_name de c--lasssubsubheading
    d--efun_nameTop section
    d--efun_nameTop section
    d--efun_namesubsubheading
    d--efun_namesubsubheading
    de--ffn_nameTop section
    de--ffn_nameTop section
    de--ffn_namesubsubheading
    de--ffn_namesubsubheading
    deffnTop section
    deffnTop section
    deffnTop section
    deffnTop section
    deffnsubsubheading
    deffnsubsubheading
    deffnsubsubheading
    deffnsubsubheading
    deffnxTop section
    deffnxTop section
    deffnxTop section
    deffnxTop section
    deffnxsubsubheading
    deffnxsubsubheading
    deffnxsubsubheading
    deffnxsubsubheading

    F
    followedTop section
    followedTop section
    followedTop section
    followedTop section
    followedsubsubheading
    followedsubsubheading
    followedsubsubheading
    followedsubsubheading

    I
    iTop section
    iTop section
    iTop section
    iTop section
    isubsubheading
    isubsubheading
    isubsubheading
    isubsubheading
    id ‘i’ uleTop section
    id ‘i’ uleTop section
    id ‘i’ ulesubsubheading
    id ‘i’ ulesubsubheading
    id uleTop section
    id uleTop section
    id ulesubsubheading
    id ulesubsubheading

    L
    log trapTop section
    log trapTop section
    log trapsubsubheading
    log trapsubsubheading
    log trap1Top section
    log trap1Top section
    log trap1subsubheading
    log trap1subsubheading
    log trap2Top section
    log trap2Top section
    log trap2subsubheading
    log trap2subsubheading

    M
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading

    T
    t--rucsubsubheading
    T--rucsubsubheading
    trucTop section
    trucTop section
    trucTop section
    trucTop section
    trucsubsubheading
    trucsubsubheading
    trucsubsubheading
    trucsubsubheading

    Aller à:   "   -   .   ?  
    A   B   D   F   I   L   M   T  

    Racine: Top section Table des matières: Table des matières Index: Top section A propos: A propos de ce document

    Notes de bas de page

    (1)

    in footnote

    (2)

    in footnote2

    (1)

    in footnote

    (2)

    in footnote2

    (3)

    in footnote

    (4)

    in footnote2

    (5)

    in footnote


    Racine: Top section Table des matières: Table des matières Index: Top section A propos: A propos de ce document

    Table des matières


    Racine: Top section Table des matières: Table des matières Index: Top section A propos: A propos de ce document

    Résumé du contenu


    Racine: Top section Table des matières: Table des matières Index: Top section A propos: A propos de ce document

    A propos de ce document

    Ce document a été généré le a sunny day par a tester en utilisant texi2html.

    Les boutons de navigation ont la signification suivante :

    Bouton Nom Aller à Depuis 1.2.3 aller à
    Retour Retour Section précédente dans l’ordre de lecture 1.2.2
    Avant Avant Section suivante dans l’ordre de lecture 1.2.4
    RetourRapide RetourRapide Début de ce chapitre ou chapitre précédent 1
    Monter Monter Section supérieure 1.2
    AvanceRapide AvanceRapide Chapitre suivant 2
    Racine Racine Couverture (top) du document  
    Table des matières Table des matières Table des matières  
    Index Index Index  
    A propos A propos A propos (page d’aide)  

    Dans cet exemple on est à Sous sous section un-deux-trois dans un document dont la structure est :

    • 1. Section un
      • 1.1 Sous section un-un
        • ...
      • 1.2 Sous section un-deux
        • 1.2.1 Sous sous section un-deux-un
        • 1.2.2 Sous sous section un-deux-deux
        • 1.2.3 Sous sous section un-deux-trois     <== Position
        • 1.2.4 Sous sous section un-deux-quatre
      • 1.3 Sous section un-trois
        • ...
      • 1.4 Sous section un-quatre

    Ce document a été généré le a sunny day par a tester en utilisant texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/0000755000175000017500000000000011264347116027051 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/U.html0000644000175000017500000001642411264347116030152 0ustar flichtenheldflichtenheld Untitled Document: 1.13 Ü
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.13 Ü


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.11 Ú


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.12 Ù


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.12 Û


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/A.html0000644000175000017500000002144711264347116030127 0ustar flichtenheldflichtenheld Untitled Document: 1.9 Ä
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.9 Ä

    Now a ref to a node without sectionning command, no text (see no section). With text (see but a text).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.7 Á


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.8 À


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.8 Â


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.4 Ã


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/nodetest.20000644000175000017500000000010011264347116030750 0ustar flichtenheldflichtenheld*** Node equivalent with `@aa{}' already used `@ringaccent{a}' texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/Y.html0000644000175000017500000000643311264347116030155 0ustar flichtenheldflichtenheld Untitled Document: 2.12 Ý
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.12 Ý

    This is a ref to ü (see ü). Another one, with node only (see ü).


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/L.html0000644000175000017500000000601311264347116030132 0ustar flichtenheldflichtenheld Untitled Document: 7.9 Ł
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.9 Ł


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/cedilla-accent.html0000644000175000017500000000721111264347116032570 0ustar flichtenheldflichtenheld Untitled Document: 6. cedilla accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6. cedilla accent


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/AA.html0000644000175000017500000000602011264347116030216 0ustar flichtenheldflichtenheld Untitled Document: 7.4 Å
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.4 Å


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/l.html0000644000175000017500000000601311264347116030172 0ustar flichtenheldflichtenheld Untitled Document: 7.7 ł
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.7 ł


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/with-brace-i.html0000644000175000017500000001401511264347116032213 0ustar flichtenheldflichtenheld Untitled Document: 1.4 With brace ï
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4 With brace ï


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.4 ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.4 î

    Test @^{i}.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/aa.html0000644000175000017500000001044711264347116030326 0ustar flichtenheldflichtenheld Untitled Document: 7.1 å
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.1 å


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.16 å


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/footanchor.html0000644000175000017500000000334111264347116032102 0ustar flichtenheldflichtenheld Untitled Document: footanchor

    The node you are looking for is at footanchor.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/acute-accent.html0000644000175000017500000001162311264347116032276 0ustar flichtenheldflichtenheld Untitled Document: 2. acute accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. acute accent


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/e.html0000644000175000017500000001634411264347116030173 0ustar flichtenheldflichtenheld Untitled Document: 1.2 ë
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2 ë


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2 é


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.2 è


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.2 ê


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/n.html0000644000175000017500000000616711264347116030206 0ustar flichtenheldflichtenheld Untitled Document: 5.2 ñ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.2 ñ


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/rest.html0000644000175000017500000001425611264347116030724 0ustar flichtenheldflichtenheld Untitled Document: 7. rest
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7. rest


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/index.html0000644000175000017500000000325711264347116031055 0ustar flichtenheldflichtenheld Untitled Document: Top

    The node you are looking for is at Top.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/_002c.html0000644000175000017500000000566711264347116030560 0ustar flichtenheldflichtenheld Untitled Document: 7.21 ,
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.21 ,


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/nodetest_abt.html0000644000175000017500000001215411264347116032415 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/ae.html0000644000175000017500000000602011264347116030322 0ustar flichtenheldflichtenheld Untitled Document: 7.2 æ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.2 æ


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/no-section.html0000644000175000017500000000620311264347116032016 0ustar flichtenheldflichtenheld Untitled Document: no section
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    no section

    This is a node without sectioning command.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/tilde-accent.html0000644000175000017500000000764411264347116032306 0ustar flichtenheldflichtenheld Untitled Document: 5. tilde accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5. tilde accent


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/C.html0000644000175000017500000000617511264347116030132 0ustar flichtenheldflichtenheld Untitled Document: 6.2 Ç
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.2 Ç


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/nodetest_toc.html0000644000175000017500000002232411264347116032434 0ustar flichtenheldflichtenheld Untitled Document: Table of Contents
    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/E.html0000644000175000017500000001635011264347116030130 0ustar flichtenheldflichtenheld Untitled Document: 1.10 Ë
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.10 Ë


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.8 É


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.9 È


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.9 Ê


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/u.html0000644000175000017500000001646211264347116030214 0ustar flichtenheldflichtenheld Untitled Document: 1.7 ü
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.7 ü

    Another ref to an anchor (see x-spot).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.5 ú


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.7 ù


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.7 û


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/nodetest_fot.html0000644000175000017500000000543611264347116032444 0ustar flichtenheldflichtenheld Untitled Document: Footnotes
    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/OE.html0000644000175000017500000001045111264347116030243 0ustar flichtenheldflichtenheld Untitled Document: 7.6 Œ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.6 Œ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.10 Ø


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/c.html0000644000175000017500000000617611264347116030173 0ustar flichtenheldflichtenheld Untitled Document: 6.1 ç
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.1 ç


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/i.html0000644000175000017500000002105211264347116030167 0ustar flichtenheldflichtenheld Untitled Document: 1.3 ï
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.3 ï


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3 í


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.3 ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3 î


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.19 i


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/oe.html0000644000175000017500000001045311264347116030345 0ustar flichtenheldflichtenheld Untitled Document: 7.3 œ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.3 œ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.8 ø


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/circumflex-accent.html0000644000175000017500000001200111264347116033325 0ustar flichtenheldflichtenheld Untitled Document: 4. circumflex accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4. circumflex accent


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/y.html0000644000175000017500000001103511264347116030207 0ustar flichtenheldflichtenheld Untitled Document: 1.8 ÿ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.8 ÿ

    This is a ref to a node (see Ú).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.6 ý


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/ss.html0000644000175000017500000000614711264347116030374 0ustar flichtenheldflichtenheld Untitled Document: 1.14 ß
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.14 ß


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/e_002do.html0000644000175000017500000000332311264347116031070 0ustar flichtenheldflichtenheld Untitled Document: é-o

    The node you are looking for is at é-o.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/O.html0000644000175000017500000002136211264347116030141 0ustar flichtenheldflichtenheld Untitled Document: 1.12 Ö
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.12 Ö


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.10 Ó


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.11 Ò


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.11 Ô


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.5 Õ

    This marks the spot. A second one with accented char .


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/o.html0000644000175000017500000002146411264347116030204 0ustar flichtenheldflichtenheld Untitled Document: 1.6 ö
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.6 ö

    Ref to an anchor at the end of the doc (see there is an o-é could there be an î).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4 ó


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.6 ò


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.6 ô


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.3 õ


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/grave-accent.html0000644000175000017500000001177311264347116032307 0ustar flichtenheldflichtenheld Untitled Document: 3. grave accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. grave accent


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/I.html0000644000175000017500000001635211264347116030136 0ustar flichtenheldflichtenheld Untitled Document: 1.11 Ï
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.11 Ï


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.9 Í


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.10 Ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.10 Î


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/c-no-brace.html0000644000175000017500000000624011264347116031647 0ustar flichtenheldflichtenheld Untitled Document: 6.3 ç no brace
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.3 ç no brace


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/a.html0000644000175000017500000004327211264347116030167 0ustar flichtenheldflichtenheld Untitled Document: 1.1 ä
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 ä

    ref to ç ç.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.1 á

    With brace á. Testing ’ " ‘ ^.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.1 à


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.1 â


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.1 ã


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.11 a''



    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.12 ă



    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.13 a<



    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.14 ạ

    Test udotaccent.



    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.15 ȧ

    Test dotaccent.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.17 a[



    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.18 a_


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/nodetest.html0000644000175000017500000000772111264347116031573 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Top


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/AE.html0000644000175000017500000000602011264347116030222 0ustar flichtenheldflichtenheld Untitled Document: 7.5 Æ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.5 Æ


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/x_002dspot.html0000644000175000017500000000327311264347116031646 0ustar flichtenheldflichtenheld Untitled Document: x-spot

    The node you are looking for is at x-spot.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/Umlaut.html0000644000175000017500000001261211264347116031210 0ustar flichtenheldflichtenheld Untitled Document: 1. Umlaut
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Umlaut


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/with-dotless-i.html0000644000175000017500000001440211264347116032614 0ustar flichtenheldflichtenheld Untitled Document: 1.5 With dotless ï
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.5 With dotless ï

    before footnote See footanchor.

    (1)

    after footnote See footanchor.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.5 ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.5 î

    Test @^{@dotless{i}}.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unicode/j.html0000644000175000017500000000640211264347116030172 0ustar flichtenheldflichtenheld Untitled Document: 7.20 j
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.20 j

    ...

    ¡

    ¿

    £

    @- : @ followed by end of line:   @ followed by tab:   @ followed by space   @*:
    and text followin @*.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/0000755000175000017500000000000011264347117024650 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/nodetest_use_nodes/U.html0000644000175000017500000001642411264347117025751 0ustar flichtenheldflichtenheld Untitled Document: 1.13 Ü
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.13 Ü


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.11 Ú


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.12 Ù


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.12 Û


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/A.html0000644000175000017500000002144711264347117025726 0ustar flichtenheldflichtenheld Untitled Document: 1.9 Ä
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.9 Ä

    Now a ref to a node without sectionning command, no text (see no section). With text (see but a text).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.7 Á


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.8 À


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.8 Â


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.4 Ã


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/nodetest.20000644000175000017500000000010011264347117026547 0ustar flichtenheldflichtenheld*** Node equivalent with `@aa{}' already used `@ringaccent{a}' texi2html-1.82/test/encodings/res/nodetest_use_nodes/Y.html0000644000175000017500000000643311264347117025754 0ustar flichtenheldflichtenheld Untitled Document: 2.12 Ý
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.12 Ý

    This is a ref to ü (see ü). Another one, with node only (see ü).


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/L.html0000644000175000017500000000601311264347117025731 0ustar flichtenheldflichtenheld Untitled Document: 7.9 Ł
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.9 Ł


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/cedilla-accent.html0000644000175000017500000000721111264347117030367 0ustar flichtenheldflichtenheld Untitled Document: 6. cedilla accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6. cedilla accent


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/AA.html0000644000175000017500000000602011264347117026015 0ustar flichtenheldflichtenheld Untitled Document: 7.4 Å
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.4 Å


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/l.html0000644000175000017500000000601311264347117025771 0ustar flichtenheldflichtenheld Untitled Document: 7.7 ł
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.7 ł


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/with-brace-i.html0000644000175000017500000001401511264347117030012 0ustar flichtenheldflichtenheld Untitled Document: 1.4 With brace ï
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4 With brace ï


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.4 ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.4 î

    Test @^{i}.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/aa.html0000644000175000017500000001044711264347117026125 0ustar flichtenheldflichtenheld Untitled Document: 7.1 å
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.1 å


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.16 å


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/footanchor.html0000644000175000017500000000334111264347117027701 0ustar flichtenheldflichtenheld Untitled Document: footanchor

    The node you are looking for is at footanchor.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/acute-accent.html0000644000175000017500000001162311264347117030075 0ustar flichtenheldflichtenheld Untitled Document: 2. acute accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. acute accent


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/e.html0000644000175000017500000001634411264347117025772 0ustar flichtenheldflichtenheld Untitled Document: 1.2 ë
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2 ë


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2 é


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.2 è


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.2 ê


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/n.html0000644000175000017500000000616711264347117026005 0ustar flichtenheldflichtenheld Untitled Document: 5.2 ñ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.2 ñ


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/rest.html0000644000175000017500000001425611264347117026523 0ustar flichtenheldflichtenheld Untitled Document: 7. rest
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7. rest


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/index.html0000644000175000017500000000325711264347117026654 0ustar flichtenheldflichtenheld Untitled Document: Top

    The node you are looking for is at Top.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/_002c.html0000644000175000017500000000566711264347117026357 0ustar flichtenheldflichtenheld Untitled Document: 7.21 ,
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.21 ,


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/nodetest_abt.html0000644000175000017500000001215411264347117030214 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/ae.html0000644000175000017500000000602011264347117026121 0ustar flichtenheldflichtenheld Untitled Document: 7.2 æ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.2 æ


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/no-section.html0000644000175000017500000000620311264347117027615 0ustar flichtenheldflichtenheld Untitled Document: no section
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    no section

    This is a node without sectioning command.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/tilde-accent.html0000644000175000017500000000764411264347117030105 0ustar flichtenheldflichtenheld Untitled Document: 5. tilde accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5. tilde accent


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/C.html0000644000175000017500000000617511264347117025731 0ustar flichtenheldflichtenheld Untitled Document: 6.2 Ç
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.2 Ç


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/nodetest_toc.html0000644000175000017500000002232411264347117030233 0ustar flichtenheldflichtenheld Untitled Document: Table of Contents
    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/E.html0000644000175000017500000001635011264347117025727 0ustar flichtenheldflichtenheld Untitled Document: 1.10 Ë
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.10 Ë


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.8 É


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.9 È


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.9 Ê


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/u.html0000644000175000017500000001646211264347117026013 0ustar flichtenheldflichtenheld Untitled Document: 1.7 ü
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.7 ü

    Another ref to an anchor (see x-spot).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.5 ú


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.7 ù


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.7 û


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/nodetest_fot.html0000644000175000017500000000543611264347117030243 0ustar flichtenheldflichtenheld Untitled Document: Footnotes
    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/OE.html0000644000175000017500000001045111264347117026042 0ustar flichtenheldflichtenheld Untitled Document: 7.6 Œ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.6 Œ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.10 Ø


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/c.html0000644000175000017500000000617611264347117025772 0ustar flichtenheldflichtenheld Untitled Document: 6.1 ç
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.1 ç


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/i.html0000644000175000017500000002105211264347117025766 0ustar flichtenheldflichtenheld Untitled Document: 1.3 ï
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.3 ï


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3 í


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.3 ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3 î


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.19 i


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/oe.html0000644000175000017500000001045311264347117026144 0ustar flichtenheldflichtenheld Untitled Document: 7.3 œ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.3 œ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.8 ø


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/circumflex-accent.html0000644000175000017500000001200111264347117031124 0ustar flichtenheldflichtenheld Untitled Document: 4. circumflex accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4. circumflex accent


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/y.html0000644000175000017500000001103511264347117026006 0ustar flichtenheldflichtenheld Untitled Document: 1.8 ÿ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.8 ÿ

    This is a ref to a node (see Ú).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.6 ý


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/ss.html0000644000175000017500000000614711264347117026173 0ustar flichtenheldflichtenheld Untitled Document: 1.14 ß
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.14 ß


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/e_002do.html0000644000175000017500000000332311264347117026667 0ustar flichtenheldflichtenheld Untitled Document: é-o

    The node you are looking for is at é-o.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/O.html0000644000175000017500000002136211264347117025740 0ustar flichtenheldflichtenheld Untitled Document: 1.12 Ö
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.12 Ö


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.10 Ó


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.11 Ò


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.11 Ô


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.5 Õ

    This marks the spot. A second one with accented char .


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/o.html0000644000175000017500000002146411264347117026003 0ustar flichtenheldflichtenheld Untitled Document: 1.6 ö
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.6 ö

    Ref to an anchor at the end of the doc (see there is an o-é could there be an î).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4 ó


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.6 ò


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.6 ô


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.3 õ


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/grave-accent.html0000644000175000017500000001177311264347117030106 0ustar flichtenheldflichtenheld Untitled Document: 3. grave accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. grave accent


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/I.html0000644000175000017500000001635211264347117025735 0ustar flichtenheldflichtenheld Untitled Document: 1.11 Ï
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.11 Ï


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.9 Í


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.10 Ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.10 Î


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/c-no-brace.html0000644000175000017500000000624011264347117027446 0ustar flichtenheldflichtenheld Untitled Document: 6.3 ç no brace
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.3 ç no brace


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/a.html0000644000175000017500000004327211264347117025766 0ustar flichtenheldflichtenheld Untitled Document: 1.1 ä
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 ä

    ref to ç ç.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.1 á

    With brace á. Testing ’ " ‘ ^.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.1 à


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.1 â


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.1 ã


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.11 a''



    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.12 ă



    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.13 a<



    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.14 ạ

    Test udotaccent.



    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.15 ȧ

    Test dotaccent.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.17 a[



    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.18 a_


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/nodetest.html0000644000175000017500000000772111264347117027372 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Top


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/AE.html0000644000175000017500000000602011264347117026021 0ustar flichtenheldflichtenheld Untitled Document: 7.5 Æ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.5 Æ


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/x_002dspot.html0000644000175000017500000000327311264347117027445 0ustar flichtenheldflichtenheld Untitled Document: x-spot

    The node you are looking for is at x-spot.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/Umlaut.html0000644000175000017500000001261211264347117027007 0ustar flichtenheldflichtenheld Untitled Document: 1. Umlaut
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Umlaut


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/with-dotless-i.html0000644000175000017500000001440211264347117030413 0ustar flichtenheldflichtenheld Untitled Document: 1.5 With dotless ï
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.5 With dotless ï

    before footnote See footanchor.

    (1)

    after footnote See footanchor.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.5 ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.5 î

    Test @^{@dotless{i}}.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes/j.html0000644000175000017500000000640211264347117025771 0ustar flichtenheldflichtenheld Untitled Document: 7.20 j
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.20 j

    ...

    ¡

    ¿

    £

    @- : @ followed by end of line:   @ followed by tab:   @ followed by space   @*:
    and text followin @*.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/texi_nodetest/0000755000175000017500000000000011264347116023634 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/texi_nodetest/nodetest.20000644000175000017500000000000011264347116025532 0ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/texi_nodetest/nodetest.passtexi0000644000175000017500000003330511264347116027247 0ustar flichtenheldflichtenheldnodetest.texi(,2) @c nodetest.texi(,3) @c It is not possible to test for @,{c} in nodetest.texi(,4) @c nodename cause makeinfo can not nodetest.texi(,5) @c handle cedilla's in node names. A cedilla nodetest.texi(,6) @c has a comma which was recognized a as nodetest.texi(,7) @c delimiter between node parts (next,previous etc.) nodetest.texi(,8) @setfilename nodetest.info nodetest.texi(,9) @node Top,Umlaut,(dir) nodetest.texi(,10) @top nodetest.texi(,11) @menu nodetest.texi(,12) * Umlaut:: Umlaut. nodetest.texi(,13) nodetest.texi(,14) nodetest.texi(,15) Another Heading nodetest.texi(,16) nodetest.texi(,17) nodetest.texi(,18) * acute accent:: acute accent. nodetest.texi(,19) * grave accent:: grave accent. nodetest.texi(,20) * circumflex accent:: circumflex accent. nodetest.texi(,21) * tilde accent:: tilde accent. nodetest.texi(,22) * cedilla accent:: cedilla accent. nodetest.texi(,23) * rest:: rest @@aa@{@} etc. nodetest.texi(,24) @end menu nodetest.texi(,25) @c nodetest.texi(,26) @node Umlaut,,Top,Top nodetest.texi(,27) @chapter Umlaut nodetest.texi(,28) @menu nodetest.texi(,29) * @"a:: @"a. nodetest.texi(,30) * @"e:: @"e. nodetest.texi(,31) * @"i:: @"i. nodetest.texi(,32) * with brace @"{i}:: @"{i}. nodetest.texi(,33) * with dotless @"{@dotless{i}}:: @"{@dotless{i}}. nodetest.texi(,34) * @"o:: @"o. nodetest.texi(,35) * @"u:: @"u. nodetest.texi(,36) * @"y:: @"y. nodetest.texi(,37) * @"A:: @"A. nodetest.texi(,38) * @"E:: @"E. nodetest.texi(,39) * @"I:: @"I. nodetest.texi(,40) * @"O:: @"O. nodetest.texi(,41) * @"U:: @"U. nodetest.texi(,42) * @ss{}:: @ss{}. nodetest.texi(,43) * no section:: Node without sectioning command. nodetest.texi(,44) @end menu nodetest.texi(,45) @c nodetest.texi(,46) @node @"a,,,Umlaut nodetest.texi(,47) @section @"a nodetest.texi(,48) ref to @,{c} @ref{@,{c}}. nodetest.texi(,49) @node @"e,,,Umlaut nodetest.texi(,50) @section @"e nodetest.texi(,51) @node @"i,,,Umlaut nodetest.texi(,52) @section @"i nodetest.texi(,53) @node with brace @"{i},,,Umlaut nodetest.texi(,54) @section With brace @"{i} nodetest.texi(,55) @node with dotless @"{@dotless{i}},,,Umlaut nodetest.texi(,56) @section With dotless @"{@dotless{i}} nodetest.texi(,57) nodetest.texi(,58) before footnote @xref{footanchor}. nodetest.texi(,59) nodetest.texi(,60) @footnote{@anchor{footanchor}} nodetest.texi(,61) nodetest.texi(,62) after footnote @xref{footanchor}. nodetest.texi(,63) nodetest.texi(,64) @node @"o,,,Umlaut nodetest.texi(,65) @section @"o nodetest.texi(,66) Ref to an anchor at the end of the doc nodetest.texi(,67) (@pxref{@'e-o, , there is an o-@'e could there be an @^{@dotless{i}}}). nodetest.texi(,68) @node @"u,,,Umlaut nodetest.texi(,69) @section @"u nodetest.texi(,70) Another ref to an anchor (@pxref{x-spot, ,}). nodetest.texi(,71) @node @"y,,,Umlaut nodetest.texi(,72) @section @"y nodetest.texi(,73) This is a ref to a node (@pxref{@'U, ,@'U}). nodetest.texi(,74) nodetest.texi(,75) @node @"A,,,Umlaut nodetest.texi(,76) @section @"A nodetest.texi(,77) nodetest.texi(,78) Now a ref to a node without sectionning command, nodetest.texi(,79) no text (@pxref{no section, , }). nodetest.texi(,80) With text (@pxref{no section, ,but a text }). nodetest.texi(,81) nodetest.texi(,82) @node @"E,,,Umlaut nodetest.texi(,83) @section @"E nodetest.texi(,84) @node @"I,,,Umlaut nodetest.texi(,85) @section @"I nodetest.texi(,86) @node @"O,,,Umlaut nodetest.texi(,87) @section @"O nodetest.texi(,88) @node @"U,,,Umlaut nodetest.texi(,89) @section @"U nodetest.texi(,90) @node @ss{},,,Umlaut nodetest.texi(,91) @section @ss{} nodetest.texi(,92) @node no section,,,Umlaut nodetest.texi(,93) This is a node without sectioning command. nodetest.texi(,94) @c nodetest.texi(,95) @node acute accent,,Top,Top nodetest.texi(,96) @chapter acute accent nodetest.texi(,97) @menu nodetest.texi(,98) * @'a:: @'a. nodetest.texi(,99) * @'e:: @'e. nodetest.texi(,100) * @'i:: @'i. nodetest.texi(,101) * @'o:: @'o. nodetest.texi(,102) * @'u:: @'u. nodetest.texi(,103) * @'y:: @'y. nodetest.texi(,104) * @'A:: @'A. nodetest.texi(,105) * @'E:: @'E. nodetest.texi(,106) * @'I:: @'I. nodetest.texi(,107) * @'O:: @'O. nodetest.texi(,108) * @'U:: @'U. nodetest.texi(,109) * @'Y:: @'Y. nodetest.texi(,110) @end menu nodetest.texi(,111) @c nodetest.texi(,112) @node @'a,,,acute accent nodetest.texi(,113) @section @'a nodetest.texi(,114) With brace @'{a}. Testing ' " ` ^. nodetest.texi(,115) @node @'e,,,acute accent nodetest.texi(,116) @section @'e nodetest.texi(,117) @node @'i,,,acute accent nodetest.texi(,118) @section @'i nodetest.texi(,119) @node @'o,,,acute accent nodetest.texi(,120) @section @'o nodetest.texi(,121) @node @'u,,,acute accent nodetest.texi(,122) @section @'u nodetest.texi(,123) @node @'y,,,acute accent nodetest.texi(,124) @section @'y nodetest.texi(,125) @node @'A,,,acute accent nodetest.texi(,126) @section @'A nodetest.texi(,127) @node @'E,,,acute accent nodetest.texi(,128) @section @'E nodetest.texi(,129) @node @'I,,,acute accent nodetest.texi(,130) @section @'I nodetest.texi(,131) @node @'O,,,acute accent nodetest.texi(,132) @section @'O nodetest.texi(,133) @node @'U,,,acute accent nodetest.texi(,134) @section @'U nodetest.texi(,135) @node @'Y,,,acute accent nodetest.texi(,136) @section @'Y nodetest.texi(,137) This is a ref to @"u (@pxref{@"u, ,@"u}). nodetest.texi(,138) Another one, with node only (@pxref{@"u, ,}). nodetest.texi(,139) nodetest.texi(,143) nodetest.texi(,144) @c nodetest.texi(,145) @node grave accent,,Top,Top nodetest.texi(,146) @chapter grave accent nodetest.texi(,147) @menu nodetest.texi(,148) * @`a:: @`a. nodetest.texi(,149) * @`e:: @`e. nodetest.texi(,150) * @`i:: @`i. nodetest.texi(,151) * with brace @`{i}:: @`{i}. nodetest.texi(,152) * with dotless @`{@dotless{i}}:: @`{@dotless{i}}. nodetest.texi(,153) * @`o:: @`o. nodetest.texi(,154) * @`u:: @`u. nodetest.texi(,155) * @`A:: @`A. nodetest.texi(,156) * @`E:: @`E. nodetest.texi(,157) * @`I:: @`I. nodetest.texi(,158) * @`O:: @`O. nodetest.texi(,159) * @`U:: @`U. nodetest.texi(,160) @end menu nodetest.texi(,161) @c nodetest.texi(,162) @node @`a,,,grave accent nodetest.texi(,163) @section @`a nodetest.texi(,164) @node @`e,,,grave accent nodetest.texi(,165) @section @`e nodetest.texi(,166) @node @`i,,,grave accent nodetest.texi(,167) @section @`i nodetest.texi(,168) @node with brace @`{i},,,grave accent nodetest.texi(,169) @section @`{i} nodetest.texi(,170) @node with dotless @`{@dotless{i}},,,grave accent nodetest.texi(,171) @section @`{@dotless{i}} nodetest.texi(,172) @node @`o,,,grave accent nodetest.texi(,173) @section @`o nodetest.texi(,174) @node @`u,,,grave accent nodetest.texi(,175) @section @`u nodetest.texi(,176) @node @`A,,,grave accent nodetest.texi(,177) @section @`A nodetest.texi(,178) @node @`E,,,grave accent nodetest.texi(,179) @section @`E nodetest.texi(,180) @node @`I,,,grave accent nodetest.texi(,181) @section @`I nodetest.texi(,182) @node @`O,,,grave accent nodetest.texi(,183) @section @`O nodetest.texi(,184) @node @`U,,,grave accent nodetest.texi(,185) @section @`U nodetest.texi(,186) @c nodetest.texi(,187) @node circumflex accent,,Top,Top nodetest.texi(,188) @chapter circumflex accent nodetest.texi(,189) @menu nodetest.texi(,190) * @^a:: @^a. nodetest.texi(,191) * @^e:: @^e. nodetest.texi(,192) * @^i:: @^i. nodetest.texi(,193) * with brace @^{i}:: @^{i}. nodetest.texi(,194) * with dotless @^{@dotless{i}}:: @^{@dotless{i}}. nodetest.texi(,195) * @^o:: @^o. nodetest.texi(,196) * @^u:: @^u. nodetest.texi(,197) * @^A:: @^A. nodetest.texi(,198) * @^E:: @^E. nodetest.texi(,199) * @^I:: @^I. nodetest.texi(,200) * @^O:: @^O. nodetest.texi(,201) * @^U:: @^U. nodetest.texi(,202) @end menu nodetest.texi(,203) @c nodetest.texi(,204) @node @^a,,,circumflex accent nodetest.texi(,205) @section @^a nodetest.texi(,206) @node @^e,,,circumflex accent nodetest.texi(,207) @section @^e nodetest.texi(,208) @node @^i,,,circumflex accent nodetest.texi(,209) @section @^i nodetest.texi(,210) @node with brace @^{i},,,circumflex accent nodetest.texi(,211) @section @^{i} nodetest.texi(,212) Test @@^@{i@}. nodetest.texi(,213) @node with dotless @^{@dotless{i}},,,circumflex accent nodetest.texi(,214) @section @^{@dotless{i}} nodetest.texi(,215) Test @@^@{@@dotless@{i@}@}. nodetest.texi(,216) @node @^o,,,circumflex accent nodetest.texi(,217) @section @^o nodetest.texi(,218) @node @^u,,,circumflex accent nodetest.texi(,219) @section @^u nodetest.texi(,220) @node @^A,,,circumflex accent nodetest.texi(,221) @section @^A nodetest.texi(,222) @node @^E,,,circumflex accent nodetest.texi(,223) @section @^E nodetest.texi(,224) @node @^I,,,circumflex accent nodetest.texi(,225) @section @^I nodetest.texi(,226) @node @^O,,,circumflex accent nodetest.texi(,227) @section @^O nodetest.texi(,228) @node @^U,,,circumflex accent nodetest.texi(,229) @section @^U nodetest.texi(,230) @c nodetest.texi(,231) @node tilde accent,,Top,Top nodetest.texi(,232) @chapter tilde accent nodetest.texi(,233) @menu nodetest.texi(,234) * @~a:: @~a. nodetest.texi(,235) * @~n:: @~n. nodetest.texi(,236) * @~o:: @~o. nodetest.texi(,237) * @~A:: @~A. nodetest.texi(,238) * @~O:: @~O. nodetest.texi(,239) @end menu nodetest.texi(,240) @c nodetest.texi(,241) @node @~a,,,tilde accent nodetest.texi(,242) @section @~a nodetest.texi(,243) @node @~n,,,tilde accent nodetest.texi(,244) @section @~n nodetest.texi(,245) @node @~o,,,tilde accent nodetest.texi(,246) @section @~o nodetest.texi(,247) @node @~A,,,tilde accent nodetest.texi(,248) @section @~A nodetest.texi(,249) @node @~O,,,tilde accent nodetest.texi(,250) @section @~O nodetest.texi(,251) This marks the @anchor{x-spot}spot. nodetest.texi(,252) A second one with accented char @anchor{@'e-o}. nodetest.texi(,253) @c nodetest.texi(,254) @node cedilla accent,,Top,Top nodetest.texi(,255) @chapter cedilla accent nodetest.texi(,256) @menu nodetest.texi(,257) * @,{c}:: @,{c}. nodetest.texi(,258) * @,{C}:: @,{C}. nodetest.texi(,259) * @,c no brace:: @,c no brace. nodetest.texi(,260) @end menu nodetest.texi(,261) @c nodetest.texi(,262) @node @,{c},,,cedilla accent nodetest.texi(,263) @section @,{c} nodetest.texi(,264) @node @,{C},,,cedilla accent nodetest.texi(,265) @section @,{C} nodetest.texi(,266) @node @,c no brace,,,cedilla accent nodetest.texi(,267) @section @,c no brace nodetest.texi(,268) @c nodetest.texi(,269) @node rest,,Top,Top nodetest.texi(,270) @chapter rest nodetest.texi(,271) @menu nodetest.texi(,272) * @aa{}:: @aa{}. nodetest.texi(,273) * @ae{}:: @ae{}. nodetest.texi(,274) * @oe{}:: @oe{}. nodetest.texi(,275) * @AA{}:: @AA{}. nodetest.texi(,276) * @AE{}:: @AE{}. nodetest.texi(,277) * @OE{}:: @OE{}. nodetest.texi(,278) * @l{}:: @l{}. nodetest.texi(,279) * @o{}:: @o{}. nodetest.texi(,280) * @L{}:: @L{}. nodetest.texi(,281) * @O{}:: @O{}. nodetest.texi(,282) * @H{a}:: @H{a}. nodetest.texi(,283) * @u{a}:: @u{a}. nodetest.texi(,284) * @v{a}:: @v{a}. nodetest.texi(,285) * @udotaccent{a}:: @udotaccent{a} udotaccent. nodetest.texi(,286) * @dotaccent{a}:: @dotaccent{a} dotaccent. nodetest.texi(,287) * @ringaccent{a}:: @ringaccent{a} ringaccent. nodetest.texi(,288) * @tieaccent{a}:: @tieaccent{a} tieaccent. nodetest.texi(,289) * @ubaraccent{a}:: @ubaraccent{a} ubaraccent. nodetest.texi(,290) * @dotless{i}:: @dotless{i} dotless i. nodetest.texi(,291) * @dotless{j}:: @dotless{j} dotless j. nodetest.texi(,292) * @comma{}:: @comma{} comma nodetest.texi(,293) @end menu nodetest.texi(,294) @c nodetest.texi(,295) @node @aa{},,,rest nodetest.texi(,296) @section @aa{} nodetest.texi(,297) @node @ae{},,,rest nodetest.texi(,298) @section @ae{} nodetest.texi(,299) @node @oe{},,,rest nodetest.texi(,300) @section @oe{} nodetest.texi(,301) @node @AA{},,,rest nodetest.texi(,302) @section @AA{} nodetest.texi(,303) @node @AE{},,,rest nodetest.texi(,304) @section @AE{} nodetest.texi(,305) @node @OE{},,,rest nodetest.texi(,306) @section @OE{} nodetest.texi(,307) @node @l{},,,rest nodetest.texi(,308) @section @l{} nodetest.texi(,309) @node @o{},,,rest nodetest.texi(,310) @section @o{} nodetest.texi(,311) @node @L{},,,rest nodetest.texi(,312) @section @L{} nodetest.texi(,313) @node @O{},,,rest nodetest.texi(,314) @section @O{} nodetest.texi(,315) @node @H{a},,,rest nodetest.texi(,316) @section @H{a} nodetest.texi(,317) @node @u{a},,,rest nodetest.texi(,318) @section @u{a} nodetest.texi(,319) @node @v{a},,,rest nodetest.texi(,320) @section @v{a} nodetest.texi(,321) @node @udotaccent{a},,,rest nodetest.texi(,322) @section @udotaccent{a} nodetest.texi(,323) Test udotaccent. nodetest.texi(,324) @node @dotaccent{a},,,rest nodetest.texi(,325) @section @dotaccent{a} nodetest.texi(,326) Test dotaccent. nodetest.texi(,327) @node @ringaccent{a},,,rest nodetest.texi(,328) @section @ringaccent{a} nodetest.texi(,329) @node @tieaccent{a},,,rest nodetest.texi(,330) @section @tieaccent{a} nodetest.texi(,331) @node @ubaraccent{a},,,rest nodetest.texi(,332) @section @ubaraccent{a} nodetest.texi(,333) @node @dotless{i},,,rest nodetest.texi(,334) @section @dotless{i} nodetest.texi(,335) @node @dotless{j},,,rest nodetest.texi(,336) @section @dotless{j} nodetest.texi(,337) nodetest.texi(,338) @dots{} nodetest.texi(,339) nodetest.texi(,340) @enddots{} nodetest.texi(,341) nodetest.texi(,342) @exclamdown{} nodetest.texi(,343) nodetest.texi(,344) @questiondown{} nodetest.texi(,345) nodetest.texi(,346) @pounds{} nodetest.texi(,347) nodetest.texi(,348) @@- : @- nodetest.texi(,349) @@ followed by end of line: @ nodetest.texi(,350) @@ followed by tab: @ nodetest.texi(,351) @@ followed by space @ nodetest.texi(,352) @@*: @* and text followin @@*. nodetest.texi(,353) nodetest.texi(,354) @node @comma{},,,rest nodetest.texi(,355) @section @comma{} nodetest.texi(,356) @contents nodetest.texi(,357) @bye texi2html-1.82/test/encodings/res/texi_nodetest/nodetest.texi0000644000175000017500000001567311264347116026370 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @c @c It is not possible to test for @,{c} in @c nodename cause makeinfo can not @c handle cedilla's in node names. A cedilla @c has a comma which was recognized a as @c delimiter between node parts (next,previous etc.) @setfilename nodetest.info @node Top,Umlaut,(dir) @top @menu * Umlaut:: Umlaut. Another Heading * acute accent:: acute accent. * grave accent:: grave accent. * circumflex accent:: circumflex accent. * tilde accent:: tilde accent. * cedilla accent:: cedilla accent. * rest:: rest @@aa@{@} etc. @end menu @c @node Umlaut,,Top,Top @chapter Umlaut @menu * @"a:: @"a. * @"e:: @"e. * @"i:: @"i. * with brace @"{i}:: @"{i}. * with dotless @"{@dotless{i}}:: @"{@dotless{i}}. * @"o:: @"o. * @"u:: @"u. * @"y:: @"y. * @"A:: @"A. * @"E:: @"E. * @"I:: @"I. * @"O:: @"O. * @"U:: @"U. * @ss{}:: @ss{}. * no section:: Node without sectioning command. @end menu @c @node @"a,,,Umlaut @section @"a ref to @,{c} @ref{@,{c}}. @node @"e,,,Umlaut @section @"e @node @"i,,,Umlaut @section @"i @node with brace @"{i},,,Umlaut @section With brace @"{i} @node with dotless @"{@dotless{i}},,,Umlaut @section With dotless @"{@dotless{i}} before footnote @xref{footanchor}. @footnote{@anchor{footanchor}} after footnote @xref{footanchor}. @node @"o,,,Umlaut @section @"o Ref to an anchor at the end of the doc (@pxref{@'e-o, , there is an o-@'e could there be an @^{@dotless{i}}}). @node @"u,,,Umlaut @section @"u Another ref to an anchor (@pxref{x-spot, ,}). @node @"y,,,Umlaut @section @"y This is a ref to a node (@pxref{@'U, ,@'U}). @node @"A,,,Umlaut @section @"A Now a ref to a node without sectionning command, no text (@pxref{no section, , }). With text (@pxref{no section, ,but a text }). @node @"E,,,Umlaut @section @"E @node @"I,,,Umlaut @section @"I @node @"O,,,Umlaut @section @"O @node @"U,,,Umlaut @section @"U @node @ss{},,,Umlaut @section @ss{} @node no section,,,Umlaut This is a node without sectioning command. @c @node acute accent,,Top,Top @chapter acute accent @menu * @'a:: @'a. * @'e:: @'e. * @'i:: @'i. * @'o:: @'o. * @'u:: @'u. * @'y:: @'y. * @'A:: @'A. * @'E:: @'E. * @'I:: @'I. * @'O:: @'O. * @'U:: @'U. * @'Y:: @'Y. @end menu @c @node @'a,,,acute accent @section @'a With brace @'{a}. Testing ' " ` ^. @node @'e,,,acute accent @section @'e @node @'i,,,acute accent @section @'i @node @'o,,,acute accent @section @'o @node @'u,,,acute accent @section @'u @node @'y,,,acute accent @section @'y @node @'A,,,acute accent @section @'A @node @'E,,,acute accent @section @'E @node @'I,,,acute accent @section @'I @node @'O,,,acute accent @section @'O @node @'U,,,acute accent @section @'U @node @'Y,,,acute accent @section @'Y This is a ref to @"u (@pxref{@"u, ,@"u}). Another one, with node only (@pxref{@"u, ,}). @c @node grave accent,,Top,Top @chapter grave accent @menu * @`a:: @`a. * @`e:: @`e. * @`i:: @`i. * with brace @`{i}:: @`{i}. * with dotless @`{@dotless{i}}:: @`{@dotless{i}}. * @`o:: @`o. * @`u:: @`u. * @`A:: @`A. * @`E:: @`E. * @`I:: @`I. * @`O:: @`O. * @`U:: @`U. @end menu @c @node @`a,,,grave accent @section @`a @node @`e,,,grave accent @section @`e @node @`i,,,grave accent @section @`i @node with brace @`{i},,,grave accent @section @`{i} @node with dotless @`{@dotless{i}},,,grave accent @section @`{@dotless{i}} @node @`o,,,grave accent @section @`o @node @`u,,,grave accent @section @`u @node @`A,,,grave accent @section @`A @node @`E,,,grave accent @section @`E @node @`I,,,grave accent @section @`I @node @`O,,,grave accent @section @`O @node @`U,,,grave accent @section @`U @c @node circumflex accent,,Top,Top @chapter circumflex accent @menu * @^a:: @^a. * @^e:: @^e. * @^i:: @^i. * with brace @^{i}:: @^{i}. * with dotless @^{@dotless{i}}:: @^{@dotless{i}}. * @^o:: @^o. * @^u:: @^u. * @^A:: @^A. * @^E:: @^E. * @^I:: @^I. * @^O:: @^O. * @^U:: @^U. @end menu @c @node @^a,,,circumflex accent @section @^a @node @^e,,,circumflex accent @section @^e @node @^i,,,circumflex accent @section @^i @node with brace @^{i},,,circumflex accent @section @^{i} Test @@^@{i@}. @node with dotless @^{@dotless{i}},,,circumflex accent @section @^{@dotless{i}} Test @@^@{@@dotless@{i@}@}. @node @^o,,,circumflex accent @section @^o @node @^u,,,circumflex accent @section @^u @node @^A,,,circumflex accent @section @^A @node @^E,,,circumflex accent @section @^E @node @^I,,,circumflex accent @section @^I @node @^O,,,circumflex accent @section @^O @node @^U,,,circumflex accent @section @^U @c @node tilde accent,,Top,Top @chapter tilde accent @menu * @~a:: @~a. * @~n:: @~n. * @~o:: @~o. * @~A:: @~A. * @~O:: @~O. @end menu @c @node @~a,,,tilde accent @section @~a @node @~n,,,tilde accent @section @~n @node @~o,,,tilde accent @section @~o @node @~A,,,tilde accent @section @~A @node @~O,,,tilde accent @section @~O This marks the @anchor{x-spot}spot. A second one with accented char @anchor{@'e-o}. @c @node cedilla accent,,Top,Top @chapter cedilla accent @menu * @,{c}:: @,{c}. * @,{C}:: @,{C}. * @,c no brace:: @,c no brace. @end menu @c @node @,{c},,,cedilla accent @section @,{c} @node @,{C},,,cedilla accent @section @,{C} @node @,c no brace,,,cedilla accent @section @,c no brace @c @node rest,,Top,Top @chapter rest @menu * @aa{}:: @aa{}. * @ae{}:: @ae{}. * @oe{}:: @oe{}. * @AA{}:: @AA{}. * @AE{}:: @AE{}. * @OE{}:: @OE{}. * @l{}:: @l{}. * @o{}:: @o{}. * @L{}:: @L{}. * @O{}:: @O{}. * @H{a}:: @H{a}. * @u{a}:: @u{a}. * @v{a}:: @v{a}. * @udotaccent{a}:: @udotaccent{a} udotaccent. * @dotaccent{a}:: @dotaccent{a} dotaccent. * @ringaccent{a}:: @ringaccent{a} ringaccent. * @tieaccent{a}:: @tieaccent{a} tieaccent. * @ubaraccent{a}:: @ubaraccent{a} ubaraccent. * @dotless{i}:: @dotless{i} dotless i. * @dotless{j}:: @dotless{j} dotless j. * @comma{}:: @comma{} comma @end menu @c @node @aa{},,,rest @section @aa{} @node @ae{},,,rest @section @ae{} @node @oe{},,,rest @section @oe{} @node @AA{},,,rest @section @AA{} @node @AE{},,,rest @section @AE{} @node @OE{},,,rest @section @OE{} @node @l{},,,rest @section @l{} @node @o{},,,rest @section @o{} @node @L{},,,rest @section @L{} @node @O{},,,rest @section @O{} @node @H{a},,,rest @section @H{a} @node @u{a},,,rest @section @u{a} @node @v{a},,,rest @section @v{a} @node @udotaccent{a},,,rest @section @udotaccent{a} Test udotaccent. @node @dotaccent{a},,,rest @section @dotaccent{a} Test dotaccent. @node @ringaccent{a},,,rest @section @ringaccent{a} @node @tieaccent{a},,,rest @section @tieaccent{a} @node @ubaraccent{a},,,rest @section @ubaraccent{a} @node @dotless{i},,,rest @section @dotless{i} @node @dotless{j},,,rest @section @dotless{j} @dots{} @enddots{} @exclamdown{} @questiondown{} @pounds{} @@- : @- @@ followed by end of line: @ @@ followed by tab: @ @@ followed by space @ @@*: @* and text followin @@*. @node @comma{},,,rest @section @comma{} @contents @bye texi2html-1.82/test/encodings/res/texi_nodetest/nodetest.passfirst0000644000175000017500000003330511264347116027425 0ustar flichtenheldflichtenheldnodetest.texi(,2) @c nodetest.texi(,3) @c It is not possible to test for @,{c} in nodetest.texi(,4) @c nodename cause makeinfo can not nodetest.texi(,5) @c handle cedilla's in node names. A cedilla nodetest.texi(,6) @c has a comma which was recognized a as nodetest.texi(,7) @c delimiter between node parts (next,previous etc.) nodetest.texi(,8) @setfilename nodetest.info nodetest.texi(,9) @node Top,Umlaut,(dir) nodetest.texi(,10) @top nodetest.texi(,11) @menu nodetest.texi(,12) * Umlaut:: Umlaut. nodetest.texi(,13) nodetest.texi(,14) nodetest.texi(,15) Another Heading nodetest.texi(,16) nodetest.texi(,17) nodetest.texi(,18) * acute accent:: acute accent. nodetest.texi(,19) * grave accent:: grave accent. nodetest.texi(,20) * circumflex accent:: circumflex accent. nodetest.texi(,21) * tilde accent:: tilde accent. nodetest.texi(,22) * cedilla accent:: cedilla accent. nodetest.texi(,23) * rest:: rest @@aa@{@} etc. nodetest.texi(,24) @end menu nodetest.texi(,25) @c nodetest.texi(,26) @node Umlaut,,Top,Top nodetest.texi(,27) @chapter Umlaut nodetest.texi(,28) @menu nodetest.texi(,29) * @"a:: @"a. nodetest.texi(,30) * @"e:: @"e. nodetest.texi(,31) * @"i:: @"i. nodetest.texi(,32) * with brace @"{i}:: @"{i}. nodetest.texi(,33) * with dotless @"{@dotless{i}}:: @"{@dotless{i}}. nodetest.texi(,34) * @"o:: @"o. nodetest.texi(,35) * @"u:: @"u. nodetest.texi(,36) * @"y:: @"y. nodetest.texi(,37) * @"A:: @"A. nodetest.texi(,38) * @"E:: @"E. nodetest.texi(,39) * @"I:: @"I. nodetest.texi(,40) * @"O:: @"O. nodetest.texi(,41) * @"U:: @"U. nodetest.texi(,42) * @ss{}:: @ss{}. nodetest.texi(,43) * no section:: Node without sectioning command. nodetest.texi(,44) @end menu nodetest.texi(,45) @c nodetest.texi(,46) @node @"a,,,Umlaut nodetest.texi(,47) @section @"a nodetest.texi(,48) ref to @,{c} @ref{@,{c}}. nodetest.texi(,49) @node @"e,,,Umlaut nodetest.texi(,50) @section @"e nodetest.texi(,51) @node @"i,,,Umlaut nodetest.texi(,52) @section @"i nodetest.texi(,53) @node with brace @"{i},,,Umlaut nodetest.texi(,54) @section With brace @"{i} nodetest.texi(,55) @node with dotless @"{@dotless{i}},,,Umlaut nodetest.texi(,56) @section With dotless @"{@dotless{i}} nodetest.texi(,57) nodetest.texi(,58) before footnote @xref{footanchor}. nodetest.texi(,59) nodetest.texi(,60) @footnote{@anchor{footanchor}} nodetest.texi(,61) nodetest.texi(,62) after footnote @xref{footanchor}. nodetest.texi(,63) nodetest.texi(,64) @node @"o,,,Umlaut nodetest.texi(,65) @section @"o nodetest.texi(,66) Ref to an anchor at the end of the doc nodetest.texi(,67) (@pxref{@'e-o, , there is an o-@'e could there be an @^{@dotless{i}}}). nodetest.texi(,68) @node @"u,,,Umlaut nodetest.texi(,69) @section @"u nodetest.texi(,70) Another ref to an anchor (@pxref{x-spot, ,}). nodetest.texi(,71) @node @"y,,,Umlaut nodetest.texi(,72) @section @"y nodetest.texi(,73) This is a ref to a node (@pxref{@'U, ,@'U}). nodetest.texi(,74) nodetest.texi(,75) @node @"A,,,Umlaut nodetest.texi(,76) @section @"A nodetest.texi(,77) nodetest.texi(,78) Now a ref to a node without sectionning command, nodetest.texi(,79) no text (@pxref{no section, , }). nodetest.texi(,80) With text (@pxref{no section, ,but a text }). nodetest.texi(,81) nodetest.texi(,82) @node @"E,,,Umlaut nodetest.texi(,83) @section @"E nodetest.texi(,84) @node @"I,,,Umlaut nodetest.texi(,85) @section @"I nodetest.texi(,86) @node @"O,,,Umlaut nodetest.texi(,87) @section @"O nodetest.texi(,88) @node @"U,,,Umlaut nodetest.texi(,89) @section @"U nodetest.texi(,90) @node @ss{},,,Umlaut nodetest.texi(,91) @section @ss{} nodetest.texi(,92) @node no section,,,Umlaut nodetest.texi(,93) This is a node without sectioning command. nodetest.texi(,94) @c nodetest.texi(,95) @node acute accent,,Top,Top nodetest.texi(,96) @chapter acute accent nodetest.texi(,97) @menu nodetest.texi(,98) * @'a:: @'a. nodetest.texi(,99) * @'e:: @'e. nodetest.texi(,100) * @'i:: @'i. nodetest.texi(,101) * @'o:: @'o. nodetest.texi(,102) * @'u:: @'u. nodetest.texi(,103) * @'y:: @'y. nodetest.texi(,104) * @'A:: @'A. nodetest.texi(,105) * @'E:: @'E. nodetest.texi(,106) * @'I:: @'I. nodetest.texi(,107) * @'O:: @'O. nodetest.texi(,108) * @'U:: @'U. nodetest.texi(,109) * @'Y:: @'Y. nodetest.texi(,110) @end menu nodetest.texi(,111) @c nodetest.texi(,112) @node @'a,,,acute accent nodetest.texi(,113) @section @'a nodetest.texi(,114) With brace @'{a}. Testing ' " ` ^. nodetest.texi(,115) @node @'e,,,acute accent nodetest.texi(,116) @section @'e nodetest.texi(,117) @node @'i,,,acute accent nodetest.texi(,118) @section @'i nodetest.texi(,119) @node @'o,,,acute accent nodetest.texi(,120) @section @'o nodetest.texi(,121) @node @'u,,,acute accent nodetest.texi(,122) @section @'u nodetest.texi(,123) @node @'y,,,acute accent nodetest.texi(,124) @section @'y nodetest.texi(,125) @node @'A,,,acute accent nodetest.texi(,126) @section @'A nodetest.texi(,127) @node @'E,,,acute accent nodetest.texi(,128) @section @'E nodetest.texi(,129) @node @'I,,,acute accent nodetest.texi(,130) @section @'I nodetest.texi(,131) @node @'O,,,acute accent nodetest.texi(,132) @section @'O nodetest.texi(,133) @node @'U,,,acute accent nodetest.texi(,134) @section @'U nodetest.texi(,135) @node @'Y,,,acute accent nodetest.texi(,136) @section @'Y nodetest.texi(,137) This is a ref to @"u (@pxref{@"u, ,@"u}). nodetest.texi(,138) Another one, with node only (@pxref{@"u, ,}). nodetest.texi(,139) nodetest.texi(,143) nodetest.texi(,144) @c nodetest.texi(,145) @node grave accent,,Top,Top nodetest.texi(,146) @chapter grave accent nodetest.texi(,147) @menu nodetest.texi(,148) * @`a:: @`a. nodetest.texi(,149) * @`e:: @`e. nodetest.texi(,150) * @`i:: @`i. nodetest.texi(,151) * with brace @`{i}:: @`{i}. nodetest.texi(,152) * with dotless @`{@dotless{i}}:: @`{@dotless{i}}. nodetest.texi(,153) * @`o:: @`o. nodetest.texi(,154) * @`u:: @`u. nodetest.texi(,155) * @`A:: @`A. nodetest.texi(,156) * @`E:: @`E. nodetest.texi(,157) * @`I:: @`I. nodetest.texi(,158) * @`O:: @`O. nodetest.texi(,159) * @`U:: @`U. nodetest.texi(,160) @end menu nodetest.texi(,161) @c nodetest.texi(,162) @node @`a,,,grave accent nodetest.texi(,163) @section @`a nodetest.texi(,164) @node @`e,,,grave accent nodetest.texi(,165) @section @`e nodetest.texi(,166) @node @`i,,,grave accent nodetest.texi(,167) @section @`i nodetest.texi(,168) @node with brace @`{i},,,grave accent nodetest.texi(,169) @section @`{i} nodetest.texi(,170) @node with dotless @`{@dotless{i}},,,grave accent nodetest.texi(,171) @section @`{@dotless{i}} nodetest.texi(,172) @node @`o,,,grave accent nodetest.texi(,173) @section @`o nodetest.texi(,174) @node @`u,,,grave accent nodetest.texi(,175) @section @`u nodetest.texi(,176) @node @`A,,,grave accent nodetest.texi(,177) @section @`A nodetest.texi(,178) @node @`E,,,grave accent nodetest.texi(,179) @section @`E nodetest.texi(,180) @node @`I,,,grave accent nodetest.texi(,181) @section @`I nodetest.texi(,182) @node @`O,,,grave accent nodetest.texi(,183) @section @`O nodetest.texi(,184) @node @`U,,,grave accent nodetest.texi(,185) @section @`U nodetest.texi(,186) @c nodetest.texi(,187) @node circumflex accent,,Top,Top nodetest.texi(,188) @chapter circumflex accent nodetest.texi(,189) @menu nodetest.texi(,190) * @^a:: @^a. nodetest.texi(,191) * @^e:: @^e. nodetest.texi(,192) * @^i:: @^i. nodetest.texi(,193) * with brace @^{i}:: @^{i}. nodetest.texi(,194) * with dotless @^{@dotless{i}}:: @^{@dotless{i}}. nodetest.texi(,195) * @^o:: @^o. nodetest.texi(,196) * @^u:: @^u. nodetest.texi(,197) * @^A:: @^A. nodetest.texi(,198) * @^E:: @^E. nodetest.texi(,199) * @^I:: @^I. nodetest.texi(,200) * @^O:: @^O. nodetest.texi(,201) * @^U:: @^U. nodetest.texi(,202) @end menu nodetest.texi(,203) @c nodetest.texi(,204) @node @^a,,,circumflex accent nodetest.texi(,205) @section @^a nodetest.texi(,206) @node @^e,,,circumflex accent nodetest.texi(,207) @section @^e nodetest.texi(,208) @node @^i,,,circumflex accent nodetest.texi(,209) @section @^i nodetest.texi(,210) @node with brace @^{i},,,circumflex accent nodetest.texi(,211) @section @^{i} nodetest.texi(,212) Test @@^@{i@}. nodetest.texi(,213) @node with dotless @^{@dotless{i}},,,circumflex accent nodetest.texi(,214) @section @^{@dotless{i}} nodetest.texi(,215) Test @@^@{@@dotless@{i@}@}. nodetest.texi(,216) @node @^o,,,circumflex accent nodetest.texi(,217) @section @^o nodetest.texi(,218) @node @^u,,,circumflex accent nodetest.texi(,219) @section @^u nodetest.texi(,220) @node @^A,,,circumflex accent nodetest.texi(,221) @section @^A nodetest.texi(,222) @node @^E,,,circumflex accent nodetest.texi(,223) @section @^E nodetest.texi(,224) @node @^I,,,circumflex accent nodetest.texi(,225) @section @^I nodetest.texi(,226) @node @^O,,,circumflex accent nodetest.texi(,227) @section @^O nodetest.texi(,228) @node @^U,,,circumflex accent nodetest.texi(,229) @section @^U nodetest.texi(,230) @c nodetest.texi(,231) @node tilde accent,,Top,Top nodetest.texi(,232) @chapter tilde accent nodetest.texi(,233) @menu nodetest.texi(,234) * @~a:: @~a. nodetest.texi(,235) * @~n:: @~n. nodetest.texi(,236) * @~o:: @~o. nodetest.texi(,237) * @~A:: @~A. nodetest.texi(,238) * @~O:: @~O. nodetest.texi(,239) @end menu nodetest.texi(,240) @c nodetest.texi(,241) @node @~a,,,tilde accent nodetest.texi(,242) @section @~a nodetest.texi(,243) @node @~n,,,tilde accent nodetest.texi(,244) @section @~n nodetest.texi(,245) @node @~o,,,tilde accent nodetest.texi(,246) @section @~o nodetest.texi(,247) @node @~A,,,tilde accent nodetest.texi(,248) @section @~A nodetest.texi(,249) @node @~O,,,tilde accent nodetest.texi(,250) @section @~O nodetest.texi(,251) This marks the @anchor{x-spot}spot. nodetest.texi(,252) A second one with accented char @anchor{@'e-o}. nodetest.texi(,253) @c nodetest.texi(,254) @node cedilla accent,,Top,Top nodetest.texi(,255) @chapter cedilla accent nodetest.texi(,256) @menu nodetest.texi(,257) * @,{c}:: @,{c}. nodetest.texi(,258) * @,{C}:: @,{C}. nodetest.texi(,259) * @,c no brace:: @,c no brace. nodetest.texi(,260) @end menu nodetest.texi(,261) @c nodetest.texi(,262) @node @,{c},,,cedilla accent nodetest.texi(,263) @section @,{c} nodetest.texi(,264) @node @,{C},,,cedilla accent nodetest.texi(,265) @section @,{C} nodetest.texi(,266) @node @,c no brace,,,cedilla accent nodetest.texi(,267) @section @,c no brace nodetest.texi(,268) @c nodetest.texi(,269) @node rest,,Top,Top nodetest.texi(,270) @chapter rest nodetest.texi(,271) @menu nodetest.texi(,272) * @aa{}:: @aa{}. nodetest.texi(,273) * @ae{}:: @ae{}. nodetest.texi(,274) * @oe{}:: @oe{}. nodetest.texi(,275) * @AA{}:: @AA{}. nodetest.texi(,276) * @AE{}:: @AE{}. nodetest.texi(,277) * @OE{}:: @OE{}. nodetest.texi(,278) * @l{}:: @l{}. nodetest.texi(,279) * @o{}:: @o{}. nodetest.texi(,280) * @L{}:: @L{}. nodetest.texi(,281) * @O{}:: @O{}. nodetest.texi(,282) * @H{a}:: @H{a}. nodetest.texi(,283) * @u{a}:: @u{a}. nodetest.texi(,284) * @v{a}:: @v{a}. nodetest.texi(,285) * @udotaccent{a}:: @udotaccent{a} udotaccent. nodetest.texi(,286) * @dotaccent{a}:: @dotaccent{a} dotaccent. nodetest.texi(,287) * @ringaccent{a}:: @ringaccent{a} ringaccent. nodetest.texi(,288) * @tieaccent{a}:: @tieaccent{a} tieaccent. nodetest.texi(,289) * @ubaraccent{a}:: @ubaraccent{a} ubaraccent. nodetest.texi(,290) * @dotless{i}:: @dotless{i} dotless i. nodetest.texi(,291) * @dotless{j}:: @dotless{j} dotless j. nodetest.texi(,292) * @comma{}:: @comma{} comma nodetest.texi(,293) @end menu nodetest.texi(,294) @c nodetest.texi(,295) @node @aa{},,,rest nodetest.texi(,296) @section @aa{} nodetest.texi(,297) @node @ae{},,,rest nodetest.texi(,298) @section @ae{} nodetest.texi(,299) @node @oe{},,,rest nodetest.texi(,300) @section @oe{} nodetest.texi(,301) @node @AA{},,,rest nodetest.texi(,302) @section @AA{} nodetest.texi(,303) @node @AE{},,,rest nodetest.texi(,304) @section @AE{} nodetest.texi(,305) @node @OE{},,,rest nodetest.texi(,306) @section @OE{} nodetest.texi(,307) @node @l{},,,rest nodetest.texi(,308) @section @l{} nodetest.texi(,309) @node @o{},,,rest nodetest.texi(,310) @section @o{} nodetest.texi(,311) @node @L{},,,rest nodetest.texi(,312) @section @L{} nodetest.texi(,313) @node @O{},,,rest nodetest.texi(,314) @section @O{} nodetest.texi(,315) @node @H{a},,,rest nodetest.texi(,316) @section @H{a} nodetest.texi(,317) @node @u{a},,,rest nodetest.texi(,318) @section @u{a} nodetest.texi(,319) @node @v{a},,,rest nodetest.texi(,320) @section @v{a} nodetest.texi(,321) @node @udotaccent{a},,,rest nodetest.texi(,322) @section @udotaccent{a} nodetest.texi(,323) Test udotaccent. nodetest.texi(,324) @node @dotaccent{a},,,rest nodetest.texi(,325) @section @dotaccent{a} nodetest.texi(,326) Test dotaccent. nodetest.texi(,327) @node @ringaccent{a},,,rest nodetest.texi(,328) @section @ringaccent{a} nodetest.texi(,329) @node @tieaccent{a},,,rest nodetest.texi(,330) @section @tieaccent{a} nodetest.texi(,331) @node @ubaraccent{a},,,rest nodetest.texi(,332) @section @ubaraccent{a} nodetest.texi(,333) @node @dotless{i},,,rest nodetest.texi(,334) @section @dotless{i} nodetest.texi(,335) @node @dotless{j},,,rest nodetest.texi(,336) @section @dotless{j} nodetest.texi(,337) nodetest.texi(,338) @dots{} nodetest.texi(,339) nodetest.texi(,340) @enddots{} nodetest.texi(,341) nodetest.texi(,342) @exclamdown{} nodetest.texi(,343) nodetest.texi(,344) @questiondown{} nodetest.texi(,345) nodetest.texi(,346) @pounds{} nodetest.texi(,347) nodetest.texi(,348) @@- : @- nodetest.texi(,349) @@ followed by end of line: @ nodetest.texi(,350) @@ followed by tab: @ nodetest.texi(,351) @@ followed by space @ nodetest.texi(,352) @@*: @* and text followin @@*. nodetest.texi(,353) nodetest.texi(,354) @node @comma{},,,rest nodetest.texi(,355) @section @comma{} nodetest.texi(,356) @contents nodetest.texi(,357) @bye texi2html-1.82/test/encodings/res/at_commands_in_refs_utf8_use_nodes/0000755000175000017500000000000011264347117027763 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/at_commands_in_refs_utf8_use_nodes/at_commands_in_refs_utf8.20000644000175000017500000000000011264347117034774 0ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/at_commands_in_refs_utf8_use_nodes/index.html0000644000175000017500000000331711264347117031764 0ustar flichtenheldflichtenheld Untitled Document: Top

    The node you are looking for is at Top.

    ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootroottexi2html-1.82/test/encodings/res/at_commands_in_refs_utf8_use_nodes/at_commands_in_refs_utf8_abt.htmltexi2html-1.82/test/encodings/res/at_commands_in_refs_utf8_use_nodes/at_commands_in_refs_utf8_abt.ht0000644000175000017500000001177611264347117036122 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/at_commands_in_refs_utf8_use_nodes/at_commands_in_refs_utf8.html0000644000175000017500000000562611264347117035622 0ustar flichtenheldflichtenheld Untitled Document: Top
    [Top] [Contents] [Index] [ ? ]

    Top


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootroottexi2html-1.82/test/encodings/res/at_commands_in_refs_utf8_use_nodes/A-SC-node-i-i-E-l-C-_00a1-a-A.htmltexi2html-1.82/test/encodings/res/at_commands_in_refs_utf8_use_nodes/A-SC-node-i-i-E-l-C-_00a1-a-A.h0000644000175000017500000000720611264347117034210 0ustar flichtenheldflichtenheld Untitled Document: 1. A SC node ï ï Ē` ł Ć, ¡ à Â
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. A SC node ï ï Ē` ł Ć, ¡ à Â

    see (manual)a strong ref with SC, a i trema ï, a dotless i trema ï Ē` and exclamdown ¡ à Â.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/at_commands_in_refs_latin1_use_nodes_no_unicode/0000755000175000017500000000000011264347116032466 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/at_commands_in_refs_latin1_use_nodes_no_unicode/index.html0000644000175000017500000000333011264347116034462 0ustar flichtenheldflichtenheld Untitled Document: Top

    The node you are looking for is at Top.

    ././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootroottexi2html-1.82/test/encodings/res/at_commands_in_refs_latin1_use_nodes_no_unicode/at_commands_in_refs_latin1_abt.htmltexi2html-1.82/test/encodings/res/at_commands_in_refs_latin1_use_nodes_no_unicode/at_commands_in_ref0000644000175000017500000001200711264347116036220 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    ././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootroottexi2html-1.82/test/encodings/res/at_commands_in_refs_latin1_use_nodes_no_unicode/at_commands_in_refs_latin1.2texi2html-1.82/test/encodings/res/at_commands_in_refs_latin1_use_nodes_no_unicode/at_commands_in_ref0000644000175000017500000000000011264347116036206 0ustar flichtenheldflichtenheld././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootroottexi2html-1.82/test/encodings/res/at_commands_in_refs_latin1_use_nodes_no_unicode/A-SC-node-i-i-E-l-C-_00a1-a-A.htmltexi2html-1.82/test/encodings/res/at_commands_in_refs_latin1_use_nodes_no_unicode/A-SC-node-i-i-E-l-0000644000175000017500000000723211264347116035167 0ustar flichtenheldflichtenheld Untitled Document: 1. A SC node ï ï Ē` ł Ć, ¡
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. A SC node ï ï Ē` ł Ć, ¡

    see (manual)a strong ref with SC, a i trema ï, a dotless i trema ï Ē` and exclamdown ¡ .


    This document was generated by a tester on a sunny day using texi2html.

    ././@LongLink0000000000000000000000000000016200000000000011564 Lustar rootroottexi2html-1.82/test/encodings/res/at_commands_in_refs_latin1_use_nodes_no_unicode/at_commands_in_refs_latin1.htmltexi2html-1.82/test/encodings/res/at_commands_in_refs_latin1_use_nodes_no_unicode/at_commands_in_ref0000644000175000017500000000564711264347116036234 0ustar flichtenheldflichtenheld Untitled Document: Top
    [Top] [Contents] [Index] [ ? ]

    Top


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/0000755000175000017500000000000011264347116027362 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/U.html0000644000175000017500000001642411264347116030463 0ustar flichtenheldflichtenheld Untitled Document: 1.13 Ü
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.13 Ü


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.11 Ú


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.12 Ù


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.12 Û


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/A.html0000644000175000017500000002144711264347116030440 0ustar flichtenheldflichtenheld Untitled Document: 1.9 Ä
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.9 Ä

    Now a ref to a node without sectionning command, no text (see no section). With text (see but a text).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.7 Á


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.8 À


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.8 Â


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.4 Ã


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/nodetest.20000644000175000017500000000010011264347116031261 0ustar flichtenheldflichtenheld*** Node equivalent with `@aa{}' already used `@ringaccent{a}' texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/Y.html0000644000175000017500000000643311264347116030466 0ustar flichtenheldflichtenheld Untitled Document: 2.12 Ý
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.12 Ý

    This is a ref to ü (see ü). Another one, with node only (see ü).


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/L.html0000644000175000017500000000601311264347116030443 0ustar flichtenheldflichtenheld Untitled Document: 7.9 Ł
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.9 Ł


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/cedilla-accent.html0000644000175000017500000000721111264347116033101 0ustar flichtenheldflichtenheld Untitled Document: 6. cedilla accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6. cedilla accent


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/AA.html0000644000175000017500000000602011264347116030527 0ustar flichtenheldflichtenheld Untitled Document: 7.4 Å
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.4 Å


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/l.html0000644000175000017500000000601311264347116030503 0ustar flichtenheldflichtenheld Untitled Document: 7.7 ł
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.7 ł


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/with-brace-i.html0000644000175000017500000001401511264347116032524 0ustar flichtenheldflichtenheld Untitled Document: 1.4 With brace ï
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4 With brace ï


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.4 ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.4 î

    Test @^{i}.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/aa.html0000644000175000017500000001044711264347116030637 0ustar flichtenheldflichtenheld Untitled Document: 7.1 å
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.1 å


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.16 å


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/footanchor.html0000644000175000017500000000334111264347116032413 0ustar flichtenheldflichtenheld Untitled Document: footanchor

    The node you are looking for is at footanchor.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/acute-accent.html0000644000175000017500000001162311264347116032607 0ustar flichtenheldflichtenheld Untitled Document: 2. acute accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. acute accent


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/e.html0000644000175000017500000001634411264347116030504 0ustar flichtenheldflichtenheld Untitled Document: 1.2 ë
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2 ë


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2 é


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.2 è


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.2 ê


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/n.html0000644000175000017500000000616711264347116030517 0ustar flichtenheldflichtenheld Untitled Document: 5.2 ñ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.2 ñ


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/rest.html0000644000175000017500000001425611264347116031235 0ustar flichtenheldflichtenheld Untitled Document: 7. rest
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7. rest


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/index.html0000644000175000017500000000325711264347116031366 0ustar flichtenheldflichtenheld Untitled Document: Top

    The node you are looking for is at Top.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/_002c.html0000644000175000017500000000566711264347116031071 0ustar flichtenheldflichtenheld Untitled Document: 7.21 ,
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.21 ,


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/nodetest_abt.html0000644000175000017500000001215411264347116032726 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/ae.html0000644000175000017500000000602011264347116030633 0ustar flichtenheldflichtenheld Untitled Document: 7.2 æ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.2 æ


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/no-section.html0000644000175000017500000000620311264347116032327 0ustar flichtenheldflichtenheld Untitled Document: no section
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    no section

    This is a node without sectioning command.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/tilde-accent.html0000644000175000017500000000764411264347116032617 0ustar flichtenheldflichtenheld Untitled Document: 5. tilde accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5. tilde accent


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/C.html0000644000175000017500000000617511264347116030443 0ustar flichtenheldflichtenheld Untitled Document: 6.2 Ç
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.2 Ç


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/nodetest_toc.html0000644000175000017500000002232411264347116032745 0ustar flichtenheldflichtenheld Untitled Document: Table of Contents
    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/E.html0000644000175000017500000001635011264347116030441 0ustar flichtenheldflichtenheld Untitled Document: 1.10 Ë
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.10 Ë


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.8 É


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.9 È


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.9 Ê


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/u.html0000644000175000017500000001646211264347116030525 0ustar flichtenheldflichtenheld Untitled Document: 1.7 ü
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.7 ü

    Another ref to an anchor (see x-spot).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.5 ú


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.7 ù


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.7 û


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/nodetest_fot.html0000644000175000017500000000543611264347116032755 0ustar flichtenheldflichtenheld Untitled Document: Footnotes
    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/OE.html0000644000175000017500000001045111264347116030554 0ustar flichtenheldflichtenheld Untitled Document: 7.6 Œ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.6 Œ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.10 Ø


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/c.html0000644000175000017500000000617611264347116030504 0ustar flichtenheldflichtenheld Untitled Document: 6.1 ç
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.1 ç


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/i.html0000644000175000017500000002105211264347116030500 0ustar flichtenheldflichtenheld Untitled Document: 1.3 ï
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.3 ï


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3 í


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.3 ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3 î


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.19 i


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/oe.html0000644000175000017500000001045311264347116030656 0ustar flichtenheldflichtenheld Untitled Document: 7.3 œ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.3 œ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.8 ø


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/circumflex-accent.html0000644000175000017500000001200111264347116033636 0ustar flichtenheldflichtenheld Untitled Document: 4. circumflex accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4. circumflex accent


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/y.html0000644000175000017500000001103511264347116030520 0ustar flichtenheldflichtenheld Untitled Document: 1.8 ÿ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.8 ÿ

    This is a ref to a node (see Ú).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.6 ý


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/ss.html0000644000175000017500000000614711264347116030705 0ustar flichtenheldflichtenheld Untitled Document: 1.14 ß
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.14 ß


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/e_002do.html0000644000175000017500000000332311264347116031401 0ustar flichtenheldflichtenheld Untitled Document: é-o

    The node you are looking for is at é-o.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/O.html0000644000175000017500000002136211264347116030452 0ustar flichtenheldflichtenheld Untitled Document: 1.12 Ö
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.12 Ö


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.10 Ó


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.11 Ò


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.11 Ô


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.5 Õ

    This marks the spot. A second one with accented char .


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/o.html0000644000175000017500000002146411264347116030515 0ustar flichtenheldflichtenheld Untitled Document: 1.6 ö
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.6 ö

    Ref to an anchor at the end of the doc (see there is an o-é could there be an î).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4 ó


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.6 ò


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.6 ô


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.3 õ


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/grave-accent.html0000644000175000017500000001177311264347116032620 0ustar flichtenheldflichtenheld Untitled Document: 3. grave accent
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. grave accent


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/I.html0000644000175000017500000001635211264347116030447 0ustar flichtenheldflichtenheld Untitled Document: 1.11 Ï
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.11 Ï


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.9 Í


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.10 Ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.10 Î


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/c-no-brace.html0000644000175000017500000000624011264347116032160 0ustar flichtenheldflichtenheld Untitled Document: 6.3 ç no brace
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.3 ç no brace


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/a.html0000644000175000017500000004327211264347116030500 0ustar flichtenheldflichtenheld Untitled Document: 1.1 ä
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 ä

    ref to ç ç.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.1 á

    With brace á. Testing ’ " ‘ ^.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.1 à


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.1 â


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.1 ã


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.11 a''



    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.12 ă



    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.13 a<



    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.14 ạ

    Test udotaccent.



    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.15 ȧ

    Test dotaccent.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.17 a[



    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.18 a_


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/nodetest.html0000644000175000017500000000772111264347116032104 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Top


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/AE.html0000644000175000017500000000602011264347116030533 0ustar flichtenheldflichtenheld Untitled Document: 7.5 Æ
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.5 Æ


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/x_002dspot.html0000644000175000017500000000327311264347116032157 0ustar flichtenheldflichtenheld Untitled Document: x-spot

    The node you are looking for is at x-spot.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/Umlaut.html0000644000175000017500000001261211264347116031521 0ustar flichtenheldflichtenheld Untitled Document: 1. Umlaut
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Umlaut


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/with-dotless-i.html0000644000175000017500000001440211264347116033125 0ustar flichtenheldflichtenheld Untitled Document: 1.5 With dotless ï
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.5 With dotless ï

    before footnote See footanchor.

    (1)

    after footnote See footanchor.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.5 ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.5 î

    Test @^{@dotless{i}}.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/nodetest_use_nodes_no_unidecode/j.html0000644000175000017500000000640211264347116030503 0ustar flichtenheldflichtenheld Untitled Document: 7.20 j
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.20 j

    ...

    ¡

    ¿

    £

    @- : @ followed by end of line:   @ followed by tab:   @ followed by space   @*:
    and text followin @*.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/texi_multi_lang/0000755000175000017500000000000011264347117024143 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/texi_multi_lang/multi_lang.passtexi0000644000175000017500000000322511264347117030062 0ustar flichtenheldflichtenheldmulti_lang.texi(,2) multi_lang.texi(,3) @setfilename multi_lang.info multi_lang.texi(,4) multi_lang.texi(,5) @documentlanguage fr_NOWHERE multi_lang.texi(,6) multi_lang.texi(,7) @node Top multi_lang.texi(,8) @top Multi language file multi_lang.texi(,9) multi_lang.texi(,10) This is in french multi_lang.texi(,11) multi_lang.texi(,12) @menu multi_lang.texi(,13) * chapter fr_NOWHERE:: multi_lang.texi(,14) * chapter ja:: multi_lang.texi(,15) * chapter en:: multi_lang.texi(,16) * chapter pt_BR:: multi_lang.texi(,17) @end menu multi_lang.texi(,18) multi_lang.texi(,19) @node chapter fr_NOWHERE multi_lang.texi(,20) @chapter Fr_NOWHERE multi_lang.texi(,21) multi_lang.texi(,22) In french. @xref{Top}. multi_lang.texi(,23) multi_lang.texi(,24) @menu multi_lang.texi(,25) * sub fr_NOWHERE:: multi_lang.texi(,26) @end menu multi_lang.texi(,27) multi_lang.texi(,28) @node sub fr_NOWHERE multi_lang.texi(,29) @section fr_NOWHERE section multi_lang.texi(,30) multi_lang.texi(,31) In fr section. multi_lang.texi(,32) multi_lang.texi(,33) @documentlanguage ja multi_lang.texi(,34) @node chapter ja multi_lang.texi(,35) @chapter ja multi_lang.texi(,36) multi_lang.texi(,37) In japanese. @xref{Top}. multi_lang.texi(,38) multi_lang.texi(,39) @documentlanguage en multi_lang.texi(,40) @node chapter en multi_lang.texi(,41) @chapter en multi_lang.texi(,42) multi_lang.texi(,43) In english. @xref{Top}. multi_lang.texi(,44) multi_lang.texi(,45) @documentlanguage pt_BR multi_lang.texi(,46) @node chapter pt_BR multi_lang.texi(,47) @chapter pt_bR multi_lang.texi(,48) multi_lang.texi(,49) In brazilian. @xref{Top}. multi_lang.texi(,50) multi_lang.texi(,51) multi_lang.texi(,52) @bye texi2html-1.82/test/encodings/res/texi_multi_lang/multi_lang.passfirst0000644000175000017500000000322511264347117030240 0ustar flichtenheldflichtenheldmulti_lang.texi(,2) multi_lang.texi(,3) @setfilename multi_lang.info multi_lang.texi(,4) multi_lang.texi(,5) @documentlanguage fr_NOWHERE multi_lang.texi(,6) multi_lang.texi(,7) @node Top multi_lang.texi(,8) @top Multi language file multi_lang.texi(,9) multi_lang.texi(,10) This is in french multi_lang.texi(,11) multi_lang.texi(,12) @menu multi_lang.texi(,13) * chapter fr_NOWHERE:: multi_lang.texi(,14) * chapter ja:: multi_lang.texi(,15) * chapter en:: multi_lang.texi(,16) * chapter pt_BR:: multi_lang.texi(,17) @end menu multi_lang.texi(,18) multi_lang.texi(,19) @node chapter fr_NOWHERE multi_lang.texi(,20) @chapter Fr_NOWHERE multi_lang.texi(,21) multi_lang.texi(,22) In french. @xref{Top}. multi_lang.texi(,23) multi_lang.texi(,24) @menu multi_lang.texi(,25) * sub fr_NOWHERE:: multi_lang.texi(,26) @end menu multi_lang.texi(,27) multi_lang.texi(,28) @node sub fr_NOWHERE multi_lang.texi(,29) @section fr_NOWHERE section multi_lang.texi(,30) multi_lang.texi(,31) In fr section. multi_lang.texi(,32) multi_lang.texi(,33) @documentlanguage ja multi_lang.texi(,34) @node chapter ja multi_lang.texi(,35) @chapter ja multi_lang.texi(,36) multi_lang.texi(,37) In japanese. @xref{Top}. multi_lang.texi(,38) multi_lang.texi(,39) @documentlanguage en multi_lang.texi(,40) @node chapter en multi_lang.texi(,41) @chapter en multi_lang.texi(,42) multi_lang.texi(,43) In english. @xref{Top}. multi_lang.texi(,44) multi_lang.texi(,45) @documentlanguage pt_BR multi_lang.texi(,46) @node chapter pt_BR multi_lang.texi(,47) @chapter pt_bR multi_lang.texi(,48) multi_lang.texi(,49) In brazilian. @xref{Top}. multi_lang.texi(,50) multi_lang.texi(,51) multi_lang.texi(,52) @bye texi2html-1.82/test/encodings/res/texi_multi_lang/multi_lang.texi0000644000175000017500000000121611264347117027171 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename multi_lang.info @documentlanguage fr_NOWHERE @node Top @top Multi language file This is in french @menu * chapter fr_NOWHERE:: * chapter ja:: * chapter en:: * chapter pt_BR:: @end menu @node chapter fr_NOWHERE @chapter Fr_NOWHERE In french. @xref{Top}. @menu * sub fr_NOWHERE:: @end menu @node sub fr_NOWHERE @section fr_NOWHERE section In fr section. @documentlanguage ja @node chapter ja @chapter ja In japanese. @xref{Top}. @documentlanguage en @node chapter en @chapter en In english. @xref{Top}. @documentlanguage pt_BR @node chapter pt_BR @chapter pt_bR In brazilian. @xref{Top}. @bye texi2html-1.82/test/encodings/res/texi_multi_lang/multi_lang.20000644000175000017500000000000011264347117026347 0ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/ogoutf/0000755000175000017500000000000011264347116022261 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/ogoutf/ogoutf.20000644000175000017500000000000011264347116023635 0ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/ogoutf/ogoutf.html0000644000175000017500000001761011264347116024457 0ustar flichtenheldflichtenheld Ogonek
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Top AE ąę


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 AE ĄĘ ae ąę

    Zażółć gęślą jaźń!

    Zazolc gesla jazn!

    Jump to:   A   E  
    Index Entry Section

    A
    Ąą1.1 AE ĄĘ ae ąę

    E
    ęĘ1.1 AE ĄĘ ae ąę

    Jump to:   A   E  

    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/multi_lang/0000755000175000017500000000000011264347116023111 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/multi_lang/multi_lang.html0000644000175000017500000003162311264347116026137 0ustar flichtenheldflichtenheld Documento Sem Nome
    [Racine] [Table des matières] [Index] [ ? ]

    Multi language file

    This is in french


    [ < ] [ > ]   [ << ] [Plus haut] [ >> ]         [Racine] [Table des matières] [Index] [ ? ]

    1. Fr_NOWHERE

    In french. Voir la section Multi language file.


    [ < ] [ > ]   [ << ] [Plus haut] [ >> ]         [Racine] [Table des matières] [Index] [ ? ]

    1.1 fr_NOWHERE section

    In fr section.


    [ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

    2. ja

    In japanese. See section Multi language file.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. en

    In english. See section Multi language file.


    [ < ] [ > ]   [ << ] [ Acima ] [ >> ]         [Topo] [Conteúdo] [Índice] [ ? ]

    4. pt_bR

    In brazilian. Veja seção Multi language file.


    [Topo] [Conteúdo] [Índice] [ ? ]

    Sobre Esse Documento

    Esse documento foi gereado por a tester em a sunny day usando texi2html.

    Os botões nos painéis de navegação possuem os seguintes significados:

    Botão Nome Vá para De 1.2.3 vá para
    [ < ] Volta Seção anterior na ordem de leitura 1.2.2
    [ > ] Avançar Próxima seção na ordem de leitura 1.2.4
    [ << ] Voltar Rápido Começo desse capítulo ou capítulo anterior 1
    [ Acima ] Acima Seção acima 1.2
    [ >> ] Avançar Rápido Próximo capítulo 2
    [Topo] Topo Início (topo) do documento  
    [Conteúdo] Conteúdo Sumário  
    [Índice] Índice Índice  
    [ ? ] Sobre Sobre (ajuda)  

    onde o Exemplo assume que a posição atual localiza-se em Subsubção Um-Dois-Três de um documento com a seguinte estrutura:

    • 1. Seção Um
      • 1.1 Subseção Um-Um
        • ...
      • 1.2 Subseção Um-Dois
        • 1.2.1 Subseção Um-Dois-Um
        • 1.2.2 Subseção Um-Dois-Dois
        • 1.2.3 Subseção Um-Dois-Três     <== Posição Atual
        • 1.2.4 Subseção Um-Dois-Quatro
      • 1.3 Subseção Um-Três
        • ...
      • 1.4 Subseção Um-Quatro

    Esse documento foi gereado por a tester em a sunny day usando texi2html.

    texi2html-1.82/test/encodings/res/multi_lang/multi_lang.20000644000175000017500000000000011264347116025315 0ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/accent/0000755000175000017500000000000011264347116022213 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/accent/accent.html0000644000175000017500000000622111264347116024337 0ustar flichtenheldflichtenheld Accent test

    Accent test top

    should be e‘: è è

    should be e’: é é

    should be e^: ê ê

    should be u": ü ü

    should be i‘: ì ì

    should be i’: í í

    should be i^: î î

    should be u": ü ü

    should be c,: ç ç

    should be n~: ñ ñ

    should be e=: ē ē

    should be e’’: e'' e''

    should be e.: ė ė

    should be e*: e* e*

    should be ee[: ee[

    should be e(: ĕ ĕ

    should be e_: e_ e_

    should be .e: ẹ ẹ

    should be e<: e< e<

    upside down: ¿ ¡

    A-with-circle: å,Å

    AE, OE ligatures: æ Æ œ Œ

    dotless i, j: i j

    Polish suppressed-L: ł Ł

    O-with-slash: ø Ø

    es-zet or sharp S: ß

    pounds sterling: £

    should be dotless i‘: ì

    should be dotless i’: í

    should be dotless i^: î

    should be dotless i": ï

    should be dotless j‘: j`

    should be dotless j’: j'

    should be dotless j^: ĵ

    should be dotless j": j"


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/res/accent/accent.20000644000175000017500000000000011264347116023521 0ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/nodetest_no_unicode/0000755000175000017500000000000011264347117025006 5ustar flichtenheldflichtenheldtexi2html-1.82/test/encodings/res/nodetest_no_unicode/nodetest.20000644000175000017500000000010011264347117026705 0ustar flichtenheldflichtenheld*** Node equivalent with `@aa{}' already used `@ringaccent{a}' texi2html-1.82/test/encodings/res/nodetest_no_unicode/nodetest.html0000644000175000017500000040774511264347117027542 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Top


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Umlaut


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 ä

    ref to ç ç.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2 ë


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.3 ï


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4 With brace ï


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.5 With dotless ï

    before footnote See footanchor.

    (1)

    after footnote See footanchor.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.6 ö

    Ref to an anchor at the end of the doc (see there is an o-é could there be an î).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.7 ü

    Another ref to an anchor (see x-spot).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.8 ÿ

    This is a ref to a node (see section Ú).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.9 Ä

    Now a ref to a node without sectionning command, no text (see no section). With text (see but a text).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.10 Ë


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.11 Ï


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.12 Ö


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.13 Ü


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.14 ß

    This is a node without sectioning command.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. acute accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.1 á

    With brace á. Testing ’ " ‘ ^.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2 é


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3 í


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4 ó


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.5 ú


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.6 ý


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.7 Á


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.8 É


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.9 Í


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.10 Ó


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.11 Ú


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.12 Ý

    This is a ref to ü (see section ü). Another one, with node only (see section ü).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. grave accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.1 à


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.2 è


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.3 ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.4 ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.5 ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.6 ò


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.7 ù


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.8 À


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.9 È


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.10 Ì


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.11 Ò


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.12 Ù


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4. circumflex accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.1 â


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.2 ê


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3 î


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.4 î

    Test @^{i}.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.5 î

    Test @^{@dotless{i}}.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.6 ô


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.7 û


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.8 Â


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.9 Ê


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.10 Î


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.11 Ô


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.12 Û


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5. tilde accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.1 ã


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.2 ñ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.3 õ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.4 Ã


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.5 Õ

    This marks the spot. A second one with accented char .


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6. cedilla accent


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.1 ç


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.2 Ç


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.3 ç no brace


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7. rest


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.1 å


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.2 æ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.3 œ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.4 Å


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.5 Æ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.6 Œ


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.7 ł


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.8 ø


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.9 Ł


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.10 Ø


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.11 a''


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.12 ă


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.13 a<


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.14 ạ

    Test udotaccent.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.15 ȧ

    Test dotaccent.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.16 å


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.17 a[


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.18 a_


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.19 i


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.20 j

    ...

    ¡

    ¿

    £

    @- : @ followed by end of line:   @ followed by tab:   @ followed by space   @*:
    and text followin @*.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.21 ,


    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/encodings/at_commands_in_refs_utf8.texi0000644000175000017500000000110611264347117026017 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @comment %**start of header @setfilename at_commands_in_refs_utf8.info @documentencoding utf8 @node Top @top Top @menu * A @sc{sc} node @"i @"{@dotless{i}} @`{@=E} @l{} @,{@'C} @exclamdown{} à Â:: @end menu @node A @sc{sc} node @"i @"{@dotless{i}} @`{@=E} @l{} @,{@'C} @exclamdown{} à Â @chapter A @sc{sc} node @"i @"{@dotless{i}} @`{@=E} @l{} @,{@'C} @exclamdown{} à Â see @ref{a @strong{strong} ref with @sc{sc}@comma{} a i trema @"i@comma{} a dotless i trema @"{@dotless{i}} @`{@=E} and exclamdown @exclamdown{} à Â,,,manual}. @bye texi2html-1.82/test/encodings/tests.txt0000644000175000017500000000540611264347120022070 0ustar flichtenheldflichtenheldtexi nodetest.texi texi nodetest_utf8.texi texi nodetest_latin1.texi texi multi_lang.texi texi unknown_language.texi texi umlaut.texi texi accentenc.texi texi accent.texi texi weird_accents.texi texi ogolat2.texi texi ogoutf.texi nodetest nodetest.texi nodetest_chapter nodetest.texi -split chapter nodetest_use_nodes_no_unicode nodetest.texi -init no_unicode.init -node-files -use-nodes -split node nodetest_use_nodes_no_unidecode nodetest.texi -init no_unidecode.init -node-files -use-nodes -split node nodetest_use_nodes nodetest.texi -node-files -use-nodes -split node nodetest_no_unicode nodetest.texi -init no_unicode.init nodetest_utf8 nodetest_utf8.texi # the following is not perfect, since there is no map for @,{@'C} # it isn't rightly transformed in _1e14 but in _0112_0300 nodetest_utf8_no_unicode nodetest_utf8.texi -init no_unicode.init nodetest_utf8_use_nodes nodetest_utf8.texi -node-files -use-nodes -split node nodetest_utf8_use_nodes_no_unidecode nodetest_utf8.texi -init no_unidecode.init -node-files -use-nodes -split node nodetest_to_utf8_latin1 nodetest_latin1.texi -init utf8.init nodetest_latin1 nodetest_latin1.texi nodetest_latin1_no_unicode nodetest_latin1.texi -init no_unicode.init nodetest_latin1_use_nodes_no_unicode nodetest_latin1.texi -init no_unicode.init -node-files -split node nodetest_latin1_use_nodes nodetest_latin1.texi -node-files -split node at_commands_in_refs_no_unicode ../sectionning/at_commands_in_refs.texi -init no_unicode.init at_commands_in_refs_no_unidecode ../sectionning/at_commands_in_refs.texi -init no_unidecode.init at_commands_in_refs_latin1_use_nodes at_commands_in_refs_latin1.texi -node-files -split node at_commands_in_refs_latin1_use_nodes_no_unidecode at_commands_in_refs_latin1.texi -init no_unidecode.init -node-files -split node at_commands_in_refs_latin1_use_nodes_no_unicode at_commands_in_refs_latin1.texi -init no_unicode.init -node-files -split node at_commands_in_refs_utf8_use_nodes at_commands_in_refs_utf8.texi -node-files -split node at_commands_in_refs_utf8_use_nodes_no_unidecode at_commands_in_refs_utf8.texi -init no_unidecode.init -node-files -split node at_commands_in_refs_utf8_use_nodes_no_unicode at_commands_in_refs_utf8.texi -init no_unicode.init -node-files -split node multi_lang multi_lang.texi unknown_language unknown_language.texi umlaut umlaut.texi formatting_fr ../coverage/formatting.texi -document-language fr formatting_fr_icons ../coverage/formatting.texi -document-language fr -init icons.init formatting_converted_to_utf8 ../coverage/formatting.texi -init utf8.init accentenc accentenc.texi accentenc_encoding accentenc.texi -init enable_encoding.init accent accent.texi weird_accents weird_accents.texi weird_accents_encoding weird_accents.texi -init enable_encoding.init ogolat2 ogolat2.texi ogoutf ogoutf.texi texi2html-1.82/test/encodings/icons.init0000644000175000017500000000307111264347120022161 0ustar flichtenheldflichtenheld $ICONS = 1; # insert here name of icon images for buttons # Icons are used, if $ICONS and resp. value are set %ACTIVE_ICONS = ( 'Top', 'a_top.png', 'Contents', 'a_tableofcon.png', 'Overview', 'a_tableofcon.png', 'Index', 'a_index.png', 'This', '', 'Back', 'a_left.png', 'FastBack', 'a_leftdouble.png', 'Prev', 'a_left.png', 'Up', 'a_up.png', 'Next', 'a_right.png', 'NodeUp', 'a_up.png', 'NodeNext', 'a_right.png', 'NodePrev', 'a_left.png', 'Following', 'a_right.png', 'Forward', 'a_right.png', 'FastForward', 'a_rightdouble.png', 'About' , 'a_help.png', 'First', '', 'Last', '', ' ', '' ); # insert here name of icon images for these, if button is inactive %PASSIVE_ICONS = ( 'Top', 'a_top_na.png', 'Contents', 'a_tableofcon_na.png', 'Overview', 'a_tableofcon_na.png', 'Index', 'a_index_na.png', 'This', '', 'Back', 'a_left_na.png', 'FastBack', 'a_leftdouble_na.png', 'Prev', 'a_left_na.png', 'Up', 'a_up_na.png', 'Next', 'a_right_na.png', 'NodeUp', 'a_up_na.png', 'NodeNext', 'a_right_na.png', 'NodePrev', 'a_left_na.png', 'Following', 'a_right_na.png', 'Forward', 'a_right_na.png', 'FastForward', 'a_rightdouble_na.png', 'About' , 'a_help_na.png', 'First', '', 'Last', '', ); texi2html-1.82/test/encodings/ogolat2.texi0000644000175000017500000000057711264347117022441 0ustar flichtenheldflichtenheld\input texinfo @setfilename ogonek.info @documentencoding ISO-8859-2 @node Top @top OgoL2 Latin 2 (precomposed). @c 0xa1=0241 Aogonek: @c 0xb1=0261 aogonek: @c 0xb2=0262 standalone ogonek: @c 0xca=0312 Eogonek: @c 0xea=0352 eogonek: @noindent Accented. @ogonek{A} @ogonek{a} @ogonek{E} @ogonek{e} @ogonek{I} @ogonek{i} @ogonek{O} @ogonek{o} @ogonek{U} @ogonek{u} @bye texi2html-1.82/test/encodings/Makefile.am0000644000175000017500000000074411264347117022227 0ustar flichtenheldflichtenheldEXTRA_DIST = nodetest.texi nodetest_latin1.texi nodetest_utf8.texi \ multi_lang.texi unknown_language.texi umlaut.texi accent.texi \ weird_accents.texi accentenc.texi \ accent-text.txi ogolat2.texi ogoutf.texi \ at_commands_in_refs_latin1.texi at_commands_in_refs_utf8.texi \ no_unicode.init no_unidecode.init icons.init tests.txt res DISTCLEANFILES = l2h_tmp_dir.init tests.log tests.out distclean-local: rm -rf out diffs dist-hook: rm -rf `find $(distdir)/res -name CVS` texi2html-1.82/test/encodings/accent.texi0000644000175000017500000000017611264347117022322 0ustar flichtenheldflichtenheld\input texinfo @setfilename accent.info @settitle Accent test @node Top @top Accent test top @include accent-text.txi @bye texi2html-1.82/test/encodings/accentenc.texi0000644000175000017500000000026011264347117023002 0ustar flichtenheldflichtenheld\input texinfo @setfilename accentenc.info @settitle Accent encoding test @documentencoding ISO-8859-1 @node Top @top Accent encoding test top @include accent-text.txi @bye texi2html-1.82/test/indices/0000755000175000017500000000000011264347126017633 5ustar flichtenheldflichtenheldtexi2html-1.82/test/indices/index_special_region_no_insertcopying.texi0000644000175000017500000000253611264347126030357 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename index_special_region-no_insertcopying.info @copying @cindex Copying this document @anchor{Copying information} This is a test manual, trivially and explicitly in the public domain@footnote{@anchor{Public domain reference} The public domain is something you should allready know @cindex Public domain }. @printindex cp @end copying @titlepage @cindex Titlepage index @anchor{Titlepage anchor} This is the titlepage@footnote{@anchor{Titlepage footnote anchor} This is a fine document. @cindex Titlepage footnote } @insertcopying @end titlepage @node Top @top Top @chapter Chapter @c @insertcopying This test demonstrates @@anchor and indices in @@copying and titlepage, and various wrong index entries. @findex findex entry @cindex @deffn{truc} { } @deffnx{truc} @deffnx{} {} @end deffn @ftable @item @item fun @end ftable @menu * Copying and indices:: @end menu @node Copying and indices @appendix Copying and indices In the appendix, we print the indices and references. @findex another fun @cindex Copying appendix @ref{Copying information} for the copying information. @ref{Public domain reference} for reference on the licence. @ref{Titlepage anchor} for the titlepage. @ref{Titlepage footnote anchor} for reference on the titlepage. @c @insertcopying @printindex cp @printindex fn @contents @bye texi2html-1.82/test/indices/nodes_before_top_and_sections.texi0000644000175000017500000000254611264347126026602 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename more_before_top_section @node first before top, Top, ,(dir) @cindex first before top in first node before printindex @printindex cp in first node @printindex cp after second printindex in first node @menu * node in menu before top:: @end menu @node node in menu before top,,,first before top @cindex node in menu before top between node in menu before top and printindex @printindex cp node in menu before top text after printindex @cindex printindex node in menu before top @node Top, ,first before top @cindex entry a in top node. @printindex cp @printindex fn And one more index in top node @printindex cp @top top section @cindex top section in top section @menu * first:: * chapter:: * node in chapter:: @end menu @node first,,Top, Top Text and then index entries @cindex ! entry in node @findex fun in node @cindex entry in node @printindex cp @menu * second:: @end menu @node second,,,first @menu * a node:: * another:: @end menu @printindex fn @node another, , a node, second @cindex something @findex somewhere @cindex another @node a node, another, ,second @cindex entry after printindex @printindex cp @findex a function @cindex a concept a node @printindex cp @node chapter,node in chapter,,Top @chapter A chapter @printindex cp @node node in chapter,, chapter,Top @cindex node in chapter @bye texi2html-1.82/test/indices/printindex_between_node_section.texi0000644000175000017500000000073411264347126027160 0ustar flichtenheldflichtenheld\input texinfo.tex @c -*-texinfo-*- @setfilename printindex_between_node_section.info @node Top @top top @cindex top1 @cindex top1 @cindex top1 @cindex top1 @cindex top1 @cindex top1 @cindex top1 @cindex top1 @cindex top1 @cindex aop1 @cindex aop1 @cindex aop1 @cindex aop1 @cindex aop1 @cindex aop1 @cindex aop1 @menu * node chap1:: @end menu @node node chap1 @chapter chapter 1 @menu * node sec1:: @end menu @node node sec1 @printindex cp @section section1 @bye texi2html-1.82/test/indices/index_special_region.texi0000644000175000017500000000250711264347126024704 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename index_special_region.info @copying @cindex Copying this document @anchor{Copying information} This is a test manual, trivially and explicitly in the public domain@footnote{@anchor{Public domain reference} The public domain is something you should allready know @cindex Public domain }. @printindex cp @end copying @titlepage @cindex Titlepage index @anchor{Titlepage anchor} This is the titlepage@footnote{@anchor{Titlepage footnote anchor} This is a fine document. @cindex Titlepage footnote } @insertcopying @end titlepage @node Top @top Top @chapter Chapter @insertcopying This test demonstrates @@anchor and indices in @@copying and titlepage, and various wrong index entries. @findex findex entry @cindex @deffn{truc} { } @deffnx{truc} @deffnx{} {} @end deffn @ftable @item @item fun @end ftable @menu * Copying and indices:: @end menu @node Copying and indices @appendix Copying and indices In the appendix, we print the indices and references. @findex another fun @cindex Copying appendix @ref{Copying information} for the copying information. @ref{Public domain reference} for reference on the licence. @ref{Titlepage anchor} for the titlepage. @ref{Titlepage footnote anchor} for reference on the titlepage. @insertcopying @printindex cp @printindex fn @contents @bye texi2html-1.82/test/indices/index_test.init0000644000175000017500000000023411264347126022665 0ustar flichtenheldflichtenheld $SPLIT = 'chapter'; # if set and $SPLIT is set, then split index pages at the next letter # after they have more than that many entries $SPLIT_INDEX = 6; texi2html-1.82/test/indices/Makefile.in0000644000175000017500000002125111264347126021701 0ustar flichtenheldflichtenheld# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = test/indices DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DATE = @PACKAGE_DATE@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ REQUIRE_DATA_DUMPER = @REQUIRE_DATA_DUMPER@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_DATA_DUMPER = @USE_DATA_DUMPER@ USE_UNICODE = @USE_UNICODE@ USE_UNIDECODE = @USE_UNIDECODE@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ am__leading_dot = @am__leading_dot@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = index_table.texi index_no_node.texi \ index_split.texi split_chapter_index.texi nodes_before_top_and_sections.texi\ nodes_before_top.texi index_special_region_no_insertcopying.texi \ index_special_region.texi index_special_region_no_region.texi \ index_nodes.texi printindex_between_node_section.texi \ index_and_node_same_name.texi \ index_test.init tests.txt res DISTCLEANFILES = l2h_tmp_dir.init tests.log tests.out all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/indices/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu test/indices/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-exec-am: install-html: install-html-am install-info: install-info-am install-man: install-pdf: install-pdf-am install-ps: install-ps-am installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic dist-hook \ distclean distclean-generic distclean-local distdir dvi dvi-am \ html html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am distclean-local: rm -rf out diffs dist-hook: rm -rf `find $(distdir)/res -name CVS` # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: texi2html-1.82/test/indices/nodes_before_top.texi0000644000175000017500000000172511264347126024047 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename index_nodes @node first before top, Top, ,(dir) @cindex first before top @printindex cp in first node @menu * node in menu before top:: @end menu @node node in menu before top,,,first before top @cindex node in menu before top @printindex cp node in menu before top text @cindex printindex node in menu before top @node Top, ,first before top @cindex entry a @printindex cp @printindex fn And one one more index @printindex cp @menu * first:: @end menu @node first,,Top, Top Text and then index entries @cindex ! entry in node @findex fun in node @cindex entry in node @printindex cp @menu * second:: @end menu @node second,,,first @menu * a node:: * another:: @end menu @printindex fn @node another, , a node, second @cindex something @findex somewhere @cindex another @node a node, another, ,second @cindex entry after printindex @printindex cp @findex a function @cindex a concept a node @printindex cp @bye texi2html-1.82/test/indices/index_split.texi0000644000175000017500000000310611264347126023050 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename index_split @node Top @top split indices @cindex entry a @printindex cp @printindex fn And one one more index @printindex cp @menu * Top:: back to the current top node * first:: * second chapter:: @end menu @node first Text and then index entries @cindex entry in node @cindex ! entry in node @findex fun in node @cindex entry in node @printindex cp @printindex fn @cindex entry after printindex @chapter First chapter @findex a function @cindex a concept in first @findex somewhere @menu * section 1:: * section 2:: * section 3:: * node in section 3:: * node 2 in section 3:: * node 3 in section 3:: @end menu @node section 1 @section Section 1 @cindex something @menu * subsection 1:: * subsection 2:: @end menu The index once more @printindex cp @cindex another @node subsection 1 @subsection Subsection 1 In subsection 1 @node subsection 2 @subsection Subsection 2 index in subsction 2 @cindex subsection 2 @printindex cp @cindex printindex subsection 2 @node section 2 @section Section 2 Section 2 @node section 3 @section Section 3 @cindex section 3 @printindex cp @node node in section 3,,section 3,first @cindex node in section 3 Text for the node in section 3 @node node 2 in section 3,,,first @cindex node 2 in section 3 Text for the node 2 in section 3 @printindex cp @cindex between printindex node in section 3 @printindex cp @cindex after second printindex node in section 3 @node node 3 in section 3,,,first @cindex node 3 in section 3 @node second chapter @chapter Second chapter Second chapter @bye texi2html-1.82/test/indices/split_chapter_index.texi0000644000175000017500000000122311264347126024554 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename split_chapter_index @node Top @top split indices @cindex entry a Text in top. @menu * first:: @end menu @node first @chapter First chapter Text and then index entries @cindex entry in node @cindex ! entry in node @findex fun in node @cindex entry in node @printindex cp @cindex entry after printindex @findex a function @cindex a concept in first @findex somewhere @menu * section 1:: @end menu @node section 1 @section Section 1 @menu * subsection 1:: @end menu @cindex something @cindex another @node subsection 1 @subsection Subsection 1 In subsection 1 @cindex printindex subsection 2 @bye texi2html-1.82/test/indices/index_table.texi0000644000175000017500000000545411264347126023014 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top @top Test for indices @menu * node with ftable and vtable:: * node with printindex:: * indices refs:: @end menu @node node with ftable and vtable @chapter first node chapter, with ftable and vtable @cindex index entry in node Some text @cindex an second index entry in node @vtable @bullet @item var1 @itemx var2 var1 et var2 @end vtable an ftable @ftable @bullet @item fun1 @itemx fun2 fun1 et fun2 @item more fun and even more @end ftable @node node with printindex @chapter node with printindex @printindex fn @printindex vr @printindex cp @node indices refs @chapter Indices refs @menu * node:: node @end menu @cindex concept @cindex aoncept @cindex zoncept @cindex eoncept @cindex roncept @cindex toncept @cindex yoncept @cindex uoncept @cindex ioncept @cindex ooncept @cindex poncept @cindex qoncept @cindex concep @cindex rsconcept @cindex soncept @cindex doncept @cindex foncept @cindex goncept @cindex honcept @cindex joncept @cindex koncept @cindex loncept @cindex moncept @cindex roncept @cindex woncept @cindex xoncept @cindex voncept @cindex boncept @cindex noncept @cindex ,oncept @cindex ?oncept @cindex ;oncept @cindex /oncept @cindex !oncept @cindex cancept @cindex czncept @cindex cencept @cindex ctncept @cindex cyncept @cindex cuncept @cindex cincept @cindex concept @cindex cpncept @cindex cqncept @cindex csncept @cindex cdncept @cindex cfncept @cindex cgncept @cindex chncept @cindex cjncept @cindex ckncept @cindex clncept @cindex cmncept @cindex csdcept @cindex cxncept @cindex cvncept @cindex cbncept @cindex cnncept @cindex c,ncept @cindex crncept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @cindex concept @c @printindex fn @c @printindex vr @printindex cp @node node,,, @section node A section following the indices. @contents @bye texi2html-1.82/test/indices/res/0000755000175000017500000000000011264347126020424 5ustar flichtenheldflichtenheldtexi2html-1.82/test/indices/res/index_and_node_same_name/0000755000175000017500000000000011264347126025367 5ustar flichtenheldflichtenheldtexi2html-1.82/test/indices/res/index_and_node_same_name/index_and_node_same_name.20000644000175000017500000000000011264347126032403 0ustar flichtenheldflichtenheldtexi2html-1.82/test/indices/res/index_and_node_same_name/index_and_node_same_name.html0000644000175000017500000001636311264347126033231 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Test index entry with node name clash

    Text.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. index node

    in index node node, with the same (croo_ref) name than index entry.

    Jump to:   N  
    Index Entry Section

    N
    nodeTest index entry with node name clash

    Jump to:   N  

    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_special_region_no_insertcopying/0000755000175000017500000000000011264347123030244 5ustar flichtenheldflichtenheld././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootroottexi2html-1.82/test/indices/res/index_special_region_no_insertcopying/index_special_region_no_insertcopying_2.htmltexi2html-1.82/test/indices/res/index_special_region_no_insertcopying/index_special_region_no_insert0000644000175000017500000002132511264347123036424 0ustar flichtenheldflichtenheld Untitled Document: A. Copying and indices
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A. Copying and indices

    In the appendix, we print the indices and references.

    Copying information for the copying information. Public domain reference for reference on the licence.

    Titlepage anchor for the titlepage. Titlepage footnote anchor for reference on the titlepage.

    Jump to:   C   P   T  
    Index Entry Section

    C
    Copying appendixA. Copying and indices
    Copying this documentTop

    P
    Public domain

    T
    Titlepage footnote
    Titlepage indexTop

    Jump to:   C   P   T  
    Jump to:   A   F  
    Index Entry Section

    A
    another funA. Copying and indices

    F
    findex entry1. Chapter
    fun1. Chapter

    Jump to:   A   F  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    ././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootroottexi2html-1.82/test/indices/res/index_special_region_no_insertcopying/index_special_region_no_insertcopying.htmltexi2html-1.82/test/indices/res/index_special_region_no_insertcopying/index_special_region_no_insert0000644000175000017500000000732411264347123036427 0ustar flichtenheldflichtenheld Untitled Document: Top
    [Top] [Contents] [Index] [ ? ]

    This is the titlepage(1)

    This is a test manual, trivially and explicitly in the public domain(1).

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    ././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootroottexi2html-1.82/test/indices/res/index_special_region_no_insertcopying/index_special_region_no_insertcopying_1.htmltexi2html-1.82/test/indices/res/index_special_region_no_insertcopying/index_special_region_no_insert0000644000175000017500000001245311264347123036426 0ustar flichtenheldflichtenheld Untitled Document: 1. Chapter
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter

    This test demonstrates @anchor and indices in @copying and titlepage, and various wrong index entries.

    truc:
    truc:
    :
    fun

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    ././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootroottexi2html-1.82/test/indices/res/index_special_region_no_insertcopying/index_special_region_no_insertcopying_abt.htmltexi2html-1.82/test/indices/res/index_special_region_no_insertcopying/index_special_region_no_insert0000644000175000017500000001274111264347123036426 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    ././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootroottexi2html-1.82/test/indices/res/index_special_region_no_insertcopying/index_special_region_no_insertcopying_fot.htmltexi2html-1.82/test/indices/res/index_special_region_no_insertcopying/index_special_region_no_insert0000644000175000017500000000677511264347123036440 0ustar flichtenheldflichtenheld Untitled Document: Footnotes
    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)

    This is a fine document.

    (1)

    The public domain is something you should allready know


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    ././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootroottexi2html-1.82/test/indices/res/index_special_region_no_insertcopying/index_special_region_no_insertcopying_toc.htmltexi2html-1.82/test/indices/res/index_special_region_no_insertcopying/index_special_region_no_insert0000644000175000017500000000654611264347123036434 0ustar flichtenheldflichtenheld Untitled Document: Table of Contents
    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    ././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootroottexi2html-1.82/test/indices/res/index_special_region_no_insertcopying/index_special_region_no_insertcopying.2texi2html-1.82/test/indices/res/index_special_region_no_insertcopying/index_special_region_no_insert0000644000175000017500000000061711264347123036425 0ustar flichtenheldflichtenheld** Index entry before document: @cindex Copying this document (l. 7) ** Printindex before document beginning: @printindex cp (l. 17) ** Index entry before document: @cindex Titlepage index (l. 23) ** Empty index entry for @cindex (l. 46) ** Empty index entry for @deffn (l. 47) ** Empty index entry for @deffn (l. 48) ** Empty index entry for @deffn (l. 49) ** Empty index entry for @ftable (l. 53) texi2html-1.82/test/indices/res/index_table_chapter/0000755000175000017500000000000011264347123024405 5ustar flichtenheldflichtenheldtexi2html-1.82/test/indices/res/index_table_chapter/index_table_7.html0000644000175000017500000003004611264347123030002 0ustar flichtenheldflichtenheld Untitled Document: 2. node with printindex: V – Z
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. node with printindex: V – Z

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  
    Index Entry Section

    V
    voncept3. Indices refs

    W
    woncept3. Indices refs

    X
    xoncept3. Indices refs

    Y
    yoncept3. Indices refs

    Z
    zoncept3. Indices refs

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_table_chapter/index_table.html0000644000175000017500000000672011264347123027556 0ustar flichtenheldflichtenheld Untitled Document: Test for indices
    [Top] [Contents] [Index] [ ? ]

    Test for indices


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_table_chapter/index_table_2.html0000644000175000017500000003633611264347123030005 0ustar flichtenheldflichtenheld Untitled Document: 2. node with printindex
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. node with printindex

    Jump to:   F   M  
    Index Entry Section

    F
    fun11. first node chapter, with ftable and vtable
    fun21. first node chapter, with ftable and vtable

    M
    more fun1. first node chapter, with ftable and vtable

    Jump to:   F   M  
    Jump to:   V  
    Index Entry Section

    V
    var11. first node chapter, with ftable and vtable
    var21. first node chapter, with ftable and vtable

    Jump to:   V  
    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  
    Index Entry Section

    !
    !oncept3. Indices refs

    ,
    ,oncept3. Indices refs

    /
    /oncept3. Indices refs

    ;
    ;oncept3. Indices refs

    ?
    ?oncept3. Indices refs

    A
    an second index entry in node1. first node chapter, with ftable and vtable
    aoncept3. Indices refs

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_table_chapter/index_table.20000644000175000017500000000000011264347123026734 0ustar flichtenheldflichtenheldtexi2html-1.82/test/indices/res/index_table_chapter/index_table_12.html0000644000175000017500000003021211264347123030051 0ustar flichtenheldflichtenheld Untitled Document: 3. Indices refs: Q – U
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. Indices refs: Q – U

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  
    Index Entry Section

    Q
    qoncept3. Indices refs

    R
    roncept3. Indices refs
    roncept3. Indices refs
    rsconcept3. Indices refs

    S
    soncept3. Indices refs

    T
    toncept3. Indices refs

    U
    uoncept3. Indices refs

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_table_chapter/index_table_9.html0000644000175000017500000006737611264347123030024 0ustar flichtenheldflichtenheld Untitled Document: 3. Indices refs: B – C
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. Indices refs: B – C

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  
    Index Entry Section

    B
    boncept3. Indices refs

    C
    c,ncept3. Indices refs
    cancept3. Indices refs
    cbncept3. Indices refs
    cdncept3. Indices refs
    cencept3. Indices refs
    cfncept3. Indices refs
    cgncept3. Indices refs
    chncept3. Indices refs
    cincept3. Indices refs
    cjncept3. Indices refs
    ckncept3. Indices refs
    clncept3. Indices refs
    cmncept3. Indices refs
    cnncept3. Indices refs
    concep3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    cpncept3. Indices refs
    cqncept3. Indices refs
    crncept3. Indices refs
    csdcept3. Indices refs
    csncept3. Indices refs
    ctncept3. Indices refs
    cuncept3. Indices refs
    cvncept3. Indices refs
    cxncept3. Indices refs
    cyncept3. Indices refs
    czncept3. Indices refs

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_table_chapter/index_table_8.html0000644000175000017500000004017711264347123030011 0ustar flichtenheldflichtenheld Untitled Document: 3. Indices refs
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. Indices refs

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  
    Index Entry Section

    !
    !oncept3. Indices refs

    ,
    ,oncept3. Indices refs

    /
    /oncept3. Indices refs

    ;
    ;oncept3. Indices refs

    ?
    ?oncept3. Indices refs

    A
    an second index entry in node1. first node chapter, with ftable and vtable
    aoncept3. Indices refs

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_table_chapter/index_table_5.html0000644000175000017500000003104611264347123030001 0ustar flichtenheldflichtenheld Untitled Document: 2. node with printindex: J – P
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. node with printindex: J – P

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  
    Index Entry Section

    J
    joncept3. Indices refs

    K
    koncept3. Indices refs

    L
    loncept3. Indices refs

    M
    moncept3. Indices refs

    N
    noncept3. Indices refs

    O
    ooncept3. Indices refs

    P
    poncept3. Indices refs

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_table_chapter/index_table_3.html0000644000175000017500000007000311264347123027773 0ustar flichtenheldflichtenheld Untitled Document: 2. node with printindex: B – C
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. node with printindex: B – C

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  
    Index Entry Section

    B
    boncept3. Indices refs

    C
    c,ncept3. Indices refs
    cancept3. Indices refs
    cbncept3. Indices refs
    cdncept3. Indices refs
    cencept3. Indices refs
    cfncept3. Indices refs
    cgncept3. Indices refs
    chncept3. Indices refs
    cincept3. Indices refs
    cjncept3. Indices refs
    ckncept3. Indices refs
    clncept3. Indices refs
    cmncept3. Indices refs
    cnncept3. Indices refs
    concep3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    cpncept3. Indices refs
    cqncept3. Indices refs
    crncept3. Indices refs
    csdcept3. Indices refs
    csncept3. Indices refs
    ctncept3. Indices refs
    cuncept3. Indices refs
    cvncept3. Indices refs
    cxncept3. Indices refs
    cyncept3. Indices refs
    czncept3. Indices refs

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_table_chapter/index_table_10.html0000644000175000017500000003042411264347123030054 0ustar flichtenheldflichtenheld Untitled Document: 3. Indices refs: D – I
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. Indices refs: D – I

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  
    Index Entry Section

    D
    doncept3. Indices refs

    E
    eoncept3. Indices refs

    F
    foncept3. Indices refs

    G
    goncept3. Indices refs

    H
    honcept3. Indices refs

    I
    index entry in node1. first node chapter, with ftable and vtable
    ioncept3. Indices refs

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_table_chapter/index_table_toc.html0000644000175000017500000000656011264347123030425 0ustar flichtenheldflichtenheld Untitled Document: Table of Contents
    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_table_chapter/index_table_4.html0000644000175000017500000003103511264347123027776 0ustar flichtenheldflichtenheld Untitled Document: 2. node with printindex: D – I
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. node with printindex: D – I

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  
    Index Entry Section

    D
    doncept3. Indices refs

    E
    eoncept3. Indices refs

    F
    foncept3. Indices refs

    G
    goncept3. Indices refs

    H
    honcept3. Indices refs

    I
    index entry in node1. first node chapter, with ftable and vtable
    ioncept3. Indices refs

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_table_chapter/index_table_6.html0000644000175000017500000003062011264347123027777 0ustar flichtenheldflichtenheld Untitled Document: 2. node with printindex: Q – U
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. node with printindex: Q – U

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  
    Index Entry Section

    Q
    qoncept3. Indices refs

    R
    roncept3. Indices refs
    roncept3. Indices refs
    rsconcept3. Indices refs

    S
    soncept3. Indices refs

    T
    toncept3. Indices refs

    U
    uoncept3. Indices refs

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_table_chapter/index_table_1.html0000644000175000017500000001164311264347123027776 0ustar flichtenheldflichtenheld Untitled Document: 1. first node chapter, with ftable and vtable
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. first node chapter, with ftable and vtable

    Some text

    • var1
    • var2

    var1 et var2

    an ftable

    • fun1
    • fun2

    fun1 et fun2

    • more fun

    and even more


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_table_chapter/index_table_abt.html0000644000175000017500000001236211264347123030403 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_table_chapter/index_table_13.html0000644000175000017500000003213011264347123030053 0ustar flichtenheldflichtenheld Untitled Document: 3. Indices refs: V – Z
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. Indices refs: V – Z

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  
    Index Entry Section

    V
    voncept3. Indices refs

    W
    woncept3. Indices refs

    X
    xoncept3. Indices refs

    Y
    yoncept3. Indices refs

    Z
    zoncept3. Indices refs

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.1 node

    A section following the indices.


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_table_chapter/index_table_11.html0000644000175000017500000003043411264347123030056 0ustar flichtenheldflichtenheld Untitled Document: 3. Indices refs: J – P
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. Indices refs: J – P

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  
    Index Entry Section

    J
    joncept3. Indices refs

    K
    koncept3. Indices refs

    L
    loncept3. Indices refs

    M
    moncept3. Indices refs

    N
    noncept3. Indices refs

    O
    ooncept3. Indices refs

    P
    poncept3. Indices refs

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/makeinfo_index_split/0000755000175000017500000000000011264347123024614 5ustar flichtenheldflichtenheldtexi2html-1.82/test/indices/res/makeinfo_index_split/node-2-in-section-3.html0000644000175000017500000000343111264347123030775 0ustar flichtenheldflichtenheld Untitled Document: node 2 in section 3

    The node you are looking for is at node 2 in section 3.

    texi2html-1.82/test/indices/res/makeinfo_index_split/node-in-section-3.html0000644000175000017500000000341511264347123030640 0ustar flichtenheldflichtenheld Untitled Document: node in section 3

    The node you are looking for is at node in section 3.

    texi2html-1.82/test/indices/res/makeinfo_index_split/index_split_2.html0000644000175000017500000005254711264347123030262 0ustar flichtenheldflichtenheld Untitled Document: 1. First chapter
    node: first , Top , Top [ > ]

    Text and then index entries


    Untitled Document: 1. First chapter: N – S
    node: , , [ > ]

    1. First chapter: N – S

    1. First chapter


    node: section 1 , first , first [ > ]

    1.1 Section 1

    The index once more


    node: subsection 1 , section 1 , section 1 [ > ]

    1.1.1 Subsection 1

    In subsection 1


    node: subsection 2 , subsection 1 , section 1 [ > ]

    1.1.2 Subsection 2

    index in subsction 2


    node: section 2 , section 1 , first [ > ]

    1.2 Section 2

    Section 2


    node: section 3 , section 2 , first [ > ]

    1.3 Section 3


    node: node in section 3 , section 3 , first [ > ]

    node in section 3

    Text for the node in section 3


    node: node 2 in section 3 , node in section 3 , first [ > ]

    node 2 in section 3

    Text for the node 2 in section 3


    node: node 3 in section 3 , node 2 in section 3 , first [ > ]

    node 3 in section 3


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/makeinfo_index_split/index_split_abt.html0000644000175000017500000001015711264347123030656 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    node: , , [ > ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ > ] Following Node following in node reading order 1.2.4

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    node: , , [ > ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/makeinfo_index_split/index.html0000644000175000017500000001561111264347123026615 0ustar flichtenheldflichtenheld Untitled Document: split indices
    node: Top , Top , (dir) [ > ]

    split indices

    And one one more index


    node: Top , Top , (dir) [ > ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/makeinfo_index_split/subsection-2.html0000644000175000017500000000335711264347123030027 0ustar flichtenheldflichtenheld Untitled Document: subsection 2

    The node you are looking for is at subsection 2.

    texi2html-1.82/test/indices/res/makeinfo_index_split/second-chapter.html0000644000175000017500000000730611264347123030407 0ustar flichtenheldflichtenheld Untitled Document: 2. Second chapter
    node: second chapter , first , Top [ > ]

    2. Second chapter

    Second chapter


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/makeinfo_index_split/node-3-in-section-3.html0000644000175000017500000000343111264347123030776 0ustar flichtenheldflichtenheld Untitled Document: node 3 in section 3

    The node you are looking for is at node 3 in section 3.

    texi2html-1.82/test/indices/res/makeinfo_index_split/section-1.html0000644000175000017500000000333511264347123027310 0ustar flichtenheldflichtenheld Untitled Document: section 1

    The node you are looking for is at section 1.

    texi2html-1.82/test/indices/res/makeinfo_index_split/section-2.html0000644000175000017500000000333511264347123027311 0ustar flichtenheldflichtenheld Untitled Document: section 2

    The node you are looking for is at section 2.

    texi2html-1.82/test/indices/res/makeinfo_index_split/index_split.20000644000175000017500000000000011264347123027207 0ustar flichtenheldflichtenheldtexi2html-1.82/test/indices/res/makeinfo_index_split/subsection-1.html0000644000175000017500000000335711264347123030026 0ustar flichtenheldflichtenheld Untitled Document: subsection 1

    The node you are looking for is at subsection 1.

    texi2html-1.82/test/indices/res/makeinfo_index_split/section-3.html0000644000175000017500000000333511264347123027312 0ustar flichtenheldflichtenheld Untitled Document: section 3

    The node you are looking for is at section 3.

    texi2html-1.82/test/indices/res/nodes_before_top/0000755000175000017500000000000011264347125023737 5ustar flichtenheldflichtenheldtexi2html-1.82/test/indices/res/nodes_before_top/nodes_before_top.html0000644000175000017500000003031211264347125030140 0ustar flichtenheldflichtenheld Untitled Document: Top
    [Top] [Contents] [Index] [ ? ]

    Top

    Jump to:   !  
    A   E   F   N   P   S  
    Index Entry Section

    !
    ! entry in nodefirst

    A
    a concept a nodea node
    anotheranother

    E
    entry aTop
    entry after printindexa node
    entry in nodefirst

    F
    first before topfirst before top

    N
    node in menu before topnode in menu before top

    P
    printindex node in menu before topnode in menu before top

    S
    somethinganother

    Jump to:   !  
    A   E   F   N   P   S  
    Jump to:   A   F   S  
    Index Entry Section

    A
    a functiona node

    F
    fun in nodefirst

    S
    somewhereanother

    Jump to:   A   F   S  

    And one one more index

    Jump to:   !  
    A   E   F   N   P   S  
    Index Entry Section

    !
    ! entry in nodefirst

    A
    a concept a nodea node
    anotheranother

    E
    entry aTop
    entry after printindexa node
    entry in nodefirst

    F
    first before topfirst before top

    N
    node in menu before topnode in menu before top

    P
    printindex node in menu before topnode in menu before top

    S
    somethinganother

    Jump to:   !  
    A   E   F   N   P   S  

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/nodes_before_top/nodes_before_top_abt.html0000644000175000017500000001174011264347125030772 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/nodes_before_top/nodes_before_top_0.html0000644000175000017500000007446011264347125030373 0ustar flichtenheldflichtenheld Untitled Document: first before top
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    first before top

    Jump to:   !  
    A   E   F   N   P   S  
    Index Entry Section

    !
    ! entry in nodefirst

    A
    a concept a nodea node
    anotheranother

    E
    entry aTop
    entry after printindexa node
    entry in nodefirst

    F
    first before topfirst before top

    N
    node in menu before topnode in menu before top

    P
    printindex node in menu before topnode in menu before top

    S
    somethinganother

    Jump to:   !  
    A   E   F   N   P   S  

    in first node


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    node in menu before top

    Jump to:   !  
    A   E   F   N   P   S  
    Index Entry Section

    !
    ! entry in nodefirst

    A
    a concept a nodea node
    anotheranother

    E
    entry aTop
    entry after printindexa node
    entry in nodefirst

    F
    first before topfirst before top

    N
    node in menu before topnode in menu before top

    P
    printindex node in menu before topnode in menu before top

    S
    somethinganother

    Jump to:   !  
    A   E   F   N   P   S  

    node in menu before top text

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    first

    Text and then index entries

    Jump to:   !  
    A   E   F   N   P   S  
    Index Entry Section

    !
    ! entry in nodefirst

    A
    a concept a nodea node
    anotheranother

    E
    entry aTop
    entry after printindexa node
    entry in nodefirst

    F
    first before topfirst before top

    N
    node in menu before topnode in menu before top

    P
    printindex node in menu before topnode in menu before top

    S
    somethinganother

    Jump to:   !  
    A   E   F   N   P   S  

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    second

    Jump to:   A   F   S  
    Index Entry Section

    A
    a functiona node

    F
    fun in nodefirst

    S
    somewhereanother

    Jump to:   A   F   S  

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    another


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    a node

    Jump to:   !  
    A   E   F   N   P   S  
    Index Entry Section

    !
    ! entry in nodefirst

    A
    a concept a nodea node
    anotheranother

    E
    entry aTop
    entry after printindexa node
    entry in nodefirst

    F
    first before topfirst before top

    N
    node in menu before topnode in menu before top

    P
    printindex node in menu before topnode in menu before top

    S
    somethinganother

    Jump to:   !  
    A   E   F   N   P   S  
    Jump to:   !  
    A   E   F   N   P   S  
    Index Entry Section

    !
    ! entry in nodefirst

    A
    a concept a nodea node
    anotheranother

    E
    entry aTop
    entry after printindexa node
    entry in nodefirst

    F
    first before topfirst before top

    N
    node in menu before topnode in menu before top

    P
    printindex node in menu before topnode in menu before top

    S
    somethinganother

    Jump to:   !  
    A   E   F   N   P   S  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/nodes_before_top/nodes_before_top.20000644000175000017500000000000011264347125027324 0ustar flichtenheldflichtenheldtexi2html-1.82/test/indices/res/makeinfo_nodes_before_top/0000755000175000017500000000000011264347123025606 5ustar flichtenheldflichtenheldtexi2html-1.82/test/indices/res/makeinfo_nodes_before_top/index_nodes_1.html0000644000175000017500000000612311264347123031215 0ustar flichtenheldflichtenheld Untitled Document: first before top: N – S
    node: first before top: N – S , , [ > ]

    first before top: N – S

    in first node


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/makeinfo_nodes_before_top/index_nodes_0.html0000644000175000017500000000642211264347123031216 0ustar flichtenheldflichtenheld Untitled Document: first before top
    node: first before top , , (dir) [ > ]

    first before top


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/makeinfo_nodes_before_top/index_nodes_9.html0000644000175000017500000000646711264347123031240 0ustar flichtenheldflichtenheld Untitled Document: a node
    node: a node , second , second [ > ]

    a node


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/makeinfo_nodes_before_top/index_nodes_6.html0000644000175000017500000000571411264347123031227 0ustar flichtenheldflichtenheld Untitled Document: first: N – S
    node: first: N – S , , [ > ]

    first: N – S


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/makeinfo_nodes_before_top/index_nodes_7.html0000644000175000017500000000625711264347123031233 0ustar flichtenheldflichtenheld Untitled Document: second
    node: second , first , first [ > ]

    second


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/makeinfo_nodes_before_top/index_nodes_11.html0000644000175000017500000000561311264347123031301 0ustar flichtenheldflichtenheld Untitled Document: a node: N – S
    node: a node: N – S , , [ > ]

    a node: N – S


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/makeinfo_nodes_before_top/index.html0000644000175000017500000001304211264347123027603 0ustar flichtenheldflichtenheld Untitled Document: Top
    node: Top , first before top , (dir) [ > ]

    Top

    And one one more index


    node: Top , first before top , (dir) [ > ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/makeinfo_nodes_before_top/index_nodes_3.html0000644000175000017500000000610611264347123031220 0ustar flichtenheldflichtenheld Untitled Document: node in menu before top: N – S
    node: node in menu before top: N – S , , [ > ]

    node in menu before top: N – S

    node in menu before top text


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/makeinfo_nodes_before_top/index_nodes_2.html0000644000175000017500000000701011264347123031212 0ustar flichtenheldflichtenheld Untitled Document: node in menu before top
    node: node in menu before top , first before top , first before top [ > ]

    node in menu before top


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/makeinfo_nodes_before_top/nodes_before_top.20000644000175000017500000000000011264347123031173 0ustar flichtenheldflichtenheldtexi2html-1.82/test/indices/res/makeinfo_nodes_before_top/index_nodes_10.html0000644000175000017500000000676711264347123031313 0ustar flichtenheldflichtenheld Untitled Document: a node: N – S
    node: a node: N – S , , [ > ]

    a node: N – S


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/makeinfo_nodes_before_top/index_nodes_abt.html0000644000175000017500000001006411264347123031622 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    node: , , [ > ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ > ] Following Node following in node reading order 1.2.4

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    node: , , [ > ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/makeinfo_nodes_before_top/index_nodes_5.html0000644000175000017500000000652311264347123031225 0ustar flichtenheldflichtenheld Untitled Document: first
    node: first , Top , Top [ > ]

    first

    Text and then index entries


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/makeinfo_nodes_before_top/index_nodes_8.html0000644000175000017500000000552711264347123031233 0ustar flichtenheldflichtenheld Untitled Document: another
    node: another , a node , second [ > ]

    another


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/makeinfo_index_nodes/0000755000175000017500000000000011264347123024571 5ustar flichtenheldflichtenheldtexi2html-1.82/test/indices/res/makeinfo_index_nodes/index_nodes_6.html0000644000175000017500000000626611264347123030215 0ustar flichtenheldflichtenheld Untitled Document: a node: S
    node: a node: S , , [ > ]

    a node: S


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/makeinfo_index_nodes/index_nodes_7.html0000644000175000017500000000521211264347123030204 0ustar flichtenheldflichtenheld Untitled Document: a node: S
    node: a node: S , , [ > ]

    a node: S


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/makeinfo_index_nodes/a-node.html0000644000175000017500000000642311264347123026627 0ustar flichtenheldflichtenheld Untitled Document: a node
    node: a node , second , second [ > ]

    a node


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/makeinfo_index_nodes/index.html0000644000175000017500000001115311264347123026567 0ustar flichtenheldflichtenheld Untitled Document: Top
    node: Top , , (dir) [ > ]

    Top

    And one one more index


    node: Top , , (dir) [ > ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/makeinfo_index_nodes/index_nodes.20000644000175000017500000000000011264347123027141 0ustar flichtenheldflichtenheldtexi2html-1.82/test/indices/res/makeinfo_index_nodes/second.html0000644000175000017500000000622411264347123026736 0ustar flichtenheldflichtenheld Untitled Document: second
    node: second , first , first [ > ]

    second


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/makeinfo_index_nodes/index_nodes_2.html0000644000175000017500000000531211264347123030200 0ustar flichtenheldflichtenheld Untitled Document: first: S
    node: first: S , , [ > ]

    first: S


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/makeinfo_index_nodes/index_nodes_abt.html0000644000175000017500000001015111264347123030602 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    node: , , [ > ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ > ] Following Node following in node reading order 1.2.4

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    node: , , [ > ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/makeinfo_index_nodes/another.html0000644000175000017500000000555111264347123027125 0ustar flichtenheldflichtenheld Untitled Document: another
    node: another , a node , second [ > ]

    another


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/makeinfo_index_nodes/first.html0000644000175000017500000000654711264347123026622 0ustar flichtenheldflichtenheld Untitled Document: first
    node: first , Top , Top [ > ]

    first

    Text and then index entries


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/printindex_between_node_section/0000755000175000017500000000000011264347126027052 5ustar flichtenheldflichtenheldtexi2html-1.82/test/indices/res/printindex_between_node_section/index.html0000644000175000017500000000333511264347126031053 0ustar flichtenheldflichtenheld Untitled Document: Top

    The node you are looking for is at Top.

    texi2html-1.82/test/indices/res/printindex_between_node_section/node-chap1.html0000644000175000017500000002217511264347126031666 0ustar flichtenheldflichtenheld Untitled Document: 1. chapter 1
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. chapter 1


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]
    Jump to:   A   T  
    Index Entry Section

    A
    aop1top
    aop1top
    aop1top
    aop1top
    aop1top
    aop1top
    aop1top

    T
    top1top
    top1top
    top1top
    top1top
    top1top
    top1top
    top1top
    top1top
    top1top

    Jump to:   A   T  

    1.1 section1


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/printindex_between_node_section/printindex_between_node_section.20000644000175000017500000000000011264347126035551 0ustar flichtenheldflichtenheld././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootroottexi2html-1.82/test/indices/res/printindex_between_node_section/printindex_between_node_section_abt.htmltexi2html-1.82/test/indices/res/printindex_between_node_section/printindex_between_node_section_abt.0000644000175000017500000001215411264347126036332 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/printindex_between_node_section/node-sec1.html0000644000175000017500000000332711264347126031523 0ustar flichtenheldflichtenheld Untitled Document: node sec1

    The node you are looking for is at node sec1.

    texi2html-1.82/test/indices/res/printindex_between_node_section/printindex_between_node_section.html0000644000175000017500000000647411264347126036401 0ustar flichtenheldflichtenheld Untitled Document: top
    [Top] [Contents] [Index] [ ? ]

    top


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_table/0000755000175000017500000000000011264347123022677 5ustar flichtenheldflichtenheldtexi2html-1.82/test/indices/res/index_table/index_table.html0000644000175000017500000022370611264347123026055 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Test for indices


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. first node chapter, with ftable and vtable

    Some text

    • var1
    • var2

    var1 et var2

    an ftable

    • fun1
    • fun2

    fun1 et fun2

    • more fun

    and even more


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. node with printindex

    Jump to:   F   M  
    Index Entry Section

    F
    fun11. first node chapter, with ftable and vtable
    fun21. first node chapter, with ftable and vtable

    M
    more fun1. first node chapter, with ftable and vtable

    Jump to:   F   M  
    Jump to:   V  
    Index Entry Section

    V
    var11. first node chapter, with ftable and vtable
    var21. first node chapter, with ftable and vtable

    Jump to:   V  
    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  
    Index Entry Section

    !
    !oncept3. Indices refs

    ,
    ,oncept3. Indices refs

    /
    /oncept3. Indices refs

    ;
    ;oncept3. Indices refs

    ?
    ?oncept3. Indices refs

    A
    an second index entry in node1. first node chapter, with ftable and vtable
    aoncept3. Indices refs

    B
    boncept3. Indices refs

    C
    c,ncept3. Indices refs
    cancept3. Indices refs
    cbncept3. Indices refs
    cdncept3. Indices refs
    cencept3. Indices refs
    cfncept3. Indices refs
    cgncept3. Indices refs
    chncept3. Indices refs
    cincept3. Indices refs
    cjncept3. Indices refs
    ckncept3. Indices refs
    clncept3. Indices refs
    cmncept3. Indices refs
    cnncept3. Indices refs
    concep3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    cpncept3. Indices refs
    cqncept3. Indices refs
    crncept3. Indices refs
    csdcept3. Indices refs
    csncept3. Indices refs
    ctncept3. Indices refs
    cuncept3. Indices refs
    cvncept3. Indices refs
    cxncept3. Indices refs
    cyncept3. Indices refs
    czncept3. Indices refs

    D
    doncept3. Indices refs

    E
    eoncept3. Indices refs

    F
    foncept3. Indices refs

    G
    goncept3. Indices refs

    H
    honcept3. Indices refs

    I
    index entry in node1. first node chapter, with ftable and vtable
    ioncept3. Indices refs

    J
    joncept3. Indices refs

    K
    koncept3. Indices refs

    L
    loncept3. Indices refs

    M
    moncept3. Indices refs

    N
    noncept3. Indices refs

    O
    ooncept3. Indices refs

    P
    poncept3. Indices refs

    Q
    qoncept3. Indices refs

    R
    roncept3. Indices refs
    roncept3. Indices refs
    rsconcept3. Indices refs

    S
    soncept3. Indices refs

    T
    toncept3. Indices refs

    U
    uoncept3. Indices refs

    V
    voncept3. Indices refs

    W
    woncept3. Indices refs

    X
    xoncept3. Indices refs

    Y
    yoncept3. Indices refs

    Z
    zoncept3. Indices refs

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. Indices refs

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  
    Index Entry Section

    !
    !oncept3. Indices refs

    ,
    ,oncept3. Indices refs

    /
    /oncept3. Indices refs

    ;
    ;oncept3. Indices refs

    ?
    ?oncept3. Indices refs

    A
    an second index entry in node1. first node chapter, with ftable and vtable
    aoncept3. Indices refs

    B
    boncept3. Indices refs

    C
    c,ncept3. Indices refs
    cancept3. Indices refs
    cbncept3. Indices refs
    cdncept3. Indices refs
    cencept3. Indices refs
    cfncept3. Indices refs
    cgncept3. Indices refs
    chncept3. Indices refs
    cincept3. Indices refs
    cjncept3. Indices refs
    ckncept3. Indices refs
    clncept3. Indices refs
    cmncept3. Indices refs
    cnncept3. Indices refs
    concep3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    cpncept3. Indices refs
    cqncept3. Indices refs
    crncept3. Indices refs
    csdcept3. Indices refs
    csncept3. Indices refs
    ctncept3. Indices refs
    cuncept3. Indices refs
    cvncept3. Indices refs
    cxncept3. Indices refs
    cyncept3. Indices refs
    czncept3. Indices refs

    D
    doncept3. Indices refs

    E
    eoncept3. Indices refs

    F
    foncept3. Indices refs

    G
    goncept3. Indices refs

    H
    honcept3. Indices refs

    I
    index entry in node1. first node chapter, with ftable and vtable
    ioncept3. Indices refs

    J
    joncept3. Indices refs

    K
    koncept3. Indices refs

    L
    loncept3. Indices refs

    M
    moncept3. Indices refs

    N
    noncept3. Indices refs

    O
    ooncept3. Indices refs

    P
    poncept3. Indices refs

    Q
    qoncept3. Indices refs

    R
    roncept3. Indices refs
    roncept3. Indices refs
    rsconcept3. Indices refs

    S
    soncept3. Indices refs

    T
    toncept3. Indices refs

    U
    uoncept3. Indices refs

    V
    voncept3. Indices refs

    W
    woncept3. Indices refs

    X
    xoncept3. Indices refs

    Y
    yoncept3. Indices refs

    Z
    zoncept3. Indices refs

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.1 node

    A section following the indices.


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_table/index_table.20000644000175000017500000000000011264347123025226 0ustar flichtenheldflichtenheldtexi2html-1.82/test/indices/res/split_chapter_index/0000755000175000017500000000000011264347123024451 5ustar flichtenheldflichtenheldtexi2html-1.82/test/indices/res/split_chapter_index/split_chapter_index.html0000644000175000017500000000574111264347123031376 0ustar flichtenheldflichtenheld Untitled Document: split indices
    [Top] [Contents] [Index] [ ? ]

    split indices

    Text in top.


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/split_chapter_index/split_chapter_index_abt.html0000644000175000017500000001214011264347123032213 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/split_chapter_index/split_chapter_index_2.html0000644000175000017500000002200611264347123031610 0ustar flichtenheldflichtenheld Untitled Document: 1. First chapter: P – S
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. First chapter: P – S

    Jump to:   !  
    A   E   P   S  
    Index Entry Section

    P
    printindex subsection 21.1.1 Subsection 1

    S
    something1.1 Section 1

    Jump to:   !  
    A   E   P   S  

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 Section 1


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.1 Subsection 1

    In subsection 1


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/split_chapter_index/split_chapter_index_1.html0000644000175000017500000001551211264347123031613 0ustar flichtenheldflichtenheld Untitled Document: 1. First chapter
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. First chapter

    Text and then index entries

    Jump to:   !  
    A   E   P   S  
    Index Entry Section

    !
    ! entry in node1. First chapter

    A
    a concept in first1. First chapter
    another1.1 Section 1

    E
    entry asplit indices
    entry after printindex1. First chapter
    entry in node1. First chapter
    entry in node1. First chapter

    Jump to:   !  
    A   E   P   S  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/split_chapter_index/split_chapter_index.20000644000175000017500000000000011264347123030552 0ustar flichtenheldflichtenheldtexi2html-1.82/test/indices/res/index_special_region/0000755000175000017500000000000011264347126024576 5ustar flichtenheldflichtenheldtexi2html-1.82/test/indices/res/index_special_region/index_special_region_2.html0000644000175000017500000002065411264347126032066 0ustar flichtenheldflichtenheld Untitled Document: A. Copying and indices
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A. Copying and indices

    In the appendix, we print the indices and references.

    Copying information for the copying information. Public domain reference for reference on the licence.

    Titlepage anchor for the titlepage. Titlepage footnote anchor for reference on the titlepage.

    This is a test manual, trivially and explicitly in the public domain(1).

    Jump to:   C   P   T  
    Index Entry Section

    C
    Copying appendixA. Copying and indices
    Copying this documentTop

    P
    Public domain

    T
    Titlepage footnote
    Titlepage indexTop

    Jump to:   C   P   T  
    Jump to:   A   F  
    Index Entry Section

    A
    another funA. Copying and indices

    F
    findex entry1. Chapter
    fun1. Chapter

    Jump to:   A   F  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_special_region/index_special_region_toc.html0000644000175000017500000000633611264347125032512 0ustar flichtenheldflichtenheld Untitled Document: Table of Contents
    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_special_region/index_special_region.html0000644000175000017500000000705211264347125031641 0ustar flichtenheldflichtenheld Untitled Document: Top
    [Top] [Contents] [Index] [ ? ]

    This is the titlepage(1)

    This is a test manual, trivially and explicitly in the public domain(1).

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_special_region/index_special_region.20000644000175000017500000000061711264347125031036 0ustar flichtenheldflichtenheld** Index entry before document: @cindex Copying this document (l. 7) ** Printindex before document beginning: @printindex cp (l. 17) ** Index entry before document: @cindex Titlepage index (l. 23) ** Empty index entry for @cindex (l. 46) ** Empty index entry for @deffn (l. 47) ** Empty index entry for @deffn (l. 48) ** Empty index entry for @deffn (l. 49) ** Empty index entry for @ftable (l. 53) texi2html-1.82/test/indices/res/index_special_region/index_special_region_1.html0000644000175000017500000001225411264347126032062 0ustar flichtenheldflichtenheld Untitled Document: 1. Chapter
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter

    This is a test manual, trivially and explicitly in the public domain(1).

    This test demonstrates @anchor and indices in @copying and titlepage, and various wrong index entries.

    truc:
    truc:
    :
    fun

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_special_region/index_special_region_abt.html0000644000175000017500000001257311264347125032473 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_special_region/index_special_region_fot.html0000644000175000017500000000652311264347125032513 0ustar flichtenheldflichtenheld Untitled Document: Footnotes
    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)

    This is a fine document.

    (1)

    The public domain is something you should allready know


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/nodes_before_top_and_sections/0000755000175000017500000000000011264347123026466 5ustar flichtenheldflichtenheldtexi2html-1.82/test/indices/res/nodes_before_top_and_sections/nodes_before_top_and_sections_1.html0000644000175000017500000001743111264347123035647 0ustar flichtenheldflichtenheld Untitled Document: 1. A chapter
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. A chapter

    Jump to:   !  
    A   E   F   N   P   S   T  
    Index Entry Section

    !
    ! entry in nodetop section

    A
    a concept a nodetop section
    anothertop section

    E
    entry atop section
    entry after printindextop section
    entry in nodetop section

    F
    first before toptop section

    Jump to:   !  
    A   E   F   N   P   S   T  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/nodes_before_top_and_sections/nodes_before_top_and_sections.20000644000175000017500000000000011264347123034604 0ustar flichtenheldflichtenheldtexi2html-1.82/test/indices/res/nodes_before_top_and_sections/nodes_before_top_and_sections.html0000644000175000017500000012374611264347123035436 0ustar flichtenheldflichtenheld Untitled Document: top section
    [Top] [Contents] [Index] [ ? ]

    in first node before printindex

    Jump to:   !  
    A   E   F   N   P   S   T  
    Index Entry Section

    !
    ! entry in nodetop section

    A
    a concept a nodetop section
    anothertop section

    E
    entry atop section
    entry after printindextop section
    entry in nodetop section

    F
    first before toptop section

    N
    node in chapter1. A chapter: N – T
    node in menu before toptop section

    P
    printindex node in menu before toptop section

    S
    somethingtop section

    T
    top sectiontop section

    Jump to:   !  
    A   E   F   N   P   S   T  

    in first node

    Jump to:   !  
    A   E   F   N   P   S   T  
    Index Entry Section

    !
    ! entry in nodetop section

    A
    a concept a nodetop section
    anothertop section

    E
    entry atop section
    entry after printindextop section
    entry in nodetop section

    F
    first before toptop section

    N
    node in chapter1. A chapter: N – T
    node in menu before toptop section

    P
    printindex node in menu before toptop section

    S
    somethingtop section

    T
    top sectiontop section

    Jump to:   !  
    A   E   F   N   P   S   T  

    after second printindex in first node

    between node in menu before top and printindex

    Jump to:   !  
    A   E   F   N   P   S   T  
    Index Entry Section

    !
    ! entry in nodetop section

    A
    a concept a nodetop section
    anothertop section

    E
    entry atop section
    entry after printindextop section
    entry in nodetop section

    F
    first before toptop section

    N
    node in chapter1. A chapter: N – T
    node in menu before toptop section

    P
    printindex node in menu before toptop section

    S
    somethingtop section

    T
    top sectiontop section

    Jump to:   !  
    A   E   F   N   P   S   T  

    node in menu before top text after printindex

    in top node.

    Jump to:   !  
    A   E   F   N   P   S   T  
    Index Entry Section

    !
    ! entry in nodetop section

    A
    a concept a nodetop section
    anothertop section

    E
    entry atop section
    entry after printindextop section
    entry in nodetop section

    F
    first before toptop section

    N
    node in chapter1. A chapter: N – T
    node in menu before toptop section

    P
    printindex node in menu before toptop section

    S
    somethingtop section

    T
    top sectiontop section

    Jump to:   !  
    A   E   F   N   P   S   T  
    Jump to:   A   F   S  
    Index Entry Section

    A
    a functiontop section

    F
    fun in nodetop section

    S
    somewheretop section

    Jump to:   A   F   S  

    And one more index in top node

    Jump to:   !  
    A   E   F   N   P   S   T  
    Index Entry Section

    !
    ! entry in nodetop section

    A
    a concept a nodetop section
    anothertop section

    E
    entry atop section
    entry after printindextop section
    entry in nodetop section

    F
    first before toptop section

    N
    node in chapter1. A chapter: N – T
    node in menu before toptop section

    P
    printindex node in menu before toptop section

    S
    somethingtop section

    T
    top sectiontop section

    Jump to:   !  
    A   E   F   N   P   S   T  

    top section

    in top section

    Text and then index entries

    Jump to:   !  
    A   E   F   N   P   S   T  
    Index Entry Section

    !
    ! entry in nodetop section

    A
    a concept a nodetop section
    anothertop section

    E
    entry atop section
    entry after printindextop section
    entry in nodetop section

    F
    first before toptop section

    N
    node in chapter1. A chapter: N – T
    node in menu before toptop section

    P
    printindex node in menu before toptop section

    S
    somethingtop section

    T
    top sectiontop section

    Jump to:   !  
    A   E   F   N   P   S   T  
    Jump to:   A   F   S  
    Index Entry Section

    A
    a functiontop section

    F
    fun in nodetop section

    S
    somewheretop section

    Jump to:   A   F   S  
    Jump to:   !  
    A   E   F   N   P   S   T  
    Index Entry Section

    !
    ! entry in nodetop section

    A
    a concept a nodetop section
    anothertop section

    E
    entry atop section
    entry after printindextop section
    entry in nodetop section

    F
    first before toptop section

    N
    node in chapter1. A chapter: N – T
    node in menu before toptop section

    P
    printindex node in menu before toptop section

    S
    somethingtop section

    T
    top sectiontop section

    Jump to:   !  
    A   E   F   N   P   S   T  
    Jump to:   !  
    A   E   F   N   P   S   T  
    Index Entry Section

    !
    ! entry in nodetop section

    A
    a concept a nodetop section
    anothertop section

    E
    entry atop section
    entry after printindextop section
    entry in nodetop section

    F
    first before toptop section

    N
    node in chapter1. A chapter: N – T
    node in menu before toptop section

    P
    printindex node in menu before toptop section

    S
    somethingtop section

    T
    top sectiontop section

    Jump to:   !  
    A   E   F   N   P   S   T  

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/nodes_before_top_and_sections/nodes_before_top_and_sections_2.html0000644000175000017500000001661111264347123035647 0ustar flichtenheldflichtenheld Untitled Document: 1. A chapter: N – T
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. A chapter: N – T

    Jump to:   !  
    A   E   F   N   P   S   T  
    Index Entry Section

    N
    node in chapter1. A chapter: N – T
    node in menu before toptop section

    P
    printindex node in menu before toptop section

    S
    somethingtop section

    T
    top sectiontop section

    Jump to:   !  
    A   E   F   N   P   S   T  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/nodes_before_top_and_sections/nodes_before_top_and_sections_abt.html0000644000175000017500000001220011264347123036242 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_split/0000755000175000017500000000000011264347124022744 5ustar flichtenheldflichtenheldtexi2html-1.82/test/indices/res/index_split/index_split_2.html0000644000175000017500000012302411264347124026377 0ustar flichtenheldflichtenheld Untitled Document: 1. First chapter: N – S
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. First chapter: N – S

    Jump to:   !  
    A   B   E   N   P   S  
    Index Entry Section

    N
    node 2 in section 31.3 Section 3
    node 3 in section 31.3 Section 3
    node in section 31.3 Section 3

    P
    printindex subsection 21.1.2 Subsection 2

    S
    section 31.3 Section 3
    something1.1 Section 1
    subsection 21.1.2 Subsection 2

    Jump to:   !  
    A   B   E   N   P   S  
    Jump to:   A   F   S  
    Index Entry Section

    A
    a function1. First chapter: N – S

    F
    fun in node1. First chapter

    S
    somewhere1. First chapter: N – S

    Jump to:   A   F   S  

    1. First chapter


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 Section 1

    The index once more

    Jump to:   !  
    A   B   E   N   P   S  
    Index Entry Section

    !
    ! entry in node1. First chapter

    A
    a concept in first1. First chapter: N – S
    after second printindex node in section 31.3 Section 3
    another1.1 Section 1

    B
    between printindex node in section 31.3 Section 3

    E
    entry asplit indices
    entry after printindex1. First chapter
    entry in node1. First chapter
    entry in node1. First chapter

    N
    node 2 in section 31.3 Section 3
    node 3 in section 31.3 Section 3
    node in section 31.3 Section 3

    P
    printindex subsection 21.1.2 Subsection 2

    S
    section 31.3 Section 3
    something1.1 Section 1
    subsection 21.1.2 Subsection 2

    Jump to:   !  
    A   B   E   N   P   S  

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.1 Subsection 1

    In subsection 1


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.2 Subsection 2

    index in subsction 2

    Jump to:   !  
    A   B   E   N   P   S  
    Index Entry Section

    !
    ! entry in node1. First chapter

    A
    a concept in first1. First chapter: N – S
    after second printindex node in section 31.3 Section 3
    another1.1 Section 1

    B
    between printindex node in section 31.3 Section 3

    E
    entry asplit indices
    entry after printindex1. First chapter
    entry in node1. First chapter
    entry in node1. First chapter

    N
    node 2 in section 31.3 Section 3
    node 3 in section 31.3 Section 3
    node in section 31.3 Section 3

    P
    printindex subsection 21.1.2 Subsection 2

    S
    section 31.3 Section 3
    something1.1 Section 1
    subsection 21.1.2 Subsection 2

    Jump to:   !  
    A   B   E   N   P   S  

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2 Section 2

    Section 2


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.3 Section 3

    Jump to:   !  
    A   B   E   N   P   S  
    Index Entry Section

    !
    ! entry in node1. First chapter

    A
    a concept in first1. First chapter: N – S
    after second printindex node in section 31.3 Section 3
    another1.1 Section 1

    B
    between printindex node in section 31.3 Section 3

    E
    entry asplit indices
    entry after printindex1. First chapter
    entry in node1. First chapter
    entry in node1. First chapter

    N
    node 2 in section 31.3 Section 3
    node 3 in section 31.3 Section 3
    node in section 31.3 Section 3

    P
    printindex subsection 21.1.2 Subsection 2

    S
    section 31.3 Section 3
    something1.1 Section 1
    subsection 21.1.2 Subsection 2

    Jump to:   !  
    A   B   E   N   P   S  

    Text for the node in section 3

    Text for the node 2 in section 3

    Jump to:   !  
    A   B   E   N   P   S  
    Index Entry Section

    !
    ! entry in node1. First chapter

    A
    a concept in first1. First chapter: N – S
    after second printindex node in section 31.3 Section 3
    another1.1 Section 1

    B
    between printindex node in section 31.3 Section 3

    E
    entry asplit indices
    entry after printindex1. First chapter
    entry in node1. First chapter
    entry in node1. First chapter

    N
    node 2 in section 31.3 Section 3
    node 3 in section 31.3 Section 3
    node in section 31.3 Section 3

    P
    printindex subsection 21.1.2 Subsection 2

    S
    section 31.3 Section 3
    something1.1 Section 1
    subsection 21.1.2 Subsection 2

    Jump to:   !  
    A   B   E   N   P   S  
    Jump to:   !  
    A   B   E   N   P   S  
    Index Entry Section

    !
    ! entry in node1. First chapter

    A
    a concept in first1. First chapter: N – S
    after second printindex node in section 31.3 Section 3
    another1.1 Section 1

    B
    between printindex node in section 31.3 Section 3

    E
    entry asplit indices
    entry after printindex1. First chapter
    entry in node1. First chapter
    entry in node1. First chapter

    N
    node 2 in section 31.3 Section 3
    node 3 in section 31.3 Section 3
    node in section 31.3 Section 3

    P
    printindex subsection 21.1.2 Subsection 2

    S
    section 31.3 Section 3
    something1.1 Section 1
    subsection 21.1.2 Subsection 2

    Jump to:   !  
    A   B   E   N   P   S  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_split/index_split_abt.html0000644000175000017500000001207011264347124027002 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_split/index_split_1.html0000644000175000017500000001735611264347124026410 0ustar flichtenheldflichtenheld Untitled Document: 1. First chapter
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Text and then index entries

    Jump to:   !  
    A   B   E   N   P   S  
    Index Entry Section

    !
    ! entry in node1. First chapter

    A
    a concept in first1. First chapter: N – S
    after second printindex node in section 31.3 Section 3
    another1.1 Section 1

    B
    between printindex node in section 31.3 Section 3

    E
    entry asplit indices
    entry after printindex1. First chapter
    entry in node1. First chapter
    entry in node1. First chapter

    Jump to:   !  
    A   B   E   N   P   S  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_split/index_split.html0000644000175000017500000003665111264347124026167 0ustar flichtenheldflichtenheld Untitled Document: split indices
    [Top] [Contents] [Index] [ ? ]

    split indices

    Jump to:   !  
    A   B   E   N   P   S  
    Index Entry Section

    !
    ! entry in node1. First chapter

    A
    a concept in first1. First chapter: N – S
    after second printindex node in section 31.3 Section 3
    another1.1 Section 1

    B
    between printindex node in section 31.3 Section 3

    E
    entry asplit indices
    entry after printindex1. First chapter
    entry in node1. First chapter
    entry in node1. First chapter

    N
    node 2 in section 31.3 Section 3
    node 3 in section 31.3 Section 3
    node in section 31.3 Section 3

    P
    printindex subsection 21.1.2 Subsection 2

    S
    section 31.3 Section 3
    something1.1 Section 1
    subsection 21.1.2 Subsection 2

    Jump to:   !  
    A   B   E   N   P   S  
    Jump to:   A   F   S  
    Index Entry Section

    A
    a function1. First chapter: N – S

    F
    fun in node1. First chapter

    S
    somewhere1. First chapter: N – S

    Jump to:   A   F   S  

    And one one more index

    Jump to:   !  
    A   B   E   N   P   S  
    Index Entry Section

    !
    ! entry in node1. First chapter

    A
    a concept in first1. First chapter: N – S
    after second printindex node in section 31.3 Section 3
    another1.1 Section 1

    B
    between printindex node in section 31.3 Section 3

    E
    entry asplit indices
    entry after printindex1. First chapter
    entry in node1. First chapter
    entry in node1. First chapter

    N
    node 2 in section 31.3 Section 3
    node 3 in section 31.3 Section 3
    node in section 31.3 Section 3

    P
    printindex subsection 21.1.2 Subsection 2

    S
    section 31.3 Section 3
    something1.1 Section 1
    subsection 21.1.2 Subsection 2

    Jump to:   !  
    A   B   E   N   P   S  

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_split/index_split.20000644000175000017500000000000011264347124025337 0ustar flichtenheldflichtenheldtexi2html-1.82/test/indices/res/index_split/index_split_3.html0000644000175000017500000000755311264347124026410 0ustar flichtenheldflichtenheld Untitled Document: 2. Second chapter
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. Second chapter

    Second chapter


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/makeinfo_nodes_before_top_and_sections/0000755000175000017500000000000011264347125030341 5ustar flichtenheldflichtenheldtexi2html-1.82/test/indices/res/makeinfo_nodes_before_top_and_sections/node-in-menu-before-top.html0000644000175000017500000000351111264347124035561 0ustar flichtenheldflichtenheld Untitled Document: node in menu before top

    The node you are looking for is at node in menu before top.

    texi2html-1.82/test/indices/res/makeinfo_nodes_before_top_and_sections/chapter.html0000644000175000017500000001076611264347125032667 0ustar flichtenheldflichtenheld Untitled Document: 1. A chapter
    node: chapter , first , Top [ > ]

    1. A chapter


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/makeinfo_nodes_before_top_and_sections/first-before-top.html0000644000175000017500000000343711264347124034424 0ustar flichtenheldflichtenheld Untitled Document: first before top

    The node you are looking for is at first before top.

    texi2html-1.82/test/indices/res/makeinfo_nodes_before_top_and_sections/a-node.html0000644000175000017500000000334311264347125032375 0ustar flichtenheldflichtenheld Untitled Document: a node

    The node you are looking for is at a node.

    ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootroottexi2html-1.82/test/indices/res/makeinfo_nodes_before_top_and_sections/more_before_top_section_4.htmltexi2html-1.82/test/indices/res/makeinfo_nodes_before_top_and_sections/more_before_top_section_4.htm0000644000175000017500000001131711264347124036172 0ustar flichtenheldflichtenheld Untitled Document: 1. A chapter: N – T
    node: , , [ > ]

    1. A chapter: N – T


    node: node in chapter , chapter , Top [ > ]

    node in chapter


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/makeinfo_nodes_before_top_and_sections/node-in-chapter.html0000644000175000017500000000343111264347124034204 0ustar flichtenheldflichtenheld Untitled Document: node in chapter

    The node you are looking for is at node in chapter.

    texi2html-1.82/test/indices/res/makeinfo_nodes_before_top_and_sections/index.html0000644000175000017500000001511211264347124032335 0ustar flichtenheldflichtenheld Untitled Document: top section
    node: Top , first before top , (dir) [ > ]

    in top node.

    And one more index in top node

    top section

    in top section


    node: Top , first before top , (dir) [ > ]

    This document was generated by a tester on a sunny day using texi2html.

    ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootroottexi2html-1.82/test/indices/res/makeinfo_nodes_before_top_and_sections/nodes_before_top_and_sections.2texi2html-1.82/test/indices/res/makeinfo_nodes_before_top_and_sections/nodes_before_top_and_sections0000644000175000017500000000000011264347124036316 0ustar flichtenheldflichtenheldtexi2html-1.82/test/indices/res/makeinfo_nodes_before_top_and_sections/second.html0000644000175000017500000000334311264347124032504 0ustar flichtenheldflichtenheld Untitled Document: second

    The node you are looking for is at second.

    ././@LongLink0000000000000000000000000000015000000000000011561 Lustar rootroottexi2html-1.82/test/indices/res/makeinfo_nodes_before_top_and_sections/more_before_top_section_abt.htmltexi2html-1.82/test/indices/res/makeinfo_nodes_before_top_and_sections/more_before_top_section_abt.h0000644000175000017500000001015311264347124036231 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    node: , , [ > ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ > ] Following Node following in node reading order 1.2.4

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    node: , , [ > ]

    This document was generated by a tester on a sunny day using texi2html.

    ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootroottexi2html-1.82/test/indices/res/makeinfo_nodes_before_top_and_sections/more_before_top_section_1.htmltexi2html-1.82/test/indices/res/makeinfo_nodes_before_top_and_sections/more_before_top_section_1.htm0000644000175000017500000002241511264347124036170 0ustar flichtenheldflichtenheld Untitled Document: first
    node: first , Top , Top [ > ]

    first

    Text and then index entries


    node: second , first , first [ > ]

    second


    node: another , a node , second [ > ]

    another


    node: a node , second , second [ > ]

    a node


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/makeinfo_nodes_before_top_and_sections/another.html0000644000175000017500000000335111264347124032670 0ustar flichtenheldflichtenheld Untitled Document: another

    The node you are looking for is at another.

    ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootroottexi2html-1.82/test/indices/res/makeinfo_nodes_before_top_and_sections/more_before_top_section_0.htmltexi2html-1.82/test/indices/res/makeinfo_nodes_before_top_and_sections/more_before_top_section_0.htm0000644000175000017500000001772411264347124036176 0ustar flichtenheldflichtenheld Untitled Document: first before top
    node: first before top , , (dir) [ > ]

    first before top

    in first node before printindex

    in first node

    after second printindex in first node


    node: node in menu before top , first before top , first before top [ > ]

    node in menu before top

    between node in menu before top and printindex

    node in menu before top text after printindex


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/makeinfo_nodes_before_top_and_sections/first.html0000644000175000017500000000333511264347124032361 0ustar flichtenheldflichtenheld Untitled Document: first

    The node you are looking for is at first.

    texi2html-1.82/test/indices/res/index_no_nodes/0000755000175000017500000000000011264347126023417 5ustar flichtenheldflichtenheldtexi2html-1.82/test/indices/res/index_no_nodes/index_no_nodes.20000644000175000017500000000021711264347126026475 0ustar flichtenheldflichtenheld** Index entry before document: @cindex truc (l. 5) ** Printindex before document beginning: @printindex cp (l. 7) *** Bad index name: bidule texi2html-1.82/test/indices/res/index_no_nodes/index_no_nodes_5.html0000644000175000017500000001256111264347126027531 0ustar flichtenheldflichtenheld Untitled Document: 1. Chapter: U
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter: U

    Jump to:   C   S   T   U  
    Index Entry Section

    U
    unnumberedunnumbered
    unnumbered after textunnumbered

    Jump to:   C   S   T   U  

    Text of chapter


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_no_nodes/index_no_nodes_0.html0000644000175000017500000001542511264347126027526 0ustar flichtenheldflichtenheld Untitled Document: unnumbered
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Garbage

    unnumbered

    in unnumbered

    Jump to:   C   S   T   U  
    Index Entry Section

    C
    chapter1. Chapter
    Chapter21. Chapter

    S
    second0.1 second
    second0.1 second

    T
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top section1top section
    trucunnumbered

    Jump to:   C   S   T   U  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_no_nodes/index_no_nodes_6.html0000644000175000017500000000745511264347126027540 0ustar flichtenheldflichtenheld Untitled Document: 2. Chapter 2
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. Chapter 2

    In chapter 2


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_no_nodes/index_no_nodes_abt.html0000644000175000017500000001204311264347126030126 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_no_nodes/index_no_nodes_1.html0000644000175000017500000001251411264347126027523 0ustar flichtenheldflichtenheld Untitled Document: unnumbered: U
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    unnumbered: U

    Jump to:   C   S   T   U  
    Index Entry Section

    U
    unnumberedunnumbered
    unnumbered after textunnumbered

    Jump to:   C   S   T   U  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_no_nodes/index_no_nodes_4.html0000644000175000017500000001572711264347126027537 0ustar flichtenheldflichtenheld Untitled Document: 1. Chapter
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter

    Jump to:   C   S   T   U  
    Index Entry Section

    C
    chapter1. Chapter
    Chapter21. Chapter

    S
    second0.1 second
    second0.1 second

    T
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top section1top section
    trucunnumbered

    Jump to:   C   S   T   U  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_no_nodes/index_no_nodes.html0000644000175000017500000001625611264347126027312 0ustar flichtenheldflichtenheld Untitled Document: top section
    [Top] [Contents] [Index] [ ? ]

    top section

    Top node

    Jump to:   C   S   T   U  
    Index Entry Section

    C
    chapter1. Chapter
    Chapter21. Chapter

    S
    second0.1 second
    second0.1 second

    T
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top section1top section
    trucunnumbered

    Jump to:   C   S   T   U  

    [Top] [Contents] [Index] [ ? ]

    top section: U

    Jump to:   C   S   T   U  
    Index Entry Section

    U
    unnumberedunnumbered
    unnumbered after textunnumbered

    Jump to:   C   S   T   U  

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_no_nodes/index_no_nodes_3.html0000644000175000017500000003576411264347126027541 0ustar flichtenheldflichtenheld Untitled Document: 0.1 second
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    0.1 second

    Jump to:   C   S   T   U  
    Index Entry Section

    C
    chapter1. Chapter
    Chapter21. Chapter

    S
    second0.1 second
    second0.1 second

    T
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top section1top section
    trucunnumbered

    Jump to:   C   S   T   U  

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    0.1 second: U

    Jump to:   C   S   T   U  
    Index Entry Section

    U
    unnumberedunnumbered
    unnumbered after textunnumbered

    Jump to:   C   S   T   U  

    second node

    Jump to:   C   S   T   U  
    Index Entry Section

    C
    chapter1. Chapter
    Chapter21. Chapter

    S
    second0.1 second
    second0.1 second

    T
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top section1top section
    trucunnumbered

    Jump to:   C   S   T   U  

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    0.1 second: U

    Jump to:   C   S   T   U  
    Index Entry Section

    U
    unnumberedunnumbered
    unnumbered after textunnumbered

    Jump to:   C   S   T   U  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/nodes_before_top_no_nodes/0000755000175000017500000000000011264347123025621 5ustar flichtenheldflichtenheldtexi2html-1.82/test/indices/res/nodes_before_top_no_nodes/nodes_before_top.html0000644000175000017500000007367011264347123032040 0ustar flichtenheldflichtenheld Untitled Document: Top
    Jump to:   !  
    A   E   F   N   P   S  
    Index Entry Section

    !
    ! entry in nodeTop

    A
    a concept a nodeTop
    anotherTop

    E
    entry aTop
    entry after printindexTop
    entry in nodeTop

    F
    first before topTop

    N
    node in menu before topTop

    P
    printindex node in menu before topTop

    S
    somethingTop

    Jump to:   !  
    A   E   F   N   P   S  

    in first node

    Jump to:   !  
    A   E   F   N   P   S  
    Index Entry Section

    !
    ! entry in nodeTop

    A
    a concept a nodeTop
    anotherTop

    E
    entry aTop
    entry after printindexTop
    entry in nodeTop

    F
    first before topTop

    N
    node in menu before topTop

    P
    printindex node in menu before topTop

    S
    somethingTop

    Jump to:   !  
    A   E   F   N   P   S  

    node in menu before top text

    Top

    Jump to:   !  
    A   E   F   N   P   S  
    Index Entry Section

    !
    ! entry in nodeTop

    A
    a concept a nodeTop
    anotherTop

    E
    entry aTop
    entry after printindexTop
    entry in nodeTop

    F
    first before topTop

    N
    node in menu before topTop

    P
    printindex node in menu before topTop

    S
    somethingTop

    Jump to:   !  
    A   E   F   N   P   S  
    Jump to:   A   F   S  
    Index Entry Section

    A
    a functionTop

    F
    fun in nodeTop

    S
    somewhereTop

    Jump to:   A   F   S  

    And one one more index

    Jump to:   !  
    A   E   F   N   P   S  
    Index Entry Section

    !
    ! entry in nodeTop

    A
    a concept a nodeTop
    anotherTop

    E
    entry aTop
    entry after printindexTop
    entry in nodeTop

    F
    first before topTop

    N
    node in menu before topTop

    P
    printindex node in menu before topTop

    S
    somethingTop

    Jump to:   !  
    A   E   F   N   P   S  

    Text and then index entries

    Jump to:   !  
    A   E   F   N   P   S  
    Index Entry Section

    !
    ! entry in nodeTop

    A
    a concept a nodeTop
    anotherTop

    E
    entry aTop
    entry after printindexTop
    entry in nodeTop

    F
    first before topTop

    N
    node in menu before topTop

    P
    printindex node in menu before topTop

    S
    somethingTop

    Jump to:   !  
    A   E   F   N   P   S  
    Jump to:   A   F   S  
    Index Entry Section

    A
    a functionTop

    F
    fun in nodeTop

    S
    somewhereTop

    Jump to:   A   F   S  
    Jump to:   !  
    A   E   F   N   P   S  
    Index Entry Section

    !
    ! entry in nodeTop

    A
    a concept a nodeTop
    anotherTop

    E
    entry aTop
    entry after printindexTop
    entry in nodeTop

    F
    first before topTop

    N
    node in menu before topTop

    P
    printindex node in menu before topTop

    S
    somethingTop

    Jump to:   !  
    A   E   F   N   P   S  
    Jump to:   !  
    A   E   F   N   P   S  
    Index Entry Section

    !
    ! entry in nodeTop

    A
    a concept a nodeTop
    anotherTop

    E
    entry aTop
    entry after printindexTop
    entry in nodeTop

    F
    first before topTop

    N
    node in menu before topTop

    P
    printindex node in menu before topTop

    S
    somethingTop

    Jump to:   !  
    A   E   F   N   P   S  

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/nodes_before_top_no_nodes/nodes_before_top.20000644000175000017500000000000011264347123031206 0ustar flichtenheldflichtenheldtexi2html-1.82/test/indices/res/index_no_node/0000755000175000017500000000000011264347126023234 5ustar flichtenheldflichtenheldtexi2html-1.82/test/indices/res/index_no_node/index_no_node_3.html0000644000175000017500000002677011264347126027170 0ustar flichtenheldflichtenheld Untitled Document: 0.1 second
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    0.1 second

    Jump to:   C   S   T   U  
    Index Entry Section

    C
    chapter1. Chapter
    Chapter21. Chapter

    S
    second0.1 second
    second0.1 second

    T
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top section1top section
    trucunnumbered

    U
    unnumberedunnumbered
    unnumbered after textunnumbered

    Jump to:   C   S   T   U  

    second node

    Jump to:   C   S   T   U  
    Index Entry Section

    C
    chapter1. Chapter
    Chapter21. Chapter

    S
    second0.1 second
    second0.1 second

    T
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top section1top section
    trucunnumbered

    U
    unnumberedunnumbered
    unnumbered after textunnumbered

    Jump to:   C   S   T   U  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_no_node/index_no_node.html0000644000175000017500000001500711264347126026735 0ustar flichtenheldflichtenheld Untitled Document: top section
    [Top] [Contents] [Index] [ ? ]

    top section

    Top node

    Jump to:   C   S   T   U  
    Index Entry Section

    C
    chapter1. Chapter
    Chapter21. Chapter

    S
    second0.1 second
    second0.1 second

    T
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top section1top section
    trucunnumbered

    U
    unnumberedunnumbered
    unnumbered after textunnumbered

    Jump to:   C   S   T   U  

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_no_node/index_no_node_6.html0000644000175000017500000000757011264347126027170 0ustar flichtenheldflichtenheld Untitled Document: 2. Chapter 2
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. Chapter 2

    In chapter 2


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_no_node/index_no_node.20000644000175000017500000000021711264347126026127 0ustar flichtenheldflichtenheld** Index entry before document: @cindex truc (l. 5) ** Printindex before document beginning: @printindex cp (l. 7) *** Bad index name: bidule texi2html-1.82/test/indices/res/index_no_node/index_no_node_1.html0000644000175000017500000001263311264347126027157 0ustar flichtenheldflichtenheld Untitled Document: unnumbered: U
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    unnumbered: U

    Jump to:   C   S   T   U  
    Index Entry Section

    U
    unnumberedunnumbered
    unnumbered after textunnumbered

    Jump to:   C   S   T   U  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_no_node/index_no_node_4.html0000644000175000017500000001656311264347126027170 0ustar flichtenheldflichtenheld Untitled Document: 1. Chapter
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter

    Jump to:   C   S   T   U  
    Index Entry Section

    C
    chapter1. Chapter
    Chapter21. Chapter

    S
    second0.1 second
    second0.1 second

    T
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top section1top section
    trucunnumbered

    Jump to:   C   S   T   U  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_no_node/index_no_node_0.html0000644000175000017500000001632511264347126027160 0ustar flichtenheldflichtenheld Untitled Document: unnumbered

    Garbage

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    unnumbered

    in unnumbered

    Jump to:   C   S   T   U  
    Index Entry Section

    C
    chapter1. Chapter
    Chapter21. Chapter

    S
    second0.1 second
    second0.1 second

    T
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top sectiontop section
    top section1top section
    trucunnumbered

    Jump to:   C   S   T   U  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_no_node/index_no_node_5.html0000644000175000017500000001317611264347126027166 0ustar flichtenheldflichtenheld Untitled Document: 1. Chapter: U
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter: U

    Jump to:   C   S   T   U  
    Index Entry Section

    U
    unnumberedunnumbered
    unnumbered after textunnumbered

    Jump to:   C   S   T   U  

    Text of chapter


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_no_node/index_no_node_abt.html0000644000175000017500000001214211264347126027560 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_special_region_no_region/0000755000175000017500000000000011264347126026635 5ustar flichtenheldflichtenheldtexi2html-1.82/test/indices/res/index_special_region_no_region/index_special_region_no_region.20000644000175000017500000000061711264347126035135 0ustar flichtenheldflichtenheld** Index entry before document: @cindex Copying this document (l. 7) ** Printindex before document beginning: @printindex cp (l. 17) ** Index entry before document: @cindex Titlepage index (l. 23) ** Empty index entry for @cindex (l. 47) ** Empty index entry for @deffn (l. 48) ** Empty index entry for @deffn (l. 49) ** Empty index entry for @deffn (l. 50) ** Empty index entry for @ftable (l. 54) texi2html-1.82/test/indices/res/index_special_region_no_region/index_special_region_no_region_1.html0000644000175000017500000001227311264347126036161 0ustar flichtenheldflichtenheld Untitled Document: 1. Chapter
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter

    This test demonstrates @anchor and indices in @copying and titlepage, and various wrong index entries.

    truc:
    truc:
    :
    fun

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_special_region_no_region/index_special_region_no_region_2.html0000644000175000017500000002103711264347126036160 0ustar flichtenheldflichtenheld Untitled Document: A. Copying and indices
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A. Copying and indices

    In the appendix, we print the indices and references.

    Copying information for the copying information. Public domain reference for reference on the licence.

    Titlepage anchor for the titlepage. Titlepage footnote anchor for reference on the titlepage.

    Jump to:   C   P   T  
    Index Entry Section

    C
    Copying appendixA. Copying and indices
    Copying this documentTop

    P
    Public domain

    T
    Titlepage footnote
    Titlepage indexTop

    Jump to:   C   P   T  
    Jump to:   A   F  
    Index Entry Section

    A
    another funA. Copying and indices

    F
    findex entry1. Chapter
    fun1. Chapter

    Jump to:   A   F  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/index_special_region_no_region/index_special_region_no_region.html0000644000175000017500000000576611264347126035752 0ustar flichtenheldflichtenheld Untitled Document: Top
    [Top] [Contents] [Index] [ ? ]

    Top


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootroottexi2html-1.82/test/indices/res/index_special_region_no_region/index_special_region_no_region_toc.htmltexi2html-1.82/test/indices/res/index_special_region_no_region/index_special_region_no_region_toc.ht0000644000175000017500000000645611264347126036263 0ustar flichtenheldflichtenheld Untitled Document: Table of Contents
    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootroottexi2html-1.82/test/indices/res/index_special_region_no_region/index_special_region_no_region_abt.htmltexi2html-1.82/test/indices/res/index_special_region_no_region/index_special_region_no_region_abt.ht0000644000175000017500000001266711264347126036245 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/res/nodes_before_top_and_sections_monolithic/0000755000175000017500000000000011264347123030713 5ustar flichtenheldflichtenheld././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootroottexi2html-1.82/test/indices/res/nodes_before_top_and_sections_monolithic/nodes_before_top_and_sections.2texi2html-1.82/test/indices/res/nodes_before_top_and_sections_monolithic/nodes_before_top_and_sectio0000644000175000017500000000000011264347123036330 0ustar flichtenheldflichtenheld././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootroottexi2html-1.82/test/indices/res/nodes_before_top_and_sections_monolithic/nodes_before_top_and_sections.htmltexi2html-1.82/test/indices/res/nodes_before_top_and_sections_monolithic/nodes_before_top_and_sectio0000644000175000017500000014154511264347123036354 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    in first node before printindex

    Jump to:   !  
    A   E   F   N   P   S   T  
    Index Entry Section

    !
    ! entry in nodetop section

    A
    a concept a nodetop section
    anothertop section

    E
    entry atop section
    entry after printindextop section
    entry in nodetop section

    F
    first before toptop section

    N
    node in chapter1. A chapter
    node in menu before toptop section

    P
    printindex node in menu before toptop section

    S
    somethingtop section

    T
    top sectiontop section

    Jump to:   !  
    A   E   F   N   P   S   T  

    in first node

    Jump to:   !  
    A   E   F   N   P   S   T  
    Index Entry Section

    !
    ! entry in nodetop section

    A
    a concept a nodetop section
    anothertop section

    E
    entry atop section
    entry after printindextop section
    entry in nodetop section

    F
    first before toptop section

    N
    node in chapter1. A chapter
    node in menu before toptop section

    P
    printindex node in menu before toptop section

    S
    somethingtop section

    T
    top sectiontop section

    Jump to:   !  
    A   E   F   N   P   S   T  

    after second printindex in first node

    between node in menu before top and printindex

    Jump to:   !  
    A   E   F   N   P   S   T  
    Index Entry Section

    !
    ! entry in nodetop section

    A
    a concept a nodetop section
    anothertop section

    E
    entry atop section
    entry after printindextop section
    entry in nodetop section

    F
    first before toptop section

    N
    node in chapter1. A chapter
    node in menu before toptop section

    P
    printindex node in menu before toptop section

    S
    somethingtop section

    T
    top sectiontop section

    Jump to:   !  
    A   E   F   N   P   S   T  

    node in menu before top text after printindex

    in top node.

    Jump to:   !  
    A   E   F   N   P   S   T  
    Index Entry Section

    !
    ! entry in nodetop section

    A
    a concept a nodetop section
    anothertop section

    E
    entry atop section
    entry after printindextop section
    entry in nodetop section

    F
    first before toptop section

    N
    node in chapter1. A chapter
    node in menu before toptop section

    P
    printindex node in menu before toptop section

    S
    somethingtop section

    T
    top sectiontop section

    Jump to:   !  
    A   E   F   N   P   S   T  
    Jump to:   A   F   S  
    Index Entry Section

    A
    a functiontop section

    F
    fun in nodetop section

    S
    somewheretop section

    Jump to:   A   F   S  

    And one more index in top node

    Jump to:   !  
    A   E   F   N   P   S   T  
    Index Entry Section

    !
    ! entry in nodetop section

    A
    a concept a nodetop section
    anothertop section

    E
    entry atop section
    entry after printindextop section
    entry in nodetop section

    F
    first before toptop section

    N
    node in chapter1. A chapter
    node in menu before toptop section

    P
    printindex node in menu before toptop section

    S
    somethingtop section

    T
    top sectiontop section

    Jump to:   !  
    A   E   F   N   P   S   T  

    top section

    in top section

    Text and then index entries

    Jump to:   !  
    A   E   F   N   P   S   T  
    Index Entry Section

    !
    ! entry in nodetop section

    A
    a concept a nodetop section
    anothertop section

    E
    entry atop section
    entry after printindextop section
    entry in nodetop section

    F
    first before toptop section

    N
    node in chapter1. A chapter
    node in menu before toptop section

    P
    printindex node in menu before toptop section

    S
    somethingtop section

    T
    top sectiontop section

    Jump to:   !  
    A   E   F   N   P   S   T  
    Jump to:   A   F   S  
    Index Entry Section

    A
    a functiontop section

    F
    fun in nodetop section

    S
    somewheretop section

    Jump to:   A   F   S  
    Jump to:   !  
    A   E   F   N   P   S   T  
    Index Entry Section

    !
    ! entry in nodetop section

    A
    a concept a nodetop section
    anothertop section

    E
    entry atop section
    entry after printindextop section
    entry in nodetop section

    F
    first before toptop section

    N
    node in chapter1. A chapter
    node in menu before toptop section

    P
    printindex node in menu before toptop section

    S
    somethingtop section

    T
    top sectiontop section

    Jump to:   !  
    A   E   F   N   P   S   T  
    Jump to:   !  
    A   E   F   N   P   S   T  
    Index Entry Section

    !
    ! entry in nodetop section

    A
    a concept a nodetop section
    anothertop section

    E
    entry atop section
    entry after printindextop section
    entry in nodetop section

    F
    first before toptop section

    N
    node in chapter1. A chapter
    node in menu before toptop section

    P
    printindex node in menu before toptop section

    S
    somethingtop section

    T
    top sectiontop section

    Jump to:   !  
    A   E   F   N   P   S   T  

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. A chapter

    Jump to:   !  
    A   E   F   N   P   S   T  
    Index Entry Section

    !
    ! entry in nodetop section

    A
    a concept a nodetop section
    anothertop section

    E
    entry atop section
    entry after printindextop section
    entry in nodetop section

    F
    first before toptop section

    N
    node in chapter1. A chapter
    node in menu before toptop section

    P
    printindex node in menu before toptop section

    S
    somethingtop section

    T
    top sectiontop section

    Jump to:   !  
    A   E   F   N   P   S   T  

    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/indices/index_nodes.texi0000644000175000017500000000124411264347126023026 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename index_nodes @node Top @cindex entry a @printindex cp @printindex fn And one one more index @printindex cp @menu * first:: @end menu @node first,,Top, Top Text and then index entries @cindex entry in node @cindex ! entry in node @findex fun in node @cindex entry in node @printindex cp @menu * second:: @end menu @node second,,,first @menu * a node:: * another:: @end menu @printindex fn @node another, , a node, second @cindex something @findex somewhere @cindex another @node a node, another, ,second @cindex entry after printindex @printindex cp @findex a function @cindex a concept a node @printindex cp @bye texi2html-1.82/test/indices/index_special_region_no_region.texi0000644000175000017500000000253111264347126026740 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename index_special_region-no_section.info @copying @cindex Copying this document @anchor{Copying information} This is a test manual, trivially and explicitly in the public domain@footnote{@anchor{Public domain reference} The public domain is something you should allready know @cindex Public domain }. @printindex cp @end copying @titlepage @cindex Titlepage index @anchor{Titlepage anchor} This is the titlepage@footnote{@anchor{Titlepage footnote anchor} This is a fine document. @cindex Titlepage footnote } @insertcopying @end titlepage @node Top @top Top @chapter Chapter @c @insertcopying This test demonstrates @@anchor and indices in @@copying and titlepage, and various wrong index entries. @findex findex entry @cindex @deffn{truc} { } @deffnx{truc} @deffnx{} {} @end deffn @ftable @item @item fun @end ftable @menu * Copying and indices:: @end menu @node Copying and indices @appendix Copying and indices In the appendix, we print the indices and references. @findex another fun @cindex Copying appendix @ref{Copying information} for the copying information. @ref{Public domain reference} for reference on the licence. @ref{Titlepage anchor} for the titlepage. @ref{Titlepage footnote anchor} for reference on the titlepage. @c @insertcopying @printindex cp @printindex fn @contents @bye texi2html-1.82/test/indices/tests.txt0000644000175000017500000000304611264347126021541 0ustar flichtenheldflichtenheldindex_table index_table.texi index_table_chapter index_table.texi -split chapter -init index_test.init split_chapter_index split_chapter_index.texi -split chapter -init index_test.init index_split index_split.texi -split chapter -init index_test.init # wrong because of a a printindex between node and section makeinfo_index_split index_split.texi -init makeinfo.init -init index_test.init index_no_node index_no_node.texi -split chapter -init index_test.init makeinfo_nodes_before_top nodes_before_top.texi -init makeinfo.init -init index_test.init -split node -no-node-files nodes_before_top nodes_before_top.texi --use-nodes -init index_test.init -split chapter # result is that indices are not split nodes_before_top_no_nodes nodes_before_top.texi -init index_test.init -split chapter nodes_before_top_and_sections nodes_before_top_and_sections.texi -init index_test.init -split chapter nodes_before_top_and_sections_monolithic nodes_before_top_and_sections.texi makeinfo_nodes_before_top_and_sections nodes_before_top_and_sections.texi -init makeinfo.init -init index_test.init index_special_region index_special_region.texi -split chapter index_special_region_no_region index_special_region_no_region.texi -split chapter index_special_region_no_insertcopying index_special_region_no_insertcopying.texi -split chapter makeinfo_index_nodes index_nodes.texi -init makeinfo.init -init index_test.init -split node printindex_between_node_section printindex_between_node_section.texi -init index_test.init -node-files index_and_node_same_name index_and_node_same_name.texi texi2html-1.82/test/indices/index_no_node.texi0000644000175000017500000000115511264347126023340 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename index_no_node @cindex truc Garbage @printindex cp @unnumbered unnumbered @printindex bidule @cindex unnumbered in unnumbered @cindex unnumbered after text @printindex cp @top top section @cindex top section @cindex top section @cindex top section @cindex top section @cindex top section @cindex top section Top node @printindex cp @cindex top section1 @section second @printindex cp @cindex second second node @cindex second @printindex cp @chapter Chapter @cindex chapter @printindex cp Text of chapter @cindex Chapter2 @chapter Chapter 2 In chapter 2 @bye texi2html-1.82/test/indices/index_and_node_same_name.texi0000644000175000017500000000047011264347126025472 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename index_and_node_same_name.info @node Top @top Test index entry with node name clash Text. @cindex node @menu * index node:: @end menu @node index node @chapter index node in index node node, with the same (croo_ref) name than index entry. @printindex cp @bye texi2html-1.82/test/indices/Makefile.am0000644000175000017500000000101711264347126021666 0ustar flichtenheldflichtenheldEXTRA_DIST = index_table.texi index_no_node.texi \ index_split.texi split_chapter_index.texi nodes_before_top_and_sections.texi\ nodes_before_top.texi index_special_region_no_insertcopying.texi \ index_special_region.texi index_special_region_no_region.texi \ index_nodes.texi printindex_between_node_section.texi \ index_and_node_same_name.texi \ index_test.init tests.txt res DISTCLEANFILES = l2h_tmp_dir.init tests.log tests.out distclean-local: rm -rf out diffs dist-hook: rm -rf `find $(distdir)/res -name CVS` texi2html-1.82/test/xemacs_manual/0000755000175000017500000000000011264347115021030 5ustar flichtenheldflichtenheldtexi2html-1.82/test/xemacs_manual/new.texi0000644000175000017500000002563711264347115022531 0ustar flichtenheldflichtenheld @iftex @unnumbered XEmacs Features This section describes the difference between Emacs Version 18 and XEmacs. @unnumberedsec General Changes @itemize @bullet @ignore @item XEmacs has a new vi emulation mode called evi mode. To start evi mode in Emacs, type the command @kbd{M-x evi}. If you want Emacs to automatically put you in evi-mode all the time, include this line in your init file: @example (setq term-setup-hook 'evi) @end example @xref{evi Mode} for a brief discussion. @xref{Init File}. @end ignore @item XEmacs has a new vi emulation mode called ``viper'' mode. To start viper mode in XEmacs, type the command @kbd{M-x viper-mode}. If you want XEmacs to automatically put you in viper-mode all the time, include this line in your init file: @example (viper-mode) @end example @xref{Init File}. @item Earlier versions of Emacs only allowed keybindings to ASCII character sequences. XEmacs has greatly expanded this by allowing you to use a vector of key sequences which are in turn composed of a modifier and a keysym. @xref{Keystrokes} for more information. @item The keymap data structure has been reimplemented to allow the use of a character set larger than ASCII. Keymaps are no longer alists and/or vectors; they are a new primary data type. Consequently, code which manipulated keymaps with list or array manipulation functions will no longer work. It must use the functions @code{define-key} or @code{map-keymap} and @code{set-keymap-parent} (the new keymap functions). @xref{Key Bindings} for more information. @item Input and display of all ISO-8859-1 characters is supported. @item Multiple fonts, including variable-width fonts, and fonts of differing heights, are supported. @item There is a new @file{tags} package and a new UNIX manual browsing package. They are similar to earlier versions; for more information look at the source code. @item There is a new implementation of Dired, with many new features. The online info for Dired, @i{not} the Dired node of Emacs info, provides more detail. @item GNUS (a network news reader), VM (an alternative mail reader), ILISP (a package for interacting with inferior Lisp processes), ANGE-FTP (a package for making FTP-accessible files appear just like files on the local disk, even to Dired), Calendar (an Emacs-based calendar and appointment- management tool), and W3 (an interface to the World Wide Web) are a part of the XEmacs Lisp library. See the related documentation in the online info browser. @item Emacs now supports floating-point numbers. @item When you send mail, mail aliases are now expanded in the buffer. In earlier versions, they were expanded after the mail-sending command was executed. @item The initial value of @code{load-path} is computed when Emacs starts up, instead of being hardcoded in when Emacs is compiled. As a result, you can now move the Emacs executable and Lisp library to a different location in the file system without having to recompile. @item Any existing subdirectories of the Emacs Lisp directory are now added to the @code{load-path} by default. @item On some machines, you can change the audible bell using the @code{sound-alist} variable. @xref{Audible Bell} for more information. @item You can use multiple X windows to display multiple Emacs frames. @item You can use the X selection mechanism to copy material from other applications and into other applications. You can also use all Emacs region commands on a region selected with the mouse. @xref{Mouse Selection} for more information. @item By default, the variable @code{zmacs-regions} is set to highlight the region between point and the mark. This unifies X selection and Emacs selection behavior. @item XEmacs has a menu bar for mouse-controlled operations in addition to keystrokes. @xref{Pull-down Menus}. @item You can look in the file @file{/usr/local/lib/xemacs-19.11/etc/Emacs.ad} for a list of Emacs X resources. You can set these resources in your X environment to set your preferences for color, fonts, location, and the size of XEmacs frames. Refer to your X documentation for more information about resources. @unnumberedsec New Commands and Variables There are many new functions in XEmacs, and many existing functions whose semantics have been expanded. Most of these are only of interest to the Emacs-Lisp programmer; see the NEWS file @kbd{C-h n} for a complete list. What follows is a partial list of the new interactive commands: @findex byte-compile-and-load-file @findex byte-compile-buffer @item @code{byte-compile-and-load-file} and @code{byte-compile-buffer} byte-compile the contents of a file or buffer. @findex conx The new @code{conx} function lets you generate random sentences for your amusement. @findex compile-defun @item @code{compile-defun} compiles and evaluates the current top-level form. @findex find-this-file @findex find-this-file-other-window @item @code{find-this-file} and @code{find-this-file-other-window} can be used interactively with a prefix argument to switch to the filename at point in the buffer. @code{find-this-file-other-window} displays the file in another window. @findex invert-face @findex make-face-bold @findex make-face-bold-italic @findex make-face-italic @findex make-face-unbold @findex make-face-unitalic @findex set-face-background @findex set-face-background-pixmap @findex set-face-font @findex set-face-foreground @findex set-face-underline-p @item Several new functions have been added that allow you to customize the color and font attributes of a region of text: @code{invert-face}, @code{make-face-bold}, @code{make-face-bold-italic}, @code{make-face-italic}, @code{make-face-unbold}, @code{make-face-unitalic}, @code{set-face-background}, @code{set-face-background-pixmap}, @code{set-face-font}, @code{set-face-foreground}, and @code{set-face-underline-p}. @findex load-default-sounds @findex load-sound-file @findex play-sound @item @code{load-default-sounds} and @code{load-sound-file} allow you to customize the audible bell sound. @code{load-default-sounds} loads and installs sound files. @code{load-sound-file} reads in audio files and adds them to the sound alist. @code{play-sound} plays the specified sound type. @findex locate-library @item @code{locate-library} finds the file that the function @code{load-library} loads, and it displays the file's full pathname. @findex make-directory @findex remove-directory @item @code{make-directory} creates a directory, while @code{remove-directory} removes a directory. @findex mark-beginning-of-buffer @findex mark-end-of-buffer @item @code{mark-beginning-of-buffer} and @code{mark-end-of-buffer} push the mark to the beginning or end of a buffer, respectively. @findex mouse-del-char @findex mouse-delete-window @findex mouse-keep-one-window @findex mouse-kill-line @findex mouse-line-length @findex mouse-scroll @findex mouse-select @findex mouse-select-and-split @findex mouse-set-mark @findex mouse-set-point @findex mouse-track @findex mouse-track-adjust @findex mouse-track-and-copy-to-cutbuffer @findex mouse-track-delete-and-insert @findex mouse-track-insert @findex mouse-window-to-region Several functions have been added that allow you to perform various editing, region, and window operations using the mouse: @code{mouse-del-char}, @code{mouse-delete-window}, @code{mouse-keep-one-window}, @code{mouse-kill-line}, @code{mouse-line-length}, @code{mouse-scroll}, @code{mouse-select}, @code{mouse-select-and-split}, @code{mouse-set-mark}, @code{mouse-set-point}, @code{mouse-track}, @code{mouse-track-adjust}, @code{mouse-track-and-copy-to-cutbuffer}, @code{mouse-track-delete-and-insert}, @code{mouse-track-insert}, and @code{mouse-window-to-region}. @findex compare-windows @item @code{compare-windows} takes an argument @var{ignore-whitespace}. The argument means ignore changes in whitespace. @end itemize You can conditionalize your @file{.emacs} file as follows so that XEmacs commands are invoked only when you are in XEmacs: @cindex version number @example (cond ((string-match "Lucid" emacs-version) ;; ;; Code for any version of Lucid Emacs or XEmacs goes here ;; )) (cond ((and (string-match "XEmacs" emacs-version) (or (> emacs-major-version 19) (>= emacs-minor-version 12))) ;; ;; Code which requires XEmacs version 19.12 or newer goes here ;; )) (cond ((>= emacs-major-version 19) ;; ;; Code for any vintage-19 emacs goes here ;; )) (cond ((and (not (string-match "Lucid" emacs-version)) (= emacs-major-version 19)) ;; ;; Code specific to FSF Emacs 19 (not XEmacs) goes here ;; )) (cond ((< emacs-major-version 19) ;; ;; Code specific to emacs 18 goes here ;; )) @end example Alternatively, use @file{.xemacs/init.el} for an init file. @xref{Init File}. Of particular interest for use in files are: @itemize @bullet @findex add-menu @findex add-menu-item @findex delete-menu-item @findex disable-menu-item @findex enable-menu-item @findex relabel-menu-item @item @code{add-menu} lets you add a new menu to the menubar or a submenu to a pull-down menu. @code{add-menu-item}, @code{disable-menu-item}, @code{delete-menu-item}, @code{enable-menu-item}, and @code{relabel-menu-item} allow you to customize the XEmacs pull-down menus. @findex make-frame @item @code{make-frame} creates a new Emacs frame (X window). @end itemize These new variables are only present in XEmacs: @itemize @bullet @vindex minibuffer-confirm-incomplete @item @code{minibuffer-confirm-incomplete} prompts for confirmation in contexts where @code{completing-read} allows answers that are not valid completions. @vindex x-mode-pointer-shape @vindex x-nontext-pointer-shape @vindex x-pointer-background-color @vindex x-pointer-foreground-color @vindex x-pointer-shape @item Several variables have been added that allow you to customize the color and shape of the mouse pointer: @code{x-pointer-background-color}, @code{x-pointer-foreground-color}, @code{x-mode-pointer-shape}, @code{x-pointer-shape}, and @* @code{x-nontext-pointer-shape}. @vindex zmacs-regions @item @code{zmacs-regions} determines whether LISPM-style active regions should be used. @end itemize @unnumberedsec Changes in Key Bindings XEmacs has the following new default function keybindings: @table @kbd @item @key{HELP} Same as @kbd{C-h}. @item @key{UNDO} Same as @kbd{M-x undo}. @item @key{CUT} Same as the Cut menu item; that is, it copies the selected text to the X Clipboard selection. @item @key{COPY} Same as the Copy menu item. @item @key{PASTE} Same as the Paste menu item. @item @key{PGUP} Same as @kbd{M-v}. @item @key{PGDN} Same as @kbd{C-v}. @item @key{HOME} Same as @kbd{M-<}. @item @key{END} Same as @kbd{M->}. @item @key{LEFT-ARROW} Same as the function @code{backward-char}. @item @key{RIGHT-ARROW} Same as the function @code{forward-char}. @item @key{UP-ARROW} Same as the function @code{previous-line}. @item @key{DOWN-ARROW} Same as the function @code{next-line}. @end table @end iftex texi2html-1.82/test/xemacs_manual/gnu.texi0000644000175000017500000005541711264347115022530 0ustar flichtenheldflichtenheld @node Manifesto, Key Index, Glossary, Top @unnumbered The GNU Manifesto @unnumberedsec What's GNU? GNU's Not Unix! GNU, which stands for GNU's Not Unix, is the name for the complete Unix-compatible software system which I am writing so that I can give it away free to everyone who can use it. Several other volunteers are helping me. Contributions of time, money, programs, and equipment are greatly needed. So far we have an Emacs text editor with Lisp for writing editor commands, a source level debugger, a yacc-compatible parser generator, a linker, and around 35 utilities. A shell (command interpreter) is nearly completed. A new portable optimizing C compiler has compiled itself and may be released this year. An initial kernel exists, but many more features are needed to emulate Unix. When the kernel and compiler are finished, it will be possible to distribute a GNU system suitable for program development. We will use @TeX{} as our text formatter, but an nroff is being worked on. We will use the free, portable X window system as well. After this we will add a portable Common Lisp, an Empire game, a spreadsheet, and hundreds of other things, plus online documentation. We hope to supply, eventually, everything useful that normally comes with a Unix system, and more. GNU will be able to run Unix programs, but will not be identical to Unix. We will make all improvements that are convenient, based on our experience with other operating systems. In particular, we plan to have longer filenames, file version numbers, a crashproof file system, filename completion perhaps, terminal-independent display support, and perhaps eventually a Lisp-based window system through which several Lisp programs and ordinary Unix programs can share a screen. Both C and Lisp will be available as system programming languages. We will try to support UUCP, MIT Chaosnet, and Internet protocols for communication. GNU is aimed initially at machines in the 68000/16000 class with virtual memory, because they are the easiest machines to make it run on. The extra effort to make it run on smaller machines will be left to someone who wants to use it on them. To avoid horrible confusion, please pronounce the `G' in the word `GNU' when it is the name of this project. @page @unnumberedsec Why I Must Write GNU I consider that the golden rule requires that if I like a program I must share it with other people who like it. Software sellers want to divide the users and conquer them, making each user agree not to share with others. I refuse to break solidarity with other users in this way. I cannot in good conscience sign a nondisclosure agreement or a software license agreement. For years I worked within the Artificial Intelligence Lab to resist such tendencies and other inhospitalities, but eventually they had gone too far: I could not remain in an institution where such things are done for me against my will. So that I can continue to use computers without dishonor, I have decided to put together a sufficient body of free software so that I will be able to get along without any software that is not free. I have resigned from the AI lab to deny MIT any legal excuse to prevent me from giving GNU away. @unnumberedsec Why GNU Will Be Compatible With Unix Unix is not my ideal system, but it is not too bad. The essential features of Unix seem to be good ones, and I think I can fill in what Unix lacks without spoiling them. And a system compatible with Unix would be convenient for many other people to adopt. @unnumberedsec How GNU Will Be Available GNU is not in the public domain. Everyone will be permitted to modify and redistribute GNU, but no distributor will be allowed to restrict its further redistribution. That is to say, proprietary modifications will not be allowed. I want to make sure that all versions of GNU remain free. @unnumberedsec Why Many Other Programmers Want to Help I have found many other programmers who are excited about GNU and want to help. Many programmers are unhappy about the commercialization of system software. It may enable them to make more money, but it requires them to feel in conflict with other programmers in general rather than feel as comrades. The fundamental act of friendship among programmers is the sharing of programs; marketing arrangements now typically used essentially forbid programmers to treat others as friends. The purchaser of software must choose between friendship and obeying the law. Naturally, many decide that friendship is more important. But those who believe in law often do not feel at ease with either choice. They become cynical and think that programming is just a way of making money. By working on and using GNU rather than proprietary programs, we can be hospitable to everyone and obey the law. In addition, GNU serves as an example to inspire and a banner to rally others to join us in sharing. This can give us a feeling of harmony which is impossible if we use software that is not free. For about half the programmers I talk to, this is an important happiness that money cannot replace. @unnumberedsec How You Can Contribute I am asking computer manufacturers for donations of machines and money. I'm asking individuals for donations of programs and work. One consequence you can expect if you donate machines is that GNU will run on them at an early date. The machines should be complete, ready-to-use systems, approved for use in a residential area, and not in need of sophisticated cooling or power. I have found very many programmers eager to contribute part-time work for GNU. For most projects, such part-time distributed work would be very hard to coordinate; the independently-written parts would not work together. But for the particular task of replacing Unix, this problem is absent. A complete Unix system contains hundreds of utility programs, each of which is documented separately. Most interface specifications are fixed by Unix compatibility. If each contributor can write a compatible replacement for a single Unix utility, and make it work properly in place of the original on a Unix system, then these utilities will work right when put together. Even allowing for Murphy to create a few unexpected problems, assembling these components will be a feasible task. (The kernel will require closer communication and will be worked on by a small, tight group.) If I get donations of money, I may be able to hire a few people full or part time. The salary won't be high by programmers' standards, but I'm looking for people for whom building community spirit is as important as making money. I view this as a way of enabling dedicated people to devote their full energies to working on GNU by sparing them the need to make a living in another way. @unnumberedsec Why All Computer Users Will Benefit Once GNU is written, everyone will be able to obtain good system software free, just like air. This means much more than just saving everyone the price of a Unix license. It means that much wasteful duplication of system programming effort will be avoided. This effort can go instead into advancing the state of the art. Complete system sources will be available to everyone. As a result, a user who needs changes in the system will always be free to make them himself, or hire any available programmer or company to make them for him. Users will no longer be at the mercy of one programmer or company which owns the sources and is in sole position to make changes. Schools will be able to provide a much more educational environment by encouraging all students to study and improve the system code. Harvard's computer lab used to have the policy that no program could be installed on the system if its sources were not on public display, and upheld it by actually refusing to install certain programs. I was very much inspired by this. Finally, the overhead of considering who owns the system software and what one is or is not entitled to do with it will be lifted. Arrangements to make people pay for using a program, including licensing of copies, always incur a tremendous cost to society through the cumbersome mechanisms necessary to figure out how much (that is, which programs) a person must pay for. And only a police state can force everyone to obey them. Consider a space station where air must be manufactured at great cost: charging each breather per liter of air may be fair, but wearing the metered gas mask all day and all night is intolerable even if everyone can afford to pay the air bill. And the TV cameras everywhere to see if you ever take the mask off are outrageous. It's better to support the air plant with a head tax and chuck the masks. Copying all or parts of a program is as natural to a programmer as breathing, and as productive. It ought to be as free. @unnumberedsec Some Easily Rebutted Objections to GNU's Goals @quotation ``Nobody will use it if it is free, because that means they can't rely on any support.'' ``You have to charge for the program to pay for providing the support.'' @end quotation If people would rather pay for GNU plus service than get GNU free without service, a company to provide just service to people who have obtained GNU free ought to be profitable. We must distinguish between support in the form of real programming work and mere handholding. The former is something one cannot rely on from a software vendor. If your problem is not shared by enough people, the vendor will tell you to get lost. If your business needs to be able to rely on support, the only way is to have all the necessary sources and tools. Then you can hire any available person to fix your problem; you are not at the mercy of any individual. With Unix, the price of sources puts this out of consideration for most businesses. With GNU this will be easy. It is still possible for there to be no available competent person, but this problem cannot be blamed on distribution arrangements. GNU does not eliminate all the world's problems, only some of them. Meanwhile, the users who know nothing about computers need handholding: doing things for them which they could easily do themselves but don't know how. Such services could be provided by companies that sell just hand-holding and repair service. If it is true that users would rather spend money and get a product with service, they will also be willing to buy the service having got the product free. The service companies will compete in quality and price; users will not be tied to any particular one. Meanwhile, those of us who don't need the service should be able to use the program without paying for the service. @quotation ``You cannot reach many people without advertising, and you must charge for the program to support that.'' ``It's no use advertising a program people can get free.'' @end quotation There are various forms of free or very cheap publicity that can be used to inform numbers of computer users about something like GNU. But it may be true that one can reach more microcomputer users with advertising. If this is really so, a business which advertises the service of copying and mailing GNU for a fee ought to be successful enough to pay for its advertising and more. This way, only the users who benefit from the advertising pay for it. On the other hand, if many people get GNU from their friends, and such companies don't succeed, this will show that advertising was not really necessary to spread GNU. Why is it that free market advocates don't want to let the free market decide this? @page @quotation ``My company needs a proprietary operating system to get a competitive edge.'' @end quotation GNU will remove operating system software from the realm of competition. You will not be able to get an edge in this area, but neither will your competitors be able to get an edge over you. You and they will compete in other areas, while benefitting mutually in this one. If your business is selling an operating system, you will not like GNU, but that's tough on you. If your business is something else, GNU can save you from being pushed into the expensive business of selling operating systems. I would like to see GNU development supported by gifts from many manufacturers and users, reducing the cost to each. @quotation ``Don't programmers deserve a reward for their creativity?'' @end quotation If anything deserves a reward, it is social contribution. Creativity can be a social contribution, but only in so far as society is free to use the results. If programmers deserve to be rewarded for creating innovative programs, by the same token they deserve to be punished if they restrict the use of these programs. @quotation ``Shouldn't a programmer be able to ask for a reward for his creativity?'' @end quotation There is nothing wrong with wanting pay for work, or seeking to maximize one's income, as long as one does not use means that are destructive. But the means customary in the field of software today are based on destruction. Extracting money from users of a program by restricting their use of it is destructive because the restrictions reduce the amount and the ways that the program can be used. This reduces the amount of wealth that humanity derives from the program. When there is a deliberate choice to restrict, the harmful consequences are deliberate destruction. The reason a good citizen does not use such destructive means to become wealthier is that, if everyone did so, we would all become poorer from the mutual destructiveness. This is Kantian ethics; or, the Golden Rule. Since I do not like the consequences that result if everyone hoards information, I am required to consider it wrong for one to do so. Specifically, the desire to be rewarded for one's creativity does not justify depriving the world in general of all or part of that creativity. @quotation ``Won't programmers starve?'' @end quotation I could answer that nobody is forced to be a programmer. Most of us cannot manage to get any money for standing on the street and making faces. But we are not, as a result, condemned to spend our lives standing on the street making faces, and starving. We do something else. But that is the wrong answer because it accepts the questioner's implicit assumption: that without ownership of software, programmers cannot possibly be paid a cent. Supposedly it is all or nothing. The real reason programmers will not starve is that it will still be possible for them to get paid for programming; just not paid as much as now. Restricting copying is not the only basis for business in software. It is the most common basis because it brings in the most money. If it were prohibited, or rejected by the customer, software business would move to other bases of organization which are now used less often. There are always numerous ways to organize any kind of business. Probably programming will not be as lucrative on the new basis as it is now. But that is not an argument against the change. It is not considered an injustice that sales clerks make the salaries that they now do. If programmers made the same, that would not be an injustice either. (In practice they would still make considerably more than that.) @quotation ``Don't people have a right to control how their creativity is used?'' @end quotation ``Control over the use of one's ideas'' really constitutes control over other people's lives; and it is usually used to make their lives more difficult. People who have studied the issue of intellectual property rights carefully (such as lawyers) say that there is no intrinsic right to intellectual property. The kinds of supposed intellectual property rights that the government recognizes were created by specific acts of legislation for specific purposes. For example, the patent system was established to encourage inventors to disclose the details of their inventions. Its purpose was to help society rather than to help inventors. At the time, the life span of 17 years for a patent was short compared with the rate of advance of the state of the art. Since patents are an issue only among manufacturers, for whom the cost and effort of a license agreement are small compared with setting up production, the patents often do not do much harm. They do not obstruct most individuals who use patented products. The idea of copyright did not exist in ancient times, when authors frequently copied other authors at length in works of non-fiction. This practice was useful, and is the only way many authors' works have survived even in part. The copyright system was created expressly for the purpose of encouraging authorship. In the domain for which it was invented---books, which could be copied economically only on a printing press---it did little harm, and did not obstruct most of the individuals who read the books. All intellectual property rights are just licenses granted by society because it was thought, rightly or wrongly, that society as a whole would benefit by granting them. But in any particular situation, we have to ask: are we really better off granting such license? What kind of act are we licensing a person to do? The case of programs today is very different from that of books a hundred years ago. The fact that the easiest way to copy a program is from one neighbor to another, the fact that a program has both source code and object code which are distinct, and the fact that a program is used rather than read and enjoyed, combine to create a situation in which a person who enforces a copyright is harming society as a whole both materially and spiritually; in which a person should not do so regardless of whether the law enables him to. @quotation ``Competition makes things get done better.'' @end quotation The paradigm of competition is a race: by rewarding the winner, we encourage everyone to run faster. When capitalism really works this way, it does a good job; but its defenders are wrong in assuming it always works this way. If the runners forget why the reward is offered and become intent on winning, no matter how, they may find other strategies---such as, attacking other runners. If the runners get into a fist fight, they will all finish late. Proprietary and secret software is the moral equivalent of runners in a fist fight. Sad to say, the only referee we've got does not seem to object to fights; he just regulates them (``For every ten yards you run, you can fire one shot''). He really ought to break them up, and penalize runners for even trying to fight. @quotation ``Won't everyone stop programming without a monetary incentive?'' @end quotation Actually, many people will program with absolutely no monetary incentive. Programming has an irresistible fascination for some people, usually the people who are best at it. There is no shortage of professional musicians who keep at it even though they have no hope of making a living that way. But really this question, though commonly asked, is not appropriate to the situation. Pay for programmers will not disappear, only become less. So the right question is, will anyone program with a reduced monetary incentive? My experience shows that they will. For more than ten years, many of the world's best programmers worked at the Artificial Intelligence Lab for far less money than they could have had anywhere else. They got many kinds of non-monetary rewards: fame and appreciation, for example. And creativity is also fun, a reward in itself. @page Then most of them left when offered a chance to do the same interesting work for a lot of money. What the facts show is that people will program for reasons other than riches; but if given a chance to make a lot of money as well, they will come to expect and demand it. Low-paying organizations do poorly in competition with high-paying ones, but they do not have to do badly if the high-paying ones are banned. @quotation ``We need the programmers desperately. If they demand that we stop helping our neighbors, we have to obey.'' @end quotation You're never so desperate that you have to obey this sort of demand. Remember: millions for defense, but not a cent for tribute! @quotation ``Programmers need to make a living somehow.'' @end quotation In the short run, this is true. However, there are plenty of ways that programmers could make a living without selling the right to use a program. This way is customary now because it brings programmers and businessmen the most money, not because it is the only way to make a living. It is easy to find other ways if you want to find them. Here are a number of examples. A manufacturer introducing a new computer will pay for the porting of operating systems onto the new hardware. The sale of teaching, hand-holding, and maintenance services could also employ programmers. People with new ideas could distribute programs as freeware and ask for donations from satisfied users or sell hand-holding services. I have met people who are already working this way successfully. Users with related needs can form users' groups and pay dues. A group would contract with programming companies to write programs that the group's members would like to use. All sorts of development can be funded with a Software Tax: @quotation Suppose everyone who buys a computer has to pay a certain percent of the price as a software tax. The government gives this to an agency like the NSF to spend on software development. But if the computer buyer makes a donation to software development himself, he can take a credit against the tax. He can donate to the project of his own choosing---often, chosen because he hopes to use the results when @page it is done. He can take a credit for any amount of donation up to the total tax he had to pay. The total tax rate could be decided by a vote of the payers of the tax, weighted according to the amount they will be taxed on. The consequences: @itemize @bullet @item The computer-using community supports software development. @item This community decides what level of support is needed. @item Users who care which projects their share is spent on can choose this for themselves. @end itemize @end quotation In the long run, making programs free is a step toward the post-scarcity world, where nobody will have to work very hard just to make a living. People will be free to devote themselves to activities that are fun, such as programming, after spending the necessary ten hours a week on required tasks such as legislation, family counseling, robot repair, and asteroid prospecting. There will be no need to be able to make a living from programming. We have already greatly reduced the amount of work that the whole society must do for its actual productivity, but only a little of this has translated itself into leisure for workers because much nonproductive activity is required to accompany productive activity. The main causes of this are bureaucracy and isometric struggles against competition. Free software will greatly reduce these drains in the area of software production. We must do this, in order for technical gains in productivity to translate into less work for us. texi2html-1.82/test/xemacs_manual/startup.texi0000644000175000017500000001760311264347115023434 0ustar flichtenheldflichtenheld@node Startup Paths, Packages, Command Switches, Top @comment node-name, next, previous, up @section How XEmacs finds Directories and Files @cindex startup paths @cindex directories XEmacs deals with a multitude of files during operation. These files are spread over many directories, and XEmacs determines the location of most of these directories at startup and organizes them into various paths. (A @dfn{path}, @cindex path for the purposes of this section, is simply a list of directories which XEmacs searches successively in order to locate a file.) @subsection XEmacs Directory Hierarchies @cindex hierarchies @cindex directory hierarchies Many of the files XEmacs looks for are located within the XEmacs installation itself. However, there are several views of what actually constitutes the "XEmacs installation": XEmacs may be run from the compilation directory, it may be installed into arbitrary directories, spread over several directories unrelated to each other. Moreover, it may subsequently be moved to a different place. (This last case is not as uncommon as it sounds. Binary kits work this way.) Consequently, XEmacs has quite complex procedures in place to find directories, no matter where they may be hidden. XEmacs will always respect directory options passed to @code{configure}. However, if it cannot locate a directory at the configured place, it will initiate a search for the directory in any of a number of @dfn{hierarchies} rooted under a directory which XEmacs assumes contain parts of the XEmacs installation; it may locate several such hierarchies and search across them. (Typically, there are just one or two hierarchies: the hierarchy where XEmacs was or will be installed, and the one where it is being built.) Such a directory containing a hierarchy is called a @dfn{root}. @cindex root of a hierarchy Whenever this section refers to a directory using the shorthand @code{}, it means that XEmacs searches for it under all hierarchies XEmacs was able to scrounge up. In a running XEmacs, the hierarchy roots are stored in the variable @code{emacs-roots}. @vindex emacs-roots @subsection Package Hierarchies @cindex package hierarchies Many relevant directories and files XEmacs uses are actually not part of the core installation. They are part of any of the many packages usually installed on top of an XEmacs installation. (@xref{Packages}.) Hence, they play a prominent role in the various paths XEmacs sets up. XEmacs locates packages in any of a number of package hierarchies. Package hierarchies fall into three groups: @dfn{early}, @dfn{late}, and @dfn{last}, @cindex early package hierarchies @cindex late package hierarchies @cindex last package hierarchies according to the relative location at which they show up in the various XEmacs paths. Early package hierarchies are at the very front, late ones somewhere in the middle, and last hierarchies are (you guessed it) last. By default, XEmacs expects an early package hierarchy in the subdirectory @file{.xemacs/xemacs-packages} of the user's home directory. Moreover, XEmacs expects late hierarchies in the subdirectories @file{site-packages}, @file{mule-packages}, and @file{xemacs-packages} (in that order) of the @file{/lib/xemacs} subdirectory of one of the installation hierarchies. (If you run in-place, these are direct subdirectories of the build directory.) Furthermore, XEmacs will also search these subdirectories in the @file{/lib/xemacs-} subdirectory and prefer directories found there. By default, XEmacs does not have a pre-configured last package hierarchy. Last hierarchies are primarily for using package hierarchies of outdated versions of XEmacs as a fallback option. For example, it is possible to run XEmacs 21 with the 20.4 package hierarchy as a last hierarchy. It is possible to specify at configure-time the location of the various package hierarchies with the @code{--package-path} option to configure. @cindex package path The early, late, and last components of the package path are separated by double instead of single colons. If all three components are present, they locate the early, late, and last package hierarchies respectively. If two components are present, they locate the early and late hierarchies. If only one component is present, it locates the late hierarchy. At run time, the package path may also be specified via the @code{EMACSPACKAGEPATH} environment variable. An XEmacs package is laid out just like a normal installed XEmacs lisp directory. It may have @file{lisp}, @file{etc}, @file{info}, and @file{lib-src} subdirectories. XEmacs adds these at appropriate places within the various system-wide paths. There may be any number of package hierarchy directories. @subsection Directories and Paths @cindex paths Here is a list of the various directories and paths XEmacs tries to locate during startup. XEmacs distinguishes between directories and paths specific to @dfn{version}, @dfn{site}, and @dfn{architecture} when looking for them. @table @code @item version-specific @cindex version-specific directories directories are specific to the version of XEmacs they belong to and typically reside under @file{/lib/xemacs-}. @item site-specific @cindex site-specific directories directories are independent of the version of XEmacs they belong to and typically reside under @file{/lib/xemacs} @item architecture-specific @cindex architecture-specific directories directories are specific both to the version of XEmacs and the architecture it runs on and typically reside under @file{/lib/xemacs-/}. @end table During installation, all of these directories may also reside directly under @file{}, because that is where they are in the XEmacs tarball. If XEmacs runs with the @code{-debug-paths} option (@pxref{Command Switches}), it will print the values of these variables, hopefully aiding in debugging any problems which come up. @table @code @item lisp-directory @vindex lisp-directory Contains the version-specific location of the Lisp files that come with the core distribution of XEmacs. XEmacs will search it recursively to a depth of 1 when setting up @code{load-path}. @item load-path @vindex load-path Is where XEmacs searches for XEmacs Lisp files with commands like @code{load-library}. @findex load-library It contains the package lisp directories (see further down) and the version-specific core Lisp directories. If the environment variable @code{EMACSLOADPATH} is set at startup, its directories are prepended to @code{load-path}. @vindex EMACSLOADPATH @item Info-directory-list @vindex Info-directory-list Contains the location of info files. (See @ref{(info)}.) It contains the package info directories and the version-specific core documentation. Moreover, XEmacs will add @file{/usr/info}, @file{/usr/local/info} as well as the directories of the environment variable @code{INFOPATH} @vindex INFOPATH to @code{Info-directory-list}. @item exec-directory @vindex exec-directory Is the directory of architecture-dependent files that come with XEmacs, especially executable programs intended for XEmacs to invoke. @item exec-path @vindex exec-path Is the path for executables which XEmacs may want to start. It contains the package executable paths as well as @code{exec-directory}, and the directories of the environment variables @code{PATH} @vindex PATH and @code{EMACSPATH}. @vindex EMACSPATH @item doc-directory @vindex doc-directory Is the directory containing the architecture-specific @file{DOC} file that contains documentation for XEmacs' commands. @item data-directory @vindex data-directory Is the version-specific directory that contains core data files XEmacs uses. It may be initialized from the @code{EMACSDATA} @vindex EMACSDATA environment variable. @item data-directory-list @vindex data-directory-list Is the path where XEmacs looks for data files. It contains package data directories as well as @code{data-directory}. @end table texi2html-1.82/test/xemacs_manual/undo.texi0000644000175000017500000000575211264347115022701 0ustar flichtenheldflichtenheld @node Undo, Minibuffer, Basic, Top @chapter Undoing Changes @cindex undo @cindex mistakes, correcting Emacs allows you to undo all changes you make to the text of a buffer, up to a certain amount of change (8000 characters). Each buffer records changes individually, and the undo command always applies to the current buffer. Usually each editing command makes a separate entry in the undo records, but some commands such as @code{query-replace} make many entries, and very simple commands such as self-inserting characters are often grouped to make undoing less tedious. @table @kbd @item C-x u Undo one batch of changes (usually, one command's worth) (@code{undo}). @item C-_ The same. @end table @kindex C-x u @kindex C-_ @findex undo The command @kbd{C-x u} or @kbd{C-_} allows you to undo changes. The first time you give this command, it undoes the last change. Point moves to the text affected by the undo, so you can see what was undone. Consecutive repetitions of the @kbd{C-_} or @kbd{C-x u} commands undo earlier and earlier changes, back to the limit of what has been recorded. If all recorded changes have already been undone, the undo command prints an error message and does nothing. Any command other than an undo command breaks the sequence of undo commands. Starting at this moment, the previous undo commands are considered ordinary changes that can themselves be undone. Thus, you can redo changes you have undone by typing @kbd{C-f} or any other command that have no important effect, and then using more undo commands. If you notice that a buffer has been modified accidentally, the easiest way to recover is to type @kbd{C-_} repeatedly until the stars disappear from the front of the mode line. When that happens, all the modifications you made have been canceled. If you do not remember whether you changed the buffer deliberately, type @kbd{C-_} once. When you see Emacs undo the last change you made, you probably remember why you made it. If the change was an accident, leave it undone. If it was deliberate, redo the change as described in the preceding paragraph. Whenever an undo command makes the stars disappear from the mode line, the buffer contents is the same as it was when the file was last read in or saved. Not all buffers record undo information. Buffers whose names start with spaces don't; these buffers are used internally by Emacs and its extensions to hold text that users don't normally look at or edit. Minibuffers, help buffers, and documentation buffers also don't record undo information. Emacs can remember at most 8000 or so characters of deleted or modified text in any one buffer for reinsertion by the undo command. There is also a limit on the number of individual insert, delete, or change actions that Emacs can remember. There are two keys to run the @code{undo} command, @kbd{C-x u} and @kbd{C-_}, because on some keyboards, it is not obvious how to type @kbd{C-_}. @kbd{C-x u} is an alternative you can type in the same fashion on any terminal. texi2html-1.82/test/xemacs_manual/indent.texi0000644000175000017500000001773311264347115023217 0ustar flichtenheldflichtenheld @node Indentation, Text, Major Modes, Top @chapter Indentation @cindex indentation @c WideCommands @table @kbd @item @key{TAB} Indent current line ``appropriately'' in a mode-dependent fashion. @item @key{LFD} Perform @key{RET} followed by @key{TAB} (@code{newline-and-indent}). @item M-^ Merge two lines (@code{delete-indentation}). This would cancel out the effect of @key{LFD}. @item C-M-o Split line at point; text on the line after point becomes a new line indented to the same column that it now starts in (@code{split-line}). @item M-m Move (forward or back) to the first non-blank character on the current line (@code{back-to-indentation}). @item C-M-\ Indent several lines to same column (@code{indent-region}). @item C-x @key{TAB} Shift block of lines rigidly right or left (@code{indent-rigidly}). @item M-i Indent from point to the next prespecified tab stop column (@code{tab-to-tab-stop}). @item M-x indent-relative Indent from point to under an indentation point in the previous line. @end table @kindex TAB @cindex indentation Most programming languages have some indentation convention. For Lisp code, lines are indented according to their nesting in parentheses. The same general idea is used for C code, though details differ. Use the @key{TAB} command to indent a line whatever the language. Each major mode defines this command to perform indentation appropriate for the particular language. In Lisp mode, @key{TAB} aligns a line according to its depth in parentheses. No matter where in the line you are when you type @key{TAB}, it aligns the line as a whole. In C mode, @key{TAB} implements a subtle and sophisticated indentation style that knows about many aspects of C syntax. @kindex TAB In Text mode, @key{TAB} runs the command @code{tab-to-tab-stop}, which indents to the next tab stop column. You can set the tab stops with @kbd{M-x edit-tab-stops}. @menu * Indentation Commands:: Various commands and techniques for indentation. * Tab Stops:: You can set arbitrary "tab stops" and then indent to the next tab stop when you want to. * Just Spaces:: You can request indentation using just spaces. @end menu @node Indentation Commands, Tab Stops, Indentation, Indentation @section Indentation Commands and Techniques @c ??? Explain what Emacs has instead of space-indent-flag. If you just want to insert a tab character in the buffer, you can type @kbd{C-q @key{TAB}}. @kindex M-m @findex back-to-indentation To move over the indentation on a line, type @kbd{Meta-m} (@code{back-to-indentation}). This command, given anywhere on a line, positions point at the first non-blank character on the line. To insert an indented line before the current line, type @kbd{C-a C-o @key{TAB}}. To make an indented line after the current line, use @kbd{C-e @key{LFD}}. @kindex C-M-o @findex split-line @kbd{C-M-o} (@code{split-line}) moves the text from point to the end of the line vertically down, so that the current line becomes two lines. @kbd{C-M-o} first moves point forward over any spaces and tabs. Then it inserts after point a newline and enough indentation to reach the same column point is on. Point remains before the inserted newline; in this regard, @kbd{C-M-o} resembles @kbd{C-o}. @kindex M-\ @kindex M-^ @findex delete-horizontal-space @findex delete-indentation To join two lines cleanly, use the @kbd{Meta-^} (@code{delete-indentation}) command to delete the indentation at the front of the current line, and the line boundary as well. Empty spaces are replaced by a single space, or by no space if at the beginning of a line, before a close parenthesis, or after an open parenthesis. To delete just the indentation of a line, go to the beginning of the line and use @kbd{Meta-\} (@code{delete-horizontal-space}), which deletes all spaces and tabs around the cursor. @kindex C-M-\ @kindex C-x TAB @findex indent-region @findex indent-rigidly There are also commands for changing the indentation of several lines at once. @kbd{Control-Meta-\} (@code{indent-region}) gives each line which begins in the region the ``usual'' indentation by invoking @key{TAB} at the beginning of the line. A numeric argument specifies the column to indent to. Each line is shifted left or right so that its first non-blank character appears in that column. @kbd{C-x @key{TAB}} (@code{indent-rigidly}) moves all the lines in the region right by its argument (left, for negative arguments). The whole group of lines moves rigidly sideways, which is how the command gets its name.@refill @findex indent-relative @kbd{M-x indent-relative} indents at point based on the previous line (actually, the last non-empty line.) It inserts whitespace at point, moving point, until it is underneath an indentation point in the previous line. An indentation point is the end of a sequence of whitespace or the end of the line. If point is farther right than any indentation point in the previous line, the whitespace before point is deleted and the first indentation point then applicable is used. If no indentation point is applicable even then, @code{tab-to-tab-stop} is run (see next section). @code{indent-relative} is the definition of @key{TAB} in Indented Text mode. @xref{Text}. @node Tab Stops, Just Spaces, Indentation Commands, Indentation @section Tab Stops @kindex M-i @findex tab-to-tab-stop For typing in tables, you can use Text mode's definition of @key{TAB}, @code{tab-to-tab-stop}. This command inserts indentation before point, enough to reach the next tab stop column. Even if you are not in Text mode, this function is associated with @kbd{M-i} anyway. @findex edit-tab-stops @findex edit-tab-stops-note-changes @kindex C-c C-c (Edit Tab Stops) @vindex tab-stop-list You can arbitrarily set the tab stops used by @kbd{M-i}. They are stored as a list of column-numbers in increasing order in the variable @code{tab-stop-list}. The convenient way to set the tab stops is using @kbd{M-x edit-tab-stops}, which creates and selects a buffer containing a description of the tab stop settings. You can edit this buffer to specify different tab stops, and then type @kbd{C-c C-c} to make those new tab stops take effect. In the tab stop buffer, @kbd{C-c C-c} runs the function @code{edit-tab-stops-note-changes} rather than the default @code{save-buffer}. @code{edit-tab-stops} records which buffer was current when you invoked it, and stores the tab stops in that buffer. Normally all buffers share the same tab stops and changing them in one buffer affects all. If you make @code{tab-stop-list} local in one buffer @code{edit-tab-stops} in that buffer edits only the local settings. Below is the text representing ordinary tab stops every eight columns: @example : : : : : : 0 1 2 3 4 0123456789012345678901234567890123456789012345678 To install changes, type C-c C-c @end example The first line contains a colon at each tab stop. The remaining lines help you see where the colons are and tell you what to do. Note that the tab stops that control @code{tab-to-tab-stop} have nothing to do with displaying tab characters in the buffer. @xref{Display Vars}, for more information on that. @node Just Spaces,, Tab Stops, Indentation @section Tabs vs. Spaces @vindex indent-tabs-mode Emacs normally uses both tabs and spaces to indent lines. If you prefer, all indentation can be made from spaces only. To request this, set @code{indent-tabs-mode} to @code{nil}. This is a per-buffer variable; altering the variable affects only the current buffer, but there is a default value which you can change as well. @xref{Locals}. @findex tabify @findex untabify There are also commands to convert tabs to spaces or vice versa, always preserving the columns of all non-blank text. @kbd{M-x tabify} scans the region for sequences of spaces, and converts sequences of at least three spaces to tabs if that is possible without changing indentation. @kbd{M-x untabify} changes all tabs in the region to corresponding numbers of spaces. texi2html-1.82/test/xemacs_manual/trouble.texi0000644000175000017500000004616011264347115023406 0ustar flichtenheldflichtenheld @iftex @chapter Correcting Mistakes (Yours or Emacs's) If you type an Emacs command you did not intend, the results are often mysterious. This chapter discusses how you can undo your mistake or recover from a mysterious situation. Emacs bugs and system crashes are also considered. @end iftex @node Quitting, Lossage, Customization, Top @section Quitting and Aborting @cindex quitting @table @kbd @item C-g Quit. Cancel running or partially typed command. @item C-] Abort innermost recursive editing level and cancel the command which invoked it (@code{abort-recursive-edit}). @item M-x top-level Abort all recursive editing levels that are currently executing. @item C-x u Cancel an already-executed command, usually (@code{undo}). @end table There are two ways of cancelling commands which are not finished executing: @dfn{quitting} with @kbd{C-g}, and @dfn{aborting} with @kbd{C-]} or @kbd{M-x top-level}. Quitting is cancelling a partially typed command or one which is already running. Aborting is getting out of a recursive editing level and cancelling the command that invoked the recursive edit. @cindex quitting @kindex C-g Quitting with @kbd{C-g} is used for getting rid of a partially typed command or a numeric argument that you don't want. It also stops a running command in the middle in a relatively safe way, so you can use it if you accidentally start executing a command that takes a long time. In particular, it is safe to quit out of killing; either your text will @var{all} still be there, or it will @var{all} be in the kill ring (or maybe both). Quitting an incremental search does special things documented under searching; in general, it may take two successive @kbd{C-g} characters to get out of a search. @kbd{C-g} works by setting the variable @code{quit-flag} to @code{t} the instant @kbd{C-g} is typed; Emacs Lisp checks this variable frequently and quits if it is non-@code{nil}. @kbd{C-g} is only actually executed as a command if it is typed while Emacs is waiting for input. If you quit twice in a row before the first @kbd{C-g} is recognized, you activate the ``emergency escape'' feature and return to the shell. @xref{Emergency Escape}. @cindex recursive editing level @cindex editing level, recursive @cindex aborting @findex abort-recursive-edit @kindex C-] You can use @kbd{C-]} (@code{abort-recursive-edit}) to get out of a recursive editing level and cancel the command which invoked it. Quitting with @kbd{C-g} does not do this, and could not do this because it is used to cancel a partially typed command @i{within} the recursive editing level. Both operations are useful. For example, if you are in the Emacs debugger (@pxref{Lisp Debug}) and have typed @kbd{C-u 8} to enter a numeric argument, you can cancel that argument with @kbd{C-g} and remain in the debugger. @findex top-level The command @kbd{M-x top-level} is equivalent to ``enough'' @kbd{C-]} commands to get you out of all the levels of recursive edits that you are in. @kbd{C-]} only gets you out one level at a time, but @kbd{M-x top-level} goes out all levels at once. Both @kbd{C-]} and @kbd{M-x top-level} are like all other commands and unlike @kbd{C-g} in that they are effective only when Emacs is ready for a command. @kbd{C-]} is an ordinary key and has its meaning only because of its binding in the keymap. @xref{Recursive Edit}. @kbd{C-x u} (@code{undo}) is not strictly speaking a way of cancelling a command, but you can think of it as cancelling a command already finished executing. @xref{Undo}. @node Lossage, Bugs, Quitting, Top @section Dealing With Emacs Trouble This section describes various conditions in which Emacs fails to work, and how to recognize them and correct them. @menu * Stuck Recursive:: `[...]' in mode line around the parentheses. * Screen Garbled:: Garbage on the screen. * Text Garbled:: Garbage in the text. * Unasked-for Search:: Spontaneous entry to incremental search. * Emergency Escape:: Emergency escape--- What to do if Emacs stops responding. * Total Frustration:: When you are at your wits' end. @end menu @node Stuck Recursive, Screen Garbled, Lossage, Lossage @subsection Recursive Editing Levels Recursive editing levels are important and useful features of Emacs, but they can seem like malfunctions to the user who does not understand them. If the mode line has square brackets @samp{[@dots{}]} around the parentheses that contain the names of the major and minor modes, you have entered a recursive editing level. If you did not do this on purpose, or if you don't understand what that means, you should just get out of the recursive editing level. To do so, type @kbd{M-x top-level}. This is called getting back to top level. @xref{Recursive Edit}. @node Screen Garbled, Text Garbled, Stuck Recursive, Lossage @subsection Garbage on the Screen If the data on the screen looks wrong, the first thing to do is see whether the text is actually wrong. Type @kbd{C-l}, to redisplay the entire screen. If the text appears correct after this, the problem was entirely in the previous screen update. Display updating problems often result from an incorrect termcap entry for the terminal you are using. The file @file{etc/TERMS} in the Emacs distribution gives the fixes for known problems of this sort. @file{INSTALL} contains general advice for these problems in one of its sections. Very likely there is simply insufficient padding for certain display operations. To investigate the possibility that you have this sort of problem, try Emacs on another terminal made by a different manufacturer. If problems happen frequently on one kind of terminal but not another kind, the real problem is likely to be a bad termcap entry, though it could also be due to a bug in Emacs that appears for terminals that have or lack specific features. @node Text Garbled, Unasked-for Search, Screen Garbled, Lossage @subsection Garbage in the Text If @kbd{C-l} shows that the text is wrong, try undoing the changes to it using @kbd{C-x u} until it gets back to a state you consider correct. Also try @kbd{C-h l} to find out what command you typed to produce the observed results. If a large portion of text appears to be missing at the beginning or end of the buffer, check for the word @samp{Narrow} in the mode line. If it appears, the text is still present, but marked off-limits. To make it visible again, type @kbd{C-x n w}. @xref{Narrowing}. @node Unasked-for Search, Emergency Escape, Text Garbled, Lossage @subsection Spontaneous Entry to Incremental Search If Emacs spontaneously displays @samp{I-search:} at the bottom of the screen, it means that the terminal is sending @kbd{C-s} and @kbd{C-q} according to the poorly designed xon/xoff ``flow control'' protocol. You should try to prevent this by putting the terminal in a mode where it will not use flow control, or by giving it enough padding that it will never send a @kbd{C-s}. If that cannot be done, you must tell Emacs to expect flow control to be used, until you can get a properly designed terminal. Information on how to do these things can be found in the file @file{INSTALL} in the Emacs distribution. @node Emergency Escape, Total Frustration, Unasked-for Search, Lossage @subsection Emergency Escape Because at times there have been bugs causing Emacs to loop without checking @code{quit-flag}, a special feature causes Emacs to be suspended immediately if you type a second @kbd{C-g} while the flag is already set, so you can always get out of XEmacs. Normally Emacs recognizes and clears @code{quit-flag} (and quits!) quickly enough to prevent this from happening. When you resume Emacs after a suspension caused by multiple @kbd{C-g}, it asks two questions before going back to what it had been doing: @example Auto-save? (y or n) Abort (and dump core)? (y or n) @end example @noindent Answer each one with @kbd{y} or @kbd{n} followed by @key{RET}. Saying @kbd{y} to @samp{Auto-save?} causes immediate auto-saving of all modified buffers in which auto-saving is enabled. Saying @kbd{y} to @samp{Abort (and dump core)?} causes an illegal instruction to be executed, dumping core. This is to enable a wizard to figure out why Emacs was failing to quit in the first place. Execution does not continue after a core dump. If you answer @kbd{n}, execution does continue. With luck, Emacs will ultimately check @code{quit-flag} and quit normally. If not, and you type another @kbd{C-g}, it is suspended again. If Emacs is not really hung, but is just being slow, you may invoke the double @kbd{C-g} feature without really meaning to. In that case, simply resume and answer @kbd{n} to both questions, and you will arrive at your former state. Presumably the quit you requested will happen soon. The double-@kbd{C-g} feature may be turned off when Emacs is running under a window system, since the window system always enables you to kill Emacs or to create another window and run another program. @node Total Frustration,, Emergency Escape, Lossage @subsection Help for Total Frustration @cindex Eliza @cindex doctor If using Emacs (or something else) becomes terribly frustrating and none of the techniques described above solve the problem, Emacs can still help you. First, if the Emacs you are using is not responding to commands, type @kbd{C-g C-g} to get out of it and then start a new one. @findex doctor Second, type @kbd{M-x doctor @key{RET}}. The doctor will make you feel better. Each time you say something to the doctor, you must end it by typing @key{RET} @key{RET}. This lets the doctor know you are finished. @node Bugs,, Lossage, Top @section Reporting Bugs @cindex bugs Sometimes you will encounter a bug in Emacs. Although we cannot promise we can or will fix the bug, and we might not even agree that it is a bug, we want to hear about bugs you encounter in case we do want to fix them. To make it possible for us to fix a bug, you must report it. In order to do so effectively, you must know when and how to do it. @subsection When Is There a Bug If Emacs executes an illegal instruction, or dies with an operating system error message that indicates a problem in the program (as opposed to something like ``disk full''), then it is certainly a bug. If Emacs updates the display in a way that does not correspond to what is in the buffer, then it is certainly a bug. If a command seems to do the wrong thing but the problem corrects itself if you type @kbd{C-l}, it is a case of incorrect display updating. Taking forever to complete a command can be a bug, but you must make certain that it was really Emacs's fault. Some commands simply take a long time. Type @kbd{C-g} and then @kbd{C-h l} to see whether the input Emacs received was what you intended to type; if the input was such that you @var{know} it should have been processed quickly, report a bug. If you don't know whether the command should take a long time, find out by looking in the manual or by asking for assistance. If a command you are familiar with causes an Emacs error message in a case where its usual definition ought to be reasonable, it is probably a bug. If a command does the wrong thing, that is a bug. But be sure you know for certain what it ought to have done. If you aren't familiar with the command, or don't know for certain how the command is supposed to work, then it might actually be working right. Rather than jumping to conclusions, show the problem to someone who knows for certain. Finally, a command's intended definition may not be best for editing with. This is a very important sort of problem, but it is also a matter of judgment. Also, it is easy to come to such a conclusion out of ignorance of some of the existing features. It is probably best not to complain about such a problem until you have checked the documentation in the usual ways, feel confident that you understand it, and know for certain that what you want is not available. If you are not sure what the command is supposed to do after a careful reading of the manual, check the index and glossary for any terms that may be unclear. If you still do not understand, this indicates a bug in the manual. The manual's job is to make everything clear. It is just as important to report documentation bugs as program bugs. If the online documentation string of a function or variable disagrees with the manual, one of them must be wrong, so report the bug. @subsection How to Report a Bug @findex emacs-version When you decide that there is a bug, it is important to report it and to report it in a way which is useful. What is most useful is an exact description of what commands you type, starting with the shell command to run Emacs, until the problem happens. Always include the version number of Emacs that you are using; type @kbd{M-x emacs-version} to print this. The most important principle in reporting a bug is to report @var{facts}, not hypotheses or categorizations. It is always easier to report the facts, but people seem to prefer to strain to posit explanations and report them instead. If the explanations are based on guesses about how Emacs is implemented, they will be useless; we will have to try to figure out what the facts must have been to lead to such speculations. Sometimes this is impossible. But in any case, it is unnecessary work for us. For example, suppose that you type @kbd{C-x C-f /glorp/baz.ugh @key{RET}}, visiting a file which (you know) happens to be rather large, and Emacs prints out @samp{I feel pretty today}. The best way to report the bug is with a sentence like the preceding one, because it gives all the facts and nothing but the facts. Do not assume that the problem is due to the size of the file and say, ``When I visit a large file, Emacs prints out @samp{I feel pretty today}.'' This is what we mean by ``guessing explanations''. The problem is just as likely to be due to the fact that there is a @samp{z} in the file name. If this is so, then when we got your report, we would try out the problem with some ``large file'', probably with no @samp{z} in its name, and not find anything wrong. There is no way in the world that we could guess that we should try visiting a file with a @samp{z} in its name. Alternatively, the problem might be due to the fact that the file starts with exactly 25 spaces. For this reason, you should make sure that you inform us of the exact contents of any file that is needed to reproduce the bug. What if the problem only occurs when you have typed the @kbd{C-x a l} command previously? This is why we ask you to give the exact sequence of characters you typed since starting to use Emacs. You should not even say ``visit a file'' instead of @kbd{C-x C-f} unless you @i{know} that it makes no difference which visiting command is used. Similarly, rather than saying ``if I have three characters on the line,'' say ``after I type @kbd{@key{RET} A B C @key{RET} C-p},'' if that is the way you entered the text.@refill If you are not in Fundamental mode when the problem occurs, you should say what mode you are in. If the manifestation of the bug is an Emacs error message, it is important to report not just the text of the error message but a backtrace showing how the Lisp program in Emacs arrived at the error. To make the backtrace, you must execute the Lisp expression @code{(setq @w{debug-on-error t})} before the error happens (that is to say, you must execute that expression and then make the bug happen). This causes the Lisp debugger to run (@pxref{Lisp Debug}). The debugger's backtrace can be copied as text into the bug report. This use of the debugger is possible only if you know how to make the bug happen again. Do note the error message the first time the bug happens, so if you can't make it happen again, you can report at least that. Check whether any programs you have loaded into the Lisp world, including your init file, set any variables that may affect the functioning of Emacs. @xref{Init File}. Also, see whether the problem happens in a freshly started Emacs without loading your init file (start Emacs with the @code{-q} switch to prevent loading the init file). If the problem does @var{not} occur then, it is essential that we know the contents of any programs that you must load into the Lisp world in order to cause the problem to occur. If the problem does depend on an init file or other Lisp programs that are not part of the standard Emacs system, then you should make sure it is not a bug in those programs by complaining to their maintainers first. After they verify that they are using Emacs in a way that is supposed to work, they should report the bug. If you can tell us a way to cause the problem without visiting any files, please do so. This makes it much easier to debug. If you do need files, make sure you arrange for us to see their exact contents. For example, it can often matter whether there are spaces at the ends of lines, or a newline after the last line in the buffer (nothing ought to care whether the last line is terminated, but tell that to the bugs). @findex open-dribble-file @cindex dribble file The easy way to record the input to Emacs precisely is to write a dribble file; execute the Lisp expression: @example (open-dribble-file "~/dribble") @end example @noindent using @kbd{Meta-@key{ESC}} or from the @samp{*scratch*} buffer just after starting Emacs. From then on, all Emacs input will be written in the specified dribble file until the Emacs process is killed. @findex open-termscript @cindex termscript file For possible display bugs, it is important to report the terminal type (the value of environment variable @code{TERM}), the complete termcap entry for the terminal from @file{/etc/termcap} (since that file is not identical on all machines), and the output that Emacs actually sent to the terminal. The way to collect this output is to execute the Lisp expression: @example (open-termscript "~/termscript") @end example @noindent using @kbd{Meta-@key{ESC}} or from the @samp{*scratch*} buffer just after starting Emacs. From then on, all output from Emacs to the terminal will be written in the specified termscript file as well, until the Emacs process is killed. If the problem happens when Emacs starts up, put this expression into your init file so that the termscript file will be open when Emacs displays the screen for the first time. @xref{Init File}. Be warned: it is often difficult, and sometimes impossible, to fix a terminal-dependent bug without access to a terminal of the type that stimulates the bug.@refill The newsgroup @samp{comp.emacs.xemacs} may be used for bug reports, other discussions and requests for assistance. If you don't have access to this newgroup, you can subscribe to the mailing list version: the newsgroup is bidirectionally gatewayed into the mailing list @samp{xemacs@@xemacs.org}. To be added or removed from this mailing list, send mail to @samp{xemacs-request@@xemacs.org}. Do not send requests for addition to the mailing list itself. The mailing lists and newsgroups are archived on our anonymous FTP server, @samp{ftp.xemacs.org}, and at various other archive sites around the net. You should also check the @samp{FAQ} in @samp{/pub/xemacs} on our anonymous FTP server. It provides some introductory information and help for initial configuration problems. texi2html-1.82/test/xemacs_manual/frame.texi0000644000175000017500000006564311264347115023033 0ustar flichtenheldflichtenheld@node Frame, Keystrokes, Concept Index, Top @comment node-name, next, previous, up @chapter The XEmacs Frame @cindex frame @cindex window @cindex buffer @table @asis @item Frame In many environments, such as a tty terminal, an XEmacs frame literally takes up the whole screen. If you are running XEmacs in a multi-window system like the X Window System, the XEmacs frame takes up one X window. @xref{XEmacs under X}, for more information.@refill @item Window No matter what environment you are running in, XEmacs allows you to look at several buffers at the same time by having several windows be part of the frame. Often, the whole frame is taken up by just one window, but you can split the frame into two or more subwindows. If you are running XEmacs under the X window system, that means you can have several @dfn{XEmacs windows} inside the X window that contains the XEmacs frame. You can even have multiple frames in different X windows, each with their own set of subwindows. @refill @end table Each XEmacs frame displays a variety of information: @itemize @bullet @item The biggest area usually displays the text you are editing. It may consist of one window or of two or more windows if you need to look at two buffers a the same time. @item Below each text window's last line is a @dfn{mode line} (@pxref{Mode Line}), which describes what is going on in that window. The mode line is in inverse video if the terminal supports that. If there are several XEmacs windows in one frame, each window has its own mode line. @item At the bottom of each XEmacs frame is the @dfn{echo area} or @dfn{minibuffer window}(@pxref{Echo Area}). It is used by XEmacs to exchange information with the user. There is only one echo area per XEmacs frame. @item If you are running XEmacs under a graphical windowing system, a menu bar at the top of the frame makes shortcuts to several of the commands available (@pxref{Pull-down Menus}). @item Under a graphical windowing system, a toolbar at the top of the frame, just under the menu bar if it exists, provides ``one-touch'' shortcuts to several commands. (Not yet documented.) @item Under a graphical windowing system, a gutter at the top (under the toolbar) and/or bottom of the frame provides advanced GUI facilities like tab controls for rapid switching among related windows and progress bars for time-consuming operations like downloads across the Internet. Gutters are an experimental feature introduced in XEmacs version 21.2. (Not yet documented.) @end itemize You can subdivide the XEmacs frame into multiple text windows, and use each window for a different file (@pxref{Windows}). Multiple XEmacs windows are tiled vertically on the XEmacs frame. The upper XEmacs window is separated from the lower window by its mode line. When there are multiple, tiled XEmacs windows on a single XEmacs frame, the XEmacs window receiving input from the keyboard has the @dfn{keyboard focus} and is called the @dfn{selected window}. The selected window contains the cursor, which indicates the insertion point. If you are working in an environment that permits multiple XEmacs frames, and you move the focus from one XEmacs frame into another, the selected window is the one that was last selected in that frame. The same text can be displayed simultaneously in several XEmacs windows, which can be in different XEmacs frames. If you alter the text in an XEmacs buffer by editing it in one XEmacs window, the changes are visible in all XEmacs windows containing that buffer. @menu * Point:: The place in the text where editing commands operate. * Echo Area:: Short messages appear at the bottom of the frame. * Mode Line:: Interpreting the mode line. * GUI Components:: Menubar, toolbars, gutters. * XEmacs under X:: Some information on using XEmacs under the X Window System. * XEmacs under MS Windows:: Some information on using XEmacs under Microsoft Windows. @end menu @node Point, Echo Area, Frame, Frame @comment node-name, next, previous, up @section Point @cindex point @cindex cursor When XEmacs is running, the cursor shows the location at which editing commands will take effect. This location is called @dfn{point}. You can use keystrokes or the mouse cursor to move point through the text and edit the text at different places. While the cursor appears to point @var{at} a character, you should think of point as @var{between} two characters: it points @var{before} the character on which the cursor appears. The exception is at the end of the line, where the cursor appears after the last character of the line. Where the display is capable, the cursor at the end of the line will appear differently from a cursor over whitespace at the end of the line. (In an X Windows frame, the end-of-line cursor is half the width of a within-line cursor.) Sometimes people speak of ``the cursor'' when they mean ``point,'' or speak of commands that move point as ``cursor motion'' commands. Each XEmacs frame has only one cursor. When output is in progress, the cursor must appear where the typing is being done. This does not mean that point is moving. It is only that XEmacs has no way to show you the location of point except when the terminal is idle. If you are editing several files in XEmacs, each file has its own point location. A file that is not being displayed remembers where point is. Point becomes visible at the correct location when you look at the file again. When there are multiple text windows, each window has its own point location. The cursor shows the location of point in the selected window. The visible cursor also shows you which window is selected. If the same buffer appears in more than one window, point can be moved in each window independently. The term `point' comes from the character @samp{.}, which was the command in TECO (the language in which the original Emacs was written) for accessing the value now called `point'. @node Echo Area, Mode Line, Point, Frame @section The Echo Area @cindex echo area The line at the bottom of the frame (below the mode line) is the @dfn{echo area}. XEmacs uses this area to communicate with the user: @itemize @bullet @item @dfn{Echoing} means printing out the characters that the user types. XEmacs never echoes single-character commands. Multi-character commands are echoed only if you pause while typing them: As soon as you pause for more than one second in the middle of a command, all the characters of the command so far are echoed. This is intended to @dfn{prompt} you for the rest of the command. Once echoing has started, the rest of the command is echoed immediately as you type it. This behavior is designed to give confident users fast response, while giving hesitant users maximum feedback. You can change this behavior by setting a variable (@pxref{Display Vars}). @item If you issue a command that cannot be executed, XEmacs may print an @dfn{error message} in the echo area. Error messages are accompanied by a beep or by flashing the frame. Any input you have typed ahead is thrown away when an error happens. @item Some commands print informative messages in the echo area. These messages look similar to error messages, but are not announced with a beep and do not throw away input. Sometimes a message tells you what the command has done, when this is not obvious from looking at the text being edited. Sometimes the sole purpose of a command is to print a message giving you specific information. For example, the command @kbd{C-x =} is used to print a message describing the character position of point in the text and its current column in the window. Commands that take a long time often display messages ending in @samp{...} while they are working, and add @samp{done} at the end when they are finished. @item The echo area is also used to display the @dfn{minibuffer}, a window that is used for reading arguments to commands, such as the name of a file to be edited. When the minibuffer is in use, the echo area displays with a prompt string that usually ends with a colon. The cursor appears after the prompt. You can always get out of the minibuffer by typing @kbd{C-g}. @xref{Minibuffer}. @end itemize @node Mode Line, GUI Components, Echo Area, Frame @comment node-name, next, previous, up @section The Mode Line @cindex mode line @cindex top level Each text window's last line is a @dfn{mode line} which describes what is going on in that window. When there is only one text window, the mode line appears right above the echo area. The mode line is in inverse video if the terminal supports that, starts and ends with dashes, and contains text like @samp{XEmacs:@: @var{something}}. If a mode line has something else in place of @samp{XEmacs:@: @var{something}}, the window above it is in a special subsystem such as Dired. The mode line then indicates the status of the subsystem. Normally, the mode line has the following appearance: @example --@var{ch}-XEmacs: @var{buf} (@var{major} @var{minor})----@var{pos}------ @end example @noindent This gives information about the buffer being displayed in the window: the buffer's name, what major and minor modes are in use, whether the buffer's text has been changed, and how far down the buffer you are currently looking. @var{ch} contains two stars (@samp{**}) if the text in the buffer has been edited (the buffer is ``modified''), or two dashes (@samp{--}) if the buffer has not been edited. Exception: for a read-only buffer, it is @samp{%%}. @var{buf} is the name of the window's chosen @dfn{buffer}. The chosen buffer in the selected window (the window that the cursor is in) is also XEmacs's selected buffer, the buffer in which editing takes place. When we speak of what some command does to ``the buffer'', we mean the currently selected buffer. @xref{Buffers}. @var{pos} tells you whether there is additional text above the top of the screen or below the bottom. If your file is small and it is completely visible on the screen, @var{pos} is @samp{All}. Otherwise, @var{pos} is @samp{Top} if you are looking at the beginning of the file, @samp{Bot} if you are looking at the end of the file, or @samp{@var{nn}%}, where @var{nn} is the percentage of the file above the top of the screen.@refill @var{major} is the name of the @dfn{major mode} in effect in the buffer. At any time, each buffer is in one and only one major mode. The available major modes include Fundamental mode (the least specialized), Text mode, Lisp mode, and C mode. @xref{Major Modes}, for details on how the modes differ and how you select one.@refill @var{minor} is a list of some of the @dfn{minor modes} that are turned on in the window's chosen buffer. For example, @samp{Fill} means that Auto Fill mode is on. @code{Abbrev} means that Word Abbrev mode is on. @code{Ovwrt} means that Overwrite mode is on. @xref{Minor Modes}, for more information. @samp{Narrow} means that the buffer being displayed has editing restricted to only a portion of its text. This is not really a minor mode, but is like one. @xref{Narrowing}. @code{Def} means that a keyboard macro is being defined. @xref{Keyboard Macros}. Some buffers display additional information after the minor modes. For example, Rmail buffers display the current message number and the total number of messages. Compilation buffers and Shell mode display the status of the subprocess. If XEmacs is currently inside a recursive editing level, square brackets (@samp{[@dots{}]}) appear around the parentheses that surround the modes. If XEmacs is in one recursive editing level within another, double square brackets appear, and so on. Since information on recursive editing applies to XEmacs in general and not to any one buffer, the square brackets appear in every mode line on the screen or not in any of them. @xref{Recursive Edit}.@refill @findex display-time XEmacs can optionally display the time and system load in all mode lines. To enable this feature, type @kbd{M-x display-time}. The information added to the mode line usually appears after the file name, before the mode names and their parentheses. It looks like this: @example @var{hh}:@var{mm}pm @var{l.ll} [@var{d}] @end example @noindent (Some fields may be missing if your operating system cannot support them.) @var{hh} and @var{mm} are the hour and minute, followed always by @samp{am} or @samp{pm}. @var{l.ll} is the average number of running processes in the whole system recently. @var{d} is an approximate index of the ratio of disk activity to CPU activity for all users. The word @samp{Mail} appears after the load level if there is mail for you that you have not read yet. @vindex mode-line-inverse-video Customization note: the variable @code{mode-line-inverse-video} controls whether the mode line is displayed in inverse video (assuming the terminal supports it); @code{nil} means no inverse video. The default is @code{t}. For X frames, simply set the foreground and background colors appropriately. @node GUI Components, XEmacs under X, Mode Line, Frame @comment node-name, next, previous, up @section GUI Components When executed in a graphical windowing environment such as the X Window System or Microsoft Windows, XEmacs displays several graphical user interface components such as scrollbars, menubars, toolbars, and gutters. By default there is a vertical scrollbar at the right of each frame, and at the top of the frame there is a menubar, a toolbar, and a gutter, in that order. Gutters can contain any of several widgets, but the default configuration puts a set of "notebook tabs" which you can use as a shortcut for selecting any of several related buffers in a given frame. Operating the GUI components is "obvious": click on the menubar to pull down a menu, on a button in the toolbar to invoke a function, and on a tab in the gutter to switch buffers. @menu * Menubar Basics:: How XEmacs uses the menubar. * Scrollbar Basics:: How XEmacs uses scrollbars. * Mode Line Basics:: How XEmacs uses modelines. * Toolbar Basics:: How XEmacs uses toolbars. * Gutter Basics:: How XEmacs uses gutters. * Inhibiting:: What if you don't like GUI? * Customizing:: Position, orientation, and appearance of GUI objects. @end menu @node Menubar Basics, Scrollbar Basics, , GUI Components @comment node-name, next, previous, up @section The XEmacs Menubar The XEmacs menubar is intended to be conformant to the usual conventions for menubars, although conformance is not yet perfect. The menu at the extreme right is the @samp{Help} menu, which should always be available. It provides access to all the XEmacs help facilities available through @kbd{C-h}, as well as samples of various configuration files like @samp{~/.Xdefaults} and @samp{~/.emacs}. At the extreme left is the @samp{Files} menu, which provides the usual file reading, writing, and printing operations, as well as operations like revert buffer from most recent save. The next menu from the left is the @samp{Edit} menu, which provides the @samp{Undo} operation as well as cutting and pasting, searching, and keyboard macro definition and execution. @c #### w3.el and VM should get cross-references here. XEmacs provides a very dynamic environment, and the Lisp language makes for highly flexible applications. The menubar reflects this: many menus (eg, the @samp{Buffers} menu, @pxref{Buffers Menu}) contain items determined by the current state of XEmacs, and most major modes and many minor modes add items to menus and even whole menus to the menubar. In fact, some applications like w3.el and VM provide so many menus that they define a whole new menubar and add a button that allows convenient switching between the ``XEmacs menubar'' and the ``application menubar''. Such applications normally bind themselves to a particular frame, and this switching only takes place on frames where such an application is active (ie, the current window of the frame is displaying a buffer in the appropriate major mode). Other menus which are typically available are the @samp{Options}, @samp{Tools}, @samp{Buffers}, @samp{Apps}, and @samp{Mule} menus. For detailed descriptions of these menus, @ref{Pull-down Menus}. (In 21.2 XEmacsen, the @samp{Mule} menu will be moved under @samp{Options}.) @node Scrollbar Basics, Mode Line Basics, Menubar Basics, GUI Components @comment node-name, next, previous, up @section XEmacs Scrollbars XEmacs scrollbars provide the usual interface. Arrow buttons at either end allow for line by line scrolling, including autorepeat. Clicking in the scrollbar itself provides scrolling by windowsfull, depending on which side of the slider is clicked. The slider itself may be dragged for smooth scrolling. The position of the slider corresponds to the position of the window in the buffer. In particular, the length of the slider is proportional to the fraction of the buffer which appears in the window. The presence of the scrollbars is under control of the application or may be customized by the user. By default a vertical scrollbar is present in all windows (except the minibuffer), and there is no horizontal scrollbar. @node Mode Line Basics, Toolbar Basics, Scrollbar Basics, GUI Components @comment node-name, next, previous, up @section XEmacs Mode Lines When used in a windowing system, the XEmacs modelines can be dragged vertically. The effect is to resize the windows above and below the modeline (this includes the minibuffer window). Additionally, a modeline can be dragged horizontally, in which case it scrolls its own text. This behavior is not enabled by default because it could be considered as disturbing when dragging vertically. When this behavior is enabled, the modeline's text can be dragged either in the same direction as the mouse, or in the opposite sense, making the modeline act as a scrollbar for its own text. You can select the behavior you want from the @samp{Display} submenu of the @samp{Options} menu. @node Toolbar Basics, Gutter Basics, Mode Line Basics, GUI Components @comment node-name, next, previous, up @section XEmacs Toolbars XEmacs has a default toolbar which provides shortcuts for some of the commonly used operations (such as opening files) and applications (such as the Info manual reader). Operations which require arguments will pop up dialogs to get them. The position of the default toolbar can be customized. Also, several toolbars may be present simultaneously (in different positions). VM, for example, provides an application toolbar which shortcuts for mail-specific operations like sending, saving, and deleting messages. @node Gutter Basics, Inhibiting, Toolbar Basics, GUI Components @comment node-name, next, previous, up @section XEmacs Gutters Gutters are the most flexible of the GUI components described in this section. In theory, the other GUI components could be implemented by customizing a gutter, but in practice the other components were introduced earlier and have their own special implementations. Gutters tend to be more transient than the other components. Buffer tabs, for example, change every time the selected buffer in the frame changes. And for progress gauges a gutter to contain the gauge is typically created on the fly when needed, then destroyed when the operation whose staus is being displayed is completed. Buffer tabs, having somewhat complex behavior, deserve a closer look. By default, a row of buffer tabs is displayed at the top of every frame. (The tabs could be placed in the bottom gutter, but would be oriented the same way and look rather odd. The horizontal orientation makes putting them in a side gutter utterly impractical.) The buffer displayed in the current window of a frame can be changed to a specific buffer by clicking [mouse-1] on the corresponding tab in the gutter. Each tab contains the name of its buffer. The tab for the current buffer in each frame is displayed in raised relief. The list of buffers chosen for display in the buffer tab row is derived by filtering the buffer list (like the @code{Buffers} menu). The list starts out with all existing buffers, with more recently selected buffers coming earlier in the list. Then "uninteresting" buffers, like internal XEmacs buffers, the @code{*Message Log*} buffer, and so on are deleted from the list. Next, the frame's selected buffer is determined. Buffers with a different major mode from the selected buffer are removed from the list. Finally, if the list is too long, the least recently used buffers are deleted from the list. By default up to 6 most recently used buffers with the same mode are displayed on tabs in the gutter. @node Inhibiting, Customizing, Gutter Basics, GUI Components @comment node-name, next, previous, up @section Inhibiting Display of GUI Components Use of GUI facilities is a personal thing. Almost everyone agrees that drawing via keyboard-based "turtle graphics" is acceptable to hardly anyone if a mouse is available, but conversely emulating a keyboard with a screenful of buttons is a painful experience. But between those extremes the complete novice will require a fair amount of time before toolbars and menus become dispensable, but many an "Ancien Haquer" sees them as a complete waste of precious frame space that could be filled with text. Display of all of the GUI components created by XEmacs can be inhibited through the use of Customize. Customize can be accessed through @samp{Options | Customize} in the menu bar, or via @kbd{M-x customize}. Then navigate through the Customize tree to @samp{Emacs | Environment}. Scrollbar and toolbar visibility is controlled via the @samp{Display} group, options @samp{Scrollbars visible} and @samp{Toolbar visible} respectively. Gutter visibility is controlled by group @samp{Gutter}, option @samp{Visible}. Or they can be controlled directly by @kbd{M-x customize-variable}, by changing the values of the variables @code{menubar-visible-p}, @code{scrollbars-visible-p}, @code{toolbar-visible-p}, or @code{gutter-buffers-tab-visible-p} respectively. (The strange form of the last variable is due to the fact that gutters are often used to display transient widgets like progress gauges, which you probably don't want to inhibit. It is more likely that you want to inhibit the default display of the buffers tab widget, which is what that variable controls. This interface is subject to change depending on developer experience and user feedback.) Control of frame configuration can controlled automatically according to various parameters such as buffer or frame because these are @dfn{specifiers} @ref{Specifiers, , , lispref}. Using these features requires programming in Lisp; Customize is not yet that sophisticated. Also, components that appear in various positions and orientations can have display suppressed according to position. @kbd{C-h a visible-p} gives a list of variables which can be customized. E.g., to control the visibility of specifically the left-side toolbar only, customize @code{left-toolbar-visible-p}. @node Customizing, , Inhibiting, GUI Components @comment node-name, next, previous, up @section Changing the Position, Orientation, and Appearance of GUI Components #### Not documented yet. @node XEmacs under X, XEmacs under MS Windows, GUI Components, Frame @section Using XEmacs Under the X Window System @comment node-name, next, previous, up XEmacs can be used with the X Window System and a window manager like MWM or TWM. In that case, the X window manager opens, closes, and resizes XEmacs frames. You use the window manager's mouse gestures to perform the operations. Consult your window manager guide or reference manual for information on manipulating X windows. When you are working under X, each X window (that is, each XEmacs frame) has a menu bar for mouse-controlled operations (@pxref{Pull-down Menus}). @cindex multi-frame XEmacs @findex make-frame XEmacs under X is also a multi-frame XEmacs. You can use the @b{New Frame} menu item from the @b{File} menu to create a new XEmacs frame in a new X window from the same process. The different frames will share the same buffer list, but you can look at different buffers in the different frames. @findex find-file-other-frame The function @code{find-file-other-frame} is just like @code{find-file}, but creates a new frame to display the buffer in first. This is normally bound to @kbd{C-x 5 C-f}, and is what the @b{Open File, New Frame} menu item does. @findex switch-to-buffer-other-frame The function @code{switch-to-buffer-other-frame} is just like @code{switch-to-buffer}, but creates a new frame to display the buffer in first. This is normally bound to @kbd{C-x 5 b}. @vindex default-frame-alist @vindex default-frame-plist You can specify a different default frame size other than the one provided. Use the variable @code{default-frame-plist}, which is a plist of default values for frame creation other than the first one. These may be set in your init file, like this: @example (setq default-frame-plist '(width 80 height 55)) @end example This variable has replaced @code{default-frame-alist}, which is considered obsolete. @vindex x-frame-defaults For values specific to the first XEmacs frame, you must use X resources. The variable @code{x-frame-defaults} takes an alist of default frame creation parameters for X window frames. These override what is specified in @file{~/.Xdefaults} but are overridden by the arguments to the particular call to @code{x-create-frame}. @vindex create-frame-hook When you create a new frame, the variable @code{create-frame-hook} is called with one argument, the frame just created. If you want to close one or more of the X windows you created using @b{New Frame}, use the @b{Delete Frame} menu item from the @b{File} menu. @vindex frame-title-format @vindex frame-icon-title-format If you are working with multiple frames, some special information applies: @itemize @bullet @item Two variables, @code{frame-title-format} and @code{frame-icon-title-format} determine the title of the frame and the title of the icon that results if you shrink the frame. @vindex auto-lower-frame @vindex auto-raise-frame @item The variables @code{auto-lower-frame} and @code{auto-raise-frame} position a frame. If true, @code{auto-lower-frame} lowers a frame to the bottom when it is no longer selected. If true, @code{auto-raise-frame} raises a frame to the top when it is selected. Under X, most ICCCM-compliant window managers will have options to do this for you, but these variables are provided in case you are using a broken window manager. @item There is a new frame/modeline format directive, %S, which expands to the name of the current frame (a frame's name is distinct from its title; the name is used for resource lookup, among other things, and the title is simply what appears above the window.) @end itemize @node XEmacs under MS Windows, , XEmacs under X, Frame @section Using XEmacs Under Microsoft Windows @comment node-name, next, previous, up Use of XEmacs under MS Windows is not separately documented here, but most operations available under the X Window System are also available with MS Windows. Where possible, native MS Windows GUI components and capabilities are used in XEmacs. texi2html-1.82/test/xemacs_manual/windows.texi0000644000175000017500000003000311264347115023411 0ustar flichtenheldflichtenheld @node Windows, Mule, Buffers, Top @chapter Multiple Windows @cindex windows Emacs can split the frame into two or many windows, which can display parts of different buffers or different parts of one buffer. If you are running XEmacs under X, that means you can have the X window that contains the Emacs frame have multiple subwindows. @menu * Basic Window:: Introduction to Emacs windows. * Split Window:: New windows are made by splitting existing windows. * Other Window:: Moving to another window or doing something to it. * Pop Up Window:: Finding a file or buffer in another window. * Change Window:: Deleting windows and changing their sizes. @end menu @node Basic Window, Split Window, Windows, Windows @section Concepts of Emacs Windows When Emacs displays multiple windows, each window has one Emacs buffer designated for display. The same buffer may appear in more than one window; if it does, any changes in its text are displayed in all the windows that display it. Windows showing the same buffer can show different parts of it, because each window has its own value of point. @cindex selected window At any time, one window is the @dfn{selected window}; the buffer displayed by that window is the current buffer. The cursor shows the location of point in that window. Each other window has a location of point as well, but since the terminal has only one cursor, it cannot show the location of point in the other windows. Commands to move point affect the value of point for the selected Emacs window only. They do not change the value of point in any other Emacs window, including those showing the same buffer. The same is true for commands such as @kbd{C-x b} to change the selected buffer in the selected window; they do not affect other windows at all. However, there are other commands such as @kbd{C-x 4 b} that select a different window and switch buffers in it. Also, all commands that display information in a window, including (for example) @kbd{C-h f} (@code{describe-function}) and @kbd{C-x C-b} (@code{list-buffers}), work by switching buffers in a non-selected window without affecting the selected window. Each window has its own mode line, which displays the buffer name, modification status, and major and minor modes of the buffer that is displayed in the window. @xref{Mode Line}, for details on the mode line. @node Split Window, Other Window, Basic Window, Windows @section Splitting Windows @table @kbd @item C-x 2 Split the selected window into two windows, one above the other (@code{split-window-vertically}). @item C-x 3 Split the selected window into two windows positioned side by side (@code{split-window-horizontally}). @item C-x 6 Save the current window configuration in register @var{reg} (a letter). @item C-x 7 Restore (make current) the window configuration in register @var{reg} (a letter). Use with a register previously set with @kbd{C-x 6}. @end table @kindex C-x 2 @findex split-window-vertically The command @kbd{C-x 2} (@code{split-window-vertically}) breaks the selected window into two windows, one above the other. Both windows start out displaying the same buffer, with the same value of point. By default each of the two windows gets half the height of the window that was split. A numeric argument specifies how many lines to give to the top window. @kindex C-x 3 @findex split-window-horizontally @kbd{C-x 3} (@code{split-window-horizontally}) breaks the selected window into two side-by-side windows. A numeric argument specifies how many columns to give the one on the left. A line of vertical bars separates the two windows. Windows that are not the full width of the frame have truncated mode lines which do not always appear in inverse video, because Emacs display routines cannot display a region of inverse video that is only part of a line on the screen. @vindex truncate-partial-width-windows When a window is less than the full width, many text lines are too long to fit. Continuing all those lines might be confusing. Set the variable @code{truncate-partial-width-windows} to non-@code{nil} to force truncation in all windows less than the full width of the frame, independent of the buffer and its value for @code{truncate-lines}. @xref{Continuation Lines}.@refill Horizontal scrolling is often used in side-by-side windows. @xref{Display}. @findex jump-to-register @findex window-configuration-to-register You can resize a window and store that configuration in a register by supplying a @var{register} argument to @code{window-configuration-to-register} (@kbd{C-x 6}). To return to the window configuration established with @code{window-configuration-to-register}, use @code{jump-to-register} (@kbd{C-x j}). @node Other Window, Pop Up Window, Split Window, Windows @section Using Other Windows @table @kbd @item C-x o Select another window (@code{other-window}). That is the letter `o', not zero. @item M-C-v Scroll the next window (@code{scroll-other-window}). @item M-x compare-windows Find the next place where the text in the selected window does not match the text in the next window. @item M-x other-window-any-frame @var{n} Select the @var{n}th different window on any frame. @end table @kindex C-x o @findex other-window To select a different window, use @kbd{C-x o} (@code{other-window}). That is an `o', for `other', not a zero. When there are more than two windows, the command moves through all the windows in a cyclic order, generally top to bottom and left to right. From the rightmost and bottommost window, it goes back to the one at the upper left corner. A numeric argument, @var{n}, moves several steps in the cyclic order of windows. A negative numeric argument moves around the cycle in the opposite order. If the optional second argument @var{which-frames} is non-@code{nil}, the function cycles through all frames. When the minibuffer is active, the minibuffer is the last window in the cycle; you can switch from the minibuffer window to one of the other windows, and later switch back and finish supplying the minibuffer argument that is requested. @xref{Minibuffer Edit}. @findex other-window-any-frame The command @kbd{M-x other-window-any-frame} also selects the window @var{n} steps away in the cyclic order. However, unlike @code{other-window}, this command selects a window on the next or previous frame instead of wrapping around to the top or bottom of the current frame, when there are no more windows. @kindex C-M-v @findex scroll-other-window The usual scrolling commands (@pxref{Display}) apply to the selected window only. @kbd{M-C-v} (@code{scroll-other-window}) scrolls the window that @kbd{C-x o} would select. Like @kbd{C-v}, it takes positive and negative arguments. @findex compare-windows The command @kbd{M-x compare-windows} compares the text in the current window with the text in the next window. Comparison starts at point in each window. Point moves forward in each window, a character at a time, until the next set of characters in the two windows are different. Then the command is finished. A prefix argument @var{ignore-whitespace} means ignore changes in whitespace. The variable @code{compare-windows-whitespace} controls how whitespace is skipped. If @code{compare-ignore-case} is non-@code{nil}, changes in case are also ignored. @node Pop Up Window, Change Window, Other Window, Windows @section Displaying in Another Window @kindex C-x 4 @kbd{C-x 4} is a prefix key for commands that select another window (splitting the window if there is only one) and select a buffer in that window. Different @kbd{C-x 4} commands have different ways of finding the buffer to select. @findex switch-to-buffer-other-window @findex find-file-other-window @findex find-tag-other-window @findex dired-other-window @findex mail-other-window @table @kbd @item C-x 4 b @var{bufname} @key{RET} Select buffer @var{bufname} in another window. This runs @code{switch-to-buffer-other-window}. @item C-x 4 f @var{filename} @key{RET} Visit file @var{filename} and select its buffer in another window. This runs @code{find-file-other-window}. @xref{Visiting}. @item C-x 4 d @var{directory} @key{RET} Select a Dired buffer for directory @var{directory} in another window. This runs @code{dired-other-window}. @xref{Dired}. @item C-x 4 m Start composing a mail message in another window. This runs @code{mail-other-window}, and its same-window version is @kbd{C-x m} (@pxref{Sending Mail}). @item C-x 4 . Find a tag in the current tag table in another window. This runs @code{find-tag-other-window}, the multiple-window variant of @kbd{M-.} (@pxref{Tags}). @end table @vindex display-buffer-function If the variable @code{display-buffer-function} is non-@code{nil}, its value is the function to call to handle @code{display-buffer}. It receives two arguments, the buffer and a flag that if non-@code{nil} means that the currently selected window is not acceptable. Commands such as @code{switch-to-buffer-other-window} and @code{find-file-other-window} work using this function. @node Change Window,, Pop Up Window, Windows @section Deleting and Rearranging Windows @table @kbd @item C-x 0 Get rid of the selected window (@code{delete-window}). That is a zero. If there is more than one Emacs frame, deleting the sole remaining window on that frame deletes the frame as well. If the current frame is the only frame, it is not deleted. @item C-x 1 Get rid of all windows except the selected one (@code{delete-other-windows}). @item C-x ^ Make the selected window taller, at the expense of the other(s) @*(@code{enlarge-window}). @item C-x @} Make the selected window wider (@code{enlarge-window-horizontally}). @end table @kindex C-x 0 @findex delete-window To delete a window, type @kbd{C-x 0} (@code{delete-window}). (That is a zero.) The space occupied by the deleted window is distributed among the other active windows (but not the minibuffer window, even if that is active at the time). Once a window is deleted, its attributes are forgotten; there is no automatic way to make another window of the same shape or showing the same buffer. The buffer continues to exist, and you can select it in any window with @kbd{C-x b}. @kindex C-x 1 @findex delete-other-windows @kbd{C-x 1} (@code{delete-other-windows}) is more powerful than @kbd{C-x 0}; it deletes all the windows except the selected one (and the minibuffer). The selected window expands to use the whole frame except for the echo area. @kindex C-x ^ @findex enlarge-window @kindex C-x @} @findex enlarge-window-horizontally @vindex window-min-height @vindex window-min-width To readjust the division of space among existing windows, use @kbd{C-x ^} (@code{enlarge-window}). It makes the currently selected window longer by one line or as many lines as a numeric argument specifies. With a negative argument, it makes the selected window smaller. @kbd{C-x @}} (@code{enlarge-window-horizontally}) makes the selected window wider by the specified number of columns. The extra screen space given to a window comes from one of its neighbors, if that is possible; otherwise, all the competing windows are shrunk in the same proportion. If this makes some windows too small, those windows are deleted and their space is divided up. Minimum window size is specified by the variables @code{window-min-height} and @code{window-min-width}. You can also resize windows within a frame by clicking the left mouse button on a modeline, and dragging. Clicking the right button on a mode line pops up a menu of common window manager operations. This menu contains the following options: @cindex Windows menu @cindex Pull-down Menus @cindex menus @table @b @item Delete Window Remove the window above this modeline from the frame. @item Delete Other Windows Delete all windows on the frame except for the one above this modeline. @item Split Window Split the window above the mode line in half, creating another window. @item Split Window Horizontally Split the window above the mode line in half horizontally, so that there will be two windows side-by-side. @item Balance Windows Readjust the sizes of all windows on the frame until all windows have roughly the same number of lines. @end table texi2html-1.82/test/xemacs_manual/packages.texi0000644000175000017500000007445611264347115023521 0ustar flichtenheldflichtenheld@c This is part of the XEmacs manual. @c Copyright (C) 1985, 86, 87, 93, 94, 95, 1997 Free Software Foundation, Inc. @c See file xemacs.texi for copying conditions. @node Packages, Basic, Startup Paths, Top @comment node-name, next, previous, up @section Packages @cindex packages The XEmacs 21 distribution comes only with a very basic set of built-in modes and packages. Most of the packages that were part of the distribution of earlier versions of XEmacs are now available separately. The installer as well as the user can choose which packages to install; the actual installation process is easy. This gives an installer the ability to tailor an XEmacs installation for local needs with safe removal of unnecessary code. @menu * Package Terminology:: Understanding different kinds of packages. * Installing Packages:: How to install packages. * Building Packages:: Building packages from CVS sources. * Local.rules File:: This is an important file that you must create. * Creating Packages:: The basics. * Available Packages:: A brief directory of packaged LISP. @end menu @node Package Terminology, Installing Packages, , Packages @comment node-name, next, previous, up @heading Package Terminology: @subsection Package Flavors There are two main flavors of packages. @itemize @bullet @item Regular Packages @cindex regular packages A regular package is one in which multiple files are involved and one may not in general safely remove any of them. @item Single-File Packages @cindex single-file packages A single-file package is an aggregate collection of thematically related but otherwise independent lisp files. These files are bundled together for download convenience and individual files may be deleted at will without any loss of functionality. However, we would recommend that you follow this rule of thumb: "When in doubt, don't delete". @end itemize @subsection Package Distributions @cindex package distributions XEmacs Lisp packages are distributed in two ways, depending on the intended use. Binary Packages are for installers and end-users that can be installed directly into an XEmacs package directory. Source Packages are for developers and include all files necessary for rebuilding bytecompiled lisp and creating tarballs for distribution. @subsection Binary Packages @cindex binary packages Binary packages may be installed directly into an XEmacs package hierarchy. @subsection Source Packages @cindex source packages Source packages contain all of the Package author's (where appropriate in regular packages) source code plus all of the files necessary to build distribution tarballs (Unix Tar format files, gzipped for space savings). Currently, source packages are only available via CVS. See @url{http://cvs.xemacs.org/} for details. @node Installing Packages, Building Packages, Package Terminology, Packages @comment node-name, next, previous, up @cindex installing packages @cindex install @heading Installing Packages: @subsection Getting Started When you first download XEmacs 21, you will usually first grab the @dfn{core distribution}, @cindex core distribution a file called @file{xemacs-21.x.x.tar.gz}. (Replace the @t{21.x.x} by the current version number.) The core distribution contains the sources of XEmacs and a minimal set of Emacs Lisp files, which are in the subdirectory named @file{lisp}. This subdirectory used to contain all Emacs Lisp files distributed with XEmacs. Now, to conserve disk space, most non-essential packages were made optional. @subsection Choosing the Packages You Need @cindex choosing packages The @ref{Available Packages} can currently be found in the same ftp directory where you grabbed the core distribution from, and are located in the subdirectory @file{packages}. Package file names follow the naming convention @file{--pkg.tar.gz}. If you have @ref{(EFS)}, packages can be installed over the network. Alternatively, if you have copies of the packages locally, you can install packages from a local disk or CDROM. The file @file{etc/PACKAGES} in the core distribution contains a list of the @ref{Available Packages} at the time of the XEmacs release. You can also get a list of available packages, and whether or not they are installed, using the visual package browser and installer. You can access it via the menus: @example Tools -> Packages -> List and Install @end example Or, you can get to it via the keyboard: @example M-x pui-list-packages @end example Hint to system administrators of multi-user systems: it might be a good idea to install all packages and not interfere with the wishes of your users. If you can't find which package provides the feature you require, try using the @code{package-get-package-provider} function. Eg., if you know that you need @code{thingatpt}, type: @example M-x package-get-package-provider RET thingatpt @end example which will return something like (fsf-compat "1.08"). You can the use one of the methods above for installing the package you want. @subsection XEmacs and Installing Packages There are three main ways to install packages: @menu * Sumo:: All at once, using the 'Sumo Tarball'. * Manually:: Using individual package tarballs. * Automatically:: Using the package tools from XEmacs. * Which Packages:: Which packages to install. * Removing Packages:: Removing packages. @end menu But regardless of the method you use to install packages, they can only be used by XEmacs after a restart. @node Sumo, Manually, ,Installing Packages @comment node-name, next, previous, up @cindex sumo package install @heading Installing the Sumo Packages: Those with little time, cheap connections and plenty of disk space can install all the packages at once using the sumo tarballs. Download the file: @file{xemacs-sumo.tar.gz} For an XEmacs compiled with Mule you also need: @file{xemacs-mule-sumo.tar.gz} N.B. They are called 'Sumo Tarballs' for good reason. They are currently about 19MB and 4.5MB (gzipped) respectively. Install them by: @code{cd $prefix/lib/xemacs ; gunzip -c | tar xvf - RET} Or, if you have GNU tar: @code{cd $prefix/lib/xemacs ; tar zxvf /path/to/ RET} As the Sumo tarballs are not regenerated as often as the individual packages, it is recommended that you use the automatic package tools afterwards to pick up any recent updates. @node Manually, Automatically, Sumo, Installing Packages @comment node-name, next, previous, up @cindex manual package install @heading Manual Package Installation: Fetch the packages from the FTP site, CD-ROM whatever. The filenames have the form @file{name--pkg.tar.gz} and are gzipped tar files. For a fresh install it is sufficient to untar the file at the top of the package hierarchy. Note: If you are upgrading packages already installed, it's best to remove the old package first @ref{Removing Packages}. For example if we are installing the @file{xemacs-base} package (version 1.48): @example mkdir $prefix/lib/xemacs/xemacs-packages RET # if it does not exist yet cd $prefix/lib/xemacs/xemacs-packages RET gunzip -c /path/to/xemacs-base-1.48-pkg.tar.gz | tar xvf - RET Or if you have GNU tar, the last step can be: tar zxvf /path/to/xemacs-base-1.48-pkg.tar.gz RET @end example For MULE related packages, it is best to untar into the mule-packages hierarchy, i.e. for the @file{mule-base} package, version 1.37: @example mkdir $prefix/lib/xemacs/mule-packages RET # if it does not exist yet cd $prefix/lib/xemacs/mule-packages RET gunzip -c /path/to/mule-base-1.37-pkg.tar.gz | tar xvf - RET Or if you have GNU tar, the last step can be: tar zxvf /path/to/mule-base-1.37-pkg.tar.gz RET @end example @node Automatically, Which Packages ,Manually, Installing Packages @comment node-name, next, previous, up @cindex automatic package install @cindex package tools @heading Automatic Package Installation: XEmacs comes with some tools to make the periodic updating and installing easier. It will notice if new packages or versions are available and will fetch them from the FTP site. Unfortunately this requires that a few packages are already in place. You will have to install them by hand as above or use a SUMO tarball. This requirement will hopefully go away in the future. The packages you need are: @example efs - To fetch the files from the FTP site or mirrors. xemacs-base - Needed by efs. and optionally: mule-base - Needed if you want to use XEmacs with MULE. @end example After installing these by hand, fire up XEmacs and follow these steps. @enumerate 1 @item Choose a download site. via menu: Tools -> Packages -> Add Download Site via keyb: @code{M-x customize-variable RET package-get-remote RET} (put in the details of remote host and directory) If the package tarballs _AND_ the package-index file are in a local directory, you can: @code{M-x pui-add-install-directory RET} @item Obtain a list of packages and display the list in a buffer named @file{*Packages*}. menu: Tools -> Packages -> List & Install keyb: @code{M-x pui-list-packages RET} XEmacs will now connect to the remote site and download the latest package-index file. If you see an error about the package-index entries not being PGP signed, you can safely ignore this because PGP has not been integrated into the XEmacs package tools yet. The visual package browser will then display a list of all packages. Help information will be displayed at the very bottom of the buffer; you may have to scroll down to see it. You can also press @kbd{?} to get the same help. From this buffer, you can tell the package status by the character in the first column: @table @kbd @item - The package has not been installed. @item * The package has been installed, but a newer version is available. The current version is out-of-date. @item + The package has been marked for installation/update. @end table If there is no character in the first column, the package has been installed and is up to date. From here, you can select or unselect packages for installation using the @key{RET} key, the @kbd{Mouse-2} button or selecting "Select" from the (Popup) Menu. Once you've finished selecting the packages, you can press the @kbd{x} key (or use the menu) to actually install the packages. Note that you will have to restart XEmacs for XEmacs to recognize any new packages. Key summary: @table @kbd @item ? Display simple help. @item @key{RET} @itemx @key{Mouse-2} Toggle between selecting and unselecting a package for installation. @item x Install selected packages. @item @key{SPC} View, in the minibuffer, additional information about the package, such as the package date (not the build date) and the package author. Moving the mouse over a package name will also do the same thing. @item v Toggle between verbose and non-verbose package display. @item g Refresh the package display. @item q Kill the package buffer. @end table Moving the mouse over a package will also cause additional information about the package to be displayed in the minibuffer. @item Choose the packages you wish to install. mouse: Click button 2 on the package name. keyb: @kbd{RET} on the package name @item Make sure you have everything you need. menu: Packages -> Add Required keyb: @kbd{r} XEmacs will now search for packages that are required by the ones that you have chosen to install and offer to select those packages also. For novices and gurus alike, this step can save your bacon. It's easy to forget to install a critical package. @item Download and install the packages. menu: Packages -> Install/Remove Selected keyb: @kbd{x} @end enumerate You can also install packages using a semi-manual interface: @example M-x package-get-all @end example Enter the name of the package (e.g., @code{prog-modes}), and XEmacs will search for the latest version and install it and any packages that it depends upon. @node Which Packages, Removing Packages, Automatically, Installing Packages @comment node-name, next, previous, up @cindex which packages @cindex choosing packages @heading Which Packages to Install: This is difficult to say. When in doubt install a package. If you administrate a big site it might be a good idea to just install everything. A good minimal set of packages for XEmacs-latin1 would be xemacs-base, xemacs-devel, c-support, cc-mode, debug, dired, efs, edit-utils, fsf-compat, mail-lib, net-utils, os-utils, prog-modes, text-modes, time If you are using the XEmacs package tools, don't forget to do: Packages -> Add Required To make sure you have everything that the packages you have chosen to install need. See also @ref{Available Packages} for further descriptions of the individual packages. @node Removing Packages, ,Which Packages, Installing Packages @comment node-name, next, previous, up @cindex removing packages @cindex deleting packages @heading Removing Packages: Because the exact files and their locations contained in a package may change it is recommended to remove a package first before installing a new version. In order to facilitate removal each package contains an @file{pgkinfo/MANIFEST.pkgname} file which list all the files belonging to the package. No need to panic, you don't have to go through the @file{pkinfo/MANIFEST.pkgname} and manually delete the files. Instead, use @code{M-x package-get-delete-package RET}. Note that the interactive package tools included with XEmacs already do this for you. @node Building Packages, Local.rules File, Installing Packages, Packages @comment node-name, next, previous, up @cindex building packages @cindex package building @heading Building Packages: Currently, source packages are only available via anonymous CVS. See @url{http://cvs.xemacs.org/} for details of checking out the @file{xemacs-packages} module. @subsection Prerequisites for Building Source Packages @table @code @item GNU cp @item GNU install (or a BSD compatible install program). @item GNU make (3.75 or later preferred). @item makeinfo (1.68 from texinfo-3.11 or later required). @item GNU tar (or equivalent). @item GNU gzip (or equivalent). @item A properly configured @file{Local.rules} file. @ref{Local.rules File}. @end table And of course, XEmacs 21.0 or higher. @subsection What You Can Do With Source Packages The packages CVS sources are most useful for creating XEmacs package tarballs for installation into your own XEmacs installations or for distributing to others. Supported operations from @file{make} are: @table @code @item all Bytecompile all files, build and bytecompile byproduct files like @file{auto-autoloads.el} and @file{custom-load.el}. Create info version of TeXinfo documentation if present. @item bindist Does a @code{make all} as well as create a binary package tarball in the staging directory. @item install Bytecompile all files, build and bytecompile byproduct files like @file{auto-autoloads.el} and @file{custom-load.el}. Create info version of TeXinfo documentation if present. And install everything into the staging directory. @item srckit Usually aliased to @code{srckit-std}. This does a @code{make distclean} and creates a package source tarball in the staging directory. This is generally only of use for package maintainers. @item binkit May be aliased to @code{binkit-sourceonly}, @code{binkit-sourceinfo}, @code{binkit-sourcedata}, or @code{binkit-sourcedatainfo}. @code{sourceonly} indicates there is nothing to install in a data directory or info directory. @code{sourceinfo} indicates that source and info files are to be installed. @code{sourcedata} indicates that source and etc (data) files are to be installed. @code{sourcedatainfo} indicates source, etc (data), and info files are to be installed. A few packages have needs beyond the basic templates so this is not yet complete. @item dist Runs the rules @code{srckit} followed by @code{binkit}. This is primarily of use by XEmacs maintainers producing files for distribution. @item clean Remove all built files except @file{auto-autoloads.el} and @file{custom-load.el}. @item distclean Remove all created files. @end table @node Local.rules File, Creating Packages, Building Packages, Packages @comment node-name, next, previous, up @cindex local.rules @heading The Local.rules File: This file is used when building and installing packages from source. In the top level of the CVS module, @file{xemacs-packages}, contains the file, @file{Local.rules.template}. Simply copy that to @file{Local.rules} and edit it to suit your needs. These are the variables in 'Local.rules' that you will need to address. @table @var @item symlink = Set this to 't' if you want to do a "run in place". Setting this doesn't work well with 'make bindist' @item XEMACS_PACKAGES = This is where you set the normal packages that you want to install. eg: @example XEMACS_PACKAGES = xemacs-packages/xemacs-base xemacs-packages/bbdb @end example @item XEMACS_STAGING = $@{XEMACS_PACKAGES_BASE@}/../Packages Set this to where you want normal packages to be installed to. @item PACKAGE_INDEX = package-index If you want the package-index file to have a different name, change this. @item BUILD_WITHOUT_MULE = Building from CVS defaults to building the Mule packages. Set this to 't' if you don't want/have Mule @item MULE_PACKAGES = Same as for 'XEMACS_PACKAGES' except you list the Mule packages you want to install here. eg: @example MULE_PACKAGES = mule-packages/mule-base mule-packages/skk @end example @item MULE_STAGING = $@{XEMACS_PACKAGES_BASE@}/../Mule-Packages Set this to where you want Mule packages installed to. Note: 'make bindist' does not use this variable. @item XEMACS = xemacs If your XEmacs isn't in your path, change this. @item XEMACS_NATIVE_NT = Set this to 't' if you are building on WinNT. @item INSTALL = install -c The path to your BSD compatible install program. @item TAR = tar The path to your tar program @item BZIP2 = If you want bzip2 tarballs, set this. @item MAKEINFO = makeinfo The path to your makeinfo program @end table @node Creating Packages, Available Packages, Local.rules File, Packages @comment node-name, next, previous, up @cindex creating packages @heading Creating Packages: Creating a package from an existing Lisp library is not very difficult. In addition to the Lisp libraries themselves, you need a @file{package-info.in} file and a simple @file{Makefile}. The rest is done by @file{XEmacs.rules}, part of the packaging system infrastructure. @file{package-info.in} contains a single Lisp form like this: @example (name ; your package's name (standards-version 1.1 version VERSION author-version AUTHOR_VERSION date DATE build-date BUILD_DATE maintainer MAINTAINER distribution xemacs ; change to "mule" if MULE is needed priority high category CATEGORY dump nil description "description" ; a one-line description string filename FILENAME md5sum MD5SUM size SIZE provides (feature1 feature2) ; one for every `provides' form requires (REQUIRES) type regular )) @end example You must fill in the four commented lines. The value of @code{name} is the name of your package as an unquoted symbol. Normally it is the name of the main Lisp file or principal feature provided. The allowed values for distribution are @code{xemacs} and @code{mule}. Write them as unquoted symbols. The @code{description} is a quoted Lisp string; use the usual conventions. The value for @code{provides} is a list of feature symbols (written unquoted). All of the features provided by libraries in your package should be elements of this list. Implementing an automatic method for generating the @file{provides} line is desirable, but as yet undone. The variables in upper-case are references to variables set in the @file{Makefile} or automatically generated. Do not change them; they are automatically filled in by the build process. The remaining lines refer to implementation constants (@code{standards-version}), or features that are unimplemented or have been removed (@code{priority} and @code{dump}). The @code{type} line is not normally relevant to external maintainers; the alternate value is @code{single-file}, which refers to packages consed up out of a number of single-file libraries that are more or less thematically related. An example is @code{prog-modes}. Single-file packages are basically for administrative convenience, and new packages should generally be created as regular packages. The @file{Makefile} is quite stylized. The idea is similar to an @file{Imakefile} or an @code{automake} file: the complexity is hidden in generic rules files, in this case the @file{XEmacs.rules} include file in the top directory of the packages hierarchy. Although a number of facilities are available for complex libraries, most simple packages' @file{Makefile}s contain a copyright notice, a few variable definitions, an include for @file{XEmacs.rules}, and a couple of standard targets. The first few @code{make} variables defined are @code{VERSION}, @code{AUTHOR_VERSION}, @code{MAINTAINER}, @code{PACKAGE}, @code{PKG_TYPE}, @code{REQUIRES}, and @code{CATEGORY}. All but one were described in the description of @file{package-info.in}. The last is an administrative grouping. Current categories include @code{standard}, and @code{mule}. Next, define the variable @code{ELCS}. This contains the list of the byte-compiled Lisp files used by the package. These files and their @file{.el} versions will be included in the binary package. If there are other files (such as extra Lisp sources or an upstream @file{Makefile}) that are normally placed in the installed Lisp directory, but not byte-compiled, they can be listed as the value of @code{EXTRA_SOURCES}. The include is simply @example include ../../XEmacs.rules @end example The standard targets follow. These are @example all:: $(ELCS) auto-autoloads.elc srckit: srckit-alias binkit: binkit-alias @end example Other targets (such as Texinfo sources) may need to be added as dependencies for the @code{all} target. Dependencies for @code{srckit} and @code{binkit} (that is, values for @var{srckit-alias} and @var{binkit-alias}) are defined in @file{XEmacs.rules}. The most useful of these values are given in the following table. @table @var @item srckit-alias Usually set to @code{srckit-std}. @item binkit-alias May be set to @code{binkit-sourceonly}, @code{binkit-sourceinfo}, @code{binkit-sourcedata}, or @code{binkit-sourcedatainfo}. @code{sourceonly} indicates there is nothing to install in a data directory or info directory. @code{sourceinfo} indicates that source and info files are to be installed. @code{sourcedata} indicates that source and etc (data) files are to be installed. @code{sourcedatainfo} indicates source, etc (data), and info files are to be installed. @end table Data files include things like pixmaps for a package-specific toolbar, and are normally installed in @file{etc/@var{PACKAGE_NAME}}. A few packages have needs beyond the basic templates. See @file{XEmacs.rules} or a future revision of this manual for details. @node Available Packages, , Creating Packages, Packages @comment node-name, next, previous, up @cindex available packages @cindex packages @heading Available Packages: This section lists the Lisp packages that are currently available from xemacs.org and it's mirrors. If a particular package that you are looking for isn't here, please send a message to the @email{xemacs-beta@@xemacs.org, XEmacs Beta list}. This data is up to date as of September 22, 2002. @subsection Normal Packages A very broad selection of elisp packages. @table @file @item Sun Support for Sparcworks. @item ada Ada language support. @item apel A Portable Emacs Library. Used by XEmacs MIME support. @item auctex Basic TeX/LaTeX support. @item bbdb The Big Brother Data Base: a rolodex-like database program. @item build Build XEmacs using custom widgets. @item c-support Basic single-file add-ons for editing C code. @item calc Emacs calculator. @item calendar Calendar and diary support. @item cc-mode C, C++ and Java language support. @item clearcase Support for the Clearcase version control system. @item cookie "Fortune cookie"-style messages. Includes Spook (suspicious phrases) and Yow (Zippy quotes). @item crisp Crisp/Brief emulation. @item debug GUD, gdb, dbx debugging support. @item dictionary Interface to RFC2229 dictionary servers. @item dired The DIRectory EDitor is for manipulating, and running commands on files in a directory. @item docbookide DocBook editing support. @item ecrypto Crypto functionality in Emacs Lisp. @item edebug A Lisp debugger. @item ediff Interface over patch. @item edit-utils Single file lisp packages for various XEmacs goodies. Load this and weed out the junk you don't want. @item edt DEC EDIT/EDT emulation. @item efs Treat files on remote systems the same as local files. @item eieio Enhanced Implementation of Emacs Interpreted Objects. @item elib Portable Emacs Lisp utilities library. @item emerge Another interface over patch. @item eshell Command shell implemented entirely in Emacs Lisp. @item ess ESS: Emacs Speaks Statistics. @item eterm Terminal emulator. @item eudc Emacs Unified Directory Client (LDAP, PH). @item footnote Footnoting in mail message editing modes. @item forms Forms editing support (obsolete, use the built-in Widget instead). @item fortran-modes Fortran language support. @item frame-icon Provide a WM icon based on major mode. @item fsf-compat GNU Emacs compatibility files. @item games Tetris, Sokoban, and Snake. @item gnats XEmacs bug reports. @item gnus The Gnus Newsreader and Mailreader. @item haskell-mode Haskell language support. @item hm--html-menus HTML editing. @item ibuffer Advanced replacement for buffer-menu. @item idlwave Editing and Shell mode for the Interactive Data Language. @item igrep Enhanced front-end for Grep. @item ilisp Front-end for interacting with Inferior Lisp (external lisps). @item ispell Spell-checking with ispell. @item jde Java language and development support. @item liece IRC (Internet Relay Chat) client for Emacs. @item mail-lib Fundamental lisp files for providing email support. @item mailcrypt Support for messaging encryption with PGP. @item mew Messaging in an Emacs World; a MIME-based email program. @item mh-e Front end support for MH. @item mine Elisp implementation of the game 'Minehunt'. @item misc-games Other amusements and diversions. @item mmm-mode Support for Multiple Major Modes within a single buffer. @item net-utils Miscellaneous Networking Utilities. This is a single-file package and files may be deleted at will. @item os-utils Miscellaneous single-file O/S utilities, for printing, archiving, compression, remote shells, etc. @item ocaml Objective Caml language support. @item pc PC style interface emulation. @item pcl-cvs CVS frontend. @item pcomplete Provides programmatic completion. @item perl-modes Perl language support. @item prog-modes Miscellaneous single-file lisp files for various programming languages. @item ps-print Print buffers to PostScript printers. @item psgml Validated HTML/SGML editing. @item psgml-dtds A collection of DTDs for psgml. Note that this package is deprecated and will be removed in the future, most likely Q2/2003. Instead of using this, you should install needed DTDs yourself. @item python-modes Python language support. @item reftex Emacs support for LaTeX cross-references, citations. @item rmail An obsolete Emacs mailer. If you do not already use it don't start. @item ruby-modes Ruby language support. @item sasl Simple Authentication and Security Layer (SASL) library. @item scheme Front-end support for Inferior Scheme. @item semantic Semantic bovinator. @item sgml SGML/Linuxdoc-SGML editing. @item sh-script Support for editing shell scripts. @item sieve Manage Sieve email filtering scripts. @item slider User interface tool. @item sml-mode Standard ML editing support. @item sounds-au XEmacs Sun sound files. @item sounds-wav XEmacs Microsoft sound files. @item speedbar Provides a separate frame with convenient references. @item strokes Mouse enhancement utility. @item supercite An Emacs citation tool. Useful with all Emacs Mailers and Newsreaders. @item texinfo XEmacs TeXinfo support. @item text-modes Various single file lisp packages for editing text files. @item textools Single-file TeX support. @item time Display time & date on the modeline. @item tm Emacs MIME support. Not needed for Gnus >= 5.8.0 @item tooltalk Support for building with Tooltalk. @item tpu DEC EDIT/TPU support. @item tramp Remote shell-based file editing. This is similar to EFS or Ange-FTP, but works with rsh/ssh and rcp/scp. @item vc Version Control for Free systems. @item vc-cc Version Control for ClearCase. This package will shortly be replaced with clearcase.el @item vhdl Support for VHDL. @item view-process A Unix process browsing tool. @item viper VI emulation support. @item vm An Emacs mailer. @item w3 A Web browser. @item xemacs-base Fundamental XEmacs support. Install this unless you wish a totally naked XEmacs. @item xemacs-devel XEmacs Lisp developer support. This package contains utilities for supporting Lisp development. It is a single-file package so it may be tailored. @item xslide XSL editing support. @item xslt-process A minor mode for (X)Emacs which allows running an XSLT processor on a buffer. @item zenirc ZENIRC IRC Client. @end table @subsection Mule Support (mule) MULti-lingual Enhancement. Support for world scripts such as Latin, Arabic, Cyrillic, Chinese, Japanese, Greek, Hebrew etc. To use these packages your XEmacs must be compiled with Mule support. @table @file @item edict Lisp Interface to EDICT, Kanji Dictionary. @item egg-its Wnn (4.2 and 6) support. SJ3 support. Must be installed prior to XEmacs build. @item latin-unity Unify character sets in a buffer. When characters belong to disjoint character sets, this attempts to translate the characters so that they belong to one character set. If the buffer coding system is not sufficient, this suggests different coding systems. @item leim Quail. Used for everything other than English and Japanese. @item locale Used for localized menubars (French and Japanese) and localized splash screens (Japanese). @item lookup Dictionary support. (This isn't an English dictionary program) @item mule-base Basic Mule support. Must be installed prior to building with Mule. @item mule-ucs Extended coding systems (including Unicode) for XEmacs. @item skk Another Japanese Language Input Method. Can be used without a separate process running as a dictionary server. @end table texi2html-1.82/test/xemacs_manual/files.texi0000644000175000017500000023665211264347115023043 0ustar flichtenheldflichtenheld @node Files, Buffers, Fixit, Top @chapter File Handling @cindex files The basic unit of stored data in Unix is the @dfn{file}. To edit a file, you must tell Emacs to examine the file and prepare a buffer containing a copy of the file's text. This is called @dfn{visiting} the file. Editing commands apply directly to text in the buffer; that is, to the copy inside Emacs. Your changes appear in the file itself only when you @dfn{save} the buffer back into the file. @cindex files, remote @cindex remote files Emacs is also able to handle ``remote files'' which are stored on other hosts. Not only is Emacs somewhat aware of the special issues involved with network file systems, but it can also use FTP and ssh (or rsh) to make local copies of the files, and refresh them on the remote host automatically when you save the buffer. The FTP interface is provided by the standard @samp{efs} package @ref{Top, EFS, , efs}. The ssh/rsh interface is provided by the optional @samp{tramp} package @ref{Top, TRAMP, , tramp}. These packages attempt to implement all of the operations described below, making remote file use transparent (except for unavoidable network delays). In addition to visiting and saving files, Emacs can delete, copy, rename, and append to files, and operate on file directories. @menu * File Names:: How to type and edit file name arguments. * Visiting:: Visiting a file prepares Emacs to edit the file. * Saving:: Saving makes your changes permanent. * Reverting:: Reverting cancels all the changes not saved. * Auto Save:: Auto Save periodically protects against loss of data. * Version Control:: Version control systems (RCS and SCCS). * ListDir:: Listing the contents of a file directory. * Comparing Files:: Finding where two files differ. * Dired:: ``Editing'' a directory to delete, rename, etc. the files in it. * Misc File Ops:: Other things you can do on files. @end menu @node File Names, Visiting, Files, Files @section File Names @cindex file names Most Emacs commands that operate on a file require you to specify the file name. (Saving and reverting are exceptions; the buffer knows which file name to use for them.) File names are specified in the minibuffer (@pxref{Minibuffer}). @dfn{Completion} is available, to make it easier to specify long file names. @xref{Completion}. There is always a @dfn{default file name} which is used if you enter an empty argument by typing just @key{RET}. Normally the default file name is the name of the file visited in the current buffer; this makes it easy to operate on that file with any of the Emacs file commands. The syntax for accessing remote files unfortunately varies depending on the method used. The syntax for using FTP is @samp{/@var{user}@@@var{remote-host}:@var{path-on-remote-host}}. The syntax for using ssh is @samp{/[@var{user}@@@var{remote-host}]@var{path-on-remote-host}}. In both cases the @samp{@var{user}@@} portion is optional (it defaults to your local user name). @var{path-on-remote-host} may use the @samp{~} notation to indicate @var{user}'s home directory on the remote host. The default file name will reflect the remote host information. @vindex default-directory Each buffer has a default directory, normally the same as the directory of the file visited in that buffer. When Emacs reads a file name, the default directory is used if you do not specify a directory. If you specify a directory in a relative fashion, with a name that does not start with a slash, it is interpreted with respect to the default directory. The default directory of the current buffer is kept in the variable @code{default-directory}, which has a separate value in every buffer. The value of the variable should end with a slash. For example, if the default file name is @file{/u/rms/gnu/gnu.tasks} then the default directory is @file{/u/rms/gnu/}. If you type just @samp{foo}, which does not specify a directory, it is short for @file{/u/rms/gnu/foo}. @samp{../.login} would stand for @file{/u/rms/.login}. @samp{new/foo} would stand for the filename @file{/u/rms/gnu/new/foo}. When visiting a remote file via EFS or TRAMP, the remote directory becomes the default directory (@pxref{Visiting}) for that buffer, just as a local directory would. @vindex default-directory-alist The variable @code{default-directory-alist} takes an alist of major modes and their opinions on @code{default-directory} as a Lisp expression to evaluate. A resulting value of @code{nil} is ignored in favor of @code{default-directory}. @findex make-directory @findex remove-directory @cindex creating directories @cindex removing directories You can create a new directory with the function @code{make-directory}, which takes as an argument a file name string. The current directory is displayed in the minibuffer when the function is called; you can delete the old directory name and supply a new directory name. For example, if the current directory is @file{/u/rms/gnu}, you can delete @file{gnu} and type @file{oryx} and @key{RET} to create @file{/u/rms/oryx}. Removing a directory is similar to creating one. To remove a directory, use @code{remove-directory}; it takes one argument, a file name string. The command @kbd{M-x pwd} prints the current buffer's default directory, and the command @kbd{M-x cd} sets it (to a value read using the minibuffer). A buffer's default directory changes only when the @code{cd} command is used. A file-visiting buffer's default directory is initialized to the directory of the file that is visited there. If a buffer is created with @kbd{C-x b}, its default directory is copied from that of the buffer that was current at the time. @vindex insert-default-directory The default directory name actually appears in the minibuffer when the minibuffer becomes active to read a file name. This serves two purposes: it shows you what the default is, so that you can type a relative file name and know with certainty what it will mean, and it allows you to edit the default to specify a different directory. To inhibit the insertion of the default directory, set the variable @code{insert-default-directory} to @code{nil}. Note that it is legitimate to type an absolute file name after you enter the minibuffer, ignoring the presence of the default directory name. The final minibuffer contents may look invalid, but that is not so. @xref{Minibuffer File}. @samp{$} in a file name is used to substitute environment variables. For example, if you have used the shell command @samp{setenv FOO rms/hacks} to set up an environment variable named @samp{FOO}, then you can use @file{/u/$FOO/test.c} or @file{/u/$@{FOO@}/test.c} as an abbreviation for @file{/u/rms/hacks/test.c}. The environment variable name consists of all the alphanumeric characters after the @samp{$}; alternatively, it may be enclosed in braces after the @samp{$}. Note that the @samp{setenv} command affects Emacs only if done before Emacs is started. To access a file with @samp{$} in its name, type @samp{$$}. This pair is converted to a single @samp{$} at the same time variable substitution is performed for single @samp{$}. The Lisp function that performs the substitution is called @code{substitute-in-file-name}. The substitution is performed only on filenames read as such using the minibuffer. @node Visiting, Saving, File Names, Files @section Visiting Files @cindex visiting files @c WideCommands @table @kbd @item C-x C-f Visit a file (@code{find-file}). @item C-x C-v Visit a different file instead of the one visited last (@code{find-alternate-file}). @item C-x 4 C-f Visit a file, in another window (@code{find-file-other-window}). Don't change this window. @item C-x 5 C-f Visit a file, in another frame (@code{find-file-other-frame}). Don't change this window or frame. @end table @cindex files @cindex visiting @cindex saving @dfn{Visiting} a file means copying its contents into an Emacs buffer so you can edit it. Emacs creates a new buffer for each file you visit. We say that the buffer is visiting the file that it was created to hold. Emacs constructs the buffer name from the file name by throwing away the directory and keeping just the file name. For example, a file named @file{/usr/rms/emacs.tex} is displayed in a buffer named @samp{emacs.tex}. If a buffer with that name exists, a unique name is constructed by appending @samp{<2>}, @samp{<3>},and so on, using the lowest number that makes a name that is not already in use. Each window's mode line shows the name of the buffer that is being displayed in that window, so you can always tell what buffer you are editing. The changes you make with Emacs are made in the Emacs buffer. They do not take effect in the file that you visit, or any other permanent place, until you @dfn{save} the buffer. Saving the buffer means that Emacs writes the current contents of the buffer into its visited file. @xref{Saving}. @cindex modified (buffer) If a buffer contains changes that have not been saved, the buffer is said to be @dfn{modified}. This is important because it implies that some changes will be lost if the buffer is not saved. The mode line displays two stars near the left margin if the buffer is modified. @kindex C-x 5 C-f @findex find-file @findex find-file-other-frame To visit a file, use the command @kbd{C-x C-f} (@code{find-file}). Follow the command with the name of the file you wish to visit, terminated by a @key{RET}. If you are using XEmacs under X, you can also use the @b{Open...} command from the @b{File} menu bar item. The file name is read using the minibuffer (@pxref{Minibuffer}), with defaulting and completion in the standard manner (@pxref{File Names}). While in the minibuffer, you can abort @kbd{C-x C-f} by typing @kbd{C-g}. @kbd{C-x C-f} has completed successfully when text appears on the screen and a new buffer name appears in the mode line. If the specified file does not exist and could not be created or cannot be read, an error results. The error message is printed in the echo area, and includes the name of the file that Emacs was trying to visit. If you visit a file that is already in Emacs, @kbd{C-x C-f} does not make another copy. It selects the existing buffer containing that file. However, before doing so, it checks that the file itself has not changed since you visited or saved it last. If the file has changed, Emacs prints a warning message. @xref{Interlocking,,Simultaneous Editing}. @findex find-this-file You can switch to a specific file called out in the current buffer by calling the function @code{find-this-file}. By providing a prefix argument, this function calls @code{filename-at-point} and switches to a buffer visiting the file @var{filename}. It creates one if none already exists. You can use this function to edit the file mentioned in the buffer you are working in or to test if the file exists. You can do that by using the minibuffer completion after snatching the all or part of the filename. @vindex find-file-use-truenames @vindex buffer-file-name If the variable @code{find-file-use-truenames}'s value is non-@code{nil}, a buffer's visited filename will always be traced back to the real file. The filename will never be a symbolic link, and there will never be a symbolic link anywhere in its directory path. In other words, the @code{buffer-file-name} and @code{buffer-file-truename} will be equal. @vindex find-file-compare-truenames @vindex buffer-file-truename If the variable @code{find-file-compare-truenames} value is non-@code{nil}, the @code{find-file} command will check the @code{buffer-file-truename} of all visited files when deciding whether a given file is already in a buffer, instead of just @code{buffer-file-name}. If you attempt to visit another file which is a symbolic link to a file that is already in a buffer, the existing buffer will be found instead of a newly created one. This works if any component of the pathname (including a non-terminal component) is a symbolic link as well, but doesn't work with hard links (nothing does). @cindex creating files If you want to create a file, just visit it. Emacs prints @samp{(New File)} in the echo area, but in other respects behaves as if you had visited an existing empty file. If you make any changes and save them, the file is created. @kindex C-x C-v @findex find-alternate-file If you visit a nonexistent file unintentionally (because you typed the wrong file name), use the @kbd{C-x C-v} (@code{find-alternate-file}) command to visit the file you wanted. @kbd{C-x C-v} is similar to @kbd{C-x C-f}, but it kills the current buffer (after first offering to save it if it is modified). @kbd{C-x C-v} is allowed even if the current buffer is not visiting a file. @vindex find-file-run-dired If the file you specify is actually a directory, Dired is called on that directory (@pxref{Dired}). To inhibit this, set the variable @code{find-file-run-dired} to @code{nil}; then it is an error to try to visit a directory. @kindex C-x 4 f @findex find-file-other-window @kbd{C-x 4 f} (@code{find-file-other-window}) is like @kbd{C-x C-f} except that the buffer containing the specified file is selected in another window. The window that was selected before @kbd{C-x 4 f} continues to show the same buffer it was already showing. If you use this command when only one window is being displayed, that window is split in two, with one window showing the same buffer as before, and the other one showing the newly requested file. @xref{Windows}. @kindex C-x 5 C-f @findex find-file-other-frame @kbd{C-x 5 C-f} (@code{find-file-other-frame}) is like @kbd{C-x C-f} except that it creates a new frame in which the file is displayed. @findex find-this-file-other-window Use the function @code{find-this-file-other-window} to edit a file mentioned in the buffer you are editing or to test if that file exists. To do this, use the minibuffer completion after snatching the part or all of the filename. By providing a prefix argument, the function calls @code{filename-at-point} and switches you to a buffer visiting the file @var{filename} in another window. The function creates a buffer if none already exists. This function is similar to @code{find-file-other-window}. @vindex find-file-hooks @vindex find-file-not-found-hooks There are two hook variables that allow extensions to modify the operation of visiting files. Visiting a file that does not exist runs the functions in the list @code{find-file-not-found-hooks}; the value of this variable is expected to be a list of functions which are called one by one until one of them returns non-@code{nil}. Any visiting of a file, whether extant or not, expects @code{find-file-hooks} to contain list of functions and calls them all, one by one. In both cases the functions receive no arguments. Visiting a nonexistent file runs the @code{find-file-not-found-hooks} first. @node Saving, Reverting, Visiting, Files @section Saving Files @dfn{Saving} a buffer in Emacs means writing its contents back into the file that was visited in the buffer. @table @kbd @item C-x C-s Save the current buffer in its visited file (@code{save-buffer}). @item C-x s Save any or all buffers in their visited files (@code{save-some-buffers}). @item M-~ Forget that the current buffer has been changed (@code{not-modified}). @item C-x C-w Save the current buffer in a specified file, and record that file as the one visited in the buffer (@code{write-file}). @item M-x set-visited-file-name Change file the name under which the current buffer will be saved. @end table @kindex C-x C-s @findex save-buffer To save a file and make your changes permanent, type @kbd{C-x C-s} (@code{save-buffer}). After saving is finished, @kbd{C-x C-s} prints a message such as: @example Wrote /u/rms/gnu/gnu.tasks @end example @noindent If the selected buffer is not modified (no changes have been made in it since the buffer was created or last saved), Emacs does not save it because it would have no effect. Instead, @kbd{C-x C-s} prints a message in the echo area saying: @example (No changes need to be saved) @end example @kindex C-x s @findex save-some-buffers The command @kbd{C-x s} (@code{save-some-buffers}) can save any or all modified buffers. First it asks, for each modified buffer, whether to save it. The questions should be answered with @kbd{y} or @kbd{n}. @kbd{C-x C-c}, the key that kills Emacs, invokes @code{save-some-buffers} and therefore asks the same questions. @kindex M-~ @findex not-modified If you have changed a buffer and do not want the changes to be saved, you should take some action to prevent it. Otherwise, you are liable to save it by mistake each time you use @code{save-some-buffers} or a related command. One thing you can do is type @kbd{M-~} (@code{not-modified}), which removes the indication that the buffer is modified. If you do this, none of the save commands will believe that the buffer needs to be saved. (@samp{~} is often used as a mathematical symbol for `not'; thus @kbd{Meta-~} is `not', metafied.) You could also use @code{set-visited-file-name} (see below) to mark the buffer as visiting a different file name, not in use for anything important. You can also undo all the changes made since the file was visited or saved, by reading the text from the file again. This is called @dfn{reverting}. @xref{Reverting}. Alternatively, you can undo all the changes by repeating the undo command @kbd{C-x u}; but this only works if you have not made more changes than the undo mechanism can remember. @findex set-visited-file-name @kbd{M-x set-visited-file-name} alters the name of the file that the current buffer is visiting. It prompts you for the new file name in the minibuffer. You can also use @code{set-visited-file-name} on a buffer that is not visiting a file. The buffer's name is changed to correspond to the file it is now visiting unless the new name is already used by a different buffer; in that case, the buffer name is not changed. @code{set-visited-file-name} does not save the buffer in the newly visited file; it just alters the records inside Emacs so that it will save the buffer in that file. It also marks the buffer as ``modified'' so that @kbd{C-x C-s} @i{will} save. @kindex C-x C-w @findex write-file If you wish to mark a buffer as visiting a different file and save it right away, use @kbd{C-x C-w} (@code{write-file}). It is precisely equivalent to @code{set-visited-file-name} followed by @kbd{C-x C-s}. @kbd{C-x C-s} used on a buffer that is not visiting a file has the same effect as @kbd{C-x C-w}; that is, it reads a file name, marks the buffer as visiting that file, and saves it there. The default file name in a buffer that is not visiting a file is made by combining the buffer name with the buffer's default directory. If Emacs is about to save a file and sees that the date of the latest version on disk does not match what Emacs last read or wrote, Emacs notifies you of this fact, because it probably indicates a problem caused by simultaneous editing and requires your immediate attention. @xref{Interlocking,, Simultaneous Editing}. @vindex require-final-newline If the variable @code{require-final-newline} is non-@code{nil}, Emacs puts a newline at the end of any file that doesn't already end in one, every time a file is saved or written. @vindex write-file-hooks @vindex after-save-hook Use the hook variable @code{write-file-hooks} to implement other ways to write files, and specify things to be done before files are written. The value of this variable should be a list of Lisp functions. When a file is to be written, the functions in the list are called, one by one, with no arguments. If one of them returns a non-@code{nil} value, Emacs takes this to mean that the file has been written in some suitable fashion; the rest of the functions are not called, and normal writing is not done. Use the hook variable @code{after-save-hook} to list all the functions to be called after writing out a buffer to a file. @menu * Backup:: How Emacs saves the old version of your file. * Interlocking:: How Emacs protects against simultaneous editing of one file by two users. @end menu @node Backup, Interlocking, Saving, Saving @subsection Backup Files @cindex backup file @vindex make-backup-files Because Unix does not provide version numbers in file names, rewriting a file in Unix automatically destroys all record of what the file used to contain. Thus, saving a file from Emacs throws away the old contents of the file---or it would, except that Emacs carefully copies the old contents to another file, called the @dfn{backup} file, before actually saving. (Make sure that the variable @code{make-backup-files} is non-@code{nil}. Backup files are not written if this variable is @code{nil}). At your option, Emacs can keep either a single backup file or a series of numbered backup files for each file you edit. Emacs makes a backup for a file only the first time a file is saved from one buffer. No matter how many times you save a file, its backup file continues to contain the contents from before the file was visited. Normally this means that the backup file contains the contents from before the current editing session; however, if you kill the buffer and then visit the file again, a new backup file is made by the next save. @menu * Names: Backup Names. How backup files are named; Choosing single or numbered backup files. * Deletion: Backup Deletion. Emacs deletes excess numbered backups. * Copying: Backup Copying. Backups can be made by copying or renaming. @end menu @node Backup Names, Backup Deletion, Backup, Backup @subsubsection Single or Numbered Backups If you choose to have a single backup file (the default), the backup file's name is constructed by appending @samp{~} to the file name being edited; thus, the backup file for @file{eval.c} is @file{eval.c~}. If you choose to have a series of numbered backup files, backup file names are made by appending @samp{.~}, the number, and another @samp{~} to the original file name. Thus, the backup files of @file{eval.c} would be called @file{eval.c.~1~}, @file{eval.c.~2~}, and so on, through names like @file{eval.c.~259~} and beyond. If protection stops you from writing backup files under the usual names, the backup file is written as @file{%backup%~} in your home directory. Only one such file can exist, so only the most recently made backup is available. @vindex version-control The choice of single backup or numbered backups is controlled by the variable @code{version-control}. Its possible values are: @table @code @item t Make numbered backups. @item nil Make numbered backups for files that have numbered backups already. Otherwise, make single backups. @item never Never make numbered backups; always make single backups. @end table @noindent @code{version-control} may be set locally in an individual buffer to control the making of backups for that buffer's file. For example, Rmail mode locally sets @code{version-control} to @code{never} to make sure that there is only one backup for an Rmail file. @xref{Locals}. @node Backup Deletion, Backup Copying, Backup Names, Backup @subsubsection Automatic Deletion of Backups @vindex kept-old-versions @vindex kept-new-versions To prevent unlimited consumption of disk space, Emacs can delete numbered backup versions automatically. Generally Emacs keeps the first few backups and the latest few backups, deleting any in between. This happens every time a new backup is made. The two variables that control the deletion are @code{kept-old-versions} and @code{kept-new-versions}. Their values are, respectively the number of oldest (lowest-numbered) backups to keep and the number of newest (highest-numbered) ones to keep, each time a new backup is made. The values are used just after a new backup version is made; that newly made backup is included in the count in @code{kept-new-versions}. By default, both variables are 2. @vindex delete-old-versions If @code{delete-old-versions} is non-@code{nil}, excess middle versions are deleted without notification. If it is @code{nil}, the default, you are asked whether the excess middle versions should really be deleted. You can also use Dired's @kbd{.} (Period) command to delete old versions. @xref{Dired}. @node Backup Copying, , Backup Deletion, Backup @subsubsection Copying vs.@: Renaming You can make backup files by copying the old file or by renaming it. This makes a difference when the old file has multiple names. If you rename the old file into the backup file, the alternate names become names for the backup file. If you copy the old file instead, the alternate names remain names for the file that you are editing, and the contents accessed by those names will be the new contents. How you make a backup file may also affect the file's owner and group. If you use copying, they do not change. If renaming is used, you become the file's owner, and the file's group becomes the default (different operating systems have different defaults for the group). Having the owner change is usually a good idea, because then the owner is always the person who last edited the file. Occasionally there is a file whose owner should not change. Since most files should change owners, it is a good idea to use local variable lists to set @code{backup-by-copying-when-mismatch} for the special cases where the owner should not change (@pxref{File Variables}). @vindex backup-by-copying @vindex backup-by-copying-when-linked @vindex backup-by-copying-when-mismatch Three variables control the choice of renaming or copying. Normally, renaming is done. If the variable @code{backup-by-copying} is non-@code{nil}, copying is used. Otherwise, if the variable @code{backup-by-copying-when-linked} is non-@code{nil}, copying is done for files that have multiple names, but renaming may still be done when the file being edited has only one name. If the variable @code{backup-by-copying-when-mismatch} is non-@code{nil}, copying is done if renaming would cause the file's owner or group to change. @refill @node Interlocking, , Backup, Saving @subsection Protection Against Simultaneous Editing @cindex file dates @cindex simultaneous editing Simultaneous editing occurs when two users visit the same file, both make changes, and both save their changes. If no one was informed that this was happening, and you saved first, you would later find that your changes were lost. On some systems, Emacs notices immediately when the second user starts to change a file already being edited, and issues a warning. When this is not possible, or if the second user has started to change the file despite the warning, Emacs checks when the file is saved, and issues a second warning when a user is about to overwrite a file containing another user's changes. If you are the user editing the file, you can take corrective action at this point and prevent actual loss of work. @findex ask-user-about-lock When you make the first modification in an Emacs buffer that is visiting a file, Emacs records that you have locked the file. (It does this by writing another file in a directory reserved for this purpose.) The lock is removed when you save the changes. The idea is that the file is locked whenever the buffer is modified. If you begin to modify the buffer while the visited file is locked by someone else, this constitutes a collision, and Emacs asks you what to do. It does this by calling the Lisp function @code{ask-user-about-lock}, which you can redefine to customize what it does. The standard definition of this function asks you a question and accepts three possible answers: @table @kbd @item s Steal the lock. Whoever was already changing the file loses the lock, and you get the lock. @item p Proceed. Go ahead and edit the file despite its being locked by someone else. @item q Quit. This causes an error (@code{file-locked}) and the modification you were trying to make in the buffer does not actually take place. @end table Note that locking works on the basis of a file name; if a file has multiple names, Emacs does not realize that the two names are the same file and cannot prevent two users from editing it simultaneously under different names. However, basing locking on names means that Emacs can interlock the editing of new files that do not really exist until they are saved. Some systems are not configured to allow Emacs to make locks. On these systems, Emacs cannot detect trouble in advance, but it can still detect it in time to prevent you from overwriting someone else's changes. Every time Emacs saves a buffer, it first checks the last-modification date of the existing file on disk to see that it has not changed since the file was last visited or saved. If the date does not match, it implies that changes were made in the file in some other way, and these changes are about to be lost if Emacs actually does save. To prevent this, Emacs prints a warning message and asks for confirmation before saving. Occasionally you will know why the file was changed and know that it does not matter; then you can answer @kbd{yes} and proceed. Otherwise, you should cancel the save with @kbd{C-g} and investigate the situation. The first thing you should do when notified that simultaneous editing has already taken place is to list the directory with @kbd{C-u C-x C-d} (@pxref{ListDir,,Directory Listing}). This will show the file's current author. You should attempt to contact that person and ask him not to continue editing. Often the next step is to save the contents of your Emacs buffer under a different name, and use @code{diff} to compare the two files.@refill Simultaneous editing checks are also made when you visit a file that is already visited with @kbd{C-x C-f} and when you start to modify a file. This is not strictly necessary, but it is useful to find out about such a problem as early as possible, when corrective action takes less work. @findex set-default-file-modes @cindex file protection Another way to protect your file is to set the read, write, and executable permissions for the file. Use the function @code{set-default-file-modes} to set the UNIX @code{umask} value to the @var{nmask} argument. The @code{umask} value is the default protection mode for new files. @node Reverting, Auto Save, Saving, Files @section Reverting a Buffer @findex revert-buffer @cindex drastic changes If you have made extensive changes to a file and then change your mind about them, you can get rid of all changes by reading in the previous version of the file. To do this, use @kbd{M-x revert-buffer}, which operates on the current buffer. Since reverting a buffer can result in very extensive changes, you must confirm it with @kbd{yes}. You may request that @code{revert-buffer} check for an auto-save file that is more recent than the visited file by providing a prefix argument. If a recent auto-save file exists, @code{revert-buffer} offers to read the auto-save file instead of the visited file (@pxref{Auto Save}). Emacs asks you about the auto-save file before the request for confirmation of the @kbd{revert-buffer} operation, and demands @kbd{y} or @kbd{n} as an answer. If you have started to type @kbd{yes} to confirm the revert operation, the @kbd{y} will answer the question about using the auto-save file, but the @kbd{es} will not be valid confirmation for the reversion. This gives you a chance to cancel the operation with @kbd{C-g} and try again with the answers you really intend. @code{revert-buffer} preserves the value of point (in characters from the beginning of the file). If the file was edited only slightly, you will be at approximately the same piece of text after reverting as before. If you have made more extensive changes, after reversion point may be in a totally different context than your last edits before reversion. A buffer reverted from its visited file is marked ``not modified'' until you make a change. The buffer's modes will also be recalculated, by @code{normal-mode}. Some kinds of buffers whose contents reflect data bases other than files, such as Dired buffers, can also be reverted. For them, reverting means refreshing their contents from the appropriate data. Buffers created randomly with @kbd{C-x b} cannot be reverted; @code{revert-buffer} reports an error when asked to do so. @node Auto Save, Version Control, Reverting, Files @section Auto-Saving: Protection Against Disasters @cindex Auto-Save mode @cindex crashes Emacs saves all the visited files from time to time (based on counting your keystrokes) without being asked. This is called @dfn{auto-saving}. It prevents you from losing more than a limited amount of work if the system crashes. When Emacs determines it is time for auto-saving, each buffer is considered and is auto-saved if auto-saving is turned on for it and it has changed since the last time it was auto-saved. If any auto-saving is done, the message @samp{Auto-saving...} is displayed in the echo area until auto-saving is finished. Errors occurring during auto-saving are caught so that they do not interfere with the execution of commands you have been typing. @menu * Files: Auto Save Files. * Control: Auto Save Control. * Recover:: Recovering text from auto-save files. @end menu @node Auto Save Files, Auto Save Control, Auto Save, Auto Save @subsection Auto-Save Files Auto-saving does not normally write to the files you visited, because it can be undesirable to save a program that is in an inconsistent state when you have made only half of a planned change. Instead, auto-saving is done in a different file called the @dfn{auto-save file}, and the visited file is changed only when you save explicitly, for example, with @kbd{C-x C-s}. Normally, the name of the auto-save file is generated by appending @samp{#} to the front and back of the visited file name. Thus, a buffer visiting file @file{foo.c} would be auto-saved in a file @file{#foo.c#}. Most buffers that are not visiting files are auto-saved only if you request it explicitly; when they are auto-saved, the auto-save file name is generated by appending @samp{#%} to the front and @samp{#} to the back of buffer name. For example, the @samp{*mail*} buffer in which you compose messages to be sent is auto-saved in a file named @file{#%*mail*#}. Names of auto-save files are generated this way unless you customize the functions @code{make-auto-save-file-name} and @code{auto-save-file-name-p} to do something different. The file name to be used for auto-saving a buffer is calculated at the time auto-saving is turned on in that buffer. @vindex auto-save-visited-file-name If you want auto-saving to be done in the visited file, set the variable @code{auto-save-visited-file-name} to be non-@code{nil}. In this mode, there is really no difference between auto-saving and explicit saving. @vindex delete-auto-save-files Emacs deletes a buffer's auto-save file when you explicitly save the buffer. To inhibit the deletion, set the variable @code{delete-auto-save-files} to @code{nil}. Changing the visited file name with @kbd{C-x C-w} or @code{set-visited-file-name} renames any auto-save file to correspond to the new visited name. @node Auto Save Control, Recover, Auto Save Files, Auto Save @subsection Controlling Auto-Saving @vindex auto-save-default @findex auto-save-mode Each time you visit a file, auto-saving is turned on for that file's buffer if the variable @code{auto-save-default} is non-@code{nil} (but not in batch mode; @pxref{Entering Emacs}). The default for this variable is @code{t}, so Emacs auto-saves buffers that visit files by default. You can use the command @kbd{M-x auto-save-mode} to turn auto-saving for a buffer on or off. Like other minor mode commands, @kbd{M-x auto-save-mode} turns auto-saving on with a positive argument, off with a zero or negative argument; with no argument, it toggles. @vindex auto-save-interval @findex do-auto-save Emacs performs auto-saving periodically based on counting how many characters you have typed since the last time auto-saving happened. The variable @code{auto-save-interval} specifies the number of characters between auto-saves. By default, it is 300. Emacs also auto-saves whenever you call the function @code{do-auto-save}. Emacs also does auto-saving whenever it gets a fatal error. This includes killing the Emacs job with a shell command such as @code{kill -emacs}, or disconnecting a phone line or network connection. @vindex auto-save-timeout You can set the number of seconds of idle time before an auto-save is done. Setting the value of the variable @code{auto-save-timeout} to zero or @code{nil} will disable auto-saving due to idleness. The actual amount of idle time between auto-saves is logarithmically related to the size of the current buffer. This variable is the number of seconds after which an auto-save will happen when the current buffer is 50k or less; the timeout will be 2 1/4 times this in a 200k buffer, 3 3/4 times this in a 1000k buffer, and 4 1/2 times this in a 2000k buffer. For this variable to have any effect, you must do @code{(require 'timer)}. @node Recover, , Auto Save Control, Auto Save @subsection Recovering Data from Auto-Saves @findex recover-file If you want to use the contents of an auto-save file to recover from a loss of data, use the command @kbd{M-x recover-file @key{RET} @var{file} @key{RET}}. Emacs visits @var{file} and then (after your confirmation) restores the contents from the auto-save file @file{#@var{file}#}. You can then save the file with @kbd{C-x C-s} to put the recovered text into @var{file} itself. For example, to recover file @file{foo.c} from its auto-save file @file{#foo.c#}, do:@refill @example M-x recover-file @key{RET} foo.c @key{RET} C-x C-s @end example Before asking for confirmation, @kbd{M-x recover-file} displays a directory listing describing the specified file and the auto-save file, so you can compare their sizes and dates. If the auto-save file is older, @kbd{M-x recover-file} does not offer to read it. Auto-saving is disabled by @kbd{M-x recover-file} because using this command implies that the auto-save file contains valuable data from a past session. If you save the data in the visited file and then go on to make new changes, turn auto-saving back on with @kbd{M-x auto-save-mode}. @node Version Control, ListDir, Auto Save, Files @section Version Control @cindex version control @dfn{Version control systems} are packages that can record multiple versions of a source file, usually storing the unchanged parts of the file just once. Version control systems also record history information such as the creation time of each version, who created it, and a description of what was changed in that version. The GNU project recommends the version control system known as RCS, which is free software and available from the Free Software Foundation. Emacs supports use of either RCS or SCCS (a proprietary, but widely used, version control system that is not quite as powerful as RCS) through a facility called VC. The same Emacs commands work with either RCS or SCCS, so you hardly have to know which one of them you are using. @menu * Concepts of VC:: Basic version control information; checking files in and out. * Editing with VC:: Commands for editing a file maintained with version control. * Variables for Check-in/out:: Variables that affect the commands used to check files in or out. * Log Entries:: Logging your changes. * Change Logs and VC:: Generating a change log file from log entries. * Old Versions:: Examining and comparing old versions. * VC Status:: Commands to view the VC status of files and look at log entries. * Renaming and VC:: A command to rename both the source and master file correctly. * Snapshots:: How to make and use snapshots, a set of file versions that can be treated as a unit. * Version Headers:: Inserting version control headers into working files. @end menu @node Concepts of VC, Editing with VC, Version Control, Version Control @subsection Concepts of Version Control @cindex RCS @cindex SCCS @cindex master file @cindex registered file @cindex work file When a file is under version control, we also say that it is @dfn{registered} in the version control system. Each registered file has a corresponding @dfn{master file} which represents the file's present state plus its change history, so that you can reconstruct from it either the current version or any specified earlier version. Usually the master file also records a @dfn{log entry} for each version describing what was changed in that version. The file that is maintained under version control is sometimes called the @dfn{work file} corresponding to its master file. @cindex checking out files @cindex checking in files @cindex locking and version control To examine a file, you @dfn{check it out}. This extracts a version of the source file (typically, the most recent) from the master file. If you want to edit the file, you must check it out @dfn{locked}. Only one user can do this at a time for any given source file. (This kind of locking is completely unrelated to the locking that Emacs uses to detect simultaneous editing of a file.) When you are done with your editing, you must @dfn{check in} the new version. This records the new version in the master file, and unlocks the source file so that other people can lock it and thus modify it. Checkin and checkout are the basic operations of version control. You can do both of them with a single Emacs command: @w{@kbd{C-x C-q}} (@code{vc-toggle-read-only}). A @dfn{snapshot} is a coherent collection of versions of the various files that make up a program. @xref{Snapshots}. @node Editing with VC, Variables for Check-in/out, Concepts of VC, Version Control @subsection Editing with Version Control When you visit a file that is maintained using version control, the mode line displays @samp{RCS} or @samp{SCCS} to inform you that version control is in use, and also (in case you care) which low-level system the file is actually stored in. Normally, such a source file is read-only, and the mode line indicates this with @samp{%%}. With RCS, the mode line also indicates the number of the head version, which is normally also the version you are looking at. These are the commands for editing a file maintained with version control: @table @kbd @item C-x C-q Check the visited file in or out. @item C-x v u Revert the buffer and the file to the last checked in version. @item C-x v c Remove the last-entered change from the master for the visited file. This undoes your last check-in. @item C-x v i Register the visited file in version control. @end table @noindent (@kbd{C-x v} is the prefix key for version control commands; all of these commands except for @kbd{C-x C-q} start with @kbd{C-x v}.) @kindex C-x C-q @r{(version control)} When you want to modify a file maintained with version control, type @kbd{C-x C-q} (@code{vc-toggle-read-only}). This @dfn{checks out} the file, and tells RCS or SCCS to lock the file. This means making the file writable for you (but not for anyone else). @cindex log entry When you are finished editing the file, type @kbd{C-x C-q} again. When used on a file that is checked out, this command checks the file in. But check-in does not start immediately; first, you must enter the @dfn{log entry}---a description of the changes in the new version. @kbd{C-x C-q} pops up a buffer for you to enter this in. When you are finished typing in the log entry, type @kbd{C-c C-c} to terminate it; this is when actual check-in takes place. Once you have checked in your changes, the file is unlocked, so that other users can lock it and modify it. @vindex vc-make-backup-files Emacs does not save backup files for source files that are maintained with version control. If you want to make backup files despite version control, set the variable @code{vc-make-backup-files} to a non-@code{nil} value. @vindex vc-keep-workfiles Normally the work file exists all the time, whether it is locked or not. If you set @code{vc-keep-workfiles} to @code{nil}, then checking in a new version with @kbd{C-x C-q} deletes the work file; but any attempt to visit the file with Emacs creates it again. It is not impossible to lock a file that someone else has locked. If you try to check out a file that is locked, @kbd{C-x C-q} asks you whether you want to ``steal the lock.'' If you say yes, the file becomes locked by you, but a message is sent to the person who had formerly locked the file, to inform him of what has happened. The mode line indicates that a file is locked by someone else by displaying the login name of that person, before the version number. @kindex C-x v u @findex vc-revert-buffer If you want to discard your current set of changes and revert to the last version checked in, use @kbd{C-x v u} (@code{vc-revert-buffer}). This cancels your last check-out, leaving the file unlocked. If you want to make a different set of changes, you must first check the file out again. @kbd{C-x v u} requires confirmation, unless it sees that you haven't made any changes since the last checked-in version. @kbd{C-x v u} is also the command to use if you lock a file and then don't actually change it. @kindex C-x v c @findex vc-cancel-version You can cancel a change after checking it in, with @kbd{C-x v c} (@code{vc-cancel-version}). This command discards all record of the most recent checked in version, so be careful about using it. It requires confirmation with @kbd{yes}. By default, @kbd{C-x v c} reverts your workfile and buffer to the previous version (the one that precedes the version that is deleted), but you can prevent the reversion by giving the command a prefix argument. Then the buffer does not change. This command with a prefix argument is useful when you have checked in a change and then discover a trivial error in it; you can cancel the erroneous check-in, fix the error, and repeat the check-in. Be careful when invoking @kbd{C-x v c}, as it is easy to throw away a lot of work with it. To help you be careful, this command always requires confirmation with @samp{yes}. @kindex C-x v i @findex vc-register @vindex vc-default-back-end You can register the visited file for version control using @w{@kbd{C-x v i}} (@code{vc-register}). If the variable @code{vc-default-back-end} is non-@code{nil}, it specifies which version control system to use; otherwise, this uses RCS if it is installed on your system and SCCS if not. After @kbd{C-x v i}, the file is unlocked and read-only. Type @kbd{C-x C-q} if you wish to edit it. By default, the initial version number is 1.1. If you want to use a different number, give @kbd{C-x v i} a prefix argument; then it reads the initial version number using the minibuffer. @vindex vc-initial-comment If @code{vc-initial-comment} is non-@code{nil}, @kbd{C-x v i} reads an initial comment (much like a log entry) to describe the purpose of this source file. @kindex C-u C-x v v @findex vc-next-action To specify the version number for a subsequent checkin, use the command @kbd{C-u C-x v v}. @kbd{C-x v v} (@code{vc-next-action}) is the command that @kbd{C-x C-q} uses to do the ``real work'' when the visited file uses version control. When used for checkin, and given a prefix argument, it reads the version number with the minibuffer. @node Variables for Check-in/out, Log Entries, Editing with VC, Version Control @subsection Variables Affecting Check-in and Check-out @c There is no need to tell users about vc-master-templates. @vindex vc-suppress-confirm If @code{vc-suppress-confirm} is non-@code{nil}, then @kbd{C-x C-q} and @kbd{C-x v i} can save the current buffer without asking, and @kbd{C-x v u} also operates without asking for confirmation. (This variable does not affect @kbd{C-x v c}; that is so drastic that it should always ask for confirmation.) @vindex vc-command-messages VC mode does much of its work by running the shell commands for RCS and SCCS. If @code{vc-command-messages} is non-@code{nil}, VC displays messages to indicate which shell commands it runs, and additional messages when the commands finish. Normally, VC assumes that it can deduce the locked/unlocked state of files by looking at the file permissions of the work file; this is fast. However, if the @file{RCS} or @file{SCCS} subdirectory is actually a symbolic link, then VC does not trust the file permissions to reflect this status. @vindex vc-mistrust-permissions You can specify the criterion for whether to trust the file permissions by setting the variable @code{vc-mistrust-permissions}. Its value may be @code{t} (always mistrust the file permissions and check the master file), @code{nil} (always trust the file permissions), or a function of one argument which makes the decision. The argument is the directory name of the @file{RCS} or @file{SCCS} subdirectory. A non-@code{nil} value from the function says to mistrust the file permissions. If you find that the file permissions of work files are changed erroneously, set @code{vc-mistrust-permissions} to @code{t}. Then VC always checks the master file to determine the file's status. @vindex vc-path You can specify additional directories to search for version control programs by setting the variable @code{vc-path}. These directories are searched before the usual search path. The proper result usually happens automatically. @node Log Entries, Change Logs and VC, Variables for Check-in/out, Version Control @subsection Log Entries When you're editing an initial comment or log entry for inclusion in a master file, finish your entry by typing @kbd{C-c C-c}. @table @kbd @item C-c C-c Finish the comment edit normally (@code{vc-finish-logentry}). This finishes check-in. @end table To abort check-in, just don't type @kbd{C-c C-c} in that buffer. You can switch buffers and do other editing. As long as you don't try to check in another file, the entry you were editing remains in its buffer, and you can go back to that buffer at any time to complete the check-in. If you change several source files for the same reason, it is often convenient to specify the same log entry for many of the files. To do this, use the history of previous log entries. The commands @kbd{M-n}, @kbd{M-p}, @kbd{M-s} and @kbd{M-r} for doing this work just like the minibuffer history commands (except that these versions are used outside the minibuffer). @vindex vc-log-mode-hook Each time you check in a file, the log entry buffer is put into VC Log mode, which involves running two hooks: @code{text-mode-hook} and @code{vc-log-mode-hook}. @node Change Logs and VC, Old Versions, Log Entries, Version Control @subsection Change Logs and VC If you use RCS for a program and also maintain a change log file for it (@pxref{Change Log}), you can generate change log entries automatically from the version control log entries: @table @kbd @item C-x v a @kindex C-x v a @findex vc-update-change-log Visit the current directory's change log file and create new entries for versions checked in since the most recent entry in the change log file (@code{vc-update-change-log}). This command works with RCS only; it does not work with SCCS. @end table For example, suppose the first line of @file{ChangeLog} is dated 10 April 1992, and that the only check-in since then was by Nathaniel Bowditch to @file{rcs2log} on 8 May 1992 with log text @samp{Ignore log messages that start with `#'.}. Then @kbd{C-x v a} visits @file{ChangeLog} and inserts text like this: @smallexample @group Fri May 8 21:45:00 1992 Nathaniel Bowditch (nat@@apn.org) * rcs2log: Ignore log messages that start with `#'. @end group @end smallexample @noindent You can then edit the new change log entry further as you wish. Normally, the log entry for file @file{foo} is displayed as @samp{* foo: @var{text of log entry}}. The @samp{:} after @file{foo} is omitted if the text of the log entry starts with @w{@samp{(@var{functionname}): }}. For example, if the log entry for @file{vc.el} is @samp{(vc-do-command): Check call-process status.}, then the text in @file{ChangeLog} looks like this: @smallexample @group Wed May 6 10:53:00 1992 Nathaniel Bowditch (nat@@apn.org) * vc.el (vc-do-command): Check call-process status. @end group @end smallexample When @kbd{C-x v a} adds several change log entries at once, it groups related log entries together if they all are checked in by the same author at nearly the same time. If the log entries for several such files all have the same text, it coalesces them into a single entry. For example, suppose the most recent checkins have the following log entries: @example @exdent For @file{vc.texinfo}: Fix expansion typos. @exdent For @file{vc.el}: Don't call expand-file-name. @exdent For @file{vc-hooks.el}: Don't call expand-file-name. @end example They appear like this in @file{ChangeLog}: @smallexample @group Wed Apr 1 08:57:59 1992 Nathaniel Bowditch (nat@@apn.org) * vc.texinfo: Fix expansion typos. * vc.el, vc-hooks.el: Don't call expand-file-name. @end group @end smallexample Normally, @kbd{C-x v a} separates log entries by a blank line, but you can mark several related log entries to be clumped together (without an intervening blank line) by starting the text of each related log entry with a label of the form @w{@samp{@{@var{clumpname}@} }}. The label itself is not copied to @file{ChangeLog}. For example, suppose the log entries are: @example @exdent For @file{vc.texinfo}: @{expand@} Fix expansion typos. @exdent For @file{vc.el}: @{expand@} Don't call expand-file-name. @exdent For @file{vc-hooks.el}: @{expand@} Don't call expand-file-name. @end example @noindent Then the text in @file{ChangeLog} looks like this: @smallexample @group Wed Apr 1 08:57:59 1992 Nathaniel Bowditch (nat@@apn.org) * vc.texinfo: Fix expansion typos. * vc.el, vc-hooks.el: Don't call expand-file-name. @end group @end smallexample A log entry whose text begins with @samp{#} is not copied to @file{ChangeLog}. For example, if you merely fix some misspellings in comments, you can log the change with an entry beginning with @samp{#} to avoid putting such trivia into @file{ChangeLog}. @node Old Versions, VC Status, Change Logs and VC, Version Control @subsection Examining And Comparing Old Versions @table @kbd @item C-x v ~ @var{version} @key{RET} Examine version @var{version} of the visited file, in a buffer of its own (@code{vc-version-other-window}). @item C-x v = Compare the current buffer contents with the latest checked-in version of the file. @item C-u C-x v = @var{file} @key{RET} @var{oldvers} @key{RET} @var{newvers} @key{RET} Compare the specified two versions of @var{file}. @end table @findex vc-version-other-window @kindex C-x v ~ You can examine any version of a file by first visiting it, and then using @kbd{C-x v ~ @var{version} @key{RET}} (@code{vc-version-other-window}). This puts the text of version @var{version} in a file named @file{@var{filename}.~@var{version}~}, then visits it in a separate window. @findex vc-diff @kindex C-x v = To compare two versions of a file, use the command @kbd{C-x v =} (@code{vc-diff}). Plain @kbd{C-x v =} compares the current buffer contents (saving them in the file if necessary) with the last checked-in version of the file. With a prefix argument, @kbd{C-x v =} reads a file name and two version numbers, then compares those versions of the specified file. If you supply a directory name instead of the name of a work file, this command compares the two specified versions of all registered files in that directory and its subdirectories. You can also specify a snapshot name (@pxref{Snapshots}) instead of one or both version numbers. You can specify a checked-in version by its number; you can specify the most recent checked-in version with an empty version number. This command works by running the @code{vcdiff} utility, getting the options from the variable @code{diff-switches}. It displays the output in a special buffer in another window. Unlike the @kbd{M-x diff} command, @kbd{C-x v =} does not try to find the changes in the old and new versions. This is because one or both versions normally do not exist as files. They exist only in the records of the master file. @xref{Comparing Files}, for more information about @kbd{M-x diff}. @node VC Status, Renaming and VC, Old Versions, Version Control @subsection VC Status Commands @kindex C-x v l @findex vc-print-log To view the detailed version control status and history of a file, type @kbd{C-x v l} (@code{vc-print-log}). It displays the history of changes to the current file, including the text of the log entries. The output appears in a separate window. @kindex C-x v d @findex vc-directory When you are working on a large program, it's often useful to find all the files that are currently locked, or all the files maintained in version control at all. You can use @kbd{C-x v d} (@code{vc-directory}) to show all the locked files in or beneath the current directory. This includes all files that are locked by any user. @kbd{C-u C-x v d} lists all files in or beneath the current directory that are maintained with version control. The list of files is displayed as a buffer that uses an augmented Dired mode. The names of the users locking various files are shown (in parentheses) in place of the owner and group. All the normal Dired commands work in this buffer. Most interactive VC commands work also, and apply to the file name on the current line. The @kbd{C-x v v} command (@code{vc-next-action}), when used in the augmented Dired buffer, operates on all the marked files (or the file on the current line). If it operates on more than one file, it handles each file according to its current state; thus, it may check out one file and check in another (because it is already checked out). If it has to check in any files, it reads a single log entry, then uses that text for all the files being checked in. This can be convenient for registering or checking in several files at once, as part of the same change. @node Renaming and VC, Snapshots, VC Status, Version Control @subsection Renaming VC Work Files and Master Files @findex vc-rename-file When you rename a registered file, you must also rename its master file correspondingly to get proper results. Use @code{vc-rename-file} to rename the source file as you specify, and rename its master file accordingly. It also updates any snapshots (@pxref{Snapshots}) that mention the file, so that they use the new name; despite this, the snapshot thus modified may not completely work (@pxref{Snapshot Caveats}). You cannot use @code{vc-rename-file} on a file that is locked by someone else. @node Snapshots, Version Headers, Renaming and VC, Version Control @subsection Snapshots @cindex snapshots and version control A @dfn{snapshot} is a named set of file versions (one for each registered file) that you can treat as a unit. One important kind of snapshot is a @dfn{release}, a (theoretically) stable version of the system that is ready for distribution to users. @menu * Making Snapshots:: The snapshot facilities. * Snapshot Caveats:: Things to be careful of when using snapshots. @end menu @node Making Snapshots, Snapshot Caveats, Snapshots, Snapshots @subsubsection Making and Using Snapshots There are two basic commands for snapshots; one makes a snapshot with a given name, the other retrieves a named snapshot. @table @code @kindex C-x v s @findex vc-create-snapshot @item C-x v s @var{name} @key{RET} Define the last saved versions of every registered file in or under the current directory as a snapshot named @var{name} (@code{vc-create-snapshot}). @kindex C-x v r @findex vc-retrieve-snapshot @item C-x v r @var{name} @key{RET} Check out all registered files at or below the current directory level using whatever versions correspond to the snapshot @var{name} (@code{vc-retrieve-snapshot}). This command reports an error if any files are locked at or below the current directory, without changing anything; this is to avoid overwriting work in progress. @end table A snapshot uses a very small amount of resources---just enough to record the list of file names and which version belongs to the snapshot. Thus, you need not hesitate to create snapshots whenever they are useful. You can give a snapshot name as an argument to @kbd{C-x v =} or @kbd{C-x v ~} (@pxref{Old Versions}). Thus, you can use it to compare a snapshot against the current files, or two snapshots against each other, or a snapshot against a named version. @node Snapshot Caveats, , Making Snapshots, Snapshots @subsubsection Snapshot Caveats @cindex named configurations (RCS) VC's snapshot facilities are modeled on RCS's named-configuration support. They use RCS's native facilities for this, so under VC snapshots made using RCS are visible even when you bypass VC. @c worded verbosely to avoid overfull hbox. For SCCS, VC implements snapshots itself. The files it uses contain name/file/version-number triples. These snapshots are visible only through VC. A snapshot is a set of checked-in versions. So make sure that all the files are checked in and not locked when you make a snapshot. File renaming and deletion can create some difficulties with snapshots. This is not a VC-specific problem, but a general design issue in version control systems that no one has solved very well yet. If you rename a registered file, you need to rename its master along with it (the command @code{vc-rename-file} does this automatically). If you are using SCCS, you must also update the records of the snapshot, to mention the file by its new name (@code{vc-rename-file} does this, too). An old snapshot that refers to a master file that no longer exists under the recorded name is invalid; VC can no longer retrieve it. It would be beyond the scope of this manual to explain enough about RCS and SCCS to explain how to update the snapshots by hand. Using @code{vc-rename-file} makes the snapshot remain valid for retrieval, but it does not solve all problems. For example, some of the files in the program probably refer to others by name. At the very least, the makefile probably mentions the file that you renamed. If you retrieve an old snapshot, the renamed file is retrieved under its new name, which is not the name that the makefile expects. So the program won't really work as retrieved. @node Version Headers, , Snapshots, Version Control @subsection Inserting Version Control Headers Sometimes it is convenient to put version identification strings directly into working files. Certain special strings called @dfn{version headers} are replaced in each successive version by the number of that version. @kindex C-x v h @findex vc-insert-headers You can use the @kbd{C-x v h} command (@code{vc-insert-headers}) to insert a suitable header string. @table @kbd @item C-x v h Insert headers in a file for use with your version-control system. @end table @vindex vc-header-alist The default header string is @samp{\$Id\$} for RCS and @samp{\%W\%} for SCCS. (The actual strings inserted do not have the backslashes in them. They were placed in the Info source file so that the strings don't get interpreted as version-control headers when the Info source files are maintained under version control.) You can specify other headers to insert by setting the variable @code{vc-header-alist}. Its value is a list of elements of the form @code{(@var{program} . @var{string})} where @var{program} is @code{RCS} or @code{SCCS} and @var{string} is the string to use. Instead of a single string, you can specify a list of strings; then each string in the list is inserted as a separate header on a line of its own. It is often necessary to use ``superfluous'' backslashes when writing the strings that you put in this variable. This is to prevent the string in the constant from being interpreted as a header itself if the Emacs Lisp file containing it is maintained with version control. @vindex vc-comment-alist Each header is inserted surrounded by tabs, inside comment delimiters, on a new line at the start of the buffer. Normally the ordinary comment start and comment end strings of the current mode are used, but for certain modes, there are special comment delimiters for this purpose; the variable @code{vc-comment-alist} specifies them. Each element of this list has the form @code{(@var{mode} @var{starter} @var{ender})}. @vindex vc-static-header-alist The variable @code{vc-static-header-alist} specifies further strings to add based on the name of the buffer. Its value should be a list of elements of the form @code{(@var{regexp} . @var{format})}. Whenever @var{regexp} matches the buffer name, @var{format} is inserted as part of the header. A header line is inserted for each element that matches the buffer name, and for each string specified by @code{vc-header-alist}. The header line is made by processing the string from @code{vc-header-alist} with the format taken from the element. The default value for @code{vc-static-header-alist} is: @example @group (("\\.c$" . "\n#ifndef lint\nstatic char vcid[] = \"\%s\";\n\ #endif /* lint */\n")) @end group @end example @noindent which specifies insertion of a string of this form: @example @group #ifndef lint static char vcid[] = "@var{string}"; #endif /* lint */ @end group @end example @node ListDir, Comparing Files, Version Control, Files @section Listing a File Directory @cindex file directory @cindex directory listing Files are organized by Unix into @dfn{directories}. A @dfn{directory listing} is a list of all the files in a directory. Emacs provides directory listings in brief format (file names only) and verbose format (sizes, dates, and authors included). @table @kbd @item C-x C-d @var{dir-or-pattern} Print a brief directory listing (@code{list-directory}). @item C-u C-x C-d @var{dir-or-pattern} Print a verbose directory listing. @end table @findex list-directory @kindex C-x C-d To print a directory listing, use @kbd{C-x C-d} (@code{list-directory}). This command prompts in the minibuffer for a file name which is either a directory to be listed or pattern containing wildcards for the files to be listed. For example, @example C-x C-d /u2/emacs/etc @key{RET} @end example @noindent lists all the files in directory @file{/u2/emacs/etc}. An example of specifying a file name pattern is: @example C-x C-d /u2/emacs/src/*.c @key{RET} @end example Normally, @kbd{C-x C-d} prints a brief directory listing containing just file names. A numeric argument (regardless of value) tells it to print a verbose listing (like @code{ls -l}). @vindex list-directory-brief-switches @vindex list-directory-verbose-switches Emacs obtains the text of a directory listing by running @code{ls} in an inferior process. Two Emacs variables control the switches passed to @code{ls}: @code{list-directory-brief-switches} is a string giving the switches to use in brief listings (@code{"-CF"} by default). @code{list-directory-verbose-switches} is a string giving the switches to use in a verbose listing (@code{"-l"} by default). The variable @code{directory-abbrev-alist} is an alist of abbreviations for file directories. The list consists of elements of the form @code{(FROM . TO)}, each meaning to replace @code{FROM} with @code{TO} when it appears in a directory name. This replacement is done when setting up the default directory of a newly visited file. Every @code{FROM} string should start with `@samp{^}'. Use this feature when you have directories which you normally refer to via absolute symbolic links. Make @code{TO} the name of the link, and @code{FROM} the name it is linked to. @node Comparing Files, Dired, ListDir, Files @section Comparing Files @cindex comparing files @findex diff @vindex diff-switches The command @kbd{M-x diff} compares two files, displaying the differences in an Emacs buffer named @samp{*Diff*}. It works by running the @code{diff} program, using options taken from the variable @code{diff-switches}, whose value should be a string. The buffer @samp{*Diff*} has Compilation mode as its major mode, so you can use @kbd{C-x `} to visit successive changed locations in the two source files. You can also move to a particular hunk of changes and type @kbd{C-c C-c} to find the corresponding source location. You can also use the other special commands of Compilation mode: @key{SPC} and @key{DEL} for scrolling, and @kbd{M-p} and @kbd{M-n} for cursor motion. @xref{Compilation}. @findex diff-backup The command @kbd{M-x diff-backup} compares a specified file with its most recent backup. If you specify the name of a backup file, @code{diff-backup} compares it with the source file that it is a backup of. @findex compare-windows @cindex comparing files The command @kbd{M-x compare-windows} compares the text in the current window with that in the next window. Comparison starts at point in each window. Point moves forward in each window, a character at a time in each window, until the next characters in the two windows are different. Then the command is finished. For more information about windows in Emacs, @ref{Windows}. @vindex compare-ignore-case With a numeric argument, @code{compare-windows} ignores changes in whitespace. If the variable @code{compare-ignore-case} is non-@code{nil}, it ignores differences in case as well. @node Dired, Misc File Ops, Comparing Files, Files @section Dired, the Directory Editor @cindex Dired @cindex deletion (of files) Dired makes it easy to delete or visit many of the files in a single directory at once. It creates an Emacs buffer containing a listing of the directory. You can use the normal Emacs commands to move around in this buffer and special Dired commands to operate on the files. @menu * Enter: Dired Enter. How to invoke Dired. * Edit: Dired Edit. Editing the Dired buffer. * Deletion: Dired Deletion. Deleting files with Dired. * Immed: Dired Immed. Other file operations through Dired. @end menu @node Dired Enter, Dired Edit, Dired, Dired @subsection Entering Dired @findex dired @kindex C-x d @vindex dired-listing-switches To invoke dired, type @kbd{C-x d} or @kbd{M-x dired}. The command reads a directory name or wildcard file name pattern as a minibuffer argument just like the @code{list-directory} command, @kbd{C-x C-d}. Where @code{dired} differs from @code{list-directory} is in naming the buffer after the directory name or the wildcard pattern used for the listing, and putting the buffer into Dired mode so that the special commands of Dired are available in it. The variable @code{dired-listing-switches} is a string used as an argument to @code{ls} in making the directory; this string @i{must} contain @samp{-l}. @findex dired-other-window @kindex C-x 4 d To display the Dired buffer in another window rather than in the selected window, use @kbd{C-x 4 d} (@code{dired-other-window)} instead of @kbd{C-x d}. @node Dired Edit, Dired Deletion, Dired Enter, Dired @subsection Editing in Dired Once the Dired buffer exists, you can switch freely between it and other Emacs buffers. Whenever the Dired buffer is selected, certain special commands are provided that operate on files that are listed. The Dired buffer is ``read-only'', and inserting text in it is not useful, so ordinary printing characters such as @kbd{d} and @kbd{x} are used for Dired commands. Most Dired commands operate on the file described by the line that point is on. Some commands perform operations immediately; others ``flag'' a file to be operated on later. Most Dired commands that operate on the current line's file also treat a numeric argument as a repeat count, meaning to act on the files of the next few lines. A negative argument means to operate on the files of the preceding lines, and leave point on the first of those lines. All the usual Emacs cursor motion commands are available in Dired buffers. Some special purpose commands are also provided. The keys @kbd{C-n} and @kbd{C-p} are redefined so that they try to position the cursor at the beginning of the filename on the line, rather than at the beginning of the line. For extra convenience, @key{SPC} and @kbd{n} in Dired are equivalent to @kbd{C-n}. @kbd{p} is equivalent to @kbd{C-p}. Moving by lines is done so often in Dired that it deserves to be easy to type. @key{DEL} (move up and unflag) is often useful simply for moving up.@refill The @kbd{g} command in Dired runs @code{revert-buffer} to reinitialize the buffer from the actual disk directory and show any changes made in the directory by programs other than Dired. All deletion flags in the Dired buffer are lost when this is done. @node Dired Deletion, Dired Immed, Dired Edit, Dired @subsection Deleting Files With Dired The primary use of Dired is to flag files for deletion and then delete them. @table @kbd @item d Flag this file for deletion. @item u Remove deletion-flag on this line. @item @key{DEL} Remove deletion-flag on previous line, moving point to that line. @item x Delete the files that are flagged for deletion. @item # Flag all auto-save files (files whose names start and end with @samp{#}) for deletion (@pxref{Auto Save}). @item ~ Flag all backup files (files whose names end with @samp{~}) for deletion (@pxref{Backup}). @item .@: @r{(Period)} Flag excess numeric backup files for deletion. The oldest and newest few backup files of any one file are exempt; the middle ones are flagged. @end table You can flag a file for deletion by moving to the line describing the file and typing @kbd{d} or @kbd{C-d}. The deletion flag is visible as a @samp{D} at the beginning of the line. Point is moved to the beginning of the next line, so that repeated @kbd{d} commands flag successive files. The files are flagged for deletion rather than deleted immediately to avoid the danger of deleting a file accidentally. Until you direct Dired to delete the flagged files, you can remove deletion flags using the commands @kbd{u} and @key{DEL}. @kbd{u} works just like @kbd{d}, but removes flags rather than making flags. @key{DEL} moves upward, removing flags; it is like @kbd{u} with numeric argument automatically negated. To delete the flagged files, type @kbd{x}. This command first displays a list of all the file names flagged for deletion, and requests confirmation with @kbd{yes}. Once you confirm, all the flagged files are deleted, and their lines are deleted from the text of the Dired buffer. The shortened Dired buffer remains selected. If you answer @kbd{no} or quit with @kbd{C-g}, you return immediately to Dired, with the deletion flags still present and no files actually deleted. The @kbd{#}, @kbd{~}, and @kbd{.} commands flag many files for deletion, based on their names. These commands are useful precisely because they do not actually delete any files; you can remove the deletion flags from any flagged files that you really wish to keep.@refill @kbd{#} flags for deletion all files that appear to have been made by auto-saving (that is, files whose names begin and end with @samp{#}). @kbd{~} flags for deletion all files that appear to have been made as backups for files that were edited (that is, files whose names end with @samp{~}). @vindex dired-kept-versions @kbd{.} (Period) flags just some of the backup files for deletion: only numeric backups that are not among the oldest few nor the newest few backups of any one file. Normally @code{dired-kept-versions} (not @code{kept-new-versions}; that applies only when saving) specifies the number of newest versions of each file to keep, and @code{kept-old-versions} specifies the number of oldest versions to keep. Period with a positive numeric argument, as in @kbd{C-u 3 .}, specifies the number of newest versions to keep, overriding @code{dired-kept-versions}. A negative numeric argument overrides @code{kept-old-versions}, using minus the value of the argument to specify the number of oldest versions of each file to keep.@refill @node Dired Immed, , Dired Deletion, Dired @subsection Immediate File Operations in Dired Some file operations in Dired take place immediately when they are requested. @table @kbd @item C Copies the file described on the current line. You must supply a file name to copy to, using the minibuffer. @item f Visits the file described on the current line. It is just like typing @kbd{C-x C-f} and supplying that file name. If the file on this line is a subdirectory, @kbd{f} actually causes Dired to be invoked on that subdirectory. @xref{Visiting}. @item o Like @kbd{f}, but uses another window to display the file's buffer. The Dired buffer remains visible in the first window. This is like using @kbd{C-x 4 C-f} to visit the file. @xref{Windows}. @item R Renames the file described on the current line. You must supply a file name to rename to, using the minibuffer. @item v Views the file described on this line using @kbd{M-x view-file}. Viewing a file is like visiting it, but is slanted toward moving around in the file conveniently and does not allow changing the file. @xref{Misc File Ops,View File}. Viewing a file that is a directory runs Dired on that directory.@refill @end table @node Misc File Ops, , Dired, Files @section Miscellaneous File Operations Emacs has commands for performing many other operations on files. All operate on one file; they do not accept wildcard file names. @findex add-name-to-file You can use the command @kbd{M-x add-name-to-file} to add a name to an existing file without removing the old name. The new name must belong on the file system that the file is on. @findex append-to-file @kbd{M-x append-to-file} adds the text of the region to the end of the specified file. @findex copy-file @cindex copying files @kbd{M-x copy-file} reads the file @var{old} and writes a new file named @var{new} with the same contents. Confirmation is required if a file named @var{new} already exists, because copying overwrites the old contents of the file @var{new}. @findex delete-file @cindex deletion (of files) @kbd{M-x delete-file} deletes a specified file, like the @code{rm} command in the shell. If you are deleting many files in one directory, it may be more convenient to use Dired (@pxref{Dired}). @findex insert-file @kbd{M-x insert-file} inserts a copy of the contents of a specified file into the current buffer at point, leaving point unchanged before the contents and the mark after them. @xref{Mark}. @findex make-symbolic-link @kbd{M-x make-symbolic-link} reads two file names @var{old} and @var{linkname}, and then creates a symbolic link named @var{linkname} and pointing at @var{old}. Future attempts to open file @var{linkname} will then refer to the file named @var{old} at the time the opening is done, or will result in an error if the name @var{old} is not in use at that time. Confirmation is required if you create the link while @var{linkname} is in use. Note that not all systems support symbolic links. @findex rename-file @kbd{M-x rename-file} reads two file names @var{old} and @var{new} using the minibuffer, then renames file @var{old} as @var{new}. If a file named @var{new} already exists, you must confirm with @kbd{yes} or renaming is not done; this is because renaming causes the previous meaning of the name @var{new} to be lost. If @var{old} and @var{new} are on different file systems, the file @var{old} is copied and deleted. @findex view-file @cindex viewing @kbd{M-x view-file} allows you to scan or read a file by sequential screenfuls. It reads a file name argument using the minibuffer. After reading the file into an Emacs buffer, @code{view-file} reads and displays one windowful. You can then type @key{SPC} to scroll forward one window, or @key{DEL} to scroll backward. Various other commands are provided for moving around in the file, but none for changing it; type @kbd{C-h} while viewing a file for a list of them. Most commands are the default Emacs cursor motion commands. To exit from viewing, type @kbd{C-c}. texi2html-1.82/test/xemacs_manual/xemacs.texi0000644000175000017500000013334511264347115023214 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename ../../info/xemacs.info @comment node-name, next, previous, up @ifinfo @dircategory XEmacs Editor @direntry * XEmacs: (xemacs). XEmacs Editor. @end direntry This file documents the XEmacs editor. Copyright (C) 1985, 1986, 1988 Richard M. Stallman. Copyright @copyright{} 1991, 1992, 1993, 1994 Lucid, Inc. Copyright @copyright{} 1993, 1994 Sun Microsystems, Inc. Copyright @copyright{} 1995 Amdahl Corporation. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. @ignore Permission is granted to process this file through Tex and print the results, provided the printed document carries copying permission notice identical to this one except for the removal of this paragraph (this paragraph not being relevant to the printed manual). @end ignore Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided also that the sections entitled ``The GNU Manifesto'', ``Distribution'' and ``GNU General Public License'' are included exactly as in the original, and provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that the sections entitled ``The GNU Manifesto'', ``Distribution'' and ``GNU General Public License'' may be included in a translation approved by the author instead of in the original English. @end ifinfo @c @setchapternewpage odd @settitle XEmacs User's Manual @c @titlepage @sp 6 @center @titlefont{XEmacs User's Manual} @sp 4 @sp 1 @sp 1 @center July 1994 @center (General Public License upgraded, January 1991) @sp 5 @center Richard Stallman @sp 1 @center Lucid, Inc. @sp 1 @center and @sp 1 @center Ben Wing @page @vskip 0pt plus 1filll Copyright @copyright{} 1985, 1986, 1988 Richard M. Stallman. Copyright @copyright{} 1991, 1992, 1993, 1994 Lucid, Inc. Copyright @copyright{} 1993, 1994 Sun Microsystems, Inc. Copyright @copyright{} 1995 Amdahl Corporation. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided also that the sections entitled ``The GNU Manifesto'', ``Distribution'' and ``GNU General Public License'' are included exactly as in the original, and provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that the sections entitled ``The GNU Manifesto'', ``Distribution'' and ``GNU General Public License'' may be included in a translation approved by the author instead of in the original English. @end titlepage @page @ifinfo @node Top, License,, (dir) @top The XEmacs Editor XEmacs is the extensible, customizable, self-documenting real-time display editor. This Info file describes how to edit with Emacs and some of how to customize it, but not how to extend it. It corresponds to XEmacs version 21.0. This manual is intended as a detailed reference to XEmacs. If you are looking for an introductory manual, see the New User's Guide. @end ifinfo @menu * License:: The GNU General Public License gives you permission to redistribute XEmacs on certain terms; and also explains that there is no warranty. * Distrib:: How to get XEmacs. * Intro:: An introduction to XEmacs concepts. * Glossary:: The glossary. * Manifesto:: What's GNU? Gnu's Not Unix! Indices, nodes containing large menus * Key Index:: An item for each standard XEmacs key sequence. * Command Index:: An item for each command name. * Variable Index:: An item for each documented variable. * Concept Index:: An item for each concept. Important General Concepts * Frame:: How to interpret what you see on the screen. * Keystrokes:: Keyboard gestures XEmacs recognizes. * Pull-down Menus:: The XEmacs Pull-down Menus available under X. * Entering Emacs:: Starting Emacs from the shell. * Exiting:: Stopping or killing XEmacs. * Command Switches:: Hairy startup options. * Startup Paths:: How XEmacs finds Directories and Files. * Packages:: How XEmacs organizes its high-level functionality. Fundamental Editing Commands * Basic:: The most basic editing commands. * Undo:: Undoing recently made changes in the text. * Minibuffer:: Entering arguments that are prompted for. * M-x:: Invoking commands by their names. * Help:: Commands for asking XEmacs about its commands. Important Text-Changing Commands * Mark:: The mark: how to delimit a ``region'' of text. * Mouse Selection:: Selecting text with the mouse. * Additional Mouse Operations:: Other operations available from the mouse. * Killing:: Killing text. * Yanking:: Recovering killed text. Moving text. * Using X Selections:: Using primary selection, cut buffers, and highlighted regions. * Accumulating Text:: Other ways of copying text. * Rectangles:: Operating on the text inside a rectangle on the screen. * Registers:: Saving a text string or a location in the buffer. * Display:: Controlling what text is displayed. * Search:: Finding or replacing occurrences of a string. * Fixit:: Commands especially useful for fixing typos. Larger Units of Text * Files:: All about handling files. * Buffers:: Multiple buffers; editing several files at once. * Windows:: Viewing two pieces of text at once. * Mule:: Using world scripts. Advanced Features * Major Modes:: Text mode vs. Lisp mode vs. C mode ... * Indentation:: Editing the white space at the beginnings of lines. * Text:: Commands and modes for editing English. * Programs:: Commands and modes for editing programs. * Running:: Compiling, running and debugging programs. * Abbrevs:: How to define text abbreviations to reduce the number of characters you must type. * Picture:: Editing pictures made up of characters using the quarter-plane screen model. * Sending Mail:: Sending mail in XEmacs. * Reading Mail:: Reading mail in XEmacs. * Calendar/Diary:: A Calendar and diary facility in XEmacs. * Sorting:: Sorting lines, paragraphs or pages within XEmacs. * Shell:: Executing shell commands from XEmacs. * Narrowing:: Restricting display and editing to a portion of the buffer. * Hardcopy:: Printing buffers or regions. * Recursive Edit:: A command can allow you to do editing "within the command". This is called a `recursive editing level'. * Dissociated Press:: Dissociating text for fun. * CONX:: A different kind of dissociation. * Amusements:: Various games and hacks. * Emulation:: Emulating some other editors with XEmacs. * Customization:: Modifying the behavior of XEmacs. Recovery from Problems. * Quitting:: Quitting and aborting. * Lossage:: What to do if XEmacs is hung or malfunctioning. * Bugs:: How and when to report a bug. Here are some other nodes which are really inferiors of the ones already listed, mentioned here so you can get to them in one step: --- The Detailed Node Listing --- The Organization of the Frame * Point:: The place in the text where editing commands operate. * Echo Area:: Short messages appear at the bottom of the frame. * Mode Line:: Interpreting the mode line. * XEmacs under X:: Some information on using XEmacs under the X Window System. Keystrokes * Intro to Keystrokes:: Keystrokes as building blocks of key sequences. * Representing Keystrokes:: Using lists of modifiers and keysyms to represent keystrokes. * Key Sequences:: Combine key strokes into key sequences you can bind to commands. * String Key Sequences:: Available for upward compatibility. * Meta Key:: Using @key{ESC} to represent @key{Meta} * Super and Hyper Keys:: Adding modifier keys on certain keyboards. * Character Representation:: How characters appear in XEmacs buffers. * Commands:: How commands are bound to key sequences. Pull-down Menus * File Menu:: Items on the File menu. * Edit Menu:: Items on the Edit menu. * Apps Menu:: Items on the Apps menu. * Options Menu:: Items on the Options menu. * Buffers Menu:: Information about the Buffers menu. * Tools Menu:: Items on the Tools menu. * Help Menu:: Items on the Help menu. * Menu Customization:: Adding and removing menu items and related operations. Packages * Packages:: Introduction to XEmacs Packages. * Package Terminology:: Understanding different kinds of packages. * Installing Packages:: How to install packages. * Building Packages:: Building packages from sources. * Local.rules File:: An important part of building packages. * Creating Packages:: The basics. * Available Packages:: A brief directory of packaged LISP. Basic Editing Commands * Blank Lines:: Commands to make or delete blank lines. * Continuation Lines:: Lines too wide for the frame. * Position Info:: What page, line, row, or column is point on? * Arguments:: Numeric arguments for repeating a command. The Minibuffer * File: Minibuffer File. Entering file names with the minibuffer. * Edit: Minibuffer Edit. How to edit in the minibuffer. * Completion:: An abbreviation facility for minibuffer input. * Repetition:: Re-executing commands that used the minibuffer. The Mark and the Region * Setting Mark:: Commands to set the mark. * Using Region:: Summary of ways to operate on contents of the region. * Marking Objects:: Commands to put region around textual units. * Mark Ring:: Previous mark positions saved so you can go back there. Yanking * Kill Ring:: Where killed text is stored. Basic yanking. * Appending Kills:: Several kills in a row all yank together. * Earlier Kills:: Yanking something killed some time ago. Using X Selections * X Clipboard Selection:: Pasting to the X clipboard. * X Selection Commands:: Other operations on the selection. * X Cut Buffers:: X cut buffers are available for compatibility. * Active Regions:: Using zmacs-style highlighting of the selected region. Registers * Position: RegPos. Saving positions in registers. * Text: RegText. Saving text in registers. * Rectangle: RegRect. Saving rectangles in registers. * Configurations: RegConfig. Saving window configurations in registers. * Files: RegFiles. File names in registers. * Numbers: RegNumbers. Numbers in registers. * Bookmarks:: Bookmarks are like registers, but persistent. Controlling the Display * Scrolling:: Moving text up and down in a window. * Horizontal Scrolling:: Moving text left and right in a window. * Selective Display:: Hiding lines with lots of indentation. * Display Vars:: Information on variables for customizing display. Searching and Replacement * Incremental Search:: Search happens as you type the string. * Non-Incremental Search:: Specify entire string and then search. * Word Search:: Search for sequence of words. * Regexp Search:: Search for match for a regexp. * Regexps:: Syntax of regular expressions. * Search Case:: To ignore case while searching, or not. * Replace:: Search, and replace some or all matches. * Other Repeating Search:: Operating on all matches for some regexp. Replacement Commands * Unconditional Replace:: Replacing all matches for a string. * Regexp Replace:: Replacing all matches for a regexp. * Replacement and Case:: How replacements preserve case of letters. * Query Replace:: How to use querying. Commands for Fixing Typos * Kill Errors:: Commands to kill a batch of recently entered text. * Transpose:: Exchanging two characters, words, lines, lists... * Fixing Case:: Correcting case of last word entered. * Spelling:: Apply spelling checker to a word, or a whole file. File Handling * File Names:: How to type and edit file name arguments. * Visiting:: Visiting a file prepares XEmacs to edit the file. * Saving:: Saving makes your changes permanent. * Reverting:: Reverting cancels all the changes not saved. * Auto Save:: Auto Save periodically protects against loss of data. * Version Control:: Version control systems (RCS and SCCS). * ListDir:: Listing the contents of a file directory. * Comparing Files:: Finding where two files differ. * Dired:: ``Editing'' a directory to delete, rename, etc. the files in it. * Misc File Ops:: Other things you can do on files. Saving Files * Backup:: How XEmacs saves the old version of your file. * Interlocking:: How XEmacs protects against simultaneous editing of one file by two users. Backup Files * Names: Backup Names. How backup files are named; Choosing single or numbered backup files. * Deletion: Backup Deletion. XEmacs deletes excess numbered backups. * Copying: Backup Copying. Backups can be made by copying or renaming. Auto-Saving: Protection Against Disasters * Files: Auto Save Files. * Control: Auto Save Control. * Recover:: Recovering text from auto-save files. Version Control * Concepts of VC:: Basic version control information; checking files in and out. * Editing with VC:: Commands for editing a file maintained with version control. * Variables for Check-in/out:: Variables that affect the commands used to check files in or out. * Log Entries:: Logging your changes. * Change Logs and VC:: Generating a change log file from log entries. * Old Versions:: Examining and comparing old versions. * VC Status:: Commands to view the VC status of files and look at log entries. * Renaming and VC:: A command to rename both the source and master file correctly. * Snapshots:: How to make and use snapshots, a set of file versions that can be treated as a unit. * Version Headers:: Inserting version control headers into working files. Snapshots * Making Snapshots:: The snapshot facilities. * Snapshot Caveats:: Things to be careful of when using snapshots. Dired, the Directory Editor * Enter: Dired Enter. How to invoke Dired. * Edit: Dired Edit. Editing the Dired buffer. * Deletion: Dired Deletion. Deleting files with Dired. * Immed: Dired Immed. Other file operations through Dired. Using Multiple Buffers * Select Buffer:: Creating a new buffer or reselecting an old one. * List Buffers:: Getting a list of buffers that exist. * Misc Buffer:: Renaming; changing read-onliness; copying text. * Kill Buffer:: Killing buffers you no longer need. * Several Buffers:: How to go through the list of all buffers and operate variously on several of them. Multiple Windows * Basic Window:: Introduction to XEmacs windows. * Split Window:: New windows are made by splitting existing windows. * Other Window:: Moving to another window or doing something to it. * Pop Up Window:: Finding a file or buffer in another window. * Change Window:: Deleting windows and changing their sizes. Major Modes * Choosing Modes:: How major modes are specified or chosen. Indentation * Indentation Commands:: Various commands and techniques for indentation. * Tab Stops:: You can set arbitrary "tab stops" and then indent to the next tab stop when you want to. * Just Spaces:: You can request indentation using just spaces. Commands for Human Languages * Text Mode:: The major modes for editing text files. * Nroff Mode:: The major mode for editing input to the formatter nroff. * TeX Mode:: The major modes for editing input to the formatter TeX. * Outline Mode:: The major mode for editing outlines. * Words:: Moving over and killing words. * Sentences:: Moving over and killing sentences. * Paragraphs:: Moving over paragraphs. * Pages:: Moving over pages. * Filling:: Filling or justifying text * Case:: Changing the case of text @TeX{} Mode * Editing: TeX Editing. Special commands for editing in TeX mode. * Printing: TeX Print. Commands for printing part of a file with TeX. Outline Mode * Format: Outline Format. What the text of an outline looks like. * Motion: Outline Motion. Special commands for moving through outlines. * Visibility: Outline Visibility. Commands to control what is visible. Filling Text * Auto Fill:: Auto Fill mode breaks long lines automatically. * Fill Commands:: Commands to refill paragraphs and center lines. * Fill Prefix:: Filling when every line is indented or in a comment, etc. Editing Programs * Program Modes:: Major modes for editing programs. * Lists:: Expressions with balanced parentheses. There are editing commands to operate on them. * Defuns:: Each program is made up of separate functions. There are editing commands to operate on them. * Grinding:: Adjusting indentation to show the nesting. * Matching:: Insertion of a close-delimiter flashes matching open. * Comments:: Inserting, filling and aligning comments. * Balanced Editing:: Inserting two matching parentheses at once, etc. * Lisp Completion:: Completion on symbol names in Lisp code. * Documentation:: Getting documentation of functions you plan to call. * Change Log:: Maintaining a change history for your program. * Tags:: Go directly to any function in your program in one command. Tags remembers which file it is in. * Fortran:: Fortran mode and its special features. * Asm Mode:: Asm mode and its special features. Indentation for Programs * Basic Indent:: * Multi-line Indent:: Commands to reindent many lines at once. * Lisp Indent:: Specifying how each Lisp function should be indented. * C Indent:: Choosing an indentation style for C code. Tags Tables * Tag Syntax:: Tag syntax for various types of code and text files. * Create Tags Table:: Creating a tags table with @code{etags}. * Select Tags Table:: How to visit a tags table. * Find Tag:: Commands to find the definition of a specific tag. * Tags Search:: Using a tags table for searching and replacing. * List Tags:: Listing and finding tags defined in a file. Fortran Mode * Motion: Fortran Motion. Moving point by statements or subprograms. * Indent: Fortran Indent. Indentation commands for Fortran. * Comments: Fortran Comments. Inserting and aligning comments. * Columns: Fortran Columns. Measuring columns for valid Fortran. * Abbrev: Fortran Abbrev. Built-in abbrevs for Fortran keywords. Fortran Indentation * Commands: ForIndent Commands. Commands for indenting Fortran. * Numbers: ForIndent Num. How line numbers auto-indent. * Conv: ForIndent Conv. Conventions you must obey to avoid trouble. * Vars: ForIndent Vars. Variables controlling Fortran indent style. Compiling and Testing Programs * Compilation:: Compiling programs in languages other than Lisp (C, Pascal, etc.) * Modes: Lisp Modes. Various modes for editing Lisp programs, with different facilities for running the Lisp programs. * Libraries: Lisp Libraries. Creating Lisp programs to run in XEmacs. * Eval: Lisp Eval. Executing a single Lisp expression in XEmacs. * Debug: Lisp Debug. Debugging Lisp programs running in XEmacs. * Interaction: Lisp Interaction. Executing Lisp in an XEmacs buffer. * External Lisp:: Communicating through XEmacs with a separate Lisp. Lisp Libraries * Loading:: Loading libraries of Lisp code into XEmacs for use. * Compiling Libraries:: Compiling a library makes it load and run faster. * Mocklisp:: Converting Mocklisp to Lisp so XEmacs can run it. Abbrevs * Defining Abbrevs:: Defining an abbrev, so it will expand when typed. * Expanding Abbrevs:: Controlling expansion: prefixes, canceling expansion. * Editing Abbrevs:: Viewing or editing the entire list of defined abbrevs. * Saving Abbrevs:: Saving the entire list of abbrevs for another session. * Dynamic Abbrevs:: Abbreviations for words already in the buffer. Editing Pictures * Basic Picture:: Basic concepts and simple commands of Picture Mode. * Insert in Picture:: Controlling direction of cursor motion after "self-inserting" characters. * Tabs in Picture:: Various features for tab stops and indentation. * Rectangles in Picture:: Clearing and superimposing rectangles. Sending Mail * Format: Mail Format. Format of the mail being composed. * Headers: Mail Headers. Details of allowed mail header fields. * Mode: Mail Mode. Special commands for editing mail being composed. Running Shell Commands from XEmacs * Single Shell:: How to run one shell command and return. * Interactive Shell:: Permanent shell taking input via XEmacs. * Shell Mode:: Special XEmacs commands used with permanent shell. Customization * Minor Modes:: Each minor mode is one feature you can turn on independently of any others. * Variables:: Many XEmacs commands examine XEmacs variables to decide what to do; by setting variables, you can control their functioning. * Keyboard Macros:: A keyboard macro records a sequence of keystrokes to be replayed with a single command. * Key Bindings:: The keymaps say what command each key runs. By changing them, you can "redefine keys". * Syntax:: The syntax table controls how words and expressions are parsed. * Init File:: How to write common customizations in the init file. * Audible Bell:: Changing how XEmacs sounds the bell. * Faces:: Changing the fonts and colors of a region of text. * X Resources:: X resources controlling various aspects of the behavior of XEmacs. Variables * Examining:: Examining or setting one variable's value. * Easy Customization:: Convenient and easy customization of variables. * Edit Options:: Examining or editing list of all variables' values. * Locals:: Per-buffer values of variables. * File Variables:: How files can specify variable values. Keyboard Macros * Basic Kbd Macro:: Defining and running keyboard macros. * Save Kbd Macro:: Giving keyboard macros names; saving them in files. * Kbd Macro Query:: Keyboard macros that do different things each use. Customizing Key Bindings * Keymaps:: Definition of the keymap data structure. Names of XEmacs's standard keymaps. * Rebinding:: How to redefine one key's meaning conveniently. * Disabling:: Disabling a command means confirmation is required before it can be executed. This is done to protect beginners from surprises. The Syntax Table * Entry: Syntax Entry. What the syntax table records for each character. * Change: Syntax Change. How to change the information. The Init File * Init Syntax:: Syntax of constants in Emacs Lisp. * Init Examples:: How to do some things with an init file. * Terminal Init:: Each terminal type can have an init file. Dealing with XEmacs Trouble * Stuck Recursive:: `[...]' in mode line around the parentheses. * Screen Garbled:: Garbage on the screen. * Text Garbled:: Garbage in the text. * Unasked-for Search:: Spontaneous entry to incremental search. * Emergency Escape:: Emergency escape--- What to do if XEmacs stops responding. * Total Frustration:: When you are at your wits' end. @end menu @iftex @unnumbered Preface This manual documents the use and simple customization of the XEmacs editor. The reader is not expected to be a programmer to use this editor, and simple customizations do not require programming skills either. Users who are not interested in customizing XEmacs can ignore the scattered customization hints. This document is primarily a reference manual, but it can also be used as a primer. However, if you are new to XEmacs, consider using the on-line, learn-by-doing tutorial, which you get by running XEmacs and typing @kbd{C-h t}. With it, you learn XEmacs by using XEmacs on a specially designed file which describes commands, tells you when to try them, and then explains the results you see. Using the tutorial gives a more vivid introduction than the printed manual. Also consider reading the XEmacs New User's Guide, which is intended specifically as an introductory manual rather than as a reference guide. On first reading, just skim chapters one and two, which describe the notational conventions of the manual and the general appearance of the XEmacs display frame. Note which questions are answered in these chapters, so you can refer back later. After reading chapter four you should practice the commands there. The next few chapters describe fundamental techniques and concepts that are used constantly. You need to understand them thoroughly, experimenting with them if necessary. To find the documentation on a particular command, look in the index. Keys (character commands) and command names have separate indexes. There is also a glossary, with a cross reference for each term. @ignore If you know vaguely what the command does, look in the command summary. The command summary contains a line or two about each command, and a cross reference to the section of the manual that describes the command in more detail; related commands are grouped together. @end ignore This manual comes in two forms: the published form and the Info form. The Info form is for on-line perusal with the INFO program; it is distributed along with XEmacs. Both forms contain substantially the same text and are generated from a common source file, which is also distributed along with XEmacs. XEmacs is a member of the Emacs editor family. There are many Emacs editors, all sharing common principles of organization. For information on the underlying philosophy of Emacs and the lessons learned from its development, write for a copy of AI memo 519a, ``Emacs, the Extensible, Customizable Self-Documenting Display Editor'', to Publications Department, Artificial Intelligence Lab, 545 Tech Square, Cambridge, MA 02139, USA. At last report they charge $2.25 per copy. Another useful publication is LCS TM-165, ``A Cookbook for an Emacs'', by Craig Finseth, available from Publications Department, Laboratory for Computer Science, 545 Tech Square, Cambridge, MA 02139, USA. The price today is $3. This manual is for XEmacs installed on UNIX systems. XEmacs also exists on Microsoft Windows and Windows NT as Win-Emacs (which is actually based on Lucid Emacs 19.6, an older incarnation of XEmacs). @end iftex @comment node-name, next, previous, up @node License, Distrib, Top, Top @unnumbered GNU GENERAL PUBLIC LICENSE @center Version 1, February 1989 @cindex license to copy XEmacs @cindex General Public License @display Copyright @copyright{} 1989 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @end display @unnumberedsec Preamble The license agreements of most software companies try to keep users at the mercy of those companies. By contrast, our General Public License is intended to guarantee your freedom to share and change free software---to make sure the software is free for all its users. The General Public License applies to the Free Software Foundation's software and to any other program whose authors commit to using it. You can use it for your programs, too. When we speak of free software, we are referring to freedom, not price. Specifically, the General Public License is designed to make sure that you have the freedom to give away or sell copies of free software, that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of a such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must tell them their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. The precise terms and conditions for copying, distribution and modification follow. @iftex @unnumberedsec TERMS AND CONDITIONS @end iftex @ifinfo @center TERMS AND CONDITIONS @end ifinfo @enumerate @item This License Agreement applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The ``Program'', below, refers to any such program or work, and a ``work based on the Program'' means either the Program or any work containing the Program or a portion of it, either verbatim or with modifications. Each licensee is addressed as ``you''. @item @cindex Distribution You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this General Public License and to the absence of any warranty; and give any other recipients of the Program a copy of this General Public License along with the Program. You may charge a fee for the physical act of transferring a copy. @item You may modify your copy or copies of the Program or any portion of it, and copy and distribute such modifications under the terms of Paragraph 1 above, provided that you also do the following: @itemize @bullet @item cause the modified files to carry prominent notices stating that you changed the files and the date of any change; and @item cause the whole of any work that you distribute or publish, that in whole or in part contains the Program or any part thereof, either with or without modifications, to be licensed at no charge to all third parties under the terms of this General Public License (except that you may choose to grant warranty protection to some or all third parties, at your option). @item If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the simplest and most usual way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this General Public License. @item You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. @end itemize Mere aggregation of another independent work with the Program (or its derivative) on a volume of a storage or distribution medium does not bring the other work under the scope of these terms. @item You may copy and distribute the Program (or a portion or derivative of it, under Paragraph 2) in object code or executable form under the terms of Paragraphs 1 and 2 above provided that you also do one of the following: @itemize @bullet @item accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Paragraphs 1 and 2 above; or, @item accompany it with a written offer, valid for at least three years, to give any third party free (except for a nominal charge for the cost of distribution) a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Paragraphs 1 and 2 above; or, @item accompany it with the information you received as to where the corresponding source code may be obtained. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form alone.) @end itemize Source code for a work means the preferred form of the work for making modifications to it. For an executable file, complete source code means all the source code for all modules it contains; but, as a special exception, it need not include source code for modules which are standard libraries that accompany the operating system on which the executable file runs, or for standard header files or definitions files that accompany that operating system. @item You may not copy, modify, sublicense, distribute or transfer the Program except as expressly provided under this General Public License. Any attempt otherwise to copy, modify, sublicense, distribute or transfer the Program is void, and will automatically terminate your rights to use the Program under this License. However, parties who have received copies, or rights to use copies, from you under this General Public License will not have their licenses terminated so long as such parties remain in full compliance. @item By copying, distributing or modifying the Program (or any work based on the Program) you indicate your acceptance of this license to do so, and all its terms and conditions. @item Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. @page @item The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of the license which applies to it and ``any later version'', you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the license, you may choose any version ever published by the Free Software Foundation. @item If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. @iftex @heading NO WARRANTY @end iftex @ifinfo @center NO WARRANTY @end ifinfo @item BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. @item IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. @end enumerate @iftex @heading END OF TERMS AND CONDITIONS @end iftex @ifinfo @center END OF TERMS AND CONDITIONS @end ifinfo @page @unnumberedsec Appendix: How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to humanity, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the ``copyright'' line and a pointer to where the full notice is found. @smallexample @var{one line to give the program's name and a brief idea of what it does.} Copyright (C) 19@var{yy} @var{name of author} This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 1, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. @end smallexample Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: @smallexample Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author} Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. @end smallexample The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items---whatever suits your program. @page You should also get your employer (if you work as a programmer) or your school, if any, to sign a ``copyright disclaimer'' for the program, if necessary. Here a sample; alter the names: @example Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (a program to direct compilers to make passes at assemblers) written by James Hacker. @var{signature of Ty Coon}, 1 April 1989 Ty Coon, President of Vice @end example That's all there is to it! @comment node-name, next, previous, up @node Distrib, Intro, License, Top @unnumbered Distribution XEmacs is @dfn{free}; this means that everyone is free to use it and free to redistribute it on a free basis. XEmacs is not in the public domain; it is copyrighted and there are restrictions on its distribution, but these restrictions are designed to permit everything that a good cooperating citizen would want to do. What is not allowed is to try to prevent others from further sharing any version of XEmacs that they might get from you. The precise conditions are found in the GNU General Public License that comes with XEmacs and also appears following this section. The easiest way to get a copy of XEmacs is from someone else who has it. You need not ask for permission to do so, or tell any one else; just copy it. If you have access to the Internet, you can get the latest version of XEmacs from the anonymous FTP server @file{ftp.xemacs.org} in the directory @file{/pub/xemacs}. It can also be found at numerous other archive sites around the world; check the file @file{etc/DISTRIB} in an XEmacs distribution for the latest known list. @unnumberedsec Getting Other Versions of Emacs The Free Software Foundation's version of Emacs (called @dfn{FSF Emacs} in this manual and often referred to as @dfn{GNU Emacs}) is available by anonymous FTP from @file{prep.ai.mit.edu}. Win-Emacs, an older version of XEmacs that runs on Microsoft Windows and Windows NT, is available by anonymous FTP from @file{ftp.netcom.com} in the directory @file{/pub/pe/pearl}, or from @file{ftp.cica.indiana.edu} as the files @file{wemdemo*.zip} in the directory @file{/pub/pc/win3/demo}. @node Intro, Glossary, Distrib, Top @unnumbered Introduction You are reading about XEmacs, an incarnation of the advanced, self-documenting, customizable, extensible real-time display editor Emacs. XEmacs provides many powerful display and user-interface capabilities not found in other Emacsen and is mostly upwardly compatible with GNU Emacs from the Free Software Foundation (referred to as @dfn{FSF Emacs} in this manual). XEmacs also comes standard with a great number of useful packages. We say that XEmacs is a @dfn{display} editor because normally the text being edited is visible on the screen and is updated automatically as you type. @xref{Frame,Display}. We call XEmacs a @dfn{real-time} editor because the display is updated very frequently, usually after each character or pair of characters you type. This minimizes the amount of information you must keep in your head as you edit. @xref{Basic,Real-time,Basic Editing}. We call XEmacs advanced because it provides facilities that go beyond simple insertion and deletion: filling of text; automatic indentation of programs; viewing two or more files at once; and dealing in terms of characters, words, lines, sentences, paragraphs, and pages, as well as expressions and comments in several different programming languages. It is much easier to type one command meaning ``go to the end of the paragraph'' than to find that spot with simple cursor keys. @dfn{Self-documenting} means that at any time you can type a special character, @kbd{Control-h}, to find out what your options are. You can also use @kbd{C-h} to find out what a command does, or to find all the commands relevant to a topic. @xref{Help}. @dfn{Customizable} means you can change the definitions of XEmacs commands. For example, if you use a programming language in which comments start with @samp{<**} and end with @samp{**>}, you can tell the XEmacs comment manipulation commands to use those strings (@pxref{Comments}). Another sort of customization is rearrangement of the command set. For example, you can set up the four basic cursor motion commands (up, down, left and right) on keys in a diamond pattern on the keyboard if you prefer. @xref{Customization}. @dfn{Extensible} means you can go beyond simple customization and write entirely new commands, programs in the Lisp language to be run by XEmacs's own Lisp interpreter. XEmacs is an ``on-line extensible'' system: it is divided into many functions that call each other. You can redefine any function in the middle of an editing session and replace any part of XEmacs without making a separate copy of all of XEmacs. Most of the editing commands of XEmacs are written in Lisp; the few exceptions could have been written in Lisp but are written in C for efficiency. Only a programmer can write an extension to XEmacs, but anybody can use it afterward. @include frame.texi @include keystrokes.texi @include menus.texi @include entering.texi @include cmdargs.texi @include startup.texi @include basic.texi @include undo.texi @include mini.texi @include m-x.texi @include help.texi @include mark.texi @include mouse.texi @include killing.texi @include regs.texi @include display.texi @include search.texi @include fixit.texi @include files.texi @include buffers.texi @include windows.texi @include mule.texi @include major.texi @include indent.texi @include text.texi @include programs.texi @include building.texi @include packages.texi @include abbrevs.texi @include picture.texi @include sending.texi @include reading.texi @include calendar.texi @include misc.texi @include custom.texi @include trouble.texi @include new.texi @include glossary.texi @include gnu.texi @node Key Index, Command Index, Manifesto, Top @unnumbered Key (Character) Index @printindex ky @node Command Index, Variable Index, Key Index, Top @unnumbered Command and Function Index @printindex fn @node Variable Index, Concept Index, Command Index, Top @unnumbered Variable Index @printindex vr @node Concept Index, Frame, Variable Index, Top @unnumbered Concept Index @printindex cp @summarycontents @contents @bye @c Remember to delete these lines before creating the info file. @iftex @lucidbook @bindingoffset = 0.5in @parindent = 0pt @end iftex texi2html-1.82/test/xemacs_manual/text.texi0000644000175000017500000013427411264347115022722 0ustar flichtenheldflichtenheld @node Text, Programs, Indentation, Top @chapter Commands for Human Languages @cindex text The term @dfn{text} has two widespread meanings in our area of the computer field. One is data that is a sequence of characters. In this sense of the word any file that you edit with Emacs is text. The other meaning is more restrictive: a sequence of characters in a human language for humans to read (possibly after processing by a text formatter), as opposed to a program or commands for a program. Human languages have syntactic and stylistic conventions that editor commands should support or use to advantage: conventions involving words, sentences, paragraphs, and capital letters. This chapter describes Emacs commands for all these things. There are also commands for @dfn{filling}, or rearranging paragraphs into lines of approximately equal length. The commands for moving over and killing words, sentences, and paragraphs, while intended primarily for editing text, are also often useful for editing programs. Emacs has several major modes for editing human language text. If a file contains plain text, use Text mode, which customizes Emacs in small ways for the syntactic conventions of text. For text which contains embedded commands for text formatters, Emacs has other major modes, each for a particular text formatter. Thus, for input to @TeX{}, you can use @TeX{} mode; for input to nroff, Nroff mode. @menu * Text Mode:: The major modes for editing text files. * Nroff Mode:: The major mode for editing input to the formatter nroff. * TeX Mode:: The major modes for editing input to the formatter TeX. * Outline Mode:: The major mode for editing outlines. * Words:: Moving over and killing words. * Sentences:: Moving over and killing sentences. * Paragraphs:: Moving over paragraphs. * Pages:: Moving over pages. * Filling:: Filling or justifying text * Case:: Changing the case of text @end menu @node Text Mode, Words, Text, Text @section Text Mode @findex tab-to-tab-stop @findex edit-tab-stops @cindex Text mode @kindex TAB @findex text-mode You should use Text mode---rather than Fundamental or Lisp mode---to edit files of text in a human language. Invoke @kbd{M-x text-mode} to enter Text mode. In Text mode, @key{TAB} runs the function @code{tab-to-tab-stop}, which allows you to use arbitrary tab stops set with @kbd{M-x edit-tab-stops} (@pxref{Tab Stops}). Features concerned with comments in programs are turned off unless they are explicitly invoked. The syntax table is changed so that periods are not considered part of a word, while apostrophes, backspaces and underlines are. @findex indented-text-mode A similar variant mode is Indented Text mode, intended for editing text in which most lines are indented. This mode defines @key{TAB} to run @code{indent-relative} (@pxref{Indentation}), and makes Auto Fill indent the lines it creates. As a result, a line made by Auto Filling, or by @key{LFD}, is normally indented just like the previous line. Use @kbd{M-x indented-text-mode} to select this mode. @vindex text-mode-hook Entering Text mode or Indented Text mode calls the value of the variable @code{text-mode-hook} with no arguments, if that value exists and is not @code{nil}. This value is also called when modes related to Text mode are entered; this includes Nroff mode, @TeX{} mode, Outline mode, and Mail mode. Your hook can look at the value of @code{major-mode} to see which of these modes is actually being entered. Two modes similar to Text mode are of use for editing text that is to be passed through a text formatter before achieving its final readable form. @menu * Nroff Mode:: The major mode for editing input to the formatter nroff. * TeX Mode:: The major modes for editing input to the formatter TeX. Another similar mode is used for editing outlines. It allows you to view the text at various levels of detail. You can view either the outline headings alone or both headings and text; you can also hide some of the headings at lower levels from view to make the high level structure more visible. * Outline Mode:: The major mode for editing outlines. @end menu @node Nroff Mode, TeX Mode, Text Mode, Text Mode @subsection Nroff Mode @cindex nroff @findex nroff-mode Nroff mode is a mode like Text mode but modified to handle nroff commands present in the text. Invoke @kbd{M-x nroff-mode} to enter this mode. Nroff mode differs from Text mode in only a few ways. All nroff command lines are considered paragraph separators, so that filling never garbles the nroff commands. Pages are separated by @samp{.bp} commands. Comments start with backslash-doublequote. There are also three special commands that are not available in Text mode: @findex forward-text-line @findex backward-text-line @findex count-text-lines @kindex M-n @kindex M-p @kindex M-? @table @kbd @item M-n Move to the beginning of the next line that isn't an nroff command (@code{forward-text-line}). An argument is a repeat count. @item M-p Like @kbd{M-n} but move up (@code{backward-text-line}). @item M-? Prints in the echo area the number of text lines (lines that are not nroff commands) in the region (@code{count-text-lines}). @end table @findex electric-nroff-mode The other feature of Nroff mode is Electric Nroff newline mode. This is a minor mode that you can turn on or off with @kbd{M-x electric-nroff-mode} (@pxref{Minor Modes}). When the mode is on and you use @key{RET} to end a line containing an nroff command that opens a kind of grouping, Emacs automatically inserts the matching nroff command to close that grouping on the following line. For example, if you are at the beginning of a line and type @kbd{.@:(b @key{RET}}, the matching command @samp{.)b} will be inserted on a new line following point. @vindex nroff-mode-hook Entering Nroff mode calls the value of the variable @code{text-mode-hook} with no arguments, if that value exists and is not @code{nil}; then it does the same with the variable @code{nroff-mode-hook}. @node TeX Mode, Outline Mode, Nroff Mode, Text Mode @subsection @TeX{} Mode @cindex TeX @cindex LaTeX @findex TeX-mode @findex tex-mode @findex plain-tex-mode @findex LaTeX-mode @findex plain-TeX-mode @findex latex-mode @TeX{} is a powerful text formatter written by Donald Knuth; like GNU Emacs, it is free. La@TeX{} is a simplified input format for @TeX{}, implemented by @TeX{} macros. It is part of @TeX{}.@refill Emacs has a special @TeX{} mode for editing @TeX{} input files. It provides facilities for checking the balance of delimiters and for invoking @TeX{} on all or part of the file. @TeX{} mode has two variants, Plain @TeX{} mode and La@TeX{} mode, which are two distinct major modes that differ only slightly. These modes are designed for editing the two different input formats. The command @kbd{M-x tex-mode} looks at the contents of a buffer to determine whether it appears to be La@TeX{} input or not; it then selects the appropriate mode. If it can't tell which is right (e.g., the buffer is empty), the variable @code{tex-default-mode} controls which mode is used. The commands @kbd{M-x plain-tex-mode} and @kbd{M-x latex-mode} explicitly select one of the variants of @TeX{} mode. Use these commands when @kbd{M-x tex-mode} does not guess right.@refill @menu * Editing: TeX Editing. Special commands for editing in TeX mode. * Printing: TeX Print. Commands for printing part of a file with TeX. @end menu @TeX{} for Unix systems can be obtained from the University of Washington for a distribution fee. To order a full distribution, send $140.00 for a 1/2 inch 9-track tape, $165.00 for two 4-track 1/4 inch cartridge tapes (foreign sites $150.00, for 1/2 inch, $175.00 for 1/4 inch, to cover the extra postage) payable to the University of Washington to: @display The Director Northwest Computer Support Group, DW-10 University of Washington Seattle, Washington 98195 @end display @noindent Purchase orders are acceptable, but there is an extra charge of $10.00 to pay for processing charges. (The total cost comes to $150 for domestic sites, $175 for foreign sites). The normal distribution is a tar tape, blocked 20, 1600 bpi, on an industry standard 2400 foot half-inch reel. The physical format for the 1/4 inch streamer cartridges uses QIC-11, 8000 bpi, 4-track serpentine recording for the SUN. Also, SystemV tapes can be written in cpio format, blocked 5120 bytes, ASCII headers. @node TeX Editing,TeX Print,TeX Mode,TeX Mode @subsubsection @TeX{} Editing Commands Here are the special commands provided in @TeX{} mode for editing the text of the file. @table @kbd @item " Insert, according to context, either @samp{``} or @samp{"} or @samp{''} (@code{TeX-insert-quote}). @item @key{LFD} Insert a paragraph break (two newlines) and check the previous paragraph for unbalanced braces or dollar signs (@code{tex-terminate-@*paragraph}). @item M-x validate-tex-buffer Check each paragraph in the buffer for unbalanced braces or dollar signs. @item C-c @{ Insert @samp{@{@}} and position point between them (@code{tex-insert-braces}). @item C-c @} Move forward past the next unmatched close brace (@code{up-list}). @item C-c C-e Close a block for La@TeX{} (@code{tex-close-latex-block}). @end table @findex tex-insert-quote @kindex " (TeX mode) In @TeX{}, the character @samp{"} is not normally used; you use @samp{``} to start a quotation and @samp{''} to end one. @TeX{} mode defines the key @kbd{"} to insert @samp{``} after whitespace or an open brace, @samp{"} after a backslash, or @samp{''} otherwise. This is done by the command @code{tex-insert-quote}. If you need the character @samp{"} itself in unusual contexts, use @kbd{C-q} to insert it. Also, @kbd{"} with a numeric argument always inserts that number of @samp{"} characters. In @TeX{} mode, @samp{$} has a special syntax code which attempts to understand the way @TeX{} math mode delimiters match. When you insert a @samp{$} that is meant to exit math mode, the position of the matching @samp{$} that entered math mode is displayed for a second. This is the same feature that displays the open brace that matches a close brace that is inserted. However, there is no way to tell whether a @samp{$} enters math mode or leaves it; so when you insert a @samp{$} that enters math mode, the previous @samp{$} position is shown as if it were a match, even though they are actually unrelated. @findex tex-insert-braces @kindex C-c @{ (TeX mode) @findex up-list @kindex C-c @} (TeX mode) If you prefer to keep braces balanced at all times, you can use @kbd{C-c @{} (@code{tex-insert-braces}) to insert a pair of braces. It leaves point between the two braces so you can insert the text that belongs inside. Afterward, use the command @kbd{C-c @}} (@code{up-list}) to move forward past the close brace. @findex validate-tex-buffer @findex tex-terminate-paragraph @kindex LFD (TeX mode) There are two commands for checking the matching of braces. @key{LFD} (@code{tex-terminate-paragraph}) checks the paragraph before point, and inserts two newlines to start a new paragraph. It prints a message in the echo area if any mismatch is found. @kbd{M-x validate-tex-buffer} checks the entire buffer, paragraph by paragraph. When it finds a paragraph that contains a mismatch, it displays point at the beginning of the paragraph for a few seconds and pushes a mark at that spot. Scanning continues until the whole buffer has been checked or until you type another key. The positions of the last several paragraphs with mismatches can be found in the mark ring (@pxref{Mark Ring}). Note that square brackets and parentheses, not just braces, are matched in @TeX{} mode. This is wrong if you want to check @TeX{} syntax. However, parentheses and square brackets are likely to be used in text as matching delimiters and it is useful for the various motion commands and automatic match display to work with them. @findex tex-close-latex-block @kindex C-c C-f (LaTeX mode) In La@TeX{} input, @samp{\begin} and @samp{\end} commands must balance. After you insert a @samp{\begin}, use @kbd{C-c C-f} (@code{tex-close-latex-block}) to insert automatically a matching @samp{\end} (on a new line following the @samp{\begin}). A blank line is inserted between the two, and point is left there.@refill @node TeX Print,,TeX Editing,TeX Mode @subsubsection @TeX{} Printing Commands You can invoke @TeX{} as an inferior of Emacs on either the entire contents of the buffer or just a region at a time. Running @TeX{} in this way on just one chapter is a good way to see what your changes look like without taking the time to format the entire file. @table @kbd @item C-c C-r Invoke @TeX{} on the current region, plus the buffer's header (@code{tex-region}). @item C-c C-b Invoke @TeX{} on the entire current buffer (@code{tex-buffer}). @item C-c C-l Recenter the window showing output from the inferior @TeX{} so that the last line can be seen (@code{tex-recenter-output-buffer}). @item C-c C-k Kill the inferior @TeX{} (@code{tex-kill-job}). @item C-c C-p Print the output from the last @kbd{C-c C-r} or @kbd{C-c C-b} command (@code{tex-print}). @item C-c C-q Show the printer queue (@code{tex-show-print-queue}). @end table @findex tex-buffer @kindex C-c C-b (TeX mode) @findex tex-print @kindex C-c C-p (TeX mode) @findex tex-show-print-queue @kindex C-c C-q (TeX mode) You can pass the current buffer through an inferior @TeX{} using @kbd{C-c C-b} (@code{tex-buffer}). The formatted output appears in a file in @file{/tmp}; to print it, type @kbd{C-c C-p} (@code{tex-print}). Afterward use @kbd{C-c C-q} (@code{tex-show-print-queue}) to view the progress of your output towards being printed. @findex tex-kill-job @kindex C-c C-k (TeX mode) @findex tex-recenter-output-buffer @kindex C-c C-l (TeX mode) The console output from @TeX{}, including any error messages, appears in a buffer called @samp{*TeX-shell*}. If @TeX{} gets an error, you can switch to this buffer and feed it input (this works as in Shell mode; @pxref{Interactive Shell}). Without switching to this buffer, you can scroll it so that its last line is visible by typing @kbd{C-c C-l}. Type @kbd{C-c C-k} (@code{tex-kill-job}) to kill the @TeX{} process if you see that its output is no longer useful. Using @kbd{C-c C-b} or @kbd{C-c C-r} also kills any @TeX{} process still running.@refill @findex tex-region @kindex C-c C-r (TeX mode) You can pass an arbitrary region through an inferior @TeX{} by typing @kbd{C-c C-r} (@code{tex-region}). This is tricky, however, because most files of @TeX{} input contain commands at the beginning to set parameters and define macros. Without them, no later part of the file will format correctly. To solve this problem, @kbd{C-c C-r} allows you to designate a part of the file as containing essential commands; it is included before the specified region as part of the input to @TeX{}. The designated part of the file is called the @dfn{header}. @cindex header (TeX mode) To indicate the bounds of the header in Plain @TeX{} mode, insert two special strings in the file: @samp{%**start of header} before the header, and @samp{%**end of header} after it. Each string must appear entirely on one line, but there may be other text on the line before or after. The lines containing the two strings are included in the header. If @samp{%**start of header} does not appear within the first 100 lines of the buffer, @kbd{C-c C-r} assumes there is no header. In La@TeX{} mode, the header begins with @samp{\documentstyle} and ends with @*@samp{\begin@{document@}}. These are commands that La@TeX{} requires you to use, so you don't need to do anything special to identify the header. @vindex TeX-mode-hook @vindex LaTeX-mode-hook @vindex plain-TeX-mode-hook When you enter either kind of @TeX{} mode, Emacs calls with no arguments the value of the variable @code{text-mode-hook}, if that value exists and is not @code{nil}. Emacs then calls the variable @code{TeX-mode-hook} and either @code{plain-TeX-mode-hook} or @code{LaTeX-mode-hook} under the same conditions. @node Outline Mode,, TeX Mode, Text Mode @subsection Outline Mode @cindex outlines @cindex selective display @cindex invisible lines Outline mode is a major mode similar to Text mode but intended for editing outlines. It allows you to make parts of the text temporarily invisible so that you can see just the overall structure of the outline. Type @kbd{M-x outline-mode} to turn on Outline mode in the current buffer. @vindex outline-mode-hook When you enter Outline mode, Emacs calls with no arguments the value of the variable @code{text-mode-hook}, if that value exists and is not @code{nil}; then it does the same with the variable @code{outline-mode-hook}. When a line is invisible in outline mode, it does not appear on the screen. The screen appears exactly as if the invisible line were deleted, except that an ellipsis (three periods in a row) appears at the end of the previous visible line (only one ellipsis no matter how many invisible lines follow). All editing commands treat the text of the invisible line as part of the previous visible line. For example, @kbd{C-n} moves onto the next visible line. Killing an entire visible line, including its terminating newline, really kills all the following invisible lines as well; yanking everything back yanks the invisible lines and they remain invisible. @menu * Format: Outline Format. What the text of an outline looks like. * Motion: Outline Motion. Special commands for moving through outlines. * Visibility: Outline Visibility. Commands to control what is visible. @end menu @node Outline Format,Outline Motion,Outline Mode, Outline Mode @subsubsection Format of Outlines @cindex heading lines (Outline mode) @cindex body lines (Outline mode) Outline mode assumes that the lines in the buffer are of two types: @dfn{heading lines} and @dfn{body lines}. A heading line represents a topic in the outline. Heading lines start with one or more stars; the number of stars determines the depth of the heading in the outline structure. Thus, a heading line with one star is a major topic; all the heading lines with two stars between it and the next one-star heading are its subtopics; and so on. Any line that is not a heading line is a body line. Body lines belong to the preceding heading line. Here is an example: @example * Food This is the body, which says something about the topic of food. ** Delicious Food This is the body of the second-level header. ** Distasteful Food This could have a body too, with several lines. *** Dormitory Food * Shelter A second first-level topic with its header line. @end example A heading line together with all following body lines is called collectively an @dfn{entry}. A heading line together with all following deeper heading lines and their body lines is called a @dfn{subtree}. @vindex outline-regexp You can customize the criterion for distinguishing heading lines by setting the variable @code{outline-regexp}. Any line whose beginning has a match for this regexp is considered a heading line. Matches that start within a line (not at the beginning) do not count. The length of the matching text determines the level of the heading; longer matches make a more deeply nested level. Thus, for example, if a text formatter has commands @samp{@@chapter}, @samp{@@section} and @samp{@@subsection} to divide the document into chapters and sections, you can make those lines count as heading lines by setting @code{outline-regexp} to @samp{"@@chap\\|@@\\(sub\\)*section"}. Note the trick: the two words @samp{chapter} and @samp{section} are the same length, but by defining the regexp to match only @samp{chap} we ensure that the length of the text matched on a chapter heading is shorter, so that Outline mode will know that sections are contained in chapters. This works as long as no other command starts with @samp{@@chap}. Outline mode makes a line invisible by changing the newline before it into an ASCII Control-M (code 015). Most editing commands that work on lines treat an invisible line as part of the previous line because, strictly speaking, it @i{is} part of that line, since there is no longer a newline in between. When you save the file in Outline mode, Control-M characters are saved as newlines, so the invisible lines become ordinary lines in the file. Saving does not change the visibility status of a line inside Emacs. @node Outline Motion,Outline Visibility,Outline Format,Outline Mode @subsubsection Outline Motion Commands Some special commands in Outline mode move backward and forward to heading lines. @table @kbd @item C-c C-n Move point to the next visible heading line (@code{outline-next-visible-heading}). @item C-c C-p Move point to the previous visible heading line @* (@code{outline-previous-visible-heading}). @item C-c C-f Move point to the next visible heading line at the same level as the one point is on (@code{outline-forward-same-level}). @item C-c C-b Move point to the previous visible heading line at the same level (@code{outline-backward-same-level}). @item C-c C-u Move point up to a lower-level (more inclusive) visible heading line (@code{outline-up-heading}). @end table @findex outline-next-visible-heading @findex outline-previous-visible-heading @kindex C-c C-n (Outline mode) @kindex C-c C-p (Outline mode) @kbd{C-c C-n} (@code{next-visible-heading}) moves down to the next heading line. @kbd{C-c C-p} (@code{previous-visible-heading}) moves similarly backward. Both accept numeric arguments as repeat counts. The names emphasize that invisible headings are skipped, but this is not really a special feature. All editing commands that look for lines ignore the invisible lines automatically.@refill @findex outline-up-heading @findex outline-forward-same-level @findex outline-backward-same-level @kindex C-c C-f (Outline mode) @kindex C-c C-b (Outline mode) @kindex C-c C-u (Outline mode) More advanced motion commands understand the levels of headings. The commands @kbd{C-c C-f} (@code{outline-forward-same-level}) and @kbd{C-c C-b} (@code{outline-backward-same-level}) move from one heading line to another visible heading at the same depth in the outline. @kbd{C-c C-u} (@code{outline-up-heading}) moves backward to another heading that is less deeply nested. @node Outline Visibility,,Outline Motion,Outline Mode @subsubsection Outline Visibility Commands The other special commands of outline mode are used to make lines visible or invisible. Their names all start with @code{hide} or @code{show}. Most of them exist as pairs of opposites. They are not undoable; instead, you can undo right past them. Making lines visible or invisible is simply not recorded by the undo mechanism. @table @kbd @item M-x hide-body Make all body lines in the buffer invisible. @item M-x show-all Make all lines in the buffer visible. @item C-c C-d Make everything under this heading invisible, not including this heading itself (@code{hide-subtree}). @item C-c C-s Make everything under this heading visible, including body, subheadings, and their bodies (@code{show-subtree}). @item M-x hide-leaves Make the body of this heading line, and of all its subheadings, invisible. @item M-x show-branches Make all subheadings of this heading line, at all levels, visible. @item C-c C-i Make immediate subheadings (one level down) of this heading line visible (@code{show-children}). @item M-x hide-entry Make this heading line's body invisible. @item M-x show-entry Make this heading line's body visible. @end table @findex hide-entry @findex show-entry Two commands that are exact opposites are @kbd{M-x hide-entry} and @kbd{M-x show-entry}. They are used with point on a heading line, and apply only to the body lines of that heading. The subtopics and their bodies are not affected. @findex hide-subtree @findex show-subtree @kindex C-c C-d (Outline mode) @kindex C-c C-h (Outline mode) @cindex subtree (Outline mode) Two more powerful opposites are @kbd{C-c C-d} (@code{hide-subtree}) and @kbd{C-c C-s} (@code{show-subtree}). Both should be used when point is on a heading line, and both apply to all the lines of that heading's @dfn{subtree}: its body, all its subheadings, both direct and indirect, and all of their bodies. In other words, the subtree contains everything following this heading line, up to and not including the next heading of the same or higher rank.@refill @findex hide-leaves @findex show-branches Intermediate between a visible subtree and an invisible one is having all the subheadings visible but none of the body. There are two commands for doing this, one that hides the bodies and one that makes the subheadings visible. They are @kbd{M-x hide-leaves} and @kbd{M-x show-branches}. @kindex C-c C-i (Outline mode) @findex show-children A little weaker than @code{show-branches} is @kbd{C-c C-i} (@code{show-children}). It makes just the direct subheadings visible---those one level down. Deeper subheadings remain invisible.@refill @findex hide-body @findex show-all Two commands have a blanket effect on the whole file. @kbd{M-x hide-body} makes all body lines invisible, so that you see just the outline structure. @kbd{M-x show-all} makes all lines visible. You can think of these commands as a pair of opposites even though @kbd{M-x show-all} applies to more than just body lines. @vindex selective-display-ellipses You can turn off the use of ellipses at the ends of visible lines by setting @code{selective-display-ellipses} to @code{nil}. The result is no visible indication of the presence of invisible lines. @node Words, Sentences, Text Mode, Text @section Words @cindex words @cindex Meta Emacs has commands for moving over or operating on words. By convention, the keys for them are all @kbd{Meta-} characters. @c widecommands @table @kbd @item M-f Move forward over a word (@code{forward-word}). @item M-b Move backward over a word (@code{backward-word}). @item M-d Kill up to the end of a word (@code{kill-word}). @item M-@key{DEL} Kill back to the beginning of a word (@code{backward-kill-word}). @item M-@@ Mark the end of the next word (@code{mark-word}). @item M-t Transpose two words; drag a word forward or backward across other words (@code{transpose-words}). @end table Notice how these keys form a series that parallels the character-based @kbd{C-f}, @kbd{C-b}, @kbd{C-d}, @kbd{C-t} and @key{DEL}. @kbd{M-@@} is related to @kbd{C-@@}, which is an alias for @kbd{C-@key{SPC}}.@refill @kindex M-f @kindex M-b @findex forward-word @findex backward-word The commands @kbd{Meta-f} (@code{forward-word}) and @kbd{Meta-b} (@code{backward-word}) move forward and backward over words. They are analogous to @kbd{Control-f} and @kbd{Control-b}, which move over single characters. Like their @kbd{Control-} analogues, @kbd{Meta-f} and @kbd{Meta-b} move several words if given an argument. @kbd{Meta-f} with a negative argument moves backward, and @kbd{Meta-b} with a negative argument moves forward. Forward motion stops after the last letter of the word, while backward motion stops before the first letter.@refill @kindex M-d @findex kill-word @kbd{Meta-d} (@code{kill-word}) kills the word after point. To be precise, it kills everything from point to the place @kbd{Meta-f} would move to. Thus, if point is in the middle of a word, @kbd{Meta-d} kills just the part after point. If some punctuation comes between point and the next word, it is killed along with the word. (To kill only the next word but not the punctuation before it, simply type @kbd{Meta-f} to get to the end and kill the word backwards with @kbd{Meta-@key{DEL}}.) @kbd{Meta-d} takes arguments just like @kbd{Meta-f}. @findex backward-kill-word @kindex M-DEL @kbd{Meta-@key{DEL}} (@code{backward-kill-word}) kills the word before point. It kills everything from point back to where @kbd{Meta-b} would move to. If point is after the space in @w{@samp{FOO, BAR}}, then @w{@samp{FOO, }} is killed. To kill just @samp{FOO}, type @kbd{Meta-b Meta-d} instead of @kbd{Meta-@key{DEL}}. @cindex transposition @kindex M-t @findex transpose-words @kbd{Meta-t} (@code{transpose-words}) exchanges the word before or containing point with the following word. The delimiter characters between the words do not move. For example, transposing @w{@samp{FOO, BAR}} results in @w{@samp{BAR, FOO}} rather than @samp{@w{BAR FOO,}}. @xref{Transpose}, for more on transposition and on arguments to transposition commands. @kindex M-@@ @findex mark-word To operate on the next @var{n} words with an operation which applies between point and mark, you can either set the mark at point and then move over the words, or you can use the command @kbd{Meta-@@} (@code{mark-word}) which does not move point but sets the mark where @kbd{Meta-f} would move to. It can be given arguments just like @kbd{Meta-f}. @cindex syntax table The word commands' understanding of syntax is completely controlled by the syntax table. For example, any character can be declared to be a word delimiter. @xref{Syntax}. @node Sentences, Paragraphs, Words, Text @section Sentences @cindex sentences The Emacs commands for manipulating sentences and paragraphs are mostly on @kbd{Meta-} keys, and therefore are like the word-handling commands. @table @kbd @item M-a Move back to the beginning of the sentence (@code{backward-sentence}). @item M-e Move forward to the end of the sentence (@code{forward-sentence}). @item M-k Kill forward to the end of the sentence (@code{kill-sentence}). @item C-x @key{DEL} Kill back to the beginning of the sentence @*(@code{backward-kill-sentence}). @end table @kindex M-a @kindex M-e @findex backward-sentence @findex forward-sentence The commands @kbd{Meta-a} and @kbd{Meta-e} (@code{backward-sentence} and @code{forward-sentence}) move to the beginning and end of the current sentence, respectively. They resemble @kbd{Control-a} and @kbd{Control-e}, which move to the beginning and end of a line. Unlike their counterparts, @kbd{Meta-a} and @kbd{Meta-e} move over successive sentences if repeated or given numeric arguments. Emacs assumes the typist's convention is followed, and thus considers a sentence to end wherever there is a @samp{.}, @samp{?}, or @samp{!} followed by the end of a line or two spaces, with any number of @samp{)}, @samp{]}, @samp{'}, or @samp{"} characters allowed in between. A sentence also begins or ends wherever a paragraph begins or ends.@refill Neither @kbd{M-a} nor @kbd{M-e} moves past the newline or spaces beyond the sentence edge at which it is stopping. @kindex M-k @kindex C-x DEL @findex kill-sentence @findex backward-kill-sentence @kbd{M-a} and @kbd{M-e} have a corresponding kill command, just like @kbd{C-a} and @kbd{C-e} have @kbd{C-k}. The command is @kbd{M-k} (@code{kill-sentence}) which kills from point to the end of the sentence. With minus one as an argument it kills back to the beginning of the sentence. Larger arguments serve as repeat counts.@refill There is a special command, @kbd{C-x @key{DEL}} (@code{backward-kill-sentence}), for killing back to the beginning of a sentence, which is useful when you change your mind in the middle of composing text.@refill @vindex sentence-end The variable @code{sentence-end} controls recognition of the end of a sentence. It is a regexp that matches the last few characters of a sentence, together with the whitespace following the sentence. Its normal value is: @example "[.?!][]\"')]*\\($\\|\t\\| \\)[ \t\n]*" @end example @noindent This example is explained in the section on regexps. @xref{Regexps}. @node Paragraphs, Pages, Sentences, Text @section Paragraphs @cindex paragraphs @kindex M-@{ @kindex M-@} @findex backward-paragraph @findex forward-paragraph The Emacs commands for manipulating paragraphs are also @kbd{Meta-} keys. @table @kbd @item M-@{ Move back to previous paragraph beginning @*(@code{backward-paragraph}). @item M-@} Move forward to next paragraph end (@code{forward-paragraph}). @item M-h Put point and mark around this or next paragraph (@code{mark-paragraph}). @end table @kbd{Meta-@{} moves to the beginning of the current or previous paragraph, while @kbd{Meta-@}} moves to the end of the current or next paragraph. Blank lines and text formatter command lines separate paragraphs and are not part of any paragraph. An indented line starts a new paragraph. In major modes for programs (as opposed to Text mode), paragraphs begin and end only at blank lines. As a result, the paragraph commands continue to be useful even though there are no paragraphs per se. When there is a fill prefix, paragraphs are delimited by all lines which don't start with the fill prefix. @xref{Filling}. @kindex M-h @findex mark-paragraph To operate on a paragraph, you can use the command @kbd{Meta-h} (@code{mark-paragraph}) to set the region around it. This command puts point at the beginning and mark at the end of the paragraph point was in. If point is between paragraphs (in a run of blank lines or at a boundary), the paragraph following point is surrounded by point and mark. If there are blank lines preceding the first line of the paragraph, one of the blank lines is included in the region. Thus, for example, @kbd{M-h C-w} kills the paragraph around or after point. @vindex paragraph-start @vindex paragraph-separate The precise definition of a paragraph boundary is controlled by the variables @code{paragraph-separate} and @code{paragraph-start}. The value of @code{paragraph-start} is a regexp that matches any line that either starts or separates paragraphs. The value of @code{paragraph-separate} is another regexp that matches only lines that separate paragraphs without being part of any paragraph. Lines that start a new paragraph and are contained in it must match both regexps. For example, normally @code{paragraph-start} is @code{"^[ @t{\}t@t{\}n@t{\}f]"} and @code{paragraph-separate} is @code{"^[ @t{\}t@t{\}f]*$"}.@refill Normally it is desirable for page boundaries to separate paragraphs. The default values of these variables recognize the usual separator for pages. @node Pages, Filling, Paragraphs, Text @section Pages @cindex pages @cindex formfeed Files are often thought of as divided into @dfn{pages} by the @dfn{formfeed} character (ASCII Control-L, octal code 014). For example, if a file is printed on a line printer, each ``page'' of the file starts on a new page of paper. Emacs treats a page-separator character just like any other character. It can be inserted with @kbd{C-q C-l} or deleted with @key{DEL}. You are free to paginate your file or not. However, since pages are often meaningful divisions of the file, commands are provided to move over them and operate on them. @c WideCommands @table @kbd @item C-x [ Move point to previous page boundary (@code{backward-page}). @item C-x ] Move point to next page boundary (@code{forward-page}). @item C-x C-p Put point and mark around this page (or another page) (@code{mark-page}). @item C-x l Count the lines in this page (@code{count-lines-page}). @end table @kindex C-x [ @kindex C-x ] @findex forward-page @findex backward-page The @kbd{C-x [} (@code{backward-page}) command moves point to immediately after the previous page delimiter. If point is already right after a page delimiter, the command skips that one and stops at the previous one. A numeric argument serves as a repeat count. The @kbd{C-x ]} (@code{forward-page}) command moves forward past the next page delimiter. @kindex C-x C-p @findex mark-page The @kbd{C-x C-p} command (@code{mark-page}) puts point at the beginning of the current page and the mark at the end. The page delimiter at the end is included (the mark follows it). The page delimiter at the front is excluded (point follows it). You can follow this command by @kbd{C-w} to kill a page you want to move elsewhere. If you insert the page after a page delimiter, at a place where @kbd{C-x ]} or @kbd{C-x [} would take you, the page will be properly delimited before and after once again. A numeric argument to @kbd{C-x C-p} is used to specify which page to go to, relative to the current one. Zero means the current page. One means the next page, and @minus{}1 means the previous one. @kindex C-x l @findex count-lines-page The @kbd{C-x l} command (@code{count-lines-page}) can help you decide where to break a page in two. It prints the total number of lines in the current page in the echo area, then divides the lines into those preceding the current line and those following it, for example @example Page has 96 (72+25) lines @end example @noindent Notice that the sum is off by one; this is correct if point is not at the beginning of a line. @vindex page-delimiter The variable @code{page-delimiter} should have as its value a regexp that matches the beginning of a line that separates pages. This defines where pages begin. The normal value of this variable is @code{"^@t{\}f"}, which matches a formfeed character at the beginning of a line. @node Filling, Case, Pages, Text @section Filling Text @cindex filling If you use Auto Fill mode, Emacs @dfn{fills} text (breaks it up into lines that fit in a specified width) as you insert it. When you alter existing text it is often no longer be properly filled afterwards and you can use explicit commands for filling. @menu * Auto Fill:: Auto Fill mode breaks long lines automatically. * Fill Commands:: Commands to refill paragraphs and center lines. * Fill Prefix:: Filling when every line is indented or in a comment, etc. @end menu @node Auto Fill, Fill Commands, Filling, Filling @subsection Auto Fill Mode @cindex Auto Fill mode @dfn{Auto Fill} mode is a minor mode in which lines are broken automatically when they become too wide. Breaking happens only when you type a @key{SPC} or @key{RET}. @table @kbd @item M-x auto-fill-mode Enable or disable Auto Fill mode. @item @key{SPC} @itemx @key{RET} In Auto Fill mode, break lines when appropriate. @end table @findex auto-fill-mode @kbd{M-x auto-fill-mode} turns Auto Fill mode on if it was off, or off if it was on. With a positive numeric argument the command always turns Auto Fill mode on, and with a negative argument it always turns it off. The presence of the word @samp{Fill} in the mode line, inside the parentheses, indicates that Auto Fill mode is in effect. Auto Fill mode is a minor mode; you can turn it on or off for each buffer individually. @xref{Minor Modes}. In Auto Fill mode, lines are broken automatically at spaces when they get longer than desired. Line breaking and rearrangement takes place only when you type @key{SPC} or @key{RET}. To insert a space or newline without permitting line-breaking, type @kbd{C-q @key{SPC}} or @kbd{C-q @key{LFD}} (recall that a newline is really a linefeed). @kbd{C-o} inserts a newline without line breaking. Auto Fill mode works well with Lisp mode: when it makes a new line in Lisp mode, it indents that line with @key{TAB}. If a line ending in a Lisp comment gets too long, the text of the comment is split into two comment lines. Optionally, new comment delimiters are inserted at the end of the first line and the beginning of the second, so that each line is a separate comment. The variable @code{comment-multi-line} controls the choice (@pxref{Comments}). Auto Fill mode does not refill entire paragraphs. It can break lines but cannot merge lines. Editing in the middle of a paragraph can result in a paragraph that is not correctly filled. The easiest way to make the paragraph properly filled again is using an explicit fill commands. Many users like Auto Fill mode and want to use it in all text files. The section on init files explains how you can arrange this permanently for yourself. @xref{Init File}. @node Fill Commands, Fill Prefix, Auto Fill, Filling @subsection Explicit Fill Commands @table @kbd @item M-q Fill current paragraph (@code{fill-paragraph}). @item M-g Fill each paragraph in the region (@code{fill-region}). @item C-x f Set the fill column (@code{set-fill-column}). @item M-x fill-region-as-paragraph Fill the region, considering it as one paragraph. @item M-s Center a line. @end table @kindex M-q @findex fill-paragraph To refill a paragraph, use the command @kbd{Meta-q} (@code{fill-paragraph}). It causes the paragraph containing point, or the one after point if point is between paragraphs, to be refilled. All line breaks are removed, and new ones are inserted where necessary. @kbd{M-q} can be undone with @kbd{C-_}. @xref{Undo}.@refill @kindex M-g @findex fill-region To refill many paragraphs, use @kbd{M-g} (@code{fill-region}), which divides the region into paragraphs and fills each of them. @findex fill-region-as-paragraph @kbd{Meta-q} and @kbd{Meta-g} use the same criteria as @kbd{Meta-h} for finding paragraph boundaries (@pxref{Paragraphs}). For more control, you can use @kbd{M-x fill-region-as-paragraph}, which refills everything between point and mark. This command recognizes only blank lines as paragraph separators.@refill @cindex justification A numeric argument to @kbd{M-g} or @kbd{M-q} causes it to @dfn{justify} the text as well as filling it. Extra spaces are inserted to make the right margin line up exactly at the fill column. To remove the extra spaces, use @kbd{M-q} or @kbd{M-g} with no argument.@refill @vindex auto-fill-inhibit-regexp The variable @code{auto-fill-inhibit-regexp} takes as a value a regexp to match lines that should not be auto-filled. @kindex M-s @cindex centering @findex center-line The command @kbd{Meta-s} (@code{center-line}) centers the current line within the current fill column. With an argument, it centers several lines individually and moves past them. @vindex fill-column The maximum line width for filling is in the variable @code{fill-column}. Altering the value of @code{fill-column} makes it local to the current buffer; until then, the default value---initially 70---is in effect. @xref{Locals}. @kindex C-x f @findex set-fill-column The easiest way to set @code{fill-column} is to use the command @kbd{C-x f} (@code{set-fill-column}). With no argument, it sets @code{fill-column} to the current horizontal position of point. With a numeric argument, it uses that number as the new fill column. @node Fill Prefix,, Fill Commands, Filling @subsection The Fill Prefix @cindex fill prefix To fill a paragraph in which each line starts with a special marker (which might be a few spaces, giving an indented paragraph), use the @dfn{fill prefix} feature. The fill prefix is a string which is not included in filling. Emacs expects every line to start with a fill prefix. @table @kbd @item C-x . Set the fill prefix (@code{set-fill-prefix}). @item M-q Fill a paragraph using current fill prefix (@code{fill-paragraph}). @item M-x fill-individual-paragraphs Fill the region, considering each change of indentation as starting a new paragraph. @end table @kindex C-x . @findex set-fill-prefix To specify a fill prefix, move to a line that starts with the desired prefix, put point at the end of the prefix, and give the command @w{@kbd{C-x .}}@: (@code{set-fill-prefix}). That's a period after the @kbd{C-x}. To turn off the fill prefix, specify an empty prefix: type @w{@kbd{C-x .}}@: with point at the beginning of a line.@refill When a fill prefix is in effect, the fill commands remove the fill prefix from each line before filling and insert it on each line after filling. Auto Fill mode also inserts the fill prefix inserted on new lines it creates. Lines that do not start with the fill prefix are considered to start paragraphs, both in @kbd{M-q} and the paragraph commands; this is just right if you are using paragraphs with hanging indentation (every line indented except the first one). Lines which are blank or indented once the prefix is removed also separate or start paragraphs; this is what you want if you are writing multi-paragraph comments with a comment delimiter on each line. @vindex fill-prefix The fill prefix is stored in the variable @code{fill-prefix}. Its value is a string, or @code{nil} when there is no fill prefix. This is a per-buffer variable; altering the variable affects only the current buffer, but there is a default value which you can change as well. @xref{Locals}. @findex fill-individual-paragraphs Another way to use fill prefixes is through @kbd{M-x fill-individual-paragraphs}. This function divides the region into groups of consecutive lines with the same amount and kind of indentation and fills each group as a paragraph, using its indentation as a fill prefix. @node Case,, Filling, Text @section Case Conversion Commands @cindex case conversion Emacs has commands for converting either a single word or any arbitrary range of text to upper case or to lower case. @c WideCommands @table @kbd @item M-l Convert following word to lower case (@code{downcase-word}). @item M-u Convert following word to upper case (@code{upcase-word}). @item M-c Capitalize the following word (@code{capitalize-word}). @item C-x C-l Convert region to lower case (@code{downcase-region}). @item C-x C-u Convert region to upper case (@code{upcase-region}). @end table @kindex M-l @kindex M-u @kindex M-c @cindex words @findex downcase-word @findex upcase-word @findex capitalize-word The word conversion commands are used most frequently. @kbd{Meta-l} (@code{downcase-word}) converts the word after point to lower case, moving past it. Thus, repeating @kbd{Meta-l} converts successive words. @kbd{Meta-u} (@code{upcase-word}) converts to all capitals instead, while @kbd{Meta-c} (@code{capitalize-word}) puts the first letter of the word into upper case and the rest into lower case. The word conversion commands convert several words at once if given an argument. They are especially convenient for converting a large amount of text from all upper case to mixed case: you can move through the text using @kbd{M-l}, @kbd{M-u}, or @kbd{M-c} on each word as appropriate, occasionally using @kbd{M-f} instead to skip a word. When given a negative argument, the word case conversion commands apply to the appropriate number of words before point, but do not move point. This is convenient when you have just typed a word in the wrong case: you can give the case conversion command and continue typing. If a word case conversion command is given in the middle of a word, it applies only to the part of the word which follows point. This is just like what @kbd{Meta-d} (@code{kill-word}) does. With a negative argument, case conversion applies only to the part of the word before point. @kindex C-x C-l @kindex C-x C-u @cindex region @findex downcase-region @findex upcase-region The other case conversion commands are @kbd{C-x C-u} (@code{upcase-region}) and @kbd{C-x C-l} (@code{downcase-region}), which convert everything between point and mark to the specified case. Point and mark do not move.@refill texi2html-1.82/test/xemacs_manual/help.texi0000644000175000017500000004450311264347115022661 0ustar flichtenheldflichtenheld @node Help, Mark, M-x, Top @chapter Help @kindex Help @cindex help @cindex self-documentation @findex help-command @kindex C-h @kindex F1 XEmacs provides extensive help features accessible through a single character, @kbd{C-h}. @kbd{C-h} is a prefix key that is used only for documentation-printing commands. The characters that you can type after @kbd{C-h} are called @dfn{help options}. One help option is @kbd{C-h}; that is how you ask for help about using @kbd{C-h}. To cancel, type @kbd{C-g}. The function key @key{F1} is equivalent to @kbd{C-h}. @kindex C-h C-h @findex help-for-help @kbd{C-h C-h} (@code{help-for-help}) displays a list of the possible help options, and then asks you to type the desired option. It prompts with the string: @smallexample A B C F I K L M N P S T V W C-c C-d C-f C-i C-k C-n C-w; ? for more help: @end smallexample @noindent You should type one of those characters. Typing a third @kbd{C-h} displays a description of what the options mean; Emacs still waits for you to type an option. To cancel, type @kbd{C-g}. Most help buffers use a special major mode, Help mode, which lets you scroll conveniently with @key{SPC} and @key{DEL} or @key{BS}. @menu * Help Summary:: Brief list of all Help commands. * Key Help:: Asking what a key does in XEmacs. * Name Help:: Asking about a command, variable or function name. * Apropos:: Asking what pertains to a given topic. * Library Keywords:: Finding Lisp libraries by keywords (topics). * Help Mode:: Special features of Help mode and Help buffers. * Misc Help:: Other help commands. @end menu @iftex @node Help Summary, Help Summary, Help, Help @end iftex @ifinfo @node Help Summary, Key Help, Help, Help @section Help Summary @end ifinfo Here is a summary of the defined help commands. @table @kbd @item C-h a @var{regexp} @key{RET} Display a list of functions and variables whose names match @var{regexp} (@code{hyper-apropos}). @item C-h A @var{regexp} Show all commands whose names contain matches for @var{regexp} (@code{command-apropos}). @item C-h b Display a table of all key bindings currently in effect, with local bindings of the current major mode first, followed by all global bindings (@code{describe-bindings}). @item C-h c @var{key} Print the name of the command that @var{key} runs (@code{describe-key-briefly}). Here @kbd{c} stands for `character'. For more extensive information on @var{key}, use @kbd{C-h k}. @item C-h d @var{function} @key{RET} @itemx C-h f @var{function} @key{RET} Display documentation on the Lisp function named @var{function} (@code{describe-function}). Since commands are Lisp functions, a command name may be used. @item C-h i Run Info, the program for browsing documentation files (@code{info}). The complete XEmacs manual is available online in Info. @item C-h k @var{key} Display the name and documentation of the command that @var{key} runs (@code{describe-key}). @item C-h l Display a description of the last 100 characters you typed (@code{view-lossage}). @item C-h m Display documentation of the current major mode (@code{describe-mode}). @item C-h n @itemx C-h C-n Display documentation of XEmacs changes, most recent first (@code{view-emacs-news}). @item C-h p Find packages by topic keyword (@code{finder-by-keyword}). @item C-h C-p Display a table of all mouse bindings currently in effect now, with local bindings of the current major mode first, followed by all global bindings (@code{describe-pointer}). @item C-h s Display current contents of the syntax table, plus an explanation of what they mean (@code{describe-syntax}). @xref{Syntax}. @item C-h t Enter the XEmacs interactive tutorial (@code{help-with-tutorial}). @item C-h v @var{var} @key{RET} Display the documentation of the Lisp variable @var{var} (@code{describe-variable}). @item C-h w @var{command} @key{RET} Print which keys run the command named @var{command} (@code{where-is}). @item C-h B @key{RET} Display info on how to deal with Beta versions of XEmacs (@code{describe-beta}). @item C-h C @var{group} @key{RET} Select customization buffer for @var{group} (@code{customize}). @item C-h F @key{RET} View the local copy of the XEmacs FAQ (@code{xemacs-local-faq}). @item C-h C-i @var{file} @key{RET} Read Info file @var{file} with Info browser (@code{Info-query}). @item C-h C-c @var{command} @key{RET} Look up an Emacs command @var{command} in the Emacs manual in the Info system (@code{Info-goto-emacs-command-node}). @item C-h C-f @var{function} @key{RET} Look up an Emacs Lisp function @var{function} in the Elisp manual in the Info system (@code{Info-elisp-ref}). @end table @node Key Help, Name Help, Help Summary, Help @section Documentation for a Key @kindex C-h c @findex describe-key-briefly The most basic @kbd{C-h} options are @kbd{C-h c} (@code{describe-key-briefly}) and @w{@kbd{C-h k}} (@code{describe-key}). @kbd{C-h c @var{key}} prints in the echo area the name of the command that @var{key} is bound to. For example, @kbd{C-h c C-f} prints @samp{forward-char}. Since command names are chosen to describe what the commands do, this is a good way to get a very brief description of what @var{key} does. @kindex C-h k @findex describe-key @kbd{C-h k @var{key}} is similar to @kbd{C-h c} but gives more information. It displays the documentation string of the function @var{key} is bound to as well as its name. @var{key} is a string or vector of events. When called interactively, @var{key} may also be a menu selection. This information does not usually fit into the echo area, so a window is used for the display. @kbd{C-h c} and @kbd{C-h k} work for any sort of key sequences, including function keys and mouse events. @node Name Help, Apropos, Key Help, Help @section Help by Command or Variable Name @kindex C-h f @findex describe-function @vindex describe-function-show-arglist @kbd{C-h f} (@code{describe-function}) reads the name of a Lisp function using the minibuffer, then displays that function's documentation string in a window. Since commands are Lisp functions, you can use the argument @var{function} to get the documentation of a command that you know by name. For example, @example C-h f auto-fill-mode @key{RET} @end example @noindent displays the documentation for @code{auto-fill-mode}. Using @kbd{C-h f} is the only way to see the documentation of a command that is not bound to any key, that is, a command you would normally call using @kbd{M-x}. If the variable @code{describe-function-show-arglist} is @code{t}, @code{describe-function} shows its arglist if the @var{function} is not an autoload function. @kbd{C-h f} is also useful for Lisp functions that you are planning to use in a Lisp program. For example, if you have just written the expression @code{(make-vector len)} and want to make sure you are using @code{make-vector} properly, type @kbd{C-h f make-vector @key{RET}}. Because @kbd{C-h f} allows all function names, not just command names, you may find that some of your favorite abbreviations that work in @kbd{M-x} don't work in @kbd{C-h f}. An abbreviation may be unique among command names, yet fail to be unique when other function names are allowed. The function name for @kbd{C-h f} to describe has a default which is used if you type @key{RET} leaving the minibuffer empty. The default is the function called by the innermost Lisp expression in the buffer around point, @emph{provided} that is a valid, defined Lisp function name. For example, if point is located following the text @samp{(make-vector (car x)}, the innermost list containing point is the one that starts with @samp{(make-vector}, so the default is to describe the function @code{make-vector}. @kbd{C-h f} is often useful just to verify that you have the right spelling for the function name. If @kbd{C-h f} mentions a name from the buffer as the default, that name must be defined as a Lisp function. If that is all you want to know, just type @kbd{C-g} to cancel the @kbd{C-h f} command, then go on editing. @kindex C-h w @findex where-is @kbd{C-h w @var{command} @key{RET}} (@code{where-is}) tells you what keys are bound to @var{command}. It prints a list of the keys in the echo area. Alternatively, it informs you that a command is not bound to any keys, which implies that you must use @kbd{M-x} to call the command. @kindex C-h v @findex describe-variable @kbd{C-h v} (@code{describe-variable}) is like @kbd{C-h f} but describes Lisp variables instead of Lisp functions. Its default is the Lisp symbol around or before point, if that is the name of a known Lisp variable. @xref{Variables}. @node Apropos, Library Keywords, Name Help, Help @section Apropos @kindex C-h A @findex command-apropos @cindex apropos @table @kbd @item C-h A Show only symbols that are names of commands (@code{command-apropos}). @item M-x apropos @var{regexp} Show all symbols whose names contain matches for @var{regexp}. @end table A more sophisticated sort of question to ask is, ``What are the commands for working with files?'' To ask this question, type @kbd{C-h a file @key{RET}}, which displays a list of all command names that contain @samp{file}, including @code{copy-file}, @code{find-file}, and so on. With each command name appears a brief description of how to use the command, and what keys you can currently invoke it with. For example, it would say that you can invoke @code{find-file} by typing @kbd{C-x C-f}. The @kbd{A} in @kbd{C-h A} stands for `Apropos'; @kbd{C-h A} runs the command @code{command-apropos}. This command normally checks only commands (interactive functions); if you specify a prefix argument, it checks noninteractive functions as well. Because @kbd{C-h A} looks only for functions whose names contain the string you specify, you must use ingenuity in choosing the string. If you are looking for commands for killing backwards and @kbd{C-h a kill-backwards @key{RET}} doesn't reveal any, don't give up. Try just @kbd{kill}, or just @kbd{backwards}, or just @kbd{back}. Be persistent. Pretend you are playing Adventure. Also note that you can use a regular expression as the argument, for more flexibility (@pxref{Regexps}). Here is a set of arguments to give to @kbd{C-h a} that covers many classes of XEmacs commands, since there are strong conventions for naming the standard XEmacs commands. By giving you a feel for the naming conventions, this set should also serve to aid you in developing a technique for picking @code{apropos} strings. @quotation char, line, word, sentence, paragraph, region, page, sexp, list, defun, rect, buffer, frame, window, face, file, dir, register, mode, beginning, end, forward, backward, next, previous, up, down, search, goto, kill, delete, mark, insert, yank, fill, indent, case, change, set, what, list, find, view, describe, default. @end quotation @findex apropos To list all Lisp symbols that contain a match for a regexp, not just the ones that are defined as commands, use the command @kbd{M-x apropos} instead of @kbd{C-h A}. This command does not check key bindings by default; specify a numeric argument if you want it to check them. @findex apropos-documentation The @code{apropos-documentation} command is like @code{apropos} except that it searches documentation strings for matches for the specified regular expression. @findex apropos-value The @code{apropos-value} command is like @code{apropos} except that it searches symbols' values for matches for the specified regular expression. This command does not check function definitions or property lists by default; specify a numeric argument if you want it to check them. @vindex apropos-do-all If the variable @code{apropos-do-all} is non-@code{nil}, the commands above all behave as if they had been given a prefix argument. If you want more information about a function definition, variable or symbol property listed in the Apropos buffer, you can click on it with @kbd{Mouse-2} or move there and type @key{RET}. @node Library Keywords, Help Mode, Apropos, Help @section Keyword Search for Lisp Libraries @kindex C-h p @findex finder-by-keyword The @kbd{C-h p} command lets you search the standard Emacs Lisp libraries by topic keywords. Here is a partial list of keywords you can use: @display abbrev abbreviation handling, typing shortcuts, macros bib code related to the `bib' bibliography processor c C, C++, and Objective-C language support calendar calendar and time management support comm communications, networking, remote access to files data support for editing files of data docs support for Emacs documentation dumped files preloaded into Emacs emulations emulations of other editors extensions Emacs Lisp language extensions faces support for multiple fonts frames support for Emacs frames and window systems games games, jokes and amusements hardware support for interfacing with exotic hardware help support for on-line help systems hypermedia support for links between text or other media types i18n internationalization and alternate character-set support internal code for Emacs internals, build process, defaults languages specialized modes for editing programming languages lisp Lisp support, including Emacs Lisp local code local to your site maint maintenance aids for the Emacs development group mail modes for electronic-mail handling matching various sorts of searching and matching mouse mouse support mule multi-language extensions news support for netnews reading and posting oop support for object-oriented programming outlines support for hierarchical outlining processes process, subshell, compilation, and job control support terminals support for terminal types tex code related to the TeX formatter tools programming tools unix front-ends/assistants for, or emulators of, UNIX features vms support code for vms wp word processing @end display @node Help Mode, Misc Help, Library Keywords, Help @section Help Mode Commands Help buffers provide the commands of View mode (@pxref{Misc File Ops}), plus a few special commands of their own. @table @kbd @item @key{SPC} Scroll forward. @item @key{DEL} @itemx @key{BS} Scroll backward. @c @item @key{RET} @c Follow a cross reference at point. @c @item @key{TAB} @c Move point forward to the next cross reference. @c @item S-@key{TAB} @c Move point back to the previous cross reference. @c @item Mouse-2 @c Follow a cross reference that you click on. @end table When a command name (@pxref{M-x,, Running Commands by Name}) or variable name (@pxref{Variables}) appears in the documentation, it normally appears inside paired single-quotes. @node Misc Help, , Help Mode, Help @section Other Help Commands @kindex C-h i @findex info @cindex Info @cindex manuals, on-line @cindex on-line manuals @kbd{C-h i} (@code{info}) runs the Info program, which is used for browsing through structured documentation files. The entire XEmacs manual is available within Info. Eventually all the documentation of the GNU system will be available. Type @kbd{h} after entering Info to run a tutorial on using Info. If you specify a numeric argument, @kbd{C-h i} prompts for the name of a documentation file. This way, you can browse a file which doesn't have an entry in the top-level Info menu. It is also handy when you need to get to the documentation quickly, and you know the exact name of the file. @kindex C-h C-f @kindex C-h C-k @findex Info-elisp-ref @findex Info-goto-emacs-command-node There are two special help commands for accessing XEmacs documentation through Info. @kbd{C-h C-f @var{function} @key{RET}} enters Info and goes straight to the documentation of the XEmacs function @var{function}. @kbd{C-h C-k @var{key}} enters Info and goes straight to the documentation of the key @var{key}. These two keys run the commands @code{Info-elisp-ref} and @code{Info-goto-emacs-key-command-node}. @kindex C-h l @findex view-lossage If something surprising happens, and you are not sure what commands you typed, use @kbd{C-h l} (@code{view-lossage}). @kbd{C-h l} prints the last 100 command characters you typed in. If you see commands that you don't know, you can use @kbd{C-h c} to find out what they do. @kindex C-h m @findex describe-mode XEmacs has several major modes. Each mode redefines a few keys and makes a few other changes in how editing works. @kbd{C-h m} (@code{describe-mode}) prints documentation on the current major mode, which normally describes all the commands that are changed in this mode. @kindex C-h b @findex describe-bindings @kbd{C-h b} (@code{describe-bindings}) and @kbd{C-h s} (@code{describe-syntax}) present information about the current XEmacs mode that is not covered by @kbd{C-h m}. @kbd{C-h b} displays a list of all the key bindings currently in effect, with the local bindings of the current major mode first, followed by the global bindings (@pxref{Key Bindings}). @kbd{C-h s} displays the contents of the syntax table with explanations of each character's syntax (@pxref{Syntax}). You can get a similar list for a particular prefix key by typing @kbd{C-h} after the prefix key. (There are a few prefix keys for which this does not work---those that provide their own bindings for @kbd{C-h}. One of these is @key{ESC}, because @kbd{@key{ESC} C-h} is actually @kbd{C-M-h}, which marks a defun.) @kindex C-h F @findex xemacs-local-faq @kindex C-h n @findex view-emacs-news @kindex C-h t @findex help-with-tutorial @kindex C-h C-c @findex describe-copying @kindex C-h C-d @findex describe-distribution @kindex C-h C-w @findex describe-no-warranty The other @kbd{C-h} options display various files of useful information. @kbd{C-h C-w} (@code{describe-no-warranty}) displays the full details on the complete absence of warranty for XEmacs. @kbd{C-h n} (@code{view-emacs-news}) displays the file @file{xemacs/etc/NEWS}, which contains documentation on XEmacs changes arranged chronologically. @kbd{C-h F} (@code{xemacs-local-faq}) displays local version of the XEmacs frequently-answered-questions-list. @kbd{C-h t} (@code{help-with-tutorial}) displays the learn-by-doing XEmacs tutorial. @kbd{C-h C-c} (@code{describe-copying}) displays the file @file{xemacs/etc/COPYING}, which tells you the conditions you must obey in distributing copies of XEmacs. @kbd{C-h C-d} (@code{describe-distribution}) displays another file named @file{xemacs/etc/DISTRIB}, which tells you how you can order a copy of the latest version of XEmacs. texi2html-1.82/test/xemacs_manual/mark.texi0000644000175000017500000002334111264347115022660 0ustar flichtenheldflichtenheld @node Mark, Mouse Selection, Help, Top @chapter Selecting Text @cindex mark @cindex region Many Emacs commands operate on an arbitrary contiguous part of the current buffer. You can select text in two ways: @itemize @bullet @item You use special keys to select text by defining a region between point and the mark. @item If you are running XEmacs under X, you can also select text with the mouse. @end itemize @section The Mark and the Region To specify the text for a command to operate on, set @dfn{the mark} at one end of it, and move point to the other end. The text between point and the mark is called @dfn{the region}. You can move point or the mark to adjust the boundaries of the region. It doesn't matter which one is set first chronologically, or which one comes earlier in the text. Once the mark has been set, it remains until it is set again at another place. The mark remains fixed with respect to the preceding character if text is inserted or deleted in a buffer. Each Emacs buffer has its own mark; when you return to a buffer that had been selected previously, it has the same mark it had before. Many commands that insert text, such as @kbd{C-y} (@code{yank}) and @kbd{M-x insert-buffer}, position the mark at one end of the inserted text---the opposite end from where point is positioned, so that the region contains the text just inserted. Aside from delimiting the region, the mark is useful for marking a spot that you may want to go back to. To make this feature more useful, Emacs remembers 16 previous locations of the mark in the @code{mark ring}. @menu * Setting Mark:: Commands to set the mark. * Using Region:: Summary of ways to operate on contents of the region. * Marking Objects:: Commands to put region around textual units. * Mark Ring:: Previous mark positions saved so you can go back there. @end menu @node Setting Mark, Using Region, Mark, Mark @subsection Setting the Mark Here are some commands for setting the mark: @c WideCommands @table @kbd @item C-@key{SPC} Set the mark where point is (@code{set-mark-command}). @item C-@@ The same. @item C-x C-x Interchange mark and point (@code{exchange-point-and-mark}). @item C-< Pushes a mark at the beginning of the buffer. @item C-> Pushes a mark at the end of the buffer. @end table For example, to convert part of the buffer to all upper-case, you can use the @kbd{C-x C-u} (@code{upcase-region}) command, which operates on the text in the region. First go to the beginning of the text you want to capitalize and type @kbd{C-@key{SPC}} to put the mark there, then move to the end, and then type @kbd{C-x C-u} to capitalize the selected region. You can also set the mark at the end of the text, move to the beginning, and then type @kbd{C-x C-u}. Most commands that operate on the text in the region have the word @code{region} in their names. @kindex C-SPC @findex set-mark-command The most common way to set the mark is with the @kbd{C-@key{SPC}} command (@code{set-mark-command}). This command sets the mark where point is. You can then move point away, leaving the mark behind. It is actually incorrect to speak of the character @kbd{C-@key{SPC}}; there is no such character. When you type @key{SPC} while holding down @key{CTRL}, you get the character @kbd{C-@@} on most terminals. This character is actually bound to @code{set-mark-command}. But unless you are unlucky enough to have a terminal where typing @kbd{C-@key{SPC}} does not produce @kbd{C-@@}, you should think of this character as @kbd{C-@key{SPC}}. @kindex C-x C-x @findex exchange-point-and-mark Since terminals have only one cursor, Emacs cannot show you where the mark is located. Most people use the mark soon after they set it, before they forget where it is. But you can see where the mark is with the command @kbd{C-x C-x} (@code{exchange-point-and-mark}) which puts the mark where point was and point where the mark was. The extent of the region is unchanged, but the cursor and point are now at the previous location of the mark. @kindex C-< @kindex C-> @findex mark-beginning-of-buffer @findex mark-end-of-buffer Another way to set the mark is to push the mark to the beginning of a buffer while leaving point at its original location. If you supply an argument to @kbd{C-<} (@code{mark-beginning-of-buffer}), the mark is pushed @var{n}/10 of the way from the true beginning of the buffer. You can also set the mark at the end of a buffer with @kbd{C->} (@code{mark-end-of-buffer}). It pushes the mark to the end of the buffer, leaving point alone. Supplying an argument to the command pushes the mark @var{n}/10 of the way from the true end of the buffer. If you are using XEmacs under the X window system, you can set the variable @code{zmacs-regions} to @code{t}. This makes the current region (defined by point and mark) highlight and makes it available as the X clipboard selection, which means you can use the menu bar items on it. @xref{Active Regions}, for more information. @kbd{C-x C-x} is also useful when you are satisfied with the location of point but want to move the mark; do @kbd{C-x C-x} to put point there and then you can move it. A second use of @kbd{C-x C-x}, if necessary, puts the mark at the new location with point back at its original location. @node Using Region, Marking Objects, Setting Mark, Mark @subsection Operating on the Region Once you have created an active region, you can do many things to the text in it: @itemize @bullet @item Kill it with @kbd{C-w} (@pxref{Killing}). @item Save it in a register with @kbd{C-x r s} (@pxref{Registers}). @item Save it in a buffer or a file (@pxref{Accumulating Text}). @item Convert case with @kbd{C-x C-l} or @kbd{C-x C-u} @*(@pxref{Case}). @item Evaluate it as Lisp code with @kbd{M-x eval-region} (@pxref{Lisp Eval}). @item Fill it as text with @kbd{M-q} (@pxref{Filling}). @item Print hardcopy with @kbd{M-x print-region} (@pxref{Hardcopy}). @item Indent it with @kbd{C-x @key{TAB}} or @kbd{C-M-\} (@pxref{Indentation}). @end itemize @node Marking Objects, Mark Ring, Using Region, Mark @subsection Commands to Mark Textual Objects There are commands for placing point and the mark around a textual object such as a word, list, paragraph or page. @table @kbd @item M-@@ Set mark after end of next word (@code{mark-word}). This command and the following one do not move point. @item C-M-@@ Set mark after end of next Lisp expression (@code{mark-sexp}). @item M-h Put region around current paragraph (@code{mark-paragraph}). @item C-M-h Put region around current Lisp defun (@code{mark-defun}). @item C-x h Put region around entire buffer (@code{mark-whole-buffer}). @item C-x C-p Put region around current page (@code{mark-page}). @end table @kindex M-@@ @kindex C-M-@@ @findex mark-word @findex mark-sexp @kbd{M-@@} (@code{mark-word}) puts the mark at the end of the next word, while @kbd{C-M-@@} (@code{mark-sexp}) puts it at the end of the next Lisp expression. These characters sometimes save you some typing. @kindex M-h @kindex C-M-h @kindex C-x C-p @kindex C-x h @findex mark-paragraph @findex mark-defun @findex mark-page @findex mark-whole-buffer A number of commands are available that set both point and mark and thus delimit an object in the buffer. @kbd{M-h} (@code{mark-paragraph}) moves point to the beginning of the paragraph that surrounds or follows point, and puts the mark at the end of that paragraph (@pxref{Paragraphs}). You can then indent, case-convert, or kill the whole paragraph. In the same fashion, @kbd{C-M-h} (@code{mark-defun}) puts point before and the mark after the current or following defun (@pxref{Defuns}). @kbd{C-x C-p} (@code{mark-page}) puts point before the current page (or the next or previous, depending on the argument), and mark at the end (@pxref{Pages}). The mark goes after the terminating page delimiter (to include it), while point goes after the preceding page delimiter (to exclude it). Finally, @kbd{C-x h} (@code{mark-whole-buffer}) sets up the entire buffer as the region by putting point at the beginning and the mark at the end. @node Mark Ring,, Marking Objects, Mark @subsection The Mark Ring @kindex C-u C-SPC @cindex mark ring @kindex C-u C-@@ Aside from delimiting the region, the mark is also useful for marking a spot that you may want to go back to. To make this feature more useful, Emacs remembers 16 previous locations of the mark in the @dfn{mark ring}. Most commands that set the mark push the old mark onto this ring. To return to a marked location, use @kbd{C-u C-@key{SPC}} (or @kbd{C-u C-@@}); this is the command @code{set-mark-command} given a numeric argument. The command moves point to where the mark was, and restores the mark from the ring of former marks. Repeated use of this command moves point to all the old marks on the ring, one by one. The marks you have seen go to the end of the ring, so no marks are lost. Each buffer has its own mark ring. All editing commands use the current buffer's mark ring. In particular, @kbd{C-u C-@key{SPC}} always stays in the same buffer. Many commands that can move long distances, such as @kbd{M-<} (@code{beginning-of-buffer}), start by setting the mark and saving the old mark on the mark ring. This makes it easier for you to move back later. Searches set the mark, unless they do not actually move point. When a command sets the mark, @samp{Mark Set} is printed in the echo area. @vindex mark-ring-max The variable @code{mark-ring-max} is the maximum number of entries to keep in the mark ring. If that many entries exist and another entry is added, the last entry in the list is discarded. Repeating @kbd{C-u C-@key{SPC}} circulates through the entries that are currently in the ring. @vindex mark-ring The variable @code{mark-ring} holds the mark ring itself, as a list of marker objects in the order most recent first. This variable is local in every buffer. texi2html-1.82/test/xemacs_manual/building.texi0000644000175000017500000007055511264347115023534 0ustar flichtenheldflichtenheld @node Running, Abbrevs, Programs, Top @chapter Compiling and Testing Programs The previous chapter discusses the Emacs commands that are useful for making changes in programs. This chapter deals with commands that assist in the larger process of developing and maintaining programs. @menu * Compilation:: Compiling programs in languages other than Lisp (C, Pascal, etc.) * Modes: Lisp Modes. Various modes for editing Lisp programs, with different facilities for running the Lisp programs. * Libraries: Lisp Libraries. Creating Lisp programs to run in Emacs. * Eval: Lisp Eval. Executing a single Lisp expression in Emacs. * Debug: Lisp Debug. Debugging Lisp programs running in Emacs. * Interaction: Lisp Interaction. Executing Lisp in an Emacs buffer. * External Lisp:: Communicating through Emacs with a separate Lisp. @end menu @node Compilation, Lisp Modes, Running, Running @section Running ``make'', or Compilers Generally @cindex inferior process @cindex make @cindex compilation errors @cindex error log Emacs can run compilers for non-interactive languages like C and Fortran as inferior processes, feeding the error log into an Emacs buffer. It can also parse the error messages and visit the files in which errors are found, moving point to the line where the error occurred. @table @kbd @item M-x compile Run a compiler asynchronously under Emacs, with error messages to @samp{*compilation*} buffer. @item M-x grep Run @code{grep} asynchronously under Emacs, with matching lines listed in the buffer named @samp{*compilation*}. @item M-x kill-compilation Kill the process made by the @code{M-x compile} command. @item M-x kill-grep Kill the running compilation or @code{grep} subprocess. @item C-x ` Visit the next compiler error message or @code{grep} match. @end table @findex compile To run @code{make} or another compiler, type @kbd{M-x compile}. This command reads a shell command line using the minibuffer, then executes the specified command line in an inferior shell with output going to the buffer named @samp{*compilation*}. By default, the current buffer's default directory is used as the working directory for the execution of the command; therefore, the makefile comes from this directory. @vindex compile-command When the shell command line is read, the minibuffer appears containing a default command line (the command you used the last time you typed @kbd{M-x compile}). If you type just @key{RET}, the same command line is used again. The first @kbd{M-x compile} provides @code{make -k} as the default. The default is taken from the variable @code{compile-command}; if the appropriate compilation command for a file is something other than @code{make -k}, it can be useful to have the file specify a local value for @code{compile-command} (@pxref{File Variables}). @cindex compiling files When you start a compilation, the buffer @samp{*compilation*} is displayed in another window but not selected. Its mode line displays the word @samp{run} or @samp{exit} in the parentheses to tell you whether compilation is finished. You do not have to keep this buffer visible; compilation continues in any case. @findex kill-compilation To kill the compilation process, type @kbd{M-x kill-compilation}. The mode line of the @samp{*compilation*} buffer changes to say @samp{signal} instead of @samp{run}. Starting a new compilation also kills any running compilation, as only one can occur at any time. Starting a new compilation prompts for confirmation before actually killing a compilation that is running.@refill @kindex C-x ` @findex next-error To parse the compiler error messages, type @kbd{C-x `} (@code{next-error}). The character following @kbd{C-x} is the grave accent, not the single quote. The command displays the buffer @samp{*compilation*} in one window and the buffer in which the next error occurred in another window. Point in that buffer is moved to the line where the error was found. The corresponding error message is scrolled to the top of the window in which @samp{*compilation*} is displayed. The first time you use @kbd{C-x `} after the start of a compilation, it parses all the error messages, visits all the files that have error messages, and creates markers pointing at the lines the error messages refer to. It then moves to the first error message location. Subsequent uses of @kbd{C-x `} advance down the data set up by the first use. When the preparsed error messages are exhausted, the next @kbd{C-x `} checks for any more error messages that have come in; this is useful if you start editing compiler errors while compilation is still going on. If no additional error messages have come in, @kbd{C-x `} reports an error. @kbd{C-u C-x `} discards the preparsed error message data and parses the @samp{*compilation*} buffer again, then displays the first error. This way, you can process the same set of errors again. Instead of running a compiler, you can run @code{grep} and see the lines on which matches were found. To do this, type @kbd{M-x grep} with an argument line that contains the same arguments you would give to @code{grep}: a @code{grep}-style regexp (usually in single quotes to quote the shell's special characters) followed by filenames, which may use wildcard characters. The output from @code{grep} goes in the @samp{*compilation*} buffer. You can use @kbd{C-x `} to find the lines that match as if they were compilation errors. Note: a shell is used to run the compile command, but the shell is not run in interactive mode. In particular, this means that the shell starts up with no prompt. If you find your usual shell prompt making an unsightly appearance in the @samp{*compilation*} buffer, it means you have made a mistake in your shell's initialization file (@file{.cshrc} or @file{.shrc} or @dots{}) by setting the prompt unconditionally. The shell initialization file should set the prompt only if there already is a prompt. Here's how to do it in @code{csh}: @example if ($?prompt) set prompt = ... @end example @node Lisp Modes, Lisp Libraries, Compilation, Running @section Major Modes for Lisp Emacs has four different major modes for Lisp. They are the same in terms of editing commands, but differ in the commands for executing Lisp expressions. @table @asis @item Emacs-Lisp mode The mode for editing source files of programs to run in Emacs Lisp. This mode defines @kbd{C-M-x} to evaluate the current defun. @xref{Lisp Libraries}. @item Lisp Interaction mode The mode for an interactive session with Emacs Lisp. It defines @key{LFD} to evaluate the sexp before point and insert its value in the buffer. @xref{Lisp Interaction}. @item Lisp mode The mode for editing source files of programs that run in other dialects of Lisp than Emacs Lisp. This mode defines @kbd{C-M-x} to send the current defun to an inferior Lisp process. @xref{External Lisp}. @item Inferior Lisp mode The mode for an interactive session with an inferior Lisp process. This mode combines the special features of Lisp mode and Shell mode (@pxref{Shell Mode}). @item Scheme mode Like Lisp mode but for Scheme programs. @item Inferior Scheme mode The mode for an interactive session with an inferior Scheme process. @end table @node Lisp Libraries, Lisp Eval, Lisp Modes, Running @section Libraries of Lisp Code for Emacs @cindex libraries @cindex loading Lisp code Lisp code for Emacs editing commands is stored in files whose names conventionally end in @file{.el}. This ending tells Emacs to edit them in Emacs-Lisp mode (@pxref{Lisp Modes}). @menu * Loading:: Loading libraries of Lisp code into Emacs for use. * Compiling Libraries:: Compiling a library makes it load and run faster. * Mocklisp:: Converting Mocklisp to Lisp so XEmacs can run it. @end menu @node Loading, Compiling Libraries, Lisp Libraries, Lisp Libraries @subsection Loading Libraries @table @kbd @item M-x load-file @var{file} Load the file @var{file} of Lisp code. @item M-x load-library @var{library} Load the library named @var{library}. @item M-x locate-library @var{library} &optional @var{nosuffix} Show the full path name of Emacs library @var{library}. @end table @findex load-file To execute a file of Emacs Lisp, use @kbd{M-x load-file}. This command reads the file name you provide in the minibuffer, then executes the contents of that file as Lisp code. It is not necessary to visit the file first; in fact, this command reads the file as found on disk, not the text in an Emacs buffer. @findex load @findex load-library Once a file of Lisp code is installed in the Emacs Lisp library directories, users can load it using @kbd{M-x load-library}. Programs can load it by calling @code{load-library}, or with @code{load}, a more primitive function that is similar but accepts some additional arguments. @kbd{M-x load-library} differs from @kbd{M-x load-file} in that it searches a sequence of directories and tries three file names in each directory. The three names are: first, the specified name with @file{.elc} appended; second, the name with @file{.el} appended; third, the specified name alone. A @file{.elc} file would be the result of compiling the Lisp file into byte code; if possible, it is loaded in preference to the Lisp file itself because the compiled file loads and runs faster. @cindex loading libraries Because the argument to @code{load-library} is usually not in itself a valid file name, file name completion is not available. In fact, when using this command, you usually do not know exactly what file name will be used. @vindex load-path The sequence of directories searched by @kbd{M-x load-library} is specified by the variable @code{load-path}, a list of strings that are directory names. The elements of this list may not begin with "@samp{~}", so you must call @code{expand-file-name} on them before adding them to the list. The default value of the list contains the directory where the Lisp code for Emacs itself is stored. If you have libraries of your own, put them in a single directory and add that directory to @code{load-path}. @code{nil} in this list stands for the current default directory, but it is probably not a good idea to put @code{nil} in the list. If you start wishing that @code{nil} were in the list, you should probably use @kbd{M-x load-file} for this case. The variable is initialized by the @b{EMACSLOADPATH} environment variable. If no value is specified, the variable takes the default value specified in the file @file{paths.h} when Emacs was built. If a path isn't specified in @file{paths.h}, a default value is obtained from the file system, near the directory in which the Emacs executable resides. @findex locate-library Like @kbd{M-x load-library}, @kbd{M-x locate-library} searches the directories in @code{load-path} to find the file that @kbd{M-x load-library} would load. If the optional second argument @var{nosuffix} is non-@code{nil}, the suffixes @file{.elc} or @file{.el} are not added to the specified name @var{library} (like calling @code{load} instead of @code{load-library}). @cindex autoload You often do not have to give any command to load a library, because the commands defined in the library are set up to @dfn{autoload} that library. Running any of those commands causes @code{load} to be called to load the library; this replaces the autoload definitions with the real ones from the library. If autoloading a file does not finish, either because of an error or because of a @kbd{C-g} quit, all function definitions made by the file are undone automatically. So are any calls to @code{provide}. As a consequence, the entire file is loaded a second time if you use one of the autoloadable commands again. This prevents problems when the command is no longer autoloading but is working incorrectly because the file was only partially loaded. Function definitions are undone only for autoloading; explicit calls to @code{load} do not undo anything if loading is not completed. @vindex after-load-alist The variable @code{after-load-alist} takes an alist of expressions to be evaluated when particular files are loaded. Each element has the form @code{(@var{filename} forms...)}. When @code{load} is run and the filename argument is @var{filename}, the forms in the corresponding element are executed at the end of loading. @var{filename} must match exactly. Normally @var{filename} is the name of a library, with no directory specified, since that is how load is normally called. An error in @code{forms} does not undo the load, but it does prevent execution of the rest of the @code{forms}. @node Compiling Libraries, Mocklisp, Loading, Lisp Libraries @subsection Compiling Libraries @cindex byte code Emacs Lisp code can be compiled into byte-code which loads faster, takes up less space when loaded, and executes faster. @table @kbd @item M-x batch-byte-compile Run byte-compile-file on the files remaining on the command line. @item M-x byte-compile-buffer &optional @var{buffer} Byte-compile and evaluate contents of @var{buffer} (default is current buffer). @item M-x byte-compile-file Compile a file of Lisp code named @var{filename} into a file of byte code. @item M-x byte-compile-and-load-file @var{filename} Compile a file of Lisp code named @var{filename} into a file of byte code and load it. @item M-x byte-recompile-directory @var{directory} Recompile every @file{.el} file in @var{directory} that needs recompilation. @item M-x disassemble Print disassembled code for @var{object} on (optional) @var{stream}. @findex make-obsolete @item M-x make-obsolete @var{function new} Make the byte-compiler warn that @var{function} is obsolete and @var{new} should be used instead. @end table @findex byte-compile-file @findex byte-compile-and-load-file @findex byte-compile-buffer @kbd{byte-compile-file} creates a byte-code compiled file from an Emacs-Lisp source file. The default argument for this function is the file visited in the current buffer. The function reads the specified file, compiles it into byte code, and writes an output file whose name is made by appending @file{c} to the input file name. Thus, the file @file{rmail.el} would be compiled into @file{rmail.elc}. To compile a file of Lisp code named @var{filename} into a file of byte code and then load it, use @code{byte-compile-and-load-file}. To compile and evaluate Lisp code in a given buffer, use @code{byte-compile-buffer}. @findex byte-recompile-directory To recompile all changed Lisp files in a directory, use @kbd{M-x byte-recompile-directory}. Specify just the directory name as an argument. Each @file{.el} file that has been byte-compiled before is byte-compiled again if it has changed since the previous compilation. A numeric argument to this command tells it to offer to compile each @file{.el} file that has not been compiled yet. You must answer @kbd{y} or @kbd{n} to each offer. @findex batch-byte-compile You can use the function @code{batch-byte-compile} to invoke Emacs non-interactively from the shell to do byte compilation. When you use this function, the files to be compiled are specified with command-line arguments. Use a shell command of the form: @example emacs -batch -f batch-byte-compile @var{files}... @end example Directory names may also be given as arguments; in that case, @code{byte-recompile-directory} is invoked on each such directory. @code{batch-byte-compile} uses all remaining command-line arguments as file or directory names, then kills the Emacs process. @findex disassemble @kbd{M-x disassemble} explains the result of byte compilation. Its argument is a function name. It displays the byte-compiled code in a help window in symbolic form, one instruction per line. If the instruction refers to a variable or constant, that is shown, too. @node Mocklisp,,Compiling Libraries,Lisp Libraries @subsection Converting Mocklisp to Lisp @cindex mocklisp @findex convert-mocklisp-buffer XEmacs can run Mocklisp files by converting them to Emacs Lisp first. To convert a Mocklisp file, visit it and then type @kbd{M-x convert-mocklisp-buffer}. Then save the resulting buffer of Lisp file in a file whose name ends in @file{.el} and use the new file as a Lisp library. You cannot currently byte-compile converted Mocklisp code. The reason is that converted Mocklisp code uses some special Lisp features to deal with Mocklisp's incompatible ideas of how arguments are evaluated and which values signify ``true'' or ``false''. @node Lisp Eval, Lisp Debug, Lisp Libraries, Running @section Evaluating Emacs-Lisp Expressions @cindex Emacs-Lisp mode @findex emacs-lisp-mode Lisp programs intended to be run in Emacs should be edited in Emacs-Lisp mode; this will happen automatically for file names ending in @file{.el}. By contrast, Lisp mode itself should be used for editing Lisp programs intended for other Lisp systems. Emacs-Lisp mode can be selected with the command @kbd{M-x emacs-lisp-mode}. For testing of Lisp programs to run in Emacs, it is useful to be able to evaluate part of the program as it is found in the Emacs buffer. For example, if you change the text of a Lisp function definition and then evaluate the definition, Emacs installs the change for future calls to the function. Evaluation of Lisp expressions is also useful in any kind of editing task for invoking non-interactive functions (functions that are not commands). @table @kbd @item M-: Read a Lisp expression in the minibuffer, evaluate it, and print the value in the minibuffer (@code{eval-expression}). @item C-x C-e Evaluate the Lisp expression before point, and print the value in the minibuffer (@code{eval-last-sexp}). @item C-M-x Evaluate the defun containing point or after point, and print the value in the minibuffer (@code{eval-defun}). @item M-x eval-region Evaluate all the Lisp expressions in the region. @item M-x eval-current-buffer Evaluate all the Lisp expressions in the buffer. @end table @kindex M-: @findex eval-expression @kbd{M-:} (@code{eval-expression}) is the most basic command for evaluating a Lisp expression interactively. It reads the expression using the minibuffer, so you can execute any expression on a buffer regardless of what the buffer contains. When evaluation is complete, the current buffer is once again the buffer that was current when @kbd{M-:} was typed. @kindex C-M-x @findex eval-defun In Emacs-Lisp mode, the key @kbd{C-M-x} is bound to the function @code{eval-defun}, which parses the defun containing point or following point as a Lisp expression and evaluates it. The value is printed in the echo area. This command is convenient for installing in the Lisp environment changes that you have just made in the text of a function definition. @kindex C-x C-e @findex eval-last-sexp The command @kbd{C-x C-e} (@code{eval-last-sexp}) performs a similar job but is available in all major modes, not just Emacs-Lisp mode. It finds the sexp before point, reads it as a Lisp expression, evaluates it, and prints the value in the echo area. It is sometimes useful to type in an expression and then, with point still after it, type @kbd{C-x C-e}. If @kbd{C-M-x} or @kbd{C-x C-e} are given a numeric argument, they print the value by inserting it into the current buffer at point, rather than in the echo area. The argument value does not matter. @findex eval-region @findex eval-current-buffer The most general command for evaluating Lisp expressions from a buffer is @code{eval-region}. @kbd{M-x eval-region} parses the text of the region as one or more Lisp expressions, evaluating them one by one. @kbd{M-x eval-current-buffer} is similar, but it evaluates the entire buffer. This is a reasonable way to install the contents of a file of Lisp code that you are just ready to test. After finding and fixing a bug, use @kbd{C-M-x} on each function that you change, to keep the Lisp world in step with the source file. @node Lisp Debug, Lisp Interaction, Lisp Eval, Running @section The Emacs-Lisp Debugger @cindex debugger @vindex debug-on-error @vindex debug-on-quit XEmacs contains a debugger for Lisp programs executing inside it. This debugger is normally not used; many commands frequently get Lisp errors when invoked in inappropriate contexts (such as @kbd{C-f} at the end of the buffer) and it would be unpleasant to enter a special debugging mode in this case. When you want to make Lisp errors invoke the debugger, you must set the variable @code{debug-on-error} to non-@code{nil}. Quitting with @kbd{C-g} is not considered an error, and @code{debug-on-error} has no effect on the handling of @kbd{C-g}. However, if you set @code{debug-on-quit} to be non-@code{nil}, @kbd{C-g} will invoke the debugger. This can be useful for debugging an infinite loop; type @kbd{C-g} once the loop has had time to reach its steady state. @code{debug-on-quit} has no effect on errors.@refill @findex debug-on-entry @findex cancel-debug-on-entry @findex debug You can make Emacs enter the debugger when a specified function is called or at a particular place in Lisp code. Use @kbd{M-x debug-on-entry} with argument @var{fun-name} to have Emacs enter the debugger as soon as @var{fun-name} is called. Use @kbd{M-x cancel-debug-on-entry} to make the function stop entering the debugger when called. (Redefining the function also does this.) To enter the debugger from some other place in Lisp code, you must insert the expression @code{(debug)} there and install the changed code with @kbd{C-M-x}. @xref{Lisp Eval}.@refill When the debugger is entered, it displays the previously selected buffer in one window and a buffer named @samp{*Backtrace*} in another window. The backtrace buffer contains one line for each level of Lisp function execution currently going on. At the beginning of the buffer is a message describing the reason that the debugger was invoked, for example, an error message if it was invoked due to an error. The backtrace buffer is read-only and is in Backtrace mode, a special major mode in which letters are defined as debugger commands. The usual Emacs editing commands are available; you can switch windows to examine the buffer that was being edited at the time of the error, and you can switch buffers, visit files, and perform any other editing operations. However, the debugger is a recursive editing level (@pxref{Recursive Edit}); it is a good idea to return to the backtrace buffer and explicitly exit the debugger when you don't want to use it any more. Exiting the debugger kills the backtrace buffer. @cindex current stack frame The contents of the backtrace buffer show you the functions that are executing and the arguments that were given to them. It also allows you to specify a stack frame by moving point to the line describing that frame. The frame whose line point is on is considered the @dfn{current frame}. Some of the debugger commands operate on the current frame. Debugger commands are mainly used for stepping through code one expression at a time. Here is a list of them: @table @kbd @item c Exit the debugger and continue execution. In most cases, execution of the program continues as if the debugger had never been entered (aside from the effect of any variables or data structures you may have changed while inside the debugger). This includes entry to the debugger due to function entry or exit, explicit invocation, and quitting or certain errors. Most errors cannot be continued; trying to continue an error usually causes the same error to occur again. @item d Continue execution, but enter the debugger the next time a Lisp function is called. This allows you to step through the subexpressions of an expression, and see what the subexpressions do and what values they compute. When you enter the debugger this way, Emacs flags the stack frame for the function call from which you entered. The same function is then called when you exit the frame. To cancel this flag, use @kbd{u}. @item b Set up to enter the debugger when the current frame is exited. Frames that invoke the debugger on exit are flagged with stars. @item u Don't enter the debugger when the current frame is exited. This cancels a @kbd{b} command on a frame. @item e Read a Lisp expression in the minibuffer, evaluate it, and print the value in the echo area. This is equivalent to the command @kbd{M-:}. @item q Terminate the program being debugged; return to top-level Emacs command execution. If the debugger was entered due to a @kbd{C-g} but you really want to quit, not to debug, use the @kbd{q} command. @item r Return a value from the debugger. The value is computed by reading an expression with the minibuffer and evaluating it. The value returned by the debugger makes a difference when the debugger was invoked due to exit from a Lisp call frame (as requested with @kbd{b}); then the value specified in the @kbd{r} command is used as the value of that frame. The debugger's return value also matters with many errors. For example, @code{wrong-type-argument} errors will use the debugger's return value instead of the invalid argument; @code{no-catch} errors will use the debugger value as a throw tag instead of the tag that was not found. If an error was signaled by calling the Lisp function @code{signal}, the debugger's return value is returned as the value of @code{signal}. @end table @node Lisp Interaction, External Lisp, Lisp Debug, Running @section Lisp Interaction Buffers The buffer @samp{*scratch*}, which is selected when Emacs starts up, is provided for evaluating Lisp expressions interactively inside Emacs. Both the expressions you evaluate and their output goes in the buffer. The @samp{*scratch*} buffer's major mode is Lisp Interaction mode, which is the same as Emacs-Lisp mode except for one command, @key{LFD}. In Emacs-Lisp mode, @key{LFD} is an indentation command. In Lisp Interaction mode, @key{LFD} is bound to @code{eval-print-last-sexp}. This function reads the Lisp expression before point, evaluates it, and inserts the value in printed representation before point. The way to use the @samp{*scratch*} buffer is to insert Lisp expressions at the end, ending each one with @key{LFD} so that it will be evaluated. The result is a complete typescript of the expressions you have evaluated and their values. @findex lisp-interaction-mode The rationale for this feature is that Emacs must have a buffer when it starts up, but that buffer is not useful for editing files since a new buffer is made for every file that you visit. The Lisp interpreter typescript is the most useful thing I can think of for the initial buffer to do. @kbd{M-x lisp-interaction-mode} will put any buffer in Lisp Interaction mode. @node External Lisp,, Lisp Interaction, Running @section Running an External Lisp Emacs has facilities for running programs in other Lisp systems. You can run a Lisp process as an inferior of Emacs, and pass expressions to it to be evaluated. You can also pass changed function definitions directly from the Emacs buffers in which you edit the Lisp programs to the inferior Lisp process. @findex run-lisp To run an inferior Lisp process, type @kbd{M-x run-lisp}. This runs the program named @code{lisp}, the same program you would run by typing @code{lisp} as a shell command, with both input and output going through an Emacs buffer named @samp{*lisp*}. In other words, any ``terminal output'' from Lisp will go into the buffer, advancing point, and any ``terminal input'' for Lisp comes from text in the buffer. To give input to Lisp, go to the end of the buffer and type the input, terminated by @key{RET}. The @samp{*lisp*} buffer is in Inferior Lisp mode, which has all the special characteristics of Lisp mode and Shell mode (@pxref{Shell Mode}). @findex lisp-mode Use Lisp mode to run the source files of programs in external Lisps. You can select this mode with @kbd{M-x lisp-mode}. It is used automatically for files whose names end in @file{.l} or @file{.lisp}, as most Lisp systems usually expect. @kindex C-M-x @findex lisp-send-defun When you edit a function in a Lisp program you are running, the easiest way to send the changed definition to the inferior Lisp process is the key @kbd{C-M-x}. In Lisp mode, this key runs the function @code{lisp-send-defun}, which finds the defun around or following point and sends it as input to the Lisp process. (Emacs can send input to any inferior process regardless of what buffer is current.) Contrast the meanings of @kbd{C-M-x} in Lisp mode (for editing programs to be run in another Lisp system) and Emacs-Lisp mode (for editing Lisp programs to be run in Emacs): in both modes it has the effect of installing the function definition that point is in, but the way of doing so is different according to where the relevant Lisp environment is found. @xref{Lisp Modes}. texi2html-1.82/test/xemacs_manual/cmdargs.texi0000644000175000017500000002455111264347115023352 0ustar flichtenheldflichtenheld @node Command Switches, Startup Paths, Exiting, Top @section Command Line Switches and Arguments @cindex command line arguments @cindex arguments (from shell) XEmacs supports command line arguments you can use to request various actions when invoking Emacs. The commands are for compatibility with other editors and for sophisticated activities. If you are using XEmacs under the X window system, you can also use a number of standard Xt command line arguments. Command line arguments are not usually needed for editing with Emacs; new users can skip this section. Many editors are designed to be started afresh each time you want to edit. You start the editor to edit one file; then exit the editor. The next time you want to edit either another file or the same one, you start the editor again. Under these circumstances, it makes sense to use a command line argument to say which file to edit. The recommended way to use XEmacs is to start it only once, just after you log in, and do all your editing in the same Emacs process. Each time you want to edit a file, you visit it using the existing Emacs. Emacs creates a new buffer for each file, and (unless you kill some of the buffers) Emacs eventually has many files in it ready for editing. Usually you do not kill the Emacs process until you are about to log out. Since you usually read files by typing commands to Emacs, command line arguments for specifying a file when Emacs is started are seldom needed. Emacs accepts command-line arguments that specify files to visit, functions to call, and other activities and operating modes. If you are running XEmacs under the X window system, a number of standard Xt command line arguments are available, as well as a few X parameters that are XEmacs-specific. Options with long names with a single initial hyphen are also recognized with the GNU double initial hyphen syntax. (The reverse is not true.) The following subsections list: @itemize @bullet @item Command line arguments that you can always use @item Command line arguments that have to appear at the beginning of the argument list @item Command line arguments that are only relevant if you are running XEmacs under X @end itemize @subsection Command Line Arguments for Any Position Command line arguments are processed in the order they appear on the command line; however, certain arguments (the ones in the second table) must be at the front of the list if they are used. Here are the arguments allowed: @table @samp @item @var{file} Visit @var{file} using @code{find-file}. @xref{Visiting}. @item +@var{linenum} @var{file} Visit @var{file} using @code{find-file}, then go to line number @var{linenum} in it. @item -load @var{file} @itemx -l @var{file} Load a file @var{file} of Lisp code with the function @code{load}. @xref{Lisp Libraries}. @item -funcall @var{function} @itemx -f @var{function} Call Lisp function @var{function} with no arguments. @item -eval @var{function} Interpret the next argument as a Lisp expression, and evaluate it. You must be very careful of the shell quoting here. @item -insert @var{file} @itemx -i @var{file} Insert the contents of @var{file} into the current buffer. This is like what @kbd{M-x insert-buffer} does; @xref{Misc File Ops}. @item -kill Exit from Emacs without asking for confirmation. Always the last argument processed, no matter where it appears in the command line. @item -version @itemx -V Prints version information. This implies @samp{-batch}. @example % xemacs -version XEmacs 19.13 of Mon Aug 21 1995 on willow (usg-unix-v) [formerly Lucid Emacs] @end example @item -help Prints a summary of command-line options and then exits. @end table @subsection Command Line Arguments (Beginning of Line Only) The following arguments are recognized only at the beginning of the command line. If more than one of them appears, they must appear in the order in which they appear in this table. @table @samp @item --show-dump-id @itemx -sd Print the ID for the new portable dumper's dump file on the terminal and exit. (Prints an error message and exits if XEmacs was not configured @samp{--pdump}.) @item --no-dump-file @itemx -nd Don't load the dump file. Roughly equivalent to old temacs. (Ignored if XEmacs was not configured @samp{--pdump}.) @item --terminal @var{file} @itemx -t @var{file} Use @var{file} instead of the terminal for input and output. This implies the @samp{-nw} option, documented below. @cindex batch mode @item -batch Run Emacs in @dfn{batch mode}, which means that the text being edited is not displayed and the standard Unix interrupt characters such as @kbd{C-z} and @kbd{C-c} continue to have their normal effect. Emacs in batch mode outputs to @code{stderr} only what would normally be printed in the echo area under program control. Batch mode is used for running programs written in Emacs Lisp from shell scripts, makefiles, and so on. Normally the @samp{-l} switch or @samp{-f} switch will be used as well, to invoke a Lisp program to do the batch processing. @samp{-batch} implies @samp{-q} (do not load an init file). It also causes Emacs to kill itself after all command switches have been processed. In addition, auto-saving is not done except in buffers for which it has been explicitly requested. @item --no-windows @itemx -nw Start up XEmacs in TTY mode (using the TTY XEmacs was started from), rather than trying to connect to an X display. Note that this happens automatically if the @samp{DISPLAY} environment variable is not set. @item -debug-init Enter the debugger if an error in the init file occurs. @item -debug-paths Displays information on how XEmacs constructs the various paths into its hierarchy on startup. (See also @pxref{Startup Paths}.) @item -unmapped Do not map the initial frame. This is useful if you want to start up XEmacs as a server (e.g. for gnuserv screens or external client widgets). @item -no-init-file @itemx -q Do not load your Emacs init file. @xref{Init File}. @item -no-site-file Do not load the site-specific init file @file{lisp/site-start.el}. @item -no-autoloads Do not load global symbol files (@file{auto-autoloads}) at startup. This implies @samp{-vanilla}. @item -no-early-packages Do not process early packages. (For more information on startup issues concerning the package system, @xref{Startup Paths}.) @item -vanilla This is equivalent to @samp{-q -no-site-file -no-early-packages}. @item -user-init-file @var{file} Load @var{file} as your Emacs init file instead of @file{~/.xemacs/init.el}/@file{~/.emacs}. @item -user-init-directory @var{directory} Use @var{directory} as the location of your early package hierarchies and the various user-specific initialization files. @item -user @var{user} @itemx -u @var{user} Equivalent to @samp{-user-init-file ~@var{user}/.xemacs/init.el -user-init-directory ~@var{user}/.xemacs}, or @samp{-user-init-file ~@var{user}/.emacs -user-init-directory ~@var{user}/.xemacs}, whichever init file comes first. @xref{Init File}. @end table @vindex command-line-args Note that the init file can get access to the command line argument values as the elements of a list in the variable @code{command-line-args}. (The arguments in the second table above will already have been processed and will not be in the list.) The init file can override the normal processing of the other arguments by setting this variable. One way to use command switches is to visit many files automatically: @example xemacs *.c @end example @noindent passes each @code{.c} file as a separate argument to Emacs, so that Emacs visits each file (@pxref{Visiting}). Here is an advanced example that assumes you have a Lisp program file called @file{hack-c-program.el} which, when loaded, performs some useful operation on the current buffer, expected to be a C program. @example xemacs -batch foo.c -l hack-c-program -f save-buffer -kill > log @end example @noindent Here Emacs is told to visit @file{foo.c}, load @file{hack-c-program.el} (which makes changes in the visited file), save @file{foo.c} (note that @code{save-buffer} is the function that @kbd{C-x C-s} is bound to), and then exit to the shell from which the command was executed. @samp{-batch} guarantees there will be no problem redirecting output to @file{log}, because Emacs will not assume that it has a display terminal to work with. @subsection Command Line Arguments (for XEmacs Under X) @vindex frame-title-format @vindex frame-icon-title-format If you are running XEmacs under X, a number of options are available to control color, border, and window title and icon name: @table @samp @item -title @var{title} @itemx -wn @var{title} @itemx -T @var{title} Use @var{title} as the window title. This sets the @code{frame-title-format} variable, which controls the title of the X window corresponding to the selected frame. This is the same format as @code{mode-line-format}. @item -iconname @var{title} @itemx -in @var{title} Use @var{title} as the icon name. This sets the @code{frame-icon-title-format} variable, which controls the title of the icon corresponding to the selected frame. @item -mc @var{color} Use @var{color} as the mouse color. @item -cr @var{color} Use @var{color} as the text-cursor foreground color. @item -private Install a private colormap for XEmacs. @end table In addition, XEmacs allows you to use a number of standard Xt command line arguments. @table @samp @item -background @var{color} @itemx -bg @var{color} Use @var{color} as the background color. @item -bordercolor @var{color} @itemx -bd @var{color} Use @var{color} as the border color. @item -borderwidth @var{width} @itemx -bw @var{width} Use @var{width} as the border width. @item -display @var{display} @itemx -d @var{display} When running under the X window system, create the window containing the Emacs frame on the display named @var{display}. @item -foreground @var{color} @itemx -fg @var{color} Use @var{color} as the foreground color. @item -font @var{name} @itemx -fn @var{name} Use @var{name} as the default font. @item -geometry @var{spec} @itemx -geom @var{spec} @itemx -g @var{spec} Use the geometry (window size and/or position) specified by @var{spec}. @item -iconic Start up iconified. @item -rv Bring up Emacs in reverse video. @item -name @var{name} Use the resource manager resources specified by @var{name}. The default is to use the name of the program (@code{argv[0]}) as the resource manager name. @item -xrm Read something into the resource database for this invocation of Emacs only. @end table texi2html-1.82/test/xemacs_manual/m-x.texi0000644000175000017500000001232511264347115022427 0ustar flichtenheldflichtenheld @node M-x, Help, Minibuffer, Top @chapter Running Commands by Name The Emacs commands that are used often or that must be quick to type are bound to keys---short sequences of characters---for convenient use. Other Emacs commands that are used more rarely are not bound to keys; to run them, you must refer to them by name. A command name consists, by convention, of one or more words, separated by hyphens: for example, @code{auto-fill-mode} or @code{manual-entry}. The use of English words makes the command name easier to remember than a key made up of obscure characters, even though it results in more characters to type. You can run any command by name, even if it can be run by keys as well. @kindex M-x @cindex minibuffer To run a command by name, start with @kbd{M-x}, then type the command name, and finish with @key{RET}. @kbd{M-x} uses the minibuffer to read the command name. @key{RET} exits the minibuffer and runs the command. Emacs uses the minibuffer for reading input for many different purposes; on this occasion, the string @samp{M-x} is displayed at the beginning of the minibuffer as a @dfn{prompt} to remind you that your input should be the name of a command to be run. @xref{Minibuffer}, for full information on the features of the minibuffer. You can use completion to enter a command name. For example, to invoke the command @code{forward-char}, type: @example M-x forward-char @key{RET} @end example or @example M-x fo @key{TAB} c @key{RET} @end example @noindent After you type in @code{M-x fo TAB} emacs will give you a possible list of completions from which you can choose. Note that @code{forward-char} is the same command that you invoke with the key @kbd{C-f}. You can call any command (interactively callable function) defined in Emacs by its name using @kbd{M-x} regardless of whether or not any keys are bound to it. If you type @kbd{C-g} while Emacs reads the command name, you cancel the @kbd{M-x} command and get out of the minibuffer, ending up at top level. To pass a numeric argument to a command you are invoking with @kbd{M-x}, specify the numeric argument before the @kbd{M-x}. @kbd{M-x} passes the argument along to the function that it calls. The argument value appears in the prompt while the command name is being read. @findex interactive You can use the command @code{M-x interactive} to specify a way of parsing arguments for interactive use of a function. For example, write: @example (defun foo (arg) "Doc string" (interactive "p") ...use arg...) @end example to make @code{arg} be the prefix argument when @code{foo} is called as a command. The call to @code{interactive} is actually a declaration rather than a function; it tells @code{call-interactively} how to read arguments to pass to the function. When actually called, @code{interactive} returns @code{nil}. The argument of @var{interactive} is usually a string containing a code letter followed by a prompt. Some code letters do not use I/O to get the argument and do not need prompts. To prompt for multiple arguments, you must provide a code letter, its prompt, a newline, and another code letter, and so forth. If the argument is not a string, it is evaluated to get a list of arguments to pass to the function. If you do not provide an argument to @code{interactive}, no arguments are passed when calling interactively. Available code letters are: @table @code @item a Function name: symbol with a function definition @item b Name of existing buffer @item B Name of buffer, possibly nonexistent @item c Character @item C Command name: symbol with interactive function definition @item d Value of point as number (does not do I/O) @item D Directory name @item e Last mouse event @item f Existing file name @item F Possibly nonexistent file name @item k Key sequence (string) @item m Value of mark as number (does not do I/O) @item n Number read using minibuffer @item N Prefix arg converted to number, or if none, do like code @code{n} @item p Prefix arg converted to number (does not do I/O) @item P Prefix arg in raw form (does not do I/O) @item r Region: point and mark as two numeric arguments, smallest first (does not do I/O) @item s Any string @item S Any symbol @item v Variable name: symbol that is @code{user-variable-p} @item x Lisp expression read but not evaluated @item X Lisp expression read and evaluated @end table In addition, if the string begins with @samp{*}, an error is signaled if the buffer is read-only. This happens before reading any arguments. If the string begins with @samp{@@}, the window the mouse is over is selected before anything else is done. You may use both @samp{@@} and @samp{*}; they are processed in the order that they appear. Normally, when describing a command that is run by name, we omit the @key{RET} that is needed to terminate the name. Thus we may refer to @kbd{M-x auto-fill-mode} rather than @kbd{M-x auto-fill-mode} @key{RET}. We mention the @key{RET} only when it is necessary to emphasize its presence, for example, when describing a sequence of input that contains a command name and arguments that follow it. @findex execute-extended-command @kbd{M-x} is defined to run the command @code{execute-extended-command}, which is responsible for reading the name of another command and invoking it. texi2html-1.82/test/xemacs_manual/Makefile.in0000644000175000017500000002144611264347115023104 0ustar flichtenheldflichtenheld# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = test/xemacs_manual DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DATE = @PACKAGE_DATE@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ REQUIRE_DATA_DUMPER = @REQUIRE_DATA_DUMPER@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_DATA_DUMPER = @USE_DATA_DUMPER@ USE_UNICODE = @USE_UNICODE@ USE_UNIDECODE = @USE_UNIDECODE@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ am__leading_dot = @am__leading_dot@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ abbrevs.texi entering.texi keystrokes.texi mule.texi search.texi \ basic.texi files.texi killing.texi m-x.texi sending.texi \ buffers.texi fixit.texi major.texi new.texi startup.texi \ building.texi frame.texi mark.texi packages.texi text.texi \ calendar.texi glossary.texi menus.texi picture.texi trouble.texi \ cmdargs.texi gnu.texi mini.texi programs.texi undo.texi \ custom.texi help.texi misc.texi reading.texi windows.texi \ display.texi indent.texi mouse.texi regs.texi xemacs.texi \ tests.txt #res DISTCLEANFILES = l2h_tmp_dir.init tests.log tests.out all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/xemacs_manual/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu test/xemacs_manual/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-exec-am: install-html: install-html-am install-info: install-info-am install-man: install-pdf: install-pdf-am install-ps: install-ps-am installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distclean-local distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am distclean-local: rm -rf out diffs # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: texi2html-1.82/test/xemacs_manual/keystrokes.texi0000644000175000017500000005253011264347115024133 0ustar flichtenheldflichtenheld @node Keystrokes, Pull-down Menus, Frame, Top @chapter Keystrokes, Key Sequences, and Key Bindings @iftex This chapter discusses the character set Emacs uses for input commands and inside files. You have already learned that the more frequently used Emacs commands are bound to keys. For example, @kbd{Control-f} is bound to @code{forward-char}. The following issues are covered: @itemize @bullet @item How keystrokes can be represented @item How you can create key sequences from keystrokes @item How you can add to the available modifier keys by customizing your keyboard: for example, you could have the @key{Capslock} key be understood as the @key{Super} key by Emacs. A @key{Super} key is used like @key{Control} or @key{Meta} in that you hold it while typing another key. @end itemize You will also learn how to customize existing key bindings and create new ones. @end iftex @menu * Intro to Keystrokes:: Keystrokes as building blocks of key sequences. * Representing Keystrokes:: Using lists of modifiers and keysyms to represent keystrokes. * Key Sequences:: Combine key strokes into key sequences you can bind to commands. * String Key Sequences:: Available for upward compatibility. * Meta Key:: Using @key{ESC} to represent @key{Meta} * Super and Hyper Keys:: Adding modifier keys on certain keyboards. * Character Representation:: How characters appear in Emacs buffers. * Commands:: How commands are bound to key sequences. @end menu @node Intro to Keystrokes, Representing Keystrokes, Keystrokes, Keystrokes @section Keystrokes as Building Blocks of Key Sequences @cindex character set @cindex ASCII @cindex keystroke Earlier versions of Emacs used only the ASCII character set, which defines 128 different character codes. Some of these codes are assigned graphic symbols like @samp{a} and @samp{=}; the rest are control characters, such as @kbd{Control-a} (also called @kbd{C-a}). @kbd{C-a} means you hold down the @key{CTRL} key and then press @kbd{a}.@refill Keybindings in XEmacs are not restricted to the set of keystrokes that can be represented in ASCII. XEmacs can tell the difference between, for example, @kbd{Control-h}, @kbd{Control-Shift-h}, and @kbd{Backspace}. @cindex modifier key @cindex keysym @kindex meta key @kindex control key @kindex hyper key @kindex super key @kindex shift key @kindex button1 @kindex button2 @kindex button3 @kindex button1up @kindex button2up @kindex button3up A keystroke is like a piano chord: you get it by simultaneously striking several keys. To be more precise, a keystroke consists of a possibly empty set of modifiers followed by a single @dfn{keysym}. The set of modifiers is small; it consists of @kbd{Control}, @kbd{Meta}, @kbd{Super}, @kbd{Hyper}, and @kbd{Shift}. The rest of the keys on your keyboard, along with the mouse buttons, make up the set of keysyms. A keysym is usually what is printed on the keys on your keyboard. Here is a table of some of the symbolic names for keysyms: @table @kbd @item a,b,c... alphabetic keys @item f1,f2... function keys @item button1 left mouse button @item button2 middle mouse button @item button3 right mouse button @item button1up upstroke on the left mouse button @item button2up upstroke on the middle mouse button @item button3up upstroke on the right mouse button @item return Return key @end table @vindex keyboard-translate-table Use the variable @code{keyboard-translate-table} only if you are on a dumb tty, as it cannot handle input that cannot be represented as ASCII. The value of this variable is a string used as a translate table for keyboard input or @code{nil}. Each character is looked up in this string and the contents used instead. If the string is of length @code{n}, character codes @code{N} and up are untranslated. If you are running Emacs under X, you should do the translations with the @code{xmodmap} program instead. @node Representing Keystrokes, Key Sequences, Intro to Keystrokes, Keystrokes @comment node-name, next, previous, up @subsection Representing Keystrokes @kindex hyper key @kindex super key @findex read-key-sequence XEmacs represents keystrokes as lists. Each list consists of an arbitrary combination of modifiers followed by a single keysym at the end of the list. If the keysym corresponds to an ASCII character, you can use its character code. (A keystroke may also be represented by an event object, as returned by the @code{read-key-sequence} function; non-programmers need not worry about this.) The following table gives some examples of how to list representations for keystrokes. Each list consists of sets of modifiers followed by keysyms: @table @kbd @item (control a) Pressing @key{CTRL} and @kbd{a} simultaneously. @item (control ?a) Another way of writing the keystroke @kbd{C-a}. @item (control 65) Yet another way of writing the keystroke @kbd{C-a}. @item (break) Pressing the @key{BREAK} key. @item (control meta button2up) Release the middle mouse button, while pressing @key{CTRL} and @key{META}. @end table @cindex shift modifier Note: As you define keystrokes, you can use the @kbd{shift} key only as a modifier with characters that do not have a second keysym on the same key, such as @kbd{backspace} and @kbd{tab}. It is an error to define a keystroke using the @key{shift} modifier with keysyms such as @kbd{a} and @kbd{=}. The correct forms are @kbd{A} and @kbd{+}. @node Key Sequences, String Key Sequences, Representing Keystrokes, Keystrokes @subsection Representing Key Sequences A @dfn{complete key sequence} is a sequence of keystrokes that Emacs understands as a unit. Key sequences are significant because you can bind them to commands. Note that not all sequences of keystrokes are possible key sequences. In particular, the initial keystrokes in a key sequence must make up a @dfn{prefix key sequence}. Emacs represents a key sequence as a vector of keystrokes. Thus, the schematic representation of a complete key sequence is as follows: @example [(modifier .. modifier keysym) ... (modifier .. modifier keysym)] @end example Here are some examples of complete key sequences: @table @kbd @item [(control c) (control a)] Typing @kbd{C-c} followed by @kbd{C-a} @item [(control c) (control 65)] Typing @kbd{C-c} followed by @kbd{C-a}. (Using the ASCII code for the character `a')@refill @item [(control c) (break)] Typing @kbd{C-c} followed by the @kbd{break} character.@refill @end table @kindex C-c @kindex C-x @kindex C-h @kindex ESC @cindex prefix key sequence A @dfn{prefix key sequence} is the beginning of a series of longer sequences that are valid key sequences; adding any single keystroke to the end of a prefix results in a valid key sequence. For example, @kbd{control-x} is standardly defined as a prefix. Thus there is a two-character key sequence starting with @kbd{C-x} for each valid keystroke, giving numerous possibilities. Here are some samples: @itemize @bullet @item @kbd{[(control x) (c)]} @item @kbd{[(control x) (control c)]} @end itemize Adding one character to a prefix key does not have to form a complete key. It could make another, longer prefix. For example, @kbd{[(control x) (\4)]} is itself a prefix that leads to any number of different three-character keys, including @kbd{[(control x) (\4) (f)]}, @kbd{[(control x) (\4) (b)]} and so on. It would be possible to define one of those three-character sequences as a prefix, creating a series of four-character keys, but we did not define any of them this way.@refill By contrast, the two-character sequence @kbd{[(control f) (control k)]} is not a key, because the @kbd{(control f)} is a complete key sequence in itself. You cannot give @kbd{[(control f (control k)]} an independent meaning as a command while @kbd{(control f)} is a complete sequence, because Emacs would understand @key{C-f C-k} as two commands.@refill The predefined prefix key sequences in Emacs are @kbd{(control c)}, @kbd{(control x)}, @kbd{(control h)}, @kbd{[(control x) (\4)]}, and @kbd{escape}. You can customize Emacs and could make new prefix keys or eliminate the default key sequences. @xref{Key Bindings}. For example, if you redefine @kbd{(control f)} as a prefix, @kbd{[(control f) (control k)]} automatically becomes a valid key sequence (complete, unless you define it as a prefix as well). Conversely, if you remove the prefix definition of @kbd{[(control x) (\4)]}, @kbd{[(control x) (\4) (f)]} (or @kbd{[(control x) (\4) @var{anything}]}) is no longer a valid key sequence. Note that the above paragraphs uses \4 instead of simply 4, because \4 is the symbol whose name is "4", and plain 4 is the integer 4, which would have been interpreted as the ASCII value. Another way of representing the symbol whose name is "4" is to write ?4, which would be interpreted as the number 52, which is the ASCII code for the character "4". We could therefore actually have written 52 directly, but that is far less clear. @node String Key Sequences, Meta Key, Key Sequences, Keystrokes @comment node-name, next, previous, up @subsection String Key Sequences For backward compatibility, you may also represent a key sequence using strings. For example, we have the following equivalent representations: @table @kbd @item "\C-c\C-c" @code{[(control c) (control c)]} @item "\e\C-c" @code{[(meta control c)]} @end table @kindex LFD @kindex TAB @node Meta Key, Super and Hyper Keys, String Key Sequences, Keystrokes @comment node-name, next, previous, up @subsection Assignment of the @key{META} Key @kindex META @kindex ESC Not all terminals have the complete set of modifiers. Terminals that have a @key{Meta} key allow you to type Meta characters by just holding that key down. To type @kbd{Meta-a}, hold down @key{META} and press @kbd{a}. On those terminals, the @key{META} key works like the @key{SHIFT} key. Such a key is not always labeled @key{META}, however, as this function is often a special option for a key with some other primary purpose.@refill If there is no @key{META} key, you can still type Meta characters using two-character sequences starting with @key{ESC}. To enter @kbd{M-a}, you could type @kbd{@key{ESC} a}. To enter @kbd{C-M-a}, you would type @kbd{ESC C-a}. @key{ESC} is allowed on terminals with Meta keys, too, in case you have formed a habit of using it.@refill If you are running under X and do not have a @key{META} key, it is possible to reconfigure some other key to be a @key{META} key. @xref{Super and Hyper Keys}. @refill @vindex meta-flag Emacs believes the terminal has a @key{META} key if the variable @code{meta-flag} is non-@code{nil}. Normally this is set automatically according to the termcap entry for your terminal type. However, sometimes the termcap entry is wrong, and then it is useful to set this variable yourself. @xref{Variables}, for how to do this. Note: If you are running under the X window system, the setting of the @code{meta-flag} variable is irrelevant. @node Super and Hyper Keys, Character Representation, Meta Key, Keystrokes @comment node-name, next, previous, up @subsection Assignment of the @key{SUPER} and @key{HYPER} Keys @kindex hyper key @kindex super key Most keyboards do not, by default, have @key{SUPER} or @key{HYPER} modifier keys. Under X, you can simulate the @key{SUPER} or @key{HYPER} key if you want to bind keys to sequences using @kbd{super} and @kbd{hyper}. You can use the @code{xmodmap} program to do this. For example, to turn your @key{CAPS-LOCK} key into a @key{SUPER} key, do the following: Create a file called @code{~/.xmodmap}. In this file, place the lines @example remove Lock = Caps_Lock keysym Caps_Lock = Super_L add Mod2 = Super_L @end example The first line says that the key that is currently called @code{Caps_Lock} should no longer behave as a ``lock'' key. The second line says that this should now be called @code{Super_L} instead. The third line says that the key called @code{Super_L} should be a modifier key, which produces the @code{Mod2} modifier. To create a @key{META} or @key{HYPER} key instead of a @key{SUPER} key, replace the word @code{Super} above with @code{Meta} or @code{Hyper}. Just after you start up X, execute the command @code{xmodmap /.xmodmap}. You can add this command to the appropriate initialization file to have the command executed automatically.@refill If you have problems, see the documentation for the @code{xmodmap} program. The X keyboard model is quite complicated, and explaining it is beyond the scope of this manual. However, we reprint the following description from the X Protocol document for your convenience: @cindex keysyms @cindex keycode A list of keysyms is associated with each keycode. If that list (ignoring trailing @code{NoSymbol} entries) is a single keysym @samp{K}, then the list is treated as if it were the list @code{``K NoSymbol K NoSymbol''}. If the list (ignoring trailing @code{NoSymbol} entries) is a pair of keysyms @samp{K1 K2}, then the list is treated as if it were the list @code{``K1 K2 K1 K2''}. If the list (ignoring trailing @code{NoSymbol} entries) is a triple of keysyms @samp{K1 K2 K3}, then the list is treated as if it were the list @code{``K1 K2 K3 NoSymbol''}. The first four elements of the list are split into two groups of keysyms. Group 1 contains the first and second keysyms; Group 2 contains third and fourth keysyms. Within each group, if the second element of the group is NoSymbol, then the group should be treated as if the second element were the same as the first element, except when the first element is an alphabetic keysym @samp{K} for which both lowercase and uppercase forms are defined. In that case, the group should be treated as if the first element were the lowercase form of @samp{K} and the second element were the uppercase form of @samp{K}. The standard rules for obtaining a keysym from a KeyPress event make use of only the Group 1 and Group 2 keysyms; no interpretation of other keysyms in the list is given here. (That is, the last four keysyms are unused.) Which group to use is determined by modifier state. Switching between groups is controlled by the keysym named @code{Mode_switch}. Attach that keysym to some keycode and attach that keycode to any one of the modifiers Mod1 through Mod5. This modifier is called the @dfn{group modifier}. For any keycode, Group 1 is used when the group modifier is off, and Group 2 is used when the group modifier is on. Within a group, which keysym to use is also determined by modifier state. The first keysym is used when the @code{Shift} and @code{Lock} modifiers are off. The second keysym is used when the @code{Shift} modifier is on, or when the @code{Lock} modifier is on and the second keysym is uppercase alphabetic, or when the @code{Lock} modifier is on and is interpreted as @code{ShiftLock}. Otherwise, when the @code{Lock} modifier is on and is interpreted as @code{CapsLock}, the state of the @code{Shift} modifier is applied first to select a keysym, but if that keysym is lower-case alphabetic, then the corresponding upper-case keysym is used instead. In addition to the above information on keysyms, we also provide the following description of modifier mapping from the InterClient Communications Conventions Manual: @cindex modifier mapping X11 supports 8 modifier bits, of which 3 are pre-assigned to @code{Shift}, @code{Lock}, and @code{Control}. Each modifier bit is controlled by the state of a set of keys, and these sets are specified in a table accessed by @code{GetModifierMapping()} and @code{SetModifierMapping()}. A client needing to use one of the pre-assigned modifiers should assume that the modifier table has been set up correctly to control these modifiers. The @code{Lock} modifier should be interpreted as @code{Caps Lock} or @code{Shift Lock} according to whether the keycodes in its controlling set include @code{XK_Caps_Lock} or @code{XK_Shift_Lock}. Clients should determine the meaning of a modifier bit from the keysyms being used to control it. A client needing to use an extra modifier, for example @code{Meta}, should: @enumerate @item Scan the existing modifier mappings. @enumerate @item If it finds a modifier that contains a keycode whose set of keysyms includes @code{XK_Meta_L} or @code{XK_Meta_R}, it should use that modifier bit. @item If there is no existing modifier controlled by @code{XK_Meta_L} or @code{XK_Meta_R}, it should select an unused modifier bit (one with an empty controlling set) and: @end enumerate @item If there is a keycode with @code{XL_Meta_L} in its set of keysyms, add that keycode to the set for the chosen modifier, and then: @enumerate @item If there is a keycode with @code{XL_Meta_R} in its set of keysyms, add that keycode to the set for the chosen modifier, and then: @item If the controlling set is still empty, interact with the user to select one or more keys to be @code{Meta}. @end enumerate @item If there are no unused modifier bits, ask the user to take corrective action. @end enumerate This means that the @code{Mod1} modifier does not necessarily mean @code{Meta}, although some applications (such as twm and emacs 18) assume that. Any of the five unassigned modifier bits could mean @code{Meta}; what matters is that a modifier bit is generated by a keycode which is bound to the keysym @code{Meta_L} or @code{Meta_R}. Therefore, if you want to make a @key{META} key, the right way is to make the keycode in question generate both a @code{Meta} keysym and some previously-unassigned modifier bit. @node Character Representation, Commands, Super and Hyper Keys, Keystrokes @comment node-name, next, previous, up @section Representation of Characters This section briefly discusses how characters are represented in Emacs buffers. @xref{Key Sequences}, for information on representing key sequences to create key bindings. ASCII graphic characters in Emacs buffers are displayed with their graphics. @key{LFD} is the same as a newline character; it is displayed by starting a new line. @key{TAB} is displayed by moving to the next tab stop column (usually every 8 spaces). Other control characters are displayed as a caret (@samp{^}) followed by the non-control version of the character; thus, @kbd{C-a} is displayed as @samp{^A}. Non-ASCII characters 128 and up are displayed with octal escape sequences; thus, character code 243 (octal), also called @kbd{M-#} when used as an input character, is displayed as @samp{\243}. The variable @code{ctl-arrow} may be used to alter this behavior. @xref{Display Vars}. @node Commands, , Character Representation, Keystrokes @section Keys and Commands @cindex binding @cindex customization @cindex keymap @cindex function @cindex command This manual is full of passages that tell you what particular keys do. But Emacs does not assign meanings to keys directly. Instead, Emacs assigns meanings to @dfn{functions}, and then gives keys their meanings by @dfn{binding} them to functions. A function is a Lisp object that can be executed as a program. Usually it is a Lisp symbol that has been given a function definition; every symbol has a name, usually made of a few English words separated by dashes, such as @code{next-line} or @code{forward-word}. It also has a @dfn{definition}, which is a Lisp program. Only some functions can be the bindings of keys; these are functions whose definitions use @code{interactive} to specify how to call them interactively. Such functions are called @dfn{commands}, and their names are @dfn{command names}. More information on this subject will appear in the @i{XEmacs Lisp Reference Manual}. The bindings between keys and functions are recorded in various tables called @dfn{keymaps}. @xref{Key Bindings}, for more information on key sequences you can bind commands to. @xref{Keymaps}, for information on creating keymaps. When we say ``@kbd{C-n} moves down vertically one line'' we are glossing over a distinction that is irrelevant in ordinary use but is vital in understanding how to customize Emacs. The function @code{next-line} is programmed to move down vertically. @kbd{C-n} has this effect @i{because} it is bound to that function. If you rebind @kbd{C-n} to the function @code{forward-word} then @kbd{C-n} will move forward by words instead. Rebinding keys is a common method of customization.@refill The rest of this manual usually ignores this subtlety to keep things simple. To give the customizer the information needed, we often state the name of the command that really does the work in parentheses after mentioning the key that runs it. For example, we will say that ``The command @kbd{C-n} (@code{next-line}) moves point vertically down,'' meaning that @code{next-line} is a command that moves vertically down and @kbd{C-n} is a key that is standardly bound to it. @cindex variables While we are on the subject of information for customization only, it's a good time to tell you about @dfn{variables}. Often the description of a command will say, ``To change this, set the variable @code{mumble-foo}.'' A variable is a name used to remember a value. Most of the variables documented in this manual exist just to facilitate customization: some command or other part of Emacs uses the variable and behaves differently depending on its setting. Until you are interested in customizing, you can ignore the information about variables. When you are ready to be interested, read the basic information on variables, and then the information on individual variables will make sense. @xref{Variables}. texi2html-1.82/test/xemacs_manual/glossary.texi0000644000175000017500000007335011264347115023576 0ustar flichtenheldflichtenheld @node Glossary, Manifesto, Intro, Top @unnumbered Glossary @table @asis @item Abbrev An abbrev is a text string which expands into a different text string when present in the buffer. For example, you might define a short word as an abbrev for a long phrase that you want to insert frequently. @xref{Abbrevs}. @item Aborting Aborting means getting out of a recursive edit (q.v.@:). You can use the commands @kbd{C-]} and @kbd{M-x top-level} for this. @xref{Quitting}. @item Auto Fill mode Auto Fill mode is a minor mode in which text you insert is automatically broken into lines of fixed width. @xref{Filling}. @item Auto Saving Auto saving means that Emacs automatically stores the contents of an Emacs buffer in a specially-named file so the information will not be lost if the buffer is lost due to a system error or user error. @xref{Auto Save}. @item Backup File A backup file records the contents that a file had before the current editing session. Emacs creates backup files automatically to help you track down or cancel changes you later regret. @xref{Backup}. @item Balance Parentheses Emacs can balance parentheses manually or automatically. Manual balancing is done by the commands to move over balanced expressions (@pxref{Lists}). Automatic balancing is done by blinking the parenthesis that matches one just inserted (@pxref{Matching,,Matching Parens}). @item Bind To bind a key is to change its binding (q.v.@:). @xref{Rebinding}. @item Binding A key gets its meaning in Emacs by having a binding which is a command (q.v.@:), a Lisp function that is run when the key is typed. @xref{Commands,Binding}. Customization often involves rebinding a character to a different command function. The bindings of all keys are recorded in the keymaps (q.v.@:). @xref{Keymaps}. @item Blank Lines Blank lines are lines that contain only whitespace. Emacs has several commands for operating on the blank lines in a buffer. @item Buffer The buffer is the basic editing unit; one buffer corresponds to one piece of text being edited. You can have several buffers, but at any time you are editing only one, the `selected' buffer, though several buffers can be visible when you are using multiple windows. @xref{Buffers}. @item Buffer Selection History Emacs keeps a buffer selection history which records how recently each Emacs buffer was selected. Emacs uses this list when choosing a buffer to select. @xref{Buffers}. @item C- @samp{C} in the name of a character is an abbreviation for Control. @xref{Keystrokes,C-}. @item C-M- @samp{C-M-} in the name of a character is an abbreviation for Control-Meta. @xref{Keystrokes,C-M-}. @item Case Conversion Case conversion means changing text from upper case to lower case or vice versa. @xref{Case}, for the commands for case conversion. @item Characters Characters form the contents of an Emacs buffer; also, Emacs commands are invoked by keys (q.v.@:), which are sequences of one or more characters. @xref{Keystrokes}. @item Command A command is a Lisp function specially defined to be able to serve as a key binding in Emacs. When you type a key (q.v.@:), Emacs looks up its binding (q.v.@:) in the relevant keymaps (q.v.@:) to find the command to run. @xref{Commands}. @item Command Name A command name is the name of a Lisp symbol which is a command (@pxref{Commands}). You can invoke any command by its name using @kbd{M-x} (@pxref{M-x}). @item Comments A comment is text in a program which is intended only for the people reading the program, and is marked specially so that it will be ignored when the program is loaded or compiled. Emacs offers special commands for creating, aligning, and killing comments. @xref{Comments}. @item Compilation Compilation is the process of creating an executable program from source code. Emacs has commands for compiling files of Emacs Lisp code (@pxref{Lisp Libraries}) and programs in C and other languages (@pxref{Compilation}). @item Complete Key A complete key is a character or sequence of characters which, when typed by the user, fully specifies one action to be performed by Emacs. For example, @kbd{X} and @kbd{Control-f} and @kbd{Control-x m} are keys. Keys derive their meanings from being bound (q.v.@:) to commands (q.v.@:). Thus, @kbd{X} is conventionally bound to a command to insert @samp{X} in the buffer; @kbd{C-x m} is conventionally bound to a command to begin composing a mail message. @xref{Keystrokes}. @item Completion When Emacs automatically fills an abbreviation for a name into the entire name, that process is called completion. Completion is done for minibuffer (q.v.@:) arguments when the set of possible valid inputs is known; for example, on command names, buffer names, and file names. Completion occurs when you type @key{TAB}, @key{SPC}, or @key{RET}. @xref{Completion}.@refill @item Continuation Line When a line of text is longer than the width of the frame, it takes up more than one screen line when displayed. We say that the text line is continued, and all screen lines used for it after the first are called continuation lines. @xref{Basic,Continuation,Basic Editing}. @item Control-Character ASCII characters with octal codes 0 through 037, and also code 0177, do not have graphic images assigned to them. These are the control characters. Any control character can be typed by holding down the @key{CTRL} key and typing some other character; some have special keys on the keyboard. @key{RET}, @key{TAB}, @key{ESC}, @key{LFD}, and @key{DEL} are all control characters. @xref{Keystrokes}.@refill @item Copyleft A copyleft is a notice giving the public legal permission to redistribute a program or other work of art. Copylefts are used by leftists to enrich the public just as copyrights are used by rightists to gain power over the public. @item Current Buffer The current buffer in Emacs is the Emacs buffer on which most editing commands operate. You can select any Emacs buffer as the current one. @xref{Buffers}. @item Current Line The line point is on (@pxref{Point}). @item Current Paragraph The paragraph that point is in. If point is between paragraphs, the current paragraph is the one that follows point. @xref{Paragraphs}. @item Current Defun The defun (q.v.@:) that point is in. If point is between defuns, the current defun is the one that follows point. @xref{Defuns}. @item Cursor The cursor is the rectangle on the screen which indicates the position called point (q.v.@:) at which insertion and deletion takes place. The cursor is on or under the character that follows point. Often people speak of `the cursor' when, strictly speaking, they mean `point'. @xref{Basic,Cursor,Basic Editing}. @item Customization Customization is making minor changes in the way Emacs works. It is often done by setting variables (@pxref{Variables}) or by rebinding keys (@pxref{Keymaps}). @item Default Argument The default for an argument is the value that is used if you do not specify one. When Emacs prompts you in the minibuffer for an argument, the default argument is used if you just type @key{RET}. @xref{Minibuffer}. @item Default Directory When you specify a file name that does not start with @samp{/} or @samp{~}, it is interpreted relative to the current buffer's default directory. @xref{Minibuffer File,Default Directory}. @item Defun A defun is a list at the top level of parenthesis or bracket structure in a program. It is so named because most such lists in Lisp programs are calls to the Lisp function @code{defun}. @xref{Defuns}. @item @key{DEL} The @key{DEL} character runs the command that deletes one character of text. @xref{Basic,DEL,Basic Editing}. @item Deletion Deleting text means erasing it without saving it. Emacs deletes text only when it is expected not to be worth saving (all whitespace, or only one character). The alternative is killing (q.v.@:). @xref{Killing,Deletion}. @item Deletion of Files Deleting a file means removing it from the file system. @xref{Misc File Ops}. @item Deletion of Messages Deleting a message means flagging it to be eliminated from your mail file. Until the mail file is expunged, you can undo this by undeleting the message. @item Deletion of Frames When working under the multi-frame X-based version of XEmacs, you can delete individual frames using the @b{Close} menu item from the @b{File} menu. @item Deletion of Windows When you delete a subwindow of an Emacs frame, you eliminate it from the frame. Other windows expand to use up the space. The deleted window can never come back, but no actual text is lost. @xref{Windows}. @item Directory Files in the Unix file system are grouped into file directories. @xref{ListDir,,Directories}. @item Dired Dired is the Emacs facility that displays the contents of a file directory and allows you to ``edit the directory'', performing operations on the files in the directory. @xref{Dired}. @item Disabled Command A disabled command is one that you may not run without special confirmation. Commands are usually disabled because they are confusing for beginning users. @xref{Disabling}. @item Dribble File A file into which Emacs writes all the characters that the user types on the keyboard. Dribble files are used to make a record for debugging Emacs bugs. Emacs does not make a dribble file unless you tell it to. @xref{Bugs}. @item Echo Area The area at the bottom of the Emacs frame which is used for echoing the arguments to commands, for asking questions, and for printing brief messages (including error messages). @xref{Echo Area}. @item Echoing Echoing refers to acknowledging the receipt of commands by displaying them (in the echo area). Emacs never echoes single-character keys; longer keys echo only if you pause while typing them. @item Error An error occurs when an Emacs command cannot execute in the current circumstances. When an error occurs, execution of the command stops (unless the command has been programmed to do otherwise) and Emacs reports the error by printing an error message (q.v.). Type-ahead is discarded. Then Emacs is ready to read another editing command. @item Error Messages Error messages are single lines of output printed by Emacs when the user asks for something impossible to do (such as killing text forward when point is at the end of the buffer). They appear in the echo area, accompanied by a beep. @item @key{ESC} @key{ESC} is a character used as a prefix for typing Meta characters on keyboards lacking a @key{META} key. Unlike the @key{META} key (which, like the @key{SHIFT} key, is held down while another character is typed), the @key{ESC} key is pressed and released, and applies to the next character typed. @item Fill Prefix The fill prefix is a string that Emacs enters at the beginning of each line when it performs filling. It is not regarded as part of the text to be filled. @xref{Filling}. @item Filling Filling text means moving text from line to line so that all the lines are approximately the same length. @xref{Filling}. @item Frame When running Emacs on a TTY terminal, ``frame'' means the terminal's screen. When running Emacs under X, you can have multiple frames, each corresponding to a top-level X window and each looking like the screen on a TTY. Each frame contains one or more non-overlapping Emacs windows (possibly with associated scrollbars, under X), an echo area, and (under X) possibly a menubar, toolbar, and/or gutter. @item Global Global means `independent of the current environment; in effect @*throughout Emacs'. It is the opposite of local (q.v.@:). Examples of the use of `global' appear below. @item Global Abbrev A global definition of an abbrev (q.v.@:) is effective in all major modes that do not have local (q.v.@:) definitions for the same abbrev. @xref{Abbrevs}. @item Global Keymap The global keymap (q.v.@:) contains key bindings that are in effect unless local key bindings in a major mode's local keymap (q.v.@:) override them.@xref{Keymaps}. @item Global Substitution Global substitution means replacing each occurrence of one string by another string through a large amount of text. @xref{Replace}. @item Global Variable The global value of a variable (q.v.@:) takes effect in all buffers that do not have their own local (q.v.@:) values for the variable. @xref{Variables}. @item Graphic Character Graphic characters are those assigned pictorial images rather than just names. All the non-Meta (q.v.@:) characters except for the Control (q.v.@:) character are graphic characters. These include letters, digits, punctuation, and spaces; they do not include @key{RET} or @key{ESC}. In Emacs, typing a graphic character inserts that character (in ordinary editing modes). @xref{Basic,,Basic Editing}. @item Grinding Grinding means adjusting the indentation in a program to fit the nesting structure. @xref{Indentation,Grinding}. @item Hardcopy Hardcopy means printed output. Emacs has commands for making printed listings of text in Emacs buffers. @xref{Hardcopy}. @item @key{HELP} You can type @key{HELP} at any time to ask what options you have, or to ask what any command does. @key{HELP} is really @kbd{Control-h}. @xref{Help}. @item Inbox An inbox is a file in which mail is delivered by the operating system. Some mail handlers transfers mail from inboxes to mail files (q.v.) in which the mail is then stored permanently or until explicitly deleted. @item Indentation Indentation means blank space at the beginning of a line. Most programming languages have conventions for using indentation to illuminate the structure of the program, and Emacs has special features to help you set up the correct indentation. @xref{Indentation}. @item Insertion Insertion means copying text into the buffer, either from the keyboard or from some other place in Emacs. @item Justification Justification means adding extra spaces to lines of text to make them come exactly to a specified width. @xref{Filling,Justification}. @item Keyboard Macros Keyboard macros are a way of defining new Emacs commands from sequences of existing ones, with no need to write a Lisp program. @xref{Keyboard Macros}. @item Key A key is a sequence of characters that, when input to Emacs, specify or begin to specify a single action for Emacs to perform. That is, the sequence is considered a single unit. If the key is enough to specify one action, it is a complete key (q.v.); if it is less than enough, it is a prefix key (q.v.). @xref{Keystrokes}. @item Keymap The keymap is the data structure that records the bindings (q.v.@:) of keys to the commands that they run. For example, the keymap binds the character @kbd{C-n} to the command function @code{next-line}. @xref{Keymaps}. @item Kill Ring The kill ring is the place where all text you have killed recently is saved. You can re-insert any of the killed text still in the ring; this is called yanking (q.v.@:). @xref{Yanking}. @item Killing Killing means erasing text and saving it on the kill ring so it can be yanked (q.v.@:) later. Some other systems call this ``cutting.'' Most Emacs commands to erase text do killing, as opposed to deletion (q.v.@:). @xref{Killing}. @item Killing Jobs Killing a job (such as, an invocation of Emacs) means making it cease to exist. Any data within it, if not saved in a file, is lost. @xref{Exiting}. @item List A list is, approximately, a text string beginning with an open parenthesis and ending with the matching close parenthesis. In C mode and other non-Lisp modes, groupings surrounded by other kinds of matched delimiters appropriate to the language, such as braces, are also considered lists. Emacs has special commands for many operations on lists. @xref{Lists}. @item Local Local means `in effect only in a particular context'; the relevant kind of context is a particular function execution, a particular buffer, or a particular major mode. Local is the opposite of `global' (q.v.@:). Specific uses of `local' in Emacs terminology appear below. @item Local Abbrev A local abbrev definition is effective only if a particular major mode is selected. In that major mode, it overrides any global definition for the same abbrev. @xref{Abbrevs}. @item Local Keymap A local keymap is used in a particular major mode; the key bindings (q.v.@:) in the current local keymap override global bindings of the same keys. @xref{Keymaps}. @item Local Variable A local value of a variable (q.v.@:) applies to only one buffer. @xref{Locals}. @item M- @kbd{M-} in the name of a character is an abbreviation for @key{META}, one of the modifier keys that can accompany any character. @xref{Keystrokes}. @item M-C- @samp{M-C-} in the name of a character is an abbreviation for Control-Meta; it means the same thing as @samp{C-M-}. If your terminal lacks a real @key{META} key, you type a Control-Meta character by typing @key{ESC} and then typing the corresponding Control character. @xref{Keystrokes,C-M-}. @item M-x @kbd{M-x} is the key which is used to call an Emacs command by name. You use it to call commands that are not bound to keys. @xref{M-x}. @item Mail Mail means messages sent from one user to another through the computer system, to be read at the recipient's convenience. Emacs has commands for composing and sending mail, and for reading and editing the mail you have received. @xref{Sending Mail}. @item Major Mode The major modes are a mutually exclusive set of options each of which configures Emacs for editing a certain sort of text. Ideally, each programming language has its own major mode. @xref{Major Modes}. @item Mark The mark points to a position in the text. It specifies one end of the region (q.v.@:), point being the other end. Many commands operate on the whole region, that is, all the text from point to the mark. @xref{Mark}. @item Mark Ring The mark ring is used to hold several recent previous locations of the mark, just in case you want to move back to them. @xref{Mark Ring}. @item Message See `mail'. @item Meta Meta is the name of a modifier bit which a command character may have. It is present in a character if the character is typed with the @key{META} key held down. Such characters are given names that start with @kbd{Meta-}. For example, @kbd{Meta-<} is typed by holding down @key{META} and at the same time typing @kbd{<} (which itself is done, on most terminals, by holding down @key{SHIFT} and typing @kbd{,}). @xref{Keystrokes,Meta}. @item Meta Character A Meta character is one whose character code includes the Meta bit. @item Minibuffer The minibuffer is the window that Emacs displays inside the echo area (q.v.@:) when it prompts you for arguments to commands. @xref{Minibuffer}. @item Minor Mode A minor mode is an optional feature of Emacs which can be switched on or off independent of the major mode. Each minor mode has a command to turn it on or off. @xref{Minor Modes}. @item Mode Line The mode line is the line at the bottom of each text window (q.v.@:), which gives status information on the buffer displayed in that window. @xref{Mode Line}. @item Modified Buffer A buffer (q.v.@:) is modified if its text has been changed since the last time the buffer was saved (or since it was created, if it has never been saved). @xref{Saving}. @item Moving Text Moving text means erasing it from one place and inserting it in another. This is done by killing (q.v.@:) and then yanking (q.v.@:). @xref{Killing}. @item Named Mark A named mark is a register (q.v.@:) in its role of recording a location in text so that you can move point to that location. @xref{Registers}. @item Narrowing Narrowing means creating a restriction (q.v.@:) that limits editing in the current buffer to only a part of the text in the buffer. Text outside that part is inaccessible to the user until the boundaries are widened again, but it is still there, and saving the file saves the invisible text. @xref{Narrowing}. @item Newline @key{LFD} characters in the buffer terminate lines of text and are called newlines. @xref{Keystrokes,Newline}. @item Numeric Argument A numeric argument is a number, specified before a command, to change the effect of the command. Often the numeric argument serves as a repeat count. @xref{Arguments}. @item Option An option is a variable (q.v.@:) that allows you to customize Emacs by giving it a new value. @xref{Variables}. @item Overwrite Mode Overwrite mode is a minor mode. When it is enabled, ordinary text characters replace the existing text after point rather than pushing it to the right. @xref{Minor Modes}. @item Page A page is a unit of text, delimited by formfeed characters (ASCII Control-L, code 014) coming at the beginning of a line. Some Emacs commands are provided for moving over and operating on pages. @xref{Pages}. @item Paragraphs Paragraphs are the medium-size unit of English text. There are special Emacs commands for moving over and operating on paragraphs. @xref{Paragraphs}. @item Parsing We say that Emacs parses words or expressions in the text being edited. Really, all it knows how to do is find the other end of a word or expression. @xref{Syntax}. @item Point Point is the place in the buffer at which insertion and deletion occur. Point is considered to be between two characters, not at one character. The terminal's cursor (q.v.@:) indicates the location of point. @xref{Basic,Point}. @item Prefix Key A prefix key is a key (q.v.@:) whose sole function is to introduce a set of multi-character keys. @kbd{Control-x} is an example of a prefix key; any two-character sequence starting with @kbd{C-x} is also a legitimate key. @xref{Keystrokes}. @item Prompt A prompt is text printed to ask the user for input. Printing a prompt is called prompting. Emacs prompts always appear in the echo area (q.v.@:). One kind of prompting happens when the minibuffer is used to read an argument (@pxref{Minibuffer}); the echoing which happens when you pause in the middle of typing a multi-character key is also a kind of prompting (@pxref{Echo Area}). @item Quitting Quitting means cancelling a partially typed command or a running command, using @kbd{C-g}. @xref{Quitting}. @item Quoting Quoting means depriving a character of its usual special significance. In Emacs this is usually done with @kbd{Control-q}. What constitutes special significance depends on the context and on convention. For example, an ``ordinary'' character as an Emacs command inserts itself; so in this context, a special character is any character that does not normally insert itself (such as @key{DEL}, for example), and quoting it makes it insert itself as if it were not special. Not all contexts allow quoting. @xref{Basic,Quoting,Basic Editing}. @item Read-only Buffer A read-only buffer is one whose text you are not allowed to change. Normally Emacs makes buffers read-only when they contain text which has a special significance to Emacs, such as Dired buffers. Visiting a file that is write-protected also makes a read-only buffer. @xref{Buffers}. @item Recursive Editing Level A recursive editing level is a state in which part of the execution of a command involves asking the user to edit some text. This text may or may not be the same as the text to which the command was applied. The mode line indicates recursive editing levels with square brackets (@samp{[} and @samp{]}). @xref{Recursive Edit}. @item Redisplay Redisplay is the process of correcting the image on the screen to correspond to changes that have been made in the text being edited. @xref{Frame,Redisplay}. @item Regexp See `regular expression'. @item Region The region is the text between point (q.v.@:) and the mark (q.v.@:). Many commands operate on the text of the region. @xref{Mark,Region}. @item Registers Registers are named slots in which text or buffer positions or rectangles can be saved for later use. @xref{Registers}. @item Regular Expression A regular expression is a pattern that can match various text strings; for example, @samp{l[0-9]+} matches @samp{l} followed by one or more digits. @xref{Regexps}. @item Replacement See `global substitution'. @item Restriction A buffer's restriction is the amount of text, at the beginning or the end of the buffer, that is temporarily invisible and inaccessible. Giving a buffer a nonzero amount of restriction is called narrowing (q.v.). @xref{Narrowing}. @item @key{RET} @key{RET} is the character than runs the command to insert a newline into the text. It is also used to terminate most arguments read in the minibuffer (q.v.@:). @xref{Keystrokes,Return}. @item Saving Saving a buffer means copying its text into the file that was visited (q.v.@:) in that buffer. To actually change a file you have edited in Emacs, you have to save it. @xref{Saving}. @item Scrolling Scrolling means shifting the text in the Emacs window to make a different part of the buffer visible. @xref{Display,Scrolling}. @item Searching Searching means moving point to the next occurrence of a specified string. @xref{Search}. @item Selecting Selecting a buffer means making it the current (q.v.@:) buffer. @xref{Buffers,Selecting}. @item Self-documentation Self-documentation is the feature of Emacs which can tell you what any command does, or can give you a list of all commands related to a topic you specify. You ask for self-documentation with the help character, @kbd{C-h}. @xref{Help}. @item Sentences Emacs has commands for moving by or killing by sentences. @xref{Sentences}. @item Sexp An sexp (short for `s-expression,' itself short for `symbolic expression') is the basic syntactic unit of Lisp in its textual form: either a list, or Lisp atom. Many Emacs commands operate on sexps. The term `sexp' is generalized to languages other than Lisp to mean a syntactically recognizable expression. @xref{Lists,Sexps}. @item Simultaneous Editing Simultaneous editing means two users modifying the same file at once. If simultaneous editing is not detected, you may lose your work. Emacs detects all cases of simultaneous editing and warns the user to investigate them. @xref{Interlocking,,Simultaneous Editing}. @item String A string is a kind of Lisp data object which contains a sequence of characters. Many Emacs variables are intended to have strings as values. The Lisp syntax for a string consists of the characters in the string with a @samp{"} before and another @samp{"} after. Write a @samp{"} that is part of the string as @samp{\"} and a @samp{\} that is part of the string as @samp{\\}. You can include all other characters, including newline, just by writing them inside the string. You can also include escape sequences as in C, such as @samp{\n} for newline or @samp{\241} using an octal character code. @item String Substitution See `global substitution'. @item Syntax Table The syntax table tells Emacs which characters are part of a word, which characters balance each other like parentheses, etc. @xref{Syntax}. @item Tag Table A tag table is a file that serves as an index to the function definitions in one or more other files. @xref{Tags}. @item Termscript File A termscript file contains a record of all characters Emacs sent to the terminal. It is used for tracking down bugs in Emacs redisplay. Emacs does not make a termscript file unless explicitly instructed to do so. @xref{Bugs}. @item Text Text has two meanings (@pxref{Text}): @itemize @bullet @item Data consisting of a sequence of characters, as opposed to binary numbers, images, graphics commands, executable programs, and the like. The contents of an Emacs buffer are always text in this sense. @item Data consisting of written human language, as opposed to programs, or something that follows the stylistic conventions of human language. @end itemize @item Top Level Top level is the normal state of Emacs, in which you are editing the text of the file you have visited. You are at top level whenever you are not in a recursive editing level (q.v.@:) or the minibuffer (q.v.@:), and not in the middle of a command. You can get back to top level by aborting (q.v.@:) and quitting (q.v.@:). @xref{Quitting}. @item Transposition Transposing two units of text means putting each one into the place formerly occupied by the other. There are Emacs commands to transpose two adjacent characters, words, sexps (q.v.@:), or lines (@pxref{Transpose}). @item Truncation Truncating text lines in the display means leaving out any text on a line that does not fit within the right margin of the window displaying it. See also `continuation line'. @xref{Basic,Truncation,Basic Editing}. @item Undoing Undoing means making your previous editing go in reverse, bringing back the text that existed earlier in the editing session. @xref{Undo}. @item Variable A variable is Lisp object that can store an arbitrary value. Emacs uses some variables for internal purposes, and has others (known as `options' (q.v.@:)) you can set to control the behavior of Emacs. The variables used in Emacs that you are likely to be interested in are listed in the Variables Index of this manual. @xref{Variables}, for information on variables. @item Visiting Visiting a file means loading its contents into a buffer (q.v.@:) where they can be edited. @xref{Visiting}. @item Whitespace Whitespace is any run of consecutive formatting characters (spaces, tabs, newlines, and backspaces). @item Widening Widening is removing any restriction (q.v.@:) on the current buffer; it is the opposite of narrowing (q.v.@:). @xref{Narrowing}. @item Window Emacs divides the frame into one or more windows, each of which can display the contents of one buffer (q.v.@:) at any time. @xref{Frame}, for basic information on how Emacs uses the frame. @xref{Windows}, for commands to control the use of windows. Note that if you are running Emacs under X, terminology can be confusing: Each Emacs frame occupies a separate X window and can, in turn, be divided into different subwindows. @item Word Abbrev Synonymous with `abbrev'. @item Word Search Word search is searching for a sequence of words, considering the punctuation between them as insignificant. @xref{Word Search}. @item Yanking Yanking means reinserting text previously killed. It can be used to undo a mistaken kill, or for copying or moving text. Some other systems call this ``pasting''. @xref{Yanking}. @end table texi2html-1.82/test/xemacs_manual/search.texi0000644000175000017500000012444011264347115023175 0ustar flichtenheldflichtenheld @node Search, Fixit, Display, Top @chapter Searching and Replacement @cindex searching Like other editors, Emacs has commands for searching for occurrences of a string. The principal search command is unusual in that it is @dfn{incremental}: it begins to search before you have finished typing the search string. There are also non-incremental search commands more like those of other editors. Besides the usual @code{replace-string} command that finds all occurrences of one string and replaces them with another, Emacs has a fancy replacement command called @code{query-replace} which asks interactively which occurrences to replace. @menu * Incremental Search:: Search happens as you type the string. * Non-Incremental Search:: Specify entire string and then search. * Word Search:: Search for sequence of words. * Regexp Search:: Search for match for a regexp. * Regexps:: Syntax of regular expressions. * Search Case:: To ignore case while searching, or not. * Replace:: Search, and replace some or all matches. * Other Repeating Search:: Operating on all matches for some regexp. @end menu @node Incremental Search, Non-Incremental Search, Search, Search @section Incremental Search An incremental search begins searching as soon as you type the first character of the search string. As you type in the search string, Emacs shows you where the string (as you have typed it so far) is found. When you have typed enough characters to identify the place you want, you can stop. Depending on what you do next, you may or may not need to terminate the search explicitly with a @key{RET}. @c WideCommands @table @kbd @item C-s Incremental search forward (@code{isearch-forward}). @item C-r Incremental search backward (@code{isearch-backward}). @end table @kindex C-s @kindex C-r @findex isearch-forward @findex isearch-backward @kbd{C-s} starts an incremental search. @kbd{C-s} reads characters from the keyboard and positions the cursor at the first occurrence of the characters that you have typed. If you type @kbd{C-s} and then @kbd{F}, the cursor moves right after the first @samp{F}. Type an @kbd{O}, and see the cursor move to after the first @samp{FO}. After another @kbd{O}, the cursor is after the first @samp{FOO} after the place where you started the search. Meanwhile, the search string @samp{FOO} has been echoed in the echo area.@refill The echo area display ends with three dots when actual searching is going on. When search is waiting for more input, the three dots are removed. (On slow terminals, the three dots are not displayed.) If you make a mistake in typing the search string, you can erase characters with @key{DEL}. Each @key{DEL} cancels the last character of the search string. This does not happen until Emacs is ready to read another input character; first it must either find, or fail to find, the character you want to erase. If you do not want to wait for this to happen, use @kbd{C-g} as described below.@refill When you are satisfied with the place you have reached, you can type @key{RET} (or @key{C-m}), which stops searching, leaving the cursor where the search brought it. Any command not specially meaningful in searches also stops the search and is then executed. Thus, typing @kbd{C-a} exits the search and then moves to the beginning of the line. @key{RET} is necessary only if the next command you want to type is a printing character, @key{DEL}, @key{ESC}, or another control character that is special within searches (@kbd{C-q}, @kbd{C-w}, @kbd{C-r}, @kbd{C-s}, or @kbd{C-y}). Sometimes you search for @samp{FOO} and find it, but were actually looking for a different occurrence of it. To move to the next occurrence of the search string, type another @kbd{C-s}. Do this as often as necessary. If you overshoot, you can cancel some @kbd{C-s} characters with @key{DEL}. After you exit a search, you can search for the same string again by typing just @kbd{C-s C-s}: the first @kbd{C-s} is the key that invokes incremental search, and the second @kbd{C-s} means ``search again''. If the specified string is not found at all, the echo area displays the text @samp{Failing I-Search}. The cursor is after the place where Emacs found as much of your string as it could. Thus, if you search for @samp{FOOT}, and there is no @samp{FOOT}, the cursor may be after the @samp{FOO} in @samp{FOOL}. At this point there are several things you can do. If you mistyped the search string, correct it. If you like the place you have found, you can type @key{RET} or some other Emacs command to ``accept what the search offered''. Or you can type @kbd{C-g}, which removes from the search string the characters that could not be found (the @samp{T} in @samp{FOOT}), leaving those that were found (the @samp{FOO} in @samp{FOOT}). A second @kbd{C-g} at that point cancels the search entirely, returning point to where it was when the search started. If a search is failing and you ask to repeat it by typing another @kbd{C-s}, it starts again from the beginning of the buffer. Repeating a failing backward search with @kbd{C-r} starts again from the end. This is called @dfn{wrapping around}. @samp{Wrapped} appears in the search prompt once this has happened. @cindex quitting (in search) The @kbd{C-g} ``quit'' character does special things during searches; just what it does depends on the status of the search. If the search has found what you specified and is waiting for input, @kbd{C-g} cancels the entire search. The cursor moves back to where you started the search. If @kbd{C-g} is typed when there are characters in the search string that have not been found---because Emacs is still searching for them, or because it has failed to find them---then the search string characters which have not been found are discarded from the search string. The search is now successful and waiting for more input, so a second @kbd{C-g} cancels the entire search. To search for a control character such as @kbd{C-s} or @key{DEL} or @key{ESC}, you must quote it by typing @kbd{C-q} first. This function of @kbd{C-q} is analogous to its meaning as an Emacs command: it causes the following character to be treated the way a graphic character would normally be treated in the same context. To search backwards, you can use @kbd{C-r} instead of @kbd{C-s} to start the search; @kbd{C-r} is the key that runs the command (@code{isearch-backward}) to search backward. You can also use @kbd{C-r} to change from searching forward to searching backwards. Do this if a search fails because the place you started was too far down in the file. Repeated @kbd{C-r} keeps looking for more occurrences backwards. @kbd{C-s} starts going forward again. You can cancel @kbd{C-r} in a search with @key{DEL}. The characters @kbd{C-y} and @kbd{C-w} can be used in incremental search to grab text from the buffer into the search string. This makes it convenient to search for another occurrence of text at point. @kbd{C-w} copies the word after point as part of the search string, advancing point over that word. Another @kbd{C-s} to repeat the search will then search for a string including that word. @kbd{C-y} is similar to @kbd{C-w} but copies the rest of the current line into the search string. The characters @kbd{M-p} and @kbd{M-n} can be used in an incremental search to recall things which you have searched for in the past. A list of the last 16 things you have searched for is retained, and @kbd{M-p} and @kbd{M-n} let you cycle through that ring. The character @kbd{M-@key{TAB}} does completion on the elements in the search history ring. For example, if you know that you have recently searched for the string @code{POTATOE}, you could type @kbd{C-s P O M-@key{TAB}}. If you had searched for other strings beginning with @code{PO} then you would be shown a list of them, and would need to type more to select one. You can change any of the special characters in incremental search via the normal keybinding mechanism: simply add a binding to the @code{isearch-mode-map}. For example, to make the character @kbd{C-b} mean ``search backwards'' while in isearch-mode, do this: @example (define-key isearch-mode-map "\C-b" 'isearch-repeat-backward) @end example These are the default bindings of isearch-mode: @findex isearch-delete-char @findex isearch-exit @findex isearch-quote-char @findex isearch-repeat-forward @findex isearch-repeat-backward @findex isearch-yank-line @findex isearch-yank-word @findex isearch-abort @findex isearch-ring-retreat @findex isearch-ring-advance @findex isearch-complete @kindex DEL (isearch-mode) @kindex RET (isearch-mode) @kindex C-q (isearch-mode) @kindex C-s (isearch-mode) @kindex C-r (isearch-mode) @kindex C-y (isearch-mode) @kindex C-w (isearch-mode) @kindex C-g (isearch-mode) @kindex M-p (isearch-mode) @kindex M-n (isearch-mode) @kindex M-TAB (isearch-mode) @table @kbd @item DEL Delete a character from the incremental search string (@code{isearch-delete-char}). @item RET Exit incremental search (@code{isearch-exit}). @item C-q Quote special characters for incremental search (@code{isearch-quote-char}). @item C-s Repeat incremental search forward (@code{isearch-repeat-forward}). @item C-r Repeat incremental search backward (@code{isearch-repeat-backward}). @item C-y Pull rest of line from buffer into search string (@code{isearch-yank-line}). @item C-w Pull next word from buffer into search string (@code{isearch-yank-word}). @item C-g Cancels input back to what has been found successfully, or aborts the isearch (@code{isearch-abort}). @item M-p Recall the previous element in the isearch history ring (@code{isearch-ring-retreat}). @item M-n Recall the next element in the isearch history ring (@code{isearch-ring-advance}). @item M-@key{TAB} Do completion on the elements in the isearch history ring (@code{isearch-complete}). @end table Any other character which is normally inserted into a buffer when typed is automatically added to the search string in isearch-mode. @subsection Slow Terminal Incremental Search Incremental search on a slow terminal uses a modified style of display that is designed to take less time. Instead of redisplaying the buffer at each place the search gets to, it creates a new single-line window and uses that to display the line the search has found. The single-line window appears as soon as point gets outside of the text that is already on the screen. When the search is terminated, the single-line window is removed. Only at this time the window in which the search was done is redisplayed to show its new value of point. The three dots at the end of the search string, normally used to indicate that searching is going on, are not displayed in slow style display. @vindex search-slow-speed The slow terminal style of display is used when the terminal baud rate is less than or equal to the value of the variable @code{search-slow-speed}, initially 1200. @vindex search-slow-window-lines The number of lines to use in slow terminal search display is controlled by the variable @code{search-slow-window-lines}. Its normal value is 1. @node Non-Incremental Search, Word Search, Incremental Search, Search @section Non-Incremental Search @cindex non-incremental search Emacs also has conventional non-incremental search commands, which require you type the entire search string before searching begins. @table @kbd @item C-s @key{RET} @var{string} @key{RET} Search for @var{string}. @item C-r @key{RET} @var{string} @key{RET} Search backward for @var{string}. @end table To do a non-incremental search, first type @kbd{C-s @key{RET}} (or @kbd{C-s C-m}). This enters the minibuffer to read the search string. Terminate the string with @key{RET} to start the search. If the string is not found, the search command gets an error. By default, @kbd{C-s} invokes incremental search, but if you give it an empty argument, which would otherwise be useless, it invokes non-incremental search. Therefore, @kbd{C-s @key{RET}} invokes non-incremental search. @kbd{C-r @key{RET}} also works this way. @findex search-forward @findex search-backward Forward and backward non-incremental searches are implemented by the commands @code{search-forward} and @code{search-backward}. You can bind these commands to keys. The reason that incremental search is programmed to invoke them as well is that @kbd{C-s @key{RET}} is the traditional sequence of characters used in Emacs to invoke non-incremental search. Non-incremental searches performed using @kbd{C-s @key{RET}} do not call @code{search-forward} right away. They first check if the next character is @kbd{C-w}, which requests a word search. @ifinfo @xref{Word Search}. @end ifinfo @node Word Search, Regexp Search, Non-Incremental Search, Search @section Word Search @cindex word search Word search looks for a sequence of words without regard to how the words are separated. More precisely, you type a string of many words, using single spaces to separate them, and the string is found even if there are multiple spaces, newlines or other punctuation between the words. Word search is useful in editing documents formatted by text formatters. If you edit while looking at the printed, formatted version, you can't tell where the line breaks are in the source file. Word search, allows you to search without having to know the line breaks. @table @kbd @item C-s @key{RET} C-w @var{words} @key{RET} Search for @var{words}, ignoring differences in punctuation. @item C-r @key{RET} C-w @var{words} @key{RET} Search backward for @var{words}, ignoring differences in punctuation. @end table Word search is a special case of non-incremental search. It is invoked with @kbd{C-s @key{RET} C-w} followed by the search string, which must always be terminated with another @key{RET}. Being non-incremental, this search does not start until the argument is terminated. It works by constructing a regular expression and searching for that. @xref{Regexp Search}. You can do a backward word search with @kbd{C-r @key{RET} C-w}. @findex word-search-forward @findex word-search-backward Forward and backward word searches are implemented by the commands @code{word-search-forward} and @code{word-search-backward}. You can bind these commands to keys. The reason that incremental search is programmed to invoke them as well is that @kbd{C-s @key{RET} C-w} is the traditional Emacs sequence of keys for word search. @node Regexp Search, Regexps, Word Search, Search @section Regular Expression Search @cindex regular expression @cindex regexp A @dfn{regular expression} (@dfn{regexp}, for short) is a pattern that denotes a (possibly infinite) set of strings. Searching for matches for a regexp is a powerful operation that editors on Unix systems have traditionally offered. To gain a thorough understanding of regular expressions and how to use them to best advantage, we recommend that you study @cite{Mastering Regular Expressions, by Jeffrey E.F. Friedl, O'Reilly and Associates, 1997}. (It's known as the "Hip Owls" book, because of the picture on its cover.) You might also read the manuals to @ref{(gawk)Top}, @ref{(ed)Top}, @cite{sed}, @cite{grep}, @ref{(perl)Top}, @ref{(regex)Top}, @ref{(rx)Top}, @cite{pcre}, and @ref{(flex)Top}, which also make good use of regular expressions. The XEmacs regular expression syntax most closely resembles that of @cite{ed}, or @cite{grep}, the GNU versions of which all utilize the GNU @cite{regex} library. XEmacs' version of @cite{regex} has recently been extended with some Perl--like capabilities, described in the next section. In XEmacs, you can search for the next match for a regexp either incrementally or not. @kindex M-C-s @kindex M-C-r @findex isearch-forward-regexp @findex isearch-backward-regexp Incremental search for a regexp is done by typing @kbd{M-C-s} (@code{isearch-forward-regexp}). This command reads a search string incrementally just like @kbd{C-s}, but it treats the search string as a regexp rather than looking for an exact match against the text in the buffer. Each time you add text to the search string, you make the regexp longer, and the new regexp is searched for. A reverse regexp search command @code{isearch-backward-regexp} also exists, bound to @kbd{M-C-r}. All of the control characters that do special things within an ordinary incremental search have the same functionality in incremental regexp search. Typing @kbd{C-s} or @kbd{C-r} immediately after starting a search retrieves the last incremental search regexp used: incremental regexp and non-regexp searches have independent defaults. @findex re-search-forward @findex re-search-backward Non-incremental search for a regexp is done by the functions @code{re-search-forward} and @code{re-search-backward}. You can invoke them with @kbd{M-x} or bind them to keys. You can also call @code{re-search-forward} by way of incremental regexp search with @kbd{M-C-s @key{RET}}; similarly for @code{re-search-backward} with @kbd{M-C-r @key{RET}}. @node Regexps, Search Case, Regexp Search, Search @section Syntax of Regular Expressions Regular expressions have a syntax in which a few characters are special constructs and the rest are @dfn{ordinary}. An ordinary character is a simple regular expression that matches that character and nothing else. The special characters are @samp{.}, @samp{*}, @samp{+}, @samp{?}, @samp{[}, @samp{]}, @samp{^}, @samp{$}, and @samp{\}; no new special characters will be defined in the future. Any other character appearing in a regular expression is ordinary, unless a @samp{\} precedes it. For example, @samp{f} is not a special character, so it is ordinary, and therefore @samp{f} is a regular expression that matches the string @samp{f} and no other string. (It does @emph{not} match the string @samp{ff}.) Likewise, @samp{o} is a regular expression that matches only @samp{o}.@refill Any two regular expressions @var{a} and @var{b} can be concatenated. The result is a regular expression that matches a string if @var{a} matches some amount of the beginning of that string and @var{b} matches the rest of the string.@refill As a simple example, we can concatenate the regular expressions @samp{f} and @samp{o} to get the regular expression @samp{fo}, which matches only the string @samp{fo}. Still trivial. To do something more powerful, you need to use one of the special characters. Here is a list of them: @need 1200 @table @kbd @item .@: @r{(Period)} @cindex @samp{.} in regexp is a special character that matches any single character except a newline. Using concatenation, we can make regular expressions like @samp{a.b}, which matches any three-character string that begins with @samp{a} and ends with @samp{b}.@refill @item * @cindex @samp{*} in regexp is not a construct by itself; it is a quantifying suffix operator that means to repeat the preceding regular expression as many times as possible. In @samp{fo*}, the @samp{*} applies to the @samp{o}, so @samp{fo*} matches one @samp{f} followed by any number of @samp{o}s. The case of zero @samp{o}s is allowed: @samp{fo*} does match @samp{f}.@refill @samp{*} always applies to the @emph{smallest} possible preceding expression. Thus, @samp{fo*} has a repeating @samp{o}, not a repeating @samp{fo}.@refill The matcher processes a @samp{*} construct by matching, immediately, as many repetitions as can be found; it is "greedy". Then it continues with the rest of the pattern. If that fails, backtracking occurs, discarding some of the matches of the @samp{*}-modified construct in case that makes it possible to match the rest of the pattern. For example, in matching @samp{ca*ar} against the string @samp{caaar}, the @samp{a*} first tries to match all three @samp{a}s; but the rest of the pattern is @samp{ar} and there is only @samp{r} left to match, so this try fails. The next alternative is for @samp{a*} to match only two @samp{a}s. With this choice, the rest of the regexp matches successfully.@refill Nested repetition operators can be extremely slow if they specify backtracking loops. For example, it could take hours for the regular expression @samp{\(x+y*\)*a} to match the sequence @samp{xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxz}. The slowness is because Emacs must try each imaginable way of grouping the 35 @samp{x}'s before concluding that none of them can work. To make sure your regular expressions run fast, check nested repetitions carefully. @item + @cindex @samp{+} in regexp is a quantifying suffix operator similar to @samp{*} except that the preceding expression must match at least once. It is also "greedy". So, for example, @samp{ca+r} matches the strings @samp{car} and @samp{caaaar} but not the string @samp{cr}, whereas @samp{ca*r} matches all three strings. @item ? @cindex @samp{?} in regexp is a quantifying suffix operator similar to @samp{*}, except that the preceding expression can match either once or not at all. For example, @samp{ca?r} matches @samp{car} or @samp{cr}, but does not match anything else. @item *? @cindex @samp{*?} in regexp works just like @samp{*}, except that rather than matching the longest match, it matches the shortest match. @samp{*?} is known as a @dfn{non-greedy} quantifier, a regexp construct borrowed from Perl. @c Did perl get this from somewhere? What's the real history of *? ? This construct is very useful for when you want to match the text inside a pair of delimiters. For instance, @samp{/\*.*?\*/} will match C comments in a string. This could not easily be achieved without the use of a non-greedy quantifier. This construct has not been available prior to XEmacs 20.4. It is not available in FSF Emacs. @item +? @cindex @samp{+?} in regexp is the non-greedy version of @samp{+}. @item ?? @cindex @samp{??} in regexp is the non-greedy version of @samp{?}. @item \@{n,m\@} @c Note the spacing after the close brace is deliberate. @cindex @samp{\@{n,m\@} }in regexp serves as an interval quantifier, analogous to @samp{*} or @samp{+}, but specifies that the expression must match at least @var{n} times, but no more than @var{m} times. This syntax is supported by most Unix regexp utilities, and has been introduced to XEmacs for the version 20.3. Unfortunately, the non-greedy version of this quantifier does not exist currently, although it does in Perl. @item [ @dots{} ] @cindex character set (in regexp) @cindex @samp{[} in regexp @cindex @samp{]} in regexp @samp{[} begins a @dfn{character set}, which is terminated by a @samp{]}. In the simplest case, the characters between the two brackets form the set. Thus, @samp{[ad]} matches either one @samp{a} or one @samp{d}, and @samp{[ad]*} matches any string composed of just @samp{a}s and @samp{d}s (including the empty string), from which it follows that @samp{c[ad]*r} matches @samp{cr}, @samp{car}, @samp{cdr}, @samp{caddaar}, etc.@refill The usual regular expression special characters are not special inside a character set. A completely different set of special characters exists inside character sets: @samp{]}, @samp{-} and @samp{^}.@refill @samp{-} is used for ranges of characters. To write a range, write two characters with a @samp{-} between them. Thus, @samp{[a-z]} matches any lower case letter. Ranges may be intermixed freely with individual characters, as in @samp{[a-z$%.]}, which matches any lower case letter or @samp{$}, @samp{%}, or a period.@refill To include a @samp{]} in a character set, make it the first character. For example, @samp{[]a]} matches @samp{]} or @samp{a}. To include a @samp{-}, write @samp{-} as the first character in the set, or put it immediately after a range. (You can replace one individual character @var{c} with the range @samp{@var{c}-@var{c}} to make a place to put the @samp{-}.) There is no way to write a set containing just @samp{-} and @samp{]}. To include @samp{^} in a set, put it anywhere but at the beginning of the set. @item [^ @dots{} ] @cindex @samp{^} in regexp @samp{[^} begins a @dfn{complement character set}, which matches any character except the ones specified. Thus, @samp{[^a-z0-9A-Z]} matches all characters @emph{except} letters and digits.@refill @samp{^} is not special in a character set unless it is the first character. The character following the @samp{^} is treated as if it were first (thus, @samp{-} and @samp{]} are not special there). Note that a complement character set can match a newline, unless newline is mentioned as one of the characters not to match. @item ^ @cindex @samp{^} in regexp @cindex beginning of line in regexp is a special character that matches the empty string, but only at the beginning of a line in the text being matched. Otherwise it fails to match anything. Thus, @samp{^foo} matches a @samp{foo} that occurs at the beginning of a line. When matching a string instead of a buffer, @samp{^} matches at the beginning of the string or after a newline character @samp{\n}. @item $ @cindex @samp{$} in regexp is similar to @samp{^} but matches only at the end of a line. Thus, @samp{x+$} matches a string of one @samp{x} or more at the end of a line. When matching a string instead of a buffer, @samp{$} matches at the end of the string or before a newline character @samp{\n}. @item \ @cindex @samp{\} in regexp has two functions: it quotes the special characters (including @samp{\}), and it introduces additional special constructs. Because @samp{\} quotes special characters, @samp{\$} is a regular expression that matches only @samp{$}, and @samp{\[} is a regular expression that matches only @samp{[}, and so on. @c Removed a paragraph here in lispref about doubling backslashes inside @c of Lisp strings. @end table @strong{Please note:} For historical compatibility, special characters are treated as ordinary ones if they are in contexts where their special meanings make no sense. For example, @samp{*foo} treats @samp{*} as ordinary since there is no preceding expression on which the @samp{*} can act. It is poor practice to depend on this behavior; quote the special character anyway, regardless of where it appears.@refill For the most part, @samp{\} followed by any character matches only that character. However, there are several exceptions: characters that, when preceded by @samp{\}, are special constructs. Such characters are always ordinary when encountered on their own. Here is a table of @samp{\} constructs: @table @kbd @item \| @cindex @samp{|} in regexp @cindex regexp alternative specifies an alternative. Two regular expressions @var{a} and @var{b} with @samp{\|} in between form an expression that matches anything that either @var{a} or @var{b} matches.@refill Thus, @samp{foo\|bar} matches either @samp{foo} or @samp{bar} but no other string.@refill @samp{\|} applies to the largest possible surrounding expressions. Only a surrounding @samp{\( @dots{} \)} grouping can limit the grouping power of @samp{\|}.@refill Full backtracking capability exists to handle multiple uses of @samp{\|}. @item \( @dots{} \) @cindex @samp{(} in regexp @cindex @samp{)} in regexp @cindex regexp grouping is a grouping construct that serves three purposes: @enumerate @item To enclose a set of @samp{\|} alternatives for other operations. Thus, @samp{\(foo\|bar\)x} matches either @samp{foox} or @samp{barx}. @item To enclose an expression for a suffix operator such as @samp{*} to act on. Thus, @samp{ba\(na\)*} matches @samp{bananana}, etc., with any (zero or more) number of @samp{na} strings.@refill @item To record a matched substring for future reference. @end enumerate This last application is not a consequence of the idea of a parenthetical grouping; it is a separate feature that happens to be assigned as a second meaning to the same @samp{\( @dots{} \)} construct because there is no conflict in practice between the two meanings. Here is an explanation of this feature: @item \@var{digit} matches the same text that matched the @var{digit}th occurrence of a @samp{\( @dots{} \)} construct. In other words, after the end of a @samp{\( @dots{} \)} construct. the matcher remembers the beginning and end of the text matched by that construct. Then, later on in the regular expression, you can use @samp{\} followed by @var{digit} to match that same text, whatever it may have been. The strings matching the first nine @samp{\( @dots{} \)} constructs appearing in a regular expression are assigned numbers 1 through 9 in the order that the open parentheses appear in the regular expression. So you can use @samp{\1} through @samp{\9} to refer to the text matched by the corresponding @samp{\( @dots{} \)} constructs. For example, @samp{\(.*\)\1} matches any newline-free string that is composed of two identical halves. The @samp{\(.*\)} matches the first half, which may be anything, but the @samp{\1} that follows must match the same exact text. @item \(?: @dots{} \) @cindex @samp{\(?:} in regexp @cindex regexp grouping is called a @dfn{shy} grouping operator, and it is used just like @samp{\( @dots{} \)}, except that it does not cause the matched substring to be recorded for future reference. This is useful when you need a lot of grouping @samp{\( @dots{} \)} constructs, but only want to remember one or two -- or if you have more than nine groupings and need to use backreferences to refer to the groupings at the end. Using @samp{\(?: @dots{} \)} rather than @samp{\( @dots{} \)} when you don't need the captured substrings ought to speed up your programs some, since it shortens the code path followed by the regular expression engine, as well as the amount of memory allocation and string copying it must do. The actual performance gain to be observed has not been measured or quantified as of this writing. @c This is used to good advantage by the font-locking code, and by @c `regexp-opt.el'. The shy grouping operator has been borrowed from Perl, and has not been available prior to XEmacs 20.3, nor is it available in FSF Emacs. @item \w @cindex @samp{\w} in regexp matches any word-constituent character. The editor syntax table determines which characters these are. @xref{Syntax}. @item \W @cindex @samp{\W} in regexp matches any character that is not a word constituent. @item \s@var{code} @cindex @samp{\s} in regexp matches any character whose syntax is @var{code}. Here @var{code} is a character that represents a syntax code: thus, @samp{w} for word constituent, @samp{-} for whitespace, @samp{(} for open parenthesis, etc. @xref{Syntax}, for a list of syntax codes and the characters that stand for them. @item \S@var{code} @cindex @samp{\S} in regexp matches any character whose syntax is not @var{code}. @end table The following regular expression constructs match the empty string---that is, they don't use up any characters---but whether they match depends on the context. @table @kbd @item \` @cindex @samp{\`} in regexp matches the empty string, but only at the beginning of the buffer or string being matched against. @item \' @cindex @samp{\'} in regexp matches the empty string, but only at the end of the buffer or string being matched against. @item \= @cindex @samp{\=} in regexp matches the empty string, but only at point. (This construct is not defined when matching against a string.) @item \b @cindex @samp{\b} in regexp matches the empty string, but only at the beginning or end of a word. Thus, @samp{\bfoo\b} matches any occurrence of @samp{foo} as a separate word. @samp{\bballs?\b} matches @samp{ball} or @samp{balls} as a separate word.@refill @item \B @cindex @samp{\B} in regexp matches the empty string, but @emph{not} at the beginning or end of a word. @item \< @cindex @samp{\<} in regexp matches the empty string, but only at the beginning of a word. @item \> @cindex @samp{\>} in regexp matches the empty string, but only at the end of a word. @end table Here is a complicated regexp used by Emacs to recognize the end of a sentence together with any whitespace that follows. It is given in Lisp syntax to enable you to distinguish the spaces from the tab characters. In Lisp syntax, the string constant begins and ends with a double-quote. @samp{\"} stands for a double-quote as part of the regexp, @samp{\\} for a backslash as part of the regexp, @samp{\t} for a tab and @samp{\n} for a newline. @example "[.?!][]\"')]*\\($\\|\t\\| \\)[ \t\n]*" @end example @noindent This regexp contains four parts: a character set matching period, @samp{?} or @samp{!}; a character set matching close-brackets, quotes or parentheses, repeated any number of times; an alternative in backslash-parentheses that matches end-of-line, a tab or two spaces; and a character set matching whitespace characters, repeated any number of times. @node Search Case, Replace, Regexps, Search @section Searching and Case @vindex case-fold-search All searches in Emacs normally ignore the case of the text they are searching through; if you specify searching for @samp{FOO}, @samp{Foo} and @samp{foo} are also considered a match. Regexps, and in particular character sets, are included: @samp{[aB]} matches @samp{a} or @samp{A} or @samp{b} or @samp{B}.@refill If you want a case-sensitive search, set the variable @code{case-fold-search} to @code{nil}. Then all letters must match exactly, including case. @code{case-fold-search} is a per-buffer variable; altering it affects only the current buffer, but there is a default value which you can change as well. @xref{Locals}. You can also use @b{Case Sensitive Search} from the @b{Options} menu on your screen. @node Replace, Other Repeating Search, Search Case, Search @section Replacement Commands @cindex replacement @cindex string substitution @cindex global substitution Global search-and-replace operations are not needed as often in Emacs as they are in other editors, but they are available. In addition to the simple @code{replace-string} command which is like that found in most editors, there is a @code{query-replace} command which asks you, for each occurrence of a pattern, whether to replace it. The replace commands all replace one string (or regexp) with one replacement string. It is possible to perform several replacements in parallel using the command @code{expand-region-abbrevs}. @xref{Expanding Abbrevs}. @menu * Unconditional Replace:: Replacing all matches for a string. * Regexp Replace:: Replacing all matches for a regexp. * Replacement and Case:: How replacements preserve case of letters. * Query Replace:: How to use querying. @end menu @node Unconditional Replace, Regexp Replace, Replace, Replace @subsection Unconditional Replacement @findex replace-string @findex replace-regexp @table @kbd @item M-x replace-string @key{RET} @var{string} @key{RET} @var{newstring} @key{RET} Replace every occurrence of @var{string} with @var{newstring}. @item M-x replace-regexp @key{RET} @var{regexp} @key{RET} @var{newstring} @key{RET} Replace every match for @var{regexp} with @var{newstring}. @end table To replace every instance of @samp{foo} after point with @samp{bar}, use the command @kbd{M-x replace-string} with the two arguments @samp{foo} and @samp{bar}. Replacement occurs only after point: if you want to cover the whole buffer you must go to the beginning first. By default, all occurrences up to the end of the buffer are replaced. To limit replacement to part of the buffer, narrow to that part of the buffer before doing the replacement (@pxref{Narrowing}). When @code{replace-string} exits, point is left at the last occurrence replaced. The value of point when the @code{replace-string} command was issued is remembered on the mark ring; @kbd{C-u C-@key{SPC}} moves back there. A numeric argument restricts replacement to matches that are surrounded by word boundaries. @node Regexp Replace, Replacement and Case, Unconditional Replace, Replace @subsection Regexp Replacement @code{replace-string} replaces exact matches for a single string. The similar command @code{replace-regexp} replaces any match for a specified pattern. In @code{replace-regexp}, the @var{newstring} need not be constant. It can refer to all or part of what is matched by the @var{regexp}. @samp{\&} in @var{newstring} stands for the entire text being replaced. @samp{\@var{d}} in @var{newstring}, where @var{d} is a digit, stands for whatever matched the @var{d}'th parenthesized grouping in @var{regexp}. For example,@refill @example M-x replace-regexp @key{RET} c[ad]+r @key{RET} \&-safe @key{RET} @end example @noindent would replace (for example) @samp{cadr} with @samp{cadr-safe} and @samp{cddr} with @samp{cddr-safe}. @example M-x replace-regexp @key{RET} \(c[ad]+r\)-safe @key{RET} \1 @key{RET} @end example @noindent would perform exactly the opposite replacements. To include a @samp{\} in the text to replace with, you must give @samp{\\}. @node Replacement and Case, Query Replace, Regexp Replace, Replace @subsection Replace Commands and Case @vindex case-replace @vindex case-fold-search If the arguments to a replace command are in lower case, the command preserves case when it makes a replacement. Thus, the following command: @example M-x replace-string @key{RET} foo @key{RET} bar @key{RET} @end example @noindent replaces a lower-case @samp{foo} with a lower case @samp{bar}, @samp{FOO} with @samp{BAR}, and @samp{Foo} with @samp{Bar}. If upper-case letters are used in the second argument, they remain upper-case every time that argument is inserted. If upper-case letters are used in the first argument, the second argument is always substituted exactly as given, with no case conversion. Likewise, if the variable @code{case-replace} is set to @code{nil}, replacement is done without case conversion. If @code{case-fold-search} is set to @code{nil}, case is significant in matching occurrences of @samp{foo} to replace; also, case conversion of the replacement string is not done. @node Query Replace,, Replacement and Case, Replace @subsection Query Replace @cindex query replace @table @kbd @item M-% @var{string} @key{RET} @var{newstring} @key{RET} @itemx M-x query-replace @key{RET} @var{string} @key{RET} @var{newstring} @key{RET} Replace some occurrences of @var{string} with @var{newstring}. @item M-x query-replace-regexp @key{RET} @var{regexp} @key{RET} @var{newstring} @key{RET} Replace some matches for @var{regexp} with @var{newstring}. @end table @kindex M-% @findex query-replace If you want to change only some of the occurrences of @samp{foo} to @samp{bar}, not all of them, you can use @code{query-replace} instead of @kbd{M-%}. This command finds occurrences of @samp{foo} one by one, displays each occurrence, and asks you whether to replace it. A numeric argument to @code{query-replace} tells it to consider only occurrences that are bounded by word-delimiter characters.@refill @findex query-replace-regexp Aside from querying, @code{query-replace} works just like @code{replace-string}, and @code{query-replace-regexp} works just like @code{replace-regexp}.@refill The things you can type when you are shown an occurrence of @var{string} or a match for @var{regexp} are: @kindex SPC (query-replace) @kindex DEL (query-replace) @kindex , (query-replace) @kindex ESC (query-replace) @kindex . (query-replace) @kindex ! (query-replace) @kindex ^ (query-replace) @kindex C-r (query-replace) @kindex C-w (query-replace) @kindex C-l (query-replace) @c WideCommands @table @kbd @item @key{SPC} to replace the occurrence with @var{newstring}. This preserves case, just like @code{replace-string}, provided @code{case-replace} is non-@code{nil}, as it normally is.@refill @item @key{DEL} to skip to the next occurrence without replacing this one. @item , @r{(Comma)} to replace this occurrence and display the result. You are then prompted for another input character. However, since the replacement has already been made, @key{DEL} and @key{SPC} are equivalent. At this point, you can type @kbd{C-r} (see below) to alter the replaced text. To undo the replacement, you can type @kbd{C-x u}. This exits the @code{query-replace}. If you want to do further replacement you must use @kbd{C-x @key{ESC} @key{ESC}} to restart (@pxref{Repetition}). @item @key{ESC} to exit without doing any more replacements. @item .@: @r{(Period)} to replace this occurrence and then exit. @item ! to replace all remaining occurrences without asking again. @item ^ to go back to the location of the previous occurrence (or what used to be an occurrence), in case you changed it by mistake. This works by popping the mark ring. Only one @kbd{^} in a row is allowed, because only one previous replacement location is kept during @code{query-replace}. @item C-r to enter a recursive editing level, in case the occurrence needs to be edited rather than just replaced with @var{newstring}. When you are done, exit the recursive editing level with @kbd{C-M-c} and the next occurrence will be displayed. @xref{Recursive Edit}. @item C-w to delete the occurrence, and then enter a recursive editing level as in @kbd{C-r}. Use the recursive edit to insert text to replace the deleted occurrence of @var{string}. When done, exit the recursive editing level with @kbd{C-M-c} and the next occurrence will be displayed. @item C-l to redisplay the screen and then give another answer. @item C-h to display a message summarizing these options, then give another answer. @end table If you type any other character, Emacs exits the @code{query-replace}, and executes the character as a command. To restart the @code{query-replace}, use @kbd{C-x @key{ESC} @key{ESC}}, which repeats the @code{query-replace} because it used the minibuffer to read its arguments. @xref{Repetition, C-x ESC ESC}. @node Other Repeating Search,, Replace, Search @section Other Search-and-Loop Commands Here are some other commands that find matches for a regular expression. They all operate from point to the end of the buffer. @findex list-matching-lines @findex occur @findex count-matches @findex delete-non-matching-lines @findex delete-matching-lines @c grosscommands @table @kbd @item M-x occur Print each line that follows point and contains a match for the specified regexp. A numeric argument specifies the number of context lines to print before and after each matching line; the default is none. @kindex C-c C-c (Occur mode) The buffer @samp{*Occur*} containing the output serves as a menu for finding occurrences in their original context. Find an occurrence as listed in @samp{*Occur*}, position point there, and type @kbd{C-c C-c}; this switches to the buffer that was searched and moves point to the original of the same occurrence. @item M-x list-matching-lines Synonym for @kbd{M-x occur}. @item M-x count-matches Print the number of matches following point for the specified regexp. @item M-x delete-non-matching-lines Delete each line that follows point and does not contain a match for the specified regexp. @item M-x delete-matching-lines Delete each line that follows point and contains a match for the specified regexp. @end table texi2html-1.82/test/xemacs_manual/fixit.texi0000644000175000017500000001601311264347115023047 0ustar flichtenheldflichtenheld @node Fixit, Files, Search, Top @chapter Commands for Fixing Typos @cindex typos @cindex mistakes, correcting This chapter describes commands that are especially useful when you catch a mistake in your text just after you have made it, or when you change your mind while composing text on line. @menu * Kill Errors:: Commands to kill a batch of recently entered text. * Transpose:: Exchanging two characters, words, lines, lists... * Fixing Case:: Correcting case of last word entered. * Spelling:: Apply spelling checker to a word, or a whole file. @end menu @node Kill Errors, Transpose, Fixit, Fixit @section Killing Your Mistakes @table @kbd @item @key{DEL} Delete last character (@code{delete-backward-char}). @item M-@key{DEL} Kill last word (@code{backward-kill-word}). @item C-x @key{DEL} Kill to beginning of sentence (@code{backward-kill-sentence}). @end table @kindex DEL @findex delete-backward-char The @key{DEL} character (@code{delete-backward-char}) is the most important correction command. When used among graphic (self-inserting) characters, it can be thought of as canceling the last character typed. @kindex M-DEL @kindex C-x DEL @findex backward-kill-word @findex backward-kill-sentence When your mistake is longer than a couple of characters, it might be more convenient to use @kbd{M-@key{DEL}} or @kbd{C-x @key{DEL}}. @kbd{M-@key{DEL}} kills back to the start of the last word, and @kbd{C-x @key{DEL}} kills back to the start of the last sentence. @kbd{C-x @key{DEL}} is particularly useful when you are thinking of what to write as you type it, in case you change your mind about phrasing. @kbd{M-@key{DEL}} and @kbd{C-x @key{DEL}} save the killed text for @kbd{C-y} and @kbd{M-y} to retrieve. @xref{Yanking}.@refill @kbd{M-@key{DEL}} is often useful even when you have typed only a few characters wrong, if you know you are confused in your typing and aren't sure exactly what you typed. At such a time, you cannot correct with @key{DEL} except by looking at the screen to see what you did. It requires less thought to kill the whole word and start over. @node Transpose, Fixing Case, Kill Errors, Fixit @section Transposing Text @table @kbd @item C-t Transpose two characters (@code{transpose-chars}). @item M-t Transpose two words (@code{transpose-words}). @item C-M-t Transpose two balanced expressions (@code{transpose-sexps}). @item C-x C-t Transpose two lines (@code{transpose-lines}). @end table @cindex transposition @kindex C-t @findex transpose-chars The common error of transposing two adjacent characters can be fixed with the @kbd{C-t} command (@code{transpose-chars}). Normally, @kbd{C-t} transposes the two characters on either side of point. When given at the end of a line, @kbd{C-t} transposes the last two characters on the line, rather than transposing the last character of the line with the newline, which would be useless. If you catch a transposition error right away, you can fix it with just @kbd{C-t}. If you catch the error later, move the cursor back to between the two transposed characters. If you transposed a space with the last character of the word before it, the word motion commands are a good way of getting there. Otherwise, a reverse search (@kbd{C-r}) is often the best way. @xref{Search}. @kindex C-x C-t @findex transpose-lines @kindex M-t @findex transpose-words @kindex C-M-t @findex transpose-sexps @kbd{Meta-t} (@code{transpose-words}) transposes the word before point with the word after point. It moves point forward over a word, dragging the word preceding or containing point forward as well. The punctuation characters between the words do not move. For example, @w{@samp{FOO, BAR}} transposes into @w{@samp{BAR, FOO}} rather than @samp{@w{BAR FOO,}}. @kbd{C-M-t} (@code{transpose-sexps}) is a similar command for transposing two expressions (@pxref{Lists}), and @kbd{C-x C-t} (@code{transpose-lines}) exchanges lines. It works like @kbd{M-t} but in determines the division of the text into syntactic units differently. A numeric argument to a transpose command serves as a repeat count: it tells the transpose command to move the character (word, sexp, line) before or containing point across several other characters (words, sexps, lines). For example, @kbd{C-u 3 C-t} moves the character before point forward across three other characters. This is equivalent to repeating @kbd{C-t} three times. @kbd{C-u - 4 M-t} moves the word before point backward across four words. @kbd{C-u - C-M-t} would cancel the effect of plain @kbd{C-M-t}.@refill A numeric argument of zero transposes the character (word, sexp, line) ending after point with the one ending after the mark (otherwise a command with a repeat count of zero would do nothing). @node Fixing Case, Spelling, Transpose, Fixit @section Case Conversion @table @kbd @item M-- M-l Convert last word to lower case. Note that @kbd{Meta--} is ``Meta-minus.'' @item M-- M-u Convert last word to all upper case. @item M-- M-c Convert last word to lower case with capital initial. @end table @findex downcase-word @findex upcase-word @findex capitalize-word @kindex M-@t{-} M-l @kindex M-@t{-} M-u @kindex M-@t{-} M-c @cindex case conversion @cindex words A common error is to type words in the wrong case. Because of this, the word case-conversion commands @kbd{M-l}, @kbd{M-u}, and @kbd{M-c} do not move the cursor when used with a negative argument. As soon as you see you have mistyped the last word, you can simply case-convert it and continue typing. @xref{Case}.@refill @node Spelling,, Fixing Case, Fixit @section Checking and Correcting Spelling @cindex spelling @c doublewidecommands @table @kbd @item M-$ Check and correct spelling of word (@code{spell-word}). @item M-x spell-buffer Check and correct spelling of each word in the buffer. @item M-x spell-region Check and correct spelling of each word in the region. @item M-x spell-string Check spelling of specified word. @end table @kindex M-$ @findex spell-word To check the spelling of the word before point, and optionally correct it, use the command @kbd{M-$} (@code{spell-word}). This command runs an inferior process containing the @code{spell} program to see whether the word is correct English. If it is not, it asks you to edit the word (in the minibuffer) into a corrected spelling, and then performs a @code{query-replace} to substitute the corrected spelling for the old one throughout the buffer. If you exit the minibuffer without altering the original spelling, it means you do not want to do anything to that word. In that case, the @code{query-replace} is not done. @findex spell-buffer @kbd{M-x spell-buffer} checks each word in the buffer the same way that @code{spell-word} does, doing a @code{query-replace} for every incorrect word if appropriate.@refill @findex spell-region @kbd{M-x spell-region} is similar to @code{spell-buffer} but operates only on the region, not the entire buffer. @findex spell-string @kbd{M-x spell-string} reads a string as an argument and checks whether that is a correctly spelled English word. It prints a message giving the answer in the echo area. texi2html-1.82/test/xemacs_manual/major.texi0000644000175000017500000001132311264347115023033 0ustar flichtenheldflichtenheld @node Major Modes, Indentation, Mule, Top @chapter Major Modes @cindex major modes @kindex TAB @kindex DEL @kindex LFD Emacs has many different @dfn{major modes}, each of which customizes Emacs for editing text of a particular sort. The major modes are mutually exclusive; at any time, each buffer has one major mode. The mode line normally contains the name of the current major mode in parentheses. @xref{Mode Line}. The least specialized major mode is called @dfn{Fundamental mode}. This mode has no mode-specific redefinitions or variable settings. Each Emacs command behaves in its most general manner, and each option is in its default state. For editing any specific type of text, such as Lisp code or English text, you should switch to the appropriate major mode, such as Lisp mode or Text mode. Selecting a major mode changes the meanings of a few keys to become more specifically adapted to the language being edited. @key{TAB}, @key{DEL}, and @key{LFD} are changed frequently. In addition, commands which handle comments use the mode to determine how to delimit comments. Many major modes redefine the syntactical properties of characters appearing in the buffer. @xref{Syntax}. The major modes fall into three major groups. Lisp mode (which has several variants), C mode, and Muddle mode are for specific programming languages. Text mode, Nroff mode, @TeX{} mode, and Outline mode are for editing English text. The remaining major modes are not intended for use on users' files; they are used in buffers created by Emacs for specific purposes and include Dired mode for buffers made by Dired (@pxref{Dired}), Mail mode for buffers made by @kbd{C-x m} (@pxref{Sending Mail}), and Shell mode for buffers used for communicating with an inferior shell process (@pxref{Interactive Shell}). Most programming language major modes specify that only blank lines separate paragraphs. This is so that the paragraph commands remain useful. @xref{Paragraphs}. They also cause Auto Fill mode to use the definition of @key{TAB} to indent the new lines it creates. This is because most lines in a program are usually indented. @xref{Indentation}. @menu * Choosing Modes:: How major modes are specified or chosen. @end menu @node Choosing Modes,,Major Modes,Major Modes @section Choosing Major Modes You can select a major mode explicitly for the current buffer, but most of the time Emacs determines which mode to use based on the file name or some text in the file. Use a @kbd{M-x} command to explicitly select a new major mode. Add @code{-mode} to the name of a major mode to get the name of a command to select that mode. For example, to enter Lisp mode, execute @kbd{M-x lisp-mode}. @vindex auto-mode-alist When you visit a file, Emacs usually chooses the right major mode based on the file's name. For example, files whose names end in @code{.c} are edited in C mode. The variable @code{auto-mode-alist} controls the correspondence between file names and major mode. Its value is a list in which each element has the form: @example (@var{regexp} . @var{mode-function}) @end example @noindent For example, one element normally found in the list has the form @code{(@t{"\\.c$"} . c-mode)}. It is responsible for selecting C mode for files whose names end in @file{.c}. (Note that @samp{\\} is needed in Lisp syntax to include a @samp{\} in the string, which is needed to suppress the special meaning of @samp{.} in regexps.) The only practical way to change this variable is with Lisp code. You can specify which major mode should be used for editing a certain file by a special sort of text in the first non-blank line of the file. The mode name should appear in this line both preceded and followed by @samp{-*-}. Other text may appear on the line as well. For example, @example ;-*-Lisp-*- @end example @noindent tells Emacs to use Lisp mode. Note how the semicolon is used to make Lisp treat this line as a comment. Such an explicit specification overrides any default mode based on the file name. Another format of mode specification is: @example -*-Mode: @var{modename};-*- @end example @noindent which allows other things besides the major mode name to be specified. However, Emacs does not look for anything except the mode name. The major mode can also be specified in a local variables list. @xref{File Variables}. @vindex default-major-mode When you visit a file that does not specify a major mode to use, or when you create a new buffer with @kbd{C-x b}, Emacs uses the major mode specified by the variable @code{default-major-mode}. Normally this value is the symbol @code{fundamental-mode}, which specifies Fundamental mode. If @code{default-major-mode} is @code{nil}, the major mode is taken from the previously selected buffer. texi2html-1.82/test/xemacs_manual/custom.texi0000644000175000017500000030633011264347115023242 0ustar flichtenheldflichtenheld @node Customization, Quitting, Emulation, Top @chapter Customization @cindex customization This chapter talks about various topics relevant to adapting the behavior of Emacs in minor ways. All kinds of customization affect only the particular Emacs job that you do them in. They are completely lost when you kill the Emacs job, and have no effect on other Emacs jobs you may run at the same time or later. The only way an Emacs job can affect anything outside of it is by writing a file; in particular, the only way to make a customization `permanent' is to put something in your init file or other appropriate file to do the customization in each session. @xref{Init File}. @menu * Minor Modes:: Each minor mode is one feature you can turn on independently of any others. * Variables:: Many Emacs commands examine Emacs variables to decide what to do; by setting variables, you can control their functioning. * Keyboard Macros:: A keyboard macro records a sequence of keystrokes to be replayed with a single command. * Key Bindings:: The keymaps say what command each key runs. By changing them, you can "redefine keys". * Syntax:: The syntax table controls how words and expressions are parsed. * Init File:: How to write common customizations in the init file. * Audible Bell:: Changing how Emacs sounds the bell. * Faces:: Changing the fonts and colors of a region of text. * Frame Components:: Controlling the presence and positions of the menubar, toolbars, and gutters. * X Resources:: X resources controlling various aspects of the behavior of XEmacs. @end menu @node Minor Modes @section Minor Modes @cindex minor modes @cindex mode line Minor modes are options which you can use or not. For example, Auto Fill mode is a minor mode in which @key{SPC} breaks lines between words as you type. All the minor modes are independent of each other and of the selected major mode. Most minor modes inform you in the mode line when they are on; for example, @samp{Fill} in the mode line means that Auto Fill mode is on. Append @code{-mode} to the name of a minor mode to get the name of a command function that turns the mode on or off. Thus, the command to enable or disable Auto Fill mode is called @kbd{M-x auto-fill-mode}. These commands are usually invoked with @kbd{M-x}, but you can bind keys to them if you wish. With no argument, the function turns the mode on if it was off and off if it was on. This is known as @dfn{toggling}. A positive argument always turns the mode on, and an explicit zero argument or a negative argument always turns it off. @cindex Auto Fill mode @findex auto-fill-mode Auto Fill mode allows you to enter filled text without breaking lines explicitly. Emacs inserts newlines as necessary to prevent lines from becoming too long. @xref{Filling}. @cindex Overwrite mode @findex overwrite-mode Overwrite mode causes ordinary printing characters to replace existing text instead of moving it to the right. For example, if point is in front of the @samp{B} in @samp{FOOBAR}, and you type a @kbd{G} in Overwrite mode, it changes to @samp{FOOGAR}, instead of @samp{FOOGBAR}.@refill @cindex Abbrev mode @findex abbrev-mode Abbrev mode allows you to define abbreviations that automatically expand as you type them. For example, @samp{amd} might expand to @samp{abbrev mode}. @xref{Abbrevs}, for full information. @node Variables @section Variables @cindex variable @cindex option A @dfn{variable} is a Lisp symbol which has a value. Variable names can contain any characters, but by convention they are words separated by hyphens. A variable can also have a documentation string, which describes what kind of value it should have and how the value will be used. Lisp allows any variable to have any kind of value, but most variables that Emacs uses require a value of a certain type. Often the value has to be a string or a number. Sometimes we say that a certain feature is turned on if a variable is ``non-@code{nil},'' meaning that if the variable's value is @code{nil}, the feature is off, but the feature is on for @i{any} other value. The conventional value to turn on the feature---since you have to pick one particular value when you set the variable---is @code{t}. Emacs uses many Lisp variables for internal recordkeeping, as any Lisp program must, but the most interesting variables for you are the ones that exist for the sake of customization. Emacs does not (usually) change the values of these variables; instead, you set the values, and thereby alter and control the behavior of certain Emacs commands. These variables are called @dfn{options}. Most options are documented in this manual and appear in the Variable Index (@pxref{Variable Index}). One example of a variable which is an option is @code{fill-column}, which specifies the position of the right margin (as a number of characters from the left margin) to be used by the fill commands (@pxref{Filling}). @menu * Examining:: Examining or setting one variable's value. * Easy Customization:: Convenient and easy customization of variables. * Edit Options:: Examining or editing list of all variables' values. * Locals:: Per-buffer values of variables. * File Variables:: How files can specify variable values. @end menu @node Examining @subsection Examining and Setting Variables @cindex setting variables @table @kbd @item C-h v @itemx M-x describe-variable Print the value and documentation of a variable. @findex set-variable @item M-x set-variable Change the value of a variable. @end table @kindex C-h v @findex describe-variable To examine the value of a single variable, use @kbd{C-h v} (@code{describe-variable}), which reads a variable name using the minibuffer, with completion. It prints both the value and the documentation of the variable. @example C-h v fill-column @key{RET} @end example @noindent prints something like: @smallexample fill-column's value is 75 Documentation: *Column beyond which automatic line-wrapping should happen. Automatically becomes local when set in any fashion. @end smallexample @cindex option @noindent The star at the beginning of the documentation indicates that this variable is an option. @kbd{C-h v} is not restricted to options; it allows any variable name. @findex set-variable If you know which option you want to set, you can use @kbd{M-x set-variable} to set it. This prompts for the variable name in the minibuffer (with completion), and then prompts for a Lisp expression for the new value using the minibuffer a second time. For example, @example M-x set-variable @key{RET} fill-column @key{RET} 75 @key{RET} @end example @noindent sets @code{fill-column} to 75, as if you had executed the Lisp expression @code{(setq fill-column 75)}. Setting variables in this way, like all means of customizing Emacs except where explicitly stated, affects only the current Emacs session. @node Easy Customization @subsection Easy Customization Interface @findex customize @cindex customization buffer A convenient way to find the user option variables that you want to change, and then change them, is with @kbd{M-x customize} (or use a keyboard shortcut, @kbd{C-h C}. This command creates a @dfn{customization buffer} with which you can browse through the Emacs user options in a logically organized structure, then edit and set their values. You can also use the customization buffer to save settings permanently. (Not all Emacs user options are included in this structure as of yet, but we are adding the rest.) @menu * Groups: Customization Groups. How options are classified in a structure. * Changing an Option:: How to edit a value and set an option. * Face Customization:: How to edit the attributes of a face. * Specific Customization:: Making a customization buffer for specific options, faces, or groups. @end menu @node Customization Groups @subsubsection Customization Groups @cindex customization groups For customization purposes, user options are organized into @dfn{groups} to help you find them. Groups are collected into bigger groups, all the way up to a master group called @code{Emacs}. @kbd{M-x customize} (or @kbd{C-h C}) creates a customization buffer that shows the top-level @code{Emacs} group and the second-level groups immediately under it. It looks like this, in part: @smallexample /- Emacs group: ---------------------------------------------------\ [State]: visible group members are all at standard settings. Customization of the One True Editor. See also [Manual]. [Open] Editing group Basic text editing facilities. [Open] External group Interfacing to external utilities. @var{more second-level groups} \- Emacs group end ------------------------------------------------/ @end smallexample @noindent This says that the buffer displays the contents of the @code{Emacs} group. The other groups are listed because they are its contents. But they are listed differently, without indentation and dashes, because @emph{their} contents are not included. Each group has a single-line documentation string; the @code{Emacs} group also has a @samp{[State]} line. @cindex editable fields (customization buffer) @cindex active fields (customization buffer) Most of the text in the customization buffer is read-only, but it typically includes some @dfn{editable fields} that you can edit. There are also @dfn{active fields}; this means a field that does something when you @dfn{invoke} it. To invoke an active field, either click on it with @kbd{Mouse-1}, or move point to it and type @key{RET}. For example, the phrase @samp{[Open]} that appears in a second-level group is an active field. Invoking the @samp{[Open]} field for a group opens up a new customization buffer, which shows that group and its contents. This field is a kind of hypertext link to another group. The @code{Emacs} group does not include any user options itself, but other groups do. By examining various groups, you will eventually find the options and faces that belong to the feature you are interested in customizing. Then you can use the customization buffer to set them. @findex customize-browse You can view the structure of customization groups on a larger scale with @kbd{M-x customize-browse}. This command creates a special kind of customization buffer which shows only the names of the groups (and options and faces), and their structure. In this buffer, you can show the contents of a group by invoking @samp{[+]}. When the group contents are visible, this button changes to @samp{[-]}; invoking that hides the group contents. Each group, option or face name in this buffer has an active field which says @samp{[Group]}, @samp{[Option]} or @samp{[Face]}. Invoking that active field creates an ordinary customization buffer showing just that group and its contents, just that option, or just that face. This is the way to set values in it. @node Changing an Option @subsubsection Changing an Option Here is an example of what a user option looks like in the customization buffer: @smallexample Kill Ring Max: [Hide] 30 [State]: this option is unchanged from its standard setting. Maximum length of kill ring before oldest elements are thrown away. @end smallexample The text following @samp{[Hide]}, @samp{30} in this case, indicates the current value of the option. If you see @samp{[Show]} instead of @samp{[Hide]}, it means that the value is hidden; the customization buffer initially hides values that take up several lines. Invoke @samp{[Show]} to show the value. The line after the option name indicates the @dfn{customization state} of the option: in the example above, it says you have not changed the option yet. The word @samp{[State]} at the beginning of this line is active; you can get a menu of various operations by invoking it with @kbd{Mouse-1} or @key{RET}. These operations are essential for customizing the variable. The line after the @samp{[State]} line displays the beginning of the option's documentation string. If there are more lines of documentation, this line ends with @samp{[More]}; invoke this to show the full documentation string. To enter a new value for @samp{Kill Ring Max}, move point to the value and edit it textually. For example, you can type @kbd{M-d}, then insert another number. When you begin to alter the text, you will see the @samp{[State]} line change to say that you have edited the value: @smallexample [State]: you have edited the value as text, but not set the option. @end smallexample @cindex setting option value Editing the value does not actually set the option variable. To do that, you must @dfn{set} the option. To do this, invoke the word @samp{[State]} and choose @samp{Set for Current Session}. The state of the option changes visibly when you set it: @smallexample [State]: you have set this option, but not saved it for future sessions. @end smallexample You don't have to worry about specifying a value that is not valid; setting the option checks for validity and will not really install an unacceptable value. @kindex M-TAB @r{(customization buffer)} @findex widget-complete While editing a value or field that is a file name, directory name, command name, or anything else for which completion is defined, you can type @kbd{M-@key{TAB}} (@code{widget-complete}) to do completion. Some options have a small fixed set of possible legitimate values. These options don't let you edit the value textually. Instead, an active field @samp{[Value Menu]} appears before the value; invoke this field to edit the value. For a boolean ``on or off'' value, the active field says @samp{[Toggle]}, and it changes to the other value. @samp{[Value Menu]} and @samp{[Toggle]} edit the buffer; the changes take effect when you use the @samp{Set for Current Session} operation. Some options have values with complex structure. For example, the value of @code{load-path} is a list of directories. Here is how it appears in the customization buffer: @smallexample Load Path: [INS] [DEL] [Current dir?]: /usr/local/share/emacs/19.34.94/site-lisp [INS] [DEL] [Current dir?]: /usr/local/share/emacs/site-lisp [INS] [DEL] [Current dir?]: /usr/local/share/emacs/19.34.94/leim [INS] [DEL] [Current dir?]: /usr/local/share/emacs/19.34.94/lisp [INS] [DEL] [Current dir?]: /build/emacs/e19/lisp [INS] [DEL] [Current dir?]: /build/emacs/e19/lisp/gnus [INS] [State]: this item has been changed outside the customization buffer. List of directories to search for files to load.... @end smallexample @noindent Each directory in the list appears on a separate line, and each line has several editable or active fields. You can edit any of the directory names. To delete a directory from the list, invoke @samp{[DEL]} on that line. To insert a new directory in the list, invoke @samp{[INS]} at the point where you want to insert it. You can also invoke @samp{[Current dir?]} to switch between including a specific named directory in the path, and including @code{nil} in the path. (@code{nil} in a search path means ``try the current directory.'') @kindex TAB @r{(customization buffer)} @kindex S-TAB @r{(customization buffer)} @findex widget-forward @findex widget-backward Two special commands, @key{TAB} and @kbd{S-@key{TAB}}, are useful for moving through the customization buffer. @key{TAB} (@code{widget-forward}) moves forward to the next active or editable field; @kbd{S-@key{TAB}} (@code{widget-backward}) moves backward to the previous active or editable field. Typing @key{RET} on an editable field also moves forward, just like @key{TAB}. The reason for this is that people have a tendency to type @key{RET} when they are finished editing a field. If you have occasion to insert a newline in an editable field, use @kbd{C-o} or @kbd{C-q C-j}, @cindex saving option value Setting the option changes its value in the current Emacs session; @dfn{saving} the value changes it for future sessions as well. This works by writing code into your init file so as to set the option variable again each time you start Emacs. @xref{Init File}. To save the option, invoke @samp{[State]} and select the @samp{Save for Future Sessions} operation. You can also restore the option to its standard value by invoking @samp{[State]} and selecting the @samp{Reset} operation. There are actually three reset operations: @table @samp @item Reset to Current If you have made some modifications and not yet set the option, this restores the text in the customization buffer to match the actual value. @item Reset to Saved This restores the value of the option to the last saved value, and updates the text accordingly. @item Reset to Standard Settings This sets the option to its standard value, and updates the text accordingly. This also eliminates any saved value for the option, so that you will get the standard value in future Emacs sessions. @end table The state of a group indicates whether anything in that group has been edited, set or saved. You can select @samp{Set for Current Session}, @samp{Save for Future Sessions} and the various kinds of @samp{Reset} operation for the group; these operations on the group apply to all options in the group and its subgroups. Near the top of the customization buffer there are two lines containing several active fields: @smallexample [Set] [Save] [Reset] [Done] @end smallexample @noindent Invoking @samp{[Done]} buries this customization buffer. Each of the other fields performs an operation---set, save or reset---on each of the items in the buffer that could meaningfully be set, saved or reset. @node Face Customization @subsubsection Customizing Faces @cindex customizing faces @cindex bold font @cindex italic font @cindex fonts and faces In addition to user options, some customization groups also include faces. When you show the contents of a group, both the user options and the faces in the group appear in the customization buffer. Here is an example of how a face looks: @smallexample Custom Changed Face: (sample) [State]: this face is unchanged from its standard setting. Face used when the customize item has been changed. Parent groups: [Custom Magic Faces] Attributes: [ ] Bold: [Toggle] off (nil) [ ] Italic: [Toggle] off (nil) [ ] Underline: [Toggle] off (nil) [ ] Foreground: white (sample) [ ] Background: blue (sample) [ ] Inverse: [Toggle] off (nil) [ ] Stipple: [ ] Font Family: [ ] Size: [ ] Strikethru: off @end smallexample Each face attribute has its own line. The @samp{[@var{x}]} field before the attribute name indicates whether the attribute is @dfn{enabled}; @samp{X} means that it is. You can enable or disable the attribute by invoking that field. When the attribute is enabled, you can change the attribute value in the usual ways. @xref{Faces}, for description of how @code{face-frob-from-locale-first} variable affects changing @samp{Bold} and @samp{Italic} attributes. @c Is this true for XEmacs? @c On a black-and-white display, the colors you can use for the @c background are @samp{black}, @samp{white}, @samp{gray}, @samp{gray1}, @c and @samp{gray3}. Emacs supports these shades of gray by using @c background stipple patterns instead of a color. @c Setting, saving and resetting a face work like the same operations for options (@pxref{Changing an Option}). A face can specify different appearances for different types of display. For example, a face can make text red on a color display, but use a bold font on a monochrome display. To specify multiple appearances for a face, select @samp{Show Display Types} in the menu you get from invoking @samp{[State]}. @c It would be cool to implement this @c @findex modify-face @c Another more basic way to set the attributes of a specific face is @c with @kbd{M-x modify-face}. This command reads the name of a face, then @c reads the attributes one by one. For the color and stipple attributes, @c the attribute's current value is the default---type just @key{RET} if @c you don't want to change that attribute. Type @samp{none} if you want @c to clear out the attribute. @node Specific Customization @subsubsection Customizing Specific Items Instead of finding the options you want to change by moving down through the structure of groups, you can specify the particular option, face or group that you want to customize. @table @kbd @item M-x customize-option @key{RET} @var{option} @key{RET} Set up a customization buffer with just one option, @var{option}. @item M-x customize-face @key{RET} @var{face} @key{RET} Set up a customization buffer with just one face, @var{face}. @item M-x customize-group @key{RET} @var{group} @key{RET} Set up a customization buffer with just one group, @var{group}. @item M-x customize-apropos @key{RET} @var{regexp} @key{RET} Set up a customization buffer with all the options, faces and groups that match @var{regexp}. @item M-x customize-saved Set up a customization buffer containing all options and faces that you have saved with customization buffers. @item M-x customize-customized Set up a customization buffer containing all options and faces that you have customized but not saved. @end table @findex customize-option If you want to alter a particular user option variable with the customization buffer, and you know its name, you can use the command @kbd{M-x customize-option} and specify the option name. This sets up the customization buffer with just one option---the one that you asked for. Editing, setting and saving the value work as described above, but only for the specified option. @findex customize-face Likewise, you can modify a specific face, chosen by name, using @kbd{M-x customize-face}. @findex customize-group You can also set up the customization buffer with a specific group, using @kbd{M-x customize-group}. The immediate contents of the chosen group, including option variables, faces, and other groups, all appear as well. However, these subgroups' own contents start out hidden. You can show their contents in the usual way, by invoking @samp{[Show]}. @findex customize-apropos To control more precisely what to customize, you can use @kbd{M-x customize-apropos}. You specify a regular expression as argument; then all options, faces and groups whose names match this regular expression are set up in the customization buffer. If you specify an empty regular expression, this includes @emph{all} groups, options and faces in the customization buffer (but that takes a long time). @findex customize-saved @findex customize-customized If you change option values and then decide the change was a mistake, you can use two special commands to revisit your previous changes. Use @kbd{customize-saved} to look at the options and faces that you have saved. Use @kbd{M-x customize-customized} to look at the options and faces that you have set but not saved. @node Edit Options @subsection Editing Variable Values @table @kbd @item M-x list-options Display a buffer listing names, values, and documentation of all options. @item M-x edit-options Change option values by editing a list of options. @end table @findex list-options @kbd{M-x list-options} displays a list of all Emacs option variables in an Emacs buffer named @samp{*List Options*}. Each option is shown with its documentation and its current value. Here is what a portion of it might look like: @smallexample ;; exec-path: ("." "/usr/local/bin" "/usr/ucb" "/bin" "/usr/bin" "/u2/emacs/etc") *List of directories to search programs to run in subprocesses. Each element is a string (directory name) or nil (try the default directory). ;; ;; fill-column: 75 *Column beyond which automatic line-wrapping should happen. Automatically becomes local when set in any fashion. ;; @end smallexample @findex edit-options @kbd{M-x edit-options} goes one step further and immediately selects the @samp{*List Options*} buffer; this buffer uses the major mode Options mode, which provides commands that allow you to point at an option and change its value: @table @kbd @item s Set the variable point is in or near to a new value read using the minibuffer. @item x Toggle the variable point is in or near: if the value was @code{nil}, it becomes @code{t}; otherwise it becomes @code{nil}. @item 1 Set the variable point is in or near to @code{t}. @item 0 Set the variable point is in or near to @code{nil}. @item n @itemx p Move to the next or previous variable. @end table @node Locals @subsection Local Variables @table @kbd @item M-x make-local-variable Make a variable have a local value in the current buffer. @item M-x kill-local-variable Make a variable use its global value in the current buffer. @item M-x make-variable-buffer-local Mark a variable so that setting it will make it local to the buffer that is current at that time. @end table @cindex local variables You can make any variable @dfn{local} to a specific Emacs buffer. This means that the variable's value in that buffer is independent of its value in other buffers. A few variables are always local in every buffer. All other Emacs variables have a @dfn{global} value which is in effect in all buffers that have not made the variable local. Major modes always make the variables they set local to the buffer. This is why changing major modes in one buffer has no effect on other buffers. @findex make-local-variable @kbd{M-x make-local-variable} reads the name of a variable and makes it local to the current buffer. Further changes in this buffer will not affect others, and changes in the global value will not affect this buffer. @findex make-variable-buffer-local @cindex per-buffer variables @kbd{M-x make-variable-buffer-local} reads the name of a variable and changes the future behavior of the variable so that it automatically becomes local when it is set. More precisely, once you have marked a variable in this way, the usual ways of setting the variable will automatically invoke @code{make-local-variable} first. We call such variables @dfn{per-buffer} variables. Some important variables have been marked per-buffer already. They include @code{abbrev-mode}, @code{auto-fill-function}, @code{case-fold-search}, @code{comment-column}, @code{ctl-arrow}, @code{fill-column}, @code{fill-prefix}, @code{indent-tabs-mode}, @code{left-margin}, @*@code{mode-line-format}, @code{overwrite-mode}, @code{selective-display-ellipses}, @*@code{selective-display}, @code{tab-width}, and @code{truncate-lines}. Some other variables are always local in every buffer, but they are used for internal purposes.@refill Note: the variable @code{auto-fill-function} was formerly named @code{auto-fill-hook}. @findex kill-local-variable If you want a variable to cease to be local to the current buffer, call @kbd{M-x kill-local-variable} and provide the name of a variable to the prompt. The global value of the variable is again in effect in this buffer. Setting the major mode kills all the local variables of the buffer. @findex setq-default To set the global value of a variable, regardless of whether the variable has a local value in the current buffer, you can use the Lisp function @code{setq-default}. It works like @code{setq}. If there is a local value in the current buffer, the local value is not affected by @code{setq-default}; thus, the new global value may not be visible until you switch to another buffer, as in the case of: @example (setq-default fill-column 75) @end example @noindent @code{setq-default} is the only way to set the global value of a variable that has been marked with @code{make-variable-buffer-local}. @findex default-value Programs can look at a variable's default value with @code{default-value}. This function takes a symbol as an argument and returns its default value. The argument is evaluated; usually you must quote it explicitly, as in the case of: @example (default-value 'fill-column) @end example @node File Variables @subsection Local Variables in Files @cindex local variables in files A file can contain a @dfn{local variables list}, which specifies the values to use for certain Emacs variables when that file is edited. Visiting the file checks for a local variables list and makes each variable in the list local to the buffer in which the file is visited, with the value specified in the file. A local variables list goes near the end of the file, in the last page. (It is often best to put it on a page by itself.) The local variables list starts with a line containing the string @samp{Local Variables:}, and ends with a line containing the string @samp{End:}. In between come the variable names and values, one set per line, as @samp{@var{variable}:@: @var{value}}. The @var{value}s are not evaluated; they are used literally. The line which starts the local variables list does not have to say just @samp{Local Variables:}. If there is other text before @samp{Local Variables:}, that text is called the @dfn{prefix}, and if there is other text after, that is called the @dfn{suffix}. If a prefix or suffix are present, each entry in the local variables list should have the prefix before it and the suffix after it. This includes the @samp{End:} line. The prefix and suffix are included to disguise the local variables list as a comment so the compiler or text formatter will ignore it. If you do not need to disguise the local variables list as a comment in this way, there is no need to include a prefix or a suffix.@refill Two ``variable'' names are special in a local variables list: a value for the variable @code{mode} sets the major mode, and a value for the variable @code{eval} is simply evaluated as an expression and the value is ignored. These are not real variables; setting them in any other context does not have the same effect. If @code{mode} is used in a local variables list, it should be the first entry in the list. Here is an example of a local variables list: @example ;;; Local Variables: *** ;;; mode:lisp *** ;;; comment-column:0 *** ;;; comment-start: ";;; " *** ;;; comment-end:"***" *** ;;; End: *** @end example Note that the prefix is @samp{;;; } and the suffix is @samp{ ***}. Note also that comments in the file begin with and end with the same strings. Presumably the file contains code in a language which is enough like Lisp for Lisp mode to be useful but in which comments start and end differently. The prefix and suffix are used in the local variables list to make the list look like several lines of comments when the compiler or interpreter for that language reads the file. The start of the local variables list must be no more than 3000 characters from the end of the file, and must be in the last page if the file is divided into pages. Otherwise, Emacs will not notice it is there. The purpose is twofold: a stray @samp{Local Variables:}@: not in the last page does not confuse Emacs, and Emacs never needs to search a long file that contains no page markers and has no local variables list. You may be tempted to turn on Auto Fill mode with a local variable list. That is inappropriate. Whether you use Auto Fill mode or not is a matter of personal taste, not a matter of the contents of particular files. If you want to use Auto Fill, set up major mode hooks with your init file to turn it on (when appropriate) for you alone (@pxref{Init File}). Don't try to use a local variable list that would impose your taste on everyone working with the file. XEmacs allows you to specify local variables in the first line of a file, in addition to specifying them in the @code{Local Variables} section at the end of a file. If the first line of a file contains two occurrences of @code{`-*-'}, XEmacs uses the information between them to determine what the major mode and variable settings should be. For example, these are all legal: @example ;;; -*- mode: emacs-lisp -*- ;;; -*- mode: postscript; version-control: never -*- ;;; -*- tags-file-name: "/foo/bar/TAGS" -*- @end example For historical reasons, the syntax @code{`-*- modename -*-'} is allowed as well; for example, you can use: @example ;;; -*- emacs-lisp -*- @end example @vindex enable-local-variables The variable @code{enable-local-variables} controls the use of local variables lists in files you visit. The value can be @code{t}, @code{nil}, or something else. A value of @code{t} means local variables lists are obeyed; @code{nil} means they are ignored; anything else means query. The command @code{M-x normal-mode} always obeys local variables lists and ignores this variable. @node Keyboard Macros @section Keyboard Macros @cindex keyboard macros A @dfn{keyboard macro} is a command defined by the user to abbreviate a sequence of keys. For example, if you discover that you are about to type @kbd{C-n C-d} forty times, you can speed your work by defining a keyboard macro to invoke @kbd{C-n C-d} and calling it with a repeat count of forty. @c widecommands @table @kbd @item C-x ( Start defining a keyboard macro (@code{start-kbd-macro}). @item C-x ) End the definition of a keyboard macro (@code{end-kbd-macro}). @item C-x e Execute the most recent keyboard macro (@code{call-last-kbd-macro}). @item C-u C-x ( Re-execute last keyboard macro, then add more keys to its definition. @item C-x q When this point is reached during macro execution, ask for confirmation (@code{kbd-macro-query}). @item M-x name-last-kbd-macro Give a command name (for the duration of the session) to the most recently defined keyboard macro. @item M-x insert-kbd-macro Insert in the buffer a keyboard macro's definition, as Lisp code. @end table Keyboard macros differ from other Emacs commands in that they are written in the Emacs command language rather than in Lisp. This makes it easier for the novice to write them and makes them more convenient as temporary hacks. However, the Emacs command language is not powerful enough as a programming language to be useful for writing anything general or complex. For such things, Lisp must be used. You define a keyboard macro by executing the commands which are its definition. Put differently, as you are defining a keyboard macro, the definition is being executed for the first time. This way, you see what the effects of your commands are, and don't have to figure them out in your head. When you are finished, the keyboard macro is defined and also has been executed once. You can then execute the same set of commands again by invoking the macro. @menu * Basic Kbd Macro:: Defining and running keyboard macros. * Save Kbd Macro:: Giving keyboard macros names; saving them in files. * Kbd Macro Query:: Keyboard macros that do different things each use. @end menu @node Basic Kbd Macro @subsection Basic Use @kindex C-x ( @kindex C-x ) @kindex C-x e @findex start-kbd-macro @findex end-kbd-macro @findex call-last-kbd-macro To start defining a keyboard macro, type @kbd{C-x (} (@code{start-kbd-macro}). From then on, anything you type continues to be executed, but also becomes part of the definition of the macro. @samp{Def} appears in the mode line to remind you of what is going on. When you are finished, the @kbd{C-x )} command (@code{end-kbd-macro}) terminates the definition, without becoming part of it. For example, @example C-x ( M-f foo C-x ) @end example @noindent defines a macro to move forward a word and then insert @samp{foo}. You can give @kbd{C-x )} a repeat count as an argument, in which case it repeats the macro that many times right after defining it, but defining the macro counts as the first repetition (since it is executed as you define it). If you give @kbd{C-x )} an argument of 4, it executes the macro immediately 3 additional times. An argument of zero to @kbd{C-x e} or @kbd{C-x )} means repeat the macro indefinitely (until it gets an error or you type @kbd{C-g}). Once you have defined a macro, you can invoke it again with the @kbd{C-x e} command (@code{call-last-kbd-macro}). You can give the command a repeat count numeric argument to execute the macro many times. To repeat an operation at regularly spaced places in the text, define a macro and include as part of the macro the commands to move to the next place you want to use it. For example, if you want to change each line, you should position point at the start of a line, and define a macro to change that line and leave point at the start of the next line. Repeating the macro will then operate on successive lines. After you have terminated the definition of a keyboard macro, you can add to the end of its definition by typing @kbd{C-u C-x (}. This is equivalent to plain @kbd{C-x (} followed by retyping the whole definition so far. As a consequence it re-executes the macro as previously defined. @node Save Kbd Macro @subsection Naming and Saving Keyboard Macros @findex name-last-kbd-macro To save a keyboard macro for longer than until you define the next one, you must give it a name using @kbd{M-x name-last-kbd-macro}. This reads a name as an argument using the minibuffer and defines that name to execute the macro. The macro name is a Lisp symbol, and defining it in this way makes it a valid command name for calling with @kbd{M-x} or for binding a key to with @code{global-set-key} (@pxref{Keymaps}). If you specify a name that has a prior definition other than another keyboard macro, Emacs prints an error message and nothing is changed. @findex insert-kbd-macro Once a macro has a command name, you can save its definition in a file. You can then use it in another editing session. First visit the file you want to save the definition in. Then use the command: @example M-x insert-kbd-macro @key{RET} @var{macroname} @key{RET} @end example @noindent This inserts some Lisp code that, when executed later, will define the same macro with the same definition it has now. You need not understand Lisp code to do this, because @code{insert-kbd-macro} writes the Lisp code for you. Then save the file. You can load the file with @code{load-file} (@pxref{Lisp Libraries}). If the file you save in is your initialization file (@pxref{Init File}), then the macro will be defined each time you run Emacs. If you give @code{insert-kbd-macro} a prefix argument, it creates additional Lisp code to record the keys (if any) that you have bound to the keyboard macro, so that the macro is reassigned the same keys when you load the file. @node Kbd Macro Query @subsection Executing Macros With Variations @kindex C-x q @findex kbd-macro-query You can use @kbd{C-x q} (@code{kbd-macro-query}), to get an effect similar to that of @code{query-replace}. The macro asks you each time whether to make a change. When you are defining the macro, type @kbd{C-x q} at the point where you want the query to occur. During macro definition, the @kbd{C-x q} does nothing, but when you invoke the macro, @kbd{C-x q} reads a character from the terminal to decide whether to continue. The special answers to a @kbd{C-x q} query are @key{SPC}, @key{DEL}, @kbd{C-d}, @kbd{C-l}, and @kbd{C-r}. Any other character terminates execution of the keyboard macro and is then read as a command. @key{SPC} means to continue. @key{DEL} means to skip the remainder of this repetition of the macro, starting again from the beginning in the next repetition. @kbd{C-d} means to skip the remainder of this repetition and cancel further repetition. @kbd{C-l} redraws the frame and asks you again for a character to specify what to do. @kbd{C-r} enters a recursive editing level, in which you can perform editing that is not part of the macro. When you exit the recursive edit using @kbd{C-M-c}, you are asked again how to continue with the keyboard macro. If you type a @key{SPC} at this time, the rest of the macro definition is executed. It is up to you to leave point and the text in a state such that the rest of the macro will do what you want.@refill @kbd{C-u C-x q}, which is @kbd{C-x q} with a numeric argument, performs a different function. It enters a recursive edit reading input from the keyboard, both when you type it during the definition of the macro and when it is executed from the macro. During definition, the editing you do inside the recursive edit does not become part of the macro. During macro execution, the recursive edit gives you a chance to do some particularized editing. @xref{Recursive Edit}. @node Key Bindings @section Customizing Key Bindings This section deals with the @dfn{keymaps} that define the bindings between keys and functions, and shows how you can customize these bindings. @cindex command @cindex function @cindex command name A command is a Lisp function whose definition provides for interactive use. Like every Lisp function, a command has a function name, which is a Lisp symbol whose name usually consists of lower case letters and hyphens. @menu * Keymaps:: Definition of the keymap data structure. Names of Emacs's standard keymaps. * Rebinding:: How to redefine one key's meaning conveniently. * Disabling:: Disabling a command means confirmation is required before it can be executed. This is done to protect beginners from surprises. @end menu @node Keymaps @subsection Keymaps @cindex keymap @cindex global keymap @vindex global-map The bindings between characters and command functions are recorded in data structures called @dfn{keymaps}. Emacs has many of these. One, the @dfn{global} keymap, defines the meanings of the single-character keys that are defined regardless of major mode. It is the value of the variable @code{global-map}. @cindex local keymap @vindex c-mode-map @vindex lisp-mode-map Each major mode has another keymap, its @dfn{local keymap}, which contains overriding definitions for the single-character keys that are redefined in that mode. Each buffer records which local keymap is installed for it at any time, and the current buffer's local keymap is the only one that directly affects command execution. The local keymaps for Lisp mode, C mode, and many other major modes always exist even when not in use. They are the values of the variables @code{lisp-mode-map}, @code{c-mode-map}, and so on. For less frequently used major modes, the local keymap is sometimes constructed only when the mode is used for the first time in a session, to save space. @cindex minibuffer @vindex minibuffer-local-map @vindex minibuffer-local-ns-map @vindex minibuffer-local-completion-map @vindex minibuffer-local-must-match-map @vindex repeat-complex-command-map @vindex isearch-mode-map There are local keymaps for the minibuffer, too; they contain various completion and exit commands. @itemize @bullet @item @code{minibuffer-local-map} is used for ordinary input (no completion). @item @code{minibuffer-local-ns-map} is similar, except that @key{SPC} exits just like @key{RET}. This is used mainly for Mocklisp compatibility. @item @code{minibuffer-local-completion-map} is for permissive completion. @item @code{minibuffer-local-must-match-map} is for strict completion and for cautious completion. @item @code{repeat-complex-command-map} is for use in @kbd{C-x @key{ESC} @key{ESC}}. @item @code{isearch-mode-map} contains the bindings of the special keys which are bound in the pseudo-mode entered with @kbd{C-s} and @kbd{C-r}. @end itemize @vindex ctl-x-map @vindex help-map @vindex esc-map Finally, each prefix key has a keymap which defines the key sequences that start with it. For example, @code{ctl-x-map} is the keymap used for characters following a @kbd{C-x}. @itemize @bullet @item @code{ctl-x-map} is the variable name for the map used for characters that follow @kbd{C-x}. @item @code{help-map} is used for characters that follow @kbd{C-h}. @item @code{esc-map} is for characters that follow @key{ESC}. All Meta characters are actually defined by this map. @item @code{ctl-x-4-map} is for characters that follow @kbd{C-x 4}. @item @code{mode-specific-map} is for characters that follow @kbd{C-c}. @end itemize The definition of a prefix key is the keymap to use for looking up the following character. Sometimes the definition is actually a Lisp symbol whose function definition is the following character keymap. The effect is the same, but it provides a command name for the prefix key that you can use as a description of what the prefix key is for. Thus the binding of @kbd{C-x} is the symbol @code{Ctl-X-Prefix}, whose function definition is the keymap for @kbd{C-x} commands, the value of @code{ctl-x-map}.@refill Prefix key definitions can appear in either the global map or a local map. The definitions of @kbd{C-c}, @kbd{C-x}, @kbd{C-h}, and @key{ESC} as prefix keys appear in the global map, so these prefix keys are always available. Major modes can locally redefine a key as a prefix by putting a prefix key definition for it in the local map.@refill A mode can also put a prefix definition of a global prefix character such as @kbd{C-x} into its local map. This is how major modes override the definitions of certain keys that start with @kbd{C-x}. This case is special, because the local definition does not entirely replace the global one. When both the global and local definitions of a key are other keymaps, the next character is looked up in both keymaps, with the local definition overriding the global one. The character after the @kbd{C-x} is looked up in both the major mode's own keymap for redefined @kbd{C-x} commands and in @code{ctl-x-map}. If the major mode's own keymap for @kbd{C-x} commands contains @code{nil}, the definition from the global keymap for @kbd{C-x} commands is used.@refill @node Rebinding @subsection Changing Key Bindings @cindex key rebinding, this session @cindex rebinding keys, this session You can redefine an Emacs key by changing its entry in a keymap. You can change the global keymap, in which case the change is effective in all major modes except those that have their own overriding local definitions for the same key. Or you can change the current buffer's local map, which affects all buffers using the same major mode. @menu * Interactive Rebinding:: Changing Key Bindings Interactively * Programmatic Rebinding:: Changing Key Bindings Programmatically * Key Bindings Using Strings:: Using Strings for Changing Key Bindings @end menu @node Interactive Rebinding @subsubsection Changing Key Bindings Interactively @findex global-set-key @findex local-set-key @findex local-unset-key @table @kbd @item M-x global-set-key @key{RET} @var{key} @var{cmd} @key{RET} Defines @var{key} globally to run @var{cmd}. @item M-x local-set-key @key{RET} @var{keys} @var{cmd} @key{RET} Defines @var{key} locally (in the major mode now in effect) to run @var{cmd}. @item M-x local-unset-key @key{RET} @var{keys} @key{RET} Removes the local binding of @var{key}. @end table @var{cmd} is a symbol naming an interactively-callable function. When called interactively, @var{key} is the next complete key sequence that you type. When called as a function, @var{key} is a string, a vector of events, or a vector of key-description lists as described in the @code{define-key} function description. The binding goes in the current buffer's local map, which is shared with other buffers in the same major mode. The following example: @example M-x global-set-key @key{RET} C-f next-line @key{RET} @end example @noindent redefines @kbd{C-f} to move down a line. The fact that @var{cmd} is read second makes it serve as a kind of confirmation for @var{key}. These functions offer no way to specify a particular prefix keymap as the one to redefine in, but that is not necessary, as you can include prefixes in @var{key}. @var{key} is read by reading characters one by one until they amount to a complete key (that is, not a prefix key). Thus, if you type @kbd{C-f} for @var{key}, Emacs enters the minibuffer immediately to read @var{cmd}. But if you type @kbd{C-x}, another character is read; if that character is @kbd{4}, another character is read, and so on. For example,@refill @example M-x global-set-key @key{RET} C-x 4 $ spell-other-window @key{RET} @end example @noindent redefines @kbd{C-x 4 $} to run the (fictitious) command @code{spell-other-window}. @findex define-key @findex substitute-key-definition The most general way to modify a keymap is the function @code{define-key}, used in Lisp code (such as your init file). @code{define-key} takes three arguments: the keymap, the key to modify in it, and the new definition. @xref{Init File}, for an example. @code{substitute-key-definition} is used similarly; it takes three arguments, an old definition, a new definition, and a keymap, and redefines in that keymap all keys that were previously defined with the old definition to have the new definition instead. @node Programmatic Rebinding @subsubsection Changing Key Bindings Programmatically You can use the functions @code{global-set-key} and @code{define-key} to rebind keys under program control. @findex define-key @findex global-set-key @table @kbd @item @code{(global-set-key @var{keys} @var{cmd})} Defines @var{keys} globally to run @var{cmd}. @item @code{(define-key @var{keymap} @var{keys} @var{def})} Defines @var{keys} to run @var{def} in the keymap @var{keymap}. @end table @var{keymap} is a keymap object. @var{keys} is the sequence of keystrokes to bind. @var{def} is anything that can be a key's definition: @itemize @bullet @item @code{nil}, meaning key is undefined in this keymap @item A command, that is, a Lisp function suitable for interactive calling @item A string or key sequence vector, which is treated as a keyboard macro @item A keymap to define a prefix key @item A symbol so that when the key is looked up, the symbol stands for its function definition, which should at that time be one of the above, or another symbol whose function definition is used, and so on @item A cons, @code{(string . defn)}, meaning that @var{defn} is the definition (@var{defn} should be a valid definition in its own right) @item A cons, @code{(keymap . char)}, meaning use the definition of @var{char} in map @var{keymap} @end itemize For backward compatibility, XEmacs allows you to specify key sequences as strings. However, the preferred method is to use the representations of key sequences as vectors of keystrokes. @xref{Keystrokes}, for more information about the rules for constructing key sequences. Emacs allows you to abbreviate representations for key sequences in most places where there is no ambiguity. Here are some rules for abbreviation: @itemize @bullet @item The keysym by itself is equivalent to a list of just that keysym, i.e., @code{f1} is equivalent to @code{(f1)}. @item A keystroke by itself is equivalent to a vector containing just that keystroke, i.e., @code{(control a)} is equivalent to @code{[(control a)]}. @item You can use ASCII codes for keysyms that have them. i.e., @code{65} is equivalent to @code{A}. (This is not so much an abbreviation as an alternate representation.) @end itemize Here are some examples of programmatically binding keys: @example ;;; Bind @code{my-command} to @key{f1} (global-set-key 'f1 'my-command) ;;; Bind @code{my-command} to @kbd{Shift-f1} (global-set-key '(shift f1) 'my-command) ;;; Bind @code{my-command} to @kbd{C-c Shift-f1} (global-set-key '[(control c) (shift f1)] 'my-command) ;;; Bind @code{my-command} to the middle mouse button. (global-set-key 'button2 'my-command) ;;; Bind @code{my-command} to @kbd{@key{META} @key{CTL} @key{Right Mouse Button}} ;;; in the keymap that is in force when you are running @code{dired}. (define-key dired-mode-map '(meta control button3) 'my-command) @end example @comment ;; note that these next four lines are not synonymous: @comment ;; @comment (global-set-key '(meta control delete) 'my-command) @comment (global-set-key '(meta control backspace) 'my-command) @comment (global-set-key '(meta control h) 'my-command) @comment (global-set-key '(meta control H) 'my-command) @comment @comment ;; note that this binds two key sequences: ``control-j'' and ``linefeed''. @comment ;; @comment (global-set-key "\^J" 'my-command) @node Key Bindings Using Strings @subsubsection Using Strings for Changing Key Bindings For backward compatibility, you can still use strings to represent key sequences. Thus you can use commands like the following: @example ;;; Bind @code{end-of-line} to @kbd{C-f} (global-set-key "\C-f" 'end-of-line) @end example Note, however, that in some cases you may be binding more than one key sequence by using a single command. This situation can arise because in ASCII, @kbd{C-i} and @key{TAB} have the same representation. Therefore, when Emacs sees: @example (global-set-key "\C-i" 'end-of-line) @end example it is unclear whether the user intended to bind @kbd{C-i} or @key{TAB}. The solution XEmacs adopts is to bind both of these key sequences. @cindex redefining keys After binding a command to two key sequences with a form like: @example (define-key global-map "\^X\^I" 'command-1) @end example it is possible to redefine only one of those sequences like so: @example (define-key global-map [(control x) (control i)] 'command-2) (define-key global-map [(control x) tab] 'command-3) @end example This applies only when running under a window system. If you are talking to Emacs through an ASCII-only channel, you do not get any of these features. Here is a table of pairs of key sequences that behave in a similar fashion: @example control h backspace control l clear control i tab control m return control j linefeed control [ escape control @@ control space @end example @node Disabling @subsection Disabling Commands @cindex disabled command Disabling a command marks it as requiring confirmation before it can be executed. The purpose of disabling a command is to prevent beginning users from executing it by accident and being confused. The direct mechanism for disabling a command is to have a non-@code{nil} @code{disabled} property on the Lisp symbol for the command. These properties are normally set by the user's init file with Lisp expressions such as: @example (put 'delete-region 'disabled t) @end example @xref{Init File}. If the value of the @code{disabled} property is a string, that string is included in the message printed when the command is used: @example (put 'delete-region 'disabled "Text deleted this way cannot be yanked back!\n") @end example @findex disable-command @findex enable-command You can disable a command either by editing the init file directly or with the command @kbd{M-x disable-command}, which edits the init file for you. @xref{Init File}. When you attempt to invoke a disabled command interactively in Emacs, a window is displayed containing the command's name, its documentation, and some instructions on what to do next; then Emacs asks for input saying whether to execute the command as requested, enable it and execute, or cancel it. If you decide to enable the command, you are asked whether to do this permanently or just for the current session. Enabling permanently works by automatically editing your init file. You can use @kbd{M-x enable-command} at any time to enable any command permanently. Whether a command is disabled is independent of what key is used to invoke it; it also applies if the command is invoked using @kbd{M-x}. Disabling a command has no effect on calling it as a function from Lisp programs. @node Syntax @section The Syntax Table @cindex syntax table All the Emacs commands which parse words or balance parentheses are controlled by the @dfn{syntax table}. The syntax table specifies which characters are opening delimiters, which are parts of words, which are string quotes, and so on. Actually, each major mode has its own syntax table (though sometimes related major modes use the same one) which it installs in each buffer that uses that major mode. The syntax table installed in the current buffer is the one that all commands use, so we call it ``the'' syntax table. A syntax table is a Lisp object, a vector of length 256 whose elements are numbers. @menu * Entry: Syntax Entry. What the syntax table records for each character. * Change: Syntax Change. How to change the information. @end menu @node Syntax Entry @subsection Information About Each Character The syntax table entry for a character is a number that encodes six pieces of information: @itemize @bullet @item The syntactic class of the character, represented as a small integer @item The matching delimiter, for delimiter characters only (the matching delimiter of @samp{(} is @samp{)}, and vice versa) @item A flag saying whether the character is the first character of a two-character comment starting sequence @item A flag saying whether the character is the second character of a two-character comment starting sequence @item A flag saying whether the character is the first character of a two-character comment ending sequence @item A flag saying whether the character is the second character of a two-character comment ending sequence @end itemize The syntactic classes are stored internally as small integers, but are usually described to or by the user with characters. For example, @samp{(} is used to specify the syntactic class of opening delimiters. Here is a table of syntactic classes, with the characters that specify them. @table @samp @item @w{-} The class of whitespace characters. Please don't use the formerly advertised @w{ }, which is not supported by GNU Emacs. @item w The class of word-constituent characters. @item _ The class of characters that are part of symbol names but not words. This class is represented by @samp{_} because the character @samp{_} has this class in both C and Lisp. @item . The class of punctuation characters that do not fit into any other special class. @item ( The class of opening delimiters. @item ) The class of closing delimiters. @item ' The class of expression-adhering characters. These characters are part of a symbol if found within or adjacent to one, and are part of a following expression if immediately preceding one, but are like whitespace if surrounded by whitespace. @item " The class of string-quote characters. They match each other in pairs, and the characters within the pair all lose their syntactic significance except for the @samp{\} and @samp{/} classes of escape characters, which can be used to include a string-quote inside the string. @item $ The class of self-matching delimiters. This is intended for @TeX{}'s @samp{$}, which is used both to enter and leave math mode. Thus, a pair of matching @samp{$} characters surround each piece of math mode @TeX{} input. A pair of adjacent @samp{$} characters act like a single one for purposes of matching. @item / The class of escape characters that always just deny the following character its special syntactic significance. The character after one of these escapes is always treated as alphabetic. @item \ The class of C-style escape characters. In practice, these are treated just like @samp{/}-class characters, because the extra possibilities for C escapes (such as being followed by digits) have no effect on where the containing expression ends. @item < The class of comment-starting characters. Only single-character comment starters (such as @samp{;} in Lisp mode) are represented this way. @item > The class of comment-ending characters. Newline has this syntax in Lisp mode. @end table @vindex parse-sexp-ignore-comments The characters flagged as part of two-character comment delimiters can have other syntactic functions most of the time. For example, @samp{/} and @samp{*} in C code, when found separately, have nothing to do with comments. The comment-delimiter significance overrides when the pair of characters occur together in the proper order. Only the list and sexp commands use the syntax table to find comments; the commands specifically for comments have other variables that tell them where to find comments. Moreover, the list and sexp commands notice comments only if @code{parse-sexp-ignore-comments} is non-@code{nil}. This variable is set to @code{nil} in modes where comment-terminator sequences are liable to appear where there is no comment, for example, in Lisp mode where the comment terminator is a newline but not every newline ends a comment. @node Syntax Change @subsection Altering Syntax Information It is possible to alter a character's syntax table entry by storing a new number in the appropriate element of the syntax table, but it would be hard to determine what number to use. Emacs therefore provides a command that allows you to specify the syntactic properties of a character in a convenient way. @findex modify-syntax-entry @kbd{M-x modify-syntax-entry} is the command to change a character's syntax. It can be used interactively and is also used by major modes to initialize their own syntax tables. Its first argument is the character to change. The second argument is a string that specifies the new syntax. When called from Lisp code, there is a third, optional argument, which specifies the syntax table in which to make the change. If not supplied, or if this command is called interactively, the third argument defaults to the current buffer's syntax table. @enumerate @item The first character in the string specifies the syntactic class. It is one of the characters in the previous table (@pxref{Syntax Entry}). @item The second character is the matching delimiter. For a character that is not an opening or closing delimiter, this should be a space, and may be omitted if no following characters are needed. @item The remaining characters are flags. The flag characters allowed are: @table @samp @item 1 Flag this character as the first of a two-character comment starting sequence. @item 2 Flag this character as the second of a two-character comment starting sequence. @item 3 Flag this character as the first of a two-character comment ending sequence. @item 4 Flag this character as the second of a two-character comment ending sequence. @end table @end enumerate @kindex C-h s @findex describe-syntax Use @kbd{C-h s} (@code{describe-syntax}) to display a description of the contents of the current syntax table. The description of each character includes both the string you have to pass to @code{modify-syntax-entry} to set up that character's current syntax, and some English to explain that string if necessary. @node Init File @section The Init File @cindex init file @cindex Emacs initialization file @cindex key rebinding, permanent @cindex rebinding keys, permanently When you start Emacs, it normally loads either @file{.xemacs/init.el} or the file @file{.emacs} (whichever comes first) in your home directory. This file, if it exists, should contain Lisp code. It is called your initialization file or @dfn{init file}. Use the command line switch @samp{-q} to tell Emacs whether to load an init file (@pxref{Entering Emacs}). Use the command line switch @samp{-user-init-file} (@pxref{Command Switches}) to tell Emacs to load a different file instead of @file{~/.xemacs/init.el}/@file{~/.emacs}. When the init file is read, the variable @code{user-init-file} says which init file was loaded. At some sites there is a @dfn{default init file}, which is the library named @file{default.el}, found via the standard search path for libraries. The Emacs distribution contains no such library; your site may create one for local customizations. If this library exists, it is loaded whenever you start Emacs. But your init file, if any, is loaded first; if it sets @code{inhibit-default-init} non-@code{nil}, then @file{default} is not loaded. If you have a large amount of code in your init file, you should byte-compile it to @file{~/.xemacs/init.elc} or @file{~/.emacs.elc}. @menu * Init Syntax:: Syntax of constants in Emacs Lisp. * Init Examples:: How to do some things with an init file. * Terminal Init:: Each terminal type can have an init file. @end menu @node Init Syntax @subsection Init File Syntax The init file contains one or more Lisp function call expressions. Each consists of a function name followed by arguments, all surrounded by parentheses. For example, @code{(setq fill-column 60)} represents a call to the function @code{setq} which is used to set the variable @code{fill-column} (@pxref{Filling}) to 60. The second argument to @code{setq} is an expression for the new value of the variable. This can be a constant, a variable, or a function call expression. In the init file, constants are used most of the time. They can be: @table @asis @item Numbers Integers are written in decimal, with an optional initial minus sign. If a sequence of digits is followed by a period and another sequence of digits, it is interpreted as a floating point number. The number prefixes @samp{#b}, @samp{#o}, and @samp{#x} are supported to represent numbers in binary, octal, and hexadecimal notation (or radix). @item Strings Lisp string syntax is the same as C string syntax with a few extra features. Use a double-quote character to begin and end a string constant. Newlines and special characters may be present literally in strings. They can also be represented as backslash sequences: @samp{\n} for newline, @samp{\b} for backspace, @samp{\r} for return, @samp{\t} for tab, @samp{\f} for formfeed (control-l), @samp{\e} for escape, @samp{\\} for a backslash, @samp{\"} for a double-quote, or @samp{\@var{ooo}} for the character whose octal code is @var{ooo}. Backslash and double-quote are the only characters for which backslash sequences are mandatory. You can use @samp{\C-} as a prefix for a control character, as in @samp{\C-s} for ASCII Control-S, and @samp{\M-} as a prefix for a Meta character, as in @samp{\M-a} for Meta-A or @samp{\M-\C-a} for Control-Meta-A.@refill @item Characters Lisp character constant syntax consists of a @samp{?} followed by either a character or an escape sequence starting with @samp{\}. Examples: @code{?x}, @code{?\n}, @code{?\"}, @code{?\)}. Note that strings and characters are not interchangeable in Lisp; some contexts require one and some contexts require the other. @item True @code{t} stands for `true'. @item False @code{nil} stands for `false'. @item Other Lisp objects Write a single-quote (') followed by the Lisp object you want. @end table @node Init Examples @subsection Init File Examples Here are some examples of doing certain commonly desired things with Lisp expressions: @itemize @bullet @item Make @key{TAB} in C mode just insert a tab if point is in the middle of a line. @example (setq c-tab-always-indent nil) @end example Here we have a variable whose value is normally @code{t} for `true' and the alternative is @code{nil} for `false'. @item Make searches case sensitive by default (in all buffers that do not override this). @example (setq-default case-fold-search nil) @end example This sets the default value, which is effective in all buffers that do not have local values for the variable. Setting @code{case-fold-search} with @code{setq} affects only the current buffer's local value, which is probably not what you want to do in an init file. @item Make Text mode the default mode for new buffers. @example (setq default-major-mode 'text-mode) @end example Note that @code{text-mode} is used because it is the command for entering the mode we want. A single-quote is written before it to make a symbol constant; otherwise, @code{text-mode} would be treated as a variable name. @item Turn on Auto Fill mode automatically in Text mode and related modes. @example (setq text-mode-hook '(lambda () (auto-fill-mode 1))) @end example Here we have a variable whose value should be a Lisp function. The function we supply is a list starting with @code{lambda}, and a single quote is written in front of it to make it (for the purpose of this @code{setq}) a list constant rather than an expression. Lisp functions are not explained here; for mode hooks it is enough to know that @code{(auto-fill-mode 1)} is an expression that will be executed when Text mode is entered. You could replace it with any other expression that you like, or with several expressions in a row. @example (setq text-mode-hook 'turn-on-auto-fill) @end example This is another way to accomplish the same result. @code{turn-on-auto-fill} is a symbol whose function definition is @code{(lambda () (auto-fill-mode 1))}. @item Load the installed Lisp library named @file{foo} (actually a file @file{foo.elc} or @file{foo.el} in a standard Emacs directory). @example (load "foo") @end example When the argument to @code{load} is a relative pathname, not starting with @samp{/} or @samp{~}, @code{load} searches the directories in @code{load-path} (@pxref{Loading}). @item Load the compiled Lisp file @file{foo.elc} from your home directory. @example (load "~/foo.elc") @end example Here an absolute file name is used, so no searching is done. @item Rebind the key @kbd{C-x l} to run the function @code{make-symbolic-link}. @example (global-set-key "\C-xl" 'make-symbolic-link) @end example or @example (define-key global-map "\C-xl" 'make-symbolic-link) @end example Note once again the single-quote used to refer to the symbol @code{make-symbolic-link} instead of its value as a variable. @item Do the same thing for C mode only. @example (define-key c-mode-map "\C-xl" 'make-symbolic-link) @end example @item Bind the function key @key{F1} to a command in C mode. Note that the names of function keys must be lower case. @example (define-key c-mode-map 'f1 'make-symbolic-link) @end example @item Bind the shifted version of @key{F1} to a command. @example (define-key c-mode-map '(shift f1) 'make-symbolic-link) @end example @item Redefine all keys which now run @code{next-line} in Fundamental mode to run @code{forward-line} instead. @example (substitute-key-definition 'next-line 'forward-line global-map) @end example @item Make @kbd{C-x C-v} undefined. @example (global-unset-key "\C-x\C-v") @end example One reason to undefine a key is so that you can make it a prefix. Simply defining @kbd{C-x C-v @var{anything}} would make @kbd{C-x C-v} a prefix, but @kbd{C-x C-v} must be freed of any non-prefix definition first. @item Make @samp{$} have the syntax of punctuation in Text mode. Note the use of a character constant for @samp{$}. @example (modify-syntax-entry ?\$ "." text-mode-syntax-table) @end example @item Enable the use of the command @code{eval-expression} without confirmation. @example (put 'eval-expression 'disabled nil) @end example @end itemize @node Terminal Init @subsection Terminal-Specific Initialization Each terminal type can have a Lisp library to be loaded into Emacs when it is run on that type of terminal. For a terminal type named @var{termtype}, the library is called @file{term/@var{termtype}} and it is found by searching the directories @code{load-path} as usual and trying the suffixes @samp{.elc} and @samp{.el}. Normally it appears in the subdirectory @file{term} of the directory where most Emacs libraries are kept.@refill The usual purpose of the terminal-specific library is to define the escape sequences used by the terminal's function keys using the library @file{keypad.el}. See the file @file{term/vt100.el} for an example of how this is done.@refill When the terminal type contains a hyphen, only the part of the name before the first hyphen is significant in choosing the library name. Thus, terminal types @samp{aaa-48} and @samp{aaa-30-rv} both use the library @file{term/aaa}. The code in the library can use @code{(getenv "TERM")} to find the full terminal type name.@refill @vindex term-file-prefix The library's name is constructed by concatenating the value of the variable @code{term-file-prefix} and the terminal type. Your init file can prevent the loading of the terminal-specific library by setting @code{term-file-prefix} to @code{nil}. @xref{Init File}. @vindex term-setup-hook The value of the variable @code{term-setup-hook}, if not @code{nil}, is called as a function of no arguments at the end of Emacs initialization, after both your init file and any terminal-specific library have been read. @xref{Init File}. You can set the value in the init file to override part of any of the terminal-specific libraries and to define initializations for terminals that do not have a library.@refill @node Audible Bell @section Changing the Bell Sound @cindex audible bell, changing @cindex bell, changing @vindex sound-alist @findex load-default-sounds @findex play-sound You can now change how the audible bell sounds using the variable @code{sound-alist}. @code{sound-alist}'s value is an list associating symbols with, among other things, strings of audio-data. When @code{ding} is called with one of the symbols, the associated sound data is played instead of the standard beep. This only works if you are logged in on the console of a machine with audio hardware. To listen to a sound of the provided type, call the function @code{play-sound} with the argument @var{sound}. You can also set the volume of the sound with the optional argument @var{volume}.@refill @cindex ding Each element of @code{sound-alist} is a list describing a sound. The first element of the list is the name of the sound being defined. Subsequent elements of the list are alternating keyword/value pairs: @table @code @item sound A string of raw sound data, or the name of another sound to play. The symbol @code{t} here means use the default X beep. @item volume An integer from 0-100, defaulting to @code{bell-volume}. @item pitch If using the default X beep, the pitch (Hz) to generate. @item duration If using the default X beep, the duration (milliseconds). @end table For compatibility, elements of `sound-alist' may also be of the form: @example ( @var{sound-name} . @var{} ) ( @var{sound-name} @var{} @var{} ) @end example You should probably add things to this list by calling the function @code{load-sound-file}. Note that you can only play audio data if running on the console screen of a machine with audio hardware which emacs understands, which at this time means a Sun SparcStation, SGI, or HP9000s700. Also note that the pitch, duration, and volume options are available everywhere, but most X servers ignore the `pitch' option. @vindex bell-volume The variable @code{bell-volume} should be an integer from 0 to 100, with 100 being loudest, which controls how loud the sounds emacs makes should be. Elements of the @code{sound-alist} may override this value. This variable applies to the standard X bell sound as well as sound files. If the symbol @code{t} is in place of a sound-string, Emacs uses the default X beep. This allows you to define beep-types of different volumes even when not running on the console. @findex load-sound-file You can add things to this list by calling the function @code{load-sound-file}, which reads in an audio-file and adds its data to the sound-alist. You can specify the sound with the @var{sound-name} argument and the file into which the sounds are loaded with the @var{filename} argument. The optional @var{volume} argument sets the volume. @code{load-sound-file (@var{filename sound-name} &optional @var{volume})} To load and install some sound files as beep-types, use the function @code{load-default-sounds} (note that this only works if you are on display 0 of a machine with audio hardware). The following beep-types are used by Emacs itself. Other Lisp packages may use other beep types, but these are the ones that the C kernel of Emacs uses. @table @code @item auto-save-error An auto-save does not succeed @item command-error The Emacs command loop catches an error @item undefined-key You type a key that is undefined @item undefined-click You use an undefined mouse-click combination @item no-completion Completion was not possible @item y-or-n-p You type something other than the required @code{y} or @code{n} @item yes-or-no-p You type something other than @code{yes} or @code{no} @end table @comment node-name, next, previous, up @node Faces @section Faces XEmacs has objects called extents and faces. An @dfn{extent} is a region of text and a @dfn{face} is a collection of textual attributes, such as fonts and colors. Every extent is displayed in some face; therefore, changing the properties of a face immediately updates the display of all associated extents. Faces can be frame-local: you can have a region of text that displays with completely different attributes when its buffer is viewed from a different X window. The display attributes of faces may be specified either in Lisp or through the X resource manager. @subsection Customizing Faces You can change the face of an extent with the functions in this section. All the functions prompt for a @var{face} as an argument; use completion for a list of possible values. @table @kbd @item M-x invert-face Swap the foreground and background colors of the given @var{face}. @item M-x make-face-bold Make the font of the given @var{face} bold. When called from a program, returns @code{nil} if this is not possible. @item M-x make-face-bold-italic Make the font of the given @var{face} bold italic. When called from a program, returns @code{nil} if not possible. @item M-x make-face-italic Make the font of the given @var{face} italic. When called from a program, returns @code{nil} if not possible. @item M-x make-face-unbold Make the font of the given @var{face} non-bold. When called from a program, returns @code{nil} if not possible. @item M-x make-face-unitalic Make the font of the given @var{face} non-italic. When called from a program, returns @code{nil} if not possible. @item M-x make-face-larger Make the font of the given @var{face} a little larger. When called from a program, returns @code{nil} if not possible. @item M-x make-face-smaller Make the font of the given @var{face} a little smaller. When called from a program, returns @code{nil} if not possible. @item M-x set-face-background Change the background color of the given @var{face}. @item M-x set-face-background-pixmap Change the background pixmap of the given @var{face}. @item M-x set-face-font Change the font of the given @var{face}. @item M-x set-face-foreground Change the foreground color of the given @var{face}. @item M-x set-face-underline-p Change whether the given @var{face} is underlined. @end table @findex make-face-larger @findex make-face-smaller @findex invert-face You can exchange the foreground and background color of the selected @var{face} with the function @code{invert-face}. If the face does not specify both foreground and background, then its foreground and background are set to the background and foreground of the default face. When calling this from a program, you can supply the optional argument @var{frame} to specify which frame is affected; otherwise, all frames are affected. @findex make-face-bold @findex make-face-bold-italic @findex make-face-italic @findex make-face-unbold @findex make-face-unitalic @vindex face-frob-from-locale-first The work of @code{make-face-bold}, @code{make-face-bold-italic}, @code{make-face-italic}, @code{make-face-unbold}, @code{make-face-unitalic} functions is affected by @code{face-frob-from-locale-first} variable. If it is @code{nil}, those functions first try to manipulate device specific data like X font names to obtain the desired font face specification. This may be unsuitable in environments using different font face specifications for different frames, non-Mule environments in particular. If the variable is non-@code{nil}, those functions first try to figure out whether the face font is the same as one of predefined faces: @code{default}, @code{bold}, @code{italic}, @code{bold-italic}. If it is the same, then the new face font specification is set to be the same as that of a corresponding predefined face. Thus if the predefined face is set up properly for different frames, the same will hold for the face being changed by the functions. This is the behavior one might desire in non-Mule environments mentioned above: face being changed still looks right in all frames. How predefined faces might be set up for different frames in such an environments is described in @ref{Face Resources}. @findex set-face-background You can set the background color of the specified @var{face} with the function @code{set-face-background}. The argument @code{color} should be a string, the name of a color. When called from a program, if the optional @var{frame} argument is provided, the face is changed only in that frame; otherwise, it is changed in all frames. @findex set-face-background-pixmap You can set the background pixmap of the specified @var{face} with the function @code{set-face-background-pixmap}. The pixmap argument @var{name} should be a string, the name of a file of pixmap data. The directories listed in the @code{x-bitmap-file-path} variable are searched. The bitmap may also be a list of the form @code{(@var{width height data})}, where @var{width} and @var{height} are the size in pixels, and @var{data} is a string containing the raw bits of the bitmap. If the optional @var{frame} argument is provided, the face is changed only in that frame; otherwise, it is changed in all frames. The variable @code{x-bitmap-file-path} takes as a value a list of the directories in which X bitmap files may be found. If the value is @code{nil}, the list is initialized from the @code{*bitmapFilePath} resource. If the environment variable @b{XBMLANGPATH} is set, then it is consulted before the @code{x-bitmap-file-path} variable. @findex set-face-font You can set the font of the specified @var{face} with the function @code{set-face-font}. The @var{font} argument should be a string, the name of a font. When called from a program, if the optional @var{frame} argument is provided, the face is changed only in that frame; otherwise, it is changed in all frames. @findex set-face-foreground You can set the foreground color of the specified @var{face} with the function @code{set-face-foreground}. The argument @var{color} should be a string, the name of a color. If the optional @var{frame} argument is provided, the face is changed only in that frame; otherwise, it is changed in all frames. @findex set-face-underline-p You can set underline the specified @var{face} with the function @code{set-face-underline-p}. The argument @var{underline-p} can be used to make underlining an attribute of the face or not. If the optional @var{frame} argument is provided, the face is changed only in that frame; otherwise, it is changed in all frames. @node Frame Components @section Frame Components You can control the presence and position of most frame components, such as the menubar, toolbars, and gutters. This section is not written yet. Try the Lisp Reference Manual: @ref{Menubar,,,lispref,}, @ref{Toolbar Intro,,,lispref,}, and @ref{Gutter Intro,,,lispref,}. @node X Resources @section X Resources @cindex X resources @findex x-create-frame Historically, XEmacs has used the X resource application class @samp{Emacs} for its resources. Unfortunately, GNU Emacs uses the same application class, and resources are not compatible between the two Emacsen. This sharing of the application class often leads to trouble if you want to run both variants. Starting with XEmacs 21, XEmacs uses the class @samp{XEmacs} if it finds any XEmacs resources in the resource database when the X connection is initialized. Otherwise, it will use the class @samp{Emacs} for backwards compatibility. The variable @var{x-emacs-application-class} may be consulted to determine the application class being used. The examples in this section assume the application class is @samp{Emacs}. The Emacs resources are generally set per-frame. Each Emacs frame can have its own name or the same name as another, depending on the name passed to the @code{make-frame} function. You can specify resources for all frames with the syntax: @example Emacs*parameter: value @end example @noindent or @example Emacs*EmacsFrame.parameter:value @end example @noindent You can specify resources for a particular frame with the syntax: @example Emacs*FRAME-NAME.parameter: value @end example @noindent @menu * Geometry Resources:: Controlling the size and position of frames. * Iconic Resources:: Controlling whether frames come up iconic. * Resource List:: List of resources settable on a frame or device. * Face Resources:: Controlling faces using resources. * Widgets:: The widget hierarchy for XEmacs. * Menubar Resources:: Specifying resources for the menubar. @end menu @node Geometry Resources @subsection Geometry Resources To make the default size of all Emacs frames be 80 columns by 55 lines, do this: @example Emacs*EmacsFrame.geometry: 80x55 @end example @noindent To set the geometry of a particular frame named @samp{fred}, do this: @example Emacs*fred.geometry: 80x55 @end example @noindent Important! Do not use the following syntax: @example Emacs*geometry: 80x55 @end example @noindent You should never use @code{*geometry} with any X application. It does not say "make the geometry of Emacs be 80 columns by 55 lines." It really says, "make Emacs and all subwindows thereof be 80x55 in whatever units they care to measure in." In particular, that is both telling the Emacs text pane to be 80x55 in characters, and telling the menubar pane to be 80x55 pixels, which is surely not what you want. As a special case, this geometry specification also works (and sets the default size of all Emacs frames to 80 columns by 55 lines): @example Emacs.geometry: 80x55 @end example @noindent since that is the syntax used with most other applications (since most other applications have only one top-level window, unlike Emacs). In general, however, the top-level shell (the unmapped ApplicationShell widget named @samp{Emacs} that is the parent of the shell widgets that actually manage the individual frames) does not have any interesting resources on it, and you should set the resources on the frames instead. The @code{-geometry} command-line argument sets only the geometry of the initial frame created by Emacs. A more complete explanation of geometry-handling is @itemize @bullet @item The @code{-geometry} command-line option sets the @code{Emacs.geometry} resource, that is, the geometry of the ApplicationShell. @item For the first frame created, the size of the frame is taken from the ApplicationShell if it is specified, otherwise from the geometry of the frame. @item For subsequent frames, the order is reversed: First the frame, and then the ApplicationShell. @item For the first frame created, the position of the frame is taken from the ApplicationShell (@code{Emacs.geometry}) if it is specified, otherwise from the geometry of the frame. @item For subsequent frames, the position is taken only from the frame, and never from the ApplicationShell. @end itemize This is rather complicated, but it does seem to provide the most intuitive behavior with respect to the default sizes and positions of frames created in various ways. @node Iconic Resources @subsection Iconic Resources Analogous to @code{-geometry}, the @code{-iconic} command-line option sets the iconic flag of the ApplicationShell (@code{Emacs.iconic}) and always applies to the first frame created regardless of its name. However, it is possible to set the iconic flag on particular frames (by name) by using the @code{Emacs*FRAME-NAME.iconic} resource. @node Resource List @subsection Resource List Emacs frames accept the following resources: @table @asis @item @code{geometry} (class @code{Geometry}): string Initial geometry for the frame. @xref{Geometry Resources}, for a complete discussion of how this works. @item @code{iconic} (class @code{Iconic}): boolean Whether this frame should appear in the iconified state. @item @code{internalBorderWidth} (class @code{InternalBorderWidth}): int How many blank pixels to leave between the text and the edge of the window. @item @code{interline} (class @code{Interline}): int How many pixels to leave between each line (may not be implemented). @item @code{menubar} (class @code{Menubar}): boolean Whether newly-created frames should initially have a menubar. Set to true by default. @item @code{initiallyUnmapped} (class @code{InitiallyUnmapped}): boolean Whether XEmacs should leave the initial frame unmapped when it starts up. This is useful if you are starting XEmacs as a server (e.g. in conjunction with gnuserv or the external client widget). You can also control this with the @code{-unmapped} command-line option. @item @code{barCursor} (class @code{BarColor}): boolean Whether the cursor should be displayed as a bar, or the traditional box. @item @code{cursorColor} (class @code{CursorColor}): color-name The color of the text cursor. @item @code{scrollBarWidth} (class @code{ScrollBarWidth}): integer How wide the vertical scrollbars should be, in pixels; 0 means no vertical scrollbars. You can also use a resource specification of the form @code{*scrollbar.width}, or the usual toolkit scrollbar resources: @code{*XmScrollBar.width} (Motif), @code{*XlwScrollBar.width} (Lucid), or @code{*Scrollbar.thickness} (Athena). We don't recommend that you use the toolkit resources, though, because they're dependent on how exactly your particular build of XEmacs was configured. @item @code{scrollBarHeight} (class @code{ScrollBarHeight}): integer How high the horizontal scrollbars should be, in pixels; 0 means no horizontal scrollbars. You can also use a resource specification of the form @code{*scrollbar.height}, or the usual toolkit scrollbar resources: @code{*XmScrollBar.height} (Motif), @code{*XlwScrollBar.height} (Lucid), or @code{*Scrollbar.thickness} (Athena). We don't recommend that you use the toolkit resources, though, because they're dependent on how exactly your particular build of XEmacs was configured. @item @code{scrollBarPlacement} (class @code{ScrollBarPlacement}): string Where the horizontal and vertical scrollbars should be positioned. This should be one of the four strings @samp{BOTTOM_LEFT}, @samp{BOTTOM_RIGHT}, @samp{TOP_LEFT}, and @samp{TOP_RIGHT}. Default is @samp{BOTTOM_RIGHT} for the Motif and Lucid scrollbars and @samp{BOTTOM_LEFT} for the Athena scrollbars. @item @code{topToolBarHeight} (class @code{TopToolBarHeight}): integer @itemx @code{bottomToolBarHeight} (class @code{BottomToolBarHeight}): integer @itemx @code{leftToolBarWidth} (class @code{LeftToolBarWidth}): integer @itemx @code{rightToolBarWidth} (class @code{RightToolBarWidth}): integer Height and width of the four possible toolbars. @item @code{topToolBarShadowColor} (class @code{TopToolBarShadowColor}): color-name @itemx @code{bottomToolBarShadowColor} (class @code{BottomToolBarShadowColor}): color-name Color of the top and bottom shadows for the toolbars. NOTE: These resources do @emph{not} have anything to do with the top and bottom toolbars (i.e. the toolbars at the top and bottom of the frame)! Rather, they affect the top and bottom shadows around the edges of all four kinds of toolbars. @item @code{topToolBarShadowPixmap} (class @code{TopToolBarShadowPixmap}): pixmap-name @itemx @code{bottomToolBarShadowPixmap} (class @code{BottomToolBarShadowPixmap}): pixmap-name Pixmap of the top and bottom shadows for the toolbars. If set, these resources override the corresponding color resources. NOTE: These resources do @emph{not} have anything to do with the top and bottom toolbars (i.e. the toolbars at the top and bottom of the frame)! Rather, they affect the top and bottom shadows around the edges of all four kinds of toolbars. @item @code{toolBarShadowThickness} (class @code{ToolBarShadowThickness}): integer Thickness of the shadows around the toolbars, in pixels. @item @code{visualBell} (class @code{VisualBell}): boolean Whether XEmacs should flash the screen rather than making an audible beep. @item @code{bellVolume} (class @code{BellVolume}): integer Volume of the audible beep. @item @code{useBackingStore} (class @code{UseBackingStore}): boolean Whether XEmacs should set the backing-store attribute of the X windows it creates. This increases the memory usage of the X server but decreases the amount of X traffic necessary to update the screen, and is useful when the connection to the X server goes over a low-bandwidth line such as a modem connection. @end table Emacs devices accept the following resources: @table @asis @item @code{textPointer} (class @code{Cursor}): cursor-name The cursor to use when the mouse is over text. This resource is used to initialize the variable @code{x-pointer-shape}. @item @code{selectionPointer} (class @code{Cursor}): cursor-name The cursor to use when the mouse is over a selectable text region (an extent with the @samp{highlight} property; for example, an Info cross-reference). This resource is used to initialize the variable @code{x-selection-pointer-shape}. @item @code{spacePointer} (class @code{Cursor}): cursor-name The cursor to use when the mouse is over a blank space in a buffer (that is, after the end of a line or after the end-of-file). This resource is used to initialize the variable @code{x-nontext-pointer-shape}. @item @code{modeLinePointer} (class @code{Cursor}): cursor-name The cursor to use when the mouse is over a modeline. This resource is used to initialize the variable @code{x-mode-pointer-shape}. @item @code{gcPointer} (class @code{Cursor}): cursor-name The cursor to display when a garbage-collection is in progress. This resource is used to initialize the variable @code{x-gc-pointer-shape}. @item @code{scrollbarPointer} (class @code{Cursor}): cursor-name The cursor to use when the mouse is over the scrollbar. This resource is used to initialize the variable @code{x-scrollbar-pointer-shape}. @item @code{pointerColor} (class @code{Foreground}): color-name @itemx @code{pointerBackground} (class @code{Background}): color-name The foreground and background colors of the mouse cursor. These resources are used to initialize the variables @code{x-pointer-foreground-color} and @code{x-pointer-background-color}. @end table @node Face Resources @subsection Face Resources The attributes of faces are also per-frame. They can be specified as: @example Emacs.FACE_NAME.parameter: value @end example @noindent or @example Emacs*FRAME_NAME.FACE_NAME.parameter: value @end example @noindent Faces accept the following resources: @table @asis @item @code{attributeFont} (class @code{AttributeFont}): font-name The font of this face. @item @code{attributeForeground} (class @code{AttributeForeground}): color-name @itemx @code{attributeBackground} (class @code{AttributeBackground}): color-name The foreground and background colors of this face. @item @code{attributeBackgroundPixmap} (class @code{AttributeBackgroundPixmap}): file-name The name of an @sc{xbm} file (or @sc{xpm} file, if your version of Emacs supports @sc{xpm}), to use as a background stipple. @item @code{attributeUnderline} (class @code{AttributeUnderline}): boolean Whether text in this face should be underlined. @end table All text is displayed in some face, defaulting to the face named @code{default}. To set the font of normal text, use @code{Emacs*default.attributeFont}. To set it in the frame named @code{fred}, use @code{Emacs*fred.default.attributeFont}. These are the names of the predefined faces: @table @code @item default Everything inherits from this. @item bold If this is not specified in the resource database, Emacs tries to find a bold version of the font of the default face. @item italic If this is not specified in the resource database, Emacs tries to find an italic version of the font of the default face. @item bold-italic If this is not specified in the resource database, Emacs tries to find a bold-italic version of the font of the default face. @item modeline This is the face that the modeline is displayed in. If not specified in the resource database, it is determined from the default face by reversing the foreground and background colors. @item highlight This is the face that highlighted extents (for example, Info cross-references and possible completions, when the mouse passes over them) are displayed in. @item left-margin @itemx right-margin These are the faces that the left and right annotation margins are displayed in. @item zmacs-region This is the face that mouse selections are displayed in. @item isearch This is the face that the matched text being searched for is displayed in. @item info-node This is the face of info menu items. If unspecified, it is copied from @code{bold-italic}. @item info-xref This is the face of info cross-references. If unspecified, it is copied from @code{bold}. (Note that, when the mouse passes over a cross-reference, the cross-reference's face is determined from a combination of the @code{info-xref} and @code{highlight} faces.) @end table Other packages might define their own faces; to see a list of all faces, use any of the interactive face-manipulation commands such as @code{set-face-font} and type @samp{?} when you are prompted for the name of a face. If the @code{bold}, @code{italic}, and @code{bold-italic} faces are not specified in the resource database, then XEmacs attempts to derive them from the font of the default face. It can only succeed at this if you have specified the default font using the XLFD (X Logical Font Description) format, which looks like @example *-courier-medium-r-*-*-*-120-*-*-*-*-*-* @end example @noindent If you use any of the other, less strict font name formats, some of which look like @example lucidasanstypewriter-12 fixed 9x13 @end example then XEmacs won't be able to guess the names of the bold and italic versions. All X fonts can be referred to via XLFD-style names, so you should use those forms. See the man pages for @samp{X(1)}, @samp{xlsfonts(1)}, and @samp{xfontsel(1)}. @node Widgets @subsection Widgets There are several structural widgets between the terminal EmacsFrame widget and the top level ApplicationShell; the exact names and types of these widgets change from release to release (for example, they changed between 19.8 and 19.9, 19.9 and 19.10, and 19.10 and 19.12) and are subject to further change in the future, so you should avoid mentioning them in your resource database. The above-mentioned syntaxes should be forward- compatible. As of 19.13, the exact widget hierarchy is as follows: @example INVOCATION-NAME "shell" "container" FRAME-NAME x-emacs-application-class "EmacsShell" "EmacsManager" "EmacsFrame" @end example where INVOCATION-NAME is the terminal component of the name of the XEmacs executable (usually @samp{xemacs}), and @samp{x-emacs-application-class} is generally @samp{Emacs}. @node Menubar Resources @subsection Menubar Resources As the menubar is implemented as a widget which is not a part of XEmacs proper, it does not use the face mechanism for specifying fonts and colors: It uses whatever resources are appropriate to the type of widget which is used to implement it. If Emacs was compiled to use only the Lucid Motif-lookalike menu widgets, then one way to specify the font of the menubar would be @example Emacs*menubar*font: *-courier-medium-r-*-*-*-120-*-*-*-*-*-* @end example If both the Lucid Motif-lookalike menu widgets and X Font Sets are configured to allow multilingual menubars, then one uses @example *menubar*FontSet: -*-helvetica-bold-r-*-*-*-120-*-*-*-*-iso8859-*, \ -*-*-*-*-*-*-*-120-*-jisx0208.1983-0 @end example That would specify fonts for a Japanese menubar. Specifying only one XLFD is acceptable; specifying more than one for a given registry (language) is also allowed. When X Font Sets are configured, some .font resources (eg, menubars) are ignored in favor of the corresponding .fontSet resources. If the Motif library is being used, then one would have to use @example Emacs*menubar*fontList: *-courier-medium-r-*-*-*-120-*-*-*-*-*-* @end example because the Motif library uses the @code{fontList} resource name instead of @code{font}, which has subtly different semantics. The same is true of the scrollbars: They accept whichever resources are appropriate for the toolkit in use. texi2html-1.82/test/xemacs_manual/display.texi0000644000175000017500000002637411264347115023404 0ustar flichtenheldflichtenheld @node Display, Search, Registers, Top @chapter Controlling the Display Since only part of a large buffer fits in the window, XEmacs tries to show the part that is likely to be interesting. The display control commands allow you to specify which part of the text you want to see. @table @kbd @item C-l Clear frame and redisplay, scrolling the selected window to center point vertically within it (@code{recenter}). @item C-v @itemx pgdn @itemx next Scroll forward (a windowful or a specified number of lines) (@code{scroll-up}). On most X keyboards, you can get this functionality using the key labelled @samp{Page Down}, which generates either @kbd{next} or @kbd{pgdn}. @item M-v @itemx pgup @itemx prior Scroll backward (@code{scroll-down}). On most X keyboards, you can get this functionality using the key labelled @samp{Page Up}, which generates either @kbd{prior} or @kbd{pgup}. @item @var{arg} C-l Scroll so point is on line @var{arg} (@code{recenter}). @item C-x < @itemx C-pgdn @itemx C-next Scroll text in current window to the left (@code{scroll-left}). @item C-x > @itemx C-pgup @itemx C-prior Scroll to the right (@code{scroll-right}). @item C-x $ Make deeply indented lines invisible (@code{set-selective-display}). @end table @menu * Scrolling:: Moving text up and down in a window. * Horizontal Scrolling:: Moving text left and right in a window. * Selective Display:: Hiding lines with lots of indentation. * Display Vars:: Information on variables for customizing display. @end menu @node Scrolling, Horizontal Scrolling, Display, Display @section Scrolling If a buffer contains text that is too large to fit entirely within the window that is displaying the buffer, XEmacs shows a contiguous section of the text. The section shown always contains point. @cindex scrolling @dfn{Scrolling} means moving text up or down in the window so that different parts of the text are visible. Scrolling forward means that text moves up, and new text appears at the bottom. Scrolling backward moves text down and new text appears at the top. Scrolling happens automatically if you move point past the bottom or top of the window. You can also explicitly request scrolling with the commands in this section. @ifinfo @table @kbd @item C-l Clear frame and redisplay, scrolling the selected window to center point vertically within it (@code{recenter}). @item C-v @itemx pgdn @itemx next Scroll forward (a windowful or a specified number of lines) (@code{scroll-up}). @item M-v @itemx pgup @itemx prior Scroll backward (@code{scroll-down}). @item @var{arg} C-l Scroll so point is on line @var{arg} (@code{recenter}). @end table @end ifinfo @kindex C-l @findex recenter The most basic scrolling command is @kbd{C-l} (@code{recenter}) with no argument. It clears the entire frame and redisplays all windows. In addition, it scrolls the selected window so that point is halfway down from the top of the window. @kindex C-v @kindex M-v @kindex pgup @kindex pgdn @kindex next @kindex prior @findex scroll-up @findex scroll-down The scrolling commands @kbd{C-v} and @kbd{M-v} let you move all the text in the window up or down a few lines. @kbd{C-v} (@code{scroll-up}) with an argument shows you that many more lines at the bottom of the window, moving the text and point up together as @kbd{C-l} might. @kbd{C-v} with a negative argument shows you more lines at the top of the window. @kbd{Meta-v} (@code{scroll-down}) is like @kbd{C-v}, but moves in the opposite direction.@refill @vindex next-screen-context-lines To read the buffer a windowful at a time, use @kbd{C-v} with no argument. @kbd{C-v} takes the last two lines at the bottom of the window and puts them at the top, followed by nearly a whole windowful of lines not previously visible. Point moves to the new top of the window if it was in the text scrolled off the top. @kbd{M-v} with no argument moves backward with similar overlap. The number of lines of overlap across a @kbd{C-v} or @kbd{M-v} is controlled by the variable @code{next-screen-context-lines}; by default, it is two. Another way to scroll is using @kbd{C-l} with a numeric argument. @kbd{C-l} does not clear the frame when given an argument; it only scrolls the selected window. With a positive argument @var{n}, @kbd{C-l} repositions text to put point @var{n} lines down from the top. An argument of zero puts point on the very top line. Point does not move with respect to the text; rather, the text and point move rigidly on the frame. @kbd{C-l} with a negative argument puts point that many lines from the bottom of the window. For example, @kbd{C-u - 1 C-l} puts point on the bottom line, and @kbd{C-u - 5 C-l} puts it five lines from the bottom. Just @kbd{C-u} as argument, as in @kbd{C-u C-l}, scrolls point to the center of the frame. @vindex scroll-step Scrolling happens automatically if point has moved out of the visible portion of the text when it is time to display. Usually scrolling is done to put point vertically centered within the window. However, if the variable @code{scroll-step} has a non-zero value, an attempt is made to scroll the buffer by that many lines; if that is enough to bring point back into visibility, that is what happens. Scrolling happens automatically if point has moved out of the visible portion of the text when it is time to display. Usually scrolling is done to put point vertically centered within the window. However, if the variable @code{scroll-step} has a non-zero value, an attempt is made to scroll the buffer by that many lines; if that is enough to bring point back into visibility, that is what happens. @vindex scroll-conservatively If you set @code{scroll-step} to a small value because you want to use arrow keys to scroll the screen without recentering, the redisplay preemption will likely make XEmacs keep recentering the screen when scrolling fast, regardless of @code{scroll-step}. To prevent this, set @code{scroll-conservatively} to a small value, which will have the result of overriding the redisplay preemption. @node Horizontal Scrolling,, Scrolling, Display @section Horizontal Scrolling @ifinfo @table @kbd @item C-x < Scroll text in current window to the left (@code{scroll-left}). @item C-x > Scroll to the right (@code{scroll-right}). @end table @end ifinfo @kindex C-x < @kindex C-x > @findex scroll-left @findex scroll-right @cindex horizontal scrolling The text in a window can also be scrolled horizontally. This means that each line of text is shifted sideways in the window, and one or more characters at the beginning of each line are not displayed at all. When a window has been scrolled horizontally in this way, text lines are truncated rather than continued (@pxref{Continuation Lines}), with a @samp{$} appearing in the first column when there is text truncated to the left, and in the last column when there is text truncated to the right. The command @kbd{C-x <} (@code{scroll-left}) scrolls the selected window to the left by @var{n} columns with argument @var{n}. With no argument, it scrolls by almost the full width of the window (two columns less, to be precise). @kbd{C-x >} (@code{scroll-right}) scrolls similarly to the right. The window cannot be scrolled any farther to the right once it is displaying normally (with each line starting at the window's left margin); attempting to do so has no effect. @node Selective Display, Display Vars, Display, Display @section Selective Display @findex set-selective-display @kindex C-x $ XEmacs can hide lines indented more than a certain number of columns (you specify how many columns). This allows you to get an overview of a part of a program. To hide lines, type @kbd{C-x $} (@code{set-selective-display}) with a numeric argument @var{n}. (@xref{Arguments}, for information on giving the argument.) Lines with at least @var{n} columns of indentation disappear from the screen. The only indication of their presence are three dots (@samp{@dots{}}), which appear at the end of each visible line that is followed by one or more invisible ones.@refill The invisible lines are still present in the buffer, and most editing commands see them as usual, so it is very easy to put point in the middle of invisible text. When this happens, the cursor appears at the end of the previous line, after the three dots. If point is at the end of the visible line, before the newline that ends it, the cursor appears before the three dots. The commands @kbd{C-n} and @kbd{C-p} move across the invisible lines as if they were not there. To make everything visible again, type @kbd{C-x $} with no argument. @node Display Vars,, Selective Display, Display @section Variables Controlling Display This section contains information for customization only. Beginning users should skip it. @vindex no-redraw-on-reenter When you reenter XEmacs after suspending, XEmacs normally clears the screen and redraws the entire display. On some terminals with more than one page of memory, it is possible to arrange the termcap entry so that the @samp{ti} and @samp{te} strings (output to the terminal when XEmacs is entered and exited, respectively) switch between pages of memory so as to use one page for XEmacs and another page for other output. In that case, you might want to set the variable @code{no-redraw-on-reenter} to non-@code{nil} so that XEmacs will assume, when resumed, that the screen page it is using still contains what XEmacs last wrote there. @vindex echo-keystrokes The variable @code{echo-keystrokes} controls the echoing of multi-character keys; its value is the number of seconds of pause required to cause echoing to start, or zero, meaning don't echo at all. @xref{Echo Area}. @vindex ctl-arrow If the variable @code{ctl-arrow} is @code{nil}, control characters in the buffer are displayed with octal escape sequences, all except newline and tab. If its value is @code{t}, then control characters will be printed with an up-arrow, for example @kbd{^A}. If its value is not @code{t} and not @code{nil}, then characters whose code is greater than 160 (that is, the space character (32) with its high bit set) will be assumed to be printable, and will be displayed without alteration. This is the default when running under X Windows, since XEmacs assumes an ISO/8859-1 character set (also known as ``Latin1''). The @code{ctl-arrow} variable may also be set to an integer, in which case all characters whose codes are greater than or equal to that value will be assumed to be printable. Altering the value of @code{ctl-arrow} makes it local to the current buffer; until that time, the default value is in effect. @xref{Locals}. @vindex tab-width Normally, a tab character in the buffer is displayed as whitespace which extends to the next display tab stop position, and display tab stops come at intervals equal to eight spaces. The number of spaces per tab is controlled by the variable @code{tab-width}, which is made local by changing it, just like @code{ctl-arrow}. Note that how the tab character in the buffer is displayed has nothing to do with the definition of @key{TAB} as a command. @vindex selective-display-ellipses If you set the variable @code{selective-display-ellipses} to @code{nil}, the three dots at the end of a line that precedes invisible lines do not appear. There is no visible indication of the invisible lines. This variable becomes local automatically when set. texi2html-1.82/test/xemacs_manual/regs.texi0000644000175000017500000002647211264347115022676 0ustar flichtenheldflichtenheld @node Registers, Display, Rectangles, Top @chapter Registers @cindex registers XEmacs @dfn{registers} are places in which you can save text or positions for later use. Once you save text or a rectangle in a register, you can copy it into the buffer once or many times; a position saved in a register is used by moving point to that position. Rectangles can also be copied into and out of registers (@pxref{Rectangles}). @findex view-register Each register has a name which is a single character. A register can store a piece of text, a rectangle, a position, a window configuration, or a file name, but only one thing at any given time. Whatever you store in a register remains there until you store something else in that register. To see what a register @var{r} contains, use @kbd{M-x view-register}. @table @kbd @item M-x view-register @key{RET} @var{r} Display a description of what register @var{r} contains. @end table @findex view-register @kbd{M-x view-register} reads a register name as an argument and then displays the contents of the specified register. @menu * Position: RegPos. Saving positions in registers. * Text: RegText. Saving text in registers. * Rectangle: RegRect. Saving rectangles in registers. * Configurations: RegConfig. Saving window configurations in registers. * Files: RegFiles. File names in registers. * Numbers: RegNumbers. Numbers in registers. * Bookmarks:: Bookmarks are like registers, but persistent. @end menu @node RegPos, RegText, Registers, Registers @section Saving Positions in Registers Saving a position records a place in a buffer so that you can move back there later. Moving to a saved position switches to that buffer and moves point to that place in it. @table @kbd @item C-x r @key{SPC} @var{r} Save position of point in register @var{r} (@code{point-to-register}). @item C-x r j @var{r} Jump to the position saved in register @var{r} (@code{jump-to-register}). @end table @kindex C-x r SPC @findex point-to-register To save the current position of point in a register, choose a name @var{r} and type @kbd{C-x r @key{SPC} @var{r}}. The register @var{r} retains the position thus saved until you store something else in that register. @kindex C-x r j @findex jump-to-register The command @kbd{C-x r j @var{r}} moves point to the position recorded in register @var{r}. The register is not affected; it continues to record the same location. You can jump to the same position using the same register as often as you want. If you use @kbd{C-x r j} to go to a saved position, but the buffer it was saved from has been killed, @kbd{C-x r j} tries to create the buffer again by visiting the same file. Of course, this works only for buffers that were visiting files. @node RegText, RegRect, RegPos, Registers @section Saving Text in Registers When you want to insert a copy of the same piece of text many times, it can be impractical to use the kill ring, since each subsequent kill moves the piece of text further down on the ring. It becomes hard to keep track of the argument needed to retrieve the same text with @kbd{C-y}. An alternative is to store the text in a register with @kbd{C-x r s} (@code{copy-to-register}) and then retrieve it with @kbd{C-x r i} (@code{insert-register}). @table @kbd @item C-x r s @var{r} Copy region into register @var{r} (@code{copy-to-register}). @item C-x r g @var{r} @itemx C-x r i @var{r} Insert text contents of register @var{r} (@code{insert-register}). @end table @kindex C-x r s @kindex C-x r g @kindex C-x r i @findex copy-to-register @findex insert-register @kbd{C-x r s @var{r}} stores a copy of the text of the region into the register named @var{r}. Given a numeric argument, @kbd{C-x r s @var{r}} deletes the text from the buffer as well. @kbd{C-x r i @var{r}} inserts the text from register @var{r} in the buffer. By default it leaves point before the text and places the mark after it. With a numeric argument (@kbd{C-u}), it puts point after the text and the mark before it. @node RegRect, RegConfig, RegText, Registers @section Saving Rectangles in Registers @cindex rectangle A register can contain a rectangle instead of lines of text. The rectangle is represented as a list of strings. @xref{Rectangles}, for basic information on rectangles and how to specify rectangles in a buffer. @table @kbd @findex copy-rectangle-to-register @kindex C-x r r @item C-x r r @var{r} Copy the region-rectangle into register @var{r} (@code{copy-rectangle-to-register}). With a numeric argument, delete it as well. @item C-x r g @var{r} @itemx C-x r i @var{r} Insert the rectangle stored in register @var{r} (if it contains a rectangle) (@code{insert-register}). @end table The @kbd{C-x r i @var{r}} command inserts linear text if the register contains that, or inserts a rectangle if the register contains one. See also the command @code{sort-columns}, which you can think of as sorting a rectangle. @xref{Sorting}. @node RegConfig, RegNumbers, RegRect, Registers @section Saving Window Configurations in Registers @findex window-configuration-to-register @findex frame-configuration-to-register @kindex C-x r w @c @kindex C-x r f You can save the window configuration of the selected frame in a register, or even the configuration of all windows in all frames, and restore the configuration later. @table @kbd @item C-x r w @var{r} Save the state of the selected frame's windows in register @var{r} (@code{window-configuration-to-register}). @c @item C-x r f @var{r} @item M-x frame-configuration-to-register @key{RET} @var{r} Save the state of all frames, including all their windows, in register @var{r} (@code{frame-configuration-to-register}). @end table Use @kbd{C-x r j @var{r}} to restore a window or frame configuration. This is the same command used to restore a cursor position. When you restore a frame configuration, any existing frames not included in the configuration become invisible. If you wish to delete these frames instead, use @kbd{C-u C-x r j @var{r}}. @node RegNumbers, RegFiles, RegConfig, Registers @section Keeping Numbers in Registers There are commands to store a number in a register, to insert the number in the buffer in decimal, and to increment it. These commands can be useful in keyboard macros (@pxref{Keyboard Macros}). @table @kbd @item C-u @var{number} C-x r n @var{reg} @kindex C-x r n @findex number-to-register Store @var{number} into register @var{reg} (@code{number-to-register}). @item C-u @var{number} C-x r + @var{reg} @kindex C-x r + @findex increment-register Increment the number in register @var{reg} by @var{number} (@code{increment-register}). @item C-x r g @var{reg} Insert the number from register @var{reg} into the buffer. @end table @kbd{C-x r g} is the same command used to insert any other sort of register contents into the buffer. @node RegFiles, Bookmarks, RegNumbers, Registers @section Keeping File Names in Registers If you visit certain file names frequently, you can visit them more conveniently if you put their names in registers. Here's the Lisp code used to put a file name in a register: @smallexample (set-register ?@var{r} '(file . @var{name})) @end smallexample @need 3000 @noindent For example, @smallexample (set-register ?z '(file . "/usr/src/xemacs/src/ChangeLog")) @end smallexample @noindent puts the file name shown in register @samp{z}. To visit the file whose name is in register @var{r}, type @kbd{C-x r j @var{r}}. (This is the same command used to jump to a position or restore a frame configuration.) @node Bookmarks, , RegFiles, Registers @section Bookmarks @cindex bookmarks @dfn{Bookmarks} are somewhat like registers in that they record positions you can jump to. Unlike registers, they have long names, and they persist automatically from one Emacs session to the next. The prototypical use of bookmarks is to record ``where you were reading'' in various files. Note: bookmark.el is distributed in edit-utils package. You need to install that to use bookmark facility (@pxref{Packages}). @table @kbd @item C-x r m @key{RET} Set the bookmark for the visited file, at point. @item C-x r m @var{bookmark} @key{RET} @findex bookmark-set Set the bookmark named @var{bookmark} at point (@code{bookmark-set}). @item C-x r b @var{bookmark} @key{RET} @findex bookmark-jump Jump to the bookmark named @var{bookmark} (@code{bookmark-jump}). @item C-x r l @findex list-bookmarks List all bookmarks (@code{list-bookmarks}). @item M-x bookmark-save @findex bookmark-save Save all the current bookmark values in the default bookmark file. @end table @kindex C-x r m @findex bookmark-set @kindex C-x r b @findex bookmark-jump The prototypical use for bookmarks is to record one current position in each of several files. So the command @kbd{C-x r m}, which sets a bookmark, uses the visited file name as the default for the bookmark name. If you name each bookmark after the file it points to, then you can conveniently revisit any of those files with @kbd{C-x r b}, and move to the position of the bookmark at the same time. @kindex C-x r l To display a list of all your bookmarks in a separate buffer, type @kbd{C-x r l} (@code{list-bookmarks}). If you switch to that buffer, you can use it to edit your bookmark definitions or annotate the bookmarks. Type @kbd{C-h m} in that buffer for more information about its special editing commands. When you kill XEmacs, XEmacs offers to save your bookmark values in your default bookmark file, @file{~/.emacs.bmk}, if you have changed any bookmark values. You can also save the bookmarks at any time with the @kbd{M-x bookmark-save} command. The bookmark commands load your default bookmark file automatically. This saving and loading is how bookmarks persist from one XEmacs session to the next. @vindex bookmark-save-flag If you set the variable @code{bookmark-save-flag} to 1, then each command that sets a bookmark will also save your bookmarks; this way, you don't lose any bookmark values even if XEmacs crashes. (The value, if a number, says how many bookmark modifications should go by between saving.) @vindex bookmark-search-size Bookmark position values are saved with surrounding context, so that @code{bookmark-jump} can find the proper position even if the file is modified slightly. The variable @code{bookmark-search-size} says how many characters of context to record, on each side of the bookmark's position. Here are some additional commands for working with bookmarks: @table @kbd @item M-x bookmark-load @key{RET} @var{filename} @key{RET} @findex bookmark-load Load a file named @var{filename} that contains a list of bookmark values. You can use this command, as well as @code{bookmark-write}, to work with other files of bookmark values in addition to your default bookmark file. @item M-x bookmark-write @key{RET} @var{filename} @key{RET} @findex bookmark-write Save all the current bookmark values in the file @var{filename}. @item M-x bookmark-delete @key{RET} @var{bookmark} @key{RET} @findex bookmark-delete Delete the bookmark named @var{bookmark}. @item M-x bookmark-insert-location @key{RET} @var{bookmark} @key{RET} @findex bookmark-insert-location Insert in the buffer the name of the file that bookmark @var{bookmark} points to. @item M-x bookmark-insert @key{RET} @var{bookmark} @key{RET} @findex bookmark-insert Insert in the buffer the @emph{contents} of the file that bookmark @var{bookmark} points to. @end table texi2html-1.82/test/xemacs_manual/calendar.texi0000644000175000017500000026664711264347115023521 0ustar flichtenheldflichtenheld@node Calendar/Diary, Sorting, Reading Mail, Top @section Calendar Mode and the Diary @cindex calendar @findex calendar Emacs provides the functions of a desk calendar, with a diary of planned or past events. To enter the calendar, type @kbd{M-x calendar}; this displays a three-month calendar centered on the current month, with point on the current date. With a numeric argument, as in @kbd{C-u M-x calendar}, it prompts you for the month and year to be the center of the three-month calendar. The calendar uses its own buffer, whose major mode is Calendar mode. @kbd{Button2} in the calendar brings up a menu of operations on a particular date; @kbd{Buttons3} brings up a menu of commonly used calendar features that are independent of any particular date. To exit the calendar, type @kbd{q}. @xref{Calendar, Customizing the Calendar and Diary,, lispref, The XEmacs Lisp Reference Manual}, for customization information about the calendar and diary. @menu * Calendar Motion:: Moving through the calendar; selecting a date. * Scroll Calendar:: Bringing earlier or later months onto the screen. * Mark and Region:: Remembering dates, the mark ring. * General Calendar:: Exiting or recomputing the calendar. * LaTeX Calendar:: Print a calendar using LaTeX. * Holidays:: Displaying dates of holidays. * Sunrise/Sunset:: Displaying local times of sunrise and sunset. * Lunar Phases:: Displaying phases of the moon. * Other Calendars:: Converting dates to other calendar systems. * Diary:: Displaying events from your diary. * Calendar Customization:: Altering the behavior of the features above. @end menu @node Calendar Motion, Scroll Calendar, Calendar/Diary, Calendar/Diary @subsection Movement in the Calendar @cindex moving inside the calendar Calendar mode lets you move through the calendar in logical units of time such as days, weeks, months, and years. If you move outside the three months originally displayed, the calendar display ``scrolls'' automatically through time to make the selected date visible. Moving to a date lets you view its holidays or diary entries, or convert it to other calendars; moving longer time periods is also useful simply to scroll the calendar. @menu * Calendar Unit Motion:: Moving by days, weeks, months, and years. * Move to Beginning or End:: Moving to start/end of weeks, months, and years. * Specified Dates:: Moving to the current date or another specific date. @end menu @node Calendar Unit Motion, Move to Beginning or End, Calendar Motion, Calendar Motion @subsubsection Motion by Integral Days, Weeks, Months, Years The commands for movement in the calendar buffer parallel the commands for movement in text. You can move forward and backward by days, weeks, months, and years. @table @kbd @item C-f Move point one day forward (@code{calendar-forward-day}). @item C-b Move point one day backward (@code{calendar-backward-day}). @item C-n Move point one week forward (@code{calendar-forward-week}). @item C-p Move point one week backward (@code{calendar-backward-week}). @item M-@} Move point one month forward (@code{calendar-forward-month}). @item M-@{ Move point one month backward (@code{calendar-backward-month}). @item C-x ] Move point one year forward (@code{calendar-forward-year}). @item C-x [ Move point one year backward (@code{calendar-backward-year}). @end table @kindex C-f @r{(Calendar mode)} @findex calendar-forward-day @kindex C-b @r{(Calendar mode)} @findex calendar-backward-day @kindex C-n @r{(Calendar mode)} @findex calendar-forward-week @kindex C-p @r{(Calendar mode)} @findex calendar-backward-week The day and week commands are natural analogues of the usual Emacs commands for moving by characters and by lines. Just as @kbd{C-n} usually moves to the same column in the following line, in Calendar mode it moves to the same day in the following week. And @kbd{C-p} moves to the same day in the previous week. The arrow keys are equivalent to @kbd{C-f}, @kbd{C-b}, @kbd{C-n} and @kbd{C-p}, just as they normally are in other modes. @kindex M-@} @r{(Calendar mode)} @findex calendar-forward-month @kindex M-@{ @r{(Calendar mode)} @findex calendar-backward-month @kindex C-x ] @r{(Calendar mode)} @findex calendar-forward-year @kindex C-x [ @r{(Calendar mode)} @findex calendar-forward-year The commands for motion by months and years work like those for weeks, but move a larger distance. The month commands @kbd{M-@}} and @kbd{M-@{} move forward or backward by an entire month's time. The year commands @kbd{C-x ]} and @w{@kbd{C-x [}} move forward or backward a whole year. The easiest way to remember these commands is to consider months and years analogous to paragraphs and pages of text, respectively. But the commands themselves are not quite analogous. The ordinary Emacs paragraph commands move to the beginning or end of a paragraph, whereas these month and year commands move by an entire month or an entire year, which usually involves skipping across the end of a month or year. All these commands accept a numeric argument as a repeat count. For convenience, the digit keys and the minus sign specify numeric arguments in Calendar mode even without the Meta modifier. For example, @kbd{100 C-f} moves point 100 days forward from its present location. @node Move to Beginning or End, Specified Dates, Calendar Unit Motion, Calendar Motion @subsubsection Beginning or End of Week, Month or Year A week (or month, or year) is not just a quantity of days; we think of weeks (months, years) as starting on particular dates. So Calendar mode provides commands to move to the beginning or end of a week, month or year: @table @kbd @kindex C-a @r{(Calendar mode)} @findex calendar-beginning-of-week @item C-a Move point to start of week (@code{calendar-beginning-of-week}). @kindex C-e @r{(Calendar mode)} @findex calendar-end-of-week @item C-e Move point to end of week (@code{calendar-end-of-week}). @kindex M-a @r{(Calendar mode)} @findex calendar-beginning-of-month @item M-a Move point to start of month (@code{calendar-beginning-of-month}). @kindex M-e @r{(Calendar mode)} @findex calendar-end-of-month @item M-e Move point to end of month (@code{calendar-end-of-month}). @kindex M-< @r{(Calendar mode)} @findex calendar-beginning-of-year @item M-< Move point to start of year (@code{calendar-beginning-of-year}). @kindex M-> @r{(Calendar mode)} @findex calendar-end-of-year @item M-> Move point to end of year (@code{calendar-end-of-year}). @end table These commands also take numeric arguments as repeat counts, with the repeat count indicating how many weeks, months, or years to move backward or forward. @vindex calendar-week-start-day @cindex weeks, which day they start on @cindex calendar, first day of week By default, weeks begin on Sunday. To make them begin on Monday instead, set the variable @code{calendar-week-start-day} to 1. @node Specified Dates,,Move to Beginning or End, Calendar Motion @subsubsection Particular Dates Calendar mode provides commands for moving to a particular date specified in various ways. @table @kbd @item g d Move point to specified date (@code{calendar-goto-date}). @item o Center calendar around specified month (@code{calendar-other-month}). @item . Move point to today's date (@code{calendar-goto-today}). @end table @kindex g d @r{(Calendar mode)} @findex calendar-goto-date @kbd{g d} (@code{calendar-goto-date}) prompts for a year, a month, and a day of the month, and then moves to that date. Because the calendar includes all dates from the beginning of the current era, you must type the year in its entirety; that is, type @samp{1990}, not @samp{90}. @kindex o @r{(Calendar mode)} @findex calendar-other-month @kbd{o} (@code{calendar-other-month}) prompts for a month and year, then centers the three-month calendar around that month. @kindex . @r{(Calendar mode)} @findex calendar-goto-today You can return to today's date with @kbd{.}@: (@code{calendar-goto-today}). @node Scroll Calendar, Mark and Region, Calendar Motion, Calendar/Diary @subsection Scrolling the Calendar through Time @cindex scrolling in the calendar The calendar display scrolls automatically through time when you move out of the visible portion. You can also scroll it manually. Imagine that the calendar window contains a long strip of paper with the months on it. Scrolling it means moving the strip so that new months become visible in the window. @table @kbd @item C-x < Scroll calendar one month forward (@code{scroll-calendar-left}). @item C-x > Scroll calendar one month backward (@code{scroll-calendar-right}). @item C-v @itemx @key{NEXT} Scroll calendar three months forward (@code{scroll-calendar-left-three-months}). @item M-v @itemx @key{PRIOR} Scroll calendar three months backward (@code{scroll-calendar-right-three-months}). @end table @kindex C-x < @r{(Calendar mode)} @findex scroll-calendar-left @kindex C-x > @r{(Calendar mode)} @findex scroll-calendar-right The most basic calendar scroll commands scroll by one month at a time. This means that there are two months of overlap between the display before the command and the display after. @kbd{C-x <} scrolls the calendar contents one month to the left; that is, it moves the display forward in time. @kbd{C-x >} scrolls the contents to the right, which moves backwards in time. @kindex C-v @r{(Calendar mode)} @findex scroll-calendar-left-three-months @kindex M-v @r{(Calendar mode)} @findex scroll-calendar-right-three-months The commands @kbd{C-v} and @kbd{M-v} scroll the calendar by an entire ``screenful''---three months---in analogy with the usual meaning of these commands. @kbd{C-v} makes later dates visible and @kbd{M-v} makes earlier dates visible. These commands take a numeric argument as a repeat count; in particular, since @kbd{C-u} multiplies the next command by four, typing @kbd{C-u C-v} scrolls the calendar forward by a year and typing @kbd{C-u M-v} scrolls the calendar backward by a year. The function keys @key{NEXT} and @key{PRIOR} are equivalent to @kbd{C-v} and @kbd{M-v}, just as they are in other modes. @node Mark and Region, General Calendar, Scroll Calendar, Calendar/Diary @subsection The Mark and the Region The concept of the mark applies to the calendar just as to any other buffer, but it marks a @emph{date}, not a @emph{position} in the buffer. The region consists of the days between the mark and point (including the starting and stopping dates). @table @kbd @item C-SPC Set the mark to today's date (@code{calendar-set-mark}). @item C-@@ The same. @item C-x C-x Interchange mark and point (@code{calendar-exchange-point-and-mark}). @item M-= Display the number of days in the current region (@code{calendar-count-days-region}). @end table @kindex C-@@ @r{(Calendar mode)} @kindex C-SPC @r{(Calendar mode)} @findex calendar-set-mark @kindex C-x C-x @r{(Calendar mode)} @findex calendar-exchange-point-and-mark You set the mark in the calendar, as in any other buffer, by using @kbd{C-@@} or @kbd{C-SPC} (@code{calendar-set-mark}). You return to the marked date with the command @kbd{C-x C-x} (@code{calendar-exchange-point-and-mark}) which puts the mark where point was and point where mark was. The calendar is scrolled as necessary, if the marked date was not visible on the screen. This does not change the extent of the region. @kindex M-= @r{(Calendar mode)} @findex calendar-count-days-region To determine the number of days in the region, type @kbd{M-=} (@code{calendar-count-days-region}). The numbers of days printed is @emph{inclusive}; that is, it includes the days specified by mark and point. @cindex mark ring The main use of the mark in the calendar is to remember dates that you may want to go back to. To make this feature more useful, the mark ring (@pxref{Mark Ring}) operates exactly as in other buffers: Emacs remembers 16 previous locations of the mark. To return to a marked date, type @kbd{C-u C-SPC} (or @kbd{C-u C-@@}); this is the command @code{calendar-set-mark} given a numeric argument. It moves point to where the mark was, restores the mark from the ring of former marks, and stores the previous point at the end of the mark ring. So, repeated use of this command moves point through all the old marks on the ring, one by one. @node General Calendar, LaTeX Calendar, Mark and Region, Calendar/Diary @subsection Miscellaneous Calendar Commands @table @kbd @item p d Display day-in-year (@code{calendar-print-day-of-year}). @item ? Briefly describe calendar commands (@code{describe-calendar-mode}). @item C-c C-l Regenerate the calendar window (@code{redraw-calendar}). @item SPC Scroll the next window (@code{scroll-other-window}). @item q Exit from calendar (@code{exit-calendar}). @end table @kindex p d @r{(Calendar mode)} @cindex day of year @findex calendar-print-day-of-year If you want to know how many days have elapsed since the start of the year, or the number of days remaining in the year, type the @kbd{p d} command (@code{calendar-print-day-of-year}). This displays both of those numbers in the echo area. @kindex ? @r{(Calendar mode)} @findex describe-calendar-mode To display a brief description of the calendar commands, type @kbd{?} (@code{describe-calendar-mode}). For a fuller description, type @kbd{C-h m}. @kindex SPC @r{(Calendar mode)} @findex scroll-other-window You can use @kbd{SPC} (@code{scroll-other-window}) to scroll the other window. This is handy when you display a list of holidays or diary entries in another window. @kindex C-c C-l @r{(Calendar mode)} @findex redraw-calendar If the calendar window text gets corrupted, type @kbd{C-c C-l} (@code{redraw-calendar}) to redraw it. (This can only happen if you use non-Calendar-mode editing commands.) @kindex SPC @r{(Calendar mode)} In Calendar mode, you can use @kbd{SPC} (@code{scroll-other-window}) to scroll the other window. This is handy when you display a list of holidays or diary entries in another window. @kindex q @r{(Calendar mode)} @findex exit-calendar To exit from the calendar, type @kbd{q} (@code{exit-calendar}). This buries all buffers related to the calendar, selecting other buffers. (If a frame contains a dedicated calendar window, exiting from the calendar iconifies that frame.) @node LaTeX Calendar, Holidays, General Calendar, Calendar/Diary @section LaTeX Calendar @cindex calendar and La@TeX{} The Calendar La@TeX{} commands produce a buffer of La@TeX{} code that prints as a calendar. Depending on the command you use, the printed calendar covers the day, week, month or year that point is in. @kindex t @r{(Calendar mode)} @table @kbd @item t m Generate a one-month calendar (@code{cal-tex-cursor-month}). @item t M Generate a sideways-printing one-month calendar (@code{cal-tex-cursor-month-landscape}). @item t d Generate a one-day calendar (@code{cal-tex-cursor-day}). @item t w 1 Generate a one-page calendar for one week (@code{cal-tex-cursor-week}). @item t w 2 Generate a two-page calendar for one week (@code{cal-tex-cursor-week2}). @item t w 3 Generate an ISO-style calendar for one week (@code{cal-tex-cursor-week-iso}). @item t w 4 Generate a calendar for one Monday-starting week (@code{cal-tex-cursor-week-monday}). @item t f w Generate a Filofax-style two-weeks-at-a-glance calendar (@code{cal-tex-cursor-filofax-2week}). @item t f W Generate a Filofax-style one-week-at-a-glance calendar (@code{cal-tex-cursor-filofax-week}). @item t y Generate a calendar for one year (@code{cal-tex-cursor-year}). @item t Y Generate a sideways-printing calendar for one year (@code{cal-tex-cursor-year-landscape}). @item t f y Generate a Filofax-style calendar for one year (@code{cal-tex-cursor-filofax-year}). @end table Some of these commands print the calendar sideways (in ``landscape mode''), so it can be wider than it is long. Some of them use Filofax paper size (3.75in x 6.75in). All of these commands accept a prefix argument which specifies how many days, weeks, months or years to print (starting always with the selected one). If the variable @code{cal-tex-holidays} is non-@code{nil} (the default), then the printed calendars show the holidays in @code{calendar-holidays}. If the variable @code{cal-tex-diary} is non-@code{nil} (the default is @code{nil}), diary entries are included also (in weekly and monthly calendars only). @node Holidays, Sunrise/Sunset, LaTeX Calendar, Calendar/Diary @subsection Holidays @cindex holidays The Emacs calendar knows about all major and many minor holidays, and can display them. @table @kbd @item h Display holidays for the selected date (@code{calendar-cursor-holidays}). @item Button2 Holidays Display any holidays for the date you click on. @item x Mark holidays in the calendar window (@code{mark-calendar-holidays}). @item u Unmark calendar window (@code{calendar-unmark}). @item a List all holidays for the displayed three months in another window (@code{list-calendar-holidays}). @item M-x holidays List all holidays for three months around today's date in another window. @item M-x list-holidays List holidays in another window for a specified range of years. @end table @kindex h @r{(Calendar mode)} @findex calendar-cursor-holidays To see if any holidays fall on a given date, position point on that date in the calendar window and use the @kbd{h} command. Alternatively, click on that date with @kbd{Button2} and then choose @kbd{Holidays} from the menu that appears. Either way, this displays the holidays for that date, in the echo area if they fit there, otherwise in a separate window. @kindex x @r{(Calendar mode)} @findex mark-calendar-holidays @kindex u @r{(Calendar mode)} @findex calendar-unmark To view the distribution of holidays for all the dates shown in the calendar, use the @kbd{x} command. This displays the dates that are holidays in a different face (or places a @samp{*} after these dates, if display with multiple faces is not available). The command applies both to the currently visible months and to other months that subsequently become visible by scrolling. To turn marking off and erase the current marks, type @kbd{u}, which also erases any diary marks (@pxref{Diary}). @kindex a @r{(Calendar mode)} @findex list-calendar-holidays To get even more detailed information, use the @kbd{a} command, which displays a separate buffer containing a list of all holidays in the current three-month range. You can use @key{SPC} in the calendar window to scroll that list. @findex holidays The command @kbd{M-x holidays} displays the list of holidays for the current month and the preceding and succeeding months; this works even if you don't have a calendar window. If you want the list of holidays centered around a different month, use @kbd{C-u M-x holidays}, which prompts for the month and year. The holidays known to Emacs include United States holidays and the major Christian, Jewish, and Islamic holidays; also the solstices and equinoxes. @findex list-holidays The command @kbd{M-x list-holidays} displays the list of holidays for a range of years. This function asks you for the starting and stopping years, and allows you to choose all the holidays or one of several categories of holidays. You can use this command even if you don't have a calendar window. The dates used by Emacs for holidays are based on @emph{current practice}, not historical fact. Historically, for instance, the start of daylight savings time and even its existence have varied from year to year, but present United States law mandates that daylight savings time begins on the first Sunday in April. When the daylight savings rules are set up for the United States, Emacs always uses the present definition, even though it is wrong for some prior years. @node Sunrise/Sunset, Lunar Phases, Holidays, Calendar/Diary @subsection Times of Sunrise and Sunset @cindex sunrise and sunset Special calendar commands can tell you, to within a minute or two, the times of sunrise and sunset for any date. @table @kbd @item S Display times of sunrise and sunset for the selected date (@code{calendar-sunrise-sunset}). @item Button2 Sunrise/Sunset Display times of sunrise and sunset for the date you click on. @item M-x sunrise-sunset Display times of sunrise and sunset for today's date. @item C-u M-x sunrise-sunset Display times of sunrise and sunset for a specified date. @end table @kindex S @r{(Calendar mode)} @findex calendar-sunrise-sunset @findex sunrise-sunset Within the calendar, to display the @emph{local times} of sunrise and sunset in the echo area, move point to the date you want, and type @kbd{S}. Alternatively, click @kbd{Button2} on the date, then choose @kbd{Sunrise/Sunset} from the menu that appears. The command @kbd{M-x sunrise-sunset} is available outside the calendar to display this information for today's date or a specified date. To specify a date other than today, use @kbd{C-u M-x sunrise-sunset}, which prompts for the year, month, and day. You can display the times of sunrise and sunset for any location and any date with @kbd{C-u C-u M-x sunrise-sunset}. This asks you for a longitude, latitude, number of minutes difference from Coordinated Universal Time, and date, and then tells you the times of sunrise and sunset for that location on that date. Because the times of sunrise and sunset depend on the location on earth, you need to tell Emacs your latitude, longitude, and location name before using these commands. Here is an example of what to set: @vindex calendar-location-name @vindex calendar-longitude @vindex calendar-latitude @example (setq calendar-latitude 40.1) (setq calendar-longitude -88.2) (setq calendar-location-name "Urbana, IL") @end example @noindent Use one decimal place in the values of @code{calendar-latitude} and @code{calendar-longitude}. Your time zone also affects the local time of sunrise and sunset. Emacs usually gets time zone information from the operating system, but if these values are not what you want (or if the operating system does not supply them), you must set them yourself. Here is an example: @vindex calendar-time-zone @vindex calendar-standard-time-zone-name @vindex calendar-daylight-time-zone-name @example (setq calendar-time-zone -360) (setq calendar-standard-time-zone-name "CST") (setq calendar-daylight-time-zone-name "CDT") @end example @noindent The value of @code{calendar-time-zone} is the number of minutes difference between your local standard time and Coordinated Universal Time (Greenwich time). The values of @code{calendar-standard-time-zone-name} and @code{calendar-daylight-time-zone-name} are the abbreviations used in your time zone. Emacs displays the times of sunrise and sunset @emph{corrected for daylight savings time}. @xref{Daylight Savings}, for how daylight savings time is determined. As a user, you might find it convenient to set the calendar location variables for your usual physical location in your init file. And when you install Emacs on a machine, you can create a @file{default.el} file which sets them properly for the typical location of most users of that machine. @xref{Init File}. @node Lunar Phases, Other Calendars, Sunrise/Sunset, Calendar/Diary @subsection Phases of the Moon @cindex phases of the moon @cindex moon, phases of These calendar commands display the dates and times of the phases of the moon (new moon, first quarter, full moon, last quarter). This feature is useful for debugging problems that ``depend on the phase of the moon.'' @table @kbd @item M Display the dates and times for all the quarters of the moon for the three-month period shown (@code{calendar-phases-of-moon}). @item M-x phases-of-moon Display dates and times of the quarters of the moon for three months around today's date. @end table @kindex M @r{(Calendar mode)} @findex calendar-phases-of-moon Within the calendar, use the @kbd{M} command to display a separate buffer of the phases of the moon for the current three-month range. The dates and times listed are accurate to within a few minutes. @findex phases-of-moon Outside the calendar, use the command @kbd{M-x phases-of-moon} to display the list of the phases of the moon for the current month and the preceding and succeeding months. For information about a different month, use @kbd{C-u M-x phases-of-moon}, which prompts for the month and year. The dates and times given for the phases of the moon are given in local time (corrected for daylight savings, when appropriate); but if the variable @code{calendar-time-zone} is void, Coordinated Universal Time (the Greenwich time zone) is used. @xref{Daylight Savings}. @node Other Calendars, Calendar Systems, Lunar Phases, Calendar/Diary @subsection Conversion To and From Other Calendars @cindex Gregorian calendar The Emacs calendar displayed is @emph{always} the Gregorian calendar, sometimes called the ``new style'' calendar, which is used in most of the world today. However, this calendar did not exist before the sixteenth century and was not widely used before the eighteenth century; it did not fully displace the Julian calendar and gain universal acceptance until the early twentieth century. The Emacs calendar can display any month since January, year 1 of the current era, but the calendar displayed is the Gregorian, even for a date at which the Gregorian calendar did not exist. While Emacs cannot display other calendars, it can convert dates to and from several other calendars. @menu * Calendar Systems:: The calendars Emacs understands (aside from Gregorian). * To Other Calendar:: Converting the selected date to various calendars. * From Other Calendar:: Moving to a date specified in another calendar. * Mayan Calendar:: Moving to a date specified in a Mayan calendar. @end menu If you are interested in these calendars, you can convert dates one at a time. Put point on the desired date of the Gregorian calendar and press the appropriate keys. The @kbd{p} is a mnemonic for ``print'' since Emacs ``prints' the equivalent date in the echo area. @node Calendar Systems, To Other Calendar, Other Calendars, Other Calendars @section Supported Calendar Systems @cindex ISO commercial calendar The ISO commercial calendar is used largely in Europe. @cindex Julian calendar The Julian calendar, named after Julius Caesar, was the one used in Europe throughout medieval times, and in many countries up until the nineteenth century. @cindex Julian day numbers @cindex astronomical day numbers Astronomers use a simple counting of days elapsed since noon, Monday, January 1, 4713 B.C. on the Julian calendar. The number of days elapsed is called the @emph{Julian day number} or the @emph{Astronomical day number}. @cindex Hebrew calendar The Hebrew calendar is used by tradition in the Jewish religion. The Emacs calendar program uses the Hebrew calendar to determine the dates of Jewish holidays. Hebrew calendar dates begin and end at sunset. @cindex Islamic calendar The Islamic calendar is used in many predominantly Islamic countries. Emacs uses it to determine the dates of Islamic holidays. There is no universal agreement in the Islamic world about the calendar; Emacs uses a widely accepted version, but the precise dates of Islamic holidays often depend on proclamation by religious authorities, not on calculations. As a consequence, the actual dates of observance can vary slightly from the dates computed by Emacs. Islamic calendar dates begin and end at sunset. @cindex French Revolutionary calendar The French Revolutionary calendar was created by the Jacobins after the 1789 revolution, to represent a more secular and nature-based view of the annual cycle, and to install a 10-day week in a rationalization measure similar to the metric system. The French government officially abandoned this calendar at the end of 1805. @cindex Mayan calendar The Maya of Central America used three separate, overlapping calendar systems, the @emph{long count}, the @emph{tzolkin}, and the @emph{haab}. Emacs knows about all three of these calendars. Experts dispute the exact correlation between the Mayan calendar and our calendar; Emacs uses the Goodman-Martinez-Thompson correlation in its calculations. @cindex Coptic calendar @cindex Ethiopic calendar The Copts use a calendar based on the ancient Egyptian solar calendar. Their calendar consists of twelve 30-day months followed by an extra five-day period. Once every fourth year they add a leap day to this extra period to make it six days. The Ethiopic calendar is identical in structure, but has different year numbers and month names. @cindex Persian calendar The Persians use a solar calendar based on a design of Omar Khayyam. Their calendar consists of twelve months of which the first six have 31 days, the next five have 30 days, and the last has 29 in ordinary years and 30 in leap years. Leap years occur in a complicated pattern every four or five years. @cindex Chinese calendar The Chinese calendar is a complicated system of lunar months arranged into solar years. The years go in cycles of sixty, each year containing either twelve months in an ordinary year or thirteen months in a leap year; each month has either 29 or 30 days. Years, ordinary months, and days are named by combining one of ten ``celestial stems'' with one of twelve ``terrestrial branches'' for a total of sixty names that are repeated in a cycle of sixty. @node To Other Calendar, From Other Calendar, Calendar Systems, Other Calendars @section Converting To Other Calendars The following commands describe the selected date (the date at point) in various other calendar systems: @table @kbd @item Button2 Other Calendars Display the date that you click on, expressed in various other calendars. @kindex p @r{(Calendar mode)} @findex calendar-print-iso-date @item p c Display ISO commercial calendar equivalent for selected day (@code{calendar-print-iso-date}). @findex calendar-print-julian-date @item p j Display Julian date for selected day (@code{calendar-print-julian-date}). @findex calendar-print-astro-day-number @item p a Display astronomical (Julian) day number for selected day (@code{calendar-print-astro-day-number}). @findex calendar-print-hebrew-date @item p h Display Hebrew date for selected day (@code{calendar-print-hebrew-date}). @findex calendar-print-islamic-date @item p i Display Islamic date for selected day (@code{calendar-print-islamic-date}). @findex calendar-print-french-date @item p f Display French Revolutionary date for selected day (@code{calendar-print-french-date}). @findex calendar-print-chinese-date @item p C Display Chinese date for selected day (@code{calendar-print-chinese-date}). @findex calendar-print-coptic-date @item p k Display Coptic date for selected day (@code{calendar-print-coptic-date}). @findex calendar-print-ethiopic-date @item p e Display Ethiopic date for selected day (@code{calendar-print-ethiopic-date}). @findex calendar-print-persian-date @item p p Display Persian date for selected day (@code{calendar-print-persian-date}). @findex calendar-print-mayan-date @item p m Display Mayan date for selected day (@code{calendar-print-mayan-date}). @end table If you are using X, the easiest way to translate a date into other calendars is to click on it with @kbd{Button2}, then choose @kbd{Other Calendars} from the menu that appears. This displays the equivalent forms of the date in all the calendars Emacs understands, in the form of a menu. (Choosing an alternative from this menu doesn't actually do anything---the menu is used only for display.) Put point on the desired date of the Gregorian calendar, then type the appropriate keys. The @kbd{p} is a mnemonic for ``print'' since Emacs ``prints'' the equivalent date in the echo area. @node From Other Calendar, Mayan Calendar, To Other Calendar, Other Calendars @section Converting From Other Calendars You can use the other supported calendars to specify a date to move to. This section describes the commands for doing this using calendars other than Mayan; for the Mayan calendar, see the following section. @kindex g @var{char} @r{(Calendar mode)} @findex calendar-goto-iso-date @findex calendar-goto-julian-date @findex calendar-goto-astro-day-number @findex calendar-goto-hebrew-date @findex calendar-goto-islamic-date @findex calendar-goto-french-date @findex calendar-goto-chinese-date @findex calendar-goto-persian-date @findex calendar-goto-coptic-date @findex calendar-goto-ethiopic-date @table @kbd @item g c Move to a date specified in the ISO commercial calendar (@code{calendar-goto-iso-date}). @item g j Move to a date specified in the Julian calendar (@code{calendar-goto-julian-date}). @item g a Move to a date specified in astronomical (Julian) day number (@code{calendar-goto-astro-day-number}). @item g h Move to a date specified in the Hebrew calendar (@code{calendar-goto-hebrew-date}). @item g i Move to a date specified in the Islamic calendar (@code{calendar-goto-islamic-date}). @item g f Move to a date specified in the French Revolutionary calendar (@code{calendar-goto-french-date}). @item g C Move to a date specified in the Chinese calendar (@code{calendar-goto-chinese-date}). @item g p Move to a date specified in the Persian calendar (@code{calendar-goto-persian-date}). @item g k Move to a date specified in the Coptic calendar (@code{calendar-goto-coptic-date}). @item g e Move to a date specified in the Ethiopic calendar (@code{calendar-goto-ethiopic-date}). @end table These commands ask you for a date on the other calendar, move point to the Gregorian calendar date equivalent to that date, and display the other calendar's date in the echo area. Emacs uses strict completion (@pxref{Completion}) whenever it asks you to type a month name, so you don't have to worry about the spelling of Hebrew, Islamic, or French names. @findex list-yahrzeit-dates @cindex yahrzeits One common question concerning the Hebrew calendar is the computation of the anniversary of a date of death, called a ``yahrzeit.'' The Emacs calendar includes a facility for such calculations. If you are in the calendar, the command @kbd{M-x list-yahrzeit-dates} asks you for a range of years and then displays a list of the yahrzeit dates for those years for the date given by point. If you are not in the calendar, this command first asks you for the date of death and the range of years, and then displays the list of yahrzeit dates. @node Mayan Calendar, Diary ,From Other Calendar ,Other Calendars @subsection Converting from the Mayan Calendar Here are the commands to select dates based on the Mayan calendar: @table @kbd @item g m l Move to a date specified by the long count calendar (@code{calendar-goto-mayan-long-count-date}). @item g m n t Move to the next occurrence of a place in the tzolkin calendar (@code{calendar-next-tzolkin-date}). @item g m p t Move to the previous occurrence of a place in the tzolkin calendar (@code{calendar-previous-tzolkin-date}). @item g m n h Move to the next occurrence of a place in the haab calendar (@code{calendar-next-haab-date}). @item g m p h Move to the previous occurrence of a place in the haab calendar (@code{calendar-previous-haab-date}). @item g m n c Move to the next occurrence of a place in the calendar round (@code{calendar-next-calendar-round-date}). @item g m p c Move to the previous occurrence of a place in the calendar round (@code{calendar-previous-calendar-round-date}). @end table @cindex Mayan long count To understand these commands, you need to understand the Mayan calendars. The @dfn{long count} is a counting of days with these units: @display 1 kin = 1 day@ @ @ 1 uinal = 20 kin@ @ @ 1 tun = 18 uinal 1 katun = 20 tun@ @ @ 1 baktun = 20 katun @end display @kindex g m l @r{(Calendar mode)} @findex calendar-goto-mayan-long-count-date @noindent Thus, the long count date 12.16.11.16.6 means 12 baktun, 16 katun, 11 tun, 16 uinal, and 6 kin. The Emacs calendar can handle Mayan long count dates as early as 7.17.18.13.1, but no earlier. When you use the @kbd{g m l} command, type the Mayan long count date with the baktun, katun, tun, uinal, and kin separated by periods. @findex calendar-previous-tzolkin-date @findex calendar-next-tzolkin-date @cindex Mayan tzolkin calendar The Mayan tzolkin calendar is a cycle of 260 days formed by a pair of independent cycles of 13 and 20 days. Since this cycle repeats endlessly, Emacs provides commands to move backward and forward to the previous or next point in the cycle. Type @kbd{g m p t} to go to the previous tzolkin date; Emacs asks you for a tzolkin date and moves point to the previous occurrence of that date. Similarly, type @kbd{g m n t} to go to the next occurrence of a tzolkin date. @findex calendar-previous-haab-date @findex calendar-next-haab-date @cindex Mayan haab calendar The Mayan haab calendar is a cycle of 365 days arranged as 18 months of 20 days each, followed a 5-day monthless period. Like the tzolkin cycle, this cycle repeats endlessly, and there are commands to move backward and forward to the previous or next point in the cycle. Type @kbd{g m p h} to go to the previous haab date; Emacs asks you for a haab date and moves point to the previous occurrence of that date. Similarly, type @kbd{g m n h} to go to the next occurrence of a haab date. @c This is omitted because it is too long for smallbook format. @c @findex calendar-previous-calendar-round-date @findex calendar-next-calendar-round-date @cindex Mayan calendar round The Maya also used the combination of the tzolkin date and the haab date. This combination is a cycle of about 52 years called a @emph{calendar round}. If you type @kbd{g m p c}, Emacs asks you for both a haab and a tzolkin date and then moves point to the previous occurrence of that combination. Use @kbd{g m n c} to move point to the next occurrence of a combination. These commands signal an error if the haab/tzolkin date combination you have typed is impossible. Emacs uses strict completion (@pxref{Completion}) whenever it asks you to type a Mayan name, so you don't have to worry about spelling. @node Diary, Calendar Customization, Mayan Calendar, Calendar/Diary @subsection The Diary @cindex diary The Emacs diary keeps track of appointments or other events on a daily basis, in conjunction with the calendar. To use the diary feature, you must first create a @dfn{diary file} containing a list of events and their dates. Then Emacs can automatically pick out and display the events for today, for the immediate future, or for any specified date. By default, Emacs uses @file{~/diary} as the diary file. This is the same file that the @code{calendar} utility uses. A sample @file{~/diary} file is: @example 12/22/1988 Twentieth wedding anniversary!! &1/1. Happy New Year! 10/22 Ruth's birthday. * 21, *: Payday Tuesday--weekly meeting with grad students at 10am Supowit, Shen, Bitner, and Kapoor to attend. 1/13/89 Friday the thirteenth!! &thu 4pm squash game with Lloyd. mar 16 Dad's birthday April 15, 1989 Income tax due. &* 15 time cards due. @end example @noindent This example uses extra spaces to align the event descriptions of most of the entries. Such formatting is purely a matter of taste. Although you probably will start by creating a diary manually, Emacs provides a number of commands to let you view, add, and change diary entries. You can also share diary entries with other users (@pxref{Included Diary Files}). @menu * Diary Commands:: Viewing diary entries and associated calendar dates. * Format of Diary File:: Entering events in your diary. * Date Formats:: Various ways you can specify dates. * Adding to Diary:: Commands to create diary entries. * Special Diary Entries:: Anniversaries, blocks of dates, cyclic entries, etc. @end menu @node Diary Commands, Format of Diary File, Diary, Diary @subsection Commands Displaying Diary Entries Once you have created a @file{~/diary} file, you can use the calendar to view it. You can also view today's events outside of Calendar mode. @table @kbd @item d Display all diary entries for the selected date (@code{view-diary-entries}). @item Button2 Diary Display all diary entries for the date you click on. @item s Display the entire diary file (@code{show-all-diary-entries}). @item m Mark all visible dates that have diary entries (@code{mark-diary-entries}). @item u Unmark the calendar window (@code{calendar-unmark}). @item M-x print-diary-entries Print hard copy of the diary display as it appears. @item M-x diary Display all diary entries for today's date. @item M-x diary-mail-entries Mail yourself email reminders about upcoming diary entries. @end table @kindex d @r{(Calendar mode)} @findex view-diary-entries Displaying the diary entries with @kbd{d} shows in a separate window the diary entries for the selected date in the calendar. The mode line of the new window shows the date of the diary entries and any holidays that fall on that date. If you specify a numeric argument with @kbd{d}, it shows all the diary entries for that many successive days. Thus, @kbd{2 d} displays all the entries for the selected date and for the following day. Another way to display the diary entries for a date is to click @kbd{Button2} on the date, and then choose @kbd{Diary} from the menu that appears. @kindex m @r{(Calendar mode)} @findex mark-diary-entries @kindex u @r{(Calendar mode)} @findex calendar-unmark To get a broader view of which days are mentioned in the diary, use the @kbd{m} command. This displays the dates that have diary entries in a different face (or places a @samp{+} after these dates, if display with multiple faces is not available). The command applies both to the currently visible months and to other months that subsequently become visible by scrolling. To turn marking off and erase the current marks, type @kbd{u}, which also turns off holiday marks (@pxref{Holidays}). @kindex s @r{(Calendar mode)} @findex show-all-diary-entries To see the full diary file, rather than just some of the entries, use the @kbd{s} command. Display of selected diary entries uses the selective display feature to hide entries that don't apply. @findex print-diary-entries The diary buffer as you see it is an illusion, so simply printing the buffer does not print what you see on your screen. There is a special command to print hard copy of the diary buffer @emph{as it appears}; this command is @kbd{M-x print-diary-entries}. It sends the data directly to the printer. You can customize it like @code{lpr-region} (@pxref{Hardcopy}). @findex diary The command @kbd{M-x diary} displays the diary entries for the current date, independently of the calendar display, and optionally for the next few days as well; the variable @code{number-of-diary-entries} specifies how many days to include (@pxref{Customization}). If you put @code{(diary)} in your init file, this automatically displays a window with the day's diary entries, when you enter Emacs. @xref{Init File}. The mode line of the displayed window shows the date and any holidays that fall on that date. @findex diary-mail-entries @vindex diary-mail-days Many users like to receive notice of events in their diary as email. To send such mail to yourself, use the command @kbd{M-x diary-mail-entries}. A prefix argument specifies how many days (starting with today) to check; otherwise, the variable @code{diary-mail-days} says how many days. @node Format of Diary File, Date Formats, Diary Commands, Diary @subsection The Diary File @cindex diary file @vindex diary-file Your @dfn{diary file} is a file that records events associated with particular dates. The name of the diary file is specified by the variable @code{diary-file}; @file{~/diary} is the default. The @code{calendar} utility program supports a subset of the format allowed by the Emacs diary facilities, so you can use that utility to view the diary file, with reasonable results aside from the entries it cannot understand. Each entry in the diary file describes one event and consists of one or more lines. An entry always begins with a date specification at the left margin. The rest of the entry is simply text to describe the event. If the entry has more than one line, then the lines after the first must begin with whitespace to indicate they continue a previous entry. Lines that do not begin with valid dates and do not continue a preceding entry are ignored. You can inhibit the marking of certain diary entries in the calendar window; to do this, insert an ampersand (@samp{&}) at the beginning of the entry, before the date. This has no effect on display of the entry in the diary window; it affects only marks on dates in the calendar window. Nonmarking entries are especially useful for generic entries that would otherwise mark many different dates. If the first line of a diary entry consists only of the date or day name with no following blanks or punctuation, then the diary window display doesn't include that line; only the continuation lines appear. For example, this entry: @example 02/11/1989 Bill B. visits Princeton today 2pm Cognitive Studies Committee meeting 2:30-5:30 Liz at Lawrenceville 4:00pm Dentist appt 7:30pm Dinner at George's 8:00-10:00pm concert @end example @noindent appears in the diary window without the date line at the beginning. This style of entry looks neater when you display just a single day's entries, but can cause confusion if you ask for more than one day's entries. You can edit the diary entries as they appear in the window, but it is important to remember that the buffer displayed contains the @emph{entire} diary file, with portions of it concealed from view. This means, for instance, that the @kbd{C-f} (@code{forward-char}) command can put point at what appears to be the end of the line, but what is in reality the middle of some concealed line. @emph{Be careful when editing the diary entries!} Inserting additional lines or adding/deleting characters in the middle of a visible line cannot cause problems, but editing at the end of a line may not do what you expect. Deleting a line may delete other invisible entries that follow it. Before editing the diary, it is best to display the entire file with @kbd{s} (@code{show-all-diary-entries}). @node Date Formats,Adding to Diary ,Format of Diary File, Diary @subsection Date Formats Here are some sample diary entries, illustrating different ways of formatting a date. The examples all show dates in American order (month, day, year), but Calendar mode supports European order (day, month, year) as an option. @example 4/20/93 Switch-over to new tabulation system apr. 25 Start tabulating annual results 4/30 Results for April are due */25 Monthly cycle finishes Friday Don't leave without backing up files @end example The first entry appears only once, on April 20, 1993. The second and third appear every year on the specified dates, and the fourth uses a wildcard (asterisk) for the month, so it appears on the 25th of every month. The final entry appears every week on Friday. You can use just numbers to express a date, as in @samp{@var{month}/@var{day}} or @samp{@var{month}/@var{day}/@var{year}}. This must be followed by a nondigit. In the date itself, @var{month} and @var{day} are numbers of one or two digits. The optional @var{year} is also a number, and may be abbreviated to the last two digits; that is, you can use @samp{11/12/1989} or @samp{11/12/89}. Dates can also have the form @samp{@var{monthname} @var{day}} or @samp{@var{monthname} @var{day}, @var{year}}, where the month's name can be spelled in full or abbreviated to three characters (with or without a period). Case is not significant. A date may be @dfn{generic}; that is, partially unspecified. Then the entry applies to all dates that match the specification. If the date does not contain a year, it is generic and applies to any year. Alternatively, @var{month}, @var{day}, or @var{year} can be a @samp{*}; this matches any month, day, or year, respectively. Thus, a diary entry @samp{3/*/*} matches any day in March of any year; so does @samp{march *}. @vindex european-calendar-style @findex european-calendar @findex american-calendar If you prefer the European style of writing dates---in which the day comes before the month---type @kbd{M-x european-calendar} while in the calendar, or set the variable @code{european-calendar-style} to @code{t} @emph{before} using any calendar or diary command. This mode interprets all dates in the diary in the European manner, and also uses European style for displaying diary dates. (Note that there is no comma after the @var{monthname} in the European style.) To go back to the (default) American style of writing dates, type @kbd{M-x american-calendar}. You can use the name of a day of the week as a generic date which applies to any date falling on that day of the week. You can abbreviate the day of the week to three letters (with or without a period) or spell it in full; case is not significant. @node Adding to Diary, Special Diary Entries, Date Formats, Diary @subsection Commands to Add to the Diary While in the calendar, there are several commands to create diary entries: @table @kbd @item i d Add a diary entry for the selected date (@code{insert-diary-entry}). @item i w Add a diary entry for the selected day of the week (@code{insert-weekly-diary-entry}). @item i m Add a diary entry for the selected day of the month (@code{insert-monthly-diary-entry}). @item i y Add a diary entry for the selected day of the year (@code{insert-yearly-diary-entry}). @end table @kindex i d @r{(Calendar mode)} @findex insert-diary-entry You can make a diary entry for a specific date by selecting that date in the calendar window and typing the @kbd{i d} command. This command displays the end of your diary file in another window and inserts the date; you can then type the rest of the diary entry. @kindex i w @r{(Calendar mode)} @findex insert-weekly-diary-entry @kindex i m @r{(Calendar mode)} @findex insert-monthly-diary-entry @kindex i y @r{(Calendar mode)} @findex insert-yearly-diary-entry If you want to make a diary entry that applies to a specific day of the week, select that day of the week (any occurrence will do) and type @kbd{i w}. This inserts the day-of-week as a generic date; you can then type the rest of the diary entry. You can make a monthly diary entry in the same fashion. Select the day of the month, use the @kbd{i m} command, and type rest of the entry. Similarly, you can insert a yearly diary entry with the @kbd{i y} command. All of the above commands make marking diary entries by default. To make a nonmarking diary entry, give a numeric argument to the command. For example, @kbd{C-u i w} makes a nonmarking weekly diary entry. When you modify the diary file, be sure to save the file before exiting Emacs. @node Special Diary Entries,, Adding to Diary, Diary @subsection Special Diary Entries In addition to entries based on calendar dates, the diary file can contain @dfn{sexp entries} for regular events such as anniversaries. These entries are based on Lisp expressions (sexps) that Emacs evaluates as it scans the diary file. Instead of a date, a sexp entry contains @samp{%%} followed by a Lisp expression which must begin and end with parentheses. The Lisp expression determines which dates the entry applies to. Calendar mode provides commands to insert certain commonly used sexp entries: @table @kbd @item i a Add an anniversary diary entry for the selected date (@code{insert-anniversary-diary-entry}). @item i b Add a block diary entry for the current region (@code{insert-block-diary-entry}). @item i c Add a cyclic diary entry starting at the date (@code{insert-cyclic-diary-entry}). @end table @kindex i a @r{(Calendar mode)} @findex insert-anniversary-diary-entry If you want to make a diary entry that applies to the anniversary of a specific date, move point to that date and use the @kbd{i a} command. This displays the end of your diary file in another window and inserts the anniversary description; you can then type the rest of the diary entry. The entry looks like this: @findex diary-anniversary The effect of @kbd{i a} is to add a @code{diary-anniversary} sexp to your diary file. You can also add one manually, for instance: @example %%(diary-anniversary 10 31 1948) Arthur's birthday @end example @noindent This entry applies to October 31 in any year after 1948; @samp{10 31 1948} specifies the date. (If you are using the European calendar style, the month and day are interchanged.) The reason this expression requires a beginning year is that advanced diary functions can use it to calculate the number of elapsed years. A @dfn{block} diary entry applies to a specified range of consecutive dates. Here is a block diary entry that applies to all dates from June 24, 1990 through July 10, 1990: @findex diary-block @example %%(diary-block 6 24 1990 7 10 1990) Vacation @end example @noindent The @samp{6 24 1990} indicates the starting date and the @samp{7 10 1990} indicates the stopping date. (Again, if you are using the European calendar style, the month and day are interchanged.) @kindex i b @r{(Calendar mode)} @findex insert-block-diary-entry To insert a block entry, place point and the mark on the two dates that begin and end the range, and type @kbd{i b}. This command displays the end of your diary file in another window and inserts the block description; you can then type the diary entry. @kindex i c @r{(Calendar mode)} @findex insert-cyclic-diary-entry @dfn{Cyclic} diary entries repeat after a fixed interval of days. To create one, select the starting date and use the @kbd{i c} command. The command prompts for the length of interval, then inserts the entry, which looks like this: @findex diary-cyclic @example %%(diary-cyclic 50 3 1 1990) Renew medication @end example @noindent This entry applies to March 1, 1990 and every 50th day following; @samp{3 1 1990} specifies the starting date. (If you are using the European calendar style, the month and day are interchanged.) All three of these commands make marking diary entries. To insert a nonmarking entry, give a numeric argument to the command. For example, @kbd{C-u i a} makes a nonmarking anniversary diary entry. Marking sexp diary entries in the calendar is @emph{extremely} time-consuming, since every date visible in the calendar window must be individually checked. So it's a good idea to make sexp diary entries nonmarking (with @samp{&}) when possible. Another sophisticated kind of sexp entry, a @dfn{floating} diary entry, specifies a regularly occurring event by offsets specified in days, weeks, and months. It is comparable to a crontab entry interpreted by the @code{cron} utility. Here is a nonmarking, floating diary entry that applies to the last Thursday in November: @findex diary-float @example &%%(diary-float 11 4 -1) American Thanksgiving @end example @noindent The 11 specifies November (the eleventh month), the 4 specifies Thursday (the fourth day of the week, where Sunday is numbered zero), and the @minus{}1 specifies ``last'' (1 would mean ``first'', 2 would mean ``second'', @minus{}2 would mean ``second-to-last'', and so on). The month can be a single month or a list of months. Thus you could change the 11 above to @samp{'(1 2 3)} and have the entry apply to the last Thursday of January, February, and March. If the month is @code{t}, the entry applies to all months of the year.@refill The sexp feature of the diary allows you to specify diary entries based on any Emacs Lisp expression. You can use the library of built-in functions or you can write your own functions. The built-in functions include the ones shown in this section, plus a few others (@pxref{Sexp Diary Entries}). The generality of sexps lets you specify any diary entry that you can describe algorithmically. Suppose you get paid on the 21st of the month if it is a weekday, and to the Friday before if the 21st is on a weekend. The diary entry @example &%%(let ((dayname (calendar-day-of-week date)) (day (car (cdr date)))) (or (and (= day 21) (memq dayname '(1 2 3 4 5))) (and (memq day '(19 20)) (= dayname 5))) ) Pay check deposited @end example @noindent to just those dates. This example illustrates how the sexp can depend on the variable @code{date}; this variable is a list (@var{month} @var{day} @var{year}) that gives the Gregorian date for which the diary entries are being found. If the value of the sexp is @code{t}, the entry applies to that date. If the sexp evaluates to @code{nil}, the entry does @emph{not} apply to that date. @node Calendar Customization,,Diary, Calendar/Diary @subsection Customizing the Calendar and Diary There are many customizations that you can use to make the calendar and diary suit your personal tastes. @menu * Calendar Customizing:: Defaults you can set. * Holiday Customizing:: Defining your own holidays. * Date Display Format:: Changing the format. * Time Display Format:: Changing the format. * Daylight Savings:: Changing the default. * Diary Customizing:: Defaults you can set. * Hebrew/Islamic Entries:: How to obtain them. * Fancy Diary Display:: Enhancing the diary display, sorting entries. * Included Diary Files:: Sharing a common diary file. * Sexp Diary Entries:: Fancy things you can do. * Appt Customizing:: Customizing appointment reminders. @end menu @node Calendar Customizing @subsubsection Customizing the Calendar @vindex view-diary-entries-initially If you set the variable @code{view-diary-entries-initially} to @code{t}, calling up the calendar automatically displays the diary entries for the current date as well. The diary dates appear only if the current date is visible. If you add both of the following lines to your init file:@refill @example (setq view-diary-entries-initially t) (calendar) @end example @noindent this displays both the calendar and diary windows whenever you start Emacs. @xref{Init File}. @vindex view-calendar-holidays-initially Similarly, if you set the variable @code{view-calendar-holidays-initially} to @code{t}, entering the calendar automatically displays a list of holidays for the current three-month period. The holiday list appears in a separate window. @vindex mark-diary-entries-in-calendar You can set the variable @code{mark-diary-entries-in-calendar} to @code{t} in order to mark any dates with diary entries. This takes effect whenever the calendar window contents are recomputed. There are two ways of marking these dates: by changing the face (@pxref{Faces}), if the display supports that, or by placing a plus sign (@samp{+}) beside the date otherwise. @vindex mark-holidays-in-calendar Similarly, setting the variable @code{mark-holidays-in-calendar} to @code{t} marks holiday dates, either with a change of face or with an asterisk (@samp{*}). @vindex calendar-holiday-marker @vindex diary-entry-marker The variable @code{calendar-holiday-marker} specifies how to mark a date as being a holiday. Its value may be a character to insert next to the date, or a face name to use for displaying the date. Likewise, the variable @code{diary-entry-marker} specifies how to mark a date that has diary entries. The calendar creates faces named @code{holiday-face} and @code{diary-face} for these purposes; those symbols are the default values of these variables, when Emacs supports multiple faces on your terminal. @vindex calendar-load-hook The variable @code{calendar-load-hook} is a normal hook run when the calendar package is first loaded (before actually starting to display the calendar). @vindex initial-calendar-window-hook Starting the calendar runs the normal hook @code{initial-calendar-window-hook}. Recomputation of the calendar display does not run this hook. But if you leave the calendar with the @kbd{q} command and reenter it, the hook runs again.@refill @vindex today-visible-calendar-hook The variable @code{today-visible-calendar-hook} is a normal hook run after the calendar buffer has been prepared with the calendar when the current date is visible in the window. One use of this hook is to replace today's date with asterisks; to do that, use the hook function @code{calendar-star-date}. @findex calendar-star-date @example (add-hook 'today-visible-calendar-hook 'calendar-star-date) @end example @noindent Another standard hook function marks the current date, either by changing its face or by adding an asterisk. Here's how to use it: @findex calendar-mark-today @example (add-hook 'today-visible-calendar-hook 'calendar-mark-today) @end example @noindent @vindex calendar-today-marker The variable @code{calendar-today-marker} specifies how to mark today's date. Its value should be a character to insert next to the date or a face name to use for displaying the date. A face named @code{calendar-today-face} is provided for this purpose; that symbol is the default for this variable when Emacs supports multiple faces on your terminal. @vindex today-invisible-calendar-hook @noindent A similar normal hook, @code{today-invisible-calendar-hook} is run if the current date is @emph{not} visible in the window. @node Holiday Customizing @subsubsection Customizing the Holidays @vindex calendar-holidays @vindex christian-holidays @vindex hebrew-holidays @vindex islamic-holidays Emacs knows about holidays defined by entries on one of several lists. You can customize these lists of holidays to your own needs, adding or deleting holidays. The lists of holidays that Emacs uses are for general holidays (@code{general-holidays}), local holidays (@code{local-holidays}), Christian holidays (@code{christian-holidays}), Hebrew (Jewish) holidays (@code{hebrew-holidays}), Islamic (Moslem) holidays (@code{islamic-holidays}), and other holidays (@code{other-holidays}). @vindex general-holidays The general holidays are, by default, holidays common throughout the United States. To eliminate these holidays, set @code{general-holidays} to @code{nil}. @vindex local-holidays There are no default local holidays (but sites may supply some). You can set the variable @code{local-holidays} to any list of holidays, as described below. @vindex all-christian-calendar-holidays @vindex all-hebrew-calendar-holidays @vindex all-islamic-calendar-holidays By default, Emacs does not include all the holidays of the religions that it knows, only those commonly found in secular calendars. For a more extensive collection of religious holidays, you can set any (or all) of the variables @code{all-christian-calendar-holidays}, @code{all-hebrew-calendar-holidays}, or @code{all-islamic-calendar-holidays} to @code{t}. If you want to eliminate the religious holidays, set any or all of the corresponding variables @code{christian-holidays}, @code{hebrew-holidays}, and @code{islamic-holidays} to @code{nil}.@refill @vindex other-holidays You can set the variable @code{other-holidays} to any list of holidays. This list, normally empty, is intended for individual use. @cindex holiday forms Each of the lists (@code{general-holidays}, @code{local-holidays}, @code{christian-holidays}, @code{hebrew-holidays}, @code{islamic-holidays}, and @code{other-holidays}) is a list of @dfn{holiday forms}, each holiday form describing a holiday (or sometimes a list of holidays). Here is a table of the possible kinds of holiday form. Day numbers and month numbers count starting from 1, but ``dayname'' numbers count Sunday as 0. The element @var{string} is always the name of the holiday, as a string. @table @code @item (holiday-fixed @var{month} @var{day} @var{string}) A fixed date on the Gregorian calendar. @var{month} and @var{day} are numbers, @var{string} is the name of the holiday. @item (holiday-float @var{month} @var{dayname} @var{k} @var{string}) The @var{k}th @var{dayname} in @var{month} on the Gregorian calendar (@var{dayname}=0 for Sunday, and so on); negative @var{k} means count back from the end of the month. @var{string} is the name of the holiday. @item (holiday-hebrew @var{month} @var{day} @var{string}) A fixed date on the Hebrew calendar. @var{month} and @var{day} are numbers, @var{string} is the name of the holiday. @item (holiday-islamic @var{month} @var{day} @var{string}) A fixed date on the Islamic calendar. @var{month} and @var{day} are numbers, @var{string} is the name of the holiday. @item (holiday-julian @var{month} @var{day} @var{string}) A fixed date on the Julian calendar. @var{month} and @var{day} are numbers, @var{string} is the name of the holiday. @item (holiday-sexp @var{sexp} @var{string}) A date calculated by the Lisp expression @var{sexp}. The expression should use the variable @code{year} to compute and return the date of a holiday, or @code{nil} if the holiday doesn't happen this year. The value of @var{sexp} must represent the date as a list of the form @code{(@var{month} @var{day} @var{year})}. @var{string} is the name of the holiday. @item (if @var{condition} @var{holiday-form} &optional @var{holiday-form}) A holiday that happens only if @var{condition} is true. @item (@var{function} @r{[}@var{args}@r{]}) A list of dates calculated by the function @var{function}, called with arguments @var{args}. @end table For example, suppose you want to add Bastille Day, celebrated in France on July 14. You can do this by adding the following line to your init file: @smallexample (setq other-holidays '((holiday-fixed 7 14 "Bastille Day"))) @end smallexample @xref{Init File}. @noindent The holiday form @code{(holiday-fixed 7 14 "Bastille Day")} specifies the fourteenth day of the seventh month (July). Many holidays occur on a specific day of the week, at a specific time of month. Here is a holiday form describing Hurricane Supplication Day, celebrated in the Virgin Islands on the fourth Monday in August: @smallexample (holiday-float 8 1 4 "Hurricane Supplication Day") @end smallexample @noindent Here the 8 specifies August, the 1 specifies Monday (Sunday is 0, Tuesday is 2, and so on), and the 4 specifies the fourth occurrence in the month (1 specifies the first occurrence, 2 the second occurrence, @minus{}1 the last occurrence, @minus{}2 the second-to-last occurrence, and so on). You can specify holidays that occur on fixed days of the Hebrew, Islamic, and Julian calendars too. For example, @smallexample (setq other-holidays '((holiday-hebrew 10 2 "Last day of Hanukkah") (holiday-islamic 3 12 "Mohammed's Birthday") (holiday-julian 4 2 "Jefferson's Birthday"))) @end smallexample @noindent adds the last day of Hanukkah (since the Hebrew months are numbered with 1 starting from Nisan), the Islamic feast celebrating Mohammed's birthday (since the Islamic months are numbered from 1 starting with Muharram), and Thomas Jefferson's birthday, which is 2 April 1743 on the Julian calendar. To include a holiday conditionally, use either Emacs Lisp's @code{if} or the @code{holiday-sexp} form. For example, American presidential elections occur on the first Tuesday after the first Monday in November of years divisible by 4: @smallexample (holiday-sexp (if (= 0 (% year 4)) (calendar-gregorian-from-absolute (1+ (calendar-dayname-on-or-before 1 (+ 6 (calendar-absolute-from-gregorian (list 11 1 year)))))) "US Presidential Election")) @end smallexample @noindent or @smallexample (if (= 0 (% displayed-year 4)) (fixed 11 (extract-calendar-day (calendar-gregorian-from-absolute (1+ (calendar-dayname-on-or-before 1 (+ 6 (calendar-absolute-from-gregorian (list 11 1 displayed-year))))))) "US Presidential Election")) @end smallexample Some holidays just don't fit into any of these forms because special calculations are involved in their determination. In such cases you must write a Lisp function to do the calculation. To include eclipses, for example, add @code{(eclipses)} to @code{other-holidays} and write an Emacs Lisp function @code{eclipses} that returns a (possibly empty) list of the relevant Gregorian dates among the range visible in the calendar window, with descriptive strings, like this: @smallexample (((6 27 1991) "Lunar Eclipse") ((7 11 1991) "Solar Eclipse") ... ) @end smallexample @node Date Display Format @subsubsection Date Display Format @vindex calendar-date-display-form You can customize the manner of displaying dates in the diary, in mode lines, and in messages by setting @code{calendar-date-display-form}. This variable holds a list of expressions that can involve the variables @code{month}, @code{day}, and @code{year}, which are all numbers in string form, and @code{monthname} and @code{dayname}, which are both alphabetic strings. In the American style, the default value of this list is as follows: @smallexample ((if dayname (concat dayname ", ")) monthname " " day ", " year) @end smallexample @noindent while in the European style this value is the default: @smallexample ((if dayname (concat dayname ", ")) day " " monthname " " year) @end smallexample +@noindent The ISO standard date representation is this: @smallexample (year "-" month "-" day) @end smallexample @noindent This specifies a typical American format: @smallexample (month "/" day "/" (substring year -2)) @end smallexample @node Time Display Format @subsubsection Time Display Format @vindex calendar-time-display-form The calendar and diary by default display times of day in the conventional American style with the hours from 1 through 12, minutes, and either @samp{am} or @samp{pm}. If you prefer the European style, also known in the US as military, in which the hours go from 00 to 23, you can alter the variable @code{calendar-time-display-form}. This variable is a list of expressions that can involve the variables @code{12-hours}, @code{24-hours}, and @code{minutes}, which are all numbers in string form, and @code{am-pm} and @code{time-zone}, which are both alphabetic strings. The default value of @code{calendar-time-display-form} is as follows: @smallexample (12-hours ":" minutes am-pm (if time-zone " (") time-zone (if time-zone ")")) @end smallexample @noindent Here is a value that provides European style times: @smallexample (24-hours ":" minutes (if time-zone " (") time-zone (if time-zone ")")) @end smallexample @noindent gives military-style times like @samp{21:07 (UT)} if time zone names are defined, and times like @samp{21:07} if they are not. @node Daylight Savings @subsubsection Daylight Savings Time @cindex daylight savings time Emacs understands the difference between standard time and daylight savings time---the times given for sunrise, sunset, solstices, equinoxes, and the phases of the moon take that into account. The rules for daylight savings time vary from place to place and have also varied historically from year to year. To do the job properly, Emacs needs to know which rules to use. Some operating systems keep track of the rules that apply to the place where you are; on these systems, Emacs gets the information it needs from the system automatically. If some or all of this information is missing, Emacs fills in the gaps with the rules currently used in Cambridge, Massachusetts. If the resulting rules are not what you want, you can tell Emacs the rules to use by setting certain variables. @vindex calendar-daylight-savings-starts @vindex calendar-daylight-savings-ends If the default choice of rules is not appropriate for your location, you can tell Emacs the rules to use by setting the variables @code{calendar-daylight-savings-starts} and @code{calendar-daylight-savings-ends}. Their values should be Lisp expressions that refer to the variable @code{year}, and evaluate to the Gregorian date on which daylight savings time starts or (respectively) ends, in the form of a list @code{(@var{month} @var{day} @var{year})}. The values should be @code{nil} if your area does not use daylight savings time. Emacs uses these expressions to determine the starting date of daylight savings time for the holiday list and for correcting times of day in the solar and lunar calculations. The values for Cambridge, Massachusetts are as follows: @example @group (calendar-nth-named-day 1 0 4 year) (calendar-nth-named-day -1 0 10 year) @end group @end example @noindent That is, the first 0th day (Sunday) of the fourth month (April) in the year specified by @code{year}, and the last Sunday of the tenth month (October) of that year. If daylight savings time were changed to start on October 1, you would set @code{calendar-daylight-savings-starts} to this: @example (list 10 1 year) @end example For a more complex example, suppose daylight savings time begins on the first of Nisan on the Hebrew calendar. You should set @code{calendar-daylight-savings-starts} to this value: @example (calendar-gregorian-from-absolute (calendar-absolute-from-hebrew (list 1 1 (+ year 3760)))) @end example @noindent because Nisan is the first month in the Hebrew calendar and the Hebrew year differs from the Gregorian year by 3760 at Nisan. If there is no daylight savings time at your location, or if you want all times in standard time, set @code{calendar-daylight-savings-starts} and @code{calendar-daylight-savings-ends} to @code{nil}. @vindex calendar-daylight-time-offset The variable @code{calendar-daylight-time-offset} specifies the difference between daylight savings time and standard time, measured in minutes. The value for Cambridge, Massachusetts is 60. @c @vindex calendar-daylight-savings-starts-time too long! @vindex calendar-daylight-savings-ends-time The two variables @code{calendar-daylight-savings-starts-time} and @code{calendar-daylight-savings-ends-time} specify the number of minutes after midnight local time when the transition to and from daylight savings time should occur. For Cambridge, Massachusetts both variables' values are 120. @node Diary Customizing @subsubsection Customizing the Diary @vindex holidays-in-diary-buffer Ordinarily, the mode line of the diary buffer window indicates any holidays that fall on the date of the diary entries. The process of checking for holidays can take several seconds, so including holiday information delays the display of the diary buffer noticeably. If you'd prefer to have a faster display of the diary buffer but without the holiday information, set the variable @code{holidays-in-diary-buffer} to @code{nil}.@refill @vindex number-of-diary-entries The variable @code{number-of-diary-entries} controls the number of days of diary entries to be displayed at one time. It affects the initial display when @code{view-diary-entries-initially} is @code{t}, as well as the command @kbd{M-x diary}. For example, the default value is 1, which says to display only the current day's diary entries. If the value is 2, both the current day's and the next day's entries are displayed. The value can also be a vector of seven elements: for example, if the value is @code{[0 2 2 2 2 4 1]} then no diary entries appear on Sunday, the current date's and the next day's diary entries appear Monday through Thursday, Friday through Monday's entries appear on Friday, while on Saturday only that day's entries appear. @vindex print-diary-entries-hook @findex print-diary-entries The variable @code{print-diary-entries-hook} is a normal hook run after preparation of a temporary buffer containing just the diary entries currently visible in the diary buffer. (The other, irrelevant diary entries are really absent from the temporary buffer; in the diary buffer, they are merely hidden.) The default value of this hook does the printing with the command @code{lpr-buffer}. If you want to use a different command to do the printing, just change the value of this hook. Other uses might include, for example, rearranging the lines into order by day and time. @vindex diary-date-forms You can customize the form of dates in your diary file, if neither the standard American nor European styles suits your needs, by setting the variable @code{diary-date-forms}. This variable is a list of patterns for recognizing a date. Each date pattern is a list whose elements may be regular expressions (@pxref{Regexps}) or the symbols @code{month}, @code{day}, @code{year}, @code{monthname}, and @code{dayname}. All these elements serve as patterns that match certain kinds of text in the diary file. In order for the date pattern, as a whole, to match, all of its elements must match consecutively. A regular expression in a date pattern matches in its usual fashion, using the standard syntax table altered so that @samp{*} is a word constituent. The symbols @code{month}, @code{day}, @code{year}, @code{monthname}, and @code{dayname} match the month number, day number, year number, month name, and day name of the date being considered. The symbols that match numbers allow leading zeros; those that match names allow three-letter abbreviations and capitalization. All the symbols can match @samp{*}; since @samp{*} in a diary entry means ``any day'', ``any month'', and so on, it should match regardless of the date being considered. The default value of @code{diary-date-forms} in the American style is this: @example ((month "/" day "[^/0-9]") (month "/" day "/" year "[^0-9]") (monthname " *" day "[^,0-9]") (monthname " *" day ", *" year "[^0-9]") (dayname "\\W")) @end example @noindent Emacs matches of the diary entries with the date forms is done with the standard syntax table from Fundamental mode (@pxref{Syntax Tables,,,lispref,XEmacs Lisp Reference Manual}), but with the @samp{*} changed so that it is a word constituent.@refill The date patterns in the list must be @emph{mutually exclusive} and must not match any portion of the diary entry itself, just the date and one character of whitespace. If, to be mutually exclusive, the pattern must match a portion of the diary entry text---beyond the whitespace that ends the date---then the first element of the date pattern @emph{must} be @code{backup}. This causes the date recognizer to back up to the beginning of the current word of the diary entry, after finishing the match. Even if you use @code{backup}, the date pattern must absolutely not match more than a portion of the first word of the diary entry. The default value of @code{diary-date-forms} in the European style is this list: @example ((day "/" month "[^/0-9]") (day "/" month "/" year "[^0-9]") (backup day " *" monthname "\\W+\\<[^*0-9]") (day " *" monthname " *" year "[^0-9]") (dayname "\\W")) @end example @noindent Notice the use of @code{backup} in the third pattern, because it needs to match part of a word beyond the date itself to distinguish it from the fourth pattern. @node Hebrew/Islamic Entries @subsubsection Hebrew- and Islamic-Date Diary Entries Your diary file can have entries based on Hebrew or Islamic dates, as well as entries based on the world-standard Gregorian calendar. However, because recognition of such entries is time-consuming and most people don't use them, you must explicitly enable their use. If you want the diary to recognize Hebrew-date diary entries, for example, you must do this: @vindex nongregorian-diary-listing-hook @vindex nongregorian-diary-marking-hook @findex list-hebrew-diary-entries @findex mark-hebrew-diary-entries @smallexample (add-hook 'nongregorian-diary-listing-hook 'list-hebrew-diary-entries) (add-hook 'nongregorian-diary-marking-hook 'mark-hebrew-diary-entries) @end smallexample @noindent If you want Islamic-date entries, do this: @findex list-islamic-diary-entries @findex mark-islamic-diary-entries @smallexample (add-hook 'nongregorian-diary-listing-hook 'list-islamic-diary-entries) (add-hook 'nongregorian-diary-marking-hook 'mark-islamic-diary-entries) @end smallexample Hebrew- and Islamic-date diary entries have the same formats as Gregorian-date diary entries, except that @samp{H} precedes a Hebrew date and @samp{I} precedes an Islamic date. Moreover, because the Hebrew and Islamic month names are not uniquely specified by the first three letters, you may not abbreviate them. For example, a diary entry for the Hebrew date Heshvan 25 could look like this: @smallexample HHeshvan 25 Happy Hebrew birthday! @end smallexample @noindent and would appear in the diary for any date that corresponds to Heshvan 25 on the Hebrew calendar. And here is Islamic-date diary entry that matches Dhu al-Qada 25: @smallexample IDhu al-Qada 25 Happy Islamic birthday! @end smallexample @noindent and would appear in the diary for any date that corresponds to Dhu al-Qada 25 on the Islamic calendar. As with Gregorian-date diary entries, Hebrew- and Islamic-date entries are nonmarking if they are preceded with an ampersand (@samp{&}). Here is a table of commands used in the calendar to create diary entries that match the selected date and other dates that are similar in the Hebrew or Islamic calendar: @table @kbd @item i h d Add a diary entry for the Hebrew date corresponding to the selected date (@code{insert-hebrew-diary-entry}). @item i h m Add a diary entry for the day of the Hebrew month corresponding to the selected date (@code{insert-monthly-hebrew-diary-entry}). This diary entry matches any date that has the same Hebrew day-within-month as the selected date. @item i h y Add a diary entry for the day of the Hebrew year corresponding to the selected date (@code{insert-yearly-hebrew-diary-entry}). This diary entry matches any date which has the same Hebrew month and day-within-month as the selected date. @item i i d Add a diary entry for the Islamic date corresponding to the selected date (@code{insert-islamic-diary-entry}). @item i i m Add a diary entry for the day of the Islamic month corresponding to the selected date (@code{insert-monthly-islamic-diary-entry}). @item i i y Add a diary entry for the day of the Islamic year corresponding to the selected date (@code{insert-yearly-islamic-diary-entry}). @end table @findex insert-hebrew-diary-entry @findex insert-monthly-hebrew-diary-entry @findex insert-yearly-hebrew-diary-entry @findex insert-islamic-diary-entry @findex insert-monthly-islamic-diary-entry @findex insert-yearly-islamic-diary-entry These commands work much like the corresponding commands for ordinary diary entries: they apply to the date that point is on in the calendar window, and what they do is insert just the date portion of a diary entry at the end of your diary file. You must then insert the rest of the diary entry. @node Fancy Diary Display @subsubsection Fancy Diary Display @vindex diary-display-hook @findex simple-diary-display Diary display works by preparing the diary buffer and then running the hook @code{diary-display-hook}. The default value of this hook (@code{simple-diary-display}) hides the irrelevant diary entries and then displays the buffer. However, if you specify the hook as follows, @cindex diary buffer @findex fancy-diary-display @example (add-hook 'diary-display-hook 'fancy-diary-display) @end example @noindent this enables fancy diary display. It displays diary entries and holidays by copying them into a special buffer that exists only for the sake of display. Copying to a separate buffer provides an opportunity to change the displayed text to make it prettier---for example, to sort the entries by the dates they apply to. As with simple diary display, you can print a hard copy of the buffer with @code{print-diary-entries}. To print a hard copy of a day-by-day diary for a week by positioning point on Sunday of that week, type @kbd{7 d} and then do @kbd{M-x print-diary-entries}. As usual, the inclusion of the holidays slows down the display slightly; you can speed things up by setting the variable @code{holidays-in-diary-buffer} to @code{nil}. @vindex diary-list-include-blanks Ordinarily, the fancy diary buffer does not show days for which there are no diary entries, even if that day is a holiday. If you want such days to be shown in the fancy diary buffer, set the variable @code{diary-list-include-blanks} to @code{t}.@refill @cindex sorting diary entries If you use the fancy diary display, you can use the normal hook @code{list-diary-entries-hook} to sort each day's diary entries by their time of day. Add this line to your init file: @findex sort-diary-entries @example (add-hook 'list-diary-entries-hook 'sort-diary-entries t) @end example @xref{Init File}. @noindent For each day, this sorts diary entries that begin with a recognizable time of day according to their times. Diary entries without times come first within each day. @node Included Diary Files @subsubsection Included Diary Files Fancy diary display also has the ability to process included diary files. This permits a group of people to share a diary file for events that apply to all of them. Lines in the diary file of this form: @smallexample #include "@var{filename}" @end smallexample @noindent includes the diary entries from the file @var{filename} in the fancy diary buffer. The include mechanism is recursive, so that included files can include other files, and so on; you must be careful not to have a cycle of inclusions, of course. Here is how to enable the include facility: @vindex list-diary-entries-hook @vindex mark-diary-entries-hook @findex include-other-diary-files @findex mark-included-diary-files @smallexample (add-hook 'list-diary-entries-hook 'include-other-diary-files) (add-hook 'mark-diary-entries-hook 'mark-included-diary-files) @end smallexample The include mechanism works only with the fancy diary display, because ordinary diary display shows the entries directly from your diary file. @node Sexp Diary Entries @subsubsection Sexp Entries and the Fancy Diary Display @cindex sexp diary entries Sexp diary entries allow you to do more than just have complicated conditions under which a diary entry applies. If you use the fancy diary display, sexp entries can generate the text of the entry depending on the date itself. For example, an anniversary diary entry can insert the number of years since the anniversary date into the text of the diary entry. Thus the @samp{%d} in this dairy entry: @findex diary-anniversary @smallexample %%(diary-anniversary 10 31 1948) Arthur's birthday (%d years old) @end smallexample @noindent gets replaced by the age, so on October 31, 1990 the entry appears in the fancy diary buffer like this: @smallexample Arthur's birthday (42 years old) @end smallexample @noindent If the diary file instead contains this entry: @smallexample %%(diary-anniversary 10 31 1948) Arthur's %d%s birthday @end smallexample @noindent the entry in the fancy diary buffer for October 31, 1990 appears like this: @smallexample Arthur's 42nd birthday @end smallexample Similarly, cyclic diary entries can interpolate the number of repetitions that have occurred: @findex diary-cyclic @smallexample %%(diary-cyclic 50 1 1 1990) Renew medication (%d%s time) @end smallexample @noindent looks like this: @smallexample Renew medication (5th time) @end smallexample @noindent in the fancy diary display on September 8, 1990. The generality of sexp diary entries lets you specify any diary entry that you can describe algorithmically. A sexp diary entry contains an expression that computes whether the entry applies to any given date. If its value is non-@code{nil}, the entry applies to that date; otherwise, it does not. The expression can use the variable @code{date} to find the date being considered; its value is a list (@var{month} @var{day} @var{year}) that refers to the Gregorian calendar. Suppose you get paid on the 21st of the month if it is a weekday, and on the Friday before if the 21st is on a weekend. Here is how to write a sexp diary entry that matches those dates: @smallexample &%%(let ((dayname (calendar-day-of-week date)) (day (car (cdr date)))) (or (and (= day 21) (memq dayname '(1 2 3 4 5))) (and (memq day '(19 20)) (= dayname 5))) ) Pay check deposited @end smallexample @noindent applies to just those dates. This example illustrates how the sexp can depend on the variable @code{date}; this variable is a list (@var{month} @var{day} @var{year}) that gives the Gregorian date for which the diary entries are being found. If the value of the expression is @code{t}, the entry applies to that date. If the expression evaluates to @code{nil}, the entry does @emph{not} apply to that date. The following sexp diary entries take advantage of the ability (in the fancy diary display) to concoct diary entries whose text varies based on the date: @findex diary-sunrise-sunset @findex diary-phases-of-moon @findex diary-day-of-year @findex diary-iso-date @findex diary-julian-date @findex diary-astro-day-number @findex diary-hebrew-date @findex diary-islamic-date @findex diary-french-date @findex diary-mayan-date @table @code @item %%(diary-sunrise-sunset) Make a diary entry for the local times of today's sunrise and sunset. @item %%(diary-phases-of-moon) Make a diary entry for the phases (quarters) of the moon. @item %%(diary-day-of-year) Make a diary entry with today's day number in the current year and the number of days remaining in the current year. @item %%(diary-iso-date) Make a diary entry with today's equivalent ISO commercial date. @item %%(diary-julian-date) Make a diary entry with today's equivalent date on the Julian calendar. @item %%(diary-astro-day-number) Make a diary entry with today's equivalent astronomical (Julian) day number. @item %%(diary-hebrew-date) Make a diary entry with today's equivalent date on the Hebrew calendar. @item %%(diary-islamic-date) Make a diary entry with today's equivalent date on the Islamic calendar. @item %%(diary-french-date) Make a diary entry with today's equivalent date on the French Revolutionary calendar. @item %%(diary-mayan-date) Make a diary entry with today's equivalent date on the Mayan calendar. @end table @noindent Thus including the diary entry @smallexample &%%(diary-hebrew-date) @end smallexample @noindent causes every day's diary display to contain the equivalent date on the Hebrew calendar, if you are using the fancy diary display. (With simple diary display, the line @samp{&%%(diary-hebrew-date)} appears in the diary for any date, but does nothing particularly useful.) These functions can be used to construct sexp diary entries based on the Hebrew calendar in certain standard ways: @cindex rosh hodesh @findex diary-rosh-hodesh @cindex parasha, weekly @findex diary-parasha @cindex candle lighting times @findex diary-sabbath-candles @cindex omer count @findex diary-omer @cindex yahrzeits @findex diary-yahrzeit @table @code @item %%(diary-rosh-hodesh) Make a diary entry that tells the occurrence and ritual announcement of each new Hebrew month. @item %%(diary-parasha) Make a Saturday diary entry that tells the weekly synagogue scripture reading. @item %%(diary-sabbath-candles) Make a Friday diary entry that tells the @emph{local time} of Sabbath candle lighting. @item %%(diary-omer) Make a diary entry that gives the omer count, when appropriate. @item %%(diary-yahrzeit @var{month} @var{day} @var{year}) @var{name} Make a diary entry marking the anniversary of a date of death. The date is the @emph{Gregorian} (civil) date of death. The diary entry appears on the proper Hebrew calendar anniversary and on the day before. (In the European style, the order of the parameters is changed to @var{day}, @var{month}, @var{year}.) @end table @node Appt Customizing @subsubsection Customizing Appointment Reminders You can specify exactly how Emacs reminds you of an appointment, and how far in advance it begins doing so, by setting these variables: @vindex appt-message-warning-time @vindex appt-audible @vindex appt-visible @vindex appt-display-mode-line @vindex appt-msg-window @vindex appt-display-duration @table @code @item appt-message-warning-time The time in minutes before an appointment that the reminder begins. The default is 10 minutes. @item appt-audible If this is @code{t} (the default), Emacs rings the terminal bell for appointment reminders. @item appt-visible If this is @code{t} (the default), Emacs displays the appointment message in echo area. @item appt-display-mode-line If this is @code{t} (the default), Emacs displays the number of minutes to the appointment on the mode line. @item appt-msg-window If this is @code{t} (the default), Emacs displays the appointment message in another window. @item appt-display-duration The number of seconds an appointment message is displayed. The default is 5 seconds. @end table texi2html-1.82/test/xemacs_manual/mule.texi0000644000175000017500000007563511264347115022705 0ustar flichtenheldflichtenheld@c This is part of the Emacs manual. @c Copyright (C) 1997 Free Software Foundation, Inc. @c See file emacs.texi for copying conditions. @node Mule, Major Modes, Windows, Top @chapter World Scripts Support @cindex MULE @cindex international scripts @cindex multibyte characters @cindex encoding of characters @cindex Chinese @cindex Greek @cindex IPA @cindex Japanese @cindex Korean @cindex Cyrillic @cindex Russian If you compile XEmacs with Mule option, it supports a wide variety of world scripts, including Latin script, as well as Arabic script, Simplified Chinese script (for mainland of China), Traditional Chinese script (for Taiwan and Hong-Kong), Greek script, Hebrew script, IPA symbols, Japanese scripts (Hiragana, Katakana and Kanji), Korean scripts (Hangul and Hanja) and Cyrillic script (for Byelorussian, Bulgarian, Russian, Serbian and Ukrainian). These features have been merged from the modified version of Emacs known as MULE (for ``MULti-lingual Enhancement to GNU Emacs''). @menu * Mule Intro:: Basic concepts of Mule. * Language Environments:: Setting things up for the language you use. * Input Methods:: Entering text characters not on your keyboard. * Select Input Method:: Specifying your choice of input methods. * Mule and Fonts:: Additional font-related issues * Coding Systems:: Character set conversion when you read and write files, and so on. * Recognize Coding:: How XEmacs figures out which conversion to use. * Specify Coding:: Various ways to choose which conversion to use. @end menu @node Mule Intro, Language Environments, Mule, Mule @section What is Mule? Mule is the MUltiLingual Extension to XEmacs. It provides facilities not only for handling text written in many different languages, but in fact multilingual texts containing several languages in the same buffer. This goes beyond the simple facilities offered by Unicode for representation of multilingual text. Mule also supports input methods, composing display using fonts in various different encodings, changing character syntax and other editing facilities to correspond to local language usage, and more. The most obvious problem is that of the different character coding systems used by different languages. ASCII supplies all the characters needed for most computer programming languages and US English (it lacks the currency symbol for British English), but other Western European languages (French, Spanish, German) require more than 96 code positions for accented characters. In fact, even with 8 bits to represent 96 more character (including accented characters and symbols such as currency symbols), some languages' alphabets remain incomplete (Croatian, Polish). (The 64 "missing characters" are reserved for control characters.) Furthermore, many European languages have their own alphabets, which must conflict with the accented characters since the ASCII characters are needed for computer interaction (error and log messages are typically in ASCII). For economy of space, historical practice has been for each language to establish its own encoding for the characters it needs. This allows most European languages to represented with one octet (byte) per character. However, many Asian languages have thousands of characters and require two or more octets per character. For multilingual purposes, the ISO 2022 standard establishes escape codes that allow switching encodings in midstream. (It's also ISO 2022 that establishes the standard that code points 0-31 and 128-159 are control codes.) However, this is error-prone and complex for internal processing. For this reason XEmacs uses an internal coding system which can encode all of the world's scripts. Unfortunately, for historical reasons, this code is not Unicode, although we are moving in that direction. XEmacs translates between the internal character encoding and various other coding systems when reading and writing files, when exchanging data with subprocesses, and (in some cases) in the @kbd{C-q} command (see below). The internal encoding is never visible to the user in a production XEmacs, but unfortunately the process cannot be completely transparent to the user. This is because the same ranges of octets may represent 1-octet ISO-8859-1 (which is satisfactory for most Western European use prior to the introduction of the Euro currency), 1-octet ISO-8859-15 (which substitutes the Euro for the rarely used "generic currency" symbol), 1-octet ISO-8859-5 (Cyrillic), or multioctet EUC-JP (Japanese). There's no way to tell without being able to read! A number of heuristics are incorporated in Mule for automatic recognition, there are facilities for the user to set defaults, and where necessary (rarely, we hope) to set coding systems directly. @kindex C-h h @findex view-hello-file The command @kbd{C-h h} (@code{view-hello-file}) displays the file @file{etc/HELLO}, which shows how to say ``hello'' in many languages. This illustrates various scripts. Keyboards, even in the countries where these character sets are used, generally don't have keys for all the characters in them. So XEmacs supports various @dfn{input methods}, typically one for each script or language, to make it convenient to type them. @kindex C-x RET The prefix key @kbd{C-x @key{RET}} is used for commands that pertain to world scripts, coding systems, and input methods. @node Language Environments, Input Methods, Mule Intro, Mule @section Language Environments @cindex language environments All supported character sets are supported in XEmacs buffers if it is compiled with Mule; there is no need to select a particular language in order to display its characters in an XEmacs buffer. However, it is important to select a @dfn{language environment} in order to set various defaults. The language environment really represents a choice of preferred script (more or less) rather that a choice of language. The language environment controls which coding systems to recognize when reading text (@pxref{Recognize Coding}). This applies to files, incoming mail, netnews, and any other text you read into XEmacs. It may also specify the default coding system to use when you create a file. Each language environment also specifies a default input method. @findex set-language-environment The command to select a language environment is @kbd{M-x set-language-environment}. It makes no difference which buffer is current when you use this command, because the effects apply globally to the XEmacs session. The supported language environments include: @quotation ASCII, Chinese-BIG5, Chinese-GB, Croatian, Cyrillic-ALT, Cyrillic-ISO, Cyrillic-KOI8, Cyrillic-Win, Czech, English, Ethiopic, French, German, Greek, Hebrew, IPA, Japanese, Korean, Latin-1, Latin-2, Latin-3, Latin-4, Latin-5, Norwegian, Polish, Romanian, Slovenian, Thai-XTIS, Vietnamese. @end quotation Some operating systems let you specify the language you are using by setting locale environment variables. XEmacs handles one common special case of this: if your locale name for character types contains the string @samp{8859-@var{n}}, XEmacs automatically selects the corresponding language environment. @kindex C-h L @findex describe-language-environment To display information about the effects of a certain language environment @var{lang-env}, use the command @kbd{C-h L @var{lang-env} @key{RET}} (@code{describe-language-environment}). This tells you which languages this language environment is useful for, and lists the character sets, coding systems, and input methods that go with it. It also shows some sample text to illustrate scripts used in this language environment. By default, this command describes the chosen language environment. @node Input Methods, Select Input Method, Language Environments, Mule @section Input Methods @cindex input methods An @dfn{input method} is a kind of character conversion designed specifically for interactive input. In XEmacs, typically each language has its own input method; sometimes several languages which use the same characters can share one input method. A few languages support several input methods. The simplest kind of input method works by mapping ASCII letters into another alphabet. This is how the Greek and Russian input methods work. A more powerful technique is composition: converting sequences of characters into one letter. Many European input methods use composition to produce a single non-ASCII letter from a sequence that consists of a letter followed by accent characters. For example, some methods convert the sequence @kbd{'a} into a single accented letter. The input methods for syllabic scripts typically use mapping followed by composition. The input methods for Thai and Korean work this way. First, letters are mapped into symbols for particular sounds or tone marks; then, sequences of these which make up a whole syllable are mapped into one syllable sign. Chinese and Japanese require more complex methods. In Chinese input methods, first you enter the phonetic spelling of a Chinese word (in input method @code{chinese-py}, among others), or a sequence of portions of the character (input methods @code{chinese-4corner} and @code{chinese-sw}, and others). Since one phonetic spelling typically corresponds to many different Chinese characters, you must select one of the alternatives using special XEmacs commands. Keys such as @kbd{C-f}, @kbd{C-b}, @kbd{C-n}, @kbd{C-p}, and digits have special definitions in this situation, used for selecting among the alternatives. @key{TAB} displays a buffer showing all the possibilities. In Japanese input methods, first you input a whole word using phonetic spelling; then, after the word is in the buffer, XEmacs converts it into one or more characters using a large dictionary. One phonetic spelling corresponds to many differently written Japanese words, so you must select one of them; use @kbd{C-n} and @kbd{C-p} to cycle through the alternatives. Sometimes it is useful to cut off input method processing so that the characters you have just entered will not combine with subsequent characters. For example, in input method @code{latin-1-postfix}, the sequence @kbd{e '} combines to form an @samp{e} with an accent. What if you want to enter them as separate characters? One way is to type the accent twice; that is a special feature for entering the separate letter and accent. For example, @kbd{e ' '} gives you the two characters @samp{e'}. Another way is to type another letter after the @kbd{e}---something that won't combine with that---and immediately delete it. For example, you could type @kbd{e e @key{DEL} '} to get separate @samp{e} and @samp{'}. Another method, more general but not quite as easy to type, is to use @kbd{C-\ C-\} between two characters to stop them from combining. This is the command @kbd{C-\} (@code{toggle-input-method}) used twice. @ifinfo @xref{Select Input Method}. @end ifinfo @kbd{C-\ C-\} is especially useful inside an incremental search, because stops waiting for more characters to combine, and starts searching for what you have already entered. @vindex input-method-verbose-flag @vindex input-method-highlight-flag The variables @code{input-method-highlight-flag} and @code{input-method-verbose-flag} control how input methods explain what is happening. If @code{input-method-highlight-flag} is non-@code{nil}, the partial sequence is highlighted in the buffer. If @code{input-method-verbose-flag} is non-@code{nil}, the list of possible characters to type next is displayed in the echo area (but not when you are in the minibuffer). @node Select Input Method, Mule and Fonts, Input Methods, Mule @section Selecting an Input Method @table @kbd @item C-\ Enable or disable use of the selected input method. @item C-x @key{RET} C-\ @var{method} @key{RET} Select a new input method for the current buffer. @item C-h I @var{method} @key{RET} @itemx C-h C-\ @var{method} @key{RET} @findex describe-input-method @kindex C-h I @kindex C-h C-\ Describe the input method @var{method} (@code{describe-input-method}). By default, it describes the current input method (if any). @item M-x list-input-methods Display a list of all the supported input methods. @end table @findex select-input-method @vindex current-input-method @kindex C-x RET C-\ To choose an input method for the current buffer, use @kbd{C-x @key{RET} C-\} (@code{select-input-method}). This command reads the input method name with the minibuffer; the name normally starts with the language environment that it is meant to be used with. The variable @code{current-input-method} records which input method is selected. @findex toggle-input-method @kindex C-\ Input methods use various sequences of ASCII characters to stand for non-ASCII characters. Sometimes it is useful to turn off the input method temporarily. To do this, type @kbd{C-\} (@code{toggle-input-method}). To reenable the input method, type @kbd{C-\} again. If you type @kbd{C-\} and you have not yet selected an input method, it prompts for you to specify one. This has the same effect as using @kbd{C-x @key{RET} C-\} to specify an input method. @vindex default-input-method Selecting a language environment specifies a default input method for use in various buffers. When you have a default input method, you can select it in the current buffer by typing @kbd{C-\}. The variable @code{default-input-method} specifies the default input method (@code{nil} means there is none). @findex quail-set-keyboard-layout Some input methods for alphabetic scripts work by (in effect) remapping the keyboard to emulate various keyboard layouts commonly used for those scripts. How to do this remapping properly depends on your actual keyboard layout. To specify which layout your keyboard has, use the command @kbd{M-x quail-set-keyboard-layout}. @findex list-input-methods To display a list of all the supported input methods, type @kbd{M-x list-input-methods}. The list gives information about each input method, including the string that stands for it in the mode line. @node Mule and Fonts, Coding Systems, Select Input Method, Mule @section Mule and Fonts @cindex fonts @cindex font registry @cindex font encoding @cindex CCL programs (This section is X11-specific.) Text in XEmacs buffers is displayed using various faces. In addition to specifying properties of a face, such as font and color, there are some additional properties of Mule charsets that are used in text. There is currently two properties of a charset that could be adjusted by user: font registry and so called @dfn{ccl-program}. Font registry is a regular expression matching the font registry field for this character set. For example, both the @code{ascii} and @w{@code{latin-iso8859-1}} charsets use the registry @code{"ISO8859-1"}. This field is used to choose an appropriate font when the user gives a general font specification such as @w{@samp{-*-courier-medium-r-*-140-*}}, i.e. a 14-point upright medium-weight Courier font. You can set font registry for a charset using @samp{set-charset-registry} function in one of your startup files. This function takes two arguments: character set (as a symbol) and font registry (as a string). E.@w{ }g., for Cyrillic texts Mule uses @w{@code{cyrillic-iso8859-5}} charset with @samp{"ISO8859-5"} as a default registry, and we want to use @samp{"koi8-r"} instead, because fonts in that encoding are installed on our system. Use: @example (set-charset-registry 'cyrillic-iso8859-5 "koi8-r") @end example (Please note that you probably also want to set font registry for @samp{ascii} charset so that mixed English/Cyrillic texts be displayed using the same font.) "CCL-programs" are a little special-purpose scripts defined within XEmacs or in some package. Those scripts allow XEmacs to use fonts that are in different encoding from the encoding that is used by Mule for text in buffer. Returning to the above example, we need to somehow tell XEmacs that we have different encodings of fonts and text and so it needs to convert characters between those encodings when displaying. That's what @samp{set-charset-ccl-program} function is used for. There are quite a few various CCL programs defined within XEmacs, and there is no comprehensive list of them, so you currently have to consult sources. @c FIXME: there must be a list of CCL programs We know that there is a CCL program called @samp{ccl-encode-koi8-r-font} that is used exactly for needed purpose: to convert characters between @samp{ISO8859-5} encoding and @samp{koi8-r}. Use: @example (set-charset-ccl-program 'cyrillic-iso8859-5 'ccl-encode-koi8-r-font) @end example There are several more uses for CCL programs, not related to fonts, but those uses are not described here. @node Coding Systems, Recognize Coding, Mule and Fonts, Mule @section Coding Systems @cindex coding systems Users of various languages have established many more-or-less standard coding systems for representing them. XEmacs does not use these coding systems internally; instead, it converts from various coding systems to its own system when reading data, and converts the internal coding system to other coding systems when writing data. Conversion is possible in reading or writing files, in sending or receiving from the terminal, and in exchanging data with subprocesses. XEmacs assigns a name to each coding system. Most coding systems are used for one language, and the name of the coding system starts with the language name. Some coding systems are used for several languages; their names usually start with @samp{iso}. There are also special coding systems @code{binary} and @code{no-conversion} which do not convert printing characters at all. In addition to converting various representations of non-ASCII characters, a coding system can perform end-of-line conversion. XEmacs handles three different conventions for how to separate lines in a file: newline, carriage-return linefeed, and just carriage-return. @table @kbd @item C-h C @var{coding} @key{RET} Describe coding system @var{coding}. @item C-h C @key{RET} Describe the coding systems currently in use. @item M-x list-coding-systems Display a list of all the supported coding systems. @item C-u M-x list-coding-systems Display comprehensive list of specific details of all supported coding systems. @end table @kindex C-x @key{RET} C @findex describe-coding-system The command @kbd{C-x RET C} (@code{describe-coding-system}) displays information about particular coding systems. You can specify a coding system name as argument; alternatively, with an empty argument, it describes the coding systems currently selected for various purposes, both in the current buffer and as the defaults, and the priority list for recognizing coding systems (@pxref{Recognize Coding}). @findex list-coding-systems To display a list of all the supported coding systems, type @kbd{M-x list-coding-systems}. The list gives information about each coding system, including the letter that stands for it in the mode line (@pxref{Mode Line}). Each of the coding systems that appear in this list---except for @code{binary}, which means no conversion of any kind---specifies how and whether to convert printing characters, but leaves the choice of end-of-line conversion to be decided based on the contents of each file. For example, if the file appears to use carriage-return linefeed between lines, that end-of-line conversion will be used. Each of the listed coding systems has three variants which specify exactly what to do for end-of-line conversion: @table @code @item @dots{}-unix Don't do any end-of-line conversion; assume the file uses newline to separate lines. (This is the convention normally used on Unix and GNU systems.) @item @dots{}-dos Assume the file uses carriage-return linefeed to separate lines, and do the appropriate conversion. (This is the convention normally used on Microsoft systems.) @item @dots{}-mac Assume the file uses carriage-return to separate lines, and do the appropriate conversion. (This is the convention normally used on the Macintosh system.) @end table These variant coding systems are omitted from the @code{list-coding-systems} display for brevity, since they are entirely predictable. For example, the coding system @code{iso-8859-1} has variants @code{iso-8859-1-unix}, @code{iso-8859-1-dos} and @code{iso-8859-1-mac}. In contrast, the coding system @code{binary} specifies no character code conversion at all---none for non-Latin-1 byte values and none for end of line. This is useful for reading or writing binary files, tar files, and other files that must be examined verbatim. The easiest way to edit a file with no conversion of any kind is with the @kbd{M-x find-file-literally} command. This uses @code{binary}, and also suppresses other XEmacs features that might convert the file contents before you see them. @xref{Visiting}. The coding system @code{no-conversion} means that the file contains non-Latin-1 characters stored with the internal XEmacs encoding. It handles end-of-line conversion based on the data encountered, and has the usual three variants to specify the kind of end-of-line conversion. @node Recognize Coding, Specify Coding, Coding Systems, Mule @section Recognizing Coding Systems @c #### This section is out of date. The following set-*-coding-system @c functions are known: @c set-buffer-file-coding-system @c set-buffer-file-coding-system-for-read @c set-buffer-process-coding-system @c set-console-tty-coding-system @c set-console-tty-input-coding-system @c set-console-tty-output-coding-system @c set-default-buffer-file-coding-system @c set-default-coding-systems @c set-default-file-coding-system @c set-file-coding-system @c set-file-coding-system-for-read @c set-keyboard-coding-system @c set-pathname-coding-system @c set-process-coding-system @c set-process-input-coding-system @c set-process-output-coding-system @c set-terminal-coding-system @c Some are marked as broken. Agenda: (1) Update this section using @c docstrings. Note that they may be inaccurate. (2) Correct the @c documentation here, updating docstrings at the same time. @c Document this. @c set-language-environment-coding-systems @c What are these? @c dontusethis-set-value-file-name-coding-system-handler @c dontusethis-set-value-keyboard-coding-system-handler @c dontusethis-set-value-terminal-coding-system-handler Most of the time, XEmacs can recognize which coding system to use for any given file--once you have specified your preferences. Some coding systems can be recognized or distinguished by which byte sequences appear in the data. However, there are coding systems that cannot be distinguished, not even potentially. For example, there is no way to distinguish between Latin-1 and Latin-2; they use the same byte values with different meanings. XEmacs handles this situation by means of a priority list of coding systems. Whenever XEmacs reads a file, if you do not specify the coding system to use, XEmacs checks the data against each coding system, starting with the first in priority and working down the list, until it finds a coding system that fits the data. Then it converts the file contents assuming that they are represented in this coding system. The priority list of coding systems depends on the selected language environment (@pxref{Language Environments}). For example, if you use French, you probably want XEmacs to prefer Latin-1 to Latin-2; if you use Czech, you probably want Latin-2 to be preferred. This is one of the reasons to specify a language environment. @findex prefer-coding-system However, you can alter the priority list in detail with the command @kbd{M-x prefer-coding-system}. This command reads the name of a coding system from the minibuffer, and adds it to the front of the priority list, so that it is preferred to all others. If you use this command several times, each use adds one element to the front of the priority list. @vindex file-coding-system-alist Sometimes a file name indicates which coding system to use for the file. The variable @code{file-coding-system-alist} specifies this correspondence. There is a special function @code{modify-coding-system-alist} for adding elements to this list. For example, to read and write all @samp{.txt} using the coding system @code{china-iso-8bit}, you can execute this Lisp expression: @smallexample (modify-coding-system-alist 'file "\\.txt\\'" 'china-iso-8bit) @end smallexample @noindent The first argument should be @code{file}, the second argument should be a regular expression that determines which files this applies to, and the third argument says which coding system to use for these files. @vindex coding You can specify the coding system for a particular file using the @samp{-*-@dots{}-*-} construct at the beginning of a file, or a local variables list at the end (@pxref{File Variables}). You do this by defining a value for the ``variable'' named @code{coding}. XEmacs does not really have a variable @code{coding}; instead of setting a variable, it uses the specified coding system for the file. For example, @samp{-*-mode: C; coding: iso-8859-1;-*-} specifies use of the iso-8859-1 coding system, as well as C mode. @vindex buffer-file-coding-system Once XEmacs has chosen a coding system for a buffer, it stores that coding system in @code{buffer-file-coding-system} and uses that coding system, by default, for operations that write from this buffer into a file. This includes the commands @code{save-buffer} and @code{write-region}. If you want to write files from this buffer using a different coding system, you can specify a different coding system for the buffer using @code{set-buffer-file-coding-system} (@pxref{Specify Coding}). @node Specify Coding, , Recognize Coding, Mule @section Specifying a Coding System In cases where XEmacs does not automatically choose the right coding system, you can use these commands to specify one: @table @kbd @item C-x @key{RET} f @var{coding} @key{RET} Use coding system @var{coding} for the visited file in the current buffer. @item C-x @key{RET} c @var{coding} @key{RET} Specify coding system @var{coding} for the immediately following command. @item C-x @key{RET} k @var{coding} @key{RET} Use coding system @var{coding} for keyboard input. (This feature is non-functional and is temporarily disabled.) @item C-x @key{RET} t @var{coding} @key{RET} Use coding system @var{coding} for terminal output. @item C-x @key{RET} p @var{coding} @key{RET} Use coding system @var{coding} for subprocess input and output in the current buffer. @end table @kindex C-x RET f @findex set-buffer-file-coding-system The command @kbd{C-x RET f} (@code{set-buffer-file-coding-system}) specifies the file coding system for the current buffer---in other words, which coding system to use when saving or rereading the visited file. You specify which coding system using the minibuffer. Since this command applies to a file you have already visited, it affects only the way the file is saved. @kindex C-x RET c @findex universal-coding-system-argument Another way to specify the coding system for a file is when you visit the file. First use the command @kbd{C-x @key{RET} c} (@code{universal-coding-system-argument}); this command uses the minibuffer to read a coding system name. After you exit the minibuffer, the specified coding system is used for @emph{the immediately following command}. So if the immediately following command is @kbd{C-x C-f}, for example, it reads the file using that coding system (and records the coding system for when the file is saved). Or if the immediately following command is @kbd{C-x C-w}, it writes the file using that coding system. Other file commands affected by a specified coding system include @kbd{C-x C-i} and @kbd{C-x C-v}, as well as the other-window variants of @kbd{C-x C-f}. In addition, if you run some file input commands with the precedent @kbd{C-u}, you can specify coding system to read from minibuffer. So if the immediately following command is @kbd{C-x C-f}, for example, it reads the file using that coding system (and records the coding system for when the file is saved). Other file commands affected by a specified coding system include @kbd{C-x C-i} and @kbd{C-x C-v}, as well as the other-window variants of @kbd{C-x C-f}. @vindex default-buffer-file-coding-system The variable @code{default-buffer-file-coding-system} specifies the choice of coding system to use when you create a new file. It applies when you find a new file, and when you create a buffer and then save it in a file. Selecting a language environment typically sets this variable to a good choice of default coding system for that language environment. @kindex C-x RET t @findex set-terminal-coding-system The command @kbd{C-x @key{RET} t} (@code{set-terminal-coding-system}) specifies the coding system for terminal output. If you specify a character code for terminal output, all characters output to the terminal are translated into that coding system. This feature is useful for certain character-only terminals built to support specific languages or character sets---for example, European terminals that support one of the ISO Latin character sets. By default, output to the terminal is not translated at all. @kindex C-x RET k @findex set-keyboard-coding-system The command @kbd{C-x @key{RET} k} (@code{set-keyboard-coding-system}) specifies the coding system for keyboard input. Character-code translation of keyboard input is useful for terminals with keys that send non-ASCII graphic characters---for example, some terminals designed for ISO Latin-1 or subsets of it. By default, keyboard input is not translated at all. There is a similarity between using a coding system translation for keyboard input, and using an input method: both define sequences of keyboard input that translate into single characters. However, input methods are designed to be convenient for interactive use by humans, and the sequences that are translated are typically sequences of ASCII printing characters. Coding systems typically translate sequences of non-graphic characters. (This feature is non-functional and is temporarily disabled.) @kindex C-x RET p @findex set-buffer-process-coding-system The command @kbd{C-x @key{RET} p} (@code{set-buffer-process-coding-system}) specifies the coding system for input and output to a subprocess. This command applies to the current buffer; normally, each subprocess has its own buffer, and thus you can use this command to specify translation to and from a particular subprocess by giving the command in the corresponding buffer. By default, process input and output are not translated at all. @vindex file-name-coding-system The variable @code{file-name-coding-system} specifies a coding system to use for encoding file names. If you set the variable to a coding system name (as a Lisp symbol or a string), XEmacs encodes file names using that coding system for all file operations. This makes it possible to use non-Latin-1 characters in file names---or, at least, those non-Latin-1 characters which the specified coding system can encode. By default, this variable is @code{nil}, which implies that you cannot use non-Latin-1 characters in file names. texi2html-1.82/test/xemacs_manual/entering.texi0000644000175000017500000001732511264347115023546 0ustar flichtenheldflichtenheld@c This is part of the XEmacs manual. @c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995 Free Software Foundation, Inc. @c See file xemacs.texi for copying conditions. @node Entering Emacs, Exiting, Pull-down Menus, Top @chapter Entering and Exiting Emacs @cindex entering XEmacs @cindex starting XEmacs The usual way to invoke XEmacs is to type @kbd{xemacs @key{RET}} at the shell. XEmacs clears the screen and then displays an initial advisory message and copyright notice. You can begin typing XEmacs commands immediately afterward. Some operating systems insist on discarding all type-ahead when XEmacs starts up; they give XEmacs no way to prevent this. Therefore, it is advisable to wait until XEmacs clears the screen before typing your first editing command. If you run XEmacs from a shell window under the X Window System, run it in the background with @samp{xemacs&}. This way, XEmacs does not tie up the shell window, so you can use that to run other shell commands while XEmacs operates its own X windows. You can begin typing XEmacs commands as soon as you direct your keyboard input to the XEmacs frame. @vindex initial-major-mode Before Emacs reads the first command, you have not had a chance to give a command to specify a file to edit. Since Emacs must always have a current buffer for editing, it presents a buffer, by default, a buffer named @samp{*scratch*}. The buffer is in Lisp Interaction mode; you can use it to type Lisp expressions and evaluate them, or you can ignore that capability and simply doodle. (You can specify a different major mode for this buffer by setting the variable @code{initial-major-mode} in your init file. @xref{Init File}.) It is possible to specify files to be visited, Lisp files to be loaded, and functions to be called, by giving Emacs arguments in the shell command line. @xref{Command Switches}. But we don't recommend doing this. The feature exists mainly for compatibility with other editors. Many other editors are designed to be started afresh each time you want to edit. You edit one file and then exit the editor. The next time you want to edit either another file or the same one, you must run the editor again. With these editors, it makes sense to use a command-line argument to say which file to edit. But starting a new Emacs each time you want to edit a different file does not make sense. For one thing, this would be annoyingly slow. For another, this would fail to take advantage of Emacs's ability to visit more than one file in a single editing session. And it would lose the other accumulated context, such as registers, undo history, and the mark ring. The recommended way to use XEmacs is to start it only once, just after you log in, and do all your editing in the same Emacs session. Each time you want to edit a different file, you visit it with the existing Emacs, which eventually comes to have many files in it ready for editing. Usually you do not kill the Emacs until you are about to log out. @xref{Files}, for more information on visiting more than one file. @node Exiting, Command Switches, Entering Emacs, Top @section Exiting Emacs @cindex exiting @cindex killing Emacs @cindex suspending @cindex leaving Emacs @cindex quitting Emacs @cindex shrinking XEmacs frame There are two commands for exiting Emacs because there are two kinds of exiting: @dfn{suspending} Emacs and @dfn{killing} Emacs. @dfn{Suspending} means stopping Emacs temporarily and returning control to its parent process (usually a shell), allowing you to resume editing later in the same Emacs job, with the same buffers, same kill ring, same undo history, and so on. This is the usual way to exit. @dfn{Killing} Emacs means destroying the Emacs job. You can run Emacs again later, but you will get a fresh Emacs; there is no way to resume the same editing session after it has been killed. @table @kbd @item C-z Suspend Emacs or iconify a frame (@code{suspend-emacs-or-iconify-frame}). If used under the X window system, shrink the X window containing the Emacs frame to an icon (see below). @item C-x C-c Kill Emacs (@code{save-buffers-kill-emacs}). @end table If you use XEmacs under the X window system, @kbd{C-z} shrinks the X window containing the Emacs frame to an icon. The Emacs process is stopped temporarily, and control is returned to the window manager. If more than one frame is associated with the Emacs process, only the frame from which you used @kbd{C-z} is iconified. To activate the "suspended" Emacs, use the appropriate window manager mouse gestures. Usually left-clicking on the icon reactivates and reopens the X window containing the Emacs frame, but the window manager you use determines what exactly happens. To actually kill the Emacs process, use @kbd{C-x C-c} or the @b{Exit XEmacs} item on the @b{File} menu. @kindex C-z @findex suspend-emacs To suspend Emacs, type @kbd{C-z} (@code{suspend-emacs}). This takes you back to the shell from which you invoked Emacs. You can resume Emacs with the shell command @samp{%xemacs} in most common shells. On systems that do not support suspending programs, @kbd{C-z} starts an inferior shell that communicates directly with the terminal. Emacs waits until you exit the subshell. (The way to do that is probably with @kbd{C-d} or @samp{exit}, but it depends on which shell you use.) The only way on these systems to get back to the shell from which Emacs was run (to log out, for example) is to kill Emacs. Suspending also fails if you run Emacs under a shell that doesn't support suspending programs, even if the system itself does support it. In such a case, you can set the variable @code{cannot-suspend} to a non-@code{nil} value to force @kbd{C-z} to start an inferior shell. (One might also describe Emacs's parent shell as ``inferior'' for failing to support job control properly, but that is a matter of taste.) When Emacs communicates directly with an X server and creates its own dedicated X windows, @kbd{C-z} has a different meaning. Suspending an applications that uses its own X windows is not meaningful or useful. Instead, @kbd{C-z} runs the command @code{iconify-or-deiconify-frame}, which temporarily closes up the selected Emacs frame. The way to get back to a shell window is with the window manager. @kindex C-x C-c @findex save-buffers-kill-emacs To kill Emacs, type @kbd{C-x C-c} (@code{save-buffers-kill-emacs}). A two-character key is used for this to make it harder to type. Selecting the @b{Exit XEmacs} option of the @b{File} menu is an alternate way of issuing the command. Unless a numeric argument is used, this command first offers to save any modified file-visiting buffers. If you do not save all buffers, you are asked for reconfirmation with @kbd{yes} before killing Emacs, since any changes not saved will be lost forever. If any subprocesses are still running, @kbd{C-x C-c} asks you to confirm killing them, since killing Emacs will kill the subprocesses immediately. There is no way to restart an Emacs session once you have killed it. You can, however, arrange for Emacs to record certain session information, such as which files are visited, when you kill it, so that the next time you restart Emacs it will try to visit the same files and so on. @c @xref{Saving Emacs Sessions}. The operating system usually listens for certain special characters whose meaning is to kill or suspend the program you are running. @b{This operating system feature is turned off while you are in Emacs.} The meanings of @kbd{C-z} and @kbd{C-x C-c} as keys in Emacs were inspired by the use of @kbd{C-z} and @kbd{C-c} on several operating systems as the characters for stopping or killing a program, but that is their only relationship with the operating system. You can customize these keys to run any commands of your choice (@pxref{Keymaps}). texi2html-1.82/test/xemacs_manual/mini.texi0000644000175000017500000006016311264347115022665 0ustar flichtenheldflichtenheld @node Minibuffer, M-x, Undo, Top @chapter The Minibuffer @cindex minibuffer The @dfn{minibuffer} is the facility used by XEmacs commands to read arguments more complicated than a single number. Minibuffer arguments can be file names, buffer names, Lisp function names, XEmacs command names, Lisp expressions, and many other things, depending on the command reading the argument. You can use the usual XEmacs editing commands in the minibuffer to edit the argument text. @cindex prompt When the minibuffer is in use, it appears in the echo area, and the cursor moves there. The beginning of the minibuffer line displays a @dfn{prompt} which says what kind of input you should supply and how it will be used. Often this prompt is derived from the name of the command that the argument is for. The prompt normally ends with a colon. @cindex default argument Sometimes a @dfn{default argument} appears in parentheses after the colon; it, too, is part of the prompt. The default is used as the argument value if you enter an empty argument (e.g., by just typing @key{RET}). For example, commands that read buffer names always show a default, which is the name of the buffer that will be used if you type just @key{RET}. @kindex C-g The simplest way to enter a minibuffer argument is to type the text you want, terminated by @key{RET} which exits the minibuffer. You can cancel the command that wants the argument, and get out of the minibuffer, by typing @kbd{C-g}. Since the minibuffer uses the screen space of the echo area, it can conflict with other ways XEmacs customarily uses the echo area. Here is how XEmacs handles such conflicts: @itemize @bullet @item If a command gets an error while you are in the minibuffer, this does not cancel the minibuffer. However, the echo area is needed for the error message and therefore the minibuffer itself is hidden for a while. It comes back after a few seconds, or as soon as you type anything. @item If in the minibuffer you use a command whose purpose is to print a message in the echo area, such as @kbd{C-x =}, the message is printed normally, and the minibuffer is hidden for a while. It comes back after a few seconds, or as soon as you type anything. @item Echoing of keystrokes does not take place while the minibuffer is in use. @end itemize @menu * File: Minibuffer File. Entering file names with the minibuffer. * Edit: Minibuffer Edit. How to edit in the minibuffer. * Completion:: An abbreviation facility for minibuffer input. * Minibuffer History:: Reusing recent minibuffer arguments. * Repetition:: Re-executing commands that used the minibuffer. @end menu @node Minibuffer File, Minibuffer Edit, Minibuffer, Minibuffer @section Minibuffers for File Names Sometimes the minibuffer starts out with text in it. For example, when you are supposed to give a file name, the minibuffer starts out containing the @dfn{default directory}, which ends with a slash. This is to inform you which directory the file will be found in if you do not specify a directory. For example, the minibuffer might start out with these contents: @example Find File: /u2/emacs/src/ @end example @noindent where @samp{Find File:@: } is the prompt. Typing @kbd{buffer.c} specifies the file @file{/u2/emacs/src/buffer.c}. To find files in nearby directories, use @kbd{..}; thus, if you type @kbd{../lisp/simple.el}, you will get the file named @file{/u2/emacs/lisp/simple.el}. Alternatively, you can kill with @kbd{M-@key{DEL}} the directory names you don't want (@pxref{Words}). If you don't want any of the default, you can kill it with @kbd{C-a C-k}. But you don't need to kill the default; you can simply ignore it. Insert an absolute file name, one starting with a slash or a tilde, after the default directory. For example, to specify the file @file{/etc/termcap}, just insert that name, giving these minibuffer contents: @example Find File: /u2/emacs/src//etc/termcap @end example @noindent @cindex // in file name @cindex double slash in file name @cindex slashes repeated in file name XEmacs gives a special meaning to a double slash (which is not normally a useful thing to write): it means, ``ignore everything before the second slash in the pair.'' Thus, @samp{/u2/emacs/src/} is ignored in the example above, and you get the file @file{/etc/termcap}. @vindex insert-default-directory If you set @code{insert-default-directory} to @code{nil}, the default directory is not inserted in the minibuffer. This way, the minibuffer starts out empty. But the name you type, if relative, is still interpreted with respect to the same default directory. @node Minibuffer Edit, Completion, Minibuffer File, Minibuffer @section Editing in the Minibuffer The minibuffer is an XEmacs buffer (albeit a peculiar one), and the usual XEmacs commands are available for editing the text of an argument you are entering. Since @key{RET} in the minibuffer is defined to exit the minibuffer, you can't use it to insert a newline in the minibuffer. To do that, type @kbd{C-o} or @kbd{C-q C-j}. (Recall that a newline is really the character control-J.) The minibuffer has its own window which always has space on the screen but acts as if it were not there when the minibuffer is not in use. When the minibuffer is in use, its window is just like the others; you can switch to another window with @kbd{C-x o}, edit text in other windows and perhaps even visit more files, before returning to the minibuffer to submit the argument. You can kill text in another window, return to the minibuffer window, and then yank the text to use it in the argument. @xref{Windows}. There are some restrictions on the use of the minibuffer window, however. You cannot switch buffers in it---the minibuffer and its window are permanently attached. Also, you cannot split or kill the minibuffer window. But you can make it taller in the normal fashion with @kbd{C-x ^}. If you enable Resize-Minibuffer mode, then the minibuffer window expands vertically as necessary to hold the text that you put in the minibuffer. Use @kbd{M-x resize-minibuffer-mode} to enable or disable this minor mode (@pxref{Minor Modes}). @kindex C-M-v If while in the minibuffer you issue a command that displays help text of any sort in another window, you can use the @kbd{C-M-v} command while in the minibuffer to scroll the help text. This lasts until you exit the minibuffer. This feature is especially useful if a completing minibuffer gives you a list of possible completions. @xref{Other Window}. @vindex minibuffer-confirm-incomplete If the variable @code{minibuffer-confirm-incomplete} is @code{t}, you are asked for confirmation if there is no known completion for the text you typed. For example, if you attempted to visit a non-existent file, the minibuffer might read: @example Find File: chocolate_bar.c [no completions, confirm] @end example If you press @kbd{Return} again, that confirms the filename. Otherwise, you can continue editing it. XEmacs supports recursive use of the minibuffer. However, it is easy to do this by accident (because of autorepeating keyboards, for example) and get confused. Therefore, most XEmacs commands that use the minibuffer refuse to operate if the minibuffer window is selected. If the minibuffer is active but you have switched to a different window, recursive use of the minibuffer is allowed---if you know enough to try to do this, you probably will not get confused. @vindex enable-recursive-minibuffers If you set the variable @code{enable-recursive-minibuffers} to a non-@code{nil}, recursive use of the minibuffer is always allowed. @node Completion, Minibuffer History, Minibuffer Edit, Minibuffer @section Completion @cindex completion For certain kinds of arguments, you can use @dfn{completion} to enter the argument value. Completion means that you type part of the argument, then XEmacs visibly fills in the rest, or as much as can be determined from the part you have typed. When completion is available, certain keys---@key{TAB}, @key{RET}, and @key{SPC}---are rebound to complete the text present in the minibuffer into a longer string that it stands for, by matching it against a set of @dfn{completion alternatives} provided by the command reading the argument. @kbd{?} is defined to display a list of possible completions of what you have inserted. For example, when @kbd{M-x} uses the minibuffer to read the name of a command, it provides a list of all available XEmacs command names to complete against. The completion keys match the text in the minibuffer against all the command names, find any additional name characters implied by the ones already present in the minibuffer, and add those characters to the ones you have given. This is what makes it possible to type @kbd{M-x inse @key{SPC} b @key{RET}} instead of @kbd{M-x insert-buffer @key{RET}} (for example). Case is normally significant in completion because it is significant in most of the names that you can complete (buffer names, file names and command names). Thus, @samp{fo} does not complete to @samp{Foo}. When you are completing a name in which case does not matter, case may be ignored for completion's sake if specified by program. When a completion list is displayed, the completions will highlight as you move the mouse over them. Clicking the middle mouse button on any highlighted completion will ``select'' it just as if you had typed it in and hit @key{RET}. @menu * Example: Completion Example. * Commands: Completion Commands. * Strict Completion:: * Options: Completion Options. @end menu @node Completion Example, Completion Commands, Completion, Completion @subsection Completion Example @kindex TAB @findex minibuffer-complete A concrete example may help here. If you type @kbd{M-x au @key{TAB}}, the @key{TAB} looks for alternatives (in this case, command names) that start with @samp{au}. There are several, including @code{auto-fill-mode} and @code{auto-save-mode}---but they are all the same as far as @code{auto}, so the @samp{au} in the minibuffer changes to @samp{auto}. If you type @key{TAB} again immediately, there are multiple possibilities for the very next character---it could be any of @samp{c-}---so no more characters are added; instead, @key{TAB} displays a list of all possible completions in another window. If you go on to type @kbd{-f @key{TAB}}, this @key{TAB} sees @samp{auto-f}. The only command name starting this way is @code{auto-fill-mode}, so completion fills in the rest of that. You now have @samp{auto-fill-mode} in the minibuffer after typing just @kbd{au @key{TAB} f @key{TAB}}. Note that @key{TAB} has this effect because in the minibuffer it is bound to the command @code{minibuffer-complete} when completion is available. @node Completion Commands, Strict Completion, Completion Example, Completion @subsection Completion Commands Here is a list of the completion commands defined in the minibuffer when completion is available. @table @kbd @item @key{TAB} Complete the text in the minibuffer as much as possible (@code{minibuffer-complete}). @item @key{SPC} Complete the minibuffer text, but don't go beyond one word (@code{minibuffer-complete-word}). @item @key{RET} Submit the text in the minibuffer as the argument, possibly completing first as described below (@code{minibuffer-complete-and-exit}). @item ? Print a list of all possible completions of the text in the minibuffer (@code{minibuffer-list-completions}). @item @key{button2} Select the highlighted text under the mouse as a minibuffer response. When the minibuffer is being used to prompt the user for a completion, any valid completions which are visible on the screen will be highlighted when the mouse moves over them. Clicking @key{button2} will select the highlighted completion and exit the minibuffer. (@code{minibuf-select-highlighted-completion}). @end table @kindex SPC @findex minibuffer-complete-word @key{SPC} completes much like @key{TAB}, but never goes beyond the next hyphen or space. If you have @samp{auto-f} in the minibuffer and type @key{SPC}, it finds that the completion is @samp{auto-fill-mode}, but it stops completing after @samp{fill-}. This gives @samp{auto-fill-}. Another @key{SPC} at this point completes all the way to @samp{auto-fill-mode}. @key{SPC} in the minibuffer when completion is available runs the command @code{minibuffer-complete-word}. Here are some commands you can use to choose a completion from a window that displays a list of completions: @table @kbd @findex mouse-choose-completion @item button2up Clicking mouse button 2 on a completion in the list of possible completions chooses that completion (@code{mouse-choose-completion}). You normally use this command while point is in the minibuffer; but you must click in the list of completions, not in the minibuffer itself. @findex switch-to-completions @item @key{PRIOR} @itemx M-v Typing @key{PRIOR} or @kbd{M-v}, while in the minibuffer, selects the window showing the completion list buffer (@code{switch-to-completions}). This paves the way for using the commands below. (Selecting that window in the usual ways has the same effect, but this way is more convenient.) @findex choose-completion @item @key{RET} Typing @key{RET} @emph{in the completion list buffer} chooses the completion that point is in or next to (@code{choose-completion}). To use this command, you must first switch windows to the window that shows the list of completions. @findex next-list-mode-item @item @key{RIGHT} @itemx @key{TAB} @itemx C-f Typing the right-arrow key @key{RIGHT}, @key{TAB} or @kbd{C-f} @emph{in the completion list buffer} moves point to the following completion (@code{next-list-mode-item}). @findex previous-list-mode-item @item @key{LEFT} @itemx C-b Typing the left-arrow key @key{LEFT} or @kbd{C-b} @emph{in the completion list buffer} moves point toward the beginning of the buffer, to the previous completion (@code{previous-list-mode-item}). @end table @node Strict Completion, Completion Options, Completion Commands, Completion @subsection Strict Completion There are three different ways that @key{RET} can work in completing minibuffers, depending on how the argument will be used. @itemize @bullet @item @dfn{Strict} completion is used when it is meaningless to give any argument except one of the known alternatives. For example, when @kbd{C-x k} reads the name of a buffer to kill, it is meaningless to give anything but the name of an existing buffer. In strict completion, @key{RET} refuses to exit if the text in the minibuffer does not complete to an exact match. @item @dfn{Cautious} completion is similar to strict completion, except that @key{RET} exits only if the text was an exact match already, not needing completion. If the text is not an exact match, @key{RET} does not exit, but it does complete the text. If it completes to an exact match, a second @key{RET} will exit. Cautious completion is used for reading file names for files that must already exist. @item @dfn{Permissive} completion is used when any string whatever is meaningful, and the list of completion alternatives is just a guide. For example, when @kbd{C-x C-f} reads the name of a file to visit, any file name is allowed, in case you want to create a file. In permissive completion, @key{RET} takes the text in the minibuffer exactly as given, without completing it. @end itemize The completion commands display a list of all possible completions in a window whenever there is more than one possibility for the very next character. Also, typing @kbd{?} explicitly requests such a list. If the list of completions is long, you can scroll it with @kbd{C-M-v} (@pxref{Other Window}). @node Completion Options, , Strict Completion, Completion @subsection Completion Options @vindex completion-ignored-extensions When completion is done on file names, certain file names are usually ignored. The variable @code{completion-ignored-extensions} contains a list of strings; a file whose name ends in any of those strings is ignored as a possible completion. The standard value of this variable has several elements including @code{".o"}, @code{".elc"}, @code{".dvi"} and @code{"~"}. The effect is that, for example, @samp{foo} can complete to @samp{foo.c} even though @samp{foo.o} exists as well. However, if @emph{all} the possible completions end in ``ignored'' strings, then they are not ignored. Ignored extensions do not apply to lists of completions---those always mention all possible completions. @vindex completion-auto-help If a completion command finds the next character is undetermined, it automatically displays a list of all possible completions. If the variable @code{completion-auto-help} is set to @code{nil}, this does not happen, and you must type @kbd{?} to display the possible completions. @vindex minibuffer-confirm-incomplete If the variable @code{minibuffer-confirm-incomplete} is set to @code{t}, then in contexts where @code{completing-read} allows answers that are not valid completions, an extra @key{RET} must be typed to confirm the response. This is helpful for catching typos. @cindex Icomplete mode Icomplete mode presents a constantly-updated display that tells you what completions are available for the text you've entered so far. The command to enable or disable this minor mode is @kbd{M-x icomplete-mode}. @node Minibuffer History, Repetition, Completion, Minibuffer @section Minibuffer History @cindex minibuffer history @cindex history of minibuffer input Every argument that you enter with the minibuffer is saved on a @dfn{minibuffer history list} so that you can use it again later in another argument. Special commands load the text of an earlier argument in the minibuffer. They discard the old minibuffer contents, so you can think of them as moving through the history of previous arguments. @table @kbd @item @key{UP} @itemx M-p Move to the next earlier argument string saved in the minibuffer history (@code{previous-history-element}). @item @key{DOWN} @itemx M-n Move to the next later argument string saved in the minibuffer history (@code{next-history-element}). @item M-r @var{regexp} @key{RET} Move to an earlier saved argument in the minibuffer history that has a match for @var{regexp} (@code{previous-matching-history-element}). @item M-s @var{regexp} @key{RET} Move to a later saved argument in the minibuffer history that has a match for @var{regexp} (@code{next-matching-history-element}). @end table @kindex M-p @r{(minibuffer history)} @kindex M-n @r{(minibuffer history)} @findex next-history-element @findex previous-history-element The simplest way to reuse the saved arguments in the history list is to move through the history list one element at a time. While in the minibuffer, use @kbd{M-p} or up-arrow (@code{previous-history-element}) to ``move to'' the next earlier minibuffer input, and use @kbd{M-n} or down-arrow (@code{next-history-element}) to ``move to'' the next later input. The previous input that you fetch from the history entirely replaces the contents of the minibuffer. To use it as the argument, exit the minibuffer as usual with @key{RET}. You can also edit the text before you reuse it; this does not change the history element that you ``moved'' to, but your new argument does go at the end of the history list in its own right. For many minibuffer arguments there is a ``default'' value. In some cases, the minibuffer history commands know the default value. Then you can insert the default value into the minibuffer as text by using @kbd{M-n} to move ``into the future'' in the history. @findex previous-matching-history-element @findex next-matching-history-element @kindex M-r @r{(minibuffer history)} @kindex M-s @r{(minibuffer history)} There are also commands to search forward or backward through the history; they search for history elements that match a regular expression that you specify with the minibuffer. @kbd{M-r} (@code{previous-matching-history-element}) searches older elements in the history, while @kbd{M-s} (@code{next-matching-history-element}) searches newer elements. By special dispensation, these commands can use the minibuffer to read their arguments even though you are already in the minibuffer when you issue them. As with incremental searching, an uppercase letter in the regular expression makes the search case-sensitive (@pxref{Search Case}). All uses of the minibuffer record your input on a history list, but there are separate history lists for different kinds of arguments. For example, there is a list for file names, used by all the commands that read file names. There are several other very specific history lists, including one for command names read by @kbd{M-x}, one for buffer names, one for arguments of commands like @code{query-replace}, and one for compilation commands read by @code{compile}. Finally, there is one ``miscellaneous'' history list that most minibuffer arguments use. @c Do wee need this? @ignore @vindex history-length The variable @code{history-length} specifies the maximum length of a minibuffer history list; once a list gets that long, the oldest element is deleted each time an element is added. If the value of @code{history-length} is @code{t}, though, there is no maximum length and elements are never deleted. @end ignore @node Repetition, , Minibuffer History, Minibuffer @section Repeating Minibuffer Commands @cindex command history @cindex history of commands Every command that uses the minibuffer at least once is recorded on a special history list, together with the values of its arguments, so that you can repeat the entire command. In particular, every use of @kbd{M-x} is recorded there, since @kbd{M-x} uses the minibuffer to read the command name. @findex list-command-history @c widecommands @table @kbd @item C-x @key{ESC} @key{ESC} Re-execute a recent minibuffer command (@code{repeat-complex-command}). @item M-p Within @kbd{C-x @key{ESC} @key{ESC}}, move to previous recorded command (@code{previous-history-element}). @item M-n Within @kbd{C-x @key{ESC} @key{ESC}}, move to the next (more recent) recorded command (@code{next-history-element}). @item M-x list-command-history Display the entire command history, showing all the commands @kbd{C-x @key{ESC} @key{ESC}} can repeat, most recent first. @end table @kindex C-x ESC ESC @findex repeat-complex-command @kbd{C-x @key{ESC} @key{ESC}} is used to re-execute a recent minibuffer-using command. With no argument, it repeats the last such command. A numeric argument specifies which command to repeat; one means the last one, and larger numbers specify earlier ones. @kbd{C-x @key{ESC} @key{ESC}} works by turning the previous command into a Lisp expression and then entering a minibuffer initialized with the text for that expression. If you type just @key{RET}, the command is repeated as before. You can also change the command by editing the Lisp expression. Whatever expression you finally submit is what will be executed. The repeated command is added to the front of the command history unless it is identical to the most recently executed command already there. Even if you don't understand Lisp syntax, it will probably be obvious which command is displayed for repetition. If you do not change the text, you can be sure the command will repeat exactly as before. @kindex M-n @kindex M-p @findex next-complex-command @findex previous-complex-command If you are in the minibuffer for @kbd{C-x @key{ESC} @key{ESC}} and the command shown to you is not the one you want to repeat, you can move around the list of previous commands using @kbd{M-n} and @kbd{M-p}. @kbd{M-p} replaces the contents of the minibuffer with the next earlier recorded command, and @kbd{M-n} replaces it with the next later command. After finding the desired previous command, you can edit its expression and then resubmit it by typing @key{RET}. Any editing you have done on the command to be repeated is lost if you use @kbd{M-n} or @kbd{M-p}. @kbd{M-n} and @kbd{M-p} are specially defined within @kbd{C-x @key{ESC} @key{ESC}} to run the commands @code{previous-history-element} and @code{next-history-element}. @vindex command-history The list of previous commands using the minibuffer is stored as a Lisp list in the variable @code{command-history}. Each element of the list is a Lisp expression which describes one command and its arguments. Lisp programs can reexecute a command by feeding the corresponding @code{command-history} element to @code{eval}. texi2html-1.82/test/xemacs_manual/programs.texi0000644000175000017500000024676411264347115023600 0ustar flichtenheldflichtenheld @node Programs, Running, Text, Top @chapter Editing Programs @cindex Lisp @cindex C Emacs has many commands designed to understand the syntax of programming languages such as Lisp and C. These commands can: @itemize @bullet @item Move over or kill balanced expressions or @dfn{sexps} (@pxref{Lists}). @item Move over or mark top-level balanced expressions (@dfn{defuns}, in Lisp; functions, in C). @item Show how parentheses balance (@pxref{Matching}). @item Insert, kill, or align comments (@pxref{Comments}). @item Follow the usual indentation conventions of the language (@pxref{Grinding}). @end itemize The commands available for words, sentences, and paragraphs are useful in editing code even though their canonical application is for editing human language text. Most symbols contain words (@pxref{Words}); sentences can be found in strings and comments (@pxref{Sentences}). Paragraphs per se are not present in code, but the paragraph commands are useful anyway, because Lisp mode and C mode define paragraphs to begin and end at blank lines (@pxref{Paragraphs}). Judicious use of blank lines to make the program clearer also provides interesting chunks of text for the paragraph commands to work on. The selective display feature is useful for looking at the overall structure of a function (@pxref{Selective Display}). This feature causes only the lines that are indented less than a specified amount to appear on the screen. @menu * Program Modes:: Major modes for editing programs. * Lists:: Expressions with balanced parentheses. There are editing commands to operate on them. * Defuns:: Each program is made up of separate functions. There are editing commands to operate on them. * Grinding:: Adjusting indentation to show the nesting. * Matching:: Insertion of a close-delimiter flashes matching open. * Comments:: Inserting, filling and aligning comments. * Balanced Editing:: Inserting two matching parentheses at once, etc. * Lisp Completion:: Completion on symbol names in Lisp code. * Documentation:: Getting documentation of functions you plan to call. * Change Log:: Maintaining a change history for your program. * Tags:: Go direct to any function in your program in one command. Tags remembers which file it is in. * Fortran:: Fortran mode and its special features. * Asm Mode:: Asm mode and its special features. @end menu @node Program Modes, Lists, Programs, Programs @section Major Modes for Programming Languages @cindex Lisp mode @cindex C mode @cindex Scheme mode Emacs has several major modes for the programming languages Lisp, Scheme (a variant of Lisp), C, Fortran, and Muddle. Ideally, a major mode should be implemented for each programming language you might want to edit with Emacs; but often the mode for one language can serve for other syntactically similar languages. The language modes that exist are those that someone decided to take the trouble to write. There are several variants of Lisp mode, which differ in the way they interface to Lisp execution. @xref{Lisp Modes}. Each of the programming language modes defines the @key{TAB} key to run an indentation function that knows the indentation conventions of that language and updates the current line's indentation accordingly. For example, in C mode @key{TAB} is bound to @code{c-indent-line}. @key{LFD} is normally defined to do @key{RET} followed by @key{TAB}; thus it, too, indents in a mode-specific fashion. @kindex DEL @findex backward-delete-char-untabify In most programming languages, indentation is likely to vary from line to line. So the major modes for those languages rebind @key{DEL} to treat a tab as if it were the equivalent number of spaces (using the command @code{backward-delete-char-untabify}). This makes it possible to rub out indentation one column at a time without worrying whether it is made up of spaces or tabs. In these modes, use @kbd{C-b C-d} to delete a tab character before point. Programming language modes define paragraphs to be separated only by blank lines, so that the paragraph commands remain useful. Auto Fill mode, if enabled in a programming language major mode, indents the new lines which it creates. @cindex mode hook @vindex c-mode-hook @vindex lisp-mode-hook @vindex emacs-lisp-mode-hook @vindex lisp-interaction-mode-hook @vindex scheme-mode-hook @vindex muddle-mode-hook Turning on a major mode calls a user-supplied function called the @dfn{mode hook}, which is the value of a Lisp variable. For example, turning on C mode calls the value of the variable @code{c-mode-hook} if that value exists and is non-@code{nil}. Mode hook variables for other programming language modes include @code{lisp-mode-hook}, @code{emacs-lisp-mode-hook}, @code{lisp-interaction-mode-hook}, @code{scheme-mode-hook}, and @code{muddle-mode-hook}. The mode hook function receives no arguments.@refill @node Lists, Defuns, Program Modes, Programs @section Lists and Sexps @cindex Control-Meta By convention, Emacs keys for dealing with balanced expressions are usually @kbd{Control-Meta-} characters. They tend to be analogous in function to their @kbd{Control-} and @kbd{Meta-} equivalents. These commands are usually thought of as pertaining to expressions in programming languages, but can be useful with any language in which some sort of parentheses exist (including English). @cindex list @cindex sexp @cindex expression The commands fall into two classes. Some commands deal only with @dfn{lists} (parenthetical groupings). They see nothing except parentheses, brackets, braces (depending on what must balance in the language you are working with), and escape characters that might be used to quote those. The other commands deal with expressions or @dfn{sexps}. The word `sexp' is derived from @dfn{s-expression}, the term for a symbolic expression in Lisp. In Emacs, the notion of `sexp' is not limited to Lisp. It refers to an expression in the language your program is written in. Each programming language has its own major mode, which customizes the syntax tables so that expressions in that language count as sexps. Sexps typically include symbols, numbers, and string constants, as well as anything contained in parentheses, brackets, or braces. In languages that use prefix and infix operators, such as C, it is not possible for all expressions to be sexps. For example, C mode does not recognize @samp{foo + bar} as an sexp, even though it @i{is} a C expression; it recognizes @samp{foo} as one sexp and @samp{bar} as another, with the @samp{+} as punctuation between them. This is a fundamental ambiguity: both @samp{foo + bar} and @samp{foo} are legitimate choices for the sexp to move over if point is at the @samp{f}. Note that @samp{(foo + bar)} is a sexp in C mode. Some languages have obscure forms of syntax for expressions that nobody has bothered to make Emacs understand properly. @c doublewidecommands @table @kbd @item C-M-f Move forward over an sexp (@code{forward-sexp}). @item C-M-b Move backward over an sexp (@code{backward-sexp}). @item C-M-k Kill sexp forward (@code{kill-sexp}). @item C-M-u Move up and backward in list structure (@code{backward-up-list}). @item C-M-d Move down and forward in list structure (@code{down-list}). @item C-M-n Move forward over a list (@code{forward-list}). @item C-M-p Move backward over a list (@code{backward-list}). @item C-M-t Transpose expressions (@code{transpose-sexps}). @item C-M-@@ Put mark after following expression (@code{mark-sexp}). @end table @kindex C-M-f @kindex C-M-b @findex forward-sexp @findex backward-sexp To move forward over an sexp, use @kbd{C-M-f} (@code{forward-sexp}). If the first significant character after point is an opening delimiter (@samp{(} in Lisp; @samp{(}, @samp{[}, or @samp{@{} in C), @kbd{C-M-f} moves past the matching closing delimiter. If the character begins a symbol, string, or number, @kbd{C-M-f} moves over that. If the character after point is a closing delimiter, @kbd{C-M-f} just moves past it. (This last is not really moving across an sexp; it is an exception which is included in the definition of @kbd{C-M-f} because it is as useful a behavior as anyone can think of for that situation.)@refill The command @kbd{C-M-b} (@code{backward-sexp}) moves backward over a sexp. The detailed rules are like those above for @kbd{C-M-f}, but with directions reversed. If there are any prefix characters (single quote, back quote, and comma, in Lisp) preceding the sexp, @kbd{C-M-b} moves back over them as well. @kbd{C-M-f} or @kbd{C-M-b} with an argument repeats that operation the specified number of times; with a negative argument, it moves in the opposite direction. In languages such as C where the comment-terminator can be recognized, the sexp commands move across comments as if they were whitespace. In Lisp and other languages where comments run until the end of a line, it is very difficult to ignore comments when parsing backwards; therefore, in such languages the sexp commands treat the text of comments as if it were code. @kindex C-M-k @findex kill-sexp Killing an sexp at a time can be done with @kbd{C-M-k} (@code{kill-sexp}). @kbd{C-M-k} kills the characters that @kbd{C-M-f} would move over. @kindex C-M-n @kindex C-M-p @findex forward-list @findex backward-list The @dfn{list commands}, @kbd{C-M-n} (@code{forward-list}) and @kbd{C-M-p} (@code{backward-list}), move over lists like the sexp commands but skip over any number of other kinds of sexps (symbols, strings, etc). In some situations, these commands are useful because they usually ignore comments, since the comments usually do not contain any lists.@refill @kindex C-M-u @kindex C-M-d @findex backward-up-list @findex down-list @kbd{C-M-n} and @kbd{C-M-p} stay at the same level in parentheses, when that is possible. To move @i{up} one (or @var{n}) levels, use @kbd{C-M-u} (@code{backward-up-list}). @kbd{C-M-u} moves backward up past one unmatched opening delimiter. A positive argument serves as a repeat count; a negative argument reverses direction of motion and also requests repetition, so it moves forward and up one or more levels.@refill To move @i{down} in list structure, use @kbd{C-M-d} (@code{down-list}). In Lisp mode, where @samp{(} is the only opening delimiter, this is nearly the same as searching for a @samp{(}. An argument specifies the number of levels of parentheses to go down. @cindex transposition @kindex C-M-t @findex transpose-sexps @kbd{C-M-t} (@code{transpose-sexps}) drags the previous sexp across the next one. An argument serves as a repeat count, and a negative argument drags backwards (thus canceling out the effect of @kbd{C-M-t} with a positive argument). An argument of zero, rather than doing nothing, transposes the sexps ending after point and the mark. @kindex C-M-@@ @findex mark-sexp To make the region be the next sexp in the buffer, use @kbd{C-M-@@} (@code{mark-sexp}) which sets the mark at the same place that @kbd{C-M-f} would move to. @kbd{C-M-@@} takes arguments like @kbd{C-M-f}. In particular, a negative argument is useful for putting the mark at the beginning of the previous sexp. The list and sexp commands' understanding of syntax is completely controlled by the syntax table. Any character can, for example, be declared to be an opening delimiter and act like an open parenthesis. @xref{Syntax}. @node Defuns, Grinding, Lists, Programs @section Defuns @cindex defuns In Emacs, a parenthetical grouping at the top level in the buffer is called a @dfn{defun}. The name derives from the fact that most top-level lists in Lisp are instances of the special form @code{defun}, but Emacs calls any top-level parenthetical grouping counts a defun regardless of its contents or the programming language. For example, in C, the body of a function definition is a defun. @c doublewidecommands @table @kbd @item C-M-a Move to beginning of current or preceding defun (@code{beginning-of-defun}). @item C-M-e Move to end of current or following defun (@code{end-of-defun}). @item C-M-h Put region around whole current or following defun (@code{mark-defun}). @end table @kindex C-M-a @kindex C-M-e @kindex C-M-h @findex beginning-of-defun @findex end-of-defun @findex mark-defun The commands to move to the beginning and end of the current defun are @kbd{C-M-a} (@code{beginning-of-defun}) and @kbd{C-M-e} (@code{end-of-defun}). To operate on the current defun, use @kbd{C-M-h} (@code{mark-defun}) which puts point at the beginning and the mark at the end of the current or next defun. This is the easiest way to prepare for moving the defun to a different place. In C mode, @kbd{C-M-h} runs the function @code{mark-c-function}, which is almost the same as @code{mark-defun}, but which backs up over the argument declarations, function name, and returned data type so that the entire C function is inside the region. @findex compile-defun To compile and evaluate the current defun, use @kbd{M-x compile-defun}. This function prints the results in the minibuffer. If you include an argument, it inserts the value in the current buffer after the defun. Emacs assumes that any open-parenthesis found in the leftmost column is the start of a defun. Therefore, @i{never put an open-parenthesis at the left margin in a Lisp file unless it is the start of a top level list. Never put an open-brace or other opening delimiter at the beginning of a line of C code unless it starts the body of a function.} The most likely problem case is when you want an opening delimiter at the start of a line inside a string. To avoid trouble, put an escape character (@samp{\} in C and Emacs Lisp, @samp{/} in some other Lisp dialects) before the opening delimiter. It will not affect the contents of the string. The original Emacs found defuns by moving upward a level of parentheses until there were no more levels to go up. This required scanning back to the beginning of the buffer for every function. To speed this up, Emacs was changed to assume that any @samp{(} (or other character assigned the syntactic class of opening-delimiter) at the left margin is the start of a defun. This heuristic is nearly always right; however, it mandates the convention described above. @node Grinding, Matching, Defuns, Programs @section Indentation for Programs @cindex indentation @cindex grinding The best way to keep a program properly indented (``ground'') is to use Emacs to re-indent it as you change the program. Emacs has commands to indent properly either a single line, a specified number of lines, or all of the lines inside a single parenthetical grouping. @menu * Basic Indent:: * Multi-line Indent:: Commands to reindent many lines at once. * Lisp Indent:: Specifying how each Lisp function should be indented. * C Indent:: Choosing an indentation style for C code. @end menu @node Basic Indent, Multi-line Indent, Grinding, Grinding @subsection Basic Program Indentation Commands @c WideCommands @table @kbd @item @key{TAB} Adjust indentation of current line. @item @key{LFD} Equivalent to @key{RET} followed by @key{TAB} (@code{newline-and-indent}). @end table @kindex TAB @findex c-indent-line @findex lisp-indent-line The basic indentation command is @key{TAB}, which gives the current line the correct indentation as determined from the previous lines. The function that @key{TAB} runs depends on the major mode; it is @code{lisp-indent-line} in Lisp mode, @code{c-indent-line} in C mode, etc. These functions understand different syntaxes for different languages, but they all do about the same thing. @key{TAB} in any programming language major mode inserts or deletes whitespace at the beginning of the current line, independent of where point is in the line. If point is inside the whitespace at the beginning of the line, @key{TAB} leaves it at the end of that whitespace; otherwise, @key{TAB} leaves point fixed with respect to the characters around it. Use @kbd{C-q @key{TAB}} to insert a tab at point. @kindex LFD @findex newline-and-indent When entering a large amount of new code, use @key{LFD} (@code{newline-and-indent}), which is equivalent to a @key{RET} followed by a @key{TAB}. @key{LFD} creates a blank line, then gives it the appropriate indentation. @key{TAB} indents the second and following lines of the body of a parenthetical grouping each under the preceding one; therefore, if you alter one line's indentation to be nonstandard, the lines below tend to follow it. This is the right behavior in cases where the standard result of @key{TAB} does not look good. Remember that Emacs assumes that an open-parenthesis, open-brace, or other opening delimiter at the left margin (including the indentation routines) is the start of a function. You should therefore never have an opening delimiter in column zero that is not the beginning of a function, not even inside a string. This restriction is vital for making the indentation commands fast. @xref{Defuns}, for more information on this behavior. @node Multi-line Indent, Lisp Indent, Basic Indent, Grinding @subsection Indenting Several Lines Several commands are available to re-indent several lines of code which have been altered or moved to a different level in a list structure. @table @kbd @item C-M-q Re-indent all the lines within one list (@code{indent-sexp}). @item C-u @key{TAB} Shift an entire list rigidly sideways so that its first line is properly indented. @item C-M-\ Re-indent all lines in the region (@code{indent-region}). @end table @kindex C-M-q @findex indent-sexp @findex indent-c-exp To re-indent the contents of a single list, position point before the beginning of it and type @kbd{C-M-q}. This key is bound to @code{indent-sexp} in Lisp mode, @code{indent-c-exp} in C mode, and bound to other suitable functions in other modes. The indentation of the line the sexp starts on is not changed; therefore, only the relative indentation within the list, and not its position, is changed. To correct the position as well, type a @key{TAB} before @kbd{C-M-q}. @kindex C-u TAB If the relative indentation within a list is correct but the indentation of its beginning is not, go to the line on which the list begins and type @kbd{C-u @key{TAB}}. When you give @key{TAB} a numeric argument, it moves all the lines in the group, starting on the current line, sideways the same amount that the current line moves. The command does not move lines that start inside strings, or C preprocessor lines when in C mode. @kindex C-M-\ @findex indent-region Another way to specify a range to be re-indented is with point and mark. The command @kbd{C-M-\} (@code{indent-region}) applies @key{TAB} to every line whose first character is between point and mark. @node Lisp Indent, C Indent, Multi-line Indent, Grinding @subsection Customizing Lisp Indentation @cindex customization The indentation pattern for a Lisp expression can depend on the function called by the expression. For each Lisp function, you can choose among several predefined patterns of indentation, or define an arbitrary one with a Lisp program. The standard pattern of indentation is as follows: the second line of the expression is indented under the first argument, if that is on the same line as the beginning of the expression; otherwise, the second line is indented underneath the function name. Each following line is indented under the previous line whose nesting depth is the same. @vindex lisp-indent-offset If the variable @code{lisp-indent-offset} is non-@code{nil}, it overrides the usual indentation pattern for the second line of an expression, so that such lines are always indented @code{lisp-indent-offset} more columns than the containing list. @vindex lisp-body-indention Certain functions override the standard pattern. Functions whose names start with @code{def} always indent the second line by @code{lisp-body-indention} extra columns beyond the open-parenthesis starting the expression. Individual functions can override the standard pattern in various ways, according to the @code{lisp-indent-function} property of the function name. (Note: @code{lisp-indent-function} was formerly called @code{lisp-indent-hook}). There are four possibilities for this property: @table @asis @item @code{nil} This is the same as no property; the standard indentation pattern is used. @item @code{defun} The pattern used for function names that start with @code{def} is used for this function also. @item a number, @var{number} The first @var{number} arguments of the function are @dfn{distinguished} arguments; the rest are considered the @dfn{body} of the expression. A line in the expression is indented according to whether the first argument on it is distinguished or not. If the argument is part of the body, the line is indented @code{lisp-body-indent} more columns than the open-parenthesis starting the containing expression. If the argument is distinguished and is either the first or second argument, it is indented @i{twice} that many extra columns. If the argument is distinguished and not the first or second argument, the standard pattern is followed for that line. @item a symbol, @var{symbol} @var{symbol} should be a function name; that function is called to calculate the indentation of a line within this expression. The function receives two arguments: @table @asis @item @var{state} The value returned by @code{parse-partial-sexp} (a Lisp primitive for indentation and nesting computation) when it parses up to the beginning of this line. @item @var{pos} The position at which the line being indented begins. @end table @noindent It should return either a number, which is the number of columns of indentation for that line, or a list whose first element is such a number. The difference between returning a number and returning a list is that a number says that all following lines at the same nesting level should be indented just like this one; a list says that following lines might call for different indentations. This makes a difference when the indentation is computed by @kbd{C-M-q}; if the value is a number, @kbd{C-M-q} need not recalculate indentation for the following lines until the end of the list. @end table @node C Indent, , Lisp Indent, Grinding @subsection Customizing C Indentation Two variables control which commands perform C indentation and when. @vindex c-auto-newline If @code{c-auto-newline} is non-@code{nil}, newlines are inserted both before and after braces that you insert and after colons and semicolons. Correct C indentation is done on all the lines that are made this way. @vindex c-tab-always-indent If @code{c-tab-always-indent} is non-@code{nil}, the @key{TAB} command in C mode does indentation only if point is at the left margin or within the line's indentation. If there is non-whitespace to the left of point, @key{TAB} just inserts a tab character in the buffer. Normally, this variable is @code{nil}, and @key{TAB} always reindents the current line. C does not have anything analogous to particular function names for which special forms of indentation are desirable. However, it has a different need for customization facilities: many different styles of C indentation are in common use. There are six variables you can set to control the style that Emacs C mode will use. @table @code @item c-indent-level Indentation of C statements within surrounding block. The surrounding block's indentation is the indentation of the line on which the open-brace appears. @item c-continued-statement-offset Extra indentation given to a substatement, such as the then-clause of an @code{if} or body of a @code{while}. @item c-brace-offset Extra indentation for lines that start with an open brace. @item c-brace-imaginary-offset An open brace following other text is treated as if it were this far to the right of the start of its line. @item c-argdecl-indent Indentation level of declarations of C function arguments. @item c-label-offset Extra indentation for a line that is a label, case, or default. @end table @vindex c-indent-level The variable @code{c-indent-level} controls the indentation for C statements with respect to the surrounding block. In the example: @example @{ foo (); @end example @noindent the difference in indentation between the lines is @code{c-indent-level}. Its standard value is 2. If the open-brace beginning the compound statement is not at the beginning of its line, the @code{c-indent-level} is added to the indentation of the line, not the column of the open-brace. For example, @example if (losing) @{ do_this (); @end example @noindent One popular indentation style is that which results from setting @code{c-indent-level} to 8 and putting open-braces at the end of a line in this way. Another popular style prefers to put the open-brace on a separate line. @vindex c-brace-imaginary-offset In fact, the value of the variable @code{c-brace-imaginary-offset} is also added to the indentation of such a statement. Normally this variable is zero. Think of this variable as the imaginary position of the open brace, relative to the first non-blank character on the line. By setting the variable to 4 and @code{c-indent-level} to 0, you can get this style: @example if (x == y) @{ do_it (); @} @end example When @code{c-indent-level} is zero, the statements inside most braces line up exactly under the open brace. An exception are braces in column zero, like those surrounding a function's body. The statements inside those braces are not placed at column zero. Instead, @code{c-brace-offset} and @code{c-continued-statement-offset} (see below) are added to produce a typical offset between brace levels, and the statements are indented that far. @vindex c-continued-statement-offset @code{c-continued-statement-offset} controls the extra indentation for a line that starts within a statement (but not within parentheses or brackets). These lines are usually statements inside other statements, like the then-clauses of @code{if} statements and the bodies of @code{while} statements. The @code{c-continued-statement-offset} parameter determines the difference in indentation between the two lines in: @example if (x == y) do_it (); @end example @noindent The default value for @code{c-continued-statement-offset} is 2. Some popular indentation styles correspond to a value of zero for @code{c-continued-statement-offset}. @vindex c-brace-offset @code{c-brace-offset} is the extra indentation given to a line that starts with an open-brace. Its standard value is zero; compare: @example if (x == y) @{ @end example @noindent with: @example if (x == y) do_it (); @end example @noindent If you set @code{c-brace-offset} to 4, the first example becomes: @example if (x == y) @{ @end example @vindex c-argdecl-indent @code{c-argdecl-indent} controls the indentation of declarations of the arguments of a C function. It is absolute: argument declarations receive exactly @code{c-argdecl-indent} spaces. The standard value is 5 and results in code like this: @example char * index (string, char) char *string; int char; @end example @vindex c-label-offset @code{c-label-offset} is the extra indentation given to a line that contains a label, a case statement, or a @code{default:} statement. Its standard value is @minus{}2 and results in code like this: @example switch (c) @{ case 'x': @end example @noindent If @code{c-label-offset} were zero, the same code would be indented as: @example switch (c) @{ case 'x': @end example @noindent This example assumes that the other variables above also have their default values. Using the indentation style produced by the default settings of the variables just discussed and putting open braces on separate lines produces clear and readable files. For an example, look at any of the C source files of XEmacs. @node Matching, Comments, Grinding, Programs @section Automatic Display of Matching Parentheses @cindex matching parentheses @cindex parentheses The Emacs parenthesis-matching feature shows you automatically how parentheses match in the text. Whenever a self-inserting character that is a closing delimiter is typed, the cursor moves momentarily to the location of the matching opening delimiter, provided that is visible on the screen. If it is not on the screen, some text starting with that opening delimiter is displayed in the echo area. Either way, you see the grouping you are closing off. In Lisp, automatic matching applies only to parentheses. In C, it also applies to braces and brackets. Emacs knows which characters to regard as matching delimiters based on the syntax table set by the major mode. @xref{Syntax}. If the opening delimiter and closing delimiter are mismatched---as in @samp{[x)}---the echo area displays a warning message. The correct matches are specified in the syntax table. @vindex blink-matching-paren @vindex blink-matching-paren-distance Two variables control parenthesis matching displays. @code{blink-matching-paren} turns the feature on or off. The default is @code{t} (match display is on); @code{nil} turns it off. @code{blink-matching-paren-distance} specifies how many characters back Emacs searches to find a matching opening delimiter. If the match is not found in the specified region, scanning stops, and nothing is displayed. This prevents wasting lots of time scanning when there is no match. The default is 4000. @node Comments, Balanced Editing, Matching, Programs @section Manipulating Comments @cindex comments @kindex M-; @cindex indentation @findex indent-for-comment The comment commands insert, kill and align comments. @c WideCommands @table @kbd @item M-; Insert or align comment (@code{indent-for-comment}). @item C-x ; Set comment column (@code{set-comment-column}). @item C-u - C-x ; Kill comment on current line (@code{kill-comment}). @item M-@key{LFD} Like @key{RET} followed by inserting and aligning a comment (@code{indent-new-comment-line}). @end table The command that creates a comment is @kbd{Meta-;} (@code{indent-for-comment}). If there is no comment already on the line, a new comment is created and aligned at a specific column called the @dfn{comment column}. Emacs creates the comment by inserting the string at the value of @code{comment-start}; see below. Point is left after that string. If the text of the line extends past the comment column, indentation is done to a suitable boundary (usually, at least one space is inserted). If the major mode has specified a string to terminate comments, that string is inserted after point, to keep the syntax valid. You can also use @kbd{Meta-;} to align an existing comment. If a line already contains the string that starts comments, @kbd{M-;} just moves point after it and re-indents it to the conventional place. Exception: comments starting in column 0 are not moved. Some major modes have special rules for indenting certain kinds of comments in certain contexts. For example, in Lisp code, comments which start with two semicolons are indented as if they were lines of code, instead of at the comment column. Comments which start with three semicolons are supposed to start at the left margin. Emacs understands these conventions by indenting a double-semicolon comment using @key{TAB} and by not changing the indentation of a triple-semicolon comment at all. @example ;; This function is just an example. ;;; Here either two or three semicolons are appropriate. (defun foo (x) ;;; And now, the first part of the function: ;; The following line adds one. (1+ x)) ; This line adds one. @end example In C code, a comment preceded on its line by nothing but whitespace is indented like a line of code. Even when an existing comment is properly aligned, @kbd{M-;} is still useful for moving directly to the start of the comment. @kindex C-u - C-x ; @findex kill-comment @kbd{C-u - C-x ;} (@code{kill-comment}) kills the comment on the current line, if there is one. The indentation before the start of the comment is killed as well. If there does not appear to be a comment in the line, nothing happens. To reinsert the comment on another line, move to the end of that line, type first @kbd{C-y}, and then @kbd{M-;} to realign the comment. Note that @kbd{C-u - C-x ;} is not a distinct key; it is @kbd{C-x ;} (@code{set-comment-column}) with a negative argument. That command is programmed to call @code{kill-comment} when called with a negative argument. However, @code{kill-comment} is a valid command which you could bind directly to a key if you wanted to. @subsection Multiple Lines of Comments @kindex M-LFD @cindex blank lines @cindex Auto Fill mode @findex indent-new-comment-line If you are typing a comment and want to continue it on another line, use the command @kbd{Meta-@key{LFD}} (@code{indent-new-comment-line}), which terminates the comment you are typing, creates a new blank line afterward, and begins a new comment indented under the old one. If Auto Fill mode is on and you go past the fill column while typing, the comment is continued in just this fashion. If point is not at the end of the line when you type @kbd{M-@key{LFD}}, the text on the rest of the line becomes part of the new comment line. @subsection Options Controlling Comments @vindex comment-column @kindex C-x ; @findex set-comment-column The comment column is stored in the variable @code{comment-column}. You can explicitly set it to a number. Alternatively, the command @kbd{C-x ;} (@code{set-comment-column}) sets the comment column to the column point is at. @kbd{C-u C-x ;} sets the comment column to match the last comment before point in the buffer, and then calls @kbd{Meta-;} to align the current line's comment under the previous one. Note that @kbd{C-u - C-x ;} runs the function @code{kill-comment} as described above. @code{comment-column} is a per-buffer variable; altering the variable affects only the current buffer. You can also change the default value. @xref{Locals}. Many major modes initialize this variable for the current buffer. @vindex comment-start-skip The comment commands recognize comments based on the regular expression that is the value of the variable @code{comment-start-skip}. This regexp should not match the null string. It may match more than the comment starting delimiter in the strictest sense of the word; for example, in C mode the value of the variable is @code{@t{"/\\*+ *"}}, which matches extra stars and spaces after the @samp{/*} itself. (Note that @samp{\\} is needed in Lisp syntax to include a @samp{\} in the string, which is needed to deny the first star its special meaning in regexp syntax. @xref{Regexps}.) @vindex comment-start @vindex comment-end When a comment command makes a new comment, it inserts the value of @code{comment-start} to begin it. The value of @code{comment-end} is inserted after point and will follow the text you will insert into the comment. In C mode, @code{comment-start} has the value @w{@code{"/* "}} and @code{comment-end} has the value @w{@code{" */"}}. @vindex comment-multi-line @code{comment-multi-line} controls how @kbd{M-@key{LFD}} (@code{indent-new-comment-line}) behaves when used inside a comment. If @code{comment-multi-line} is @code{nil}, as it normally is, then @kbd{M-@key{LFD}} terminates the comment on the starting line and starts a new comment on the new following line. If @code{comment-multi-line} is not @code{nil}, then @kbd{M-@key{LFD}} sets up the new following line as part of the same comment that was found on the starting line. This is done by not inserting a terminator on the old line and not inserting a starter on the new line. In languages where multi-line comments are legal, the value you choose for this variable is a matter of taste. @vindex comment-indent-hook The variable @code{comment-indent-hook} should contain a function that is called to compute the indentation for a newly inserted comment or for aligning an existing comment. Major modes set this variable differently. The function is called with no arguments, but with point at the beginning of the comment, or at the end of a line if a new comment is to be inserted. The function should return the column in which the comment ought to start. For example, in Lisp mode, the indent hook function bases its decision on the number of semicolons that begin an existing comment and on the code in the preceding lines. @node Balanced Editing, Lisp Completion, Comments, Programs @section Editing Without Unbalanced Parentheses @table @kbd @item M-( Put parentheses around next sexp(s) (@code{insert-parentheses}). @item M-) Move past next close parenthesis and re-indent (@code{move-over-close-and-reindent}). @end table @kindex M-( @kindex M-) @findex insert-parentheses @findex move-over-close-and-reindent The commands @kbd{M-(} (@code{insert-parentheses}) and @kbd{M-)} (@code{move-over-close-and-reindent}) are designed to facilitate a style of editing which keeps parentheses balanced at all times. @kbd{M-(} inserts a pair of parentheses, either together as in @samp{()}, or, if given an argument, around the next several sexps, and leaves point after the open parenthesis. Instead of typing @kbd{( F O O )}, you can type @kbd{M-( F O O}, which has the same effect except for leaving the cursor before the close parenthesis. You can then type @kbd{M-)}, which moves past the close parenthesis, deletes any indentation preceding it (in this example there is none), and indents with @key{LFD} after it. @node Lisp Completion, Documentation, Balanced Editing, Programs @section Completion for Lisp Symbols @cindex completion (symbol names) Completion usually happens in the minibuffer. An exception is completion for Lisp symbol names, which is available in all buffers. @kindex M-TAB @findex lisp-complete-symbol The command @kbd{M-@key{TAB}} (@code{lisp-complete-symbol}) takes the partial Lisp symbol before point to be an abbreviation, and compares it against all non-trivial Lisp symbols currently known to Emacs. Any additional characters that they all have in common are inserted at point. Non-trivial symbols are those that have function definitions, values, or properties. If there is an open-parenthesis immediately before the beginning of the partial symbol, only symbols with function definitions are considered as completions. If the partial name in the buffer has more than one possible completion and they have no additional characters in common, a list of all possible completions is displayed in another window. @node Documentation, Change Log, Lisp Completion, Programs @section Documentation Commands @kindex C-h f @findex describe-function @kindex C-h v @findex describe-variable As you edit Lisp code to be run in Emacs, you can use the commands @kbd{C-h f} (@code{describe-function}) and @kbd{C-h v} (@code{describe-variable}) to print documentation of functions and variables you want to call. These commands use the minibuffer to read the name of a function or variable to document, and display the documentation in a window. For extra convenience, these commands provide default arguments based on the code in the neighborhood of point. @kbd{C-h f} sets the default to the function called in the innermost list containing point. @kbd{C-h v} uses the symbol name around or adjacent to point as its default. @findex manual-entry The @kbd{M-x manual-entry} command gives you access to documentation on Unix commands, system calls, and libraries. The command reads a topic as an argument, and displays the Unix manual page for that topic. @code{manual-entry} always searches all 8 sections of the manual and concatenates all the entries it finds. For example, the topic @samp{termcap} finds the description of the termcap library from section 3, followed by the description of the termcap data base from section 5. @node Change Log, Tags, Documentation, Programs @section Change Logs @cindex change log @findex add-change-log-entry The Emacs command @kbd{M-x add-change-log-entry} helps you keep a record of when and why you have changed a program. It assumes that you have a file in which you write a chronological sequence of entries describing individual changes. The default is to store the change entries in a file called @file{ChangeLog} in the same directory as the file you are editing. The same @file{ChangeLog} file therefore records changes for all the files in a directory. A change log entry starts with a header line that contains your name and the current date. Except for these header lines, every line in the change log starts with a tab. One entry can describe several changes; each change starts with a line starting with a tab and a star. @kbd{M-x add-change-log-entry} visits the change log file and creates a new entry unless the most recent entry is for today's date and your name. In either case, it adds a new line to start the description of another change just after the header line of the entry. When @kbd{M-x add-change-log-entry} is finished, all is prepared for you to edit in the description of what you changed and how. You must then save the change log file yourself. The change log file is always visited in Indented Text mode, which means that @key{LFD} and auto-filling indent each new line like the previous line. This is convenient for entering the contents of an entry, which must be indented. @xref{Text Mode}. Here is an example of the formatting conventions used in the change log for Emacs: @smallexample Wed Jun 26 19:29:32 1985 Richard M. Stallman (rms at mit-prep) * xdisp.c (try_window_id): If C-k is done at end of next-to-last line, this fn updates window_end_vpos and cannot leave window_end_pos nonnegative (it is zero, in fact). If display is preempted before lines are output, this is inconsistent. Fix by setting blank_end_of_window to nonzero. Tue Jun 25 05:25:33 1985 Richard M. Stallman (rms at mit-prep) * cmds.c (Fnewline): Call the auto fill hook if appropriate. * xdisp.c (try_window_id): If point is found by compute_motion after xp, record that permanently. If display_text_line sets point position wrong (case where line is killed, point is at eob and that line is not displayed), set it again in final compute_motion. @end smallexample @node Tags, Fortran, Change Log, Programs @section Tags Tables @cindex tags table A @dfn{tags table} is a description of how a multi-file program is broken up into files. It lists the names of the component files and the names and positions of the functions (or other named subunits) in each file. Grouping the related files makes it possible to search or replace through all the files with one command. Recording the function names and positions makes possible the @kbd{M-.} command which finds the definition of a function by looking up which of the files it is in. Tags tables are stored in files called @dfn{tags table files}. The conventional name for a tags table file is @file{TAGS}. Each entry in the tags table records the name of one tag, the name of the file that the tag is defined in (implicitly), and the position in that file of the tag's definition. Just what names from the described files are recorded in the tags table depends on the programming language of the described file. They normally include all functions and subroutines, and may also include global variables, data types, and anything else convenient. Each name recorded is called a @dfn{tag}. @cindex C++ class browser, tags @cindex tags, C++ @cindex class browser, C++ @cindex Ebrowse The Ebrowse is a separate facility tailored for C++, with tags and a class browser. @xref{Top,,, ebrowse, Ebrowse User's Manual}. @menu * Tag Syntax:: Tag syntax for various types of code and text files. * Create Tags Table:: Creating a tags table with @code{etags}. * Etags Regexps:: Create arbitrary tags using regular expressions. * Select Tags Table:: How to visit a tags table. * Find Tag:: Commands to find the definition of a specific tag. * Tags Search:: Using a tags table for searching and replacing. * List Tags:: Listing and finding tags defined in a file. @end menu @node Tag Syntax @subsection Source File Tag Syntax Here is how tag syntax is defined for the most popular languages: @itemize @bullet @item In C code, any C function or typedef is a tag, and so are definitions of @code{struct}, @code{union} and @code{enum}. You can tag function declarations and external variables in addition to function definitions by giving the @samp{--declarations} option to @code{etags}. @code{#define} macro definitions and @code{enum} constants are also tags, unless you specify @samp{--no-defines} when making the tags table. Similarly, global variables are tags, unless you specify @samp{--no-globals}. Use of @samp{--no-globals} and @samp{--no-defines} can make the tags table file much smaller. @item In C++ code, in addition to all the tag constructs of C code, member functions are also recognized, and optionally member variables if you use the @samp{--members} option. Tags for variables and functions in classes are named @samp{@var{class}::@var{variable}} and @samp{@var{class}::@var{function}}. @code{operator} functions tags are named, for example @samp{operator+}. @item In Java code, tags include all the constructs recognized in C++, plus the @code{interface}, @code{extends} and @code{implements} constructs. Tags for variables and functions in classes are named @samp{@var{class}.@var{variable}} and @samp{@var{class}.@var{function}}. @item In La@TeX{} text, the argument of any of the commands @code{\chapter}, @code{\section}, @code{\subsection}, @code{\subsubsection}, @code{\eqno}, @code{\label}, @code{\ref}, @code{\cite}, @code{\bibitem}, @code{\part}, @code{\appendix}, @code{\entry}, or @code{\index}, is a tag.@refill Other commands can make tags as well, if you specify them in the environment variable @code{TEXTAGS} before invoking @code{etags}. The value of this environment variable should be a colon-separated list of command names. For example, @example TEXTAGS="def:newcommand:newenvironment" export TEXTAGS @end example @noindent specifies (using Bourne shell syntax) that the commands @samp{\def}, @samp{\newcommand} and @samp{\newenvironment} also define tags. @item In Lisp code, any function defined with @code{defun}, any variable defined with @code{defvar} or @code{defconst}, and in general the first argument of any expression that starts with @samp{(def} in column zero, is a tag. @item In Scheme code, tags include anything defined with @code{def} or with a construct whose name starts with @samp{def}. They also include variables set with @code{set!} at top level in the file. @end itemize Several other languages are also supported: @itemize @bullet @item In Ada code, functions, procedures, packages, tasks, and types are tags. Use the @samp{--packages-only} option to create tags for packages only. With Ada, it is possible to have the same name used for different entity kinds (e.g.@: the same name for a procedure and a function). Also, for things like packages, procedures and functions, there is the spec (i.e.@: the interface) and the body (i.e.@: the implementation). To facilitate the choice to the user, a tag value is appended with a qualifier: @table @asis @item function @kbd{/f} @item procedure @kbd{/p} @item package spec @kbd{/s} @item package body @kbd{/b} @item type @kbd{/t} @item task @kbd{/k} @end table So, as an example, @kbd{M-x find-tag bidule/b} will go directly to the body of the package @var{bidule} while @kbd{M-x find-tag bidule} will just search for any tag @var{bidule}. @item In assembler code, labels appearing at the beginning of a line, followed by a colon, are tags. @item In Bison or Yacc input files, each rule defines as a tag the nonterminal it constructs. The portions of the file that contain C code are parsed as C code. @item In Cobol code, tags are paragraph names; that is, any word starting in column 8 and followed by a period. @item In Erlang code, the tags are the functions, records, and macros defined in the file. @item In Fortran code, functions, subroutines and blockdata are tags. @item In makefiles, targets are tags. @item In Objective C code, tags include Objective C definitions for classes, class categories, methods, and protocols. @item In Pascal code, the tags are the functions and procedures defined in the file. @item In Perl code, the tags are the procedures defined by the @code{sub}, @code{my} and @code{local} keywords. Use @samp{--globals} if you want to tag global variables. @item In PostScript code, the tags are the functions. @item In Prolog code, a tag name appears at the left margin. @item In Python code, @code{def} or @code{class} at the beginning of a line generate a tag. @end itemize You can also generate tags based on regexp matching (@pxref{Etags Regexps}) to handle other formats and languages. @node Create Tags Table @subsection Creating Tags Tables @cindex @code{etags} program The @code{etags} program is used to create a tags table file. It knows the syntax of several languages, as described in @iftex the previous section. @end iftex @ifinfo @ref{Tag Syntax}. @end ifinfo Here is how to run @code{etags}: @example etags @var{inputfiles}@dots{} @end example @noindent The @code{etags} program reads the specified files, and writes a tags table named @file{TAGS} in the current working directory. You can intermix compressed and plain text source file names. @code{etags} knows about the most common compression formats, and does the right thing. So you can compress all your source files and have @code{etags} look for compressed versions of its file name arguments, if it does not find uncompressed versions. Under MS-DOS, @code{etags} also looks for file names like @samp{mycode.cgz} if it is given @samp{mycode.c} on the command line and @samp{mycode.c} does not exist. @code{etags} recognizes the language used in an input file based on its file name and contents. You can specify the language with the @samp{--language=@var{name}} option, described below. If the tags table data become outdated due to changes in the files described in the table, the way to update the tags table is the same way it was made in the first place. It is not necessary to do this often. If the tags table fails to record a tag, or records it for the wrong file, then Emacs cannot possibly find its definition. However, if the position recorded in the tags table becomes a little bit wrong (due to some editing in the file that the tag definition is in), the only consequence is a slight delay in finding the tag. Even if the stored position is very wrong, Emacs will still find the tag, but it must search the entire file for it. So you should update a tags table when you define new tags that you want to have listed, or when you move tag definitions from one file to another, or when changes become substantial. Normally there is no need to update the tags table after each edit, or even every day. One tags table can effectively include another. Specify the included tags file name with the @samp{--include=@var{file}} option when creating the file that is to include it. The latter file then acts as if it contained all the files specified in the included file, as well as the files it directly contains. If you specify the source files with relative file names when you run @code{etags}, the tags file will contain file names relative to the directory where the tags file was initially written. This way, you can move an entire directory tree containing both the tags file and the source files, and the tags file will still refer correctly to the source files. If you specify absolute file names as arguments to @code{etags}, then the tags file will contain absolute file names. This way, the tags file will still refer to the same files even if you move it, as long as the source files remain in the same place. Absolute file names start with @samp{/}, or with @samp{@var{device}:/} on MS-DOS and MS-Windows. When you want to make a tags table from a great number of files, you may have problems listing them on the command line, because some systems have a limit on its length. The simplest way to circumvent this limit is to tell @code{etags} to read the file names from its standard input, by typing a dash in place of the file names, like this: @smallexample find . -name "*.[chCH]" -print | etags - @end smallexample Use the option @samp{--language=@var{name}} to specify the language explicitly. You can intermix these options with file names; each one applies to the file names that follow it. Specify @samp{--language=auto} to tell @code{etags} to resume guessing the language from the file names and file contents. Specify @samp{--language=none} to turn off language-specific processing entirely; then @code{etags} recognizes tags by regexp matching alone (@pxref{Etags Regexps}). @samp{etags --help} prints the list of the languages @code{etags} knows, and the file name rules for guessing the language. It also prints a list of all the available @code{etags} options, together with a short explanation. @node Etags Regexps @subsection Etags Regexps The @samp{--regex} option provides a general way of recognizing tags based on regexp matching. You can freely intermix it with file names. Each @samp{--regex} option adds to the preceding ones, and applies only to the following files. The syntax is: @smallexample --regex=/@var{tagregexp}[/@var{nameregexp}]/ @end smallexample @noindent where @var{tagregexp} is used to match the lines to tag. It is always anchored, that is, it behaves as if preceded by @samp{^}. If you want to account for indentation, just match any initial number of blanks by beginning your regular expression with @samp{[ \t]*}. In the regular expressions, @samp{\} quotes the next character, and @samp{\t} stands for the tab character. Note that @code{etags} does not handle the other C escape sequences for special characters. @cindex interval operator (in regexps) The syntax of regular expressions in @code{etags} is the same as in Emacs, augmented with the @dfn{interval operator}, which works as in @code{grep} and @code{ed}. The syntax of an interval operator is @samp{\@{@var{m},@var{n}\@}}, and its meaning is to match the preceding expression at least @var{m} times and up to @var{n} times. You should not match more characters with @var{tagregexp} than that needed to recognize what you want to tag. If the match is such that more characters than needed are unavoidably matched by @var{tagregexp} (as will usually be the case), you should add a @var{nameregexp}, to pick out just the tag. This will enable Emacs to find tags more accurately and to do completion on tag names more reliably. You can find some examples below. The option @samp{--ignore-case-regex} (or @samp{-c}) is like @samp{--regex}, except that the regular expression provided will be matched without regard to case, which is appropriate for various programming languages. The @samp{-R} option deletes all the regexps defined with @samp{--regex} options. It applies to the file names following it, as you can see from the following example: @smallexample etags --regex=/@var{reg1}/ voo.doo --regex=/@var{reg2}/ \ bar.ber -R --lang=lisp los.er @end smallexample @noindent Here @code{etags} chooses the parsing language for @file{voo.doo} and @file{bar.ber} according to their contents. @code{etags} also uses @var{reg1} to recognize additional tags in @file{voo.doo}, and both @var{reg1} and @var{reg2} to recognize additional tags in @file{bar.ber}. @code{etags} uses the Lisp tags rules, and no regexp matching, to recognize tags in @file{los.er}. A regular expression can be bound to a given language, by prepending it with @samp{@{lang@}}. When you do this, @code{etags} will use the regular expression only for files of that language. @samp{etags --help} prints the list of languages recognised by @code{etags}. The following example tags the @code{DEFVAR} macros in the Emacs source files. @code{etags} applies this regular expression to C files only: @smallexample --regex='@{c@}/[ \t]*DEFVAR_[A-Z_ \t(]+"\([^"]+\)"/' @end smallexample @noindent This feature is particularly useful when storing a list of regular expressions in a file. The following option syntax instructs @code{etags} to read two files of regular expressions. The regular expressions contained in the second file are matched without regard to case. @smallexample --regex=@@first-file --ignore-case-regex=@@second-file @end smallexample @noindent A regex file contains one regular expressions per line. Empty lines, and lines beginning with space or tab are ignored. When the first character in a line is @samp{@@}, @code{etags} assumes that the rest of the line is the name of a file of regular expressions. This means that such files can be nested. All the other lines are taken to be regular expressions. For example, one can create a file called @samp{emacs.tags} with the following contents (the first line in the file is a comment): @smallexample -- This is for GNU Emacs source files @{c@}/[ \t]*DEFVAR_[A-Z_ \t(]+"\([^"]+\)"/\1/ @end smallexample @noindent and then use it like this: @smallexample etags --regex=@@emacs.tags *.[ch] */*.[ch] @end smallexample Here are some more examples. The regexps are quoted to protect them from shell interpretation. @itemize @bullet @item Tag Octave files: @smallexample etags --language=none \ --regex='/[ \t]*function.*=[ \t]*\([^ \t]*\)[ \t]*(/\1/' \ --regex='/###key \(.*\)/\1/' \ --regex='/[ \t]*global[ \t].*/' \ *.m @end smallexample @noindent Note that tags are not generated for scripts so that you have to add a line by yourself of the form `###key ' if you want to jump to it. @item Tag Tcl files: @smallexample etags --language=none --regex='/proc[ \t]+\([^ \t]+\)/\1/' *.tcl @end smallexample @item Tag VHDL files: @smallexample --language=none \ --regex='/[ \t]*\(ARCHITECTURE\|CONFIGURATION\) +[^ ]* +OF/' \ --regex='/[ \t]*\(ATTRIBUTE\|ENTITY\|FUNCTION\|PACKAGE\ \( BODY\)?\|PROCEDURE\|PROCESS\|TYPE\)[ \t]+\([^ \t(]+\)/\3/' @end smallexample @end itemize @node Select Tags Table, Find Tag, Etags Regexps, Tags @subsection Selecting a Tags Table @vindex tag-table-alist At any time Emacs has one @dfn{selected} tags table, and all the commands for working with tags tables use the selected one. To select a tags table, use the variable @code{tag-table-alist}. The value of @code{tag-table-alist} is a list that determines which @code{TAGS} files should be active for a given buffer. This is not really an association list, in that all elements are checked. The car of each element of this list is a pattern against which the buffers file name is compared; if it matches, then the cdr of the list should be the name of the tags table to use. If more than one element of this list matches the buffers file name, all of the associated tags tables are used. Earlier ones are searched first. If the car of elements of this list are strings, they are treated as regular-expressions against which the file is compared (like the @code{auto-mode-alist}). If they are not strings, they are evaluated. If they evaluate to non-@code{nil}, the current buffer is considered to match. If the cdr of the elements of this list are strings, they are assumed to name a tags file. If they name a directory, the string @file{tags} is appended to them to get the file name. If they are not strings, they are evaluated and must return an appropriate string. For example: @example (setq tag-table-alist '(("/usr/src/public/perl/" . "/usr/src/public/perl/perl-3.0/") ("\\.el$" . "/usr/local/emacs/src/") ("/jbw/gnu/" . "/usr15/degree/stud/jbw/gnu/") ("" . "/usr/local/emacs/src/") )) @end example The example defines the tags table alist in the following way: @itemize @bullet @item Anything in the directory @file{/usr/src/public/perl/} should use the @file{TAGS} file @file{/usr/src/public/perl/perl-3.0/TAGS}. @item Files ending in @file{.el} should use the @file{TAGS} file @file{/usr/local/emacs/src/TAGS}. @item Anything in or below the directory @file{/jbw/gnu/} should use the @file{TAGS} file @file{/usr15/degree/stud/jbw/gnu/TAGS}. @end itemize If you had a file called @file{/usr/jbw/foo.el}, it would use both @file{TAGS} files, @* @file{/usr/local/emacs/src/TAGS} and @file{/usr15/degree/stud/jbw/gnu/TAGS} (in that order), because it matches both patterns. If the buffer-local variable @code{buffer-tag-table} is set, it names a tags table that is searched before all others when @code{find-tag} is executed from this buffer. If there is a file called @file{TAGS} in the same directory as the file in question, then that tags file will always be used as well (after the @code{buffer-tag-table} but before the tables specified by this list). If the variable @code{tags-file-name} is set, the @file{TAGS} file it names will apply to all buffers (for backwards compatibility.) It is searched first. @vindex tags-always-build-completion-table If the value of the variable @code{tags-always-build-completion-table} is @code{t}, the tags file will always be added to the completion table without asking first, regardless of the size of the tags file. @vindex tags-file-name @findex visit-tags-table The function @kbd{M-x visit-tags-table}, is largely made obsolete by the variable @code{tag-table-alist}, tells tags commands to use the tags table file @var{file} first. The @var{file} should be the name of a file created with the @code{etags} program. A directory name is also acceptable; it means the file @file{TAGS} in that directory. The function only stores the file name you provide in the variable @code{tags-file-name}. Emacs does not actually read in the tags table contents until you try to use them. You can set the variable explicitly instead of using @code{visit-tags-table}. The value of the variable @code{tags-file-name} is the name of the tags table used by all buffers. This is for backward compatibility, and is largely supplanted by the variable @code{tag-table-alist}. @node Find Tag, Tags Search, Select Tags Table, Tags @subsection Finding a Tag The most important thing that a tags table enables you to do is to find the definition of a specific tag. @table @kbd @item M-.@: @var{tag &optional other-window} Find first definition of @var{tag} (@code{find-tag}). @item C-u M-. Find next alternate definition of last tag specified. @item C-x 4 . @var{tag} Find first definition of @var{tag}, but display it in another window (@code{find-tag-other-window}). @end table @kindex M-. @findex find-tag @kbd{M-.}@: (@code{find-tag}) is the command to find the definition of a specified tag. It searches through the tags table for that tag, as a string, then uses the tags table information to determine the file in which the definition is used and the approximate character position of the definition in the file. Then @code{find-tag} visits the file, moves point to the approximate character position, and starts searching ever-increasing distances away for the text that should appear at the beginning of the definition. If an empty argument is given (by typing @key{RET}), the sexp in the buffer before or around point is used as the name of the tag to find. @xref{Lists}, for information on sexps. The argument to @code{find-tag} need not be the whole tag name; it can be a substring of a tag name. However, there can be many tag names containing the substring you specify. Since @code{find-tag} works by searching the text of the tags table, it finds the first tag in the table that the specified substring appears in. To find other tags that match the substring, give @code{find-tag} a numeric argument, as in @kbd{C-u M-.}. This does not read a tag name, but continues searching the tag table's text for another tag containing the same substring last used. If your keyboard has a real @key{META} key, @kbd{M-0 M-.}@: is an easier alternative to @kbd{C-u M-.}. If the optional second argument @var{other-window} is non-@code{nil}, it uses another window to display the tag. Multiple active tags tables and completion are supported. Variables of note include the following: @vindex tag-table-alist @vindex tags-file-name @vindex tags-build-completion-table @vindex buffer-tag-table @vindex make-tags-files-invisible @vindex tag-mark-stack-max @table @kbd @item tag-table-alist Controls which tables apply to which buffers. @item tags-file-name Stores a default tags table. @item tags-build-completion-table Controls completion behavior. @item buffer-tag-table Specifies a buffer-local table. @item make-tags-files-invisible Sets whether tags tables should be very hidden. @item tag-mark-stack-max Specifies how many tags-based hops to remember. @end table @kindex C-x 4 . @findex find-tag-other-window Like most commands that can switch buffers, @code{find-tag} has another similar command that displays the new buffer in another window. @kbd{C-x 4 .}@: invokes the function @code{find-tag-other-window}. (This key sequence ends with a period.) Emacs comes with a tags table file @file{TAGS} (in the directory containing Lisp libraries) that includes all the Lisp libraries and all the C sources of Emacs. By specifying this file with @code{visit-tags-table} and then using @kbd{M-.}@: you can quickly look at the source of any Emacs function. @node Tags Search, List Tags, Find Tag, Tags @subsection Searching and Replacing with Tags Tables The commands in this section visit and search all the files listed in the selected tags table, one by one. For these commands, the tags table serves only to specify a sequence of files to search. A related command is @kbd{M-x grep} (@pxref{Compilation}). @table @kbd @item M-x tags-search @key{RET} @var{regexp} @key{RET} Search for @var{regexp} through the files in the selected tags table. @item M-x tags-query-replace @key{RET} @var{regexp} @key{RET} @var{replacement} @key{RET} Perform a @code{query-replace-regexp} on each file in the selected tags table. @item M-, Restart one of the commands above, from the current location of point (@code{tags-loop-continue}). @end table @findex tags-search @kbd{M-x tags-search} reads a regexp using the minibuffer, then searches for matches in all the files in the selected tags table, one file at a time. It displays the name of the file being searched so you can follow its progress. As soon as it finds an occurrence, @code{tags-search} returns. @kindex M-, @findex tags-loop-continue Having found one match, you probably want to find all the rest. To find one more match, type @kbd{M-,} (@code{tags-loop-continue}) to resume the @code{tags-search}. This searches the rest of the current buffer, followed by the remaining files of the tags table.@refill @findex tags-query-replace @kbd{M-x tags-query-replace} performs a single @code{query-replace-regexp} through all the files in the tags table. It reads a regexp to search for and a string to replace with, just like ordinary @kbd{M-x query-replace-regexp}. It searches much like @kbd{M-x tags-search}, but repeatedly, processing matches according to your input. @xref{Replace}, for more information on query replace. It is possible to get through all the files in the tags table with a single invocation of @kbd{M-x tags-query-replace}. But often it is useful to exit temporarily, which you can do with any input event that has no special query replace meaning. You can resume the query replace subsequently by typing @kbd{M-,}; this command resumes the last tags search or replace command that you did. The commands in this section carry out much broader searches than the @code{find-tag} family. The @code{find-tag} commands search only for definitions of tags that match your substring or regexp. The commands @code{tags-search} and @code{tags-query-replace} find every occurrence of the regexp, as ordinary search commands and replace commands do in the current buffer. These commands create buffers only temporarily for the files that they have to search (those which are not already visited in Emacs buffers). Buffers in which no match is found are quickly killed; the others continue to exist. It may have struck you that @code{tags-search} is a lot like @code{grep}. You can also run @code{grep} itself as an inferior of Emacs and have Emacs show you the matching lines one by one. This works much like running a compilation; finding the source locations of the @code{grep} matches works like finding the compilation errors. @xref{Compilation}. If you wish to process all the files in a selected tags table, but @kbd{M-x tags-search} and @kbd{M-x tags-query-replace} are not giving you the desired result, you can use @kbd{M-x next-file}. @table @kbd @item C-u M-x next-file With a numeric argument, regardless of its value, visit the first file in the tags table and prepare to advance sequentially by files. @item M-x next-file Visit the next file in the selected tags table. @end table @node List Tags, , Tags Search, Tags @subsection Tags Table Inquiries @table @kbd @item M-x list-tags Display a list of the tags defined in a specific program file. @item M-x tags-apropos Display a list of all tags matching a specified regexp. @end table @findex list-tags @kbd{M-x list-tags} reads the name of one of the files described by the selected tags table, and displays a list of all the tags defined in that file. The ``file name'' argument is really just a string to compare against the names recorded in the tags table; it is read as a string rather than a file name. Therefore, completion and defaulting are not available, and you must enter the string the same way it appears in the tag table. Do not include a directory as part of the file name unless the file name recorded in the tags table contains that directory. @findex tags-apropos @kbd{M-x tags-apropos} is like @code{apropos} for tags. It reads a regexp, then finds all the tags in the selected tags table whose entries match that regexp, and displays the tag names found. @node Fortran, Asm Mode, Tags, Programs @section Fortran Mode @cindex Fortran mode Fortran mode provides special motion commands for Fortran statements and subprograms, and indentation commands that understand Fortran conventions of nesting, line numbers, and continuation statements. Special commands for comments are provided because Fortran comments are unlike those of other languages. Built-in abbrevs optionally save typing when you insert Fortran keywords. @findex fortran-mode Use @kbd{M-x fortran-mode} to switch to this major mode. Doing so calls the value of @code{fortran-mode-hook} as a function of no arguments if that variable has a non-@code{nil} value. @menu * Motion: Fortran Motion. Moving point by statements or subprograms. * Indent: Fortran Indent. Indentation commands for Fortran. * Comments: Fortran Comments. Inserting and aligning comments. * Columns: Fortran Columns. Measuring columns for valid Fortran. * Abbrev: Fortran Abbrev. Built-in abbrevs for Fortran keywords. @end menu Fortran mode was contributed by Michael Prange. @node Fortran Motion, Fortran Indent, Fortran, Fortran @subsection Motion Commands Fortran mode provides special commands to move by subprograms (functions and subroutines) and by statements. There is also a command to put the region around one subprogram, which is convenient for killing it or moving it. @kindex C-M-a (Fortran mode) @kindex C-M-e (Fortran mode) @kindex C-M-h (Fortran mode) @kindex C-c C-p (Fortran mode) @kindex C-c C-n (Fortran mode) @findex beginning-of-fortran-subprogram @findex end-of-fortran-subprogram @findex mark-fortran-subprogram @findex fortran-previous-statement @findex fortran-next-statement @table @kbd @item C-M-a Move to beginning of subprogram@* (@code{beginning-of-fortran-subprogram}). @item C-M-e Move to end of subprogram (@code{end-of-fortran-subprogram}). @item C-M-h Put point at beginning of subprogram and mark at end (@code{mark-fortran-subprogram}). @item C-c C-n Move to beginning of current or next statement (@code{fortran-next-@*statement}). @item C-c C-p Move to beginning of current or previous statement (@code{fortran-@*previous-statement}). @end table @node Fortran Indent, Fortran Comments, Fortran Motion, Fortran @subsection Fortran Indentation Special commands and features are available for indenting Fortran code. They make sure various syntactic entities (line numbers, comment line indicators, and continuation line flags) appear in the columns that are required for standard Fortran. @menu * Commands: ForIndent Commands. Commands for indenting Fortran. * Numbers: ForIndent Num. How line numbers auto-indent. * Conv: ForIndent Conv. Conventions you must obey to avoid trouble. * Vars: ForIndent Vars. Variables controlling Fortran indent style. @end menu @node ForIndent Commands, ForIndent Num, Fortran Indent, Fortran Indent @subsubsection Fortran Indentation Commands @table @kbd @item @key{TAB} Indent the current line (@code{fortran-indent-line}). @item M-@key{LFD} Break the current line and set up a continuation line. @item C-M-q Indent all the lines of the subprogram point is in (@code{fortran-indent-subprogram}). @end table @findex fortran-indent-line @key{TAB} is redefined by Fortran mode to reindent the current line for Fortran (@code{fortran-indent-line}). Line numbers and continuation markers are indented to their required columns, and the body of the statement is independently indented, based on its nesting in the program. @kindex C-M-q (Fortran mode) @findex fortran-indent-subprogram The key @kbd{C-M-q} is redefined as @code{fortran-indent-subprogram}, a command that reindents all the lines of the Fortran subprogram (function or subroutine) containing point. @kindex M-LFD (Fortran mode) @findex fortran-split-line The key @kbd{M-@key{LFD}} is redefined as @code{fortran-split-line}, a command to split a line in the appropriate fashion for Fortran. In a non-comment line, the second half becomes a continuation line and is indented accordingly. In a comment line, both halves become separate comment lines. @node ForIndent Num, ForIndent Conv, ForIndent Commands, Fortran Indent @subsubsection Line Numbers and Continuation If a number is the first non-whitespace in the line, it is assumed to be a line number and is moved to columns 0 through 4. (Columns are always counted from 0 in XEmacs.) If the text on the line starts with the conventional Fortran continuation marker @samp{$}, it is moved to column 5. If the text begins with any non whitespace character in column 5, it is assumed to be an unconventional continuation marker and remains in column 5. @vindex fortran-line-number-indent Line numbers of four digits or less are normally indented one space. This amount is controlled by the variable @code{fortran-line-number-indent}, which is the maximum indentation a line number can have. Line numbers are indented to right-justify them to end in column 4 unless that would require more than the maximum indentation. The default value of the variable is 1. @vindex fortran-electric-line-number Simply inserting a line number is enough to indent it according to these rules. As each digit is inserted, the indentation is recomputed. To turn off this feature, set the variable @code{fortran-electric-line-number} to @code{nil}. Then inserting line numbers is like inserting anything else. @node ForIndent Conv, ForIndent Vars, ForIndent Num, Fortran Indent @subsubsection Syntactic Conventions Fortran mode assumes that you follow certain conventions that simplify the task of understanding a Fortran program well enough to indent it properly: @vindex fortran-continuation-char @itemize @bullet @item Two nested @samp{do} loops never share a @samp{continue} statement. @item The same character appears in column 5 of all continuation lines. It is the value of the variable @code{fortran-continuation-char}. By default, this character is @samp{$}. @end itemize @noindent If you fail to follow these conventions, the indentation commands may indent some lines unaesthetically. However, a correct Fortran program will retain its meaning when reindented even if the conventions are not followed. @node ForIndent Vars, , ForIndent Conv, Fortran Indent @subsubsection Variables for Fortran Indentation @vindex fortran-do-indent @vindex fortran-if-indent @vindex fortran-continuation-indent @vindex fortran-check-all-num-for-matching-do @vindex fortran-minimum-statement-indent Several additional variables control how Fortran indentation works. @table @code @item fortran-do-indent Extra indentation within each level of @samp{do} statement (the default is 3). @item fortran-if-indent Extra indentation within each level of @samp{if} statement (the default is 3). @item fortran-continuation-indent Extra indentation for bodies of continuation lines (the default is 5). @item fortran-check-all-num-for-matching-do If this is @code{nil}, indentation assumes that each @samp{do} statement ends on a @samp{continue} statement. Therefore, when computing indentation for a statement other than @samp{continue}, it can save time by not checking for a @samp{do} statement ending there. If this is non-@code{nil}, indenting any numbered statement must check for a @samp{do} that ends there. The default is @code{nil}. @item fortran-minimum-statement-indent Minimum indentation for Fortran statements. For standard Fortran, this is 6. Statement bodies are always indented at least this much. @end table @node Fortran Comments, Fortran Columns, Fortran Indent, Fortran @subsection Comments The usual Emacs comment commands assume that a comment can follow a line of code. In Fortran, the standard comment syntax requires an entire line to be just a comment. Therefore, Fortran mode replaces the standard Emacs comment commands and defines some new variables. Fortran mode can also handle a non-standard comment syntax where comments start with @samp{!} and can follow other text. Because only some Fortran compilers accept this syntax, Fortran mode will not insert such comments unless you have specified to do so in advance by setting the variable @code{comment-start} to @samp{"!"} (@pxref{Variables}). @table @kbd @item M-; Align comment or insert new comment (@code{fortran-comment-indent}). @item C-x ; Applies to nonstandard @samp{!} comments only. @item C-c ; Turn all lines of the region into comments, or (with arg) turn them back into real code (@code{fortran-comment-region}). @end table @kbd{M-;} in Fortran mode is redefined as the command @code{fortran-comment-indent}. Like the usual @kbd{M-;} command, it recognizes an existing comment and aligns its text appropriately. If there is no existing comment, a comment is inserted and aligned. Inserting and aligning comments is not the same in Fortran mode as in other modes. When a new comment must be inserted, a full-line comment is inserted if the current line is blank. On a non-blank line, a non-standard @samp{!} comment is inserted if you previously specified you wanted to use them. Otherwise a full-line comment is inserted on a new line before the current line. Non-standard @samp{!} comments are aligned like comments in other languages, but full-line comments are aligned differently. In a standard full-line comment, the comment delimiter itself must always appear in column zero. What can be aligned is the text within the comment. You can choose from three styles of alignment by setting the variable @code{fortran-comment-indent-style} to one of these values: @vindex fortran-comment-indent-style @vindex fortran-comment-line-column @table @code @item fixed The text is aligned at a fixed column, which is the value of @code{fortran-comment-line-column}. This is the default. @item relative The text is aligned as if it were a line of code, but with an additional @code{fortran-comment-line-column} columns of indentation. @item nil Text in full-line columns is not moved automatically. @end table @vindex fortran-comment-indent-char You can also specify the character to be used to indent within full-line comments by setting the variable @code{fortran-comment-indent-char} to the character you want to use. @vindex comment-line-start @vindex comment-line-start-skip Fortran mode introduces two variables @code{comment-line-start} and @code{comment-line-start-skip}, which do for full-line comments what @code{comment-start} and @code{comment-start-skip} do for ordinary text-following comments. Normally these are set properly by Fortran mode, so you do not need to change them. The normal Emacs comment command @kbd{C-x ;} has not been redefined. It can therefore be used if you use @samp{!} comments, but is useless in Fortran mode otherwise. @kindex C-c ; (Fortran mode) @findex fortran-comment-region @vindex fortran-comment-region The command @kbd{C-c ;} (@code{fortran-comment-region}) turns all the lines of the region into comments by inserting the string @samp{C$$$} at the front of each one. With a numeric arg, the region is turned back into live code by deleting @samp{C$$$} from the front of each line. You can control the string used for the comments by setting the variable @code{fortran-comment-region}. Note that here we have an example of a command and a variable with the same name; the two uses of the name never conflict because in Lisp and in Emacs it is always clear from the context which one is referred to. @node Fortran Columns, Fortran Abbrev, Fortran Comments, Fortran @subsection Columns @table @kbd @item C-c C-r Displays a ``column ruler'' momentarily above the current line (@code{fortran-column-ruler}). @item C-c C-w Splits the current window horizontally so that it is 72 columns wide. This may help you avoid going over that limit (@code{fortran-window-create}). @end table @kindex C-c C-r (Fortran mode) @findex fortran-column-ruler The command @kbd{C-c C-r} (@code{fortran-column-ruler}) shows a column ruler above the current line. The comment ruler consists of two lines of text that show you the locations of columns with special significance in Fortran programs. Square brackets show the limits of the columns for line numbers, and curly brackets show the limits of the columns for the statement body. Column numbers appear above them. Note that the column numbers count from zero, as always in XEmacs. As a result, the numbers may not be those you are familiar with; but the actual positions in the line are standard Fortran. The text used to display the column ruler is the value of the variable @code{fortran-comment-ruler}. By changing this variable, you can change the display. @kindex C-c C-w (Fortran mode) @findex fortran-window-create For even more help, use @kbd{C-c C-w} (@code{fortran-window-create}), a command which splits the current window horizontally, resulting in a window 72 columns wide. When you edit in this window, you can immediately see when a line gets too wide to be correct Fortran. @node Fortran Abbrev, , Fortran Columns, Fortran @subsection Fortran Keyword Abbrevs Fortran mode provides many built-in abbrevs for common keywords and declarations. These are the same sort of abbrevs that you can define yourself. To use them, you must turn on Abbrev mode. @pxref{Abbrevs}. The built-in abbrevs are unusual in one way: they all start with a semicolon. You cannot normally use semicolon in an abbrev, but Fortran mode makes this possible by changing the syntax of semicolon to ``word constituent''. For example, one built-in Fortran abbrev is @samp{;c} for @samp{continue}. If you insert @samp{;c} and then insert a punctuation character such as a space or a newline, the @samp{;c} changes automatically to @samp{continue}, provided Abbrev mode is enabled.@refill Type @samp{;?} or @samp{;C-h} to display a list of all built-in Fortran abbrevs and what they stand for. @node Asm Mode, , Fortran, Programs @section Asm Mode @cindex Asm mode Asm mode is a major mode for editing files of assembler code. It defines these commands: @table @kbd @item @key{TAB} @code{tab-to-tab-stop}. @item @key{LFD} Insert a newline and then indent using @code{tab-to-tab-stop}. @item : Insert a colon and then remove the indentation from before the label preceding colon. Then do @code{tab-to-tab-stop}. @item ; Insert or align a comment. @end table The variable @code{asm-comment-char} specifies which character starts comments in assembler syntax. texi2html-1.82/test/xemacs_manual/misc.texi0000644000175000017500000007757411264347115022702 0ustar flichtenheldflichtenheld @iftex @chapter Miscellaneous Commands This chapter contains several brief topics that do not fit anywhere else. @end iftex @node Sorting, Shell, Calendar/Diary, Top @section Sorting Text @cindex sorting XEmacs provides several commands for sorting text in a buffer. All operate on the contents of the region (the text between point and the mark). They divide the text of the region into many @dfn{sort records}, identify a @dfn{sort key} for each record, and then reorder the records using the order determined by the sort keys. The records are ordered so that their keys are in alphabetical order, or, for numerical sorting, in numerical order. In alphabetical sorting, all upper-case letters `A' through `Z' come before lower-case `a', in accordance with the ASCII character sequence. The sort commands differ in how they divide the text into sort records and in which part of each record they use as the sort key. Most of the commands make each line a separate sort record, but some commands use paragraphs or pages as sort records. Most of the sort commands use each entire sort record as its own sort key, but some use only a portion of the record as the sort key. @findex sort-lines @findex sort-paragraphs @findex sort-pages @findex sort-fields @findex sort-numeric-fields @table @kbd @item M-x sort-lines Divide the region into lines and sort by comparing the entire text of a line. A prefix argument means sort in descending order. @item M-x sort-paragraphs Divide the region into paragraphs and sort by comparing the entire text of a paragraph (except for leading blank lines). A prefix argument means sort in descending order. @item M-x sort-pages Divide the region into pages and sort by comparing the entire text of a page (except for leading blank lines). A prefix argument means sort in descending order. @item M-x sort-fields Divide the region into lines and sort by comparing the contents of one field in each line. Fields are defined as separated by whitespace, so the first run of consecutive non-whitespace characters in a line constitutes field 1, the second such run constitutes field 2, etc. You specify which field to sort by with a numeric argument: 1 to sort by field 1, etc. A negative argument means sort in descending order. Thus, minus 2 means sort by field 2 in reverse-alphabetical order. @item M-x sort-numeric-fields Like @kbd{M-x sort-fields}, except the specified field is converted to a number for each line and the numbers are compared. @samp{10} comes before @samp{2} when considered as text, but after it when considered as a number. @item M-x sort-columns Like @kbd{M-x sort-fields}, except that the text within each line used for comparison comes from a fixed range of columns. An explanation is given below. @end table For example, if the buffer contains: @smallexample On systems where clash detection (locking of files being edited) is implemented, XEmacs also checks the first time you modify a buffer whether the file has changed on disk since it was last visited or saved. If it has, you are asked to confirm that you want to change the buffer. @end smallexample @noindent then if you apply @kbd{M-x sort-lines} to the entire buffer you get: @smallexample On systems where clash detection (locking of files being edited) is implemented, XEmacs also checks the first time you modify a buffer saved. If it has, you are asked to confirm that you want to change the buffer. whether the file has changed on disk since it was last visited or @end smallexample @noindent where the upper case `O' comes before all lower case letters. If you apply instead @kbd{C-u 2 M-x sort-fields} you get: @smallexample saved. If it has, you are asked to confirm that you want to change implemented, XEmacs also checks the first time you modify a buffer the buffer. On systems where clash detection (locking of files being edited) is whether the file has changed on disk since it was last visited or @end smallexample @noindent where the sort keys were @samp{If}, @samp{XEmacs}, @samp{buffer}, @samp{systems}, and @samp{the}.@refill @findex sort-columns @kbd{M-x sort-columns} requires more explanation. You specify the columns by putting point at one of the columns and the mark at the other column. Because this means you cannot put point or the mark at the beginning of the first line to sort, this command uses an unusual definition of `region': all of the line point is in is considered part of the region, and so is all of the line the mark is in. For example, to sort a table by information found in columns 10 to 15, you could put the mark on column 10 in the first line of the table, and point on column 15 in the last line of the table, and then use this command. Or you could put the mark on column 15 in the first line and point on column 10 in the last line. This can be thought of as sorting the rectangle specified by point and the mark, except that the text on each line to the left or right of the rectangle moves along with the text inside the rectangle. @xref{Rectangles}. @node Shell, Narrowing, Sorting, Top @section Running Shell Commands from XEmacs @cindex subshell @cindex shell commands XEmacs has commands for passing single command lines to inferior shell processes; it can also run a shell interactively with input and output to an XEmacs buffer @samp{*shell*}. @table @kbd @item M-! Run a specified shell command line and display the output (@code{shell-command}). @item M-| Run a specified shell command line with region contents as input; optionally replace the region with the output (@code{shell-command-on-region}). @item M-x shell Run a subshell with input and output through an XEmacs buffer. You can then give commands interactively. @item M-x term Run a subshell with input and output through an XEmacs buffer. You can then give commands interactively. Full terminal emulation is available. @end table @menu * Single Shell:: How to run one shell command and return. * Interactive Shell:: Permanent shell taking input via XEmacs. * Shell Mode:: Special XEmacs commands used with permanent shell. * Terminal emulator:: An XEmacs window as a terminal emulator. * Term Mode:: Special XEmacs commands used in Term mode. * Paging in Term:: Paging in the terminal emulator. @end menu @node Single Shell, Interactive Shell, Shell, Shell @subsection Single Shell Commands @kindex M-! @findex shell-command @kbd{M-!} (@code{shell-command}) reads a line of text using the minibuffer and creates an inferior shell to execute the line as a command. Standard input from the command comes from the null device. If the shell command produces any output, the output goes to an XEmacs buffer named @samp{*Shell Command Output*}, which is displayed in another window but not selected. A numeric argument, as in @kbd{M-1 M-!}, directs this command to insert any output into the current buffer. In that case, point is left before the output and the mark is set after the output. @kindex M-| @findex shell-command-on-region @kbd{M-|} (@code{shell-command-on-region}) is like @kbd{M-!} but passes the contents of the region as input to the shell command, instead of no input. If a numeric argument is used to direct output to the current buffer, then the old region is deleted first and the output replaces it as the contents of the region.@refill @vindex shell-file-name @cindex environment Both @kbd{M-!} and @kbd{M-|} use @code{shell-file-name} to specify the shell to use. This variable is initialized based on your @code{SHELL} environment variable when you start XEmacs. If the file name does not specify a directory, the directories in the list @code{exec-path} are searched; this list is initialized based on the @code{PATH} environment variable when you start XEmacs. You can override either or both of these default initializations in your init file. @xref{Init File}.@refill When you use @kbd{M-!} and @kbd{M-|}, XEmacs has to wait until the shell command completes. You can quit with @kbd{C-g}; that terminates the shell command. @node Interactive Shell, Shell Mode, Single Shell, Shell @subsection Interactive Inferior Shell @findex shell To run a subshell interactively with its typescript in an XEmacs buffer, use @kbd{M-x shell}. This creates (or reuses) a buffer named @samp{*shell*} and runs a subshell with input coming from and output going to that buffer. That is to say, any ``terminal output'' from the subshell will go into the buffer, advancing point, and any ``terminal input'' for the subshell comes from text in the buffer. To give input to the subshell, go to the end of the buffer and type the input, terminated by @key{RET}. XEmacs does not wait for the subshell to do anything. You can switch windows or buffers and edit them while the shell is waiting, or while it is running a command. Output from the subshell waits until XEmacs has time to process it; this happens whenever XEmacs is waiting for keyboard input or for time to elapse. To get multiple subshells, change the name of buffer @samp{*shell*} to something different by using @kbd{M-x rename-buffer}. The next use of @kbd{M-x shell} creates a new buffer @samp{*shell*} with its own subshell. By renaming this buffer as well you can create a third one, and so on. All the subshells run independently and in parallel. @vindex explicit-shell-file-name The file name used to load the subshell is the value of the variable @code{explicit-shell-file-name}, if that is non-@code{nil}. Otherwise, the environment variable @code{ESHELL} is used, or the environment variable @code{SHELL} if there is no @code{ESHELL}. If the file name specified is relative, the directories in the list @code{exec-path} are searched (@pxref{Single Shell,Single Shell Commands}).@refill As soon as the subshell is started, it is sent as input the contents of the file @file{~/.emacs_@var{shellname}}, if that file exists, where @var{shellname} is the name of the file that the shell was loaded from. For example, if you use @code{csh}, the file sent to it is @file{~/.emacs_csh}.@refill @vindex shell-pushd-regexp @vindex shell-popd-regexp @vindex shell-cd-regexp @code{cd}, @code{pushd}, and @code{popd} commands given to the inferior shell are watched by XEmacs so it can keep the @samp{*shell*} buffer's default directory the same as the shell's working directory. These commands are recognized syntactically by examining lines of input that are sent. If you use aliases for these commands, you can tell XEmacs to recognize them also. For example, if the value of the variable @code{shell-pushd-regexp} matches the beginning of a shell command line, that line is regarded as a @code{pushd} command. Change this variable when you add aliases for @samp{pushd}. Likewise, @code{shell-popd-regexp} and @code{shell-cd-regexp} are used to recognize commands with the meaning of @samp{popd} and @samp{cd}.@refill @kbd{M-x shell-resync-dirs} queries the shell and resynchronizes XEmacs' idea of what the current directory stack is. @kbd{M-x shell-dirtrack-toggle} turns directory tracking on and off. @vindex input-ring-size XEmacs keeps a history of the most recent commands you have typed in the @samp{*shell*} buffer. If you are at the beginning of a shell command line and type @key{M-p}, the previous shell input is inserted into the buffer before point. Immediately typing @key{M-p} again deletes that input and inserts the one before it. By repeating @key{M-p} you can move backward through your commands until you find one you want to repeat. You may then edit the command before typing @key{RET} if you wish. @key{M-n} moves forward through the command history, in case you moved backward past the one you wanted while using @key{M-p}. If you type the first few characters of a previous command and then type @key{M-p}, the most recent shell input starting with those characters is inserted. This can be very convenient when you are repeating a sequence of shell commands. The variable @code{input-ring-size} controls how many commands are saved in your input history. The default is 30. @node Shell Mode, Terminal emulator, Interactive Shell, Shell @subsection Shell Mode @cindex Shell mode The shell buffer uses Shell mode, which defines several special keys attached to the @kbd{C-c} prefix. They are chosen to resemble the usual editing and job control characters present in shells that are not under XEmacs, except that you must type @kbd{C-c} first. Here is a list of the special key bindings of Shell mode: @kindex RET (Shell mode) @kindex C-c C-d (Shell mode) @kindex C-d (Shell mode) @kindex C-c C-u (Shell mode) @kindex C-c C-w (Shell mode) @kindex C-c C-c (Shell mode) @kindex C-c C-z (Shell mode) @kindex C-c C-\ (Shell mode) @kindex C-c C-o (Shell mode) @kindex C-c C-r (Shell mode) @kindex C-c C-y (Shell mode) @kindex M-p (Shell mode) @kindex M-n (Shell mode) @kindex TAB (Shell mode) @findex send-shell-input @findex shell-send-eof @findex comint-delchar-or-maybe-eof @findex interrupt-shell-subjob @findex stop-shell-subjob @findex quit-shell-subjob @findex kill-output-from-shell @findex show-output-from-shell @findex copy-last-shell-input @findex comint-previous-input @findex comint-next-input @findex comint-dynamic-complete @vindex shell-prompt-pattern @table @kbd @item @key{RET} At end of buffer send line as input; otherwise, copy current line to end of buffer and send it (@code{send-shell-input}). When a line is copied, any text at the beginning of the line that matches the variable @code{shell-prompt-pattern} is left out; this variable's value should be a regexp string that matches the prompts that you use in your subshell. @item C-c C-d Send end-of-file as input, probably causing the shell or its current subjob to finish (@code{shell-send-eof}). @item C-d If point is not at the end of the buffer, delete the next character just like most other modes. If point is at the end of the buffer, send end-of-file as input, instead of generating an error as in other modes (@code{comint-delchar-or-maybe-eof}). @item C-c C-u Kill all text that has yet to be sent as input (@code{kill-shell-input}). @item C-c C-w Kill a word before point (@code{backward-kill-word}). @item C-c C-c Interrupt the shell or its current subjob if any (@code{interrupt-shell-subjob}). @item C-c C-z Stop the shell or its current subjob if any (@code{stop-shell-subjob}). @item C-c C-\ Send quit signal to the shell or its current subjob if any (@code{quit-shell-subjob}). @item C-c C-o Delete last batch of output from shell (@code{kill-output-from-shell}). @item C-c C-r Scroll top of last batch of output to top of window (@code{show-output-from-shell}). @item C-c C-y Copy the previous bunch of shell input and insert it into the buffer before point (@code{copy-last-shell-input}). No final newline is inserted, and the input copied is not resubmitted until you type @key{RET}. @item M-p Move backward through the input history. Search for a matching command if you have typed the beginning of a command (@code{comint-previous-input}). @item M-n Move forward through the input history. Useful when you are using @key{M-p} quickly and go past the desired command (@code{comint-next-input}). @item @key{TAB} Complete the file name preceding point (@code{comint-dynamic-complete}). @end table @node Terminal emulator, Term Mode, Shell Mode, Shell @subsection Interactive Inferior Shell with Terminal Emulator @findex term To run a subshell in a terminal emulator, putting its typescript in an XEmacs buffer, use @kbd{M-x term}. This creates (or reuses) a buffer named @samp{*term*} and runs a subshell with input coming from your keyboard and output going to that buffer. All the normal keys that you type are sent without any interpretation by XEmacs directly to the subshell, as ``terminal input.'' Any ``echo'' of your input is the responsibility of the subshell. (The exception is the terminal escape character, which by default is @kbd{C-c}. @pxref{Term Mode}.) Any ``terminal output'' from the subshell goes into the buffer, advancing point. Some programs (such as XEmacs itself) need to control the appearance on the terminal screen in detail. They do this by sending special control codes. The exact control codes needed vary from terminal to terminal, but nowadays most terminals and terminal emulators (including xterm) understand the so-called "ANSI escape sequences" (first popularized by the Digital's VT100 family of terminal). The term mode also understands these escape sequences, and for each control code does the appropriate thing to change the buffer so that the appearance of the window will match what it would be on a real terminal. Thus you can actually run XEmacs inside an XEmacs Term window! XEmacs does not wait for the subshell to do anything. You can switch windows or buffers and edit them while the shell is waiting, or while it is running a command. Output from the subshell waits until XEmacs has time to process it; this happens whenever XEmacs is waiting for keyboard input or for time to elapse. To make multiple terminal emulators, rename the buffer @samp{*term*} to something different using @kbd{M-x rename-uniquely}, just as with Shell mode. The file name used to load the subshell is determined the same way as for Shell mode. Unlike Shell mode, Term mode does not track the current directory by examining your input. Instead, if you use a programmable shell, you can have it tell Term what the current directory is. This is done automatically by bash for version 1.15 and later. @node Term Mode, Paging in Term, Terminal emulator, Shell @subsection Term Mode @cindex Term mode @cindex mode, Term Term uses Term mode, which has two input modes: In line mode, Term basically acts like Shell mode. @xref{Shell Mode}. In Char mode, each character is sent directly to the inferior subshell, except for the Term escape character, normally @kbd{C-c}. To switch between line and char mode, use these commands: @table @kbd @kindex C-c C-j @r{(Term mode)} findex term-char-mode @item C-c C-j Switch to line mode. Do nothing if already in line mode. @kindex C-c C-k @r{(Term mode)} @findex term-line-mode @item C-c C-k Switch to char mode. Do nothing if already in char mode. @end table The following commands are only available in Char mode: @table @kbd @item C-c C-c Send a literal @key{C-c} to the sub-shell. @item C-c C-x A prefix command to conveniently access the global @key{C-x} commands. For example, @kbd{C-c C-x o} invokes the global binding of @kbd{C-x o}, which is normally @samp{other-window}. @end table @node Paging in Term,, Term Mode, Shell @subsection Paging in the terminal emulator Term mode has a pager feature. When the pager is enabled, term mode will pause at the end of each screenful. @table @kbd @kindex C-c C-q @r{(Term mode)} @findex term-pager-toggle @item C-c C-q Toggles the pager feature: Disables the pager if it is enabled, and vice versa. This works in both line and char modes. If the pager enabled, the mode-line contains the word @samp{page}. @end table If the pager is enabled, and Term receives more than a screenful of output since your last input, Term will enter More break mode. This is indicated by @samp{**MORE**} in the mode-line. Type a @kbd{Space} to display the next screenful of output. Type @kbd{?} to see your other options. The interface is similar to the Unix @samp{more} program. @node Narrowing, Hardcopy, Shell, Top @section Narrowing @cindex widening @cindex restriction @cindex narrowing @dfn{Narrowing} means focusing in on some portion of the buffer, making the rest temporarily invisible and inaccessible. Cancelling the narrowing and making the entire buffer once again visible is called @dfn{widening}. The amount of narrowing in effect in a buffer at any time is called the buffer's @dfn{restriction}. @c WideCommands @table @kbd @item C-x n n Narrow down to between point and mark (@code{narrow-to-region}). @item C-x n w Widen to make the entire buffer visible again (@code{widen}). @end table Narrowing sometimes makes it easier to concentrate on a single subroutine or paragraph by eliminating clutter. It can also be used to restrict the range of operation of a replace command or repeating keyboard macro. The word @samp{Narrow} appears in the mode line whenever narrowing is in effect. When you have narrowed to a part of the buffer, that part appears to be all there is. You can't see the rest, can't move into it (motion commands won't go outside the visible part), and can't change it in any way. However, the invisible text is not gone; if you save the file, it will be saved. @kindex C-x n n @findex narrow-to-region The primary narrowing command is @kbd{C-x n n} (@code{narrow-to-region}). It sets the current buffer's restrictions so that the text in the current region remains visible but all text before the region or after the region is invisible. Point and mark do not change. Because narrowing can easily confuse users who do not understand it, @code{narrow-to-region} is normally a disabled command. Attempting to use this command asks for confirmation and gives you the option of enabling it; once you enable the command, confirmation will no longer be required. @xref{Disabling}. @kindex C-x n w @findex widen To undo narrowing, use @kbd{C-x n w} (@code{widen}). This makes all text in the buffer accessible again. Use the @kbd{C-x =} command to get information on what part of the buffer you narrowed down. @xref{Position Info}. @node Hardcopy, Recursive Edit, Narrowing, Top @section Hardcopy Output @cindex hardcopy The XEmacs commands for making hardcopy derive their names from the Unix commands @samp{print} and @samp{lpr}. @table @kbd @item M-x print-buffer Print hardcopy of current buffer using Unix command @samp{print} @*(@samp{lpr -p}). This command adds page headings containing the file name and page number. @item M-x lpr-buffer Print hardcopy of current buffer using Unix command @samp{lpr}. This command does not add page headings. @item M-x print-region Like @code{print-buffer}, but prints only the current region. @item M-x lpr-region Like @code{lpr-buffer}, but prints only the current region. @end table @findex print-buffer @findex print-region @findex lpr-buffer @findex lpr-region @vindex lpr-switches All the hardcopy commands pass extra switches to the @code{lpr} program based on the value of the variable @code{lpr-switches}. Its value should be a list of strings, each string a switch starting with @samp{-}. For example, the value could be @code{("-Pfoo")} to print on printer @samp{foo}. @node Recursive Edit, Dissociated Press, Hardcopy, Top @section Recursive Editing Levels @cindex recursive editing level @cindex editing level, recursive A @dfn{recursive edit} is a situation in which you are using XEmacs commands to perform arbitrary editing while in the middle of another XEmacs command. For example, when you type @kbd{C-r} inside a @code{query-replace}, you enter a recursive edit in which you can change the current buffer. When you exit from the recursive edit, you go back to the @code{query-replace}. @kindex C-M-c @findex exit-recursive-edit @cindex exiting @dfn{Exiting} a recursive edit means returning to the unfinished command, which continues execution. For example, exiting the recursive edit requested by @kbd{C-r} in @code{query-replace} causes query replacing to resume. Exiting is done with @kbd{C-M-c} (@code{exit-recursive-edit}). @kindex C-] @findex abort-recursive-edit You can also @dfn{abort} a recursive edit. This is like exiting, but also quits the unfinished command immediately. Use the command @kbd{C-]} (@code{abort-recursive-edit}) for this. @xref{Quitting}. The mode line shows you when you are in a recursive edit by displaying square brackets around the parentheses that always surround the major and minor mode names. Every window's mode line shows the square brackets, since XEmacs as a whole, rather than any particular buffer, is in a recursive edit. @findex top-level It is possible to be in recursive edits within recursive edits. For example, after typing @kbd{C-r} in a @code{query-replace}, you might type a command that entered the debugger. In such a case, two or more sets of square brackets appear in the mode line(s). Exiting the inner recursive edit (here with the debugger @kbd{c} command) resumes the query-replace command where it called the debugger. After the end of the query-replace command, you would be able to exit the first recursive edit. Aborting exits only one level of recursive edit; it returns to the command level of the previous recursive edit. You can then abort that one as well. The command @kbd{M-x top-level} aborts all levels of recursive edits, returning immediately to the top level command reader. The text you edit inside the recursive edit need not be the same text that you were editing at top level. If the command that invokes the recursive edit selects a different buffer first, that is the buffer you will edit recursively. You can switch buffers within the recursive edit in the normal manner (as long as the buffer-switching keys have not been rebound). While you could theoretically do the rest of your editing inside the recursive edit, including visiting files, this could have surprising effects (such as stack overflow) from time to time. It is best if you always exit or abort a recursive edit when you no longer need it. In general, XEmacs tries to avoid using recursive edits. It is usually preferable to allow users to switch among the possible editing modes in any order they like. With recursive edits, the only way to get to another state is to go ``back'' to the state that the recursive edit was invoked from. @node Dissociated Press, CONX, Recursive Edit, Top @section Dissociated Press @findex dissociated-press @kbd{M-x dissociated-press} is a command for scrambling a file of text either word by word or character by character. Starting from a buffer of straight English, it produces extremely amusing output. The input comes from the current XEmacs buffer. Dissociated Press writes its output in a buffer named @samp{*Dissociation*}, and redisplays that buffer after every couple of lines (approximately) to facilitate reading it. @code{dissociated-press} asks every so often whether to continue operating. Answer @kbd{n} to stop it. You can also stop at any time by typing @kbd{C-g}. The dissociation output remains in the @samp{*Dissociation*} buffer for you to copy elsewhere if you wish. @cindex presidentagon Dissociated Press operates by jumping at random from one point in the buffer to another. In order to produce plausible output rather than gibberish, it insists on a certain amount of overlap between the end of one run of consecutive words or characters and the start of the next. That is, if it has just printed out `president' and then decides to jump to a different point in the file, it might spot the `ent' in `pentagon' and continue from there, producing `presidentagon'. Long sample texts produce the best results. @cindex againformation A positive argument to @kbd{M-x dissociated-press} tells it to operate character by character, and specifies the number of overlap characters. A negative argument tells it to operate word by word and specifies the number of overlap words. In this mode, whole words are treated as the elements to be permuted, rather than characters. No argument is equivalent to an argument of two. For your againformation, the output goes only into the buffer @samp{*Dissociation*}. The buffer you start with is not changed. @cindex Markov chain @cindex ignoriginal @cindex techniquitous Dissociated Press produces nearly the same results as a Markov chain based on a frequency table constructed from the sample text. It is, however, an independent, ignoriginal invention. Dissociated Press techniquitously copies several consecutive characters from the sample between random choices, whereas a Markov chain would choose randomly for each word or character. This makes for more plausible sounding results and runs faster. @cindex outragedy @cindex buggestion @cindex properbose It is a mustatement that too much use of Dissociated Press can be a developediment to your real work. Sometimes to the point of outragedy. And keep dissociwords out of your documentation, if you want it to be well userenced and properbose. Have fun. Your buggestions are welcome. @node CONX, Amusements, Dissociated Press, Top @section CONX @cindex random sentences Besides producing a file of scrambled text with Dissociated Press, you can generate random sentences by using CONX. @table @kbd @item M-x conx Generate random sentences in the @code{*conx*} buffer. @item M-x conx-buffer Absorb the text in the current buffer into the @code{conx} database. @item M-x conx-init Forget the current word-frequency tree. @item M-x conx-load Load a @code{conx} database that has been previously saved with @code{M-x conx-save}. @item M-x conx-region Absorb the text in the current buffer into the @code{conx} database. @item M-x conx-save Save the current @code{conx} database to a file for future retrieval. @end table @findex conx @findex conx-buffer @findex conx-load @findex conx-region @findex conx-init @findex conx-save Copy text from a buffer using @kbd{M-x conx-buffer} or @kbd{M-x conx-region} and then type @kbd{M-x conx}. Output is continuously generated until you type @key{^G}. You can save the @code{conx} database to a file with @kbd{M-x conx-save}, which you can retrieve with @code{M-x conx-load}. To clear the database, use @code{M-x conx-init}. @node Amusements, Emulation, CONX, Top @section Other Amusements @cindex boredom @findex hanoi @findex yow If you are a little bit bored, you can try @kbd{M-x hanoi}. If you are considerably bored, give it a numeric argument. If you are very, very bored, try an argument of 9. Sit back and watch. When you are frustrated, try the famous Eliza program. Just do @kbd{M-x doctor}. End each input by typing @kbd{RET} twice. When you are feeling strange, type @kbd{M-x yow}. @node Emulation, Customization, Amusements, Top @comment node-name, next, previous, up @section Emulation @cindex other editors @cindex vi @cindex EDT XEmacs can be programmed to emulate (more or less) most other editors. Standard facilities can emulate these: @table @asis @item Viper (a vi emulator) @cindex Viper In XEmacs, Viper is the preferred emulation of vi within XEmacs. Viper is designed to allow you to take advantage of the best features of XEmacs while still doing your basic editing in a familiar, vi-like fashion. Viper provides various different levels of vi emulation, from a quite complete emulation that allows almost no access to native XEmacs commands, to an ``expert'' mode that combines the most useful vi commands with the most useful XEmacs commands. To start Viper, put the command @example (viper-mode) @end example in your init file. @xref{Init File}. Viper comes with a separate manual that is provided standard with the XEmacs distribution. @ignore @item evi (alternative vi emulator) @cindex evi evi is an alternative vi emulator that also provides a nearly complete emulation of vi. evi comes with a separate manual that is provided standard with the XEmacs distribution. Warning: loading more than one vi emulator at once may cause name conflicts; no one has checked. @end ignore @item EDT (DEC VMS editor) @findex edt-emulation-on @findex edt-emulation-off Turn on EDT emulation with @kbd{M-x edt-emulation-on}. @kbd{M-x @*edt-emulation-off} restores normal Emacs command bindings. Most of the EDT emulation commands are keypad keys, and most standard Emacs key bindings are still available. The EDT emulation rebindings are done in the global keymap, so there is no problem switching buffers or major modes while in EDT emulation. @item Gosling Emacs @findex set-gosmacs-bindings @findex set-gnu-bindings Turn on emulation of Gosling Emacs (aka Unipress Emacs) with @kbd{M-x set-gosmacs-bindings}. This redefines many keys, mostly on the @kbd{C-x} and @kbd{ESC} prefixes, to work as they do in Gosmacs. @kbd{M-x set-gnu-bindings} returns to normal XEmacs by rebinding the same keys to the definitions they had at the time @kbd{M-x set-gosmacs-bindings} was done. It is also possible to run Mocklisp code written for Gosling Emacs. @xref{Mocklisp}. @end table texi2html-1.82/test/xemacs_manual/basic.texi0000644000175000017500000006314511264347115023015 0ustar flichtenheldflichtenheld@c This is part of the XEmacs manual. @c Copyright (C) 1985, 86, 87, 93, 94, 95, 1997 Free Software Foundation, Inc. @c See file xemacs.texi for copying conditions. @node Basic, Undo, Packages, Top @chapter Basic Editing Commands @kindex C-h t @findex help-with-tutorial We now give the basics of how to enter text, make corrections, and save the text in a file. If this material is new to you, you might learn it more easily by running the Emacs learn-by-doing tutorial. To use the tutorial, run Emacs and type @kbd{Control-h t} (@code{help-with-tutorial}). You can also use @b{Tutorials} item from the @b{Help} menu. XEmacs comes with many translations of tutorial. If your XEmacs is with MULE and you set up language environment correctly, XEmacs chooses right tutorial when available (@pxref{Language Environments}). If you want specific translation, give @kbd{C-h t} a prefix argument, like @kbd{C-u C-h t}. To clear the screen and redisplay, type @kbd{C-l} (@code{recenter}). @menu * Inserting Text:: Inserting text by simply typing it. * Moving Point:: How to move the cursor to the place where you want to change something. * Erasing:: Deleting and killing text. * Files: Basic Files. Visiting, creating, and saving files. * Help: Basic Help. Asking what a character does. * Blank Lines:: Commands to make or delete blank lines. * Continuation Lines:: Lines too wide for the screen. * Position Info:: What page, line, row, or column is point on? * Arguments:: Numeric arguments for repeating a command. @c * Repeating:: A short-cut for repeating the previous command. @end menu @node Inserting Text, Moving Point, , Basic @section Inserting Text @cindex insertion @cindex point @cindex cursor @cindex graphic characters To insert printing characters into the text you are editing, just type them. This inserts the characters you type into the buffer at the cursor (that is, at @dfn{point}; @pxref{Point}). The cursor moves forward, and any text after the cursor moves forward too. If the text in the buffer is @samp{FOOBAR}, with the cursor before the @samp{B}, then if you type @kbd{XX}, you get @samp{FOOXXBAR}, with the cursor still before the @samp{B}. @kindex BS @cindex deletion To @dfn{delete} text you have just inserted, use @key{BS}. @key{BS} deletes the character @emph{before} the cursor (not the one that the cursor is on top of or under; that is the character @var{after} the cursor). The cursor and all characters after it move backwards. Therefore, if you type a printing character and then type @key{BS}, they cancel out. @kindex RET @cindex newline To end a line and start typing a new one, type @key{RET}. This inserts a newline character in the buffer. If point is in the middle of a line, @key{RET} splits the line. Typing @key{DEL} when the cursor is at the beginning of a line deletes the preceding newline, thus joining the line with the preceding line. Emacs can split lines automatically when they become too long, if you turn on a special minor mode called @dfn{Auto Fill} mode. @xref{Filling}, for how to use Auto Fill mode. If you prefer to have text characters replace (overwrite) existing text rather than shove it to the right, you can enable Overwrite mode, a minor mode. @xref{Minor Modes}. @cindex quoting @kindex C-q @findex quoted-insert Direct insertion works for printing characters and @key{SPC}, but other characters act as editing commands and do not insert themselves. If you need to insert a control character or a character whose code is above 200 octal, you must @dfn{quote} it by typing the character @kbd{Control-q} (@code{quoted-insert}) first. (This character's name is normally written @kbd{C-q} for short.) There are two ways to use @kbd{C-q}: @itemize @bullet @item @kbd{C-q} followed by any non-graphic character (even @kbd{C-g}) inserts that character. @item @kbd{C-q} followed by a sequence of octal digits inserts the character with the specified octal character code. You can use any number of octal digits; any non-digit terminates the sequence. If the terminating character is @key{RET}, it serves only to terminate the sequence; any other non-digit is itself used as input after terminating the sequence. (The use of octal sequences is disabled in ordinary non-binary Overwrite mode, to give you a convenient way to insert a digit instead of overwriting with it.) @end itemize @noindent A numeric argument to @kbd{C-q} specifies how many copies of the quoted character should be inserted (@pxref{Arguments}). @findex backward-or-forward-delete-char @findex newline @findex self-insert Customization information: @key{DEL}, in most modes, runs the command @code{backward-or-forward-delete-char}; @key{RET} runs the command @code{newline}, and self-inserting printing characters run the command @code{self-insert}, which inserts whatever character was typed to invoke it. Some major modes rebind @key{DEL} to other commands. @node Moving Point, Erasing, Inserting Text, Basic @section Changing the Location of Point @cindex arrow keys @kindex LEFT @kindex RIGHT @kindex UP @kindex DOWN @cindex moving point @cindex movement @cindex cursor motion @cindex moving the cursor To do more than insert characters, you have to know how to move point (@pxref{Point}). The simplest way to do this is with arrow keys, or by clicking the left mouse button where you want to move to. NOTE: Many of the following commands have two versions, one that uses the function keys (e.g. @key{LEFT} or @key{END}) and one that doesn't. The former versions may only be available on X terminals (i.e. not on TTY's), but the latter are available on all terminals. @kindex C-a @kindex C-e @kindex C-f @kindex C-b @kindex C-n @kindex C-p @kindex C-l @kindex C-t @kindex C-v @kindex M-v @kindex M-> @kindex M-< @kindex M-r @kindex LEFT @kindex RIGHT @kindex UP @kindex DOWN @kindex HOME @kindex END @kindex PGUP @kindex PGDN @kindex C-LEFT @kindex C-RIGHT @kindex C-HOME @kindex C-END @findex beginning-of-line @findex end-of-line @findex forward-char @findex backward-char @findex next-line @findex previous-line @findex recenter @findex transpose-chars @findex beginning-of-buffer @findex end-of-buffer @findex goto-char @findex goto-line @findex move-to-window-line @table @kbd @item C-a @itemx HOME Move to the beginning of the line (@code{beginning-of-line}). @item C-e @itemx END Move to the end of the line (@code{end-of-line}). @item C-f @itemx RIGHT Move forward one character (@code{forward-char}). @item C-b @itemx LEFT Move backward one character (@code{backward-char}). @item M-f @itemx C-RIGHT Move forward one word (@code{forward-word}). @item M-b @itemx C-LEFT Move backward one word (@code{backward-word}). @item C-n @itemx DOWN Move down one line, vertically (@code{next-line}). This command attempts to keep the horizontal position unchanged, so if you start in the middle of one line, you end in the middle of the next. When on the last line of text, @kbd{C-n} creates a new line and moves onto it. @item C-p @itemx UP Move up one line, vertically (@code{previous-line}). @item C-v @itemx PGDN Move down one page, vertically (@code{scroll-up}). @item M-v @itemx PGUP Move up one page, vertically (@code{scroll-down}). @item C-l Clear the frame and reprint everything (@code{recenter}). Text moves on the frame to bring point to the center of the window. @item M-r Move point to left margin, vertically centered in the window (@code{move-to-window-line}). Text does not move on the screen. A numeric argument says which screen line to place point on. It counts screen lines down from the top of the window (zero for the top line). A negative argument counts lines from the bottom (@minus{}1 for the bottom line). @item C-t Transpose two characters, the ones before and after the cursor (@code{transpose-chars}). @item M-< @itemx C-HOME Move to the top of the buffer (@code{beginning-of-buffer}). With numeric argument @var{n}, move to @var{n}/10 of the way from the top. @xref{Arguments}, for more information on numeric arguments.@refill @item M-> @itemx C-END Move to the end of the buffer (@code{end-of-buffer}). @item M-x goto-char Read a number @var{n} and move point to buffer position @var{n}. Position 1 is the beginning of the buffer. @item M-g Read a number @var{n} and move point to line number @var{n} (@code{goto-line}). Line 1 is the beginning of the buffer. @c @item C-x C-n @item M-x set-goal-column @findex set-goal-column Use the current column of point as the @dfn{semi-permanent goal column} for @kbd{C-n} and @kbd{C-p} (@code{set-goal-column}). Henceforth, those commands always move to this column in each line moved into, or as close as possible given the contents of the line. This goal column remains in effect until canceled. @c @item C-u C-x C-n @item C-u M-x set-goal-column Cancel the goal column. Henceforth, @kbd{C-n} and @kbd{C-p} once again try to avoid changing the horizontal position, as usual. @end table @vindex track-eol If you set the variable @code{track-eol} to a non-@code{nil} value, then @kbd{C-n} and @kbd{C-p} when at the end of the starting line move to the end of another line. Normally, @code{track-eol} is @code{nil}. @xref{Variables}, for how to set variables such as @code{track-eol}. @vindex next-line-add-newlines Normally, @kbd{C-n} on the last line of a buffer appends a newline to it. If the variable @code{next-line-add-newlines} is @code{nil}, then @kbd{C-n} gets an error instead (like @kbd{C-p} on the first line). @node Erasing, Basic Files, Moving Point, Basic @section Erasing Text @table @kbd @item @key{DEL} Delete the character before or after point (@code{backward-or-forward-delete-char}). You can customize this behavior by setting the variable @code{delete-key-deletes-forward}. @item C-d Delete the character after point (@code{delete-char}). @item C-k Kill to the end of the line (@code{kill-line}). @item M-d Kill forward to the end of the next word (@code{kill-word}). @item M-@key{DEL} Kill back to the beginning of the previous word (@code{backward-kill-word}). @end table @cindex killing characters and lines @cindex deleting characters and lines @cindex erasing characters and lines You already know about the @key{DEL} key which deletes the character before point (that is, before the cursor). Another key, @kbd{Control-d} (@kbd{C-d} for short), deletes the character after point (that is, the character that the cursor is on). This shifts the rest of the text on the line to the left. If you type @kbd{C-d} at the end of a line, it joins together that line and the next line. To erase a larger amount of text, use the @kbd{C-k} key, which kills a line at a time. If you type @kbd{C-k} at the beginning or middle of a line, it kills all the text up to the end of the line. If you type @kbd{C-k} at the end of a line, it joins that line and the next line. @xref{Killing}, for more flexible ways of killing text. @node Basic Files, Basic Help, Erasing, Basic @section Files @cindex files The commands described above are sufficient for creating and altering text in an Emacs buffer; the more advanced Emacs commands just make things easier. But to keep any text permanently you must put it in a @dfn{file}. Files are named units of text which are stored by the operating system for you to retrieve later by name. To look at or use the contents of a file in any way, including editing the file with Emacs, you must specify the file name. Consider a file named @file{/usr/rms/foo.c}. To begin editing this file from Emacs, type: @example C-x C-f /usr/rms/foo.c @key{RET} @end example @noindent Here the file name is given as an @dfn{argument} to the command @kbd{C-x C-f} (@code{find-file}). That command uses the @dfn{minibuffer} to read the argument, and you type @key{RET} to terminate the argument (@pxref{Minibuffer}). You can also use the @b{Open...} menu item from the @b{File} menu, then type the name of the file to the prompt. Emacs obeys the command by @dfn{visiting} the file: creating a buffer, copying the contents of the file into the buffer, and then displaying the buffer for you to edit. If you alter the text, you can @dfn{save} the new text in the file by typing @kbd{C-x C-s} (@code{save-buffer}) or choosing @b{Save Buffer} from the @b{File} menu. This makes the changes permanent by copying the altered buffer contents back into the file @file{/usr/rms/foo.c}. Until you save, the changes exist only inside Emacs, and the file @file{foo.c} is unaltered. To create a file, visit the file with @kbd{C-x C-f} as if it already existed or choose @b{Open...} from the @b{File} menu and provide the name for the new file. Emacs will create an empty buffer in which you can insert the text you want to put in the file. When you save the buffer with @kbd{C-x C-s}, or by choosing @b{Save Buffer} from the @b{File} menu, the file is created. To learn more about using files, @xref{Files}. @node Basic Help, Blank Lines, Basic Files, Basic @section Help @cindex getting help with keys If you forget what a key does, you can find out with the Help character, which is @kbd{C-h} (or @key{F1}, which is an alias for @kbd{C-h}). Type @kbd{C-h k} followed by the key you want to know about; for example, @kbd{C-h k C-n} tells you all about what @kbd{C-n} does. @kbd{C-h} is a prefix key; @kbd{C-h k} is just one of its subcommands (the command @code{describe-key}). The other subcommands of @kbd{C-h} provide different kinds of help. Type @kbd{C-h} twice to get a description of all the help facilities. @xref{Help}. @node Blank Lines, Continuation Lines, Basic Help, Basic @section Blank Lines @cindex inserting blank lines @cindex deleting blank lines Here are special commands and techniques for putting in and taking out blank lines. @c widecommands @table @kbd @item C-o Insert one or more blank lines after the cursor (@code{open-line}). @item C-x C-o Delete all but one of many consecutive blank lines (@code{delete-blank-lines}). @end table @kindex C-o @kindex C-x C-o @cindex blank lines @findex open-line @findex delete-blank-lines When you want to insert a new line of text before an existing line, you can do it by typing the new line of text, followed by @key{RET}. However, it may be easier to see what you are doing if you first make a blank line and then insert the desired text into it. This is easy to do using the key @kbd{C-o} (@code{open-line}), which inserts a newline after point but leaves point in front of the newline. After @kbd{C-o}, type the text for the new line. @kbd{C-o F O O} has the same effect as @w{@kbd{F O O @key{RET}}}, except for the final location of point. You can make several blank lines by typing @kbd{C-o} several times, or by giving it a numeric argument to tell it how many blank lines to make. @xref{Arguments}, for how. If you have a fill prefix, then @kbd{C-o} command inserts the fill prefix on the new line, when you use it at the beginning of a line. @xref{Fill Prefix}. The easy way to get rid of extra blank lines is with the command @kbd{C-x C-o} (@code{delete-blank-lines}). @kbd{C-x C-o} in a run of several blank lines deletes all but one of them. @kbd{C-x C-o} on a solitary blank line deletes that blank line. When point is on a nonblank line, @kbd{C-x C-o} deletes any blank lines following that nonblank line. @node Continuation Lines, Position Info, Blank Lines, Basic @section Continuation Lines @cindex continuation line @cindex wrapping @cindex line wrapping If you add too many characters to one line without breaking it with @key{RET}, the line will grow to occupy two (or more) lines on the screen, with a curved arrow at the extreme right margin of all but the last of them. The curved arrow says that the following screen line is not really a distinct line in the text, but just the @dfn{continuation} of a line too long to fit the screen. Continuation is also called @dfn{line wrapping}. Sometimes it is nice to have Emacs insert newlines automatically when a line gets too long. Continuation on the screen does not do that. Use Auto Fill mode (@pxref{Filling}) if that's what you want. @vindex truncate-lines @cindex truncation Instead of continuation, long lines can be displayed by @dfn{truncation}. This means that all the characters that do not fit in the width of the frame or window do not appear at all. They remain in the buffer, temporarily invisible. Right arrow in the last column (instead of the curved arrow) inform you that truncation is in effect. Truncation instead of continuation happens whenever horizontal scrolling is in use, and optionally in all side-by-side windows (@pxref{Windows}). You can enable truncation for a particular buffer by setting the variable @code{truncate-lines} to non-@code{nil} in that buffer. (@xref{Variables}.) Altering the value of @code{truncate-lines} makes it local to the current buffer; until that time, the default value is in effect. The default is initially @code{nil}. @xref{Locals}. @xref{Display Vars}, for additional variables that affect how text is displayed. @node Position Info, Arguments, Continuation Lines, Basic @section Cursor Position Information If you are accustomed to other display editors, you may be surprised that Emacs does not always display the page number or line number of point in the mode line. In Emacs, this information is only rarely needed, and a number of commands are available to compute and print it. Since text is stored in a way that makes it difficult to compute the information, it is not displayed all the time. @table @kbd @item M-x what-page Print page number of point, and line number within page. @item M-x what-line Print line number of point in the buffer. @item M-x line-number-mode Toggle automatic display of current line number. @item M-= Print number of lines and characters in the current region (@code{count-lines-region}). @xref{Mark}, for information about the region. @item C-x = Print character code of character after point, character position of point, and column of point (@code{what-cursor-position}). @end table @findex what-page @findex what-line @cindex line number @cindex page number @kindex M-= @findex count-lines-region There are several commands for printing line numbers: @itemize @bullet @item @kbd{M-x what-line} counts lines from the beginning of the file and prints the line number point is on. The first line of the file is line number 1. You can use these numbers as arguments to @kbd{M-x goto-line}. @item @kbd{M-x what-page} counts pages from the beginning of the file, and counts lines within the page, printing both of them. @xref{Pages}, for the command @kbd{C-x l}, which counts the lines in the current page. @item @kbd{M-=} (@code{count-lines-region}) prints the number of lines in the region (@pxref{Mark}). @xref{Pages}, for the command @kbd{C-x l} which counts the lines in the @end itemize @kindex C-x = @findex what-cursor-position The command @kbd{C-x =} (@code{what-cursor-position}) can be used to find out the column that the cursor is in, and other miscellaneous information about point. It prints a line in the echo area that looks like this: @example Char: c (0143, 99, 0x63) point=18862 of 24800(76%) column 53 @end example @noindent (In fact, this is the output produced when point is before @samp{column 53} in the example.) The four values after @samp{Char:} describe the character that follows point, first by showing it and then by giving its character code in octal, decimal and hex. @samp{point=} is followed by the position of point expressed as a character count. The front of the buffer counts as position 1, one character later as 2, and so on. The next, larger number is the total number of characters in the buffer. Afterward in parentheses comes the position expressed as a percentage of the total size. @samp{column} is followed by the horizontal position of point, in columns from the left edge of the window. If the buffer has been narrowed, making some of the text at the beginning and the end temporarily invisible, @kbd{C-x =} prints additional text describing the current visible range. For example, it might say: @smallexample Char: c (0143, 99, 0x63) point=19674 of 24575(80%) <19591 - 19703> column 69 @end smallexample @noindent where the two extra numbers give the smallest and largest character position that point is allowed to assume. The characters between those two positions are the visible ones. @xref{Narrowing}. If point is at the end of the buffer (or the end of the visible part), @kbd{C-x =} omits any description of the character after point. The output looks like @smallexample point=563026 of 563025(100%) column 0 @end smallexample @node Arguments,, Position Info, Basic @section Numeric Arguments @cindex numeric arguments In mathematics and computer usage, the word @dfn{argument} means ``data provided to a function or operation.'' Any Emacs command can be given a @dfn{numeric argument} (also called a @dfn{prefix argument}). Some commands interpret the argument as a repetition count. For example, giving an argument of ten to the key @kbd{C-f} (the command @code{forward-char}, move forward one character) moves forward ten characters. With these commands, no argument is equivalent to an argument of one. Negative arguments are allowed. Often they tell a command to move or act in the opposite direction. @kindex M-1 @kindex M-@t{-} @findex digit-argument @findex negative-argument If your keyboard has a @key{META} key (labelled with a diamond on Sun-type keyboards and labelled @samp{Alt} on some other keyboards), the easiest way to specify a numeric argument is to type digits and/or a minus sign while holding down the @key{META} key. For example, @example M-5 C-n @end example @noindent would move down five lines. The characters @kbd{Meta-1}, @kbd{Meta-2}, and so on, as well as @kbd{Meta--}, do this because they are keys bound to commands (@code{digit-argument} and @code{negative-argument}) that are defined to contribute to an argument for the next command. Digits and @kbd{-} modified with Control, or Control and Meta, also specify numeric arguments. @kindex C-u @findex universal-argument Another way of specifying an argument is to use the @kbd{C-u} (@code{universal-argument}) command followed by the digits of the argument. With @kbd{C-u}, you can type the argument digits without holding down modifier keys; @kbd{C-u} works on all terminals. To type a negative argument, type a minus sign after @kbd{C-u}. Just a minus sign without digits normally means @minus{}1. @kbd{C-u} followed by a character which is neither a digit nor a minus sign has the special meaning of ``multiply by four''. It multiplies the argument for the next command by four. @kbd{C-u} twice multiplies it by sixteen. Thus, @kbd{C-u C-u C-f} moves forward sixteen characters. This is a good way to move forward ``fast'', since it moves about 1/5 of a line in the usual size frame. Other useful combinations are @kbd{C-u C-n}, @kbd{C-u C-u C-n} (move down a good fraction of a frame), @kbd{C-u C-u C-o} (make ``a lot'' of blank lines), and @kbd{C-u C-k} (kill four lines). Some commands care only about whether there is an argument and not about its value. For example, the command @kbd{M-q} (@code{fill-paragraph}) with no argument fills text; with an argument, it justifies the text as well. (@xref{Filling}, for more information on @kbd{M-q}.) Just @kbd{C-u} is a handy way of providing an argument for such commands. Some commands use the value of the argument as a repeat count, but do something peculiar when there is no argument. For example, the command @kbd{C-k} (@code{kill-line}) with argument @var{n} kills @var{n} lines, including their terminating newlines. But @kbd{C-k} with no argument is special: it kills the text up to the next newline, or, if point is right at the end of the line, it kills the newline itself. Thus, two @kbd{C-k} commands with no arguments can kill a non-blank line, just like @kbd{C-k} with an argument of one. (@xref{Killing}, for more information on @kbd{C-k}.) A few commands treat a plain @kbd{C-u} differently from an ordinary argument. A few others may treat an argument of just a minus sign differently from an argument of @minus{}1. These unusual cases are described when they come up; they are always for reasons of convenience of use of the individual command. You can use a numeric argument to insert multiple copies of a character. This is straightforward unless the character is a digit; for example, @kbd{C-u 6 4 a} inserts 64 copies of the character @samp{a}. But this does not work for inserting digits; @kbd{C-u 6 4 1} specifies an argument of 641, rather than inserting anything. To separate the digit to insert from the argument, type another @kbd{C-u}; for example, @kbd{C-u 6 4 C-u 1} does insert 64 copies of the character @samp{1}. We use the term ``prefix argument'' as well as ``numeric argument'' to emphasize that you type the argument before the command, and to distinguish these arguments from minibuffer arguments that come after the command. @ignore @node Repeating @section Repeating a Command @cindex repeating a command @kindex C-x z @findex repeat The command @kbd{C-x z} (@code{repeat}) provides another way to repeat an Emacs command many times. This command repeats the previous Emacs command, whatever that was. Repeating a command uses the same arguments that were used before; it does not read new arguments each time. To repeat the command more than once, type additional @kbd{z}'s: each @kbd{z} repeats the command one more time. Repetition ends when you type a character other than @kbd{z}, or press a mouse button. For example, suppose you type @kbd{C-u 2 0 C-d} to delete 20 characters. You can repeat that command (including its argument) three additional times, to delete a total of 80 characters, by typing @kbd{C-x z z z}. The first @kbd{C-x z} repeats the command once, and each subsequent @kbd{z} repeats it once again. @end ignore texi2html-1.82/test/xemacs_manual/tests.txt0000644000175000017500000000017411264347115022735 0ustar flichtenheldflichtenheldtexi xemacs.texi -ifinfo xemacs xemacs.texi -split chapter -ifinfo xemacs_frame xemacs.texi -split chapter -frames -ifinfo texi2html-1.82/test/xemacs_manual/buffers.texi0000644000175000017500000003142211264347115023361 0ustar flichtenheldflichtenheld @node Buffers, Windows, Files, Top @chapter Using Multiple Buffers @cindex buffers Text you are editing in Emacs resides in an object called a @dfn{buffer}. Each time you visit a file, Emacs creates a buffer to hold the file's text. Each time you invoke Dired, Emacs creates a buffer to hold the directory listing. If you send a message with @kbd{C-x m}, a buffer named @samp{*mail*} is used to hold the text of the message. When you ask for a command's documentation, it appears in a buffer called @samp{*Help*}. @cindex selected buffer @cindex current buffer At any time, one and only one buffer is @dfn{selected}. It is also called the @dfn{current buffer}. Saying a command operates on ``the buffer'' really means that the command operates on the selected buffer, as most commands do. When Emacs creates multiple windows, each window has a chosen buffer which is displayed there, but at any time only one of the windows is selected and its chosen buffer is the selected buffer. Each window's mode line displays the name of the buffer the window is displaying (@pxref{Windows}). Each buffer has a name which can be of any length but is case-sensitive. You can select a buffer using its name. Most buffers are created when you visit files; their names are derived from the files' names. You can also create an empty buffer with any name you want. A newly started Emacs has a buffer named @samp{*scratch*} which you can use for evaluating Lisp expressions in Emacs. Each buffer records what file it is visiting, whether it is modified, and what major mode and minor modes are in effect in it (@pxref{Major Modes}). Any Emacs variable can be made @dfn{local to} a particular buffer, meaning its value in that buffer can be different from the value in other buffers. @xref{Locals}. @menu * Select Buffer:: Creating a new buffer or reselecting an old one. * List Buffers:: Getting a list of buffers that exist. * Misc Buffer:: Renaming; changing read-onliness; copying text. * Kill Buffer:: Killing buffers you no longer need. * Several Buffers:: How to go through the list of all buffers and operate variously on several of them. @end menu @node Select Buffer, List Buffers, Buffers, Buffers @section Creating and Selecting Buffers @cindex changing buffers @cindex switching buffers @table @kbd @item C-x b @var{buffer} @key{RET} Select or create a buffer named @var{buffer} (@code{switch-to-buffer}). @item C-x 4 b @var{buffer} @key{RET} Similar, but select a buffer named @var{buffer} in another window (@code{switch-to-buffer-other-window}). @item M-x switch-to-other-buffer @var{n} Switch to the previous buffer. @end table @kindex C-x 4 b @kindex C-x 5 b @findex switch-to-buffer-other-window @kindex C-x b @findex switch-to-buffer @findex switch-to-buffer-other-frame To select a buffer named @var{bufname}, type @kbd{C-x b @var{bufname} @key{RET}}. This is the command @code{switch-to-buffer} with argument @var{bufname}. You can use completion on an abbreviation for the buffer name you want (@pxref{Completion}). An empty argument to @kbd{C-x b} specifies the most recently selected buffer that is not displayed in any window.@refill Most buffers are created when you visit files, or use Emacs commands that display text. You can also create a buffer explicitly by typing @kbd{C-x b @var{bufname} @key{RET}}, which creates a new, empty buffer that is not visiting any file, and selects it for editing. The new buffer's major mode is determined by the value of @code{default-major-mode} (@pxref{Major Modes}). Buffers not visiting files are usually used for making notes to yourself. If you try to save one, you are asked for the file name to use. The function @code{switch-to-buffer-other-frame} is similar to @code{switch-to-buffer} except that it creates a new frame in which to display the selected buffer. @findex switch-to-other-buffer Use @kbd{M-x switch-to-other-buffer} to visit the previous buffer. If you supply a positive integer @var{n}, the @var{n}th most recent buffer is displayed. If you supply an argument of 0, the current buffer is moved to the bottom of the buffer stack. Note that you can also use @kbd{C-x C-f} and any other command for visiting a file to switch buffers. @xref{Visiting}. @node List Buffers, Misc Buffer, Select Buffer, Buffers @section Listing Existing Buffers @table @kbd @item C-x C-b List the existing buffers (@code{list-buffers}). @end table @kindex C-x C-b @findex list-buffers To print a list of all existing buffers, type @kbd{C-x C-b}. Each line in the list shows one buffer's name, major mode, and visited file. A @samp{*} at the beginning of a line indicates the buffer has been ``modified''. If several buffers are modified, it may be time to save some with @kbd{C-x s} (@pxref{Saving}). A @samp{%} indicates a read-only buffer. A @samp{.} marks the selected buffer. Here is an example of a buffer list:@refill @smallexample MR Buffer Size Mode File -- ------ ---- ---- ---- .* emacs.tex 383402 Texinfo /u2/emacs/man/emacs.tex *Help* 1287 Fundamental files.el 23076 Emacs-Lisp /u2/emacs/lisp/files.el % RMAIL 64042 RMAIL /u/rms/RMAIL *% man 747 Dired /u2/emacs/man/ net.emacs 343885 Fundamental /u/rms/net.emacs fileio.c 27691 C /u2/emacs/src/fileio.c NEWS 67340 Text /u2/emacs/etc/NEWS *scratch* 0 Lisp Interaction @end smallexample @noindent Note that the buffer @samp{*Help*} was made by a help request; it is not visiting any file. The buffer @code{man} was made by Dired on the directory @file{/u2/emacs/man/}. As you move the mouse over the @samp{*Buffer List*} buffer, the lines are highlighted. This visual cue indicates that clicking the right mouse button (@code{button3}) will pop up a menu of commands on the buffer represented by this line. This menu duplicates most of those commands which are bound to keys in the @samp{*Buffer List*} buffer. @node Misc Buffer, Kill Buffer, List Buffers, Buffers @section Miscellaneous Buffer Operations @table @kbd @item C-x C-q Toggle read-only status of buffer (@code{toggle-read-only}). @item M-x rename-buffer Change the name of the current buffer. @item M-x view-buffer Scroll through a buffer. @end table @cindex read-only buffer @kindex C-x C-q @findex toggle-read-only @vindex buffer-read-only A buffer can be @dfn{read-only}, which means that commands to change its text are not allowed. Normally, read-only buffers are created by subsystems such as Dired and Rmail that have special commands to operate on the text. Emacs also creates a read-only buffer if you visit a file that is protected. To make changes in a read-only buffer, use the command @kbd{C-x C-q} (@code{toggle-read-only}). It makes a read-only buffer writable, and makes a writable buffer read-only. This works by setting the variable @code{buffer-read-only}, which has a local value in each buffer and makes a buffer read-only if its value is non-@code{nil}. @findex rename-buffer @kbd{M-x rename-buffer} changes the name of the current buffer, prompting for the new name in the minibuffer. There is no default. If you specify a name that is used by a different buffer, an error is signalled and renaming is not done. @findex view-buffer @kbd{M-x view-buffer} is similar to @kbd{M-x view-file} (@pxref{Misc File Ops}), but it examines an already existing Emacs buffer. View mode provides convenient commands for scrolling through the buffer but not for changing it. When you exit View mode, the resulting value of point remains in effect. To copy text from one buffer to another, use the commands @kbd{M-x append-to-buffer} and @kbd{M-x insert-buffer}. @xref{Accumulating Text}.@refill @node Kill Buffer, Several Buffers, Misc Buffer, Buffers @section Killing Buffers After using Emacs for a while, you may accumulate a large number of buffers and may want to eliminate the ones you no longer need. There are several commands for doing this. @c WideCommands @table @kbd @item C-x k Kill a buffer, specified by name (@code{kill-buffer}). @item M-x kill-some-buffers Offer to kill each buffer, one by one. @end table @findex kill-buffer @findex kill-some-buffers @kindex C-x k @kbd{C-x k} (@code{kill-buffer}) kills one buffer, whose name you specify in the minibuffer. If you type just @key{RET} in the minibuffer, the default, killing the current buffer, is used. If the current buffer is killed, the buffer that has been selected recently but does not appear in any window now is selected. If the buffer being killed contains unsaved changes, you are asked to confirm with @kbd{yes} before the buffer is killed. The command @kbd{M-x kill-some-buffers} asks about each buffer, one by one. An answer of @kbd{y} means to kill the buffer. Killing the current buffer or a buffer containing unsaved changes selects a new buffer or asks for confirmation just like @code{kill-buffer}. @node Several Buffers,, Kill Buffer, Buffers @section Operating on Several Buffers @cindex buffer menu The @dfn{buffer-menu} facility is like a ``Dired for buffers''; it allows you to request operations on various Emacs buffers by editing a buffer containing a list of them. You can save buffers, kill them (here called @dfn{deleting} them, for consistency with Dired), or display them. @table @kbd @item M-x buffer-menu Begin editing a buffer listing all Emacs buffers. @end table @findex buffer-menu The command @code{buffer-menu} writes a list of all Emacs buffers into the buffer @samp{*Buffer List*}, and selects that buffer in Buffer Menu mode. The buffer is read-only. You can only change it using the special commands described in this section. Most of the commands are graphic characters. You can use Emacs cursor motion commands in the @samp{*Buffer List*} buffer. If the cursor is on a line describing a buffer, the following special commands apply to that buffer: @table @kbd @item d Request to delete (kill) the buffer, then move down. A @samp{D} before the buffer name on a line indicates a deletion request. Requested deletions actually take place when you use the @kbd{x} command. @item k Synonym for @kbd{d}. @item C-d Like @kbd{d} but move up afterwards instead of down. @item s Request to save the buffer. An @samp{S} before the buffer name on a line indicates the request. Requested saves actually take place when you use the @kbd{x} command. You can request both saving and deletion for the same buffer. @item ~ Mark buffer ``unmodified''. The command @kbd{~} does this immediately when typed. @item x Perform previously requested deletions and saves. @item u Remove any request made for the current line, and move down. @item @key{DEL} Move to previous line and remove any request made for that line. @end table All commands that add or remove flags to request later operations also move down a line. They accept a numeric argument as a repeat count, unless otherwise specified. There are also special commands to use the buffer list to select another buffer, and to specify one or more other buffers for display in additional windows. @table @kbd @item 1 Select the buffer in a full-frame window. This command takes effect immediately. @item 2 Immediately set up two windows, with this buffer in one and the buffer selected before @samp{*Buffer List*} in the other. @item f Immediately select the buffer in place of the @samp{*Buffer List*} buffer. @item o Immediately select the buffer in another window as if by @kbd{C-x 4 b}, leaving @samp{*Buffer List*} visible. @item q Immediately select this buffer, and display any buffers previously flagged with the @kbd{m} command in other windows. If there are no buffers flagged with @kbd{m}, this command is equivalent to @kbd{1}. @item m Flag this buffer to be displayed in another window if the @kbd{q} command is used. The request shows as a @samp{>} at the beginning of the line. The same buffer may not have both a delete request and a display request. @end table Going back between a @code{buffer-menu} buffer and other Emacs buffers is easy. You can, for example, switch from the @samp{*Buffer List*} buffer to another Emacs buffer, and edit there. You can then reselect the @code{buffer-menu} buffer and perform operations already requested, or you can kill that buffer or pay no further attention to it. All that @code{buffer-menu} does directly is create and select a suitable buffer, and turn on Buffer Menu mode. All the other capabilities of the buffer menu are implemented by special commands provided in Buffer Menu mode. The only difference between @code{buffer-menu} and @code{list-buffers} is that @code{buffer-menu} selects the @samp{*Buffer List*} buffer and @code{list-buffers} does not. If you run @code{list-buffers} (that is, type @kbd{C-x C-b}) and select the buffer list manually, you can use all the commands described here. texi2html-1.82/test/xemacs_manual/picture.texi0000644000175000017500000002555611264347115023413 0ustar flichtenheldflichtenheld @node Picture, Sending Mail, Abbrevs, Top @chapter Editing Pictures @cindex pictures @findex edit-picture If you want to create a picture made out of text characters (for example, a picture of the division of a register into fields, as a comment in a program), use the command @code{edit-picture} to enter Picture mode. In Picture mode, editing is based on the @dfn{quarter-plane} model of text. In this model, the text characters lie studded on an area that stretches infinitely far to the right and downward. The concept of the end of a line does not exist in this model; the most you can say is where the last non-blank character on the line is found. Of course, Emacs really always considers text as a sequence of characters, and lines really do have ends. But in Picture mode most frequently-used keys are rebound to commands that simulate the quarter-plane model of text. They do this by inserting spaces or by converting tabs to spaces. Most of the basic editing commands of Emacs are redefined by Picture mode to do essentially the same thing but in a quarter-plane way. In addition, Picture mode defines various keys starting with the @kbd{C-c} prefix to run special picture editing commands. One of these keys, @kbd{C-c C-c}, is pretty important. Often a picture is part of a larger file that is usually edited in some other major mode. @kbd{M-x edit-picture} records the name of the previous major mode. You can then use the @kbd{C-c C-c} command (@code{picture-mode-exit}) to restore that mode. @kbd{C-c C-c} also deletes spaces from the ends of lines, unless you give it a numeric argument. The commands used in Picture mode all work in other modes (provided the @file{picture} library is loaded), but are only bound to keys in Picture mode. Note that the descriptions below talk of moving ``one column'' and so on, but all the picture mode commands handle numeric arguments as their normal equivalents do. @vindex picture-mode-hook Turning on Picture mode calls the value of the variable @code{picture-mode-hook} as a function, with no arguments, if that value exists and is non-@code{nil}. @menu * Basic Picture:: Basic concepts and simple commands of Picture Mode. * Insert in Picture:: Controlling direction of cursor motion after "self-inserting" characters. * Tabs in Picture:: Various features for tab stops and indentation. * Rectangles in Picture:: Clearing and superimposing rectangles. @end menu @node Basic Picture, Insert in Picture, Picture, Picture @section Basic Editing in Picture Mode @findex picture-forward-column @findex picture-backward-column @findex picture-move-down @findex picture-move-up Most keys do the same thing in Picture mode that they usually do, but do it in a quarter-plane style. For example, @kbd{C-f} is rebound to run @code{picture-forward-column}, which moves point one column to the right, by inserting a space if necessary, so that the actual end of the line makes no difference. @kbd{C-b} is rebound to run @code{picture-backward-column}, which always moves point left one column, converting a tab to multiple spaces if necessary. @kbd{C-n} and @kbd{C-p} are rebound to run @code{picture-move-down} and @code{picture-move-up}, which can either insert spaces or convert tabs as necessary to make sure that point stays in exactly the same column. @kbd{C-e} runs @code{picture-end-of-line}, which moves to after the last non-blank character on the line. There was no need to change @kbd{C-a}, as the choice of screen model does not affect beginnings of lines.@refill @findex picture-newline Insertion of text is adapted to the quarter-plane screen model through the use of Overwrite mode (@pxref{Minor Modes}). Self-inserting characters replace existing text, column by column, rather than pushing existing text to the right. @key{RET} runs @code{picture-newline}, which just moves to the beginning of the following line so that new text will replace that line. @findex picture-backward-clear-column @findex picture-clear-column @findex picture-clear-line Text is erased instead of deleted and killed. @key{DEL} (@code{picture-backward-clear-column}) replaces the preceding character with a space rather than removing it. @kbd{C-d} (@code{picture-clear-column}) does the same in a forward direction. @kbd{C-k} (@code{picture-clear-line}) really kills the contents of lines, but never removes the newlines from a buffer.@refill @findex picture-open-line To do actual insertion, you must use special commands. @kbd{C-o} (@code{picture-open-line}) creates a blank line, but does so after the current line; it never splits a line. @kbd{C-M-o}, @code{split-line}, makes sense in Picture mode, so it remains unchanged. @key{LFD} (@code{picture-duplicate-line}) inserts another line with the same contents below the current line.@refill @kindex C-c C-d (Picture mode) @findex delete-char To actually delete parts of the picture, use @kbd{C-w}, or with @kbd{C-c C-d} (which is defined as @code{delete-char}, as @kbd{C-d} is in other modes), or with one of the picture rectangle commands (@pxref{Rectangles in Picture}). @node Insert in Picture, Tabs in Picture, Basic Picture, Picture @section Controlling Motion After Insert @findex picture-movement-up @findex picture-movement-down @findex picture-movement-left @findex picture-movement-right @findex picture-movement-nw @findex picture-movement-ne @findex picture-movement-sw @findex picture-movement-se @kindex C-c < (Picture mode) @kindex C-c > (Picture mode) @kindex C-c ^ (Picture mode) @kindex C-c . (Picture mode) @kindex C-c ` (Picture mode) @kindex C-c ' (Picture mode) @kindex C-c / (Picture mode) @kindex C-c \ (Picture mode) Since ``self-inserting'' characters just overwrite and move point in Picture mode, there is no essential restriction on how point should be moved. Normally point moves right, but you can specify any of the eight orthogonal or diagonal directions for motion after a ``self-inserting'' character. This is useful for drawing lines in the buffer. @table @kbd @item C-c < Move left after insertion (@code{picture-movement-left}). @item C-c > Move right after insertion (@code{picture-movement-right}). @item C-c ^ Move up after insertion (@code{picture-movement-up}). @item C-c . Move down after insertion (@code{picture-movement-down}). @item C-c ` Move up and left (``northwest'') after insertion @*(@code{picture-movement-nw}). @item C-c ' Move up and right (``northeast'') after insertion @* (@code{picture-movement-ne}). @item C-c / Move down and left (``southwest'') after insertion @*(@code{picture-movement-sw}). @item C-c \ Move down and right (``southeast'') after insertion @*(@code{picture-movement-se}). @end table @kindex C-c C-f (Picture mode) @kindex C-c C-b (Picture mode) @findex picture-motion @findex picture-motion-reverse Two motion commands move based on the current Picture insertion direction. The command @kbd{C-c C-f} (@code{picture-motion}) moves in the same direction as motion after ``insertion'' currently does, while @kbd{C-c C-b} (@code{picture-motion-reverse}) moves in the opposite direction. @node Tabs in Picture, Rectangles in Picture, Insert in Picture, Picture @section Picture Mode Tabs @kindex M-TAB @findex picture-tab-search @vindex picture-tab-chars Two kinds of tab-like action are provided in Picture mode. Context-based tabbing is done with @kbd{M-@key{TAB}} (@code{picture-tab-search}). With no argument, it moves to a point underneath the next ``interesting'' character that follows whitespace in the previous non-blank line. ``Next'' here means ``appearing at a horizontal position greater than the one point starts out at''. With an argument, as in @kbd{C-u M-@key{TAB}}, the command moves to the next such interesting character in the current line. @kbd{M-@key{TAB}} does not change the text; it only moves point. ``Interesting'' characters are defined by the variable @code{picture-tab-chars}, which contains a string of characters considered interesting. Its default value is @code{"!-~"}.@refill @findex picture-tab @key{TAB} itself runs @code{picture-tab}, which operates based on the current tab stop settings; it is the Picture mode equivalent of @code{tab-to-tab-stop}. Without arguments it just moves point, but with a numeric argument it clears the text that it moves over. @kindex C-c TAB (Picture mode) @findex picture-set-tab-stops The context-based and tab-stop-based forms of tabbing are brought together by the command @kbd{C-c @key{TAB}} (@code{picture-set-tab-stops}.) This command sets the tab stops to the positions which @kbd{M-@key{TAB}} would consider significant in the current line. If you use this command with @key{TAB}, you can get the effect of context-based tabbing. But @kbd{M-@key{TAB}} is more convenient in the cases where it is sufficient. @node Rectangles in Picture,, Tabs in Picture, Picture @section Picture Mode Rectangle Commands @cindex rectangle Picture mode defines commands for working on rectangular pieces of the text in ways that fit with the quarter-plane model. The standard rectangle commands may also be useful (@pxref{Rectangles}). @table @kbd @item C-c C-k Clear out the region-rectangle (@code{picture-clear-rectangle}). With argument, kill it. @item C-c C-w @var{r} Similar but save rectangle contents in register @var{r} first (@code{picture-clear-rectangle-to-register}). @item C-c C-y Copy last killed rectangle into the buffer by overwriting, with upper left corner at point (@code{picture-yank-rectangle}). With argument, insert instead. @item C-c C-x @var{r} Similar, but use the rectangle in register @var{r}@* (@code{picture-yank-rectangle-from-register}). @end table @kindex C-c C-k (Picture mode) @kindex C-c C-w (Picture mode) @findex picture-clear-rectangle @findex picture-clear-rectangle-to-register The picture rectangle commands @kbd{C-c C-k} (@code{picture-clear-rectangle}) and @kbd{C-c C-w} (@code{picture-clear-rectangle-to-register}) differ from the standard rectangle commands in that they normally clear the rectangle instead of deleting it; this is analogous with the way @kbd{C-d} is changed in Picture mode.@refill However, deletion of rectangles can be useful in Picture mode, so these commands delete the rectangle if given a numeric argument. @kindex C-c C-y (Picture mode) @kindex C-c C-x (Picture mode) @findex picture-yank-rectangle @findex picture-yank-rectangle-from-register The Picture mode commands for yanking rectangles differ from the standard ones in overwriting instead of inserting. This is the same way that Picture mode insertion of other text is different from other modes. @kbd{C-c C-y} (@code{picture-yank-rectangle}) inserts (by overwriting) the rectangle that was most recently killed, while @kbd{C-c C-x} (@code{picture-yank-rectangle-from-register}) does for the rectangle found in a specified register. Since most region commands in Picture mode operate on rectangles, when you select a region of text with the mouse in Picture mode, it is highlighted as a rectangle. texi2html-1.82/test/xemacs_manual/killing.texi0000644000175000017500000010020511264347115023352 0ustar flichtenheldflichtenheld @iftex @chapter Killing and Moving Text @dfn{Killing} means erasing text and copying it into the @dfn{kill ring}, from which it can be retrieved by @dfn{yanking} it. Some other systems that have recently become popular use the terms ``cutting'' and ``pasting'' for these operations. The most common way of moving or copying text with Emacs is to kill it and later yank it in one or more places. This is safe because all the text killed recently is stored in the kill ring, and it is versatile, because you can use the same commands for killing syntactic units and for moving those units. There are other ways of copying text for special purposes. Emacs has only one kill ring, so you can kill text in one buffer and yank it in another buffer. If you are using XEmacs under X, you can also use the X selection mechanism to copy text from one buffer to another, or between applications. @xref{Using X Selections}. @end iftex @node Killing, Yanking, Additional Mouse Operations, Top @section Deletion and Killing @findex delete-char @findex delete-backward-char @cindex killing @cindex cutting @cindex deletion @kindex C-d @kindex DEL Most commands that erase text from the buffer save it. You can get the text back if you change your mind, or you can move or copy it to other parts of the buffer. Commands which erase text and save it in the kill ring are known as @dfn{kill} commands. Some other commands erase text but do not save it; they are known as @dfn{delete} commands. (This distinction is made only for erasing text in the buffer.) The commands' names and individual descriptions use the words @samp{kill} and @samp{delete} to indicate what they do. If you perform a kill or delete command by mistake, use the @kbd{C-x u} (@code{undo}) command to undo it (@pxref{Undo}). The delete commands include @kbd{C-d} (@code{delete-char}) and @key{DEL} (@code{delete-backward-char}), which delete only one character at a time, and those commands that delete only spaces or newlines. Commands that can destroy significant amounts of nontrivial data usually kill.@refill @subsection Deletion @table @kbd @item C-d Delete next character (@code{delete-char}). @item @key{DEL} Delete previous character (@code{delete-backward-char}). @item M-\ Delete spaces and tabs around point (@code{delete-horizontal-space}). @item M-@key{SPC} Delete spaces and tabs around point, leaving one space (@code{just-one-space}). @item C-x C-o Delete blank lines around the current line (@code{delete-blank-lines}). @item M-^ Join two lines by deleting the intervening newline, and any indentation following it (@code{delete-indentation}). @end table The most basic delete commands are @kbd{C-d} (@code{delete-char}) and @key{DEL} (@code{delete-backward-char}). @kbd{C-d} deletes the character after point, the one the cursor is ``on top of''. Point doesn't move. @key{DEL} deletes the character before the cursor, and moves point back. You can delete newlines like any other characters in the buffer; deleting a newline joins two lines. Actually, @kbd{C-d} and @key{DEL} aren't always delete commands; if you give them an argument, they kill instead, since they can erase more than one character this way. @kindex M-\ @findex delete-horizontal-space @kindex M-SPC @findex just-one-space @kindex C-x C-o @findex delete-blank-lines @kindex M-^ @findex delete-indentation The other delete commands delete only formatting characters: spaces, tabs and newlines. @kbd{M-\} (@code{delete-horizontal-space}) deletes all spaces and tab characters before and after point. @kbd{M-@key{SPC}} (@code{just-one-space}) does the same but leaves a single space after point, regardless of the number of spaces that existed previously (even zero). @kbd{C-x C-o} (@code{delete-blank-lines}) deletes all blank lines after the current line. If the current line is blank, it deletes all blank lines preceding the current line as well as leaving one blank line, the current line. @kbd{M-^} (@code{delete-indentation}) joins the current line and the previous line, or, if given an argument, joins the current line and the next line by deleting a newline and all surrounding spaces, possibly leaving a single space. @xref{Indentation,M-^}. @subsection Killing by Lines @table @kbd @item C-k Kill rest of line or one or more lines (@code{kill-line}). @end table @kindex C-k @findex kill-line The simplest kill command is @kbd{C-k}. If given at the beginning of a line, it kills all the text on the line, leaving the line blank. If given on a blank line, the blank line disappears. As a consequence, a line disappears completely if you go to the front of a non-blank line and type @kbd{C-k} twice. More generally, @kbd{C-k} kills from point up to the end of the line, unless it is at the end of a line. In that case, it kills the newline following the line, thus merging the next line into the current one. Emacs ignores invisible spaces and tabs at the end of the line when deciding which case applies: if point appears to be at the end of the line, you can be sure the newline will be killed. If you give @kbd{C-k} a positive argument, it kills that many lines and the newlines that follow them (however, text on the current line before point is not killed). With a negative argument, @kbd{C-k} kills back to a number of line beginnings. An argument of @minus{}2 means kill back to the second line beginning. If point is at the beginning of a line, that line beginning doesn't count, so @kbd{C-u - 2 C-k} with point at the front of a line kills the two previous lines. @kbd{C-k} with an argument of zero kills all the text before point on the current line. @subsection Other Kill Commands @findex kill-region @findex kill-word @findex backward-kill-word @findex kill-sexp @findex kill-sentence @findex backward-kill-sentence @kindex M-d @kindex M-DEL @kindex C-M-k @kindex C-x DEL @kindex M-k @kindex C-w @c DoubleWideCommands @table @kbd @item C-w Kill region (from point to the mark) (@code{kill-region}). @xref{Words}. @item M-d Kill word (@code{kill-word}). @item M-@key{DEL} Kill word backwards (@code{backward-kill-word}). @item C-x @key{DEL} Kill back to beginning of sentence (@code{backward-kill-sentence}). @xref{Sentences}. @item M-k Kill to end of sentence (@code{kill-sentence}). @item C-M-k Kill sexp (@code{kill-sexp}). @xref{Lists}. @item M-z @var{char} Kill up to next occurrence of @var{char} (@code{zap-to-char}). @end table @kbd{C-w} (@code{kill-region}) is a very general kill command; it kills everything between point and the mark. You can use this command to kill any contiguous sequence of characters by first setting the mark at one end of a sequence of characters, then going to the other end and typing @kbd{C-w}. @kindex M-z @findex zap-to-char A convenient way of killing is combined with searching: @kbd{M-z} (@code{zap-to-char}) reads a character and kills from point up to (but not including) the next occurrence of that character in the buffer. If there is no next occurrence, killing goes to the end of the buffer. A numeric argument acts as a repeat count. A negative argument means to search backward and kill text before point. Other syntactic units can be killed: words, with @kbd{M-@key{DEL}} and @kbd{M-d} (@pxref{Words}); sexps, with @kbd{C-M-k} (@pxref{Lists}); and sentences, with @kbd{C-x @key{DEL}} and @kbd{M-k} (@pxref{Sentences}).@refill @node Yanking, Using X Selections, Killing, Top @section Yanking @cindex moving text @cindex copying text @cindex kill ring @cindex yanking @cindex pasting @dfn{Yanking} means getting back text which was killed. Some systems call this ``pasting''. The usual way to move or copy text is to kill it and then yank it one or more times. @table @kbd @item C-y Yank last killed text (@code{yank}). @item M-y Replace re-inserted killed text with the previously killed text (@code{yank-pop}). @item M-w Save region as last killed text without actually killing it (@code{copy-region-as-kill}). @item C-M-w Append next kill to last batch of killed text (@code{append-next-kill}). @end table @menu * Kill Ring:: Where killed text is stored. Basic yanking. * Appending Kills:: Several kills in a row all yank together. * Earlier Kills:: Yanking something killed some time ago. @end menu @node Kill Ring, Appending Kills, Yanking, Yanking @subsection The Kill Ring @kindex C-y @findex Yank All killed text is recorded in the @dfn{kill ring}, a list of blocks of text that have been killed. There is only one kill ring, used in all buffers, so you can kill text in one buffer and yank it in another buffer. This is the usual way to move text from one file to another. (@xref{Accumulating Text}, for some other ways.) If you have two separate Emacs processes, you cannot use the kill ring to move text. If you are using XEmacs under X, however, you can use the X selection mechanism to move text from one to another. If you are using XEmacs under X and have one Emacs process with multiple frames, they do share the same kill ring. You can kill or copy text in one Emacs frame, then yank it in the other frame belonging to the same process. The command @kbd{C-y} (@code{yank}) reinserts the text of the most recent kill. It leaves the cursor at the end of the text and sets the mark at the beginning of the text. @xref{Mark}. @kbd{C-u C-y} yanks the text, leaves the cursor in front of the text, and sets the mark after it, if the argument is with just a @kbd{C-u}. Any other argument, including @kbd{C-u} and digits, has different results, described below, under ``Yanking Earlier Kills''. @kindex M-w @findex copy-region-as-kill To copy a block of text, you can also use @kbd{M-w} (@code{copy-region-as-kill}), which copies the region into the kill ring without removing it from the buffer. @kbd{M-w} is similar to @kbd{C-w} followed by @kbd{C-y} but does not mark the buffer as ``modified'' and does not actually cut anything. @node Appending Kills, Earlier Kills, Kill Ring, Yanking @subsection Appending Kills @cindex television Normally, each kill command pushes a new block onto the kill ring. However, two or more kill commands in a row combine their text into a single entry, so that a single @kbd{C-y} yanks it all back. This means you don't have to kill all the text you want to yank in one command; you can kill line after line, or word after word, until you have killed what you want, then get it all back at once using @kbd{C-y}. (Thus we join television in leading people to kill thoughtlessly.) Commands that kill forward from point add onto the end of the previous killed text. Commands that kill backward from point add onto the beginning. This way, any sequence of mixed forward and backward kill commands puts all the killed text into one entry without rearrangement. Numeric arguments do not break the sequence of appending kills. For example, suppose the buffer contains: @example This is the first line of sample text and here is the third. @end example @noindent with point at the beginning of the second line. If you type @kbd{C-k C-u 2 M-@key{DEL} C-k}, the first @kbd{C-k} kills the text @samp{line of sample text}, @kbd{C-u 2 M-@key{DEL}} kills @samp{the first} with the newline that followed it, and the second @kbd{C-k} kills the newline after the second line. The result is that the buffer contains @samp{This is and here is the third.} and a single kill entry contains @samp{the first@key{RET}line of sample text@key{RET}}---all the killed text, in its original order. @kindex C-M-w @findex append-next-kill If a kill command is separated from the last kill command by other commands (not just numeric arguments), it starts a new entry on the kill ring. To force a kill command to append, first type the command @kbd{C-M-w} (@code{append-next-kill}). @kbd{C-M-w} tells the following command, if it is a kill command, to append the text it kills to the last killed text, instead of starting a new entry. With @kbd{C-M-w}, you can kill several separated pieces of text and accumulate them to be yanked back in one place.@refill @node Earlier Kills,, Appending Kills, Yanking @subsection Yanking Earlier Kills @kindex M-y @findex yank-pop To recover killed text that is no longer the most recent kill, you need the @kbd{Meta-y} (@code{yank-pop}) command. You can use @kbd{M-y} only after a @kbd{C-y} or another @kbd{M-y}. It takes the text previously yanked and replaces it with the text from an earlier kill. To recover the text of the next-to-the-last kill, first use @kbd{C-y} to recover the last kill, then @kbd{M-y} to replace it with the previous kill.@refill You can think in terms of a ``last yank'' pointer which points at an item in the kill ring. Each time you kill, the ``last yank'' pointer moves to the new item at the front of the ring. @kbd{C-y} yanks the item which the ``last yank'' pointer points to. @kbd{M-y} moves the ``last yank'' pointer to a different item, and the text in the buffer changes to match. Enough @kbd{M-y} commands can move the pointer to any item in the ring, so you can get any item into the buffer. Eventually the pointer reaches the end of the ring; the next @kbd{M-y} moves it to the first item again. Yanking moves the ``last yank'' pointer around the ring, but does not change the order of the entries in the ring, which always runs from the most recent kill at the front to the oldest one still remembered. Use @kbd{M-y} with a numeric argument to advance the ``last yank'' pointer by the specified number of items. A negative argument moves the pointer toward the front of the ring; from the front of the ring, it moves to the last entry and starts moving forward from there. Once the text you are looking for is brought into the buffer, you can stop doing @kbd{M-y} commands and the text will stay there. Since the text is just a copy of the kill ring item, editing it in the buffer does not change what's in the ring. As long you don't kill additional text, the ``last yank'' pointer remains at the same place in the kill ring: repeating @kbd{C-y} will yank another copy of the same old kill. If you know how many @kbd{M-y} commands it would take to find the text you want, you can yank that text in one step using @kbd{C-y} with a numeric argument. @kbd{C-y} with an argument greater than one restores the text the specified number of entries back in the kill ring. Thus, @kbd{C-u 2 C-y} gets the next to the last block of killed text. It is equivalent to @kbd{C-y M-y}. @kbd{C-y} with a numeric argument starts counting from the ``last yank'' pointer, and sets the ``last yank'' pointer to the entry that it yanks. @vindex kill-ring-max The variable @code{kill-ring-max} controls the length of the kill ring; no more than that many blocks of killed text are saved. @node Using X Selections, Accumulating Text, Yanking, Top @section Using X Selections @comment node-name, next, previous, up In the X window system, mouse selections provide a simple mechanism for text transfer between different applications. In a typical X application, you can select text by pressing the left mouse button and dragging the cursor over the text you want to copy. The text becomes the primary X selection and is highlighted. The highlighted region is also the Emacs selected region. @itemize @bullet @item Since the region is the primary X selection, you can go to a different X application and click the middle mouse button: the text that you selected in the previous application is pasted into the current application. @item Since the region is the Emacs selected region, you can use all region commands (@kbd{C-w, M-w} etc.) as well as the options of the @b{Edit} menu to manipulate the selected text. @end itemize @menu * X Clipboard Selection:: Pasting to the X clipboard. * X Selection Commands:: Other operations on the selection. * X Cut Buffers:: X cut buffers are available for compatibility. * Active Regions:: Using zmacs-style highlighting of the selected region. @end menu @node X Clipboard Selection, X Selection Commands, Using X Selections, Using X Selections @comment node-name, next, previous, up @subsection The Clipboard Selection @cindex clipboard selections There are other kinds of X selections besides the @b{Primary} selection; one common one is the @b{Clipboard} selection. Some applications prefer to transfer data using this selection in preference to the @b{Primary}. One can transfer text from the @b{Primary} selection to the @b{Clipboard} selection with the @b{Copy} command under the @b{Edit} menu in the menubar. Usually, the clipboard selection is not visible. However, if you run the @file{xclipboard} application, the text most recently copied to the clipboard (with the @b{Copy} command) is displayed in a window. Any time new text is thus copied, the @file{xclipboard} application makes a copy of it and displays it in its window. The value of the clipboard can survive the lifetime of the running Emacs process. The @code{xclipboard} man page provides more details. Warning: If you use the @file{xclipboard} application, remember that it maintains a list of all things that have been pasted to the clipboard (that is, copied with the @b{Copy} command). If you don't manually delete elements from this list by clicking on the @b{Delete} button in the @code{xclipboard} window, the clipboard will eventually consume a lot of memory. In summary, some X applications (such as @file{xterm}) allow one to paste text in them from XEmacs in the following way: @itemize @bullet @item Drag out a region of text in Emacs with the left mouse button, making that text be the @b{Primary} selection. @item Click the middle button in the other application, pasting the @b{Primary} selection. @end itemize With some other applications (notably, the OpenWindows and Motif tools) you must use this method instead: @itemize @bullet @item Drag out a region of text in Emacs with the left mouse button, making that text be the @b{Primary} selection. @item Copy the selected text to the @b{Clipboard} selection by selecting the @b{Copy} menu item from the @b{Edit} menu, or by hitting the @b{Copy} key on your keyboard. @item Paste the text in the other application by selecting @b{Paste} from its menu, or by hitting the @b{Paste} key on your keyboard. @end itemize @node X Selection Commands, X Cut Buffers, X Clipboard Selection, Using X Selections @subsection Miscellaneous X Selection Commands @comment node-name, next, previous, up @cindex cut buffers @cindex primary selections @findex x-copy-primary-selection @findex x-delete-primary-selection @findex x-insert-selection @findex x-kill-primary-selection @findex x-mouse-kill @findex x-own-secondary-selection @findex x-own-selection @findex x-set-point-and-insert-selection @table @kbd @item M-x x-copy-primary-selection Copy the primary selection to both the kill ring and the Clipboard. @item M-x x-insert-selection Insert the current selection into the buffer at point. @item M-x x-delete-primary-selection Deletes the text in the primary selection without copying it to the kill ring or the Clipboard. @item M-x x-kill-primary-selection Deletes the text in the primary selection and copies it to both the kill ring and the Clipboard. @item M-x x-mouse-kill Kill the text between point and the mouse and copy it to the clipboard and to the cut buffer. @item M-x x-own-secondary-selection Make a secondary X selection of the given argument. @item M-x x-own-selection Make a primary X selection of the given argument. @item M-x x-set-point-and-insert-selection Set point where clicked and insert the primary selection or the cut buffer. @end table @node X Cut Buffers, Active Regions, X Selection Commands, Using X Selections @subsection X Cut Buffers @comment node-name, next, previous, up X cut buffers are a different, older way of transferring text between applications. XEmacs supports cut buffers for compatibility with older programs, even though selections are now the preferred way of transferring text. X has a concept of applications "owning" selections. When you select text by clicking and dragging inside an application, the application tells the X server that it owns the selection. When another application asks the X server for the value of the selection, the X server requests the information from the owner. When you use selections, the selection data is not actually transferred unless someone wants it; the act of making a selection doesn't transfer data. Cut buffers are different: when you "own" a cut buffer, the data is actually transferred to the X server immediately, and survives the lifetime of the application. Any time a region of text becomes the primary selection in Emacs, Emacs also copies that text to the cut buffer. This makes it possible to copy text from an XEmacs buffer and paste it into an older, non-selection-based application (such as Emacs 18). Note: Older versions of Emacs could not access the X selections, only the X cut buffers. @node Active Regions, , X Cut Buffers, Using X Selections @subsection Active Regions @comment node-name, next, previous, up @cindex active regions By default, both the text you select in an Emacs buffer using the click-and-drag mechanism and text you select by setting point and the mark is highlighted. You can use Emacs region commands as well as the @b{Cut} and @b{Copy} commands on the highlighted region you selected with the mouse. If you prefer, you can make a distinction between text selected with the mouse and text selected with point and the mark by setting the variable @code{zmacs-regions} to @code{nil}. In that case: @itemize @bullet @item The text selected with the mouse becomes both the X selection and the Emacs selected region. You can use menu-bar commands as well as Emacs region commands on it. @item The text selected with point and the mark is not highlighted. You can only use Emacs region commands on it, not the menu-bar items. @end itemize Active regions originally come from Zmacs, the Lisp Machine editor. The idea behind them is that commands can only operate on a region when the region is in an "active" state. Put simply, you can only operate on a region that is highlighted. @vindex zmacs-regions The variable @code{zmacs-regions} checks whether LISPM-style active regions should be used. This means that commands that operate on the region (the area between point and the mark) only work while the region is in the active state, which is indicated by highlighting. Most commands causes the region to not be in the active state; for example, @kbd{C-w} only works immediately after activating the region. More specifically: @itemize @bullet @item Commands that operate on the region only work if the region is active. @item Only a very small set of commands causes the region to become active--- those commands whose semantics are to mark an area, such as @code{mark-defun}. @item The region is deactivated after each command that is executed, except that motion commands do not change whether the region is active or not. @end itemize @code{set-mark-command} (@kbd{C-SPC}) pushes a mark and activates the region. Moving the cursor with normal motion commands (@kbd{C-n}, @kbd{C-p}, etc.) will cause the region between point and the recently-pushed mark to be highlighted. It will remain highlighted until some non-motion command is executed. @code{exchange-point-and-mark} (@kbd{C-x C-x}) activates the region. So if you mark a region and execute a command that operates on it, you can reactivate the same region with @kbd{C-x C-x} (or perhaps @kbd{C-x C-x C-x C-x}) to operate on it again. Generally, commands that push marks as a means of navigation, such as @code{beginning-of-buffer} (@kbd{M-<}) and @code{end-of-buffer} (@kbd{M->}), do not activate the region. However, commands that push marks as a means of marking an area of text, such as @code{mark-defun} (@kbd{M-C-h}), @code{mark-word} (@kbd{M-@@}), and @code{mark-whole-buffer} (@kbd{C-x h}), do activate the region. When @code{zmacs-regions} is @code{t}, there is no distinction between the primary X selection and the active region selected by point and the mark. To see this, set the mark (@key{C-SPC}) and move the cursor with any cursor-motion command: the region between point and mark is highlighted, and you can watch it grow and shrink as you move the cursor. Any other commands besides cursor-motion commands (such as inserting or deleting text) will cause the region to no longer be active; it will no longer be highlighted, and will no longer be the primary selection. Region can be explicitly deactivated with @kbd{C-g}. Commands that require a region (such as @kbd{C-w}) signal an error if the region is not active. Certain commands cause the region to be in its active state. The most common ones are @code{push-mark} (@key{C-SPC}) and @code{exchange-point-and-mark} (@kbd{C-x C-x}). @vindex zmacs-region-stays When @code{zmacs-regions} is @code{t}, programs can be non-intrusive on the state of the region by setting the variable @code{zmacs-region-stays} to a non-@code{nil} value. If you are writing a new Emacs command that is conceptually a ``motion'' command and should not interfere with the current highlightedness of the region, then you may set this variable. It is reset to @code{nil} after each user command is executed. @findex zmacs-activate-region When @code{zmacs-regions} is @code{t}, programs can make the region between point and mark go into the active (highlighted) state by using the function @code{zmacs-activate-region}. Only a small number of commands should ever do this. @findex zmacs-deactivate-region When @code{zmacs-regions} is @code{t}, programs can deactivate the region between point and the mark by using @code{zmacs-deactivate-region}. Note: you should not have to call this function; the command loop calls it when appropriate. @node Accumulating Text, Rectangles, Using X Selections, Top @section Accumulating Text @findex append-to-buffer @findex prepend-to-buffer @findex copy-to-buffer @findex append-to-file @cindex copying text @cindex accumulating text Usually you copy or move text by killing it and yanking it, but there are other ways that are useful for copying one block of text in many places, or for copying many scattered blocks of text into one place. If you like, you can accumulate blocks of text from scattered locations either into a buffer or into a file. The relevant commands are described here. You can also use Emacs registers for storing and accumulating text. @xref{Registers}. @table @kbd @item M-x append-to-buffer Append region to contents of specified buffer (@code{append-to-buffer}). @item M-x prepend-to-buffer Prepend region to contents of specified buffer. @item M-x copy-to-buffer Copy region into specified buffer, deleting that buffer's old contents. @item M-x insert-buffer Insert contents of specified buffer into current buffer at point. @item M-x append-to-file Append region to the end of the contents of specified file. @end table To accumulate text into a buffer, use the command @kbd{M-x append-to-buffer}, which inserts a copy of the region into the buffer @var{buffername}, at the location of point in that buffer. If there is no buffer with the given name, one is created. If you append text to a buffer that has been used for editing, the copied text goes to the place where point is. Point in that buffer is left at the end of the copied text, so successive uses of @code{append-to-buffer} accumulate the text in the specified buffer in the same order as they were copied. Strictly speaking, this command does not always append to the text already in the buffer; but if this command is the only command used to alter a buffer, it does always append to the existing text because point is always at the end. @kbd{M-x prepend-to-buffer} is similar to @code{append-to-buffer}, but point in the other buffer is left before the copied text, so successive prependings add text in reverse order. @kbd{M-x copy-to-buffer} is similar, except that any existing text in the other buffer is deleted, so the buffer is left containing just the text newly copied into it. You can retrieve the accumulated text from that buffer with @kbd{M-x insert-buffer}, which takes @var{buffername} as an argument. It inserts a copy of the text in buffer @var{buffername} into the selected buffer. You could alternatively select the other buffer for editing, perhaps moving text from it by killing or with @code{append-to-buffer}. @xref{Buffers}, for background information on buffers. Instead of accumulating text within Emacs in a buffer, you can append text directly into a file with @kbd{M-x append-to-file}, which takes @var{file-name} as an argument. It adds the text of the region to the end of the specified file. The file is changed immediately on disk. This command is normally used with files that are @i{not} being visited in Emacs. Using it on a file that Emacs is visiting can produce confusing results, because the file's text inside Emacs does not change while the file itself changes. @node Rectangles, Registers, Accumulating Text, Top @section Rectangles @cindex rectangles The rectangle commands affect rectangular areas of text: all characters between a certain pair of columns, in a certain range of lines. Commands are provided to kill rectangles, yank killed rectangles, clear them out, or delete them. Rectangle commands are useful with text in multicolumnar formats, like code with comments at the right, or for changing text into or out of such formats. To specify the rectangle a command should work on, put the mark at one corner and point at the opposite corner. The specified rectangle is called the @dfn{region-rectangle} because it is controlled about the same way the region is controlled. Remember that a given combination of point and mark values can be interpreted either as specifying a region or as specifying a rectangle; it is up to the command that uses them to choose the interpretation. @table @kbd @item M-x delete-rectangle Delete the text of the region-rectangle, moving any following text on each line leftward to the left edge of the region-rectangle. @item M-x kill-rectangle Similar, but also save the contents of the region-rectangle as the ``last killed rectangle''. @item M-x yank-rectangle Yank the last killed rectangle with its upper left corner at point. @item M-x open-rectangle Insert blank space to fill the space of the region-rectangle. The previous contents of the region-rectangle are pushed rightward. @item M-x clear-rectangle Clear the region-rectangle by replacing its contents with spaces. @end table The rectangle operations fall into two classes: commands deleting and moving rectangles, and commands for blank rectangles. @findex delete-rectangle @findex kill-rectangle There are two ways to get rid of the text in a rectangle: you can discard the text (delete it) or save it as the ``last killed'' rectangle. The commands for these two ways are @kbd{M-x delete-rectangle} and @kbd{M-x kill-rectangle}. In either case, the portion of each line that falls inside the rectangle's boundaries is deleted, causing following text (if any) on the line to move left. Note that ``killing'' a rectangle is not killing in the usual sense; the rectangle is not stored in the kill ring, but in a special place that only records the most recently killed rectangle (that is, does not append to a killed rectangle). Different yank commands have to be used and only one rectangle is stored, because yanking a rectangle is quite different from yanking linear text and yank-popping commands are difficult to make sense of. Inserting a rectangle is the opposite of deleting one. You specify where to put the upper left corner by putting point there. The rectangle's first line is inserted at point, the rectangle's second line is inserted at a point one line vertically down, and so on. The number of lines affected is determined by the height of the saved rectangle. @findex yank-rectangle To insert the last killed rectangle, type @kbd{M-x yank-rectangle}. This can be used to convert single-column lists into double-column lists; kill the second half of the list as a rectangle and then yank it beside the first line of the list. @findex open-rectangle @findex clear-rectangle There are two commands for working with blank rectangles: @kbd{M-x clear-rectangle} erases existing text, and @kbd{M-x open-rectangle} inserts a blank rectangle. Clearing a rectangle is equivalent to deleting it and then inserting a blank rectangle of the same size. Rectangles can also be copied into and out of registers. @xref{RegRect,,Rectangle Registers}. texi2html-1.82/test/xemacs_manual/sending.texi0000644000175000017500000003367011264347115023363 0ustar flichtenheldflichtenheld @node Sending Mail, Reading Mail, Picture, Top @chapter Sending Mail @cindex mail @cindex message To send a message in Emacs, start by typing the command (@kbd{C-x m}) to select and initialize the @samp{*mail*} buffer. You can then edit the text and headers of the message in the mail buffer, and type the command (@kbd{C-c C-c}) to send the message. @table @kbd @item C-x m Begin composing a message to send (@code{mail}). @item C-x 4 m Likewise, but display the message in another window (@code{mail-other-window}). @item C-c C-c In Mail mode, send the message and switch to another buffer (@code{mail-send-and-exit}). @end table @kindex C-x m @findex mail @kindex C-x 4 m @findex mail-other-window The command @kbd{C-x m} (@code{mail}) selects a buffer named @samp{*mail*} and initializes it with the skeleton of an outgoing message. @kbd{C-x 4 m} (@code{mail-other-window}) selects the @samp{*mail*} buffer in a different window, leaving the previous current buffer visible.@refill Because the buffer for mail composition is an ordinary Emacs buffer, you can switch to other buffers while in the middle of composing mail, and switch back later (or never). If you use the @kbd{C-x m} command again when you have been composing another message but have not sent it, a new mail buffer will be created; in this way, you can compose multiple messages at once. You can switch back to and complete an unsent message by using the normal buffer selection mechanisms. @kbd{C-u C-x m} is another way to switch back to a message in progress: it will search for an existing, unsent mail message buffer and select it. @menu * Format: Mail Format. Format of the mail being composed. * Headers: Mail Headers. Details of allowed mail header fields. * Mode: Mail Mode. Special commands for editing mail being composed. @end menu @node Mail Format, Mail Headers, Sending Mail, Sending Mail @section The Format of the Mail Buffer In addition to the @dfn{text} or contents, a message has @dfn{header fields}, which say who sent it, when, to whom, why, and so on. Some header fields, such as the date and sender, are created automatically after the message is sent. Others, such as the recipient names, must be specified by you in order to send the message properly. Mail mode provides a few commands to help you edit some header fields, and some are preinitialized in the buffer automatically at times. You can insert or edit any header fields using ordinary editing commands. The line in the buffer that says: @example --text follows this line-- @end example @vindex mail-header-separator @noindent is a special delimiter that separates the headers you have specified from the text. Whatever follows this line is the text of the message; the headers precede it. The delimiter line itself does not appear in the message actually sent. The text used for the delimiter line is controlled by the variable @code{mail-header-separator}. Here is an example of what the headers and text in the @samp{*mail*} buffer might look like. @example To: rms@@mc CC: mly@@mc, rg@@oz Subject: The XEmacs User's Manual --Text follows this line-- Please ignore this message. @end example @node Mail Headers, Mail Mode, Mail Format, Sending Mail @section Mail Header Fields @cindex headers (of mail message) There are several header fields you can use in the @samp{*mail*} buffer. Each header field starts with a field name at the beginning of a line, terminated by a colon. It does not matter whether you use upper or lower case in the field name. After the colon and optional whitespace comes the contents of the field. @table @samp @item To This field contains the mailing addresses of the message. @item Subject The contents of the @samp{Subject} field should be a piece of text that says what the message is about. Subject fields are useful because most mail-reading programs can provide a summary of messages, listing the subject of each message but not its text. @item CC This field contains additional mailing addresses to send the message to, but whose readers should not regard the message as addressed to them. @item BCC This field contains additional mailing addresses to send the message to, but which should not appear in the header of the message actually sent. @item FCC This field contains the name of one file (in Unix mail file format) to which a copy of the message should be appended when the message is sent. @item From Use the @samp{From} field to say who you are, when the account you are using to send the mail is not your own. The contents of the @samp{From} field should be a valid mailing address, since replies will normally go there. @item Reply-To Use the @samp{Reply-To} field to direct replies to a different address, not your own. @samp{From} and @samp{Reply-To} have the same effect on where replies go, but they convey a different meaning to the person who reads the message. @item In-Reply-To This field contains a piece of text describing a message you are replying to. Some mail systems can use the information to correlate related pieces of mail. This field is normally filled in by your mail handling package when you are replying to a message and you never need to think about it. @end table @noindent The @samp{To}, @samp{CC}, @samp{BCC} and @samp{FCC} fields can appear any number of times, to specify many places to send the message. @noindent The @samp{To}, @samp{CC}, and @samp{BCC}, fields can have continuation lines. All the lines starting with whitespace, following the line on which the field starts, are considered part of the field. For example,@refill @example To: foo@@here, this@@there, me@@gnu.cambridge.mass.usa.earth.spiral3281 @end example @noindent @vindex mail-abbrev-mailrc-file If you have a @file{~/.mailrc} file, Emacs scans it for mail aliases the first time you try to send mail in an Emacs session. Emacs expands aliases found in the @samp{To}, @samp{CC}, and @samp{BCC} fields where appropriate. You can set the variable @code{mail-abbrev-mailrc-file} to the name of the file with mail aliases. If @code{nil}, @file{~/.mailrc} is used. @cindex .mailrc file Your @file{.mailrc} file ensures that word-abbrevs are defined for each of your mail aliases when point is in a @samp{To}, @samp{CC}, @samp{BCC}, or @samp{From} field. The aliases are defined in your @file{.mailrc} file or in a file specified by the @b{MAILRC} environment variable if it exists. Your mail aliases expand any time you type a word-delimiter at the end of an abbreviation. In this version of Emacs, what you see is what you get: in contrast to some other versions, no abbreviations are expanded after you have sent the mail. This means you don't suffer the annoyance of having the system do things behind your back---if the system rewrites an address you typed, you know it immediately, instead of after the mail has been sent and it's too late to do anything about it. For example, you will never again be in trouble because you forgot to delete an old alias from your @file{.mailrc} and a new local user is given a userid which conflicts with one of your aliases. @vindex mail-abbrev-mode-regexp Your mail alias abbrevs are in effect only when point is in an appropriate header field. The mail aliases will not expand in the body of the message, or in other header fields. The default mode-specific abbrev table @code{mail-mode-abbrev-table} is used instead if defined. That means if you have been using mail-mode specific abbrevs, this code will not adversely affect you. You can control which header fields the abbrevs are used in by changing the variable @code{mail-abbrev-mode-regexp}. If auto-fill mode is on, abbrevs wrap at commas instead of at word boundaries, and header continuation lines will be properly indented. @findex mail-interactive-insert-alias You can also insert a mail alias with @code{mail-interactive-insert-alias}. This function, which is bound to @kbd{C-c C-a}, prompts you for an alias (with completion) and inserts its expansion at point. In this version of Emacs, it is possible to have lines like the following in your @file{.mailrc} file: @example alias someone "John Doe " @end example That is, if you want an address to have embedded spaces, simply surround it with double-quotes. The quotes are necessary because the format of the @file{.mailrc} file uses spaces as address delimiters. Aliases in the @file{.mailrc} file may be nested. For example, assume you define aliases like: @example alias group1 fred ethel alias group2 larry curly moe alias everybody group1 group2 @end example When you now type @samp{everybody} on the @samp{To} line, it will expand to: @example fred, ethyl, larry, curly, moe @end example Aliases may contain forward references; the alias of @samp{everybody} in the example above can precede the aliases of @samp{group1} and @samp{group2}. In this version of Emacs, you can use the @code{source} @file{.mailrc} command for reading aliases from some other file as well. Aliases may contain hyphens, as in @code{"alias foo-bar foo@@bar"}, even though word-abbrevs normally cannot contain hyphens. To read in the contents of another @file{.mailrc}-type file from Emacs, use the command @code{M-x merge-mail-aliases}. The @code{rebuild-mail-aliases} command is similar, but deletes existing aliases first. @vindex mail-alias-separator-string If you want multiple addresses separated by a string other than @samp{,} (a comma), then set the variable @code{mail-alias-separator-string} to it. This has to be a comma bracketed by whitespace if you want any kind of reasonable behavior. @vindex mail-archive-file-name If the variable @code{mail-archive-file-name} is non-@code{nil}, it should be a string naming a file. Each time you start to edit a message to send, an @samp{FCC} field is entered for that file. Unless you remove the @samp{FCC} field, every message is written into that file when it is sent. @node Mail Mode,, Mail Headers, Sending Mail @section Mail Mode The major mode used in the @samp{*mail*} buffer is Mail mode. Mail mode is similar to Text mode, but several commands are provided on the @kbd{C-c} prefix. These commands all deal specifically with editing or sending the message. @table @kbd @item C-c C-s Send the message, and leave the @samp{*mail*} buffer selected (@code{mail-send}). @item C-c C-c Send the message, and select some other buffer (@code{mail-send-and-exit}). @item C-c C-f C-t Move to the @samp{To} header field, creating one if there is none (@code{mail-to}). @item C-c C-f C-s Move to the @samp{Subject} header field, creating one if there is none (@code{mail-subject}). @item C-c C-f C-c Move to the @samp{CC} header field, creating one if there is none (@code{mail-cc}). @item C-c C-w Insert the file @file{~/.signature} at the end of the message text (@code{mail-signature}). @item C-c C-y Yank the selected message (@code{mail-yank-original}). @item C-c C-q Fill all paragraphs of yanked old messages, each individually (@code{mail-fill-yanked-message}). @item @key{button3} Pops up a menu of useful mail-mode commands. @end table @kindex C-c C-s (Mail mode) @kindex C-c C-c (Mail mode) @findex mail-send @findex mail-send-and-exit There are two ways to send a message. @kbd{C-c C-c} (@code{mail-send-and-exit}) is the usual way to send the message. It sends the message and then deletes the window (if there is another window) or switches to another buffer. It puts the @samp{*mail*} buffer at the lowest priority for automatic reselection, since you are finished with using it. @kbd{C-c C-s} (@code{mail-send}) sends the message and marks the @samp{*mail*} buffer unmodified, but leaves that buffer selected so that you can modify the message (perhaps with new recipients) and send it again. @kindex C-c C-f C-t (Mail mode) @findex mail-to @kindex C-c C-f C-s (Mail mode) @findex mail-subject @kindex C-c C-f C-c (Mail mode) @findex mail-cc Mail mode provides some other special commands that are useful for editing the headers and text of the message before you send it. There are three commands defined to move point to particular header fields, all based on the prefix @kbd{C-c C-f} (@samp{C-f} is for ``field''). They are @kbd{C-c C-f C-t} (@code{mail-to}) to move to the @samp{To} field, @kbd{C-c C-f C-s} (@code{mail-subject}) for the @samp{Subject} field, and @kbd{C-c C-f C-c} (@code{mail-cc}) for the @samp{CC} field. These fields have special motion commands because they are edited most frequently. @kindex C-c C-w (Mail mode) @findex mail-signature @kbd{C-c C-w} (@code{mail-signature}) adds a standard piece of text at the end of the message to say more about who you are. The text comes from the file @file{.signature} in your home directory. @kindex C-c C-y (Mail mode) @findex mail-yank-original When you use an Rmail command to send mail from the Rmail mail reader, you can use @kbd{C-c C-y} @code{mail-yank-original} inside the @samp{*mail*} buffer to insert the text of the message you are replying to. Normally Rmail indents each line of that message four spaces and eliminates most header fields. A numeric argument specifies the number of spaces to indent. An argument of just @kbd{C-u} says not to indent at all and not to eliminate anything. @kbd{C-c C-y} always uses the current message from the @samp{RMAIL} buffer, so you can insert several old messages by selecting one in @samp{RMAIL}, switching to @samp{*mail*} and yanking it, then switching back to @samp{RMAIL} to select another.@refill @kindex C-c C-q (Mail mode) @findex mail-fill-yanked-message After using @kbd{C-c C-y}, you can use the command @kbd{C-c C-q} (@code{mail-fill-yanked-message}) to fill the paragraphs of the yanked old message or messages. One use of @kbd{C-c C-q} fills all such paragraphs, each one separately. Clicking the right mouse button in a mail buffer pops up a menu of the above commands, for easy access. @vindex mail-mode-hook Turning on Mail mode (which @kbd{C-x m} does automatically) calls the value of @code{text-mode-hook}, if it is not void or @code{nil}, and then calls the value of @code{mail-mode-hook} if that is not void or @code{nil}. texi2html-1.82/test/xemacs_manual/menus.texi0000644000175000017500000005221511264347115023057 0ustar flichtenheldflichtenheld @node Pull-down Menus, Entering Emacs, Keystrokes, Top @comment node-name, next, previous, up @section XEmacs Pull-down Menus If you are running XEmacs under X, a menu bar on top of the Emacs frame provides access to pull-down menus of file, edit, and help-related commands. The menus provide convenient shortcuts and an easy interface for novice users. They do not provide additions to the functionality available via key commands; you can still invoke commands from the keyboard as in previous versions of Emacs. @table @b @item File Perform file and buffer-related operations, such as opening and closing files, saving and printing buffers, as well as exiting Emacs. @cindex File menu @item Edit Perform standard editing operations, such as cutting, copying, pasting, and killing selected text. @cindex Edit menu @c #### The Mule menu needs to be documented, but this is not the place @c for it since Ben just moved it. @item Apps Access to sub-applications implemented within XEmacs, such as the mail reader, the World Wide Web browser, the spell-checker, and the calendar program. @cindex Apps menu @item Options Control various options regarding the way XEmacs works, such as controlling which elements of the frame are visible, selecting the fonts to be used for text, specifying whether searches are case-sensitive, etc. @cindex Options menu @item Buffers Present a menu of buffers for selection as well as the option to display a buffer list. @cindex Buffers menu @item Tools Perform various actions designed to automate software development and similar technical work, such as searching through many files, compiling a program, and comparing or merging two or three files. @cindex Tools menu @item Help Access to Emacs Info. @cindex Help menu @end table @cindex Pull-down Menus @cindex menus There are two ways of selecting an item from a pull-down menu: @itemize @bullet @item Select an item in the menu bar by moving the cursor over it and click the left mouse-button. Then move the cursor over the menu item you want to choose and click left again. @item Select an item in the menu bar by moving the cursor over it and click and hold the left mouse-button. With the mouse-button depressed, move the cursor over the menu item you want, then release it to make your selection. @end itemize If a command in the pull-down menu is not applicable in a given situation, the command is disabled and its name appears faded. You cannot invoke items that are faded. For example, many commands on the @b{Edit} menu appear faded until you select text on which they are to operate; after you select a block of text, edit commands are enabled. @xref{Mouse Selection}, for information on using the mouse to select text. @xref{Using X Selections}, for related information. There are also @kbd{M-x} equivalents for each menu item. To find the equivalent for any left-button menu item, do the following: @enumerate @item Type @kbd{C-h k} to get the @code{Describe Key} prompt. @item Select the menu item and click. @end enumerate Emacs displays the function associated with the menu item in a separate window, usually together with some documentation. @menu * File Menu:: Items on the File menu. * Edit Menu:: Items on the Edit menu. * Apps Menu:: Items on the Apps menu. * Options Menu:: Items on the Options menu. * Buffers Menu:: Information about the Buffers menu. * Tools Menu:: Items on the Tools menu. * Help Menu:: Items on the Help menu. * Menu Customization:: Adding and removing menu items and related operations. @end menu @node File Menu @subsection The File Menu @cindex File menu The @b{File} menu bar item contains the items @b{New Frame}, @b{Open File...}, @b{Save Buffer}, @b{Save Buffer As...}, @b{Revert Buffer}, @b{Print Buffer}, @b{Delete Frame}, @b{Kill Buffer} and @b{Exit Emacs} on the pull-down menu. If you select a menu item, Emacs executes the equivalent command. @cindex Open File, New Frame... menu item @cindex Open File... menu item @cindex Insert File... menu item @cindex Save Buffer menu item @cindex Save Buffer As ... menu item @cindex Revert Buffer menu item @cindex Kill Buffer menu item @cindex Print Buffer menu item @cindex New Frame menu item @cindex Delete Frame menu item @cindex Split Frame @cindex Un-split (Keep This) @cindex Un-split (Keep Others) @cindex Exit Emacs menu item @table @b @item Open File, New Frame... Prompts you for a filename and loads that file into a new buffer in a new Emacs frame, that is, a new X window running under the same Emacs process. You can remove the frame using the @b{Delete Frame} menu item. When you remove the last frame, you exit Emacs and are prompted for confirmation. @refill @item Open File... Prompts you for a filename and loads that file into a new buffer. @b{Open File...} is equivalent to the Emacs command @code{find-file} (@kbd{C-x C-f}).@refill @item Insert File... Prompts you for a filename and inserts the contents of that file into the current buffer. The file associated with the current buffer is not changed by this command. This is equivalent to the Emacs command @code{insert-file} (@kbd{C-x i}).@refill @item Save Buffer Writes and saves the current Emacs buffer as the latest version of the current visited file. @b{Save Buffer} is equivalent to the Emacs command @code{save-buffer} (@kbd{C-x C-s}).@refill @item Save Buffer As... Writes and saves the current Emacs buffer to the filename you specify. @b{Save Buffer As...} is equivalent to the Emacs command @code{write-file} (@kbd{C-x C-w}).@refill @item Revert Buffer Restores the last saved version of the file to the current buffer. When you edit a buffer containing a text file, you must save the buffer before your changes become effective. Use @b{Revert Buffer} if you do not want to keep the changes you have made in the buffer. @b{Revert Buffer} is equivalent to the Emacs command @code{revert-file} (@kbd{M-x revert-buffer}).@refill @item Kill Buffer Kills the current buffer, prompting you first if there are unsaved changes. This is roughly equivalent to the Emacs command @code{kill-buffer} (@kbd{C-x k}), except that @code{kill-buffer} prompts for the name of a buffer to kill. @refill @item Print Buffer Prints a hardcopy of the current buffer. Equivalent to the Emacs command @code{print-buffer} (@kbd{M-x print-buffer}).@refill @item New Frame Creates a new Emacs frame displaying the @code{*scratch*} buffer. This is like the @b{Open File, New Frame...} menu item, except that it does not prompt for or load a file.@refill @item Delete Frame Allows you to close all but one of the frames created by @b{New Frame}. If you created several Emacs frames belonging to the same Emacs process, you can close all but one of them. When you attempt to close the last frame, Emacs informs you that you are attempting to delete the last frame. You have to choose @b{Exit Emacs} for that.@refill @item Split Frame Divides the current window on the current frame into two equal-sized windows, both displaying the same buffer. Equivalent to the Emacs command @code{split-window-vertically} (@kbd{C-x 2}).@refill @item Un-split (Keep This) If the frame is divided into multiple windows, this removes all windows other than the selected one. Equivalent to the Emacs command @code{delete-other-windows} (@kbd{C-x 1}).@refill @item Un-split (Keep Others) If the frame is divided into multiple windows, this removes the selected window from the frame, giving the space back to one of the other windows. Equivalent to the Emacs command @code{delete-window} (@kbd{C-x 0}).@refill @item Exit Emacs Shuts down (kills) the Emacs process. Equivalent to the Emacs command @code{save-buffers-kill-emacs} (@kbd{C-x C-c}). Before killing the Emacs process, the system asks which unsaved buffers to save by going through the list of all buffers in that Emacs process.@refill @end table @node Edit Menu @subsection The Edit Menu @cindex Edit menu The @b{Edit} pull-down menu contains the @b{Undo}, @b{Cut}, @b{Copy}, @b{Paste}, and @b{Clear} menu items. When you select a menu item, Emacs executes the equivalent command. Most commands on the @b{Edit} menu work on a block of text, the X selection. They appear faded until you select a block of text (activate a region) with the mouse. @xref{Using X Selections}, @pxref{Killing}, and @pxref{Yanking} for more information.@refill @c **** zmacs-regions is on by default these days - jwz @c @c Note: By default, you can use the @b{Edit} menu items on the region between @c point and the mark as well as regions selected with the mouse. To change @c this behavior, set the variable @code{zmacs-regions} to @c @code{t}. @xref{Active Regions} for more information. @cindex Undo menu item @cindex Cut menu item @cindex Copy menu item @cindex Paste menu item @cindex Clear menu item @cindex Start Macro Recording menu item @cindex End Macro Recording menu item @cindex Execute Last Macro menu item @table @b @item Undo Undoes the previous command. @b{Undo} is equivalent to the Emacs command @code{undo} (@kbd{C-x u}).@refill @item Cut Removes the selected text block from the current buffer, makes it the X clipboard selection, and places it in the kill ring. Before executing this command, you have to select a region using Emacs region selection commands or with the mouse.@refill @item Copy Makes a selected text block the X clipboard selection, and places it in the kill ring. You can select text using one of the Emacs region selection commands or by selecting a text region with the mouse.@refill @item Paste Inserts the current value of the X clipboard selection in the current buffer. Note that this is not necessarily the same as the Emacs @code{yank} command, because the Emacs kill ring and the X clipboard selection are not the same thing. You can paste in text you have placed in the clipboard using @b{Copy} or @b{Cut}. You can also use @b{Paste} to insert text that was pasted into the clipboard from other applications. @item Clear Removes the selected text block from the current buffer but does not place it in the kill ring or the X clipboard selection. @item Start Macro Recording After selecting this, Emacs will remember every keystroke you type until @b{End Macro Recording} is selected. This is the same as the Emacs command @code{start-kbd-macro} (@kbd{C-x (}). @item End Macro Recording Selecting this tells emacs to stop remembering your keystrokes. This is the same as the Emacs command @code{end-kbd-macro} (@kbd{C-x )}). @item Execute Last Macro Selecting this item will cause emacs to re-interpret all of the keystrokes which were saved between selections of the @b{Start Macro Recording} and @b{End Macro Recording} menu items. This is the same as the Emacs command @code{call-last-kbd-macro} (@kbd{C-x e}). @end table @node Apps Menu @subsection The Apps Menu @cindex Apps menu The @b{Apps} pull-down menu contains the @b{Read Mail (VM)...}, @b{Read Mail (MH)...}, @b{Send Mail...}, @b{Usenet News}, @b{Browse the Web}, @b{Gopher}, @b{Spell-Check Buffer} and @b{Emulate VI} menu items, and the @b{Calendar} and @b{Games} sub-menus. When you select a menu item, Emacs executes the equivalent command. For some of the menu items, there are sub-menus which you will need to select. @node Options Menu @subsection The Options Menu @cindex Options menu The @b{Options} pull-down menu contains the @b{Read Only}, @b{Case Sensitive Search}, @b{Overstrike}, @b{Auto Delete Selection}, @b{Teach Extended Commands}, @b{Syntax Highlighting}, @b{Paren Highlighting}, @b{Font}, @b{Size}, @b{Weight}, @b{Buffers Menu Length...}, @b{Buffers Sub-Menus} and @b{Save Options} menu items. When you select a menu item, Emacs executes the equivalent command. For some of the menu items, there are sub-menus which you will need to select. @cindex Read Only menu item @cindex Case Sensitive Search menu item @cindex Overstrike menu item @cindex Auto Delete Selection menu item @cindex Teach Extended Commands menu item @cindex Syntax Highlighting menu item @cindex Paren Highlighting menu item @cindex Font menu item @cindex Size menu item @cindex Weight menu item @cindex Buffers Menu Length... menu item @cindex Buffers Sub-Menus menu item @cindex Save Options @table @b @item Read Only Selecting this item will cause the buffer to visit the file in a read-only mode. Changes to the file will not be allowed. This is equivalent to the Emacs command @code{toggle-read-only} (@kbd{C-x C-q}). @item Case Sensitive Search Selecting this item will cause searches to be case-sensitive. If its not selected then searches will ignore case. This option is local to the buffer. @item Overstrike After selecting this item, when you type letters they will replace existing text on a one-to-one basis, rather than pushing it to the right. At the end of a line, such characters extend the line. Before a tab, such characters insert until the tab is filled in. This is the same as Emacs command @code{quoted-insert} (@kbd{C-q}). @item Auto Delete Selection Selecting this item will cause automatic deletion of the selected region. The typed text will replace the selection if the selection is active (i.e. if its highlighted). If the option is not selected then the typed text is just inserted at the point. @item Teach Extended Commands After you select this item, any time you execute a command with @kbd{M-x}which has a shorter keybinding, you will be shown the alternate binding before the command executes. @item Syntax Highlighting You can customize your init file to include the font-lock mode so that when you select this item, the comments will be displayed in one face, strings in another, reserved words in another, and so on. @xref{Init File}. When @b{Fonts} is selected, different parts of the program will appear in different Fonts. When @b{Colors} is selected, then the program will be displayed in different colors. Selecting @b{None} causes the program to appear in just one Font and Color. Selecting @b{Less} resets the Fonts and Colors to a fast, minimal set of decorations. Selecting @b{More} resets the Fonts and Colors to a larger set of decorations. For example, if @b{Less} is selected (which is the default setting) then you might have all comments in green color. Whereas, if @b{More} is selected then a function name in the comments themselves might appear in a different Color or Font.@refill @item Paren Highlighting After selecting @b{Blink} from this item, if you place the cursor on a parenthesis, the matching parenthesis will blink. If you select @b{Highlight} and place the cursor on a parenthesis, the whole expression of the parenthesis under the cursor will be highlighted. Selecting @b{None} will turn off the options (regarding @b{Paren Highlighting}) which you had selected earlier.@refill @item Font You can select any Font for your program by choosing from one of the available Fonts. @item Size You can select any size ranging from @b{2} to @b{24} by selecting the appropriate option.@refill @item Weight You can choose either @b{Bold} or @b{Medium} for the weight.@refill @item Buffers Menu Length... Prompts you for the number of buffers to display. Then it will display that number of most recently selected buffers. @item Buffers Sub-Menus After selection of this item the Buffers menu will contain several commands, as submenus of each buffer line. If this item is unselected, then there are no submenus for each buffer line, the only command available will be selecting that buffer. @item Save Options Selecting this item will save the current settings of your Options menu to your init file. @xref{Init File}. @end table @node Buffers Menu @subsection The Buffers Menu @cindex Buffers menu The @b{Buffers} menu provides a selection of up to ten buffers and the item @b{List All Buffers}, which provides a Buffer List. @xref{List Buffers}, for more information. @node Tools Menu @subsection The Tools Menu @cindex Tools menu The @b{Tools} pull-down menu contains the @b{Grep...}, @b{Compile...}, @b{Shell Command...}, @b{Shell Command on Region...}, @b{Debug(GDB)...} and @b{Debug(DBX)...} menu items, and the @b{Compare}, @b{Merge}, @b{Apply Patch} and @b{Tags} sub-menus. When you select a menu item, Emacs executes the equivalent command. For some of the menu items, there are sub-menus which you will need to select. @node Help Menu @subsection The Help Menu @cindex Help menu The Help Menu gives you access to Emacs Info and provides a menu equivalent for each of the choices you have when using @kbd{C-h}. @xref{Help}, for more information. The Help menu also gives access to UNIX online manual pages via the @b{UNIX Manual Page} option. @node Menu Customization @subsection Customizing XEmacs Menus You can customize any of the pull-down menus by adding or removing menu items and disabling or enabling existing menu items. The following functions are available: @table @kbd @item add-menu: (@var{menu-path} @var{menu-name} @var{menu-items} &optional @var{before}) Add a menu to the menu bar or one of its submenus. @item add-menu-item: (@var{menu-path} @var{item-name} @var{function} @var{enabled-p} &optional @var{before}) Add a menu item to a menu, creating the menu first if necessary. @item delete-menu-item: (@var{path}) Remove the menu item defined by @var{path} from the menu hierarchy. @item disable-menu-item: (@var{path}) Disable the specified menu item. @item enable-menu-item: (@var{path}) Enable the specified previously disabled menu item. @item relabel-menu-item: (@var{path} @var{new-name}) Change the string of the menu item specified by @var{path} to @var{new-name}. @end table @findex add-menu @cindex adding menus Use the function @code{add-menu} to add a new menu or submenu. If a menu or submenu of the given name exists already, it is changed. @var{menu-path} identifies the menu under which the new menu should be inserted. It is a list of strings; for example, @code{("File")} names the top-level @b{File} menu. @code{("File" "Foo")} names a hypothetical submenu of @b{File}. If @var{menu-path} is @code{nil}, the menu is added to the menu bar itself. @var{menu-name} is the string naming the menu to be added. @var{menu-items} is a list of menu item descriptions. Each menu item should be a vector of three elements: @itemize @bullet @item A string, which is the name of the menu item @item A symbol naming a command, or a form to evaluate @item @code{t} or @code{nil} to indicate whether the item is selectable @end itemize The optional argument @var{before} is the name of the menu before which the new menu or submenu should be added. If the menu is already present, it is not moved. @findex add-menu-item @cindex adding menu items The function @code{add-menu-item} adds a menu item to the specified menu, creating the menu first if necessary. If the named item already exists, the menu remains unchanged. @var{menu-path} identifies the menu into which the new menu item should be inserted. It is a list of strings; for example, @code{("File")} names the top-level @b{File} menu. @code{("File" "Foo")} names a hypothetical submenu of @b{File}. @var{item-name} is the string naming the menu item to add. @var{function} is the command to invoke when this menu item is selected. If it is a symbol, it is invoked with @code{call-interactively}, in the same way that functions bound to keys are invoked. If it is a list, the list is simply evaluated. @var{enabled-p} controls whether the item is selectable or not. It should be @code{t}, @code{nil}, or a form to evaluate to decide. This form will be evaluated just before the menu is displayed, and the menu item will be selectable if that form returns non-@code{nil}. For example, to make the @code{rename-file} command available from the @b{File} menu, use the following code: @example (add-menu-item '("File") "Rename File" 'rename-file t) @end example To add a submenu of file management commands using a @b{File Management} item, use the following code: @example (add-menu-item '("File" "File Management") "Copy File" 'copy-file t) (add-menu-item '("File" "File Management") "Delete File" 'delete-file t) (add-menu-item '("File" "File Management") "Rename File" 'rename-file t) @end example The optional @var{before} argument is the name of a menu item before which the new item should be added. If the item is already present, it is not moved. @findex delete-menu-item @cindex deleting menu items To remove a specified menu item from the menu hierarchy, use @code{delete-menu-item}. @var{path} is a list of strings that identify the position of the menu item in the menu hierarchy. @code{("File" "Save")} means the menu item called @b{Save} under the top level @b{File} menu. @code{("Menu" "Foo" "Item")} means the menu item called @b{Item} under the @b{Foo} submenu of @b{Menu}. @findex disable-menu-item @findex enable-menu-item @cindex enabling menu items @cindex disabling menu items To disable a menu item, use @code{disable-menu-item}. The disabled menu item is grayed and can no longer be selected. To make the item selectable again, use @code{enable-menu-item}. @code{disable-menu-item} and @code{enable-menu-item} both have the argument @var{path}. @findex relabel-menu-item @cindex changing menu items To change the string of the specified menu item, use @code{relabel-menu-item}. This function also takes the argument @var{path}. @var{new-name} is the string to which the menu item will be changed. texi2html-1.82/test/xemacs_manual/mouse.texi0000644000175000017500000001512711264347115023061 0ustar flichtenheldflichtenheld @node Mouse Selection, Additional Mouse Operations, Mark, Top @comment node-name, next, previous, up @section Selecting Text with the Mouse @cindex mouse selection @cindex pointer shapes If you are using XEmacs under X, you can use the mouse pointer to select text. (The normal mouse pointer is an I-beam, the same pointer that @code{xterm} uses.) @vindex modeline-pointer-glyph @vindex nontext-pointer-glyph @vindex text-pointer-glyph The glyph variable @code{text-pointer-glyph} controls the shape of the mouse pointer when over text. You can also control the shape of the mouse pointer when over nontext using @code{nontext-pointer-glyph}, and the shape of the mouse pointer when over the modeline using @code{modeline-pointer-glyph}. (Remember, you should use @code{set-glyph-image}, not @code{setq}, to set one of these variables.) @cindex pointer face If you want to get fancy, you can set the foreground and background colors of the mouse pointer by setting the @code{pointer} face. There are two ways to select a region of text with the mouse: To select a word in text, double-click with the left mouse button while the mouse cursor is over the word. The word is highlighted when selected. On monochrome monitors, a stippled background indicates that a region of text has been highlighted. On color monitors, a color background indicates highlighted text. You can triple-click to select whole lines. To select an arbitrary region of text: @enumerate @item Move the mouse cursor over the character at the beginning of the region of text you want to select. @item Press and hold the left mouse button. @item While holding the left mouse button down, drag the cursor to the character at the end of the region of text you want to select. @item Release the left mouse button. @end enumerate The selected region of text is highlighted. Once a region of text is selected, it becomes the primary X selection (@pxref{Using X Selections}) as well as the Emacs selected region. You can paste it into other X applications and use the options from the @b{Edit} pull-down menu on it. Since it is also the Emacs region, you can use Emacs region commands on it. @node Additional Mouse Operations, Killing, Mouse Selection, Top @section Additional Mouse Operations @cindex mouse operations XEmacs also provides the following mouse functions. Most of these are not bound to mouse gestures by default, but they are provided for your customization pleasure. For example, if you wanted @kbd{shift-left} (that is, holding down the @key{Shift} key and clicking the left mouse button) to delete the character at which you are pointing, then you could do this: @example (global-set-key '(shift button1) 'mouse-del-char) @end example @findex mouse-del-char @findex mouse-delete-window @findex mouse-keep-one-window @findex mouse-kill-line @findex mouse-line-length @findex mouse-scroll @findex mouse-select @findex mouse-select-and-split @findex mouse-set-mark @findex mouse-set-point @findex mouse-track @findex mouse-track-adjust @findex mouse-track-and-copy-to-cutbuffer @findex mouse-track-delete-and-insert @table @kbd @item mouse-del-char Delete the character pointed to by the mouse. @item mouse-delete-window Delete the Emacs window that the mouse is on. @item mouse-keep-one-window Select the Emacs window that the mouse is on, then delete all other windows on this frame. @item mouse-kill-line Kill the line pointed to by the mouse. @item mouse-line-length Print the length of the line indicated by the pointer. @item mouse-scroll Scroll point to the mouse position. @item mouse-select Select the Emacs window the mouse is on. @item mouse-select-and-split Select the Emacs window mouse is on, then split it vertically in half. @item mouse-set-mark Select the Emacs window the mouse is on and set the mark at the mouse position. Display the cursor at that position for a second. @item mouse-set-point Select the Emacs window that the mouse is on and move point to the mouse position. @item mouse-track Make a selection with the mouse. This is the default binding of the left mouse button (@key{button1}). @item mouse-track-adjust Extend the existing selection. This is the default binding of @key{Shift-button1}. @item mouse-track-and-copy-to-cutbuffer Make a selection like @code{mouse-track}, but also copy it to the cut buffer. @item mouse-track-delete-and-insert Make a selection with the mouse and insert it at point. This is the default binding of @key{control-shift-button1}. @item mouse-track-insert Make a selection with the mouse and insert it at point. This is the default binding of @key{control-button1}. @item mouse-window-to-region Narrow a window to the region between the cursor and the mouse pointer. @end table The @kbd{M-x mouse-track} command should be bound to a mouse button. If you click-and-drag, the selection is set to the region between the point of the initial click and the point at which you release the button. These positions do not need to be ordered. If you click-and-release without moving the mouse, the point is moved, and the selection is disowned (there will be no selection owner.) The mark will be set to the previous position of point. If you double-click, the selection will extend by symbols instead of by characters. If you triple-click, the selection will extend by lines. If you drag the mouse off the top or bottom of the window, you can select pieces of text that are larger than the visible part of the buffer; the buffer will scroll as necessary. The selected text becomes the current X selection, and is also copied to the top of the kill ring. Point will be left at the position at which you released the button and the mark will be left at the initial click position. Bind a mouse click to @kbd{mouse-track-and-copy-to-cutbuffer} to copy selections to the cut buffer. (See also the @code{mouse-track-adjust} command, on @kbd{Shift-button1}.) The @kbd{M-x mouse-track-adjust} command should be bound to a mouse button. The selection will be enlarged or shrunk so that the point of the mouse click is one of its endpoints. This is only meaningful after the @code{mouse-track} command (@key{button1}) has been executed. The @kbd{M-x mouse-track-delete-and-insert} command is exactly the same as the @code{mouse-track} command on @key{button1}, except that point is not moved; the selected text is immediately inserted after being selected; and the text of the selection is deleted. The @kbd{M-x mouse-track-insert} command is exactly the same as the @code{mouse-track} command on @key{button1}, except that point is not moved; the selected text is immediately inserted after being selected; and the selection is immediately disowned afterwards. texi2html-1.82/test/xemacs_manual/Makefile.am0000644000175000017500000000134311264347115023065 0ustar flichtenheldflichtenheldEXTRA_DIST = \ abbrevs.texi entering.texi keystrokes.texi mule.texi search.texi \ basic.texi files.texi killing.texi m-x.texi sending.texi \ buffers.texi fixit.texi major.texi new.texi startup.texi \ building.texi frame.texi mark.texi packages.texi text.texi \ calendar.texi glossary.texi menus.texi picture.texi trouble.texi \ cmdargs.texi gnu.texi mini.texi programs.texi undo.texi \ custom.texi help.texi misc.texi reading.texi windows.texi \ display.texi indent.texi mouse.texi regs.texi xemacs.texi \ tests.txt #res DISTCLEANFILES = l2h_tmp_dir.init tests.log tests.out distclean-local: rm -rf out diffs texi2html-1.82/test/xemacs_manual/reading.texi0000644000175000017500000000302411264347115023333 0ustar flichtenheldflichtenheld @node Reading Mail, Calendar/Diary, Sending Mail, Top @chapter Reading Mail @cindex mail @cindex message XEmacs provides three separate mail-reading packages. Each one comes with its own manual, which is included standard with the XEmacs distribution. The recommended mail-reading package for new users is VM. VM works with standard Unix-mail-format folders and was designed as a replacement for the older Rmail. XEmacs also provides a sophisticated and comfortable front-end to the MH mail-processing system, called @samp{mh-e}. Unlike in other mail programs, folders in MH are stored as file-system directories, with each message occupying one (numbered) file. This facilitates working with mail using shell commands, and many other features of MH are also designed to integrate well with the shell and with shell scripts. Keep in mind, however, that in order to use mh-e you must have the MH mail-processing system installed on your computer. Finally, XEmacs provides the Rmail package. Rmail is (currently) the only mail reading package distributed with FSF GNU Emacs, and is powerful in its own right. However, it stores mail folders in a special format called @samp{Babyl}, that is incompatible with all other frequently-used mail programs. A utility program is provided for converting Babyl folders to standard Unix-mail format; however, unless you already have mail in Babyl-format folders, you should consider using VM or mh-e instead. (If at times you have to use FSF Emacs, it is not hard to obtain and install VM for that editor.) texi2html-1.82/test/xemacs_manual/abbrevs.texi0000644000175000017500000003224011264347115023350 0ustar flichtenheldflichtenheld @node Abbrevs, Picture, Running, Top @chapter Abbrevs @cindex abbrevs @cindex expansion (of abbrevs) An @dfn{abbrev} is a word which @dfn{expands} into some different text. Abbrevs are defined by the user to expand in specific ways. For example, you might define @samp{foo} as an abbrev expanding to @samp{find outer otter}. With this abbrev defined, you would be able to get @samp{find outer otter } into the buffer by typing @kbd{f o o @key{SPC}}. @findex abbrev-mode @vindex abbrev-mode Abbrevs expand only when Abbrev mode (a minor mode) is enabled. Disabling Abbrev mode does not cause abbrev definitions to be discarded, but they do not expand until Abbrev mode is enabled again. The command @kbd{M-x abbrev-mode} toggles Abbrev mode; with a numeric argument, it turns Abbrev mode on if the argument is positive, off otherwise. @xref{Minor Modes}. @code{abbrev-mode} is also a variable; Abbrev mode is on when the variable is non-@code{nil}. The variable @code{abbrev-mode} automatically becomes local to the current buffer when it is set. Abbrev definitions can be @dfn{mode-specific}---active only in one major mode. Abbrevs can also have @dfn{global} definitions that are active in all major modes. The same abbrev can have a global definition and various mode-specific definitions for different major modes. A mode-specific definition for the current major mode overrides a global definition. You can define Abbrevs interactively during an editing session. You can also save lists of abbrev definitions in files and reload them in later sessions. Some users keep extensive lists of abbrevs that they load in every session. A second kind of abbreviation facility is called the @dfn{dynamic expansion}. Dynamic abbrev expansion happens only when you give an explicit command and the result of the expansion depends only on the current contents of the buffer. @xref{Dynamic Abbrevs}. @menu * Defining Abbrevs:: Defining an abbrev, so it will expand when typed. * Expanding Abbrevs:: Controlling expansion: prefixes, canceling expansion. * Editing Abbrevs:: Viewing or editing the entire list of defined abbrevs. * Saving Abbrevs:: Saving the entire list of abbrevs for another session. * Dynamic Abbrevs:: Abbreviations for words already in the buffer. @end menu @node Defining Abbrevs, Expanding Abbrevs, Abbrevs, Abbrevs @section Defining Abbrevs @table @kbd @item C-x a g Define an abbrev to expand into some text before point (@code{add-global-abbrev}). @item C-x a l Similar, but define an abbrev available only in the current major mode (@code{add-mode-abbrev}). @item C-x a i g Define a word in the buffer as an abbrev (@code{inverse-add-global-abbrev}). @item C-x a i l Define a word in the buffer as a mode-specific abbrev (@code{inverse-add-mode-abbrev}). @item M-x kill-all-abbrevs After this command, no abbrev definitions remain in effect. @end table @kindex C-x a g @findex add-global-abbrev The usual way to define an abbrev is to enter the text you want the abbrev to expand to, position point after it, and type @kbd{C-x a g} (@code{add-global-abbrev}). This reads the abbrev itself using the minibuffer, and then defines it as an abbrev for one or more words before point. Use a numeric argument to say how many words before point should be taken as the expansion. For example, to define the abbrev @samp{foo} as in the example above, insert the text @samp{find outer otter}, then type @*@kbd{C-u 3 C-x a g f o o @key{RET}}. An argument of zero to @kbd{C-x a g} means to use the contents of the region as the expansion of the abbrev being defined. @kindex C-x a l @findex add-mode-abbrev The command @kbd{C-x a l} (@code{add-mode-abbrev}) is similar, but defines a mode-specific abbrev. Mode-specific abbrevs are active only in a particular major mode. @kbd{C-x a l} defines an abbrev for the major mode in effect at the time @kbd{C-x a l} is typed. The arguments work the same way they do for @kbd{C-x a g}. @kindex C-x a i g @findex inverse-add-global-abbrev @kindex C-x a i l @findex inverse-add-mode-abbrev If the text of an abbrev you want is already in the buffer instead of the expansion, use command @kbd{C-x a i g} (@code{inverse-add-global-abbrev}) instead of @kbd{C-x a g}, or use @kbd{C-x a i l} (@code{inverse-add-mode-abbrev}) instead of @kbd{C-x a l}. These commands are called ``inverse'' because they invert the meaning of the argument found in the buffer and the argument read using the minibuffer.@refill To change the definition of an abbrev, just add the new definition. You will be asked to confirm if the abbrev has a prior definition. To remove an abbrev definition, give a negative argument to @kbd{C-x a g} or @kbd{C-x a l}. You must choose the command to specify whether to kill a global definition or a mode-specific definition for the current mode, since those two definitions are independent for one abbrev. @findex kill-all-abbrevs @kbd{M-x kill-all-abbrevs} removes all existing abbrev definitions. @node Expanding Abbrevs, Editing Abbrevs, Defining Abbrevs, Abbrevs @section Controlling Abbrev Expansion An abbrev expands whenever it is in a buffer just before point and you type a self-inserting punctuation character (@key{SPC}, comma, etc.@:). Most often an abbrev is used by inserting the abbrev followed by punctuation. @vindex abbrev-all-caps Abbrev expansion preserves case; thus, @samp{foo} expands into @samp{find outer otter}, @samp{Foo} into @samp{Find outer otter}, and @samp{FOO} into @samp{FIND OUTER OTTER} or @samp{Find Outer Otter} according to the variable @code{abbrev-all-caps} (a non-@code{nil} value chooses the first of the two expansions).@refill Two commands are available to control abbrev expansion: @table @kbd @item M-' Separate a prefix from a following abbrev to be expanded (@code{abbrev-prefix-mark}). @item C-x a e @findex expand-abbrev Expand the abbrev before point (@code{expand-abbrev}). This is effective even when Abbrev mode is not enabled. @item M-x unexpand-abbrev Undo last abbrev expansion. @item M-x expand-region-abbrevs Expand some or all abbrevs found in the region. @end table @kindex M-' @findex abbrev-prefix-mark You may wish to expand an abbrev with a prefix attached. For example, if @samp{cnst} expands into @samp{construction}, you may want to use it to enter @samp{reconstruction}. It does not work to type @kbd{recnst}, because that is not necessarily a defined abbrev. Instead, you can use the command @kbd{M-'} (@code{abbrev-prefix-mark}) between the prefix @samp{re} and the abbrev @samp{cnst}. First, insert @samp{re}. Then type @kbd{M-'}; this inserts a minus sign in the buffer to indicate that it has done its work. Then insert the abbrev @samp{cnst}. The buffer now contains @samp{re-cnst}. Now insert a punctuation character to expand the abbrev @samp{cnst} into @samp{construction}. The minus sign is deleted at this point by @kbd{M-'}. The resulting text is the desired @samp{reconstruction}.@refill If you actually want the text of the abbrev in the buffer, rather than its expansion, insert the following punctuation with @kbd{C-q}. Thus, @kbd{foo C-q -} leaves @samp{foo-} in the buffer. @findex unexpand-abbrev If you expand an abbrev by mistake, you can undo the expansion (replace the expansion by the original abbrev text) with @kbd{M-x unexpand-abbrev}. You can also use @kbd{C-_} (@code{undo}) to undo the expansion; but that will first undo the insertion of the punctuation character. @findex expand-region-abbrevs @kbd{M-x expand-region-abbrevs} searches through the region for defined abbrevs, and offers to replace each one it finds with its expansion. This command is useful if you have typed text using abbrevs but forgot to turn on Abbrev mode first. It may also be useful together with a special set of abbrev definitions for making several global replacements at once. The command is effective even if Abbrev mode is not enabled. @node Editing Abbrevs, Saving Abbrevs, Expanding Abbrevs, Abbrevs @section Examining and Editing Abbrevs @table @kbd @item M-x list-abbrevs Print a list of all abbrev definitions. @item M-x edit-abbrevs Edit a list of abbrevs; you can add, alter, or remove definitions. @end table @findex list-abbrevs The output from @kbd{M-x list-abbrevs} looks like this: @example (lisp-mode-abbrev-table) "dk" 0 "define-key" (global-abbrev-table) "dfn" 0 "definition" @end example @noindent (Some blank lines of no semantic significance, and some other abbrev tables, have been omitted.) A line containing a name in parentheses is the header for abbrevs in a particular abbrev table; @code{global-abbrev-table} contains all the global abbrevs, and the other abbrev tables that are named after major modes contain the mode-specific abbrevs. Within each abbrev table, each non-blank line defines one abbrev. The word at the beginning is the abbrev. The number that appears is the number of times the abbrev has been expanded. Emacs keeps track of this to help you see which abbrevs you actually use, in case you want to eliminate those that you don't use often. The string at the end of the line is the expansion. @findex edit-abbrevs @kindex C-c C-c (Edit Abbrevs) @findex edit-abbrevs-redefine @kbd{M-x edit-abbrevs} allows you to add, change or kill abbrev definitions by editing a list of them in an Emacs buffer. The list has the format described above. The buffer of abbrevs is called @samp{*Abbrevs*}, and is in Edit-Abbrevs mode. This mode redefines the key @kbd{C-c C-c} to install the abbrev definitions as specified in the buffer. The @code{edit-abbrevs-redefine} command does this. Any abbrevs not described in the buffer are eliminated when this is done. @code{edit-abbrevs} is actually the same as @code{list-abbrevs}, except that it selects the buffer @samp{*Abbrevs*} whereas @code{list-abbrevs} merely displays it in another window. @node Saving Abbrevs, Dynamic Abbrevs, Editing Abbrevs, Abbrevs @section Saving Abbrevs These commands allow you to keep abbrev definitions between editing sessions. @table @kbd @item M-x write-abbrev-file Write a file describing all defined abbrevs. @item M-x read-abbrev-file Read such an abbrev file and define abbrevs as specified there. @item M-x quietly-read-abbrev-file Similar, but do not display a message about what is going on. @item M-x define-abbrevs Define abbrevs from buffer. @item M-x insert-abbrevs Insert all abbrevs and their expansions into the buffer. @end table @findex write-abbrev-file Use @kbd{M-x write-abbrev-file} to save abbrev definitions for use in a later session. The command reads a file name using the minibuffer and writes a description of all current abbrev definitions into the specified file. The text stored in the file looks like the output of @kbd{M-x list-abbrevs}. @findex read-abbrev-file @findex quietly-read-abbrev-file @vindex abbrev-file-name @kbd{M-x read-abbrev-file} prompts for a file name using the minibuffer and reads the specified file, defining abbrevs according to its contents. @kbd{M-x quietly-read-abbrev-file} is the same but does not display a message in the echo area; it is actually useful primarily in the init file. @xref{Init File}. If you give an empty argument to either of these functions, the file name Emacs uses is the value of the variable @code{abbrev-file-name}, which is by default @code{"~/.abbrev_defs"}. @vindex save-abbrevs Emacs offers to save abbrevs automatically if you have changed any of them, whenever it offers to save all files (for @kbd{C-x s} or @kbd{C-x C-c}). Set the variable @code{save-abbrevs} to @code{nil} to inhibit this feature. @findex insert-abbrevs @findex define-abbrevs The commands @kbd{M-x insert-abbrevs} and @kbd{M-x define-abbrevs} are similar to the previous commands but work on text in an Emacs buffer. @kbd{M-x insert-abbrevs} inserts text into the current buffer before point, describing all current abbrev definitions; @kbd{M-x define-abbrevs} parses the entire current buffer and defines abbrevs accordingly.@refill @node Dynamic Abbrevs,, Saving Abbrevs, Abbrevs @section Dynamic Abbrev Expansion The abbrev facility described above operates automatically as you insert text, but all abbrevs must be defined explicitly. By contrast, @dfn{dynamic abbrevs} allow the meanings of abbrevs to be determined automatically from the contents of the buffer, but dynamic abbrev expansion happens only when you request it explicitly. @kindex M-/ @findex dabbrev-expand @table @kbd @item M-/ Expand the word in the buffer before point as a @dfn{dynamic abbrev}, by searching in the buffer for words starting with that abbreviation (@code{dabbrev-expand}). @end table For example, if the buffer contains @samp{does this follow } and you type @kbd{f o M-/}, the effect is to insert @samp{follow} because that is the last word in the buffer that starts with @samp{fo}. A numeric argument to @kbd{M-/} says to take the second, third, etc.@: distinct expansion found looking backward from point. Repeating @kbd{M-/} searches for an alternative expansion by looking farther back. After the entire buffer before point has been considered, the buffer after point is searched. Dynamic abbrev expansion is completely independent of Abbrev mode; the expansion of a word with @kbd{M-/} is completely independent of whether it has a definition as an ordinary abbrev. texi2html-1.82/test/nested_formats/0000755000175000017500000000000011264347121021225 5ustar flichtenheldflichtenheldtexi2html-1.82/test/nested_formats/Makefile.in0000644000175000017500000002056011264347121023275 0ustar flichtenheldflichtenheld# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = test/nested_formats DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DATE = @PACKAGE_DATE@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ REQUIRE_DATA_DUMPER = @REQUIRE_DATA_DUMPER@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_DATA_DUMPER = @USE_DATA_DUMPER@ USE_UNICODE = @USE_UNICODE@ USE_UNIDECODE = @USE_UNIDECODE@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ am__leading_dot = @am__leading_dot@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = nested_formats.texi \ tests.txt res DISTCLEANFILES = l2h_tmp_dir.init tests.log tests.out all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/nested_formats/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu test/nested_formats/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-exec-am: install-html: install-html-am install-info: install-info-am install-man: install-pdf: install-pdf-am install-ps: install-ps-am installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic dist-hook \ distclean distclean-generic distclean-local distdir dvi dvi-am \ html html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am distclean-local: rm -rf out diffs dist-hook: rm -rf `find $(distdir)/res -name CVS` # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: texi2html-1.82/test/nested_formats/res/0000755000175000017500000000000011264347121022016 5ustar flichtenheldflichtenheldtexi2html-1.82/test/nested_formats/res/nested_multitable/0000755000175000017500000000000011264347121025522 5ustar flichtenheldflichtenheldtexi2html-1.82/test/nested_formats/res/nested_multitable/nested_formats.20000644000175000017500000002401511264347121030624 0ustar flichtenheldflichtenheld** empty multitable (l. 233 in @mymacro) ** empty multitable (l. 233 in @mymacro) ** empty multitable (l. 233 in @mymacro) ** empty multitable (l. 233 in @mymacro) ** empty multitable (l. 233 in @mymacro) ** empty multitable (l. 233 in @mymacro) ** empty multitable (l. 233 in @mymacro) ** empty multitable (l. 233 in @mymacro) ** empty multitable (l. 233 in @mymacro) ** empty multitable (l. 236) ** empty multitable (l. 237 in @mymacro) ** empty multitable (l. 237 in @mymacro) ** empty multitable (l. 237 in @mymacro) ** empty multitable (l. 237 in @mymacro) ** empty multitable (l. 237 in @mymacro) ** empty multitable (l. 237 in @mymacro) ** empty multitable (l. 237 in @mymacro) ** empty multitable (l. 237 in @mymacro) ** empty multitable (l. 237 in @mymacro) ** empty multitable (l. 242 in @mymacro) ** empty multitable (l. 242 in @mymacro) ** empty multitable (l. 242 in @mymacro) ** empty multitable (l. 242 in @mymacro) ** empty multitable (l. 242 in @mymacro) ** empty multitable (l. 242 in @mymacro) ** empty multitable (l. 242 in @mymacro) ** empty multitable (l. 242 in @mymacro) ** empty multitable (l. 242 in @mymacro) ** empty multitable (l. 245 in @mymacro) ** empty multitable (l. 245 in @mymacro) ** empty multitable (l. 245 in @mymacro) ** empty multitable (l. 245 in @mymacro) ** empty multitable (l. 245 in @mymacro) ** empty multitable (l. 245 in @mymacro) ** empty multitable (l. 245 in @mymacro) ** empty multitable (l. 245 in @mymacro) ** empty multitable (l. 245 in @mymacro) ** empty multitable (l. 248) ** empty multitable (l. 249 in @mymacro) ** empty multitable (l. 249 in @mymacro) ** empty multitable (l. 249 in @mymacro) ** empty multitable (l. 249 in @mymacro) ** empty multitable (l. 249 in @mymacro) ** empty multitable (l. 249 in @mymacro) ** empty multitable (l. 249 in @mymacro) ** empty multitable (l. 249 in @mymacro) ** empty multitable (l. 249 in @mymacro) ** empty multitable (l. 255 in @mymacro) ** empty multitable (l. 255 in @mymacro) ** empty multitable (l. 255 in @mymacro) ** empty multitable (l. 255 in @mymacro) ** empty multitable (l. 255 in @mymacro) ** empty multitable (l. 255 in @mymacro) ** empty multitable (l. 255 in @mymacro) ** empty multitable (l. 255 in @mymacro) ** empty multitable (l. 255 in @mymacro) ** empty multitable (l. 258 in @mymacro) ** empty multitable (l. 258 in @mymacro) ** empty multitable (l. 258 in @mymacro) ** empty multitable (l. 258 in @mymacro) ** empty multitable (l. 258 in @mymacro) ** empty multitable (l. 258 in @mymacro) ** empty multitable (l. 258 in @mymacro) ** empty multitable (l. 258 in @mymacro) ** empty multitable (l. 258 in @mymacro) ** empty multitable (l. 261) ** empty multitable (l. 262 in @mymacro) ** empty multitable (l. 262 in @mymacro) ** empty multitable (l. 262 in @mymacro) ** empty multitable (l. 262 in @mymacro) ** empty multitable (l. 262 in @mymacro) ** empty multitable (l. 262 in @mymacro) ** empty multitable (l. 262 in @mymacro) ** empty multitable (l. 262 in @mymacro) ** empty multitable (l. 262 in @mymacro) ** empty multitable (l. 270 in @mymacro) ** empty multitable (l. 270 in @mymacro) ** empty multitable (l. 270 in @mymacro) ** empty multitable (l. 270 in @mymacro) ** empty multitable (l. 270 in @mymacro) ** empty multitable (l. 270 in @mymacro) ** empty multitable (l. 270 in @mymacro) ** empty multitable (l. 270 in @mymacro) ** empty multitable (l. 270 in @mymacro) ** empty multitable (l. 273 in @mymacro) ** empty multitable (l. 273 in @mymacro) ** empty multitable (l. 273 in @mymacro) ** empty multitable (l. 273 in @mymacro) ** empty multitable (l. 273 in @mymacro) ** empty multitable (l. 273 in @mymacro) ** empty multitable (l. 273 in @mymacro) ** empty multitable (l. 273 in @mymacro) ** empty multitable (l. 273 in @mymacro) ** empty multitable (l. 276) ** empty multitable (l. 277 in @mymacro) ** empty multitable (l. 277 in @mymacro) ** empty multitable (l. 277 in @mymacro) ** empty multitable (l. 277 in @mymacro) ** empty multitable (l. 277 in @mymacro) ** empty multitable (l. 277 in @mymacro) ** empty multitable (l. 277 in @mymacro) ** empty multitable (l. 277 in @mymacro) ** empty multitable (l. 277 in @mymacro) ** empty multitable (l. 283 in @mymacro) ** empty multitable (l. 283 in @mymacro) ** empty multitable (l. 283 in @mymacro) ** empty multitable (l. 283 in @mymacro) ** empty multitable (l. 283 in @mymacro) ** empty multitable (l. 283 in @mymacro) ** empty multitable (l. 283 in @mymacro) ** empty multitable (l. 283 in @mymacro) ** empty multitable (l. 283 in @mymacro) ** empty multitable (l. 287 in @mymacro) ** empty multitable (l. 287 in @mymacro) ** empty multitable (l. 287 in @mymacro) ** empty multitable (l. 287 in @mymacro) ** empty multitable (l. 287 in @mymacro) ** empty multitable (l. 287 in @mymacro) ** empty multitable (l. 287 in @mymacro) ** empty multitable (l. 287 in @mymacro) ** empty multitable (l. 287 in @mymacro) ** empty multitable (l. 291) ** empty multitable (l. 292 in @mymacro) ** empty multitable (l. 292 in @mymacro) ** empty multitable (l. 292 in @mymacro) ** empty multitable (l. 292 in @mymacro) ** empty multitable (l. 292 in @mymacro) ** empty multitable (l. 292 in @mymacro) ** empty multitable (l. 292 in @mymacro) ** empty multitable (l. 292 in @mymacro) ** empty multitable (l. 292 in @mymacro) ** empty multitable (l. 303 in @mymacro) ** empty multitable (l. 303 in @mymacro) ** empty multitable (l. 303 in @mymacro) ** empty multitable (l. 303 in @mymacro) ** empty multitable (l. 303 in @mymacro) ** empty multitable (l. 303 in @mymacro) ** empty multitable (l. 303 in @mymacro) ** empty multitable (l. 303 in @mymacro) ** empty multitable (l. 303 in @mymacro) ** empty multitable (l. 306) ** empty multitable (l. 307 in @mymacro) ** empty multitable (l. 307 in @mymacro) ** empty multitable (l. 307 in @mymacro) ** empty multitable (l. 307 in @mymacro) ** empty multitable (l. 307 in @mymacro) ** empty multitable (l. 307 in @mymacro) ** empty multitable (l. 307 in @mymacro) ** empty multitable (l. 307 in @mymacro) ** empty multitable (l. 307 in @mymacro) ** empty multitable (l. 313 in @mymacro) ** empty multitable (l. 313 in @mymacro) ** empty multitable (l. 313 in @mymacro) ** empty multitable (l. 313 in @mymacro) ** empty multitable (l. 313 in @mymacro) ** empty multitable (l. 313 in @mymacro) ** empty multitable (l. 313 in @mymacro) ** empty multitable (l. 313 in @mymacro) ** empty multitable (l. 313 in @mymacro) ** empty multitable (l. 319 in @mymacro) ** empty multitable (l. 319 in @mymacro) ** empty multitable (l. 319 in @mymacro) ** empty multitable (l. 319 in @mymacro) ** empty multitable (l. 319 in @mymacro) ** empty multitable (l. 319 in @mymacro) ** empty multitable (l. 319 in @mymacro) ** empty multitable (l. 319 in @mymacro) ** empty multitable (l. 319 in @mymacro) ** empty multitable (l. 322 in @mymacro) ** empty multitable (l. 322 in @mymacro) ** empty multitable (l. 322 in @mymacro) ** empty multitable (l. 322 in @mymacro) ** empty multitable (l. 322 in @mymacro) ** empty multitable (l. 322 in @mymacro) ** empty multitable (l. 322 in @mymacro) ** empty multitable (l. 322 in @mymacro) ** empty multitable (l. 322 in @mymacro) ** empty multitable (l. 325) ** empty multitable (l. 326 in @mymacro) ** empty multitable (l. 326 in @mymacro) ** empty multitable (l. 326 in @mymacro) ** empty multitable (l. 326 in @mymacro) ** empty multitable (l. 326 in @mymacro) ** empty multitable (l. 326 in @mymacro) ** empty multitable (l. 326 in @mymacro) ** empty multitable (l. 326 in @mymacro) ** empty multitable (l. 326 in @mymacro) ** empty multitable (l. 332 in @mymacro) ** empty multitable (l. 332 in @mymacro) ** empty multitable (l. 332 in @mymacro) ** empty multitable (l. 332 in @mymacro) ** empty multitable (l. 332 in @mymacro) ** empty multitable (l. 332 in @mymacro) ** empty multitable (l. 332 in @mymacro) ** empty multitable (l. 332 in @mymacro) ** empty multitable (l. 332 in @mymacro) ** empty multitable (l. 335 in @mymacro) ** empty multitable (l. 335 in @mymacro) ** empty multitable (l. 335 in @mymacro) ** empty multitable (l. 335 in @mymacro) ** empty multitable (l. 335 in @mymacro) ** empty multitable (l. 335 in @mymacro) ** empty multitable (l. 335 in @mymacro) ** empty multitable (l. 335 in @mymacro) ** empty multitable (l. 335 in @mymacro) ** empty multitable (l. 337) ** empty multitable (l. 338 in @mymacro) ** empty multitable (l. 338 in @mymacro) ** empty multitable (l. 338 in @mymacro) ** empty multitable (l. 338 in @mymacro) ** empty multitable (l. 338 in @mymacro) ** empty multitable (l. 338 in @mymacro) ** empty multitable (l. 338 in @mymacro) ** empty multitable (l. 338 in @mymacro) ** empty multitable (l. 338 in @mymacro) ** empty multitable (l. 344 in @mymacro) ** empty multitable (l. 344 in @mymacro) ** empty multitable (l. 344 in @mymacro) ** empty multitable (l. 344 in @mymacro) ** empty multitable (l. 344 in @mymacro) ** empty multitable (l. 344 in @mymacro) ** empty multitable (l. 344 in @mymacro) ** empty multitable (l. 344 in @mymacro) ** empty multitable (l. 344 in @mymacro) ** empty multitable (l. 347) ** empty multitable (l. 348 in @mymacro) ** empty multitable (l. 348 in @mymacro) ** empty multitable (l. 348 in @mymacro) ** empty multitable (l. 348 in @mymacro) ** empty multitable (l. 348 in @mymacro) ** empty multitable (l. 348 in @mymacro) ** empty multitable (l. 348 in @mymacro) ** empty multitable (l. 348 in @mymacro) ** empty multitable (l. 348 in @mymacro) ** empty multitable (l. 353 in @mymacro) ** empty multitable (l. 353 in @mymacro) ** empty multitable (l. 353 in @mymacro) ** empty multitable (l. 353 in @mymacro) ** empty multitable (l. 353 in @mymacro) ** empty multitable (l. 353 in @mymacro) ** empty multitable (l. 353 in @mymacro) ** empty multitable (l. 353 in @mymacro) ** empty multitable (l. 353 in @mymacro) ** empty multitable (l. 355) ** empty multitable (l. 356 in @mymacro) ** empty multitable (l. 356 in @mymacro) ** empty multitable (l. 356 in @mymacro) ** empty multitable (l. 356 in @mymacro) ** empty multitable (l. 356 in @mymacro) ** empty multitable (l. 356 in @mymacro) ** empty multitable (l. 356 in @mymacro) ** empty multitable (l. 356 in @mymacro) ** empty multitable (l. 356 in @mymacro) texi2html-1.82/test/nested_formats/res/nested_multitable/nested_formats.html0000644000175000017500000007173311264347121031440 0ustar flichtenheldflichtenheld Untitled Document

    Test nested multitable

    Call macro in macro

    Something

    Something

    Something2

    After

    Something2

    After



    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    Call macro in format_command

    Call macro in itemize at the beginning of an item

    • a–n itemize line in macro

      Something

      Something

      Something2

      After

      Something2

      After



      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    • a–n itemize line item 1 Call macro in itemize in macro

      Something

      Something

      Something2

      After

      Something2

      After



      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    • a–n itemize line item 2 Call macro in itemize in format_command

    Call macro in enumerate at the beginning of enumerate

    1. in macro

      Something

      Something

      Something2

      After

      Something2

      After



      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    2. enumerate Call macro in enumerate in macro

      Something

      Something

      Something2

      After

      Something2

      After



      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    3. enumerate2 Call macro in enumerate in format_command
    mu–ltitable headitemanother tab
    multitable itemmultitable tab. And after Call macro in mutitable after item
    in macro

    Something

    Something

    Something2

    After

    Something2

    After



    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    multitable item 2multitable tab 2 Call macro in mutitable in macro

    Something

    Something

    Something2

    After

    Something2

    After



    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    lone multitable item Call macro in mutitable in format_command

    call macro at the example beginning

     
    in macro
    
    
    Something
    
    Something
    
    Something2
    
    After
    
    Something2
    
    After
    
    
    
    
    
    
    subheading
    
    
    in verbatim
    
    
    html
    
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    example  some
       text
    call macro in example
    in macro
    
    
    Something
    
    Something
    
    Something2
    
    After
    
    Something2
    
    After
    
    
    
    
    
    
    subheading
    
    
    in verbatim
    
    
    html
    
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    
    more example text
    call macro in example in format_command
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    deffn call macro in deffn in macro

    Something

    Something

    Something2

    After

    Something2

    After



    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    deffn continues call macro in deffn in format_command

    call macro in deffn at the beginning

    c--ategory2: d--effn_name2 a--rguments2...

    in macro

    Something

    Something

    Something2

    After

    Something2

    After



    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    • a line

    call macro in table in macro

    Something

    Something

    Something2

    After

    Something2

    After



    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro in table at an item beginning

    • a line

    in macro

    Something

    Something

    Something2

    After

    Something2

    After



    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    • a line2

    call macro in table in format_command

    call macro at cartouche begin

    in macro

    Something

    Something

    Something2

    After

    Something2

    After



    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    cartouche call macro in cartouche in macro

    Something

    Something

    Something2

    After

    Something2

    After



    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro in cartouche in format_command

    call macro in flushleft in macro

    Something

    Something

    Something2

    After

    Something2

    After



    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    flushleft call macro in flushleft in format_command

    in macro

    Something

    Something

    Something2

    After

    Something2

    After



    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    flushright


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/nested_formats/res/nested_flushright/0000755000175000017500000000000011264347121025537 5ustar flichtenheldflichtenheldtexi2html-1.82/test/nested_formats/res/nested_flushright/nested_formats.20000644000175000017500000000000011264347121030625 0ustar flichtenheldflichtenheldtexi2html-1.82/test/nested_formats/res/nested_flushright/nested_formats.html0000644000175000017500000025162711264347121031457 0ustar flichtenheldflichtenheld Untitled Document

    Test nested flushright

    Call macro in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    Call macro in format_command

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    Call macro in itemize at the beginning of an item

    • a–n itemize line in macro

      in format_command

      Something

      Something

      in group

      Something2

      After

      Something2

      in group

      After



      in group

      A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      in macro, a format_command containing some other commands.

      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    • a–n itemize line item 1 Call macro in itemize in macro

      in format_command

      Something

      Something

      in group

      Something2

      After

      Something2

      in group

      After



      in group

      A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      in macro, a format_command containing some other commands.

      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    • a–n itemize line item 2 Call macro in itemize in format_command

      in macro

      in format_command

      Something

      Something

      in group

      Something2

      After

      Something2

      in group

      After



      in group

      A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      in macro, a format_command containing some other commands.

      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    Call macro in enumerate at the beginning of enumerate

    1. in macro

      in format_command

      Something

      Something

      in group

      Something2

      After

      Something2

      in group

      After



      in group

      A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      in macro, a format_command containing some other commands.

      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    2. enumerate Call macro in enumerate in macro

      in format_command

      Something

      Something

      in group

      Something2

      After

      Something2

      in group

      After



      in group

      A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      in macro, a format_command containing some other commands.

      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    3. enumerate2 Call macro in enumerate in format_command

      in macro

      in format_command

      Something

      Something

      in group

      Something2

      After

      Something2

      in group

      After



      in group

      A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      in macro, a format_command containing some other commands.

      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    mu–ltitable headitemanother tab
    multitable itemmultitable tab. And after Call macro in mutitable after item
    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    multitable item 2multitable tab 2 Call macro in mutitable in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    lone multitable item Call macro in mutitable in format_command

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro at the example beginning

     
    in macro
    
    
    in format_command
    
    Something
    
    Something
    
    in group
    
    Something2
    
    After
    
    Something2
    
    in group
    
    After
    
    
    
    
    
    in group
    
    A quot---ation
    
    
    subheading
    
    
    in verbatim
    
    
    html
    
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    in macro, a format_command containing some other commands.
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    example  some
       text
    call macro in example
    in macro
    
    
    in format_command
    
    Something
    
    Something
    
    in group
    
    Something2
    
    After
    
    Something2
    
    in group
    
    After
    
    
    
    
    
    in group
    
    A quot---ation
    
    
    subheading
    
    
    in verbatim
    
    
    html
    
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    in macro, a format_command containing some other commands.
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    
    more example text
    call macro in example in format_command
    
    in macro
    
    
    in format_command
    
    Something
    
    Something
    
    in group
    
    Something2
    
    After
    
    Something2
    
    in group
    
    After
    
    
    
    
    
    in group
    
    A quot---ation
    
    
    subheading
    
    
    in verbatim
    
    
    html
    
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    in macro, a format_command containing some other commands.
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    deffn call macro in deffn in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    deffn continues call macro in deffn in format_command

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro in deffn at the beginning

    c--ategory2: d--effn_name2 a--rguments2...

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    • a line

    call macro in table in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro in table at an item beginning

    • a line

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    • a line2

    call macro in table in format_command

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro at cartouche begin

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    cartouche call macro in cartouche in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro in cartouche in format_command

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro in flushleft in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    flushleft call macro in flushleft in format_command

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    flushright

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/nested_formats/res/nested_cartouche/0000755000175000017500000000000011264347121025335 5ustar flichtenheldflichtenheldtexi2html-1.82/test/nested_formats/res/nested_cartouche/nested_formats.20000644000175000017500000000000011264347121030423 0ustar flichtenheldflichtenheldtexi2html-1.82/test/nested_formats/res/nested_cartouche/nested_formats.html0000644000175000017500000027031311264347121031246 0ustar flichtenheldflichtenheld Untitled Document

    Test nested cartouche

    Call macro in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    Call macro in format_command

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    Call macro in itemize at the beginning of an item

    • a–n itemize line in macro

      in format_command

      Something

      Something

      in group

      Something2

      After

      Something2

      in group

      After



      in group

      A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      in macro, a format_command containing some other commands.

      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    • a–n itemize line item 1 Call macro in itemize in macro

      in format_command

      Something

      Something

      in group

      Something2

      After

      Something2

      in group

      After



      in group

      A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      in macro, a format_command containing some other commands.

      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    • a–n itemize line item 2 Call macro in itemize in format_command

      in macro

      in format_command

      Something

      Something

      in group

      Something2

      After

      Something2

      in group

      After



      in group

      A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      in macro, a format_command containing some other commands.

      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    Call macro in enumerate at the beginning of enumerate

    1. in macro

      in format_command

      Something

      Something

      in group

      Something2

      After

      Something2

      in group

      After



      in group

      A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      in macro, a format_command containing some other commands.

      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    2. enumerate Call macro in enumerate in macro

      in format_command

      Something

      Something

      in group

      Something2

      After

      Something2

      in group

      After



      in group

      A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      in macro, a format_command containing some other commands.

      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    3. enumerate2 Call macro in enumerate in format_command

      in macro

      in format_command

      Something

      Something

      in group

      Something2

      After

      Something2

      in group

      After



      in group

      A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      in macro, a format_command containing some other commands.

      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    mu–ltitable headitemanother tab
    multitable itemmultitable tab. And after Call macro in mutitable after item
    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    multitable item 2multitable tab 2 Call macro in mutitable in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    lone multitable item Call macro in mutitable in format_command

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro at the example beginning

     
    in macro
    
    
    in format_command
    
    Something
    
    Something
    
    in group
    
    Something2
    
    After
    
    Something2
    
    in group
    
    After
    
    
    
    
    
    in group
    
    A quot---ation
    
    
    subheading
    
    
    in verbatim
    
    
    html
    
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    in macro, a format_command containing some other commands.
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    example  some
       text
    call macro in example
    in macro
    
    
    in format_command
    
    Something
    
    Something
    
    in group
    
    Something2
    
    After
    
    Something2
    
    in group
    
    After
    
    
    
    
    
    in group
    
    A quot---ation
    
    
    subheading
    
    
    in verbatim
    
    
    html
    
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    in macro, a format_command containing some other commands.
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    
    more example text
    call macro in example in format_command
    
    in macro
    
    
    in format_command
    
    Something
    
    Something
    
    in group
    
    Something2
    
    After
    
    Something2
    
    in group
    
    After
    
    
    
    
    
    in group
    
    A quot---ation
    
    
    subheading
    
    
    in verbatim
    
    
    html
    
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    in macro, a format_command containing some other commands.
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    deffn call macro in deffn in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    deffn continues call macro in deffn in format_command

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro in deffn at the beginning

    c--ategory2: d--effn_name2 a--rguments2...

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    • a line

    call macro in table in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro in table at an item beginning

    • a line

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    • a line2

    call macro in table in format_command

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro at cartouche begin

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    cartouche call macro in cartouche in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro in cartouche in format_command

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro in flushleft in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    flushleft call macro in flushleft in format_command

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    flushright

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/nested_formats/res/texi_nested_formats/0000755000175000017500000000000011264347121026064 5ustar flichtenheldflichtenheldtexi2html-1.82/test/nested_formats/res/texi_nested_formats/nested_formats.20000644000175000017500000000000011264347121031152 0ustar flichtenheldflichtenheldtexi2html-1.82/test/nested_formats/res/texi_nested_formats/nested_formats.passtexi0000644000175000017500000056547211264347121032706 0ustar flichtenheldflichtenheldnested_formats.texi(,2) nested_formats.texi(,3) @c value not expanded, by makeinfo nor by texi2html nested_formats.texi(,4) @c @setfilename nested_formats.info nested_formats.texi(,5) nested_formats.texi(,10) nested_formats.texi(,15) nested_formats.texi(,20) nested_formats.texi(,25) nested_formats.texi(,30) nested_formats.texi(,35) nested_formats.texi(,40) nested_formats.texi(,45) nested_formats.texi(,50) nested_formats.texi(,55) nested_formats.texi(,60) nested_formats.texi(,62) @set format_command_begin @group nested_formats.texi(,63) @set format_command group nested_formats.texi(,65) nested_formats.texi(,66) @c @setfilename @value{format_command}.info nested_formats.texi(,67) nested_formats.texi(,68) @node Top nested_formats.texi(,69) @top Test nested group nested_formats.texi(,70) nested_formats.texi(,231) nested_formats.texi(,232) Call macro nested_formats.texi(mymacro,233) in macro nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @group nested_formats.texi(mymacro,233) @end group nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @group nested_formats.texi(mymacro,233) in format_command nested_formats.texi(mymacro,233) @end group nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) Something nested_formats.texi(mymacro,233) @group nested_formats.texi(mymacro,233) @end group nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) Something nested_formats.texi(mymacro,233) @group nested_formats.texi(mymacro,233) in group nested_formats.texi(mymacro,233) @end group nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) Something2 nested_formats.texi(mymacro,233) @group nested_formats.texi(mymacro,233) @end group nested_formats.texi(mymacro,233) After nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) Something2 nested_formats.texi(mymacro,233) @group nested_formats.texi(mymacro,233) in group nested_formats.texi(mymacro,233) @end group nested_formats.texi(mymacro,233) After nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @sp 2 nested_formats.texi(mymacro,233) @group nested_formats.texi(mymacro,233) in group nested_formats.texi(mymacro,233) @end group nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @group nested_formats.texi(mymacro,233) @quotation nested_formats.texi(mymacro,233) A quot---ation nested_formats.texi(mymacro,233) @end quotation nested_formats.texi(mymacro,233) @end group nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @subheading subheading nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @verbatim nested_formats.texi(mymacro,233) in verbatim nested_formats.texi(mymacro,233) @end verbatim nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @html nested_formats.texi(mymacro,233) html nested_formats.texi(mymacro,233) @end html nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,233) @item i--tem 1 nested_formats.texi(mymacro,233) @item i--tem 2 nested_formats.texi(mymacro,233) @end itemize nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @enumerate nested_formats.texi(mymacro,233) @item e--numerate nested_formats.texi(mymacro,233) @end enumerate nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,233) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,233) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,233) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,233) @item lone mu--ltitable item nested_formats.texi(mymacro,233) @end multitable nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @example nested_formats.texi(mymacro,233) e--xample some nested_formats.texi(mymacro,233) text nested_formats.texi(mymacro,233) @end example nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @smallexample nested_formats.texi(mymacro,233) s--mallexample nested_formats.texi(mymacro,233) @end smallexample nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,233) d--effn nested_formats.texi(mymacro,233) @end deffn nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @table @bullet nested_formats.texi(mymacro,233) @item a nested_formats.texi(mymacro,233) l--ine nested_formats.texi(mymacro,233) @end table nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @cartouche nested_formats.texi(mymacro,233) c--artouche nested_formats.texi(mymacro,233) @end cartouche nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @flushleft nested_formats.texi(mymacro,233) f--lushleft nested_formats.texi(mymacro,233) @end flushleft nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @flushright nested_formats.texi(mymacro,233) f--lushright nested_formats.texi(mymacro,233) @end flushright nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @center ce--ntered line nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @group nested_formats.texi(mymacro,233) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,233) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,233) @item i--tem 1 nested_formats.texi(mymacro,233) @item i--tem 2 nested_formats.texi(mymacro,233) @end itemize nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @enumerate nested_formats.texi(mymacro,233) @item e--numerate nested_formats.texi(mymacro,233) @end enumerate nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,233) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,233) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,233) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,233) @item lone mu--ltitable item nested_formats.texi(mymacro,233) @end multitable nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @example nested_formats.texi(mymacro,233) e--xample some nested_formats.texi(mymacro,233) text nested_formats.texi(mymacro,233) @end example nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @smallexample nested_formats.texi(mymacro,233) s--mallexample nested_formats.texi(mymacro,233) @end smallexample nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,233) d--effn nested_formats.texi(mymacro,233) @end deffn nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @table @bullet nested_formats.texi(mymacro,233) @item a nested_formats.texi(mymacro,233) l--ine nested_formats.texi(mymacro,233) @end table nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @cartouche nested_formats.texi(mymacro,233) c--artouche nested_formats.texi(mymacro,233) @end cartouche nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @flushleft nested_formats.texi(mymacro,233) f--lushleft nested_formats.texi(mymacro,233) @end flushleft nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @flushright nested_formats.texi(mymacro,233) f--lushright nested_formats.texi(mymacro,233) @end flushright nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @center ce--ntered line nested_formats.texi(mymacro,233) @end group nested_formats.texi(mymacro,233) nested_formats.texi(,234) nested_formats.texi(,235) Call macro in format_command nested_formats.texi(,236) @group nested_formats.texi(mymacro,237) in macro nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @group nested_formats.texi(mymacro,237) @end group nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @group nested_formats.texi(mymacro,237) in format_command nested_formats.texi(mymacro,237) @end group nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) Something nested_formats.texi(mymacro,237) @group nested_formats.texi(mymacro,237) @end group nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) Something nested_formats.texi(mymacro,237) @group nested_formats.texi(mymacro,237) in group nested_formats.texi(mymacro,237) @end group nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) Something2 nested_formats.texi(mymacro,237) @group nested_formats.texi(mymacro,237) @end group nested_formats.texi(mymacro,237) After nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) Something2 nested_formats.texi(mymacro,237) @group nested_formats.texi(mymacro,237) in group nested_formats.texi(mymacro,237) @end group nested_formats.texi(mymacro,237) After nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @sp 2 nested_formats.texi(mymacro,237) @group nested_formats.texi(mymacro,237) in group nested_formats.texi(mymacro,237) @end group nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @group nested_formats.texi(mymacro,237) @quotation nested_formats.texi(mymacro,237) A quot---ation nested_formats.texi(mymacro,237) @end quotation nested_formats.texi(mymacro,237) @end group nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @subheading subheading nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @verbatim nested_formats.texi(mymacro,237) in verbatim nested_formats.texi(mymacro,237) @end verbatim nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @html nested_formats.texi(mymacro,237) html nested_formats.texi(mymacro,237) @end html nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,237) @item i--tem 1 nested_formats.texi(mymacro,237) @item i--tem 2 nested_formats.texi(mymacro,237) @end itemize nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @enumerate nested_formats.texi(mymacro,237) @item e--numerate nested_formats.texi(mymacro,237) @end enumerate nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,237) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,237) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,237) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,237) @item lone mu--ltitable item nested_formats.texi(mymacro,237) @end multitable nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @example nested_formats.texi(mymacro,237) e--xample some nested_formats.texi(mymacro,237) text nested_formats.texi(mymacro,237) @end example nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @smallexample nested_formats.texi(mymacro,237) s--mallexample nested_formats.texi(mymacro,237) @end smallexample nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,237) d--effn nested_formats.texi(mymacro,237) @end deffn nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @table @bullet nested_formats.texi(mymacro,237) @item a nested_formats.texi(mymacro,237) l--ine nested_formats.texi(mymacro,237) @end table nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @cartouche nested_formats.texi(mymacro,237) c--artouche nested_formats.texi(mymacro,237) @end cartouche nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @flushleft nested_formats.texi(mymacro,237) f--lushleft nested_formats.texi(mymacro,237) @end flushleft nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @flushright nested_formats.texi(mymacro,237) f--lushright nested_formats.texi(mymacro,237) @end flushright nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @center ce--ntered line nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @group nested_formats.texi(mymacro,237) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,237) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,237) @item i--tem 1 nested_formats.texi(mymacro,237) @item i--tem 2 nested_formats.texi(mymacro,237) @end itemize nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @enumerate nested_formats.texi(mymacro,237) @item e--numerate nested_formats.texi(mymacro,237) @end enumerate nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,237) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,237) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,237) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,237) @item lone mu--ltitable item nested_formats.texi(mymacro,237) @end multitable nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @example nested_formats.texi(mymacro,237) e--xample some nested_formats.texi(mymacro,237) text nested_formats.texi(mymacro,237) @end example nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @smallexample nested_formats.texi(mymacro,237) s--mallexample nested_formats.texi(mymacro,237) @end smallexample nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,237) d--effn nested_formats.texi(mymacro,237) @end deffn nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @table @bullet nested_formats.texi(mymacro,237) @item a nested_formats.texi(mymacro,237) l--ine nested_formats.texi(mymacro,237) @end table nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @cartouche nested_formats.texi(mymacro,237) c--artouche nested_formats.texi(mymacro,237) @end cartouche nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @flushleft nested_formats.texi(mymacro,237) f--lushleft nested_formats.texi(mymacro,237) @end flushleft nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @flushright nested_formats.texi(mymacro,237) f--lushright nested_formats.texi(mymacro,237) @end flushright nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @center ce--ntered line nested_formats.texi(mymacro,237) @end group nested_formats.texi(mymacro,237) nested_formats.texi(,238) @end group nested_formats.texi(,239) nested_formats.texi(,240) Call macro in itemize at the beginning of an item nested_formats.texi(,241) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,242) @item nested_formats.texi(mymacro,242) in macro nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @group nested_formats.texi(mymacro,242) @end group nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @group nested_formats.texi(mymacro,242) in format_command nested_formats.texi(mymacro,242) @end group nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) Something nested_formats.texi(mymacro,242) @group nested_formats.texi(mymacro,242) @end group nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) Something nested_formats.texi(mymacro,242) @group nested_formats.texi(mymacro,242) in group nested_formats.texi(mymacro,242) @end group nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) Something2 nested_formats.texi(mymacro,242) @group nested_formats.texi(mymacro,242) @end group nested_formats.texi(mymacro,242) After nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) Something2 nested_formats.texi(mymacro,242) @group nested_formats.texi(mymacro,242) in group nested_formats.texi(mymacro,242) @end group nested_formats.texi(mymacro,242) After nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @sp 2 nested_formats.texi(mymacro,242) @group nested_formats.texi(mymacro,242) in group nested_formats.texi(mymacro,242) @end group nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @group nested_formats.texi(mymacro,242) @quotation nested_formats.texi(mymacro,242) A quot---ation nested_formats.texi(mymacro,242) @end quotation nested_formats.texi(mymacro,242) @end group nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @subheading subheading nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @verbatim nested_formats.texi(mymacro,242) in verbatim nested_formats.texi(mymacro,242) @end verbatim nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @html nested_formats.texi(mymacro,242) html nested_formats.texi(mymacro,242) @end html nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,242) @item i--tem 1 nested_formats.texi(mymacro,242) @item i--tem 2 nested_formats.texi(mymacro,242) @end itemize nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @enumerate nested_formats.texi(mymacro,242) @item e--numerate nested_formats.texi(mymacro,242) @end enumerate nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,242) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,242) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,242) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,242) @item lone mu--ltitable item nested_formats.texi(mymacro,242) @end multitable nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @example nested_formats.texi(mymacro,242) e--xample some nested_formats.texi(mymacro,242) text nested_formats.texi(mymacro,242) @end example nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @smallexample nested_formats.texi(mymacro,242) s--mallexample nested_formats.texi(mymacro,242) @end smallexample nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,242) d--effn nested_formats.texi(mymacro,242) @end deffn nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @table @bullet nested_formats.texi(mymacro,242) @item a nested_formats.texi(mymacro,242) l--ine nested_formats.texi(mymacro,242) @end table nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @cartouche nested_formats.texi(mymacro,242) c--artouche nested_formats.texi(mymacro,242) @end cartouche nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @flushleft nested_formats.texi(mymacro,242) f--lushleft nested_formats.texi(mymacro,242) @end flushleft nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @flushright nested_formats.texi(mymacro,242) f--lushright nested_formats.texi(mymacro,242) @end flushright nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @center ce--ntered line nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @group nested_formats.texi(mymacro,242) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,242) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,242) @item i--tem 1 nested_formats.texi(mymacro,242) @item i--tem 2 nested_formats.texi(mymacro,242) @end itemize nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @enumerate nested_formats.texi(mymacro,242) @item e--numerate nested_formats.texi(mymacro,242) @end enumerate nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,242) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,242) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,242) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,242) @item lone mu--ltitable item nested_formats.texi(mymacro,242) @end multitable nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @example nested_formats.texi(mymacro,242) e--xample some nested_formats.texi(mymacro,242) text nested_formats.texi(mymacro,242) @end example nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @smallexample nested_formats.texi(mymacro,242) s--mallexample nested_formats.texi(mymacro,242) @end smallexample nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,242) d--effn nested_formats.texi(mymacro,242) @end deffn nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @table @bullet nested_formats.texi(mymacro,242) @item a nested_formats.texi(mymacro,242) l--ine nested_formats.texi(mymacro,242) @end table nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @cartouche nested_formats.texi(mymacro,242) c--artouche nested_formats.texi(mymacro,242) @end cartouche nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @flushleft nested_formats.texi(mymacro,242) f--lushleft nested_formats.texi(mymacro,242) @end flushleft nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @flushright nested_formats.texi(mymacro,242) f--lushright nested_formats.texi(mymacro,242) @end flushright nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @center ce--ntered line nested_formats.texi(mymacro,242) @end group nested_formats.texi(mymacro,242) nested_formats.texi(,243) @item item 1 nested_formats.texi(,244) Call macro in itemize nested_formats.texi(mymacro,245) in macro nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @group nested_formats.texi(mymacro,245) @end group nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @group nested_formats.texi(mymacro,245) in format_command nested_formats.texi(mymacro,245) @end group nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) Something nested_formats.texi(mymacro,245) @group nested_formats.texi(mymacro,245) @end group nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) Something nested_formats.texi(mymacro,245) @group nested_formats.texi(mymacro,245) in group nested_formats.texi(mymacro,245) @end group nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) Something2 nested_formats.texi(mymacro,245) @group nested_formats.texi(mymacro,245) @end group nested_formats.texi(mymacro,245) After nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) Something2 nested_formats.texi(mymacro,245) @group nested_formats.texi(mymacro,245) in group nested_formats.texi(mymacro,245) @end group nested_formats.texi(mymacro,245) After nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @sp 2 nested_formats.texi(mymacro,245) @group nested_formats.texi(mymacro,245) in group nested_formats.texi(mymacro,245) @end group nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @group nested_formats.texi(mymacro,245) @quotation nested_formats.texi(mymacro,245) A quot---ation nested_formats.texi(mymacro,245) @end quotation nested_formats.texi(mymacro,245) @end group nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @subheading subheading nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @verbatim nested_formats.texi(mymacro,245) in verbatim nested_formats.texi(mymacro,245) @end verbatim nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @html nested_formats.texi(mymacro,245) html nested_formats.texi(mymacro,245) @end html nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,245) @item i--tem 1 nested_formats.texi(mymacro,245) @item i--tem 2 nested_formats.texi(mymacro,245) @end itemize nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @enumerate nested_formats.texi(mymacro,245) @item e--numerate nested_formats.texi(mymacro,245) @end enumerate nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,245) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,245) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,245) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,245) @item lone mu--ltitable item nested_formats.texi(mymacro,245) @end multitable nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @example nested_formats.texi(mymacro,245) e--xample some nested_formats.texi(mymacro,245) text nested_formats.texi(mymacro,245) @end example nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @smallexample nested_formats.texi(mymacro,245) s--mallexample nested_formats.texi(mymacro,245) @end smallexample nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,245) d--effn nested_formats.texi(mymacro,245) @end deffn nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @table @bullet nested_formats.texi(mymacro,245) @item a nested_formats.texi(mymacro,245) l--ine nested_formats.texi(mymacro,245) @end table nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @cartouche nested_formats.texi(mymacro,245) c--artouche nested_formats.texi(mymacro,245) @end cartouche nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @flushleft nested_formats.texi(mymacro,245) f--lushleft nested_formats.texi(mymacro,245) @end flushleft nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @flushright nested_formats.texi(mymacro,245) f--lushright nested_formats.texi(mymacro,245) @end flushright nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @center ce--ntered line nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @group nested_formats.texi(mymacro,245) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,245) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,245) @item i--tem 1 nested_formats.texi(mymacro,245) @item i--tem 2 nested_formats.texi(mymacro,245) @end itemize nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @enumerate nested_formats.texi(mymacro,245) @item e--numerate nested_formats.texi(mymacro,245) @end enumerate nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,245) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,245) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,245) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,245) @item lone mu--ltitable item nested_formats.texi(mymacro,245) @end multitable nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @example nested_formats.texi(mymacro,245) e--xample some nested_formats.texi(mymacro,245) text nested_formats.texi(mymacro,245) @end example nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @smallexample nested_formats.texi(mymacro,245) s--mallexample nested_formats.texi(mymacro,245) @end smallexample nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,245) d--effn nested_formats.texi(mymacro,245) @end deffn nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @table @bullet nested_formats.texi(mymacro,245) @item a nested_formats.texi(mymacro,245) l--ine nested_formats.texi(mymacro,245) @end table nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @cartouche nested_formats.texi(mymacro,245) c--artouche nested_formats.texi(mymacro,245) @end cartouche nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @flushleft nested_formats.texi(mymacro,245) f--lushleft nested_formats.texi(mymacro,245) @end flushleft nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @flushright nested_formats.texi(mymacro,245) f--lushright nested_formats.texi(mymacro,245) @end flushright nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @center ce--ntered line nested_formats.texi(mymacro,245) @end group nested_formats.texi(mymacro,245) nested_formats.texi(,246) @item item 2 nested_formats.texi(,247) Call macro in itemize in format_command nested_formats.texi(,248) @group nested_formats.texi(mymacro,249) in macro nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @group nested_formats.texi(mymacro,249) @end group nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @group nested_formats.texi(mymacro,249) in format_command nested_formats.texi(mymacro,249) @end group nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) Something nested_formats.texi(mymacro,249) @group nested_formats.texi(mymacro,249) @end group nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) Something nested_formats.texi(mymacro,249) @group nested_formats.texi(mymacro,249) in group nested_formats.texi(mymacro,249) @end group nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) Something2 nested_formats.texi(mymacro,249) @group nested_formats.texi(mymacro,249) @end group nested_formats.texi(mymacro,249) After nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) Something2 nested_formats.texi(mymacro,249) @group nested_formats.texi(mymacro,249) in group nested_formats.texi(mymacro,249) @end group nested_formats.texi(mymacro,249) After nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @sp 2 nested_formats.texi(mymacro,249) @group nested_formats.texi(mymacro,249) in group nested_formats.texi(mymacro,249) @end group nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @group nested_formats.texi(mymacro,249) @quotation nested_formats.texi(mymacro,249) A quot---ation nested_formats.texi(mymacro,249) @end quotation nested_formats.texi(mymacro,249) @end group nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @subheading subheading nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @verbatim nested_formats.texi(mymacro,249) in verbatim nested_formats.texi(mymacro,249) @end verbatim nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @html nested_formats.texi(mymacro,249) html nested_formats.texi(mymacro,249) @end html nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,249) @item i--tem 1 nested_formats.texi(mymacro,249) @item i--tem 2 nested_formats.texi(mymacro,249) @end itemize nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @enumerate nested_formats.texi(mymacro,249) @item e--numerate nested_formats.texi(mymacro,249) @end enumerate nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,249) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,249) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,249) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,249) @item lone mu--ltitable item nested_formats.texi(mymacro,249) @end multitable nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @example nested_formats.texi(mymacro,249) e--xample some nested_formats.texi(mymacro,249) text nested_formats.texi(mymacro,249) @end example nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @smallexample nested_formats.texi(mymacro,249) s--mallexample nested_formats.texi(mymacro,249) @end smallexample nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,249) d--effn nested_formats.texi(mymacro,249) @end deffn nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @table @bullet nested_formats.texi(mymacro,249) @item a nested_formats.texi(mymacro,249) l--ine nested_formats.texi(mymacro,249) @end table nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @cartouche nested_formats.texi(mymacro,249) c--artouche nested_formats.texi(mymacro,249) @end cartouche nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @flushleft nested_formats.texi(mymacro,249) f--lushleft nested_formats.texi(mymacro,249) @end flushleft nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @flushright nested_formats.texi(mymacro,249) f--lushright nested_formats.texi(mymacro,249) @end flushright nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @center ce--ntered line nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @group nested_formats.texi(mymacro,249) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,249) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,249) @item i--tem 1 nested_formats.texi(mymacro,249) @item i--tem 2 nested_formats.texi(mymacro,249) @end itemize nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @enumerate nested_formats.texi(mymacro,249) @item e--numerate nested_formats.texi(mymacro,249) @end enumerate nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,249) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,249) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,249) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,249) @item lone mu--ltitable item nested_formats.texi(mymacro,249) @end multitable nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @example nested_formats.texi(mymacro,249) e--xample some nested_formats.texi(mymacro,249) text nested_formats.texi(mymacro,249) @end example nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @smallexample nested_formats.texi(mymacro,249) s--mallexample nested_formats.texi(mymacro,249) @end smallexample nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,249) d--effn nested_formats.texi(mymacro,249) @end deffn nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @table @bullet nested_formats.texi(mymacro,249) @item a nested_formats.texi(mymacro,249) l--ine nested_formats.texi(mymacro,249) @end table nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @cartouche nested_formats.texi(mymacro,249) c--artouche nested_formats.texi(mymacro,249) @end cartouche nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @flushleft nested_formats.texi(mymacro,249) f--lushleft nested_formats.texi(mymacro,249) @end flushleft nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @flushright nested_formats.texi(mymacro,249) f--lushright nested_formats.texi(mymacro,249) @end flushright nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @center ce--ntered line nested_formats.texi(mymacro,249) @end group nested_formats.texi(mymacro,249) nested_formats.texi(,250) @end group nested_formats.texi(,251) @end itemize nested_formats.texi(,252) nested_formats.texi(,253) Call macro in enumerate at the beginning of enumerate nested_formats.texi(,254) @enumerate nested_formats.texi(mymacro,255) @item nested_formats.texi(mymacro,255) in macro nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @group nested_formats.texi(mymacro,255) @end group nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @group nested_formats.texi(mymacro,255) in format_command nested_formats.texi(mymacro,255) @end group nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) Something nested_formats.texi(mymacro,255) @group nested_formats.texi(mymacro,255) @end group nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) Something nested_formats.texi(mymacro,255) @group nested_formats.texi(mymacro,255) in group nested_formats.texi(mymacro,255) @end group nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) Something2 nested_formats.texi(mymacro,255) @group nested_formats.texi(mymacro,255) @end group nested_formats.texi(mymacro,255) After nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) Something2 nested_formats.texi(mymacro,255) @group nested_formats.texi(mymacro,255) in group nested_formats.texi(mymacro,255) @end group nested_formats.texi(mymacro,255) After nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @sp 2 nested_formats.texi(mymacro,255) @group nested_formats.texi(mymacro,255) in group nested_formats.texi(mymacro,255) @end group nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @group nested_formats.texi(mymacro,255) @quotation nested_formats.texi(mymacro,255) A quot---ation nested_formats.texi(mymacro,255) @end quotation nested_formats.texi(mymacro,255) @end group nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @subheading subheading nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @verbatim nested_formats.texi(mymacro,255) in verbatim nested_formats.texi(mymacro,255) @end verbatim nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @html nested_formats.texi(mymacro,255) html nested_formats.texi(mymacro,255) @end html nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,255) @item i--tem 1 nested_formats.texi(mymacro,255) @item i--tem 2 nested_formats.texi(mymacro,255) @end itemize nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @enumerate nested_formats.texi(mymacro,255) @item e--numerate nested_formats.texi(mymacro,255) @end enumerate nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,255) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,255) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,255) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,255) @item lone mu--ltitable item nested_formats.texi(mymacro,255) @end multitable nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @example nested_formats.texi(mymacro,255) e--xample some nested_formats.texi(mymacro,255) text nested_formats.texi(mymacro,255) @end example nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @smallexample nested_formats.texi(mymacro,255) s--mallexample nested_formats.texi(mymacro,255) @end smallexample nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,255) d--effn nested_formats.texi(mymacro,255) @end deffn nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @table @bullet nested_formats.texi(mymacro,255) @item a nested_formats.texi(mymacro,255) l--ine nested_formats.texi(mymacro,255) @end table nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @cartouche nested_formats.texi(mymacro,255) c--artouche nested_formats.texi(mymacro,255) @end cartouche nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @flushleft nested_formats.texi(mymacro,255) f--lushleft nested_formats.texi(mymacro,255) @end flushleft nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @flushright nested_formats.texi(mymacro,255) f--lushright nested_formats.texi(mymacro,255) @end flushright nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @center ce--ntered line nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @group nested_formats.texi(mymacro,255) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,255) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,255) @item i--tem 1 nested_formats.texi(mymacro,255) @item i--tem 2 nested_formats.texi(mymacro,255) @end itemize nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @enumerate nested_formats.texi(mymacro,255) @item e--numerate nested_formats.texi(mymacro,255) @end enumerate nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,255) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,255) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,255) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,255) @item lone mu--ltitable item nested_formats.texi(mymacro,255) @end multitable nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @example nested_formats.texi(mymacro,255) e--xample some nested_formats.texi(mymacro,255) text nested_formats.texi(mymacro,255) @end example nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @smallexample nested_formats.texi(mymacro,255) s--mallexample nested_formats.texi(mymacro,255) @end smallexample nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,255) d--effn nested_formats.texi(mymacro,255) @end deffn nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @table @bullet nested_formats.texi(mymacro,255) @item a nested_formats.texi(mymacro,255) l--ine nested_formats.texi(mymacro,255) @end table nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @cartouche nested_formats.texi(mymacro,255) c--artouche nested_formats.texi(mymacro,255) @end cartouche nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @flushleft nested_formats.texi(mymacro,255) f--lushleft nested_formats.texi(mymacro,255) @end flushleft nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @flushright nested_formats.texi(mymacro,255) f--lushright nested_formats.texi(mymacro,255) @end flushright nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @center ce--ntered line nested_formats.texi(mymacro,255) @end group nested_formats.texi(mymacro,255) nested_formats.texi(,256) @item enumerate nested_formats.texi(,257) Call macro in enumerate nested_formats.texi(mymacro,258) in macro nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @group nested_formats.texi(mymacro,258) @end group nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @group nested_formats.texi(mymacro,258) in format_command nested_formats.texi(mymacro,258) @end group nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) Something nested_formats.texi(mymacro,258) @group nested_formats.texi(mymacro,258) @end group nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) Something nested_formats.texi(mymacro,258) @group nested_formats.texi(mymacro,258) in group nested_formats.texi(mymacro,258) @end group nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) Something2 nested_formats.texi(mymacro,258) @group nested_formats.texi(mymacro,258) @end group nested_formats.texi(mymacro,258) After nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) Something2 nested_formats.texi(mymacro,258) @group nested_formats.texi(mymacro,258) in group nested_formats.texi(mymacro,258) @end group nested_formats.texi(mymacro,258) After nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @sp 2 nested_formats.texi(mymacro,258) @group nested_formats.texi(mymacro,258) in group nested_formats.texi(mymacro,258) @end group nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @group nested_formats.texi(mymacro,258) @quotation nested_formats.texi(mymacro,258) A quot---ation nested_formats.texi(mymacro,258) @end quotation nested_formats.texi(mymacro,258) @end group nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @subheading subheading nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @verbatim nested_formats.texi(mymacro,258) in verbatim nested_formats.texi(mymacro,258) @end verbatim nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @html nested_formats.texi(mymacro,258) html nested_formats.texi(mymacro,258) @end html nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,258) @item i--tem 1 nested_formats.texi(mymacro,258) @item i--tem 2 nested_formats.texi(mymacro,258) @end itemize nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @enumerate nested_formats.texi(mymacro,258) @item e--numerate nested_formats.texi(mymacro,258) @end enumerate nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,258) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,258) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,258) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,258) @item lone mu--ltitable item nested_formats.texi(mymacro,258) @end multitable nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @example nested_formats.texi(mymacro,258) e--xample some nested_formats.texi(mymacro,258) text nested_formats.texi(mymacro,258) @end example nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @smallexample nested_formats.texi(mymacro,258) s--mallexample nested_formats.texi(mymacro,258) @end smallexample nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,258) d--effn nested_formats.texi(mymacro,258) @end deffn nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @table @bullet nested_formats.texi(mymacro,258) @item a nested_formats.texi(mymacro,258) l--ine nested_formats.texi(mymacro,258) @end table nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @cartouche nested_formats.texi(mymacro,258) c--artouche nested_formats.texi(mymacro,258) @end cartouche nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @flushleft nested_formats.texi(mymacro,258) f--lushleft nested_formats.texi(mymacro,258) @end flushleft nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @flushright nested_formats.texi(mymacro,258) f--lushright nested_formats.texi(mymacro,258) @end flushright nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @center ce--ntered line nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @group nested_formats.texi(mymacro,258) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,258) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,258) @item i--tem 1 nested_formats.texi(mymacro,258) @item i--tem 2 nested_formats.texi(mymacro,258) @end itemize nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @enumerate nested_formats.texi(mymacro,258) @item e--numerate nested_formats.texi(mymacro,258) @end enumerate nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,258) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,258) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,258) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,258) @item lone mu--ltitable item nested_formats.texi(mymacro,258) @end multitable nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @example nested_formats.texi(mymacro,258) e--xample some nested_formats.texi(mymacro,258) text nested_formats.texi(mymacro,258) @end example nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @smallexample nested_formats.texi(mymacro,258) s--mallexample nested_formats.texi(mymacro,258) @end smallexample nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,258) d--effn nested_formats.texi(mymacro,258) @end deffn nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @table @bullet nested_formats.texi(mymacro,258) @item a nested_formats.texi(mymacro,258) l--ine nested_formats.texi(mymacro,258) @end table nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @cartouche nested_formats.texi(mymacro,258) c--artouche nested_formats.texi(mymacro,258) @end cartouche nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @flushleft nested_formats.texi(mymacro,258) f--lushleft nested_formats.texi(mymacro,258) @end flushleft nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @flushright nested_formats.texi(mymacro,258) f--lushright nested_formats.texi(mymacro,258) @end flushright nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @center ce--ntered line nested_formats.texi(mymacro,258) @end group nested_formats.texi(mymacro,258) nested_formats.texi(,259) @item enumerate2 nested_formats.texi(,260) Call macro in enumerate in format_command nested_formats.texi(,261) @group nested_formats.texi(mymacro,262) in macro nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @group nested_formats.texi(mymacro,262) @end group nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @group nested_formats.texi(mymacro,262) in format_command nested_formats.texi(mymacro,262) @end group nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) Something nested_formats.texi(mymacro,262) @group nested_formats.texi(mymacro,262) @end group nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) Something nested_formats.texi(mymacro,262) @group nested_formats.texi(mymacro,262) in group nested_formats.texi(mymacro,262) @end group nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) Something2 nested_formats.texi(mymacro,262) @group nested_formats.texi(mymacro,262) @end group nested_formats.texi(mymacro,262) After nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) Something2 nested_formats.texi(mymacro,262) @group nested_formats.texi(mymacro,262) in group nested_formats.texi(mymacro,262) @end group nested_formats.texi(mymacro,262) After nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @sp 2 nested_formats.texi(mymacro,262) @group nested_formats.texi(mymacro,262) in group nested_formats.texi(mymacro,262) @end group nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @group nested_formats.texi(mymacro,262) @quotation nested_formats.texi(mymacro,262) A quot---ation nested_formats.texi(mymacro,262) @end quotation nested_formats.texi(mymacro,262) @end group nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @subheading subheading nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @verbatim nested_formats.texi(mymacro,262) in verbatim nested_formats.texi(mymacro,262) @end verbatim nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @html nested_formats.texi(mymacro,262) html nested_formats.texi(mymacro,262) @end html nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,262) @item i--tem 1 nested_formats.texi(mymacro,262) @item i--tem 2 nested_formats.texi(mymacro,262) @end itemize nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @enumerate nested_formats.texi(mymacro,262) @item e--numerate nested_formats.texi(mymacro,262) @end enumerate nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,262) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,262) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,262) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,262) @item lone mu--ltitable item nested_formats.texi(mymacro,262) @end multitable nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @example nested_formats.texi(mymacro,262) e--xample some nested_formats.texi(mymacro,262) text nested_formats.texi(mymacro,262) @end example nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @smallexample nested_formats.texi(mymacro,262) s--mallexample nested_formats.texi(mymacro,262) @end smallexample nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,262) d--effn nested_formats.texi(mymacro,262) @end deffn nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @table @bullet nested_formats.texi(mymacro,262) @item a nested_formats.texi(mymacro,262) l--ine nested_formats.texi(mymacro,262) @end table nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @cartouche nested_formats.texi(mymacro,262) c--artouche nested_formats.texi(mymacro,262) @end cartouche nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @flushleft nested_formats.texi(mymacro,262) f--lushleft nested_formats.texi(mymacro,262) @end flushleft nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @flushright nested_formats.texi(mymacro,262) f--lushright nested_formats.texi(mymacro,262) @end flushright nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @center ce--ntered line nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @group nested_formats.texi(mymacro,262) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,262) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,262) @item i--tem 1 nested_formats.texi(mymacro,262) @item i--tem 2 nested_formats.texi(mymacro,262) @end itemize nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @enumerate nested_formats.texi(mymacro,262) @item e--numerate nested_formats.texi(mymacro,262) @end enumerate nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,262) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,262) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,262) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,262) @item lone mu--ltitable item nested_formats.texi(mymacro,262) @end multitable nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @example nested_formats.texi(mymacro,262) e--xample some nested_formats.texi(mymacro,262) text nested_formats.texi(mymacro,262) @end example nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @smallexample nested_formats.texi(mymacro,262) s--mallexample nested_formats.texi(mymacro,262) @end smallexample nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,262) d--effn nested_formats.texi(mymacro,262) @end deffn nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @table @bullet nested_formats.texi(mymacro,262) @item a nested_formats.texi(mymacro,262) l--ine nested_formats.texi(mymacro,262) @end table nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @cartouche nested_formats.texi(mymacro,262) c--artouche nested_formats.texi(mymacro,262) @end cartouche nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @flushleft nested_formats.texi(mymacro,262) f--lushleft nested_formats.texi(mymacro,262) @end flushleft nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @flushright nested_formats.texi(mymacro,262) f--lushright nested_formats.texi(mymacro,262) @end flushright nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @center ce--ntered line nested_formats.texi(mymacro,262) @end group nested_formats.texi(mymacro,262) nested_formats.texi(,263) @end group nested_formats.texi(,264) @end enumerate nested_formats.texi(,265) nested_formats.texi(,266) @multitable @columnfractions 0.6 0.7 nested_formats.texi(,267) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(,268) @item multitable item @tab multitable tab. And after Call macro in mutitable nested_formats.texi(,269) after item nested_formats.texi(mymacro,270) @item nested_formats.texi(mymacro,270) in macro nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @group nested_formats.texi(mymacro,270) @end group nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @group nested_formats.texi(mymacro,270) in format_command nested_formats.texi(mymacro,270) @end group nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) Something nested_formats.texi(mymacro,270) @group nested_formats.texi(mymacro,270) @end group nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) Something nested_formats.texi(mymacro,270) @group nested_formats.texi(mymacro,270) in group nested_formats.texi(mymacro,270) @end group nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) Something2 nested_formats.texi(mymacro,270) @group nested_formats.texi(mymacro,270) @end group nested_formats.texi(mymacro,270) After nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) Something2 nested_formats.texi(mymacro,270) @group nested_formats.texi(mymacro,270) in group nested_formats.texi(mymacro,270) @end group nested_formats.texi(mymacro,270) After nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @sp 2 nested_formats.texi(mymacro,270) @group nested_formats.texi(mymacro,270) in group nested_formats.texi(mymacro,270) @end group nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @group nested_formats.texi(mymacro,270) @quotation nested_formats.texi(mymacro,270) A quot---ation nested_formats.texi(mymacro,270) @end quotation nested_formats.texi(mymacro,270) @end group nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @subheading subheading nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @verbatim nested_formats.texi(mymacro,270) in verbatim nested_formats.texi(mymacro,270) @end verbatim nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @html nested_formats.texi(mymacro,270) html nested_formats.texi(mymacro,270) @end html nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,270) @item i--tem 1 nested_formats.texi(mymacro,270) @item i--tem 2 nested_formats.texi(mymacro,270) @end itemize nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @enumerate nested_formats.texi(mymacro,270) @item e--numerate nested_formats.texi(mymacro,270) @end enumerate nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,270) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,270) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,270) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,270) @item lone mu--ltitable item nested_formats.texi(mymacro,270) @end multitable nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @example nested_formats.texi(mymacro,270) e--xample some nested_formats.texi(mymacro,270) text nested_formats.texi(mymacro,270) @end example nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @smallexample nested_formats.texi(mymacro,270) s--mallexample nested_formats.texi(mymacro,270) @end smallexample nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,270) d--effn nested_formats.texi(mymacro,270) @end deffn nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @table @bullet nested_formats.texi(mymacro,270) @item a nested_formats.texi(mymacro,270) l--ine nested_formats.texi(mymacro,270) @end table nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @cartouche nested_formats.texi(mymacro,270) c--artouche nested_formats.texi(mymacro,270) @end cartouche nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @flushleft nested_formats.texi(mymacro,270) f--lushleft nested_formats.texi(mymacro,270) @end flushleft nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @flushright nested_formats.texi(mymacro,270) f--lushright nested_formats.texi(mymacro,270) @end flushright nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @center ce--ntered line nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @group nested_formats.texi(mymacro,270) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,270) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,270) @item i--tem 1 nested_formats.texi(mymacro,270) @item i--tem 2 nested_formats.texi(mymacro,270) @end itemize nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @enumerate nested_formats.texi(mymacro,270) @item e--numerate nested_formats.texi(mymacro,270) @end enumerate nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,270) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,270) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,270) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,270) @item lone mu--ltitable item nested_formats.texi(mymacro,270) @end multitable nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @example nested_formats.texi(mymacro,270) e--xample some nested_formats.texi(mymacro,270) text nested_formats.texi(mymacro,270) @end example nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @smallexample nested_formats.texi(mymacro,270) s--mallexample nested_formats.texi(mymacro,270) @end smallexample nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,270) d--effn nested_formats.texi(mymacro,270) @end deffn nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @table @bullet nested_formats.texi(mymacro,270) @item a nested_formats.texi(mymacro,270) l--ine nested_formats.texi(mymacro,270) @end table nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @cartouche nested_formats.texi(mymacro,270) c--artouche nested_formats.texi(mymacro,270) @end cartouche nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @flushleft nested_formats.texi(mymacro,270) f--lushleft nested_formats.texi(mymacro,270) @end flushleft nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @flushright nested_formats.texi(mymacro,270) f--lushright nested_formats.texi(mymacro,270) @end flushright nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @center ce--ntered line nested_formats.texi(mymacro,270) @end group nested_formats.texi(mymacro,270) nested_formats.texi(,271) @item multitable item 2 @tab multitable tab 2 nested_formats.texi(,272) Call macro in mutitable nested_formats.texi(mymacro,273) in macro nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @group nested_formats.texi(mymacro,273) @end group nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @group nested_formats.texi(mymacro,273) in format_command nested_formats.texi(mymacro,273) @end group nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) Something nested_formats.texi(mymacro,273) @group nested_formats.texi(mymacro,273) @end group nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) Something nested_formats.texi(mymacro,273) @group nested_formats.texi(mymacro,273) in group nested_formats.texi(mymacro,273) @end group nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) Something2 nested_formats.texi(mymacro,273) @group nested_formats.texi(mymacro,273) @end group nested_formats.texi(mymacro,273) After nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) Something2 nested_formats.texi(mymacro,273) @group nested_formats.texi(mymacro,273) in group nested_formats.texi(mymacro,273) @end group nested_formats.texi(mymacro,273) After nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @sp 2 nested_formats.texi(mymacro,273) @group nested_formats.texi(mymacro,273) in group nested_formats.texi(mymacro,273) @end group nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @group nested_formats.texi(mymacro,273) @quotation nested_formats.texi(mymacro,273) A quot---ation nested_formats.texi(mymacro,273) @end quotation nested_formats.texi(mymacro,273) @end group nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @subheading subheading nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @verbatim nested_formats.texi(mymacro,273) in verbatim nested_formats.texi(mymacro,273) @end verbatim nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @html nested_formats.texi(mymacro,273) html nested_formats.texi(mymacro,273) @end html nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,273) @item i--tem 1 nested_formats.texi(mymacro,273) @item i--tem 2 nested_formats.texi(mymacro,273) @end itemize nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @enumerate nested_formats.texi(mymacro,273) @item e--numerate nested_formats.texi(mymacro,273) @end enumerate nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,273) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,273) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,273) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,273) @item lone mu--ltitable item nested_formats.texi(mymacro,273) @end multitable nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @example nested_formats.texi(mymacro,273) e--xample some nested_formats.texi(mymacro,273) text nested_formats.texi(mymacro,273) @end example nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @smallexample nested_formats.texi(mymacro,273) s--mallexample nested_formats.texi(mymacro,273) @end smallexample nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,273) d--effn nested_formats.texi(mymacro,273) @end deffn nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @table @bullet nested_formats.texi(mymacro,273) @item a nested_formats.texi(mymacro,273) l--ine nested_formats.texi(mymacro,273) @end table nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @cartouche nested_formats.texi(mymacro,273) c--artouche nested_formats.texi(mymacro,273) @end cartouche nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @flushleft nested_formats.texi(mymacro,273) f--lushleft nested_formats.texi(mymacro,273) @end flushleft nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @flushright nested_formats.texi(mymacro,273) f--lushright nested_formats.texi(mymacro,273) @end flushright nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @center ce--ntered line nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @group nested_formats.texi(mymacro,273) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,273) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,273) @item i--tem 1 nested_formats.texi(mymacro,273) @item i--tem 2 nested_formats.texi(mymacro,273) @end itemize nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @enumerate nested_formats.texi(mymacro,273) @item e--numerate nested_formats.texi(mymacro,273) @end enumerate nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,273) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,273) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,273) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,273) @item lone mu--ltitable item nested_formats.texi(mymacro,273) @end multitable nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @example nested_formats.texi(mymacro,273) e--xample some nested_formats.texi(mymacro,273) text nested_formats.texi(mymacro,273) @end example nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @smallexample nested_formats.texi(mymacro,273) s--mallexample nested_formats.texi(mymacro,273) @end smallexample nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,273) d--effn nested_formats.texi(mymacro,273) @end deffn nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @table @bullet nested_formats.texi(mymacro,273) @item a nested_formats.texi(mymacro,273) l--ine nested_formats.texi(mymacro,273) @end table nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @cartouche nested_formats.texi(mymacro,273) c--artouche nested_formats.texi(mymacro,273) @end cartouche nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @flushleft nested_formats.texi(mymacro,273) f--lushleft nested_formats.texi(mymacro,273) @end flushleft nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @flushright nested_formats.texi(mymacro,273) f--lushright nested_formats.texi(mymacro,273) @end flushright nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @center ce--ntered line nested_formats.texi(mymacro,273) @end group nested_formats.texi(mymacro,273) nested_formats.texi(,274) @item lone multitable item nested_formats.texi(,275) Call macro in mutitable in format_command nested_formats.texi(,276) @group nested_formats.texi(mymacro,277) in macro nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @group nested_formats.texi(mymacro,277) @end group nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @group nested_formats.texi(mymacro,277) in format_command nested_formats.texi(mymacro,277) @end group nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) Something nested_formats.texi(mymacro,277) @group nested_formats.texi(mymacro,277) @end group nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) Something nested_formats.texi(mymacro,277) @group nested_formats.texi(mymacro,277) in group nested_formats.texi(mymacro,277) @end group nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) Something2 nested_formats.texi(mymacro,277) @group nested_formats.texi(mymacro,277) @end group nested_formats.texi(mymacro,277) After nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) Something2 nested_formats.texi(mymacro,277) @group nested_formats.texi(mymacro,277) in group nested_formats.texi(mymacro,277) @end group nested_formats.texi(mymacro,277) After nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @sp 2 nested_formats.texi(mymacro,277) @group nested_formats.texi(mymacro,277) in group nested_formats.texi(mymacro,277) @end group nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @group nested_formats.texi(mymacro,277) @quotation nested_formats.texi(mymacro,277) A quot---ation nested_formats.texi(mymacro,277) @end quotation nested_formats.texi(mymacro,277) @end group nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @subheading subheading nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @verbatim nested_formats.texi(mymacro,277) in verbatim nested_formats.texi(mymacro,277) @end verbatim nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @html nested_formats.texi(mymacro,277) html nested_formats.texi(mymacro,277) @end html nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,277) @item i--tem 1 nested_formats.texi(mymacro,277) @item i--tem 2 nested_formats.texi(mymacro,277) @end itemize nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @enumerate nested_formats.texi(mymacro,277) @item e--numerate nested_formats.texi(mymacro,277) @end enumerate nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,277) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,277) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,277) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,277) @item lone mu--ltitable item nested_formats.texi(mymacro,277) @end multitable nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @example nested_formats.texi(mymacro,277) e--xample some nested_formats.texi(mymacro,277) text nested_formats.texi(mymacro,277) @end example nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @smallexample nested_formats.texi(mymacro,277) s--mallexample nested_formats.texi(mymacro,277) @end smallexample nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,277) d--effn nested_formats.texi(mymacro,277) @end deffn nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @table @bullet nested_formats.texi(mymacro,277) @item a nested_formats.texi(mymacro,277) l--ine nested_formats.texi(mymacro,277) @end table nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @cartouche nested_formats.texi(mymacro,277) c--artouche nested_formats.texi(mymacro,277) @end cartouche nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @flushleft nested_formats.texi(mymacro,277) f--lushleft nested_formats.texi(mymacro,277) @end flushleft nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @flushright nested_formats.texi(mymacro,277) f--lushright nested_formats.texi(mymacro,277) @end flushright nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @center ce--ntered line nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @group nested_formats.texi(mymacro,277) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,277) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,277) @item i--tem 1 nested_formats.texi(mymacro,277) @item i--tem 2 nested_formats.texi(mymacro,277) @end itemize nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @enumerate nested_formats.texi(mymacro,277) @item e--numerate nested_formats.texi(mymacro,277) @end enumerate nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,277) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,277) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,277) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,277) @item lone mu--ltitable item nested_formats.texi(mymacro,277) @end multitable nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @example nested_formats.texi(mymacro,277) e--xample some nested_formats.texi(mymacro,277) text nested_formats.texi(mymacro,277) @end example nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @smallexample nested_formats.texi(mymacro,277) s--mallexample nested_formats.texi(mymacro,277) @end smallexample nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,277) d--effn nested_formats.texi(mymacro,277) @end deffn nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @table @bullet nested_formats.texi(mymacro,277) @item a nested_formats.texi(mymacro,277) l--ine nested_formats.texi(mymacro,277) @end table nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @cartouche nested_formats.texi(mymacro,277) c--artouche nested_formats.texi(mymacro,277) @end cartouche nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @flushleft nested_formats.texi(mymacro,277) f--lushleft nested_formats.texi(mymacro,277) @end flushleft nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @flushright nested_formats.texi(mymacro,277) f--lushright nested_formats.texi(mymacro,277) @end flushright nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @center ce--ntered line nested_formats.texi(mymacro,277) @end group nested_formats.texi(mymacro,277) nested_formats.texi(,278) @end group nested_formats.texi(,279) @end multitable nested_formats.texi(,280) nested_formats.texi(,281) call macro at the example beginning nested_formats.texi(,282) @example nested_formats.texi(mymacro,283) in macro nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @group nested_formats.texi(mymacro,283) @end group nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @group nested_formats.texi(mymacro,283) in format_command nested_formats.texi(mymacro,283) @end group nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) Something nested_formats.texi(mymacro,283) @group nested_formats.texi(mymacro,283) @end group nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) Something nested_formats.texi(mymacro,283) @group nested_formats.texi(mymacro,283) in group nested_formats.texi(mymacro,283) @end group nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) Something2 nested_formats.texi(mymacro,283) @group nested_formats.texi(mymacro,283) @end group nested_formats.texi(mymacro,283) After nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) Something2 nested_formats.texi(mymacro,283) @group nested_formats.texi(mymacro,283) in group nested_formats.texi(mymacro,283) @end group nested_formats.texi(mymacro,283) After nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @sp 2 nested_formats.texi(mymacro,283) @group nested_formats.texi(mymacro,283) in group nested_formats.texi(mymacro,283) @end group nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @group nested_formats.texi(mymacro,283) @quotation nested_formats.texi(mymacro,283) A quot---ation nested_formats.texi(mymacro,283) @end quotation nested_formats.texi(mymacro,283) @end group nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @subheading subheading nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @verbatim nested_formats.texi(mymacro,283) in verbatim nested_formats.texi(mymacro,283) @end verbatim nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @html nested_formats.texi(mymacro,283) html nested_formats.texi(mymacro,283) @end html nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,283) @item i--tem 1 nested_formats.texi(mymacro,283) @item i--tem 2 nested_formats.texi(mymacro,283) @end itemize nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @enumerate nested_formats.texi(mymacro,283) @item e--numerate nested_formats.texi(mymacro,283) @end enumerate nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,283) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,283) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,283) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,283) @item lone mu--ltitable item nested_formats.texi(mymacro,283) @end multitable nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @example nested_formats.texi(mymacro,283) e--xample some nested_formats.texi(mymacro,283) text nested_formats.texi(mymacro,283) @end example nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @smallexample nested_formats.texi(mymacro,283) s--mallexample nested_formats.texi(mymacro,283) @end smallexample nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,283) d--effn nested_formats.texi(mymacro,283) @end deffn nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @table @bullet nested_formats.texi(mymacro,283) @item a nested_formats.texi(mymacro,283) l--ine nested_formats.texi(mymacro,283) @end table nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @cartouche nested_formats.texi(mymacro,283) c--artouche nested_formats.texi(mymacro,283) @end cartouche nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @flushleft nested_formats.texi(mymacro,283) f--lushleft nested_formats.texi(mymacro,283) @end flushleft nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @flushright nested_formats.texi(mymacro,283) f--lushright nested_formats.texi(mymacro,283) @end flushright nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @center ce--ntered line nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @group nested_formats.texi(mymacro,283) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,283) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,283) @item i--tem 1 nested_formats.texi(mymacro,283) @item i--tem 2 nested_formats.texi(mymacro,283) @end itemize nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @enumerate nested_formats.texi(mymacro,283) @item e--numerate nested_formats.texi(mymacro,283) @end enumerate nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,283) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,283) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,283) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,283) @item lone mu--ltitable item nested_formats.texi(mymacro,283) @end multitable nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @example nested_formats.texi(mymacro,283) e--xample some nested_formats.texi(mymacro,283) text nested_formats.texi(mymacro,283) @end example nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @smallexample nested_formats.texi(mymacro,283) s--mallexample nested_formats.texi(mymacro,283) @end smallexample nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,283) d--effn nested_formats.texi(mymacro,283) @end deffn nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @table @bullet nested_formats.texi(mymacro,283) @item a nested_formats.texi(mymacro,283) l--ine nested_formats.texi(mymacro,283) @end table nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @cartouche nested_formats.texi(mymacro,283) c--artouche nested_formats.texi(mymacro,283) @end cartouche nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @flushleft nested_formats.texi(mymacro,283) f--lushleft nested_formats.texi(mymacro,283) @end flushleft nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @flushright nested_formats.texi(mymacro,283) f--lushright nested_formats.texi(mymacro,283) @end flushright nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @center ce--ntered line nested_formats.texi(mymacro,283) @end group nested_formats.texi(mymacro,283) nested_formats.texi(,284) example some nested_formats.texi(,285) text nested_formats.texi(,286) call macro in example nested_formats.texi(mymacro,287) in macro nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @group nested_formats.texi(mymacro,287) @end group nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @group nested_formats.texi(mymacro,287) in format_command nested_formats.texi(mymacro,287) @end group nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) Something nested_formats.texi(mymacro,287) @group nested_formats.texi(mymacro,287) @end group nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) Something nested_formats.texi(mymacro,287) @group nested_formats.texi(mymacro,287) in group nested_formats.texi(mymacro,287) @end group nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) Something2 nested_formats.texi(mymacro,287) @group nested_formats.texi(mymacro,287) @end group nested_formats.texi(mymacro,287) After nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) Something2 nested_formats.texi(mymacro,287) @group nested_formats.texi(mymacro,287) in group nested_formats.texi(mymacro,287) @end group nested_formats.texi(mymacro,287) After nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @sp 2 nested_formats.texi(mymacro,287) @group nested_formats.texi(mymacro,287) in group nested_formats.texi(mymacro,287) @end group nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @group nested_formats.texi(mymacro,287) @quotation nested_formats.texi(mymacro,287) A quot---ation nested_formats.texi(mymacro,287) @end quotation nested_formats.texi(mymacro,287) @end group nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @subheading subheading nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @verbatim nested_formats.texi(mymacro,287) in verbatim nested_formats.texi(mymacro,287) @end verbatim nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @html nested_formats.texi(mymacro,287) html nested_formats.texi(mymacro,287) @end html nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,287) @item i--tem 1 nested_formats.texi(mymacro,287) @item i--tem 2 nested_formats.texi(mymacro,287) @end itemize nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @enumerate nested_formats.texi(mymacro,287) @item e--numerate nested_formats.texi(mymacro,287) @end enumerate nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,287) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,287) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,287) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,287) @item lone mu--ltitable item nested_formats.texi(mymacro,287) @end multitable nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @example nested_formats.texi(mymacro,287) e--xample some nested_formats.texi(mymacro,287) text nested_formats.texi(mymacro,287) @end example nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @smallexample nested_formats.texi(mymacro,287) s--mallexample nested_formats.texi(mymacro,287) @end smallexample nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,287) d--effn nested_formats.texi(mymacro,287) @end deffn nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @table @bullet nested_formats.texi(mymacro,287) @item a nested_formats.texi(mymacro,287) l--ine nested_formats.texi(mymacro,287) @end table nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @cartouche nested_formats.texi(mymacro,287) c--artouche nested_formats.texi(mymacro,287) @end cartouche nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @flushleft nested_formats.texi(mymacro,287) f--lushleft nested_formats.texi(mymacro,287) @end flushleft nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @flushright nested_formats.texi(mymacro,287) f--lushright nested_formats.texi(mymacro,287) @end flushright nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @center ce--ntered line nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @group nested_formats.texi(mymacro,287) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,287) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,287) @item i--tem 1 nested_formats.texi(mymacro,287) @item i--tem 2 nested_formats.texi(mymacro,287) @end itemize nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @enumerate nested_formats.texi(mymacro,287) @item e--numerate nested_formats.texi(mymacro,287) @end enumerate nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,287) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,287) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,287) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,287) @item lone mu--ltitable item nested_formats.texi(mymacro,287) @end multitable nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @example nested_formats.texi(mymacro,287) e--xample some nested_formats.texi(mymacro,287) text nested_formats.texi(mymacro,287) @end example nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @smallexample nested_formats.texi(mymacro,287) s--mallexample nested_formats.texi(mymacro,287) @end smallexample nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,287) d--effn nested_formats.texi(mymacro,287) @end deffn nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @table @bullet nested_formats.texi(mymacro,287) @item a nested_formats.texi(mymacro,287) l--ine nested_formats.texi(mymacro,287) @end table nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @cartouche nested_formats.texi(mymacro,287) c--artouche nested_formats.texi(mymacro,287) @end cartouche nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @flushleft nested_formats.texi(mymacro,287) f--lushleft nested_formats.texi(mymacro,287) @end flushleft nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @flushright nested_formats.texi(mymacro,287) f--lushright nested_formats.texi(mymacro,287) @end flushright nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @center ce--ntered line nested_formats.texi(mymacro,287) @end group nested_formats.texi(mymacro,287) nested_formats.texi(,288) nested_formats.texi(,289) more example text nested_formats.texi(,290) call macro in example in format_command nested_formats.texi(,291) @group nested_formats.texi(mymacro,292) in macro nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @group nested_formats.texi(mymacro,292) @end group nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @group nested_formats.texi(mymacro,292) in format_command nested_formats.texi(mymacro,292) @end group nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) Something nested_formats.texi(mymacro,292) @group nested_formats.texi(mymacro,292) @end group nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) Something nested_formats.texi(mymacro,292) @group nested_formats.texi(mymacro,292) in group nested_formats.texi(mymacro,292) @end group nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) Something2 nested_formats.texi(mymacro,292) @group nested_formats.texi(mymacro,292) @end group nested_formats.texi(mymacro,292) After nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) Something2 nested_formats.texi(mymacro,292) @group nested_formats.texi(mymacro,292) in group nested_formats.texi(mymacro,292) @end group nested_formats.texi(mymacro,292) After nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @sp 2 nested_formats.texi(mymacro,292) @group nested_formats.texi(mymacro,292) in group nested_formats.texi(mymacro,292) @end group nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @group nested_formats.texi(mymacro,292) @quotation nested_formats.texi(mymacro,292) A quot---ation nested_formats.texi(mymacro,292) @end quotation nested_formats.texi(mymacro,292) @end group nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @subheading subheading nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @verbatim nested_formats.texi(mymacro,292) in verbatim nested_formats.texi(mymacro,292) @end verbatim nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @html nested_formats.texi(mymacro,292) html nested_formats.texi(mymacro,292) @end html nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,292) @item i--tem 1 nested_formats.texi(mymacro,292) @item i--tem 2 nested_formats.texi(mymacro,292) @end itemize nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @enumerate nested_formats.texi(mymacro,292) @item e--numerate nested_formats.texi(mymacro,292) @end enumerate nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,292) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,292) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,292) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,292) @item lone mu--ltitable item nested_formats.texi(mymacro,292) @end multitable nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @example nested_formats.texi(mymacro,292) e--xample some nested_formats.texi(mymacro,292) text nested_formats.texi(mymacro,292) @end example nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @smallexample nested_formats.texi(mymacro,292) s--mallexample nested_formats.texi(mymacro,292) @end smallexample nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,292) d--effn nested_formats.texi(mymacro,292) @end deffn nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @table @bullet nested_formats.texi(mymacro,292) @item a nested_formats.texi(mymacro,292) l--ine nested_formats.texi(mymacro,292) @end table nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @cartouche nested_formats.texi(mymacro,292) c--artouche nested_formats.texi(mymacro,292) @end cartouche nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @flushleft nested_formats.texi(mymacro,292) f--lushleft nested_formats.texi(mymacro,292) @end flushleft nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @flushright nested_formats.texi(mymacro,292) f--lushright nested_formats.texi(mymacro,292) @end flushright nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @center ce--ntered line nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @group nested_formats.texi(mymacro,292) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,292) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,292) @item i--tem 1 nested_formats.texi(mymacro,292) @item i--tem 2 nested_formats.texi(mymacro,292) @end itemize nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @enumerate nested_formats.texi(mymacro,292) @item e--numerate nested_formats.texi(mymacro,292) @end enumerate nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,292) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,292) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,292) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,292) @item lone mu--ltitable item nested_formats.texi(mymacro,292) @end multitable nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @example nested_formats.texi(mymacro,292) e--xample some nested_formats.texi(mymacro,292) text nested_formats.texi(mymacro,292) @end example nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @smallexample nested_formats.texi(mymacro,292) s--mallexample nested_formats.texi(mymacro,292) @end smallexample nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,292) d--effn nested_formats.texi(mymacro,292) @end deffn nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @table @bullet nested_formats.texi(mymacro,292) @item a nested_formats.texi(mymacro,292) l--ine nested_formats.texi(mymacro,292) @end table nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @cartouche nested_formats.texi(mymacro,292) c--artouche nested_formats.texi(mymacro,292) @end cartouche nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @flushleft nested_formats.texi(mymacro,292) f--lushleft nested_formats.texi(mymacro,292) @end flushleft nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @flushright nested_formats.texi(mymacro,292) f--lushright nested_formats.texi(mymacro,292) @end flushright nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @center ce--ntered line nested_formats.texi(mymacro,292) @end group nested_formats.texi(mymacro,292) nested_formats.texi(,293) @end group nested_formats.texi(,294) @end example nested_formats.texi(,295) nested_formats.texi(,296) @smallexample nested_formats.texi(,297) s--mallexample nested_formats.texi(,298) @end smallexample nested_formats.texi(,299) nested_formats.texi(,300) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(,301) deffn nested_formats.texi(,302) call macro in deffn nested_formats.texi(mymacro,303) in macro nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @group nested_formats.texi(mymacro,303) @end group nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @group nested_formats.texi(mymacro,303) in format_command nested_formats.texi(mymacro,303) @end group nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) Something nested_formats.texi(mymacro,303) @group nested_formats.texi(mymacro,303) @end group nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) Something nested_formats.texi(mymacro,303) @group nested_formats.texi(mymacro,303) in group nested_formats.texi(mymacro,303) @end group nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) Something2 nested_formats.texi(mymacro,303) @group nested_formats.texi(mymacro,303) @end group nested_formats.texi(mymacro,303) After nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) Something2 nested_formats.texi(mymacro,303) @group nested_formats.texi(mymacro,303) in group nested_formats.texi(mymacro,303) @end group nested_formats.texi(mymacro,303) After nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @sp 2 nested_formats.texi(mymacro,303) @group nested_formats.texi(mymacro,303) in group nested_formats.texi(mymacro,303) @end group nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @group nested_formats.texi(mymacro,303) @quotation nested_formats.texi(mymacro,303) A quot---ation nested_formats.texi(mymacro,303) @end quotation nested_formats.texi(mymacro,303) @end group nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @subheading subheading nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @verbatim nested_formats.texi(mymacro,303) in verbatim nested_formats.texi(mymacro,303) @end verbatim nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @html nested_formats.texi(mymacro,303) html nested_formats.texi(mymacro,303) @end html nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,303) @item i--tem 1 nested_formats.texi(mymacro,303) @item i--tem 2 nested_formats.texi(mymacro,303) @end itemize nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @enumerate nested_formats.texi(mymacro,303) @item e--numerate nested_formats.texi(mymacro,303) @end enumerate nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,303) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,303) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,303) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,303) @item lone mu--ltitable item nested_formats.texi(mymacro,303) @end multitable nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @example nested_formats.texi(mymacro,303) e--xample some nested_formats.texi(mymacro,303) text nested_formats.texi(mymacro,303) @end example nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @smallexample nested_formats.texi(mymacro,303) s--mallexample nested_formats.texi(mymacro,303) @end smallexample nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,303) d--effn nested_formats.texi(mymacro,303) @end deffn nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @table @bullet nested_formats.texi(mymacro,303) @item a nested_formats.texi(mymacro,303) l--ine nested_formats.texi(mymacro,303) @end table nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @cartouche nested_formats.texi(mymacro,303) c--artouche nested_formats.texi(mymacro,303) @end cartouche nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @flushleft nested_formats.texi(mymacro,303) f--lushleft nested_formats.texi(mymacro,303) @end flushleft nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @flushright nested_formats.texi(mymacro,303) f--lushright nested_formats.texi(mymacro,303) @end flushright nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @center ce--ntered line nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @group nested_formats.texi(mymacro,303) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,303) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,303) @item i--tem 1 nested_formats.texi(mymacro,303) @item i--tem 2 nested_formats.texi(mymacro,303) @end itemize nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @enumerate nested_formats.texi(mymacro,303) @item e--numerate nested_formats.texi(mymacro,303) @end enumerate nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,303) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,303) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,303) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,303) @item lone mu--ltitable item nested_formats.texi(mymacro,303) @end multitable nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @example nested_formats.texi(mymacro,303) e--xample some nested_formats.texi(mymacro,303) text nested_formats.texi(mymacro,303) @end example nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @smallexample nested_formats.texi(mymacro,303) s--mallexample nested_formats.texi(mymacro,303) @end smallexample nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,303) d--effn nested_formats.texi(mymacro,303) @end deffn nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @table @bullet nested_formats.texi(mymacro,303) @item a nested_formats.texi(mymacro,303) l--ine nested_formats.texi(mymacro,303) @end table nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @cartouche nested_formats.texi(mymacro,303) c--artouche nested_formats.texi(mymacro,303) @end cartouche nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @flushleft nested_formats.texi(mymacro,303) f--lushleft nested_formats.texi(mymacro,303) @end flushleft nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @flushright nested_formats.texi(mymacro,303) f--lushright nested_formats.texi(mymacro,303) @end flushright nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @center ce--ntered line nested_formats.texi(mymacro,303) @end group nested_formats.texi(mymacro,303) nested_formats.texi(,304) deffn continues nested_formats.texi(,305) call macro in deffn in format_command nested_formats.texi(,306) @group nested_formats.texi(mymacro,307) in macro nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @group nested_formats.texi(mymacro,307) @end group nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @group nested_formats.texi(mymacro,307) in format_command nested_formats.texi(mymacro,307) @end group nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) Something nested_formats.texi(mymacro,307) @group nested_formats.texi(mymacro,307) @end group nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) Something nested_formats.texi(mymacro,307) @group nested_formats.texi(mymacro,307) in group nested_formats.texi(mymacro,307) @end group nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) Something2 nested_formats.texi(mymacro,307) @group nested_formats.texi(mymacro,307) @end group nested_formats.texi(mymacro,307) After nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) Something2 nested_formats.texi(mymacro,307) @group nested_formats.texi(mymacro,307) in group nested_formats.texi(mymacro,307) @end group nested_formats.texi(mymacro,307) After nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @sp 2 nested_formats.texi(mymacro,307) @group nested_formats.texi(mymacro,307) in group nested_formats.texi(mymacro,307) @end group nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @group nested_formats.texi(mymacro,307) @quotation nested_formats.texi(mymacro,307) A quot---ation nested_formats.texi(mymacro,307) @end quotation nested_formats.texi(mymacro,307) @end group nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @subheading subheading nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @verbatim nested_formats.texi(mymacro,307) in verbatim nested_formats.texi(mymacro,307) @end verbatim nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @html nested_formats.texi(mymacro,307) html nested_formats.texi(mymacro,307) @end html nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,307) @item i--tem 1 nested_formats.texi(mymacro,307) @item i--tem 2 nested_formats.texi(mymacro,307) @end itemize nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @enumerate nested_formats.texi(mymacro,307) @item e--numerate nested_formats.texi(mymacro,307) @end enumerate nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,307) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,307) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,307) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,307) @item lone mu--ltitable item nested_formats.texi(mymacro,307) @end multitable nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @example nested_formats.texi(mymacro,307) e--xample some nested_formats.texi(mymacro,307) text nested_formats.texi(mymacro,307) @end example nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @smallexample nested_formats.texi(mymacro,307) s--mallexample nested_formats.texi(mymacro,307) @end smallexample nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,307) d--effn nested_formats.texi(mymacro,307) @end deffn nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @table @bullet nested_formats.texi(mymacro,307) @item a nested_formats.texi(mymacro,307) l--ine nested_formats.texi(mymacro,307) @end table nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @cartouche nested_formats.texi(mymacro,307) c--artouche nested_formats.texi(mymacro,307) @end cartouche nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @flushleft nested_formats.texi(mymacro,307) f--lushleft nested_formats.texi(mymacro,307) @end flushleft nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @flushright nested_formats.texi(mymacro,307) f--lushright nested_formats.texi(mymacro,307) @end flushright nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @center ce--ntered line nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @group nested_formats.texi(mymacro,307) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,307) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,307) @item i--tem 1 nested_formats.texi(mymacro,307) @item i--tem 2 nested_formats.texi(mymacro,307) @end itemize nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @enumerate nested_formats.texi(mymacro,307) @item e--numerate nested_formats.texi(mymacro,307) @end enumerate nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,307) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,307) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,307) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,307) @item lone mu--ltitable item nested_formats.texi(mymacro,307) @end multitable nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @example nested_formats.texi(mymacro,307) e--xample some nested_formats.texi(mymacro,307) text nested_formats.texi(mymacro,307) @end example nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @smallexample nested_formats.texi(mymacro,307) s--mallexample nested_formats.texi(mymacro,307) @end smallexample nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,307) d--effn nested_formats.texi(mymacro,307) @end deffn nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @table @bullet nested_formats.texi(mymacro,307) @item a nested_formats.texi(mymacro,307) l--ine nested_formats.texi(mymacro,307) @end table nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @cartouche nested_formats.texi(mymacro,307) c--artouche nested_formats.texi(mymacro,307) @end cartouche nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @flushleft nested_formats.texi(mymacro,307) f--lushleft nested_formats.texi(mymacro,307) @end flushleft nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @flushright nested_formats.texi(mymacro,307) f--lushright nested_formats.texi(mymacro,307) @end flushright nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @center ce--ntered line nested_formats.texi(mymacro,307) @end group nested_formats.texi(mymacro,307) nested_formats.texi(,308) @end group nested_formats.texi(,309) @end deffn nested_formats.texi(,310) nested_formats.texi(,311) call macro in deffn at the beginning nested_formats.texi(,312) @deffn c--ategory2 d--effn_name2 a--rguments2... nested_formats.texi(mymacro,313) in macro nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @group nested_formats.texi(mymacro,313) @end group nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @group nested_formats.texi(mymacro,313) in format_command nested_formats.texi(mymacro,313) @end group nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) Something nested_formats.texi(mymacro,313) @group nested_formats.texi(mymacro,313) @end group nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) Something nested_formats.texi(mymacro,313) @group nested_formats.texi(mymacro,313) in group nested_formats.texi(mymacro,313) @end group nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) Something2 nested_formats.texi(mymacro,313) @group nested_formats.texi(mymacro,313) @end group nested_formats.texi(mymacro,313) After nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) Something2 nested_formats.texi(mymacro,313) @group nested_formats.texi(mymacro,313) in group nested_formats.texi(mymacro,313) @end group nested_formats.texi(mymacro,313) After nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @sp 2 nested_formats.texi(mymacro,313) @group nested_formats.texi(mymacro,313) in group nested_formats.texi(mymacro,313) @end group nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @group nested_formats.texi(mymacro,313) @quotation nested_formats.texi(mymacro,313) A quot---ation nested_formats.texi(mymacro,313) @end quotation nested_formats.texi(mymacro,313) @end group nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @subheading subheading nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @verbatim nested_formats.texi(mymacro,313) in verbatim nested_formats.texi(mymacro,313) @end verbatim nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @html nested_formats.texi(mymacro,313) html nested_formats.texi(mymacro,313) @end html nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,313) @item i--tem 1 nested_formats.texi(mymacro,313) @item i--tem 2 nested_formats.texi(mymacro,313) @end itemize nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @enumerate nested_formats.texi(mymacro,313) @item e--numerate nested_formats.texi(mymacro,313) @end enumerate nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,313) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,313) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,313) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,313) @item lone mu--ltitable item nested_formats.texi(mymacro,313) @end multitable nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @example nested_formats.texi(mymacro,313) e--xample some nested_formats.texi(mymacro,313) text nested_formats.texi(mymacro,313) @end example nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @smallexample nested_formats.texi(mymacro,313) s--mallexample nested_formats.texi(mymacro,313) @end smallexample nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,313) d--effn nested_formats.texi(mymacro,313) @end deffn nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @table @bullet nested_formats.texi(mymacro,313) @item a nested_formats.texi(mymacro,313) l--ine nested_formats.texi(mymacro,313) @end table nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @cartouche nested_formats.texi(mymacro,313) c--artouche nested_formats.texi(mymacro,313) @end cartouche nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @flushleft nested_formats.texi(mymacro,313) f--lushleft nested_formats.texi(mymacro,313) @end flushleft nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @flushright nested_formats.texi(mymacro,313) f--lushright nested_formats.texi(mymacro,313) @end flushright nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @center ce--ntered line nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @group nested_formats.texi(mymacro,313) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,313) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,313) @item i--tem 1 nested_formats.texi(mymacro,313) @item i--tem 2 nested_formats.texi(mymacro,313) @end itemize nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @enumerate nested_formats.texi(mymacro,313) @item e--numerate nested_formats.texi(mymacro,313) @end enumerate nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,313) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,313) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,313) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,313) @item lone mu--ltitable item nested_formats.texi(mymacro,313) @end multitable nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @example nested_formats.texi(mymacro,313) e--xample some nested_formats.texi(mymacro,313) text nested_formats.texi(mymacro,313) @end example nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @smallexample nested_formats.texi(mymacro,313) s--mallexample nested_formats.texi(mymacro,313) @end smallexample nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,313) d--effn nested_formats.texi(mymacro,313) @end deffn nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @table @bullet nested_formats.texi(mymacro,313) @item a nested_formats.texi(mymacro,313) l--ine nested_formats.texi(mymacro,313) @end table nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @cartouche nested_formats.texi(mymacro,313) c--artouche nested_formats.texi(mymacro,313) @end cartouche nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @flushleft nested_formats.texi(mymacro,313) f--lushleft nested_formats.texi(mymacro,313) @end flushleft nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @flushright nested_formats.texi(mymacro,313) f--lushright nested_formats.texi(mymacro,313) @end flushright nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @center ce--ntered line nested_formats.texi(mymacro,313) @end group nested_formats.texi(mymacro,313) nested_formats.texi(,314) @end deffn nested_formats.texi(,315) nested_formats.texi(,316) @table @bullet nested_formats.texi(,317) @item a line nested_formats.texi(,318) call macro in table nested_formats.texi(mymacro,319) in macro nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @group nested_formats.texi(mymacro,319) @end group nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @group nested_formats.texi(mymacro,319) in format_command nested_formats.texi(mymacro,319) @end group nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) Something nested_formats.texi(mymacro,319) @group nested_formats.texi(mymacro,319) @end group nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) Something nested_formats.texi(mymacro,319) @group nested_formats.texi(mymacro,319) in group nested_formats.texi(mymacro,319) @end group nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) Something2 nested_formats.texi(mymacro,319) @group nested_formats.texi(mymacro,319) @end group nested_formats.texi(mymacro,319) After nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) Something2 nested_formats.texi(mymacro,319) @group nested_formats.texi(mymacro,319) in group nested_formats.texi(mymacro,319) @end group nested_formats.texi(mymacro,319) After nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @sp 2 nested_formats.texi(mymacro,319) @group nested_formats.texi(mymacro,319) in group nested_formats.texi(mymacro,319) @end group nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @group nested_formats.texi(mymacro,319) @quotation nested_formats.texi(mymacro,319) A quot---ation nested_formats.texi(mymacro,319) @end quotation nested_formats.texi(mymacro,319) @end group nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @subheading subheading nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @verbatim nested_formats.texi(mymacro,319) in verbatim nested_formats.texi(mymacro,319) @end verbatim nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @html nested_formats.texi(mymacro,319) html nested_formats.texi(mymacro,319) @end html nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,319) @item i--tem 1 nested_formats.texi(mymacro,319) @item i--tem 2 nested_formats.texi(mymacro,319) @end itemize nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @enumerate nested_formats.texi(mymacro,319) @item e--numerate nested_formats.texi(mymacro,319) @end enumerate nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,319) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,319) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,319) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,319) @item lone mu--ltitable item nested_formats.texi(mymacro,319) @end multitable nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @example nested_formats.texi(mymacro,319) e--xample some nested_formats.texi(mymacro,319) text nested_formats.texi(mymacro,319) @end example nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @smallexample nested_formats.texi(mymacro,319) s--mallexample nested_formats.texi(mymacro,319) @end smallexample nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,319) d--effn nested_formats.texi(mymacro,319) @end deffn nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @table @bullet nested_formats.texi(mymacro,319) @item a nested_formats.texi(mymacro,319) l--ine nested_formats.texi(mymacro,319) @end table nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @cartouche nested_formats.texi(mymacro,319) c--artouche nested_formats.texi(mymacro,319) @end cartouche nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @flushleft nested_formats.texi(mymacro,319) f--lushleft nested_formats.texi(mymacro,319) @end flushleft nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @flushright nested_formats.texi(mymacro,319) f--lushright nested_formats.texi(mymacro,319) @end flushright nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @center ce--ntered line nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @group nested_formats.texi(mymacro,319) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,319) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,319) @item i--tem 1 nested_formats.texi(mymacro,319) @item i--tem 2 nested_formats.texi(mymacro,319) @end itemize nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @enumerate nested_formats.texi(mymacro,319) @item e--numerate nested_formats.texi(mymacro,319) @end enumerate nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,319) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,319) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,319) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,319) @item lone mu--ltitable item nested_formats.texi(mymacro,319) @end multitable nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @example nested_formats.texi(mymacro,319) e--xample some nested_formats.texi(mymacro,319) text nested_formats.texi(mymacro,319) @end example nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @smallexample nested_formats.texi(mymacro,319) s--mallexample nested_formats.texi(mymacro,319) @end smallexample nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,319) d--effn nested_formats.texi(mymacro,319) @end deffn nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @table @bullet nested_formats.texi(mymacro,319) @item a nested_formats.texi(mymacro,319) l--ine nested_formats.texi(mymacro,319) @end table nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @cartouche nested_formats.texi(mymacro,319) c--artouche nested_formats.texi(mymacro,319) @end cartouche nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @flushleft nested_formats.texi(mymacro,319) f--lushleft nested_formats.texi(mymacro,319) @end flushleft nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @flushright nested_formats.texi(mymacro,319) f--lushright nested_formats.texi(mymacro,319) @end flushright nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @center ce--ntered line nested_formats.texi(mymacro,319) @end group nested_formats.texi(mymacro,319) nested_formats.texi(,320) call macro in table at an item beginning nested_formats.texi(,321) @item a line nested_formats.texi(mymacro,322) in macro nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @group nested_formats.texi(mymacro,322) @end group nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @group nested_formats.texi(mymacro,322) in format_command nested_formats.texi(mymacro,322) @end group nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) Something nested_formats.texi(mymacro,322) @group nested_formats.texi(mymacro,322) @end group nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) Something nested_formats.texi(mymacro,322) @group nested_formats.texi(mymacro,322) in group nested_formats.texi(mymacro,322) @end group nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) Something2 nested_formats.texi(mymacro,322) @group nested_formats.texi(mymacro,322) @end group nested_formats.texi(mymacro,322) After nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) Something2 nested_formats.texi(mymacro,322) @group nested_formats.texi(mymacro,322) in group nested_formats.texi(mymacro,322) @end group nested_formats.texi(mymacro,322) After nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @sp 2 nested_formats.texi(mymacro,322) @group nested_formats.texi(mymacro,322) in group nested_formats.texi(mymacro,322) @end group nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @group nested_formats.texi(mymacro,322) @quotation nested_formats.texi(mymacro,322) A quot---ation nested_formats.texi(mymacro,322) @end quotation nested_formats.texi(mymacro,322) @end group nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @subheading subheading nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @verbatim nested_formats.texi(mymacro,322) in verbatim nested_formats.texi(mymacro,322) @end verbatim nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @html nested_formats.texi(mymacro,322) html nested_formats.texi(mymacro,322) @end html nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,322) @item i--tem 1 nested_formats.texi(mymacro,322) @item i--tem 2 nested_formats.texi(mymacro,322) @end itemize nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @enumerate nested_formats.texi(mymacro,322) @item e--numerate nested_formats.texi(mymacro,322) @end enumerate nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,322) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,322) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,322) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,322) @item lone mu--ltitable item nested_formats.texi(mymacro,322) @end multitable nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @example nested_formats.texi(mymacro,322) e--xample some nested_formats.texi(mymacro,322) text nested_formats.texi(mymacro,322) @end example nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @smallexample nested_formats.texi(mymacro,322) s--mallexample nested_formats.texi(mymacro,322) @end smallexample nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,322) d--effn nested_formats.texi(mymacro,322) @end deffn nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @table @bullet nested_formats.texi(mymacro,322) @item a nested_formats.texi(mymacro,322) l--ine nested_formats.texi(mymacro,322) @end table nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @cartouche nested_formats.texi(mymacro,322) c--artouche nested_formats.texi(mymacro,322) @end cartouche nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @flushleft nested_formats.texi(mymacro,322) f--lushleft nested_formats.texi(mymacro,322) @end flushleft nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @flushright nested_formats.texi(mymacro,322) f--lushright nested_formats.texi(mymacro,322) @end flushright nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @center ce--ntered line nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @group nested_formats.texi(mymacro,322) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,322) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,322) @item i--tem 1 nested_formats.texi(mymacro,322) @item i--tem 2 nested_formats.texi(mymacro,322) @end itemize nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @enumerate nested_formats.texi(mymacro,322) @item e--numerate nested_formats.texi(mymacro,322) @end enumerate nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,322) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,322) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,322) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,322) @item lone mu--ltitable item nested_formats.texi(mymacro,322) @end multitable nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @example nested_formats.texi(mymacro,322) e--xample some nested_formats.texi(mymacro,322) text nested_formats.texi(mymacro,322) @end example nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @smallexample nested_formats.texi(mymacro,322) s--mallexample nested_formats.texi(mymacro,322) @end smallexample nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,322) d--effn nested_formats.texi(mymacro,322) @end deffn nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @table @bullet nested_formats.texi(mymacro,322) @item a nested_formats.texi(mymacro,322) l--ine nested_formats.texi(mymacro,322) @end table nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @cartouche nested_formats.texi(mymacro,322) c--artouche nested_formats.texi(mymacro,322) @end cartouche nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @flushleft nested_formats.texi(mymacro,322) f--lushleft nested_formats.texi(mymacro,322) @end flushleft nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @flushright nested_formats.texi(mymacro,322) f--lushright nested_formats.texi(mymacro,322) @end flushright nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @center ce--ntered line nested_formats.texi(mymacro,322) @end group nested_formats.texi(mymacro,322) nested_formats.texi(,323) @item a line2 nested_formats.texi(,324) call macro in table in format_command nested_formats.texi(,325) @group nested_formats.texi(mymacro,326) in macro nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @group nested_formats.texi(mymacro,326) @end group nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @group nested_formats.texi(mymacro,326) in format_command nested_formats.texi(mymacro,326) @end group nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) Something nested_formats.texi(mymacro,326) @group nested_formats.texi(mymacro,326) @end group nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) Something nested_formats.texi(mymacro,326) @group nested_formats.texi(mymacro,326) in group nested_formats.texi(mymacro,326) @end group nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) Something2 nested_formats.texi(mymacro,326) @group nested_formats.texi(mymacro,326) @end group nested_formats.texi(mymacro,326) After nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) Something2 nested_formats.texi(mymacro,326) @group nested_formats.texi(mymacro,326) in group nested_formats.texi(mymacro,326) @end group nested_formats.texi(mymacro,326) After nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @sp 2 nested_formats.texi(mymacro,326) @group nested_formats.texi(mymacro,326) in group nested_formats.texi(mymacro,326) @end group nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @group nested_formats.texi(mymacro,326) @quotation nested_formats.texi(mymacro,326) A quot---ation nested_formats.texi(mymacro,326) @end quotation nested_formats.texi(mymacro,326) @end group nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @subheading subheading nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @verbatim nested_formats.texi(mymacro,326) in verbatim nested_formats.texi(mymacro,326) @end verbatim nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @html nested_formats.texi(mymacro,326) html nested_formats.texi(mymacro,326) @end html nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,326) @item i--tem 1 nested_formats.texi(mymacro,326) @item i--tem 2 nested_formats.texi(mymacro,326) @end itemize nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @enumerate nested_formats.texi(mymacro,326) @item e--numerate nested_formats.texi(mymacro,326) @end enumerate nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,326) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,326) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,326) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,326) @item lone mu--ltitable item nested_formats.texi(mymacro,326) @end multitable nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @example nested_formats.texi(mymacro,326) e--xample some nested_formats.texi(mymacro,326) text nested_formats.texi(mymacro,326) @end example nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @smallexample nested_formats.texi(mymacro,326) s--mallexample nested_formats.texi(mymacro,326) @end smallexample nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,326) d--effn nested_formats.texi(mymacro,326) @end deffn nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @table @bullet nested_formats.texi(mymacro,326) @item a nested_formats.texi(mymacro,326) l--ine nested_formats.texi(mymacro,326) @end table nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @cartouche nested_formats.texi(mymacro,326) c--artouche nested_formats.texi(mymacro,326) @end cartouche nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @flushleft nested_formats.texi(mymacro,326) f--lushleft nested_formats.texi(mymacro,326) @end flushleft nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @flushright nested_formats.texi(mymacro,326) f--lushright nested_formats.texi(mymacro,326) @end flushright nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @center ce--ntered line nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @group nested_formats.texi(mymacro,326) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,326) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,326) @item i--tem 1 nested_formats.texi(mymacro,326) @item i--tem 2 nested_formats.texi(mymacro,326) @end itemize nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @enumerate nested_formats.texi(mymacro,326) @item e--numerate nested_formats.texi(mymacro,326) @end enumerate nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,326) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,326) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,326) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,326) @item lone mu--ltitable item nested_formats.texi(mymacro,326) @end multitable nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @example nested_formats.texi(mymacro,326) e--xample some nested_formats.texi(mymacro,326) text nested_formats.texi(mymacro,326) @end example nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @smallexample nested_formats.texi(mymacro,326) s--mallexample nested_formats.texi(mymacro,326) @end smallexample nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,326) d--effn nested_formats.texi(mymacro,326) @end deffn nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @table @bullet nested_formats.texi(mymacro,326) @item a nested_formats.texi(mymacro,326) l--ine nested_formats.texi(mymacro,326) @end table nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @cartouche nested_formats.texi(mymacro,326) c--artouche nested_formats.texi(mymacro,326) @end cartouche nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @flushleft nested_formats.texi(mymacro,326) f--lushleft nested_formats.texi(mymacro,326) @end flushleft nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @flushright nested_formats.texi(mymacro,326) f--lushright nested_formats.texi(mymacro,326) @end flushright nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @center ce--ntered line nested_formats.texi(mymacro,326) @end group nested_formats.texi(mymacro,326) nested_formats.texi(,327) @end group nested_formats.texi(,328) @end table nested_formats.texi(,329) nested_formats.texi(,330) call macro at cartouche begin nested_formats.texi(,331) @cartouche nested_formats.texi(mymacro,332) in macro nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @group nested_formats.texi(mymacro,332) @end group nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @group nested_formats.texi(mymacro,332) in format_command nested_formats.texi(mymacro,332) @end group nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) Something nested_formats.texi(mymacro,332) @group nested_formats.texi(mymacro,332) @end group nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) Something nested_formats.texi(mymacro,332) @group nested_formats.texi(mymacro,332) in group nested_formats.texi(mymacro,332) @end group nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) Something2 nested_formats.texi(mymacro,332) @group nested_formats.texi(mymacro,332) @end group nested_formats.texi(mymacro,332) After nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) Something2 nested_formats.texi(mymacro,332) @group nested_formats.texi(mymacro,332) in group nested_formats.texi(mymacro,332) @end group nested_formats.texi(mymacro,332) After nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @sp 2 nested_formats.texi(mymacro,332) @group nested_formats.texi(mymacro,332) in group nested_formats.texi(mymacro,332) @end group nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @group nested_formats.texi(mymacro,332) @quotation nested_formats.texi(mymacro,332) A quot---ation nested_formats.texi(mymacro,332) @end quotation nested_formats.texi(mymacro,332) @end group nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @subheading subheading nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @verbatim nested_formats.texi(mymacro,332) in verbatim nested_formats.texi(mymacro,332) @end verbatim nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @html nested_formats.texi(mymacro,332) html nested_formats.texi(mymacro,332) @end html nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,332) @item i--tem 1 nested_formats.texi(mymacro,332) @item i--tem 2 nested_formats.texi(mymacro,332) @end itemize nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @enumerate nested_formats.texi(mymacro,332) @item e--numerate nested_formats.texi(mymacro,332) @end enumerate nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,332) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,332) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,332) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,332) @item lone mu--ltitable item nested_formats.texi(mymacro,332) @end multitable nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @example nested_formats.texi(mymacro,332) e--xample some nested_formats.texi(mymacro,332) text nested_formats.texi(mymacro,332) @end example nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @smallexample nested_formats.texi(mymacro,332) s--mallexample nested_formats.texi(mymacro,332) @end smallexample nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,332) d--effn nested_formats.texi(mymacro,332) @end deffn nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @table @bullet nested_formats.texi(mymacro,332) @item a nested_formats.texi(mymacro,332) l--ine nested_formats.texi(mymacro,332) @end table nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @cartouche nested_formats.texi(mymacro,332) c--artouche nested_formats.texi(mymacro,332) @end cartouche nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @flushleft nested_formats.texi(mymacro,332) f--lushleft nested_formats.texi(mymacro,332) @end flushleft nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @flushright nested_formats.texi(mymacro,332) f--lushright nested_formats.texi(mymacro,332) @end flushright nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @center ce--ntered line nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @group nested_formats.texi(mymacro,332) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,332) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,332) @item i--tem 1 nested_formats.texi(mymacro,332) @item i--tem 2 nested_formats.texi(mymacro,332) @end itemize nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @enumerate nested_formats.texi(mymacro,332) @item e--numerate nested_formats.texi(mymacro,332) @end enumerate nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,332) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,332) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,332) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,332) @item lone mu--ltitable item nested_formats.texi(mymacro,332) @end multitable nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @example nested_formats.texi(mymacro,332) e--xample some nested_formats.texi(mymacro,332) text nested_formats.texi(mymacro,332) @end example nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @smallexample nested_formats.texi(mymacro,332) s--mallexample nested_formats.texi(mymacro,332) @end smallexample nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,332) d--effn nested_formats.texi(mymacro,332) @end deffn nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @table @bullet nested_formats.texi(mymacro,332) @item a nested_formats.texi(mymacro,332) l--ine nested_formats.texi(mymacro,332) @end table nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @cartouche nested_formats.texi(mymacro,332) c--artouche nested_formats.texi(mymacro,332) @end cartouche nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @flushleft nested_formats.texi(mymacro,332) f--lushleft nested_formats.texi(mymacro,332) @end flushleft nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @flushright nested_formats.texi(mymacro,332) f--lushright nested_formats.texi(mymacro,332) @end flushright nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @center ce--ntered line nested_formats.texi(mymacro,332) @end group nested_formats.texi(mymacro,332) nested_formats.texi(,333) cartouche nested_formats.texi(,334) call macro in cartouche nested_formats.texi(mymacro,335) in macro nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @group nested_formats.texi(mymacro,335) @end group nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @group nested_formats.texi(mymacro,335) in format_command nested_formats.texi(mymacro,335) @end group nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) Something nested_formats.texi(mymacro,335) @group nested_formats.texi(mymacro,335) @end group nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) Something nested_formats.texi(mymacro,335) @group nested_formats.texi(mymacro,335) in group nested_formats.texi(mymacro,335) @end group nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) Something2 nested_formats.texi(mymacro,335) @group nested_formats.texi(mymacro,335) @end group nested_formats.texi(mymacro,335) After nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) Something2 nested_formats.texi(mymacro,335) @group nested_formats.texi(mymacro,335) in group nested_formats.texi(mymacro,335) @end group nested_formats.texi(mymacro,335) After nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @sp 2 nested_formats.texi(mymacro,335) @group nested_formats.texi(mymacro,335) in group nested_formats.texi(mymacro,335) @end group nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @group nested_formats.texi(mymacro,335) @quotation nested_formats.texi(mymacro,335) A quot---ation nested_formats.texi(mymacro,335) @end quotation nested_formats.texi(mymacro,335) @end group nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @subheading subheading nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @verbatim nested_formats.texi(mymacro,335) in verbatim nested_formats.texi(mymacro,335) @end verbatim nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @html nested_formats.texi(mymacro,335) html nested_formats.texi(mymacro,335) @end html nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,335) @item i--tem 1 nested_formats.texi(mymacro,335) @item i--tem 2 nested_formats.texi(mymacro,335) @end itemize nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @enumerate nested_formats.texi(mymacro,335) @item e--numerate nested_formats.texi(mymacro,335) @end enumerate nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,335) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,335) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,335) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,335) @item lone mu--ltitable item nested_formats.texi(mymacro,335) @end multitable nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @example nested_formats.texi(mymacro,335) e--xample some nested_formats.texi(mymacro,335) text nested_formats.texi(mymacro,335) @end example nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @smallexample nested_formats.texi(mymacro,335) s--mallexample nested_formats.texi(mymacro,335) @end smallexample nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,335) d--effn nested_formats.texi(mymacro,335) @end deffn nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @table @bullet nested_formats.texi(mymacro,335) @item a nested_formats.texi(mymacro,335) l--ine nested_formats.texi(mymacro,335) @end table nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @cartouche nested_formats.texi(mymacro,335) c--artouche nested_formats.texi(mymacro,335) @end cartouche nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @flushleft nested_formats.texi(mymacro,335) f--lushleft nested_formats.texi(mymacro,335) @end flushleft nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @flushright nested_formats.texi(mymacro,335) f--lushright nested_formats.texi(mymacro,335) @end flushright nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @center ce--ntered line nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @group nested_formats.texi(mymacro,335) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,335) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,335) @item i--tem 1 nested_formats.texi(mymacro,335) @item i--tem 2 nested_formats.texi(mymacro,335) @end itemize nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @enumerate nested_formats.texi(mymacro,335) @item e--numerate nested_formats.texi(mymacro,335) @end enumerate nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,335) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,335) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,335) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,335) @item lone mu--ltitable item nested_formats.texi(mymacro,335) @end multitable nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @example nested_formats.texi(mymacro,335) e--xample some nested_formats.texi(mymacro,335) text nested_formats.texi(mymacro,335) @end example nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @smallexample nested_formats.texi(mymacro,335) s--mallexample nested_formats.texi(mymacro,335) @end smallexample nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,335) d--effn nested_formats.texi(mymacro,335) @end deffn nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @table @bullet nested_formats.texi(mymacro,335) @item a nested_formats.texi(mymacro,335) l--ine nested_formats.texi(mymacro,335) @end table nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @cartouche nested_formats.texi(mymacro,335) c--artouche nested_formats.texi(mymacro,335) @end cartouche nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @flushleft nested_formats.texi(mymacro,335) f--lushleft nested_formats.texi(mymacro,335) @end flushleft nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @flushright nested_formats.texi(mymacro,335) f--lushright nested_formats.texi(mymacro,335) @end flushright nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @center ce--ntered line nested_formats.texi(mymacro,335) @end group nested_formats.texi(mymacro,335) nested_formats.texi(,336) call macro in cartouche in format_command nested_formats.texi(,337) @group nested_formats.texi(mymacro,338) in macro nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @group nested_formats.texi(mymacro,338) @end group nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @group nested_formats.texi(mymacro,338) in format_command nested_formats.texi(mymacro,338) @end group nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) Something nested_formats.texi(mymacro,338) @group nested_formats.texi(mymacro,338) @end group nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) Something nested_formats.texi(mymacro,338) @group nested_formats.texi(mymacro,338) in group nested_formats.texi(mymacro,338) @end group nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) Something2 nested_formats.texi(mymacro,338) @group nested_formats.texi(mymacro,338) @end group nested_formats.texi(mymacro,338) After nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) Something2 nested_formats.texi(mymacro,338) @group nested_formats.texi(mymacro,338) in group nested_formats.texi(mymacro,338) @end group nested_formats.texi(mymacro,338) After nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @sp 2 nested_formats.texi(mymacro,338) @group nested_formats.texi(mymacro,338) in group nested_formats.texi(mymacro,338) @end group nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @group nested_formats.texi(mymacro,338) @quotation nested_formats.texi(mymacro,338) A quot---ation nested_formats.texi(mymacro,338) @end quotation nested_formats.texi(mymacro,338) @end group nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @subheading subheading nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @verbatim nested_formats.texi(mymacro,338) in verbatim nested_formats.texi(mymacro,338) @end verbatim nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @html nested_formats.texi(mymacro,338) html nested_formats.texi(mymacro,338) @end html nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,338) @item i--tem 1 nested_formats.texi(mymacro,338) @item i--tem 2 nested_formats.texi(mymacro,338) @end itemize nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @enumerate nested_formats.texi(mymacro,338) @item e--numerate nested_formats.texi(mymacro,338) @end enumerate nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,338) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,338) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,338) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,338) @item lone mu--ltitable item nested_formats.texi(mymacro,338) @end multitable nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @example nested_formats.texi(mymacro,338) e--xample some nested_formats.texi(mymacro,338) text nested_formats.texi(mymacro,338) @end example nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @smallexample nested_formats.texi(mymacro,338) s--mallexample nested_formats.texi(mymacro,338) @end smallexample nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,338) d--effn nested_formats.texi(mymacro,338) @end deffn nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @table @bullet nested_formats.texi(mymacro,338) @item a nested_formats.texi(mymacro,338) l--ine nested_formats.texi(mymacro,338) @end table nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @cartouche nested_formats.texi(mymacro,338) c--artouche nested_formats.texi(mymacro,338) @end cartouche nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @flushleft nested_formats.texi(mymacro,338) f--lushleft nested_formats.texi(mymacro,338) @end flushleft nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @flushright nested_formats.texi(mymacro,338) f--lushright nested_formats.texi(mymacro,338) @end flushright nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @center ce--ntered line nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @group nested_formats.texi(mymacro,338) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,338) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,338) @item i--tem 1 nested_formats.texi(mymacro,338) @item i--tem 2 nested_formats.texi(mymacro,338) @end itemize nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @enumerate nested_formats.texi(mymacro,338) @item e--numerate nested_formats.texi(mymacro,338) @end enumerate nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,338) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,338) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,338) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,338) @item lone mu--ltitable item nested_formats.texi(mymacro,338) @end multitable nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @example nested_formats.texi(mymacro,338) e--xample some nested_formats.texi(mymacro,338) text nested_formats.texi(mymacro,338) @end example nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @smallexample nested_formats.texi(mymacro,338) s--mallexample nested_formats.texi(mymacro,338) @end smallexample nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,338) d--effn nested_formats.texi(mymacro,338) @end deffn nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @table @bullet nested_formats.texi(mymacro,338) @item a nested_formats.texi(mymacro,338) l--ine nested_formats.texi(mymacro,338) @end table nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @cartouche nested_formats.texi(mymacro,338) c--artouche nested_formats.texi(mymacro,338) @end cartouche nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @flushleft nested_formats.texi(mymacro,338) f--lushleft nested_formats.texi(mymacro,338) @end flushleft nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @flushright nested_formats.texi(mymacro,338) f--lushright nested_formats.texi(mymacro,338) @end flushright nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @center ce--ntered line nested_formats.texi(mymacro,338) @end group nested_formats.texi(mymacro,338) nested_formats.texi(,339) @end group nested_formats.texi(,340) @end cartouche nested_formats.texi(,341) nested_formats.texi(,342) @flushleft nested_formats.texi(,343) call macro in flushleft nested_formats.texi(mymacro,344) in macro nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @group nested_formats.texi(mymacro,344) @end group nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @group nested_formats.texi(mymacro,344) in format_command nested_formats.texi(mymacro,344) @end group nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) Something nested_formats.texi(mymacro,344) @group nested_formats.texi(mymacro,344) @end group nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) Something nested_formats.texi(mymacro,344) @group nested_formats.texi(mymacro,344) in group nested_formats.texi(mymacro,344) @end group nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) Something2 nested_formats.texi(mymacro,344) @group nested_formats.texi(mymacro,344) @end group nested_formats.texi(mymacro,344) After nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) Something2 nested_formats.texi(mymacro,344) @group nested_formats.texi(mymacro,344) in group nested_formats.texi(mymacro,344) @end group nested_formats.texi(mymacro,344) After nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @sp 2 nested_formats.texi(mymacro,344) @group nested_formats.texi(mymacro,344) in group nested_formats.texi(mymacro,344) @end group nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @group nested_formats.texi(mymacro,344) @quotation nested_formats.texi(mymacro,344) A quot---ation nested_formats.texi(mymacro,344) @end quotation nested_formats.texi(mymacro,344) @end group nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @subheading subheading nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @verbatim nested_formats.texi(mymacro,344) in verbatim nested_formats.texi(mymacro,344) @end verbatim nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @html nested_formats.texi(mymacro,344) html nested_formats.texi(mymacro,344) @end html nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,344) @item i--tem 1 nested_formats.texi(mymacro,344) @item i--tem 2 nested_formats.texi(mymacro,344) @end itemize nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @enumerate nested_formats.texi(mymacro,344) @item e--numerate nested_formats.texi(mymacro,344) @end enumerate nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,344) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,344) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,344) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,344) @item lone mu--ltitable item nested_formats.texi(mymacro,344) @end multitable nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @example nested_formats.texi(mymacro,344) e--xample some nested_formats.texi(mymacro,344) text nested_formats.texi(mymacro,344) @end example nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @smallexample nested_formats.texi(mymacro,344) s--mallexample nested_formats.texi(mymacro,344) @end smallexample nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,344) d--effn nested_formats.texi(mymacro,344) @end deffn nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @table @bullet nested_formats.texi(mymacro,344) @item a nested_formats.texi(mymacro,344) l--ine nested_formats.texi(mymacro,344) @end table nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @cartouche nested_formats.texi(mymacro,344) c--artouche nested_formats.texi(mymacro,344) @end cartouche nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @flushleft nested_formats.texi(mymacro,344) f--lushleft nested_formats.texi(mymacro,344) @end flushleft nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @flushright nested_formats.texi(mymacro,344) f--lushright nested_formats.texi(mymacro,344) @end flushright nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @center ce--ntered line nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @group nested_formats.texi(mymacro,344) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,344) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,344) @item i--tem 1 nested_formats.texi(mymacro,344) @item i--tem 2 nested_formats.texi(mymacro,344) @end itemize nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @enumerate nested_formats.texi(mymacro,344) @item e--numerate nested_formats.texi(mymacro,344) @end enumerate nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,344) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,344) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,344) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,344) @item lone mu--ltitable item nested_formats.texi(mymacro,344) @end multitable nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @example nested_formats.texi(mymacro,344) e--xample some nested_formats.texi(mymacro,344) text nested_formats.texi(mymacro,344) @end example nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @smallexample nested_formats.texi(mymacro,344) s--mallexample nested_formats.texi(mymacro,344) @end smallexample nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,344) d--effn nested_formats.texi(mymacro,344) @end deffn nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @table @bullet nested_formats.texi(mymacro,344) @item a nested_formats.texi(mymacro,344) l--ine nested_formats.texi(mymacro,344) @end table nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @cartouche nested_formats.texi(mymacro,344) c--artouche nested_formats.texi(mymacro,344) @end cartouche nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @flushleft nested_formats.texi(mymacro,344) f--lushleft nested_formats.texi(mymacro,344) @end flushleft nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @flushright nested_formats.texi(mymacro,344) f--lushright nested_formats.texi(mymacro,344) @end flushright nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @center ce--ntered line nested_formats.texi(mymacro,344) @end group nested_formats.texi(mymacro,344) nested_formats.texi(,345) flushleft nested_formats.texi(,346) call macro in flushleft in format_command nested_formats.texi(,347) @group nested_formats.texi(mymacro,348) in macro nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @group nested_formats.texi(mymacro,348) @end group nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @group nested_formats.texi(mymacro,348) in format_command nested_formats.texi(mymacro,348) @end group nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) Something nested_formats.texi(mymacro,348) @group nested_formats.texi(mymacro,348) @end group nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) Something nested_formats.texi(mymacro,348) @group nested_formats.texi(mymacro,348) in group nested_formats.texi(mymacro,348) @end group nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) Something2 nested_formats.texi(mymacro,348) @group nested_formats.texi(mymacro,348) @end group nested_formats.texi(mymacro,348) After nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) Something2 nested_formats.texi(mymacro,348) @group nested_formats.texi(mymacro,348) in group nested_formats.texi(mymacro,348) @end group nested_formats.texi(mymacro,348) After nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @sp 2 nested_formats.texi(mymacro,348) @group nested_formats.texi(mymacro,348) in group nested_formats.texi(mymacro,348) @end group nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @group nested_formats.texi(mymacro,348) @quotation nested_formats.texi(mymacro,348) A quot---ation nested_formats.texi(mymacro,348) @end quotation nested_formats.texi(mymacro,348) @end group nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @subheading subheading nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @verbatim nested_formats.texi(mymacro,348) in verbatim nested_formats.texi(mymacro,348) @end verbatim nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @html nested_formats.texi(mymacro,348) html nested_formats.texi(mymacro,348) @end html nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,348) @item i--tem 1 nested_formats.texi(mymacro,348) @item i--tem 2 nested_formats.texi(mymacro,348) @end itemize nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @enumerate nested_formats.texi(mymacro,348) @item e--numerate nested_formats.texi(mymacro,348) @end enumerate nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,348) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,348) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,348) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,348) @item lone mu--ltitable item nested_formats.texi(mymacro,348) @end multitable nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @example nested_formats.texi(mymacro,348) e--xample some nested_formats.texi(mymacro,348) text nested_formats.texi(mymacro,348) @end example nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @smallexample nested_formats.texi(mymacro,348) s--mallexample nested_formats.texi(mymacro,348) @end smallexample nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,348) d--effn nested_formats.texi(mymacro,348) @end deffn nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @table @bullet nested_formats.texi(mymacro,348) @item a nested_formats.texi(mymacro,348) l--ine nested_formats.texi(mymacro,348) @end table nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @cartouche nested_formats.texi(mymacro,348) c--artouche nested_formats.texi(mymacro,348) @end cartouche nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @flushleft nested_formats.texi(mymacro,348) f--lushleft nested_formats.texi(mymacro,348) @end flushleft nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @flushright nested_formats.texi(mymacro,348) f--lushright nested_formats.texi(mymacro,348) @end flushright nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @center ce--ntered line nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @group nested_formats.texi(mymacro,348) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,348) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,348) @item i--tem 1 nested_formats.texi(mymacro,348) @item i--tem 2 nested_formats.texi(mymacro,348) @end itemize nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @enumerate nested_formats.texi(mymacro,348) @item e--numerate nested_formats.texi(mymacro,348) @end enumerate nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,348) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,348) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,348) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,348) @item lone mu--ltitable item nested_formats.texi(mymacro,348) @end multitable nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @example nested_formats.texi(mymacro,348) e--xample some nested_formats.texi(mymacro,348) text nested_formats.texi(mymacro,348) @end example nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @smallexample nested_formats.texi(mymacro,348) s--mallexample nested_formats.texi(mymacro,348) @end smallexample nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,348) d--effn nested_formats.texi(mymacro,348) @end deffn nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @table @bullet nested_formats.texi(mymacro,348) @item a nested_formats.texi(mymacro,348) l--ine nested_formats.texi(mymacro,348) @end table nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @cartouche nested_formats.texi(mymacro,348) c--artouche nested_formats.texi(mymacro,348) @end cartouche nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @flushleft nested_formats.texi(mymacro,348) f--lushleft nested_formats.texi(mymacro,348) @end flushleft nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @flushright nested_formats.texi(mymacro,348) f--lushright nested_formats.texi(mymacro,348) @end flushright nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @center ce--ntered line nested_formats.texi(mymacro,348) @end group nested_formats.texi(mymacro,348) nested_formats.texi(,349) @end group nested_formats.texi(,350) @end flushleft nested_formats.texi(,351) nested_formats.texi(,352) @flushright nested_formats.texi(mymacro,353) in macro nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @group nested_formats.texi(mymacro,353) @end group nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @group nested_formats.texi(mymacro,353) in format_command nested_formats.texi(mymacro,353) @end group nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) Something nested_formats.texi(mymacro,353) @group nested_formats.texi(mymacro,353) @end group nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) Something nested_formats.texi(mymacro,353) @group nested_formats.texi(mymacro,353) in group nested_formats.texi(mymacro,353) @end group nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) Something2 nested_formats.texi(mymacro,353) @group nested_formats.texi(mymacro,353) @end group nested_formats.texi(mymacro,353) After nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) Something2 nested_formats.texi(mymacro,353) @group nested_formats.texi(mymacro,353) in group nested_formats.texi(mymacro,353) @end group nested_formats.texi(mymacro,353) After nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @sp 2 nested_formats.texi(mymacro,353) @group nested_formats.texi(mymacro,353) in group nested_formats.texi(mymacro,353) @end group nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @group nested_formats.texi(mymacro,353) @quotation nested_formats.texi(mymacro,353) A quot---ation nested_formats.texi(mymacro,353) @end quotation nested_formats.texi(mymacro,353) @end group nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @subheading subheading nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @verbatim nested_formats.texi(mymacro,353) in verbatim nested_formats.texi(mymacro,353) @end verbatim nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @html nested_formats.texi(mymacro,353) html nested_formats.texi(mymacro,353) @end html nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,353) @item i--tem 1 nested_formats.texi(mymacro,353) @item i--tem 2 nested_formats.texi(mymacro,353) @end itemize nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @enumerate nested_formats.texi(mymacro,353) @item e--numerate nested_formats.texi(mymacro,353) @end enumerate nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,353) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,353) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,353) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,353) @item lone mu--ltitable item nested_formats.texi(mymacro,353) @end multitable nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @example nested_formats.texi(mymacro,353) e--xample some nested_formats.texi(mymacro,353) text nested_formats.texi(mymacro,353) @end example nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @smallexample nested_formats.texi(mymacro,353) s--mallexample nested_formats.texi(mymacro,353) @end smallexample nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,353) d--effn nested_formats.texi(mymacro,353) @end deffn nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @table @bullet nested_formats.texi(mymacro,353) @item a nested_formats.texi(mymacro,353) l--ine nested_formats.texi(mymacro,353) @end table nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @cartouche nested_formats.texi(mymacro,353) c--artouche nested_formats.texi(mymacro,353) @end cartouche nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @flushleft nested_formats.texi(mymacro,353) f--lushleft nested_formats.texi(mymacro,353) @end flushleft nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @flushright nested_formats.texi(mymacro,353) f--lushright nested_formats.texi(mymacro,353) @end flushright nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @center ce--ntered line nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @group nested_formats.texi(mymacro,353) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,353) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,353) @item i--tem 1 nested_formats.texi(mymacro,353) @item i--tem 2 nested_formats.texi(mymacro,353) @end itemize nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @enumerate nested_formats.texi(mymacro,353) @item e--numerate nested_formats.texi(mymacro,353) @end enumerate nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,353) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,353) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,353) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,353) @item lone mu--ltitable item nested_formats.texi(mymacro,353) @end multitable nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @example nested_formats.texi(mymacro,353) e--xample some nested_formats.texi(mymacro,353) text nested_formats.texi(mymacro,353) @end example nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @smallexample nested_formats.texi(mymacro,353) s--mallexample nested_formats.texi(mymacro,353) @end smallexample nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,353) d--effn nested_formats.texi(mymacro,353) @end deffn nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @table @bullet nested_formats.texi(mymacro,353) @item a nested_formats.texi(mymacro,353) l--ine nested_formats.texi(mymacro,353) @end table nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @cartouche nested_formats.texi(mymacro,353) c--artouche nested_formats.texi(mymacro,353) @end cartouche nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @flushleft nested_formats.texi(mymacro,353) f--lushleft nested_formats.texi(mymacro,353) @end flushleft nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @flushright nested_formats.texi(mymacro,353) f--lushright nested_formats.texi(mymacro,353) @end flushright nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @center ce--ntered line nested_formats.texi(mymacro,353) @end group nested_formats.texi(mymacro,353) nested_formats.texi(,354) flushright nested_formats.texi(,355) @group nested_formats.texi(mymacro,356) in macro nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @group nested_formats.texi(mymacro,356) @end group nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @group nested_formats.texi(mymacro,356) in format_command nested_formats.texi(mymacro,356) @end group nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) Something nested_formats.texi(mymacro,356) @group nested_formats.texi(mymacro,356) @end group nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) Something nested_formats.texi(mymacro,356) @group nested_formats.texi(mymacro,356) in group nested_formats.texi(mymacro,356) @end group nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) Something2 nested_formats.texi(mymacro,356) @group nested_formats.texi(mymacro,356) @end group nested_formats.texi(mymacro,356) After nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) Something2 nested_formats.texi(mymacro,356) @group nested_formats.texi(mymacro,356) in group nested_formats.texi(mymacro,356) @end group nested_formats.texi(mymacro,356) After nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @sp 2 nested_formats.texi(mymacro,356) @group nested_formats.texi(mymacro,356) in group nested_formats.texi(mymacro,356) @end group nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @group nested_formats.texi(mymacro,356) @quotation nested_formats.texi(mymacro,356) A quot---ation nested_formats.texi(mymacro,356) @end quotation nested_formats.texi(mymacro,356) @end group nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @subheading subheading nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @verbatim nested_formats.texi(mymacro,356) in verbatim nested_formats.texi(mymacro,356) @end verbatim nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @html nested_formats.texi(mymacro,356) html nested_formats.texi(mymacro,356) @end html nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,356) @item i--tem 1 nested_formats.texi(mymacro,356) @item i--tem 2 nested_formats.texi(mymacro,356) @end itemize nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @enumerate nested_formats.texi(mymacro,356) @item e--numerate nested_formats.texi(mymacro,356) @end enumerate nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,356) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,356) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,356) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,356) @item lone mu--ltitable item nested_formats.texi(mymacro,356) @end multitable nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @example nested_formats.texi(mymacro,356) e--xample some nested_formats.texi(mymacro,356) text nested_formats.texi(mymacro,356) @end example nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @smallexample nested_formats.texi(mymacro,356) s--mallexample nested_formats.texi(mymacro,356) @end smallexample nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,356) d--effn nested_formats.texi(mymacro,356) @end deffn nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @table @bullet nested_formats.texi(mymacro,356) @item a nested_formats.texi(mymacro,356) l--ine nested_formats.texi(mymacro,356) @end table nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @cartouche nested_formats.texi(mymacro,356) c--artouche nested_formats.texi(mymacro,356) @end cartouche nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @flushleft nested_formats.texi(mymacro,356) f--lushleft nested_formats.texi(mymacro,356) @end flushleft nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @flushright nested_formats.texi(mymacro,356) f--lushright nested_formats.texi(mymacro,356) @end flushright nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @center ce--ntered line nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @group nested_formats.texi(mymacro,356) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,356) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,356) @item i--tem 1 nested_formats.texi(mymacro,356) @item i--tem 2 nested_formats.texi(mymacro,356) @end itemize nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @enumerate nested_formats.texi(mymacro,356) @item e--numerate nested_formats.texi(mymacro,356) @end enumerate nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,356) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,356) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,356) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,356) @item lone mu--ltitable item nested_formats.texi(mymacro,356) @end multitable nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @example nested_formats.texi(mymacro,356) e--xample some nested_formats.texi(mymacro,356) text nested_formats.texi(mymacro,356) @end example nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @smallexample nested_formats.texi(mymacro,356) s--mallexample nested_formats.texi(mymacro,356) @end smallexample nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,356) d--effn nested_formats.texi(mymacro,356) @end deffn nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @table @bullet nested_formats.texi(mymacro,356) @item a nested_formats.texi(mymacro,356) l--ine nested_formats.texi(mymacro,356) @end table nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @cartouche nested_formats.texi(mymacro,356) c--artouche nested_formats.texi(mymacro,356) @end cartouche nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @flushleft nested_formats.texi(mymacro,356) f--lushleft nested_formats.texi(mymacro,356) @end flushleft nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @flushright nested_formats.texi(mymacro,356) f--lushright nested_formats.texi(mymacro,356) @end flushright nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @center ce--ntered line nested_formats.texi(mymacro,356) @end group nested_formats.texi(mymacro,356) nested_formats.texi(,357) @end group nested_formats.texi(,358) @end flushright nested_formats.texi(,359) nested_formats.texi(,360) @bye texi2html-1.82/test/nested_formats/res/texi_nested_formats/nested_formats.texi0000644000175000017500000014647611264347121032016 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @c value not expanded, by makeinfo nor by texi2html @c @setfilename nested_formats.info @set format_command_begin @group @set format_command group @c @setfilename @value{format_command}.info @node Top @top Test nested group Call macro in macro @group @end group @group in format_command @end group Something @group @end group Something @group in group @end group Something2 @group @end group After Something2 @group in group @end group After @sp 2 @group in group @end group @group @quotation A quot---ation @end quotation @end group @subheading subheading @verbatim in verbatim @end verbatim @html html @end html @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @group in macro, a format_command containing some other commands. @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @end group Call macro in format_command @group in macro @group @end group @group in format_command @end group Something @group @end group Something @group in group @end group Something2 @group @end group After Something2 @group in group @end group After @sp 2 @group in group @end group @group @quotation A quot---ation @end quotation @end group @subheading subheading @verbatim in verbatim @end verbatim @html html @end html @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @group in macro, a format_command containing some other commands. @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @end group @end group Call macro in itemize at the beginning of an item @itemize @bullet{} a--n itemize line @item in macro @group @end group @group in format_command @end group Something @group @end group Something @group in group @end group Something2 @group @end group After Something2 @group in group @end group After @sp 2 @group in group @end group @group @quotation A quot---ation @end quotation @end group @subheading subheading @verbatim in verbatim @end verbatim @html html @end html @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @group in macro, a format_command containing some other commands. @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @end group @item item 1 Call macro in itemize in macro @group @end group @group in format_command @end group Something @group @end group Something @group in group @end group Something2 @group @end group After Something2 @group in group @end group After @sp 2 @group in group @end group @group @quotation A quot---ation @end quotation @end group @subheading subheading @verbatim in verbatim @end verbatim @html html @end html @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @group in macro, a format_command containing some other commands. @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @end group @item item 2 Call macro in itemize in format_command @group in macro @group @end group @group in format_command @end group Something @group @end group Something @group in group @end group Something2 @group @end group After Something2 @group in group @end group After @sp 2 @group in group @end group @group @quotation A quot---ation @end quotation @end group @subheading subheading @verbatim in verbatim @end verbatim @html html @end html @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @group in macro, a format_command containing some other commands. @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @end group @end group @end itemize Call macro in enumerate at the beginning of enumerate @enumerate @item in macro @group @end group @group in format_command @end group Something @group @end group Something @group in group @end group Something2 @group @end group After Something2 @group in group @end group After @sp 2 @group in group @end group @group @quotation A quot---ation @end quotation @end group @subheading subheading @verbatim in verbatim @end verbatim @html html @end html @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @group in macro, a format_command containing some other commands. @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @end group @item enumerate Call macro in enumerate in macro @group @end group @group in format_command @end group Something @group @end group Something @group in group @end group Something2 @group @end group After Something2 @group in group @end group After @sp 2 @group in group @end group @group @quotation A quot---ation @end quotation @end group @subheading subheading @verbatim in verbatim @end verbatim @html html @end html @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @group in macro, a format_command containing some other commands. @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @end group @item enumerate2 Call macro in enumerate in format_command @group in macro @group @end group @group in format_command @end group Something @group @end group Something @group in group @end group Something2 @group @end group After Something2 @group in group @end group After @sp 2 @group in group @end group @group @quotation A quot---ation @end quotation @end group @subheading subheading @verbatim in verbatim @end verbatim @html html @end html @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @group in macro, a format_command containing some other commands. @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @end group @end group @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item multitable item @tab multitable tab. And after Call macro in mutitable after item @item in macro @group @end group @group in format_command @end group Something @group @end group Something @group in group @end group Something2 @group @end group After Something2 @group in group @end group After @sp 2 @group in group @end group @group @quotation A quot---ation @end quotation @end group @subheading subheading @verbatim in verbatim @end verbatim @html html @end html @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @group in macro, a format_command containing some other commands. @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @end group @item multitable item 2 @tab multitable tab 2 Call macro in mutitable in macro @group @end group @group in format_command @end group Something @group @end group Something @group in group @end group Something2 @group @end group After Something2 @group in group @end group After @sp 2 @group in group @end group @group @quotation A quot---ation @end quotation @end group @subheading subheading @verbatim in verbatim @end verbatim @html html @end html @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @group in macro, a format_command containing some other commands. @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @end group @item lone multitable item Call macro in mutitable in format_command @group in macro @group @end group @group in format_command @end group Something @group @end group Something @group in group @end group Something2 @group @end group After Something2 @group in group @end group After @sp 2 @group in group @end group @group @quotation A quot---ation @end quotation @end group @subheading subheading @verbatim in verbatim @end verbatim @html html @end html @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @group in macro, a format_command containing some other commands. @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @end group @end group @end multitable call macro at the example beginning @example in macro @group @end group @group in format_command @end group Something @group @end group Something @group in group @end group Something2 @group @end group After Something2 @group in group @end group After @sp 2 @group in group @end group @group @quotation A quot---ation @end quotation @end group @subheading subheading @verbatim in verbatim @end verbatim @html html @end html @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @group in macro, a format_command containing some other commands. @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @end group example some text call macro in example in macro @group @end group @group in format_command @end group Something @group @end group Something @group in group @end group Something2 @group @end group After Something2 @group in group @end group After @sp 2 @group in group @end group @group @quotation A quot---ation @end quotation @end group @subheading subheading @verbatim in verbatim @end verbatim @html html @end html @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @group in macro, a format_command containing some other commands. @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @end group more example text call macro in example in format_command @group in macro @group @end group @group in format_command @end group Something @group @end group Something @group in group @end group Something2 @group @end group After Something2 @group in group @end group After @sp 2 @group in group @end group @group @quotation A quot---ation @end quotation @end group @subheading subheading @verbatim in verbatim @end verbatim @html html @end html @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @group in macro, a format_command containing some other commands. @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @end group @end group @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... deffn call macro in deffn in macro @group @end group @group in format_command @end group Something @group @end group Something @group in group @end group Something2 @group @end group After Something2 @group in group @end group After @sp 2 @group in group @end group @group @quotation A quot---ation @end quotation @end group @subheading subheading @verbatim in verbatim @end verbatim @html html @end html @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @group in macro, a format_command containing some other commands. @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @end group deffn continues call macro in deffn in format_command @group in macro @group @end group @group in format_command @end group Something @group @end group Something @group in group @end group Something2 @group @end group After Something2 @group in group @end group After @sp 2 @group in group @end group @group @quotation A quot---ation @end quotation @end group @subheading subheading @verbatim in verbatim @end verbatim @html html @end html @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @group in macro, a format_command containing some other commands. @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @end group @end group @end deffn call macro in deffn at the beginning @deffn c--ategory2 d--effn_name2 a--rguments2... in macro @group @end group @group in format_command @end group Something @group @end group Something @group in group @end group Something2 @group @end group After Something2 @group in group @end group After @sp 2 @group in group @end group @group @quotation A quot---ation @end quotation @end group @subheading subheading @verbatim in verbatim @end verbatim @html html @end html @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @group in macro, a format_command containing some other commands. @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @end group @end deffn @table @bullet @item a line call macro in table in macro @group @end group @group in format_command @end group Something @group @end group Something @group in group @end group Something2 @group @end group After Something2 @group in group @end group After @sp 2 @group in group @end group @group @quotation A quot---ation @end quotation @end group @subheading subheading @verbatim in verbatim @end verbatim @html html @end html @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @group in macro, a format_command containing some other commands. @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @end group call macro in table at an item beginning @item a line in macro @group @end group @group in format_command @end group Something @group @end group Something @group in group @end group Something2 @group @end group After Something2 @group in group @end group After @sp 2 @group in group @end group @group @quotation A quot---ation @end quotation @end group @subheading subheading @verbatim in verbatim @end verbatim @html html @end html @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @group in macro, a format_command containing some other commands. @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @end group @item a line2 call macro in table in format_command @group in macro @group @end group @group in format_command @end group Something @group @end group Something @group in group @end group Something2 @group @end group After Something2 @group in group @end group After @sp 2 @group in group @end group @group @quotation A quot---ation @end quotation @end group @subheading subheading @verbatim in verbatim @end verbatim @html html @end html @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @group in macro, a format_command containing some other commands. @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @end group @end group @end table call macro at cartouche begin @cartouche in macro @group @end group @group in format_command @end group Something @group @end group Something @group in group @end group Something2 @group @end group After Something2 @group in group @end group After @sp 2 @group in group @end group @group @quotation A quot---ation @end quotation @end group @subheading subheading @verbatim in verbatim @end verbatim @html html @end html @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @group in macro, a format_command containing some other commands. @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @end group cartouche call macro in cartouche in macro @group @end group @group in format_command @end group Something @group @end group Something @group in group @end group Something2 @group @end group After Something2 @group in group @end group After @sp 2 @group in group @end group @group @quotation A quot---ation @end quotation @end group @subheading subheading @verbatim in verbatim @end verbatim @html html @end html @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @group in macro, a format_command containing some other commands. @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @end group call macro in cartouche in format_command @group in macro @group @end group @group in format_command @end group Something @group @end group Something @group in group @end group Something2 @group @end group After Something2 @group in group @end group After @sp 2 @group in group @end group @group @quotation A quot---ation @end quotation @end group @subheading subheading @verbatim in verbatim @end verbatim @html html @end html @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @group in macro, a format_command containing some other commands. @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @end group @end group @end cartouche @flushleft call macro in flushleft in macro @group @end group @group in format_command @end group Something @group @end group Something @group in group @end group Something2 @group @end group After Something2 @group in group @end group After @sp 2 @group in group @end group @group @quotation A quot---ation @end quotation @end group @subheading subheading @verbatim in verbatim @end verbatim @html html @end html @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @group in macro, a format_command containing some other commands. @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @end group flushleft call macro in flushleft in format_command @group in macro @group @end group @group in format_command @end group Something @group @end group Something @group in group @end group Something2 @group @end group After Something2 @group in group @end group After @sp 2 @group in group @end group @group @quotation A quot---ation @end quotation @end group @subheading subheading @verbatim in verbatim @end verbatim @html html @end html @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @group in macro, a format_command containing some other commands. @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @end group @end group @end flushleft @flushright in macro @group @end group @group in format_command @end group Something @group @end group Something @group in group @end group Something2 @group @end group After Something2 @group in group @end group After @sp 2 @group in group @end group @group @quotation A quot---ation @end quotation @end group @subheading subheading @verbatim in verbatim @end verbatim @html html @end html @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @group in macro, a format_command containing some other commands. @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @end group flushright @group in macro @group @end group @group in format_command @end group Something @group @end group Something @group in group @end group Something2 @group @end group After Something2 @group in group @end group After @sp 2 @group in group @end group @group @quotation A quot---ation @end quotation @end group @subheading subheading @verbatim in verbatim @end verbatim @html html @end html @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @group in macro, a format_command containing some other commands. @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @end group @end group @end flushright @bye texi2html-1.82/test/nested_formats/res/texi_nested_formats/nested_formats.passfirst0000644000175000017500000056532711264347121033063 0ustar flichtenheldflichtenheldnested_formats.texi(,2) nested_formats.texi(,3) @c value not expanded, by makeinfo nor by texi2html nested_formats.texi(,4) @c @setfilename nested_formats.info nested_formats.texi(,5) nested_formats.texi(,10) nested_formats.texi(,15) nested_formats.texi(,20) nested_formats.texi(,25) nested_formats.texi(,30) nested_formats.texi(,35) nested_formats.texi(,40) nested_formats.texi(,45) nested_formats.texi(,50) nested_formats.texi(,55) nested_formats.texi(,60) nested_formats.texi(,62) @set format_command_begin @group nested_formats.texi(,63) @set format_command group nested_formats.texi(,65) nested_formats.texi(,66) @c @setfilename @value{format_command}.info nested_formats.texi(,67) nested_formats.texi(,68) @node Top nested_formats.texi(,69) @top Test nested group nested_formats.texi(,70) nested_formats.texi(,231) nested_formats.texi(,232) Call macro nested_formats.texi(mymacro,233) in macro nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @group nested_formats.texi(mymacro,233) @end group nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @group nested_formats.texi(mymacro,233) in format_command nested_formats.texi(mymacro,233) @end group nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) Something nested_formats.texi(mymacro,233) @group nested_formats.texi(mymacro,233) @end group nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) Something nested_formats.texi(mymacro,233) @group nested_formats.texi(mymacro,233) in group nested_formats.texi(mymacro,233) @end group nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) Something2 nested_formats.texi(mymacro,233) @group nested_formats.texi(mymacro,233) @end group nested_formats.texi(mymacro,233) After nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) Something2 nested_formats.texi(mymacro,233) @group nested_formats.texi(mymacro,233) in group nested_formats.texi(mymacro,233) @end group nested_formats.texi(mymacro,233) After nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @sp 2 nested_formats.texi(mymacro,233) @group nested_formats.texi(mymacro,233) in group nested_formats.texi(mymacro,233) @end group nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @group nested_formats.texi(mymacro,233) @quotation nested_formats.texi(mymacro,233) A quot---ation nested_formats.texi(mymacro,233) @end quotation nested_formats.texi(mymacro,233) @end group nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @subheading subheading nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @verbatim nested_formats.texi(mymacro,233) in verbatim nested_formats.texi(mymacro,233) @end verbatim nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @html nested_formats.texi(mymacro,233) html nested_formats.texi(mymacro,233) @end html nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,233) @item i--tem 1 nested_formats.texi(mymacro,233) @item i--tem 2 nested_formats.texi(mymacro,233) @end itemize nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @enumerate nested_formats.texi(mymacro,233) @item e--numerate nested_formats.texi(mymacro,233) @end enumerate nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,233) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,233) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,233) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,233) @item lone mu--ltitable item nested_formats.texi(mymacro,233) @end multitable nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @example nested_formats.texi(mymacro,233) e--xample some nested_formats.texi(mymacro,233) text nested_formats.texi(mymacro,233) @end example nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @smallexample nested_formats.texi(mymacro,233) s--mallexample nested_formats.texi(mymacro,233) @end smallexample nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,233) d--effn nested_formats.texi(mymacro,233) @end deffn nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @table @bullet nested_formats.texi(mymacro,233) @item a nested_formats.texi(mymacro,233) l--ine nested_formats.texi(mymacro,233) @end table nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @cartouche nested_formats.texi(mymacro,233) c--artouche nested_formats.texi(mymacro,233) @end cartouche nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @flushleft nested_formats.texi(mymacro,233) f--lushleft nested_formats.texi(mymacro,233) @end flushleft nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @flushright nested_formats.texi(mymacro,233) f--lushright nested_formats.texi(mymacro,233) @end flushright nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @center ce--ntered line nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @group nested_formats.texi(mymacro,233) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,233) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,233) @item i--tem 1 nested_formats.texi(mymacro,233) @item i--tem 2 nested_formats.texi(mymacro,233) @end itemize nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @enumerate nested_formats.texi(mymacro,233) @item e--numerate nested_formats.texi(mymacro,233) @end enumerate nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,233) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,233) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,233) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,233) @item lone mu--ltitable item nested_formats.texi(mymacro,233) @end multitable nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @example nested_formats.texi(mymacro,233) e--xample some nested_formats.texi(mymacro,233) text nested_formats.texi(mymacro,233) @end example nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @smallexample nested_formats.texi(mymacro,233) s--mallexample nested_formats.texi(mymacro,233) @end smallexample nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,233) d--effn nested_formats.texi(mymacro,233) @end deffn nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @table @bullet nested_formats.texi(mymacro,233) @item a nested_formats.texi(mymacro,233) l--ine nested_formats.texi(mymacro,233) @end table nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @cartouche nested_formats.texi(mymacro,233) c--artouche nested_formats.texi(mymacro,233) @end cartouche nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @flushleft nested_formats.texi(mymacro,233) f--lushleft nested_formats.texi(mymacro,233) @end flushleft nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @flushright nested_formats.texi(mymacro,233) f--lushright nested_formats.texi(mymacro,233) @end flushright nested_formats.texi(mymacro,233) nested_formats.texi(mymacro,233) @center ce--ntered line nested_formats.texi(mymacro,233) @end group nested_formats.texi(mymacro,233) nested_formats.texi(,234) nested_formats.texi(,235) Call macro in format_command nested_formats.texi(,236) @group nested_formats.texi(mymacro,237) in macro nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @group nested_formats.texi(mymacro,237) @end group nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @group nested_formats.texi(mymacro,237) in format_command nested_formats.texi(mymacro,237) @end group nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) Something nested_formats.texi(mymacro,237) @group nested_formats.texi(mymacro,237) @end group nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) Something nested_formats.texi(mymacro,237) @group nested_formats.texi(mymacro,237) in group nested_formats.texi(mymacro,237) @end group nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) Something2 nested_formats.texi(mymacro,237) @group nested_formats.texi(mymacro,237) @end group nested_formats.texi(mymacro,237) After nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) Something2 nested_formats.texi(mymacro,237) @group nested_formats.texi(mymacro,237) in group nested_formats.texi(mymacro,237) @end group nested_formats.texi(mymacro,237) After nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @sp 2 nested_formats.texi(mymacro,237) @group nested_formats.texi(mymacro,237) in group nested_formats.texi(mymacro,237) @end group nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @group nested_formats.texi(mymacro,237) @quotation nested_formats.texi(mymacro,237) A quot---ation nested_formats.texi(mymacro,237) @end quotation nested_formats.texi(mymacro,237) @end group nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @subheading subheading nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @verbatim nested_formats.texi(mymacro,237) in verbatim nested_formats.texi(mymacro,237) @end verbatim nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @html nested_formats.texi(mymacro,237) html nested_formats.texi(mymacro,237) @end html nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,237) @item i--tem 1 nested_formats.texi(mymacro,237) @item i--tem 2 nested_formats.texi(mymacro,237) @end itemize nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @enumerate nested_formats.texi(mymacro,237) @item e--numerate nested_formats.texi(mymacro,237) @end enumerate nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,237) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,237) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,237) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,237) @item lone mu--ltitable item nested_formats.texi(mymacro,237) @end multitable nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @example nested_formats.texi(mymacro,237) e--xample some nested_formats.texi(mymacro,237) text nested_formats.texi(mymacro,237) @end example nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @smallexample nested_formats.texi(mymacro,237) s--mallexample nested_formats.texi(mymacro,237) @end smallexample nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,237) d--effn nested_formats.texi(mymacro,237) @end deffn nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @table @bullet nested_formats.texi(mymacro,237) @item a nested_formats.texi(mymacro,237) l--ine nested_formats.texi(mymacro,237) @end table nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @cartouche nested_formats.texi(mymacro,237) c--artouche nested_formats.texi(mymacro,237) @end cartouche nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @flushleft nested_formats.texi(mymacro,237) f--lushleft nested_formats.texi(mymacro,237) @end flushleft nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @flushright nested_formats.texi(mymacro,237) f--lushright nested_formats.texi(mymacro,237) @end flushright nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @center ce--ntered line nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @group nested_formats.texi(mymacro,237) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,237) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,237) @item i--tem 1 nested_formats.texi(mymacro,237) @item i--tem 2 nested_formats.texi(mymacro,237) @end itemize nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @enumerate nested_formats.texi(mymacro,237) @item e--numerate nested_formats.texi(mymacro,237) @end enumerate nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,237) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,237) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,237) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,237) @item lone mu--ltitable item nested_formats.texi(mymacro,237) @end multitable nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @example nested_formats.texi(mymacro,237) e--xample some nested_formats.texi(mymacro,237) text nested_formats.texi(mymacro,237) @end example nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @smallexample nested_formats.texi(mymacro,237) s--mallexample nested_formats.texi(mymacro,237) @end smallexample nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,237) d--effn nested_formats.texi(mymacro,237) @end deffn nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @table @bullet nested_formats.texi(mymacro,237) @item a nested_formats.texi(mymacro,237) l--ine nested_formats.texi(mymacro,237) @end table nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @cartouche nested_formats.texi(mymacro,237) c--artouche nested_formats.texi(mymacro,237) @end cartouche nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @flushleft nested_formats.texi(mymacro,237) f--lushleft nested_formats.texi(mymacro,237) @end flushleft nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @flushright nested_formats.texi(mymacro,237) f--lushright nested_formats.texi(mymacro,237) @end flushright nested_formats.texi(mymacro,237) nested_formats.texi(mymacro,237) @center ce--ntered line nested_formats.texi(mymacro,237) @end group nested_formats.texi(mymacro,237) nested_formats.texi(,238) @end group nested_formats.texi(,239) nested_formats.texi(,240) Call macro in itemize at the beginning of an item nested_formats.texi(,241) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,242) @item in macro nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @group nested_formats.texi(mymacro,242) @end group nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @group nested_formats.texi(mymacro,242) in format_command nested_formats.texi(mymacro,242) @end group nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) Something nested_formats.texi(mymacro,242) @group nested_formats.texi(mymacro,242) @end group nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) Something nested_formats.texi(mymacro,242) @group nested_formats.texi(mymacro,242) in group nested_formats.texi(mymacro,242) @end group nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) Something2 nested_formats.texi(mymacro,242) @group nested_formats.texi(mymacro,242) @end group nested_formats.texi(mymacro,242) After nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) Something2 nested_formats.texi(mymacro,242) @group nested_formats.texi(mymacro,242) in group nested_formats.texi(mymacro,242) @end group nested_formats.texi(mymacro,242) After nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @sp 2 nested_formats.texi(mymacro,242) @group nested_formats.texi(mymacro,242) in group nested_formats.texi(mymacro,242) @end group nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @group nested_formats.texi(mymacro,242) @quotation nested_formats.texi(mymacro,242) A quot---ation nested_formats.texi(mymacro,242) @end quotation nested_formats.texi(mymacro,242) @end group nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @subheading subheading nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @verbatim nested_formats.texi(mymacro,242) in verbatim nested_formats.texi(mymacro,242) @end verbatim nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @html nested_formats.texi(mymacro,242) html nested_formats.texi(mymacro,242) @end html nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,242) @item i--tem 1 nested_formats.texi(mymacro,242) @item i--tem 2 nested_formats.texi(mymacro,242) @end itemize nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @enumerate nested_formats.texi(mymacro,242) @item e--numerate nested_formats.texi(mymacro,242) @end enumerate nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,242) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,242) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,242) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,242) @item lone mu--ltitable item nested_formats.texi(mymacro,242) @end multitable nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @example nested_formats.texi(mymacro,242) e--xample some nested_formats.texi(mymacro,242) text nested_formats.texi(mymacro,242) @end example nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @smallexample nested_formats.texi(mymacro,242) s--mallexample nested_formats.texi(mymacro,242) @end smallexample nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,242) d--effn nested_formats.texi(mymacro,242) @end deffn nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @table @bullet nested_formats.texi(mymacro,242) @item a nested_formats.texi(mymacro,242) l--ine nested_formats.texi(mymacro,242) @end table nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @cartouche nested_formats.texi(mymacro,242) c--artouche nested_formats.texi(mymacro,242) @end cartouche nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @flushleft nested_formats.texi(mymacro,242) f--lushleft nested_formats.texi(mymacro,242) @end flushleft nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @flushright nested_formats.texi(mymacro,242) f--lushright nested_formats.texi(mymacro,242) @end flushright nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @center ce--ntered line nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @group nested_formats.texi(mymacro,242) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,242) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,242) @item i--tem 1 nested_formats.texi(mymacro,242) @item i--tem 2 nested_formats.texi(mymacro,242) @end itemize nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @enumerate nested_formats.texi(mymacro,242) @item e--numerate nested_formats.texi(mymacro,242) @end enumerate nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,242) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,242) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,242) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,242) @item lone mu--ltitable item nested_formats.texi(mymacro,242) @end multitable nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @example nested_formats.texi(mymacro,242) e--xample some nested_formats.texi(mymacro,242) text nested_formats.texi(mymacro,242) @end example nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @smallexample nested_formats.texi(mymacro,242) s--mallexample nested_formats.texi(mymacro,242) @end smallexample nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,242) d--effn nested_formats.texi(mymacro,242) @end deffn nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @table @bullet nested_formats.texi(mymacro,242) @item a nested_formats.texi(mymacro,242) l--ine nested_formats.texi(mymacro,242) @end table nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @cartouche nested_formats.texi(mymacro,242) c--artouche nested_formats.texi(mymacro,242) @end cartouche nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @flushleft nested_formats.texi(mymacro,242) f--lushleft nested_formats.texi(mymacro,242) @end flushleft nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @flushright nested_formats.texi(mymacro,242) f--lushright nested_formats.texi(mymacro,242) @end flushright nested_formats.texi(mymacro,242) nested_formats.texi(mymacro,242) @center ce--ntered line nested_formats.texi(mymacro,242) @end group nested_formats.texi(mymacro,242) nested_formats.texi(,243) @item item 1 nested_formats.texi(,244) Call macro in itemize nested_formats.texi(mymacro,245) in macro nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @group nested_formats.texi(mymacro,245) @end group nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @group nested_formats.texi(mymacro,245) in format_command nested_formats.texi(mymacro,245) @end group nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) Something nested_formats.texi(mymacro,245) @group nested_formats.texi(mymacro,245) @end group nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) Something nested_formats.texi(mymacro,245) @group nested_formats.texi(mymacro,245) in group nested_formats.texi(mymacro,245) @end group nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) Something2 nested_formats.texi(mymacro,245) @group nested_formats.texi(mymacro,245) @end group nested_formats.texi(mymacro,245) After nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) Something2 nested_formats.texi(mymacro,245) @group nested_formats.texi(mymacro,245) in group nested_formats.texi(mymacro,245) @end group nested_formats.texi(mymacro,245) After nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @sp 2 nested_formats.texi(mymacro,245) @group nested_formats.texi(mymacro,245) in group nested_formats.texi(mymacro,245) @end group nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @group nested_formats.texi(mymacro,245) @quotation nested_formats.texi(mymacro,245) A quot---ation nested_formats.texi(mymacro,245) @end quotation nested_formats.texi(mymacro,245) @end group nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @subheading subheading nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @verbatim nested_formats.texi(mymacro,245) in verbatim nested_formats.texi(mymacro,245) @end verbatim nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @html nested_formats.texi(mymacro,245) html nested_formats.texi(mymacro,245) @end html nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,245) @item i--tem 1 nested_formats.texi(mymacro,245) @item i--tem 2 nested_formats.texi(mymacro,245) @end itemize nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @enumerate nested_formats.texi(mymacro,245) @item e--numerate nested_formats.texi(mymacro,245) @end enumerate nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,245) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,245) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,245) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,245) @item lone mu--ltitable item nested_formats.texi(mymacro,245) @end multitable nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @example nested_formats.texi(mymacro,245) e--xample some nested_formats.texi(mymacro,245) text nested_formats.texi(mymacro,245) @end example nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @smallexample nested_formats.texi(mymacro,245) s--mallexample nested_formats.texi(mymacro,245) @end smallexample nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,245) d--effn nested_formats.texi(mymacro,245) @end deffn nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @table @bullet nested_formats.texi(mymacro,245) @item a nested_formats.texi(mymacro,245) l--ine nested_formats.texi(mymacro,245) @end table nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @cartouche nested_formats.texi(mymacro,245) c--artouche nested_formats.texi(mymacro,245) @end cartouche nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @flushleft nested_formats.texi(mymacro,245) f--lushleft nested_formats.texi(mymacro,245) @end flushleft nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @flushright nested_formats.texi(mymacro,245) f--lushright nested_formats.texi(mymacro,245) @end flushright nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @center ce--ntered line nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @group nested_formats.texi(mymacro,245) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,245) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,245) @item i--tem 1 nested_formats.texi(mymacro,245) @item i--tem 2 nested_formats.texi(mymacro,245) @end itemize nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @enumerate nested_formats.texi(mymacro,245) @item e--numerate nested_formats.texi(mymacro,245) @end enumerate nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,245) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,245) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,245) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,245) @item lone mu--ltitable item nested_formats.texi(mymacro,245) @end multitable nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @example nested_formats.texi(mymacro,245) e--xample some nested_formats.texi(mymacro,245) text nested_formats.texi(mymacro,245) @end example nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @smallexample nested_formats.texi(mymacro,245) s--mallexample nested_formats.texi(mymacro,245) @end smallexample nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,245) d--effn nested_formats.texi(mymacro,245) @end deffn nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @table @bullet nested_formats.texi(mymacro,245) @item a nested_formats.texi(mymacro,245) l--ine nested_formats.texi(mymacro,245) @end table nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @cartouche nested_formats.texi(mymacro,245) c--artouche nested_formats.texi(mymacro,245) @end cartouche nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @flushleft nested_formats.texi(mymacro,245) f--lushleft nested_formats.texi(mymacro,245) @end flushleft nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @flushright nested_formats.texi(mymacro,245) f--lushright nested_formats.texi(mymacro,245) @end flushright nested_formats.texi(mymacro,245) nested_formats.texi(mymacro,245) @center ce--ntered line nested_formats.texi(mymacro,245) @end group nested_formats.texi(mymacro,245) nested_formats.texi(,246) @item item 2 nested_formats.texi(,247) Call macro in itemize in format_command nested_formats.texi(,248) @group nested_formats.texi(mymacro,249) in macro nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @group nested_formats.texi(mymacro,249) @end group nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @group nested_formats.texi(mymacro,249) in format_command nested_formats.texi(mymacro,249) @end group nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) Something nested_formats.texi(mymacro,249) @group nested_formats.texi(mymacro,249) @end group nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) Something nested_formats.texi(mymacro,249) @group nested_formats.texi(mymacro,249) in group nested_formats.texi(mymacro,249) @end group nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) Something2 nested_formats.texi(mymacro,249) @group nested_formats.texi(mymacro,249) @end group nested_formats.texi(mymacro,249) After nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) Something2 nested_formats.texi(mymacro,249) @group nested_formats.texi(mymacro,249) in group nested_formats.texi(mymacro,249) @end group nested_formats.texi(mymacro,249) After nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @sp 2 nested_formats.texi(mymacro,249) @group nested_formats.texi(mymacro,249) in group nested_formats.texi(mymacro,249) @end group nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @group nested_formats.texi(mymacro,249) @quotation nested_formats.texi(mymacro,249) A quot---ation nested_formats.texi(mymacro,249) @end quotation nested_formats.texi(mymacro,249) @end group nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @subheading subheading nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @verbatim nested_formats.texi(mymacro,249) in verbatim nested_formats.texi(mymacro,249) @end verbatim nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @html nested_formats.texi(mymacro,249) html nested_formats.texi(mymacro,249) @end html nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,249) @item i--tem 1 nested_formats.texi(mymacro,249) @item i--tem 2 nested_formats.texi(mymacro,249) @end itemize nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @enumerate nested_formats.texi(mymacro,249) @item e--numerate nested_formats.texi(mymacro,249) @end enumerate nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,249) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,249) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,249) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,249) @item lone mu--ltitable item nested_formats.texi(mymacro,249) @end multitable nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @example nested_formats.texi(mymacro,249) e--xample some nested_formats.texi(mymacro,249) text nested_formats.texi(mymacro,249) @end example nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @smallexample nested_formats.texi(mymacro,249) s--mallexample nested_formats.texi(mymacro,249) @end smallexample nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,249) d--effn nested_formats.texi(mymacro,249) @end deffn nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @table @bullet nested_formats.texi(mymacro,249) @item a nested_formats.texi(mymacro,249) l--ine nested_formats.texi(mymacro,249) @end table nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @cartouche nested_formats.texi(mymacro,249) c--artouche nested_formats.texi(mymacro,249) @end cartouche nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @flushleft nested_formats.texi(mymacro,249) f--lushleft nested_formats.texi(mymacro,249) @end flushleft nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @flushright nested_formats.texi(mymacro,249) f--lushright nested_formats.texi(mymacro,249) @end flushright nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @center ce--ntered line nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @group nested_formats.texi(mymacro,249) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,249) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,249) @item i--tem 1 nested_formats.texi(mymacro,249) @item i--tem 2 nested_formats.texi(mymacro,249) @end itemize nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @enumerate nested_formats.texi(mymacro,249) @item e--numerate nested_formats.texi(mymacro,249) @end enumerate nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,249) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,249) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,249) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,249) @item lone mu--ltitable item nested_formats.texi(mymacro,249) @end multitable nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @example nested_formats.texi(mymacro,249) e--xample some nested_formats.texi(mymacro,249) text nested_formats.texi(mymacro,249) @end example nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @smallexample nested_formats.texi(mymacro,249) s--mallexample nested_formats.texi(mymacro,249) @end smallexample nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,249) d--effn nested_formats.texi(mymacro,249) @end deffn nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @table @bullet nested_formats.texi(mymacro,249) @item a nested_formats.texi(mymacro,249) l--ine nested_formats.texi(mymacro,249) @end table nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @cartouche nested_formats.texi(mymacro,249) c--artouche nested_formats.texi(mymacro,249) @end cartouche nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @flushleft nested_formats.texi(mymacro,249) f--lushleft nested_formats.texi(mymacro,249) @end flushleft nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @flushright nested_formats.texi(mymacro,249) f--lushright nested_formats.texi(mymacro,249) @end flushright nested_formats.texi(mymacro,249) nested_formats.texi(mymacro,249) @center ce--ntered line nested_formats.texi(mymacro,249) @end group nested_formats.texi(mymacro,249) nested_formats.texi(,250) @end group nested_formats.texi(,251) @end itemize nested_formats.texi(,252) nested_formats.texi(,253) Call macro in enumerate at the beginning of enumerate nested_formats.texi(,254) @enumerate nested_formats.texi(mymacro,255) @item in macro nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @group nested_formats.texi(mymacro,255) @end group nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @group nested_formats.texi(mymacro,255) in format_command nested_formats.texi(mymacro,255) @end group nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) Something nested_formats.texi(mymacro,255) @group nested_formats.texi(mymacro,255) @end group nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) Something nested_formats.texi(mymacro,255) @group nested_formats.texi(mymacro,255) in group nested_formats.texi(mymacro,255) @end group nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) Something2 nested_formats.texi(mymacro,255) @group nested_formats.texi(mymacro,255) @end group nested_formats.texi(mymacro,255) After nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) Something2 nested_formats.texi(mymacro,255) @group nested_formats.texi(mymacro,255) in group nested_formats.texi(mymacro,255) @end group nested_formats.texi(mymacro,255) After nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @sp 2 nested_formats.texi(mymacro,255) @group nested_formats.texi(mymacro,255) in group nested_formats.texi(mymacro,255) @end group nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @group nested_formats.texi(mymacro,255) @quotation nested_formats.texi(mymacro,255) A quot---ation nested_formats.texi(mymacro,255) @end quotation nested_formats.texi(mymacro,255) @end group nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @subheading subheading nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @verbatim nested_formats.texi(mymacro,255) in verbatim nested_formats.texi(mymacro,255) @end verbatim nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @html nested_formats.texi(mymacro,255) html nested_formats.texi(mymacro,255) @end html nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,255) @item i--tem 1 nested_formats.texi(mymacro,255) @item i--tem 2 nested_formats.texi(mymacro,255) @end itemize nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @enumerate nested_formats.texi(mymacro,255) @item e--numerate nested_formats.texi(mymacro,255) @end enumerate nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,255) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,255) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,255) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,255) @item lone mu--ltitable item nested_formats.texi(mymacro,255) @end multitable nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @example nested_formats.texi(mymacro,255) e--xample some nested_formats.texi(mymacro,255) text nested_formats.texi(mymacro,255) @end example nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @smallexample nested_formats.texi(mymacro,255) s--mallexample nested_formats.texi(mymacro,255) @end smallexample nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,255) d--effn nested_formats.texi(mymacro,255) @end deffn nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @table @bullet nested_formats.texi(mymacro,255) @item a nested_formats.texi(mymacro,255) l--ine nested_formats.texi(mymacro,255) @end table nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @cartouche nested_formats.texi(mymacro,255) c--artouche nested_formats.texi(mymacro,255) @end cartouche nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @flushleft nested_formats.texi(mymacro,255) f--lushleft nested_formats.texi(mymacro,255) @end flushleft nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @flushright nested_formats.texi(mymacro,255) f--lushright nested_formats.texi(mymacro,255) @end flushright nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @center ce--ntered line nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @group nested_formats.texi(mymacro,255) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,255) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,255) @item i--tem 1 nested_formats.texi(mymacro,255) @item i--tem 2 nested_formats.texi(mymacro,255) @end itemize nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @enumerate nested_formats.texi(mymacro,255) @item e--numerate nested_formats.texi(mymacro,255) @end enumerate nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,255) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,255) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,255) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,255) @item lone mu--ltitable item nested_formats.texi(mymacro,255) @end multitable nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @example nested_formats.texi(mymacro,255) e--xample some nested_formats.texi(mymacro,255) text nested_formats.texi(mymacro,255) @end example nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @smallexample nested_formats.texi(mymacro,255) s--mallexample nested_formats.texi(mymacro,255) @end smallexample nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,255) d--effn nested_formats.texi(mymacro,255) @end deffn nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @table @bullet nested_formats.texi(mymacro,255) @item a nested_formats.texi(mymacro,255) l--ine nested_formats.texi(mymacro,255) @end table nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @cartouche nested_formats.texi(mymacro,255) c--artouche nested_formats.texi(mymacro,255) @end cartouche nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @flushleft nested_formats.texi(mymacro,255) f--lushleft nested_formats.texi(mymacro,255) @end flushleft nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @flushright nested_formats.texi(mymacro,255) f--lushright nested_formats.texi(mymacro,255) @end flushright nested_formats.texi(mymacro,255) nested_formats.texi(mymacro,255) @center ce--ntered line nested_formats.texi(mymacro,255) @end group nested_formats.texi(mymacro,255) nested_formats.texi(,256) @item enumerate nested_formats.texi(,257) Call macro in enumerate nested_formats.texi(mymacro,258) in macro nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @group nested_formats.texi(mymacro,258) @end group nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @group nested_formats.texi(mymacro,258) in format_command nested_formats.texi(mymacro,258) @end group nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) Something nested_formats.texi(mymacro,258) @group nested_formats.texi(mymacro,258) @end group nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) Something nested_formats.texi(mymacro,258) @group nested_formats.texi(mymacro,258) in group nested_formats.texi(mymacro,258) @end group nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) Something2 nested_formats.texi(mymacro,258) @group nested_formats.texi(mymacro,258) @end group nested_formats.texi(mymacro,258) After nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) Something2 nested_formats.texi(mymacro,258) @group nested_formats.texi(mymacro,258) in group nested_formats.texi(mymacro,258) @end group nested_formats.texi(mymacro,258) After nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @sp 2 nested_formats.texi(mymacro,258) @group nested_formats.texi(mymacro,258) in group nested_formats.texi(mymacro,258) @end group nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @group nested_formats.texi(mymacro,258) @quotation nested_formats.texi(mymacro,258) A quot---ation nested_formats.texi(mymacro,258) @end quotation nested_formats.texi(mymacro,258) @end group nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @subheading subheading nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @verbatim nested_formats.texi(mymacro,258) in verbatim nested_formats.texi(mymacro,258) @end verbatim nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @html nested_formats.texi(mymacro,258) html nested_formats.texi(mymacro,258) @end html nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,258) @item i--tem 1 nested_formats.texi(mymacro,258) @item i--tem 2 nested_formats.texi(mymacro,258) @end itemize nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @enumerate nested_formats.texi(mymacro,258) @item e--numerate nested_formats.texi(mymacro,258) @end enumerate nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,258) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,258) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,258) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,258) @item lone mu--ltitable item nested_formats.texi(mymacro,258) @end multitable nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @example nested_formats.texi(mymacro,258) e--xample some nested_formats.texi(mymacro,258) text nested_formats.texi(mymacro,258) @end example nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @smallexample nested_formats.texi(mymacro,258) s--mallexample nested_formats.texi(mymacro,258) @end smallexample nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,258) d--effn nested_formats.texi(mymacro,258) @end deffn nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @table @bullet nested_formats.texi(mymacro,258) @item a nested_formats.texi(mymacro,258) l--ine nested_formats.texi(mymacro,258) @end table nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @cartouche nested_formats.texi(mymacro,258) c--artouche nested_formats.texi(mymacro,258) @end cartouche nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @flushleft nested_formats.texi(mymacro,258) f--lushleft nested_formats.texi(mymacro,258) @end flushleft nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @flushright nested_formats.texi(mymacro,258) f--lushright nested_formats.texi(mymacro,258) @end flushright nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @center ce--ntered line nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @group nested_formats.texi(mymacro,258) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,258) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,258) @item i--tem 1 nested_formats.texi(mymacro,258) @item i--tem 2 nested_formats.texi(mymacro,258) @end itemize nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @enumerate nested_formats.texi(mymacro,258) @item e--numerate nested_formats.texi(mymacro,258) @end enumerate nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,258) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,258) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,258) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,258) @item lone mu--ltitable item nested_formats.texi(mymacro,258) @end multitable nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @example nested_formats.texi(mymacro,258) e--xample some nested_formats.texi(mymacro,258) text nested_formats.texi(mymacro,258) @end example nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @smallexample nested_formats.texi(mymacro,258) s--mallexample nested_formats.texi(mymacro,258) @end smallexample nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,258) d--effn nested_formats.texi(mymacro,258) @end deffn nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @table @bullet nested_formats.texi(mymacro,258) @item a nested_formats.texi(mymacro,258) l--ine nested_formats.texi(mymacro,258) @end table nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @cartouche nested_formats.texi(mymacro,258) c--artouche nested_formats.texi(mymacro,258) @end cartouche nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @flushleft nested_formats.texi(mymacro,258) f--lushleft nested_formats.texi(mymacro,258) @end flushleft nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @flushright nested_formats.texi(mymacro,258) f--lushright nested_formats.texi(mymacro,258) @end flushright nested_formats.texi(mymacro,258) nested_formats.texi(mymacro,258) @center ce--ntered line nested_formats.texi(mymacro,258) @end group nested_formats.texi(mymacro,258) nested_formats.texi(,259) @item enumerate2 nested_formats.texi(,260) Call macro in enumerate in format_command nested_formats.texi(,261) @group nested_formats.texi(mymacro,262) in macro nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @group nested_formats.texi(mymacro,262) @end group nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @group nested_formats.texi(mymacro,262) in format_command nested_formats.texi(mymacro,262) @end group nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) Something nested_formats.texi(mymacro,262) @group nested_formats.texi(mymacro,262) @end group nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) Something nested_formats.texi(mymacro,262) @group nested_formats.texi(mymacro,262) in group nested_formats.texi(mymacro,262) @end group nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) Something2 nested_formats.texi(mymacro,262) @group nested_formats.texi(mymacro,262) @end group nested_formats.texi(mymacro,262) After nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) Something2 nested_formats.texi(mymacro,262) @group nested_formats.texi(mymacro,262) in group nested_formats.texi(mymacro,262) @end group nested_formats.texi(mymacro,262) After nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @sp 2 nested_formats.texi(mymacro,262) @group nested_formats.texi(mymacro,262) in group nested_formats.texi(mymacro,262) @end group nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @group nested_formats.texi(mymacro,262) @quotation nested_formats.texi(mymacro,262) A quot---ation nested_formats.texi(mymacro,262) @end quotation nested_formats.texi(mymacro,262) @end group nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @subheading subheading nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @verbatim nested_formats.texi(mymacro,262) in verbatim nested_formats.texi(mymacro,262) @end verbatim nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @html nested_formats.texi(mymacro,262) html nested_formats.texi(mymacro,262) @end html nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,262) @item i--tem 1 nested_formats.texi(mymacro,262) @item i--tem 2 nested_formats.texi(mymacro,262) @end itemize nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @enumerate nested_formats.texi(mymacro,262) @item e--numerate nested_formats.texi(mymacro,262) @end enumerate nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,262) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,262) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,262) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,262) @item lone mu--ltitable item nested_formats.texi(mymacro,262) @end multitable nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @example nested_formats.texi(mymacro,262) e--xample some nested_formats.texi(mymacro,262) text nested_formats.texi(mymacro,262) @end example nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @smallexample nested_formats.texi(mymacro,262) s--mallexample nested_formats.texi(mymacro,262) @end smallexample nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,262) d--effn nested_formats.texi(mymacro,262) @end deffn nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @table @bullet nested_formats.texi(mymacro,262) @item a nested_formats.texi(mymacro,262) l--ine nested_formats.texi(mymacro,262) @end table nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @cartouche nested_formats.texi(mymacro,262) c--artouche nested_formats.texi(mymacro,262) @end cartouche nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @flushleft nested_formats.texi(mymacro,262) f--lushleft nested_formats.texi(mymacro,262) @end flushleft nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @flushright nested_formats.texi(mymacro,262) f--lushright nested_formats.texi(mymacro,262) @end flushright nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @center ce--ntered line nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @group nested_formats.texi(mymacro,262) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,262) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,262) @item i--tem 1 nested_formats.texi(mymacro,262) @item i--tem 2 nested_formats.texi(mymacro,262) @end itemize nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @enumerate nested_formats.texi(mymacro,262) @item e--numerate nested_formats.texi(mymacro,262) @end enumerate nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,262) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,262) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,262) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,262) @item lone mu--ltitable item nested_formats.texi(mymacro,262) @end multitable nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @example nested_formats.texi(mymacro,262) e--xample some nested_formats.texi(mymacro,262) text nested_formats.texi(mymacro,262) @end example nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @smallexample nested_formats.texi(mymacro,262) s--mallexample nested_formats.texi(mymacro,262) @end smallexample nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,262) d--effn nested_formats.texi(mymacro,262) @end deffn nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @table @bullet nested_formats.texi(mymacro,262) @item a nested_formats.texi(mymacro,262) l--ine nested_formats.texi(mymacro,262) @end table nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @cartouche nested_formats.texi(mymacro,262) c--artouche nested_formats.texi(mymacro,262) @end cartouche nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @flushleft nested_formats.texi(mymacro,262) f--lushleft nested_formats.texi(mymacro,262) @end flushleft nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @flushright nested_formats.texi(mymacro,262) f--lushright nested_formats.texi(mymacro,262) @end flushright nested_formats.texi(mymacro,262) nested_formats.texi(mymacro,262) @center ce--ntered line nested_formats.texi(mymacro,262) @end group nested_formats.texi(mymacro,262) nested_formats.texi(,263) @end group nested_formats.texi(,264) @end enumerate nested_formats.texi(,265) nested_formats.texi(,266) @multitable @columnfractions 0.6 0.7 nested_formats.texi(,267) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(,268) @item multitable item @tab multitable tab. And after Call macro in mutitable nested_formats.texi(,269) after item nested_formats.texi(mymacro,270) @item in macro nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @group nested_formats.texi(mymacro,270) @end group nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @group nested_formats.texi(mymacro,270) in format_command nested_formats.texi(mymacro,270) @end group nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) Something nested_formats.texi(mymacro,270) @group nested_formats.texi(mymacro,270) @end group nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) Something nested_formats.texi(mymacro,270) @group nested_formats.texi(mymacro,270) in group nested_formats.texi(mymacro,270) @end group nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) Something2 nested_formats.texi(mymacro,270) @group nested_formats.texi(mymacro,270) @end group nested_formats.texi(mymacro,270) After nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) Something2 nested_formats.texi(mymacro,270) @group nested_formats.texi(mymacro,270) in group nested_formats.texi(mymacro,270) @end group nested_formats.texi(mymacro,270) After nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @sp 2 nested_formats.texi(mymacro,270) @group nested_formats.texi(mymacro,270) in group nested_formats.texi(mymacro,270) @end group nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @group nested_formats.texi(mymacro,270) @quotation nested_formats.texi(mymacro,270) A quot---ation nested_formats.texi(mymacro,270) @end quotation nested_formats.texi(mymacro,270) @end group nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @subheading subheading nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @verbatim nested_formats.texi(mymacro,270) in verbatim nested_formats.texi(mymacro,270) @end verbatim nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @html nested_formats.texi(mymacro,270) html nested_formats.texi(mymacro,270) @end html nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,270) @item i--tem 1 nested_formats.texi(mymacro,270) @item i--tem 2 nested_formats.texi(mymacro,270) @end itemize nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @enumerate nested_formats.texi(mymacro,270) @item e--numerate nested_formats.texi(mymacro,270) @end enumerate nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,270) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,270) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,270) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,270) @item lone mu--ltitable item nested_formats.texi(mymacro,270) @end multitable nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @example nested_formats.texi(mymacro,270) e--xample some nested_formats.texi(mymacro,270) text nested_formats.texi(mymacro,270) @end example nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @smallexample nested_formats.texi(mymacro,270) s--mallexample nested_formats.texi(mymacro,270) @end smallexample nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,270) d--effn nested_formats.texi(mymacro,270) @end deffn nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @table @bullet nested_formats.texi(mymacro,270) @item a nested_formats.texi(mymacro,270) l--ine nested_formats.texi(mymacro,270) @end table nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @cartouche nested_formats.texi(mymacro,270) c--artouche nested_formats.texi(mymacro,270) @end cartouche nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @flushleft nested_formats.texi(mymacro,270) f--lushleft nested_formats.texi(mymacro,270) @end flushleft nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @flushright nested_formats.texi(mymacro,270) f--lushright nested_formats.texi(mymacro,270) @end flushright nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @center ce--ntered line nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @group nested_formats.texi(mymacro,270) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,270) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,270) @item i--tem 1 nested_formats.texi(mymacro,270) @item i--tem 2 nested_formats.texi(mymacro,270) @end itemize nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @enumerate nested_formats.texi(mymacro,270) @item e--numerate nested_formats.texi(mymacro,270) @end enumerate nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,270) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,270) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,270) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,270) @item lone mu--ltitable item nested_formats.texi(mymacro,270) @end multitable nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @example nested_formats.texi(mymacro,270) e--xample some nested_formats.texi(mymacro,270) text nested_formats.texi(mymacro,270) @end example nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @smallexample nested_formats.texi(mymacro,270) s--mallexample nested_formats.texi(mymacro,270) @end smallexample nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,270) d--effn nested_formats.texi(mymacro,270) @end deffn nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @table @bullet nested_formats.texi(mymacro,270) @item a nested_formats.texi(mymacro,270) l--ine nested_formats.texi(mymacro,270) @end table nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @cartouche nested_formats.texi(mymacro,270) c--artouche nested_formats.texi(mymacro,270) @end cartouche nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @flushleft nested_formats.texi(mymacro,270) f--lushleft nested_formats.texi(mymacro,270) @end flushleft nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @flushright nested_formats.texi(mymacro,270) f--lushright nested_formats.texi(mymacro,270) @end flushright nested_formats.texi(mymacro,270) nested_formats.texi(mymacro,270) @center ce--ntered line nested_formats.texi(mymacro,270) @end group nested_formats.texi(mymacro,270) nested_formats.texi(,271) @item multitable item 2 @tab multitable tab 2 nested_formats.texi(,272) Call macro in mutitable nested_formats.texi(mymacro,273) in macro nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @group nested_formats.texi(mymacro,273) @end group nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @group nested_formats.texi(mymacro,273) in format_command nested_formats.texi(mymacro,273) @end group nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) Something nested_formats.texi(mymacro,273) @group nested_formats.texi(mymacro,273) @end group nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) Something nested_formats.texi(mymacro,273) @group nested_formats.texi(mymacro,273) in group nested_formats.texi(mymacro,273) @end group nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) Something2 nested_formats.texi(mymacro,273) @group nested_formats.texi(mymacro,273) @end group nested_formats.texi(mymacro,273) After nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) Something2 nested_formats.texi(mymacro,273) @group nested_formats.texi(mymacro,273) in group nested_formats.texi(mymacro,273) @end group nested_formats.texi(mymacro,273) After nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @sp 2 nested_formats.texi(mymacro,273) @group nested_formats.texi(mymacro,273) in group nested_formats.texi(mymacro,273) @end group nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @group nested_formats.texi(mymacro,273) @quotation nested_formats.texi(mymacro,273) A quot---ation nested_formats.texi(mymacro,273) @end quotation nested_formats.texi(mymacro,273) @end group nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @subheading subheading nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @verbatim nested_formats.texi(mymacro,273) in verbatim nested_formats.texi(mymacro,273) @end verbatim nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @html nested_formats.texi(mymacro,273) html nested_formats.texi(mymacro,273) @end html nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,273) @item i--tem 1 nested_formats.texi(mymacro,273) @item i--tem 2 nested_formats.texi(mymacro,273) @end itemize nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @enumerate nested_formats.texi(mymacro,273) @item e--numerate nested_formats.texi(mymacro,273) @end enumerate nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,273) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,273) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,273) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,273) @item lone mu--ltitable item nested_formats.texi(mymacro,273) @end multitable nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @example nested_formats.texi(mymacro,273) e--xample some nested_formats.texi(mymacro,273) text nested_formats.texi(mymacro,273) @end example nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @smallexample nested_formats.texi(mymacro,273) s--mallexample nested_formats.texi(mymacro,273) @end smallexample nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,273) d--effn nested_formats.texi(mymacro,273) @end deffn nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @table @bullet nested_formats.texi(mymacro,273) @item a nested_formats.texi(mymacro,273) l--ine nested_formats.texi(mymacro,273) @end table nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @cartouche nested_formats.texi(mymacro,273) c--artouche nested_formats.texi(mymacro,273) @end cartouche nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @flushleft nested_formats.texi(mymacro,273) f--lushleft nested_formats.texi(mymacro,273) @end flushleft nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @flushright nested_formats.texi(mymacro,273) f--lushright nested_formats.texi(mymacro,273) @end flushright nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @center ce--ntered line nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @group nested_formats.texi(mymacro,273) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,273) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,273) @item i--tem 1 nested_formats.texi(mymacro,273) @item i--tem 2 nested_formats.texi(mymacro,273) @end itemize nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @enumerate nested_formats.texi(mymacro,273) @item e--numerate nested_formats.texi(mymacro,273) @end enumerate nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,273) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,273) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,273) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,273) @item lone mu--ltitable item nested_formats.texi(mymacro,273) @end multitable nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @example nested_formats.texi(mymacro,273) e--xample some nested_formats.texi(mymacro,273) text nested_formats.texi(mymacro,273) @end example nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @smallexample nested_formats.texi(mymacro,273) s--mallexample nested_formats.texi(mymacro,273) @end smallexample nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,273) d--effn nested_formats.texi(mymacro,273) @end deffn nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @table @bullet nested_formats.texi(mymacro,273) @item a nested_formats.texi(mymacro,273) l--ine nested_formats.texi(mymacro,273) @end table nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @cartouche nested_formats.texi(mymacro,273) c--artouche nested_formats.texi(mymacro,273) @end cartouche nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @flushleft nested_formats.texi(mymacro,273) f--lushleft nested_formats.texi(mymacro,273) @end flushleft nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @flushright nested_formats.texi(mymacro,273) f--lushright nested_formats.texi(mymacro,273) @end flushright nested_formats.texi(mymacro,273) nested_formats.texi(mymacro,273) @center ce--ntered line nested_formats.texi(mymacro,273) @end group nested_formats.texi(mymacro,273) nested_formats.texi(,274) @item lone multitable item nested_formats.texi(,275) Call macro in mutitable in format_command nested_formats.texi(,276) @group nested_formats.texi(mymacro,277) in macro nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @group nested_formats.texi(mymacro,277) @end group nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @group nested_formats.texi(mymacro,277) in format_command nested_formats.texi(mymacro,277) @end group nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) Something nested_formats.texi(mymacro,277) @group nested_formats.texi(mymacro,277) @end group nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) Something nested_formats.texi(mymacro,277) @group nested_formats.texi(mymacro,277) in group nested_formats.texi(mymacro,277) @end group nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) Something2 nested_formats.texi(mymacro,277) @group nested_formats.texi(mymacro,277) @end group nested_formats.texi(mymacro,277) After nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) Something2 nested_formats.texi(mymacro,277) @group nested_formats.texi(mymacro,277) in group nested_formats.texi(mymacro,277) @end group nested_formats.texi(mymacro,277) After nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @sp 2 nested_formats.texi(mymacro,277) @group nested_formats.texi(mymacro,277) in group nested_formats.texi(mymacro,277) @end group nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @group nested_formats.texi(mymacro,277) @quotation nested_formats.texi(mymacro,277) A quot---ation nested_formats.texi(mymacro,277) @end quotation nested_formats.texi(mymacro,277) @end group nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @subheading subheading nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @verbatim nested_formats.texi(mymacro,277) in verbatim nested_formats.texi(mymacro,277) @end verbatim nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @html nested_formats.texi(mymacro,277) html nested_formats.texi(mymacro,277) @end html nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,277) @item i--tem 1 nested_formats.texi(mymacro,277) @item i--tem 2 nested_formats.texi(mymacro,277) @end itemize nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @enumerate nested_formats.texi(mymacro,277) @item e--numerate nested_formats.texi(mymacro,277) @end enumerate nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,277) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,277) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,277) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,277) @item lone mu--ltitable item nested_formats.texi(mymacro,277) @end multitable nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @example nested_formats.texi(mymacro,277) e--xample some nested_formats.texi(mymacro,277) text nested_formats.texi(mymacro,277) @end example nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @smallexample nested_formats.texi(mymacro,277) s--mallexample nested_formats.texi(mymacro,277) @end smallexample nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,277) d--effn nested_formats.texi(mymacro,277) @end deffn nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @table @bullet nested_formats.texi(mymacro,277) @item a nested_formats.texi(mymacro,277) l--ine nested_formats.texi(mymacro,277) @end table nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @cartouche nested_formats.texi(mymacro,277) c--artouche nested_formats.texi(mymacro,277) @end cartouche nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @flushleft nested_formats.texi(mymacro,277) f--lushleft nested_formats.texi(mymacro,277) @end flushleft nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @flushright nested_formats.texi(mymacro,277) f--lushright nested_formats.texi(mymacro,277) @end flushright nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @center ce--ntered line nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @group nested_formats.texi(mymacro,277) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,277) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,277) @item i--tem 1 nested_formats.texi(mymacro,277) @item i--tem 2 nested_formats.texi(mymacro,277) @end itemize nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @enumerate nested_formats.texi(mymacro,277) @item e--numerate nested_formats.texi(mymacro,277) @end enumerate nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,277) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,277) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,277) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,277) @item lone mu--ltitable item nested_formats.texi(mymacro,277) @end multitable nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @example nested_formats.texi(mymacro,277) e--xample some nested_formats.texi(mymacro,277) text nested_formats.texi(mymacro,277) @end example nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @smallexample nested_formats.texi(mymacro,277) s--mallexample nested_formats.texi(mymacro,277) @end smallexample nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,277) d--effn nested_formats.texi(mymacro,277) @end deffn nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @table @bullet nested_formats.texi(mymacro,277) @item a nested_formats.texi(mymacro,277) l--ine nested_formats.texi(mymacro,277) @end table nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @cartouche nested_formats.texi(mymacro,277) c--artouche nested_formats.texi(mymacro,277) @end cartouche nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @flushleft nested_formats.texi(mymacro,277) f--lushleft nested_formats.texi(mymacro,277) @end flushleft nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @flushright nested_formats.texi(mymacro,277) f--lushright nested_formats.texi(mymacro,277) @end flushright nested_formats.texi(mymacro,277) nested_formats.texi(mymacro,277) @center ce--ntered line nested_formats.texi(mymacro,277) @end group nested_formats.texi(mymacro,277) nested_formats.texi(,278) @end group nested_formats.texi(,279) @end multitable nested_formats.texi(,280) nested_formats.texi(,281) call macro at the example beginning nested_formats.texi(,282) @example nested_formats.texi(mymacro,283) in macro nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @group nested_formats.texi(mymacro,283) @end group nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @group nested_formats.texi(mymacro,283) in format_command nested_formats.texi(mymacro,283) @end group nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) Something nested_formats.texi(mymacro,283) @group nested_formats.texi(mymacro,283) @end group nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) Something nested_formats.texi(mymacro,283) @group nested_formats.texi(mymacro,283) in group nested_formats.texi(mymacro,283) @end group nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) Something2 nested_formats.texi(mymacro,283) @group nested_formats.texi(mymacro,283) @end group nested_formats.texi(mymacro,283) After nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) Something2 nested_formats.texi(mymacro,283) @group nested_formats.texi(mymacro,283) in group nested_formats.texi(mymacro,283) @end group nested_formats.texi(mymacro,283) After nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @sp 2 nested_formats.texi(mymacro,283) @group nested_formats.texi(mymacro,283) in group nested_formats.texi(mymacro,283) @end group nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @group nested_formats.texi(mymacro,283) @quotation nested_formats.texi(mymacro,283) A quot---ation nested_formats.texi(mymacro,283) @end quotation nested_formats.texi(mymacro,283) @end group nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @subheading subheading nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @verbatim nested_formats.texi(mymacro,283) in verbatim nested_formats.texi(mymacro,283) @end verbatim nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @html nested_formats.texi(mymacro,283) html nested_formats.texi(mymacro,283) @end html nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,283) @item i--tem 1 nested_formats.texi(mymacro,283) @item i--tem 2 nested_formats.texi(mymacro,283) @end itemize nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @enumerate nested_formats.texi(mymacro,283) @item e--numerate nested_formats.texi(mymacro,283) @end enumerate nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,283) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,283) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,283) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,283) @item lone mu--ltitable item nested_formats.texi(mymacro,283) @end multitable nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @example nested_formats.texi(mymacro,283) e--xample some nested_formats.texi(mymacro,283) text nested_formats.texi(mymacro,283) @end example nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @smallexample nested_formats.texi(mymacro,283) s--mallexample nested_formats.texi(mymacro,283) @end smallexample nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,283) d--effn nested_formats.texi(mymacro,283) @end deffn nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @table @bullet nested_formats.texi(mymacro,283) @item a nested_formats.texi(mymacro,283) l--ine nested_formats.texi(mymacro,283) @end table nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @cartouche nested_formats.texi(mymacro,283) c--artouche nested_formats.texi(mymacro,283) @end cartouche nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @flushleft nested_formats.texi(mymacro,283) f--lushleft nested_formats.texi(mymacro,283) @end flushleft nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @flushright nested_formats.texi(mymacro,283) f--lushright nested_formats.texi(mymacro,283) @end flushright nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @center ce--ntered line nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @group nested_formats.texi(mymacro,283) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,283) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,283) @item i--tem 1 nested_formats.texi(mymacro,283) @item i--tem 2 nested_formats.texi(mymacro,283) @end itemize nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @enumerate nested_formats.texi(mymacro,283) @item e--numerate nested_formats.texi(mymacro,283) @end enumerate nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,283) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,283) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,283) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,283) @item lone mu--ltitable item nested_formats.texi(mymacro,283) @end multitable nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @example nested_formats.texi(mymacro,283) e--xample some nested_formats.texi(mymacro,283) text nested_formats.texi(mymacro,283) @end example nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @smallexample nested_formats.texi(mymacro,283) s--mallexample nested_formats.texi(mymacro,283) @end smallexample nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,283) d--effn nested_formats.texi(mymacro,283) @end deffn nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @table @bullet nested_formats.texi(mymacro,283) @item a nested_formats.texi(mymacro,283) l--ine nested_formats.texi(mymacro,283) @end table nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @cartouche nested_formats.texi(mymacro,283) c--artouche nested_formats.texi(mymacro,283) @end cartouche nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @flushleft nested_formats.texi(mymacro,283) f--lushleft nested_formats.texi(mymacro,283) @end flushleft nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @flushright nested_formats.texi(mymacro,283) f--lushright nested_formats.texi(mymacro,283) @end flushright nested_formats.texi(mymacro,283) nested_formats.texi(mymacro,283) @center ce--ntered line nested_formats.texi(mymacro,283) @end group nested_formats.texi(mymacro,283) nested_formats.texi(,284) example some nested_formats.texi(,285) text nested_formats.texi(,286) call macro in example nested_formats.texi(mymacro,287) in macro nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @group nested_formats.texi(mymacro,287) @end group nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @group nested_formats.texi(mymacro,287) in format_command nested_formats.texi(mymacro,287) @end group nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) Something nested_formats.texi(mymacro,287) @group nested_formats.texi(mymacro,287) @end group nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) Something nested_formats.texi(mymacro,287) @group nested_formats.texi(mymacro,287) in group nested_formats.texi(mymacro,287) @end group nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) Something2 nested_formats.texi(mymacro,287) @group nested_formats.texi(mymacro,287) @end group nested_formats.texi(mymacro,287) After nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) Something2 nested_formats.texi(mymacro,287) @group nested_formats.texi(mymacro,287) in group nested_formats.texi(mymacro,287) @end group nested_formats.texi(mymacro,287) After nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @sp 2 nested_formats.texi(mymacro,287) @group nested_formats.texi(mymacro,287) in group nested_formats.texi(mymacro,287) @end group nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @group nested_formats.texi(mymacro,287) @quotation nested_formats.texi(mymacro,287) A quot---ation nested_formats.texi(mymacro,287) @end quotation nested_formats.texi(mymacro,287) @end group nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @subheading subheading nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @verbatim nested_formats.texi(mymacro,287) in verbatim nested_formats.texi(mymacro,287) @end verbatim nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @html nested_formats.texi(mymacro,287) html nested_formats.texi(mymacro,287) @end html nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,287) @item i--tem 1 nested_formats.texi(mymacro,287) @item i--tem 2 nested_formats.texi(mymacro,287) @end itemize nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @enumerate nested_formats.texi(mymacro,287) @item e--numerate nested_formats.texi(mymacro,287) @end enumerate nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,287) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,287) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,287) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,287) @item lone mu--ltitable item nested_formats.texi(mymacro,287) @end multitable nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @example nested_formats.texi(mymacro,287) e--xample some nested_formats.texi(mymacro,287) text nested_formats.texi(mymacro,287) @end example nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @smallexample nested_formats.texi(mymacro,287) s--mallexample nested_formats.texi(mymacro,287) @end smallexample nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,287) d--effn nested_formats.texi(mymacro,287) @end deffn nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @table @bullet nested_formats.texi(mymacro,287) @item a nested_formats.texi(mymacro,287) l--ine nested_formats.texi(mymacro,287) @end table nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @cartouche nested_formats.texi(mymacro,287) c--artouche nested_formats.texi(mymacro,287) @end cartouche nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @flushleft nested_formats.texi(mymacro,287) f--lushleft nested_formats.texi(mymacro,287) @end flushleft nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @flushright nested_formats.texi(mymacro,287) f--lushright nested_formats.texi(mymacro,287) @end flushright nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @center ce--ntered line nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @group nested_formats.texi(mymacro,287) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,287) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,287) @item i--tem 1 nested_formats.texi(mymacro,287) @item i--tem 2 nested_formats.texi(mymacro,287) @end itemize nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @enumerate nested_formats.texi(mymacro,287) @item e--numerate nested_formats.texi(mymacro,287) @end enumerate nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,287) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,287) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,287) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,287) @item lone mu--ltitable item nested_formats.texi(mymacro,287) @end multitable nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @example nested_formats.texi(mymacro,287) e--xample some nested_formats.texi(mymacro,287) text nested_formats.texi(mymacro,287) @end example nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @smallexample nested_formats.texi(mymacro,287) s--mallexample nested_formats.texi(mymacro,287) @end smallexample nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,287) d--effn nested_formats.texi(mymacro,287) @end deffn nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @table @bullet nested_formats.texi(mymacro,287) @item a nested_formats.texi(mymacro,287) l--ine nested_formats.texi(mymacro,287) @end table nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @cartouche nested_formats.texi(mymacro,287) c--artouche nested_formats.texi(mymacro,287) @end cartouche nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @flushleft nested_formats.texi(mymacro,287) f--lushleft nested_formats.texi(mymacro,287) @end flushleft nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @flushright nested_formats.texi(mymacro,287) f--lushright nested_formats.texi(mymacro,287) @end flushright nested_formats.texi(mymacro,287) nested_formats.texi(mymacro,287) @center ce--ntered line nested_formats.texi(mymacro,287) @end group nested_formats.texi(mymacro,287) nested_formats.texi(,288) nested_formats.texi(,289) more example text nested_formats.texi(,290) call macro in example in format_command nested_formats.texi(,291) @group nested_formats.texi(mymacro,292) in macro nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @group nested_formats.texi(mymacro,292) @end group nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @group nested_formats.texi(mymacro,292) in format_command nested_formats.texi(mymacro,292) @end group nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) Something nested_formats.texi(mymacro,292) @group nested_formats.texi(mymacro,292) @end group nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) Something nested_formats.texi(mymacro,292) @group nested_formats.texi(mymacro,292) in group nested_formats.texi(mymacro,292) @end group nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) Something2 nested_formats.texi(mymacro,292) @group nested_formats.texi(mymacro,292) @end group nested_formats.texi(mymacro,292) After nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) Something2 nested_formats.texi(mymacro,292) @group nested_formats.texi(mymacro,292) in group nested_formats.texi(mymacro,292) @end group nested_formats.texi(mymacro,292) After nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @sp 2 nested_formats.texi(mymacro,292) @group nested_formats.texi(mymacro,292) in group nested_formats.texi(mymacro,292) @end group nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @group nested_formats.texi(mymacro,292) @quotation nested_formats.texi(mymacro,292) A quot---ation nested_formats.texi(mymacro,292) @end quotation nested_formats.texi(mymacro,292) @end group nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @subheading subheading nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @verbatim nested_formats.texi(mymacro,292) in verbatim nested_formats.texi(mymacro,292) @end verbatim nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @html nested_formats.texi(mymacro,292) html nested_formats.texi(mymacro,292) @end html nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,292) @item i--tem 1 nested_formats.texi(mymacro,292) @item i--tem 2 nested_formats.texi(mymacro,292) @end itemize nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @enumerate nested_formats.texi(mymacro,292) @item e--numerate nested_formats.texi(mymacro,292) @end enumerate nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,292) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,292) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,292) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,292) @item lone mu--ltitable item nested_formats.texi(mymacro,292) @end multitable nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @example nested_formats.texi(mymacro,292) e--xample some nested_formats.texi(mymacro,292) text nested_formats.texi(mymacro,292) @end example nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @smallexample nested_formats.texi(mymacro,292) s--mallexample nested_formats.texi(mymacro,292) @end smallexample nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,292) d--effn nested_formats.texi(mymacro,292) @end deffn nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @table @bullet nested_formats.texi(mymacro,292) @item a nested_formats.texi(mymacro,292) l--ine nested_formats.texi(mymacro,292) @end table nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @cartouche nested_formats.texi(mymacro,292) c--artouche nested_formats.texi(mymacro,292) @end cartouche nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @flushleft nested_formats.texi(mymacro,292) f--lushleft nested_formats.texi(mymacro,292) @end flushleft nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @flushright nested_formats.texi(mymacro,292) f--lushright nested_formats.texi(mymacro,292) @end flushright nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @center ce--ntered line nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @group nested_formats.texi(mymacro,292) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,292) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,292) @item i--tem 1 nested_formats.texi(mymacro,292) @item i--tem 2 nested_formats.texi(mymacro,292) @end itemize nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @enumerate nested_formats.texi(mymacro,292) @item e--numerate nested_formats.texi(mymacro,292) @end enumerate nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,292) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,292) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,292) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,292) @item lone mu--ltitable item nested_formats.texi(mymacro,292) @end multitable nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @example nested_formats.texi(mymacro,292) e--xample some nested_formats.texi(mymacro,292) text nested_formats.texi(mymacro,292) @end example nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @smallexample nested_formats.texi(mymacro,292) s--mallexample nested_formats.texi(mymacro,292) @end smallexample nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,292) d--effn nested_formats.texi(mymacro,292) @end deffn nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @table @bullet nested_formats.texi(mymacro,292) @item a nested_formats.texi(mymacro,292) l--ine nested_formats.texi(mymacro,292) @end table nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @cartouche nested_formats.texi(mymacro,292) c--artouche nested_formats.texi(mymacro,292) @end cartouche nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @flushleft nested_formats.texi(mymacro,292) f--lushleft nested_formats.texi(mymacro,292) @end flushleft nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @flushright nested_formats.texi(mymacro,292) f--lushright nested_formats.texi(mymacro,292) @end flushright nested_formats.texi(mymacro,292) nested_formats.texi(mymacro,292) @center ce--ntered line nested_formats.texi(mymacro,292) @end group nested_formats.texi(mymacro,292) nested_formats.texi(,293) @end group nested_formats.texi(,294) @end example nested_formats.texi(,295) nested_formats.texi(,296) @smallexample nested_formats.texi(,297) s--mallexample nested_formats.texi(,298) @end smallexample nested_formats.texi(,299) nested_formats.texi(,300) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(,301) deffn nested_formats.texi(,302) call macro in deffn nested_formats.texi(mymacro,303) in macro nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @group nested_formats.texi(mymacro,303) @end group nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @group nested_formats.texi(mymacro,303) in format_command nested_formats.texi(mymacro,303) @end group nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) Something nested_formats.texi(mymacro,303) @group nested_formats.texi(mymacro,303) @end group nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) Something nested_formats.texi(mymacro,303) @group nested_formats.texi(mymacro,303) in group nested_formats.texi(mymacro,303) @end group nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) Something2 nested_formats.texi(mymacro,303) @group nested_formats.texi(mymacro,303) @end group nested_formats.texi(mymacro,303) After nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) Something2 nested_formats.texi(mymacro,303) @group nested_formats.texi(mymacro,303) in group nested_formats.texi(mymacro,303) @end group nested_formats.texi(mymacro,303) After nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @sp 2 nested_formats.texi(mymacro,303) @group nested_formats.texi(mymacro,303) in group nested_formats.texi(mymacro,303) @end group nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @group nested_formats.texi(mymacro,303) @quotation nested_formats.texi(mymacro,303) A quot---ation nested_formats.texi(mymacro,303) @end quotation nested_formats.texi(mymacro,303) @end group nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @subheading subheading nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @verbatim nested_formats.texi(mymacro,303) in verbatim nested_formats.texi(mymacro,303) @end verbatim nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @html nested_formats.texi(mymacro,303) html nested_formats.texi(mymacro,303) @end html nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,303) @item i--tem 1 nested_formats.texi(mymacro,303) @item i--tem 2 nested_formats.texi(mymacro,303) @end itemize nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @enumerate nested_formats.texi(mymacro,303) @item e--numerate nested_formats.texi(mymacro,303) @end enumerate nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,303) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,303) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,303) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,303) @item lone mu--ltitable item nested_formats.texi(mymacro,303) @end multitable nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @example nested_formats.texi(mymacro,303) e--xample some nested_formats.texi(mymacro,303) text nested_formats.texi(mymacro,303) @end example nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @smallexample nested_formats.texi(mymacro,303) s--mallexample nested_formats.texi(mymacro,303) @end smallexample nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,303) d--effn nested_formats.texi(mymacro,303) @end deffn nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @table @bullet nested_formats.texi(mymacro,303) @item a nested_formats.texi(mymacro,303) l--ine nested_formats.texi(mymacro,303) @end table nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @cartouche nested_formats.texi(mymacro,303) c--artouche nested_formats.texi(mymacro,303) @end cartouche nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @flushleft nested_formats.texi(mymacro,303) f--lushleft nested_formats.texi(mymacro,303) @end flushleft nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @flushright nested_formats.texi(mymacro,303) f--lushright nested_formats.texi(mymacro,303) @end flushright nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @center ce--ntered line nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @group nested_formats.texi(mymacro,303) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,303) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,303) @item i--tem 1 nested_formats.texi(mymacro,303) @item i--tem 2 nested_formats.texi(mymacro,303) @end itemize nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @enumerate nested_formats.texi(mymacro,303) @item e--numerate nested_formats.texi(mymacro,303) @end enumerate nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,303) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,303) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,303) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,303) @item lone mu--ltitable item nested_formats.texi(mymacro,303) @end multitable nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @example nested_formats.texi(mymacro,303) e--xample some nested_formats.texi(mymacro,303) text nested_formats.texi(mymacro,303) @end example nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @smallexample nested_formats.texi(mymacro,303) s--mallexample nested_formats.texi(mymacro,303) @end smallexample nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,303) d--effn nested_formats.texi(mymacro,303) @end deffn nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @table @bullet nested_formats.texi(mymacro,303) @item a nested_formats.texi(mymacro,303) l--ine nested_formats.texi(mymacro,303) @end table nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @cartouche nested_formats.texi(mymacro,303) c--artouche nested_formats.texi(mymacro,303) @end cartouche nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @flushleft nested_formats.texi(mymacro,303) f--lushleft nested_formats.texi(mymacro,303) @end flushleft nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @flushright nested_formats.texi(mymacro,303) f--lushright nested_formats.texi(mymacro,303) @end flushright nested_formats.texi(mymacro,303) nested_formats.texi(mymacro,303) @center ce--ntered line nested_formats.texi(mymacro,303) @end group nested_formats.texi(mymacro,303) nested_formats.texi(,304) deffn continues nested_formats.texi(,305) call macro in deffn in format_command nested_formats.texi(,306) @group nested_formats.texi(mymacro,307) in macro nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @group nested_formats.texi(mymacro,307) @end group nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @group nested_formats.texi(mymacro,307) in format_command nested_formats.texi(mymacro,307) @end group nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) Something nested_formats.texi(mymacro,307) @group nested_formats.texi(mymacro,307) @end group nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) Something nested_formats.texi(mymacro,307) @group nested_formats.texi(mymacro,307) in group nested_formats.texi(mymacro,307) @end group nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) Something2 nested_formats.texi(mymacro,307) @group nested_formats.texi(mymacro,307) @end group nested_formats.texi(mymacro,307) After nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) Something2 nested_formats.texi(mymacro,307) @group nested_formats.texi(mymacro,307) in group nested_formats.texi(mymacro,307) @end group nested_formats.texi(mymacro,307) After nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @sp 2 nested_formats.texi(mymacro,307) @group nested_formats.texi(mymacro,307) in group nested_formats.texi(mymacro,307) @end group nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @group nested_formats.texi(mymacro,307) @quotation nested_formats.texi(mymacro,307) A quot---ation nested_formats.texi(mymacro,307) @end quotation nested_formats.texi(mymacro,307) @end group nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @subheading subheading nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @verbatim nested_formats.texi(mymacro,307) in verbatim nested_formats.texi(mymacro,307) @end verbatim nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @html nested_formats.texi(mymacro,307) html nested_formats.texi(mymacro,307) @end html nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,307) @item i--tem 1 nested_formats.texi(mymacro,307) @item i--tem 2 nested_formats.texi(mymacro,307) @end itemize nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @enumerate nested_formats.texi(mymacro,307) @item e--numerate nested_formats.texi(mymacro,307) @end enumerate nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,307) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,307) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,307) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,307) @item lone mu--ltitable item nested_formats.texi(mymacro,307) @end multitable nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @example nested_formats.texi(mymacro,307) e--xample some nested_formats.texi(mymacro,307) text nested_formats.texi(mymacro,307) @end example nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @smallexample nested_formats.texi(mymacro,307) s--mallexample nested_formats.texi(mymacro,307) @end smallexample nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,307) d--effn nested_formats.texi(mymacro,307) @end deffn nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @table @bullet nested_formats.texi(mymacro,307) @item a nested_formats.texi(mymacro,307) l--ine nested_formats.texi(mymacro,307) @end table nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @cartouche nested_formats.texi(mymacro,307) c--artouche nested_formats.texi(mymacro,307) @end cartouche nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @flushleft nested_formats.texi(mymacro,307) f--lushleft nested_formats.texi(mymacro,307) @end flushleft nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @flushright nested_formats.texi(mymacro,307) f--lushright nested_formats.texi(mymacro,307) @end flushright nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @center ce--ntered line nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @group nested_formats.texi(mymacro,307) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,307) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,307) @item i--tem 1 nested_formats.texi(mymacro,307) @item i--tem 2 nested_formats.texi(mymacro,307) @end itemize nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @enumerate nested_formats.texi(mymacro,307) @item e--numerate nested_formats.texi(mymacro,307) @end enumerate nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,307) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,307) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,307) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,307) @item lone mu--ltitable item nested_formats.texi(mymacro,307) @end multitable nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @example nested_formats.texi(mymacro,307) e--xample some nested_formats.texi(mymacro,307) text nested_formats.texi(mymacro,307) @end example nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @smallexample nested_formats.texi(mymacro,307) s--mallexample nested_formats.texi(mymacro,307) @end smallexample nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,307) d--effn nested_formats.texi(mymacro,307) @end deffn nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @table @bullet nested_formats.texi(mymacro,307) @item a nested_formats.texi(mymacro,307) l--ine nested_formats.texi(mymacro,307) @end table nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @cartouche nested_formats.texi(mymacro,307) c--artouche nested_formats.texi(mymacro,307) @end cartouche nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @flushleft nested_formats.texi(mymacro,307) f--lushleft nested_formats.texi(mymacro,307) @end flushleft nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @flushright nested_formats.texi(mymacro,307) f--lushright nested_formats.texi(mymacro,307) @end flushright nested_formats.texi(mymacro,307) nested_formats.texi(mymacro,307) @center ce--ntered line nested_formats.texi(mymacro,307) @end group nested_formats.texi(mymacro,307) nested_formats.texi(,308) @end group nested_formats.texi(,309) @end deffn nested_formats.texi(,310) nested_formats.texi(,311) call macro in deffn at the beginning nested_formats.texi(,312) @deffn c--ategory2 d--effn_name2 a--rguments2... nested_formats.texi(mymacro,313) in macro nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @group nested_formats.texi(mymacro,313) @end group nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @group nested_formats.texi(mymacro,313) in format_command nested_formats.texi(mymacro,313) @end group nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) Something nested_formats.texi(mymacro,313) @group nested_formats.texi(mymacro,313) @end group nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) Something nested_formats.texi(mymacro,313) @group nested_formats.texi(mymacro,313) in group nested_formats.texi(mymacro,313) @end group nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) Something2 nested_formats.texi(mymacro,313) @group nested_formats.texi(mymacro,313) @end group nested_formats.texi(mymacro,313) After nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) Something2 nested_formats.texi(mymacro,313) @group nested_formats.texi(mymacro,313) in group nested_formats.texi(mymacro,313) @end group nested_formats.texi(mymacro,313) After nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @sp 2 nested_formats.texi(mymacro,313) @group nested_formats.texi(mymacro,313) in group nested_formats.texi(mymacro,313) @end group nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @group nested_formats.texi(mymacro,313) @quotation nested_formats.texi(mymacro,313) A quot---ation nested_formats.texi(mymacro,313) @end quotation nested_formats.texi(mymacro,313) @end group nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @subheading subheading nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @verbatim nested_formats.texi(mymacro,313) in verbatim nested_formats.texi(mymacro,313) @end verbatim nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @html nested_formats.texi(mymacro,313) html nested_formats.texi(mymacro,313) @end html nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,313) @item i--tem 1 nested_formats.texi(mymacro,313) @item i--tem 2 nested_formats.texi(mymacro,313) @end itemize nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @enumerate nested_formats.texi(mymacro,313) @item e--numerate nested_formats.texi(mymacro,313) @end enumerate nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,313) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,313) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,313) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,313) @item lone mu--ltitable item nested_formats.texi(mymacro,313) @end multitable nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @example nested_formats.texi(mymacro,313) e--xample some nested_formats.texi(mymacro,313) text nested_formats.texi(mymacro,313) @end example nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @smallexample nested_formats.texi(mymacro,313) s--mallexample nested_formats.texi(mymacro,313) @end smallexample nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,313) d--effn nested_formats.texi(mymacro,313) @end deffn nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @table @bullet nested_formats.texi(mymacro,313) @item a nested_formats.texi(mymacro,313) l--ine nested_formats.texi(mymacro,313) @end table nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @cartouche nested_formats.texi(mymacro,313) c--artouche nested_formats.texi(mymacro,313) @end cartouche nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @flushleft nested_formats.texi(mymacro,313) f--lushleft nested_formats.texi(mymacro,313) @end flushleft nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @flushright nested_formats.texi(mymacro,313) f--lushright nested_formats.texi(mymacro,313) @end flushright nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @center ce--ntered line nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @group nested_formats.texi(mymacro,313) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,313) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,313) @item i--tem 1 nested_formats.texi(mymacro,313) @item i--tem 2 nested_formats.texi(mymacro,313) @end itemize nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @enumerate nested_formats.texi(mymacro,313) @item e--numerate nested_formats.texi(mymacro,313) @end enumerate nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,313) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,313) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,313) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,313) @item lone mu--ltitable item nested_formats.texi(mymacro,313) @end multitable nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @example nested_formats.texi(mymacro,313) e--xample some nested_formats.texi(mymacro,313) text nested_formats.texi(mymacro,313) @end example nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @smallexample nested_formats.texi(mymacro,313) s--mallexample nested_formats.texi(mymacro,313) @end smallexample nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,313) d--effn nested_formats.texi(mymacro,313) @end deffn nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @table @bullet nested_formats.texi(mymacro,313) @item a nested_formats.texi(mymacro,313) l--ine nested_formats.texi(mymacro,313) @end table nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @cartouche nested_formats.texi(mymacro,313) c--artouche nested_formats.texi(mymacro,313) @end cartouche nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @flushleft nested_formats.texi(mymacro,313) f--lushleft nested_formats.texi(mymacro,313) @end flushleft nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @flushright nested_formats.texi(mymacro,313) f--lushright nested_formats.texi(mymacro,313) @end flushright nested_formats.texi(mymacro,313) nested_formats.texi(mymacro,313) @center ce--ntered line nested_formats.texi(mymacro,313) @end group nested_formats.texi(mymacro,313) nested_formats.texi(,314) @end deffn nested_formats.texi(,315) nested_formats.texi(,316) @table @bullet nested_formats.texi(,317) @item a line nested_formats.texi(,318) call macro in table nested_formats.texi(mymacro,319) in macro nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @group nested_formats.texi(mymacro,319) @end group nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @group nested_formats.texi(mymacro,319) in format_command nested_formats.texi(mymacro,319) @end group nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) Something nested_formats.texi(mymacro,319) @group nested_formats.texi(mymacro,319) @end group nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) Something nested_formats.texi(mymacro,319) @group nested_formats.texi(mymacro,319) in group nested_formats.texi(mymacro,319) @end group nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) Something2 nested_formats.texi(mymacro,319) @group nested_formats.texi(mymacro,319) @end group nested_formats.texi(mymacro,319) After nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) Something2 nested_formats.texi(mymacro,319) @group nested_formats.texi(mymacro,319) in group nested_formats.texi(mymacro,319) @end group nested_formats.texi(mymacro,319) After nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @sp 2 nested_formats.texi(mymacro,319) @group nested_formats.texi(mymacro,319) in group nested_formats.texi(mymacro,319) @end group nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @group nested_formats.texi(mymacro,319) @quotation nested_formats.texi(mymacro,319) A quot---ation nested_formats.texi(mymacro,319) @end quotation nested_formats.texi(mymacro,319) @end group nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @subheading subheading nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @verbatim nested_formats.texi(mymacro,319) in verbatim nested_formats.texi(mymacro,319) @end verbatim nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @html nested_formats.texi(mymacro,319) html nested_formats.texi(mymacro,319) @end html nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,319) @item i--tem 1 nested_formats.texi(mymacro,319) @item i--tem 2 nested_formats.texi(mymacro,319) @end itemize nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @enumerate nested_formats.texi(mymacro,319) @item e--numerate nested_formats.texi(mymacro,319) @end enumerate nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,319) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,319) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,319) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,319) @item lone mu--ltitable item nested_formats.texi(mymacro,319) @end multitable nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @example nested_formats.texi(mymacro,319) e--xample some nested_formats.texi(mymacro,319) text nested_formats.texi(mymacro,319) @end example nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @smallexample nested_formats.texi(mymacro,319) s--mallexample nested_formats.texi(mymacro,319) @end smallexample nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,319) d--effn nested_formats.texi(mymacro,319) @end deffn nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @table @bullet nested_formats.texi(mymacro,319) @item a nested_formats.texi(mymacro,319) l--ine nested_formats.texi(mymacro,319) @end table nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @cartouche nested_formats.texi(mymacro,319) c--artouche nested_formats.texi(mymacro,319) @end cartouche nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @flushleft nested_formats.texi(mymacro,319) f--lushleft nested_formats.texi(mymacro,319) @end flushleft nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @flushright nested_formats.texi(mymacro,319) f--lushright nested_formats.texi(mymacro,319) @end flushright nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @center ce--ntered line nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @group nested_formats.texi(mymacro,319) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,319) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,319) @item i--tem 1 nested_formats.texi(mymacro,319) @item i--tem 2 nested_formats.texi(mymacro,319) @end itemize nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @enumerate nested_formats.texi(mymacro,319) @item e--numerate nested_formats.texi(mymacro,319) @end enumerate nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,319) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,319) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,319) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,319) @item lone mu--ltitable item nested_formats.texi(mymacro,319) @end multitable nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @example nested_formats.texi(mymacro,319) e--xample some nested_formats.texi(mymacro,319) text nested_formats.texi(mymacro,319) @end example nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @smallexample nested_formats.texi(mymacro,319) s--mallexample nested_formats.texi(mymacro,319) @end smallexample nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,319) d--effn nested_formats.texi(mymacro,319) @end deffn nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @table @bullet nested_formats.texi(mymacro,319) @item a nested_formats.texi(mymacro,319) l--ine nested_formats.texi(mymacro,319) @end table nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @cartouche nested_formats.texi(mymacro,319) c--artouche nested_formats.texi(mymacro,319) @end cartouche nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @flushleft nested_formats.texi(mymacro,319) f--lushleft nested_formats.texi(mymacro,319) @end flushleft nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @flushright nested_formats.texi(mymacro,319) f--lushright nested_formats.texi(mymacro,319) @end flushright nested_formats.texi(mymacro,319) nested_formats.texi(mymacro,319) @center ce--ntered line nested_formats.texi(mymacro,319) @end group nested_formats.texi(mymacro,319) nested_formats.texi(,320) call macro in table at an item beginning nested_formats.texi(,321) @item a line nested_formats.texi(mymacro,322) in macro nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @group nested_formats.texi(mymacro,322) @end group nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @group nested_formats.texi(mymacro,322) in format_command nested_formats.texi(mymacro,322) @end group nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) Something nested_formats.texi(mymacro,322) @group nested_formats.texi(mymacro,322) @end group nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) Something nested_formats.texi(mymacro,322) @group nested_formats.texi(mymacro,322) in group nested_formats.texi(mymacro,322) @end group nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) Something2 nested_formats.texi(mymacro,322) @group nested_formats.texi(mymacro,322) @end group nested_formats.texi(mymacro,322) After nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) Something2 nested_formats.texi(mymacro,322) @group nested_formats.texi(mymacro,322) in group nested_formats.texi(mymacro,322) @end group nested_formats.texi(mymacro,322) After nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @sp 2 nested_formats.texi(mymacro,322) @group nested_formats.texi(mymacro,322) in group nested_formats.texi(mymacro,322) @end group nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @group nested_formats.texi(mymacro,322) @quotation nested_formats.texi(mymacro,322) A quot---ation nested_formats.texi(mymacro,322) @end quotation nested_formats.texi(mymacro,322) @end group nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @subheading subheading nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @verbatim nested_formats.texi(mymacro,322) in verbatim nested_formats.texi(mymacro,322) @end verbatim nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @html nested_formats.texi(mymacro,322) html nested_formats.texi(mymacro,322) @end html nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,322) @item i--tem 1 nested_formats.texi(mymacro,322) @item i--tem 2 nested_formats.texi(mymacro,322) @end itemize nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @enumerate nested_formats.texi(mymacro,322) @item e--numerate nested_formats.texi(mymacro,322) @end enumerate nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,322) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,322) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,322) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,322) @item lone mu--ltitable item nested_formats.texi(mymacro,322) @end multitable nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @example nested_formats.texi(mymacro,322) e--xample some nested_formats.texi(mymacro,322) text nested_formats.texi(mymacro,322) @end example nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @smallexample nested_formats.texi(mymacro,322) s--mallexample nested_formats.texi(mymacro,322) @end smallexample nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,322) d--effn nested_formats.texi(mymacro,322) @end deffn nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @table @bullet nested_formats.texi(mymacro,322) @item a nested_formats.texi(mymacro,322) l--ine nested_formats.texi(mymacro,322) @end table nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @cartouche nested_formats.texi(mymacro,322) c--artouche nested_formats.texi(mymacro,322) @end cartouche nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @flushleft nested_formats.texi(mymacro,322) f--lushleft nested_formats.texi(mymacro,322) @end flushleft nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @flushright nested_formats.texi(mymacro,322) f--lushright nested_formats.texi(mymacro,322) @end flushright nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @center ce--ntered line nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @group nested_formats.texi(mymacro,322) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,322) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,322) @item i--tem 1 nested_formats.texi(mymacro,322) @item i--tem 2 nested_formats.texi(mymacro,322) @end itemize nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @enumerate nested_formats.texi(mymacro,322) @item e--numerate nested_formats.texi(mymacro,322) @end enumerate nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,322) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,322) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,322) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,322) @item lone mu--ltitable item nested_formats.texi(mymacro,322) @end multitable nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @example nested_formats.texi(mymacro,322) e--xample some nested_formats.texi(mymacro,322) text nested_formats.texi(mymacro,322) @end example nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @smallexample nested_formats.texi(mymacro,322) s--mallexample nested_formats.texi(mymacro,322) @end smallexample nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,322) d--effn nested_formats.texi(mymacro,322) @end deffn nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @table @bullet nested_formats.texi(mymacro,322) @item a nested_formats.texi(mymacro,322) l--ine nested_formats.texi(mymacro,322) @end table nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @cartouche nested_formats.texi(mymacro,322) c--artouche nested_formats.texi(mymacro,322) @end cartouche nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @flushleft nested_formats.texi(mymacro,322) f--lushleft nested_formats.texi(mymacro,322) @end flushleft nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @flushright nested_formats.texi(mymacro,322) f--lushright nested_formats.texi(mymacro,322) @end flushright nested_formats.texi(mymacro,322) nested_formats.texi(mymacro,322) @center ce--ntered line nested_formats.texi(mymacro,322) @end group nested_formats.texi(mymacro,322) nested_formats.texi(,323) @item a line2 nested_formats.texi(,324) call macro in table in format_command nested_formats.texi(,325) @group nested_formats.texi(mymacro,326) in macro nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @group nested_formats.texi(mymacro,326) @end group nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @group nested_formats.texi(mymacro,326) in format_command nested_formats.texi(mymacro,326) @end group nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) Something nested_formats.texi(mymacro,326) @group nested_formats.texi(mymacro,326) @end group nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) Something nested_formats.texi(mymacro,326) @group nested_formats.texi(mymacro,326) in group nested_formats.texi(mymacro,326) @end group nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) Something2 nested_formats.texi(mymacro,326) @group nested_formats.texi(mymacro,326) @end group nested_formats.texi(mymacro,326) After nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) Something2 nested_formats.texi(mymacro,326) @group nested_formats.texi(mymacro,326) in group nested_formats.texi(mymacro,326) @end group nested_formats.texi(mymacro,326) After nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @sp 2 nested_formats.texi(mymacro,326) @group nested_formats.texi(mymacro,326) in group nested_formats.texi(mymacro,326) @end group nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @group nested_formats.texi(mymacro,326) @quotation nested_formats.texi(mymacro,326) A quot---ation nested_formats.texi(mymacro,326) @end quotation nested_formats.texi(mymacro,326) @end group nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @subheading subheading nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @verbatim nested_formats.texi(mymacro,326) in verbatim nested_formats.texi(mymacro,326) @end verbatim nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @html nested_formats.texi(mymacro,326) html nested_formats.texi(mymacro,326) @end html nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,326) @item i--tem 1 nested_formats.texi(mymacro,326) @item i--tem 2 nested_formats.texi(mymacro,326) @end itemize nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @enumerate nested_formats.texi(mymacro,326) @item e--numerate nested_formats.texi(mymacro,326) @end enumerate nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,326) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,326) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,326) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,326) @item lone mu--ltitable item nested_formats.texi(mymacro,326) @end multitable nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @example nested_formats.texi(mymacro,326) e--xample some nested_formats.texi(mymacro,326) text nested_formats.texi(mymacro,326) @end example nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @smallexample nested_formats.texi(mymacro,326) s--mallexample nested_formats.texi(mymacro,326) @end smallexample nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,326) d--effn nested_formats.texi(mymacro,326) @end deffn nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @table @bullet nested_formats.texi(mymacro,326) @item a nested_formats.texi(mymacro,326) l--ine nested_formats.texi(mymacro,326) @end table nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @cartouche nested_formats.texi(mymacro,326) c--artouche nested_formats.texi(mymacro,326) @end cartouche nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @flushleft nested_formats.texi(mymacro,326) f--lushleft nested_formats.texi(mymacro,326) @end flushleft nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @flushright nested_formats.texi(mymacro,326) f--lushright nested_formats.texi(mymacro,326) @end flushright nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @center ce--ntered line nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @group nested_formats.texi(mymacro,326) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,326) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,326) @item i--tem 1 nested_formats.texi(mymacro,326) @item i--tem 2 nested_formats.texi(mymacro,326) @end itemize nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @enumerate nested_formats.texi(mymacro,326) @item e--numerate nested_formats.texi(mymacro,326) @end enumerate nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,326) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,326) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,326) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,326) @item lone mu--ltitable item nested_formats.texi(mymacro,326) @end multitable nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @example nested_formats.texi(mymacro,326) e--xample some nested_formats.texi(mymacro,326) text nested_formats.texi(mymacro,326) @end example nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @smallexample nested_formats.texi(mymacro,326) s--mallexample nested_formats.texi(mymacro,326) @end smallexample nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,326) d--effn nested_formats.texi(mymacro,326) @end deffn nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @table @bullet nested_formats.texi(mymacro,326) @item a nested_formats.texi(mymacro,326) l--ine nested_formats.texi(mymacro,326) @end table nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @cartouche nested_formats.texi(mymacro,326) c--artouche nested_formats.texi(mymacro,326) @end cartouche nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @flushleft nested_formats.texi(mymacro,326) f--lushleft nested_formats.texi(mymacro,326) @end flushleft nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @flushright nested_formats.texi(mymacro,326) f--lushright nested_formats.texi(mymacro,326) @end flushright nested_formats.texi(mymacro,326) nested_formats.texi(mymacro,326) @center ce--ntered line nested_formats.texi(mymacro,326) @end group nested_formats.texi(mymacro,326) nested_formats.texi(,327) @end group nested_formats.texi(,328) @end table nested_formats.texi(,329) nested_formats.texi(,330) call macro at cartouche begin nested_formats.texi(,331) @cartouche nested_formats.texi(mymacro,332) in macro nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @group nested_formats.texi(mymacro,332) @end group nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @group nested_formats.texi(mymacro,332) in format_command nested_formats.texi(mymacro,332) @end group nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) Something nested_formats.texi(mymacro,332) @group nested_formats.texi(mymacro,332) @end group nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) Something nested_formats.texi(mymacro,332) @group nested_formats.texi(mymacro,332) in group nested_formats.texi(mymacro,332) @end group nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) Something2 nested_formats.texi(mymacro,332) @group nested_formats.texi(mymacro,332) @end group nested_formats.texi(mymacro,332) After nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) Something2 nested_formats.texi(mymacro,332) @group nested_formats.texi(mymacro,332) in group nested_formats.texi(mymacro,332) @end group nested_formats.texi(mymacro,332) After nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @sp 2 nested_formats.texi(mymacro,332) @group nested_formats.texi(mymacro,332) in group nested_formats.texi(mymacro,332) @end group nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @group nested_formats.texi(mymacro,332) @quotation nested_formats.texi(mymacro,332) A quot---ation nested_formats.texi(mymacro,332) @end quotation nested_formats.texi(mymacro,332) @end group nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @subheading subheading nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @verbatim nested_formats.texi(mymacro,332) in verbatim nested_formats.texi(mymacro,332) @end verbatim nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @html nested_formats.texi(mymacro,332) html nested_formats.texi(mymacro,332) @end html nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,332) @item i--tem 1 nested_formats.texi(mymacro,332) @item i--tem 2 nested_formats.texi(mymacro,332) @end itemize nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @enumerate nested_formats.texi(mymacro,332) @item e--numerate nested_formats.texi(mymacro,332) @end enumerate nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,332) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,332) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,332) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,332) @item lone mu--ltitable item nested_formats.texi(mymacro,332) @end multitable nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @example nested_formats.texi(mymacro,332) e--xample some nested_formats.texi(mymacro,332) text nested_formats.texi(mymacro,332) @end example nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @smallexample nested_formats.texi(mymacro,332) s--mallexample nested_formats.texi(mymacro,332) @end smallexample nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,332) d--effn nested_formats.texi(mymacro,332) @end deffn nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @table @bullet nested_formats.texi(mymacro,332) @item a nested_formats.texi(mymacro,332) l--ine nested_formats.texi(mymacro,332) @end table nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @cartouche nested_formats.texi(mymacro,332) c--artouche nested_formats.texi(mymacro,332) @end cartouche nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @flushleft nested_formats.texi(mymacro,332) f--lushleft nested_formats.texi(mymacro,332) @end flushleft nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @flushright nested_formats.texi(mymacro,332) f--lushright nested_formats.texi(mymacro,332) @end flushright nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @center ce--ntered line nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @group nested_formats.texi(mymacro,332) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,332) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,332) @item i--tem 1 nested_formats.texi(mymacro,332) @item i--tem 2 nested_formats.texi(mymacro,332) @end itemize nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @enumerate nested_formats.texi(mymacro,332) @item e--numerate nested_formats.texi(mymacro,332) @end enumerate nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,332) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,332) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,332) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,332) @item lone mu--ltitable item nested_formats.texi(mymacro,332) @end multitable nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @example nested_formats.texi(mymacro,332) e--xample some nested_formats.texi(mymacro,332) text nested_formats.texi(mymacro,332) @end example nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @smallexample nested_formats.texi(mymacro,332) s--mallexample nested_formats.texi(mymacro,332) @end smallexample nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,332) d--effn nested_formats.texi(mymacro,332) @end deffn nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @table @bullet nested_formats.texi(mymacro,332) @item a nested_formats.texi(mymacro,332) l--ine nested_formats.texi(mymacro,332) @end table nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @cartouche nested_formats.texi(mymacro,332) c--artouche nested_formats.texi(mymacro,332) @end cartouche nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @flushleft nested_formats.texi(mymacro,332) f--lushleft nested_formats.texi(mymacro,332) @end flushleft nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @flushright nested_formats.texi(mymacro,332) f--lushright nested_formats.texi(mymacro,332) @end flushright nested_formats.texi(mymacro,332) nested_formats.texi(mymacro,332) @center ce--ntered line nested_formats.texi(mymacro,332) @end group nested_formats.texi(mymacro,332) nested_formats.texi(,333) cartouche nested_formats.texi(,334) call macro in cartouche nested_formats.texi(mymacro,335) in macro nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @group nested_formats.texi(mymacro,335) @end group nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @group nested_formats.texi(mymacro,335) in format_command nested_formats.texi(mymacro,335) @end group nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) Something nested_formats.texi(mymacro,335) @group nested_formats.texi(mymacro,335) @end group nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) Something nested_formats.texi(mymacro,335) @group nested_formats.texi(mymacro,335) in group nested_formats.texi(mymacro,335) @end group nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) Something2 nested_formats.texi(mymacro,335) @group nested_formats.texi(mymacro,335) @end group nested_formats.texi(mymacro,335) After nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) Something2 nested_formats.texi(mymacro,335) @group nested_formats.texi(mymacro,335) in group nested_formats.texi(mymacro,335) @end group nested_formats.texi(mymacro,335) After nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @sp 2 nested_formats.texi(mymacro,335) @group nested_formats.texi(mymacro,335) in group nested_formats.texi(mymacro,335) @end group nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @group nested_formats.texi(mymacro,335) @quotation nested_formats.texi(mymacro,335) A quot---ation nested_formats.texi(mymacro,335) @end quotation nested_formats.texi(mymacro,335) @end group nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @subheading subheading nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @verbatim nested_formats.texi(mymacro,335) in verbatim nested_formats.texi(mymacro,335) @end verbatim nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @html nested_formats.texi(mymacro,335) html nested_formats.texi(mymacro,335) @end html nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,335) @item i--tem 1 nested_formats.texi(mymacro,335) @item i--tem 2 nested_formats.texi(mymacro,335) @end itemize nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @enumerate nested_formats.texi(mymacro,335) @item e--numerate nested_formats.texi(mymacro,335) @end enumerate nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,335) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,335) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,335) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,335) @item lone mu--ltitable item nested_formats.texi(mymacro,335) @end multitable nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @example nested_formats.texi(mymacro,335) e--xample some nested_formats.texi(mymacro,335) text nested_formats.texi(mymacro,335) @end example nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @smallexample nested_formats.texi(mymacro,335) s--mallexample nested_formats.texi(mymacro,335) @end smallexample nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,335) d--effn nested_formats.texi(mymacro,335) @end deffn nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @table @bullet nested_formats.texi(mymacro,335) @item a nested_formats.texi(mymacro,335) l--ine nested_formats.texi(mymacro,335) @end table nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @cartouche nested_formats.texi(mymacro,335) c--artouche nested_formats.texi(mymacro,335) @end cartouche nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @flushleft nested_formats.texi(mymacro,335) f--lushleft nested_formats.texi(mymacro,335) @end flushleft nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @flushright nested_formats.texi(mymacro,335) f--lushright nested_formats.texi(mymacro,335) @end flushright nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @center ce--ntered line nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @group nested_formats.texi(mymacro,335) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,335) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,335) @item i--tem 1 nested_formats.texi(mymacro,335) @item i--tem 2 nested_formats.texi(mymacro,335) @end itemize nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @enumerate nested_formats.texi(mymacro,335) @item e--numerate nested_formats.texi(mymacro,335) @end enumerate nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,335) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,335) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,335) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,335) @item lone mu--ltitable item nested_formats.texi(mymacro,335) @end multitable nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @example nested_formats.texi(mymacro,335) e--xample some nested_formats.texi(mymacro,335) text nested_formats.texi(mymacro,335) @end example nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @smallexample nested_formats.texi(mymacro,335) s--mallexample nested_formats.texi(mymacro,335) @end smallexample nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,335) d--effn nested_formats.texi(mymacro,335) @end deffn nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @table @bullet nested_formats.texi(mymacro,335) @item a nested_formats.texi(mymacro,335) l--ine nested_formats.texi(mymacro,335) @end table nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @cartouche nested_formats.texi(mymacro,335) c--artouche nested_formats.texi(mymacro,335) @end cartouche nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @flushleft nested_formats.texi(mymacro,335) f--lushleft nested_formats.texi(mymacro,335) @end flushleft nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @flushright nested_formats.texi(mymacro,335) f--lushright nested_formats.texi(mymacro,335) @end flushright nested_formats.texi(mymacro,335) nested_formats.texi(mymacro,335) @center ce--ntered line nested_formats.texi(mymacro,335) @end group nested_formats.texi(mymacro,335) nested_formats.texi(,336) call macro in cartouche in format_command nested_formats.texi(,337) @group nested_formats.texi(mymacro,338) in macro nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @group nested_formats.texi(mymacro,338) @end group nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @group nested_formats.texi(mymacro,338) in format_command nested_formats.texi(mymacro,338) @end group nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) Something nested_formats.texi(mymacro,338) @group nested_formats.texi(mymacro,338) @end group nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) Something nested_formats.texi(mymacro,338) @group nested_formats.texi(mymacro,338) in group nested_formats.texi(mymacro,338) @end group nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) Something2 nested_formats.texi(mymacro,338) @group nested_formats.texi(mymacro,338) @end group nested_formats.texi(mymacro,338) After nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) Something2 nested_formats.texi(mymacro,338) @group nested_formats.texi(mymacro,338) in group nested_formats.texi(mymacro,338) @end group nested_formats.texi(mymacro,338) After nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @sp 2 nested_formats.texi(mymacro,338) @group nested_formats.texi(mymacro,338) in group nested_formats.texi(mymacro,338) @end group nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @group nested_formats.texi(mymacro,338) @quotation nested_formats.texi(mymacro,338) A quot---ation nested_formats.texi(mymacro,338) @end quotation nested_formats.texi(mymacro,338) @end group nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @subheading subheading nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @verbatim nested_formats.texi(mymacro,338) in verbatim nested_formats.texi(mymacro,338) @end verbatim nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @html nested_formats.texi(mymacro,338) html nested_formats.texi(mymacro,338) @end html nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,338) @item i--tem 1 nested_formats.texi(mymacro,338) @item i--tem 2 nested_formats.texi(mymacro,338) @end itemize nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @enumerate nested_formats.texi(mymacro,338) @item e--numerate nested_formats.texi(mymacro,338) @end enumerate nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,338) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,338) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,338) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,338) @item lone mu--ltitable item nested_formats.texi(mymacro,338) @end multitable nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @example nested_formats.texi(mymacro,338) e--xample some nested_formats.texi(mymacro,338) text nested_formats.texi(mymacro,338) @end example nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @smallexample nested_formats.texi(mymacro,338) s--mallexample nested_formats.texi(mymacro,338) @end smallexample nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,338) d--effn nested_formats.texi(mymacro,338) @end deffn nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @table @bullet nested_formats.texi(mymacro,338) @item a nested_formats.texi(mymacro,338) l--ine nested_formats.texi(mymacro,338) @end table nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @cartouche nested_formats.texi(mymacro,338) c--artouche nested_formats.texi(mymacro,338) @end cartouche nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @flushleft nested_formats.texi(mymacro,338) f--lushleft nested_formats.texi(mymacro,338) @end flushleft nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @flushright nested_formats.texi(mymacro,338) f--lushright nested_formats.texi(mymacro,338) @end flushright nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @center ce--ntered line nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @group nested_formats.texi(mymacro,338) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,338) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,338) @item i--tem 1 nested_formats.texi(mymacro,338) @item i--tem 2 nested_formats.texi(mymacro,338) @end itemize nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @enumerate nested_formats.texi(mymacro,338) @item e--numerate nested_formats.texi(mymacro,338) @end enumerate nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,338) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,338) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,338) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,338) @item lone mu--ltitable item nested_formats.texi(mymacro,338) @end multitable nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @example nested_formats.texi(mymacro,338) e--xample some nested_formats.texi(mymacro,338) text nested_formats.texi(mymacro,338) @end example nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @smallexample nested_formats.texi(mymacro,338) s--mallexample nested_formats.texi(mymacro,338) @end smallexample nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,338) d--effn nested_formats.texi(mymacro,338) @end deffn nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @table @bullet nested_formats.texi(mymacro,338) @item a nested_formats.texi(mymacro,338) l--ine nested_formats.texi(mymacro,338) @end table nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @cartouche nested_formats.texi(mymacro,338) c--artouche nested_formats.texi(mymacro,338) @end cartouche nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @flushleft nested_formats.texi(mymacro,338) f--lushleft nested_formats.texi(mymacro,338) @end flushleft nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @flushright nested_formats.texi(mymacro,338) f--lushright nested_formats.texi(mymacro,338) @end flushright nested_formats.texi(mymacro,338) nested_formats.texi(mymacro,338) @center ce--ntered line nested_formats.texi(mymacro,338) @end group nested_formats.texi(mymacro,338) nested_formats.texi(,339) @end group nested_formats.texi(,340) @end cartouche nested_formats.texi(,341) nested_formats.texi(,342) @flushleft nested_formats.texi(,343) call macro in flushleft nested_formats.texi(mymacro,344) in macro nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @group nested_formats.texi(mymacro,344) @end group nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @group nested_formats.texi(mymacro,344) in format_command nested_formats.texi(mymacro,344) @end group nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) Something nested_formats.texi(mymacro,344) @group nested_formats.texi(mymacro,344) @end group nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) Something nested_formats.texi(mymacro,344) @group nested_formats.texi(mymacro,344) in group nested_formats.texi(mymacro,344) @end group nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) Something2 nested_formats.texi(mymacro,344) @group nested_formats.texi(mymacro,344) @end group nested_formats.texi(mymacro,344) After nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) Something2 nested_formats.texi(mymacro,344) @group nested_formats.texi(mymacro,344) in group nested_formats.texi(mymacro,344) @end group nested_formats.texi(mymacro,344) After nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @sp 2 nested_formats.texi(mymacro,344) @group nested_formats.texi(mymacro,344) in group nested_formats.texi(mymacro,344) @end group nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @group nested_formats.texi(mymacro,344) @quotation nested_formats.texi(mymacro,344) A quot---ation nested_formats.texi(mymacro,344) @end quotation nested_formats.texi(mymacro,344) @end group nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @subheading subheading nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @verbatim nested_formats.texi(mymacro,344) in verbatim nested_formats.texi(mymacro,344) @end verbatim nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @html nested_formats.texi(mymacro,344) html nested_formats.texi(mymacro,344) @end html nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,344) @item i--tem 1 nested_formats.texi(mymacro,344) @item i--tem 2 nested_formats.texi(mymacro,344) @end itemize nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @enumerate nested_formats.texi(mymacro,344) @item e--numerate nested_formats.texi(mymacro,344) @end enumerate nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,344) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,344) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,344) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,344) @item lone mu--ltitable item nested_formats.texi(mymacro,344) @end multitable nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @example nested_formats.texi(mymacro,344) e--xample some nested_formats.texi(mymacro,344) text nested_formats.texi(mymacro,344) @end example nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @smallexample nested_formats.texi(mymacro,344) s--mallexample nested_formats.texi(mymacro,344) @end smallexample nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,344) d--effn nested_formats.texi(mymacro,344) @end deffn nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @table @bullet nested_formats.texi(mymacro,344) @item a nested_formats.texi(mymacro,344) l--ine nested_formats.texi(mymacro,344) @end table nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @cartouche nested_formats.texi(mymacro,344) c--artouche nested_formats.texi(mymacro,344) @end cartouche nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @flushleft nested_formats.texi(mymacro,344) f--lushleft nested_formats.texi(mymacro,344) @end flushleft nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @flushright nested_formats.texi(mymacro,344) f--lushright nested_formats.texi(mymacro,344) @end flushright nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @center ce--ntered line nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @group nested_formats.texi(mymacro,344) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,344) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,344) @item i--tem 1 nested_formats.texi(mymacro,344) @item i--tem 2 nested_formats.texi(mymacro,344) @end itemize nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @enumerate nested_formats.texi(mymacro,344) @item e--numerate nested_formats.texi(mymacro,344) @end enumerate nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,344) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,344) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,344) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,344) @item lone mu--ltitable item nested_formats.texi(mymacro,344) @end multitable nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @example nested_formats.texi(mymacro,344) e--xample some nested_formats.texi(mymacro,344) text nested_formats.texi(mymacro,344) @end example nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @smallexample nested_formats.texi(mymacro,344) s--mallexample nested_formats.texi(mymacro,344) @end smallexample nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,344) d--effn nested_formats.texi(mymacro,344) @end deffn nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @table @bullet nested_formats.texi(mymacro,344) @item a nested_formats.texi(mymacro,344) l--ine nested_formats.texi(mymacro,344) @end table nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @cartouche nested_formats.texi(mymacro,344) c--artouche nested_formats.texi(mymacro,344) @end cartouche nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @flushleft nested_formats.texi(mymacro,344) f--lushleft nested_formats.texi(mymacro,344) @end flushleft nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @flushright nested_formats.texi(mymacro,344) f--lushright nested_formats.texi(mymacro,344) @end flushright nested_formats.texi(mymacro,344) nested_formats.texi(mymacro,344) @center ce--ntered line nested_formats.texi(mymacro,344) @end group nested_formats.texi(mymacro,344) nested_formats.texi(,345) flushleft nested_formats.texi(,346) call macro in flushleft in format_command nested_formats.texi(,347) @group nested_formats.texi(mymacro,348) in macro nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @group nested_formats.texi(mymacro,348) @end group nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @group nested_formats.texi(mymacro,348) in format_command nested_formats.texi(mymacro,348) @end group nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) Something nested_formats.texi(mymacro,348) @group nested_formats.texi(mymacro,348) @end group nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) Something nested_formats.texi(mymacro,348) @group nested_formats.texi(mymacro,348) in group nested_formats.texi(mymacro,348) @end group nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) Something2 nested_formats.texi(mymacro,348) @group nested_formats.texi(mymacro,348) @end group nested_formats.texi(mymacro,348) After nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) Something2 nested_formats.texi(mymacro,348) @group nested_formats.texi(mymacro,348) in group nested_formats.texi(mymacro,348) @end group nested_formats.texi(mymacro,348) After nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @sp 2 nested_formats.texi(mymacro,348) @group nested_formats.texi(mymacro,348) in group nested_formats.texi(mymacro,348) @end group nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @group nested_formats.texi(mymacro,348) @quotation nested_formats.texi(mymacro,348) A quot---ation nested_formats.texi(mymacro,348) @end quotation nested_formats.texi(mymacro,348) @end group nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @subheading subheading nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @verbatim nested_formats.texi(mymacro,348) in verbatim nested_formats.texi(mymacro,348) @end verbatim nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @html nested_formats.texi(mymacro,348) html nested_formats.texi(mymacro,348) @end html nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,348) @item i--tem 1 nested_formats.texi(mymacro,348) @item i--tem 2 nested_formats.texi(mymacro,348) @end itemize nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @enumerate nested_formats.texi(mymacro,348) @item e--numerate nested_formats.texi(mymacro,348) @end enumerate nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,348) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,348) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,348) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,348) @item lone mu--ltitable item nested_formats.texi(mymacro,348) @end multitable nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @example nested_formats.texi(mymacro,348) e--xample some nested_formats.texi(mymacro,348) text nested_formats.texi(mymacro,348) @end example nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @smallexample nested_formats.texi(mymacro,348) s--mallexample nested_formats.texi(mymacro,348) @end smallexample nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,348) d--effn nested_formats.texi(mymacro,348) @end deffn nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @table @bullet nested_formats.texi(mymacro,348) @item a nested_formats.texi(mymacro,348) l--ine nested_formats.texi(mymacro,348) @end table nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @cartouche nested_formats.texi(mymacro,348) c--artouche nested_formats.texi(mymacro,348) @end cartouche nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @flushleft nested_formats.texi(mymacro,348) f--lushleft nested_formats.texi(mymacro,348) @end flushleft nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @flushright nested_formats.texi(mymacro,348) f--lushright nested_formats.texi(mymacro,348) @end flushright nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @center ce--ntered line nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @group nested_formats.texi(mymacro,348) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,348) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,348) @item i--tem 1 nested_formats.texi(mymacro,348) @item i--tem 2 nested_formats.texi(mymacro,348) @end itemize nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @enumerate nested_formats.texi(mymacro,348) @item e--numerate nested_formats.texi(mymacro,348) @end enumerate nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,348) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,348) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,348) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,348) @item lone mu--ltitable item nested_formats.texi(mymacro,348) @end multitable nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @example nested_formats.texi(mymacro,348) e--xample some nested_formats.texi(mymacro,348) text nested_formats.texi(mymacro,348) @end example nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @smallexample nested_formats.texi(mymacro,348) s--mallexample nested_formats.texi(mymacro,348) @end smallexample nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,348) d--effn nested_formats.texi(mymacro,348) @end deffn nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @table @bullet nested_formats.texi(mymacro,348) @item a nested_formats.texi(mymacro,348) l--ine nested_formats.texi(mymacro,348) @end table nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @cartouche nested_formats.texi(mymacro,348) c--artouche nested_formats.texi(mymacro,348) @end cartouche nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @flushleft nested_formats.texi(mymacro,348) f--lushleft nested_formats.texi(mymacro,348) @end flushleft nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @flushright nested_formats.texi(mymacro,348) f--lushright nested_formats.texi(mymacro,348) @end flushright nested_formats.texi(mymacro,348) nested_formats.texi(mymacro,348) @center ce--ntered line nested_formats.texi(mymacro,348) @end group nested_formats.texi(mymacro,348) nested_formats.texi(,349) @end group nested_formats.texi(,350) @end flushleft nested_formats.texi(,351) nested_formats.texi(,352) @flushright nested_formats.texi(mymacro,353) in macro nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @group nested_formats.texi(mymacro,353) @end group nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @group nested_formats.texi(mymacro,353) in format_command nested_formats.texi(mymacro,353) @end group nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) Something nested_formats.texi(mymacro,353) @group nested_formats.texi(mymacro,353) @end group nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) Something nested_formats.texi(mymacro,353) @group nested_formats.texi(mymacro,353) in group nested_formats.texi(mymacro,353) @end group nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) Something2 nested_formats.texi(mymacro,353) @group nested_formats.texi(mymacro,353) @end group nested_formats.texi(mymacro,353) After nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) Something2 nested_formats.texi(mymacro,353) @group nested_formats.texi(mymacro,353) in group nested_formats.texi(mymacro,353) @end group nested_formats.texi(mymacro,353) After nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @sp 2 nested_formats.texi(mymacro,353) @group nested_formats.texi(mymacro,353) in group nested_formats.texi(mymacro,353) @end group nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @group nested_formats.texi(mymacro,353) @quotation nested_formats.texi(mymacro,353) A quot---ation nested_formats.texi(mymacro,353) @end quotation nested_formats.texi(mymacro,353) @end group nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @subheading subheading nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @verbatim nested_formats.texi(mymacro,353) in verbatim nested_formats.texi(mymacro,353) @end verbatim nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @html nested_formats.texi(mymacro,353) html nested_formats.texi(mymacro,353) @end html nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,353) @item i--tem 1 nested_formats.texi(mymacro,353) @item i--tem 2 nested_formats.texi(mymacro,353) @end itemize nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @enumerate nested_formats.texi(mymacro,353) @item e--numerate nested_formats.texi(mymacro,353) @end enumerate nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,353) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,353) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,353) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,353) @item lone mu--ltitable item nested_formats.texi(mymacro,353) @end multitable nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @example nested_formats.texi(mymacro,353) e--xample some nested_formats.texi(mymacro,353) text nested_formats.texi(mymacro,353) @end example nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @smallexample nested_formats.texi(mymacro,353) s--mallexample nested_formats.texi(mymacro,353) @end smallexample nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,353) d--effn nested_formats.texi(mymacro,353) @end deffn nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @table @bullet nested_formats.texi(mymacro,353) @item a nested_formats.texi(mymacro,353) l--ine nested_formats.texi(mymacro,353) @end table nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @cartouche nested_formats.texi(mymacro,353) c--artouche nested_formats.texi(mymacro,353) @end cartouche nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @flushleft nested_formats.texi(mymacro,353) f--lushleft nested_formats.texi(mymacro,353) @end flushleft nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @flushright nested_formats.texi(mymacro,353) f--lushright nested_formats.texi(mymacro,353) @end flushright nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @center ce--ntered line nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @group nested_formats.texi(mymacro,353) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,353) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,353) @item i--tem 1 nested_formats.texi(mymacro,353) @item i--tem 2 nested_formats.texi(mymacro,353) @end itemize nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @enumerate nested_formats.texi(mymacro,353) @item e--numerate nested_formats.texi(mymacro,353) @end enumerate nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,353) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,353) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,353) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,353) @item lone mu--ltitable item nested_formats.texi(mymacro,353) @end multitable nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @example nested_formats.texi(mymacro,353) e--xample some nested_formats.texi(mymacro,353) text nested_formats.texi(mymacro,353) @end example nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @smallexample nested_formats.texi(mymacro,353) s--mallexample nested_formats.texi(mymacro,353) @end smallexample nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,353) d--effn nested_formats.texi(mymacro,353) @end deffn nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @table @bullet nested_formats.texi(mymacro,353) @item a nested_formats.texi(mymacro,353) l--ine nested_formats.texi(mymacro,353) @end table nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @cartouche nested_formats.texi(mymacro,353) c--artouche nested_formats.texi(mymacro,353) @end cartouche nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @flushleft nested_formats.texi(mymacro,353) f--lushleft nested_formats.texi(mymacro,353) @end flushleft nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @flushright nested_formats.texi(mymacro,353) f--lushright nested_formats.texi(mymacro,353) @end flushright nested_formats.texi(mymacro,353) nested_formats.texi(mymacro,353) @center ce--ntered line nested_formats.texi(mymacro,353) @end group nested_formats.texi(mymacro,353) nested_formats.texi(,354) flushright nested_formats.texi(,355) @group nested_formats.texi(mymacro,356) in macro nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @group nested_formats.texi(mymacro,356) @end group nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @group nested_formats.texi(mymacro,356) in format_command nested_formats.texi(mymacro,356) @end group nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) Something nested_formats.texi(mymacro,356) @group nested_formats.texi(mymacro,356) @end group nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) Something nested_formats.texi(mymacro,356) @group nested_formats.texi(mymacro,356) in group nested_formats.texi(mymacro,356) @end group nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) Something2 nested_formats.texi(mymacro,356) @group nested_formats.texi(mymacro,356) @end group nested_formats.texi(mymacro,356) After nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) Something2 nested_formats.texi(mymacro,356) @group nested_formats.texi(mymacro,356) in group nested_formats.texi(mymacro,356) @end group nested_formats.texi(mymacro,356) After nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @sp 2 nested_formats.texi(mymacro,356) @group nested_formats.texi(mymacro,356) in group nested_formats.texi(mymacro,356) @end group nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @group nested_formats.texi(mymacro,356) @quotation nested_formats.texi(mymacro,356) A quot---ation nested_formats.texi(mymacro,356) @end quotation nested_formats.texi(mymacro,356) @end group nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @subheading subheading nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @verbatim nested_formats.texi(mymacro,356) in verbatim nested_formats.texi(mymacro,356) @end verbatim nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @html nested_formats.texi(mymacro,356) html nested_formats.texi(mymacro,356) @end html nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,356) @item i--tem 1 nested_formats.texi(mymacro,356) @item i--tem 2 nested_formats.texi(mymacro,356) @end itemize nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @enumerate nested_formats.texi(mymacro,356) @item e--numerate nested_formats.texi(mymacro,356) @end enumerate nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,356) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,356) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,356) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,356) @item lone mu--ltitable item nested_formats.texi(mymacro,356) @end multitable nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @example nested_formats.texi(mymacro,356) e--xample some nested_formats.texi(mymacro,356) text nested_formats.texi(mymacro,356) @end example nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @smallexample nested_formats.texi(mymacro,356) s--mallexample nested_formats.texi(mymacro,356) @end smallexample nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,356) d--effn nested_formats.texi(mymacro,356) @end deffn nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @table @bullet nested_formats.texi(mymacro,356) @item a nested_formats.texi(mymacro,356) l--ine nested_formats.texi(mymacro,356) @end table nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @cartouche nested_formats.texi(mymacro,356) c--artouche nested_formats.texi(mymacro,356) @end cartouche nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @flushleft nested_formats.texi(mymacro,356) f--lushleft nested_formats.texi(mymacro,356) @end flushleft nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @flushright nested_formats.texi(mymacro,356) f--lushright nested_formats.texi(mymacro,356) @end flushright nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @center ce--ntered line nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @group nested_formats.texi(mymacro,356) in macro, a format_command containing some other commands. nested_formats.texi(mymacro,356) @itemize @bullet{} a--n itemize line nested_formats.texi(mymacro,356) @item i--tem 1 nested_formats.texi(mymacro,356) @item i--tem 2 nested_formats.texi(mymacro,356) @end itemize nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @enumerate nested_formats.texi(mymacro,356) @item e--numerate nested_formats.texi(mymacro,356) @end enumerate nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @multitable @columnfractions 0.6 0.7 nested_formats.texi(mymacro,356) @headitem mu--ltitable headitem @tab another tab nested_formats.texi(mymacro,356) @item mu--ltitable item @tab multitable tab nested_formats.texi(mymacro,356) @item mu--ltitable item 2 @tab multitable tab 2 nested_formats.texi(mymacro,356) @item lone mu--ltitable item nested_formats.texi(mymacro,356) @end multitable nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @example nested_formats.texi(mymacro,356) e--xample some nested_formats.texi(mymacro,356) text nested_formats.texi(mymacro,356) @end example nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @smallexample nested_formats.texi(mymacro,356) s--mallexample nested_formats.texi(mymacro,356) @end smallexample nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @deffn c--ategory d--effn_name a--rguments... nested_formats.texi(mymacro,356) d--effn nested_formats.texi(mymacro,356) @end deffn nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @table @bullet nested_formats.texi(mymacro,356) @item a nested_formats.texi(mymacro,356) l--ine nested_formats.texi(mymacro,356) @end table nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @cartouche nested_formats.texi(mymacro,356) c--artouche nested_formats.texi(mymacro,356) @end cartouche nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @flushleft nested_formats.texi(mymacro,356) f--lushleft nested_formats.texi(mymacro,356) @end flushleft nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @flushright nested_formats.texi(mymacro,356) f--lushright nested_formats.texi(mymacro,356) @end flushright nested_formats.texi(mymacro,356) nested_formats.texi(mymacro,356) @center ce--ntered line nested_formats.texi(mymacro,356) @end group nested_formats.texi(mymacro,356) nested_formats.texi(,357) @end group nested_formats.texi(,358) @end flushright nested_formats.texi(,359) nested_formats.texi(,360) @bye texi2html-1.82/test/nested_formats/res/nested_enumerate/0000755000175000017500000000000011264347121025345 5ustar flichtenheldflichtenheldtexi2html-1.82/test/nested_formats/res/nested_enumerate/nested_formats.20000644000175000017500000000000011264347121030433 0ustar flichtenheldflichtenheldtexi2html-1.82/test/nested_formats/res/nested_enumerate/nested_formats.html0000644000175000017500000024721311264347121031261 0ustar flichtenheldflichtenheld Untitled Document

    Test nested enumerate

    Call macro in macro

    1. in format_command

    Something

    Something

    1. in group

    Something2

    After

    Something2

    1. in group

    After



    1. in group
    1. A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    1. in macro, a format_command containing some other commands.
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    Call macro in format_command

    1. in macro
      1. in format_command

      Something

      Something

      1. in group

      Something2

      After

      Something2

      1. in group

      After



      1. in group
      1. A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      1. in macro, a format_command containing some other commands.
        • a–n itemize line i–tem 1
        • a–n itemize line i–tem 2
        1. e–numerate
        mu–ltitable headitemanother tab
        mu–ltitable itemmultitable tab
        mu–ltitable item 2multitable tab 2
        lone mu–ltitable item
         
        e--xample  some
           text
        
         
        s--mallexample
        
        c--ategory: d--effn_name a--rguments...

        d–effn

        • a

        l–ine

        c–artouche

        f–lushleft

        f–lushright

        ce–ntered line

    Call macro in itemize at the beginning of an item

    • a–n itemize line in macro
      1. in format_command

      Something

      Something

      1. in group

      Something2

      After

      Something2

      1. in group

      After



      1. in group
      1. A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      1. in macro, a format_command containing some other commands.
        • a–n itemize line i–tem 1
        • a–n itemize line i–tem 2
        1. e–numerate
        mu–ltitable headitemanother tab
        mu–ltitable itemmultitable tab
        mu–ltitable item 2multitable tab 2
        lone mu–ltitable item
         
        e--xample  some
           text
        
         
        s--mallexample
        
        c--ategory: d--effn_name a--rguments...

        d–effn

        • a

        l–ine

        c–artouche

        f–lushleft

        f–lushright

        ce–ntered line

    • a–n itemize line item 1 Call macro in itemize in macro
      1. in format_command

      Something

      Something

      1. in group

      Something2

      After

      Something2

      1. in group

      After



      1. in group
      1. A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      1. in macro, a format_command containing some other commands.
        • a–n itemize line i–tem 1
        • a–n itemize line i–tem 2
        1. e–numerate
        mu–ltitable headitemanother tab
        mu–ltitable itemmultitable tab
        mu–ltitable item 2multitable tab 2
        lone mu–ltitable item
         
        e--xample  some
           text
        
         
        s--mallexample
        
        c--ategory: d--effn_name a--rguments...

        d–effn

        • a

        l–ine

        c–artouche

        f–lushleft

        f–lushright

        ce–ntered line

    • a–n itemize line item 2 Call macro in itemize in format_command
      1. in macro
        1. in format_command

        Something

        Something

        1. in group

        Something2

        After

        Something2

        1. in group

        After



        1. in group
        1. A quot—ation

        subheading

        in verbatim
        
        html
        • a–n itemize line i–tem 1
        • a–n itemize line i–tem 2
        1. e–numerate
        mu–ltitable headitemanother tab
        mu–ltitable itemmultitable tab
        mu–ltitable item 2multitable tab 2
        lone mu–ltitable item
         
        e--xample  some
           text
        
         
        s--mallexample
        
        c--ategory: d--effn_name a--rguments...

        d–effn

        • a

        l–ine

        c–artouche

        f–lushleft

        f–lushright

        ce–ntered line

        1. in macro, a format_command containing some other commands.
          • a–n itemize line i–tem 1
          • a–n itemize line i–tem 2
          1. e–numerate
          mu–ltitable headitemanother tab
          mu–ltitable itemmultitable tab
          mu–ltitable item 2multitable tab 2
          lone mu–ltitable item
           
          e--xample  some
             text
          
           
          s--mallexample
          
          c--ategory: d--effn_name a--rguments...

          d–effn

          • a

          l–ine

          c–artouche

          f–lushleft

          f–lushright

          ce–ntered line

    Call macro in enumerate at the beginning of enumerate

    1. in macro
      1. in format_command

      Something

      Something

      1. in group

      Something2

      After

      Something2

      1. in group

      After



      1. in group
      1. A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      1. in macro, a format_command containing some other commands.
        • a–n itemize line i–tem 1
        • a–n itemize line i–tem 2
        1. e–numerate
        mu–ltitable headitemanother tab
        mu–ltitable itemmultitable tab
        mu–ltitable item 2multitable tab 2
        lone mu–ltitable item
         
        e--xample  some
           text
        
         
        s--mallexample
        
        c--ategory: d--effn_name a--rguments...

        d–effn

        • a

        l–ine

        c–artouche

        f–lushleft

        f–lushright

        ce–ntered line

    2. enumerate Call macro in enumerate in macro
      1. in format_command

      Something

      Something

      1. in group

      Something2

      After

      Something2

      1. in group

      After



      1. in group
      1. A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      1. in macro, a format_command containing some other commands.
        • a–n itemize line i–tem 1
        • a–n itemize line i–tem 2
        1. e–numerate
        mu–ltitable headitemanother tab
        mu–ltitable itemmultitable tab
        mu–ltitable item 2multitable tab 2
        lone mu–ltitable item
         
        e--xample  some
           text
        
         
        s--mallexample
        
        c--ategory: d--effn_name a--rguments...

        d–effn

        • a

        l–ine

        c–artouche

        f–lushleft

        f–lushright

        ce–ntered line

    3. enumerate2 Call macro in enumerate in format_command
      1. in macro
        1. in format_command

        Something

        Something

        1. in group

        Something2

        After

        Something2

        1. in group

        After



        1. in group
        1. A quot—ation

        subheading

        in verbatim
        
        html
        • a–n itemize line i–tem 1
        • a–n itemize line i–tem 2
        1. e–numerate
        mu–ltitable headitemanother tab
        mu–ltitable itemmultitable tab
        mu–ltitable item 2multitable tab 2
        lone mu–ltitable item
         
        e--xample  some
           text
        
         
        s--mallexample
        
        c--ategory: d--effn_name a--rguments...

        d–effn

        • a

        l–ine

        c–artouche

        f–lushleft

        f–lushright

        ce–ntered line

        1. in macro, a format_command containing some other commands.
          • a–n itemize line i–tem 1
          • a–n itemize line i–tem 2
          1. e–numerate
          mu–ltitable headitemanother tab
          mu–ltitable itemmultitable tab
          mu–ltitable item 2multitable tab 2
          lone mu–ltitable item
           
          e--xample  some
             text
          
           
          s--mallexample
          
          c--ategory: d--effn_name a--rguments...

          d–effn

          • a

          l–ine

          c–artouche

          f–lushleft

          f–lushright

          ce–ntered line

    mu–ltitable headitemanother tab
    multitable itemmultitable tab. And after Call macro in mutitable after item
    in macro
    1. in format_command

    Something

    Something

    1. in group

    Something2

    After

    Something2

    1. in group

    After



    1. in group
    1. A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    1. in macro, a format_command containing some other commands.
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    multitable item 2multitable tab 2 Call macro in mutitable in macro
    1. in format_command

    Something

    Something

    1. in group

    Something2

    After

    Something2

    1. in group

    After



    1. in group
    1. A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    1. in macro, a format_command containing some other commands.
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    lone multitable item Call macro in mutitable in format_command
    1. in macro
      1. in format_command

      Something

      Something

      1. in group

      Something2

      After

      Something2

      1. in group

      After



      1. in group
      1. A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      1. in macro, a format_command containing some other commands.
        • a–n itemize line i–tem 1
        • a–n itemize line i–tem 2
        1. e–numerate
        mu–ltitable headitemanother tab
        mu–ltitable itemmultitable tab
        mu–ltitable item 2multitable tab 2
        lone mu–ltitable item
         
        e--xample  some
           text
        
         
        s--mallexample
        
        c--ategory: d--effn_name a--rguments...

        d–effn

        • a

        l–ine

        c–artouche

        f–lushleft

        f–lushright

        ce–ntered line

    call macro at the example beginning

     
    in macro
    
    
    1. in format_command
      
    Something
    
    Something
    
    1. in group
      
    Something2
    
    After
    
    Something2
    
    1. in group
      
    After
    
    
    
    
    
    1. in group
      
    1. A quot---ation
      
    
    subheading
    
    
    in verbatim
    
    
    html
    
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    1. in macro, a format_command containing some other commands.
      
      • a--n itemize line  i--tem 1
        
      • a--n itemize line  i--tem 2
        
      1.  e--numerate
        
      mu--ltitable headitem
      another tab
      mu--ltitable item
      multitable tab
      mu--ltitable item 2
      multitable tab 2
      lone mu--ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...
      d--effn
      
      • a
      l--ine
      
      c--artouche
      
      f--lushleft
      
      f--lushright
      
       ce--ntered line
      
    example  some
       text
    call macro in example
    in macro
    
    
    1. in format_command
      
    Something
    
    Something
    
    1. in group
      
    Something2
    
    After
    
    Something2
    
    1. in group
      
    After
    
    
    
    
    
    1. in group
      
    1. A quot---ation
      
    
    subheading
    
    
    in verbatim
    
    
    html
    
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    1. in macro, a format_command containing some other commands.
      
      • a--n itemize line  i--tem 1
        
      • a--n itemize line  i--tem 2
        
      1.  e--numerate
        
      mu--ltitable headitem
      another tab
      mu--ltitable item
      multitable tab
      mu--ltitable item 2
      multitable tab 2
      lone mu--ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...
      d--effn
      
      • a
      l--ine
      
      c--artouche
      
      f--lushleft
      
      f--lushright
      
       ce--ntered line
      
    
    more example text
    call macro in example in format_command
    
    1. in macro
      
      
      1. in format_command
        
      Something
      
      Something
      
      1. in group
        
      Something2
      
      After
      
      Something2
      
      1. in group
        
      After
      
      
      
      
      
      1. in group
        
      1. A quot---ation
        
      
      subheading
      
      
      in verbatim
      
      
      html
      
      
      • a--n itemize line  i--tem 1
        
      • a--n itemize line  i--tem 2
        
      1.  e--numerate
        
      mu--ltitable headitem
      another tab
      mu--ltitable item
      multitable tab
      mu--ltitable item 2
      multitable tab 2
      lone mu--ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...
      d--effn
      
      • a
      l--ine
      
      c--artouche
      
      f--lushleft
      
      f--lushright
      
       ce--ntered line
      
      1. in macro, a format_command containing some other commands.
        
        • a--n itemize line  i--tem 1
          
        • a--n itemize line  i--tem 2
          
        1.  e--numerate
          
        mu--ltitable headitem
        another tab
        mu--ltitable item
        multitable tab
        mu--ltitable item 2
        multitable tab 2
        lone mu--ltitable item
         
        e--xample  some
           text
        
         
        s--mallexample
        
        c--ategory: d--effn_name a--rguments...
        d--effn
        
        • a
        l--ine
        
        c--artouche
        
        f--lushleft
        
        f--lushright
        
         ce--ntered line
        
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    deffn call macro in deffn in macro

    1. in format_command

    Something

    Something

    1. in group

    Something2

    After

    Something2

    1. in group

    After



    1. in group
    1. A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    1. in macro, a format_command containing some other commands.
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    deffn continues call macro in deffn in format_command

    1. in macro
      1. in format_command

      Something

      Something

      1. in group

      Something2

      After

      Something2

      1. in group

      After



      1. in group
      1. A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      1. in macro, a format_command containing some other commands.
        • a–n itemize line i–tem 1
        • a–n itemize line i–tem 2
        1. e–numerate
        mu–ltitable headitemanother tab
        mu–ltitable itemmultitable tab
        mu–ltitable item 2multitable tab 2
        lone mu–ltitable item
         
        e--xample  some
           text
        
         
        s--mallexample
        
        c--ategory: d--effn_name a--rguments...

        d–effn

        • a

        l–ine

        c–artouche

        f–lushleft

        f–lushright

        ce–ntered line

    call macro in deffn at the beginning

    c--ategory2: d--effn_name2 a--rguments2...

    in macro

    1. in format_command

    Something

    Something

    1. in group

    Something2

    After

    Something2

    1. in group

    After



    1. in group
    1. A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    1. in macro, a format_command containing some other commands.
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    • a line

    call macro in table in macro

    1. in format_command

    Something

    Something

    1. in group

    Something2

    After

    Something2

    1. in group

    After



    1. in group
    1. A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    1. in macro, a format_command containing some other commands.
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    call macro in table at an item beginning

    • a line

    in macro

    1. in format_command

    Something

    Something

    1. in group

    Something2

    After

    Something2

    1. in group

    After



    1. in group
    1. A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    1. in macro, a format_command containing some other commands.
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    • a line2

    call macro in table in format_command

    1. in macro
      1. in format_command

      Something

      Something

      1. in group

      Something2

      After

      Something2

      1. in group

      After



      1. in group
      1. A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      1. in macro, a format_command containing some other commands.
        • a–n itemize line i–tem 1
        • a–n itemize line i–tem 2
        1. e–numerate
        mu–ltitable headitemanother tab
        mu–ltitable itemmultitable tab
        mu–ltitable item 2multitable tab 2
        lone mu–ltitable item
         
        e--xample  some
           text
        
         
        s--mallexample
        
        c--ategory: d--effn_name a--rguments...

        d–effn

        • a

        l–ine

        c–artouche

        f–lushleft

        f–lushright

        ce–ntered line

    call macro at cartouche begin

    in macro

    1. in format_command

    Something

    Something

    1. in group

    Something2

    After

    Something2

    1. in group

    After



    1. in group
    1. A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    1. in macro, a format_command containing some other commands.
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    cartouche call macro in cartouche in macro

    1. in format_command

    Something

    Something

    1. in group

    Something2

    After

    Something2

    1. in group

    After



    1. in group
    1. A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    1. in macro, a format_command containing some other commands.
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    call macro in cartouche in format_command

    1. in macro
      1. in format_command

      Something

      Something

      1. in group

      Something2

      After

      Something2

      1. in group

      After



      1. in group
      1. A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      1. in macro, a format_command containing some other commands.
        • a–n itemize line i–tem 1
        • a–n itemize line i–tem 2
        1. e–numerate
        mu–ltitable headitemanother tab
        mu–ltitable itemmultitable tab
        mu–ltitable item 2multitable tab 2
        lone mu–ltitable item
         
        e--xample  some
           text
        
         
        s--mallexample
        
        c--ategory: d--effn_name a--rguments...

        d–effn

        • a

        l–ine

        c–artouche

        f–lushleft

        f–lushright

        ce–ntered line

    call macro in flushleft in macro

    1. in format_command

    Something

    Something

    1. in group

    Something2

    After

    Something2

    1. in group

    After



    1. in group
    1. A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    1. in macro, a format_command containing some other commands.
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    flushleft call macro in flushleft in format_command

    1. in macro
      1. in format_command

      Something

      Something

      1. in group

      Something2

      After

      Something2

      1. in group

      After



      1. in group
      1. A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      1. in macro, a format_command containing some other commands.
        • a–n itemize line i–tem 1
        • a–n itemize line i–tem 2
        1. e–numerate
        mu–ltitable headitemanother tab
        mu–ltitable itemmultitable tab
        mu–ltitable item 2multitable tab 2
        lone mu–ltitable item
         
        e--xample  some
           text
        
         
        s--mallexample
        
        c--ategory: d--effn_name a--rguments...

        d–effn

        • a

        l–ine

        c–artouche

        f–lushleft

        f–lushright

        ce–ntered line

    in macro

    1. in format_command

    Something

    Something

    1. in group

    Something2

    After

    Something2

    1. in group

    After



    1. in group
    1. A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    1. in macro, a format_command containing some other commands.
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    flushright

    1. in macro
      1. in format_command

      Something

      Something

      1. in group

      Something2

      After

      Something2

      1. in group

      After



      1. in group
      1. A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      1. in macro, a format_command containing some other commands.
        • a–n itemize line i–tem 1
        • a–n itemize line i–tem 2
        1. e–numerate
        mu–ltitable headitemanother tab
        mu–ltitable itemmultitable tab
        mu–ltitable item 2multitable tab 2
        lone mu–ltitable item
         
        e--xample  some
           text
        
         
        s--mallexample
        
        c--ategory: d--effn_name a--rguments...

        d–effn

        • a

        l–ine

        c–artouche

        f–lushleft

        f–lushright

        ce–ntered line


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/nested_formats/res/nested_menu/0000755000175000017500000000000011264347121024324 5ustar flichtenheldflichtenheldtexi2html-1.82/test/nested_formats/res/nested_menu/nested_formats.20000644000175000017500000000000011264347121027412 0ustar flichtenheldflichtenheldtexi2html-1.82/test/nested_formats/res/nested_menu/nested_formats.html0000644000175000017500000041044511264347121030237 0ustar flichtenheldflichtenheld Untitled Document

    Test nested menu

    Call macro in macro

    Something

    Something

    Something2

    After

    Something2

    After



    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    Call macro in format_command

    in verbatim
    
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    • a

    Call macro in itemize at the beginning of an item

    • a–n itemize line in macro

      Something

      Something

      Something2

      After

      Something2

      After



      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    • a–n itemize line item 1 Call macro in itemize in macro

      Something

      Something

      Something2

      After

      Something2

      After



      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    • a–n itemize line item 2 Call macro in itemize in format_command
      in verbatim
      
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...
      • a

    Call macro in enumerate at the beginning of enumerate

    1. in macro

      Something

      Something

      Something2

      After

      Something2

      After



      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    2. enumerate Call macro in enumerate in macro

      Something

      Something

      Something2

      After

      Something2

      After



      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    3. enumerate2 Call macro in enumerate in format_command
      in verbatim
      
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...
      • a
    mu–ltitable headitemanother tab
    multitable itemmultitable tab. And after Call macro in mutitable after item
    in macro

    Something

    Something

    Something2

    After

    Something2

    After



    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    multitable item 2multitable tab 2 Call macro in mutitable in macro

    Something

    Something

    Something2

    After

    Something2

    After



    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    lone multitable item Call macro in mutitable in format_command
    in verbatim
    
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    • a

    call macro at the example beginning

     
    in macro
    
    
    
    
    Something
    
    Something
    
    Something2
    
    After
    
    Something2
    
    After
    
    
    
    
    
    
    
    
    subheading
    
    
    in verbatim
    
    
    html
    
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    example  some
       text
    call macro in example
    in macro
    
    
    
    
    Something
    
    Something
    
    Something2
    
    After
    
    Something2
    
    After
    
    
    
    
    
    
    
    
    subheading
    
    
    in verbatim
    
    
    html
    
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    
    more example text
    call macro in example in format_command
    
    Something2
    
    After
    
    Something2
    
    After
    
    
    
    
    
    
    subheading
    
    
    in verbatim
    
    
    html
    
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    
    
    
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    deffn call macro in deffn in macro

    Something

    Something

    Something2

    After

    Something2

    After



    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    deffn continues call macro in deffn in format_command

    in verbatim
    
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    • a

    call macro in deffn at the beginning

    c--ategory2: d--effn_name2 a--rguments2...

    in macro

    Something

    Something

    Something2

    After

    Something2

    After



    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    • a line

    call macro in table in macro

    Something

    Something

    Something2

    After

    Something2

    After



    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro in table at an item beginning

    • a line

    in macro

    Something

    Something

    Something2

    After

    Something2

    After



    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    • a line2

    call macro in table in format_command

    in verbatim
    
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    • a

    call macro at cartouche begin

    in macro

    Something

    Something

    Something2

    After

    Something2

    After



    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    cartouche call macro in cartouche in macro

    Something

    Something

    Something2

    After

    Something2

    After



    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro in cartouche in format_command

    in verbatim
    
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    • a

    call macro in flushleft in macro

    Something

    Something

    Something2

    After

    Something2

    After



    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    flushleft call macro in flushleft in format_command

    in verbatim
    
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    • a

    in macro

    Something

    Something

    Something2

    After

    Something2

    After



    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    flushright

    in verbatim
    
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    • a

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/nested_formats/res/nested_quotation/0000755000175000017500000000000011264347121025403 5ustar flichtenheldflichtenheldtexi2html-1.82/test/nested_formats/res/nested_quotation/nested_formats.20000644000175000017500000000000011264347121030471 0ustar flichtenheldflichtenheldtexi2html-1.82/test/nested_formats/res/nested_quotation/nested_formats.html0000644000175000017500000025757511264347121031333 0ustar flichtenheldflichtenheld Untitled Document

    Test nested quotation

    Call macro in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    Call macro in format_command

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    Call macro in itemize at the beginning of an item

    • a–n itemize line in macro

      in format_command

      Something

      Something

      in group

      Something2

      After

      Something2

      in group

      After



      in group

      A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      in macro, a format_command containing some other commands.

      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    • a–n itemize line item 1 Call macro in itemize in macro

      in format_command

      Something

      Something

      in group

      Something2

      After

      Something2

      in group

      After



      in group

      A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      in macro, a format_command containing some other commands.

      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    • a–n itemize line item 2 Call macro in itemize in format_command

      in macro

      in format_command

      Something

      Something

      in group

      Something2

      After

      Something2

      in group

      After



      in group

      A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      in macro, a format_command containing some other commands.

      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    Call macro in enumerate at the beginning of enumerate

    1. in macro

      in format_command

      Something

      Something

      in group

      Something2

      After

      Something2

      in group

      After



      in group

      A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      in macro, a format_command containing some other commands.

      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    2. enumerate Call macro in enumerate in macro

      in format_command

      Something

      Something

      in group

      Something2

      After

      Something2

      in group

      After



      in group

      A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      in macro, a format_command containing some other commands.

      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    3. enumerate2 Call macro in enumerate in format_command

      in macro

      in format_command

      Something

      Something

      in group

      Something2

      After

      Something2

      in group

      After



      in group

      A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      in macro, a format_command containing some other commands.

      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    mu–ltitable headitemanother tab
    multitable itemmultitable tab. And after Call macro in mutitable after item
    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    multitable item 2multitable tab 2 Call macro in mutitable in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    lone multitable item Call macro in mutitable in format_command

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro at the example beginning

     
    in macro
    
    
    in format_command
    
    Something
    
    Something
    
    in group
    
    Something2
    
    After
    
    Something2
    
    in group
    
    After
    
    
    
    
    
    in group
    
    A quot---ation
    
    
    subheading
    
    
    in verbatim
    
    
    html
    
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    in macro, a format_command containing some other commands.
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    example  some
       text
    call macro in example
    in macro
    
    
    in format_command
    
    Something
    
    Something
    
    in group
    
    Something2
    
    After
    
    Something2
    
    in group
    
    After
    
    
    
    
    
    in group
    
    A quot---ation
    
    
    subheading
    
    
    in verbatim
    
    
    html
    
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    in macro, a format_command containing some other commands.
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    
    more example text
    call macro in example in format_command
    
    in macro
    
    
    in format_command
    
    Something
    
    Something
    
    in group
    
    Something2
    
    After
    
    Something2
    
    in group
    
    After
    
    
    
    
    
    in group
    
    A quot---ation
    
    
    subheading
    
    
    in verbatim
    
    
    html
    
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    in macro, a format_command containing some other commands.
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    deffn call macro in deffn in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    deffn continues call macro in deffn in format_command

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro in deffn at the beginning

    c--ategory2: d--effn_name2 a--rguments2...

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    • a line

    call macro in table in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro in table at an item beginning

    • a line

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    • a line2

    call macro in table in format_command

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro at cartouche begin

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    cartouche call macro in cartouche in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro in cartouche in format_command

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro in flushleft in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    flushleft call macro in flushleft in format_command

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    flushright

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/nested_formats/res/nested_table/0000755000175000017500000000000011264347121024447 5ustar flichtenheldflichtenheldtexi2html-1.82/test/nested_formats/res/nested_table/nested_formats.20000644000175000017500000000000011264347121027535 0ustar flichtenheldflichtenheldtexi2html-1.82/test/nested_formats/res/nested_table/nested_formats.html0000644000175000017500000025776711264347121030402 0ustar flichtenheldflichtenheld Untitled Document

    Test nested table

    Call macro in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    Call macro in format_command

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    Call macro in itemize at the beginning of an item

    • a–n itemize line in macro

      in format_command

      Something

      Something

      in group

      Something2

      After

      Something2

      in group

      After



      in group

      A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      in macro, a format_command containing some other commands.

      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    • a–n itemize line item 1 Call macro in itemize in macro

      in format_command

      Something

      Something

      in group

      Something2

      After

      Something2

      in group

      After



      in group

      A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      in macro, a format_command containing some other commands.

      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    • a–n itemize line item 2 Call macro in itemize in format_command

      in macro

      in format_command

      Something

      Something

      in group

      Something2

      After

      Something2

      in group

      After



      in group

      A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      in macro, a format_command containing some other commands.

      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    Call macro in enumerate at the beginning of enumerate

    1. in macro

      in format_command

      Something

      Something

      in group

      Something2

      After

      Something2

      in group

      After



      in group

      A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      in macro, a format_command containing some other commands.

      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    2. enumerate Call macro in enumerate in macro

      in format_command

      Something

      Something

      in group

      Something2

      After

      Something2

      in group

      After



      in group

      A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      in macro, a format_command containing some other commands.

      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    3. enumerate2 Call macro in enumerate in format_command

      in macro

      in format_command

      Something

      Something

      in group

      Something2

      After

      Something2

      in group

      After



      in group

      A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      in macro, a format_command containing some other commands.

      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    mu–ltitable headitemanother tab
    multitable itemmultitable tab. And after Call macro in mutitable after item
    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    multitable item 2multitable tab 2 Call macro in mutitable in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    lone multitable item Call macro in mutitable in format_command

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro at the example beginning

     
    in macro
    
    
    in format_command
    
    Something
    
    Something
    
    in group
    
    Something2
    
    After
    
    Something2
    
    in group
    
    After
    
    
    
    
    
    in group
    
    A quot---ation
    
    
    subheading
    
    
    in verbatim
    
    
    html
    
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    in macro, a format_command containing some other commands.
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    example  some
       text
    call macro in example
    in macro
    
    
    in format_command
    
    Something
    
    Something
    
    in group
    
    Something2
    
    After
    
    Something2
    
    in group
    
    After
    
    
    
    
    
    in group
    
    A quot---ation
    
    
    subheading
    
    
    in verbatim
    
    
    html
    
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    in macro, a format_command containing some other commands.
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    
    more example text
    call macro in example in format_command
    
    in macro
    
    
    in format_command
    
    Something
    
    Something
    
    in group
    
    Something2
    
    After
    
    Something2
    
    in group
    
    After
    
    
    
    
    
    in group
    
    A quot---ation
    
    
    subheading
    
    
    in verbatim
    
    
    html
    
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    in macro, a format_command containing some other commands.
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    deffn call macro in deffn in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    deffn continues call macro in deffn in format_command

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro in deffn at the beginning

    c--ategory2: d--effn_name2 a--rguments2...

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    • a line

    call macro in table in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro in table at an item beginning

    • a line

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    • a line2

    call macro in table in format_command

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro at cartouche begin

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    cartouche call macro in cartouche in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro in cartouche in format_command

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro in flushleft in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    flushleft call macro in flushleft in format_command

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    flushright

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/nested_formats/res/nested_deffn/0000755000175000017500000000000011264347121024442 5ustar flichtenheldflichtenheldtexi2html-1.82/test/nested_formats/res/nested_deffn/nested_formats.20000644000175000017500000000000011264347121027530 0ustar flichtenheldflichtenheldtexi2html-1.82/test/nested_formats/res/nested_deffn/nested_formats.html0000644000175000017500000031654611264347121030364 0ustar flichtenheldflichtenheld Untitled Document

    Test nested deffn

    Call macro in macro

    fun: arg arg1
    fun: arg arg1

    in format_command

    Something

    fun: arg arg1

    Something

    fun: arg arg1

    in group

    Something2

    fun: arg arg1

    After

    Something2

    fun: arg arg1

    in group

    After



    fun: arg arg1

    in group

    fun: arg arg1

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    fun: arg arg1

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    Call macro in format_command

    fun: arg arg1

    in macro

    fun: arg arg1
    fun: arg arg1

    in format_command

    Something

    fun: arg arg1

    Something

    fun: arg arg1

    in group

    Something2

    fun: arg arg1

    After

    Something2

    fun: arg arg1

    in group

    After



    fun: arg arg1

    in group

    fun: arg arg1

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    fun: arg arg1

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    Call macro in itemize at the beginning of an item

    • a–n itemize line in macro
      fun: arg arg1
      fun: arg arg1

      in format_command

      Something

      fun: arg arg1

      Something

      fun: arg arg1

      in group

      Something2

      fun: arg arg1

      After

      Something2

      fun: arg arg1

      in group

      After



      fun: arg arg1

      in group

      fun: arg arg1

      A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      fun: arg arg1

      in macro, a format_command containing some other commands.

      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    • a–n itemize line item 1 Call macro in itemize in macro
      fun: arg arg1
      fun: arg arg1

      in format_command

      Something

      fun: arg arg1

      Something

      fun: arg arg1

      in group

      Something2

      fun: arg arg1

      After

      Something2

      fun: arg arg1

      in group

      After



      fun: arg arg1

      in group

      fun: arg arg1

      A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      fun: arg arg1

      in macro, a format_command containing some other commands.

      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    • a–n itemize line item 2 Call macro in itemize in format_command
      fun: arg arg1

      in macro

      fun: arg arg1
      fun: arg arg1

      in format_command

      Something

      fun: arg arg1

      Something

      fun: arg arg1

      in group

      Something2

      fun: arg arg1

      After

      Something2

      fun: arg arg1

      in group

      After



      fun: arg arg1

      in group

      fun: arg arg1

      A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      fun: arg arg1

      in macro, a format_command containing some other commands.

      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    Call macro in enumerate at the beginning of enumerate

    1. in macro
      fun: arg arg1
      fun: arg arg1

      in format_command

      Something

      fun: arg arg1

      Something

      fun: arg arg1

      in group

      Something2

      fun: arg arg1

      After

      Something2

      fun: arg arg1

      in group

      After



      fun: arg arg1

      in group

      fun: arg arg1

      A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      fun: arg arg1

      in macro, a format_command containing some other commands.

      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    2. enumerate Call macro in enumerate in macro
      fun: arg arg1
      fun: arg arg1

      in format_command

      Something

      fun: arg arg1

      Something

      fun: arg arg1

      in group

      Something2

      fun: arg arg1

      After

      Something2

      fun: arg arg1

      in group

      After



      fun: arg arg1

      in group

      fun: arg arg1

      A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      fun: arg arg1

      in macro, a format_command containing some other commands.

      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    3. enumerate2 Call macro in enumerate in format_command
      fun: arg arg1

      in macro

      fun: arg arg1
      fun: arg arg1

      in format_command

      Something

      fun: arg arg1

      Something

      fun: arg arg1

      in group

      Something2

      fun: arg arg1

      After

      Something2

      fun: arg arg1

      in group

      After



      fun: arg arg1

      in group

      fun: arg arg1

      A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      fun: arg arg1

      in macro, a format_command containing some other commands.

      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    mu–ltitable headitemanother tab
    multitable itemmultitable tab. And after Call macro in mutitable after item
    in macro
    fun: arg arg1
    fun: arg arg1

    in format_command

    Something

    fun: arg arg1

    Something

    fun: arg arg1

    in group

    Something2

    fun: arg arg1

    After

    Something2

    fun: arg arg1

    in group

    After



    fun: arg arg1

    in group

    fun: arg arg1

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    fun: arg arg1

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    multitable item 2multitable tab 2 Call macro in mutitable in macro
    fun: arg arg1
    fun: arg arg1

    in format_command

    Something

    fun: arg arg1

    Something

    fun: arg arg1

    in group

    Something2

    fun: arg arg1

    After

    Something2

    fun: arg arg1

    in group

    After



    fun: arg arg1

    in group

    fun: arg arg1

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    fun: arg arg1

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    lone multitable item Call macro in mutitable in format_command
    fun: arg arg1

    in macro

    fun: arg arg1
    fun: arg arg1

    in format_command

    Something

    fun: arg arg1

    Something

    fun: arg arg1

    in group

    Something2

    fun: arg arg1

    After

    Something2

    fun: arg arg1

    in group

    After



    fun: arg arg1

    in group

    fun: arg arg1

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    fun: arg arg1

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro at the example beginning

     
    in macro
    
    
    fun: arg arg1
    fun: arg arg1
    in format_command
    
    Something
    
    fun: arg arg1
    Something
    
    fun: arg arg1
    in group
    
    Something2
    
    fun: arg arg1
    After
    
    Something2
    
    fun: arg arg1
    in group
    
    After
    
    
    
    
    
    fun: arg arg1
    in group
    
    fun: arg arg1
    A quot---ation
    
    
    subheading
    
    
    in verbatim
    
    
    html
    
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    fun: arg arg1
    in macro, a format_command containing some other commands.
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    example  some
       text
    call macro in example
    in macro
    
    
    fun: arg arg1
    fun: arg arg1
    in format_command
    
    Something
    
    fun: arg arg1
    Something
    
    fun: arg arg1
    in group
    
    Something2
    
    fun: arg arg1
    After
    
    Something2
    
    fun: arg arg1
    in group
    
    After
    
    
    
    
    
    fun: arg arg1
    in group
    
    fun: arg arg1
    A quot---ation
    
    
    subheading
    
    
    in verbatim
    
    
    html
    
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    fun: arg arg1
    in macro, a format_command containing some other commands.
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    
    more example text
    call macro in example in format_command
    
    fun: arg arg1
    in macro
    
    
    fun: arg arg1
    fun: arg arg1
    in format_command
    
    Something
    
    fun: arg arg1
    Something
    
    fun: arg arg1
    in group
    
    Something2
    
    fun: arg arg1
    After
    
    Something2
    
    fun: arg arg1
    in group
    
    After
    
    
    
    
    
    fun: arg arg1
    in group
    
    fun: arg arg1
    A quot---ation
    
    
    subheading
    
    
    in verbatim
    
    
    html
    
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    fun: arg arg1
    in macro, a format_command containing some other commands.
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    deffn call macro in deffn in macro

    fun: arg arg1
    fun: arg arg1

    in format_command

    Something

    fun: arg arg1

    Something

    fun: arg arg1

    in group

    Something2

    fun: arg arg1

    After

    Something2

    fun: arg arg1

    in group

    After



    fun: arg arg1

    in group

    fun: arg arg1

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    fun: arg arg1

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    deffn continues call macro in deffn in format_command

    fun: arg arg1

    in macro

    fun: arg arg1
    fun: arg arg1

    in format_command

    Something

    fun: arg arg1

    Something

    fun: arg arg1

    in group

    Something2

    fun: arg arg1

    After

    Something2

    fun: arg arg1

    in group

    After



    fun: arg arg1

    in group

    fun: arg arg1

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    fun: arg arg1

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro in deffn at the beginning

    c--ategory2: d--effn_name2 a--rguments2...

    in macro

    fun: arg arg1
    fun: arg arg1

    in format_command

    Something

    fun: arg arg1

    Something

    fun: arg arg1

    in group

    Something2

    fun: arg arg1

    After

    Something2

    fun: arg arg1

    in group

    After



    fun: arg arg1

    in group

    fun: arg arg1

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    fun: arg arg1

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    • a line

    call macro in table in macro

    fun: arg arg1
    fun: arg arg1

    in format_command

    Something

    fun: arg arg1

    Something

    fun: arg arg1

    in group

    Something2

    fun: arg arg1

    After

    Something2

    fun: arg arg1

    in group

    After



    fun: arg arg1

    in group

    fun: arg arg1

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    fun: arg arg1

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro in table at an item beginning

    • a line

    in macro

    fun: arg arg1
    fun: arg arg1

    in format_command

    Something

    fun: arg arg1

    Something

    fun: arg arg1

    in group

    Something2

    fun: arg arg1

    After

    Something2

    fun: arg arg1

    in group

    After



    fun: arg arg1

    in group

    fun: arg arg1

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    fun: arg arg1

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    • a line2

    call macro in table in format_command

    fun: arg arg1

    in macro

    fun: arg arg1
    fun: arg arg1

    in format_command

    Something

    fun: arg arg1

    Something

    fun: arg arg1

    in group

    Something2

    fun: arg arg1

    After

    Something2

    fun: arg arg1

    in group

    After



    fun: arg arg1

    in group

    fun: arg arg1

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    fun: arg arg1

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro at cartouche begin

    in macro

    fun: arg arg1
    fun: arg arg1

    in format_command

    Something

    fun: arg arg1

    Something

    fun: arg arg1

    in group

    Something2

    fun: arg arg1

    After

    Something2

    fun: arg arg1

    in group

    After



    fun: arg arg1

    in group

    fun: arg arg1

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    fun: arg arg1

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    cartouche call macro in cartouche in macro

    fun: arg arg1
    fun: arg arg1

    in format_command

    Something

    fun: arg arg1

    Something

    fun: arg arg1

    in group

    Something2

    fun: arg arg1

    After

    Something2

    fun: arg arg1

    in group

    After



    fun: arg arg1

    in group

    fun: arg arg1

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    fun: arg arg1

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro in cartouche in format_command

    fun: arg arg1

    in macro

    fun: arg arg1
    fun: arg arg1

    in format_command

    Something

    fun: arg arg1

    Something

    fun: arg arg1

    in group

    Something2

    fun: arg arg1

    After

    Something2

    fun: arg arg1

    in group

    After



    fun: arg arg1

    in group

    fun: arg arg1

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    fun: arg arg1

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro in flushleft in macro

    fun: arg arg1
    fun: arg arg1

    in format_command

    Something

    fun: arg arg1

    Something

    fun: arg arg1

    in group

    Something2

    fun: arg arg1

    After

    Something2

    fun: arg arg1

    in group

    After



    fun: arg arg1

    in group

    fun: arg arg1

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    fun: arg arg1

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    flushleft call macro in flushleft in format_command

    fun: arg arg1

    in macro

    fun: arg arg1
    fun: arg arg1

    in format_command

    Something

    fun: arg arg1

    Something

    fun: arg arg1

    in group

    Something2

    fun: arg arg1

    After

    Something2

    fun: arg arg1

    in group

    After



    fun: arg arg1

    in group

    fun: arg arg1

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    fun: arg arg1

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro

    fun: arg arg1
    fun: arg arg1

    in format_command

    Something

    fun: arg arg1

    Something

    fun: arg arg1

    in group

    Something2

    fun: arg arg1

    After

    Something2

    fun: arg arg1

    in group

    After



    fun: arg arg1

    in group

    fun: arg arg1

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    fun: arg arg1

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    flushright

    fun: arg arg1

    in macro

    fun: arg arg1
    fun: arg arg1

    in format_command

    Something

    fun: arg arg1

    Something

    fun: arg arg1

    in group

    Something2

    fun: arg arg1

    After

    Something2

    fun: arg arg1

    in group

    After



    fun: arg arg1

    in group

    fun: arg arg1

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    fun: arg arg1

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/nested_formats/res/nested_example/0000755000175000017500000000000011264347121025013 5ustar flichtenheldflichtenheldtexi2html-1.82/test/nested_formats/res/nested_example/nested_formats.20000644000175000017500000000000011264347121030101 0ustar flichtenheldflichtenheldtexi2html-1.82/test/nested_formats/res/nested_example/nested_formats.html0000644000175000017500000033672411264347121030735 0ustar flichtenheldflichtenheld Untitled Document

    Test nested example

    Call macro in macro

     
    in format_command
    

    Something

    Something

     
    in group
    

    Something2

    After

    Something2

     
    in group
    

    After



     
    in group
    
     
    A quot---ation
    

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

     
    in macro, a format_command containing some other commands.
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    

    Call macro in format_command

     
    in macro
    
    
     
    in format_command
    
    Something
    
    Something
    
     
    in group
    
    Something2
    
    After
    
    Something2
    
     
    in group
    
    After
    
    
    
    
    
     
    in group
    
     
    A quot---ation
    
    
    subheading
    
    
    in verbatim
    
    
    html
    
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
     
    in macro, a format_command containing some other commands.
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    

    Call macro in itemize at the beginning of an item

    • a–n itemize line in macro
       
      in format_command
      

      Something

      Something

       
      in group
      

      Something2

      After

      Something2

       
      in group
      

      After



       
      in group
      
       
      A quot---ation
      

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

       
      in macro, a format_command containing some other commands.
      
      • a--n itemize line  i--tem 1
        
      • a--n itemize line  i--tem 2
        
      1.  e--numerate
        
      mu--ltitable headitem
      another tab
      mu--ltitable item
      multitable tab
      mu--ltitable item 2
      multitable tab 2
      lone mu--ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...
      d--effn
      
      • a
      l--ine
      
      c--artouche
      
      f--lushleft
      
      f--lushright
      
       ce--ntered line
      
    • a–n itemize line item 1 Call macro in itemize in macro
       
      in format_command
      

      Something

      Something

       
      in group
      

      Something2

      After

      Something2

       
      in group
      

      After



       
      in group
      
       
      A quot---ation
      

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

       
      in macro, a format_command containing some other commands.
      
      • a--n itemize line  i--tem 1
        
      • a--n itemize line  i--tem 2
        
      1.  e--numerate
        
      mu--ltitable headitem
      another tab
      mu--ltitable item
      multitable tab
      mu--ltitable item 2
      multitable tab 2
      lone mu--ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...
      d--effn
      
      • a
      l--ine
      
      c--artouche
      
      f--lushleft
      
      f--lushright
      
       ce--ntered line
      
    • a–n itemize line item 2 Call macro in itemize in format_command
       
      in macro
      
      
       
      in format_command
      
      Something
      
      Something
      
       
      in group
      
      Something2
      
      After
      
      Something2
      
       
      in group
      
      After
      
      
      
      
      
       
      in group
      
       
      A quot---ation
      
      
      subheading
      
      
      in verbatim
      
      
      html
      
      
      • a--n itemize line  i--tem 1
        
      • a--n itemize line  i--tem 2
        
      1.  e--numerate
        
      mu--ltitable headitem
      another tab
      mu--ltitable item
      multitable tab
      mu--ltitable item 2
      multitable tab 2
      lone mu--ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...
      d--effn
      
      • a
      l--ine
      
      c--artouche
      
      f--lushleft
      
      f--lushright
      
       ce--ntered line
      
       
      in macro, a format_command containing some other commands.
      
      • a--n itemize line  i--tem 1
        
      • a--n itemize line  i--tem 2
        
      1.  e--numerate
        
      mu--ltitable headitem
      another tab
      mu--ltitable item
      multitable tab
      mu--ltitable item 2
      multitable tab 2
      lone mu--ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...
      d--effn
      
      • a
      l--ine
      
      c--artouche
      
      f--lushleft
      
      f--lushright
      
       ce--ntered line
      

    Call macro in enumerate at the beginning of enumerate

    1. in macro
       
      in format_command
      

      Something

      Something

       
      in group
      

      Something2

      After

      Something2

       
      in group
      

      After



       
      in group
      
       
      A quot---ation
      

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

       
      in macro, a format_command containing some other commands.
      
      • a--n itemize line  i--tem 1
        
      • a--n itemize line  i--tem 2
        
      1.  e--numerate
        
      mu--ltitable headitem
      another tab
      mu--ltitable item
      multitable tab
      mu--ltitable item 2
      multitable tab 2
      lone mu--ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...
      d--effn
      
      • a
      l--ine
      
      c--artouche
      
      f--lushleft
      
      f--lushright
      
       ce--ntered line
      
    2. enumerate Call macro in enumerate in macro
       
      in format_command
      

      Something

      Something

       
      in group
      

      Something2

      After

      Something2

       
      in group
      

      After



       
      in group
      
       
      A quot---ation
      

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

       
      in macro, a format_command containing some other commands.
      
      • a--n itemize line  i--tem 1
        
      • a--n itemize line  i--tem 2
        
      1.  e--numerate
        
      mu--ltitable headitem
      another tab
      mu--ltitable item
      multitable tab
      mu--ltitable item 2
      multitable tab 2
      lone mu--ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...
      d--effn
      
      • a
      l--ine
      
      c--artouche
      
      f--lushleft
      
      f--lushright
      
       ce--ntered line
      
    3. enumerate2 Call macro in enumerate in format_command
       
      in macro
      
      
       
      in format_command
      
      Something
      
      Something
      
       
      in group
      
      Something2
      
      After
      
      Something2
      
       
      in group
      
      After
      
      
      
      
      
       
      in group
      
       
      A quot---ation
      
      
      subheading
      
      
      in verbatim
      
      
      html
      
      
      • a--n itemize line  i--tem 1
        
      • a--n itemize line  i--tem 2
        
      1.  e--numerate
        
      mu--ltitable headitem
      another tab
      mu--ltitable item
      multitable tab
      mu--ltitable item 2
      multitable tab 2
      lone mu--ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...
      d--effn
      
      • a
      l--ine
      
      c--artouche
      
      f--lushleft
      
      f--lushright
      
       ce--ntered line
      
       
      in macro, a format_command containing some other commands.
      
      • a--n itemize line  i--tem 1
        
      • a--n itemize line  i--tem 2
        
      1.  e--numerate
        
      mu--ltitable headitem
      another tab
      mu--ltitable item
      multitable tab
      mu--ltitable item 2
      multitable tab 2
      lone mu--ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...
      d--effn
      
      • a
      l--ine
      
      c--artouche
      
      f--lushleft
      
      f--lushright
      
       ce--ntered line
      
    mu–ltitable headitemanother tab
    multitable itemmultitable tab. And after Call macro in mutitable after item
    in macro
     
    in format_command
    

    Something

    Something

     
    in group
    

    Something2

    After

    Something2

     
    in group
    

    After



     
    in group
    
     
    A quot---ation
    

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

     
    in macro, a format_command containing some other commands.
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    multitable item 2multitable tab 2 Call macro in mutitable in macro
     
    in format_command
    

    Something

    Something

     
    in group
    

    Something2

    After

    Something2

     
    in group
    

    After



     
    in group
    
     
    A quot---ation
    

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

     
    in macro, a format_command containing some other commands.
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    lone multitable item Call macro in mutitable in format_command
     
    in macro
    
    
     
    in format_command
    
    Something
    
    Something
    
     
    in group
    
    Something2
    
    After
    
    Something2
    
     
    in group
    
    After
    
    
    
    
    
     
    in group
    
     
    A quot---ation
    
    
    subheading
    
    
    in verbatim
    
    
    html
    
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
     
    in macro, a format_command containing some other commands.
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    

    call macro at the example beginning

     
    in macro
    
    
     
    in format_command
    
    Something
    
    Something
    
     
    in group
    
    Something2
    
    After
    
    Something2
    
     
    in group
    
    After
    
    
    
    
    
     
    in group
    
     
    A quot---ation
    
    
    subheading
    
    
    in verbatim
    
    
    html
    
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
     
    in macro, a format_command containing some other commands.
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    example  some
       text
    call macro in example
    in macro
    
    
     
    in format_command
    
    Something
    
    Something
    
     
    in group
    
    Something2
    
    After
    
    Something2
    
     
    in group
    
    After
    
    
    
    
    
     
    in group
    
     
    A quot---ation
    
    
    subheading
    
    
    in verbatim
    
    
    html
    
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
     
    in macro, a format_command containing some other commands.
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    
    more example text
    call macro in example in format_command
    
     
    in macro
    
    
     
    in format_command
    
    Something
    
    Something
    
     
    in group
    
    Something2
    
    After
    
    Something2
    
     
    in group
    
    After
    
    
    
    
    
     
    in group
    
     
    A quot---ation
    
    
    subheading
    
    
    in verbatim
    
    
    html
    
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
     
    in macro, a format_command containing some other commands.
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    deffn call macro in deffn in macro

     
    in format_command
    

    Something

    Something

     
    in group
    

    Something2

    After

    Something2

     
    in group
    

    After



     
    in group
    
     
    A quot---ation
    

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

     
    in macro, a format_command containing some other commands.
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    

    deffn continues call macro in deffn in format_command

     
    in macro
    
    
     
    in format_command
    
    Something
    
    Something
    
     
    in group
    
    Something2
    
    After
    
    Something2
    
     
    in group
    
    After
    
    
    
    
    
     
    in group
    
     
    A quot---ation
    
    
    subheading
    
    
    in verbatim
    
    
    html
    
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
     
    in macro, a format_command containing some other commands.
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    

    call macro in deffn at the beginning

    c--ategory2: d--effn_name2 a--rguments2...

    in macro

     
    in format_command
    

    Something

    Something

     
    in group
    

    Something2

    After

    Something2

     
    in group
    

    After



     
    in group
    
     
    A quot---ation
    

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

     
    in macro, a format_command containing some other commands.
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    • a line

    call macro in table in macro

     
    in format_command
    

    Something

    Something

     
    in group
    

    Something2

    After

    Something2

     
    in group
    

    After



     
    in group
    
     
    A quot---ation
    

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

     
    in macro, a format_command containing some other commands.
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    

    call macro in table at an item beginning

    • a line

    in macro

     
    in format_command
    

    Something

    Something

     
    in group
    

    Something2

    After

    Something2

     
    in group
    

    After



     
    in group
    
     
    A quot---ation
    

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

     
    in macro, a format_command containing some other commands.
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    • a line2

    call macro in table in format_command

     
    in macro
    
    
     
    in format_command
    
    Something
    
    Something
    
     
    in group
    
    Something2
    
    After
    
    Something2
    
     
    in group
    
    After
    
    
    
    
    
     
    in group
    
     
    A quot---ation
    
    
    subheading
    
    
    in verbatim
    
    
    html
    
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
     
    in macro, a format_command containing some other commands.
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    

    call macro at cartouche begin

    in macro

     
    in format_command
    

    Something

    Something

     
    in group
    

    Something2

    After

    Something2

     
    in group
    

    After



     
    in group
    
     
    A quot---ation
    

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

     
    in macro, a format_command containing some other commands.
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    

    cartouche call macro in cartouche in macro

     
    in format_command
    

    Something

    Something

     
    in group
    

    Something2

    After

    Something2

     
    in group
    

    After



     
    in group
    
     
    A quot---ation
    

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

     
    in macro, a format_command containing some other commands.
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    

    call macro in cartouche in format_command

     
    in macro
    
    
     
    in format_command
    
    Something
    
    Something
    
     
    in group
    
    Something2
    
    After
    
    Something2
    
     
    in group
    
    After
    
    
    
    
    
     
    in group
    
     
    A quot---ation
    
    
    subheading
    
    
    in verbatim
    
    
    html
    
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
     
    in macro, a format_command containing some other commands.
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    

    call macro in flushleft in macro

     
    in format_command
    

    Something

    Something

     
    in group
    

    Something2

    After

    Something2

     
    in group
    

    After



     
    in group
    
     
    A quot---ation
    

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

     
    in macro, a format_command containing some other commands.
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    

    flushleft call macro in flushleft in format_command

     
    in macro
    
    
     
    in format_command
    
    Something
    
    Something
    
     
    in group
    
    Something2
    
    After
    
    Something2
    
     
    in group
    
    After
    
    
    
    
    
     
    in group
    
     
    A quot---ation
    
    
    subheading
    
    
    in verbatim
    
    
    html
    
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
     
    in macro, a format_command containing some other commands.
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    

    in macro

     
    in format_command
    

    Something

    Something

     
    in group
    

    Something2

    After

    Something2

     
    in group
    

    After



     
    in group
    
     
    A quot---ation
    

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

     
    in macro, a format_command containing some other commands.
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    

    flushright

     
    in macro
    
    
     
    in format_command
    
    Something
    
    Something
    
     
    in group
    
    Something2
    
    After
    
    Something2
    
     
    in group
    
    After
    
    
    
    
    
     
    in group
    
     
    A quot---ation
    
    
    subheading
    
    
    in verbatim
    
    
    html
    
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
     
    in macro, a format_command containing some other commands.
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/nested_formats/res/nested_group/0000755000175000017500000000000011264347121024514 5ustar flichtenheldflichtenheldtexi2html-1.82/test/nested_formats/res/nested_group/nested_formats.20000644000175000017500000000000011264347121027602 0ustar flichtenheldflichtenheldtexi2html-1.82/test/nested_formats/res/nested_group/nested_formats.html0000644000175000017500000024270511264347121030431 0ustar flichtenheldflichtenheld Untitled Document

    Test nested group

    Call macro in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    Call macro in format_command

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    Call macro in itemize at the beginning of an item

    • a–n itemize line in macro

      in format_command

      Something

      Something

      in group

      Something2

      After

      Something2

      in group

      After



      in group

      A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      in macro, a format_command containing some other commands.

      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    • a–n itemize line item 1 Call macro in itemize in macro

      in format_command

      Something

      Something

      in group

      Something2

      After

      Something2

      in group

      After



      in group

      A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      in macro, a format_command containing some other commands.

      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    • a–n itemize line item 2 Call macro in itemize in format_command

      in macro

      in format_command

      Something

      Something

      in group

      Something2

      After

      Something2

      in group

      After



      in group

      A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      in macro, a format_command containing some other commands.

      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    Call macro in enumerate at the beginning of enumerate

    1. in macro

      in format_command

      Something

      Something

      in group

      Something2

      After

      Something2

      in group

      After



      in group

      A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      in macro, a format_command containing some other commands.

      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    2. enumerate Call macro in enumerate in macro

      in format_command

      Something

      Something

      in group

      Something2

      After

      Something2

      in group

      After



      in group

      A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      in macro, a format_command containing some other commands.

      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    3. enumerate2 Call macro in enumerate in format_command

      in macro

      in format_command

      Something

      Something

      in group

      Something2

      After

      Something2

      in group

      After



      in group

      A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      in macro, a format_command containing some other commands.

      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    mu–ltitable headitemanother tab
    multitable itemmultitable tab. And after Call macro in mutitable after item
    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    multitable item 2multitable tab 2 Call macro in mutitable in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    lone multitable item Call macro in mutitable in format_command

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro at the example beginning

     
    in macro
    
    
    in format_command
    
    Something
    
    Something
    
    in group
    
    Something2
    
    After
    
    Something2
    
    in group
    
    After
    
    
    
    
    
    in group
    
    A quot---ation
    
    
    subheading
    
    
    in verbatim
    
    
    html
    
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    in macro, a format_command containing some other commands.
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    example  some
       text
    call macro in example
    in macro
    
    
    in format_command
    
    Something
    
    Something
    
    in group
    
    Something2
    
    After
    
    Something2
    
    in group
    
    After
    
    
    
    
    
    in group
    
    A quot---ation
    
    
    subheading
    
    
    in verbatim
    
    
    html
    
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    in macro, a format_command containing some other commands.
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    
    more example text
    call macro in example in format_command
    
    in macro
    
    
    in format_command
    
    Something
    
    Something
    
    in group
    
    Something2
    
    After
    
    Something2
    
    in group
    
    After
    
    
    
    
    
    in group
    
    A quot---ation
    
    
    subheading
    
    
    in verbatim
    
    
    html
    
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    in macro, a format_command containing some other commands.
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    deffn call macro in deffn in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    deffn continues call macro in deffn in format_command

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro in deffn at the beginning

    c--ategory2: d--effn_name2 a--rguments2...

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    • a line

    call macro in table in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro in table at an item beginning

    • a line

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    • a line2

    call macro in table in format_command

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro at cartouche begin

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    cartouche call macro in cartouche in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro in cartouche in format_command

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    call macro in flushleft in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    flushleft call macro in flushleft in format_command

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    flushright

    in macro

    in format_command

    Something

    Something

    in group

    Something2

    After

    Something2

    in group

    After



    in group

    A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in macro, a format_command containing some other commands.

    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/nested_formats/res/nested_itemize/0000755000175000017500000000000011264347121025026 5ustar flichtenheldflichtenheldtexi2html-1.82/test/nested_formats/res/nested_itemize/nested_formats.20000644000175000017500000000000011264347121030114 0ustar flichtenheldflichtenheldtexi2html-1.82/test/nested_formats/res/nested_itemize/nested_formats.html0000644000175000017500000025100211264347121030731 0ustar flichtenheldflichtenheld Untitled Document

    Test nested itemize

    Call macro in macro

    • in format_command

    Something

    Something

    • in group

    Something2

    After

    Something2

    • in group

    After



    • in group
    • A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    • in macro, a format_command containing some other commands.
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    Call macro in format_command

    • in macro
      • in format_command

      Something

      Something

      • in group

      Something2

      After

      Something2

      • in group

      After



      • in group
      • A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      • in macro, a format_command containing some other commands.
        • a–n itemize line i–tem 1
        • a–n itemize line i–tem 2
        1. e–numerate
        mu–ltitable headitemanother tab
        mu–ltitable itemmultitable tab
        mu–ltitable item 2multitable tab 2
        lone mu–ltitable item
         
        e--xample  some
           text
        
         
        s--mallexample
        
        c--ategory: d--effn_name a--rguments...

        d–effn

        • a

        l–ine

        c–artouche

        f–lushleft

        f–lushright

        ce–ntered line

    Call macro in itemize at the beginning of an item

    • a–n itemize line in macro
      • in format_command

      Something

      Something

      • in group

      Something2

      After

      Something2

      • in group

      After



      • in group
      • A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      • in macro, a format_command containing some other commands.
        • a–n itemize line i–tem 1
        • a–n itemize line i–tem 2
        1. e–numerate
        mu–ltitable headitemanother tab
        mu–ltitable itemmultitable tab
        mu–ltitable item 2multitable tab 2
        lone mu–ltitable item
         
        e--xample  some
           text
        
         
        s--mallexample
        
        c--ategory: d--effn_name a--rguments...

        d–effn

        • a

        l–ine

        c–artouche

        f–lushleft

        f–lushright

        ce–ntered line

    • a–n itemize line item 1 Call macro in itemize in macro
      • in format_command

      Something

      Something

      • in group

      Something2

      After

      Something2

      • in group

      After



      • in group
      • A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      • in macro, a format_command containing some other commands.
        • a–n itemize line i–tem 1
        • a–n itemize line i–tem 2
        1. e–numerate
        mu–ltitable headitemanother tab
        mu–ltitable itemmultitable tab
        mu–ltitable item 2multitable tab 2
        lone mu–ltitable item
         
        e--xample  some
           text
        
         
        s--mallexample
        
        c--ategory: d--effn_name a--rguments...

        d–effn

        • a

        l–ine

        c–artouche

        f–lushleft

        f–lushright

        ce–ntered line

    • a–n itemize line item 2 Call macro in itemize in format_command
      • in macro
        • in format_command

        Something

        Something

        • in group

        Something2

        After

        Something2

        • in group

        After



        • in group
        • A quot—ation

        subheading

        in verbatim
        
        html
        • a–n itemize line i–tem 1
        • a–n itemize line i–tem 2
        1. e–numerate
        mu–ltitable headitemanother tab
        mu–ltitable itemmultitable tab
        mu–ltitable item 2multitable tab 2
        lone mu–ltitable item
         
        e--xample  some
           text
        
         
        s--mallexample
        
        c--ategory: d--effn_name a--rguments...

        d–effn

        • a

        l–ine

        c–artouche

        f–lushleft

        f–lushright

        ce–ntered line

        • in macro, a format_command containing some other commands.
          • a–n itemize line i–tem 1
          • a–n itemize line i–tem 2
          1. e–numerate
          mu–ltitable headitemanother tab
          mu–ltitable itemmultitable tab
          mu–ltitable item 2multitable tab 2
          lone mu–ltitable item
           
          e--xample  some
             text
          
           
          s--mallexample
          
          c--ategory: d--effn_name a--rguments...

          d–effn

          • a

          l–ine

          c–artouche

          f–lushleft

          f–lushright

          ce–ntered line

    Call macro in enumerate at the beginning of enumerate

    1. in macro
      • in format_command

      Something

      Something

      • in group

      Something2

      After

      Something2

      • in group

      After



      • in group
      • A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      • in macro, a format_command containing some other commands.
        • a–n itemize line i–tem 1
        • a–n itemize line i–tem 2
        1. e–numerate
        mu–ltitable headitemanother tab
        mu–ltitable itemmultitable tab
        mu–ltitable item 2multitable tab 2
        lone mu–ltitable item
         
        e--xample  some
           text
        
         
        s--mallexample
        
        c--ategory: d--effn_name a--rguments...

        d–effn

        • a

        l–ine

        c–artouche

        f–lushleft

        f–lushright

        ce–ntered line

    2. enumerate Call macro in enumerate in macro
      • in format_command

      Something

      Something

      • in group

      Something2

      After

      Something2

      • in group

      After



      • in group
      • A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      • in macro, a format_command containing some other commands.
        • a–n itemize line i–tem 1
        • a–n itemize line i–tem 2
        1. e–numerate
        mu–ltitable headitemanother tab
        mu–ltitable itemmultitable tab
        mu–ltitable item 2multitable tab 2
        lone mu–ltitable item
         
        e--xample  some
           text
        
         
        s--mallexample
        
        c--ategory: d--effn_name a--rguments...

        d–effn

        • a

        l–ine

        c–artouche

        f–lushleft

        f–lushright

        ce–ntered line

    3. enumerate2 Call macro in enumerate in format_command
      • in macro
        • in format_command

        Something

        Something

        • in group

        Something2

        After

        Something2

        • in group

        After



        • in group
        • A quot—ation

        subheading

        in verbatim
        
        html
        • a–n itemize line i–tem 1
        • a–n itemize line i–tem 2
        1. e–numerate
        mu–ltitable headitemanother tab
        mu–ltitable itemmultitable tab
        mu–ltitable item 2multitable tab 2
        lone mu–ltitable item
         
        e--xample  some
           text
        
         
        s--mallexample
        
        c--ategory: d--effn_name a--rguments...

        d–effn

        • a

        l–ine

        c–artouche

        f–lushleft

        f–lushright

        ce–ntered line

        • in macro, a format_command containing some other commands.
          • a–n itemize line i–tem 1
          • a–n itemize line i–tem 2
          1. e–numerate
          mu–ltitable headitemanother tab
          mu–ltitable itemmultitable tab
          mu–ltitable item 2multitable tab 2
          lone mu–ltitable item
           
          e--xample  some
             text
          
           
          s--mallexample
          
          c--ategory: d--effn_name a--rguments...

          d–effn

          • a

          l–ine

          c–artouche

          f–lushleft

          f–lushright

          ce–ntered line

    mu–ltitable headitemanother tab
    multitable itemmultitable tab. And after Call macro in mutitable after item
    in macro
    • in format_command

    Something

    Something

    • in group

    Something2

    After

    Something2

    • in group

    After



    • in group
    • A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    • in macro, a format_command containing some other commands.
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    multitable item 2multitable tab 2 Call macro in mutitable in macro
    • in format_command

    Something

    Something

    • in group

    Something2

    After

    Something2

    • in group

    After



    • in group
    • A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    • in macro, a format_command containing some other commands.
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    lone multitable item Call macro in mutitable in format_command
    • in macro
      • in format_command

      Something

      Something

      • in group

      Something2

      After

      Something2

      • in group

      After



      • in group
      • A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      • in macro, a format_command containing some other commands.
        • a–n itemize line i–tem 1
        • a–n itemize line i–tem 2
        1. e–numerate
        mu–ltitable headitemanother tab
        mu–ltitable itemmultitable tab
        mu–ltitable item 2multitable tab 2
        lone mu–ltitable item
         
        e--xample  some
           text
        
         
        s--mallexample
        
        c--ategory: d--effn_name a--rguments...

        d–effn

        • a

        l–ine

        c–artouche

        f–lushleft

        f–lushright

        ce–ntered line

    call macro at the example beginning

     
    in macro
    
    
    • in format_command
      
    Something
    
    Something
    
    • in group
      
    Something2
    
    After
    
    Something2
    
    • in group
      
    After
    
    
    
    
    
    • in group
      
    • A quot---ation
      
    
    subheading
    
    
    in verbatim
    
    
    html
    
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    • in macro, a format_command containing some other commands.
      
      • a--n itemize line  i--tem 1
        
      • a--n itemize line  i--tem 2
        
      1.  e--numerate
        
      mu--ltitable headitem
      another tab
      mu--ltitable item
      multitable tab
      mu--ltitable item 2
      multitable tab 2
      lone mu--ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...
      d--effn
      
      • a
      l--ine
      
      c--artouche
      
      f--lushleft
      
      f--lushright
      
       ce--ntered line
      
    example  some
       text
    call macro in example
    in macro
    
    
    • in format_command
      
    Something
    
    Something
    
    • in group
      
    Something2
    
    After
    
    Something2
    
    • in group
      
    After
    
    
    
    
    
    • in group
      
    • A quot---ation
      
    
    subheading
    
    
    in verbatim
    
    
    html
    
    
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    lone mu--ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    • a
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    • in macro, a format_command containing some other commands.
      
      • a--n itemize line  i--tem 1
        
      • a--n itemize line  i--tem 2
        
      1.  e--numerate
        
      mu--ltitable headitem
      another tab
      mu--ltitable item
      multitable tab
      mu--ltitable item 2
      multitable tab 2
      lone mu--ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...
      d--effn
      
      • a
      l--ine
      
      c--artouche
      
      f--lushleft
      
      f--lushright
      
       ce--ntered line
      
    
    more example text
    call macro in example in format_command
    
    • in macro
      
      
      • in format_command
        
      Something
      
      Something
      
      • in group
        
      Something2
      
      After
      
      Something2
      
      • in group
        
      After
      
      
      
      
      
      • in group
        
      • A quot---ation
        
      
      subheading
      
      
      in verbatim
      
      
      html
      
      
      • a--n itemize line  i--tem 1
        
      • a--n itemize line  i--tem 2
        
      1.  e--numerate
        
      mu--ltitable headitem
      another tab
      mu--ltitable item
      multitable tab
      mu--ltitable item 2
      multitable tab 2
      lone mu--ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...
      d--effn
      
      • a
      l--ine
      
      c--artouche
      
      f--lushleft
      
      f--lushright
      
       ce--ntered line
      
      • in macro, a format_command containing some other commands.
        
        • a--n itemize line  i--tem 1
          
        • a--n itemize line  i--tem 2
          
        1.  e--numerate
          
        mu--ltitable headitem
        another tab
        mu--ltitable item
        multitable tab
        mu--ltitable item 2
        multitable tab 2
        lone mu--ltitable item
         
        e--xample  some
           text
        
         
        s--mallexample
        
        c--ategory: d--effn_name a--rguments...
        d--effn
        
        • a
        l--ine
        
        c--artouche
        
        f--lushleft
        
        f--lushright
        
         ce--ntered line
        
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    deffn call macro in deffn in macro

    • in format_command

    Something

    Something

    • in group

    Something2

    After

    Something2

    • in group

    After



    • in group
    • A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    • in macro, a format_command containing some other commands.
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    deffn continues call macro in deffn in format_command

    • in macro
      • in format_command

      Something

      Something

      • in group

      Something2

      After

      Something2

      • in group

      After



      • in group
      • A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      • in macro, a format_command containing some other commands.
        • a–n itemize line i–tem 1
        • a–n itemize line i–tem 2
        1. e–numerate
        mu–ltitable headitemanother tab
        mu–ltitable itemmultitable tab
        mu–ltitable item 2multitable tab 2
        lone mu–ltitable item
         
        e--xample  some
           text
        
         
        s--mallexample
        
        c--ategory: d--effn_name a--rguments...

        d–effn

        • a

        l–ine

        c–artouche

        f–lushleft

        f–lushright

        ce–ntered line

    call macro in deffn at the beginning

    c--ategory2: d--effn_name2 a--rguments2...

    in macro

    • in format_command

    Something

    Something

    • in group

    Something2

    After

    Something2

    • in group

    After



    • in group
    • A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    • in macro, a format_command containing some other commands.
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    • a line

    call macro in table in macro

    • in format_command

    Something

    Something

    • in group

    Something2

    After

    Something2

    • in group

    After



    • in group
    • A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    • in macro, a format_command containing some other commands.
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    call macro in table at an item beginning

    • a line

    in macro

    • in format_command

    Something

    Something

    • in group

    Something2

    After

    Something2

    • in group

    After



    • in group
    • A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    • in macro, a format_command containing some other commands.
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    • a line2

    call macro in table in format_command

    • in macro
      • in format_command

      Something

      Something

      • in group

      Something2

      After

      Something2

      • in group

      After



      • in group
      • A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      • in macro, a format_command containing some other commands.
        • a–n itemize line i–tem 1
        • a–n itemize line i–tem 2
        1. e–numerate
        mu–ltitable headitemanother tab
        mu–ltitable itemmultitable tab
        mu–ltitable item 2multitable tab 2
        lone mu–ltitable item
         
        e--xample  some
           text
        
         
        s--mallexample
        
        c--ategory: d--effn_name a--rguments...

        d–effn

        • a

        l–ine

        c–artouche

        f–lushleft

        f–lushright

        ce–ntered line

    call macro at cartouche begin

    in macro

    • in format_command

    Something

    Something

    • in group

    Something2

    After

    Something2

    • in group

    After



    • in group
    • A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    • in macro, a format_command containing some other commands.
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    cartouche call macro in cartouche in macro

    • in format_command

    Something

    Something

    • in group

    Something2

    After

    Something2

    • in group

    After



    • in group
    • A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    • in macro, a format_command containing some other commands.
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    call macro in cartouche in format_command

    • in macro
      • in format_command

      Something

      Something

      • in group

      Something2

      After

      Something2

      • in group

      After



      • in group
      • A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      • in macro, a format_command containing some other commands.
        • a–n itemize line i–tem 1
        • a–n itemize line i–tem 2
        1. e–numerate
        mu–ltitable headitemanother tab
        mu–ltitable itemmultitable tab
        mu–ltitable item 2multitable tab 2
        lone mu–ltitable item
         
        e--xample  some
           text
        
         
        s--mallexample
        
        c--ategory: d--effn_name a--rguments...

        d–effn

        • a

        l–ine

        c–artouche

        f–lushleft

        f–lushright

        ce–ntered line

    call macro in flushleft in macro

    • in format_command

    Something

    Something

    • in group

    Something2

    After

    Something2

    • in group

    After



    • in group
    • A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    • in macro, a format_command containing some other commands.
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    flushleft call macro in flushleft in format_command

    • in macro
      • in format_command

      Something

      Something

      • in group

      Something2

      After

      Something2

      • in group

      After



      • in group
      • A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      • in macro, a format_command containing some other commands.
        • a–n itemize line i–tem 1
        • a–n itemize line i–tem 2
        1. e–numerate
        mu–ltitable headitemanother tab
        mu–ltitable itemmultitable tab
        mu–ltitable item 2multitable tab 2
        lone mu–ltitable item
         
        e--xample  some
           text
        
         
        s--mallexample
        
        c--ategory: d--effn_name a--rguments...

        d–effn

        • a

        l–ine

        c–artouche

        f–lushleft

        f–lushright

        ce–ntered line

    in macro

    • in format_command

    Something

    Something

    • in group

    Something2

    After

    Something2

    • in group

    After



    • in group
    • A quot—ation

    subheading

    in verbatim
    
    html
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
     
    e--xample  some
       text
    
     
    s--mallexample
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    • a

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    • in macro, a format_command containing some other commands.
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

    flushright

    • in macro
      • in format_command

      Something

      Something

      • in group

      Something2

      After

      Something2

      • in group

      After



      • in group
      • A quot—ation

      subheading

      in verbatim
      
      html
      • a–n itemize line i–tem 1
      • a–n itemize line i–tem 2
      1. e–numerate
      mu–ltitable headitemanother tab
      mu–ltitable itemmultitable tab
      mu–ltitable item 2multitable tab 2
      lone mu–ltitable item
       
      e--xample  some
         text
      
       
      s--mallexample
      
      c--ategory: d--effn_name a--rguments...

      d–effn

      • a

      l–ine

      c–artouche

      f–lushleft

      f–lushright

      ce–ntered line

      • in macro, a format_command containing some other commands.
        • a–n itemize line i–tem 1
        • a–n itemize line i–tem 2
        1. e–numerate
        mu–ltitable headitemanother tab
        mu–ltitable itemmultitable tab
        mu–ltitable item 2multitable tab 2
        lone mu–ltitable item
         
        e--xample  some
           text
        
         
        s--mallexample
        
        c--ategory: d--effn_name a--rguments...

        d–effn

        • a

        l–ine

        c–artouche

        f–lushleft

        f–lushright

        ce–ntered line


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/nested_formats/tests.txt0000644000175000017500000000126411264347121023133 0ustar flichtenheldflichtenheldtexi nested_formats.texi nested_group nested_formats.texi nested_itemize nested_formats.texi -D format_itemize nested_menu nested_formats.texi -D format_menu # nested floats are broken. Not a big deal #nested_float nested_formats.texi -D format_float nested_table nested_formats.texi -D format_table nested_flushright nested_formats.texi -D format_flushright nested_multitable nested_formats.texi -D format_multitable nested_cartouche nested_formats.texi -D format_cartouche nested_enumerate nested_formats.texi -D format_enumerate nested_deffn nested_formats.texi -D format_deffn nested_example nested_formats.texi -D format_example nested_quotation nested_formats.texi -D format_quotation texi2html-1.82/test/nested_formats/nested_formats.texi0000644000175000017500000001411311264347121025135 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @c value not expanded, by makeinfo nor by texi2html @c @setfilename nested_formats.info @ifset format_itemize @set format_command_begin @itemize @set format_command itemize @end ifset @ifset format_menu @set format_command_begin @menu @set format_command menu @end ifset @ifset format_float @set format_command_begin @float @set format_command float @end ifset @ifset format_table @set format_command_begin @table @set format_command table @end ifset @ifset format_flushright @set format_command_begin @flushright @set format_command flushright @end ifset @ifset format_multitable @set format_command_begin @multitable @set format_command multitable @end ifset @ifset format_cartouche @set format_command_begin @cartouche @set format_command cartouche @end ifset @ifset format_enumerate @set format_command_begin @enumerate @set format_command enumerate @end ifset @ifset format_deffn @set format_command_begin @deffn fun arg arg1 @set format_command deffn @end ifset @ifset format_example @set format_command_begin @example @set format_command example @end ifset @ifset format_quotation @set format_command_begin @quotation @set format_command quotation @end ifset @ifclear format_command @set format_command_begin @group @set format_command group @end ifclear @c @setfilename @value{format_command}.info @node Top @top Test nested @value{format_command} @macro mymacro in macro @value{format_command_begin} @end @value{format_command} @value{format_command_begin} in format_command @end @value{format_command} Something @value{format_command_begin} @end @value{format_command} Something @value{format_command_begin} in group @end @value{format_command} Something2 @value{format_command_begin} @end @value{format_command} After Something2 @value{format_command_begin} in group @end @value{format_command} After @sp 2 @value{format_command_begin} in group @end @value{format_command} @value{format_command_begin} @quotation A quot---ation @end quotation @end @value{format_command} @subheading subheading @verbatim in verbatim @end verbatim @xml xml para @end xml @html html @end html @tex $$\\partial_t \\eta (t) = g(\\eta(t),\\varphi(t))$$ @end tex @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @value{format_command_begin} in macro, a format_command containing some other commands. @itemize @bullet{} a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @table @bullet @item a l--ine @end table @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @end @value{format_command} @end macro Call macro @mymacro Call macro in format_command @value{format_command_begin} @mymacro @end @value{format_command} Call macro in itemize at the beginning of an item @itemize @bullet{} a--n itemize line @item @mymacro @item item 1 Call macro in itemize @mymacro @item item 2 Call macro in itemize in format_command @value{format_command_begin} @mymacro @end @value{format_command} @end itemize Call macro in enumerate at the beginning of enumerate @enumerate @item @mymacro @item enumerate Call macro in enumerate @mymacro @item enumerate2 Call macro in enumerate in format_command @value{format_command_begin} @mymacro @end @value{format_command} @end enumerate @multitable @columnfractions 0.6 0.7 @headitem mu--ltitable headitem @tab another tab @item multitable item @tab multitable tab. And after Call macro in mutitable after item @item @mymacro @item multitable item 2 @tab multitable tab 2 Call macro in mutitable @mymacro @item lone multitable item Call macro in mutitable in format_command @value{format_command_begin} @mymacro @end @value{format_command} @end multitable call macro at the example beginning @example @mymacro example some text call macro in example @mymacro more example text call macro in example in format_command @value{format_command_begin} @mymacro @end @value{format_command} @end example @smallexample s--mallexample @end smallexample @deffn c--ategory d--effn_name a--rguments... deffn call macro in deffn @mymacro deffn continues call macro in deffn in format_command @value{format_command_begin} @mymacro @end @value{format_command} @end deffn call macro in deffn at the beginning @deffn c--ategory2 d--effn_name2 a--rguments2... @mymacro @end deffn @table @bullet @item a line call macro in table @mymacro call macro in table at an item beginning @item a line @mymacro @item a line2 call macro in table in format_command @value{format_command_begin} @mymacro @end @value{format_command} @end table call macro at cartouche begin @cartouche @mymacro cartouche call macro in cartouche @mymacro call macro in cartouche in format_command @value{format_command_begin} @mymacro @end @value{format_command} @end cartouche @flushleft call macro in flushleft @mymacro flushleft call macro in flushleft in format_command @value{format_command_begin} @mymacro @end @value{format_command} @end flushleft @flushright @mymacro flushright @value{format_command_begin} @mymacro @end @value{format_command} @end flushright @bye texi2html-1.82/test/nested_formats/Makefile.am0000644000175000017500000000030111264347121023253 0ustar flichtenheldflichtenheldEXTRA_DIST = nested_formats.texi \ tests.txt res DISTCLEANFILES = l2h_tmp_dir.init tests.log tests.out distclean-local: rm -rf out diffs dist-hook: rm -rf `find $(distdir)/res -name CVS` texi2html-1.82/test/README0000644000175000017500000001020211264347115017066 0ustar flichtenheldflichtenheldPrerequisites ============= To run this testsuite, sed (with -i), awk, diff, mktemp are used. To find the same results, tex4ht, latex2HTML, perl with unicode support and the Text::Unidecode perl module have to be installed (with their dependencies). It is possible that some test results involving tex4ht and latex2HTML depend on the setup and version of these tools, so you may get false negative. Running the testsuite ===================== This testsuite can be run * using the makefile rules: check for the base tests, long-check for the long tests, or all-checks for both. * using ./tests.sh with the list of directories in argument one want to run the tests in. * by going in one directory and running ../run_test.sh, like $ cd formatting $ ../run_test.sh * by going in one directory and running one specific test, like $ cd formatting $ ../run_test.sh quotes The test results are in the out/ directory; the reference results are in res/; the diffs are put in diffs. If a test failed, F: a_test_directory is printed, if there is a diff with the references, a D: a_test_directory is printed. If there are no reference to compare with, no res: a_test_directory is printed. If a whole directory check run using ./tests.sh had no failure, the directory name is printed followed by a 0, it is followed by a 1 if there was some failure. The test results are in a directory below the out/ directory. This directory name can be considered as the test name. Let's call it a_test for the remaining of the explanation. The stderr output is in out/a_test/a_test.2, stdout output is concatenated in tests.out. All the commands called are output in tests.log. giving -copy in argument to tests.sh or ../run_test.sh will cause the references to be regenerated. This can also be achieved with the copy-tests make target. Tests specification =================== The tests ran are driven by the content of the tests.txt file. It is a line oriented file. A # starts a comment. Each line describes a test. The first word on the line is the test name which corresponds also with the resulting directory (we called it a_test in the previous examples). It is followed by the source manual name. The source manual name has to have the .texi extension. Optionnally additional arguments can be given on the remaining of the line. So, for example a_test manual.texi specifies that the results of processing manual.texi are put in the a_test directory. a_test_split_chapter manual.texi --split chapter specifies that the results of the processing of manual.texi with additional command line arguments --split chapter will be in the a_test_split_chapter directory. Using 'texi' as the test name is special. In that case the directory name is constructed by appending _ followed by the manual name without the .texi extension to 'texi'. And the result is not processed normally, but instead macros are expanded and regions that are not processed removed and the result is put in a file with the same name than the manual. Similar result files but with include file, macro and line number informations are put in files with the .texi extension replaced by .passtexi and .passfirst. More precisely, the .passtexi file corresponds with the texi after the first pass and the .passfirst file corresponds with the result after the second pass. So, for example, if texi manual.texi appears in the tests.txt file, in the directory out/texi_manual the file manual.texi will have macros expanded and ignored regions removed, and the files manual.passtexi and manual.passfirst will contain the additionaly include file and line number informations corresponding with the texinfo at the end of the first and second pass. Misc ==== For the tests that use latex2html, to avoid the test failing if there is a dot in the cwd, mktemp is used to create a temporary directory, hopefully in /tmp, and the directory can be passed through the l2h_tmp_dir.init file, generated automatically in every test directory. A common .texi file should be in the top-level directory (there is such an example with coverage_macro.texi). Currently there is no support for common init file, but it could be added easily. texi2html-1.82/test/run_test.sh0000755000175000017500000001577311264347121020427 0ustar flichtenheldflichtenheld#! /bin/sh #set -x #echo "SRCDIR $srcdir srcdir_test $srcdir_test" export LANG=C res_dir=res out_dir=out diffs_dir=diffs logfile=tests.log stdout_file=tests.out clean=no if [ z"$1" = 'z-clean' ]; then clean=yes shift fi copy=no if [ z"$1" = 'z-copy' ]; then [ -d "$res_dir" ] || mkdir "$res_dir" copy=yes shift fi no_latex2html=yes if which latex2html > /dev/null 2>&1; then no_latex2html=no fi no_tex4ht=yes if which httexi > /dev/null 2>&1; then no_tex4ht=no fi one_test=no if [ z"$1" != 'z' ]; then one_test=yes the_test=$1 if [ "z$the_test" = "ztexi" ]; then the_file=$2 [ "z$the_file" != "z" ] && the_basename=`basename $the_file .texi` fi fi if [ "z$srcdir_test" = 'z' ]; then testdir=. srcdir_test=. else if [ "z$srcdir" = 'z' ]; then testdir=.. else testdir=../$srcdir fi fi results_dir="$testdir/$srcdir_test/$res_dir" test_file='tests.txt' driving_file="$testdir/$srcdir_test/$test_file" if [ -f "$driving_file" ]; then : else echo "Cannot find test driving file $driving_file" 1>&2 exit 1 fi if [ "z$clean" = 'zyes' -o "z$copy" = 'zyes' ]; then while read line do if echo $line | grep -qs '^ *#'; then continue; fi # there are better ways dir=`echo $line | awk '{print $1}'` file=`echo $line | awk '{print $2}'` [ "z$dir" = 'z' -o "$zfile" = 'z' ] && continue basename=`basename $file .texi` if [ "z$dir" = 'ztexi' ]; then dir="texi_${basename}" fi if [ "z$clean" = 'zyes' ]; then [ -d "$out_dir/$dir" ] && rm -rf "$out_dir/$dir" else if [ -d "$out_dir/$dir" ]; then if [ -d "$res_dir/$dir" ]; then # ugly hack to avoid CVS rm "$res_dir/$dir/"*.* else mkdir "$res_dir/$dir/" fi cp -r "$out_dir/$dir/"* "$res_dir/$dir/" rm -f "$res_dir/$dir/"*.png "$res_dir/$dir/"*_l2h.css else echo "No dir $out_dir/$dir" 1>&2 fi fi done < "$driving_file" exit 0 fi [ -d "$diffs_dir" ] || mkdir "$diffs_dir" [ -d "$out_dir" ] || mkdir "$out_dir" if tmp_dir=`mktemp -p /tmp -d l2h_t2h_XXXXXXXX`; then echo "\$L2H_TMP = '$tmp_dir';" > l2h_tmp_dir.init echo "1;" >> l2h_tmp_dir.init else exit 1 fi echo "result_dir $results_dir, driving_file $driving_file" > $logfile echo "" > $stdout_file return_code=0 while read line do if echo $line | grep -qs '^ *#'; then continue; fi # there are better ways dir=`echo $line | awk '{print $1}'` file=`echo $line | awk '{print $2}'` [ "z$dir" = 'z' -o "$zfile" = 'z' ] && continue basename=`basename $file .texi` remaining=`echo $line | sed 's/[a-zA-Z0-9_./-]\+ \+[a-zA-Z0-9_./-]\+ *//'` src_file="$testdir/$srcdir_test/$file" if [ $one_test = 'yes' -a "z$dir" != "z$the_test" ]; then continue fi if [ "z$dir" = 'ztexi' ]; then if [ $one_test = 'yes' -a "z$the_basename" != 'z' -a "z$basename" != "z$the_basename" ]; then continue fi one_test_done=yes dir="texi_${basename}" [ -d "$out_dir/$dir" ] && rm -rf "$out_dir/$dir" mkdir "$out_dir/$dir" # -I $testdir/$srcdir_test/ is useful when file name is found using # @setfilename echo "$dir" >> $logfile echo "perl -w -x $testdir/$srcdir_test/../../texi2html.pl -conf-dir $testdir/$srcdir_test/../../examples -conf-dir $testdir/$srcdir_test/ -test --out $out_dir/$dir/ -I $testdir/$srcdir_test/ -I $testdir/$srcdir_test/../ -dump-texi $remaining $src_file 2>$out_dir/$dir/$basename.2" >> $logfile eval "perl -w -x $testdir/$srcdir_test/../../texi2html.pl -conf-dir $testdir/$srcdir_test/../../examples -conf-dir $testdir/$srcdir_test/ -test --out $out_dir/$dir/ -I $testdir/$srcdir_test/ -I $testdir/$srcdir_test/../ -dump-texi $remaining $src_file 2>$out_dir/$dir/$basename.2" echo "perl -w -x $testdir/$srcdir_test/../../texi2html.pl -conf-dir $testdir/$srcdir_test/../../examples -conf-dir $testdir/$srcdir_test/ -test --out $out_dir/$dir/ -I $testdir/$srcdir_test/ -I $testdir/$srcdir_test/../ --macro-expand=$out_dir/$dir/$basename.texi $remaining $src_file 2>>$out_dir/$dir/$basename.2" >> $logfile eval "perl -w -x $testdir/$srcdir_test/../../texi2html.pl -conf-dir $testdir/$srcdir_test/../../examples -conf-dir $testdir/$srcdir_test/ -test --out $out_dir/$dir/ -I $testdir/$srcdir_test/ -I $testdir/$srcdir_test/../ --macro-expand=$out_dir/$dir/$basename.texi $remaining $src_file 2>>$out_dir/$dir/$basename.2" ret=$? else use_latex2html=no use_tex4ht=no if echo "$remaining" | grep -qs -- '-l2h'; then if [ "$no_latex2html" = 'yes' ]; then echo "S: (no latex2html) $dir" continue fi use_latex2html=yes elif echo "$remaining" | grep -qs -- '-init tex4ht.init'; then if [ "$no_tex4ht" = 'yes' ]; then echo "S: (no tex4ht) $dir" continue fi use_tex4ht=yes fi one_test_done=yes [ -d "$out_dir/$dir" ] && rm -rf "$out_dir/$dir" mkdir "$out_dir/$dir" echo "$dir" >> $logfile echo >> $stdout_file echo " ----> $dir" >> $stdout_file echo "perl -w -x $testdir/$srcdir_test/../../texi2html.pl -conf-dir $testdir/$srcdir_test/../../examples -conf-dir $testdir/$srcdir_test/ -I $testdir/$srcdir_test/ -I $testdir/$srcdir_test/../ -test --out $out_dir/$dir/ $remaining $src_file >> $stdout_file 2>$out_dir/$dir/$basename.2" >> $logfile eval "perl -w -x $testdir/$srcdir_test/../../texi2html.pl -conf-dir $testdir/$srcdir_test/../../examples -conf-dir $testdir/$srcdir_test/ -I $testdir/$srcdir_test/ -I $testdir/$srcdir_test/../ -test --out $out_dir/$dir/ $remaining $src_file >> $stdout_file 2>$out_dir/$dir/$basename.2" ret=$? rm -f $out_dir/$dir/*_l2h_images.log $out_dir/$dir/*_tex4ht_*.log \ $out_dir/$dir/*_tex4ht_*.idv $out_dir/$dir/*_tex4ht_*.dvi \ $out_dir/$dir/*_tex4ht_tex.html fi if [ $ret = 0 ]; then sed -i -e 's/^texexpand.*/texexpand /' "$out_dir/$dir/$basename.2" sed -i '/is no longer supported at.*line/d' "$out_dir/$dir/$basename.2" if [ "$use_latex2html" = 'yes' ]; then sed -i -e 's/CONTENT="LaTeX2HTML.*/CONTENT="LaTeX2HTML">/' -e \ 's/with LaTeX2HTML.*/with LaTeX2HTML/' "$out_dir/$dir/"*"_l2h.html" # "*"_images.pl" files are not guaranteed to be present for file in "$out_dir/$dir/"*"_images.pl" "$out_dir/$dir/"*"_labels.pl"; do if [ -f "$file" ]; then sed -i -e 's/^# LaTeX2HTML.*/# LaTeX2HTML/' "$file" fi done rm -f "$out_dir/$dir/"*".aux" "$out_dir/$dir/"*"_images.out" fi if [ -d "$results_dir/$dir" ]; then diff -u --exclude=CVS --exclude='*.png' --exclude='*_l2h.css' -r "$results_dir/$dir" "$out_dir/$dir" 2>>$logfile > "$diffs_dir/$dir.diff" dif_ret=$? if [ $dif_ret != 0 ]; then echo "D: $diffs_dir/$dir.diff" return_code=1 else rm "$diffs_dir/$dir.diff" fi else echo "no res: $dir" fi else echo "F: $out_dir/$dir/$basename.2" return_code=1 fi done < "$driving_file" rm -rf $tmp_dir if [ "$one_test" = 'yes' -a "z$one_test_done" != "zyes" ]; then echo "$the_test $the_file test not found" fi exit $return_code texi2html-1.82/test/many_input_files/0000755000175000017500000000000011264347126021562 5ustar flichtenheldflichtenheldtexi2html-1.82/test/many_input_files/tex_l2h_res/0000755000175000017500000000000011264347126024000 5ustar flichtenheldflichtenheldtexi2html-1.82/test/many_input_files/tex_l2h_res/tex_l2h.tex0000644000175000017500000000210511264347126026065 0ustar flichtenheldflichtenheld% This document was automatically generated by the l2h extenstion of texi2html % DO NOT EDIT !!! \documentclass{article} \usepackage{html} \begin{document} \begin{rawhtml} \end{rawhtml} some $$ \chi^2 = \sum_{i=1}^N \left(y_i - (a + b x_i) \over \sigma_i\right)^2 $$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} some tex \TeX \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} ${x^i}\over{\tan y}$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $a @\ b$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $@code{math code}$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $ \underline{@code{math \hbox{ code }}} \sum_{i}{\underline{f}}$ \begin{rawhtml} \end{rawhtml} \end{document} texi2html-1.82/test/many_input_files/tex_l2h_res/mini_ker.html0000644000175000017500000144347711264347126026507 0ustar flichtenheldflichtenheld Miniker 102 manual
    [Top] [Contents] [Index] [ ? ]

    Miniker 102 manual


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Introduction

    Miniker is a modeling tool, built especially in order to implement models written following the TEF (Transfer Evolution Formalism) formalism, a mathematical framework for system analysis and simulation. Miniker allows for timewise simulation, system analysis, adjoint computation, Kalman filtering and more.

    Miniker uses a fortran preprocessor, mortran, designed in the 1970’s, to ease model writing using dedicated specific languages. For example partial derivatives are symbolicaly determined by mortran macros in Miniker. For the selection of another compile-time features, another set of preprocessor directives, the cmz directives, are used. In most cases the user does not need to know anything about that preprocessing that occurs behind the scene, he simply writes down the equations of his model and he is done.

    A comprehensive description of the TEF formalism in available on http://www.lmd.jussieu.fr/ZOOM/doc/tef-GB-partA5.pdf). The Miniker software is a reduced version of ZOOM, that can only handle a hundreds of variables, but is much easier to use.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Intended audience

    The reader should have notions in system dynamics. Moreover a minimal knowledge of programmation and fortran is required. What is required is a basic understanding of variable types, affectation and fortran expressions.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Reading guide

    The first chapter is a brief overview of the TEF. The following describes how to write, compile and run a model in Miniker in its basic and comprehensive syntax. Reading up to the section Controlling the run is required to be able to use Miniker. In this section it is assumed that Miniker is properly setup. The installation instructions are in the appendix at Installation.

    The next chapter describes advanced features, first a general introduction to features settings and then a description of other model description related features.

    The next chapter describes system analysis tools available with Miniker. The sections are independant and each describes how to use a specific feature. If you plan on using these features, you should also read Overview of feature setting.

    A final chapter describes advanced features in a development environment using make,

    In the appendix the instructions for the installation are described (see section Installation).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Other Manuals and documentation

    A programmers’Manual is available (in French), and can be asked for to any member of the collabration. See additional documents in http://www.lmd.jussieu.fr/Zoom/doc or ask for Research texts and articles to members.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. An overview of the TEF formalism

    The TEF (Transfer Evolution Formalism) is based on partitionning and recoupling of model subsystems. It allows the study of the coupling between subsystems by the means of linearization and time discretization.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 Cell and Transfer equations

    In the TEF, a model is mathematically represented by a set of equations corresponding to two kinds objects:

    1. Cells which are elementary models and correspond to evolution equations such as:

      \begin{displaymath}\partial_t \eta (t) = g(\eta(t),\varphi(t))\end{displaymath}

      Vector $\eta$ represent the state variables of cells and the vector $\varphi$ represent the dependent boundary conditions, i.e. the variables considered as boundary conditions by a cell, but depending upon the complete model state. This dependent boundary conditions are required to make the cells correspond to well-posed problems. These variables are often called state variables, and prognostic variables in meteorology.

    2. Transfers which are determined by constraint equations such as:

      \begin{displaymath}
\varphi(t) = f(\eta(t),\varphi(t))
\end{displaymath}

      These equations are often called algebraic equations, and in meteorology diagnostic equations.

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2 Linearization and discretization in the TEF

    The relations between sub-systems is excessively difficult to exhibit when having to cope with non-linear system. In the TEF, the TLS (Tangent Linear System) is constructed along the trajectory. One considers the system over a small portion along the trajectory, say between $t$ and $t + \delta t$. The variation $\delta \eta$ of $\eta$ and $\delta \varphi$ of $\varphi$ is obtained through a Padé approximation of the state-transition matrix. The final form of the algebraic system is closed to the classical Crank-Nicolson scheme:


    \begin{displaymath}\pmatrix{A & B\cr
-C^+ & I-D\cr} \pmatrix{\delta \eta\cr
\delta \varphi\cr} = \pmatrix{\Gamma\cr
\Omega\cr}\end{displaymath}

    The blocks appearing in the Jacobian matrix are constructed with partial derivative of $f$ and $g$, and with $\delta t$. From this system the elimination of $\delta \eta$ leads to another formulation giving the coupling between transfers, and allows for the $\delta \varphi$ computation. The $\delta \varphi$ value is then substitued in $\delta \eta$ to complete the time-step solving process.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. Miniker model programming

    Miniker works by combining the model specification code given by the user and other source files provided in the package. The code is assembled, preprocessed, compiled, linked and the resulting program can be run to produce the model trajectory and dynamic analysis.

    The code provided in the package contains a principal program, some usefull subroutines and pieces of code called sequences combined with the different codes. Among these sequences some hold the code describing the model and are to be written by the user (sequences are similar to Fortran include files).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.1 General structure of the code

    The sequences used to enter model description hold the mathematical formulae for each cell and transfer component, dedicated derived computations, and time-step steering. During the code generation stage, cmz directives are preprocessed, then the user pseudo-Fortran instructions are translated by mortran using macros designed to generate in particular all Fortran instructions that compute the Jacobian matrices used in TEF modelling.

    The sequence ‘zinit’ contains the mathematical formulation of the model (see section Entering model equation and parameters). Another sequence, ‘zsteer’, is merged at the end of the time step advance of the simulation, where the user can monitor the time step values and printing levels, and perform particular computations etc. (see section Executing code at the end of each time step).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2 Miniker programming illustrated

    The general TEF system writes:

    \begin{displaymath}\eqalign{\partial_t \eta (t) &= g(\eta(t),\varphi(t))\cr
\varphi(t) &= f(\eta(t),\varphi(t))\cr
}\end{displaymath}

    To illustrate the model description in Miniker a simple predator-prey model of Lotka-Volterra is used. This model can be written in the following TEF form:


    \begin{displaymath}\left\{\eqalign{\partial_t \eta _{prey} &= a \eta _{prey} - a...
... \eta _{pred} &= -c \eta _{pred} + c \varphi _{meet}\cr}\right.\end{displaymath}


    \begin{displaymath}\varphi _{meet} = \eta _{prey}\eta _{pred}\end{displaymath}

    with two cell equations, i.e. state evolution of the prey and predator groups, and one transfer accounting for the meeting of individuals of different group.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2.1 All you need to know about mortran and cmz directives

    The first stage of code generation consists in cmz directives preprocessing. Cmz directives are used for conditional selection of features, and sequence inclusion. At that point you don’t need to know anything about these directives. They are only usefull if you want to take advantage of advanced features (see section Programming with cmz directives).

    The code in sequences is written in Mortran and the second stage of code generation consists in mortran macro expansion. The mortran language is described in its own manual, here we only explain the very basics which is all you need to know to use Miniker. Mortran basic instructions are almost Fortran, the differences are the following:

    • The code is free-form, and each statement should end with a semi-colon ;.
    • Comments may be introduced by an exclamation mark ! at the beginning of a line, or appear within double quotes " in a single line.
    • It is possible to use blocs, for do or if statement for example, and they are enclosed within brackets ‘<’ and ‘>’. To be in the safe side, a semi-colon ; should be added after a closng bracket >.

    The following fictious code is legal mortran:

     
    real 
      param;
    param = 3.; ff(1) = ff(3)**eta(1);       "a comment"                 
    ! a line comment
    do inode=1,n_node <eta_move(inode)=0.01; eta_speed(inode)=0.0;>;
    

    Thanks to mortran the model code is very simply specified, as you’ll see next.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2.2 Entering model equation and parameters

    The model equation and parameters and some Miniker parameters are entered in the ‘zinit’ sequence. The whole layout of the model is given before detailing the keywords.

     
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Parameters           
    !%%%%%%%%%%%%%%%%%%%%%%
      real apar,bpar;        "optional Fortran type declaration"
    
    ! required parameters
         dt=.01;             "initial time-step"
         nstep=10 000;       "number of iterations along the trajectory"
         time=0.;            "time initialisation "
    
    ! model parameters            
         apar = 1.5;             
         cpar = 0.7;          
                                                      
    ! misceallaneous parameters
         modzprint = 1000;    "printouts frequency" 
    
    print*,'***************************************';
    print*,'Lotka-Volterra model with parameters as:';
    z_pr: apar,bpar;
    print*,'***************************************';
    
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Transfer definition
    !%%%%%%%%%%%%%%%%%%%%%%
    ! rencontre (meeting)
    set_Phi
    < var: ff_interact, fun: f_interact = eta_prey*eta_pred;
    >;
    
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Cell definition
    !%%%%%%%%%%%%%%%%%%%%%%
    
    set_eta
    < var: eta_prey, fun: deta_prey =   apar*eta_prey - apar*ff_interact;
      var: eta_pred, fun: deta_pred = - cpar*eta_pred + cpar*ff_interact;
    >;
    
    
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Initial states
    !%%%%%%%%%%%%%%%%%%%%%%
         eta_prey = 1.;
         eta_pred = 1.;
    ;
        OPEN(50,FILE='title.tex',STATUS='UNKNOWN');   "title file"
        write(50,5000) apar,cpar;                     
    5000;format('Lotka-Volterra par:',2F4.1);
    

    Variables and model parameters

    The following variables are mandatory:

    dt

    The time step.

    time

    Model time initialisation.

    nstep

    Number of iterations along the trajectory.

    There are no other mandatory variables. Some optional variables are used to monitor the printout and ouput of results of the code. As an example, the variable modzprint is used to set the frequency of the printout of the model matrix and vectors during the run (see section Controlling the printout and data output).

    User’s defined variable and Fortran or Mortran instructions can always be added for intermediate calculus. To avoid conflict with the variables of the Miniker code, the rule is that a users symbol must not have characters ‘o’ in the first two symbol characters.

    In the predator-prey example there are two model parameters. The fortran variables are called here apar for $a$ and cpar for $c$. If a Fortan type definition is needed, it should be set at the very beginning of ‘zinit’. The predator-prey code variable initializations finally reads

     
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Parameters         
    !%%%%%%%%%%%%%%%%%%%%%%
      real apar,bpar;        "optional Fortran type declaration"
    
         dt=.01;           
         nstep=10 000;    
         time=0.;            
    
    ! model parameters
         apar = 1.5;           
         cpar = 0.7;                                                            
    
         modzprint = 1000;  
    

    Model equations

    The model equations for cells and model equations for transferts are entered in two mortran blocks, one for the transferts, the other for the cell components. The model equations for cells are entered into a set_eta block, and the transfer equations are entered into a set_phi block.

    In each block the couples variable-function are specified. For transfers the function defines the transfer itself while for cells the function describes the cell evolution. The variable is specified with var:, the function is defined with fun:.

    In the case of the predator-prey model, the transfer variable associated with $\varphi_{meet}$ could be called ff_interact and the transfer definition would be given by:

     
    set_Phi
    < var: ff_interact, fun: f_interact = eta_prey*eta_pred;
    >;
    

    The two cell equations of the predator-prey model, with name eta_prey for the prey ($\eta_{prey}$) and eta_pred for the predator ($\eta_{pred}$) are:

     
    set_eta
    < var: eta_prey, fun: deta_prey =   apar*eta_prey - apar*ff_interact;
      var: eta_pred, fun: deta_pred = - cpar*eta_pred + cpar*ff_interact;
    >;
    

    The ‘;’ at the end of the mortran block is important.

    The whole model equations are setup with:

     
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Transfer definition
    !%%%%%%%%%%%%%%%%%%%%%%
    ! rencontre (meeting)
    set_Phi
    < var: ff_interact, fun: f_interact = eta_prey*eta_pred;
    >;
    
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Cell definition
    !%%%%%%%%%%%%%%%%%%%%%%
    
    set_eta
    < var: eta_prey, fun: deta_prey =   apar*eta_prey - apar*ff_interact;
      var: eta_pred, fun: deta_pred = - cpar*eta_pred + cpar*ff_interact;
    >;
    

    Whenever the user is not concerned with giving a specific name to a function, it is possible to specify the equation only with eqn:. Therefore the user may replace an instruction as:

     
      var: ff_dump,
      fun: f_dump  = - rd*(eta_speed - eta_speed_limiting);
    

    with:

     
       eqn: ff_dump = - rd*(eta_speed - eta_speed_limiting);
    

    In that case, the unnamed function will take the name of the defined variable preceded by the ‘$’ sign: $ff_dump.

    Starting points

    The cells equations require state initial conditions. In some case, the transfers may also need starting points although they are determined from the cell values.

    In the predator-prey model the starting points for cells are:

     
    !     initial state
    !     -------------
         eta_prey = 1.;
         eta_pred = 1.;
    

    When there is a non trivial implicit relationship between the transfers in the model, it may be usefull or even necessary to set some transfers to non-zero values. This difficulty is only relevant for the very first step of the simulation and will be used as a first guess of $\varphi$. The uninitialized transfers having a default compiler-dependant (often zero) value, an initialization to another value may help avoiding singular functions or matrix and ensure convergence in the Newton algorithm used to solve the transfer implicit equation.

    The cell and transfer arrays

    Sometime it is easier to iterate over an array than to use the cell or transfer variable name. This is possible because there is a correspondence between the variable names and the fortran array eta(.) for the cell variables and the fortran array ff(.) for the transfer variables(1).

    The index of the variable is determined by the order of appearance in the variable definition blocks. It is reminded in the output, as explained later (see section Running a simulation and using the output).

    The number of cells is in the integer np variable, and the number of transfer is in the integer mp variable.

    title file

    For some graphics generation, a file with name ‘title.tex’ is required which sets the title. The following instructions take care of that:

     
        OPEN(50,FILE='title.tex',STATUS='UNKNOWN');
        write(50,5000) apar,cpar;                 
    5000;format('Lotka-Volterra par:',2F4.1);
    
        close(50);
    

    In that case the parameter values are written down, to differenciate between different runs. This step is in general not needed.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3 Setting and running a model

    In this section it is assumed that a programming environment has been properly setup. This environment may use either cmz or make to drive the preprocessing and compilation. You can skip the part related with the environment you don’t intend to use.

    For instructions regarding the installation, see Installation.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3.1 Setup a model and compile with cmz

    The user defined sequences are ‘KEEP’ in the cmz world. The most common organization is to have a cmz file in a subdirectory of the directory containing the ‘mini_ker.cmz’ cmz file. In this cmz file there should be a ‘PATCH’ called ‘zinproc’ with the KEEPs within the patch. The KEEP must be called ‘$zinit’.

    From within cmz in the directory of your model the source extraction, compilation and linking will be triggered by a mod command. This macro uses the ‘selseq.kumac’ information to find the ‘mini_ker.cmz’ cmz file. mod shall create a directory with the same name than the cmz file, ‘mymodel/’ in our example. In this directory there is another directory ‘cfs/’ containing the sources extracted from the cmz file.

    The file ‘mymodel_o.tmp’ contains all the mortran code generated by cmz with the sequences substituted, including the ‘$zinit’. The fortran produced by the preprocessing and splitting of this file is in files with the traditional ‘.f’ suffix. The principal program is in ‘principal.f’. An efficient way of getting familiar with mini_ker methods is looking at the ‘mymodel_o.tmp’ where all sequences and main Mortran instructions are gathered. Symbolic derivation is noted as F_D(expression)(/variable), and the resulting Fortran code is in ‘principal.f’.

    mod also triggers compilation and linking. The object files are in the same ‘cfs/’ directory and the executable is in the ‘mymodel/’ directory, with name ‘mymodel.exe’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3.2 Setup a model and compile with make

    With make, the sequences are files ending with ‘.mti’ (for mortran include files), called, for example, ‘zinit.mti’. They are included by mortran in other source files. You also need a ‘Makefile’ to drive the compilation of the model.

    If you don’t need additional code or libraries to be linked with your model you have two alternatives.

    1. The simplest alternative is to run the start_miniker script with the model file name as argument. It should copy a ‘zinit.mti’ file ready to be edited and a Makefile ready to compile the model. For the predator prey model, for example, you could run
       
      $ start_miniker predator
      
    2. Otherwise you can copy the Makefile from ‘template/Makefile’ in the directory containing the sequences. You should then change the compiled model file name, by changing the value of the model_file_name variable to the name of your choice in the Makefile. It is set to ‘mymodel’ in the template. For the predator-prey model, it could be set like
       
      model_file_name = predator
      

      If you want the executable model file to be built in another directory, you could set

       
      model_file_name = some_dir/predator
      

      The other items set in the default Makefile should be right.

    The preprocessing and the compilation are launched with

     
    make all
    

    The mortran files are generated by the cmz directive preprocessor from files found in the package source directories. The mortran files end with ‘.mtn’ for the main files and ‘.mti’ for include files. They are output in the current directory. The mortran preprocessor then preprocess these mortran files and includes the sequences. The resulting fortran code is also in the current directory, in files with a ‘.f’ suffix. Some fortran files ending with ‘.F’ may also be created by the cmz directive preprocessor. The object files resulting from the compilation of all the fortran files (generated from mortran or directly from fortran files) are there too.

    In case you want to override the default sequences or a subroutine file you just have to create it in your working directory along with the ‘zinit.mti’. For example you could want to create or modify a ‘zsteer.mti’ file (see section Executing code at the end of each time step), a ‘zcmd_law.mti’ file (see section Control laws), a ‘monitor.f’ file (see section Turning the model into a subroutine) to take advantage of features presented later in this manual.

    More in-depth discussion of using make to run Miniker is covered in Advanced use of Miniker with make. For example it is also possible to create files that are to be preprocessed by the cmz directive preprocessor and separate source files and generated files. This advanced use is more precisely covered in Programming with cmz directives.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3.3 Running a simulation and using the output

    Once compiled the model is ready to run, it only has to be executed. On standard output informations about the states, transfers, tangent linear system and other jacobian matrices are printed. For example the predator-prey model could be executed with:

     
    ./predator > result.lis
    

    The correspondance between the symbolic variables and the basic vectors and functions are printed at run time:

     
      ---------------- Informing on Phi definition -----------------
        Var-name,           Function-name,       index in ff vector
                 ff_interact              f_interact  1
      ----------------------------------------------------
    
      --------------- Informing on Eta definition ------------------
       Var-name,           Function-name,       index in eta vector
                    eta_prey               deta_prey  1
                    eta_pred               deta_pred  2
    

    A summary of the model equations are in ‘Model.hlp’ file. For the same example:

     
    ======================= set_Phi                                                                
                                                                                             
        1 ff_interact f_interact           eta_pray*eta_pred
    ======================= set_Eta                                                                
                                                                                             
        1 eta_pray    deta_pray            apar*eta_pray-apar*ff_interact
        2 eta_pred    deta_pred            -cpar*eta_pred+cpar*ff_interact
    

    when other general functions are specified with f_set, it can appear also in the same help file when replaced by fun_set.

    As far as possible, all data printed in the listing are associated with a name related to a variable. Here is an extract:

     
     Gamma :-8.19100E-02-1.42151E-01 3.87150E-02
             eta_courant eta_T_czcx  eta_T_sz   
           ------------------------------------------------
     Omega : 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00
             courant_L   T_czcx      Psi_Tczc    Psi_Tsz 
           ------------------------------------------------
    

    for the two known vectors of the system, and:

     
     >ker : Matrice de couplage       4 4 4 4
    courant_L Raw(1,j=1,4):   1.000     -9.9010E-03  0.000       0.000    
    T_czcx    Raw(2,j=1,4): -2.7972E-02   1.000      0.000      9.9900E-04
    Psi_Tczcx Raw(3,j=1,4):  0.1605      9.7359E-02  1.000     -5.7321E-03
    Psi_Tsz   Raw(4,j=1,4):   0.000     -0.1376     5.7225E-03   1.000    
              Var-Name      courant_L   T_czcx      Psi_Tczc    Psi_Tsz 
              ----------------------------------------------------------
    

    where the couplage (coupling matrix) is given that corresponds to the matrix coupling the four transfer components after $\delta \eta$ has been eliminated from system. It is computed in the subprogram ‘oker’ (for kernel) which solves the system.

    Basic results are output in a set of ‘.data’ files. The first line (or two lines) describes the column with a ‘#’ character used to mark the lines as comments (for gnuplot for example). In the ‘.data’ files, the data are simply separated with spaces. Each data file has the time variable values as first column. (2). Following columns give the values of eta(.) in ‘res.data’, dEta(.) in ‘dres.data’ – the step by step variation of eta(.) – and ff(.) in ‘tr.data’.

    Along the simulation the TEF Jacobian matrices are computed. A transfer variables elimination process also leads to the definition of the classical state advance matrix of the system (the corresponding array is aspha(.,.) in the code). This matrix is output in the file ‘aspha.data’ that is used to post-run dynamics analyses. The matrix columns are written column wise on each record. See section Stability analysis of fastest modes. See section Generalized tangent linear system analysis. It is not used in the solving process.

    Other ‘.data’ files will be described later.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3.4 Doing graphics

    Since the data are simply separated with spaces, and comment lines begin with ‘#’, the files can be vizualised with many programs. With gnuplot, for example, to plot eta(n), the gnuplot statement could be:

     
    plot "res.data" using 1:(n+1)
    

    The similar one for ff(n):

     
    plot "tr.data" using 1:(n+1)
    

    For people using PAW, the CERN graphical computer code, Miniker prepares kumacs that allow to read process the ‘.data’ files in the form of n-tuples (see the PAW manual for more information). In that cas, the flag sel paw has to be gievn in the ‘selsequ.kumac’. The generated n-tuples are ready to use only for vector dimension of at most 10 (including the variable time). These kumacs are overwritten each time the model is run. Usaually, gnuplot has to be preferred, but when using surfaces and histograms, PAW is better. The ‘gains.f’ (and ‘go.xqt’ is provided as an example in the Miniker files.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4 Controlling the run

    It is possible to add code that will be executed at the end of each time step. It is also possible to specify which time step leads to a printout on standard output. For maximal control, the code running te model may be turned into a subroutine to be called from another fortran (or C) program, this possibility is covered in Calling the model code.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4.1 Executing code at the end of each time step

    The code in the sequence ‘zsteer’ is executed at the end of each time step. It is possible to change the time step length (variable dt) verify that the non linearity are not too big, or perform discontinuous modifications of the states. One available variable res might be usefull for time step monitoring. At the end of the time step, as soon as $\varphi$ has been computed, a numerical test is applied on a pseudo relative quadratic residual between $\varphi=f(\eta(t-dt)+d\varphi$ ( ffl), where $d\varphi$ is given by the system resolution in ker,and $\varphi=f(\eta),\varphi)$, Fortran variable (ff):

    ! ========================================================
    ! test linearite ffl - ff
    ! ========================================================
    if (istep.gt.1)
    < res=0.; <io=1,m; res = res +(ffl(io)-ff(io))**2/max(one,ff(io)*ff(io)); >;
      if (res .gt. TOL_FFL)
      < print*,'*** pb linearite : res > TOL_FFL a istep',istep,res,' > ',TOL_FFL;
        do io=1,m < z_pr: io,ff(io),ff(io)-ffl(io); >;
      >;
    >;
    

    This test hence applies only for non linearities in tranfer models. Nevertheless, res might be usefull to monitor the time step dt in ZSTEER and eventually go backward one step (goto :ReDoStep:). This can more appropriatly be coded in the (empty in default case) sequence zstep, inserted just before time-advancing states and time variables in ‘principal’.

    It is also possible to fix the value of the criterium TOL_FFL in ‘zinit’ different from its default value of $10^{-3}$ – independent of the Fortran precision.

    Many other variables are available, including

    istep

    The step number;

    couplage(.)

    The TEF coupling matrix between transfers;

    H

    The Jacobian matrix corresponding with:

    \begin{displaymath}\partial_{\eta} g(\eta(t),\varphi(t));
\end{displaymath}

    Bb

    The Jacobian matrix corresponding with:

    \begin{displaymath}\partial_{\varphi} g(\eta(t),\varphi(t));
\end{displaymath}

    Bt

    The Jacobian matrix corresponding with:

    \begin{displaymath}\partial_{\eta} f(\eta(t),\varphi(t));
\end{displaymath}

    D

    The Jacobian matrix corresponding with:

    \begin{displaymath}\partial_{\varphi} f(\eta(t),\varphi(t));
\end{displaymath}

    aspha

    The state advance matrix;

    dneta
    dphi

    the variable increments;

    One should be aware of that the linearity test concerns the preceding step. We have yet no example of managing the time-step.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4.2 Controlling the printout and data output

    The printout on standard output is performed if the variable zprint of type logical is true. Therefore it is possible to control this printout by setting zprint false or true. For example the following code, in sequence ‘zsteer’, triggers printing for every modzprint time step and the two following time steps:

     
    ZPRINT = mod(istep+1,modzprint).eq.0;
    Zprint = zprint .or. mod(istep+1,modzprint).eq.1;
    Zprint = zprint .or. mod(istep+1,modzprint).eq.2;
    

    The data output to ‘.data’ files described in Running a simulation and using the output is performed if the logical variable zout is true. For example the following code, in ‘zsteer’, triggers output to ‘.data’ files every modzout step.

     
    Zout = mod(istep,modzout).eq.0;
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. Advanced Miniker programming


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.1 Overview of additional features setting

    It is possible to enable some features by selecting which code should be part of the principal program. Each of these optionnal features are associated with a select flag. For example double precision is used instead of simple precision with the ‘double’ select flag, the model is a subroutine with the select flag ‘monitor’, the Kalman filter code is set with ‘kalman’ and the 1D gridded model capabilities are associated with ‘grid1d’. To select a given feature the cmz statement sel select_flag should be written down in the ‘selseq.kumac’ found in the model directory. With make either the corresponding variable should be set to 1 or it should be added to the SEL make variable, depending on the feature.

    Other features don’t need different or additional code to be used. Most of the features are enabled by setting specific logical variables to ‘.true.’. This is the case for zback for the adjoint model, zcommand if the command is in a file and zlaw if it is a function and zkalman for the Kalman filter. These select and logical flags are described in the corresponding sections.

    In cmz an alternative of writing select flags to ‘selseq.kumac’ is to drive the compilation with smod sel_flag. In that case the sel_flag is selected and the files and executable goes to a directory named ‘sel_flag’.

    The select flags are taken into account during cmz directives preprocessing. Therefore you have the possibility to use these flags to conditionnaly include pieces of code. In most cases you don’t need to include code conditionally yourself though, but if you want to, this is covered in Programming with cmz directives.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.2 Calling the model code

    When the model code is a subroutine, it can be called from another fortran program unit (or another program), and the model will be run each time the subroutine is called. This technique could be used, for example to perform optimization (see section Adjoint model and optimisation with Miniker), or to run the model with different parameters.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.2.1 Turning the model into a subroutine

    With cmz, one has to do a

     
    sel monitor
    

    in the ‘selseq.kumac’ file and create the KEEP that call the model code. See section Overview of additional features setting.

    With make ‘monitor’ should be added to the SEL variable in the ‘Makefile’, for example:

     
    SEL = monitor
    

    A file that call the principal subroutine should also be written, using the prefered language of the user. The additional object files should then be linked with the Miniker objects. To that aim they may be added to the miniker_user_objects variable.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.2.2 Calling the model subroutine

    The model subroutine is called ‘principal’ and is called with the following arguments:

    Subroutine: principal (Cost, ncall, integer_flag, file_suffix, info, idxerror)

    Where Cost is a real number, real or double precision, and is set by the principal subroutine. It holds the value of the cost function if such function has been defined (the use and setting of a cost function is covered later, see Cost function coding and adjoint modeling). ncall is an integer which corresponds with the number of call to principal done so far, it should be initialized to 0 and its value should not be changed, as it is changed in the principal subroutine. integer_flag is an integer that can be set by the user to be accessed in the principal subroutine. For example its value could be used to set some flags in the ‘zinit’ sequence. file_suffix is a character string, that is suffixed to the output files names instead of ‘.data’. If the first character is the null character ‘char(0)’, the default suffix, ‘.data’ is appended. info and idxerror are integer used for error reporting. idxerror value is 0 if there was no error. It is negative for an alert, positive for a very serious error. The precise value determines where the error occured. info is an integer holding more precise information about the error. It is usually the information value from lapack. The precise meaning of these error codes is in tab:error_codes.

    Source of error or warninginfoidxerror
    state matrix inversion in kerinversion1
    time advance system resolution in kersystem2
    transfer propagator, $(I-D)$ inversioninversion3
    kalman analysis state matrix advance in phase space, $(I-D)$ inversioninversion21
    kalman analysis variance covariance matrix non positiveCholeski22
    kalman analysis error matrix inversioninversion23
    kalman error matrix advancesystem24
    transfers determination linearity problem for transfers-1
    transerts determination Newton D_loop does not converge-2

    table 3.1: Meaning of error codes returned by principal.

    In general more information than the provided arguments has to be passed to the principal subroutine, in that case a common block, to be written in the ‘zinit’ sequence can be used.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.3 Describing 1D gridded model

    Specific macros have been built that allow generic description of 1D gridded models. Because of the necessity of defining left and right limiting conditions, the models are partitionned in three groups for cell and transfer components. In the following example, a chain of masselottes linked by springs and dumps is bounded to a wall on the left, and open at right. The TEF formulation of the problem is written in the phase space (position-shift, velocity) for node $k$, with bounding conditions:

    \begin{displaymath}\left\{\eqalign{\partial_t \eta _{k} ^{pos} &= \eta _{k} ^{ve...
... + \varphi _{k} ^{dmp}-\varphi _{k+1} ^{dmp})\,/m_k \cr}\right.\end{displaymath}


    \begin{displaymath}\left\{\eqalign{
\varphi_k ^{spr} &= -k_k (\eta _{k} ^{pos}- ...
...spr} &= -d_k (\eta _{k} ^{vel}- \eta _{k-1} ^{vel})
\cr}\right.\end{displaymath}


    \begin{displaymath}\left\{\eqalign{\eta ^{pos}_{0} &= 0\cr
\eta ^{vel}_{0} &= 0\...
...arphi ^{spr}_{N+1} &= 0\cr
\varphi ^{dmp}_{N+1} &= 0\cr}\right.\end{displaymath}

    where $m_k$ is the mass of node $k$, $r_k$ and $d_k$ the rigidity of springs and dumping coefficients. There are $N$ nodes in the grid, from 1 to $N$, and two nodes outside of the grid, a limiting node 0, and a limiting node $N+1$. The limiting node corresponding with node 0 is called the down node, while the limiting node corresponding with node $N+1$ is called the up node. Other models not part of the 1D grid may be added if any.

    To enable 1D gridded models, one should set the select flag ‘grid1d’. In cmz it is achieved setting the select flag in ‘selseq.kumac’, like

     
    sel grid1d
    

    With make, the SEL variable should contain grid1d. For example to select grid1d and monitor, it could be

     
    SEL = grid1d,monitor
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.3.1 Setting dimensions for 1D gridded model

    In that case the number of nodes, the number of states and tranferts per node, and the number of limiting transfers and states are required. These dimensions has to be entered in the ‘DimEtaPhi’ sequence. The parameters for cells are

    n_node

    Number of cell nodes in the 1D grid.

    n_dwn

    Number of limiting cells with index -1, i.e. number of cells in the limiting down node.

    n_up

    Number of limiting cells with index +1, i.e. number of cells in the limiting up node.

    n_mult

    Number of cells in each node (multiplicity).

    The parameters for transfers, are similarly m_node, m_dwn, m_up, m_mult. The layout of their declaration should be respected as the precompiler matches the line. Also this procedure is tedious, it should be selected for debuging processes (use the flag sel dimetaphi in “selsequ.kumac”. Otherwise, the dimensioning sequence will be automaticaly generated, which is smart but can lead to diffculty in interpreting syntax errors. Once a model is correctly entred, turn off the sel flag and further modifications will automatically generate the proper dimensions. The correctness of dimensionning should nevertheless always be checked in principal.f, where you can also check that null valued parameters as lp, mobs, nxp will suppress parts of the code - this is signaled as Fortran comment cards.

    In our example, there are three grids of cell and transfer variables (n_node=m_node=3). There are two cells and two transfers in each node (n_mult=2 and m_mult=2). There is no limiting condition for the states in the down node therefore n_up=0. There is no transfer for the first limiting node, and therefore m_dwn=0. There are two states in the limiting node 0, the down node, n_dwn=2, and two transfers in the limiting last node the node up, and m_up=2:

     
    ! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    ! nodes parameters, and Limiting Conditions (Low and High)
    ! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
          parameter (n_node=3,n_dwn=2,n_up=0,n_mult=2);
          parameter (m_node=3,m_dwn=0,m_up=2,m_mult=2);
    ! ________________________________________________________
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.3.2 1D gridded Model coding

    The model code and parameters go in the ‘zinit’ sequence.

    Parameters

    A value for the Miniker parameters and the model parameters should be given in ‘zinit’, in our example we have

     
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Parameters
    !%%%%%%%%%%%%%%%%%%%%%%
    real rk(n_node),rd(n_node),rmassm1(n_node);
    
    data rk/n_node*1./;
    data rd/n_node*0.1/;
    data rmassm1/n_node*1./;
         dt=.01;
         nstep=5 000;
         modzprint = 1000;
         time=0.;
    

    Limiting conditions

    There are four mortran blocks for node and up and down, both for states and transfers:

    set_dwn_eta

    down node cells

    set_up_eta

    up node cells

    set_dwn_phi

    down node transfers

    set_up_phi

    up node transfers

    The following scheme illustrates the example:

     
    !%%%%%%%%%%%%%%%%%%%%%%%%%%================================================
    ! Maillage convention inode
    !%%%%%%%%%%%%%%%%%%%%%%%%%%                                 Open ended
    !(2 Down    Phi    Eta                         (n_node)
    ! Eta)  \|       .-----.       .-----.          .-----.        /
    ! wall  \|-\/\/\-|     |-\/\/\-|     |  . . .  -|     |-\/\/\- |dummy
    !  pos  \|--***--|  1  |--***--|  2  |  . . .  -|  n  |--***-- |Phis
    ! speed \|   1   |_____|   2   |_____|      n   |_____|  n+1   \(2 Up Phi)
    !
    

    Two states are associated with the down node, they correspond to the position and speed of the wall. As the wall don’t move these states are initialized to be 0, and the cells are stationnary cells, therefore these values remain 0.

     
    ! Down cells (wall)
    ! -----------------
    eta_pos_wall = 0; eta_speed_wall = 0.;
    
    set_dwn_eta
    < var: eta_pos_wall,  fun: deta_pos_wall  = 0.;
      var: eta_speed_wall, fun: deta_speed_wall= 0.;
    >;
    

    There are 2 limiting transfers in the up node. They correspond with an open end and are therefore set to 0.

     
    ! limiting Transfers : dummy ones
    ! -------------------------------
    set_Up_Phi
    < var:ff_dummy_1, fun: f_dummy_1=0.;
      var:ff_dummy_2, fun: f_dummy_2=0.;
    >;
    

    Starting points

    The cell node state values are initialized. They are in an array indexed by the inode variable. In the example the variable corresponding with position is eta_move and the variable corresponding with speed is eta_speed. Their initial values are set with the following mortran code

     
    !---------------
    ! Initialisation
    !---------------
    ;
    do inode=1,n_node <eta_move(inode)=0.01; eta_speed(inode)=0.0;>;
    

    If any transfer needs to be given a first-guess value, this is also done using inode as the node index.

    Grid node equations

    Each node is associated with an index inode. It allows to refer to the preceding node, with inode-1 and the following node inode+1. The node states are declared in set_node_Eta block and the transfers are in set_node_Phi blocks.

    In the example, the cells are declared with

     
    ! node cells
    ! ----------
    ;
    set_node_Eta
    < var: eta_move(inode),  fun: deta_move(inode) = eta_speed(inode);
      var: eta_speed(inode),
      fun: deta_speed(inode) = rmassm1(inode)
                                 *( - ff_spring(inode+1) + ff_spring(inode)
                                   - ff_dump(inode+1)  + ff_dump(inode)
                                  );
    >;
    

    Note that the inode is dummy in the var: definition and can as well be written as: var: eta_move(.).

    The transfers are (ff_spring corresponds with springs and ff_dump with dumps):

     
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Transfer definition
    !%%%%%%%%%%%%%%%%%%%%%%
    ! node transfers
    ! --------------
    ! convention de signe spring : comprime:= +
    set_node_Phi
    < var: ff_spring(.),
      fun:
       f_spring(inode)= -rk(inode)*(eta_move(inode) - eta_move(inode-1));
      var: ff_dump(.),
      fun:
       f_dump(inode)  = -rd(inode)*(eta_speed(inode) - eta_speed(inode-1));
    >;
    

    The limiting states and transfers are associated with the states or transfers with index inode+1 or inode-1 appearing in node cell and transfer equations (inode-1 for down limiting conditions and inode+1 for up limiting conditions) in their order of appearance. In our example, in the eta_speed state node equation ff_spring(inode+1) appears before ff_dump(inode+1) and is therefore associated with ff_dummy_1 while ff_dump(inode+1) is associated with the ff_dummy_2 limiting transfer, as ff_dummy_1 appears before ff_dummy_2 in the limiting up transfers definitions. Verification of the grid index coherence should be eased with the following help printed in the listing header:

     
    
    
    
      --------------- Informing on Dwn Eta definition ---------------
     Var-name,            Function-name, index in eta vector
             eta_pos_wall        deta_pos_wall  1 [
           eta_speed_wall      deta_speed_wall  2 [
    
      -------------- Informing on Eta Nodes definition --------------
     Var-name,     Function, k2index of (inode: 0 [ 1,...n_node ] n_node+1)
                eta_move           deta_move    1 [   3 ...   7 ]   9
               eta_speed          deta_speed    2 [   4 ...   8 ]  10
    
      ---------------- Informing on Up  Phi  definition -------------
     Var-name,             Function-name, index in ff vector
              ff_dummy_1           f_dummy_1 ]    7
              ff_dummy_2           f_dummy_2 ]    8
             ff_move_sum          f_move_sum ]    9
            ff_speed_sum         f_speed_sum ]   10
      ----------------------------------------------------
    
     -------------- Informing on Phi Nodes definition ---------------
     Var-name,     Function, k2index of (inode: 0 [ 1,...m_node ] m_node+1)
               ff_spring            f_spring   -1 [   1 ...   5 ]   7
                 ff_dump              f_dump    0 [   2 ...   6 ]   8
      ----------------------------------------------------
    

    All variable names and functions are free but has to be different. Any particular node-attached variable $k$ is referred to as: ‘(inode:k)’, where $k$ has to be a Fortran expression allowed in arguments. The symbol ‘inode’ is reserved. As usual other Fortran instructions can be written within the Mortran block ‘< >’ of each set_ block.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.4 Double precision

    The default for real variables is the real Fortran type. It is possible to use double precision instead. In that case all the occurences of ‘real ’ in mortran code is substituted with ‘double precision ’ at precompilation stage, and the Lapack subroutine names are replaced by the double precision names. Eventual users’declaration of complex  Fortran variables is also changed to double complex .

    This feature is turned on by sel double in ‘selseq.kumac’ with cmz and double = 1 in the ‘Makefile’ with make.

    In order for the model to run as well in double as in simple precision, some care should be taken to use the generic intrinsic functions, like sin and not dsin. No numerical constant should be passed directly to subroutines or functions, but instead a variable with the right type should be used to hold the constant value, taking advantage of the implicit casts to the variable type.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.5 Partial Derivatives

    The partial derivative rules are included in a Mortran macro series in ‘Derive_mac’ of Miniker files. When using an anusual function, one should verify that the corersponding rules are in that file. It is easy to understand and add new rules in analogy with the already existing ones.

    For instance, suppose one wants to use the intrinsic Fortran function abs(). Its derivatives uses the other function sign() this way:

     
     &'(ABS(#))(/#)' = '((#1)(/#2)*SIGN(1.,#1))'
    

    In such cases when one is adding a new rule, it is important to use the generic function names only (i.e. sin not dsin), because when compilating Miniker in the double precision version, or complex version, the generic names will correctly handle the different variable types - which is not the case when coding with specific function names.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.5.1 Derivating a power function

    Partial derivative of a function in exponent is not secure in its Fortran form g(x,y)**(f(y)). It should be replaced by power(g,f) of the Miniker ‘mathlib’, or by the explicit form exp(f(y)*log(g(x,y))).

    Its derivative will have the following form:


    \begin{displaymath}\eqalign{\partial_x f^g &= g f^{g-1}\partial_x f + f^g \log f\partial_x g\cr
&= f^{g-1}(g\partial_x f + f\partial_x g)\cr}\end{displaymath}

    and is in the macros list already defined in: ‘DERIVE_MAC’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.6 Rule of programming non continuous models

    Some models may originally be non continuous, as the ones using a Fortran instruction IF. Some may use implicitly a step function on a variable. In such cases, the model has to be set in a derivable form, and use a “smooth step” instead. One should be aware of that this apparently mathematical treatment currently indeed leads to a physical question about the macroscopic form of a physical law. At a macroscipic level, a step function is usually a nonsense. Taking the example of phase-change, a fluid volume does not change phase at once, and a “smooth change of state” is a correct macroscopic model.

    Miniker provides with the smooth step function Heavyside(3) in the Miniker ‘mathlib’:

     
            Delta = -1."K";
            A_Ice =  heavyside("in:" (T_K-Tf), Delta, "out:" dAIce_dT);
    

    in this example, Tf is the ice fusion-temperature, A_ice gives the ice-fraction of the mesh-volume of water at temperature T_k. The smooth-step function is a quasi hyperbolic tangent function of $x/\Delta$, normalised from 0 to 1, with a maximum slope of 2.5, see figure heavy.

    heavyside

    Figure 3.1: Heaviside function and derivative

    For Mortran to be able to symbolicaly compute the partial derivarives, the rule is in the table of macros as:

     
    &'(HEAVYSIDE(#,#,#))(/#)' = '((#1)(/#4)*HEAVYDELTA(#1,#2,#3))'
    

    which uses the Foratn entry point HeavyDelta in the Fortrsan function heavyside.

    Another type of problem arises when coding a var=min(f(x),g(x)) Fortran instruction. In such a case one does not want a derivative and one will code:

     
    var = HeavySide(f(x)-g(x),Delta,dum)*g(x) + (1.-HeavySide(f(x)-g(x),Delta,dum)*f(x);
    

    or equivalently:

     
    var = HeavySide(f(x)-g(x),Delta,dum)*g(x) + HeavySide(g(x)-f(x),-Delta,dum)*f(x);
    

    Warning: the value of the argument Delta is important because it will fix the maximum slope of the function that will appear as a coefficient in the Jacbian matrices.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.7 Parameters

    It is possible to specify some Fortran variables as specific model parameters. Model parameters may be used in sensitivity studies (see section Sensitivity to a parameter) and in the adjoint model (see section Sensitivity of cost function to parameters). Nothing special is done with parameters with Kalman filtering.

    The parameters are fortran variables that should be initialized somewhere in ‘zinit’. For a variable to be considered as a parameter, it should be passed as an argument to the Free_parameters macro. For example if apar and cpar (from the predator example) are to be considered as parameters, Free_parameters should be called with:

     
    Free_parameter: apar, cpar;
    

    When used with grid1d models (see section Describing 1D gridded model) the inode number may appear in parenthesis:

     
    Free_parameter: rd(1), rk(2);
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.8 Observations and data

    Some support for observations and interactions with data is available. The observations are functions of the model variables. They don’t have any action on the model result, but they may (in theory) be observed and measured. The natural use of these observations is to be compared with data that correspond with the values from real measurements. They are used in the Kalman filter (see section Kalman filter).

    The (model) observation vector is noted $\omega$ and the observation function is noted $h$:


    \begin{displaymath}
\omega = h ( \eta , \varphi)
\end{displaymath}


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.8.1 Observations

    The observation functions are set in a set_probe block in the ‘zinit’ sequence.

    For example suppose that, in the predator-prey model, we only have access to the total population of preys and predators, we would have:

     
    set_probe
    < eqn: pop = eta_pred + eta_pray;
    >;
    

    The number of observations is put in the integer variable mobs. The observation vector corresponds with the part of the ff(.) array situated past the regular transferts, ff(mp+.), and is output in the file ‘obs.data’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.8.2 Data

    Currently this code is only used if the Kalman code is activated. This may be changed in the future.

    The convention for data is that whenever some data are available, the logical variable zgetobs should be set to ‘.true.’. And the vobs(.) vector should be filled with the data values. This vector has the same dimension than the observation vector and each coordinate is meant to correspond with one coordinate of the observation vector.

    This feature is turned on by setting the logical variable zdata to ‘.true.’, and the zgetobs flag is typically set in the ‘zsteer’ sequence (see section Executing code at the end of each time step). Every instant data are available (zgetobs is true) the observations are written to the file ‘data.data’. With the Kalman filter more informations are output to the ‘data.data’ file, see Kalman filter results.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.9 Entering model size explicitely

    It is possible to enter the model dimensions explicitely, instead of generating them automatically, as it was done previously. This feature is turned on by sel dimetaphi in ‘selseq.kumac’ with cmz and dimetaphi added to the SEL variable in the ‘Makefile’ with make.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.9.1 The explicit size sequence

    The dimension of the model is entered in the sequence ‘dimetaphi’, using the fortran parameter np for eta(.) and mp for ff(.). For the Lotka-Volterra model, we have two cell components and only one transfer.

     
    parameter (np=2,mp=1);
    

    You should not change the layout of the parameter statement as the mortran preprocessor matches the line.

    You also have to provide other parameters even if you don’t have any use for them. If you don’t it will trigger fortran errors. It includes the maxstep parameter that can have any value but 0, lp and mobs that should be 0 in the example, and nxp, nyp and nzp that should also be 0. The layout is the following:

     
    parameter (np=2,mp=1);
    parameter (mobs=0);
    
    parameter (nxp=0,nyp=0,nzp=0);
    parameter (lp=0);
    parameter (maxstep=1);
    

    If there are observations, (see section Observations), the size of the observation vector is set in the ‘dimetaphi’ sequence by the mobs parameter. For example if there is one observation:

     
    parameter (mobs=1);
    

    To specify parameters (see section Parameters), the number of such parameters has to be declared in ‘dimetaphi’ with the parameter lp. Then, if there are two parameters, they are first declared with

     
    parameter (lp=2);
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.9.2 Entering the model equations, with explicit sizes

    When sizes are explicit, another possibility exists for entering the model equations. The use of symbolic names, as described in Model equations is still possible, and it also becomes possible to set directly the equations associated with the eta(.) and ff(.) vectors.

    In case the symbolic names are not used, the model equations for cells and transfers are entered using a mortran macro, f_set(4), setting the eta(.) evolution with deta_tef(.) and the transfer definitions ff(.) with Phi_tef(.).

    Macro: f_set Phi_tef(i) = f(eta(.),ff(.))

    This macro defines the transfer i static equation. f is a fortran expression which may be function of cell state variables, ‘eta(1)’…‘eta(np)’ and transfers ‘ff(1)’…‘ff(mp)’.

    In the case of the predator-prey model, the transfer definition for $\varphi_{meet}$ is:

     
    f_set Phi_tef(1) = eta(1)*eta(2);  
    
    Macro: f_set deta_tef(i) = g(eta(i),ff(.))

    This macro defines the cell state component i time evolution model. g is a expression which may be function of cell state variables, ‘eta(1)’…‘eta(np)’ and transfers ‘ff(1)’…‘ff(mp)’.

    The two cell equations of the predator-prey model are, with index 1 for the prey ($\eta_{prey}$) and index 2 for the predator ($\eta_{pred}$):

     
    f_set  deta_tef(1) = apar*eta(1)-apar*ff(1);
    f_set  deta_tef(2) = - cpar*eta(2) + cpar*ff(1);
    

    The whole model is:

     
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Transfer definition
    !%%%%%%%%%%%%%%%%%%%%%%
    ! rencontres (meeting)
        f_set Phi_tef(1) = eta(1)*eta(2); 
    
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Cell definition
    !%%%%%%%%%%%%%%%%%%%%%%
    ! eta(1) : prey
    ! eta(2) : predator      
    
        f_set  deta_tef(1) = apar*eta(1)-apar*ff(1);
        f_set  deta_tef(2) = - cpar*eta(2) + cpar*ff(1);
    

    The starting points for cells are entered like:

     
    !     initial state
    !     -------------
         eta(1) = 1.;
         eta(2) = 1.;
    

    If there are observations, they are entered as special transferts with index above mp, for example:

     
    f_set Phi_tef(mp+1) = ff(1) ;
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.10 Programming with cmz directives


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.10.1 Cmz directives used with Miniker

    The main feature of cmz directive is to use code conditionnaly for a given select flag. For example when the double precision is selected (see section Double precision) the use of the conditionnal double flag may be required in case there is a different subroutine name for different types. If, for example, the user use the subroutine smysub for simple precision and dmysub for double precision the following code is an example of what could appear in the user code:

    +IF,double
     call dmysub(eta);
    +ELSE
     call smysub(eta);
    +ENDIF
    

    For a complete reference on cmz directives see the appendix Cmz directives reference.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.10.2 Using cmz directives in Miniker

    In cmz the KEEP and DECK have their cmz directives preprocessed as part of the source files extraction. And the +KEEP and +DECK directives are automatically set when creating the KEEP or DECK. With make, files with these directives has to be created within the files that are to be preprocessed by the cmz directives preprocessor.

    To be processed by make, a file that contains cmz directives should have a file suffix corresponding with the language of the resulting file and with the normal file suffix of that language. More precisely ‘cm’ should be added before the normal file suffix and after the ‘.’. Therefore if the resulting file language is associated with a suffix ‘.suf’, the file with cmz directives should have a ‘.cmsuf’ suffix. The tradition is to have a different suffix for main files and include files. To add directories searched for cmfiles (files with cmz directives) they should be added to the CMFDIRS makefile variable, separated by ‘:’.

    Rules for preprocessing of the files are defined in the file ‘Makefile.miniker’ for the file types described in tab:cmfile_suffix:

    languagefile typecmfile suffixsuffixlanguage
    fortranmain/deck.cmf.fftn
    fortran preprocessedmain/deck.cmF.Ff77
    fortran preprocessedinclude/keep.cminc.incf77
    mortranmain/deck.cmmtn.mtnmtn
    mortraninclude/keep.cmmti.mtimtn

    table 3.2: Association between file language, file type, file suffixes and language identifier in cmz directives. A main file is called a deck in cmz and an include file is called a keep.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4. Dynamic analysis of systems in Miniker


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.1 Automatic sensitivity computation

    An obvious advantage of having acces to the Jacobian matrices along the system trajectory concerns automatic sensitivity analyses, as either:

    • the sensitivity of all variables to perturbation in the initial condition of one state variable;
    • the same sensitivities to an initial pulse (or step) on a transfer;
    • the same sensitivities to a series of pulses (or steps) on a transfer;
    • the same for a change in a parameter, eventually during the run;
    • the sensitivity of the matrix of advance in state space to a change in a parameter.

    This is declared in Zinit as:

     
    ! -------------
    ! Sensitivities
    ! -------------
    Sensy_to_var
    < var: eta_pray, pert: INIT;
      var: eta_pred, pert: INIT;
    >;
    

    Each variable at origin of a perturbation is declared as var:, and the type of perturbation in pert:. Here, INIT conditions are only allowed because the two variables are states variables. For transfers, pert: pulse corresponds to an initial pulse, pert: step_resp and pert: step_eff to initial steps, the difference between _resp (response form) and _eff (effect form) concerns the diagonal only of the sensitivity matrix (see Feedback gains in non-linear models).

    Non initial perturbation can also be asked for:

     
      Sensy_to_var
      <
    !*     var: eta_courant_L, pert: init at 100;
    !*     var: ff_T_czcx,     pert: pulse at 100 every 20;
    !*     var: ff_Psi_Tczcx,  pert: step_eff;
    !*     var: ff_Psi_Tczcx,  pert: step_Resp at 10 every 100;
    ! *** premiers tests identiques a lorhcl.ref
        var: ff_courant_L , pert: step_eff;
        var: ff_T_czcx    , pert: step_eff;
        var: ff_Psi_Tczcx , pert: step_eff;
        var: ff_Psi_Tsz   , pert: pulse at 100 every 50;
      >;
    

    In this example taken from ‘lorhcl’, a sensitivity can increase so as to trespass the Fortran capacity, so that each sensitivity vector (matrix column) can be reset at some time-increment at III every JJJ;

    It is noteworthy that these sensitivity analyses are not based on difference between two runs with different initial states or parameter values, but on the formal derivatives of the model. This method is not only numerically robust, but is also rigorously funded as based on the TLS of the model(5).

    If the dimetaphi sequence is built by the users, he should declare the number of perturbing variables as nxp=:

     
          parameter (nxp=np,nyp=0,nzp=0);
    

    here, all state variables are considered as perturbing variables.

    The sensitivity vectors are output in the result files ‘sens.data’ for cells and ‘sigma.data’ for transfers. In those files the first column corresponds again with time, and the other columns are relative sensitivities of the cell states (in ‘sens.data’) and transfers (in ‘sigma.data’) with respect to the initial value of the perturbed state.

    In our predator-prey example, the second column of ‘sens.data’ will contain the derivative of $\eta_1(t)$ with respect to $\eta_1(t=0)$. Drawing the second column of ‘sens.data’ against the first one gives the time evolution of the sensitivity of eta-pred to a change in the initial value of eta-pray. One can check in that it is set to 1 at $t=0$:

     
    #    Sensy_to: eta_pray         3        eta_pred         5       
    # time \\  of: eta_pray     eta_pred     eta_pray     eta_pred    
      0.00000E+00  1.00000E+00  0.00000E+00  0.00000E+00  1.00000E+00
      1.00000E-02  9.90868E-01  1.11905E-02 -1.26414E-02  9.98859E-01
    

    The two last columns are the state sensitivity to a change in initial conditions of the number of predators.

    In the same way, the j+1th column of ‘sigma.data’ will be the derivative of $\phi_{j}(t)$ with respect to $\eta_i(t=0)$. Here:

     
    #    Sensy_to: eta_pray     eta_pred    
    # time \\  of: ff_interact  ff_interact 
      0.00000E+00  1.60683E+00  8.47076E-01
      1.00000E-02  1.59980E+00  8.18164E-01
    

    the unique transfer variable gives rise to two sensitivity columns.

    Sensitivity studies are usefull to assess the predictability properties of the corresponding system.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.1.1 Sensitivity to a parameter

    A forward sensitivity to a parameter will be computed when specified as described in Parameters. For example, suppose that the sensitivity to an initial change in the apar parameter of the predator model is of interest.

    The sensitivity calculs is turned on as a forward parameter specified on the Free_parameter list:

     
    Free_parameter: [fwd: apar, cpar];
    

    The result are in ‘sensp.data’ for cells and ‘sigmap.data’ for transfers.

     
    #    Sensy_to: pi_prandtl       3            4        pi_rayleigh_     6
    # time \\  of: eta_courant_ eta_T_czcx   eta_T_sz     eta_courant_ eta_T
      0.00000E+00  0.00000E+00  0.00000E+00  0.00000E+00  0.00000E+00  0.000
      2.00000E-03 -4.77172E-03 -3.99170E-05  3.55971E-05 -9.94770E-05 -1.004
    

    In the above example from ‘lorhcl’ sensitivity of the three states with respect to an initial change in two parameters are independantly given (first line also numbers the column to easy gnuplot using).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.1.2 Advance matrix sensitivity

    It is possible to look at the sensitivity of the matrix of advance in states space (the matrix aspha) with regard to a parameter. The parameter must be accounted for in the parameter number and be in the parameter list, flagged as the matrix mx parameter, like in

     
    Free_parameter: [mx: apar], cpar;
    

    This feature is associated with a selecting flag, ‘dPi_aspha’. One gets the result in the matrix d_pi_aspha(.,.) of dimension (np,np).

    This matrix may be used to compute other quantities, for example it may be used to compute the sensitivity of the eigenvalues of the state-advance matrix with regard to the [fwd] parameter. These additional computations have to be programmed by the user in ‘zsteer’ with matrices declared and initialized in ‘zinit’. An example is given in the example ‘lorhcl’ provided with the Miniker installation files, following a method proposed by Stephane Blanco.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.2 Adjoint model and optimisation with Miniker

    In the following a possible use of Miniker for optimisation is discussed. More precisely the use of adjoint and control laws in Miniker are presented. Optimisation isn’t the only application of these tools, but it is the most common one. In that case the adjoint may be used to determine the gradient of a functional to perturbations in the control laws, and an optimisation process can use this information to search for the optimum. Another application of the adjoint is to compute the sensitivity of a cost function to parameters (the ones declared in the free_parameters:’ list. Note that the cost function can be sensitive to probe’s variables, even if these are uncoupled with standard variables in the forward calculations; this is the case when minimizing a quadratic distance function between probes (from the model) and the corresponding measurements.

    The code is close transcription of the mathematical calculus described in
    http://www.lmd.jussieu.fr/ZOOM/doc/Adjoint.pdf . It essentialy reverse time and transpose the four Jacobian matrices: states and transfers are saved in array dimensionned with maxstep Fortran parameter.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.2.1 Overview of optimisation with Miniker

    In the proposed method, Miniker is run twice, one time forward and then backward to determine the trajectory and the adjoint model. After that the control laws are modified by a program external to Miniker. The same steps are repeated until convergence. More pecisely,

    forward

    The command law $h(t)$ is given (by an explicit law or taken from a file). The trajectory is computed in a classical way, with the additionnal computation of the functional to be optimised, $J$, prescribed with specific f_set macros. The states, transfers and control laws are stored.

    backward

    The adjoint variable is computed from the last time $T$ backward. The time increment is re-read as it could have changed during the forward simulation. The system is solved by using the same technics as in the forward simulation, but with a negative time step.

    external phase

    Now the command should be corrected. This step isn’t covered here, but, for example, minuit the optimisation tool from the CERN could be used. In order to ease such a use of Miniker, the principal program has to be compiled as a subroutine to be driven by an external program (see section Calling the model code).

    The functionnal $J$ to be optimised is defined as


    \begin{displaymath}
J = \psi[\eta(T),\varphi(T) ,h(T)] + \int_0 ^T {l[\eta(\tau),\varphi(\tau),h(\tau)]}\, d\tau
\end{displaymath}

    Where $\psi$ is the final cost function, $l$ is the integrand cost function and $h$ represents the control laws variations.

    The general use of the adjoint model of a system is the determination of the gradient of this $J$ functional to be optimised, with respect to perturbations of the original conditions of the reference trajectory, that is, along its GTLS(6).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.2.2 Control laws

    Each control law is associated with one cell or transfer equation, meaning that a command associated with an equation does not appear in any other equation. It is still possible to add commands acting anywhere by defining a transfer equal to that command.

    The control laws associated with states are in the ux_com(.) array, control laws associated with transfers are in the uy_com(.) array. The control laws may be prescribed even when there is no adjoint computed, nor any optimisation, and they are used during simulation, in which case they will act as external sources. To enable the use of commands, the logical flag Zcommand should be .true..

    The command can be given either as:

    1. a table of numerical values in the files ‘uxcom.data’ and ‘uycom.data’.
    2. a function of the problem variables. To turn that feature on the logical flag Zlaw should be set to .true. in ‘zinit’. The sequence ‘zcmd_law’ should hold the code filling the ux_com(.) and uy_com(.) arrays, as the code from that sequence is used whenever the control laws are needed. In that case the files ‘uxcom.data’ and ‘uycom.data’ will be filled by the command values generated by the function along the trajectory.

    For example in the Lotka-Volterra model, the parameter apar could be a control variable. In that case, apar would be defined as the variable ux_com(1), and either entered as a law in the sequence ‘zcmd_law’ , either written in the file ‘uxcom.data’ step by step. In that case, there must be a perfect corresponodence between time of the commands and time of the run.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.2.3 Cost function coding and adjoint modeling

    First of all the flag zback should be set to .true. in order to allow adjoint model computation:

     
    Zback=.true.;
    

    The two functions cout_Psi corresponding with the final cost and cout_l corresponding with the integrand cost are set up with the f_set macros.

    Macro: f_set cout_Psi = f(eta(.),ff(.),ux_com(.),uy_com(.))

    This macro defines the final cost function. f is a fortran expression which may be function of cell state variables, ‘eta(1)’…‘eta(np)’, transfers ‘ff(1)’…‘ff(mp)’, state control laws ‘ux_com(1)’…‘ux_com(np)’, and transfer control laws ‘uy_com(1)’…‘uy_com(mp)’.

    Macro: f_set cout_l = f(eta(.),ff(.),ux_com(.),uy_com(.))

    This macro defines the integrand cost function. f is a fortran expression which may be function of cell state variables, ‘eta(1)’…‘eta(np)’, transfers ‘ff(1)’…‘ff(mp)’, state control laws ‘ux_com(1)’…‘ux_com(np)’, and transfer control laws ‘uy_com(1)’…‘uy_com(mp)’.

    For example, the following code sets a cost function for the masselottes model:

     
    ! Initialisation 
      F_set cout_Psi = eta_move(inode:1);
    !and f_set cout_l integrand in the functionnal    
      F_set cout_l = 0.;
    

    In that example the functional is reduced to the final value of the first state component. Here, the adjoint vector will correspond to the final sensitivity (at $t=0$) of that component (here the first masselotte position) to a perturbation in all initial conditions(7).

    The following variables are set during the backward phase, and output in the associated files:

    varfileexplanation
    v_adj(.)vadj.dataadjoint to eta(.)
    w_adj(.)wadj.dataadjoint to ff(.)
    wadj(mp+.)gradmuj.dataadjoint to ff(mp+.)
    graduej(.)gradxj.dataadjoint to ux_com(.)
    gradufj(.)gradyj.dataadjoint to uy_com(.)
    hamiltonhamilton.datatime increment, hamiltonian, cost function increment

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.2.4 Sensitivity of cost function to parameters

    The sensitivity of the cost function to all the parameters given as arguments of Free_parameters is computed. For the predator model the sensitivity of a cost function consisting in the integral of the predator population with respect with apar an cpar is obtained with a number of parameters set to 2 in ‘dimetaphi’:

     
    parameter (lp=2);
    

    And the cost function and Free_parameters list in ‘zinit’:

     
    f_set cout_Psi = eta(2);
    f_set cout_l = eta(2);
    Free_parameters: apar,cpar;
    

    apar and cpar also have to be given a value. The result is output in ‘gradpj.data’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3 Kalman filter

    The Kalman filter allows for data assimilation along the model run. In that case it is assumed that there is a real-world model with stochastic perturbations on the states, and that noisy observations are available. The situation implemented in Miniker corresponds to a continuous stochastic perturbation on the state, and discrete noisy observations. In the TEF this leads to:


    \begin{displaymath}\eqalign{
\partial_t \eta (t) &= g(\eta(t),\varphi(t)) + W(t)...
...varphi(t))\cr
\omega(t) &= h ( \eta(t) , \varphi(t)) + \nu\cr
}\end{displaymath}

    The observations $\omega$ are available at discrete time steps $t=s_i$. The stochastic perturbation on state, $\mu$ is characterized by a variance-covariance matrix $Q$ and the noise on the observation, $\nu$ has a variance-covariance matrix $R$. $W$ relates states with stochastic perturbations. At each time step the Kalman filter recomputes an estimation of the state and the variance-covariance matrix of the state.

    In the following we use the example of a linear model with perturbation on state and observation of state. The model has 3 states and 3 corresponding transfers (equal to the states), but the error on the state is of dimension 2. The 3 states are observed. The corresponding equations read:


    \begin{displaymath}\left\{\eqalign{
\partial_t \eta_1 &= a_{11} \eta_1 + a_{12} ...
...varphi_2 + a_{33} \eta_3 + W_{31} \mu_1 + W_{32} \mu_2
}\right.\end{displaymath}


    \begin{displaymath}\left\{\eqalign{
\varphi _1 &= \eta _1\cr
\varphi _2 &= \eta _2\cr
\varphi _3 &= \eta _3
}\right.\end{displaymath}


    \begin{displaymath}\left\{\eqalign{
\omega _1 &= \varphi _1 + \nu_1\cr
\omega _2 &= \eta _2 + \nu_2 \cr
\omega _3 &= \eta _3 + \nu_3
}\right.\end{displaymath}


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3.1 Coding the Kalman filter

    First of all the Kalman filter code should be activated. The observations code is also required (see section Observations). If cmz is used the code should be selected with the select flag kalman in the ‘selseq.kumac’:

     
    sel kalman
    

    With make the kalman variable should be set to 1:

     
    kalman = 1
    

    The kalman code is actually used by setting the flag zkalman to .true., for example in the ‘zinit’:

     
    zkalman = .True.;
    

    With the Kalman filter the dimension of estimated states, of the error on the state and of the observation, the $W$ matrix, the observation function, the initial variance-covariance matrices on the state and the variance-covariance matrices of errors have to be given.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3.1.1 Kalman filter vectors dimensions

    These dimensions should be set in the ‘zinit’ sequence. The size of the estimated states is given by the parameter nkp. You can set this to np if all the states are estimated, but in case there are some deterministic state variables, nkp may be less than np. In that case the first nkp elements of eta(.) will be estimated using the Kalman filter.

    The error on state dimension is associated with the parameter nerrp and the size of the observations vector is mobs (see section Observations). In our example the dimensions are set with:

     
    parameter (nkp=np);
    parameter (mobs=3);
    parameter (nerrp=2);
    

    All the states are estimated, there are 3 observation functions and the error on the state vector is of dimension 2.

    If the sizes are set explicitely, the parameters should be set in ‘dimetaphi’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3.1.2 Error and observation matrices

    Initial variance-covariance matrix on the state

    The variance-covariance on the state matrix is covfor(.,.). The initial values have to be given for this matrix, as in our example:

     
    covfor(1,1) = 1000.; covfor(1,2) = 10.; covfor(1,3) = 10.;
    covfor(2,1) = 10.; covfor(2,2) = 5000.; covfor(2,3) = 5.;
    covfor(3,1) = 10.; covfor(3,2) = 5.; covfor(3,3) = 2000.;
    

    This matrix is updated by the filter at each time step because the states are pertubated by some noise, and when assimilation takes place as new information reduce the error.

    Observations and error on state matrix

    The matrix that relates errors on states vector components to states, corresponding with $W$ is mereta(.,.). In our example it is set by:

     
    mereta(1,1) = 1.;  mereta(1,2) = 0.;
    mereta(2,1) = 0.;  mereta(2,2) = 1.;
    mereta(3,1) = 0.5;  mereta(3,2) = 0.5;
    

    The observation functions are set by a f_set macro with Obs_tef(.) as described in Observations. In our example the observation functions are set by:

     
    f_set Obs_tef(1) = ff(1) ;
    f_set Obs_tef(2) = eta(2);
    f_set Obs_tef(3) = eta(3);
    

    Error variance-covariance matrices

    The variance-covariance matrix on observation noise is covobs(.,.) set, in our example, by:

     
    covobs(1,1) = 0.3; covobs(1,2) = 0.; covobs(1,3) = 0.;
    covobs(2,1) = 0.; covobs(2,2) = 0.1; covobs(2,3) = 0.;
    covobs(3,1) = 0.; covobs(3,2) = 0.; covobs(3,3) = 0.2;
    

    The variance-covariance matrix on state noise is coveta(.,.) set, in our example, by:

     
    coveta(1,1) = 0.2; coveta(1,2) = 0.001;
    coveta(2,1) = 0.001; coveta(2,2) = 0.1;
    

    These matrices are not changed during the run of the model as part of the filtering process. They may be changed by the user in ‘zsteer’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3.2 Kalman filter run and output


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3.2.1 Feeding the observations to the model

    The observations must be made available to the model during the run. These observations are set in the vobs(.) array, and the assimilation (also called the analysis step of the filter) takes place if the logical variable zgetobs is .true. (see section Data).

    These steps are typically performed in the ‘zsteer’ sequence. In this sequence there should be some code such that when there are data ready to be assimilated, zgetobs is set to .true. and the data is stored in vobs(.), ready for the next step processing.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3.2.2 Kalman filter results

    The estimated states and transfers are still in the same ‘.data’ files, ‘res.data’ and ‘tr.data’ and there is the additional file with observations, called ‘obs.data’ (see section Observations). Each time zgetobs is .true. the data, and the optimally weighted innovations are output in the file associated with data, ‘data.data’ (see section Data).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3.3 Executing code after the analysis

    The analysis takes place before the time step advance when zgetobs is .true.. It may be usefull to add some code after the analysis and before the time step advance. For example the analysis may lead to absurd values for some states or parameters, it could be usefull to correct them in that case. The sequence included after the analysis is called ‘kalsteer’. At this point, in addition to the usual variables the following variables could be usefull:

    etafor(.)

    The state before the analysis.

    kgain(.)

    The Kalman gain.

    innobs(.)

    The innovation vector (observations coherent with the states minus data values).

    covana(.,.)

    The variance-covariance error matrix after the analysis.

    At each time step the derivative of the observation function with respect to transfer and cells variables are recomputed. The elimination of transfers is also performed to get the partial derivative of the observation function of the equivalent model, with states only, with respect to the states. In other words, the Kalman filter does not follow the TEF formalism, because the advance of the var-covar matrix could not yet be set in the TEF form.

    obspha(.,.)

    derivative of observation function in state space with respect to cell variables.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.4 Feedback gain

    The feedback dynamic gain associated with a feedback loop can be expressed as the inverse Borel transform of the coefficient of the reduced scalar coupling matrix, $g(\tau)$, associated with a transfer. A Borel sweep provides this $g(\tau)$. Therefore it is an interesting tool for the characterization of the feedback loop(8).

    As explained in the ZOOM web page document http://www.lmd.jussieu.fr/ZOOM/doc/Feedback_Gain.pdf, this allows for the calculation of the dynamic gain and factor of any feedback that goes through a unique transfer variable. An example of the conclusions that can be drawn from such an analysis is provided in the same document.

    For linear systems – whose GTLS are autonomous along the whole trajectory – the $\tau$ function of the feedback gain is independent of the position on the system trajectory. But in general it is dependant, and one can analyse the function $g(\tau;t)$ defined on a segment $t$ of the trajectory.

    The document introducing the TEF-ZOOM technique explains how a Crank-Nicolson scheme for the time discretisation symbolically gives the solution of the Borel transform of the system. One can identify the dt variable with the Borel $\tau$ within a factor $2$. Hence, to numerically study the $\tau$ dependency of the transform of various coefficients in the system coupling matrix at one point in time, one can calculate the Borel transform of the TLS solutions by making a time-step sweep.

    The function $g(\tau;t)$ is simply output for the feedback gain attached to a unique ff(k) transfer variable. All the relevant informations should be entered in the ‘zinit’ sequence.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.4.1 Specifying the Borel sweep

    First of all the logical flag ZBorel should be raised:

     
    ZBorel=.true.;
    

    The index of the studied transfer is given in the index_ff_gain variable

     
    index_ff_gain=7;
    

    At each time step a Borel sweep may be performed. The time steps of interest are specified with three variables, one for the first step, one for the last step and one for the number of steps between two Borel sweeps:

    istep_B_deb

    First time step for the Borel sweep.

    istep_B_fin

    Last time step for the Borel sweep.

    istep_B_inc

    Number of time steps between Borel sweeps.

    In the following examples Borel sweeps are performed from the time step 1000 up to the time step 1200, with a sweep at each time step:

     
    istep_B_deb=1000;   
    istep_B_fin=1200;  
    istep_B_inc=1;      
    

    For each Borel sweep, the range of the $\tau$ variable should be set. As this is a multiplicative variable the initial value, a multiplicative factor and the number of values are to be given.

    tau_B_ini

    Initial value for $\tau$.

    tau_B_mult

    Multiplicative factor for sweep in $\tau$.

    itau_max

    Number of $\tau$ values.

    For example, in the following, at each time step, the Borel transform will be computed for $\tau$ values starting at $0.2$ and then multiplied a hundred times by $\sqrt{\sqrt{2}}$

     
    tau_B_ini=0.2;    
    tau_B_mult=sqrt(sqrt(2.)); 
    itau_max=100;             
    

    When the initial value of $\tau$ is set to a negative value (i.e. tau_B_ini=-0.2;), the Borel sweep will first be applied with itau_max negative values for -0.2, tau_B_mult*(-0.2),..., then for the zero value, and finally for the symetric positive values, resulting in 2*itau_max+1 values for $\tau$.

    The whole example reads

     
    ! -------------------
    ! Feedback gain
    ! Borel
    ! -------------------
    ZBorel=.true.;
    if ZBorel           
    <  istep_B_deb=1000; 
       istep_B_fin=1200;
       istep_B_inc=1;  
    ;
       index_ff_gain=7; 
       tau_B_ini=0.2;    
       tau_B_mult=sqrt(sqrt(2.)); 
       itau_max=100;             
       z_pr/Borel/:tau_B_mult,tau_B_ini*(tau_B_mult)**itau_max;
    >;
    

    Instead of using the index of the transfer in index_ff_gain it is possible to specify the name of the transfer.In that case the transfer is specified by the zborel for macro. For example if the transfer selected for the feedback gain computation is b_transfer, it can be selected with:

     
    zborel for: b_transfer;
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.4.2 Borel sweep results

    The file ‘tau_Borel.data’ gives the $\tau$ values of the tau sweep, and the file ‘gains.data’ records the feedback gain function values of $g(\tau)$, with one line for each sweep along the trajectory. In the 1.01 version, a new feature is also provided giving the poles and residuals of the Borel transform in the file ‘vpgains.data’. Consult the subroutine Boreleig for (not definitive) output description.

    One can easily obtain the surface contours of $g(t,\tau)$ using the Fortran program provided as ‘gains.f’ and its compilation shell ‘gains.xqt’, that builds 2D histograms for PAW, in which one uses the ‘borels.kumac’ provided kumac.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.5 Stability analysis of fastest modes

    The preceding analyses are done along with a simulation. One has also the possibility of using in a more classical fashion the state advance matrix $A_{st}$, after the end of the simulation. Code to perform the SVD (Singular Value Decomposition) of the state matrix $A_{st}$ and also of $A_{st} + A_{st}^\dagger$ is provided with Miniker. The singular elements of these two matrices correspond to the most rapid modes of instability of the perturbed system.

    The Singular value decomposition of a matrix is noted


    \begin{displaymath}
U w V^\dagger
\end{displaymath}

    An executable file, ‘sltc.exe’ is generated and running this file will produce the corresponding results.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.5.1 Singular Value Decomposition with cmz

    The cmz macro smod SLTC prepares a main program (‘circul’ of +PATCH SLTC), provided as a base for user’s own analysis, in the directory ‘sltc/’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.5.2 Singular Value Decomposition with make

    To compile the singular value decomposition executable with make you can do

     
    make sltc.exe
    

    If you want to have a separate directory for the SVD, you should copy the sequence ‘dimetaphi.inc’ (or make a link to that file) to the directory. You should also copy the file ‘Makefile.sltc’ from the ‘template/’ directory in this directory, rename it ‘Makefile’ and set the Miniker directory path in the miniker_dir variable. For example, if the Miniker directory is in ‘/u/src/mini_ker’:

     
    miniker_dir = /u/src/mini_ker
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.5.3 Singular Value Decomposition run and output

    As it is, the ‘sltc.exe’ executable generated by the compilation determines the SVD. This program requires ‘title.tex’ (see Title file) to transmit a title for output and graphics, and ‘aspha.data’ (see section Running a simulation and using the output) to access the state matrix. To get access to these files (in case they are not in the current directory) it is possible to make a link to the corresponding files in the model directory. Once it is done the program may be run:

     
    ./sltc.exe
    

    The files ‘u.data’, ‘w.data’, and ‘v.data’ holds the singular elements for $A_{st}$ ($U$, $w$ and $V$), and ‘us.data’, ‘ws.data’, and ‘vs.data’ holds the singular elements of $A_{st} + A_{st}^\dagger$. The corresponding macros ‘.kumac’ for PAW(9) are also generated.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.6 Generalized linear tangent system analysis

    The state matrix $A_{st}$ may also be used to compute the GTLS propagator (or state transition matrix applied to perturbation), after the simulation. The algorithm is a finite product of 5th order development of $\Phi(t+\delta t,t)=\exp{A_{st} \delta t}$. Numerous element of analysis are given, in particular the determination of the Lyapunov exponents of the system.

    An executable file, ‘sltcirc.exe’ is generated and running this file will produce the corresponding results.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.6.1 Generalized tangent linear system with cmz

    The cmz macro smod SLTCIRC prepares a main program (‘circule’ of +PATCH SLTCIRC), in the directory ‘sltcirc/’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.6.2 Generalized tangent linear system with make

    To compile the GTLS analysis executable with make you can do

     
    make sltcirc.exe
    

    If you want to have a separate directory for the GTLS analysis, you should copy the sequence ‘dimetaphi.inc’ (or make a link to that file) to the directory. You should also copy the file ‘Makefile.sltcirc’ from the ‘template/’ directory in this directory and rename it ‘Makefile’ and set the Miniker directory path in the miniker_dir variable.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.6.3 Generalized tangent linear system analysis run and output

    The ‘sltcirc.exe’ executable generated by the compilation computes the elements of analysis of the system. This program requires ‘title.tex’ to transmit a title for output and graphics (see Title file), ‘aspha.data’ to access the state matrix and ‘dres.data’, because time-step can be changed along the simulation (see section Running a simulation and using the output) (10). To get access to these files (in case they are not in the current directory) it is possible to make a link to the corresponding files in the model directory. Once it is done the program may be run:

     
    ./sltcirc.exe
    

    The following table gives the correspondence between variable name, result file and ntuple number, with a short explanation:

    varfilentupleexplanation
    p(.,.)phit.data55propagator from 0 to $t$, $\Phi(t,0)$
    up(.,.)uphit.data50Left singular vectors $U$ in the SVD of $\Phi$
    wp(.)wphit.data51singulat values $w$ in the SVD of $\Phi$
    vp(.,.)vphit.data52Right Singular Vectors $V$ in the SVD of $\Phi$
    wr(.)wr.data53real part of eigen values of $\Phi(t,0)$
    wi(.)wi.data54imaginary part of eigen values of $\Phi(t,0)$
    lwp(.)lwphit.data67Lyapunov exponents

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5. Advanced use of Miniker with make


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.1 Make variables

    The ‘Makefile.miniker’ Makefile provided in the distribution should be included as it defines a lot of important variables and rules.

    The following make variables can be set by the user:

    miniker_dir

    that variable should hold the Miniker sources directory. If you installed Miniker that variable should be set to ‘$(includedir)/mini_ker’. If you use the sources right from the sources directory it should be set to the sources package directory.

    MTNDIRS

    This variable can hold a ‘:’ delimited list of directories that will be searched for mortran include files.

    CMFDIRS

    This variable can hold a ‘:’ delimited list of directories that will be searched for cmz directive include files.

    SEL

    This variable holds a ‘,’ delimited list of select flags, for example monitor, grid1d, debug.

    LDADD

    This variable can be used to add libraries flags and files. It is used in the default linking command/rule.

    miniker_user_objects

    This variable should hold a space separated list of additional object files to be linked with the model and helper object files.

    CAR2TXTFLAGS

    cmz directives preprocessor flag.

    kalman

    This variable should be set to 1 if you want to use the kalman filter (see section Kalman filter).

    double

    This variable should be set to 1 if you want to have a double precision code (see section Double precision).

    The following variables are allready set and may be used (some are set by ./configure see Configuration):

    miniker_principal_objects

    The list of object files needed for the model build, together with some helper object files often used but not strictly required for the linking.

    DEPDIR

    The name of a hidden directory containing the dependencies computed for the main mortran files.

    F77
    FC
    FFLAGS
    LDFLAGS

    Compiler and linker related variables set by ./configure.

    LIBS

    This variable should hold the link flags and files required to build Miniker, set by ./configure.

    CAR2TXT
    MORTRAN
    MTNFLAGS
    MTNDEPEND

    Preprocessor and preprocessor flags, set by ./configure.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.2 Rules

    The following rules are defined in the ‘Makefile.miniker’ file.

    miniker-clean

    remove the fortran files generated from the mortran files. Remove the object files.

    miniker-mtn-clean

    remove the mortran files generated from the files with cmz directives.

    Various rules to preprocess files with cmz directives and mortran files and to compile fortran files.

    If the user needs a mortran main file, he may take advantage of the rule used to compute the dependencies of a mortran file. If the file is called, say, ‘mtnfile.mtn’ leading to ‘mtnfile.f’, the following include should lead to the automatic creation, updating and inclusion of a file describing the dependencies of ‘mtnfile.mtn’ in the ‘Makefile’:

     
    include $(DEPDIR)/mtnfile.Pf
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.3 Linking rule

    The rule used for the linking of the model file is not in the ‘Makefile.miniker’ file but should be provided in the user ‘Makefile’ for more flexibility. The default rule uses the variables miniker_user_objects for additional object files and LDADD for additionnal linking flags and files, those variables are there to be changed by the user.

    The object files required by the Miniker code are in the make variable miniker_principal_objects, this variable is also used. The value of the variables FC for the Fortran compiler, FFLAGS for the Fortran compiler flags and LDFLAGS for the linker flags should be set to right values; LIBS should also be right and hold the link flags and link files required to compile the Miniker model. These variables are set by by ./configure during configuration (see section Configuration) and used in the default rule:

    $(model_file): $(miniker_user_objects) $(miniker_principal_objects)
    	$(FC) $(FFLAGS) $(LDFLAGS) $^ $(LDADD) $(LIBS) -o $@
    

    In case this isn’t right it may be freely changed. You should certainly refer to the (make)Top section ‘Top’ in GNU Make Manual manual to understand what that rule exactly means and make your own.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Concepts index

    Jump to:   $  
    A   B   C   D   E   F   G   H   I   K   L   M   O   P   R   S   T   U   V   Z  
    Index Entry Section

    $
    $dimetaphi2.3.1 Setup a model and compile with cmz
    $zinit2.3.1 Setup a model and compile with cmz

    A
    adjoint4.2.1 Overview of optimisation with Miniker
    aspha.data2.3.3 Running a simulation and using the output
    aspha.data’, GTLS4.6.3 Generalized tangent linear system analysis run and output
    aspha.data’, SVD4.5.3 Singular Value Decomposition run and output

    B
    Borel sweep4.4 Feedback gain
    Borel sweep graphics4.4.2 Borel sweep results
    Borel sweep results4.4.2 Borel sweep results

    C
    cellsIntroduction
    cernlibA.2 Common requisites
    command law4.2.2 Control laws
    compilation2.3.2 Setup a model and compile with make
    configuration of sourceA.4.2 Configuration
    controlling the run2.4 Controlling the run

    D
    data.data3.8.2 Data
    data.data4.3.2.2 Kalman filter results
    dimetaphi3.9.1 The explicit size sequence
    dimetaphi3.9.1 The explicit size sequence
    dimetaphi’, Kalman filter4.3.1.1 Kalman filter vectors dimensions
    down node3.3 Describing 1D gridded model
    dres.data2.3.3 Running a simulation and using the output
    dres.data
    dres.data’, GTLS4.6.3 Generalized tangent linear system analysis run and output

    E
    equations, gridGrid node equations
    error vector dimension4.3.1.1 Kalman filter vectors dimensions

    F
    FDL, GNU Free Documentation LicenseC.1 GNU Free Documentation License
    feature setting3.1 Overview of additional features setting
    Feedback gain4.4 Feedback gain
    ffl (linearity test)2.4.1 Executing code at the end of each time step
    final cost4.2.1 Overview of optimisation with Miniker

    G
    Generalized linear tangent system4.6 Generalized linear tangent system analysis
    gradpj.data4.2.4 Sensitivity of cost function to parameters
    graphics2.3.4 Doing graphics
    graphics with gnuplot2.3.4 Doing graphics
    graphics with PAW2.3.4 Doing graphics
    graphics, Borel sweep4.4.2 Borel sweep results
    GTLS4.6 Generalized linear tangent system analysis
    GTLS output4.6.3 Generalized tangent linear system analysis run and output
    GTLS run4.6.3 Generalized tangent linear system analysis run and output

    H
    Heaviside function3.6 Rule of programming non continuous models

    I
    initial variance-covariance on statesInitial variance-covariance matrix on the state
    installation with makeA.4.3 Installation with make
    integrand cost4.2.1 Overview of optimisation with Miniker

    K
    Kalman filter4.3 Kalman filter
    Kalman filter output4.3.2.2 Kalman filter results
    Kalman filter results4.3.2.2 Kalman filter results

    L
    lapackA.2 Common requisites
    limiting conditionsLimiting conditions
    linearity test2.4.1 Executing code at the end of each time step
    logical flags3.1 Overview of additional features setting
    Lyapunov exponents4.6 Generalized linear tangent system analysis

    M
    Makefile.miniker5.1 Make variables
    Makefile.sltc4.5.2 Singular Value Decomposition with make
    Makefile.sltcirc4.6.2 Generalized tangent linear system with make
    mini_ker.cmzA.3 Miniker with cmz
    mod2.3.1 Setup a model and compile with cmz
    model equations3.9.2 Entering the model equations, with explicit sizes
    model size3.9.1 The explicit size sequence
    Model.hlp2.3.3 Running a simulation and using the output
    mortranIntroduction
    mortran2.2.1 All you need to know about mortran and cmz directives
    mortran, with makeA.4.1 Additional requirements for Miniker with make

    O
    obs.data3.8.1 Observations
    observation function3.8.1 Observations
    observations4.3.1.2 Error and observation matrices
    observations, general4.3 Kalman filter
    optimisation4.2.1 Overview of optimisation with Miniker
    output file2.3.3 Running a simulation and using the output
    output, GTLS4.6.3 Generalized tangent linear system analysis run and output
    output, Kalman filter4.3.2.2 Kalman filter results
    output, sensitivity4.1 Automatic sensitivity computation
    output, SVD4.5.3 Singular Value Decomposition run and output

    P
    printing2.4.2 Controlling the printout and data output
    Programming environmentsA.1 Programming environments
    propagator4.6 Generalized linear tangent system analysis

    R
    requirements, with makeA.4.1 Additional requirements for Miniker with make
    res.data2.3.3 Running a simulation and using the output
    results, Borel sweep4.4.2 Borel sweep results
    results, Kalman filter4.3.2.2 Kalman filter results
    run, GTLS4.6.3 Generalized tangent linear system analysis run and output
    run, SVD4.5.3 Singular Value Decomposition run and output
    running model2.3.3 Running a simulation and using the output

    S
    select flag3.1 Overview of additional features setting
    selseq.kumac3.1 Overview of additional features setting
    selseq.kumacA.3 Miniker with cmz
    sens.data4.1 Automatic sensitivity computation
    sensitivities4.1 Automatic sensitivity computation
    sensitivity, output4.1 Automatic sensitivity computation
    sequence2.1 General structure of the code
    sequences2. Miniker model programming
    sigma.data4.1 Automatic sensitivity computation
    Singular Value Decomposition4.5 Stability analysis of fastest modes
    sltc.exe4.5 Stability analysis of fastest modes
    sltc.exe4.5.3 Singular Value Decomposition run and output
    sltcirc.exe4.6 Generalized linear tangent system analysis
    sltcirc.exe4.6.3 Generalized tangent linear system analysis run and output
    smod4.5.1 Singular Value Decomposition with cmz
    smod4.6.1 Generalized tangent linear system with cmz
    starting pointStarting points
    state matrix4.5 Stability analysis of fastest modes
    SVD4.5 Stability analysis of fastest modes
    SVD output4.5.3 Singular Value Decomposition run and output
    SVD run4.5.3 Singular Value Decomposition run and output

    T
    TEFIntroduction
    TEF2.2 Miniker programming illustrated
    title filetitle file
    title.textitle file
    title.tex’, GTLS4.6.3 Generalized tangent linear system analysis run and output
    title.tex’, SVD4.5.3 Singular Value Decomposition run and output
    tr.data2.3.3 Running a simulation and using the output
    transfersIntroduction

    U
    up node3.3 Describing 1D gridded model
    uxcom.data4.2.2 Control laws
    uycom.data4.2.2 Control laws

    V
    variance-covariance errorError variance-covariance matrices
    variance-covariance matrices4.3.1.2 Error and observation matrices
    variance-covariance matrices, general4.3 Kalman filter
    variance-covariance matrix on stateObservations and error on state matrix

    Z
    zcmd_law4.2.2 Control laws
    zcmd_law.inc4.2.2 Control laws
    zinit2.2.2 Entering model equation and parameters
    zinit, general2.1 General structure of the code
    zinit’, Kalman filter4.3.1.2 Error and observation matrices
    zinit.mti2.3.2 Setup a model and compile with make
    ZOOMIntroduction
    zsteer2.4.1 Executing code at the end of each time step
    zsteer’, Kalman filter4.3.2.1 Feeding the observations to the model
    zsteer.inc2.4.1 Executing code at the end of each time step

    Jump to:   $  
    A   B   C   D   E   F   G   H   I   K   L   M   O   P   R   S   T   U   V   Z  

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Variables, macros and functions index

    Jump to:   A   B   C   D   E   F   H   I   K   M   N   O   P   S   T   V   Z  
    Index Entry Section

    A
    aspha2.4.1 Executing code at the end of each time step

    B
    Bb2.4.1 Executing code at the end of each time step
    Bt2.4.1 Executing code at the end of each time step

    C
    couplage(.)2.4.1 Executing code at the end of each time step
    cout_l4.2.3 Cost function coding and adjoint modeling
    cout_Psi4.2.3 Cost function coding and adjoint modeling
    covana(.,.)4.3.3 Executing code after the analysis
    coveta(.,.)Error variance-covariance matrices
    covfor(.,.)Initial variance-covariance matrix on the state
    covobs(.,.)Error variance-covariance matrices

    D
    D2.4.1 Executing code at the end of each time step
    dEta(.)2.3.3 Running a simulation and using the output
    deta_tef(.)3.9.2 Entering the model equations, with explicit sizes
    dneta2.4.1 Executing code at the end of each time step
    dphi2.4.1 Executing code at the end of each time step
    dt2.2.2 Entering model equation and parameters
    dt
    d_pi_aspha(.,.)4.1.2 Advance matrix sensitivity

    E
    eqn:Model equations
    eta(.)The cell and transfer arrays
    eta(.), explicit sizes3.9.2 Entering the model equations, with explicit sizes
    etafor(.)4.3.3 Executing code after the analysis

    F
    ff(.)The cell and transfer arrays
    ff(.), explicit sizes3.9.2 Entering the model equations, with explicit sizes
    ffl(.)2.4.1 Executing code at the end of each time step
    Free_parameter3.7 Parameters
    fun:Model equations
    f_set3.9.2 Entering the model equations, with explicit sizes
    f_set3.9.2 Entering the model equations, with explicit sizes
    f_set4.2.3 Cost function coding and adjoint modeling
    f_set4.2.3 Cost function coding and adjoint modeling

    H
    H2.4.1 Executing code at the end of each time step

    I
    index_ff_gain4.4.1 Specifying the Borel sweep
    innobs(.)4.3.3 Executing code after the analysis
    istep2.4.1 Executing code at the end of each time step
    istep_B_deb4.4.1 Specifying the Borel sweep
    istep_B_fin4.4.1 Specifying the Borel sweep
    istep_B_inc4.4.1 Specifying the Borel sweep
    itau_max4.4.1 Specifying the Borel sweep

    K
    kgain(.)4.3.3 Executing code after the analysis

    M
    maxstep3.9.1 The explicit size sequence
    mereta(.,.)Observations and error on state matrix
    mobs3.8.1 Observations
    model_file_name2.3.2 Setup a model and compile with make
    modzprint2.2.2 Entering model equation and parameters
    modzprint2.4.2 Controlling the printout and data output
    mpThe cell and transfer arrays
    mp3.9.1 The explicit size sequence
    m_dwn3.3.1 Setting dimensions for 1D gridded model
    m_mult3.3.1 Setting dimensions for 1D gridded model
    m_node3.3.1 Setting dimensions for 1D gridded model
    m_up3.3.1 Setting dimensions for 1D gridded model

    N
    npThe cell and transfer arrays
    np3.9.1 The explicit size sequence
    nstep2.2.2 Entering model equation and parameters
    n_dwn3.3.1 Setting dimensions for 1D gridded model
    n_mult3.3.1 Setting dimensions for 1D gridded model
    n_node3.3.1 Setting dimensions for 1D gridded model
    n_up3.3.1 Setting dimensions for 1D gridded model

    O
    obspha(.,.)4.3.3 Executing code after the analysis

    P
    Phi_tef(.)3.9.2 Entering the model equations, with explicit sizes
    principal3.2.2 Calling the model subroutine

    S
    set_dwn_etaLimiting conditions
    set_dwn_phiLimiting conditions
    set_etaModel equations
    set_node_etaGrid node equations
    set_node_PhiGrid node equations
    set_PhiModel equations
    set_up_etaLimiting conditions
    set_up_phiLimiting conditions

    T
    tau_B_ini4.4.1 Specifying the Borel sweep
    tau_B_mult4.4.1 Specifying the Borel sweep
    time2.2.2 Entering model equation and parameters

    V
    var:Model equations
    vobs(.)3.8.2 Data
    vobs(.)4.3.2.1 Feeding the observations to the model

    Z
    zback4.2.3 Cost function coding and adjoint modeling
    ZBorel4.4.1 Specifying the Borel sweep
    zborel for4.4.1 Specifying the Borel sweep
    zcommand4.2.2 Control laws
    zgetobs3.8.2 Data
    zgetobs4.3.2.1 Feeding the observations to the model
    zkalman4.3.1 Coding the Kalman filter
    zlaw4.2.2 Control laws
    zprint2.4.2 Controlling the printout and data output

    Jump to:   A   B   C   D   E   F   H   I   K   M   N   O   P   S   T   V   Z  

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A. Installation


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.1 Programming environments

    Miniker is not a traditionnal software in that it isn’t a library or an interpreter but rather a set of source and macro file that combines with the user model code and enable to build a binary program corresponding with the model. It requires a build environment with a preprocessor, a compiler and facilities that automate these steps.

    Two different environment are proposed. One use cmz (http://wwwcmz.web.cern.ch/wwwcmz/index.html), while the other is based on make. Other libraries are needed, the CERN Program Library (cernlib) and lapack.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.2 Common requisites

    Whatever method is used a fortran 77 compiler is required. The compilers that have been used so far are g77, gfortran and the sun solaris compiler.

    When usng CMZ, the CERN Program Library, available at http://wwwasd.web.cern.ch/wwwasd/cernlib/, has to be installed. With make, internal source files copied from the cernlib may be used instead but then some examples won’t be available, since they rely on some mathematical functions provided by the CERN library. On windows, in case you want to use the compiler from the GNU compiler collection with cygwin or MINGW/MSYS you can use the binaries provided at http://zyao.home.cern.ch/zyao/cernlib.html. On Mac OS X, the cernlib provided by fink (package cernlib-devel) can be used.

    You should also have LAPACK, available at http://www.netlib.org/lapack/. LAPACK can also be installed as part of the CERN Library or as part of the http://math-atlas.sourceforge.net/ implementation. On most linux distributions a lapack package is available. On Mac OS X, the ATLAS implementation provided by fink or the frameworks from Xcode can be used.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.3 Miniker with cmz

    First of all you have to get the cmz file ‘mini_ker.cmz’ and put it in a directory. In that same directory you should create a directory for each of your models. In the model directory you should copy the file ‘selseq.kumac’ available with Miniker, and create your own cmz file for your model, called for example ‘mymodel.cmz’. You should also have installed the kumac macro files handling mortan compilation, the associated shell scripts and the mortran preprocessor.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.4 Miniker with make


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.4.1 Additional requirements for Miniker with make

    The package has been tested with GNU make and solaris make.

    Suitable preprocessors should also be installed. Two preprocessors are required, one that preprocess the cmz directives, and a mortran preprocessor. A cmz directives processor written in perl, is distributed in the car2txt package available at http://www.environnement.ens.fr/perso/dumas/mini_ker/software.html. A mortran package with a command able to preprocess a mortran file given on the command line with a syntax similar with the cpp command line syntax is also required. Such a mortran is available at http://www.environnement.ens.fr/perso/dumas/mini_ker/software.html.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.4.2 Configuration

    The package is available at http://www.environnement.ens.fr/perso/dumas/mini_ker/software.html. It is available as a compresssed tar archive. On UNIX, with GNU tar it may be unpacked using

     
    $ tar xzvf mini_ker-4.2.tar.gz
    

    The detection of the compiler, the preprocessors (car2txt and mortran), and the libraries are performed by the configure script. This script sets the apropriate variables in makefiles. It can be run with:

     
    $ cd mini_ker-4.2
    $ ./configure
    

    If the output of ./configure doesn’t show any error it means that all the components are here. It is possible to give ./configure switches and also specify environment variables (see also ./configure --help):

    --disable-cernlib

    Use the internal cernlib source files, even if a cernlib is detected.

    --with-static-cernlib

    This command line switch forces a static linking with the cernlib (or a dynamic linking if set to no).

    --with-cernlib

    This command line switch can be used to specify the cernlib location (if not detected or you want to use a specific cernlib).

    --with-blas
    --with-lapack

    With this command switch, you can specify the location of the blas and lapack libraries.

    For example, on mac OS X this can be used to specify the blas and lapack from the Apple frameworks:

     
    ./configure \
    --with-blas=/System/Library/Frameworks/vecLib.framework/versions/A/vecLib \
    --with-lapack=/System/Library/Frameworks/vecLib.framework/versions/A/vecLib
    
    F77
    FC
    FFLAGS
    LDFLAGS

    Classical compiler, compiler flags and linker flags.

    MORTRAN

    This environment variable holds the mortran preprocessor command (default is mortran).

    MTNFLAGS

    This environment variable holds command line arguments for the mortran preprocessor. It is empty in the default case.

    MTN

    This environment variable may be used to specify the mortran executable name and/or path, it should be used by the mortran commmand. (default is empty, which leads to a mortran executable called mtn).

    MTNDEPEND

    This environment variable may be used to specify the mortran dependencies checker executable. It should be used by the mortran commmand. (default is empty, which leads to a mortran dependencies checker called mtndepend).

    After a proper configuration, if make is run then the example models should be build. You have to perform the configuration only once.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.4.3 Installation with make

    Miniker can be installed by running

     
    make install
    

    It should copy the sources and the ‘Makefile.miniker’ file in a ‘mini_ker’ directory in the $(includedir) directory, and copy the templates in ‘$(datadir)/mini_ker’. The default for $(includedir) is ‘/usr/local/include’ and the default for $(datadir) is ‘/usr/local/share’, these defaults may be changed by ./configure switches ‘--prefix’, ‘--includedir’ and ‘--datadir’. See ./configure --help and the ‘INSTALL’ file for more informations. The helper script ‘start_miniker’ should also be installed.

    The installation is not required to use comfortably Miniker. Indeed the only thing that changes with the sources and the ‘Makefile.miniker’ directory location is the miniker_dir variable in a project Makefile.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    B. Cmz directives reference

    The cmz directives are described together with the other features of cmz in the cmz manual at http://wwwcmz.web.cern.ch/wwwcmz/, the important ones are nevertheless recalled here, especially for those that use make and don’t need the whole features of cmz.

    After the description of the generic features, we turn to the cmz directive of interest. There are three kinds of cmz directives that are of use within Miniker: one kind that introduce files, the other for conditionnal compilation and the third for sequence inclusion.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    B.1 Cmz directives general syntax

    The cmz directives always begin with a ‘+’ in the first column, optionnaly followed by any number of ‘_’ that may be used for indentation, then the directive label, case insensitive, followed by the directive arguments separated by ‘,’. The arguments are also case insensitive. Optional spaces may be around directive arguments. An optionnal ‘.’ ends the directive arguments and begin a comment, everything that follows that ‘.’ is ignored.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    B.2 Conditional expressions

    A directive argument common to all the directives is the conditionnal expression. A conditionnal expression may be true or false, it is a combination of select flags. the select flags are combined with logical operators. A select flag itself is true if it was selected. A select flag selflag is selected by using the sel selflag instruction in cmz. It is selected by passing the -D selflag command line switch to the call of the cmz directives preprocessor when using make.

    A ‘-’ negates the expression that follows. Parenthesis ‘(’ and ‘)’ are used for the grouping of subexpressions. ‘|’ and ‘,’ are for the boolean or: an expression with a or is true if the expression on the left or the expression on the right of the or is true. ‘&’ is for the boolean and: an expression with an and is true if the expression on the left and the expression on the right are true.

    The grouping is left to right when there is no parenthesis, with or and ‘&’ having the same precedence. Therefore

     
    a&b|c    ≡    (a&b)|c
    a|b&c    ≡    (a|b)&c
    a|b&c  is not  a|(b&c)
    a&b|c  is not  a&(b|c)
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    B.3 File introduction directives

    A file (or sequence) introduction directive appears at the beginning of the file. There are two different directives, one is DECK for normal files, the other is KEEP for include files (sequences). The first argument is the name of the file. The file name may not be larger than 32 characters and is converted to lower case in the general case. The optionnal following arguments may be of 2 type (and may be mixed, separated by ‘,’):

    conditional

    A conditionnal is introduced by IF= followed by a conditionnal expression described in Conditional expressions. The file is preprocessed if the conditionnal expression is true.

    language specification

    A language specification is introduced by a T=. The most common languages are ‘mtn’ for the mortran, ‘ftn’ for fortran not preprocessed, ‘f77’ for preprocessed fortran, ‘c’ for the c language and ‘txt’ for text files. In general the language of the file determines the name of files the preprocessed file is extracted to, the comment style and the command for inclusions.

    It is a common practice to have wrong language type in KEEP as the language may be determined from the DECK that include them with cmz, or from their file name with make. This is not recommended and considered a bad practice.

    Such a directive will always appear in cmz, as it is built-in. It is recommended to have one when using make too, even though it is not required in most cases. Indeed make uses the file name directly and finds the language and file type by looking at the file extension. make should then pass the language type with a --lang lang command line switch when calling the cmz directives preprocessor. With make, the convention is to have ‘cm’ added before the normal file suffix and after the ‘.’. The table tab:cmfile_suffix shows the matching between suffixes, file type and file language.

    For example, a file beginning with

    +Deck, subroutine_foo, If=monitor&-simple, T=f77. 
    

    is a main preprocessed fortran file that will only be generated if ‘monitor’ is selected and ‘simple’ is not selected. The file to be preprocessed by make should have the ‘.cmF’ suffix, and be called ‘subroutine_foo.cmF’.

    A file beginning with

    +KEEP,inc_common,If=monitor|interface,T=mtn
    

    is an mortran include file that should be processed only if ‘monitor’ or ‘interface’ is selected. The file to be preprocessed by make should have the ‘cmmti’ suffix and be called ‘inc_common.cmmti’. The resulting file when make is used will be called ‘inc_common.mti’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    B.4 Conditional directives

    Conditional directives may be used to conditionnaly skip blocks of code. There are 4 conditional directives: if, elseif, else and endif. +if begins a conditional directives sequence, with argument a conditional expression. If the expression is true the block of code following the +if is output in the resulting file, up to another conditional directive, if it is false the code block is skipped. If the expression is false and the following conditional directive is +elseif, the same procedure is followed with the argument of +elseif which is also a conditionnal expression. More than one +elseif may follow a +if. If a +if or +elseif expression is true the following code block is output and all the following +elseif code blocks are skipped. If all the +if and +elseif expressions are false and the following coditionnal directive is +else then the block following the +else is output. If a previous expression was true the code block following the +else is skipped. The last code block is closed by +endif.

    Conditionnal directives may be nested, a +if begins a deeper conditionnal sequences directives that is ended by the corresponding +endif.

    The simplest example is:

         some code;
    +IF,monitor
         code output only if monitor is true;
    +ENDIF
    

    If ‘monitor’ is selected, the +if block is output, it leads to

         some code;
         code output only if monitor is true;
    

    If ‘monitor’ isn’t selected the +if block is skipped, it leads to

         some code;
    

    An example with +else may be:

    +IF,double
     call dmysub(eta);
    +ELSE
     call smysub(eta);
    +ENDIF
    

    If ‘double’ is selected the code output is call dmysub(eta);, if ‘double’ isn’t selected the code output is call dmysub(eta);.

    Here is a self explanatory example of use of +elseif:

    +IF,monitor
      code used if monitor is selected;
    +ELSEIF,kalman
      code used if kalman is selected and monitor is not;
    +ELSE
      code used if kalman and monitor are not selected;
    +ENDIF
    

    And last an example of nested conditional directives:

    +IF,monitor
      code used if monitor is selected;
    +_IF,kalman. deep if
        code used if monitor and kalman are selected;
    +_ELSE. deep else
        code used if monitor is selected and kalman is not;
    +_ENDIF. end the deep conditionnals sequence
    +ELSE
      code used if monitor is not selected;
    +_IF,kalman
        code used if monitor is not selected but kalman is;
    +_ELSE
        code used if monitor and kalman are not selected;
    +_ENDIF
      other code used if monitor is not selected;
    +ENDIF
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    B.5 File inclusion directive

    The file (sequence) inclusion directive is seq. The argument of seq is an include files ‘,’ separated list. The include files are Keep in cmz. The following optional arguments may be mixed:

    conditional

    A conditionnal is introduced by IF= followed by a conditionnal expression described in Conditional expressions. The directive is ignored if the conditionnal expression is false.

    T=noinclude

    When this argument is present the text of the sequence will always be included in the file where the +seq appears.

    When there is no T=noinclude argument, the +seq directive may be replaced with an inclusion command suitable for the language of the file being processed, if such command has been specified.

    For example if we have the following sequence

    +KEEP,inc,lang=C
    typedef struct incstr {char* msg};
    

    And the following code in the file being processed:

    +DECK,mainf,lang=C
    +SEQ,inc
    int main (int argc, char* argv) { exit(0); }
    

    the processing of ‘mainf’ should lead to the file ‘mainf.c’, containing an include command for ‘inc’:

    #include "inc.h"
    int main (int argc, char* argv) { exit(0); }
    

    In case the +seq has the T=noinclude:

    +DECK,mainf,lang=C
    +SEQ,inc,T=noinclude
    int main (int argc, char* argv) { exit(0); }
    

    The processing of ‘mainf’ should lead to the file ‘mainf.c’ containing the text of ‘inc’:

    typedef struct incstr {char* msg};
    int main (int argc, char* argv) { exit(0); }
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    B.6 The ‘self’ directive

    The self directive is an obsolete directive that may be used for conditionnal skipping of code. For a better approach see Conditional directives. The optionnal argument of +SELF is If= followed by a conditionnal expression. If the conditionnal expression is true the code following the directive is output, if it is false the code is skipped up to any directive (including another +SELF) except +seq.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    C. Copying This Manual


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    C.1 GNU Free Documentation License

    Version 1.1, March 2000

     
    Copyright © 2000 Free Software Foundation, Inc.
    59 Temple Place, Suite 330, Boston, MA  02111-1307, USA
    
    Everyone is permitted to copy and distribute verbatim copies
    of this license document, but changing it is not allowed.
    
    1. PREAMBLE

      The purpose of this License is to make a manual, textbook, or other written document free in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.

      This License is a kind of “copyleft”, which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.

      We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

    2. APPLICABILITY AND DEFINITIONS

      This License applies to any manual or other work that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. The “Document”, below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as “you”.

      A “Modified Version” of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.

      A “Secondary Section” is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document’s overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (For example, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.

      The “Invariant Sections” are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License.

      The “Cover Texts” are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License.

      A “Transparent” copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, whose contents can be viewed and edited directly and straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup has been designed to thwart or discourage subsequent modification by readers is not Transparent. A copy that is not “Transparent” is called “Opaque”.

      Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML designed for human modification. Opaque formats include PostScript, PDF, proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML produced by some word processors for output purposes only.

      The “Title Page” means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, “Title Page” means the text near the most prominent appearance of the work’s title, preceding the beginning of the body of the text.

    3. VERBATIM COPYING

      You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.

      You may also lend copies, under the same conditions stated above, and you may publicly display copies.

    4. COPYING IN QUANTITY

      If you publish printed copies of the Document numbering more than 100, and the Document’s license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.

      If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.

      If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access to download anonymously at no charge using public-standard network protocols. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.

      It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

    5. MODIFICATIONS

      You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

      1. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.
      2. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has less than five).
      3. State on the Title page the name of the publisher of the Modified Version, as the publisher.
      4. Preserve all the copyright notices of the Document.
      5. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
      6. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.
      7. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document’s license notice.
      8. Include an unaltered copy of this License.
      9. Preserve the section entitled “History”, and its title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section entitled “History” in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.
      10. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the “History” section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.
      11. In any section entitled “Acknowledgments” or “Dedications”, preserve the section’s title, and preserve in the section all the substance and tone of each of the contributor acknowledgments and/or dedications given therein.
      12. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.
      13. Delete any section entitled “Endorsements”. Such a section may not be included in the Modified Version.
      14. Do not retitle any existing section as “Endorsements” or to conflict in title with any Invariant Section.

      If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version’s license notice. These titles must be distinct from any other section titles.

      You may add a section entitled “Endorsements”, provided it contains nothing but endorsements of your Modified Version by various parties—for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.

      You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.

      The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.

    6. COMBINING DOCUMENTS

      You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice.

      The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.

      In the combination, you must combine any sections entitled “History” in the various original documents, forming one section entitled “History”; likewise combine any sections entitled “Acknowledgments”, and any sections entitled “Dedications”. You must delete all sections entitled “Endorsements.”

    7. COLLECTIONS OF DOCUMENTS

      You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.

      You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

    8. AGGREGATION WITH INDEPENDENT WORKS

      A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, does not as a whole count as a Modified Version of the Document, provided no compilation copyright is claimed for the compilation. Such a compilation is called an “aggregate”, and this License does not apply to the other self-contained works thus compiled with the Document, on account of their being thus compiled, if they are not themselves derivative works of the Document.

      If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one quarter of the entire aggregate, the Document’s Cover Texts may be placed on covers that surround only the Document within the aggregate. Otherwise they must appear on covers around the whole aggregate.

    9. TRANSLATION

      Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English version will prevail.

    10. TERMINATION

      You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

    11. FUTURE REVISIONS OF THIS LICENSE

      The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.

      Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License “or any later version” applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    C.1.1 ADDENDUM: How to use this License for your documents

    To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:

     
      Copyright (C)  year  your name.
      Permission is granted to copy, distribute and/or modify this document
      under the terms of the GNU Free Documentation License, Version 1.1
      or any later version published by the Free Software Foundation;
      with the Invariant Sections being list their titles, with the
      Front-Cover Texts being list, and with the Back-Cover Texts being list.
      A copy of the license is included in the section entitled ``GNU
      Free Documentation License''.
    

    If you have no Invariant Sections, write “with no Invariant Sections” instead of saying which ones are invariant. If you have no Front-Cover Texts, write “no Front-Cover Texts” instead of “Front-Cover Texts being list”; likewise for Back-Cover Texts.

    If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.


    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)

    In fact the variables names are transformed into fortran array elements by mortran generated macros, so the symbolic names defined in the mortran blocks never appears in the generated fortran code, they are replaced by the fortran arrays.

    (2)

    dres.data’ has another time related variable as second column: dt, the time step that can vary in the course of a simulation.

    (3)

    This naming is a joke for “Inert” Heaviside function.

    (4)

    fun_set, or equivalently f_set, is a general mortran macro associating a symbol with a fortran expression. Here, it is the name of the symbol (eta) that has a particular meaning for the building of the model.

    (5)

    For a short introduction to automatic sensitivity analysis, see the document:
    http://lmd.jussieu.fr/zoom/doc/sensibilite.ps, in French, or ask for the more complete research document to a member of the TEF-ZOOM collaboration

    (6)

    General Tangent Linear System, i.e. the TLS circulating along a trajectory. See the explanation in the document http://www.lmd.jussieu.fr/Zoom/doc/Adjoint.pdf (in French).

    (7)

    For detailed explanation of the adjoint model, see the document in pdf or .ps.gz

    (8)

    More generally, the Borel sweep allows the numerical study of the dependency in $\tau$ of the Borel transform of various coefficients in the system coupling matrix.

    (9)

    Explanation in the research paper about SLTC (Al1 2003) available on request.

    (10)

    cf our research texts about propagator analyses in SLTC, and “les Gains sur champs (Al1 2003-2004)”


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/many_input_files/tex_l2h_res/mini_ker_l2h.tex0000644000175000017500000003124211264347126027066 0ustar flichtenheldflichtenheld% This document was automatically generated by the l2h extenstion of texi2html % DO NOT EDIT !!! \documentclass{article} \usepackage{html} \begin{document} \begin{rawhtml} \end{rawhtml} $$\partial_t \eta (t) = g(\eta(t),\varphi(t))$$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\eta$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\varphi$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $$ \varphi(t) = f(\eta(t),\varphi(t)) $$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $t$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $t + \delta t$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\delta \eta$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\delta \varphi$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $$\pmatrix{A & B\cr -C^+ & I-D\cr} \pmatrix{\delta \eta\cr \delta \varphi\cr} = \pmatrix{\Gamma\cr \Omega\cr}$$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $f$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $g$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\delta t$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $$\eqalign{\partial_t \eta (t) &= g(\eta(t),\varphi(t))\cr \varphi(t) &= f(\eta(t),\varphi(t))\cr }$$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $$\left\{\eqalign{\partial_t \eta _{prey} &= a \eta _{prey} - a \varphi _{meet} \cr \partial_t \eta _{pred} &= -c \eta _{pred} + c \varphi _{meet}\cr}\right.$$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $$\varphi _{meet} = \eta _{prey}\eta _{pred}$$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $a$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $c$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\varphi_{meet}$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\eta_{prey}$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\eta_{pred}$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\delta\eta$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\varphi=f(\eta(t-dt)+d\varphi$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $d\varphi$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\varphi=f(\eta),\varphi)$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $10^{-3}$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $$\partial_{\eta} g(\eta(t),\varphi(t)); $$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $$\partial_{\varphi} g(\eta(t),\varphi(t)); $$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $$\partial_{\eta} f(\eta(t),\varphi(t)); $$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $$\partial_{\varphi} f(\eta(t),\varphi(t)); $$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $(I-D)$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $k$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $$\left\{\eqalign{\partial_t \eta _{k} ^{pos} &= \eta _{k} ^{vel} \cr \partial_t \eta _{k} ^{vel} &= ( \varphi_k ^{spr} -\varphi _{k+1} ^{spr} + \varphi _{k} ^{dmp}-\varphi _{k+1} ^{dmp})\,/m_k \cr}\right.$$ $$\left\{\eqalign{ \varphi_k ^{spr} &= -k_k (\eta _{k} ^{pos}- \eta _{k-1} ^{pos})\cr \varphi_k ^{spr} &= -d_k (\eta _{k} ^{vel}- \eta _{k-1} ^{vel}) \cr}\right.$$ $$\left\{\eqalign{\eta ^{pos}_{0} &= 0\cr \eta ^{vel}_{0} &= 0\cr \varphi ^{spr}_{N+1} &= 0\cr \varphi ^{dmp}_{N+1} &= 0\cr}\right.$$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $m_k$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $r_k$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $d_k$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $N$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $N+1$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $$\eqalign{\partial_x f^g &= g f^{g-1}\partial_x f + f^g \log f\partial_x g\cr &= f^{g-1}(g\partial_x f + f\partial_x g)\cr}$$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $x/\Delta$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\omega$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $h$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $$ \omega = h ( \eta , \varphi) $$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\eta_1(t)$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\eta_1(t=0)$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $t=0$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\phi_{j}(t)$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\eta_i(t=0)$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $h(t)$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $J$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $T$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $$ J = \psi[\eta(T),\varphi(T) ,h(T)] + \int_0 ^T {l[\eta(\tau),\varphi(\tau),h(\tau)]}\, d\tau $$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\psi$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $l$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $$\eqalign{ \partial_t \eta (t) &= g(\eta(t),\varphi(t)) + W(t) \mu\cr \varphi(t) &= f(\eta(t),\varphi(t))\cr \omega(t) &= h ( \eta(t) , \varphi(t)) + \nu\cr }$$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $t=s_i$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\mu$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $Q$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\nu$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $R$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $W$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $$\left\{\eqalign{ \partial_t \eta_1 &= a_{11} \eta_1 + a_{12} \varphi_2 + a_{13} \varphi_3 + W_{11} \mu_1 + W_{12} \mu_2\cr \partial_t \eta_2 &= a_{21} \varphi_1 + a_{22} \eta_2 + a_{23} \varphi_3 + W_{21} \mu_1 + W_{22} \mu_2\cr \partial_t \eta_3 &= a_{31} \varphi_1 + a_{32} \varphi_2 + a_{33} \eta_3 + W_{31} \mu_1 + W_{32} \mu_2 }\right.$$ $$\left\{\eqalign{ \varphi _1 &= \eta _1\cr \varphi _2 &= \eta _2\cr \varphi _3 &= \eta _3 }\right.$$ $$\left\{\eqalign{ \omega _1 &= \varphi _1 + \nu_1\cr \omega _2 &= \eta _2 + \nu_2 \cr \omega _3 &= \eta _3 + \nu_3 }\right.$$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $g(\tau)$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\tau$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $g(\tau;t)$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $2$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $tau$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $0.2$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\sqrt{\sqrt{2}}$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $g(t,\tau)$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $A_{st}$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $A_{st} + A_{st}^\dagger$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $$ U w V^\dagger $$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $U$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $w$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $V$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\Phi(t+\delta t,t)=\exp{A_{st} \delta t}$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\Phi$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\Phi(t,0)$ \begin{rawhtml} \end{rawhtml} \end{document} texi2html-1.82/test/many_input_files/tex_l2h_res/mini_ker-l2h_cache.pm0000644000175000017500000005674211264347126027757 0ustar flichtenheldflichtenheld $l2h_cache_key = q/$A_{st}$/; $l2h_cache{$l2h_cache_key} = q|$A_{st}$|; $l2h_cache_key = q/$g(t,\tau)$/; $l2h_cache{$l2h_cache_key} = q|$g(t,\tau)$|; $l2h_cache_key = q/$$\eqalign{\partial_x f^g &= g f^{g-1}\partial_x f + f^g \log f\partial_x g\cr &= f^{g-1}(g\partial_x f + f\partial_x g)\cr}$$/; $l2h_cache{$l2h_cache_key} = q|

    \begin{displaymath}\eqalign{\partial_x f^g &= g f^{g-1}\partial_x f + f^g \log f\partial_x g\cr
&= f^{g-1}(g\partial_x f + f\partial_x g)\cr}\end{displaymath}

    |; $l2h_cache_key = q/$\delta\eta$/; $l2h_cache{$l2h_cache_key} = q|$\delta \eta$|; $l2h_cache_key = q/$A_{st} + A_{st}^\dagger$/; $l2h_cache{$l2h_cache_key} = q| $A_{st} + A_{st}^\dagger$|; $l2h_cache_key = q/$\tau$/; $l2h_cache{$l2h_cache_key} = q|$\tau$|; $l2h_cache_key = q/$10^{-3}$/; $l2h_cache{$l2h_cache_key} = q|$10^{-3}$|; $l2h_cache_key = q/$$ \varphi(t) = f(\eta(t),\varphi(t)) $$/; $l2h_cache{$l2h_cache_key} = q|

    \begin{displaymath}
\varphi(t) = f(\eta(t),\varphi(t))
\end{displaymath}

    |; $l2h_cache_key = q/$Q$/; $l2h_cache{$l2h_cache_key} = q|$Q$|; $l2h_cache_key = q/$\varphi=f(\eta(t-dt)+d\varphi$/; $l2h_cache{$l2h_cache_key} = q| $\varphi=f(\eta(t-dt)+d\varphi$|; $l2h_cache_key = q/$m_k$/; $l2h_cache{$l2h_cache_key} = q|$m_k$|; $l2h_cache_key = q/$$\pmatrix{A & B\cr -C^+ & I-D\cr} \pmatrix{\delta \eta\cr \delta \varphi\cr} = \pmatrix{\Gamma\cr \Omega\cr}$$/; $l2h_cache{$l2h_cache_key} = q|

    \begin{displaymath}\pmatrix{A & B\cr
-C^+ & I-D\cr} \pmatrix{\delta \eta\cr
\delta \varphi\cr} = \pmatrix{\Gamma\cr
\Omega\cr}\end{displaymath}

    |; $l2h_cache_key = q/$\eta_1(t)$/; $l2h_cache{$l2h_cache_key} = q|$\eta_1(t)$|; $l2h_cache_key = q/$\omega$/; $l2h_cache{$l2h_cache_key} = q|$\omega$|; $l2h_cache_key = q/$\eta_{pred}$/; $l2h_cache{$l2h_cache_key} = q|$\eta_{pred}$|; $l2h_cache_key = q/$h(t)$/; $l2h_cache{$l2h_cache_key} = q|$h(t)$|; $l2h_cache_key = q/$T$/; $l2h_cache{$l2h_cache_key} = q|$T$|; $l2h_cache_key = q/$\varphi$/; $l2h_cache{$l2h_cache_key} = q|$\varphi$|; $l2h_cache_key = q/$c$/; $l2h_cache{$l2h_cache_key} = q|$c$|; $l2h_cache_key = q/$f$/; $l2h_cache{$l2h_cache_key} = q|$f$|; $l2h_cache_key = q/$\Phi(t+\delta t,t)=\exp{A_{st} \delta t}$/; $l2h_cache{$l2h_cache_key} = q| $\Phi(t+\delta t,t)=\exp{A_{st} \delta t}$|; $l2h_cache_key = q/$$\partial_{\varphi} f(\eta(t),\varphi(t)); $$/; $l2h_cache{$l2h_cache_key} = q|

    \begin{displaymath}\partial_{\varphi} f(\eta(t),\varphi(t));
\end{displaymath}

    |; $l2h_cache_key = q/$U$/; $l2h_cache{$l2h_cache_key} = q|$U$|; $l2h_cache_key = q/$W$/; $l2h_cache{$l2h_cache_key} = q|$W$|; $l2h_cache_key = q/$\delta \eta$/; $l2h_cache{$l2h_cache_key} = q|$\delta \eta$|; $l2h_cache_key = q/$$\partial_{\eta} g(\eta(t),\varphi(t)); $$/; $l2h_cache{$l2h_cache_key} = q|

    \begin{displaymath}\partial_{\eta} g(\eta(t),\varphi(t));
\end{displaymath}

    |; $l2h_cache_key = q/$J$/; $l2h_cache{$l2h_cache_key} = q|$J$|; $l2h_cache_key = q/$N$/; $l2h_cache{$l2h_cache_key} = q|$N$|; $l2h_cache_key = q/$r_k$/; $l2h_cache{$l2h_cache_key} = q|$r_k$|; $l2h_cache_key = q/$\mu$/; $l2h_cache{$l2h_cache_key} = q|$\mu$|; $l2h_cache_key = q/$tau$/; $l2h_cache{$l2h_cache_key} = q|$\tau$|; $l2h_cache_key = q/$t + \delta t$/; $l2h_cache{$l2h_cache_key} = q|$t + \delta t$|; $l2h_cache_key = q/$$\partial_t \eta (t) = g(\eta(t),\varphi(t))$$/; $l2h_cache{$l2h_cache_key} = q|

    \begin{displaymath}\partial_t \eta (t) = g(\eta(t),\varphi(t))\end{displaymath}

    |; $l2h_cache_key = q/$\eta_1(t=0)$/; $l2h_cache{$l2h_cache_key} = q|$\eta_1(t=0)$|; $l2h_cache_key = q/$t=0$/; $l2h_cache{$l2h_cache_key} = q|$t=0$|; $l2h_cache_key = q/$R$/; $l2h_cache{$l2h_cache_key} = q|$R$|; $l2h_cache_key = q/$N+1$/; $l2h_cache{$l2h_cache_key} = q|$N+1$|; $l2h_cache_key = q/$\Phi(t,0)$/; $l2h_cache{$l2h_cache_key} = q|$\Phi(t,0)$|; $l2h_cache_key = q/$g(\tau;t)$/; $l2h_cache{$l2h_cache_key} = q|$g(\tau;t)$|; $l2h_cache_key = q/$$\partial_{\varphi} g(\eta(t),\varphi(t)); $$/; $l2h_cache{$l2h_cache_key} = q|

    \begin{displaymath}\partial_{\varphi} g(\eta(t),\varphi(t));
\end{displaymath}

    |; $l2h_cache_key = q/$$\varphi _{meet} = \eta _{prey}\eta _{pred}$$/; $l2h_cache{$l2h_cache_key} = q|

    \begin{displaymath}\varphi _{meet} = \eta _{prey}\eta _{pred}\end{displaymath}

    |; $l2h_cache_key = q/$\Phi$/; $l2h_cache{$l2h_cache_key} = q|$\Phi$|; $l2h_cache_key = q/$V$/; $l2h_cache{$l2h_cache_key} = q|$V$|; $l2h_cache_key = q/$h$/; $l2h_cache{$l2h_cache_key} = q|$h$|; $l2h_cache_key = q/$g$/; $l2h_cache{$l2h_cache_key} = q|$g$|; $l2h_cache_key = q/$\varphi_{meet}$/; $l2h_cache{$l2h_cache_key} = q| $\varphi_{meet}$|; $l2h_cache_key = q/$$ J = \psi[\eta(T),\varphi(T) ,h(T)] + \int_0 ^T {l[\eta(\tau),\varphi(\tau),h(\tau)]}\, d\tau $$/; $l2h_cache{$l2h_cache_key} = q|

    \begin{displaymath}
J = \psi[\eta(T),\varphi(T) ,h(T)] + \int_0 ^T {l[\eta(\tau),\varphi(\tau),h(\tau)]}\, d\tau
\end{displaymath}

    |; $l2h_cache_key = q/$x\/\Delta$/; $l2h_cache{$l2h_cache_key} = q|$x/\Delta$|; $l2h_cache_key = q/$\eta_{prey}$/; $l2h_cache{$l2h_cache_key} = q|$\eta_{prey}$|; $l2h_cache_key = q/$$\eqalign{\partial_t \eta (t) &= g(\eta(t),\varphi(t))\cr \varphi(t) &= f(\eta(t),\varphi(t))\cr }$$/; $l2h_cache{$l2h_cache_key} = q|

    \begin{displaymath}\eqalign{\partial_t \eta (t) &= g(\eta(t),\varphi(t))\cr
\varphi(t) &= f(\eta(t),\varphi(t))\cr
}\end{displaymath}

    |; $l2h_cache_key = q/$$ \omega = h ( \eta , \varphi) $$/; $l2h_cache{$l2h_cache_key} = q|

    \begin{displaymath}
\omega = h ( \eta , \varphi)
\end{displaymath}

    |; $l2h_cache_key = q/$\varphi=f(\eta),\varphi)$/; $l2h_cache{$l2h_cache_key} = q| $\varphi=f(\eta),\varphi)$|; $l2h_cache_key = q/$$\partial_{\eta} f(\eta(t),\varphi(t)); $$/; $l2h_cache{$l2h_cache_key} = q|

    \begin{displaymath}\partial_{\eta} f(\eta(t),\varphi(t));
\end{displaymath}

    |; $l2h_cache_key = q/$(I-D)$/; $l2h_cache{$l2h_cache_key} = q|$(I-D)$|; $l2h_cache_key = q/$\sqrt{\sqrt{2}}$/; $l2h_cache{$l2h_cache_key} = q| $\sqrt{\sqrt{2}}$|; $l2h_cache_key = q/$t=s_i$/; $l2h_cache{$l2h_cache_key} = q|$t=s_i$|; $l2h_cache_key = q/$\delta \varphi$/; $l2h_cache{$l2h_cache_key} = q| $\delta \varphi$|; $l2h_cache_key = q/$0.2$/; $l2h_cache{$l2h_cache_key} = q|$0.2$|; $l2h_cache_key = q/$$\left\{\eqalign{\partial_t \eta _{k} ^{pos} &= \eta _{k} ^{vel} \cr \partial_t \eta _{k} ^{vel} &= ( \varphi_k ^{spr} -\varphi _{k+1} ^{spr} + \varphi _{k} ^{dmp}-\varphi _{k+1} ^{dmp})\,\/m_k \cr}\right.$$ $$\left\{\eqalign{ \varphi_k ^{spr} &= -k_k (\eta _{k} ^{pos}- \eta _{k-1} ^{pos})\cr \varphi_k ^{spr} &= -d_k (\eta _{k} ^{vel}- \eta _{k-1} ^{vel}) \cr}\right.$$ $$\left\{\eqalign{\eta ^{pos}_{0} &= 0\cr \eta ^{vel}_{0} &= 0\cr \varphi ^{spr}_{N+1} &= 0\cr \varphi ^{dmp}_{N+1} &= 0\cr}\right.$$/; $l2h_cache{$l2h_cache_key} = q|

    \begin{displaymath}\left\{\eqalign{\partial_t \eta _{k} ^{pos} &= \eta _{k} ^{ve...
... + \varphi _{k} ^{dmp}-\varphi _{k+1} ^{dmp})\,/m_k \cr}\right.\end{displaymath}


    \begin{displaymath}\left\{\eqalign{
\varphi_k ^{spr} &= -k_k (\eta _{k} ^{pos}- ...
...spr} &= -d_k (\eta _{k} ^{vel}- \eta _{k-1} ^{vel})
\cr}\right.\end{displaymath}


    \begin{displaymath}\left\{\eqalign{\eta ^{pos}_{0} &= 0\cr
\eta ^{vel}_{0} &= 0\...
...arphi ^{spr}_{N+1} &= 0\cr
\varphi ^{dmp}_{N+1} &= 0\cr}\right.\end{displaymath}

    |; $l2h_cache_key = q/$a$/; $l2h_cache{$l2h_cache_key} = q|$a$|; $l2h_cache_key = q/$l$/; $l2h_cache{$l2h_cache_key} = q|$l$|; $l2h_cache_key = q/$\eta$/; $l2h_cache{$l2h_cache_key} = q|$\eta$|; $l2h_cache_key = q/$d\varphi$/; $l2h_cache{$l2h_cache_key} = q|$d\varphi$|; $l2h_cache_key = q/$$\eqalign{ \partial_t \eta (t) &= g(\eta(t),\varphi(t)) + W(t) \mu\cr \varphi(t) &= f(\eta(t),\varphi(t))\cr \omega(t) &= h ( \eta(t) , \varphi(t)) + \nu\cr }$$/; $l2h_cache{$l2h_cache_key} = q|

    \begin{displaymath}\eqalign{
\partial_t \eta (t) &= g(\eta(t),\varphi(t)) + W(t)...
...varphi(t))\cr
\omega(t) &= h ( \eta(t) , \varphi(t)) + \nu\cr
}\end{displaymath}

    |; $l2h_cache_key = q/$$ U w V^\dagger $$/; $l2h_cache{$l2h_cache_key} = q|

    \begin{displaymath}
U w V^\dagger
\end{displaymath}

    |; $l2h_cache_key = q/$\eta_i(t=0)$/; $l2h_cache{$l2h_cache_key} = q|$\eta_i(t=0)$|; $l2h_cache_key = q/$\nu$/; $l2h_cache{$l2h_cache_key} = q|$\nu$|; $l2h_cache_key = q/$k$/; $l2h_cache{$l2h_cache_key} = q|$k$|; $l2h_cache_key = q/$d_k$/; $l2h_cache{$l2h_cache_key} = q|$d_k$|; $l2h_cache_key = q/$$\left\{\eqalign{\partial_t \eta _{prey} &= a \eta _{prey} - a \varphi _{meet} \cr \partial_t \eta _{pred} &= -c \eta _{pred} + c \varphi _{meet}\cr}\right.$$/; $l2h_cache{$l2h_cache_key} = q|

    \begin{displaymath}\left\{\eqalign{\partial_t \eta _{prey} &= a \eta _{prey} - a...
... \eta _{pred} &= -c \eta _{pred} + c \varphi _{meet}\cr}\right.\end{displaymath}

    |; $l2h_cache_key = q/$\delta t$/; $l2h_cache{$l2h_cache_key} = q|$\delta t$|; $l2h_cache_key = q/$g(\tau)$/; $l2h_cache{$l2h_cache_key} = q|$g(\tau)$|; $l2h_cache_key = q/$\psi$/; $l2h_cache{$l2h_cache_key} = q|$\psi$|; $l2h_cache_key = q/$\phi_{j}(t)$/; $l2h_cache{$l2h_cache_key} = q|$\phi_{j}(t)$|; $l2h_cache_key = q/$w$/; $l2h_cache{$l2h_cache_key} = q|$w$|; $l2h_cache_key = q/$$\left\{\eqalign{ \partial_t \eta_1 &= a_{11} \eta_1 + a_{12} \varphi_2 + a_{13} \varphi_3 + W_{11} \mu_1 + W_{12} \mu_2\cr \partial_t \eta_2 &= a_{21} \varphi_1 + a_{22} \eta_2 + a_{23} \varphi_3 + W_{21} \mu_1 + W_{22} \mu_2\cr \partial_t \eta_3 &= a_{31} \varphi_1 + a_{32} \varphi_2 + a_{33} \eta_3 + W_{31} \mu_1 + W_{32} \mu_2 }\right.$$ $$\left\{\eqalign{ \varphi _1 &= \eta _1\cr \varphi _2 &= \eta _2\cr \varphi _3 &= \eta _3 }\right.$$ $$\left\{\eqalign{ \omega _1 &= \varphi _1 + \nu_1\cr \omega _2 &= \eta _2 + \nu_2 \cr \omega _3 &= \eta _3 + \nu_3 }\right.$$/; $l2h_cache{$l2h_cache_key} = q|

    \begin{displaymath}\left\{\eqalign{
\partial_t \eta_1 &= a_{11} \eta_1 + a_{12} ...
...varphi_2 + a_{33} \eta_3 + W_{31} \mu_1 + W_{32} \mu_2
}\right.\end{displaymath}


    \begin{displaymath}\left\{\eqalign{
\varphi _1 &= \eta _1\cr
\varphi _2 &= \eta _2\cr
\varphi _3 &= \eta _3
}\right.\end{displaymath}


    \begin{displaymath}\left\{\eqalign{
\omega _1 &= \varphi _1 + \nu_1\cr
\omega _2 &= \eta _2 + \nu_2 \cr
\omega _3 &= \eta _3 + \nu_3
}\right.\end{displaymath}

    |; $l2h_cache_key = q/$2$/; $l2h_cache{$l2h_cache_key} = q|$2$|; $l2h_cache_key = q/$t$/; $l2h_cache{$l2h_cache_key} = q|$t$|; 1;texi2html-1.82/test/many_input_files/tex_l2h_res/tex_l2h_labels.pl0000644000175000017500000000021011264347126027215 0ustar flichtenheldflichtenheld# LaTeX2HTML # Associate labels original text with physical files. 1; # LaTeX2HTML # labels from external_latex_labels array. 1; texi2html-1.82/test/many_input_files/tex_l2h_res/tex_l2h_images.pl0000644000175000017500000000226611264347126027235 0ustar flichtenheldflichtenheld# LaTeX2HTML # Associate images original text with physical files. $key = q/{displaymath}chi^2=sum_{i=1}^Nleft(y_i-(a+bx_i)oversigma_iright)^2{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}\chi^2 = \sum_{i=1}^N
\left(y_i - (a + b x_i)
\over \sigma_i\right)^2 \end{displaymath}|; $key = q/@code{mathcode};MSF=1.5;AAT/; $cached_env_img{$key} = q|$@code{math code}$|; $key = q/{x^i}over{tany};MSF=1.5;AAT/; $cached_env_img{$key} = q|${x^i}\over{\tan y}$|; $key = q/a@b;MSF=1.5;AAT/; $cached_env_img{$key} = q|$a @ b$|; $key = q/underline{@code{mathhbox{code}}}sum_{i}{underline{f}};MSF=1.5;AAT/; $cached_env_img{$key} = q|$ \underline{@code{math \hbox{ code }}} \sum_{i}{\underline{f}}$|; 1; texi2html-1.82/test/many_input_files/tex_l2h_res/tex_l2h_images.tex0000644000175000017500000001536111264347126027422 0ustar flichtenheldflichtenheld\batchmode \documentclass{article} \RequirePackage{ifthen} \usepackage{html} \usepackage[dvips]{color} \pagecolor[gray]{.7} \usepackage[]{inputenc} \makeatletter \makeatletter \count@=\the\catcode`\_ \catcode`\_=8 \newenvironment{tex2html_wrap}{}{}% \catcode`\<=12\catcode`\_=\count@ \newcommand{\providedcommand}[1]{\expandafter\providecommand\csname #1\endcsname}% \newcommand{\renewedcommand}[1]{\expandafter\providecommand\csname #1\endcsname{}% \expandafter\renewcommand\csname #1\endcsname}% \newcommand{\newedenvironment}[1]{\newenvironment{#1}{}{}\renewenvironment{#1}}% \let\newedcommand\renewedcommand \let\renewedenvironment\newedenvironment \makeatother \let\mathon=$ \let\mathoff=$ \ifx\AtBeginDocument\undefined \newcommand{\AtBeginDocument}[1]{}\fi \newbox\sizebox \setlength{\hoffset}{0pt}\setlength{\voffset}{0pt} \addtolength{\textheight}{\footskip}\setlength{\footskip}{0pt} \addtolength{\textheight}{\topmargin}\setlength{\topmargin}{0pt} \addtolength{\textheight}{\headheight}\setlength{\headheight}{0pt} \addtolength{\textheight}{\headsep}\setlength{\headsep}{0pt} \setlength{\textwidth}{451pt} \setlength{\textheight}{554pt} \newwrite\lthtmlwrite \makeatletter \let\realnormalsize=\normalsize \global\topskip=2sp \def\preveqno{}\let\real@float=\@float \let\realend@float=\end@float \def\@float{\let\@savefreelist\@freelist\real@float} \def\liih@math{\ifmmode$\else\bad@math\fi} \def\end@float{\realend@float\global\let\@freelist\@savefreelist} \let\real@dbflt=\@dbflt \let\end@dblfloat=\end@float \let\@largefloatcheck=\relax \let\if@boxedmulticols=\iftrue \def\@dbflt{\let\@savefreelist\@freelist\real@dbflt} \def\adjustnormalsize{\def\normalsize{\mathsurround=0pt \realnormalsize \parindent=0pt\abovedisplayskip=0pt\belowdisplayskip=0pt}% \def\phantompar{\csname par\endcsname}\normalsize}% \def\lthtmltypeout#1{{\let\protect\string \immediate\write\lthtmlwrite{#1}}}% \newcommand\lthtmlhboxmathA{\adjustnormalsize\setbox\sizebox=\hbox\bgroup\kern.05em }% \newcommand\lthtmlhboxmathB{\adjustnormalsize\setbox\sizebox=\hbox to\hsize\bgroup\hfill }% \newcommand\lthtmlvboxmathA{\adjustnormalsize\setbox\sizebox=\vbox\bgroup % \let\ifinner=\iffalse \let\)\liih@math }% \newcommand\lthtmlboxmathZ{\@next\next\@currlist{}{\def\next{\voidb@x}}% \expandafter\box\next\egroup}% \newcommand\lthtmlmathtype[1]{\gdef\lthtmlmathenv{#1}}% \newcommand\lthtmllogmath{\dimen0\ht\sizebox \advance\dimen0\dp\sizebox \ifdim\dimen0>.95\vsize \lthtmltypeout{% *** image for \lthtmlmathenv\space is too tall at \the\dimen0, reducing to .95 vsize ***}% \ht\sizebox.95\vsize \dp\sizebox\z@ \fi \lthtmltypeout{l2hSize % :\lthtmlmathenv:\the\ht\sizebox::\the\dp\sizebox::\the\wd\sizebox.\preveqno}}% \newcommand\lthtmlfigureA[1]{\let\@savefreelist\@freelist \lthtmlmathtype{#1}\lthtmlvboxmathA}% \newcommand\lthtmlpictureA{\bgroup\catcode`\_=8 \lthtmlpictureB}% \newcommand\lthtmlpictureB[1]{\lthtmlmathtype{#1}\egroup \let\@savefreelist\@freelist \lthtmlhboxmathB}% \newcommand\lthtmlpictureZ[1]{\hfill\lthtmlfigureZ}% \newcommand\lthtmlfigureZ{\lthtmlboxmathZ\lthtmllogmath\copy\sizebox \global\let\@freelist\@savefreelist}% \newcommand\lthtmldisplayA{\bgroup\catcode`\_=8 \lthtmldisplayAi}% \newcommand\lthtmldisplayAi[1]{\lthtmlmathtype{#1}\egroup\lthtmlvboxmathA}% \newcommand\lthtmldisplayB[1]{\edef\preveqno{(\theequation)}% \lthtmldisplayA{#1}\let\@eqnnum\relax}% \newcommand\lthtmldisplayZ{\lthtmlboxmathZ\lthtmllogmath\lthtmlsetmath}% \newcommand\lthtmlinlinemathA{\bgroup\catcode`\_=8 \lthtmlinlinemathB} \newcommand\lthtmlinlinemathB[1]{\lthtmlmathtype{#1}\egroup\lthtmlhboxmathA \vrule height1.5ex width0pt }% \newcommand\lthtmlinlineA{\bgroup\catcode`\_=8 \lthtmlinlineB}% \newcommand\lthtmlinlineB[1]{\lthtmlmathtype{#1}\egroup\lthtmlhboxmathA}% \newcommand\lthtmlinlineZ{\egroup\expandafter\ifdim\dp\sizebox>0pt % \expandafter\centerinlinemath\fi\lthtmllogmath\lthtmlsetinline} \newcommand\lthtmlinlinemathZ{\egroup\expandafter\ifdim\dp\sizebox>0pt % \expandafter\centerinlinemath\fi\lthtmllogmath\lthtmlsetmath} \newcommand\lthtmlindisplaymathZ{\egroup % \centerinlinemath\lthtmllogmath\lthtmlsetmath} \def\lthtmlsetinline{\hbox{\vrule width.1em \vtop{\vbox{% \kern.1em\copy\sizebox}\ifdim\dp\sizebox>0pt\kern.1em\else\kern.3pt\fi \ifdim\hsize>\wd\sizebox \hrule depth1pt\fi}}} \def\lthtmlsetmath{\hbox{\vrule width.1em\kern-.05em\vtop{\vbox{% \kern.1em\kern0.75 pt\hbox{\hglue.17em\copy\sizebox\hglue0.75 pt}}\kern.3pt% \ifdim\dp\sizebox>0pt\kern.1em\fi \kern0.75 pt% \ifdim\hsize>\wd\sizebox \hrule depth1pt\fi}}} \def\centerinlinemath{% \dimen1=\ifdim\ht\sizebox<\dp\sizebox \dp\sizebox\else\ht\sizebox\fi \advance\dimen1by.5pt \vrule width0pt height\dimen1 depth\dimen1 \dp\sizebox=\dimen1\ht\sizebox=\dimen1\relax} \def\lthtmlcheckvsize{\ifdim\ht\sizebox<\vsize \ifdim\wd\sizebox<\hsize\expandafter\hfill\fi \expandafter\vfill \else\expandafter\vss\fi}% \providecommand{\selectlanguage}[1]{}% \makeatletter \tracingstats = 1 \begin{document} \pagestyle{empty}\thispagestyle{empty}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength hsize=\the\hsize}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength vsize=\the\vsize}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength hoffset=\the\hoffset}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength voffset=\the\voffset}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength topmargin=\the\topmargin}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength topskip=\the\topskip}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength headheight=\the\headheight}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength headsep=\the\headsep}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength parskip=\the\parskip}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength oddsidemargin=\the\oddsidemargin}\lthtmltypeout{}% \makeatletter \if@twoside\lthtmltypeout{latex2htmlLength evensidemargin=\the\evensidemargin}% \else\lthtmltypeout{latex2htmlLength evensidemargin=\the\oddsidemargin}\fi% \lthtmltypeout{}% \makeatother \setcounter{page}{1} \onecolumn % !!! IMAGES START HERE !!! {\newpage\clearpage \lthtmldisplayA{displaymath15}% \begin{displaymath} \chi^2 = \sum_{i=1}^N \left(y_i - (a + b x_i) \over \sigma_i\right)^2 \end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline17}% ${x^i}\over{\tan y}$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline19}% $a @\ b$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline21}% $@code{math code}$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline23}% $ \underline{@code{math \hbox{ code }}} \sum_{i}{\underline{f}}$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} \end{document} texi2html-1.82/test/many_input_files/tex_l2h_res/tex_l2h.20000644000175000017500000000017211264347126025430 0ustar flichtenheldflichtenheldtexexpand ** no image file for heavyside, (using heavyside.jpg) texexpand ** Unknown command `@\' (left as is) (l. 42) texi2html-1.82/test/many_input_files/tex_l2h_res/mini_ker_l2h_images.tex0000644000175000017500000004404211264347126030415 0ustar flichtenheldflichtenheld\batchmode \documentclass{article} \RequirePackage{ifthen} \usepackage{html} \usepackage[dvips]{color} \pagecolor[gray]{.7} \usepackage[]{inputenc} \makeatletter \makeatletter \count@=\the\catcode`\_ \catcode`\_=8 \newenvironment{tex2html_wrap}{}{}% \catcode`\<=12\catcode`\_=\count@ \newcommand{\providedcommand}[1]{\expandafter\providecommand\csname #1\endcsname}% \newcommand{\renewedcommand}[1]{\expandafter\providecommand\csname #1\endcsname{}% \expandafter\renewcommand\csname #1\endcsname}% \newcommand{\newedenvironment}[1]{\newenvironment{#1}{}{}\renewenvironment{#1}}% \let\newedcommand\renewedcommand \let\renewedenvironment\newedenvironment \makeatother \let\mathon=$ \let\mathoff=$ \ifx\AtBeginDocument\undefined \newcommand{\AtBeginDocument}[1]{}\fi \newbox\sizebox \setlength{\hoffset}{0pt}\setlength{\voffset}{0pt} \addtolength{\textheight}{\footskip}\setlength{\footskip}{0pt} \addtolength{\textheight}{\topmargin}\setlength{\topmargin}{0pt} \addtolength{\textheight}{\headheight}\setlength{\headheight}{0pt} \addtolength{\textheight}{\headsep}\setlength{\headsep}{0pt} \setlength{\textwidth}{451pt} \setlength{\textheight}{554pt} \newwrite\lthtmlwrite \makeatletter \let\realnormalsize=\normalsize \global\topskip=2sp \def\preveqno{}\let\real@float=\@float \let\realend@float=\end@float \def\@float{\let\@savefreelist\@freelist\real@float} \def\liih@math{\ifmmode$\else\bad@math\fi} \def\end@float{\realend@float\global\let\@freelist\@savefreelist} \let\real@dbflt=\@dbflt \let\end@dblfloat=\end@float \let\@largefloatcheck=\relax \let\if@boxedmulticols=\iftrue \def\@dbflt{\let\@savefreelist\@freelist\real@dbflt} \def\adjustnormalsize{\def\normalsize{\mathsurround=0pt \realnormalsize \parindent=0pt\abovedisplayskip=0pt\belowdisplayskip=0pt}% \def\phantompar{\csname par\endcsname}\normalsize}% \def\lthtmltypeout#1{{\let\protect\string \immediate\write\lthtmlwrite{#1}}}% \newcommand\lthtmlhboxmathA{\adjustnormalsize\setbox\sizebox=\hbox\bgroup\kern.05em }% \newcommand\lthtmlhboxmathB{\adjustnormalsize\setbox\sizebox=\hbox to\hsize\bgroup\hfill }% \newcommand\lthtmlvboxmathA{\adjustnormalsize\setbox\sizebox=\vbox\bgroup % \let\ifinner=\iffalse \let\)\liih@math }% \newcommand\lthtmlboxmathZ{\@next\next\@currlist{}{\def\next{\voidb@x}}% \expandafter\box\next\egroup}% \newcommand\lthtmlmathtype[1]{\gdef\lthtmlmathenv{#1}}% \newcommand\lthtmllogmath{\dimen0\ht\sizebox \advance\dimen0\dp\sizebox \ifdim\dimen0>.95\vsize \lthtmltypeout{% *** image for \lthtmlmathenv\space is too tall at \the\dimen0, reducing to .95 vsize ***}% \ht\sizebox.95\vsize \dp\sizebox\z@ \fi \lthtmltypeout{l2hSize % :\lthtmlmathenv:\the\ht\sizebox::\the\dp\sizebox::\the\wd\sizebox.\preveqno}}% \newcommand\lthtmlfigureA[1]{\let\@savefreelist\@freelist \lthtmlmathtype{#1}\lthtmlvboxmathA}% \newcommand\lthtmlpictureA{\bgroup\catcode`\_=8 \lthtmlpictureB}% \newcommand\lthtmlpictureB[1]{\lthtmlmathtype{#1}\egroup \let\@savefreelist\@freelist \lthtmlhboxmathB}% \newcommand\lthtmlpictureZ[1]{\hfill\lthtmlfigureZ}% \newcommand\lthtmlfigureZ{\lthtmlboxmathZ\lthtmllogmath\copy\sizebox \global\let\@freelist\@savefreelist}% \newcommand\lthtmldisplayA{\bgroup\catcode`\_=8 \lthtmldisplayAi}% \newcommand\lthtmldisplayAi[1]{\lthtmlmathtype{#1}\egroup\lthtmlvboxmathA}% \newcommand\lthtmldisplayB[1]{\edef\preveqno{(\theequation)}% \lthtmldisplayA{#1}\let\@eqnnum\relax}% \newcommand\lthtmldisplayZ{\lthtmlboxmathZ\lthtmllogmath\lthtmlsetmath}% \newcommand\lthtmlinlinemathA{\bgroup\catcode`\_=8 \lthtmlinlinemathB} \newcommand\lthtmlinlinemathB[1]{\lthtmlmathtype{#1}\egroup\lthtmlhboxmathA \vrule height1.5ex width0pt }% \newcommand\lthtmlinlineA{\bgroup\catcode`\_=8 \lthtmlinlineB}% \newcommand\lthtmlinlineB[1]{\lthtmlmathtype{#1}\egroup\lthtmlhboxmathA}% \newcommand\lthtmlinlineZ{\egroup\expandafter\ifdim\dp\sizebox>0pt % \expandafter\centerinlinemath\fi\lthtmllogmath\lthtmlsetinline} \newcommand\lthtmlinlinemathZ{\egroup\expandafter\ifdim\dp\sizebox>0pt % \expandafter\centerinlinemath\fi\lthtmllogmath\lthtmlsetmath} \newcommand\lthtmlindisplaymathZ{\egroup % \centerinlinemath\lthtmllogmath\lthtmlsetmath} \def\lthtmlsetinline{\hbox{\vrule width.1em \vtop{\vbox{% \kern.1em\copy\sizebox}\ifdim\dp\sizebox>0pt\kern.1em\else\kern.3pt\fi \ifdim\hsize>\wd\sizebox \hrule depth1pt\fi}}} \def\lthtmlsetmath{\hbox{\vrule width.1em\kern-.05em\vtop{\vbox{% \kern.1em\kern0.75 pt\hbox{\hglue.17em\copy\sizebox\hglue0.75 pt}}\kern.3pt% \ifdim\dp\sizebox>0pt\kern.1em\fi \kern0.75 pt% \ifdim\hsize>\wd\sizebox \hrule depth1pt\fi}}} \def\centerinlinemath{% \dimen1=\ifdim\ht\sizebox<\dp\sizebox \dp\sizebox\else\ht\sizebox\fi \advance\dimen1by.5pt \vrule width0pt height\dimen1 depth\dimen1 \dp\sizebox=\dimen1\ht\sizebox=\dimen1\relax} \def\lthtmlcheckvsize{\ifdim\ht\sizebox<\vsize \ifdim\wd\sizebox<\hsize\expandafter\hfill\fi \expandafter\vfill \else\expandafter\vss\fi}% \providecommand{\selectlanguage}[1]{}% \makeatletter \tracingstats = 1 \begin{document} \pagestyle{empty}\thispagestyle{empty}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength hsize=\the\hsize}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength vsize=\the\vsize}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength hoffset=\the\hoffset}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength voffset=\the\voffset}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength topmargin=\the\topmargin}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength topskip=\the\topskip}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength headheight=\the\headheight}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength headsep=\the\headsep}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength parskip=\the\parskip}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength oddsidemargin=\the\oddsidemargin}\lthtmltypeout{}% \makeatletter \if@twoside\lthtmltypeout{latex2htmlLength evensidemargin=\the\evensidemargin}% \else\lthtmltypeout{latex2htmlLength evensidemargin=\the\oddsidemargin}\fi% \lthtmltypeout{}% \makeatother \setcounter{page}{1} \onecolumn % !!! IMAGES START HERE !!! {\newpage\clearpage \lthtmldisplayA{displaymath92}% \begin{displaymath}\partial_t \eta (t) = g(\eta(t),\varphi(t))\end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline94}% $\eta$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline96}% $\varphi$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath98}% \begin{displaymath} \varphi(t) = f(\eta(t),\varphi(t)) \end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline100}% $t$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline102}% $t + \delta t$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline104}% $\delta \eta$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline106}% $\delta \varphi$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath108}% \begin{displaymath}\pmatrix{A & B\cr -C^+ & I-D\cr} \pmatrix{\delta \eta\cr \delta \varphi\cr} = \pmatrix{\Gamma\cr \Omega\cr}\end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline110}% $f$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline112}% $g$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline114}% $\delta t$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath116}% \begin{displaymath}\eqalign{\partial_t \eta (t) &= g(\eta(t),\varphi(t))\cr \varphi(t) &= f(\eta(t),\varphi(t))\cr }\end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath118}% \begin{displaymath}\left\{\eqalign{\partial_t \eta _{prey} &= a \eta _{prey} - a \varphi _{meet} \cr \partial_t \eta _{pred} &= -c \eta _{pred} + c \varphi _{meet}\cr}\right.\end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath120}% \begin{displaymath}\varphi _{meet} = \eta _{prey}\eta _{pred}\end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline122}% $a$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline124}% $c$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline126}% $\varphi_{meet}$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline128}% $\eta_{prey}$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline130}% $\eta_{pred}$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline134}% $\varphi=f(\eta(t-dt)+d\varphi$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline136}% $d\varphi$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline138}% $\varphi=f(\eta),\varphi)$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline140}% $10^{-3}$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath142}% \begin{displaymath}\partial_{\eta} g(\eta(t),\varphi(t)); \end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath144}% \begin{displaymath}\partial_{\varphi} g(\eta(t),\varphi(t)); \end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath146}% \begin{displaymath}\partial_{\eta} f(\eta(t),\varphi(t)); \end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath148}% \begin{displaymath}\partial_{\varphi} f(\eta(t),\varphi(t)); \end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline150}% $(I-D)$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline152}% $k$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath154}% \begin{displaymath}\left\{\eqalign{\partial_t \eta _{k} ^{pos} &= \eta _{k} ^{vel} \cr \partial_t \eta _{k} ^{vel} &= ( \varphi_k ^{spr} -\varphi _{k+1} ^{spr} + \varphi _{k} ^{dmp}-\varphi _{k+1} ^{dmp})\,/m_k \cr}\right.\end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath156}% \begin{displaymath}\left\{\eqalign{ \varphi_k ^{spr} &= -k_k (\eta _{k} ^{pos}- \eta _{k-1} ^{pos})\cr \varphi_k ^{spr} &= -d_k (\eta _{k} ^{vel}- \eta _{k-1} ^{vel}) \cr}\right.\end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath158}% \begin{displaymath}\left\{\eqalign{\eta ^{pos}_{0} &= 0\cr \eta ^{vel}_{0} &= 0\cr \varphi ^{spr}_{N+1} &= 0\cr \varphi ^{dmp}_{N+1} &= 0\cr}\right.\end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline160}% $m_k$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline162}% $r_k$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline164}% $d_k$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline166}% $N$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline168}% $N+1$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath170}% \begin{displaymath}\eqalign{\partial_x f^g &= g f^{g-1}\partial_x f + f^g \log f\partial_x g\cr &= f^{g-1}(g\partial_x f + f\partial_x g)\cr}\end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline172}% $x/\Delta$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline174}% $\omega$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline176}% $h$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath178}% \begin{displaymath} \omega = h ( \eta , \varphi) \end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline180}% $\eta_1(t)$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline182}% $\eta_1(t=0)$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline184}% $t=0$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline186}% $\phi_{j}(t)$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline188}% $\eta_i(t=0)$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline190}% $h(t)$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline192}% $J$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline194}% $T$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath196}% \begin{displaymath} J = \psi[\eta(T),\varphi(T) ,h(T)] + \int_0 ^T {l[\eta(\tau),\varphi(\tau),h(\tau)]}\, d\tau \end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline198}% $\psi$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline200}% $l$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath202}% \begin{displaymath}\eqalign{ \partial_t \eta (t) &= g(\eta(t),\varphi(t)) + W(t) \mu\cr \varphi(t) &= f(\eta(t),\varphi(t))\cr \omega(t) &= h ( \eta(t) , \varphi(t)) + \nu\cr }\end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline204}% $t=s_i$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline206}% $\mu$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline208}% $Q$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline210}% $\nu$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline212}% $R$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline214}% $W$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath216}% \begin{displaymath}\left\{\eqalign{ \partial_t \eta_1 &= a_{11} \eta_1 + a_{12} \varphi_2 + a_{13} \varphi_3 + W_{11} \mu_1 + W_{12} \mu_2\cr \partial_t \eta_2 &= a_{21} \varphi_1 + a_{22} \eta_2 + a_{23} \varphi_3 + W_{21} \mu_1 + W_{22} \mu_2\cr \partial_t \eta_3 &= a_{31} \varphi_1 + a_{32} \varphi_2 + a_{33} \eta_3 + W_{31} \mu_1 + W_{32} \mu_2 }\right.\end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath218}% \begin{displaymath}\left\{\eqalign{ \varphi _1 &= \eta _1\cr \varphi _2 &= \eta _2\cr \varphi _3 &= \eta _3 }\right.\end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath220}% \begin{displaymath}\left\{\eqalign{ \omega _1 &= \varphi _1 + \nu_1\cr \omega _2 &= \eta _2 + \nu_2 \cr \omega _3 &= \eta _3 + \nu_3 }\right.\end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline222}% $g(\tau)$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline224}% $\tau$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline226}% $g(\tau;t)$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline228}% $2$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline232}% $0.2$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline234}% $\sqrt{\sqrt{2}}$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline236}% $g(t,\tau)$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline238}% $A_{st}$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline240}% $A_{st} + A_{st}^\dagger$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath242}% \begin{displaymath} U w V^\dagger \end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline244}% $U$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline246}% $w$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline248}% $V$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline250}% $\Phi(t+\delta t,t)=\exp{A_{st} \delta t}$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline252}% $\Phi$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline254}% $\Phi(t,0)$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} \end{document} texi2html-1.82/test/many_input_files/tex_l2h_res/mini_ker_l2h.html0000644000175000017500000005617511264347126027246 0ustar flichtenheldflichtenheld mini_ker_l2h

    \begin{displaymath}\partial_t \eta (t) = g(\eta(t),\varphi(t))\end{displaymath}

    $\eta$ $\varphi$

    \begin{displaymath}
\varphi(t) = f(\eta(t),\varphi(t))
\end{displaymath}

    $t$ $t + \delta t$ $\delta \eta$ $\delta \varphi$

    \begin{displaymath}\pmatrix{A & B\cr
-C^+ & I-D\cr} \pmatrix{\delta \eta\cr
\delta \varphi\cr} = \pmatrix{\Gamma\cr
\Omega\cr}\end{displaymath}

    $f$ $g$ $\delta t$

    \begin{displaymath}\eqalign{\partial_t \eta (t) &= g(\eta(t),\varphi(t))\cr
\varphi(t) &= f(\eta(t),\varphi(t))\cr
}\end{displaymath}


    \begin{displaymath}\left\{\eqalign{\partial_t \eta _{prey} &= a \eta _{prey} - a...
... \eta _{pred} &= -c \eta _{pred} + c \varphi _{meet}\cr}\right.\end{displaymath}


    \begin{displaymath}\varphi _{meet} = \eta _{prey}\eta _{pred}\end{displaymath}

    $a$ $c$ $\varphi_{meet}$ $\eta_{prey}$ $\eta_{pred}$ $\delta \eta$ $\varphi=f(\eta(t-dt)+d\varphi$ $d\varphi$ $\varphi=f(\eta),\varphi)$ $10^{-3}$

    \begin{displaymath}\partial_{\eta} g(\eta(t),\varphi(t));
\end{displaymath}


    \begin{displaymath}\partial_{\varphi} g(\eta(t),\varphi(t));
\end{displaymath}


    \begin{displaymath}\partial_{\eta} f(\eta(t),\varphi(t));
\end{displaymath}


    \begin{displaymath}\partial_{\varphi} f(\eta(t),\varphi(t));
\end{displaymath}

    $(I-D)$ $k$

    \begin{displaymath}\left\{\eqalign{\partial_t \eta _{k} ^{pos} &= \eta _{k} ^{ve...
... + \varphi _{k} ^{dmp}-\varphi _{k+1} ^{dmp})\,/m_k \cr}\right.\end{displaymath}


    \begin{displaymath}\left\{\eqalign{
\varphi_k ^{spr} &= -k_k (\eta _{k} ^{pos}- ...
...spr} &= -d_k (\eta _{k} ^{vel}- \eta _{k-1} ^{vel})
\cr}\right.\end{displaymath}


    \begin{displaymath}\left\{\eqalign{\eta ^{pos}_{0} &= 0\cr
\eta ^{vel}_{0} &= 0\...
...arphi ^{spr}_{N+1} &= 0\cr
\varphi ^{dmp}_{N+1} &= 0\cr}\right.\end{displaymath}

    $m_k$ $r_k$ $d_k$ $N$ $N+1$

    \begin{displaymath}\eqalign{\partial_x f^g &= g f^{g-1}\partial_x f + f^g \log f\partial_x g\cr
&= f^{g-1}(g\partial_x f + f\partial_x g)\cr}\end{displaymath}

    $x/\Delta$ $\omega$ $h$

    \begin{displaymath}
\omega = h ( \eta , \varphi)
\end{displaymath}

    $\eta_1(t)$ $\eta_1(t=0)$ $t=0$ $\phi_{j}(t)$ $\eta_i(t=0)$ $h(t)$ $J$ $T$

    \begin{displaymath}
J = \psi[\eta(T),\varphi(T) ,h(T)] + \int_0 ^T {l[\eta(\tau),\varphi(\tau),h(\tau)]}\, d\tau
\end{displaymath}

    $\psi$ $l$

    \begin{displaymath}\eqalign{
\partial_t \eta (t) &= g(\eta(t),\varphi(t)) + W(t)...
...varphi(t))\cr
\omega(t) &= h ( \eta(t) , \varphi(t)) + \nu\cr
}\end{displaymath}

    $t=s_i$ $\mu$ $Q$ $\nu$ $R$ $W$

    \begin{displaymath}\left\{\eqalign{
\partial_t \eta_1 &= a_{11} \eta_1 + a_{12} ...
...varphi_2 + a_{33} \eta_3 + W_{31} \mu_1 + W_{32} \mu_2
}\right.\end{displaymath}


    \begin{displaymath}\left\{\eqalign{
\varphi _1 &= \eta _1\cr
\varphi _2 &= \eta _2\cr
\varphi _3 &= \eta _3
}\right.\end{displaymath}


    \begin{displaymath}\left\{\eqalign{
\omega _1 &= \varphi _1 + \nu_1\cr
\omega _2 &= \eta _2 + \nu_2 \cr
\omega _3 &= \eta _3 + \nu_3
}\right.\end{displaymath}

    $g(\tau)$ $\tau$ $g(\tau;t)$ $2$ $\tau$ $0.2$ $\sqrt{\sqrt{2}}$ $g(t,\tau)$ $A_{st}$ $A_{st} + A_{st}^\dagger$

    \begin{displaymath}
U w V^\dagger
\end{displaymath}

    $U$ $w$ $V$ $\Phi(t+\delta t,t)=\exp{A_{st} \delta t}$ $\Phi$ $\Phi(t,0)$

    texi2html-1.82/test/many_input_files/tex_l2h_res/tex.html0000644000175000017500000000653611264347126025500 0ustar flichtenheldflichtenheld Untitled Document

    Tests

    Now tex on the same line some


    \begin{displaymath}\chi^2 = \sum_{i=1}^N
\left(y_i - (a + b x_i)
\over \sigma_i\right)^2 \end{displaymath}

    bidule Some text one the line following @end tex

    Now tex on the following line, valid fot tex (with @end tex on a line). some

    tex TEX

    Same that @html (but empty following line not ignored).

    Test of @math Here some ${x^i}\over{\tan y}$.

    Maths with protected \: $a @\ b$.

    Maths with code @-command:

    $@code{math code}$

    Maths with code @-command and braces:

    $ \underline{@code{math \hbox{ code }}} \sum_{i}{\underline{f}}$

    @\ outside of math

    @\


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/many_input_files/tex_l2h_res/mini_ker_l2h_images.pl0000644000175000017500000004305211264347126030230 0ustar flichtenheldflichtenheld# LaTeX2HTML # Associate images original text with physical files. $key = q/varphi;MSF=1.5;AAT/; $cached_env_img{$key} = q|$\varphi$|; $key = q/U;MSF=1.5;AAT/; $cached_env_img{$key} = q|$U$|; $key = q/0.2;MSF=1.5;AAT/; $cached_env_img{$key} = q|$0.2$|; $key = q/g;MSF=1.5;AAT/; $cached_env_img{$key} = q|$g$|; $key = q/phi_{j}(t);MSF=1.5;AAT/; $cached_env_img{$key} = q|$\phi_{j}(t)$|; $key = q/t;MSF=1.5;AAT/; $cached_env_img{$key} = q|$t$|; $key = q/{displaymath}left{eqalign{varphi_1&=eta_1crvarphi_2&=eta_2crvarphi_3&=eta_3}right.{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}\left\{\eqalign{
\varphi _1 &= \eta _1\cr
\varphi _2 &= \eta _2\cr
\varphi _3 &= \eta _3
}\right.\end{displaymath}|; $key = q/R;MSF=1.5;AAT/; $cached_env_img{$key} = q|$R$|; $key = q/10^{-3};MSF=1.5;AAT/; $cached_env_img{$key} = q|$10^{-3}$|; $key = q/eta_i(t=0);MSF=1.5;AAT/; $cached_env_img{$key} = q|$\eta_i(t=0)$|; $key = q/{displaymath}partial_{varphi}g(eta(t),varphi(t));{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}\partial_{\varphi} g(\eta(t),\varphi(t));
\end{displaymath}|; $key = q/r_k;MSF=1.5;AAT/; $cached_env_img{$key} = q|$r_k$|; $key = q/2;MSF=1.5;AAT/; $cached_env_img{$key} = q|$2$|; $key = q/{displaymath}eqalign{partial_xf^g&=gf^{g-1}partial_xf+f^glogfpartial_xgcr&=f^{g-1}(gpartial_xf+fpartial_xg)cr}{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}\eqalign{\partial_x f^g &= g f^{g-1}\partial_x f + f^g \log f\partial_x g\cr
&= f^{g-1}(g\partial_x f + f\partial_x g)\cr}\end{displaymath}|; $key = q/k;MSF=1.5;AAT/; $cached_env_img{$key} = q|$k$|; $key = q/eta_{prey};MSF=1.5;AAT/; $cached_env_img{$key} = q|$\eta_{prey}$|; $key = q/eta_{pred};MSF=1.5;AAT/; $cached_env_img{$key} = q|$\eta_{pred}$|; $key = q/xslashDelta;MSF=1.5;AAT/; $cached_env_img{$key} = q|$x/\Delta$|; $key = q/psi;MSF=1.5;AAT/; $cached_env_img{$key} = q|$\psi$|; $key = q/{displaymath}partial_{eta}g(eta(t),varphi(t));{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}\partial_{\eta} g(\eta(t),\varphi(t));
\end{displaymath}|; $key = q/Q;MSF=1.5;AAT/; $cached_env_img{$key} = q|$Q$|; $key = q/{displaymath}left{eqalign{omega_1&=varphi_1+nu_1cromega_2&=eta_2+nu_2cromega_3&=eta_3+nu_3}right.{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}\left\{\eqalign{
\omega _1 &= \varphi _1 + \nu_1\cr
\omega _2 &= \eta _2 + \nu_2 \cr
\omega _3 &= \eta _3 + \nu_3
}\right.\end{displaymath}|; $key = q/{displaymath}left{eqalign{partial_teta_{k}^{pos}&=eta_{k}^{vel}crpartial_teta_{k+varphi_{k}^{dmp}-varphi_{k+1}^{dmp}),slashm_kcr}right.{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}\left\{\eqalign{\partial_t \eta _{k} ^{pos} &= \eta _{k} ^{ve...
... + \varphi _{k} ^{dmp}-\varphi _{k+1} ^{dmp}) /m_k \cr}\right.\end{displaymath}|; $key = q/{displaymath}left{eqalign{varphi_k^{spr}&=-k_k(eta_{k}^{pos}-eta_{k-1}^{pos})crvi_k^{spr}&=-d_k(eta_{k}^{vel}-eta_{k-1}^{vel})cr}right.{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}\left\{\eqalign{
\varphi_k ^{spr} &= -k_k (\eta _{k} ^{pos}- ...
...spr} &= -d_k (\eta _{k} ^{vel}- \eta _{k-1} ^{vel})
\cr}\right.\end{displaymath}|; $key = q/{displaymath}eqalign{partial_teta(t)&=g(eta(t),varphi(t))crvarphi(t)&=f(eta(t),varphi(t))cr}{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}\eqalign{\partial_t \eta (t) &= g(\eta(t),\varphi(t))\cr
\varphi(t) &= f(\eta(t),\varphi(t))\cr
}\end{displaymath}|; $key = q/{displaymath}left{eqalign{partial_teta_{prey}&=aeta_{prey}-avarphi_{meet}crpartial_teta_{pred}&=-ceta_{pred}+cvarphi_{meet}cr}right.{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}\left\{\eqalign{\partial_t \eta _{prey} &= a \eta _{prey} - a...
... \eta _{pred} &= -c \eta _{pred} + c \varphi _{meet}\cr}\right.\end{displaymath}|; $key = q/mu;MSF=1.5;AAT/; $cached_env_img{$key} = q|$\mu$|; $key = q/A_{st}+A_{st}^dagger;MSF=1.5;AAT/; $cached_env_img{$key} = q|$A_{st} + A_{st}^\dagger$|; $key = q/t=s_i;MSF=1.5;AAT/; $cached_env_img{$key} = q|$t=s_i$|; $key = q/l;MSF=1.5;AAT/; $cached_env_img{$key} = q|$l$|; $key = q/{displaymath}varphi(t)=f(eta(t),varphi(t)){displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}
\varphi(t) = f(\eta(t),\varphi(t))
\end{displaymath}|; $key = q/{displaymath}partial_teta(t)=g(eta(t),varphi(t)){displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}\partial_t \eta (t) = g(\eta(t),\varphi(t))\end{displaymath}|; $key = q/varphi=f(eta(t-dt)+dvarphi;MSF=1.5;AAT/; $cached_env_img{$key} = q|$\varphi=f(\eta(t-dt)+d\varphi$|; $key = q/d_k;MSF=1.5;AAT/; $cached_env_img{$key} = q|$d_k$|; $key = q/h(t);MSF=1.5;AAT/; $cached_env_img{$key} = q|$h(t)$|; $key = q/tau;MSF=1.5;AAT/; $cached_env_img{$key} = q|$\tau$|; $key = q/V;MSF=1.5;AAT/; $cached_env_img{$key} = q|$V$|; $key = q/eta_1(t=0);MSF=1.5;AAT/; $cached_env_img{$key} = q|$\eta_1(t=0)$|; $key = q/nu;MSF=1.5;AAT/; $cached_env_img{$key} = q|$\nu$|; $key = q/h;MSF=1.5;AAT/; $cached_env_img{$key} = q|$h$|; $key = q/T;MSF=1.5;AAT/; $cached_env_img{$key} = q|$T$|; $key = q/{displaymath}J=psi[eta(T),varphi(T),h(T)]+int_0^T{l[eta(tau),varphi(tau),h(tau)]},dtau{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}
J = \psi[\eta(T),\varphi(T) ,h(T)] + \int_0 ^T {l[\eta(\tau),\varphi(\tau),h(\tau)]}  d\tau
\end{displaymath}|; $key = q/g(tau;t);MSF=1.5;AAT/; $cached_env_img{$key} = q|$g(\tau;t)$|; $key = q/Phi(t+deltat,t)=exp{A_{st}deltat};MSF=1.5;AAT/; $cached_env_img{$key} = q|$\Phi(t+\delta t,t)=\exp{A_{st} \delta t}$|; $key = q/omega;MSF=1.5;AAT/; $cached_env_img{$key} = q|$\omega$|; $key = q/eta;MSF=1.5;AAT/; $cached_env_img{$key} = q|$\eta$|; $key = q/{displaymath}pmatrix{A&Bcr-C^+&I-Dcr}pmatrix{deltaetacrdeltavarphicr}=pmatrix{GammacrOmegacr}{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}\pmatrix{A & B\cr
-C^+ & I-D\cr} \pmatrix{\delta \eta\cr
\delta \varphi\cr} = \pmatrix{\Gamma\cr
\Omega\cr}\end{displaymath}|; $key = q/g(tau);MSF=1.5;AAT/; $cached_env_img{$key} = q|$g(\tau)$|; $key = q/N+1;MSF=1.5;AAT/; $cached_env_img{$key} = q|$N+1$|; $key = q/g(t,tau);MSF=1.5;AAT/; $cached_env_img{$key} = q|$g(t,\tau)$|; $key = q/{displaymath}left{eqalign{partial_teta_1&=a_{11}eta_1+a_{12}varphi_2+a_{13}varpha_{32}varphi_2+a_{33}eta_3+W_{31}mu_1+W_{32}mu_2}right.{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}\left\{\eqalign{
\partial_t \eta_1 &= a_{11} \eta_1 + a_{12} ...
...varphi_2 + a_{33} \eta_3 + W_{31} \mu_1 + W_{32} \mu_2
}\right.\end{displaymath}|; $key = q/N;MSF=1.5;AAT/; $cached_env_img{$key} = q|$N$|; $key = q/deltavarphi;MSF=1.5;AAT/; $cached_env_img{$key} = q|$\delta \varphi$|; $key = q/t+deltat;MSF=1.5;AAT/; $cached_env_img{$key} = q|$t + \delta t$|; $key = q/J;MSF=1.5;AAT/; $cached_env_img{$key} = q|$J$|; $key = q/W;MSF=1.5;AAT/; $cached_env_img{$key} = q|$W$|; $key = q/Phi(t,0);MSF=1.5;AAT/; $cached_env_img{$key} = q|$\Phi(t,0)$|; $key = q/c;MSF=1.5;AAT/; $cached_env_img{$key} = q|$c$|; $key = q/{displaymath}varphi_{meet}=eta_{prey}eta_{pred}{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}\varphi _{meet} = \eta _{prey}\eta _{pred}\end{displaymath}|; $key = q/{displaymath}left{eqalign{eta^{pos}_{0}&=0creta^{vel}_{0}&=0crvarphi^{spr}_{N+1}&=0crvarphi^{dmp}_{N+1}&=0cr}right.{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}\left\{\eqalign{\eta ^{pos}_{0} &= 0\cr
\eta ^{vel}_{0} &= 0\...
...arphi ^{spr}_{N+1} &= 0\cr
\varphi ^{dmp}_{N+1} &= 0\cr}\right.\end{displaymath}|; $key = q/(I-D);MSF=1.5;AAT/; $cached_env_img{$key} = q|$(I-D)$|; $key = q/w;MSF=1.5;AAT/; $cached_env_img{$key} = q|$w$|; $key = q/a;MSF=1.5;AAT/; $cached_env_img{$key} = q|$a$|; $key = q/{displaymath}UwV^dagger{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}
U w V^\dagger
\end{displaymath}|; $key = q/A_{st};MSF=1.5;AAT/; $cached_env_img{$key} = q|$A_{st}$|; $key = q/deltaeta;MSF=1.5;AAT/; $cached_env_img{$key} = q|$\delta \eta$|; $key = q/dvarphi;MSF=1.5;AAT/; $cached_env_img{$key} = q|$d\varphi$|; $key = q/{displaymath}eqalign{partial_teta(t)&=g(eta(t),varphi(t))+W(t)mucrvarphi(t)&=f(eta(t),varphi(t))cromega(t)&=h(eta(t),varphi(t))+nucr}{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}\eqalign{
\partial_t \eta (t) &= g(\eta(t),\varphi(t)) + W(t)...
...varphi(t))\cr
\omega(t) &= h ( \eta(t) , \varphi(t)) + \nu\cr
}\end{displaymath}|; $key = q/eta_1(t);MSF=1.5;AAT/; $cached_env_img{$key} = q|$\eta_1(t)$|; $key = q/deltat;MSF=1.5;AAT/; $cached_env_img{$key} = q|$\delta t$|; $key = q/t=0;MSF=1.5;AAT/; $cached_env_img{$key} = q|$t=0$|; $key = q/varphi=f(eta),varphi);MSF=1.5;AAT/; $cached_env_img{$key} = q|$\varphi=f(\eta),\varphi)$|; $key = q/sqrt{sqrt{2}};MSF=1.5;AAT/; $cached_env_img{$key} = q|$\sqrt{\sqrt{2}}$|; $key = q/f;MSF=1.5;AAT/; $cached_env_img{$key} = q|$f$|; $key = q/varphi_{meet};MSF=1.5;AAT/; $cached_env_img{$key} = q|$\varphi_{meet}$|; $key = q/{displaymath}omega=h(eta,varphi){displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}
\omega = h ( \eta , \varphi)
\end{displaymath}|; $key = q/{displaymath}partial_{eta}f(eta(t),varphi(t));{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}\partial_{\eta} f(\eta(t),\varphi(t));
\end{displaymath}|; $key = q/m_k;MSF=1.5;AAT/; $cached_env_img{$key} = q|$m_k$|; $key = q/{displaymath}partial_{varphi}f(eta(t),varphi(t));{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}\partial_{\varphi} f(\eta(t),\varphi(t));
\end{displaymath}|; $key = q/Phi;MSF=1.5;AAT/; $cached_env_img{$key} = q|$\Phi$|; 1; texi2html-1.82/test/many_input_files/tex_l2h_res/tex-l2h_cache.pm0000644000175000017500000000327111264347126026747 0ustar flichtenheldflichtenheld $l2h_cache_key = q/ some tex \TeX/; $l2h_cache{$l2h_cache_key} = q| some

    tex TEX|; $l2h_cache_key = q/$ \underline{@code{math \hbox{ code }}} \sum_{i}{\underline{f}}$/; $l2h_cache{$l2h_cache_key} = q| $ \underline{@code{math \hbox{ code }}} \sum_{i}{\underline{f}}$|; $l2h_cache_key = q/${x^i}\over{\tan y}$/; $l2h_cache{$l2h_cache_key} = q| ${x^i}\over{\tan y}$|; $l2h_cache_key = q/$@code{math code}$/; $l2h_cache{$l2h_cache_key} = q| $@code{math code}$|; $l2h_cache_key = q/ some $$ \chi^2 = \sum_{i=1}^N \left(y_i - (a + b x_i) \over \sigma_i\right)^2 $$/; $l2h_cache{$l2h_cache_key} = q| some


    \begin{displaymath}\chi^2 = \sum_{i=1}^N
\left(y_i - (a + b x_i)
\over \sigma_i\right)^2 \end{displaymath}

    |; $l2h_cache_key = q/$a @\ b$/; $l2h_cache{$l2h_cache_key} = q|$a @\ b$|; 1;texi2html-1.82/test/many_input_files/tex_l2h_res/tex_l2h.html0000644000175000017500000000433711264347126026242 0ustar flichtenheldflichtenheld tex_l2h some


    \begin{displaymath}\chi^2 = \sum_{i=1}^N
\left(y_i - (a + b x_i)
\over \sigma_i\right)^2 \end{displaymath}

    some

    tex TEX ${x^i}\over{\tan y}$ $a @\ b$ $@code{math code}$ $ \underline{@code{math \hbox{ code }}} \sum_{i}{\underline{f}}$


    texi2html-1.82/test/many_input_files/tex_l2h_res/mini_ker_l2h_labels.pl0000644000175000017500000000021011264347126030212 0ustar flichtenheldflichtenheld# LaTeX2HTML # Associate labels original text with physical files. 1; # LaTeX2HTML # labels from external_latex_labels array. 1; texi2html-1.82/test/many_input_files/indices.sh0000755000175000017500000000243511264347126023543 0ustar flichtenheldflichtenheld#! /bin/sh basename=indices diffs_dir=diffs logfile=$basename.log stdout_file=$basename.out [ "z$srcdir" = 'z' ] && srcdir=. [ -d $diffs_dir ] || mkdir $diffs_dir echo "$basename" > $logfile : > $stdout_file [ -d index_split ] && rm -rf index_split [ -d $basename ] && rm -rf $basename mkdir $basename echo "perl -w -x $srcdir/../../texi2html.pl -conf-dir $srcdir/../indices/ -test -split chapter -init index_test.init --out $basename/ $srcdir/../indices/index_table.texi $srcdir/../indices/index_split.texi >> $stdout_file 2>$basename/${basename}.2" >> $logfile perl -w -x $srcdir/../../texi2html.pl -conf-dir $srcdir/../indices/ -test -split chapter -init index_test.init --out $basename/ $srcdir/../indices/index_table.texi $srcdir/../indices/index_split.texi >> $stdout_file 2>$basename/${basename}.2 ret=$? if [ $ret != 0 ]; then echo "F: $basename/$basename.2" exit 1 fi return_code=0 for dir in ${basename} index_split; do if [ -d $srcdir/${dir}_res ]; then diff -u --exclude=CVS --exclude='*.png' -r "$srcdir/${dir}_res" "${dir}" 2>>$logfile > "$diffs_dir/$dir.diff" dif_ret=$? if [ $dif_ret != 0 ]; then echo "D: $diffs_dir/$dir.diff" return_code=1 else rm "$diffs_dir/$dir.diff" fi else echo "no res: ${dir}_res" fi done exit $return_code texi2html-1.82/test/many_input_files/Makefile.in0000644000175000017500000002611511264347126023634 0ustar flichtenheldflichtenheld# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = test/many_input_files DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DATE = @PACKAGE_DATE@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ REQUIRE_DATA_DUMPER = @REQUIRE_DATA_DUMPER@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_DATA_DUMPER = @USE_DATA_DUMPER@ USE_UNICODE = @USE_UNICODE@ USE_UNIDECODE = @USE_UNIDECODE@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ am__leading_dot = @am__leading_dot@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = $(TESTS) indices_res index_split_res tex_l2h_res tex_t4ht_res TESTS = indices.sh tex_l2h.sh tex_t4ht.sh #TESTS = tex_l2h.sh tex_t4ht.sh test_dirs = indices index_split tex_l2h tex_t4ht DISTCLEANFILES = l2h_tmp_dir.init *.log *.out all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/many_input_files/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu test/many_input_files/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh tags: TAGS TAGS: ctags: CTAGS CTAGS: check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; ws='[ ]'; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ elif test -f $$tst; then dir=; \ else dir="$(srcdir)/"; fi; \ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *$$ws$$tst$$ws*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ echo "XPASS: $$tst"; \ ;; \ *) \ echo "PASS: $$tst"; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *$$ws$$tst$$ws*) \ xfail=`expr $$xfail + 1`; \ echo "XFAIL: $$tst"; \ ;; \ *) \ failed=`expr $$failed + 1`; \ echo "FAIL: $$tst"; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ echo "SKIP: $$tst"; \ fi; \ done; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="All $$all tests passed"; \ else \ banner="All $$all tests behaved as expected ($$xfail expected failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ banner="$$failed of $$all tests failed"; \ else \ banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ skipped="($$skip tests were not run)"; \ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$skipped"; \ fi; \ report=""; \ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ report="Please report to $(PACKAGE_BUGREPORT)"; \ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$report"; \ fi; \ dashes=`echo "$$dashes" | sed s/./=/g`; \ echo "$$dashes"; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-exec-am: install-html: install-html-am install-info: install-info-am install-man: install-pdf: install-pdf-am install-ps: install-ps-am installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-TESTS check-am clean clean-generic \ dist-hook distclean distclean-generic distclean-local distdir \ dvi dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am #test_dirs = tex_l2h tex_t4ht copy-tests: for dir in $(test_dirs); do \ if [ -d "$$dir" ]; then \ if [ -d "$${dir}_res" ]; then \ rm -f "$${dir}_res/"*.* ;\ else \ mkdir "$${dir}_res/" ; \ fi ;\ cp -p "$$dir/"*.* "$${dir}_res/"; \ rm -f "$${dir}_res/"*.png "$${dir}_res/"*_l2h.css; \ else \ echo "No dir $$dir/"; \ fi; \ done distclean-local: rm -rf diffs $(test_dirs) dist-hook: for dir in $(test_dirs); do \ rm -rf `find "$(distdir)/$${dir}_res" -name CVS` ;\ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: texi2html-1.82/test/many_input_files/tex_t4ht.sh0000755000175000017500000000324111264347126023664 0ustar flichtenheldflichtenheld#! /bin/sh basename=tex_t4ht diffs_dir=diffs logfile=$basename.log stdout_file=$basename.out [ "z$srcdir" = 'z' ] && srcdir=. if which httexi > /dev/null 2>&1; then : else exit 77 fi [ -d $diffs_dir ] || mkdir $diffs_dir echo "$basename" > $logfile : > $stdout_file if tmp_dir=`mktemp -p /tmp -d l2h_t2h_XXXXXXXX`; then echo "\$L2H_TMP = '$tmp_dir';" > l2h_tmp_dir.init echo "1;" >> l2h_tmp_dir.init else exit 1 fi [ -d $basename ] && rm -rf $basename mkdir $basename echo "perl -w -x $srcdir/../../texi2html.pl -test -init l2h_tmp_dir.init -conf-dir $srcdir/../../examples -init tex4ht.init -expand tex --out $basename/ $srcdir/../manuals/mini_ker.texi $srcdir/../formatting/tex.texi >> $stdout_file 2>$basename/${basename}.2" >> $logfile perl -w -x $srcdir/../../texi2html.pl -test -init l2h_tmp_dir.init -conf-dir $srcdir/../../examples -init tex4ht.init -expand tex --out $basename/ $srcdir/../manuals/mini_ker.texi $srcdir/../formatting/tex.texi >> $stdout_file 2>$basename/${basename}.2 return_code=0 ret=$? if [ $ret != 0 ]; then echo "F: $basename/$basename.2" return_code=1 else rm -f $basename/*_tex4ht_*.log \ $basename/*_tex4ht_*.idv $basename/*_tex4ht_*.dvi \ $basename/*_tex4ht_tex.html $basename/*.png for dir in ${basename}; do if [ -d $srcdir/${dir}_res ]; then diff -u --exclude=CVS --exclude='*.png' -r "$srcdir/${dir}_res" "${dir}" 2>>$logfile > "$diffs_dir/$dir.diff" dif_ret=$? if [ $dif_ret != 0 ]; then echo "D: $diffs_dir/$dir.diff" return_code=1 else rm "$diffs_dir/$dir.diff" fi else echo "no res: ${dir}_res" fi done fi rm -rf $tmp_dir exit $return_code texi2html-1.82/test/many_input_files/index_split_res/0000755000175000017500000000000011264347126024755 5ustar flichtenheldflichtenheldtexi2html-1.82/test/many_input_files/index_split_res/index_split_2.html0000644000175000017500000012303011264347126030405 0ustar flichtenheldflichtenheld Untitled Document: 1. First chapter: N – S
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. First chapter: N – S

    Jump to:   !  
    A   B   E   N   P   S  
    Index Entry Section

    N
    node 2 in section 31.3 Section 3
    node 3 in section 31.3 Section 3
    node in section 31.3 Section 3

    P
    printindex subsection 21.1.2 Subsection 2

    S
    section 31.3 Section 3
    something1.1 Section 1
    subsection 21.1.2 Subsection 2

    Jump to:   !  
    A   B   E   N   P   S  
    Jump to:   A   F   S  
    Index Entry Section

    A
    a function1. First chapter: N – S

    F
    fun in node1. First chapter

    S
    somewhere1. First chapter: N – S

    Jump to:   A   F   S  

    1. First chapter


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 Section 1

    The index once more

    Jump to:   !  
    A   B   E   N   P   S  
    Index Entry Section

    !
    ! entry in node1. First chapter

    A
    a concept in first1. First chapter: N – S
    after second printindex node in section 31.3 Section 3
    another1.1 Section 1

    B
    between printindex node in section 31.3 Section 3

    E
    entry asplit indices
    entry after printindex1. First chapter
    entry in node1. First chapter
    entry in node1. First chapter

    N
    node 2 in section 31.3 Section 3
    node 3 in section 31.3 Section 3
    node in section 31.3 Section 3

    P
    printindex subsection 21.1.2 Subsection 2

    S
    section 31.3 Section 3
    something1.1 Section 1
    subsection 21.1.2 Subsection 2

    Jump to:   !  
    A   B   E   N   P   S  

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.1 Subsection 1

    In subsection 1


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.2 Subsection 2

    index in subsction 2

    Jump to:   !  
    A   B   E   N   P   S  
    Index Entry Section

    !
    ! entry in node1. First chapter

    A
    a concept in first1. First chapter: N – S
    after second printindex node in section 31.3 Section 3
    another1.1 Section 1

    B
    between printindex node in section 31.3 Section 3

    E
    entry asplit indices
    entry after printindex1. First chapter
    entry in node1. First chapter
    entry in node1. First chapter

    N
    node 2 in section 31.3 Section 3
    node 3 in section 31.3 Section 3
    node in section 31.3 Section 3

    P
    printindex subsection 21.1.2 Subsection 2

    S
    section 31.3 Section 3
    something1.1 Section 1
    subsection 21.1.2 Subsection 2

    Jump to:   !  
    A   B   E   N   P   S  

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2 Section 2

    Section 2


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.3 Section 3

    Jump to:   !  
    A   B   E   N   P   S  
    Index Entry Section

    !
    ! entry in node1. First chapter

    A
    a concept in first1. First chapter: N – S
    after second printindex node in section 31.3 Section 3
    another1.1 Section 1

    B
    between printindex node in section 31.3 Section 3

    E
    entry asplit indices
    entry after printindex1. First chapter
    entry in node1. First chapter
    entry in node1. First chapter

    N
    node 2 in section 31.3 Section 3
    node 3 in section 31.3 Section 3
    node in section 31.3 Section 3

    P
    printindex subsection 21.1.2 Subsection 2

    S
    section 31.3 Section 3
    something1.1 Section 1
    subsection 21.1.2 Subsection 2

    Jump to:   !  
    A   B   E   N   P   S  

    Text for the node in section 3

    Text for the node 2 in section 3

    Jump to:   !  
    A   B   E   N   P   S  
    Index Entry Section

    !
    ! entry in node1. First chapter

    A
    a concept in first1. First chapter: N – S
    after second printindex node in section 31.3 Section 3
    another1.1 Section 1

    B
    between printindex node in section 31.3 Section 3

    E
    entry asplit indices
    entry after printindex1. First chapter
    entry in node1. First chapter
    entry in node1. First chapter

    N
    node 2 in section 31.3 Section 3
    node 3 in section 31.3 Section 3
    node in section 31.3 Section 3

    P
    printindex subsection 21.1.2 Subsection 2

    S
    section 31.3 Section 3
    something1.1 Section 1
    subsection 21.1.2 Subsection 2

    Jump to:   !  
    A   B   E   N   P   S  
    Jump to:   !  
    A   B   E   N   P   S  
    Index Entry Section

    !
    ! entry in node1. First chapter

    A
    a concept in first1. First chapter: N – S
    after second printindex node in section 31.3 Section 3
    another1.1 Section 1

    B
    between printindex node in section 31.3 Section 3

    E
    entry asplit indices
    entry after printindex1. First chapter
    entry in node1. First chapter
    entry in node1. First chapter

    N
    node 2 in section 31.3 Section 3
    node 3 in section 31.3 Section 3
    node in section 31.3 Section 3

    P
    printindex subsection 21.1.2 Subsection 2

    S
    section 31.3 Section 3
    something1.1 Section 1
    subsection 21.1.2 Subsection 2

    Jump to:   !  
    A   B   E   N   P   S  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/many_input_files/index_split_res/index_split_abt.html0000644000175000017500000001207011264347126031013 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/many_input_files/index_split_res/index_split_1.html0000644000175000017500000001735611264347126030421 0ustar flichtenheldflichtenheld Untitled Document: 1. First chapter
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Text and then index entries

    Jump to:   !  
    A   B   E   N   P   S  
    Index Entry Section

    !
    ! entry in node1. First chapter

    A
    a concept in first1. First chapter: N – S
    after second printindex node in section 31.3 Section 3
    another1.1 Section 1

    B
    between printindex node in section 31.3 Section 3

    E
    entry asplit indices
    entry after printindex1. First chapter
    entry in node1. First chapter
    entry in node1. First chapter

    Jump to:   !  
    A   B   E   N   P   S  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/many_input_files/index_split_res/index_split.html0000644000175000017500000003665111264347126030200 0ustar flichtenheldflichtenheld Untitled Document: split indices
    [Top] [Contents] [Index] [ ? ]

    split indices

    Jump to:   !  
    A   B   E   N   P   S  
    Index Entry Section

    !
    ! entry in node1. First chapter

    A
    a concept in first1. First chapter: N – S
    after second printindex node in section 31.3 Section 3
    another1.1 Section 1

    B
    between printindex node in section 31.3 Section 3

    E
    entry asplit indices
    entry after printindex1. First chapter
    entry in node1. First chapter
    entry in node1. First chapter

    N
    node 2 in section 31.3 Section 3
    node 3 in section 31.3 Section 3
    node in section 31.3 Section 3

    P
    printindex subsection 21.1.2 Subsection 2

    S
    section 31.3 Section 3
    something1.1 Section 1
    subsection 21.1.2 Subsection 2

    Jump to:   !  
    A   B   E   N   P   S  
    Jump to:   A   F   S  
    Index Entry Section

    A
    a function1. First chapter: N – S

    F
    fun in node1. First chapter

    S
    somewhere1. First chapter: N – S

    Jump to:   A   F   S  

    And one one more index

    Jump to:   !  
    A   B   E   N   P   S  
    Index Entry Section

    !
    ! entry in node1. First chapter

    A
    a concept in first1. First chapter: N – S
    after second printindex node in section 31.3 Section 3
    another1.1 Section 1

    B
    between printindex node in section 31.3 Section 3

    E
    entry asplit indices
    entry after printindex1. First chapter
    entry in node1. First chapter
    entry in node1. First chapter

    N
    node 2 in section 31.3 Section 3
    node 3 in section 31.3 Section 3
    node in section 31.3 Section 3

    P
    printindex subsection 21.1.2 Subsection 2

    S
    section 31.3 Section 3
    something1.1 Section 1
    subsection 21.1.2 Subsection 2

    Jump to:   !  
    A   B   E   N   P   S  

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/many_input_files/index_split_res/index_split_3.html0000644000175000017500000000755311264347126030421 0ustar flichtenheldflichtenheld Untitled Document: 2. Second chapter
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. Second chapter

    Second chapter


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/many_input_files/tex_l2h.sh0000755000175000017500000000400411264347126023464 0ustar flichtenheldflichtenheld#! /bin/sh basename=tex_l2h diffs_dir=diffs logfile=$basename.log stdout_file=$basename.out [ "z$srcdir" = 'z' ] && srcdir=. if which latex2html > /dev/null 2>&1; then : else exit 77 fi [ -d $diffs_dir ] || mkdir $diffs_dir echo "$basename" > $logfile : > $stdout_file if tmp_dir=`mktemp -p /tmp -d l2h_t2h_XXXXXXXX`; then echo "\$L2H_TMP = '$tmp_dir';" > l2h_tmp_dir.init echo "1;" >> l2h_tmp_dir.init else exit 1 fi [ -d $basename ] && rm -rf $basename mkdir $basename echo "perl -w -x $srcdir/../../texi2html.pl -test -init l2h_tmp_dir.init -conf-dir $srcdir/../../examples -l2h -expand tex --out $basename/ $srcdir/../manuals/mini_ker.texi $srcdir/../formatting/tex.texi >> $stdout_file 2>$basename/${basename}.2" >> $logfile perl -w -x $srcdir/../../texi2html.pl -test -init l2h_tmp_dir.init -conf-dir $srcdir/../../examples -l2h -expand tex --out $basename/ $srcdir/../manuals/mini_ker.texi $srcdir/../formatting/tex.texi >> $stdout_file 2>$basename/${basename}.2 return_code=0 ret=$? if [ $ret != 0 ]; then echo "F: $basename/$basename.2" return_code=1 else rm -f $basename/*_l2h_images.log $basename/*.aux $basename/*_l2h.css $basename/*.png sed -i -e 's/^texexpand.*/texexpand /' "$basename/$basename.2" sed -i '/is no longer supported at.*line/d' "$basename/$basename.2" sed -i -e 's/CONTENT="LaTeX2HTML.*/CONTENT="LaTeX2HTML">/' -e \ 's/with LaTeX2HTML.*/with LaTeX2HTML/' "$basename/"*"_l2h.html" sed -i -e 's/^# LaTeX2HTML.*/# LaTeX2HTML/' "$basename/"*"_l2h_images.pl" "$basename/"*"_l2h_labels.pl" rm -f "$basename/"*".aux" "$basename/"*"_l2h_images.out" for dir in ${basename}; do if [ -d $srcdir/${dir}_res ]; then diff -u --exclude=CVS --exclude='*.png' -r "$srcdir/${dir}_res" "${dir}" 2>>$logfile > "$diffs_dir/$dir.diff" dif_ret=$? if [ $dif_ret != 0 ]; then echo "D: $diffs_dir/$dir.diff" return_code=1 else rm "$diffs_dir/$dir.diff" fi else echo "no res: ${dir}_res" fi done fi rm -rf $tmp_dir exit $return_code texi2html-1.82/test/many_input_files/indices_res/0000755000175000017500000000000011264347126024051 5ustar flichtenheldflichtenheldtexi2html-1.82/test/many_input_files/indices_res/index_table_7.html0000644000175000017500000003004611264347126027446 0ustar flichtenheldflichtenheld Untitled Document: 2. node with printindex: V – Z
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. node with printindex: V – Z

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  
    Index Entry Section

    V
    voncept3. Indices refs

    W
    woncept3. Indices refs

    X
    xoncept3. Indices refs

    Y
    yoncept3. Indices refs

    Z
    zoncept3. Indices refs

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/many_input_files/indices_res/index_table.html0000644000175000017500000000672011264347126027222 0ustar flichtenheldflichtenheld Untitled Document: Test for indices
    [Top] [Contents] [Index] [ ? ]

    Test for indices


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/many_input_files/indices_res/index_table_2.html0000644000175000017500000003633611264347126027451 0ustar flichtenheldflichtenheld Untitled Document: 2. node with printindex
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. node with printindex

    Jump to:   F   M  
    Index Entry Section

    F
    fun11. first node chapter, with ftable and vtable
    fun21. first node chapter, with ftable and vtable

    M
    more fun1. first node chapter, with ftable and vtable

    Jump to:   F   M  
    Jump to:   V  
    Index Entry Section

    V
    var11. first node chapter, with ftable and vtable
    var21. first node chapter, with ftable and vtable

    Jump to:   V  
    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  
    Index Entry Section

    !
    !oncept3. Indices refs

    ,
    ,oncept3. Indices refs

    /
    /oncept3. Indices refs

    ;
    ;oncept3. Indices refs

    ?
    ?oncept3. Indices refs

    A
    an second index entry in node1. first node chapter, with ftable and vtable
    aoncept3. Indices refs

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/many_input_files/indices_res/index_table_12.html0000644000175000017500000003021211264347126027515 0ustar flichtenheldflichtenheld Untitled Document: 3. Indices refs: Q – U
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. Indices refs: Q – U

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  
    Index Entry Section

    Q
    qoncept3. Indices refs

    R
    roncept3. Indices refs
    roncept3. Indices refs
    rsconcept3. Indices refs

    S
    soncept3. Indices refs

    T
    toncept3. Indices refs

    U
    uoncept3. Indices refs

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/many_input_files/indices_res/index_table_9.html0000644000175000017500000006737611264347126027470 0ustar flichtenheldflichtenheld Untitled Document: 3. Indices refs: B – C
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. Indices refs: B – C

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  
    Index Entry Section

    B
    boncept3. Indices refs

    C
    c,ncept3. Indices refs
    cancept3. Indices refs
    cbncept3. Indices refs
    cdncept3. Indices refs
    cencept3. Indices refs
    cfncept3. Indices refs
    cgncept3. Indices refs
    chncept3. Indices refs
    cincept3. Indices refs
    cjncept3. Indices refs
    ckncept3. Indices refs
    clncept3. Indices refs
    cmncept3. Indices refs
    cnncept3. Indices refs
    concep3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    cpncept3. Indices refs
    cqncept3. Indices refs
    crncept3. Indices refs
    csdcept3. Indices refs
    csncept3. Indices refs
    ctncept3. Indices refs
    cuncept3. Indices refs
    cvncept3. Indices refs
    cxncept3. Indices refs
    cyncept3. Indices refs
    czncept3. Indices refs

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/many_input_files/indices_res/indices.20000644000175000017500000000000011264347126025540 0ustar flichtenheldflichtenheldtexi2html-1.82/test/many_input_files/indices_res/index_table_8.html0000644000175000017500000004017711264347126027455 0ustar flichtenheldflichtenheld Untitled Document: 3. Indices refs
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. Indices refs

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  
    Index Entry Section

    !
    !oncept3. Indices refs

    ,
    ,oncept3. Indices refs

    /
    /oncept3. Indices refs

    ;
    ;oncept3. Indices refs

    ?
    ?oncept3. Indices refs

    A
    an second index entry in node1. first node chapter, with ftable and vtable
    aoncept3. Indices refs

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/many_input_files/indices_res/index_table_5.html0000644000175000017500000003104611264347126027445 0ustar flichtenheldflichtenheld Untitled Document: 2. node with printindex: J – P
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. node with printindex: J – P

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  
    Index Entry Section

    J
    joncept3. Indices refs

    K
    koncept3. Indices refs

    L
    loncept3. Indices refs

    M
    moncept3. Indices refs

    N
    noncept3. Indices refs

    O
    ooncept3. Indices refs

    P
    poncept3. Indices refs

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/many_input_files/indices_res/index_table_3.html0000644000175000017500000007000311264347126027437 0ustar flichtenheldflichtenheld Untitled Document: 2. node with printindex: B – C
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. node with printindex: B – C

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  
    Index Entry Section

    B
    boncept3. Indices refs

    C
    c,ncept3. Indices refs
    cancept3. Indices refs
    cbncept3. Indices refs
    cdncept3. Indices refs
    cencept3. Indices refs
    cfncept3. Indices refs
    cgncept3. Indices refs
    chncept3. Indices refs
    cincept3. Indices refs
    cjncept3. Indices refs
    ckncept3. Indices refs
    clncept3. Indices refs
    cmncept3. Indices refs
    cnncept3. Indices refs
    concep3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    concept3. Indices refs
    cpncept3. Indices refs
    cqncept3. Indices refs
    crncept3. Indices refs
    csdcept3. Indices refs
    csncept3. Indices refs
    ctncept3. Indices refs
    cuncept3. Indices refs
    cvncept3. Indices refs
    cxncept3. Indices refs
    cyncept3. Indices refs
    czncept3. Indices refs

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/many_input_files/indices_res/index_table_10.html0000644000175000017500000003042411264347126027520 0ustar flichtenheldflichtenheld Untitled Document: 3. Indices refs: D – I
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. Indices refs: D – I

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  
    Index Entry Section

    D
    doncept3. Indices refs

    E
    eoncept3. Indices refs

    F
    foncept3. Indices refs

    G
    goncept3. Indices refs

    H
    honcept3. Indices refs

    I
    index entry in node1. first node chapter, with ftable and vtable
    ioncept3. Indices refs

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/many_input_files/indices_res/index_table_toc.html0000644000175000017500000000656011264347126030071 0ustar flichtenheldflichtenheld Untitled Document: Table of Contents
    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/many_input_files/indices_res/index_table_4.html0000644000175000017500000003103511264347126027442 0ustar flichtenheldflichtenheld Untitled Document: 2. node with printindex: D – I
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. node with printindex: D – I

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  
    Index Entry Section

    D
    doncept3. Indices refs

    E
    eoncept3. Indices refs

    F
    foncept3. Indices refs

    G
    goncept3. Indices refs

    H
    honcept3. Indices refs

    I
    index entry in node1. first node chapter, with ftable and vtable
    ioncept3. Indices refs

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/many_input_files/indices_res/index_table_6.html0000644000175000017500000003062011264347126027443 0ustar flichtenheldflichtenheld Untitled Document: 2. node with printindex: Q – U
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. node with printindex: Q – U

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  
    Index Entry Section

    Q
    qoncept3. Indices refs

    R
    roncept3. Indices refs
    roncept3. Indices refs
    rsconcept3. Indices refs

    S
    soncept3. Indices refs

    T
    toncept3. Indices refs

    U
    uoncept3. Indices refs

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/many_input_files/indices_res/index_table_1.html0000644000175000017500000001164311264347126027442 0ustar flichtenheldflichtenheld Untitled Document: 1. first node chapter, with ftable and vtable
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. first node chapter, with ftable and vtable

    Some text

    • var1
    • var2

    var1 et var2

    an ftable

    • fun1
    • fun2

    fun1 et fun2

    • more fun

    and even more


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/many_input_files/indices_res/index_table_abt.html0000644000175000017500000001236211264347126030047 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/many_input_files/indices_res/index_table_13.html0000644000175000017500000003213011264347126027517 0ustar flichtenheldflichtenheld Untitled Document: 3. Indices refs: V – Z
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. Indices refs: V – Z

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  
    Index Entry Section

    V
    voncept3. Indices refs

    W
    woncept3. Indices refs

    X
    xoncept3. Indices refs

    Y
    yoncept3. Indices refs

    Z
    zoncept3. Indices refs

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.1 node

    A section following the indices.


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/many_input_files/indices_res/index_table_11.html0000644000175000017500000003043411264347126027522 0ustar flichtenheldflichtenheld Untitled Document: 3. Indices refs: J – P
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. Indices refs: J – P

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  
    Index Entry Section

    J
    joncept3. Indices refs

    K
    koncept3. Indices refs

    L
    loncept3. Indices refs

    M
    moncept3. Indices refs

    N
    noncept3. Indices refs

    O
    ooncept3. Indices refs

    P
    poncept3. Indices refs

    Jump to:   !   ,   /   ;   ?  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/many_input_files/tex_t4ht_res/0000755000175000017500000000000011264347126024176 5ustar flichtenheldflichtenheldtexi2html-1.82/test/many_input_files/tex_t4ht_res/mini_ker_tex4ht_math.texi0000644000175000017500000004422411264347126031205 0ustar flichtenheldflichtenheld\input texinfo @setfilename mini_ker_tex4ht_math.info @c Automatically generated @verbatim @end verbatim @math{\eta} @verbatim @end verbatim @verbatim @end verbatim @math{\varphi} @verbatim @end verbatim @verbatim @end verbatim @math{t} @verbatim @end verbatim @verbatim @end verbatim @math{t + \delta t} @verbatim @end verbatim @verbatim @end verbatim @math{\delta \eta} @verbatim @end verbatim @verbatim @end verbatim @math{\eta} @verbatim @end verbatim @verbatim @end verbatim @math{\delta \varphi} @verbatim @end verbatim @verbatim @end verbatim @math{\varphi} @verbatim @end verbatim @verbatim @end verbatim @math{f} @verbatim @end verbatim @verbatim @end verbatim @math{g} @verbatim @end verbatim @verbatim @end verbatim @math{\delta t} @verbatim @end verbatim @verbatim @end verbatim @math{\delta \eta} @verbatim @end verbatim @verbatim @end verbatim @math{\delta \varphi} @verbatim @end verbatim @verbatim @end verbatim @math{\delta \varphi} @verbatim @end verbatim @verbatim @end verbatim @math{\delta \eta} @verbatim @end verbatim @verbatim @end verbatim @math{a} @verbatim @end verbatim @verbatim @end verbatim @math{c} @verbatim @end verbatim @verbatim @end verbatim @math{\varphi_{meet}} @verbatim @end verbatim @verbatim @end verbatim @math{\eta_{prey}} @verbatim @end verbatim @verbatim @end verbatim @math{\eta_{pred}} @verbatim @end verbatim @verbatim @end verbatim @math{\varphi} @verbatim @end verbatim @verbatim @end verbatim @math{\delta\eta} @verbatim @end verbatim @verbatim @end verbatim @math{\varphi} @verbatim @end verbatim @verbatim @end verbatim @math{\varphi=f(\eta(t-dt)+d\varphi} @verbatim @end verbatim @verbatim @end verbatim @math{d\varphi} @verbatim @end verbatim @verbatim @end verbatim @math{\varphi=f(\eta),\varphi)} @verbatim @end verbatim @verbatim @end verbatim @math{10^{-3}} @verbatim @end verbatim @verbatim @end verbatim @math{(I-D)} @verbatim @end verbatim @verbatim @end verbatim @math{(I-D)} @verbatim @end verbatim @verbatim @end verbatim @math{(I-D)} @verbatim @end verbatim @verbatim @end verbatim @math{k} @verbatim @end verbatim @verbatim @end verbatim @math{m_k} @verbatim @end verbatim @verbatim @end verbatim @math{k} @verbatim @end verbatim @verbatim @end verbatim @math{r_k} @verbatim @end verbatim @verbatim @end verbatim @math{d_k} @verbatim @end verbatim @verbatim @end verbatim @math{N} @verbatim @end verbatim @verbatim @end verbatim @math{N} @verbatim @end verbatim @verbatim @end verbatim @math{N+1} @verbatim @end verbatim @verbatim @end verbatim @math{N+1} @verbatim @end verbatim @verbatim @end verbatim @math{k} @verbatim @end verbatim @verbatim @end verbatim @math{k} @verbatim @end verbatim @verbatim @end verbatim @math{x/\Delta} @verbatim @end verbatim @verbatim @end verbatim @math{\omega} @verbatim @end verbatim @verbatim @end verbatim @math{h} @verbatim @end verbatim @verbatim @end verbatim @math{\varphi_{meet}} @verbatim @end verbatim @verbatim @end verbatim @math{\eta_{prey}} @verbatim @end verbatim @verbatim @end verbatim @math{\eta_{pred}} @verbatim @end verbatim @verbatim @end verbatim @math{\eta_1(t)} @verbatim @end verbatim @verbatim @end verbatim @math{\eta_1(t=0)} @verbatim @end verbatim @verbatim @end verbatim @math{t=0} @verbatim @end verbatim @verbatim @end verbatim @math{\phi_{j}(t)} @verbatim @end verbatim @verbatim @end verbatim @math{\eta_i(t=0)} @verbatim @end verbatim @verbatim @end verbatim @math{h(t)} @verbatim @end verbatim @verbatim @end verbatim @math{J} @verbatim @end verbatim @verbatim @end verbatim @math{T} @verbatim @end verbatim @verbatim @end verbatim @math{J} @verbatim @end verbatim @verbatim @end verbatim @math{\psi} @verbatim @end verbatim @verbatim @end verbatim @math{l} @verbatim @end verbatim @verbatim @end verbatim @math{h} @verbatim @end verbatim @verbatim @end verbatim @math{J} @verbatim @end verbatim @verbatim @end verbatim @math{t=0} @verbatim @end verbatim @verbatim @end verbatim @math{\omega} @verbatim @end verbatim @verbatim @end verbatim @math{t=s_i} @verbatim @end verbatim @verbatim @end verbatim @math{\mu} @verbatim @end verbatim @verbatim @end verbatim @math{Q} @verbatim @end verbatim @verbatim @end verbatim @math{\nu} @verbatim @end verbatim @verbatim @end verbatim @math{R} @verbatim @end verbatim @verbatim @end verbatim @math{W} @verbatim @end verbatim @verbatim @end verbatim @math{W} @verbatim @end verbatim @verbatim @end verbatim @math{W} @verbatim @end verbatim @verbatim @end verbatim @math{g(\tau)} @verbatim @end verbatim @verbatim @end verbatim @math{g(\tau)} @verbatim @end verbatim @verbatim @end verbatim @math{\tau} @verbatim @end verbatim @verbatim @end verbatim @math{\tau} @verbatim @end verbatim @verbatim @end verbatim @math{g(\tau;t)} @verbatim @end verbatim @verbatim @end verbatim @math{t} @verbatim @end verbatim @verbatim @end verbatim @math{\tau} @verbatim @end verbatim @verbatim @end verbatim @math{2} @verbatim @end verbatim @verbatim @end verbatim @math{\tau} @verbatim @end verbatim @verbatim @end verbatim @math{g(\tau;t)} @verbatim @end verbatim @verbatim @end verbatim @math{\tau} @verbatim @end verbatim @verbatim @end verbatim @math{\tau} @verbatim @end verbatim @verbatim @end verbatim @math{tau} @verbatim @end verbatim @verbatim @end verbatim @math{\tau} @verbatim @end verbatim @verbatim @end verbatim @math{\tau} @verbatim @end verbatim @verbatim @end verbatim @math{0.2} @verbatim @end verbatim @verbatim @end verbatim @math{\sqrt{\sqrt{2}}} @verbatim @end verbatim @verbatim @end verbatim @math{\tau} @verbatim @end verbatim @verbatim @end verbatim @math{\tau} @verbatim @end verbatim @verbatim @end verbatim @math{\tau} @verbatim @end verbatim @verbatim @end verbatim @math{g(\tau)} @verbatim @end verbatim @verbatim @end verbatim @math{g(t,\tau)} @verbatim @end verbatim @verbatim @end verbatim @math{A_{st}} @verbatim @end verbatim @verbatim @end verbatim @math{A_{st}} @verbatim @end verbatim @verbatim @end verbatim @math{A_{st} + A_{st}^\dagger} @verbatim @end verbatim @verbatim @end verbatim @math{A_{st}} @verbatim @end verbatim @verbatim @end verbatim @math{U} @verbatim @end verbatim @verbatim @end verbatim @math{w} @verbatim @end verbatim @verbatim @end verbatim @math{V} @verbatim @end verbatim @verbatim @end verbatim @math{A_{st} + A_{st}^\dagger} @verbatim @end verbatim @verbatim @end verbatim @math{A_{st}} @verbatim @end verbatim @verbatim @end verbatim @math{\Phi(t+\delta t,t)=\exp{A_{st} \delta t}} @verbatim @end verbatim @verbatim @end verbatim @math{w} @verbatim @end verbatim @verbatim @end verbatim @math{\Phi} @verbatim @end verbatim @verbatim @end verbatim @math{t} @verbatim @end verbatim @verbatim @end verbatim @math{\Phi(t,0)} @verbatim @end verbatim @verbatim @end verbatim @math{U} @verbatim @end verbatim @verbatim @end verbatim @math{\Phi} @verbatim @end verbatim @verbatim @end verbatim @math{w} @verbatim @end verbatim @verbatim @end verbatim @math{\Phi} @verbatim @end verbatim @verbatim @end verbatim @math{V} @verbatim @end verbatim @verbatim @end verbatim @math{\Phi} @verbatim @end verbatim @verbatim @end verbatim @math{\Phi(t,0)} @verbatim @end verbatim @verbatim @end verbatim @math{\Phi(t,0)} @verbatim @end verbatim @bye texi2html-1.82/test/many_input_files/tex_t4ht_res/mini_ker.html0000644000175000017500000140250211264347126026665 0ustar flichtenheldflichtenheld Miniker 102 manual
    [Top] [Contents] [Index] [ ? ]

    Miniker 102 manual


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Introduction

    Miniker is a modeling tool, built especially in order to implement models written following the TEF (Transfer Evolution Formalism) formalism, a mathematical framework for system analysis and simulation. Miniker allows for timewise simulation, system analysis, adjoint computation, Kalman filtering and more.

    Miniker uses a fortran preprocessor, mortran, designed in the 1970’s, to ease model writing using dedicated specific languages. For example partial derivatives are symbolicaly determined by mortran macros in Miniker. For the selection of another compile-time features, another set of preprocessor directives, the cmz directives, are used. In most cases the user does not need to know anything about that preprocessing that occurs behind the scene, he simply writes down the equations of his model and he is done.

    A comprehensive description of the TEF formalism in available on http://www.lmd.jussieu.fr/ZOOM/doc/tef-GB-partA5.pdf). The Miniker software is a reduced version of ZOOM, that can only handle a hundreds of variables, but is much easier to use.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Intended audience

    The reader should have notions in system dynamics. Moreover a minimal knowledge of programmation and fortran is required. What is required is a basic understanding of variable types, affectation and fortran expressions.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Reading guide

    The first chapter is a brief overview of the TEF. The following describes how to write, compile and run a model in Miniker in its basic and comprehensive syntax. Reading up to the section Controlling the run is required to be able to use Miniker. In this section it is assumed that Miniker is properly setup. The installation instructions are in the appendix at Installation.

    The next chapter describes advanced features, first a general introduction to features settings and then a description of other model description related features.

    The next chapter describes system analysis tools available with Miniker. The sections are independant and each describes how to use a specific feature. If you plan on using these features, you should also read Overview of feature setting.

    A final chapter describes advanced features in a development environment using make,

    In the appendix the instructions for the installation are described (see section Installation).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Other Manuals and documentation

    A programmers’Manual is available (in French), and can be asked for to any member of the collabration. See additional documents in http://www.lmd.jussieu.fr/Zoom/doc or ask for Research texts and articles to members.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. An overview of the TEF formalism

    The TEF (Transfer Evolution Formalism) is based on partitionning and recoupling of model subsystems. It allows the study of the coupling between subsystems by the means of linearization and time discretization.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 Cell and Transfer equations

    In the TEF, a model is mathematically represented by a set of equations corresponding to two kinds objects:

    1. Cells which are elementary models and correspond to evolution equations such as:
      ∂ η(t) = g(η(t),φ(t))
 t

      Vector η represent the state variables of cells and the vector φ represent the dependent boundary conditions, i.e. the variables considered as boundary conditions by a cell, but depending upon the complete model state. This dependent boundary conditions are required to make the cells correspond to well-posed problems. These variables are often called state variables, and prognostic variables in meteorology.

    2. Transfers which are determined by constraint equations such as:
      φ(t) = f (η(t),φ (t))
      These equations are often called algebraic equations, and in meteorology diagnostic equations.

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2 Linearization and discretization in the TEF

    The relations between sub-systems is excessively difficult to exhibit when having to cope with non-linear system. In the TEF, the TLS (Tangent Linear System) is constructed along the trajectory. One considers the system over a small portion along the trajectory, say between t and t + δt. The variation δη of η and δφ of φ is obtained through a Padé approximation of the state-transition matrix. The final form of the algebraic system is closed to the classical Crank-Nicolson scheme:

    (            )(    )   (  )
   A     B      δη      Γ
 - C+  I - D    δφ   =  Ω

    The blocks appearing in the Jacobian matrix are constructed with partial derivative of f and g, and with δt. From this system the elimination of δη leads to another formulation giving the coupling between transfers, and allows for the δφ computation. The δφ value is then substitued in δη to complete the time-step solving process.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. Miniker model programming

    Miniker works by combining the model specification code given by the user and other source files provided in the package. The code is assembled, preprocessed, compiled, linked and the resulting program can be run to produce the model trajectory and dynamic analysis.

    The code provided in the package contains a principal program, some usefull subroutines and pieces of code called sequences combined with the different codes. Among these sequences some hold the code describing the model and are to be written by the user (sequences are similar to Fortran include files).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.1 General structure of the code

    The sequences used to enter model description hold the mathematical formulae for each cell and transfer component, dedicated derived computations, and time-step steering. During the code generation stage, cmz directives are preprocessed, then the user pseudo-Fortran instructions are translated by mortran using macros designed to generate in particular all Fortran instructions that compute the Jacobian matrices used in TEF modelling.

    The sequence ‘zinit’ contains the mathematical formulation of the model (see section Entering model equation and parameters). Another sequence, ‘zsteer’, is merged at the end of the time step advance of the simulation, where the user can monitor the time step values and printing levels, and perform particular computations etc. (see section Executing code at the end of each time step).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2 Miniker programming illustrated

    The general TEF system writes:

    ∂η(t) = g(η(t),φ(t))
 t
 φ(t) = f(η(t),φ(t))

    To illustrate the model description in Miniker a simple predator-prey model of Lotka-Volterra is used. This model can be written in the following TEF form:

    {
  ∂tηprey = aηprey - aφmeet

  ∂tηpred = - cηpred + cφmeet
    φmeet = ηpreyηpred

    with two cell equations, i.e. state evolution of the prey and predator groups, and one transfer accounting for the meeting of individuals of different group.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2.1 All you need to know about mortran and cmz directives

    The first stage of code generation consists in cmz directives preprocessing. Cmz directives are used for conditional selection of features, and sequence inclusion. At that point you don’t need to know anything about these directives. They are only usefull if you want to take advantage of advanced features (see section Programming with cmz directives).

    The code in sequences is written in Mortran and the second stage of code generation consists in mortran macro expansion. The mortran language is described in its own manual, here we only explain the very basics which is all you need to know to use Miniker. Mortran basic instructions are almost Fortran, the differences are the following:

    • The code is free-form, and each statement should end with a semi-colon ;.
    • Comments may be introduced by an exclamation mark ! at the beginning of a line, or appear within double quotes " in a single line.
    • It is possible to use blocs, for do or if statement for example, and they are enclosed within brackets ‘<’ and ‘>’. To be in the safe side, a semi-colon ; should be added after a closng bracket >.

    The following fictious code is legal mortran:

     
    real 
      param;
    param = 3.; ff(1) = ff(3)**eta(1);       "a comment"                 
    ! a line comment
    do inode=1,n_node <eta_move(inode)=0.01; eta_speed(inode)=0.0;>;
    

    Thanks to mortran the model code is very simply specified, as you’ll see next.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2.2 Entering model equation and parameters

    The model equation and parameters and some Miniker parameters are entered in the ‘zinit’ sequence. The whole layout of the model is given before detailing the keywords.

     
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Parameters           
    !%%%%%%%%%%%%%%%%%%%%%%
      real apar,bpar;        "optional Fortran type declaration"
    
    ! required parameters
         dt=.01;             "initial time-step"
         nstep=10 000;       "number of iterations along the trajectory"
         time=0.;            "time initialisation "
    
    ! model parameters            
         apar = 1.5;             
         cpar = 0.7;          
                                                      
    ! misceallaneous parameters
         modzprint = 1000;    "printouts frequency" 
    
    print*,'***************************************';
    print*,'Lotka-Volterra model with parameters as:';
    z_pr: apar,bpar;
    print*,'***************************************';
    
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Transfer definition
    !%%%%%%%%%%%%%%%%%%%%%%
    ! rencontre (meeting)
    set_Phi
    < var: ff_interact, fun: f_interact = eta_prey*eta_pred;
    >;
    
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Cell definition
    !%%%%%%%%%%%%%%%%%%%%%%
    
    set_eta
    < var: eta_prey, fun: deta_prey =   apar*eta_prey - apar*ff_interact;
      var: eta_pred, fun: deta_pred = - cpar*eta_pred + cpar*ff_interact;
    >;
    
    
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Initial states
    !%%%%%%%%%%%%%%%%%%%%%%
         eta_prey = 1.;
         eta_pred = 1.;
    ;
        OPEN(50,FILE='title.tex',STATUS='UNKNOWN');   "title file"
        write(50,5000) apar,cpar;                     
    5000;format('Lotka-Volterra par:',2F4.1);
    

    Variables and model parameters

    The following variables are mandatory:

    dt

    The time step.

    time

    Model time initialisation.

    nstep

    Number of iterations along the trajectory.

    There are no other mandatory variables. Some optional variables are used to monitor the printout and ouput of results of the code. As an example, the variable modzprint is used to set the frequency of the printout of the model matrix and vectors during the run (see section Controlling the printout and data output).

    User’s defined variable and Fortran or Mortran instructions can always be added for intermediate calculus. To avoid conflict with the variables of the Miniker code, the rule is that a users symbol must not have characters ‘o’ in the first two symbol characters.

    In the predator-prey example there are two model parameters. The fortran variables are called here apar for a and cpar for c. If a Fortan type definition is needed, it should be set at the very beginning of ‘zinit’. The predator-prey code variable initializations finally reads

     
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Parameters         
    !%%%%%%%%%%%%%%%%%%%%%%
      real apar,bpar;        "optional Fortran type declaration"
    
         dt=.01;           
         nstep=10 000;    
         time=0.;            
    
    ! model parameters
         apar = 1.5;           
         cpar = 0.7;                                                            
    
         modzprint = 1000;  
    

    Model equations

    The model equations for cells and model equations for transferts are entered in two mortran blocks, one for the transferts, the other for the cell components. The model equations for cells are entered into a set_eta block, and the transfer equations are entered into a set_phi block.

    In each block the couples variable-function are specified. For transfers the function defines the transfer itself while for cells the function describes the cell evolution. The variable is specified with var:, the function is defined with fun:.

    In the case of the predator-prey model, the transfer variable associated with φmeet could be called ff_interact and the transfer definition would be given by:

     
    set_Phi
    < var: ff_interact, fun: f_interact = eta_prey*eta_pred;
    >;
    

    The two cell equations of the predator-prey model, with name eta_prey for the prey ( ηprey) and eta_pred for the predator ( ηpred) are:

     
    set_eta
    < var: eta_prey, fun: deta_prey =   apar*eta_prey - apar*ff_interact;
      var: eta_pred, fun: deta_pred = - cpar*eta_pred + cpar*ff_interact;
    >;
    

    The ‘;’ at the end of the mortran block is important.

    The whole model equations are setup with:

     
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Transfer definition
    !%%%%%%%%%%%%%%%%%%%%%%
    ! rencontre (meeting)
    set_Phi
    < var: ff_interact, fun: f_interact = eta_prey*eta_pred;
    >;
    
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Cell definition
    !%%%%%%%%%%%%%%%%%%%%%%
    
    set_eta
    < var: eta_prey, fun: deta_prey =   apar*eta_prey - apar*ff_interact;
      var: eta_pred, fun: deta_pred = - cpar*eta_pred + cpar*ff_interact;
    >;
    

    Whenever the user is not concerned with giving a specific name to a function, it is possible to specify the equation only with eqn:. Therefore the user may replace an instruction as:

     
      var: ff_dump,
      fun: f_dump  = - rd*(eta_speed - eta_speed_limiting);
    

    with:

     
       eqn: ff_dump = - rd*(eta_speed - eta_speed_limiting);
    

    In that case, the unnamed function will take the name of the defined variable preceded by the ‘$’ sign: $ff_dump.

    Starting points

    The cells equations require state initial conditions. In some case, the transfers may also need starting points although they are determined from the cell values.

    In the predator-prey model the starting points for cells are:

     
    !     initial state
    !     -------------
         eta_prey = 1.;
         eta_pred = 1.;
    

    When there is a non trivial implicit relationship between the transfers in the model, it may be usefull or even necessary to set some transfers to non-zero values. This difficulty is only relevant for the very first step of the simulation and will be used as a first guess of φ. The uninitialized transfers having a default compiler-dependant (often zero) value, an initialization to another value may help avoiding singular functions or matrix and ensure convergence in the Newton algorithm used to solve the transfer implicit equation.

    The cell and transfer arrays

    Sometime it is easier to iterate over an array than to use the cell or transfer variable name. This is possible because there is a correspondence between the variable names and the fortran array eta(.) for the cell variables and the fortran array ff(.) for the transfer variables(1).

    The index of the variable is determined by the order of appearance in the variable definition blocks. It is reminded in the output, as explained later (see section Running a simulation and using the output).

    The number of cells is in the integer np variable, and the number of transfer is in the integer mp variable.

    title file

    For some graphics generation, a file with name ‘title.tex’ is required which sets the title. The following instructions take care of that:

     
        OPEN(50,FILE='title.tex',STATUS='UNKNOWN');
        write(50,5000) apar,cpar;                 
    5000;format('Lotka-Volterra par:',2F4.1);
    
        close(50);
    

    In that case the parameter values are written down, to differenciate between different runs. This step is in general not needed.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3 Setting and running a model

    In this section it is assumed that a programming environment has been properly setup. This environment may use either cmz or make to drive the preprocessing and compilation. You can skip the part related with the environment you don’t intend to use.

    For instructions regarding the installation, see Installation.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3.1 Setup a model and compile with cmz

    The user defined sequences are ‘KEEP’ in the cmz world. The most common organization is to have a cmz file in a subdirectory of the directory containing the ‘mini_ker.cmz’ cmz file. In this cmz file there should be a ‘PATCH’ called ‘zinproc’ with the KEEPs within the patch. The KEEP must be called ‘$zinit’.

    From within cmz in the directory of your model the source extraction, compilation and linking will be triggered by a mod command. This macro uses the ‘selseq.kumac’ information to find the ‘mini_ker.cmz’ cmz file. mod shall create a directory with the same name than the cmz file, ‘mymodel/’ in our example. In this directory there is another directory ‘cfs/’ containing the sources extracted from the cmz file.

    The file ‘mymodel_o.tmp’ contains all the mortran code generated by cmz with the sequences substituted, including the ‘$zinit’. The fortran produced by the preprocessing and splitting of this file is in files with the traditional ‘.f’ suffix. The principal program is in ‘principal.f’. An efficient way of getting familiar with mini_ker methods is looking at the ‘mymodel_o.tmp’ where all sequences and main Mortran instructions are gathered. Symbolic derivation is noted as F_D(expression)(/variable), and the resulting Fortran code is in ‘principal.f’.

    mod also triggers compilation and linking. The object files are in the same ‘cfs/’ directory and the executable is in the ‘mymodel/’ directory, with name ‘mymodel.exe’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3.2 Setup a model and compile with make

    With make, the sequences are files ending with ‘.mti’ (for mortran include files), called, for example, ‘zinit.mti’. They are included by mortran in other source files. You also need a ‘Makefile’ to drive the compilation of the model.

    If you don’t need additional code or libraries to be linked with your model you have two alternatives.

    1. The simplest alternative is to run the start_miniker script with the model file name as argument. It should copy a ‘zinit.mti’ file ready to be edited and a Makefile ready to compile the model. For the predator prey model, for example, you could run
       
      $ start_miniker predator
      
    2. Otherwise you can copy the Makefile from ‘template/Makefile’ in the directory containing the sequences. You should then change the compiled model file name, by changing the value of the model_file_name variable to the name of your choice in the Makefile. It is set to ‘mymodel’ in the template. For the predator-prey model, it could be set like
       
      model_file_name = predator
      

      If you want the executable model file to be built in another directory, you could set

       
      model_file_name = some_dir/predator
      

      The other items set in the default Makefile should be right.

    The preprocessing and the compilation are launched with

     
    make all
    

    The mortran files are generated by the cmz directive preprocessor from files found in the package source directories. The mortran files end with ‘.mtn’ for the main files and ‘.mti’ for include files. They are output in the current directory. The mortran preprocessor then preprocess these mortran files and includes the sequences. The resulting fortran code is also in the current directory, in files with a ‘.f’ suffix. Some fortran files ending with ‘.F’ may also be created by the cmz directive preprocessor. The object files resulting from the compilation of all the fortran files (generated from mortran or directly from fortran files) are there too.

    In case you want to override the default sequences or a subroutine file you just have to create it in your working directory along with the ‘zinit.mti’. For example you could want to create or modify a ‘zsteer.mti’ file (see section Executing code at the end of each time step), a ‘zcmd_law.mti’ file (see section Control laws), a ‘monitor.f’ file (see section Turning the model into a subroutine) to take advantage of features presented later in this manual.

    More in-depth discussion of using make to run Miniker is covered in Advanced use of Miniker with make. For example it is also possible to create files that are to be preprocessed by the cmz directive preprocessor and separate source files and generated files. This advanced use is more precisely covered in Programming with cmz directives.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3.3 Running a simulation and using the output

    Once compiled the model is ready to run, it only has to be executed. On standard output informations about the states, transfers, tangent linear system and other jacobian matrices are printed. For example the predator-prey model could be executed with:

     
    ./predator > result.lis
    

    The correspondance between the symbolic variables and the basic vectors and functions are printed at run time:

     
      ---------------- Informing on Phi definition -----------------
        Var-name,           Function-name,       index in ff vector
                 ff_interact              f_interact  1
      ----------------------------------------------------
    
      --------------- Informing on Eta definition ------------------
       Var-name,           Function-name,       index in eta vector
                    eta_prey               deta_prey  1
                    eta_pred               deta_pred  2
    

    A summary of the model equations are in ‘Model.hlp’ file. For the same example:

     
    ======================= set_Phi                                                                
                                                                                             
        1 ff_interact f_interact           eta_pray*eta_pred
    ======================= set_Eta                                                                
                                                                                             
        1 eta_pray    deta_pray            apar*eta_pray-apar*ff_interact
        2 eta_pred    deta_pred            -cpar*eta_pred+cpar*ff_interact
    

    when other general functions are specified with f_set, it can appear also in the same help file when replaced by fun_set.

    As far as possible, all data printed in the listing are associated with a name related to a variable. Here is an extract:

     
     Gamma :-8.19100E-02-1.42151E-01 3.87150E-02
             eta_courant eta_T_czcx  eta_T_sz   
           ------------------------------------------------
     Omega : 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00
             courant_L   T_czcx      Psi_Tczc    Psi_Tsz 
           ------------------------------------------------
    

    for the two known vectors of the system, and:

     
     >ker : Matrice de couplage       4 4 4 4
    courant_L Raw(1,j=1,4):   1.000     -9.9010E-03  0.000       0.000    
    T_czcx    Raw(2,j=1,4): -2.7972E-02   1.000      0.000      9.9900E-04
    Psi_Tczcx Raw(3,j=1,4):  0.1605      9.7359E-02  1.000     -5.7321E-03
    Psi_Tsz   Raw(4,j=1,4):   0.000     -0.1376     5.7225E-03   1.000    
              Var-Name      courant_L   T_czcx      Psi_Tczc    Psi_Tsz 
              ----------------------------------------------------------
    

    where the couplage (coupling matrix) is given that corresponds to the matrix coupling the four transfer components after δη has been eliminated from system. It is computed in the subprogram ‘oker’ (for kernel) which solves the system.

    Basic results are output in a set of ‘.data’ files. The first line (or two lines) describes the column with a ‘#’ character used to mark the lines as comments (for gnuplot for example). In the ‘.data’ files, the data are simply separated with spaces. Each data file has the time variable values as first column. (2). Following columns give the values of eta(.) in ‘res.data’, dEta(.) in ‘dres.data’ – the step by step variation of eta(.) – and ff(.) in ‘tr.data’.

    Along the simulation the TEF Jacobian matrices are computed. A transfer variables elimination process also leads to the definition of the classical state advance matrix of the system (the corresponding array is aspha(.,.) in the code). This matrix is output in the file ‘aspha.data’ that is used to post-run dynamics analyses. The matrix columns are written column wise on each record. See section Stability analysis of fastest modes. See section Generalized tangent linear system analysis. It is not used in the solving process.

    Other ‘.data’ files will be described later.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3.4 Doing graphics

    Since the data are simply separated with spaces, and comment lines begin with ‘#’, the files can be vizualised with many programs. With gnuplot, for example, to plot eta(n), the gnuplot statement could be:

     
    plot "res.data" using 1:(n+1)
    

    The similar one for ff(n):

     
    plot "tr.data" using 1:(n+1)
    

    For people using PAW, the CERN graphical computer code, Miniker prepares kumacs that allow to read process the ‘.data’ files in the form of n-tuples (see the PAW manual for more information). In that cas, the flag sel paw has to be gievn in the ‘selsequ.kumac’. The generated n-tuples are ready to use only for vector dimension of at most 10 (including the variable time). These kumacs are overwritten each time the model is run. Usaually, gnuplot has to be preferred, but when using surfaces and histograms, PAW is better. The ‘gains.f’ (and ‘go.xqt’ is provided as an example in the Miniker files.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4 Controlling the run

    It is possible to add code that will be executed at the end of each time step. It is also possible to specify which time step leads to a printout on standard output. For maximal control, the code running te model may be turned into a subroutine to be called from another fortran (or C) program, this possibility is covered in Calling the model code.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4.1 Executing code at the end of each time step

    The code in the sequence ‘zsteer’ is executed at the end of each time step. It is possible to change the time step length (variable dt) verify that the non linearity are not too big, or perform discontinuous modifications of the states. One available variable res might be usefull for time step monitoring. At the end of the time step, as soon as φ has been computed, a numerical test is applied on a pseudo relative quadratic residual between φ = f(η(t - dt) + dφ ( ffl), where dφ is given by the system resolution in ker,and φ = f(η),φ) , Fortran variable (ff):

    ! ========================================================
    ! test linearite ffl - ff
    ! ========================================================
    if (istep.gt.1)
    < res=0.; <io=1,m; res = res +(ffl(io)-ff(io))**2/max(one,ff(io)*ff(io)); >;
      if (res .gt. TOL_FFL)
      < print*,'*** pb linearite : res > TOL_FFL a istep',istep,res,' > ',TOL_FFL;
        do io=1,m < z_pr: io,ff(io),ff(io)-ffl(io); >;
      >;
    >;
    

    This test hence applies only for non linearities in tranfer models. Nevertheless, res might be usefull to monitor the time step dt in ZSTEER and eventually go backward one step (goto :ReDoStep:). This can more appropriatly be coded in the (empty in default case) sequence zstep, inserted just before time-advancing states and time variables in ‘principal’.

    It is also possible to fix the value of the criterium TOL_FFL in ‘zinit’ different from its default value of 10-3 – independent of the Fortran precision.

    Many other variables are available, including

    istep

    The step number;

    couplage(.)

    The TEF coupling matrix between transfers;

    H

    The Jacobian matrix corresponding with:

    ∂ηg(η(t),φ(t));

    Bb

    The Jacobian matrix corresponding with:

    ∂φg(η(t),φ(t));

    Bt

    The Jacobian matrix corresponding with:

    ∂ηf(η(t),φ(t));

    D

    The Jacobian matrix corresponding with:

    ∂φf(η(t),φ(t));

    aspha

    The state advance matrix;

    dneta
    dphi

    the variable increments;

    One should be aware of that the linearity test concerns the preceding step. We have yet no example of managing the time-step.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4.2 Controlling the printout and data output

    The printout on standard output is performed if the variable zprint of type logical is true. Therefore it is possible to control this printout by setting zprint false or true. For example the following code, in sequence ‘zsteer’, triggers printing for every modzprint time step and the two following time steps:

     
    ZPRINT = mod(istep+1,modzprint).eq.0;
    Zprint = zprint .or. mod(istep+1,modzprint).eq.1;
    Zprint = zprint .or. mod(istep+1,modzprint).eq.2;
    

    The data output to ‘.data’ files described in Running a simulation and using the output is performed if the logical variable zout is true. For example the following code, in ‘zsteer’, triggers output to ‘.data’ files every modzout step.

     
    Zout = mod(istep,modzout).eq.0;
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. Advanced Miniker programming


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.1 Overview of additional features setting

    It is possible to enable some features by selecting which code should be part of the principal program. Each of these optionnal features are associated with a select flag. For example double precision is used instead of simple precision with the ‘double’ select flag, the model is a subroutine with the select flag ‘monitor’, the Kalman filter code is set with ‘kalman’ and the 1D gridded model capabilities are associated with ‘grid1d’. To select a given feature the cmz statement sel select_flag should be written down in the ‘selseq.kumac’ found in the model directory. With make either the corresponding variable should be set to 1 or it should be added to the SEL make variable, depending on the feature.

    Other features don’t need different or additional code to be used. Most of the features are enabled by setting specific logical variables to ‘.true.’. This is the case for zback for the adjoint model, zcommand if the command is in a file and zlaw if it is a function and zkalman for the Kalman filter. These select and logical flags are described in the corresponding sections.

    In cmz an alternative of writing select flags to ‘selseq.kumac’ is to drive the compilation with smod sel_flag. In that case the sel_flag is selected and the files and executable goes to a directory named ‘sel_flag’.

    The select flags are taken into account during cmz directives preprocessing. Therefore you have the possibility to use these flags to conditionnaly include pieces of code. In most cases you don’t need to include code conditionally yourself though, but if you want to, this is covered in Programming with cmz directives.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.2 Calling the model code

    When the model code is a subroutine, it can be called from another fortran program unit (or another program), and the model will be run each time the subroutine is called. This technique could be used, for example to perform optimization (see section Adjoint model and optimisation with Miniker), or to run the model with different parameters.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.2.1 Turning the model into a subroutine

    With cmz, one has to do a

     
    sel monitor
    

    in the ‘selseq.kumac’ file and create the KEEP that call the model code. See section Overview of additional features setting.

    With make ‘monitor’ should be added to the SEL variable in the ‘Makefile’, for example:

     
    SEL = monitor
    

    A file that call the principal subroutine should also be written, using the prefered language of the user. The additional object files should then be linked with the Miniker objects. To that aim they may be added to the miniker_user_objects variable.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.2.2 Calling the model subroutine

    The model subroutine is called ‘principal’ and is called with the following arguments:

    Subroutine: principal (Cost, ncall, integer_flag, file_suffix, info, idxerror)

    Where Cost is a real number, real or double precision, and is set by the principal subroutine. It holds the value of the cost function if such function has been defined (the use and setting of a cost function is covered later, see Cost function coding and adjoint modeling). ncall is an integer which corresponds with the number of call to principal done so far, it should be initialized to 0 and its value should not be changed, as it is changed in the principal subroutine. integer_flag is an integer that can be set by the user to be accessed in the principal subroutine. For example its value could be used to set some flags in the ‘zinit’ sequence. file_suffix is a character string, that is suffixed to the output files names instead of ‘.data’. If the first character is the null character ‘char(0)’, the default suffix, ‘.data’ is appended. info and idxerror are integer used for error reporting. idxerror value is 0 if there was no error. It is negative for an alert, positive for a very serious error. The precise value determines where the error occured. info is an integer holding more precise information about the error. It is usually the information value from lapack. The precise meaning of these error codes is in tab:error_codes.

    Source of error or warninginfoidxerror
    state matrix inversion in kerinversion1
    time advance system resolution in kersystem2
    transfer propagator, (I - D) inversioninversion3
    kalman analysis state matrix advance in phase space, (I - D) inversioninversion21
    kalman analysis variance covariance matrix non positiveCholeski22
    kalman analysis error matrix inversioninversion23
    kalman error matrix advancesystem24
    transfers determination linearity problem for transfers-1
    transerts determination Newton D_loop does not converge-2

    table 3.1: Meaning of error codes returned by principal.

    In general more information than the provided arguments has to be passed to the principal subroutine, in that case a common block, to be written in the ‘zinit’ sequence can be used.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.3 Describing 1D gridded model

    Specific macros have been built that allow generic description of 1D gridded models. Because of the necessity of defining left and right limiting conditions, the models are partitionned in three groups for cell and transfer components. In the following example, a chain of masselottes linked by springs and dumps is bounded to a wall on the left, and open at right. The TEF formulation of the problem is written in the phase space (position-shift, velocity) for node k, with bounding conditions:

    {    pos    vel
  ∂tηk  = ηk
  ∂tηvkel= (φspkr- φspk+r1 + φdkmp- φdmk+p1 )∕mk
    {  spr       pos   pos
  φk  = - kk(ηk  - ηk-1)
  φskpr= - dk(ηvkel- ηvek-l1)
    (   pos
||||  η0  = 0
{   ηv0el= 0
|| φsNp+r1 = 0
||(  dmp
  φN+1 = 0

    where mk is the mass of node k, rk and dk the rigidity of springs and dumping coefficients. There are N nodes in the grid, from 1 to N, and two nodes outside of the grid, a limiting node 0, and a limiting node N + 1. The limiting node corresponding with node 0 is called the down node, while the limiting node corresponding with node N + 1 is called the up node. Other models not part of the 1D grid may be added if any.

    To enable 1D gridded models, one should set the select flag ‘grid1d’. In cmz it is achieved setting the select flag in ‘selseq.kumac’, like

     
    sel grid1d
    

    With make, the SEL variable should contain grid1d. For example to select grid1d and monitor, it could be

     
    SEL = grid1d,monitor
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.3.1 Setting dimensions for 1D gridded model

    In that case the number of nodes, the number of states and tranferts per node, and the number of limiting transfers and states are required. These dimensions has to be entered in the ‘DimEtaPhi’ sequence. The parameters for cells are

    n_node

    Number of cell nodes in the 1D grid.

    n_dwn

    Number of limiting cells with index -1, i.e. number of cells in the limiting down node.

    n_up

    Number of limiting cells with index +1, i.e. number of cells in the limiting up node.

    n_mult

    Number of cells in each node (multiplicity).

    The parameters for transfers, are similarly m_node, m_dwn, m_up, m_mult. The layout of their declaration should be respected as the precompiler matches the line. Also this procedure is tedious, it should be selected for debuging processes (use the flag sel dimetaphi in “selsequ.kumac”. Otherwise, the dimensioning sequence will be automaticaly generated, which is smart but can lead to diffculty in interpreting syntax errors. Once a model is correctly entred, turn off the sel flag and further modifications will automatically generate the proper dimensions. The correctness of dimensionning should nevertheless always be checked in principal.f, where you can also check that null valued parameters as lp, mobs, nxp will suppress parts of the code - this is signaled as Fortran comment cards.

    In our example, there are three grids of cell and transfer variables (n_node=m_node=3). There are two cells and two transfers in each node (n_mult=2 and m_mult=2). There is no limiting condition for the states in the down node therefore n_up=0. There is no transfer for the first limiting node, and therefore m_dwn=0. There are two states in the limiting node 0, the down node, n_dwn=2, and two transfers in the limiting last node the node up, and m_up=2:

     
    ! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    ! nodes parameters, and Limiting Conditions (Low and High)
    ! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
          parameter (n_node=3,n_dwn=2,n_up=0,n_mult=2);
          parameter (m_node=3,m_dwn=0,m_up=2,m_mult=2);
    ! ________________________________________________________
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.3.2 1D gridded Model coding

    The model code and parameters go in the ‘zinit’ sequence.

    Parameters

    A value for the Miniker parameters and the model parameters should be given in ‘zinit’, in our example we have

     
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Parameters
    !%%%%%%%%%%%%%%%%%%%%%%
    real rk(n_node),rd(n_node),rmassm1(n_node);
    
    data rk/n_node*1./;
    data rd/n_node*0.1/;
    data rmassm1/n_node*1./;
         dt=.01;
         nstep=5 000;
         modzprint = 1000;
         time=0.;
    

    Limiting conditions

    There are four mortran blocks for node and up and down, both for states and transfers:

    set_dwn_eta

    down node cells

    set_up_eta

    up node cells

    set_dwn_phi

    down node transfers

    set_up_phi

    up node transfers

    The following scheme illustrates the example:

     
    !%%%%%%%%%%%%%%%%%%%%%%%%%%================================================
    ! Maillage convention inode
    !%%%%%%%%%%%%%%%%%%%%%%%%%%                                 Open ended
    !(2 Down    Phi    Eta                         (n_node)
    ! Eta)  \|       .-----.       .-----.          .-----.        /
    ! wall  \|-\/\/\-|     |-\/\/\-|     |  . . .  -|     |-\/\/\- |dummy
    !  pos  \|--***--|  1  |--***--|  2  |  . . .  -|  n  |--***-- |Phis
    ! speed \|   1   |_____|   2   |_____|      n   |_____|  n+1   \(2 Up Phi)
    !
    

    Two states are associated with the down node, they correspond to the position and speed of the wall. As the wall don’t move these states are initialized to be 0, and the cells are stationnary cells, therefore these values remain 0.

     
    ! Down cells (wall)
    ! -----------------
    eta_pos_wall = 0; eta_speed_wall = 0.;
    
    set_dwn_eta
    < var: eta_pos_wall,  fun: deta_pos_wall  = 0.;
      var: eta_speed_wall, fun: deta_speed_wall= 0.;
    >;
    

    There are 2 limiting transfers in the up node. They correspond with an open end and are therefore set to 0.

     
    ! limiting Transfers : dummy ones
    ! -------------------------------
    set_Up_Phi
    < var:ff_dummy_1, fun: f_dummy_1=0.;
      var:ff_dummy_2, fun: f_dummy_2=0.;
    >;
    

    Starting points

    The cell node state values are initialized. They are in an array indexed by the inode variable. In the example the variable corresponding with position is eta_move and the variable corresponding with speed is eta_speed. Their initial values are set with the following mortran code

     
    !---------------
    ! Initialisation
    !---------------
    ;
    do inode=1,n_node <eta_move(inode)=0.01; eta_speed(inode)=0.0;>;
    

    If any transfer needs to be given a first-guess value, this is also done using inode as the node index.

    Grid node equations

    Each node is associated with an index inode. It allows to refer to the preceding node, with inode-1 and the following node inode+1. The node states are declared in set_node_Eta block and the transfers are in set_node_Phi blocks.

    In the example, the cells are declared with

     
    ! node cells
    ! ----------
    ;
    set_node_Eta
    < var: eta_move(inode),  fun: deta_move(inode) = eta_speed(inode);
      var: eta_speed(inode),
      fun: deta_speed(inode) = rmassm1(inode)
                                 *( - ff_spring(inode+1) + ff_spring(inode)
                                   - ff_dump(inode+1)  + ff_dump(inode)
                                  );
    >;
    

    Note that the inode is dummy in the var: definition and can as well be written as: var: eta_move(.).

    The transfers are (ff_spring corresponds with springs and ff_dump with dumps):

     
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Transfer definition
    !%%%%%%%%%%%%%%%%%%%%%%
    ! node transfers
    ! --------------
    ! convention de signe spring : comprime:= +
    set_node_Phi
    < var: ff_spring(.),
      fun:
       f_spring(inode)= -rk(inode)*(eta_move(inode) - eta_move(inode-1));
      var: ff_dump(.),
      fun:
       f_dump(inode)  = -rd(inode)*(eta_speed(inode) - eta_speed(inode-1));
    >;
    

    The limiting states and transfers are associated with the states or transfers with index inode+1 or inode-1 appearing in node cell and transfer equations (inode-1 for down limiting conditions and inode+1 for up limiting conditions) in their order of appearance. In our example, in the eta_speed state node equation ff_spring(inode+1) appears before ff_dump(inode+1) and is therefore associated with ff_dummy_1 while ff_dump(inode+1) is associated with the ff_dummy_2 limiting transfer, as ff_dummy_1 appears before ff_dummy_2 in the limiting up transfers definitions. Verification of the grid index coherence should be eased with the following help printed in the listing header:

     
    
    
    
      --------------- Informing on Dwn Eta definition ---------------
     Var-name,            Function-name, index in eta vector
             eta_pos_wall        deta_pos_wall  1 [
           eta_speed_wall      deta_speed_wall  2 [
    
      -------------- Informing on Eta Nodes definition --------------
     Var-name,     Function, k2index of (inode: 0 [ 1,...n_node ] n_node+1)
                eta_move           deta_move    1 [   3 ...   7 ]   9
               eta_speed          deta_speed    2 [   4 ...   8 ]  10
    
      ---------------- Informing on Up  Phi  definition -------------
     Var-name,             Function-name, index in ff vector
              ff_dummy_1           f_dummy_1 ]    7
              ff_dummy_2           f_dummy_2 ]    8
             ff_move_sum          f_move_sum ]    9
            ff_speed_sum         f_speed_sum ]   10
      ----------------------------------------------------
    
     -------------- Informing on Phi Nodes definition ---------------
     Var-name,     Function, k2index of (inode: 0 [ 1,...m_node ] m_node+1)
               ff_spring            f_spring   -1 [   1 ...   5 ]   7
                 ff_dump              f_dump    0 [   2 ...   6 ]   8
      ----------------------------------------------------
    

    All variable names and functions are free but has to be different. Any particular node-attached variable k is referred to as: ‘(inode:k)’, where k has to be a Fortran expression allowed in arguments. The symbol ‘inode’ is reserved. As usual other Fortran instructions can be written within the Mortran block ‘< >’ of each set_ block.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.4 Double precision

    The default for real variables is the real Fortran type. It is possible to use double precision instead. In that case all the occurences of ‘real ’ in mortran code is substituted with ‘double precision ’ at precompilation stage, and the Lapack subroutine names are replaced by the double precision names. Eventual users’declaration of complex  Fortran variables is also changed to double complex .

    This feature is turned on by sel double in ‘selseq.kumac’ with cmz and double = 1 in the ‘Makefile’ with make.

    In order for the model to run as well in double as in simple precision, some care should be taken to use the generic intrinsic functions, like sin and not dsin. No numerical constant should be passed directly to subroutines or functions, but instead a variable with the right type should be used to hold the constant value, taking advantage of the implicit casts to the variable type.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.5 Partial Derivatives

    The partial derivative rules are included in a Mortran macro series in ‘Derive_mac’ of Miniker files. When using an anusual function, one should verify that the corersponding rules are in that file. It is easy to understand and add new rules in analogy with the already existing ones.

    For instance, suppose one wants to use the intrinsic Fortran function abs(). Its derivatives uses the other function sign() this way:

     
     &'(ABS(#))(/#)' = '((#1)(/#2)*SIGN(1.,#1))'
    

    In such cases when one is adding a new rule, it is important to use the generic function names only (i.e. sin not dsin), because when compilating Miniker in the double precision version, or complex version, the generic names will correctly handle the different variable types - which is not the case when coding with specific function names.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.5.1 Derivating a power function

    Partial derivative of a function in exponent is not secure in its Fortran form g(x,y)**(f(y)). It should be replaced by power(g,f) of the Miniker ‘mathlib’, or by the explicit form exp(f(y)*log(g(x,y))).

    Its derivative will have the following form:

    ∂xf g = gfg-1∂xf + f glogf ∂xg
        g-1
     = f   (g∂xf + f∂xg)

    and is in the macros list already defined in: ‘DERIVE_MAC’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.6 Rule of programming non continuous models

    Some models may originally be non continuous, as the ones using a Fortran instruction IF. Some may use implicitly a step function on a variable. In such cases, the model has to be set in a derivable form, and use a “smooth step” instead. One should be aware of that this apparently mathematical treatment currently indeed leads to a physical question about the macroscopic form of a physical law. At a macroscipic level, a step function is usually a nonsense. Taking the example of phase-change, a fluid volume does not change phase at once, and a “smooth change of state” is a correct macroscopic model.

    Miniker provides with the smooth step function Heavyside(3) in the Miniker ‘mathlib’:

     
            Delta = -1."K";
            A_Ice =  heavyside("in:" (T_K-Tf), Delta, "out:" dAIce_dT);
    

    in this example, Tf is the ice fusion-temperature, A_ice gives the ice-fraction of the mesh-volume of water at temperature T_k. The smooth-step function is a quasi hyperbolic tangent function of x∕Δ, normalised from 0 to 1, with a maximum slope of 2.5, see figure heavy.

    heavyside

    Figure 3.1: Heaviside function and derivative

    For Mortran to be able to symbolicaly compute the partial derivarives, the rule is in the table of macros as:

     
    &'(HEAVYSIDE(#,#,#))(/#)' = '((#1)(/#4)*HEAVYDELTA(#1,#2,#3))'
    

    which uses the Foratn entry point HeavyDelta in the Fortrsan function heavyside.

    Another type of problem arises when coding a var=min(f(x),g(x)) Fortran instruction. In such a case one does not want a derivative and one will code:

     
    var = HeavySide(f(x)-g(x),Delta,dum)*g(x) + (1.-HeavySide(f(x)-g(x),Delta,dum)*f(x);
    

    or equivalently:

     
    var = HeavySide(f(x)-g(x),Delta,dum)*g(x) + HeavySide(g(x)-f(x),-Delta,dum)*f(x);
    

    Warning: the value of the argument Delta is important because it will fix the maximum slope of the function that will appear as a coefficient in the Jacbian matrices.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.7 Parameters

    It is possible to specify some Fortran variables as specific model parameters. Model parameters may be used in sensitivity studies (see section Sensitivity to a parameter) and in the adjoint model (see section Sensitivity of cost function to parameters). Nothing special is done with parameters with Kalman filtering.

    The parameters are fortran variables that should be initialized somewhere in ‘zinit’. For a variable to be considered as a parameter, it should be passed as an argument to the Free_parameters macro. For example if apar and cpar (from the predator example) are to be considered as parameters, Free_parameters should be called with:

     
    Free_parameter: apar, cpar;
    

    When used with grid1d models (see section Describing 1D gridded model) the inode number may appear in parenthesis:

     
    Free_parameter: rd(1), rk(2);
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.8 Observations and data

    Some support for observations and interactions with data is available. The observations are functions of the model variables. They don’t have any action on the model result, but they may (in theory) be observed and measured. The natural use of these observations is to be compared with data that correspond with the values from real measurements. They are used in the Kalman filter (see section Kalman filter).

    The (model) observation vector is noted ω and the observation function is noted h:

    ω = h(η,φ )


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.8.1 Observations

    The observation functions are set in a set_probe block in the ‘zinit’ sequence.

    For example suppose that, in the predator-prey model, we only have access to the total population of preys and predators, we would have:

     
    set_probe
    < eqn: pop = eta_pred + eta_pray;
    >;
    

    The number of observations is put in the integer variable mobs. The observation vector corresponds with the part of the ff(.) array situated past the regular transferts, ff(mp+.), and is output in the file ‘obs.data’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.8.2 Data

    Currently this code is only used if the Kalman code is activated. This may be changed in the future.

    The convention for data is that whenever some data are available, the logical variable zgetobs should be set to ‘.true.’. And the vobs(.) vector should be filled with the data values. This vector has the same dimension than the observation vector and each coordinate is meant to correspond with one coordinate of the observation vector.

    This feature is turned on by setting the logical variable zdata to ‘.true.’, and the zgetobs flag is typically set in the ‘zsteer’ sequence (see section Executing code at the end of each time step). Every instant data are available (zgetobs is true) the observations are written to the file ‘data.data’. With the Kalman filter more informations are output to the ‘data.data’ file, see Kalman filter results.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.9 Entering model size explicitely

    It is possible to enter the model dimensions explicitely, instead of generating them automatically, as it was done previously. This feature is turned on by sel dimetaphi in ‘selseq.kumac’ with cmz and dimetaphi added to the SEL variable in the ‘Makefile’ with make.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.9.1 The explicit size sequence

    The dimension of the model is entered in the sequence ‘dimetaphi’, using the fortran parameter np for eta(.) and mp for ff(.). For the Lotka-Volterra model, we have two cell components and only one transfer.

     
    parameter (np=2,mp=1);
    

    You should not change the layout of the parameter statement as the mortran preprocessor matches the line.

    You also have to provide other parameters even if you don’t have any use for them. If you don’t it will trigger fortran errors. It includes the maxstep parameter that can have any value but 0, lp and mobs that should be 0 in the example, and nxp, nyp and nzp that should also be 0. The layout is the following:

     
    parameter (np=2,mp=1);
    parameter (mobs=0);
    
    parameter (nxp=0,nyp=0,nzp=0);
    parameter (lp=0);
    parameter (maxstep=1);
    

    If there are observations, (see section Observations), the size of the observation vector is set in the ‘dimetaphi’ sequence by the mobs parameter. For example if there is one observation:

     
    parameter (mobs=1);
    

    To specify parameters (see section Parameters), the number of such parameters has to be declared in ‘dimetaphi’ with the parameter lp. Then, if there are two parameters, they are first declared with

     
    parameter (lp=2);
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.9.2 Entering the model equations, with explicit sizes

    When sizes are explicit, another possibility exists for entering the model equations. The use of symbolic names, as described in Model equations is still possible, and it also becomes possible to set directly the equations associated with the eta(.) and ff(.) vectors.

    In case the symbolic names are not used, the model equations for cells and transfers are entered using a mortran macro, f_set(4), setting the eta(.) evolution with deta_tef(.) and the transfer definitions ff(.) with Phi_tef(.).

    Macro: f_set Phi_tef(i) = f(eta(.),ff(.))

    This macro defines the transfer i static equation. f is a fortran expression which may be function of cell state variables, ‘eta(1)’…‘eta(np)’ and transfers ‘ff(1)’…‘ff(mp)’.

    In the case of the predator-prey model, the transfer definition for φmeet is:

     
    f_set Phi_tef(1) = eta(1)*eta(2);  
    
    Macro: f_set deta_tef(i) = g(eta(i),ff(.))

    This macro defines the cell state component i time evolution model. g is a expression which may be function of cell state variables, ‘eta(1)’…‘eta(np)’ and transfers ‘ff(1)’…‘ff(mp)’.

    The two cell equations of the predator-prey model are, with index 1 for the prey ( ηprey) and index 2 for the predator ( ηpred):

     
    f_set  deta_tef(1) = apar*eta(1)-apar*ff(1);
    f_set  deta_tef(2) = - cpar*eta(2) + cpar*ff(1);
    

    The whole model is:

     
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Transfer definition
    !%%%%%%%%%%%%%%%%%%%%%%
    ! rencontres (meeting)
        f_set Phi_tef(1) = eta(1)*eta(2); 
    
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Cell definition
    !%%%%%%%%%%%%%%%%%%%%%%
    ! eta(1) : prey
    ! eta(2) : predator      
    
        f_set  deta_tef(1) = apar*eta(1)-apar*ff(1);
        f_set  deta_tef(2) = - cpar*eta(2) + cpar*ff(1);
    

    The starting points for cells are entered like:

     
    !     initial state
    !     -------------
         eta(1) = 1.;
         eta(2) = 1.;
    

    If there are observations, they are entered as special transferts with index above mp, for example:

     
    f_set Phi_tef(mp+1) = ff(1) ;
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.10 Programming with cmz directives


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.10.1 Cmz directives used with Miniker

    The main feature of cmz directive is to use code conditionnaly for a given select flag. For example when the double precision is selected (see section Double precision) the use of the conditionnal double flag may be required in case there is a different subroutine name for different types. If, for example, the user use the subroutine smysub for simple precision and dmysub for double precision the following code is an example of what could appear in the user code:

    +IF,double
     call dmysub(eta);
    +ELSE
     call smysub(eta);
    +ENDIF
    

    For a complete reference on cmz directives see the appendix Cmz directives reference.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.10.2 Using cmz directives in Miniker

    In cmz the KEEP and DECK have their cmz directives preprocessed as part of the source files extraction. And the +KEEP and +DECK directives are automatically set when creating the KEEP or DECK. With make, files with these directives has to be created within the files that are to be preprocessed by the cmz directives preprocessor.

    To be processed by make, a file that contains cmz directives should have a file suffix corresponding with the language of the resulting file and with the normal file suffix of that language. More precisely ‘cm’ should be added before the normal file suffix and after the ‘.’. Therefore if the resulting file language is associated with a suffix ‘.suf’, the file with cmz directives should have a ‘.cmsuf’ suffix. The tradition is to have a different suffix for main files and include files. To add directories searched for cmfiles (files with cmz directives) they should be added to the CMFDIRS makefile variable, separated by ‘:’.

    Rules for preprocessing of the files are defined in the file ‘Makefile.miniker’ for the file types described in tab:cmfile_suffix:

    languagefile typecmfile suffixsuffixlanguage
    fortranmain/deck.cmf.fftn
    fortran preprocessedmain/deck.cmF.Ff77
    fortran preprocessedinclude/keep.cminc.incf77
    mortranmain/deck.cmmtn.mtnmtn
    mortraninclude/keep.cmmti.mtimtn

    table 3.2: Association between file language, file type, file suffixes and language identifier in cmz directives. A main file is called a deck in cmz and an include file is called a keep.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4. Dynamic analysis of systems in Miniker


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.1 Automatic sensitivity computation

    An obvious advantage of having acces to the Jacobian matrices along the system trajectory concerns automatic sensitivity analyses, as either:

    • the sensitivity of all variables to perturbation in the initial condition of one state variable;
    • the same sensitivities to an initial pulse (or step) on a transfer;
    • the same sensitivities to a series of pulses (or steps) on a transfer;
    • the same for a change in a parameter, eventually during the run;
    • the sensitivity of the matrix of advance in state space to a change in a parameter.

    This is declared in Zinit as:

     
    ! -------------
    ! Sensitivities
    ! -------------
    Sensy_to_var
    < var: eta_pray, pert: INIT;
      var: eta_pred, pert: INIT;
    >;
    

    Each variable at origin of a perturbation is declared as var:, and the type of perturbation in pert:. Here, INIT conditions are only allowed because the two variables are states variables. For transfers, pert: pulse corresponds to an initial pulse, pert: step_resp and pert: step_eff to initial steps, the difference between _resp (response form) and _eff (effect form) concerns the diagonal only of the sensitivity matrix (see Feedback gains in non-linear models).

    Non initial perturbation can also be asked for:

     
      Sensy_to_var
      <
    !*     var: eta_courant_L, pert: init at 100;
    !*     var: ff_T_czcx,     pert: pulse at 100 every 20;
    !*     var: ff_Psi_Tczcx,  pert: step_eff;
    !*     var: ff_Psi_Tczcx,  pert: step_Resp at 10 every 100;
    ! *** premiers tests identiques a lorhcl.ref
        var: ff_courant_L , pert: step_eff;
        var: ff_T_czcx    , pert: step_eff;
        var: ff_Psi_Tczcx , pert: step_eff;
        var: ff_Psi_Tsz   , pert: pulse at 100 every 50;
      >;
    

    In this example taken from ‘lorhcl’, a sensitivity can increase so as to trespass the Fortran capacity, so that each sensitivity vector (matrix column) can be reset at some time-increment at III every JJJ;

    It is noteworthy that these sensitivity analyses are not based on difference between two runs with different initial states or parameter values, but on the formal derivatives of the model. This method is not only numerically robust, but is also rigorously funded as based on the TLS of the model(5).

    If the dimetaphi sequence is built by the users, he should declare the number of perturbing variables as nxp=:

     
          parameter (nxp=np,nyp=0,nzp=0);
    

    here, all state variables are considered as perturbing variables.

    The sensitivity vectors are output in the result files ‘sens.data’ for cells and ‘sigma.data’ for transfers. In those files the first column corresponds again with time, and the other columns are relative sensitivities of the cell states (in ‘sens.data’) and transfers (in ‘sigma.data’) with respect to the initial value of the perturbed state.

    In our predator-prey example, the second column of ‘sens.data’ will contain the derivative of η1(t) with respect to η1(t = 0). Drawing the second column of ‘sens.data’ against the first one gives the time evolution of the sensitivity of eta-pred to a change in the initial value of eta-pray. One can check in that it is set to 1 at t = 0:

     
    #    Sensy_to: eta_pray         3        eta_pred         5       
    # time \\  of: eta_pray     eta_pred     eta_pray     eta_pred    
      0.00000E+00  1.00000E+00  0.00000E+00  0.00000E+00  1.00000E+00
      1.00000E-02  9.90868E-01  1.11905E-02 -1.26414E-02  9.98859E-01
    

    The two last columns are the state sensitivity to a change in initial conditions of the number of predators.

    In the same way, the j+1th column of ‘sigma.data’ will be the derivative of ϕj(t) with respect to ηi(t = 0) . Here:

     
    #    Sensy_to: eta_pray     eta_pred    
    # time \\  of: ff_interact  ff_interact 
      0.00000E+00  1.60683E+00  8.47076E-01
      1.00000E-02  1.59980E+00  8.18164E-01
    

    the unique transfer variable gives rise to two sensitivity columns.

    Sensitivity studies are usefull to assess the predictability properties of the corresponding system.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.1.1 Sensitivity to a parameter

    A forward sensitivity to a parameter will be computed when specified as described in Parameters. For example, suppose that the sensitivity to an initial change in the apar parameter of the predator model is of interest.

    The sensitivity calculs is turned on as a forward parameter specified on the Free_parameter list:

     
    Free_parameter: [fwd: apar, cpar];
    

    The result are in ‘sensp.data’ for cells and ‘sigmap.data’ for transfers.

     
    #    Sensy_to: pi_prandtl       3            4        pi_rayleigh_     6
    # time \\  of: eta_courant_ eta_T_czcx   eta_T_sz     eta_courant_ eta_T
      0.00000E+00  0.00000E+00  0.00000E+00  0.00000E+00  0.00000E+00  0.000
      2.00000E-03 -4.77172E-03 -3.99170E-05  3.55971E-05 -9.94770E-05 -1.004
    

    In the above example from ‘lorhcl’ sensitivity of the three states with respect to an initial change in two parameters are independantly given (first line also numbers the column to easy gnuplot using).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.1.2 Advance matrix sensitivity

    It is possible to look at the sensitivity of the matrix of advance in states space (the matrix aspha) with regard to a parameter. The parameter must be accounted for in the parameter number and be in the parameter list, flagged as the matrix mx parameter, like in

     
    Free_parameter: [mx: apar], cpar;
    

    This feature is associated with a selecting flag, ‘dPi_aspha’. One gets the result in the matrix d_pi_aspha(.,.) of dimension (np,np).

    This matrix may be used to compute other quantities, for example it may be used to compute the sensitivity of the eigenvalues of the state-advance matrix with regard to the [fwd] parameter. These additional computations have to be programmed by the user in ‘zsteer’ with matrices declared and initialized in ‘zinit’. An example is given in the example ‘lorhcl’ provided with the Miniker installation files, following a method proposed by Stephane Blanco.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.2 Adjoint model and optimisation with Miniker

    In the following a possible use of Miniker for optimisation is discussed. More precisely the use of adjoint and control laws in Miniker are presented. Optimisation isn’t the only application of these tools, but it is the most common one. In that case the adjoint may be used to determine the gradient of a functional to perturbations in the control laws, and an optimisation process can use this information to search for the optimum. Another application of the adjoint is to compute the sensitivity of a cost function to parameters (the ones declared in the free_parameters:’ list. Note that the cost function can be sensitive to probe’s variables, even if these are uncoupled with standard variables in the forward calculations; this is the case when minimizing a quadratic distance function between probes (from the model) and the corresponding measurements.

    The code is close transcription of the mathematical calculus described in
    http://www.lmd.jussieu.fr/ZOOM/doc/Adjoint.pdf . It essentialy reverse time and transpose the four Jacobian matrices: states and transfers are saved in array dimensionned with maxstep Fortran parameter.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.2.1 Overview of optimisation with Miniker

    In the proposed method, Miniker is run twice, one time forward and then backward to determine the trajectory and the adjoint model. After that the control laws are modified by a program external to Miniker. The same steps are repeated until convergence. More pecisely,

    forward

    The command law h(t) is given (by an explicit law or taken from a file). The trajectory is computed in a classical way, with the additionnal computation of the functional to be optimised, J, prescribed with specific f_set macros. The states, transfers and control laws are stored.

    backward

    The adjoint variable is computed from the last time T backward. The time increment is re-read as it could have changed during the forward simulation. The system is solved by using the same technics as in the forward simulation, but with a negative time step.

    external phase

    Now the command should be corrected. This step isn’t covered here, but, for example, minuit the optimisation tool from the CERN could be used. In order to ease such a use of Miniker, the principal program has to be compiled as a subroutine to be driven by an external program (see section Calling the model code).

    The functionnal J to be optimised is defined as

                           ∫ T
J = ψ [η(T),φ(T),h(T)]+    l[η(τ),φ (τ ),h(τ)]dτ
                        0

    Where ψ is the final cost function, l is the integrand cost function and h represents the control laws variations.

    The general use of the adjoint model of a system is the determination of the gradient of this J functional to be optimised, with respect to perturbations of the original conditions of the reference trajectory, that is, along its GTLS(6).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.2.2 Control laws

    Each control law is associated with one cell or transfer equation, meaning that a command associated with an equation does not appear in any other equation. It is still possible to add commands acting anywhere by defining a transfer equal to that command.

    The control laws associated with states are in the ux_com(.) array, control laws associated with transfers are in the uy_com(.) array. The control laws may be prescribed even when there is no adjoint computed, nor any optimisation, and they are used during simulation, in which case they will act as external sources. To enable the use of commands, the logical flag Zcommand should be .true..

    The command can be given either as:

    1. a table of numerical values in the files ‘uxcom.data’ and ‘uycom.data’.
    2. a function of the problem variables. To turn that feature on the logical flag Zlaw should be set to .true. in ‘zinit’. The sequence ‘zcmd_law’ should hold the code filling the ux_com(.) and uy_com(.) arrays, as the code from that sequence is used whenever the control laws are needed. In that case the files ‘uxcom.data’ and ‘uycom.data’ will be filled by the command values generated by the function along the trajectory.

    For example in the Lotka-Volterra model, the parameter apar could be a control variable. In that case, apar would be defined as the variable ux_com(1), and either entered as a law in the sequence ‘zcmd_law’ , either written in the file ‘uxcom.data’ step by step. In that case, there must be a perfect corresponodence between time of the commands and time of the run.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.2.3 Cost function coding and adjoint modeling

    First of all the flag zback should be set to .true. in order to allow adjoint model computation:

     
    Zback=.true.;
    

    The two functions cout_Psi corresponding with the final cost and cout_l corresponding with the integrand cost are set up with the f_set macros.

    Macro: f_set cout_Psi = f(eta(.),ff(.),ux_com(.),uy_com(.))

    This macro defines the final cost function. f is a fortran expression which may be function of cell state variables, ‘eta(1)’…‘eta(np)’, transfers ‘ff(1)’…‘ff(mp)’, state control laws ‘ux_com(1)’…‘ux_com(np)’, and transfer control laws ‘uy_com(1)’…‘uy_com(mp)’.

    Macro: f_set cout_l = f(eta(.),ff(.),ux_com(.),uy_com(.))

    This macro defines the integrand cost function. f is a fortran expression which may be function of cell state variables, ‘eta(1)’…‘eta(np)’, transfers ‘ff(1)’…‘ff(mp)’, state control laws ‘ux_com(1)’…‘ux_com(np)’, and transfer control laws ‘uy_com(1)’…‘uy_com(mp)’.

    For example, the following code sets a cost function for the masselottes model:

     
    ! Initialisation 
      F_set cout_Psi = eta_move(inode:1);
    !and f_set cout_l integrand in the functionnal    
      F_set cout_l = 0.;
    

    In that example the functional is reduced to the final value of the first state component. Here, the adjoint vector will correspond to the final sensitivity (at t = 0) of that component (here the first masselotte position) to a perturbation in all initial conditions(7).

    The following variables are set during the backward phase, and output in the associated files:

    varfileexplanation
    v_adj(.)vadj.dataadjoint to eta(.)
    w_adj(.)wadj.dataadjoint to ff(.)
    wadj(mp+.)gradmuj.dataadjoint to ff(mp+.)
    graduej(.)gradxj.dataadjoint to ux_com(.)
    gradufj(.)gradyj.dataadjoint to uy_com(.)
    hamiltonhamilton.datatime increment, hamiltonian, cost function increment

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.2.4 Sensitivity of cost function to parameters

    The sensitivity of the cost function to all the parameters given as arguments of Free_parameters is computed. For the predator model the sensitivity of a cost function consisting in the integral of the predator population with respect with apar an cpar is obtained with a number of parameters set to 2 in ‘dimetaphi’:

     
    parameter (lp=2);
    

    And the cost function and Free_parameters list in ‘zinit’:

     
    f_set cout_Psi = eta(2);
    f_set cout_l = eta(2);
    Free_parameters: apar,cpar;
    

    apar and cpar also have to be given a value. The result is output in ‘gradpj.data’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3 Kalman filter

    The Kalman filter allows for data assimilation along the model run. In that case it is assumed that there is a real-world model with stochastic perturbations on the states, and that noisy observations are available. The situation implemented in Miniker corresponds to a continuous stochastic perturbation on the state, and discrete noisy observations. In the TEF this leads to:

    ∂tη(t) = g(η(t),φ(t))+ W (t)μ
 φ (t) = f (η(t),φ (t))

 ω (t) = h (η(t),φ (t))+ ν

    The observations ω are available at discrete time steps t = si. The stochastic perturbation on state, μ is characterized by a variance-covariance matrix Q and the noise on the observation, ν has a variance-covariance matrix R. W relates states with stochastic perturbations. At each time step the Kalman filter recomputes an estimation of the state and the variance-covariance matrix of the state.

    In the following we use the example of a linear model with perturbation on state and observation of state. The model has 3 states and 3 corresponding transfers (equal to the states), but the error on the state is of dimension 2. The 3 states are observed. The corresponding equations read:

    (
|{ ∂tη1 = a11η1 + a12φ2 + a13φ3 + W11 μ1 + W12μ2
| ∂tη2 = a21φ1 + a22η2 + a23φ3 + W21 μ1 + W22μ2
( ∂tη3 = a31φ1 + a32φ2 + a33η3 + W31 μ1 + W32μ2
    (
|{ φ1 = η1
  φ2 = η2
|( φ  = η
   3    3
    (
|{ ω1 = φ1 + ν1
  ω = η  + ν
|(  2   2   2
  ω3 = η3 + ν3


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3.1 Coding the Kalman filter

    First of all the Kalman filter code should be activated. The observations code is also required (see section Observations). If cmz is used the code should be selected with the select flag kalman in the ‘selseq.kumac’:

     
    sel kalman
    

    With make the kalman variable should be set to 1:

     
    kalman = 1
    

    The kalman code is actually used by setting the flag zkalman to .true., for example in the ‘zinit’:

     
    zkalman = .True.;
    

    With the Kalman filter the dimension of estimated states, of the error on the state and of the observation, the W matrix, the observation function, the initial variance-covariance matrices on the state and the variance-covariance matrices of errors have to be given.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3.1.1 Kalman filter vectors dimensions

    These dimensions should be set in the ‘zinit’ sequence. The size of the estimated states is given by the parameter nkp. You can set this to np if all the states are estimated, but in case there are some deterministic state variables, nkp may be less than np. In that case the first nkp elements of eta(.) will be estimated using the Kalman filter.

    The error on state dimension is associated with the parameter nerrp and the size of the observations vector is mobs (see section Observations). In our example the dimensions are set with:

     
    parameter (nkp=np);
    parameter (mobs=3);
    parameter (nerrp=2);
    

    All the states are estimated, there are 3 observation functions and the error on the state vector is of dimension 2.

    If the sizes are set explicitely, the parameters should be set in ‘dimetaphi’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3.1.2 Error and observation matrices

    Initial variance-covariance matrix on the state

    The variance-covariance on the state matrix is covfor(.,.). The initial values have to be given for this matrix, as in our example:

     
    covfor(1,1) = 1000.; covfor(1,2) = 10.; covfor(1,3) = 10.;
    covfor(2,1) = 10.; covfor(2,2) = 5000.; covfor(2,3) = 5.;
    covfor(3,1) = 10.; covfor(3,2) = 5.; covfor(3,3) = 2000.;
    

    This matrix is updated by the filter at each time step because the states are pertubated by some noise, and when assimilation takes place as new information reduce the error.

    Observations and error on state matrix

    The matrix that relates errors on states vector components to states, corresponding with W is mereta(.,.). In our example it is set by:

     
    mereta(1,1) = 1.;  mereta(1,2) = 0.;
    mereta(2,1) = 0.;  mereta(2,2) = 1.;
    mereta(3,1) = 0.5;  mereta(3,2) = 0.5;
    

    The observation functions are set by a f_set macro with Obs_tef(.) as described in Observations. In our example the observation functions are set by:

     
    f_set Obs_tef(1) = ff(1) ;
    f_set Obs_tef(2) = eta(2);
    f_set Obs_tef(3) = eta(3);
    

    Error variance-covariance matrices

    The variance-covariance matrix on observation noise is covobs(.,.) set, in our example, by:

     
    covobs(1,1) = 0.3; covobs(1,2) = 0.; covobs(1,3) = 0.;
    covobs(2,1) = 0.; covobs(2,2) = 0.1; covobs(2,3) = 0.;
    covobs(3,1) = 0.; covobs(3,2) = 0.; covobs(3,3) = 0.2;
    

    The variance-covariance matrix on state noise is coveta(.,.) set, in our example, by:

     
    coveta(1,1) = 0.2; coveta(1,2) = 0.001;
    coveta(2,1) = 0.001; coveta(2,2) = 0.1;
    

    These matrices are not changed during the run of the model as part of the filtering process. They may be changed by the user in ‘zsteer’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3.2 Kalman filter run and output


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3.2.1 Feeding the observations to the model

    The observations must be made available to the model during the run. These observations are set in the vobs(.) array, and the assimilation (also called the analysis step of the filter) takes place if the logical variable zgetobs is .true. (see section Data).

    These steps are typically performed in the ‘zsteer’ sequence. In this sequence there should be some code such that when there are data ready to be assimilated, zgetobs is set to .true. and the data is stored in vobs(.), ready for the next step processing.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3.2.2 Kalman filter results

    The estimated states and transfers are still in the same ‘.data’ files, ‘res.data’ and ‘tr.data’ and there is the additional file with observations, called ‘obs.data’ (see section Observations). Each time zgetobs is .true. the data, and the optimally weighted innovations are output in the file associated with data, ‘data.data’ (see section Data).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3.3 Executing code after the analysis

    The analysis takes place before the time step advance when zgetobs is .true.. It may be usefull to add some code after the analysis and before the time step advance. For example the analysis may lead to absurd values for some states or parameters, it could be usefull to correct them in that case. The sequence included after the analysis is called ‘kalsteer’. At this point, in addition to the usual variables the following variables could be usefull:

    etafor(.)

    The state before the analysis.

    kgain(.)

    The Kalman gain.

    innobs(.)

    The innovation vector (observations coherent with the states minus data values).

    covana(.,.)

    The variance-covariance error matrix after the analysis.

    At each time step the derivative of the observation function with respect to transfer and cells variables are recomputed. The elimination of transfers is also performed to get the partial derivative of the observation function of the equivalent model, with states only, with respect to the states. In other words, the Kalman filter does not follow the TEF formalism, because the advance of the var-covar matrix could not yet be set in the TEF form.

    obspha(.,.)

    derivative of observation function in state space with respect to cell variables.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.4 Feedback gain

    The feedback dynamic gain associated with a feedback loop can be expressed as the inverse Borel transform of the coefficient of the reduced scalar coupling matrix, g(τ), associated with a transfer. A Borel sweep provides this g(τ). Therefore it is an interesting tool for the characterization of the feedback loop(8).

    As explained in the ZOOM web page document http://www.lmd.jussieu.fr/ZOOM/doc/Feedback_Gain.pdf, this allows for the calculation of the dynamic gain and factor of any feedback that goes through a unique transfer variable. An example of the conclusions that can be drawn from such an analysis is provided in the same document.

    For linear systems – whose GTLS are autonomous along the whole trajectory – the τ function of the feedback gain is independent of the position on the system trajectory. But in general it is dependant, and one can analyse the function g(τ;t) defined on a segment t of the trajectory.

    The document introducing the TEF-ZOOM technique explains how a Crank-Nicolson scheme for the time discretisation symbolically gives the solution of the Borel transform of the system. One can identify the dt variable with the Borel τ within a factor 2 . Hence, to numerically study the τ dependency of the transform of various coefficients in the system coupling matrix at one point in time, one can calculate the Borel transform of the TLS solutions by making a time-step sweep.

    The function g(τ;t) is simply output for the feedback gain attached to a unique ff(k) transfer variable. All the relevant informations should be entered in the ‘zinit’ sequence.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.4.1 Specifying the Borel sweep

    First of all the logical flag ZBorel should be raised:

     
    ZBorel=.true.;
    

    The index of the studied transfer is given in the index_ff_gain variable

     
    index_ff_gain=7;
    

    At each time step a Borel sweep may be performed. The time steps of interest are specified with three variables, one for the first step, one for the last step and one for the number of steps between two Borel sweeps:

    istep_B_deb

    First time step for the Borel sweep.

    istep_B_fin

    Last time step for the Borel sweep.

    istep_B_inc

    Number of time steps between Borel sweeps.

    In the following examples Borel sweeps are performed from the time step 1000 up to the time step 1200, with a sweep at each time step:

     
    istep_B_deb=1000;   
    istep_B_fin=1200;  
    istep_B_inc=1;      
    

    For each Borel sweep, the range of the τ variable should be set. As this is a multiplicative variable the initial value, a multiplicative factor and the number of values are to be given.

    tau_B_ini

    Initial value for τ.

    tau_B_mult

    Multiplicative factor for sweep in tau.

    itau_max

    Number of τ values.

    For example, in the following, at each time step, the Borel transform will be computed for τ values starting at 0.2 and then multiplied a hundred times by ∘ __√ _2

     
    tau_B_ini=0.2;    
    tau_B_mult=sqrt(sqrt(2.)); 
    itau_max=100;             
    

    When the initial value of τ is set to a negative value (i.e. tau_B_ini=-0.2;), the Borel sweep will first be applied with itau_max negative values for -0.2, tau_B_mult*(-0.2),..., then for the zero value, and finally for the symetric positive values, resulting in 2*itau_max+1 values for τ.

    The whole example reads

     
    ! -------------------
    ! Feedback gain
    ! Borel
    ! -------------------
    ZBorel=.true.;
    if ZBorel           
    <  istep_B_deb=1000; 
       istep_B_fin=1200;
       istep_B_inc=1;  
    ;
       index_ff_gain=7; 
       tau_B_ini=0.2;    
       tau_B_mult=sqrt(sqrt(2.)); 
       itau_max=100;             
       z_pr/Borel/:tau_B_mult,tau_B_ini*(tau_B_mult)**itau_max;
    >;
    

    Instead of using the index of the transfer in index_ff_gain it is possible to specify the name of the transfer.In that case the transfer is specified by the zborel for macro. For example if the transfer selected for the feedback gain computation is b_transfer, it can be selected with:

     
    zborel for: b_transfer;
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.4.2 Borel sweep results

    The file ‘tau_Borel.data’ gives the τ values of the tau sweep, and the file ‘gains.data’ records the feedback gain function values of g(τ), with one line for each sweep along the trajectory. In the 1.01 version, a new feature is also provided giving the poles and residuals of the Borel transform in the file ‘vpgains.data’. Consult the subroutine Boreleig for (not definitive) output description.

    One can easily obtain the surface contours of g(t,τ) using the Fortran program provided as ‘gains.f’ and its compilation shell ‘gains.xqt’, that builds 2D histograms for PAW, in which one uses the ‘borels.kumac’ provided kumac.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.5 Stability analysis of fastest modes

    The preceding analyses are done along with a simulation. One has also the possibility of using in a more classical fashion the state advance matrix Ast, after the end of the simulation. Code to perform the SVD (Singular Value Decomposition) of the state matrix Ast and also of Ast + A† st is provided with Miniker. The singular elements of these two matrices correspond to the most rapid modes of instability of the perturbed system.

    The Singular value decomposition of a matrix is noted

        †
UwV

    An executable file, ‘sltc.exe’ is generated and running this file will produce the corresponding results.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.5.1 Singular Value Decomposition with cmz

    The cmz macro smod SLTC prepares a main program (‘circul’ of +PATCH SLTC), provided as a base for user’s own analysis, in the directory ‘sltc/’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.5.2 Singular Value Decomposition with make

    To compile the singular value decomposition executable with make you can do

     
    make sltc.exe
    

    If you want to have a separate directory for the SVD, you should copy the sequence ‘dimetaphi.inc’ (or make a link to that file) to the directory. You should also copy the file ‘Makefile.sltc’ from the ‘template/’ directory in this directory, rename it ‘Makefile’ and set the Miniker directory path in the miniker_dir variable. For example, if the Miniker directory is in ‘/u/src/mini_ker’:

     
    miniker_dir = /u/src/mini_ker
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.5.3 Singular Value Decomposition run and output

    As it is, the ‘sltc.exe’ executable generated by the compilation determines the SVD. This program requires ‘title.tex’ (see Title file) to transmit a title for output and graphics, and ‘aspha.data’ (see section Running a simulation and using the output) to access the state matrix. To get access to these files (in case they are not in the current directory) it is possible to make a link to the corresponding files in the model directory. Once it is done the program may be run:

     
    ./sltc.exe
    

    The files ‘u.data’, ‘w.data’, and ‘v.data’ holds the singular elements for Ast ( U, w and V), and ‘us.data’, ‘ws.data’, and ‘vs.data’ holds the singular elements of Ast + A† st. The corresponding macros ‘.kumac’ for PAW(9) are also generated.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.6 Generalized linear tangent system analysis

    The state matrix Ast may also be used to compute the GTLS propagator (or state transition matrix applied to perturbation), after the simulation. The algorithm is a finite product of 5th order development of Φ(t + δt,t) = expAstδt. Numerous element of analysis are given, in particular the determination of the Lyapunov exponents of the system.

    An executable file, ‘sltcirc.exe’ is generated and running this file will produce the corresponding results.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.6.1 Generalized tangent linear system with cmz

    The cmz macro smod SLTCIRC prepares a main program (‘circule’ of +PATCH SLTCIRC), in the directory ‘sltcirc/’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.6.2 Generalized tangent linear system with make

    To compile the GTLS analysis executable with make you can do

     
    make sltcirc.exe
    

    If you want to have a separate directory for the GTLS analysis, you should copy the sequence ‘dimetaphi.inc’ (or make a link to that file) to the directory. You should also copy the file ‘Makefile.sltcirc’ from the ‘template/’ directory in this directory and rename it ‘Makefile’ and set the Miniker directory path in the miniker_dir variable.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.6.3 Generalized tangent linear system analysis run and output

    The ‘sltcirc.exe’ executable generated by the compilation computes the elements of analysis of the system. This program requires ‘title.tex’ to transmit a title for output and graphics (see Title file), ‘aspha.data’ to access the state matrix and ‘dres.data’, because time-step can be changed along the simulation (see section Running a simulation and using the output) (10). To get access to these files (in case they are not in the current directory) it is possible to make a link to the corresponding files in the model directory. Once it is done the program may be run:

     
    ./sltcirc.exe
    

    The following table gives the correspondence between variable name, result file and ntuple number, with a short explanation:

    varfilentupleexplanation
    p(.,.)phit.data55propagator from 0 to t, Φ(t,0)
    up(.,.)uphit.data50Left singular vectors U in the SVD of Φ
    wp(.)wphit.data51singulat values w in the SVD of Φ
    vp(.,.)vphit.data52Right Singular Vectors V in the SVD of Φ
    wr(.)wr.data53real part of eigen values of Φ(t,0)
    wi(.)wi.data54imaginary part of eigen values of Φ(t,0)
    lwp(.)lwphit.data67Lyapunov exponents

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5. Advanced use of Miniker with make


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.1 Make variables

    The ‘Makefile.miniker’ Makefile provided in the distribution should be included as it defines a lot of important variables and rules.

    The following make variables can be set by the user:

    miniker_dir

    that variable should hold the Miniker sources directory. If you installed Miniker that variable should be set to ‘$(includedir)/mini_ker’. If you use the sources right from the sources directory it should be set to the sources package directory.

    MTNDIRS

    This variable can hold a ‘:’ delimited list of directories that will be searched for mortran include files.

    CMFDIRS

    This variable can hold a ‘:’ delimited list of directories that will be searched for cmz directive include files.

    SEL

    This variable holds a ‘,’ delimited list of select flags, for example monitor, grid1d, debug.

    LDADD

    This variable can be used to add libraries flags and files. It is used in the default linking command/rule.

    miniker_user_objects

    This variable should hold a space separated list of additional object files to be linked with the model and helper object files.

    CAR2TXTFLAGS

    cmz directives preprocessor flag.

    kalman

    This variable should be set to 1 if you want to use the kalman filter (see section Kalman filter).

    double

    This variable should be set to 1 if you want to have a double precision code (see section Double precision).

    The following variables are allready set and may be used (some are set by ./configure see Configuration):

    miniker_principal_objects

    The list of object files needed for the model build, together with some helper object files often used but not strictly required for the linking.

    DEPDIR

    The name of a hidden directory containing the dependencies computed for the main mortran files.

    F77
    FC
    FFLAGS
    LDFLAGS

    Compiler and linker related variables set by ./configure.

    LIBS

    This variable should hold the link flags and files required to build Miniker, set by ./configure.

    CAR2TXT
    MORTRAN
    MTNFLAGS
    MTNDEPEND

    Preprocessor and preprocessor flags, set by ./configure.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.2 Rules

    The following rules are defined in the ‘Makefile.miniker’ file.

    miniker-clean

    remove the fortran files generated from the mortran files. Remove the object files.

    miniker-mtn-clean

    remove the mortran files generated from the files with cmz directives.

    Various rules to preprocess files with cmz directives and mortran files and to compile fortran files.

    If the user needs a mortran main file, he may take advantage of the rule used to compute the dependencies of a mortran file. If the file is called, say, ‘mtnfile.mtn’ leading to ‘mtnfile.f’, the following include should lead to the automatic creation, updating and inclusion of a file describing the dependencies of ‘mtnfile.mtn’ in the ‘Makefile’:

     
    include $(DEPDIR)/mtnfile.Pf
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.3 Linking rule

    The rule used for the linking of the model file is not in the ‘Makefile.miniker’ file but should be provided in the user ‘Makefile’ for more flexibility. The default rule uses the variables miniker_user_objects for additional object files and LDADD for additionnal linking flags and files, those variables are there to be changed by the user.

    The object files required by the Miniker code are in the make variable miniker_principal_objects, this variable is also used. The value of the variables FC for the Fortran compiler, FFLAGS for the Fortran compiler flags and LDFLAGS for the linker flags should be set to right values; LIBS should also be right and hold the link flags and link files required to compile the Miniker model. These variables are set by by ./configure during configuration (see section Configuration) and used in the default rule:

    $(model_file): $(miniker_user_objects) $(miniker_principal_objects)
    	$(FC) $(FFLAGS) $(LDFLAGS) $^ $(LDADD) $(LIBS) -o $@
    

    In case this isn’t right it may be freely changed. You should certainly refer to the (make)Top section ‘Top’ in GNU Make Manual manual to understand what that rule exactly means and make your own.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Concepts index

    Jump to:   $  
    A   B   C   D   E   F   G   H   I   K   L   M   O   P   R   S   T   U   V   Z  
    Index Entry Section

    $
    $dimetaphi2.3.1 Setup a model and compile with cmz
    $zinit2.3.1 Setup a model and compile with cmz

    A
    adjoint4.2.1 Overview of optimisation with Miniker
    aspha.data2.3.3 Running a simulation and using the output
    aspha.data’, GTLS4.6.3 Generalized tangent linear system analysis run and output
    aspha.data’, SVD4.5.3 Singular Value Decomposition run and output

    B
    Borel sweep4.4 Feedback gain
    Borel sweep graphics4.4.2 Borel sweep results
    Borel sweep results4.4.2 Borel sweep results

    C
    cellsIntroduction
    cernlibA.2 Common requisites
    command law4.2.2 Control laws
    compilation2.3.2 Setup a model and compile with make
    configuration of sourceA.4.2 Configuration
    controlling the run2.4 Controlling the run

    D
    data.data3.8.2 Data
    data.data4.3.2.2 Kalman filter results
    dimetaphi3.9.1 The explicit size sequence
    dimetaphi3.9.1 The explicit size sequence
    dimetaphi’, Kalman filter4.3.1.1 Kalman filter vectors dimensions
    down node3.3 Describing 1D gridded model
    dres.data2.3.3 Running a simulation and using the output
    dres.data
    dres.data’, GTLS4.6.3 Generalized tangent linear system analysis run and output

    E
    equations, gridGrid node equations
    error vector dimension4.3.1.1 Kalman filter vectors dimensions

    F
    FDL, GNU Free Documentation LicenseC.1 GNU Free Documentation License
    feature setting3.1 Overview of additional features setting
    Feedback gain4.4 Feedback gain
    ffl (linearity test)2.4.1 Executing code at the end of each time step
    final cost4.2.1 Overview of optimisation with Miniker

    G
    Generalized linear tangent system4.6 Generalized linear tangent system analysis
    gradpj.data4.2.4 Sensitivity of cost function to parameters
    graphics2.3.4 Doing graphics
    graphics with gnuplot2.3.4 Doing graphics
    graphics with PAW2.3.4 Doing graphics
    graphics, Borel sweep4.4.2 Borel sweep results
    GTLS4.6 Generalized linear tangent system analysis
    GTLS output4.6.3 Generalized tangent linear system analysis run and output
    GTLS run4.6.3 Generalized tangent linear system analysis run and output

    H
    Heaviside function3.6 Rule of programming non continuous models

    I
    initial variance-covariance on statesInitial variance-covariance matrix on the state
    installation with makeA.4.3 Installation with make
    integrand cost4.2.1 Overview of optimisation with Miniker

    K
    Kalman filter4.3 Kalman filter
    Kalman filter output4.3.2.2 Kalman filter results
    Kalman filter results4.3.2.2 Kalman filter results

    L
    lapackA.2 Common requisites
    limiting conditionsLimiting conditions
    linearity test2.4.1 Executing code at the end of each time step
    logical flags3.1 Overview of additional features setting
    Lyapunov exponents4.6 Generalized linear tangent system analysis

    M
    Makefile.miniker5.1 Make variables
    Makefile.sltc4.5.2 Singular Value Decomposition with make
    Makefile.sltcirc4.6.2 Generalized tangent linear system with make
    mini_ker.cmzA.3 Miniker with cmz
    mod2.3.1 Setup a model and compile with cmz
    model equations3.9.2 Entering the model equations, with explicit sizes
    model size3.9.1 The explicit size sequence
    Model.hlp2.3.3 Running a simulation and using the output
    mortranIntroduction
    mortran2.2.1 All you need to know about mortran and cmz directives
    mortran, with makeA.4.1 Additional requirements for Miniker with make

    O
    obs.data3.8.1 Observations
    observation function3.8.1 Observations
    observations4.3.1.2 Error and observation matrices
    observations, general4.3 Kalman filter
    optimisation4.2.1 Overview of optimisation with Miniker
    output file2.3.3 Running a simulation and using the output
    output, GTLS4.6.3 Generalized tangent linear system analysis run and output
    output, Kalman filter4.3.2.2 Kalman filter results
    output, sensitivity4.1 Automatic sensitivity computation
    output, SVD4.5.3 Singular Value Decomposition run and output

    P
    printing2.4.2 Controlling the printout and data output
    Programming environmentsA.1 Programming environments
    propagator4.6 Generalized linear tangent system analysis

    R
    requirements, with makeA.4.1 Additional requirements for Miniker with make
    res.data2.3.3 Running a simulation and using the output
    results, Borel sweep4.4.2 Borel sweep results
    results, Kalman filter4.3.2.2 Kalman filter results
    run, GTLS4.6.3 Generalized tangent linear system analysis run and output
    run, SVD4.5.3 Singular Value Decomposition run and output
    running model2.3.3 Running a simulation and using the output

    S
    select flag3.1 Overview of additional features setting
    selseq.kumac3.1 Overview of additional features setting
    selseq.kumacA.3 Miniker with cmz
    sens.data4.1 Automatic sensitivity computation
    sensitivities4.1 Automatic sensitivity computation
    sensitivity, output4.1 Automatic sensitivity computation
    sequence2.1 General structure of the code
    sequences2. Miniker model programming
    sigma.data4.1 Automatic sensitivity computation
    Singular Value Decomposition4.5 Stability analysis of fastest modes
    sltc.exe4.5 Stability analysis of fastest modes
    sltc.exe4.5.3 Singular Value Decomposition run and output
    sltcirc.exe4.6 Generalized linear tangent system analysis
    sltcirc.exe4.6.3 Generalized tangent linear system analysis run and output
    smod4.5.1 Singular Value Decomposition with cmz
    smod4.6.1 Generalized tangent linear system with cmz
    starting pointStarting points
    state matrix4.5 Stability analysis of fastest modes
    SVD4.5 Stability analysis of fastest modes
    SVD output4.5.3 Singular Value Decomposition run and output
    SVD run4.5.3 Singular Value Decomposition run and output

    T
    TEFIntroduction
    TEF2.2 Miniker programming illustrated
    title filetitle file
    title.textitle file
    title.tex’, GTLS4.6.3 Generalized tangent linear system analysis run and output
    title.tex’, SVD4.5.3 Singular Value Decomposition run and output
    tr.data2.3.3 Running a simulation and using the output
    transfersIntroduction

    U
    up node3.3 Describing 1D gridded model
    uxcom.data4.2.2 Control laws
    uycom.data4.2.2 Control laws

    V
    variance-covariance errorError variance-covariance matrices
    variance-covariance matrices4.3.1.2 Error and observation matrices
    variance-covariance matrices, general4.3 Kalman filter
    variance-covariance matrix on stateObservations and error on state matrix

    Z
    zcmd_law4.2.2 Control laws
    zcmd_law.inc4.2.2 Control laws
    zinit2.2.2 Entering model equation and parameters
    zinit, general2.1 General structure of the code
    zinit’, Kalman filter4.3.1.2 Error and observation matrices
    zinit.mti2.3.2 Setup a model and compile with make
    ZOOMIntroduction
    zsteer2.4.1 Executing code at the end of each time step
    zsteer’, Kalman filter4.3.2.1 Feeding the observations to the model
    zsteer.inc2.4.1 Executing code at the end of each time step

    Jump to:   $  
    A   B   C   D   E   F   G   H   I   K   L   M   O   P   R   S   T   U   V   Z  

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Variables, macros and functions index

    Jump to:   A   B   C   D   E   F   H   I   K   M   N   O   P   S   T   V   Z  
    Index Entry Section

    A
    aspha2.4.1 Executing code at the end of each time step

    B
    Bb2.4.1 Executing code at the end of each time step
    Bt2.4.1 Executing code at the end of each time step

    C
    couplage(.)2.4.1 Executing code at the end of each time step
    cout_l4.2.3 Cost function coding and adjoint modeling
    cout_Psi4.2.3 Cost function coding and adjoint modeling
    covana(.,.)4.3.3 Executing code after the analysis
    coveta(.,.)Error variance-covariance matrices
    covfor(.,.)Initial variance-covariance matrix on the state
    covobs(.,.)Error variance-covariance matrices

    D
    D2.4.1 Executing code at the end of each time step
    dEta(.)2.3.3 Running a simulation and using the output
    deta_tef(.)3.9.2 Entering the model equations, with explicit sizes
    dneta2.4.1 Executing code at the end of each time step
    dphi2.4.1 Executing code at the end of each time step
    dt2.2.2 Entering model equation and parameters
    dt
    d_pi_aspha(.,.)4.1.2 Advance matrix sensitivity

    E
    eqn:Model equations
    eta(.)The cell and transfer arrays
    eta(.), explicit sizes3.9.2 Entering the model equations, with explicit sizes
    etafor(.)4.3.3 Executing code after the analysis

    F
    ff(.)The cell and transfer arrays
    ff(.), explicit sizes3.9.2 Entering the model equations, with explicit sizes
    ffl(.)2.4.1 Executing code at the end of each time step
    Free_parameter3.7 Parameters
    fun:Model equations
    f_set3.9.2 Entering the model equations, with explicit sizes
    f_set3.9.2 Entering the model equations, with explicit sizes
    f_set4.2.3 Cost function coding and adjoint modeling
    f_set4.2.3 Cost function coding and adjoint modeling

    H
    H2.4.1 Executing code at the end of each time step

    I
    index_ff_gain4.4.1 Specifying the Borel sweep
    innobs(.)4.3.3 Executing code after the analysis
    istep2.4.1 Executing code at the end of each time step
    istep_B_deb4.4.1 Specifying the Borel sweep
    istep_B_fin4.4.1 Specifying the Borel sweep
    istep_B_inc4.4.1 Specifying the Borel sweep
    itau_max4.4.1 Specifying the Borel sweep

    K
    kgain(.)4.3.3 Executing code after the analysis

    M
    maxstep3.9.1 The explicit size sequence
    mereta(.,.)Observations and error on state matrix
    mobs3.8.1 Observations
    model_file_name2.3.2 Setup a model and compile with make
    modzprint2.2.2 Entering model equation and parameters
    modzprint2.4.2 Controlling the printout and data output
    mpThe cell and transfer arrays
    mp3.9.1 The explicit size sequence
    m_dwn3.3.1 Setting dimensions for 1D gridded model
    m_mult3.3.1 Setting dimensions for 1D gridded model
    m_node3.3.1 Setting dimensions for 1D gridded model
    m_up3.3.1 Setting dimensions for 1D gridded model

    N
    npThe cell and transfer arrays
    np3.9.1 The explicit size sequence
    nstep2.2.2 Entering model equation and parameters
    n_dwn3.3.1 Setting dimensions for 1D gridded model
    n_mult3.3.1 Setting dimensions for 1D gridded model
    n_node3.3.1 Setting dimensions for 1D gridded model
    n_up3.3.1 Setting dimensions for 1D gridded model

    O
    obspha(.,.)4.3.3 Executing code after the analysis

    P
    Phi_tef(.)3.9.2 Entering the model equations, with explicit sizes
    principal3.2.2 Calling the model subroutine

    S
    set_dwn_etaLimiting conditions
    set_dwn_phiLimiting conditions
    set_etaModel equations
    set_node_etaGrid node equations
    set_node_PhiGrid node equations
    set_PhiModel equations
    set_up_etaLimiting conditions
    set_up_phiLimiting conditions

    T
    tau_B_ini4.4.1 Specifying the Borel sweep
    tau_B_mult4.4.1 Specifying the Borel sweep
    time2.2.2 Entering model equation and parameters

    V
    var:Model equations
    vobs(.)3.8.2 Data
    vobs(.)4.3.2.1 Feeding the observations to the model

    Z
    zback4.2.3 Cost function coding and adjoint modeling
    ZBorel4.4.1 Specifying the Borel sweep
    zborel for4.4.1 Specifying the Borel sweep
    zcommand4.2.2 Control laws
    zgetobs3.8.2 Data
    zgetobs4.3.2.1 Feeding the observations to the model
    zkalman4.3.1 Coding the Kalman filter
    zlaw4.2.2 Control laws
    zprint2.4.2 Controlling the printout and data output

    Jump to:   A   B   C   D   E   F   H   I   K   M   N   O   P   S   T   V   Z  

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A. Installation


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.1 Programming environments

    Miniker is not a traditionnal software in that it isn’t a library or an interpreter but rather a set of source and macro file that combines with the user model code and enable to build a binary program corresponding with the model. It requires a build environment with a preprocessor, a compiler and facilities that automate these steps.

    Two different environment are proposed. One use cmz (http://wwwcmz.web.cern.ch/wwwcmz/index.html), while the other is based on make. Other libraries are needed, the CERN Program Library (cernlib) and lapack.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.2 Common requisites

    Whatever method is used a fortran 77 compiler is required. The compilers that have been used so far are g77, gfortran and the sun solaris compiler.

    When usng CMZ, the CERN Program Library, available at http://wwwasd.web.cern.ch/wwwasd/cernlib/, has to be installed. With make, internal source files copied from the cernlib may be used instead but then some examples won’t be available, since they rely on some mathematical functions provided by the CERN library. On windows, in case you want to use the compiler from the GNU compiler collection with cygwin or MINGW/MSYS you can use the binaries provided at http://zyao.home.cern.ch/zyao/cernlib.html. On Mac OS X, the cernlib provided by fink (package cernlib-devel) can be used.

    You should also have LAPACK, available at http://www.netlib.org/lapack/. LAPACK can also be installed as part of the CERN Library or as part of the http://math-atlas.sourceforge.net/ implementation. On most linux distributions a lapack package is available. On Mac OS X, the ATLAS implementation provided by fink or the frameworks from Xcode can be used.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.3 Miniker with cmz

    First of all you have to get the cmz file ‘mini_ker.cmz’ and put it in a directory. In that same directory you should create a directory for each of your models. In the model directory you should copy the file ‘selseq.kumac’ available with Miniker, and create your own cmz file for your model, called for example ‘mymodel.cmz’. You should also have installed the kumac macro files handling mortan compilation, the associated shell scripts and the mortran preprocessor.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.4 Miniker with make


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.4.1 Additional requirements for Miniker with make

    The package has been tested with GNU make and solaris make.

    Suitable preprocessors should also be installed. Two preprocessors are required, one that preprocess the cmz directives, and a mortran preprocessor. A cmz directives processor written in perl, is distributed in the car2txt package available at http://www.environnement.ens.fr/perso/dumas/mini_ker/software.html. A mortran package with a command able to preprocess a mortran file given on the command line with a syntax similar with the cpp command line syntax is also required. Such a mortran is available at http://www.environnement.ens.fr/perso/dumas/mini_ker/software.html.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.4.2 Configuration

    The package is available at http://www.environnement.ens.fr/perso/dumas/mini_ker/software.html. It is available as a compresssed tar archive. On UNIX, with GNU tar it may be unpacked using

     
    $ tar xzvf mini_ker-4.2.tar.gz
    

    The detection of the compiler, the preprocessors (car2txt and mortran), and the libraries are performed by the configure script. This script sets the apropriate variables in makefiles. It can be run with:

     
    $ cd mini_ker-4.2
    $ ./configure
    

    If the output of ./configure doesn’t show any error it means that all the components are here. It is possible to give ./configure switches and also specify environment variables (see also ./configure --help):

    --disable-cernlib

    Use the internal cernlib source files, even if a cernlib is detected.

    --with-static-cernlib

    This command line switch forces a static linking with the cernlib (or a dynamic linking if set to no).

    --with-cernlib

    This command line switch can be used to specify the cernlib location (if not detected or you want to use a specific cernlib).

    --with-blas
    --with-lapack

    With this command switch, you can specify the location of the blas and lapack libraries.

    For example, on mac OS X this can be used to specify the blas and lapack from the Apple frameworks:

     
    ./configure \
    --with-blas=/System/Library/Frameworks/vecLib.framework/versions/A/vecLib \
    --with-lapack=/System/Library/Frameworks/vecLib.framework/versions/A/vecLib
    
    F77
    FC
    FFLAGS
    LDFLAGS

    Classical compiler, compiler flags and linker flags.

    MORTRAN

    This environment variable holds the mortran preprocessor command (default is mortran).

    MTNFLAGS

    This environment variable holds command line arguments for the mortran preprocessor. It is empty in the default case.

    MTN

    This environment variable may be used to specify the mortran executable name and/or path, it should be used by the mortran commmand. (default is empty, which leads to a mortran executable called mtn).

    MTNDEPEND

    This environment variable may be used to specify the mortran dependencies checker executable. It should be used by the mortran commmand. (default is empty, which leads to a mortran dependencies checker called mtndepend).

    After a proper configuration, if make is run then the example models should be build. You have to perform the configuration only once.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.4.3 Installation with make

    Miniker can be installed by running

     
    make install
    

    It should copy the sources and the ‘Makefile.miniker’ file in a ‘mini_ker’ directory in the $(includedir) directory, and copy the templates in ‘$(datadir)/mini_ker’. The default for $(includedir) is ‘/usr/local/include’ and the default for $(datadir) is ‘/usr/local/share’, these defaults may be changed by ./configure switches ‘--prefix’, ‘--includedir’ and ‘--datadir’. See ./configure --help and the ‘INSTALL’ file for more informations. The helper script ‘start_miniker’ should also be installed.

    The installation is not required to use comfortably Miniker. Indeed the only thing that changes with the sources and the ‘Makefile.miniker’ directory location is the miniker_dir variable in a project Makefile.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    B. Cmz directives reference

    The cmz directives are described together with the other features of cmz in the cmz manual at http://wwwcmz.web.cern.ch/wwwcmz/, the important ones are nevertheless recalled here, especially for those that use make and don’t need the whole features of cmz.

    After the description of the generic features, we turn to the cmz directive of interest. There are three kinds of cmz directives that are of use within Miniker: one kind that introduce files, the other for conditionnal compilation and the third for sequence inclusion.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    B.1 Cmz directives general syntax

    The cmz directives always begin with a ‘+’ in the first column, optionnaly followed by any number of ‘_’ that may be used for indentation, then the directive label, case insensitive, followed by the directive arguments separated by ‘,’. The arguments are also case insensitive. Optional spaces may be around directive arguments. An optionnal ‘.’ ends the directive arguments and begin a comment, everything that follows that ‘.’ is ignored.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    B.2 Conditional expressions

    A directive argument common to all the directives is the conditionnal expression. A conditionnal expression may be true or false, it is a combination of select flags. the select flags are combined with logical operators. A select flag itself is true if it was selected. A select flag selflag is selected by using the sel selflag instruction in cmz. It is selected by passing the -D selflag command line switch to the call of the cmz directives preprocessor when using make.

    A ‘-’ negates the expression that follows. Parenthesis ‘(’ and ‘)’ are used for the grouping of subexpressions. ‘|’ and ‘,’ are for the boolean or: an expression with a or is true if the expression on the left or the expression on the right of the or is true. ‘&’ is for the boolean and: an expression with an and is true if the expression on the left and the expression on the right are true.

    The grouping is left to right when there is no parenthesis, with or and ‘&’ having the same precedence. Therefore

     
    a&b|c    ≡    (a&b)|c
    a|b&c    ≡    (a|b)&c
    a|b&c  is not  a|(b&c)
    a&b|c  is not  a&(b|c)
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    B.3 File introduction directives

    A file (or sequence) introduction directive appears at the beginning of the file. There are two different directives, one is DECK for normal files, the other is KEEP for include files (sequences). The first argument is the name of the file. The file name may not be larger than 32 characters and is converted to lower case in the general case. The optionnal following arguments may be of 2 type (and may be mixed, separated by ‘,’):

    conditional

    A conditionnal is introduced by IF= followed by a conditionnal expression described in Conditional expressions. The file is preprocessed if the conditionnal expression is true.

    language specification

    A language specification is introduced by a T=. The most common languages are ‘mtn’ for the mortran, ‘ftn’ for fortran not preprocessed, ‘f77’ for preprocessed fortran, ‘c’ for the c language and ‘txt’ for text files. In general the language of the file determines the name of files the preprocessed file is extracted to, the comment style and the command for inclusions.

    It is a common practice to have wrong language type in KEEP as the language may be determined from the DECK that include them with cmz, or from their file name with make. This is not recommended and considered a bad practice.

    Such a directive will always appear in cmz, as it is built-in. It is recommended to have one when using make too, even though it is not required in most cases. Indeed make uses the file name directly and finds the language and file type by looking at the file extension. make should then pass the language type with a --lang lang command line switch when calling the cmz directives preprocessor. With make, the convention is to have ‘cm’ added before the normal file suffix and after the ‘.’. The table tab:cmfile_suffix shows the matching between suffixes, file type and file language.

    For example, a file beginning with

    +Deck, subroutine_foo, If=monitor&-simple, T=f77. 
    

    is a main preprocessed fortran file that will only be generated if ‘monitor’ is selected and ‘simple’ is not selected. The file to be preprocessed by make should have the ‘.cmF’ suffix, and be called ‘subroutine_foo.cmF’.

    A file beginning with

    +KEEP,inc_common,If=monitor|interface,T=mtn
    

    is an mortran include file that should be processed only if ‘monitor’ or ‘interface’ is selected. The file to be preprocessed by make should have the ‘cmmti’ suffix and be called ‘inc_common.cmmti’. The resulting file when make is used will be called ‘inc_common.mti’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    B.4 Conditional directives

    Conditional directives may be used to conditionnaly skip blocks of code. There are 4 conditional directives: if, elseif, else and endif. +if begins a conditional directives sequence, with argument a conditional expression. If the expression is true the block of code following the +if is output in the resulting file, up to another conditional directive, if it is false the code block is skipped. If the expression is false and the following conditional directive is +elseif, the same procedure is followed with the argument of +elseif which is also a conditionnal expression. More than one +elseif may follow a +if. If a +if or +elseif expression is true the following code block is output and all the following +elseif code blocks are skipped. If all the +if and +elseif expressions are false and the following coditionnal directive is +else then the block following the +else is output. If a previous expression was true the code block following the +else is skipped. The last code block is closed by +endif.

    Conditionnal directives may be nested, a +if begins a deeper conditionnal sequences directives that is ended by the corresponding +endif.

    The simplest example is:

         some code;
    +IF,monitor
         code output only if monitor is true;
    +ENDIF
    

    If ‘monitor’ is selected, the +if block is output, it leads to

         some code;
         code output only if monitor is true;
    

    If ‘monitor’ isn’t selected the +if block is skipped, it leads to

         some code;
    

    An example with +else may be:

    +IF,double
     call dmysub(eta);
    +ELSE
     call smysub(eta);
    +ENDIF
    

    If ‘double’ is selected the code output is call dmysub(eta);, if ‘double’ isn’t selected the code output is call dmysub(eta);.

    Here is a self explanatory example of use of +elseif:

    +IF,monitor
      code used if monitor is selected;
    +ELSEIF,kalman
      code used if kalman is selected and monitor is not;
    +ELSE
      code used if kalman and monitor are not selected;
    +ENDIF
    

    And last an example of nested conditional directives:

    +IF,monitor
      code used if monitor is selected;
    +_IF,kalman. deep if
        code used if monitor and kalman are selected;
    +_ELSE. deep else
        code used if monitor is selected and kalman is not;
    +_ENDIF. end the deep conditionnals sequence
    +ELSE
      code used if monitor is not selected;
    +_IF,kalman
        code used if monitor is not selected but kalman is;
    +_ELSE
        code used if monitor and kalman are not selected;
    +_ENDIF
      other code used if monitor is not selected;
    +ENDIF
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    B.5 File inclusion directive

    The file (sequence) inclusion directive is seq. The argument of seq is an include files ‘,’ separated list. The include files are Keep in cmz. The following optional arguments may be mixed:

    conditional

    A conditionnal is introduced by IF= followed by a conditionnal expression described in Conditional expressions. The directive is ignored if the conditionnal expression is false.

    T=noinclude

    When this argument is present the text of the sequence will always be included in the file where the +seq appears.

    When there is no T=noinclude argument, the +seq directive may be replaced with an inclusion command suitable for the language of the file being processed, if such command has been specified.

    For example if we have the following sequence

    +KEEP,inc,lang=C
    typedef struct incstr {char* msg};
    

    And the following code in the file being processed:

    +DECK,mainf,lang=C
    +SEQ,inc
    int main (int argc, char* argv) { exit(0); }
    

    the processing of ‘mainf’ should lead to the file ‘mainf.c’, containing an include command for ‘inc’:

    #include "inc.h"
    int main (int argc, char* argv) { exit(0); }
    

    In case the +seq has the T=noinclude:

    +DECK,mainf,lang=C
    +SEQ,inc,T=noinclude
    int main (int argc, char* argv) { exit(0); }
    

    The processing of ‘mainf’ should lead to the file ‘mainf.c’ containing the text of ‘inc’:

    typedef struct incstr {char* msg};
    int main (int argc, char* argv) { exit(0); }
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    B.6 The ‘self’ directive

    The self directive is an obsolete directive that may be used for conditionnal skipping of code. For a better approach see Conditional directives. The optionnal argument of +SELF is If= followed by a conditionnal expression. If the conditionnal expression is true the code following the directive is output, if it is false the code is skipped up to any directive (including another +SELF) except +seq.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    C. Copying This Manual


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    C.1 GNU Free Documentation License

    Version 1.1, March 2000

     
    Copyright © 2000 Free Software Foundation, Inc.
    59 Temple Place, Suite 330, Boston, MA  02111-1307, USA
    
    Everyone is permitted to copy and distribute verbatim copies
    of this license document, but changing it is not allowed.
    
    1. PREAMBLE

      The purpose of this License is to make a manual, textbook, or other written document free in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.

      This License is a kind of “copyleft”, which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.

      We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

    2. APPLICABILITY AND DEFINITIONS

      This License applies to any manual or other work that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. The “Document”, below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as “you”.

      A “Modified Version” of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.

      A “Secondary Section” is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document’s overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (For example, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.

      The “Invariant Sections” are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License.

      The “Cover Texts” are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License.

      A “Transparent” copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, whose contents can be viewed and edited directly and straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup has been designed to thwart or discourage subsequent modification by readers is not Transparent. A copy that is not “Transparent” is called “Opaque”.

      Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML designed for human modification. Opaque formats include PostScript, PDF, proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML produced by some word processors for output purposes only.

      The “Title Page” means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, “Title Page” means the text near the most prominent appearance of the work’s title, preceding the beginning of the body of the text.

    3. VERBATIM COPYING

      You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.

      You may also lend copies, under the same conditions stated above, and you may publicly display copies.

    4. COPYING IN QUANTITY

      If you publish printed copies of the Document numbering more than 100, and the Document’s license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.

      If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.

      If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access to download anonymously at no charge using public-standard network protocols. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.

      It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

    5. MODIFICATIONS

      You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

      1. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.
      2. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has less than five).
      3. State on the Title page the name of the publisher of the Modified Version, as the publisher.
      4. Preserve all the copyright notices of the Document.
      5. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
      6. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.
      7. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document’s license notice.
      8. Include an unaltered copy of this License.
      9. Preserve the section entitled “History”, and its title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section entitled “History” in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.
      10. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the “History” section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.
      11. In any section entitled “Acknowledgments” or “Dedications”, preserve the section’s title, and preserve in the section all the substance and tone of each of the contributor acknowledgments and/or dedications given therein.
      12. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.
      13. Delete any section entitled “Endorsements”. Such a section may not be included in the Modified Version.
      14. Do not retitle any existing section as “Endorsements” or to conflict in title with any Invariant Section.

      If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version’s license notice. These titles must be distinct from any other section titles.

      You may add a section entitled “Endorsements”, provided it contains nothing but endorsements of your Modified Version by various parties—for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.

      You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.

      The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.

    6. COMBINING DOCUMENTS

      You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice.

      The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.

      In the combination, you must combine any sections entitled “History” in the various original documents, forming one section entitled “History”; likewise combine any sections entitled “Acknowledgments”, and any sections entitled “Dedications”. You must delete all sections entitled “Endorsements.”

    7. COLLECTIONS OF DOCUMENTS

      You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.

      You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

    8. AGGREGATION WITH INDEPENDENT WORKS

      A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, does not as a whole count as a Modified Version of the Document, provided no compilation copyright is claimed for the compilation. Such a compilation is called an “aggregate”, and this License does not apply to the other self-contained works thus compiled with the Document, on account of their being thus compiled, if they are not themselves derivative works of the Document.

      If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one quarter of the entire aggregate, the Document’s Cover Texts may be placed on covers that surround only the Document within the aggregate. Otherwise they must appear on covers around the whole aggregate.

    9. TRANSLATION

      Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English version will prevail.

    10. TERMINATION

      You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

    11. FUTURE REVISIONS OF THIS LICENSE

      The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.

      Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License “or any later version” applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    C.1.1 ADDENDUM: How to use this License for your documents

    To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:

     
      Copyright (C)  year  your name.
      Permission is granted to copy, distribute and/or modify this document
      under the terms of the GNU Free Documentation License, Version 1.1
      or any later version published by the Free Software Foundation;
      with the Invariant Sections being list their titles, with the
      Front-Cover Texts being list, and with the Back-Cover Texts being list.
      A copy of the license is included in the section entitled ``GNU
      Free Documentation License''.
    

    If you have no Invariant Sections, write “with no Invariant Sections” instead of saying which ones are invariant. If you have no Front-Cover Texts, write “no Front-Cover Texts” instead of “Front-Cover Texts being list”; likewise for Back-Cover Texts.

    If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.


    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)

    In fact the variables names are transformed into fortran array elements by mortran generated macros, so the symbolic names defined in the mortran blocks never appears in the generated fortran code, they are replaced by the fortran arrays.

    (2)

    dres.data’ has another time related variable as second column: dt, the time step that can vary in the course of a simulation.

    (3)

    This naming is a joke for “Inert” Heaviside function.

    (4)

    fun_set, or equivalently f_set, is a general mortran macro associating a symbol with a fortran expression. Here, it is the name of the symbol (eta) that has a particular meaning for the building of the model.

    (5)

    For a short introduction to automatic sensitivity analysis, see the document:
    http://lmd.jussieu.fr/zoom/doc/sensibilite.ps, in French, or ask for the more complete research document to a member of the TEF-ZOOM collaboration

    (6)

    General Tangent Linear System, i.e. the TLS circulating along a trajectory. See the explanation in the document http://www.lmd.jussieu.fr/Zoom/doc/Adjoint.pdf (in French).

    (7)

    For detailed explanation of the adjoint model, see the document in pdf or .ps.gz

    (8)

    More generally, the Borel sweep allows the numerical study of the dependency in τ of the Borel transform of various coefficients in the system coupling matrix.

    (9)

    Explanation in the research paper about SLTC (Al1 2003) available on request.

    (10)

    cf our research texts about propagator analyses in SLTC, and “les Gains sur champs (Al1 2003-2004)”


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/many_input_files/tex_t4ht_res/tex_tex4ht_tex.4ct0000644000175000017500000000012311264347126027566 0ustar flichtenheldflichtenheld\expandafter\ifx\csname doTocEntry\endcsname\relax \expandafter\endinput\fi \par texi2html-1.82/test/many_input_files/tex_t4ht_res/mini_ker_tex4ht_tex.tmp0000644000175000017500000000001711264347126030673 0ustar flichtenheldflichtenheld /* css.sty */texi2html-1.82/test/many_input_files/tex_t4ht_res/mini_ker_tex4ht_math.cp0000644000175000017500000000000011264347126030616 0ustar flichtenheldflichtenheldtexi2html-1.82/test/many_input_files/tex_t4ht_res/mini_ker_tex4ht_tex.4tc0000644000175000017500000000011411264347126030563 0ustar flichtenheldflichtenheld\expandafter\ifx\csname doTocEntry\endcsname\relax \expandafter\endinput\fi texi2html-1.82/test/many_input_files/tex_t4ht_res/mini_ker_tex4ht_tex.css0000644000175000017500000000342211264347126030666 0ustar flichtenheldflichtenheld /* start css.sty */ .cmr-7{font-size:70%;} .cmmi-10{font-style: italic;} .cmmi-7{font-size:70%;font-style: italic;} .cmsy-7{font-size:70%;} p.noindent { text-indent: 0em } td p.noindent { text-indent: 0em; margin-top:0em; } p.nopar { text-indent: 0em; } p.indent{ text-indent: 1.5em } @media print {div.crosslinks {visibility:hidden;}} a img { border-top: 0; border-left: 0; border-right: 0; } center { margin-top:1em; margin-bottom:1em; } td center { margin-top:0em; margin-bottom:0em; } .Canvas { position:relative; } img.math{vertical-align:middle;} .obeylines-h,.obeylines-v {white-space: nowrap; } div.obeylines-v p { margin-top:0; margin-bottom:0; } .overline{ text-decoration:overline; } .overline img{ border-top: 1px solid black; } td.displaylines {text-align:center; white-space:nowrap;} .centerline {text-align:center;} .rightline {text-align:right;} span.TEX {letter-spacing: -0.125em; } span.TEX span.E{ position:relative;top:0.5ex;left:-0.0417em;} a span.TEX span.E {text-decoration: none; } .underline{ text-decoration:underline; } .underline img{ border-bottom: 1px solid black; margin-bottom:1pt; } div.proclaim { margin-top: 1em; margin-bottom: 1em; } p.item {text-indent:-2em; margin-left:2em;} p.itemitem {text-indent:-2em; margin-left:4em;} span.item, span.itemitem {width:2em; margin-right:0.4em;} td.eqalign3 { text-align:right; margin-left:10em;} .eqalign td { white-space: nowrap; } div.eqalign {text-align:center;} td.eqalignno3, td.leqalignno3 { text-align:right; margin-left:10em;} .leqalignno td, .eqalignno td { white-space: nowrap; } .leqalignno td.noalign, .eqalignno td.noalign { width:5%; white-space: normal; } table.leqalignno, table.eqalignno {width:100%;} img.cdots{vertical-align:middle;} div.pmatrix {text-align:center;} table.pmatrix {width:100%;} /* end css.sty */ texi2html-1.82/test/many_input_files/tex_t4ht_res/mini_ker_tex4ht_math.html0000644000175000017500000004114111264347126031173 0ustar flichtenheldflichtenheld<!-- tex4ht_begin mini_ker_tex4ht_math math 1 --> η <!-- tex4ht_end mini_ker_tex4ht_math math 1 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 2 --> φ <!-- tex4ht_end mini_ker_tex4ht_math math 2 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 3 --> t <!-- tex4ht_end mini_ker_tex4ht_math math 3 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 4 --> t + δt <!-- tex4ht_end mini_ker_tex4ht_math math 4 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 5 --> δη <!-- tex4ht_end mini_ker_tex4ht_math math 5 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 6 --> η <!-- tex4ht_end mini_ker_tex4ht_math math 6 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 7 --> δφ <!-- tex4ht_end mini_ker_tex4ht_math math 7 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 8 --> φ <!-- tex4ht_end mini_ker_tex4ht_math math 8 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 9 --> f <!-- tex4ht_end mini_ker_tex4ht_math math 9 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 10 --> g <!-- tex4ht_end mini_ker_tex4ht_math math 10 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 11 --> δt <!-- tex4ht_end mini_ker_tex4ht_math math 11 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 12 --> δη <!-- tex4ht_end mini_ker_tex4ht_math math 12 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 13 --> δφ <!-- tex4ht_end mini_ker_tex4ht_math math 13 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 14 --> δφ <!-- tex4ht_end mini_ker_tex4ht_math math 14 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 15 --> δη <!-- tex4ht_end mini_ker_tex4ht_math math 15 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 16 --> a <!-- tex4ht_end mini_ker_tex4ht_math math 16 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 17 --> c <!-- tex4ht_end mini_ker_tex4ht_math math 17 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 18 --> φmeet <!-- tex4ht_end mini_ker_tex4ht_math math 18 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 19 --> ηprey <!-- tex4ht_end mini_ker_tex4ht_math math 19 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 20 --> ηpred <!-- tex4ht_end mini_ker_tex4ht_math math 20 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 21 --> φ <!-- tex4ht_end mini_ker_tex4ht_math math 21 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 22 --> δη <!-- tex4ht_end mini_ker_tex4ht_math math 22 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 23 --> φ <!-- tex4ht_end mini_ker_tex4ht_math math 23 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 24 --> φ = f(η(t - dt) + dφ <!-- tex4ht_end mini_ker_tex4ht_math math 24 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 25 --> dφ <!-- tex4ht_end mini_ker_tex4ht_math math 25 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 26 --> φ = f(η),φ) <!-- tex4ht_end mini_ker_tex4ht_math math 26 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 27 --> 10-3 <!-- tex4ht_end mini_ker_tex4ht_math math 27 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 28 --> (I - D) <!-- tex4ht_end mini_ker_tex4ht_math math 28 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 29 --> (I - D) <!-- tex4ht_end mini_ker_tex4ht_math math 29 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 30 --> (I - D) <!-- tex4ht_end mini_ker_tex4ht_math math 30 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 31 --> k <!-- tex4ht_end mini_ker_tex4ht_math math 31 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 32 --> mk <!-- tex4ht_end mini_ker_tex4ht_math math 32 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 33 --> k <!-- tex4ht_end mini_ker_tex4ht_math math 33 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 34 --> rk <!-- tex4ht_end mini_ker_tex4ht_math math 34 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 35 --> dk <!-- tex4ht_end mini_ker_tex4ht_math math 35 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 36 --> N <!-- tex4ht_end mini_ker_tex4ht_math math 36 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 37 --> N <!-- tex4ht_end mini_ker_tex4ht_math math 37 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 38 --> N + 1 <!-- tex4ht_end mini_ker_tex4ht_math math 38 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 39 --> N + 1 <!-- tex4ht_end mini_ker_tex4ht_math math 39 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 40 --> k <!-- tex4ht_end mini_ker_tex4ht_math math 40 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 41 --> k <!-- tex4ht_end mini_ker_tex4ht_math math 41 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 42 --> x∕Δ <!-- tex4ht_end mini_ker_tex4ht_math math 42 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 43 --> ω <!-- tex4ht_end mini_ker_tex4ht_math math 43 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 44 --> h <!-- tex4ht_end mini_ker_tex4ht_math math 44 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 45 --> φmeet <!-- tex4ht_end mini_ker_tex4ht_math math 45 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 46 --> ηprey <!-- tex4ht_end mini_ker_tex4ht_math math 46 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 47 --> ηpred <!-- tex4ht_end mini_ker_tex4ht_math math 47 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 48 --> η1(t) <!-- tex4ht_end mini_ker_tex4ht_math math 48 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 49 --> η1(t = 0) <!-- tex4ht_end mini_ker_tex4ht_math math 49 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 50 --> t = 0 <!-- tex4ht_end mini_ker_tex4ht_math math 50 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 51 --> ϕj(t) <!-- tex4ht_end mini_ker_tex4ht_math math 51 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 52 --> ηi(t = 0) <!-- tex4ht_end mini_ker_tex4ht_math math 52 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 53 --> h(t) <!-- tex4ht_end mini_ker_tex4ht_math math 53 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 54 --> J <!-- tex4ht_end mini_ker_tex4ht_math math 54 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 55 --> T <!-- tex4ht_end mini_ker_tex4ht_math math 55 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 56 --> J <!-- tex4ht_end mini_ker_tex4ht_math math 56 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 57 --> ψ <!-- tex4ht_end mini_ker_tex4ht_math math 57 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 58 --> l <!-- tex4ht_end mini_ker_tex4ht_math math 58 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 59 --> h <!-- tex4ht_end mini_ker_tex4ht_math math 59 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 60 --> J <!-- tex4ht_end mini_ker_tex4ht_math math 60 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 61 --> t = 0 <!-- tex4ht_end mini_ker_tex4ht_math math 61 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 62 --> ω <!-- tex4ht_end mini_ker_tex4ht_math math 62 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 63 --> t = si <!-- tex4ht_end mini_ker_tex4ht_math math 63 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 64 --> μ <!-- tex4ht_end mini_ker_tex4ht_math math 64 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 65 --> Q <!-- tex4ht_end mini_ker_tex4ht_math math 65 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 66 --> ν <!-- tex4ht_end mini_ker_tex4ht_math math 66 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 67 --> R <!-- tex4ht_end mini_ker_tex4ht_math math 67 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 68 --> W <!-- tex4ht_end mini_ker_tex4ht_math math 68 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 69 --> W <!-- tex4ht_end mini_ker_tex4ht_math math 69 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 70 --> W <!-- tex4ht_end mini_ker_tex4ht_math math 70 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 71 --> g(τ) <!-- tex4ht_end mini_ker_tex4ht_math math 71 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 72 --> g(τ) <!-- tex4ht_end mini_ker_tex4ht_math math 72 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 73 --> τ <!-- tex4ht_end mini_ker_tex4ht_math math 73 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 74 --> τ <!-- tex4ht_end mini_ker_tex4ht_math math 74 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 75 --> g(τ;t) <!-- tex4ht_end mini_ker_tex4ht_math math 75 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 76 --> t <!-- tex4ht_end mini_ker_tex4ht_math math 76 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 77 --> τ <!-- tex4ht_end mini_ker_tex4ht_math math 77 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 78 --> 2 <!-- tex4ht_end mini_ker_tex4ht_math math 78 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 79 --> τ <!-- tex4ht_end mini_ker_tex4ht_math math 79 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 80 --> g(τ;t) <!-- tex4ht_end mini_ker_tex4ht_math math 80 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 81 --> τ <!-- tex4ht_end mini_ker_tex4ht_math math 81 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 82 --> τ <!-- tex4ht_end mini_ker_tex4ht_math math 82 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 83 --> tau <!-- tex4ht_end mini_ker_tex4ht_math math 83 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 84 --> τ <!-- tex4ht_end mini_ker_tex4ht_math math 84 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 85 --> τ <!-- tex4ht_end mini_ker_tex4ht_math math 85 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 86 --> 0.2 <!-- tex4ht_end mini_ker_tex4ht_math math 86 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 87 --> ∘ __√ _2 <!-- tex4ht_end mini_ker_tex4ht_math math 87 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 88 --> τ <!-- tex4ht_end mini_ker_tex4ht_math math 88 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 89 --> τ <!-- tex4ht_end mini_ker_tex4ht_math math 89 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 90 --> τ <!-- tex4ht_end mini_ker_tex4ht_math math 90 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 91 --> g(τ) <!-- tex4ht_end mini_ker_tex4ht_math math 91 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 92 --> g(t,τ) <!-- tex4ht_end mini_ker_tex4ht_math math 92 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 93 --> Ast <!-- tex4ht_end mini_ker_tex4ht_math math 93 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 94 --> Ast <!-- tex4ht_end mini_ker_tex4ht_math math 94 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 95 --> Ast + A† st <!-- tex4ht_end mini_ker_tex4ht_math math 95 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 96 --> Ast <!-- tex4ht_end mini_ker_tex4ht_math math 96 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 97 --> U <!-- tex4ht_end mini_ker_tex4ht_math math 97 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 98 --> w <!-- tex4ht_end mini_ker_tex4ht_math math 98 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 99 --> V <!-- tex4ht_end mini_ker_tex4ht_math math 99 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 100 --> Ast + A† st <!-- tex4ht_end mini_ker_tex4ht_math math 100 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 101 --> Ast <!-- tex4ht_end mini_ker_tex4ht_math math 101 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 102 --> Φ(t + δt,t) = expAstδt <!-- tex4ht_end mini_ker_tex4ht_math math 102 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 103 --> w <!-- tex4ht_end mini_ker_tex4ht_math math 103 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 104 --> Φ <!-- tex4ht_end mini_ker_tex4ht_math math 104 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 105 --> t <!-- tex4ht_end mini_ker_tex4ht_math math 105 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 106 --> Φ(t,0) <!-- tex4ht_end mini_ker_tex4ht_math math 106 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 107 --> U <!-- tex4ht_end mini_ker_tex4ht_math math 107 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 108 --> Φ <!-- tex4ht_end mini_ker_tex4ht_math math 108 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 109 --> w <!-- tex4ht_end mini_ker_tex4ht_math math 109 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 110 --> Φ <!-- tex4ht_end mini_ker_tex4ht_math math 110 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 111 --> V <!-- tex4ht_end mini_ker_tex4ht_math math 111 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 112 --> Φ <!-- tex4ht_end mini_ker_tex4ht_math math 112 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 113 --> Φ(t,0) <!-- tex4ht_end mini_ker_tex4ht_math math 113 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 114 --> Φ(t,0) <!-- tex4ht_end mini_ker_tex4ht_math math 114 --> texi2html-1.82/test/many_input_files/tex_t4ht_res/tex_tex4ht_math.html0000644000175000017500000000110211264347126030167 0ustar flichtenheldflichtenheld<!-- tex4ht_begin tex_tex4ht_math math 1 --> xi _ tan y <!-- tex4ht_end tex_tex4ht_math math 1 --> <!-- tex4ht_begin tex_tex4ht_math math 2 --> a\b <!-- tex4ht_end tex_tex4ht_math math 2 --> <!-- tex4ht_begin tex_tex4ht_math math 3 --> mathcode <!-- tex4ht_end tex_tex4ht_math math 3 --> <!-- tex4ht_begin tex_tex4ht_math math 4 --> math code_∑ i f <!-- tex4ht_end tex_tex4ht_math math 4 --> texi2html-1.82/test/many_input_files/tex_t4ht_res/tex_tex4ht_tex.xref0000644000175000017500000000005411264347126030043 0ustar flichtenheldflichtenheld\:CrossWord{)F1F-}{tex_tex4ht_tex.html}{1}% texi2html-1.82/test/many_input_files/tex_t4ht_res/tex_tex4ht_math.vr0000644000175000017500000000000011264347126027646 0ustar flichtenheldflichtenheldtexi2html-1.82/test/many_input_files/tex_t4ht_res/tex_tex4ht_math.fn0000644000175000017500000000000011264347126027622 0ustar flichtenheldflichtenheldtexi2html-1.82/test/many_input_files/tex_t4ht_res/mini_ker_tex4ht_math.lg0000644000175000017500000000061611264347126030633 0ustar flichtenheldflichtenheldhtfcss: cmmi font-style: italic; htfcss: cmmib font-style: italic; font-weight: bold; htfcss: cmtt font-family: monospace; File: mini_ker_tex4ht_math.html --- characters --- Font("cmr","7","7","100") Font("cmmi","7","7","100") Font("cmsy","7","7","100") Font("cmex","10","10","100") Font("cmr","10","10","109") Font("cmtt","10","10","109") Font("cmmi","10","10","109") Font("cmsy","10","10","109") texi2html-1.82/test/many_input_files/tex_t4ht_res/mini_ker_tex4ht_math.vr0000644000175000017500000000000011264347126030643 0ustar flichtenheldflichtenheldtexi2html-1.82/test/many_input_files/tex_t4ht_res/tex_tex4ht_math.cp0000644000175000017500000000000011264347126027621 0ustar flichtenheldflichtenheldtexi2html-1.82/test/many_input_files/tex_t4ht_res/mini_ker_tex4ht_tex.4ct0000644000175000017500000000012311264347126030563 0ustar flichtenheldflichtenheld\expandafter\ifx\csname doTocEntry\endcsname\relax \expandafter\endinput\fi \par texi2html-1.82/test/many_input_files/tex_t4ht_res/tex_tex4ht_math.pg0000644000175000017500000000000011264347126027625 0ustar flichtenheldflichtenheldtexi2html-1.82/test/many_input_files/tex_t4ht_res/mini_ker_tex4ht_tex.tex0000644000175000017500000001132011264347126030672 0ustar flichtenheldflichtenheld% Automatically generated \csname tex4ht\endcsname \HCode{\Hnewline \Hnewline} $$\partial_t \eta (t) = g(\eta(t),\varphi(t))$$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$ \varphi(t) = f(\eta(t),\varphi(t)) $$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$\pmatrix{A & B\cr -C^+ & I-D\cr} \pmatrix{\delta \eta\cr \delta \varphi\cr} = \pmatrix{\Gamma\cr \Omega\cr}$$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$\eqalign{\partial_t \eta (t) &= g(\eta(t),\varphi(t))\cr \varphi(t) &= f(\eta(t),\varphi(t))\cr }$$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$\left\{\eqalign{\partial_t \eta _{prey} &= a \eta _{prey} - a \varphi _{meet} \cr \partial_t \eta _{pred} &= -c \eta _{pred} + c \varphi _{meet}\cr}\right.$$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$\varphi _{meet} = \eta _{prey}\eta _{pred}$$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$\partial_{\eta} g(\eta(t),\varphi(t)); $$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$\partial_{\varphi} g(\eta(t),\varphi(t)); $$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$\partial_{\eta} f(\eta(t),\varphi(t)); $$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$\partial_{\varphi} f(\eta(t),\varphi(t)); $$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$\left\{\eqalign{\partial_t \eta _{k} ^{pos} &= \eta _{k} ^{vel} \cr \partial_t \eta _{k} ^{vel} &= ( \varphi_k ^{spr} -\varphi _{k+1} ^{spr} + \varphi _{k} ^{dmp}-\varphi _{k+1} ^{dmp})\,/m_k \cr}\right.$$ $$\left\{\eqalign{ \varphi_k ^{spr} &= -k_k (\eta _{k} ^{pos}- \eta _{k-1} ^{pos})\cr \varphi_k ^{spr} &= -d_k (\eta _{k} ^{vel}- \eta _{k-1} ^{vel}) \cr}\right.$$ $$\left\{\eqalign{\eta ^{pos}_{0} &= 0\cr \eta ^{vel}_{0} &= 0\cr \varphi ^{spr}_{N+1} &= 0\cr \varphi ^{dmp}_{N+1} &= 0\cr}\right.$$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$\eqalign{\partial_x f^g &= g f^{g-1}\partial_x f + f^g \log f\partial_x g\cr &= f^{g-1}(g\partial_x f + f\partial_x g)\cr}$$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$ \omega = h ( \eta , \varphi) $$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$ J = \psi[\eta(T),\varphi(T) ,h(T)] + \int_0 ^T {l[\eta(\tau),\varphi(\tau),h(\tau)]}\, d\tau $$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$\eqalign{ \partial_t \eta (t) &= g(\eta(t),\varphi(t)) + W(t) \mu\cr \varphi(t) &= f(\eta(t),\varphi(t))\cr \omega(t) &= h ( \eta(t) , \varphi(t)) + \nu\cr }$$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$\left\{\eqalign{ \partial_t \eta_1 &= a_{11} \eta_1 + a_{12} \varphi_2 + a_{13} \varphi_3 + W_{11} \mu_1 + W_{12} \mu_2\cr \partial_t \eta_2 &= a_{21} \varphi_1 + a_{22} \eta_2 + a_{23} \varphi_3 + W_{21} \mu_1 + W_{22} \mu_2\cr \partial_t \eta_3 &= a_{31} \varphi_1 + a_{32} \varphi_2 + a_{33} \eta_3 + W_{31} \mu_1 + W_{32} \mu_2 }\right.$$ $$\left\{\eqalign{ \varphi _1 &= \eta _1\cr \varphi _2 &= \eta _2\cr \varphi _3 &= \eta _3 }\right.$$ $$\left\{\eqalign{ \omega _1 &= \varphi _1 + \nu_1\cr \omega _2 &= \eta _2 + \nu_2 \cr \omega _3 &= \eta _3 + \nu_3 }\right.$$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$ U w V^\dagger $$ \HCode{\Hnewline \Hnewline} \bye texi2html-1.82/test/many_input_files/tex_t4ht_res/mini_ker_tex4ht_math.aux0000644000175000017500000000000011264347126031011 0ustar flichtenheldflichtenheldtexi2html-1.82/test/many_input_files/tex_t4ht_res/tex_tex4ht_tex.lg0000644000175000017500000000504611264347126027507 0ustar flichtenheldflichtenheldhtfcss: cmmi font-style: italic; htfcss: cmmib font-style: italic; font-weight: bold; File: tex_tex4ht_tex.html File: tex_tex4ht_tex.css File: tex_tex4ht_tex.tmp Css: p.noindent { text-indent: 0em } Css: td p.noindent { text-indent: 0em; margin-top:0em; } Css: p.nopar { text-indent: 0em; } Css: p.indent{ text-indent: 1.5em } Css: @media print {div.crosslinks {visibility:hidden;}} Css: a img { border-top: 0; border-left: 0; border-right: 0; } Font_Css("4"): .small-caps{font-variant: small-caps; } Font_Css("10"): .htf-cmbx {font-weight: bold; font-style:normal;} Font_Css("12"): .htf-calligraphy {font-family:cursive} Font_Css("14"): .htf-italic {font-style: italic;} Font_Css("16"): .htf-bold {font-weight: bold;} Font_Css("12"): .htf-calligraphy-bold {font-family:cursive ; font-weight: bold; } Css: center { margin-top:1em; margin-bottom:1em; } Css: td center { margin-top:0em; margin-bottom:0em; } Css: .Canvas { position:relative; } Css: img.math{vertical-align:middle;} Css: .obeylines-h,.obeylines-v {white-space: nowrap; } Css: div.obeylines-v p { margin-top:0; margin-bottom:0; } Css: .overline{ text-decoration:overline; } Css: .overline img{ border-top: 1px solid black; } Css: td.displaylines {text-align:center; white-space:nowrap;} Css: .centerline {text-align:center;} Css: .rightline {text-align:right;} Css: span.TEX {letter-spacing: -0.125em; } Css: span.TEX span.E{ position:relative;top:0.5ex;left:-0.0417em;} Css: a span.TEX span.E {text-decoration: none; } Css: .underline{ text-decoration:underline; } Css: .underline img{ border-bottom: 1px solid black; margin-bottom:1pt; } Css: div.proclaim { margin-top: 1em; margin-bottom: 1em; } Css: p.item {text-indent:-2em; margin-left:2em;} Css: p.itemitem {text-indent:-2em; margin-left:4em;} Css: span.item, span.itemitem {width:2em; margin-right:0.4em;} Css: td.eqalign3 { text-align:right; margin-left:10em;} Css: .eqalign td { white-space: nowrap; } Css: div.eqalign {text-align:center;} Css: td.eqalignno3, td.leqalignno3 { text-align:right; margin-left:10em;} Css: .leqalignno td, .eqalignno td { white-space: nowrap; } Css: .leqalignno td.noalign, .eqalignno td.noalign { width:5%; white-space: normal; } Css: table.leqalignno, table.eqalignno {width:100%;} Css: img.cdots{vertical-align:middle;} Css: div.pmatrix {text-align:center;} Css: table.pmatrix {width:100%;} --- needs --- tex_tex4ht_tex.idv[1] ==> tex_tex4ht_tex0x.png --- --- characters --- Font("cmr","10","10","100") Font("cmr","7","7","100") Font("cmmi","10","10","100") Font("cmmi","7","7","100") Font("cmsy","10","10","100") Font("cmex","10","10","100") texi2html-1.82/test/many_input_files/tex_t4ht_res/tex_tex4ht_math.lg0000644000175000017500000000055511264347126027640 0ustar flichtenheldflichtenheldhtfcss: cmmi font-style: italic; htfcss: cmmib font-style: italic; font-weight: bold; htfcss: cmtt font-family: monospace; File: tex_tex4ht_math.html --- characters --- Font("cmr","7","7","100") Font("cmmi","7","7","100") Font("cmmi","5","5","100") Font("cmex","10","10","100") Font("cmtt","10","10","109") Font("cmmi","10","10","109") Font("cmsy","10","10","109") texi2html-1.82/test/many_input_files/tex_t4ht_res/tex_t4ht.20000644000175000017500000000312211264347126026022 0ustar flichtenheldflichtenhelddvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) ** no image file for heavyside, (using heavyside.jpg) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) ** Unknown command `@\' (left as is) (l. 42) texi2html-1.82/test/many_input_files/tex_t4ht_res/mini_ker_tex4ht_math.tp0000644000175000017500000000000011264347126030637 0ustar flichtenheldflichtenheldtexi2html-1.82/test/many_input_files/tex_t4ht_res/mini_ker_tex4ht_tex.lg0000644000175000017500000001011511264347126030475 0ustar flichtenheldflichtenheldhtfcss: cmmi font-style: italic; htfcss: cmmib font-style: italic; font-weight: bold; File: mini_ker_tex4ht_tex.html File: mini_ker_tex4ht_tex.css File: mini_ker_tex4ht_tex.tmp Css: p.noindent { text-indent: 0em } Css: td p.noindent { text-indent: 0em; margin-top:0em; } Css: p.nopar { text-indent: 0em; } Css: p.indent{ text-indent: 1.5em } Css: @media print {div.crosslinks {visibility:hidden;}} Css: a img { border-top: 0; border-left: 0; border-right: 0; } Font_Css("4"): .small-caps{font-variant: small-caps; } Font_Css("10"): .htf-cmbx {font-weight: bold; font-style:normal;} Font_Css("12"): .htf-calligraphy {font-family:cursive} Font_Css("14"): .htf-italic {font-style: italic;} Font_Css("16"): .htf-bold {font-weight: bold;} Font_Css("12"): .htf-calligraphy-bold {font-family:cursive ; font-weight: bold; } Css: center { margin-top:1em; margin-bottom:1em; } Css: td center { margin-top:0em; margin-bottom:0em; } Css: .Canvas { position:relative; } Css: img.math{vertical-align:middle;} Css: .obeylines-h,.obeylines-v {white-space: nowrap; } Css: div.obeylines-v p { margin-top:0; margin-bottom:0; } Css: .overline{ text-decoration:overline; } Css: .overline img{ border-top: 1px solid black; } Css: td.displaylines {text-align:center; white-space:nowrap;} Css: .centerline {text-align:center;} Css: .rightline {text-align:right;} Css: span.TEX {letter-spacing: -0.125em; } Css: span.TEX span.E{ position:relative;top:0.5ex;left:-0.0417em;} Css: a span.TEX span.E {text-decoration: none; } Css: .underline{ text-decoration:underline; } Css: .underline img{ border-bottom: 1px solid black; margin-bottom:1pt; } Css: div.proclaim { margin-top: 1em; margin-bottom: 1em; } Css: p.item {text-indent:-2em; margin-left:2em;} Css: p.itemitem {text-indent:-2em; margin-left:4em;} Css: span.item, span.itemitem {width:2em; margin-right:0.4em;} Css: td.eqalign3 { text-align:right; margin-left:10em;} Css: .eqalign td { white-space: nowrap; } Css: div.eqalign {text-align:center;} Css: td.eqalignno3, td.leqalignno3 { text-align:right; margin-left:10em;} Css: .leqalignno td, .eqalignno td { white-space: nowrap; } Css: .leqalignno td.noalign, .eqalignno td.noalign { width:5%; white-space: normal; } Css: table.leqalignno, table.eqalignno {width:100%;} Css: img.cdots{vertical-align:middle;} Css: div.pmatrix {text-align:center;} Css: table.pmatrix {width:100%;} --- needs --- mini_ker_tex4ht_tex.idv[1] ==> mini_ker_tex4ht_tex0x.png --- --- needs --- mini_ker_tex4ht_tex.idv[2] ==> mini_ker_tex4ht_tex1x.png --- --- needs --- mini_ker_tex4ht_tex.idv[3] ==> mini_ker_tex4ht_tex2x.png --- --- needs --- mini_ker_tex4ht_tex.idv[4] ==> mini_ker_tex4ht_tex3x.png --- --- needs --- mini_ker_tex4ht_tex.idv[5] ==> mini_ker_tex4ht_tex4x.png --- --- needs --- mini_ker_tex4ht_tex.idv[6] ==> mini_ker_tex4ht_tex5x.png --- --- needs --- mini_ker_tex4ht_tex.idv[7] ==> mini_ker_tex4ht_tex6x.png --- --- needs --- mini_ker_tex4ht_tex.idv[8] ==> mini_ker_tex4ht_tex7x.png --- --- needs --- mini_ker_tex4ht_tex.idv[9] ==> mini_ker_tex4ht_tex8x.png --- --- needs --- mini_ker_tex4ht_tex.idv[10] ==> mini_ker_tex4ht_tex9x.png --- --- needs --- mini_ker_tex4ht_tex.idv[11] ==> mini_ker_tex4ht_tex10x.png --- --- needs --- mini_ker_tex4ht_tex.idv[12] ==> mini_ker_tex4ht_tex11x.png --- --- needs --- mini_ker_tex4ht_tex.idv[13] ==> mini_ker_tex4ht_tex12x.png --- --- needs --- mini_ker_tex4ht_tex.idv[14] ==> mini_ker_tex4ht_tex13x.png --- --- needs --- mini_ker_tex4ht_tex.idv[15] ==> mini_ker_tex4ht_tex14x.png --- --- needs --- mini_ker_tex4ht_tex.idv[16] ==> mini_ker_tex4ht_tex15x.png --- --- needs --- mini_ker_tex4ht_tex.idv[17] ==> mini_ker_tex4ht_tex16x.png --- --- needs --- mini_ker_tex4ht_tex.idv[18] ==> mini_ker_tex4ht_tex17x.png --- --- needs --- mini_ker_tex4ht_tex.idv[19] ==> mini_ker_tex4ht_tex18x.png --- --- needs --- mini_ker_tex4ht_tex.idv[20] ==> mini_ker_tex4ht_tex19x.png --- --- needs --- mini_ker_tex4ht_tex.idv[21] ==> mini_ker_tex4ht_tex20x.png --- --- characters --- Font("cmr","10","10","100") Font("cmr","7","7","100") Font("cmmi","10","10","100") Font("cmmi","7","7","100") Font("cmsy","10","10","100") Font("cmsy","7","7","100") Font("cmex","10","10","100") texi2html-1.82/test/many_input_files/tex_t4ht_res/tex.html0000644000175000017500000000533211264347126025667 0ustar flichtenheldflichtenheld Untitled Document

    Tests

    Now tex on the same line some

         N  (            )2
χ2 = ∑   yi --(a+-bxi)
     i=1       σi

    bidule Some text one the line following @end tex

    Now tex on the following line, valid fot tex (with @end tex on a line). some

    tex TEX

    Same that @html (but empty following line not ignored).

    Test of @math Here some xi _ tan y.

    Maths with protected \: a\b.

    Maths with code @-command:

    mathcode

    Maths with code @-command and braces:

    math code_∑ i f

    @\ outside of math

    @\


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/many_input_files/tex_t4ht_res/tex_tex4ht_tex.tex0000644000175000017500000000070611264347126027703 0ustar flichtenheldflichtenheld% Automatically generated \csname tex4ht\endcsname \HCode{\Hnewline \Hnewline} some $$ \chi^2 = \sum_{i=1}^N \left(y_i - (a + b x_i) \over \sigma_i\right)^2 $$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} some tex \TeX \HCode{\Hnewline \Hnewline} \bye texi2html-1.82/test/many_input_files/tex_t4ht_res/tex_tex4ht_tex.tmp0000644000175000017500000000001711264347126027676 0ustar flichtenheldflichtenheld /* css.sty */texi2html-1.82/test/many_input_files/tex_t4ht_res/mini_ker_tex4ht_tex.xref0000644000175000017500000000006111264347126031036 0ustar flichtenheldflichtenheld\:CrossWord{)F1F-}{mini_ker_tex4ht_tex.html}{1}% texi2html-1.82/test/many_input_files/tex_t4ht_res/tex_tex4ht_tex.4tc0000644000175000017500000000011411264347126027566 0ustar flichtenheldflichtenheld\expandafter\ifx\csname doTocEntry\endcsname\relax \expandafter\endinput\fi texi2html-1.82/test/many_input_files/tex_t4ht_res/mini_ker_tex4ht_math.pg0000644000175000017500000000000011264347126030622 0ustar flichtenheldflichtenheldtexi2html-1.82/test/many_input_files/tex_t4ht_res/tex_tex4ht_tex.css0000644000175000017500000000337211264347126027675 0ustar flichtenheldflichtenheld /* start css.sty */ .cmr-7{font-size:70%;} .cmmi-10{font-style: italic;} .cmmi-7{font-size:70%;font-style: italic;} p.noindent { text-indent: 0em } td p.noindent { text-indent: 0em; margin-top:0em; } p.nopar { text-indent: 0em; } p.indent{ text-indent: 1.5em } @media print {div.crosslinks {visibility:hidden;}} a img { border-top: 0; border-left: 0; border-right: 0; } center { margin-top:1em; margin-bottom:1em; } td center { margin-top:0em; margin-bottom:0em; } .Canvas { position:relative; } img.math{vertical-align:middle;} .obeylines-h,.obeylines-v {white-space: nowrap; } div.obeylines-v p { margin-top:0; margin-bottom:0; } .overline{ text-decoration:overline; } .overline img{ border-top: 1px solid black; } td.displaylines {text-align:center; white-space:nowrap;} .centerline {text-align:center;} .rightline {text-align:right;} span.TEX {letter-spacing: -0.125em; } span.TEX span.E{ position:relative;top:0.5ex;left:-0.0417em;} a span.TEX span.E {text-decoration: none; } .underline{ text-decoration:underline; } .underline img{ border-bottom: 1px solid black; margin-bottom:1pt; } div.proclaim { margin-top: 1em; margin-bottom: 1em; } p.item {text-indent:-2em; margin-left:2em;} p.itemitem {text-indent:-2em; margin-left:4em;} span.item, span.itemitem {width:2em; margin-right:0.4em;} td.eqalign3 { text-align:right; margin-left:10em;} .eqalign td { white-space: nowrap; } div.eqalign {text-align:center;} td.eqalignno3, td.leqalignno3 { text-align:right; margin-left:10em;} .leqalignno td, .eqalignno td { white-space: nowrap; } .leqalignno td.noalign, .eqalignno td.noalign { width:5%; white-space: normal; } table.leqalignno, table.eqalignno {width:100%;} img.cdots{vertical-align:middle;} div.pmatrix {text-align:center;} table.pmatrix {width:100%;} /* end css.sty */ texi2html-1.82/test/many_input_files/tex_t4ht_res/mini_ker_tex4ht_math.ky0000644000175000017500000000000011264347126030637 0ustar flichtenheldflichtenheldtexi2html-1.82/test/many_input_files/tex_t4ht_res/tex_tex4ht_math.aux0000644000175000017500000000000011264347126030014 0ustar flichtenheldflichtenheldtexi2html-1.82/test/many_input_files/tex_t4ht_res/tex_tex4ht_math.texi0000644000175000017500000000137011264347126030203 0ustar flichtenheldflichtenheld\input texinfo @setfilename tex_tex4ht_math.info @c Automatically generated @verbatim @end verbatim @math{{x^i}\over{\tan y}} @verbatim @end verbatim @verbatim @end verbatim @math{a @\ b} @verbatim @end verbatim @verbatim @end verbatim @math{@code{math code}} @verbatim @end verbatim @verbatim @end verbatim @math{ \underline{@code{math \hbox{ code }}} \sum_{i}{\underline{f}}} @verbatim @end verbatim @bye texi2html-1.82/test/many_input_files/tex_t4ht_res/mini_ker_tex4ht_math.fn0000644000175000017500000000000011264347126030617 0ustar flichtenheldflichtenheldtexi2html-1.82/test/many_input_files/tex_t4ht_res/tex_tex4ht_math.ky0000644000175000017500000000000011264347126027642 0ustar flichtenheldflichtenheldtexi2html-1.82/test/many_input_files/tex_t4ht_res/tex_tex4ht_math.tp0000644000175000017500000000000011264347126027642 0ustar flichtenheldflichtenheldtexi2html-1.82/test/many_input_files/Makefile.am0000644000175000017500000000136411264347126023622 0ustar flichtenheldflichtenheldEXTRA_DIST = $(TESTS) indices_res index_split_res tex_l2h_res tex_t4ht_res TESTS = indices.sh tex_l2h.sh tex_t4ht.sh #TESTS = tex_l2h.sh tex_t4ht.sh test_dirs = indices index_split tex_l2h tex_t4ht #test_dirs = tex_l2h tex_t4ht copy-tests: for dir in $(test_dirs); do \ if [ -d "$$dir" ]; then \ if [ -d "$${dir}_res" ]; then \ rm -f "$${dir}_res/"*.* ;\ else \ mkdir "$${dir}_res/" ; \ fi ;\ cp -p "$$dir/"*.* "$${dir}_res/"; \ rm -f "$${dir}_res/"*.png "$${dir}_res/"*_l2h.css; \ else \ echo "No dir $$dir/"; \ fi; \ done DISTCLEANFILES = l2h_tmp_dir.init *.log *.out distclean-local: rm -rf diffs $(test_dirs) dist-hook: for dir in $(test_dirs); do \ rm -rf `find "$(distdir)/$${dir}_res" -name CVS` ;\ done texi2html-1.82/test/base_tests0000755000175000017500000000034511264347115020277 0ustar flichtenheldflichtenheld#! /bin/sh if [ z"$srcdir" = 'z' ]; then srcdir=. fi "$srcdir"/tests.sh \ macros sectionning coverage formatting encodings indices layout \ nested_formats contents \ htmlxref htmlxref-only_mono htmlxref-only_split invalid texi2html-1.82/test/htmlxref/0000755000175000017500000000000011264347115020044 5ustar flichtenheldflichtenheldtexi2html-1.82/test/htmlxref/Makefile.in0000644000175000017500000002052711264347115022117 0ustar flichtenheldflichtenheld# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = test/htmlxref DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DATE = @PACKAGE_DATE@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ REQUIRE_DATA_DUMPER = @REQUIRE_DATA_DUMPER@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_DATA_DUMPER = @USE_DATA_DUMPER@ USE_UNICODE = @USE_UNICODE@ USE_UNIDECODE = @USE_UNIDECODE@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ am__leading_dot = @am__leading_dot@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = htmlxref.cnf \ tests.txt res DISTCLEANFILES = l2h_tmp_dir.init tests.log tests.out all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/htmlxref/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu test/htmlxref/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-exec-am: install-html: install-html-am install-info: install-info-am install-man: install-pdf: install-pdf-am install-ps: install-ps-am installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic dist-hook \ distclean distclean-generic distclean-local distdir dvi dvi-am \ html html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am distclean-local: rm -rf out diffs dist-hook: rm -rf `find $(distdir)/res -name CVS` # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: texi2html-1.82/test/htmlxref/res/0000755000175000017500000000000011264347115020635 5ustar flichtenheldflichtenheldtexi2html-1.82/test/htmlxref/res/htmlxref_nodes/0000755000175000017500000000000011264347115023656 5ustar flichtenheldflichtenheldtexi2html-1.82/test/htmlxref/res/htmlxref_nodes/other-nodes.html0000644000175000017500000001026411264347115026776 0ustar flichtenheldflichtenheld Untitled Document: 1. Chapter with nodes
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter with nodes

     
    id: other-nodes
    

    Top Top

     
    target: #Top
    

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/htmlxref/res/htmlxref_nodes/test_refs_abt.html0000644000175000017500000001174011264347115027373 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/htmlxref/res/htmlxref_nodes/index.html0000644000175000017500000000326111264347115025655 0ustar flichtenheldflichtenheld Untitled Document: Top

    The node you are looking for is at Top.

    texi2html-1.82/test/htmlxref/res/htmlxref_nodes/local-node.html0000644000175000017500000000637011264347115026567 0ustar flichtenheldflichtenheld Untitled Document: local node
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    local node

     
    id: local-node
    

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/htmlxref/res/htmlxref_nodes/test_refs.20000644000175000017500000000000011264347115025725 0ustar flichtenheldflichtenheldtexi2html-1.82/test/htmlxref/res/htmlxref_nodes/test_refs.html0000644000175000017500000001151211264347115026542 0ustar flichtenheldflichtenheld Untitled Document: Test refs
    [Top] [Contents] [Index] [ ? ]

    Test refs

    Testing distant nodes

    a node (manual)a node

     
    mono : manual.html#a-node
    split: ../manual/a-node.html#a-node
    

    : (manual):

     
    mono : manual.html#_003a
    split: ../manual/_003a.html#_003a
    

    Top (manual)Top

     
    mono : manual.html#Top
    split: ../manual/index.html#Top
    

    Testing manual name

    ../manual/doc.texi (../manual/doc.texi)node

     
    mono : doc.html#node
    split: ../doc/node.html#node
    

    Testing local nodes

    !_"#$%&'()*+-./;<=>?[\]^_`|~ !_"#$%&'()*+-./;<=>?[\]^_`|~

     
    target: #_0021_005f_0022_0023_0024_0025_0026_0027_0028_0029_002a_002b_002d_002e_002f_003b_003c_003d_003e_003f_005b_005c_005d_005e_005f_0060_007c_007e
    

    Top Top

     
    target: #Top
    

    local node local node

     
    target: #local-node
    

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    ././@LongLink0000000000000000000000000000030200000000000011560 Lustar rootroottexi2html-1.82/test/htmlxref/res/htmlxref_nodes/_0021_005f_0022_0023_0024_0025_0026_0027_0028_0029_002a_002b_002d_002e_002f_003b_003c_003d_003e_003f_005b_005c_005d_005e_005f_0060_007c_007e.htmltexi2html-1.82/test/htmlxref/res/htmlxref_nodes/_0021_005f_0022_0023_0024_0025_0026_0027_0028_0029_00000644000175000017500000000671511264347115031770 0ustar flichtenheldflichtenheld Untitled Document: !_"#$%&'()*+-./;<=>?[\]^_`|~
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    !_"#$%&'()*+-./;<=>?[\]^_`|~

     
    id: _0021_005f_0022_0023_0024_0025_0026_0027_0028_0029_002a_002b_002d_002e_002f_003b_003c_003d_003e_003f_005b_005c_005d_005e_005f_0060_007c_007e
    

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/htmlxref/res/htmlxref/0000755000175000017500000000000011264347115022466 5ustar flichtenheldflichtenheldtexi2html-1.82/test/htmlxref/res/htmlxref/test_refs.20000644000175000017500000000000011264347115024535 0ustar flichtenheldflichtenheldtexi2html-1.82/test/htmlxref/res/htmlxref/test_refs.html0000644000175000017500000002252111264347115025354 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Test refs

    Testing distant nodes

    a node (manual)a node

     
    mono : manual.html#a-node
    split: ../manual/a-node.html#a-node
    

    : (manual):

     
    mono : manual.html#_003a
    split: ../manual/_003a.html#_003a
    

    Top (manual)Top

     
    mono : manual.html#Top
    split: ../manual/index.html#Top
    

    Testing manual name

    ../manual/doc.texi (../manual/doc.texi)node

     
    mono : doc.html#node
    split: ../doc/node.html#node
    

    Testing local nodes

    !_"#$%&'()*+-./;<=>?[\]^_`|~ !_"#$%&'()*+-./;<=>?[\]^_`|~

     
    target: #_0021_005f_0022_0023_0024_0025_0026_0027_0028_0029_002a_002b_002d_002e_002f_003b_003c_003d_003e_003f_005b_005c_005d_005e_005f_0060_007c_007e
    

    Top Test refs

     
    target: #Top
    

    local node local node

     
    target: #local-node
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter with nodes

     
    id: other-nodes
    

    Top Test refs

     
    target: #Top
    
     
    id: _0021_005f_0022_0023_0024_0025_0026_0027_0028_0029_002a_002b_002d_002e_002f_003b_003c_003d_003e_003f_005b_005c_005d_005e_005f_0060_007c_007e
    
     
    id: local-node
    

    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/htmlxref/tests.txt0000644000175000017500000000017211264347115021747 0ustar flichtenheldflichtenheldhtmlxref ../sectionning/test_refs.texi htmlxref_nodes ../sectionning/test_refs.texi --split node --use-nodes --node-files texi2html-1.82/test/htmlxref/htmlxref.cnf0000644000175000017500000000007611264347115022370 0ustar flichtenheldflichtenheldmanual split split-dir-manual/ manual mono mono-manual.html texi2html-1.82/test/htmlxref/Makefile.am0000644000175000017500000000027211264347115022101 0ustar flichtenheldflichtenheldEXTRA_DIST = htmlxref.cnf \ tests.txt res DISTCLEANFILES = l2h_tmp_dir.init tests.log tests.out distclean-local: rm -rf out diffs dist-hook: rm -rf `find $(distdir)/res -name CVS` texi2html-1.82/test/texi2html_manual/0000755000175000017500000000000011264347116021471 5ustar flichtenheldflichtenheldtexi2html-1.82/test/texi2html_manual/texi2html.texi0000644000175000017500000003527511264347116024320 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @c @c This is the ``Texinfo to HTML Converter'' manual which @c which is part of the ``texi2html'' distribution. @c @c License: @c Copyright (C) 1999, 2000 Free Software Foundation, Inc. @c @c This program is free software; you can redistribute it @c and/or modify it under the terms of the GNU General Public @c License as published by the Free Software Foundation; @c either version 2 of the License, or (at your option) any @c later version. @c @c This program is distributed in the hope that it will be @c useful, but WITHOUT ANY WARRANTY; without even the implied @c warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR @c PURPOSE. See the GNU General Public License for more @c details. @c @c You should have received a copy of the GNU General @c Public License along with this program; if not, write to @c the Free Software Foundation, Inc., 59 Temple Place, Suite @c 330, Boston, MA 02111-1307 USA @c @c @c Revisions: @c @c @c Author: @c Karl Heinz Marbaise @c @c -------------------------------------------------------- @c @c Currently most of the material is copied out of @c texi2html.init file. It's just a start point. @c In other words this is a draft manual ;-) @c @setfilename texi2html.info @c -------------------------------------------------------- @c Edition and last update date of the manual which might @c differ to the scripts last update date etc. @set MANUAL_UPD 14. August 2000 @set MANUAL_ED 0.21 @c @set MANUAL_AUTHOR Karl Heinz Marbaise @set MANUAL_AUTHOR_EMAIL khmarbaise@@gmx.de @c @c Get the version of the script itself through @c configure/autoconf etc. @c version.texi is automatically generated through @c configure/autoconf. @include version.texi @c -------------------------------------------------------- @c Index for command line options @defcodeindex op @c -------------------------------------------------------- @settitle Texinfo to HTML @c @setchapternewpage on @setchapternewpage odd @footnotestyle separate @ifset shorttitlepage-enabled @shorttitlepage Texinfo to HTML @end ifset @c -------------------------------------------------------- @c support old style Info Dir entries. @ifset OLDSTYLE-INFO-DIR @ifinfo @format START-INFO-DIR-ENTRY * Texi2html: (texi2html). Texinfo 2 HTML Converter (texi2html). END-INFO-DIR-ENTRY @end format @end ifinfo @end ifset @c -------------------------------------------------------- @c Informations for install-info. @c I think the conversion script should be found @c where the documentation system lives. @c What do you think? @dircategory Texinfo documentation system @direntry * Texi2html: (texi2html). Texinfo to HTML Converter. @end direntry @c -------------------------------------------------------- @ifinfo This file documents the texi2html script which converts Texinfo into HTML. Copyright (C) 1999, 2000 Free Software Foundation, Inc. This edition is for texi2html version @value{VERSION}, @value{UPDATED}. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. @ignore Permission is granted to process this file through TeX and print the results, provided the printed document carries copying permission notice identical to this one except for the removal of this paragraph (this paragraph not being relevant to the printed manual). @end ignore Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Free Software Foundation. @end ifinfo @c -------------------------------------------------------- @titlepage @title Texinfo to HTML Converter @subtitle Manual Edition @value{MANUAL_ED} @subtitle Last Update: @value{MANUAL_UPD} @subtitle for Version @value{VERSION} of @command{texi2html} script. @author Lionel Cons @author Karl Berry @author Olaf Bachmann @author and many others. @author Karl Heinz Marbaise (manual) @page @vskip 0pt plus 1filll Copyright @copyright{} Lionel Cons@* Copyright @copyright{} Karl Berry@* Copyright @copyright{} Olaf Bachmann@* Copyright @copyright{} and many others.@* Copyright @copyright{} Karl Heinz Marbaise (manual)@* Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Free Software Foundation. @sp 2 Cover art by Etienne Suvasa. @end titlepage @c ======================================================== @summarycontents @contents @c @ifnottex @node Top, Overview, (dir), (dir) @top Texi2html @c @page @c ======================================================== @c @node Top, Overview, (dir), (dir) @c @top @c @chapter About This Manual (Edition @value{MANUAL_ED}, last updated at @value{MANUAL_UPD}) describes the @command{texi2html} Perl script which converters @c The following construct allows me to get @c real URL link in HTML and working refs in @c info. @ifhtml @uref{http://www.texinfo.org,Texinfo} @end ifhtml @ifnothtml Texinfo (@pxref{Top,,Texinfo,Texinfo}) @end ifnothtml into @acronym{HTML}. @c @inforef{Top, Top, Texinfo} does not work yet ;-) @c here we should paste a @inforef or @xref on the @c Texinfo manual. Please send bug reports about this manual to Karl Heinz Marbaise @email{khmarbaise@@gmx.de}. Please state exact version/edition of the manual (can be found at start of Texinfo source file; use the entry Id under Revisions). Please note: @example This manual is currently under construction and of course incomplete ;-) @end example @c The following line within a menu does not work! @c * Why texi2html and not Makeinfo?:whytexi2html. Why texi2html and not makeinfo?. @ifinfo @menu @c * MenuName:NodeName. Description. * Overview:: Overview about @command{texi2html}. * Installation:: Installation process. * Customizing:: Customizing. * CustomizingExpand:: Customizing what gets expanded. * CustomizingPage:: Customizing page layout. * CustHTML:: Customizing HTML. * InitFile:: Initialization files. @c * ExtFile:: Extension file. * IFOs:: Initialization file options * Options:: Command Line Options. * Reference:: Reference Manual of functions. @detailmenu /// The Detailed Node Listing /// --- Overview --- * whytexi2html:: Why @file{texi2html} and not @file{makeinfo}?. --- Installation process --- * Installation:: Installation process. --- Initialization file options --- * IFOnumber:: Number sectioning. * IFOmenu:: Avoid menu redundancy. * IFOCenterImage:: Center Image. * IFOExampleIndentCell:: Example Indent Cell. * IFOSampleIndentCell:: Sample Indent Cell. * IFOSmallFontSize:: Small Font Size. * IFOTopHeading:: Top Heading. * IFOIndexChapter:: Index Chapter. * IFOSplitIndex:: Split Index. * IFOhrefDirInsteadFile:: HREF Dir Instead file. --- Command Line Options --- * OptionDebug:: Debugging. * OptionDocType:: DocType (HTML) * OptionCheck:: Checking files. * OptionExpand:: Expanding info, tex areas etc. * OptionGlossary:: Glossary. * OptionInvisible:: Invisible. * OptionIso:: Iso. * OptionInclude:: Include directories. * OptionTopFile:: Top File. * OptionTocFile:: Table of content File. * OptionFrames:: Frames. * OptionMenu:: Menus. * OptionNumber:: Number sections. * OptionSplit:: Splitting. * OptionSectionNavigation:: Navigation. * OptionSubDir:: Subdirectory. * OptionShortExt:: Short extension. * OptionPrefix:: Prefix. * OptionOutput:: Output. * OptionShortRef:: Short Ref. * OptionIndexSummary:: Index Summary. * OptionVerbose:: Verbose. * OptionLanguage:: Language. * OptionL2H:: La@TeX{}2HTML. --- La@TeX{}2HTML for @code{@@math} and @code{@@tex} --- * OptionL2HL2H:: Where to find La@TeX{}2HTML. * OptionL2HSkip:: Skip calling La@TeX{}2HTML. * OptionL2Htmp:: Temporary files for La@TeX{}2HTML. --- Indices --- * Indexop:: Command Line Option Index. * Indexvr:: Variable Index. * Indexcp:: Concept Index. @end detailmenu @end menu @end ifinfo @end ifnottex @c ======================================================== @node Overview, HowToGetHTML, Top, Top @chapter Overview about @command{texi2html} @uref{http://www.texinfo.org,Texinfo} is the official documentation format of the @uref{http://www.gnu.org,GNU} project. It uses a single source file to produce both online information and printed output. @c much thinking about ... It is often proposed to have a way to produce @acronym{HTML} from Texinfo sources, like the GNU-Info format. It is much simpler to create one converter instead of writing all documentation new in @acronym{HTML}, cause there is so much documentation in Texinfo all over the world. A few time ago @command{makeinfo} wasn't able to produce @acronym{HTML} output format, but there are needth to have @acronym{HTML}. This was the borning hour for @command{texi2html}. The basic purpose of @file{texi2html} is to convert Texinfo documents into HTML. @menu * HowToGetHTML:: Ways to get HTML files. * whytexi2html:: Why texi2html and not makeinfo?. @end menu @c -------------------------------------------------------- @node HowToGetHTML, whytexi2html, Overview, Overview @section Ways to get HTML You would like to @acronym{HTML} files out of your Texinfo files? There exist two ways which you can go. This first is to use @command{makeinfo} itself to produce @acronym{HTML} output. The second is to use @command{texi2html}. @c -------------------------------------------------------- @node whytexi2html, Installation, HowToGetHTML, Overview @section Why @file{texi2html} and not @file{makeinfo}? The basic idea of @command{makeinfo}'s @acronym{HTML} output was to get an readable @acronym{HTML} output. Nothing sophisticated nor good styling just readable. The current development of texi2html is going into different direction. The main purpose is to get better styling, better design etc. of the created @acronym{HTML} pages. This way is supported using differnt command line options and of course possible changings of the initialization file to fit your own needs. The main disadvantage of @acronym{makeinfo}'s @acronym{HTML} output is your getting only one big file. This is of course readable but not very usable. The problem of this is, while you like to have splitted chapters or nodes the Texinfo source has to be read at minimum twice times. This makes it impossible to implement this in @command{makeinfo}. This would result in complete new implementation of @command{makeinfo}'s source. @c think more about this???? In contrast to the HTML produced by @command{makeinfo --html} (the @command{makeinfo} program is part of the Texinfo distribution), the HTML output of @file{texi2html} is highly configurable. Among other differences, with @command{texi2html} allows you to customize your entire page layout (like headers, footers, style sheets, etc), split documents at various levels, and use @command{latex2html} to convert @code{@@tex} sections. @command{texi2html} should reasonably convert all Texinfo 4.0 constructs. If not, please send a bug report to @email{texi2html@@mathematik.uni-kl.de}. @c ======================================================== @node Installation, Customizing, whytexi2html, Top @chapter Installation of @command{texi2html} @cindex Installation description of the installation process. What do you need? How? @c ======================================================== @node Customizing, CustomizingExpand, Installation, Top @chapter Customizing files @cindex Installation @opindex frames @c 4.) Customizing files to output @c ==> -out_file, -prefix, -subdir, -split, -frames etc Result based on using @option{-frames} @example texi2html -V -frames texi2html.texi @end example Explanation of the output differences against default, whatever this is ;-) @c ======================================================== @node CustomizingExpand, CustomizingPage, Customizing, Top @chapter Customizing what gets expanded @c 5.) Customizing what gets expanded @c ==> -expand, and latex2html Test starting. @option{-expand info} @option{-expand tex} Take a look at optionexpand. @c ======================================================== @node CustomizingPage, CustHTML, CustomizingExpand, Top @include custpage.texi @c ======================================================== @node CustHTML, InitFile, CustomizingPage, Top @include custhtml.texi @c ======================================================== @node InitFile, IFOs, CustHTML, Top @include initfile.texi @c -------------------------------------------------------- @node IFOs, Options, InitFile, Top @include ifo.texi @c ======================================================== @c @include extfile.texi obsolete now, is not documented! @c ======================================================== @node Options, Reference, IFOs, Top @include options.texi @c ======================================================== @node Reference, Indexop, Options, Top @include reference.texi @c ======================================================== @c commandline option index. @node Indexop, Indexvr, Reference, Top @appendix Indices @appendixsec Command Line Option Index @printindex op @c -------------------------------------------------------- @node Indexvr, Indexcp, Indexop, Top @appendixsec Variable Index @printindex vr @c -------------------------------------------------------- @node Indexcp, , Indexvr, Top @appendixsec Concept Index @printindex cp @c printindex init file options dito. @c concept index. @bye texi2html-1.82/test/texi2html_manual/custhtml.texi0000644000175000017500000000731611264347116024236 0ustar flichtenheldflichtenheld@c @c This file is part of the ``Texinfo to HTML Converter'' manual @c which is part of the ``texi2html'' distribution. @c @c License: @c Copyright (C) 1999, 2000 Free Software Foundation, Inc. @c @c This program is free software; you can redistribute it @c and/or modify it under the terms of the GNU General Public @c License as published by the Free Software Foundation; @c either version 2 of the License, or (at your option) any @c later version. @c @c This program is distributed in the hope that it will be @c useful, but WITHOUT ANY WARRANTY; without even the implied @c warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR @c PURPOSE. See the GNU General Public License for more @c details. @c @c You should have received a copy of the GNU General @c Public License along with this program; if not, write to @c the Free Software Foundation, Inc., 59 Temple Place, Suite @c 330, Boston, MA 02111-1307 USA @c @c @c Revisions: @c @c @c Author: @c Karl Heinz Marbaise @c @c Description: @c Here are the informations about customizing HTML @c BODY, PRE- and AFTER Body. @c @c ======================================================== @chapter Customizing HTML If you like to read the following section, it is assumed you are famillar with @acronym{HTML}. If not, you shouldn't read this, cause you don't know what we are talking about. Here you can find information how to change the @acronym{HTML} parts of a document. These are the header, body etc. These are the defaults which are part of the distribution as @file{texi2html.init}. How to do changes of the customization... needed steps. @c examples. @menu * CustHTMLBody:: Customizing BODY Text. * CustHTMLHead:: Customizing Head. * CustHTMLBodyText:: Customizing Head. * CustHTMLPreBodyText:: Customizing Head. * CustHTMLAfterBody:: Customizing Head. @end menu @c -------------------------------------------------------- @node CustHTMLBody,CustHTMLBodyText,,CustHTML @section Body @menu * CustHTMLBodyText:: Body Text. * CustHTMLPreBodyText:: PRE Body Text. * CustHTMLAfterBody:: After Body Text. @end menu @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= @node CustHTMLBodyText,CustHTMLPreBodyText,CustHTMLBody,CustHTML @subsection Body Text @vindex T2H_BODYTEXT @example $T2H_BODYTEXT = . 'LANG="' . $T2H_LANG . '" BGCOLOR="#FFFFFF" ' . 'TEXT="#000000" LINK="#0000FF" ' . 'VLINK="#800080" ALINK="#FF0000"'; @end example If you like to change the basic color combination, you can change the entry @var{T2H_BODYTEXT}. @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= @node CustHTMLPreBodyText,CustHTMLAfterBody,CustHTMLBodyText,CustHTML @subsection Body Text @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= @node CustHTMLAfterBody,CustHTMLHead,CustHTMLPreBodyText,CustHTML @subsection After Body Text @vindex T2H_AFTER_BODY_OPEN @vindex T2H_PRE_BODY_CLOSE @vindex T2H_EXTRA_HEAD @example # text inserted after $T2H_AFTER_BODY_OPEN = ''; #text inserted before $T2H_PRE_BODY_CLOSE = ''; # this is used in footer $T2H_ADDRESS = "by $T2H_USER " if $T2H_USER; $T2H_ADDRESS .= "on $T2H_TODAY"; # this is added inside after and some META NAME stuff # can be used for <style> <script>, <meta> tags $T2H_EXTRA_HEAD = ''; @end example The default output into the @acronym{HTML} file. @xref{OptionDocType}. The following code is produced by @code{T2H_DEFAULT_print_page_head}. Detailed information can be found at @ref{CustPagePageHead}. @example @include custhtml-header.htmltexi @end example @c -------------------------------------------------------- @node CustHTMLHead,,CustHTMLAfterBody,CustHTML @section Head ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������texi2html-1.82/test/texi2html_manual/reference.texi�������������������������������������������������0000644�0001750�0001750�00000003750�11264347116�024327� 0����������������������������������������������������������������������������������������������������ustar �flichtenheld��������������������flichtenheld�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������@c @c This file is part of the ``Texinfo to HTML Converter'' manual @c which is part of the ``texi2html'' distribution. @c @c License: @c Copyright (C) 1999, 2000 Free Software Foundation, Inc. @c @c This program is free software; you can redistribute it @c and/or modify it under the terms of the GNU General Public @c License as published by the Free Software Foundation; @c either version 2 of the License, or (at your option) any @c later version. @c @c This program is distributed in the hope that it will be @c useful, but WITHOUT ANY WARRANTY; without even the implied @c warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR @c PURPOSE. See the GNU General Public License for more @c details. @c @c You should have received a copy of the GNU General @c Public License along with this program; if not, write to @c the Free Software Foundation, Inc., 59 Temple Place, Suite @c 330, Boston, MA 02111-1307 USA @c @c @c Revisions: @c @c @c Author: @c Karl Heinz Marbaise <khmarbaise@gmx.de> @c @c Description: @c Here you can find the description on all @c subs in the original Perl file. @c @c ======================================================== @appendix Function Reference @menu * Refptocframe:: Print ToC Frame. * Refpphead:: Print page head. @end menu @c Global variables: @c T2H_USER which is created throught main part @c (texi2html.pl) @c You can use it. (On Windows? On Unix ?) @c -------------------------------------------------------- @node Refptocframe,Refpphead,,Reference @appendixsec Print ToC Frame @defun T2H_DEFAULT_print_toc_frame (FileName) @sp 1 Description of the subroutine. What does it do? Which parameters it needs etc. @end defun @c -------------------------------------------------------- @node Refpphead,,Refptocframe,Reference @appendixsec Print Page Head @defun T2H_DEFAULT_print_page_head (FileName) @sp 1 Description of the subroutine. What does it do? Which parameters it needs etc. @end defun ������������������������texi2html-1.82/test/texi2html_manual/Makefile.in����������������������������������������������������0000644�0001750�0001750�00000020767�11264347116�023552� 0����������������������������������������������������������������������������������������������������ustar �flichtenheld��������������������flichtenheld�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = test/texi2html_manual DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DATE = @PACKAGE_DATE@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ REQUIRE_DATA_DUMPER = @REQUIRE_DATA_DUMPER@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_DATA_DUMPER = @USE_DATA_DUMPER@ USE_UNICODE = @USE_UNICODE@ USE_UNIDECODE = @USE_UNIDECODE@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ am__leading_dot = @am__leading_dot@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = custhtml.texi ifo.texi options.texi texi2html.texi \ custpage.texi initfile.texi reference.texi version.texi \ custhtml-header.htmltexi \ tests.txt res DISTCLEANFILES = l2h_tmp_dir.init tests.log tests.out all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/texi2html_manual/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu test/texi2html_manual/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-exec-am: install-html: install-html-am install-info: install-info-am install-man: install-pdf: install-pdf-am install-ps: install-ps-am installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic dist-hook \ distclean distclean-generic distclean-local distdir dvi dvi-am \ html html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am distclean-local: rm -rf out diffs dist-hook: rm -rf `find $(distdir)/res -name CVS` # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ���������texi2html-1.82/test/texi2html_manual/res/�����������������������������������������������������������0000755�0001750�0001750�00000000000�11264347116�022262� 5����������������������������������������������������������������������������������������������������ustar �flichtenheld��������������������flichtenheld�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������texi2html-1.82/test/texi2html_manual/res/texi_texi2html/��������������������������������������������0000755�0001750�0001750�00000000000�11264347116�025233� 5����������������������������������������������������������������������������������������������������ustar �flichtenheld��������������������flichtenheld�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������texi2html-1.82/test/texi2html_manual/res/texi_texi2html/texi2html.texi������������������������������0000644�0001750�0001750�00000127651�11264347116�030062� 0����������������������������������������������������������������������������������������������������ustar �flichtenheld��������������������flichtenheld�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\input texinfo @c -*-texinfo-*- @c @c This is the ``Texinfo to HTML Converter'' manual which @c which is part of the ``texi2html'' distribution. @c @c License: @c Copyright (C) 1999, 2000 Free Software Foundation, Inc. @c @c This program is free software; you can redistribute it @c and/or modify it under the terms of the GNU General Public @c License as published by the Free Software Foundation; @c either version 2 of the License, or (at your option) any @c later version. @c @c This program is distributed in the hope that it will be @c useful, but WITHOUT ANY WARRANTY; without even the implied @c warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR @c PURPOSE. See the GNU General Public License for more @c details. @c @c You should have received a copy of the GNU General @c Public License along with this program; if not, write to @c the Free Software Foundation, Inc., 59 Temple Place, Suite @c 330, Boston, MA 02111-1307 USA @c @c @c Revisions: @c @c @c Author: @c Karl Heinz Marbaise <khmarbaise@gmx.de> @c @c -------------------------------------------------------- @c @c Currently most of the material is copied out of @c texi2html.init file. It's just a start point. @c In other words this is a draft manual ;-) @c @setfilename texi2html.info @c -------------------------------------------------------- @c Edition and last update date of the manual which might @c differ to the scripts last update date etc. @set MANUAL_UPD 14. August 2000 @set MANUAL_ED 0.21 @c @set MANUAL_AUTHOR Karl Heinz Marbaise @set MANUAL_AUTHOR_EMAIL khmarbaise@@gmx.de @c @c Get the version of the script itself through @c configure/autoconf etc. @c version.texi is automatically generated through @c configure/autoconf. @set UPDATED 15 September 2001 @set UPDATED-MONTH September 2001 @set EDITION 1.67 @set VERSION 1.67 @c -------------------------------------------------------- @c Index for command line options @defcodeindex op @c -------------------------------------------------------- @settitle Texinfo to HTML @c @setchapternewpage on @setchapternewpage odd @footnotestyle separate @c -------------------------------------------------------- @c support old style Info Dir entries. @c -------------------------------------------------------- @c Informations for install-info. @c I think the conversion script should be found @c where the documentation system lives. @c What do you think? @dircategory Texinfo documentation system @c -------------------------------------------------------- @c -------------------------------------------------------- @titlepage @title Texinfo to HTML Converter @subtitle Manual Edition 0.21 @subtitle Last Update: 14. August 2000 @subtitle for Version 1.67 of @command{texi2html} script. @author Lionel Cons @author Karl Berry @author Olaf Bachmann @author and many others. @author Karl Heinz Marbaise (manual) @page @vskip 0pt plus 1filll Copyright @copyright{} Lionel Cons@* Copyright @copyright{} Karl Berry@* Copyright @copyright{} Olaf Bachmann@* Copyright @copyright{} and many others.@* Copyright @copyright{} Karl Heinz Marbaise (manual)@* Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Free Software Foundation. @sp 2 Cover art by Etienne Suvasa. @end titlepage @c ======================================================== @summarycontents @contents @c @node Top, Overview, (dir), (dir) @top Texi2html @c @page @c ======================================================== @c @node Top, Overview, (dir), (dir) @c @top @c @chapter About This Manual (Edition 0.21, last updated at 14. August 2000) describes the @command{texi2html} Perl script which converters @c The following construct allows me to get @c real URL link in HTML and working refs in @c info. @uref{http://www.texinfo.org,Texinfo} into @acronym{HTML}. @c @inforef{Top, Top, Texinfo} does not work yet ;-) @c here we should paste a @inforef or @xref on the @c Texinfo manual. Please send bug reports about this manual to Karl Heinz Marbaise @email{khmarbaise@@gmx.de}. Please state exact version/edition of the manual (can be found at start of Texinfo source file; use the entry Id under Revisions). Please note: @example This manual is currently under construction and of course incomplete ;-) @end example @c The following line within a menu does not work! @c * Why texi2html and not Makeinfo?:whytexi2html. Why texi2html and not makeinfo?. @c ======================================================== @node Overview, HowToGetHTML, Top, Top @chapter Overview about @command{texi2html} @uref{http://www.texinfo.org,Texinfo} is the official documentation format of the @uref{http://www.gnu.org,GNU} project. It uses a single source file to produce both online information and printed output. @c much thinking about ... It is often proposed to have a way to produce @acronym{HTML} from Texinfo sources, like the GNU-Info format. It is much simpler to create one converter instead of writing all documentation new in @acronym{HTML}, cause there is so much documentation in Texinfo all over the world. A few time ago @command{makeinfo} wasn't able to produce @acronym{HTML} output format, but there are needth to have @acronym{HTML}. This was the borning hour for @command{texi2html}. The basic purpose of @file{texi2html} is to convert Texinfo documents into HTML. @menu * HowToGetHTML:: Ways to get HTML files. * whytexi2html:: Why texi2html and not makeinfo?. @end menu @c -------------------------------------------------------- @node HowToGetHTML, whytexi2html, Overview, Overview @section Ways to get HTML You would like to @acronym{HTML} files out of your Texinfo files? There exist two ways which you can go. This first is to use @command{makeinfo} itself to produce @acronym{HTML} output. The second is to use @command{texi2html}. @c -------------------------------------------------------- @node whytexi2html, Installation, HowToGetHTML, Overview @section Why @file{texi2html} and not @file{makeinfo}? The basic idea of @command{makeinfo}'s @acronym{HTML} output was to get an readable @acronym{HTML} output. Nothing sophisticated nor good styling just readable. The current development of texi2html is going into different direction. The main purpose is to get better styling, better design etc. of the created @acronym{HTML} pages. This way is supported using differnt command line options and of course possible changings of the initialization file to fit your own needs. The main disadvantage of @acronym{makeinfo}'s @acronym{HTML} output is your getting only one big file. This is of course readable but not very usable. The problem of this is, while you like to have splitted chapters or nodes the Texinfo source has to be read at minimum twice times. This makes it impossible to implement this in @command{makeinfo}. This would result in complete new implementation of @command{makeinfo}'s source. @c think more about this???? In contrast to the HTML produced by @command{makeinfo --html} (the @command{makeinfo} program is part of the Texinfo distribution), the HTML output of @file{texi2html} is highly configurable. Among other differences, with @command{texi2html} allows you to customize your entire page layout (like headers, footers, style sheets, etc), split documents at various levels, and use @command{latex2html} to convert @code{@@tex} sections. @command{texi2html} should reasonably convert all Texinfo 4.0 constructs. If not, please send a bug report to @email{texi2html@@mathematik.uni-kl.de}. @c ======================================================== @node Installation, Customizing, whytexi2html, Top @chapter Installation of @command{texi2html} @cindex Installation description of the installation process. What do you need? How? @c ======================================================== @node Customizing, CustomizingExpand, Installation, Top @chapter Customizing files @cindex Installation @opindex frames @c 4.) Customizing files to output @c ==> -out_file, -prefix, -subdir, -split, -frames etc Result based on using @option{-frames} @example texi2html -V -frames texi2html.texi @end example Explanation of the output differences against default, whatever this is ;-) @c ======================================================== @node CustomizingExpand, CustomizingPage, Customizing, Top @chapter Customizing what gets expanded @c 5.) Customizing what gets expanded @c ==> -expand, and latex2html Test starting. @option{-expand info} @option{-expand tex} Take a look at optionexpand. @c ======================================================== @node CustomizingPage, CustHTML, CustomizingExpand, Top @c @c This file is part of the ``Texinfo to HTML Converter'' manual @c which is part of the ``texi2html'' distribution. @c @c License: @c Copyright (C) 1999, 2000 Free Software Foundation, Inc. @c @c This program is free software; you can redistribute it @c and/or modify it under the terms of the GNU General Public @c License as published by the Free Software Foundation; @c either version 2 of the License, or (at your option) any @c later version. @c @c This program is distributed in the hope that it will be @c useful, but WITHOUT ANY WARRANTY; without even the implied @c warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR @c PURPOSE. See the GNU General Public License for more @c details. @c @c You should have received a copy of the GNU General @c Public License along with this program; if not, write to @c the Free Software Foundation, Inc., 59 Temple Place, Suite @c 330, Boston, MA 02111-1307 USA @c @c @c Revisions: @c @c @c Author: @c Karl Heinz Marbaise <khmarbaise@gmx.de> @c @c Description: @c Here are the informations about customizing page @c layout. @c @c ======================================================== @chapter Customizing page layout This chapter is designed to help you to change the complete layout of the @acronym{HTML} output if you like to do so. a) General: Philosophy, and how it works@* aa) Navigation panels@* b) Top page@* c) Section pages@* @menu * TipsNewDesign:: . * CustPagePhil:: . * CustPagePhilNav:: . * CustPageTopPage:: . * CustPageSectionPages:: . * CustPageMiscPage:: . @end menu @c -------------------------------------------------------- @node TipsNewDesign,CustPagePhil,CustomizingPage,CustomizingPage @section Tips how to create a new site design Here you can find information how you should work to pick up a new design with @command{texi2html}. @c -------------------------------------------------------- @node CustPagePhil,CustPagePhilNav,TipsNewDesign,CustomizingPage @section Page Layout and the philosophy @menu * CustPagePhilNav:: Navigation panels. @end menu @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= @node CustPagePhilNav,CustPageTopPage,CustPagePhil,CustomizingPage @subsection Navigation panels Head and foot Navigation panels. @c -------------------------------------------------------- @node CustPageTopPage,CustPageSectionPages,CustPagePhilNav,CustomizingPage @section Top Page @c -------------------------------------------------------- @node CustPageSectionPages,CustPageMiscPage,CustPageTopPage,CustomizingPage @section Section Pages @c -------------------------------------------------------- @node CustPageMiscPage,CustPagePageHeadToc,CustPageSectionPages,CustomizingPage @section Misc pages Here you can find information about the creation of the @dfn{ToC} (@i{Table Of content}), About---Page etc. and specialy how to change them to get your own design. @acronym{ToC} @code{T2H_DEFAULT_print_toc_frame} in @file{texi2html.init} @menu * CustPagePageHeadToc:: . * CustPagePageHead:: . * CustPagePageFoot:: . @end menu @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= @node CustPagePageHeadToc,CustPagePageHead,CustPageMiscPage,CustPageMiscPage @subsection Table Of Contents The following code is the original code out of the initialization file (@pxref{InitFile,Initialization file}). @example sub T2H_DEFAULT_print_toc_frame @{ my $fh = shift; &$T2H_print_page_head($fh); print $fh <<EOT; <H2>Content</H2> EOT print $fh map @{s/HREF=/target=\"main\" HREF=/; $_;@} @@stoc_lines; print $fh "</BODY></HTML>\n"; @} @end example As you can see it is very simple Perl Code, which can be changed more or less simple to fit you requirements (@pxref{CustPagePageHead,,T2H_DEFAULT_print_page_head}). @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= @node CustPagePageHead,CustPagePageFoot,CustPagePageHeadToc,CustPageMiscPage @subsection Page header Page Head @code{T2H_DEFAULT_print_page_head} @c references on T2H_DOCTYPE @c T2H_AUTHORS @example sub T2H_DEFAULT_print_page_head @{ my $fh = shift; my $longtitle = "$T2H_THISDOC@{title@}: $T2H_NAME@{This@}"; print $fh <<EOT; <HTML> $T2H_DOCTYPE <!-- Created on $T2H_TODAY by $THISPROG --> <!-- $T2H_AUTHORS --> <HEAD> <TITLE>$longtitle $T2H_EXTRA_HEAD $T2H_AFTER_BODY_OPEN EOT @} @end example @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= @node CustPagePageFoot, ,CustPagePageHead,CustPageMiscPage @subsection Page footer Page Foot @code{T2H_DEFAULT_print_page_foot} @c ======================================================== @node CustHTML, InitFile, CustomizingPage, Top @c @c This file is part of the ``Texinfo to HTML Converter'' manual @c which is part of the ``texi2html'' distribution. @c @c License: @c Copyright (C) 1999, 2000 Free Software Foundation, Inc. @c @c This program is free software; you can redistribute it @c and/or modify it under the terms of the GNU General Public @c License as published by the Free Software Foundation; @c either version 2 of the License, or (at your option) any @c later version. @c @c This program is distributed in the hope that it will be @c useful, but WITHOUT ANY WARRANTY; without even the implied @c warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR @c PURPOSE. See the GNU General Public License for more @c details. @c @c You should have received a copy of the GNU General @c Public License along with this program; if not, write to @c the Free Software Foundation, Inc., 59 Temple Place, Suite @c 330, Boston, MA 02111-1307 USA @c @c @c Revisions: @c @c @c Author: @c Karl Heinz Marbaise @c @c Description: @c Here are the informations about customizing HTML @c BODY, PRE- and AFTER Body. @c @c ======================================================== @chapter Customizing HTML If you like to read the following section, it is assumed you are famillar with @acronym{HTML}. If not, you shouldn't read this, cause you don't know what we are talking about. Here you can find information how to change the @acronym{HTML} parts of a document. These are the header, body etc. These are the defaults which are part of the distribution as @file{texi2html.init}. How to do changes of the customization... needed steps. @c examples. @menu * CustHTMLBody:: Customizing BODY Text. * CustHTMLHead:: Customizing Head. * CustHTMLBodyText:: Customizing Head. * CustHTMLPreBodyText:: Customizing Head. * CustHTMLAfterBody:: Customizing Head. @end menu @c -------------------------------------------------------- @node CustHTMLBody,CustHTMLBodyText,,CustHTML @section Body @menu * CustHTMLBodyText:: Body Text. * CustHTMLPreBodyText:: PRE Body Text. * CustHTMLAfterBody:: After Body Text. @end menu @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= @node CustHTMLBodyText,CustHTMLPreBodyText,CustHTMLBody,CustHTML @subsection Body Text @vindex T2H_BODYTEXT @example $T2H_BODYTEXT = . 'LANG="' . $T2H_LANG . '" BGCOLOR="#FFFFFF" ' . 'TEXT="#000000" LINK="#0000FF" ' . 'VLINK="#800080" ALINK="#FF0000"'; @end example If you like to change the basic color combination, you can change the entry @var{T2H_BODYTEXT}. @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= @node CustHTMLPreBodyText,CustHTMLAfterBody,CustHTMLBodyText,CustHTML @subsection Body Text @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= @node CustHTMLAfterBody,CustHTMLHead,CustHTMLPreBodyText,CustHTML @subsection After Body Text @vindex T2H_AFTER_BODY_OPEN @vindex T2H_PRE_BODY_CLOSE @vindex T2H_EXTRA_HEAD @example # text inserted after $T2H_AFTER_BODY_OPEN = ''; #text inserted before $T2H_PRE_BODY_CLOSE = ''; # this is used in footer $T2H_ADDRESS = "by $T2H_USER " if $T2H_USER; $T2H_ADDRESS .= "on $T2H_TODAY"; # this is added inside after and some META NAME stuff # can be used for <style> <script>, <meta> tags $T2H_EXTRA_HEAD = ''; @end example The default output into the @acronym{HTML} file. @xref{OptionDocType}. The following code is produced by @code{T2H_DEFAULT_print_page_head}. Detailed information can be found at @ref{CustPagePageHead}. @example <HTML> $T2H_DOCTYPE <!-- Created on $T2H_TODAY by $THISPROG --> <!-- $T2H_AUTHORS --> <HEAD> <TITLE>$longtitle $T2H_EXTRA_HEAD $T2H_AFTER_BODY_OPEN @end example @c -------------------------------------------------------- @node CustHTMLHead,,CustHTMLAfterBody,CustHTML @section Head @c ======================================================== @node InitFile, IFOs, CustHTML, Top @c @c This file is part of the ``Texinfo to HTML Converter'' manual @c which is part of the ``texi2html'' distribution. @c @c License: @c Copyright (C) 1999, 2000 Free Software Foundation, Inc. @c @c This program is free software; you can redistribute it @c and/or modify it under the terms of the GNU General Public @c License as published by the Free Software Foundation; @c either version 2 of the License, or (at your option) any @c later version. @c @c This program is distributed in the hope that it will be @c useful, but WITHOUT ANY WARRANTY; without even the implied @c warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR @c PURPOSE. See the GNU General Public License for more @c details. @c @c You should have received a copy of the GNU General @c Public License along with this program; if not, write to @c the Free Software Foundation, Inc., 59 Temple Place, Suite @c 330, Boston, MA 02111-1307 USA @c @c @c Revisions: @c @c @c Author: @c Karl Heinz Marbaise @c @c Description: @c Here you can find the description on the @c initialization files. @c @c ======================================================== @chapter Initialization file @c @cindex configure @cindex texi2html.init @cindex texi2htmlrc, global initialization @cindex .texi2htmlrc, user initialization @c @opindex sysconfdir @opindex init_file @file{texi2html.init} @menu * InitFileBasics:: The basics about initialization files. * InitFileGlobal:: Global initialization file. * InitFileUser:: User initialization file. * InitFileLoad:: Loadable initialization file. @end menu @c -------------------------------------------------------- @node InitFileBasics,InitFileGlobal,InitFile,InitFile @section The basics about init files Initialization options are read first from @file{/usr/local/etc/texi2htmlrc} (the exact location being changeable with the @option{--sysconfdir=dir} option to the @command{configure} script), then from @file{$HOME/.texi2htmlrc}, then any command-line options including @option{-init_file} option; with later settings overriding earlier ones. The default initialization options are defined in the @file{texi2html.init} file contained in the @b{Texi2html} distribution (which gets included near the beginning of the @command{texi2html} script that gets installed). To customize @file{texi2html} it is best if you copy the appropriate sections from the @file{texi2html.init} contents into an appropriate local initialization file, make the necessary changes there, and then have @command{texi2html} read this initialization file by one of the means described above. For an example on what you can produces with @command{texi2html} have a look at the following sites: @uref{http://www.singular.uni-kl.de/Manual/html/} @c -------------------------------------------------------- @node InitFileGlobal,InitFileUser,InitFileBasics,InitFile @section Global initialization file @c -------------------------------------------------------- @node InitFileUser,InitFileLoad,InitFileGlobal,InitFile @section User initialization file @c -------------------------------------------------------- @node InitFileLoad,,InitFileUser,InitFile @section Loadable initialization file @opindex init_file @option{-init_file} @c @ref{InitFile} @c -------------------------------------------------------- @node IFOs, Options, InitFile, Top @c @c This file is part of the ``Texinfo to HTML Converter'' manual @c which is part of the ``texi2html'' distribution. @c @c License: @c Copyright (C) 1999, 2000 Free Software Foundation, Inc. @c @c This program is free software; you can redistribute it @c and/or modify it under the terms of the GNU General Public @c License as published by the Free Software Foundation; @c either version 2 of the License, or (at your option) any @c later version. @c @c This program is distributed in the hope that it will be @c useful, but WITHOUT ANY WARRANTY; without even the implied @c warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR @c PURPOSE. See the GNU General Public License for more @c details. @c @c You should have received a copy of the GNU General @c Public License along with this program; if not, write to @c the Free Software Foundation, Inc., 59 Temple Place, Suite @c 330, Boston, MA 02111-1307 USA @c @c @c Revisions: @c @c @c Author: @c Karl Heinz Marbaise @c @c Description: @c Here you can find the description on the @c initialization files options. @c @c -------------------------------------------------------- @section Initialization file options This section describes in detail all options that can be used only in the initialization file (@file{texi2html.init}), and cannot be specified on the command line. This means the only way to change those options is first to copy the original @file{texi2html.init} to e.g.@: @file{texi2html.init.myown} and make changes to fit your needs. @menu * IFOnumber:: Number sectioning. * IFOmenu:: Avoid menu redundancy. * IFOCenterImage:: Center Image. * IFOExampleIndentCell:: Example Indent Cell. * IFOSampleIndentCell:: Sample Indent Cell. * IFOSmallFontSize:: Small Font Size. * IFOTopHeading:: Top Heading. * IFOIndexChapter:: Index Chapter. * IFOSplitIndex:: Split Index. * IFOhrefDirInsteadFile:: HREF Dir Instead file. @end menu @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- @node IFOnumber, IFOmenu, IFOs, IFOs @subsection Number sections. @vindex T2H_NUMBER_SECTIONS @vindex T2H_NODE_NAME_IN_MENU if set, and @var{$T2H_NUMBER_SECTIONS} is set, then use node names in menu entries, instead of section names @var{$T2H_NODE_NAME_IN_MENU} = 0; @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- @node IFOmenu, IFOCenterImage, IFOnumber, IFOs @subsection Avoid menu redundancy @c not sure if correct? @cindex menu, redundancy @vindex T2H_AVOID_MENU_REDUNDANCY If set, and menu entry equals menu description, then do not print menu description. Likewise, if node name equals entry name, do not print entry name. @var{$T2H_AVOID_MENU_REDUNDANCY} = 1; @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- @node IFOCenterImage, IFOExampleIndentCell, IFOmenu, IFOs @subsection Center Image @cindex images, center @vindex T2H_CENTER_IMAGE if set, center @@image by default otherwise, do not center by default @var{$T2H_CENTER_IMAGE} = 1; @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- @node IFOExampleIndentCell, IFOSampleIndentCell, IFOCenterImage, IFOs @subsection Example Indent Cell @cindex example, indentation @vindex T2H_EXAMPLE_INDENT_CELL used as indentation for block enclosing command @code{@@example}, etc If not empty, must be enclosed in @code{} @var{$T2H_EXAMPLE_INDENT_CELL} = ' '; @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- @node IFOSampleIndentCell, IFOSmallFontSize, IFOExampleIndentCell, IFOs @subsection Small Example Indent @cindex example, small indent @vindex T2H_SMALL_EXAMPLE_INDENT_CELL same as above, only for @code{@@small} $T2H_SMALL_EXAMPLE_INDENT_CELL = " "; @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- @node IFOSmallFontSize, IFOTopHeading, IFOSampleIndentCell, IFOs @subsection Small Font Size @cindex Font Size, small @vindex T2H_SMALL_FONT_SIZE # font size for @@small $T2H_SMALL_FONT_SIZE = "-1"; @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- @node IFOTopHeading, IFOIndexChapter, IFOSmallFontSize, IFOs @subsection Top Heading @vindex T2H_TOP_HEADING if non-empty, and no @code{@@..heading} appeared in Top @c here should be a reference to Texinfo Manual @c @@heading ?? node, then use this as header for top node/section, otherwise use value of @code{@@settitle} or @code{@@shorttitle} (in that order) $T2H_TOP_HEADING = ""; @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- @node IFOIndexChapter, IFOSplitIndex, IFOTopHeading, IFOs @subsection Index Chapter @cindex Chapter, Index @vindex T2H_INDEX_CHAPTER if set, use this chapter for @strong{Index} button, else use first chapter whose name matches @strong{index} (case insensitive) $T2H_INDEX_CHAPTER = ""; @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- @node IFOSplitIndex, IFOhrefDirInsteadFile, IFOIndexChapter, IFOs @subsection Split Index @cindex Index, split @vindex T2H_SPLIT_INDEX if set and @var{$T2H_SPLIT} is set, then split index pages at the next letter after they have more than that many entries $T2H_SPLIT_INDEX = 100; @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- @node IFOhrefDirInsteadFile, , IFOSplitIndex, IFOs @subsection HREF Dir Instead File. @c Not very good? :-/ @cindex HREF Dir instead file @vindex T2H_HREF_DIR_INSTEAD_FILE if set (e.g., to @file{index.html}) replace @strong{HREF}'s to this file (i.e., to @file{index.html}) by @file{./} $T2H_HREF_DIR_INSTEAD_FILE = ""; @c ======================================================== @c @include extfile.texi obsolete now, is not documented! @c ======================================================== @node Options, Reference, IFOs, Top @c @c This file is part of the ``Texinfo to HTML Converter'' manual @c which is part of the ``texi2html'' distribution. @c @c License: @c Copyright (C) 1999, 2000 Free Software Foundation, Inc. @c @c This program is free software; you can redistribute it @c and/or modify it under the terms of the GNU General Public @c License as published by the Free Software Foundation; @c either version 2 of the License, or (at your option) any @c later version. @c @c This program is distributed in the hope that it will be @c useful, but WITHOUT ANY WARRANTY; without even the implied @c warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR @c PURPOSE. See the GNU General Public License for more @c details. @c @c You should have received a copy of the GNU General @c Public License along with this program; if not, write to @c the Free Software Foundation, Inc., 59 Temple Place, Suite @c 330, Boston, MA 02111-1307 USA @c @c @c Revisions: @c @c @c Author: @c Karl Heinz Marbaise @c @c Description: @c Here you can find the description on the @c command line options. @c @c ======================================================== @chapter Command Line Options @menu * OptionDebug:: Debugging. * OptionDocType:: DocType (HTML) * OptionCheck:: Checking files. * OptionExpand:: Expanding info, tex areas etc. * OptionGlossary:: Glossary. * OptionInvisible:: Invisible. * OptionIso:: Iso. * OptionInclude:: Include directories. * OptionTopFile:: Top File. * OptionTocFile:: Table of content File. * OptionFrames:: Frames. * OptionMenu:: Menus. * OptionNumber:: Number sections. * OptionSplit:: Splitting. * OptionSectionNavigation:: Navigation. * OptionSubDir:: Subdirectory. * OptionShortExt:: Short extension. * OptionPrefix:: Prefix. * OptionOutput:: Output. * OptionShortRef:: Short Ref. * OptionIndexSummary:: Index Summary. * OptionVerbose:: Verbose. * OptionLanguage:: Language. * OptionL2H:: La@TeX{}2HTML. @end menu @c -------------------------------------------------------- @node OptionDebug, OptionDocType, Options, Options @section Debugging @cindex Debugging @vindex DEBUG_TOC @vindex DEBUG_INDEX @vindex DEBUG_BIB @vindex DEBUG_GLOSS @vindex DEBUG_DEF @vindex DEBUG_HTML @vindex DEBUG_USER @vindex DEBUG_L2H @opindex debug @option{-debug} debugging: 0 --- no debugging; other values; see beginning of texi2html @var{$DEBUG_TOC} = 1; @var{$DEBUG_INDEX} = 2; @var{$DEBUG_BIB} = 4; @var{$DEBUG_GLOSS} = 8; @var{$DEBUG_DEF} = 16; @var{$DEBUG_HTML} = 32; @var{$DEBUG_USER} = 64; @var{$DEBUG_L2H} = 128; @c -------------------------------------------------------- @node OptionDocType, OptionCheck, OptionDebug, Options @section DocType @cindex HTML, Doc Type @opindex doctype @vindex T2H_DOCTYPE @option{-doctype} @example @end example @c -------------------------------------------------------- @node OptionCheck, OptionExpand, OptionDocType, Options @section Check @cindex Texinfo, checking @opindex check @vindex T2H_CHECK @option{-check} if set, only check files and give the list of all things that look like untranslated Texinfo commands @c -------------------------------------------------------- @node OptionExpand, OptionGlossary, OptionCheck, Options @section Expand @opindex expand @vindex T2H_EXPAND @option{-expand} if set to @strong{tex} (or, @strong{info}) expand @code{@@iftex} and @code{@@tex} (or, @code{@@ifinfo}) sections else, neither expand @code{@@iftex}, @code{@@tex}, nor @code{@@ifinfo} sections @c $T2H_EXPAND = "info"; @c -------------------------------------------------------- @node OptionGlossary, OptionInvisible, OptionExpand, Options @section Glossary @cindex HTML, Glossary @cindex Texinfo, Glossary @opindex glossary @vindex T2H_USE_GLOSSARY @option{-glossary} if set, uses section named @strong{Footnotes} for glossary @c -------------------------------------------------------- @node OptionInvisible, OptionIso, OptionGlossary, Options @section Invisible @cindex Mark, invisible @cindex invisible, Mark @opindex invisible @vindex T2H_INVISIBLE_MARK @option{-invisible} @var{$T2H_INVISIBLE_MARK} is the text used to create invisible destination anchors for index links (you can for instance use the @file{invisible.xbm} file shipped with this program). This is a workaround for a known bug of many @acronym{WWW} browsers, including Netscape. For me, it works fine without it --- on the contrary: if there, it inserts space between headers and start of text (obachman 3/99) @example $T2H_INVISIBLE_MARK = ""; # $T2H_INVISIBLE_MARK = ' '; @end example @c -------------------------------------------------------- @node OptionIso, OptionInclude, OptionInvisible, Options @section Iso @cindex ISO8859 @cindex Copyright @opindex iso @vindex T2H_USE_ISO @option{-iso} if set, ISO8859 characters are used for special symbols (like Copyright @code{@copyright{}}, etc) $T2H_USE_ISO = 0; @c -------------------------------------------------------- @node OptionInclude, OptionTopFile, OptionIso, Options @section Include Directory @vindex Include directories @opindex I @vindex T2H_INCLUDE_DIRS @option{-I} list directories where @code{@@include} files are searched for (besides the directory of the doc file) additional @option{-I} args are add to this list. @@T2H_INCLUDE_DIRS = ("."); @c -------------------------------------------------------- @node OptionTopFile, OptionTocFile, OptionInclude, Options @section Top File @cindex Top Level file @cindex HTML, index.html @opindex top_file @vindex T2H_TOP_FILE @option{-top_file} uses file of this name for top-level file extension is manipulated appropriately, if necessary. If empty, @file{.html} is used. Typically, you would set this to @file{index.html}. $T2H_TOP_FILE = ""; @c -------------------------------------------------------- @node OptionTocFile, OptionFrames, OptionTopFile, Options @section Table Of content File @cindex Table of content file @opindex toc_file @vindex T2H_TOC_FILE @option{-toc_file} uses file of this name for table of contents. File extension is manipulated appropriately, if necessary. If empty, @file{_toc.html} is used. $T2H_TOC_FILE = ""; @c -------------------------------------------------------- @node OptionFrames, OptionMenu, OptionTocFile, Options @section Frames @vindex HTML, frames @vindex HTML 4.0, frames @opindex frames @vindex T2H_FRAMES @option{-frames} if set, output two additional files which use HTML 4.0 @b{frames}. $T2H_FRAMES = 0; @c -------------------------------------------------------- @node OptionMenu, OptionNumber, OptionFrames, Options @section Menus @cindex HTML, menu @cindex Texinfo, menu @opindex menu @opindex nomenu @vindex T2H_SHOW_MENU @option{-menu} or @option{-nomenu} if set, show the Texinfo menus $T2H_SHOW_MENU = 1; @c -------------------------------------------------------- @node OptionNumber, OptionSplit, OptionMenu, Options @section Number sections @cindex Section numbering @opindex number @opindex nonumber @vindex T2H_NUMBER_SECTIONS @option{-number} @option{-nonumber} if set, number sections and show section names and numbers in references and menus @c Just think about it? @c @defvar $T2H_NUMBER_SECTIONS @c @c = 1; @c @end defvar @c -------------------------------------------------------- @node OptionSplit, OptionSectionNavigation, OptionNumber, Options @section Split @cindex HTML, split @cindex File, split @opindex split @vindex T2H_SPLIT @option{-split section|chapter|none} if set to @strong{section} (resp. @strong{chapter}) create one @acronym{HTML} file per (sub)section (resp. chapter) and separate pages for Top, ToC, Overview, Index, Glossary, About. Otherwise, create a monolithic @acronym{HTML} file that contains the whole document. #$T2H_SPLIT = 'section'; $T2H_SPLIT = undef; @c -------------------------------------------------------- @node OptionSectionNavigation, OptionSubDir, OptionSplit, Options @section Section navigation @cindex HTML, Navigation @opindex section_navigation @opindex no-section_navigation @vindex T2H_SECTION_NAVIGATION @option{-section_navigation}| @option{-no-section_navigation} if set, then navigation panels are printed at the beginning of each section and, possibly at the end (depending on whether or not there were more than @var{$T2H_WORDS_IN_PAGE} words on page). This is most useful if you do not want to have section navigation on @option{-split chapter} @c @vindex T2H_SECTION_NAVIGATION @c @defvar $T2H_SECTION_NAVIGATION @c = 1; @c @end defvar @c -------------------------------------------------------- @node OptionSubDir, OptionShortExt, OptionSectionNavigation, Options @section Subdirectory @cindex Subdirectory @vindex T2H_SUBDIR @option{-subdir} If set, then put result files in the specified directory. If not set, then result files are put into the current directory. @c #$T2H_SUBDIR = 'html'; @var{$T2H_SUBDIR} = undef; @c -------------------------------------------------------- @node OptionShortExt, OptionPrefix, OptionSubDir, Options @section Short extension @cindex HTML, .htm extension @cindex HTML, .html extension @cindex extension, .html @cindex extension, .htm @vindex T2H_SHORTEXTN @opindex short_extn @option{-short_extn} If this is set, then all @acronym{HTML} files will have extension @file{.htm} instead of @file{.html}. This is helpful when shipping the document to DOS-based systems. @var{$T2H_SHORTEXTN} = 0; @c -------------------------------------------------------- @node OptionPrefix, OptionOutput, OptionShortExt, Options @section Prefix @cindex Prefix @vindex T2H_PREFIX @opindex prefix @option{-prefix} Set the output file prefix, prepended to all @file{.html}, @file{.gif} and @file{.pl} files. By default, this is the basename of the document @var{$T2H_PREFIX} = ""; @c -------------------------------------------------------- @node OptionOutput, OptionShortRef, OptionPrefix, Options @section Output filename @cindex Output filename @cindex Filename, output @vindex T2H_OUT @opindex o @opindex out_file @option{-o filename}|@option{-out_file} If set, generate monolithic document output @acronym{HTML} into @file{filename}. @c -------------------------------------------------------- @node OptionShortRef, OptionIndexSummary, OptionOutput, Options @section Short Cross References @cindex References, short @cindex sections without numbers @vindex T2H_SHORT_REF @opindex short_ref @option{-short_ref} if set cross-references are given without section numbers @c -------------------------------------------------------- @node OptionIndexSummary, OptionVerbose, OptionShortRef, Options @section Index Summary @cindex Index, Summary @cindex Summary Index @cindex HTML, Index @vindex T2H_IDX_SUMMARY @opindex idx_sum @option{-idx_sum} If value is set, then for each @code{@@prinindex $what} @file{$docu_name_$what.idx} is created which contains lines of the form @strong{$key\t$ref} sorted alphabetically (case matters). @c -------------------------------------------------------- @node OptionVerbose, OptionLanguage, OptionIndexSummary, Options @section Verbose output @cindex Output, verbose @cindex Verbose output @cindex Debugging, verbose output @vindex T2H_VERBOSE @opindex verbose @option{-verbose} if set, chatter about what we are doing. @c -------------------------------------------------------- @node OptionLanguage, OptionL2H, OptionVerbose, Options @section Language Support @cindex Language Support @cindex Support different languages @vindex $T2H_LANG @vindex $T2H_WORDS @opindex lang @option{-lang} For page titles, use @code{$T2H_WORDS->@{$T2H_LANG@}->@{...@}} as title. To add a new language, supply list of titles (see @var{$T2H_WORDS}), and use ISO 639 language codes (see e.g.@: perl module @file{Locale-Codes-1.02.tar.gz} for definitions). If you don't give a @option{-lang} then we got it from the Texinfo source file (@@documentlanguage @c Put a table with the language codes here! @c Or better put a reference into the Texinfo @c Manual, which has a table of ISO 639-Codes. @c @c Currently the @xref etc. does not work with @c external documents, cause we don't know @c reference (anchor) value or there is no way @c to get it. @c The following reference does only work correctly @c in Info!!! @pxref{documentlanguage,,,Texinfo}). If there is no @code{@@documentlanguage} we use the default @code{en} for the language. @c @c put some information about Month names etc. here @c $MONTH_NAMES !! @c Supplemental should be a naming scheme for variables in @c different languages (MONTH_NAMES_DE etc.) @c -------------------------------------------------------- @node OptionL2H, , OptionLanguage, Options @section La@TeX{}2HTML for @code{@@math} and @code{@@tex} @cindex La@TeX{}2HTML @cindex Conversion of @@math and @@tex @cindex @@tex @cindex @@math @vindex T2H_L2H @opindex l2h @option{-l2h} if set, uses @command{latex2html} for generation of math content. @menu * OptionL2HL2H:: Where to find La@TeX{}2HTML. * OptionL2HSkip:: Skip calling La@TeX{}2HTML. * OptionL2Htmp:: Temporary files for La@TeX{}2HTML. @end menu @c -------------------------------------------------------- @node OptionL2HL2H, OptionL2HSkip, OptionL2H, OptionL2H @subsection Where to find @command{latex2html} @cindex location, La@TeX{}2HTML @cindex La@TeX{}2HTML, location @vindex T2H_L2H_L2H @opindex l2h_l2h @option{-l2h_l2h} name/location of @command{latex2html} program. @c -------------------------------------------------------- @node OptionL2HSkip, OptionL2Htmp, OptionL2HL2H, OptionL2H @subsection Skip calling La@TeX{}2HTML @cindex La@TeX{}2HTML, skip calling @vindex T2H_L2H_SKIP @opindex l2h_skip @option{-l2h_skip} If set, skips actual call to @command{latex2html}: tries to reuse previously generated content, instead. @c -------------------------------------------------------- @node OptionL2Htmp, , OptionL2HSkip, OptionL2H @subsection Temporary files for La@TeX{}2HTML @cindex Temporary, La@TeX{}2HTML @cindex La@TeX{}2HTML, Temporary files @vindex T2H_L2H_TMP @opindex l2h_tmp @option{-l2h_tmp} If set, l2h uses this directory for temporary files. The path leading to this directory may not contain a dot (i.e., a @samp{.}); otherwise, l2h will fail. @c ======================================================== @node Reference, Indexop, Options, Top @c @c This file is part of the ``Texinfo to HTML Converter'' manual @c which is part of the ``texi2html'' distribution. @c @c License: @c Copyright (C) 1999, 2000 Free Software Foundation, Inc. @c @c This program is free software; you can redistribute it @c and/or modify it under the terms of the GNU General Public @c License as published by the Free Software Foundation; @c either version 2 of the License, or (at your option) any @c later version. @c @c This program is distributed in the hope that it will be @c useful, but WITHOUT ANY WARRANTY; without even the implied @c warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR @c PURPOSE. See the GNU General Public License for more @c details. @c @c You should have received a copy of the GNU General @c Public License along with this program; if not, write to @c the Free Software Foundation, Inc., 59 Temple Place, Suite @c 330, Boston, MA 02111-1307 USA @c @c @c Revisions: @c @c @c Author: @c Karl Heinz Marbaise @c @c Description: @c Here you can find the description on all @c subs in the original Perl file. @c @c ======================================================== @appendix Function Reference @menu * Refptocframe:: Print ToC Frame. * Refpphead:: Print page head. @end menu @c Global variables: @c T2H_USER which is created throught main part @c (texi2html.pl) @c You can use it. (On Windows? On Unix ?) @c -------------------------------------------------------- @node Refptocframe,Refpphead,,Reference @appendixsec Print ToC Frame @defun T2H_DEFAULT_print_toc_frame (FileName) @sp 1 Description of the subroutine. What does it do? Which parameters it needs etc. @end defun @c -------------------------------------------------------- @node Refpphead,,Refptocframe,Reference @appendixsec Print Page Head @defun T2H_DEFAULT_print_page_head (FileName) @sp 1 Description of the subroutine. What does it do? Which parameters it needs etc. @end defun @c ======================================================== @c commandline option index. @node Indexop, Indexvr, Reference, Top @appendix Indices @appendixsec Command Line Option Index @printindex op @c -------------------------------------------------------- @node Indexvr, Indexcp, Indexop, Top @appendixsec Variable Index @printindex vr @c -------------------------------------------------------- @node Indexcp, , Indexvr, Top @appendixsec Concept Index @printindex cp @c printindex init file options dito. @c concept index. @bye texi2html-1.82/test/texi2html_manual/res/texi_texi2html/texi2html.20000644000175000017500000000000011264347116027224 0ustar flichtenheldflichtenheldtexi2html-1.82/test/texi2html_manual/res/texi_texi2html/texi2html.passtexi0000644000175000017500000021346211264347116030745 0ustar flichtenheldflichtenheldtexi2html.texi(,2) @c texi2html.texi(,3) @c This is the ``Texinfo to HTML Converter'' manual which texi2html.texi(,4) @c which is part of the ``texi2html'' distribution. texi2html.texi(,5) @c texi2html.texi(,6) @c License: texi2html.texi(,7) @c Copyright (C) 1999, 2000 Free Software Foundation, Inc. texi2html.texi(,8) @c texi2html.texi(,9) @c This program is free software; you can redistribute it texi2html.texi(,10) @c and/or modify it under the terms of the GNU General Public texi2html.texi(,11) @c License as published by the Free Software Foundation; texi2html.texi(,12) @c either version 2 of the License, or (at your option) any texi2html.texi(,13) @c later version. texi2html.texi(,14) @c texi2html.texi(,15) @c This program is distributed in the hope that it will be texi2html.texi(,16) @c useful, but WITHOUT ANY WARRANTY; without even the implied texi2html.texi(,17) @c warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR texi2html.texi(,18) @c PURPOSE. See the GNU General Public License for more texi2html.texi(,19) @c details. texi2html.texi(,20) @c texi2html.texi(,21) @c You should have received a copy of the GNU General texi2html.texi(,22) @c Public License along with this program; if not, write to texi2html.texi(,23) @c the Free Software Foundation, Inc., 59 Temple Place, Suite texi2html.texi(,24) @c 330, Boston, MA 02111-1307 USA texi2html.texi(,25) @c texi2html.texi(,26) @c texi2html.texi(,27) @c Revisions: texi2html.texi(,28) @c texi2html.texi(,29) @c texi2html.texi(,30) @c Author: texi2html.texi(,31) @c Karl Heinz Marbaise texi2html.texi(,32) @c texi2html.texi(,33) @c -------------------------------------------------------- texi2html.texi(,34) @c texi2html.texi(,35) @c Currently most of the material is copied out of texi2html.texi(,36) @c texi2html.init file. It's just a start point. texi2html.texi(,37) @c In other words this is a draft manual ;-) texi2html.texi(,38) @c texi2html.texi(,39) @setfilename texi2html.info texi2html.texi(,40) @c -------------------------------------------------------- texi2html.texi(,41) @c Edition and last update date of the manual which might texi2html.texi(,42) @c differ to the scripts last update date etc. texi2html.texi(,43) @set MANUAL_UPD 14. August 2000 texi2html.texi(,44) @set MANUAL_ED 0.21 texi2html.texi(,45) @c texi2html.texi(,46) @set MANUAL_AUTHOR Karl Heinz Marbaise texi2html.texi(,47) @set MANUAL_AUTHOR_EMAIL khmarbaise@@gmx.de texi2html.texi(,48) @c texi2html.texi(,49) @c Get the version of the script itself through texi2html.texi(,50) @c configure/autoconf etc. texi2html.texi(,51) @c version.texi is automatically generated through texi2html.texi(,52) @c configure/autoconf. version.texi(,1) @set UPDATED 15 September 2001 version.texi(,2) @set UPDATED-MONTH September 2001 version.texi(,3) @set EDITION 1.67 version.texi(,4) @set VERSION 1.67 texi2html.texi(,54) @c -------------------------------------------------------- texi2html.texi(,55) @c Index for command line options texi2html.texi(,56) @defcodeindex op texi2html.texi(,57) @c -------------------------------------------------------- texi2html.texi(,58) @settitle Texinfo to HTML texi2html.texi(,59) @c @setchapternewpage on texi2html.texi(,60) @setchapternewpage odd texi2html.texi(,61) @footnotestyle separate texi2html.texi(,65) @c -------------------------------------------------------- texi2html.texi(,66) @c support old style Info Dir entries. texi2html.texi(,76) @c -------------------------------------------------------- texi2html.texi(,77) @c Informations for install-info. texi2html.texi(,78) @c I think the conversion script should be found texi2html.texi(,79) @c where the documentation system lives. texi2html.texi(,80) @c What do you think? texi2html.texi(,81) @dircategory Texinfo documentation system texi2html.texi(,85) @c -------------------------------------------------------- texi2html.texi(,119) @c -------------------------------------------------------- texi2html.texi(,120) @titlepage texi2html.texi(,121) @title Texinfo to HTML Converter texi2html.texi(,122) @subtitle Manual Edition 0.21 texi2html.texi(,123) @subtitle Last Update: 14. August 2000 texi2html.texi(,124) @subtitle for Version 1.67 of @command{texi2html} script. texi2html.texi(,125) @author Lionel Cons texi2html.texi(,126) @author Karl Berry texi2html.texi(,127) @author Olaf Bachmann texi2html.texi(,128) @author and many others. texi2html.texi(,129) @author Karl Heinz Marbaise (manual) texi2html.texi(,130) @page texi2html.texi(,131) @vskip 0pt plus 1filll texi2html.texi(,132) Copyright @copyright{} Lionel Cons@* texi2html.texi(,133) Copyright @copyright{} Karl Berry@* texi2html.texi(,134) Copyright @copyright{} Olaf Bachmann@* texi2html.texi(,135) Copyright @copyright{} and many others.@* texi2html.texi(,136) Copyright @copyright{} Karl Heinz Marbaise (manual)@* texi2html.texi(,137) texi2html.texi(,138) Permission is granted to make and distribute verbatim texi2html.texi(,139) copies of this manual provided the copyright notice and texi2html.texi(,140) this permission notice are preserved on all copies. texi2html.texi(,141) texi2html.texi(,142) Permission is granted to copy and distribute modified texi2html.texi(,143) versions of this manual under the conditions for verbatim texi2html.texi(,144) copying, provided that the entire resulting derived work is texi2html.texi(,145) distributed under the terms of a permission notice texi2html.texi(,146) identical to this one. texi2html.texi(,147) texi2html.texi(,148) Permission is granted to copy and distribute translations texi2html.texi(,149) of this manual into another language, under the above texi2html.texi(,150) conditions for modified versions, except that this texi2html.texi(,151) permission notice may be stated in a translation approved texi2html.texi(,152) by the Free Software Foundation. texi2html.texi(,153) @sp 2 texi2html.texi(,154) Cover art by Etienne Suvasa. texi2html.texi(,155) @end titlepage texi2html.texi(,156) @c ======================================================== texi2html.texi(,157) @summarycontents texi2html.texi(,158) @contents texi2html.texi(,159) @c texi2html.texi(,161) @node Top, Overview, (dir), (dir) texi2html.texi(,162) @top Texi2html texi2html.texi(,163) @c @page texi2html.texi(,164) @c ======================================================== texi2html.texi(,165) @c @node Top, Overview, (dir), (dir) texi2html.texi(,166) @c @top texi2html.texi(,167) @c @chapter About texi2html.texi(,168) texi2html.texi(,169) This Manual (Edition 0.21, last updated at texi2html.texi(,170) 14. August 2000) describes the @command{texi2html} Perl texi2html.texi(,171) script which converters texi2html.texi(,172) @c The following construct allows me to get texi2html.texi(,173) @c real URL link in HTML and working refs in texi2html.texi(,174) @c info. texi2html.texi(,176) @uref{http://www.texinfo.org,Texinfo} texi2html.texi(,181) into @acronym{HTML}. texi2html.texi(,182) texi2html.texi(,183) @c @inforef{Top, Top, Texinfo} does not work yet ;-) texi2html.texi(,184) @c here we should paste a @inforef or @xref on the texi2html.texi(,185) @c Texinfo manual. texi2html.texi(,186) texi2html.texi(,187) Please send bug reports about this manual to Karl Heinz texi2html.texi(,188) Marbaise @email{khmarbaise@@gmx.de}. Please state exact texi2html.texi(,189) version/edition of the manual (can be found at start of texi2html.texi(,190) Texinfo source file; use the entry Id under Revisions). texi2html.texi(,191) texi2html.texi(,192) Please note: texi2html.texi(,193) @example texi2html.texi(,194) This manual is currently under texi2html.texi(,195) construction and of course incomplete ;-) texi2html.texi(,196) @end example texi2html.texi(,197) texi2html.texi(,198) @c The following line within a menu does not work! texi2html.texi(,199) @c * Why texi2html and not Makeinfo?:whytexi2html. Why texi2html and not makeinfo?. texi2html.texi(,289) @c ======================================================== texi2html.texi(,290) @node Overview, HowToGetHTML, Top, Top texi2html.texi(,291) @chapter Overview about @command{texi2html} texi2html.texi(,292) @uref{http://www.texinfo.org,Texinfo} is the official texi2html.texi(,293) documentation format of the @uref{http://www.gnu.org,GNU} texi2html.texi(,294) project. It uses a single source file to produce both texi2html.texi(,295) online information and printed output. texi2html.texi(,296) texi2html.texi(,297) @c much thinking about ... texi2html.texi(,298) It is often proposed to have a way to produce texi2html.texi(,299) @acronym{HTML} from Texinfo sources, like the GNU-Info texi2html.texi(,300) format. It is much simpler to create one converter instead texi2html.texi(,301) of writing all documentation new in @acronym{HTML}, cause texi2html.texi(,302) there is so much documentation in Texinfo all over texi2html.texi(,303) the world. texi2html.texi(,304) texi2html.texi(,305) A few time ago @command{makeinfo} wasn't able to produce texi2html.texi(,306) @acronym{HTML} output format, but there are needth to have texi2html.texi(,307) @acronym{HTML}. This was the borning hour for texi2html.texi(,308) @command{texi2html}. The basic purpose of @file{texi2html} texi2html.texi(,309) is to convert Texinfo documents into HTML. texi2html.texi(,310) texi2html.texi(,311) texi2html.texi(,312) @menu texi2html.texi(,313) * HowToGetHTML:: Ways to get HTML files. texi2html.texi(,314) * whytexi2html:: Why texi2html and not makeinfo?. texi2html.texi(,315) @end menu texi2html.texi(,316) @c -------------------------------------------------------- texi2html.texi(,317) @node HowToGetHTML, whytexi2html, Overview, Overview texi2html.texi(,318) @section Ways to get HTML texi2html.texi(,319) You would like to @acronym{HTML} files out of your Texinfo texi2html.texi(,320) files? There exist two ways which you can go. texi2html.texi(,321) This first is to use @command{makeinfo} itself to produce texi2html.texi(,322) @acronym{HTML} output. The second is to use texi2html.texi(,323) @command{texi2html}. texi2html.texi(,324) texi2html.texi(,325) @c -------------------------------------------------------- texi2html.texi(,326) @node whytexi2html, Installation, HowToGetHTML, Overview texi2html.texi(,327) @section Why @file{texi2html} and not @file{makeinfo}? texi2html.texi(,328) The basic idea of @command{makeinfo}'s @acronym{HTML} texi2html.texi(,329) output was to get an readable @acronym{HTML} output. texi2html.texi(,330) Nothing sophisticated nor good styling just readable. texi2html.texi(,331) texi2html.texi(,332) The current development of texi2html is going into texi2html.texi(,333) different direction. texi2html.texi(,334) texi2html.texi(,335) The main purpose is to get better styling, better design texi2html.texi(,336) etc. of the created @acronym{HTML} pages. This way is texi2html.texi(,337) supported using differnt command line options and of course texi2html.texi(,338) possible changings of the initialization file to fit your texi2html.texi(,339) own needs. texi2html.texi(,340) texi2html.texi(,341) The main disadvantage of @acronym{makeinfo}'s texi2html.texi(,342) @acronym{HTML} output is your getting only one big file. texi2html.texi(,343) This is of course readable but not very usable. The problem texi2html.texi(,344) of this is, while you like to have splitted chapters or texi2html.texi(,345) nodes the Texinfo source has to be read at minimum twice texi2html.texi(,346) times. This makes it impossible to implement this in texi2html.texi(,347) @command{makeinfo}. This would result in complete new texi2html.texi(,348) implementation of @command{makeinfo}'s source. texi2html.texi(,349) texi2html.texi(,350) @c think more about this???? texi2html.texi(,351) In contrast to the HTML produced by @command{makeinfo texi2html.texi(,352) --html} (the @command{makeinfo} program is part of the texi2html.texi(,353) Texinfo distribution), the HTML output of @file{texi2html} texi2html.texi(,354) is highly configurable. Among other differences, with texi2html.texi(,355) @command{texi2html} allows you to customize your entire texi2html.texi(,356) page layout (like headers, footers, style sheets, etc), texi2html.texi(,357) split documents at various levels, and use texi2html.texi(,358) @command{latex2html} to convert @code{@@tex} sections. texi2html.texi(,359) texi2html.texi(,360) @command{texi2html} should reasonably convert all Texinfo texi2html.texi(,361) 4.0 constructs. If not, please send a bug report to texi2html.texi(,362) @email{texi2html@@mathematik.uni-kl.de}. texi2html.texi(,363) texi2html.texi(,364) @c ======================================================== texi2html.texi(,365) @node Installation, Customizing, whytexi2html, Top texi2html.texi(,366) @chapter Installation of @command{texi2html} texi2html.texi(,367) @cindex Installation texi2html.texi(,368) description of the installation process. texi2html.texi(,369) What do you need? texi2html.texi(,370) How? texi2html.texi(,371) texi2html.texi(,372) @c ======================================================== texi2html.texi(,373) @node Customizing, CustomizingExpand, Installation, Top texi2html.texi(,374) @chapter Customizing files texi2html.texi(,375) @cindex Installation texi2html.texi(,376) @opindex frames texi2html.texi(,377) @c 4.) Customizing files to output texi2html.texi(,378) @c ==> -out_file, -prefix, -subdir, -split, -frames etc texi2html.texi(,379) Result based on using @option{-frames} texi2html.texi(,380) texi2html.texi(,381) @example texi2html.texi(,382) texi2html -V -frames texi2html.texi texi2html.texi(,383) @end example texi2html.texi(,384) Explanation of the output differences against default, texi2html.texi(,385) whatever this is ;-) texi2html.texi(,386) texi2html.texi(,387) texi2html.texi(,388) @c ======================================================== texi2html.texi(,389) @node CustomizingExpand, CustomizingPage, Customizing, Top texi2html.texi(,390) @chapter Customizing what gets expanded texi2html.texi(,391) @c 5.) Customizing what gets expanded texi2html.texi(,392) @c ==> -expand, and latex2html texi2html.texi(,393) Test starting. texi2html.texi(,394) texi2html.texi(,395) @option{-expand info} texi2html.texi(,396) @option{-expand tex} texi2html.texi(,397) Take a look at optionexpand. texi2html.texi(,398) texi2html.texi(,399) @c ======================================================== texi2html.texi(,400) @node CustomizingPage, CustHTML, CustomizingExpand, Top custpage.texi(,1) @c custpage.texi(,2) @c This file is part of the ``Texinfo to HTML Converter'' manual custpage.texi(,3) @c which is part of the ``texi2html'' distribution. custpage.texi(,4) @c custpage.texi(,5) @c License: custpage.texi(,6) @c Copyright (C) 1999, 2000 Free Software Foundation, Inc. custpage.texi(,7) @c custpage.texi(,8) @c This program is free software; you can redistribute it custpage.texi(,9) @c and/or modify it under the terms of the GNU General Public custpage.texi(,10) @c License as published by the Free Software Foundation; custpage.texi(,11) @c either version 2 of the License, or (at your option) any custpage.texi(,12) @c later version. custpage.texi(,13) @c custpage.texi(,14) @c This program is distributed in the hope that it will be custpage.texi(,15) @c useful, but WITHOUT ANY WARRANTY; without even the implied custpage.texi(,16) @c warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR custpage.texi(,17) @c PURPOSE. See the GNU General Public License for more custpage.texi(,18) @c details. custpage.texi(,19) @c custpage.texi(,20) @c You should have received a copy of the GNU General custpage.texi(,21) @c Public License along with this program; if not, write to custpage.texi(,22) @c the Free Software Foundation, Inc., 59 Temple Place, Suite custpage.texi(,23) @c 330, Boston, MA 02111-1307 USA custpage.texi(,24) @c custpage.texi(,25) @c custpage.texi(,26) @c Revisions: custpage.texi(,27) @c custpage.texi(,28) @c custpage.texi(,29) @c Author: custpage.texi(,30) @c Karl Heinz Marbaise custpage.texi(,31) @c custpage.texi(,32) @c Description: custpage.texi(,33) @c Here are the informations about customizing page custpage.texi(,34) @c layout. custpage.texi(,35) @c custpage.texi(,36) @c ======================================================== custpage.texi(,37) @chapter Customizing page layout custpage.texi(,38) This chapter is designed to help you to change the custpage.texi(,39) complete layout of the @acronym{HTML} output if you like to custpage.texi(,40) do so. custpage.texi(,41) custpage.texi(,42) custpage.texi(,43) a) General: Philosophy, and how it works@* custpage.texi(,44) aa) Navigation panels@* custpage.texi(,45) b) Top page@* custpage.texi(,46) c) Section pages@* custpage.texi(,47) custpage.texi(,48) custpage.texi(,49) custpage.texi(,50) custpage.texi(,51) @menu custpage.texi(,52) * TipsNewDesign:: . custpage.texi(,53) * CustPagePhil:: . custpage.texi(,54) * CustPagePhilNav:: . custpage.texi(,55) * CustPageTopPage:: . custpage.texi(,56) * CustPageSectionPages:: . custpage.texi(,57) * CustPageMiscPage:: . custpage.texi(,58) @end menu custpage.texi(,59) @c -------------------------------------------------------- custpage.texi(,60) @node TipsNewDesign,CustPagePhil,CustomizingPage,CustomizingPage custpage.texi(,61) @section Tips how to create a new site design custpage.texi(,62) custpage.texi(,63) Here you can find information how you should work to pick custpage.texi(,64) up a new design with @command{texi2html}. custpage.texi(,65) custpage.texi(,66) custpage.texi(,67) @c -------------------------------------------------------- custpage.texi(,68) @node CustPagePhil,CustPagePhilNav,TipsNewDesign,CustomizingPage custpage.texi(,69) @section Page Layout and the philosophy custpage.texi(,70) custpage.texi(,71) @menu custpage.texi(,72) * CustPagePhilNav:: Navigation panels. custpage.texi(,73) @end menu custpage.texi(,74) @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= custpage.texi(,75) @node CustPagePhilNav,CustPageTopPage,CustPagePhil,CustomizingPage custpage.texi(,76) @subsection Navigation panels custpage.texi(,77) custpage.texi(,78) Head and foot Navigation panels. custpage.texi(,79) custpage.texi(,80) @c -------------------------------------------------------- custpage.texi(,81) @node CustPageTopPage,CustPageSectionPages,CustPagePhilNav,CustomizingPage custpage.texi(,82) @section Top Page custpage.texi(,83) @c -------------------------------------------------------- custpage.texi(,84) @node CustPageSectionPages,CustPageMiscPage,CustPageTopPage,CustomizingPage custpage.texi(,85) @section Section Pages custpage.texi(,86) @c -------------------------------------------------------- custpage.texi(,87) @node CustPageMiscPage,CustPagePageHeadToc,CustPageSectionPages,CustomizingPage custpage.texi(,88) @section Misc pages custpage.texi(,89) Here you can find information about the creation of the custpage.texi(,90) @dfn{ToC} (@i{Table Of content}), About---Page custpage.texi(,91) etc. and specialy how to change them to get your own custpage.texi(,92) design. custpage.texi(,93) custpage.texi(,94) @acronym{ToC} @code{T2H_DEFAULT_print_toc_frame} in custpage.texi(,95) @file{texi2html.init} custpage.texi(,96) custpage.texi(,97) @menu custpage.texi(,98) * CustPagePageHeadToc:: . custpage.texi(,99) * CustPagePageHead:: . custpage.texi(,100) * CustPagePageFoot:: . custpage.texi(,101) @end menu custpage.texi(,102) custpage.texi(,103) @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= custpage.texi(,104) @node CustPagePageHeadToc,CustPagePageHead,CustPageMiscPage,CustPageMiscPage custpage.texi(,105) @subsection Table Of Contents custpage.texi(,106) custpage.texi(,107) The following code is the original code out of the custpage.texi(,108) initialization file (@pxref{InitFile,Initialization file}). custpage.texi(,109) custpage.texi(,110) @example custpage.texi(,111) sub T2H_DEFAULT_print_toc_frame custpage.texi(,112) @{ custpage.texi(,113) my $fh = shift; custpage.texi(,114) &$T2H_print_page_head($fh); custpage.texi(,115) print $fh <Content custpage.texi(,117) EOT custpage.texi(,118) print $fh map @{s/HREF=/target=\"main\" HREF=/; $_;@} @@stoc_lines; custpage.texi(,119) print $fh "\n"; custpage.texi(,120) @} custpage.texi(,121) @end example custpage.texi(,122) custpage.texi(,123) As you can see it is very simple Perl Code, which can custpage.texi(,124) be changed more or less simple to fit you requirements custpage.texi(,125) (@pxref{CustPagePageHead,,T2H_DEFAULT_print_page_head}). custpage.texi(,126) custpage.texi(,127) custpage.texi(,128) @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= custpage.texi(,129) @node CustPagePageHead,CustPagePageFoot,CustPagePageHeadToc,CustPageMiscPage custpage.texi(,130) @subsection Page header custpage.texi(,131) Page Head @code{T2H_DEFAULT_print_page_head} custpage.texi(,132) custpage.texi(,133) @c references on T2H_DOCTYPE custpage.texi(,134) @c T2H_AUTHORS custpage.texi(,135) @example custpage.texi(,136) sub T2H_DEFAULT_print_page_head custpage.texi(,137) @{ custpage.texi(,138) my $fh = shift; custpage.texi(,139) my $longtitle = "$T2H_THISDOC@{title@}: $T2H_NAME@{This@}"; custpage.texi(,140) print $fh < custpage.texi(,142) $T2H_DOCTYPE custpage.texi(,143) custpage.texi(,144) custpage.texi(,147) custpage.texi(,148) $longtitle custpage.texi(,149) custpage.texi(,150) custpage.texi(,151) custpage.texi(,152) custpage.texi(,153) custpage.texi(,154) custpage.texi(,155) $T2H_EXTRA_HEAD custpage.texi(,156) custpage.texi(,157) custpage.texi(,158) custpage.texi(,159) $T2H_AFTER_BODY_OPEN custpage.texi(,160) EOT custpage.texi(,161) @} custpage.texi(,162) @end example custpage.texi(,163) custpage.texi(,164) @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= custpage.texi(,165) @node CustPagePageFoot, ,CustPagePageHead,CustPageMiscPage custpage.texi(,166) @subsection Page footer custpage.texi(,167) custpage.texi(,168) Page Foot @code{T2H_DEFAULT_print_page_foot} texi2html.texi(,402) @c ======================================================== texi2html.texi(,403) @node CustHTML, InitFile, CustomizingPage, Top custhtml.texi(,1) @c custhtml.texi(,2) @c This file is part of the ``Texinfo to HTML Converter'' manual custhtml.texi(,3) @c which is part of the ``texi2html'' distribution. custhtml.texi(,4) @c custhtml.texi(,5) @c License: custhtml.texi(,6) @c Copyright (C) 1999, 2000 Free Software Foundation, Inc. custhtml.texi(,7) @c custhtml.texi(,8) @c This program is free software; you can redistribute it custhtml.texi(,9) @c and/or modify it under the terms of the GNU General Public custhtml.texi(,10) @c License as published by the Free Software Foundation; custhtml.texi(,11) @c either version 2 of the License, or (at your option) any custhtml.texi(,12) @c later version. custhtml.texi(,13) @c custhtml.texi(,14) @c This program is distributed in the hope that it will be custhtml.texi(,15) @c useful, but WITHOUT ANY WARRANTY; without even the implied custhtml.texi(,16) @c warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR custhtml.texi(,17) @c PURPOSE. See the GNU General Public License for more custhtml.texi(,18) @c details. custhtml.texi(,19) @c custhtml.texi(,20) @c You should have received a copy of the GNU General custhtml.texi(,21) @c Public License along with this program; if not, write to custhtml.texi(,22) @c the Free Software Foundation, Inc., 59 Temple Place, Suite custhtml.texi(,23) @c 330, Boston, MA 02111-1307 USA custhtml.texi(,24) @c custhtml.texi(,25) @c custhtml.texi(,26) @c Revisions: custhtml.texi(,27) @c custhtml.texi(,28) @c custhtml.texi(,29) @c Author: custhtml.texi(,30) @c Karl Heinz Marbaise custhtml.texi(,31) @c custhtml.texi(,32) @c Description: custhtml.texi(,33) @c Here are the informations about customizing HTML custhtml.texi(,34) @c BODY, PRE- and AFTER Body. custhtml.texi(,35) @c custhtml.texi(,36) @c ======================================================== custhtml.texi(,37) @chapter Customizing HTML custhtml.texi(,38) If you like to read the following section, it is assumed custhtml.texi(,39) you are famillar with @acronym{HTML}. If not, you shouldn't custhtml.texi(,40) read this, cause you don't know what we are talking about. custhtml.texi(,41) custhtml.texi(,42) Here you can find information how to change the custhtml.texi(,43) @acronym{HTML} parts of a document. These are the custhtml.texi(,44) header, body etc. custhtml.texi(,45) custhtml.texi(,46) These are the defaults which are custhtml.texi(,47) part of the distribution as @file{texi2html.init}. custhtml.texi(,48) custhtml.texi(,49) custhtml.texi(,50) How to do changes of the customization... custhtml.texi(,51) needed steps. custhtml.texi(,52) @c examples. custhtml.texi(,53) custhtml.texi(,54) @menu custhtml.texi(,55) * CustHTMLBody:: Customizing BODY Text. custhtml.texi(,56) * CustHTMLHead:: Customizing Head. custhtml.texi(,57) * CustHTMLBodyText:: Customizing Head. custhtml.texi(,58) * CustHTMLPreBodyText:: Customizing Head. custhtml.texi(,59) * CustHTMLAfterBody:: Customizing Head. custhtml.texi(,60) @end menu custhtml.texi(,61) @c -------------------------------------------------------- custhtml.texi(,62) @node CustHTMLBody,CustHTMLBodyText,,CustHTML custhtml.texi(,63) @section Body custhtml.texi(,64) custhtml.texi(,65) @menu custhtml.texi(,66) * CustHTMLBodyText:: Body Text. custhtml.texi(,67) * CustHTMLPreBodyText:: PRE Body Text. custhtml.texi(,68) * CustHTMLAfterBody:: After Body Text. custhtml.texi(,69) @end menu custhtml.texi(,70) @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= custhtml.texi(,71) @node CustHTMLBodyText,CustHTMLPreBodyText,CustHTMLBody,CustHTML custhtml.texi(,72) @subsection Body Text custhtml.texi(,73) custhtml.texi(,74) custhtml.texi(,75) @vindex T2H_BODYTEXT custhtml.texi(,76) custhtml.texi(,77) @example custhtml.texi(,78) $T2H_BODYTEXT = custhtml.texi(,79) . 'LANG="' . $T2H_LANG . '" BGCOLOR="#FFFFFF" ' custhtml.texi(,80) . 'TEXT="#000000" LINK="#0000FF" ' custhtml.texi(,81) . 'VLINK="#800080" ALINK="#FF0000"'; custhtml.texi(,82) @end example custhtml.texi(,83) custhtml.texi(,84) If you like to change the basic color combination, you can custhtml.texi(,85) change the entry @var{T2H_BODYTEXT}. custhtml.texi(,86) custhtml.texi(,87) @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= custhtml.texi(,88) @node CustHTMLPreBodyText,CustHTMLAfterBody,CustHTMLBodyText,CustHTML custhtml.texi(,89) @subsection Body Text custhtml.texi(,90) @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= custhtml.texi(,91) @node CustHTMLAfterBody,CustHTMLHead,CustHTMLPreBodyText,CustHTML custhtml.texi(,92) @subsection After Body Text custhtml.texi(,93) custhtml.texi(,94) @vindex T2H_AFTER_BODY_OPEN custhtml.texi(,95) @vindex T2H_PRE_BODY_CLOSE custhtml.texi(,96) custhtml.texi(,97) @vindex T2H_EXTRA_HEAD custhtml.texi(,98) custhtml.texi(,99) @example custhtml.texi(,100) # text inserted after custhtml.texi(,101) $T2H_AFTER_BODY_OPEN = ''; custhtml.texi(,102) custhtml.texi(,103) #text inserted before custhtml.texi(,104) $T2H_PRE_BODY_CLOSE = ''; custhtml.texi(,105) custhtml.texi(,106) # this is used in footer custhtml.texi(,107) $T2H_ADDRESS = "by $T2H_USER " if $T2H_USER; custhtml.texi(,108) $T2H_ADDRESS .= "on $T2H_TODAY"; custhtml.texi(,109) custhtml.texi(,110) # this is added inside after and some META NAME stuff custhtml.texi(,111) # can be used for <style> <script>, <meta> tags custhtml.texi(,112) $T2H_EXTRA_HEAD = ''; custhtml.texi(,113) @end example custhtml.texi(,114) custhtml.texi(,115) The default output into the @acronym{HTML} file. custhtml.texi(,116) @xref{OptionDocType}. custhtml.texi(,117) custhtml.texi(,118) custhtml.texi(,119) The following code is produced by custhtml.texi(,120) @code{T2H_DEFAULT_print_page_head}. custhtml.texi(,121) custhtml.texi(,122) Detailed information can be found at custhtml.texi(,123) @ref{CustPagePageHead}. custhtml.texi(,124) custhtml.texi(,125) @example custhtml-header.htmltexi(,1) <HTML> custhtml-header.htmltexi(,2) $T2H_DOCTYPE custhtml-header.htmltexi(,3) <!-- Created on $T2H_TODAY by $THISPROG --> custhtml-header.htmltexi(,4) <!-- custhtml-header.htmltexi(,5) $T2H_AUTHORS custhtml-header.htmltexi(,6) --> custhtml-header.htmltexi(,7) <HEAD> custhtml-header.htmltexi(,8) <TITLE>$longtitle custhtml-header.htmltexi(,9) custhtml-header.htmltexi(,10) custhtml-header.htmltexi(,11) custhtml-header.htmltexi(,12) custhtml-header.htmltexi(,13) custhtml-header.htmltexi(,14) custhtml-header.htmltexi(,15) $T2H_EXTRA_HEAD custhtml-header.htmltexi(,16) custhtml-header.htmltexi(,17) custhtml-header.htmltexi(,18) custhtml-header.htmltexi(,19) $T2H_AFTER_BODY_OPEN custhtml.texi(,127) @end example custhtml.texi(,128) custhtml.texi(,129) @c -------------------------------------------------------- custhtml.texi(,130) @node CustHTMLHead,,CustHTMLAfterBody,CustHTML custhtml.texi(,131) @section Head texi2html.texi(,405) @c ======================================================== texi2html.texi(,406) @node InitFile, IFOs, CustHTML, Top initfile.texi(,1) @c initfile.texi(,2) @c This file is part of the ``Texinfo to HTML Converter'' manual initfile.texi(,3) @c which is part of the ``texi2html'' distribution. initfile.texi(,4) @c initfile.texi(,5) @c License: initfile.texi(,6) @c Copyright (C) 1999, 2000 Free Software Foundation, Inc. initfile.texi(,7) @c initfile.texi(,8) @c This program is free software; you can redistribute it initfile.texi(,9) @c and/or modify it under the terms of the GNU General Public initfile.texi(,10) @c License as published by the Free Software Foundation; initfile.texi(,11) @c either version 2 of the License, or (at your option) any initfile.texi(,12) @c later version. initfile.texi(,13) @c initfile.texi(,14) @c This program is distributed in the hope that it will be initfile.texi(,15) @c useful, but WITHOUT ANY WARRANTY; without even the implied initfile.texi(,16) @c warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR initfile.texi(,17) @c PURPOSE. See the GNU General Public License for more initfile.texi(,18) @c details. initfile.texi(,19) @c initfile.texi(,20) @c You should have received a copy of the GNU General initfile.texi(,21) @c Public License along with this program; if not, write to initfile.texi(,22) @c the Free Software Foundation, Inc., 59 Temple Place, Suite initfile.texi(,23) @c 330, Boston, MA 02111-1307 USA initfile.texi(,24) @c initfile.texi(,25) @c initfile.texi(,26) @c Revisions: initfile.texi(,27) @c initfile.texi(,28) @c initfile.texi(,29) @c Author: initfile.texi(,30) @c Karl Heinz Marbaise initfile.texi(,31) @c initfile.texi(,32) @c Description: initfile.texi(,33) @c Here you can find the description on the initfile.texi(,34) @c initialization files. initfile.texi(,35) @c initfile.texi(,36) @c ======================================================== initfile.texi(,37) @chapter Initialization file initfile.texi(,38) @c initfile.texi(,39) @cindex configure initfile.texi(,40) @cindex texi2html.init initfile.texi(,41) @cindex texi2htmlrc, global initialization initfile.texi(,42) @cindex .texi2htmlrc, user initialization initfile.texi(,43) @c initfile.texi(,44) @opindex sysconfdir initfile.texi(,45) @opindex init_file initfile.texi(,46) @file{texi2html.init} initfile.texi(,47) initfile.texi(,48) initfile.texi(,49) @menu initfile.texi(,50) * InitFileBasics:: The basics about initfile.texi(,51) initialization files. initfile.texi(,52) * InitFileGlobal:: Global initialization file. initfile.texi(,53) * InitFileUser:: User initialization file. initfile.texi(,54) * InitFileLoad:: Loadable initialization file. initfile.texi(,55) @end menu initfile.texi(,56) initfile.texi(,57) @c -------------------------------------------------------- initfile.texi(,58) @node InitFileBasics,InitFileGlobal,InitFile,InitFile initfile.texi(,59) @section The basics about init files initfile.texi(,60) initfile.texi(,61) Initialization options are read first from initfile.texi(,62) @file{/usr/local/etc/texi2htmlrc} (the exact location being initfile.texi(,63) changeable with the @option{--sysconfdir=dir} option to the initfile.texi(,64) @command{configure} script), then from initfile.texi(,65) @file{$HOME/.texi2htmlrc}, then any command-line options initfile.texi(,66) including @option{-init_file} option; with later settings initfile.texi(,67) overriding earlier ones. initfile.texi(,68) initfile.texi(,69) The default initialization options are defined in the initfile.texi(,70) @file{texi2html.init} file contained in the @b{Texi2html} initfile.texi(,71) distribution (which gets included near the beginning of the initfile.texi(,72) @command{texi2html} script that gets installed). initfile.texi(,73) initfile.texi(,74) To customize @file{texi2html} it is best if you copy the initfile.texi(,75) appropriate sections from the @file{texi2html.init} initfile.texi(,76) contents into an appropriate local initialization file, initfile.texi(,77) make the necessary changes there, and then have initfile.texi(,78) @command{texi2html} read this initialization file by one of initfile.texi(,79) the means described above. initfile.texi(,80) initfile.texi(,81) For an example on what you can produces with initfile.texi(,82) @command{texi2html} have a look at the following sites: initfile.texi(,83) @uref{http://www.singular.uni-kl.de/Manual/html/} initfile.texi(,84) initfile.texi(,85) initfile.texi(,86) @c -------------------------------------------------------- initfile.texi(,87) @node InitFileGlobal,InitFileUser,InitFileBasics,InitFile initfile.texi(,88) @section Global initialization file initfile.texi(,89) @c -------------------------------------------------------- initfile.texi(,90) @node InitFileUser,InitFileLoad,InitFileGlobal,InitFile initfile.texi(,91) @section User initialization file initfile.texi(,92) @c -------------------------------------------------------- initfile.texi(,93) @node InitFileLoad,,InitFileUser,InitFile initfile.texi(,94) @section Loadable initialization file initfile.texi(,95) @opindex init_file initfile.texi(,96) @option{-init_file} initfile.texi(,97) initfile.texi(,98) @c @ref{InitFile} initfile.texi(,99) texi2html.texi(,408) @c -------------------------------------------------------- texi2html.texi(,409) @node IFOs, Options, InitFile, Top ifo.texi(,1) @c ifo.texi(,2) @c This file is part of the ``Texinfo to HTML Converter'' manual ifo.texi(,3) @c which is part of the ``texi2html'' distribution. ifo.texi(,4) @c ifo.texi(,5) @c License: ifo.texi(,6) @c Copyright (C) 1999, 2000 Free Software Foundation, Inc. ifo.texi(,7) @c ifo.texi(,8) @c This program is free software; you can redistribute it ifo.texi(,9) @c and/or modify it under the terms of the GNU General Public ifo.texi(,10) @c License as published by the Free Software Foundation; ifo.texi(,11) @c either version 2 of the License, or (at your option) any ifo.texi(,12) @c later version. ifo.texi(,13) @c ifo.texi(,14) @c This program is distributed in the hope that it will be ifo.texi(,15) @c useful, but WITHOUT ANY WARRANTY; without even the implied ifo.texi(,16) @c warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ifo.texi(,17) @c PURPOSE. See the GNU General Public License for more ifo.texi(,18) @c details. ifo.texi(,19) @c ifo.texi(,20) @c You should have received a copy of the GNU General ifo.texi(,21) @c Public License along with this program; if not, write to ifo.texi(,22) @c the Free Software Foundation, Inc., 59 Temple Place, Suite ifo.texi(,23) @c 330, Boston, MA 02111-1307 USA ifo.texi(,24) @c ifo.texi(,25) @c ifo.texi(,26) @c Revisions: ifo.texi(,27) @c ifo.texi(,28) @c ifo.texi(,29) @c Author: ifo.texi(,30) @c Karl Heinz Marbaise ifo.texi(,31) @c ifo.texi(,32) @c Description: ifo.texi(,33) @c Here you can find the description on the ifo.texi(,34) @c initialization files options. ifo.texi(,35) @c ifo.texi(,36) @c -------------------------------------------------------- ifo.texi(,37) @section Initialization file options ifo.texi(,38) This section describes in detail all options that can be used ifo.texi(,39) only in the initialization file (@file{texi2html.init}), ifo.texi(,40) and cannot be specified on the command line. ifo.texi(,41) This means the only way to change those ifo.texi(,42) options is first to copy the original @file{texi2html.init} ifo.texi(,43) to e.g.@: @file{texi2html.init.myown} and make changes to fit ifo.texi(,44) your needs. ifo.texi(,45) ifo.texi(,46) @menu ifo.texi(,47) * IFOnumber:: Number sectioning. ifo.texi(,48) * IFOmenu:: Avoid menu redundancy. ifo.texi(,49) * IFOCenterImage:: Center Image. ifo.texi(,50) * IFOExampleIndentCell:: Example Indent Cell. ifo.texi(,51) * IFOSampleIndentCell:: Sample Indent Cell. ifo.texi(,52) * IFOSmallFontSize:: Small Font Size. ifo.texi(,53) * IFOTopHeading:: Top Heading. ifo.texi(,54) * IFOIndexChapter:: Index Chapter. ifo.texi(,55) * IFOSplitIndex:: Split Index. ifo.texi(,56) * IFOhrefDirInsteadFile:: HREF Dir Instead file. ifo.texi(,57) @end menu ifo.texi(,58) ifo.texi(,59) @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- ifo.texi(,60) @node IFOnumber, IFOmenu, IFOs, IFOs ifo.texi(,61) @subsection Number sections. ifo.texi(,62) @vindex T2H_NUMBER_SECTIONS ifo.texi(,63) @vindex T2H_NODE_NAME_IN_MENU ifo.texi(,64) if set, and @var{$T2H_NUMBER_SECTIONS} is set, then use node ifo.texi(,65) names in menu entries, instead of section names ifo.texi(,66) ifo.texi(,67) @var{$T2H_NODE_NAME_IN_MENU} = 0; ifo.texi(,68) ifo.texi(,69) @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- ifo.texi(,70) @node IFOmenu, IFOCenterImage, IFOnumber, IFOs ifo.texi(,71) @subsection Avoid menu redundancy ifo.texi(,72) @c not sure if correct? ifo.texi(,73) @cindex menu, redundancy ifo.texi(,74) @vindex T2H_AVOID_MENU_REDUNDANCY ifo.texi(,75) If set, and menu entry equals menu description, then do not print ifo.texi(,76) menu description. Likewise, if node name equals entry name, do ifo.texi(,77) not print entry name. ifo.texi(,78) @var{$T2H_AVOID_MENU_REDUNDANCY} = 1; ifo.texi(,79) ifo.texi(,80) @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- ifo.texi(,81) @node IFOCenterImage, IFOExampleIndentCell, IFOmenu, IFOs ifo.texi(,82) @subsection Center Image ifo.texi(,83) @cindex images, center ifo.texi(,84) @vindex T2H_CENTER_IMAGE ifo.texi(,85) if set, center @@image by default ifo.texi(,86) otherwise, do not center by default ifo.texi(,87) @var{$T2H_CENTER_IMAGE} = 1; ifo.texi(,88) ifo.texi(,89) @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- ifo.texi(,90) @node IFOExampleIndentCell, IFOSampleIndentCell, IFOCenterImage, IFOs ifo.texi(,91) @subsection Example Indent Cell ifo.texi(,92) @cindex example, indentation ifo.texi(,93) @vindex T2H_EXAMPLE_INDENT_CELL ifo.texi(,94) used as indentation for block enclosing command ifo.texi(,95) @code{@@example}, etc If not empty, must be enclosed in ifo.texi(,96) @code{} ifo.texi(,97) @var{$T2H_EXAMPLE_INDENT_CELL} = ' '; ifo.texi(,98) ifo.texi(,99) @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- ifo.texi(,100) @node IFOSampleIndentCell, IFOSmallFontSize, IFOExampleIndentCell, IFOs ifo.texi(,101) @subsection Small Example Indent ifo.texi(,102) @cindex example, small indent ifo.texi(,103) @vindex T2H_SMALL_EXAMPLE_INDENT_CELL ifo.texi(,104) same as above, only for @code{@@small} ifo.texi(,105) $T2H_SMALL_EXAMPLE_INDENT_CELL = " "; ifo.texi(,106) ifo.texi(,107) @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- ifo.texi(,108) @node IFOSmallFontSize, IFOTopHeading, IFOSampleIndentCell, IFOs ifo.texi(,109) @subsection Small Font Size ifo.texi(,110) @cindex Font Size, small ifo.texi(,111) @vindex T2H_SMALL_FONT_SIZE ifo.texi(,112) # font size for @@small ifo.texi(,113) $T2H_SMALL_FONT_SIZE = "-1"; ifo.texi(,114) ifo.texi(,115) @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- ifo.texi(,116) @node IFOTopHeading, IFOIndexChapter, IFOSmallFontSize, IFOs ifo.texi(,117) @subsection Top Heading ifo.texi(,118) @vindex T2H_TOP_HEADING ifo.texi(,119) if non-empty, and no @code{@@..heading} appeared in Top ifo.texi(,120) @c here should be a reference to Texinfo Manual ifo.texi(,121) @c @@heading ?? ifo.texi(,122) node, then use this as header for top node/section, ifo.texi(,123) otherwise use value of @code{@@settitle} or ifo.texi(,124) @code{@@shorttitle} (in that order) ifo.texi(,125) $T2H_TOP_HEADING = ""; ifo.texi(,126) ifo.texi(,127) @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- ifo.texi(,128) @node IFOIndexChapter, IFOSplitIndex, IFOTopHeading, IFOs ifo.texi(,129) @subsection Index Chapter ifo.texi(,130) @cindex Chapter, Index ifo.texi(,131) @vindex T2H_INDEX_CHAPTER ifo.texi(,132) if set, use this chapter for @strong{Index} button, else ifo.texi(,133) use first chapter whose name matches @strong{index} (case insensitive) ifo.texi(,134) $T2H_INDEX_CHAPTER = ""; ifo.texi(,135) ifo.texi(,136) @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- ifo.texi(,137) @node IFOSplitIndex, IFOhrefDirInsteadFile, IFOIndexChapter, IFOs ifo.texi(,138) @subsection Split Index ifo.texi(,139) @cindex Index, split ifo.texi(,140) @vindex T2H_SPLIT_INDEX ifo.texi(,141) if set and @var{$T2H_SPLIT} is set, then split index pages ifo.texi(,142) at the next letter after they have more than that many ifo.texi(,143) entries ifo.texi(,144) ifo.texi(,145) $T2H_SPLIT_INDEX = 100; ifo.texi(,146) ifo.texi(,147) @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- ifo.texi(,148) @node IFOhrefDirInsteadFile, , IFOSplitIndex, IFOs ifo.texi(,149) @subsection HREF Dir Instead File. ifo.texi(,150) @c Not very good? :-/ ifo.texi(,151) @cindex HREF Dir instead file ifo.texi(,152) @vindex T2H_HREF_DIR_INSTEAD_FILE ifo.texi(,153) if set (e.g., to @file{index.html}) replace @strong{HREF}'s ifo.texi(,154) to this file (i.e., to @file{index.html}) by @file{./} ifo.texi(,155) ifo.texi(,156) $T2H_HREF_DIR_INSTEAD_FILE = ""; texi2html.texi(,411) @c ======================================================== texi2html.texi(,412) @c @include extfile.texi obsolete now, is not documented! texi2html.texi(,413) @c ======================================================== texi2html.texi(,414) @node Options, Reference, IFOs, Top options.texi(,1) @c options.texi(,2) @c This file is part of the ``Texinfo to HTML Converter'' manual options.texi(,3) @c which is part of the ``texi2html'' distribution. options.texi(,4) @c options.texi(,5) @c License: options.texi(,6) @c Copyright (C) 1999, 2000 Free Software Foundation, Inc. options.texi(,7) @c options.texi(,8) @c This program is free software; you can redistribute it options.texi(,9) @c and/or modify it under the terms of the GNU General Public options.texi(,10) @c License as published by the Free Software Foundation; options.texi(,11) @c either version 2 of the License, or (at your option) any options.texi(,12) @c later version. options.texi(,13) @c options.texi(,14) @c This program is distributed in the hope that it will be options.texi(,15) @c useful, but WITHOUT ANY WARRANTY; without even the implied options.texi(,16) @c warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR options.texi(,17) @c PURPOSE. See the GNU General Public License for more options.texi(,18) @c details. options.texi(,19) @c options.texi(,20) @c You should have received a copy of the GNU General options.texi(,21) @c Public License along with this program; if not, write to options.texi(,22) @c the Free Software Foundation, Inc., 59 Temple Place, Suite options.texi(,23) @c 330, Boston, MA 02111-1307 USA options.texi(,24) @c options.texi(,25) @c options.texi(,26) @c Revisions: options.texi(,27) @c options.texi(,28) @c options.texi(,29) @c Author: options.texi(,30) @c Karl Heinz Marbaise options.texi(,31) @c options.texi(,32) @c Description: options.texi(,33) @c Here you can find the description on the options.texi(,34) @c command line options. options.texi(,35) @c options.texi(,36) @c ======================================================== options.texi(,37) @chapter Command Line Options options.texi(,38) options.texi(,39) @menu options.texi(,40) * OptionDebug:: Debugging. options.texi(,41) * OptionDocType:: DocType (HTML) options.texi(,42) * OptionCheck:: Checking files. options.texi(,43) * OptionExpand:: Expanding info, tex areas etc. options.texi(,44) * OptionGlossary:: Glossary. options.texi(,45) * OptionInvisible:: Invisible. options.texi(,46) * OptionIso:: Iso. options.texi(,47) * OptionInclude:: Include directories. options.texi(,48) * OptionTopFile:: Top File. options.texi(,49) * OptionTocFile:: Table of content File. options.texi(,50) * OptionFrames:: Frames. options.texi(,51) * OptionMenu:: Menus. options.texi(,52) * OptionNumber:: Number sections. options.texi(,53) * OptionSplit:: Splitting. options.texi(,54) * OptionSectionNavigation:: Navigation. options.texi(,55) * OptionSubDir:: Subdirectory. options.texi(,56) * OptionShortExt:: Short extension. options.texi(,57) * OptionPrefix:: Prefix. options.texi(,58) * OptionOutput:: Output. options.texi(,59) * OptionShortRef:: Short Ref. options.texi(,60) * OptionIndexSummary:: Index Summary. options.texi(,61) * OptionVerbose:: Verbose. options.texi(,62) * OptionLanguage:: Language. options.texi(,63) * OptionL2H:: La@TeX{}2HTML. options.texi(,64) @end menu options.texi(,65) options.texi(,66) options.texi(,67) @c -------------------------------------------------------- options.texi(,68) @node OptionDebug, OptionDocType, Options, Options options.texi(,69) @section Debugging options.texi(,70) @cindex Debugging options.texi(,71) @vindex DEBUG_TOC options.texi(,72) @vindex DEBUG_INDEX options.texi(,73) @vindex DEBUG_BIB options.texi(,74) @vindex DEBUG_GLOSS options.texi(,75) @vindex DEBUG_DEF options.texi(,76) @vindex DEBUG_HTML options.texi(,77) @vindex DEBUG_USER options.texi(,78) @vindex DEBUG_L2H options.texi(,79) @opindex debug options.texi(,80) options.texi(,81) @option{-debug} options.texi(,82) options.texi(,83) debugging: 0 --- no debugging; other values; see beginning options.texi(,84) of texi2html options.texi(,85) options.texi(,86) @var{$DEBUG_TOC} = 1; options.texi(,87) @var{$DEBUG_INDEX} = 2; options.texi(,88) @var{$DEBUG_BIB} = 4; options.texi(,89) @var{$DEBUG_GLOSS} = 8; options.texi(,90) @var{$DEBUG_DEF} = 16; options.texi(,91) @var{$DEBUG_HTML} = 32; options.texi(,92) @var{$DEBUG_USER} = 64; options.texi(,93) @var{$DEBUG_L2H} = 128; options.texi(,94) options.texi(,95) @c -------------------------------------------------------- options.texi(,96) @node OptionDocType, OptionCheck, OptionDebug, Options options.texi(,97) @section DocType options.texi(,98) @cindex HTML, Doc Type options.texi(,99) @opindex doctype options.texi(,100) @vindex T2H_DOCTYPE options.texi(,101) @option{-doctype} options.texi(,102) options.texi(,103) @example options.texi(,104) options.texi(,105) @end example options.texi(,106) options.texi(,107) @c -------------------------------------------------------- options.texi(,108) @node OptionCheck, OptionExpand, OptionDocType, Options options.texi(,109) @section Check options.texi(,110) @cindex Texinfo, checking options.texi(,111) @opindex check options.texi(,112) @vindex T2H_CHECK options.texi(,113) @option{-check} options.texi(,114) if set, only check files and give the list of all things options.texi(,115) that look like untranslated Texinfo commands options.texi(,116) options.texi(,117) @c -------------------------------------------------------- options.texi(,118) @node OptionExpand, OptionGlossary, OptionCheck, Options options.texi(,119) @section Expand options.texi(,120) @opindex expand options.texi(,121) @vindex T2H_EXPAND options.texi(,122) @option{-expand} options.texi(,123) if set to @strong{tex} (or, @strong{info}) expand options.texi(,124) @code{@@iftex} and @code{@@tex} (or, @code{@@ifinfo}) options.texi(,125) sections else, neither expand @code{@@iftex}, @code{@@tex}, options.texi(,126) nor @code{@@ifinfo} sections options.texi(,127) options.texi(,128) @c $T2H_EXPAND = "info"; options.texi(,129) options.texi(,130) @c -------------------------------------------------------- options.texi(,131) @node OptionGlossary, OptionInvisible, OptionExpand, Options options.texi(,132) @section Glossary options.texi(,133) @cindex HTML, Glossary options.texi(,134) @cindex Texinfo, Glossary options.texi(,135) @opindex glossary options.texi(,136) @vindex T2H_USE_GLOSSARY options.texi(,137) @option{-glossary} options.texi(,138) if set, uses section named @strong{Footnotes} for glossary options.texi(,139) options.texi(,140) @c -------------------------------------------------------- options.texi(,141) @node OptionInvisible, OptionIso, OptionGlossary, Options options.texi(,142) @section Invisible options.texi(,143) @cindex Mark, invisible options.texi(,144) @cindex invisible, Mark options.texi(,145) @opindex invisible options.texi(,146) @vindex T2H_INVISIBLE_MARK options.texi(,147) @option{-invisible} options.texi(,148) @var{$T2H_INVISIBLE_MARK} is the text used to create options.texi(,149) invisible destination anchors for index links (you can for options.texi(,150) instance use the @file{invisible.xbm} file shipped with options.texi(,151) this program). This is a workaround for a known bug of many options.texi(,152) @acronym{WWW} browsers, including Netscape. For me, it options.texi(,153) works fine without it --- on the contrary: if there, it options.texi(,154) inserts space between headers and start of text (obachman options.texi(,155) 3/99) options.texi(,156) options.texi(,157) @example options.texi(,158) $T2H_INVISIBLE_MARK = ""; options.texi(,159) # $T2H_INVISIBLE_MARK = ' '; options.texi(,160) @end example options.texi(,161) options.texi(,162) @c -------------------------------------------------------- options.texi(,163) @node OptionIso, OptionInclude, OptionInvisible, Options options.texi(,164) @section Iso options.texi(,165) @cindex ISO8859 options.texi(,166) @cindex Copyright options.texi(,167) @opindex iso options.texi(,168) @vindex T2H_USE_ISO options.texi(,169) @option{-iso} options.texi(,170) options.texi(,171) if set, ISO8859 characters are used for special symbols options.texi(,172) (like Copyright @code{@copyright{}}, etc) options.texi(,173) options.texi(,174) $T2H_USE_ISO = 0; options.texi(,175) options.texi(,176) @c -------------------------------------------------------- options.texi(,177) @node OptionInclude, OptionTopFile, OptionIso, Options options.texi(,178) @section Include Directory options.texi(,179) @vindex Include directories options.texi(,180) @opindex I options.texi(,181) @vindex T2H_INCLUDE_DIRS options.texi(,182) @option{-I} options.texi(,183) options.texi(,184) list directories where @code{@@include} files are searched for options.texi(,185) (besides the directory of the doc file) additional options.texi(,186) @option{-I} args are add to this list. options.texi(,187) options.texi(,188) @@T2H_INCLUDE_DIRS = ("."); options.texi(,189) options.texi(,190) @c -------------------------------------------------------- options.texi(,191) @node OptionTopFile, OptionTocFile, OptionInclude, Options options.texi(,192) @section Top File options.texi(,193) @cindex Top Level file options.texi(,194) @cindex HTML, index.html options.texi(,195) @opindex top_file options.texi(,196) @vindex T2H_TOP_FILE options.texi(,197) @option{-top_file} options.texi(,198) uses file of this name for top-level file options.texi(,199) extension is manipulated appropriately, if necessary. options.texi(,200) If empty, @file{.html} is used. options.texi(,201) Typically, you would set this to @file{index.html}. options.texi(,202) options.texi(,203) $T2H_TOP_FILE = ""; options.texi(,204) options.texi(,205) @c -------------------------------------------------------- options.texi(,206) @node OptionTocFile, OptionFrames, OptionTopFile, Options options.texi(,207) @section Table Of content File options.texi(,208) @cindex Table of content file options.texi(,209) @opindex toc_file options.texi(,210) @vindex T2H_TOC_FILE options.texi(,211) @option{-toc_file} options.texi(,212) uses file of this name for table of contents. File extension options.texi(,213) is manipulated appropriately, if necessary. If empty, options.texi(,214) @file{_toc.html} is used. options.texi(,215) options.texi(,216) $T2H_TOC_FILE = ""; options.texi(,217) options.texi(,218) @c -------------------------------------------------------- options.texi(,219) @node OptionFrames, OptionMenu, OptionTocFile, Options options.texi(,220) @section Frames options.texi(,221) @vindex HTML, frames options.texi(,222) @vindex HTML 4.0, frames options.texi(,223) @opindex frames options.texi(,224) @vindex T2H_FRAMES options.texi(,225) @option{-frames} options.texi(,226) if set, output two additional files which use HTML 4.0 options.texi(,227) @b{frames}. options.texi(,228) options.texi(,229) $T2H_FRAMES = 0; options.texi(,230) options.texi(,231) @c -------------------------------------------------------- options.texi(,232) @node OptionMenu, OptionNumber, OptionFrames, Options options.texi(,233) @section Menus options.texi(,234) @cindex HTML, menu options.texi(,235) @cindex Texinfo, menu options.texi(,236) @opindex menu options.texi(,237) @opindex nomenu options.texi(,238) @vindex T2H_SHOW_MENU options.texi(,239) @option{-menu} or @option{-nomenu} if set, show the Texinfo options.texi(,240) menus options.texi(,241) options.texi(,242) $T2H_SHOW_MENU = 1; options.texi(,243) options.texi(,244) @c -------------------------------------------------------- options.texi(,245) @node OptionNumber, OptionSplit, OptionMenu, Options options.texi(,246) @section Number sections options.texi(,247) @cindex Section numbering options.texi(,248) @opindex number options.texi(,249) @opindex nonumber options.texi(,250) @vindex T2H_NUMBER_SECTIONS options.texi(,251) @option{-number} @option{-nonumber} options.texi(,252) if set, number sections and show section names and numbers options.texi(,253) in references and menus options.texi(,254) options.texi(,255) @c Just think about it? options.texi(,256) @c @defvar $T2H_NUMBER_SECTIONS options.texi(,257) @c @c = 1; options.texi(,258) @c @end defvar options.texi(,259) options.texi(,260) @c -------------------------------------------------------- options.texi(,261) @node OptionSplit, OptionSectionNavigation, OptionNumber, Options options.texi(,262) @section Split options.texi(,263) @cindex HTML, split options.texi(,264) @cindex File, split options.texi(,265) @opindex split options.texi(,266) @vindex T2H_SPLIT options.texi(,267) @option{-split section|chapter|none} options.texi(,268) if set to @strong{section} (resp. @strong{chapter}) create one options.texi(,269) @acronym{HTML} file per (sub)section (resp. chapter) and options.texi(,270) separate pages for Top, ToC, Overview, Index, Glossary, options.texi(,271) About. Otherwise, create a monolithic @acronym{HTML} file that options.texi(,272) contains the whole document. options.texi(,273) options.texi(,274) #$T2H_SPLIT = 'section'; options.texi(,275) $T2H_SPLIT = undef; options.texi(,276) options.texi(,277) @c -------------------------------------------------------- options.texi(,278) @node OptionSectionNavigation, OptionSubDir, OptionSplit, Options options.texi(,279) @section Section navigation options.texi(,280) @cindex HTML, Navigation options.texi(,281) @opindex section_navigation options.texi(,282) @opindex no-section_navigation options.texi(,283) @vindex T2H_SECTION_NAVIGATION options.texi(,284) @option{-section_navigation}| options.texi(,285) @option{-no-section_navigation} options.texi(,286) options.texi(,287) if set, then navigation panels are printed at the beginning options.texi(,288) of each section and, possibly at the end (depending on options.texi(,289) whether or not there were more than options.texi(,290) @var{$T2H_WORDS_IN_PAGE} words on page). This is most useful options.texi(,291) if you do not want to have section navigation on options.texi(,292) @option{-split chapter} options.texi(,293) options.texi(,294) @c @vindex T2H_SECTION_NAVIGATION options.texi(,295) @c @defvar $T2H_SECTION_NAVIGATION options.texi(,296) @c = 1; options.texi(,297) @c @end defvar options.texi(,298) options.texi(,299) @c -------------------------------------------------------- options.texi(,300) @node OptionSubDir, OptionShortExt, OptionSectionNavigation, Options options.texi(,301) @section Subdirectory options.texi(,302) @cindex Subdirectory options.texi(,303) @vindex T2H_SUBDIR options.texi(,304) @option{-subdir} options.texi(,305) If set, then put result files in the specified directory. options.texi(,306) If not set, then result files are put into the current directory. options.texi(,307) options.texi(,308) @c #$T2H_SUBDIR = 'html'; options.texi(,309) @var{$T2H_SUBDIR} = undef; options.texi(,310) options.texi(,311) @c -------------------------------------------------------- options.texi(,312) @node OptionShortExt, OptionPrefix, OptionSubDir, Options options.texi(,313) @section Short extension options.texi(,314) @cindex HTML, .htm extension options.texi(,315) @cindex HTML, .html extension options.texi(,316) @cindex extension, .html options.texi(,317) @cindex extension, .htm options.texi(,318) @vindex T2H_SHORTEXTN options.texi(,319) @opindex short_extn options.texi(,320) @option{-short_extn} options.texi(,321) If this is set, then all @acronym{HTML} files will have extension options.texi(,322) @file{.htm} instead of @file{.html}. This is helpful when options.texi(,323) shipping the document to DOS-based systems. options.texi(,324) @var{$T2H_SHORTEXTN} = 0; options.texi(,325) options.texi(,326) @c -------------------------------------------------------- options.texi(,327) @node OptionPrefix, OptionOutput, OptionShortExt, Options options.texi(,328) @section Prefix options.texi(,329) @cindex Prefix options.texi(,330) @vindex T2H_PREFIX options.texi(,331) @opindex prefix options.texi(,332) @option{-prefix} options.texi(,333) Set the output file prefix, prepended to all @file{.html}, options.texi(,334) @file{.gif} and @file{.pl} files. options.texi(,335) By default, this is the basename of the document options.texi(,336) options.texi(,337) @var{$T2H_PREFIX} = ""; options.texi(,338) options.texi(,339) @c -------------------------------------------------------- options.texi(,340) @node OptionOutput, OptionShortRef, OptionPrefix, Options options.texi(,341) @section Output filename options.texi(,342) @cindex Output filename options.texi(,343) @cindex Filename, output options.texi(,344) @vindex T2H_OUT options.texi(,345) @opindex o options.texi(,346) @opindex out_file options.texi(,347) options.texi(,348) @option{-o filename}|@option{-out_file} options.texi(,349) If set, generate monolithic document output @acronym{HTML} options.texi(,350) into @file{filename}. options.texi(,351) options.texi(,352) @c -------------------------------------------------------- options.texi(,353) @node OptionShortRef, OptionIndexSummary, OptionOutput, Options options.texi(,354) @section Short Cross References options.texi(,355) @cindex References, short options.texi(,356) @cindex sections without numbers options.texi(,357) @vindex T2H_SHORT_REF options.texi(,358) @opindex short_ref options.texi(,359) @option{-short_ref} options.texi(,360) if set cross-references are given without section numbers options.texi(,361) options.texi(,362) @c -------------------------------------------------------- options.texi(,363) @node OptionIndexSummary, OptionVerbose, OptionShortRef, Options options.texi(,364) @section Index Summary options.texi(,365) @cindex Index, Summary options.texi(,366) @cindex Summary Index options.texi(,367) @cindex HTML, Index options.texi(,368) @vindex T2H_IDX_SUMMARY options.texi(,369) @opindex idx_sum options.texi(,370) @option{-idx_sum} options.texi(,371) If value is set, then for each @code{@@prinindex $what} options.texi(,372) @file{$docu_name_$what.idx} is created which contains lines of the options.texi(,373) form @strong{$key\t$ref} sorted alphabetically (case options.texi(,374) matters). options.texi(,375) options.texi(,376) @c -------------------------------------------------------- options.texi(,377) @node OptionVerbose, OptionLanguage, OptionIndexSummary, Options options.texi(,378) @section Verbose output options.texi(,379) @cindex Output, verbose options.texi(,380) @cindex Verbose output options.texi(,381) @cindex Debugging, verbose output options.texi(,382) @vindex T2H_VERBOSE options.texi(,383) @opindex verbose options.texi(,384) @option{-verbose} options.texi(,385) if set, chatter about what we are doing. options.texi(,386) options.texi(,387) @c -------------------------------------------------------- options.texi(,388) @node OptionLanguage, OptionL2H, OptionVerbose, Options options.texi(,389) @section Language Support options.texi(,390) @cindex Language Support options.texi(,391) @cindex Support different languages options.texi(,392) @vindex $T2H_LANG options.texi(,393) @vindex $T2H_WORDS options.texi(,394) @opindex lang options.texi(,395) @option{-lang} options.texi(,396) For page titles, use options.texi(,397) @code{$T2H_WORDS->@{$T2H_LANG@}->@{...@}} as title. To add options.texi(,398) a new language, supply list of titles (see @var{$T2H_WORDS}), options.texi(,399) and use ISO 639 language codes (see e.g.@: perl module options.texi(,400) @file{Locale-Codes-1.02.tar.gz} for definitions). options.texi(,401) options.texi(,402) If you don't give a @option{-lang} then we got it from the options.texi(,403) Texinfo source file (@@documentlanguage options.texi(,404) @c Put a table with the language codes here! options.texi(,405) @c Or better put a reference into the Texinfo options.texi(,406) @c Manual, which has a table of ISO 639-Codes. options.texi(,407) @c options.texi(,408) @c Currently the @xref etc. does not work with options.texi(,409) @c external documents, cause we don't know options.texi(,410) @c reference (anchor) value or there is no way options.texi(,411) @c to get it. options.texi(,412) @c The following reference does only work correctly options.texi(,413) @c in Info!!! options.texi(,414) @pxref{documentlanguage,,,Texinfo}). If there is no options.texi(,415) @code{@@documentlanguage} we use the default @code{en} for options.texi(,416) the language. options.texi(,417) @c options.texi(,418) @c put some information about Month names etc. here options.texi(,419) @c $MONTH_NAMES !! options.texi(,420) @c Supplemental should be a naming scheme for variables in options.texi(,421) @c different languages (MONTH_NAMES_DE etc.) options.texi(,422) @c -------------------------------------------------------- options.texi(,423) @node OptionL2H, , OptionLanguage, Options options.texi(,424) @section La@TeX{}2HTML for @code{@@math} and @code{@@tex} options.texi(,425) @cindex La@TeX{}2HTML options.texi(,426) @cindex Conversion of @@math and @@tex options.texi(,427) @cindex @@tex options.texi(,428) @cindex @@math options.texi(,429) @vindex T2H_L2H options.texi(,430) @opindex l2h options.texi(,431) @option{-l2h} options.texi(,432) if set, uses @command{latex2html} for generation of math options.texi(,433) content. options.texi(,434) options.texi(,435) @menu options.texi(,436) * OptionL2HL2H:: Where to find La@TeX{}2HTML. options.texi(,437) * OptionL2HSkip:: Skip calling La@TeX{}2HTML. options.texi(,438) * OptionL2Htmp:: Temporary files for La@TeX{}2HTML. options.texi(,439) @end menu options.texi(,440) options.texi(,441) @c -------------------------------------------------------- options.texi(,442) @node OptionL2HL2H, OptionL2HSkip, OptionL2H, OptionL2H options.texi(,443) @subsection Where to find @command{latex2html} options.texi(,444) @cindex location, La@TeX{}2HTML options.texi(,445) @cindex La@TeX{}2HTML, location options.texi(,446) @vindex T2H_L2H_L2H options.texi(,447) @opindex l2h_l2h options.texi(,448) @option{-l2h_l2h} options.texi(,449) name/location of @command{latex2html} program. options.texi(,450) options.texi(,451) @c -------------------------------------------------------- options.texi(,452) @node OptionL2HSkip, OptionL2Htmp, OptionL2HL2H, OptionL2H options.texi(,453) @subsection Skip calling La@TeX{}2HTML options.texi(,454) @cindex La@TeX{}2HTML, skip calling options.texi(,455) @vindex T2H_L2H_SKIP options.texi(,456) @opindex l2h_skip options.texi(,457) @option{-l2h_skip} options.texi(,458) If set, skips actual call to @command{latex2html}: tries to options.texi(,459) reuse previously generated content, instead. options.texi(,460) options.texi(,461) @c -------------------------------------------------------- options.texi(,462) @node OptionL2Htmp, , OptionL2HSkip, OptionL2H options.texi(,463) @subsection Temporary files for La@TeX{}2HTML options.texi(,464) @cindex Temporary, La@TeX{}2HTML options.texi(,465) @cindex La@TeX{}2HTML, Temporary files options.texi(,466) @vindex T2H_L2H_TMP options.texi(,467) @opindex l2h_tmp options.texi(,468) @option{-l2h_tmp} options.texi(,469) If set, l2h uses this directory for temporary files. The options.texi(,470) path leading to this directory may not contain a dot (i.e., options.texi(,471) a @samp{.}); otherwise, l2h will fail. texi2html.texi(,416) @c ======================================================== texi2html.texi(,417) @node Reference, Indexop, Options, Top reference.texi(,1) @c reference.texi(,2) @c This file is part of the ``Texinfo to HTML Converter'' manual reference.texi(,3) @c which is part of the ``texi2html'' distribution. reference.texi(,4) @c reference.texi(,5) @c License: reference.texi(,6) @c Copyright (C) 1999, 2000 Free Software Foundation, Inc. reference.texi(,7) @c reference.texi(,8) @c This program is free software; you can redistribute it reference.texi(,9) @c and/or modify it under the terms of the GNU General Public reference.texi(,10) @c License as published by the Free Software Foundation; reference.texi(,11) @c either version 2 of the License, or (at your option) any reference.texi(,12) @c later version. reference.texi(,13) @c reference.texi(,14) @c This program is distributed in the hope that it will be reference.texi(,15) @c useful, but WITHOUT ANY WARRANTY; without even the implied reference.texi(,16) @c warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR reference.texi(,17) @c PURPOSE. See the GNU General Public License for more reference.texi(,18) @c details. reference.texi(,19) @c reference.texi(,20) @c You should have received a copy of the GNU General reference.texi(,21) @c Public License along with this program; if not, write to reference.texi(,22) @c the Free Software Foundation, Inc., 59 Temple Place, Suite reference.texi(,23) @c 330, Boston, MA 02111-1307 USA reference.texi(,24) @c reference.texi(,25) @c reference.texi(,26) @c Revisions: reference.texi(,27) @c reference.texi(,28) @c reference.texi(,29) @c Author: reference.texi(,30) @c Karl Heinz Marbaise reference.texi(,31) @c reference.texi(,32) @c Description: reference.texi(,33) @c Here you can find the description on all reference.texi(,34) @c subs in the original Perl file. reference.texi(,35) @c reference.texi(,36) @c ======================================================== reference.texi(,37) @appendix Function Reference reference.texi(,38) reference.texi(,39) @menu reference.texi(,40) * Refptocframe:: Print ToC Frame. reference.texi(,41) * Refpphead:: Print page head. reference.texi(,42) @end menu reference.texi(,43) reference.texi(,44) @c Global variables: reference.texi(,45) @c T2H_USER which is created throught main part reference.texi(,46) @c (texi2html.pl) reference.texi(,47) @c You can use it. (On Windows? On Unix ?) reference.texi(,48) @c -------------------------------------------------------- reference.texi(,49) @node Refptocframe,Refpphead,,Reference reference.texi(,50) @appendixsec Print ToC Frame reference.texi(,51) reference.texi(,52) reference.texi(,53) @defun T2H_DEFAULT_print_toc_frame (FileName) reference.texi(,54) @sp 1 reference.texi(,55) Description of the subroutine. reference.texi(,56) What does it do? Which parameters it needs etc. reference.texi(,57) @end defun reference.texi(,58) reference.texi(,59) reference.texi(,60) @c -------------------------------------------------------- reference.texi(,61) @node Refpphead,,Refptocframe,Reference reference.texi(,62) @appendixsec Print Page Head reference.texi(,63) @defun T2H_DEFAULT_print_page_head (FileName) reference.texi(,64) @sp 1 reference.texi(,65) Description of the subroutine. reference.texi(,66) What does it do? Which parameters it needs etc. reference.texi(,67) @end defun texi2html.texi(,419) @c ======================================================== texi2html.texi(,420) @c commandline option index. texi2html.texi(,421) @node Indexop, Indexvr, Reference, Top texi2html.texi(,422) @appendix Indices texi2html.texi(,423) @appendixsec Command Line Option Index texi2html.texi(,424) @printindex op texi2html.texi(,425) @c -------------------------------------------------------- texi2html.texi(,426) @node Indexvr, Indexcp, Indexop, Top texi2html.texi(,427) @appendixsec Variable Index texi2html.texi(,428) @printindex vr texi2html.texi(,429) @c -------------------------------------------------------- texi2html.texi(,430) @node Indexcp, , Indexvr, Top texi2html.texi(,431) @appendixsec Concept Index texi2html.texi(,432) @printindex cp texi2html.texi(,433) @c printindex init file options dito. texi2html.texi(,434) @c concept index. texi2html.texi(,435) @bye texi2html-1.82/test/texi2html_manual/res/texi_texi2html/texi2html.passfirst0000644000175000017500000020754011264347116031123 0ustar flichtenheldflichtenheldtexi2html.texi(,2) @c texi2html.texi(,3) @c This is the ``Texinfo to HTML Converter'' manual which texi2html.texi(,4) @c which is part of the ``texi2html'' distribution. texi2html.texi(,5) @c texi2html.texi(,6) @c License: texi2html.texi(,7) @c Copyright (C) 1999, 2000 Free Software Foundation, Inc. texi2html.texi(,8) @c texi2html.texi(,9) @c This program is free software; you can redistribute it texi2html.texi(,10) @c and/or modify it under the terms of the GNU General Public texi2html.texi(,11) @c License as published by the Free Software Foundation; texi2html.texi(,12) @c either version 2 of the License, or (at your option) any texi2html.texi(,13) @c later version. texi2html.texi(,14) @c texi2html.texi(,15) @c This program is distributed in the hope that it will be texi2html.texi(,16) @c useful, but WITHOUT ANY WARRANTY; without even the implied texi2html.texi(,17) @c warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR texi2html.texi(,18) @c PURPOSE. See the GNU General Public License for more texi2html.texi(,19) @c details. texi2html.texi(,20) @c texi2html.texi(,21) @c You should have received a copy of the GNU General texi2html.texi(,22) @c Public License along with this program; if not, write to texi2html.texi(,23) @c the Free Software Foundation, Inc., 59 Temple Place, Suite texi2html.texi(,24) @c 330, Boston, MA 02111-1307 USA texi2html.texi(,25) @c texi2html.texi(,26) @c texi2html.texi(,27) @c Revisions: texi2html.texi(,28) @c texi2html.texi(,29) @c texi2html.texi(,30) @c Author: texi2html.texi(,31) @c Karl Heinz Marbaise texi2html.texi(,32) @c texi2html.texi(,33) @c -------------------------------------------------------- texi2html.texi(,34) @c texi2html.texi(,35) @c Currently most of the material is copied out of texi2html.texi(,36) @c texi2html.init file. It's just a start point. texi2html.texi(,37) @c In other words this is a draft manual ;-) texi2html.texi(,38) @c texi2html.texi(,39) @setfilename texi2html.info texi2html.texi(,40) @c -------------------------------------------------------- texi2html.texi(,41) @c Edition and last update date of the manual which might texi2html.texi(,42) @c differ to the scripts last update date etc. texi2html.texi(,43) @set MANUAL_UPD 14. August 2000 texi2html.texi(,44) @set MANUAL_ED 0.21 texi2html.texi(,45) @c texi2html.texi(,46) @set MANUAL_AUTHOR Karl Heinz Marbaise texi2html.texi(,47) @set MANUAL_AUTHOR_EMAIL khmarbaise@@gmx.de texi2html.texi(,48) @c texi2html.texi(,49) @c Get the version of the script itself through texi2html.texi(,50) @c configure/autoconf etc. texi2html.texi(,51) @c version.texi is automatically generated through texi2html.texi(,52) @c configure/autoconf. version.texi(,1) @set UPDATED 15 September 2001 version.texi(,2) @set UPDATED-MONTH September 2001 version.texi(,3) @set EDITION 1.67 version.texi(,4) @set VERSION 1.67 texi2html.texi(,54) @c -------------------------------------------------------- texi2html.texi(,55) @c Index for command line options texi2html.texi(,56) @defcodeindex op texi2html.texi(,57) @c -------------------------------------------------------- texi2html.texi(,58) @settitle Texinfo to HTML texi2html.texi(,59) @c @setchapternewpage on texi2html.texi(,60) @setchapternewpage odd texi2html.texi(,61) @footnotestyle separate texi2html.texi(,65) @c -------------------------------------------------------- texi2html.texi(,66) @c support old style Info Dir entries. texi2html.texi(,76) @c -------------------------------------------------------- texi2html.texi(,77) @c Informations for install-info. texi2html.texi(,78) @c I think the conversion script should be found texi2html.texi(,79) @c where the documentation system lives. texi2html.texi(,80) @c What do you think? texi2html.texi(,81) @dircategory Texinfo documentation system texi2html.texi(,85) @c -------------------------------------------------------- texi2html.texi(,119) @c -------------------------------------------------------- texi2html.texi(,156) @c ======================================================== texi2html.texi(,157) @summarycontents texi2html.texi(,158) @contents texi2html.texi(,159) @c texi2html.texi(,161) @node Top, Overview, (dir), (dir) texi2html.texi(,162) @top Texi2html texi2html.texi(,163) @c @page texi2html.texi(,164) @c ======================================================== texi2html.texi(,165) @c @node Top, Overview, (dir), (dir) texi2html.texi(,166) @c @top texi2html.texi(,167) @c @chapter About texi2html.texi(,168) texi2html.texi(,169) This Manual (Edition 0.21, last updated at texi2html.texi(,170) 14. August 2000) describes the @command{texi2html} Perl texi2html.texi(,171) script which converters texi2html.texi(,172) @c The following construct allows me to get texi2html.texi(,173) @c real URL link in HTML and working refs in texi2html.texi(,174) @c info. texi2html.texi(,176) @uref{http://www.texinfo.org,Texinfo} texi2html.texi(,181) into @acronym{HTML}. texi2html.texi(,182) texi2html.texi(,183) @c @inforef{Top, Top, Texinfo} does not work yet ;-) texi2html.texi(,184) @c here we should paste a @inforef or @xref on the texi2html.texi(,185) @c Texinfo manual. texi2html.texi(,186) texi2html.texi(,187) Please send bug reports about this manual to Karl Heinz texi2html.texi(,188) Marbaise @email{khmarbaise@@gmx.de}. Please state exact texi2html.texi(,189) version/edition of the manual (can be found at start of texi2html.texi(,190) Texinfo source file; use the entry Id under Revisions). texi2html.texi(,191) texi2html.texi(,192) Please note: texi2html.texi(,193) @example texi2html.texi(,194) This manual is currently under texi2html.texi(,195) construction and of course incomplete ;-) texi2html.texi(,196) @end example texi2html.texi(,197) texi2html.texi(,198) @c The following line within a menu does not work! texi2html.texi(,199) @c * Why texi2html and not Makeinfo?:whytexi2html. Why texi2html and not makeinfo?. texi2html.texi(,289) @c ======================================================== texi2html.texi(,290) @node Overview, HowToGetHTML, Top, Top texi2html.texi(,291) @chapter Overview about @command{texi2html} texi2html.texi(,292) @uref{http://www.texinfo.org,Texinfo} is the official texi2html.texi(,293) documentation format of the @uref{http://www.gnu.org,GNU} texi2html.texi(,294) project. It uses a single source file to produce both texi2html.texi(,295) online information and printed output. texi2html.texi(,296) texi2html.texi(,297) @c much thinking about ... texi2html.texi(,298) It is often proposed to have a way to produce texi2html.texi(,299) @acronym{HTML} from Texinfo sources, like the GNU-Info texi2html.texi(,300) format. It is much simpler to create one converter instead texi2html.texi(,301) of writing all documentation new in @acronym{HTML}, cause texi2html.texi(,302) there is so much documentation in Texinfo all over texi2html.texi(,303) the world. texi2html.texi(,304) texi2html.texi(,305) A few time ago @command{makeinfo} wasn't able to produce texi2html.texi(,306) @acronym{HTML} output format, but there are needth to have texi2html.texi(,307) @acronym{HTML}. This was the borning hour for texi2html.texi(,308) @command{texi2html}. The basic purpose of @file{texi2html} texi2html.texi(,309) is to convert Texinfo documents into HTML. texi2html.texi(,310) texi2html.texi(,311) texi2html.texi(,312) @menu texi2html.texi(,313) * HowToGetHTML:: Ways to get HTML files. texi2html.texi(,314) * whytexi2html:: Why texi2html and not makeinfo?. texi2html.texi(,315) @end menu texi2html.texi(,316) @c -------------------------------------------------------- texi2html.texi(,317) @node HowToGetHTML, whytexi2html, Overview, Overview texi2html.texi(,318) @section Ways to get HTML texi2html.texi(,319) You would like to @acronym{HTML} files out of your Texinfo texi2html.texi(,320) files? There exist two ways which you can go. texi2html.texi(,321) This first is to use @command{makeinfo} itself to produce texi2html.texi(,322) @acronym{HTML} output. The second is to use texi2html.texi(,323) @command{texi2html}. texi2html.texi(,324) texi2html.texi(,325) @c -------------------------------------------------------- texi2html.texi(,326) @node whytexi2html, Installation, HowToGetHTML, Overview texi2html.texi(,327) @section Why @file{texi2html} and not @file{makeinfo}? texi2html.texi(,328) The basic idea of @command{makeinfo}'s @acronym{HTML} texi2html.texi(,329) output was to get an readable @acronym{HTML} output. texi2html.texi(,330) Nothing sophisticated nor good styling just readable. texi2html.texi(,331) texi2html.texi(,332) The current development of texi2html is going into texi2html.texi(,333) different direction. texi2html.texi(,334) texi2html.texi(,335) The main purpose is to get better styling, better design texi2html.texi(,336) etc. of the created @acronym{HTML} pages. This way is texi2html.texi(,337) supported using differnt command line options and of course texi2html.texi(,338) possible changings of the initialization file to fit your texi2html.texi(,339) own needs. texi2html.texi(,340) texi2html.texi(,341) The main disadvantage of @acronym{makeinfo}'s texi2html.texi(,342) @acronym{HTML} output is your getting only one big file. texi2html.texi(,343) This is of course readable but not very usable. The problem texi2html.texi(,344) of this is, while you like to have splitted chapters or texi2html.texi(,345) nodes the Texinfo source has to be read at minimum twice texi2html.texi(,346) times. This makes it impossible to implement this in texi2html.texi(,347) @command{makeinfo}. This would result in complete new texi2html.texi(,348) implementation of @command{makeinfo}'s source. texi2html.texi(,349) texi2html.texi(,350) @c think more about this???? texi2html.texi(,351) In contrast to the HTML produced by @command{makeinfo texi2html.texi(,352) --html} (the @command{makeinfo} program is part of the texi2html.texi(,353) Texinfo distribution), the HTML output of @file{texi2html} texi2html.texi(,354) is highly configurable. Among other differences, with texi2html.texi(,355) @command{texi2html} allows you to customize your entire texi2html.texi(,356) page layout (like headers, footers, style sheets, etc), texi2html.texi(,357) split documents at various levels, and use texi2html.texi(,358) @command{latex2html} to convert @code{@@tex} sections. texi2html.texi(,359) texi2html.texi(,360) @command{texi2html} should reasonably convert all Texinfo texi2html.texi(,361) 4.0 constructs. If not, please send a bug report to texi2html.texi(,362) @email{texi2html@@mathematik.uni-kl.de}. texi2html.texi(,363) texi2html.texi(,364) @c ======================================================== texi2html.texi(,365) @node Installation, Customizing, whytexi2html, Top texi2html.texi(,366) @chapter Installation of @command{texi2html} texi2html.texi(,367) @cindex Installation texi2html.texi(,368) description of the installation process. texi2html.texi(,369) What do you need? texi2html.texi(,370) How? texi2html.texi(,371) texi2html.texi(,372) @c ======================================================== texi2html.texi(,373) @node Customizing, CustomizingExpand, Installation, Top texi2html.texi(,374) @chapter Customizing files texi2html.texi(,375) @cindex Installation texi2html.texi(,376) @opindex frames texi2html.texi(,377) @c 4.) Customizing files to output texi2html.texi(,378) @c ==> -out_file, -prefix, -subdir, -split, -frames etc texi2html.texi(,379) Result based on using @option{-frames} texi2html.texi(,380) texi2html.texi(,381) @example texi2html.texi(,382) texi2html -V -frames texi2html.texi texi2html.texi(,383) @end example texi2html.texi(,384) Explanation of the output differences against default, texi2html.texi(,385) whatever this is ;-) texi2html.texi(,386) texi2html.texi(,387) texi2html.texi(,388) @c ======================================================== texi2html.texi(,389) @node CustomizingExpand, CustomizingPage, Customizing, Top texi2html.texi(,390) @chapter Customizing what gets expanded texi2html.texi(,391) @c 5.) Customizing what gets expanded texi2html.texi(,392) @c ==> -expand, and latex2html texi2html.texi(,393) Test starting. texi2html.texi(,394) texi2html.texi(,395) @option{-expand info} texi2html.texi(,396) @option{-expand tex} texi2html.texi(,397) Take a look at optionexpand. texi2html.texi(,398) texi2html.texi(,399) @c ======================================================== texi2html.texi(,400) @node CustomizingPage, CustHTML, CustomizingExpand, Top custpage.texi(,1) @c custpage.texi(,2) @c This file is part of the ``Texinfo to HTML Converter'' manual custpage.texi(,3) @c which is part of the ``texi2html'' distribution. custpage.texi(,4) @c custpage.texi(,5) @c License: custpage.texi(,6) @c Copyright (C) 1999, 2000 Free Software Foundation, Inc. custpage.texi(,7) @c custpage.texi(,8) @c This program is free software; you can redistribute it custpage.texi(,9) @c and/or modify it under the terms of the GNU General Public custpage.texi(,10) @c License as published by the Free Software Foundation; custpage.texi(,11) @c either version 2 of the License, or (at your option) any custpage.texi(,12) @c later version. custpage.texi(,13) @c custpage.texi(,14) @c This program is distributed in the hope that it will be custpage.texi(,15) @c useful, but WITHOUT ANY WARRANTY; without even the implied custpage.texi(,16) @c warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR custpage.texi(,17) @c PURPOSE. See the GNU General Public License for more custpage.texi(,18) @c details. custpage.texi(,19) @c custpage.texi(,20) @c You should have received a copy of the GNU General custpage.texi(,21) @c Public License along with this program; if not, write to custpage.texi(,22) @c the Free Software Foundation, Inc., 59 Temple Place, Suite custpage.texi(,23) @c 330, Boston, MA 02111-1307 USA custpage.texi(,24) @c custpage.texi(,25) @c custpage.texi(,26) @c Revisions: custpage.texi(,27) @c custpage.texi(,28) @c custpage.texi(,29) @c Author: custpage.texi(,30) @c Karl Heinz Marbaise custpage.texi(,31) @c custpage.texi(,32) @c Description: custpage.texi(,33) @c Here are the informations about customizing page custpage.texi(,34) @c layout. custpage.texi(,35) @c custpage.texi(,36) @c ======================================================== custpage.texi(,37) @chapter Customizing page layout custpage.texi(,38) This chapter is designed to help you to change the custpage.texi(,39) complete layout of the @acronym{HTML} output if you like to custpage.texi(,40) do so. custpage.texi(,41) custpage.texi(,42) custpage.texi(,43) a) General: Philosophy, and how it works@* custpage.texi(,44) aa) Navigation panels@* custpage.texi(,45) b) Top page@* custpage.texi(,46) c) Section pages@* custpage.texi(,47) custpage.texi(,48) custpage.texi(,49) custpage.texi(,50) custpage.texi(,51) @menu custpage.texi(,52) * TipsNewDesign:: . custpage.texi(,53) * CustPagePhil:: . custpage.texi(,54) * CustPagePhilNav:: . custpage.texi(,55) * CustPageTopPage:: . custpage.texi(,56) * CustPageSectionPages:: . custpage.texi(,57) * CustPageMiscPage:: . custpage.texi(,58) @end menu custpage.texi(,59) @c -------------------------------------------------------- custpage.texi(,60) @node TipsNewDesign,CustPagePhil,CustomizingPage,CustomizingPage custpage.texi(,61) @section Tips how to create a new site design custpage.texi(,62) custpage.texi(,63) Here you can find information how you should work to pick custpage.texi(,64) up a new design with @command{texi2html}. custpage.texi(,65) custpage.texi(,66) custpage.texi(,67) @c -------------------------------------------------------- custpage.texi(,68) @node CustPagePhil,CustPagePhilNav,TipsNewDesign,CustomizingPage custpage.texi(,69) @section Page Layout and the philosophy custpage.texi(,70) custpage.texi(,71) @menu custpage.texi(,72) * CustPagePhilNav:: Navigation panels. custpage.texi(,73) @end menu custpage.texi(,74) @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= custpage.texi(,75) @node CustPagePhilNav,CustPageTopPage,CustPagePhil,CustomizingPage custpage.texi(,76) @subsection Navigation panels custpage.texi(,77) custpage.texi(,78) Head and foot Navigation panels. custpage.texi(,79) custpage.texi(,80) @c -------------------------------------------------------- custpage.texi(,81) @node CustPageTopPage,CustPageSectionPages,CustPagePhilNav,CustomizingPage custpage.texi(,82) @section Top Page custpage.texi(,83) @c -------------------------------------------------------- custpage.texi(,84) @node CustPageSectionPages,CustPageMiscPage,CustPageTopPage,CustomizingPage custpage.texi(,85) @section Section Pages custpage.texi(,86) @c -------------------------------------------------------- custpage.texi(,87) @node CustPageMiscPage,CustPagePageHeadToc,CustPageSectionPages,CustomizingPage custpage.texi(,88) @section Misc pages custpage.texi(,89) Here you can find information about the creation of the custpage.texi(,90) @dfn{ToC} (@i{Table Of content}), About---Page custpage.texi(,91) etc. and specialy how to change them to get your own custpage.texi(,92) design. custpage.texi(,93) custpage.texi(,94) @acronym{ToC} @code{T2H_DEFAULT_print_toc_frame} in custpage.texi(,95) @file{texi2html.init} custpage.texi(,96) custpage.texi(,97) @menu custpage.texi(,98) * CustPagePageHeadToc:: . custpage.texi(,99) * CustPagePageHead:: . custpage.texi(,100) * CustPagePageFoot:: . custpage.texi(,101) @end menu custpage.texi(,102) custpage.texi(,103) @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= custpage.texi(,104) @node CustPagePageHeadToc,CustPagePageHead,CustPageMiscPage,CustPageMiscPage custpage.texi(,105) @subsection Table Of Contents custpage.texi(,106) custpage.texi(,107) The following code is the original code out of the custpage.texi(,108) initialization file (@pxref{InitFile,Initialization file}). custpage.texi(,109) custpage.texi(,110) @example custpage.texi(,111) sub T2H_DEFAULT_print_toc_frame custpage.texi(,112) @{ custpage.texi(,113) my $fh = shift; custpage.texi(,114) &$T2H_print_page_head($fh); custpage.texi(,115) print $fh <Content custpage.texi(,117) EOT custpage.texi(,118) print $fh map @{s/HREF=/target=\"main\" HREF=/; $_;@} @@stoc_lines; custpage.texi(,119) print $fh "\n"; custpage.texi(,120) @} custpage.texi(,121) @end example custpage.texi(,122) custpage.texi(,123) As you can see it is very simple Perl Code, which can custpage.texi(,124) be changed more or less simple to fit you requirements custpage.texi(,125) (@pxref{CustPagePageHead,,T2H_DEFAULT_print_page_head}). custpage.texi(,126) custpage.texi(,127) custpage.texi(,128) @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= custpage.texi(,129) @node CustPagePageHead,CustPagePageFoot,CustPagePageHeadToc,CustPageMiscPage custpage.texi(,130) @subsection Page header custpage.texi(,131) Page Head @code{T2H_DEFAULT_print_page_head} custpage.texi(,132) custpage.texi(,133) @c references on T2H_DOCTYPE custpage.texi(,134) @c T2H_AUTHORS custpage.texi(,135) @example custpage.texi(,136) sub T2H_DEFAULT_print_page_head custpage.texi(,137) @{ custpage.texi(,138) my $fh = shift; custpage.texi(,139) my $longtitle = "$T2H_THISDOC@{title@}: $T2H_NAME@{This@}"; custpage.texi(,140) print $fh < custpage.texi(,142) $T2H_DOCTYPE custpage.texi(,143) custpage.texi(,144) custpage.texi(,147) custpage.texi(,148) $longtitle custpage.texi(,149) custpage.texi(,150) custpage.texi(,151) custpage.texi(,152) custpage.texi(,153) custpage.texi(,154) custpage.texi(,155) $T2H_EXTRA_HEAD custpage.texi(,156) custpage.texi(,157) custpage.texi(,158) custpage.texi(,159) $T2H_AFTER_BODY_OPEN custpage.texi(,160) EOT custpage.texi(,161) @} custpage.texi(,162) @end example custpage.texi(,163) custpage.texi(,164) @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= custpage.texi(,165) @node CustPagePageFoot, ,CustPagePageHead,CustPageMiscPage custpage.texi(,166) @subsection Page footer custpage.texi(,167) custpage.texi(,168) Page Foot @code{T2H_DEFAULT_print_page_foot} texi2html.texi(,402) @c ======================================================== texi2html.texi(,403) @node CustHTML, InitFile, CustomizingPage, Top custhtml.texi(,1) @c custhtml.texi(,2) @c This file is part of the ``Texinfo to HTML Converter'' manual custhtml.texi(,3) @c which is part of the ``texi2html'' distribution. custhtml.texi(,4) @c custhtml.texi(,5) @c License: custhtml.texi(,6) @c Copyright (C) 1999, 2000 Free Software Foundation, Inc. custhtml.texi(,7) @c custhtml.texi(,8) @c This program is free software; you can redistribute it custhtml.texi(,9) @c and/or modify it under the terms of the GNU General Public custhtml.texi(,10) @c License as published by the Free Software Foundation; custhtml.texi(,11) @c either version 2 of the License, or (at your option) any custhtml.texi(,12) @c later version. custhtml.texi(,13) @c custhtml.texi(,14) @c This program is distributed in the hope that it will be custhtml.texi(,15) @c useful, but WITHOUT ANY WARRANTY; without even the implied custhtml.texi(,16) @c warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR custhtml.texi(,17) @c PURPOSE. See the GNU General Public License for more custhtml.texi(,18) @c details. custhtml.texi(,19) @c custhtml.texi(,20) @c You should have received a copy of the GNU General custhtml.texi(,21) @c Public License along with this program; if not, write to custhtml.texi(,22) @c the Free Software Foundation, Inc., 59 Temple Place, Suite custhtml.texi(,23) @c 330, Boston, MA 02111-1307 USA custhtml.texi(,24) @c custhtml.texi(,25) @c custhtml.texi(,26) @c Revisions: custhtml.texi(,27) @c custhtml.texi(,28) @c custhtml.texi(,29) @c Author: custhtml.texi(,30) @c Karl Heinz Marbaise custhtml.texi(,31) @c custhtml.texi(,32) @c Description: custhtml.texi(,33) @c Here are the informations about customizing HTML custhtml.texi(,34) @c BODY, PRE- and AFTER Body. custhtml.texi(,35) @c custhtml.texi(,36) @c ======================================================== custhtml.texi(,37) @chapter Customizing HTML custhtml.texi(,38) If you like to read the following section, it is assumed custhtml.texi(,39) you are famillar with @acronym{HTML}. If not, you shouldn't custhtml.texi(,40) read this, cause you don't know what we are talking about. custhtml.texi(,41) custhtml.texi(,42) Here you can find information how to change the custhtml.texi(,43) @acronym{HTML} parts of a document. These are the custhtml.texi(,44) header, body etc. custhtml.texi(,45) custhtml.texi(,46) These are the defaults which are custhtml.texi(,47) part of the distribution as @file{texi2html.init}. custhtml.texi(,48) custhtml.texi(,49) custhtml.texi(,50) How to do changes of the customization... custhtml.texi(,51) needed steps. custhtml.texi(,52) @c examples. custhtml.texi(,53) custhtml.texi(,54) @menu custhtml.texi(,55) * CustHTMLBody:: Customizing BODY Text. custhtml.texi(,56) * CustHTMLHead:: Customizing Head. custhtml.texi(,57) * CustHTMLBodyText:: Customizing Head. custhtml.texi(,58) * CustHTMLPreBodyText:: Customizing Head. custhtml.texi(,59) * CustHTMLAfterBody:: Customizing Head. custhtml.texi(,60) @end menu custhtml.texi(,61) @c -------------------------------------------------------- custhtml.texi(,62) @node CustHTMLBody,CustHTMLBodyText,,CustHTML custhtml.texi(,63) @section Body custhtml.texi(,64) custhtml.texi(,65) @menu custhtml.texi(,66) * CustHTMLBodyText:: Body Text. custhtml.texi(,67) * CustHTMLPreBodyText:: PRE Body Text. custhtml.texi(,68) * CustHTMLAfterBody:: After Body Text. custhtml.texi(,69) @end menu custhtml.texi(,70) @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= custhtml.texi(,71) @node CustHTMLBodyText,CustHTMLPreBodyText,CustHTMLBody,CustHTML custhtml.texi(,72) @subsection Body Text custhtml.texi(,73) custhtml.texi(,74) custhtml.texi(,75) @vindex T2H_BODYTEXT custhtml.texi(,76) custhtml.texi(,77) @example custhtml.texi(,78) $T2H_BODYTEXT = custhtml.texi(,79) . 'LANG="' . $T2H_LANG . '" BGCOLOR="#FFFFFF" ' custhtml.texi(,80) . 'TEXT="#000000" LINK="#0000FF" ' custhtml.texi(,81) . 'VLINK="#800080" ALINK="#FF0000"'; custhtml.texi(,82) @end example custhtml.texi(,83) custhtml.texi(,84) If you like to change the basic color combination, you can custhtml.texi(,85) change the entry @var{T2H_BODYTEXT}. custhtml.texi(,86) custhtml.texi(,87) @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= custhtml.texi(,88) @node CustHTMLPreBodyText,CustHTMLAfterBody,CustHTMLBodyText,CustHTML custhtml.texi(,89) @subsection Body Text custhtml.texi(,90) @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= custhtml.texi(,91) @node CustHTMLAfterBody,CustHTMLHead,CustHTMLPreBodyText,CustHTML custhtml.texi(,92) @subsection After Body Text custhtml.texi(,93) custhtml.texi(,94) @vindex T2H_AFTER_BODY_OPEN custhtml.texi(,95) @vindex T2H_PRE_BODY_CLOSE custhtml.texi(,96) custhtml.texi(,97) @vindex T2H_EXTRA_HEAD custhtml.texi(,98) custhtml.texi(,99) @example custhtml.texi(,100) # text inserted after custhtml.texi(,101) $T2H_AFTER_BODY_OPEN = ''; custhtml.texi(,102) custhtml.texi(,103) #text inserted before custhtml.texi(,104) $T2H_PRE_BODY_CLOSE = ''; custhtml.texi(,105) custhtml.texi(,106) # this is used in footer custhtml.texi(,107) $T2H_ADDRESS = "by $T2H_USER " if $T2H_USER; custhtml.texi(,108) $T2H_ADDRESS .= "on $T2H_TODAY"; custhtml.texi(,109) custhtml.texi(,110) # this is added inside after and some META NAME stuff custhtml.texi(,111) # can be used for <style> <script>, <meta> tags custhtml.texi(,112) $T2H_EXTRA_HEAD = ''; custhtml.texi(,113) @end example custhtml.texi(,114) custhtml.texi(,115) The default output into the @acronym{HTML} file. custhtml.texi(,116) @xref{OptionDocType}. custhtml.texi(,117) custhtml.texi(,118) custhtml.texi(,119) The following code is produced by custhtml.texi(,120) @code{T2H_DEFAULT_print_page_head}. custhtml.texi(,121) custhtml.texi(,122) Detailed information can be found at custhtml.texi(,123) @ref{CustPagePageHead}. custhtml.texi(,124) custhtml.texi(,125) @example custhtml-header.htmltexi(,1) <HTML> custhtml-header.htmltexi(,2) $T2H_DOCTYPE custhtml-header.htmltexi(,3) <!-- Created on $T2H_TODAY by $THISPROG --> custhtml-header.htmltexi(,4) <!-- custhtml-header.htmltexi(,5) $T2H_AUTHORS custhtml-header.htmltexi(,6) --> custhtml-header.htmltexi(,7) <HEAD> custhtml-header.htmltexi(,8) <TITLE>$longtitle custhtml-header.htmltexi(,9) custhtml-header.htmltexi(,10) custhtml-header.htmltexi(,11) custhtml-header.htmltexi(,12) custhtml-header.htmltexi(,13) custhtml-header.htmltexi(,14) custhtml-header.htmltexi(,15) $T2H_EXTRA_HEAD custhtml-header.htmltexi(,16) custhtml-header.htmltexi(,17) custhtml-header.htmltexi(,18) custhtml-header.htmltexi(,19) $T2H_AFTER_BODY_OPEN custhtml.texi(,127) @end example custhtml.texi(,128) custhtml.texi(,129) @c -------------------------------------------------------- custhtml.texi(,130) @node CustHTMLHead,,CustHTMLAfterBody,CustHTML custhtml.texi(,131) @section Head texi2html.texi(,405) @c ======================================================== texi2html.texi(,406) @node InitFile, IFOs, CustHTML, Top initfile.texi(,1) @c initfile.texi(,2) @c This file is part of the ``Texinfo to HTML Converter'' manual initfile.texi(,3) @c which is part of the ``texi2html'' distribution. initfile.texi(,4) @c initfile.texi(,5) @c License: initfile.texi(,6) @c Copyright (C) 1999, 2000 Free Software Foundation, Inc. initfile.texi(,7) @c initfile.texi(,8) @c This program is free software; you can redistribute it initfile.texi(,9) @c and/or modify it under the terms of the GNU General Public initfile.texi(,10) @c License as published by the Free Software Foundation; initfile.texi(,11) @c either version 2 of the License, or (at your option) any initfile.texi(,12) @c later version. initfile.texi(,13) @c initfile.texi(,14) @c This program is distributed in the hope that it will be initfile.texi(,15) @c useful, but WITHOUT ANY WARRANTY; without even the implied initfile.texi(,16) @c warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR initfile.texi(,17) @c PURPOSE. See the GNU General Public License for more initfile.texi(,18) @c details. initfile.texi(,19) @c initfile.texi(,20) @c You should have received a copy of the GNU General initfile.texi(,21) @c Public License along with this program; if not, write to initfile.texi(,22) @c the Free Software Foundation, Inc., 59 Temple Place, Suite initfile.texi(,23) @c 330, Boston, MA 02111-1307 USA initfile.texi(,24) @c initfile.texi(,25) @c initfile.texi(,26) @c Revisions: initfile.texi(,27) @c initfile.texi(,28) @c initfile.texi(,29) @c Author: initfile.texi(,30) @c Karl Heinz Marbaise initfile.texi(,31) @c initfile.texi(,32) @c Description: initfile.texi(,33) @c Here you can find the description on the initfile.texi(,34) @c initialization files. initfile.texi(,35) @c initfile.texi(,36) @c ======================================================== initfile.texi(,37) @chapter Initialization file initfile.texi(,38) @c initfile.texi(,39) @cindex configure initfile.texi(,40) @cindex texi2html.init initfile.texi(,41) @cindex texi2htmlrc, global initialization initfile.texi(,42) @cindex .texi2htmlrc, user initialization initfile.texi(,43) @c initfile.texi(,44) @opindex sysconfdir initfile.texi(,45) @opindex init_file initfile.texi(,46) @file{texi2html.init} initfile.texi(,47) initfile.texi(,48) initfile.texi(,49) @menu initfile.texi(,50) * InitFileBasics:: The basics about initfile.texi(,51) initialization files. initfile.texi(,52) * InitFileGlobal:: Global initialization file. initfile.texi(,53) * InitFileUser:: User initialization file. initfile.texi(,54) * InitFileLoad:: Loadable initialization file. initfile.texi(,55) @end menu initfile.texi(,56) initfile.texi(,57) @c -------------------------------------------------------- initfile.texi(,58) @node InitFileBasics,InitFileGlobal,InitFile,InitFile initfile.texi(,59) @section The basics about init files initfile.texi(,60) initfile.texi(,61) Initialization options are read first from initfile.texi(,62) @file{/usr/local/etc/texi2htmlrc} (the exact location being initfile.texi(,63) changeable with the @option{--sysconfdir=dir} option to the initfile.texi(,64) @command{configure} script), then from initfile.texi(,65) @file{$HOME/.texi2htmlrc}, then any command-line options initfile.texi(,66) including @option{-init_file} option; with later settings initfile.texi(,67) overriding earlier ones. initfile.texi(,68) initfile.texi(,69) The default initialization options are defined in the initfile.texi(,70) @file{texi2html.init} file contained in the @b{Texi2html} initfile.texi(,71) distribution (which gets included near the beginning of the initfile.texi(,72) @command{texi2html} script that gets installed). initfile.texi(,73) initfile.texi(,74) To customize @file{texi2html} it is best if you copy the initfile.texi(,75) appropriate sections from the @file{texi2html.init} initfile.texi(,76) contents into an appropriate local initialization file, initfile.texi(,77) make the necessary changes there, and then have initfile.texi(,78) @command{texi2html} read this initialization file by one of initfile.texi(,79) the means described above. initfile.texi(,80) initfile.texi(,81) For an example on what you can produces with initfile.texi(,82) @command{texi2html} have a look at the following sites: initfile.texi(,83) @uref{http://www.singular.uni-kl.de/Manual/html/} initfile.texi(,84) initfile.texi(,85) initfile.texi(,86) @c -------------------------------------------------------- initfile.texi(,87) @node InitFileGlobal,InitFileUser,InitFileBasics,InitFile initfile.texi(,88) @section Global initialization file initfile.texi(,89) @c -------------------------------------------------------- initfile.texi(,90) @node InitFileUser,InitFileLoad,InitFileGlobal,InitFile initfile.texi(,91) @section User initialization file initfile.texi(,92) @c -------------------------------------------------------- initfile.texi(,93) @node InitFileLoad,,InitFileUser,InitFile initfile.texi(,94) @section Loadable initialization file initfile.texi(,95) @opindex init_file initfile.texi(,96) @option{-init_file} initfile.texi(,97) initfile.texi(,98) @c @ref{InitFile} initfile.texi(,99) texi2html.texi(,408) @c -------------------------------------------------------- texi2html.texi(,409) @node IFOs, Options, InitFile, Top ifo.texi(,1) @c ifo.texi(,2) @c This file is part of the ``Texinfo to HTML Converter'' manual ifo.texi(,3) @c which is part of the ``texi2html'' distribution. ifo.texi(,4) @c ifo.texi(,5) @c License: ifo.texi(,6) @c Copyright (C) 1999, 2000 Free Software Foundation, Inc. ifo.texi(,7) @c ifo.texi(,8) @c This program is free software; you can redistribute it ifo.texi(,9) @c and/or modify it under the terms of the GNU General Public ifo.texi(,10) @c License as published by the Free Software Foundation; ifo.texi(,11) @c either version 2 of the License, or (at your option) any ifo.texi(,12) @c later version. ifo.texi(,13) @c ifo.texi(,14) @c This program is distributed in the hope that it will be ifo.texi(,15) @c useful, but WITHOUT ANY WARRANTY; without even the implied ifo.texi(,16) @c warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ifo.texi(,17) @c PURPOSE. See the GNU General Public License for more ifo.texi(,18) @c details. ifo.texi(,19) @c ifo.texi(,20) @c You should have received a copy of the GNU General ifo.texi(,21) @c Public License along with this program; if not, write to ifo.texi(,22) @c the Free Software Foundation, Inc., 59 Temple Place, Suite ifo.texi(,23) @c 330, Boston, MA 02111-1307 USA ifo.texi(,24) @c ifo.texi(,25) @c ifo.texi(,26) @c Revisions: ifo.texi(,27) @c ifo.texi(,28) @c ifo.texi(,29) @c Author: ifo.texi(,30) @c Karl Heinz Marbaise ifo.texi(,31) @c ifo.texi(,32) @c Description: ifo.texi(,33) @c Here you can find the description on the ifo.texi(,34) @c initialization files options. ifo.texi(,35) @c ifo.texi(,36) @c -------------------------------------------------------- ifo.texi(,37) @section Initialization file options ifo.texi(,38) This section describes in detail all options that can be used ifo.texi(,39) only in the initialization file (@file{texi2html.init}), ifo.texi(,40) and cannot be specified on the command line. ifo.texi(,41) This means the only way to change those ifo.texi(,42) options is first to copy the original @file{texi2html.init} ifo.texi(,43) to e.g.@: @file{texi2html.init.myown} and make changes to fit ifo.texi(,44) your needs. ifo.texi(,45) ifo.texi(,46) @menu ifo.texi(,47) * IFOnumber:: Number sectioning. ifo.texi(,48) * IFOmenu:: Avoid menu redundancy. ifo.texi(,49) * IFOCenterImage:: Center Image. ifo.texi(,50) * IFOExampleIndentCell:: Example Indent Cell. ifo.texi(,51) * IFOSampleIndentCell:: Sample Indent Cell. ifo.texi(,52) * IFOSmallFontSize:: Small Font Size. ifo.texi(,53) * IFOTopHeading:: Top Heading. ifo.texi(,54) * IFOIndexChapter:: Index Chapter. ifo.texi(,55) * IFOSplitIndex:: Split Index. ifo.texi(,56) * IFOhrefDirInsteadFile:: HREF Dir Instead file. ifo.texi(,57) @end menu ifo.texi(,58) ifo.texi(,59) @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- ifo.texi(,60) @node IFOnumber, IFOmenu, IFOs, IFOs ifo.texi(,61) @subsection Number sections. ifo.texi(,62) @vindex T2H_NUMBER_SECTIONS ifo.texi(,63) @vindex T2H_NODE_NAME_IN_MENU ifo.texi(,64) if set, and @var{$T2H_NUMBER_SECTIONS} is set, then use node ifo.texi(,65) names in menu entries, instead of section names ifo.texi(,66) ifo.texi(,67) @var{$T2H_NODE_NAME_IN_MENU} = 0; ifo.texi(,68) ifo.texi(,69) @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- ifo.texi(,70) @node IFOmenu, IFOCenterImage, IFOnumber, IFOs ifo.texi(,71) @subsection Avoid menu redundancy ifo.texi(,72) @c not sure if correct? ifo.texi(,73) @cindex menu, redundancy ifo.texi(,74) @vindex T2H_AVOID_MENU_REDUNDANCY ifo.texi(,75) If set, and menu entry equals menu description, then do not print ifo.texi(,76) menu description. Likewise, if node name equals entry name, do ifo.texi(,77) not print entry name. ifo.texi(,78) @var{$T2H_AVOID_MENU_REDUNDANCY} = 1; ifo.texi(,79) ifo.texi(,80) @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- ifo.texi(,81) @node IFOCenterImage, IFOExampleIndentCell, IFOmenu, IFOs ifo.texi(,82) @subsection Center Image ifo.texi(,83) @cindex images, center ifo.texi(,84) @vindex T2H_CENTER_IMAGE ifo.texi(,85) if set, center @@image by default ifo.texi(,86) otherwise, do not center by default ifo.texi(,87) @var{$T2H_CENTER_IMAGE} = 1; ifo.texi(,88) ifo.texi(,89) @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- ifo.texi(,90) @node IFOExampleIndentCell, IFOSampleIndentCell, IFOCenterImage, IFOs ifo.texi(,91) @subsection Example Indent Cell ifo.texi(,92) @cindex example, indentation ifo.texi(,93) @vindex T2H_EXAMPLE_INDENT_CELL ifo.texi(,94) used as indentation for block enclosing command ifo.texi(,95) @code{@@example}, etc If not empty, must be enclosed in ifo.texi(,96) @code{} ifo.texi(,97) @var{$T2H_EXAMPLE_INDENT_CELL} = ' '; ifo.texi(,98) ifo.texi(,99) @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- ifo.texi(,100) @node IFOSampleIndentCell, IFOSmallFontSize, IFOExampleIndentCell, IFOs ifo.texi(,101) @subsection Small Example Indent ifo.texi(,102) @cindex example, small indent ifo.texi(,103) @vindex T2H_SMALL_EXAMPLE_INDENT_CELL ifo.texi(,104) same as above, only for @code{@@small} ifo.texi(,105) $T2H_SMALL_EXAMPLE_INDENT_CELL = " "; ifo.texi(,106) ifo.texi(,107) @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- ifo.texi(,108) @node IFOSmallFontSize, IFOTopHeading, IFOSampleIndentCell, IFOs ifo.texi(,109) @subsection Small Font Size ifo.texi(,110) @cindex Font Size, small ifo.texi(,111) @vindex T2H_SMALL_FONT_SIZE ifo.texi(,112) # font size for @@small ifo.texi(,113) $T2H_SMALL_FONT_SIZE = "-1"; ifo.texi(,114) ifo.texi(,115) @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- ifo.texi(,116) @node IFOTopHeading, IFOIndexChapter, IFOSmallFontSize, IFOs ifo.texi(,117) @subsection Top Heading ifo.texi(,118) @vindex T2H_TOP_HEADING ifo.texi(,119) if non-empty, and no @code{@@..heading} appeared in Top ifo.texi(,120) @c here should be a reference to Texinfo Manual ifo.texi(,121) @c @@heading ?? ifo.texi(,122) node, then use this as header for top node/section, ifo.texi(,123) otherwise use value of @code{@@settitle} or ifo.texi(,124) @code{@@shorttitle} (in that order) ifo.texi(,125) $T2H_TOP_HEADING = ""; ifo.texi(,126) ifo.texi(,127) @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- ifo.texi(,128) @node IFOIndexChapter, IFOSplitIndex, IFOTopHeading, IFOs ifo.texi(,129) @subsection Index Chapter ifo.texi(,130) @cindex Chapter, Index ifo.texi(,131) @vindex T2H_INDEX_CHAPTER ifo.texi(,132) if set, use this chapter for @strong{Index} button, else ifo.texi(,133) use first chapter whose name matches @strong{index} (case insensitive) ifo.texi(,134) $T2H_INDEX_CHAPTER = ""; ifo.texi(,135) ifo.texi(,136) @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- ifo.texi(,137) @node IFOSplitIndex, IFOhrefDirInsteadFile, IFOIndexChapter, IFOs ifo.texi(,138) @subsection Split Index ifo.texi(,139) @cindex Index, split ifo.texi(,140) @vindex T2H_SPLIT_INDEX ifo.texi(,141) if set and @var{$T2H_SPLIT} is set, then split index pages ifo.texi(,142) at the next letter after they have more than that many ifo.texi(,143) entries ifo.texi(,144) ifo.texi(,145) $T2H_SPLIT_INDEX = 100; ifo.texi(,146) ifo.texi(,147) @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- ifo.texi(,148) @node IFOhrefDirInsteadFile, , IFOSplitIndex, IFOs ifo.texi(,149) @subsection HREF Dir Instead File. ifo.texi(,150) @c Not very good? :-/ ifo.texi(,151) @cindex HREF Dir instead file ifo.texi(,152) @vindex T2H_HREF_DIR_INSTEAD_FILE ifo.texi(,153) if set (e.g., to @file{index.html}) replace @strong{HREF}'s ifo.texi(,154) to this file (i.e., to @file{index.html}) by @file{./} ifo.texi(,155) ifo.texi(,156) $T2H_HREF_DIR_INSTEAD_FILE = ""; texi2html.texi(,411) @c ======================================================== texi2html.texi(,412) @c @include extfile.texi obsolete now, is not documented! texi2html.texi(,413) @c ======================================================== texi2html.texi(,414) @node Options, Reference, IFOs, Top options.texi(,1) @c options.texi(,2) @c This file is part of the ``Texinfo to HTML Converter'' manual options.texi(,3) @c which is part of the ``texi2html'' distribution. options.texi(,4) @c options.texi(,5) @c License: options.texi(,6) @c Copyright (C) 1999, 2000 Free Software Foundation, Inc. options.texi(,7) @c options.texi(,8) @c This program is free software; you can redistribute it options.texi(,9) @c and/or modify it under the terms of the GNU General Public options.texi(,10) @c License as published by the Free Software Foundation; options.texi(,11) @c either version 2 of the License, or (at your option) any options.texi(,12) @c later version. options.texi(,13) @c options.texi(,14) @c This program is distributed in the hope that it will be options.texi(,15) @c useful, but WITHOUT ANY WARRANTY; without even the implied options.texi(,16) @c warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR options.texi(,17) @c PURPOSE. See the GNU General Public License for more options.texi(,18) @c details. options.texi(,19) @c options.texi(,20) @c You should have received a copy of the GNU General options.texi(,21) @c Public License along with this program; if not, write to options.texi(,22) @c the Free Software Foundation, Inc., 59 Temple Place, Suite options.texi(,23) @c 330, Boston, MA 02111-1307 USA options.texi(,24) @c options.texi(,25) @c options.texi(,26) @c Revisions: options.texi(,27) @c options.texi(,28) @c options.texi(,29) @c Author: options.texi(,30) @c Karl Heinz Marbaise options.texi(,31) @c options.texi(,32) @c Description: options.texi(,33) @c Here you can find the description on the options.texi(,34) @c command line options. options.texi(,35) @c options.texi(,36) @c ======================================================== options.texi(,37) @chapter Command Line Options options.texi(,38) options.texi(,39) @menu options.texi(,40) * OptionDebug:: Debugging. options.texi(,41) * OptionDocType:: DocType (HTML) options.texi(,42) * OptionCheck:: Checking files. options.texi(,43) * OptionExpand:: Expanding info, tex areas etc. options.texi(,44) * OptionGlossary:: Glossary. options.texi(,45) * OptionInvisible:: Invisible. options.texi(,46) * OptionIso:: Iso. options.texi(,47) * OptionInclude:: Include directories. options.texi(,48) * OptionTopFile:: Top File. options.texi(,49) * OptionTocFile:: Table of content File. options.texi(,50) * OptionFrames:: Frames. options.texi(,51) * OptionMenu:: Menus. options.texi(,52) * OptionNumber:: Number sections. options.texi(,53) * OptionSplit:: Splitting. options.texi(,54) * OptionSectionNavigation:: Navigation. options.texi(,55) * OptionSubDir:: Subdirectory. options.texi(,56) * OptionShortExt:: Short extension. options.texi(,57) * OptionPrefix:: Prefix. options.texi(,58) * OptionOutput:: Output. options.texi(,59) * OptionShortRef:: Short Ref. options.texi(,60) * OptionIndexSummary:: Index Summary. options.texi(,61) * OptionVerbose:: Verbose. options.texi(,62) * OptionLanguage:: Language. options.texi(,63) * OptionL2H:: La@TeX{}2HTML. options.texi(,64) @end menu options.texi(,65) options.texi(,66) options.texi(,67) @c -------------------------------------------------------- options.texi(,68) @node OptionDebug, OptionDocType, Options, Options options.texi(,69) @section Debugging options.texi(,70) @cindex Debugging options.texi(,71) @vindex DEBUG_TOC options.texi(,72) @vindex DEBUG_INDEX options.texi(,73) @vindex DEBUG_BIB options.texi(,74) @vindex DEBUG_GLOSS options.texi(,75) @vindex DEBUG_DEF options.texi(,76) @vindex DEBUG_HTML options.texi(,77) @vindex DEBUG_USER options.texi(,78) @vindex DEBUG_L2H options.texi(,79) @opindex debug options.texi(,80) options.texi(,81) @option{-debug} options.texi(,82) options.texi(,83) debugging: 0 --- no debugging; other values; see beginning options.texi(,84) of texi2html options.texi(,85) options.texi(,86) @var{$DEBUG_TOC} = 1; options.texi(,87) @var{$DEBUG_INDEX} = 2; options.texi(,88) @var{$DEBUG_BIB} = 4; options.texi(,89) @var{$DEBUG_GLOSS} = 8; options.texi(,90) @var{$DEBUG_DEF} = 16; options.texi(,91) @var{$DEBUG_HTML} = 32; options.texi(,92) @var{$DEBUG_USER} = 64; options.texi(,93) @var{$DEBUG_L2H} = 128; options.texi(,94) options.texi(,95) @c -------------------------------------------------------- options.texi(,96) @node OptionDocType, OptionCheck, OptionDebug, Options options.texi(,97) @section DocType options.texi(,98) @cindex HTML, Doc Type options.texi(,99) @opindex doctype options.texi(,100) @vindex T2H_DOCTYPE options.texi(,101) @option{-doctype} options.texi(,102) options.texi(,103) @example options.texi(,104) options.texi(,105) @end example options.texi(,106) options.texi(,107) @c -------------------------------------------------------- options.texi(,108) @node OptionCheck, OptionExpand, OptionDocType, Options options.texi(,109) @section Check options.texi(,110) @cindex Texinfo, checking options.texi(,111) @opindex check options.texi(,112) @vindex T2H_CHECK options.texi(,113) @option{-check} options.texi(,114) if set, only check files and give the list of all things options.texi(,115) that look like untranslated Texinfo commands options.texi(,116) options.texi(,117) @c -------------------------------------------------------- options.texi(,118) @node OptionExpand, OptionGlossary, OptionCheck, Options options.texi(,119) @section Expand options.texi(,120) @opindex expand options.texi(,121) @vindex T2H_EXPAND options.texi(,122) @option{-expand} options.texi(,123) if set to @strong{tex} (or, @strong{info}) expand options.texi(,124) @code{@@iftex} and @code{@@tex} (or, @code{@@ifinfo}) options.texi(,125) sections else, neither expand @code{@@iftex}, @code{@@tex}, options.texi(,126) nor @code{@@ifinfo} sections options.texi(,127) options.texi(,128) @c $T2H_EXPAND = "info"; options.texi(,129) options.texi(,130) @c -------------------------------------------------------- options.texi(,131) @node OptionGlossary, OptionInvisible, OptionExpand, Options options.texi(,132) @section Glossary options.texi(,133) @cindex HTML, Glossary options.texi(,134) @cindex Texinfo, Glossary options.texi(,135) @opindex glossary options.texi(,136) @vindex T2H_USE_GLOSSARY options.texi(,137) @option{-glossary} options.texi(,138) if set, uses section named @strong{Footnotes} for glossary options.texi(,139) options.texi(,140) @c -------------------------------------------------------- options.texi(,141) @node OptionInvisible, OptionIso, OptionGlossary, Options options.texi(,142) @section Invisible options.texi(,143) @cindex Mark, invisible options.texi(,144) @cindex invisible, Mark options.texi(,145) @opindex invisible options.texi(,146) @vindex T2H_INVISIBLE_MARK options.texi(,147) @option{-invisible} options.texi(,148) @var{$T2H_INVISIBLE_MARK} is the text used to create options.texi(,149) invisible destination anchors for index links (you can for options.texi(,150) instance use the @file{invisible.xbm} file shipped with options.texi(,151) this program). This is a workaround for a known bug of many options.texi(,152) @acronym{WWW} browsers, including Netscape. For me, it options.texi(,153) works fine without it --- on the contrary: if there, it options.texi(,154) inserts space between headers and start of text (obachman options.texi(,155) 3/99) options.texi(,156) options.texi(,157) @example options.texi(,158) $T2H_INVISIBLE_MARK = ""; options.texi(,159) # $T2H_INVISIBLE_MARK = ' '; options.texi(,160) @end example options.texi(,161) options.texi(,162) @c -------------------------------------------------------- options.texi(,163) @node OptionIso, OptionInclude, OptionInvisible, Options options.texi(,164) @section Iso options.texi(,165) @cindex ISO8859 options.texi(,166) @cindex Copyright options.texi(,167) @opindex iso options.texi(,168) @vindex T2H_USE_ISO options.texi(,169) @option{-iso} options.texi(,170) options.texi(,171) if set, ISO8859 characters are used for special symbols options.texi(,172) (like Copyright @code{@copyright{}}, etc) options.texi(,173) options.texi(,174) $T2H_USE_ISO = 0; options.texi(,175) options.texi(,176) @c -------------------------------------------------------- options.texi(,177) @node OptionInclude, OptionTopFile, OptionIso, Options options.texi(,178) @section Include Directory options.texi(,179) @vindex Include directories options.texi(,180) @opindex I options.texi(,181) @vindex T2H_INCLUDE_DIRS options.texi(,182) @option{-I} options.texi(,183) options.texi(,184) list directories where @code{@@include} files are searched for options.texi(,185) (besides the directory of the doc file) additional options.texi(,186) @option{-I} args are add to this list. options.texi(,187) options.texi(,188) @@T2H_INCLUDE_DIRS = ("."); options.texi(,189) options.texi(,190) @c -------------------------------------------------------- options.texi(,191) @node OptionTopFile, OptionTocFile, OptionInclude, Options options.texi(,192) @section Top File options.texi(,193) @cindex Top Level file options.texi(,194) @cindex HTML, index.html options.texi(,195) @opindex top_file options.texi(,196) @vindex T2H_TOP_FILE options.texi(,197) @option{-top_file} options.texi(,198) uses file of this name for top-level file options.texi(,199) extension is manipulated appropriately, if necessary. options.texi(,200) If empty, @file{.html} is used. options.texi(,201) Typically, you would set this to @file{index.html}. options.texi(,202) options.texi(,203) $T2H_TOP_FILE = ""; options.texi(,204) options.texi(,205) @c -------------------------------------------------------- options.texi(,206) @node OptionTocFile, OptionFrames, OptionTopFile, Options options.texi(,207) @section Table Of content File options.texi(,208) @cindex Table of content file options.texi(,209) @opindex toc_file options.texi(,210) @vindex T2H_TOC_FILE options.texi(,211) @option{-toc_file} options.texi(,212) uses file of this name for table of contents. File extension options.texi(,213) is manipulated appropriately, if necessary. If empty, options.texi(,214) @file{_toc.html} is used. options.texi(,215) options.texi(,216) $T2H_TOC_FILE = ""; options.texi(,217) options.texi(,218) @c -------------------------------------------------------- options.texi(,219) @node OptionFrames, OptionMenu, OptionTocFile, Options options.texi(,220) @section Frames options.texi(,221) @vindex HTML, frames options.texi(,222) @vindex HTML 4.0, frames options.texi(,223) @opindex frames options.texi(,224) @vindex T2H_FRAMES options.texi(,225) @option{-frames} options.texi(,226) if set, output two additional files which use HTML 4.0 options.texi(,227) @b{frames}. options.texi(,228) options.texi(,229) $T2H_FRAMES = 0; options.texi(,230) options.texi(,231) @c -------------------------------------------------------- options.texi(,232) @node OptionMenu, OptionNumber, OptionFrames, Options options.texi(,233) @section Menus options.texi(,234) @cindex HTML, menu options.texi(,235) @cindex Texinfo, menu options.texi(,236) @opindex menu options.texi(,237) @opindex nomenu options.texi(,238) @vindex T2H_SHOW_MENU options.texi(,239) @option{-menu} or @option{-nomenu} if set, show the Texinfo options.texi(,240) menus options.texi(,241) options.texi(,242) $T2H_SHOW_MENU = 1; options.texi(,243) options.texi(,244) @c -------------------------------------------------------- options.texi(,245) @node OptionNumber, OptionSplit, OptionMenu, Options options.texi(,246) @section Number sections options.texi(,247) @cindex Section numbering options.texi(,248) @opindex number options.texi(,249) @opindex nonumber options.texi(,250) @vindex T2H_NUMBER_SECTIONS options.texi(,251) @option{-number} @option{-nonumber} options.texi(,252) if set, number sections and show section names and numbers options.texi(,253) in references and menus options.texi(,254) options.texi(,255) @c Just think about it? options.texi(,256) @c @defvar $T2H_NUMBER_SECTIONS options.texi(,257) @c @c = 1; options.texi(,258) @c @end defvar options.texi(,259) options.texi(,260) @c -------------------------------------------------------- options.texi(,261) @node OptionSplit, OptionSectionNavigation, OptionNumber, Options options.texi(,262) @section Split options.texi(,263) @cindex HTML, split options.texi(,264) @cindex File, split options.texi(,265) @opindex split options.texi(,266) @vindex T2H_SPLIT options.texi(,267) @option{-split section|chapter|none} options.texi(,268) if set to @strong{section} (resp. @strong{chapter}) create one options.texi(,269) @acronym{HTML} file per (sub)section (resp. chapter) and options.texi(,270) separate pages for Top, ToC, Overview, Index, Glossary, options.texi(,271) About. Otherwise, create a monolithic @acronym{HTML} file that options.texi(,272) contains the whole document. options.texi(,273) options.texi(,274) #$T2H_SPLIT = 'section'; options.texi(,275) $T2H_SPLIT = undef; options.texi(,276) options.texi(,277) @c -------------------------------------------------------- options.texi(,278) @node OptionSectionNavigation, OptionSubDir, OptionSplit, Options options.texi(,279) @section Section navigation options.texi(,280) @cindex HTML, Navigation options.texi(,281) @opindex section_navigation options.texi(,282) @opindex no-section_navigation options.texi(,283) @vindex T2H_SECTION_NAVIGATION options.texi(,284) @option{-section_navigation}| options.texi(,285) @option{-no-section_navigation} options.texi(,286) options.texi(,287) if set, then navigation panels are printed at the beginning options.texi(,288) of each section and, possibly at the end (depending on options.texi(,289) whether or not there were more than options.texi(,290) @var{$T2H_WORDS_IN_PAGE} words on page). This is most useful options.texi(,291) if you do not want to have section navigation on options.texi(,292) @option{-split chapter} options.texi(,293) options.texi(,294) @c @vindex T2H_SECTION_NAVIGATION options.texi(,295) @c @defvar $T2H_SECTION_NAVIGATION options.texi(,296) @c = 1; options.texi(,297) @c @end defvar options.texi(,298) options.texi(,299) @c -------------------------------------------------------- options.texi(,300) @node OptionSubDir, OptionShortExt, OptionSectionNavigation, Options options.texi(,301) @section Subdirectory options.texi(,302) @cindex Subdirectory options.texi(,303) @vindex T2H_SUBDIR options.texi(,304) @option{-subdir} options.texi(,305) If set, then put result files in the specified directory. options.texi(,306) If not set, then result files are put into the current directory. options.texi(,307) options.texi(,308) @c #$T2H_SUBDIR = 'html'; options.texi(,309) @var{$T2H_SUBDIR} = undef; options.texi(,310) options.texi(,311) @c -------------------------------------------------------- options.texi(,312) @node OptionShortExt, OptionPrefix, OptionSubDir, Options options.texi(,313) @section Short extension options.texi(,314) @cindex HTML, .htm extension options.texi(,315) @cindex HTML, .html extension options.texi(,316) @cindex extension, .html options.texi(,317) @cindex extension, .htm options.texi(,318) @vindex T2H_SHORTEXTN options.texi(,319) @opindex short_extn options.texi(,320) @option{-short_extn} options.texi(,321) If this is set, then all @acronym{HTML} files will have extension options.texi(,322) @file{.htm} instead of @file{.html}. This is helpful when options.texi(,323) shipping the document to DOS-based systems. options.texi(,324) @var{$T2H_SHORTEXTN} = 0; options.texi(,325) options.texi(,326) @c -------------------------------------------------------- options.texi(,327) @node OptionPrefix, OptionOutput, OptionShortExt, Options options.texi(,328) @section Prefix options.texi(,329) @cindex Prefix options.texi(,330) @vindex T2H_PREFIX options.texi(,331) @opindex prefix options.texi(,332) @option{-prefix} options.texi(,333) Set the output file prefix, prepended to all @file{.html}, options.texi(,334) @file{.gif} and @file{.pl} files. options.texi(,335) By default, this is the basename of the document options.texi(,336) options.texi(,337) @var{$T2H_PREFIX} = ""; options.texi(,338) options.texi(,339) @c -------------------------------------------------------- options.texi(,340) @node OptionOutput, OptionShortRef, OptionPrefix, Options options.texi(,341) @section Output filename options.texi(,342) @cindex Output filename options.texi(,343) @cindex Filename, output options.texi(,344) @vindex T2H_OUT options.texi(,345) @opindex o options.texi(,346) @opindex out_file options.texi(,347) options.texi(,348) @option{-o filename}|@option{-out_file} options.texi(,349) If set, generate monolithic document output @acronym{HTML} options.texi(,350) into @file{filename}. options.texi(,351) options.texi(,352) @c -------------------------------------------------------- options.texi(,353) @node OptionShortRef, OptionIndexSummary, OptionOutput, Options options.texi(,354) @section Short Cross References options.texi(,355) @cindex References, short options.texi(,356) @cindex sections without numbers options.texi(,357) @vindex T2H_SHORT_REF options.texi(,358) @opindex short_ref options.texi(,359) @option{-short_ref} options.texi(,360) if set cross-references are given without section numbers options.texi(,361) options.texi(,362) @c -------------------------------------------------------- options.texi(,363) @node OptionIndexSummary, OptionVerbose, OptionShortRef, Options options.texi(,364) @section Index Summary options.texi(,365) @cindex Index, Summary options.texi(,366) @cindex Summary Index options.texi(,367) @cindex HTML, Index options.texi(,368) @vindex T2H_IDX_SUMMARY options.texi(,369) @opindex idx_sum options.texi(,370) @option{-idx_sum} options.texi(,371) If value is set, then for each @code{@@prinindex $what} options.texi(,372) @file{$docu_name_$what.idx} is created which contains lines of the options.texi(,373) form @strong{$key\t$ref} sorted alphabetically (case options.texi(,374) matters). options.texi(,375) options.texi(,376) @c -------------------------------------------------------- options.texi(,377) @node OptionVerbose, OptionLanguage, OptionIndexSummary, Options options.texi(,378) @section Verbose output options.texi(,379) @cindex Output, verbose options.texi(,380) @cindex Verbose output options.texi(,381) @cindex Debugging, verbose output options.texi(,382) @vindex T2H_VERBOSE options.texi(,383) @opindex verbose options.texi(,384) @option{-verbose} options.texi(,385) if set, chatter about what we are doing. options.texi(,386) options.texi(,387) @c -------------------------------------------------------- options.texi(,388) @node OptionLanguage, OptionL2H, OptionVerbose, Options options.texi(,389) @section Language Support options.texi(,390) @cindex Language Support options.texi(,391) @cindex Support different languages options.texi(,392) @vindex $T2H_LANG options.texi(,393) @vindex $T2H_WORDS options.texi(,394) @opindex lang options.texi(,395) @option{-lang} options.texi(,396) For page titles, use options.texi(,397) @code{$T2H_WORDS->@{$T2H_LANG@}->@{...@}} as title. To add options.texi(,398) a new language, supply list of titles (see @var{$T2H_WORDS}), options.texi(,399) and use ISO 639 language codes (see e.g.@: perl module options.texi(,400) @file{Locale-Codes-1.02.tar.gz} for definitions). options.texi(,401) options.texi(,402) If you don't give a @option{-lang} then we got it from the options.texi(,403) Texinfo source file (@@documentlanguage options.texi(,404) @c Put a table with the language codes here! options.texi(,405) @c Or better put a reference into the Texinfo options.texi(,406) @c Manual, which has a table of ISO 639-Codes. options.texi(,407) @c options.texi(,408) @c Currently the @xref etc. does not work with options.texi(,409) @c external documents, cause we don't know options.texi(,410) @c reference (anchor) value or there is no way options.texi(,411) @c to get it. options.texi(,412) @c The following reference does only work correctly options.texi(,413) @c in Info!!! options.texi(,414) @pxref{documentlanguage,,,Texinfo}). If there is no options.texi(,415) @code{@@documentlanguage} we use the default @code{en} for options.texi(,416) the language. options.texi(,417) @c options.texi(,418) @c put some information about Month names etc. here options.texi(,419) @c $MONTH_NAMES !! options.texi(,420) @c Supplemental should be a naming scheme for variables in options.texi(,421) @c different languages (MONTH_NAMES_DE etc.) options.texi(,422) @c -------------------------------------------------------- options.texi(,423) @node OptionL2H, , OptionLanguage, Options options.texi(,424) @section La@TeX{}2HTML for @code{@@math} and @code{@@tex} options.texi(,425) @cindex La@TeX{}2HTML options.texi(,426) @cindex Conversion of @@math and @@tex options.texi(,427) @cindex @@tex options.texi(,428) @cindex @@math options.texi(,429) @vindex T2H_L2H options.texi(,430) @opindex l2h options.texi(,431) @option{-l2h} options.texi(,432) if set, uses @command{latex2html} for generation of math options.texi(,433) content. options.texi(,434) options.texi(,435) @menu options.texi(,436) * OptionL2HL2H:: Where to find La@TeX{}2HTML. options.texi(,437) * OptionL2HSkip:: Skip calling La@TeX{}2HTML. options.texi(,438) * OptionL2Htmp:: Temporary files for La@TeX{}2HTML. options.texi(,439) @end menu options.texi(,440) options.texi(,441) @c -------------------------------------------------------- options.texi(,442) @node OptionL2HL2H, OptionL2HSkip, OptionL2H, OptionL2H options.texi(,443) @subsection Where to find @command{latex2html} options.texi(,444) @cindex location, La@TeX{}2HTML options.texi(,445) @cindex La@TeX{}2HTML, location options.texi(,446) @vindex T2H_L2H_L2H options.texi(,447) @opindex l2h_l2h options.texi(,448) @option{-l2h_l2h} options.texi(,449) name/location of @command{latex2html} program. options.texi(,450) options.texi(,451) @c -------------------------------------------------------- options.texi(,452) @node OptionL2HSkip, OptionL2Htmp, OptionL2HL2H, OptionL2H options.texi(,453) @subsection Skip calling La@TeX{}2HTML options.texi(,454) @cindex La@TeX{}2HTML, skip calling options.texi(,455) @vindex T2H_L2H_SKIP options.texi(,456) @opindex l2h_skip options.texi(,457) @option{-l2h_skip} options.texi(,458) If set, skips actual call to @command{latex2html}: tries to options.texi(,459) reuse previously generated content, instead. options.texi(,460) options.texi(,461) @c -------------------------------------------------------- options.texi(,462) @node OptionL2Htmp, , OptionL2HSkip, OptionL2H options.texi(,463) @subsection Temporary files for La@TeX{}2HTML options.texi(,464) @cindex Temporary, La@TeX{}2HTML options.texi(,465) @cindex La@TeX{}2HTML, Temporary files options.texi(,466) @vindex T2H_L2H_TMP options.texi(,467) @opindex l2h_tmp options.texi(,468) @option{-l2h_tmp} options.texi(,469) If set, l2h uses this directory for temporary files. The options.texi(,470) path leading to this directory may not contain a dot (i.e., options.texi(,471) a @samp{.}); otherwise, l2h will fail. texi2html.texi(,416) @c ======================================================== texi2html.texi(,417) @node Reference, Indexop, Options, Top reference.texi(,1) @c reference.texi(,2) @c This file is part of the ``Texinfo to HTML Converter'' manual reference.texi(,3) @c which is part of the ``texi2html'' distribution. reference.texi(,4) @c reference.texi(,5) @c License: reference.texi(,6) @c Copyright (C) 1999, 2000 Free Software Foundation, Inc. reference.texi(,7) @c reference.texi(,8) @c This program is free software; you can redistribute it reference.texi(,9) @c and/or modify it under the terms of the GNU General Public reference.texi(,10) @c License as published by the Free Software Foundation; reference.texi(,11) @c either version 2 of the License, or (at your option) any reference.texi(,12) @c later version. reference.texi(,13) @c reference.texi(,14) @c This program is distributed in the hope that it will be reference.texi(,15) @c useful, but WITHOUT ANY WARRANTY; without even the implied reference.texi(,16) @c warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR reference.texi(,17) @c PURPOSE. See the GNU General Public License for more reference.texi(,18) @c details. reference.texi(,19) @c reference.texi(,20) @c You should have received a copy of the GNU General reference.texi(,21) @c Public License along with this program; if not, write to reference.texi(,22) @c the Free Software Foundation, Inc., 59 Temple Place, Suite reference.texi(,23) @c 330, Boston, MA 02111-1307 USA reference.texi(,24) @c reference.texi(,25) @c reference.texi(,26) @c Revisions: reference.texi(,27) @c reference.texi(,28) @c reference.texi(,29) @c Author: reference.texi(,30) @c Karl Heinz Marbaise reference.texi(,31) @c reference.texi(,32) @c Description: reference.texi(,33) @c Here you can find the description on all reference.texi(,34) @c subs in the original Perl file. reference.texi(,35) @c reference.texi(,36) @c ======================================================== reference.texi(,37) @appendix Function Reference reference.texi(,38) reference.texi(,39) @menu reference.texi(,40) * Refptocframe:: Print ToC Frame. reference.texi(,41) * Refpphead:: Print page head. reference.texi(,42) @end menu reference.texi(,43) reference.texi(,44) @c Global variables: reference.texi(,45) @c T2H_USER which is created throught main part reference.texi(,46) @c (texi2html.pl) reference.texi(,47) @c You can use it. (On Windows? On Unix ?) reference.texi(,48) @c -------------------------------------------------------- reference.texi(,49) @node Refptocframe,Refpphead,,Reference reference.texi(,50) @appendixsec Print ToC Frame reference.texi(,51) reference.texi(,52) reference.texi(,53) @defun T2H_DEFAULT_print_toc_frame (FileName) reference.texi(,54) @sp 1 reference.texi(,55) Description of the subroutine. reference.texi(,56) What does it do? Which parameters it needs etc. reference.texi(,57) @end defun reference.texi(,58) reference.texi(,59) reference.texi(,60) @c -------------------------------------------------------- reference.texi(,61) @node Refpphead,,Refptocframe,Reference reference.texi(,62) @appendixsec Print Page Head reference.texi(,63) @defun T2H_DEFAULT_print_page_head (FileName) reference.texi(,64) @sp 1 reference.texi(,65) Description of the subroutine. reference.texi(,66) What does it do? Which parameters it needs etc. reference.texi(,67) @end defun texi2html.texi(,419) @c ======================================================== texi2html.texi(,420) @c commandline option index. texi2html.texi(,421) @node Indexop, Indexvr, Reference, Top texi2html.texi(,422) @appendix Indices texi2html.texi(,423) @appendixsec Command Line Option Index texi2html.texi(,424) @printindex op texi2html.texi(,425) @c -------------------------------------------------------- texi2html.texi(,426) @node Indexvr, Indexcp, Indexop, Top texi2html.texi(,427) @appendixsec Variable Index texi2html.texi(,428) @printindex vr texi2html.texi(,429) @c -------------------------------------------------------- texi2html.texi(,430) @node Indexcp, , Indexvr, Top texi2html.texi(,431) @appendixsec Concept Index texi2html.texi(,432) @printindex cp texi2html.texi(,433) @c printindex init file options dito. texi2html.texi(,434) @c concept index. texi2html.texi(,435) @bye texi2html-1.82/test/texi2html_manual/res/texi2html/0000755000175000017500000000000011264347116024202 5ustar flichtenheldflichtenheldtexi2html-1.82/test/texi2html_manual/res/texi2html/texi2html.20000644000175000017500000000256511264347116026215 0ustar flichtenheldflichtenheld** `Overview' doesn't appear in menus ** `Top' is up for `Overview', but has no menu entry for this node ** `Installation' doesn't appear in menus ** `Top' is up for `Installation', but has no menu entry for this node ** `Customizing' doesn't appear in menus ** `Top' is up for `Customizing', but has no menu entry for this node ** `CustomizingExpand' doesn't appear in menus ** `Top' is up for `CustomizingExpand', but has no menu entry for this node ** `CustomizingPage' doesn't appear in menus ** `Top' is up for `CustomizingPage', but has no menu entry for this node ** `CustHTML' doesn't appear in menus ** `Top' is up for `CustHTML', but has no menu entry for this node ** `InitFile' doesn't appear in menus ** `Top' is up for `InitFile', but has no menu entry for this node ** `IFOs' doesn't appear in menus ** `Top' is up for `IFOs', but has no menu entry for this node ** `Options' doesn't appear in menus ** `Top' is up for `Options', but has no menu entry for this node ** `Reference' doesn't appear in menus ** `Top' is up for `Reference', but has no menu entry for this node ** `Indexop' doesn't appear in menus ** `Top' is up for `Indexop', but has no menu entry for this node ** `Indexvr' doesn't appear in menus ** `Top' is up for `Indexvr', but has no menu entry for this node ** `Indexcp' doesn't appear in menus ** `Top' is up for `Indexcp', but has no menu entry for this node texi2html-1.82/test/texi2html_manual/res/texi2html/texi2html.html0000644000175000017500000055151111264347116027020 0ustar flichtenheldflichtenheld Texinfo to HTML
    [Top] [Contents] [Index] [ ? ]

    Texi2html

    This Manual (Edition 0.21, last updated at 14. August 2000) describes the texi2html Perl script which converters Texinfo into HTML.

    Please send bug reports about this manual to Karl Heinz Marbaise khmarbaise@gmx.de. Please state exact version/edition of the manual (can be found at start of Texinfo source file; use the entry Id under Revisions).

    Please note:

     
    This manual is currently under
    construction and of course incomplete ;-)
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Overview about texi2html

    Texinfo is the official documentation format of the GNU project. It uses a single source file to produce both online information and printed output.

    It is often proposed to have a way to produce HTML from Texinfo sources, like the GNU-Info format. It is much simpler to create one converter instead of writing all documentation new in HTML, cause there is so much documentation in Texinfo all over the world.

    A few time ago makeinfo wasn’t able to produce HTML output format, but there are needth to have HTML. This was the borning hour for texi2html. The basic purpose of ‘texi2html’ is to convert Texinfo documents into HTML.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 Ways to get HTML

    You would like to HTML files out of your Texinfo files? There exist two ways which you can go. This first is to use makeinfo itself to produce HTML output. The second is to use texi2html.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2 Why ‘texi2html’ and not ‘makeinfo’?

    The basic idea of makeinfo’s HTML output was to get an readable HTML output. Nothing sophisticated nor good styling just readable.

    The current development of texi2html is going into different direction.

    The main purpose is to get better styling, better design etc. of the created HTML pages. This way is supported using differnt command line options and of course possible changings of the initialization file to fit your own needs.

    The main disadvantage of makeinfo’s HTML output is your getting only one big file. This is of course readable but not very usable. The problem of this is, while you like to have splitted chapters or nodes the Texinfo source has to be read at minimum twice times. This makes it impossible to implement this in makeinfo. This would result in complete new implementation of makeinfo’s source.

    In contrast to the HTML produced by makeinfo --html (the makeinfo program is part of the Texinfo distribution), the HTML output of ‘texi2html’ is highly configurable. Among other differences, with texi2html allows you to customize your entire page layout (like headers, footers, style sheets, etc), split documents at various levels, and use latex2html to convert @tex sections.

    texi2html should reasonably convert all Texinfo 4.0 constructs. If not, please send a bug report to texi2html@mathematik.uni-kl.de.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. Installation of texi2html

    description of the installation process. What do you need? How?


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. Customizing files

    Result based on using ‘-frames

     
    texi2html -V -frames texi2html.texi
    

    Explanation of the output differences against default, whatever this is ;-)


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4. Customizing what gets expanded

    Test starting.

    -expand info’ ‘-expand tex’ Take a look at optionexpand.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5. Customizing page layout

    This chapter is designed to help you to change the complete layout of the HTML output if you like to do so.

    a) General: Philosophy, and how it works
    aa) Navigation panels
    b) Top page
    c) Section pages


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.1 Tips how to create a new site design

    Here you can find information how you should work to pick up a new design with texi2html.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.2 Page Layout and the philosophy


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.2.1 Navigation panels

    Head and foot Navigation panels.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.3 Top Page


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.4 Section Pages


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.5 Misc pages

    Here you can find information about the creation of the ToC (Table Of content), About—Page etc. and specialy how to change them to get your own design.

    ToC T2H_DEFAULT_print_toc_frame in ‘texi2html.init


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.5.1 Table Of Contents

    The following code is the original code out of the initialization file (see section Initialization file).

     
    sub T2H_DEFAULT_print_toc_frame
    {
      my $fh = shift;
      &$T2H_print_page_head($fh);
      print $fh <<EOT;
    <H2>Content</H2>
    EOT
      print $fh map {s/HREF=/target=\"main\" HREF=/; $_;} @stoc_lines;
      print $fh "</BODY></HTML>\n";
    }
    

    As you can see it is very simple Perl Code, which can be changed more or less simple to fit you requirements (see section T2H_DEFAULT_print_page_head).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.5.2 Page header

    Page Head T2H_DEFAULT_print_page_head

     
    sub T2H_DEFAULT_print_page_head
    {
      my $fh = shift; 
      my $longtitle = "$T2H_THISDOC{title}: $T2H_NAME{This}";
      print $fh <<EOT;
    <HTML>
    $T2H_DOCTYPE
    <!-- Created on $T2H_TODAY by $THISPROG -->
    <!-- 
    $T2H_AUTHORS 
    -->
    <HEAD>
    <TITLE>$longtitle</TITLE>
    
    <META NAME="description" CONTENT="$longtitle">
    <META NAME="keywords" CONTENT="$longtitle">
    <META NAME="resource-type" CONTENT="document">
    <META NAME="distribution" CONTENT="global">
    <META NAME="Generator" CONTENT="$THISPROG">
    $T2H_EXTRA_HEAD
    </HEAD>
    
    <BODY $T2H_BODYTEXT>
    $T2H_AFTER_BODY_OPEN
    EOT
    }
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.5.3 Page footer

    Page Foot T2H_DEFAULT_print_page_foot


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6. Customizing HTML

    If you like to read the following section, it is assumed you are famillar with HTML. If not, you shouldn’t read this, cause you don’t know what we are talking about.

    Here you can find information how to change the HTML parts of a document. These are the header, body etc.

    These are the defaults which are part of the distribution as ‘texi2html.init’.

    How to do changes of the customization... needed steps.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.1 Body


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.1.1 Body Text

     
    $T2H_BODYTEXT =
        . 'LANG="' . $T2H_LANG . '" BGCOLOR="#FFFFFF" '
        . 'TEXT="#000000" LINK="#0000FF" '
        . 'VLINK="#800080" ALINK="#FF0000"';
    

    If you like to change the basic color combination, you can change the entry T2H_BODYTEXT.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.1.2 Body Text


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.1.3 After Body Text

     
    # text inserted after <BODY ...>
    $T2H_AFTER_BODY_OPEN = '';
    
    #text inserted before </BODY>
    $T2H_PRE_BODY_CLOSE = '';
    
    # this is used in footer
    $T2H_ADDRESS = "by <I>$T2H_USER</I> " if $T2H_USER;
    $T2H_ADDRESS .= "on <I>$T2H_TODAY</I>";
    
    # this is added inside <HEAD></HEAD> after <TITLE> and some META NAME stuff
    # can be used for <style> <script>, <meta> tags
    $T2H_EXTRA_HEAD = '';
    

    The default output into the HTML file. See section DocType.

    The following code is produced by T2H_DEFAULT_print_page_head.

    Detailed information can be found at Page header.

     
    <HTML>
    $T2H_DOCTYPE
    <!-- Created on $T2H_TODAY by $THISPROG -->
    <!-- 
    $T2H_AUTHORS
    -->
    <HEAD>
    <TITLE>$longtitle</TITLE>
    
    <META NAME="description" CONTENT="$longtitle">
    <META NAME="keywords" CONTENT="$longtitle">
    <META NAME="resource-type" CONTENT="document">
    <META NAME="distribution" CONTENT="global">
    <META NAME="Generator" CONTENT="$THISPROG">
    $T2H_EXTRA_HEAD
    </HEAD>
    
    <BODY $T2H_BODYTEXT>
    $T2H_AFTER_BODY_OPEN
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.2 Head


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7. Initialization file

    texi2html.init


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.1 The basics about init files

    Initialization options are read first from ‘/usr/local/etc/texi2htmlrc’ (the exact location being changeable with the ‘--sysconfdir=dir’ option to the configure script), then from ‘$HOME/.texi2htmlrc’, then any command-line options including ‘-init_file’ option; with later settings overriding earlier ones.

    The default initialization options are defined in the ‘texi2html.init’ file contained in the Texi2html distribution (which gets included near the beginning of the texi2html script that gets installed).

    To customize ‘texi2html’ it is best if you copy the appropriate sections from the ‘texi2html.init’ contents into an appropriate local initialization file, make the necessary changes there, and then have texi2html read this initialization file by one of the means described above.

    For an example on what you can produces with texi2html have a look at the following sites: http://www.singular.uni-kl.de/Manual/html/


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.2 Global initialization file


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.3 User initialization file


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.4 Loadable initialization file

    -init_file


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.5 Initialization file options

    This section describes in detail all options that can be used only in the initialization file (‘texi2html.init’), and cannot be specified on the command line. This means the only way to change those options is first to copy the original ‘texi2html.init’ to e.g. ‘texi2html.init.myown’ and make changes to fit your needs.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.5.1 Number sections.

    if set, and $T2H_NUMBER_SECTIONS is set, then use node names in menu entries, instead of section names

    $T2H_NODE_NAME_IN_MENU = 0;


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.5.2 Avoid menu redundancy

    If set, and menu entry equals menu description, then do not print menu description. Likewise, if node name equals entry name, do not print entry name. $T2H_AVOID_MENU_REDUNDANCY = 1;


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.5.3 Center Image

    if set, center @image by default otherwise, do not center by default $T2H_CENTER_IMAGE = 1;


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.5.4 Example Indent Cell

    used as indentation for block enclosing command @example, etc If not empty, must be enclosed in <td></td> $T2H_EXAMPLE_INDENT_CELL = ’<td>&nbsp;</td>’;


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.5.5 Small Example Indent

    same as above, only for @small $T2H_SMALL_EXAMPLE_INDENT_CELL = "<td>&nbsp;</td>";


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.5.6 Small Font Size

    # font size for @small $T2H_SMALL_FONT_SIZE = "-1";


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.5.7 Top Heading

    if non-empty, and no @..heading appeared in Top node, then use this as header for top node/section, otherwise use value of @settitle or @shorttitle (in that order) $T2H_TOP_HEADING = "";


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.5.8 Index Chapter

    if set, use this chapter for Index button, else use first chapter whose name matches index (case insensitive) $T2H_INDEX_CHAPTER = "";


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.5.9 Split Index

    if set and $T2H_SPLIT is set, then split index pages at the next letter after they have more than that many entries

    $T2H_SPLIT_INDEX = 100;


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.5.10 HREF Dir Instead File.

    if set (e.g., to ‘index.html’) replace HREF’s to this file (i.e., to ‘index.html’) by ‘./

    $T2H_HREF_DIR_INSTEAD_FILE = "";


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    8. Command Line Options


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    8.1 Debugging

    -debug

    debugging: 0 — no debugging; other values; see beginning of texi2html

    $DEBUG_TOC = 1; $DEBUG_INDEX = 2; $DEBUG_BIB = 4; $DEBUG_GLOSS = 8; $DEBUG_DEF = 16; $DEBUG_HTML = 32; $DEBUG_USER = 64; $DEBUG_L2H = 128;


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    8.2 DocType

    -doctype

     
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    8.3 Check

    -check’ if set, only check files and give the list of all things that look like untranslated Texinfo commands


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    8.4 Expand

    -expand’ if set to tex (or, info) expand @iftex and @tex (or, @ifinfo) sections else, neither expand @iftex, @tex, nor @ifinfo sections


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    8.5 Glossary

    -glossary’ if set, uses section named Footnotes for glossary


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    8.6 Invisible

    -invisible$T2H_INVISIBLE_MARK is the text used to create invisible destination anchors for index links (you can for instance use the ‘invisible.xbm’ file shipped with this program). This is a workaround for a known bug of many WWW browsers, including Netscape. For me, it works fine without it — on the contrary: if there, it inserts space between headers and start of text (obachman 3/99)

     
    $T2H_INVISIBLE_MARK = "";
    # $T2H_INVISIBLE_MARK = '&#160;';
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    8.7 Iso

    -iso

    if set, ISO8859 characters are used for special symbols (like Copyright ©, etc)

    $T2H_USE_ISO = 0;


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    8.8 Include Directory

    -I

    list directories where @include files are searched for (besides the directory of the doc file) additional ‘-I’ args are add to this list.

    @T2H_INCLUDE_DIRS = (".");


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    8.9 Top File

    -top_file’ uses file of this name for top-level file extension is manipulated appropriately, if necessary. If empty, ‘<basename of document>.html’ is used. Typically, you would set this to ‘index.html’.

    $T2H_TOP_FILE = "";


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    8.10 Table Of content File

    -toc_file’ uses file of this name for table of contents. File extension is manipulated appropriately, if necessary. If empty, ‘<basename of document>_toc.html’ is used.

    $T2H_TOC_FILE = "";


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    8.11 Frames

    -frames’ if set, output two additional files which use HTML 4.0 frames.

    $T2H_FRAMES = 0;


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    8.12 Menus

    -menu’ or ‘-nomenu’ if set, show the Texinfo menus

    $T2H_SHOW_MENU = 1;


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    8.13 Number sections

    -number’ ‘-nonumber’ if set, number sections and show section names and numbers in references and menus


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    8.14 Split

    -split section|chapter|none’ if set to section (resp. chapter) create one HTML file per (sub)section (resp. chapter) and separate pages for Top, ToC, Overview, Index, Glossary, About. Otherwise, create a monolithic HTML file that contains the whole document.

    #$T2H_SPLIT = ’section’; $T2H_SPLIT = undef;


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    8.15 Section navigation

    -section_navigation’| ‘-no-section_navigation

    if set, then navigation panels are printed at the beginning of each section and, possibly at the end (depending on whether or not there were more than $T2H_WORDS_IN_PAGE words on page). This is most useful if you do not want to have section navigation on ‘-split chapter


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    8.16 Subdirectory

    -subdir’ If set, then put result files in the specified directory. If not set, then result files are put into the current directory.

    $T2H_SUBDIR = undef;


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    8.17 Short extension

    -short_extn’ If this is set, then all HTML files will have extension ‘.htm’ instead of ‘.html’. This is helpful when shipping the document to DOS-based systems. $T2H_SHORTEXTN = 0;


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    8.18 Prefix

    -prefix’ Set the output file prefix, prepended to all ‘.html’, ‘.gif’ and ‘.pl’ files. By default, this is the basename of the document

    $T2H_PREFIX = "";


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    8.19 Output filename

    -o filename’|‘-out_file’ If set, generate monolithic document output HTML into ‘filename’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    8.20 Short Cross References

    -short_ref’ if set cross-references are given without section numbers


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    8.21 Index Summary

    -idx_sum’ If value is set, then for each @prinindex $what$docu_name_$what.idx’ is created which contains lines of the form $key\t$ref sorted alphabetically (case matters).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    8.22 Verbose output

    -verbose’ if set, chatter about what we are doing.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    8.23 Language Support

    -lang’ For page titles, use $T2H_WORDS->{$T2H_LANG}->{...} as title. To add a new language, supply list of titles (see $T2H_WORDS), and use ISO 639 language codes (see e.g. perl module ‘Locale-Codes-1.02.tar.gz’ for definitions).

    If you don’t give a ‘-lang’ then we got it from the Texinfo source file (@documentlanguage see (Texinfo)documentlanguage). If there is no @documentlanguage we use the default en for the language.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    8.24 LaTeX2HTML for @math and @tex

    -l2h’ if set, uses latex2html for generation of math content.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    8.24.1 Where to find latex2html

    -l2h_l2h’ name/location of latex2html program.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    8.24.2 Skip calling LaTeX2HTML

    -l2h_skip’ If set, skips actual call to latex2html: tries to reuse previously generated content, instead.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    8.24.3 Temporary files for LaTeX2HTML

    -l2h_tmp’ If set, l2h uses this directory for temporary files. The path leading to this directory may not contain a dot (i.e., a ‘.’); otherwise, l2h will fail.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A. Function Reference


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.1 Print ToC Frame

    Function: T2H_DEFAULT_print_toc_frame (FileName)

    Description of the subroutine. What does it do? Which parameters it needs etc.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.2 Print Page Head

    Function: T2H_DEFAULT_print_page_head (FileName)

    Description of the subroutine. What does it do? Which parameters it needs etc.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    B. Indices


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    B.1 Command Line Option Index

    Jump to:   C   D   E   F   G   I   L   M   N   O   P   S   T   V  
    Index Entry Section

    C
    check8.3 Check

    D
    debug8.1 Debugging
    doctype8.2 DocType

    E
    expand8.4 Expand

    F
    frames3. Customizing files
    frames8.11 Frames

    G
    glossary8.5 Glossary

    I
    I8.8 Include Directory
    idx_sum8.21 Index Summary
    init_file7. Initialization file
    init_file7.4 Loadable initialization file
    invisible8.6 Invisible
    iso8.7 Iso

    L
    l2h8.24 LaTeX2HTML for @math and @tex
    l2h_l2h8.24.1 Where to find latex2html
    l2h_skip8.24.2 Skip calling LaTeX2HTML
    l2h_tmp8.24.3 Temporary files for LaTeX2HTML
    lang8.23 Language Support

    M
    menu8.12 Menus

    N
    no-section_navigation8.15 Section navigation
    nomenu8.12 Menus
    nonumber8.13 Number sections
    number8.13 Number sections

    O
    o8.19 Output filename
    out_file8.19 Output filename

    P
    prefix8.18 Prefix

    S
    section_navigation8.15 Section navigation
    short_extn8.17 Short extension
    short_ref8.20 Short Cross References
    split8.14 Split
    sysconfdir7. Initialization file

    T
    toc_file8.10 Table Of content File
    top_file8.9 Top File

    V
    verbose8.22 Verbose output

    Jump to:   C   D   E   F   G   I   L   M   N   O   P   S   T   V  

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    B.2 Variable Index

    Jump to:   $  
    D   H   I   T  
    Index Entry Section

    $
    $T2H_LANG8.23 Language Support
    $T2H_WORDS8.23 Language Support

    D
    DEBUG_BIB8.1 Debugging
    DEBUG_DEF8.1 Debugging
    DEBUG_GLOSS8.1 Debugging
    DEBUG_HTML8.1 Debugging
    DEBUG_INDEX8.1 Debugging
    DEBUG_L2H8.1 Debugging
    DEBUG_TOC8.1 Debugging
    DEBUG_USER8.1 Debugging

    H
    HTML 4.0, frames8.11 Frames
    HTML, frames8.11 Frames

    I
    Include directories8.8 Include Directory

    T
    T2H_AFTER_BODY_OPEN6.1.3 After Body Text
    T2H_AVOID_MENU_REDUNDANCY7.5.2 Avoid menu redundancy
    T2H_BODYTEXT6.1.1 Body Text
    T2H_CENTER_IMAGE7.5.3 Center Image
    T2H_CHECK8.3 Check
    T2H_DOCTYPE8.2 DocType
    T2H_EXAMPLE_INDENT_CELL7.5.4 Example Indent Cell
    T2H_EXPAND8.4 Expand
    T2H_EXTRA_HEAD6.1.3 After Body Text
    T2H_FRAMES8.11 Frames
    T2H_HREF_DIR_INSTEAD_FILE7.5.10 HREF Dir Instead File.
    T2H_IDX_SUMMARY8.21 Index Summary
    T2H_INCLUDE_DIRS8.8 Include Directory
    T2H_INDEX_CHAPTER7.5.8 Index Chapter
    T2H_INVISIBLE_MARK8.6 Invisible
    T2H_L2H8.24 LaTeX2HTML for @math and @tex
    T2H_L2H_L2H8.24.1 Where to find latex2html
    T2H_L2H_SKIP8.24.2 Skip calling LaTeX2HTML
    T2H_L2H_TMP8.24.3 Temporary files for LaTeX2HTML
    T2H_NODE_NAME_IN_MENU7.5.1 Number sections.
    T2H_NUMBER_SECTIONS7.5.1 Number sections.
    T2H_NUMBER_SECTIONS8.13 Number sections
    T2H_OUT8.19 Output filename
    T2H_PREFIX8.18 Prefix
    T2H_PRE_BODY_CLOSE6.1.3 After Body Text
    T2H_SECTION_NAVIGATION8.15 Section navigation
    T2H_SHORTEXTN8.17 Short extension
    T2H_SHORT_REF8.20 Short Cross References
    T2H_SHOW_MENU8.12 Menus
    T2H_SMALL_EXAMPLE_INDENT_CELL7.5.5 Small Example Indent
    T2H_SMALL_FONT_SIZE7.5.6 Small Font Size
    T2H_SPLIT8.14 Split
    T2H_SPLIT_INDEX7.5.9 Split Index
    T2H_SUBDIR8.16 Subdirectory
    T2H_TOC_FILE8.10 Table Of content File
    T2H_TOP_FILE8.9 Top File
    T2H_TOP_HEADING7.5.7 Top Heading
    T2H_USE_GLOSSARY8.5 Glossary
    T2H_USE_ISO8.7 Iso
    T2H_VERBOSE8.22 Verbose output

    Jump to:   $  
    D   H   I   T  

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    B.3 Concept Index

    Jump to:   .   @  
    C   D   E   F   H   I   L   M   O   P   R   S   T   V  
    Index Entry Section

    .
    .texi2htmlrc, user initialization7. Initialization file

    @
    @math8.24 LaTeX2HTML for @math and @tex
    @tex8.24 LaTeX2HTML for @math and @tex

    C
    Chapter, Index7.5.8 Index Chapter
    configure7. Initialization file
    Conversion of @math and @tex8.24 LaTeX2HTML for @math and @tex
    Copyright8.7 Iso

    D
    Debugging8.1 Debugging
    Debugging, verbose output8.22 Verbose output

    E
    example, indentation7.5.4 Example Indent Cell
    example, small indent7.5.5 Small Example Indent
    extension, .htm8.17 Short extension
    extension, .html8.17 Short extension

    F
    File, split8.14 Split
    Filename, output8.19 Output filename
    Font Size, small7.5.6 Small Font Size

    H
    HREF Dir instead file7.5.10 HREF Dir Instead File.
    HTML, .htm extension8.17 Short extension
    HTML, .html extension8.17 Short extension
    HTML, Doc Type8.2 DocType
    HTML, Glossary8.5 Glossary
    HTML, Index8.21 Index Summary
    HTML, index.html8.9 Top File
    HTML, menu8.12 Menus
    HTML, Navigation8.15 Section navigation
    HTML, split8.14 Split

    I
    images, center7.5.3 Center Image
    Index, split7.5.9 Split Index
    Index, Summary8.21 Index Summary
    Installation2. Installation of texi2html
    Installation3. Customizing files
    invisible, Mark8.6 Invisible
    ISO88598.7 Iso

    L
    Language Support8.23 Language Support
    LaTeX2HTML8.24 LaTeX2HTML for @math and @tex
    LaTeX2HTML, location8.24.1 Where to find latex2html
    LaTeX2HTML, skip calling8.24.2 Skip calling LaTeX2HTML
    LaTeX2HTML, Temporary files8.24.3 Temporary files for LaTeX2HTML
    location, LaTeX2HTML8.24.1 Where to find latex2html

    M
    Mark, invisible8.6 Invisible
    menu, redundancy7.5.2 Avoid menu redundancy

    O
    Output filename8.19 Output filename
    Output, verbose8.22 Verbose output

    P
    Prefix8.18 Prefix

    R
    References, short8.20 Short Cross References

    S
    Section numbering8.13 Number sections
    sections without numbers8.20 Short Cross References
    Subdirectory8.16 Subdirectory
    Summary Index8.21 Index Summary
    Support different languages8.23 Language Support

    T
    Table of content file8.10 Table Of content File
    Temporary, LaTeX2HTML8.24.3 Temporary files for LaTeX2HTML
    texi2html.init7. Initialization file
    texi2htmlrc, global initialization7. Initialization file
    Texinfo, checking8.3 Check
    Texinfo, Glossary8.5 Glossary
    Texinfo, menu8.12 Menus
    Top Level file8.9 Top File

    V
    Verbose output8.22 Verbose output

    Jump to:   .   @  
    C   D   E   F   H   I   L   M   O   P   R   S   T   V  

    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    Short Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/texi2html_manual/custhtml-header.htmltexi0000644000175000017500000000063611264347116026347 0ustar flichtenheldflichtenheld $T2H_DOCTYPE $longtitle $T2H_EXTRA_HEAD $T2H_AFTER_BODY_OPEN texi2html-1.82/test/texi2html_manual/initfile.texi0000644000175000017500000000643611264347116024200 0ustar flichtenheldflichtenheld@c @c This file is part of the ``Texinfo to HTML Converter'' manual @c which is part of the ``texi2html'' distribution. @c @c License: @c Copyright (C) 1999, 2000 Free Software Foundation, Inc. @c @c This program is free software; you can redistribute it @c and/or modify it under the terms of the GNU General Public @c License as published by the Free Software Foundation; @c either version 2 of the License, or (at your option) any @c later version. @c @c This program is distributed in the hope that it will be @c useful, but WITHOUT ANY WARRANTY; without even the implied @c warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR @c PURPOSE. See the GNU General Public License for more @c details. @c @c You should have received a copy of the GNU General @c Public License along with this program; if not, write to @c the Free Software Foundation, Inc., 59 Temple Place, Suite @c 330, Boston, MA 02111-1307 USA @c @c @c Revisions: @c @c @c Author: @c Karl Heinz Marbaise @c @c Description: @c Here you can find the description on the @c initialization files. @c @c ======================================================== @chapter Initialization file @c @cindex configure @cindex texi2html.init @cindex texi2htmlrc, global initialization @cindex .texi2htmlrc, user initialization @c @opindex sysconfdir @opindex init_file @file{texi2html.init} @menu * InitFileBasics:: The basics about initialization files. * InitFileGlobal:: Global initialization file. * InitFileUser:: User initialization file. * InitFileLoad:: Loadable initialization file. @end menu @c -------------------------------------------------------- @node InitFileBasics,InitFileGlobal,InitFile,InitFile @section The basics about init files Initialization options are read first from @file{/usr/local/etc/texi2htmlrc} (the exact location being changeable with the @option{--sysconfdir=dir} option to the @command{configure} script), then from @file{$HOME/.texi2htmlrc}, then any command-line options including @option{-init_file} option; with later settings overriding earlier ones. The default initialization options are defined in the @file{texi2html.init} file contained in the @b{Texi2html} distribution (which gets included near the beginning of the @command{texi2html} script that gets installed). To customize @file{texi2html} it is best if you copy the appropriate sections from the @file{texi2html.init} contents into an appropriate local initialization file, make the necessary changes there, and then have @command{texi2html} read this initialization file by one of the means described above. For an example on what you can produces with @command{texi2html} have a look at the following sites: @uref{http://www.singular.uni-kl.de/Manual/html/} @c -------------------------------------------------------- @node InitFileGlobal,InitFileUser,InitFileBasics,InitFile @section Global initialization file @c -------------------------------------------------------- @node InitFileUser,InitFileLoad,InitFileGlobal,InitFile @section User initialization file @c -------------------------------------------------------- @node InitFileLoad,,InitFileUser,InitFile @section Loadable initialization file @opindex init_file @option{-init_file} @c @ref{InitFile} texi2html-1.82/test/texi2html_manual/tests.txt0000644000175000017500000000005511264347116023374 0ustar flichtenheldflichtenheldtexi texi2html.texi texi2html texi2html.texi texi2html-1.82/test/texi2html_manual/options.texi0000644000175000017500000003437211264347116024070 0ustar flichtenheldflichtenheld@c @c This file is part of the ``Texinfo to HTML Converter'' manual @c which is part of the ``texi2html'' distribution. @c @c License: @c Copyright (C) 1999, 2000 Free Software Foundation, Inc. @c @c This program is free software; you can redistribute it @c and/or modify it under the terms of the GNU General Public @c License as published by the Free Software Foundation; @c either version 2 of the License, or (at your option) any @c later version. @c @c This program is distributed in the hope that it will be @c useful, but WITHOUT ANY WARRANTY; without even the implied @c warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR @c PURPOSE. See the GNU General Public License for more @c details. @c @c You should have received a copy of the GNU General @c Public License along with this program; if not, write to @c the Free Software Foundation, Inc., 59 Temple Place, Suite @c 330, Boston, MA 02111-1307 USA @c @c @c Revisions: @c @c @c Author: @c Karl Heinz Marbaise @c @c Description: @c Here you can find the description on the @c command line options. @c @c ======================================================== @chapter Command Line Options @menu * OptionDebug:: Debugging. * OptionDocType:: DocType (HTML) * OptionCheck:: Checking files. * OptionExpand:: Expanding info, tex areas etc. * OptionGlossary:: Glossary. * OptionInvisible:: Invisible. * OptionIso:: Iso. * OptionInclude:: Include directories. * OptionTopFile:: Top File. * OptionTocFile:: Table of content File. * OptionFrames:: Frames. * OptionMenu:: Menus. * OptionNumber:: Number sections. * OptionSplit:: Splitting. * OptionSectionNavigation:: Navigation. * OptionSubDir:: Subdirectory. * OptionShortExt:: Short extension. * OptionPrefix:: Prefix. * OptionOutput:: Output. * OptionShortRef:: Short Ref. * OptionIndexSummary:: Index Summary. * OptionVerbose:: Verbose. * OptionLanguage:: Language. * OptionL2H:: La@TeX{}2HTML. @end menu @c -------------------------------------------------------- @node OptionDebug, OptionDocType, Options, Options @section Debugging @cindex Debugging @vindex DEBUG_TOC @vindex DEBUG_INDEX @vindex DEBUG_BIB @vindex DEBUG_GLOSS @vindex DEBUG_DEF @vindex DEBUG_HTML @vindex DEBUG_USER @vindex DEBUG_L2H @opindex debug @option{-debug} debugging: 0 --- no debugging; other values; see beginning of texi2html @var{$DEBUG_TOC} = 1; @var{$DEBUG_INDEX} = 2; @var{$DEBUG_BIB} = 4; @var{$DEBUG_GLOSS} = 8; @var{$DEBUG_DEF} = 16; @var{$DEBUG_HTML} = 32; @var{$DEBUG_USER} = 64; @var{$DEBUG_L2H} = 128; @c -------------------------------------------------------- @node OptionDocType, OptionCheck, OptionDebug, Options @section DocType @cindex HTML, Doc Type @opindex doctype @vindex T2H_DOCTYPE @option{-doctype} @example @end example @c -------------------------------------------------------- @node OptionCheck, OptionExpand, OptionDocType, Options @section Check @cindex Texinfo, checking @opindex check @vindex T2H_CHECK @option{-check} if set, only check files and give the list of all things that look like untranslated Texinfo commands @c -------------------------------------------------------- @node OptionExpand, OptionGlossary, OptionCheck, Options @section Expand @opindex expand @vindex T2H_EXPAND @option{-expand} if set to @strong{tex} (or, @strong{info}) expand @code{@@iftex} and @code{@@tex} (or, @code{@@ifinfo}) sections else, neither expand @code{@@iftex}, @code{@@tex}, nor @code{@@ifinfo} sections @c $T2H_EXPAND = "info"; @c -------------------------------------------------------- @node OptionGlossary, OptionInvisible, OptionExpand, Options @section Glossary @cindex HTML, Glossary @cindex Texinfo, Glossary @opindex glossary @vindex T2H_USE_GLOSSARY @option{-glossary} if set, uses section named @strong{Footnotes} for glossary @c -------------------------------------------------------- @node OptionInvisible, OptionIso, OptionGlossary, Options @section Invisible @cindex Mark, invisible @cindex invisible, Mark @opindex invisible @vindex T2H_INVISIBLE_MARK @option{-invisible} @var{$T2H_INVISIBLE_MARK} is the text used to create invisible destination anchors for index links (you can for instance use the @file{invisible.xbm} file shipped with this program). This is a workaround for a known bug of many @acronym{WWW} browsers, including Netscape. For me, it works fine without it --- on the contrary: if there, it inserts space between headers and start of text (obachman 3/99) @example $T2H_INVISIBLE_MARK = ""; # $T2H_INVISIBLE_MARK = ' '; @end example @c -------------------------------------------------------- @node OptionIso, OptionInclude, OptionInvisible, Options @section Iso @cindex ISO8859 @cindex Copyright @opindex iso @vindex T2H_USE_ISO @option{-iso} if set, ISO8859 characters are used for special symbols (like Copyright @code{@copyright{}}, etc) $T2H_USE_ISO = 0; @c -------------------------------------------------------- @node OptionInclude, OptionTopFile, OptionIso, Options @section Include Directory @vindex Include directories @opindex I @vindex T2H_INCLUDE_DIRS @option{-I} list directories where @code{@@include} files are searched for (besides the directory of the doc file) additional @option{-I} args are add to this list. @@T2H_INCLUDE_DIRS = ("."); @c -------------------------------------------------------- @node OptionTopFile, OptionTocFile, OptionInclude, Options @section Top File @cindex Top Level file @cindex HTML, index.html @opindex top_file @vindex T2H_TOP_FILE @option{-top_file} uses file of this name for top-level file extension is manipulated appropriately, if necessary. If empty, @file{.html} is used. Typically, you would set this to @file{index.html}. $T2H_TOP_FILE = ""; @c -------------------------------------------------------- @node OptionTocFile, OptionFrames, OptionTopFile, Options @section Table Of content File @cindex Table of content file @opindex toc_file @vindex T2H_TOC_FILE @option{-toc_file} uses file of this name for table of contents. File extension is manipulated appropriately, if necessary. If empty, @file{_toc.html} is used. $T2H_TOC_FILE = ""; @c -------------------------------------------------------- @node OptionFrames, OptionMenu, OptionTocFile, Options @section Frames @vindex HTML, frames @vindex HTML 4.0, frames @opindex frames @vindex T2H_FRAMES @option{-frames} if set, output two additional files which use HTML 4.0 @b{frames}. $T2H_FRAMES = 0; @c -------------------------------------------------------- @node OptionMenu, OptionNumber, OptionFrames, Options @section Menus @cindex HTML, menu @cindex Texinfo, menu @opindex menu @opindex nomenu @vindex T2H_SHOW_MENU @option{-menu} or @option{-nomenu} if set, show the Texinfo menus $T2H_SHOW_MENU = 1; @c -------------------------------------------------------- @node OptionNumber, OptionSplit, OptionMenu, Options @section Number sections @cindex Section numbering @opindex number @opindex nonumber @vindex T2H_NUMBER_SECTIONS @option{-number} @option{-nonumber} if set, number sections and show section names and numbers in references and menus @c Just think about it? @c @defvar $T2H_NUMBER_SECTIONS @c @c = 1; @c @end defvar @c -------------------------------------------------------- @node OptionSplit, OptionSectionNavigation, OptionNumber, Options @section Split @cindex HTML, split @cindex File, split @opindex split @vindex T2H_SPLIT @option{-split section|chapter|none} if set to @strong{section} (resp. @strong{chapter}) create one @acronym{HTML} file per (sub)section (resp. chapter) and separate pages for Top, ToC, Overview, Index, Glossary, About. Otherwise, create a monolithic @acronym{HTML} file that contains the whole document. #$T2H_SPLIT = 'section'; $T2H_SPLIT = undef; @c -------------------------------------------------------- @node OptionSectionNavigation, OptionSubDir, OptionSplit, Options @section Section navigation @cindex HTML, Navigation @opindex section_navigation @opindex no-section_navigation @vindex T2H_SECTION_NAVIGATION @option{-section_navigation}| @option{-no-section_navigation} if set, then navigation panels are printed at the beginning of each section and, possibly at the end (depending on whether or not there were more than @var{$T2H_WORDS_IN_PAGE} words on page). This is most useful if you do not want to have section navigation on @option{-split chapter} @c @vindex T2H_SECTION_NAVIGATION @c @defvar $T2H_SECTION_NAVIGATION @c = 1; @c @end defvar @c -------------------------------------------------------- @node OptionSubDir, OptionShortExt, OptionSectionNavigation, Options @section Subdirectory @cindex Subdirectory @vindex T2H_SUBDIR @option{-subdir} If set, then put result files in the specified directory. If not set, then result files are put into the current directory. @c #$T2H_SUBDIR = 'html'; @var{$T2H_SUBDIR} = undef; @c -------------------------------------------------------- @node OptionShortExt, OptionPrefix, OptionSubDir, Options @section Short extension @cindex HTML, .htm extension @cindex HTML, .html extension @cindex extension, .html @cindex extension, .htm @vindex T2H_SHORTEXTN @opindex short_extn @option{-short_extn} If this is set, then all @acronym{HTML} files will have extension @file{.htm} instead of @file{.html}. This is helpful when shipping the document to DOS-based systems. @var{$T2H_SHORTEXTN} = 0; @c -------------------------------------------------------- @node OptionPrefix, OptionOutput, OptionShortExt, Options @section Prefix @cindex Prefix @vindex T2H_PREFIX @opindex prefix @option{-prefix} Set the output file prefix, prepended to all @file{.html}, @file{.gif} and @file{.pl} files. By default, this is the basename of the document @var{$T2H_PREFIX} = ""; @c -------------------------------------------------------- @node OptionOutput, OptionShortRef, OptionPrefix, Options @section Output filename @cindex Output filename @cindex Filename, output @vindex T2H_OUT @opindex o @opindex out_file @option{-o filename}|@option{-out_file} If set, generate monolithic document output @acronym{HTML} into @file{filename}. @c -------------------------------------------------------- @node OptionShortRef, OptionIndexSummary, OptionOutput, Options @section Short Cross References @cindex References, short @cindex sections without numbers @vindex T2H_SHORT_REF @opindex short_ref @option{-short_ref} if set cross-references are given without section numbers @c -------------------------------------------------------- @node OptionIndexSummary, OptionVerbose, OptionShortRef, Options @section Index Summary @cindex Index, Summary @cindex Summary Index @cindex HTML, Index @vindex T2H_IDX_SUMMARY @opindex idx_sum @option{-idx_sum} If value is set, then for each @code{@@prinindex $what} @file{$docu_name_$what.idx} is created which contains lines of the form @strong{$key\t$ref} sorted alphabetically (case matters). @c -------------------------------------------------------- @node OptionVerbose, OptionLanguage, OptionIndexSummary, Options @section Verbose output @cindex Output, verbose @cindex Verbose output @cindex Debugging, verbose output @vindex T2H_VERBOSE @opindex verbose @option{-verbose} if set, chatter about what we are doing. @c -------------------------------------------------------- @node OptionLanguage, OptionL2H, OptionVerbose, Options @section Language Support @cindex Language Support @cindex Support different languages @vindex $T2H_LANG @vindex $T2H_WORDS @opindex lang @option{-lang} For page titles, use @code{$T2H_WORDS->@{$T2H_LANG@}->@{...@}} as title. To add a new language, supply list of titles (see @var{$T2H_WORDS}), and use ISO 639 language codes (see e.g.@: perl module @file{Locale-Codes-1.02.tar.gz} for definitions). If you don't give a @option{-lang} then we got it from the Texinfo source file (@@documentlanguage @c Put a table with the language codes here! @c Or better put a reference into the Texinfo @c Manual, which has a table of ISO 639-Codes. @c @c Currently the @xref etc. does not work with @c external documents, cause we don't know @c reference (anchor) value or there is no way @c to get it. @c The following reference does only work correctly @c in Info!!! @pxref{documentlanguage,,,Texinfo}). If there is no @code{@@documentlanguage} we use the default @code{en} for the language. @c @c put some information about Month names etc. here @c $MONTH_NAMES !! @c Supplemental should be a naming scheme for variables in @c different languages (MONTH_NAMES_DE etc.) @c -------------------------------------------------------- @node OptionL2H, , OptionLanguage, Options @section La@TeX{}2HTML for @code{@@math} and @code{@@tex} @cindex La@TeX{}2HTML @cindex Conversion of @@math and @@tex @cindex @@tex @cindex @@math @vindex T2H_L2H @opindex l2h @option{-l2h} if set, uses @command{latex2html} for generation of math content. @menu * OptionL2HL2H:: Where to find La@TeX{}2HTML. * OptionL2HSkip:: Skip calling La@TeX{}2HTML. * OptionL2Htmp:: Temporary files for La@TeX{}2HTML. @end menu @c -------------------------------------------------------- @node OptionL2HL2H, OptionL2HSkip, OptionL2H, OptionL2H @subsection Where to find @command{latex2html} @cindex location, La@TeX{}2HTML @cindex La@TeX{}2HTML, location @vindex T2H_L2H_L2H @opindex l2h_l2h @option{-l2h_l2h} name/location of @command{latex2html} program. @c -------------------------------------------------------- @node OptionL2HSkip, OptionL2Htmp, OptionL2HL2H, OptionL2H @subsection Skip calling La@TeX{}2HTML @cindex La@TeX{}2HTML, skip calling @vindex T2H_L2H_SKIP @opindex l2h_skip @option{-l2h_skip} If set, skips actual call to @command{latex2html}: tries to reuse previously generated content, instead. @c -------------------------------------------------------- @node OptionL2Htmp, , OptionL2HSkip, OptionL2H @subsection Temporary files for La@TeX{}2HTML @cindex Temporary, La@TeX{}2HTML @cindex La@TeX{}2HTML, Temporary files @vindex T2H_L2H_TMP @opindex l2h_tmp @option{-l2h_tmp} If set, l2h uses this directory for temporary files. The path leading to this directory may not contain a dot (i.e., a @samp{.}); otherwise, l2h will fail. texi2html-1.82/test/texi2html_manual/custpage.texi0000644000175000017500000001141511264347116024201 0ustar flichtenheldflichtenheld@c @c This file is part of the ``Texinfo to HTML Converter'' manual @c which is part of the ``texi2html'' distribution. @c @c License: @c Copyright (C) 1999, 2000 Free Software Foundation, Inc. @c @c This program is free software; you can redistribute it @c and/or modify it under the terms of the GNU General Public @c License as published by the Free Software Foundation; @c either version 2 of the License, or (at your option) any @c later version. @c @c This program is distributed in the hope that it will be @c useful, but WITHOUT ANY WARRANTY; without even the implied @c warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR @c PURPOSE. See the GNU General Public License for more @c details. @c @c You should have received a copy of the GNU General @c Public License along with this program; if not, write to @c the Free Software Foundation, Inc., 59 Temple Place, Suite @c 330, Boston, MA 02111-1307 USA @c @c @c Revisions: @c @c @c Author: @c Karl Heinz Marbaise @c @c Description: @c Here are the informations about customizing page @c layout. @c @c ======================================================== @chapter Customizing page layout This chapter is designed to help you to change the complete layout of the @acronym{HTML} output if you like to do so. a) General: Philosophy, and how it works@* aa) Navigation panels@* b) Top page@* c) Section pages@* @menu * TipsNewDesign:: . * CustPagePhil:: . * CustPagePhilNav:: . * CustPageTopPage:: . * CustPageSectionPages:: . * CustPageMiscPage:: . @end menu @c -------------------------------------------------------- @node TipsNewDesign,CustPagePhil,CustomizingPage,CustomizingPage @section Tips how to create a new site design Here you can find information how you should work to pick up a new design with @command{texi2html}. @c -------------------------------------------------------- @node CustPagePhil,CustPagePhilNav,TipsNewDesign,CustomizingPage @section Page Layout and the philosophy @menu * CustPagePhilNav:: Navigation panels. @end menu @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= @node CustPagePhilNav,CustPageTopPage,CustPagePhil,CustomizingPage @subsection Navigation panels Head and foot Navigation panels. @c -------------------------------------------------------- @node CustPageTopPage,CustPageSectionPages,CustPagePhilNav,CustomizingPage @section Top Page @c -------------------------------------------------------- @node CustPageSectionPages,CustPageMiscPage,CustPageTopPage,CustomizingPage @section Section Pages @c -------------------------------------------------------- @node CustPageMiscPage,CustPagePageHeadToc,CustPageSectionPages,CustomizingPage @section Misc pages Here you can find information about the creation of the @dfn{ToC} (@i{Table Of content}), About---Page etc. and specialy how to change them to get your own design. @acronym{ToC} @code{T2H_DEFAULT_print_toc_frame} in @file{texi2html.init} @menu * CustPagePageHeadToc:: . * CustPagePageHead:: . * CustPagePageFoot:: . @end menu @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= @node CustPagePageHeadToc,CustPagePageHead,CustPageMiscPage,CustPageMiscPage @subsection Table Of Contents The following code is the original code out of the initialization file (@pxref{InitFile,Initialization file}). @example sub T2H_DEFAULT_print_toc_frame @{ my $fh = shift; &$T2H_print_page_head($fh); print $fh <Content EOT print $fh map @{s/HREF=/target=\"main\" HREF=/; $_;@} @@stoc_lines; print $fh "\n"; @} @end example As you can see it is very simple Perl Code, which can be changed more or less simple to fit you requirements (@pxref{CustPagePageHead,,T2H_DEFAULT_print_page_head}). @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= @node CustPagePageHead,CustPagePageFoot,CustPagePageHeadToc,CustPageMiscPage @subsection Page header Page Head @code{T2H_DEFAULT_print_page_head} @c references on T2H_DOCTYPE @c T2H_AUTHORS @example sub T2H_DEFAULT_print_page_head @{ my $fh = shift; my $longtitle = "$T2H_THISDOC@{title@}: $T2H_NAME@{This@}"; print $fh < $T2H_DOCTYPE $longtitle $T2H_EXTRA_HEAD $T2H_AFTER_BODY_OPEN EOT @} @end example @c -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= @node CustPagePageFoot, ,CustPagePageHead,CustPageMiscPage @subsection Page footer Page Foot @code{T2H_DEFAULT_print_page_foot} texi2html-1.82/test/texi2html_manual/ifo.texi0000644000175000017500000001271111264347116023143 0ustar flichtenheldflichtenheld@c @c This file is part of the ``Texinfo to HTML Converter'' manual @c which is part of the ``texi2html'' distribution. @c @c License: @c Copyright (C) 1999, 2000 Free Software Foundation, Inc. @c @c This program is free software; you can redistribute it @c and/or modify it under the terms of the GNU General Public @c License as published by the Free Software Foundation; @c either version 2 of the License, or (at your option) any @c later version. @c @c This program is distributed in the hope that it will be @c useful, but WITHOUT ANY WARRANTY; without even the implied @c warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR @c PURPOSE. See the GNU General Public License for more @c details. @c @c You should have received a copy of the GNU General @c Public License along with this program; if not, write to @c the Free Software Foundation, Inc., 59 Temple Place, Suite @c 330, Boston, MA 02111-1307 USA @c @c @c Revisions: @c @c @c Author: @c Karl Heinz Marbaise @c @c Description: @c Here you can find the description on the @c initialization files options. @c @c -------------------------------------------------------- @section Initialization file options This section describes in detail all options that can be used only in the initialization file (@file{texi2html.init}), and cannot be specified on the command line. This means the only way to change those options is first to copy the original @file{texi2html.init} to e.g.@: @file{texi2html.init.myown} and make changes to fit your needs. @menu * IFOnumber:: Number sectioning. * IFOmenu:: Avoid menu redundancy. * IFOCenterImage:: Center Image. * IFOExampleIndentCell:: Example Indent Cell. * IFOSampleIndentCell:: Sample Indent Cell. * IFOSmallFontSize:: Small Font Size. * IFOTopHeading:: Top Heading. * IFOIndexChapter:: Index Chapter. * IFOSplitIndex:: Split Index. * IFOhrefDirInsteadFile:: HREF Dir Instead file. @end menu @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- @node IFOnumber, IFOmenu, IFOs, IFOs @subsection Number sections. @vindex T2H_NUMBER_SECTIONS @vindex T2H_NODE_NAME_IN_MENU if set, and @var{$T2H_NUMBER_SECTIONS} is set, then use node names in menu entries, instead of section names @var{$T2H_NODE_NAME_IN_MENU} = 0; @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- @node IFOmenu, IFOCenterImage, IFOnumber, IFOs @subsection Avoid menu redundancy @c not sure if correct? @cindex menu, redundancy @vindex T2H_AVOID_MENU_REDUNDANCY If set, and menu entry equals menu description, then do not print menu description. Likewise, if node name equals entry name, do not print entry name. @var{$T2H_AVOID_MENU_REDUNDANCY} = 1; @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- @node IFOCenterImage, IFOExampleIndentCell, IFOmenu, IFOs @subsection Center Image @cindex images, center @vindex T2H_CENTER_IMAGE if set, center @@image by default otherwise, do not center by default @var{$T2H_CENTER_IMAGE} = 1; @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- @node IFOExampleIndentCell, IFOSampleIndentCell, IFOCenterImage, IFOs @subsection Example Indent Cell @cindex example, indentation @vindex T2H_EXAMPLE_INDENT_CELL used as indentation for block enclosing command @code{@@example}, etc If not empty, must be enclosed in @code{} @var{$T2H_EXAMPLE_INDENT_CELL} = ' '; @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- @node IFOSampleIndentCell, IFOSmallFontSize, IFOExampleIndentCell, IFOs @subsection Small Example Indent @cindex example, small indent @vindex T2H_SMALL_EXAMPLE_INDENT_CELL same as above, only for @code{@@small} $T2H_SMALL_EXAMPLE_INDENT_CELL = " "; @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- @node IFOSmallFontSize, IFOTopHeading, IFOSampleIndentCell, IFOs @subsection Small Font Size @cindex Font Size, small @vindex T2H_SMALL_FONT_SIZE # font size for @@small $T2H_SMALL_FONT_SIZE = "-1"; @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- @node IFOTopHeading, IFOIndexChapter, IFOSmallFontSize, IFOs @subsection Top Heading @vindex T2H_TOP_HEADING if non-empty, and no @code{@@..heading} appeared in Top @c here should be a reference to Texinfo Manual @c @@heading ?? node, then use this as header for top node/section, otherwise use value of @code{@@settitle} or @code{@@shorttitle} (in that order) $T2H_TOP_HEADING = ""; @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- @node IFOIndexChapter, IFOSplitIndex, IFOTopHeading, IFOs @subsection Index Chapter @cindex Chapter, Index @vindex T2H_INDEX_CHAPTER if set, use this chapter for @strong{Index} button, else use first chapter whose name matches @strong{index} (case insensitive) $T2H_INDEX_CHAPTER = ""; @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- @node IFOSplitIndex, IFOhrefDirInsteadFile, IFOIndexChapter, IFOs @subsection Split Index @cindex Index, split @vindex T2H_SPLIT_INDEX if set and @var{$T2H_SPLIT} is set, then split index pages at the next letter after they have more than that many entries $T2H_SPLIT_INDEX = 100; @c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- @node IFOhrefDirInsteadFile, , IFOSplitIndex, IFOs @subsection HREF Dir Instead File. @c Not very good? :-/ @cindex HREF Dir instead file @vindex T2H_HREF_DIR_INSTEAD_FILE if set (e.g., to @file{index.html}) replace @strong{HREF}'s to this file (i.e., to @file{index.html}) by @file{./} $T2H_HREF_DIR_INSTEAD_FILE = ""; texi2html-1.82/test/texi2html_manual/version.texi0000644000175000017500000000014511264347116024051 0ustar flichtenheldflichtenheld@set UPDATED 15 September 2001 @set UPDATED-MONTH September 2001 @set EDITION 1.67 @set VERSION 1.67 texi2html-1.82/test/texi2html_manual/Makefile.am0000644000175000017500000000050211264347116023522 0ustar flichtenheldflichtenheldEXTRA_DIST = custhtml.texi ifo.texi options.texi texi2html.texi \ custpage.texi initfile.texi reference.texi version.texi \ custhtml-header.htmltexi \ tests.txt res DISTCLEANFILES = l2h_tmp_dir.init tests.log tests.out distclean-local: rm -rf out diffs dist-hook: rm -rf `find $(distdir)/res -name CVS` texi2html-1.82/test/Makefile.am0000644000175000017500000000372511264347122020254 0ustar flichtenheldflichtenheldEXTRA_DIST = run_test.sh tests.sh $(TESTS) long_tests \ coverage_macro.texi base_tests = \ macros sectionning formatting coverage encodings indices layout \ nested_formats contents \ $(htmlxref_cnf_tests) invalid long_tests = \ misc manuals xemacs_manual texi2html_manual tar_manual singular_manual htmlxref_cnf_tests = htmlxref htmlxref-only_mono htmlxref-only_split DIST_SUBDIRS = $(base_tests) $(long_tests) many_input_files SUBDIRS = . many_input_files copy-tests: copy-base copy-long cd many_input_files && $(MAKE) copy-tests copy-base: $(srcdir)/tests.sh -copy $(base_tests) cp $(srcdir)/formatting/res/texi_formatting/formatting.texi $(srcdir)/formatting/formatting_for_makeinfo.texi copy-long: $(srcdir)/tests.sh -copy $(long_tests) clean-tests: $(srcdir)/tests.sh -clean $(base_tests) $(long_tests) TESTS = base_tests # mimic automake check for an optional long-check: @srcdir=$(srcdir); export srcdir; \ tst=long_tests; failed=0; \ if test -f ./$$tst; then dir=./; \ elif test -f $$tst; then dir=; \ else dir="$(srcdir)/"; fi; \ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then :; \ else failed="1"; fi ; \ if test "$$failed" -ne 0; then \ echo "FAIL: long_test"; \ echo "========================================="; \ echo "Failure of long_tests"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "Please report to $(PACKAGE_BUGREPORT)"; \ fi; \ echo "========================================="; \ else \ echo "PASS: long_test"; \ echo "================"; \ echo "long_test passed"; \ echo "================"; \ fi ;\ test "$$failed" -eq 0; all-checks: check long-check # this is in order to have the files in .texinfo in the build dir all-local: for dir in $(htmlxref_cnf_tests); do \ $(MKDIR_P) $$dir/.texinfo/ ; \ if [ -f $$dir/.texinfo/htmlxref.cnf ]; then : ; \ else cp $(srcdir)/$$dir/htmlxref.cnf $$dir/.texinfo/ ; \ fi ; \ done clean-local: for dir in $(htmlxref_cnf_tests); do \ rm -rf $$dir/.texinfo/ ; \ done texi2html-1.82/test/htmlxref-only_split/0000755000175000017500000000000011264347123022235 5ustar flichtenheldflichtenheldtexi2html-1.82/test/htmlxref-only_split/Makefile.in0000644000175000017500000002057011264347123024306 0ustar flichtenheldflichtenheld# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = test/htmlxref-only_split DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DATE = @PACKAGE_DATE@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ REQUIRE_DATA_DUMPER = @REQUIRE_DATA_DUMPER@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_DATA_DUMPER = @USE_DATA_DUMPER@ USE_UNICODE = @USE_UNICODE@ USE_UNIDECODE = @USE_UNIDECODE@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ am__leading_dot = @am__leading_dot@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = htmlxref.cnf \ tests.txt res DISTCLEANFILES = l2h_tmp_dir.init tests.log tests.out all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/htmlxref-only_split/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu test/htmlxref-only_split/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-exec-am: install-html: install-html-am install-info: install-info-am install-man: install-pdf: install-pdf-am install-ps: install-ps-am installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic dist-hook \ distclean distclean-generic distclean-local distdir dvi dvi-am \ html html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am distclean-local: rm -rf out diffs dist-hook: rm -rf `find $(distdir)/res -name CVS` # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: texi2html-1.82/test/htmlxref-only_split/res/0000755000175000017500000000000011264347123023026 5ustar flichtenheldflichtenheldtexi2html-1.82/test/htmlxref-only_split/res/htmlxref_nodes/0000755000175000017500000000000011264347123026047 5ustar flichtenheldflichtenheldtexi2html-1.82/test/htmlxref-only_split/res/htmlxref_nodes/other-nodes.html0000644000175000017500000001026411264347123031167 0ustar flichtenheldflichtenheld Untitled Document: 1. Chapter with nodes
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter with nodes

     
    id: other-nodes
    

    Top Top

     
    target: #Top
    

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/htmlxref-only_split/res/htmlxref_nodes/test_refs_abt.html0000644000175000017500000001174011264347123031564 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/htmlxref-only_split/res/htmlxref_nodes/index.html0000644000175000017500000000326111264347123030046 0ustar flichtenheldflichtenheld Untitled Document: Top

    The node you are looking for is at Top.

    texi2html-1.82/test/htmlxref-only_split/res/htmlxref_nodes/local-node.html0000644000175000017500000000637011264347123030760 0ustar flichtenheldflichtenheld Untitled Document: local node
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    local node

     
    id: local-node
    

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/htmlxref-only_split/res/htmlxref_nodes/test_refs.20000644000175000017500000000000011264347123030116 0ustar flichtenheldflichtenheldtexi2html-1.82/test/htmlxref-only_split/res/htmlxref_nodes/test_refs.html0000644000175000017500000001151211264347123030733 0ustar flichtenheldflichtenheld Untitled Document: Test refs
    [Top] [Contents] [Index] [ ? ]

    Test refs

    Testing distant nodes

    a node (manual)a node

     
    mono : manual.html#a-node
    split: ../manual/a-node.html#a-node
    

    : (manual):

     
    mono : manual.html#_003a
    split: ../manual/_003a.html#_003a
    

    Top (manual)Top

     
    mono : manual.html#Top
    split: ../manual/index.html#Top
    

    Testing manual name

    ../manual/doc.texi (../manual/doc.texi)node

     
    mono : doc.html#node
    split: ../doc/node.html#node
    

    Testing local nodes

    !_"#$%&'()*+-./;<=>?[\]^_`|~ !_"#$%&'()*+-./;<=>?[\]^_`|~

     
    target: #_0021_005f_0022_0023_0024_0025_0026_0027_0028_0029_002a_002b_002d_002e_002f_003b_003c_003d_003e_003f_005b_005c_005d_005e_005f_0060_007c_007e
    

    Top Top

     
    target: #Top
    

    local node local node

     
    target: #local-node
    

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    ././@LongLink0000000000000000000000000000031500000000000011564 Lustar rootroottexi2html-1.82/test/htmlxref-only_split/res/htmlxref_nodes/_0021_005f_0022_0023_0024_0025_0026_0027_0028_0029_002a_002b_002d_002e_002f_003b_003c_003d_003e_003f_005b_005c_005d_005e_005f_0060_007c_007e.htmltexi2html-1.82/test/htmlxref-only_split/res/htmlxref_nodes/_0021_005f_0022_0023_0024_0025_0026_0027_0000644000175000017500000000671511264347123032756 0ustar flichtenheldflichtenheld Untitled Document: !_"#$%&'()*+-./;<=>?[\]^_`|~
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    !_"#$%&'()*+-./;<=>?[\]^_`|~

     
    id: _0021_005f_0022_0023_0024_0025_0026_0027_0028_0029_002a_002b_002d_002e_002f_003b_003c_003d_003e_003f_005b_005c_005d_005e_005f_0060_007c_007e
    

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/htmlxref-only_split/res/htmlxref/0000755000175000017500000000000011264347123024657 5ustar flichtenheldflichtenheldtexi2html-1.82/test/htmlxref-only_split/res/htmlxref/test_refs.20000644000175000017500000000000011264347123026726 0ustar flichtenheldflichtenheldtexi2html-1.82/test/htmlxref-only_split/res/htmlxref/test_refs.html0000644000175000017500000002256311264347123027553 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Test refs

    Testing distant nodes

    a node (manual)a node

     
    mono : manual.html#a-node
    split: ../manual/a-node.html#a-node
    

    : (manual):

     
    mono : manual.html#_003a
    split: ../manual/_003a.html#_003a
    

    Top (manual)Top

     
    mono : manual.html#Top
    split: ../manual/index.html#Top
    

    Testing manual name

    ../manual/doc.texi (../manual/doc.texi)node

     
    mono : doc.html#node
    split: ../doc/node.html#node
    

    Testing local nodes

    !_"#$%&'()*+-./;<=>?[\]^_`|~ !_"#$%&'()*+-./;<=>?[\]^_`|~

     
    target: #_0021_005f_0022_0023_0024_0025_0026_0027_0028_0029_002a_002b_002d_002e_002f_003b_003c_003d_003e_003f_005b_005c_005d_005e_005f_0060_007c_007e
    

    Top Test refs

     
    target: #Top
    

    local node local node

     
    target: #local-node
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter with nodes

     
    id: other-nodes
    

    Top Test refs

     
    target: #Top
    
     
    id: _0021_005f_0022_0023_0024_0025_0026_0027_0028_0029_002a_002b_002d_002e_002f_003b_003c_003d_003e_003f_005b_005c_005d_005e_005f_0060_007c_007e
    
     
    id: local-node
    

    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/htmlxref-only_split/tests.txt0000644000175000017500000000017211264347123024140 0ustar flichtenheldflichtenheldhtmlxref ../sectionning/test_refs.texi htmlxref_nodes ../sectionning/test_refs.texi --split node --use-nodes --node-files texi2html-1.82/test/htmlxref-only_split/htmlxref.cnf0000644000175000017500000000003711264347123024556 0ustar flichtenheldflichtenheldmanual split split-dir-manual/ texi2html-1.82/test/htmlxref-only_split/Makefile.am0000644000175000017500000000027211264347123024272 0ustar flichtenheldflichtenheldEXTRA_DIST = htmlxref.cnf \ tests.txt res DISTCLEANFILES = l2h_tmp_dir.init tests.log tests.out distclean-local: rm -rf out diffs dist-hook: rm -rf `find $(distdir)/res -name CVS` texi2html-1.82/test/formatting/0000755000175000017500000000000011264347123020364 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/redefine_need.init0000644000175000017500000000142611264347123024030 0ustar flichtenheldflichtenheld $misc_command{'need'}->{'keep'} = 1; $misc_command{'evenheading'}->{'keep'} = 1; $unknown = \&t2h_redefine_need_unknown; sub t2h_redefine_need_unknown($$$) { my $command = shift; my $line = shift; my $pass = shift; my ($result_line, $result, $result_text, $message); if ($command eq 'need' and $pass == 2) { my $arg = ''; if (($line =~ s/^\s+([0-9]+(\.[0-9]*)?)//) or ($line =~ s/\s+(\.[0-9]+)//)) { $arg = $1; $line =~ s/^\s+//; $message = "$command has the right arg: $arg\n"; } else { $message = "Bad arg for $command\n"; } $result_text = &$comment("$command: $arg"); return ($line, 1, $result_text, $message); } return ($line, 0, undef, undef); } texi2html-1.82/test/formatting/f--ile.jpeg0000644000175000017500000000000011264347123022272 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/html-title.texi0000644000175000017500000000025011264347123023337 0ustar flichtenheldflichtenheld\input texinfo @setfilename html-title.info @settitle @@title @sc{html} @code{test} @node Top @top Top of @@title @sc{html} @code{test} Top. Second paragraph. @bye texi2html-1.82/test/formatting/double_style_paragraph.texi0000644000175000017500000000026611264347123026002 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename double_style_paragraph.info @node Top @top 2 style commands enclosing 2 paragraphs @emph{@strong{ First para. Second para. } } @bye texi2html-1.82/test/formatting/images.texi0000644000175000017500000000271711264347123022533 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename images.info @macro files_char File with @@-commands and special characters: @c cannot test a file with newline, since perl says @c Unsuccessful stat on filename containing newline at ././../../texi2html.pl line 7375. @c with a noon reproducible path @c @image{f@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :} ,,,,ext@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :}}. @image{f@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :} ,,,,ext@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :}}. And also in alt, and with dimensions: @c @image{f@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :} ,1in, 1cm, alt @b{@dotless{@^{i}}--le@/.@.} a@*<"%@@@verb{: < & @ % " :} ,ext@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :}}. @image{f@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :} ,1in, 1cm, alt @b{@dotless{@^{i}}--le@/.@.} a@*<"%@@@verb{: < & @ % " :} ,ext@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :}}. @end macro @copying In copying. @image{f--ile}. Text in copying. @files_char{} @end copying @node Top @top top Insertcopying @insertcopying In normal context @image{f--ile}. On the same line, @code{f---ile}, @code{gr--a} extension @image{f---ile,,,,gr--a}. Image sparated from text: @image{f--ile} And the same, followed by a dot: @image{f--ile}. In example: @example Text. @code{f---ile} with jpeg extension. @image{f---ile,,,,jpeg}. @image{f--ile}. @files_char{} @end example @float In float. @image{f--ile}. @image{f--ile}. @end float @files_char{} @bye texi2html-1.82/test/formatting/quotation.texi0000644000175000017500000000304111264347123023300 0ustar flichtenheldflichtenheld\input texinfo.tex @c -*-texinfo-*- @setfilename quotation.info @node Top @top Quotations @quotation A quot---ation @end quotation @quotation Note A Note @end quotation @quotation note A note @end quotation @quotation Caution Caution @end quotation @quotation Important Important @end quotation @quotation Tip a Tip @end quotation @quotation Warning a Warning. @end quotation @quotation something @'e @TeX{} The something @'e @TeX{} is here. @end quotation @quotation @@ at the end of line @ A @@ at the end of the @@quotation line. @end quotation @quotation something, other thing something, other thing @end quotation @quotation Note, the note Note, the note @end quotation @quotation @end quotation @quotation Empty @end quotation @quotation @asis{} @end quotation @quotation @* @end quotation @example @quotation A quot---ation @end quotation @quotation Note A Note @end quotation @quotation note A note @end quotation @quotation Caution Caution @end quotation @quotation Important Important @end quotation @quotation Tip a Tip @end quotation @quotation Warning a Warning. @end quotation @quotation something @'e @TeX{} The something @'e @TeX{} is here. @end quotation @quotation @@ at the end of line @ A @@ at the end of the @@quotation line. @end quotation @quotation something, other thing something, other thing @end quotation @quotation Note, the note Note, the note @end quotation @quotation @end quotation @quotation Empty @end quotation @quotation @asis{} @end quotation @quotation @* @end quotation @end example @bye texi2html-1.82/test/formatting/f--ile.jpg0000644000175000017500000000000011264347123022125 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/tex.texi0000644000175000017500000000131611264347123022060 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top @top Tests @ifhtml Now tex on the same line @tex some $$ \chi^2 = \sum_{i=1}^N \left(y_i - (a + b x_i) \over \sigma_i\right)^2 $$ @end tex bidule Some text one the line following @@end tex @end ifhtml Now tex on the following line, valid fot tex (with @@end tex on a line). @tex some tex \TeX @end tex Same that @@html (but empty following line not ignored). Test of @@math Here some @math{{x^i}\over{\tan y}}. Maths with protected \: @math{a @\ b}. Maths with code @@-command: @math{@code{math code}} Maths with code @@-command and braces: @math{ \underline{@code{math \hbox{ code }}} \sum_{i}{\underline{f}}} @@\ outside of math @\ @bye texi2html-1.82/test/formatting/symbol_after_block.texi0000644000175000017500000000201411264347123025114 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename symbol_after_block.info @node Top @top Symbol after block Html: @html In html @end html. On the line. @html In html @end html@@ On the line. Verbatim: @verbatim In verbatim @end verbatim; @verbatim In verbatim @end verbatim@@ Table: @table @bullet @item a l--ine @end table+ @table @bullet @item a l--ine @end table@@ Itemize: @itemize @emph @item e--mph item @end itemize'' @itemize @emph @item e--mph item @end itemize@@ Multitable: @multitable @columnfractions 6 7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @end multitable^ @multitable @columnfractions 6 7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @end multitable@{ Flushleft: @flushleft flushleft @end flushleft! @flushleft flushleft @end flushleft@@ Copying: @copying Copying @end copying* @copying Copying @end copying@@ @insertcopying An html, all on one line: Hi, my name is @html Graham@end html. @bye texi2html-1.82/test/formatting/def_end_of_line.texi0000644000175000017500000000046511264347123024343 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename def_end_of_line.info @node Top @top Test for end of line protected in definition commands @deffn category deffn_name arguments @ more {args @ with end of line within} with 3 @@ @@@ {one last arg} deffn @end deffn @deffn category2 deffn_name2 arguments2 @ texi2html-1.82/test/formatting/multitables.texi0000644000175000017500000000070611264347123023607 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename multitables.info @node Top @top Test multitables @multitable {AAA} {BBB} @item truc @tab bidule @item begin item new paragraph in item. @tab begin tab new paragraph in tab. @end multitable @example @multitable {AAA} {BBB} @item truc @tab bidule example @item begin item example new paragraph in item. example @tab begin tab example new paragraph in tab. example @end multitable @end example @bye texi2html-1.82/test/formatting/html-extrali.texi0000644000175000017500000000024011264347123023665 0ustar flichtenheldflichtenheld\input texinfo @setfilename menuli.info @c extra li generated after @c From: Marius Groeger , 13nov98. @menu * entry1:: @end menu @bye texi2html-1.82/test/formatting/Makefile.in0000644000175000017500000002223211264347123022432 0ustar flichtenheldflichtenheld# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = test/formatting DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DATE = @PACKAGE_DATE@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ REQUIRE_DATA_DUMPER = @REQUIRE_DATA_DUMPER@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_DATA_DUMPER = @USE_DATA_DUMPER@ USE_UNICODE = @USE_UNICODE@ USE_UNIDECODE = @USE_UNIDECODE@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ am__leading_dot = @am__leading_dot@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = def_cmds.texi menus.texi quotation.texi \ float_with_at_commands.texi float_copying.texi macro_in_menu.texi \ ref_in_anchor.texi tex.texi block_EOL.texi detailmenus.texi \ commands_in_ifset.texi simplest.texi punctuation.texi def_end_of_line.texi \ center.texi tables.texi formats_in_menu.texi heading.texi quotes.texi \ indicateurl_paragraph.texi complex_command_in_simple_command.texi \ symbol_after_block.texi html-extrali.texi html-para.texi html-title.texi \ images.texi index_in_item_line_table.texi index_in_item_line_vtable.texi \ index_in_item_line_table_in_code.texi table_in_table_item.texi \ nested_formats.texi inter_item_commands.texi multitables.texi \ double_style_paragraph.texi \ f--ile.gif f--ile.jpeg f--ile.png f---ile.gr--a f--ile.jpg f--ile.txt \ simple_menu.init weird_quotes.init redefine_need.init file.css tests.txt res DISTCLEANFILES = l2h_tmp_dir.init tests.log tests.out all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/formatting/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu test/formatting/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-exec-am: install-html: install-html-am install-info: install-info-am install-man: install-pdf: install-pdf-am install-ps: install-ps-am installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic dist-hook \ distclean distclean-generic distclean-local distdir dvi dvi-am \ html html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am distclean-local: rm -rf out diffs dist-hook: rm -rf `find $(distdir)/res -name CVS` # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: texi2html-1.82/test/formatting/complex_command_in_simple_command.texi0000644000175000017500000000626011264347123030165 0ustar flichtenheldflichtenheld\input texinfo.tex @c -*-texinfo-*- @setfilename complex_command_in_simple_command.info @node Top @top Complex commands in simple commands The complex commands. Table @table @asis @item item line @end table After table. Multitable @multitable {truc} {machin} @item truc @tab machin @end multitable Enumerate. @enumerate 1 @item item @end enumerate After enumerate. Example @example Example @end example After example defun @defun name args... text @end defun After defun. Flushright @flushright in flushright @end flushright Centered line @center in centered line Before quotation @quotation a q--uotation @end quotation After quotation Before cartouche @cartouche Cartouche @end cartouche After cartouche @subheading In samp @samp{ in code Table @table @asis @item item line @end table After table. Multitable @multitable {truc} {machin} @item truc @tab machin @end multitable After multitable. Enumerate. @enumerate 1 @item item @end enumerate After enumerate. Example @example Example @end example After example defun @defun name args... text @end defun After defun. Flushright @flushright in flushright @end flushright Centered line @center in centered line Before quotation @quotation a q--uotation @end quotation After quotation Before cartouche @cartouche Cartouche @end cartouche After cartouche } @subheading in b @b{ in b Table @table @asis @item item line @end table After table. Multitable @multitable {truc} {machin} @item truc @tab machin @end multitable Enumerate. @enumerate 1 @item item @end enumerate After enumerate. Example @example Example @end example After example defun @defun name args... text @end defun After defun. Flushright @flushright in flushright @end flushright Centered line @center in centered line Before quotation @quotation a q--uotation @end quotation After quotation Before cartouche @cartouche Cartouche @end cartouche After cartouche } @subheading in code @code{ In code. Table @table @asis @item item line @end table After table. Multitable @multitable {truc} {machin} @item truc @tab machin @end multitable Enumerate. @enumerate 1 @item item @end enumerate After enumerate. Example @example Example @end example After example defun @defun name args... text @end defun After defun. Flushright @flushright in flushright @end flushright Centered line @center in centered line Before quotation @quotation a q--uotation @end quotation After quotation Before cartouche @cartouche Cartouche @end cartouche After cartouche } @subheading in b and samp @samp{ In samp. @b{ In b Table @table @asis @item item line @end table After table. Multitable @multitable {truc} {machin} @item truc @tab machin @end multitable Enumerate. @enumerate 1 @item item @end enumerate After enumerate. Example @example Example @end example After example defun @defun name args... text @end defun After defun. Flushright @flushright in flushright @end flushright Centered line @center in centered line Before quotation @quotation a q--uotation @end quotation After quotation Before cartouche @cartouche Cartouche @end cartouche After cartouche close b} and close samp } After the tests. @bye texi2html-1.82/test/formatting/def_cmds.texi0000644000175000017500000001577511264347123023042 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename def_cmds.info @node Top @top Test for definition commands @macro mymacro @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @deffn cate--gory de--ffn_name ar--guments @ more args @* even more so def--fn @end deffn @deffn fset @var{i} a g @deffnx {cmde} truc {} @deffnx Command {log trap} {} @deffnx Command { log trap1} {} @deffnx Command {log trap2 } {} @deffnx cmde @b{id ule} truc @deffnx cmde2 @b{id @samp{i} ule} truc @deffnx @b{id @samp{i} ule} @deffnx @deffnx aaa @deffnx {} {} @deffnx{} @deffnx{} machin @deffnx{} {bidule machin} @deffnx{truc} machin @deffnx{truc} { } @deffnx{truc} @deffnx{} {} @deffnx {truc} followed by a comment @c comment @deffnx truc machin bidule chose and } @deffnx truc machin bidule chose and } after @deffnx truc machin bidule chose and { @deffnx truc machin bidule chose and { and after Various deff lines @deffnx {truc} after a deff item @c comment text in def item for second def item @deffnx {truc} deffnx before end deffn @end deffn @deffn empty deffn @end deffn @deffn empty deffn with deffnx @deffnx empty deffnx @end deffn @defvr c--ategory d--efvr_name d--efvr @end defvr @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... d--eftypefn @end deftypefn @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... d--eftypeop @end deftypeop @deftypevr c--ategory t--ype d--eftypevr_name d--eftypevr @end deftypevr @defcv c--ategory c--lass d--efcv_name d--efcv @end defcv @defop c--ategory c--lass d--efop_name a--rguments... d--efop @end defop @deftp c--ategory d--eftp_name a--ttributes... d--eftp @end deftp @defun d--efun_name a--rguments... d--efun @end defun @defmac d--efmac_name a--rguments... d--efmac @end defmac @defspec d--efspec_name a--rguments... d--efspec @end defspec @defvar d--efvar_name d--efvar @end defvar @defopt d--efopt_name d--efopt @end defopt @deftypefun t--ype d--eftypefun_name a--rguments... d--eftypefun @end deftypefun @deftypevar t--ype d--eftypevar_name d--eftypevar @end deftypevar @defivar c--lass d--efivar_name d--efivar @end defivar @deftypeivar c--lass t--ype d--eftypeivar_name d--eftypeivar @end deftypeivar @defmethod c--lass d--efmethod_name a--rguments... d--efmethod @end defmethod @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... d--eftypemethod @end deftypemethod @deffn category name args { @ more args deffn with @{ @end deffn @deffn category name args } @ more args deffn with @} @end deffn @end macro @copying @mymacro{} @end copying @mymacro{} @example @mymacro{} @end example @c deffn @deffn Command @var{forward--char} @var{nchars} {argument2} {argument3} @ (arg in brace, [something @var{in v--ar}, @b{in, b} {, comma} a@var{pref} p]) last @end deffn @c defvr @defvr Variable fill-column {argument1} {argument2} @ (arg in brace, [something @var{in v--ar}, @b{in, b} {, comma} a@var{pref} p]) last @end defvr @c deftypefn @deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar}) @end deftypefn @deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar}) @ (arg in brace, {[something} @var{in v--ar}, @b{in, b} {, comma} a@var{pref} p]) ct@*@* last @end deftypefn @deftypefn {Library Function} int foobug {[something} @end deftypefn @deftypefn stacks private push (@var{s}:in out stack; @ @var{n}:in integer) ; ;barg aarg; ; end @end deftypefn @c deftypevr @deftypevr {Global Flag} int enable @ (arg in brace, [something @var{in v--ar}, @b{in, b} {, comma} a@var{pref} p]) last @end deftypevr @c deftp @deftp {Data type} pair car cdr @ (arg in brace, [something @var{in v--ar}, @b{in, b} {, comma} a@var{pref} p]) last @end deftp @c defcv @defcv {Class Option} Window border-pattern @ (arg in brace, [something @var{in v--ar}, @b{in, b} {, comma} a@var{pref} p]) last @end defcv @c deftypecv @deftypecv {Class Option2} Window @code{int} border-pattern @ (arg in brace, [something @var{in v--ar}, @b{in, b} {, comma} a@var{pref} p]) last @end deftypecv @c defop @defop Operation windows expose @ (arg in brace, [something @var{in v--ar}, @b{in, b} {, comma} a@var{pref} p]) last @end defop @c deftypeop @deftypeop Operation2 W,indow @code{int} expose @ (arg in brace, [something @var{in v--ar}, @b{in, b} {, comma} a@var{pref} p]) last @end deftypeop @deftypeop Operation5 Window @code{int} expose type arg @end deftypeop @deftypeop Operation3 {W,indow} @code{int} {e,xpose} type arg @end deftypeop @deftypeop Operation4 {,Window} @code{int} {,expose} type arg @end deftypeop @deftypeop Operation6 W,indow @code{int} e,xpose type arg @end deftypeop @deftypeop Operation7 ,Window @code{int} ,expose type arg @end deftypeop @deftypeop Operation13 {W)indow} @code{int} {e)xpose} type arg @end deftypeop @deftypeop Operation14 {)Window} @code{int} {)expose} type arg @end deftypeop @deftypeop Operation16 W)indow @code{int} e)xpose type arg @end deftypeop @deftypeop Operation17 )Window @code{int} )expose type arg @end deftypeop @deftypeop Operation18 {W;indow} @code{int} {e;xpose} type arg @end deftypeop @deftypeop Operation19 {;Window} @code{int} {;expose} type arg @end deftypeop @deftypeop Operation20 W;indow @code{int} e;xpose type arg @end deftypeop @deftypeop Operation21 ;Window @code{int} ;expose type arg @end deftypeop @deftypeop Command@code{com} {Window@code{int}} expose@var{exp} @end deftypeop @c deffn @deffn @end deffn @c defvr @defvr @end defvr @c deftypefn @deftypefn @end deftypefn @c deftypeop @deftypeop @end deftypeop @c deftypevr @deftypevr @end deftypevr @c defcv @defcv @end defcv @c deftypecv @deftypecv @end deftypecv @c defop @defop @end defop @c deftp @deftp @end deftp @c deffn @deffn @var{A1} @var{A2} @var{A3} @var{A4} @end deffn @deffn @code{A1} @code{A2} @code{A3} @code{A4} @end deffn @c defvr @defvr @var{A1} @var{A2} @var{A3} @var{A4} @end defvr @defvr @code{A1} @code{A2} @code{A3} @code{A4} @end defvr @c deftypefn @deftypefn @var{A1} @var{A2} @var{A3} @var{A4} @var{A5} @end deftypefn @deftypefn @code{A1} @code{A2} @code{A3} @code{A4} @code{A5} @end deftypefn @c deftypevr @deftypevr @var{A1} @var{A2} @var{A3} @var{A4} @var{A5} @end deftypevr @deftypevr @code{A1} @t{A2} @code{A3} @code{A4} @code{A5} @end deftypevr @c deftp @deftp @var{A1} @var{A2} @var{A3} @var{A4} @end deftp @deftp @code{A1} @code{A2} @code{A3} @code{A4} @end deftp @c defcv @defcv @var{A1} @var{A2} @var{A3} @var{A4} @var{A5} @end defcv @deftp @code{A1} @code{A2} @code{A3} @code{A4} @code{A5} @end deftp @c deftypecv @deftypecv @var{A1} @var{A2} @var{A3} @var{A4} @var{A5} @var{A6} @end deftypecv @deftypecv @code{A1} @code{A2} @option{A3} @code{A4} @code{A5} @code{A6} @end deftypecv @c defop @defop @var{A1} @var{A2} @var{A3} @var{A4} @var{A5} @end defop @defop @code{A1} @code{A2} @code{A3} @code{A4} @code{A5} @end defop @c deftypeop @deftypeop @var{A1} @var{A2} @var{A3} @var{A4} @var{A5} @var{A6} @end deftypeop @deftypeop @code{A1} @code{A2} @code{A3} @code{A4} @code{A5} @code{A6} @end deftypeop @printindex vr @printindex fn @bye texi2html-1.82/test/formatting/file.css0000644000175000017500000000021411264347123022012 0ustar flichtenheldflichtenheld/* a comment */ @import "file2.css" tv ; /* another comment @import */ @import ("strange\" ;file") ; @media tv { h3 {text-align: left} } texi2html-1.82/test/formatting/index_in_item_line_vtable.texi0000644000175000017500000000042411264347123026436 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename index_in_item_line_vtable.info @node Top @top test index entries in @@item @@table @vtable @asis @item @cindex index @option{opt} More text @item @cindex 2 index @option{nopt} Even more @end vtable @vindex another index @bye texi2html-1.82/test/formatting/center.texi0000644000175000017500000000315011264347123022536 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename center.info @node Top @top Test @@center A center @center Centered line And a center after empty line @center centered line after empty line And a center at end of line @center And an empty center @center @center @ref{Top} @center @ref{Top, ,title very long} @center Centered text with a footnote@footnote{This footnote shows an important feature of the centered text. @example @table @item item line @end table @end example} and text after the footnote. @table @item @center centered text in item table line @center centered text in table line @center centered line with item @item second item on center line @end table @center unclosed command on center line @code{in code Still in code} @center unclosed command on center line with paragraph @code{in code Still in code after paragraph} @center unclosed command on center line with other center @code{in code @center still in code on center line}. After code. @center unclosed command on center line with other center and paragraph @code{in code @center still in code on center line}. After code. @samp{begin samp @center center and end samp} after end of samp Empty double center: @center @center @center after first center @center after second center @center @samp{something @center end of samp} @center after first center @samp{@center after second center End of samp} @unnumbered Heading @multitable {AAA} {BBB} @item truc @tab bidule @center @item ctruc @tab cbidule @center @item cstruc @end multitable @center before the table @table @item item in center Line in center @item second item @end table @bye texi2html-1.82/test/formatting/quotes.texi0000644000175000017500000000334511264347123022604 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename quotes.info @ifset utf8 @documentencoding utf-8 @set print_utf8 This is utf8. @end ifset @ignore rm -rf quotes quotes-utf8 quotes-utf8.* quotes.dvi quotes.info quotes.?? \ quotes.toc quotes.log quotes.aux ~/src/texinfo/util/texi2dvi quotes.texi cp quotes.dvi quotes.dvi-save ~/src/texinfo/makeinfo/makeinfo quotes.texi ~/src/texinfo/makeinfo/makeinfo --html quotes.texi ~/src/texinfo/util/texi2dvi --texinfo='@set utf8' -o quotes-utf8.dvi quotes.texi mv quotes.dvi-save quotes.dvi ~/src/texinfo/makeinfo/makeinfo -D utf8 quotes.texi -o quotes-utf8.info ~/src/texinfo/makeinfo/makeinfo -D utf8 --html quotes.texi -o quotes-utf8 @end ignore @macro quotes ``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{} @* code: @code{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* asis: @asis{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* strong: @strong{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* kbd: @kbd{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* samp: @samp{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* @end macro @macro allquotes @quotes @example @@set txicodequoteundirected @@set txicodequotebacktick @end example @set txicodequoteundirected @set txicodequotebacktick @quotes @example @@clear txicodequoteundirected @@clear txicodequotebacktick @end example @clear txicodequoteundirected @clear txicodequotebacktick @quotes @end macro @copying @allquotes @end copying @titlepage Titlepage @insertcopying @end titlepage @node Top @top test quotes @value{print_utf8} @allquotes @example @allquotes @end example @bye texi2html-1.82/test/formatting/f--ile.png0000644000175000017500000000000011264347123022131 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/punctuation.texi0000644000175000017500000000031211264347123023624 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename punctuation.info @node Top @top Punctuation commands. foo vs.@: bar. colon :@:And something else. semi colon ;@:. And ? ?@:. Now ! !@:@@ but , ,@: @bye texi2html-1.82/test/formatting/ref_in_anchor.texi0000644000175000017500000000025311264347123024053 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename ref_in_anchor @node Top Top node anchor@{TOP@} @anchor{TOP @ref{Top}}. ref to TOP @@ref@{Top@}: @ref{TOP @ref{Top}}. @bye texi2html-1.82/test/formatting/res/0000755000175000017500000000000011264347123021155 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/inter_item_commands/0000755000175000017500000000000011264347123025175 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/inter_item_commands/inter_item_commands.html0000644000175000017500000003060311264347123032105 0ustar flichtenheldflichtenheld Untitled Document

    Test inter item ignored commands

    • e--mph item
    • i–tem 1
    • i–tem 2
    • T–ext before items.
    • bullet item
    1. e–numerate
    truc
    trouc
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
    fset: i a g
    Command: log trap1
    cmde2: id ‘i’ ule truc

    In deff item.

    a

    l–ine

    a
    b

    l–ine

    a
    b

    l–ine

    c
    d
    abb

    l–ine

    Texte before first item.

    abb

    cp

    Jump to:   A   B   C   I  
    Index Entry Section

    A
    also a cindex in itemizeTest inter item ignored commands
    also a cindex in itemizeTest inter item ignored commands

    B
    between deffnxTest inter item ignored commands

    C
    cindex in deff itemTest inter item ignored commands
    cindex in tableTest inter item ignored commands
    cindex in tableTest inter item ignored commands

    I
    index entry between empty linesTest inter item ignored commands
    index entry between item and itemxTest inter item ignored commands
    index entry right after @itemTest inter item ignored commands
    index entry within itemizeTest inter item ignored commands
    index entry within multitableTest inter item ignored commands

    Jump to:   A   B   C   I  

    fn

    Jump to:   A   B   C   D   I   L  
    Index Entry Section

    A
    aTest inter item ignored commands

    B
    bTest inter item ignored commands

    C
    cTest inter item ignored commands

    D
    dTest inter item ignored commands

    I
    iTest inter item ignored commands
    id ‘i’ uleTest inter item ignored commands

    L
    log trap1Test inter item ignored commands

    Jump to:   A   B   C   D   I   L  

    vr

    Jump to:   A   B  
    Index Entry Section

    A
    aTest inter item ignored commands
    aTest inter item ignored commands

    B
    bTest inter item ignored commands

    Jump to:   A   B  

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/inter_item_commands/inter_item_commands.20000644000175000017500000000000011264347123031266 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/float_xml/0000755000175000017500000000000011264347123023142 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/float_xml/float.20000644000175000017500000000006411264347123024332 0ustar flichtenheldflichtenheldi18n: missing string See i18n: missing string see texi2html-1.82/test/formatting/res/float_xml/float.xml0000644000175000017500000002610311264347123024773 0ustar flichtenheldflichtenheld float.xml Top chapter (dir) Test floats A list of floats at the begining. After the listoffloats. chapter chapter Unnumbered Unnumbered Chapter with unnumbsubsec Chapter with unnumbsubsec list of floats list of floats Text An example of float &enddots; An example. example A multitable. 6 8 truc bidule truc bidule An index entry float example A table. truc line
    An itemize. truc line A ref. See Topxref Text with features. A footnote. footnote Text with features . &tex; and téîan_url and it is @verb &space;a word &eosexcl;@ Æ. An example of float caption&enddots; An example. example A table. truc line
    A multitable. 6 8 truc bidule truc bidule An index entry float example in caption An itemize. truc line A ref. See Topxref Text with features caption. A footnote. footnote Text with features caption . &tex; and téîan_url and it is @verb &space;a word &eosexcl;@ Æ. &tex; and téîan_url and it is @verb &space;a word &eosexcl;@ Æ.
    Text No label but caption and shortcaption. No label No label No type but caption and shortcaption. No type No type No type but label and no caption nor shortcaption. No label, no type, no caption no shortcaption. No label, no type, but caption and shortcaption. No label, no type, but caption and shortcaption. No label, no type, but caption and shortcaption. Second float with no type. No type 2 No type 2 Warning A warning A warning A warning
    chapter Unnumbered Top Top A chapter Text Text in chapter Text in chapter Text Float text of a float with a lot of features. An example of float caption&enddots; 2 An example 2. example 2 A table 2. truc 2 line 2
    A multitable 2. 6 8 truc 2 bidule truc 2 bidule An index entry 2 float example in caption 2 An itemize 2. truc 2 line A ref 2. See Topxref Text with features caption. A footnote 2. footnote Text with features caption 2 . &tex; and téîan_url and it is @verb &space;a word &eosexcl;@ Æ.
    théorème A théorème A théorème float with no type. No type in chapter No type in chapter Warning A warning A warning in chapter A warning in chapter section section
    section chapter
    A section Text A text in float no caption a label a type.
    Unnumbered Chapter with unnumbsubsec chapter Top Unnumbered Section within unnumbered Section within unnumbered Text unnum unnumbered float unnumbered float float with no type. No type in unnumbered No type in unnumbered Section within unnumbered Unnumbered
    Section within unnumbered Text Section within unnumbered Section within unnumbered Section within unnumbered
    Chapter with unnumbsubsec list of floats Unnumbered Top Chapter with unnumbsubsec unnumbered sec unnumbered sec Text Chap Chapter with subsec Chapter with subsec unnumbered sec Chapter with unnumbsubsec unnumbered sec Text Chap unnumbered sec float unnumbered sec float float with no type. No type in unnumbered subsec in chapter No type in unnumbered subsec in chapter list of floats Chapter with unnumbsubsec Top list of floats See text in section. And (see text in chapter). See text with a lot of features. And now a ref (without manual or printed manual) text with a lot of featurescross reftitle. And now a ref (with manual without printed manual) text with a lot of featurescross reftitlemanual. And now a ref (without manual with a printed manual) text with a lot of featurescross reftitleprinted manual title. A ref to float without type label but no type. cp
    texi2html-1.82/test/formatting/res/texi_formatting/0000755000175000017500000000000011264347123024360 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_formatting/formatting.20000644000175000017500000004506011264347123026622 0ustar flichtenheldflichtenheld# Popped `code' in ifset/ifclear # Popped `ogonek' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ogonek' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `comma' in ifset/ifclear # Popped `enddots' in ifset/ifclear # Popped `acronym' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `comma' in ifset/ifclear # Popped `comma' in ifset/ifclear # Popped `b' in ifset/ifclear # Popped `abbr' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `comma' in ifset/ifclear # Popped `abbr' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `minus' in ifset/ifclear # Popped `' in ifset/ifclear # Popped `' in ifset/ifclear # Popped `' in ifset/ifclear # Popped `math' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `verb' in ifset/ifclear # Popped `image' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `verb' in ifset/ifclear # Popped `b' in ifset/ifclear # Popped `image' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `verb' in ifset/ifclear # Popped `verb' in ifset/ifclear # Popped `image' in ifset/ifclear # Popped `dotless' in ifset/ifclear # Popped `dotless' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `dotless' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `dotless' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `w' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `image' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `image' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `image' in ifset/ifclear # Popped `ifvalue' in ifset/ifclear # Popped `' in ifset/ifclear # Popped `' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `inforef' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `inforef' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `inforef' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `inforef' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ogonek' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ogonek' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `comma' in ifset/ifclear # Popped `enddots' in ifset/ifclear # Popped `acronym' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `comma' in ifset/ifclear # Popped `comma' in ifset/ifclear # Popped `b' in ifset/ifclear # Popped `abbr' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `comma' in ifset/ifclear # Popped `abbr' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `minus' in ifset/ifclear # Popped `' in ifset/ifclear # Popped `' in ifset/ifclear # Popped `' in ifset/ifclear # Popped `math' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `verb' in ifset/ifclear # Popped `image' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `verb' in ifset/ifclear # Popped `b' in ifset/ifclear # Popped `image' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `verb' in ifset/ifclear # Popped `verb' in ifset/ifclear # Popped `image' in ifset/ifclear # Popped `dotless' in ifset/ifclear # Popped `dotless' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `dotless' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `dotless' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `w' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `image' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `image' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `image' in ifset/ifclear # Popped `ifvalue' in ifset/ifclear # Popped `' in ifset/ifclear # Popped `' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `inforef' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `inforef' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `inforef' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `inforef' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ogonek' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ogonek' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `comma' in ifset/ifclear # Popped `enddots' in ifset/ifclear # Popped `acronym' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `comma' in ifset/ifclear # Popped `comma' in ifset/ifclear # Popped `b' in ifset/ifclear # Popped `abbr' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `comma' in ifset/ifclear # Popped `abbr' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `minus' in ifset/ifclear # Popped `' in ifset/ifclear # Popped `' in ifset/ifclear # Popped `' in ifset/ifclear # Popped `math' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `verb' in ifset/ifclear # Popped `image' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `verb' in ifset/ifclear # Popped `b' in ifset/ifclear # Popped `image' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `verb' in ifset/ifclear # Popped `verb' in ifset/ifclear # Popped `image' in ifset/ifclear # Popped `dotless' in ifset/ifclear # Popped `dotless' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `dotless' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `dotless' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `w' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `image' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `image' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `image' in ifset/ifclear # Popped `ifvalue' in ifset/ifclear # Popped `' in ifset/ifclear # Popped `' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `inforef' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `inforef' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `inforef' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `inforef' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ogonek' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ogonek' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `comma' in ifset/ifclear # Popped `enddots' in ifset/ifclear # Popped `acronym' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `comma' in ifset/ifclear # Popped `comma' in ifset/ifclear # Popped `b' in ifset/ifclear # Popped `abbr' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `comma' in ifset/ifclear # Popped `abbr' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `minus' in ifset/ifclear # Popped `' in ifset/ifclear # Popped `' in ifset/ifclear # Popped `' in ifset/ifclear # Popped `math' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `verb' in ifset/ifclear # Popped `image' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `verb' in ifset/ifclear # Popped `b' in ifset/ifclear # Popped `image' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `verb' in ifset/ifclear # Popped `verb' in ifset/ifclear # Popped `image' in ifset/ifclear # Popped `dotless' in ifset/ifclear # Popped `dotless' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `dotless' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `dotless' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `w' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `image' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `image' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `image' in ifset/ifclear # Popped `ifvalue' in ifset/ifclear # Popped `' in ifset/ifclear # Popped `' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `inforef' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `inforef' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `inforef' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `inforef' in ifset/ifclear ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) texi2html-1.82/test/formatting/res/texi_formatting/formatting.passfirst0000644000175000017500000017454211264347123030507 0ustar flichtenheldflichtenheldformatting.texi(,2) @setfilename formatting.info formatting.texi(,3) @node Top formatting.texi(,4) @top Top section formatting.texi(,5) formatting.texi(,6) @menu formatting.texi(,7) * chapter:: chapter formatting.texi(,8) formatting.texi(,9) Menu comment formatting.texi(,10) formatting.texi(,11) * description:chapter2. Chapter 2 formatting.texi(,12) @end menu formatting.texi(,13) formatting.texi(,15) formatting.texi(,20) formatting.texi(,33) formatting.texi(,34) Insertcopying in normal text formatting.texi(,35) @insertcopying formatting.texi(,36) formatting.texi(,37) Normal text formatting.texi(mymacro,38) formatting.texi(mymacro,38) < formatting.texi(mymacro,38) > formatting.texi(mymacro,38) " formatting.texi(mymacro,38) & formatting.texi(mymacro,38) ' formatting.texi(mymacro,38) ` formatting.texi(mymacro,38) formatting.texi(mymacro,38) ``simple-double--three---four----''@* formatting.texi(mymacro,38) code: @code{``simple-double--three---four----''} @* formatting.texi(mymacro,38) asis: @asis{``simple-double--three---four----''} @* formatting.texi(mymacro,38) strong: @strong{``simple-double--three---four----''} @* formatting.texi(mymacro,38) kbd: @kbd{``simple-double--three---four----''} @* formatting.texi(mymacro,38) formatting.texi(mymacro,38) `@w{}`simple-double-@w{}-three---four----'@w{}'@* formatting.texi(mymacro,38) formatting.texi(mymacro,38) @cindex --option formatting.texi(mymacro,38) @cindex `` formatting.texi(mymacro,38) @findex `` formatting.texi(mymacro,38) @findex --foption formatting.texi(mymacro,38) formatting.texi(mymacro,38) @@"u @"u formatting.texi(mymacro,38) @@"@{U@} @"{U} formatting.texi(mymacro,38) @@~n @~n formatting.texi(mymacro,38) @@^a @^a formatting.texi(mymacro,38) @@'e @'e formatting.texi(mymacro,38) @@=o @=o formatting.texi(mymacro,38) @@`i @`i formatting.texi(mymacro,38) @@'@{e@} @'{e} formatting.texi(mymacro,38) @@'@{@@dotless@{i@}@} @'{@dotless{i}} formatting.texi(mymacro,38) @@dotless@{i@} @dotless{i} formatting.texi(mymacro,38) @@dotless@{j@} @dotless{j} formatting.texi(mymacro,38) @@`@{@@=E@} @`{@=E} formatting.texi(mymacro,38) @@l@{@} @l{} formatting.texi(mymacro,38) @@,@{@@'C@} @,{@'C} formatting.texi(mymacro,38) @@,c @,c formatting.texi(mymacro,38) @@,c@@"u @,c@"u @* formatting.texi(mymacro,38) formatting.texi(mymacro,38) @@* @* formatting.texi(mymacro,38) @@ followed by a space formatting.texi(mymacro,38) @ formatting.texi(mymacro,38) @@ followed by a tab formatting.texi(mymacro,38) @ formatting.texi(mymacro,38) @@ followed by a new line formatting.texi(mymacro,38) @ formatting.texi(mymacro,38) @code{@@-} @- formatting.texi(mymacro,38) @code{@@|} @| formatting.texi(mymacro,38) @code{@@:} @: formatting.texi(mymacro,38) @code{@@!} @! formatting.texi(mymacro,38) @code{@@?} @? formatting.texi(mymacro,38) @code{@@.} @. formatting.texi(mymacro,38) @code{@@@@} @@ formatting.texi(mymacro,38) @code{@@@}} @} formatting.texi(mymacro,38) @code{@@@{} @{ formatting.texi(mymacro,38) @code{@@/} @/ formatting.texi(mymacro,38) formatting.texi(mymacro,38) foo vs.@: bar. formatting.texi(mymacro,38) colon :@:And something else. formatting.texi(mymacro,38) semi colon ;@:. formatting.texi(mymacro,38) And ? ?@:. formatting.texi(mymacro,38) Now ! !@:@@ formatting.texi(mymacro,38) but , ,@: formatting.texi(mymacro,38) formatting.texi(mymacro,38) @@TeX @TeX{} formatting.texi(mymacro,38) @@LaTeX @LaTeX{} formatting.texi(mymacro,38) @@bullet @bullet{} formatting.texi(mymacro,38) @@copyright @copyright{} formatting.texi(mymacro,38) @@dots @dots{} formatting.texi(mymacro,38) @@enddots @enddots{} formatting.texi(mymacro,38) @@equiv @equiv{} formatting.texi(mymacro,38) @@error @error{} formatting.texi(mymacro,38) @@expansion @expansion{} formatting.texi(mymacro,38) @@minus @minus{} formatting.texi(mymacro,38) @@point @point{} formatting.texi(mymacro,38) @@print @print{} formatting.texi(mymacro,38) @@result @result{} formatting.texi(mymacro,38) @@today @today{} formatting.texi(mymacro,38) @@aa @aa{} formatting.texi(mymacro,38) @@AA @AA{} formatting.texi(mymacro,38) @@ae @ae{} formatting.texi(mymacro,38) @@oe @oe{} formatting.texi(mymacro,38) @@AE @AE{} formatting.texi(mymacro,38) @@OE @OE{} formatting.texi(mymacro,38) @@o @o{} formatting.texi(mymacro,38) @@O @O{} formatting.texi(mymacro,38) @@ss @ss{} formatting.texi(mymacro,38) @@l @l{} formatting.texi(mymacro,38) @@L @L{} formatting.texi(mymacro,38) @@exclamdown @exclamdown{} formatting.texi(mymacro,38) @@questiondown @questiondown{} formatting.texi(mymacro,38) @@pounds @pounds{} formatting.texi(mymacro,38) @@registeredsymbol @registeredsymbol{} formatting.texi(mymacro,38) @@ordf @ordf{} formatting.texi(mymacro,38) @@ordm @ordm{} formatting.texi(mymacro,38) @@comma @comma{} formatting.texi(mymacro,38) @@quotedblleft @quotedblleft{} formatting.texi(mymacro,38) @@quotedblright @quotedblright{} formatting.texi(mymacro,38) @@quoteleft @quoteleft{} formatting.texi(mymacro,38) @@quoteright @quoteright{} formatting.texi(mymacro,38) @@quotedblbase @quotedblbase{} formatting.texi(mymacro,38) @@quotesinglbase @quotesinglbase{} formatting.texi(mymacro,38) @@guillemetleft @guillemetleft{} formatting.texi(mymacro,38) @@guillemetright @guillemetright{} formatting.texi(mymacro,38) @@guillemotleft @guillemotleft{} formatting.texi(mymacro,38) @@guillemotright @guillemotright{} formatting.texi(mymacro,38) @@guilsinglleft @guilsinglleft{} formatting.texi(mymacro,38) @@guilsinglright @guilsinglright{} formatting.texi(mymacro,38) @@textdegree @textdegree{} formatting.texi(mymacro,38) @@euro @euro{} formatting.texi(mymacro,38) @@arrow @arrow{} formatting.texi(mymacro,38) @@leq @leq{} formatting.texi(mymacro,38) @@geq @geq{} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@acronym@{--a,an accronym@}} @acronym{--a,an accronym} formatting.texi(mymacro,38) @code{@@acronym@{--a@}} @acronym{--a} formatting.texi(mymacro,38) @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude Autonome @}} @abbr{@'E--. @comma{}A., @'Etude Autonome } formatting.texi(mymacro,38) @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} formatting.texi(mymacro,38) @code{@@asis@{--a@}} @asis{--a} formatting.texi(mymacro,38) @code{@@b@{--a@}} @b{--a} formatting.texi(mymacro,38) @code{@@cite@{--a@}} @cite{--a} formatting.texi(mymacro,38) @code{@@code@{--a@}} @code{--a} formatting.texi(mymacro,38) @code{@@command@{--a@}} @command{--a} formatting.texi(mymacro,38) @code{@@ctrl@{--a@}} @ctrl{--a} formatting.texi(mymacro,38) @code{@@dfn@{--a@}} @dfn{--a} formatting.texi(mymacro,38) @code{@@dmn@{--a@}} @dmn{--a} formatting.texi(mymacro,38) @code{@@email@{--a,--b@}} @email{--a,--b} formatting.texi(mymacro,38) @code{@@email@{,--b@}} @email{,--b} formatting.texi(mymacro,38) @code{@@email@{--a@}} @email{--a} formatting.texi(mymacro,38) @code{@@emph@{--a@}} @emph{--a} formatting.texi(mymacro,38) @code{@@env@{--a@}} @env{--a} formatting.texi(mymacro,38) @code{@@file@{--a@}} @file{--a} formatting.texi(mymacro,38) @code{@@i@{--a@}} @i{--a} formatting.texi(mymacro,38) @code{@@kbd@{--a@}} @kbd{--a} formatting.texi(mymacro,38) @code{@@key@{--a@}} @key{--a} formatting.texi(mymacro,38) @code{@@math@{--a @{\frac@{1@}@{2@}@} @@minus@{@}@}} @math{--a {\frac{1}{2}} @minus{}} formatting.texi(mymacro,38) @code{@@option@{--a@}} @option{--a} formatting.texi(mymacro,38) @code{@@r@{--a@}} @r{--a} formatting.texi(mymacro,38) @code{@@samp@{--a@}} @samp{--a} formatting.texi(mymacro,38) @code{@@sc@{--a@}} @sc{--a} formatting.texi(mymacro,38) @code{@@strong@{--a@}} @strong{--a} formatting.texi(mymacro,38) @code{@@t@{--a@}} @t{--a} formatting.texi(mymacro,38) @code{@@sansserif@{--a@}} @sansserif{--a} formatting.texi(mymacro,38) @code{@@titlefont@{--a@}} @titlefont{--a} formatting.texi(mymacro,38) @code{@@indicateurl@{--a@}} @indicateurl{--a} formatting.texi(mymacro,38) @code{@@uref@{--a,--b@}} @uref{--a,--b} formatting.texi(mymacro,38) @code{@@uref@{--a@}} @uref{--a} formatting.texi(mymacro,38) @code{@@uref@{,--b@}} @uref{,--b} formatting.texi(mymacro,38) @code{@@uref@{--a,--b,--c@}} @uref{--a,--b,--c} formatting.texi(mymacro,38) @code{@@uref@{,--b,--c@}} @uref{,--b,--c} formatting.texi(mymacro,38) @code{@@uref@{--a,,--c@}} @uref{--a,,--c} formatting.texi(mymacro,38) @code{@@uref@{,,--c@}} @uref{,,--c} formatting.texi(mymacro,38) @code{@@url@{--a,--b@}} @url{--a,--b} formatting.texi(mymacro,38) @code{@@url@{--a,@}} @url{--a,} formatting.texi(mymacro,38) @code{@@url@{,--b@}} @url{,--b} formatting.texi(mymacro,38) @code{@@var@{--a@}} @var{--a} formatting.texi(mymacro,38) @code{@@verb@{:--a:@}} @verb{:--a:} formatting.texi(mymacro,38) @code{@@verb@{:a < & @@ % " -- b:@}} @verb{:a < & @ % " -- b:} formatting.texi(mymacro,38) @code{@@w@{@}} @w{} formatting.texi(mymacro,38) @code{@@H@{a@}} @H{a} formatting.texi(mymacro,38) @code{@@H@{--a@}} @H{--a} formatting.texi(mymacro,38) @code{@@dotaccent@{a@}} @dotaccent{a} formatting.texi(mymacro,38) @code{@@dotaccent@{--a@}} @dotaccent{--a} formatting.texi(mymacro,38) @code{@@ringaccent@{a@}} @ringaccent{a} formatting.texi(mymacro,38) @code{@@ringaccent@{--a@}} @ringaccent{--a} formatting.texi(mymacro,38) @code{@@tieaccent@{a@}} @tieaccent{a} formatting.texi(mymacro,38) @code{@@tieaccent@{--a@}} @tieaccent{--a} formatting.texi(mymacro,38) @code{@@u@{a@}} @u{a} formatting.texi(mymacro,38) @code{@@u@{--a@}} @u{--a} formatting.texi(mymacro,38) @code{@@ubaraccent@{a@}} @ubaraccent{a} formatting.texi(mymacro,38) @code{@@ubaraccent@{--a@}} @ubaraccent{--a} formatting.texi(mymacro,38) @code{@@udotaccent@{a@}} @udotaccent{a} formatting.texi(mymacro,38) @code{@@udotaccent@{--a@}} @udotaccent{--a} formatting.texi(mymacro,38) @code{@@v@{a@}} @v{a} formatting.texi(mymacro,38) @code{@@v@{--a@}} @v{--a} formatting.texi(mymacro,38) @code{@@,@{c@}} @,{c} formatting.texi(mymacro,38) @code{@@,@{--c@}} @,{--c} formatting.texi(mymacro,38) @code{@@footnote@{in footnote@}} @footnote{in footnote} formatting.texi(mymacro,38) @code{@@footnote@{in footnote2@}} @footnote{in footnote2} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@image@{f--ile@}} @image{f--ile} formatting.texi(mymacro,38) @code{@@image@{f--ile,l--i@}} @image{f--ile,l--i} formatting.texi(mymacro,38) @code{@@image@{f--ile,,l--e@}} @image{f--ile,,l--e} formatting.texi(mymacro,38) @code{@@image@{f--ile,,,alt@}} @image{f--ile,,,alt} formatting.texi(mymacro,38) @code{@@image@{f--ile,,,,e-d-xt@}} @image{f--ile,,,,e--xt} formatting.texi(mymacro,38) @code{@@image@{f--ile,aze,az,alt,e--xt@}} @image{f--ile,aze,az,alt,e--xt} formatting.texi(mymacro,38) @code{@@image@{f-ile,aze,,a--lt@}} @image{f-ile,aze,,a--lt} formatting.texi(mymacro,38) @code{@@image@{@@file@{f--ile@}@@@@@@.,aze,az,alt,@@file@{file ext@} e--xt@@@}} @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@}} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @sp 2 formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} formatting.texi(mymacro,38) @clickstyle @result formatting.texi(mymacro,38) After clickstyle @result{} formatting.texi(mymacro,38) @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} formatting.texi(mymacro,38) @clickstyle @arrow formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation formatting.texi(mymacro,38) A quot---ation formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation Note formatting.texi(mymacro,38) A Note formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation note formatting.texi(mymacro,38) A note formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation Caution formatting.texi(mymacro,38) Caution formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation Important formatting.texi(mymacro,38) Important formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation Tip formatting.texi(mymacro,38) a Tip formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation Warning formatting.texi(mymacro,38) a Warning. formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation something @'e @TeX{} formatting.texi(mymacro,38) The something @'e @TeX{} is here. formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation @@ at the end of line @ formatting.texi(mymacro,38) A @@ at the end of the @@quotation line. formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation something, other thing formatting.texi(mymacro,38) something, other thing formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation Note, the note formatting.texi(mymacro,38) Note, the note formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation Empty formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation @asis{} formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation @* formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) formatting.texi(mymacro,38) @itemize formatting.texi(mymacro,38) @item i--temize formatting.texi(mymacro,38) @end itemize formatting.texi(mymacro,38) formatting.texi(mymacro,38) @itemize + formatting.texi(mymacro,38) @item i--tem + formatting.texi(mymacro,38) @end itemize formatting.texi(mymacro,38) formatting.texi(mymacro,38) @itemize @bullet formatting.texi(mymacro,38) @item b--ullet formatting.texi(mymacro,38) @end itemize formatting.texi(mymacro,38) formatting.texi(mymacro,38) @itemize @minus formatting.texi(mymacro,38) @item minu--s formatting.texi(mymacro,38) @end itemize formatting.texi(mymacro,38) formatting.texi(mymacro,38) @itemize @emph formatting.texi(mymacro,38) @item e--mph item formatting.texi(mymacro,38) @end itemize formatting.texi(mymacro,38) formatting.texi(mymacro,38) @itemize @emph{after emph} formatting.texi(mymacro,38) @c comment in itemize formatting.texi(mymacro,38) @item e--mph item formatting.texi(mymacro,38) @end itemize formatting.texi(mymacro,38) formatting.texi(mymacro,38) @itemize @bullet{} a--n itemize line formatting.texi(mymacro,38) @cindex index entry within itemize formatting.texi(mymacro,38) @item i--tem 1 formatting.texi(mymacro,38) @item i--tem 2 formatting.texi(mymacro,38) @end itemize formatting.texi(mymacro,38) formatting.texi(mymacro,38) @enumerate formatting.texi(mymacro,38) @item e--numerate formatting.texi(mymacro,38) @end enumerate formatting.texi(mymacro,38) formatting.texi(mymacro,38) @multitable @columnfractions 6 7 formatting.texi(mymacro,38) @headitem mu--ltitable headitem @tab another tab formatting.texi(mymacro,38) @item mu--ltitable item @tab multitable tab formatting.texi(mymacro,38) @c comment in multitable formatting.texi(mymacro,38) @item mu--ltitable item 2 @tab multitable tab 2 formatting.texi(mymacro,38) @cindex index entry within multitable formatting.texi(mymacro,38) @item lone mu--ltitable item formatting.texi(mymacro,38) @end multitable formatting.texi(mymacro,38) formatting.texi(mymacro,38) @multitable {truc} {bidule} formatting.texi(mymacro,38) @item truc @tab bidule formatting.texi(mymacro,38) @end multitable formatting.texi(mymacro,38) formatting.texi(mymacro,38) @example formatting.texi(mymacro,38) e--xample some formatting.texi(mymacro,38) text formatting.texi(mymacro,38) @end example formatting.texi(mymacro,38) formatting.texi(mymacro,38) @smallexample formatting.texi(mymacro,38) s--mallexample formatting.texi(mymacro,38) @end smallexample formatting.texi(mymacro,38) formatting.texi(mymacro,38) @display formatting.texi(mymacro,38) d--isplay formatting.texi(mymacro,38) @end display formatting.texi(mymacro,38) formatting.texi(mymacro,38) @smalldisplay formatting.texi(mymacro,38) s--malldisplay formatting.texi(mymacro,38) @end smalldisplay formatting.texi(mymacro,38) formatting.texi(mymacro,38) @lisp formatting.texi(mymacro,38) l--isp formatting.texi(mymacro,38) @end lisp formatting.texi(mymacro,38) formatting.texi(mymacro,38) @smalllisp formatting.texi(mymacro,38) s--malllisp formatting.texi(mymacro,38) @end smalllisp formatting.texi(mymacro,38) formatting.texi(mymacro,38) @format formatting.texi(mymacro,38) f--ormat formatting.texi(mymacro,38) @end format formatting.texi(mymacro,38) formatting.texi(mymacro,38) @smallformat formatting.texi(mymacro,38) s--mallformat formatting.texi(mymacro,38) @end smallformat formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deffn c--ategory d--effn_name a--rguments... formatting.texi(mymacro,38) d--effn formatting.texi(mymacro,38) @end deffn formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deffn cate--gory de--ffn_name ar--guments more args @* even more so formatting.texi(mymacro,38) def--fn formatting.texi(mymacro,38) @end deffn formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deffn fset @var{i} a g formatting.texi(mymacro,38) @cindex index entry within deffn formatting.texi(mymacro,38) @deffnx {cmde} truc {} formatting.texi(mymacro,38) @deffnx Command {log trap} {} formatting.texi(mymacro,38) @deffnx Command { log trap1} {} formatting.texi(mymacro,38) @deffnx Command {log trap2 } {} formatting.texi(mymacro,38) @deffnx cmde @b{id ule} truc formatting.texi(mymacro,38) @deffnx cmde2 @b{id @samp{i} ule} truc formatting.texi(mymacro,38) @deffnx @b{id @samp{i} ule} formatting.texi(mymacro,38) @deffnx formatting.texi(mymacro,38) @deffnx aaa formatting.texi(mymacro,38) @deffnx {} {} formatting.texi(mymacro,38) @deffnx{} formatting.texi(mymacro,38) @deffnx{} machin formatting.texi(mymacro,38) @deffnx{} {bidule machin} formatting.texi(mymacro,38) @deffnx{truc} machin formatting.texi(mymacro,38) @deffnx{truc} { } formatting.texi(mymacro,38) @deffnx{truc} followed by a comment formatting.texi(mymacro,38) @c comment formatting.texi(mymacro,38) @deffnx{truc} formatting.texi(mymacro,38) @deffnx{} {} formatting.texi(mymacro,38) @deffnx {truc} a b c d e @b{f g} {h i} formatting.texi(mymacro,38) @deffnx {truc} deffnx before end deffn formatting.texi(mymacro,38) @end deffn formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deffn empty deffn formatting.texi(mymacro,38) @end deffn formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deffn empty deffn with deffnx formatting.texi(mymacro,38) @c comment between deffn and deffnx formatting.texi(mymacro,38) @deffnx empty deffnx formatting.texi(mymacro,38) @end deffn formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deffn fset @var{i} a g formatting.texi(mymacro,38) @deffnx {cmde} truc {} formatting.texi(mymacro,38) @c comment formatting.texi(mymacro,38) text in def item for second def item formatting.texi(mymacro,38) @end deffn formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defvr c--ategory d--efvr_name formatting.texi(mymacro,38) d--efvr formatting.texi(mymacro,38) @end defvr formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... formatting.texi(mymacro,38) d--eftypefn formatting.texi(mymacro,38) @end deftypefn formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... formatting.texi(mymacro,38) d--eftypeop formatting.texi(mymacro,38) @end deftypeop formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deftypevr c--ategory t--ype d--eftypevr_name formatting.texi(mymacro,38) d--eftypevr formatting.texi(mymacro,38) @end deftypevr formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defcv c--ategory c--lass d--efcv_name formatting.texi(mymacro,38) d--efcv formatting.texi(mymacro,38) @end defcv formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defop c--ategory c--lass d--efop_name a--rguments... formatting.texi(mymacro,38) d--efop formatting.texi(mymacro,38) @end defop formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deftp c--ategory d--eftp_name a--ttributes... formatting.texi(mymacro,38) d--eftp formatting.texi(mymacro,38) @end deftp formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defun d--efun_name a--rguments... formatting.texi(mymacro,38) d--efun formatting.texi(mymacro,38) @end defun formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defmac d--efmac_name a--rguments... formatting.texi(mymacro,38) d--efmac formatting.texi(mymacro,38) @end defmac formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defspec d--efspec_name a--rguments... formatting.texi(mymacro,38) d--efspec formatting.texi(mymacro,38) @end defspec formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defvar d--efvar_name argvar argvar1 formatting.texi(mymacro,38) d--efvar formatting.texi(mymacro,38) @end defvar formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defopt d--efopt_name formatting.texi(mymacro,38) d--efopt formatting.texi(mymacro,38) @end defopt formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deftypefun t--ype d--eftypefun_name a--rguments... formatting.texi(mymacro,38) d--eftypefun formatting.texi(mymacro,38) @end deftypefun formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deftypevar t--ype d--eftypevar_name formatting.texi(mymacro,38) d--eftypevar formatting.texi(mymacro,38) @end deftypevar formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defivar c--lass d--efivar_name formatting.texi(mymacro,38) d--efivar formatting.texi(mymacro,38) @end defivar formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deftypeivar c--lass t--ype d--eftypeivar_name formatting.texi(mymacro,38) d--eftypeivar formatting.texi(mymacro,38) @end deftypeivar formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defmethod c--lass d--efmethod_name a--rguments... formatting.texi(mymacro,38) d--efmethod formatting.texi(mymacro,38) @end defmethod formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... formatting.texi(mymacro,38) d--eftypemethod formatting.texi(mymacro,38) @end deftypemethod formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@xref@{c---hapter@@@@, cross r---ef name@@@@, t---itle@@@@, file n---ame@@@@, ma---nual@@@@@}} @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@}. formatting.texi(mymacro,38) @code{@@ref@{chapter, cross ref name, title, file name, manual@}} @ref{chapter, cross ref name, title, file name, manual} formatting.texi(mymacro,38) @code{@@pxref@{chapter, cross ref name, title, file name, manual@}} @pxref{chapter, cross ref name, title, file name, manual} formatting.texi(mymacro,38) @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@ref@{chapter@}} @ref{chapter} formatting.texi(mymacro,38) @code{@@xref@{chapter@}} @xref{chapter}. formatting.texi(mymacro,38) @code{@@pxref@{chapter@}} @pxref{chapter} formatting.texi(mymacro,38) @code{@@ref@{s--ect@@comma@{@}ion@}} @ref{s--ect@comma{}ion} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@ref@{s--ect@@comma@{@}ion, a @@comma@{@} in cross formatting.texi(mymacro,38) ref, a comma@@comma@{@} in title, a comma@@comma@{@} in file, a @@comma@{@} in manual name @}} formatting.texi(mymacro,38) @ref{s--ect@comma{}ion, a @comma{} in cross formatting.texi(mymacro,38) ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@ref@{chapter,cross ref name@}} @ref{chapter,cross ref name} formatting.texi(mymacro,38) @code{@@ref@{chapter,,title@}} @ref{chapter,,title} formatting.texi(mymacro,38) @code{@@ref@{chapter,,,file name@}} @ref{chapter,,,file name} formatting.texi(mymacro,38) @code{@@ref@{chapter,,,,manual@}} @ref{chapter,,,,manual} formatting.texi(mymacro,38) @code{@@ref@{chapter,cross ref name,title,@}} @ref{chapter,cross ref name,title,} formatting.texi(mymacro,38) @code{@@ref@{chapter,cross ref name,,file name@}} @ref{chapter,cross ref name,,file name} formatting.texi(mymacro,38) @code{@@ref@{chapter,cross ref name,,,manual@}} @ref{chapter,cross ref name,,,manual} formatting.texi(mymacro,38) @code{@@ref@{chapter,cross ref name,title,file name@}} @ref{chapter,cross ref name,title,file name} formatting.texi(mymacro,38) @code{@@ref@{chapter,cross ref name,title,,manual@}} @ref{chapter,cross ref name,title,,manual} formatting.texi(mymacro,38) @code{@@ref@{chapter,cross ref name,title, file name, manual@}} @ref{chapter,cross ref name,title, file name, manual} formatting.texi(mymacro,38) @code{@@ref@{chapter,,title,file name@}} @ref{chapter,,title,file name} formatting.texi(mymacro,38) @code{@@ref@{chapter,,title,,manual@}} @ref{chapter,,title,,manual} formatting.texi(mymacro,38) @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} formatting.texi(mymacro,38) @code{@@ref@{chapter,,,file name,manual@}} @ref{chapter,,,file name,manual} formatting.texi(mymacro,38) formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,cross ref name@}} @ref{(pman)anode,cross ref name} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,,title@}} @ref{(pman)anode,,title} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,,,file name@}} @ref{(pman)anode,,,file name} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,,,,manual@}} @ref{(pman)anode,,,,manual} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,cross ref name,title,@}} @ref{(pman)anode,cross ref name,title,} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,cross ref name,,file name@}} @ref{(pman)anode,cross ref name,,file name} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,cross ref name,,,manual@}} @ref{(pman)anode,cross ref name,,,manual} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,cross ref name,title,file name@}} @ref{(pman)anode,cross ref name,title,file name} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,cross ref name,title,,manual@}} @ref{(pman)anode,cross ref name,title,,manual} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,cross ref name,title, file name, manual@}} @ref{(pman)anode,cross ref name,title, file name, manual} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,,title,file name@}} @ref{(pman)anode,,title,file name} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,,title,,manual@}} @ref{(pman)anode,,title,,manual} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,,title, file name, manual@}} @ref{(pman)anode,,title, file name, manual} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,,,file name,manual@}} @ref{(pman)anode,,,file name,manual} formatting.texi(mymacro,38) formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} formatting.texi(mymacro,38) @code{@@inforef@{chapter@}} @inforef{chapter} formatting.texi(mymacro,38) @code{@@inforef@{chapter, cross ref name@}} @inforef{chapter, cross ref name} formatting.texi(mymacro,38) @code{@@inforef@{chapter,,file name@}} @inforef{chapter,,file name} formatting.texi(mymacro,38) @code{@@inforef@{node, cross ref name, file name@}} @inforef{node, cross ref name, file name} formatting.texi(mymacro,38) @code{@@inforef@{node@}} @inforef{node} formatting.texi(mymacro,38) @code{@@inforef@{node, cross ref name@}} @inforef{node, cross ref name} formatting.texi(mymacro,38) @code{@@inforef@{node,,file name@}} @inforef{node,,file name} formatting.texi(mymacro,38) @code{@@inforef@{chapter, cross ref name, file name, spurious arg@}} @inforef{chapter, cross ref name, file name, spurious arg} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@inforef@{s--ect@@comma@{@}ion, a @@comma@{@} in cross formatting.texi(mymacro,38) ref, a comma@@comma@{@} in file@}} formatting.texi(mymacro,38) @inforef{s--ect@comma{}ion, a @comma{} in cross formatting.texi(mymacro,38) ref, a comma@comma{} in file} formatting.texi(mymacro,38) formatting.texi(mymacro,38) formatting.texi(mymacro,38) @table @bullet formatting.texi(mymacro,38) @c comment in table formatting.texi(mymacro,38) @item a formatting.texi(mymacro,38) l--ine formatting.texi(mymacro,38) @end table formatting.texi(mymacro,38) formatting.texi(mymacro,38) @vtable @asis formatting.texi(mymacro,38) @item a formatting.texi(mymacro,38) @c comment between item and itemx formatting.texi(mymacro,38) @itemx b formatting.texi(mymacro,38) l--ine formatting.texi(mymacro,38) @end vtable formatting.texi(mymacro,38) formatting.texi(mymacro,38) @ftable @minus formatting.texi(mymacro,38) @item a formatting.texi(mymacro,38) @cindex index entry between item and itemx formatting.texi(mymacro,38) @itemx b formatting.texi(mymacro,38) l--ine formatting.texi(mymacro,38) @end ftable formatting.texi(mymacro,38) formatting.texi(mymacro,38) @cartouche formatting.texi(mymacro,38) c--artouche formatting.texi(mymacro,38) @end cartouche formatting.texi(mymacro,38) formatting.texi(mymacro,38) @flushleft formatting.texi(mymacro,38) f--lushleft formatting.texi(mymacro,38) @end flushleft formatting.texi(mymacro,38) formatting.texi(mymacro,38) @flushright formatting.texi(mymacro,38) f--lushright formatting.texi(mymacro,38) @end flushright formatting.texi(mymacro,38) formatting.texi(mymacro,38) @center ce--ntered line formatting.texi(mymacro,38) formatting.texi(mymacro,38) @verbatiminclude simplest.texi formatting.texi(mymacro,38) formatting.texi(mymacro,38) @verbatim formatting.texi(mymacro,38) in verbatim '' formatting.texi(mymacro,38) @end verbatim formatting.texi(mymacro,38) formatting.texi(mymacro,38) formatting.texi(mymacro,38) @html formatting.texi(mymacro,38) html '' formatting.texi(mymacro,38) @end html formatting.texi(mymacro,38) formatting.texi(mymacro,38) formatting.texi(mymacro,38) formatting.texi(mymacro,38) @majorheading majorheading formatting.texi(mymacro,38) formatting.texi(mymacro,38) @chapheading chapheading formatting.texi(mymacro,38) formatting.texi(mymacro,38) @heading heading formatting.texi(mymacro,38) formatting.texi(mymacro,38) @subheading subheading formatting.texi(mymacro,38) formatting.texi(mymacro,38) @subsubheading subsubheading formatting.texi(mymacro,38) formatting.texi(mymacro,38) @c makeinfo cannot handle that formatting.texi(mymacro,38) formatting.texi(mymacro,38) formatting.texi(mymacro,38) @c invalid texinfo formatting.texi(mymacro,38) formatting.texi(,39) formatting.texi(,40) In example. formatting.texi(,41) @example formatting.texi(mymacro,42) formatting.texi(mymacro,42) < formatting.texi(mymacro,42) > formatting.texi(mymacro,42) " formatting.texi(mymacro,42) & formatting.texi(mymacro,42) ' formatting.texi(mymacro,42) ` formatting.texi(mymacro,42) formatting.texi(mymacro,42) ``simple-double--three---four----''@* formatting.texi(mymacro,42) code: @code{``simple-double--three---four----''} @* formatting.texi(mymacro,42) asis: @asis{``simple-double--three---four----''} @* formatting.texi(mymacro,42) strong: @strong{``simple-double--three---four----''} @* formatting.texi(mymacro,42) kbd: @kbd{``simple-double--three---four----''} @* formatting.texi(mymacro,42) formatting.texi(mymacro,42) `@w{}`simple-double-@w{}-three---four----'@w{}'@* formatting.texi(mymacro,42) formatting.texi(mymacro,42) @cindex --option formatting.texi(mymacro,42) @cindex `` formatting.texi(mymacro,42) @findex `` formatting.texi(mymacro,42) @findex --foption formatting.texi(mymacro,42) formatting.texi(mymacro,42) @@"u @"u formatting.texi(mymacro,42) @@"@{U@} @"{U} formatting.texi(mymacro,42) @@~n @~n formatting.texi(mymacro,42) @@^a @^a formatting.texi(mymacro,42) @@'e @'e formatting.texi(mymacro,42) @@=o @=o formatting.texi(mymacro,42) @@`i @`i formatting.texi(mymacro,42) @@'@{e@} @'{e} formatting.texi(mymacro,42) @@'@{@@dotless@{i@}@} @'{@dotless{i}} formatting.texi(mymacro,42) @@dotless@{i@} @dotless{i} formatting.texi(mymacro,42) @@dotless@{j@} @dotless{j} formatting.texi(mymacro,42) @@`@{@@=E@} @`{@=E} formatting.texi(mymacro,42) @@l@{@} @l{} formatting.texi(mymacro,42) @@,@{@@'C@} @,{@'C} formatting.texi(mymacro,42) @@,c @,c formatting.texi(mymacro,42) @@,c@@"u @,c@"u @* formatting.texi(mymacro,42) formatting.texi(mymacro,42) @@* @* formatting.texi(mymacro,42) @@ followed by a space formatting.texi(mymacro,42) @ formatting.texi(mymacro,42) @@ followed by a tab formatting.texi(mymacro,42) @ formatting.texi(mymacro,42) @@ followed by a new line formatting.texi(mymacro,42) @ formatting.texi(mymacro,42) @code{@@-} @- formatting.texi(mymacro,42) @code{@@|} @| formatting.texi(mymacro,42) @code{@@:} @: formatting.texi(mymacro,42) @code{@@!} @! formatting.texi(mymacro,42) @code{@@?} @? formatting.texi(mymacro,42) @code{@@.} @. formatting.texi(mymacro,42) @code{@@@@} @@ formatting.texi(mymacro,42) @code{@@@}} @} formatting.texi(mymacro,42) @code{@@@{} @{ formatting.texi(mymacro,42) @code{@@/} @/ formatting.texi(mymacro,42) formatting.texi(mymacro,42) foo vs.@: bar. formatting.texi(mymacro,42) colon :@:And something else. formatting.texi(mymacro,42) semi colon ;@:. formatting.texi(mymacro,42) And ? ?@:. formatting.texi(mymacro,42) Now ! !@:@@ formatting.texi(mymacro,42) but , ,@: formatting.texi(mymacro,42) formatting.texi(mymacro,42) @@TeX @TeX{} formatting.texi(mymacro,42) @@LaTeX @LaTeX{} formatting.texi(mymacro,42) @@bullet @bullet{} formatting.texi(mymacro,42) @@copyright @copyright{} formatting.texi(mymacro,42) @@dots @dots{} formatting.texi(mymacro,42) @@enddots @enddots{} formatting.texi(mymacro,42) @@equiv @equiv{} formatting.texi(mymacro,42) @@error @error{} formatting.texi(mymacro,42) @@expansion @expansion{} formatting.texi(mymacro,42) @@minus @minus{} formatting.texi(mymacro,42) @@point @point{} formatting.texi(mymacro,42) @@print @print{} formatting.texi(mymacro,42) @@result @result{} formatting.texi(mymacro,42) @@today @today{} formatting.texi(mymacro,42) @@aa @aa{} formatting.texi(mymacro,42) @@AA @AA{} formatting.texi(mymacro,42) @@ae @ae{} formatting.texi(mymacro,42) @@oe @oe{} formatting.texi(mymacro,42) @@AE @AE{} formatting.texi(mymacro,42) @@OE @OE{} formatting.texi(mymacro,42) @@o @o{} formatting.texi(mymacro,42) @@O @O{} formatting.texi(mymacro,42) @@ss @ss{} formatting.texi(mymacro,42) @@l @l{} formatting.texi(mymacro,42) @@L @L{} formatting.texi(mymacro,42) @@exclamdown @exclamdown{} formatting.texi(mymacro,42) @@questiondown @questiondown{} formatting.texi(mymacro,42) @@pounds @pounds{} formatting.texi(mymacro,42) @@registeredsymbol @registeredsymbol{} formatting.texi(mymacro,42) @@ordf @ordf{} formatting.texi(mymacro,42) @@ordm @ordm{} formatting.texi(mymacro,42) @@comma @comma{} formatting.texi(mymacro,42) @@quotedblleft @quotedblleft{} formatting.texi(mymacro,42) @@quotedblright @quotedblright{} formatting.texi(mymacro,42) @@quoteleft @quoteleft{} formatting.texi(mymacro,42) @@quoteright @quoteright{} formatting.texi(mymacro,42) @@quotedblbase @quotedblbase{} formatting.texi(mymacro,42) @@quotesinglbase @quotesinglbase{} formatting.texi(mymacro,42) @@guillemetleft @guillemetleft{} formatting.texi(mymacro,42) @@guillemetright @guillemetright{} formatting.texi(mymacro,42) @@guillemotleft @guillemotleft{} formatting.texi(mymacro,42) @@guillemotright @guillemotright{} formatting.texi(mymacro,42) @@guilsinglleft @guilsinglleft{} formatting.texi(mymacro,42) @@guilsinglright @guilsinglright{} formatting.texi(mymacro,42) @@textdegree @textdegree{} formatting.texi(mymacro,42) @@euro @euro{} formatting.texi(mymacro,42) @@arrow @arrow{} formatting.texi(mymacro,42) @@leq @leq{} formatting.texi(mymacro,42) @@geq @geq{} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@acronym@{--a,an accronym@}} @acronym{--a,an accronym} formatting.texi(mymacro,42) @code{@@acronym@{--a@}} @acronym{--a} formatting.texi(mymacro,42) @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude Autonome @}} @abbr{@'E--. @comma{}A., @'Etude Autonome } formatting.texi(mymacro,42) @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} formatting.texi(mymacro,42) @code{@@asis@{--a@}} @asis{--a} formatting.texi(mymacro,42) @code{@@b@{--a@}} @b{--a} formatting.texi(mymacro,42) @code{@@cite@{--a@}} @cite{--a} formatting.texi(mymacro,42) @code{@@code@{--a@}} @code{--a} formatting.texi(mymacro,42) @code{@@command@{--a@}} @command{--a} formatting.texi(mymacro,42) @code{@@ctrl@{--a@}} @ctrl{--a} formatting.texi(mymacro,42) @code{@@dfn@{--a@}} @dfn{--a} formatting.texi(mymacro,42) @code{@@dmn@{--a@}} @dmn{--a} formatting.texi(mymacro,42) @code{@@email@{--a,--b@}} @email{--a,--b} formatting.texi(mymacro,42) @code{@@email@{,--b@}} @email{,--b} formatting.texi(mymacro,42) @code{@@email@{--a@}} @email{--a} formatting.texi(mymacro,42) @code{@@emph@{--a@}} @emph{--a} formatting.texi(mymacro,42) @code{@@env@{--a@}} @env{--a} formatting.texi(mymacro,42) @code{@@file@{--a@}} @file{--a} formatting.texi(mymacro,42) @code{@@i@{--a@}} @i{--a} formatting.texi(mymacro,42) @code{@@kbd@{--a@}} @kbd{--a} formatting.texi(mymacro,42) @code{@@key@{--a@}} @key{--a} formatting.texi(mymacro,42) @code{@@math@{--a @{\frac@{1@}@{2@}@} @@minus@{@}@}} @math{--a {\frac{1}{2}} @minus{}} formatting.texi(mymacro,42) @code{@@option@{--a@}} @option{--a} formatting.texi(mymacro,42) @code{@@r@{--a@}} @r{--a} formatting.texi(mymacro,42) @code{@@samp@{--a@}} @samp{--a} formatting.texi(mymacro,42) @code{@@sc@{--a@}} @sc{--a} formatting.texi(mymacro,42) @code{@@strong@{--a@}} @strong{--a} formatting.texi(mymacro,42) @code{@@t@{--a@}} @t{--a} formatting.texi(mymacro,42) @code{@@sansserif@{--a@}} @sansserif{--a} formatting.texi(mymacro,42) @code{@@titlefont@{--a@}} @titlefont{--a} formatting.texi(mymacro,42) @code{@@indicateurl@{--a@}} @indicateurl{--a} formatting.texi(mymacro,42) @code{@@uref@{--a,--b@}} @uref{--a,--b} formatting.texi(mymacro,42) @code{@@uref@{--a@}} @uref{--a} formatting.texi(mymacro,42) @code{@@uref@{,--b@}} @uref{,--b} formatting.texi(mymacro,42) @code{@@uref@{--a,--b,--c@}} @uref{--a,--b,--c} formatting.texi(mymacro,42) @code{@@uref@{,--b,--c@}} @uref{,--b,--c} formatting.texi(mymacro,42) @code{@@uref@{--a,,--c@}} @uref{--a,,--c} formatting.texi(mymacro,42) @code{@@uref@{,,--c@}} @uref{,,--c} formatting.texi(mymacro,42) @code{@@url@{--a,--b@}} @url{--a,--b} formatting.texi(mymacro,42) @code{@@url@{--a,@}} @url{--a,} formatting.texi(mymacro,42) @code{@@url@{,--b@}} @url{,--b} formatting.texi(mymacro,42) @code{@@var@{--a@}} @var{--a} formatting.texi(mymacro,42) @code{@@verb@{:--a:@}} @verb{:--a:} formatting.texi(mymacro,42) @code{@@verb@{:a < & @@ % " -- b:@}} @verb{:a < & @ % " -- b:} formatting.texi(mymacro,42) @code{@@w@{@}} @w{} formatting.texi(mymacro,42) @code{@@H@{a@}} @H{a} formatting.texi(mymacro,42) @code{@@H@{--a@}} @H{--a} formatting.texi(mymacro,42) @code{@@dotaccent@{a@}} @dotaccent{a} formatting.texi(mymacro,42) @code{@@dotaccent@{--a@}} @dotaccent{--a} formatting.texi(mymacro,42) @code{@@ringaccent@{a@}} @ringaccent{a} formatting.texi(mymacro,42) @code{@@ringaccent@{--a@}} @ringaccent{--a} formatting.texi(mymacro,42) @code{@@tieaccent@{a@}} @tieaccent{a} formatting.texi(mymacro,42) @code{@@tieaccent@{--a@}} @tieaccent{--a} formatting.texi(mymacro,42) @code{@@u@{a@}} @u{a} formatting.texi(mymacro,42) @code{@@u@{--a@}} @u{--a} formatting.texi(mymacro,42) @code{@@ubaraccent@{a@}} @ubaraccent{a} formatting.texi(mymacro,42) @code{@@ubaraccent@{--a@}} @ubaraccent{--a} formatting.texi(mymacro,42) @code{@@udotaccent@{a@}} @udotaccent{a} formatting.texi(mymacro,42) @code{@@udotaccent@{--a@}} @udotaccent{--a} formatting.texi(mymacro,42) @code{@@v@{a@}} @v{a} formatting.texi(mymacro,42) @code{@@v@{--a@}} @v{--a} formatting.texi(mymacro,42) @code{@@,@{c@}} @,{c} formatting.texi(mymacro,42) @code{@@,@{--c@}} @,{--c} formatting.texi(mymacro,42) @code{@@footnote@{in footnote@}} @footnote{in footnote} formatting.texi(mymacro,42) @code{@@footnote@{in footnote2@}} @footnote{in footnote2} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@image@{f--ile@}} @image{f--ile} formatting.texi(mymacro,42) @code{@@image@{f--ile,l--i@}} @image{f--ile,l--i} formatting.texi(mymacro,42) @code{@@image@{f--ile,,l--e@}} @image{f--ile,,l--e} formatting.texi(mymacro,42) @code{@@image@{f--ile,,,alt@}} @image{f--ile,,,alt} formatting.texi(mymacro,42) @code{@@image@{f--ile,,,,e-d-xt@}} @image{f--ile,,,,e--xt} formatting.texi(mymacro,42) @code{@@image@{f--ile,aze,az,alt,e--xt@}} @image{f--ile,aze,az,alt,e--xt} formatting.texi(mymacro,42) @code{@@image@{f-ile,aze,,a--lt@}} @image{f-ile,aze,,a--lt} formatting.texi(mymacro,42) @code{@@image@{@@file@{f--ile@}@@@@@@.,aze,az,alt,@@file@{file ext@} e--xt@@@}} @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@}} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @sp 2 formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} formatting.texi(mymacro,42) @clickstyle @result formatting.texi(mymacro,42) After clickstyle @result{} formatting.texi(mymacro,42) @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} formatting.texi(mymacro,42) @clickstyle @arrow formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation formatting.texi(mymacro,42) A quot---ation formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation Note formatting.texi(mymacro,42) A Note formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation note formatting.texi(mymacro,42) A note formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation Caution formatting.texi(mymacro,42) Caution formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation Important formatting.texi(mymacro,42) Important formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation Tip formatting.texi(mymacro,42) a Tip formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation Warning formatting.texi(mymacro,42) a Warning. formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation something @'e @TeX{} formatting.texi(mymacro,42) The something @'e @TeX{} is here. formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation @@ at the end of line @ formatting.texi(mymacro,42) A @@ at the end of the @@quotation line. formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation something, other thing formatting.texi(mymacro,42) something, other thing formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation Note, the note formatting.texi(mymacro,42) Note, the note formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation Empty formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation @asis{} formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation @* formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) formatting.texi(mymacro,42) @itemize formatting.texi(mymacro,42) @item i--temize formatting.texi(mymacro,42) @end itemize formatting.texi(mymacro,42) formatting.texi(mymacro,42) @itemize + formatting.texi(mymacro,42) @item i--tem + formatting.texi(mymacro,42) @end itemize formatting.texi(mymacro,42) formatting.texi(mymacro,42) @itemize @bullet formatting.texi(mymacro,42) @item b--ullet formatting.texi(mymacro,42) @end itemize formatting.texi(mymacro,42) formatting.texi(mymacro,42) @itemize @minus formatting.texi(mymacro,42) @item minu--s formatting.texi(mymacro,42) @end itemize formatting.texi(mymacro,42) formatting.texi(mymacro,42) @itemize @emph formatting.texi(mymacro,42) @item e--mph item formatting.texi(mymacro,42) @end itemize formatting.texi(mymacro,42) formatting.texi(mymacro,42) @itemize @emph{after emph} formatting.texi(mymacro,42) @c comment in itemize formatting.texi(mymacro,42) @item e--mph item formatting.texi(mymacro,42) @end itemize formatting.texi(mymacro,42) formatting.texi(mymacro,42) @itemize @bullet{} a--n itemize line formatting.texi(mymacro,42) @cindex index entry within itemize formatting.texi(mymacro,42) @item i--tem 1 formatting.texi(mymacro,42) @item i--tem 2 formatting.texi(mymacro,42) @end itemize formatting.texi(mymacro,42) formatting.texi(mymacro,42) @enumerate formatting.texi(mymacro,42) @item e--numerate formatting.texi(mymacro,42) @end enumerate formatting.texi(mymacro,42) formatting.texi(mymacro,42) @multitable @columnfractions 6 7 formatting.texi(mymacro,42) @headitem mu--ltitable headitem @tab another tab formatting.texi(mymacro,42) @item mu--ltitable item @tab multitable tab formatting.texi(mymacro,42) @c comment in multitable formatting.texi(mymacro,42) @item mu--ltitable item 2 @tab multitable tab 2 formatting.texi(mymacro,42) @cindex index entry within multitable formatting.texi(mymacro,42) @item lone mu--ltitable item formatting.texi(mymacro,42) @end multitable formatting.texi(mymacro,42) formatting.texi(mymacro,42) @multitable {truc} {bidule} formatting.texi(mymacro,42) @item truc @tab bidule formatting.texi(mymacro,42) @end multitable formatting.texi(mymacro,42) formatting.texi(mymacro,42) @example formatting.texi(mymacro,42) e--xample some formatting.texi(mymacro,42) text formatting.texi(mymacro,42) @end example formatting.texi(mymacro,42) formatting.texi(mymacro,42) @smallexample formatting.texi(mymacro,42) s--mallexample formatting.texi(mymacro,42) @end smallexample formatting.texi(mymacro,42) formatting.texi(mymacro,42) @display formatting.texi(mymacro,42) d--isplay formatting.texi(mymacro,42) @end display formatting.texi(mymacro,42) formatting.texi(mymacro,42) @smalldisplay formatting.texi(mymacro,42) s--malldisplay formatting.texi(mymacro,42) @end smalldisplay formatting.texi(mymacro,42) formatting.texi(mymacro,42) @lisp formatting.texi(mymacro,42) l--isp formatting.texi(mymacro,42) @end lisp formatting.texi(mymacro,42) formatting.texi(mymacro,42) @smalllisp formatting.texi(mymacro,42) s--malllisp formatting.texi(mymacro,42) @end smalllisp formatting.texi(mymacro,42) formatting.texi(mymacro,42) @format formatting.texi(mymacro,42) f--ormat formatting.texi(mymacro,42) @end format formatting.texi(mymacro,42) formatting.texi(mymacro,42) @smallformat formatting.texi(mymacro,42) s--mallformat formatting.texi(mymacro,42) @end smallformat formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deffn c--ategory d--effn_name a--rguments... formatting.texi(mymacro,42) d--effn formatting.texi(mymacro,42) @end deffn formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deffn cate--gory de--ffn_name ar--guments more args @* even more so formatting.texi(mymacro,42) def--fn formatting.texi(mymacro,42) @end deffn formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deffn fset @var{i} a g formatting.texi(mymacro,42) @cindex index entry within deffn formatting.texi(mymacro,42) @deffnx {cmde} truc {} formatting.texi(mymacro,42) @deffnx Command {log trap} {} formatting.texi(mymacro,42) @deffnx Command { log trap1} {} formatting.texi(mymacro,42) @deffnx Command {log trap2 } {} formatting.texi(mymacro,42) @deffnx cmde @b{id ule} truc formatting.texi(mymacro,42) @deffnx cmde2 @b{id @samp{i} ule} truc formatting.texi(mymacro,42) @deffnx @b{id @samp{i} ule} formatting.texi(mymacro,42) @deffnx formatting.texi(mymacro,42) @deffnx aaa formatting.texi(mymacro,42) @deffnx {} {} formatting.texi(mymacro,42) @deffnx{} formatting.texi(mymacro,42) @deffnx{} machin formatting.texi(mymacro,42) @deffnx{} {bidule machin} formatting.texi(mymacro,42) @deffnx{truc} machin formatting.texi(mymacro,42) @deffnx{truc} { } formatting.texi(mymacro,42) @deffnx{truc} followed by a comment formatting.texi(mymacro,42) @c comment formatting.texi(mymacro,42) @deffnx{truc} formatting.texi(mymacro,42) @deffnx{} {} formatting.texi(mymacro,42) @deffnx {truc} a b c d e @b{f g} {h i} formatting.texi(mymacro,42) @deffnx {truc} deffnx before end deffn formatting.texi(mymacro,42) @end deffn formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deffn empty deffn formatting.texi(mymacro,42) @end deffn formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deffn empty deffn with deffnx formatting.texi(mymacro,42) @c comment between deffn and deffnx formatting.texi(mymacro,42) @deffnx empty deffnx formatting.texi(mymacro,42) @end deffn formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deffn fset @var{i} a g formatting.texi(mymacro,42) @deffnx {cmde} truc {} formatting.texi(mymacro,42) @c comment formatting.texi(mymacro,42) text in def item for second def item formatting.texi(mymacro,42) @end deffn formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defvr c--ategory d--efvr_name formatting.texi(mymacro,42) d--efvr formatting.texi(mymacro,42) @end defvr formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... formatting.texi(mymacro,42) d--eftypefn formatting.texi(mymacro,42) @end deftypefn formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... formatting.texi(mymacro,42) d--eftypeop formatting.texi(mymacro,42) @end deftypeop formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deftypevr c--ategory t--ype d--eftypevr_name formatting.texi(mymacro,42) d--eftypevr formatting.texi(mymacro,42) @end deftypevr formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defcv c--ategory c--lass d--efcv_name formatting.texi(mymacro,42) d--efcv formatting.texi(mymacro,42) @end defcv formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defop c--ategory c--lass d--efop_name a--rguments... formatting.texi(mymacro,42) d--efop formatting.texi(mymacro,42) @end defop formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deftp c--ategory d--eftp_name a--ttributes... formatting.texi(mymacro,42) d--eftp formatting.texi(mymacro,42) @end deftp formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defun d--efun_name a--rguments... formatting.texi(mymacro,42) d--efun formatting.texi(mymacro,42) @end defun formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defmac d--efmac_name a--rguments... formatting.texi(mymacro,42) d--efmac formatting.texi(mymacro,42) @end defmac formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defspec d--efspec_name a--rguments... formatting.texi(mymacro,42) d--efspec formatting.texi(mymacro,42) @end defspec formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defvar d--efvar_name argvar argvar1 formatting.texi(mymacro,42) d--efvar formatting.texi(mymacro,42) @end defvar formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defopt d--efopt_name formatting.texi(mymacro,42) d--efopt formatting.texi(mymacro,42) @end defopt formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deftypefun t--ype d--eftypefun_name a--rguments... formatting.texi(mymacro,42) d--eftypefun formatting.texi(mymacro,42) @end deftypefun formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deftypevar t--ype d--eftypevar_name formatting.texi(mymacro,42) d--eftypevar formatting.texi(mymacro,42) @end deftypevar formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defivar c--lass d--efivar_name formatting.texi(mymacro,42) d--efivar formatting.texi(mymacro,42) @end defivar formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deftypeivar c--lass t--ype d--eftypeivar_name formatting.texi(mymacro,42) d--eftypeivar formatting.texi(mymacro,42) @end deftypeivar formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defmethod c--lass d--efmethod_name a--rguments... formatting.texi(mymacro,42) d--efmethod formatting.texi(mymacro,42) @end defmethod formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... formatting.texi(mymacro,42) d--eftypemethod formatting.texi(mymacro,42) @end deftypemethod formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@xref@{c---hapter@@@@, cross r---ef name@@@@, t---itle@@@@, file n---ame@@@@, ma---nual@@@@@}} @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@}. formatting.texi(mymacro,42) @code{@@ref@{chapter, cross ref name, title, file name, manual@}} @ref{chapter, cross ref name, title, file name, manual} formatting.texi(mymacro,42) @code{@@pxref@{chapter, cross ref name, title, file name, manual@}} @pxref{chapter, cross ref name, title, file name, manual} formatting.texi(mymacro,42) @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@ref@{chapter@}} @ref{chapter} formatting.texi(mymacro,42) @code{@@xref@{chapter@}} @xref{chapter}. formatting.texi(mymacro,42) @code{@@pxref@{chapter@}} @pxref{chapter} formatting.texi(mymacro,42) @code{@@ref@{s--ect@@comma@{@}ion@}} @ref{s--ect@comma{}ion} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@ref@{s--ect@@comma@{@}ion, a @@comma@{@} in cross formatting.texi(mymacro,42) ref, a comma@@comma@{@} in title, a comma@@comma@{@} in file, a @@comma@{@} in manual name @}} formatting.texi(mymacro,42) @ref{s--ect@comma{}ion, a @comma{} in cross formatting.texi(mymacro,42) ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@ref@{chapter,cross ref name@}} @ref{chapter,cross ref name} formatting.texi(mymacro,42) @code{@@ref@{chapter,,title@}} @ref{chapter,,title} formatting.texi(mymacro,42) @code{@@ref@{chapter,,,file name@}} @ref{chapter,,,file name} formatting.texi(mymacro,42) @code{@@ref@{chapter,,,,manual@}} @ref{chapter,,,,manual} formatting.texi(mymacro,42) @code{@@ref@{chapter,cross ref name,title,@}} @ref{chapter,cross ref name,title,} formatting.texi(mymacro,42) @code{@@ref@{chapter,cross ref name,,file name@}} @ref{chapter,cross ref name,,file name} formatting.texi(mymacro,42) @code{@@ref@{chapter,cross ref name,,,manual@}} @ref{chapter,cross ref name,,,manual} formatting.texi(mymacro,42) @code{@@ref@{chapter,cross ref name,title,file name@}} @ref{chapter,cross ref name,title,file name} formatting.texi(mymacro,42) @code{@@ref@{chapter,cross ref name,title,,manual@}} @ref{chapter,cross ref name,title,,manual} formatting.texi(mymacro,42) @code{@@ref@{chapter,cross ref name,title, file name, manual@}} @ref{chapter,cross ref name,title, file name, manual} formatting.texi(mymacro,42) @code{@@ref@{chapter,,title,file name@}} @ref{chapter,,title,file name} formatting.texi(mymacro,42) @code{@@ref@{chapter,,title,,manual@}} @ref{chapter,,title,,manual} formatting.texi(mymacro,42) @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} formatting.texi(mymacro,42) @code{@@ref@{chapter,,,file name,manual@}} @ref{chapter,,,file name,manual} formatting.texi(mymacro,42) formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,cross ref name@}} @ref{(pman)anode,cross ref name} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,,title@}} @ref{(pman)anode,,title} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,,,file name@}} @ref{(pman)anode,,,file name} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,,,,manual@}} @ref{(pman)anode,,,,manual} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,cross ref name,title,@}} @ref{(pman)anode,cross ref name,title,} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,cross ref name,,file name@}} @ref{(pman)anode,cross ref name,,file name} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,cross ref name,,,manual@}} @ref{(pman)anode,cross ref name,,,manual} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,cross ref name,title,file name@}} @ref{(pman)anode,cross ref name,title,file name} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,cross ref name,title,,manual@}} @ref{(pman)anode,cross ref name,title,,manual} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,cross ref name,title, file name, manual@}} @ref{(pman)anode,cross ref name,title, file name, manual} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,,title,file name@}} @ref{(pman)anode,,title,file name} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,,title,,manual@}} @ref{(pman)anode,,title,,manual} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,,title, file name, manual@}} @ref{(pman)anode,,title, file name, manual} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,,,file name,manual@}} @ref{(pman)anode,,,file name,manual} formatting.texi(mymacro,42) formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} formatting.texi(mymacro,42) @code{@@inforef@{chapter@}} @inforef{chapter} formatting.texi(mymacro,42) @code{@@inforef@{chapter, cross ref name@}} @inforef{chapter, cross ref name} formatting.texi(mymacro,42) @code{@@inforef@{chapter,,file name@}} @inforef{chapter,,file name} formatting.texi(mymacro,42) @code{@@inforef@{node, cross ref name, file name@}} @inforef{node, cross ref name, file name} formatting.texi(mymacro,42) @code{@@inforef@{node@}} @inforef{node} formatting.texi(mymacro,42) @code{@@inforef@{node, cross ref name@}} @inforef{node, cross ref name} formatting.texi(mymacro,42) @code{@@inforef@{node,,file name@}} @inforef{node,,file name} formatting.texi(mymacro,42) @code{@@inforef@{chapter, cross ref name, file name, spurious arg@}} @inforef{chapter, cross ref name, file name, spurious arg} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@inforef@{s--ect@@comma@{@}ion, a @@comma@{@} in cross formatting.texi(mymacro,42) ref, a comma@@comma@{@} in file@}} formatting.texi(mymacro,42) @inforef{s--ect@comma{}ion, a @comma{} in cross formatting.texi(mymacro,42) ref, a comma@comma{} in file} formatting.texi(mymacro,42) formatting.texi(mymacro,42) formatting.texi(mymacro,42) @table @bullet formatting.texi(mymacro,42) @c comment in table formatting.texi(mymacro,42) @item a formatting.texi(mymacro,42) l--ine formatting.texi(mymacro,42) @end table formatting.texi(mymacro,42) formatting.texi(mymacro,42) @vtable @asis formatting.texi(mymacro,42) @item a formatting.texi(mymacro,42) @c comment between item and itemx formatting.texi(mymacro,42) @itemx b formatting.texi(mymacro,42) l--ine formatting.texi(mymacro,42) @end vtable formatting.texi(mymacro,42) formatting.texi(mymacro,42) @ftable @minus formatting.texi(mymacro,42) @item a formatting.texi(mymacro,42) @cindex index entry between item and itemx formatting.texi(mymacro,42) @itemx b formatting.texi(mymacro,42) l--ine formatting.texi(mymacro,42) @end ftable formatting.texi(mymacro,42) formatting.texi(mymacro,42) @cartouche formatting.texi(mymacro,42) c--artouche formatting.texi(mymacro,42) @end cartouche formatting.texi(mymacro,42) formatting.texi(mymacro,42) @flushleft formatting.texi(mymacro,42) f--lushleft formatting.texi(mymacro,42) @end flushleft formatting.texi(mymacro,42) formatting.texi(mymacro,42) @flushright formatting.texi(mymacro,42) f--lushright formatting.texi(mymacro,42) @end flushright formatting.texi(mymacro,42) formatting.texi(mymacro,42) @center ce--ntered line formatting.texi(mymacro,42) formatting.texi(mymacro,42) @verbatiminclude simplest.texi formatting.texi(mymacro,42) formatting.texi(mymacro,42) @verbatim formatting.texi(mymacro,42) in verbatim '' formatting.texi(mymacro,42) @end verbatim formatting.texi(mymacro,42) formatting.texi(mymacro,42) formatting.texi(mymacro,42) @html formatting.texi(mymacro,42) html '' formatting.texi(mymacro,42) @end html formatting.texi(mymacro,42) formatting.texi(mymacro,42) formatting.texi(mymacro,42) formatting.texi(mymacro,42) @majorheading majorheading formatting.texi(mymacro,42) formatting.texi(mymacro,42) @chapheading chapheading formatting.texi(mymacro,42) formatting.texi(mymacro,42) @heading heading formatting.texi(mymacro,42) formatting.texi(mymacro,42) @subheading subheading formatting.texi(mymacro,42) formatting.texi(mymacro,42) @subsubheading subsubheading formatting.texi(mymacro,42) formatting.texi(mymacro,42) @c makeinfo cannot handle that formatting.texi(mymacro,42) formatting.texi(mymacro,42) formatting.texi(mymacro,42) @c invalid texinfo formatting.texi(mymacro,42) formatting.texi(,43) @end example formatting.texi(,44) formatting.texi(,45) @cindex t--ruc formatting.texi(,46) @cindex T--ruc formatting.texi(,47) @cindex . formatting.texi(,48) @cindex ? formatting.texi(,49) @cindex a formatting.texi(,50) @findex t--ruc formatting.texi(,51) @findex T--ruc formatting.texi(,52) @findex . formatting.texi(,53) @findex ? formatting.texi(,54) @findex a formatting.texi(,55) formatting.texi(,56) formatting.texi(,57) cp formatting.texi(,58) @printindex cp formatting.texi(,59) formatting.texi(,60) fn formatting.texi(,61) @printindex fn formatting.texi(,62) formatting.texi(,63) vr formatting.texi(,64) @printindex vr formatting.texi(,65) formatting.texi(,66) ky formatting.texi(,67) @printindex ky formatting.texi(,68) formatting.texi(,69) pg formatting.texi(,70) @printindex pg formatting.texi(,71) formatting.texi(,72) tp formatting.texi(,73) @printindex tp formatting.texi(,74) formatting.texi(,75) formatting.texi(,76) formatting.texi(,77) @node chapter formatting.texi(,78) @chapter chapter formatting.texi(,79) formatting.texi(,80) @footnote{in footnote} formatting.texi(,81) formatting.texi(,82) @format formatting.texi(,83) @menu formatting.texi(,84) * s--ect@comma{}ion:: s--ect@comma{}ion formatting.texi(,85) formatting.texi(,86) Menu comment formatting.texi(,87) ``simple-double--three---four----''@* formatting.texi(,88) formatting.texi(,89) @end menu formatting.texi(,90) @end format formatting.texi(,91) formatting.texi(,92) @node s--ect@comma{}ion formatting.texi(,93) @section A section formatting.texi(,94) formatting.texi(,95) @menu formatting.texi(,96) * subsection:: formatting.texi(,97) @end menu formatting.texi(,98) formatting.texi(,99) @node subsection formatting.texi(,100) @subsection subsection formatting.texi(,101) formatting.texi(,102) @menu formatting.texi(,103) * subsubsection ``simple-double--three---four----'':: formatting.texi(,104) @end menu formatting.texi(,105) formatting.texi(,106) @anchor{anchor} formatting.texi(,107) formatting.texi(,108) @node subsubsection ``simple-double--three---four----'' formatting.texi(,109) @subsubsection subsubsection ``simple-double--three---four----'' formatting.texi(,110) formatting.texi(,111) @node chapter2 formatting.texi(,112) @centerchap chapter 2 formatting.texi(,113) formatting.texi(,114) @printindex cp formatting.texi(,115) @printindex fn formatting.texi(,116) formatting.texi(,117) @contents formatting.texi(,118) @shortcontents formatting.texi(,119) @bye texi2html-1.82/test/formatting/res/texi_formatting/formatting.passtexi0000644000175000017500000036435011264347123030327 0ustar flichtenheldflichtenheldformatting.texi(,2) @setfilename formatting.info formatting.texi(,3) @node Top formatting.texi(,4) @top Top section formatting.texi(,5) formatting.texi(,6) @menu formatting.texi(,7) * chapter:: chapter formatting.texi(,8) formatting.texi(,9) Menu comment formatting.texi(,10) formatting.texi(,11) * description:chapter2. Chapter 2 formatting.texi(,12) @end menu formatting.texi(,13) formatting.texi(,15) formatting.texi(,16) @copying formatting.texi(,17) In copying formatting.texi(mymacro,18) formatting.texi(mymacro,18) < formatting.texi(mymacro,18) > formatting.texi(mymacro,18) " formatting.texi(mymacro,18) & formatting.texi(mymacro,18) ' formatting.texi(mymacro,18) ` formatting.texi(mymacro,18) formatting.texi(mymacro,18) ``simple-double--three---four----''@* formatting.texi(mymacro,18) code: @code{``simple-double--three---four----''} @* formatting.texi(mymacro,18) asis: @asis{``simple-double--three---four----''} @* formatting.texi(mymacro,18) strong: @strong{``simple-double--three---four----''} @* formatting.texi(mymacro,18) kbd: @kbd{``simple-double--three---four----''} @* formatting.texi(mymacro,18) formatting.texi(mymacro,18) `@w{}`simple-double-@w{}-three---four----'@w{}'@* formatting.texi(mymacro,18) formatting.texi(mymacro,18) @cindex --option formatting.texi(mymacro,18) @cindex `` formatting.texi(mymacro,18) @findex `` formatting.texi(mymacro,18) @findex --foption formatting.texi(mymacro,18) formatting.texi(mymacro,18) @@"u @"u formatting.texi(mymacro,18) @@"@{U@} @"{U} formatting.texi(mymacro,18) @@~n @~n formatting.texi(mymacro,18) @@^a @^a formatting.texi(mymacro,18) @@'e @'e formatting.texi(mymacro,18) @@=o @=o formatting.texi(mymacro,18) @@`i @`i formatting.texi(mymacro,18) @@'@{e@} @'{e} formatting.texi(mymacro,18) @@'@{@@dotless@{i@}@} @'{@dotless{i}} formatting.texi(mymacro,18) @@dotless@{i@} @dotless{i} formatting.texi(mymacro,18) @@dotless@{j@} @dotless{j} formatting.texi(mymacro,18) @@`@{@@=E@} @`{@=E} formatting.texi(mymacro,18) @@l@{@} @l{} formatting.texi(mymacro,18) @@,@{@@'C@} @,{@'C} formatting.texi(mymacro,18) @@,c @,c formatting.texi(mymacro,18) @@,c@@"u @,c@"u @* formatting.texi(mymacro,18) formatting.texi(mymacro,18) @@* @* formatting.texi(mymacro,18) @@ followed by a space formatting.texi(mymacro,18) @ formatting.texi(mymacro,18) @@ followed by a tab formatting.texi(mymacro,18) @ formatting.texi(mymacro,18) @@ followed by a new line formatting.texi(mymacro,18) @ formatting.texi(mymacro,18) @code{@@-} @- formatting.texi(mymacro,18) @code{@@|} @| formatting.texi(mymacro,18) @code{@@:} @: formatting.texi(mymacro,18) @code{@@!} @! formatting.texi(mymacro,18) @code{@@?} @? formatting.texi(mymacro,18) @code{@@.} @. formatting.texi(mymacro,18) @code{@@@@} @@ formatting.texi(mymacro,18) @code{@@@}} @} formatting.texi(mymacro,18) @code{@@@{} @{ formatting.texi(mymacro,18) @code{@@/} @/ formatting.texi(mymacro,18) formatting.texi(mymacro,18) foo vs.@: bar. formatting.texi(mymacro,18) colon :@:And something else. formatting.texi(mymacro,18) semi colon ;@:. formatting.texi(mymacro,18) And ? ?@:. formatting.texi(mymacro,18) Now ! !@:@@ formatting.texi(mymacro,18) but , ,@: formatting.texi(mymacro,18) formatting.texi(mymacro,18) @@TeX @TeX{} formatting.texi(mymacro,18) @@LaTeX @LaTeX{} formatting.texi(mymacro,18) @@bullet @bullet{} formatting.texi(mymacro,18) @@copyright @copyright{} formatting.texi(mymacro,18) @@dots @dots{} formatting.texi(mymacro,18) @@enddots @enddots{} formatting.texi(mymacro,18) @@equiv @equiv{} formatting.texi(mymacro,18) @@error @error{} formatting.texi(mymacro,18) @@expansion @expansion{} formatting.texi(mymacro,18) @@minus @minus{} formatting.texi(mymacro,18) @@point @point{} formatting.texi(mymacro,18) @@print @print{} formatting.texi(mymacro,18) @@result @result{} formatting.texi(mymacro,18) @@today @today{} formatting.texi(mymacro,18) @@aa @aa{} formatting.texi(mymacro,18) @@AA @AA{} formatting.texi(mymacro,18) @@ae @ae{} formatting.texi(mymacro,18) @@oe @oe{} formatting.texi(mymacro,18) @@AE @AE{} formatting.texi(mymacro,18) @@OE @OE{} formatting.texi(mymacro,18) @@o @o{} formatting.texi(mymacro,18) @@O @O{} formatting.texi(mymacro,18) @@ss @ss{} formatting.texi(mymacro,18) @@l @l{} formatting.texi(mymacro,18) @@L @L{} formatting.texi(mymacro,18) @@exclamdown @exclamdown{} formatting.texi(mymacro,18) @@questiondown @questiondown{} formatting.texi(mymacro,18) @@pounds @pounds{} formatting.texi(mymacro,18) @@registeredsymbol @registeredsymbol{} formatting.texi(mymacro,18) @@ordf @ordf{} formatting.texi(mymacro,18) @@ordm @ordm{} formatting.texi(mymacro,18) @@comma @comma{} formatting.texi(mymacro,18) @@quotedblleft @quotedblleft{} formatting.texi(mymacro,18) @@quotedblright @quotedblright{} formatting.texi(mymacro,18) @@quoteleft @quoteleft{} formatting.texi(mymacro,18) @@quoteright @quoteright{} formatting.texi(mymacro,18) @@quotedblbase @quotedblbase{} formatting.texi(mymacro,18) @@quotesinglbase @quotesinglbase{} formatting.texi(mymacro,18) @@guillemetleft @guillemetleft{} formatting.texi(mymacro,18) @@guillemetright @guillemetright{} formatting.texi(mymacro,18) @@guillemotleft @guillemotleft{} formatting.texi(mymacro,18) @@guillemotright @guillemotright{} formatting.texi(mymacro,18) @@guilsinglleft @guilsinglleft{} formatting.texi(mymacro,18) @@guilsinglright @guilsinglright{} formatting.texi(mymacro,18) @@textdegree @textdegree{} formatting.texi(mymacro,18) @@euro @euro{} formatting.texi(mymacro,18) @@arrow @arrow{} formatting.texi(mymacro,18) @@leq @leq{} formatting.texi(mymacro,18) @@geq @geq{} formatting.texi(mymacro,18) formatting.texi(mymacro,18) @code{@@acronym@{--a,an accronym@}} @acronym{--a,an accronym} formatting.texi(mymacro,18) @code{@@acronym@{--a@}} @acronym{--a} formatting.texi(mymacro,18) @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude Autonome @}} @abbr{@'E--. @comma{}A., @'Etude Autonome } formatting.texi(mymacro,18) @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} formatting.texi(mymacro,18) @code{@@asis@{--a@}} @asis{--a} formatting.texi(mymacro,18) @code{@@b@{--a@}} @b{--a} formatting.texi(mymacro,18) @code{@@cite@{--a@}} @cite{--a} formatting.texi(mymacro,18) @code{@@code@{--a@}} @code{--a} formatting.texi(mymacro,18) @code{@@command@{--a@}} @command{--a} formatting.texi(mymacro,18) @code{@@ctrl@{--a@}} @ctrl{--a} formatting.texi(mymacro,18) @code{@@dfn@{--a@}} @dfn{--a} formatting.texi(mymacro,18) @code{@@dmn@{--a@}} @dmn{--a} formatting.texi(mymacro,18) @code{@@email@{--a,--b@}} @email{--a,--b} formatting.texi(mymacro,18) @code{@@email@{,--b@}} @email{,--b} formatting.texi(mymacro,18) @code{@@email@{--a@}} @email{--a} formatting.texi(mymacro,18) @code{@@emph@{--a@}} @emph{--a} formatting.texi(mymacro,18) @code{@@env@{--a@}} @env{--a} formatting.texi(mymacro,18) @code{@@file@{--a@}} @file{--a} formatting.texi(mymacro,18) @code{@@i@{--a@}} @i{--a} formatting.texi(mymacro,18) @code{@@kbd@{--a@}} @kbd{--a} formatting.texi(mymacro,18) @code{@@key@{--a@}} @key{--a} formatting.texi(mymacro,18) @code{@@math@{--a @{\frac@{1@}@{2@}@} @@minus@{@}@}} @math{--a {\frac{1}{2}} @minus{}} formatting.texi(mymacro,18) @code{@@option@{--a@}} @option{--a} formatting.texi(mymacro,18) @code{@@r@{--a@}} @r{--a} formatting.texi(mymacro,18) @code{@@samp@{--a@}} @samp{--a} formatting.texi(mymacro,18) @code{@@sc@{--a@}} @sc{--a} formatting.texi(mymacro,18) @code{@@strong@{--a@}} @strong{--a} formatting.texi(mymacro,18) @code{@@t@{--a@}} @t{--a} formatting.texi(mymacro,18) @code{@@sansserif@{--a@}} @sansserif{--a} formatting.texi(mymacro,18) @code{@@titlefont@{--a@}} @titlefont{--a} formatting.texi(mymacro,18) @code{@@indicateurl@{--a@}} @indicateurl{--a} formatting.texi(mymacro,18) @code{@@uref@{--a,--b@}} @uref{--a,--b} formatting.texi(mymacro,18) @code{@@uref@{--a@}} @uref{--a} formatting.texi(mymacro,18) @code{@@uref@{,--b@}} @uref{,--b} formatting.texi(mymacro,18) @code{@@uref@{--a,--b,--c@}} @uref{--a,--b,--c} formatting.texi(mymacro,18) @code{@@uref@{,--b,--c@}} @uref{,--b,--c} formatting.texi(mymacro,18) @code{@@uref@{--a,,--c@}} @uref{--a,,--c} formatting.texi(mymacro,18) @code{@@uref@{,,--c@}} @uref{,,--c} formatting.texi(mymacro,18) @code{@@url@{--a,--b@}} @url{--a,--b} formatting.texi(mymacro,18) @code{@@url@{--a,@}} @url{--a,} formatting.texi(mymacro,18) @code{@@url@{,--b@}} @url{,--b} formatting.texi(mymacro,18) @code{@@var@{--a@}} @var{--a} formatting.texi(mymacro,18) @code{@@verb@{:--a:@}} @verb{:--a:} formatting.texi(mymacro,18) @code{@@verb@{:a < & @@ % " -- b:@}} @verb{:a < & @ % " -- b:} formatting.texi(mymacro,18) @code{@@w@{@}} @w{} formatting.texi(mymacro,18) @code{@@H@{a@}} @H{a} formatting.texi(mymacro,18) @code{@@H@{--a@}} @H{--a} formatting.texi(mymacro,18) @code{@@dotaccent@{a@}} @dotaccent{a} formatting.texi(mymacro,18) @code{@@dotaccent@{--a@}} @dotaccent{--a} formatting.texi(mymacro,18) @code{@@ringaccent@{a@}} @ringaccent{a} formatting.texi(mymacro,18) @code{@@ringaccent@{--a@}} @ringaccent{--a} formatting.texi(mymacro,18) @code{@@tieaccent@{a@}} @tieaccent{a} formatting.texi(mymacro,18) @code{@@tieaccent@{--a@}} @tieaccent{--a} formatting.texi(mymacro,18) @code{@@u@{a@}} @u{a} formatting.texi(mymacro,18) @code{@@u@{--a@}} @u{--a} formatting.texi(mymacro,18) @code{@@ubaraccent@{a@}} @ubaraccent{a} formatting.texi(mymacro,18) @code{@@ubaraccent@{--a@}} @ubaraccent{--a} formatting.texi(mymacro,18) @code{@@udotaccent@{a@}} @udotaccent{a} formatting.texi(mymacro,18) @code{@@udotaccent@{--a@}} @udotaccent{--a} formatting.texi(mymacro,18) @code{@@v@{a@}} @v{a} formatting.texi(mymacro,18) @code{@@v@{--a@}} @v{--a} formatting.texi(mymacro,18) @code{@@,@{c@}} @,{c} formatting.texi(mymacro,18) @code{@@,@{--c@}} @,{--c} formatting.texi(mymacro,18) @code{@@footnote@{in footnote@}} @footnote{in footnote} formatting.texi(mymacro,18) @code{@@footnote@{in footnote2@}} @footnote{in footnote2} formatting.texi(mymacro,18) formatting.texi(mymacro,18) @code{@@image@{f--ile@}} @image{f--ile} formatting.texi(mymacro,18) @code{@@image@{f--ile,l--i@}} @image{f--ile,l--i} formatting.texi(mymacro,18) @code{@@image@{f--ile,,l--e@}} @image{f--ile,,l--e} formatting.texi(mymacro,18) @code{@@image@{f--ile,,,alt@}} @image{f--ile,,,alt} formatting.texi(mymacro,18) @code{@@image@{f--ile,,,,e-d-xt@}} @image{f--ile,,,,e--xt} formatting.texi(mymacro,18) @code{@@image@{f--ile,aze,az,alt,e--xt@}} @image{f--ile,aze,az,alt,e--xt} formatting.texi(mymacro,18) @code{@@image@{f-ile,aze,,a--lt@}} @image{f-ile,aze,,a--lt} formatting.texi(mymacro,18) @code{@@image@{@@file@{f--ile@}@@@@@@.,aze,az,alt,@@file@{file ext@} e--xt@@@}} @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@}} formatting.texi(mymacro,18) formatting.texi(mymacro,18) @sp 2 formatting.texi(mymacro,18) formatting.texi(mymacro,18) @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} formatting.texi(mymacro,18) @clickstyle @result formatting.texi(mymacro,18) After clickstyle @result{} formatting.texi(mymacro,18) @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} formatting.texi(mymacro,18) @clickstyle @arrow formatting.texi(mymacro,18) formatting.texi(mymacro,18) @quotation formatting.texi(mymacro,18) A quot---ation formatting.texi(mymacro,18) @end quotation formatting.texi(mymacro,18) formatting.texi(mymacro,18) @quotation Note formatting.texi(mymacro,18) A Note formatting.texi(mymacro,18) @end quotation formatting.texi(mymacro,18) formatting.texi(mymacro,18) @quotation note formatting.texi(mymacro,18) A note formatting.texi(mymacro,18) @end quotation formatting.texi(mymacro,18) formatting.texi(mymacro,18) @quotation Caution formatting.texi(mymacro,18) Caution formatting.texi(mymacro,18) @end quotation formatting.texi(mymacro,18) formatting.texi(mymacro,18) @quotation Important formatting.texi(mymacro,18) Important formatting.texi(mymacro,18) @end quotation formatting.texi(mymacro,18) formatting.texi(mymacro,18) @quotation Tip formatting.texi(mymacro,18) a Tip formatting.texi(mymacro,18) @end quotation formatting.texi(mymacro,18) formatting.texi(mymacro,18) @quotation Warning formatting.texi(mymacro,18) a Warning. formatting.texi(mymacro,18) @end quotation formatting.texi(mymacro,18) formatting.texi(mymacro,18) @quotation something @'e @TeX{} formatting.texi(mymacro,18) The something @'e @TeX{} is here. formatting.texi(mymacro,18) @end quotation formatting.texi(mymacro,18) formatting.texi(mymacro,18) @quotation @@ at the end of line @ formatting.texi(mymacro,18) A @@ at the end of the @@quotation line. formatting.texi(mymacro,18) @end quotation formatting.texi(mymacro,18) formatting.texi(mymacro,18) @quotation something, other thing formatting.texi(mymacro,18) something, other thing formatting.texi(mymacro,18) @end quotation formatting.texi(mymacro,18) formatting.texi(mymacro,18) @quotation Note, the note formatting.texi(mymacro,18) Note, the note formatting.texi(mymacro,18) @end quotation formatting.texi(mymacro,18) formatting.texi(mymacro,18) @quotation formatting.texi(mymacro,18) @end quotation formatting.texi(mymacro,18) formatting.texi(mymacro,18) @quotation Empty formatting.texi(mymacro,18) @end quotation formatting.texi(mymacro,18) formatting.texi(mymacro,18) @quotation @asis{} formatting.texi(mymacro,18) @end quotation formatting.texi(mymacro,18) formatting.texi(mymacro,18) @quotation @* formatting.texi(mymacro,18) @end quotation formatting.texi(mymacro,18) formatting.texi(mymacro,18) formatting.texi(mymacro,18) @itemize formatting.texi(mymacro,18) @item i--temize formatting.texi(mymacro,18) @end itemize formatting.texi(mymacro,18) formatting.texi(mymacro,18) @itemize + formatting.texi(mymacro,18) @item i--tem + formatting.texi(mymacro,18) @end itemize formatting.texi(mymacro,18) formatting.texi(mymacro,18) @itemize @bullet formatting.texi(mymacro,18) @item b--ullet formatting.texi(mymacro,18) @end itemize formatting.texi(mymacro,18) formatting.texi(mymacro,18) @itemize @minus formatting.texi(mymacro,18) @item minu--s formatting.texi(mymacro,18) @end itemize formatting.texi(mymacro,18) formatting.texi(mymacro,18) @itemize @emph formatting.texi(mymacro,18) @item e--mph item formatting.texi(mymacro,18) @end itemize formatting.texi(mymacro,18) formatting.texi(mymacro,18) @itemize @emph{after emph} formatting.texi(mymacro,18) @c comment in itemize formatting.texi(mymacro,18) @item e--mph item formatting.texi(mymacro,18) @end itemize formatting.texi(mymacro,18) formatting.texi(mymacro,18) @itemize @bullet{} a--n itemize line formatting.texi(mymacro,18) @cindex index entry within itemize formatting.texi(mymacro,18) @item i--tem 1 formatting.texi(mymacro,18) @item i--tem 2 formatting.texi(mymacro,18) @end itemize formatting.texi(mymacro,18) formatting.texi(mymacro,18) @enumerate formatting.texi(mymacro,18) @item e--numerate formatting.texi(mymacro,18) @end enumerate formatting.texi(mymacro,18) formatting.texi(mymacro,18) @multitable @columnfractions 6 7 formatting.texi(mymacro,18) @headitem mu--ltitable headitem @tab another tab formatting.texi(mymacro,18) @item mu--ltitable item @tab multitable tab formatting.texi(mymacro,18) @c comment in multitable formatting.texi(mymacro,18) @item mu--ltitable item 2 @tab multitable tab 2 formatting.texi(mymacro,18) @cindex index entry within multitable formatting.texi(mymacro,18) @item lone mu--ltitable item formatting.texi(mymacro,18) @end multitable formatting.texi(mymacro,18) formatting.texi(mymacro,18) @multitable {truc} {bidule} formatting.texi(mymacro,18) @item truc @tab bidule formatting.texi(mymacro,18) @end multitable formatting.texi(mymacro,18) formatting.texi(mymacro,18) @example formatting.texi(mymacro,18) e--xample some formatting.texi(mymacro,18) text formatting.texi(mymacro,18) @end example formatting.texi(mymacro,18) formatting.texi(mymacro,18) @smallexample formatting.texi(mymacro,18) s--mallexample formatting.texi(mymacro,18) @end smallexample formatting.texi(mymacro,18) formatting.texi(mymacro,18) @display formatting.texi(mymacro,18) d--isplay formatting.texi(mymacro,18) @end display formatting.texi(mymacro,18) formatting.texi(mymacro,18) @smalldisplay formatting.texi(mymacro,18) s--malldisplay formatting.texi(mymacro,18) @end smalldisplay formatting.texi(mymacro,18) formatting.texi(mymacro,18) @lisp formatting.texi(mymacro,18) l--isp formatting.texi(mymacro,18) @end lisp formatting.texi(mymacro,18) formatting.texi(mymacro,18) @smalllisp formatting.texi(mymacro,18) s--malllisp formatting.texi(mymacro,18) @end smalllisp formatting.texi(mymacro,18) formatting.texi(mymacro,18) @format formatting.texi(mymacro,18) f--ormat formatting.texi(mymacro,18) @end format formatting.texi(mymacro,18) formatting.texi(mymacro,18) @smallformat formatting.texi(mymacro,18) s--mallformat formatting.texi(mymacro,18) @end smallformat formatting.texi(mymacro,18) formatting.texi(mymacro,18) @deffn c--ategory d--effn_name a--rguments... formatting.texi(mymacro,18) d--effn formatting.texi(mymacro,18) @end deffn formatting.texi(mymacro,18) formatting.texi(mymacro,18) @deffn cate--gory de--ffn_name ar--guments @ formatting.texi(mymacro,18) more args @* even more so formatting.texi(mymacro,18) def--fn formatting.texi(mymacro,18) @end deffn formatting.texi(mymacro,18) formatting.texi(mymacro,18) @deffn fset @var{i} a g formatting.texi(mymacro,18) @cindex index entry within deffn formatting.texi(mymacro,18) @deffnx {cmde} truc {} formatting.texi(mymacro,18) @deffnx Command {log trap} {} formatting.texi(mymacro,18) @deffnx Command { log trap1} {} formatting.texi(mymacro,18) @deffnx Command {log trap2 } {} formatting.texi(mymacro,18) @deffnx cmde @b{id ule} truc formatting.texi(mymacro,18) @deffnx cmde2 @b{id @samp{i} ule} truc formatting.texi(mymacro,18) @deffnx @b{id @samp{i} ule} formatting.texi(mymacro,18) @deffnx formatting.texi(mymacro,18) @deffnx aaa formatting.texi(mymacro,18) @deffnx {} {} formatting.texi(mymacro,18) @deffnx{} formatting.texi(mymacro,18) @deffnx{} machin formatting.texi(mymacro,18) @deffnx{} {bidule machin} formatting.texi(mymacro,18) @deffnx{truc} machin formatting.texi(mymacro,18) @deffnx{truc} { } formatting.texi(mymacro,18) @deffnx{truc} followed by a comment formatting.texi(mymacro,18) @c comment formatting.texi(mymacro,18) @deffnx{truc} formatting.texi(mymacro,18) @deffnx{} {} formatting.texi(mymacro,18) @deffnx {truc} a b c d e @b{f g} {h i} formatting.texi(mymacro,18) @deffnx {truc} deffnx before end deffn formatting.texi(mymacro,18) @end deffn formatting.texi(mymacro,18) formatting.texi(mymacro,18) @deffn empty deffn formatting.texi(mymacro,18) @end deffn formatting.texi(mymacro,18) formatting.texi(mymacro,18) @deffn empty deffn with deffnx formatting.texi(mymacro,18) @c comment between deffn and deffnx formatting.texi(mymacro,18) @deffnx empty deffnx formatting.texi(mymacro,18) @end deffn formatting.texi(mymacro,18) formatting.texi(mymacro,18) @deffn fset @var{i} a g formatting.texi(mymacro,18) @deffnx {cmde} truc {} formatting.texi(mymacro,18) @c comment formatting.texi(mymacro,18) text in def item for second def item formatting.texi(mymacro,18) @end deffn formatting.texi(mymacro,18) formatting.texi(mymacro,18) @defvr c--ategory d--efvr_name formatting.texi(mymacro,18) d--efvr formatting.texi(mymacro,18) @end defvr formatting.texi(mymacro,18) formatting.texi(mymacro,18) @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... formatting.texi(mymacro,18) d--eftypefn formatting.texi(mymacro,18) @end deftypefn formatting.texi(mymacro,18) formatting.texi(mymacro,18) @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... formatting.texi(mymacro,18) d--eftypeop formatting.texi(mymacro,18) @end deftypeop formatting.texi(mymacro,18) formatting.texi(mymacro,18) @deftypevr c--ategory t--ype d--eftypevr_name formatting.texi(mymacro,18) d--eftypevr formatting.texi(mymacro,18) @end deftypevr formatting.texi(mymacro,18) formatting.texi(mymacro,18) @defcv c--ategory c--lass d--efcv_name formatting.texi(mymacro,18) d--efcv formatting.texi(mymacro,18) @end defcv formatting.texi(mymacro,18) formatting.texi(mymacro,18) @defop c--ategory c--lass d--efop_name a--rguments... formatting.texi(mymacro,18) d--efop formatting.texi(mymacro,18) @end defop formatting.texi(mymacro,18) formatting.texi(mymacro,18) @deftp c--ategory d--eftp_name a--ttributes... formatting.texi(mymacro,18) d--eftp formatting.texi(mymacro,18) @end deftp formatting.texi(mymacro,18) formatting.texi(mymacro,18) @defun d--efun_name a--rguments... formatting.texi(mymacro,18) d--efun formatting.texi(mymacro,18) @end defun formatting.texi(mymacro,18) formatting.texi(mymacro,18) @defmac d--efmac_name a--rguments... formatting.texi(mymacro,18) d--efmac formatting.texi(mymacro,18) @end defmac formatting.texi(mymacro,18) formatting.texi(mymacro,18) @defspec d--efspec_name a--rguments... formatting.texi(mymacro,18) d--efspec formatting.texi(mymacro,18) @end defspec formatting.texi(mymacro,18) formatting.texi(mymacro,18) @defvar d--efvar_name argvar argvar1 formatting.texi(mymacro,18) d--efvar formatting.texi(mymacro,18) @end defvar formatting.texi(mymacro,18) formatting.texi(mymacro,18) @defopt d--efopt_name formatting.texi(mymacro,18) d--efopt formatting.texi(mymacro,18) @end defopt formatting.texi(mymacro,18) formatting.texi(mymacro,18) @deftypefun t--ype d--eftypefun_name a--rguments... formatting.texi(mymacro,18) d--eftypefun formatting.texi(mymacro,18) @end deftypefun formatting.texi(mymacro,18) formatting.texi(mymacro,18) @deftypevar t--ype d--eftypevar_name formatting.texi(mymacro,18) d--eftypevar formatting.texi(mymacro,18) @end deftypevar formatting.texi(mymacro,18) formatting.texi(mymacro,18) @defivar c--lass d--efivar_name formatting.texi(mymacro,18) d--efivar formatting.texi(mymacro,18) @end defivar formatting.texi(mymacro,18) formatting.texi(mymacro,18) @deftypeivar c--lass t--ype d--eftypeivar_name formatting.texi(mymacro,18) d--eftypeivar formatting.texi(mymacro,18) @end deftypeivar formatting.texi(mymacro,18) formatting.texi(mymacro,18) @defmethod c--lass d--efmethod_name a--rguments... formatting.texi(mymacro,18) d--efmethod formatting.texi(mymacro,18) @end defmethod formatting.texi(mymacro,18) formatting.texi(mymacro,18) @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... formatting.texi(mymacro,18) d--eftypemethod formatting.texi(mymacro,18) @end deftypemethod formatting.texi(mymacro,18) formatting.texi(mymacro,18) @code{@@xref@{c---hapter@@@@, cross r---ef name@@@@, t---itle@@@@, file n---ame@@@@, ma---nual@@@@@}} @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@}. formatting.texi(mymacro,18) @code{@@ref@{chapter, cross ref name, title, file name, manual@}} @ref{chapter, cross ref name, title, file name, manual} formatting.texi(mymacro,18) @code{@@pxref@{chapter, cross ref name, title, file name, manual@}} @pxref{chapter, cross ref name, title, file name, manual} formatting.texi(mymacro,18) @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} formatting.texi(mymacro,18) formatting.texi(mymacro,18) @code{@@ref@{chapter@}} @ref{chapter} formatting.texi(mymacro,18) @code{@@xref@{chapter@}} @xref{chapter}. formatting.texi(mymacro,18) @code{@@pxref@{chapter@}} @pxref{chapter} formatting.texi(mymacro,18) @code{@@ref@{s--ect@@comma@{@}ion@}} @ref{s--ect@comma{}ion} formatting.texi(mymacro,18) formatting.texi(mymacro,18) @code{@@ref@{s--ect@@comma@{@}ion, a @@comma@{@} in cross formatting.texi(mymacro,18) ref, a comma@@comma@{@} in title, a comma@@comma@{@} in file, a @@comma@{@} in manual name @}} formatting.texi(mymacro,18) @ref{s--ect@comma{}ion, a @comma{} in cross formatting.texi(mymacro,18) ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } formatting.texi(mymacro,18) formatting.texi(mymacro,18) @code{@@ref@{chapter,cross ref name@}} @ref{chapter,cross ref name} formatting.texi(mymacro,18) @code{@@ref@{chapter,,title@}} @ref{chapter,,title} formatting.texi(mymacro,18) @code{@@ref@{chapter,,,file name@}} @ref{chapter,,,file name} formatting.texi(mymacro,18) @code{@@ref@{chapter,,,,manual@}} @ref{chapter,,,,manual} formatting.texi(mymacro,18) @code{@@ref@{chapter,cross ref name,title,@}} @ref{chapter,cross ref name,title,} formatting.texi(mymacro,18) @code{@@ref@{chapter,cross ref name,,file name@}} @ref{chapter,cross ref name,,file name} formatting.texi(mymacro,18) @code{@@ref@{chapter,cross ref name,,,manual@}} @ref{chapter,cross ref name,,,manual} formatting.texi(mymacro,18) @code{@@ref@{chapter,cross ref name,title,file name@}} @ref{chapter,cross ref name,title,file name} formatting.texi(mymacro,18) @code{@@ref@{chapter,cross ref name,title,,manual@}} @ref{chapter,cross ref name,title,,manual} formatting.texi(mymacro,18) @code{@@ref@{chapter,cross ref name,title, file name, manual@}} @ref{chapter,cross ref name,title, file name, manual} formatting.texi(mymacro,18) @code{@@ref@{chapter,,title,file name@}} @ref{chapter,,title,file name} formatting.texi(mymacro,18) @code{@@ref@{chapter,,title,,manual@}} @ref{chapter,,title,,manual} formatting.texi(mymacro,18) @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} formatting.texi(mymacro,18) @code{@@ref@{chapter,,,file name,manual@}} @ref{chapter,,,file name,manual} formatting.texi(mymacro,18) formatting.texi(mymacro,18) formatting.texi(mymacro,18) @code{@@ref@{(pman)anode,cross ref name@}} @ref{(pman)anode,cross ref name} formatting.texi(mymacro,18) @code{@@ref@{(pman)anode,,title@}} @ref{(pman)anode,,title} formatting.texi(mymacro,18) @code{@@ref@{(pman)anode,,,file name@}} @ref{(pman)anode,,,file name} formatting.texi(mymacro,18) @code{@@ref@{(pman)anode,,,,manual@}} @ref{(pman)anode,,,,manual} formatting.texi(mymacro,18) @code{@@ref@{(pman)anode,cross ref name,title,@}} @ref{(pman)anode,cross ref name,title,} formatting.texi(mymacro,18) @code{@@ref@{(pman)anode,cross ref name,,file name@}} @ref{(pman)anode,cross ref name,,file name} formatting.texi(mymacro,18) @code{@@ref@{(pman)anode,cross ref name,,,manual@}} @ref{(pman)anode,cross ref name,,,manual} formatting.texi(mymacro,18) @code{@@ref@{(pman)anode,cross ref name,title,file name@}} @ref{(pman)anode,cross ref name,title,file name} formatting.texi(mymacro,18) @code{@@ref@{(pman)anode,cross ref name,title,,manual@}} @ref{(pman)anode,cross ref name,title,,manual} formatting.texi(mymacro,18) @code{@@ref@{(pman)anode,cross ref name,title, file name, manual@}} @ref{(pman)anode,cross ref name,title, file name, manual} formatting.texi(mymacro,18) @code{@@ref@{(pman)anode,,title,file name@}} @ref{(pman)anode,,title,file name} formatting.texi(mymacro,18) @code{@@ref@{(pman)anode,,title,,manual@}} @ref{(pman)anode,,title,,manual} formatting.texi(mymacro,18) @code{@@ref@{(pman)anode,,title, file name, manual@}} @ref{(pman)anode,,title, file name, manual} formatting.texi(mymacro,18) @code{@@ref@{(pman)anode,,,file name,manual@}} @ref{(pman)anode,,,file name,manual} formatting.texi(mymacro,18) formatting.texi(mymacro,18) formatting.texi(mymacro,18) @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} formatting.texi(mymacro,18) @code{@@inforef@{chapter@}} @inforef{chapter} formatting.texi(mymacro,18) @code{@@inforef@{chapter, cross ref name@}} @inforef{chapter, cross ref name} formatting.texi(mymacro,18) @code{@@inforef@{chapter,,file name@}} @inforef{chapter,,file name} formatting.texi(mymacro,18) @code{@@inforef@{node, cross ref name, file name@}} @inforef{node, cross ref name, file name} formatting.texi(mymacro,18) @code{@@inforef@{node@}} @inforef{node} formatting.texi(mymacro,18) @code{@@inforef@{node, cross ref name@}} @inforef{node, cross ref name} formatting.texi(mymacro,18) @code{@@inforef@{node,,file name@}} @inforef{node,,file name} formatting.texi(mymacro,18) @code{@@inforef@{chapter, cross ref name, file name, spurious arg@}} @inforef{chapter, cross ref name, file name, spurious arg} formatting.texi(mymacro,18) formatting.texi(mymacro,18) @code{@@inforef@{s--ect@@comma@{@}ion, a @@comma@{@} in cross formatting.texi(mymacro,18) ref, a comma@@comma@{@} in file@}} formatting.texi(mymacro,18) @inforef{s--ect@comma{}ion, a @comma{} in cross formatting.texi(mymacro,18) ref, a comma@comma{} in file} formatting.texi(mymacro,18) formatting.texi(mymacro,18) formatting.texi(mymacro,18) @table @bullet formatting.texi(mymacro,18) @c comment in table formatting.texi(mymacro,18) @item a formatting.texi(mymacro,18) l--ine formatting.texi(mymacro,18) @end table formatting.texi(mymacro,18) formatting.texi(mymacro,18) @vtable @asis formatting.texi(mymacro,18) @item a formatting.texi(mymacro,18) @c comment between item and itemx formatting.texi(mymacro,18) @itemx b formatting.texi(mymacro,18) l--ine formatting.texi(mymacro,18) @end vtable formatting.texi(mymacro,18) formatting.texi(mymacro,18) @ftable @minus formatting.texi(mymacro,18) @item a formatting.texi(mymacro,18) @cindex index entry between item and itemx formatting.texi(mymacro,18) @itemx b formatting.texi(mymacro,18) l--ine formatting.texi(mymacro,18) @end ftable formatting.texi(mymacro,18) formatting.texi(mymacro,18) @cartouche formatting.texi(mymacro,18) c--artouche formatting.texi(mymacro,18) @end cartouche formatting.texi(mymacro,18) formatting.texi(mymacro,18) @flushleft formatting.texi(mymacro,18) f--lushleft formatting.texi(mymacro,18) @end flushleft formatting.texi(mymacro,18) formatting.texi(mymacro,18) @flushright formatting.texi(mymacro,18) f--lushright formatting.texi(mymacro,18) @end flushright formatting.texi(mymacro,18) formatting.texi(mymacro,18) @center ce--ntered line formatting.texi(mymacro,18) formatting.texi(mymacro,18) @verbatiminclude simplest.texi formatting.texi(mymacro,18) formatting.texi(mymacro,18) @verbatim formatting.texi(mymacro,18) in verbatim '' formatting.texi(mymacro,18) @end verbatim formatting.texi(mymacro,18) formatting.texi(mymacro,18) formatting.texi(mymacro,18) @html formatting.texi(mymacro,18) html '' formatting.texi(mymacro,18) @end html formatting.texi(mymacro,18) formatting.texi(mymacro,18) formatting.texi(mymacro,18) formatting.texi(mymacro,18) @majorheading majorheading formatting.texi(mymacro,18) formatting.texi(mymacro,18) @chapheading chapheading formatting.texi(mymacro,18) formatting.texi(mymacro,18) @heading heading formatting.texi(mymacro,18) formatting.texi(mymacro,18) @subheading subheading formatting.texi(mymacro,18) formatting.texi(mymacro,18) @subsubheading subsubheading formatting.texi(mymacro,18) formatting.texi(mymacro,18) @c makeinfo cannot handle that formatting.texi(mymacro,18) formatting.texi(mymacro,18) formatting.texi(mymacro,18) @c invalid texinfo formatting.texi(mymacro,18) formatting.texi(,19) @end copying formatting.texi(,20) formatting.texi(,21) @titlepage formatting.texi(,22) @title title --a formatting.texi(,23) @subtitle formatting subtitle --a formatting.texi(,24) @subtitle subtitle 2 --a formatting.texi(,25) @author author1 --a with accents in name T@'e@,ca formatting.texi(,26) @author author2 --a formatting.texi(,27) In titlepage formatting.texi(mymacro,28) formatting.texi(mymacro,28) < formatting.texi(mymacro,28) > formatting.texi(mymacro,28) " formatting.texi(mymacro,28) & formatting.texi(mymacro,28) ' formatting.texi(mymacro,28) ` formatting.texi(mymacro,28) formatting.texi(mymacro,28) ``simple-double--three---four----''@* formatting.texi(mymacro,28) code: @code{``simple-double--three---four----''} @* formatting.texi(mymacro,28) asis: @asis{``simple-double--three---four----''} @* formatting.texi(mymacro,28) strong: @strong{``simple-double--three---four----''} @* formatting.texi(mymacro,28) kbd: @kbd{``simple-double--three---four----''} @* formatting.texi(mymacro,28) formatting.texi(mymacro,28) `@w{}`simple-double-@w{}-three---four----'@w{}'@* formatting.texi(mymacro,28) formatting.texi(mymacro,28) @cindex --option formatting.texi(mymacro,28) @cindex `` formatting.texi(mymacro,28) @findex `` formatting.texi(mymacro,28) @findex --foption formatting.texi(mymacro,28) formatting.texi(mymacro,28) @@"u @"u formatting.texi(mymacro,28) @@"@{U@} @"{U} formatting.texi(mymacro,28) @@~n @~n formatting.texi(mymacro,28) @@^a @^a formatting.texi(mymacro,28) @@'e @'e formatting.texi(mymacro,28) @@=o @=o formatting.texi(mymacro,28) @@`i @`i formatting.texi(mymacro,28) @@'@{e@} @'{e} formatting.texi(mymacro,28) @@'@{@@dotless@{i@}@} @'{@dotless{i}} formatting.texi(mymacro,28) @@dotless@{i@} @dotless{i} formatting.texi(mymacro,28) @@dotless@{j@} @dotless{j} formatting.texi(mymacro,28) @@`@{@@=E@} @`{@=E} formatting.texi(mymacro,28) @@l@{@} @l{} formatting.texi(mymacro,28) @@,@{@@'C@} @,{@'C} formatting.texi(mymacro,28) @@,c @,c formatting.texi(mymacro,28) @@,c@@"u @,c@"u @* formatting.texi(mymacro,28) formatting.texi(mymacro,28) @@* @* formatting.texi(mymacro,28) @@ followed by a space formatting.texi(mymacro,28) @ formatting.texi(mymacro,28) @@ followed by a tab formatting.texi(mymacro,28) @ formatting.texi(mymacro,28) @@ followed by a new line formatting.texi(mymacro,28) @ formatting.texi(mymacro,28) @code{@@-} @- formatting.texi(mymacro,28) @code{@@|} @| formatting.texi(mymacro,28) @code{@@:} @: formatting.texi(mymacro,28) @code{@@!} @! formatting.texi(mymacro,28) @code{@@?} @? formatting.texi(mymacro,28) @code{@@.} @. formatting.texi(mymacro,28) @code{@@@@} @@ formatting.texi(mymacro,28) @code{@@@}} @} formatting.texi(mymacro,28) @code{@@@{} @{ formatting.texi(mymacro,28) @code{@@/} @/ formatting.texi(mymacro,28) formatting.texi(mymacro,28) foo vs.@: bar. formatting.texi(mymacro,28) colon :@:And something else. formatting.texi(mymacro,28) semi colon ;@:. formatting.texi(mymacro,28) And ? ?@:. formatting.texi(mymacro,28) Now ! !@:@@ formatting.texi(mymacro,28) but , ,@: formatting.texi(mymacro,28) formatting.texi(mymacro,28) @@TeX @TeX{} formatting.texi(mymacro,28) @@LaTeX @LaTeX{} formatting.texi(mymacro,28) @@bullet @bullet{} formatting.texi(mymacro,28) @@copyright @copyright{} formatting.texi(mymacro,28) @@dots @dots{} formatting.texi(mymacro,28) @@enddots @enddots{} formatting.texi(mymacro,28) @@equiv @equiv{} formatting.texi(mymacro,28) @@error @error{} formatting.texi(mymacro,28) @@expansion @expansion{} formatting.texi(mymacro,28) @@minus @minus{} formatting.texi(mymacro,28) @@point @point{} formatting.texi(mymacro,28) @@print @print{} formatting.texi(mymacro,28) @@result @result{} formatting.texi(mymacro,28) @@today @today{} formatting.texi(mymacro,28) @@aa @aa{} formatting.texi(mymacro,28) @@AA @AA{} formatting.texi(mymacro,28) @@ae @ae{} formatting.texi(mymacro,28) @@oe @oe{} formatting.texi(mymacro,28) @@AE @AE{} formatting.texi(mymacro,28) @@OE @OE{} formatting.texi(mymacro,28) @@o @o{} formatting.texi(mymacro,28) @@O @O{} formatting.texi(mymacro,28) @@ss @ss{} formatting.texi(mymacro,28) @@l @l{} formatting.texi(mymacro,28) @@L @L{} formatting.texi(mymacro,28) @@exclamdown @exclamdown{} formatting.texi(mymacro,28) @@questiondown @questiondown{} formatting.texi(mymacro,28) @@pounds @pounds{} formatting.texi(mymacro,28) @@registeredsymbol @registeredsymbol{} formatting.texi(mymacro,28) @@ordf @ordf{} formatting.texi(mymacro,28) @@ordm @ordm{} formatting.texi(mymacro,28) @@comma @comma{} formatting.texi(mymacro,28) @@quotedblleft @quotedblleft{} formatting.texi(mymacro,28) @@quotedblright @quotedblright{} formatting.texi(mymacro,28) @@quoteleft @quoteleft{} formatting.texi(mymacro,28) @@quoteright @quoteright{} formatting.texi(mymacro,28) @@quotedblbase @quotedblbase{} formatting.texi(mymacro,28) @@quotesinglbase @quotesinglbase{} formatting.texi(mymacro,28) @@guillemetleft @guillemetleft{} formatting.texi(mymacro,28) @@guillemetright @guillemetright{} formatting.texi(mymacro,28) @@guillemotleft @guillemotleft{} formatting.texi(mymacro,28) @@guillemotright @guillemotright{} formatting.texi(mymacro,28) @@guilsinglleft @guilsinglleft{} formatting.texi(mymacro,28) @@guilsinglright @guilsinglright{} formatting.texi(mymacro,28) @@textdegree @textdegree{} formatting.texi(mymacro,28) @@euro @euro{} formatting.texi(mymacro,28) @@arrow @arrow{} formatting.texi(mymacro,28) @@leq @leq{} formatting.texi(mymacro,28) @@geq @geq{} formatting.texi(mymacro,28) formatting.texi(mymacro,28) @code{@@acronym@{--a,an accronym@}} @acronym{--a,an accronym} formatting.texi(mymacro,28) @code{@@acronym@{--a@}} @acronym{--a} formatting.texi(mymacro,28) @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude Autonome @}} @abbr{@'E--. @comma{}A., @'Etude Autonome } formatting.texi(mymacro,28) @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} formatting.texi(mymacro,28) @code{@@asis@{--a@}} @asis{--a} formatting.texi(mymacro,28) @code{@@b@{--a@}} @b{--a} formatting.texi(mymacro,28) @code{@@cite@{--a@}} @cite{--a} formatting.texi(mymacro,28) @code{@@code@{--a@}} @code{--a} formatting.texi(mymacro,28) @code{@@command@{--a@}} @command{--a} formatting.texi(mymacro,28) @code{@@ctrl@{--a@}} @ctrl{--a} formatting.texi(mymacro,28) @code{@@dfn@{--a@}} @dfn{--a} formatting.texi(mymacro,28) @code{@@dmn@{--a@}} @dmn{--a} formatting.texi(mymacro,28) @code{@@email@{--a,--b@}} @email{--a,--b} formatting.texi(mymacro,28) @code{@@email@{,--b@}} @email{,--b} formatting.texi(mymacro,28) @code{@@email@{--a@}} @email{--a} formatting.texi(mymacro,28) @code{@@emph@{--a@}} @emph{--a} formatting.texi(mymacro,28) @code{@@env@{--a@}} @env{--a} formatting.texi(mymacro,28) @code{@@file@{--a@}} @file{--a} formatting.texi(mymacro,28) @code{@@i@{--a@}} @i{--a} formatting.texi(mymacro,28) @code{@@kbd@{--a@}} @kbd{--a} formatting.texi(mymacro,28) @code{@@key@{--a@}} @key{--a} formatting.texi(mymacro,28) @code{@@math@{--a @{\frac@{1@}@{2@}@} @@minus@{@}@}} @math{--a {\frac{1}{2}} @minus{}} formatting.texi(mymacro,28) @code{@@option@{--a@}} @option{--a} formatting.texi(mymacro,28) @code{@@r@{--a@}} @r{--a} formatting.texi(mymacro,28) @code{@@samp@{--a@}} @samp{--a} formatting.texi(mymacro,28) @code{@@sc@{--a@}} @sc{--a} formatting.texi(mymacro,28) @code{@@strong@{--a@}} @strong{--a} formatting.texi(mymacro,28) @code{@@t@{--a@}} @t{--a} formatting.texi(mymacro,28) @code{@@sansserif@{--a@}} @sansserif{--a} formatting.texi(mymacro,28) @code{@@titlefont@{--a@}} @titlefont{--a} formatting.texi(mymacro,28) @code{@@indicateurl@{--a@}} @indicateurl{--a} formatting.texi(mymacro,28) @code{@@uref@{--a,--b@}} @uref{--a,--b} formatting.texi(mymacro,28) @code{@@uref@{--a@}} @uref{--a} formatting.texi(mymacro,28) @code{@@uref@{,--b@}} @uref{,--b} formatting.texi(mymacro,28) @code{@@uref@{--a,--b,--c@}} @uref{--a,--b,--c} formatting.texi(mymacro,28) @code{@@uref@{,--b,--c@}} @uref{,--b,--c} formatting.texi(mymacro,28) @code{@@uref@{--a,,--c@}} @uref{--a,,--c} formatting.texi(mymacro,28) @code{@@uref@{,,--c@}} @uref{,,--c} formatting.texi(mymacro,28) @code{@@url@{--a,--b@}} @url{--a,--b} formatting.texi(mymacro,28) @code{@@url@{--a,@}} @url{--a,} formatting.texi(mymacro,28) @code{@@url@{,--b@}} @url{,--b} formatting.texi(mymacro,28) @code{@@var@{--a@}} @var{--a} formatting.texi(mymacro,28) @code{@@verb@{:--a:@}} @verb{:--a:} formatting.texi(mymacro,28) @code{@@verb@{:a < & @@ % " -- b:@}} @verb{:a < & @ % " -- b:} formatting.texi(mymacro,28) @code{@@w@{@}} @w{} formatting.texi(mymacro,28) @code{@@H@{a@}} @H{a} formatting.texi(mymacro,28) @code{@@H@{--a@}} @H{--a} formatting.texi(mymacro,28) @code{@@dotaccent@{a@}} @dotaccent{a} formatting.texi(mymacro,28) @code{@@dotaccent@{--a@}} @dotaccent{--a} formatting.texi(mymacro,28) @code{@@ringaccent@{a@}} @ringaccent{a} formatting.texi(mymacro,28) @code{@@ringaccent@{--a@}} @ringaccent{--a} formatting.texi(mymacro,28) @code{@@tieaccent@{a@}} @tieaccent{a} formatting.texi(mymacro,28) @code{@@tieaccent@{--a@}} @tieaccent{--a} formatting.texi(mymacro,28) @code{@@u@{a@}} @u{a} formatting.texi(mymacro,28) @code{@@u@{--a@}} @u{--a} formatting.texi(mymacro,28) @code{@@ubaraccent@{a@}} @ubaraccent{a} formatting.texi(mymacro,28) @code{@@ubaraccent@{--a@}} @ubaraccent{--a} formatting.texi(mymacro,28) @code{@@udotaccent@{a@}} @udotaccent{a} formatting.texi(mymacro,28) @code{@@udotaccent@{--a@}} @udotaccent{--a} formatting.texi(mymacro,28) @code{@@v@{a@}} @v{a} formatting.texi(mymacro,28) @code{@@v@{--a@}} @v{--a} formatting.texi(mymacro,28) @code{@@,@{c@}} @,{c} formatting.texi(mymacro,28) @code{@@,@{--c@}} @,{--c} formatting.texi(mymacro,28) @code{@@footnote@{in footnote@}} @footnote{in footnote} formatting.texi(mymacro,28) @code{@@footnote@{in footnote2@}} @footnote{in footnote2} formatting.texi(mymacro,28) formatting.texi(mymacro,28) @code{@@image@{f--ile@}} @image{f--ile} formatting.texi(mymacro,28) @code{@@image@{f--ile,l--i@}} @image{f--ile,l--i} formatting.texi(mymacro,28) @code{@@image@{f--ile,,l--e@}} @image{f--ile,,l--e} formatting.texi(mymacro,28) @code{@@image@{f--ile,,,alt@}} @image{f--ile,,,alt} formatting.texi(mymacro,28) @code{@@image@{f--ile,,,,e-d-xt@}} @image{f--ile,,,,e--xt} formatting.texi(mymacro,28) @code{@@image@{f--ile,aze,az,alt,e--xt@}} @image{f--ile,aze,az,alt,e--xt} formatting.texi(mymacro,28) @code{@@image@{f-ile,aze,,a--lt@}} @image{f-ile,aze,,a--lt} formatting.texi(mymacro,28) @code{@@image@{@@file@{f--ile@}@@@@@@.,aze,az,alt,@@file@{file ext@} e--xt@@@}} @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@}} formatting.texi(mymacro,28) formatting.texi(mymacro,28) @sp 2 formatting.texi(mymacro,28) formatting.texi(mymacro,28) @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} formatting.texi(mymacro,28) @clickstyle @result formatting.texi(mymacro,28) After clickstyle @result{} formatting.texi(mymacro,28) @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} formatting.texi(mymacro,28) @clickstyle @arrow formatting.texi(mymacro,28) formatting.texi(mymacro,28) @quotation formatting.texi(mymacro,28) A quot---ation formatting.texi(mymacro,28) @end quotation formatting.texi(mymacro,28) formatting.texi(mymacro,28) @quotation Note formatting.texi(mymacro,28) A Note formatting.texi(mymacro,28) @end quotation formatting.texi(mymacro,28) formatting.texi(mymacro,28) @quotation note formatting.texi(mymacro,28) A note formatting.texi(mymacro,28) @end quotation formatting.texi(mymacro,28) formatting.texi(mymacro,28) @quotation Caution formatting.texi(mymacro,28) Caution formatting.texi(mymacro,28) @end quotation formatting.texi(mymacro,28) formatting.texi(mymacro,28) @quotation Important formatting.texi(mymacro,28) Important formatting.texi(mymacro,28) @end quotation formatting.texi(mymacro,28) formatting.texi(mymacro,28) @quotation Tip formatting.texi(mymacro,28) a Tip formatting.texi(mymacro,28) @end quotation formatting.texi(mymacro,28) formatting.texi(mymacro,28) @quotation Warning formatting.texi(mymacro,28) a Warning. formatting.texi(mymacro,28) @end quotation formatting.texi(mymacro,28) formatting.texi(mymacro,28) @quotation something @'e @TeX{} formatting.texi(mymacro,28) The something @'e @TeX{} is here. formatting.texi(mymacro,28) @end quotation formatting.texi(mymacro,28) formatting.texi(mymacro,28) @quotation @@ at the end of line @ formatting.texi(mymacro,28) A @@ at the end of the @@quotation line. formatting.texi(mymacro,28) @end quotation formatting.texi(mymacro,28) formatting.texi(mymacro,28) @quotation something, other thing formatting.texi(mymacro,28) something, other thing formatting.texi(mymacro,28) @end quotation formatting.texi(mymacro,28) formatting.texi(mymacro,28) @quotation Note, the note formatting.texi(mymacro,28) Note, the note formatting.texi(mymacro,28) @end quotation formatting.texi(mymacro,28) formatting.texi(mymacro,28) @quotation formatting.texi(mymacro,28) @end quotation formatting.texi(mymacro,28) formatting.texi(mymacro,28) @quotation Empty formatting.texi(mymacro,28) @end quotation formatting.texi(mymacro,28) formatting.texi(mymacro,28) @quotation @asis{} formatting.texi(mymacro,28) @end quotation formatting.texi(mymacro,28) formatting.texi(mymacro,28) @quotation @* formatting.texi(mymacro,28) @end quotation formatting.texi(mymacro,28) formatting.texi(mymacro,28) formatting.texi(mymacro,28) @itemize formatting.texi(mymacro,28) @item i--temize formatting.texi(mymacro,28) @end itemize formatting.texi(mymacro,28) formatting.texi(mymacro,28) @itemize + formatting.texi(mymacro,28) @item i--tem + formatting.texi(mymacro,28) @end itemize formatting.texi(mymacro,28) formatting.texi(mymacro,28) @itemize @bullet formatting.texi(mymacro,28) @item b--ullet formatting.texi(mymacro,28) @end itemize formatting.texi(mymacro,28) formatting.texi(mymacro,28) @itemize @minus formatting.texi(mymacro,28) @item minu--s formatting.texi(mymacro,28) @end itemize formatting.texi(mymacro,28) formatting.texi(mymacro,28) @itemize @emph formatting.texi(mymacro,28) @item e--mph item formatting.texi(mymacro,28) @end itemize formatting.texi(mymacro,28) formatting.texi(mymacro,28) @itemize @emph{after emph} formatting.texi(mymacro,28) @c comment in itemize formatting.texi(mymacro,28) @item e--mph item formatting.texi(mymacro,28) @end itemize formatting.texi(mymacro,28) formatting.texi(mymacro,28) @itemize @bullet{} a--n itemize line formatting.texi(mymacro,28) @cindex index entry within itemize formatting.texi(mymacro,28) @item i--tem 1 formatting.texi(mymacro,28) @item i--tem 2 formatting.texi(mymacro,28) @end itemize formatting.texi(mymacro,28) formatting.texi(mymacro,28) @enumerate formatting.texi(mymacro,28) @item e--numerate formatting.texi(mymacro,28) @end enumerate formatting.texi(mymacro,28) formatting.texi(mymacro,28) @multitable @columnfractions 6 7 formatting.texi(mymacro,28) @headitem mu--ltitable headitem @tab another tab formatting.texi(mymacro,28) @item mu--ltitable item @tab multitable tab formatting.texi(mymacro,28) @c comment in multitable formatting.texi(mymacro,28) @item mu--ltitable item 2 @tab multitable tab 2 formatting.texi(mymacro,28) @cindex index entry within multitable formatting.texi(mymacro,28) @item lone mu--ltitable item formatting.texi(mymacro,28) @end multitable formatting.texi(mymacro,28) formatting.texi(mymacro,28) @multitable {truc} {bidule} formatting.texi(mymacro,28) @item truc @tab bidule formatting.texi(mymacro,28) @end multitable formatting.texi(mymacro,28) formatting.texi(mymacro,28) @example formatting.texi(mymacro,28) e--xample some formatting.texi(mymacro,28) text formatting.texi(mymacro,28) @end example formatting.texi(mymacro,28) formatting.texi(mymacro,28) @smallexample formatting.texi(mymacro,28) s--mallexample formatting.texi(mymacro,28) @end smallexample formatting.texi(mymacro,28) formatting.texi(mymacro,28) @display formatting.texi(mymacro,28) d--isplay formatting.texi(mymacro,28) @end display formatting.texi(mymacro,28) formatting.texi(mymacro,28) @smalldisplay formatting.texi(mymacro,28) s--malldisplay formatting.texi(mymacro,28) @end smalldisplay formatting.texi(mymacro,28) formatting.texi(mymacro,28) @lisp formatting.texi(mymacro,28) l--isp formatting.texi(mymacro,28) @end lisp formatting.texi(mymacro,28) formatting.texi(mymacro,28) @smalllisp formatting.texi(mymacro,28) s--malllisp formatting.texi(mymacro,28) @end smalllisp formatting.texi(mymacro,28) formatting.texi(mymacro,28) @format formatting.texi(mymacro,28) f--ormat formatting.texi(mymacro,28) @end format formatting.texi(mymacro,28) formatting.texi(mymacro,28) @smallformat formatting.texi(mymacro,28) s--mallformat formatting.texi(mymacro,28) @end smallformat formatting.texi(mymacro,28) formatting.texi(mymacro,28) @deffn c--ategory d--effn_name a--rguments... formatting.texi(mymacro,28) d--effn formatting.texi(mymacro,28) @end deffn formatting.texi(mymacro,28) formatting.texi(mymacro,28) @deffn cate--gory de--ffn_name ar--guments @ formatting.texi(mymacro,28) more args @* even more so formatting.texi(mymacro,28) def--fn formatting.texi(mymacro,28) @end deffn formatting.texi(mymacro,28) formatting.texi(mymacro,28) @deffn fset @var{i} a g formatting.texi(mymacro,28) @cindex index entry within deffn formatting.texi(mymacro,28) @deffnx {cmde} truc {} formatting.texi(mymacro,28) @deffnx Command {log trap} {} formatting.texi(mymacro,28) @deffnx Command { log trap1} {} formatting.texi(mymacro,28) @deffnx Command {log trap2 } {} formatting.texi(mymacro,28) @deffnx cmde @b{id ule} truc formatting.texi(mymacro,28) @deffnx cmde2 @b{id @samp{i} ule} truc formatting.texi(mymacro,28) @deffnx @b{id @samp{i} ule} formatting.texi(mymacro,28) @deffnx formatting.texi(mymacro,28) @deffnx aaa formatting.texi(mymacro,28) @deffnx {} {} formatting.texi(mymacro,28) @deffnx{} formatting.texi(mymacro,28) @deffnx{} machin formatting.texi(mymacro,28) @deffnx{} {bidule machin} formatting.texi(mymacro,28) @deffnx{truc} machin formatting.texi(mymacro,28) @deffnx{truc} { } formatting.texi(mymacro,28) @deffnx{truc} followed by a comment formatting.texi(mymacro,28) @c comment formatting.texi(mymacro,28) @deffnx{truc} formatting.texi(mymacro,28) @deffnx{} {} formatting.texi(mymacro,28) @deffnx {truc} a b c d e @b{f g} {h i} formatting.texi(mymacro,28) @deffnx {truc} deffnx before end deffn formatting.texi(mymacro,28) @end deffn formatting.texi(mymacro,28) formatting.texi(mymacro,28) @deffn empty deffn formatting.texi(mymacro,28) @end deffn formatting.texi(mymacro,28) formatting.texi(mymacro,28) @deffn empty deffn with deffnx formatting.texi(mymacro,28) @c comment between deffn and deffnx formatting.texi(mymacro,28) @deffnx empty deffnx formatting.texi(mymacro,28) @end deffn formatting.texi(mymacro,28) formatting.texi(mymacro,28) @deffn fset @var{i} a g formatting.texi(mymacro,28) @deffnx {cmde} truc {} formatting.texi(mymacro,28) @c comment formatting.texi(mymacro,28) text in def item for second def item formatting.texi(mymacro,28) @end deffn formatting.texi(mymacro,28) formatting.texi(mymacro,28) @defvr c--ategory d--efvr_name formatting.texi(mymacro,28) d--efvr formatting.texi(mymacro,28) @end defvr formatting.texi(mymacro,28) formatting.texi(mymacro,28) @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... formatting.texi(mymacro,28) d--eftypefn formatting.texi(mymacro,28) @end deftypefn formatting.texi(mymacro,28) formatting.texi(mymacro,28) @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... formatting.texi(mymacro,28) d--eftypeop formatting.texi(mymacro,28) @end deftypeop formatting.texi(mymacro,28) formatting.texi(mymacro,28) @deftypevr c--ategory t--ype d--eftypevr_name formatting.texi(mymacro,28) d--eftypevr formatting.texi(mymacro,28) @end deftypevr formatting.texi(mymacro,28) formatting.texi(mymacro,28) @defcv c--ategory c--lass d--efcv_name formatting.texi(mymacro,28) d--efcv formatting.texi(mymacro,28) @end defcv formatting.texi(mymacro,28) formatting.texi(mymacro,28) @defop c--ategory c--lass d--efop_name a--rguments... formatting.texi(mymacro,28) d--efop formatting.texi(mymacro,28) @end defop formatting.texi(mymacro,28) formatting.texi(mymacro,28) @deftp c--ategory d--eftp_name a--ttributes... formatting.texi(mymacro,28) d--eftp formatting.texi(mymacro,28) @end deftp formatting.texi(mymacro,28) formatting.texi(mymacro,28) @defun d--efun_name a--rguments... formatting.texi(mymacro,28) d--efun formatting.texi(mymacro,28) @end defun formatting.texi(mymacro,28) formatting.texi(mymacro,28) @defmac d--efmac_name a--rguments... formatting.texi(mymacro,28) d--efmac formatting.texi(mymacro,28) @end defmac formatting.texi(mymacro,28) formatting.texi(mymacro,28) @defspec d--efspec_name a--rguments... formatting.texi(mymacro,28) d--efspec formatting.texi(mymacro,28) @end defspec formatting.texi(mymacro,28) formatting.texi(mymacro,28) @defvar d--efvar_name argvar argvar1 formatting.texi(mymacro,28) d--efvar formatting.texi(mymacro,28) @end defvar formatting.texi(mymacro,28) formatting.texi(mymacro,28) @defopt d--efopt_name formatting.texi(mymacro,28) d--efopt formatting.texi(mymacro,28) @end defopt formatting.texi(mymacro,28) formatting.texi(mymacro,28) @deftypefun t--ype d--eftypefun_name a--rguments... formatting.texi(mymacro,28) d--eftypefun formatting.texi(mymacro,28) @end deftypefun formatting.texi(mymacro,28) formatting.texi(mymacro,28) @deftypevar t--ype d--eftypevar_name formatting.texi(mymacro,28) d--eftypevar formatting.texi(mymacro,28) @end deftypevar formatting.texi(mymacro,28) formatting.texi(mymacro,28) @defivar c--lass d--efivar_name formatting.texi(mymacro,28) d--efivar formatting.texi(mymacro,28) @end defivar formatting.texi(mymacro,28) formatting.texi(mymacro,28) @deftypeivar c--lass t--ype d--eftypeivar_name formatting.texi(mymacro,28) d--eftypeivar formatting.texi(mymacro,28) @end deftypeivar formatting.texi(mymacro,28) formatting.texi(mymacro,28) @defmethod c--lass d--efmethod_name a--rguments... formatting.texi(mymacro,28) d--efmethod formatting.texi(mymacro,28) @end defmethod formatting.texi(mymacro,28) formatting.texi(mymacro,28) @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... formatting.texi(mymacro,28) d--eftypemethod formatting.texi(mymacro,28) @end deftypemethod formatting.texi(mymacro,28) formatting.texi(mymacro,28) @code{@@xref@{c---hapter@@@@, cross r---ef name@@@@, t---itle@@@@, file n---ame@@@@, ma---nual@@@@@}} @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@}. formatting.texi(mymacro,28) @code{@@ref@{chapter, cross ref name, title, file name, manual@}} @ref{chapter, cross ref name, title, file name, manual} formatting.texi(mymacro,28) @code{@@pxref@{chapter, cross ref name, title, file name, manual@}} @pxref{chapter, cross ref name, title, file name, manual} formatting.texi(mymacro,28) @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} formatting.texi(mymacro,28) formatting.texi(mymacro,28) @code{@@ref@{chapter@}} @ref{chapter} formatting.texi(mymacro,28) @code{@@xref@{chapter@}} @xref{chapter}. formatting.texi(mymacro,28) @code{@@pxref@{chapter@}} @pxref{chapter} formatting.texi(mymacro,28) @code{@@ref@{s--ect@@comma@{@}ion@}} @ref{s--ect@comma{}ion} formatting.texi(mymacro,28) formatting.texi(mymacro,28) @code{@@ref@{s--ect@@comma@{@}ion, a @@comma@{@} in cross formatting.texi(mymacro,28) ref, a comma@@comma@{@} in title, a comma@@comma@{@} in file, a @@comma@{@} in manual name @}} formatting.texi(mymacro,28) @ref{s--ect@comma{}ion, a @comma{} in cross formatting.texi(mymacro,28) ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } formatting.texi(mymacro,28) formatting.texi(mymacro,28) @code{@@ref@{chapter,cross ref name@}} @ref{chapter,cross ref name} formatting.texi(mymacro,28) @code{@@ref@{chapter,,title@}} @ref{chapter,,title} formatting.texi(mymacro,28) @code{@@ref@{chapter,,,file name@}} @ref{chapter,,,file name} formatting.texi(mymacro,28) @code{@@ref@{chapter,,,,manual@}} @ref{chapter,,,,manual} formatting.texi(mymacro,28) @code{@@ref@{chapter,cross ref name,title,@}} @ref{chapter,cross ref name,title,} formatting.texi(mymacro,28) @code{@@ref@{chapter,cross ref name,,file name@}} @ref{chapter,cross ref name,,file name} formatting.texi(mymacro,28) @code{@@ref@{chapter,cross ref name,,,manual@}} @ref{chapter,cross ref name,,,manual} formatting.texi(mymacro,28) @code{@@ref@{chapter,cross ref name,title,file name@}} @ref{chapter,cross ref name,title,file name} formatting.texi(mymacro,28) @code{@@ref@{chapter,cross ref name,title,,manual@}} @ref{chapter,cross ref name,title,,manual} formatting.texi(mymacro,28) @code{@@ref@{chapter,cross ref name,title, file name, manual@}} @ref{chapter,cross ref name,title, file name, manual} formatting.texi(mymacro,28) @code{@@ref@{chapter,,title,file name@}} @ref{chapter,,title,file name} formatting.texi(mymacro,28) @code{@@ref@{chapter,,title,,manual@}} @ref{chapter,,title,,manual} formatting.texi(mymacro,28) @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} formatting.texi(mymacro,28) @code{@@ref@{chapter,,,file name,manual@}} @ref{chapter,,,file name,manual} formatting.texi(mymacro,28) formatting.texi(mymacro,28) formatting.texi(mymacro,28) @code{@@ref@{(pman)anode,cross ref name@}} @ref{(pman)anode,cross ref name} formatting.texi(mymacro,28) @code{@@ref@{(pman)anode,,title@}} @ref{(pman)anode,,title} formatting.texi(mymacro,28) @code{@@ref@{(pman)anode,,,file name@}} @ref{(pman)anode,,,file name} formatting.texi(mymacro,28) @code{@@ref@{(pman)anode,,,,manual@}} @ref{(pman)anode,,,,manual} formatting.texi(mymacro,28) @code{@@ref@{(pman)anode,cross ref name,title,@}} @ref{(pman)anode,cross ref name,title,} formatting.texi(mymacro,28) @code{@@ref@{(pman)anode,cross ref name,,file name@}} @ref{(pman)anode,cross ref name,,file name} formatting.texi(mymacro,28) @code{@@ref@{(pman)anode,cross ref name,,,manual@}} @ref{(pman)anode,cross ref name,,,manual} formatting.texi(mymacro,28) @code{@@ref@{(pman)anode,cross ref name,title,file name@}} @ref{(pman)anode,cross ref name,title,file name} formatting.texi(mymacro,28) @code{@@ref@{(pman)anode,cross ref name,title,,manual@}} @ref{(pman)anode,cross ref name,title,,manual} formatting.texi(mymacro,28) @code{@@ref@{(pman)anode,cross ref name,title, file name, manual@}} @ref{(pman)anode,cross ref name,title, file name, manual} formatting.texi(mymacro,28) @code{@@ref@{(pman)anode,,title,file name@}} @ref{(pman)anode,,title,file name} formatting.texi(mymacro,28) @code{@@ref@{(pman)anode,,title,,manual@}} @ref{(pman)anode,,title,,manual} formatting.texi(mymacro,28) @code{@@ref@{(pman)anode,,title, file name, manual@}} @ref{(pman)anode,,title, file name, manual} formatting.texi(mymacro,28) @code{@@ref@{(pman)anode,,,file name,manual@}} @ref{(pman)anode,,,file name,manual} formatting.texi(mymacro,28) formatting.texi(mymacro,28) formatting.texi(mymacro,28) @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} formatting.texi(mymacro,28) @code{@@inforef@{chapter@}} @inforef{chapter} formatting.texi(mymacro,28) @code{@@inforef@{chapter, cross ref name@}} @inforef{chapter, cross ref name} formatting.texi(mymacro,28) @code{@@inforef@{chapter,,file name@}} @inforef{chapter,,file name} formatting.texi(mymacro,28) @code{@@inforef@{node, cross ref name, file name@}} @inforef{node, cross ref name, file name} formatting.texi(mymacro,28) @code{@@inforef@{node@}} @inforef{node} formatting.texi(mymacro,28) @code{@@inforef@{node, cross ref name@}} @inforef{node, cross ref name} formatting.texi(mymacro,28) @code{@@inforef@{node,,file name@}} @inforef{node,,file name} formatting.texi(mymacro,28) @code{@@inforef@{chapter, cross ref name, file name, spurious arg@}} @inforef{chapter, cross ref name, file name, spurious arg} formatting.texi(mymacro,28) formatting.texi(mymacro,28) @code{@@inforef@{s--ect@@comma@{@}ion, a @@comma@{@} in cross formatting.texi(mymacro,28) ref, a comma@@comma@{@} in file@}} formatting.texi(mymacro,28) @inforef{s--ect@comma{}ion, a @comma{} in cross formatting.texi(mymacro,28) ref, a comma@comma{} in file} formatting.texi(mymacro,28) formatting.texi(mymacro,28) formatting.texi(mymacro,28) @table @bullet formatting.texi(mymacro,28) @c comment in table formatting.texi(mymacro,28) @item a formatting.texi(mymacro,28) l--ine formatting.texi(mymacro,28) @end table formatting.texi(mymacro,28) formatting.texi(mymacro,28) @vtable @asis formatting.texi(mymacro,28) @item a formatting.texi(mymacro,28) @c comment between item and itemx formatting.texi(mymacro,28) @itemx b formatting.texi(mymacro,28) l--ine formatting.texi(mymacro,28) @end vtable formatting.texi(mymacro,28) formatting.texi(mymacro,28) @ftable @minus formatting.texi(mymacro,28) @item a formatting.texi(mymacro,28) @cindex index entry between item and itemx formatting.texi(mymacro,28) @itemx b formatting.texi(mymacro,28) l--ine formatting.texi(mymacro,28) @end ftable formatting.texi(mymacro,28) formatting.texi(mymacro,28) @cartouche formatting.texi(mymacro,28) c--artouche formatting.texi(mymacro,28) @end cartouche formatting.texi(mymacro,28) formatting.texi(mymacro,28) @flushleft formatting.texi(mymacro,28) f--lushleft formatting.texi(mymacro,28) @end flushleft formatting.texi(mymacro,28) formatting.texi(mymacro,28) @flushright formatting.texi(mymacro,28) f--lushright formatting.texi(mymacro,28) @end flushright formatting.texi(mymacro,28) formatting.texi(mymacro,28) @center ce--ntered line formatting.texi(mymacro,28) formatting.texi(mymacro,28) @verbatiminclude simplest.texi formatting.texi(mymacro,28) formatting.texi(mymacro,28) @verbatim formatting.texi(mymacro,28) in verbatim '' formatting.texi(mymacro,28) @end verbatim formatting.texi(mymacro,28) formatting.texi(mymacro,28) formatting.texi(mymacro,28) @html formatting.texi(mymacro,28) html '' formatting.texi(mymacro,28) @end html formatting.texi(mymacro,28) formatting.texi(mymacro,28) formatting.texi(mymacro,28) formatting.texi(mymacro,28) @majorheading majorheading formatting.texi(mymacro,28) formatting.texi(mymacro,28) @chapheading chapheading formatting.texi(mymacro,28) formatting.texi(mymacro,28) @heading heading formatting.texi(mymacro,28) formatting.texi(mymacro,28) @subheading subheading formatting.texi(mymacro,28) formatting.texi(mymacro,28) @subsubheading subsubheading formatting.texi(mymacro,28) formatting.texi(mymacro,28) @c makeinfo cannot handle that formatting.texi(mymacro,28) formatting.texi(mymacro,28) formatting.texi(mymacro,28) @c invalid texinfo formatting.texi(mymacro,28) formatting.texi(,29) formatting.texi(,30) Insercopying in titlepage formatting.texi(,31) @insertcopying formatting.texi(,32) @end titlepage formatting.texi(,33) formatting.texi(,34) Insertcopying in normal text formatting.texi(,35) @insertcopying formatting.texi(,36) formatting.texi(,37) Normal text formatting.texi(mymacro,38) formatting.texi(mymacro,38) < formatting.texi(mymacro,38) > formatting.texi(mymacro,38) " formatting.texi(mymacro,38) & formatting.texi(mymacro,38) ' formatting.texi(mymacro,38) ` formatting.texi(mymacro,38) formatting.texi(mymacro,38) ``simple-double--three---four----''@* formatting.texi(mymacro,38) code: @code{``simple-double--three---four----''} @* formatting.texi(mymacro,38) asis: @asis{``simple-double--three---four----''} @* formatting.texi(mymacro,38) strong: @strong{``simple-double--three---four----''} @* formatting.texi(mymacro,38) kbd: @kbd{``simple-double--three---four----''} @* formatting.texi(mymacro,38) formatting.texi(mymacro,38) `@w{}`simple-double-@w{}-three---four----'@w{}'@* formatting.texi(mymacro,38) formatting.texi(mymacro,38) @cindex --option formatting.texi(mymacro,38) @cindex `` formatting.texi(mymacro,38) @findex `` formatting.texi(mymacro,38) @findex --foption formatting.texi(mymacro,38) formatting.texi(mymacro,38) @@"u @"u formatting.texi(mymacro,38) @@"@{U@} @"{U} formatting.texi(mymacro,38) @@~n @~n formatting.texi(mymacro,38) @@^a @^a formatting.texi(mymacro,38) @@'e @'e formatting.texi(mymacro,38) @@=o @=o formatting.texi(mymacro,38) @@`i @`i formatting.texi(mymacro,38) @@'@{e@} @'{e} formatting.texi(mymacro,38) @@'@{@@dotless@{i@}@} @'{@dotless{i}} formatting.texi(mymacro,38) @@dotless@{i@} @dotless{i} formatting.texi(mymacro,38) @@dotless@{j@} @dotless{j} formatting.texi(mymacro,38) @@`@{@@=E@} @`{@=E} formatting.texi(mymacro,38) @@l@{@} @l{} formatting.texi(mymacro,38) @@,@{@@'C@} @,{@'C} formatting.texi(mymacro,38) @@,c @,c formatting.texi(mymacro,38) @@,c@@"u @,c@"u @* formatting.texi(mymacro,38) formatting.texi(mymacro,38) @@* @* formatting.texi(mymacro,38) @@ followed by a space formatting.texi(mymacro,38) @ formatting.texi(mymacro,38) @@ followed by a tab formatting.texi(mymacro,38) @ formatting.texi(mymacro,38) @@ followed by a new line formatting.texi(mymacro,38) @ formatting.texi(mymacro,38) @code{@@-} @- formatting.texi(mymacro,38) @code{@@|} @| formatting.texi(mymacro,38) @code{@@:} @: formatting.texi(mymacro,38) @code{@@!} @! formatting.texi(mymacro,38) @code{@@?} @? formatting.texi(mymacro,38) @code{@@.} @. formatting.texi(mymacro,38) @code{@@@@} @@ formatting.texi(mymacro,38) @code{@@@}} @} formatting.texi(mymacro,38) @code{@@@{} @{ formatting.texi(mymacro,38) @code{@@/} @/ formatting.texi(mymacro,38) formatting.texi(mymacro,38) foo vs.@: bar. formatting.texi(mymacro,38) colon :@:And something else. formatting.texi(mymacro,38) semi colon ;@:. formatting.texi(mymacro,38) And ? ?@:. formatting.texi(mymacro,38) Now ! !@:@@ formatting.texi(mymacro,38) but , ,@: formatting.texi(mymacro,38) formatting.texi(mymacro,38) @@TeX @TeX{} formatting.texi(mymacro,38) @@LaTeX @LaTeX{} formatting.texi(mymacro,38) @@bullet @bullet{} formatting.texi(mymacro,38) @@copyright @copyright{} formatting.texi(mymacro,38) @@dots @dots{} formatting.texi(mymacro,38) @@enddots @enddots{} formatting.texi(mymacro,38) @@equiv @equiv{} formatting.texi(mymacro,38) @@error @error{} formatting.texi(mymacro,38) @@expansion @expansion{} formatting.texi(mymacro,38) @@minus @minus{} formatting.texi(mymacro,38) @@point @point{} formatting.texi(mymacro,38) @@print @print{} formatting.texi(mymacro,38) @@result @result{} formatting.texi(mymacro,38) @@today @today{} formatting.texi(mymacro,38) @@aa @aa{} formatting.texi(mymacro,38) @@AA @AA{} formatting.texi(mymacro,38) @@ae @ae{} formatting.texi(mymacro,38) @@oe @oe{} formatting.texi(mymacro,38) @@AE @AE{} formatting.texi(mymacro,38) @@OE @OE{} formatting.texi(mymacro,38) @@o @o{} formatting.texi(mymacro,38) @@O @O{} formatting.texi(mymacro,38) @@ss @ss{} formatting.texi(mymacro,38) @@l @l{} formatting.texi(mymacro,38) @@L @L{} formatting.texi(mymacro,38) @@exclamdown @exclamdown{} formatting.texi(mymacro,38) @@questiondown @questiondown{} formatting.texi(mymacro,38) @@pounds @pounds{} formatting.texi(mymacro,38) @@registeredsymbol @registeredsymbol{} formatting.texi(mymacro,38) @@ordf @ordf{} formatting.texi(mymacro,38) @@ordm @ordm{} formatting.texi(mymacro,38) @@comma @comma{} formatting.texi(mymacro,38) @@quotedblleft @quotedblleft{} formatting.texi(mymacro,38) @@quotedblright @quotedblright{} formatting.texi(mymacro,38) @@quoteleft @quoteleft{} formatting.texi(mymacro,38) @@quoteright @quoteright{} formatting.texi(mymacro,38) @@quotedblbase @quotedblbase{} formatting.texi(mymacro,38) @@quotesinglbase @quotesinglbase{} formatting.texi(mymacro,38) @@guillemetleft @guillemetleft{} formatting.texi(mymacro,38) @@guillemetright @guillemetright{} formatting.texi(mymacro,38) @@guillemotleft @guillemotleft{} formatting.texi(mymacro,38) @@guillemotright @guillemotright{} formatting.texi(mymacro,38) @@guilsinglleft @guilsinglleft{} formatting.texi(mymacro,38) @@guilsinglright @guilsinglright{} formatting.texi(mymacro,38) @@textdegree @textdegree{} formatting.texi(mymacro,38) @@euro @euro{} formatting.texi(mymacro,38) @@arrow @arrow{} formatting.texi(mymacro,38) @@leq @leq{} formatting.texi(mymacro,38) @@geq @geq{} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@acronym@{--a,an accronym@}} @acronym{--a,an accronym} formatting.texi(mymacro,38) @code{@@acronym@{--a@}} @acronym{--a} formatting.texi(mymacro,38) @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude Autonome @}} @abbr{@'E--. @comma{}A., @'Etude Autonome } formatting.texi(mymacro,38) @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} formatting.texi(mymacro,38) @code{@@asis@{--a@}} @asis{--a} formatting.texi(mymacro,38) @code{@@b@{--a@}} @b{--a} formatting.texi(mymacro,38) @code{@@cite@{--a@}} @cite{--a} formatting.texi(mymacro,38) @code{@@code@{--a@}} @code{--a} formatting.texi(mymacro,38) @code{@@command@{--a@}} @command{--a} formatting.texi(mymacro,38) @code{@@ctrl@{--a@}} @ctrl{--a} formatting.texi(mymacro,38) @code{@@dfn@{--a@}} @dfn{--a} formatting.texi(mymacro,38) @code{@@dmn@{--a@}} @dmn{--a} formatting.texi(mymacro,38) @code{@@email@{--a,--b@}} @email{--a,--b} formatting.texi(mymacro,38) @code{@@email@{,--b@}} @email{,--b} formatting.texi(mymacro,38) @code{@@email@{--a@}} @email{--a} formatting.texi(mymacro,38) @code{@@emph@{--a@}} @emph{--a} formatting.texi(mymacro,38) @code{@@env@{--a@}} @env{--a} formatting.texi(mymacro,38) @code{@@file@{--a@}} @file{--a} formatting.texi(mymacro,38) @code{@@i@{--a@}} @i{--a} formatting.texi(mymacro,38) @code{@@kbd@{--a@}} @kbd{--a} formatting.texi(mymacro,38) @code{@@key@{--a@}} @key{--a} formatting.texi(mymacro,38) @code{@@math@{--a @{\frac@{1@}@{2@}@} @@minus@{@}@}} @math{--a {\frac{1}{2}} @minus{}} formatting.texi(mymacro,38) @code{@@option@{--a@}} @option{--a} formatting.texi(mymacro,38) @code{@@r@{--a@}} @r{--a} formatting.texi(mymacro,38) @code{@@samp@{--a@}} @samp{--a} formatting.texi(mymacro,38) @code{@@sc@{--a@}} @sc{--a} formatting.texi(mymacro,38) @code{@@strong@{--a@}} @strong{--a} formatting.texi(mymacro,38) @code{@@t@{--a@}} @t{--a} formatting.texi(mymacro,38) @code{@@sansserif@{--a@}} @sansserif{--a} formatting.texi(mymacro,38) @code{@@titlefont@{--a@}} @titlefont{--a} formatting.texi(mymacro,38) @code{@@indicateurl@{--a@}} @indicateurl{--a} formatting.texi(mymacro,38) @code{@@uref@{--a,--b@}} @uref{--a,--b} formatting.texi(mymacro,38) @code{@@uref@{--a@}} @uref{--a} formatting.texi(mymacro,38) @code{@@uref@{,--b@}} @uref{,--b} formatting.texi(mymacro,38) @code{@@uref@{--a,--b,--c@}} @uref{--a,--b,--c} formatting.texi(mymacro,38) @code{@@uref@{,--b,--c@}} @uref{,--b,--c} formatting.texi(mymacro,38) @code{@@uref@{--a,,--c@}} @uref{--a,,--c} formatting.texi(mymacro,38) @code{@@uref@{,,--c@}} @uref{,,--c} formatting.texi(mymacro,38) @code{@@url@{--a,--b@}} @url{--a,--b} formatting.texi(mymacro,38) @code{@@url@{--a,@}} @url{--a,} formatting.texi(mymacro,38) @code{@@url@{,--b@}} @url{,--b} formatting.texi(mymacro,38) @code{@@var@{--a@}} @var{--a} formatting.texi(mymacro,38) @code{@@verb@{:--a:@}} @verb{:--a:} formatting.texi(mymacro,38) @code{@@verb@{:a < & @@ % " -- b:@}} @verb{:a < & @ % " -- b:} formatting.texi(mymacro,38) @code{@@w@{@}} @w{} formatting.texi(mymacro,38) @code{@@H@{a@}} @H{a} formatting.texi(mymacro,38) @code{@@H@{--a@}} @H{--a} formatting.texi(mymacro,38) @code{@@dotaccent@{a@}} @dotaccent{a} formatting.texi(mymacro,38) @code{@@dotaccent@{--a@}} @dotaccent{--a} formatting.texi(mymacro,38) @code{@@ringaccent@{a@}} @ringaccent{a} formatting.texi(mymacro,38) @code{@@ringaccent@{--a@}} @ringaccent{--a} formatting.texi(mymacro,38) @code{@@tieaccent@{a@}} @tieaccent{a} formatting.texi(mymacro,38) @code{@@tieaccent@{--a@}} @tieaccent{--a} formatting.texi(mymacro,38) @code{@@u@{a@}} @u{a} formatting.texi(mymacro,38) @code{@@u@{--a@}} @u{--a} formatting.texi(mymacro,38) @code{@@ubaraccent@{a@}} @ubaraccent{a} formatting.texi(mymacro,38) @code{@@ubaraccent@{--a@}} @ubaraccent{--a} formatting.texi(mymacro,38) @code{@@udotaccent@{a@}} @udotaccent{a} formatting.texi(mymacro,38) @code{@@udotaccent@{--a@}} @udotaccent{--a} formatting.texi(mymacro,38) @code{@@v@{a@}} @v{a} formatting.texi(mymacro,38) @code{@@v@{--a@}} @v{--a} formatting.texi(mymacro,38) @code{@@,@{c@}} @,{c} formatting.texi(mymacro,38) @code{@@,@{--c@}} @,{--c} formatting.texi(mymacro,38) @code{@@footnote@{in footnote@}} @footnote{in footnote} formatting.texi(mymacro,38) @code{@@footnote@{in footnote2@}} @footnote{in footnote2} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@image@{f--ile@}} @image{f--ile} formatting.texi(mymacro,38) @code{@@image@{f--ile,l--i@}} @image{f--ile,l--i} formatting.texi(mymacro,38) @code{@@image@{f--ile,,l--e@}} @image{f--ile,,l--e} formatting.texi(mymacro,38) @code{@@image@{f--ile,,,alt@}} @image{f--ile,,,alt} formatting.texi(mymacro,38) @code{@@image@{f--ile,,,,e-d-xt@}} @image{f--ile,,,,e--xt} formatting.texi(mymacro,38) @code{@@image@{f--ile,aze,az,alt,e--xt@}} @image{f--ile,aze,az,alt,e--xt} formatting.texi(mymacro,38) @code{@@image@{f-ile,aze,,a--lt@}} @image{f-ile,aze,,a--lt} formatting.texi(mymacro,38) @code{@@image@{@@file@{f--ile@}@@@@@@.,aze,az,alt,@@file@{file ext@} e--xt@@@}} @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@}} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @sp 2 formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} formatting.texi(mymacro,38) @clickstyle @result formatting.texi(mymacro,38) After clickstyle @result{} formatting.texi(mymacro,38) @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} formatting.texi(mymacro,38) @clickstyle @arrow formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation formatting.texi(mymacro,38) A quot---ation formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation Note formatting.texi(mymacro,38) A Note formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation note formatting.texi(mymacro,38) A note formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation Caution formatting.texi(mymacro,38) Caution formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation Important formatting.texi(mymacro,38) Important formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation Tip formatting.texi(mymacro,38) a Tip formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation Warning formatting.texi(mymacro,38) a Warning. formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation something @'e @TeX{} formatting.texi(mymacro,38) The something @'e @TeX{} is here. formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation @@ at the end of line @ formatting.texi(mymacro,38) A @@ at the end of the @@quotation line. formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation something, other thing formatting.texi(mymacro,38) something, other thing formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation Note, the note formatting.texi(mymacro,38) Note, the note formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation Empty formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation @asis{} formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation @* formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) formatting.texi(mymacro,38) @itemize formatting.texi(mymacro,38) @item i--temize formatting.texi(mymacro,38) @end itemize formatting.texi(mymacro,38) formatting.texi(mymacro,38) @itemize + formatting.texi(mymacro,38) @item i--tem + formatting.texi(mymacro,38) @end itemize formatting.texi(mymacro,38) formatting.texi(mymacro,38) @itemize @bullet formatting.texi(mymacro,38) @item b--ullet formatting.texi(mymacro,38) @end itemize formatting.texi(mymacro,38) formatting.texi(mymacro,38) @itemize @minus formatting.texi(mymacro,38) @item minu--s formatting.texi(mymacro,38) @end itemize formatting.texi(mymacro,38) formatting.texi(mymacro,38) @itemize @emph formatting.texi(mymacro,38) @item e--mph item formatting.texi(mymacro,38) @end itemize formatting.texi(mymacro,38) formatting.texi(mymacro,38) @itemize @emph{after emph} formatting.texi(mymacro,38) @c comment in itemize formatting.texi(mymacro,38) @item e--mph item formatting.texi(mymacro,38) @end itemize formatting.texi(mymacro,38) formatting.texi(mymacro,38) @itemize @bullet{} a--n itemize line formatting.texi(mymacro,38) @cindex index entry within itemize formatting.texi(mymacro,38) @item i--tem 1 formatting.texi(mymacro,38) @item i--tem 2 formatting.texi(mymacro,38) @end itemize formatting.texi(mymacro,38) formatting.texi(mymacro,38) @enumerate formatting.texi(mymacro,38) @item e--numerate formatting.texi(mymacro,38) @end enumerate formatting.texi(mymacro,38) formatting.texi(mymacro,38) @multitable @columnfractions 6 7 formatting.texi(mymacro,38) @headitem mu--ltitable headitem @tab another tab formatting.texi(mymacro,38) @item mu--ltitable item @tab multitable tab formatting.texi(mymacro,38) @c comment in multitable formatting.texi(mymacro,38) @item mu--ltitable item 2 @tab multitable tab 2 formatting.texi(mymacro,38) @cindex index entry within multitable formatting.texi(mymacro,38) @item lone mu--ltitable item formatting.texi(mymacro,38) @end multitable formatting.texi(mymacro,38) formatting.texi(mymacro,38) @multitable {truc} {bidule} formatting.texi(mymacro,38) @item truc @tab bidule formatting.texi(mymacro,38) @end multitable formatting.texi(mymacro,38) formatting.texi(mymacro,38) @example formatting.texi(mymacro,38) e--xample some formatting.texi(mymacro,38) text formatting.texi(mymacro,38) @end example formatting.texi(mymacro,38) formatting.texi(mymacro,38) @smallexample formatting.texi(mymacro,38) s--mallexample formatting.texi(mymacro,38) @end smallexample formatting.texi(mymacro,38) formatting.texi(mymacro,38) @display formatting.texi(mymacro,38) d--isplay formatting.texi(mymacro,38) @end display formatting.texi(mymacro,38) formatting.texi(mymacro,38) @smalldisplay formatting.texi(mymacro,38) s--malldisplay formatting.texi(mymacro,38) @end smalldisplay formatting.texi(mymacro,38) formatting.texi(mymacro,38) @lisp formatting.texi(mymacro,38) l--isp formatting.texi(mymacro,38) @end lisp formatting.texi(mymacro,38) formatting.texi(mymacro,38) @smalllisp formatting.texi(mymacro,38) s--malllisp formatting.texi(mymacro,38) @end smalllisp formatting.texi(mymacro,38) formatting.texi(mymacro,38) @format formatting.texi(mymacro,38) f--ormat formatting.texi(mymacro,38) @end format formatting.texi(mymacro,38) formatting.texi(mymacro,38) @smallformat formatting.texi(mymacro,38) s--mallformat formatting.texi(mymacro,38) @end smallformat formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deffn c--ategory d--effn_name a--rguments... formatting.texi(mymacro,38) d--effn formatting.texi(mymacro,38) @end deffn formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deffn cate--gory de--ffn_name ar--guments @ formatting.texi(mymacro,38) more args @* even more so formatting.texi(mymacro,38) def--fn formatting.texi(mymacro,38) @end deffn formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deffn fset @var{i} a g formatting.texi(mymacro,38) @cindex index entry within deffn formatting.texi(mymacro,38) @deffnx {cmde} truc {} formatting.texi(mymacro,38) @deffnx Command {log trap} {} formatting.texi(mymacro,38) @deffnx Command { log trap1} {} formatting.texi(mymacro,38) @deffnx Command {log trap2 } {} formatting.texi(mymacro,38) @deffnx cmde @b{id ule} truc formatting.texi(mymacro,38) @deffnx cmde2 @b{id @samp{i} ule} truc formatting.texi(mymacro,38) @deffnx @b{id @samp{i} ule} formatting.texi(mymacro,38) @deffnx formatting.texi(mymacro,38) @deffnx aaa formatting.texi(mymacro,38) @deffnx {} {} formatting.texi(mymacro,38) @deffnx{} formatting.texi(mymacro,38) @deffnx{} machin formatting.texi(mymacro,38) @deffnx{} {bidule machin} formatting.texi(mymacro,38) @deffnx{truc} machin formatting.texi(mymacro,38) @deffnx{truc} { } formatting.texi(mymacro,38) @deffnx{truc} followed by a comment formatting.texi(mymacro,38) @c comment formatting.texi(mymacro,38) @deffnx{truc} formatting.texi(mymacro,38) @deffnx{} {} formatting.texi(mymacro,38) @deffnx {truc} a b c d e @b{f g} {h i} formatting.texi(mymacro,38) @deffnx {truc} deffnx before end deffn formatting.texi(mymacro,38) @end deffn formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deffn empty deffn formatting.texi(mymacro,38) @end deffn formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deffn empty deffn with deffnx formatting.texi(mymacro,38) @c comment between deffn and deffnx formatting.texi(mymacro,38) @deffnx empty deffnx formatting.texi(mymacro,38) @end deffn formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deffn fset @var{i} a g formatting.texi(mymacro,38) @deffnx {cmde} truc {} formatting.texi(mymacro,38) @c comment formatting.texi(mymacro,38) text in def item for second def item formatting.texi(mymacro,38) @end deffn formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defvr c--ategory d--efvr_name formatting.texi(mymacro,38) d--efvr formatting.texi(mymacro,38) @end defvr formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... formatting.texi(mymacro,38) d--eftypefn formatting.texi(mymacro,38) @end deftypefn formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... formatting.texi(mymacro,38) d--eftypeop formatting.texi(mymacro,38) @end deftypeop formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deftypevr c--ategory t--ype d--eftypevr_name formatting.texi(mymacro,38) d--eftypevr formatting.texi(mymacro,38) @end deftypevr formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defcv c--ategory c--lass d--efcv_name formatting.texi(mymacro,38) d--efcv formatting.texi(mymacro,38) @end defcv formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defop c--ategory c--lass d--efop_name a--rguments... formatting.texi(mymacro,38) d--efop formatting.texi(mymacro,38) @end defop formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deftp c--ategory d--eftp_name a--ttributes... formatting.texi(mymacro,38) d--eftp formatting.texi(mymacro,38) @end deftp formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defun d--efun_name a--rguments... formatting.texi(mymacro,38) d--efun formatting.texi(mymacro,38) @end defun formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defmac d--efmac_name a--rguments... formatting.texi(mymacro,38) d--efmac formatting.texi(mymacro,38) @end defmac formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defspec d--efspec_name a--rguments... formatting.texi(mymacro,38) d--efspec formatting.texi(mymacro,38) @end defspec formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defvar d--efvar_name argvar argvar1 formatting.texi(mymacro,38) d--efvar formatting.texi(mymacro,38) @end defvar formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defopt d--efopt_name formatting.texi(mymacro,38) d--efopt formatting.texi(mymacro,38) @end defopt formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deftypefun t--ype d--eftypefun_name a--rguments... formatting.texi(mymacro,38) d--eftypefun formatting.texi(mymacro,38) @end deftypefun formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deftypevar t--ype d--eftypevar_name formatting.texi(mymacro,38) d--eftypevar formatting.texi(mymacro,38) @end deftypevar formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defivar c--lass d--efivar_name formatting.texi(mymacro,38) d--efivar formatting.texi(mymacro,38) @end defivar formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deftypeivar c--lass t--ype d--eftypeivar_name formatting.texi(mymacro,38) d--eftypeivar formatting.texi(mymacro,38) @end deftypeivar formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defmethod c--lass d--efmethod_name a--rguments... formatting.texi(mymacro,38) d--efmethod formatting.texi(mymacro,38) @end defmethod formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... formatting.texi(mymacro,38) d--eftypemethod formatting.texi(mymacro,38) @end deftypemethod formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@xref@{c---hapter@@@@, cross r---ef name@@@@, t---itle@@@@, file n---ame@@@@, ma---nual@@@@@}} @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@}. formatting.texi(mymacro,38) @code{@@ref@{chapter, cross ref name, title, file name, manual@}} @ref{chapter, cross ref name, title, file name, manual} formatting.texi(mymacro,38) @code{@@pxref@{chapter, cross ref name, title, file name, manual@}} @pxref{chapter, cross ref name, title, file name, manual} formatting.texi(mymacro,38) @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@ref@{chapter@}} @ref{chapter} formatting.texi(mymacro,38) @code{@@xref@{chapter@}} @xref{chapter}. formatting.texi(mymacro,38) @code{@@pxref@{chapter@}} @pxref{chapter} formatting.texi(mymacro,38) @code{@@ref@{s--ect@@comma@{@}ion@}} @ref{s--ect@comma{}ion} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@ref@{s--ect@@comma@{@}ion, a @@comma@{@} in cross formatting.texi(mymacro,38) ref, a comma@@comma@{@} in title, a comma@@comma@{@} in file, a @@comma@{@} in manual name @}} formatting.texi(mymacro,38) @ref{s--ect@comma{}ion, a @comma{} in cross formatting.texi(mymacro,38) ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@ref@{chapter,cross ref name@}} @ref{chapter,cross ref name} formatting.texi(mymacro,38) @code{@@ref@{chapter,,title@}} @ref{chapter,,title} formatting.texi(mymacro,38) @code{@@ref@{chapter,,,file name@}} @ref{chapter,,,file name} formatting.texi(mymacro,38) @code{@@ref@{chapter,,,,manual@}} @ref{chapter,,,,manual} formatting.texi(mymacro,38) @code{@@ref@{chapter,cross ref name,title,@}} @ref{chapter,cross ref name,title,} formatting.texi(mymacro,38) @code{@@ref@{chapter,cross ref name,,file name@}} @ref{chapter,cross ref name,,file name} formatting.texi(mymacro,38) @code{@@ref@{chapter,cross ref name,,,manual@}} @ref{chapter,cross ref name,,,manual} formatting.texi(mymacro,38) @code{@@ref@{chapter,cross ref name,title,file name@}} @ref{chapter,cross ref name,title,file name} formatting.texi(mymacro,38) @code{@@ref@{chapter,cross ref name,title,,manual@}} @ref{chapter,cross ref name,title,,manual} formatting.texi(mymacro,38) @code{@@ref@{chapter,cross ref name,title, file name, manual@}} @ref{chapter,cross ref name,title, file name, manual} formatting.texi(mymacro,38) @code{@@ref@{chapter,,title,file name@}} @ref{chapter,,title,file name} formatting.texi(mymacro,38) @code{@@ref@{chapter,,title,,manual@}} @ref{chapter,,title,,manual} formatting.texi(mymacro,38) @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} formatting.texi(mymacro,38) @code{@@ref@{chapter,,,file name,manual@}} @ref{chapter,,,file name,manual} formatting.texi(mymacro,38) formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,cross ref name@}} @ref{(pman)anode,cross ref name} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,,title@}} @ref{(pman)anode,,title} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,,,file name@}} @ref{(pman)anode,,,file name} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,,,,manual@}} @ref{(pman)anode,,,,manual} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,cross ref name,title,@}} @ref{(pman)anode,cross ref name,title,} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,cross ref name,,file name@}} @ref{(pman)anode,cross ref name,,file name} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,cross ref name,,,manual@}} @ref{(pman)anode,cross ref name,,,manual} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,cross ref name,title,file name@}} @ref{(pman)anode,cross ref name,title,file name} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,cross ref name,title,,manual@}} @ref{(pman)anode,cross ref name,title,,manual} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,cross ref name,title, file name, manual@}} @ref{(pman)anode,cross ref name,title, file name, manual} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,,title,file name@}} @ref{(pman)anode,,title,file name} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,,title,,manual@}} @ref{(pman)anode,,title,,manual} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,,title, file name, manual@}} @ref{(pman)anode,,title, file name, manual} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,,,file name,manual@}} @ref{(pman)anode,,,file name,manual} formatting.texi(mymacro,38) formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} formatting.texi(mymacro,38) @code{@@inforef@{chapter@}} @inforef{chapter} formatting.texi(mymacro,38) @code{@@inforef@{chapter, cross ref name@}} @inforef{chapter, cross ref name} formatting.texi(mymacro,38) @code{@@inforef@{chapter,,file name@}} @inforef{chapter,,file name} formatting.texi(mymacro,38) @code{@@inforef@{node, cross ref name, file name@}} @inforef{node, cross ref name, file name} formatting.texi(mymacro,38) @code{@@inforef@{node@}} @inforef{node} formatting.texi(mymacro,38) @code{@@inforef@{node, cross ref name@}} @inforef{node, cross ref name} formatting.texi(mymacro,38) @code{@@inforef@{node,,file name@}} @inforef{node,,file name} formatting.texi(mymacro,38) @code{@@inforef@{chapter, cross ref name, file name, spurious arg@}} @inforef{chapter, cross ref name, file name, spurious arg} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@inforef@{s--ect@@comma@{@}ion, a @@comma@{@} in cross formatting.texi(mymacro,38) ref, a comma@@comma@{@} in file@}} formatting.texi(mymacro,38) @inforef{s--ect@comma{}ion, a @comma{} in cross formatting.texi(mymacro,38) ref, a comma@comma{} in file} formatting.texi(mymacro,38) formatting.texi(mymacro,38) formatting.texi(mymacro,38) @table @bullet formatting.texi(mymacro,38) @c comment in table formatting.texi(mymacro,38) @item a formatting.texi(mymacro,38) l--ine formatting.texi(mymacro,38) @end table formatting.texi(mymacro,38) formatting.texi(mymacro,38) @vtable @asis formatting.texi(mymacro,38) @item a formatting.texi(mymacro,38) @c comment between item and itemx formatting.texi(mymacro,38) @itemx b formatting.texi(mymacro,38) l--ine formatting.texi(mymacro,38) @end vtable formatting.texi(mymacro,38) formatting.texi(mymacro,38) @ftable @minus formatting.texi(mymacro,38) @item a formatting.texi(mymacro,38) @cindex index entry between item and itemx formatting.texi(mymacro,38) @itemx b formatting.texi(mymacro,38) l--ine formatting.texi(mymacro,38) @end ftable formatting.texi(mymacro,38) formatting.texi(mymacro,38) @cartouche formatting.texi(mymacro,38) c--artouche formatting.texi(mymacro,38) @end cartouche formatting.texi(mymacro,38) formatting.texi(mymacro,38) @flushleft formatting.texi(mymacro,38) f--lushleft formatting.texi(mymacro,38) @end flushleft formatting.texi(mymacro,38) formatting.texi(mymacro,38) @flushright formatting.texi(mymacro,38) f--lushright formatting.texi(mymacro,38) @end flushright formatting.texi(mymacro,38) formatting.texi(mymacro,38) @center ce--ntered line formatting.texi(mymacro,38) formatting.texi(mymacro,38) @verbatiminclude simplest.texi formatting.texi(mymacro,38) formatting.texi(mymacro,38) @verbatim formatting.texi(mymacro,38) in verbatim '' formatting.texi(mymacro,38) @end verbatim formatting.texi(mymacro,38) formatting.texi(mymacro,38) formatting.texi(mymacro,38) @html formatting.texi(mymacro,38) html '' formatting.texi(mymacro,38) @end html formatting.texi(mymacro,38) formatting.texi(mymacro,38) formatting.texi(mymacro,38) formatting.texi(mymacro,38) @majorheading majorheading formatting.texi(mymacro,38) formatting.texi(mymacro,38) @chapheading chapheading formatting.texi(mymacro,38) formatting.texi(mymacro,38) @heading heading formatting.texi(mymacro,38) formatting.texi(mymacro,38) @subheading subheading formatting.texi(mymacro,38) formatting.texi(mymacro,38) @subsubheading subsubheading formatting.texi(mymacro,38) formatting.texi(mymacro,38) @c makeinfo cannot handle that formatting.texi(mymacro,38) formatting.texi(mymacro,38) formatting.texi(mymacro,38) @c invalid texinfo formatting.texi(mymacro,38) formatting.texi(,39) formatting.texi(,40) In example. formatting.texi(,41) @example formatting.texi(mymacro,42) formatting.texi(mymacro,42) < formatting.texi(mymacro,42) > formatting.texi(mymacro,42) " formatting.texi(mymacro,42) & formatting.texi(mymacro,42) ' formatting.texi(mymacro,42) ` formatting.texi(mymacro,42) formatting.texi(mymacro,42) ``simple-double--three---four----''@* formatting.texi(mymacro,42) code: @code{``simple-double--three---four----''} @* formatting.texi(mymacro,42) asis: @asis{``simple-double--three---four----''} @* formatting.texi(mymacro,42) strong: @strong{``simple-double--three---four----''} @* formatting.texi(mymacro,42) kbd: @kbd{``simple-double--three---four----''} @* formatting.texi(mymacro,42) formatting.texi(mymacro,42) `@w{}`simple-double-@w{}-three---four----'@w{}'@* formatting.texi(mymacro,42) formatting.texi(mymacro,42) @cindex --option formatting.texi(mymacro,42) @cindex `` formatting.texi(mymacro,42) @findex `` formatting.texi(mymacro,42) @findex --foption formatting.texi(mymacro,42) formatting.texi(mymacro,42) @@"u @"u formatting.texi(mymacro,42) @@"@{U@} @"{U} formatting.texi(mymacro,42) @@~n @~n formatting.texi(mymacro,42) @@^a @^a formatting.texi(mymacro,42) @@'e @'e formatting.texi(mymacro,42) @@=o @=o formatting.texi(mymacro,42) @@`i @`i formatting.texi(mymacro,42) @@'@{e@} @'{e} formatting.texi(mymacro,42) @@'@{@@dotless@{i@}@} @'{@dotless{i}} formatting.texi(mymacro,42) @@dotless@{i@} @dotless{i} formatting.texi(mymacro,42) @@dotless@{j@} @dotless{j} formatting.texi(mymacro,42) @@`@{@@=E@} @`{@=E} formatting.texi(mymacro,42) @@l@{@} @l{} formatting.texi(mymacro,42) @@,@{@@'C@} @,{@'C} formatting.texi(mymacro,42) @@,c @,c formatting.texi(mymacro,42) @@,c@@"u @,c@"u @* formatting.texi(mymacro,42) formatting.texi(mymacro,42) @@* @* formatting.texi(mymacro,42) @@ followed by a space formatting.texi(mymacro,42) @ formatting.texi(mymacro,42) @@ followed by a tab formatting.texi(mymacro,42) @ formatting.texi(mymacro,42) @@ followed by a new line formatting.texi(mymacro,42) @ formatting.texi(mymacro,42) @code{@@-} @- formatting.texi(mymacro,42) @code{@@|} @| formatting.texi(mymacro,42) @code{@@:} @: formatting.texi(mymacro,42) @code{@@!} @! formatting.texi(mymacro,42) @code{@@?} @? formatting.texi(mymacro,42) @code{@@.} @. formatting.texi(mymacro,42) @code{@@@@} @@ formatting.texi(mymacro,42) @code{@@@}} @} formatting.texi(mymacro,42) @code{@@@{} @{ formatting.texi(mymacro,42) @code{@@/} @/ formatting.texi(mymacro,42) formatting.texi(mymacro,42) foo vs.@: bar. formatting.texi(mymacro,42) colon :@:And something else. formatting.texi(mymacro,42) semi colon ;@:. formatting.texi(mymacro,42) And ? ?@:. formatting.texi(mymacro,42) Now ! !@:@@ formatting.texi(mymacro,42) but , ,@: formatting.texi(mymacro,42) formatting.texi(mymacro,42) @@TeX @TeX{} formatting.texi(mymacro,42) @@LaTeX @LaTeX{} formatting.texi(mymacro,42) @@bullet @bullet{} formatting.texi(mymacro,42) @@copyright @copyright{} formatting.texi(mymacro,42) @@dots @dots{} formatting.texi(mymacro,42) @@enddots @enddots{} formatting.texi(mymacro,42) @@equiv @equiv{} formatting.texi(mymacro,42) @@error @error{} formatting.texi(mymacro,42) @@expansion @expansion{} formatting.texi(mymacro,42) @@minus @minus{} formatting.texi(mymacro,42) @@point @point{} formatting.texi(mymacro,42) @@print @print{} formatting.texi(mymacro,42) @@result @result{} formatting.texi(mymacro,42) @@today @today{} formatting.texi(mymacro,42) @@aa @aa{} formatting.texi(mymacro,42) @@AA @AA{} formatting.texi(mymacro,42) @@ae @ae{} formatting.texi(mymacro,42) @@oe @oe{} formatting.texi(mymacro,42) @@AE @AE{} formatting.texi(mymacro,42) @@OE @OE{} formatting.texi(mymacro,42) @@o @o{} formatting.texi(mymacro,42) @@O @O{} formatting.texi(mymacro,42) @@ss @ss{} formatting.texi(mymacro,42) @@l @l{} formatting.texi(mymacro,42) @@L @L{} formatting.texi(mymacro,42) @@exclamdown @exclamdown{} formatting.texi(mymacro,42) @@questiondown @questiondown{} formatting.texi(mymacro,42) @@pounds @pounds{} formatting.texi(mymacro,42) @@registeredsymbol @registeredsymbol{} formatting.texi(mymacro,42) @@ordf @ordf{} formatting.texi(mymacro,42) @@ordm @ordm{} formatting.texi(mymacro,42) @@comma @comma{} formatting.texi(mymacro,42) @@quotedblleft @quotedblleft{} formatting.texi(mymacro,42) @@quotedblright @quotedblright{} formatting.texi(mymacro,42) @@quoteleft @quoteleft{} formatting.texi(mymacro,42) @@quoteright @quoteright{} formatting.texi(mymacro,42) @@quotedblbase @quotedblbase{} formatting.texi(mymacro,42) @@quotesinglbase @quotesinglbase{} formatting.texi(mymacro,42) @@guillemetleft @guillemetleft{} formatting.texi(mymacro,42) @@guillemetright @guillemetright{} formatting.texi(mymacro,42) @@guillemotleft @guillemotleft{} formatting.texi(mymacro,42) @@guillemotright @guillemotright{} formatting.texi(mymacro,42) @@guilsinglleft @guilsinglleft{} formatting.texi(mymacro,42) @@guilsinglright @guilsinglright{} formatting.texi(mymacro,42) @@textdegree @textdegree{} formatting.texi(mymacro,42) @@euro @euro{} formatting.texi(mymacro,42) @@arrow @arrow{} formatting.texi(mymacro,42) @@leq @leq{} formatting.texi(mymacro,42) @@geq @geq{} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@acronym@{--a,an accronym@}} @acronym{--a,an accronym} formatting.texi(mymacro,42) @code{@@acronym@{--a@}} @acronym{--a} formatting.texi(mymacro,42) @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude Autonome @}} @abbr{@'E--. @comma{}A., @'Etude Autonome } formatting.texi(mymacro,42) @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} formatting.texi(mymacro,42) @code{@@asis@{--a@}} @asis{--a} formatting.texi(mymacro,42) @code{@@b@{--a@}} @b{--a} formatting.texi(mymacro,42) @code{@@cite@{--a@}} @cite{--a} formatting.texi(mymacro,42) @code{@@code@{--a@}} @code{--a} formatting.texi(mymacro,42) @code{@@command@{--a@}} @command{--a} formatting.texi(mymacro,42) @code{@@ctrl@{--a@}} @ctrl{--a} formatting.texi(mymacro,42) @code{@@dfn@{--a@}} @dfn{--a} formatting.texi(mymacro,42) @code{@@dmn@{--a@}} @dmn{--a} formatting.texi(mymacro,42) @code{@@email@{--a,--b@}} @email{--a,--b} formatting.texi(mymacro,42) @code{@@email@{,--b@}} @email{,--b} formatting.texi(mymacro,42) @code{@@email@{--a@}} @email{--a} formatting.texi(mymacro,42) @code{@@emph@{--a@}} @emph{--a} formatting.texi(mymacro,42) @code{@@env@{--a@}} @env{--a} formatting.texi(mymacro,42) @code{@@file@{--a@}} @file{--a} formatting.texi(mymacro,42) @code{@@i@{--a@}} @i{--a} formatting.texi(mymacro,42) @code{@@kbd@{--a@}} @kbd{--a} formatting.texi(mymacro,42) @code{@@key@{--a@}} @key{--a} formatting.texi(mymacro,42) @code{@@math@{--a @{\frac@{1@}@{2@}@} @@minus@{@}@}} @math{--a {\frac{1}{2}} @minus{}} formatting.texi(mymacro,42) @code{@@option@{--a@}} @option{--a} formatting.texi(mymacro,42) @code{@@r@{--a@}} @r{--a} formatting.texi(mymacro,42) @code{@@samp@{--a@}} @samp{--a} formatting.texi(mymacro,42) @code{@@sc@{--a@}} @sc{--a} formatting.texi(mymacro,42) @code{@@strong@{--a@}} @strong{--a} formatting.texi(mymacro,42) @code{@@t@{--a@}} @t{--a} formatting.texi(mymacro,42) @code{@@sansserif@{--a@}} @sansserif{--a} formatting.texi(mymacro,42) @code{@@titlefont@{--a@}} @titlefont{--a} formatting.texi(mymacro,42) @code{@@indicateurl@{--a@}} @indicateurl{--a} formatting.texi(mymacro,42) @code{@@uref@{--a,--b@}} @uref{--a,--b} formatting.texi(mymacro,42) @code{@@uref@{--a@}} @uref{--a} formatting.texi(mymacro,42) @code{@@uref@{,--b@}} @uref{,--b} formatting.texi(mymacro,42) @code{@@uref@{--a,--b,--c@}} @uref{--a,--b,--c} formatting.texi(mymacro,42) @code{@@uref@{,--b,--c@}} @uref{,--b,--c} formatting.texi(mymacro,42) @code{@@uref@{--a,,--c@}} @uref{--a,,--c} formatting.texi(mymacro,42) @code{@@uref@{,,--c@}} @uref{,,--c} formatting.texi(mymacro,42) @code{@@url@{--a,--b@}} @url{--a,--b} formatting.texi(mymacro,42) @code{@@url@{--a,@}} @url{--a,} formatting.texi(mymacro,42) @code{@@url@{,--b@}} @url{,--b} formatting.texi(mymacro,42) @code{@@var@{--a@}} @var{--a} formatting.texi(mymacro,42) @code{@@verb@{:--a:@}} @verb{:--a:} formatting.texi(mymacro,42) @code{@@verb@{:a < & @@ % " -- b:@}} @verb{:a < & @ % " -- b:} formatting.texi(mymacro,42) @code{@@w@{@}} @w{} formatting.texi(mymacro,42) @code{@@H@{a@}} @H{a} formatting.texi(mymacro,42) @code{@@H@{--a@}} @H{--a} formatting.texi(mymacro,42) @code{@@dotaccent@{a@}} @dotaccent{a} formatting.texi(mymacro,42) @code{@@dotaccent@{--a@}} @dotaccent{--a} formatting.texi(mymacro,42) @code{@@ringaccent@{a@}} @ringaccent{a} formatting.texi(mymacro,42) @code{@@ringaccent@{--a@}} @ringaccent{--a} formatting.texi(mymacro,42) @code{@@tieaccent@{a@}} @tieaccent{a} formatting.texi(mymacro,42) @code{@@tieaccent@{--a@}} @tieaccent{--a} formatting.texi(mymacro,42) @code{@@u@{a@}} @u{a} formatting.texi(mymacro,42) @code{@@u@{--a@}} @u{--a} formatting.texi(mymacro,42) @code{@@ubaraccent@{a@}} @ubaraccent{a} formatting.texi(mymacro,42) @code{@@ubaraccent@{--a@}} @ubaraccent{--a} formatting.texi(mymacro,42) @code{@@udotaccent@{a@}} @udotaccent{a} formatting.texi(mymacro,42) @code{@@udotaccent@{--a@}} @udotaccent{--a} formatting.texi(mymacro,42) @code{@@v@{a@}} @v{a} formatting.texi(mymacro,42) @code{@@v@{--a@}} @v{--a} formatting.texi(mymacro,42) @code{@@,@{c@}} @,{c} formatting.texi(mymacro,42) @code{@@,@{--c@}} @,{--c} formatting.texi(mymacro,42) @code{@@footnote@{in footnote@}} @footnote{in footnote} formatting.texi(mymacro,42) @code{@@footnote@{in footnote2@}} @footnote{in footnote2} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@image@{f--ile@}} @image{f--ile} formatting.texi(mymacro,42) @code{@@image@{f--ile,l--i@}} @image{f--ile,l--i} formatting.texi(mymacro,42) @code{@@image@{f--ile,,l--e@}} @image{f--ile,,l--e} formatting.texi(mymacro,42) @code{@@image@{f--ile,,,alt@}} @image{f--ile,,,alt} formatting.texi(mymacro,42) @code{@@image@{f--ile,,,,e-d-xt@}} @image{f--ile,,,,e--xt} formatting.texi(mymacro,42) @code{@@image@{f--ile,aze,az,alt,e--xt@}} @image{f--ile,aze,az,alt,e--xt} formatting.texi(mymacro,42) @code{@@image@{f-ile,aze,,a--lt@}} @image{f-ile,aze,,a--lt} formatting.texi(mymacro,42) @code{@@image@{@@file@{f--ile@}@@@@@@.,aze,az,alt,@@file@{file ext@} e--xt@@@}} @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@}} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @sp 2 formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} formatting.texi(mymacro,42) @clickstyle @result formatting.texi(mymacro,42) After clickstyle @result{} formatting.texi(mymacro,42) @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} formatting.texi(mymacro,42) @clickstyle @arrow formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation formatting.texi(mymacro,42) A quot---ation formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation Note formatting.texi(mymacro,42) A Note formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation note formatting.texi(mymacro,42) A note formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation Caution formatting.texi(mymacro,42) Caution formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation Important formatting.texi(mymacro,42) Important formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation Tip formatting.texi(mymacro,42) a Tip formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation Warning formatting.texi(mymacro,42) a Warning. formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation something @'e @TeX{} formatting.texi(mymacro,42) The something @'e @TeX{} is here. formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation @@ at the end of line @ formatting.texi(mymacro,42) A @@ at the end of the @@quotation line. formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation something, other thing formatting.texi(mymacro,42) something, other thing formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation Note, the note formatting.texi(mymacro,42) Note, the note formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation Empty formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation @asis{} formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation @* formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) formatting.texi(mymacro,42) @itemize formatting.texi(mymacro,42) @item i--temize formatting.texi(mymacro,42) @end itemize formatting.texi(mymacro,42) formatting.texi(mymacro,42) @itemize + formatting.texi(mymacro,42) @item i--tem + formatting.texi(mymacro,42) @end itemize formatting.texi(mymacro,42) formatting.texi(mymacro,42) @itemize @bullet formatting.texi(mymacro,42) @item b--ullet formatting.texi(mymacro,42) @end itemize formatting.texi(mymacro,42) formatting.texi(mymacro,42) @itemize @minus formatting.texi(mymacro,42) @item minu--s formatting.texi(mymacro,42) @end itemize formatting.texi(mymacro,42) formatting.texi(mymacro,42) @itemize @emph formatting.texi(mymacro,42) @item e--mph item formatting.texi(mymacro,42) @end itemize formatting.texi(mymacro,42) formatting.texi(mymacro,42) @itemize @emph{after emph} formatting.texi(mymacro,42) @c comment in itemize formatting.texi(mymacro,42) @item e--mph item formatting.texi(mymacro,42) @end itemize formatting.texi(mymacro,42) formatting.texi(mymacro,42) @itemize @bullet{} a--n itemize line formatting.texi(mymacro,42) @cindex index entry within itemize formatting.texi(mymacro,42) @item i--tem 1 formatting.texi(mymacro,42) @item i--tem 2 formatting.texi(mymacro,42) @end itemize formatting.texi(mymacro,42) formatting.texi(mymacro,42) @enumerate formatting.texi(mymacro,42) @item e--numerate formatting.texi(mymacro,42) @end enumerate formatting.texi(mymacro,42) formatting.texi(mymacro,42) @multitable @columnfractions 6 7 formatting.texi(mymacro,42) @headitem mu--ltitable headitem @tab another tab formatting.texi(mymacro,42) @item mu--ltitable item @tab multitable tab formatting.texi(mymacro,42) @c comment in multitable formatting.texi(mymacro,42) @item mu--ltitable item 2 @tab multitable tab 2 formatting.texi(mymacro,42) @cindex index entry within multitable formatting.texi(mymacro,42) @item lone mu--ltitable item formatting.texi(mymacro,42) @end multitable formatting.texi(mymacro,42) formatting.texi(mymacro,42) @multitable {truc} {bidule} formatting.texi(mymacro,42) @item truc @tab bidule formatting.texi(mymacro,42) @end multitable formatting.texi(mymacro,42) formatting.texi(mymacro,42) @example formatting.texi(mymacro,42) e--xample some formatting.texi(mymacro,42) text formatting.texi(mymacro,42) @end example formatting.texi(mymacro,42) formatting.texi(mymacro,42) @smallexample formatting.texi(mymacro,42) s--mallexample formatting.texi(mymacro,42) @end smallexample formatting.texi(mymacro,42) formatting.texi(mymacro,42) @display formatting.texi(mymacro,42) d--isplay formatting.texi(mymacro,42) @end display formatting.texi(mymacro,42) formatting.texi(mymacro,42) @smalldisplay formatting.texi(mymacro,42) s--malldisplay formatting.texi(mymacro,42) @end smalldisplay formatting.texi(mymacro,42) formatting.texi(mymacro,42) @lisp formatting.texi(mymacro,42) l--isp formatting.texi(mymacro,42) @end lisp formatting.texi(mymacro,42) formatting.texi(mymacro,42) @smalllisp formatting.texi(mymacro,42) s--malllisp formatting.texi(mymacro,42) @end smalllisp formatting.texi(mymacro,42) formatting.texi(mymacro,42) @format formatting.texi(mymacro,42) f--ormat formatting.texi(mymacro,42) @end format formatting.texi(mymacro,42) formatting.texi(mymacro,42) @smallformat formatting.texi(mymacro,42) s--mallformat formatting.texi(mymacro,42) @end smallformat formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deffn c--ategory d--effn_name a--rguments... formatting.texi(mymacro,42) d--effn formatting.texi(mymacro,42) @end deffn formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deffn cate--gory de--ffn_name ar--guments @ formatting.texi(mymacro,42) more args @* even more so formatting.texi(mymacro,42) def--fn formatting.texi(mymacro,42) @end deffn formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deffn fset @var{i} a g formatting.texi(mymacro,42) @cindex index entry within deffn formatting.texi(mymacro,42) @deffnx {cmde} truc {} formatting.texi(mymacro,42) @deffnx Command {log trap} {} formatting.texi(mymacro,42) @deffnx Command { log trap1} {} formatting.texi(mymacro,42) @deffnx Command {log trap2 } {} formatting.texi(mymacro,42) @deffnx cmde @b{id ule} truc formatting.texi(mymacro,42) @deffnx cmde2 @b{id @samp{i} ule} truc formatting.texi(mymacro,42) @deffnx @b{id @samp{i} ule} formatting.texi(mymacro,42) @deffnx formatting.texi(mymacro,42) @deffnx aaa formatting.texi(mymacro,42) @deffnx {} {} formatting.texi(mymacro,42) @deffnx{} formatting.texi(mymacro,42) @deffnx{} machin formatting.texi(mymacro,42) @deffnx{} {bidule machin} formatting.texi(mymacro,42) @deffnx{truc} machin formatting.texi(mymacro,42) @deffnx{truc} { } formatting.texi(mymacro,42) @deffnx{truc} followed by a comment formatting.texi(mymacro,42) @c comment formatting.texi(mymacro,42) @deffnx{truc} formatting.texi(mymacro,42) @deffnx{} {} formatting.texi(mymacro,42) @deffnx {truc} a b c d e @b{f g} {h i} formatting.texi(mymacro,42) @deffnx {truc} deffnx before end deffn formatting.texi(mymacro,42) @end deffn formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deffn empty deffn formatting.texi(mymacro,42) @end deffn formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deffn empty deffn with deffnx formatting.texi(mymacro,42) @c comment between deffn and deffnx formatting.texi(mymacro,42) @deffnx empty deffnx formatting.texi(mymacro,42) @end deffn formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deffn fset @var{i} a g formatting.texi(mymacro,42) @deffnx {cmde} truc {} formatting.texi(mymacro,42) @c comment formatting.texi(mymacro,42) text in def item for second def item formatting.texi(mymacro,42) @end deffn formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defvr c--ategory d--efvr_name formatting.texi(mymacro,42) d--efvr formatting.texi(mymacro,42) @end defvr formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... formatting.texi(mymacro,42) d--eftypefn formatting.texi(mymacro,42) @end deftypefn formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... formatting.texi(mymacro,42) d--eftypeop formatting.texi(mymacro,42) @end deftypeop formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deftypevr c--ategory t--ype d--eftypevr_name formatting.texi(mymacro,42) d--eftypevr formatting.texi(mymacro,42) @end deftypevr formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defcv c--ategory c--lass d--efcv_name formatting.texi(mymacro,42) d--efcv formatting.texi(mymacro,42) @end defcv formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defop c--ategory c--lass d--efop_name a--rguments... formatting.texi(mymacro,42) d--efop formatting.texi(mymacro,42) @end defop formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deftp c--ategory d--eftp_name a--ttributes... formatting.texi(mymacro,42) d--eftp formatting.texi(mymacro,42) @end deftp formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defun d--efun_name a--rguments... formatting.texi(mymacro,42) d--efun formatting.texi(mymacro,42) @end defun formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defmac d--efmac_name a--rguments... formatting.texi(mymacro,42) d--efmac formatting.texi(mymacro,42) @end defmac formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defspec d--efspec_name a--rguments... formatting.texi(mymacro,42) d--efspec formatting.texi(mymacro,42) @end defspec formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defvar d--efvar_name argvar argvar1 formatting.texi(mymacro,42) d--efvar formatting.texi(mymacro,42) @end defvar formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defopt d--efopt_name formatting.texi(mymacro,42) d--efopt formatting.texi(mymacro,42) @end defopt formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deftypefun t--ype d--eftypefun_name a--rguments... formatting.texi(mymacro,42) d--eftypefun formatting.texi(mymacro,42) @end deftypefun formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deftypevar t--ype d--eftypevar_name formatting.texi(mymacro,42) d--eftypevar formatting.texi(mymacro,42) @end deftypevar formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defivar c--lass d--efivar_name formatting.texi(mymacro,42) d--efivar formatting.texi(mymacro,42) @end defivar formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deftypeivar c--lass t--ype d--eftypeivar_name formatting.texi(mymacro,42) d--eftypeivar formatting.texi(mymacro,42) @end deftypeivar formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defmethod c--lass d--efmethod_name a--rguments... formatting.texi(mymacro,42) d--efmethod formatting.texi(mymacro,42) @end defmethod formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... formatting.texi(mymacro,42) d--eftypemethod formatting.texi(mymacro,42) @end deftypemethod formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@xref@{c---hapter@@@@, cross r---ef name@@@@, t---itle@@@@, file n---ame@@@@, ma---nual@@@@@}} @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@}. formatting.texi(mymacro,42) @code{@@ref@{chapter, cross ref name, title, file name, manual@}} @ref{chapter, cross ref name, title, file name, manual} formatting.texi(mymacro,42) @code{@@pxref@{chapter, cross ref name, title, file name, manual@}} @pxref{chapter, cross ref name, title, file name, manual} formatting.texi(mymacro,42) @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@ref@{chapter@}} @ref{chapter} formatting.texi(mymacro,42) @code{@@xref@{chapter@}} @xref{chapter}. formatting.texi(mymacro,42) @code{@@pxref@{chapter@}} @pxref{chapter} formatting.texi(mymacro,42) @code{@@ref@{s--ect@@comma@{@}ion@}} @ref{s--ect@comma{}ion} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@ref@{s--ect@@comma@{@}ion, a @@comma@{@} in cross formatting.texi(mymacro,42) ref, a comma@@comma@{@} in title, a comma@@comma@{@} in file, a @@comma@{@} in manual name @}} formatting.texi(mymacro,42) @ref{s--ect@comma{}ion, a @comma{} in cross formatting.texi(mymacro,42) ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@ref@{chapter,cross ref name@}} @ref{chapter,cross ref name} formatting.texi(mymacro,42) @code{@@ref@{chapter,,title@}} @ref{chapter,,title} formatting.texi(mymacro,42) @code{@@ref@{chapter,,,file name@}} @ref{chapter,,,file name} formatting.texi(mymacro,42) @code{@@ref@{chapter,,,,manual@}} @ref{chapter,,,,manual} formatting.texi(mymacro,42) @code{@@ref@{chapter,cross ref name,title,@}} @ref{chapter,cross ref name,title,} formatting.texi(mymacro,42) @code{@@ref@{chapter,cross ref name,,file name@}} @ref{chapter,cross ref name,,file name} formatting.texi(mymacro,42) @code{@@ref@{chapter,cross ref name,,,manual@}} @ref{chapter,cross ref name,,,manual} formatting.texi(mymacro,42) @code{@@ref@{chapter,cross ref name,title,file name@}} @ref{chapter,cross ref name,title,file name} formatting.texi(mymacro,42) @code{@@ref@{chapter,cross ref name,title,,manual@}} @ref{chapter,cross ref name,title,,manual} formatting.texi(mymacro,42) @code{@@ref@{chapter,cross ref name,title, file name, manual@}} @ref{chapter,cross ref name,title, file name, manual} formatting.texi(mymacro,42) @code{@@ref@{chapter,,title,file name@}} @ref{chapter,,title,file name} formatting.texi(mymacro,42) @code{@@ref@{chapter,,title,,manual@}} @ref{chapter,,title,,manual} formatting.texi(mymacro,42) @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} formatting.texi(mymacro,42) @code{@@ref@{chapter,,,file name,manual@}} @ref{chapter,,,file name,manual} formatting.texi(mymacro,42) formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,cross ref name@}} @ref{(pman)anode,cross ref name} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,,title@}} @ref{(pman)anode,,title} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,,,file name@}} @ref{(pman)anode,,,file name} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,,,,manual@}} @ref{(pman)anode,,,,manual} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,cross ref name,title,@}} @ref{(pman)anode,cross ref name,title,} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,cross ref name,,file name@}} @ref{(pman)anode,cross ref name,,file name} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,cross ref name,,,manual@}} @ref{(pman)anode,cross ref name,,,manual} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,cross ref name,title,file name@}} @ref{(pman)anode,cross ref name,title,file name} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,cross ref name,title,,manual@}} @ref{(pman)anode,cross ref name,title,,manual} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,cross ref name,title, file name, manual@}} @ref{(pman)anode,cross ref name,title, file name, manual} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,,title,file name@}} @ref{(pman)anode,,title,file name} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,,title,,manual@}} @ref{(pman)anode,,title,,manual} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,,title, file name, manual@}} @ref{(pman)anode,,title, file name, manual} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,,,file name,manual@}} @ref{(pman)anode,,,file name,manual} formatting.texi(mymacro,42) formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} formatting.texi(mymacro,42) @code{@@inforef@{chapter@}} @inforef{chapter} formatting.texi(mymacro,42) @code{@@inforef@{chapter, cross ref name@}} @inforef{chapter, cross ref name} formatting.texi(mymacro,42) @code{@@inforef@{chapter,,file name@}} @inforef{chapter,,file name} formatting.texi(mymacro,42) @code{@@inforef@{node, cross ref name, file name@}} @inforef{node, cross ref name, file name} formatting.texi(mymacro,42) @code{@@inforef@{node@}} @inforef{node} formatting.texi(mymacro,42) @code{@@inforef@{node, cross ref name@}} @inforef{node, cross ref name} formatting.texi(mymacro,42) @code{@@inforef@{node,,file name@}} @inforef{node,,file name} formatting.texi(mymacro,42) @code{@@inforef@{chapter, cross ref name, file name, spurious arg@}} @inforef{chapter, cross ref name, file name, spurious arg} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@inforef@{s--ect@@comma@{@}ion, a @@comma@{@} in cross formatting.texi(mymacro,42) ref, a comma@@comma@{@} in file@}} formatting.texi(mymacro,42) @inforef{s--ect@comma{}ion, a @comma{} in cross formatting.texi(mymacro,42) ref, a comma@comma{} in file} formatting.texi(mymacro,42) formatting.texi(mymacro,42) formatting.texi(mymacro,42) @table @bullet formatting.texi(mymacro,42) @c comment in table formatting.texi(mymacro,42) @item a formatting.texi(mymacro,42) l--ine formatting.texi(mymacro,42) @end table formatting.texi(mymacro,42) formatting.texi(mymacro,42) @vtable @asis formatting.texi(mymacro,42) @item a formatting.texi(mymacro,42) @c comment between item and itemx formatting.texi(mymacro,42) @itemx b formatting.texi(mymacro,42) l--ine formatting.texi(mymacro,42) @end vtable formatting.texi(mymacro,42) formatting.texi(mymacro,42) @ftable @minus formatting.texi(mymacro,42) @item a formatting.texi(mymacro,42) @cindex index entry between item and itemx formatting.texi(mymacro,42) @itemx b formatting.texi(mymacro,42) l--ine formatting.texi(mymacro,42) @end ftable formatting.texi(mymacro,42) formatting.texi(mymacro,42) @cartouche formatting.texi(mymacro,42) c--artouche formatting.texi(mymacro,42) @end cartouche formatting.texi(mymacro,42) formatting.texi(mymacro,42) @flushleft formatting.texi(mymacro,42) f--lushleft formatting.texi(mymacro,42) @end flushleft formatting.texi(mymacro,42) formatting.texi(mymacro,42) @flushright formatting.texi(mymacro,42) f--lushright formatting.texi(mymacro,42) @end flushright formatting.texi(mymacro,42) formatting.texi(mymacro,42) @center ce--ntered line formatting.texi(mymacro,42) formatting.texi(mymacro,42) @verbatiminclude simplest.texi formatting.texi(mymacro,42) formatting.texi(mymacro,42) @verbatim formatting.texi(mymacro,42) in verbatim '' formatting.texi(mymacro,42) @end verbatim formatting.texi(mymacro,42) formatting.texi(mymacro,42) formatting.texi(mymacro,42) @html formatting.texi(mymacro,42) html '' formatting.texi(mymacro,42) @end html formatting.texi(mymacro,42) formatting.texi(mymacro,42) formatting.texi(mymacro,42) formatting.texi(mymacro,42) @majorheading majorheading formatting.texi(mymacro,42) formatting.texi(mymacro,42) @chapheading chapheading formatting.texi(mymacro,42) formatting.texi(mymacro,42) @heading heading formatting.texi(mymacro,42) formatting.texi(mymacro,42) @subheading subheading formatting.texi(mymacro,42) formatting.texi(mymacro,42) @subsubheading subsubheading formatting.texi(mymacro,42) formatting.texi(mymacro,42) @c makeinfo cannot handle that formatting.texi(mymacro,42) formatting.texi(mymacro,42) formatting.texi(mymacro,42) @c invalid texinfo formatting.texi(mymacro,42) formatting.texi(,43) @end example formatting.texi(,44) formatting.texi(,45) @cindex t--ruc formatting.texi(,46) @cindex T--ruc formatting.texi(,47) @cindex . formatting.texi(,48) @cindex ? formatting.texi(,49) @cindex a formatting.texi(,50) @findex t--ruc formatting.texi(,51) @findex T--ruc formatting.texi(,52) @findex . formatting.texi(,53) @findex ? formatting.texi(,54) @findex a formatting.texi(,55) formatting.texi(,56) formatting.texi(,57) cp formatting.texi(,58) @printindex cp formatting.texi(,59) formatting.texi(,60) fn formatting.texi(,61) @printindex fn formatting.texi(,62) formatting.texi(,63) vr formatting.texi(,64) @printindex vr formatting.texi(,65) formatting.texi(,66) ky formatting.texi(,67) @printindex ky formatting.texi(,68) formatting.texi(,69) pg formatting.texi(,70) @printindex pg formatting.texi(,71) formatting.texi(,72) tp formatting.texi(,73) @printindex tp formatting.texi(,74) formatting.texi(,75) formatting.texi(,76) formatting.texi(,77) @node chapter formatting.texi(,78) @chapter chapter formatting.texi(,79) formatting.texi(,80) @footnote{in footnote} formatting.texi(,81) formatting.texi(,82) @format formatting.texi(,83) @menu formatting.texi(,84) * s--ect@comma{}ion:: s--ect@comma{}ion formatting.texi(,85) formatting.texi(,86) Menu comment formatting.texi(,87) ``simple-double--three---four----''@* formatting.texi(,88) formatting.texi(,89) @end menu formatting.texi(,90) @end format formatting.texi(,91) formatting.texi(,92) @node s--ect@comma{}ion formatting.texi(,93) @section A section formatting.texi(,94) formatting.texi(,95) @menu formatting.texi(,96) * subsection:: formatting.texi(,97) @end menu formatting.texi(,98) formatting.texi(,99) @node subsection formatting.texi(,100) @subsection subsection formatting.texi(,101) formatting.texi(,102) @menu formatting.texi(,103) * subsubsection ``simple-double--three---four----'':: formatting.texi(,104) @end menu formatting.texi(,105) formatting.texi(,106) @anchor{anchor} formatting.texi(,107) formatting.texi(,108) @node subsubsection ``simple-double--three---four----'' formatting.texi(,109) @subsubsection subsubsection ``simple-double--three---four----'' formatting.texi(,110) formatting.texi(,111) @node chapter2 formatting.texi(,112) @centerchap chapter 2 formatting.texi(,113) formatting.texi(,114) @printindex cp formatting.texi(,115) @printindex fn formatting.texi(,116) formatting.texi(,117) @contents formatting.texi(,118) @shortcontents formatting.texi(,119) @bye texi2html-1.82/test/formatting/res/texi_formatting/formatting.texi0000644000175000017500000016114711264347123027437 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename formatting.info @node Top @top Top section @menu * chapter:: chapter Menu comment * description:chapter2. Chapter 2 @end menu @copying In copying < > " & ' ` ``simple-double--three---four----''@* code: @code{``simple-double--three---four----''} @* asis: @asis{``simple-double--three---four----''} @* strong: @strong{``simple-double--three---four----''} @* kbd: @kbd{``simple-double--three---four----''} @* `@w{}`simple-double-@w{}-three---four----'@w{}'@* @cindex --option @cindex `` @findex `` @findex --foption @@"u @"u @@"@{U@} @"{U} @@~n @~n @@^a @^a @@'e @'e @@=o @=o @@`i @`i @@'@{e@} @'{e} @@'@{@@dotless@{i@}@} @'{@dotless{i}} @@dotless@{i@} @dotless{i} @@dotless@{j@} @dotless{j} @@`@{@@=E@} @`{@=E} @@l@{@} @l{} @@,@{@@'C@} @,{@'C} @@,c @,c @@,c@@"u @,c@"u @* @@* @* @@ followed by a space @ @@ followed by a tab @ @@ followed by a new line @ @code{@@-} @- @code{@@|} @| @code{@@:} @: @code{@@!} @! @code{@@?} @? @code{@@.} @. @code{@@@@} @@ @code{@@@}} @} @code{@@@{} @{ @code{@@/} @/ foo vs.@: bar. colon :@:And something else. semi colon ;@:. And ? ?@:. Now ! !@:@@ but , ,@: @@TeX @TeX{} @@LaTeX @LaTeX{} @@bullet @bullet{} @@copyright @copyright{} @@dots @dots{} @@enddots @enddots{} @@equiv @equiv{} @@error @error{} @@expansion @expansion{} @@minus @minus{} @@point @point{} @@print @print{} @@result @result{} @@today @today{} @@aa @aa{} @@AA @AA{} @@ae @ae{} @@oe @oe{} @@AE @AE{} @@OE @OE{} @@o @o{} @@O @O{} @@ss @ss{} @@l @l{} @@L @L{} @@exclamdown @exclamdown{} @@questiondown @questiondown{} @@pounds @pounds{} @@registeredsymbol @registeredsymbol{} @@ordf @ordf{} @@ordm @ordm{} @@comma @comma{} @@quotedblleft @quotedblleft{} @@quotedblright @quotedblright{} @@quoteleft @quoteleft{} @@quoteright @quoteright{} @@quotedblbase @quotedblbase{} @@quotesinglbase @quotesinglbase{} @@guillemetleft @guillemetleft{} @@guillemetright @guillemetright{} @@guillemotleft @guillemotleft{} @@guillemotright @guillemotright{} @@guilsinglleft @guilsinglleft{} @@guilsinglright @guilsinglright{} @@textdegree @textdegree{} @@euro @euro{} @@arrow @arrow{} @@leq @leq{} @@geq @geq{} @code{@@acronym@{--a,an accronym@}} @acronym{--a,an accronym} @code{@@acronym@{--a@}} @acronym{--a} @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude Autonome @}} @abbr{@'E--. @comma{}A., @'Etude Autonome } @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} @code{@@asis@{--a@}} @asis{--a} @code{@@b@{--a@}} @b{--a} @code{@@cite@{--a@}} @cite{--a} @code{@@code@{--a@}} @code{--a} @code{@@command@{--a@}} @command{--a} @code{@@ctrl@{--a@}} @ctrl{--a} @code{@@dfn@{--a@}} @dfn{--a} @code{@@dmn@{--a@}} @dmn{--a} @code{@@email@{--a,--b@}} @email{--a,--b} @code{@@email@{,--b@}} @email{,--b} @code{@@email@{--a@}} @email{--a} @code{@@emph@{--a@}} @emph{--a} @code{@@env@{--a@}} @env{--a} @code{@@file@{--a@}} @file{--a} @code{@@i@{--a@}} @i{--a} @code{@@kbd@{--a@}} @kbd{--a} @code{@@key@{--a@}} @key{--a} @code{@@math@{--a @{\frac@{1@}@{2@}@} @@minus@{@}@}} @math{--a {\frac{1}{2}} @minus{}} @code{@@option@{--a@}} @option{--a} @code{@@r@{--a@}} @r{--a} @code{@@samp@{--a@}} @samp{--a} @code{@@sc@{--a@}} @sc{--a} @code{@@strong@{--a@}} @strong{--a} @code{@@t@{--a@}} @t{--a} @code{@@sansserif@{--a@}} @sansserif{--a} @code{@@titlefont@{--a@}} @titlefont{--a} @code{@@indicateurl@{--a@}} @indicateurl{--a} @code{@@uref@{--a,--b@}} @uref{--a,--b} @code{@@uref@{--a@}} @uref{--a} @code{@@uref@{,--b@}} @uref{,--b} @code{@@uref@{--a,--b,--c@}} @uref{--a,--b,--c} @code{@@uref@{,--b,--c@}} @uref{,--b,--c} @code{@@uref@{--a,,--c@}} @uref{--a,,--c} @code{@@uref@{,,--c@}} @uref{,,--c} @code{@@url@{--a,--b@}} @url{--a,--b} @code{@@url@{--a,@}} @url{--a,} @code{@@url@{,--b@}} @url{,--b} @code{@@var@{--a@}} @var{--a} @code{@@verb@{:--a:@}} @verb{:--a:} @code{@@verb@{:a < & @@ % " -- b:@}} @verb{:a < & @ % " -- b:} @code{@@w@{@}} @w{} @code{@@H@{a@}} @H{a} @code{@@H@{--a@}} @H{--a} @code{@@dotaccent@{a@}} @dotaccent{a} @code{@@dotaccent@{--a@}} @dotaccent{--a} @code{@@ringaccent@{a@}} @ringaccent{a} @code{@@ringaccent@{--a@}} @ringaccent{--a} @code{@@tieaccent@{a@}} @tieaccent{a} @code{@@tieaccent@{--a@}} @tieaccent{--a} @code{@@u@{a@}} @u{a} @code{@@u@{--a@}} @u{--a} @code{@@ubaraccent@{a@}} @ubaraccent{a} @code{@@ubaraccent@{--a@}} @ubaraccent{--a} @code{@@udotaccent@{a@}} @udotaccent{a} @code{@@udotaccent@{--a@}} @udotaccent{--a} @code{@@v@{a@}} @v{a} @code{@@v@{--a@}} @v{--a} @code{@@,@{c@}} @,{c} @code{@@,@{--c@}} @,{--c} @code{@@footnote@{in footnote@}} @footnote{in footnote} @code{@@footnote@{in footnote2@}} @footnote{in footnote2} @code{@@image@{f--ile@}} @image{f--ile} @code{@@image@{f--ile,l--i@}} @image{f--ile,l--i} @code{@@image@{f--ile,,l--e@}} @image{f--ile,,l--e} @code{@@image@{f--ile,,,alt@}} @image{f--ile,,,alt} @code{@@image@{f--ile,,,,e-d-xt@}} @image{f--ile,,,,e--xt} @code{@@image@{f--ile,aze,az,alt,e--xt@}} @image{f--ile,aze,az,alt,e--xt} @code{@@image@{f-ile,aze,,a--lt@}} @image{f-ile,aze,,a--lt} @code{@@image@{@@file@{f--ile@}@@@@@@.,aze,az,alt,@@file@{file ext@} e--xt@@@}} @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@}} @sp 2 @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} @clickstyle @result After clickstyle @result{} @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} @clickstyle @arrow @quotation A quot---ation @end quotation @quotation Note A Note @end quotation @quotation note A note @end quotation @quotation Caution Caution @end quotation @quotation Important Important @end quotation @quotation Tip a Tip @end quotation @quotation Warning a Warning. @end quotation @quotation something @'e @TeX{} The something @'e @TeX{} is here. @end quotation @quotation @@ at the end of line @ A @@ at the end of the @@quotation line. @end quotation @quotation something, other thing something, other thing @end quotation @quotation Note, the note Note, the note @end quotation @quotation @end quotation @quotation Empty @end quotation @quotation @asis{} @end quotation @quotation @* @end quotation @itemize @item i--temize @end itemize @itemize + @item i--tem + @end itemize @itemize @bullet @item b--ullet @end itemize @itemize @minus @item minu--s @end itemize @itemize @emph @item e--mph item @end itemize @itemize @emph{after emph} @c comment in itemize @item e--mph item @end itemize @itemize @bullet{} a--n itemize line @cindex index entry within itemize @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 6 7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @c comment in multitable @item mu--ltitable item 2 @tab multitable tab 2 @cindex index entry within multitable @item lone mu--ltitable item @end multitable @multitable {truc} {bidule} @item truc @tab bidule @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @display d--isplay @end display @smalldisplay s--malldisplay @end smalldisplay @lisp l--isp @end lisp @smalllisp s--malllisp @end smalllisp @format f--ormat @end format @smallformat s--mallformat @end smallformat @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @deffn cate--gory de--ffn_name ar--guments @ more args @* even more so def--fn @end deffn @deffn fset @var{i} a g @cindex index entry within deffn @deffnx {cmde} truc {} @deffnx Command {log trap} {} @deffnx Command { log trap1} {} @deffnx Command {log trap2 } {} @deffnx cmde @b{id ule} truc @deffnx cmde2 @b{id @samp{i} ule} truc @deffnx @b{id @samp{i} ule} @deffnx @deffnx aaa @deffnx {} {} @deffnx{} @deffnx{} machin @deffnx{} {bidule machin} @deffnx{truc} machin @deffnx{truc} { } @deffnx{truc} followed by a comment @c comment @deffnx{truc} @deffnx{} {} @deffnx {truc} a b c d e @b{f g} {h i} @deffnx {truc} deffnx before end deffn @end deffn @deffn empty deffn @end deffn @deffn empty deffn with deffnx @c comment between deffn and deffnx @deffnx empty deffnx @end deffn @deffn fset @var{i} a g @deffnx {cmde} truc {} @c comment text in def item for second def item @end deffn @defvr c--ategory d--efvr_name d--efvr @end defvr @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... d--eftypefn @end deftypefn @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... d--eftypeop @end deftypeop @deftypevr c--ategory t--ype d--eftypevr_name d--eftypevr @end deftypevr @defcv c--ategory c--lass d--efcv_name d--efcv @end defcv @defop c--ategory c--lass d--efop_name a--rguments... d--efop @end defop @deftp c--ategory d--eftp_name a--ttributes... d--eftp @end deftp @defun d--efun_name a--rguments... d--efun @end defun @defmac d--efmac_name a--rguments... d--efmac @end defmac @defspec d--efspec_name a--rguments... d--efspec @end defspec @defvar d--efvar_name argvar argvar1 d--efvar @end defvar @defopt d--efopt_name d--efopt @end defopt @deftypefun t--ype d--eftypefun_name a--rguments... d--eftypefun @end deftypefun @deftypevar t--ype d--eftypevar_name d--eftypevar @end deftypevar @defivar c--lass d--efivar_name d--efivar @end defivar @deftypeivar c--lass t--ype d--eftypeivar_name d--eftypeivar @end deftypeivar @defmethod c--lass d--efmethod_name a--rguments... d--efmethod @end defmethod @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... d--eftypemethod @end deftypemethod @code{@@xref@{c---hapter@@@@, cross r---ef name@@@@, t---itle@@@@, file n---ame@@@@, ma---nual@@@@@}} @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@}. @code{@@ref@{chapter, cross ref name, title, file name, manual@}} @ref{chapter, cross ref name, title, file name, manual} @code{@@pxref@{chapter, cross ref name, title, file name, manual@}} @pxref{chapter, cross ref name, title, file name, manual} @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} @code{@@ref@{chapter@}} @ref{chapter} @code{@@xref@{chapter@}} @xref{chapter}. @code{@@pxref@{chapter@}} @pxref{chapter} @code{@@ref@{s--ect@@comma@{@}ion@}} @ref{s--ect@comma{}ion} @code{@@ref@{s--ect@@comma@{@}ion, a @@comma@{@} in cross ref, a comma@@comma@{@} in title, a comma@@comma@{@} in file, a @@comma@{@} in manual name @}} @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } @code{@@ref@{chapter,cross ref name@}} @ref{chapter,cross ref name} @code{@@ref@{chapter,,title@}} @ref{chapter,,title} @code{@@ref@{chapter,,,file name@}} @ref{chapter,,,file name} @code{@@ref@{chapter,,,,manual@}} @ref{chapter,,,,manual} @code{@@ref@{chapter,cross ref name,title,@}} @ref{chapter,cross ref name,title,} @code{@@ref@{chapter,cross ref name,,file name@}} @ref{chapter,cross ref name,,file name} @code{@@ref@{chapter,cross ref name,,,manual@}} @ref{chapter,cross ref name,,,manual} @code{@@ref@{chapter,cross ref name,title,file name@}} @ref{chapter,cross ref name,title,file name} @code{@@ref@{chapter,cross ref name,title,,manual@}} @ref{chapter,cross ref name,title,,manual} @code{@@ref@{chapter,cross ref name,title, file name, manual@}} @ref{chapter,cross ref name,title, file name, manual} @code{@@ref@{chapter,,title,file name@}} @ref{chapter,,title,file name} @code{@@ref@{chapter,,title,,manual@}} @ref{chapter,,title,,manual} @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} @code{@@ref@{chapter,,,file name,manual@}} @ref{chapter,,,file name,manual} @code{@@ref@{(pman)anode,cross ref name@}} @ref{(pman)anode,cross ref name} @code{@@ref@{(pman)anode,,title@}} @ref{(pman)anode,,title} @code{@@ref@{(pman)anode,,,file name@}} @ref{(pman)anode,,,file name} @code{@@ref@{(pman)anode,,,,manual@}} @ref{(pman)anode,,,,manual} @code{@@ref@{(pman)anode,cross ref name,title,@}} @ref{(pman)anode,cross ref name,title,} @code{@@ref@{(pman)anode,cross ref name,,file name@}} @ref{(pman)anode,cross ref name,,file name} @code{@@ref@{(pman)anode,cross ref name,,,manual@}} @ref{(pman)anode,cross ref name,,,manual} @code{@@ref@{(pman)anode,cross ref name,title,file name@}} @ref{(pman)anode,cross ref name,title,file name} @code{@@ref@{(pman)anode,cross ref name,title,,manual@}} @ref{(pman)anode,cross ref name,title,,manual} @code{@@ref@{(pman)anode,cross ref name,title, file name, manual@}} @ref{(pman)anode,cross ref name,title, file name, manual} @code{@@ref@{(pman)anode,,title,file name@}} @ref{(pman)anode,,title,file name} @code{@@ref@{(pman)anode,,title,,manual@}} @ref{(pman)anode,,title,,manual} @code{@@ref@{(pman)anode,,title, file name, manual@}} @ref{(pman)anode,,title, file name, manual} @code{@@ref@{(pman)anode,,,file name,manual@}} @ref{(pman)anode,,,file name,manual} @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} @code{@@inforef@{chapter@}} @inforef{chapter} @code{@@inforef@{chapter, cross ref name@}} @inforef{chapter, cross ref name} @code{@@inforef@{chapter,,file name@}} @inforef{chapter,,file name} @code{@@inforef@{node, cross ref name, file name@}} @inforef{node, cross ref name, file name} @code{@@inforef@{node@}} @inforef{node} @code{@@inforef@{node, cross ref name@}} @inforef{node, cross ref name} @code{@@inforef@{node,,file name@}} @inforef{node,,file name} @code{@@inforef@{chapter, cross ref name, file name, spurious arg@}} @inforef{chapter, cross ref name, file name, spurious arg} @code{@@inforef@{s--ect@@comma@{@}ion, a @@comma@{@} in cross ref, a comma@@comma@{@} in file@}} @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} @table @bullet @c comment in table @item a l--ine @end table @vtable @asis @item a @c comment between item and itemx @itemx b l--ine @end vtable @ftable @minus @item a @cindex index entry between item and itemx @itemx b l--ine @end ftable @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @verbatiminclude simplest.texi @verbatim in verbatim '' @end verbatim @html html '' @end html @majorheading majorheading @chapheading chapheading @heading heading @subheading subheading @subsubheading subsubheading @c makeinfo cannot handle that @c invalid texinfo @end copying @titlepage @title title --a @subtitle formatting subtitle --a @subtitle subtitle 2 --a @author author1 --a with accents in name T@'e@,ca @author author2 --a In titlepage < > " & ' ` ``simple-double--three---four----''@* code: @code{``simple-double--three---four----''} @* asis: @asis{``simple-double--three---four----''} @* strong: @strong{``simple-double--three---four----''} @* kbd: @kbd{``simple-double--three---four----''} @* `@w{}`simple-double-@w{}-three---four----'@w{}'@* @cindex --option @cindex `` @findex `` @findex --foption @@"u @"u @@"@{U@} @"{U} @@~n @~n @@^a @^a @@'e @'e @@=o @=o @@`i @`i @@'@{e@} @'{e} @@'@{@@dotless@{i@}@} @'{@dotless{i}} @@dotless@{i@} @dotless{i} @@dotless@{j@} @dotless{j} @@`@{@@=E@} @`{@=E} @@l@{@} @l{} @@,@{@@'C@} @,{@'C} @@,c @,c @@,c@@"u @,c@"u @* @@* @* @@ followed by a space @ @@ followed by a tab @ @@ followed by a new line @ @code{@@-} @- @code{@@|} @| @code{@@:} @: @code{@@!} @! @code{@@?} @? @code{@@.} @. @code{@@@@} @@ @code{@@@}} @} @code{@@@{} @{ @code{@@/} @/ foo vs.@: bar. colon :@:And something else. semi colon ;@:. And ? ?@:. Now ! !@:@@ but , ,@: @@TeX @TeX{} @@LaTeX @LaTeX{} @@bullet @bullet{} @@copyright @copyright{} @@dots @dots{} @@enddots @enddots{} @@equiv @equiv{} @@error @error{} @@expansion @expansion{} @@minus @minus{} @@point @point{} @@print @print{} @@result @result{} @@today @today{} @@aa @aa{} @@AA @AA{} @@ae @ae{} @@oe @oe{} @@AE @AE{} @@OE @OE{} @@o @o{} @@O @O{} @@ss @ss{} @@l @l{} @@L @L{} @@exclamdown @exclamdown{} @@questiondown @questiondown{} @@pounds @pounds{} @@registeredsymbol @registeredsymbol{} @@ordf @ordf{} @@ordm @ordm{} @@comma @comma{} @@quotedblleft @quotedblleft{} @@quotedblright @quotedblright{} @@quoteleft @quoteleft{} @@quoteright @quoteright{} @@quotedblbase @quotedblbase{} @@quotesinglbase @quotesinglbase{} @@guillemetleft @guillemetleft{} @@guillemetright @guillemetright{} @@guillemotleft @guillemotleft{} @@guillemotright @guillemotright{} @@guilsinglleft @guilsinglleft{} @@guilsinglright @guilsinglright{} @@textdegree @textdegree{} @@euro @euro{} @@arrow @arrow{} @@leq @leq{} @@geq @geq{} @code{@@acronym@{--a,an accronym@}} @acronym{--a,an accronym} @code{@@acronym@{--a@}} @acronym{--a} @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude Autonome @}} @abbr{@'E--. @comma{}A., @'Etude Autonome } @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} @code{@@asis@{--a@}} @asis{--a} @code{@@b@{--a@}} @b{--a} @code{@@cite@{--a@}} @cite{--a} @code{@@code@{--a@}} @code{--a} @code{@@command@{--a@}} @command{--a} @code{@@ctrl@{--a@}} @ctrl{--a} @code{@@dfn@{--a@}} @dfn{--a} @code{@@dmn@{--a@}} @dmn{--a} @code{@@email@{--a,--b@}} @email{--a,--b} @code{@@email@{,--b@}} @email{,--b} @code{@@email@{--a@}} @email{--a} @code{@@emph@{--a@}} @emph{--a} @code{@@env@{--a@}} @env{--a} @code{@@file@{--a@}} @file{--a} @code{@@i@{--a@}} @i{--a} @code{@@kbd@{--a@}} @kbd{--a} @code{@@key@{--a@}} @key{--a} @code{@@math@{--a @{\frac@{1@}@{2@}@} @@minus@{@}@}} @math{--a {\frac{1}{2}} @minus{}} @code{@@option@{--a@}} @option{--a} @code{@@r@{--a@}} @r{--a} @code{@@samp@{--a@}} @samp{--a} @code{@@sc@{--a@}} @sc{--a} @code{@@strong@{--a@}} @strong{--a} @code{@@t@{--a@}} @t{--a} @code{@@sansserif@{--a@}} @sansserif{--a} @code{@@titlefont@{--a@}} @titlefont{--a} @code{@@indicateurl@{--a@}} @indicateurl{--a} @code{@@uref@{--a,--b@}} @uref{--a,--b} @code{@@uref@{--a@}} @uref{--a} @code{@@uref@{,--b@}} @uref{,--b} @code{@@uref@{--a,--b,--c@}} @uref{--a,--b,--c} @code{@@uref@{,--b,--c@}} @uref{,--b,--c} @code{@@uref@{--a,,--c@}} @uref{--a,,--c} @code{@@uref@{,,--c@}} @uref{,,--c} @code{@@url@{--a,--b@}} @url{--a,--b} @code{@@url@{--a,@}} @url{--a,} @code{@@url@{,--b@}} @url{,--b} @code{@@var@{--a@}} @var{--a} @code{@@verb@{:--a:@}} @verb{:--a:} @code{@@verb@{:a < & @@ % " -- b:@}} @verb{:a < & @ % " -- b:} @code{@@w@{@}} @w{} @code{@@H@{a@}} @H{a} @code{@@H@{--a@}} @H{--a} @code{@@dotaccent@{a@}} @dotaccent{a} @code{@@dotaccent@{--a@}} @dotaccent{--a} @code{@@ringaccent@{a@}} @ringaccent{a} @code{@@ringaccent@{--a@}} @ringaccent{--a} @code{@@tieaccent@{a@}} @tieaccent{a} @code{@@tieaccent@{--a@}} @tieaccent{--a} @code{@@u@{a@}} @u{a} @code{@@u@{--a@}} @u{--a} @code{@@ubaraccent@{a@}} @ubaraccent{a} @code{@@ubaraccent@{--a@}} @ubaraccent{--a} @code{@@udotaccent@{a@}} @udotaccent{a} @code{@@udotaccent@{--a@}} @udotaccent{--a} @code{@@v@{a@}} @v{a} @code{@@v@{--a@}} @v{--a} @code{@@,@{c@}} @,{c} @code{@@,@{--c@}} @,{--c} @code{@@footnote@{in footnote@}} @footnote{in footnote} @code{@@footnote@{in footnote2@}} @footnote{in footnote2} @code{@@image@{f--ile@}} @image{f--ile} @code{@@image@{f--ile,l--i@}} @image{f--ile,l--i} @code{@@image@{f--ile,,l--e@}} @image{f--ile,,l--e} @code{@@image@{f--ile,,,alt@}} @image{f--ile,,,alt} @code{@@image@{f--ile,,,,e-d-xt@}} @image{f--ile,,,,e--xt} @code{@@image@{f--ile,aze,az,alt,e--xt@}} @image{f--ile,aze,az,alt,e--xt} @code{@@image@{f-ile,aze,,a--lt@}} @image{f-ile,aze,,a--lt} @code{@@image@{@@file@{f--ile@}@@@@@@.,aze,az,alt,@@file@{file ext@} e--xt@@@}} @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@}} @sp 2 @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} @clickstyle @result After clickstyle @result{} @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} @clickstyle @arrow @quotation A quot---ation @end quotation @quotation Note A Note @end quotation @quotation note A note @end quotation @quotation Caution Caution @end quotation @quotation Important Important @end quotation @quotation Tip a Tip @end quotation @quotation Warning a Warning. @end quotation @quotation something @'e @TeX{} The something @'e @TeX{} is here. @end quotation @quotation @@ at the end of line @ A @@ at the end of the @@quotation line. @end quotation @quotation something, other thing something, other thing @end quotation @quotation Note, the note Note, the note @end quotation @quotation @end quotation @quotation Empty @end quotation @quotation @asis{} @end quotation @quotation @* @end quotation @itemize @item i--temize @end itemize @itemize + @item i--tem + @end itemize @itemize @bullet @item b--ullet @end itemize @itemize @minus @item minu--s @end itemize @itemize @emph @item e--mph item @end itemize @itemize @emph{after emph} @c comment in itemize @item e--mph item @end itemize @itemize @bullet{} a--n itemize line @cindex index entry within itemize @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 6 7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @c comment in multitable @item mu--ltitable item 2 @tab multitable tab 2 @cindex index entry within multitable @item lone mu--ltitable item @end multitable @multitable {truc} {bidule} @item truc @tab bidule @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @display d--isplay @end display @smalldisplay s--malldisplay @end smalldisplay @lisp l--isp @end lisp @smalllisp s--malllisp @end smalllisp @format f--ormat @end format @smallformat s--mallformat @end smallformat @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @deffn cate--gory de--ffn_name ar--guments @ more args @* even more so def--fn @end deffn @deffn fset @var{i} a g @cindex index entry within deffn @deffnx {cmde} truc {} @deffnx Command {log trap} {} @deffnx Command { log trap1} {} @deffnx Command {log trap2 } {} @deffnx cmde @b{id ule} truc @deffnx cmde2 @b{id @samp{i} ule} truc @deffnx @b{id @samp{i} ule} @deffnx @deffnx aaa @deffnx {} {} @deffnx{} @deffnx{} machin @deffnx{} {bidule machin} @deffnx{truc} machin @deffnx{truc} { } @deffnx{truc} followed by a comment @c comment @deffnx{truc} @deffnx{} {} @deffnx {truc} a b c d e @b{f g} {h i} @deffnx {truc} deffnx before end deffn @end deffn @deffn empty deffn @end deffn @deffn empty deffn with deffnx @c comment between deffn and deffnx @deffnx empty deffnx @end deffn @deffn fset @var{i} a g @deffnx {cmde} truc {} @c comment text in def item for second def item @end deffn @defvr c--ategory d--efvr_name d--efvr @end defvr @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... d--eftypefn @end deftypefn @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... d--eftypeop @end deftypeop @deftypevr c--ategory t--ype d--eftypevr_name d--eftypevr @end deftypevr @defcv c--ategory c--lass d--efcv_name d--efcv @end defcv @defop c--ategory c--lass d--efop_name a--rguments... d--efop @end defop @deftp c--ategory d--eftp_name a--ttributes... d--eftp @end deftp @defun d--efun_name a--rguments... d--efun @end defun @defmac d--efmac_name a--rguments... d--efmac @end defmac @defspec d--efspec_name a--rguments... d--efspec @end defspec @defvar d--efvar_name argvar argvar1 d--efvar @end defvar @defopt d--efopt_name d--efopt @end defopt @deftypefun t--ype d--eftypefun_name a--rguments... d--eftypefun @end deftypefun @deftypevar t--ype d--eftypevar_name d--eftypevar @end deftypevar @defivar c--lass d--efivar_name d--efivar @end defivar @deftypeivar c--lass t--ype d--eftypeivar_name d--eftypeivar @end deftypeivar @defmethod c--lass d--efmethod_name a--rguments... d--efmethod @end defmethod @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... d--eftypemethod @end deftypemethod @code{@@xref@{c---hapter@@@@, cross r---ef name@@@@, t---itle@@@@, file n---ame@@@@, ma---nual@@@@@}} @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@}. @code{@@ref@{chapter, cross ref name, title, file name, manual@}} @ref{chapter, cross ref name, title, file name, manual} @code{@@pxref@{chapter, cross ref name, title, file name, manual@}} @pxref{chapter, cross ref name, title, file name, manual} @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} @code{@@ref@{chapter@}} @ref{chapter} @code{@@xref@{chapter@}} @xref{chapter}. @code{@@pxref@{chapter@}} @pxref{chapter} @code{@@ref@{s--ect@@comma@{@}ion@}} @ref{s--ect@comma{}ion} @code{@@ref@{s--ect@@comma@{@}ion, a @@comma@{@} in cross ref, a comma@@comma@{@} in title, a comma@@comma@{@} in file, a @@comma@{@} in manual name @}} @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } @code{@@ref@{chapter,cross ref name@}} @ref{chapter,cross ref name} @code{@@ref@{chapter,,title@}} @ref{chapter,,title} @code{@@ref@{chapter,,,file name@}} @ref{chapter,,,file name} @code{@@ref@{chapter,,,,manual@}} @ref{chapter,,,,manual} @code{@@ref@{chapter,cross ref name,title,@}} @ref{chapter,cross ref name,title,} @code{@@ref@{chapter,cross ref name,,file name@}} @ref{chapter,cross ref name,,file name} @code{@@ref@{chapter,cross ref name,,,manual@}} @ref{chapter,cross ref name,,,manual} @code{@@ref@{chapter,cross ref name,title,file name@}} @ref{chapter,cross ref name,title,file name} @code{@@ref@{chapter,cross ref name,title,,manual@}} @ref{chapter,cross ref name,title,,manual} @code{@@ref@{chapter,cross ref name,title, file name, manual@}} @ref{chapter,cross ref name,title, file name, manual} @code{@@ref@{chapter,,title,file name@}} @ref{chapter,,title,file name} @code{@@ref@{chapter,,title,,manual@}} @ref{chapter,,title,,manual} @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} @code{@@ref@{chapter,,,file name,manual@}} @ref{chapter,,,file name,manual} @code{@@ref@{(pman)anode,cross ref name@}} @ref{(pman)anode,cross ref name} @code{@@ref@{(pman)anode,,title@}} @ref{(pman)anode,,title} @code{@@ref@{(pman)anode,,,file name@}} @ref{(pman)anode,,,file name} @code{@@ref@{(pman)anode,,,,manual@}} @ref{(pman)anode,,,,manual} @code{@@ref@{(pman)anode,cross ref name,title,@}} @ref{(pman)anode,cross ref name,title,} @code{@@ref@{(pman)anode,cross ref name,,file name@}} @ref{(pman)anode,cross ref name,,file name} @code{@@ref@{(pman)anode,cross ref name,,,manual@}} @ref{(pman)anode,cross ref name,,,manual} @code{@@ref@{(pman)anode,cross ref name,title,file name@}} @ref{(pman)anode,cross ref name,title,file name} @code{@@ref@{(pman)anode,cross ref name,title,,manual@}} @ref{(pman)anode,cross ref name,title,,manual} @code{@@ref@{(pman)anode,cross ref name,title, file name, manual@}} @ref{(pman)anode,cross ref name,title, file name, manual} @code{@@ref@{(pman)anode,,title,file name@}} @ref{(pman)anode,,title,file name} @code{@@ref@{(pman)anode,,title,,manual@}} @ref{(pman)anode,,title,,manual} @code{@@ref@{(pman)anode,,title, file name, manual@}} @ref{(pman)anode,,title, file name, manual} @code{@@ref@{(pman)anode,,,file name,manual@}} @ref{(pman)anode,,,file name,manual} @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} @code{@@inforef@{chapter@}} @inforef{chapter} @code{@@inforef@{chapter, cross ref name@}} @inforef{chapter, cross ref name} @code{@@inforef@{chapter,,file name@}} @inforef{chapter,,file name} @code{@@inforef@{node, cross ref name, file name@}} @inforef{node, cross ref name, file name} @code{@@inforef@{node@}} @inforef{node} @code{@@inforef@{node, cross ref name@}} @inforef{node, cross ref name} @code{@@inforef@{node,,file name@}} @inforef{node,,file name} @code{@@inforef@{chapter, cross ref name, file name, spurious arg@}} @inforef{chapter, cross ref name, file name, spurious arg} @code{@@inforef@{s--ect@@comma@{@}ion, a @@comma@{@} in cross ref, a comma@@comma@{@} in file@}} @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} @table @bullet @c comment in table @item a l--ine @end table @vtable @asis @item a @c comment between item and itemx @itemx b l--ine @end vtable @ftable @minus @item a @cindex index entry between item and itemx @itemx b l--ine @end ftable @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @verbatiminclude simplest.texi @verbatim in verbatim '' @end verbatim @html html '' @end html @majorheading majorheading @chapheading chapheading @heading heading @subheading subheading @subsubheading subsubheading @c makeinfo cannot handle that @c invalid texinfo Insercopying in titlepage @insertcopying @end titlepage Insertcopying in normal text @insertcopying Normal text < > " & ' ` ``simple-double--three---four----''@* code: @code{``simple-double--three---four----''} @* asis: @asis{``simple-double--three---four----''} @* strong: @strong{``simple-double--three---four----''} @* kbd: @kbd{``simple-double--three---four----''} @* `@w{}`simple-double-@w{}-three---four----'@w{}'@* @cindex --option @cindex `` @findex `` @findex --foption @@"u @"u @@"@{U@} @"{U} @@~n @~n @@^a @^a @@'e @'e @@=o @=o @@`i @`i @@'@{e@} @'{e} @@'@{@@dotless@{i@}@} @'{@dotless{i}} @@dotless@{i@} @dotless{i} @@dotless@{j@} @dotless{j} @@`@{@@=E@} @`{@=E} @@l@{@} @l{} @@,@{@@'C@} @,{@'C} @@,c @,c @@,c@@"u @,c@"u @* @@* @* @@ followed by a space @ @@ followed by a tab @ @@ followed by a new line @ @code{@@-} @- @code{@@|} @| @code{@@:} @: @code{@@!} @! @code{@@?} @? @code{@@.} @. @code{@@@@} @@ @code{@@@}} @} @code{@@@{} @{ @code{@@/} @/ foo vs.@: bar. colon :@:And something else. semi colon ;@:. And ? ?@:. Now ! !@:@@ but , ,@: @@TeX @TeX{} @@LaTeX @LaTeX{} @@bullet @bullet{} @@copyright @copyright{} @@dots @dots{} @@enddots @enddots{} @@equiv @equiv{} @@error @error{} @@expansion @expansion{} @@minus @minus{} @@point @point{} @@print @print{} @@result @result{} @@today @today{} @@aa @aa{} @@AA @AA{} @@ae @ae{} @@oe @oe{} @@AE @AE{} @@OE @OE{} @@o @o{} @@O @O{} @@ss @ss{} @@l @l{} @@L @L{} @@exclamdown @exclamdown{} @@questiondown @questiondown{} @@pounds @pounds{} @@registeredsymbol @registeredsymbol{} @@ordf @ordf{} @@ordm @ordm{} @@comma @comma{} @@quotedblleft @quotedblleft{} @@quotedblright @quotedblright{} @@quoteleft @quoteleft{} @@quoteright @quoteright{} @@quotedblbase @quotedblbase{} @@quotesinglbase @quotesinglbase{} @@guillemetleft @guillemetleft{} @@guillemetright @guillemetright{} @@guillemotleft @guillemotleft{} @@guillemotright @guillemotright{} @@guilsinglleft @guilsinglleft{} @@guilsinglright @guilsinglright{} @@textdegree @textdegree{} @@euro @euro{} @@arrow @arrow{} @@leq @leq{} @@geq @geq{} @code{@@acronym@{--a,an accronym@}} @acronym{--a,an accronym} @code{@@acronym@{--a@}} @acronym{--a} @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude Autonome @}} @abbr{@'E--. @comma{}A., @'Etude Autonome } @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} @code{@@asis@{--a@}} @asis{--a} @code{@@b@{--a@}} @b{--a} @code{@@cite@{--a@}} @cite{--a} @code{@@code@{--a@}} @code{--a} @code{@@command@{--a@}} @command{--a} @code{@@ctrl@{--a@}} @ctrl{--a} @code{@@dfn@{--a@}} @dfn{--a} @code{@@dmn@{--a@}} @dmn{--a} @code{@@email@{--a,--b@}} @email{--a,--b} @code{@@email@{,--b@}} @email{,--b} @code{@@email@{--a@}} @email{--a} @code{@@emph@{--a@}} @emph{--a} @code{@@env@{--a@}} @env{--a} @code{@@file@{--a@}} @file{--a} @code{@@i@{--a@}} @i{--a} @code{@@kbd@{--a@}} @kbd{--a} @code{@@key@{--a@}} @key{--a} @code{@@math@{--a @{\frac@{1@}@{2@}@} @@minus@{@}@}} @math{--a {\frac{1}{2}} @minus{}} @code{@@option@{--a@}} @option{--a} @code{@@r@{--a@}} @r{--a} @code{@@samp@{--a@}} @samp{--a} @code{@@sc@{--a@}} @sc{--a} @code{@@strong@{--a@}} @strong{--a} @code{@@t@{--a@}} @t{--a} @code{@@sansserif@{--a@}} @sansserif{--a} @code{@@titlefont@{--a@}} @titlefont{--a} @code{@@indicateurl@{--a@}} @indicateurl{--a} @code{@@uref@{--a,--b@}} @uref{--a,--b} @code{@@uref@{--a@}} @uref{--a} @code{@@uref@{,--b@}} @uref{,--b} @code{@@uref@{--a,--b,--c@}} @uref{--a,--b,--c} @code{@@uref@{,--b,--c@}} @uref{,--b,--c} @code{@@uref@{--a,,--c@}} @uref{--a,,--c} @code{@@uref@{,,--c@}} @uref{,,--c} @code{@@url@{--a,--b@}} @url{--a,--b} @code{@@url@{--a,@}} @url{--a,} @code{@@url@{,--b@}} @url{,--b} @code{@@var@{--a@}} @var{--a} @code{@@verb@{:--a:@}} @verb{:--a:} @code{@@verb@{:a < & @@ % " -- b:@}} @verb{:a < & @ % " -- b:} @code{@@w@{@}} @w{} @code{@@H@{a@}} @H{a} @code{@@H@{--a@}} @H{--a} @code{@@dotaccent@{a@}} @dotaccent{a} @code{@@dotaccent@{--a@}} @dotaccent{--a} @code{@@ringaccent@{a@}} @ringaccent{a} @code{@@ringaccent@{--a@}} @ringaccent{--a} @code{@@tieaccent@{a@}} @tieaccent{a} @code{@@tieaccent@{--a@}} @tieaccent{--a} @code{@@u@{a@}} @u{a} @code{@@u@{--a@}} @u{--a} @code{@@ubaraccent@{a@}} @ubaraccent{a} @code{@@ubaraccent@{--a@}} @ubaraccent{--a} @code{@@udotaccent@{a@}} @udotaccent{a} @code{@@udotaccent@{--a@}} @udotaccent{--a} @code{@@v@{a@}} @v{a} @code{@@v@{--a@}} @v{--a} @code{@@,@{c@}} @,{c} @code{@@,@{--c@}} @,{--c} @code{@@footnote@{in footnote@}} @footnote{in footnote} @code{@@footnote@{in footnote2@}} @footnote{in footnote2} @code{@@image@{f--ile@}} @image{f--ile} @code{@@image@{f--ile,l--i@}} @image{f--ile,l--i} @code{@@image@{f--ile,,l--e@}} @image{f--ile,,l--e} @code{@@image@{f--ile,,,alt@}} @image{f--ile,,,alt} @code{@@image@{f--ile,,,,e-d-xt@}} @image{f--ile,,,,e--xt} @code{@@image@{f--ile,aze,az,alt,e--xt@}} @image{f--ile,aze,az,alt,e--xt} @code{@@image@{f-ile,aze,,a--lt@}} @image{f-ile,aze,,a--lt} @code{@@image@{@@file@{f--ile@}@@@@@@.,aze,az,alt,@@file@{file ext@} e--xt@@@}} @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@}} @sp 2 @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} @clickstyle @result After clickstyle @result{} @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} @clickstyle @arrow @quotation A quot---ation @end quotation @quotation Note A Note @end quotation @quotation note A note @end quotation @quotation Caution Caution @end quotation @quotation Important Important @end quotation @quotation Tip a Tip @end quotation @quotation Warning a Warning. @end quotation @quotation something @'e @TeX{} The something @'e @TeX{} is here. @end quotation @quotation @@ at the end of line @ A @@ at the end of the @@quotation line. @end quotation @quotation something, other thing something, other thing @end quotation @quotation Note, the note Note, the note @end quotation @quotation @end quotation @quotation Empty @end quotation @quotation @asis{} @end quotation @quotation @* @end quotation @itemize @item i--temize @end itemize @itemize + @item i--tem + @end itemize @itemize @bullet @item b--ullet @end itemize @itemize @minus @item minu--s @end itemize @itemize @emph @item e--mph item @end itemize @itemize @emph{after emph} @c comment in itemize @item e--mph item @end itemize @itemize @bullet{} a--n itemize line @cindex index entry within itemize @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 6 7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @c comment in multitable @item mu--ltitable item 2 @tab multitable tab 2 @cindex index entry within multitable @item lone mu--ltitable item @end multitable @multitable {truc} {bidule} @item truc @tab bidule @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @display d--isplay @end display @smalldisplay s--malldisplay @end smalldisplay @lisp l--isp @end lisp @smalllisp s--malllisp @end smalllisp @format f--ormat @end format @smallformat s--mallformat @end smallformat @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @deffn cate--gory de--ffn_name ar--guments @ more args @* even more so def--fn @end deffn @deffn fset @var{i} a g @cindex index entry within deffn @deffnx {cmde} truc {} @deffnx Command {log trap} {} @deffnx Command { log trap1} {} @deffnx Command {log trap2 } {} @deffnx cmde @b{id ule} truc @deffnx cmde2 @b{id @samp{i} ule} truc @deffnx @b{id @samp{i} ule} @deffnx @deffnx aaa @deffnx {} {} @deffnx{} @deffnx{} machin @deffnx{} {bidule machin} @deffnx{truc} machin @deffnx{truc} { } @deffnx{truc} followed by a comment @c comment @deffnx{truc} @deffnx{} {} @deffnx {truc} a b c d e @b{f g} {h i} @deffnx {truc} deffnx before end deffn @end deffn @deffn empty deffn @end deffn @deffn empty deffn with deffnx @c comment between deffn and deffnx @deffnx empty deffnx @end deffn @deffn fset @var{i} a g @deffnx {cmde} truc {} @c comment text in def item for second def item @end deffn @defvr c--ategory d--efvr_name d--efvr @end defvr @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... d--eftypefn @end deftypefn @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... d--eftypeop @end deftypeop @deftypevr c--ategory t--ype d--eftypevr_name d--eftypevr @end deftypevr @defcv c--ategory c--lass d--efcv_name d--efcv @end defcv @defop c--ategory c--lass d--efop_name a--rguments... d--efop @end defop @deftp c--ategory d--eftp_name a--ttributes... d--eftp @end deftp @defun d--efun_name a--rguments... d--efun @end defun @defmac d--efmac_name a--rguments... d--efmac @end defmac @defspec d--efspec_name a--rguments... d--efspec @end defspec @defvar d--efvar_name argvar argvar1 d--efvar @end defvar @defopt d--efopt_name d--efopt @end defopt @deftypefun t--ype d--eftypefun_name a--rguments... d--eftypefun @end deftypefun @deftypevar t--ype d--eftypevar_name d--eftypevar @end deftypevar @defivar c--lass d--efivar_name d--efivar @end defivar @deftypeivar c--lass t--ype d--eftypeivar_name d--eftypeivar @end deftypeivar @defmethod c--lass d--efmethod_name a--rguments... d--efmethod @end defmethod @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... d--eftypemethod @end deftypemethod @code{@@xref@{c---hapter@@@@, cross r---ef name@@@@, t---itle@@@@, file n---ame@@@@, ma---nual@@@@@}} @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@}. @code{@@ref@{chapter, cross ref name, title, file name, manual@}} @ref{chapter, cross ref name, title, file name, manual} @code{@@pxref@{chapter, cross ref name, title, file name, manual@}} @pxref{chapter, cross ref name, title, file name, manual} @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} @code{@@ref@{chapter@}} @ref{chapter} @code{@@xref@{chapter@}} @xref{chapter}. @code{@@pxref@{chapter@}} @pxref{chapter} @code{@@ref@{s--ect@@comma@{@}ion@}} @ref{s--ect@comma{}ion} @code{@@ref@{s--ect@@comma@{@}ion, a @@comma@{@} in cross ref, a comma@@comma@{@} in title, a comma@@comma@{@} in file, a @@comma@{@} in manual name @}} @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } @code{@@ref@{chapter,cross ref name@}} @ref{chapter,cross ref name} @code{@@ref@{chapter,,title@}} @ref{chapter,,title} @code{@@ref@{chapter,,,file name@}} @ref{chapter,,,file name} @code{@@ref@{chapter,,,,manual@}} @ref{chapter,,,,manual} @code{@@ref@{chapter,cross ref name,title,@}} @ref{chapter,cross ref name,title,} @code{@@ref@{chapter,cross ref name,,file name@}} @ref{chapter,cross ref name,,file name} @code{@@ref@{chapter,cross ref name,,,manual@}} @ref{chapter,cross ref name,,,manual} @code{@@ref@{chapter,cross ref name,title,file name@}} @ref{chapter,cross ref name,title,file name} @code{@@ref@{chapter,cross ref name,title,,manual@}} @ref{chapter,cross ref name,title,,manual} @code{@@ref@{chapter,cross ref name,title, file name, manual@}} @ref{chapter,cross ref name,title, file name, manual} @code{@@ref@{chapter,,title,file name@}} @ref{chapter,,title,file name} @code{@@ref@{chapter,,title,,manual@}} @ref{chapter,,title,,manual} @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} @code{@@ref@{chapter,,,file name,manual@}} @ref{chapter,,,file name,manual} @code{@@ref@{(pman)anode,cross ref name@}} @ref{(pman)anode,cross ref name} @code{@@ref@{(pman)anode,,title@}} @ref{(pman)anode,,title} @code{@@ref@{(pman)anode,,,file name@}} @ref{(pman)anode,,,file name} @code{@@ref@{(pman)anode,,,,manual@}} @ref{(pman)anode,,,,manual} @code{@@ref@{(pman)anode,cross ref name,title,@}} @ref{(pman)anode,cross ref name,title,} @code{@@ref@{(pman)anode,cross ref name,,file name@}} @ref{(pman)anode,cross ref name,,file name} @code{@@ref@{(pman)anode,cross ref name,,,manual@}} @ref{(pman)anode,cross ref name,,,manual} @code{@@ref@{(pman)anode,cross ref name,title,file name@}} @ref{(pman)anode,cross ref name,title,file name} @code{@@ref@{(pman)anode,cross ref name,title,,manual@}} @ref{(pman)anode,cross ref name,title,,manual} @code{@@ref@{(pman)anode,cross ref name,title, file name, manual@}} @ref{(pman)anode,cross ref name,title, file name, manual} @code{@@ref@{(pman)anode,,title,file name@}} @ref{(pman)anode,,title,file name} @code{@@ref@{(pman)anode,,title,,manual@}} @ref{(pman)anode,,title,,manual} @code{@@ref@{(pman)anode,,title, file name, manual@}} @ref{(pman)anode,,title, file name, manual} @code{@@ref@{(pman)anode,,,file name,manual@}} @ref{(pman)anode,,,file name,manual} @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} @code{@@inforef@{chapter@}} @inforef{chapter} @code{@@inforef@{chapter, cross ref name@}} @inforef{chapter, cross ref name} @code{@@inforef@{chapter,,file name@}} @inforef{chapter,,file name} @code{@@inforef@{node, cross ref name, file name@}} @inforef{node, cross ref name, file name} @code{@@inforef@{node@}} @inforef{node} @code{@@inforef@{node, cross ref name@}} @inforef{node, cross ref name} @code{@@inforef@{node,,file name@}} @inforef{node,,file name} @code{@@inforef@{chapter, cross ref name, file name, spurious arg@}} @inforef{chapter, cross ref name, file name, spurious arg} @code{@@inforef@{s--ect@@comma@{@}ion, a @@comma@{@} in cross ref, a comma@@comma@{@} in file@}} @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} @table @bullet @c comment in table @item a l--ine @end table @vtable @asis @item a @c comment between item and itemx @itemx b l--ine @end vtable @ftable @minus @item a @cindex index entry between item and itemx @itemx b l--ine @end ftable @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @verbatiminclude simplest.texi @verbatim in verbatim '' @end verbatim @html html '' @end html @majorheading majorheading @chapheading chapheading @heading heading @subheading subheading @subsubheading subsubheading @c makeinfo cannot handle that @c invalid texinfo In example. @example < > " & ' ` ``simple-double--three---four----''@* code: @code{``simple-double--three---four----''} @* asis: @asis{``simple-double--three---four----''} @* strong: @strong{``simple-double--three---four----''} @* kbd: @kbd{``simple-double--three---four----''} @* `@w{}`simple-double-@w{}-three---four----'@w{}'@* @cindex --option @cindex `` @findex `` @findex --foption @@"u @"u @@"@{U@} @"{U} @@~n @~n @@^a @^a @@'e @'e @@=o @=o @@`i @`i @@'@{e@} @'{e} @@'@{@@dotless@{i@}@} @'{@dotless{i}} @@dotless@{i@} @dotless{i} @@dotless@{j@} @dotless{j} @@`@{@@=E@} @`{@=E} @@l@{@} @l{} @@,@{@@'C@} @,{@'C} @@,c @,c @@,c@@"u @,c@"u @* @@* @* @@ followed by a space @ @@ followed by a tab @ @@ followed by a new line @ @code{@@-} @- @code{@@|} @| @code{@@:} @: @code{@@!} @! @code{@@?} @? @code{@@.} @. @code{@@@@} @@ @code{@@@}} @} @code{@@@{} @{ @code{@@/} @/ foo vs.@: bar. colon :@:And something else. semi colon ;@:. And ? ?@:. Now ! !@:@@ but , ,@: @@TeX @TeX{} @@LaTeX @LaTeX{} @@bullet @bullet{} @@copyright @copyright{} @@dots @dots{} @@enddots @enddots{} @@equiv @equiv{} @@error @error{} @@expansion @expansion{} @@minus @minus{} @@point @point{} @@print @print{} @@result @result{} @@today @today{} @@aa @aa{} @@AA @AA{} @@ae @ae{} @@oe @oe{} @@AE @AE{} @@OE @OE{} @@o @o{} @@O @O{} @@ss @ss{} @@l @l{} @@L @L{} @@exclamdown @exclamdown{} @@questiondown @questiondown{} @@pounds @pounds{} @@registeredsymbol @registeredsymbol{} @@ordf @ordf{} @@ordm @ordm{} @@comma @comma{} @@quotedblleft @quotedblleft{} @@quotedblright @quotedblright{} @@quoteleft @quoteleft{} @@quoteright @quoteright{} @@quotedblbase @quotedblbase{} @@quotesinglbase @quotesinglbase{} @@guillemetleft @guillemetleft{} @@guillemetright @guillemetright{} @@guillemotleft @guillemotleft{} @@guillemotright @guillemotright{} @@guilsinglleft @guilsinglleft{} @@guilsinglright @guilsinglright{} @@textdegree @textdegree{} @@euro @euro{} @@arrow @arrow{} @@leq @leq{} @@geq @geq{} @code{@@acronym@{--a,an accronym@}} @acronym{--a,an accronym} @code{@@acronym@{--a@}} @acronym{--a} @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude Autonome @}} @abbr{@'E--. @comma{}A., @'Etude Autonome } @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} @code{@@asis@{--a@}} @asis{--a} @code{@@b@{--a@}} @b{--a} @code{@@cite@{--a@}} @cite{--a} @code{@@code@{--a@}} @code{--a} @code{@@command@{--a@}} @command{--a} @code{@@ctrl@{--a@}} @ctrl{--a} @code{@@dfn@{--a@}} @dfn{--a} @code{@@dmn@{--a@}} @dmn{--a} @code{@@email@{--a,--b@}} @email{--a,--b} @code{@@email@{,--b@}} @email{,--b} @code{@@email@{--a@}} @email{--a} @code{@@emph@{--a@}} @emph{--a} @code{@@env@{--a@}} @env{--a} @code{@@file@{--a@}} @file{--a} @code{@@i@{--a@}} @i{--a} @code{@@kbd@{--a@}} @kbd{--a} @code{@@key@{--a@}} @key{--a} @code{@@math@{--a @{\frac@{1@}@{2@}@} @@minus@{@}@}} @math{--a {\frac{1}{2}} @minus{}} @code{@@option@{--a@}} @option{--a} @code{@@r@{--a@}} @r{--a} @code{@@samp@{--a@}} @samp{--a} @code{@@sc@{--a@}} @sc{--a} @code{@@strong@{--a@}} @strong{--a} @code{@@t@{--a@}} @t{--a} @code{@@sansserif@{--a@}} @sansserif{--a} @code{@@titlefont@{--a@}} @titlefont{--a} @code{@@indicateurl@{--a@}} @indicateurl{--a} @code{@@uref@{--a,--b@}} @uref{--a,--b} @code{@@uref@{--a@}} @uref{--a} @code{@@uref@{,--b@}} @uref{,--b} @code{@@uref@{--a,--b,--c@}} @uref{--a,--b,--c} @code{@@uref@{,--b,--c@}} @uref{,--b,--c} @code{@@uref@{--a,,--c@}} @uref{--a,,--c} @code{@@uref@{,,--c@}} @uref{,,--c} @code{@@url@{--a,--b@}} @url{--a,--b} @code{@@url@{--a,@}} @url{--a,} @code{@@url@{,--b@}} @url{,--b} @code{@@var@{--a@}} @var{--a} @code{@@verb@{:--a:@}} @verb{:--a:} @code{@@verb@{:a < & @@ % " -- b:@}} @verb{:a < & @ % " -- b:} @code{@@w@{@}} @w{} @code{@@H@{a@}} @H{a} @code{@@H@{--a@}} @H{--a} @code{@@dotaccent@{a@}} @dotaccent{a} @code{@@dotaccent@{--a@}} @dotaccent{--a} @code{@@ringaccent@{a@}} @ringaccent{a} @code{@@ringaccent@{--a@}} @ringaccent{--a} @code{@@tieaccent@{a@}} @tieaccent{a} @code{@@tieaccent@{--a@}} @tieaccent{--a} @code{@@u@{a@}} @u{a} @code{@@u@{--a@}} @u{--a} @code{@@ubaraccent@{a@}} @ubaraccent{a} @code{@@ubaraccent@{--a@}} @ubaraccent{--a} @code{@@udotaccent@{a@}} @udotaccent{a} @code{@@udotaccent@{--a@}} @udotaccent{--a} @code{@@v@{a@}} @v{a} @code{@@v@{--a@}} @v{--a} @code{@@,@{c@}} @,{c} @code{@@,@{--c@}} @,{--c} @code{@@footnote@{in footnote@}} @footnote{in footnote} @code{@@footnote@{in footnote2@}} @footnote{in footnote2} @code{@@image@{f--ile@}} @image{f--ile} @code{@@image@{f--ile,l--i@}} @image{f--ile,l--i} @code{@@image@{f--ile,,l--e@}} @image{f--ile,,l--e} @code{@@image@{f--ile,,,alt@}} @image{f--ile,,,alt} @code{@@image@{f--ile,,,,e-d-xt@}} @image{f--ile,,,,e--xt} @code{@@image@{f--ile,aze,az,alt,e--xt@}} @image{f--ile,aze,az,alt,e--xt} @code{@@image@{f-ile,aze,,a--lt@}} @image{f-ile,aze,,a--lt} @code{@@image@{@@file@{f--ile@}@@@@@@.,aze,az,alt,@@file@{file ext@} e--xt@@@}} @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@}} @sp 2 @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} @clickstyle @result After clickstyle @result{} @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} @clickstyle @arrow @quotation A quot---ation @end quotation @quotation Note A Note @end quotation @quotation note A note @end quotation @quotation Caution Caution @end quotation @quotation Important Important @end quotation @quotation Tip a Tip @end quotation @quotation Warning a Warning. @end quotation @quotation something @'e @TeX{} The something @'e @TeX{} is here. @end quotation @quotation @@ at the end of line @ A @@ at the end of the @@quotation line. @end quotation @quotation something, other thing something, other thing @end quotation @quotation Note, the note Note, the note @end quotation @quotation @end quotation @quotation Empty @end quotation @quotation @asis{} @end quotation @quotation @* @end quotation @itemize @item i--temize @end itemize @itemize + @item i--tem + @end itemize @itemize @bullet @item b--ullet @end itemize @itemize @minus @item minu--s @end itemize @itemize @emph @item e--mph item @end itemize @itemize @emph{after emph} @c comment in itemize @item e--mph item @end itemize @itemize @bullet{} a--n itemize line @cindex index entry within itemize @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 6 7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @c comment in multitable @item mu--ltitable item 2 @tab multitable tab 2 @cindex index entry within multitable @item lone mu--ltitable item @end multitable @multitable {truc} {bidule} @item truc @tab bidule @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @display d--isplay @end display @smalldisplay s--malldisplay @end smalldisplay @lisp l--isp @end lisp @smalllisp s--malllisp @end smalllisp @format f--ormat @end format @smallformat s--mallformat @end smallformat @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @deffn cate--gory de--ffn_name ar--guments @ more args @* even more so def--fn @end deffn @deffn fset @var{i} a g @cindex index entry within deffn @deffnx {cmde} truc {} @deffnx Command {log trap} {} @deffnx Command { log trap1} {} @deffnx Command {log trap2 } {} @deffnx cmde @b{id ule} truc @deffnx cmde2 @b{id @samp{i} ule} truc @deffnx @b{id @samp{i} ule} @deffnx @deffnx aaa @deffnx {} {} @deffnx{} @deffnx{} machin @deffnx{} {bidule machin} @deffnx{truc} machin @deffnx{truc} { } @deffnx{truc} followed by a comment @c comment @deffnx{truc} @deffnx{} {} @deffnx {truc} a b c d e @b{f g} {h i} @deffnx {truc} deffnx before end deffn @end deffn @deffn empty deffn @end deffn @deffn empty deffn with deffnx @c comment between deffn and deffnx @deffnx empty deffnx @end deffn @deffn fset @var{i} a g @deffnx {cmde} truc {} @c comment text in def item for second def item @end deffn @defvr c--ategory d--efvr_name d--efvr @end defvr @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... d--eftypefn @end deftypefn @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... d--eftypeop @end deftypeop @deftypevr c--ategory t--ype d--eftypevr_name d--eftypevr @end deftypevr @defcv c--ategory c--lass d--efcv_name d--efcv @end defcv @defop c--ategory c--lass d--efop_name a--rguments... d--efop @end defop @deftp c--ategory d--eftp_name a--ttributes... d--eftp @end deftp @defun d--efun_name a--rguments... d--efun @end defun @defmac d--efmac_name a--rguments... d--efmac @end defmac @defspec d--efspec_name a--rguments... d--efspec @end defspec @defvar d--efvar_name argvar argvar1 d--efvar @end defvar @defopt d--efopt_name d--efopt @end defopt @deftypefun t--ype d--eftypefun_name a--rguments... d--eftypefun @end deftypefun @deftypevar t--ype d--eftypevar_name d--eftypevar @end deftypevar @defivar c--lass d--efivar_name d--efivar @end defivar @deftypeivar c--lass t--ype d--eftypeivar_name d--eftypeivar @end deftypeivar @defmethod c--lass d--efmethod_name a--rguments... d--efmethod @end defmethod @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... d--eftypemethod @end deftypemethod @code{@@xref@{c---hapter@@@@, cross r---ef name@@@@, t---itle@@@@, file n---ame@@@@, ma---nual@@@@@}} @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@}. @code{@@ref@{chapter, cross ref name, title, file name, manual@}} @ref{chapter, cross ref name, title, file name, manual} @code{@@pxref@{chapter, cross ref name, title, file name, manual@}} @pxref{chapter, cross ref name, title, file name, manual} @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} @code{@@ref@{chapter@}} @ref{chapter} @code{@@xref@{chapter@}} @xref{chapter}. @code{@@pxref@{chapter@}} @pxref{chapter} @code{@@ref@{s--ect@@comma@{@}ion@}} @ref{s--ect@comma{}ion} @code{@@ref@{s--ect@@comma@{@}ion, a @@comma@{@} in cross ref, a comma@@comma@{@} in title, a comma@@comma@{@} in file, a @@comma@{@} in manual name @}} @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } @code{@@ref@{chapter,cross ref name@}} @ref{chapter,cross ref name} @code{@@ref@{chapter,,title@}} @ref{chapter,,title} @code{@@ref@{chapter,,,file name@}} @ref{chapter,,,file name} @code{@@ref@{chapter,,,,manual@}} @ref{chapter,,,,manual} @code{@@ref@{chapter,cross ref name,title,@}} @ref{chapter,cross ref name,title,} @code{@@ref@{chapter,cross ref name,,file name@}} @ref{chapter,cross ref name,,file name} @code{@@ref@{chapter,cross ref name,,,manual@}} @ref{chapter,cross ref name,,,manual} @code{@@ref@{chapter,cross ref name,title,file name@}} @ref{chapter,cross ref name,title,file name} @code{@@ref@{chapter,cross ref name,title,,manual@}} @ref{chapter,cross ref name,title,,manual} @code{@@ref@{chapter,cross ref name,title, file name, manual@}} @ref{chapter,cross ref name,title, file name, manual} @code{@@ref@{chapter,,title,file name@}} @ref{chapter,,title,file name} @code{@@ref@{chapter,,title,,manual@}} @ref{chapter,,title,,manual} @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} @code{@@ref@{chapter,,,file name,manual@}} @ref{chapter,,,file name,manual} @code{@@ref@{(pman)anode,cross ref name@}} @ref{(pman)anode,cross ref name} @code{@@ref@{(pman)anode,,title@}} @ref{(pman)anode,,title} @code{@@ref@{(pman)anode,,,file name@}} @ref{(pman)anode,,,file name} @code{@@ref@{(pman)anode,,,,manual@}} @ref{(pman)anode,,,,manual} @code{@@ref@{(pman)anode,cross ref name,title,@}} @ref{(pman)anode,cross ref name,title,} @code{@@ref@{(pman)anode,cross ref name,,file name@}} @ref{(pman)anode,cross ref name,,file name} @code{@@ref@{(pman)anode,cross ref name,,,manual@}} @ref{(pman)anode,cross ref name,,,manual} @code{@@ref@{(pman)anode,cross ref name,title,file name@}} @ref{(pman)anode,cross ref name,title,file name} @code{@@ref@{(pman)anode,cross ref name,title,,manual@}} @ref{(pman)anode,cross ref name,title,,manual} @code{@@ref@{(pman)anode,cross ref name,title, file name, manual@}} @ref{(pman)anode,cross ref name,title, file name, manual} @code{@@ref@{(pman)anode,,title,file name@}} @ref{(pman)anode,,title,file name} @code{@@ref@{(pman)anode,,title,,manual@}} @ref{(pman)anode,,title,,manual} @code{@@ref@{(pman)anode,,title, file name, manual@}} @ref{(pman)anode,,title, file name, manual} @code{@@ref@{(pman)anode,,,file name,manual@}} @ref{(pman)anode,,,file name,manual} @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} @code{@@inforef@{chapter@}} @inforef{chapter} @code{@@inforef@{chapter, cross ref name@}} @inforef{chapter, cross ref name} @code{@@inforef@{chapter,,file name@}} @inforef{chapter,,file name} @code{@@inforef@{node, cross ref name, file name@}} @inforef{node, cross ref name, file name} @code{@@inforef@{node@}} @inforef{node} @code{@@inforef@{node, cross ref name@}} @inforef{node, cross ref name} @code{@@inforef@{node,,file name@}} @inforef{node,,file name} @code{@@inforef@{chapter, cross ref name, file name, spurious arg@}} @inforef{chapter, cross ref name, file name, spurious arg} @code{@@inforef@{s--ect@@comma@{@}ion, a @@comma@{@} in cross ref, a comma@@comma@{@} in file@}} @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} @table @bullet @c comment in table @item a l--ine @end table @vtable @asis @item a @c comment between item and itemx @itemx b l--ine @end vtable @ftable @minus @item a @cindex index entry between item and itemx @itemx b l--ine @end ftable @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @verbatiminclude simplest.texi @verbatim in verbatim '' @end verbatim @html html '' @end html @majorheading majorheading @chapheading chapheading @heading heading @subheading subheading @subsubheading subsubheading @c makeinfo cannot handle that @c invalid texinfo @end example @cindex t--ruc @cindex T--ruc @cindex . @cindex ? @cindex a @findex t--ruc @findex T--ruc @findex . @findex ? @findex a cp @printindex cp fn @printindex fn vr @printindex vr ky @printindex ky pg @printindex pg tp @printindex tp @node chapter @chapter chapter @footnote{in footnote} @format @menu * s--ect@comma{}ion:: s--ect@comma{}ion Menu comment ``simple-double--three---four----''@* @end menu @end format @node s--ect@comma{}ion @section A section @menu * subsection:: @end menu @node subsection @subsection subsection @menu * subsubsection ``simple-double--three---four----'':: @end menu @anchor{anchor} @node subsubsection ``simple-double--three---four----'' @subsubsection subsubsection ``simple-double--three---four----'' @node chapter2 @centerchap chapter 2 @printindex cp @printindex fn @contents @shortcontents @bye texi2html-1.82/test/formatting/res/texi_center/0000755000175000017500000000000011264347123023466 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_center/center.20000644000175000017500000000000011264347123025017 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_center/center.passfirst0000644000175000017500000000553511264347123026716 0ustar flichtenheldflichtenheldcenter.texi(,2) center.texi(,3) @setfilename center.info center.texi(,4) center.texi(,5) @node Top center.texi(,6) @top Test @@center center.texi(,7) center.texi(,8) A center @center Centered line center.texi(,9) And a center after empty line center.texi(,10) center.texi(,11) @center centered line after empty line center.texi(,12) center.texi(,13) And a center at end of line @center center.texi(,14) And an empty center @center center.texi(,15) center.texi(,16) @center @ref{Top} center.texi(,17) center.texi(,18) @center @ref{Top, ,title center.texi(,19) very long} center.texi(,20) center.texi(,21) @center Centered text with a footnote@footnote{This footnote center.texi(,22) shows an important feature of the centered text. center.texi(,23) center.texi(,24) @example center.texi(,25) @table center.texi(,26) @item item center.texi(,27) line center.texi(,28) @end table center.texi(,29) @end example} and text after the footnote. center.texi(,30) center.texi(,31) @table center.texi(,32) @item @center centered text in item center.texi(,33) table line @center centered text in table line center.texi(,34) @center centered line with item @item second item on center line center.texi(,35) @end table center.texi(,36) center.texi(,37) @center unclosed command on center line @code{in code center.texi(,38) Still in code} center.texi(,39) center.texi(,40) @center unclosed command on center line with paragraph @code{in code center.texi(,41) center.texi(,42) Still in code after paragraph} center.texi(,43) center.texi(,44) @center unclosed command on center line with other center @code{in code center.texi(,45) @center still in code on center line}. After code. center.texi(,46) center.texi(,47) @center unclosed command on center line with other center and paragraph @code{in code center.texi(,48) center.texi(,49) @center still in code on center line}. After code. center.texi(,50) center.texi(,51) @samp{begin samp @center center and end samp} after end of samp center.texi(,52) center.texi(,53) Empty double center: center.texi(,54) @center @center center.texi(,55) center.texi(,56) @center after first center @center after second center center.texi(,57) center.texi(,58) @center @samp{something @center end of samp} center.texi(,59) center.texi(,60) @center after first center @samp{@center after second center center.texi(,61) center.texi(,62) End of samp} center.texi(,63) center.texi(,64) @unnumbered Heading center.texi(,65) center.texi(,66) @multitable {AAA} {BBB} center.texi(,67) @item truc @tab bidule center.texi(,68) @center @item ctruc @tab cbidule center.texi(,69) @center @item cstruc center.texi(,70) @end multitable center.texi(,71) center.texi(,72) @center before the table @table center.texi(,73) @item item in center center.texi(,74) Line in center center.texi(,75) @item second item center.texi(,76) @end table center.texi(,77) center.texi(,78) @bye texi2html-1.82/test/formatting/res/texi_center/center.texi0000644000175000017500000000315011264347123025640 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename center.info @node Top @top Test @@center A center @center Centered line And a center after empty line @center centered line after empty line And a center at end of line @center And an empty center @center @center @ref{Top} @center @ref{Top, ,title very long} @center Centered text with a footnote@footnote{This footnote shows an important feature of the centered text. @example @table @item item line @end table @end example} and text after the footnote. @table @item @center centered text in item table line @center centered text in table line @center centered line with item @item second item on center line @end table @center unclosed command on center line @code{in code Still in code} @center unclosed command on center line with paragraph @code{in code Still in code after paragraph} @center unclosed command on center line with other center @code{in code @center still in code on center line}. After code. @center unclosed command on center line with other center and paragraph @code{in code @center still in code on center line}. After code. @samp{begin samp @center center and end samp} after end of samp Empty double center: @center @center @center after first center @center after second center @center @samp{something @center end of samp} @center after first center @samp{@center after second center End of samp} @unnumbered Heading @multitable {AAA} {BBB} @item truc @tab bidule @center @item ctruc @tab cbidule @center @item cstruc @end multitable @center before the table @table @item item in center Line in center @item second item @end table @bye texi2html-1.82/test/formatting/res/texi_center/center.passtexi0000644000175000017500000000553511264347123026540 0ustar flichtenheldflichtenheldcenter.texi(,2) center.texi(,3) @setfilename center.info center.texi(,4) center.texi(,5) @node Top center.texi(,6) @top Test @@center center.texi(,7) center.texi(,8) A center @center Centered line center.texi(,9) And a center after empty line center.texi(,10) center.texi(,11) @center centered line after empty line center.texi(,12) center.texi(,13) And a center at end of line @center center.texi(,14) And an empty center @center center.texi(,15) center.texi(,16) @center @ref{Top} center.texi(,17) center.texi(,18) @center @ref{Top, ,title center.texi(,19) very long} center.texi(,20) center.texi(,21) @center Centered text with a footnote@footnote{This footnote center.texi(,22) shows an important feature of the centered text. center.texi(,23) center.texi(,24) @example center.texi(,25) @table center.texi(,26) @item item center.texi(,27) line center.texi(,28) @end table center.texi(,29) @end example} and text after the footnote. center.texi(,30) center.texi(,31) @table center.texi(,32) @item @center centered text in item center.texi(,33) table line @center centered text in table line center.texi(,34) @center centered line with item @item second item on center line center.texi(,35) @end table center.texi(,36) center.texi(,37) @center unclosed command on center line @code{in code center.texi(,38) Still in code} center.texi(,39) center.texi(,40) @center unclosed command on center line with paragraph @code{in code center.texi(,41) center.texi(,42) Still in code after paragraph} center.texi(,43) center.texi(,44) @center unclosed command on center line with other center @code{in code center.texi(,45) @center still in code on center line}. After code. center.texi(,46) center.texi(,47) @center unclosed command on center line with other center and paragraph @code{in code center.texi(,48) center.texi(,49) @center still in code on center line}. After code. center.texi(,50) center.texi(,51) @samp{begin samp @center center and end samp} after end of samp center.texi(,52) center.texi(,53) Empty double center: center.texi(,54) @center @center center.texi(,55) center.texi(,56) @center after first center @center after second center center.texi(,57) center.texi(,58) @center @samp{something @center end of samp} center.texi(,59) center.texi(,60) @center after first center @samp{@center after second center center.texi(,61) center.texi(,62) End of samp} center.texi(,63) center.texi(,64) @unnumbered Heading center.texi(,65) center.texi(,66) @multitable {AAA} {BBB} center.texi(,67) @item truc @tab bidule center.texi(,68) @center @item ctruc @tab cbidule center.texi(,69) @center @item cstruc center.texi(,70) @end multitable center.texi(,71) center.texi(,72) @center before the table @table center.texi(,73) @item item in center center.texi(,74) Line in center center.texi(,75) @item second item center.texi(,76) @end table center.texi(,77) center.texi(,78) @bye texi2html-1.82/test/formatting/res/menus/0000755000175000017500000000000011264347123022304 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/menus/menus.html0000644000175000017500000004576111264347123024336 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Top

    Text.

    Some text.

    After menu


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. chapter

    (1)

     

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 A section


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.1 subsection “simple-double–three—four—-”


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.1.1 subsubsection


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. chapter 2

     

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.1 section in chapter 2


    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)

    in footnote


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    Short Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/menus/menus.20000644000175000017500000000000011264347123023504 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/indicateurl_paragraph/0000755000175000017500000000000011264347123025505 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/indicateurl_paragraph/indicateurl_paragraph.20000644000175000017500000000005511264347123032120 0ustar flichtenheldflichtenheld*** '}' without opening '{' before: (l. 17) texi2html-1.82/test/formatting/res/indicateurl_paragraph/indicateurl_paragraph.html0000644000175000017500000000405611264347123032730 0ustar flichtenheldflichtenheld Untitled Document

    Top

    Test a indicateurl with end of line, and including a blank line. In texi2html indicateurl is a simple_style, meaning that it should not be cut by paragraph.

    <http://begin continue on other line>

    <http://begin2

    cut by blank line


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/index_in_item_line_vtable/0000755000175000017500000000000011264347123026334 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/index_in_item_line_vtable/index_in_item_line_vtable.html0000644000175000017500000000425511264347123034407 0ustar flichtenheldflichtenheld Untitled Document

    test index entries in @item @table

    opt

    More text

    nopt

    Even more


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/index_in_item_line_vtable/index_in_item_line_vtable.20000644000175000017500000000000011264347123033564 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_simplest/0000755000175000017500000000000011264347123024046 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_simplest/simplest.passtexi0000644000175000017500000000034711264347123027474 0ustar flichtenheldflichtenheldsimplest.texi(,2) simplest.texi(,3) @setfilename simplest.info simplest.texi(,4) simplest.texi(,5) @node Top simplest.texi(,6) simplest.texi(,7) This is a very simple texi manual @ <>. simplest.texi(,8) simplest.texi(,9) @bye texi2html-1.82/test/formatting/res/texi_simplest/simplest.passfirst0000644000175000017500000000034711264347123027652 0ustar flichtenheldflichtenheldsimplest.texi(,2) simplest.texi(,3) @setfilename simplest.info simplest.texi(,4) simplest.texi(,5) @node Top simplest.texi(,6) simplest.texi(,7) This is a very simple texi manual @ <>. simplest.texi(,8) simplest.texi(,9) @bye texi2html-1.82/test/formatting/res/texi_simplest/simplest.texi0000644000175000017500000000016711264347123026605 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename simplest.info @node Top This is a very simple texi manual @ <>. @bye texi2html-1.82/test/formatting/res/texi_simplest/simplest.20000644000175000017500000000000011264347123025757 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_images/0000755000175000017500000000000011264347123023453 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_images/images.passfirst0000644000175000017500000001345411264347123026667 0ustar flichtenheldflichtenheldimages.texi(,2) images.texi(,3) @setfilename images.info images.texi(,4) images.texi(,19) images.texi(,20) @copying images.texi(,21) In copying. images.texi(,22) @image{f--ile}. images.texi(,23) images.texi(,24) Text in copying. images.texi(files_char,25) File with @@-commands and special characters: images.texi(files_char,25) images.texi(files_char,25) @c cannot test a file with newline, since perl says images.texi(files_char,25) @c Unsuccessful stat on filename containing newline at ././../../texi2html.pl line 7375. images.texi(files_char,25) @c with a noon reproducible path images.texi(files_char,25) @c @image{f@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :} ,,,,ext@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :}}. images.texi(files_char,25) @image{f@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :} ,,,,ext@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :}}. images.texi(files_char,25) images.texi(files_char,25) And also in alt, and with dimensions: images.texi(files_char,25) images.texi(files_char,25) @c @image{f@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :} ,1in, 1cm, alt @b{@dotless{@^{i}}--le@/.@.} a@*<"%@@@verb{: < & @ % " :} ,ext@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :}}. images.texi(files_char,25) @image{f@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :} ,1in, 1cm, alt @b{@dotless{@^{i}}--le@/.@.} a@*<"%@@@verb{: < & @ % " :} ,ext@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :}}. images.texi(,26) @end copying images.texi(,27) images.texi(,28) @node Top images.texi(,29) @top top images.texi(,30) images.texi(,31) images.texi(,32) Insertcopying (copying,1) In copying. (copying,2) @image{f--ile}. (copying,3) (copying,4) Text in copying. (copying,5) File with @@-commands and special characters: (copying,6) (copying,7) @c cannot test a file with newline, since perl says (copying,8) @c Unsuccessful stat on filename containing newline at ././../../texi2html.pl line 7375. (copying,9) @c with a noon reproducible path (copying,10) @c @image{f@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :} ,,,,ext@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :}}. (copying,11) @image{f@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :} ,,,,ext@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :}}. (copying,12) (copying,13) And also in alt, and with dimensions: (copying,14) (copying,15) @c @image{f@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :} ,1in, 1cm, alt @b{@dotless{@^{i}}--le@/.@.} a@*<"%@@@verb{: < & @ % " :} ,ext@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :}}. (copying,16) @image{f@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :} ,1in, 1cm, alt @b{@dotless{@^{i}}--le@/.@.} a@*<"%@@@verb{: < & @ % " :} ,ext@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :}}. images.texi(,34) images.texi(,35) In normal context images.texi(,36) @image{f--ile}. images.texi(,37) images.texi(,38) On the same line, @code{f---ile}, @code{gr--a} extension @image{f---ile,,,,gr--a}. images.texi(,39) images.texi(,40) Image sparated from text: images.texi(,41) images.texi(,42) @image{f--ile} images.texi(,43) images.texi(,44) And the same, followed by a dot: images.texi(,45) images.texi(,46) @image{f--ile}. images.texi(,47) images.texi(,48) In example: images.texi(,49) images.texi(,50) @example images.texi(,51) Text. @code{f---ile} with jpeg extension. images.texi(,52) @image{f---ile,,,,jpeg}. images.texi(,53) images.texi(,54) @image{f--ile}. images.texi(,55) images.texi(,56) images.texi(files_char,57) File with @@-commands and special characters: images.texi(files_char,57) images.texi(files_char,57) @c cannot test a file with newline, since perl says images.texi(files_char,57) @c Unsuccessful stat on filename containing newline at ././../../texi2html.pl line 7375. images.texi(files_char,57) @c with a noon reproducible path images.texi(files_char,57) @c @image{f@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :} ,,,,ext@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :}}. images.texi(files_char,57) @image{f@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :} ,,,,ext@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :}}. images.texi(files_char,57) images.texi(files_char,57) And also in alt, and with dimensions: images.texi(files_char,57) images.texi(files_char,57) @c @image{f@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :} ,1in, 1cm, alt @b{@dotless{@^{i}}--le@/.@.} a@*<"%@@@verb{: < & @ % " :} ,ext@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :}}. images.texi(files_char,57) @image{f@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :} ,1in, 1cm, alt @b{@dotless{@^{i}}--le@/.@.} a@*<"%@@@verb{: < & @ % " :} ,ext@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :}}. images.texi(,58) @end example images.texi(,59) images.texi(,60) @float images.texi(,61) In float. images.texi(,62) @image{f--ile}. images.texi(,63) images.texi(,64) @image{f--ile}. images.texi(,65) @end float images.texi(,66) images.texi(files_char,67) File with @@-commands and special characters: images.texi(files_char,67) images.texi(files_char,67) @c cannot test a file with newline, since perl says images.texi(files_char,67) @c Unsuccessful stat on filename containing newline at ././../../texi2html.pl line 7375. images.texi(files_char,67) @c with a noon reproducible path images.texi(files_char,67) @c @image{f@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :} ,,,,ext@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :}}. images.texi(files_char,67) @image{f@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :} ,,,,ext@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :}}. images.texi(files_char,67) images.texi(files_char,67) And also in alt, and with dimensions: images.texi(files_char,67) images.texi(files_char,67) @c @image{f@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :} ,1in, 1cm, alt @b{@dotless{@^{i}}--le@/.@.} a@*<"%@@@verb{: < & @ % " :} ,ext@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :}}. images.texi(files_char,67) @image{f@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :} ,1in, 1cm, alt @b{@dotless{@^{i}}--le@/.@.} a@*<"%@@@verb{: < & @ % " :} ,ext@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :}}. images.texi(,68) images.texi(,69) @bye texi2html-1.82/test/formatting/res/texi_images/images.20000644000175000017500000000000011264347123024771 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_images/images.texi0000644000175000017500000000601211264347123025612 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename images.info @copying In copying. @image{f--ile}. Text in copying. File with @@-commands and special characters: @c cannot test a file with newline, since perl says @c Unsuccessful stat on filename containing newline at ././../../texi2html.pl line 7375. @c with a noon reproducible path @c @image{f@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :} ,,,,ext@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :}}. @image{f@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :} ,,,,ext@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :}}. And also in alt, and with dimensions: @c @image{f@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :} ,1in, 1cm, alt @b{@dotless{@^{i}}--le@/.@.} a@*<"%@@@verb{: < & @ % " :} ,ext@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :}}. @image{f@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :} ,1in, 1cm, alt @b{@dotless{@^{i}}--le@/.@.} a@*<"%@@@verb{: < & @ % " :} ,ext@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :}}. @end copying @node Top @top top Insertcopying @insertcopying In normal context @image{f--ile}. On the same line, @code{f---ile}, @code{gr--a} extension @image{f---ile,,,,gr--a}. Image sparated from text: @image{f--ile} And the same, followed by a dot: @image{f--ile}. In example: @example Text. @code{f---ile} with jpeg extension. @image{f---ile,,,,jpeg}. @image{f--ile}. File with @@-commands and special characters: @c cannot test a file with newline, since perl says @c Unsuccessful stat on filename containing newline at ././../../texi2html.pl line 7375. @c with a noon reproducible path @c @image{f@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :} ,,,,ext@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :}}. @image{f@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :} ,,,,ext@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :}}. And also in alt, and with dimensions: @c @image{f@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :} ,1in, 1cm, alt @b{@dotless{@^{i}}--le@/.@.} a@*<"%@@@verb{: < & @ % " :} ,ext@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :}}. @image{f@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :} ,1in, 1cm, alt @b{@dotless{@^{i}}--le@/.@.} a@*<"%@@@verb{: < & @ % " :} ,ext@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :}}. @end example @float In float. @image{f--ile}. @image{f--ile}. @end float File with @@-commands and special characters: @c cannot test a file with newline, since perl says @c Unsuccessful stat on filename containing newline at ././../../texi2html.pl line 7375. @c with a noon reproducible path @c @image{f@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :} ,,,,ext@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :}}. @image{f@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :} ,,,,ext@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :}}. And also in alt, and with dimensions: @c @image{f@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :} ,1in, 1cm, alt @b{@dotless{@^{i}}--le@/.@.} a@*<"%@@@verb{: < & @ % " :} ,ext@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :}}. @image{f@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :} ,1in, 1cm, alt @b{@dotless{@^{i}}--le@/.@.} a@*<"%@@@verb{: < & @ % " :} ,ext@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :}}. @bye texi2html-1.82/test/formatting/res/texi_images/images.passtexi0000644000175000017500000001142611264347123026506 0ustar flichtenheldflichtenheldimages.texi(,2) images.texi(,3) @setfilename images.info images.texi(,4) images.texi(,19) images.texi(,20) @copying images.texi(,21) In copying. images.texi(,22) @image{f--ile}. images.texi(,23) images.texi(,24) Text in copying. images.texi(files_char,25) File with @@-commands and special characters: images.texi(files_char,25) images.texi(files_char,25) @c cannot test a file with newline, since perl says images.texi(files_char,25) @c Unsuccessful stat on filename containing newline at ././../../texi2html.pl line 7375. images.texi(files_char,25) @c with a noon reproducible path images.texi(files_char,25) @c @image{f@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :} ,,,,ext@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :}}. images.texi(files_char,25) @image{f@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :} ,,,,ext@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :}}. images.texi(files_char,25) images.texi(files_char,25) And also in alt, and with dimensions: images.texi(files_char,25) images.texi(files_char,25) @c @image{f@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :} ,1in, 1cm, alt @b{@dotless{@^{i}}--le@/.@.} a@*<"%@@@verb{: < & @ % " :} ,ext@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :}}. images.texi(files_char,25) @image{f@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :} ,1in, 1cm, alt @b{@dotless{@^{i}}--le@/.@.} a@*<"%@@@verb{: < & @ % " :} ,ext@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :}}. images.texi(,26) @end copying images.texi(,27) images.texi(,28) @node Top images.texi(,29) @top top images.texi(,30) images.texi(,31) images.texi(,32) Insertcopying images.texi(,33) @insertcopying images.texi(,34) images.texi(,35) In normal context images.texi(,36) @image{f--ile}. images.texi(,37) images.texi(,38) On the same line, @code{f---ile}, @code{gr--a} extension @image{f---ile,,,,gr--a}. images.texi(,39) images.texi(,40) Image sparated from text: images.texi(,41) images.texi(,42) @image{f--ile} images.texi(,43) images.texi(,44) And the same, followed by a dot: images.texi(,45) images.texi(,46) @image{f--ile}. images.texi(,47) images.texi(,48) In example: images.texi(,49) images.texi(,50) @example images.texi(,51) Text. @code{f---ile} with jpeg extension. images.texi(,52) @image{f---ile,,,,jpeg}. images.texi(,53) images.texi(,54) @image{f--ile}. images.texi(,55) images.texi(,56) images.texi(files_char,57) File with @@-commands and special characters: images.texi(files_char,57) images.texi(files_char,57) @c cannot test a file with newline, since perl says images.texi(files_char,57) @c Unsuccessful stat on filename containing newline at ././../../texi2html.pl line 7375. images.texi(files_char,57) @c with a noon reproducible path images.texi(files_char,57) @c @image{f@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :} ,,,,ext@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :}}. images.texi(files_char,57) @image{f@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :} ,,,,ext@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :}}. images.texi(files_char,57) images.texi(files_char,57) And also in alt, and with dimensions: images.texi(files_char,57) images.texi(files_char,57) @c @image{f@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :} ,1in, 1cm, alt @b{@dotless{@^{i}}--le@/.@.} a@*<"%@@@verb{: < & @ % " :} ,ext@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :}}. images.texi(files_char,57) @image{f@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :} ,1in, 1cm, alt @b{@dotless{@^{i}}--le@/.@.} a@*<"%@@@verb{: < & @ % " :} ,ext@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :}}. images.texi(,58) @end example images.texi(,59) images.texi(,60) @float images.texi(,61) In float. images.texi(,62) @image{f--ile}. images.texi(,63) images.texi(,64) @image{f--ile}. images.texi(,65) @end float images.texi(,66) images.texi(files_char,67) File with @@-commands and special characters: images.texi(files_char,67) images.texi(files_char,67) @c cannot test a file with newline, since perl says images.texi(files_char,67) @c Unsuccessful stat on filename containing newline at ././../../texi2html.pl line 7375. images.texi(files_char,67) @c with a noon reproducible path images.texi(files_char,67) @c @image{f@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :} ,,,,ext@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :}}. images.texi(files_char,67) @image{f@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :} ,,,,ext@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :}}. images.texi(files_char,67) images.texi(files_char,67) And also in alt, and with dimensions: images.texi(files_char,67) images.texi(files_char,67) @c @image{f@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :} ,1in, 1cm, alt @b{@dotless{@^{i}}--le@/.@.} a@*<"%@@@verb{: < & @ % " :} ,ext@@i--le@/.@. a@*<"%@@@verb{: < & @ % " :}}. images.texi(files_char,67) @image{f@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :} ,1in, 1cm, alt @b{@dotless{@^{i}}--le@/.@.} a@*<"%@@@verb{: < & @ % " :} ,ext@@i--le@/.@. a@@<"%@@@verb{: < & @ % " :}}. images.texi(,68) images.texi(,69) @bye texi2html-1.82/test/formatting/res/formatting_weird_quotes/0000755000175000017500000000000011264347123026121 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/formatting_weird_quotes/formatting.20000644000175000017500000002243411264347123030363 0ustar flichtenheldflichtenheld** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} (l. 38 in @mymacro) ** Unknown command `@#' (left as is) (l. 38 in @mymacro) *** no file argument for @image (l. 38 in @mymacro) *** no file argument for @image (l. 38 in @mymacro) *** no file argument for @image (l. 38 in @mymacro) *** '}' without opening '{' before: (l. 38 in @mymacro) *** '}' without opening '{' before: (l. 38 in @mymacro) *** '{' without macro. Before: (l. 38 in @mymacro) *** '{' without macro. Before: and after (l. 38 in @mymacro) *** Undefined node `node' in @ref (l. 38 in @mymacro) *** Undefined node `' in @ref (l. 38 in @mymacro) *** Undefined node `' in @ref (l. 38 in @mymacro) *** Undefined node `node' in @ref (l. 38 in @mymacro) *** Undefined node `node' in @ref (l. 38 in @mymacro) *** Undefined node `node' in @ref (l. 38 in @mymacro) *** Undefined node `' in @ref (l. 38 in @mymacro) *** First argument to @inforef may not be empty (l. 38 in @mymacro) *** First argument to @inforef may not be empty (l. 38 in @mymacro) *** First argument to @inforef may not be empty (l. 38 in @mymacro) *** First argument to @inforef may not be empty (l. 38 in @mymacro) ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} (l. 42 in @mymacro) ** Unknown command `@#' (left as is) (l. 42 in @mymacro) *** no file argument for @image (l. 42 in @mymacro) *** no file argument for @image (l. 42 in @mymacro) *** no file argument for @image (l. 42 in @mymacro) *** '}' without opening '{' before: (l. 42 in @mymacro) *** '}' without opening '{' before: (l. 42 in @mymacro) *** '{' without macro. Before: (l. 42 in @mymacro) *** '{' without macro. Before: and after (l. 42 in @mymacro) *** Undefined node `node' in @ref (l. 42 in @mymacro) *** Undefined node `' in @ref (l. 42 in @mymacro) *** Undefined node `' in @ref (l. 42 in @mymacro) *** Undefined node `node' in @ref (l. 42 in @mymacro) *** Undefined node `node' in @ref (l. 42 in @mymacro) *** Undefined node `node' in @ref (l. 42 in @mymacro) *** Undefined node `' in @ref (l. 42 in @mymacro) *** First argument to @inforef may not be empty (l. 42 in @mymacro) *** First argument to @inforef may not be empty (l. 42 in @mymacro) *** First argument to @inforef may not be empty (l. 42 in @mymacro) *** First argument to @inforef may not be empty (l. 42 in @mymacro) texi2html-1.82/test/formatting/res/formatting_weird_quotes/formatting.html0000644000175000017500000055003611264347123031172 0ustar flichtenheldflichtenheld title –a
    [Top] [Contents] [Index] [ ? ]

    Insertcopying in normal text

    In copying

    < > " & ’ ‘

    “simple-double–three—four—-”
    code: ``simple-double--three---four----''
    asis: “simple-double–three—four—-”
    strong: “simple-double–three—four—-”
    kbd: ``simple-double--three---four----''

    ‘‘simple-double--three—four—-’’

    @"u ü @"{U} Ü @~n ñ @^a â @’e é @=o ō @‘i ì @’{e} é @’{@dotless{i}} í @dotless{i} i @dotless{j} j @‘{@=E} Ē` @l{} ł @,{@’C} Ć, @,c ç @,c@"u çü

    @*
    @ followed by a space   @ followed by a tab   @ followed by a new line  @- @| @: @! ! @? ? @. . @@ @ @} } @{ { @/

    foo vs. bar. colon :And something else. semi colon ;. And ? ?. Now ! !@ but , ,

    @TeX TeX @LaTeX LaTeX @bullet • @copyright © @dots … @enddots ... @equiv ≡ @error error--> @expansion → @minus - @point ∗ @print -| @result ⇒ @today a sunny day @aa å @AA Å @ae æ @oe œ @AE Æ @OE Œ @o ø @O Ø @ss ß @l ł @L Ł @exclamdown ¡ @questiondown ¿ @pounds £ @registeredsymbol ® @ordf ª @ordm º @comma , @quotedblleft “ @quotedblright ” @quoteleft ‘ @quoteright ’ @quotedblbase „ @quotesinglbase ‚ @guillemetleft « @guillemetright » @guillemotleft « @guillemotright » @guilsinglleft ‹ @guilsinglright › @textdegree ° @euro € @arrow → @leq ≤ @geq ≥

    @acronym{--a,an accronym} –a (an accronym) @acronym{--a} –a @abbr{@'E--. @comma{}A., @'Etude Autonome } É–. ,A. (Étude Autonome) @abbr{@'E--. @comma{}A.} É–. ,A. @asis{--a} –a @b{--a} –a @cite{--a} –a @code{--a} --a @command{--a} --a @ctrl{--a} –a @dfn{--a} –a @dmn{--a} –a @email{--a,--b} –b @email{,--b} –b @email{--a} --a @emph{--a} –a @env{--a} --a @file{--a} @--a'‘ @i{--a} –a @kbd{--a} --a @key{--a} <--a> @math{--a {\frac{1}{2}} @minus{}} –a \frac12 - @option{--a} @--a'‘ @r{--a} –a @samp{--a} @--a'‘ @sc{--a} –A @strong{--a} –a @t{--a} –a @sansserif{--a} –a @titlefont{--a}

    –a

    @indicateurl{--a} <--a> @uref{--a,--b} –b @uref{--a} --a @uref{,--b} –b @uref{--a,--b,--c} –c @uref{,--b,--c} –c @uref{--a,,--c} –c @uref{,,--c} –c @url{--a,--b} –b @url{--a,} --a @url{,--b} –b @var{--a} –a @verb{:--a:} --a @verb{:a < & @ % " -- b:} a < & @ % " -- b @w{} @H{a} a'' @H{--a} –a'' @dotaccent{a} ȧ @dotaccent{--a} –a. @ringaccent{a} å @ringaccent{--a} –a* @tieaccent{a} a[ @tieaccent{--a} –a[ @u{a} ă @u{--a} –a( @ubaraccent{a} a_ @ubaraccent{--a} –a_ @udotaccent{a}@udotaccent{--a} .–a @v{a} a< @v{--a} –a< @,{c} ç @,{--c} –c, @ogonek{a} ą @ogonek{--a} –a; @footnote{in footnote} (1) @footnote{in footnote2} (2)

    @image{f--ile} f--ile @image{f--ile,l--i} f--ile @image{f--ile,,l--e} f--ile @image{f--ile,,,alt} alt @image{f--ile,,,,e-d-xt} f--ile @image{f--ile,aze,az,alt,e--xt} alt @image{f-ile,aze,,a--lt} a–lt @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} alt



    @clicksequence{click @click{} A} click → A After clickstyle ⇒ @clicksequence{click @click{} A} click ⇒ A

    A quot—ation

    Note: A Note

    note: A note

    Caution: Caution

    Important: Important

    Tip: a Tip

    Warning: a Warning.

    something é TeX: The something é TeX is here.

    @ at the end of line A @ at the end of the @quotation line.

    something, other thing: something, other thing

    Note, the note: Note, the note

    Empty:

    :


    :

    A small quot—ation

    Note: A small Note

    something, other thing: something, other thing

    • i–temize
    • + i–tem +
    • b–ullet
    • - minu–s
    • e–mph item
    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
    trucbidule
     
    e--xample  some
       text
    
     
    s--mallexample
    
     
    d–isplay
    
     
    s–malldisplay
    
     
    l--isp
    
     
    s--malllisp
    
     
    f–ormat
    
     
    s–mallformat
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    cate--gory: de--ffn_name ar--guments more args
    even more so

    def–fn

    fset: i a g
    cmde: truc
    Command: log trap
    Command: log trap1
    Command: log trap2
    cmde: id ule truc
    cmde2: id @i'‘ ule truc
    id @i'‘ ule:
    :
    aaa:
    :
    :
    : machin
    : bidule machin
    truc: machin
    truc:
    truc: followed by a comment
    truc:
    :
    truc: a b c d e f g h i
    truc: deffnx before end deffn
    empty: deffn
    empty: deffn with deffnx
    empty: deffnx
    fset: i a g
    cmde: truc

    text in def item for second def item

    c--ategory: d--efvr_name

    d–efvr

    c--ategory: t--ype d--eftypefn_name a--rguments...

    d–eftypefn

    c--ategory on c--lass: t--ype d--eftypeop_name a--rguments...

    d–eftypeop

    c--ategory: t--ype d--eftypevr_name

    d–eftypevr

    c--ategory of c--lass: d--efcv_name

    d–efcv

    c--ategory on c--lass: d--efop_name a--rguments...

    d–efop

    c--ategory: d--eftp_name a--ttributes...

    d–eftp

    Function: d--efun_name a--rguments...

    d–efun

    Macro: d--efmac_name a--rguments...

    d–efmac

    Special Form: d--efspec_name a--rguments...

    d–efspec

    Variable: d--efvar_name argvar argvar1

    d–efvar

    User Option: d--efopt_name

    d–efopt

    Function: t--ype d--eftypefun_name a--rguments...

    d–eftypefun

    Variable: t--ype d--eftypevar_name

    d–eftypevar

    Instance Variable of c--lass: d--efivar_name

    d–efivar

    Instance Variable of c--lass: t--ype d--eftypeivar_name

    d–eftypeivar

    Method on c--lass: d--efmethod_name a--rguments...

    d–efmethod

    Method on c--lass: t--ype d--eftypemethod_name a--rguments...

    d–eftypemethod

    @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} See cross r—ef name@: (file n—ame@)c—hapter@ section ‘t—itle@’ in ma—nual@. @ref{chapter, cross ref name, title, file name, manual} cross ref name: (file name)chapter section ‘title’ in manual @pxref{chapter, cross ref name, title, file name, manual} see cross ref name: (file name)chapter section ‘title’ in manual @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter

    @ref{chapter} chapter @xref{chapter} See section chapter. @pxref{chapter} see section chapter @ref{s--ect@comma{}ion} A section

    @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } a , in cross ref: (a comma, in file)s–ect,ion section ‘a comma, in title’ in a , in manual name

    @ref{chapter,cross ref name} cross ref name @ref{chapter,,title} title @ref{chapter,,,file name} (file name)chapter @ref{chapter,,,,manual} section ‘chapter’ in manual @ref{chapter,cross ref name,title,} title @ref{chapter,cross ref name,,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,,,manual} section ‘chapter’ in manual @ref{chapter,cross ref name,title,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,title,,manual} section ‘title’ in manual @ref{chapter,cross ref name,title, file name, manual} cross ref name: (file name)chapter section ‘title’ in manual @ref{chapter,,title,file name} (file name)chapter @ref{chapter,,title,,manual} section ‘title’ in manual @ref{chapter,,title, file name, manual} (file name)chapter section ‘title’ in manual @ref{chapter,,,file name,manual} (file name)chapter section ‘chapter’ in manual

    @ref{(pman)anode,cross ref name} cross ref name: (pman)anode @ref{(pman)anode,,title} (pman)anode @ref{(pman)anode,,,file name} (file name)anode @ref{(pman)anode,,,,manual} (pman)anode section ‘anode’ in manual @ref{(pman)anode,cross ref name,title,} cross ref name: (pman)anode @ref{(pman)anode,cross ref name,,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,,,manual} cross ref name: (pman)anode section ‘anode’ in manual @ref{(pman)anode,cross ref name,title,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,title,,manual} cross ref name: (pman)anode section ‘title’ in manual @ref{(pman)anode,cross ref name,title, file name, manual} cross ref name: (file name)anode section ‘title’ in manual @ref{(pman)anode,,title,file name} (file name)anode @ref{(pman)anode,,title,,manual} (pman)anode section ‘title’ in manual @ref{(pman)anode,,title, file name, manual} (file name)anode section ‘title’ in manual @ref{(pman)anode,,,file name,manual} (file name)anode section ‘anode’ in manual

    @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter @inforef{chapter} @inforef{chapter, cross ref name} @inforef{chapter,,file name} See (file name)chapter @inforef{node, cross ref name, file name} See cross ref name: (file name)node @inforef{node} @inforef{node, cross ref name} @inforef{node,,file name} See (file name)node @inforef{chapter, cross ref name, file name, spurious arg} See cross ref name: (file name, spurious arg)chapter

    @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} See a , in cross ref: (a comma, in file)s–ect,ion

    • a

    l–ine

    a
    b

    l–ine

    - a
    - b

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    \input texinfo @c -*-texinfo-*-
    
    @setfilename simplest.info
    
    @node Top
    
    This is a very simple texi manual @  <>.
    
    @bye
    
    in verbatim ''
    
    html ''

    majorheading

    chapheading

    heading

    subheading

    subsubheading

    @acronym{--a,an accronym @comma{} @enddots{}} –a (an accronym , ...) @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } É–. ,A. (Étude–, Autonome) @abbr{@'E--. @comma{}A.} É–. ,A.

    @math{--a@minus{} {\frac{1}{2}}} –a- \frac12

    @image{f-ile,,,alt@verb{:jk _" %}} altjk _" %@ @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} jk _" %@ in b " @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} altjk _" %@

    Somehow invalid use of @,:
    @, ,
    @,@"u @,"u

    Invalid use of @’:
    @’ ’
    @’@"u @'"u

    @dotless{truc} truc @dotless{ij} ij @dotless{--a} –a @dotless{a} a

    @TeX, but without brace TeX

    @# @#

    @w{--a} –a

    @image{,1--xt} @image{,,2--xt} @image{,,,3--xt}


    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    fun:
    truc: machin bidule chose and
    truc: machin bidule chose and after
    truc: machin bidule chose and {
    truc: machin bidule chose and { and after
    truc: followed by a comment

    Various deff lines

    truc: after a deff item

    @ref{node} @ref{node}

    @ref{,cross ref name} @ref{,cross ref name} @ref{,,title} @ref{,,title} @ref{,,,file name} (file name) @ref{,,,,manual} manual @ref{node,cross ref name} @ref{node,cross ref name} @ref{node,,title} @ref{node,,title} @ref{node,,,file name} (file name)node @ref{node,,,,manual} section ‘node’ in manual @ref{node,cross ref name,title,} @ref{node,cross ref name,title,} @ref{node,cross ref name,,file name} cross ref name: (file name)node @ref{node,cross ref name,,,manual} section ‘node’ in manual @ref{node,cross ref name,title,file name} cross ref name: (file name)node @ref{node,cross ref name,title,,manual} section ‘title’ in manual @ref{node,cross ref name,title, file name, manual} cross ref name: (file name)node section ‘title’ in manual @ref{node,,title,file name} (file name)node @ref{node,,title,,manual} section ‘title’ in manual @ref{chapter,,title, file name, manual} (file name)chapter section ‘title’ in manual @ref{node,,title, file name, manual} (file name)node section ‘title’ in manual @ref{node,,,file name,manual} (file name)node section ‘node’ in manual @ref{,cross ref name,title,} @ref{,cross ref name,title,} @ref{,cross ref name,,file name} cross ref name: (file name) @ref{,cross ref name,,,manual} manual @ref{,cross ref name,title,file name} cross ref name: (file name) @ref{,cross ref name,title,,manual} section ‘title’ in manual @ref{,cross ref name,title, file name, manual} cross ref name: (file name) section ‘title’ in manual @ref{,,title,file name} (file name) @ref{,,title,,manual} section ‘title’ in manual @ref{,,title, file name, manual} (file name) section ‘title’ in manual @ref{,,,file name,manual} (file name) manual

    @inforef{,cross ref name } @inforef{,,file name} @inforef{,cross ref name, file name} @inforef{}

    Normal text

    < > " & ’ ‘

    “simple-double–three—four—-”
    code: ``simple-double--three---four----''
    asis: “simple-double–three—four—-”
    strong: “simple-double–three—four—-”
    kbd: ``simple-double--three---four----''

    ‘‘simple-double--three—four—-’’

    @"u ü @"{U} Ü @~n ñ @^a â @’e é @=o ō @‘i ì @’{e} é @’{@dotless{i}} í @dotless{i} i @dotless{j} j @‘{@=E} Ē` @l{} ł @,{@’C} Ć, @,c ç @,c@"u çü

    @*
    @ followed by a space   @ followed by a tab   @ followed by a new line  @- @| @: @! ! @? ? @. . @@ @ @} } @{ { @/

    foo vs. bar. colon :And something else. semi colon ;. And ? ?. Now ! !@ but , ,

    @TeX TeX @LaTeX LaTeX @bullet • @copyright © @dots … @enddots ... @equiv ≡ @error error--> @expansion → @minus - @point ∗ @print -| @result ⇒ @today a sunny day @aa å @AA Å @ae æ @oe œ @AE Æ @OE Œ @o ø @O Ø @ss ß @l ł @L Ł @exclamdown ¡ @questiondown ¿ @pounds £ @registeredsymbol ® @ordf ª @ordm º @comma , @quotedblleft “ @quotedblright ” @quoteleft ‘ @quoteright ’ @quotedblbase „ @quotesinglbase ‚ @guillemetleft « @guillemetright » @guillemotleft « @guillemotright » @guilsinglleft ‹ @guilsinglright › @textdegree ° @euro € @arrow → @leq ≤ @geq ≥

    @acronym{--a,an accronym} –a (an accronym) @acronym{--a} –a @abbr{@'E--. @comma{}A., @'Etude Autonome } É–. ,A. (Étude Autonome) @abbr{@'E--. @comma{}A.} É–. ,A. @asis{--a} –a @b{--a} –a @cite{--a} –a @code{--a} --a @command{--a} --a @ctrl{--a} –a @dfn{--a} –a @dmn{--a} –a @email{--a,--b} –b @email{,--b} –b @email{--a} --a @emph{--a} –a @env{--a} --a @file{--a} @--a'‘ @i{--a} –a @kbd{--a} --a @key{--a} <--a> @math{--a {\frac{1}{2}} @minus{}} –a \frac12 - @option{--a} @--a'‘ @r{--a} –a @samp{--a} @--a'‘ @sc{--a} –A @strong{--a} –a @t{--a} –a @sansserif{--a} –a @titlefont{--a}

    –a

    @indicateurl{--a} <--a> @uref{--a,--b} –b @uref{--a} --a @uref{,--b} –b @uref{--a,--b,--c} –c @uref{,--b,--c} –c @uref{--a,,--c} –c @uref{,,--c} –c @url{--a,--b} –b @url{--a,} --a @url{,--b} –b @var{--a} –a @verb{:--a:} --a @verb{:a < & @ % " -- b:} a < & @ % " -- b @w{} @H{a} a'' @H{--a} –a'' @dotaccent{a} ȧ @dotaccent{--a} –a. @ringaccent{a} å @ringaccent{--a} –a* @tieaccent{a} a[ @tieaccent{--a} –a[ @u{a} ă @u{--a} –a( @ubaraccent{a} a_ @ubaraccent{--a} –a_ @udotaccent{a}@udotaccent{--a} .–a @v{a} a< @v{--a} –a< @,{c} ç @,{--c} –c, @ogonek{a} ą @ogonek{--a} –a; @footnote{in footnote} (1) @footnote{in footnote2} (2)

    @image{f--ile} f--ile @image{f--ile,l--i} f--ile @image{f--ile,,l--e} f--ile @image{f--ile,,,alt} alt @image{f--ile,,,,e-d-xt} f--ile @image{f--ile,aze,az,alt,e--xt} alt @image{f-ile,aze,,a--lt} a–lt @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} alt



    @clicksequence{click @click{} A} click → A After clickstyle ⇒ @clicksequence{click @click{} A} click ⇒ A

    A quot—ation

    Note: A Note

    note: A note

    Caution: Caution

    Important: Important

    Tip: a Tip

    Warning: a Warning.

    something é TeX: The something é TeX is here.

    @ at the end of line A @ at the end of the @quotation line.

    something, other thing: something, other thing

    Note, the note: Note, the note

    Empty:

    :


    :

    A small quot—ation

    Note: A small Note

    something, other thing: something, other thing

    • i–temize
    • + i–tem +
    • b–ullet
    • - minu–s
    • e–mph item
    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
    trucbidule
     
    e--xample  some
       text
    
     
    s--mallexample
    
     
    d–isplay
    
     
    s–malldisplay
    
     
    l--isp
    
     
    s--malllisp
    
     
    f–ormat
    
     
    s–mallformat
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    cate--gory: de--ffn_name ar--guments more args
    even more so

    def–fn

    fset: i a g
    cmde: truc
    Command: log trap
    Command: log trap1
    Command: log trap2
    cmde: id ule truc
    cmde2: id @i'‘ ule truc
    id @i'‘ ule:
    :
    aaa:
    :
    :
    : machin
    : bidule machin
    truc: machin
    truc:
    truc: followed by a comment
    truc:
    :
    truc: a b c d e f g h i
    truc: deffnx before end deffn
    empty: deffn
    empty: deffn with deffnx
    empty: deffnx
    fset: i a g
    cmde: truc

    text in def item for second def item

    c--ategory: d--efvr_name

    d–efvr

    c--ategory: t--ype d--eftypefn_name a--rguments...

    d–eftypefn

    c--ategory on c--lass: t--ype d--eftypeop_name a--rguments...

    d–eftypeop

    c--ategory: t--ype d--eftypevr_name

    d–eftypevr

    c--ategory of c--lass: d--efcv_name

    d–efcv

    c--ategory on c--lass: d--efop_name a--rguments...

    d–efop

    c--ategory: d--eftp_name a--ttributes...

    d–eftp

    Function: d--efun_name a--rguments...

    d–efun

    Macro: d--efmac_name a--rguments...

    d–efmac

    Special Form: d--efspec_name a--rguments...

    d–efspec

    Variable: d--efvar_name argvar argvar1

    d–efvar

    User Option: d--efopt_name

    d–efopt

    Function: t--ype d--eftypefun_name a--rguments...

    d–eftypefun

    Variable: t--ype d--eftypevar_name

    d–eftypevar

    Instance Variable of c--lass: d--efivar_name

    d–efivar

    Instance Variable of c--lass: t--ype d--eftypeivar_name

    d–eftypeivar

    Method on c--lass: d--efmethod_name a--rguments...

    d–efmethod

    Method on c--lass: t--ype d--eftypemethod_name a--rguments...

    d–eftypemethod

    @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} See cross r—ef name@: (file n—ame@)c—hapter@ section ‘t—itle@’ in ma—nual@. @ref{chapter, cross ref name, title, file name, manual} cross ref name: (file name)chapter section ‘title’ in manual @pxref{chapter, cross ref name, title, file name, manual} see cross ref name: (file name)chapter section ‘title’ in manual @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter

    @ref{chapter} chapter @xref{chapter} See section chapter. @pxref{chapter} see section chapter @ref{s--ect@comma{}ion} A section

    @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } a , in cross ref: (a comma, in file)s–ect,ion section ‘a comma, in title’ in a , in manual name

    @ref{chapter,cross ref name} cross ref name @ref{chapter,,title} title @ref{chapter,,,file name} (file name)chapter @ref{chapter,,,,manual} section ‘chapter’ in manual @ref{chapter,cross ref name,title,} title @ref{chapter,cross ref name,,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,,,manual} section ‘chapter’ in manual @ref{chapter,cross ref name,title,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,title,,manual} section ‘title’ in manual @ref{chapter,cross ref name,title, file name, manual} cross ref name: (file name)chapter section ‘title’ in manual @ref{chapter,,title,file name} (file name)chapter @ref{chapter,,title,,manual} section ‘title’ in manual @ref{chapter,,title, file name, manual} (file name)chapter section ‘title’ in manual @ref{chapter,,,file name,manual} (file name)chapter section ‘chapter’ in manual

    @ref{(pman)anode,cross ref name} cross ref name: (pman)anode @ref{(pman)anode,,title} (pman)anode @ref{(pman)anode,,,file name} (file name)anode @ref{(pman)anode,,,,manual} (pman)anode section ‘anode’ in manual @ref{(pman)anode,cross ref name,title,} cross ref name: (pman)anode @ref{(pman)anode,cross ref name,,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,,,manual} cross ref name: (pman)anode section ‘anode’ in manual @ref{(pman)anode,cross ref name,title,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,title,,manual} cross ref name: (pman)anode section ‘title’ in manual @ref{(pman)anode,cross ref name,title, file name, manual} cross ref name: (file name)anode section ‘title’ in manual @ref{(pman)anode,,title,file name} (file name)anode @ref{(pman)anode,,title,,manual} (pman)anode section ‘title’ in manual @ref{(pman)anode,,title, file name, manual} (file name)anode section ‘title’ in manual @ref{(pman)anode,,,file name,manual} (file name)anode section ‘anode’ in manual

    @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter @inforef{chapter} @inforef{chapter, cross ref name} @inforef{chapter,,file name} See (file name)chapter @inforef{node, cross ref name, file name} See cross ref name: (file name)node @inforef{node} @inforef{node, cross ref name} @inforef{node,,file name} See (file name)node @inforef{chapter, cross ref name, file name, spurious arg} See cross ref name: (file name, spurious arg)chapter

    @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} See a , in cross ref: (a comma, in file)s–ect,ion

    • a

    l–ine

    a
    b

    l–ine

    - a
    - b

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    \input texinfo @c -*-texinfo-*-
    
    @setfilename simplest.info
    
    @node Top
    
    This is a very simple texi manual @  <>.
    
    @bye
    
    in verbatim ''
    
    html ''

    majorheading

    chapheading

    heading

    subheading

    subsubheading

    @acronym{--a,an accronym @comma{} @enddots{}} –a (an accronym , ...) @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } É–. ,A. (Étude–, Autonome) @abbr{@'E--. @comma{}A.} É–. ,A.

    @math{--a@minus{} {\frac{1}{2}}} –a- \frac12

    @image{f-ile,,,alt@verb{:jk _" %}} altjk _" %@ @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} jk _" %@ in b " @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} altjk _" %@

    Somehow invalid use of @,:
    @, ,
    @,@"u @,"u

    Invalid use of @’:
    @’ ’
    @’@"u @'"u

    @dotless{truc} truc @dotless{ij} ij @dotless{--a} –a @dotless{a} a

    @TeX, but without brace TeX

    @# @#

    @w{--a} –a

    @image{,1--xt} @image{,,2--xt} @image{,,,3--xt}


    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    fun:
    truc: machin bidule chose and
    truc: machin bidule chose and after
    truc: machin bidule chose and {
    truc: machin bidule chose and { and after
    truc: followed by a comment

    Various deff lines

    truc: after a deff item

    @ref{node} @ref{node}

    @ref{,cross ref name} @ref{,cross ref name} @ref{,,title} @ref{,,title} @ref{,,,file name} (file name) @ref{,,,,manual} manual @ref{node,cross ref name} @ref{node,cross ref name} @ref{node,,title} @ref{node,,title} @ref{node,,,file name} (file name)node @ref{node,,,,manual} section ‘node’ in manual @ref{node,cross ref name,title,} @ref{node,cross ref name,title,} @ref{node,cross ref name,,file name} cross ref name: (file name)node @ref{node,cross ref name,,,manual} section ‘node’ in manual @ref{node,cross ref name,title,file name} cross ref name: (file name)node @ref{node,cross ref name,title,,manual} section ‘title’ in manual @ref{node,cross ref name,title, file name, manual} cross ref name: (file name)node section ‘title’ in manual @ref{node,,title,file name} (file name)node @ref{node,,title,,manual} section ‘title’ in manual @ref{chapter,,title, file name, manual} (file name)chapter section ‘title’ in manual @ref{node,,title, file name, manual} (file name)node section ‘title’ in manual @ref{node,,,file name,manual} (file name)node section ‘node’ in manual @ref{,cross ref name,title,} @ref{,cross ref name,title,} @ref{,cross ref name,,file name} cross ref name: (file name) @ref{,cross ref name,,,manual} manual @ref{,cross ref name,title,file name} cross ref name: (file name) @ref{,cross ref name,title,,manual} section ‘title’ in manual @ref{,cross ref name,title, file name, manual} cross ref name: (file name) section ‘title’ in manual @ref{,,title,file name} (file name) @ref{,,title,,manual} section ‘title’ in manual @ref{,,title, file name, manual} (file name) section ‘title’ in manual @ref{,,,file name,manual} (file name) manual

    @inforef{,cross ref name } @inforef{,,file name} @inforef{,cross ref name, file name} @inforef{}

    In example.

     
    <
    >
    "
    &
    '
    `
    
    ``simple-double--three---four----''
    
    code: ``simple-double--three---four----'' 
    
    asis: ``simple-double--three---four----'' 
    
    strong: ``simple-double--three---four----'' 
    
    kbd: ``simple-double--three---four----'' 
    
    
    ``simple-double--three---four----''
    
    
    
    @"u ü 
    @"{U} Ü 
    @~n ñ
    @^a â
    @'e é
    @=o ō
    @`i ì
    @'{e} é
    @'{@dotless{i}} í 
    @dotless{i} i
    @dotless{j} j
    @`{@=E} Ē` 
    @l{} ł
    @,{@'C} Ć,
    @,c ç
    @,c@"u çü 
    
    
    @* 
    
    @ followed by a space
     
    @ followed by a tab
     
    @ followed by a new line
     @- 
    @| 
    @: 
    @! !
    @? ?
    @. .
    @@ @
    @} }
    @{ {
    @/ 
    
    foo vs. bar. 
    colon :And something else.
    semi colon ;.
    And ? ?.
    Now ! !@
    but , ,
    
    @TeX TeX
    @LaTeX LaTeX
    @bullet •
    @copyright ©
    @dots …
    @enddots ...
    @equiv ≡
    @error error-->
    @expansion →
    @minus -
    @point ∗
    @print -|
    @result ⇒
    @today a sunny day
    @aa å
    @AA Å
    @ae æ
    @oe œ
    @AE Æ
    @OE Œ
    @o ø
    @O Ø
    @ss ß
    @l ł
    @L Ł
    @exclamdown ¡
    @questiondown ¿
    @pounds £
    @registeredsymbol ®
    @ordf ª
    @ordm º
    @comma ,
    @quotedblleft “
    @quotedblright ”
    @quoteleft ‘
    @quoteright ’
    @quotedblbase „
    @quotesinglbase ‚
    @guillemetleft «
    @guillemetright »
    @guillemotleft «
    @guillemotright »
    @guilsinglleft ‹
    @guilsinglright ›
    @textdegree °
    @euro €
    @arrow →
    @leq ≤
    @geq ≥
    
    @acronym{--a,an accronym} --a (an accronym)
    @acronym{--a} --a
    @abbr{@'E--. @comma{}A., @'Etude Autonome } É--. ,A. (Étude Autonome)
    @abbr{@'E--. @comma{}A.} É--. ,A.
    @asis{--a} --a
    @b{--a} --a
    @cite{--a} --a
    @code{--a} --a
    @command{--a} --a
    @ctrl{--a} --a
    @dfn{--a} --a
    @dmn{--a} --a
    @email{--a,--b} --b
    @email{,--b} --b
    @email{--a} --a
    @emph{--a} --a
    @env{--a} --a
    @file{--a} @--a'‘
    @i{--a} --a
    @kbd{--a} --a
    @key{--a} <--a>
    @math{--a {\frac{1}{2}} @minus{}} --a \frac12 -
    @option{--a} @--a'‘
    @r{--a} --a
    @samp{--a} @--a'‘
    @sc{--a} --A
    @strong{--a} --a
    @t{--a} --a
    @sansserif{--a} --a
    @titlefont{--a} --a
    @indicateurl{--a} <--a>
    @uref{--a,--b} --b
    @uref{--a} --a
    @uref{,--b} --b
    @uref{--a,--b,--c} --c
    @uref{,--b,--c} --c
    @uref{--a,,--c} --c
    @uref{,,--c} --c
    @url{--a,--b} --b
    @url{--a,} --a
    @url{,--b} --b
    @var{--a} --a
    @verb{:--a:} --a
    @verb{:a  < & @ % " --    b:} a  < & @ % " --    b
    @w{} 
    @H{a} a''
    @H{--a} --a''
    @dotaccent{a} ȧ
    @dotaccent{--a} --a.
    @ringaccent{a} å
    @ringaccent{--a} --a*
    @tieaccent{a} a[
    @tieaccent{--a} --a[
    @u{a} ă
    @u{--a} --a(
    @ubaraccent{a} a_
    @ubaraccent{--a} --a_
    @udotaccent{a}@udotaccent{--a} .--a
    @v{a} a<
    @v{--a} --a<
    @,{c} ç
    @,{--c} --c,
    @ogonek{a} ą
    @ogonek{--a} --a;
    @footnote{in footnote} (3)
    @footnote{in footnote2} (4)
    
    @image{f--ile} [ f--ile ]
    @image{f--ile,l--i} [ f--ile ]
    @image{f--ile,,l--e} [ f--ile ]
    @image{f--ile,,,alt} [ alt ]
    @image{f--ile,,,,e-d-xt} [ f--ile ]
    @image{f--ile,aze,az,alt,e--xt} [ alt ]
    @image{f-ile,aze,,a--lt} [ a–lt ]
    @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} [ alt ]
    
    
    
    
    @clicksequence{click @click{} A} click → A
    After clickstyle ⇒
    @clicksequence{click @click{} A} click ⇒ A
    
    
    A quot---ation
    
    Note: A Note
    
    note: A note
    
    Caution: Caution
    
    Important: Important
    
    Tip: a Tip
    
    Warning: a Warning.
    
    something é TeX: The something é TeX is here.
    
    @ at the end of line  A @ at the end of the @quotation line.
    
    something, other thing: something, other thing
    
    Note, the note: Note, the note
    
    Empty: 
    : 
    
    : 
    A small quot---ation
    
    Note: A small Note
    
    something, other thing: something, other thing
    
    •  i--temize
      
    •  +  i--tem +
      
    •  b--ullet
      
    • -
       minu--s
      
    •  e--mph item
      
    •  after emph  e--mph item
      
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    
    lone mu--ltitable item
    truc
    bidule
     
    e--xample  some
       text
    
     
    s--mallexample
    
     
    d--isplay
    
     
    s--malldisplay
    
     
    l--isp
    
     
    s--malllisp
    
     
    f--ormat
    
     
    s--mallformat
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    cate--gory: de--ffn_name ar--guments more args even more so
    def--fn
    
     
    
    fset: i a g
    cmde: truc
    Command: log trap
    Command: log trap1
    Command: log trap2
    cmde: id ule truc
    cmde2: id @i'‘ ule truc
    id @i'‘ ule:
    :
    aaa:
    :
    :
    : machin
    : bidule machin
    truc: machin
    truc:
    truc: followed by a comment
    truc:
    :
    truc: a b c d e f g h i
    truc: deffnx before end deffn
    empty: deffn
    empty: deffn with deffnx
    empty: deffnx
    fset: i a g
    cmde: truc
    text in def item for second def item
    
    c--ategory: d--efvr_name
    d--efvr
    
    c--ategory: t--ype d--eftypefn_name a--rguments...
    d--eftypefn
    
    c--ategory on c--lass: t--ype d--eftypeop_name a--rguments...
    d--eftypeop
    
    c--ategory: t--ype d--eftypevr_name
    d--eftypevr
    
    c--ategory of c--lass: d--efcv_name
    d--efcv
    
    c--ategory on c--lass: d--efop_name a--rguments...
    d--efop
    
    c--ategory: d--eftp_name a--ttributes...
    d--eftp
    
    Function: d--efun_name a--rguments...
    d--efun
    
    Macro: d--efmac_name a--rguments...
    d--efmac
    
    Special Form: d--efspec_name a--rguments...
    d--efspec
    
    Variable: d--efvar_name argvar argvar1
    d--efvar
    
    User Option: d--efopt_name
    d--efopt
    
    Function: t--ype d--eftypefun_name a--rguments...
    d--eftypefun
    
    Variable: t--ype d--eftypevar_name
    d--eftypevar
    
    Instance Variable of c--lass: d--efivar_name
    d--efivar
    
    Instance Variable of c--lass: t--ype d--eftypeivar_name
    d--eftypeivar
    
    Method on c--lass: d--efmethod_name a--rguments...
    d--efmethod
    
    Method on c--lass: t--ype d--eftypemethod_name a--rguments...
    d--eftypemethod
    
    @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} See cross r---ef name@: (file n---ame@)c---hapter@ section `t---itle@' in ma---nual@.
    @ref{chapter, cross ref name, title, file name, manual} cross ref name: (file name)chapter section `title' in manual
    @pxref{chapter, cross ref name, title, file name, manual} see cross ref name: (file name)chapter section `title' in manual
    @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter
    
    @ref{chapter} chapter
    @xref{chapter} See section chapter.
    @pxref{chapter} see section chapter
    @ref{s--ect@comma{}ion} A section
    
    @ref{s--ect@comma{}ion, a @comma{} in cross
    ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name }
    a , in cross ref: (a comma, in file)s--ect,ion section `a comma, in title' in a , in manual name
    
    @ref{chapter,cross ref name} cross ref name
    @ref{chapter,,title} title
    @ref{chapter,,,file name} (file name)chapter
    @ref{chapter,,,,manual} section `chapter' in manual
    @ref{chapter,cross ref name,title,} title
    @ref{chapter,cross ref name,,file name} cross ref name: (file name)chapter
    @ref{chapter,cross ref name,,,manual} section `chapter' in manual
    @ref{chapter,cross ref name,title,file name} cross ref name: (file name)chapter
    @ref{chapter,cross ref name,title,,manual} section `title' in manual
    @ref{chapter,cross ref name,title, file name, manual} cross ref name: (file name)chapter section `title' in manual
    @ref{chapter,,title,file name} (file name)chapter
    @ref{chapter,,title,,manual} section `title' in manual
    @ref{chapter,,title, file name, manual} (file name)chapter section `title' in manual
    @ref{chapter,,,file name,manual} (file name)chapter section `chapter' in manual
    
    
    @ref{(pman)anode,cross ref name} cross ref name: (pman)anode
    @ref{(pman)anode,,title} (pman)anode
    @ref{(pman)anode,,,file name} (file name)anode
    @ref{(pman)anode,,,,manual} (pman)anode section `anode' in manual
    @ref{(pman)anode,cross ref name,title,} cross ref name: (pman)anode
    @ref{(pman)anode,cross ref name,,file name} cross ref name: (file name)anode
    @ref{(pman)anode,cross ref name,,,manual} cross ref name: (pman)anode section `anode' in manual
    @ref{(pman)anode,cross ref name,title,file name} cross ref name: (file name)anode
    @ref{(pman)anode,cross ref name,title,,manual} cross ref name: (pman)anode section `title' in manual
    @ref{(pman)anode,cross ref name,title, file name, manual} cross ref name: (file name)anode section `title' in manual
    @ref{(pman)anode,,title,file name} (file name)anode
    @ref{(pman)anode,,title,,manual} (pman)anode section `title' in manual
    @ref{(pman)anode,,title, file name, manual} (file name)anode section `title' in manual
    @ref{(pman)anode,,,file name,manual} (file name)anode section `anode' in manual
    
    
    @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter
    @inforef{chapter} 
    @inforef{chapter, cross ref name} 
    @inforef{chapter,,file name} See (file name)chapter
    @inforef{node, cross ref name, file name} See cross ref name: (file name)node
    @inforef{node} 
    @inforef{node, cross ref name} 
    @inforef{node,,file name} See (file name)node
    @inforef{chapter, cross ref name, file name, spurious arg} See cross ref name: (file name, spurious arg)chapter
    
    @inforef{s--ect@comma{}ion, a @comma{} in cross
    ref, a comma@comma{} in file}
    See a , in cross ref: (a comma, in file)s--ect,ion
    
    
    
    • a
    l--ine
    
    a
    b
    l--ine
    
    - a
    - b
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    \input texinfo @c -*-texinfo-*-
    
    @setfilename simplest.info
    
    @node Top
    
    This is a very simple texi manual @  <>.
    
    @bye
    
    in verbatim ''
    
    
    html ''
    
    
    
    majorheading
    
    
    chapheading
    
    
    heading
    
    
    subheading
    
    
    subsubheading
    
    
    @acronym{--a,an accronym @comma{} @enddots{}} --a (an accronym , ...)
    @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } É--. ,A. (Étude--, Autonome)
    @abbr{@'E--. @comma{}A.} É--. ,A.
    
    @math{--a@minus{} {\frac{1}{2}}} --a- \frac12
    
    @image{f-ile,,,alt@verb{:jk _" %}} [ altjk _" %@ ]
    @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} [ jk _" %@ in b " ]
    @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} [ altjk _" %@ ]
    
    
    
    
    Somehow invalid use of @,:
    
    @, ,
    
    
    @,@"u @,"u
    
    Invalid use of @':
    
    @' '
    
    
    @'@"u @'"u
    
    @dotless{truc} truc
    @dotless{ij} ij
    @dotless{--a} --a
    @dotless{a} a
    
    @TeX, but without brace TeX
    
    @# @#
    
    @w{--a} --a
    
    @image{,1--xt} 
    @image{,,2--xt} 
    @image{,,,3--xt} 
    
    
    
    
    • after emph  e--mph item
      
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    fun:
    truc: machin bidule chose and
    truc: machin bidule chose and after
    truc: machin bidule chose and {
    truc: machin bidule chose and { and after
    truc: followed by a comment
    Various deff lines
    
    truc: after a deff item
    @ref{node} @ref{node}
    
    @ref{,cross ref name} @ref{,cross ref name}
    @ref{,,title} @ref{,,title}
    @ref{,,,file name} (file name)
    @ref{,,,,manual} manual
    @ref{node,cross ref name} @ref{node,cross ref name}
    @ref{node,,title} @ref{node,,title}
    @ref{node,,,file name} (file name)node
    @ref{node,,,,manual} section `node' in manual
    @ref{node,cross ref name,title,} @ref{node,cross ref name,title,}
    @ref{node,cross ref name,,file name} cross ref name: (file name)node
    @ref{node,cross ref name,,,manual} section `node' in manual
    @ref{node,cross ref name,title,file name} cross ref name: (file name)node
    @ref{node,cross ref name,title,,manual} section `title' in manual
    @ref{node,cross ref name,title, file name, manual} cross ref name: (file name)node section `title' in manual
    @ref{node,,title,file name} (file name)node
    @ref{node,,title,,manual} section `title' in manual
    @ref{chapter,,title, file name, manual} (file name)chapter section `title' in manual
    @ref{node,,title, file name, manual} (file name)node section `title' in manual
    @ref{node,,,file name,manual} (file name)node section `node' in manual
    @ref{,cross ref name,title,} @ref{,cross ref name,title,}
    @ref{,cross ref name,,file name} cross ref name: (file name)
    @ref{,cross ref name,,,manual} manual
    @ref{,cross ref name,title,file name} cross ref name: (file name)
    @ref{,cross ref name,title,,manual} section `title' in manual
    @ref{,cross ref name,title, file name, manual} cross ref name: (file name) section `title' in manual
    @ref{,,title,file name} (file name)
    @ref{,,title,,manual} section `title' in manual
    @ref{,,title, file name, manual} (file name) section `title' in manual
    @ref{,,,file name,manual} (file name) manual
    
    @inforef{,cross ref name } 
    @inforef{,,file name} 
    @inforef{,cross ref name, file name} 
    @inforef{} 
    
    
    

    cp

    Jump to:   "   -   .   ?  
    A   I   T  
    Index Entry Section

    "
    Top section
    Top section
    subsubheading
    subsubheading

    -
    –optionTop section
    –optionTop section
    –optionsubsubheading
    –optionsubsubheading

    .
    .subsubheading

    ?
    ?subsubheading

    A
    asubsubheading

    I
    index entry between item and itemxTop section
    index entry between item and itemxTop section
    index entry between item and itemxsubsubheading
    index entry between item and itemxsubsubheading
    index entry within deffnTop section
    index entry within deffnTop section
    index entry within deffnsubsubheading
    index entry within deffnsubsubheading
    index entry within itemizeTop section
    index entry within itemizeTop section
    index entry within itemizesubsubheading
    index entry within itemizesubsubheading
    index entry within multitableTop section
    index entry within multitableTop section
    index entry within multitablesubsubheading
    index entry within multitablesubsubheading

    T
    t–rucsubsubheading
    T–rucsubsubheading

    Jump to:   "   -   .   ?  
    A   I   T  

    fn

    Jump to:   "   -   .   ?  
    A   B   D   F   I   L   M   T  
    Index Entry Section

    "
    ``Top section
    ``Top section
    ``subsubheading
    ``subsubheading

    -
    --foptionTop section
    --foptionTop section
    --foptionsubsubheading
    --foptionsubsubheading

    .
    .subsubheading

    ?
    ?subsubheading

    A
    aTop section
    aTop section
    aTop section
    aTop section
    asubsubheading
    asubsubheading
    asubsubheading
    asubsubheading
    asubsubheading
    afterTop section
    afterTop section
    aftersubsubheading
    aftersubsubheading

    B
    bTop section
    bTop section
    bsubsubheading
    bsubsubheading
    bidule machinTop section
    bidule machinTop section
    bidule machinsubsubheading
    bidule machinsubsubheading

    D
    d--effn_nameTop section
    d--effn_nameTop section
    d--effn_namesubsubheading
    d--effn_namesubsubheading
    d--efmac_nameTop section
    d--efmac_nameTop section
    d--efmac_namesubsubheading
    d--efmac_namesubsubheading
    d--efmethod_name on c--lassTop section
    d--efmethod_name on c--lassTop section
    d--efmethod_name on c--lasssubsubheading
    d--efmethod_name on c--lasssubsubheading
    d--efop_name on c--lassTop section
    d--efop_name on c--lassTop section
    d--efop_name on c--lasssubsubheading
    d--efop_name on c--lasssubsubheading
    d--efspec_nameTop section
    d--efspec_nameTop section
    d--efspec_namesubsubheading
    d--efspec_namesubsubheading
    d--eftypefn_nameTop section
    d--eftypefn_nameTop section
    d--eftypefn_namesubsubheading
    d--eftypefn_namesubsubheading
    d--eftypefun_nameTop section
    d--eftypefun_nameTop section
    d--eftypefun_namesubsubheading
    d--eftypefun_namesubsubheading
    d--eftypemethod_name on c--lassTop section
    d--eftypemethod_name on c--lassTop section
    d--eftypemethod_name on c--lasssubsubheading
    d--eftypemethod_name on c--lasssubsubheading
    d--eftypeop_name on c--lassTop section
    d--eftypeop_name on c--lassTop section
    d--eftypeop_name on c--lasssubsubheading
    d--eftypeop_name on c--lasssubsubheading
    d--efun_nameTop section
    d--efun_nameTop section
    d--efun_namesubsubheading
    d--efun_namesubsubheading
    de--ffn_nameTop section
    de--ffn_nameTop section
    de--ffn_namesubsubheading
    de--ffn_namesubsubheading
    deffnTop section
    deffnTop section
    deffnTop section
    deffnTop section
    deffnsubsubheading
    deffnsubsubheading
    deffnsubsubheading
    deffnsubsubheading
    deffnxTop section
    deffnxTop section
    deffnxTop section
    deffnxTop section
    deffnxsubsubheading
    deffnxsubsubheading
    deffnxsubsubheading
    deffnxsubsubheading

    F
    followedTop section
    followedTop section
    followedTop section
    followedTop section
    followedsubsubheading
    followedsubsubheading
    followedsubsubheading
    followedsubsubheading

    I
    iTop section
    iTop section
    iTop section
    iTop section
    isubsubheading
    isubsubheading
    isubsubheading
    isubsubheading
    id @i'‘ uleTop section
    id @i'‘ uleTop section
    id @i'‘ ulesubsubheading
    id @i'‘ ulesubsubheading
    id uleTop section
    id uleTop section
    id ulesubsubheading
    id ulesubsubheading

    L
    log trapTop section
    log trapTop section
    log trapsubsubheading
    log trapsubsubheading
    log trap1Top section
    log trap1Top section
    log trap1subsubheading
    log trap1subsubheading
    log trap2Top section
    log trap2Top section
    log trap2subsubheading
    log trap2subsubheading

    M
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading

    T
    t--rucsubsubheading
    T--rucsubsubheading
    trucTop section
    trucTop section
    trucTop section
    trucTop section
    trucsubsubheading
    trucsubsubheading
    trucsubsubheading
    trucsubsubheading

    Jump to:   "   -   .   ?  
    A   B   D   F   I   L   M   T  

    vr

    Jump to:   A   B   D  
    Index Entry Section

    A
    aTop section
    aTop section
    asubsubheading
    asubsubheading

    B
    bTop section
    bTop section
    bsubsubheading
    bsubsubheading

    D
    d--efcv_nameTop section
    d--efcv_nameTop section
    d--efcv_namesubsubheading
    d--efcv_namesubsubheading
    d--efivar_nameTop section
    d--efivar_nameTop section
    d--efivar_namesubsubheading
    d--efivar_namesubsubheading
    d--efopt_nameTop section
    d--efopt_nameTop section
    d--efopt_namesubsubheading
    d--efopt_namesubsubheading
    d--eftypeivar_name of c--lassTop section
    d--eftypeivar_name of c--lassTop section
    d--eftypeivar_name of c--lasssubsubheading
    d--eftypeivar_name of c--lasssubsubheading
    d--eftypevar_nameTop section
    d--eftypevar_nameTop section
    d--eftypevar_namesubsubheading
    d--eftypevar_namesubsubheading
    d--eftypevr_nameTop section
    d--eftypevr_nameTop section
    d--eftypevr_namesubsubheading
    d--eftypevr_namesubsubheading
    d--efvar_nameTop section
    d--efvar_nameTop section
    d--efvar_namesubsubheading
    d--efvar_namesubsubheading
    d--efvr_nameTop section
    d--efvr_nameTop section
    d--efvr_namesubsubheading
    d--efvr_namesubsubheading

    Jump to:   A   B   D  

    ky

    pg

    tp

    Jump to:   D  
    Index Entry Section

    D
    d--eftp_nameTop section
    d--eftp_nameTop section
    d--eftp_namesubsubheading
    d--eftp_namesubsubheading

    Jump to:   D  

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. chapter

    (5)

     

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 A section


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.1 subsection


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.1.1 subsubsection “simple-double–three—four—-”


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. chapter 2

    Jump to:   "   -   .   ?  
    A   I   T  
    Index Entry Section

    "
    Top section
    Top section
    subsubheading
    subsubheading

    -
    –optionTop section
    –optionTop section
    –optionsubsubheading
    –optionsubsubheading

    .
    .subsubheading

    ?
    ?subsubheading

    A
    asubsubheading

    I
    index entry between item and itemxTop section
    index entry between item and itemxTop section
    index entry between item and itemxsubsubheading
    index entry between item and itemxsubsubheading
    index entry within deffnTop section
    index entry within deffnTop section
    index entry within deffnsubsubheading
    index entry within deffnsubsubheading
    index entry within itemizeTop section
    index entry within itemizeTop section
    index entry within itemizesubsubheading
    index entry within itemizesubsubheading
    index entry within multitableTop section
    index entry within multitableTop section
    index entry within multitablesubsubheading
    index entry within multitablesubsubheading

    T
    t–rucsubsubheading
    T–rucsubsubheading

    Jump to:   "   -   .   ?  
    A   I   T  
    Jump to:   "   -   .   ?  
    A   B   D   F   I   L   M   T  
    Index Entry Section

    "
    ``Top section
    ``Top section
    ``subsubheading
    ``subsubheading

    -
    --foptionTop section
    --foptionTop section
    --foptionsubsubheading
    --foptionsubsubheading

    .
    .subsubheading

    ?
    ?subsubheading

    A
    aTop section
    aTop section
    aTop section
    aTop section
    asubsubheading
    asubsubheading
    asubsubheading
    asubsubheading
    asubsubheading
    afterTop section
    afterTop section
    aftersubsubheading
    aftersubsubheading

    B
    bTop section
    bTop section
    bsubsubheading
    bsubsubheading
    bidule machinTop section
    bidule machinTop section
    bidule machinsubsubheading
    bidule machinsubsubheading

    D
    d--effn_nameTop section
    d--effn_nameTop section
    d--effn_namesubsubheading
    d--effn_namesubsubheading
    d--efmac_nameTop section
    d--efmac_nameTop section
    d--efmac_namesubsubheading
    d--efmac_namesubsubheading
    d--efmethod_name on c--lassTop section
    d--efmethod_name on c--lassTop section
    d--efmethod_name on c--lasssubsubheading
    d--efmethod_name on c--lasssubsubheading
    d--efop_name on c--lassTop section
    d--efop_name on c--lassTop section
    d--efop_name on c--lasssubsubheading
    d--efop_name on c--lasssubsubheading
    d--efspec_nameTop section
    d--efspec_nameTop section
    d--efspec_namesubsubheading
    d--efspec_namesubsubheading
    d--eftypefn_nameTop section
    d--eftypefn_nameTop section
    d--eftypefn_namesubsubheading
    d--eftypefn_namesubsubheading
    d--eftypefun_nameTop section
    d--eftypefun_nameTop section
    d--eftypefun_namesubsubheading
    d--eftypefun_namesubsubheading
    d--eftypemethod_name on c--lassTop section
    d--eftypemethod_name on c--lassTop section
    d--eftypemethod_name on c--lasssubsubheading
    d--eftypemethod_name on c--lasssubsubheading
    d--eftypeop_name on c--lassTop section
    d--eftypeop_name on c--lassTop section
    d--eftypeop_name on c--lasssubsubheading
    d--eftypeop_name on c--lasssubsubheading
    d--efun_nameTop section
    d--efun_nameTop section
    d--efun_namesubsubheading
    d--efun_namesubsubheading
    de--ffn_nameTop section
    de--ffn_nameTop section
    de--ffn_namesubsubheading
    de--ffn_namesubsubheading
    deffnTop section
    deffnTop section
    deffnTop section
    deffnTop section
    deffnsubsubheading
    deffnsubsubheading
    deffnsubsubheading
    deffnsubsubheading
    deffnxTop section
    deffnxTop section
    deffnxTop section
    deffnxTop section
    deffnxsubsubheading
    deffnxsubsubheading
    deffnxsubsubheading
    deffnxsubsubheading

    F
    followedTop section
    followedTop section
    followedTop section
    followedTop section
    followedsubsubheading
    followedsubsubheading
    followedsubsubheading
    followedsubsubheading

    I
    iTop section
    iTop section
    iTop section
    iTop section
    isubsubheading
    isubsubheading
    isubsubheading
    isubsubheading
    id @i'‘ uleTop section
    id @i'‘ uleTop section
    id @i'‘ ulesubsubheading
    id @i'‘ ulesubsubheading
    id uleTop section
    id uleTop section
    id ulesubsubheading
    id ulesubsubheading

    L
    log trapTop section
    log trapTop section
    log trapsubsubheading
    log trapsubsubheading
    log trap1Top section
    log trap1Top section
    log trap1subsubheading
    log trap1subsubheading
    log trap2Top section
    log trap2Top section
    log trap2subsubheading
    log trap2subsubheading

    M
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading

    T
    t--rucsubsubheading
    T--rucsubsubheading
    trucTop section
    trucTop section
    trucTop section
    trucTop section
    trucsubsubheading
    trucsubsubheading
    trucsubsubheading
    trucsubsubheading

    Jump to:   "   -   .   ?  
    A   B   D   F   I   L   M   T  

    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)

    in footnote

    (2)

    in footnote2

    (1)

    in footnote

    (2)

    in footnote2

    (3)

    in footnote

    (4)

    in footnote2

    (5)

    in footnote


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    Short Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/texi_tables/0000755000175000017500000000000011264347123023460 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_tables/tables.20000644000175000017500000000000011264347123025003 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_tables/tables.passfirst0000644000175000017500000000122311264347123026670 0ustar flichtenheldflichtenheldtables.texi(,2) tables.texi(,3) @setfilename tables.info tables.texi(,4) tables.texi(,5) @node Top tables.texi(,6) @top Test tables tables.texi(,7) tables.texi(,8) @table tables.texi(,9) @item first item tables.texi(,10) First item text tables.texi(,11) tables.texi(,12) @ref{Top,, title in first item tables.texi(,13) @item second item tables.texi(,14) @end table tables.texi(,15) tables.texi(,16) @unnumbered Unnumbered section tables.texi(,17) tables.texi(,18) @table tables.texi(,19) @item @ref{Top,, title tables.texi(,20) long title} tables.texi(,21) Item line tables.texi(,22) @end table tables.texi(,23) tables.texi(,24) tables.texi(,25) @bye texi2html-1.82/test/formatting/res/texi_tables/tables.passtexi0000644000175000017500000000122311264347123026512 0ustar flichtenheldflichtenheldtables.texi(,2) tables.texi(,3) @setfilename tables.info tables.texi(,4) tables.texi(,5) @node Top tables.texi(,6) @top Test tables tables.texi(,7) tables.texi(,8) @table tables.texi(,9) @item first item tables.texi(,10) First item text tables.texi(,11) tables.texi(,12) @ref{Top,, title in first item tables.texi(,13) @item second item tables.texi(,14) @end table tables.texi(,15) tables.texi(,16) @unnumbered Unnumbered section tables.texi(,17) tables.texi(,18) @table tables.texi(,19) @item @ref{Top,, title tables.texi(,20) long title} tables.texi(,21) Item line tables.texi(,22) @end table tables.texi(,23) tables.texi(,24) tables.texi(,25) @bye texi2html-1.82/test/formatting/res/texi_tables/tables.texi0000644000175000017500000000044311264347123025626 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename tables.info @node Top @top Test tables @table @item first item First item text @ref{Top,, title in first item @item second item @end table @unnumbered Unnumbered section @table @item @ref{Top,, title long title} Item line @end table @bye texi2html-1.82/test/formatting/res/double_style_paragraph/0000755000175000017500000000000011264347123025674 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/double_style_paragraph/double_style_paragraph.20000644000175000017500000000000011264347123032464 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/double_style_paragraph/double_style_paragraph.html0000644000175000017500000000371711264347123033311 0ustar flichtenheldflichtenheld Untitled Document

    2 style commands enclosing 2 paragraphs

    First para.

    Second para.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/texi_float_copying/0000755000175000017500000000000011264347123025043 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_float_copying/float_copying.20000644000175000017500000000020011264347123027753 0ustar flichtenheldflichtenheld** Index entry before document: @cindex indexed caption (l. 23) ** Index entry before document: @cindex indexed caption (l. 23) texi2html-1.82/test/formatting/res/texi_float_copying/float_copying.passfirst0000644000175000017500000000307011264347123031640 0ustar flichtenheldflichtenheldfloat_copying.texi(,2) float_copying.texi(,3) @setfilename float_copying.info float_copying.texi(,4) float_copying.texi(,27) float_copying.texi(,28) @node Top float_copying.texi(,29) @top Top float_copying.texi(,30) float_copying.texi(,31) @cindex Top float_copying.texi(,32) float_copying.texi(,33) See the caption @ref{public domain anchor}. float_copying.texi(,34) float_copying.texi(,35) See the float @ref{public domain}. float_copying.texi(,36) float_copying.texi(,37) @insertcopying float_copying.texi(,38) float_copying.texi(,39) @menu float_copying.texi(,40) * Copying and floats:: float_copying.texi(,41) @end menu float_copying.texi(,42) float_copying.texi(,43) @node Copying and floats float_copying.texi(,44) @appendix Copying and floats float_copying.texi(,45) float_copying.texi(,46) In the appendix, we print the references and the copying once more float_copying.texi(,47) and the list of coyright notices (listoffloats). float_copying.texi(,48) float_copying.texi(,49) See the caption @ref{public domain anchor}. float_copying.texi(,50) float_copying.texi(,51) See the float @ref{public domain}. float_copying.texi(,52) float_copying.texi(,53) @cindex listofloats float_copying.texi(,54) float_copying.texi(,55) @insertcopying float_copying.texi(,56) @insertcopying float_copying.texi(,57) float_copying.texi(,58) @subheading listoffloats float_copying.texi(,59) @listoffloats Copyright notice float_copying.texi(,60) float_copying.texi(,61) @subheading printindex float_copying.texi(,62) @printindex cp float_copying.texi(,63) float_copying.texi(,64) @bye texi2html-1.82/test/formatting/res/texi_float_copying/float_copying.passtexi0000644000175000017500000000474111264347123031470 0ustar flichtenheldflichtenheldfloat_copying.texi(,2) float_copying.texi(,3) @setfilename float_copying.info float_copying.texi(,4) float_copying.texi(,5) @copying float_copying.texi(,6) float_copying.texi(,7) @float Copyright notice, public domain float_copying.texi(,8) float_copying.texi(,9) Public domain is not really a licence, as it means than float_copying.texi(,10) the author abandon his copyright. float_copying.texi(,11) float_copying.texi(,12) @caption{The Public Domain notice@footnote{ float_copying.texi(,13) The caption copying footnote float_copying.texi(,14) @anchor{caption copying footnote anchor} float_copying.texi(,15) float_copying.texi(,16) @cindex indexed caption copying footnote float_copying.texi(,17) float_copying.texi(,18) see @ref{Copying and floats}. float_copying.texi(,19) float_copying.texi(,20) } float_copying.texi(,21) float_copying.texi(,22) @anchor{public domain anchor} float_copying.texi(,23) @cindex indexed caption float_copying.texi(,24) } float_copying.texi(,25) @end float float_copying.texi(,26) @end copying float_copying.texi(,27) float_copying.texi(,28) @node Top float_copying.texi(,29) @top Top float_copying.texi(,30) float_copying.texi(,31) @cindex Top float_copying.texi(,32) float_copying.texi(,33) See the caption @ref{public domain anchor}. float_copying.texi(,34) float_copying.texi(,35) See the float @ref{public domain}. float_copying.texi(,36) float_copying.texi(,37) @insertcopying float_copying.texi(,38) float_copying.texi(,39) @menu float_copying.texi(,40) * Copying and floats:: float_copying.texi(,41) @end menu float_copying.texi(,42) float_copying.texi(,43) @node Copying and floats float_copying.texi(,44) @appendix Copying and floats float_copying.texi(,45) float_copying.texi(,46) In the appendix, we print the references and the copying once more float_copying.texi(,47) and the list of coyright notices (listoffloats). float_copying.texi(,48) float_copying.texi(,49) See the caption @ref{public domain anchor}. float_copying.texi(,50) float_copying.texi(,51) See the float @ref{public domain}. float_copying.texi(,52) float_copying.texi(,53) @cindex listofloats float_copying.texi(,54) float_copying.texi(,55) @insertcopying float_copying.texi(,56) @insertcopying float_copying.texi(,57) float_copying.texi(,58) @subheading listoffloats float_copying.texi(,59) @listoffloats Copyright notice float_copying.texi(,60) float_copying.texi(,61) @subheading printindex float_copying.texi(,62) @printindex cp float_copying.texi(,63) float_copying.texi(,64) @bye texi2html-1.82/test/formatting/res/texi_float_copying/float_copying.texi0000644000175000017500000000204111264347123030570 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename float_copying.info @copying @float Copyright notice, public domain Public domain is not really a licence, as it means than the author abandon his copyright. @caption{The Public Domain notice@footnote{ The caption copying footnote @anchor{caption copying footnote anchor} @cindex indexed caption copying footnote see @ref{Copying and floats}. } @anchor{public domain anchor} @cindex indexed caption } @end float @end copying @node Top @top Top @cindex Top See the caption @ref{public domain anchor}. See the float @ref{public domain}. @insertcopying @menu * Copying and floats:: @end menu @node Copying and floats @appendix Copying and floats In the appendix, we print the references and the copying once more and the list of coyright notices (listoffloats). See the caption @ref{public domain anchor}. See the float @ref{public domain}. @cindex listofloats @insertcopying @insertcopying @subheading listoffloats @listoffloats Copyright notice @subheading printindex @printindex cp @bye texi2html-1.82/test/formatting/res/texi_double_style_paragraph/0000755000175000017500000000000011264347123026725 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_double_style_paragraph/double_style_paragraph.texi0000644000175000017500000000026611264347123034343 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename double_style_paragraph.info @node Top @top 2 style commands enclosing 2 paragraphs @emph{@strong{ First para. Second para. } } @bye texi2html-1.82/test/formatting/res/texi_double_style_paragraph/double_style_paragraph.passtexi0000644000175000017500000000113411264347123035225 0ustar flichtenheldflichtenhelddouble_style_paragraph.texi(,2) double_style_paragraph.texi(,3) @setfilename double_style_paragraph.info double_style_paragraph.texi(,4) double_style_paragraph.texi(,5) @node Top double_style_paragraph.texi(,6) @top 2 style commands enclosing 2 paragraphs double_style_paragraph.texi(,7) double_style_paragraph.texi(,8) @emph{@strong{ double_style_paragraph.texi(,9) First para. double_style_paragraph.texi(,10) double_style_paragraph.texi(,11) Second para. double_style_paragraph.texi(,12) } double_style_paragraph.texi(,13) } double_style_paragraph.texi(,14) double_style_paragraph.texi(,15) @bye texi2html-1.82/test/formatting/res/texi_double_style_paragraph/double_style_paragraph.passfirst0000644000175000017500000000113411264347123035403 0ustar flichtenheldflichtenhelddouble_style_paragraph.texi(,2) double_style_paragraph.texi(,3) @setfilename double_style_paragraph.info double_style_paragraph.texi(,4) double_style_paragraph.texi(,5) @node Top double_style_paragraph.texi(,6) @top 2 style commands enclosing 2 paragraphs double_style_paragraph.texi(,7) double_style_paragraph.texi(,8) @emph{@strong{ double_style_paragraph.texi(,9) First para. double_style_paragraph.texi(,10) double_style_paragraph.texi(,11) Second para. double_style_paragraph.texi(,12) } double_style_paragraph.texi(,13) } double_style_paragraph.texi(,14) double_style_paragraph.texi(,15) @bye texi2html-1.82/test/formatting/res/texi_double_style_paragraph/double_style_paragraph.20000644000175000017500000000000011264347123033515 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/formatting_docbook/0000755000175000017500000000000011264347123025027 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/formatting_docbook/formatting.xml0000644000175000017500000033737011264347123027740 0ustar flichtenheldflichtenheld ]> Top section In copying < > " & ' ` “simple-double–three—four—-” code: ``simple-double--three---four----'' asis: “simple-double–three—four—-” strong: “simple-double–three—four—-” kbd: ``simple-double--three---four----'' ``simple-double--three—four—-'' –option–foption @"u ü @"{U} Ü @~n ñ @^a â @'e é @=o o¯ @`i ì @'{e} é @'{@dotless{i}} í @dotless{i} i @dotless{j} j @`{@=E} E¯` @l{} /l @,{@'C} C', @,c ç @,c@"u çü @* @ followed by a space @ followed by a tab @ followed by a new line @- @| @: @! ! @? ? @. . @@ @ @} } @{ { @/ foo vs. bar. colon :And something else. semi colon ;. And ? ?. Now ! !@ but , , @TeX &tex; @LaTeX &latex; @bullet • @copyright © @dots … @enddots …. @equiv == @error error--> @expansion → @minus − @point -!- @print -| @result ⇒ @today a sunny day @aa å @AA Å @ae æ @oe œ @AE Æ @OE Œ @o ø @O Ø @ss ß @l /l @L /L @exclamdown ¡ @questiondown ¿ @pounds £ @registeredsymbol ® @ordf ª @ordm º @comma , @quotedblleft “ @quotedblright ” @quoteleft ‘ @quoteright ’ @quotedblbase „ @quotesinglbase ‚ @guillemetleft « @guillemetright » @guillemotleft « @guillemotright » @guilsinglleft ‹ @guilsinglright › @textdegree ° @euro € @arrow → @leq ≤ @geq ≥ @acronym{--a,an accronym} –a (an accronym) @acronym{--a} –a @abbr{@'E--. @comma{}A., @'Etude Autonome } É–. ,A. (Étude Autonome) @abbr{@'E--. @comma{}A.} É–. ,A. @asis{--a} –a @b{--a} –a @cite{--a} –a @code{--a} --a @command{--a} --a @ctrl{--a} –a @dfn{--a} –a @dmn{--a} –a @email{--a,--b} –b @email{,--b} –b @email{--a} --a @emph{--a} –a @env{--a} --a @file{--a} --a @i{--a} –a @kbd{--a} --a @key{--a} --a @math{--a {\frac{1}{2}} @minus{}} –a \frac12 − @option{--a} @r{--a} –a @samp{--a}--a@sc{--a} –a @strong{--a} –a @t{--a} –a @sansserif{--a} –a @titlefont{--a} –a @indicateurl{--a} --a @uref{--a,--b} –b @uref{--a} --a @uref{,--b} –b @uref{--a,--b,--c} –c @uref{,--b,--c} –c @uref{--a,,--c} –c @uref{,,--c} –c @url{--a,--b} –b @url{--a,} --a @url{,--b} –b @var{--a} –a @verb{:--a:} --a @verb{:a < & @ % " -- b:} a < & @ % " -- b @w{} @H{a} a'' @H{--a} –a'' @dotaccent{a} a. @dotaccent{--a} –a. @ringaccent{a} a* @ringaccent{--a} –a* @tieaccent{a} a[ @tieaccent{--a} –a[ @u{a} a( @u{--a} –a( @ubaraccent{a} a_ @ubaraccent{--a} –a_ @udotaccent{a} .a @udotaccent{--a} .–a @v{a} a< @v{--a} –a< @,{c} ç @,{--c} –c, @footnote{in footnote} in footnote @footnote{in footnote2} in footnote2 @image{f--ile} ggg aaa @image{f--ile,l--i} ggg aaa @image{f--ile,,l--e} ggg aaa @image{f--ile,,,alt} ggg aaa @image{f--ile,,,,e-d-xt} ggg aaa @image{f--ile,aze,az,alt,e--xt} ggg aaa @image{f-ile,aze,,a--lt} @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} @clicksequence{click @click{} A} click → A After clickstyle ⇒ @clicksequence{click @click{} A} click ⇒ A
    A quot—ation
    A Note A note Caution Important a Tip a Warning.
    something é &tex;: The something é &tex; is here.
    @ at the end of line A @ at the end of the @quotation line.
    something, other thing: something, other thing
    Note, the note: Note, the note
    Empty:
    :
    :
    i–temize i–tem + b–ullet minu–s e–mph item e–mph item index entry within itemize i–tem 1 i–tem 2 e–numerate mu–ltitable headitem another tab mu–ltitable item multitable tab mu–ltitable item 2 multitable tab 2 index entry within multitable lone mu–ltitable item truc bidule e--xample some text s--mallexample d–isplay s–malldisplay l--isp s--malllisp f–ormat s–mallformat d--effn_named--effn_name a--rguments...
    d–effn
    de--ffn_namede--ffn_name ar--guments more args even more so
    def–fn
    ii a g index entry within deffntructruc log traplog trap log trap1 log trap1 log trap2 log trap2 id uleid ule truc id ‘i’ uleid ‘i’ ule truc machinmachin bidule machinbidule machin machinmachin followedfollowed by a comment aa b c d e f g h i deffnxdeffnx before end deffn deffndeffn deffndeffn with deffnx deffnxdeffnx ii a g tructruc
    text in def item for second def item
    d--efvr_named--efvr_name
    d–efvr
    d--eftypefn_namet--yped--eftypefn_name a--rguments...
    d–eftypefn
    d--eftypeop_name on c--lasst--yped--eftypeop_name a--rguments...
    d–eftypeop
    d--eftypevr_namet--yped--eftypevr_name
    d–eftypevr
    d--efcv_namec--lassd--efcv_name
    d–efcv
    d--efop_name on c--lassc--lassd--efop_name a--rguments...
    d–efop
    d--eftp_named--eftp_name a--ttributes...
    d–eftp
    d--efun_named--efun_name a--rguments...
    d–efun
    d--efmac_named--efmac_name a--rguments...
    d–efmac
    d--efspec_named--efspec_name a--rguments...
    d–efspec
    d--efvar_named--efvar_name argvar argvar1
    d–efvar
    d--efopt_named--efopt_name
    d–efopt
    d--eftypefun_namet--yped--eftypefun_name a--rguments...
    d–eftypefun
    d--eftypevar_namet--yped--eftypevar_name
    d–eftypevar
    d--efivar_namec--lassd--efivar_name
    d–efivar
    d--eftypeivar_name of c--lasst--yped--eftypeivar_name
    d–eftypeivar
    d--efmethod_name on c--lassc--lassd--efmethod_name a--rguments...
    d–efmethod
    d--eftypemethod_name on c--lasst--yped--eftypemethod_name a--rguments...
    d–eftypemethod
    @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} See section ``t—itle@'' in ma—nual@. @ref{chapter, cross ref name, title, file name, manual} section ``title'' in manual @pxref{chapter, cross ref name, title, file name, manual} see section ``title'' in manual @inforef{chapter, cross ref name, file name} *note cross ref name: (file name)chapter @ref{chapter} @xref{chapter} See . @pxref{chapter} see @ref{s--ect@comma{}ion} @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } section ``a comma, in title'' in a , in manual name @ref{chapter,cross ref name} cross ref name @ref{chapter,,title} title @ref{chapter,,,file name} @ref{chapter,,,,manual} section ``chapter'' in manual @ref{chapter,cross ref name,title,} title @ref{chapter,cross ref name,,file name} @ref{chapter,cross ref name,,,manual} section ``chapter'' in manual @ref{chapter,cross ref name,title,file name} @ref{chapter,cross ref name,title,,manual} section ``title'' in manual @ref{chapter,cross ref name,title, file name, manual} section ``title'' in manual @ref{chapter,,title,file name} @ref{chapter,,title,,manual} section ``title'' in manual @ref{chapter,,title, file name, manual} section ``title'' in manual @ref{chapter,,,file name,manual} section ``chapter'' in manual @ref{(pman)anode,cross ref name} cross ref name @ref{(pman)anode,,title} title @ref{(pman)anode,,,file name} @ref{(pman)anode,,,,manual} section ``(pman)anode'' in manual @ref{(pman)anode,cross ref name,title,} title @ref{(pman)anode,cross ref name,,file name} @ref{(pman)anode,cross ref name,,,manual} section ``(pman)anode'' in manual @ref{(pman)anode,cross ref name,title,file name} @ref{(pman)anode,cross ref name,title,,manual} section ``title'' in manual @ref{(pman)anode,cross ref name,title, file name, manual} section ``title'' in manual @ref{(pman)anode,,title,file name} @ref{(pman)anode,,title,,manual} section ``title'' in manual @ref{(pman)anode,,title, file name, manual} section ``title'' in manual @ref{(pman)anode,,,file name,manual} section ``(pman)anode'' in manual @inforef{chapter, cross ref name, file name} *note cross ref name: (file name)chapter @inforef{chapter} *note ()chapter:: @inforef{chapter, cross ref name} *note cross ref name: ()chapter @inforef{chapter,,file name} *note (file name)chapter:: @inforef{node, cross ref name, file name} *note cross ref name: (file name)node @inforef{node} *note ()node:: @inforef{node, cross ref name} *note cross ref name: ()node @inforef{node,,file name} *note (file name)node:: @inforef{chapter, cross ref name, file name, spurious arg} *note cross ref name: (file name, spurious arg)chapter @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} *note a , in cross ref: (a comma, in file)s--ect,ion • a l–ine a b l–ine − a index entry between item and itemx− b l–ine c–artouche f–lushleft f–lushright ce–ntered line \input texinfo @c -*-texinfo-*- @setfilename simplest.info @node Top This is a very simple texi manual @ <>. @bye in verbatim '' docbook '' majorheading chapheading heading subheading subsubheading
    Insertcopying in normal text In copying < > " & ' ` “simple-double–three—four—-” code: ``simple-double--three---four----'' asis: “simple-double–three—four—-” strong: “simple-double–three—four—-” kbd: ``simple-double--three---four----'' ``simple-double--three—four—-'' –option–foption @"u ü @"{U} Ü @~n ñ @^a â @'e é @=o o¯ @`i ì @'{e} é @'{@dotless{i}} í @dotless{i} i @dotless{j} j @`{@=E} E¯` @l{} /l @,{@'C} C', @,c ç @,c@"u çü @* @ followed by a space @ followed by a tab @ followed by a new line @- @| @: @! ! @? ? @. . @@ @ @} } @{ { @/ foo vs. bar. colon :And something else. semi colon ;. And ? ?. Now ! !@ but , , @TeX &tex; @LaTeX &latex; @bullet • @copyright © @dots … @enddots …. @equiv == @error error--> @expansion → @minus − @point -!- @print -| @result ⇒ @today a sunny day @aa å @AA Å @ae æ @oe œ @AE Æ @OE Œ @o ø @O Ø @ss ß @l /l @L /L @exclamdown ¡ @questiondown ¿ @pounds £ @registeredsymbol ® @ordf ª @ordm º @comma , @quotedblleft “ @quotedblright ” @quoteleft ‘ @quoteright ’ @quotedblbase „ @quotesinglbase ‚ @guillemetleft « @guillemetright » @guillemotleft « @guillemotright » @guilsinglleft ‹ @guilsinglright › @textdegree ° @euro € @arrow → @leq ≤ @geq ≥ @acronym{--a,an accronym} –a (an accronym) @acronym{--a} –a @abbr{@'E--. @comma{}A., @'Etude Autonome } É–. ,A. (Étude Autonome) @abbr{@'E--. @comma{}A.} É–. ,A. @asis{--a} –a @b{--a} –a @cite{--a} –a @code{--a} --a @command{--a} --a @ctrl{--a} –a @dfn{--a} –a @dmn{--a} –a @email{--a,--b} –b @email{,--b} –b @email{--a} --a @emph{--a} –a @env{--a} --a @file{--a} --a @i{--a} –a @kbd{--a} --a @key{--a} --a @math{--a {\frac{1}{2}} @minus{}} –a \frac12 − @option{--a} @r{--a} –a @samp{--a}--a@sc{--a} –a @strong{--a} –a @t{--a} –a @sansserif{--a} –a @titlefont{--a} –a @indicateurl{--a} --a @uref{--a,--b} –b @uref{--a} --a @uref{,--b} –b @uref{--a,--b,--c} –c @uref{,--b,--c} –c @uref{--a,,--c} –c @uref{,,--c} –c @url{--a,--b} –b @url{--a,} --a @url{,--b} –b @var{--a} –a @verb{:--a:} --a @verb{:a < & @ % " -- b:} a < & @ % " -- b @w{} @H{a} a'' @H{--a} –a'' @dotaccent{a} a. @dotaccent{--a} –a. @ringaccent{a} a* @ringaccent{--a} –a* @tieaccent{a} a[ @tieaccent{--a} –a[ @u{a} a( @u{--a} –a( @ubaraccent{a} a_ @ubaraccent{--a} –a_ @udotaccent{a} .a @udotaccent{--a} .–a @v{a} a< @v{--a} –a< @,{c} ç @,{--c} –c, @footnote{in footnote} in footnote @footnote{in footnote2} in footnote2 @image{f--ile} ggg aaa @image{f--ile,l--i} ggg aaa @image{f--ile,,l--e} ggg aaa @image{f--ile,,,alt} ggg aaa @image{f--ile,,,,e-d-xt} ggg aaa @image{f--ile,aze,az,alt,e--xt} ggg aaa @image{f-ile,aze,,a--lt} @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} @clicksequence{click @click{} A} click → A After clickstyle ⇒ @clicksequence{click @click{} A} click ⇒ A
    A quot—ation
    A Note A note Caution Important a Tip a Warning.
    something é &tex;: The something é &tex; is here.
    @ at the end of line A @ at the end of the @quotation line.
    something, other thing: something, other thing
    Note, the note: Note, the note
    Empty:
    :
    :
    i–temize i–tem + b–ullet minu–s e–mph item e–mph item index entry within itemize i–tem 1 i–tem 2 e–numerate mu–ltitable headitem another tab mu–ltitable item multitable tab mu–ltitable item 2 multitable tab 2 index entry within multitable lone mu–ltitable item truc bidule e--xample some text s--mallexample d–isplay s–malldisplay l--isp s--malllisp f–ormat s–mallformat d--effn_named--effn_name a--rguments...
    d–effn
    de--ffn_namede--ffn_name ar--guments more args even more so
    def–fn
    ii a g index entry within deffntructruc log traplog trap log trap1 log trap1 log trap2 log trap2 id uleid ule truc id ‘i’ uleid ‘i’ ule truc machinmachin bidule machinbidule machin machinmachin followedfollowed by a comment aa b c d e f g h i deffnxdeffnx before end deffn deffndeffn deffndeffn with deffnx deffnxdeffnx ii a g tructruc
    text in def item for second def item
    d--efvr_named--efvr_name
    d–efvr
    d--eftypefn_namet--yped--eftypefn_name a--rguments...
    d–eftypefn
    d--eftypeop_name on c--lasst--yped--eftypeop_name a--rguments...
    d–eftypeop
    d--eftypevr_namet--yped--eftypevr_name
    d–eftypevr
    d--efcv_namec--lassd--efcv_name
    d–efcv
    d--efop_name on c--lassc--lassd--efop_name a--rguments...
    d–efop
    d--eftp_named--eftp_name a--ttributes...
    d–eftp
    d--efun_named--efun_name a--rguments...
    d–efun
    d--efmac_named--efmac_name a--rguments...
    d–efmac
    d--efspec_named--efspec_name a--rguments...
    d–efspec
    d--efvar_named--efvar_name argvar argvar1
    d–efvar
    d--efopt_named--efopt_name
    d–efopt
    d--eftypefun_namet--yped--eftypefun_name a--rguments...
    d–eftypefun
    d--eftypevar_namet--yped--eftypevar_name
    d–eftypevar
    d--efivar_namec--lassd--efivar_name
    d–efivar
    d--eftypeivar_name of c--lasst--yped--eftypeivar_name
    d–eftypeivar
    d--efmethod_name on c--lassc--lassd--efmethod_name a--rguments...
    d–efmethod
    d--eftypemethod_name on c--lasst--yped--eftypemethod_name a--rguments...
    d–eftypemethod
    @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} See section ``t—itle@'' in ma—nual@. @ref{chapter, cross ref name, title, file name, manual} section ``title'' in manual @pxref{chapter, cross ref name, title, file name, manual} see section ``title'' in manual @inforef{chapter, cross ref name, file name} *note cross ref name: (file name)chapter @ref{chapter} @xref{chapter} See . @pxref{chapter} see @ref{s--ect@comma{}ion} @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } section ``a comma, in title'' in a , in manual name @ref{chapter,cross ref name} cross ref name @ref{chapter,,title} title @ref{chapter,,,file name} @ref{chapter,,,,manual} section ``chapter'' in manual @ref{chapter,cross ref name,title,} title @ref{chapter,cross ref name,,file name} @ref{chapter,cross ref name,,,manual} section ``chapter'' in manual @ref{chapter,cross ref name,title,file name} @ref{chapter,cross ref name,title,,manual} section ``title'' in manual @ref{chapter,cross ref name,title, file name, manual} section ``title'' in manual @ref{chapter,,title,file name} @ref{chapter,,title,,manual} section ``title'' in manual @ref{chapter,,title, file name, manual} section ``title'' in manual @ref{chapter,,,file name,manual} section ``chapter'' in manual @ref{(pman)anode,cross ref name} cross ref name @ref{(pman)anode,,title} title @ref{(pman)anode,,,file name} @ref{(pman)anode,,,,manual} section ``(pman)anode'' in manual @ref{(pman)anode,cross ref name,title,} title @ref{(pman)anode,cross ref name,,file name} @ref{(pman)anode,cross ref name,,,manual} section ``(pman)anode'' in manual @ref{(pman)anode,cross ref name,title,file name} @ref{(pman)anode,cross ref name,title,,manual} section ``title'' in manual @ref{(pman)anode,cross ref name,title, file name, manual} section ``title'' in manual @ref{(pman)anode,,title,file name} @ref{(pman)anode,,title,,manual} section ``title'' in manual @ref{(pman)anode,,title, file name, manual} section ``title'' in manual @ref{(pman)anode,,,file name,manual} section ``(pman)anode'' in manual @inforef{chapter, cross ref name, file name} *note cross ref name: (file name)chapter @inforef{chapter} *note ()chapter:: @inforef{chapter, cross ref name} *note cross ref name: ()chapter @inforef{chapter,,file name} *note (file name)chapter:: @inforef{node, cross ref name, file name} *note cross ref name: (file name)node @inforef{node} *note ()node:: @inforef{node, cross ref name} *note cross ref name: ()node @inforef{node,,file name} *note (file name)node:: @inforef{chapter, cross ref name, file name, spurious arg} *note cross ref name: (file name, spurious arg)chapter @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} *note a , in cross ref: (a comma, in file)s--ect,ion • a l–ine a b l–ine − a index entry between item and itemx− b l–ine c–artouche f–lushleft f–lushright ce–ntered line \input texinfo @c -*-texinfo-*- @setfilename simplest.info @node Top This is a very simple texi manual @ <>. @bye in verbatim '' docbook '' majorheading chapheading heading subheading subsubheading Normal text < > " & ' ` “simple-double–three—four—-” code: ``simple-double--three---four----'' asis: “simple-double–three—four—-” strong: “simple-double–three—four—-” kbd: ``simple-double--three---four----'' ``simple-double--three—four—-'' –option–foption @"u ü @"{U} Ü @~n ñ @^a â @'e é @=o o¯ @`i ì @'{e} é @'{@dotless{i}} í @dotless{i} i @dotless{j} j @`{@=E} E¯` @l{} /l @,{@'C} C', @,c ç @,c@"u çü @* @ followed by a space @ followed by a tab @ followed by a new line @- @| @: @! ! @? ? @. . @@ @ @} } @{ { @/ foo vs. bar. colon :And something else. semi colon ;. And ? ?. Now ! !@ but , , @TeX &tex; @LaTeX &latex; @bullet • @copyright © @dots … @enddots …. @equiv == @error error--> @expansion → @minus − @point -!- @print -| @result ⇒ @today a sunny day @aa å @AA Å @ae æ @oe œ @AE Æ @OE Œ @o ø @O Ø @ss ß @l /l @L /L @exclamdown ¡ @questiondown ¿ @pounds £ @registeredsymbol ® @ordf ª @ordm º @comma , @quotedblleft “ @quotedblright ” @quoteleft ‘ @quoteright ’ @quotedblbase „ @quotesinglbase ‚ @guillemetleft « @guillemetright » @guillemotleft « @guillemotright » @guilsinglleft ‹ @guilsinglright › @textdegree ° @euro € @arrow → @leq ≤ @geq ≥ @acronym{--a,an accronym} –a (an accronym) @acronym{--a} –a @abbr{@'E--. @comma{}A., @'Etude Autonome } É–. ,A. (Étude Autonome) @abbr{@'E--. @comma{}A.} É–. ,A. @asis{--a} –a @b{--a} –a @cite{--a} –a @code{--a} --a @command{--a} --a @ctrl{--a} –a @dfn{--a} –a @dmn{--a} –a @email{--a,--b} –b @email{,--b} –b @email{--a} --a @emph{--a} –a @env{--a} --a @file{--a} --a @i{--a} –a @kbd{--a} --a @key{--a} --a @math{--a {\frac{1}{2}} @minus{}} –a \frac12 − @option{--a} @r{--a} –a @samp{--a}--a@sc{--a} –a @strong{--a} –a @t{--a} –a @sansserif{--a} –a @titlefont{--a} –a @indicateurl{--a} --a @uref{--a,--b} –b @uref{--a} --a @uref{,--b} –b @uref{--a,--b,--c} –c @uref{,--b,--c} –c @uref{--a,,--c} –c @uref{,,--c} –c @url{--a,--b} –b @url{--a,} --a @url{,--b} –b @var{--a} –a @verb{:--a:} --a @verb{:a < & @ % " -- b:} a < & @ % " -- b @w{} @H{a} a'' @H{--a} –a'' @dotaccent{a} a. @dotaccent{--a} –a. @ringaccent{a} a* @ringaccent{--a} –a* @tieaccent{a} a[ @tieaccent{--a} –a[ @u{a} a( @u{--a} –a( @ubaraccent{a} a_ @ubaraccent{--a} –a_ @udotaccent{a} .a @udotaccent{--a} .–a @v{a} a< @v{--a} –a< @,{c} ç @,{--c} –c, @footnote{in footnote} in footnote @footnote{in footnote2} in footnote2 @image{f--ile} ggg aaa @image{f--ile,l--i} ggg aaa @image{f--ile,,l--e} ggg aaa @image{f--ile,,,alt} ggg aaa @image{f--ile,,,,e-d-xt} ggg aaa @image{f--ile,aze,az,alt,e--xt} ggg aaa @image{f-ile,aze,,a--lt} @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} @clicksequence{click @click{} A} click → A After clickstyle ⇒ @clicksequence{click @click{} A} click ⇒ A
    A quot—ation
    A Note A note Caution Important a Tip a Warning.
    something é &tex;: The something é &tex; is here.
    @ at the end of line A @ at the end of the @quotation line.
    something, other thing: something, other thing
    Note, the note: Note, the note
    Empty:
    :
    :
    i–temize i–tem + b–ullet minu–s e–mph item e–mph item index entry within itemize i–tem 1 i–tem 2 e–numerate mu–ltitable headitem another tab mu–ltitable item multitable tab mu–ltitable item 2 multitable tab 2 index entry within multitable lone mu–ltitable item truc bidule e--xample some text s--mallexample d–isplay s–malldisplay l--isp s--malllisp f–ormat s–mallformat d--effn_named--effn_name a--rguments...
    d–effn
    de--ffn_namede--ffn_name ar--guments more args even more so
    def–fn
    ii a g index entry within deffntructruc log traplog trap log trap1 log trap1 log trap2 log trap2 id uleid ule truc id ‘i’ uleid ‘i’ ule truc machinmachin bidule machinbidule machin machinmachin followedfollowed by a comment aa b c d e f g h i deffnxdeffnx before end deffn deffndeffn deffndeffn with deffnx deffnxdeffnx ii a g tructruc
    text in def item for second def item
    d--efvr_named--efvr_name
    d–efvr
    d--eftypefn_namet--yped--eftypefn_name a--rguments...
    d–eftypefn
    d--eftypeop_name on c--lasst--yped--eftypeop_name a--rguments...
    d–eftypeop
    d--eftypevr_namet--yped--eftypevr_name
    d–eftypevr
    d--efcv_namec--lassd--efcv_name
    d–efcv
    d--efop_name on c--lassc--lassd--efop_name a--rguments...
    d–efop
    d--eftp_named--eftp_name a--ttributes...
    d–eftp
    d--efun_named--efun_name a--rguments...
    d–efun
    d--efmac_named--efmac_name a--rguments...
    d–efmac
    d--efspec_named--efspec_name a--rguments...
    d–efspec
    d--efvar_named--efvar_name argvar argvar1
    d–efvar
    d--efopt_named--efopt_name
    d–efopt
    d--eftypefun_namet--yped--eftypefun_name a--rguments...
    d–eftypefun
    d--eftypevar_namet--yped--eftypevar_name
    d–eftypevar
    d--efivar_namec--lassd--efivar_name
    d–efivar
    d--eftypeivar_name of c--lasst--yped--eftypeivar_name
    d–eftypeivar
    d--efmethod_name on c--lassc--lassd--efmethod_name a--rguments...
    d–efmethod
    d--eftypemethod_name on c--lasst--yped--eftypemethod_name a--rguments...
    d–eftypemethod
    @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} See section ``t—itle@'' in ma—nual@. @ref{chapter, cross ref name, title, file name, manual} section ``title'' in manual @pxref{chapter, cross ref name, title, file name, manual} see section ``title'' in manual @inforef{chapter, cross ref name, file name} *note cross ref name: (file name)chapter @ref{chapter} @xref{chapter} See . @pxref{chapter} see @ref{s--ect@comma{}ion} @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } section ``a comma, in title'' in a , in manual name @ref{chapter,cross ref name} cross ref name @ref{chapter,,title} title @ref{chapter,,,file name} @ref{chapter,,,,manual} section ``chapter'' in manual @ref{chapter,cross ref name,title,} title @ref{chapter,cross ref name,,file name} @ref{chapter,cross ref name,,,manual} section ``chapter'' in manual @ref{chapter,cross ref name,title,file name} @ref{chapter,cross ref name,title,,manual} section ``title'' in manual @ref{chapter,cross ref name,title, file name, manual} section ``title'' in manual @ref{chapter,,title,file name} @ref{chapter,,title,,manual} section ``title'' in manual @ref{chapter,,title, file name, manual} section ``title'' in manual @ref{chapter,,,file name,manual} section ``chapter'' in manual @ref{(pman)anode,cross ref name} cross ref name @ref{(pman)anode,,title} title @ref{(pman)anode,,,file name} @ref{(pman)anode,,,,manual} section ``(pman)anode'' in manual @ref{(pman)anode,cross ref name,title,} title @ref{(pman)anode,cross ref name,,file name} @ref{(pman)anode,cross ref name,,,manual} section ``(pman)anode'' in manual @ref{(pman)anode,cross ref name,title,file name} @ref{(pman)anode,cross ref name,title,,manual} section ``title'' in manual @ref{(pman)anode,cross ref name,title, file name, manual} section ``title'' in manual @ref{(pman)anode,,title,file name} @ref{(pman)anode,,title,,manual} section ``title'' in manual @ref{(pman)anode,,title, file name, manual} section ``title'' in manual @ref{(pman)anode,,,file name,manual} section ``(pman)anode'' in manual @inforef{chapter, cross ref name, file name} *note cross ref name: (file name)chapter @inforef{chapter} *note ()chapter:: @inforef{chapter, cross ref name} *note cross ref name: ()chapter @inforef{chapter,,file name} *note (file name)chapter:: @inforef{node, cross ref name, file name} *note cross ref name: (file name)node @inforef{node} *note ()node:: @inforef{node, cross ref name} *note cross ref name: ()node @inforef{node,,file name} *note (file name)node:: @inforef{chapter, cross ref name, file name, spurious arg} *note cross ref name: (file name, spurious arg)chapter @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} *note a , in cross ref: (a comma, in file)s--ect,ion • a l–ine a b l–ine − a index entry between item and itemx− b l–ine c–artouche f–lushleft f–lushright ce–ntered line \input texinfo @c -*-texinfo-*- @setfilename simplest.info @node Top This is a very simple texi manual @ <>. @bye in verbatim '' docbook '' majorheading chapheading heading subheading subsubheading In example. < > " & ' ` ``simple-double--three---four----'' code: ``simple-double--three---four----'' asis: ``simple-double--three---four----'' strong: ``simple-double--three---four----'' kbd: ``simple-double--three---four----'' ``simple-double--three---four----'' –option–foption @"u ü @"{U} Ü @~n ñ @^a â @'e é @=o o¯ @`i ì @'{e} é @'{@dotless{i}} í @dotless{i} i @dotless{j} j @`{@=E} E¯` @l{} /l @,{@'C} C', @,c ç @,c@"u çü @* @ followed by a space @ followed by a tab @ followed by a new line @- @| @: @! ! @? ? @. . @@ @ @} } @{ { @/ foo vs. bar. colon :And something else. semi colon ;. And ? ?. Now ! !@ but , , @TeX &tex; @LaTeX &latex; @bullet • @copyright © @dots … @enddots …. @equiv == @error error--> @expansion → @minus − @point -!- @print -| @result ⇒ @today a sunny day @aa å @AA Å @ae æ @oe œ @AE Æ @OE Œ @o ø @O Ø @ss ß @l /l @L /L @exclamdown ¡ @questiondown ¿ @pounds £ @registeredsymbol ® @ordf ª @ordm º @comma , @quotedblleft “ @quotedblright ” @quoteleft ‘ @quoteright ’ @quotedblbase „ @quotesinglbase ‚ @guillemetleft « @guillemetright » @guillemotleft « @guillemotright » @guilsinglleft ‹ @guilsinglright › @textdegree ° @euro € @arrow → @leq ≤ @geq ≥ @acronym{--a,an accronym} --a (an accronym) @acronym{--a} --a @abbr{@'E--. @comma{}A., @'Etude Autonome } É--. ,A. (Étude Autonome) @abbr{@'E--. @comma{}A.} É--. ,A. @asis{--a} --a @b{--a} --a @cite{--a} --a @code{--a} --a @command{--a} --a @ctrl{--a} --a @dfn{--a} --a @dmn{--a} --a @email{--a,--b} --b @email{,--b} --b @email{--a} --a @emph{--a} --a @env{--a} --a @file{--a} --a @i{--a} --a @kbd{--a} --a @key{--a} --a @math{--a {\frac{1}{2}} @minus{}} --a \frac12 − @option{--a} @r{--a} --a @samp{--a}--a@sc{--a} --a @strong{--a} --a @t{--a} --a @sansserif{--a} --a @titlefont{--a} --a @indicateurl{--a} --a @uref{--a,--b} --b @uref{--a} --a @uref{,--b} --b @uref{--a,--b,--c} --c @uref{,--b,--c} --c @uref{--a,,--c} --c @uref{,,--c} --c @url{--a,--b} --b @url{--a,} --a @url{,--b} --b @var{--a} --a @verb{:--a:} --a @verb{:a < & @ % " -- b:} a < & @ % " -- b @w{} @H{a} a'' @H{--a} --a'' @dotaccent{a} a. @dotaccent{--a} --a. @ringaccent{a} a* @ringaccent{--a} --a* @tieaccent{a} a[ @tieaccent{--a} --a[ @u{a} a( @u{--a} --a( @ubaraccent{a} a_ @ubaraccent{--a} --a_ @udotaccent{a} .a @udotaccent{--a} .--a @v{a} a< @v{--a} --a< @,{c} ç @,{--c} --c, @footnote{in footnote} in footnote @footnote{in footnote2} in footnote2 @image{f--ile} ggg aaa @image{f--ile,l--i} ggg aaa @image{f--ile,,l--e} ggg aaa @image{f--ile,,,alt} ggg aaa @image{f--ile,,,,e-d-xt} ggg aaa @image{f--ile,aze,az,alt,e--xt} ggg aaa @image{f-ile,aze,,a--lt} @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} @clicksequence{click @click{} A} click → A After clickstyle ⇒ @clicksequence{click @click{} A} click ⇒ A
    A quot---ation
    A Note A note Caution Important a Tip a Warning.
    something é &tex;: The something é &tex; is here.
    @ at the end of line A @ at the end of the @quotation line.
    something, other thing: something, other thing
    Note, the note: Note, the note
    Empty:
    :
    :
    i--temize i--tem + b--ullet minu--s e--mph item e--mph item index entry within itemize i--tem 1 i--tem 2 e--numerate mu--ltitable headitem another tab mu--ltitable item multitable tab mu--ltitable item 2 multitable tab 2 index entry within multitable lone mu--ltitable item truc bidule e--xample some text s--mallexample d--isplay s--malldisplay l--isp s--malllisp f--ormat s--mallformat d--effn_named--effn_name a--rguments...
    d--effn
    de--ffn_namede--ffn_name ar--guments more args even more so
    def--fn
    ii a g index entry within deffntructruc log traplog trap log trap1 log trap1 log trap2 log trap2 id uleid ule truc id ‘i’ uleid ‘i’ ule truc machinmachin bidule machinbidule machin machinmachin followedfollowed by a comment aa b c d e f g h i deffnxdeffnx before end deffn deffndeffn deffndeffn with deffnx deffnxdeffnx ii a g tructruc
    text in def item for second def item
    d--efvr_named--efvr_name
    d--efvr
    d--eftypefn_namet--yped--eftypefn_name a--rguments...
    d--eftypefn
    d--eftypeop_name on c--lasst--yped--eftypeop_name a--rguments...
    d--eftypeop
    d--eftypevr_namet--yped--eftypevr_name
    d--eftypevr
    d--efcv_namec--lassd--efcv_name
    d--efcv
    d--efop_name on c--lassc--lassd--efop_name a--rguments...
    d--efop
    d--eftp_named--eftp_name a--ttributes...
    d--eftp
    d--efun_named--efun_name a--rguments...
    d--efun
    d--efmac_named--efmac_name a--rguments...
    d--efmac
    d--efspec_named--efspec_name a--rguments...
    d--efspec
    d--efvar_named--efvar_name argvar argvar1
    d--efvar
    d--efopt_named--efopt_name
    d--efopt
    d--eftypefun_namet--yped--eftypefun_name a--rguments...
    d--eftypefun
    d--eftypevar_namet--yped--eftypevar_name
    d--eftypevar
    d--efivar_namec--lassd--efivar_name
    d--efivar
    d--eftypeivar_name of c--lasst--yped--eftypeivar_name
    d--eftypeivar
    d--efmethod_name on c--lassc--lassd--efmethod_name a--rguments...
    d--efmethod
    d--eftypemethod_name on c--lasst--yped--eftypemethod_name a--rguments...
    d--eftypemethod
    @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} See section ``t---itle@'' in ma---nual@. @ref{chapter, cross ref name, title, file name, manual} section ``title'' in manual @pxref{chapter, cross ref name, title, file name, manual} see section ``title'' in manual @inforef{chapter, cross ref name, file name} *note cross ref name: (file name)chapter @ref{chapter} @xref{chapter} See . @pxref{chapter} see @ref{s--ect@comma{}ion} @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } section ``a comma, in title'' in a , in manual name @ref{chapter,cross ref name} cross ref name @ref{chapter,,title} title @ref{chapter,,,file name} @ref{chapter,,,,manual} section ``chapter'' in manual @ref{chapter,cross ref name,title,} title @ref{chapter,cross ref name,,file name} @ref{chapter,cross ref name,,,manual} section ``chapter'' in manual @ref{chapter,cross ref name,title,file name} @ref{chapter,cross ref name,title,,manual} section ``title'' in manual @ref{chapter,cross ref name,title, file name, manual} section ``title'' in manual @ref{chapter,,title,file name} @ref{chapter,,title,,manual} section ``title'' in manual @ref{chapter,,title, file name, manual} section ``title'' in manual @ref{chapter,,,file name,manual} section ``chapter'' in manual @ref{(pman)anode,cross ref name} cross ref name @ref{(pman)anode,,title} title @ref{(pman)anode,,,file name} @ref{(pman)anode,,,,manual} section ``(pman)anode'' in manual @ref{(pman)anode,cross ref name,title,} title @ref{(pman)anode,cross ref name,,file name} @ref{(pman)anode,cross ref name,,,manual} section ``(pman)anode'' in manual @ref{(pman)anode,cross ref name,title,file name} @ref{(pman)anode,cross ref name,title,,manual} section ``title'' in manual @ref{(pman)anode,cross ref name,title, file name, manual} section ``title'' in manual @ref{(pman)anode,,title,file name} @ref{(pman)anode,,title,,manual} section ``title'' in manual @ref{(pman)anode,,title, file name, manual} section ``title'' in manual @ref{(pman)anode,,,file name,manual} section ``(pman)anode'' in manual @inforef{chapter, cross ref name, file name} *note cross ref name: (file name)chapter @inforef{chapter} *note ()chapter:: @inforef{chapter, cross ref name} *note cross ref name: ()chapter @inforef{chapter,,file name} *note (file name)chapter:: @inforef{node, cross ref name, file name} *note cross ref name: (file name)node @inforef{node} *note ()node:: @inforef{node, cross ref name} *note cross ref name: ()node @inforef{node,,file name} *note (file name)node:: @inforef{chapter, cross ref name, file name, spurious arg} *note cross ref name: (file name, spurious arg)chapter @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} *note a , in cross ref: (a comma, in file)s--ect,ion • a l--ine a b l--ine − a index entry between item and itemx− b l--ine c--artouche f--lushleft f--lushright ce--ntered line \input texinfo @c -*-texinfo-*- @setfilename simplest.info @node Top This is a very simple texi manual @ <>. @bye in verbatim '' docbook '' majorheading chapheading heading subheading subsubheading
    t–rucT–ruc.?at–rucT–ruc.?a cp fn vr ky pg tp
    chapter in footnote A section subsection subsubsection “simple-double–three—four—-” chapter 2
    texi2html-1.82/test/formatting/res/formatting_docbook/formatting.20000644000175000017500000000671611264347123027276 0ustar flichtenheldflichtenheld** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (in l. 352 in @copying) ** Empty index entry for @deffn (in l. 353 in @copying) ** Empty index entry for @deffn (in l. 354 in @copying) ** Empty index entry for @deffn (in l. 355 in @copying) ** Empty index entry for @deffn (in l. 356 in @copying) ** Empty index entry for @deffn (in l. 360 in @copying) ** Empty index entry for @deffn (in l. 363 in @copying) ** Empty index entry for @deffn (in l. 364 in @copying) ** Empty index entry for @deffn (in l. 352 in @copying) ** Empty index entry for @deffn (in l. 353 in @copying) ** Empty index entry for @deffn (in l. 354 in @copying) ** Empty index entry for @deffn (in l. 355 in @copying) ** Empty index entry for @deffn (in l. 356 in @copying) ** Empty index entry for @deffn (in l. 360 in @copying) ** Empty index entry for @deffn (in l. 363 in @copying) ** Empty index entry for @deffn (in l. 364 in @copying) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Cannot find @image file `f-ile.txt' ** Cannot find @image file `f--ile@..txt' i18n: missing string See section `@asis{}`%{section_name}'@asis{}' in @cite{%{book}} i18n: missing string section `@asis{}`%{section_name}'@asis{}' in @cite{%{book}} i18n: missing string see section `@asis{}`%{section_name}'@asis{}' in @cite{%{book}} i18n: missing string %{ref} i18n: missing string See %{ref} i18n: missing string see %{ref} i18n: missing string %{title_ref} ** Cannot find @image file `f-ile.txt' ** Cannot find @image file `f--ile@..txt' ** Cannot find @image file `f-ile.txt' ** Cannot find @image file `f--ile@..txt' ** Cannot find @image file `f-ile.txt' ** Cannot find @image file `f--ile@..txt' ** Cannot find @image file `f-ile.txt' ** Cannot find @image file `f--ile@..txt' ** Cannot find @image file `f-ile.txt' ** Cannot find @image file `f--ile@..txt' ** Cannot find @image file `f-ile.txt' ** Cannot find @image file `f--ile@..txt' texi2html-1.82/test/formatting/res/menus_xml_makeinfo/0000755000175000017500000000000011264347123025035 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/menus_xml_makeinfo/menus.20000644000175000017500000000000011264347123026235 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/menus_xml_makeinfo/menus.xml0000644000175000017500000000642711264347123026717 0ustar flichtenheldflichtenheld menus.xml Top chapter (dir) Top chapter chapter chapter Menu comment chapter2 description Chapter 2 Text. (gcc) (gcc) text − item table line
    Some text. (manual) (manual) desc comment Log $ (truc) (truc) description acronym After menu (manual) (manual) item
    chapter chapter2 Top Top chapter in footnote s--ect,ion s–ect,ion s–ect,ion Menu comment “simple-double–three—four—-”&linebreak; s--ect,ion chapter
    A section subsection ``simple-double--three---four----'' subsection “simple-double–three—four—-”
    subsection ``simple-double--three---four----'' s--ect,ion subsection “simple-double–three—four—-” chapter2 chapter Top chapter 2 section in chapter 2 section in chapter 2 in description in cartouche section in chapter 2 chapter2
    section in chapter 2
    texi2html-1.82/test/formatting/res/tex_notex/0000755000175000017500000000000011264347123023172 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/tex_notex/tex.20000644000175000017500000000005511264347123024055 0ustar flichtenheldflichtenheld** Unknown command `@\' (left as is) (l. 42) texi2html-1.82/test/formatting/res/tex_notex/tex.html0000644000175000017500000000453711264347123024671 0ustar flichtenheldflichtenheld Untitled Document

    Tests

    Now tex on the same line bidule Some text one the line following @end tex

    Now tex on the following line, valid fot tex (with @end tex on a line).

    Same that @html (but empty following line not ignored).

    Test of @math Here some x^i\over\tan y.

    Maths with protected \: a \ b.

    Maths with code @-command:

    math code

    Maths with code @-command and braces:

    \underlinemath \hbox code \sum_i\underlinef

    @\ outside of math

    @\


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/formats_in_menu/0000755000175000017500000000000011264347123024342 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/formats_in_menu/formats_in_menu.20000644000175000017500000000000011264347123027600 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/formats_in_menu/formats_in_menu.html0000644000175000017500000000640711264347123030424 0ustar flichtenheldflichtenheld Untitled Document

    Top

    Some text.

    After menu


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/tables/0000755000175000017500000000000011264347123022427 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/tables/tables.20000644000175000017500000000023411264347123023763 0ustar flichtenheldflichtenheld** closing @-command ref (l. 16) ** @item outside of table or list (l. 16) *** @end table without corresponding opening (l. 16) *** closing `table' (l. 16) texi2html-1.82/test/formatting/res/tables/tables.html0000644000175000017500000001444011264347123024572 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Test tables

    first item

    First item text

    title in first item second item @end table


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Unnumbered section

    title long title

    Item line


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/texi_quotes/0000755000175000017500000000000011264347123023526 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_quotes/quotes.passfirst0000644000175000017500000001334111264347123027010 0ustar flichtenheldflichtenheldquotes.texi(,2) quotes.texi(,3) @setfilename quotes.info quotes.texi(,4) quotes.texi(,9) quotes.texi(,22) quotes.texi(,31) quotes.texi(,51) quotes.texi(,59) quotes.texi(,60) quotes.texi(,61) @node Top quotes.texi(,62) @top test quotes quotes.texi(,63) quotes.texi(,64) No value for print_utf8 quotes.texi(,65) quotes.texi(allquotes,66) ``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{} @* quotes.texi(allquotes,66) code: @code{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,66) asis: @asis{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,66) strong: @strong{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,66) kbd: @kbd{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,66) samp: @samp{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,66) quotes.texi(allquotes,66) @example quotes.texi(allquotes,66) @@set txicodequoteundirected quotes.texi(allquotes,66) @@set txicodequotebacktick quotes.texi(allquotes,66) @end example quotes.texi(allquotes,66) @set txicodequoteundirected quotes.texi(allquotes,66) @set txicodequotebacktick quotes.texi(allquotes,66) ``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{} @* quotes.texi(allquotes,66) code: @code{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,66) asis: @asis{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,66) strong: @strong{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,66) kbd: @kbd{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,66) samp: @samp{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,66) quotes.texi(allquotes,66) @example quotes.texi(allquotes,66) @@clear txicodequoteundirected quotes.texi(allquotes,66) @@clear txicodequotebacktick quotes.texi(allquotes,66) @end example quotes.texi(allquotes,66) @clear txicodequoteundirected quotes.texi(allquotes,66) @clear txicodequotebacktick quotes.texi(allquotes,66) ``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{} @* quotes.texi(allquotes,66) code: @code{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,66) asis: @asis{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,66) strong: @strong{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,66) kbd: @kbd{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,66) samp: @samp{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(,67) quotes.texi(,68) @example quotes.texi(allquotes,69) ``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{} @* quotes.texi(allquotes,69) code: @code{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,69) asis: @asis{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,69) strong: @strong{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,69) kbd: @kbd{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,69) samp: @samp{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,69) quotes.texi(allquotes,69) @example quotes.texi(allquotes,69) @@set txicodequoteundirected quotes.texi(allquotes,69) @@set txicodequotebacktick quotes.texi(allquotes,69) @end example quotes.texi(allquotes,69) @set txicodequoteundirected quotes.texi(allquotes,69) @set txicodequotebacktick quotes.texi(allquotes,69) ``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{} @* quotes.texi(allquotes,69) code: @code{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,69) asis: @asis{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,69) strong: @strong{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,69) kbd: @kbd{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,69) samp: @samp{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,69) quotes.texi(allquotes,69) @example quotes.texi(allquotes,69) @@clear txicodequoteundirected quotes.texi(allquotes,69) @@clear txicodequotebacktick quotes.texi(allquotes,69) @end example quotes.texi(allquotes,69) @clear txicodequoteundirected quotes.texi(allquotes,69) @clear txicodequotebacktick quotes.texi(allquotes,69) ``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{} @* quotes.texi(allquotes,69) code: @code{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,69) asis: @asis{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,69) strong: @strong{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,69) kbd: @kbd{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,69) samp: @samp{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(,70) @end example quotes.texi(,71) quotes.texi(,72) @bye texi2html-1.82/test/formatting/res/texi_quotes/quotes.texi0000644000175000017500000001334211264347123025744 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename quotes.info @copying ``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{} @* code: @code{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* asis: @asis{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* strong: @strong{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* kbd: @kbd{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* samp: @samp{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* @example @@set txicodequoteundirected @@set txicodequotebacktick @end example @set txicodequoteundirected @set txicodequotebacktick ``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{} @* code: @code{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* asis: @asis{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* strong: @strong{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* kbd: @kbd{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* samp: @samp{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* @example @@clear txicodequoteundirected @@clear txicodequotebacktick @end example @clear txicodequoteundirected @clear txicodequotebacktick ``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{} @* code: @code{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* asis: @asis{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* strong: @strong{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* kbd: @kbd{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* samp: @samp{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* @end copying @titlepage Titlepage @insertcopying @end titlepage @node Top @top test quotes No value for print_utf8 ``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{} @* code: @code{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* asis: @asis{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* strong: @strong{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* kbd: @kbd{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* samp: @samp{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* @example @@set txicodequoteundirected @@set txicodequotebacktick @end example @set txicodequoteundirected @set txicodequotebacktick ``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{} @* code: @code{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* asis: @asis{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* strong: @strong{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* kbd: @kbd{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* samp: @samp{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* @example @@clear txicodequoteundirected @@clear txicodequotebacktick @end example @clear txicodequoteundirected @clear txicodequotebacktick ``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{} @* code: @code{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* asis: @asis{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* strong: @strong{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* kbd: @kbd{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* samp: @samp{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* @example ``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{} @* code: @code{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* asis: @asis{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* strong: @strong{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* kbd: @kbd{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* samp: @samp{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* @example @@set txicodequoteundirected @@set txicodequotebacktick @end example @set txicodequoteundirected @set txicodequotebacktick ``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{} @* code: @code{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* asis: @asis{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* strong: @strong{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* kbd: @kbd{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* samp: @samp{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* @example @@clear txicodequoteundirected @@clear txicodequotebacktick @end example @clear txicodequoteundirected @clear txicodequotebacktick ``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{} @* code: @code{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* asis: @asis{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* strong: @strong{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* kbd: @kbd{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* samp: @samp{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* @end example @bye texi2html-1.82/test/formatting/res/texi_quotes/quotes.passtexi0000644000175000017500000002104711264347123026634 0ustar flichtenheldflichtenheldquotes.texi(,2) quotes.texi(,3) @setfilename quotes.info quotes.texi(,4) quotes.texi(,9) quotes.texi(,22) quotes.texi(,31) quotes.texi(,51) quotes.texi(,52) @copying quotes.texi(allquotes,53) ``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{} @* quotes.texi(allquotes,53) code: @code{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,53) asis: @asis{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,53) strong: @strong{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,53) kbd: @kbd{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,53) samp: @samp{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,53) quotes.texi(allquotes,53) @example quotes.texi(allquotes,53) @@set txicodequoteundirected quotes.texi(allquotes,53) @@set txicodequotebacktick quotes.texi(allquotes,53) @end example quotes.texi(allquotes,53) @set txicodequoteundirected quotes.texi(allquotes,53) @set txicodequotebacktick quotes.texi(allquotes,53) ``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{} @* quotes.texi(allquotes,53) code: @code{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,53) asis: @asis{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,53) strong: @strong{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,53) kbd: @kbd{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,53) samp: @samp{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,53) quotes.texi(allquotes,53) @example quotes.texi(allquotes,53) @@clear txicodequoteundirected quotes.texi(allquotes,53) @@clear txicodequotebacktick quotes.texi(allquotes,53) @end example quotes.texi(allquotes,53) @clear txicodequoteundirected quotes.texi(allquotes,53) @clear txicodequotebacktick quotes.texi(allquotes,53) ``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{} @* quotes.texi(allquotes,53) code: @code{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,53) asis: @asis{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,53) strong: @strong{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,53) kbd: @kbd{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,53) samp: @samp{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(,54) @end copying quotes.texi(,55) @titlepage quotes.texi(,56) Titlepage quotes.texi(,57) @insertcopying quotes.texi(,58) @end titlepage quotes.texi(,59) quotes.texi(,60) quotes.texi(,61) @node Top quotes.texi(,62) @top test quotes quotes.texi(,63) quotes.texi(,64) No value for print_utf8 quotes.texi(,65) quotes.texi(allquotes,66) ``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{} @* quotes.texi(allquotes,66) code: @code{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,66) asis: @asis{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,66) strong: @strong{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,66) kbd: @kbd{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,66) samp: @samp{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,66) quotes.texi(allquotes,66) @example quotes.texi(allquotes,66) @@set txicodequoteundirected quotes.texi(allquotes,66) @@set txicodequotebacktick quotes.texi(allquotes,66) @end example quotes.texi(allquotes,66) @set txicodequoteundirected quotes.texi(allquotes,66) @set txicodequotebacktick quotes.texi(allquotes,66) ``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{} @* quotes.texi(allquotes,66) code: @code{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,66) asis: @asis{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,66) strong: @strong{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,66) kbd: @kbd{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,66) samp: @samp{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,66) quotes.texi(allquotes,66) @example quotes.texi(allquotes,66) @@clear txicodequoteundirected quotes.texi(allquotes,66) @@clear txicodequotebacktick quotes.texi(allquotes,66) @end example quotes.texi(allquotes,66) @clear txicodequoteundirected quotes.texi(allquotes,66) @clear txicodequotebacktick quotes.texi(allquotes,66) ``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{} @* quotes.texi(allquotes,66) code: @code{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,66) asis: @asis{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,66) strong: @strong{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,66) kbd: @kbd{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,66) samp: @samp{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(,67) quotes.texi(,68) @example quotes.texi(allquotes,69) ``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{} @* quotes.texi(allquotes,69) code: @code{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,69) asis: @asis{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,69) strong: @strong{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,69) kbd: @kbd{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,69) samp: @samp{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,69) quotes.texi(allquotes,69) @example quotes.texi(allquotes,69) @@set txicodequoteundirected quotes.texi(allquotes,69) @@set txicodequotebacktick quotes.texi(allquotes,69) @end example quotes.texi(allquotes,69) @set txicodequoteundirected quotes.texi(allquotes,69) @set txicodequotebacktick quotes.texi(allquotes,69) ``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{} @* quotes.texi(allquotes,69) code: @code{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,69) asis: @asis{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,69) strong: @strong{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,69) kbd: @kbd{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,69) samp: @samp{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,69) quotes.texi(allquotes,69) @example quotes.texi(allquotes,69) @@clear txicodequoteundirected quotes.texi(allquotes,69) @@clear txicodequotebacktick quotes.texi(allquotes,69) @end example quotes.texi(allquotes,69) @clear txicodequoteundirected quotes.texi(allquotes,69) @clear txicodequotebacktick quotes.texi(allquotes,69) ``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{} @* quotes.texi(allquotes,69) code: @code{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,69) asis: @asis{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,69) strong: @strong{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,69) kbd: @kbd{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(allquotes,69) samp: @samp{``simple-double--three---four----'' `simple' quotedblleft: @quotedblleft{}} @* quotes.texi(,70) @end example quotes.texi(,71) quotes.texi(,72) @bye texi2html-1.82/test/formatting/res/texi_quotes/quotes.20000644000175000017500000000000011264347123025117 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/quotes/0000755000175000017500000000000011264347123022475 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/quotes/quotes.html0000644000175000017500000001612711264347123024712 0ustar flichtenheldflichtenheld Untitled Document

    test quotes

    No value for print_utf8

    “simple-double–three—four—-” ‘simple’ quotedblleft: “
    code: ``simple-double--three---four----'' `simple' quotedblleft: “
    asis: “simple-double–three—four—-” ‘simple’ quotedblleft: “
    strong: “simple-double–three—four—-” ‘simple’ quotedblleft: “
    kbd: ``simple-double--three---four----'' `simple' quotedblleft: “
    samp: ‘``simple-double--three---four----'' `simple' quotedblleft: “

     
    @set txicodequoteundirected
    @set txicodequotebacktick
    

    “simple-double–three—four—-” ‘simple’ quotedblleft: “
    code: ``simple-double--three---four----'' `simple' quotedblleft: “
    asis: “simple-double–three—four—-” ‘simple’ quotedblleft: “
    strong: “simple-double–three—four—-” ‘simple’ quotedblleft: “
    kbd: ``simple-double--three---four----'' `simple' quotedblleft: “
    samp: ‘``simple-double--three---four----'' `simple' quotedblleft: “

     
    @clear txicodequoteundirected
    @clear txicodequotebacktick
    

    “simple-double–three—four—-” ‘simple’ quotedblleft: “
    code: ``simple-double--three---four----'' `simple' quotedblleft: “
    asis: “simple-double–three—four—-” ‘simple’ quotedblleft: “
    strong: “simple-double–three—four—-” ‘simple’ quotedblleft: “
    kbd: ``simple-double--three---four----'' `simple' quotedblleft: “
    samp: ‘``simple-double--three---four----'' `simple' quotedblleft: “

     
    ``simple-double--three---four----'' `simple' quotedblleft: “ 
    
    code: ``simple-double--three---four----'' `simple' quotedblleft: “ 
    
    asis: ``simple-double--three---four----'' `simple' quotedblleft: “ 
    
    strong: ``simple-double--three---four----'' `simple' quotedblleft: “ 
    
    kbd: ``simple-double--three---four----'' `simple' quotedblleft: “ 
    
    samp: ‘``simple-double--three---four----'' `simple' quotedblleft: “
     
    @set txicodequoteundirected
    @set txicodequotebacktick
    
    ``simple-double--three---four----'' `simple' quotedblleft: “ 
    
    code: ``simple-double--three---four----'' `simple' quotedblleft: “ 
    
    asis: ``simple-double--three---four----'' `simple' quotedblleft: “ 
    
    strong: ``simple-double--three---four----'' `simple' quotedblleft: “ 
    
    kbd: ``simple-double--three---four----'' `simple' quotedblleft: “ 
    
    samp: ‘``simple-double--three---four----'' `simple' quotedblleft: “
     
    @clear txicodequoteundirected
    @clear txicodequotebacktick
    
    ``simple-double--three---four----'' `simple' quotedblleft: “ 
    
    code: ``simple-double--three---four----'' `simple' quotedblleft: “ 
    
    asis: ``simple-double--three---four----'' `simple' quotedblleft: “ 
    
    strong: ``simple-double--three---four----'' `simple' quotedblleft: “ 
    
    kbd: ``simple-double--three---four----'' `simple' quotedblleft: “ 
    
    samp: ‘``simple-double--three---four----'' `simple' quotedblleft: “

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/quotes/quotes.20000644000175000017500000000000011264347123024066 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/simplest_test_css/0000755000175000017500000000000011264347123024724 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/simplest_test_css/simplest.html0000644000175000017500000000372411264347123027460 0ustar flichtenheldflichtenheld Untitled Document

    Top

    This is a very simple texi manual   <>.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/simplest_test_css/simplest.20000644000175000017500000000000011264347123026635 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/symbol_after_block/0000755000175000017500000000000011264347123025015 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/symbol_after_block/symbol_after_block.20000644000175000017500000000000011264347123030726 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/symbol_after_block/symbol_after_block.html0000644000175000017500000000600711264347123031546 0ustar flichtenheldflichtenheld Untitled Document

    Symbol after block

    Html:

    In html. On the line. In html@ On the line.

    Verbatim:

    In verbatim
    
    ;
    In verbatim
    
    @

    Table:

    • a

    l–ine

    +

    • a

    l–ine

    @

    Itemize:

    • e–mph item

    • e–mph item

    @

    Multitable:

    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab

    ^

    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab

    {

    Flushleft:

    flushleft

    !

    flushleft

    @

    Copying:

    *

    @

    Copying Copying

    An html, all on one line:

    Hi, my name is Graham.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/inter_item_commands_docbook/0000755000175000017500000000000011264347123026675 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/inter_item_commands_docbook/inter_item_commands.xml0000644000175000017500000001112611264347123033440 0ustar flichtenheldflichtenheld ]> Test inter item ignored commands also a cindex in itemize e–mph item index entry within itemize i–tem 1 index entry right after @itemi–tem 2 T–ext before items. also a cindex in itemize bullet item e–numerate truc index entry between empty lines trouc mu–ltitable headitem another tab mu–ltitable item multitable tab mu–ltitable item 2 multitable tab 2 index entry within multitable lone mu–ltitable item ii a g log trap1 log trap1 between deffnxid ‘i’ uleid ‘i’ ule truc
    cindex in deff item In deff item.
    a l–ine a b l–ine a index entry between item and itemx b l–ine c d cindex in table abb l–ine cindex in tableTexte before first item. abb cp fn vr
    texi2html-1.82/test/formatting/res/inter_item_commands_docbook/inter_item_commands.20000644000175000017500000000000011264347123032766 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/def_cmds/0000755000175000017500000000000011264347123022721 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/def_cmds/def_cmds.20000644000175000017500000000546211264347123024557 0ustar flichtenheldflichtenheld** Empty index entry for @deffn (l. 139 in @mymacro) ** Empty index entry for @deffn (l. 139 in @mymacro) ** Empty index entry for @deffn (l. 139 in @mymacro) ** Empty index entry for @deffn (l. 139 in @mymacro) ** Empty index entry for @deffn (l. 139 in @mymacro) ** Empty index entry for @deffn (l. 139 in @mymacro) ** Empty index entry for @deffn (l. 139 in @mymacro) ** Empty index entry for @deffn (l. 139 in @mymacro) ** Empty index entry for @deffn (l. 142 in @mymacro) ** Empty index entry for @deffn (l. 142 in @mymacro) ** Empty index entry for @deffn (l. 142 in @mymacro) ** Empty index entry for @deffn (l. 142 in @mymacro) ** Empty index entry for @deffn (l. 142 in @mymacro) ** Empty index entry for @deffn (l. 142 in @mymacro) ** Empty index entry for @deffn (l. 142 in @mymacro) ** Empty index entry for @deffn (l. 142 in @mymacro) ** Empty index entry for @deffn (l. 145 in @mymacro) ** Empty index entry for @deffn (l. 145 in @mymacro) ** Empty index entry for @deffn (l. 145 in @mymacro) ** Empty index entry for @deffn (l. 145 in @mymacro) ** Empty index entry for @deffn (l. 145 in @mymacro) ** Empty index entry for @deffn (l. 145 in @mymacro) ** Empty index entry for @deffn (l. 145 in @mymacro) ** Empty index entry for @deffn (l. 145 in @mymacro) ** Empty index entry for @deffn (l. 246) ** Empty index entry for @defvr (l. 250) ** Empty index entry for @deftypefn (l. 254) ** Empty index entry for @deftypeop (l. 258) ** Empty index entry for @deftypevr (l. 262) ** Empty index entry for @defcv (l. 266) ** Empty index entry for @deftypecv (l. 270) ** Empty index entry for @defop (l. 274) ** Empty index entry for @deftp (l. 278) *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** '{' without macro. Before: more args *** '}' without opening '{' before: *** '}' without opening '{' before: *** '}' without opening '{' before: after *** '}' without opening '{' before: more args *** '}' without opening '{' before: *** '}' without opening '{' before: after *** '}' without opening '{' before: more args *** '}' without opening '{' before: (l. 142 in @mymacro) *** '}' without opening '{' before: (l. 142 in @mymacro) *** '{' without macro. Before: (l. 142 in @mymacro) *** '{' without macro. Before: and after (l. 142 in @mymacro) *** '{' without macro. Before: more args (l. 142 in @mymacro) *** '}' without opening '{' before: (l. 142 in @mymacro) *** '}' without opening '{' before: (l. 145 in @mymacro) *** '}' without opening '{' before: (l. 145 in @mymacro) *** '{' without macro. Before: (l. 145 in @mymacro) *** '{' without macro. Before: and after (l. 145 in @mymacro) *** '{' without macro. Before: more args (l. 145 in @mymacro) *** '}' without opening '{' before: (l. 145 in @mymacro) texi2html-1.82/test/formatting/res/def_cmds/def_cmds.html0000644000175000017500000016150111264347123025357 0ustar flichtenheldflichtenheld Untitled Document

    Test for definition commands

    c--ategory: d--effn_name a--rguments...

    d–effn

    cate--gory: de--ffn_name ar--guments more args
    even more so

    def–fn

    fset: i a g
    cmde: truc
    Command: log trap
    Command: log trap1
    Command: log trap2
    cmde: id ule truc
    cmde2: id ‘i’ ule truc
    id ‘i’ ule:
    :
    aaa:
    :
    :
    : machin
    : bidule machin
    truc: machin
    truc:
    truc:
    :
    truc: followed by a comment
    truc: machin bidule chose and
    truc: machin bidule chose and after
    truc: machin bidule chose and {
    truc: machin bidule chose and { and after

    Various deff lines

    truc: after a deff item

    text in def item for second def item

    truc: deffnx before end deffn
    empty: deffn
    empty: deffn with deffnx
    empty: deffnx
    c--ategory: d--efvr_name

    d–efvr

    c--ategory: t--ype d--eftypefn_name a--rguments...

    d–eftypefn

    c--ategory on c--lass: t--ype d--eftypeop_name a--rguments...

    d–eftypeop

    c--ategory: t--ype d--eftypevr_name

    d–eftypevr

    c--ategory of c--lass: d--efcv_name

    d–efcv

    c--ategory on c--lass: d--efop_name a--rguments...

    d–efop

    c--ategory: d--eftp_name a--ttributes...

    d–eftp

    Function: d--efun_name a--rguments...

    d–efun

    Macro: d--efmac_name a--rguments...

    d–efmac

    Special Form: d--efspec_name a--rguments...

    d–efspec

    Variable: d--efvar_name

    d–efvar

    User Option: d--efopt_name

    d–efopt

    Function: t--ype d--eftypefun_name a--rguments...

    d–eftypefun

    Variable: t--ype d--eftypevar_name

    d–eftypevar

    Instance Variable of c--lass: d--efivar_name

    d–efivar

    Instance Variable of c--lass: t--ype d--eftypeivar_name

    d–eftypeivar

    Method on c--lass: d--efmethod_name a--rguments...

    d–efmethod

    Method on c--lass: t--ype d--eftypemethod_name a--rguments...

    d–eftypemethod

    category: name args { more args

    deffn with {

    category: name args more args

    deffn with }

     
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    cate--gory: de--ffn_name ar--guments more args even more so
    def--fn
    
    fset: i a g
    cmde: truc
    Command: log trap
    Command: log trap1
    Command: log trap2
    cmde: id ule truc
    cmde2: id ‘i’ ule truc
    id ‘i’ ule:
    :
    aaa:
    :
    :
    : machin
    : bidule machin
    truc: machin
    truc:
    truc:
    :
    truc: followed by a comment
    truc: machin bidule chose and
    truc: machin bidule chose and after
    truc: machin bidule chose and {
    truc: machin bidule chose and { and after
    Various deff lines
    
    truc: after a deff item
    text in def item for second def item
    
    truc: deffnx before end deffn
    empty: deffn
    empty: deffn with deffnx
    empty: deffnx
    c--ategory: d--efvr_name
    d--efvr
    
    c--ategory: t--ype d--eftypefn_name a--rguments...
    d--eftypefn
    
    c--ategory on c--lass: t--ype d--eftypeop_name a--rguments...
    d--eftypeop
    
    c--ategory: t--ype d--eftypevr_name
    d--eftypevr
    
    c--ategory of c--lass: d--efcv_name
    d--efcv
    
    c--ategory on c--lass: d--efop_name a--rguments...
    d--efop
    
    c--ategory: d--eftp_name a--ttributes...
    d--eftp
    
    Function: d--efun_name a--rguments...
    d--efun
    
    Macro: d--efmac_name a--rguments...
    d--efmac
    
    Special Form: d--efspec_name a--rguments...
    d--efspec
    
    Variable: d--efvar_name
    d--efvar
    
    User Option: d--efopt_name
    d--efopt
    
    Function: t--ype d--eftypefun_name a--rguments...
    d--eftypefun
    
    Variable: t--ype d--eftypevar_name
    d--eftypevar
    
    Instance Variable of c--lass: d--efivar_name
    d--efivar
    
    Instance Variable of c--lass: t--ype d--eftypeivar_name
    d--eftypeivar
    
    Method on c--lass: d--efmethod_name a--rguments...
    d--efmethod
    
    Method on c--lass: t--ype d--eftypemethod_name a--rguments...
    d--eftypemethod
    
    category: name args { more args
    deffn with {
    
    
    
    category: name args more args
    deffn with }
    
    
    
    Command: forward--char nchars argument2 argument3 (arg in brace, [something in v--ar, in, b , comma apref p]) last
    Variable: fill-column argument1 argument2 (arg in brace, [something in v--ar, in, b , comma apref p]) last
    Library Function: int foobar (int foo, float bar)
    Library Function: int foobar (int foo, float bar) (arg in brace, [ in v--ar, in, b , comma apref p]) ct

    last
    Library Function: int foobug [
    stacks: private push (s:in out stack; n:in integer) ; ;barg aarg; ; end
    Global Flag: int enable (arg in brace, [something in v--ar, in, b , comma apref p]) last
    Data type: pair car cdr (arg in brace, [something in v--ar, in, b , comma apref p]) last
    Class Option of Window: border-pattern (arg in brace, [something in v--ar, in, b , comma apref p]) last
    Class Option2 of Window: int border-pattern (arg in brace, [something in v--ar, in, b , comma apref p]) last
    Operation on windows: expose (arg in brace, [something in v--ar, in, b , comma apref p]) last
    Operation2 on W: , indow int expose (arg in brace, [something in v--ar, in, b , comma apref p]) last
    Operation5 on Window: int expose type arg
    Operation3 on W,indow: int e,xpose type arg
    Operation4 on ,Window: int ,expose type arg
    Operation6 on W: , indow int e,xpose type arg
    Operation7 on ,: Window int ,expose type arg
    Operation13 on W)indow: int e)xpose type arg
    Operation14 on )Window: int )expose type arg
    Operation16 on W: ) indow int e)xpose type arg
    Operation17 on ): Window int )expose type arg
    Operation18 on W;indow: int e;xpose type arg
    Operation19 on ;Window: int ;expose type arg
    Operation20 on W;indow: int e;xpose type arg
    Operation21 on ;Window: int ;expose type arg
    Command on com: Windowint exposeexp
    :
    :
    :
    :
    :
    :
    :
    :
    :
    A1: A2 A3 A4
    A1: A2 A3 A4
    A1: A2 A3 A4
    A1: A2 A3 A4
    A1: A2 A3 A4 A5
    A1: A2 A3 A4 A5
    A1: A2 A3 A4 A5
    A1: A2 A3 A4 A5
    A1: A2 A3 A4
    A1: A2 A3 A4
    A1 of A2: A3 A4 A5
    A1: A2 A3 A4 A5
    A1 of A2: A3 A4 A5 A6
    A1 of A2:A3A4 A5 A6
    A1 on A2: A3 A4 A5
    A1 on A2: A3 A4 A5
    A1 on A2: A3 A4 A5 A6
    A1 on A2: A3 A4 A5 A6
    Jump to:   A   B   D   E   F  
    Index Entry Section

    A
    A2Test for definition commands
    A2Test for definition commands
    A3Test for definition commands
    A3Test for definition commands
    A3Test for definition commands
    A4 of A2Test for definition commands
    A4 of A2Test for definition commands

    B
    border-patternTest for definition commands
    border-pattern of WindowTest for definition commands

    D
    d--efcv_nameTest for definition commands
    d--efcv_nameTest for definition commands
    d--efcv_nameTest for definition commands
    d--efivar_nameTest for definition commands
    d--efivar_nameTest for definition commands
    d--efivar_nameTest for definition commands
    d--efopt_nameTest for definition commands
    d--efopt_nameTest for definition commands
    d--efopt_nameTest for definition commands
    d--eftypeivar_name of c--lassTest for definition commands
    d--eftypeivar_name of c--lassTest for definition commands
    d--eftypeivar_name of c--lassTest for definition commands
    d--eftypevar_nameTest for definition commands
    d--eftypevar_nameTest for definition commands
    d--eftypevar_nameTest for definition commands
    d--eftypevr_nameTest for definition commands
    d--eftypevr_nameTest for definition commands
    d--eftypevr_nameTest for definition commands
    d--efvar_nameTest for definition commands
    d--efvar_nameTest for definition commands
    d--efvar_nameTest for definition commands
    d--efvr_nameTest for definition commands
    d--efvr_nameTest for definition commands
    d--efvr_nameTest for definition commands

    E
    enableTest for definition commands

    F
    fill-columnTest for definition commands

    Jump to:   A   B   D   E   F  
    Jump to:   )   ,   ;  
    A   B   D   E   F   I   L   M   N   P   T  
    Index Entry Section

    )
    )expose on )WindowTest for definition commands

    ,
    ,expose on ,WindowTest for definition commands

    ;
    ;expose on ;WindowTest for definition commands
    ;expose on ;WindowTest for definition commands

    A
    A2Test for definition commands
    A2Test for definition commands
    A3Test for definition commands
    A3Test for definition commands
    A3 on A2Test for definition commands
    A3 on A2Test for definition commands
    A4 on A2Test for definition commands
    A4 on A2Test for definition commands
    afterTest for definition commands
    afterTest for definition commands
    afterTest for definition commands

    B
    bidule machinTest for definition commands
    bidule machinTest for definition commands
    bidule machinTest for definition commands

    D
    d--effn_nameTest for definition commands
    d--effn_nameTest for definition commands
    d--effn_nameTest for definition commands
    d--efmac_nameTest for definition commands
    d--efmac_nameTest for definition commands
    d--efmac_nameTest for definition commands
    d--efmethod_name on c--lassTest for definition commands
    d--efmethod_name on c--lassTest for definition commands
    d--efmethod_name on c--lassTest for definition commands
    d--efop_name on c--lassTest for definition commands
    d--efop_name on c--lassTest for definition commands
    d--efop_name on c--lassTest for definition commands
    d--efspec_nameTest for definition commands
    d--efspec_nameTest for definition commands
    d--efspec_nameTest for definition commands
    d--eftypefn_nameTest for definition commands
    d--eftypefn_nameTest for definition commands
    d--eftypefn_nameTest for definition commands
    d--eftypefun_nameTest for definition commands
    d--eftypefun_nameTest for definition commands
    d--eftypefun_nameTest for definition commands
    d--eftypemethod_name on c--lassTest for definition commands
    d--eftypemethod_name on c--lassTest for definition commands
    d--eftypemethod_name on c--lassTest for definition commands
    d--eftypeop_name on c--lassTest for definition commands
    d--eftypeop_name on c--lassTest for definition commands
    d--eftypeop_name on c--lassTest for definition commands
    d--efun_nameTest for definition commands
    d--efun_nameTest for definition commands
    d--efun_nameTest for definition commands
    de--ffn_nameTest for definition commands
    de--ffn_nameTest for definition commands
    de--ffn_nameTest for definition commands
    deffnTest for definition commands
    deffnTest for definition commands
    deffnTest for definition commands
    deffnTest for definition commands
    deffnTest for definition commands
    deffnTest for definition commands
    deffnxTest for definition commands
    deffnxTest for definition commands
    deffnxTest for definition commands
    deffnxTest for definition commands
    deffnxTest for definition commands
    deffnxTest for definition commands

    E
    e)xpose on W)indowTest for definition commands
    e,xpose on W,indowTest for definition commands
    e;xpose on W;indowTest for definition commands
    e;xpose on W;indowTest for definition commands
    expose on comTest for definition commands
    expose on WindowTest for definition commands
    expose on windowsTest for definition commands

    F
    followedTest for definition commands
    followedTest for definition commands
    followedTest for definition commands
    foobarTest for definition commands
    foobarTest for definition commands
    foobugTest for definition commands
    forward--charTest for definition commands

    I
    iTest for definition commands
    iTest for definition commands
    iTest for definition commands
    id ‘i’ uleTest for definition commands
    id ‘i’ uleTest for definition commands
    id ‘i’ uleTest for definition commands
    id uleTest for definition commands
    id uleTest for definition commands
    id uleTest for definition commands
    indow on WTest for definition commands
    indow on WTest for definition commands
    indow on WTest for definition commands
    int on )Test for definition commands
    int on ,Test for definition commands

    L
    log trapTest for definition commands
    log trapTest for definition commands
    log trapTest for definition commands
    log trap1Test for definition commands
    log trap1Test for definition commands
    log trap1Test for definition commands
    log trap2Test for definition commands
    log trap2Test for definition commands
    log trap2Test for definition commands

    M
    machinTest for definition commands
    machinTest for definition commands
    machinTest for definition commands
    machinTest for definition commands
    machinTest for definition commands
    machinTest for definition commands
    machinTest for definition commands
    machinTest for definition commands
    machinTest for definition commands
    machinTest for definition commands
    machinTest for definition commands
    machinTest for definition commands
    machinTest for definition commands
    machinTest for definition commands
    machinTest for definition commands
    machinTest for definition commands
    machinTest for definition commands
    machinTest for definition commands

    N
    nameTest for definition commands
    nameTest for definition commands
    nameTest for definition commands
    nameTest for definition commands
    nameTest for definition commands
    nameTest for definition commands

    P
    pushTest for definition commands

    T
    trucTest for definition commands
    trucTest for definition commands
    trucTest for definition commands

    Jump to:   )   ,   ;  
    A   B   D   E   F   I   L   M   N   P   T  

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/texi_quotation/0000755000175000017500000000000011264347123024231 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_quotation/quotation.passtexi0000644000175000017500000000757511264347123030054 0ustar flichtenheldflichtenheldquotation.texi(,2) quotation.texi(,3) @setfilename quotation.info quotation.texi(,4) quotation.texi(,5) @node Top quotation.texi(,6) @top Quotations quotation.texi(,7) quotation.texi(,8) @quotation quotation.texi(,9) A quot---ation quotation.texi(,10) @end quotation quotation.texi(,11) quotation.texi(,12) @quotation Note quotation.texi(,13) A Note quotation.texi(,14) @end quotation quotation.texi(,15) quotation.texi(,16) @quotation note quotation.texi(,17) A note quotation.texi(,18) @end quotation quotation.texi(,19) quotation.texi(,20) @quotation Caution quotation.texi(,21) Caution quotation.texi(,22) @end quotation quotation.texi(,23) quotation.texi(,24) @quotation Important quotation.texi(,25) Important quotation.texi(,26) @end quotation quotation.texi(,27) quotation.texi(,28) @quotation Tip quotation.texi(,29) a Tip quotation.texi(,30) @end quotation quotation.texi(,31) quotation.texi(,32) @quotation Warning quotation.texi(,33) a Warning. quotation.texi(,34) @end quotation quotation.texi(,35) quotation.texi(,36) @quotation something @'e @TeX{} quotation.texi(,37) The something @'e @TeX{} is here. quotation.texi(,38) @end quotation quotation.texi(,39) quotation.texi(,40) @quotation @@ at the end of line @ quotation.texi(,41) A @@ at the end of the @@quotation line. quotation.texi(,42) @end quotation quotation.texi(,43) quotation.texi(,44) @quotation something, other thing quotation.texi(,45) something, other thing quotation.texi(,46) @end quotation quotation.texi(,47) quotation.texi(,48) @quotation Note, the note quotation.texi(,49) Note, the note quotation.texi(,50) @end quotation quotation.texi(,51) quotation.texi(,52) @quotation quotation.texi(,53) @end quotation quotation.texi(,54) quotation.texi(,55) @quotation Empty quotation.texi(,56) @end quotation quotation.texi(,57) quotation.texi(,58) @quotation @asis{} quotation.texi(,59) @end quotation quotation.texi(,60) quotation.texi(,61) @quotation @* quotation.texi(,62) @end quotation quotation.texi(,63) quotation.texi(,64) @example quotation.texi(,65) @quotation quotation.texi(,66) A quot---ation quotation.texi(,67) @end quotation quotation.texi(,68) quotation.texi(,69) @quotation Note quotation.texi(,70) A Note quotation.texi(,71) @end quotation quotation.texi(,72) quotation.texi(,73) @quotation note quotation.texi(,74) A note quotation.texi(,75) @end quotation quotation.texi(,76) quotation.texi(,77) @quotation Caution quotation.texi(,78) Caution quotation.texi(,79) @end quotation quotation.texi(,80) quotation.texi(,81) @quotation Important quotation.texi(,82) Important quotation.texi(,83) @end quotation quotation.texi(,84) quotation.texi(,85) @quotation Tip quotation.texi(,86) a Tip quotation.texi(,87) @end quotation quotation.texi(,88) quotation.texi(,89) @quotation Warning quotation.texi(,90) a Warning. quotation.texi(,91) @end quotation quotation.texi(,92) quotation.texi(,93) @quotation something @'e @TeX{} quotation.texi(,94) The something @'e @TeX{} is here. quotation.texi(,95) @end quotation quotation.texi(,96) quotation.texi(,97) @quotation @@ at the end of line @ quotation.texi(,98) A @@ at the end of the @@quotation line. quotation.texi(,99) @end quotation quotation.texi(,100) quotation.texi(,101) @quotation something, other thing quotation.texi(,102) something, other thing quotation.texi(,103) @end quotation quotation.texi(,104) quotation.texi(,105) @quotation Note, the note quotation.texi(,106) Note, the note quotation.texi(,107) @end quotation quotation.texi(,108) quotation.texi(,109) @quotation quotation.texi(,110) @end quotation quotation.texi(,111) quotation.texi(,112) @quotation Empty quotation.texi(,113) @end quotation quotation.texi(,114) quotation.texi(,115) @quotation @asis{} quotation.texi(,116) @end quotation quotation.texi(,117) quotation.texi(,118) @quotation @* quotation.texi(,119) @end quotation quotation.texi(,120) @end example quotation.texi(,121) quotation.texi(,122) @bye texi2html-1.82/test/formatting/res/texi_quotation/quotation.texi0000644000175000017500000000304111264347123027145 0ustar flichtenheldflichtenheld\input texinfo.tex @c -*-texinfo-*- @setfilename quotation.info @node Top @top Quotations @quotation A quot---ation @end quotation @quotation Note A Note @end quotation @quotation note A note @end quotation @quotation Caution Caution @end quotation @quotation Important Important @end quotation @quotation Tip a Tip @end quotation @quotation Warning a Warning. @end quotation @quotation something @'e @TeX{} The something @'e @TeX{} is here. @end quotation @quotation @@ at the end of line @ A @@ at the end of the @@quotation line. @end quotation @quotation something, other thing something, other thing @end quotation @quotation Note, the note Note, the note @end quotation @quotation @end quotation @quotation Empty @end quotation @quotation @asis{} @end quotation @quotation @* @end quotation @example @quotation A quot---ation @end quotation @quotation Note A Note @end quotation @quotation note A note @end quotation @quotation Caution Caution @end quotation @quotation Important Important @end quotation @quotation Tip a Tip @end quotation @quotation Warning a Warning. @end quotation @quotation something @'e @TeX{} The something @'e @TeX{} is here. @end quotation @quotation @@ at the end of line @ A @@ at the end of the @@quotation line. @end quotation @quotation something, other thing something, other thing @end quotation @quotation Note, the note Note, the note @end quotation @quotation @end quotation @quotation Empty @end quotation @quotation @asis{} @end quotation @quotation @* @end quotation @end example @bye texi2html-1.82/test/formatting/res/texi_quotation/quotation.20000644000175000017500000000000011264347123026325 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_quotation/quotation.passfirst0000644000175000017500000000757511264347123030232 0ustar flichtenheldflichtenheldquotation.texi(,2) quotation.texi(,3) @setfilename quotation.info quotation.texi(,4) quotation.texi(,5) @node Top quotation.texi(,6) @top Quotations quotation.texi(,7) quotation.texi(,8) @quotation quotation.texi(,9) A quot---ation quotation.texi(,10) @end quotation quotation.texi(,11) quotation.texi(,12) @quotation Note quotation.texi(,13) A Note quotation.texi(,14) @end quotation quotation.texi(,15) quotation.texi(,16) @quotation note quotation.texi(,17) A note quotation.texi(,18) @end quotation quotation.texi(,19) quotation.texi(,20) @quotation Caution quotation.texi(,21) Caution quotation.texi(,22) @end quotation quotation.texi(,23) quotation.texi(,24) @quotation Important quotation.texi(,25) Important quotation.texi(,26) @end quotation quotation.texi(,27) quotation.texi(,28) @quotation Tip quotation.texi(,29) a Tip quotation.texi(,30) @end quotation quotation.texi(,31) quotation.texi(,32) @quotation Warning quotation.texi(,33) a Warning. quotation.texi(,34) @end quotation quotation.texi(,35) quotation.texi(,36) @quotation something @'e @TeX{} quotation.texi(,37) The something @'e @TeX{} is here. quotation.texi(,38) @end quotation quotation.texi(,39) quotation.texi(,40) @quotation @@ at the end of line @ quotation.texi(,41) A @@ at the end of the @@quotation line. quotation.texi(,42) @end quotation quotation.texi(,43) quotation.texi(,44) @quotation something, other thing quotation.texi(,45) something, other thing quotation.texi(,46) @end quotation quotation.texi(,47) quotation.texi(,48) @quotation Note, the note quotation.texi(,49) Note, the note quotation.texi(,50) @end quotation quotation.texi(,51) quotation.texi(,52) @quotation quotation.texi(,53) @end quotation quotation.texi(,54) quotation.texi(,55) @quotation Empty quotation.texi(,56) @end quotation quotation.texi(,57) quotation.texi(,58) @quotation @asis{} quotation.texi(,59) @end quotation quotation.texi(,60) quotation.texi(,61) @quotation @* quotation.texi(,62) @end quotation quotation.texi(,63) quotation.texi(,64) @example quotation.texi(,65) @quotation quotation.texi(,66) A quot---ation quotation.texi(,67) @end quotation quotation.texi(,68) quotation.texi(,69) @quotation Note quotation.texi(,70) A Note quotation.texi(,71) @end quotation quotation.texi(,72) quotation.texi(,73) @quotation note quotation.texi(,74) A note quotation.texi(,75) @end quotation quotation.texi(,76) quotation.texi(,77) @quotation Caution quotation.texi(,78) Caution quotation.texi(,79) @end quotation quotation.texi(,80) quotation.texi(,81) @quotation Important quotation.texi(,82) Important quotation.texi(,83) @end quotation quotation.texi(,84) quotation.texi(,85) @quotation Tip quotation.texi(,86) a Tip quotation.texi(,87) @end quotation quotation.texi(,88) quotation.texi(,89) @quotation Warning quotation.texi(,90) a Warning. quotation.texi(,91) @end quotation quotation.texi(,92) quotation.texi(,93) @quotation something @'e @TeX{} quotation.texi(,94) The something @'e @TeX{} is here. quotation.texi(,95) @end quotation quotation.texi(,96) quotation.texi(,97) @quotation @@ at the end of line @ quotation.texi(,98) A @@ at the end of the @@quotation line. quotation.texi(,99) @end quotation quotation.texi(,100) quotation.texi(,101) @quotation something, other thing quotation.texi(,102) something, other thing quotation.texi(,103) @end quotation quotation.texi(,104) quotation.texi(,105) @quotation Note, the note quotation.texi(,106) Note, the note quotation.texi(,107) @end quotation quotation.texi(,108) quotation.texi(,109) @quotation quotation.texi(,110) @end quotation quotation.texi(,111) quotation.texi(,112) @quotation Empty quotation.texi(,113) @end quotation quotation.texi(,114) quotation.texi(,115) @quotation @asis{} quotation.texi(,116) @end quotation quotation.texi(,117) quotation.texi(,118) @quotation @* quotation.texi(,119) @end quotation quotation.texi(,120) @end example quotation.texi(,121) quotation.texi(,122) @bye texi2html-1.82/test/formatting/res/texi_block_EOL/0000755000175000017500000000000011264347123023777 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_block_EOL/block_EOL.passtexi0000644000175000017500000000603411264347123027355 0ustar flichtenheldflichtenheldblock_EOL.texi(,2) block_EOL.texi(,3) @setfilename block_EOL.info block_EOL.texi(,4) block_EOL.texi(,5) @node Top block_EOL.texi(,6) @top Test for end of lines and block commands block_EOL.texi(,7) block_EOL.texi(,8) @heading html block_EOL.texi(,9) block_EOL.texi(,10) Block commands on a line block_EOL.texi(,11) @html block_EOL.texi(,12) in block block_EOL.texi(,13) in block l2 block_EOL.texi(,14) @end html block_EOL.texi(,15) end commands on a line. block_EOL.texi(,16) block_EOL.texi(,17) Block commands on a line. A dot in the end of the block block_EOL.texi(,18) @html block_EOL.texi(,19) in block block_EOL.texi(,20) in block l2. block_EOL.texi(,21) @end html block_EOL.texi(,22) end commands on a line, after the block with a dot. block_EOL.texi(,23) block_EOL.texi(,24) Before the opening command @html block_EOL.texi(,25) in block block_EOL.texi(,26) @end html block_EOL.texi(,27) end commands on a line. block_EOL.texi(,28) block_EOL.texi(,29) Before the opening command @html block_EOL.texi(,30) in block block_EOL.texi(,31) @end html after the closing command. block_EOL.texi(,32) block_EOL.texi(,33) Before the opening command @html block_EOL.texi(,34) in block block_EOL.texi(,35) @end html block_EOL.texi(,36) . A symbol on a line. block_EOL.texi(,37) block_EOL.texi(,38) Before the opening command @html block_EOL.texi(,39) in block block_EOL.texi(,40) @end html. A symbol after the closing command. block_EOL.texi(,41) block_EOL.texi(,42) @heading tex block_EOL.texi(,43) block_EOL.texi(,44) Block commands on a line block_EOL.texi(,48) end commands on a line. block_EOL.texi(,49) block_EOL.texi(,53) Before the opening command block_EOL.texi(,53) end commands on a line. block_EOL.texi(,54) block_EOL.texi(,57) Before the opening command block_EOL.texi(,57) after the closing command. block_EOL.texi(,58) block_EOL.texi(,62) Before the opening command block_EOL.texi(,62) . A symbol on a line. block_EOL.texi(,63) block_EOL.texi(,66) Before the opening command block_EOL.texi(,66) . A symbol after the closing command. block_EOL.texi(,67) block_EOL.texi(,68) block_EOL.texi(,69) @heading verbatim block_EOL.texi(,70) block_EOL.texi(,71) Block commands on a line block_EOL.texi(,72) @verbatim block_EOL.texi(,73) in block block_EOL.texi(,74) @end verbatim block_EOL.texi(,75) end commands on a line. block_EOL.texi(,76) block_EOL.texi(,77) Before the opening command @verbatim block_EOL.texi(,78) in block block_EOL.texi(,79) @end verbatim block_EOL.texi(,80) end commands on a line. block_EOL.texi(,81) block_EOL.texi(,82) Before the opening command @verbatim block_EOL.texi(,83) in block block_EOL.texi(,84) @end verbatim after the closing command. block_EOL.texi(,85) block_EOL.texi(,86) Before the opening command @verbatim block_EOL.texi(,87) in block block_EOL.texi(,88) @end verbatim block_EOL.texi(,89) . A symbol on a line. block_EOL.texi(,90) block_EOL.texi(,91) Before the opening command @verbatim block_EOL.texi(,92) in block block_EOL.texi(,93) @end verbatim. A symbol after the closing command. block_EOL.texi(,94) block_EOL.texi(,95) @bye texi2html-1.82/test/formatting/res/texi_block_EOL/block_EOL.passfirst0000644000175000017500000000571411264347123027537 0ustar flichtenheldflichtenheldblock_EOL.texi(,2) block_EOL.texi(,3) @setfilename block_EOL.info block_EOL.texi(,4) block_EOL.texi(,5) @node Top block_EOL.texi(,6) @top Test for end of lines and block commands block_EOL.texi(,7) block_EOL.texi(,8) @heading html block_EOL.texi(,9) block_EOL.texi(,10) Block commands on a line block_EOL.texi(,11) @html block_EOL.texi(,12) in block block_EOL.texi(,13) in block l2 block_EOL.texi(,14) @end html block_EOL.texi(,15) end commands on a line. block_EOL.texi(,16) block_EOL.texi(,17) Block commands on a line. A dot in the end of the block block_EOL.texi(,18) @html block_EOL.texi(,19) in block block_EOL.texi(,20) in block l2. block_EOL.texi(,21) @end html block_EOL.texi(,22) end commands on a line, after the block with a dot. block_EOL.texi(,23) block_EOL.texi(,24) Before the opening command @html block_EOL.texi(,25) in block block_EOL.texi(,26) @end html block_EOL.texi(,27) end commands on a line. block_EOL.texi(,28) block_EOL.texi(,29) Before the opening command @html block_EOL.texi(,30) in block block_EOL.texi(,31) @end html after the closing command. block_EOL.texi(,32) block_EOL.texi(,33) Before the opening command @html block_EOL.texi(,34) in block block_EOL.texi(,35) @end html block_EOL.texi(,36) . A symbol on a line. block_EOL.texi(,37) block_EOL.texi(,38) Before the opening command @html block_EOL.texi(,39) in block block_EOL.texi(,40) @end html. A symbol after the closing command. block_EOL.texi(,41) block_EOL.texi(,42) @heading tex block_EOL.texi(,43) block_EOL.texi(,44) Block commands on a line block_EOL.texi(,48) end commands on a line. block_EOL.texi(,49) block_EOL.texi(,53) Before the opening command end commands on a line. block_EOL.texi(,54) block_EOL.texi(,57) Before the opening command after the closing command. block_EOL.texi(,58) block_EOL.texi(,62) Before the opening command . A symbol on a line. block_EOL.texi(,63) block_EOL.texi(,66) Before the opening command . A symbol after the closing command. block_EOL.texi(,67) block_EOL.texi(,68) block_EOL.texi(,69) @heading verbatim block_EOL.texi(,70) block_EOL.texi(,71) Block commands on a line block_EOL.texi(,72) @verbatim block_EOL.texi(,73) in block block_EOL.texi(,74) @end verbatim block_EOL.texi(,75) end commands on a line. block_EOL.texi(,76) block_EOL.texi(,77) Before the opening command @verbatim block_EOL.texi(,78) in block block_EOL.texi(,79) @end verbatim block_EOL.texi(,80) end commands on a line. block_EOL.texi(,81) block_EOL.texi(,82) Before the opening command @verbatim block_EOL.texi(,83) in block block_EOL.texi(,84) @end verbatim after the closing command. block_EOL.texi(,85) block_EOL.texi(,86) Before the opening command @verbatim block_EOL.texi(,87) in block block_EOL.texi(,88) @end verbatim block_EOL.texi(,89) . A symbol on a line. block_EOL.texi(,90) block_EOL.texi(,91) Before the opening command @verbatim block_EOL.texi(,92) in block block_EOL.texi(,93) @end verbatim. A symbol after the closing command. block_EOL.texi(,94) block_EOL.texi(,95) @bye texi2html-1.82/test/formatting/res/texi_block_EOL/block_EOL.texi0000644000175000017500000000264011264347123026465 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename block_EOL.info @node Top @top Test for end of lines and block commands @heading html Block commands on a line @html in block in block l2 @end html end commands on a line. Block commands on a line. A dot in the end of the block @html in block in block l2. @end html end commands on a line, after the block with a dot. Before the opening command @html in block @end html end commands on a line. Before the opening command @html in block @end html after the closing command. Before the opening command @html in block @end html . A symbol on a line. Before the opening command @html in block @end html. A symbol after the closing command. @heading tex Block commands on a line end commands on a line. Before the opening command end commands on a line. Before the opening command after the closing command. Before the opening command . A symbol on a line. Before the opening command . A symbol after the closing command. @heading verbatim Block commands on a line @verbatim in block @end verbatim end commands on a line. Before the opening command @verbatim in block @end verbatim end commands on a line. Before the opening command @verbatim in block @end verbatim after the closing command. Before the opening command @verbatim in block @end verbatim . A symbol on a line. Before the opening command @verbatim in block @end verbatim. A symbol after the closing command. @bye texi2html-1.82/test/formatting/res/texi_block_EOL/block_EOL.20000644000175000017500000000000011264347123025641 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/html-title/0000755000175000017500000000000011264347123023240 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/html-title/html-title.20000644000175000017500000000000011264347123025374 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/html-title/html-title.html0000644000175000017500000000362011264347123026212 0ustar flichtenheldflichtenheld @title HTML test

    Top of @title HTML test

    Top.

    Second paragraph.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/punctuation/0000755000175000017500000000000011264347123023526 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/punctuation/punctuation.20000644000175000017500000000000011264347123026150 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/punctuation/punctuation.html0000644000175000017500000000364511264347123026775 0ustar flichtenheldflichtenheld Untitled Document

    Punctuation commands.

    foo vs. bar. colon :And something else. semi colon ;. And ? ?. Now ! !@ but , ,


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/block_EOL/0000755000175000017500000000000011264347123022746 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/block_EOL/block_EOL.html0000644000175000017500000000647011264347123025434 0ustar flichtenheldflichtenheld Untitled Document

    Test for end of lines and block commands

    html

    Block commands on a line in block in block l2end commands on a line.

    Block commands on a line. A dot in the end of the block in block in block l2.end commands on a line, after the block with a dot.

    Before the opening command in blockend commands on a line.

    Before the opening command in block after the closing command.

    Before the opening command in block. A symbol on a line.

    Before the opening command in block. A symbol after the closing command.

    tex

    Block commands on a line end commands on a line.

    Before the opening command end commands on a line.

    Before the opening command after the closing command.

    Before the opening command . A symbol on a line.

    Before the opening command . A symbol after the closing command.

    verbatim

    Block commands on a line

    in block
    

    end commands on a line.

    Before the opening command

    in block
    

    end commands on a line.

    Before the opening command

    in block
    
    after the closing command.

    Before the opening command

    in block
    

    . A symbol on a line.

    Before the opening command

    in block
    
    . A symbol after the closing command.

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/block_EOL/block_EOL.20000644000175000017500000000000011264347123024610 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/quotation/0000755000175000017500000000000011264347123023200 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/quotation/quotation.20000644000175000017500000000000011264347123025274 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/quotation/quotation.html0000644000175000017500000001044211264347123026112 0ustar flichtenheldflichtenheld Untitled Document

    Quotations

    A quot—ation

    Note: A Note

    note: A note

    Caution: Caution

    Important: Important

    Tip: a Tip

    Warning: a Warning.

    something é TeX: The something é TeX is here.

    @ at the end of line A @ at the end of the @quotation line.

    something, other thing: something, other thing

    Note, the note: Note, the note

    Empty:

    :


    :

     
    A quot---ation
    
    Note: A Note
    
    note: A note
    
    Caution: Caution
    
    Important: Important
    
    Tip: a Tip
    
    Warning: a Warning.
    
    something é TeX: The something é TeX is here.
    
    @ at the end of line  A @ at the end of the @quotation line.
    
    something, other thing: something, other thing
    
    Note, the note: Note, the note
    
    Empty: 
    : 
    
    : 

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/inter_item_commands_xml/0000755000175000017500000000000011264347123026055 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/inter_item_commands_xml/inter_item_commands.xml0000644000175000017500000001070611264347123032623 0ustar flichtenheldflichtenheld inter_item_commands.xml Top (dir) Test inter item ignored commands also a cindex in itemize e–mph item index entry within itemize i–tem 1 index entry right after @itemi–tem 2 T–ext before items. also a cindex in itemize bullet item e–numerate 6 truc index entry between empty lines trouc 600 700 mu–ltitable headitem another tab mu–ltitable item multitable tab mu–ltitable item 2 multitable tab 2 index entry within multitable lone mu–ltitable item ifseti a g log trap1Command log trap1 between deffnxid i ulecmde2id i ule truc cindex in deff item In deff item. a a l–ine
    a a b b l–ine
    a a index entry between item and itemx b b l–ine c c d d
    cindex in table abb l–ine
    cindex in tableTexte before first item. abb
    cp cp fn fn vr vr
    texi2html-1.82/test/formatting/res/inter_item_commands_xml/inter_item_commands.20000644000175000017500000000000011264347123032146 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_indicateurl_paragraph/0000755000175000017500000000000011264347123026536 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_indicateurl_paragraph/indicateurl_paragraph.passtexi0000644000175000017500000000166611264347123034661 0ustar flichtenheldflichtenheldindicateurl_paragraph.texi(,2) indicateurl_paragraph.texi(,3) @setfilename indicateurl_paragraph.info indicateurl_paragraph.texi(,4) indicateurl_paragraph.texi(,5) @node Top indicateurl_paragraph.texi(,6) indicateurl_paragraph.texi(,7) Test a indicateurl with end of line, and including a blank line. In texi2html indicateurl_paragraph.texi(,8) indicateurl is a simple_style, meaning that it should not be cut by indicateurl_paragraph.texi(,9) paragraph. indicateurl_paragraph.texi(,10) indicateurl_paragraph.texi(,11) @indicateurl{http://begin indicateurl_paragraph.texi(,12) continue on other line} indicateurl_paragraph.texi(,13) indicateurl_paragraph.texi(,14) @c texi2dvi doesn't accept this indicateurl_paragraph.texi(,15) @indicateurl{http://begin2 indicateurl_paragraph.texi(,16) indicateurl_paragraph.texi(,17) cut by blank line} indicateurl_paragraph.texi(,18) indicateurl_paragraph.texi(,19) indicateurl_paragraph.texi(,20) @bye texi2html-1.82/test/formatting/res/texi_indicateurl_paragraph/indicateurl_paragraph.passfirst0000644000175000017500000000166611264347123035037 0ustar flichtenheldflichtenheldindicateurl_paragraph.texi(,2) indicateurl_paragraph.texi(,3) @setfilename indicateurl_paragraph.info indicateurl_paragraph.texi(,4) indicateurl_paragraph.texi(,5) @node Top indicateurl_paragraph.texi(,6) indicateurl_paragraph.texi(,7) Test a indicateurl with end of line, and including a blank line. In texi2html indicateurl_paragraph.texi(,8) indicateurl is a simple_style, meaning that it should not be cut by indicateurl_paragraph.texi(,9) paragraph. indicateurl_paragraph.texi(,10) indicateurl_paragraph.texi(,11) @indicateurl{http://begin indicateurl_paragraph.texi(,12) continue on other line} indicateurl_paragraph.texi(,13) indicateurl_paragraph.texi(,14) @c texi2dvi doesn't accept this indicateurl_paragraph.texi(,15) @indicateurl{http://begin2 indicateurl_paragraph.texi(,16) indicateurl_paragraph.texi(,17) cut by blank line} indicateurl_paragraph.texi(,18) indicateurl_paragraph.texi(,19) indicateurl_paragraph.texi(,20) @bye texi2html-1.82/test/formatting/res/texi_indicateurl_paragraph/indicateurl_paragraph.20000644000175000017500000000000011264347123033137 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_indicateurl_paragraph/indicateurl_paragraph.texi0000644000175000017500000000057611264347123033771 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename indicateurl_paragraph.info @node Top Test a indicateurl with end of line, and including a blank line. In texi2html indicateurl is a simple_style, meaning that it should not be cut by paragraph. @indicateurl{http://begin continue on other line} @c texi2dvi doesn't accept this @indicateurl{http://begin2 cut by blank line} @bye texi2html-1.82/test/formatting/res/texi_complex_command_in_simple_command/0000755000175000017500000000000011264347123031110 5ustar flichtenheldflichtenheld././@LongLink0000000000000000000000000000016100000000000011563 Lustar rootroottexi2html-1.82/test/formatting/res/texi_complex_command_in_simple_command/complex_command_in_simple_command.texitexi2html-1.82/test/formatting/res/texi_complex_command_in_simple_command/complex_command_in_simple_0000644000175000017500000000626011264347123036402 0ustar flichtenheldflichtenheld\input texinfo.tex @c -*-texinfo-*- @setfilename complex_command_in_simple_command.info @node Top @top Complex commands in simple commands The complex commands. Table @table @asis @item item line @end table After table. Multitable @multitable {truc} {machin} @item truc @tab machin @end multitable Enumerate. @enumerate 1 @item item @end enumerate After enumerate. Example @example Example @end example After example defun @defun name args... text @end defun After defun. Flushright @flushright in flushright @end flushright Centered line @center in centered line Before quotation @quotation a q--uotation @end quotation After quotation Before cartouche @cartouche Cartouche @end cartouche After cartouche @subheading In samp @samp{ in code Table @table @asis @item item line @end table After table. Multitable @multitable {truc} {machin} @item truc @tab machin @end multitable After multitable. Enumerate. @enumerate 1 @item item @end enumerate After enumerate. Example @example Example @end example After example defun @defun name args... text @end defun After defun. Flushright @flushright in flushright @end flushright Centered line @center in centered line Before quotation @quotation a q--uotation @end quotation After quotation Before cartouche @cartouche Cartouche @end cartouche After cartouche } @subheading in b @b{ in b Table @table @asis @item item line @end table After table. Multitable @multitable {truc} {machin} @item truc @tab machin @end multitable Enumerate. @enumerate 1 @item item @end enumerate After enumerate. Example @example Example @end example After example defun @defun name args... text @end defun After defun. Flushright @flushright in flushright @end flushright Centered line @center in centered line Before quotation @quotation a q--uotation @end quotation After quotation Before cartouche @cartouche Cartouche @end cartouche After cartouche } @subheading in code @code{ In code. Table @table @asis @item item line @end table After table. Multitable @multitable {truc} {machin} @item truc @tab machin @end multitable Enumerate. @enumerate 1 @item item @end enumerate After enumerate. Example @example Example @end example After example defun @defun name args... text @end defun After defun. Flushright @flushright in flushright @end flushright Centered line @center in centered line Before quotation @quotation a q--uotation @end quotation After quotation Before cartouche @cartouche Cartouche @end cartouche After cartouche } @subheading in b and samp @samp{ In samp. @b{ In b Table @table @asis @item item line @end table After table. Multitable @multitable {truc} {machin} @item truc @tab machin @end multitable Enumerate. @enumerate 1 @item item @end enumerate After enumerate. Example @example Example @end example After example defun @defun name args... text @end defun After defun. Flushright @flushright in flushright @end flushright Centered line @center in centered line Before quotation @quotation a q--uotation @end quotation After quotation Before cartouche @cartouche Cartouche @end cartouche After cartouche close b} and close samp } After the tests. @bye ././@LongLink0000000000000000000000000000015600000000000011567 Lustar rootroottexi2html-1.82/test/formatting/res/texi_complex_command_in_simple_command/complex_command_in_simple_command.2texi2html-1.82/test/formatting/res/texi_complex_command_in_simple_command/complex_command_in_simple_0000644000175000017500000000000011264347123036364 0ustar flichtenheldflichtenheld././@LongLink0000000000000000000000000000016600000000000011570 Lustar rootroottexi2html-1.82/test/formatting/res/texi_complex_command_in_simple_command/complex_command_in_simple_command.passfirsttexi2html-1.82/test/formatting/res/texi_complex_command_in_simple_command/complex_command_in_simple_0000644000175000017500000004554711264347123036415 0ustar flichtenheldflichtenheldcomplex_command_in_simple_command.texi(,2) complex_command_in_simple_command.texi(,3) @setfilename complex_command_in_simple_command.info complex_command_in_simple_command.texi(,4) complex_command_in_simple_command.texi(,5) @node Top complex_command_in_simple_command.texi(,6) @top Complex commands in simple commands complex_command_in_simple_command.texi(,7) complex_command_in_simple_command.texi(,8) The complex commands. complex_command_in_simple_command.texi(,9) complex_command_in_simple_command.texi(,10) Table complex_command_in_simple_command.texi(,11) complex_command_in_simple_command.texi(,12) @table @asis complex_command_in_simple_command.texi(,13) @item item complex_command_in_simple_command.texi(,14) line complex_command_in_simple_command.texi(,15) @end table complex_command_in_simple_command.texi(,16) After table. complex_command_in_simple_command.texi(,17) complex_command_in_simple_command.texi(,18) complex_command_in_simple_command.texi(,19) Multitable complex_command_in_simple_command.texi(,20) @multitable {truc} {machin} complex_command_in_simple_command.texi(,21) @item truc @tab machin complex_command_in_simple_command.texi(,22) @end multitable complex_command_in_simple_command.texi(,23) complex_command_in_simple_command.texi(,24) Enumerate. complex_command_in_simple_command.texi(,25) complex_command_in_simple_command.texi(,26) @enumerate 1 complex_command_in_simple_command.texi(,27) @item item complex_command_in_simple_command.texi(,28) @end enumerate complex_command_in_simple_command.texi(,29) complex_command_in_simple_command.texi(,30) After enumerate. complex_command_in_simple_command.texi(,31) complex_command_in_simple_command.texi(,32) Example complex_command_in_simple_command.texi(,33) complex_command_in_simple_command.texi(,34) @example complex_command_in_simple_command.texi(,35) Example complex_command_in_simple_command.texi(,36) @end example complex_command_in_simple_command.texi(,37) complex_command_in_simple_command.texi(,38) After example complex_command_in_simple_command.texi(,39) complex_command_in_simple_command.texi(,40) defun complex_command_in_simple_command.texi(,41) complex_command_in_simple_command.texi(,42) @defun name args... complex_command_in_simple_command.texi(,43) text complex_command_in_simple_command.texi(,44) @end defun complex_command_in_simple_command.texi(,45) complex_command_in_simple_command.texi(,46) After defun. complex_command_in_simple_command.texi(,47) complex_command_in_simple_command.texi(,48) Flushright complex_command_in_simple_command.texi(,49) complex_command_in_simple_command.texi(,50) @flushright complex_command_in_simple_command.texi(,51) in flushright complex_command_in_simple_command.texi(,52) @end flushright complex_command_in_simple_command.texi(,53) complex_command_in_simple_command.texi(,54) Centered line complex_command_in_simple_command.texi(,55) complex_command_in_simple_command.texi(,56) @center in centered line complex_command_in_simple_command.texi(,57) complex_command_in_simple_command.texi(,58) Before quotation complex_command_in_simple_command.texi(,59) complex_command_in_simple_command.texi(,60) @quotation complex_command_in_simple_command.texi(,61) a q--uotation complex_command_in_simple_command.texi(,62) @end quotation complex_command_in_simple_command.texi(,63) complex_command_in_simple_command.texi(,64) After quotation complex_command_in_simple_command.texi(,65) complex_command_in_simple_command.texi(,66) Before cartouche complex_command_in_simple_command.texi(,67) complex_command_in_simple_command.texi(,68) @cartouche complex_command_in_simple_command.texi(,69) Cartouche complex_command_in_simple_command.texi(,70) @end cartouche complex_command_in_simple_command.texi(,71) complex_command_in_simple_command.texi(,72) After cartouche complex_command_in_simple_command.texi(,73) complex_command_in_simple_command.texi(,74) @subheading In samp complex_command_in_simple_command.texi(,75) complex_command_in_simple_command.texi(,76) @samp{ complex_command_in_simple_command.texi(,77) in code complex_command_in_simple_command.texi(,78) complex_command_in_simple_command.texi(,79) Table complex_command_in_simple_command.texi(,80) complex_command_in_simple_command.texi(,81) @table @asis complex_command_in_simple_command.texi(,82) @item item complex_command_in_simple_command.texi(,83) line complex_command_in_simple_command.texi(,84) @end table complex_command_in_simple_command.texi(,85) After table. complex_command_in_simple_command.texi(,86) complex_command_in_simple_command.texi(,87) Multitable complex_command_in_simple_command.texi(,88) @multitable {truc} {machin} complex_command_in_simple_command.texi(,89) @item truc @tab machin complex_command_in_simple_command.texi(,90) @end multitable complex_command_in_simple_command.texi(,91) complex_command_in_simple_command.texi(,92) After multitable. complex_command_in_simple_command.texi(,93) complex_command_in_simple_command.texi(,94) Enumerate. complex_command_in_simple_command.texi(,95) complex_command_in_simple_command.texi(,96) @enumerate 1 complex_command_in_simple_command.texi(,97) @item item complex_command_in_simple_command.texi(,98) @end enumerate complex_command_in_simple_command.texi(,99) complex_command_in_simple_command.texi(,100) After enumerate. complex_command_in_simple_command.texi(,101) complex_command_in_simple_command.texi(,102) Example complex_command_in_simple_command.texi(,103) complex_command_in_simple_command.texi(,104) @example complex_command_in_simple_command.texi(,105) Example complex_command_in_simple_command.texi(,106) @end example complex_command_in_simple_command.texi(,107) complex_command_in_simple_command.texi(,108) After example complex_command_in_simple_command.texi(,109) complex_command_in_simple_command.texi(,110) defun complex_command_in_simple_command.texi(,111) complex_command_in_simple_command.texi(,112) @defun name args... complex_command_in_simple_command.texi(,113) text complex_command_in_simple_command.texi(,114) @end defun complex_command_in_simple_command.texi(,115) complex_command_in_simple_command.texi(,116) After defun. complex_command_in_simple_command.texi(,117) complex_command_in_simple_command.texi(,118) Flushright complex_command_in_simple_command.texi(,119) complex_command_in_simple_command.texi(,120) @flushright complex_command_in_simple_command.texi(,121) in flushright complex_command_in_simple_command.texi(,122) @end flushright complex_command_in_simple_command.texi(,123) complex_command_in_simple_command.texi(,124) Centered line complex_command_in_simple_command.texi(,125) complex_command_in_simple_command.texi(,126) @center in centered line complex_command_in_simple_command.texi(,127) complex_command_in_simple_command.texi(,128) Before quotation complex_command_in_simple_command.texi(,129) complex_command_in_simple_command.texi(,130) @quotation complex_command_in_simple_command.texi(,131) a q--uotation complex_command_in_simple_command.texi(,132) @end quotation complex_command_in_simple_command.texi(,133) complex_command_in_simple_command.texi(,134) After quotation complex_command_in_simple_command.texi(,135) complex_command_in_simple_command.texi(,136) Before cartouche complex_command_in_simple_command.texi(,137) complex_command_in_simple_command.texi(,138) @cartouche complex_command_in_simple_command.texi(,139) Cartouche complex_command_in_simple_command.texi(,140) @end cartouche complex_command_in_simple_command.texi(,141) complex_command_in_simple_command.texi(,142) After cartouche complex_command_in_simple_command.texi(,143) complex_command_in_simple_command.texi(,144) } complex_command_in_simple_command.texi(,145) complex_command_in_simple_command.texi(,146) @subheading in b complex_command_in_simple_command.texi(,147) complex_command_in_simple_command.texi(,148) @b{ complex_command_in_simple_command.texi(,149) in b complex_command_in_simple_command.texi(,150) complex_command_in_simple_command.texi(,151) Table complex_command_in_simple_command.texi(,152) complex_command_in_simple_command.texi(,153) @table @asis complex_command_in_simple_command.texi(,154) @item item complex_command_in_simple_command.texi(,155) line complex_command_in_simple_command.texi(,156) @end table complex_command_in_simple_command.texi(,157) After table. complex_command_in_simple_command.texi(,158) complex_command_in_simple_command.texi(,159) Multitable complex_command_in_simple_command.texi(,160) @multitable {truc} {machin} complex_command_in_simple_command.texi(,161) @item truc @tab machin complex_command_in_simple_command.texi(,162) @end multitable complex_command_in_simple_command.texi(,163) complex_command_in_simple_command.texi(,164) complex_command_in_simple_command.texi(,165) Enumerate. complex_command_in_simple_command.texi(,166) complex_command_in_simple_command.texi(,167) @enumerate 1 complex_command_in_simple_command.texi(,168) @item item complex_command_in_simple_command.texi(,169) @end enumerate complex_command_in_simple_command.texi(,170) complex_command_in_simple_command.texi(,171) After enumerate. complex_command_in_simple_command.texi(,172) Example complex_command_in_simple_command.texi(,173) complex_command_in_simple_command.texi(,174) @example complex_command_in_simple_command.texi(,175) Example complex_command_in_simple_command.texi(,176) @end example complex_command_in_simple_command.texi(,177) complex_command_in_simple_command.texi(,178) After example complex_command_in_simple_command.texi(,179) complex_command_in_simple_command.texi(,180) defun complex_command_in_simple_command.texi(,181) complex_command_in_simple_command.texi(,182) @defun name args... complex_command_in_simple_command.texi(,183) text complex_command_in_simple_command.texi(,184) @end defun complex_command_in_simple_command.texi(,185) complex_command_in_simple_command.texi(,186) After defun. complex_command_in_simple_command.texi(,187) complex_command_in_simple_command.texi(,188) Flushright complex_command_in_simple_command.texi(,189) complex_command_in_simple_command.texi(,190) @flushright complex_command_in_simple_command.texi(,191) in flushright complex_command_in_simple_command.texi(,192) @end flushright complex_command_in_simple_command.texi(,193) complex_command_in_simple_command.texi(,194) Centered line complex_command_in_simple_command.texi(,195) complex_command_in_simple_command.texi(,196) @center in centered line complex_command_in_simple_command.texi(,197) complex_command_in_simple_command.texi(,198) Before quotation complex_command_in_simple_command.texi(,199) complex_command_in_simple_command.texi(,200) @quotation complex_command_in_simple_command.texi(,201) a q--uotation complex_command_in_simple_command.texi(,202) @end quotation complex_command_in_simple_command.texi(,203) complex_command_in_simple_command.texi(,204) After quotation complex_command_in_simple_command.texi(,205) complex_command_in_simple_command.texi(,206) Before cartouche complex_command_in_simple_command.texi(,207) complex_command_in_simple_command.texi(,208) @cartouche complex_command_in_simple_command.texi(,209) Cartouche complex_command_in_simple_command.texi(,210) @end cartouche complex_command_in_simple_command.texi(,211) complex_command_in_simple_command.texi(,212) After cartouche complex_command_in_simple_command.texi(,213) } complex_command_in_simple_command.texi(,214) complex_command_in_simple_command.texi(,215) @subheading in code complex_command_in_simple_command.texi(,216) @code{ complex_command_in_simple_command.texi(,217) In code. complex_command_in_simple_command.texi(,218) complex_command_in_simple_command.texi(,219) Table complex_command_in_simple_command.texi(,220) complex_command_in_simple_command.texi(,221) @table @asis complex_command_in_simple_command.texi(,222) @item item complex_command_in_simple_command.texi(,223) line complex_command_in_simple_command.texi(,224) @end table complex_command_in_simple_command.texi(,225) After table. complex_command_in_simple_command.texi(,226) complex_command_in_simple_command.texi(,227) complex_command_in_simple_command.texi(,228) Multitable complex_command_in_simple_command.texi(,229) @multitable {truc} {machin} complex_command_in_simple_command.texi(,230) @item truc @tab machin complex_command_in_simple_command.texi(,231) @end multitable complex_command_in_simple_command.texi(,232) complex_command_in_simple_command.texi(,233) Enumerate. complex_command_in_simple_command.texi(,234) complex_command_in_simple_command.texi(,235) @enumerate 1 complex_command_in_simple_command.texi(,236) @item item complex_command_in_simple_command.texi(,237) @end enumerate complex_command_in_simple_command.texi(,238) complex_command_in_simple_command.texi(,239) After enumerate. complex_command_in_simple_command.texi(,240) complex_command_in_simple_command.texi(,241) Example complex_command_in_simple_command.texi(,242) complex_command_in_simple_command.texi(,243) @example complex_command_in_simple_command.texi(,244) Example complex_command_in_simple_command.texi(,245) @end example complex_command_in_simple_command.texi(,246) complex_command_in_simple_command.texi(,247) After example complex_command_in_simple_command.texi(,248) complex_command_in_simple_command.texi(,249) defun complex_command_in_simple_command.texi(,250) complex_command_in_simple_command.texi(,251) @defun name args... complex_command_in_simple_command.texi(,252) text complex_command_in_simple_command.texi(,253) @end defun complex_command_in_simple_command.texi(,254) complex_command_in_simple_command.texi(,255) After defun. complex_command_in_simple_command.texi(,256) complex_command_in_simple_command.texi(,257) Flushright complex_command_in_simple_command.texi(,258) complex_command_in_simple_command.texi(,259) @flushright complex_command_in_simple_command.texi(,260) in flushright complex_command_in_simple_command.texi(,261) @end flushright complex_command_in_simple_command.texi(,262) complex_command_in_simple_command.texi(,263) Centered line complex_command_in_simple_command.texi(,264) complex_command_in_simple_command.texi(,265) @center in centered line complex_command_in_simple_command.texi(,266) complex_command_in_simple_command.texi(,267) Before quotation complex_command_in_simple_command.texi(,268) complex_command_in_simple_command.texi(,269) @quotation complex_command_in_simple_command.texi(,270) a q--uotation complex_command_in_simple_command.texi(,271) @end quotation complex_command_in_simple_command.texi(,272) complex_command_in_simple_command.texi(,273) After quotation complex_command_in_simple_command.texi(,274) complex_command_in_simple_command.texi(,275) Before cartouche complex_command_in_simple_command.texi(,276) complex_command_in_simple_command.texi(,277) @cartouche complex_command_in_simple_command.texi(,278) Cartouche complex_command_in_simple_command.texi(,279) @end cartouche complex_command_in_simple_command.texi(,280) complex_command_in_simple_command.texi(,281) After cartouche complex_command_in_simple_command.texi(,282) } complex_command_in_simple_command.texi(,283) complex_command_in_simple_command.texi(,284) complex_command_in_simple_command.texi(,285) @subheading in b and samp complex_command_in_simple_command.texi(,286) @samp{ complex_command_in_simple_command.texi(,287) In samp. complex_command_in_simple_command.texi(,288) @b{ complex_command_in_simple_command.texi(,289) In b complex_command_in_simple_command.texi(,290) complex_command_in_simple_command.texi(,291) Table complex_command_in_simple_command.texi(,292) complex_command_in_simple_command.texi(,293) @table @asis complex_command_in_simple_command.texi(,294) @item item complex_command_in_simple_command.texi(,295) line complex_command_in_simple_command.texi(,296) @end table complex_command_in_simple_command.texi(,297) After table. complex_command_in_simple_command.texi(,298) complex_command_in_simple_command.texi(,299) complex_command_in_simple_command.texi(,300) Multitable complex_command_in_simple_command.texi(,301) @multitable {truc} {machin} complex_command_in_simple_command.texi(,302) @item truc @tab machin complex_command_in_simple_command.texi(,303) @end multitable complex_command_in_simple_command.texi(,304) complex_command_in_simple_command.texi(,305) Enumerate. complex_command_in_simple_command.texi(,306) complex_command_in_simple_command.texi(,307) @enumerate 1 complex_command_in_simple_command.texi(,308) @item item complex_command_in_simple_command.texi(,309) @end enumerate complex_command_in_simple_command.texi(,310) complex_command_in_simple_command.texi(,311) After enumerate. complex_command_in_simple_command.texi(,312) complex_command_in_simple_command.texi(,313) Example complex_command_in_simple_command.texi(,314) complex_command_in_simple_command.texi(,315) @example complex_command_in_simple_command.texi(,316) Example complex_command_in_simple_command.texi(,317) @end example complex_command_in_simple_command.texi(,318) complex_command_in_simple_command.texi(,319) After example complex_command_in_simple_command.texi(,320) complex_command_in_simple_command.texi(,321) defun complex_command_in_simple_command.texi(,322) complex_command_in_simple_command.texi(,323) @defun name args... complex_command_in_simple_command.texi(,324) text complex_command_in_simple_command.texi(,325) @end defun complex_command_in_simple_command.texi(,326) complex_command_in_simple_command.texi(,327) After defun. complex_command_in_simple_command.texi(,328) complex_command_in_simple_command.texi(,329) Flushright complex_command_in_simple_command.texi(,330) complex_command_in_simple_command.texi(,331) @flushright complex_command_in_simple_command.texi(,332) in flushright complex_command_in_simple_command.texi(,333) @end flushright complex_command_in_simple_command.texi(,334) complex_command_in_simple_command.texi(,335) Centered line complex_command_in_simple_command.texi(,336) complex_command_in_simple_command.texi(,337) @center in centered line complex_command_in_simple_command.texi(,338) complex_command_in_simple_command.texi(,339) Before quotation complex_command_in_simple_command.texi(,340) complex_command_in_simple_command.texi(,341) @quotation complex_command_in_simple_command.texi(,342) a q--uotation complex_command_in_simple_command.texi(,343) @end quotation complex_command_in_simple_command.texi(,344) complex_command_in_simple_command.texi(,345) After quotation complex_command_in_simple_command.texi(,346) complex_command_in_simple_command.texi(,347) Before cartouche complex_command_in_simple_command.texi(,348) complex_command_in_simple_command.texi(,349) @cartouche complex_command_in_simple_command.texi(,350) Cartouche complex_command_in_simple_command.texi(,351) @end cartouche complex_command_in_simple_command.texi(,352) complex_command_in_simple_command.texi(,353) After cartouche complex_command_in_simple_command.texi(,354) complex_command_in_simple_command.texi(,355) close b} complex_command_in_simple_command.texi(,356) and close samp complex_command_in_simple_command.texi(,357) } complex_command_in_simple_command.texi(,358) complex_command_in_simple_command.texi(,359) After the tests. complex_command_in_simple_command.texi(,360) complex_command_in_simple_command.texi(,361) @bye ././@LongLink0000000000000000000000000000016500000000000011567 Lustar rootroottexi2html-1.82/test/formatting/res/texi_complex_command_in_simple_command/complex_command_in_simple_command.passtexitexi2html-1.82/test/formatting/res/texi_complex_command_in_simple_command/complex_command_in_simple_0000644000175000017500000004554711264347123036415 0ustar flichtenheldflichtenheldcomplex_command_in_simple_command.texi(,2) complex_command_in_simple_command.texi(,3) @setfilename complex_command_in_simple_command.info complex_command_in_simple_command.texi(,4) complex_command_in_simple_command.texi(,5) @node Top complex_command_in_simple_command.texi(,6) @top Complex commands in simple commands complex_command_in_simple_command.texi(,7) complex_command_in_simple_command.texi(,8) The complex commands. complex_command_in_simple_command.texi(,9) complex_command_in_simple_command.texi(,10) Table complex_command_in_simple_command.texi(,11) complex_command_in_simple_command.texi(,12) @table @asis complex_command_in_simple_command.texi(,13) @item item complex_command_in_simple_command.texi(,14) line complex_command_in_simple_command.texi(,15) @end table complex_command_in_simple_command.texi(,16) After table. complex_command_in_simple_command.texi(,17) complex_command_in_simple_command.texi(,18) complex_command_in_simple_command.texi(,19) Multitable complex_command_in_simple_command.texi(,20) @multitable {truc} {machin} complex_command_in_simple_command.texi(,21) @item truc @tab machin complex_command_in_simple_command.texi(,22) @end multitable complex_command_in_simple_command.texi(,23) complex_command_in_simple_command.texi(,24) Enumerate. complex_command_in_simple_command.texi(,25) complex_command_in_simple_command.texi(,26) @enumerate 1 complex_command_in_simple_command.texi(,27) @item item complex_command_in_simple_command.texi(,28) @end enumerate complex_command_in_simple_command.texi(,29) complex_command_in_simple_command.texi(,30) After enumerate. complex_command_in_simple_command.texi(,31) complex_command_in_simple_command.texi(,32) Example complex_command_in_simple_command.texi(,33) complex_command_in_simple_command.texi(,34) @example complex_command_in_simple_command.texi(,35) Example complex_command_in_simple_command.texi(,36) @end example complex_command_in_simple_command.texi(,37) complex_command_in_simple_command.texi(,38) After example complex_command_in_simple_command.texi(,39) complex_command_in_simple_command.texi(,40) defun complex_command_in_simple_command.texi(,41) complex_command_in_simple_command.texi(,42) @defun name args... complex_command_in_simple_command.texi(,43) text complex_command_in_simple_command.texi(,44) @end defun complex_command_in_simple_command.texi(,45) complex_command_in_simple_command.texi(,46) After defun. complex_command_in_simple_command.texi(,47) complex_command_in_simple_command.texi(,48) Flushright complex_command_in_simple_command.texi(,49) complex_command_in_simple_command.texi(,50) @flushright complex_command_in_simple_command.texi(,51) in flushright complex_command_in_simple_command.texi(,52) @end flushright complex_command_in_simple_command.texi(,53) complex_command_in_simple_command.texi(,54) Centered line complex_command_in_simple_command.texi(,55) complex_command_in_simple_command.texi(,56) @center in centered line complex_command_in_simple_command.texi(,57) complex_command_in_simple_command.texi(,58) Before quotation complex_command_in_simple_command.texi(,59) complex_command_in_simple_command.texi(,60) @quotation complex_command_in_simple_command.texi(,61) a q--uotation complex_command_in_simple_command.texi(,62) @end quotation complex_command_in_simple_command.texi(,63) complex_command_in_simple_command.texi(,64) After quotation complex_command_in_simple_command.texi(,65) complex_command_in_simple_command.texi(,66) Before cartouche complex_command_in_simple_command.texi(,67) complex_command_in_simple_command.texi(,68) @cartouche complex_command_in_simple_command.texi(,69) Cartouche complex_command_in_simple_command.texi(,70) @end cartouche complex_command_in_simple_command.texi(,71) complex_command_in_simple_command.texi(,72) After cartouche complex_command_in_simple_command.texi(,73) complex_command_in_simple_command.texi(,74) @subheading In samp complex_command_in_simple_command.texi(,75) complex_command_in_simple_command.texi(,76) @samp{ complex_command_in_simple_command.texi(,77) in code complex_command_in_simple_command.texi(,78) complex_command_in_simple_command.texi(,79) Table complex_command_in_simple_command.texi(,80) complex_command_in_simple_command.texi(,81) @table @asis complex_command_in_simple_command.texi(,82) @item item complex_command_in_simple_command.texi(,83) line complex_command_in_simple_command.texi(,84) @end table complex_command_in_simple_command.texi(,85) After table. complex_command_in_simple_command.texi(,86) complex_command_in_simple_command.texi(,87) Multitable complex_command_in_simple_command.texi(,88) @multitable {truc} {machin} complex_command_in_simple_command.texi(,89) @item truc @tab machin complex_command_in_simple_command.texi(,90) @end multitable complex_command_in_simple_command.texi(,91) complex_command_in_simple_command.texi(,92) After multitable. complex_command_in_simple_command.texi(,93) complex_command_in_simple_command.texi(,94) Enumerate. complex_command_in_simple_command.texi(,95) complex_command_in_simple_command.texi(,96) @enumerate 1 complex_command_in_simple_command.texi(,97) @item item complex_command_in_simple_command.texi(,98) @end enumerate complex_command_in_simple_command.texi(,99) complex_command_in_simple_command.texi(,100) After enumerate. complex_command_in_simple_command.texi(,101) complex_command_in_simple_command.texi(,102) Example complex_command_in_simple_command.texi(,103) complex_command_in_simple_command.texi(,104) @example complex_command_in_simple_command.texi(,105) Example complex_command_in_simple_command.texi(,106) @end example complex_command_in_simple_command.texi(,107) complex_command_in_simple_command.texi(,108) After example complex_command_in_simple_command.texi(,109) complex_command_in_simple_command.texi(,110) defun complex_command_in_simple_command.texi(,111) complex_command_in_simple_command.texi(,112) @defun name args... complex_command_in_simple_command.texi(,113) text complex_command_in_simple_command.texi(,114) @end defun complex_command_in_simple_command.texi(,115) complex_command_in_simple_command.texi(,116) After defun. complex_command_in_simple_command.texi(,117) complex_command_in_simple_command.texi(,118) Flushright complex_command_in_simple_command.texi(,119) complex_command_in_simple_command.texi(,120) @flushright complex_command_in_simple_command.texi(,121) in flushright complex_command_in_simple_command.texi(,122) @end flushright complex_command_in_simple_command.texi(,123) complex_command_in_simple_command.texi(,124) Centered line complex_command_in_simple_command.texi(,125) complex_command_in_simple_command.texi(,126) @center in centered line complex_command_in_simple_command.texi(,127) complex_command_in_simple_command.texi(,128) Before quotation complex_command_in_simple_command.texi(,129) complex_command_in_simple_command.texi(,130) @quotation complex_command_in_simple_command.texi(,131) a q--uotation complex_command_in_simple_command.texi(,132) @end quotation complex_command_in_simple_command.texi(,133) complex_command_in_simple_command.texi(,134) After quotation complex_command_in_simple_command.texi(,135) complex_command_in_simple_command.texi(,136) Before cartouche complex_command_in_simple_command.texi(,137) complex_command_in_simple_command.texi(,138) @cartouche complex_command_in_simple_command.texi(,139) Cartouche complex_command_in_simple_command.texi(,140) @end cartouche complex_command_in_simple_command.texi(,141) complex_command_in_simple_command.texi(,142) After cartouche complex_command_in_simple_command.texi(,143) complex_command_in_simple_command.texi(,144) } complex_command_in_simple_command.texi(,145) complex_command_in_simple_command.texi(,146) @subheading in b complex_command_in_simple_command.texi(,147) complex_command_in_simple_command.texi(,148) @b{ complex_command_in_simple_command.texi(,149) in b complex_command_in_simple_command.texi(,150) complex_command_in_simple_command.texi(,151) Table complex_command_in_simple_command.texi(,152) complex_command_in_simple_command.texi(,153) @table @asis complex_command_in_simple_command.texi(,154) @item item complex_command_in_simple_command.texi(,155) line complex_command_in_simple_command.texi(,156) @end table complex_command_in_simple_command.texi(,157) After table. complex_command_in_simple_command.texi(,158) complex_command_in_simple_command.texi(,159) Multitable complex_command_in_simple_command.texi(,160) @multitable {truc} {machin} complex_command_in_simple_command.texi(,161) @item truc @tab machin complex_command_in_simple_command.texi(,162) @end multitable complex_command_in_simple_command.texi(,163) complex_command_in_simple_command.texi(,164) complex_command_in_simple_command.texi(,165) Enumerate. complex_command_in_simple_command.texi(,166) complex_command_in_simple_command.texi(,167) @enumerate 1 complex_command_in_simple_command.texi(,168) @item item complex_command_in_simple_command.texi(,169) @end enumerate complex_command_in_simple_command.texi(,170) complex_command_in_simple_command.texi(,171) After enumerate. complex_command_in_simple_command.texi(,172) Example complex_command_in_simple_command.texi(,173) complex_command_in_simple_command.texi(,174) @example complex_command_in_simple_command.texi(,175) Example complex_command_in_simple_command.texi(,176) @end example complex_command_in_simple_command.texi(,177) complex_command_in_simple_command.texi(,178) After example complex_command_in_simple_command.texi(,179) complex_command_in_simple_command.texi(,180) defun complex_command_in_simple_command.texi(,181) complex_command_in_simple_command.texi(,182) @defun name args... complex_command_in_simple_command.texi(,183) text complex_command_in_simple_command.texi(,184) @end defun complex_command_in_simple_command.texi(,185) complex_command_in_simple_command.texi(,186) After defun. complex_command_in_simple_command.texi(,187) complex_command_in_simple_command.texi(,188) Flushright complex_command_in_simple_command.texi(,189) complex_command_in_simple_command.texi(,190) @flushright complex_command_in_simple_command.texi(,191) in flushright complex_command_in_simple_command.texi(,192) @end flushright complex_command_in_simple_command.texi(,193) complex_command_in_simple_command.texi(,194) Centered line complex_command_in_simple_command.texi(,195) complex_command_in_simple_command.texi(,196) @center in centered line complex_command_in_simple_command.texi(,197) complex_command_in_simple_command.texi(,198) Before quotation complex_command_in_simple_command.texi(,199) complex_command_in_simple_command.texi(,200) @quotation complex_command_in_simple_command.texi(,201) a q--uotation complex_command_in_simple_command.texi(,202) @end quotation complex_command_in_simple_command.texi(,203) complex_command_in_simple_command.texi(,204) After quotation complex_command_in_simple_command.texi(,205) complex_command_in_simple_command.texi(,206) Before cartouche complex_command_in_simple_command.texi(,207) complex_command_in_simple_command.texi(,208) @cartouche complex_command_in_simple_command.texi(,209) Cartouche complex_command_in_simple_command.texi(,210) @end cartouche complex_command_in_simple_command.texi(,211) complex_command_in_simple_command.texi(,212) After cartouche complex_command_in_simple_command.texi(,213) } complex_command_in_simple_command.texi(,214) complex_command_in_simple_command.texi(,215) @subheading in code complex_command_in_simple_command.texi(,216) @code{ complex_command_in_simple_command.texi(,217) In code. complex_command_in_simple_command.texi(,218) complex_command_in_simple_command.texi(,219) Table complex_command_in_simple_command.texi(,220) complex_command_in_simple_command.texi(,221) @table @asis complex_command_in_simple_command.texi(,222) @item item complex_command_in_simple_command.texi(,223) line complex_command_in_simple_command.texi(,224) @end table complex_command_in_simple_command.texi(,225) After table. complex_command_in_simple_command.texi(,226) complex_command_in_simple_command.texi(,227) complex_command_in_simple_command.texi(,228) Multitable complex_command_in_simple_command.texi(,229) @multitable {truc} {machin} complex_command_in_simple_command.texi(,230) @item truc @tab machin complex_command_in_simple_command.texi(,231) @end multitable complex_command_in_simple_command.texi(,232) complex_command_in_simple_command.texi(,233) Enumerate. complex_command_in_simple_command.texi(,234) complex_command_in_simple_command.texi(,235) @enumerate 1 complex_command_in_simple_command.texi(,236) @item item complex_command_in_simple_command.texi(,237) @end enumerate complex_command_in_simple_command.texi(,238) complex_command_in_simple_command.texi(,239) After enumerate. complex_command_in_simple_command.texi(,240) complex_command_in_simple_command.texi(,241) Example complex_command_in_simple_command.texi(,242) complex_command_in_simple_command.texi(,243) @example complex_command_in_simple_command.texi(,244) Example complex_command_in_simple_command.texi(,245) @end example complex_command_in_simple_command.texi(,246) complex_command_in_simple_command.texi(,247) After example complex_command_in_simple_command.texi(,248) complex_command_in_simple_command.texi(,249) defun complex_command_in_simple_command.texi(,250) complex_command_in_simple_command.texi(,251) @defun name args... complex_command_in_simple_command.texi(,252) text complex_command_in_simple_command.texi(,253) @end defun complex_command_in_simple_command.texi(,254) complex_command_in_simple_command.texi(,255) After defun. complex_command_in_simple_command.texi(,256) complex_command_in_simple_command.texi(,257) Flushright complex_command_in_simple_command.texi(,258) complex_command_in_simple_command.texi(,259) @flushright complex_command_in_simple_command.texi(,260) in flushright complex_command_in_simple_command.texi(,261) @end flushright complex_command_in_simple_command.texi(,262) complex_command_in_simple_command.texi(,263) Centered line complex_command_in_simple_command.texi(,264) complex_command_in_simple_command.texi(,265) @center in centered line complex_command_in_simple_command.texi(,266) complex_command_in_simple_command.texi(,267) Before quotation complex_command_in_simple_command.texi(,268) complex_command_in_simple_command.texi(,269) @quotation complex_command_in_simple_command.texi(,270) a q--uotation complex_command_in_simple_command.texi(,271) @end quotation complex_command_in_simple_command.texi(,272) complex_command_in_simple_command.texi(,273) After quotation complex_command_in_simple_command.texi(,274) complex_command_in_simple_command.texi(,275) Before cartouche complex_command_in_simple_command.texi(,276) complex_command_in_simple_command.texi(,277) @cartouche complex_command_in_simple_command.texi(,278) Cartouche complex_command_in_simple_command.texi(,279) @end cartouche complex_command_in_simple_command.texi(,280) complex_command_in_simple_command.texi(,281) After cartouche complex_command_in_simple_command.texi(,282) } complex_command_in_simple_command.texi(,283) complex_command_in_simple_command.texi(,284) complex_command_in_simple_command.texi(,285) @subheading in b and samp complex_command_in_simple_command.texi(,286) @samp{ complex_command_in_simple_command.texi(,287) In samp. complex_command_in_simple_command.texi(,288) @b{ complex_command_in_simple_command.texi(,289) In b complex_command_in_simple_command.texi(,290) complex_command_in_simple_command.texi(,291) Table complex_command_in_simple_command.texi(,292) complex_command_in_simple_command.texi(,293) @table @asis complex_command_in_simple_command.texi(,294) @item item complex_command_in_simple_command.texi(,295) line complex_command_in_simple_command.texi(,296) @end table complex_command_in_simple_command.texi(,297) After table. complex_command_in_simple_command.texi(,298) complex_command_in_simple_command.texi(,299) complex_command_in_simple_command.texi(,300) Multitable complex_command_in_simple_command.texi(,301) @multitable {truc} {machin} complex_command_in_simple_command.texi(,302) @item truc @tab machin complex_command_in_simple_command.texi(,303) @end multitable complex_command_in_simple_command.texi(,304) complex_command_in_simple_command.texi(,305) Enumerate. complex_command_in_simple_command.texi(,306) complex_command_in_simple_command.texi(,307) @enumerate 1 complex_command_in_simple_command.texi(,308) @item item complex_command_in_simple_command.texi(,309) @end enumerate complex_command_in_simple_command.texi(,310) complex_command_in_simple_command.texi(,311) After enumerate. complex_command_in_simple_command.texi(,312) complex_command_in_simple_command.texi(,313) Example complex_command_in_simple_command.texi(,314) complex_command_in_simple_command.texi(,315) @example complex_command_in_simple_command.texi(,316) Example complex_command_in_simple_command.texi(,317) @end example complex_command_in_simple_command.texi(,318) complex_command_in_simple_command.texi(,319) After example complex_command_in_simple_command.texi(,320) complex_command_in_simple_command.texi(,321) defun complex_command_in_simple_command.texi(,322) complex_command_in_simple_command.texi(,323) @defun name args... complex_command_in_simple_command.texi(,324) text complex_command_in_simple_command.texi(,325) @end defun complex_command_in_simple_command.texi(,326) complex_command_in_simple_command.texi(,327) After defun. complex_command_in_simple_command.texi(,328) complex_command_in_simple_command.texi(,329) Flushright complex_command_in_simple_command.texi(,330) complex_command_in_simple_command.texi(,331) @flushright complex_command_in_simple_command.texi(,332) in flushright complex_command_in_simple_command.texi(,333) @end flushright complex_command_in_simple_command.texi(,334) complex_command_in_simple_command.texi(,335) Centered line complex_command_in_simple_command.texi(,336) complex_command_in_simple_command.texi(,337) @center in centered line complex_command_in_simple_command.texi(,338) complex_command_in_simple_command.texi(,339) Before quotation complex_command_in_simple_command.texi(,340) complex_command_in_simple_command.texi(,341) @quotation complex_command_in_simple_command.texi(,342) a q--uotation complex_command_in_simple_command.texi(,343) @end quotation complex_command_in_simple_command.texi(,344) complex_command_in_simple_command.texi(,345) After quotation complex_command_in_simple_command.texi(,346) complex_command_in_simple_command.texi(,347) Before cartouche complex_command_in_simple_command.texi(,348) complex_command_in_simple_command.texi(,349) @cartouche complex_command_in_simple_command.texi(,350) Cartouche complex_command_in_simple_command.texi(,351) @end cartouche complex_command_in_simple_command.texi(,352) complex_command_in_simple_command.texi(,353) After cartouche complex_command_in_simple_command.texi(,354) complex_command_in_simple_command.texi(,355) close b} complex_command_in_simple_command.texi(,356) and close samp complex_command_in_simple_command.texi(,357) } complex_command_in_simple_command.texi(,358) complex_command_in_simple_command.texi(,359) After the tests. complex_command_in_simple_command.texi(,360) complex_command_in_simple_command.texi(,361) @bye texi2html-1.82/test/formatting/res/comments_redefine_need/0000755000175000017500000000000011264347123025636 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/comments_redefine_need/comments.20000644000175000017500000000034411264347123027547 0ustar flichtenheldflichtenheld** Encoding name unknown: bad *** @clickstyle should only accept a macro as argument (l. 212) ** Unknown command `@evenheading' (left as is) (l. 49) ** need has the right arg: 0.1 (l. 53) ** need has the right arg: 0.1 (l. 55) texi2html-1.82/test/formatting/res/comments_redefine_need/comments.html0000644000175000017500000003767311264347123030371 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Top

    Comment like:

    Text line followed by a comment on the same line and another below Text line after the comment followed by a comment Text line after the text line followed by the comment.

    Comment at the end of the line

    Example with comments 2 lines

     
    line second line 

    Example with comments 1 line

     
    line 

    No comments

     
    line 
    

    The same but with oddfooting instead of comment: Text line followed by a comment on the same line and another below Text line after the comment followed by a comment Text line after the text line followed by the comment.

    @pagesizes @afourpaper @smallbook @headings @oddfooting @everyheading @everyfooting @evenheading @evenheading on line following evenheading @evenfooting @oddheading @need on line following @need @setchapternewpage @raisesections @lowersections @kbdinputstyle code something @afourpaper @afourlatex @afourwide

    @definfoenclose phoo,//,\\ //bar\\

    @definfoenclose phi,:,:

    :bar:

    very strong

    (strong: is it really strong? :)

    Makeinfo ignore @kbdinputstyle:

    truc

     
    example
    

    ignore arg

    Commands doesn’t accept anything after a non numerical arg on the line and ignore things after a numerical arg

    @paragraphindent asis @paragraphindent 0 @paragraphindent none @paragraphindent 4 @firstparagraphindent none @exampleindent 6 @exampleindent 6 @footnotestyle @footnotestyle

    Special arg for documentencoding. makeinfo complains, not tex

    @documentencoding encoding name @frenchspacing @frenchspacing @fonttextsize @everyheadingmarks on line following everyheadingmarks false aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

    true aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

    command removed

    And now finalout: Text line followed by finalout on the same line and another below Text line after the finalout followed by a fianlout Text line after the text line followed by the finalout.

    Test text after finalout a word after finalout Line after finalout

    @page @noindent @refill something

    noindent at beginning of line noindent on the preceding line noindent after space at beginning of line page at beginning of line After page on it’s own line.

    @page @noindent @refill @novalidate something

    @contents something

    special

    Only valid between iftex: Unknown ???

    @exdent line after exdent

    And now sp: Text line followed by a comment on the same line and another below


    Text line after the comment followed by a comment
    Text line after the text line followed by the comment.

    a number after sp

    A ⇒ (result).

    A ⇒ (result on the same line).

    A (nocmd).

    A (something).

    Menu:


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. chapter


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 section

    first @contents line following first content second @contents line following second content Third content on the following line on his own Line following contents


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. bidule

    @shortcontents eol @shortcontents eol @summarycontents line following summarycontents


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. last

    machin


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    Short Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/index_in_item_line_table_in_code/0000755000175000017500000000000011264347123027626 5ustar flichtenheldflichtenheld././@LongLink0000000000000000000000000000015200000000000011563 Lustar rootroottexi2html-1.82/test/formatting/res/index_in_item_line_table_in_code/index_in_item_line_table_in_code.htmltexi2html-1.82/test/formatting/res/index_in_item_line_table_in_code/index_in_item_line_table_in_code0000644000175000017500000000426711264347123036233 0ustar flichtenheldflichtenheld Untitled Document

    test index entries in @item @table in @code

    opt’ More text

    nopt’ Even more


    This document was generated by a tester on a sunny day using texi2html.

    ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootroottexi2html-1.82/test/formatting/res/index_in_item_line_table_in_code/index_in_item_line_table_in_code.2texi2html-1.82/test/formatting/res/index_in_item_line_table_in_code/index_in_item_line_table_in_code0000644000175000017500000000000011264347123036210 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_nested_formats/0000755000175000017500000000000011264347123025223 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_nested_formats/nested_formats.20000644000175000017500000000000011264347123030311 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_nested_formats/nested_formats.passtexi0000644000175000017500000000136711264347123032031 0ustar flichtenheldflichtenheldnested_formats.texi(,2) nested_formats.texi(,3) @setfilename nested_formats.info nested_formats.texi(,4) nested_formats.texi(,5) @node Top nested_formats.texi(,6) @top top nested_formats.texi(,7) nested_formats.texi(,8) @format nested_formats.texi(,9) @example nested_formats.texi(,10) nested_formats.texi(,11) in -- format/example nested_formats.texi(,12) nested_formats.texi(,13) @end example nested_formats.texi(,14) @end format nested_formats.texi(,15) nested_formats.texi(,16) @example nested_formats.texi(,17) @format nested_formats.texi(,18) nested_formats.texi(,19) in -- example/format nested_formats.texi(,20) nested_formats.texi(,21) @end format nested_formats.texi(,22) @end example nested_formats.texi(,23) nested_formats.texi(,24) @bye texi2html-1.82/test/formatting/res/texi_nested_formats/nested_formats.texi0000644000175000017500000000034011264347123031130 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename nested_formats.info @node Top @top top @format @example in -- format/example @end example @end format @example @format in -- example/format @end format @end example @bye texi2html-1.82/test/formatting/res/texi_nested_formats/nested_formats.passfirst0000644000175000017500000000136711264347123032207 0ustar flichtenheldflichtenheldnested_formats.texi(,2) nested_formats.texi(,3) @setfilename nested_formats.info nested_formats.texi(,4) nested_formats.texi(,5) @node Top nested_formats.texi(,6) @top top nested_formats.texi(,7) nested_formats.texi(,8) @format nested_formats.texi(,9) @example nested_formats.texi(,10) nested_formats.texi(,11) in -- format/example nested_formats.texi(,12) nested_formats.texi(,13) @end example nested_formats.texi(,14) @end format nested_formats.texi(,15) nested_formats.texi(,16) @example nested_formats.texi(,17) @format nested_formats.texi(,18) nested_formats.texi(,19) in -- example/format nested_formats.texi(,20) nested_formats.texi(,21) @end format nested_formats.texi(,22) @end example nested_formats.texi(,23) nested_formats.texi(,24) @bye texi2html-1.82/test/formatting/res/heading/0000755000175000017500000000000011264347123022554 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/heading/heading.html0000644000175000017500000002413511264347123025046 0ustar flichtenheldflichtenheld Untitled Document

    before Top

    [Top] [Contents] [Index] [ ? ]

    Test headings

    in top @ heading


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. A chapter

    (1)

    First insertcopying:

    in copying @ heading

    second in copying @ subheading

    Second insertcopying:

    in copying @ heading

    second in copying @ subheading


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. index

    Jump to:   C   H  
    Index Entry Section

    C
    cindex copyingTest headings

    H
    heading in footnoteheading in footnote @ heading

    Jump to:   C   H  

    in quotation @ heading


    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)

    heading in footnote @ heading

    second heading in footnote @ heading


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/heading/heading.20000644000175000017500000000000011264347123024224 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_index_in_item_line_vtable/0000755000175000017500000000000011264347123027365 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_index_in_item_line_vtable/index_in_item_line_vtable.passtexi0000644000175000017500000000156411264347123036334 0ustar flichtenheldflichtenheldindex_in_item_line_vtable.texi(,2) index_in_item_line_vtable.texi(,3) @setfilename index_in_item_line_vtable.info index_in_item_line_vtable.texi(,4) index_in_item_line_vtable.texi(,5) @node Top index_in_item_line_vtable.texi(,6) @top test index entries in @@item @@table index_in_item_line_vtable.texi(,7) index_in_item_line_vtable.texi(,8) @vtable @asis index_in_item_line_vtable.texi(,9) @item @cindex index index_in_item_line_vtable.texi(,10) @option{opt} index_in_item_line_vtable.texi(,11) More text index_in_item_line_vtable.texi(,12) @item @cindex 2 index index_in_item_line_vtable.texi(,13) @option{nopt} index_in_item_line_vtable.texi(,14) Even more index_in_item_line_vtable.texi(,15) @end vtable index_in_item_line_vtable.texi(,16) index_in_item_line_vtable.texi(,17) @vindex another index index_in_item_line_vtable.texi(,18) index_in_item_line_vtable.texi(,19) @bye texi2html-1.82/test/formatting/res/texi_index_in_item_line_vtable/index_in_item_line_vtable.texi0000644000175000017500000000042411264347123035437 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename index_in_item_line_vtable.info @node Top @top test index entries in @@item @@table @vtable @asis @item @cindex index @option{opt} More text @item @cindex 2 index @option{nopt} Even more @end vtable @vindex another index @bye ././@LongLink0000000000000000000000000000014600000000000011566 Lustar rootroottexi2html-1.82/test/formatting/res/texi_index_in_item_line_vtable/index_in_item_line_vtable.passfirsttexi2html-1.82/test/formatting/res/texi_index_in_item_line_vtable/index_in_item_line_vtable.passfirs0000644000175000017500000000156411264347123036326 0ustar flichtenheldflichtenheldindex_in_item_line_vtable.texi(,2) index_in_item_line_vtable.texi(,3) @setfilename index_in_item_line_vtable.info index_in_item_line_vtable.texi(,4) index_in_item_line_vtable.texi(,5) @node Top index_in_item_line_vtable.texi(,6) @top test index entries in @@item @@table index_in_item_line_vtable.texi(,7) index_in_item_line_vtable.texi(,8) @vtable @asis index_in_item_line_vtable.texi(,9) @item @cindex index index_in_item_line_vtable.texi(,10) @option{opt} index_in_item_line_vtable.texi(,11) More text index_in_item_line_vtable.texi(,12) @item @cindex 2 index index_in_item_line_vtable.texi(,13) @option{nopt} index_in_item_line_vtable.texi(,14) Even more index_in_item_line_vtable.texi(,15) @end vtable index_in_item_line_vtable.texi(,16) index_in_item_line_vtable.texi(,17) @vindex another index index_in_item_line_vtable.texi(,18) index_in_item_line_vtable.texi(,19) @bye texi2html-1.82/test/formatting/res/texi_index_in_item_line_vtable/index_in_item_line_vtable.20000644000175000017500000000000011264347123034615 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/complex_command_in_simple_command/0000755000175000017500000000000011264347123030057 5ustar flichtenheldflichtenheld././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootroottexi2html-1.82/test/formatting/res/complex_command_in_simple_command/complex_command_in_simple_command.2texi2html-1.82/test/formatting/res/complex_command_in_simple_command/complex_command_in_simple_comma0000644000175000017500000000000011264347123036350 0ustar flichtenheldflichtenheld././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootroottexi2html-1.82/test/formatting/res/complex_command_in_simple_command/complex_command_in_simple_command.htmltexi2html-1.82/test/formatting/res/complex_command_in_simple_command/complex_command_in_simple_comma0000644000175000017500000001767511264347123036402 0ustar flichtenheldflichtenheld Untitled Document

    Complex commands in simple commands

    The complex commands.

    Table

    item

    line

    After table.

    Multitable

    trucmachin

    Enumerate.

    1. item

    After enumerate.

    Example

     
    Example
    

    After example

    defun

    Function: name args...

    text

    After defun.

    Flushright

    in flushright

    Centered line

    in centered line

    Before quotation

    a q–uotation

    After quotation

    Before cartouche

    Cartouche

    After cartouche

    In samp

    in code

    Table

    item

    line

    After table.

    Multitable

    truc machin

    After multitable.

    Enumerate.

    1. item

    After enumerate.

    Example

     
    Example
    

    After example

    defun

    Function: name args...

    text

    After defun.

    Flushright

    in flushright

    Centered line

    in centered line

    Before quotation

    a q--uotation

    After quotation

    Before cartouche

    Cartouche

    After cartouche

    in b

    in b

    Table

    item

    line

    After table.

    Multitable

    truc machin

    Enumerate.

    1. item

    After enumerate. Example

     
    Example
    

    After example

    defun

    Function: name args...

    text

    After defun.

    Flushright

    in flushright

    Centered line

    in centered line

    Before quotation

    a q–uotation

    After quotation

    Before cartouche

    Cartouche

    After cartouche

    in code

    In code.

    Table

    item

    line

    After table.

    Multitable

    truc machin

    Enumerate.

    1. item

    After enumerate.

    Example

     
    Example
    

    After example

    defun

    Function: name args...

    text

    After defun.

    Flushright

    in flushright

    Centered line

    in centered line

    Before quotation

    a q--uotation

    After quotation

    Before cartouche

    Cartouche

    After cartouche

    in b and samp

    In samp. In b

    Table

    item

    line

    After table.

    Multitable

    truc machin

    Enumerate.

    1. item

    After enumerate.

    Example

     
    Example
    

    After example

    defun

    Function: name args...

    text

    After defun.

    Flushright

    in flushright

    Centered line

    in centered line

    Before quotation

    a q--uotation

    After quotation

    Before cartouche

    Cartouche

    After cartouche

    close b and close samp

    After the tests.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/texi_multitables/0000755000175000017500000000000011264347123024533 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_multitables/multitables.texi0000644000175000017500000000070611264347123027756 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename multitables.info @node Top @top Test multitables @multitable {AAA} {BBB} @item truc @tab bidule @item begin item new paragraph in item. @tab begin tab new paragraph in tab. @end multitable @example @multitable {AAA} {BBB} @item truc @tab bidule example @item begin item example new paragraph in item. example @tab begin tab example new paragraph in tab. example @end multitable @end example @bye texi2html-1.82/test/formatting/res/texi_multitables/multitables.passfirst0000644000175000017500000000211011264347123031012 0ustar flichtenheldflichtenheldmultitables.texi(,2) multitables.texi(,3) @setfilename multitables.info multitables.texi(,4) multitables.texi(,5) @node Top multitables.texi(,6) @top Test multitables multitables.texi(,7) multitables.texi(,8) @multitable {AAA} {BBB} multitables.texi(,9) @item truc @tab bidule multitables.texi(,10) @item begin item multitables.texi(,11) multitables.texi(,12) new paragraph in item. multitables.texi(,13) multitables.texi(,14) @tab begin tab multitables.texi(,15) multitables.texi(,16) new paragraph in tab. multitables.texi(,17) @end multitable multitables.texi(,18) multitables.texi(,19) @example multitables.texi(,20) @multitable {AAA} {BBB} multitables.texi(,21) @item truc @tab bidule example multitables.texi(,22) @item begin item example multitables.texi(,23) multitables.texi(,24) new paragraph in item. example multitables.texi(,25) multitables.texi(,26) @tab begin tab example multitables.texi(,27) multitables.texi(,28) new paragraph in tab. example multitables.texi(,29) @end multitable multitables.texi(,30) @end example multitables.texi(,31) multitables.texi(,32) @bye texi2html-1.82/test/formatting/res/texi_multitables/multitables.20000644000175000017500000000000011264347123027131 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_multitables/multitables.passtexi0000644000175000017500000000211011264347123030634 0ustar flichtenheldflichtenheldmultitables.texi(,2) multitables.texi(,3) @setfilename multitables.info multitables.texi(,4) multitables.texi(,5) @node Top multitables.texi(,6) @top Test multitables multitables.texi(,7) multitables.texi(,8) @multitable {AAA} {BBB} multitables.texi(,9) @item truc @tab bidule multitables.texi(,10) @item begin item multitables.texi(,11) multitables.texi(,12) new paragraph in item. multitables.texi(,13) multitables.texi(,14) @tab begin tab multitables.texi(,15) multitables.texi(,16) new paragraph in tab. multitables.texi(,17) @end multitable multitables.texi(,18) multitables.texi(,19) @example multitables.texi(,20) @multitable {AAA} {BBB} multitables.texi(,21) @item truc @tab bidule example multitables.texi(,22) @item begin item example multitables.texi(,23) multitables.texi(,24) new paragraph in item. example multitables.texi(,25) multitables.texi(,26) @tab begin tab example multitables.texi(,27) multitables.texi(,28) new paragraph in tab. example multitables.texi(,29) @end multitable multitables.texi(,30) @end example multitables.texi(,31) multitables.texi(,32) @bye texi2html-1.82/test/formatting/res/texi_ref_in_anchor/0000755000175000017500000000000011264347123025002 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_ref_in_anchor/ref_in_anchor.passfirst0000644000175000017500000000056311264347123031542 0ustar flichtenheldflichtenheldref_in_anchor.texi(,2) ref_in_anchor.texi(,3) @setfilename ref_in_anchor ref_in_anchor.texi(,4) ref_in_anchor.texi(,5) @node Top ref_in_anchor.texi(,6) Top node ref_in_anchor.texi(,7) ref_in_anchor.texi(,8) anchor@{TOP@} @anchor{TOP @ref{Top}}. ref_in_anchor.texi(,9) ref to TOP @@ref@{Top@}: @ref{TOP @ref{Top}}. ref_in_anchor.texi(,10) ref_in_anchor.texi(,11) @bye texi2html-1.82/test/formatting/res/texi_ref_in_anchor/ref_in_anchor.passtexi0000644000175000017500000000056311264347123031364 0ustar flichtenheldflichtenheldref_in_anchor.texi(,2) ref_in_anchor.texi(,3) @setfilename ref_in_anchor ref_in_anchor.texi(,4) ref_in_anchor.texi(,5) @node Top ref_in_anchor.texi(,6) Top node ref_in_anchor.texi(,7) ref_in_anchor.texi(,8) anchor@{TOP@} @anchor{TOP @ref{Top}}. ref_in_anchor.texi(,9) ref to TOP @@ref@{Top@}: @ref{TOP @ref{Top}}. ref_in_anchor.texi(,10) ref_in_anchor.texi(,11) @bye texi2html-1.82/test/formatting/res/texi_ref_in_anchor/ref_in_anchor.texi0000644000175000017500000000025311264347123030471 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename ref_in_anchor @node Top Top node anchor@{TOP@} @anchor{TOP @ref{Top}}. ref to TOP @@ref@{Top@}: @ref{TOP @ref{Top}}. @bye texi2html-1.82/test/formatting/res/texi_ref_in_anchor/ref_in_anchor.20000644000175000017500000000000011264347123027647 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/nested_formats/0000755000175000017500000000000011264347123024172 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/nested_formats/nested_formats.20000644000175000017500000000000011264347123027260 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/nested_formats/nested_formats.html0000644000175000017500000000411611264347123030077 0ustar flichtenheldflichtenheld Untitled Document

    top

     
     
    in -- format/example
    
    
     
     
    in -- example/format
    
    

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/html-para/0000755000175000017500000000000011264347123023042 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/html-para/html-para.20000644000175000017500000000000011264347123025000 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/html-para/html-para.html0000644000175000017500000000426111264347123025620 0ustar flichtenheldflichtenheld HTML paragraph beginning test

    Top of HTML paragraph test

    @value{} should work at the beginning of a new paragraph.

    i dotless should not trigger error messages at the beginning of a new paragraph.

    SMALL-CAPS should work at the beginning of a new paragraph.

    \\@definfoenclose// should work at the beginning of a new paragraph.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/texi_inter_item_commands/0000755000175000017500000000000011264347123026226 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_inter_item_commands/inter_item_commands.passtexi0000644000175000017500000001220111264347123034024 0ustar flichtenheldflichtenheldinter_item_commands.texi(,2) inter_item_commands.texi(,3) @setfilename inter_item_commands.info inter_item_commands.texi(,4) inter_item_commands.texi(,5) @node Top inter_item_commands.texi(,6) @top Test inter item ignored commands inter_item_commands.texi(,7) inter_item_commands.texi(,8) inter_item_commands.texi(,9) @itemize @code inter_item_commands.texi(,10) @c comment in itemize inter_item_commands.texi(,11) @cindex also a cindex in itemize inter_item_commands.texi(,12) @item e--mph item inter_item_commands.texi(,13) @end itemize inter_item_commands.texi(,14) inter_item_commands.texi(,15) @itemize @bullet inter_item_commands.texi(,16) @cindex index entry within itemize inter_item_commands.texi(,17) @item i--tem 1 inter_item_commands.texi(,18) @item @cindex index entry right after @@item inter_item_commands.texi(,19) i--tem 2 inter_item_commands.texi(,20) @end itemize inter_item_commands.texi(,21) inter_item_commands.texi(,22) @itemize inter_item_commands.texi(,23) @c comment in itemize inter_item_commands.texi(,24) T--ext before items. inter_item_commands.texi(,25) @cindex also a cindex in itemize inter_item_commands.texi(,26) @item bullet item inter_item_commands.texi(,27) @end itemize inter_item_commands.texi(,28) inter_item_commands.texi(,29) @enumerate inter_item_commands.texi(,30) inter_item_commands.texi(,31) @comment comment before first item in enumerate inter_item_commands.texi(,32) @item e--numerate inter_item_commands.texi(,33) @end enumerate inter_item_commands.texi(,34) inter_item_commands.texi(,35) @multitable {truc} inter_item_commands.texi(,36) @c comment before first item inter_item_commands.texi(,37) inter_item_commands.texi(,38) @item truc inter_item_commands.texi(,39) inter_item_commands.texi(,40) @cindex index entry between empty lines inter_item_commands.texi(,41) inter_item_commands.texi(,42) @item trouc inter_item_commands.texi(,43) @c last comment inter_item_commands.texi(,44) @end multitable inter_item_commands.texi(,45) inter_item_commands.texi(,46) @multitable @columnfractions 6 7 inter_item_commands.texi(,47) @headitem mu--ltitable headitem @tab another tab inter_item_commands.texi(,48) @item mu--ltitable item @tab multitable tab inter_item_commands.texi(,49) @c comment in multitable inter_item_commands.texi(,50) @item mu--ltitable item 2 @tab multitable tab 2 inter_item_commands.texi(,51) @cindex index entry within multitable inter_item_commands.texi(,52) @item lone mu--ltitable item inter_item_commands.texi(,53) @end multitable inter_item_commands.texi(,54) inter_item_commands.texi(,55) @deffn fset @var{i} a g inter_item_commands.texi(,56) @c comment before first deffnx inter_item_commands.texi(,57) inter_item_commands.texi(,58) @deffnx Command { log trap1} {} inter_item_commands.texi(,59) @cindex between deffnx inter_item_commands.texi(,60) @deffnx cmde2 @b{id @samp{i} ule} truc inter_item_commands.texi(,61) @cindex cindex in deff item inter_item_commands.texi(,62) inter_item_commands.texi(,63) In deff item. inter_item_commands.texi(,64) @end deffn inter_item_commands.texi(,65) inter_item_commands.texi(,66) @vtable @code inter_item_commands.texi(,67) @c comment in table inter_item_commands.texi(,68) @item a inter_item_commands.texi(,69) l--ine inter_item_commands.texi(,70) @end vtable inter_item_commands.texi(,71) inter_item_commands.texi(,72) @vtable @asis inter_item_commands.texi(,73) @item a inter_item_commands.texi(,74) @c comment between item and itemx inter_item_commands.texi(,75) @itemx b inter_item_commands.texi(,76) l--ine inter_item_commands.texi(,77) @end vtable inter_item_commands.texi(,78) inter_item_commands.texi(,79) @ftable @var inter_item_commands.texi(,80) @item a inter_item_commands.texi(,81) @cindex index entry between item and itemx inter_item_commands.texi(,82) @c and a comment inter_item_commands.texi(,83) @comment and another comment inter_item_commands.texi(,84) @itemx b inter_item_commands.texi(,85) l--ine inter_item_commands.texi(,86) @item c inter_item_commands.texi(,87) inter_item_commands.texi(,88) @c comment between lines inter_item_commands.texi(,89) inter_item_commands.texi(,90) @itemx d inter_item_commands.texi(,91) inter_item_commands.texi(,92) @c comment at end inter_item_commands.texi(,93) @end ftable inter_item_commands.texi(,94) inter_item_commands.texi(,95) @table @code inter_item_commands.texi(,96) @cindex cindex in table inter_item_commands.texi(,97) @c comment in table inter_item_commands.texi(,98) @item abb inter_item_commands.texi(,99) l--ine inter_item_commands.texi(,100) @end table inter_item_commands.texi(,101) inter_item_commands.texi(,102) @table @code inter_item_commands.texi(,103) @cindex cindex in table inter_item_commands.texi(,104) Texte before first item. inter_item_commands.texi(,105) @item abb inter_item_commands.texi(,106) @end table inter_item_commands.texi(,107) inter_item_commands.texi(,108) cp inter_item_commands.texi(,109) @printindex cp inter_item_commands.texi(,110) inter_item_commands.texi(,111) fn inter_item_commands.texi(,112) @printindex fn inter_item_commands.texi(,113) inter_item_commands.texi(,114) vr inter_item_commands.texi(,115) @printindex vr inter_item_commands.texi(,116) inter_item_commands.texi(,117) @bye texi2html-1.82/test/formatting/res/texi_inter_item_commands/inter_item_commands.texi0000644000175000017500000000337711264347123033153 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename inter_item_commands.info @node Top @top Test inter item ignored commands @itemize @code @c comment in itemize @cindex also a cindex in itemize @item e--mph item @end itemize @itemize @bullet @cindex index entry within itemize @item i--tem 1 @item @cindex index entry right after @@item i--tem 2 @end itemize @itemize @c comment in itemize T--ext before items. @cindex also a cindex in itemize @item bullet item @end itemize @enumerate @comment comment before first item in enumerate @item e--numerate @end enumerate @multitable {truc} @c comment before first item @item truc @cindex index entry between empty lines @item trouc @c last comment @end multitable @multitable @columnfractions 6 7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @c comment in multitable @item mu--ltitable item 2 @tab multitable tab 2 @cindex index entry within multitable @item lone mu--ltitable item @end multitable @deffn fset @var{i} a g @c comment before first deffnx @deffnx Command { log trap1} {} @cindex between deffnx @deffnx cmde2 @b{id @samp{i} ule} truc @cindex cindex in deff item In deff item. @end deffn @vtable @code @c comment in table @item a l--ine @end vtable @vtable @asis @item a @c comment between item and itemx @itemx b l--ine @end vtable @ftable @var @item a @cindex index entry between item and itemx @c and a comment @comment and another comment @itemx b l--ine @item c @c comment between lines @itemx d @c comment at end @end ftable @table @code @cindex cindex in table @c comment in table @item abb l--ine @end table @table @code @cindex cindex in table Texte before first item. @item abb @end table cp @printindex cp fn @printindex fn vr @printindex vr @bye texi2html-1.82/test/formatting/res/texi_inter_item_commands/inter_item_commands.20000644000175000017500000000000011264347123032317 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_inter_item_commands/inter_item_commands.passfirst0000644000175000017500000001220111264347123034202 0ustar flichtenheldflichtenheldinter_item_commands.texi(,2) inter_item_commands.texi(,3) @setfilename inter_item_commands.info inter_item_commands.texi(,4) inter_item_commands.texi(,5) @node Top inter_item_commands.texi(,6) @top Test inter item ignored commands inter_item_commands.texi(,7) inter_item_commands.texi(,8) inter_item_commands.texi(,9) @itemize @code inter_item_commands.texi(,10) @c comment in itemize inter_item_commands.texi(,11) @cindex also a cindex in itemize inter_item_commands.texi(,12) @item e--mph item inter_item_commands.texi(,13) @end itemize inter_item_commands.texi(,14) inter_item_commands.texi(,15) @itemize @bullet inter_item_commands.texi(,16) @cindex index entry within itemize inter_item_commands.texi(,17) @item i--tem 1 inter_item_commands.texi(,18) @item @cindex index entry right after @@item inter_item_commands.texi(,19) i--tem 2 inter_item_commands.texi(,20) @end itemize inter_item_commands.texi(,21) inter_item_commands.texi(,22) @itemize inter_item_commands.texi(,23) @c comment in itemize inter_item_commands.texi(,24) T--ext before items. inter_item_commands.texi(,25) @cindex also a cindex in itemize inter_item_commands.texi(,26) @item bullet item inter_item_commands.texi(,27) @end itemize inter_item_commands.texi(,28) inter_item_commands.texi(,29) @enumerate inter_item_commands.texi(,30) inter_item_commands.texi(,31) @comment comment before first item in enumerate inter_item_commands.texi(,32) @item e--numerate inter_item_commands.texi(,33) @end enumerate inter_item_commands.texi(,34) inter_item_commands.texi(,35) @multitable {truc} inter_item_commands.texi(,36) @c comment before first item inter_item_commands.texi(,37) inter_item_commands.texi(,38) @item truc inter_item_commands.texi(,39) inter_item_commands.texi(,40) @cindex index entry between empty lines inter_item_commands.texi(,41) inter_item_commands.texi(,42) @item trouc inter_item_commands.texi(,43) @c last comment inter_item_commands.texi(,44) @end multitable inter_item_commands.texi(,45) inter_item_commands.texi(,46) @multitable @columnfractions 6 7 inter_item_commands.texi(,47) @headitem mu--ltitable headitem @tab another tab inter_item_commands.texi(,48) @item mu--ltitable item @tab multitable tab inter_item_commands.texi(,49) @c comment in multitable inter_item_commands.texi(,50) @item mu--ltitable item 2 @tab multitable tab 2 inter_item_commands.texi(,51) @cindex index entry within multitable inter_item_commands.texi(,52) @item lone mu--ltitable item inter_item_commands.texi(,53) @end multitable inter_item_commands.texi(,54) inter_item_commands.texi(,55) @deffn fset @var{i} a g inter_item_commands.texi(,56) @c comment before first deffnx inter_item_commands.texi(,57) inter_item_commands.texi(,58) @deffnx Command { log trap1} {} inter_item_commands.texi(,59) @cindex between deffnx inter_item_commands.texi(,60) @deffnx cmde2 @b{id @samp{i} ule} truc inter_item_commands.texi(,61) @cindex cindex in deff item inter_item_commands.texi(,62) inter_item_commands.texi(,63) In deff item. inter_item_commands.texi(,64) @end deffn inter_item_commands.texi(,65) inter_item_commands.texi(,66) @vtable @code inter_item_commands.texi(,67) @c comment in table inter_item_commands.texi(,68) @item a inter_item_commands.texi(,69) l--ine inter_item_commands.texi(,70) @end vtable inter_item_commands.texi(,71) inter_item_commands.texi(,72) @vtable @asis inter_item_commands.texi(,73) @item a inter_item_commands.texi(,74) @c comment between item and itemx inter_item_commands.texi(,75) @itemx b inter_item_commands.texi(,76) l--ine inter_item_commands.texi(,77) @end vtable inter_item_commands.texi(,78) inter_item_commands.texi(,79) @ftable @var inter_item_commands.texi(,80) @item a inter_item_commands.texi(,81) @cindex index entry between item and itemx inter_item_commands.texi(,82) @c and a comment inter_item_commands.texi(,83) @comment and another comment inter_item_commands.texi(,84) @itemx b inter_item_commands.texi(,85) l--ine inter_item_commands.texi(,86) @item c inter_item_commands.texi(,87) inter_item_commands.texi(,88) @c comment between lines inter_item_commands.texi(,89) inter_item_commands.texi(,90) @itemx d inter_item_commands.texi(,91) inter_item_commands.texi(,92) @c comment at end inter_item_commands.texi(,93) @end ftable inter_item_commands.texi(,94) inter_item_commands.texi(,95) @table @code inter_item_commands.texi(,96) @cindex cindex in table inter_item_commands.texi(,97) @c comment in table inter_item_commands.texi(,98) @item abb inter_item_commands.texi(,99) l--ine inter_item_commands.texi(,100) @end table inter_item_commands.texi(,101) inter_item_commands.texi(,102) @table @code inter_item_commands.texi(,103) @cindex cindex in table inter_item_commands.texi(,104) Texte before first item. inter_item_commands.texi(,105) @item abb inter_item_commands.texi(,106) @end table inter_item_commands.texi(,107) inter_item_commands.texi(,108) cp inter_item_commands.texi(,109) @printindex cp inter_item_commands.texi(,110) inter_item_commands.texi(,111) fn inter_item_commands.texi(,112) @printindex fn inter_item_commands.texi(,113) inter_item_commands.texi(,114) vr inter_item_commands.texi(,115) @printindex vr inter_item_commands.texi(,116) inter_item_commands.texi(,117) @bye texi2html-1.82/test/formatting/res/texi_def_cmds/0000755000175000017500000000000011264347123023752 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_def_cmds/def_cmds.20000644000175000017500000000636211264347123025610 0ustar flichtenheldflichtenheld** Empty index entry for @deffn (l. 139 in @mymacro) ** Empty index entry for @deffn (l. 139 in @mymacro) ** Empty index entry for @deffn (l. 139 in @mymacro) ** Empty index entry for @deffn (l. 139 in @mymacro) ** Empty index entry for @deffn (l. 139 in @mymacro) ** Empty index entry for @deffn (l. 139 in @mymacro) ** Empty index entry for @deffn (l. 139 in @mymacro) ** Empty index entry for @deffn (l. 139 in @mymacro) ** Empty index entry for @deffn (l. 142 in @mymacro) ** Empty index entry for @deffn (l. 142 in @mymacro) ** Empty index entry for @deffn (l. 142 in @mymacro) ** Empty index entry for @deffn (l. 142 in @mymacro) ** Empty index entry for @deffn (l. 142 in @mymacro) ** Empty index entry for @deffn (l. 142 in @mymacro) ** Empty index entry for @deffn (l. 142 in @mymacro) ** Empty index entry for @deffn (l. 142 in @mymacro) ** Empty index entry for @deffn (l. 145 in @mymacro) ** Empty index entry for @deffn (l. 145 in @mymacro) ** Empty index entry for @deffn (l. 145 in @mymacro) ** Empty index entry for @deffn (l. 145 in @mymacro) ** Empty index entry for @deffn (l. 145 in @mymacro) ** Empty index entry for @deffn (l. 145 in @mymacro) ** Empty index entry for @deffn (l. 145 in @mymacro) ** Empty index entry for @deffn (l. 145 in @mymacro) ** Empty index entry for @deffn (l. 246) ** Empty index entry for @defvr (l. 250) ** Empty index entry for @deftypefn (l. 254) ** Empty index entry for @deftypeop (l. 258) ** Empty index entry for @deftypevr (l. 262) ** Empty index entry for @defcv (l. 266) ** Empty index entry for @deftypecv (l. 270) ** Empty index entry for @defop (l. 274) ** Empty index entry for @deftp (l. 278) ** Empty index entry for @deffn (l. 139 in @mymacro) ** Empty index entry for @deffn (l. 139 in @mymacro) ** Empty index entry for @deffn (l. 139 in @mymacro) ** Empty index entry for @deffn (l. 139 in @mymacro) ** Empty index entry for @deffn (l. 139 in @mymacro) ** Empty index entry for @deffn (l. 139 in @mymacro) ** Empty index entry for @deffn (l. 139 in @mymacro) ** Empty index entry for @deffn (l. 139 in @mymacro) ** Empty index entry for @deffn (l. 142 in @mymacro) ** Empty index entry for @deffn (l. 142 in @mymacro) ** Empty index entry for @deffn (l. 142 in @mymacro) ** Empty index entry for @deffn (l. 142 in @mymacro) ** Empty index entry for @deffn (l. 142 in @mymacro) ** Empty index entry for @deffn (l. 142 in @mymacro) ** Empty index entry for @deffn (l. 142 in @mymacro) ** Empty index entry for @deffn (l. 142 in @mymacro) ** Empty index entry for @deffn (l. 145 in @mymacro) ** Empty index entry for @deffn (l. 145 in @mymacro) ** Empty index entry for @deffn (l. 145 in @mymacro) ** Empty index entry for @deffn (l. 145 in @mymacro) ** Empty index entry for @deffn (l. 145 in @mymacro) ** Empty index entry for @deffn (l. 145 in @mymacro) ** Empty index entry for @deffn (l. 145 in @mymacro) ** Empty index entry for @deffn (l. 145 in @mymacro) ** Empty index entry for @deffn (l. 246) ** Empty index entry for @defvr (l. 250) ** Empty index entry for @deftypefn (l. 254) ** Empty index entry for @deftypeop (l. 258) ** Empty index entry for @deftypevr (l. 262) ** Empty index entry for @defcv (l. 266) ** Empty index entry for @deftypecv (l. 270) ** Empty index entry for @defop (l. 274) ** Empty index entry for @deftp (l. 278) texi2html-1.82/test/formatting/res/texi_def_cmds/def_cmds.passfirst0000644000175000017500000004737211264347123027473 0ustar flichtenheldflichtenhelddef_cmds.texi(,2) @setfilename def_cmds.info def_cmds.texi(,3) @node Top def_cmds.texi(,4) @top Test for definition commands def_cmds.texi(,5) def_cmds.texi(,137) def_cmds.texi(,141) def_cmds.texi(mymacro,142) @deffn c--ategory d--effn_name a--rguments... def_cmds.texi(mymacro,142) d--effn def_cmds.texi(mymacro,142) @end deffn def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @deffn cate--gory de--ffn_name ar--guments more args @* even more so def_cmds.texi(mymacro,142) def--fn def_cmds.texi(mymacro,142) @end deffn def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @deffn fset @var{i} a g def_cmds.texi(mymacro,142) @deffnx {cmde} truc {} def_cmds.texi(mymacro,142) @deffnx Command {log trap} {} def_cmds.texi(mymacro,142) @deffnx Command { log trap1} {} def_cmds.texi(mymacro,142) @deffnx Command {log trap2 } {} def_cmds.texi(mymacro,142) @deffnx cmde @b{id ule} truc def_cmds.texi(mymacro,142) @deffnx cmde2 @b{id @samp{i} ule} truc def_cmds.texi(mymacro,142) @deffnx @b{id @samp{i} ule} def_cmds.texi(mymacro,142) @deffnx def_cmds.texi(mymacro,142) @deffnx aaa def_cmds.texi(mymacro,142) @deffnx {} {} def_cmds.texi(mymacro,142) @deffnx{} def_cmds.texi(mymacro,142) @deffnx{} machin def_cmds.texi(mymacro,142) @deffnx{} {bidule machin} def_cmds.texi(mymacro,142) @deffnx{truc} machin def_cmds.texi(mymacro,142) @deffnx{truc} { } def_cmds.texi(mymacro,142) @deffnx{truc} def_cmds.texi(mymacro,142) @deffnx{} {} def_cmds.texi(mymacro,142) @deffnx {truc} followed by a comment def_cmds.texi(mymacro,142) @c comment def_cmds.texi(mymacro,142) @deffnx truc machin bidule chose and } def_cmds.texi(mymacro,142) @deffnx truc machin bidule chose and } after def_cmds.texi(mymacro,142) @deffnx truc machin bidule chose and { def_cmds.texi(mymacro,142) @deffnx truc machin bidule chose and { and after def_cmds.texi(mymacro,142) Various deff lines def_cmds.texi(mymacro,142) @deffnx {truc} after a deff item def_cmds.texi(mymacro,142) @c comment def_cmds.texi(mymacro,142) text in def item for second def item def_cmds.texi(mymacro,142) @deffnx {truc} deffnx before end deffn def_cmds.texi(mymacro,142) @end deffn def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @deffn empty deffn def_cmds.texi(mymacro,142) @end deffn def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @deffn empty deffn with deffnx def_cmds.texi(mymacro,142) @deffnx empty deffnx def_cmds.texi(mymacro,142) @end deffn def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @defvr c--ategory d--efvr_name def_cmds.texi(mymacro,142) d--efvr def_cmds.texi(mymacro,142) @end defvr def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... def_cmds.texi(mymacro,142) d--eftypefn def_cmds.texi(mymacro,142) @end deftypefn def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... def_cmds.texi(mymacro,142) d--eftypeop def_cmds.texi(mymacro,142) @end deftypeop def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @deftypevr c--ategory t--ype d--eftypevr_name def_cmds.texi(mymacro,142) d--eftypevr def_cmds.texi(mymacro,142) @end deftypevr def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @defcv c--ategory c--lass d--efcv_name def_cmds.texi(mymacro,142) d--efcv def_cmds.texi(mymacro,142) @end defcv def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @defop c--ategory c--lass d--efop_name a--rguments... def_cmds.texi(mymacro,142) d--efop def_cmds.texi(mymacro,142) @end defop def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @deftp c--ategory d--eftp_name a--ttributes... def_cmds.texi(mymacro,142) d--eftp def_cmds.texi(mymacro,142) @end deftp def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @defun d--efun_name a--rguments... def_cmds.texi(mymacro,142) d--efun def_cmds.texi(mymacro,142) @end defun def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @defmac d--efmac_name a--rguments... def_cmds.texi(mymacro,142) d--efmac def_cmds.texi(mymacro,142) @end defmac def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @defspec d--efspec_name a--rguments... def_cmds.texi(mymacro,142) d--efspec def_cmds.texi(mymacro,142) @end defspec def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @defvar d--efvar_name def_cmds.texi(mymacro,142) d--efvar def_cmds.texi(mymacro,142) @end defvar def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @defopt d--efopt_name def_cmds.texi(mymacro,142) d--efopt def_cmds.texi(mymacro,142) @end defopt def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @deftypefun t--ype d--eftypefun_name a--rguments... def_cmds.texi(mymacro,142) d--eftypefun def_cmds.texi(mymacro,142) @end deftypefun def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @deftypevar t--ype d--eftypevar_name def_cmds.texi(mymacro,142) d--eftypevar def_cmds.texi(mymacro,142) @end deftypevar def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @defivar c--lass d--efivar_name def_cmds.texi(mymacro,142) d--efivar def_cmds.texi(mymacro,142) @end defivar def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @deftypeivar c--lass t--ype d--eftypeivar_name def_cmds.texi(mymacro,142) d--eftypeivar def_cmds.texi(mymacro,142) @end deftypeivar def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @defmethod c--lass d--efmethod_name a--rguments... def_cmds.texi(mymacro,142) d--efmethod def_cmds.texi(mymacro,142) @end defmethod def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... def_cmds.texi(mymacro,142) d--eftypemethod def_cmds.texi(mymacro,142) @end deftypemethod def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @deffn category name args { more args def_cmds.texi(mymacro,142) deffn with @{ def_cmds.texi(mymacro,142) @end deffn def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @deffn category name args } more args def_cmds.texi(mymacro,142) deffn with @} def_cmds.texi(mymacro,142) @end deffn def_cmds.texi(mymacro,142) def_cmds.texi(,143) def_cmds.texi(,144) @example def_cmds.texi(mymacro,145) @deffn c--ategory d--effn_name a--rguments... def_cmds.texi(mymacro,145) d--effn def_cmds.texi(mymacro,145) @end deffn def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @deffn cate--gory de--ffn_name ar--guments more args @* even more so def_cmds.texi(mymacro,145) def--fn def_cmds.texi(mymacro,145) @end deffn def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @deffn fset @var{i} a g def_cmds.texi(mymacro,145) @deffnx {cmde} truc {} def_cmds.texi(mymacro,145) @deffnx Command {log trap} {} def_cmds.texi(mymacro,145) @deffnx Command { log trap1} {} def_cmds.texi(mymacro,145) @deffnx Command {log trap2 } {} def_cmds.texi(mymacro,145) @deffnx cmde @b{id ule} truc def_cmds.texi(mymacro,145) @deffnx cmde2 @b{id @samp{i} ule} truc def_cmds.texi(mymacro,145) @deffnx @b{id @samp{i} ule} def_cmds.texi(mymacro,145) @deffnx def_cmds.texi(mymacro,145) @deffnx aaa def_cmds.texi(mymacro,145) @deffnx {} {} def_cmds.texi(mymacro,145) @deffnx{} def_cmds.texi(mymacro,145) @deffnx{} machin def_cmds.texi(mymacro,145) @deffnx{} {bidule machin} def_cmds.texi(mymacro,145) @deffnx{truc} machin def_cmds.texi(mymacro,145) @deffnx{truc} { } def_cmds.texi(mymacro,145) @deffnx{truc} def_cmds.texi(mymacro,145) @deffnx{} {} def_cmds.texi(mymacro,145) @deffnx {truc} followed by a comment def_cmds.texi(mymacro,145) @c comment def_cmds.texi(mymacro,145) @deffnx truc machin bidule chose and } def_cmds.texi(mymacro,145) @deffnx truc machin bidule chose and } after def_cmds.texi(mymacro,145) @deffnx truc machin bidule chose and { def_cmds.texi(mymacro,145) @deffnx truc machin bidule chose and { and after def_cmds.texi(mymacro,145) Various deff lines def_cmds.texi(mymacro,145) @deffnx {truc} after a deff item def_cmds.texi(mymacro,145) @c comment def_cmds.texi(mymacro,145) text in def item for second def item def_cmds.texi(mymacro,145) @deffnx {truc} deffnx before end deffn def_cmds.texi(mymacro,145) @end deffn def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @deffn empty deffn def_cmds.texi(mymacro,145) @end deffn def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @deffn empty deffn with deffnx def_cmds.texi(mymacro,145) @deffnx empty deffnx def_cmds.texi(mymacro,145) @end deffn def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @defvr c--ategory d--efvr_name def_cmds.texi(mymacro,145) d--efvr def_cmds.texi(mymacro,145) @end defvr def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... def_cmds.texi(mymacro,145) d--eftypefn def_cmds.texi(mymacro,145) @end deftypefn def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... def_cmds.texi(mymacro,145) d--eftypeop def_cmds.texi(mymacro,145) @end deftypeop def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @deftypevr c--ategory t--ype d--eftypevr_name def_cmds.texi(mymacro,145) d--eftypevr def_cmds.texi(mymacro,145) @end deftypevr def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @defcv c--ategory c--lass d--efcv_name def_cmds.texi(mymacro,145) d--efcv def_cmds.texi(mymacro,145) @end defcv def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @defop c--ategory c--lass d--efop_name a--rguments... def_cmds.texi(mymacro,145) d--efop def_cmds.texi(mymacro,145) @end defop def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @deftp c--ategory d--eftp_name a--ttributes... def_cmds.texi(mymacro,145) d--eftp def_cmds.texi(mymacro,145) @end deftp def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @defun d--efun_name a--rguments... def_cmds.texi(mymacro,145) d--efun def_cmds.texi(mymacro,145) @end defun def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @defmac d--efmac_name a--rguments... def_cmds.texi(mymacro,145) d--efmac def_cmds.texi(mymacro,145) @end defmac def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @defspec d--efspec_name a--rguments... def_cmds.texi(mymacro,145) d--efspec def_cmds.texi(mymacro,145) @end defspec def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @defvar d--efvar_name def_cmds.texi(mymacro,145) d--efvar def_cmds.texi(mymacro,145) @end defvar def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @defopt d--efopt_name def_cmds.texi(mymacro,145) d--efopt def_cmds.texi(mymacro,145) @end defopt def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @deftypefun t--ype d--eftypefun_name a--rguments... def_cmds.texi(mymacro,145) d--eftypefun def_cmds.texi(mymacro,145) @end deftypefun def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @deftypevar t--ype d--eftypevar_name def_cmds.texi(mymacro,145) d--eftypevar def_cmds.texi(mymacro,145) @end deftypevar def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @defivar c--lass d--efivar_name def_cmds.texi(mymacro,145) d--efivar def_cmds.texi(mymacro,145) @end defivar def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @deftypeivar c--lass t--ype d--eftypeivar_name def_cmds.texi(mymacro,145) d--eftypeivar def_cmds.texi(mymacro,145) @end deftypeivar def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @defmethod c--lass d--efmethod_name a--rguments... def_cmds.texi(mymacro,145) d--efmethod def_cmds.texi(mymacro,145) @end defmethod def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... def_cmds.texi(mymacro,145) d--eftypemethod def_cmds.texi(mymacro,145) @end deftypemethod def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @deffn category name args { more args def_cmds.texi(mymacro,145) deffn with @{ def_cmds.texi(mymacro,145) @end deffn def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @deffn category name args } more args def_cmds.texi(mymacro,145) deffn with @} def_cmds.texi(mymacro,145) @end deffn def_cmds.texi(mymacro,145) def_cmds.texi(,146) @end example def_cmds.texi(,147) def_cmds.texi(,148) @c deffn def_cmds.texi(,150) @deffn Command @var{forward--char} @var{nchars} {argument2} {argument3} (arg in brace, [something @var{in v--ar}, @b{in, b} {, comma} a@var{pref} p]) last def_cmds.texi(,151) @end deffn def_cmds.texi(,152) def_cmds.texi(,153) @c defvr def_cmds.texi(,155) @defvr Variable fill-column {argument1} {argument2} (arg in brace, [something @var{in v--ar}, @b{in, b} {, comma} a@var{pref} p]) last def_cmds.texi(,156) @end defvr def_cmds.texi(,157) def_cmds.texi(,158) @c deftypefn def_cmds.texi(,159) @deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar}) def_cmds.texi(,160) @end deftypefn def_cmds.texi(,161) def_cmds.texi(,163) @deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar}) (arg in brace, {[something} @var{in v--ar}, @b{in, b} {, comma} a@var{pref} p]) ct@*@* last def_cmds.texi(,164) @end deftypefn def_cmds.texi(,165) def_cmds.texi(,166) @deftypefn {Library Function} int foobug {[something} def_cmds.texi(,167) @end deftypefn def_cmds.texi(,168) def_cmds.texi(,170) @deftypefn stacks private push (@var{s}:in out stack; @var{n}:in integer) ; ;barg aarg; ; end def_cmds.texi(,171) @end deftypefn def_cmds.texi(,172) def_cmds.texi(,173) @c deftypevr def_cmds.texi(,175) @deftypevr {Global Flag} int enable (arg in brace, [something @var{in v--ar}, @b{in, b} {, comma} a@var{pref} p]) last def_cmds.texi(,176) @end deftypevr def_cmds.texi(,177) def_cmds.texi(,178) @c deftp def_cmds.texi(,180) @deftp {Data type} pair car cdr (arg in brace, [something @var{in v--ar}, @b{in, b} {, comma} a@var{pref} p]) last def_cmds.texi(,181) @end deftp def_cmds.texi(,182) def_cmds.texi(,183) @c defcv def_cmds.texi(,185) @defcv {Class Option} Window border-pattern (arg in brace, [something @var{in v--ar}, @b{in, b} {, comma} a@var{pref} p]) last def_cmds.texi(,186) @end defcv def_cmds.texi(,187) def_cmds.texi(,188) @c deftypecv def_cmds.texi(,190) @deftypecv {Class Option2} Window @code{int} border-pattern (arg in brace, [something @var{in v--ar}, @b{in, b} {, comma} a@var{pref} p]) last def_cmds.texi(,191) @end deftypecv def_cmds.texi(,192) def_cmds.texi(,193) @c defop def_cmds.texi(,195) @defop Operation windows expose (arg in brace, [something @var{in v--ar}, @b{in, b} {, comma} a@var{pref} p]) last def_cmds.texi(,196) @end defop def_cmds.texi(,197) def_cmds.texi(,198) @c deftypeop def_cmds.texi(,200) @deftypeop Operation2 W,indow @code{int} expose (arg in brace, [something @var{in v--ar}, @b{in, b} {, comma} a@var{pref} p]) last def_cmds.texi(,201) @end deftypeop def_cmds.texi(,202) def_cmds.texi(,203) @deftypeop Operation5 Window @code{int} expose type arg def_cmds.texi(,204) @end deftypeop def_cmds.texi(,205) def_cmds.texi(,206) @deftypeop Operation3 {W,indow} @code{int} {e,xpose} type arg def_cmds.texi(,207) @end deftypeop def_cmds.texi(,208) def_cmds.texi(,209) @deftypeop Operation4 {,Window} @code{int} {,expose} type arg def_cmds.texi(,210) @end deftypeop def_cmds.texi(,211) def_cmds.texi(,212) @deftypeop Operation6 W,indow @code{int} e,xpose type arg def_cmds.texi(,213) @end deftypeop def_cmds.texi(,214) def_cmds.texi(,215) @deftypeop Operation7 ,Window @code{int} ,expose type arg def_cmds.texi(,216) @end deftypeop def_cmds.texi(,217) def_cmds.texi(,218) @deftypeop Operation13 {W)indow} @code{int} {e)xpose} type arg def_cmds.texi(,219) @end deftypeop def_cmds.texi(,220) def_cmds.texi(,221) @deftypeop Operation14 {)Window} @code{int} {)expose} type arg def_cmds.texi(,222) @end deftypeop def_cmds.texi(,223) def_cmds.texi(,224) @deftypeop Operation16 W)indow @code{int} e)xpose type arg def_cmds.texi(,225) @end deftypeop def_cmds.texi(,226) def_cmds.texi(,227) @deftypeop Operation17 )Window @code{int} )expose type arg def_cmds.texi(,228) @end deftypeop def_cmds.texi(,229) def_cmds.texi(,230) @deftypeop Operation18 {W;indow} @code{int} {e;xpose} type arg def_cmds.texi(,231) @end deftypeop def_cmds.texi(,232) def_cmds.texi(,233) @deftypeop Operation19 {;Window} @code{int} {;expose} type arg def_cmds.texi(,234) @end deftypeop def_cmds.texi(,235) def_cmds.texi(,236) @deftypeop Operation20 W;indow @code{int} e;xpose type arg def_cmds.texi(,237) @end deftypeop def_cmds.texi(,238) def_cmds.texi(,239) @deftypeop Operation21 ;Window @code{int} ;expose type arg def_cmds.texi(,240) @end deftypeop def_cmds.texi(,241) def_cmds.texi(,242) @deftypeop Command@code{com} {Window@code{int}} expose@var{exp} def_cmds.texi(,243) @end deftypeop def_cmds.texi(,244) def_cmds.texi(,245) @c deffn def_cmds.texi(,246) @deffn def_cmds.texi(,247) @end deffn def_cmds.texi(,248) def_cmds.texi(,249) @c defvr def_cmds.texi(,250) @defvr def_cmds.texi(,251) @end defvr def_cmds.texi(,252) def_cmds.texi(,253) @c deftypefn def_cmds.texi(,254) @deftypefn def_cmds.texi(,255) @end deftypefn def_cmds.texi(,256) def_cmds.texi(,257) @c deftypeop def_cmds.texi(,258) @deftypeop def_cmds.texi(,259) @end deftypeop def_cmds.texi(,260) def_cmds.texi(,261) @c deftypevr def_cmds.texi(,262) @deftypevr def_cmds.texi(,263) @end deftypevr def_cmds.texi(,264) def_cmds.texi(,265) @c defcv def_cmds.texi(,266) @defcv def_cmds.texi(,267) @end defcv def_cmds.texi(,268) def_cmds.texi(,269) @c deftypecv def_cmds.texi(,270) @deftypecv def_cmds.texi(,271) @end deftypecv def_cmds.texi(,272) def_cmds.texi(,273) @c defop def_cmds.texi(,274) @defop def_cmds.texi(,275) @end defop def_cmds.texi(,276) def_cmds.texi(,277) @c deftp def_cmds.texi(,278) @deftp def_cmds.texi(,279) @end deftp def_cmds.texi(,280) def_cmds.texi(,281) @c deffn def_cmds.texi(,282) @deffn @var{A1} @var{A2} @var{A3} @var{A4} def_cmds.texi(,283) @end deffn def_cmds.texi(,284) def_cmds.texi(,285) @deffn @code{A1} @code{A2} @code{A3} @code{A4} def_cmds.texi(,286) @end deffn def_cmds.texi(,287) def_cmds.texi(,288) @c defvr def_cmds.texi(,289) @defvr @var{A1} @var{A2} @var{A3} @var{A4} def_cmds.texi(,290) @end defvr def_cmds.texi(,291) def_cmds.texi(,292) @defvr @code{A1} @code{A2} @code{A3} @code{A4} def_cmds.texi(,293) @end defvr def_cmds.texi(,294) def_cmds.texi(,295) @c deftypefn def_cmds.texi(,296) @deftypefn @var{A1} @var{A2} @var{A3} @var{A4} @var{A5} def_cmds.texi(,297) @end deftypefn def_cmds.texi(,298) def_cmds.texi(,299) @deftypefn @code{A1} @code{A2} @code{A3} @code{A4} @code{A5} def_cmds.texi(,300) @end deftypefn def_cmds.texi(,301) def_cmds.texi(,302) @c deftypevr def_cmds.texi(,303) @deftypevr @var{A1} @var{A2} @var{A3} @var{A4} @var{A5} def_cmds.texi(,304) @end deftypevr def_cmds.texi(,305) def_cmds.texi(,306) @deftypevr @code{A1} @t{A2} @code{A3} @code{A4} @code{A5} def_cmds.texi(,307) @end deftypevr def_cmds.texi(,308) def_cmds.texi(,309) @c deftp def_cmds.texi(,310) @deftp @var{A1} @var{A2} @var{A3} @var{A4} def_cmds.texi(,311) @end deftp def_cmds.texi(,312) def_cmds.texi(,313) @deftp @code{A1} @code{A2} @code{A3} @code{A4} def_cmds.texi(,314) @end deftp def_cmds.texi(,315) def_cmds.texi(,316) @c defcv def_cmds.texi(,317) @defcv @var{A1} @var{A2} @var{A3} @var{A4} @var{A5} def_cmds.texi(,318) @end defcv def_cmds.texi(,319) def_cmds.texi(,320) @deftp @code{A1} @code{A2} @code{A3} @code{A4} @code{A5} def_cmds.texi(,321) @end deftp def_cmds.texi(,322) def_cmds.texi(,323) @c deftypecv def_cmds.texi(,324) @deftypecv @var{A1} @var{A2} @var{A3} @var{A4} @var{A5} @var{A6} def_cmds.texi(,325) @end deftypecv def_cmds.texi(,326) def_cmds.texi(,327) @deftypecv @code{A1} @code{A2} @option{A3} @code{A4} @code{A5} @code{A6} def_cmds.texi(,328) @end deftypecv def_cmds.texi(,329) def_cmds.texi(,330) @c defop def_cmds.texi(,331) @defop @var{A1} @var{A2} @var{A3} @var{A4} @var{A5} def_cmds.texi(,332) @end defop def_cmds.texi(,333) def_cmds.texi(,334) @defop @code{A1} @code{A2} @code{A3} @code{A4} @code{A5} def_cmds.texi(,335) @end defop def_cmds.texi(,336) def_cmds.texi(,337) @c deftypeop def_cmds.texi(,338) @deftypeop @var{A1} @var{A2} @var{A3} @var{A4} @var{A5} @var{A6} def_cmds.texi(,339) @end deftypeop def_cmds.texi(,340) def_cmds.texi(,341) @deftypeop @code{A1} @code{A2} @code{A3} @code{A4} @code{A5} @code{A6} def_cmds.texi(,342) @end deftypeop def_cmds.texi(,343) def_cmds.texi(,344) @printindex vr def_cmds.texi(,345) @printindex fn def_cmds.texi(,346) def_cmds.texi(,347) @bye texi2html-1.82/test/formatting/res/texi_def_cmds/def_cmds.texi0000644000175000017500000002720611264347123026420 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename def_cmds.info @node Top @top Test for definition commands @copying @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @deffn cate--gory de--ffn_name ar--guments @ more args @* even more so def--fn @end deffn @deffn fset @var{i} a g @deffnx {cmde} truc {} @deffnx Command {log trap} {} @deffnx Command { log trap1} {} @deffnx Command {log trap2 } {} @deffnx cmde @b{id ule} truc @deffnx cmde2 @b{id @samp{i} ule} truc @deffnx @b{id @samp{i} ule} @deffnx @deffnx aaa @deffnx {} {} @deffnx{} @deffnx{} machin @deffnx{} {bidule machin} @deffnx{truc} machin @deffnx{truc} { } @deffnx{truc} @deffnx{} {} @deffnx {truc} followed by a comment @c comment @deffnx truc machin bidule chose and } @deffnx truc machin bidule chose and } after @deffnx truc machin bidule chose and { @deffnx truc machin bidule chose and { and after Various deff lines @deffnx {truc} after a deff item @c comment text in def item for second def item @deffnx {truc} deffnx before end deffn @end deffn @deffn empty deffn @end deffn @deffn empty deffn with deffnx @deffnx empty deffnx @end deffn @defvr c--ategory d--efvr_name d--efvr @end defvr @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... d--eftypefn @end deftypefn @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... d--eftypeop @end deftypeop @deftypevr c--ategory t--ype d--eftypevr_name d--eftypevr @end deftypevr @defcv c--ategory c--lass d--efcv_name d--efcv @end defcv @defop c--ategory c--lass d--efop_name a--rguments... d--efop @end defop @deftp c--ategory d--eftp_name a--ttributes... d--eftp @end deftp @defun d--efun_name a--rguments... d--efun @end defun @defmac d--efmac_name a--rguments... d--efmac @end defmac @defspec d--efspec_name a--rguments... d--efspec @end defspec @defvar d--efvar_name d--efvar @end defvar @defopt d--efopt_name d--efopt @end defopt @deftypefun t--ype d--eftypefun_name a--rguments... d--eftypefun @end deftypefun @deftypevar t--ype d--eftypevar_name d--eftypevar @end deftypevar @defivar c--lass d--efivar_name d--efivar @end defivar @deftypeivar c--lass t--ype d--eftypeivar_name d--eftypeivar @end deftypeivar @defmethod c--lass d--efmethod_name a--rguments... d--efmethod @end defmethod @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... d--eftypemethod @end deftypemethod @deffn category name args { @ more args deffn with @{ @end deffn @deffn category name args } @ more args deffn with @} @end deffn @end copying @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @deffn cate--gory de--ffn_name ar--guments @ more args @* even more so def--fn @end deffn @deffn fset @var{i} a g @deffnx {cmde} truc {} @deffnx Command {log trap} {} @deffnx Command { log trap1} {} @deffnx Command {log trap2 } {} @deffnx cmde @b{id ule} truc @deffnx cmde2 @b{id @samp{i} ule} truc @deffnx @b{id @samp{i} ule} @deffnx @deffnx aaa @deffnx {} {} @deffnx{} @deffnx{} machin @deffnx{} {bidule machin} @deffnx{truc} machin @deffnx{truc} { } @deffnx{truc} @deffnx{} {} @deffnx {truc} followed by a comment @c comment @deffnx truc machin bidule chose and } @deffnx truc machin bidule chose and } after @deffnx truc machin bidule chose and { @deffnx truc machin bidule chose and { and after Various deff lines @deffnx {truc} after a deff item @c comment text in def item for second def item @deffnx {truc} deffnx before end deffn @end deffn @deffn empty deffn @end deffn @deffn empty deffn with deffnx @deffnx empty deffnx @end deffn @defvr c--ategory d--efvr_name d--efvr @end defvr @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... d--eftypefn @end deftypefn @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... d--eftypeop @end deftypeop @deftypevr c--ategory t--ype d--eftypevr_name d--eftypevr @end deftypevr @defcv c--ategory c--lass d--efcv_name d--efcv @end defcv @defop c--ategory c--lass d--efop_name a--rguments... d--efop @end defop @deftp c--ategory d--eftp_name a--ttributes... d--eftp @end deftp @defun d--efun_name a--rguments... d--efun @end defun @defmac d--efmac_name a--rguments... d--efmac @end defmac @defspec d--efspec_name a--rguments... d--efspec @end defspec @defvar d--efvar_name d--efvar @end defvar @defopt d--efopt_name d--efopt @end defopt @deftypefun t--ype d--eftypefun_name a--rguments... d--eftypefun @end deftypefun @deftypevar t--ype d--eftypevar_name d--eftypevar @end deftypevar @defivar c--lass d--efivar_name d--efivar @end defivar @deftypeivar c--lass t--ype d--eftypeivar_name d--eftypeivar @end deftypeivar @defmethod c--lass d--efmethod_name a--rguments... d--efmethod @end defmethod @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... d--eftypemethod @end deftypemethod @deffn category name args { @ more args deffn with @{ @end deffn @deffn category name args } @ more args deffn with @} @end deffn @example @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @deffn cate--gory de--ffn_name ar--guments @ more args @* even more so def--fn @end deffn @deffn fset @var{i} a g @deffnx {cmde} truc {} @deffnx Command {log trap} {} @deffnx Command { log trap1} {} @deffnx Command {log trap2 } {} @deffnx cmde @b{id ule} truc @deffnx cmde2 @b{id @samp{i} ule} truc @deffnx @b{id @samp{i} ule} @deffnx @deffnx aaa @deffnx {} {} @deffnx{} @deffnx{} machin @deffnx{} {bidule machin} @deffnx{truc} machin @deffnx{truc} { } @deffnx{truc} @deffnx{} {} @deffnx {truc} followed by a comment @c comment @deffnx truc machin bidule chose and } @deffnx truc machin bidule chose and } after @deffnx truc machin bidule chose and { @deffnx truc machin bidule chose and { and after Various deff lines @deffnx {truc} after a deff item @c comment text in def item for second def item @deffnx {truc} deffnx before end deffn @end deffn @deffn empty deffn @end deffn @deffn empty deffn with deffnx @deffnx empty deffnx @end deffn @defvr c--ategory d--efvr_name d--efvr @end defvr @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... d--eftypefn @end deftypefn @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... d--eftypeop @end deftypeop @deftypevr c--ategory t--ype d--eftypevr_name d--eftypevr @end deftypevr @defcv c--ategory c--lass d--efcv_name d--efcv @end defcv @defop c--ategory c--lass d--efop_name a--rguments... d--efop @end defop @deftp c--ategory d--eftp_name a--ttributes... d--eftp @end deftp @defun d--efun_name a--rguments... d--efun @end defun @defmac d--efmac_name a--rguments... d--efmac @end defmac @defspec d--efspec_name a--rguments... d--efspec @end defspec @defvar d--efvar_name d--efvar @end defvar @defopt d--efopt_name d--efopt @end defopt @deftypefun t--ype d--eftypefun_name a--rguments... d--eftypefun @end deftypefun @deftypevar t--ype d--eftypevar_name d--eftypevar @end deftypevar @defivar c--lass d--efivar_name d--efivar @end defivar @deftypeivar c--lass t--ype d--eftypeivar_name d--eftypeivar @end deftypeivar @defmethod c--lass d--efmethod_name a--rguments... d--efmethod @end defmethod @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... d--eftypemethod @end deftypemethod @deffn category name args { @ more args deffn with @{ @end deffn @deffn category name args } @ more args deffn with @} @end deffn @end example @c deffn @deffn Command @var{forward--char} @var{nchars} {argument2} {argument3} @ (arg in brace, [something @var{in v--ar}, @b{in, b} {, comma} a@var{pref} p]) last @end deffn @c defvr @defvr Variable fill-column {argument1} {argument2} @ (arg in brace, [something @var{in v--ar}, @b{in, b} {, comma} a@var{pref} p]) last @end defvr @c deftypefn @deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar}) @end deftypefn @deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar}) @ (arg in brace, {[something} @var{in v--ar}, @b{in, b} {, comma} a@var{pref} p]) ct@*@* last @end deftypefn @deftypefn {Library Function} int foobug {[something} @end deftypefn @deftypefn stacks private push (@var{s}:in out stack; @ @var{n}:in integer) ; ;barg aarg; ; end @end deftypefn @c deftypevr @deftypevr {Global Flag} int enable @ (arg in brace, [something @var{in v--ar}, @b{in, b} {, comma} a@var{pref} p]) last @end deftypevr @c deftp @deftp {Data type} pair car cdr @ (arg in brace, [something @var{in v--ar}, @b{in, b} {, comma} a@var{pref} p]) last @end deftp @c defcv @defcv {Class Option} Window border-pattern @ (arg in brace, [something @var{in v--ar}, @b{in, b} {, comma} a@var{pref} p]) last @end defcv @c deftypecv @deftypecv {Class Option2} Window @code{int} border-pattern @ (arg in brace, [something @var{in v--ar}, @b{in, b} {, comma} a@var{pref} p]) last @end deftypecv @c defop @defop Operation windows expose @ (arg in brace, [something @var{in v--ar}, @b{in, b} {, comma} a@var{pref} p]) last @end defop @c deftypeop @deftypeop Operation2 W,indow @code{int} expose @ (arg in brace, [something @var{in v--ar}, @b{in, b} {, comma} a@var{pref} p]) last @end deftypeop @deftypeop Operation5 Window @code{int} expose type arg @end deftypeop @deftypeop Operation3 {W,indow} @code{int} {e,xpose} type arg @end deftypeop @deftypeop Operation4 {,Window} @code{int} {,expose} type arg @end deftypeop @deftypeop Operation6 W,indow @code{int} e,xpose type arg @end deftypeop @deftypeop Operation7 ,Window @code{int} ,expose type arg @end deftypeop @deftypeop Operation13 {W)indow} @code{int} {e)xpose} type arg @end deftypeop @deftypeop Operation14 {)Window} @code{int} {)expose} type arg @end deftypeop @deftypeop Operation16 W)indow @code{int} e)xpose type arg @end deftypeop @deftypeop Operation17 )Window @code{int} )expose type arg @end deftypeop @deftypeop Operation18 {W;indow} @code{int} {e;xpose} type arg @end deftypeop @deftypeop Operation19 {;Window} @code{int} {;expose} type arg @end deftypeop @deftypeop Operation20 W;indow @code{int} e;xpose type arg @end deftypeop @deftypeop Operation21 ;Window @code{int} ;expose type arg @end deftypeop @deftypeop Command@code{com} {Window@code{int}} expose@var{exp} @end deftypeop @c deffn @deffn @end deffn @c defvr @defvr @end defvr @c deftypefn @deftypefn @end deftypefn @c deftypeop @deftypeop @end deftypeop @c deftypevr @deftypevr @end deftypevr @c defcv @defcv @end defcv @c deftypecv @deftypecv @end deftypecv @c defop @defop @end defop @c deftp @deftp @end deftp @c deffn @deffn @var{A1} @var{A2} @var{A3} @var{A4} @end deffn @deffn @code{A1} @code{A2} @code{A3} @code{A4} @end deffn @c defvr @defvr @var{A1} @var{A2} @var{A3} @var{A4} @end defvr @defvr @code{A1} @code{A2} @code{A3} @code{A4} @end defvr @c deftypefn @deftypefn @var{A1} @var{A2} @var{A3} @var{A4} @var{A5} @end deftypefn @deftypefn @code{A1} @code{A2} @code{A3} @code{A4} @code{A5} @end deftypefn @c deftypevr @deftypevr @var{A1} @var{A2} @var{A3} @var{A4} @var{A5} @end deftypevr @deftypevr @code{A1} @t{A2} @code{A3} @code{A4} @code{A5} @end deftypevr @c deftp @deftp @var{A1} @var{A2} @var{A3} @var{A4} @end deftp @deftp @code{A1} @code{A2} @code{A3} @code{A4} @end deftp @c defcv @defcv @var{A1} @var{A2} @var{A3} @var{A4} @var{A5} @end defcv @deftp @code{A1} @code{A2} @code{A3} @code{A4} @code{A5} @end deftp @c deftypecv @deftypecv @var{A1} @var{A2} @var{A3} @var{A4} @var{A5} @var{A6} @end deftypecv @deftypecv @code{A1} @code{A2} @option{A3} @code{A4} @code{A5} @code{A6} @end deftypecv @c defop @defop @var{A1} @var{A2} @var{A3} @var{A4} @var{A5} @end defop @defop @code{A1} @code{A2} @code{A3} @code{A4} @code{A5} @end defop @c deftypeop @deftypeop @var{A1} @var{A2} @var{A3} @var{A4} @var{A5} @var{A6} @end deftypeop @deftypeop @code{A1} @code{A2} @code{A3} @code{A4} @code{A5} @code{A6} @end deftypeop @printindex vr @printindex fn @bye texi2html-1.82/test/formatting/res/texi_def_cmds/def_cmds.passtexi0000644000175000017500000006367711264347123027323 0ustar flichtenheldflichtenhelddef_cmds.texi(,2) @setfilename def_cmds.info def_cmds.texi(,3) @node Top def_cmds.texi(,4) @top Test for definition commands def_cmds.texi(,5) def_cmds.texi(,137) def_cmds.texi(,138) @copying def_cmds.texi(mymacro,139) @deffn c--ategory d--effn_name a--rguments... def_cmds.texi(mymacro,139) d--effn def_cmds.texi(mymacro,139) @end deffn def_cmds.texi(mymacro,139) def_cmds.texi(mymacro,139) @deffn cate--gory de--ffn_name ar--guments @ def_cmds.texi(mymacro,139) more args @* even more so def_cmds.texi(mymacro,139) def--fn def_cmds.texi(mymacro,139) @end deffn def_cmds.texi(mymacro,139) def_cmds.texi(mymacro,139) @deffn fset @var{i} a g def_cmds.texi(mymacro,139) @deffnx {cmde} truc {} def_cmds.texi(mymacro,139) @deffnx Command {log trap} {} def_cmds.texi(mymacro,139) @deffnx Command { log trap1} {} def_cmds.texi(mymacro,139) @deffnx Command {log trap2 } {} def_cmds.texi(mymacro,139) @deffnx cmde @b{id ule} truc def_cmds.texi(mymacro,139) @deffnx cmde2 @b{id @samp{i} ule} truc def_cmds.texi(mymacro,139) @deffnx @b{id @samp{i} ule} def_cmds.texi(mymacro,139) @deffnx def_cmds.texi(mymacro,139) @deffnx aaa def_cmds.texi(mymacro,139) @deffnx {} {} def_cmds.texi(mymacro,139) @deffnx{} def_cmds.texi(mymacro,139) @deffnx{} machin def_cmds.texi(mymacro,139) @deffnx{} {bidule machin} def_cmds.texi(mymacro,139) @deffnx{truc} machin def_cmds.texi(mymacro,139) @deffnx{truc} { } def_cmds.texi(mymacro,139) @deffnx{truc} def_cmds.texi(mymacro,139) @deffnx{} {} def_cmds.texi(mymacro,139) @deffnx {truc} followed by a comment def_cmds.texi(mymacro,139) @c comment def_cmds.texi(mymacro,139) @deffnx truc machin bidule chose and } def_cmds.texi(mymacro,139) @deffnx truc machin bidule chose and } after def_cmds.texi(mymacro,139) @deffnx truc machin bidule chose and { def_cmds.texi(mymacro,139) @deffnx truc machin bidule chose and { and after def_cmds.texi(mymacro,139) Various deff lines def_cmds.texi(mymacro,139) @deffnx {truc} after a deff item def_cmds.texi(mymacro,139) @c comment def_cmds.texi(mymacro,139) text in def item for second def item def_cmds.texi(mymacro,139) @deffnx {truc} deffnx before end deffn def_cmds.texi(mymacro,139) @end deffn def_cmds.texi(mymacro,139) def_cmds.texi(mymacro,139) @deffn empty deffn def_cmds.texi(mymacro,139) @end deffn def_cmds.texi(mymacro,139) def_cmds.texi(mymacro,139) @deffn empty deffn with deffnx def_cmds.texi(mymacro,139) @deffnx empty deffnx def_cmds.texi(mymacro,139) @end deffn def_cmds.texi(mymacro,139) def_cmds.texi(mymacro,139) @defvr c--ategory d--efvr_name def_cmds.texi(mymacro,139) d--efvr def_cmds.texi(mymacro,139) @end defvr def_cmds.texi(mymacro,139) def_cmds.texi(mymacro,139) @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... def_cmds.texi(mymacro,139) d--eftypefn def_cmds.texi(mymacro,139) @end deftypefn def_cmds.texi(mymacro,139) def_cmds.texi(mymacro,139) @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... def_cmds.texi(mymacro,139) d--eftypeop def_cmds.texi(mymacro,139) @end deftypeop def_cmds.texi(mymacro,139) def_cmds.texi(mymacro,139) @deftypevr c--ategory t--ype d--eftypevr_name def_cmds.texi(mymacro,139) d--eftypevr def_cmds.texi(mymacro,139) @end deftypevr def_cmds.texi(mymacro,139) def_cmds.texi(mymacro,139) @defcv c--ategory c--lass d--efcv_name def_cmds.texi(mymacro,139) d--efcv def_cmds.texi(mymacro,139) @end defcv def_cmds.texi(mymacro,139) def_cmds.texi(mymacro,139) @defop c--ategory c--lass d--efop_name a--rguments... def_cmds.texi(mymacro,139) d--efop def_cmds.texi(mymacro,139) @end defop def_cmds.texi(mymacro,139) def_cmds.texi(mymacro,139) @deftp c--ategory d--eftp_name a--ttributes... def_cmds.texi(mymacro,139) d--eftp def_cmds.texi(mymacro,139) @end deftp def_cmds.texi(mymacro,139) def_cmds.texi(mymacro,139) @defun d--efun_name a--rguments... def_cmds.texi(mymacro,139) d--efun def_cmds.texi(mymacro,139) @end defun def_cmds.texi(mymacro,139) def_cmds.texi(mymacro,139) @defmac d--efmac_name a--rguments... def_cmds.texi(mymacro,139) d--efmac def_cmds.texi(mymacro,139) @end defmac def_cmds.texi(mymacro,139) def_cmds.texi(mymacro,139) @defspec d--efspec_name a--rguments... def_cmds.texi(mymacro,139) d--efspec def_cmds.texi(mymacro,139) @end defspec def_cmds.texi(mymacro,139) def_cmds.texi(mymacro,139) @defvar d--efvar_name def_cmds.texi(mymacro,139) d--efvar def_cmds.texi(mymacro,139) @end defvar def_cmds.texi(mymacro,139) def_cmds.texi(mymacro,139) @defopt d--efopt_name def_cmds.texi(mymacro,139) d--efopt def_cmds.texi(mymacro,139) @end defopt def_cmds.texi(mymacro,139) def_cmds.texi(mymacro,139) @deftypefun t--ype d--eftypefun_name a--rguments... def_cmds.texi(mymacro,139) d--eftypefun def_cmds.texi(mymacro,139) @end deftypefun def_cmds.texi(mymacro,139) def_cmds.texi(mymacro,139) @deftypevar t--ype d--eftypevar_name def_cmds.texi(mymacro,139) d--eftypevar def_cmds.texi(mymacro,139) @end deftypevar def_cmds.texi(mymacro,139) def_cmds.texi(mymacro,139) @defivar c--lass d--efivar_name def_cmds.texi(mymacro,139) d--efivar def_cmds.texi(mymacro,139) @end defivar def_cmds.texi(mymacro,139) def_cmds.texi(mymacro,139) @deftypeivar c--lass t--ype d--eftypeivar_name def_cmds.texi(mymacro,139) d--eftypeivar def_cmds.texi(mymacro,139) @end deftypeivar def_cmds.texi(mymacro,139) def_cmds.texi(mymacro,139) @defmethod c--lass d--efmethod_name a--rguments... def_cmds.texi(mymacro,139) d--efmethod def_cmds.texi(mymacro,139) @end defmethod def_cmds.texi(mymacro,139) def_cmds.texi(mymacro,139) @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... def_cmds.texi(mymacro,139) d--eftypemethod def_cmds.texi(mymacro,139) @end deftypemethod def_cmds.texi(mymacro,139) def_cmds.texi(mymacro,139) @deffn category name args { @ def_cmds.texi(mymacro,139) more args def_cmds.texi(mymacro,139) deffn with @{ def_cmds.texi(mymacro,139) @end deffn def_cmds.texi(mymacro,139) def_cmds.texi(mymacro,139) @deffn category name args } @ def_cmds.texi(mymacro,139) more args def_cmds.texi(mymacro,139) deffn with @} def_cmds.texi(mymacro,139) @end deffn def_cmds.texi(mymacro,139) def_cmds.texi(,140) @end copying def_cmds.texi(,141) def_cmds.texi(mymacro,142) @deffn c--ategory d--effn_name a--rguments... def_cmds.texi(mymacro,142) d--effn def_cmds.texi(mymacro,142) @end deffn def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @deffn cate--gory de--ffn_name ar--guments @ def_cmds.texi(mymacro,142) more args @* even more so def_cmds.texi(mymacro,142) def--fn def_cmds.texi(mymacro,142) @end deffn def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @deffn fset @var{i} a g def_cmds.texi(mymacro,142) @deffnx {cmde} truc {} def_cmds.texi(mymacro,142) @deffnx Command {log trap} {} def_cmds.texi(mymacro,142) @deffnx Command { log trap1} {} def_cmds.texi(mymacro,142) @deffnx Command {log trap2 } {} def_cmds.texi(mymacro,142) @deffnx cmde @b{id ule} truc def_cmds.texi(mymacro,142) @deffnx cmde2 @b{id @samp{i} ule} truc def_cmds.texi(mymacro,142) @deffnx @b{id @samp{i} ule} def_cmds.texi(mymacro,142) @deffnx def_cmds.texi(mymacro,142) @deffnx aaa def_cmds.texi(mymacro,142) @deffnx {} {} def_cmds.texi(mymacro,142) @deffnx{} def_cmds.texi(mymacro,142) @deffnx{} machin def_cmds.texi(mymacro,142) @deffnx{} {bidule machin} def_cmds.texi(mymacro,142) @deffnx{truc} machin def_cmds.texi(mymacro,142) @deffnx{truc} { } def_cmds.texi(mymacro,142) @deffnx{truc} def_cmds.texi(mymacro,142) @deffnx{} {} def_cmds.texi(mymacro,142) @deffnx {truc} followed by a comment def_cmds.texi(mymacro,142) @c comment def_cmds.texi(mymacro,142) @deffnx truc machin bidule chose and } def_cmds.texi(mymacro,142) @deffnx truc machin bidule chose and } after def_cmds.texi(mymacro,142) @deffnx truc machin bidule chose and { def_cmds.texi(mymacro,142) @deffnx truc machin bidule chose and { and after def_cmds.texi(mymacro,142) Various deff lines def_cmds.texi(mymacro,142) @deffnx {truc} after a deff item def_cmds.texi(mymacro,142) @c comment def_cmds.texi(mymacro,142) text in def item for second def item def_cmds.texi(mymacro,142) @deffnx {truc} deffnx before end deffn def_cmds.texi(mymacro,142) @end deffn def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @deffn empty deffn def_cmds.texi(mymacro,142) @end deffn def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @deffn empty deffn with deffnx def_cmds.texi(mymacro,142) @deffnx empty deffnx def_cmds.texi(mymacro,142) @end deffn def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @defvr c--ategory d--efvr_name def_cmds.texi(mymacro,142) d--efvr def_cmds.texi(mymacro,142) @end defvr def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... def_cmds.texi(mymacro,142) d--eftypefn def_cmds.texi(mymacro,142) @end deftypefn def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... def_cmds.texi(mymacro,142) d--eftypeop def_cmds.texi(mymacro,142) @end deftypeop def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @deftypevr c--ategory t--ype d--eftypevr_name def_cmds.texi(mymacro,142) d--eftypevr def_cmds.texi(mymacro,142) @end deftypevr def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @defcv c--ategory c--lass d--efcv_name def_cmds.texi(mymacro,142) d--efcv def_cmds.texi(mymacro,142) @end defcv def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @defop c--ategory c--lass d--efop_name a--rguments... def_cmds.texi(mymacro,142) d--efop def_cmds.texi(mymacro,142) @end defop def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @deftp c--ategory d--eftp_name a--ttributes... def_cmds.texi(mymacro,142) d--eftp def_cmds.texi(mymacro,142) @end deftp def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @defun d--efun_name a--rguments... def_cmds.texi(mymacro,142) d--efun def_cmds.texi(mymacro,142) @end defun def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @defmac d--efmac_name a--rguments... def_cmds.texi(mymacro,142) d--efmac def_cmds.texi(mymacro,142) @end defmac def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @defspec d--efspec_name a--rguments... def_cmds.texi(mymacro,142) d--efspec def_cmds.texi(mymacro,142) @end defspec def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @defvar d--efvar_name def_cmds.texi(mymacro,142) d--efvar def_cmds.texi(mymacro,142) @end defvar def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @defopt d--efopt_name def_cmds.texi(mymacro,142) d--efopt def_cmds.texi(mymacro,142) @end defopt def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @deftypefun t--ype d--eftypefun_name a--rguments... def_cmds.texi(mymacro,142) d--eftypefun def_cmds.texi(mymacro,142) @end deftypefun def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @deftypevar t--ype d--eftypevar_name def_cmds.texi(mymacro,142) d--eftypevar def_cmds.texi(mymacro,142) @end deftypevar def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @defivar c--lass d--efivar_name def_cmds.texi(mymacro,142) d--efivar def_cmds.texi(mymacro,142) @end defivar def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @deftypeivar c--lass t--ype d--eftypeivar_name def_cmds.texi(mymacro,142) d--eftypeivar def_cmds.texi(mymacro,142) @end deftypeivar def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @defmethod c--lass d--efmethod_name a--rguments... def_cmds.texi(mymacro,142) d--efmethod def_cmds.texi(mymacro,142) @end defmethod def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... def_cmds.texi(mymacro,142) d--eftypemethod def_cmds.texi(mymacro,142) @end deftypemethod def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @deffn category name args { @ def_cmds.texi(mymacro,142) more args def_cmds.texi(mymacro,142) deffn with @{ def_cmds.texi(mymacro,142) @end deffn def_cmds.texi(mymacro,142) def_cmds.texi(mymacro,142) @deffn category name args } @ def_cmds.texi(mymacro,142) more args def_cmds.texi(mymacro,142) deffn with @} def_cmds.texi(mymacro,142) @end deffn def_cmds.texi(mymacro,142) def_cmds.texi(,143) def_cmds.texi(,144) @example def_cmds.texi(mymacro,145) @deffn c--ategory d--effn_name a--rguments... def_cmds.texi(mymacro,145) d--effn def_cmds.texi(mymacro,145) @end deffn def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @deffn cate--gory de--ffn_name ar--guments @ def_cmds.texi(mymacro,145) more args @* even more so def_cmds.texi(mymacro,145) def--fn def_cmds.texi(mymacro,145) @end deffn def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @deffn fset @var{i} a g def_cmds.texi(mymacro,145) @deffnx {cmde} truc {} def_cmds.texi(mymacro,145) @deffnx Command {log trap} {} def_cmds.texi(mymacro,145) @deffnx Command { log trap1} {} def_cmds.texi(mymacro,145) @deffnx Command {log trap2 } {} def_cmds.texi(mymacro,145) @deffnx cmde @b{id ule} truc def_cmds.texi(mymacro,145) @deffnx cmde2 @b{id @samp{i} ule} truc def_cmds.texi(mymacro,145) @deffnx @b{id @samp{i} ule} def_cmds.texi(mymacro,145) @deffnx def_cmds.texi(mymacro,145) @deffnx aaa def_cmds.texi(mymacro,145) @deffnx {} {} def_cmds.texi(mymacro,145) @deffnx{} def_cmds.texi(mymacro,145) @deffnx{} machin def_cmds.texi(mymacro,145) @deffnx{} {bidule machin} def_cmds.texi(mymacro,145) @deffnx{truc} machin def_cmds.texi(mymacro,145) @deffnx{truc} { } def_cmds.texi(mymacro,145) @deffnx{truc} def_cmds.texi(mymacro,145) @deffnx{} {} def_cmds.texi(mymacro,145) @deffnx {truc} followed by a comment def_cmds.texi(mymacro,145) @c comment def_cmds.texi(mymacro,145) @deffnx truc machin bidule chose and } def_cmds.texi(mymacro,145) @deffnx truc machin bidule chose and } after def_cmds.texi(mymacro,145) @deffnx truc machin bidule chose and { def_cmds.texi(mymacro,145) @deffnx truc machin bidule chose and { and after def_cmds.texi(mymacro,145) Various deff lines def_cmds.texi(mymacro,145) @deffnx {truc} after a deff item def_cmds.texi(mymacro,145) @c comment def_cmds.texi(mymacro,145) text in def item for second def item def_cmds.texi(mymacro,145) @deffnx {truc} deffnx before end deffn def_cmds.texi(mymacro,145) @end deffn def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @deffn empty deffn def_cmds.texi(mymacro,145) @end deffn def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @deffn empty deffn with deffnx def_cmds.texi(mymacro,145) @deffnx empty deffnx def_cmds.texi(mymacro,145) @end deffn def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @defvr c--ategory d--efvr_name def_cmds.texi(mymacro,145) d--efvr def_cmds.texi(mymacro,145) @end defvr def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... def_cmds.texi(mymacro,145) d--eftypefn def_cmds.texi(mymacro,145) @end deftypefn def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... def_cmds.texi(mymacro,145) d--eftypeop def_cmds.texi(mymacro,145) @end deftypeop def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @deftypevr c--ategory t--ype d--eftypevr_name def_cmds.texi(mymacro,145) d--eftypevr def_cmds.texi(mymacro,145) @end deftypevr def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @defcv c--ategory c--lass d--efcv_name def_cmds.texi(mymacro,145) d--efcv def_cmds.texi(mymacro,145) @end defcv def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @defop c--ategory c--lass d--efop_name a--rguments... def_cmds.texi(mymacro,145) d--efop def_cmds.texi(mymacro,145) @end defop def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @deftp c--ategory d--eftp_name a--ttributes... def_cmds.texi(mymacro,145) d--eftp def_cmds.texi(mymacro,145) @end deftp def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @defun d--efun_name a--rguments... def_cmds.texi(mymacro,145) d--efun def_cmds.texi(mymacro,145) @end defun def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @defmac d--efmac_name a--rguments... def_cmds.texi(mymacro,145) d--efmac def_cmds.texi(mymacro,145) @end defmac def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @defspec d--efspec_name a--rguments... def_cmds.texi(mymacro,145) d--efspec def_cmds.texi(mymacro,145) @end defspec def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @defvar d--efvar_name def_cmds.texi(mymacro,145) d--efvar def_cmds.texi(mymacro,145) @end defvar def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @defopt d--efopt_name def_cmds.texi(mymacro,145) d--efopt def_cmds.texi(mymacro,145) @end defopt def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @deftypefun t--ype d--eftypefun_name a--rguments... def_cmds.texi(mymacro,145) d--eftypefun def_cmds.texi(mymacro,145) @end deftypefun def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @deftypevar t--ype d--eftypevar_name def_cmds.texi(mymacro,145) d--eftypevar def_cmds.texi(mymacro,145) @end deftypevar def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @defivar c--lass d--efivar_name def_cmds.texi(mymacro,145) d--efivar def_cmds.texi(mymacro,145) @end defivar def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @deftypeivar c--lass t--ype d--eftypeivar_name def_cmds.texi(mymacro,145) d--eftypeivar def_cmds.texi(mymacro,145) @end deftypeivar def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @defmethod c--lass d--efmethod_name a--rguments... def_cmds.texi(mymacro,145) d--efmethod def_cmds.texi(mymacro,145) @end defmethod def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... def_cmds.texi(mymacro,145) d--eftypemethod def_cmds.texi(mymacro,145) @end deftypemethod def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @deffn category name args { @ def_cmds.texi(mymacro,145) more args def_cmds.texi(mymacro,145) deffn with @{ def_cmds.texi(mymacro,145) @end deffn def_cmds.texi(mymacro,145) def_cmds.texi(mymacro,145) @deffn category name args } @ def_cmds.texi(mymacro,145) more args def_cmds.texi(mymacro,145) deffn with @} def_cmds.texi(mymacro,145) @end deffn def_cmds.texi(mymacro,145) def_cmds.texi(,146) @end example def_cmds.texi(,147) def_cmds.texi(,148) @c deffn def_cmds.texi(,149) @deffn Command @var{forward--char} @var{nchars} {argument2} {argument3} @ def_cmds.texi(,150) (arg in brace, [something @var{in v--ar}, @b{in, b} {, comma} a@var{pref} p]) last def_cmds.texi(,151) @end deffn def_cmds.texi(,152) def_cmds.texi(,153) @c defvr def_cmds.texi(,154) @defvr Variable fill-column {argument1} {argument2} @ def_cmds.texi(,155) (arg in brace, [something @var{in v--ar}, @b{in, b} {, comma} a@var{pref} p]) last def_cmds.texi(,156) @end defvr def_cmds.texi(,157) def_cmds.texi(,158) @c deftypefn def_cmds.texi(,159) @deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar}) def_cmds.texi(,160) @end deftypefn def_cmds.texi(,161) def_cmds.texi(,162) @deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar}) @ def_cmds.texi(,163) (arg in brace, {[something} @var{in v--ar}, @b{in, b} {, comma} a@var{pref} p]) ct@*@* last def_cmds.texi(,164) @end deftypefn def_cmds.texi(,165) def_cmds.texi(,166) @deftypefn {Library Function} int foobug {[something} def_cmds.texi(,167) @end deftypefn def_cmds.texi(,168) def_cmds.texi(,169) @deftypefn stacks private push (@var{s}:in out stack; @ def_cmds.texi(,170) @var{n}:in integer) ; ;barg aarg; ; end def_cmds.texi(,171) @end deftypefn def_cmds.texi(,172) def_cmds.texi(,173) @c deftypevr def_cmds.texi(,174) @deftypevr {Global Flag} int enable @ def_cmds.texi(,175) (arg in brace, [something @var{in v--ar}, @b{in, b} {, comma} a@var{pref} p]) last def_cmds.texi(,176) @end deftypevr def_cmds.texi(,177) def_cmds.texi(,178) @c deftp def_cmds.texi(,179) @deftp {Data type} pair car cdr @ def_cmds.texi(,180) (arg in brace, [something @var{in v--ar}, @b{in, b} {, comma} a@var{pref} p]) last def_cmds.texi(,181) @end deftp def_cmds.texi(,182) def_cmds.texi(,183) @c defcv def_cmds.texi(,184) @defcv {Class Option} Window border-pattern @ def_cmds.texi(,185) (arg in brace, [something @var{in v--ar}, @b{in, b} {, comma} a@var{pref} p]) last def_cmds.texi(,186) @end defcv def_cmds.texi(,187) def_cmds.texi(,188) @c deftypecv def_cmds.texi(,189) @deftypecv {Class Option2} Window @code{int} border-pattern @ def_cmds.texi(,190) (arg in brace, [something @var{in v--ar}, @b{in, b} {, comma} a@var{pref} p]) last def_cmds.texi(,191) @end deftypecv def_cmds.texi(,192) def_cmds.texi(,193) @c defop def_cmds.texi(,194) @defop Operation windows expose @ def_cmds.texi(,195) (arg in brace, [something @var{in v--ar}, @b{in, b} {, comma} a@var{pref} p]) last def_cmds.texi(,196) @end defop def_cmds.texi(,197) def_cmds.texi(,198) @c deftypeop def_cmds.texi(,199) @deftypeop Operation2 W,indow @code{int} expose @ def_cmds.texi(,200) (arg in brace, [something @var{in v--ar}, @b{in, b} {, comma} a@var{pref} p]) last def_cmds.texi(,201) @end deftypeop def_cmds.texi(,202) def_cmds.texi(,203) @deftypeop Operation5 Window @code{int} expose type arg def_cmds.texi(,204) @end deftypeop def_cmds.texi(,205) def_cmds.texi(,206) @deftypeop Operation3 {W,indow} @code{int} {e,xpose} type arg def_cmds.texi(,207) @end deftypeop def_cmds.texi(,208) def_cmds.texi(,209) @deftypeop Operation4 {,Window} @code{int} {,expose} type arg def_cmds.texi(,210) @end deftypeop def_cmds.texi(,211) def_cmds.texi(,212) @deftypeop Operation6 W,indow @code{int} e,xpose type arg def_cmds.texi(,213) @end deftypeop def_cmds.texi(,214) def_cmds.texi(,215) @deftypeop Operation7 ,Window @code{int} ,expose type arg def_cmds.texi(,216) @end deftypeop def_cmds.texi(,217) def_cmds.texi(,218) @deftypeop Operation13 {W)indow} @code{int} {e)xpose} type arg def_cmds.texi(,219) @end deftypeop def_cmds.texi(,220) def_cmds.texi(,221) @deftypeop Operation14 {)Window} @code{int} {)expose} type arg def_cmds.texi(,222) @end deftypeop def_cmds.texi(,223) def_cmds.texi(,224) @deftypeop Operation16 W)indow @code{int} e)xpose type arg def_cmds.texi(,225) @end deftypeop def_cmds.texi(,226) def_cmds.texi(,227) @deftypeop Operation17 )Window @code{int} )expose type arg def_cmds.texi(,228) @end deftypeop def_cmds.texi(,229) def_cmds.texi(,230) @deftypeop Operation18 {W;indow} @code{int} {e;xpose} type arg def_cmds.texi(,231) @end deftypeop def_cmds.texi(,232) def_cmds.texi(,233) @deftypeop Operation19 {;Window} @code{int} {;expose} type arg def_cmds.texi(,234) @end deftypeop def_cmds.texi(,235) def_cmds.texi(,236) @deftypeop Operation20 W;indow @code{int} e;xpose type arg def_cmds.texi(,237) @end deftypeop def_cmds.texi(,238) def_cmds.texi(,239) @deftypeop Operation21 ;Window @code{int} ;expose type arg def_cmds.texi(,240) @end deftypeop def_cmds.texi(,241) def_cmds.texi(,242) @deftypeop Command@code{com} {Window@code{int}} expose@var{exp} def_cmds.texi(,243) @end deftypeop def_cmds.texi(,244) def_cmds.texi(,245) @c deffn def_cmds.texi(,246) @deffn def_cmds.texi(,247) @end deffn def_cmds.texi(,248) def_cmds.texi(,249) @c defvr def_cmds.texi(,250) @defvr def_cmds.texi(,251) @end defvr def_cmds.texi(,252) def_cmds.texi(,253) @c deftypefn def_cmds.texi(,254) @deftypefn def_cmds.texi(,255) @end deftypefn def_cmds.texi(,256) def_cmds.texi(,257) @c deftypeop def_cmds.texi(,258) @deftypeop def_cmds.texi(,259) @end deftypeop def_cmds.texi(,260) def_cmds.texi(,261) @c deftypevr def_cmds.texi(,262) @deftypevr def_cmds.texi(,263) @end deftypevr def_cmds.texi(,264) def_cmds.texi(,265) @c defcv def_cmds.texi(,266) @defcv def_cmds.texi(,267) @end defcv def_cmds.texi(,268) def_cmds.texi(,269) @c deftypecv def_cmds.texi(,270) @deftypecv def_cmds.texi(,271) @end deftypecv def_cmds.texi(,272) def_cmds.texi(,273) @c defop def_cmds.texi(,274) @defop def_cmds.texi(,275) @end defop def_cmds.texi(,276) def_cmds.texi(,277) @c deftp def_cmds.texi(,278) @deftp def_cmds.texi(,279) @end deftp def_cmds.texi(,280) def_cmds.texi(,281) @c deffn def_cmds.texi(,282) @deffn @var{A1} @var{A2} @var{A3} @var{A4} def_cmds.texi(,283) @end deffn def_cmds.texi(,284) def_cmds.texi(,285) @deffn @code{A1} @code{A2} @code{A3} @code{A4} def_cmds.texi(,286) @end deffn def_cmds.texi(,287) def_cmds.texi(,288) @c defvr def_cmds.texi(,289) @defvr @var{A1} @var{A2} @var{A3} @var{A4} def_cmds.texi(,290) @end defvr def_cmds.texi(,291) def_cmds.texi(,292) @defvr @code{A1} @code{A2} @code{A3} @code{A4} def_cmds.texi(,293) @end defvr def_cmds.texi(,294) def_cmds.texi(,295) @c deftypefn def_cmds.texi(,296) @deftypefn @var{A1} @var{A2} @var{A3} @var{A4} @var{A5} def_cmds.texi(,297) @end deftypefn def_cmds.texi(,298) def_cmds.texi(,299) @deftypefn @code{A1} @code{A2} @code{A3} @code{A4} @code{A5} def_cmds.texi(,300) @end deftypefn def_cmds.texi(,301) def_cmds.texi(,302) @c deftypevr def_cmds.texi(,303) @deftypevr @var{A1} @var{A2} @var{A3} @var{A4} @var{A5} def_cmds.texi(,304) @end deftypevr def_cmds.texi(,305) def_cmds.texi(,306) @deftypevr @code{A1} @t{A2} @code{A3} @code{A4} @code{A5} def_cmds.texi(,307) @end deftypevr def_cmds.texi(,308) def_cmds.texi(,309) @c deftp def_cmds.texi(,310) @deftp @var{A1} @var{A2} @var{A3} @var{A4} def_cmds.texi(,311) @end deftp def_cmds.texi(,312) def_cmds.texi(,313) @deftp @code{A1} @code{A2} @code{A3} @code{A4} def_cmds.texi(,314) @end deftp def_cmds.texi(,315) def_cmds.texi(,316) @c defcv def_cmds.texi(,317) @defcv @var{A1} @var{A2} @var{A3} @var{A4} @var{A5} def_cmds.texi(,318) @end defcv def_cmds.texi(,319) def_cmds.texi(,320) @deftp @code{A1} @code{A2} @code{A3} @code{A4} @code{A5} def_cmds.texi(,321) @end deftp def_cmds.texi(,322) def_cmds.texi(,323) @c deftypecv def_cmds.texi(,324) @deftypecv @var{A1} @var{A2} @var{A3} @var{A4} @var{A5} @var{A6} def_cmds.texi(,325) @end deftypecv def_cmds.texi(,326) def_cmds.texi(,327) @deftypecv @code{A1} @code{A2} @option{A3} @code{A4} @code{A5} @code{A6} def_cmds.texi(,328) @end deftypecv def_cmds.texi(,329) def_cmds.texi(,330) @c defop def_cmds.texi(,331) @defop @var{A1} @var{A2} @var{A3} @var{A4} @var{A5} def_cmds.texi(,332) @end defop def_cmds.texi(,333) def_cmds.texi(,334) @defop @code{A1} @code{A2} @code{A3} @code{A4} @code{A5} def_cmds.texi(,335) @end defop def_cmds.texi(,336) def_cmds.texi(,337) @c deftypeop def_cmds.texi(,338) @deftypeop @var{A1} @var{A2} @var{A3} @var{A4} @var{A5} @var{A6} def_cmds.texi(,339) @end deftypeop def_cmds.texi(,340) def_cmds.texi(,341) @deftypeop @code{A1} @code{A2} @code{A3} @code{A4} @code{A5} @code{A6} def_cmds.texi(,342) @end deftypeop def_cmds.texi(,343) def_cmds.texi(,344) @printindex vr def_cmds.texi(,345) @printindex fn def_cmds.texi(,346) def_cmds.texi(,347) @bye texi2html-1.82/test/formatting/res/macro_in_menu/0000755000175000017500000000000011264347123023770 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/macro_in_menu/macro_in_menu.20000644000175000017500000000000011264347123026654 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/macro_in_menu/macro_in_menu.html0000644000175000017500000000470111264347123027473 0ustar flichtenheldflichtenheld Untitled Document

    Top

    Some text.

    After menu


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/texi_commands_in_ifset/0000755000175000017500000000000011264347123025667 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_commands_in_ifset/commands_in_ifset.passtexi0000644000175000017500000000661111264347123033136 0ustar flichtenheldflichtenheldcommands_in_ifset.texi(,2) @setfilename commands_in_ifset.info commands_in_ifset.texi(,3) @node Top commands_in_ifset.texi(,4) @top Top section commands_in_ifset.texi(,5) @c commands_in_ifset.texi(,6) @c test a lot of constructs in @ifset, imbricated ifset, macro expansion commands_in_ifset.texi(,7) @c in ifset. The ifset are not set. Otherwise there would be a lot of commands_in_ifset.texi(,8) @c syntax errors. commands_in_ifset.texi(,9) commands_in_ifset.texi(,10) @c test @definfoenclose and @documentencoding in ifset commands_in_ifset.texi(,11) commands_in_ifset.texi(,17) commands_in_ifset.texi(,18) @strong{text} commands_in_ifset.texi(,19) commands_in_ifset.texi(,20) @c test all the regular constructs in ifset commands_in_ifset.texi(,21) commands_in_ifset.texi(,466) commands_in_ifset.texi(,467) @c test @copying in ifset commands_in_ifset.texi(,468) commands_in_ifset.texi(,474) commands_in_ifset.texi(,478) commands_in_ifset.texi(,479) @c test indices, @contents and @bye in ifset commands_in_ifset.texi(,480) commands_in_ifset.texi(,516) commands_in_ifset.texi(,517) @c test that @end ifset is ignored when appearing in @ignore commands_in_ifset.texi(,518) commands_in_ifset.texi(,525) commands_in_ifset.texi(,526) @c test that lone braces are ignored in @ifset commands_in_ifset.texi(,527) commands_in_ifset.texi(,531) commands_in_ifset.texi(,535) commands_in_ifset.texi(,536) @c test that @end ifset is ignored when appearing in @verb, @verbatim, commands_in_ifset.texi(,537) @c html, commands_in_ifset.texi(,538) commands_in_ifset.texi(,544) commands_in_ifset.texi(,550) commands_in_ifset.texi(,556) commands_in_ifset.texi(,557) @c test that there is no error with a @table, @example, @deffn and commands_in_ifset.texi(,558) @c @itemize opening in @ifset commands_in_ifset.texi(,559) commands_in_ifset.texi(,563) commands_in_ifset.texi(,567) commands_in_ifset.texi(,571) commands_in_ifset.texi(,576) commands_in_ifset.texi(,577) @c test that there is no error with a @table, @example, @deffn and commands_in_ifset.texi(,578) @c @itemize end in @ifset commands_in_ifset.texi(,579) commands_in_ifset.texi(,583) commands_in_ifset.texi(,587) commands_in_ifset.texi(,591) commands_in_ifset.texi(,595) commands_in_ifset.texi(,596) @c test that @-command opening is ignored when appearing in @ignore commands_in_ifset.texi(,597) commands_in_ifset.texi(,601) commands_in_ifset.texi(,602) @c test that @deffnx is ignored in @ifset commands_in_ifset.texi(,603) commands_in_ifset.texi(,607) commands_in_ifset.texi(,608) @c test nested ifset commands_in_ifset.texi(,609) commands_in_ifset.texi(,617) commands_in_ifset.texi(,618) @c test that some wrong constructs are rightly ignored in nested @ifset commands_in_ifset.texi(,619) commands_in_ifset.texi(,643) commands_in_ifset.texi(,644) @c test for @node in @ifset commands_in_ifset.texi(,645) commands_in_ifset.texi(,649) commands_in_ifset.texi(,650) @c test for @ifset without arg in @ifset commands_in_ifset.texi(,651) commands_in_ifset.texi(,658) commands_in_ifset.texi(,659) @c define a macro and call it within a @ifset commands_in_ifset.texi(,660) commands_in_ifset.texi(,1139) commands_in_ifset.texi(,1140) @c now call the macro within @ifset commands_in_ifset.texi(,1141) commands_in_ifset.texi(,1147) commands_in_ifset.texi(,1151) commands_in_ifset.texi(,1157) commands_in_ifset.texi(,1158) Line 1158 Before bye commands_in_ifset.texi(,1159) @bye texi2html-1.82/test/formatting/res/texi_commands_in_ifset/commands_in_ifset.20000644000175000017500000002715711264347123031447 0ustar flichtenheldflichtenheld# Popped `code' in ifset/ifclear # Popped `asis' in ifset/ifclear # Popped `strong' in ifset/ifclear # Popped `kbd' in ifset/ifclear # Popped `"' in ifset/ifclear # Popped `dotless' in ifset/ifclear # Popped `'' in ifset/ifclear # Popped `dotless' in ifset/ifclear # Popped `dotless' in ifset/ifclear # Popped `dotless' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `TeX' in ifset/ifclear # Popped `LaTeX' in ifset/ifclear # Popped `bullet' in ifset/ifclear # Popped `copyright' in ifset/ifclear # Popped `dots' in ifset/ifclear # Popped `enddots' in ifset/ifclear # Popped `equiv' in ifset/ifclear # Popped `error' in ifset/ifclear # Popped `expansion' in ifset/ifclear # Popped `minus' in ifset/ifclear # Popped `point' in ifset/ifclear # Popped `print' in ifset/ifclear # Popped `result' in ifset/ifclear # Popped `today' in ifset/ifclear # Popped `aa' in ifset/ifclear # Popped `AA' in ifset/ifclear # Popped `ae' in ifset/ifclear # Popped `oe' in ifset/ifclear # Popped `AE' in ifset/ifclear # Popped `OE' in ifset/ifclear # Popped `o' in ifset/ifclear # Popped `O' in ifset/ifclear # Popped `ss' in ifset/ifclear # Popped `l' in ifset/ifclear # Popped `L' in ifset/ifclear # Popped `exclamdown' in ifset/ifclear # Popped `questiondown' in ifset/ifclear # Popped `pounds' in ifset/ifclear # Popped `registeredsymbol' in ifset/ifclear # Popped `ordf' in ifset/ifclear # Popped `ordm' in ifset/ifclear # Popped `comma' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `comma' in ifset/ifclear # Popped `enddots' in ifset/ifclear # Popped `acronym' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `acronym' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `asis' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `b' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `cite' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `command' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ctrl' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `dfn' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `dmn' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `email' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `email' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `email' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `emph' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `env' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `file' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `i' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `kbd' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `key' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `math' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `option' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `r' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `samp' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `sc' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `strong' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `t' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `titlefont' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `indicateurl' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `uref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `uref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `uref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `url' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `url' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `url' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `var' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `verb' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `w' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `H' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `H' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `dotaccent' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `dotaccent' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ringaccent' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ringaccent' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `tieaccent' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `tieaccent' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `u' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `u' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ubaraccent' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ubaraccent' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `udotaccent' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `udotaccent' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `v' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `v' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `,' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `,' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `dotless' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `dotless' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `footnote' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `footnote' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `image' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `image' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `image' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `image' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `image' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `image' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `image' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `image' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `verb' in ifset/ifclear # Popped `verb' in ifset/ifclear # Popped `image' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `file' in ifset/ifclear # Popped `file' in ifset/ifclear # Popped `image' in ifset/ifclear # Popped `var' in ifset/ifclear # Popped `' in ifset/ifclear # Popped `' in ifset/ifclear # Popped `' in ifset/ifclear # Popped `' in ifset/ifclear # Popped `' in ifset/ifclear # Popped `' in ifset/ifclear # Popped `' in ifset/ifclear # Popped `' in ifset/ifclear # Popped `b' in ifset/ifclear # Popped `samp' in ifset/ifclear # Popped `b' in ifset/ifclear # Popped `samp' in ifset/ifclear # Popped `b' in ifset/ifclear # Popped `' in ifset/ifclear # Popped `' in ifset/ifclear # Popped `deffnx' in ifset/ifclear # Popped `deffnx' in ifset/ifclear # Popped `deffnx' in ifset/ifclear # Popped `' in ifset/ifclear # Popped `deffnx' in ifset/ifclear # Popped `deffnx' in ifset/ifclear # Popped `' in ifset/ifclear # Popped `deffnx' in ifset/ifclear # Popped `deffnx' in ifset/ifclear # Popped `' in ifset/ifclear # Popped `' in ifset/ifclear # Popped `ifvalue' in ifset/ifclear # Popped `' in ifset/ifclear # Popped `' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `xref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `pxref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `inforef' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `inforef' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `inforef' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `inforef' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `inforef' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `inforef' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `inforef' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `inforef' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `inforef' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `inforef' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `inforef' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `inforef' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `comma' in ifset/ifclear # Popped `comma' in ifset/ifclear # Popped `comma' in ifset/ifclear # Popped `comma' in ifset/ifclear # Popped `comma' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `code' in ifset/ifclear # Popped `comma' in ifset/ifclear # Popped `ref' in ifset/ifclear # Popped `ifvalue' in ifset/ifclear # Popped `verb' in ifset/ifclear # Popped `ifvalue' in ifset/ifclear # Popped `verb' in ifset/ifclear texi2html-1.82/test/formatting/res/texi_commands_in_ifset/commands_in_ifset.texi0000644000175000017500000000234211264347123032244 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename commands_in_ifset.info @node Top @top Top section @c @c test a lot of constructs in @ifset, imbricated ifset, macro expansion @c in ifset. The ifset are not set. Otherwise there would be a lot of @c syntax errors. @c test @definfoenclose and @documentencoding in ifset @strong{text} @c test all the regular constructs in ifset @c test @copying in ifset @c test indices, @contents and @bye in ifset @c test that @end ifset is ignored when appearing in @ignore @c test that lone braces are ignored in @ifset @c test that @end ifset is ignored when appearing in @verb, @verbatim, @c html, @c test that there is no error with a @table, @example, @deffn and @c @itemize opening in @ifset @c test that there is no error with a @table, @example, @deffn and @c @itemize end in @ifset @c test that @-command opening is ignored when appearing in @ignore @c test that @deffnx is ignored in @ifset @c test nested ifset @c test that some wrong constructs are rightly ignored in nested @ifset @c test for @node in @ifset @c test for @ifset without arg in @ifset @c define a macro and call it within a @ifset @c now call the macro within @ifset Line 1158 Before bye @bye texi2html-1.82/test/formatting/res/texi_commands_in_ifset/commands_in_ifset.passfirst0000644000175000017500000000661111264347123033314 0ustar flichtenheldflichtenheldcommands_in_ifset.texi(,2) @setfilename commands_in_ifset.info commands_in_ifset.texi(,3) @node Top commands_in_ifset.texi(,4) @top Top section commands_in_ifset.texi(,5) @c commands_in_ifset.texi(,6) @c test a lot of constructs in @ifset, imbricated ifset, macro expansion commands_in_ifset.texi(,7) @c in ifset. The ifset are not set. Otherwise there would be a lot of commands_in_ifset.texi(,8) @c syntax errors. commands_in_ifset.texi(,9) commands_in_ifset.texi(,10) @c test @definfoenclose and @documentencoding in ifset commands_in_ifset.texi(,11) commands_in_ifset.texi(,17) commands_in_ifset.texi(,18) @strong{text} commands_in_ifset.texi(,19) commands_in_ifset.texi(,20) @c test all the regular constructs in ifset commands_in_ifset.texi(,21) commands_in_ifset.texi(,466) commands_in_ifset.texi(,467) @c test @copying in ifset commands_in_ifset.texi(,468) commands_in_ifset.texi(,474) commands_in_ifset.texi(,478) commands_in_ifset.texi(,479) @c test indices, @contents and @bye in ifset commands_in_ifset.texi(,480) commands_in_ifset.texi(,516) commands_in_ifset.texi(,517) @c test that @end ifset is ignored when appearing in @ignore commands_in_ifset.texi(,518) commands_in_ifset.texi(,525) commands_in_ifset.texi(,526) @c test that lone braces are ignored in @ifset commands_in_ifset.texi(,527) commands_in_ifset.texi(,531) commands_in_ifset.texi(,535) commands_in_ifset.texi(,536) @c test that @end ifset is ignored when appearing in @verb, @verbatim, commands_in_ifset.texi(,537) @c html, commands_in_ifset.texi(,538) commands_in_ifset.texi(,544) commands_in_ifset.texi(,550) commands_in_ifset.texi(,556) commands_in_ifset.texi(,557) @c test that there is no error with a @table, @example, @deffn and commands_in_ifset.texi(,558) @c @itemize opening in @ifset commands_in_ifset.texi(,559) commands_in_ifset.texi(,563) commands_in_ifset.texi(,567) commands_in_ifset.texi(,571) commands_in_ifset.texi(,576) commands_in_ifset.texi(,577) @c test that there is no error with a @table, @example, @deffn and commands_in_ifset.texi(,578) @c @itemize end in @ifset commands_in_ifset.texi(,579) commands_in_ifset.texi(,583) commands_in_ifset.texi(,587) commands_in_ifset.texi(,591) commands_in_ifset.texi(,595) commands_in_ifset.texi(,596) @c test that @-command opening is ignored when appearing in @ignore commands_in_ifset.texi(,597) commands_in_ifset.texi(,601) commands_in_ifset.texi(,602) @c test that @deffnx is ignored in @ifset commands_in_ifset.texi(,603) commands_in_ifset.texi(,607) commands_in_ifset.texi(,608) @c test nested ifset commands_in_ifset.texi(,609) commands_in_ifset.texi(,617) commands_in_ifset.texi(,618) @c test that some wrong constructs are rightly ignored in nested @ifset commands_in_ifset.texi(,619) commands_in_ifset.texi(,643) commands_in_ifset.texi(,644) @c test for @node in @ifset commands_in_ifset.texi(,645) commands_in_ifset.texi(,649) commands_in_ifset.texi(,650) @c test for @ifset without arg in @ifset commands_in_ifset.texi(,651) commands_in_ifset.texi(,658) commands_in_ifset.texi(,659) @c define a macro and call it within a @ifset commands_in_ifset.texi(,660) commands_in_ifset.texi(,1139) commands_in_ifset.texi(,1140) @c now call the macro within @ifset commands_in_ifset.texi(,1141) commands_in_ifset.texi(,1147) commands_in_ifset.texi(,1151) commands_in_ifset.texi(,1157) commands_in_ifset.texi(,1158) Line 1158 Before bye commands_in_ifset.texi(,1159) @bye texi2html-1.82/test/formatting/res/texi_punctuation/0000755000175000017500000000000011264347123024557 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_punctuation/punctuation.passtexi0000644000175000017500000000072611264347123030717 0ustar flichtenheldflichtenheldpunctuation.texi(,2) punctuation.texi(,3) @setfilename punctuation.info punctuation.texi(,4) punctuation.texi(,5) @node Top punctuation.texi(,6) @top Punctuation commands. punctuation.texi(,7) punctuation.texi(,8) foo vs.@: bar. punctuation.texi(,9) colon :@:And something else. punctuation.texi(,10) semi colon ;@:. punctuation.texi(,11) And ? ?@:. punctuation.texi(,12) Now ! !@:@@ punctuation.texi(,13) but , ,@: punctuation.texi(,14) punctuation.texi(,15) @bye texi2html-1.82/test/formatting/res/texi_punctuation/punctuation.20000644000175000017500000000000011264347123027201 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_punctuation/punctuation.texi0000644000175000017500000000031211264347123030017 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename punctuation.info @node Top @top Punctuation commands. foo vs.@: bar. colon :@:And something else. semi colon ;@:. And ? ?@:. Now ! !@:@@ but , ,@: @bye texi2html-1.82/test/formatting/res/texi_punctuation/punctuation.passfirst0000644000175000017500000000072611264347123031075 0ustar flichtenheldflichtenheldpunctuation.texi(,2) punctuation.texi(,3) @setfilename punctuation.info punctuation.texi(,4) punctuation.texi(,5) @node Top punctuation.texi(,6) @top Punctuation commands. punctuation.texi(,7) punctuation.texi(,8) foo vs.@: bar. punctuation.texi(,9) colon :@:And something else. punctuation.texi(,10) semi colon ;@:. punctuation.texi(,11) And ? ?@:. punctuation.texi(,12) Now ! !@:@@ punctuation.texi(,13) but , ,@: punctuation.texi(,14) punctuation.texi(,15) @bye texi2html-1.82/test/formatting/res/detailmenus_simple/0000755000175000017500000000000011264347123025040 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/detailmenus_simple/detailmenus.html0000644000175000017500000004405111264347123030244 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Top


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. chapter


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 A section


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.1 subsection “simple-double–three—four—-”


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.1.1 subsubsection


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. chapter 2


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. chapter 3


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4. chapter 4


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    Short Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/detailmenus_simple/detailmenus.20000644000175000017500000000050611264347123027436 0ustar flichtenheldflichtenheld** Node following `chapter' in menu `description' and in sectionning `chapter2' differ ** `chapter2' doesn't appear in menus ** `Top' is up for `chapter2', but has no menu entry for this node ** No node following `chapter2' in menu, but `chapter3' follows in sectionning *** Unknown node in menu entry `description' (l. 13) texi2html-1.82/test/formatting/res/detailmenus/0000755000175000017500000000000011264347123023467 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/detailmenus/detailmenus.html0000644000175000017500000004731111264347123026675 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Top


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. chapter


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 A section


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.1 subsection “simple-double–three—four—-”


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.1.1 subsubsection


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. chapter 2


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. chapter 3


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4. chapter 4


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    Short Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/detailmenus/detailmenus.20000644000175000017500000000050611264347123026065 0ustar flichtenheldflichtenheld** Node following `chapter' in menu `description' and in sectionning `chapter2' differ ** `chapter2' doesn't appear in menus ** `Top' is up for `chapter2', but has no menu entry for this node ** No node following `chapter2' in menu, but `chapter3' follows in sectionning *** Unknown node in menu entry `description' (l. 13) texi2html-1.82/test/formatting/res/texi_macro_in_menu/0000755000175000017500000000000011264347123025021 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_macro_in_menu/macro_in_menu.passtexi0000644000175000017500000000150511264347123031417 0ustar flichtenheldflichtenheldmacro_in_menu.texi(,2) macro_in_menu.texi(,8) macro_in_menu.texi(,9) @node Top macro_in_menu.texi(,10) macro_in_menu.texi(,11) @menu macro_in_menu.texi(themacro,12) * (gcc):: macro_in_menu.texi(themacro,12) @html macro_in_menu.texi(themacro,12) bidule macro_in_menu.texi(themacro,12) @end html macro_in_menu.texi(,13) @end menu macro_in_menu.texi(,14) macro_in_menu.texi(,15) Some text. macro_in_menu.texi(,16) macro_in_menu.texi(,17) @menu macro_in_menu.texi(,18) * (manual):: desc macro_in_menu.texi(,19) comment macro_in_menu.texi(,20) * (info):: before verbatim @verbatim macro_in_menu.texi(,21) some @ verb{' atim macro_in_menu.texi(,22) * (texinfo):: in @ verbatim macro_in_menu.texi(,23) @end verbatim macro_in_menu.texi(,24) @end menu macro_in_menu.texi(,25) After menu macro_in_menu.texi(,26) macro_in_menu.texi(,27) @bye texi2html-1.82/test/formatting/res/texi_macro_in_menu/macro_in_menu.20000644000175000017500000000000011264347123027705 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_macro_in_menu/macro_in_menu.texi0000644000175000017500000000041011264347123030522 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top @menu * (gcc):: @html bidule @end html @end menu Some text. @menu * (manual):: desc comment * (info):: before verbatim @verbatim some @ verb{' atim * (texinfo):: in @ verbatim @end verbatim @end menu After menu @bye texi2html-1.82/test/formatting/res/texi_macro_in_menu/macro_in_menu.passfirst0000644000175000017500000000144511264347123031600 0ustar flichtenheldflichtenheldmacro_in_menu.texi(,2) macro_in_menu.texi(,8) macro_in_menu.texi(,9) @node Top macro_in_menu.texi(,10) macro_in_menu.texi(,11) @menu macro_in_menu.texi(themacro,12) * (gcc):: @html macro_in_menu.texi(themacro,12) bidule macro_in_menu.texi(themacro,12) @end html macro_in_menu.texi(,13) @end menu macro_in_menu.texi(,14) macro_in_menu.texi(,15) Some text. macro_in_menu.texi(,16) macro_in_menu.texi(,17) @menu macro_in_menu.texi(,18) * (manual):: desc macro_in_menu.texi(,19) comment macro_in_menu.texi(,20) * (info):: before verbatim @verbatim macro_in_menu.texi(,21) some @ verb{' atim macro_in_menu.texi(,22) * (texinfo):: in @ verbatim macro_in_menu.texi(,23) @end verbatim macro_in_menu.texi(,24) @end menu macro_in_menu.texi(,25) After menu macro_in_menu.texi(,26) macro_in_menu.texi(,27) @bye texi2html-1.82/test/formatting/res/table_in_table_item/0000755000175000017500000000000011264347123025117 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/table_in_table_item/table_in_table_item.20000644000175000017500000000000011264347123031132 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/table_in_table_item/table_in_table_item.html0000644000175000017500000000573311264347123031757 0ustar flichtenheldflichtenheld Untitled Document

    Test table nested in table item

    item
    in nested table item

    in nested table line

    in table line

    And in code

    item
    in table in table item

    in nested table line

    and in preformatted

     
    item in preformatted
    in table in table item in preformatted
       in nested table line in preformatted
       

    and in preformatted in code

     
    item in preformatted
       
    in table in table item in preformatted
       in nested table line in preformatted
       


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/multitables/0000755000175000017500000000000011264347123023502 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/multitables/multitables.html0000644000175000017500000000447711264347123026731 0ustar flichtenheldflichtenheld Untitled Document

    Test multitables

    trucbidule
    begin item

    new paragraph in item.

    begin tab

    new paragraph in tab.

     
    truc
    bidule example
    begin item example
    
    new paragraph in item. example
    begin tab example
    
    new paragraph in tab. example

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/multitables/multitables.20000644000175000017500000000000011264347123026100 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/tex/0000755000175000017500000000000011264347123021755 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/tex/tex_l2h.tex0000644000175000017500000000210511264347123024042 0ustar flichtenheldflichtenheld% This document was automatically generated by the l2h extenstion of texi2html % DO NOT EDIT !!! \documentclass{article} \usepackage{html} \begin{document} \begin{rawhtml} \end{rawhtml} some $$ \chi^2 = \sum_{i=1}^N \left(y_i - (a + b x_i) \over \sigma_i\right)^2 $$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} some tex \TeX \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} ${x^i}\over{\tan y}$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $a @\ b$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $@code{math code}$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $ \underline{@code{math \hbox{ code }}} \sum_{i}{\underline{f}}$ \begin{rawhtml} \end{rawhtml} \end{document} texi2html-1.82/test/formatting/res/tex/tex_l2h_labels.pl0000644000175000017500000000021011264347123025172 0ustar flichtenheldflichtenheld# LaTeX2HTML # Associate labels original text with physical files. 1; # LaTeX2HTML # labels from external_latex_labels array. 1; texi2html-1.82/test/formatting/res/tex/tex_l2h_images.pl0000644000175000017500000000226611264347123025212 0ustar flichtenheldflichtenheld# LaTeX2HTML # Associate images original text with physical files. $key = q/{displaymath}chi^2=sum_{i=1}^Nleft(y_i-(a+bx_i)oversigma_iright)^2{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}\chi^2 = \sum_{i=1}^N
\left(y_i - (a + b x_i)
\over \sigma_i\right)^2 \end{displaymath}|; $key = q/@code{mathcode};MSF=1.5;AAT/; $cached_env_img{$key} = q|$@code{math code}$|; $key = q/{x^i}over{tany};MSF=1.5;AAT/; $cached_env_img{$key} = q|${x^i}\over{\tan y}$|; $key = q/a@b;MSF=1.5;AAT/; $cached_env_img{$key} = q|$a @ b$|; $key = q/underline{@code{mathhbox{code}}}sum_{i}{underline{f}};MSF=1.5;AAT/; $cached_env_img{$key} = q|$ \underline{@code{math \hbox{ code }}} \sum_{i}{\underline{f}}$|; 1; texi2html-1.82/test/formatting/res/tex/tex_l2h_images.tex0000644000175000017500000001536111264347123025377 0ustar flichtenheldflichtenheld\batchmode \documentclass{article} \RequirePackage{ifthen} \usepackage{html} \usepackage[dvips]{color} \pagecolor[gray]{.7} \usepackage[]{inputenc} \makeatletter \makeatletter \count@=\the\catcode`\_ \catcode`\_=8 \newenvironment{tex2html_wrap}{}{}% \catcode`\<=12\catcode`\_=\count@ \newcommand{\providedcommand}[1]{\expandafter\providecommand\csname #1\endcsname}% \newcommand{\renewedcommand}[1]{\expandafter\providecommand\csname #1\endcsname{}% \expandafter\renewcommand\csname #1\endcsname}% \newcommand{\newedenvironment}[1]{\newenvironment{#1}{}{}\renewenvironment{#1}}% \let\newedcommand\renewedcommand \let\renewedenvironment\newedenvironment \makeatother \let\mathon=$ \let\mathoff=$ \ifx\AtBeginDocument\undefined \newcommand{\AtBeginDocument}[1]{}\fi \newbox\sizebox \setlength{\hoffset}{0pt}\setlength{\voffset}{0pt} \addtolength{\textheight}{\footskip}\setlength{\footskip}{0pt} \addtolength{\textheight}{\topmargin}\setlength{\topmargin}{0pt} \addtolength{\textheight}{\headheight}\setlength{\headheight}{0pt} \addtolength{\textheight}{\headsep}\setlength{\headsep}{0pt} \setlength{\textwidth}{451pt} \setlength{\textheight}{554pt} \newwrite\lthtmlwrite \makeatletter \let\realnormalsize=\normalsize \global\topskip=2sp \def\preveqno{}\let\real@float=\@float \let\realend@float=\end@float \def\@float{\let\@savefreelist\@freelist\real@float} \def\liih@math{\ifmmode$\else\bad@math\fi} \def\end@float{\realend@float\global\let\@freelist\@savefreelist} \let\real@dbflt=\@dbflt \let\end@dblfloat=\end@float \let\@largefloatcheck=\relax \let\if@boxedmulticols=\iftrue \def\@dbflt{\let\@savefreelist\@freelist\real@dbflt} \def\adjustnormalsize{\def\normalsize{\mathsurround=0pt \realnormalsize \parindent=0pt\abovedisplayskip=0pt\belowdisplayskip=0pt}% \def\phantompar{\csname par\endcsname}\normalsize}% \def\lthtmltypeout#1{{\let\protect\string \immediate\write\lthtmlwrite{#1}}}% \newcommand\lthtmlhboxmathA{\adjustnormalsize\setbox\sizebox=\hbox\bgroup\kern.05em }% \newcommand\lthtmlhboxmathB{\adjustnormalsize\setbox\sizebox=\hbox to\hsize\bgroup\hfill }% \newcommand\lthtmlvboxmathA{\adjustnormalsize\setbox\sizebox=\vbox\bgroup % \let\ifinner=\iffalse \let\)\liih@math }% \newcommand\lthtmlboxmathZ{\@next\next\@currlist{}{\def\next{\voidb@x}}% \expandafter\box\next\egroup}% \newcommand\lthtmlmathtype[1]{\gdef\lthtmlmathenv{#1}}% \newcommand\lthtmllogmath{\dimen0\ht\sizebox \advance\dimen0\dp\sizebox \ifdim\dimen0>.95\vsize \lthtmltypeout{% *** image for \lthtmlmathenv\space is too tall at \the\dimen0, reducing to .95 vsize ***}% \ht\sizebox.95\vsize \dp\sizebox\z@ \fi \lthtmltypeout{l2hSize % :\lthtmlmathenv:\the\ht\sizebox::\the\dp\sizebox::\the\wd\sizebox.\preveqno}}% \newcommand\lthtmlfigureA[1]{\let\@savefreelist\@freelist \lthtmlmathtype{#1}\lthtmlvboxmathA}% \newcommand\lthtmlpictureA{\bgroup\catcode`\_=8 \lthtmlpictureB}% \newcommand\lthtmlpictureB[1]{\lthtmlmathtype{#1}\egroup \let\@savefreelist\@freelist \lthtmlhboxmathB}% \newcommand\lthtmlpictureZ[1]{\hfill\lthtmlfigureZ}% \newcommand\lthtmlfigureZ{\lthtmlboxmathZ\lthtmllogmath\copy\sizebox \global\let\@freelist\@savefreelist}% \newcommand\lthtmldisplayA{\bgroup\catcode`\_=8 \lthtmldisplayAi}% \newcommand\lthtmldisplayAi[1]{\lthtmlmathtype{#1}\egroup\lthtmlvboxmathA}% \newcommand\lthtmldisplayB[1]{\edef\preveqno{(\theequation)}% \lthtmldisplayA{#1}\let\@eqnnum\relax}% \newcommand\lthtmldisplayZ{\lthtmlboxmathZ\lthtmllogmath\lthtmlsetmath}% \newcommand\lthtmlinlinemathA{\bgroup\catcode`\_=8 \lthtmlinlinemathB} \newcommand\lthtmlinlinemathB[1]{\lthtmlmathtype{#1}\egroup\lthtmlhboxmathA \vrule height1.5ex width0pt }% \newcommand\lthtmlinlineA{\bgroup\catcode`\_=8 \lthtmlinlineB}% \newcommand\lthtmlinlineB[1]{\lthtmlmathtype{#1}\egroup\lthtmlhboxmathA}% \newcommand\lthtmlinlineZ{\egroup\expandafter\ifdim\dp\sizebox>0pt % \expandafter\centerinlinemath\fi\lthtmllogmath\lthtmlsetinline} \newcommand\lthtmlinlinemathZ{\egroup\expandafter\ifdim\dp\sizebox>0pt % \expandafter\centerinlinemath\fi\lthtmllogmath\lthtmlsetmath} \newcommand\lthtmlindisplaymathZ{\egroup % \centerinlinemath\lthtmllogmath\lthtmlsetmath} \def\lthtmlsetinline{\hbox{\vrule width.1em \vtop{\vbox{% \kern.1em\copy\sizebox}\ifdim\dp\sizebox>0pt\kern.1em\else\kern.3pt\fi \ifdim\hsize>\wd\sizebox \hrule depth1pt\fi}}} \def\lthtmlsetmath{\hbox{\vrule width.1em\kern-.05em\vtop{\vbox{% \kern.1em\kern0.75 pt\hbox{\hglue.17em\copy\sizebox\hglue0.75 pt}}\kern.3pt% \ifdim\dp\sizebox>0pt\kern.1em\fi \kern0.75 pt% \ifdim\hsize>\wd\sizebox \hrule depth1pt\fi}}} \def\centerinlinemath{% \dimen1=\ifdim\ht\sizebox<\dp\sizebox \dp\sizebox\else\ht\sizebox\fi \advance\dimen1by.5pt \vrule width0pt height\dimen1 depth\dimen1 \dp\sizebox=\dimen1\ht\sizebox=\dimen1\relax} \def\lthtmlcheckvsize{\ifdim\ht\sizebox<\vsize \ifdim\wd\sizebox<\hsize\expandafter\hfill\fi \expandafter\vfill \else\expandafter\vss\fi}% \providecommand{\selectlanguage}[1]{}% \makeatletter \tracingstats = 1 \begin{document} \pagestyle{empty}\thispagestyle{empty}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength hsize=\the\hsize}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength vsize=\the\vsize}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength hoffset=\the\hoffset}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength voffset=\the\voffset}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength topmargin=\the\topmargin}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength topskip=\the\topskip}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength headheight=\the\headheight}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength headsep=\the\headsep}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength parskip=\the\parskip}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength oddsidemargin=\the\oddsidemargin}\lthtmltypeout{}% \makeatletter \if@twoside\lthtmltypeout{latex2htmlLength evensidemargin=\the\evensidemargin}% \else\lthtmltypeout{latex2htmlLength evensidemargin=\the\oddsidemargin}\fi% \lthtmltypeout{}% \makeatother \setcounter{page}{1} \onecolumn % !!! IMAGES START HERE !!! {\newpage\clearpage \lthtmldisplayA{displaymath15}% \begin{displaymath} \chi^2 = \sum_{i=1}^N \left(y_i - (a + b x_i) \over \sigma_i\right)^2 \end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline17}% ${x^i}\over{\tan y}$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline19}% $a @\ b$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline21}% $@code{math code}$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline23}% $ \underline{@code{math \hbox{ code }}} \sum_{i}{\underline{f}}$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} \end{document} texi2html-1.82/test/formatting/res/tex/tex.20000644000175000017500000000007011264347123022635 0ustar flichtenheldflichtenheldtexexpand ** Unknown command `@\' (left as is) (l. 42) texi2html-1.82/test/formatting/res/tex/tex.html0000644000175000017500000000653611264347123023455 0ustar flichtenheldflichtenheld Untitled Document

    Tests

    Now tex on the same line some


    \begin{displaymath}\chi^2 = \sum_{i=1}^N
\left(y_i - (a + b x_i)
\over \sigma_i\right)^2 \end{displaymath}

    bidule Some text one the line following @end tex

    Now tex on the following line, valid fot tex (with @end tex on a line). some

    tex TEX

    Same that @html (but empty following line not ignored).

    Test of @math Here some ${x^i}\over{\tan y}$.

    Maths with protected \: $a @\ b$.

    Maths with code @-command:

    $@code{math code}$

    Maths with code @-command and braces:

    $ \underline{@code{math \hbox{ code }}} \sum_{i}{\underline{f}}$

    @\ outside of math

    @\


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/tex/tex-l2h_cache.pm0000644000175000017500000000327111264347123024724 0ustar flichtenheldflichtenheld $l2h_cache_key = q/$@code{math code}$/; $l2h_cache{$l2h_cache_key} = q| $@code{math code}$|; $l2h_cache_key = q/ some $$ \chi^2 = \sum_{i=1}^N \left(y_i - (a + b x_i) \over \sigma_i\right)^2 $$/; $l2h_cache{$l2h_cache_key} = q| some


    \begin{displaymath}\chi^2 = \sum_{i=1}^N
\left(y_i - (a + b x_i)
\over \sigma_i\right)^2 \end{displaymath}

    |; $l2h_cache_key = q/$a @\ b$/; $l2h_cache{$l2h_cache_key} = q|$a @\ b$|; $l2h_cache_key = q/${x^i}\over{\tan y}$/; $l2h_cache{$l2h_cache_key} = q| ${x^i}\over{\tan y}$|; $l2h_cache_key = q/$ \underline{@code{math \hbox{ code }}} \sum_{i}{\underline{f}}$/; $l2h_cache{$l2h_cache_key} = q| $ \underline{@code{math \hbox{ code }}} \sum_{i}{\underline{f}}$|; $l2h_cache_key = q/ some tex \TeX/; $l2h_cache{$l2h_cache_key} = q| some

    tex TEX|; 1;texi2html-1.82/test/formatting/res/tex/tex_l2h.html0000644000175000017500000000433711264347123024217 0ustar flichtenheldflichtenheld tex_l2h some


    \begin{displaymath}\chi^2 = \sum_{i=1}^N
\left(y_i - (a + b x_i)
\over \sigma_i\right)^2 \end{displaymath}

    some

    tex TEX ${x^i}\over{\tan y}$ $a @\ b$ $@code{math code}$ $ \underline{@code{math \hbox{ code }}} \sum_{i}{\underline{f}}$


    texi2html-1.82/test/formatting/res/texi_def_end_of_line/0000755000175000017500000000000011264347123025265 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_def_end_of_line/def_end_of_line.texi0000644000175000017500000000046511264347123031244 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename def_end_of_line.info @node Top @top Test for end of line protected in definition commands @deffn category deffn_name arguments @ more {args @ with end of line within} with 3 @@ @@@ {one last arg} deffn @end deffn @deffn category2 deffn_name2 arguments2 @ texi2html-1.82/test/formatting/res/texi_def_end_of_line/def_end_of_line.passfirst0000644000175000017500000000077511264347123032315 0ustar flichtenheldflichtenhelddef_end_of_line.texi(,2) @setfilename def_end_of_line.info def_end_of_line.texi(,3) def_end_of_line.texi(,4) @node Top def_end_of_line.texi(,5) @top Test for end of line protected in definition commands def_end_of_line.texi(,6) def_end_of_line.texi(,10) @deffn category deffn_name arguments more {args with end of line within} with 3 @@ @@ {one last arg} def_end_of_line.texi(,11) deffn def_end_of_line.texi(,12) @end deffn def_end_of_line.texi(,13) no file(,) @deffn category2 deffn_name2 arguments2 texi2html-1.82/test/formatting/res/texi_def_end_of_line/def_end_of_line.20000644000175000017500000000000011264347123030415 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_def_end_of_line/def_end_of_line.passtexi0000644000175000017500000000113711264347123032130 0ustar flichtenheldflichtenhelddef_end_of_line.texi(,2) @setfilename def_end_of_line.info def_end_of_line.texi(,3) def_end_of_line.texi(,4) @node Top def_end_of_line.texi(,5) @top Test for end of line protected in definition commands def_end_of_line.texi(,6) def_end_of_line.texi(,7) @deffn category deffn_name arguments @ def_end_of_line.texi(,8) more {args @ def_end_of_line.texi(,9) with end of line within} with 3 @@ @@@ def_end_of_line.texi(,10) {one last arg} def_end_of_line.texi(,11) deffn def_end_of_line.texi(,12) @end deffn def_end_of_line.texi(,13) def_end_of_line.texi(,14) @deffn category2 deffn_name2 arguments2 @ texi2html-1.82/test/formatting/res/images/0000755000175000017500000000000011264347123022422 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/images/images.html0000644000175000017500000000747711264347123024574 0ustar flichtenheldflichtenheld Untitled Document

    top

    Insertcopying

    In copying. f--ile.

    Text in copying. File with @-commands and special characters:

    f@i--le..  a@<"%@  < & @ % "

    .

    And also in alt, and with dimensions:

    alt î–le..  a
<"%@  < & @ % "

    .

    In normal context f--ile.

    On the same line, f---ile, gr--a extension f---ile.

    Image sparated from text:

    f--ile

    And the same, followed by a dot:

    f--ile

    .

    In example:

     
    Text. f---ile with jpeg extension.
    [ f---ile ].
    
    [ f--ile ].
    
    
    File with @-commands and special characters:
    
    [ f@i--le..  a@<"%@  < & @ % "  ].
    
    And also in alt, and with dimensions:
    
    [ alt î–le..  a
    <"%@  < & @ % "  ].
    

    In float. f--ile.

    f--ile

    .

    File with @-commands and special characters:

    f@i--le..  a@<"%@  < & @ % "

    .

    And also in alt, and with dimensions:

    alt î–le..  a
<"%@  < & @ % "

    .


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/images/images.20000644000175000017500000000201411264347123023747 0ustar flichtenheldflichtenheld** no image file for f@i--le.. a@<"%@ < & @ % " , (using f@i--le.. a@<"%@ < & @ % " .ext@i--le.. a@<"%@ < & @ % " ) ** no image file for f@i--le.. a@<"%@ < & @ % " , (using f@i--le.. a@<"%@ < & @ % " .ext@i--le.. a@<"%@ < & @ % " ) ** no image file for f@i--le.. a@<"%@ < & @ % " , (using f@i--le.. a@<"%@ < & @ % " .ext@i--le.. a@<"%@ < & @ % " ) ** no image file for f@i--le.. a@<"%@ < & @ % " , (using f@i--le.. a@<"%@ < & @ % " .ext@i--le.. a@<"%@ < & @ % " ) ** no image file for f---ile, (using f---ile.jpeg) ** no image file for f@i--le.. a@<"%@ < & @ % " , (using f@i--le.. a@<"%@ < & @ % " .ext@i--le.. a@<"%@ < & @ % " ) ** no image file for f@i--le.. a@<"%@ < & @ % " , (using f@i--le.. a@<"%@ < & @ % " .ext@i--le.. a@<"%@ < & @ % " ) ** no image file for f@i--le.. a@<"%@ < & @ % " , (using f@i--le.. a@<"%@ < & @ % " .ext@i--le.. a@<"%@ < & @ % " ) ** no image file for f@i--le.. a@<"%@ < & @ % " , (using f@i--le.. a@<"%@ < & @ % " .ext@i--le.. a@<"%@ < & @ % " ) texi2html-1.82/test/formatting/res/texi_heading/0000755000175000017500000000000011264347123023605 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_heading/heading.20000644000175000017500000000000011264347123025255 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_heading/heading.passtexi0000644000175000017500000000252211264347123026767 0ustar flichtenheldflichtenheldheading.texi(,2) heading.texi(,3) @setfilename headings.info heading.texi(,4) heading.texi(,5) @copying heading.texi(,6) heading.texi(,7) @heading in copying @@ @emph{heading} heading.texi(,8) @cindex cindex copying heading.texi(,9) heading.texi(,10) @subheading second in copying @@ @emph{subheading} heading.texi(,11) @end copying heading.texi(,12) heading.texi(,13) @heading before Top heading.texi(,14) heading.texi(,15) @node Top heading.texi(,16) @top Test headings heading.texi(,17) heading.texi(,18) @heading in top @@ @emph{heading} heading.texi(,19) heading.texi(,20) @chapter A chapter heading.texi(,21) heading.texi(,22) @footnote{ heading.texi(,23) @heading heading in footnote @@ @emph{heading} heading.texi(,24) @cindex heading in footnote heading.texi(,25) @heading second heading in footnote @@ @emph{heading} heading.texi(,26) } heading.texi(,27) heading.texi(,28) First insertcopying: heading.texi(,29) @insertcopying heading.texi(,30) heading.texi(,31) Second insertcopying: heading.texi(,32) @insertcopying heading.texi(,33) heading.texi(,34) @chapter index heading.texi(,35) heading.texi(,36) @printindex cp heading.texi(,37) heading.texi(,38) @quotation heading.texi(,39) heading.texi(,40) @heading in quotation @@ @emph{heading} heading.texi(,41) heading.texi(,42) @end quotation heading.texi(,43) heading.texi(,44) @bye texi2html-1.82/test/formatting/res/texi_heading/heading.passfirst0000644000175000017500000000212111264347123027140 0ustar flichtenheldflichtenheldheading.texi(,2) heading.texi(,3) @setfilename headings.info heading.texi(,4) heading.texi(,12) heading.texi(,13) @heading before Top heading.texi(,14) heading.texi(,15) @node Top heading.texi(,16) @top Test headings heading.texi(,17) heading.texi(,18) @heading in top @@ @emph{heading} heading.texi(,19) heading.texi(,20) @chapter A chapter heading.texi(,21) heading.texi(,22) @footnote{ heading.texi(,23) @heading heading in footnote @@ @emph{heading} heading.texi(,24) @cindex heading in footnote heading.texi(,25) @heading second heading in footnote @@ @emph{heading} heading.texi(,26) } heading.texi(,27) heading.texi(,28) First insertcopying: heading.texi(,29) @insertcopying heading.texi(,30) heading.texi(,31) Second insertcopying: heading.texi(,32) @insertcopying heading.texi(,33) heading.texi(,34) @chapter index heading.texi(,35) heading.texi(,36) @printindex cp heading.texi(,37) heading.texi(,38) @quotation heading.texi(,39) heading.texi(,40) @heading in quotation @@ @emph{heading} heading.texi(,41) heading.texi(,42) @end quotation heading.texi(,43) heading.texi(,44) @bye texi2html-1.82/test/formatting/res/texi_heading/heading.texi0000644000175000017500000000116411264347123026101 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename headings.info @copying @heading in copying @@ @emph{heading} @cindex cindex copying @subheading second in copying @@ @emph{subheading} @end copying @heading before Top @node Top @top Test headings @heading in top @@ @emph{heading} @chapter A chapter @footnote{ @heading heading in footnote @@ @emph{heading} @cindex heading in footnote @heading second heading in footnote @@ @emph{heading} } First insertcopying: @insertcopying Second insertcopying: @insertcopying @chapter index @printindex cp @quotation @heading in quotation @@ @emph{heading} @end quotation @bye texi2html-1.82/test/formatting/res/menus_simple/0000755000175000017500000000000011264347123023655 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/menus_simple/menus.html0000644000175000017500000004331311264347123025676 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Top

    Text.

    - item

    Some text.

    some @ verb{' atim
    * (texinfo):: in @ verbatim
    
    

    After menu

    item

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. chapter

    (1)

     

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 A section


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.1 subsection “simple-double–three—four—-”

     
    • subsubsection::
    Menu comment
    
    • a description:(manual) other manual node.   Chapter 2
    


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.1.1 subsubsection


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. chapter 2

     
    • section in chapter 2:: in description 
    in cartouche
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.1 section in chapter 2


    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)

    in footnote


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    Short Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/menus_simple/menus.20000644000175000017500000000000011264347123025055 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/index_in_item_line_table/0000755000175000017500000000000011264347123026146 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/index_in_item_line_table/index_in_item_line_table.20000644000175000017500000000000011264347123033210 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/index_in_item_line_table/index_in_item_line_table.html0000644000175000017500000000417511264347123034034 0ustar flichtenheldflichtenheld Untitled Document

    test index entries in @item @table

    opt

    More text

    nopt

    Even more


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/texi_menus/0000755000175000017500000000000011264347123023335 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_menus/menus.20000644000175000017500000000000011264347123024535 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_menus/menus.passtexi0000644000175000017500000000636711264347123026262 0ustar flichtenheldflichtenheldmenus.texi(,2) @comment %**start of header menus.texi(,3) @setfilename menus.info menus.texi(,4) menus.texi(,5) @node Top menus.texi(,6) @top Top menus.texi(,7) menus.texi(,8) @menu menus.texi(,9) * chapter:: chapter menus.texi(,10) menus.texi(,11) Menu comment menus.texi(,12) menus.texi(,13) * description:chapter2, Chapter 2 menus.texi(,14) @end menu menus.texi(,15) menus.texi(,16) Text. menus.texi(,17) menus.texi(,18) @menu menus.texi(,19) * (gcc):: text @table @minus menus.texi(,20) @item item menus.texi(,21) table line menus.texi(,22) @end table menus.texi(,23) @end menu menus.texi(,24) menus.texi(,25) Some text. menus.texi(,26) menus.texi(,27) @menu menus.texi(,28) * (manual):: desc menus.texi(,29) comment menus.texi(,31) * (info):: before verbatim @verbatim menus.texi(,32) some @ verb{' atim menus.texi(,33) * (texinfo):: in @ verbatim menus.texi(,34) menus.texi(,35) @end verbatim menus.texi(,36) * (manual2):: $@html menus.texi(,37) menus.texi(,38) menus.texi(,39) @end html menus.texi(,41) Log $ menus.texi(,42) * (truc):: @acronym{description menus.texi(,43) acronym} menus.texi(,44) @end menu menus.texi(,45) After menu menus.texi(,46) menus.texi(,47) @menu menus.texi(,48) * (manual):: @table @asis menus.texi(,49) @item item menus.texi(,51) menus.texi(,52) * (node):: menus.texi(,53) menu comment ? menus.texi(,54) * (node2):: description ? menus.texi(,55) description continue ? menus.texi(,56) comment. menus.texi(,58) @end table menus.texi(,59) @end menu menus.texi(,60) menus.texi(,61) @node chapter menus.texi(,62) @chapter chapter menus.texi(,63) menus.texi(,64) @footnote{in footnote} menus.texi(,65) menus.texi(,66) @format menus.texi(,67) @menu menus.texi(,68) * s--ect@comma{}ion:: s--ect@comma{}ion menus.texi(,69) menus.texi(,70) Menu comment menus.texi(,71) ``simple-double--three---four----''@* menus.texi(,72) menus.texi(,73) @end menu menus.texi(,74) @end format menus.texi(,75) menus.texi(,76) @node s--ect@comma{}ion menus.texi(,77) @section A section menus.texi(,78) menus.texi(,79) @menu menus.texi(,80) * subsection ``simple-double--three---four----'':: menus.texi(,81) @end menu menus.texi(,82) menus.texi(,83) @node subsection ``simple-double--three---four----'' menus.texi(,84) @subsection subsection ``simple-double--three---four----'' menus.texi(,85) menus.texi(,86) @menu menus.texi(,87) @example menus.texi(,89) * subsubsection:: menus.texi(,90) Menu comment menus.texi(,91) menus.texi(,92) * a description:(manual) other manual node. Chapter 2 menus.texi(,94) @end example menus.texi(,95) @end menu menus.texi(,96) menus.texi(,97) @anchor{anchor} menus.texi(,98) menus.texi(,100) @node subsubsection menus.texi(,101) @subsubsection subsubsection menus.texi(,103) menus.texi(,104) @node chapter2 menus.texi(,105) @chapter chapter 2 menus.texi(,106) menus.texi(,107) @example menus.texi(,108) @menu menus.texi(,109) * section in chapter 2:: in description @cartouche menus.texi(,110) in cartouche menus.texi(,111) @end cartouche menus.texi(,112) @end menu menus.texi(,113) @end example menus.texi(,114) menus.texi(,115) @node section in chapter 2 menus.texi(,116) @section section in chapter 2 menus.texi(,117) menus.texi(,118) @contents menus.texi(,119) @shortcontents menus.texi(,120) menus.texi(,121) @bye texi2html-1.82/test/formatting/res/texi_menus/menus.passfirst0000644000175000017500000000636711264347123026440 0ustar flichtenheldflichtenheldmenus.texi(,2) @comment %**start of header menus.texi(,3) @setfilename menus.info menus.texi(,4) menus.texi(,5) @node Top menus.texi(,6) @top Top menus.texi(,7) menus.texi(,8) @menu menus.texi(,9) * chapter:: chapter menus.texi(,10) menus.texi(,11) Menu comment menus.texi(,12) menus.texi(,13) * description:chapter2, Chapter 2 menus.texi(,14) @end menu menus.texi(,15) menus.texi(,16) Text. menus.texi(,17) menus.texi(,18) @menu menus.texi(,19) * (gcc):: text @table @minus menus.texi(,20) @item item menus.texi(,21) table line menus.texi(,22) @end table menus.texi(,23) @end menu menus.texi(,24) menus.texi(,25) Some text. menus.texi(,26) menus.texi(,27) @menu menus.texi(,28) * (manual):: desc menus.texi(,29) comment menus.texi(,31) * (info):: before verbatim @verbatim menus.texi(,32) some @ verb{' atim menus.texi(,33) * (texinfo):: in @ verbatim menus.texi(,34) menus.texi(,35) @end verbatim menus.texi(,36) * (manual2):: $@html menus.texi(,37) menus.texi(,38) menus.texi(,39) @end html menus.texi(,41) Log $ menus.texi(,42) * (truc):: @acronym{description menus.texi(,43) acronym} menus.texi(,44) @end menu menus.texi(,45) After menu menus.texi(,46) menus.texi(,47) @menu menus.texi(,48) * (manual):: @table @asis menus.texi(,49) @item item menus.texi(,51) menus.texi(,52) * (node):: menus.texi(,53) menu comment ? menus.texi(,54) * (node2):: description ? menus.texi(,55) description continue ? menus.texi(,56) comment. menus.texi(,58) @end table menus.texi(,59) @end menu menus.texi(,60) menus.texi(,61) @node chapter menus.texi(,62) @chapter chapter menus.texi(,63) menus.texi(,64) @footnote{in footnote} menus.texi(,65) menus.texi(,66) @format menus.texi(,67) @menu menus.texi(,68) * s--ect@comma{}ion:: s--ect@comma{}ion menus.texi(,69) menus.texi(,70) Menu comment menus.texi(,71) ``simple-double--three---four----''@* menus.texi(,72) menus.texi(,73) @end menu menus.texi(,74) @end format menus.texi(,75) menus.texi(,76) @node s--ect@comma{}ion menus.texi(,77) @section A section menus.texi(,78) menus.texi(,79) @menu menus.texi(,80) * subsection ``simple-double--three---four----'':: menus.texi(,81) @end menu menus.texi(,82) menus.texi(,83) @node subsection ``simple-double--three---four----'' menus.texi(,84) @subsection subsection ``simple-double--three---four----'' menus.texi(,85) menus.texi(,86) @menu menus.texi(,87) @example menus.texi(,89) * subsubsection:: menus.texi(,90) Menu comment menus.texi(,91) menus.texi(,92) * a description:(manual) other manual node. Chapter 2 menus.texi(,94) @end example menus.texi(,95) @end menu menus.texi(,96) menus.texi(,97) @anchor{anchor} menus.texi(,98) menus.texi(,100) @node subsubsection menus.texi(,101) @subsubsection subsubsection menus.texi(,103) menus.texi(,104) @node chapter2 menus.texi(,105) @chapter chapter 2 menus.texi(,106) menus.texi(,107) @example menus.texi(,108) @menu menus.texi(,109) * section in chapter 2:: in description @cartouche menus.texi(,110) in cartouche menus.texi(,111) @end cartouche menus.texi(,112) @end menu menus.texi(,113) @end example menus.texi(,114) menus.texi(,115) @node section in chapter 2 menus.texi(,116) @section section in chapter 2 menus.texi(,117) menus.texi(,118) @contents menus.texi(,119) @shortcontents menus.texi(,120) menus.texi(,121) @bye texi2html-1.82/test/formatting/res/texi_menus/menus.texi0000644000175000017500000000301411264347123025355 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @comment %**start of header @setfilename menus.info @node Top @top Top @menu * chapter:: chapter Menu comment * description:chapter2, Chapter 2 @end menu Text. @menu * (gcc):: text @table @minus @item item table line @end table @end menu Some text. @menu * (manual):: desc comment * (info):: before verbatim @verbatim some @ verb{' atim * (texinfo):: in @ verbatim @end verbatim * (manual2):: $@html @end html Log $ * (truc):: @acronym{description acronym} @end menu After menu @menu * (manual):: @table @asis @item item * (node):: menu comment ? * (node2):: description ? description continue ? comment. @end table @end menu @node chapter @chapter chapter @footnote{in footnote} @format @menu * s--ect@comma{}ion:: s--ect@comma{}ion Menu comment ``simple-double--three---four----''@* @end menu @end format @node s--ect@comma{}ion @section A section @menu * subsection ``simple-double--three---four----'':: @end menu @node subsection ``simple-double--three---four----'' @subsection subsection ``simple-double--three---four----'' @menu @example * subsubsection:: Menu comment * a description:(manual) other manual node. Chapter 2 @end example @end menu @anchor{anchor} @node subsubsection @subsubsection subsubsection @node chapter2 @chapter chapter 2 @example @menu * section in chapter 2:: in description @cartouche in cartouche @end cartouche @end menu @end example @node section in chapter 2 @section section in chapter 2 @contents @shortcontents @bye texi2html-1.82/test/formatting/res/texi_index_in_item_line_table/0000755000175000017500000000000011264347123027177 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_index_in_item_line_table/index_in_item_line_table.20000644000175000017500000000000011264347123034241 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_index_in_item_line_table/index_in_item_line_table.passtexi0000644000175000017500000000153711264347123035760 0ustar flichtenheldflichtenheldindex_in_item_line_table.texi(,2) index_in_item_line_table.texi(,3) @setfilename index_in_item_line_table.info index_in_item_line_table.texi(,4) index_in_item_line_table.texi(,5) @node Top index_in_item_line_table.texi(,6) @top test index entries in @@item @@table index_in_item_line_table.texi(,7) index_in_item_line_table.texi(,8) @table @asis index_in_item_line_table.texi(,9) @item @cindex index index_in_item_line_table.texi(,10) @option{opt} index_in_item_line_table.texi(,11) More text index_in_item_line_table.texi(,12) @item @cindex 2 index index_in_item_line_table.texi(,13) @option{nopt} index_in_item_line_table.texi(,14) Even more index_in_item_line_table.texi(,15) @end table index_in_item_line_table.texi(,16) index_in_item_line_table.texi(,17) @vindex another index index_in_item_line_table.texi(,18) index_in_item_line_table.texi(,19) @bye texi2html-1.82/test/formatting/res/texi_index_in_item_line_table/index_in_item_line_table.passfirst0000644000175000017500000000153711264347123036136 0ustar flichtenheldflichtenheldindex_in_item_line_table.texi(,2) index_in_item_line_table.texi(,3) @setfilename index_in_item_line_table.info index_in_item_line_table.texi(,4) index_in_item_line_table.texi(,5) @node Top index_in_item_line_table.texi(,6) @top test index entries in @@item @@table index_in_item_line_table.texi(,7) index_in_item_line_table.texi(,8) @table @asis index_in_item_line_table.texi(,9) @item @cindex index index_in_item_line_table.texi(,10) @option{opt} index_in_item_line_table.texi(,11) More text index_in_item_line_table.texi(,12) @item @cindex 2 index index_in_item_line_table.texi(,13) @option{nopt} index_in_item_line_table.texi(,14) Even more index_in_item_line_table.texi(,15) @end table index_in_item_line_table.texi(,16) index_in_item_line_table.texi(,17) @vindex another index index_in_item_line_table.texi(,18) index_in_item_line_table.texi(,19) @bye texi2html-1.82/test/formatting/res/texi_index_in_item_line_table/index_in_item_line_table.texi0000644000175000017500000000042111264347123035060 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename index_in_item_line_table.info @node Top @top test index entries in @@item @@table @table @asis @item @cindex index @option{opt} More text @item @cindex 2 index @option{nopt} Even more @end table @vindex another index @bye texi2html-1.82/test/formatting/res/texi_formats_in_menu/0000755000175000017500000000000011264347123025373 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_formats_in_menu/formats_in_menu.passtexi0000644000175000017500000000305611264347123032346 0ustar flichtenheldflichtenheldformats_in_menu.texi(,2) formats_in_menu.texi(,3) @node Top formats_in_menu.texi(,4) formats_in_menu.texi(,5) @menu formats_in_menu.texi(,6) * (gcc):: text @table @minus formats_in_menu.texi(,7) @item item formats_in_menu.texi(,8) table line formats_in_menu.texi(,9) @end table formats_in_menu.texi(,10) @end menu formats_in_menu.texi(,11) formats_in_menu.texi(,12) Some text. formats_in_menu.texi(,13) formats_in_menu.texi(,14) @menu formats_in_menu.texi(,15) * (manual):: desc formats_in_menu.texi(,16) comment formats_in_menu.texi(,17) * (info):: before verbatim @verbatim formats_in_menu.texi(,18) some @ verb{' atim formats_in_menu.texi(,19) * (texinfo):: in @ verbatim formats_in_menu.texi(,20) formats_in_menu.texi(,21) @end verbatim formats_in_menu.texi(,22) * (manual2):: $@html formats_in_menu.texi(,23) formats_in_menu.texi(,24) formats_in_menu.texi(,25) @end html formats_in_menu.texi(,26) Log$ formats_in_menu.texi(,27) * (truc):: @acronym{description formats_in_menu.texi(,28) acronym} formats_in_menu.texi(,29) @end menu formats_in_menu.texi(,30) After menu formats_in_menu.texi(,31) formats_in_menu.texi(,32) @menu formats_in_menu.texi(,33) * (manual):: @table @asis formats_in_menu.texi(,34) @item item formats_in_menu.texi(,35) formats_in_menu.texi(,36) * (node):: formats_in_menu.texi(,37) menu comment ? formats_in_menu.texi(,38) * (node2):: description ? formats_in_menu.texi(,39) description continue ? formats_in_menu.texi(,40) comment. formats_in_menu.texi(,41) @end table formats_in_menu.texi(,42) @end menu formats_in_menu.texi(,43) @bye texi2html-1.82/test/formatting/res/texi_formats_in_menu/formats_in_menu.20000644000175000017500000000000011264347123030631 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_formats_in_menu/formats_in_menu.passfirst0000644000175000017500000000305611264347123032524 0ustar flichtenheldflichtenheldformats_in_menu.texi(,2) formats_in_menu.texi(,3) @node Top formats_in_menu.texi(,4) formats_in_menu.texi(,5) @menu formats_in_menu.texi(,6) * (gcc):: text @table @minus formats_in_menu.texi(,7) @item item formats_in_menu.texi(,8) table line formats_in_menu.texi(,9) @end table formats_in_menu.texi(,10) @end menu formats_in_menu.texi(,11) formats_in_menu.texi(,12) Some text. formats_in_menu.texi(,13) formats_in_menu.texi(,14) @menu formats_in_menu.texi(,15) * (manual):: desc formats_in_menu.texi(,16) comment formats_in_menu.texi(,17) * (info):: before verbatim @verbatim formats_in_menu.texi(,18) some @ verb{' atim formats_in_menu.texi(,19) * (texinfo):: in @ verbatim formats_in_menu.texi(,20) formats_in_menu.texi(,21) @end verbatim formats_in_menu.texi(,22) * (manual2):: $@html formats_in_menu.texi(,23) formats_in_menu.texi(,24) formats_in_menu.texi(,25) @end html formats_in_menu.texi(,26) Log$ formats_in_menu.texi(,27) * (truc):: @acronym{description formats_in_menu.texi(,28) acronym} formats_in_menu.texi(,29) @end menu formats_in_menu.texi(,30) After menu formats_in_menu.texi(,31) formats_in_menu.texi(,32) @menu formats_in_menu.texi(,33) * (manual):: @table @asis formats_in_menu.texi(,34) @item item formats_in_menu.texi(,35) formats_in_menu.texi(,36) * (node):: formats_in_menu.texi(,37) menu comment ? formats_in_menu.texi(,38) * (node2):: description ? formats_in_menu.texi(,39) description continue ? formats_in_menu.texi(,40) comment. formats_in_menu.texi(,41) @end table formats_in_menu.texi(,42) @end menu formats_in_menu.texi(,43) @bye texi2html-1.82/test/formatting/res/texi_formats_in_menu/formats_in_menu.texi0000644000175000017500000000102211264347123031446 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top @menu * (gcc):: text @table @minus @item item table line @end table @end menu Some text. @menu * (manual):: desc comment * (info):: before verbatim @verbatim some @ verb{' atim * (texinfo):: in @ verbatim @end verbatim * (manual2):: $@html @end html Log$ * (truc):: @acronym{description acronym} @end menu After menu @menu * (manual):: @table @asis @item item * (node):: menu comment ? * (node2):: description ? description continue ? comment. @end table @end menu @bye texi2html-1.82/test/formatting/res/texi_detailmenus/0000755000175000017500000000000011264347123024520 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_detailmenus/detailmenus.passtexi0000644000175000017500000000545511264347123030625 0ustar flichtenheldflichtenhelddetailmenus.texi(,2) @comment %**start of header detailmenus.texi(,3) @setfilename detailmenus.info detailmenus.texi(,4) detailmenus.texi(,5) @node Top detailmenus.texi(,6) @top Top detailmenus.texi(,7) detailmenus.texi(,8) @menu detailmenus.texi(,9) * chapter:: chapter detailmenus.texi(,10) detailmenus.texi(,11) Menu comment detailmenus.texi(,12) detailmenus.texi(,13) * chapter2:description. Chapter 2 detailmenus.texi(,14) @detailmenu detailmenus.texi(,15) * s--ect@comma{}ion:: s--ect@comma{}ion detailmenus.texi(,16) detailmenus.texi(,17) Menu comment detailmenus.texi(,18) ``simple-double--three---four----''@* detailmenus.texi(,19) detailmenus.texi(,20) * subsection ``simple-double--three---four----'':: detailmenus.texi(,21) * subsubsection:: detailmenus.texi(,22) @end detailmenu detailmenus.texi(,23) detailmenus.texi(,24) Other comment detailmenus.texi(,25) detailmenus.texi(,26) * chapter3:: detailmenus.texi(,27) @detailmenu detailmenus.texi(,28) * s--ect@comma{}ion:: s--ect@comma{}ion detailmenus.texi(,29) detailmenus.texi(,30) Menu comment detailmenus.texi(,31) ``simple-double--three---four----''@* detailmenus.texi(,32) detailmenus.texi(,33) * subsection ``simple-double--three---four----'':: detailmenus.texi(,34) * subsubsection:: detailmenus.texi(,35) @end detailmenu detailmenus.texi(,36) * chapter4:: detailmenus.texi(,37) @end menu detailmenus.texi(,38) detailmenus.texi(,39) @node chapter detailmenus.texi(,40) @chapter chapter detailmenus.texi(,41) detailmenus.texi(,42) @menu detailmenus.texi(,43) * s--ect@comma{}ion:: s--ect@comma{}ion detailmenus.texi(,44) * subsubsection:: FIXME this should lead to a warning detailmenus.texi(,45) @end menu detailmenus.texi(,46) detailmenus.texi(,47) @node s--ect@comma{}ion detailmenus.texi(,48) @section A section detailmenus.texi(,49) detailmenus.texi(,50) @menu detailmenus.texi(,51) * subsection ``simple-double--three---four----'':: detailmenus.texi(,52) @end menu detailmenus.texi(,53) detailmenus.texi(,54) @node subsection ``simple-double--three---four----'' detailmenus.texi(,55) @subsection subsection ``simple-double--three---four----'' detailmenus.texi(,56) detailmenus.texi(,57) @menu detailmenus.texi(,58) * subsubsection:: detailmenus.texi(,59) @end menu detailmenus.texi(,60) detailmenus.texi(,61) @node subsubsection detailmenus.texi(,62) @subsubsection subsubsection detailmenus.texi(,63) detailmenus.texi(,64) @node chapter2 detailmenus.texi(,65) @chapter chapter 2 detailmenus.texi(,66) detailmenus.texi(,67) @node chapter3 detailmenus.texi(,68) @chapter chapter 3 detailmenus.texi(,69) detailmenus.texi(,70) @node chapter4 detailmenus.texi(,71) @chapter chapter 4 detailmenus.texi(,72) detailmenus.texi(,73) @contents detailmenus.texi(,74) @shortcontents detailmenus.texi(,75) detailmenus.texi(,76) @bye texi2html-1.82/test/formatting/res/texi_detailmenus/detailmenus.passfirst0000644000175000017500000000545511264347123031003 0ustar flichtenheldflichtenhelddetailmenus.texi(,2) @comment %**start of header detailmenus.texi(,3) @setfilename detailmenus.info detailmenus.texi(,4) detailmenus.texi(,5) @node Top detailmenus.texi(,6) @top Top detailmenus.texi(,7) detailmenus.texi(,8) @menu detailmenus.texi(,9) * chapter:: chapter detailmenus.texi(,10) detailmenus.texi(,11) Menu comment detailmenus.texi(,12) detailmenus.texi(,13) * chapter2:description. Chapter 2 detailmenus.texi(,14) @detailmenu detailmenus.texi(,15) * s--ect@comma{}ion:: s--ect@comma{}ion detailmenus.texi(,16) detailmenus.texi(,17) Menu comment detailmenus.texi(,18) ``simple-double--three---four----''@* detailmenus.texi(,19) detailmenus.texi(,20) * subsection ``simple-double--three---four----'':: detailmenus.texi(,21) * subsubsection:: detailmenus.texi(,22) @end detailmenu detailmenus.texi(,23) detailmenus.texi(,24) Other comment detailmenus.texi(,25) detailmenus.texi(,26) * chapter3:: detailmenus.texi(,27) @detailmenu detailmenus.texi(,28) * s--ect@comma{}ion:: s--ect@comma{}ion detailmenus.texi(,29) detailmenus.texi(,30) Menu comment detailmenus.texi(,31) ``simple-double--three---four----''@* detailmenus.texi(,32) detailmenus.texi(,33) * subsection ``simple-double--three---four----'':: detailmenus.texi(,34) * subsubsection:: detailmenus.texi(,35) @end detailmenu detailmenus.texi(,36) * chapter4:: detailmenus.texi(,37) @end menu detailmenus.texi(,38) detailmenus.texi(,39) @node chapter detailmenus.texi(,40) @chapter chapter detailmenus.texi(,41) detailmenus.texi(,42) @menu detailmenus.texi(,43) * s--ect@comma{}ion:: s--ect@comma{}ion detailmenus.texi(,44) * subsubsection:: FIXME this should lead to a warning detailmenus.texi(,45) @end menu detailmenus.texi(,46) detailmenus.texi(,47) @node s--ect@comma{}ion detailmenus.texi(,48) @section A section detailmenus.texi(,49) detailmenus.texi(,50) @menu detailmenus.texi(,51) * subsection ``simple-double--three---four----'':: detailmenus.texi(,52) @end menu detailmenus.texi(,53) detailmenus.texi(,54) @node subsection ``simple-double--three---four----'' detailmenus.texi(,55) @subsection subsection ``simple-double--three---four----'' detailmenus.texi(,56) detailmenus.texi(,57) @menu detailmenus.texi(,58) * subsubsection:: detailmenus.texi(,59) @end menu detailmenus.texi(,60) detailmenus.texi(,61) @node subsubsection detailmenus.texi(,62) @subsubsection subsubsection detailmenus.texi(,63) detailmenus.texi(,64) @node chapter2 detailmenus.texi(,65) @chapter chapter 2 detailmenus.texi(,66) detailmenus.texi(,67) @node chapter3 detailmenus.texi(,68) @chapter chapter 3 detailmenus.texi(,69) detailmenus.texi(,70) @node chapter4 detailmenus.texi(,71) @chapter chapter 4 detailmenus.texi(,72) detailmenus.texi(,73) @contents detailmenus.texi(,74) @shortcontents detailmenus.texi(,75) detailmenus.texi(,76) @bye texi2html-1.82/test/formatting/res/texi_detailmenus/detailmenus.texi0000644000175000017500000000234511264347123027731 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @comment %**start of header @setfilename detailmenus.info @node Top @top Top @menu * chapter:: chapter Menu comment * chapter2:description. Chapter 2 @detailmenu * s--ect@comma{}ion:: s--ect@comma{}ion Menu comment ``simple-double--three---four----''@* * subsection ``simple-double--three---four----'':: * subsubsection:: @end detailmenu Other comment * chapter3:: @detailmenu * s--ect@comma{}ion:: s--ect@comma{}ion Menu comment ``simple-double--three---four----''@* * subsection ``simple-double--three---four----'':: * subsubsection:: @end detailmenu * chapter4:: @end menu @node chapter @chapter chapter @menu * s--ect@comma{}ion:: s--ect@comma{}ion * subsubsection:: FIXME this should lead to a warning @end menu @node s--ect@comma{}ion @section A section @menu * subsection ``simple-double--three---four----'':: @end menu @node subsection ``simple-double--three---four----'' @subsection subsection ``simple-double--three---four----'' @menu * subsubsection:: @end menu @node subsubsection @subsubsection subsubsection @node chapter2 @chapter chapter 2 @node chapter3 @chapter chapter 3 @node chapter4 @chapter chapter 4 @contents @shortcontents @bye texi2html-1.82/test/formatting/res/texi_detailmenus/detailmenus.20000644000175000017500000000000011264347123027103 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_table_in_table_item/0000755000175000017500000000000011264347123026150 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_table_in_table_item/table_in_table_item.passtexi0000644000175000017500000000442511264347123033701 0ustar flichtenheldflichtenheldtable_in_table_item.texi(,2) table_in_table_item.texi(,3) @setfilename table_in_table_item.texi table_in_table_item.texi(,4) table_in_table_item.texi(,5) @node Top table_in_table_item.texi(,6) @top Test table nested in table item table_in_table_item.texi(,7) table_in_table_item.texi(,8) @table @asis table_in_table_item.texi(,9) @item item @table @asis table_in_table_item.texi(,10) @item in nested table item table_in_table_item.texi(,11) in nested table line table_in_table_item.texi(,12) @end table table_in_table_item.texi(,13) in table line table_in_table_item.texi(,14) @end table table_in_table_item.texi(,15) table_in_table_item.texi(,16) And in code table_in_table_item.texi(,17) table_in_table_item.texi(,18) @code{ table_in_table_item.texi(,19) @table @asis table_in_table_item.texi(,20) @item item @table @asis table_in_table_item.texi(,21) @item in table in table item table_in_table_item.texi(,22) in nested table line table_in_table_item.texi(,23) @end table table_in_table_item.texi(,24) @end table table_in_table_item.texi(,25) } table_in_table_item.texi(,26) table_in_table_item.texi(,27) and in preformatted table_in_table_item.texi(,28) table_in_table_item.texi(,29) @example table_in_table_item.texi(,30) @table @asis table_in_table_item.texi(,31) @item item in preformatted @table @asis table_in_table_item.texi(,32) @item in table in table item in preformatted table_in_table_item.texi(,33) in nested table line in preformatted table_in_table_item.texi(,34) @end table table_in_table_item.texi(,35) @end table table_in_table_item.texi(,36) @end example table_in_table_item.texi(,37) table_in_table_item.texi(,38) table_in_table_item.texi(,39) and in preformatted in code table_in_table_item.texi(,40) table_in_table_item.texi(,41) @code{ table_in_table_item.texi(,42) @example table_in_table_item.texi(,43) @table @asis table_in_table_item.texi(,44) @item item in preformatted @table @asis table_in_table_item.texi(,45) @item in table in table item in preformatted table_in_table_item.texi(,46) in nested table line in preformatted table_in_table_item.texi(,47) @end table table_in_table_item.texi(,48) @end table table_in_table_item.texi(,49) @end example table_in_table_item.texi(,50) } table_in_table_item.texi(,51) table_in_table_item.texi(,52) @bye texi2html-1.82/test/formatting/res/texi_table_in_table_item/table_in_table_item.passfirst0000644000175000017500000000442511264347123034057 0ustar flichtenheldflichtenheldtable_in_table_item.texi(,2) table_in_table_item.texi(,3) @setfilename table_in_table_item.texi table_in_table_item.texi(,4) table_in_table_item.texi(,5) @node Top table_in_table_item.texi(,6) @top Test table nested in table item table_in_table_item.texi(,7) table_in_table_item.texi(,8) @table @asis table_in_table_item.texi(,9) @item item @table @asis table_in_table_item.texi(,10) @item in nested table item table_in_table_item.texi(,11) in nested table line table_in_table_item.texi(,12) @end table table_in_table_item.texi(,13) in table line table_in_table_item.texi(,14) @end table table_in_table_item.texi(,15) table_in_table_item.texi(,16) And in code table_in_table_item.texi(,17) table_in_table_item.texi(,18) @code{ table_in_table_item.texi(,19) @table @asis table_in_table_item.texi(,20) @item item @table @asis table_in_table_item.texi(,21) @item in table in table item table_in_table_item.texi(,22) in nested table line table_in_table_item.texi(,23) @end table table_in_table_item.texi(,24) @end table table_in_table_item.texi(,25) } table_in_table_item.texi(,26) table_in_table_item.texi(,27) and in preformatted table_in_table_item.texi(,28) table_in_table_item.texi(,29) @example table_in_table_item.texi(,30) @table @asis table_in_table_item.texi(,31) @item item in preformatted @table @asis table_in_table_item.texi(,32) @item in table in table item in preformatted table_in_table_item.texi(,33) in nested table line in preformatted table_in_table_item.texi(,34) @end table table_in_table_item.texi(,35) @end table table_in_table_item.texi(,36) @end example table_in_table_item.texi(,37) table_in_table_item.texi(,38) table_in_table_item.texi(,39) and in preformatted in code table_in_table_item.texi(,40) table_in_table_item.texi(,41) @code{ table_in_table_item.texi(,42) @example table_in_table_item.texi(,43) @table @asis table_in_table_item.texi(,44) @item item in preformatted @table @asis table_in_table_item.texi(,45) @item in table in table item in preformatted table_in_table_item.texi(,46) in nested table line in preformatted table_in_table_item.texi(,47) @end table table_in_table_item.texi(,48) @end table table_in_table_item.texi(,49) @end example table_in_table_item.texi(,50) } table_in_table_item.texi(,51) table_in_table_item.texi(,52) @bye texi2html-1.82/test/formatting/res/texi_table_in_table_item/table_in_table_item.texi0000644000175000017500000000151211264347123033004 0ustar flichtenheldflichtenheld\input texinfo.tex @c -*-texinfo-*- @setfilename table_in_table_item.texi @node Top @top Test table nested in table item @table @asis @item item @table @asis @item in nested table item in nested table line @end table in table line @end table And in code @code{ @table @asis @item item @table @asis @item in table in table item in nested table line @end table @end table } and in preformatted @example @table @asis @item item in preformatted @table @asis @item in table in table item in preformatted in nested table line in preformatted @end table @end table @end example and in preformatted in code @code{ @example @table @asis @item item in preformatted @table @asis @item in table in table item in preformatted in nested table line in preformatted @end table @end table @end example } @bye texi2html-1.82/test/formatting/res/texi_table_in_table_item/table_in_table_item.20000644000175000017500000000000011264347123032163 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/html-extrali/0000755000175000017500000000000011264347123023567 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/html-extrali/menuli.html0000644000175000017500000000337711264347123025760 0ustar flichtenheldflichtenheld Untitled Document
    • entry1

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/html-extrali/html-extrali.20000644000175000017500000000014211264347123026261 0ustar flichtenheldflichtenheld** menu entry without previous node: entry1 (l. 8) *** Unknown node in menu entry `entry1' (l. 8) texi2html-1.82/test/formatting/res/float_copying/0000755000175000017500000000000011264347123024012 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/float_copying/float_copying.html0000644000175000017500000000706611264347123027546 0ustar flichtenheldflichtenheld Untitled Document: Top
    [Top] [Contents] [Index] [ ? ]

    Top

    See the caption public domain anchor.

    See the float public domain.

    Public domain is not really a licence, as it means than the author abandon his copyright.

    Copyright notice 1: The Public Domain notice(1)


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/float_copying/float_copying.20000644000175000017500000000010011264347123026721 0ustar flichtenheldflichtenheld** Index entry before document: @cindex indexed caption (l. 23) texi2html-1.82/test/formatting/res/float_copying/float_copying_fot.html0000644000175000017500000000611011264347123030403 0ustar flichtenheldflichtenheld Untitled Document: Footnotes
    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)

    The caption copying footnote

    see Copying and floats.


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/float_copying/float_copying_abt.html0000644000175000017500000001235511264347123030371 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/float_copying/float_copying_1.html0000644000175000017500000001612511264347123027762 0ustar flichtenheldflichtenheld Untitled Document: A. Copying and floats
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A. Copying and floats

    In the appendix, we print the references and the copying once more and the list of coyright notices (listoffloats).

    See the caption public domain anchor.

    See the float public domain.

    Public domain is not really a licence, as it means than the author abandon his copyright.

    Copyright notice 1: The Public Domain notice(1)

    Public domain is not really a licence, as it means than the author abandon his copyright.

    Copyright notice 1: The Public Domain notice(1)

    listoffloats

    Copyright notice 1

    The Public Domain notice(1)

    printindex

    Jump to:   I   L   T  
    Index Entry Section

    I
    indexed captionTop
    indexed caption copying footnote

    L
    listofloatsA. Copying and floats

    T
    TopTop

    Jump to:   I   L   T  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/tex_httex/0000755000175000017500000000000011264347123023171 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/tex_httex/tex_tex4ht_tex.4ct0000644000175000017500000000012311264347123026561 0ustar flichtenheldflichtenheld\expandafter\ifx\csname doTocEntry\endcsname\relax \expandafter\endinput\fi \par texi2html-1.82/test/formatting/res/tex_httex/tex_tex4ht_math.html0000644000175000017500000000110211264347123027162 0ustar flichtenheldflichtenheld<!-- tex4ht_begin tex_tex4ht_math math 1 --> xi _ tan y <!-- tex4ht_end tex_tex4ht_math math 1 --> <!-- tex4ht_begin tex_tex4ht_math math 2 --> a\b <!-- tex4ht_end tex_tex4ht_math math 2 --> <!-- tex4ht_begin tex_tex4ht_math math 3 --> mathcode <!-- tex4ht_end tex_tex4ht_math math 3 --> <!-- tex4ht_begin tex_tex4ht_math math 4 --> math code_∑ i f <!-- tex4ht_end tex_tex4ht_math math 4 --> texi2html-1.82/test/formatting/res/tex_httex/tex_tex4ht_tex.xref0000644000175000017500000000005411264347123027036 0ustar flichtenheldflichtenheld\:CrossWord{)F1F-}{tex_tex4ht_tex.html}{1}% texi2html-1.82/test/formatting/res/tex_httex/tex_tex4ht_math.vr0000644000175000017500000000000011264347123026641 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/tex_httex/tex_tex4ht_math.fn0000644000175000017500000000000011264347123026615 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/tex_httex/tex_tex4ht_math.cp0000644000175000017500000000000011264347123026614 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/tex_httex/tex_tex4ht_math.pg0000644000175000017500000000000011264347123026620 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/tex_httex/tex_tex4ht_tex.lg0000644000175000017500000000504611264347123026502 0ustar flichtenheldflichtenheldhtfcss: cmmi font-style: italic; htfcss: cmmib font-style: italic; font-weight: bold; File: tex_tex4ht_tex.html File: tex_tex4ht_tex.css File: tex_tex4ht_tex.tmp Css: p.noindent { text-indent: 0em } Css: td p.noindent { text-indent: 0em; margin-top:0em; } Css: p.nopar { text-indent: 0em; } Css: p.indent{ text-indent: 1.5em } Css: @media print {div.crosslinks {visibility:hidden;}} Css: a img { border-top: 0; border-left: 0; border-right: 0; } Font_Css("4"): .small-caps{font-variant: small-caps; } Font_Css("10"): .htf-cmbx {font-weight: bold; font-style:normal;} Font_Css("12"): .htf-calligraphy {font-family:cursive} Font_Css("14"): .htf-italic {font-style: italic;} Font_Css("16"): .htf-bold {font-weight: bold;} Font_Css("12"): .htf-calligraphy-bold {font-family:cursive ; font-weight: bold; } Css: center { margin-top:1em; margin-bottom:1em; } Css: td center { margin-top:0em; margin-bottom:0em; } Css: .Canvas { position:relative; } Css: img.math{vertical-align:middle;} Css: .obeylines-h,.obeylines-v {white-space: nowrap; } Css: div.obeylines-v p { margin-top:0; margin-bottom:0; } Css: .overline{ text-decoration:overline; } Css: .overline img{ border-top: 1px solid black; } Css: td.displaylines {text-align:center; white-space:nowrap;} Css: .centerline {text-align:center;} Css: .rightline {text-align:right;} Css: span.TEX {letter-spacing: -0.125em; } Css: span.TEX span.E{ position:relative;top:0.5ex;left:-0.0417em;} Css: a span.TEX span.E {text-decoration: none; } Css: .underline{ text-decoration:underline; } Css: .underline img{ border-bottom: 1px solid black; margin-bottom:1pt; } Css: div.proclaim { margin-top: 1em; margin-bottom: 1em; } Css: p.item {text-indent:-2em; margin-left:2em;} Css: p.itemitem {text-indent:-2em; margin-left:4em;} Css: span.item, span.itemitem {width:2em; margin-right:0.4em;} Css: td.eqalign3 { text-align:right; margin-left:10em;} Css: .eqalign td { white-space: nowrap; } Css: div.eqalign {text-align:center;} Css: td.eqalignno3, td.leqalignno3 { text-align:right; margin-left:10em;} Css: .leqalignno td, .eqalignno td { white-space: nowrap; } Css: .leqalignno td.noalign, .eqalignno td.noalign { width:5%; white-space: normal; } Css: table.leqalignno, table.eqalignno {width:100%;} Css: img.cdots{vertical-align:middle;} Css: div.pmatrix {text-align:center;} Css: table.pmatrix {width:100%;} --- needs --- tex_tex4ht_tex.idv[1] ==> tex_tex4ht_tex0x.png --- --- characters --- Font("cmr","10","10","100") Font("cmr","7","7","100") Font("cmmi","10","10","100") Font("cmmi","7","7","100") Font("cmsy","10","10","100") Font("cmex","10","10","100") texi2html-1.82/test/formatting/res/tex_httex/tex_tex4ht_math.lg0000644000175000017500000000055511264347123026633 0ustar flichtenheldflichtenheldhtfcss: cmmi font-style: italic; htfcss: cmmib font-style: italic; font-weight: bold; htfcss: cmtt font-family: monospace; File: tex_tex4ht_math.html --- characters --- Font("cmr","7","7","100") Font("cmmi","7","7","100") Font("cmmi","5","5","100") Font("cmex","10","10","100") Font("cmtt","10","10","109") Font("cmmi","10","10","109") Font("cmsy","10","10","109") texi2html-1.82/test/formatting/res/tex_httex/tex.20000644000175000017500000000016211264347123024053 0ustar flichtenheldflichtenhelddvipng warning: DVI magnification of 1000 over-ridden by user (1400) ** Unknown command `@\' (left as is) (l. 42) texi2html-1.82/test/formatting/res/tex_httex/tex.html0000644000175000017500000000533211264347123024662 0ustar flichtenheldflichtenheld Untitled Document

    Tests

    Now tex on the same line some

         N  (            )2
χ2 = ∑   yi --(a+-bxi)
     i=1       σi

    bidule Some text one the line following @end tex

    Now tex on the following line, valid fot tex (with @end tex on a line). some

    tex TEX

    Same that @html (but empty following line not ignored).

    Test of @math Here some xi _ tan y.

    Maths with protected \: a\b.

    Maths with code @-command:

    mathcode

    Maths with code @-command and braces:

    math code_∑ i f

    @\ outside of math

    @\


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/tex_httex/tex_tex4ht_tex.tex0000644000175000017500000000070611264347123026676 0ustar flichtenheldflichtenheld% Automatically generated \csname tex4ht\endcsname \HCode{\Hnewline \Hnewline} some $$ \chi^2 = \sum_{i=1}^N \left(y_i - (a + b x_i) \over \sigma_i\right)^2 $$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} some tex \TeX \HCode{\Hnewline \Hnewline} \bye texi2html-1.82/test/formatting/res/tex_httex/tex_tex4ht_tex.tmp0000644000175000017500000000001711264347123026671 0ustar flichtenheldflichtenheld /* css.sty */texi2html-1.82/test/formatting/res/tex_httex/tex_tex4ht_tex.4tc0000644000175000017500000000011411264347123026561 0ustar flichtenheldflichtenheld\expandafter\ifx\csname doTocEntry\endcsname\relax \expandafter\endinput\fi texi2html-1.82/test/formatting/res/tex_httex/tex_tex4ht_tex.css0000644000175000017500000000337211264347123026670 0ustar flichtenheldflichtenheld /* start css.sty */ .cmr-7{font-size:70%;} .cmmi-10{font-style: italic;} .cmmi-7{font-size:70%;font-style: italic;} p.noindent { text-indent: 0em } td p.noindent { text-indent: 0em; margin-top:0em; } p.nopar { text-indent: 0em; } p.indent{ text-indent: 1.5em } @media print {div.crosslinks {visibility:hidden;}} a img { border-top: 0; border-left: 0; border-right: 0; } center { margin-top:1em; margin-bottom:1em; } td center { margin-top:0em; margin-bottom:0em; } .Canvas { position:relative; } img.math{vertical-align:middle;} .obeylines-h,.obeylines-v {white-space: nowrap; } div.obeylines-v p { margin-top:0; margin-bottom:0; } .overline{ text-decoration:overline; } .overline img{ border-top: 1px solid black; } td.displaylines {text-align:center; white-space:nowrap;} .centerline {text-align:center;} .rightline {text-align:right;} span.TEX {letter-spacing: -0.125em; } span.TEX span.E{ position:relative;top:0.5ex;left:-0.0417em;} a span.TEX span.E {text-decoration: none; } .underline{ text-decoration:underline; } .underline img{ border-bottom: 1px solid black; margin-bottom:1pt; } div.proclaim { margin-top: 1em; margin-bottom: 1em; } p.item {text-indent:-2em; margin-left:2em;} p.itemitem {text-indent:-2em; margin-left:4em;} span.item, span.itemitem {width:2em; margin-right:0.4em;} td.eqalign3 { text-align:right; margin-left:10em;} .eqalign td { white-space: nowrap; } div.eqalign {text-align:center;} td.eqalignno3, td.leqalignno3 { text-align:right; margin-left:10em;} .leqalignno td, .eqalignno td { white-space: nowrap; } .leqalignno td.noalign, .eqalignno td.noalign { width:5%; white-space: normal; } table.leqalignno, table.eqalignno {width:100%;} img.cdots{vertical-align:middle;} div.pmatrix {text-align:center;} table.pmatrix {width:100%;} /* end css.sty */ texi2html-1.82/test/formatting/res/tex_httex/tex_tex4ht_math.aux0000644000175000017500000000000011264347123027007 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/tex_httex/tex_tex4ht_math.texi0000644000175000017500000000137011264347123027176 0ustar flichtenheldflichtenheld\input texinfo @setfilename tex_tex4ht_math.info @c Automatically generated @verbatim @end verbatim @math{{x^i}\over{\tan y}} @verbatim @end verbatim @verbatim @end verbatim @math{a @\ b} @verbatim @end verbatim @verbatim @end verbatim @math{@code{math code}} @verbatim @end verbatim @verbatim @end verbatim @math{ \underline{@code{math \hbox{ code }}} \sum_{i}{\underline{f}}} @verbatim @end verbatim @bye texi2html-1.82/test/formatting/res/tex_httex/tex_tex4ht_math.ky0000644000175000017500000000000011264347123026635 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/tex_httex/tex_tex4ht_math.tp0000644000175000017500000000000011264347123026635 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/float_with_at_commands/0000755000175000017500000000000011264347123025662 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/float_with_at_commands/float_with_at_commands.html0000644000175000017500000000432111264347123033255 0ustar flichtenheldflichtenheld Untitled Document

    Test floats with @-commands

    Ceci est notre première entrée.

    entrée 1: La première entrée est importante

    entrée 1

    La première entrée est importante


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/float_with_at_commands/float_with_at_commands.20000644000175000017500000000000011264347123032440 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/def_end_of_line/0000755000175000017500000000000011264347123024234 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/def_end_of_line/def_end_of_line.20000644000175000017500000000002511264347123027373 0ustar flichtenheldflichtenheld*** closing `deffn' texi2html-1.82/test/formatting/res/def_end_of_line/def_end_of_line.html0000644000175000017500000000427011264347123030204 0ustar flichtenheldflichtenheld Untitled Document

    Test for end of line protected in definition commands

    category: deffn_name arguments more args with end of line within with 3 @ @ one last arg

    deffn

    category2: deffn_name2 arguments2

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/texi_html-extrali/0000755000175000017500000000000011264347123024620 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_html-extrali/html-extrali.texi0000644000175000017500000000024011264347123030121 0ustar flichtenheldflichtenheld\input texinfo @setfilename menuli.info @c extra li generated after @c From: Marius Groeger , 13nov98. @menu * entry1:: @end menu @bye texi2html-1.82/test/formatting/res/texi_html-extrali/html-extrali.passfirst0000644000175000017500000000055711264347123031201 0ustar flichtenheldflichtenheldhtml-extrali.texi(,2) @setfilename menuli.info html-extrali.texi(,3) html-extrali.texi(,4) @c extra li generated after html-extrali.texi(,5) @c From: Marius Groeger , 13nov98. html-extrali.texi(,6) html-extrali.texi(,7) @menu html-extrali.texi(,8) * entry1:: html-extrali.texi(,9) @end menu html-extrali.texi(,10) html-extrali.texi(,11) @bye texi2html-1.82/test/formatting/res/texi_html-extrali/html-extrali.passtexi0000644000175000017500000000055711264347123031023 0ustar flichtenheldflichtenheldhtml-extrali.texi(,2) @setfilename menuli.info html-extrali.texi(,3) html-extrali.texi(,4) @c extra li generated after html-extrali.texi(,5) @c From: Marius Groeger , 13nov98. html-extrali.texi(,6) html-extrali.texi(,7) @menu html-extrali.texi(,8) * entry1:: html-extrali.texi(,9) @end menu html-extrali.texi(,10) html-extrali.texi(,11) @bye texi2html-1.82/test/formatting/res/texi_html-extrali/html-extrali.20000644000175000017500000000014611264347123027316 0ustar flichtenheldflichtenheld** menu entry without previous node: entry1 (l. 8) ** menu entry without previous node: entry1 (l. 8) texi2html-1.82/test/formatting/res/texi_html-title/0000755000175000017500000000000011264347123024271 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_html-title/html-title.texi0000644000175000017500000000025011264347123027244 0ustar flichtenheldflichtenheld\input texinfo @setfilename html-title.info @settitle @@title @sc{html} @code{test} @node Top @top Top of @@title @sc{html} @code{test} Top. Second paragraph. @bye texi2html-1.82/test/formatting/res/texi_html-title/html-title.20000644000175000017500000000000011264347123026425 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_html-title/html-title.passfirst0000644000175000017500000000057011264347123030316 0ustar flichtenheldflichtenheldhtml-title.texi(,2) @setfilename html-title.info html-title.texi(,3) @settitle @@title @sc{html} @code{test} html-title.texi(,4) html-title.texi(,5) @node Top html-title.texi(,6) @top Top of @@title @sc{html} @code{test} html-title.texi(,7) html-title.texi(,8) Top. html-title.texi(,9) html-title.texi(,10) Second paragraph. html-title.texi(,11) html-title.texi(,12) @bye texi2html-1.82/test/formatting/res/texi_html-title/html-title.passtexi0000644000175000017500000000057011264347123030140 0ustar flichtenheldflichtenheldhtml-title.texi(,2) @setfilename html-title.info html-title.texi(,3) @settitle @@title @sc{html} @code{test} html-title.texi(,4) html-title.texi(,5) @node Top html-title.texi(,6) @top Top of @@title @sc{html} @code{test} html-title.texi(,7) html-title.texi(,8) Top. html-title.texi(,9) html-title.texi(,10) Second paragraph. html-title.texi(,11) html-title.texi(,12) @bye texi2html-1.82/test/formatting/res/commands_in_ifset/0000755000175000017500000000000011264347123024636 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/commands_in_ifset/commands_in_ifset.20000644000175000017500000000000011264347123030370 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/commands_in_ifset/commands_in_ifset.html0000644000175000017500000000363411264347123031213 0ustar flichtenheldflichtenheld Untitled Document

    Top section

    text

    Line 1158 Before bye


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/texi_index_in_item_line_table_in_code/0000755000175000017500000000000011264347123030657 5ustar flichtenheldflichtenheld././@LongLink0000000000000000000000000000016400000000000011566 Lustar rootroottexi2html-1.82/test/formatting/res/texi_index_in_item_line_table_in_code/index_in_item_line_table_in_code.passfirsttexi2html-1.82/test/formatting/res/texi_index_in_item_line_table_in_code/index_in_item_line_table_in0000644000175000017500000000226711264347123036270 0ustar flichtenheldflichtenheldindex_in_item_line_table_in_code.texi(,2) index_in_item_line_table_in_code.texi(,3) @setfilename index_in_item_line_table_in_code.info index_in_item_line_table_in_code.texi(,4) index_in_item_line_table_in_code.texi(,5) @node Top index_in_item_line_table_in_code.texi(,6) @top test index entries in @@item @@table in @@code index_in_item_line_table_in_code.texi(,7) index_in_item_line_table_in_code.texi(,8) @code{ index_in_item_line_table_in_code.texi(,9) index_in_item_line_table_in_code.texi(,10) @table @asis index_in_item_line_table_in_code.texi(,11) @item @cindex index index_in_item_line_table_in_code.texi(,12) @option{opt} index_in_item_line_table_in_code.texi(,13) More text index_in_item_line_table_in_code.texi(,14) @item @cindex 2 index index_in_item_line_table_in_code.texi(,15) @option{nopt} index_in_item_line_table_in_code.texi(,16) Even more index_in_item_line_table_in_code.texi(,17) @end table index_in_item_line_table_in_code.texi(,18) index_in_item_line_table_in_code.texi(,19) } index_in_item_line_table_in_code.texi(,20) index_in_item_line_table_in_code.texi(,21) @vindex another index index_in_item_line_table_in_code.texi(,22) index_in_item_line_table_in_code.texi(,23) @bye ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootroottexi2html-1.82/test/formatting/res/texi_index_in_item_line_table_in_code/index_in_item_line_table_in_code.2texi2html-1.82/test/formatting/res/texi_index_in_item_line_table_in_code/index_in_item_line_table_in0000644000175000017500000000000011264347123036247 0ustar flichtenheldflichtenheld././@LongLink0000000000000000000000000000015700000000000011570 Lustar rootroottexi2html-1.82/test/formatting/res/texi_index_in_item_line_table_in_code/index_in_item_line_table_in_code.texitexi2html-1.82/test/formatting/res/texi_index_in_item_line_table_in_code/index_in_item_line_table_in0000644000175000017500000000045511264347123036265 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename index_in_item_line_table_in_code.info @node Top @top test index entries in @@item @@table in @@code @code{ @table @asis @item @cindex index @option{opt} More text @item @cindex 2 index @option{nopt} Even more @end table } @vindex another index @bye ././@LongLink0000000000000000000000000000016300000000000011565 Lustar rootroottexi2html-1.82/test/formatting/res/texi_index_in_item_line_table_in_code/index_in_item_line_table_in_code.passtexitexi2html-1.82/test/formatting/res/texi_index_in_item_line_table_in_code/index_in_item_line_table_in0000644000175000017500000000226711264347123036270 0ustar flichtenheldflichtenheldindex_in_item_line_table_in_code.texi(,2) index_in_item_line_table_in_code.texi(,3) @setfilename index_in_item_line_table_in_code.info index_in_item_line_table_in_code.texi(,4) index_in_item_line_table_in_code.texi(,5) @node Top index_in_item_line_table_in_code.texi(,6) @top test index entries in @@item @@table in @@code index_in_item_line_table_in_code.texi(,7) index_in_item_line_table_in_code.texi(,8) @code{ index_in_item_line_table_in_code.texi(,9) index_in_item_line_table_in_code.texi(,10) @table @asis index_in_item_line_table_in_code.texi(,11) @item @cindex index index_in_item_line_table_in_code.texi(,12) @option{opt} index_in_item_line_table_in_code.texi(,13) More text index_in_item_line_table_in_code.texi(,14) @item @cindex 2 index index_in_item_line_table_in_code.texi(,15) @option{nopt} index_in_item_line_table_in_code.texi(,16) Even more index_in_item_line_table_in_code.texi(,17) @end table index_in_item_line_table_in_code.texi(,18) index_in_item_line_table_in_code.texi(,19) } index_in_item_line_table_in_code.texi(,20) index_in_item_line_table_in_code.texi(,21) @vindex another index index_in_item_line_table_in_code.texi(,22) index_in_item_line_table_in_code.texi(,23) @bye texi2html-1.82/test/formatting/res/center/0000755000175000017500000000000011264347123022435 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/center/center.20000644000175000017500000000043711264347123024004 0ustar flichtenheldflichtenheld** @item outside of table or list (l. 34) ** @item outside of table or list (l. 68) ** @tab outside of multitable (l. 68) ** @item outside of table or list (l. 69) *** closing `table' (l. 73) ** @item outside of table or list (l. 75) *** @end table without corresponding opening (l. 76) texi2html-1.82/test/formatting/res/center/center.html0000644000175000017500000002126711264347123024613 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Test @center

    A center

    Centered line

    And a center after empty line

    centered line after empty line

    And a center at end of line

    And an empty center

    Test @center

    title very long

    Centered text with a footnote(1) and text after the footnote.

    centered text in item

    table line

    centered text in table line

    centered line with item

    second item on center line

    unclosed command on center line in code

    Still in code

    unclosed command on center line with paragraph in code

    Still in code after paragraph

    unclosed command on center line with other center in code

    still in code on center line. After code.

    unclosed command on center line with other center and paragraph in code

    still in code on center line. After code.

    begin samp

    center and end samp’ after end of samp

    Empty double center:

    after first center

    after second center

    something

    end of samp

    after first center ‘

    after second center

    End of samp


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Heading

    trucbidule ctruc cbidule cstruc

    before the table

    item in center

    Line in center

    second item @end table
    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)

    This footnote shows an important feature of the centered text.

     
    item
    line
    

    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/images_docbook/0000755000175000017500000000000011264347123024122 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/images_docbook/images.20000644000175000017500000000132411264347123025452 0ustar flichtenheldflichtenheld** Cannot find @image file `f@i--le.. a@<"%@ < & @ % " .txt' ** Cannot find @image file `f@i--le.. a@<"%@ < & @ % " .txt' ** Cannot find @image file `f@i--le.. a@<"%@ < & @ % " .txt' ** Cannot find @image file `f@i--le.. a@<"%@ < & @ % " .txt' ** Cannot find @image file `f@i--le.. a@<"%@ < & @ % " .txt' ** Cannot find @image file `f@i--le.. a@<"%@ < & @ % " .txt' ** Cannot find @image file `f---ile.txt' ** Cannot find @image file `f---ile.txt' ** Cannot find @image file `f@i--le.. a@<"%@ < & @ % " .txt' ** Cannot find @image file `f@i--le.. a@<"%@ < & @ % " .txt' ** Cannot find @image file `f@i--le.. a@<"%@ < & @ % " .txt' ** Cannot find @image file `f@i--le.. a@<"%@ < & @ % " .txt' texi2html-1.82/test/formatting/res/images_docbook/images.xml0000644000175000017500000002116111264347123026112 0ustar flichtenheldflichtenheld ]> In copying. ggg aaa . Text in copying. File with @-commands and special characters: . And also in alt, and with dimensions: . top Insertcopying In copying. ggg aaa . Text in copying. File with @-commands and special characters: . And also in alt, and with dimensions: . In normal context ggg aaa . On the same line, f---ile, gr--a extension . Image sparated from text: ggg aaa And the same, followed by a dot: ggg aaa . In example: Text. f---ile with jpeg extension. . ggg aaa . File with @-commands and special characters: . And also in alt, and with dimensions: . In float. ggg aaa . ggg aaa . File with @-commands and special characters: . And also in alt, and with dimensions: . texi2html-1.82/test/formatting/res/float_docbook/0000755000175000017500000000000011264347123023762 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/float_docbook/float.20000644000175000017500000000036511264347123025156 0ustar flichtenheldflichtenheldi18n: missing string See %{title_ref} i18n: missing string %{ref} i18n: missing string see %{ref} i18n: missing string See %{ref} i18n: missing string %{title_ref} i18n: missing string section `@asis{}`%{section_name}'@asis{}' in @cite{%{book}} texi2html-1.82/test/formatting/res/float_docbook/float.xml0000644000175000017500000001024411264347123025612 0ustar flichtenheldflichtenheld ]> Test floats A list of floats at the begining. After the listoffloats. An example of float …. An index entry float example A table. truc line An itemize. truc line A ref. See xref Text with features. A footnote. footnote Text with features . &tex; and téîan_url and it is @verb a word !@ Æ. No label but caption and shortcaption. No type but caption and shortcaption. No type but label and no caption nor shortcaption. No label, no type, no caption no shortcaption. No label, no type, but caption and shortcaption. Second float with no type. A warning A chapter Text in chapter Float text of a float with a lot of features. A théorème float with no type. A warning A section A text in float no caption a label a type. Unnumbered unnum float with no type. Section within unnumbered Section within unnumbered Chapter with unnumbsubsec Chap unnumbered sec Chap float with no type. list of floats See . And (see ). See . And now a ref (without manual or printed manual) title. And now a ref (with manual without printed manual) . And now a ref (without manual with a printed manual) section ``title'' in printed manual title. A ref to float without type . texi2html-1.82/test/formatting/res/simplest_httex/0000755000175000017500000000000011264347123024231 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/simplest_httex/simplest_tex4ht_tex.tex0000644000175000017500000000007111264347123030771 0ustar flichtenheldflichtenheld% Automatically generated \csname tex4ht\endcsname \bye texi2html-1.82/test/formatting/res/simplest_httex/simplest_tex4ht_math.texi0000644000175000017500000000012711264347123031275 0ustar flichtenheldflichtenheld\input texinfo @setfilename simplest_tex4ht_math.info @c Automatically generated @bye texi2html-1.82/test/formatting/res/simplest_httex/simplest.html0000644000175000017500000000350611264347123026763 0ustar flichtenheldflichtenheld Untitled Document

    Top

    This is a very simple texi manual   <>.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/simplest_httex/simplest.20000644000175000017500000000000011264347123026142 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_float_with_at_commands/0000755000175000017500000000000011264347123026713 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_float_with_at_commands/float_with_at_commands.passtexi0000644000175000017500000000144611264347123035207 0ustar flichtenheldflichtenheldfloat_with_at_commands.texi(,2) float_with_at_commands.texi(,3) @setfilename float_with_at_commands.info float_with_at_commands.texi(,4) float_with_at_commands.texi(,5) @node Top float_with_at_commands.texi(,6) @top Test floats with @@-commands float_with_at_commands.texi(,7) float_with_at_commands.texi(,8) @float entr@'ee, premi@`ere entr@'ee float_with_at_commands.texi(,9) float_with_at_commands.texi(,10) Ceci est notre premi@`ere entr@'ee. float_with_at_commands.texi(,11) @caption{La premi@`ere entr@'ee est importante} float_with_at_commands.texi(,12) float_with_at_commands.texi(,13) @end float float_with_at_commands.texi(,14) float_with_at_commands.texi(,15) float_with_at_commands.texi(,16) @listoffloats entr@'ee float_with_at_commands.texi(,17) float_with_at_commands.texi(,18) @bye texi2html-1.82/test/formatting/res/texi_float_with_at_commands/float_with_at_commands.passfirst0000644000175000017500000000144611264347123035365 0ustar flichtenheldflichtenheldfloat_with_at_commands.texi(,2) float_with_at_commands.texi(,3) @setfilename float_with_at_commands.info float_with_at_commands.texi(,4) float_with_at_commands.texi(,5) @node Top float_with_at_commands.texi(,6) @top Test floats with @@-commands float_with_at_commands.texi(,7) float_with_at_commands.texi(,8) @float entr@'ee, premi@`ere entr@'ee float_with_at_commands.texi(,9) float_with_at_commands.texi(,10) Ceci est notre premi@`ere entr@'ee. float_with_at_commands.texi(,11) @caption{La premi@`ere entr@'ee est importante} float_with_at_commands.texi(,12) float_with_at_commands.texi(,13) @end float float_with_at_commands.texi(,14) float_with_at_commands.texi(,15) float_with_at_commands.texi(,16) @listoffloats entr@'ee float_with_at_commands.texi(,17) float_with_at_commands.texi(,18) @bye texi2html-1.82/test/formatting/res/texi_float_with_at_commands/float_with_at_commands.texi0000644000175000017500000000044411264347123034315 0ustar flichtenheldflichtenheld\input texinfo.tex @c -*-texinfo-*- @setfilename float_with_at_commands.info @node Top @top Test floats with @@-commands @float entr@'ee, premi@`ere entr@'ee Ceci est notre premi@`ere entr@'ee. @caption{La premi@`ere entr@'ee est importante} @end float @listoffloats entr@'ee @bye texi2html-1.82/test/formatting/res/texi_float_with_at_commands/float_with_at_commands.20000644000175000017500000000000011264347123033471 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_html-para/0000755000175000017500000000000011264347123024073 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_html-para/html-para.passfirst0000644000175000017500000000202511264347123027717 0ustar flichtenheldflichtenheldhtml-para.texi(,2) @setfilename html-para.info html-para.texi(,3) @settitle HTML paragraph beginning test html-para.texi(,4) html-para.texi(,5) @c

    is emitted at paragraph beginning, which makes the text html-para.texi(,6) @c between START and END not exactly what some cm_xxx functions html-para.texi(,7) @c expect, when they are called by pop_and_call_brace. html-para.texi(,8) html-para.texi(,9) @set val @@value@{@} html-para.texi(,11) html-para.texi(,12) @node Top html-para.texi(,13) @top Top of HTML paragraph test html-para.texi(,14) html-para.texi(,15) @@value@{@} should work at the beginning of a new paragraph. html-para.texi(,16) html-para.texi(,17) @dotless{i} dotless should not trigger error messages at the beginning html-para.texi(,18) of a new paragraph. html-para.texi(,19) html-para.texi(,20) @sc{small-caps} should work at the beginning of a new paragraph. html-para.texi(,21) html-para.texi(,22) \\@@definfoenclose// should work at the beginning of a new paragraph. html-para.texi(,23) html-para.texi(,24) @bye texi2html-1.82/test/formatting/res/texi_html-para/html-para.20000644000175000017500000000000011264347123026031 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_html-para/html-para.passtexi0000644000175000017500000000202511264347123027541 0ustar flichtenheldflichtenheldhtml-para.texi(,2) @setfilename html-para.info html-para.texi(,3) @settitle HTML paragraph beginning test html-para.texi(,4) html-para.texi(,5) @c

    is emitted at paragraph beginning, which makes the text html-para.texi(,6) @c between START and END not exactly what some cm_xxx functions html-para.texi(,7) @c expect, when they are called by pop_and_call_brace. html-para.texi(,8) html-para.texi(,9) @set val @@value@{@} html-para.texi(,11) html-para.texi(,12) @node Top html-para.texi(,13) @top Top of HTML paragraph test html-para.texi(,14) html-para.texi(,15) @@value@{@} should work at the beginning of a new paragraph. html-para.texi(,16) html-para.texi(,17) @dotless{i} dotless should not trigger error messages at the beginning html-para.texi(,18) of a new paragraph. html-para.texi(,19) html-para.texi(,20) @sc{small-caps} should work at the beginning of a new paragraph. html-para.texi(,21) html-para.texi(,22) \\@@definfoenclose// should work at the beginning of a new paragraph. html-para.texi(,23) html-para.texi(,24) @bye texi2html-1.82/test/formatting/res/texi_html-para/html-para.texi0000644000175000017500000000116411264347123026655 0ustar flichtenheldflichtenheld\input texinfo @setfilename html-para.info @settitle HTML paragraph beginning test @c

    is emitted at paragraph beginning, which makes the text @c between START and END not exactly what some cm_xxx functions @c expect, when they are called by pop_and_call_brace. @set val @@value@{@} @node Top @top Top of HTML paragraph test @@value@{@} should work at the beginning of a new paragraph. @dotless{i} dotless should not trigger error messages at the beginning of a new paragraph. @sc{small-caps} should work at the beginning of a new paragraph. \\@@definfoenclose// should work at the beginning of a new paragraph. @bye texi2html-1.82/test/formatting/res/menus_xml/0000755000175000017500000000000011264347123023164 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/menus_xml/menus.20000644000175000017500000000000011264347123024364 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/menus_xml/menus.xml0000644000175000017500000001063111264347123025036 0ustar flichtenheldflichtenheld menus.xml Top chapter (dir) Top

    chapter chapter chapter Menu comment chapter2 description Chapter 2 Text. (gcc) (gcc) text − item table line
    Some text. (manual) (manual) desc comment (info) (info) before verbatim some @ verb{' atim * (texinfo):: in @ verbatim (manual2) (manual2) $Log $ (truc) (truc) description acronym After menu (manual) (manual) item (node) (node) menu comment ? (node2) (node2) description ? description continue ? comment.
    chapter chapter2 Top Top chapter in footnote s--ect,ion s–ect,ion s–ect,ion Menu comment “simple-double–three—four—-”&linebreak; s--ect,ion chapter
    A section subsection ``simple-double--three---four----'' subsection “simple-double–three—four—-”
    subsection ``simple-double--three---four----'' s--ect,ion subsection “simple-double–three—four—-” subsubsection subsubsection Menu comment (manual) other manual node a description Chapter 2 subsubsection subsection ``simple-double--three---four----'' subsubsection chapter2 chapter Top chapter 2 section in chapter 2 section in chapter 2 in description in cartouche section in chapter 2 chapter2
    section in chapter 2
    texi2html-1.82/test/formatting/res/formatting_xml/0000755000175000017500000000000011264347123024207 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/formatting_xml/formatting.xml0000644000175000017500000056545211264347123027124 0ustar flichtenheldflichtenheld formatting.xml Top chapter (dir) Top section chapter chapter chapter Menu comment chapter2 description Chapter 2 In copying < > " & ' ` “simple-double–three—four—-”&linebreak; code: ``simple-double--three---four----'' &linebreak; asis: “simple-double–three—four—-” &linebreak; strong: “simple-double–three—four—-” &linebreak; kbd: ``simple-double--three---four----'' &linebreak; ``simple-double--three—four—-''&linebreak; –option–foption @"u ü @"{U} Ü @~n ñ @^a â @'e é @=o o¯ @`i ì @'{e} é @'{@dotless{i}} í @dotless{i} i @dotless{j} j @`{@=E} E¯` @l{} /l @,{@'C} C', @,c ç @,c@"u çü &linebreak; @* &linebreak; @ followed by a space &space; @ followed by a tab &space; @ followed by a new line &space;@- @| @: @! &eosexcl; @? &eosquest; @. &eosperiod; @@ @ @} } @{ { @/ foo vs. bar. colon :And something else. semi colon ;. And ? ?. Now ! !@ but , , @TeX &tex; @LaTeX &latex; @bullet • @copyright ©right; @dots &dots; @enddots &enddots; @equiv == @error error--> @expansion ==> @minus − @point -!- @print -| @result ⇒ @today a sunny day @aa å @AA Å @ae æ @oe œ @AE Æ @OE Œ @o ø @O Ø @ss ß @l /l @L /L @exclamdown ¡ @questiondown ¿ @pounds £ @registeredsymbol ®istered; @ordf ª @ordm º @comma , @quotedblleft “ @quotedblright ” @quoteleft ‘ @quoteright ’ @quotedblbase „ @quotesinglbase ‚ @guillemetleft « @guillemetright » @guillemotleft « @guillemotright » @guilsinglleft ‹ @guilsinglright › @textdegree ° @euro € @arrow → @leq ≤ @geq ≥ @acronym{--a,an accronym} –aan accronym @acronym{--a} –a @abbr{@'E--. @comma{}A., @'Etude Autonome } É–. ,A.Étude Autonome @abbr{@'E--. @comma{}A.} É–. ,A. @asis{--a} –a @b{--a} –a @cite{--a} –a @code{--a} --a @command{--a} --a @ctrl{--a} –a @dfn{--a} –a @dmn{--a} –a @email{--a,--b} --a–b @email{,--b} –b @email{--a} --a @emph{--a} –a @env{--a} --a @file{--a} --a @i{--a} –a @kbd{--a} --a @key{--a} --a @math{--a {\frac{1}{2}} @minus{}} –a \frac12 − @option{--a} @r{--a} –a @samp{--a} --a @sc{--a} –a @strong{--a} –a @t{--a} –a @sansserif{--a} –a @titlefont{--a} –a @indicateurl{--a} --a @uref{--a,--b} --a–b @uref{--a} --a @uref{,--b} –b @uref{--a,--b,--c} --a–b–c @uref{,--b,--c} –b–c @uref{--a,,--c} --a–c @uref{,,--c} –c @url{--a,--b} --a–b @url{--a,} --a @url{,--b} –b @var{--a} –a @verb{:--a:} --a @verb{:a < & @ % " -- b:} a < & @ % " -- b @w{} @H{a} a'' @H{--a} –a'' @dotaccent{a} a. @dotaccent{--a} –a. @ringaccent{a} a* @ringaccent{--a} –a* @tieaccent{a} a[ @tieaccent{--a} –a[ @u{a} a( @u{--a} –a( @ubaraccent{a} a_ @ubaraccent{--a} –a_ @udotaccent{a} .a @udotaccent{--a} .–a @v{a} a< @v{--a} –a< @,{c} ç @,{--c} –c, @footnote{in footnote} in footnote @footnote{in footnote2} in footnote2 @image{f--ile} @image{f--ile,l--i} @image{f--ile,,l--e} @image{f--ile,,,alt} alt @image{f--ile,,,,e-d-xt} @image{f--ile,aze,az,alt,e--xt} alt @image{f-ile,aze,,a--lt} a–lt @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} alt @clicksequence{click @click{} A} click A After clickstyle ⇒ @clicksequence{click @click{} A} click A A quot—ation Note: A Note note: A note Caution: Caution Important: Important Tip: a Tip Warning: a Warning. something é &tex;: The something é &tex; is here. @ at the end of line A @ at the end of the @quotation line. something, other thing: something, other thing Note, the note: Note, the note Empty: : &linebreak;: i–temize + i–tem + b–ullet minu–s e–mph item after emph e–mph item • a–n itemize lineindex entry within itemize i–tem 1 i–tem 2 e–numerate 600 700 mu–ltitable headitem another tab mu–ltitable item multitable tab mu–ltitable item 2 multitable tab 2 index entry within multitable lone mu–ltitable item 6 8 truc bidule e--xample some text s--mallexample d–isplay s–malldisplay l--isp s--malllisp f–ormat s–mallformat d--effn_namec--ategoryd--effn_name a--rguments... d–effn de--ffn_namecate--goryde--ffn_name ar--guments more args &linebreak; even more so def–fn ifseti a g index entry within deffntruccmdetruc log trapCommandlog trap log trap1Command log trap1 log trap2 Commandlog trap2 id ulecmdeid ule truc id i ulecmde2id i ule truc id i ule aaa machinmachin bidule machinbidule machin machintrucmachin truc followedtrucfollowed by a comment truc atruca b c d e f g h i deffnxtrucdeffnx before end deffn deffnemptydeffn deffnemptydeffn with deffnx deffnxemptydeffnx ifseti a g truccmdetruc text in def item for second def item d--efvr_namec--ategoryd--efvr_name d–efvr d--eftypefn_namec--ategoryt--yped--eftypefn_name a--rguments... d–eftypefn d--eftypeop_name on c--lassc--ategoryt--yped--eftypeop_name a--rguments... d–eftypeop d--eftypevr_namec--ategoryt--yped--eftypevr_name d–eftypevr d--efcv_namec--ategoryc--lassd--efcv_name d–efcv d--efop_name on c--lassc--ategoryc--lassd--efop_name a--rguments... d–efop d--eftp_namec--ategoryd--eftp_name a--ttributes... d–eftp d--efun_nameFunctiond--efun_name a--rguments... d–efun d--efmac_nameMacrod--efmac_name a--rguments... d–efmac d--efspec_nameSpecial Formd--efspec_name a--rguments... d–efspec d--efvar_nameVariabled--efvar_name argvar argvar1 d–efvar d--efopt_nameUser Optiond--efopt_name d–efopt d--eftypefun_nameFunctiont--yped--eftypefun_name a--rguments... d–eftypefun d--eftypevar_nameVariablet--yped--eftypevar_name d–eftypevar d--efivar_nameInstance Variablec--lassd--efivar_name d–efivar d--eftypeivar_name of c--lassInstance Variablet--yped--eftypeivar_name d–eftypeivar d--efmethod_name on c--lassMethodc--lassd--efmethod_name a--rguments... d–efmethod d--eftypemethod_name on c--lassMethodt--yped--eftypemethod_name a--rguments... d–eftypemethod @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} See c---hapter@cross r—ef name@t—itle@file n---ame@ma—nual@. @ref{chapter, cross ref name, title, file name, manual} chaptercross ref nametitlefile namemanual @pxref{chapter, cross ref name, title, file name, manual} see chaptercross ref nametitlefile namemanual @inforef{chapter, cross ref name, file name} See chaptercross ref namefile name @ref{chapter} chapter @xref{chapter} See chapter. @pxref{chapter} see chapter @ref{s--ect@comma{}ion} s--ect,ion @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } s--ect,iona , in cross refa comma, in titlea comma, in filea , in manual name @ref{chapter,cross ref name} chaptercross ref name @ref{chapter,,title} chaptertitle @ref{chapter,,,file name} chapterfile name @ref{chapter,,,,manual} chaptermanual @ref{chapter,cross ref name,title,} chaptercross ref nametitle @ref{chapter,cross ref name,,file name} chaptercross ref namefile name @ref{chapter,cross ref name,,,manual} chaptercross ref namemanual @ref{chapter,cross ref name,title,file name} chaptercross ref nametitlefile name @ref{chapter,cross ref name,title,,manual} chaptercross ref nametitlemanual @ref{chapter,cross ref name,title, file name, manual} chaptercross ref nametitlefile namemanual @ref{chapter,,title,file name} chaptertitlefile name @ref{chapter,,title,,manual} chaptertitlemanual @ref{chapter,,title, file name, manual} chaptertitlefile namemanual @ref{chapter,,,file name,manual} chapterfile namemanual @ref{(pman)anode,cross ref name} (pman)anodecross ref name @ref{(pman)anode,,title} (pman)anodetitle @ref{(pman)anode,,,file name} (pman)anodefile name @ref{(pman)anode,,,,manual} (pman)anodemanual @ref{(pman)anode,cross ref name,title,} (pman)anodecross ref nametitle @ref{(pman)anode,cross ref name,,file name} (pman)anodecross ref namefile name @ref{(pman)anode,cross ref name,,,manual} (pman)anodecross ref namemanual @ref{(pman)anode,cross ref name,title,file name} (pman)anodecross ref nametitlefile name @ref{(pman)anode,cross ref name,title,,manual} (pman)anodecross ref nametitlemanual @ref{(pman)anode,cross ref name,title, file name, manual} (pman)anodecross ref nametitlefile namemanual @ref{(pman)anode,,title,file name} (pman)anodetitlefile name @ref{(pman)anode,,title,,manual} (pman)anodetitlemanual @ref{(pman)anode,,title, file name, manual} (pman)anodetitlefile namemanual @ref{(pman)anode,,,file name,manual} (pman)anodefile namemanual @inforef{chapter, cross ref name, file name} See chaptercross ref namefile name @inforef{chapter} See chapter @inforef{chapter, cross ref name} See chaptercross ref name @inforef{chapter,,file name} See chapterfile name @inforef{node, cross ref name, file name} See nodecross ref namefile name @inforef{node} See node @inforef{node, cross ref name} See nodecross ref name @inforef{node,,file name} See nodefile name @inforef{chapter, cross ref name, file name, spurious arg} See chaptercross ref namefile name, spurious arg @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} See s--ect,iona , in cross refa comma, in file • a l–ine
    a a b b l–ine
    a− a index entry between item and itemxb− b l–ine
    c–artouche f–lushleft f–lushright
    ce–ntered line
    \input texinfo @c -*-texinfo-*- @setfilename simplest.info @node Top This is a very simple texi manual @ <>. @bye in verbatim '' xml para '' majorheading chapheading heading subheading subsubheading title –a formatting subtitle –a subtitle 2 –a author1 –a with accents in name Téça author2 –a In titlepage < > " & ' ` “simple-double–three—four—-”&linebreak; code: ``simple-double--three---four----'' &linebreak; asis: “simple-double–three—four—-” &linebreak; strong: “simple-double–three—four—-” &linebreak; kbd: ``simple-double--three---four----'' &linebreak; ``simple-double--three—four—-''&linebreak; –option–foption @"u ü @"{U} Ü @~n ñ @^a â @'e é @=o o¯ @`i ì @'{e} é @'{@dotless{i}} í @dotless{i} i @dotless{j} j @`{@=E} E¯` @l{} /l @,{@'C} C', @,c ç @,c@"u çü &linebreak; @* &linebreak; @ followed by a space &space; @ followed by a tab &space; @ followed by a new line &space;@- @| @: @! &eosexcl; @? &eosquest; @. &eosperiod; @@ @ @} } @{ { @/ foo vs. bar. colon :And something else. semi colon ;. And ? ?. Now ! !@ but , , @TeX &tex; @LaTeX &latex; @bullet • @copyright ©right; @dots &dots; @enddots &enddots; @equiv == @error error--> @expansion ==> @minus − @point -!- @print -| @result ⇒ @today a sunny day @aa å @AA Å @ae æ @oe œ @AE Æ @OE Œ @o ø @O Ø @ss ß @l /l @L /L @exclamdown ¡ @questiondown ¿ @pounds £ @registeredsymbol ®istered; @ordf ª @ordm º @comma , @quotedblleft “ @quotedblright ” @quoteleft ‘ @quoteright ’ @quotedblbase „ @quotesinglbase ‚ @guillemetleft « @guillemetright » @guillemotleft « @guillemotright » @guilsinglleft ‹ @guilsinglright › @textdegree ° @euro € @arrow → @leq ≤ @geq ≥ @acronym{--a,an accronym} –aan accronym @acronym{--a} –a @abbr{@'E--. @comma{}A., @'Etude Autonome } É–. ,A.Étude Autonome @abbr{@'E--. @comma{}A.} É–. ,A. @asis{--a} –a @b{--a} –a @cite{--a} –a @code{--a} --a @command{--a} --a @ctrl{--a} –a @dfn{--a} –a @dmn{--a} –a @email{--a,--b} --a–b @email{,--b} –b @email{--a} --a @emph{--a} –a @env{--a} --a @file{--a} --a @i{--a} –a @kbd{--a} --a @key{--a} --a @math{--a {\frac{1}{2}} @minus{}} –a \frac12 − @option{--a} @r{--a} –a @samp{--a} --a @sc{--a} –a @strong{--a} –a @t{--a} –a @sansserif{--a} –a @titlefont{--a} –a @indicateurl{--a} --a @uref{--a,--b} --a–b @uref{--a} --a @uref{,--b} –b @uref{--a,--b,--c} --a–b–c @uref{,--b,--c} –b–c @uref{--a,,--c} --a–c @uref{,,--c} –c @url{--a,--b} --a–b @url{--a,} --a @url{,--b} –b @var{--a} –a @verb{:--a:} --a @verb{:a < & @ % " -- b:} a < & @ % " -- b @w{} @H{a} a'' @H{--a} –a'' @dotaccent{a} a. @dotaccent{--a} –a. @ringaccent{a} a* @ringaccent{--a} –a* @tieaccent{a} a[ @tieaccent{--a} –a[ @u{a} a( @u{--a} –a( @ubaraccent{a} a_ @ubaraccent{--a} –a_ @udotaccent{a} .a @udotaccent{--a} .–a @v{a} a< @v{--a} –a< @,{c} ç @,{--c} –c, @footnote{in footnote} in footnote @footnote{in footnote2} in footnote2 @image{f--ile} @image{f--ile,l--i} @image{f--ile,,l--e} @image{f--ile,,,alt} alt @image{f--ile,,,,e-d-xt} @image{f--ile,aze,az,alt,e--xt} alt @image{f-ile,aze,,a--lt} a–lt @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} alt @clicksequence{click @click{} A} click A After clickstyle ⇒ @clicksequence{click @click{} A} click A A quot—ation Note: A Note note: A note Caution: Caution Important: Important Tip: a Tip Warning: a Warning. something é &tex;: The something é &tex; is here. @ at the end of line A @ at the end of the @quotation line. something, other thing: something, other thing Note, the note: Note, the note Empty: : &linebreak;: i–temize + i–tem + b–ullet minu–s e–mph item after emph e–mph item • a–n itemize lineindex entry within itemize i–tem 1 i–tem 2 e–numerate 600 700 mu–ltitable headitem another tab mu–ltitable item multitable tab mu–ltitable item 2 multitable tab 2 index entry within multitable lone mu–ltitable item 6 8 truc bidule e--xample some text s--mallexample d–isplay s–malldisplay l--isp s--malllisp f–ormat s–mallformat d--effn_namec--ategoryd--effn_name a--rguments... d–effn de--ffn_namecate--goryde--ffn_name ar--guments more args &linebreak; even more so def–fn ifseti a g index entry within deffntruccmdetruc log trapCommandlog trap log trap1Command log trap1 log trap2 Commandlog trap2 id ulecmdeid ule truc id i ulecmde2id i ule truc id i ule aaa machinmachin bidule machinbidule machin machintrucmachin truc followedtrucfollowed by a comment truc atruca b c d e f g h i deffnxtrucdeffnx before end deffn deffnemptydeffn deffnemptydeffn with deffnx deffnxemptydeffnx ifseti a g truccmdetruc text in def item for second def item d--efvr_namec--ategoryd--efvr_name d–efvr d--eftypefn_namec--ategoryt--yped--eftypefn_name a--rguments... d–eftypefn d--eftypeop_name on c--lassc--ategoryt--yped--eftypeop_name a--rguments... d–eftypeop d--eftypevr_namec--ategoryt--yped--eftypevr_name d–eftypevr d--efcv_namec--ategoryc--lassd--efcv_name d–efcv d--efop_name on c--lassc--ategoryc--lassd--efop_name a--rguments... d–efop d--eftp_namec--ategoryd--eftp_name a--ttributes... d–eftp d--efun_nameFunctiond--efun_name a--rguments... d–efun d--efmac_nameMacrod--efmac_name a--rguments... d–efmac d--efspec_nameSpecial Formd--efspec_name a--rguments... d–efspec d--efvar_nameVariabled--efvar_name argvar argvar1 d–efvar d--efopt_nameUser Optiond--efopt_name d–efopt d--eftypefun_nameFunctiont--yped--eftypefun_name a--rguments... d–eftypefun d--eftypevar_nameVariablet--yped--eftypevar_name d–eftypevar d--efivar_nameInstance Variablec--lassd--efivar_name d–efivar d--eftypeivar_name of c--lassInstance Variablet--yped--eftypeivar_name d–eftypeivar d--efmethod_name on c--lassMethodc--lassd--efmethod_name a--rguments... d–efmethod d--eftypemethod_name on c--lassMethodt--yped--eftypemethod_name a--rguments... d–eftypemethod @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} See c---hapter@cross r—ef name@t—itle@file n---ame@ma—nual@. @ref{chapter, cross ref name, title, file name, manual} chaptercross ref nametitlefile namemanual @pxref{chapter, cross ref name, title, file name, manual} see chaptercross ref nametitlefile namemanual @inforef{chapter, cross ref name, file name} See chaptercross ref namefile name @ref{chapter} chapter @xref{chapter} See chapter. @pxref{chapter} see chapter @ref{s--ect@comma{}ion} s--ect,ion @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } s--ect,iona , in cross refa comma, in titlea comma, in filea , in manual name @ref{chapter,cross ref name} chaptercross ref name @ref{chapter,,title} chaptertitle @ref{chapter,,,file name} chapterfile name @ref{chapter,,,,manual} chaptermanual @ref{chapter,cross ref name,title,} chaptercross ref nametitle @ref{chapter,cross ref name,,file name} chaptercross ref namefile name @ref{chapter,cross ref name,,,manual} chaptercross ref namemanual @ref{chapter,cross ref name,title,file name} chaptercross ref nametitlefile name @ref{chapter,cross ref name,title,,manual} chaptercross ref nametitlemanual @ref{chapter,cross ref name,title, file name, manual} chaptercross ref nametitlefile namemanual @ref{chapter,,title,file name} chaptertitlefile name @ref{chapter,,title,,manual} chaptertitlemanual @ref{chapter,,title, file name, manual} chaptertitlefile namemanual @ref{chapter,,,file name,manual} chapterfile namemanual @ref{(pman)anode,cross ref name} (pman)anodecross ref name @ref{(pman)anode,,title} (pman)anodetitle @ref{(pman)anode,,,file name} (pman)anodefile name @ref{(pman)anode,,,,manual} (pman)anodemanual @ref{(pman)anode,cross ref name,title,} (pman)anodecross ref nametitle @ref{(pman)anode,cross ref name,,file name} (pman)anodecross ref namefile name @ref{(pman)anode,cross ref name,,,manual} (pman)anodecross ref namemanual @ref{(pman)anode,cross ref name,title,file name} (pman)anodecross ref nametitlefile name @ref{(pman)anode,cross ref name,title,,manual} (pman)anodecross ref nametitlemanual @ref{(pman)anode,cross ref name,title, file name, manual} (pman)anodecross ref nametitlefile namemanual @ref{(pman)anode,,title,file name} (pman)anodetitlefile name @ref{(pman)anode,,title,,manual} (pman)anodetitlemanual @ref{(pman)anode,,title, file name, manual} (pman)anodetitlefile namemanual @ref{(pman)anode,,,file name,manual} (pman)anodefile namemanual @inforef{chapter, cross ref name, file name} See chaptercross ref namefile name @inforef{chapter} See chapter @inforef{chapter, cross ref name} See chaptercross ref name @inforef{chapter,,file name} See chapterfile name @inforef{node, cross ref name, file name} See nodecross ref namefile name @inforef{node} See node @inforef{node, cross ref name} See nodecross ref name @inforef{node,,file name} See nodefile name @inforef{chapter, cross ref name, file name, spurious arg} See chaptercross ref namefile name, spurious arg @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} See s--ect,iona , in cross refa comma, in file • a l–ine
    a a b b l–ine
    a− a index entry between item and itemxb− b l–ine
    c–artouche f–lushleft f–lushright
    ce–ntered line
    \input texinfo @c -*-texinfo-*- @setfilename simplest.info @node Top This is a very simple texi manual @ <>. @bye in verbatim '' xml para '' majorheading chapheading heading subheading subsubheading Insercopying in titlepage In copying < > " & ' ` “simple-double–three—four—-”&linebreak; code: ``simple-double--three---four----'' &linebreak; asis: “simple-double–three—four—-” &linebreak; strong: “simple-double–three—four—-” &linebreak; kbd: ``simple-double--three---four----'' &linebreak; ``simple-double--three—four—-''&linebreak; –option–foption @"u ü @"{U} Ü @~n ñ @^a â @'e é @=o o¯ @`i ì @'{e} é @'{@dotless{i}} í @dotless{i} i @dotless{j} j @`{@=E} E¯` @l{} /l @,{@'C} C', @,c ç @,c@"u çü &linebreak; @* &linebreak; @ followed by a space &space; @ followed by a tab &space; @ followed by a new line &space;@- @| @: @! &eosexcl; @? &eosquest; @. &eosperiod; @@ @ @} } @{ { @/ foo vs. bar. colon :And something else. semi colon ;. And ? ?. Now ! !@ but , , @TeX &tex; @LaTeX &latex; @bullet • @copyright ©right; @dots &dots; @enddots &enddots; @equiv == @error error--> @expansion ==> @minus − @point -!- @print -| @result ⇒ @today a sunny day @aa å @AA Å @ae æ @oe œ @AE Æ @OE Œ @o ø @O Ø @ss ß @l /l @L /L @exclamdown ¡ @questiondown ¿ @pounds £ @registeredsymbol ®istered; @ordf ª @ordm º @comma , @quotedblleft “ @quotedblright ” @quoteleft ‘ @quoteright ’ @quotedblbase „ @quotesinglbase ‚ @guillemetleft « @guillemetright » @guillemotleft « @guillemotright » @guilsinglleft ‹ @guilsinglright › @textdegree ° @euro € @arrow → @leq ≤ @geq ≥ @acronym{--a,an accronym} –aan accronym @acronym{--a} –a @abbr{@'E--. @comma{}A., @'Etude Autonome } É–. ,A.Étude Autonome @abbr{@'E--. @comma{}A.} É–. ,A. @asis{--a} –a @b{--a} –a @cite{--a} –a @code{--a} --a @command{--a} --a @ctrl{--a} –a @dfn{--a} –a @dmn{--a} –a @email{--a,--b} --a–b @email{,--b} –b @email{--a} --a @emph{--a} –a @env{--a} --a @file{--a} --a @i{--a} –a @kbd{--a} --a @key{--a} --a @math{--a {\frac{1}{2}} @minus{}} –a \frac12 − @option{--a} @r{--a} –a @samp{--a} --a @sc{--a} –a @strong{--a} –a @t{--a} –a @sansserif{--a} –a @titlefont{--a} –a @indicateurl{--a} --a @uref{--a,--b} --a–b @uref{--a} --a @uref{,--b} –b @uref{--a,--b,--c} --a–b–c @uref{,--b,--c} –b–c @uref{--a,,--c} --a–c @uref{,,--c} –c @url{--a,--b} --a–b @url{--a,} --a @url{,--b} –b @var{--a} –a @verb{:--a:} --a @verb{:a < & @ % " -- b:} a < & @ % " -- b @w{} @H{a} a'' @H{--a} –a'' @dotaccent{a} a. @dotaccent{--a} –a. @ringaccent{a} a* @ringaccent{--a} –a* @tieaccent{a} a[ @tieaccent{--a} –a[ @u{a} a( @u{--a} –a( @ubaraccent{a} a_ @ubaraccent{--a} –a_ @udotaccent{a} .a @udotaccent{--a} .–a @v{a} a< @v{--a} –a< @,{c} ç @,{--c} –c, @footnote{in footnote} in footnote @footnote{in footnote2} in footnote2 @image{f--ile} @image{f--ile,l--i} @image{f--ile,,l--e} @image{f--ile,,,alt} alt @image{f--ile,,,,e-d-xt} @image{f--ile,aze,az,alt,e--xt} alt @image{f-ile,aze,,a--lt} a–lt @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} alt @clicksequence{click @click{} A} click A After clickstyle ⇒ @clicksequence{click @click{} A} click A A quot—ation Note: A Note note: A note Caution: Caution Important: Important Tip: a Tip Warning: a Warning. something é &tex;: The something é &tex; is here. @ at the end of line A @ at the end of the @quotation line. something, other thing: something, other thing Note, the note: Note, the note Empty: : &linebreak;: i–temize + i–tem + b–ullet minu–s e–mph item after emph e–mph item • a–n itemize lineindex entry within itemize i–tem 1 i–tem 2 e–numerate 600 700 mu–ltitable headitem another tab mu–ltitable item multitable tab mu–ltitable item 2 multitable tab 2 index entry within multitable lone mu–ltitable item 6 8 truc bidule e--xample some text s--mallexample d–isplay s–malldisplay l--isp s--malllisp f–ormat s–mallformat d--effn_namec--ategoryd--effn_name a--rguments... d–effn de--ffn_namecate--goryde--ffn_name ar--guments more args &linebreak; even more so def–fn ifseti a g index entry within deffntruccmdetruc log trapCommandlog trap log trap1Command log trap1 log trap2 Commandlog trap2 id ulecmdeid ule truc id i ulecmde2id i ule truc id i ule aaa machinmachin bidule machinbidule machin machintrucmachin truc followedtrucfollowed by a comment truc atruca b c d e f g h i deffnxtrucdeffnx before end deffn deffnemptydeffn deffnemptydeffn with deffnx deffnxemptydeffnx ifseti a g truccmdetruc text in def item for second def item d--efvr_namec--ategoryd--efvr_name d–efvr d--eftypefn_namec--ategoryt--yped--eftypefn_name a--rguments... d–eftypefn d--eftypeop_name on c--lassc--ategoryt--yped--eftypeop_name a--rguments... d–eftypeop d--eftypevr_namec--ategoryt--yped--eftypevr_name d–eftypevr d--efcv_namec--ategoryc--lassd--efcv_name d–efcv d--efop_name on c--lassc--ategoryc--lassd--efop_name a--rguments... d–efop d--eftp_namec--ategoryd--eftp_name a--ttributes... d–eftp d--efun_nameFunctiond--efun_name a--rguments... d–efun d--efmac_nameMacrod--efmac_name a--rguments... d–efmac d--efspec_nameSpecial Formd--efspec_name a--rguments... d–efspec d--efvar_nameVariabled--efvar_name argvar argvar1 d–efvar d--efopt_nameUser Optiond--efopt_name d–efopt d--eftypefun_nameFunctiont--yped--eftypefun_name a--rguments... d–eftypefun d--eftypevar_nameVariablet--yped--eftypevar_name d–eftypevar d--efivar_nameInstance Variablec--lassd--efivar_name d–efivar d--eftypeivar_name of c--lassInstance Variablet--yped--eftypeivar_name d–eftypeivar d--efmethod_name on c--lassMethodc--lassd--efmethod_name a--rguments... d–efmethod d--eftypemethod_name on c--lassMethodt--yped--eftypemethod_name a--rguments... d–eftypemethod @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} See c---hapter@cross r—ef name@t—itle@file n---ame@ma—nual@. @ref{chapter, cross ref name, title, file name, manual} chaptercross ref nametitlefile namemanual @pxref{chapter, cross ref name, title, file name, manual} see chaptercross ref nametitlefile namemanual @inforef{chapter, cross ref name, file name} See chaptercross ref namefile name @ref{chapter} chapter @xref{chapter} See chapter. @pxref{chapter} see chapter @ref{s--ect@comma{}ion} s--ect,ion @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } s--ect,iona , in cross refa comma, in titlea comma, in filea , in manual name @ref{chapter,cross ref name} chaptercross ref name @ref{chapter,,title} chaptertitle @ref{chapter,,,file name} chapterfile name @ref{chapter,,,,manual} chaptermanual @ref{chapter,cross ref name,title,} chaptercross ref nametitle @ref{chapter,cross ref name,,file name} chaptercross ref namefile name @ref{chapter,cross ref name,,,manual} chaptercross ref namemanual @ref{chapter,cross ref name,title,file name} chaptercross ref nametitlefile name @ref{chapter,cross ref name,title,,manual} chaptercross ref nametitlemanual @ref{chapter,cross ref name,title, file name, manual} chaptercross ref nametitlefile namemanual @ref{chapter,,title,file name} chaptertitlefile name @ref{chapter,,title,,manual} chaptertitlemanual @ref{chapter,,title, file name, manual} chaptertitlefile namemanual @ref{chapter,,,file name,manual} chapterfile namemanual @ref{(pman)anode,cross ref name} (pman)anodecross ref name @ref{(pman)anode,,title} (pman)anodetitle @ref{(pman)anode,,,file name} (pman)anodefile name @ref{(pman)anode,,,,manual} (pman)anodemanual @ref{(pman)anode,cross ref name,title,} (pman)anodecross ref nametitle @ref{(pman)anode,cross ref name,,file name} (pman)anodecross ref namefile name @ref{(pman)anode,cross ref name,,,manual} (pman)anodecross ref namemanual @ref{(pman)anode,cross ref name,title,file name} (pman)anodecross ref nametitlefile name @ref{(pman)anode,cross ref name,title,,manual} (pman)anodecross ref nametitlemanual @ref{(pman)anode,cross ref name,title, file name, manual} (pman)anodecross ref nametitlefile namemanual @ref{(pman)anode,,title,file name} (pman)anodetitlefile name @ref{(pman)anode,,title,,manual} (pman)anodetitlemanual @ref{(pman)anode,,title, file name, manual} (pman)anodetitlefile namemanual @ref{(pman)anode,,,file name,manual} (pman)anodefile namemanual @inforef{chapter, cross ref name, file name} See chaptercross ref namefile name @inforef{chapter} See chapter @inforef{chapter, cross ref name} See chaptercross ref name @inforef{chapter,,file name} See chapterfile name @inforef{node, cross ref name, file name} See nodecross ref namefile name @inforef{node} See node @inforef{node, cross ref name} See nodecross ref name @inforef{node,,file name} See nodefile name @inforef{chapter, cross ref name, file name, spurious arg} See chaptercross ref namefile name, spurious arg @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} See s--ect,iona , in cross refa comma, in file • a l–ine
    a a b b l–ine
    a− a index entry between item and itemxb− b l–ine
    c–artouche f–lushleft f–lushright
    ce–ntered line
    \input texinfo @c -*-texinfo-*- @setfilename simplest.info @node Top This is a very simple texi manual @ <>. @bye in verbatim '' xml para '' majorheading chapheading heading subheading subsubheading
    Insertcopying in normal text In copying < > " & ' ` “simple-double–three—four—-”&linebreak; code: ``simple-double--three---four----'' &linebreak; asis: “simple-double–three—four—-” &linebreak; strong: “simple-double–three—four—-” &linebreak; kbd: ``simple-double--three---four----'' &linebreak; ``simple-double--three—four—-''&linebreak; –option–foption @"u ü @"{U} Ü @~n ñ @^a â @'e é @=o o¯ @`i ì @'{e} é @'{@dotless{i}} í @dotless{i} i @dotless{j} j @`{@=E} E¯` @l{} /l @,{@'C} C', @,c ç @,c@"u çü &linebreak; @* &linebreak; @ followed by a space &space; @ followed by a tab &space; @ followed by a new line &space;@- @| @: @! &eosexcl; @? &eosquest; @. &eosperiod; @@ @ @} } @{ { @/ foo vs. bar. colon :And something else. semi colon ;. And ? ?. Now ! !@ but , , @TeX &tex; @LaTeX &latex; @bullet • @copyright ©right; @dots &dots; @enddots &enddots; @equiv == @error error--> @expansion ==> @minus − @point -!- @print -| @result ⇒ @today a sunny day @aa å @AA Å @ae æ @oe œ @AE Æ @OE Œ @o ø @O Ø @ss ß @l /l @L /L @exclamdown ¡ @questiondown ¿ @pounds £ @registeredsymbol ®istered; @ordf ª @ordm º @comma , @quotedblleft “ @quotedblright ” @quoteleft ‘ @quoteright ’ @quotedblbase „ @quotesinglbase ‚ @guillemetleft « @guillemetright » @guillemotleft « @guillemotright » @guilsinglleft ‹ @guilsinglright › @textdegree ° @euro € @arrow → @leq ≤ @geq ≥ @acronym{--a,an accronym} –aan accronym @acronym{--a} –a @abbr{@'E--. @comma{}A., @'Etude Autonome } É–. ,A.Étude Autonome @abbr{@'E--. @comma{}A.} É–. ,A. @asis{--a} –a @b{--a} –a @cite{--a} –a @code{--a} --a @command{--a} --a @ctrl{--a} –a @dfn{--a} –a @dmn{--a} –a @email{--a,--b} --a–b @email{,--b} –b @email{--a} --a @emph{--a} –a @env{--a} --a @file{--a} --a @i{--a} –a @kbd{--a} --a @key{--a} --a @math{--a {\frac{1}{2}} @minus{}} –a \frac12 − @option{--a} @r{--a} –a @samp{--a} --a @sc{--a} –a @strong{--a} –a @t{--a} –a @sansserif{--a} –a @titlefont{--a} –a @indicateurl{--a} --a @uref{--a,--b} --a–b @uref{--a} --a @uref{,--b} –b @uref{--a,--b,--c} --a–b–c @uref{,--b,--c} –b–c @uref{--a,,--c} --a–c @uref{,,--c} –c @url{--a,--b} --a–b @url{--a,} --a @url{,--b} –b @var{--a} –a @verb{:--a:} --a @verb{:a < & @ % " -- b:} a < & @ % " -- b @w{} @H{a} a'' @H{--a} –a'' @dotaccent{a} a. @dotaccent{--a} –a. @ringaccent{a} a* @ringaccent{--a} –a* @tieaccent{a} a[ @tieaccent{--a} –a[ @u{a} a( @u{--a} –a( @ubaraccent{a} a_ @ubaraccent{--a} –a_ @udotaccent{a} .a @udotaccent{--a} .–a @v{a} a< @v{--a} –a< @,{c} ç @,{--c} –c, @footnote{in footnote} in footnote @footnote{in footnote2} in footnote2 @image{f--ile} @image{f--ile,l--i} @image{f--ile,,l--e} @image{f--ile,,,alt} alt @image{f--ile,,,,e-d-xt} @image{f--ile,aze,az,alt,e--xt} alt @image{f-ile,aze,,a--lt} a–lt @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} alt @clicksequence{click @click{} A} click A After clickstyle ⇒ @clicksequence{click @click{} A} click A A quot—ation Note: A Note note: A note Caution: Caution Important: Important Tip: a Tip Warning: a Warning. something é &tex;: The something é &tex; is here. @ at the end of line A @ at the end of the @quotation line. something, other thing: something, other thing Note, the note: Note, the note Empty: : &linebreak;: i–temize + i–tem + b–ullet minu–s e–mph item after emph e–mph item • a–n itemize lineindex entry within itemize i–tem 1 i–tem 2 e–numerate 600 700 mu–ltitable headitem another tab mu–ltitable item multitable tab mu–ltitable item 2 multitable tab 2 index entry within multitable lone mu–ltitable item 6 8 truc bidule e--xample some text s--mallexample d–isplay s–malldisplay l--isp s--malllisp f–ormat s–mallformat d--effn_namec--ategoryd--effn_name a--rguments... d–effn de--ffn_namecate--goryde--ffn_name ar--guments more args &linebreak; even more so def–fn ifseti a g index entry within deffntruccmdetruc log trapCommandlog trap log trap1Command log trap1 log trap2 Commandlog trap2 id ulecmdeid ule truc id i ulecmde2id i ule truc id i ule aaa machinmachin bidule machinbidule machin machintrucmachin truc followedtrucfollowed by a comment truc atruca b c d e f g h i deffnxtrucdeffnx before end deffn deffnemptydeffn deffnemptydeffn with deffnx deffnxemptydeffnx ifseti a g truccmdetruc text in def item for second def item d--efvr_namec--ategoryd--efvr_name d–efvr d--eftypefn_namec--ategoryt--yped--eftypefn_name a--rguments... d–eftypefn d--eftypeop_name on c--lassc--ategoryt--yped--eftypeop_name a--rguments... d–eftypeop d--eftypevr_namec--ategoryt--yped--eftypevr_name d–eftypevr d--efcv_namec--ategoryc--lassd--efcv_name d–efcv d--efop_name on c--lassc--ategoryc--lassd--efop_name a--rguments... d–efop d--eftp_namec--ategoryd--eftp_name a--ttributes... d–eftp d--efun_nameFunctiond--efun_name a--rguments... d–efun d--efmac_nameMacrod--efmac_name a--rguments... d–efmac d--efspec_nameSpecial Formd--efspec_name a--rguments... d–efspec d--efvar_nameVariabled--efvar_name argvar argvar1 d–efvar d--efopt_nameUser Optiond--efopt_name d–efopt d--eftypefun_nameFunctiont--yped--eftypefun_name a--rguments... d–eftypefun d--eftypevar_nameVariablet--yped--eftypevar_name d–eftypevar d--efivar_nameInstance Variablec--lassd--efivar_name d–efivar d--eftypeivar_name of c--lassInstance Variablet--yped--eftypeivar_name d–eftypeivar d--efmethod_name on c--lassMethodc--lassd--efmethod_name a--rguments... d–efmethod d--eftypemethod_name on c--lassMethodt--yped--eftypemethod_name a--rguments... d–eftypemethod @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} See c---hapter@cross r—ef name@t—itle@file n---ame@ma—nual@. @ref{chapter, cross ref name, title, file name, manual} chaptercross ref nametitlefile namemanual @pxref{chapter, cross ref name, title, file name, manual} see chaptercross ref nametitlefile namemanual @inforef{chapter, cross ref name, file name} See chaptercross ref namefile name @ref{chapter} chapter @xref{chapter} See chapter. @pxref{chapter} see chapter @ref{s--ect@comma{}ion} s--ect,ion @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } s--ect,iona , in cross refa comma, in titlea comma, in filea , in manual name @ref{chapter,cross ref name} chaptercross ref name @ref{chapter,,title} chaptertitle @ref{chapter,,,file name} chapterfile name @ref{chapter,,,,manual} chaptermanual @ref{chapter,cross ref name,title,} chaptercross ref nametitle @ref{chapter,cross ref name,,file name} chaptercross ref namefile name @ref{chapter,cross ref name,,,manual} chaptercross ref namemanual @ref{chapter,cross ref name,title,file name} chaptercross ref nametitlefile name @ref{chapter,cross ref name,title,,manual} chaptercross ref nametitlemanual @ref{chapter,cross ref name,title, file name, manual} chaptercross ref nametitlefile namemanual @ref{chapter,,title,file name} chaptertitlefile name @ref{chapter,,title,,manual} chaptertitlemanual @ref{chapter,,title, file name, manual} chaptertitlefile namemanual @ref{chapter,,,file name,manual} chapterfile namemanual @ref{(pman)anode,cross ref name} (pman)anodecross ref name @ref{(pman)anode,,title} (pman)anodetitle @ref{(pman)anode,,,file name} (pman)anodefile name @ref{(pman)anode,,,,manual} (pman)anodemanual @ref{(pman)anode,cross ref name,title,} (pman)anodecross ref nametitle @ref{(pman)anode,cross ref name,,file name} (pman)anodecross ref namefile name @ref{(pman)anode,cross ref name,,,manual} (pman)anodecross ref namemanual @ref{(pman)anode,cross ref name,title,file name} (pman)anodecross ref nametitlefile name @ref{(pman)anode,cross ref name,title,,manual} (pman)anodecross ref nametitlemanual @ref{(pman)anode,cross ref name,title, file name, manual} (pman)anodecross ref nametitlefile namemanual @ref{(pman)anode,,title,file name} (pman)anodetitlefile name @ref{(pman)anode,,title,,manual} (pman)anodetitlemanual @ref{(pman)anode,,title, file name, manual} (pman)anodetitlefile namemanual @ref{(pman)anode,,,file name,manual} (pman)anodefile namemanual @inforef{chapter, cross ref name, file name} See chaptercross ref namefile name @inforef{chapter} See chapter @inforef{chapter, cross ref name} See chaptercross ref name @inforef{chapter,,file name} See chapterfile name @inforef{node, cross ref name, file name} See nodecross ref namefile name @inforef{node} See node @inforef{node, cross ref name} See nodecross ref name @inforef{node,,file name} See nodefile name @inforef{chapter, cross ref name, file name, spurious arg} See chaptercross ref namefile name, spurious arg @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} See s--ect,iona , in cross refa comma, in file • a l–ine
    a a b b l–ine
    a− a index entry between item and itemxb− b l–ine
    c–artouche f–lushleft f–lushright
    ce–ntered line
    \input texinfo @c -*-texinfo-*- @setfilename simplest.info @node Top This is a very simple texi manual @ <>. @bye in verbatim '' xml para '' majorheading chapheading heading subheading subsubheading Normal text < > " & ' ` “simple-double–three—four—-”&linebreak; code: ``simple-double--three---four----'' &linebreak; asis: “simple-double–three—four—-” &linebreak; strong: “simple-double–three—four—-” &linebreak; kbd: ``simple-double--three---four----'' &linebreak; ``simple-double--three—four—-''&linebreak; –option–foption @"u ü @"{U} Ü @~n ñ @^a â @'e é @=o o¯ @`i ì @'{e} é @'{@dotless{i}} í @dotless{i} i @dotless{j} j @`{@=E} E¯` @l{} /l @,{@'C} C', @,c ç @,c@"u çü &linebreak; @* &linebreak; @ followed by a space &space; @ followed by a tab &space; @ followed by a new line &space;@- @| @: @! &eosexcl; @? &eosquest; @. &eosperiod; @@ @ @} } @{ { @/ foo vs. bar. colon :And something else. semi colon ;. And ? ?. Now ! !@ but , , @TeX &tex; @LaTeX &latex; @bullet • @copyright ©right; @dots &dots; @enddots &enddots; @equiv == @error error--> @expansion ==> @minus − @point -!- @print -| @result ⇒ @today a sunny day @aa å @AA Å @ae æ @oe œ @AE Æ @OE Œ @o ø @O Ø @ss ß @l /l @L /L @exclamdown ¡ @questiondown ¿ @pounds £ @registeredsymbol ®istered; @ordf ª @ordm º @comma , @quotedblleft “ @quotedblright ” @quoteleft ‘ @quoteright ’ @quotedblbase „ @quotesinglbase ‚ @guillemetleft « @guillemetright » @guillemotleft « @guillemotright » @guilsinglleft ‹ @guilsinglright › @textdegree ° @euro € @arrow → @leq ≤ @geq ≥ @acronym{--a,an accronym} –aan accronym @acronym{--a} –a @abbr{@'E--. @comma{}A., @'Etude Autonome } É–. ,A.Étude Autonome @abbr{@'E--. @comma{}A.} É–. ,A. @asis{--a} –a @b{--a} –a @cite{--a} –a @code{--a} --a @command{--a} --a @ctrl{--a} –a @dfn{--a} –a @dmn{--a} –a @email{--a,--b} --a–b @email{,--b} –b @email{--a} --a @emph{--a} –a @env{--a} --a @file{--a} --a @i{--a} –a @kbd{--a} --a @key{--a} --a @math{--a {\frac{1}{2}} @minus{}} –a \frac12 − @option{--a} @r{--a} –a @samp{--a} --a @sc{--a} –a @strong{--a} –a @t{--a} –a @sansserif{--a} –a @titlefont{--a} –a @indicateurl{--a} --a @uref{--a,--b} --a–b @uref{--a} --a @uref{,--b} –b @uref{--a,--b,--c} --a–b–c @uref{,--b,--c} –b–c @uref{--a,,--c} --a–c @uref{,,--c} –c @url{--a,--b} --a–b @url{--a,} --a @url{,--b} –b @var{--a} –a @verb{:--a:} --a @verb{:a < & @ % " -- b:} a < & @ % " -- b @w{} @H{a} a'' @H{--a} –a'' @dotaccent{a} a. @dotaccent{--a} –a. @ringaccent{a} a* @ringaccent{--a} –a* @tieaccent{a} a[ @tieaccent{--a} –a[ @u{a} a( @u{--a} –a( @ubaraccent{a} a_ @ubaraccent{--a} –a_ @udotaccent{a} .a @udotaccent{--a} .–a @v{a} a< @v{--a} –a< @,{c} ç @,{--c} –c, @footnote{in footnote} in footnote @footnote{in footnote2} in footnote2 @image{f--ile} @image{f--ile,l--i} @image{f--ile,,l--e} @image{f--ile,,,alt} alt @image{f--ile,,,,e-d-xt} @image{f--ile,aze,az,alt,e--xt} alt @image{f-ile,aze,,a--lt} a–lt @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} alt @clicksequence{click @click{} A} click A After clickstyle ⇒ @clicksequence{click @click{} A} click A A quot—ation Note: A Note note: A note Caution: Caution Important: Important Tip: a Tip Warning: a Warning. something é &tex;: The something é &tex; is here. @ at the end of line A @ at the end of the @quotation line. something, other thing: something, other thing Note, the note: Note, the note Empty: : &linebreak;: i–temize + i–tem + b–ullet minu–s e–mph item after emph e–mph item • a–n itemize lineindex entry within itemize i–tem 1 i–tem 2 e–numerate 600 700 mu–ltitable headitem another tab mu–ltitable item multitable tab mu–ltitable item 2 multitable tab 2 index entry within multitable lone mu–ltitable item 6 8 truc bidule e--xample some text s--mallexample d–isplay s–malldisplay l--isp s--malllisp f–ormat s–mallformat d--effn_namec--ategoryd--effn_name a--rguments... d–effn de--ffn_namecate--goryde--ffn_name ar--guments more args &linebreak; even more so def–fn ifseti a g index entry within deffntruccmdetruc log trapCommandlog trap log trap1Command log trap1 log trap2 Commandlog trap2 id ulecmdeid ule truc id i ulecmde2id i ule truc id i ule aaa machinmachin bidule machinbidule machin machintrucmachin truc followedtrucfollowed by a comment truc atruca b c d e f g h i deffnxtrucdeffnx before end deffn deffnemptydeffn deffnemptydeffn with deffnx deffnxemptydeffnx ifseti a g truccmdetruc text in def item for second def item d--efvr_namec--ategoryd--efvr_name d–efvr d--eftypefn_namec--ategoryt--yped--eftypefn_name a--rguments... d–eftypefn d--eftypeop_name on c--lassc--ategoryt--yped--eftypeop_name a--rguments... d–eftypeop d--eftypevr_namec--ategoryt--yped--eftypevr_name d–eftypevr d--efcv_namec--ategoryc--lassd--efcv_name d–efcv d--efop_name on c--lassc--ategoryc--lassd--efop_name a--rguments... d–efop d--eftp_namec--ategoryd--eftp_name a--ttributes... d–eftp d--efun_nameFunctiond--efun_name a--rguments... d–efun d--efmac_nameMacrod--efmac_name a--rguments... d–efmac d--efspec_nameSpecial Formd--efspec_name a--rguments... d–efspec d--efvar_nameVariabled--efvar_name argvar argvar1 d–efvar d--efopt_nameUser Optiond--efopt_name d–efopt d--eftypefun_nameFunctiont--yped--eftypefun_name a--rguments... d–eftypefun d--eftypevar_nameVariablet--yped--eftypevar_name d–eftypevar d--efivar_nameInstance Variablec--lassd--efivar_name d–efivar d--eftypeivar_name of c--lassInstance Variablet--yped--eftypeivar_name d–eftypeivar d--efmethod_name on c--lassMethodc--lassd--efmethod_name a--rguments... d–efmethod d--eftypemethod_name on c--lassMethodt--yped--eftypemethod_name a--rguments... d–eftypemethod @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} See c---hapter@cross r—ef name@t—itle@file n---ame@ma—nual@. @ref{chapter, cross ref name, title, file name, manual} chaptercross ref nametitlefile namemanual @pxref{chapter, cross ref name, title, file name, manual} see chaptercross ref nametitlefile namemanual @inforef{chapter, cross ref name, file name} See chaptercross ref namefile name @ref{chapter} chapter @xref{chapter} See chapter. @pxref{chapter} see chapter @ref{s--ect@comma{}ion} s--ect,ion @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } s--ect,iona , in cross refa comma, in titlea comma, in filea , in manual name @ref{chapter,cross ref name} chaptercross ref name @ref{chapter,,title} chaptertitle @ref{chapter,,,file name} chapterfile name @ref{chapter,,,,manual} chaptermanual @ref{chapter,cross ref name,title,} chaptercross ref nametitle @ref{chapter,cross ref name,,file name} chaptercross ref namefile name @ref{chapter,cross ref name,,,manual} chaptercross ref namemanual @ref{chapter,cross ref name,title,file name} chaptercross ref nametitlefile name @ref{chapter,cross ref name,title,,manual} chaptercross ref nametitlemanual @ref{chapter,cross ref name,title, file name, manual} chaptercross ref nametitlefile namemanual @ref{chapter,,title,file name} chaptertitlefile name @ref{chapter,,title,,manual} chaptertitlemanual @ref{chapter,,title, file name, manual} chaptertitlefile namemanual @ref{chapter,,,file name,manual} chapterfile namemanual @ref{(pman)anode,cross ref name} (pman)anodecross ref name @ref{(pman)anode,,title} (pman)anodetitle @ref{(pman)anode,,,file name} (pman)anodefile name @ref{(pman)anode,,,,manual} (pman)anodemanual @ref{(pman)anode,cross ref name,title,} (pman)anodecross ref nametitle @ref{(pman)anode,cross ref name,,file name} (pman)anodecross ref namefile name @ref{(pman)anode,cross ref name,,,manual} (pman)anodecross ref namemanual @ref{(pman)anode,cross ref name,title,file name} (pman)anodecross ref nametitlefile name @ref{(pman)anode,cross ref name,title,,manual} (pman)anodecross ref nametitlemanual @ref{(pman)anode,cross ref name,title, file name, manual} (pman)anodecross ref nametitlefile namemanual @ref{(pman)anode,,title,file name} (pman)anodetitlefile name @ref{(pman)anode,,title,,manual} (pman)anodetitlemanual @ref{(pman)anode,,title, file name, manual} (pman)anodetitlefile namemanual @ref{(pman)anode,,,file name,manual} (pman)anodefile namemanual @inforef{chapter, cross ref name, file name} See chaptercross ref namefile name @inforef{chapter} See chapter @inforef{chapter, cross ref name} See chaptercross ref name @inforef{chapter,,file name} See chapterfile name @inforef{node, cross ref name, file name} See nodecross ref namefile name @inforef{node} See node @inforef{node, cross ref name} See nodecross ref name @inforef{node,,file name} See nodefile name @inforef{chapter, cross ref name, file name, spurious arg} See chaptercross ref namefile name, spurious arg @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} See s--ect,iona , in cross refa comma, in file • a l–ine
    a a b b l–ine
    a− a index entry between item and itemxb− b l–ine
    c–artouche f–lushleft f–lushright
    ce–ntered line
    \input texinfo @c -*-texinfo-*- @setfilename simplest.info @node Top This is a very simple texi manual @ <>. @bye in verbatim '' xml para '' majorheading chapheading heading subheading subsubheading In example. < > " & ' ` ``simple-double--three---four----''&linebreak; code: ``simple-double--three---four----'' &linebreak; asis: ``simple-double--three---four----'' &linebreak; strong: ``simple-double--three---four----'' &linebreak; kbd: ``simple-double--three---four----'' &linebreak; ``simple-double--three---four----''&linebreak; –option–foption @"u ü @"{U} Ü @~n ñ @^a â @'e é @=o o¯ @`i ì @'{e} é @'{@dotless{i}} í @dotless{i} i @dotless{j} j @`{@=E} E¯` @l{} /l @,{@'C} C', @,c ç @,c@"u çü &linebreak; @* &linebreak; @ followed by a space &space; @ followed by a tab &space; @ followed by a new line &space;@- @| @: @! &eosexcl; @? &eosquest; @. &eosperiod; @@ @ @} } @{ { @/ foo vs. bar. colon :And something else. semi colon ;. And ? ?. Now ! !@ but , , @TeX &tex; @LaTeX &latex; @bullet • @copyright ©right; @dots &dots; @enddots &enddots; @equiv == @error error--> @expansion ==> @minus − @point -!- @print -| @result ⇒ @today a sunny day @aa å @AA Å @ae æ @oe œ @AE Æ @OE Œ @o ø @O Ø @ss ß @l /l @L /L @exclamdown ¡ @questiondown ¿ @pounds £ @registeredsymbol ®istered; @ordf ª @ordm º @comma , @quotedblleft “ @quotedblright ” @quoteleft ‘ @quoteright ’ @quotedblbase „ @quotesinglbase ‚ @guillemetleft « @guillemetright » @guillemotleft « @guillemotright » @guilsinglleft ‹ @guilsinglright › @textdegree ° @euro € @arrow → @leq ≤ @geq ≥ @acronym{--a,an accronym} --aan accronym @acronym{--a} --a @abbr{@'E--. @comma{}A., @'Etude Autonome } É--. ,A.Étude Autonome @abbr{@'E--. @comma{}A.} É--. ,A. @asis{--a} --a @b{--a} --a @cite{--a} --a @code{--a} --a @command{--a} --a @ctrl{--a} --a @dfn{--a} --a @dmn{--a} --a @email{--a,--b} --a--b @email{,--b} --b @email{--a} --a @emph{--a} --a @env{--a} --a @file{--a} --a @i{--a} --a @kbd{--a} --a @key{--a} --a @math{--a {\frac{1}{2}} @minus{}} --a \frac12 − @option{--a} @r{--a} --a @samp{--a} --a @sc{--a} --a @strong{--a} --a @t{--a} --a @sansserif{--a} --a @titlefont{--a} --a @indicateurl{--a} --a @uref{--a,--b} --a--b @uref{--a} --a @uref{,--b} --b @uref{--a,--b,--c} --a--b--c @uref{,--b,--c} --b--c @uref{--a,,--c} --a--c @uref{,,--c} --c @url{--a,--b} --a--b @url{--a,} --a @url{,--b} --b @var{--a} --a @verb{:--a:} --a @verb{:a < & @ % " -- b:} a < & @ % " -- b @w{} @H{a} a'' @H{--a} --a'' @dotaccent{a} a. @dotaccent{--a} --a. @ringaccent{a} a* @ringaccent{--a} --a* @tieaccent{a} a[ @tieaccent{--a} --a[ @u{a} a( @u{--a} --a( @ubaraccent{a} a_ @ubaraccent{--a} --a_ @udotaccent{a} .a @udotaccent{--a} .--a @v{a} a< @v{--a} --a< @,{c} ç @,{--c} --c, @footnote{in footnote} in footnote @footnote{in footnote2} in footnote2 @image{f--ile} @image{f--ile,l--i} @image{f--ile,,l--e} @image{f--ile,,,alt} alt @image{f--ile,,,,e-d-xt} @image{f--ile,aze,az,alt,e--xt} alt @image{f-ile,aze,,a--lt} a–lt @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} alt @clicksequence{click @click{} A} click A After clickstyle ⇒ @clicksequence{click @click{} A} click A A quot---ation Note: A Note note: A note Caution: Caution Important: Important Tip: a Tip Warning: a Warning. something é &tex;: The something é &tex; is here. @ at the end of line A @ at the end of the @quotation line. something, other thing: something, other thing Note, the note: Note, the note Empty: : &linebreak;: i--temize + i--tem + b--ullet minu--s e--mph item after emph e--mph item • a–n itemize lineindex entry within itemize i--tem 1 i--tem 2 e--numerate 600 700 mu--ltitable headitem another tab mu--ltitable item multitable tab mu--ltitable item 2 multitable tab 2 index entry within multitable lone mu--ltitable item 6 8 truc bidule e--xample some text s--mallexample d--isplay s--malldisplay l--isp s--malllisp f--ormat s--mallformat d--effn_namec--ategoryd--effn_name a--rguments... d--effn de--ffn_namecate--goryde--ffn_name ar--guments more args &linebreak; even more so def--fn ifseti a g index entry within deffntruccmdetruc log trapCommandlog trap log trap1Command log trap1 log trap2 Commandlog trap2 id ulecmdeid ule truc id i ulecmde2id i ule truc id i ule aaa machinmachin bidule machinbidule machin machintrucmachin truc followedtrucfollowed by a comment truc atruca b c d e f g h i deffnxtrucdeffnx before end deffn deffnemptydeffn deffnemptydeffn with deffnx deffnxemptydeffnx ifseti a g truccmdetruc text in def item for second def item d--efvr_namec--ategoryd--efvr_name d--efvr d--eftypefn_namec--ategoryt--yped--eftypefn_name a--rguments... d--eftypefn d--eftypeop_name on c--lassc--ategoryt--yped--eftypeop_name a--rguments... d--eftypeop d--eftypevr_namec--ategoryt--yped--eftypevr_name d--eftypevr d--efcv_namec--ategoryc--lassd--efcv_name d--efcv d--efop_name on c--lassc--ategoryc--lassd--efop_name a--rguments... d--efop d--eftp_namec--ategoryd--eftp_name a--ttributes... d--eftp d--efun_nameFunctiond--efun_name a--rguments... d--efun d--efmac_nameMacrod--efmac_name a--rguments... d--efmac d--efspec_nameSpecial Formd--efspec_name a--rguments... d--efspec d--efvar_nameVariabled--efvar_name argvar argvar1 d--efvar d--efopt_nameUser Optiond--efopt_name d--efopt d--eftypefun_nameFunctiont--yped--eftypefun_name a--rguments... d--eftypefun d--eftypevar_nameVariablet--yped--eftypevar_name d--eftypevar d--efivar_nameInstance Variablec--lassd--efivar_name d--efivar d--eftypeivar_name of c--lassInstance Variablet--yped--eftypeivar_name d--eftypeivar d--efmethod_name on c--lassMethodc--lassd--efmethod_name a--rguments... d--efmethod d--eftypemethod_name on c--lassMethodt--yped--eftypemethod_name a--rguments... d--eftypemethod @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} See c---hapter@cross r---ef name@t---itle@file n---ame@ma---nual@. @ref{chapter, cross ref name, title, file name, manual} chaptercross ref nametitlefile namemanual @pxref{chapter, cross ref name, title, file name, manual} see chaptercross ref nametitlefile namemanual @inforef{chapter, cross ref name, file name} See chaptercross ref namefile name @ref{chapter} chapter @xref{chapter} See chapter. @pxref{chapter} see chapter @ref{s--ect@comma{}ion} s--ect,ion @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } s--ect,iona , in cross refa comma, in titlea comma, in filea , in manual name @ref{chapter,cross ref name} chaptercross ref name @ref{chapter,,title} chaptertitle @ref{chapter,,,file name} chapterfile name @ref{chapter,,,,manual} chaptermanual @ref{chapter,cross ref name,title,} chaptercross ref nametitle @ref{chapter,cross ref name,,file name} chaptercross ref namefile name @ref{chapter,cross ref name,,,manual} chaptercross ref namemanual @ref{chapter,cross ref name,title,file name} chaptercross ref nametitlefile name @ref{chapter,cross ref name,title,,manual} chaptercross ref nametitlemanual @ref{chapter,cross ref name,title, file name, manual} chaptercross ref nametitlefile namemanual @ref{chapter,,title,file name} chaptertitlefile name @ref{chapter,,title,,manual} chaptertitlemanual @ref{chapter,,title, file name, manual} chaptertitlefile namemanual @ref{chapter,,,file name,manual} chapterfile namemanual @ref{(pman)anode,cross ref name} (pman)anodecross ref name @ref{(pman)anode,,title} (pman)anodetitle @ref{(pman)anode,,,file name} (pman)anodefile name @ref{(pman)anode,,,,manual} (pman)anodemanual @ref{(pman)anode,cross ref name,title,} (pman)anodecross ref nametitle @ref{(pman)anode,cross ref name,,file name} (pman)anodecross ref namefile name @ref{(pman)anode,cross ref name,,,manual} (pman)anodecross ref namemanual @ref{(pman)anode,cross ref name,title,file name} (pman)anodecross ref nametitlefile name @ref{(pman)anode,cross ref name,title,,manual} (pman)anodecross ref nametitlemanual @ref{(pman)anode,cross ref name,title, file name, manual} (pman)anodecross ref nametitlefile namemanual @ref{(pman)anode,,title,file name} (pman)anodetitlefile name @ref{(pman)anode,,title,,manual} (pman)anodetitlemanual @ref{(pman)anode,,title, file name, manual} (pman)anodetitlefile namemanual @ref{(pman)anode,,,file name,manual} (pman)anodefile namemanual @inforef{chapter, cross ref name, file name} See chaptercross ref namefile name @inforef{chapter} See chapter @inforef{chapter, cross ref name} See chaptercross ref name @inforef{chapter,,file name} See chapterfile name @inforef{node, cross ref name, file name} See nodecross ref namefile name @inforef{node} See node @inforef{node, cross ref name} See nodecross ref name @inforef{node,,file name} See nodefile name @inforef{chapter, cross ref name, file name, spurious arg} See chaptercross ref namefile name, spurious arg @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} See s--ect,iona , in cross refa comma, in file • a l--ine
    a a b b l--ine
    a− a index entry between item and itemxb− b l--ine
    c--artouche f--lushleft f--lushright
    ce--ntered line
    \input texinfo @c -*-texinfo-*- @setfilename simplest.info @node Top This is a very simple texi manual @ <>. @bye in verbatim '' xml para '' majorheading chapheading heading subheading subsubheading
    t–rucT–ruc.?at–rucT–ruc.?a cp cp fn fn vr vr ky ky pg pg tp tp
    chapter chapter2 Top Top chapter in footnote s--ect,ion s–ect,ion s–ect,ion Menu comment “simple-double–three—four—-”&linebreak; s--ect,ion chapter
    A section subsection subsection
    subsection s--ect,ion subsection subsubsection ``simple-double--three---four----'' subsubsection “simple-double–three—four—-” subsubsection ``simple-double--three---four----'' subsection subsubsection “simple-double–three—four—-” chapter2 chapter Top chapter 2 cp fn
    texi2html-1.82/test/formatting/res/formatting_xml/formatting.20000644000175000017500000000326411264347123026451 0ustar flichtenheldflichtenheld** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) i18n: missing string See i18n: missing string see texi2html-1.82/test/formatting/res/ref_in_anchor/0000755000175000017500000000000011264347123023751 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/ref_in_anchor/ref_in_anchor.20000644000175000017500000000000011264347123026616 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/ref_in_anchor/ref_in_anchor.html0000644000175000017500000000361211264347123027435 0ustar flichtenheldflichtenheld Untitled Document

    Top

    Top node

    anchor{TOP} . ref to TOP @ref{Top}: TOP Top.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/formatting/res/texi_tex/0000755000175000017500000000000011264347123023006 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_tex/tex_l2h.tex0000644000175000017500000000206611264347123025101 0ustar flichtenheldflichtenheld% This document was automatically generated by the l2h extenstion of texi2html % DO NOT EDIT !!! \documentclass{article} \usepackage{html} \begin{document} \begin{rawhtml} \end{rawhtml} some $$ \chi^2 = \sum_{i=1}^N \left(y_i - (a + b x_i) \over \sigma_i\right)^2 $$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} some tex \TeX \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} ${x^i}\over{\tan y}$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $a @\ b$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $@code{math code}$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $ \underline{@code{math \hbox{ code }}} \sum_{i}{\underline{f}}$ \begin{rawhtml} \end{rawhtml} texi2html-1.82/test/formatting/res/texi_tex/tex.passtexi0000644000175000017500000000232111264347123025366 0ustar flichtenheldflichtenheldtex.texi(,2) tex.texi(,3) @node Top tex.texi(,4) @top Tests tex.texi(,5) tex.texi(,7) Now tex on the same line @tex some tex.texi(,8) tex.texi(,9) $$ \chi^2 = \sum_{i=1}^N tex.texi(,10) \left(y_i - (a + b x_i) tex.texi(,11) \over \sigma_i\right)^2 $$ tex.texi(,12) tex.texi(,13) tex.texi(,14) @end tex bidule tex.texi(,15) Some text one the line following @@end tex tex.texi(,17) tex.texi(,18) Now tex on the following line, valid fot tex (with @@end tex on a line). tex.texi(,19) @tex some tex.texi(,20) tex.texi(,21) tex \TeX tex.texi(,22) @end tex tex.texi(,23) tex.texi(,24) Same that @@html (but empty following line not ignored). tex.texi(,25) tex.texi(,26) Test of @@math tex.texi(,27) Here some @math{{x^i}\over{\tan y}}. tex.texi(,28) tex.texi(,29) Maths with protected \: tex.texi(,30) @math{a @\ b}. tex.texi(,31) tex.texi(,32) Maths with code @@-command: tex.texi(,33) tex.texi(,34) @math{@code{math code}} tex.texi(,35) tex.texi(,36) Maths with code @@-command and braces: tex.texi(,37) tex.texi(,38) @math{ \underline{@code{math \hbox{ code }}} \sum_{i}{\underline{f}}} tex.texi(,39) tex.texi(,40) @@\ outside of math tex.texi(,41) tex.texi(,42) @\ tex.texi(,43) tex.texi(,44) @bye texi2html-1.82/test/formatting/res/texi_tex/tex.texi0000644000175000017500000000127211264347123024503 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top @top Tests Now tex on the same line @tex some $$ \chi^2 = \sum_{i=1}^N \left(y_i - (a + b x_i) \over \sigma_i\right)^2 $$ @end tex bidule Some text one the line following @@end tex Now tex on the following line, valid fot tex (with @@end tex on a line). @tex some tex \TeX @end tex Same that @@html (but empty following line not ignored). Test of @@math Here some @math{{x^i}\over{\tan y}}. Maths with protected \: @math{a @\ b}. Maths with code @@-command: @math{@code{math code}} Maths with code @@-command and braces: @math{ \underline{@code{math \hbox{ code }}} \sum_{i}{\underline{f}}} @@\ outside of math @\ @bye texi2html-1.82/test/formatting/res/texi_tex/tex.20000644000175000017500000000000011264347123023657 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_tex/tex.passfirst0000644000175000017500000000163111264347123025547 0ustar flichtenheldflichtenheldtex.texi(,2) tex.texi(,3) @node Top tex.texi(,4) @top Tests tex.texi(,5) tex.texi(,14) Now tex on the same line @special_tex_1{} bidule tex.texi(,15) Some text one the line following @@end tex tex.texi(,17) tex.texi(,18) Now tex on the following line, valid fot tex (with @@end tex on a line). tex.texi(,22) @special_tex_2{} tex.texi(,23) tex.texi(,24) Same that @@html (but empty following line not ignored). tex.texi(,25) tex.texi(,26) Test of @@math tex.texi(,27) Here some @special_math_1{}. tex.texi(,28) tex.texi(,29) Maths with protected \: tex.texi(,30) @special_math_2{}. tex.texi(,31) tex.texi(,32) Maths with code @@-command: tex.texi(,33) tex.texi(,34) @special_math_3{} tex.texi(,35) tex.texi(,36) Maths with code @@-command and braces: tex.texi(,37) tex.texi(,38) @special_math_4{} tex.texi(,39) tex.texi(,40) @@\ outside of math tex.texi(,41) tex.texi(,42) @\ tex.texi(,43) tex.texi(,44) @bye texi2html-1.82/test/formatting/res/texi_symbol_after_block/0000755000175000017500000000000011264347123026046 5ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_symbol_after_block/symbol_after_block.passfirst0000644000175000017500000000645611264347123033661 0ustar flichtenheldflichtenheldsymbol_after_block.texi(,2) symbol_after_block.texi(,3) @setfilename symbol_after_block.info symbol_after_block.texi(,4) symbol_after_block.texi(,5) @node Top symbol_after_block.texi(,6) @top Symbol after block symbol_after_block.texi(,7) symbol_after_block.texi(,8) Html: symbol_after_block.texi(,9) symbol_after_block.texi(,10) @html symbol_after_block.texi(,11) In html symbol_after_block.texi(,12) @end html. On the line. symbol_after_block.texi(,13) symbol_after_block.texi(,14) @html symbol_after_block.texi(,15) In html symbol_after_block.texi(,16) @end html@@ On the line. symbol_after_block.texi(,17) symbol_after_block.texi(,18) Verbatim: symbol_after_block.texi(,19) symbol_after_block.texi(,20) @verbatim symbol_after_block.texi(,21) In verbatim symbol_after_block.texi(,22) @end verbatim; symbol_after_block.texi(,23) symbol_after_block.texi(,24) @verbatim symbol_after_block.texi(,25) In verbatim symbol_after_block.texi(,26) @end verbatim@@ symbol_after_block.texi(,27) symbol_after_block.texi(,28) Table: symbol_after_block.texi(,29) symbol_after_block.texi(,30) @table @bullet symbol_after_block.texi(,31) @item a symbol_after_block.texi(,32) l--ine symbol_after_block.texi(,33) @end table+ symbol_after_block.texi(,34) symbol_after_block.texi(,35) @table @bullet symbol_after_block.texi(,36) @item a symbol_after_block.texi(,37) l--ine symbol_after_block.texi(,38) @end table@@ symbol_after_block.texi(,39) symbol_after_block.texi(,40) Itemize: symbol_after_block.texi(,41) symbol_after_block.texi(,42) @itemize @emph symbol_after_block.texi(,43) @item e--mph item symbol_after_block.texi(,44) @end itemize'' symbol_after_block.texi(,45) symbol_after_block.texi(,46) @itemize @emph symbol_after_block.texi(,47) @item e--mph item symbol_after_block.texi(,48) @end itemize@@ symbol_after_block.texi(,49) symbol_after_block.texi(,50) Multitable: symbol_after_block.texi(,51) symbol_after_block.texi(,52) @multitable @columnfractions 6 7 symbol_after_block.texi(,53) @headitem mu--ltitable headitem @tab another tab symbol_after_block.texi(,54) @item mu--ltitable item @tab multitable tab symbol_after_block.texi(,55) @end multitable^ symbol_after_block.texi(,56) symbol_after_block.texi(,57) @multitable @columnfractions 6 7 symbol_after_block.texi(,58) @headitem mu--ltitable headitem @tab another tab symbol_after_block.texi(,59) @item mu--ltitable item @tab multitable tab symbol_after_block.texi(,60) @end multitable@{ symbol_after_block.texi(,61) symbol_after_block.texi(,62) Flushleft: symbol_after_block.texi(,63) symbol_after_block.texi(,64) @flushleft symbol_after_block.texi(,65) flushleft symbol_after_block.texi(,66) @end flushleft! symbol_after_block.texi(,67) symbol_after_block.texi(,68) @flushleft symbol_after_block.texi(,69) flushleft symbol_after_block.texi(,70) @end flushleft@@ symbol_after_block.texi(,71) symbol_after_block.texi(,72) Copying: symbol_after_block.texi(,73) symbol_after_block.texi(,76) * symbol_after_block.texi(,77) symbol_after_block.texi(,80) @@ symbol_after_block.texi(,81) symbol_after_block.texi(,82) @insertcopying symbol_after_block.texi(,83) symbol_after_block.texi(,84) An html, all on one line: symbol_after_block.texi(,85) symbol_after_block.texi(,86) Hi, my name is @html symbol_after_block.texi(,87) Graham@end html. symbol_after_block.texi(,88) symbol_after_block.texi(,89) @bye texi2html-1.82/test/formatting/res/texi_symbol_after_block/symbol_after_block.texi0000644000175000017500000000201411264347123032576 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename symbol_after_block.info @node Top @top Symbol after block Html: @html In html @end html. On the line. @html In html @end html@@ On the line. Verbatim: @verbatim In verbatim @end verbatim; @verbatim In verbatim @end verbatim@@ Table: @table @bullet @item a l--ine @end table+ @table @bullet @item a l--ine @end table@@ Itemize: @itemize @emph @item e--mph item @end itemize'' @itemize @emph @item e--mph item @end itemize@@ Multitable: @multitable @columnfractions 6 7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @end multitable^ @multitable @columnfractions 6 7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @end multitable@{ Flushleft: @flushleft flushleft @end flushleft! @flushleft flushleft @end flushleft@@ Copying: @copying Copying @end copying* @copying Copying @end copying@@ @insertcopying An html, all on one line: Hi, my name is @html Graham@end html. @bye texi2html-1.82/test/formatting/res/texi_symbol_after_block/symbol_after_block.20000644000175000017500000000000011264347123031757 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/res/texi_symbol_after_block/symbol_after_block.passtexi0000644000175000017500000000673411264347123033502 0ustar flichtenheldflichtenheldsymbol_after_block.texi(,2) symbol_after_block.texi(,3) @setfilename symbol_after_block.info symbol_after_block.texi(,4) symbol_after_block.texi(,5) @node Top symbol_after_block.texi(,6) @top Symbol after block symbol_after_block.texi(,7) symbol_after_block.texi(,8) Html: symbol_after_block.texi(,9) symbol_after_block.texi(,10) @html symbol_after_block.texi(,11) In html symbol_after_block.texi(,12) @end html. On the line. symbol_after_block.texi(,13) symbol_after_block.texi(,14) @html symbol_after_block.texi(,15) In html symbol_after_block.texi(,16) @end html@@ On the line. symbol_after_block.texi(,17) symbol_after_block.texi(,18) Verbatim: symbol_after_block.texi(,19) symbol_after_block.texi(,20) @verbatim symbol_after_block.texi(,21) In verbatim symbol_after_block.texi(,22) @end verbatim; symbol_after_block.texi(,23) symbol_after_block.texi(,24) @verbatim symbol_after_block.texi(,25) In verbatim symbol_after_block.texi(,26) @end verbatim@@ symbol_after_block.texi(,27) symbol_after_block.texi(,28) Table: symbol_after_block.texi(,29) symbol_after_block.texi(,30) @table @bullet symbol_after_block.texi(,31) @item a symbol_after_block.texi(,32) l--ine symbol_after_block.texi(,33) @end table+ symbol_after_block.texi(,34) symbol_after_block.texi(,35) @table @bullet symbol_after_block.texi(,36) @item a symbol_after_block.texi(,37) l--ine symbol_after_block.texi(,38) @end table@@ symbol_after_block.texi(,39) symbol_after_block.texi(,40) Itemize: symbol_after_block.texi(,41) symbol_after_block.texi(,42) @itemize @emph symbol_after_block.texi(,43) @item e--mph item symbol_after_block.texi(,44) @end itemize'' symbol_after_block.texi(,45) symbol_after_block.texi(,46) @itemize @emph symbol_after_block.texi(,47) @item e--mph item symbol_after_block.texi(,48) @end itemize@@ symbol_after_block.texi(,49) symbol_after_block.texi(,50) Multitable: symbol_after_block.texi(,51) symbol_after_block.texi(,52) @multitable @columnfractions 6 7 symbol_after_block.texi(,53) @headitem mu--ltitable headitem @tab another tab symbol_after_block.texi(,54) @item mu--ltitable item @tab multitable tab symbol_after_block.texi(,55) @end multitable^ symbol_after_block.texi(,56) symbol_after_block.texi(,57) @multitable @columnfractions 6 7 symbol_after_block.texi(,58) @headitem mu--ltitable headitem @tab another tab symbol_after_block.texi(,59) @item mu--ltitable item @tab multitable tab symbol_after_block.texi(,60) @end multitable@{ symbol_after_block.texi(,61) symbol_after_block.texi(,62) Flushleft: symbol_after_block.texi(,63) symbol_after_block.texi(,64) @flushleft symbol_after_block.texi(,65) flushleft symbol_after_block.texi(,66) @end flushleft! symbol_after_block.texi(,67) symbol_after_block.texi(,68) @flushleft symbol_after_block.texi(,69) flushleft symbol_after_block.texi(,70) @end flushleft@@ symbol_after_block.texi(,71) symbol_after_block.texi(,72) Copying: symbol_after_block.texi(,73) symbol_after_block.texi(,74) @copying symbol_after_block.texi(,75) Copying symbol_after_block.texi(,76) @end copying* symbol_after_block.texi(,77) symbol_after_block.texi(,78) @copying symbol_after_block.texi(,79) Copying symbol_after_block.texi(,80) @end copying@@ symbol_after_block.texi(,81) symbol_after_block.texi(,82) @insertcopying symbol_after_block.texi(,83) symbol_after_block.texi(,84) An html, all on one line: symbol_after_block.texi(,85) symbol_after_block.texi(,86) Hi, my name is @html symbol_after_block.texi(,87) Graham@end html. symbol_after_block.texi(,88) symbol_after_block.texi(,89) @bye texi2html-1.82/test/formatting/float_with_at_commands.texi0000644000175000017500000000044411264347123025766 0ustar flichtenheldflichtenheld\input texinfo.tex @c -*-texinfo-*- @setfilename float_with_at_commands.info @node Top @top Test floats with @@-commands @float entr@'ee, premi@`ere entr@'ee Ceci est notre premi@`ere entr@'ee. @caption{La premi@`ere entr@'ee est importante} @end float @listoffloats entr@'ee @bye texi2html-1.82/test/formatting/table_in_table_item.texi0000644000175000017500000000151211264347123025220 0ustar flichtenheldflichtenheld\input texinfo.tex @c -*-texinfo-*- @setfilename table_in_table_item.texi @node Top @top Test table nested in table item @table @asis @item item @table @asis @item in nested table item in nested table line @end table in table line @end table And in code @code{ @table @asis @item item @table @asis @item in table in table item in nested table line @end table @end table } and in preformatted @example @table @asis @item item in preformatted @table @asis @item in table in table item in preformatted in nested table line in preformatted @end table @end table @end example and in preformatted in code @code{ @example @table @asis @item item in preformatted @table @asis @item in table in table item in preformatted in nested table line in preformatted @end table @end table @end example } @bye texi2html-1.82/test/formatting/f--ile.gif0000644000175000017500000000000011264347123022112 0ustar flichtenheldflichtenheldtexi2html-1.82/test/formatting/indicateurl_paragraph.texi0000644000175000017500000000057611264347123025617 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename indicateurl_paragraph.info @node Top Test a indicateurl with end of line, and including a blank line. In texi2html indicateurl is a simple_style, meaning that it should not be cut by paragraph. @indicateurl{http://begin continue on other line} @c texi2dvi doesn't accept this @indicateurl{http://begin2 cut by blank line} @bye texi2html-1.82/test/formatting/index_in_item_line_table_in_code.texi0000644000175000017500000000045511264347123027734 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename index_in_item_line_table_in_code.info @node Top @top test index entries in @@item @@table in @@code @code{ @table @asis @item @cindex index @option{opt} More text @item @cindex 2 index @option{nopt} Even more @end table } @vindex another index @bye texi2html-1.82/test/formatting/commands_in_ifset.texi0000644000175000017500000006547611264347123024762 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename commands_in_ifset.info @node Top @top Top section @c @c test a lot of constructs in @ifset, imbricated ifset, macro expansion @c in ifset. The ifset are not set. Otherwise there would be a lot of @c syntax errors. @c test @definfoenclose and @documentencoding in ifset @ifset notset @definfoenclose @definfoenclose strong,:,: @documentencoding ISO-8859-1 @end ifset @strong{text} @c test all the regular constructs in ifset @ifset notset < > " & ``simple-double--three---four----''@* code: @code{``simple-double--three---four----''} @* asis: @asis{``simple-double--three---four----''} @* strong: @strong{``simple-double--three---four----''} @* kbd: @kbd{``simple-double--three---four----''} @* @cindex --option @cindex `` @findex `` @findex --foption @@"u @"u @@"@{U@} @"{U} @@~n @~n @@^a @^a @@'e @'e @@=o @=o @@`i @`i @@'@{@@dotless@{i@}@} @'{@dotless{i}} @@dotless@{i@} @dotless{i} @@dotless@{ij@} @dotless{ij} @@dotless@{truc1@} @dotless{truc1} @@* @* @@ followed by a space @ @@ followed by a tab @ @@ followed by a new line @ @code{@@-} @- @code{@@|} @| @code{@@:} @: @code{@@!} @! @code{@@?} @? @code{@@.} @. @code{@@@@} @@ @code{@@@}} @} @code{@@@{} @{ @code{@@/} @/ @code{@@#} @# @@TeX @TeX{} @@LaTeX @LaTeX{} @c @br{} @@bullet @bullet{} @@copyright @copyright{} @@dots @dots{} @@enddots @enddots{} @@equiv @equiv{} @@error @error{} @@expansion @expansion{} @@minus @minus{} @@point @point{} @@print @print{} @@result @result{} @@today @today{} @@aa @aa{} @@AA @AA{} @@ae @ae{} @@oe @oe{} @@AE @AE{} @@OE @OE{} @@o @o{} @@O @O{} @@ss @ss{} @@l @l{} @@L @L{} @@exclamdown @exclamdown{} @@questiondown @questiondown{} @@pounds @pounds{} @@registeredsymbol @registeredsymbol{} @@ordf @ordf{} @@ordm @ordm{} @@comma @comma{} @code{@@acronym@{--a,an accronym @@comma@{@} @@enddots@{@}@}} @acronym{--a,an accronym @comma{} @enddots{}} @code{@@acronym@{--a@}} @acronym{--a} @code{@@asis@{--a@}} @asis{--a} @code{@@b@{--a@}} @b{--a} @code{@@cite@{--a@}} @cite{--a} @code{@@code@{--a@}} @code{--a} @code{@@command@{--a@}} @command{--a} @code{@@ctrl@{--a@}} @ctrl{--a} @code{@@dfn@{--a@}} @dfn{--a} @code{@@dmn@{--a@}} @dmn{--a} @code{@@email@{--a,--b@}} @email{--a,--b} @code{@@email@{,--b@}} @email{,--b} @code{@@email@{--a@}} @email{--a} @code{@@emph@{--a@}} @emph{--a} @code{@@env@{--a@}} @env{--a} @code{@@file@{--a@}} @file{--a} @code{@@i@{--a@}} @i{--a} @code{@@kbd@{--a@}} @kbd{--a} @code{@@key@{--a@}} @key{--a} @code{@@math@{--a@}} @math{--a} @code{@@option@{--a@}} @option{--a} @code{@@r@{--a@}} @r{--a} @code{@@samp@{--a@}} @samp{--a} @code{@@sc@{--a@}} @sc{--a} @code{@@strong@{--a@}} @strong{--a} @code{@@t@{--a@}} @t{--a} @code{@@titlefont@{--a@}} @titlefont{--a} @code{@@indicateurl@{--a@}} @indicateurl{--a} @code{@@uref@{--a,--b@}} @uref{--a,--b} @code{@@uref@{--a@}} @uref{--a} @code{@@uref@{,--b@}} @uref{,--b} @code{@@url@{--a,--b@}} @url{--a,--b} @code{@@url@{--a,@}} @url{--a,} @code{@@url@{,--b@}} @url{,--b} @code{@@var@{--a@}} @var{--a} @code{@@verb@{:--a:@}} @verb{:--a:} @code{@@w@{--a@}} @w{--a} @code{@@H@{a@}} @H{a} @code{@@H@{--a@}} @H{--a} @code{@@dotaccent@{a@}} @dotaccent{a} @code{@@dotaccent@{--a@}} @dotaccent{--a} @code{@@ringaccent@{a@}} @ringaccent{a} @code{@@ringaccent@{--a@}} @ringaccent{--a} @code{@@tieaccent@{a@}} @tieaccent{a} @code{@@tieaccent@{--a@}} @tieaccent{--a} @code{@@u@{a@}} @u{a} @code{@@u@{--a@}} @u{--a} @code{@@ubaraccent@{a@}} @ubaraccent{a} @code{@@ubaraccent@{--a@}} @ubaraccent{--a} @code{@@udotaccent@{a@}} @udotaccent{a} @code{@@udotaccent@{--a@}} @udotaccent{--a} @code{@@v@{a@}} @v{a} @code{@@v@{--a@}} @v{--a} @code{@@,@{c@}} @,{c} @code{@@,@{--c@}} @,{--c} @code{@@dotless@{--a@}} @dotless{--a} @code{@@dotless@{a@}} @dotless{a} @code{@@footnote@{in footnote@}} @footnote{in footnote} @code{@@footnote@{in footnote2@}} @footnote{in footnote2} @code{@@image@{f--ile,,e--xt@}} @image{f--ile,,e--xt} @code{@@image@{f--ile,,,,e--xt@}} @image{f--ile,,,,e--xt} @code{@@image@{f--ile,,,alt@}} @image{f--ile,,,alt} @code{@@image@{f--ile,aze,az,alt,e--xt@}} @image{f--ile,aze,az,alt,e--xt} @code{@@image@{f-ile,aze,,a--lt@}} @image{f-ile,aze,,a--lt} @code{@@image@{f--ile@}} @image{f--ile} @code{@@image@{,,e--xt@}} @image{,,e--xt} @code{@@image@{,,,e--xt@}} @image{,,,e--xt} @code{@@image@{file@@verb@{:jk _" %@@:@},,,alt@@verb@{:jk _" %@@:@}@}} @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} @code{@@image@{@@file@{f--ile@}@@@@@@.,aze,az,alt,@@file@{file ext@} e--xt@@@}} @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@}} @sp @sp 2 @quotation a q--uotation @end quotation @itemize @item i--temize @end itemize @itemize + @item i--tem + @end itemize @itemize @bullet @item b--ullet @end itemize @itemize @minus @item minu--s @end itemize @itemize @emph @item e--mph item @end itemize @itemize @emph after emph @item e--mph item @end itemize @itemize @bullet a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 6 7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @display d--isplay @end display @smalldisplay s--malldisplay @end smalldisplay @lisp l--isp @end lisp @smalllisp s--malllisp @end smalllisp @format f--ormat @end format @smallformat s--mallformat @end smallformat @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @deffn cate--gory de--ffn_name ar--guments @ more args @* even more so def--fn @end deffn @deffn fset @var{i} a g @deffnx {cmde} truc2 {} @deffnx Command {log trap} {} @deffnx Command { log trap1} {} @deffnx Command {log trap2 } {} @deffnx cmde @b{id ule} truc3 @deffnx cmde2 @b{id @samp{i} ule} truc4 @deffnx @b{id @samp{i} ule} @deffnx @deffnx aaa @deffnx {} {} @deffnx{} @deffnx{} machin @deffnx{} {bidule machin} @deffnx{truc5} machin @deffnx{truc6} { } @deffnx{truc7} @deffnx{} {} @deffnx {truc8} followed by a comment @c comment @deffnx truc9 machin bidule chose and } @deffnx truc10 machin bidule chose and } after @deffnx truc11 machin bidule chose and { @deffnx truc12 machin bidule chose and { and after Various deff lines @deffnx {truc13} after a deff item @c comment text in def item for second def item @deffnx {truc14} deffnx before end deffn @end deffn @defvr c--ategory d--efvr_name d--efvr @end defvr @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... d--eftypefn @end deftypefn @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... d--eftypeop @end deftypeop @deftypevr c--ategory t--ype d--eftypevr_name d--eftypevr @end deftypevr @defcv c--ategory c--lass d--efcv_name d--efcv @end defcv @defop c--ategory c--lass d--efop_name a--rguments... d--efop @end defop @deftp c--ategory d--eftp_name a--ttributes... d--eftp @end deftp @defun d--efun_name a--rguments... d--efun @end defun @defmac d--efmac_name a--rguments... d--efmac @end defmac @defspec d--efspec_name a--rguments... d--efspec @end defspec @defvar d--efvar_name d--efvar @end defvar @defopt d--efopt_name d--efopt @end defopt @deftypefun t--ype d--eftypefun_name a--rguments... d--eftypefun @end deftypefun @deftypevar t--ype d--eftypevar_name d--eftypevar @end deftypevar @defivar c--lass d--efivar_name d--efivar @end defivar @deftypeivar c--lass t--ype d--eftypeivar_name d--eftypeivar @end deftypeivar @defmethod c--lass d--efmethod_name a--rguments... d--efmethod @end defmethod @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... d--eftypemethod @end deftypemethod @code{@@xref@{chapter, cross ref name, title, file name, manual@}} @xref{chapter, cross ref name, title, file name, manual} @code{@@ref@{chapter, cross ref name, title, file name, manual@}} @ref{chapter, cross ref name, title, file name, manual} @code{@@pxref@{chapter, cross ref name, title, file name, manual@}} @pxref{chapter, cross ref name, title, file name, manual} @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} @code{@@ref@{chapter@}} @ref{chapter} @code{@@ref@{node@}} @ref{node} @code{@@ref@{,cross ref name@}} @ref{,cross ref name} @code{@@ref@{,,title@}} @ref{,,title} @code{@@ref@{,,,file name@}} @ref{,,,file name} @code{@@ref@{,,,,manual@}} @ref{,,,,manual} @code{@@ref@{chapter,cross ref name@}} @ref{chapter,cross ref name} @code{@@ref@{chapter,,title@}} @ref{chapter,,title} @code{@@ref@{chapter,,,file name@}} @ref{chapter,,,file name} @code{@@ref@{chapter,,,,manual@}} @ref{chapter,,,,manual} @code{@@ref@{node,cross ref name@}} @ref{node,cross ref name} @code{@@ref@{node,,title@}} @ref{node,,title} @code{@@ref@{node,,,file name@}} @ref{node,,,file name} @code{@@ref@{node,,,,manual@}} @ref{node,,,,manual} @code{@@ref@{chapter,cross ref name,title,@}} @ref{chapter,cross ref name,title,} @code{@@ref@{chapter,cross ref name,,file name@}} @ref{chapter,cross ref name,,file name} @code{@@ref@{chapter,cross ref name,,,manual@}} @ref{chapter,cross ref name,,,manual} @code{@@ref@{node,cross ref name,title,@}} @ref{node,cross ref name,title,} @code{@@ref@{node,cross ref name,,file name@}} @ref{node,cross ref name,,file name} @code{@@ref@{node,cross ref name,,,manual@}} @ref{node,cross ref name,,,manual} @code{@@ref@{chapter,cross ref name,title,file name@}} @ref{chapter,cross ref name,title,file name} @code{@@ref@{chapter,cross ref name,title,,manual@}} @ref{chapter,cross ref name,title,,manual} @code{@@ref@{node,cross ref name,title,file name@}} @ref{node,cross ref name,title,file name} @code{@@ref@{node,cross ref name,title,,manual@}} @ref{node,cross ref name,title,,manual} @code{@@ref@{chapter,cross ref name,title, file name, manual@}} @ref{chapter,cross ref name,title, file name, manual} @code{@@ref@{node,cross ref name,title, file name, manual@}} @ref{node,cross ref name,title, file name, manual} @code{@@ref@{chapter,,title,file name@}} @ref{chapter,,title,file name} @code{@@ref@{chapter,,title,,manual@}} @ref{chapter,,title,,manual} @code{@@ref@{node,,title,file name@}} @ref{node,,title,file name} @code{@@ref@{node,,title,,manual@}} @ref{node,,title,,manual} @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} @code{@@ref@{node,,title, file name, manual@}} @ref{node,,title, file name, manual} @code{@@ref@{chapter,,,file name,manual@}} @ref{chapter,,,file name,manual} @code{@@ref@{node,,,file name,manual@}} @ref{node,,,file name,manual} @code{@@ref@{,cross ref name,title,@}} @ref{,cross ref name,title,} @code{@@ref@{,cross ref name,,file name@}} @ref{,cross ref name,,file name} @code{@@ref@{,cross ref name,,,manual@}} @ref{,cross ref name,,,manual} @code{@@ref@{,cross ref name,title,file name@}} @ref{,cross ref name,title,file name} @code{@@ref@{,cross ref name,title,,manual@}} @ref{,cross ref name,title,,manual} @code{@@ref@{,cross ref name,title, file name, manual@}} @ref{,cross ref name,title, file name, manual} @code{@@ref@{,,title,file name@}} @ref{,,title,file name} @code{@@ref@{,,title,,manual@}} @ref{,,title,,manual} @code{@@ref@{,,title, file name, manual@}} @ref{,,title, file name, manual} @code{@@ref@{,,,file name,manual@}} @ref{,,,file name,manual} @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} @code{@@inforef@{chapter@}} @inforef{chapter} @code{@@inforef@{chapter, cross ref name@}} @inforef{chapter, cross ref name} @code{@@inforef@{chapter,,file name@}} @inforef{chapter,,file name} @code{@@inforef@{node, cross ref name, file name@}} @inforef{node, cross ref name, file name} @code{@@inforef@{node@}} @inforef{node} @code{@@inforef@{node, cross ref name@}} @inforef{node, cross ref name} @code{@@inforef@{node,,file name@}} @inforef{node,,file name} @code{@@inforef@{,cross ref name @}} @inforef{,cross ref name } @code{@@inforef@{,,file name@}} @inforef{,,file name} @code{@@inforef@{,cross ref name, file name@}} @inforef{,cross ref name, file name} @code{@@ref@{s--ect@@comma@{@}ion, a @@comma@{@} in cross ref, a comma@@comma@{@} in title, a comma@@comma@{@} in file, a @@comma@{@} in manual name @}} @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } @code{@@ref@{s--ect@@comma@{@}ion@}} @ref{s--ect@comma{}ion} @table @bullet @item a l--ine @end table @vtable @asis @item a l--ine @end vtable @ftable @minus @item a l--ine @end ftable @flushleft flushleft @end flushleft @flushright flushright @end flushright @center centered line @verbatiminclude simplest.texi @end ifset @c test @copying in ifset @ifset notset @copying copying @end copying @end ifset @ifset notset @copying @end ifset @c test indices, @contents and @bye in ifset @ifset notset @cindex t--ruc @cindex T--ruc @cindex . @cindex ? @cindex a @findex t--ruc @findex T--ruc @findex . @findex ? @findex a cp @printindex cp fn @printindex fn vr @printindex vr ky @printindex ky pg @printindex pg tp @printindex tp @contents @shortcontents @bye @end ifset @c test that @end ifset is ignored when appearing in @ignore @ifset notset @ignore @end ifset @end ignore text @end ifset @c test that lone braces are ignored in @ifset @ifset notset open { @end ifset @ifset notset close } @end ifset @c test that @end ifset is ignored when appearing in @verb, @verbatim, @c html, @ifset notset @verbatim @end ifset @end verbatim @end ifset @ifset notset @verb{% @end ifset %} @end ifset @ifset notset @html @ifset @end html @end ifset @c test that there is no error with a @table, @example, @deffn and @c @itemize opening in @ifset @ifset notset @table @end ifset @ifset notset @example @end ifset @ifset notset @deffn aaa @end ifset @ifset notset @itemize @item my item @end ifset @c test that there is no error with a @table, @example, @deffn and @c @itemize end in @ifset @ifset notset @end table @end ifset @ifset notset @end example @end ifset @ifset notset @end deffn @end ifset @ifset notset @end itemize @end ifset @c test that @-command opening is ignored when appearing in @ignore @ifset notset opend code @code{ @end ifset @c test that @deffnx is ignored in @ifset @ifset notset @deffnx something @end ifset @c test nested ifset @ifset notset @ifset nonotset doubly unset @end ifset @end ifset @c test that some wrong constructs are rightly ignored in nested @ifset @ifset notset @ifset nonotset @ignore @end ifset @end ignore @ifclear } @macro3 { @verb{% m%} @code{ @end ifset @end ifset @c test for @node in @ifset @ifset notset @node @end ifset @c test for @ifset without arg in @ifset @ifset notset text3 @ifset text4 @end ifset @end ifset @c define a macro and call it within a @ifset @macro mymacro < > " & ``simple-double--three---four----''@* code: @code{``simple-double--three---four----''} @* asis: @asis{``simple-double--three---four----''} @* strong: @strong{``simple-double--three---four----''} @* kbd: @kbd{``simple-double--three---four----''} @* @cindex --option @cindex `` @findex `` @findex --foption @@"u @"u @@"@{U@} @"{U} @@~n @~n @@^a @^a @@'e @'e @@=o @=o @@`i @`i @@'@{@@dotless@{i@}@} @'{@dotless{i}} @@dotless@{i@} @dotless{i} @@dotless@{ij@} @dotless{ij} @@dotless@{truc@} @dotless{truc} @@* @* @@ followed by a space @ @@ followed by a tab @ @@ followed by a new line @ @code{@@-} @- @code{@@|} @| @code{@@:} @: @code{@@!} @! @code{@@?} @? @code{@@.} @. @code{@@@@} @@ @code{@@@}} @} @code{@@@{} @{ @code{@@/} @/ @code{@@#} @# @@TeX @TeX{} @@LaTeX @LaTeX{} @c @br{} @@bullet @bullet{} @@copyright @copyright{} @@dots @dots{} @@enddots @enddots{} @@equiv @equiv{} @@error @error{} @@expansion @expansion{} @@minus @minus{} @@point @point{} @@print @print{} @@result @result{} @@today @today{} @@aa @aa{} @@AA @AA{} @@ae @ae{} @@oe @oe{} @@AE @AE{} @@OE @OE{} @@o @o{} @@O @O{} @@ss @ss{} @@l @l{} @@L @L{} @@exclamdown @exclamdown{} @@questiondown @questiondown{} @@pounds @pounds{} @@registeredsymbol @registeredsymbol{} @@ordf @ordf{} @@ordm @ordm{} @@comma @comma{} @code{@@acronym@{--a,an accronym @@comma@{@} @@enddots@{@}@}} @acronym{--a,an accronym @comma{} @enddots{}} @code{@@acronym@{--a@}} @acronym{--a} @code{@@asis@{--a@}} @asis{--a} @code{@@b@{--a@}} @b{--a} @code{@@cite@{--a@}} @cite{--a} @code{@@code@{--a@}} @code{--a} @code{@@command@{--a@}} @command{--a} @code{@@ctrl@{--a@}} @ctrl{--a} @code{@@dfn@{--a@}} @dfn{--a} @code{@@dmn@{--a@}} @dmn{--a} @code{@@email@{--a,--b@}} @email{--a,--b} @code{@@email@{,--b@}} @email{,--b} @code{@@email@{--a@}} @email{--a} @code{@@emph@{--a@}} @emph{--a} @code{@@env@{--a@}} @env{--a} @code{@@file@{--a@}} @file{--a} @code{@@i@{--a@}} @i{--a} @code{@@kbd@{--a@}} @kbd{--a} @code{@@key@{--a@}} @key{--a} @code{@@math@{--a@}} @math{--a} @code{@@option@{--a@}} @option{--a} @code{@@r@{--a@}} @r{--a} @code{@@samp@{--a@}} @samp{--a} @code{@@sc@{--a@}} @sc{--a} @code{@@strong@{--a@}} @strong{--a} @code{@@t@{--a@}} @t{--a} @code{@@titlefont@{--a@}} @titlefont{--a} @code{@@indicateurl@{--a@}} @indicateurl{--a} @code{@@uref@{--a,--b@}} @uref{--a,--b} @code{@@uref@{--a@}} @uref{--a} @code{@@uref@{,--b@}} @uref{,--b} @code{@@url@{--a,--b@}} @url{--a,--b} @code{@@url@{--a,@}} @url{--a,} @code{@@url@{,--b@}} @url{,--b} @code{@@var@{--a@}} @var{--a} @code{@@verb@{:--a:@}} @verb{:--a:} @code{@@w@{--a@}} @w{--a} @code{@@H@{a@}} @H{a} @code{@@H@{--a@}} @H{--a} @code{@@dotaccent@{a@}} @dotaccent{a} @code{@@dotaccent@{--a@}} @dotaccent{--a} @code{@@ringaccent@{a@}} @ringaccent{a} @code{@@ringaccent@{--a@}} @ringaccent{--a} @code{@@tieaccent@{a@}} @tieaccent{a} @code{@@tieaccent@{--a@}} @tieaccent{--a} @code{@@u@{a@}} @u{a} @code{@@u@{--a@}} @u{--a} @code{@@ubaraccent@{a@}} @ubaraccent{a} @code{@@ubaraccent@{--a@}} @ubaraccent{--a} @code{@@udotaccent@{a@}} @udotaccent{a} @code{@@udotaccent@{--a@}} @udotaccent{--a} @code{@@v@{a@}} @v{a} @code{@@v@{--a@}} @v{--a} @code{@@,@{c@}} @,{c} @code{@@,@{--c@}} @,{--c} @code{@@dotless@{--a@}} @dotless{--a} @code{@@dotless@{a@}} @dotless{a} @code{@@footnote@{in footnote@}} @footnote{in footnote} @code{@@footnote@{in footnote2@}} @footnote{in footnote2} @code{@@image@{f--ile,,e--xt@}} @image{f--ile,,e--xt} @code{@@image@{f--ile,,,,e--xt@}} @image{f--ile,,,,e--xt} @code{@@image@{f--ile,,,alt@}} @image{f--ile,,,alt} @code{@@image@{f--ile,aze,az,alt,e--xt@}} @image{f--ile,aze,az,alt,e--xt} @code{@@image@{f-ile,aze,,a--lt@}} @image{f-ile,aze,,a--lt} @code{@@image@{f--ile@}} @image{f--ile} @code{@@image@{,,e--xt@}} @image{,,e--xt} @code{@@image@{,,,e--xt@}} @image{,,,e--xt} @code{@@image@{file@@verb@{:jk _" %@@:@},,,alt@@verb@{:jk _" %@@:@}@}} @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} @code{@@image@{@@file@{f--ile@}@@@@@@.,aze,az,alt,@@file@{file ext@} e--xt@@@}} @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@}} @sp @sp 2 @quotation a q--uotation @end quotation @itemize @item i--temize @end itemize @itemize + @item i--tem + @end itemize @itemize @bullet @item b--ullet @end itemize @itemize @minus @item minu--s @end itemize @itemize @emph @item e--mph item @end itemize @itemize @emph after emph @item e--mph item @end itemize @itemize @bullet a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 6 7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @display d--isplay @end display @smalldisplay s--malldisplay @end smalldisplay @lisp l--isp @end lisp @smalllisp s--malllisp @end smalllisp @format f--ormat @end format @smallformat s--mallformat @end smallformat @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @deffn cate--gory de--ffn_name ar--guments @ more args @* even more so def--fn @end deffn @deffn fset @var{i} a g @deffnx {cmde} truc {} @deffnx Command {log trap} {} @deffnx Command { log trap1} {} @deffnx Command {log trap2 } {} @deffnx cmde @b{id ule} truc @deffnx cmde2 @b{id @samp{i} ule} truc @deffnx @b{id @samp{i} ule} @deffnx @deffnx aaa @deffnx {} {} @deffnx{} @deffnx{} machin @deffnx{} {bidule machin} @deffnx{truc} machin @deffnx{truc} { } @deffnx{truc} @deffnx{} {} @deffnx {truc} followed by a comment @c comment @deffnx truc machin bidule chose and } @deffnx truc machin bidule chose and } after @deffnx truc machin bidule chose and { @deffnx truc machin bidule chose and { and after Various deff lines @deffnx {truc} after a deff item @c comment text in def item for second def item @deffnx {truc} deffnx before end deffn @end deffn @defvr c--ategory d--efvr_name d--efvr @end defvr @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... d--eftypefn @end deftypefn @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... d--eftypeop @end deftypeop @deftypevr c--ategory t--ype d--eftypevr_name d--eftypevr @end deftypevr @defcv c--ategory c--lass d--efcv_name d--efcv @end defcv @defop c--ategory c--lass d--efop_name a--rguments... d--efop @end defop @deftp c--ategory d--eftp_name a--ttributes... d--eftp @end deftp @defun d--efun_name a--rguments... d--efun @end defun @defmac d--efmac_name a--rguments... d--efmac @end defmac @defspec d--efspec_name a--rguments... d--efspec @end defspec @defvar d--efvar_name d--efvar @end defvar @defopt d--efopt_name d--efopt @end defopt @deftypefun t--ype d--eftypefun_name a--rguments... d--eftypefun @end deftypefun @deftypevar t--ype d--eftypevar_name d--eftypevar @end deftypevar @defivar c--lass d--efivar_name d--efivar @end defivar @deftypeivar c--lass t--ype d--eftypeivar_name d--eftypeivar @end deftypeivar @defmethod c--lass d--efmethod_name a--rguments... d--efmethod @end defmethod @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... d--eftypemethod @end deftypemethod @code{@@xref@{chapter, cross ref name, title, file name, manual@}} @xref{chapter, cross ref name, title, file name, manual} @code{@@ref@{chapter, cross ref name, title, file name, manual@}} @ref{chapter, cross ref name, title, file name, manual} @code{@@pxref@{chapter, cross ref name, title, file name, manual@}} @pxref{chapter, cross ref name, title, file name, manual} @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} @code{@@ref@{chapter@}} @ref{chapter} @code{@@ref@{node@}} @ref{node} @code{@@ref@{,cross ref name@}} @ref{,cross ref name} @code{@@ref@{,,title@}} @ref{,,title} @code{@@ref@{,,,file name@}} @ref{,,,file name} @code{@@ref@{,,,,manual@}} @ref{,,,,manual} @code{@@ref@{chapter,cross ref name@}} @ref{chapter,cross ref name} @code{@@ref@{chapter,,title@}} @ref{chapter,,title} @code{@@ref@{chapter,,,file name@}} @ref{chapter,,,file name} @code{@@ref@{chapter,,,,manual@}} @ref{chapter,,,,manual} @code{@@ref@{node,cross ref name@}} @ref{node,cross ref name} @code{@@ref@{node,,title@}} @ref{node,,title} @code{@@ref@{node,,,file name@}} @ref{node,,,file name} @code{@@ref@{node,,,,manual@}} @ref{node,,,,manual} @code{@@ref@{chapter,cross ref name,title,@}} @ref{chapter,cross ref name,title,} @code{@@ref@{chapter,cross ref name,,file name@}} @ref{chapter,cross ref name,,file name} @code{@@ref@{chapter,cross ref name,,,manual@}} @ref{chapter,cross ref name,,,manual} @code{@@ref@{node,cross ref name,title,@}} @ref{node,cross ref name,title,} @code{@@ref@{node,cross ref name,,file name@}} @ref{node,cross ref name,,file name} @code{@@ref@{node,cross ref name,,,manual@}} @ref{node,cross ref name,,,manual} @code{@@ref@{chapter,cross ref name,title,file name@}} @ref{chapter,cross ref name,title,file name} @code{@@ref@{chapter,cross ref name,title,,manual@}} @ref{chapter,cross ref name,title,,manual} @code{@@ref@{node,cross ref name,title,file name@}} @ref{node,cross ref name,title,file name} @code{@@ref@{node,cross ref name,title,,manual@}} @ref{node,cross ref name,title,,manual} @code{@@ref@{chapter,cross ref name,title, file name, manual@}} @ref{chapter,cross ref name,title, file name, manual} @code{@@ref@{node,cross ref name,title, file name, manual@}} @ref{node,cross ref name,title, file name, manual} @code{@@ref@{chapter,,title,file name@}} @ref{chapter,,title,file name} @code{@@ref@{chapter,,title,,manual@}} @ref{chapter,,title,,manual} @code{@@ref@{node,,title,file name@}} @ref{node,,title,file name} @code{@@ref@{node,,title,,manual@}} @ref{node,,title,,manual} @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} @code{@@ref@{node,,title, file name, manual@}} @ref{node,,title, file name, manual} @code{@@ref@{chapter,,,file name,manual@}} @ref{chapter,,,file name,manual} @code{@@ref@{node,,,file name,manual@}} @ref{node,,,file name,manual} @code{@@ref@{,cross ref name,title,@}} @ref{,cross ref name,title,} @code{@@ref@{,cross ref name,,file name@}} @ref{,cross ref name,,file name} @code{@@ref@{,cross ref name,,,manual@}} @ref{,cross ref name,,,manual} @code{@@ref@{,cross ref name,title,file name@}} @ref{,cross ref name,title,file name} @code{@@ref@{,cross ref name,title,,manual@}} @ref{,cross ref name,title,,manual} @code{@@ref@{,cross ref name,title, file name, manual@}} @ref{,cross ref name,title, file name, manual} @code{@@ref@{,,title,file name@}} @ref{,,title,file name} @code{@@ref@{,,title,,manual@}} @ref{,,title,,manual} @code{@@ref@{,,title, file name, manual@}} @ref{,,title, file name, manual} @code{@@ref@{,,,file name,manual@}} @ref{,,,file name,manual} @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} @code{@@inforef@{chapter@}} @inforef{chapter} @code{@@inforef@{chapter, cross ref name@}} @inforef{chapter, cross ref name} @code{@@inforef@{chapter,,file name@}} @inforef{chapter,,file name} @code{@@inforef@{node, cross ref name, file name@}} @inforef{node, cross ref name, file name} @code{@@inforef@{node@}} @inforef{node} @code{@@inforef@{node, cross ref name@}} @inforef{node, cross ref name} @code{@@inforef@{node,,file name@}} @inforef{node,,file name} @code{@@inforef@{,cross ref name @}} @inforef{,cross ref name } @code{@@inforef@{,,file name@}} @inforef{,,file name} @code{@@inforef@{,cross ref name, file name@}} @inforef{,cross ref name, file name} @code{@@ref@{s--ect@@comma@{@}ion, a @@comma@{@} in cross ref, a comma@@comma@{@} in title, a comma@@comma@{@} in file, a @@comma@{@} in manual name @}} @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } @code{@@ref@{s--ect@@comma@{@}ion@}} @ref{s--ect@comma{}ion} @table @bullet @item a l--ine @end table @vtable @asis @item a l--ine @end vtable @ftable @minus @item a l--ine @end ftable @flushleft flushleft @end flushleft @flushright flushright @end flushright @center centered line @verbatiminclude simplest.texi @cindex t--ruc @cindex T--ruc @cindex . @cindex ? @cindex a @findex t--ruc @findex T--ruc @findex . @findex ? @findex a cp @printindex cp fn @printindex fn vr @printindex vr ky @printindex ky pg @printindex pg tp @printindex tp @contents @shortcontents @bye @end macro @c now call the macro within @ifset @ifset notset @copying @mymacro{} @end copying @end ifset @ifset notset @mymacro{} @end ifset @ifset notset @example @mymacro{} @end example @end ifset Line 1158 Before bye @bye texi2html-1.82/test/formatting/macro_in_menu.texi0000644000175000017500000000045711264347123024100 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @macro themacro @html bidule @end html @end macro @node Top @menu * (gcc):: @themacro{} @end menu Some text. @menu * (manual):: desc comment * (info):: before verbatim @verbatim some @ verb{' atim * (texinfo):: in @ verbatim @end verbatim @end menu After menu @bye texi2html-1.82/test/formatting/formats_in_menu.texi0000644000175000017500000000102211264347123024437 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top @menu * (gcc):: text @table @minus @item item table line @end table @end menu Some text. @menu * (manual):: desc comment * (info):: before verbatim @verbatim some @ verb{' atim * (texinfo):: in @ verbatim @end verbatim * (manual2):: $@html @end html Log$ * (truc):: @acronym{description acronym} @end menu After menu @menu * (manual):: @table @asis @item item * (node):: menu comment ? * (node2):: description ? description continue ? comment. @end table @end menu @bye texi2html-1.82/test/formatting/tables.texi0000644000175000017500000000044311264347123022532 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename tables.info @node Top @top Test tables @table @item first item First item text @ref{Top,, title in first item @item second item @end table @unnumbered Unnumbered section @table @item @ref{Top,, title long title} Item line @end table @bye texi2html-1.82/test/formatting/simplest.texi0000644000175000017500000000016711264347123023123 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename simplest.info @node Top This is a very simple texi manual @ <>. @bye texi2html-1.82/test/formatting/inter_item_commands.texi0000644000175000017500000000337711264347123025311 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename inter_item_commands.info @node Top @top Test inter item ignored commands @itemize @code @c comment in itemize @cindex also a cindex in itemize @item e--mph item @end itemize @itemize @bullet @cindex index entry within itemize @item i--tem 1 @item @cindex index entry right after @@item i--tem 2 @end itemize @itemize @c comment in itemize T--ext before items. @cindex also a cindex in itemize @item bullet item @end itemize @enumerate @comment comment before first item in enumerate @item e--numerate @end enumerate @multitable {truc} @c comment before first item @item truc @cindex index entry between empty lines @item trouc @c last comment @end multitable @multitable @columnfractions 6 7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @c comment in multitable @item mu--ltitable item 2 @tab multitable tab 2 @cindex index entry within multitable @item lone mu--ltitable item @end multitable @deffn fset @var{i} a g @c comment before first deffnx @deffnx Command { log trap1} {} @cindex between deffnx @deffnx cmde2 @b{id @samp{i} ule} truc @cindex cindex in deff item In deff item. @end deffn @vtable @code @c comment in table @item a l--ine @end vtable @vtable @asis @item a @c comment between item and itemx @itemx b l--ine @end vtable @ftable @var @item a @cindex index entry between item and itemx @c and a comment @comment and another comment @itemx b l--ine @item c @c comment between lines @itemx d @c comment at end @end ftable @table @code @cindex cindex in table @c comment in table @item abb l--ine @end table @table @code @cindex cindex in table Texte before first item. @item abb @end table cp @printindex cp fn @printindex fn vr @printindex vr @bye texi2html-1.82/test/formatting/tests.txt0000644000175000017500000000621311264347123022271 0ustar flichtenheldflichtenheldtexi def_cmds.texi texi menus.texi texi quotation.texi texi float_with_at_commands.texi texi float_copying.texi texi macro_in_menu.texi texi ref_in_anchor.texi texi tex.texi -l2h -expand tex texi block_EOL.texi texi detailmenus.texi texi commands_in_ifset.texi texi simplest.texi texi punctuation.texi texi def_end_of_line.texi texi center.texi texi tables.texi texi multitables.texi texi formats_in_menu.texi texi heading.texi texi quotes.texi texi indicateurl_paragraph.texi texi complex_command_in_simple_command.texi texi symbol_after_block.texi texi html-extrali.texi texi html-para.texi texi html-title.texi texi images.texi -init docbook.init texi index_in_item_line_table.texi texi index_in_item_line_vtable.texi texi index_in_item_line_table_in_code.texi texi table_in_table_item.texi texi nested_formats.texi texi inter_item_commands.texi texi double_style_paragraph.texi # for makeinfo texi ../coverage/formatting.texi -U texi2html def_cmds def_cmds.texi menus menus.texi menus_simple menus.texi -init simple_menu.init quotation quotation.texi float_with_at_commands float_with_at_commands.texi float_copying float_copying.texi -split chapter macro_in_menu macro_in_menu.texi ref_in_anchor ref_in_anchor.texi tex tex.texi -l2h -expand tex -init l2h_tmp_dir.init tex_notex tex.texi tex_httex tex.texi -init tex4ht.init --iftex block_EOL block_EOL.texi detailmenus detailmenus.texi detailmenus_simple detailmenus.texi -init simple_menu.init commands_in_ifset commands_in_ifset.texi simplest_test_css simplest.texi -css-include file.css punctuation punctuation.texi def_end_of_line def_end_of_line.texi center center.texi tables tables.texi multitables multitables.texi formats_in_menu formats_in_menu.texi heading heading.texi quotes quotes.texi indicateurl_paragraph indicateurl_paragraph.texi complex_command_in_simple_command complex_command_in_simple_command.texi symbol_after_block symbol_after_block.texi formatting_weird_quotes ../coverage/formatting.texi -init weird_quotes.init comments_redefine_need ../coverage/comments.texi -init redefine_need.init simplest_httex simplest.texi -init tex4ht.init --iftex html-extrali html-extrali.texi -init makeinfo.init html-para html-para.texi html-title html-title.texi images images.texi images_docbook images.texi -init docbook.init float_docbook ../coverage/float.texi -init docbook.init -U texi2html formatting_docbook ../coverage/formatting.texi -init docbook.init -U texi2html formatting_xml ../coverage/formatting.texi -init xml.init -U texi2html index_in_item_line_table index_in_item_line_table.texi index_in_item_line_vtable index_in_item_line_vtable.texi index_in_item_line_table_in_code index_in_item_line_table_in_code.texi table_in_table_item table_in_table_item.texi menus_xml menus.texi -init xml.init menus_xml_makeinfo menus.texi -init xml.init -U texi2html float_xml ../coverage/float.texi -init xml.init nested_formats nested_formats.texi inter_item_commands inter_item_commands.texi inter_item_commands_xml inter_item_commands.texi -init xml.init inter_item_commands_docbook inter_item_commands.texi -init docbook.init double_style_paragraph double_style_paragraph.texi #formatting_info ../coverage/formatting.texi -init info.init texi2html-1.82/test/formatting/nested_formats.texi0000644000175000017500000000034011264347123024271 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename nested_formats.info @node Top @top top @format @example in -- format/example @end example @end format @example @format in -- example/format @end format @end example @bye texi2html-1.82/test/formatting/heading.texi0000644000175000017500000000116411264347123022660 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename headings.info @copying @heading in copying @@ @emph{heading} @cindex cindex copying @subheading second in copying @@ @emph{subheading} @end copying @heading before Top @node Top @top Test headings @heading in top @@ @emph{heading} @chapter A chapter @footnote{ @heading heading in footnote @@ @emph{heading} @cindex heading in footnote @heading second heading in footnote @@ @emph{heading} } First insertcopying: @insertcopying Second insertcopying: @insertcopying @chapter index @printindex cp @quotation @heading in quotation @@ @emph{heading} @end quotation @bye texi2html-1.82/test/formatting/block_EOL.texi0000644000175000017500000000302111264347123023044 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename block_EOL.info @node Top @top Test for end of lines and block commands @heading html Block commands on a line @html in block in block l2 @end html end commands on a line. Block commands on a line. A dot in the end of the block @html in block in block l2. @end html end commands on a line, after the block with a dot. Before the opening command @html in block @end html end commands on a line. Before the opening command @html in block @end html after the closing command. Before the opening command @html in block @end html . A symbol on a line. Before the opening command @html in block @end html. A symbol after the closing command. @heading tex Block commands on a line @tex in block @end tex end commands on a line. Before the opening command @tex in block @end tex end commands on a line. Before the opening command @tex in block @end tex after the closing command. Before the opening command @tex in block @end tex . A symbol on a line. Before the opening command @tex in block @end tex. A symbol after the closing command. @heading verbatim Block commands on a line @verbatim in block @end verbatim end commands on a line. Before the opening command @verbatim in block @end verbatim end commands on a line. Before the opening command @verbatim in block @end verbatim after the closing command. Before the opening command @verbatim in block @end verbatim . A symbol on a line. Before the opening command @verbatim in block @end verbatim. A symbol after the closing command. @bye texi2html-1.82/test/formatting/weird_quotes.init0000644000175000017500000000010011264347123023752 0ustar flichtenheldflichtenheld$OPEN_QUOTE_SYMBOL = '@'; $CLOSE_QUOTE_SYMBOL = "'‘"; 1; texi2html-1.82/test/formatting/index_in_item_line_table.texi0000644000175000017500000000042111264347123026245 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename index_in_item_line_table.info @node Top @top test index entries in @@item @@table @table @asis @item @cindex index @option{opt} More text @item @cindex 2 index @option{nopt} Even more @end table @vindex another index @bye texi2html-1.82/test/formatting/float_copying.texi0000644000175000017500000000204111264347123024111 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename float_copying.info @copying @float Copyright notice, public domain Public domain is not really a licence, as it means than the author abandon his copyright. @caption{The Public Domain notice@footnote{ The caption copying footnote @anchor{caption copying footnote anchor} @cindex indexed caption copying footnote see @ref{Copying and floats}. } @anchor{public domain anchor} @cindex indexed caption } @end float @end copying @node Top @top Top @cindex Top See the caption @ref{public domain anchor}. See the float @ref{public domain}. @insertcopying @menu * Copying and floats:: @end menu @node Copying and floats @appendix Copying and floats In the appendix, we print the references and the copying once more and the list of coyright notices (listoffloats). See the caption @ref{public domain anchor}. See the float @ref{public domain}. @cindex listofloats @insertcopying @insertcopying @subheading listoffloats @listoffloats Copyright notice @subheading printindex @printindex cp @bye texi2html-1.82/test/formatting/html-para.texi0000644000175000017500000000122011264347123023137 0ustar flichtenheldflichtenheld\input texinfo @setfilename html-para.info @settitle HTML paragraph beginning test @c

    is emitted at paragraph beginning, which makes the text @c between START and END not exactly what some cm_xxx functions @c expect, when they are called by pop_and_call_brace. @set val @@value@{@} @definfoenclose foo,\\,// @node Top @top Top of HTML paragraph test @value{val} should work at the beginning of a new paragraph. @dotless{i} dotless should not trigger error messages at the beginning of a new paragraph. @sc{small-caps} should work at the beginning of a new paragraph. @foo{@@definfoenclose} should work at the beginning of a new paragraph. @bye texi2html-1.82/test/formatting/f--ile.txt0000644000175000017500000000001011264347123022165 0ustar flichtenheldflichtenheldggg aaa texi2html-1.82/test/formatting/menus.texi0000644000175000017500000000317411264347123022413 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @comment %**start of header @setfilename menus.info @node Top @top Top @menu * chapter:: chapter Menu comment * description:chapter2, Chapter 2 @end menu Text. @menu * (gcc):: text @table @minus @item item table line @end table @end menu Some text. @menu * (manual):: desc comment @ifset texi2html * (info):: before verbatim @verbatim some @ verb{' atim * (texinfo):: in @ verbatim @end verbatim * (manual2):: $@html @end html @end ifset Log $ * (truc):: @acronym{description acronym} @end menu After menu @menu * (manual):: @table @asis @item item @ifset texi2html * (node):: menu comment ? * (node2):: description ? description continue ? comment. @end ifset @end table @end menu @node chapter @chapter chapter @footnote{in footnote} @format @menu * s--ect@comma{}ion:: s--ect@comma{}ion Menu comment ``simple-double--three---four----''@* @end menu @end format @node s--ect@comma{}ion @section A section @menu * subsection ``simple-double--three---four----'':: @end menu @node subsection ``simple-double--three---four----'' @subsection subsection ``simple-double--three---four----'' @menu @example @ifset texi2html * subsubsection:: Menu comment * a description:(manual) other manual node. Chapter 2 @end ifset @end example @end menu @anchor{anchor} @ifset texi2html @node subsubsection @subsubsection subsubsection @end ifset @node chapter2 @chapter chapter 2 @example @menu * section in chapter 2:: in description @cartouche in cartouche @end cartouche @end menu @end example @node section in chapter 2 @section section in chapter 2 @contents @shortcontents @bye texi2html-1.82/test/formatting/detailmenus.texi0000644000175000017500000000234511264347123023575 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @comment %**start of header @setfilename detailmenus.info @node Top @top Top @menu * chapter:: chapter Menu comment * chapter2:description. Chapter 2 @detailmenu * s--ect@comma{}ion:: s--ect@comma{}ion Menu comment ``simple-double--three---four----''@* * subsection ``simple-double--three---four----'':: * subsubsection:: @end detailmenu Other comment * chapter3:: @detailmenu * s--ect@comma{}ion:: s--ect@comma{}ion Menu comment ``simple-double--three---four----''@* * subsection ``simple-double--three---four----'':: * subsubsection:: @end detailmenu * chapter4:: @end menu @node chapter @chapter chapter @menu * s--ect@comma{}ion:: s--ect@comma{}ion * subsubsection:: FIXME this should lead to a warning @end menu @node s--ect@comma{}ion @section A section @menu * subsection ``simple-double--three---four----'':: @end menu @node subsection ``simple-double--three---four----'' @subsection subsection ``simple-double--three---four----'' @menu * subsubsection:: @end menu @node subsubsection @subsubsection subsubsection @node chapter2 @chapter chapter 2 @node chapter3 @chapter chapter 3 @node chapter4 @chapter chapter 4 @contents @shortcontents @bye texi2html-1.82/test/formatting/Makefile.am0000644000175000017500000000176711264347123022433 0ustar flichtenheldflichtenheldEXTRA_DIST = def_cmds.texi menus.texi quotation.texi \ float_with_at_commands.texi float_copying.texi macro_in_menu.texi \ ref_in_anchor.texi tex.texi block_EOL.texi detailmenus.texi \ commands_in_ifset.texi simplest.texi punctuation.texi def_end_of_line.texi \ center.texi tables.texi formats_in_menu.texi heading.texi quotes.texi \ indicateurl_paragraph.texi complex_command_in_simple_command.texi \ symbol_after_block.texi html-extrali.texi html-para.texi html-title.texi \ images.texi index_in_item_line_table.texi index_in_item_line_vtable.texi \ index_in_item_line_table_in_code.texi table_in_table_item.texi \ nested_formats.texi inter_item_commands.texi multitables.texi \ double_style_paragraph.texi \ f--ile.gif f--ile.jpeg f--ile.png f---ile.gr--a f--ile.jpg f--ile.txt \ simple_menu.init weird_quotes.init redefine_need.init file.css tests.txt res DISTCLEANFILES = l2h_tmp_dir.init tests.log tests.out distclean-local: rm -rf out diffs dist-hook: rm -rf `find $(distdir)/res -name CVS` texi2html-1.82/test/formatting/simple_menu.init0000644000175000017500000000002611264347123023564 0ustar flichtenheldflichtenheld$SIMPLE_MENU = 1; 1; texi2html-1.82/test/formatting/f---ile.gr--a0000644000175000017500000000000011264347123022325 0ustar flichtenheldflichtenheldtexi2html-1.82/i18n/0000755000175000017500000000000011264347115016013 5ustar flichtenheldflichtenheldtexi2html-1.82/i18n/fr0000644000175000017500000003711211264347115016351 0ustar flichtenheldflichtenheld$LANGUAGES->{'fr'} = { ' The buttons in the navigation panels have the following meaning:' => ' Les boutons de navigation ont la signification suivante :', ' where the @strong{ Example } assumes that the current position is at @strong{ Subsubsection One-Two-Three } of a document of the following structure:' => ' Dans cet exemple on est @`a @strong{ Sous sous section un-deux-trois } dans un document dont la structure est :', ' Up ' => 'Plus haut', '%{acronym_like} (%{explanation})' => '', '%{month} %{day}, %{year}' => 'le %{day} %{month} %{year}', '%{name} of %{class}' => '%{name} de %{class}', '%{name} on %{class}' => '%{name} de %{class}', '%{node_file_href}' => '', '%{node_file_href} @cite{%{book}}' => '', '%{node_file_href} section `%{section}\' in @cite{%{book}}' => '%{node_file_href} section `%{section}\' dans @cite{%{book}}', '%{reference_name}' => '', '%{style} %{number}' => '', '%{style}: %{caption_first_line}' => '', '%{style}: %{shortcaption_first_line}' => '', '@b{%{quotation_arg}:} ' => '', '@cite{%{book}}' => '', 'About' => 'A propos', 'About (help)' => 'A propos (page d\'aide)', 'About This Document' => 'A propos de ce document', 'April' => 'avril', 'August' => 'ao@^ut', 'Back' => 'Retour', 'Back section in previous file' => '', 'Beginning of this chapter or previous chapter' => 'D@\'ebut de ce chapitre ou chapitre pr@\'ec@\'edent', 'Button' => 'Bouton', 'Contents' => 'Table des mati@`eres', 'Cover (top) of document' => 'Couverture (top) du document', 'Current Position' => 'Position', 'Current section' => 'Section actuelle', 'December' => 'd@\'ecembre', 'FastBack' => 'RetourRapide', 'FastForward' => 'AvanceRapide', 'February' => 'f@\'evrier', 'First' => 'Premier', 'First section in reading order' => 'Premi@`e section dans l\'ordre de lecture', 'Following' => 'Suivant', 'Following node' => 'N@oe{}ud suivant', 'Footnotes' => 'Notes de bas de page', 'Forward' => 'Avant', 'Forward section in next file' => '', 'From 1.2.3 go to' => 'Depuis 1.2.3 aller @`a', 'Go to' => 'Aller @`a', 'Index' => 'Index', 'Index Entry' => 'Entr@\'ee d\'index', 'January' => 'janvier', 'July' => 'juillet', 'Jump to' => 'Aller @`a', 'June' => 'juin', 'Last' => 'Dernier', 'Last section in reading order' => 'Derni@`ere section dans l\'ordre de lecture', 'March' => 'mars', 'May' => 'mai', 'Menu:' => 'Menu@ :', 'Name' => 'Nom', 'Next' => 'Suivant', 'Next chapter' => 'Chapitre suivant', 'Next file' => 'Fichier suivant', 'Next node' => 'N@oe{}ud suivant', 'Next section in reading order' => 'Section suivante dans l\'ordre de lecture', 'Next section on same level' => 'Section suivante au m@^eme niveau', 'NextFile' => 'FichierSuivant', 'Node following in node reading order' => 'N@oe{}ud suivant dans l\'ordre de lecture', 'Node up' => 'N@oe{}ud au dessus', 'NodeNext' => 'N@oe{}udSuivant', 'NodePrev' => 'N@oe{}udPr@\'ec@\'edent', 'NodeUp' => 'N@oe{}udMonter', 'November' => 'novembre', 'October' => 'octobre', 'Overview' => 'Vue d\'ensemble', 'Overview:' => 'Vue d\'ensemble@ :', 'Prev' => 'Pr@\'ec@\'edent', 'PrevFile' => '', 'Previous file' => 'Fichier pr@\'ec@\'edent', 'Previous node' => 'N@oe{}ud pr@\'ec@\'edent', 'Previous section in reading order' => 'Section pr@\'ec@\'edente dans l\'ordre de lecture', 'Previous section on same level' => 'Section pr@\'ec@\'edente au m@^eme niveau', 'Section' => '', 'Section One' => 'Section un', 'See %{node_file_href}' => 'Voir %{node_file_href}', 'See %{node_file_href} @cite{%{book}}' => 'Voir %{node_file_href} @cite{%{book}}', 'See %{node_file_href} section `%{section}\' in @cite{%{book}}' => 'Voir %{node_file_href} section `%{section}\' dans @cite{%{book}}', 'See %{reference_name}' => 'Voir %{reference_name}', 'See @cite{%{book}}' => 'Voir @cite{%{book}}', 'See section %{reference_name}' => 'Voir la section %{reference_name}', 'See section `%{section}\' in @cite{%{book}}' => 'Voir la section `%{section}\' dans @cite{%{book}}', 'September' => 'septembre', 'Short Table of Contents' => 'R@\'esum@\'e du contenu', 'Short table of contents' => 'R@\'esum@\'e du contenu', 'Subsection One-Four' => 'Sous section un-quatre', 'Subsection One-One' => 'Sous section un-un', 'Subsection One-Three' => 'Sous section un-trois', 'Subsection One-Two' => 'Sous section un-deux', 'Subsubsection One-Two-Four' => 'Sous sous section un-deux-quatre', 'Subsubsection One-Two-One' => 'Sous sous section un-deux-un', 'Subsubsection One-Two-Three' => 'Sous sous section un-deux-trois', 'Subsubsection One-Two-Two' => 'Sous sous section un-deux-deux', 'T2H_today' => '%2$d %1$s %3$d', 'Table of Contents' => 'Table des mati@`eres', 'Table of contents' => 'Table des mati@`eres', 'The node you are looking for is at %{href}.' => 'Le n@oe{}ud que vous recherchez est ici@ : %{href}.', 'This' => 'Ici', 'This document was generated by @emph{%{user}} on @emph{%{date}} using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Ce document a @\'et@\'e g@\'en@\'er@\'e le @emph{%{date}} par @emph{%{user}} en utilisant @uref{%{program_homepage}, @emph{%{program}}}.', 'This document was generated by @emph{%{user}} using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Ce document a @\'et@\'e g@\'en@\'er@\'e par @emph{%{user}} en utilisant @uref{%{program_homepage}, @emph{%{program}}}.', 'This document was generated on @i{%{date}} using @uref{%{program_homepage}, @i{%{program}}}.' => 'Ce document a @\'et@\'e g@\'en@\'er@\'e le @emph{%{date}} en utilisant @uref{%{program_homepage}, @emph{%{program}}}', 'This document was generated using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Ce document a @\'et@\'e g@\'en@\'er@\'e en utilisant @uref{%{program_homepage}, @emph{%{program}}}.', 'Top' => 'Racine', 'Untitled Document' => 'Document sans titre', 'Up' => 'Monter', 'Up node' => 'N@oe{}ud au dessus', 'Up section' => 'Section sup@\'erieure', 'by @emph{%{user}}' => 'par @emph{%{user}}', 'by @emph{%{user}} on @emph{%{date}}' => 'par @emph{%{user}} le @emph{%{date}}', 'current' => 'courante', 'on @emph{%{date}}' => 'le @emph{%{date}}', 'section `%{section}\' in @cite{%{book}}' => 'section `%{section}\' dans @cite{%{book}}', 'see %{node_file_href}' => 'voir %{node_file_href}', 'see %{node_file_href} @cite{%{book}}' => 'voir %{node_file_href} @cite{%{book}}', 'see %{node_file_href} section `%{section}\' in @cite{%{book}}' => 'voir %{node_file_href} section `%{section}\' dans @cite{%{book}}', 'see %{reference_name}' => 'voir %{reference_name}', 'see @cite{%{book}}' => 'voir @cite{%{book}}', 'see section %{reference_name}' => 'voir la section %{reference_name}', 'see section `%{section}\' in @cite{%{book}}' => 'voir la section `%{section}\' dans @cite{{book}}', 'unknown' => 'inconnu' }; $T2H_OBSOLETE_STRINGS->{'fr'} = { ' This document was generated %{who_and_when_generated} using %{program_homepage_href}.' => ' Ce document a été généré %{who_and_when_generated} en utilisant %{program_homepage_href}.', ' where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:' => ' Dans cet exemple on est à Sous section un-deux-trois dans un document dont la structure est :', '%{node_file_href} section `%{section}\' in %{book}' => '%{node_file_href} section `%{section}\' dans %{book}', 'See' => 'Voir', 'See %{node_file_href} %{book}' => 'Voir %{node_file_href} %{book}', 'See %{node_file_href} section `%{section}\' in %{book}' => 'Voir %{node_file_href} section `%{section}\' dans %{book}', 'See %{book}' => 'Voir %{book}', 'See section `%{section}\' in %{book}' => 'Voir la section `%{section}\' dans %{book}', 'This document was generated by %{user} on %{date} using %{program_homepage_href}.' => 'Ce document a été généré par %{user} %{date} en utilisant %{program_homepage_href}.', 'This document was generated by %{user} using %{program_homepage_href}.' => 'Ce document a été généré par %{user} en utilisant %{program_homepage_href}.', 'This document was generated by @emph{%{user}} on @emph{%{date}} using %{program_homepage_href}.' => 'Ce document a @\'et@\'e g@\'en@\'er@\'e par @emph{%{user}} @emph{%{date}} en utilisant %{program_homepage_href}.', 'This document was generated by @emph{%{user}} using %{program_homepage_href}.' => 'Ce document a @\'et@\'e g@\'en@\'er@\'e par @emph{%{user}} en utilisant %{program_homepage_href}.', 'This document was generated on %{date} using %{program_homepage_href}.' => 'Ce document a été généré %{date} en utilisant %{program_homepage_href}.', 'This document was generated on @emph{%{date}} using %{program_homepage_href}.' => 'Ce document a @\'et@\'e g@\'en@\'er@\'e @emph{%{date}} en utilisant %{program_homepage_href}.', 'This document was generated on @emph{%{date}} using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Ce document a @\'et@\'e g@\'en@\'er@\'e @emph{%{date}} en utilisant @uref{%{program_homepage}, @emph{%{program}}}.', 'This document was generated using %{program_homepage_href}.' => 'Ce document a @\'et@\'e g@\'en@\'er@\'e en utilisant %{program_homepage_href}.', 'about (help)' => '@`a propos (page d\'aide)', 'about (this page)' => 'a propos (cette page)', 'beginning of this chapter or previous chapter' => 'd@\'ebut de ce chapitre ou chapitre pr@\'ec@\'edent', 'by %{user}' => 'par %{user}', 'by %{user} on %{date}' => 'par %{user} %{date}', 'concept index' => 'index', 'cover (top) of document' => 'couverture (top) du document', 'current section' => 'section actuelle', 'first section in reading order' => 'premi@`e section dans l\'ordre de lecture', 'following node' => 'node suivant', 'index' => 'index', 'last section in reading order' => 'derni@`ere section dans l\'ordre de lecture', 'next chapter' => 'chapitre suivant', 'next node' => 'node suivant', 'next section in reading order' => 'section suivante dans l\'ordre de lecture', 'next section on same level' => 'section suivante au m@^eme niveau', 'node following in node reading order' => 'node suivant dans l\'ordre des nodes', 'node up' => 'node au dessus', 'on %{date}' => '%{date}', 'previous node' => 'node pr@\'ec@\'edent', 'previous section in reading order' => 'section pr@\'ec@\'edente dans l\'ordre de lecture', 'previous section on same level' => 'section pr@\'ec@\'edente au m@^eme niveau', 'section' => 'section', 'section `%{section}\' in %{book}' => 'section `%{section}\' dans %{book}', 'see' => 'voir', 'see %{node_file_href} %{book}' => 'voir %{node_file_href} %{book}', 'see %{node_file_href} section `%{section}\' in %{book}' => 'voir %{node_file_href} section `%{section}\' dans %{book}', 'see %{book}' => 'voir %{book}', 'see section `%{section}\' in %{book}' => 'voir la section `%{section}\' dans %{book}', 'short table of contents' => 'table des mati@`eres r@\'esum@\'ee', 'table of contents' => 'table des mati@`eres', 'up node' => 'node au dessus', 'up section' => 'section sup@\'erieure' }; texi2html-1.82/i18n/es0000644000175000017500000002325411264347115016353 0ustar flichtenheldflichtenheld$LANGUAGES->{'es'} = { ' The buttons in the navigation panels have the following meaning:' => ' Los botones de los paneles de navegaci@\'on tienen el significado siguiente:', ' where the @strong{ Example } assumes that the current position is at @strong{ Subsubsection One-Two-Three } of a document of the following structure:' => ' donde el @strong{ Ejemplo } supone que la posición actual está en la @strong{ Sub-subsecci@\'on uno-dos-tres } de un documento de la estructura siguiente:', ' Up ' => ' Subir ', '%{acronym_like} (%{explanation})' => '', '%{month} %{day}, %{year}' => 'el %{day} %{month} %{year}', '%{name} of %{class}' => '%{name} de %{class}', '%{name} on %{class}' => '%{name} en %{class}', '%{node_file_href}' => '', '%{node_file_href} @cite{%{book}}' => '', '%{node_file_href} section `%{section}\' in @cite{%{book}}' => '%{node_file_href} secci@\'on `%{section}\' en @cite{%{book}}', '%{reference_name}' => '', '%{style} %{number}' => '', '%{style}: %{caption_first_line}' => '', '%{style}: %{shortcaption_first_line}' => '', '@b{%{quotation_arg}:} ' => '', '@cite{%{book}}' => '', 'About' => 'Acerca de', 'About (help)' => 'Acerca de (p@\'agina de ayuda)', 'About This Document' => 'Acerca de este documento', 'April' => 'abril', 'August' => 'agosto', 'Back' => 'Atr@\'as', 'Back section in previous file' => 'Retroceder secci@\'on en el archivo anterior', 'Beginning of this chapter or previous chapter' => 'Inicio de este cap@\'itulo o cap@\'itulo anterior', 'Button' => 'Bot@\'on', 'Contents' => '@\'Indice general', 'Cover (top) of document' => 'Portada del documento', 'Current Position' => 'Posici@\'on actual', 'Current section' => 'Secci@\'on actual', 'December' => 'diciembre', 'FastBack' => 'Retroceso r@\'apido', 'FastForward' => 'Avance r@\'apido', 'February' => 'febrero', 'First' => 'Primero', 'First section in reading order' => 'Primera secci@\'on en orden de lectura', 'Following' => 'Siguiente', 'Following node' => 'Nodo siguiente', 'Footnotes' => 'Notas el pie', 'Forward' => 'Adelante', 'Forward section in next file' => 'Avanzar secci@\'on en el pr@\'oximo archivo', 'From 1.2.3 go to' => 'Desde 1.2.3 ir a', 'Go to' => 'Ir a', 'Index' => '@\'Indice', 'Index Entry' => 'Entrada de @\'indice', 'January' => 'enero', 'July' => 'julio', 'Jump to' => 'Saltar a', 'June' => 'junio', 'Last' => '@\'Ultimo', 'Last section in reading order' => '@\'Ultima secci@\'on en orden de lectura', 'March' => 'marzo', 'May' => 'mayo', 'Menu:' => 'Men@\'u:', 'Name' => 'Nombre', 'Next' => 'Siguiente', 'Next chapter' => 'Cap@\'itulo siguiente', 'Next file' => 'Archivo siguiente', 'Next node' => 'Nodo siguiente', 'Next section in reading order' => 'Secci@\'on siguiente en orden de lectura', 'Next section on same level' => 'Secci@\'on siguiente en el mismo nivel', 'NextFile' => 'ArchivoSiguiente', 'Node following in node reading order' => 'Nodo siguiente en orden de lectura de nodos', 'Node up' => 'Subir nodo', 'NodeNext' => 'NodoSiguiente', 'NodePrev' => 'NodoAnterior', 'NodeUp' => 'SubirNodo', 'November' => 'noviembre', 'October' => 'octubre', 'Overview' => 'Panor@\'amica', 'Overview:' => 'Panor@\'amica:', 'Prev' => 'Ant', 'PrevFile' => 'ArchivoAnt', 'Previous file' => 'Archivo anterior', 'Previous node' => 'Nodo anterior', 'Previous section in reading order' => 'Secci@\'on anterior en orden de lectura', 'Previous section on same level' => 'Secci@\'on anterior en el mismo nivel', 'Section' => 'Secci@\'on', 'Section One' => 'Secci@\'on Uno', 'See %{node_file_href}' => 'V@\'ease %{node_file_href}', 'See %{node_file_href} @cite{%{book}}' => 'V@\'ease %{node_file_href} @cite{%{book}}', 'See %{node_file_href} section `%{section}\' in @cite{%{book}}' => 'V@\'ease %{node_file_href} secci@\'on `%{section}\' en @cite{%{book}}', 'See %{reference_name}' => 'V@\'ease %{reference_name}', 'See @cite{%{book}}' => 'V@\'ease @cite{%{book}}', 'See section %{reference_name}' => 'V@\'ease la secci@\'on %{reference_name}', 'See section `%{section}\' in @cite{%{book}}' => 'V@\'ease la secci@\'on `%{section}\' en @cite{%{book}}', 'September' => 'septiembre', 'Short Table of Contents' => 'Resumen del Contenido', 'Short table of contents' => 'Resumen del contenido', 'Subsection One-Four' => 'Subsecci@\'on uno-cuatro', 'Subsection One-One' => 'Subsecci@\'on uno-uno', 'Subsection One-Three' => 'Subsecci@\'on uno-tres', 'Subsection One-Two' => 'Subsecci@\'on uno-dos', 'Subsubsection One-Two-Four' => 'Sub-subsecci@\'on uno-dos-cuatro', 'Subsubsection One-Two-One' => 'Sub-subsecci@\'on uno-dos-uno', 'Subsubsection One-Two-Three' => 'Sub-subsecci@\'on uno-dos-tres', 'Subsubsection One-Two-Two' => 'Sub-subsecci@\'on uno-dos-dos', 'T2H_today' => '%2$d %1$s %3$d', 'Table of Contents' => '@\'{@dotless{I}}ndice General', 'Table of contents' => '@\'{@dotless{I}}ndice general', 'The node you are looking for is at %{href}.' => 'El nodo que busca se encuentra en %{href}.', 'This' => 'Este', 'This document was generated by @emph{%{user}} on @emph{%{date}} using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Este documento ha sido generado por @emph{%{user}} el @emph{%{date}} utilizando @uref{%{program_homepage}, @emph{%{program}}}.', 'This document was generated by @emph{%{user}} using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Este documento ha sido generado por @emph{%{user}} utilizando @uref{%{program_homepage}, @emph{%{program}}}.', 'This document was generated on @i{%{date}} using @uref{%{program_homepage}, @i{%{program}}}.' => 'Este documento se generó el @i{%{date}} utilizando @uref{%{program_homepage}, @i{%{program}}}.', 'This document was generated using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Este documento se generó utilizando @uref{%{program_homepage}, @emph{%{program}}}.', 'Top' => 'Arriba', 'Untitled Document' => 'Documento sin t@\'itulo', 'Up' => 'Subir', 'Up node' => 'Subir nodo', 'Up section' => 'Subir secci@\'on', 'by @emph{%{user}}' => 'por @emph{%{user}', 'by @emph{%{user}} on @emph{%{date}}' => 'por @emph{%{user}} el @emph{%{date}}', 'current' => 'actual', 'on @emph{%{date}}' => 'el @emph{%{date}}', 'section `%{section}\' in @cite{%{book}}' => 'secci@\'on `%{section}\' en @cite{%{book}}', 'see %{node_file_href}' => 'v@\'ease %{node_file_href}', 'see %{node_file_href} @cite{%{book}}' => 'v@\'ease %{node_file_href} @cite{%{book}}', 'see %{node_file_href} section `%{section}\' in @cite{%{book}}' => 'v@\'ease %{node_file_href} secci@\'on `%{section}\' en @cite{%{book}}', 'see %{reference_name}' => 'v@\'ease %{reference_name}', 'see @cite{%{book}}' => 'v@\'ease @cite{%{book}}', 'see section %{reference_name}' => 'v@\'ease la secci@\'on %{reference_name}', 'see section `%{section}\' in @cite{%{book}}' => 'v@\'ease la secci@\'on `%{section}\' en @cite{%{book}}', 'unknown' => 'desconocido' }; $T2H_OBSOLETE_STRINGS->{'es'} = { 'See' => 'V@\'ease', 'section' => 'secci@\'on', 'see' => 'v@\'ease' }; texi2html-1.82/i18n/no0000644000175000017500000001574511264347115016366 0ustar flichtenheldflichtenheld$LANGUAGES->{'no'} = { ' The buttons in the navigation panels have the following meaning:' => '', ' where the @strong{ Example } assumes that the current position is at @strong{ Subsubsection One-Two-Three } of a document of the following structure:' => '', ' Up ' => '', '%{acronym_like} (%{explanation})' => '', '%{month} %{day}, %{year}' => '', '%{name} of %{class}' => '', '%{name} on %{class}' => '', '%{node_file_href}' => '', '%{node_file_href} @cite{%{book}}' => '', '%{node_file_href} section `%{section}\' in @cite{%{book}}' => '', '%{reference_name}' => '', '%{style} %{number}' => '', '%{style}: %{caption_first_line}' => '', '%{style}: %{shortcaption_first_line}' => '', '@b{%{quotation_arg}:} ' => '', '@cite{%{book}}' => '', 'About' => '', 'About (help)' => '', 'About This Document' => 'No translation available!', 'April' => 'april', 'August' => 'august', 'Back' => '', 'Back section in previous file' => '', 'Beginning of this chapter or previous chapter' => '', 'Button' => '', 'Contents' => '', 'Cover (top) of document' => '', 'Current Position' => '', 'Current section' => '', 'December' => 'desember', 'FastBack' => '', 'FastForward' => '', 'February' => 'februar', 'First' => '', 'First section in reading order' => '', 'Following' => '', 'Following node' => '', 'Footnotes' => 'No translation available!', 'Forward' => '', 'Forward section in next file' => '', 'From 1.2.3 go to' => '', 'Go to' => '', 'Index' => 'Indeks', 'Index Entry' => '', 'January' => 'januar', 'July' => 'juli', 'Jump to' => '', 'June' => 'juni', 'Last' => '', 'Last section in reading order' => '', 'March' => 'mars', 'May' => 'mai', 'Menu:' => '', 'Name' => '', 'Next' => '', 'Next chapter' => '', 'Next file' => '', 'Next node' => '', 'Next section in reading order' => '', 'Next section on same level' => '', 'NextFile' => '', 'Node following in node reading order' => '', 'Node up' => '', 'NodeNext' => '', 'NodePrev' => '', 'NodeUp' => '', 'November' => 'november', 'October' => 'oktober', 'Overview' => '', 'Overview:' => '', 'Prev' => '', 'PrevFile' => '', 'Previous file' => '', 'Previous node' => '', 'Previous section in reading order' => '', 'Previous section on same level' => '', 'Section' => '', 'Section One' => '', 'See %{node_file_href}' => '', 'See %{node_file_href} @cite{%{book}}' => '', 'See %{node_file_href} section `%{section}\' in @cite{%{book}}' => '', 'See %{reference_name}' => '', 'See @cite{%{book}}' => '', 'See section %{reference_name}' => '', 'See section `%{section}\' in @cite{%{book}}' => '', 'September' => 'september', 'Short Table of Contents' => 'Kort innholdsfortegnelse', 'Short table of contents' => '', 'Subsection One-Four' => '', 'Subsection One-One' => '', 'Subsection One-Three' => '', 'Subsection One-Two' => '', 'Subsubsection One-Two-Four' => '', 'Subsubsection One-Two-One' => '', 'Subsubsection One-Two-Three' => '', 'Subsubsection One-Two-Two' => '', 'T2H_today' => '', 'Table of Contents' => 'Innholdsfortegnelse', 'Table of contents' => '', 'The node you are looking for is at %{href}.' => '', 'This' => '', 'This document was generated by @emph{%{user}} on @emph{%{date}} using @uref{%{program_homepage}, @emph{%{program}}}.' => '', 'This document was generated by @emph{%{user}} using @uref{%{program_homepage}, @emph{%{program}}}.' => '', 'This document was generated on @i{%{date}} using @uref{%{program_homepage}, @i{%{program}}}.' => '', 'This document was generated using @uref{%{program_homepage}, @emph{%{program}}}.' => '', 'Top' => '', 'Untitled Document' => '', 'Up' => '', 'Up node' => '', 'Up section' => '', 'by @emph{%{user}}' => '', 'by @emph{%{user}} on @emph{%{date}}' => '', 'current' => '', 'on @emph{%{date}}' => '', 'section `%{section}\' in @cite{%{book}}' => '', 'see %{node_file_href}' => '', 'see %{node_file_href} @cite{%{book}}' => '', 'see %{node_file_href} section `%{section}\' in @cite{%{book}}' => '', 'see %{reference_name}' => '', 'see @cite{%{book}}' => '', 'see section %{reference_name}' => '', 'see section `%{section}\' in @cite{%{book}}' => '', 'unknown' => '' }; $T2H_OBSOLETE_STRINGS->{'no'} = { 'See' => 'Se', 'section' => 'avsnitt', 'see' => 'se' }; texi2html-1.82/i18n/en0000644000175000017500000001521011264347115016337 0ustar flichtenheldflichtenheld$LANGUAGES->{'en'} = { ' The buttons in the navigation panels have the following meaning:' => '', ' where the @strong{ Example } assumes that the current position is at @strong{ Subsubsection One-Two-Three } of a document of the following structure:' => '', ' Up ' => '', '%{acronym_like} (%{explanation})' => '', '%{month} %{day}, %{year}' => '', '%{name} of %{class}' => '', '%{name} on %{class}' => '', '%{node_file_href}' => '', '%{node_file_href} @cite{%{book}}' => '', '%{node_file_href} section `%{section}\' in @cite{%{book}}' => '', '%{reference_name}' => '', '%{style} %{number}' => '', '%{style}: %{caption_first_line}' => '', '%{style}: %{shortcaption_first_line}' => '', '@b{%{quotation_arg}:} ' => '', '@cite{%{book}}' => '', 'About' => '', 'About (help)' => '', 'About This Document' => '', 'April' => '', 'August' => '', 'Back' => '', 'Back section in previous file' => '', 'Beginning of this chapter or previous chapter' => '', 'Button' => '', 'Contents' => '', 'Cover (top) of document' => '', 'Current Position' => '', 'Current section' => '', 'December' => '', 'FastBack' => '', 'FastForward' => '', 'February' => '', 'First' => '', 'First section in reading order' => '', 'Following' => '', 'Following node' => '', 'Footnotes' => '', 'Forward' => '', 'Forward section in next file' => '', 'From 1.2.3 go to' => '', 'Go to' => '', 'Index' => '', 'Index Entry' => '', 'January' => '', 'July' => '', 'Jump to' => '', 'June' => '', 'Last' => '', 'Last section in reading order' => '', 'March' => '', 'May' => '', 'Menu:' => '', 'Name' => '', 'Next' => '', 'Next chapter' => '', 'Next file' => '', 'Next node' => '', 'Next section in reading order' => '', 'Next section on same level' => '', 'NextFile' => '', 'Node following in node reading order' => '', 'Node up' => '', 'NodeNext' => '', 'NodePrev' => '', 'NodeUp' => '', 'November' => '', 'October' => '', 'Overview' => '', 'Overview:' => '', 'Prev' => '', 'PrevFile' => '', 'Previous file' => '', 'Previous node' => '', 'Previous section in reading order' => '', 'Previous section on same level' => '', 'Section' => '', 'Section One' => '', 'See %{node_file_href}' => '', 'See %{node_file_href} @cite{%{book}}' => '', 'See %{node_file_href} section `%{section}\' in @cite{%{book}}' => '', 'See %{reference_name}' => '', 'See @cite{%{book}}' => '', 'See section %{reference_name}' => '', 'See section `%{section}\' in @cite{%{book}}' => '', 'September' => '', 'Short Table of Contents' => '', 'Short table of contents' => '', 'Subsection One-Four' => '', 'Subsection One-One' => '', 'Subsection One-Three' => '', 'Subsection One-Two' => '', 'Subsubsection One-Two-Four' => '', 'Subsubsection One-Two-One' => '', 'Subsubsection One-Two-Three' => '', 'Subsubsection One-Two-Two' => '', 'T2H_today' => '%s, %d %d', 'Table of Contents' => '', 'Table of contents' => '', 'The node you are looking for is at %{href}.' => '', 'This' => '', 'This document was generated by @emph{%{user}} on @emph{%{date}} using @uref{%{program_homepage}, @emph{%{program}}}.' => '', 'This document was generated by @emph{%{user}} using @uref{%{program_homepage}, @emph{%{program}}}.' => '', 'This document was generated on @i{%{date}} using @uref{%{program_homepage}, @i{%{program}}}.' => '', 'This document was generated using @uref{%{program_homepage}, @emph{%{program}}}.' => '', 'Top' => '', 'Untitled Document' => '', 'Up' => '', 'Up node' => '', 'Up section' => '', 'by @emph{%{user}}' => '', 'by @emph{%{user}} on @emph{%{date}}' => '', 'current' => '', 'on @emph{%{date}}' => '', 'section `%{section}\' in @cite{%{book}}' => '', 'see %{node_file_href}' => '', 'see %{node_file_href} @cite{%{book}}' => '', 'see %{node_file_href} section `%{section}\' in @cite{%{book}}' => '', 'see %{reference_name}' => '', 'see @cite{%{book}}' => '', 'see section %{reference_name}' => '', 'see section `%{section}\' in @cite{%{book}}' => '', 'unknown' => '' }; $T2H_OBSOLETE_STRINGS->{'en'} = {}; texi2html-1.82/i18n/nl0000644000175000017500000001573711264347115016364 0ustar flichtenheldflichtenheld$LANGUAGES->{'nl'} = { ' The buttons in the navigation panels have the following meaning:' => '', ' where the @strong{ Example } assumes that the current position is at @strong{ Subsubsection One-Two-Three } of a document of the following structure:' => '', ' Up ' => '', '%{acronym_like} (%{explanation})' => '', '%{month} %{day}, %{year}' => '', '%{name} of %{class}' => '', '%{name} on %{class}' => '', '%{node_file_href}' => '', '%{node_file_href} @cite{%{book}}' => '', '%{node_file_href} section `%{section}\' in @cite{%{book}}' => '', '%{reference_name}' => '', '%{style} %{number}' => '', '%{style}: %{caption_first_line}' => '', '%{style}: %{shortcaption_first_line}' => '', '@b{%{quotation_arg}:} ' => '', '@cite{%{book}}' => '', 'About' => '', 'About (help)' => '', 'About This Document' => 'No translation available!', 'April' => 'April', 'August' => 'Augustus', 'Back' => '', 'Back section in previous file' => '', 'Beginning of this chapter or previous chapter' => '', 'Button' => '', 'Contents' => '', 'Cover (top) of document' => '', 'Current Position' => '', 'Current section' => '', 'December' => 'December', 'FastBack' => '', 'FastForward' => '', 'February' => 'Februari', 'First' => '', 'First section in reading order' => '', 'Following' => '', 'Following node' => '', 'Footnotes' => 'No translation available!', 'Forward' => '', 'Forward section in next file' => '', 'From 1.2.3 go to' => '', 'Go to' => '', 'Index' => 'Index', 'Index Entry' => '', 'January' => 'Januari', 'July' => 'Juli', 'Jump to' => '', 'June' => 'Juni', 'Last' => '', 'Last section in reading order' => '', 'March' => 'Maart', 'May' => 'Mei', 'Menu:' => '', 'Name' => '', 'Next' => '', 'Next chapter' => '', 'Next file' => '', 'Next node' => '', 'Next section in reading order' => '', 'Next section on same level' => '', 'NextFile' => '', 'Node following in node reading order' => '', 'Node up' => '', 'NodeNext' => '', 'NodePrev' => '', 'NodeUp' => '', 'November' => 'November', 'October' => 'Oktober', 'Overview' => '', 'Overview:' => '', 'Prev' => '', 'PrevFile' => '', 'Previous file' => '', 'Previous node' => '', 'Previous section in reading order' => '', 'Previous section on same level' => '', 'Section' => '', 'Section One' => '', 'See %{node_file_href}' => '', 'See %{node_file_href} @cite{%{book}}' => '', 'See %{node_file_href} section `%{section}\' in @cite{%{book}}' => '', 'See %{reference_name}' => '', 'See @cite{%{book}}' => '', 'See section %{reference_name}' => '', 'See section `%{section}\' in @cite{%{book}}' => '', 'September' => 'September', 'Short Table of Contents' => 'Korte inhoudsopgave', 'Short table of contents' => '', 'Subsection One-Four' => '', 'Subsection One-One' => '', 'Subsection One-Three' => '', 'Subsection One-Two' => '', 'Subsubsection One-Two-Four' => '', 'Subsubsection One-Two-One' => '', 'Subsubsection One-Two-Three' => '', 'Subsubsection One-Two-Two' => '', 'T2H_today' => '', 'Table of Contents' => 'Inhoudsopgave', 'Table of contents' => '', 'The node you are looking for is at %{href}.' => '', 'This' => '', 'This document was generated by @emph{%{user}} on @emph{%{date}} using @uref{%{program_homepage}, @emph{%{program}}}.' => '', 'This document was generated by @emph{%{user}} using @uref{%{program_homepage}, @emph{%{program}}}.' => '', 'This document was generated on @i{%{date}} using @uref{%{program_homepage}, @i{%{program}}}.' => '', 'This document was generated using @uref{%{program_homepage}, @emph{%{program}}}.' => '', 'Top' => '', 'Untitled Document' => '', 'Up' => '', 'Up node' => '', 'Up section' => '', 'by @emph{%{user}}' => '', 'by @emph{%{user}} on @emph{%{date}}' => '', 'current' => '', 'on @emph{%{date}}' => '', 'section `%{section}\' in @cite{%{book}}' => '', 'see %{node_file_href}' => '', 'see %{node_file_href} @cite{%{book}}' => '', 'see %{node_file_href} section `%{section}\' in @cite{%{book}}' => '', 'see %{reference_name}' => '', 'see @cite{%{book}}' => '', 'see section %{reference_name}' => '', 'see section `%{section}\' in @cite{%{book}}' => '', 'unknown' => '' }; $T2H_OBSOLETE_STRINGS->{'nl'} = { 'See' => 'Zie', 'section' => 'sectie', 'see' => 'zie' }; texi2html-1.82/i18n/pt_BR0000644000175000017500000002725411264347115016756 0ustar flichtenheldflichtenheld$LANGUAGES->{'pt_BR'} = { ' The buttons in the navigation panels have the following meaning:' => ' Os bot@~oes nos pain@\'eis de navega@,{c}@~ao possuem os seguintes significados:', ' where the @strong{ Example } assumes that the current position is at @strong{ Subsubsection One-Two-Three } of a document of the following structure:' => ' onde o @strong{ Exemplo } assume que a posi@,{c}@~ao atual localiza-se em @strong{ Subsub@,{c}@~ao Um-Dois-Tr@^es } de um documento com a seguinte estrutura:', ' Up ' => ' Acima ', '%{acronym_like} (%{explanation})' => '', '%{month} %{day}, %{year}' => '%{day} de %{month} de %{year}', '%{name} of %{class}' => '%{name} da %{class}', '%{name} on %{class}' => '%{name} na %{class}', '%{node_file_href}' => '', '%{node_file_href} @cite{%{book}}' => '', '%{node_file_href} section `%{section}\' in @cite{%{book}}' => '%{node_file_href} se@,{c}@~ao `%{section}\' em @cite{%{book}}', '%{reference_name}' => '', '%{style} %{number}' => '', '%{style}: %{caption_first_line}' => '', '%{style}: %{shortcaption_first_line}' => '', '@b{%{quotation_arg}:} ' => '', '@cite{%{book}}' => '', 'About' => 'Sobre', 'About (help)' => 'Sobre (ajuda)', 'About This Document' => 'Sobre Esse Documento', 'April' => 'Abril', 'August' => 'Agosto', 'Back' => 'Volta', 'Back section in previous file' => '', 'Beginning of this chapter or previous chapter' => 'Come@,{c}o desse cap@\'itulo ou cap@\'itulo anterior', 'Button' => 'Bot@~ao', 'Contents' => 'Conte@\'udo', 'Cover (top) of document' => 'In@\'icio (topo) do documento', 'Current Position' => 'Posi@,{c}@~ao Atual', 'Current section' => 'Se@,{c}@~ao atual', 'December' => 'Dezembro', 'FastBack' => 'Voltar R@\'apido', 'FastForward' => 'Avan@,{c}ar R@\'apido', 'February' => 'Fevereiro', 'First' => 'Primeiro', 'First section in reading order' => 'Primeira se@,{c}@~ao na ordem de leitura', 'Following' => 'Seguinte', 'Following node' => 'Nodo seguinte', 'Footnotes' => 'Notas de Rodap@\'e', 'Forward' => 'Avan@,{c}ar', 'Forward section in next file' => '', 'From 1.2.3 go to' => 'De 1.2.3 v@\'a para', 'Go to' => 'V@\'a para', 'Index' => '@\'Indice', 'Index Entry' => 'Entrada de @\'Indice', 'January' => 'Janeiro', 'July' => 'Julho', 'Jump to' => 'Pular para', 'June' => 'Junho', 'Last' => '@\'Ultimo', 'Last section in reading order' => '@\'Ultima se@,{c}@~ao na ordem de leitura', 'March' => 'Mar@,{c}o', 'May' => 'Maio', 'Menu:' => '', 'Name' => 'Nome', 'Next' => 'Pr@\'oximo', 'Next chapter' => 'Pr@\'oximo cap@\'itulo', 'Next file' => '', 'Next node' => 'Pr@\'oximo nodo', 'Next section in reading order' => 'Pr@\'oxima se@,{c}@~ao na ordem de leitura', 'Next section on same level' => 'Pr@\'oxima se@,{c}@~ao no mesmo n@\'ivel', 'NextFile' => '', 'Node following in node reading order' => 'Nodo seguinte na ordem de leitura de nodos', 'Node up' => 'Nodo acima', 'NodeNext' => 'Pr@\'oximo Nodo', 'NodePrev' => 'Nodo Anterior', 'NodeUp' => 'Nodo Acima', 'November' => 'Novembro', 'October' => 'Outubro', 'Overview' => 'Vis@~ao geral', 'Overview:' => 'Vis@~ao geral:', 'Prev' => 'Pr@\'evio', 'PrevFile' => '', 'Previous file' => '', 'Previous node' => 'Nodo anterior', 'Previous section in reading order' => 'Se@,{c}@~ao anterior na ordem de leitura', 'Previous section on same level' => 'Se@,{c}@~ao anterior no mesmo n@\'ivel', 'Section' => 'Se@,{c}@~ao', 'Section One' => 'Se@,{c}@~ao Um', 'See %{node_file_href}' => 'Veja %{node_file_href}', 'See %{node_file_href} @cite{%{book}}' => 'Veja %{node_file_href} @cite{%{book}}', 'See %{node_file_href} section `%{section}\' in @cite{%{book}}' => 'Veja %{node_file_href} se@,{c}@~ao `%{section}\' em @cite{%{book}}', 'See %{reference_name}' => 'Veja %{reference_name}', 'See @cite{%{book}}' => 'Veja @cite{%{book}}', 'See section %{reference_name}' => 'Veja se@,{c}@~ao %{reference_name}', 'See section `%{section}\' in @cite{%{book}}' => 'Veja se@,{c}@~ao `%{section}\' em @cite{%{book}}', 'September' => 'Setembro', 'Short Table of Contents' => 'Breve Sum@\'ario', 'Short table of contents' => 'Breve sum@\'ario', 'Subsection One-Four' => 'Subse@,{c}@~ao Um-Quatro', 'Subsection One-One' => 'Subse@,{c}@~ao Um-Um', 'Subsection One-Three' => 'Subse@,{c}@~ao Um-Tr@^es', 'Subsection One-Two' => 'Subse@,{c}@~ao Um-Dois', 'Subsubsection One-Two-Four' => 'Subse@,{c}@~ao Um-Dois-Quatro', 'Subsubsection One-Two-One' => 'Subse@,{c}@~ao Um-Dois-Um', 'Subsubsection One-Two-Three' => 'Subse@,{c}@~ao Um-Dois-Tr@^es', 'Subsubsection One-Two-Two' => 'Subse@,{c}@~ao Um-Dois-Dois', 'T2H_today' => '', 'Table of Contents' => 'Sum@\'ario', 'Table of contents' => 'Sum@\'ario', 'The node you are looking for is at %{href}.' => 'O nodo que vo@^e est@\'a olhando est@\'a em %{href}.', 'This' => 'Esse', 'This document was generated by @emph{%{user}} on @emph{%{date}} using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Esse documento foi gereado por @emph{%{user}} em @emph{%{date}} usando @uref{%{program_homepage}, @emph{%{program}}}.', 'This document was generated by @emph{%{user}} using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Esse documento foi gerado por @emph{%{user}} usando @uref{%{program_homepage}, @emph{%{program}}}.', 'This document was generated on @i{%{date}} using @uref{%{program_homepage}, @i{%{program}}}.' => 'Esse documento foi gerado em @i{%{date}} usando @uref{%{program_homepage}, @i{%{program}}}.', 'This document was generated using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Esse documento foi gerado usando @uref{%{program_homepage}, @emph{%{program}}}.', 'Top' => 'Topo', 'Untitled Document' => 'Documento Sem Nome', 'Up' => 'Acima', 'Up node' => 'Nodo acima', 'Up section' => 'Se@,{c}@~ao acima', 'by @emph{%{user}}' => 'por @emph{%{user}}', 'by @emph{%{user}} on @emph{%{date}}' => 'por @emph{%{user}} em @emph{%{date}}', 'current' => 'atual', 'on @emph{%{date}}' => 'em @emph{%{date}}', 'section `%{section}\' in @cite{%{book}}' => 'se@,{c}@~ao `%{section}\' em @cite{%{book}}', 'see %{node_file_href}' => 'veja %{node_file_href}', 'see %{node_file_href} @cite{%{book}}' => 'veja %{node_file_href} @cite{%{book}}', 'see %{node_file_href} section `%{section}\' in @cite{%{book}}' => 'veja %{node_file_href} se@,{c}@~ao `%{section}\' em @cite{%{book}}', 'see %{reference_name}' => 'veja %{reference_name}', 'see @cite{%{book}}' => 'veja @cite{%{book}}', 'see section %{reference_name}' => 'veja se@,{c}@~ao %{reference_name}', 'see section `%{section}\' in @cite{%{book}}' => 'veja se@,{c}@~ao `%{section}\' em @cite{%{book}}', 'unknown' => 'desconhecido' }; $T2H_OBSOLETE_STRINGS->{'pt_BR'} = { 'See' => 'Veja', 'about (help)' => 'sobre (ajuda)', 'beginning of this chapter or previous chapter' => 'come@,{c}o desse cap@\'itulo ou cap@\'itulo anterior', 'cover (top) of document' => 'in@\'icio (topo) do documento', 'current section' => 'se@,{c}@~ao atual', 'first section in reading order' => 'primeira se@,{c}@~ao na ordem de leitura', 'following node' => 'nodo seguinte', 'index' => '@\'indice', 'last section in reading order' => '@\'ultima se@,{c}@~ao na ordem de leitura', 'next chapter' => 'pr@\'oximo cap@\'itulo', 'next node' => 'pr@\'oximo nodo', 'next section in reading order' => 'pr@\'oxima se@,{c}@~ao na ordem de leitura', 'next section on same level' => 'pr@\'oxima se@,{c}@~ao no mesmo n@\'ivel', 'node following in node reading order' => 'nodo seguinte na ordem de leitura de nodos', 'node up' => 'nodo acima', 'previous node' => 'nodo anterior', 'previous section in reading order' => 'se@,{c}@~ao anterior na ordem de leitura', 'previous section on same level' => 'se@,{c}@~ao anterior no mesmo n@\'ivel', 'section' => 'Se@,{c}@~ao', 'see' => 'veja', 'short table of contents' => 'breve sum@\'ario', 'table of contents' => 'sum@\'ario', 'up node' => 'nodo acima', 'up section' => 'se@,{c}@~ao acima' }; texi2html-1.82/i18n/ja0000644000175000017500000002305211264347115016332 0ustar flichtenheldflichtenheld$LANGUAGES->{'ja'} = { ' The buttons in the navigation panels have the following meaning:' => 'ナビゲーションパネル中のボタンには以下の意味があります。', ' where the @strong{ Example } assumes that the current position is at @strong{ Subsubsection One-Two-Three } of a document of the following structure:' => '@strong{例}では、以下に示す構造を持つ文書の@strong{1.2.3項}を現在位置に仮定しています。', ' Up ' => '上', '%{acronym_like} (%{explanation})' => '', '%{month} %{day}, %{year}' => '%{year}年%{month}月%{day}日', '%{name} of %{class}' => '', '%{name} on %{class}' => '', '%{node_file_href}' => '', '%{node_file_href} @cite{%{book}}' => '', '%{node_file_href} section `%{section}\' in @cite{%{book}}' => '', '%{reference_name}' => '', '%{style} %{number}' => '', '%{style}: %{caption_first_line}' => '', '%{style}: %{shortcaption_first_line}' => '', '@b{%{quotation_arg}:} ' => '', '@cite{%{book}}' => '', 'About' => '', 'About (help)' => '', 'About This Document' => 'この文書について', 'April' => '4月', 'August' => '8月', 'Back' => '', 'Back section in previous file' => '', 'Beginning of this chapter or previous chapter' => '', 'Button' => 'ボタン', 'Contents' => '目次', 'Cover (top) of document' => '', 'Current Position' => '現在位置', 'Current section' => '', 'December' => '12月', 'FastBack' => '', 'FastForward' => '', 'February' => '2月', 'First' => '', 'First section in reading order' => '', 'Following' => '', 'Following node' => '', 'Footnotes' => '脚注', 'Forward' => '', 'Forward section in next file' => '', 'From 1.2.3 go to' => '1.2.3項からの移動先', 'Go to' => '移動先', 'Index' => '見出し', 'Index Entry' => '見出し一覧', 'January' => '1月', 'July' => '7月', 'Jump to' => '移動', 'June' => '6月', 'Last' => '', 'Last section in reading order' => '', 'March' => '3月', 'May' => '5月', 'Menu:' => 'メニュー', 'Name' => '名称', 'Next' => '次', 'Next chapter' => '', 'Next file' => '', 'Next node' => '', 'Next section in reading order' => '', 'Next section on same level' => '', 'NextFile' => '', 'Node following in node reading order' => '', 'Node up' => '', 'NodeNext' => '', 'NodePrev' => '', 'NodeUp' => '', 'November' => '11月', 'October' => '10月', 'Overview' => '概要', 'Overview:' => '概要:', 'Prev' => '前', 'PrevFile' => '', 'Previous file' => '', 'Previous node' => '', 'Previous section in reading order' => '', 'Previous section on same level' => '', 'Section' => '項', 'Section One' => '第1項', 'See %{node_file_href}' => '', 'See %{node_file_href} @cite{%{book}}' => '', 'See %{node_file_href} section `%{section}\' in @cite{%{book}}' => '', 'See %{reference_name}' => '', 'See @cite{%{book}}' => '', 'See section %{reference_name}' => '', 'See section `%{section}\' in @cite{%{book}}' => '', 'September' => '9月', 'Short Table of Contents' => '簡略化した目次', 'Short table of contents' => '', 'Subsection One-Four' => '第1.4項', 'Subsection One-One' => '第1.1項', 'Subsection One-Three' => '第1.3項', 'Subsection One-Two' => '第1.2項', 'Subsubsection One-Two-Four' => '第1.2.4項', 'Subsubsection One-Two-One' => '第1.2.1項', 'Subsubsection One-Two-Three' => '第1.2.3項', 'Subsubsection One-Two-Two' => '第1.2.2項', 'T2H_today' => '%s, %d %d', 'Table of Contents' => '目次', 'Table of contents' => '', 'The node you are looking for is at %{href}.' => '', 'This' => '', 'This document was generated by @emph{%{user}} on @emph{%{date}} using @uref{%{program_homepage}, @emph{%{program}}}.' => 'この文書は@emph{%{user}}によって@emph{%{date}}に@uref{%{program_homepage}, @emph{%{program}}}を用いて生成されました。', 'This document was generated by @emph{%{user}} using @uref{%{program_homepage}, @emph{%{program}}}.' => 'この文書は@emph{%{user}}によって@uref{%{program_homepage}, @emph{%{program}}}を用いて生成されました。', 'This document was generated on @i{%{date}} using @uref{%{program_homepage}, @i{%{program}}}.' => 'この文書は@emph{%{date}}に@uref{%{program_homepage}, @emph{%{program}}}を用いて生成されました。', 'This document was generated using @uref{%{program_homepage}, @emph{%{program}}}.' => 'この文書は@uref{%{program_homepage}, @emph{%{program}}}を用いて生成されました。', 'Top' => '冒頭', 'Untitled Document' => '無題の文書', 'Up' => '', 'Up node' => '', 'Up section' => '', 'by @emph{%{user}}' => '@emph{%{user}}', 'by @emph{%{user}} on @emph{%{date}}' => '@emph{%{user}}, @emph{%{date}', 'current' => '現在位置', 'on @emph{%{date}}' => '@emph{%{date}}', 'section `%{section}\' in @cite{%{book}}' => '@cite{%{book}}の `%{section}\' ', 'see %{node_file_href}' => '%{node_file_href}参照', 'see %{node_file_href} @cite{%{book}}' => '%{node_file_href} @cite{%{book}}参照', 'see %{node_file_href} section `%{section}\' in @cite{%{book}}' => '', 'see %{reference_name}' => '', 'see @cite{%{book}}' => '', 'see section %{reference_name}' => '', 'see section `%{section}\' in @cite{%{book}}' => '', 'unknown' => '不明' }; $T2H_OBSOLETE_STRINGS->{'ja'} = { 'about (help)' => '使用法 (ヘルプ)', 'beginning of this chapter or previous chapter' => 'この章または前の章の冒頭', 'cover (top) of document' => '文書の表紙 (トップ)', 'current section' => '現在の節', 'first section in reading order' => '文書順で前の項', 'following node' => '次の節', 'index' => '見出し', 'last section in reading order' => '文書順で最後の項', 'next chapter' => '次の章', 'next node' => '次の節', 'next section in reading order' => '文書順で次の項', 'next section on same level' => '同じ階層にある次の項', 'node following in node reading order' => '文書順で次の節', 'node up' => '上の節へ', 'previous node' => '前の節', 'previous section in reading order' => '文書順で前の節', 'previous section on same level' => '同じ階層にある前の項', 'short table of contents' => '簡略化した目次', 'table of contents' => '文書の目次', 'up node' => '上の節', 'up section' => '上の項' }; texi2html-1.82/i18n/pt0000644000175000017500000002634711264347115016375 0ustar flichtenheldflichtenheld$LANGUAGES->{'pt'} = { ' The buttons in the navigation panels have the following meaning:' => ' Os bot@~oes nos pain@\'eis de navega@,{c}@~ao possuem os seguintes significados:', ' where the @strong{ Example } assumes that the current position is at @strong{ Subsubsection One-Two-Three } of a document of the following structure:' => ' onde o @strong{ Exemplo } assume que a posi@,{c}@~ao atual localiza-se em @strong{ Subsub@,{c}@~ao Um-Dois-Tr@^es } de um documento com a seguinte estrutura:', ' Up ' => ' Acima ', '%{acronym_like} (%{explanation})' => '', '%{month} %{day}, %{year}' => '%{day} de %{month} de %{year}', '%{name} of %{class}' => '%{name} da %{class}', '%{name} on %{class}' => '%{name} na %{class}', '%{node_file_href}' => '', '%{node_file_href} @cite{%{book}}' => '', '%{node_file_href} section `%{section}\' in @cite{%{book}}' => '%{node_file_href} se@,{c}@~ao `%{section}\' em @cite{%{book}}', '%{reference_name}' => '', '%{style} %{number}' => '', '%{style}: %{caption_first_line}' => '', '%{style}: %{shortcaption_first_line}' => '', '@b{%{quotation_arg}:} ' => '', '@cite{%{book}}' => '', 'About' => 'Sobre', 'About (help)' => 'Sobre (ajuda)', 'About This Document' => 'Sobre Esse Documento', 'April' => 'Abril', 'August' => 'Agosto', 'Back' => 'Volta', 'Back section in previous file' => '', 'Beginning of this chapter or previous chapter' => 'Come@,{c}o desse cap@\'itulo ou cap@\'itulo anterior', 'Button' => 'Bot@~ao', 'Contents' => 'Conte@\'udo', 'Cover (top) of document' => 'In@\'icio (topo) do documento', 'Current Position' => 'Posi@,{c}@~ao Atual', 'Current section' => 'Se@,{c}@~ao atual', 'December' => 'Dezembro', 'FastBack' => 'Voltar R@\'apido', 'FastForward' => 'Avan@,{c}ar R@\'apido', 'February' => 'Fevereiro', 'First' => 'Primeiro', 'First section in reading order' => 'Primeira se@,{c}@~ao na ordem de leitura', 'Following' => 'Seguinte', 'Following node' => 'Nodo seguinte', 'Footnotes' => 'Notas de Rodap@\'e', 'Forward' => 'Avan@,{c}ar', 'Forward section in next file' => '', 'From 1.2.3 go to' => 'De 1.2.3 v@\'a para', 'Go to' => 'V@\'a para', 'Index' => '@\'Indice', 'Index Entry' => 'Entrada de @\'Indice', 'January' => 'Janeiro', 'July' => 'Julho', 'Jump to' => 'Pular para', 'June' => 'Junho', 'Last' => '@\'Ultimo', 'Last section in reading order' => '@\'Ultima se@,{c}@~ao na ordem de leitura', 'March' => 'Mar@,{c}o', 'May' => 'Maio', 'Menu:' => '', 'Name' => 'Nome', 'Next' => 'Pr@\'oximo', 'Next chapter' => 'Pr@\'oximo cap@\'itulo', 'Next file' => '', 'Next node' => 'Pr@\'oximo nodo', 'Next section in reading order' => 'Pr@\'oxima se@,{c}@~ao na ordem de leitura', 'Next section on same level' => 'Pr@\'oxima se@,{c}@~ao no mesmo n@\'ivel', 'NextFile' => '', 'Node following in node reading order' => 'Nodo seguinte na ordem de leitura de nodos', 'Node up' => 'Nodo acima', 'NodeNext' => 'Pr@\'oximo Nodo', 'NodePrev' => 'Nodo Anterior', 'NodeUp' => 'Nodo Acima', 'November' => 'Novembro', 'October' => 'Outubro', 'Overview' => 'Vis@~ao geral', 'Overview:' => 'Vis@~ao geral:', 'Prev' => 'Pr@\'evio', 'PrevFile' => '', 'Previous file' => '', 'Previous node' => 'Nodo anterior', 'Previous section in reading order' => 'Se@,{c}@~ao anterior na ordem de leitura', 'Previous section on same level' => 'Se@,{c}@~ao anterior no mesmo n@\'ivel', 'Section' => 'Se@,{c}@~ao', 'Section One' => 'Se@,{c}@~ao Um', 'See %{node_file_href}' => 'Veja %{node_file_href}', 'See %{node_file_href} @cite{%{book}}' => 'Veja %{node_file_href} @cite{%{book}}', 'See %{node_file_href} section `%{section}\' in @cite{%{book}}' => 'Veja %{node_file_href} se@,{c}@~ao `%{section}\' em @cite{%{book}}', 'See %{reference_name}' => 'Veja %{reference_name}', 'See @cite{%{book}}' => 'Veja @cite{%{book}}', 'See section %{reference_name}' => 'Veja se@,{c}@~ao %{reference_name}', 'See section `%{section}\' in @cite{%{book}}' => 'Veja se@,{c}@~ao `%{section}\' em @cite{%{book}}', 'September' => 'Setembro', 'Short Table of Contents' => 'Breve Sum@\'ario', 'Short table of contents' => 'Breve sum@\'ario', 'Subsection One-Four' => 'Subse@,{c}@~ao Um-Quatro', 'Subsection One-One' => 'Subse@,{c}@~ao Um-Um', 'Subsection One-Three' => 'Subse@,{c}@~ao Um-Tr@^es', 'Subsection One-Two' => 'Subse@,{c}@~ao Um-Dois', 'Subsubsection One-Two-Four' => 'Subse@,{c}@~ao Um-Dois-Quatro', 'Subsubsection One-Two-One' => 'Subse@,{c}@~ao Um-Dois-Um', 'Subsubsection One-Two-Three' => 'Subse@,{c}@~ao Um-Dois-Tr@^es', 'Subsubsection One-Two-Two' => 'Subse@,{c}@~ao Um-Dois-Dois', 'T2H_today' => '', 'Table of Contents' => 'Sum@\'ario', 'Table of contents' => 'Sum@\'ario', 'The node you are looking for is at %{href}.' => 'O nodo que vo@^e est@\'a olhando est@\'a em %{href}.', 'This' => 'Esse', 'This document was generated by @emph{%{user}} on @emph{%{date}} using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Esse documento foi gereado por @emph{%{user}} em @emph{%{date}} usando @uref{%{program_homepage}, @emph{%{program}}}.', 'This document was generated by @emph{%{user}} using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Esse documento foi gerado por @emph{%{user}} usando @uref{%{program_homepage}, @emph{%{program}}}.', 'This document was generated on @i{%{date}} using @uref{%{program_homepage}, @i{%{program}}}.' => 'Esse documento foi gerado em @i{%{date}} usando @uref{%{program_homepage}, @i{%{program}}}.', 'This document was generated using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Esse documento foi gerado usando @uref{%{program_homepage}, @emph{%{program}}}.', 'Top' => 'Topo', 'Untitled Document' => 'Documento Sem Nome', 'Up' => 'Acima', 'Up node' => 'Nodo acima', 'Up section' => 'Se@,{c}@~ao acima', 'by @emph{%{user}}' => 'por @emph{%{user}}', 'by @emph{%{user}} on @emph{%{date}}' => 'por @emph{%{user}} em @emph{%{date}}', 'current' => 'atual', 'on @emph{%{date}}' => 'em @emph{%{date}}', 'section `%{section}\' in @cite{%{book}}' => 'se@,{c}@~ao `%{section}\' em @cite{%{book}}', 'see %{node_file_href}' => 'veja %{node_file_href}', 'see %{node_file_href} @cite{%{book}}' => 'veja %{node_file_href} @cite{%{book}}', 'see %{node_file_href} section `%{section}\' in @cite{%{book}}' => 'veja %{node_file_href} se@,{c}@~ao `%{section}\' em @cite{%{book}}', 'see %{reference_name}' => 'veja %{reference_name}', 'see @cite{%{book}}' => 'veja @cite{%{book}}', 'see section %{reference_name}' => 'veja se@,{c}@~ao %{reference_name}', 'see section `%{section}\' in @cite{%{book}}' => 'veja se@,{c}@~ao `%{section}\' em @cite{%{book}}', 'unknown' => 'desconhecido' }; $T2H_OBSOLETE_STRINGS->{'pt'} = { 'See' => 'Veja', 'about (help)' => 'sobre (ajuda)', 'beginning of this chapter or previous chapter' => 'come@,{c}o desse cap@\'itulo ou cap@\'itulo anterior', 'cover (top) of document' => 'in@\'icio (topo) do documento', 'current section' => 'se@,{c}@~ao atual', 'first section in reading order' => 'primeira se@,{c}@~ao na ordem de leitura', 'following node' => 'nodo seguinte', 'index' => '@\'indice', 'last section in reading order' => '@\'ultima se@,{c}@~ao na ordem de leitura', 'next chapter' => 'pr@\'oximo cap@\'itulo', 'next node' => 'pr@\'oximo nodo', 'next section in reading order' => 'pr@\'oxima se@,{c}@~ao na ordem de leitura', 'next section on same level' => 'pr@\'oxima se@,{c}@~ao no mesmo n@\'ivel', 'node following in node reading order' => 'nodo seguinte na ordem de leitura de nodos', 'node up' => 'nodo acima', 'previous node' => 'nodo anterior', 'previous section in reading order' => 'se@,{c}@~ao anterior na ordem de leitura', 'previous section on same level' => 'se@,{c}@~ao anterior no mesmo n@\'ivel', 'section' => 'Se@,{c}@~ao', 'see' => 'veja', 'short table of contents' => 'breve sum@\'ario', 'table of contents' => 'sum@\'ario', 'up node' => 'nodo acima', 'up section' => 'se@,{c}@~ao acima' }; texi2html-1.82/i18n/de0000644000175000017500000002236111264347115016332 0ustar flichtenheldflichtenheld$LANGUAGES->{'de'} = { ' The buttons in the navigation panels have the following meaning:' => ' Die Links in der Navigationsleiste haben die folgende Bedeutung: ', ' where the @strong{ Example } assumes that the current position is at @strong{ Subsubsection One-Two-Three } of a document of the following structure:' => ' wobei das @strong{ Beispiel } annimmt, dass die aktuelle Position bei @strong{ Unterabschnitt 1-2-3 } in einem Dokument mit folgender Struktur liegt:', ' Up ' => ' Nach oben ', '%{acronym_like} (%{explanation})' => '%{acronym_like} (%{explanation})', '%{month} %{day}, %{year}' => '%{day}. %{month} %{year}', '%{name} of %{class}' => '', '%{name} on %{class}' => '', '%{node_file_href}' => '', '%{node_file_href} @cite{%{book}}' => '', '%{node_file_href} section `%{section}\' in @cite{%{book}}' => '%{node_file_href} in Abschnitt `%{section}\' in @cite{%{book}}', '%{reference_name}' => '%{reference_name}', '%{style} %{number}' => '%{style} %{number}', '%{style}: %{caption_first_line}' => '%{style}: %{caption_first_line}', '%{style}: %{shortcaption_first_line}' => '%{style}: %{shortcaption_first_line}', '@b{%{quotation_arg}:} ' => '@b{%{quotation_arg}:} ', '@cite{%{book}}' => '@cite{%{book}}', 'About' => '@"Uber', 'About (help)' => '@"Uber (Hilfe)', 'About This Document' => '@"Uber dieses Dokument', 'April' => 'April', 'August' => 'August', 'Back' => 'Zur@"uck', 'Back section in previous file' => '', 'Beginning of this chapter or previous chapter' => 'Anfang dieses oder des letzten Kapitels', 'Button' => '', 'Contents' => 'Inhalt', 'Cover (top) of document' => 'Titelseite des Dokuments', 'Current Position' => 'Aktuelle Position', 'Current section' => 'Aktueller Abschnitt', 'December' => 'Dezember', 'FastBack' => '', 'FastForward' => '', 'February' => 'Februar', 'First' => '', 'First section in reading order' => 'Erster Abschnitt in Lesereihenfolge', 'Following' => '', 'Following node' => 'N@"achster Knoten', 'Footnotes' => 'Fu@ss{}noten', 'Forward' => 'Nach vorne', 'Forward section in next file' => '', 'From 1.2.3 go to' => 'Von 1.2.3 gehe zu', 'Go to' => 'Gehe zu', 'Index' => 'Index', 'Index Entry' => 'Indexeintrag', 'January' => 'Januar', 'July' => 'Juli', 'Jump to' => 'Springe zu', 'June' => 'Juni', 'Last' => '', 'Last section in reading order' => 'Letzter Abschnitt in Lesereihenfolge', 'March' => 'M@"arz', 'May' => 'Mai', 'Menu:' => 'Auswahl:', 'Name' => 'Name', 'Next' => '', 'Next chapter' => 'N@"achstes Kapitel', 'Next file' => '', 'Next node' => 'N@"achster Knoten', 'Next section in reading order' => 'N@"achster Abschnitt in Lesereihenfolge', 'Next section on same level' => 'N@"achster Abschitt derselben Ebene', 'NextFile' => '', 'Node following in node reading order' => 'N@"achster Abschnitt in Lesereihenfolge', 'Node up' => 'Knoten nach oben', 'NodeNext' => '', 'NodePrev' => '', 'NodeUp' => '', 'November' => 'November', 'October' => 'Oktober', 'Overview' => '@"Ubersicht', 'Overview:' => '@"Ubersicht:', 'Prev' => '', 'PrevFile' => '', 'Previous file' => '', 'Previous node' => 'Voriger Knoten', 'Previous section in reading order' => 'Voriger Abschnitt in Lesereihenfolge', 'Previous section on same level' => 'Voriger Abschnitt derselben Ebene', 'Section' => 'Abschnitt', 'Section One' => 'Abschnitt 1', 'See %{node_file_href}' => 'Siehe %{node_file_href}', 'See %{node_file_href} @cite{%{book}}' => 'Siehe %{node_file_href} @cite{%{book}}', 'See %{node_file_href} section `%{section}\' in @cite{%{book}}' => 'Siehe %{node_file_href} in Abschnitt `%{section}\' in @cite{%{book}}', 'See %{reference_name}' => '', 'See @cite{%{book}}' => '', 'See section %{reference_name}' => '', 'See section `%{section}\' in @cite{%{book}}' => 'Siehe Abschnitt `%{section}\' in @cite{%{book}}', 'September' => 'September', 'Short Table of Contents' => 'Kurzes Inhaltsverzeichnis', 'Short table of contents' => 'Kurzes Inhaltsverzeichnis', 'Subsection One-Four' => 'Unterabschnitt 1-4', 'Subsection One-One' => 'Unterabschnitt 1-1', 'Subsection One-Three' => 'Unterabschnitt 1-3', 'Subsection One-Two' => 'Unterabschnitt 1-2', 'Subsubsection One-Two-Four' => 'Unterabschnitt 1-2-4', 'Subsubsection One-Two-One' => 'Unterabschnitt 1-2-1', 'Subsubsection One-Two-Three' => 'Unterabschnitt 1-2-3', 'Subsubsection One-Two-Two' => 'Unterabschnitt 1-2-2', 'T2H_today' => '', 'Table of Contents' => 'Inhaltsverzeichnis', 'Table of contents' => 'Inhaltsverzeichnis', 'The node you are looking for is at %{href}.' => 'Der Knoten, den Sie sehen, befindet sich bei %{href}', 'This' => '', 'This document was generated by @emph{%{user}} on @emph{%{date}} using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Dieses Dokument wurde erzeugt von @emph{%{user}} am @emph{%{date}} durch @uref{%{program_homepage}, @emph{%{program}}}.', 'This document was generated by @emph{%{user}} using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Dieses Dokument wurde erzeugt von @emph{%{user}} durch @uref{%{program_homepage}, @emph{%{program}}}.', 'This document was generated on @i{%{date}} using @uref{%{program_homepage}, @i{%{program}}}.' => 'Dieses Dokument wurde erzeugt am @i{%{date}} durch @uref{%{program_homepage}, @i{%{program}}}.', 'This document was generated using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Dieses Dokument wurde erzeugt durch @uref{%{program_homepage}, @emph{%{program}}}.', 'Top' => 'Anfang', 'Untitled Document' => 'Unbenanntes Dokumen', 'Up' => 'Nach oben', 'Up node' => 'Knoten nach oben', 'Up section' => 'Abschnitt nach oben', 'by @emph{%{user}}' => 'von @emph{%{user}}', 'by @emph{%{user}} on @emph{%{date}}' => 'von @emph{%{user}} am @emph{%{date}}', 'current' => '', 'on @emph{%{date}}' => 'am @emph{%{date}}', 'section `%{section}\' in @cite{%{book}}' => 'Abschnitt `%{section}\' in @cite{%{book}}', 'see %{node_file_href}' => 'siehe %{node_file_href}', 'see %{node_file_href} @cite{%{book}}' => 'siehe %{node_file_href} @cite{%{book}}', 'see %{node_file_href} section `%{section}\' in @cite{%{book}}' => 'siehe %{node_file_href} im Abschnitt `%{section}\' in @cite{%{book}}', 'see %{reference_name}' => 'siehe %{reference_name}', 'see @cite{%{book}}' => 'siehe @cite{%{book}}', 'see section %{reference_name}' => 'siehe Abschnitt %{reference_name}', 'see section `%{section}\' in @cite{%{book}}' => 'siehe Abschnitt `%{section}\' in @cite{%{book}}', 'unknown' => 'unbekannt' }; $T2H_OBSOLETE_STRINGS->{'de'} = { 'See' => 'Siehe', 'section' => 'Abschnitt', 'see' => 'siehe' };

    @MISC_BUTTONS = @SECTION_BUTTONS; $foot_line_and_ref = \&makeinfo_like_foot_line_and_ref; $foot_lines = \&makeinfo_like_foot_lines; $paragraph = \&makeinfo_like_paragraph; $index_summary = \&makeinfo_like_index_summary; $summary_letter = \&makeinfo_like_summary_letter; $index_entry = \&makeinfo_like_index_entry; $index_letter = \&makeinfo_like_index_letter; $print_index = \&makeinfo_like_print_index; $listoffloats = \&makeinfo_like_listoffloats; $listoffloats_entry = \&makeinfo_like_listoffloats_entry; $menu_link = \&makeinfo_like_menu_link; $menu_description = \&makeinfo_like_menu_description; $menu_comment = \&makeinfo_like_menu_comment; $menu = \&makeinfo_like_menu; sub makeinfo_like_foot_line_and_ref($$$$$$$$) { my $foot_num = shift; my $relative_num = shift; my $footid = shift; my $docid = shift; my $from_file = shift; my $footnote_file = shift; my $lines = shift; my $state = shift; $makekinfo_like_footnote_absolute_number++; # this is a bit obscure, this allows to add an anchor only if formatted # as part of the document. $docid = '' if ($state->{'outside_document'} or $state->{'multiple_pass'}); if ($from_file eq $footnote_file) { $from_file = $footnote_file = ''; } my $foot_anchor = "" . &$anchor($docid, "$footnote_file#$footid", $relative_num) . ""; $foot_anchor = &$anchor($docid, "$footnote_file#$footid", "($relative_num)") if ($state->{'preformatted'}); # unshift @$lines, "
  • "; # push @$lines, "
  • \n"; return ($lines, $foot_anchor); } sub makeinfo_like_foot_lines($) { my $lines = shift; unshift @$lines, "
    \n

    $Texi2HTML::I18n::WORDS->{'Footnotes_Title'}

    \n"; #
      \n"; # push @$lines, "
    "; return $lines; } sub makeinfo_like_paragraph ($$$$$$$$$$$$$) { my $text = shift; my $align = shift; my $indent = shift; my $paragraph_command = shift; my $paragraph_command_formatted = shift; my $paragraph_number = shift; my $format = shift; my $item_nr = shift; my $enumerate_style = shift; my $number = shift; my $command_stack_at_end = shift; my $command_stack_at_begin = shift; my $state = shift; #print STDERR "format: $format\n" if (defined($format)); #print STDERR "paragraph @$command_stack_at_end; @$command_stack_at_begin\n"; $paragraph_command_formatted = '' if (!defined($paragraph_command_formatted) or exists($special_list_commands{$format}->{$paragraph_command})); return '' if ($text =~ /^\s*$/); foreach my $style(t2h_collect_styles($command_stack_at_begin)) { $text = t2h_begin_style($style, $text); } foreach my $style(t2h_collect_styles($command_stack_at_end)) { $text = t2h_end_style($style, $text); } if (defined($paragraph_number) and defined($$paragraph_number)) { $$paragraph_number++; return $text if (($format eq 'itemize' or $format eq 'enumerate') and ($$paragraph_number == 1)); } my $open = '[0]) and $command_stack_at_begin->[0] eq 'footnote') { my $state = $Texi2HTML::THISDOC{'state'}; $makekinfo_like_paragraph_in_footnote_nr{$makekinfo_like_footnote_absolute_number}++; if ($makekinfo_like_paragraph_in_footnote_nr{$makekinfo_like_footnote_absolute_number} <= 1) { $open.=' class="footnote"'; my $document_file = $state->{'footnote_document_file'}; if ($document_file eq $state->{'footnote_footnote_file'}) { $document_file = ''; } my $docid = $state->{'footnote_place_id'}; my $doc_state = $state->{'footnote_document_state'}; $docid = '' if ($doc_state->{'outside_document'} or $doc_state->{'multiple_pass'}); my $foot_label = &$anchor($state->{'footnote_footnote_id'}, $document_file . "#$state->{'footnote_place_id'}", "$state->{'footnote_number_in_page'}"); $footnote_text = "[${foot_label}] "; } } $text = $footnote_text.$text; my $top_stack = ''; $top_stack = $command_stack_at_begin->[-1] if (scalar (@$command_stack_at_begin)); if ($top_stack eq 'multitable') # FIXME # paragraph_number is not by cell, so it is not possible to know if it # is the first paragraph in cell. Also currently there is no hook for a # cell beginning which means that it is not possible to reset the cell # paragraph count at a cell beginning # and (!defined($paragraph_number) or !defined($$paragraph_number) or $$paragraph_number == 1)) { return $text; } return $open.'>'.$text.'

    '; } sub makeinfo_like_index_summary { return ''; } sub makeinfo_like_summary_letter { return ''; } sub makeinfo_like_index_entry($$$$) { my $text_href = shift; my $entry = shift; my $element_href = shift; my $element_text = shift; return '
  • ' . $entry . ': ' . &$anchor('', $element_href, $element_text) . "
  • \n"; } sub makeinfo_like_index_letter($$$) { my $letter = shift; my $id = shift; my $text = shift; return $text; } sub makeinfo_like_print_index($$) { my $text = shift; my $name = shift; return '' if (!defined($text)); return "
      \n" . $text . "
    \n"; } sub makeinfo_like_listoffloats_entry($$$$) { my $style_texi = shift; my $float = shift; my $float_style = shift; my $caption = shift; my $href = shift; if ($caption ne '') { return '
  • ' . &$I('%{href}: %{caption}', { 'href' => &$anchor('', $href, $float_style), 'caption' => $caption }) . "
  • \n"; } else { return '
  • ' . &$anchor('', $href, $float_style) . "
  • \n"; } } sub makeinfo_like_listoffloats($$$) { my $style_texi = shift; my $style = shift; my $float_entries = shift; my $result = "
      \n" ; foreach my $float_entry (@$float_entries) { $result .= $float_entry; } return $result . "
    \n"; } # a whole menu # # argument: # the whole menu text (entries and menu comments) # # argument: # whole menu text. sub makeinfo_like_menu($) { my $text = shift; $menu_entry_index=0; if ($text =~ /\S/) { return "
      \n" . $text . "
    \n"; } } # formats a menu entry link pointing to a node or section # # arguments: # the entry text # the state, a hash reference holding informations about the context, with a # usefull entry, 'preformatted', true if we are in a preformatted format # (a format keeping space between words). In that case a function # of the main program, main::do_preformatted($text, $state) might # be used to format the text with the current format style. # href is optionnal. It is the reference to the section or the node anchor # which should be used to make the link (typically it is the argument # of a href= attribute in a element). sub makeinfo_like_menu_link($$$$$$$) { my $entry = shift; my $state = shift; my $href = shift; my $node = shift; my $title = shift; my $ending = shift; my $has_title = shift; $title = '' unless ($has_title); if (($entry eq '') or $NODE_NAME_IN_MENU or $state->{'preformatted'}) { $title .= ':' if ($title ne ''); $entry = "$title$node"; } $menu_entry_index++; my $accesskey; $accesskey = "accesskey=\"$menu_entry_index\"" if ($USE_ACCESSKEY and ($menu_entry_index < 10)); $entry = &$anchor ('', $href, $entry, $accesskey) if (defined($href)); return $entry if ($SIMPLE_MENU); # if ($state->{'preformatted'}) # { # return '
  • ' . main::do_preformatted($entry . $ending, $state); # } return "
  • $entry"; } # formats a menu entry description, ie the text appearing after the node # specification in a menu entry an spanning until there is another # menu entry, an empty line or some text at the very beginning of the line # (we consider that text at the beginning of the line begins a menu comment) # # arguments: # the description text # the state. See menu_entry. sub makeinfo_like_menu_description($$) { my $text = shift; my $state = shift; return $text if ($SIMPLE_MENU); # if ($state->{'preformatted'}) # { # return main::do_preformatted($text, $state) . ''; # } return "$text
  • \n"; } # a menu comment (between menu lines) # formats the container of a menu comment. A menu comment is any text # appearing between menu lines, either separated by an empty line from # the preceding menu entry, or a text beginning at the first character # of the line (text not at the very beginning of the line is considered to # be the continuation of a menu entry description text). # # The text itself is considered to be in a preformatted environment # with name 'menu-commment' and with style $MENU_PRE_STYLE. # # argument # text contained in the menu comment. sub makeinfo_like_menu_comment($) { my $text = shift; return $text if ($SIMPLE_MENU); if ($text =~ /\S/) { return "$text
      "; } return ''; } 1; texi2html-1.82/examples/chm.init0000644000175000017500000003372411264347127020522 0ustar flichtenheldflichtenheld# -*-perl-*- #+############################################################################## # # chm.init: convert to chm intermediate formats hhp, hhc, hhk and html files # # Copyright (C) 2004-2008 Patrice Dumas # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 USA # #-############################################################################## #$SECTION_NAVIGATION = 0; # to avoid headers in normal elements $SHOW_MENU = 0; $SPLIT = 'node'; $DO_CONTENT = 1; $SPLIT_INDEX = undef; $IDX_SUMMARY = 1; $SMALL_RULE = ''; $DEFAULT_RULE = ''; $MIDDLE_RULE = ''; $BIG_RULE = ''; $DOCUMENT_DESCRIPTION = ''; $SEPARATED_FOOTNOTES = 0; push @command_handler_process, \&chm_initialize_variables; $index_summary_file_entry = \&chm_index_summary_file_entry; $index_summary_file_begin = \&chm_index_summary_file_begin; $index_summary_file_end = \&chm_index_summary_file_end; $print_page_foot = \&chm_print_page_foot; # no-ops to avoid headers and footers $print_head_navigation = \&chm_noop; #$print_Top_footer = \&chm_noop; $print_foot_navigation = \&chm_noop; $print_element_header = \&chm_noop; my $default_toc_body = $toc_body; $toc_body = \&chm_toc_body; $finish_out = \&chm_finish_out; my $default_init_out = $init_out; $init_out = \&chm_init_out; my %chm_languages = ( 'en' => '0x409 English (United States)', 'sq' => '0x041c Albanian', # 'ar' => '0x1401 Arabic (ALGERIA)', # 'es' => '0x2c0a Spanish (ARGENTINA)', # 'en' => '0x0c09 English (AUSTRALIA)', # 'de' => '0x0c07 German (AUSTRIA)', # 'ar' => '0x3c01 Arabic (BAHRAIN)', 'be' => '0x0423 Byelorussian', # 'fr' => '0x080c French (BELGIUM)', # 'en' => '0x2809 English (BELIZE)', # 'es' => '0x400a Spanish (BOLIVIA)', # 'pt' => '0x0416 Portuguese (BRAZIL)', # 'ms' => '0x083e Malay (BRUNEI DARUSSALAM)', 'bg' => '0x0402 Bulgarian', # 'fr' => '0x0c0c French (CANADA)', # 'es' => '0x340a Spanish (CHILE)', 'zh' => '0x0804 Chinese (CHINA)', # 'es' => '0x240a Spanish (COLOMBIA)', # 'es' => '0x140a Spanish (COSTA RICA)', 'hr' => '0x041a Croatian', 'cs' => '0x0405 Czech', 'da' => '0x0406 Danish', # 'es' => '0x1c0a Spanish (DOMINICAN REPUBLIC)', # 'es' => '0x300a Spanish (ECUADOR)', # 'ar' => '0x0c01 Arabic (EGYPT)', # 'es' => '0x440a Spanish (EL SALVADOR)', 'et' => '0x0425 Estonian', 'fo' => '0x0438 Faeroese', 'fi' => '0x040b Finnish', 'fr' => '0x040c French (FRANCE)', 'de' => '0x0407 German (GERMANY)', 'el' => '0x0408 Greek', # 'es' => '0x100a Spanish (GUATEMALA)', # 'es' => '0x480a Spanish (HONDURAS)', # 'zh' => '0x0c04 Chinese (HONG KONG)', 'hu' => '0x040e Hungarian', 'is' => '0x040f Icelandic', 'hi' => '0x0439 Hindi', 'in' => '0x04', 'fa' => '0x0429 Farsi', # 'ar' => '0x0801 Arabic (IRAQ)', # 'en' => '0x1809 English (IRELAND)', 'iw' => '0x04', 'it' => '0x0410 Italian', # 'en' => '0x2009 English (JAMAICA)', 'ja' => '0x0411 Japanese', # 'ar' => '0x2c01 Arabic (JORDAN)', 'sw' => '0x0441 Swahili', 'ko' => '0x0412 Korean', # 'ar' => '0x3401 Arabic (KUWAIT)', 'al' => '0x0426 Latvian (Lettish)', # 'ar' => '0x3001 Arabic (LEBANON)', # 'ar' => '0x1001 Arabic (LIBYAN ARAB JAMAHIRIYA)', # 'de' => '0x1407 German (LIECHTENSTEIN)', 'lt' => '0x0427 Lithuanian', # 'de' => '0x1007 German (LUXEMBOURG)', # 'zh' => '0x1404 Chinese (MACAU)', 'mk' => '0x042f Macedonian', # 'ms' => '0x043e Malay (MALAYSIA)', # 'es' => '0x080a Spanish (MEXICO)', # 'fr' => '0x180c French (MONACO)', # 'ar' => '0x1801 Arabic (MOROCCO)', 'nl' => '0x0413 Dutch', # 'en' => '0x1409 English (NEW ZEALAND)', # 'es' => '0x4c0a Spanish (NICARAGUA)', 'no' => '0x0414 Norwegian', # 'ar' => '0x2001 Arabic (OMAN)', 'ur' => '0x0420 Urdu', # 'es' => '0x180a Spanish (PANAMA)', # 'es' => '0x3c0a Spanish (PARAGUAY)', # 'es' => '0x280a Spanish (PERU)', # 'en' => '0x3409 English (PHILIPPINES)', 'pl' => '0x0415 Polish', 'pt' => '0x0816 Portuguese (PORTUGAL)', # 'es' => '0x500a Spanish (PUERTO RICO)', # 'ar' => '0x4001 Arabic (QATAR)', 'ro' => '0x0418 Romanian', 'ru' => '0x0419 Russian', 'ar' => '0x0401 Arabic (SAUDI ARABIA)', # 'zh' => '0x1004 Chinese (SINGAPORE)', 'sk' => '0x041b Slovak', 'sl' => '0x0424 Slovenian', 'af' => '0x0436 Afrikaans', 'ca' => '0x0403 Catalan', 'sv' => '0x041d Swedish', # 'de' => '0x0807 German (SWITZERLAND)', # 'ar' => '0x2801 Arabic (SYRIAN ARAB REPUBLIC)', # 'zh' => '0x0404 Chinese (TAIWAN, PROVINCE OF CHINA)', 'th' => '0x041e Thai', # 'en' => '0x2c09 English (TRINIDAD AND TOBAGO)', # 'ar' => '0x1c01 Arabic (TUNISIA)', 'tr' => '0x041f Turkish', 'uk' => '0x0422 Ukrainian', # 'ar' => '0x3801 Arabic (UNITED ARAB EMIRATES)', # 'en' => '0x0809 English (UNITED KINGDOM)', # 'en' => '0x0409 English (UNITED STATES)', # 'es' => '0x380a Spanish (URUGUAY)', # 'es' => '0x200a Spanish (VENEZUELA)', 'vi' => '0x242a Vietnamese', # 'ar' => '0x2401 Arabic (YEMEN)', # 'en' => '0x3009 English (ZIMBABWE)', #'' => '', ); my %hhk_global_property = ( 'ImageType' => 'Folder', ); my %hhc_global_property = ( 'ImageType' => 'Folder', ); ######################################### not used # # if needed texi to unicode, maybe this could be in utf8.init, but currently # no unicode my %chm_texi_map = %texi_map; my %chm_simple_map_texi = %simple_map_texi; my %chm_style_map_texi = (); foreach my $command (keys(%style_map_texi)) { $chm_style_map_texi{$command} = {}; foreach my $key (keys (%{$style_map_texi{$command}})) { #print STDERR "$command, $key, $style_map_texi{$command}->{$key}\n"; $chm_style_map_texi{$command}->{$key} = $style_map_texi{$command}->{$key}; } } foreach my $key (keys(%unicode_accents)) { # $chm_style_map{$key}->{'function'} = \&t2h_utf8_accent; $chm_style_map_texi{$key}->{'function'} = \&t2h_utf8_accent; } foreach my $key (%things_map) { if (exists($unicode_map{$key}) and ($unicode_map{$key} ne '')) { # $chm_things_map{$key} = chr(hex($unicode_map{$key})); $chm_texi_map{$key} = chr(hex($unicode_map{$key})); } } $chm_simple_map_texi{"\n"} = ' '; ######################################### end not used # at least kchmviewer has trouble with the corresponding textual entities foreach my $thing ('OE', 'oe', 'euro') { $things_map{$thing} = $numeric_entity_map{$thing}; $pre_map{$thing} = $numeric_entity_map{$thing}; $simple_format_texi_map{$thing} = $numeric_entity_map{$thing}; } my $hhp_lines; # this cannot be in chm_init_out, because it should be before toc_body # call. sub chm_initialize_variables() { $hhp_lines = ''; } sub chm_init_out() { &$default_init_out(); # Setting out file encoding to utf8 doesn't work. Seen on the web that # htmlhelp 1.x isn't utf8 aware # $Texi2HTML::THISDOC{'OUT_ENCODING'} = 'utf8'; my $hhk_file = "$Texi2HTML::THISDOC{'destination_directory'}$Texi2HTML::THISDOC{'file_base_name'}" . ".hhk"; open (IDXFILE, ">$hhk_file") or die "Can't open $hhk_file for writing: $!\n"; if ($USE_UNICODE and defined($Texi2HTML::THISDOC{'OUT_ENCODING'}) and $Texi2HTML::THISDOC{'OUT_ENCODING'} ne '') { binmode(IDXFILE, ":encoding($Texi2HTML::THISDOC{'OUT_ENCODING'})"); } print "# writing HTML Help index in $hhk_file...\n" if $VERBOSE; print IDXFILE "\n\n"; print IDXFILE "\n\n"; print IDXFILE "\n\n\n"; print IDXFILE "\n"; foreach my $property (keys(%hhk_global_property)) { print IDXFILE "\n"; } print IDXFILE "\n"; my $hhp_file = "$Texi2HTML::THISDOC{'destination_directory'}$Texi2HTML::THISDOC{'file_base_name'}.hhp"; print "# writing HTML Help project in $hhp_file...\n" if $VERBOSE; open (HHPFILE, ">$hhp_file") or die "Can't open $hhp_file for writing: $!\n"; if ($USE_UNICODE and defined($Texi2HTML::THISDOC{'OUT_ENCODING'}) and $Texi2HTML::THISDOC{'OUT_ENCODING'} ne '') { binmode(HHPFILE, ":encoding($Texi2HTML::THISDOC{'OUT_ENCODING'})"); } my $language = $chm_languages{'en'}; if (exists ($chm_languages{$LANG})) { $language = $chm_languages{$LANG}; } my $title = main::remove_texi($Texi2HTML::THISDOC{'title_texi'}); my $top_file = $Texi2HTML::THISDOC{'filename'}->{'top'}; print HHPFILE < $PRE_BODY_CLOSE

      EOT } sub chm_noop($$) { return ''; } # Convert texi to string sub chm_text($) { my $text = shift; return main::simple_format(undef,undef,$text); } my @hhc_lines; sub chm_toc_body($) { my $elements_ref = shift; &$default_toc_body($elements_ref); my $level = 0; my %chm_files; @hhc_lines = (); foreach my $element (@$elements_ref) { while ($level != $element->{'toc_level'}) { if ($level < $element->{'toc_level'}) { push (@hhc_lines, "
        \n"); $level++; } elsif ($level > $element->{'toc_level'}) { push (@hhc_lines, "
      \n"); $level--; } } my $text = ''; if ($NUMBER_SECTIONS) { $text .= $element->{'number'} . " "; } $text .= chm_text($element->{'texi'}); $text =~ s/^\s*//; push (@hhc_lines, "
    • \n\n{'file'}#$element->{'target'}\">\n
    • \n"); if (!$chm_files{$element->{'file'}}) { $hhp_lines .= "$element->{'file'}\n"; $chm_files{$element->{'file'}} = 1; } } while ($level > 0) { push (@hhc_lines, "
    \n"); $level--; } } # key: # origin_href: # entry: # texi entry: # element_href: # element_text: sub chm_index_summary_file_entry ($$$$$$$$) { my $name = shift; my $key = shift; my $origin_href = shift; my $entry = shift; my $text = ''; #$entry = &$protect_text($key); my $texi_entry = shift; my $element_href = shift; my $element_text = shift; my $is_printed = shift; $entry = chm_text($texi_entry); print IDXFILE "
  • \n\n\n
  • \n"; } sub chm_index_summary_file_begin($$) { my $name = shift; my $is_printed = shift; } # file is not closed here but in finish_out. sub chm_index_summary_file_end($$) { my $name = shift; my $is_printed = shift; } sub chm_finish_out() { print IDXFILE "\n\n"; close (IDXFILE); my $hhc_file = "$Texi2HTML::THISDOC{'destination_directory'}$Texi2HTML::THISDOC{'file_base_name'}.hhc"; open (HHCFILE, ">$hhc_file") or die "Can't open $hhc_file for writing: $!\n"; if ($USE_UNICODE and defined($Texi2HTML::THISDOC{'OUT_ENCODING'}) and $Texi2HTML::THISDOC{'OUT_ENCODING'} ne '') { binmode(HHCFILE, ":encoding($Texi2HTML::THISDOC{'OUT_ENCODING'})"); } print HHCFILE "\n\n"; print HHCFILE "\n\n"; print HHCFILE "\n\n\n"; print HHCFILE "\n"; foreach my $property (keys(%hhc_global_property)) { print HHCFILE "\n"; } print HHCFILE "\n"; main::print_lines(\*HHCFILE, \@hhc_lines); print HHCFILE "\n\n"; print HHPFILE $hhp_lines; close (HHPFILE); } 1; texi2html-1.82/examples/book.init0000644000175000017500000001460011264347127020675 0ustar flichtenheldflichtenheld# This is based on the scriptbasic style $DO_CONTENTS = 1; $INLINE_CONTENTS = 1; @SECTION_BUTTONS = ( 'Back', 'Forward', ' ', 'Contents', 'Index', 'About' ); @CHAPTER_BUTTONS = ( 'Back', 'Forward', ' ', 'Contents', 'Index', 'About' ); @MISC_BUTTONS = ('Contents', 'Index', 'About'); @SECTION_FOOTER_BUTTONS = ('Contents', 'Index', 'About'); @NODE_FOOTER_BUTTONS = ('Back', 'Forward'); $WORDS_IN_PAGE = undef; $SHOW_MENU = 0; $BIG_RULE = '
    '; push @command_handler_init, \&book_initialize_variables; sub book_print_sub_toc($$); sub book_print_sub_toc($$) { my $parent_element = shift; my $element = shift; my $result = "
  • ".&$anchor('', main::href($element, $parent_element->{'file'}), $element->{'text'}) . "
  • \n"; #print STDERR "SUB_TOC $element->{'text'}\n"; #sleep 1; if (exists($element->{'child'})) { #print STDERR "SUB_TOC child $element->{'child'}->{'text'}\n"; $result .= "
  • \n". book_print_sub_toc($parent_element, $element->{'child'}) ."
  • \n"; } if (exists($element->{'sectionnext'})) { #print STDERR "SUB_TOC next($element->{'text'}) $element->{'next'}->{'text'}\n"; $result .= book_print_sub_toc($parent_element, $element->{'sectionnext'}); } return $result; } sub book_print_up_toc($) { my $element = shift; my $result = ''; my $current_element = $element; my @elements; while (defined($current_element->{'sectionup'}) and ($current_element->{'sectionup'} ne $current_element)) { unshift (@elements, $current_element->{'sectionup'}); $current_element = $current_element->{'sectionup'}; } #print $fh "
      " . &$anchor('', $Texi2HTML::HREF{Contents}, '[' . $Texi2HTML::NAME{Contents} . ']') . "
      \n"; my $elem = shift @elements; $result .= "
    • " . &$anchor('', main::href($elem, $element->{'file'}), $elem->{'text'}) . "
    • \n"; foreach my $elem (@elements) { $result .= "
    • " . &$anchor('', main::href($elem, $element->{'file'}), $elem->{'text'}) . "
    • \n"; } foreach my $elem (@elements) { $result .= "
    \n"; } $result .= "\n"; } #$print_section = \&book_print_section; $print_element_header = \&book_print_element_header; $print_Top = \&book_print_Top; $print_Toc = \&book_print_Toc; $element_file_name = \&book_element_file_name; sub book_print_element_header($$) { my $first_in_page = shift; my $previous_is_top = shift; my $buttons = \@SECTION_BUTTONS; my $result; if ($first_in_page and $SECTION_NAVIGATION) { #print_up_toc($fh, $Texi2HTML::THIS_ELEMENT) if ($SPLIT eq 'node'); $result = book_print_up_toc($Texi2HTML::THIS_ELEMENT); $result .= &$print_head_navigation(undef, $buttons); } else { # got to do this here, as it isn't done in print_head_navigation $result = &$print_navigation($buttons) if ($SECTION_NAVIGATION); } return $result; } sub book_print_Top($$) { my $fh = shift; my $has_top_heading = shift; my $buttons = \@MISC_BUTTONS; # head navigation is printed with heading, and is in THIS_SECTION # &$print_head_navigation($fh, $buttons) if ($SPLIT or $SECTION_NAVIGATION); my ($titlepage_text, $titlepage_no_texi, $titlepage_simple_text) = main::do_special_region_lines('titlepage',$Texi2HTML::THISDOC{'state'}); &$titlepage([],$titlepage_text, $titlepage_no_texi, $titlepage_simple_text); print $fh $Texi2HTML::TITLEPAGE; print $fh "

    $Texi2HTML::NAME{Top}

    \n" unless ($has_top_heading); main::print_lines($fh, $Texi2HTML::THIS_SECTION); if (!$INLINE_CONTENTS and !$Texi2HTML::THISDOC{'setcontentsaftertitlepage'}) { print $fh '

    ' . $Texi2HTML::NAME{'Contents'} . "

    \n" ; main::print_lines($fh, $Texi2HTML::TOC_LINES); } } sub book_print_Toc { my $fh = shift; &$print_page_head($fh) if $SPLIT; #print $fh $Texi2HTML::TITLEPAGE; print $fh '

    ' . $Texi2HTML::NAME{'Contents'} . "

    \n" ; main::print_lines($fh); &$print_misc_footer($fh, \@MISC_BUTTONS); } my $unumbered_nr; my $previous_nr; my $previous_file_name; sub book_initialize_variables() { $unumbered_nr = -1; $previous_nr = undef; $previous_file_name = undef; } sub book_element_file_name($$$) { my $element = shift; my $type = shift; my $prefix = shift; return undef if ($NODE_FILES or !$SPLIT); return undef if (!defined($element)); if (defined($previous_nr) and ($element->{'doc_nr'} == $previous_nr)) { return $previous_file_name; } if ($type eq 'top') { $previous_file_name = "${prefix}_top.html"; } elsif (defined($element->{'number'}) and ($element->{'number'} ne '')) { my $number = $element->{'number'}; $number .= '.' unless ($number =~ /\.$/); $previous_file_name = "${prefix}_$number" . 'html'; } else { $unumbered_nr++; $previous_file_name = "${prefix}_U." . $unumbered_nr . '.html'; } $previous_nr = $element->{'doc_nr'}; return $previous_file_name; } $heading = \&book_heading; sub book_heading($$$$$$;$$) { my $element = shift; my $command = shift; my $texi_line = shift; my $line = shift; my $in_preformatted = shift; my $one_section = shift; my $element_heading = shift; my $level = 3; return '' if ($element->{'top'}); if (!$element->{'node'}) { $level = $element->{'level'}; } $level = 1 if ($level == 0); my $text = $element->{'text'}; if (!$element->{'node'} and (!$NUMBER_SECTIONS)) { $text = $element->{'text_nonumber'}; } return '' if ($text !~ /\S/); my $class = $element->{'tag_level'}; $class = 'unnumbered' if ($class eq 'top'); if (defined($element->{'tocid'}) and $TOC_LINKS) { $text = &$anchor ('', "$Texi2HTML::THISDOC{'toc_file'}#$element->{'tocid'}", $text); } $text = " $text \n"; #if (defined($SPLIT) and ($SPLIT eq 'node') if (exists($element->{'child'}) and ($element->{'tag_level'} !~ /heading/)) { $text .= "\n"; $text .= "" . book_print_sub_toc($element, $element->{'child'}); $text .= "\n"; } return $text; } 1; texi2html-1.82/examples/docbook.init0000644000175000017500000012453511264347127021374 0ustar flichtenheldflichtenheld#+############################################################################## # # docbook.init: convert to docbook # # Copyright (C) 2008 Patrice Dumas # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 USA # #-############################################################################## $EXTENSION = "xml"; $DOCTYPE = ' ]>'; $USE_MENU_DIRECTIONS = 0; $USE_UP_FOR_ADJACENT_NODES = 0; $USE_NUMERIC_ENTITY = 0; $USE_SETFILENAME = 1; @EXPAND = ('docbook'); @IMAGE_EXTENSIONS = ('eps', 'gif', 'jpg', 'jpeg', 'pdf', 'png', 'svg', 'txt'); $USE_ISO = 1; $INLINE_INSERTCOPYING = 1; $SHOW_MENU = 0; $SECTION_NAVIGATION = 0; push @command_handler_process, \&docbook_initialize_variables; $misc_command{'c'}->{'keep'} = 1; $misc_command{'comment'}->{'keep'} = 1; $misc_command{'settitle'}->{'keep'} = 1; delete $style_map{'sc'}->{'attribute'}; $style_map{'code'}->{'attribute'} = 'literal'; $style_map{'strong'}->{'attribute'} = 'emphasis role="bold"'; $style_map{'kbd'}->{'attribute'} = 'userinput'; $style_map{'w'}->{'end'} = ''; $style_map{'='}->{'function'} = \&docbook_macron; $style_map{'b'}->{'attribute'} = 'emphasis role="bold"'; $style_map{'cite'}->{'attribute'} = 'citetitle'; $style_map{'command'}->{'attribute'} = 'command'; $style_map{'dfn'}->{'attribute'} = 'firstterm'; $style_map{'emph'}->{'attribute'} = 'emphasis'; $style_map{'env'}->{'attribute'} = 'envar'; $style_map{'file'}->{'attribute'} = 'filename'; $style_map{'i'}->{'attribute'} = 'wordasword'; $style_map{'key'}->{'attribute'} = 'keycap'; delete $style_map{'key'}->{'begin'}; delete $style_map{'key'}->{'end'}; $style_map{'option'}->{'attribute'} = 'option'; $style_map{'t'}->{'attribute'} = 'literal'; delete $style_map{'sansserif'}->{'attribute'}; delete $style_map{'r'}->{'attribute'}; $style_map{'indicateurl'}->{'attribute'} = 'wordasword'; delete $style_map{'indicateurl'}->{'begin'}; delete $style_map{'indicateurl'}->{'end'}; $style_map{'var'}->{'attribute'} = 'replaceable'; delete $style_map{'verb'}->{'attribute'}; $style_map{'email'}->{'function'} = \&docbook_email; $style_map{'math'}->{'function'} = \&docbook_math; $style_map{'uref'}->{'function'} = \&docbook_uref; $style_map{'url'}->{'function'} = \&docbook_uref; $style_map{'titlefont'}->{'function'} = \&docbook_titlefont; $style_map{'samp'}->{'function'} = \&docbook_samp; delete $style_map{'samp'}->{'attribute'}; #$style_map{'samp'}->{'attribute'} = 'literal'; #$style_map{'samp'}->{'begin'} = '‘'; #$style_map{'samp'}->{'end'} = '’'; my $kept_footnote_function = $style_map{'footnote'}->{'function'}; $style_map{'footnote'}->{'function'} = \&docbook_footnote; #use Data::Dumper; foreach my $command (keys(%style_map)) { $style_map_pre{$command} = {}; # $style_map_texi{$command} = {} if (!exists($style_map_texi{$command})); # $style_map_texi{$command}->{'args'} = $style_map{$command}->{'args'} # if (exists($style_map{$command}->{'args'})); #print STDERR "COMMAND $command"; foreach my $key (keys(%{$style_map{$command}})) { $style_map_pre{$command}->{$key} = $style_map{$command}->{$key}; } } # print STDERR "". Data::Dumper->Dump([\%style_map_texi]); $style_map_pre{'b'}->{'attribute'} = 'lineannotation'; $style_map_pre{'i'}->{'attribute'} = 'lineannotation'; $style_map_pre{'r'}->{'attribute'} = 'lineannotation'; $colon_command_punctuation_characters{'.'} = '.'; $colon_command_punctuation_characters{':'} = ':'; $colon_command_punctuation_characters{'?'} = '?'; $colon_command_punctuation_characters{'!'} = '!'; delete $stop_paragraph_command{'titlefont'}; # FIXME #$no_paragraph_commands{'anchor'} = 0; # FIXME delete $special_accents{'ringaccent'}; $special_accents{'ogonek'} = 'aeiuAEIU'; foreach my $style (keys(%style_map)) { delete ($style_map{$style}->{'quote'}); } my $docbook_in_footnote; sub docbook_footnote($$$$$) { $docbook_in_footnote = 1; my $result = &$kept_footnote_function(@_); $docbook_in_footnote = 0; return $result; } sub docbook_macron($$) { my $accent = shift; my $args = shift; return $args->[0] . "¯"; } sub docbook_samp($$) { shift; my $args = shift; return "‘$args->[0]’"; } sub docbook_email($$) { my $command = shift; my $args = shift; my $mail = shift @$args; my $text = shift @$args; $mail = main::normalise_space($mail); if (defined($text) and $text =~ /\S/) { return docbook_add_id('ulink').' url="mailto:'.main::normalise_space($mail).'">'.$text.''; } return docbook_add_id('email').">$mail"; } sub docbook_uref($$) { shift; my $args = shift; my $url = shift @$args; my $text = shift @$args; my $replacement = shift @$args; $url = main::normalise_space($url); $text = '' if (!defined($text)); $replacement = '' if (!defined($replacement)); $replacement = $text if ($replacement eq ''); $replacement = $url if ($replacement eq ''); $replacement = main::normalise_space($replacement); return docbook_add_id('ulink')." url=\"$url\">$replacement"; } # FIXME sub docbook_titlefont($$) { shift; my $args = shift; return "$args->[0]"; } sub docbook_math($$) { shift; my $args = shift; my $text = shift @$args; $text =~ s/[{}]//g; return $text; } $simple_map{' '} = ' '; # or '' ? $simple_map{'*'} = "\n"; $simple_map{"\t"} = ' '; $simple_map{"\n"} = ' '; %simple_map_pre = %simple_map; # FIXME right? $things_map{'l'} = '/l'; $things_map{'L'} = '/L'; $things_map{'TeX'} = '&tex;'; $things_map{'LaTeX'} = '&latex;'; $things_map{'enddots'} = '….'; $things_map{'minus'} = '−'; # FIXME ∗ $iso_symbols{'point'} = '-!-'; # FIXME ≡ $iso_symbols{'equiv'} = '=='; delete $iso_symbols{"'"}; delete $iso_symbols{'`'}; $things_map{'quotedblbase'} = '„'; $things_map{'quotesinglbase'} = '‚'; %pre_map = %things_map; #delete $inter_item_commands{'cindex'}; #$no_paragraph_commands{'cindex'} = 0; $no_paragraph_commands{'float'} = 0; %docbook_complex_format = ( 'example' => 'screen', 'smallexample' => 'screen', 'display' => 'literallayout', 'smalldisplay' => 'literallayout', 'lisp' => 'programlisting', 'smalllisp' => 'programlisting', 'format' => 'abstract', 'smallformat' => 'screen' ); $region_formats_kept{'copying'} = 1; $format_map{'copying'} = 'copying'; delete $format_map{'enumerate'}; foreach my $table ('table', 'ftable', 'vtable') { #$format_map{$table} = 'table'; delete $format_map{$table}; } delete $iso_symbols{'`'}; $print_Top = \&docbook_print_Top; $print_Top_footer = \&docbook_print_Top_footer; $print_page_head = \&docbook_print_page_head; #$print_navigation = \&docbook_noop; $print_foot_navigation = \&docbook_noop; $toc_body = \&docbook_noop; $about_body = \&docbook_noop; $print_page_foot = \&docbook_print_page_foot; $end_section = \&docbook_end_section; $one_section = \&docbook_one_section; $heading = \&docbook_heading; #$heading_texi = \&docbook_heading_texi; $paragraph = \&docbook_paragraph; $preformatted = \&docbook_preformatted; $misc_element_label = \&docbook_noop; $element_label = \&docbook_element_label; $anchor_label = \&docbook_anchor_label; $index_entry_label = \&docbook_index_entry_label; $index_entry_command = \&docbook_index_entry_command; $listoffloats = \&docbook_noop; $acronym_like = \&docbook_acronym_like; $foot_line_and_ref = \&docbook_foot_line_and_ref; $image = \&docbook_image; $image_files = \&docbook_image_files; $sp = \&docbook_sp; $table_list = \&docbook_table_list; $row = \&docbook_row; $cell = \&docbook_cell; $list_item = \&docbook_list_item; $format_list_item_texi = \&docbook_format_list_item_texi; $unknown = \&docbook_misc_commands; $begin_format_texi = \&docbook_begin_format_texi; $def_line = \&docbook_def_line; $def = \&docbook_def; $def_item = \&docbook_def_item; $printindex = \&docbook_printindex; $index_summary = \&docbook_index_summary; $external_ref = \&docbook_external_ref; $internal_ref = \&docbook_internal_ref; $table_item = \&docbook_table_item; $table_line = \&docbook_table_line; $float = \&docbook_float; #$caption_shortcaption = \&docbook_caption_shortcaption; #$caption_shortcaption_command = \&docbook_caption_shortcaption_command; $normal_text = \&docbook_normal_text; #$paragraph_style_command = \&docbook_paragraph_style_command; $raw = \&docbook_raw; $cartouche = \&docbook_cartouche; $complex_format = \&docbook_complex_format; $format = \&docbook_format; $quotation = \&docbook_quotation; $quotation_prepend_text = \&docbook_quotation_prepend_text; $style = \&docbook_style; $insertcopying = \&docbook_insertcopying; sub docbook_print_page_head($) { my $fh = shift; print $fh < $DOCTYPE EOT } sub docbook_print_page_foot($) { my $fh = shift; print $fh < EOT } my %docbook_sections = ( 'top' => 'chapter', 'chapter' => 'chapter', 'unnumbered' => 'chapter', 'centerchap' => 'chapter', 'appendix' => 'appendix', 'majorheading' => 'other', 'chapheading' => 'other', 'heading' => 'sect1', 'subheading' => 'sect2', 'subsubheading' => 'sect3', 2 => 'sect1', 3 => 'sect2', 4 => 'sect3' ); sub docbook_print_Top($$$) { my $fh = shift; my $has_top_heading = shift; my $element = shift; #print $fh "".docbook_heading($element); main::print_lines($fh, $Texi2HTML::THIS_SECTION); } sub docbook_element_tag($) { my $element = shift; #print STDERR "$element->{'texi'}, $element->{'tag_level'}, $element->{'level'}\n"; return $docbook_sections{$element->{'tag_level'}} if (exists($docbook_sections{$element->{'tag_level'}})); return $docbook_sections{$element->{'level'}} if (exists($docbook_sections{$element->{'level'}})); } sub docbook_node_id($) { my $node_texi = shift; my $node = main::remove_texi($node_texi); $node =~ s/[\s\"]/-/g; return &$protect_text($node); } my $docbook_pending_node_id; my @docbook_multitable_stack = (); my @docbook_table_stack = (); sub docbook_initialize_variables() { $docbook_pending_node_id = undef; @docbook_multitable_stack = (); @docbook_table_stack = (); } sub docbook_add_id($) { my $element = shift; my $result = "<$element"; if (defined($docbook_pending_node_id) and (!$docbook_in_footnote or $element eq 'footnote')) { $result .= " id=\"$docbook_pending_node_id\""; $docbook_pending_node_id = undef; } return $result; } sub docbook_heading($$$$$) { my $element = shift; my $command = shift; my $texi_line = shift; my $line = shift; my $in_preformatted = shift; if (defined($command) and $command =~ /heading/) { if (defined($line)) { $text = $line; # this isn't done in main program in that case... chomp ($text); $text =~ s/^\s*//; } return docbook_add_id('bridgehead')." renderas=\"$docbook_sections{$command}\">$text\n"; } my $node_element = $element; if (defined($element->{'node_ref'})) { $node_element = $element->{'node_ref'}; } my $result = ''; # FIXME verify xreflabel if (!$element->{'node'}) { my $id = $node_element->{'text_nonumber'}; $id =~ s/ /-/g; my $title = $element->{'text_nonumber'}; my $label = ''; my $xreflabel = ''; if ($element->{'number'}) { my $label_nr = $element->{'number'}; $label_nr =~ s/\.$//; $label = $label_nr; } else { my $xreftitle = $title; $xreflabel = " xreflabel=\"$xreftitle\""; } $result .= '<' . docbook_element_tag($element) . " label=\"${label}\"${xreflabel} id=\"$id\">\n$title\n"; } return $result; } sub docbook_element_label($$$$) { my $id = shift; my $element = shift; my $command = shift; my $line = shift; if ($element->{'node'} and !$element->{'with_section'}) { $docbook_pending_node_id = docbook_node_id($element->{'texi'}); } elsif ($command !~ /heading/) { $docbook_pending_node_id = undef; } return ''; } sub docbook_paragraph($$$$$$$$$$$$) { my $text = shift; my $align = shift; my $indent = shift; my $paragraph_command = shift; my $paragraph_command_formatted = shift; my $paragraph_number = shift; my $format = shift; my $item_nr = shift; my $enumerate_style = shift; my $number = shift; my $command_stack_at_end = shift; my $command_stack_at_begin = shift; foreach my $style(t2h_collect_styles($command_stack_at_begin)) { #print STDERR "PARA BEGIN STYLE $style\n"; $text = t2h_begin_style($style, $text); } foreach my $style(t2h_collect_styles($command_stack_at_end)) { #print STDERR "PARA END STYLE $style\n"; $text = t2h_end_style($style, $text); } if (defined($paragraph_number) and defined($$paragraph_number)) { $$paragraph_number++; } # no para in multitables, caption and shortcaptions. my $top_stack = ''; $top_stack = $command_stack_at_begin->[-1] if (scalar (@$command_stack_at_begin)); return $text if ($top_stack eq 'multitable' or $top_stack eq 'shortcaption' or $top_stack eq 'caption' or $top_stack eq 'documentdescription'); if ($text =~ /\S/) { #return docbook_add_id('para').">$text"; return "$text"; } return $text; } my %def_format_docbook = ( 'deffn' => [ ['function', 'name'] ], 'defvr' => [ ['varname', 'name'] ], 'deftypefn' => [ [ 'returnvalue', 'type' ], ['function', 'name'] ], 'deftypeop' => [ ['returnvalue', 'type'], ['methodname', 'name'] ], 'deftypevr' => [ ['returnvalue', 'type'], ['varname', 'name'] ], 'defcv' => [ ['classname', 'class'], ['property', 'name'] ], 'deftypecv' => [ ['returnvalue', 'type'], ['property', 'name'] ], 'defop' => [ ['classname', 'class'], ['methodname', 'name'] ], 'deftp' => [ ['structname', 'name'] ] ); my %def_argument_types_docbook = ( 'param' => 'replaceable', 'paramtype' => 'type', 'delimiter' => '' ); sub docbook_def_line($$$$$$$$$$$$$$$) { my $category_prepared = shift; my $name = shift; my $type = shift; my $arguments = shift; my $index_label = shift; my $arguments_array = shift; my $arguments_type_array = shift; my $unformatted_arguments_array = shift; my $command = shift; my $class_name = shift; my $category = shift; my $class = shift; my $style = shift; my $original_command = shift; my %unformatted_arguments = (); my @unformatted_args = @$unformatted_arguments_array; foreach my $type (@$arguments_type_array) { my $unformatted_arg = shift @unformatted_args; $unformatted_arguments{$type} = $unformatted_arg; } # FIXME unformatted! my $result = "$class_name"; my %arguments = ( 'prepared_category' => $category_prepared, 'category' => $category, 'name' => $name, 'type' => $type, 'class' => $class ); foreach my $type (keys(%arguments)) { $arguments{$type} = '' if (!defined($arguments{$type})); } foreach my $mandatory_arg (@{$def_format_docbook{$command}}) { my $elem = $mandatory_arg->[0]; #if ($elem eq 'returnvalue' and $unformatted_arguments{$mandatory_arg->[1]} =~ /^\s*\@code\{/) if ($elem eq 'returnvalue' and $unformatted_arguments{$mandatory_arg->[1]} =~ /\@code\{/) { # FIXME unformatted my $arg_without_at_command = $unformatted_arguments{$mandatory_arg->[1]}; #$arg_without_at_command =~ s/\s*\@code\{//; #$arg_without_at_command =~ s/\}\s*$//; while ($arg_without_at_command =~ /\@code\{([^\{\}]*)\}/) { $arg_without_at_command =~ s/\@code\{([^\{\}]*)\}/$1/; } $result .= "<$elem>$arg_without_at_command"; } else { $result .= "<$elem>$arguments{$mandatory_arg->[1]}"; } } my @types = @$arguments_type_array; @unformatted_args = @$unformatted_arguments_array; foreach my $arg (@$arguments_array) { my $type = shift @types; my $unformatted = shift @unformatted_args; if (exists ($def_argument_types_docbook{$type})) { if ($def_argument_types_docbook{$type} and ($type eq 'paramtype' or ($unformatted !~ /^\s*\@var\{/))) { $result .= "<$def_argument_types_docbook{$type}>$arg"; } else { $result .= $arg; } } } $result .= "\n"; return $result; } # FIXME # @deffn # @c comment # @end deffn # leads to the creation of a with a comment within, # while there should be no definitionitem sub docbook_def_item($) { my $text = shift; my $only_inter_item_commands = shift; if ($text =~ /\S/) { return '
    ' . $text . '
    ' unless $only_inter_item_commands; return $text; } return ''; } sub docbook_def($) { my $text = shift; return docbook_add_id('informalfigure').'>'.$text.''; } sub docbook_preformatted($$$$$$$$$$$$) { my $text = shift; my $pre_style = shift; my $class = shift; my $leading_command = shift; my $leading_command_formatted = shift; my $preformatted_number = shift; my $format = shift; my $item_nr = shift; my $enumerate_style = shift; my $number = shift; my $command_stack_at_end = shift; my $command_stack_at_begin = shift; return $text; } sub docbook_misc_commands($$$$$) { my $macro = shift; my $line = shift; my $pass = shift; my $stack = shift; my $state = shift; #print STDERR "$macro $pass $line"; return ($line, 0, undef, undef) unless ($pass == 2); return ($line, 0, undef, undef) unless defined($misc_command{$macro}); my ($result_line, $text, $args) = &$preserve_misc_command ($line, $macro); #print STDERR "$macro $pass $line"; #print STDERR "ARGS @$args\n" if defined ($args); if ($macro eq 'c' or $macro eq 'comment' and scalar(@$args)) { my $comment_line = $args->[0]; chomp ($comment_line); # makeinfo remove all the leading spaces $comment_line =~ s/^\s//; $result_text = &$comment ($comment_line); } elsif ($macro eq 'settitle') { # FIXME to be formatted? my $arg = $args->[0]; $arg =~ s/^\s*//; chomp($arg); $result_text = "$arg\n"; } else { return ($line, 0, undef, undef); } return ($result_line, 1, $result_text, undef); } sub docbook_foot_line_and_ref($$$$$$$) { my $number_in_doc = shift; my $number_in_page = shift; my $footnote_id = shift; my $place_id = shift; my $document_file = shift; my $footnote_file = shift; my $lines = shift; my $state = shift; my $result = docbook_add_id('footnote').'>'; foreach my $line (@$lines) { $result .= $line; } return ([], $result . ''); } sub docbook_any_ref($$$) { my $type = shift; my $args = shift; my $unformatted_args = shift; if ($type eq 'inforef') { my $node_file = "($args->[2])$args->[0]"; if ($args->[1] ne '') { return "*note $args->[1]: $node_file"; } else { return "*note ${node_file}::"; } } else { if (($args->[3] ne '') or ($args->[4] ne '')) { return '' if ($args->[4] eq ''); my $section_name = $args->[2]; $section_name = $args->[0] if ($section_name eq ''); if ($type eq 'ref') { return &$I('section `@asis{}`%{section_name}\'@asis{}\' in @cite{%{book}}', { 'section_name' => $section_name, 'book' => $args->[4] },{'duplicate'=>1}); } elsif ($type eq 'xref') { return &$I('See section `@asis{}`%{section_name}\'@asis{}\' in @cite{%{book}}', { 'section_name' => $section_name, 'book' => $args->[4] },{'duplicate'=>1}); } elsif ($type eq 'pxref') { return &$I('see section `@asis{}`%{section_name}\'@asis{}\' in @cite{%{book}}', { 'section_name' => $section_name, 'book' => $args->[4] },{'duplicate'=>1}); } } my $link = docbook_node_id($unformatted_args->[0]); my $title = $args->[2]; $title = $args->[1] if ($title eq ''); if ($title eq '') { if ($type eq 'ref') { return &$I('%{ref}', {'ref' => docbook_add_id('xref')." linkend=\"$link\">"}); } elsif ($type eq 'pxref') { return &$I('see %{ref}', {'ref' => docbook_add_id('xref')." linkend=\"$link\">"}); } elsif ($type eq 'xref') { return &$I('See %{ref}', {'ref' => docbook_add_id('xref')." linkend=\"$link\">"}); } } else { if ($type eq 'ref') { return &$I('%{title_ref}', {'title_ref' => docbook_add_id('link')." linkend=\"$link\">$title"}); } elsif ($type eq 'pxref') { return &$I('see %{title_ref}', {'title_ref' => docbook_add_id('link')." linkend=\"$link\">$title"},{'duplicate'=>1}); } elsif ($type eq 'xref') { return &$I('See %{title_ref}', {'title_ref' => docbook_add_id('link')." linkend=\"$link\">$title"},{'duplicate'=>1}); } } } } sub docbook_external_ref($$$$$$) { my $type = shift; my $section = shift; my $book = shift; my $file_node = shift; my $href = shift; my $cross_ref = shift; my $args_texi = shift; my $formatted_args = shift; return docbook_any_ref ($type, $formatted_args, $args_texi); } sub docbook_internal_ref($$$$$) { my $type = shift; my $href = shift; my $short_name = shift; my $name = shift; my $is_section = shift; my $args_texi = shift; my $formatted_args = shift; return docbook_any_ref ($type, $formatted_args, $args_texi ); } sub docbook_index_entry_command($$$$$) { my $command = shift; my $index_name = shift; my $label = shift; my $entry_texi = shift; my $entry_formatted = shift; return $label if (defined($label) and $label ne ''); return docbook_index_entry_label('','','',$main::index_prefix_to_name{$index_name}, '', '', $entry_formatted); } sub docbook_index_entry_label($$$$$) { my $identifier = shift; my $preformatted = shift; my $entry = shift; my $index_name = shift; my $index_command = shift; my $texi_entry = shift; my $formatted_entry = shift; return "${formatted_entry}"; } sub docbook_footing($) { my $element = shift; my $result = ''; return '' if ($element->{'node'}); return '\n" if ($element->{'level'} == 0); return '' if ($element->{'child'}); $result .= '\n"; return $result if ($element->{'sectionnext'} or $element->{'level'} == 1); my $current = $element; while ($current->{'level'} != 1 and $current->{'sectionup'} and (!$current->{'sectionup'}->{'sectionnext'} or $current->{'sectionup'}->{'level'} == 1)) { $current = $current->{'sectionup'}; $result .= '\n"; } return $result; } sub docbook_end_section($$$) { my $fh = shift; my $end_foot_navigation = shift; my $element = shift; print $fh "". docbook_footing($element); } sub docbook_print_Top_footer($$) { my $fh = shift; my $end_page = shift; my $element = shift; print $fh "". docbook_footing($element); } sub docbook_one_section($$) { my $fh = shift; my $element = shift; main::print_lines($fh); print $fh "". docbook_footing($element); &$print_foot_navigation($fh); &$print_page_foot($fh); } sub docbook_insertcopying($) { my $text = shift; my $comment = shift; my $simple_text = shift; return $text; } sub docbook_acronym_like($$$$$$) { my $command = shift; my $acronym_texi = shift; my $acronym_text = shift; my $with_explanation = shift; my $explanation_lines = shift; my $explanation_text = shift; my $explanation_simply_formatted = shift; $command = 'abbrev' if ($command eq 'abbr'); my $result = docbook_add_id($command).">$acronym_text"; if ($with_explanation) { $result .= " ($explanation_text)"; } return $result; } sub docbook_image_files($$$$) { my $base = shift; my $extension = shift; my $texi_base = shift; my $texi_extension = shift; my @files = (); return @files if (!defined($base) or ($base eq '')); # FIXME should look at extension argument? makeinfo doesn't # push @files,"$base.$extension" if (defined($extension) and ($extension ne '')); foreach my $ext (@IMAGE_EXTENSIONS) { push @files, ["$base.$ext", "$texi_base.$ext"]; } return @files; } sub docbook_image($$$$$$$$$$$$$$$$) { my $file = shift; my $base = shift; my $preformatted = shift; my $file_name = shift; my $alt = shift; my $width = shift; my $height = shift; my $raw_alt = shift; my $extension = shift; my $working_dir = shift; my $file_path = shift; my $in_paragraph = shift; my $file_locations = shift; my $base_simple_format = shift; my $extension_simple_format = shift; my $file_name_simple_format = shift; # if (!defined($file_path) or $file_path eq '' or $file_path =~ /\.txt$/) # { # if (defined($extension) and $extension ne '') # { # $file = "$base.$extension"; # } # else # { # $file = "$base.jpg"; # $extension = 'jpg'; # } # main::echo_warn ("no image file for $base, (using $file)"); # } my $txt_path; my @files = (); my @extensions = @IMAGE_EXTENSIONS; foreach my $file_location (@$file_locations) { my ($file_located, $path, $file_simple_format) = @$file_location; my $extension = shift @extensions; if (defined($path)) { if ($extension eq 'txt' and !defined($txt_path)) { $txt_path = $path; } else { push @files, [$file_located, uc($extension), $file_simple_format]; } } } push @files, ["$base.jpg", 'JPG', "$base_simple_format.jpg" ] unless (@files); my $begin = docbook_add_id('inlinemediaobject').'>'; my $end = ''; if ($preformatted or !$in_paragraph) { $begin = docbook_add_id('informalfigure').'>'; $end = ''; } my $result = $begin; foreach my $file_spec (@files) { $result .= "[2]\" format=\"$file_spec->[1]\">"; } if (defined($txt_path)) { if (open(TXT, "<$txt_path")) { if (defined($Texi2HTML::THISDOC{'IN_ENCODING'}) and $USE_UNICODE) { binmode(TXT, ":encoding($Texi2HTML::THISDOC{'IN_ENCODING'})"); } $result.=""; while (my $img_txt = ) { $result .= $img_txt; } $result .= ''; close(TXT); } else { main::echo_warn ("\@image file `$txt_path' unreadable: $!"); } } else { main::echo_warn ("Cannot find \@image file `$base.txt'"); } return "$result$end"; } sub docbook_format_list_item_texi($$$$) { my $format = shift; my $line = shift; my $prepended = shift; my $command = shift; return (undef, 0); } # row in multitable sub docbook_row($$;$$) { my $text = shift; my $macro = shift; my $columnfractions = shift; my $prototype_row = shift; my $prototype_lengths = shift; my $column_number = shift; my $result = ''; if ($macro eq 'headitem') { if ($docbook_multitable_stack[-1] != 0) { $result .= ""; $result = "" . $result if ($docbook_multitable_stack[-1] == 1); $docbook_multitable_stack[-1] = 0; } } elsif ($docbook_multitable_stack[-1] != 1) { $result .= ""; $result = "" . $result if ($docbook_multitable_stack[-1] == 0); $docbook_multitable_stack[-1] = 1; } $result .= "$text"; return $result; } # cell in multitable sub docbook_cell($$;$$) { my $text = shift; my $row_macro = shift; my $columnfractions = shift; my $prototype_row = shift; my $prototype_lengths = shift; my $column_number = shift; return "" . $text . ''; } # if varlistentry_state is > 0 it means that a varlistentry is opened. # if varlistentry_state is == 2 it means that we are in a succession # of term # if varlistentry_state is == 1 it means that we are in the line # Having a listitem in a varlistentry is a must, so an empty # listitem is added if a varlistentry is closed and varlistentry_state == 2 # # varlistentry acceps only term and listitem, so inter_item_commands # are put in the next term, or, if at the end of the table in a last # listitem sub docbook_table_item($$$$$$$$$) { my $text = shift; my $index_label = shift; my $format = shift; my $command = shift; my $formatted_command = shift; my $style_stack = shift; my $text_formatted = shift; my $text_formatted_leading_spaces = shift; my $text_formatted_trailing_spaces = shift; my $item_cmd = shift; $formatted_command = '' if (!defined($formatted_command)); if (defined($text_formatted)) { $text_item = $text_formatted_leading_spaces . $text_formatted .$text_formatted_trailing_spaces; } else { $text_item = $text; } my $result = ''; if (defined($docbook_table_stack[-1]->{'inter_item'})) { $formatted_command = $docbook_table_stack[-1]->{'inter_item'} . $formatted_command; delete $docbook_table_stack[-1]->{'inter_item'}; } if ($item_cmd eq 'item') { if ($docbook_table_stack[-1]->{'varlistentry_state'} == 2) { $result .= ""; } if ($docbook_table_stack[-1]->{'varlistentry_state'} >= 1) { $result .= ''; } $docbook_table_stack[-1]->{'varlistentry_state'} = 2; $result .= ''; } $result .= ''; $result .= $formatted_command . $text_item ."\n"; return $result; } sub docbook_table_line($$$) { my $text = shift; my $only_inter_item_commands = shift; my $before_items = shift; $only_inter_item_commands = '' if (!defined($only_inter_item_commands)); #print STDERR if ($text =~ /\S/) { if ($before_items) { return $text; } if ($only_inter_item_commands) { $docbook_table_stack[-1]->{'inter_item'} = $text; return ''; } else { $docbook_table_stack[-1]->{'varlistentry_state'} = 1; return "$text"; } #return $text; } else { return ''; } } sub docbook_list_item($$$$$$$$$) { my $text = shift; my $format = shift; my $command = shift; my $formatted_command = shift; my $item_nr = shift; my $enumerate_style = shift; my $number = shift; my $prepended = shift; my $prepended_formatted = shift; my $only_inter_item_commands = shift; my $before_items = shift; $only_inter_item_commands = '' if (!defined($only_inter_item_commands)); #my $prep_t = 'UNDEF'; $prep_t = $prepended if (defined($prepended)); #$item_nr = 0 if (!defined($item_nr)); #print STDERR " $item_nr --> $prep_t|${text}!!!!!\n"; #return $text if ($only_inter_item_commands and $before_items); return $text if ($before_items); return '' . $text . "\n"; } sub docbook_table_list($$$$$$$$$) { my $format_command = shift; my $text = shift; my $command = shift; my $formatted_command = shift; # enumerate my $item_nr = shift; my $enumerate_style = shift; # itemize my $prepended = shift; my $prepended_formatted = shift; # multitable my $columnfractions = shift; my $prototype_row = shift; my $prototype_lengths = shift; my $number = shift; $result = "<$format_command>"; if ($format_command eq 'itemize') { my $itemfunction; #$prepended_formatted =~ s/^\s*// if (defined($prepended_formatted)); $prepended =~ s/^\s*// if (defined($prepended)); #if (defined($formatted_command) and $formatted_command ne '') if (defined($command) and $command ne '') { #$itemfunction = $formatted_command; $itemfunction = $command; #$itemfunction .= " $prepended_formatted" if (defined($prepended_formatted) and $prepended_formatted ne ''); $itemfunction .= " $prepended" if (defined($prepended) and $prepended ne ''); } #elsif (defined($prepended_formatted)) elsif (defined($prepended)) { #$itemfunction = $prepended_formatted; $itemfunction = $prepended; } my $mark = ''; $mark = " mark=\"$itemfunction\"" if (defined($itemfunction) and $itemfunction ne ''); return docbook_add_id('itemizedlist')."${mark}>$text"; } elsif ($format_command eq 'enumerate') { my $numeration='arabic'; if (defined($enumerate_style) and $enumerate_style ne '') { if ($enumerate_style =~ /^[A-Z]/) { $numeration = 'upperalpha'; } elsif ($enumerate_style =~ /^[a-z]/) { $numeration = 'loweralpha'; } } return docbook_add_id('orderedlist') ." numeration=\"$numeration\">$text"; } elsif ($format_command eq 'multitable') { my $result = docbook_add_id('informaltable').'>'; my $fractions; my $multiply = 1; if (defined($columnfractions) and (ref($columnfractions) eq 'ARRAY') and scalar(@$columnfractions)) { $fractions = [ @$columnfractions ]; $multiply = 100; } elsif (defined($prototype_lengths) and (ref($prototype_lengths) eq 'ARRAY') and scalar(@$prototype_lengths)) { $fractions = [ @$prototype_lengths ]; } if (defined ($fractions)) { foreach my $fraction (@$fractions) { $result .= ''; } } $text .= "" if ($docbook_multitable_stack[-1] == 1); $text .= "" if ($docbook_multitable_stack[-1] == 0); pop @docbook_multitable_stack; return $result . "$text"; } elsif ($format_command =~ /^(v|f)?table$/) { $result = docbook_add_id('variablelist').'>'; if (defined($docbook_table_stack[-1]->{'inter_item'})) { # there is a para in case there is only a comment, to avoid # an empty listitem $text .= "$docbook_table_stack[-1]->{'inter_item'}"; } elsif ($docbook_table_stack[-1]->{'varlistentry_state'} == 2) { $text .= ""; } $text .= '' if ($docbook_table_stack[-1]->{'varlistentry_state'} >= 1); pop @docbook_table_stack; return $result . "$text\n"; } } sub docbook_begin_format_texi($$$) { my $command = shift; my $line = shift; my $state = shift; $pending_inter_item_text = undef; # if ($command =~ /^(v|f)?table/); push (@docbook_multitable_stack, -1) if ($command eq 'multitable'); push (@docbook_table_stack, {'varlistentry_state' => 0}) if ($command =~ /^(v|f)?table/); return $line; } # FIXME sub docbook_sp($$) { my $number = shift; my $preformatted = shift; return ""; } sub docbook_index_summary($$) { my $alpha = shift; my $nonalpha = shift; return ''; } sub docbook_printindex($$) { my $name = shift; return docbook_add_id('index').">\n"; } sub docbook_complex_format($$) { my $name = shift; my $text = shift; return '' if ($text eq ''); my $result = docbook_add_id($docbook_complex_format{$name}).'>' .$text.""; return $result; } sub docbook_format($$) { my $name = shift; my $element = shift; my $text = shift; return '' if ($text eq ''); return $text if ($format_map{$name} eq ''); if ($name eq 'copying') { return "\n\n$text\n\n"; } return docbook_add_id($format_map{$name}).'>' .$text.""; } my @docbook_special_quotation = ('note', 'caution', 'important', 'tip', 'warning'); sub docbook_quotation_prepend_text($$) { my $command = shift; my $argument_text = shift; return undef if (!defined($argument_text) or $argument_text =~ /^$/); chomp($argument_text); my $text = $argument_text; $text =~ s/^\s*//; $text =~ s/\s*$//; return undef if (grep {lc($text) eq $_} @docbook_special_quotation); return &$I('@b{%{quotation_arg}:} ', {'quotation_arg' => $argument_text}, {'keep_texi' => 1}); } sub docbook_quotation($$$$) { my $command = shift; my $text = shift; my $argument_text = shift; my $argument_text_texi = shift; $argument_text_texi = '' if (!defined($argument_text_texi)); $argument_text_texi =~ s/^\s*//; $argument_text_texi =~ s/\s*$//; my $docbook_command = 'blockquote'; if (grep {lc($argument_text_texi) eq $_} @docbook_special_quotation) { $docbook_command = lc($argument_text_texi); } return docbook_add_id($docbook_command).'>' . $text . "\n"; } sub docbook_style($$$$$$$$$) { my $style = shift; my $command = shift; my $text = shift; my $args = shift; my $no_close =shift; my $no_open = shift; my $line_nr = shift; my $state = shift; my $command_stack = shift; my $result = $text; if (exists($style->{'function'})) { my $function = $style->{'function'}; $result = &$function($command, $args, $command_stack, $state, $line_nr); } elsif (exists($style->{'attribute'})) { my $attribute = $style->{'attribute'}; my $attribute_text = ''; if ($attribute =~ /^(\w+)(\s+.*)/) { $attribute = $1; $attribute_text = $2; } $result = docbook_add_id($attribute)."$attribute_text>$text"; } if (exists($style->{'begin'})) { $result = $style->{'begin'} . $result; } if (exists($style->{'end'})) { $result .= $style->{'end'}; } return $result; } sub docbook_raw($$) { my $style = shift; my $text = shift; if ($style eq 'verbatim') { return docbook_add_id('screen').'>' . &$protect_text($text) . ''; } elsif ($style eq 'docbook') { chomp ($text); return $text; } else { main::echo_warn ("Raw style $style not handled"); return &$protect_text($text); } } sub docbook_cartouche($$) { my $text = shift; return "$text"; } sub docbook_anchor_label($$) { my $id = shift; my $anchor_text = shift; return ''; } sub docbook_float($$$$$) { my $text = shift; my $float = shift; my $caption = shift; my $shortcaption = shift; my $label_texi = $float->{'texi'}; return $text if (!defined($label_texi) or $label_texi eq ''); return docbook_anchor_label('',$label_texi) . $text; } sub docbook_normal_text($$$$$$) { my $text = shift; my $in_raw_text = shift; # remove_texi my $in_preformatted = shift; my $in_code = shift; my $in_simple = shift; #print STDERR "Bug: in_raw_text in_simple $text\n" if ($in_raw_text and $in_simple); my $style_stack = shift; #$text = uc($text) if (in_cmd($style_stack, 'sc')); $text = &$protect_text($text) unless($in_raw_text); if (! $in_code and !$in_preformatted) { if (!$in_raw_text) { $text =~ s/---/\&mdash\;/g; $text =~ s/--/\&ndash\;/g; $text =~ s/``/\&ldquo\;/g; $text =~ s/''/\&rdquo\;/g; } else { #FIXME really do that ? It is done by makeinfo in hhml $text =~ s/``/"/g; $text =~ s/''/"/g; # temporary reuse '' to store --- !.... # FIXME won't '---' be handled wrongly? # FIXME really do that in raw text? $text =~ s/---/''/g; $text =~ s/--/-/g; $text =~ s/''/--/g; } } return $text; } sub docbook_noop { return ''; } 1; texi2html-1.82/examples/roff.init0000644000175000017500000010477011264347127020707 0ustar flichtenheldflichtenheld# -*-perl-*- #+############################################################################## # # roff.init: convert to roff # # Copyright (C) 2003-2008 Patrice Dumas # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 USA # #-############################################################################## main::load_init_file('', 'noheaders.init'); $SPLIT = 'none'; @EXPAND = ('info'); $USE_ISO = 0; #$SHOW_MENU = 0; $SMALL_RULE = ''; $DEFAULT_RULE = ''; $MIDDLE_RULE = ''; $BIG_RULE = ''; $NODE_FILE_EXTENSION = 'roff'; $EXTENSION = 'roff'; $MENU_SYMBOL = '*'; $AVOID_MENU_REDUNDANCY = 0; $print_Top = \&T2H_ROFF_print_Top; $print_misc = \&T2H_ROFF_print_misc; $print_page_head = \&T2H_ROFF_print_page_head; $print_page_foot = \&T2H_ROFF_print_page_foot; $toc_body = \&T2H_ROFF_toc_body; $titlepage = \&T2H_ROFF_titlepage; sub T2H_ROFF_print_page_head { my $fh = shift; print $fh <* routines, # give them another name, and assign them to the respective # $ variable (below). # # This hash should have keys corresponding with the nonletter command accent # whose following character is considered to be the argument # This hash associates an accent macro to the ISO name for the accent if any. # The customary use of this map is to find the ISO name appearing in html # entity (like é) associated with a texinfo accent macro. # # The keys of the hash are # ": umlaut # ~: tilda accent # ^: circumflex accent # `: grave accent # ': acute accent # =: macron accent %accent_map = ( '"', ':', '~', '~', '^', '^', '`', '`', ',', ',', "'", "'", '=', '', ); # # texinfo "simple things" (@foo) to HTML ones # %simple_map = ( # "*", "\n.br\n", ' ', '\ ', "\t", "\\\t", "\n", "\\\n", # "­" or "­" could also be possible for @-, but it seems # that some browser will consider this as an always visible hyphen mark # which is not what we want (see http://www.cs.tut.fi/~jkorpela/shy.html) '-', '', # hyphenation hint '|', '', # used in formatting commands @evenfooting and friends '/', '', # spacing commands ':', '', '!', '!', '?', '?', '.', '\&.', '@', '@', '}', '}', '{', '{', ); # this map is used in preformatted text %simple_map_pre = %simple_map; # # texinfo "things" (@foo{}) to HTML ones # %things_map = ( 'TeX' => 'TeX', 'LaTeX' => 'LaTeX', 'bullet' => '\(bu', 'copyright' => '\(co', 'registeredsymbol' => '\(rg', 'dots' => '\&...', 'enddots' => '\&...', 'equiv' => '\(==', # i18n 'error' => 'error->', 'expansion' => '\(->', 'minus' => '\-', 'point' => '*', 'print' => '-|', 'result' => '\(rh', # set in code using the language # 'today', &pretty_date, 'aa' => '\(oa', 'AA' => '\(oA', 'ae' => '\(ae', 'oe' => '\(oe', 'AE' => '\(AE', 'OE' => '\(OE', 'o' => '\(/o', 'O' => '\(/O', 'ss' => '\(ss', 'l' => '\(/l', 'L' => '\(/L', 'exclamdown' => '\(r!', 'questiondown' => '\(r?', 'pounds' => '\(Po', 'ordm' => '\(Om', 'ordf' => '\(Of', 'euro' => '\(eu', ); # This map is used in preformatted environments %pre_map = %things_map; #%style_map = ( # 'acronym', '', # 'asis', '', # 'b', ['\fB', '\fR'], # 'cite', ['\fI', '\fR'], # 'code', ['\fR\&\f(CW', '\fR'], # 'command', ['\fR\&\f(CW', '\fR'], # 'ctrl', ['\fR\&\f(CW', '\fR'], # 'dfn', ['\fI', '\fR'], # 'dmn', '', # 'email', ['\fB', '\fR'], # 'emph', ['\fI', '\fR'], # 'env', ['\fR\&\f(CW', '\fR'], # 'file', ['\fR\&\f(CW', '\fR', '"'], # 'i', ['\fI', '\fR'], # 'kbd', ['\fR\&\f(CW', '\fR'], # 'key', ['\fR\&\f(CW', '\fR'], # 'math', ['\fR\&\f(CW', '\fR'], # 'option', ['\fR\&\f(CW', '\fR', '"'], # 'r', ['\fR', ''], # 'samp', ['\fR\&\f(CW', '\fR', '"'], # 'sc', '&roff_sc', # 'strong', ['\fB', '\fR'], # 't', ['\fR\&\f(CW', '\fR'], # 'uref', '&default_uref', # 'url', '&default_url', # 'var', ['\fI', '\fR'], # 'verb', ['\fR\&\f(CW', '\fR'], # 'titlefont', ["\n.sz +10\n.ce\n", "\n.sz -10\n"], # 'w', '', # 'H', '&roff_accent', # 'dotaccent', '&roff_accent', # 'ringaccent', '&roff_accent', # 'tieaccent', '&roff_accent', # 'u', '&roff_accent', # 'ubaraccent', '&roff_accent', # 'udotaccent', '&roff_accent', # 'v', '&roff_accent', # ',', '&roff_accent', # 'dotless', '' # ); my @bold_commands = ('strong', 'b', 'email'); my @italic_commands = ('cite', 'dfn', 'emph', 'i', 'var', 'slanted'); my @fixed_command = ('code', 'command', 'ctrl', 'env', 'file', 'kbd', 'key', 'math', 'option', 'samp', 't', 'verb'); foreach my $accent_command ('tieaccent', 'dotless', keys(%unicode_accents), keys(%accent_map)) { #$style_map{$accent_command} = { 'function' => \&t2h_roff_accent }; $style_map{$accent_command} = '&roff_accent'; } #foreach my $accent (keys(%accent_map)) #{ # $style_map{$accent} = '&roff_accent'; #} foreach my $command (keys(%style_map)) { delete $style_map{$command}->{'attribute'} if (exists($style_map{$command}->{'attribute'})); if (grep {$_ eq $command} @bold_commands) { delete $style_map{$command}->{'function'} if (exists($style_map{$command}->{'function'})); $style_map{$command}->{'begin'} = '\fB'; $style_map{$command}->{'end'} = '\fR'; next; } elsif (grep {$_ eq $command} @italic_commands) { delete $style_map{$command}->{'function'} if (exists($style_map{$command}->{'function'})); $style_map{$command}->{'begin'} = '\fI'; $style_map{$command}->{'end'} = '\fR'; next; } elsif (grep {$_ eq $command} @fixed_commands) { delete $style_map{$command}->{'function'} if (exists($style_map{$command}->{'function'})); $style_map{$command}->{'begin'} = '\fR\&\f(CW'; $style_map{$command}->{'end'} = '\fR'; next; } } delete $style_map{'titlefont'}->{'function'} if (exists($style_map{'titlefont'}->{'function'})); $style_map{'titlefont'}->{'begin'} = "\n.sz +10\n.ce\n"; $style_map{'titlefont'}->{'end'} = "\n.sz -10\n"; delete $style_map{'r'}->{'function'} if (exists($style_map{'r'}->{'function'})); $style_map{'r'}->{'begin'} = '\r'; #$style_map{'r'}->{'end'} = ''; $style_map{'sc'} = '&roff_sc'; $style_map{'indicateurl'}->{'begin'} = '<'; $style_map{'indicateurl'}->{'end'} = '>'; foreach my $command (keys(%style_map)) { if (ref($style_map{$command}) ne 'HASH') { $style_map_pre{$command} = $style_map{$command}; next; } $style_map_pre{$command} = {}; foreach my $key (keys(%{$style_map{$command}})) { $style_map_pre{$command}->{$key} = $style_map{$command}->{$key}; } } %special_accents = ( 'ringaccent' => 'aA', "'" => 'aeiouyAEIOUY', ',' => 'cC', '^' => 'aeiouAEIOU', '`' => 'aeiouAEIOU', '~' => 'nNaoAO', '"' => 'aeiouyAEIOUY', 'v' => 'sSzZ', ); sub roff_accent($$) { my $text = shift; my $accent = shift; return $text if ($accent eq 'dotless'); return "\\($accent_map{$accent}${text}" if (defined($accent_map{$accent}) and defined($special_accents{$accent}) and ($text =~ /^[$special_accents{$accent}]$/)); return "\\(o${text}" if (($accent eq 'ringaccent') and (defined($special_accents{$accent})) and ($text =~ /^[$special_accents{$accent}]$/)); return "\\(v${text}" if (($accent eq 'v') and (defined($special_accents{$accent})) and ($text =~ /^[$special_accents{$accent}]$/)); #FIXME maybe we should protect the symbols such that they look like strings and # not ponctuation marks ? Like it is done in texi2roff ? return $text . '\\&.' if ($accent eq 'dotaccent'); return '\\&.' . $text if ($accent eq 'udotaccent'); return ascii_accents($text, $accent); } sub roff_sc($$) { return "\n.sz -6\n" . uc($_[0]) . "\n.sz +6\n" ; } sub roff_ctrl($$) { return "\\*^$_[0]"; } $format = \&T2H_ROFF_format; sub T2H_ROFF_format($$$) { my $tag = shift; my $element = shift; my $text = shift; return '' if (!defined($element) or ($text !~ /\S/)); return $element->[0] . $text . $element->[1]; } %format_map = ( 'quotation' => [ ".(q\n", ".)q\n" ], 'smallquotation' => [ ".(q\n", ".)q\n" ], # lists 'itemize' => [ ".(l L F\n.ba +5\n", ".ba -5\n.)l\n" ], 'enumerate' => [ ".(l L F\n.ba +5\n", ".ba -5\n.)l\n" ], 'multitable' => [ ".(l M\n.nh\n", ".hy\n.)l\n" ], 'table' => [ ".(l L F\n.ba +5\n", ".ba -5\n.)l\n" ], 'vtable' => [ ".(l L F\n.ba +5\n", ".ba -5\n.)l\n" ], 'ftable' => [ ".(l L F\n.ba +5\n", ".ba -5\n.)l\n" ], ); %special_list_commands = ( 'table' => {}, 'vtable' => {}, 'ftable' => {}, 'itemize' => {} ); # an eval of these $complex_format_map->{what}->{'begin'} yields beginning # an eval of these $complex_format_map->{what}->{'end'} yields end # $EXAMPLE_INDENT_CELL and SMALL_EXAMPLE_INDENT_CELL can be usefull here $complex_format_map = { 'example' => { 'begin' => q{""}, 'end' => q{""}, 'begin_region' => ".(l I\n\\&\\fR\\f(CW", 'end_region' => "\\&\\fR\n.)l\n" }, 'smallexample' => { 'begin' => q{""}, 'end' => q{""}, 'begin_region' => ".(l I\n.size -2\n\\&\\fR\\f(CW", 'end_region' => "\\&\\fR\n.size +2\n.)l\n" }, 'display' => { 'begin' => q{""}, 'end' => q{""}, 'begin_region' => ".(l I\n\\&\\fR\\f(CW", 'end_region' => "\\&\\fR\n.)l\n" }, 'smalldisplay' => { 'begin' => q{""}, 'end' => q{""}, 'begin_region' => ".(l I\n.size -2\n\\&\\fR\\f(CW", 'end_region' => "\\&\\fR\n.size +2\n.)l\n" }, 'menu-comment' => { 'begin' => q{""}, 'end' => q{""}, 'begin_region' => "", 'end_region' => "\n" }, 'menu-preformatted' => { 'begin' => q{""}, 'end' => q{""}, 'begin_region' => "", 'end_region' => "\n" } }; # format shouldn't narrow the margins $complex_format_map->{'lisp'} = $complex_format_map->{'example'}; $complex_format_map->{'smalllisp'} = $complex_format_map->{'smallexample'}; $complex_format_map->{'format'} = $complex_format_map->{'display'}; $complex_format_map->{'smallformat'} = $complex_format_map->{'smalldisplay'}; sub protect_spaces($) { my $text = shift; my $result = ''; while($text) { if ($text =~ s/^([^\\]*)\\//o) { my $leading = $1; if (defined($leading)) { $leading =~ s/([\t ])/\\$1/go; $result .= $leading . '\\'; } if (($text =~ s/^(\s)//o) or ($text =~ s/^(.)//o)) { $result .= $1; } } else { $text =~ s/([\t ])/\\$1/go; $result .= $text; $text = ''; } } return $result; } # formatting functions $anchor = \&t2h_roff_anchor; $def_item = \&t2h_roff_def_item; $def = \&t2h_roff_def; $menu = \&t2h_roff_menu; $menu_link = \&t2h_roff_menu_link; $menu_comment = \&t2h_roff_menu_comment; $menu_description = \&t2h_roff_menu_description; $simple_menu_link = \&t2h_roff_simple_menu_link; $table_item = \&t2h_roff_table_item; $table_line = \&t2h_roff_table_line; $row = \&t2h_roff_row; $cell = \&t2h_roff_cell; $list_item = \&t2h_roff_list_item; $comment = \&t2h_roff_comment; $def_line = \&t2h_roff_def_line; $raw = \&t2h_roff_raw; $heading = \&t2h_roff_heading; $paragraph = \&t2h_roff_paragraph; $preformatted = \&t2h_roff_preformatted; $foot_line_and_ref = \&t2h_roff_foot_line_and_ref; $foot_section = \&t2h_roff_foot_section; $image = \&t2h_roff_image; $index_entry_label = \&t2h_roff_index_entry_label; $index_summary = \&t2h_roff_index_summary; $print_index = \&t2h_roff_print_index; $protect_text = \&t2h_roff_protect_text; $cartouche = \&t2h_roff_cartouche; $sp = \&t2h_roff_sp; $normal_text = \&t2h_roff_normal_text; $empty_line = \&t2h_roff_empty_line; $unknown = \&t2h_roff_unknown; $float = \&t2h_roff_float; $listoffloats = \&t2h_roff_listoffloats; $listoffloats_entry = \&t2h_roff_listoffloats_entry; # This function is used to protect characters which are special in html # in inline text: &, ", <, and >. # # argument: # text to be protected sub t2h_roff_protect_text($) { my $text = shift; $text =~ s/\\/\\e/g; # $text =~ s/$;---$;/\\(em/g; # $text =~ s/$;--$;/-/g; # $text =~ s/$;-$;/\\-/g; $text =~ s/^\./\\&./; $text =~ s/([\s])\./$1\\&./g; return $text; } sub t2h_roff_normal_text($$$$) { my $text = shift; my $in_raw_text = shift; my $in_preformatted = shift; my $in_code =shift; my $in_simple = shift; my $style_stack = shift; $text = &$protect_text($text) unless($in_raw_text); if (! $in_code and !$in_preformatted and !$in_raw_text) { $text =~ s/---/\\(em/g; $text =~ s/--/\\(en/g; $text =~ s/-/\\-/g; $text =~ s/``/\\(lq/g; $text =~ s/''/\\(rq/g; } #$text =~ s/---/\\(em/g; #$text =~ s/(--?-?)/$;$1$;/go; return $text; } sub t2h_roff_unknown($$$) { my $macro = shift; my $line = shift; my $pass = shift; if ($macro eq '*' and $pass == 2) { $line = '' if ($line =~ /^\s*$/); return ($line, 1, "\n.br\n", undef); } return ($line, 0, undef, undef); } # This function produces an anchor # # arguments: # $name : anchor name # $href : anchor href # text : text displayed # extra_attribs : added to anchor attributes list sub t2h_roff_anchor($;$$$) { my $name = shift; my $href = shift; my $text = shift; my $attributes = shift; $href = '' if (!defined($href) or ($href !~ /\S/)); $text = '' if (!defined($text)); return $text if ($text ne ''); return "[$href]" if ($href ne ''); return ''; } # This function is used to format the text associated with a @deff/@end deff # # argument: # text sub t2h_roff_def_item($) { my $text = shift; if ($text =~ /\S/) { { #return ".ba +5\n.(l L F\n" . $text . ".)l\n.ba -5\n"; return ".(l L F\n.ba +5\n" . $text . ".ba -5\n.)l\n"; } } return ''; } # format the container for the @deffn line and text # # argument # text of the whole @def, line and associated text. sub t2h_roff_def($) { my $text = shift; return $text; } # a whole menu # # argument: # the whole menu text (entries and menu comments) # # argument: # whole menu text. sub t2h_roff_menu($) { my $text = shift; chomp $text; return ".(l M\n\\&\\s8" . &$I('Menu:') . "\n" . $text . "\\&\\s0\n.)l\n"; } # a simple menu entry ref in case we aren't in a standard menu context sub t2h_roff_simple_menu_link($$$$$$$) { my $entry = shift; my $preformatted = shift; # We assume this is true. my $href = shift; my $node = shift; my $title = shift; my $ending = shift; my $has_title = shift; $title = '' unless ($has_title); $title .= ':' if ($title ne ''); return "$MENU_SYMBOL$title$node$ending"; } # formats a menu entry link pointing to a node or section # # arguments: # the entry text # the state, a hash reference holding informations about the context, with a # usefull entry, 'preformatted', true if we are in a preformatted format # (a format keeping space between words). In that case a function # of the main program, main::do_preformatted($text, $state) might # be used to format the text with the current format style. # href is optionnal. It is the reference to the section or the node anchor # which should be used to make the link (typically it is the argument # of a href= attribute in a
    element). sub t2h_roff_menu_link($$$$$$) { my $entry = shift; my $state = shift; my $href = shift; my $node = shift; my $title = shift; my $ending = shift; my $has_title = shift; $title = '' unless ($has_title); $title .= ':' if ($title ne ''); return "$MENU_SYMBOL$title$node$ending"; } # formats a menu entry description, ie the text appearing after the node # specification in a menu entry an spanning until there is another # menu entry, an empty line or some text at the very beginning of the line # (we consider that text at the beginning of the line begins a menu comment) # # arguments: # the description text # the state. See menu_entry. sub t2h_roff_menu_description($$) { my $text = shift; my $state = shift; return $text; } # a menu comment (between menu lines) # formats the container of a menu comment. A menu comment is any text # appearing between menu lines, either separated by an empty line from # the preceding menu entry, or a text beginning at the first character # of the line (text not at the very beginning of the line is considered to # be the continuation of a menu entry description text). # # The text itself is considered to be in a preformatted environment # with name 'menu-commment' and with style $MENU_PRE_STYLE. # # argument # text contained in the menu comment. sub t2h_roff_menu_comment($) { my $text = shift; return $text; } # text after @item in table, vtable and ftable sub t2h_roff_table_item($$$$$) { my $text = shift; my $index_label = shift; my $format = shift; my $command = shift; my $formatted_command = shift; my $style_stack = shift; my $text_formatted = shift; my $text_formatted_leading_spaces = shift; my $text_formatted_trailing_spaces = shift; if (defined($text_formatted)) { $text = $text_formatted_leading_spaces . $text_formatted .$text_formatted_trailing_spaces; } $formatted_command = '' if (!defined($formatted_command) or exists($special_list_commands{$format}->{$command})); $text = '.ip ' . $formatted_command . protect_spaces($text) . "\n"; $text .= $index_label if (defined($index_label)); return $text; } # format text on the line following @item (in table, vtable and ftable) sub t2h_roff_table_line($) { my $text = shift; return $text; } # row in multitable sub t2h_roff_row($) { my $text = shift; if ($text =~ /\S/) { return $text ."\n" ; } return ''; } # cell in multitable sub t2h_roff_cell($) { my $text = shift; chomp $text; return protect_spaces($text) . "\\\t"; } # format an item in a list # # argument: # text of the item sub t2h_roff_list_item($$$$$$$) { my $text = shift; my $format = shift; my $command = shift; my $formatted_command = shift; my $item_nr = shift; my $enumerate_style = shift; my $number = shift; $formatted_command = '' if (!defined($formatted_command) or exists($special_list_commands{$format}->{$command})); if ($text =~ /\S/) { #return $formatted_command . $text; return $text . "\n"; } return ''; } # an comment sub t2h_roff_comment($) { my $text = shift; my $result = ''; while ($text) { $text =~ s/$;---$;/--/g; $text =~ s/$;--$;/-/g; $text =~ s/$;-$;/-/g; $text =~ s/^(.*)//; $result .= ".\\\"$1"; $result .= "\n" if ($text =~ s/^\n//); } return $result; } # a paragraph sub t2h_roff_paragraph($$$$$$$$$$) { my $text = shift; my $align = shift; my $indent = shift; my $paragraph_command = shift; my $paragraph_command_formatted = shift; my $paragraph_number = shift; my $format = shift; my $item_nr = shift; my $enumerate_style = shift; my $number = shift; return '' if ($text =~ /^\s*$/); if (defined($paragraph_number) and defined($$paragraph_number)) { $$paragraph_number++; $paragraph_command_formatted = undef if ($$paragraph_number > 1); } $paragraph_command_formatted = '' if (!defined($paragraph_command_formatted) or exists($special_list_commands{$format}->{$paragraph_command})); #return $text if (defined($format) and $format eq 'multitable'); return $text if (defined($format) and (($format eq 'multitable') or ($format eq 'quotation') or ($format eq 'smallquotation'))); my $open = ".pp\n"; if (defined($format) and (($format eq 'itemize') or ($format eq 'enumerate')) and defined($paragraph_number) and defined($$paragraph_number) and ($$paragraph_number == 1)) { $open = ".lp\n"; } my $close = ''; if ($align) { if ($align eq 'flushleft') { $open .= ".ad l\n"; $close .= ".ad b\n"; } elsif ($align eq 'flushright') { $open .= ".ad r\n"; $close .= ".ad b\n"; } elsif ($align eq 'center') { $open .= ".ce\n"; } } if (defined($format) and ($format eq 'enumerate') and defined($paragraph_number) and defined($$paragraph_number) and ($$paragraph_number == 1) and defined($number) and ($number ne '')) { $open .= "$number."; } chomp ($text); return $open. $paragraph_command_formatted . $text . "\n" . $close; } # a preformatted region sub t2h_roff_preformatted($$$$$$$$$$) { my $text = shift; my $pre_style = shift; my $class = shift; my $leading_command = shift; my $leading_command_formatted = shift; my $preformatted_number = shift; my $format = shift; my $item_nr = shift; my $enumerate_style = shift; my $number = shift; $leading_command_formatted = '' if (!defined($leading_command_formatted) or exists($special_list_commands{$format}->{$leading_command})); if (defined($format) and $format eq 'multitable') { my $chomped = chomp($text); my $result = '\&\fR\f(CW' . $text . '\&\fR'; $result .= "\n" if ($chomped); return $result; } return '' if ($text eq ''); if (defined($preformatted_number) and defined($$preformatted_number)) { $$preformatted_number++; $leading_command_formatted = undef if ($$preformatted_number > 1); } $leading_command_formatted = '' if (!defined($leading_command_formatted)); chomp $text; my $open = ''; if (defined($format) and ($format eq 'enumerate') and defined($paragraph_number) and defined($$paragraph_number) and ($$paragraph_number == 1) and defined($number) and ($number ne '')) { $open = "$number. "; } return $complex_format_map->{$class}->{'begin_region'} . $leading_command_formatted . $open . $text . $complex_format_map->{$class}->{'end_region'}; } # This function formats a heading for an element # # argument: # an element. It is a hash reference for a node or a sectionning command. # The interesting keys are: # 'text': the heading text # 'name': the heading text without section number # 'node': true if it is a node # 'level': level of the element. 0 for @top, 1 for chapter, heading, # appendix..., 2 for section and so on... # 'tag_level': the sectionning element name, raisesections and lowersections # taken into account # # relevant configuration variable: # $NUMBER_SECTIONS sub t2h_roff_heading($$$$$;$$) { my $element = shift; my $command = shift; my $texi_line = shift; my $line = shift; my $in_preformatted = shift; my $one_section = shift; my $element_heading = shift; my $name = $element->{'text'}; if (!$element->{'node'}) { $name = $element->{'name'}; } return '' if ($element->{'name'} !~ /\S/); my $class = $element->{'tag_level'}; $class = 'unnumbered' if ($class eq 'top'); $level = $element->{'level'}; $level = 3 if (!defined($level)); $level = 1 if ($level == 0); my $heading = ''; $heading = ".bp\n" if ($level == 1); $heading .= '.if !\n(_- \{\\' . "\n.nr _- 1\n.nr \$1 0 1\n" . '.af $1 A\}' . "\n" if ($class =~ /^appendix/); $name = protect_spaces($name); my $toc_entry = '\&'; if ($class =~ /^unnumbered/ or ($class eq 'node')) { $heading .= ".uh $name\n"; $toc_entry .= ' '; } elsif (($class =~ /section$/) or ($class eq 'chapter') or ($class =~ /^appendix/)) { $heading .= ".sh $level $name\n"; my $number = 1; while ($number < $level) { $toc_entry .= "\\n(\$$number."; $number++; } $toc_entry .= "\\n(\$$number "; } $toc_entry .= $name; return $heading . "\n" if ($class eq 'node'); return $heading . ".(x\n" . $toc_entry . "\n.)x\n\\&\\fR\n"; } sub T2H_ROFF_toc_body($$$) { my $elements_list = shift; my $do_contents = shift; my $do_scontents = shift; if ($do_contents or $do_scontents) { my $lines = ".pp\n.nr % 0 1\n.af % i\n.bp \\n%+1\n.ce\n\\&\\fB" . &$I('Table of Contents') . "\\fR\n.sp 2\n.xp\n"; if (!$do_contents) { push @{$Texi2HTML::OVERVIEW}, $lines; } else { push @{$Texi2HTML::TOC_LINES}, $lines; } } } # formatting of raw regions # ih L2H is true another mechanism is used for tex sub t2h_roff_raw($$) { my $style = shift; my $text = shift; if ($style eq 'verbatim' or $style eq 'tex' or $style eq 'html') { chomp ($text); return ".(l M\n\\fR\\&\\f(CW" . &$protect_text($text) . "\\fR\n.)l\n" ; } else { warn "$WARN (bug) unknown style $style\n"; return &$protect_text($text); } } # This function formats a footnote reference and the footnote text associated # with a given footnote. # The footnote reference is the text appearing in the main document pointing # to the footnote text. # # arguments: # absolute number of the footnote (in the document) # relative number of the footnote (in the page) # identifier for the footnote # identifier for the footnote reference in the main document # main document file # footnote text file # array with the footnote text lines # the state. See menu entry. # # returns: # reference on an array containing the footnote text lines which should # have been updated # the text for the reference pointing on the footnote text sub t2h_roff_foot_line_and_ref($$$$$$$) { my $number_in_doc = shift; my $number_in_page = shift; my $footnote_id = shift; my $place_id = shift; my $document_file = shift; my $footnote_file = shift; my $lines = shift; my $state = shift; my $text = ''; my $line; while (@$lines) { $line = shift @$lines; $text .= $line; } chomp $text; return ([], "\n.(f\n" . $text . "\n.)f\n" ); } # formats a group of footnotes. # # argument: # array reference on the footnotes texts lines # # returns an array reference on the group of footnotes lines sub t2h_roff_foot_section($) { my $lines = shift; @$lines = (); } # format an image # # arguments: # image file name # image basename # a boolean true if we are in a preformatted format sub t2h_roff_image($$$$) { my $file = shift; my $base = shift; my $preformatted = shift; my $file_name = shift; return "[$base src=$file_name]" if ($base ne $file_name); return "[$base]"; } # format a target in the main document for an index entry. # # arguments: # target identifier # boolean true if in preformatted format sub t2h_roff_index_entry_label($$$$) { my $identifier = shift; my $preformatted = shift; my $label = shift; my $index_name = shift; return ".(x $index_name\n" . protect_spaces($label) . "\n.)x\n"; } # process definition commands line @deffn for example sub t2h_roff_def_line($$$$$) { my $category = shift; my $name = shift; my $type = shift; my $arguments = shift; my $index_label = shift; $index_label = '' if (!defined($index_label)); $name = '' if (!defined($name) or ($name =~ /^\s*$/)); $type = '' if (!defined($type) or $type =~ /^\s*$/); if (!defined($arguments) or $arguments =~ /^\s*$/) { $arguments = ''; } else { $arguments = '\fI' . protect_spaces($arguments) . '\fR'; } my $type_name = ' '; $type_name = " $type" if ($type ne ''); $type_name .= '\fB' . protect_spaces($name) . '\fR' if ($name ne ''); $type_name .= $arguments . "\n"; return '\fI' . protect_spaces($category) . ':\fR' . $type_name . $index_label; } # a cartouche sub t2h_roff_cartouche($$) { my $text = shift; return $text; } sub t2h_roff_sp($$) { my $number = shift; my $preformatted = shift; return "\n.sp $number\n"; } # format a whole index # # argument: # index text # index name sub t2h_roff_print_index($$) { my $text = shift; my $name = shift; return ".xp $name\n"; } # format an index summary. This is a list of letters linking to the letter # entries. # # arguments: # array reference containing the formatted alphabetical letters # array reference containing the formatted non lphabetical letters sub t2h_roff_index_summary($$) { my $alpha = shift; my $nonalpha = shift; my $join = ''; my $nonalpha_text = ''; my $alpha_text = ''; return ''; } # FIXME the following construct leads to something wrong ? # something @c a comment # # other thing sub t2h_roff_empty_line($) { my $text = shift; return ''; } sub t2h_roff_listoffloats_entry($$$$) { my $style_texi = shift; my $float = shift; my $float_style = shift; my $caption = shift; my $href = shift; chomp ($caption); return '.ip ' . protect_spaces($float_style) . "\n" . $caption . "\n"; } sub t2h_roff_listoffloats($$$) { my $style_texi = shift; my $style = shift; my $float_entries = shift; my $result = ".(l L F\n.ba +5\n"; foreach my $float_entry (@$float_entries) { $result .= $float_entry; } return $result . ".ba -5\n.)l\n"; } sub t2h_roff_float($$$$$) { my $text = shift; my $float = shift; my $caption = shift; my $shortcaption = shift; my $caption_text = ''; if (defined($float->{'caption_texi'})) { $caption_text = $caption; } elsif (defined($float->{'shortcaption_texi'})) { $caption_text = $shortcaption; } elsif (defined($caption)) { $caption_text = $caption; } chomp ($caption_text); return ".(b L F\n" . $text . $caption_text . "\n.b)\n"; } 1; texi2html-1.82/examples/bib-example.texi0000644000175000017500000000307711264347127022144 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @c % Copyright (C) 2004 Aaron S. Hawley @c % Author: Aaron S. Hawley @c % Keywords: docs, texinfo, extensions, bib @c % This file is free software; you can redistribute it and/or modify @c % it under the terms of the GNU General Public License as published by @c % the Free Software Foundation; either version 2, or (at your option) @c % any later version. @c % This file is distributed in the hope that it will be useful, @c % but WITHOUT ANY WARRANTY; without even the implied warranty of @c % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @c % GNU General Public License for more details. @c % You should have received a copy of the GNU General Public License @c % along with texi2html; see the file COPYING. If not, write to @c % the Free Software Foundation, Inc., 59 Temple Place - Suite 330, @c % Boston, MA 02111-1307, USA. @comment %**start of header @setfilename my-file-with-bib.info @settitle Texinfo with a Bibliography and References @include my-bib-macros.texi @mybibuselist{References} @comment %**end of header @node Top @top Top @menu * Introduction:: * @mybibnode{}:: @end menu @node Introduction @chapter Introduction The ability of a documentation format to make cross references to a bibliography, a feature of LaTeX @mybibcite{LaTeX2e}, isn't currently supported in Texinfo. @node @mybibnode{} @chapter References @itemize @asis @mybibitem{LaTeX2e} Leslie Lamport, LaTeX User's Guide and Reference Manual, 2nd edition, Addison-Wesley, Reading, Massachusetts, 1994. @end itemize @bye texi2html-1.82/texi2html.spec.in0000644000175000017500000000510411264347127020440 0ustar flichtenheldflichtenheldName: @PACKAGE_TARNAME@ Version: @PACKAGE_VERSION@ Release: 1 # GPLv2+ is for the code # OFSFDL (Old FSF Documentation License) for the documentation # CC-BY-SA or GPLv2 for the images License: GPLv2+ and OFSFDL and (CC-BY-SA or GPLv2) Group: Applications/Text Summary: A highly customizable texinfo to HTML and other formats translator Source0: http://download.savannah.nongnu.org/releases/%{name}/%{name}-%{version}.tar.bz2 URL: http://www.nongnu.org/texi2html/ Requires(post): /sbin/install-info Requires(preun): /sbin/install-info # perl is picked up automatically in most cases and the package may have # a different name so it is better not to require it. Moreover such old perl # is unlikely to show up in a rpm based distribution. #Requires: perl >= 5.004 Requires: latex2html BuildRequires: perl(Text::Unidecode) # not detected automatically because it is required at runtime based on # user configuration Requires: perl(Text::Unidecode) BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildArch: noarch %description The basic purpose of texi2html is to convert Texinfo documents into HTML, and other formats. Configuration files written in perl provide fine degree of control over the final output, allowing most every aspect of the final output not specified in the Texinfo input file to be specified. %prep %setup -q %build %configure make %{?_smp_mflags} %install rm -rf $RPM_BUILD_ROOT make install DESTDIR=$RPM_BUILD_ROOT rm -f $RPM_BUILD_ROOT%{_infodir}/dir # directories shared by all the texinfo implementations for common # config files, like htmlxref.cnf mkdir -p $RPM_BUILD_ROOT%{_datadir}/texinfo $RPM_BUILD_ROOT%{_sysconfdir}/texinfo %clean rm -rf $RPM_BUILD_ROOT %post /sbin/install-info %{_infodir}/%{name}.info %{_infodir}/dir || : %preun if [ $1 = 0 ]; then /sbin/install-info --delete %{_infodir}/%{name}.info %{_infodir}/dir || : fi %files %defattr(-,root,root,-) %doc AUTHORS COPYING ChangeLog NEWS README TODO %{name}.init %{_bindir}/%{name} %{_datadir}/texinfo/html/%{name}.html %{_mandir}/man*/%{name}* %{_infodir}/%{name}.info* %dir %{_datadir}/%{name} %{_datadir}/%{name}/*.init %{_datadir}/%{name}/*.texi %dir %{_datadir}/%{name}/i18n/ %{_datadir}/%{name}/i18n/* %dir %{_datadir}/%{name}/images/ %{_datadir}/%{name}/images/* %dir %{_datadir}/texinfo %dir %{_sysconfdir}/texinfo %changelog * Sun Sep 9 2007 Patrice Dumas @PACKAGE_VERSION@-1 - update to @PACKAGE_VERSION@ * Mon Nov 14 2005 Patrice Dumas 1.77-1 - cleanups * Mon Mar 23 2004 Patrice Dumas 0:1.69-0.fdr.1 - Initial build. texi2html-1.82/T2h_i18n.pm0000644000175000017500000003001511264347127017070 0ustar flichtenheldflichtenheld#+############################################################################## # # T2h_i18n.pm: Internationalization for texi2html # # Copyright (C) 1999-2005 Patrice Dumas , # Derek Price , # Adrian Aichner , # & others. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # #-############################################################################## # This requires perl version 5 or higher require 5.0; package Texi2HTML::I18n; use strict; use vars qw( @ISA @EXPORT ); use Exporter; @ISA = qw(Exporter); @EXPORT = qw(pretty_date); my $language; my $i18n_dir = 'i18n'; # name of the directory containing the per language files #my $translation_file = 'translations.pl'; # file containing all the translations #my @known_languages = ('de', 'nl', 'es', 'no', 'pt', 'fr'); # The supported # languages ######################################################################## # Language dependencies: # To add a new language extend the WORDS hash and create $T2H_<...>_WORDS hash # To redefine one word, simply do: # $T2h_i18n::T2H_LANGUAGES->{}->{} = 'whatever' in your personal init file. # # Those hashes are obsolete but retained here for reference my $T2H_WORDS_EN = { # titles of pages #'Table of Contents' => 'Table of Contents', #'Short Table of Contents' => 'Short Table of Contents', #'Index' => 'Index', #'About This Document' => 'About This Document', #'Footnotes' => 'Footnotes', #'See' => 'See', #'see' => 'see', #'section' => 'section', 'About This Document' => '', 'Table of Contents' => '', 'Short Table of Contents', => '', 'Index' => '', 'Footnotes' => '', 'See' => '', 'see' => '', 'section' => '', 'Top' => '', 'Untitled Document' => '', # If necessary, we could extend this as follows: # # text for buttons # 'Top_Button' => 'Top', # 'ToC_Button' => 'Contents', # 'Overview_Button' => 'Overview', # 'Index_button' => 'Index', # 'Back_Button' => 'Back', # 'FastBack_Button' => 'FastBack', # 'Prev_Button' => 'Prev', # 'Up_Button' => 'Up', # 'Next_Button' => 'Next', # 'Forward_Button' =>'Forward', # 'FastWorward_Button' => 'FastForward', # 'First_Button' => 'First', # 'Last_Button' => 'Last', # 'About_Button' => 'About' 'January' => '', 'February' => '', 'March' => '', 'April' => '', 'May' => '', 'June' => '', 'July' => '', 'August' => '', 'September' => '', 'October' => '', 'November' => '', 'December' => '', 'T2H_today' => '%s, %d %d', }; my $T2H_WORDS_DE = { 'Table of Contents' => 'Inhaltsverzeichniss', 'Short Table of Contents' => 'Kurzes Inhaltsverzeichniss', 'Index' => 'Index', 'About This Document' => 'Über dieses Dokument', 'Footnotes' => 'Fußnoten', 'See' => 'Siehe', 'see' => 'siehe', 'section' => 'Abschnitt', 'January' => 'Januar', 'February' => 'Februar', 'March' => 'März', 'April' => 'April', 'May' => 'Mai', 'June' => 'Juni', 'July' => 'Juli', 'August' => 'August', 'September' => 'September', 'October' => 'Oktober', 'November' => 'November', 'December' => 'Dezember', }; my $T2H_WORDS_NL = { 'Table of Contents' => 'Inhoudsopgave', 'Short Table of Contents' => 'Korte inhoudsopgave', 'Index' => 'Index', #Not sure ;-) 'About This Document' => 'No translation available!', #No translation available! 'Footnotes' => 'No translation available!', #No translation available! 'See' => 'Zie', 'see' => 'zie', 'section' => 'sectie', 'January' => 'Januari', 'February' => 'Februari', 'March' => 'Maart', 'April' => 'April', 'May' => 'Mei', 'June' => 'Juni', 'July' => 'Juli', 'August' => 'Augustus', 'September' => 'September', 'October' => 'Oktober', 'November' => 'November', 'December' => 'December', }; my $T2H_WORDS_ES = { 'Table of Contents' => 'índice General', 'Short Table of Contents' => 'Resumen del Contenido', 'Index' => 'Index', #Not sure ;-) 'About This Document' => 'No translation available!', #No translation available! 'Footnotes' => 'Fußnoten', 'See' => 'Véase', 'see' => 'véase', 'section' => 'sección', 'January' => 'enero', 'February' => 'febrero', 'March' => 'marzo', 'April' => 'abril', 'May' => 'mayo', 'June' => 'junio', 'July' => 'julio', 'August' => 'agosto', 'September' => 'septiembre', 'October' => 'octubre', 'November' => 'noviembre', 'December' => 'diciembre', }; my $T2H_WORDS_NO = { 'Table of Contents' => 'Innholdsfortegnelse', 'Short Table of Contents' => 'Kort innholdsfortegnelse', 'Index' => 'Indeks', #Not sure ;-) 'About This Document' => 'No translation available!', #No translation available! 'Footnotes' => 'No translation available!', 'See' => 'Se', 'see' => 'se', 'section' => 'avsnitt', 'January' => 'januar', 'February' => 'februar', 'March' => 'mars', 'April' => 'april', 'May' => 'mai', 'June' => 'juni', 'July' => 'juli', 'August' => 'august', 'September' => 'september', 'October' => 'oktober', 'November' => 'november', 'December' => 'desember', }; my $T2H_WORDS_PT = { 'Table of Contents' => 'Sumário', 'Short Table of Contents' => 'Breve Sumário', 'Index' => 'Índice', #Not sure ;-) 'About This Document' => 'No translation available!', #No translation available! 'Footnotes' => 'No translation available!', 'See' => 'Veja', 'see' => 'veja', 'section' => 'Seção', 'January' => 'Janeiro', 'February' => 'Fevereiro', 'March' => 'Março', 'April' => 'Abril', 'May' => 'Maio', 'June' => 'Junho', 'July' => 'Julho', 'August' => 'Agosto', 'September' => 'Setembro', 'October' => 'Outubro', 'November' => 'Novembro', 'December' => 'Dezembro', }; my $T2H_WORDS_FR = { 'Table of Contents' => 'Table des matières', 'Short Table of Contents' => 'Résumée du contenu', 'Index' => 'Index', 'About This Document' => 'A propos de ce document', 'Footnotes' => 'Notes de bas de page', 'See' => 'Voir', 'see' => 'voir', 'section' => 'section', 'January' => 'Janvier', 'February' => 'Février', 'March' => 'Mars', 'April' => 'Avril', 'May' => 'Mai', 'June' => 'Juin', 'July' => 'Juillet', 'August' => 'Août', 'September' => 'Septembre', 'October' => 'Octobre', 'November' => 'Novembre', 'December' => 'Décembre', 'T2H_today' => 'le %2$d %1$s %3$d' }; #$T2H_LANGUAGES = #{ # 'en' => $T2H_WORDS_EN, # 'de' => $T2H_WORDS_DE, # 'nl' => $T2H_WORDS_NL, # 'es' => $T2H_WORDS_ES, # 'no' => $T2H_WORDS_NO, # 'pt' => $T2H_WORDS_PT, # 'fr' => $T2H_WORDS_FR, #}; sub set_language($) { my $lang = shift; if (defined($lang) && exists($Texi2HTML::Config::LANGUAGES->{$lang}) && defined($Texi2HTML::Config::LANGUAGES->{$lang})) { $language = $lang; return 1; } else { return 0; } } sub get_language() { return $language; } my @MONTH_NAMES = ( 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ); my $I = \&get_string; sub pretty_date($) { my $lang = shift; my($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst); ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time); $year += ($year < 70) ? 2000 : 1900; # obachman: Let's do it as the Americans do #return($MONTH_NAMES->{$lang}[$mon] . ", " . $mday . " " . $year); #return(sprintf(&$I('T2H_today'), (get_string($MONTH_NAMES[$mon]), $mday, $year))); return &$I('%{month} %{day}, %{year}', { 'month' => get_string($MONTH_NAMES[$mon]), 'day' => $mday, 'year' => $year }); } my $error_no_en = 0; my %missing_strings; # arguments should already be converted sub get_string($;$$) { my $string = shift; my $arguments = shift; my $state = shift; # if duplicate is passed, it means that we are in the text and so should # use the main state if (defined($state) and $state->{'duplicate'} and defined($Texi2HTML::THISDOC{'state'})) { $state = main::duplicate_formatting_state($Texi2HTML::THISDOC{'state'}); } my $T2H_LANGUAGES = $Texi2HTML::Config::LANGUAGES; if (! exists($T2H_LANGUAGES->{'en'})) { unless($error_no_en) { print STDERR "i18n: no LANGUAGES->{'en'} hash\n"; $error_no_en = 1; } } else { unless (exists ($T2H_LANGUAGES->{'en'}->{$string})) { unless (exists($missing_strings{$string})) { print STDERR "i18n: missing string $string\n"; $missing_strings{$string} = 1; } } if (defined ($T2H_LANGUAGES->{$language}->{$string}) and ($T2H_LANGUAGES->{$language}->{$string} ne '')) { $string = $T2H_LANGUAGES->{$language}->{$string}; } elsif (defined ($T2H_LANGUAGES->{'en'}->{$string}) and ($T2H_LANGUAGES->{'en'}->{$string} ne '')) { $string = $T2H_LANGUAGES->{'en'}->{$string}; } } return main::substitute_line($string, $state) unless (defined($arguments) or !keys(%$arguments)); # if there are arguments, we must protect the %{arg} constructs before # doing substitute_line. So there is a first pass here to change %{arg} # to %@{arg@} my $result = ''; if (!$state->{'keep_texi'}) { while ($string) { if ($string =~ s/^([^%]*)%//) { $result .= $1 if (defined($1)); $result .= '%'; if ($string =~ s/^%//) { $result .= '%'; } elsif ($string =~ /^\{(\w+)\}/ and exists($arguments->{$1})) { $string =~ s/^\{(\w+)\}//; $result .= "\@\{$1\@\}"; } else { $result .= '%'; } next; } else { $result .= $string; last; } } # the arguments are not already there. But the @-commands in the # strings are substituted. $string = main::substitute_line($result, $state); } # now we substitute the arguments $result = ''; while ($string) { if ($string =~ s/^([^%]*)%//) { $result .= $1 if (defined($1)); if ($string =~ s/^%//) { $result .= '%'; } elsif ($string =~ /^\{(\w+)\}/ and exists($arguments->{$1})) { $string =~ s/^\{(\w+)\}//; $result .= $arguments->{$1}; } else { $result .= '%'; } next; } else { $result .= $string; last; } } return $result; } 1; texi2html-1.82/README0000644000175000017500000002033011264347127016115 0ustar flichtenheldflichtenheldThis is the README file for the texi2html distribution. The primary distribution point is http://savannah.nongnu.org/download/texi2html/ Installation ============ For generic installation instructions on compiling and installing this Automake-based distribution, please read the file `INSTALL'. Installation notes specific to Texi2html: * Installation is fairly simple, no compilers are required. * You need to have perl version 5.00405, or higher installed on your system to run 'texi2html'. To play nice with encodings you need the Encode and Unicode::Normalize modules. It is likely that an older perl 5 version also works if File::Spec is present. * To generate Makefile.in etc., run `./autogen.sh' or autoreconf Getting Started with texi2html ============================== 'texi2html' converts texinfo documents to HTML. Texinfo is the official documentation format of the GNU project. It uses a single source file to produce both on-line information and printed output. For more details about texinfo, see http://www.texinfo.org. In contrast to the HTML produced by 'makeinfo --html' (the 'makeinfo' program is part of the Texinfo distribution), the HTML output of 'texi2html' is highly configurable. Among others, with 'texi2html' you can customize your entire page layout (like headers, footers, style sheets, etc), split documents at various levels and use 'latex2html' to convert @tex sections. 'texi2html' should reasonably convert all Texinfo 4.8 constructs. If not, please send a bug report to 'texi2html-bug@nongnu.org'. To create HTML of texinfo documents =================================== Make sure that you have 'texi2html' correctly installed on your system. The general synopsis of 'texi2html' is texi2html [options] texinfo-source-file Without any options, this will create the file .html where is the basename of your texinfo files. Run 'texi2html -h' for a short overview of the most important options, or have a look at the texi2html man page. For more in-depth information see the texi2html texinfo manual. Customizing texi2html ===================== Initialisation options are read first from '/usr/local/etc/texi2html/Config' (the exact location being changeable with the '--sysconfdir=dir' option to the configure script), then from $HOME/.texi2html/Config, then any command-line options including -init-file options; with later settings overriding earlier ones. The default initialisation options are defined in the 'texi2html.init' file contained in the Texi2html distribution (in fact, a sed script pastes this file into the beginning of the perl file generated by `./configure' from texi2html.pl and generates the actual 'texi2html' script this way.). To customize 'texi2html' it is best if you copy the appropriate sections from the 'texi2html.init' file into an appropriate local initialization file, make the necessary changes there, and then have 'texi2html' read this initialisation file by one of the means described above. For an example on what you can produce with 'texi2html' have a look at the following sites: * http://www.singular.uni-kl.de/Manual/html/ (Please send me your sites, if you'd like to have them listed here). Documentation of texi2html ========================== The texi2html Texinfo manual should be rather complete. In addition, you might want to have a look at the comments in the 'texi2html.init' file for explanations about customizable parameters and at the (not up-to-date) texi2html man page for an overview of texi2html's synopsis. More information ================ Texi2html's home page can be found at http://www.nongnu.org/texi2html/ The home for development is at savannah at http://savannah.nongnu.org/projects/texi2html The newest version of Texi2html can be obtained from http://savannah.nongnu.org/download/texi2html/ or, via anonymous cvs (see http://savannah.nongnu.org/cvs/?group=texi2html for instructions). Send email to texi2html@nongnu.org for enhancement suggestions, authoring questions and general discussion. Send email to texi2html-bug@nongnu.org for bug reports, patches, discussions about code. To subscribe to these mailinglists, visit http://savannah.nongnu.org/mail/?group=texi2html There are no corresponding newsgroups. Files ===== This distribution includes the following files, among others: README This file. NEWS Summary of new features by release. INSTALL Generic installation instructions. TODO Things which are yet to be done. Texi2html source files: texi2html Actual script to run. Generated by make and `buildt2h.pl' from texi2html.pl, texi2html.init, MySimple.pm, T2h_i18n.pm, l2h.init and translations.pl. texi2html.pl Main source file of the converter. texi2html_configured.pl File generated by `./configure' from texi2html.pl. texi2html.init Default values of configurable parameters. `buildt2h.sh' inserts this file into texi2html_configured.pl when it generates the actual `texi2html' script. MySimple.pm Perl module which handles the processing of command-line options. `buildt2h.sh' inserts this file into texi2html_configured.pl when it generates the actual `texi2html' script. T2h_i18n.pm Code used to handle strings internationalization. translations.pl translations of strings generated by the script `manage_i18n.pl' from source files and files in the `i18n' directory. l2h.init default configuration file for `latex2html' used to convert maths and TeX. i18n/ Directory containing one file per language with translation of strings. Helper scripts manage_i18n.pl Helper script used to regenerate translations from the source files and the files in the `i18n/' directory. buildt2h.sh Helper script used to regenerate the texi2html script. A simple wrapper around a sed one-liner. Documentation files: texi2html.texi Texinfo manual of texi2html. texi2html.1.in Template for generation of man pages of texi2html (`texi2html.1'). This man page is incomplete. Installation files: configure This file creates creates a Makefile which in turn creates an `info' or `makeinfo' executable, or a C sources distribution. configure.ac This is a template for creating `configure' using Autoconf. Makefile.in This is a template for `configure' to use to make a Makefile. Created by Automake. Makefile.am This is a template for Automake to use to make a Makefile.in. Reporting bugs ============== For bug reports, please include enough information for the maintainers to reproduce the problem. Generally speaking, that means: - the version number of Texi2html and the program(s) involved (use --version). - the contents of any input files necessary to reproduce the bug (crucial!). - a description of the problem and any samples of the erroneous output. - anything else that you think would be helpful. Patches are most welcome; if possible, please make them against the source files (e.g., against texi2html.pl, or texi2html.init) with `diff -c' or `diff -u' and include ChangeLog entries. Good luck and enjoy !! texi2html-1.82/MySimple.pod0000644000175000017500000000670611264347127017513 0ustar flichtenheldflichtenheld=head1 NAME C - Provide a simple wrapper around Getopt::Long. =head NOTE Based on GetOpt::Simple, with some (here undocumented) modifications to fit texi2hml needs. =head1 SYNOPSIS use Getopt::MySimple; # Or ... # use Getopt::MySimple qw($opt); my($options) = { 'help' => { 'type' => '', 'default' => '', # 'verbose' => '', # Not needed on every key. }, 'username' => { 'type' => '=s', # As per Getopt::Long. 'default' => $ENV{'USER'} || 'RonSavage', # In case $USER is undef. 'verbose' => 'Specify the username on the remote machine', }, 'password' => { 'type' => '=s', 'default' => 'password', 'verbose' => 'Specify the password on the remote machine', }, }; my($option) = new Getopt::MySimple; if (! $option -> getOptions($options, "Usage: testMySimple.pl [options]") ) { exit(-1); # Failure. } print "username: $option->{'opt'}{'username'}. \n"; print "password: $option->{'opt'}{'password'}. \n"; # Or, after 'use Getopt::MySimple qw($opt);' ... # print "username: $opt->{'username'}. \n"; # print "password: $opt->{'password'}. \n"; =head1 DESCRIPTION The C module provides a simple way of specifying: =over 4 =item * Command line options =item * Type information for option values =item * Default values for the options =item * Help text per option =back =head1 The C function The C function takes 4 parameters: =over 4 =item * A hash defining the command line options =item * A string to display as a help text heading =item * A Boolean. 0 = (Default) Use case-sensitive option names. 1 = Ignore case =item * A Boolean. 0 = Return after displaying help. 1 = (Default) Terminate with exit(0) after displaying help =back =head1 The $classRef -> {'opt'} hash reference Command line option values are accessed in your code by dereferencing the hash reference $classRef -> {'opt'}. Two examples are given above, under synopsis. Alternately, you can use the hash reference $opt. See below. =head1 The $opt hash reference Command line option values are accessed in your code by dereferencing the hash reference $opt. Two examples are given above, under synopsis. Alternately, you can use the hash reference $classRef -> {'opt'}. See above. =head1 The C function C prints all your option's keys and their current values. =head1 The C function C prints nicely formatted help text. =head1 WARNING re Perl bug As always, be aware that these 2 lines mean the same thing, sometimes: =over 4 =item * $self -> {'thing'} =item * $self->{'thing'} =back The problem is the spaces around the ->. Inside double quotes, "...", the first space stops the dereference taking place. Outside double quotes the scanner correctly associates the $self token with the {'thing'} token. I regard this as a bug. =head1 REQUIRED MODULES =over 4 =item * Exporter =item * Getopt::Long =back =head1 RETURN VALUES =over 4 =item * C returns nothing =item * C returns nothing =item * C returns 0 for failure and 1 for success =back =head1 AUTHOR C was written by Ron Savage Irpsavage@ozemail.com.auE> in 1997. Modifications for texi2html by Olaf Bachmann Iobachman@mathtematik.uni-kl.deE> in 2000. =head1 LICENCE This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. texi2html-1.82/check_texinfo.pl.in0000754000175000017500000000426111264347127021017 0ustar flichtenheldflichtenheld#! @PERL@ #+############################################################################## # # check_texinfo.pl: Extract texinfo commands from files # # Copyright (C) 2003, 2005 Patrice Dumas # & Derek Price # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 USA # #-############################################################################## # This requires perl version 5 or higher require 5.0; use strict; use Getopt::Long; my $verbose; if (!GetOptions ("verbose" => \$verbose)) { die "usage: $0 [-v] file...\n"; } die "Need file to check\n" unless @ARGV > 0; my (%seen, %context); while (<>) { if (/\@(\*|\.|\:|\@|\{|\})/) { $seen{$&}++; $context{$&} .= "> $_" if $verbose; $_ = "$`XX$'"; redo; } if (/\@(\w+)/) { my ($before, $match, $after); ($before, $match, $after) = ($`, $&, $'); if ($before =~ /\b[-\w]+$/ && $after =~ /^[-\w.]*\b/) { # e-mail address $seen{'e-mail address'}++; $context{'e-mail address'} .= "> $_" if $verbose; } else { $seen{$match}++; $context{$match} .= "> $_" if $verbose; } $match =~ s/^\@/X/; $_ = "$before$match$after"; redo; } } foreach (sort(keys(%seen))) { if ($verbose) { print "$_\n"; print $context{$_}; } else { print "$_ ($seen{$_})\n"; } } texi2html-1.82/images/0000755000175000017500000000000011264347127016504 5ustar flichtenheldflichtenheldtexi2html-1.82/images/blue_help.png0000644000175000017500000000040511264347127021150 0ustar flichtenheldflichtenheldPNG  IHDRe^]PLTE|4 pHYs  tIME*57IDATuA Ea{LLpɘBz#V@\O#6ED Ϛ49H& r܁bDfÞ=72"zsyIMĕ>"B{W[cR+(eIENDB`texi2html-1.82/images/a_tableofcon.png0000644000175000017500000000036111264347127021626 0ustar flichtenheldflichtenheldPNG  IHDRC PLTE{{{6 pHYs  tIME-9FxIDATcp0p  ^-`aê P^ZH;^-V2\ eêU+V-`hbp Gf%0R` ( Oi\*a`ivIBIENDB`texi2html-1.82/images/blue_top.png0000644000175000017500000000041511264347127021023 0ustar flichtenheldflichtenheldPNG  IHDRe^]PLTE|4 pHYs  tIME'7IDATUMA 3YIo>a?k%9T KJ0v@-(KUyhS[tX+ش98-q} 7ґ %\Qm˫Pa`ܧ+BHW\ x*M-n5}IENDB`texi2html-1.82/images/a_end_na.png0000644000175000017500000000034511264347127020740 0ustar flichtenheldflichtenheldPNG  IHDRC PLTE{{{޶ pHYs  tIME2zoIDAT] 0 AFP-Td! 5KB@.M!q<Bg >mqC3^9&wW 0F2 I6 j],WVWS-t5uZJIENDB`texi2html-1.82/images/xy_up.png0000644000175000017500000000034411264347127020357 0ustar flichtenheldflichtenheldPNG  IHDR,P PLTE/ {tRNS@fbKGDH pHYs  tIME;sDQIDATc` p XD ژ?`` `̂PoVA34 kIENDB`texi2html-1.82/images/a_begin_na.png0000644000175000017500000000032111264347127021250 0ustar flichtenheldflichtenheldPNG  IHDRC PLTE{{{޶ pHYs  tIME49[IDAT] 04 @'#P2)ƕy@`#`V}~PEsxap<" '^ŧR’Ԓ8~8B`,IENDB`texi2html-1.82/images/a_tableofcon_na.png0000644000175000017500000000040011264347127022276 0ustar flichtenheldflichtenheldPNG  IHDRC PLTE{{{޶ pHYs  tIME-+~y7QIDAT=0C_Q`1FU  jN eH\,|D^ˆ9ߤ/5<q4Zɟt@s8 5Nfq50[USlJ¾Je  .VIENDB`texi2html-1.82/images/GPL0000644000175000017500000004313111264347127017053 0ustar flichtenheldflichtenheld GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. texi2html-1.82/images/bg.jpg0000644000175000017500000000501411264347127017576 0ustar flichtenheldflichtenheldJFIFHHPhotoshop 3.08BIMxHH(FG(HH(d'`8BIMHH8BIM8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM8BIM8BIM@@8BIM JFIFHH'File written by Adobe Photoshop 4.0Adobed            "?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?C6UI6$?%__*%I)%I)%I)%I)%I)%I)8BIM'File written by Adobe Photoshop 4.0Adobed            s!1AQa"q2B#R3b$r%C4Scs5D'6Tdt& EFVU(eufv7GWgw8HXhx)9IYiy*:JZjzm!1AQa"q2#BRbr3$4CS%cs5DT &6E'dtU7()󄔤euFVfvGWgw8HXhx9IYiy*:JZjz ?4ӼQx?NUKv/? ? ]qWb]v*UثWb]v*U +Wb]v*UثWb]v*UثWb]v*UثWb]v*UثWb]v*UثWb]v*UثWb]v*UثWb]v*UثWb]v*UثWb]v*UثWb]v*UثWb]v*UثWb]v*UثWb]v*UثWb]v*UثWb]v*UثWb]v*UثWb_4ӼQx?NUKv/? ? ]qWb]v*UثWb]v*U +Wb]v*UثWb]v*UثWb]v*UثWb]v*UثWb]v*UثWb]v*UثWb]v*UثWb]v*UثWb]v*UثWb]v*UثWb]v*UثWb]v*UثWb]v*UثWb]v*UثWb]v*UثWb]v*UثWb]v*UثWb_texi2html-1.82/images/xy_previoussection.png0000644000175000017500000000041611264347127023174 0ustar flichtenheldflichtenheldPNG  IHDR,P PLTERXtRNS@fbKGDH pHYs  tIME 0A{IDATc` ` 00 0@، `Ql@BH0tA`\:@BDL#`r D00\L`zCh*ʠԠ4 h1+DIENDB`texi2html-1.82/images/xy_up_gr.png0000644000175000017500000000034011264347127021043 0ustar flichtenheldflichtenheldPNG  IHDR,P PLTE tRNS@fbKGDH pHYs  tIME,6PIDATc`L p XD ژV-`` `̂P+@VVA3YIENDB`texi2html-1.82/images/bg_right.png0000644000175000017500000000042711264347127021002 0ustar flichtenheldflichtenheldPNG  IHDRBePLTE@? pHYs  tIME,%О|IDATxձ !+ FϾ{_mn;N;]:FMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM]4VڔVڔVZiSZiSZiMiMi66VڔVڔVZiSZiSZʃ1IENDB`texi2html-1.82/images/a_help.png0000644000175000017500000000034611264347127020445 0ustar flichtenheldflichtenheldPNG  IHDRC PLTE{{{6 pHYs  tIME2&mIDAT] 0 E?;ݧxO!I\'(DL2yI$(7ֈ9βd;szR26h;y"wyR UBD[pIENDB`texi2html-1.82/images/a_searchdoc_na.png0000644000175000017500000000040511264347127022122 0ustar flichtenheldflichtenheldPNG  IHDRC PLTE{{{޶ pHYs  tIME.+UTdIDATE˱ @ߐ*}S,,p*B#JyRpSQ+f@LN|˓f Ѐat>ǜI: mi·kK][֌N#(bbSL Э 32 7)IENDB`texi2html-1.82/images/a_top.png0000644000175000017500000000034111264347127020312 0ustar flichtenheldflichtenheldPNG  IHDRC PLTE{{{6 pHYs  tIME-/7khIDATm= _Gq(a$آ& 'G%>Y&̽ޜCkԕpP򝩜Nlvhz ـ I/Zn>IENDB`texi2html-1.82/images/xy_previoussection_gr.png0000644000175000017500000000040411264347127023661 0ustar flichtenheldflichtenheldPNG  IHDR,P PLTE+"tRNS@fbKGDH pHYs  tIME tIDAT}10 E)L ,Ā`@zpJ/=' Xzl}J* 0pSq 'C#nd)k۝;n?Vs{c5ndprPAIENDB`texi2html-1.82/images/a_search.png0000644000175000017500000000037111264347127020760 0ustar flichtenheldflichtenheldPNG  IHDRC PLTE{{{6 pHYs  tIME.sT>IDATU1 0 E!G<}2fL"ޱd Bh%@|Y3#-JC&=c_-o8=dR(_ "q9P<?8UwSE NNP}IENDB`texi2html-1.82/images/a_rightdouble.png0000644000175000017500000000035711264347127022027 0ustar flichtenheldflichtenheldPNG  IHDRC PLTE{{{6 pHYs  tIME0ZvIDAT] 0  M xIENDB`texi2html-1.82/images/a_index_na.png0000644000175000017500000000037511264347127021304 0ustar flichtenheldflichtenheldPNG  IHDRC PLTE{{{޶ pHYs  tIME1'&'IDAT=A 0E_J(.bq'=ⲅ,BN4Ugy vr1:'y } L1VgX"[$9'D3q5>5sT mZh?9dCXc[ǨVmz j^:YL=IENDB`texi2html-1.82/images/a_right_na.png0000644000175000017500000000033711264347127021310 0ustar flichtenheldflichtenheldPNG  IHDRC PLTE{{{޶ pHYs  tIME/KiIDATe EQ8#XEF@nC6-9 ɽp bgDܡ@RwSW2%wPJraFaNӍX2eA \o^}0,|5IENDB`texi2html-1.82/images/a_searchdoc.png0000644000175000017500000000043411264347127021446 0ustar flichtenheldflichtenheldPNG  IHDRC PLTE{{{6 pHYs  tIME.:?D`IDAT%! Phrh\Q0@bZ _0Df^\ca&ϻy+* T鐥}r+7_]t5¹ cbL")%~X۲$XyQj&;r'-ABL5 -CWRYM@IENDB`texi2html-1.82/images/spacer3.png0000644000175000017500000000021011264347127020543 0ustar flichtenheldflichtenheldPNG  IHDR0PLTEtRNS@f pHYs  tIME$& IDATc`/IENDB`texi2html-1.82/images/xy_nextsection.png0000644000175000017500000000041611264347127022276 0ustar flichtenheldflichtenheldPNG  IHDR,P PLTEyʰtRNS@fbKGDH pHYs  tIME"16z{IDATc````a @A," D@p `r0P BD\@DIh P` V1AmL P J'@oPo6@,y1>IENDB`texi2html-1.82/images/a_right.png0000644000175000017500000000033311264347127020626 0ustar flichtenheldflichtenheldPNG  IHDRC PLTE{{{6 pHYs  tIME/bIDATe E<2 :izP&X&/@@eY,K^Kf6A[U da7,Eԅ!bWK^>yZ\rIENDB`texi2html-1.82/images/a_help_na.png0000644000175000017500000000036611264347127021125 0ustar flichtenheldflichtenheldPNG  IHDRC PLTE{{{6 pHYs  tIME2}IDATM10 E!qz,)8M7V$ꉹTӳ%(xჂ\F/Q.f1739q۔s~6걊KcVi,gb\0IENDB`texi2html-1.82/images/contents_motif.png0000644000175000017500000000050011264347127022240 0ustar flichtenheldflichtenheldPNG  IHDRAH PLTEooo[p4&tRNS@f pHYs  tIME&83DIDATӍ= 0 jUDbȚ/3tyz S^еIC3 'Y†{`r8ECGjwC1'qת:LoE1dK|DD[))dO2lo;seWW ]b(2Ox`bU !!!9 mNiԟHNWS RIENDB`texi2html-1.82/images/xy_contents.png0000644000175000017500000000036211264347127021570 0ustar flichtenheldflichtenheldPNG  IHDR,P PLTEb mXtRNS@f pHYs  tIME$lIDATc`hb& Tr@aתU Xo```54Y*U+LP7AL$?0  IENDB`texi2html-1.82/images/blue_uup.png0000644000175000017500000000042611264347127021034 0ustar flichtenheldflichtenheldPNG  IHDRe^]PLTEAw pHYs  tIME'ϒ tEXtCommentMade with GIMP~exIDATeN >0oZ+NMlR)bUBԀzp_"7J/Q9NQ;I-L0kۂSH;IA5-g]-!(ϖ@)stE)-oF0IENDB`texi2html-1.82/images/bg_left.png0000644000175000017500000000024411264347127020614 0ustar flichtenheldflichtenheldPNG  IHDRU@aw PLTE˰2 pHYs  tIME,+IDAT8ce>I38({@H|4f[IENDB`texi2html-1.82/images/index_motif.png0000644000175000017500000000044011264347127021515 0ustar flichtenheldflichtenheldPNG  IHDR+i PLTEooo[p4&tRNS@f pHYs  tIME&&<'IDATu 0QqR.rGEcK iRHA1atuyIENDB`texi2html-1.82/images/a_search_na.png0000644000175000017500000000037711264347127021444 0ustar flichtenheldflichtenheldPNG  IHDRC PLTE{{{޶ pHYs  tIME.iWCIDATU1 A EmR6"2bi1-攛 ajLFa0 |֒G΀e<|-#1A(VurUFCsF -V$UIENDB`texi2html-1.82/images/xy_next_gr.png0000644000175000017500000000037011264347127021400 0ustar flichtenheldflichtenheldPNG  IHDR,P PLTExׇtRNS@fbKGDH pHYs  tIME"-hIDATc` ̀! " @D p.ЀҪPj3JڪP= eЂGq(=!\IENDB`texi2html-1.82/images/a_document_na.png0000644000175000017500000000036211264347127022007 0ustar flichtenheldflichtenheldPNG  IHDRC PLTE{{{޶ pHYs  tIME3=|IDATM P EnR:+[7N~En+x VxdpBJ. Please register yourself as a SINGULAR user by sending email to with the subject line `register'. If you use Singular or parts thereof in a project and/or publish results that were partly obtained using SINGULAR, we ask you to cite SINGULAR and inform us thereof - see `http://www.singular.uni-kl.de/how_to_cite.html', for information on how to cite Singular. Availability ============ The latest information about SINGULAR is always available from `http://www.singular.uni-kl.de'. Acknowledgements ================ The development of SINGULAR is directed and coordinated by Gert-Martin Greuel, Gerhard Pfister, and Hans Scho"nemann. Currently, the SINGULAR team has the following members: Olaf Bachmann, Anne Fru"bis-Kru"ger, Thomas Keilen, Kai Kru"ger, Christoph Lossen, Victor Levandovskyy, Wilfred Pohl, Mathias Schulze, Eric Westenberger, and Tim Wichmann. Past members of the SINGULAR team are: Hubert Grassmann, Wolfgang Neumann, Jens Schmidt, Ru"diger Stobbe. Further contributions to SINGULAR were made by: Thomas Bayer, Isabelle Bermejo, Stephan Endrass, Jose Ignacio Farran Martin, Wolfram Decker, Philippe Gimenez, Christian Gorzel, Agnes Heydtmann, Dietmar Hillebrand, Tobias Hirsch, Martin Lamm, Bernd Martin, Michael Messollen, Thomas Nu"ssler, Moritz Wenk. We should like to acknowledge the financial support given by the Volkswagen-Stiftung, the Deutsche Forschungsgemeinschaft and the Stiftung fu"r Innovation des Landes Rheinland-Pfalz to the SINGULAR project. texi2html-1.82/images/blue_down.png0000644000175000017500000000034711264347127021174 0ustar flichtenheldflichtenheldPNG  IHDRe^]PLTEAw pHYs  tIME+{kIDATm ߺ8e U*wEd#3rfh]̫HE XXF-Vo? uN D͒, N 4ߖ7OR8SsIENDB`texi2html-1.82/images/README0000644000175000017500000000106511264347127017366 0ustar flichtenheldflichtenheldThese images are licenced under a double CC-SA (Creative Commons Attribution ShareAlike) and GPL licence (see file COPYING in that directory). These licences are such that when combined with other works the whole work should be under the GPL or CC-SA. So you cannot combine the images with other materials, for example a manual text if the manual text is under a licence that doesn't allows to be relicenced under the conditions of the GPL or the CC-SA. For example a manual licenced under the GFDL or the artlibre licence cannot be combined with the image. texi2html-1.82/images/a_up_na.png0000644000175000017500000000034111264347127020612 0ustar flichtenheldflichtenheldPNG  IHDRC PLTE{{{6 pHYs  tIME,&zhIDAT} 0 H!2M4T)"y)" D~%QEI֠; vQ0 f =eުe2jƿ bKIENDB`texi2html-1.82/images/xy_nextsection_gr.png0000644000175000017500000000040611264347127022765 0ustar flichtenheldflichtenheldPNG  IHDR,P PLTEntRNS@fbKGDH pHYs  tIME!;{h9vIDATmA@0E+qp K+ #XZv%uy/N@ Ңo2 wG o%ܗ4r7 j%X Kx˨Շxo{y~ g> GIENDB`texi2html-1.82/images/previous_motif.png0000644000175000017500000000050011264347127022257 0ustar flichtenheldflichtenheldPNG  IHDR?GT PLTEooo[p4&tRNS@f pHYs  tIME%)XuIDATӍ= 0 Akdx 55 =Y) Y:0!] j }Y#F xQRzb8/Rn^4͐qH=狪S6qqH$bLسf5mPz|d0b9t@rfVO EcpIENDB`texi2html-1.82/images/COPYING.Attribution-ShareAlike0000644000175000017500000003274511264347127024063 0ustar flichtenheldflichtenheld SINGULAR version 3-0-0 University of Kaiserslautern Department of Mathematics and Centre for Computer Algebra Authors: G.-M. Greuel, G. Pfister, H. Schoenemann Copyright (C) 1986-2001 These images are licensed under the Creative Commons Attribution-ShareAlike License, the text of which follows. The original source of this license is at http://creativecommons.org/licenses/by-sa/1.0/ or you may obtain a copy by sending a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. Attribution-ShareAlike 1.0 CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS DRAFT LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE. License THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE IS PROHIBITED. BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. 1. Definitions 1. "Collective Work" means a work, such as a periodical issue, anthology or encyclopedia, in which the Work in its entirety in unmodified form, along with a number of other contributions, constituting separate and independent works in themselves, are assembled into a collective whole. A work that constitutes a Collective Work will not be considered a Derivative Work (as defined below) for the purposes of this License. 2. "Derivative Work" means a work based upon the Work or upon the Work and other pre-existing works, such as a translation, musical arrangement, dramatization, fictionalization, motion picture version, sound recording, art reproduction, abridgment, condensation, or any other form in which the Work may be recast, transformed, or adapted, except that a work that constitutes a Collective Work will not be considered a Derivative Work for the purpose of this License. 3. "Licensor" means the individual or entity that offers the Work under the terms of this License. 4. "Original Author" means the individual or entity who created the Work. 5. "Work" means the copyrightable work of authorship offered under the terms of this License. 6. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. 2. Fair Use Rights. Nothing in this license is intended to reduce, limit, or restrict any rights arising from fair use, first sale or other limitations on the exclusive rights of the copyright owner under copyright law or other applicable laws. 3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: 1. to reproduce the Work, to incorporate the Work into one or more Collective Works, and to reproduce the Work as incorporated in the Collective Works; 2. to create and reproduce Derivative Works; 3. to distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means of a digital audio transmission the Work including as incorporated in Collective Works; 4. to distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means of a digital audio transmission Derivative Works; The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. All rights not expressly granted by Licensor are hereby reserved. 4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: 1. You may distribute, publicly display, publicly perform, or publicly digitally perform the Work only under the terms of this License, and You must include a copy of, or the Uniform Resource Identifier for, this License with every copy or phonorecord of the Work You distribute, publicly display, publicly perform, or publicly digitally perform. You may not offer or impose any terms on the Work that alter or restrict the terms of this License or the recipients' exercise of the rights granted hereunder. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties. You may not distribute, publicly display, publicly perform, or publicly digitally perform the Work with any technological measures that control access or use of the Work in a manner inconsistent with the terms of this License Agreement. The above applies to the Work as incorporated in a Collective Work, but this does not require the Collective Work apart from the Work itself to be made subject to the terms of this License. If You create a Collective Work, upon notice from any Licensor You must, to the extent practicable, remove from the Collective Work any reference to such Licensor or the Original Author, as requested. If You create a Derivative Work, upon notice from any Licensor You must, to the extent practicable, remove from the Derivative Work any reference to such Licensor or the Original Author, as requested. 2. You may distribute, publicly display, publicly perform, or publicly digitally perform a Derivative Work only under the terms of this License, and You must include a copy of, or the Uniform Resource Identifier for, this License with every copy or phonorecord of each Derivative Work You distribute, publicly display, publicly perform, or publicly digitally perform. You may not offer or impose any terms on the Derivative Works that alter or restrict the terms of this License or the recipients' exercise of the rights granted hereunder, and You must keep intact all notices that refer to this License and to the disclaimer of warranties. You may not distribute, publicly display, publicly perform, or publicly digitally perform the Derivative Work with any technological measures that control access or use of the Work in a manner inconsistent with the terms of this License Agreement. The above applies to the Derivative Work as incorporated in a Collective Work, but this does not require the Collective Work apart from the Derivative Work itself to be made subject to the terms of this License. 3. If you distribute, publicly display, publicly perform, or publicly digitally perform the Work or any Derivative Works or Collective Works, You must keep intact all copyright notices for the Work and give the Original Author credit reasonable to the medium or means You are utilizing by conveying the name (or pseudonym if applicable) of the Original Author if supplied; the title of the Work if supplied; in the case of a Derivative Work, a credit identifying the use of the Work in the Derivative Work (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). Such credit may be implemented in any reasonable manner; provided, however, that in the case of a Derivative Work or Collective Work, at a minimum such credit will appear where any other comparable authorship credit appears and in a manner at least as prominent as such other comparable authorship credit. 5. Representations, Warranties and Disclaimer 1. By offering the Work for public release under this License, Licensor represents and warrants that, to the best of Licensor's knowledge after reasonable inquiry: 1. Licensor has secured all rights in the Work necessary to grant the license rights hereunder and to permit the lawful exercise of the rights granted hereunder without You having any obligation to pay any royalties, compulsory license fees, residuals or any other payments; 2. The Work does not infringe the copyright, trademark, publicity rights, common law rights or any other right of any third party or constitute defamation, invasion of privacy or other tortious injury to any third party. 2. EXCEPT AS EXPRESSLY STATED IN THIS LICENSE OR OTHERWISE AGREED IN WRITING OR REQUIRED BY APPLICABLE LAW, THE WORK IS LICENSED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES REGARDING THE CONTENTS OR ACCURACY OF THE WORK. 6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, AND EXCEPT FOR DAMAGES ARISING FROM LIABILITY TO A THIRD PARTY RESULTING FROM BREACH OF THE WARRANTIES IN SECTION 5, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 7. Termination 1. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Derivative Works or Collective Works from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. 2. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. 8. Miscellaneous 1. Each time You distribute or publicly digitally perform the Work or a Collective Work, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. 2. Each time You distribute or publicly digitally perform a Derivative Work, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. 3. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. 4. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. 5. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. Creative Commons is not a party to this License, and makes no warranty whatsoever in connection with the Work. Creative Commons will not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. Notwithstanding the foregoing two (2) sentences, if Creative Commons has expressly identified itself as the Licensor hereunder, it shall have all rights and obligations of Licensor. Except for the limited purpose of indicating to the public that the Work is licensed under the CCPL, neither party will use the trademark "Creative Commons" or any related trademark or logo of Creative Commons without the prior written consent of Creative Commons. Any permitted use will be in compliance with Creative Commons' then-current trademark usage guidelines, as may be published on its website or otherwise made available upon request from time to time. Creative Commons may be contacted at http://creativecommons.org/. texi2html-1.82/images/a_index.png0000644000175000017500000000036411264347127020624 0ustar flichtenheldflichtenheldPNG  IHDRC PLTE{{{6 pHYs  tIME14g{IDATM 0 DT9G0R'ZUeAp!s,\ 2?0+H2Q;Q~y['nI o"k>tZc:SOēa?SeIENDB`texi2html-1.82/images/a_rightdouble_na.png0000644000175000017500000000035411264347127022502 0ustar flichtenheldflichtenheldPNG  IHDRC PLTE{{{޶ pHYs  tIME/.<%\vIDAT] 0 AԻBE !^shzAA|8Sb<@JB߀!o@ -zA šBSpSgbIENDB`texi2html-1.82/images/a_leftdouble.png0000644000175000017500000000035111264347127021636 0ustar flichtenheldflichtenheldPNG  IHDRC PLTE{{{6 pHYs  tIME1apIDATe 0 Dy>RPO쀨 Ri;22W,ldv/o̼ƈR2v! U{15 &$#T SqIENDB`texi2html-1.82/images/blue_dir.png0000644000175000017500000000052511264347127021001 0ustar flichtenheldflichtenheldPNG  IHDRe^]PLTE뾾/OOpT, pHYs  tIME++(#IDATM10 k3wGV\Tc4^ ow_{@BT '0@)pq/>o{-R " η>^Zc^^1-X]rHKe]JmD? `cJH0vy'ˈ)s~B E :7ui4t/{%Nm |>6@Ry+.,~ȗur.ӽT8=elbM;qsdo(r6>nSVVLIENDB`texi2html-1.82/images/Mybg.png0000644000175000017500000000062511264347127020113 0ustar flichtenheldflichtenheldPNG  IHDRADpPLTE𸸸;F pHYs  tIME#8dD[ IDATx1 @g6DMNv^ăK2I9chc*{ԻZ5s]xgygm<+u>[l[lVg}MYd",YdEYd᧬t/CYR,>,e)KYCYR,>,e)KYCYR,>U@֗: +.)gr```X,X,X,bbb   XXXłł,,,``` iPXIENDB`texi2html-1.82/images/next_motif_gr.png0000644000175000017500000000043711264347127022062 0ustar flichtenheldflichtenheldPNG  IHDR%wu PLTEoooo\tRNS@f pHYs  tIME&F6'LIDATm 1 E?QBCxۃr) n3!m #KFY3qv&q-HIU3"8NP5QJy۔fsܪ7`"ƾ9ͱȘv8 b@2]}ohlg{H?zt6Ξ?IENDB`texi2html-1.82/images/a_page_na.png0000644000175000017500000000036311264347127021106 0ustar flichtenheldflichtenheldPNG  IHDRC PLTE{{{޶ pHYs  tIME0 Sް}IDATu10 ERn= BeK3]z.H K'(D7l'x3WZyl,*̫w,b@ [[|p HѢTgh T*=/v}IENDB`texi2html-1.82/images/a_page.png0000644000175000017500000000035411264347127020430 0ustar flichtenheldflichtenheldPNG  IHDRC PLTE{{{6 pHYs  tIME0NsIDATu @ EPH Rd+Ja)QJLJyܝLJ<AM"dz*HoQ,JIENDB`texi2html-1.82/images/xy_previous_gr.png0000644000175000017500000000036511264347127022302 0ustar flichtenheldflichtenheldPNG  IHDR,P PLTE+"tRNS@fbKGDH pHYs  tIME! XeIDATu1 0 }EST־R;n`KQ&)$, tx$Qh? QXb=ǟݼlv-0w{z7rIENDB`texi2html-1.82/images/a_leftdouble_na.png0000644000175000017500000000034411264347127022316 0ustar flichtenheldflichtenheldPNG  IHDRC PLTE{{{޶ pHYs  tIME1 Mn+nIDATe0 ѲS!oAT Ho!>NS/M8pW9W8w~9_2,ghzNu%DJ?v-IENDB`texi2html-1.82/images/blue_up.png0000644000175000017500000000035311264347127020646 0ustar flichtenheldflichtenheldPNG  IHDRe^]PLTEAw pHYs  tIME'%c.oIDATӅ 0M@d_ ?S5X(y'4AT'Hӝ?l#ffm[h^V;@ i' PȮCOzK8 blIENDB`texi2html-1.82/images/blue_next.png0000644000175000017500000000033511264347127021200 0ustar flichtenheldflichtenheldPNG  IHDRe^]PLTEAw pHYs  tIME*%րaIDATu S] 38A% 35C=OH:#_v8AU䖲Q r@< skHTN'xoh03cB+<(U:_\iNjIENDB`texi2html-1.82/images/blue_grab.png0000644000175000017500000000042411264347127021134 0ustar flichtenheldflichtenheldPNG  IHDRe^]PLTEAw pHYs  tIME+ dJIDAT]N S@JfT;(8lG/1.5h-z*8j 8Cd9 Gr$0LW , # Derek Price , # Adrian Aichner , # & others. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301 USA # #-############################################################################## require 5.0; use strict; package Texi2HTML::LaTeX2HTML; use Cwd; # latex2html conversions consist of three stages: # 1) ToLatex: Put "latex" code into a latex file # 2) ToHtml: Use latex2html to generate corresponding html code and images # 3) FromHtml: Extract generated code and images from latex2html run # # init l2h defaults for files and names # global variable used for caching use vars qw( %l2h_cache ); my ($l2h_name, $l2h_latex_file, $l2h_cache_file, $l2h_html_file, $l2h_prefix); # holds the status of latex2html operations. If 0 it means that there was # an error my $status = 0; my $debug; my $verbose; my $docu_rdir; my $docu_name; my $docu_ext; my $ERROR = '***'; # init_from_html my $extract_error_count; my $invalid_counter_count; # change_image_file_names my %l2h_img; # associate src file to destination file # such that files are not copied twice my $image_count; # do_tex my $html_output_count = 0; # html text outputed in html result file ########################## # # First stage: Generation of Latex file # Initialize with: init # Add content with: to_latex ($text) --> HTML placeholder comment # Finish with: finish_to_latex # my $l2h_latex_preamble = <$l2h_latex_file")) { warn "$ERROR l2h: Can't open latex file '$l2h_latex_file' for writing: $!\n"; $status = 0; return; } warn "# l2h: use ${l2h_latex_file} as latex file\n" if ($verbose); print L2H_LATEX $l2h_latex_preamble; } # open the database that holds cached text init_cache(); $status = 1; } # print text (2nd arg) into latex file (if not already there nor in cache) # which can be later on replaced by the latex2html generated text. # sub to_latex($$$) { my $command = shift; my $text = shift; my $counter = shift; if ($command eq 'tex') { $text .= ' '; } elsif ($command eq 'math') { $text = "\$".$text."\$"; } $to_latex_count++; $text =~ s/(\s*)$//; # try whether we have text already on things to do my $count = $l2h_to_latex{$text}; unless ($count) { $latex_count++; $count = $latex_count; # try whether we can get it from cache my $cached_text = from_cache($text); if (defined($cached_text)) { $cached_count++; # put the cached result in the html result array $l2h_from_html[$count] = $cached_text; } else { $latex_converted_count++; unless ($Texi2HTML::Config::L2H_SKIP) { print L2H_LATEX "\\begin{rawhtml}\n"; print L2H_LATEX "\n"; print L2H_LATEX "\\end{rawhtml}\n"; print L2H_LATEX "$text\n"; print L2H_LATEX "\\begin{rawhtml}\n"; print L2H_LATEX "\n"; print L2H_LATEX "\\end{rawhtml}\n"; } } $l2h_to_latex[$count] = $text; $l2h_to_latex{$text} = $count; } $global_count{"${command}_$counter"} = $count; return 1; } # print closing into latex file and close it sub finish_to_latex() { my $reused = $to_latex_count - $latex_converted_count - $cached_count; unless ($Texi2HTML::Config::L2H_SKIP) { print L2H_LATEX $l2h_latex_closing; close (L2H_LATEX); } warn "# l2h: finished to latex ($cached_count cached, $reused reused, $latex_converted_count to process)\n" if ($verbose); unless ($latex_count) { # no @tex nor @math finish(); return 0; } return 1; } ################################### # Second stage: Use latex2html to generate corresponding html code and images # # to_html([$l2h_latex_file, [$l2h_html_dir]]): # Call latex2html on $l2h_latex_file # Put images (prefixed with $l2h_name."_") and html file(s) in $l2h_html_dir # Return 1, on success # 0, otherwise # sub to_html() { my ($call, $dotbug); # when there are no tex constructs to convert (happens in case everything # comes from the cache), there is no latex2html run if ($Texi2HTML::Config::L2H_SKIP or ($latex_converted_count == 0)) { warn "# l2h: skipping latex2html run\n" if ($verbose); return 1; } # Check for dot in directory where dvips will work if ($Texi2HTML::Config::L2H_TMP) { if ($Texi2HTML::Config::L2H_TMP =~ /\./) { warn "$ERROR Warning l2h: l2h_tmp dir contains a dot. Use /tmp, instead\n"; $dotbug = 1; } } else { if (cwd() =~ /\./) { warn "$ERROR Warning l2h: current dir contains a dot. Use /tmp as l2h_tmp dir \n"; $dotbug = 1; } } # fix it, if necessary and hope that it works $Texi2HTML::Config::L2H_TMP = "/tmp" if ($dotbug); $call = $Texi2HTML::Config::L2H_L2H; # use init file, if specified my $init_file = main::locate_init_file($Texi2HTML::Config::L2H_FILE); $call = $call . " -init_file " . $init_file if ($init_file); # set output dir $call .= (($docu_rdir ne '') ? " -dir $docu_rdir" : " -no_subdir"); # use l2h_tmp, if specified $call .= " -tmp $Texi2HTML::Config::L2H_TMP" if (defined($Texi2HTML::Config::L2H_TMP) and $Texi2HTML::Config::L2H_TMP ne ''); # use a given html version if specified $call .= " -html_version $Texi2HTML::Config::L2H_HTML_VERSION" if (defined($Texi2HTML::Config::L2H_HTML_VERSION) and $Texi2HTML::Config::L2H_HTML_VERSION ne ''); # options we want to be sure of $call .= " -address 0 -info 0 -split 0 -no_navigation -no_auto_link"; $call .= " -prefix $l2h_prefix $l2h_latex_file"; warn "# l2h: executing '$call'\n" if ($verbose); if (system($call)) { warn "$ERROR l2h: '${call}' did not succeed\n"; return 0; } else { warn "# l2h: latex2html finished successfully\n" if ($verbose); return 1; } } ########################## # Third stage: Extract generated contents from latex2html run # Initialize with: init_from_html # open $l2h_html_file for reading # reads in contents into array indexed by numbers # return 1, on success -- 0, otherwise # Finish with: finish # closes $l2h_html_dir/$l2h_name.".$docu_ext" # the images generated by latex2html have names like ${docu_name}_l2h_img?.png # they are copied to ${docu_name}_?.png, and html is changed accordingly. # %l2h_img; # associate src file to destination file # such that files are not copied twice sub change_image_file_names($) { my $content = shift; my @images = ($content =~ /SRC="(.*?)"/g); my ($src, $dest); for $src (@images) { $dest = $l2h_img{$src}; unless ($dest) { my $ext = ''; if ($src =~ /.*\.(.*)$/ && $1 ne $docu_ext) { $ext = ".$1"; } else { # FIXME what is that check about? warn "$ERROR: L2h image $src has invalid extension\n"; next; } while (-e "$docu_rdir${docu_name}_${image_count}$ext") { $image_count++; } $dest = "${docu_name}_${image_count}$ext"; # FIXME this isn't portable. + error condition not checked. system("cp -f $docu_rdir$src $docu_rdir$dest"); $l2h_img{$src} = $dest; # FIXME error condition not checked unlink "$docu_rdir$src" unless ($debug); } $content =~ s/SRC="$src"/SRC="$dest"/g; } return $content; } sub init_from_html() { # when there are no tex constructs to convert (happens in case everything # comes from the cache), the html file that was generated by previous # latex2html runs isn't reused. if ($latex_converted_count == 0) { return 1; } if (! open(L2H_HTML, "<$l2h_html_file")) { warn "$ERROR l2h: Can't open $l2h_html_file for reading\n"; return 0; } warn "# l2h: use $l2h_html_file as html file\n" if ($verbose); my $html_converted_count = 0; # number of html resulting texts # retrieved in the file my ($count, $h_line); while ($h_line = ) { if ($h_line =~ /^/) { $count = $1; my $h_content = ''; my $h_end_found = 0; while ($h_line = ) { if ($h_line =~ /^/) { $h_end_found = 1; chomp $h_content; chomp $h_content; $html_converted_count++; # transform image file names and copy image files $h_content = change_image_file_names($h_content); # store result in the html result array $l2h_from_html[$count] = $h_content; # also add the result in cache hash $l2h_cache{$l2h_to_latex[$count]} = $h_content; last; } $h_content = $h_content.$h_line; } unless ($h_end_found) { # couldn't found the closing comment. Certainly a bug. warn "$ERROR l2h(BUG): l2h_end $l2h_name $count not found\n"; close(L2H_HTML); return 0; } } } # Not the same number of converted elements and retrieved elements if ($latex_converted_count != $html_converted_count) { warn "$ERROR l2h(BUG): waiting for $latex_converted_count elements found $html_converted_count\n"; } warn "# l2h: Got $html_converted_count of $latex_count html contents\n" if ($verbose); close(L2H_HTML); return 1; } # $html_output_count = 0; # html text outputed in html result file # called each time a construct handled by latex2html is encountered, should # output the corresponding html sub do_tex($$$$) { my $style = shift; my $counter = shift; my $state = shift; my $count = $global_count{"${style}_$counter"}; ################################## begin debug section (incorrect counts) if (!defined($count)) { # counter is undefined $invalid_counter_count++; warn "$ERROR l2h(BUG): undefined count for ${style}_$counter\n"; return ("") if ($debug); return ''; } elsif(($count <= 0) or ($count > $latex_count)) { # counter out of range $invalid_counter_count++; warn "$ERROR l2h(BUG): Request of $count content which is out of valide range [0,$latex_count)\n"; return ("") if ($debug); return ''; } ################################## end debug section (incorrect counts) # this seems to be a valid counter my $result = ''; $result = "" if ($debug); if (defined($l2h_from_html[$count])) { $html_output_count++; # maybe we could also have something if simple_format # with Texi2HTML::Config::protect_text, once simple_format # may happen for anything else than lines if ($state->{'remove_texi'}) {# don't protect anything $result .= $l2h_to_latex[$count]; } else { $result .= $l2h_from_html[$count]; } } else { # if the result is not in @l2h_from_html, there is an error somewhere. $extract_error_count++; warn "$ERROR l2h(BUG): can't extract content $count from html\n"; # try simple (ordinary) substitution (without l2h) $result .= "" if ($debug); $result .= main::substitute_text({}, undef, $l2h_to_latex[$count]); } $result .= "" if ($debug); return $result; } # store results in the cache and remove temporary files. sub finish() { return unless($status); if ($verbose) { if ($extract_error_count + $invalid_counter_count) { warn "# l2h: finished from html ($extract_error_count extract and $invalid_counter_count invalid counter errors)\n"; } else { warn "# l2h: finished from html (no error)\n"; } if ($html_output_count != $latex_converted_count) { # this may happen if @-commands are collected at some places # but @-command at those places are not expanded later. For # example @math on @multitable lines. warn "# l2h: $html_output_count html outputed for $latex_converted_count converted\n"; } } store_cache(); if ($Texi2HTML::Config::L2H_CLEAN) { local ($_); warn "# l2h: removing temporary files generated by l2h extension\n" if $verbose; while (<"$docu_rdir$l2h_name"*>) { # FIXME error condition not checked unlink $_; } } warn "# l2h: Finished\n" if $verbose; return 1; } # the driver of end of first pass, second pass and beginning of third pass # sub latex2html() { return unless($status); return unless ($status = finish_to_latex()); return unless ($status = to_html()); return unless ($status = init_from_html()); } ############################## # stuff for l2h caching # # I tried doing this with a dbm data base, but it did not store all # keys/values. Hence, I did as latex2html does it sub init_cache { if (-r "$l2h_cache_file") { my $rdo = do "$l2h_cache_file"; warn("$ERROR l2h Error: could not load $docu_rdir$l2h_cache_file: $@\n") unless ($rdo); } } # store all the text obtained through latex2html sub store_cache { return unless $latex_count; my ($key, $value); unless (open(FH, ">$l2h_cache_file")) { warn "$ERROR l2h Error: could not open $docu_rdir$l2h_cache_file for writing: $!\n"; return; } while (($key, $value) = each %l2h_cache) { # escape stuff $key =~ s|/|\\/|g; $key =~ s|\\\\/|\\/|g; # weird, a \ at the end of the key results in an error # maybe this also broke the dbm database stuff $key =~ s|\\$|\\\\|; $value =~ s/\|/\\\|/go; $value =~ s/\\\\\|/\\\|/go; $value =~ s|\\\\|\\\\\\\\|g; print FH "\n\$l2h_cache_key = q/$key/;\n"; print FH "\$l2h_cache{\$l2h_cache_key} = q|$value|;\n"; } print FH "1;"; close (FH); } # return cached html, if it exists for text, and if all pictures # are there, as well sub from_cache($) { my $text = shift; my $cached = $l2h_cache{$text}; if (defined($cached)) { while ($cached =~ m/SRC="(.*?)"/g) { unless (-e "$docu_rdir$1") { return undef; } } return $cached; } return undef; } 1; texi2html-1.82/autogen.sh0000754000175000017500000000053411264347127017241 0ustar flichtenheldflichtenheld#! /bin/sh # Run this to generate all the initial makefiles, etc. test -f Makefile.am || cd "`dirname \"$0\"`" # Create `aclocal.m4'. aclocal # Create `Makefile.in' from `Makefile.am', and symlink `install-sh', # `missing' and `mkinstalldirs' from /usr/share/automake. automake --add-missing # Create `configure' from `configure.in'. autoconf texi2html-1.82/configure.ac0000644000175000017500000000755611264347127017542 0ustar flichtenheldflichtenhelddnl Process this file with autoconf to produce a configure script. AC_PREREQ(2.53) AC_INIT([texi2html], [1.82], [texi2html-bug@nongnu.org]) dnl 1.9 because we need tar-pax, and tar-pax because we have very long dnl filenames for some test files AM_INIT_AUTOMAKE([gnu 1.9 dist-bzip2 dist-zip tar-pax]) dnl Disable Autoconf, Automake, and some other maintainer tools without the dnl --enable-maintainer-mode argument. AM_MAINTAINER_MODE dnl Misc variable settings PACKAGE_DATE=`"$srcdir"/mdate-sh "$srcdir"/configure.ac` AC_SUBST([PACKAGE_DATE]) dnl Checks for programs. AC_ARG_VAR([PERL], [The path to the `perl' executable.]) AC_PATH_PROG([PERL], [perl], [/usr/bin/env perl], [/opt/perl5/bin:"$PATH"]) AC_ARG_WITH([encode], AC_HELP_STRING([--with-encode], [use encode (default: detected)]), [if test $withval = 'no'; then USE_UNICODE=0 else USE_UNICODE=1 fi], [ if $PERL -e "use Encode; use Unicode::Normalize;" > /dev/null 2>&1; then USE_UNICODE=1 else USE_UNICODE=0 fi ]) AC_ARG_WITH([unidecode], AC_HELP_STRING([--with-unidecode], [use Text::Unidecode (default: detected)]), [if test $withval = 'no'; then USE_UNIDECODE=0 else USE_UNIDECODE=1 fi], [ USE_UNIDECODE=0 if test $USE_UNICODE = 1; then if $PERL -e "use Text::Unidecode;" > /dev/null 2>&1; then USE_UNIDECODE=1 fi fi ]) AC_SUBST([USE_UNICODE]) AC_SUBST([USE_UNIDECODE]) t2h_try_translations= AC_ARG_ENABLE([translations], AC_HELP_STRING([--enable-translations], [try to rebuild translation files (default: detected)]), [if test $enableval = 'no'; then t2h_try_translations='no' else t2h_try_translations='yes' fi], [ if $PERL -e "use 5.0; use Data::Dumper;" > /dev/null 2>&1; then t2h_try_translations='yes' else t2h_try_translations='no' fi ]) if test "z$t2h_try_translations" = 'zyes'; then USE_DATA_DUMPER=1 REQUIRE_DATA_DUMPER="use Data::Dumper" else USE_DATA_DUMPER=0 REQUIRE_DATA_DUMPER=1 fi AC_SUBST([USE_DATA_DUMPER]) AC_SUBST([REQUIRE_DATA_DUMPER]) AC_PROG_INSTALL dnl Checks for libraries. dnl Checks for header files. dnl Checks for typedefs, structures, and compiler characteristics. dnl Checks for library functions. # For teTeX and TeX Live. AC_CANONICAL_HOST AC_ARG_ENABLE(multiplatform, [ --enable-multiplatform put executables in bin/PLATFORM]) test "x$enable_multiplatform" = xyes \ && test "x$bindir" = 'x${exec_prefix}/bin' \ && bindir="$bindir/$host" AC_CONFIG_FILES([texi2html_configured.pl:texi2html.pl], [chmod +x texi2html_configured.pl]) AC_CONFIG_FILES([check_texinfo.pl], [chmod +x check_texinfo.pl]) AC_CONFIG_FILES([manage_i18n.pl], [chmod +x manage_i18n.pl]) dnl The bulk config files. AC_CONFIG_FILES([\ Makefile \ Tests/Makefile \ test/Makefile \ test/contents/Makefile \ test/coverage/Makefile \ test/formatting/Makefile \ test/indices/Makefile \ test/invalid/Makefile \ test/misc/Makefile \ test/encodings/Makefile \ test/macros/Makefile \ test/manuals/Makefile \ test/nested_formats/Makefile \ test/sectionning/Makefile \ test/htmlxref/Makefile \ test/htmlxref-only_mono/Makefile \ test/htmlxref-only_split/Makefile \ test/xemacs_manual/Makefile \ test/texi2html_manual/Makefile \ test/tar_manual/Makefile \ test/singular_manual/Makefile \ test/layout/Makefile \ test/many_input_files/Makefile \ doc/Makefile ]) AC_OUTPUT texi2html-1.82/aclocal.m40000644000175000017500000005454711264347127017116 0ustar flichtenheldflichtenheld# generated automatically by aclocal 1.10 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_if(m4_PACKAGE_VERSION, [2.61],, [m4_fatal([this file was generated for autoconf 2.61. You have another version of autoconf. If you want to use that, you should regenerate the build system entirely.], [63])]) # Copyright (C) 2002, 2003, 2005, 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.10' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.10], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AC_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.10])dnl _AM_AUTOCONF_VERSION(m4_PACKAGE_VERSION)]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 8 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 12 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.60])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AM_PROG_INSTALL_SH AM_PROG_INSTALL_STRIP AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) ]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $1 | $1:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 AC_DEFUN([AM_MAINTAINER_MODE], [AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode is disabled by default AC_ARG_ENABLE(maintainer-mode, [ --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer], USE_MAINTAINER_MODE=$enableval, USE_MAINTAINER_MODE=no) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST(MAINT)dnl ] ) AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # ------------------------------ # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputing VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. AM_MISSING_PROG([AMTAR], [tar]) m4_if([$1], [v7], [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR texi2html-1.82/configure0000755000175000017500000031736711264347127017167 0ustar flichtenheldflichtenheld#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.61 for texi2html 1.82. # # Report bugs to . # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) as_nl=' ' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH if test "x$CONFIG_SHELL" = x; then if (eval ":") 2>/dev/null; then as_have_required=yes else as_have_required=no fi if test $as_have_required = yes && (eval ": (as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=\$LINENO as_lineno_2=\$LINENO test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } ") 2> /dev/null; then : else as_candidate_shells= as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. case $as_dir in /*) for as_base in sh bash ksh sh5; do as_candidate_shells="$as_candidate_shells $as_dir/$as_base" done;; esac done IFS=$as_save_IFS for as_shell in $as_candidate_shells $SHELL; do # Try only shells that exist, to save several forks. if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { ("$as_shell") 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi : _ASEOF }; then CONFIG_SHELL=$as_shell as_have_required=yes if { "$as_shell" 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi : (as_func_return () { (exit $1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = "$1" ); then : else exitcode=1 echo positional parameters were not saved. fi test $exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } _ASEOF }; then break fi fi done if test "x$CONFIG_SHELL" != x; then for as_var in BASH_ENV ENV do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done export CONFIG_SHELL exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi if test $as_have_required = no; then echo This script requires a shell more modern than all the echo shells that I found on your system. Please install a echo modern shell, or manually run the script under such a echo shell if you do have one. { (exit 1); exit 1; } fi fi fi (eval "as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0") || { echo No shell found that supports shell functions. echo Please tell autoconf@gnu.org about your system, echo including any error possibly output before this echo message } as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir fi echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME='texi2html' PACKAGE_TARNAME='texi2html' PACKAGE_VERSION='1.82' PACKAGE_STRING='texi2html 1.82' PACKAGE_BUGREPORT='texi2html-bug@nongnu.org' ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datarootdir datadir sysconfdir sharedstatedir localstatedir includedir oldincludedir docdir infodir htmldir dvidir pdfdir psdir libdir localedir mandir DEFS ECHO_C ECHO_N ECHO_T LIBS build_alias host_alias target_alias INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA am__isrc CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT PACKAGE_DATE PERL USE_UNICODE USE_UNIDECODE USE_DATA_DUMPER REQUIRE_DATA_DUMPER build build_cpu build_vendor build_os host host_cpu host_vendor host_os LIBOBJS LTLIBOBJS' ac_subst_files='' ac_precious_vars='build_alias host_alias target_alias PERL' # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` eval enable_$ac_feature=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` eval enable_$ac_feature=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/[-.]/_/g'` eval with_$ac_package=\$ac_optarg ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/[-.]/_/g'` eval with_$ac_package=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute directory names. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; } done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || { echo "$as_me: error: Working directory cannot be determined" >&2 { (exit 1); exit 1; }; } test "X$ac_ls_di" = "X$ac_pwd_ls_di" || { echo "$as_me: error: pwd does not report name of working directory" >&2 { (exit 1); exit 1; }; } # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$0" || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X"$0" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 { (exit 1); exit 1; }; } pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures texi2html 1.82 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/texi2html] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of texi2html 1.82:";; esac cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-translations try to rebuild translation files (default: detected) --enable-multiplatform put executables in bin/PLATFORM Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-encode use encode (default: detected) --with-unidecode use Text::Unidecode (default: detected) Some influential environment variables: PERL The path to the `perl' executable. Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF texi2html configure 1.82 generated by GNU Autoconf 2.61 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by texi2html $as_me 1.82, which was generated by GNU Autoconf 2.61. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------------- ## ## File substitutions. ## ## ------------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo cat confdefs.h echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then set x "$CONFIG_SITE" elif test "x$prefix" != xNONE; then set x "$prefix/share/config.site" "$prefix/etc/config.site" else set x "$ac_default_prefix/share/config.site" \ "$ac_default_prefix/etc/config.site" fi shift for ac_site_file do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.10' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} { (exit 1); exit 1; }; } fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. { echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done IFS=$as_save_IFS fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { echo "$as_me:$LINENO: checking whether build environment is sane" >&5 echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi test "$2" = conftest.file ) then # Ok. : else { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. echo might interpret backslashes. # By default was `s,x,x', remove it if useless. cat <<\_ACEOF >conftest.sed s/[\\$]/&&/g;s/;s,x,x,$// _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm -f conftest.sed # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi { echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5 echo $ECHO_N "checking for a thread-safe mkdir -p... $ECHO_C" >&6; } if test -z "$MKDIR_P"; then if test "${ac_cv_path_mkdir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. test -d ./--version && rmdir ./--version MKDIR_P="$ac_install_sh -d" fi fi { echo "$as_me:$LINENO: result: $MKDIR_P" >&5 echo "${ECHO_T}$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { echo "$as_me:$LINENO: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$AWK" && break done { echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } SET_MAKE= else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='texi2html' VERSION='1.82' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} { echo "$as_me:$LINENO: checking how to create a pax tar archive" >&5 echo $ECHO_N "checking how to create a pax tar archive... $ECHO_C" >&6; } # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' _am_tools=${am_cv_prog_tar_pax-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do { echo "$as_me:$LINENO: $_am_tar --version" >&5 ($_am_tar --version) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && break done am__tar="$_am_tar --format=posix -chf - "'"$$tardir"' am__tar_="$_am_tar --format=posix -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x pax -w "$$tardir"' am__tar_='pax -L -x pax -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H pax -L' am__tar_='find "$tardir" -print | cpio -o -H pax -L' am__untar='cpio -i -H pax -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_pax}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file { echo "$as_me:$LINENO: tardir=conftest.dir && eval $am__tar_ >conftest.tar" >&5 (tardir=conftest.dir && eval $am__tar_ >conftest.tar) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } rm -rf conftest.dir if test -s conftest.tar; then { echo "$as_me:$LINENO: $am__untar &5 ($am__untar &5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } grep GrepMe conftest.dir/file >/dev/null 2>&1 && break fi done rm -rf conftest.dir if test "${am_cv_prog_tar_pax+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else am_cv_prog_tar_pax=$_am_tool fi { echo "$as_me:$LINENO: result: $am_cv_prog_tar_pax" >&5 echo "${ECHO_T}$am_cv_prog_tar_pax" >&6; } { echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6; } # Check whether --enable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no fi { echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE PACKAGE_DATE=`"$srcdir"/mdate-sh "$srcdir"/configure.ac` # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_path_PERL+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $PERL in [\\/]* | ?:[\\/]*) ac_cv_path_PERL="$PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_dummy="/opt/perl5/bin:"$PATH"" for as_dir in $as_dummy do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_PERL" && ac_cv_path_PERL="/usr/bin/env perl" ;; esac fi PERL=$ac_cv_path_PERL if test -n "$PERL"; then { echo "$as_me:$LINENO: result: $PERL" >&5 echo "${ECHO_T}$PERL" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi # Check whether --with-encode was given. if test "${with_encode+set}" = set; then withval=$with_encode; if test $withval = 'no'; then USE_UNICODE=0 else USE_UNICODE=1 fi else if $PERL -e "use Encode; use Unicode::Normalize;" > /dev/null 2>&1; then USE_UNICODE=1 else USE_UNICODE=0 fi fi # Check whether --with-unidecode was given. if test "${with_unidecode+set}" = set; then withval=$with_unidecode; if test $withval = 'no'; then USE_UNIDECODE=0 else USE_UNIDECODE=1 fi else USE_UNIDECODE=0 if test $USE_UNICODE = 1; then if $PERL -e "use Text::Unidecode;" > /dev/null 2>&1; then USE_UNIDECODE=1 fi fi fi t2h_try_translations= # Check whether --enable-translations was given. if test "${enable_translations+set}" = set; then enableval=$enable_translations; if test $enableval = 'no'; then t2h_try_translations='no' else t2h_try_translations='yes' fi else if $PERL -e "use 5.0; use Data::Dumper;" > /dev/null 2>&1; then t2h_try_translations='yes' else t2h_try_translations='no' fi fi if test "z$t2h_try_translations" = 'zyes'; then USE_DATA_DUMPER=1 REQUIRE_DATA_DUMPER="use Data::Dumper" else USE_DATA_DUMPER=0 REQUIRE_DATA_DUMPER=1 fi # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. { echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done IFS=$as_save_IFS fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' # For teTeX and TeX Live. # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} { (exit 1); exit 1; }; } { echo "$as_me:$LINENO: checking build system type" >&5 echo $ECHO_N "checking build system type... $ECHO_C" >&6; } if test "${ac_cv_build+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} { (exit 1); exit 1; }; } fi { echo "$as_me:$LINENO: result: $ac_cv_build" >&5 echo "${ECHO_T}$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 echo "$as_me: error: invalid value of canonical build" >&2;} { (exit 1); exit 1; }; };; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { echo "$as_me:$LINENO: checking host system type" >&5 echo $ECHO_N "checking host system type... $ECHO_C" >&6; } if test "${ac_cv_host+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} { (exit 1); exit 1; }; } fi fi { echo "$as_me:$LINENO: result: $ac_cv_host" >&5 echo "${ECHO_T}$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 echo "$as_me: error: invalid value of canonical host" >&2;} { (exit 1); exit 1; }; };; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac # Check whether --enable-multiplatform was given. if test "${enable_multiplatform+set}" = set; then enableval=$enable_multiplatform; fi test "x$enable_multiplatform" = xyes \ && test "x$bindir" = 'x${exec_prefix}/bin' \ && bindir="$bindir/$host" ac_config_files="$ac_config_files texi2html_configured.pl:texi2html.pl" ac_config_files="$ac_config_files check_texinfo.pl" ac_config_files="$ac_config_files manage_i18n.pl" ac_config_files="$ac_config_files Makefile Tests/Makefile test/Makefile test/contents/Makefile test/coverage/Makefile test/formatting/Makefile test/indices/Makefile test/invalid/Makefile test/misc/Makefile test/encodings/Makefile test/macros/Makefile test/manuals/Makefile test/nested_formats/Makefile test/sectionning/Makefile test/htmlxref/Makefile test/htmlxref-only_mono/Makefile test/htmlxref-only_split/Makefile test/xemacs_manual/Makefile test/texi2html_manual/Makefile test/tar_manual/Makefile test/singular_manual/Makefile test/layout/Makefile test/many_input_files/Makefile doc/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then test "x$cache_file" != "x/dev/null" && { echo "$as_me:$LINENO: updating cache $cache_file" >&5 echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) as_nl=' ' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir fi echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 # Save the log message, to keep $[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by texi2html $as_me 1.82, which was generated by GNU Autoconf 2.61. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # Files that config.status was made for. config_files="$ac_config_files" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ texi2html config.status 1.82 configured by $0, generated by GNU Autoconf 2.61, with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2006 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) echo "$ac_cs_version"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF if \$ac_cs_recheck; then echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 CONFIG_SHELL=$SHELL export CONFIG_SHELL exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "texi2html_configured.pl") CONFIG_FILES="$CONFIG_FILES texi2html_configured.pl:texi2html.pl" ;; "check_texinfo.pl") CONFIG_FILES="$CONFIG_FILES check_texinfo.pl" ;; "manage_i18n.pl") CONFIG_FILES="$CONFIG_FILES manage_i18n.pl" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "Tests/Makefile") CONFIG_FILES="$CONFIG_FILES Tests/Makefile" ;; "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; "test/contents/Makefile") CONFIG_FILES="$CONFIG_FILES test/contents/Makefile" ;; "test/coverage/Makefile") CONFIG_FILES="$CONFIG_FILES test/coverage/Makefile" ;; "test/formatting/Makefile") CONFIG_FILES="$CONFIG_FILES test/formatting/Makefile" ;; "test/indices/Makefile") CONFIG_FILES="$CONFIG_FILES test/indices/Makefile" ;; "test/invalid/Makefile") CONFIG_FILES="$CONFIG_FILES test/invalid/Makefile" ;; "test/misc/Makefile") CONFIG_FILES="$CONFIG_FILES test/misc/Makefile" ;; "test/encodings/Makefile") CONFIG_FILES="$CONFIG_FILES test/encodings/Makefile" ;; "test/macros/Makefile") CONFIG_FILES="$CONFIG_FILES test/macros/Makefile" ;; "test/manuals/Makefile") CONFIG_FILES="$CONFIG_FILES test/manuals/Makefile" ;; "test/nested_formats/Makefile") CONFIG_FILES="$CONFIG_FILES test/nested_formats/Makefile" ;; "test/sectionning/Makefile") CONFIG_FILES="$CONFIG_FILES test/sectionning/Makefile" ;; "test/htmlxref/Makefile") CONFIG_FILES="$CONFIG_FILES test/htmlxref/Makefile" ;; "test/htmlxref-only_mono/Makefile") CONFIG_FILES="$CONFIG_FILES test/htmlxref-only_mono/Makefile" ;; "test/htmlxref-only_split/Makefile") CONFIG_FILES="$CONFIG_FILES test/htmlxref-only_split/Makefile" ;; "test/xemacs_manual/Makefile") CONFIG_FILES="$CONFIG_FILES test/xemacs_manual/Makefile" ;; "test/texi2html_manual/Makefile") CONFIG_FILES="$CONFIG_FILES test/texi2html_manual/Makefile" ;; "test/tar_manual/Makefile") CONFIG_FILES="$CONFIG_FILES test/tar_manual/Makefile" ;; "test/singular_manual/Makefile") CONFIG_FILES="$CONFIG_FILES test/singular_manual/Makefile" ;; "test/layout/Makefile") CONFIG_FILES="$CONFIG_FILES test/layout/Makefile" ;; "test/many_input_files/Makefile") CONFIG_FILES="$CONFIG_FILES test/many_input_files/Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } # # Set up the sed scripts for CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "$CONFIG_FILES"; then _ACEOF ac_delim='%!_!# ' for ac_last_try in false false false false false :; do cat >conf$$subs.sed <<_ACEOF SHELL!$SHELL$ac_delim PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim PACKAGE_NAME!$PACKAGE_NAME$ac_delim PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim PACKAGE_STRING!$PACKAGE_STRING$ac_delim PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim exec_prefix!$exec_prefix$ac_delim prefix!$prefix$ac_delim program_transform_name!$program_transform_name$ac_delim bindir!$bindir$ac_delim sbindir!$sbindir$ac_delim libexecdir!$libexecdir$ac_delim datarootdir!$datarootdir$ac_delim datadir!$datadir$ac_delim sysconfdir!$sysconfdir$ac_delim sharedstatedir!$sharedstatedir$ac_delim localstatedir!$localstatedir$ac_delim includedir!$includedir$ac_delim oldincludedir!$oldincludedir$ac_delim docdir!$docdir$ac_delim infodir!$infodir$ac_delim htmldir!$htmldir$ac_delim dvidir!$dvidir$ac_delim pdfdir!$pdfdir$ac_delim psdir!$psdir$ac_delim libdir!$libdir$ac_delim localedir!$localedir$ac_delim mandir!$mandir$ac_delim DEFS!$DEFS$ac_delim ECHO_C!$ECHO_C$ac_delim ECHO_N!$ECHO_N$ac_delim ECHO_T!$ECHO_T$ac_delim LIBS!$LIBS$ac_delim build_alias!$build_alias$ac_delim host_alias!$host_alias$ac_delim target_alias!$target_alias$ac_delim INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim INSTALL_DATA!$INSTALL_DATA$ac_delim am__isrc!$am__isrc$ac_delim CYGPATH_W!$CYGPATH_W$ac_delim PACKAGE!$PACKAGE$ac_delim VERSION!$VERSION$ac_delim ACLOCAL!$ACLOCAL$ac_delim AUTOCONF!$AUTOCONF$ac_delim AUTOMAKE!$AUTOMAKE$ac_delim AUTOHEADER!$AUTOHEADER$ac_delim MAKEINFO!$MAKEINFO$ac_delim install_sh!$install_sh$ac_delim STRIP!$STRIP$ac_delim INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim mkdir_p!$mkdir_p$ac_delim AWK!$AWK$ac_delim SET_MAKE!$SET_MAKE$ac_delim am__leading_dot!$am__leading_dot$ac_delim AMTAR!$AMTAR$ac_delim am__tar!$am__tar$ac_delim am__untar!$am__untar$ac_delim MAINTAINER_MODE_TRUE!$MAINTAINER_MODE_TRUE$ac_delim MAINTAINER_MODE_FALSE!$MAINTAINER_MODE_FALSE$ac_delim MAINT!$MAINT$ac_delim PACKAGE_DATE!$PACKAGE_DATE$ac_delim PERL!$PERL$ac_delim USE_UNICODE!$USE_UNICODE$ac_delim USE_UNIDECODE!$USE_UNIDECODE$ac_delim USE_DATA_DUMPER!$USE_DATA_DUMPER$ac_delim REQUIRE_DATA_DUMPER!$REQUIRE_DATA_DUMPER$ac_delim build!$build$ac_delim build_cpu!$build_cpu$ac_delim build_vendor!$build_vendor$ac_delim build_os!$build_os$ac_delim host!$host$ac_delim host_cpu!$host_cpu$ac_delim host_vendor!$host_vendor$ac_delim host_os!$host_os$ac_delim LIBOBJS!$LIBOBJS$ac_delim LTLIBOBJS!$LTLIBOBJS$ac_delim _ACEOF if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 78; then break elif $ac_last_try; then { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` if test -n "$ac_eof"; then ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` ac_eof=`expr $ac_eof + 1` fi cat >>$CONFIG_STATUS <<_ACEOF cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof /@[a-zA-Z_][a-zA-Z_0-9]*@/!b end _ACEOF sed ' s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g s/^/s,@/; s/!/@,|#_!!_#|/ :n t n s/'"$ac_delim"'$/,g/; t s/$/\\/; p N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n ' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF :end s/|#_!!_#|//g CEOF$ac_eof _ACEOF # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/ s/:*\${srcdir}:*/:/ s/:*@srcdir@:*/:/ s/^\([^=]*=[ ]*\):*/\1/ s/:*$// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF fi # test -n "$CONFIG_FILES" for ac_tag in :F $CONFIG_FILES do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 echo "$as_me: error: Invalid tag $ac_tag." >&2;} { (exit 1); exit 1; }; };; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 echo "$as_me: error: cannot find input file: $ac_f" >&2;} { (exit 1); exit 1; }; };; esac ac_file_inputs="$ac_file_inputs $ac_f" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input="Generated from "`IFS=: echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} fi case $ac_tag in *:-:* | *:-) cat >"$tmp/stdin";; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` { as_dir="$ac_dir" case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= case `sed -n '/datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p ' $ac_file_inputs` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s&@configure_input@&$configure_input&;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " $ac_file_inputs | sed -f "$tmp/subs-1.sed" >$tmp/out test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&5 echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&2;} rm -f "$tmp/stdin" case $ac_file in -) cat "$tmp/out"; rm -f "$tmp/out";; *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; esac ;; esac case $ac_file$ac_mode in "texi2html_configured.pl":F) chmod +x texi2html_configured.pl ;; "check_texinfo.pl":F) chmod +x check_texinfo.pl ;; "manage_i18n.pl":F) chmod +x manage_i18n.pl ;; esac done # for ac_tag { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi texi2html-1.82/missing0000755000175000017500000002557711264347127016656 0ustar flichtenheldflichtenheld#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2006-05-10.23 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006 # Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case $1 in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' autom4te touch the output file, or create a stub one automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). case $1 in lex|yacc) # Not GNU programs, they don't have --version. ;; tar) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case $1 in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case $f in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if test $# -ne 1; then eval LASTARG="\${$#}" case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi if test ! -f y.tab.h; then echo >y.tab.h fi if test ! -f y.tab.c; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if test $# -ne 1; then eval LASTARG="\${$#}" case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if test ! -f lex.yy.c; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n ' /^@setfilename/{ s/.* \([^ ]*\) *$/\1/ p q }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; tar) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case $firstarg in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case $firstarg in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: texi2html-1.82/Makefile.am0000644000175000017500000001051511264347127017275 0ustar flichtenheldflichtenheld## Process this file with automake to produce Makefile.in SUBDIRS = . doc Tests test imagesdir = $(pkgdatadir)/images i18ndir = $(pkgdatadir)/i18n # # This is to prevent texinfo.tex from being included # in the top-level distribution directory. TEXINFO_TEX = doc/texinfo.tex bin_SCRIPTS = texi2html texi2html_additional_scripts = \ MySimple.pm \ T2h_i18n.pm \ texi2html.init \ translations.pl \ examples/l2h.init \ T2h_l2h.pm texi2html_sources = texi2html_configured.pl $(texi2html_additional_scripts) noinst_SCRIPTS = manage_i18n.pl buildt2h.sh parse_8bit_makeinfo_maps.pl EXTRA_DIST = \ MySimple.pod \ autogen.sh \ $(noinst_SCRIPTS) \ missing-texi2html \ texi2html.pl \ texi2html.spec \ texi2html.spec.in \ texi2html.pl \ $(texi2html_additional_scripts) dist_pkgdata_DATA = examples/l2h.init \ examples/makeinfo.init \ examples/xhtml.init \ examples/html32.init \ examples/book.init \ examples/noheaders.init \ examples/inlinestyle.init \ examples/utf8.init \ examples/enable_encoding.init \ examples/chm.init \ examples/roff.init \ examples/xml.init \ examples/mediawiki.init \ examples/docbook.init \ examples/tex4ht.init \ examples/my-bib-macros.texi \ examples/bib-example.texi \ examples/glossary.texi i18n_files = i18n/de \ i18n/es \ i18n/fr \ i18n/nl \ i18n/no \ i18n/pt \ i18n/pt_BR \ i18n/ja dist_i18n_DATA = i18n/en \ $(i18n_files) dist_images_DATA = images/a_begin.png \ images/a_begin_na.png \ images/a_document.png \ images/a_document_na.png \ images/a_empty.png \ images/a_end.png \ images/a_end_na.png \ images/a_help.png \ images/a_help_na.png \ images/a_index.png \ images/a_index_na.png \ images/a_leftdouble.png \ images/a_leftdouble_na.png \ images/a_left.png \ images/a_left_na.png \ images/a_page.png \ images/a_page_na.png \ images/a_rightdouble.png \ images/a_rightdouble_na.png \ images/a_right.png \ images/a_right_na.png \ images/a_searchdoc.png \ images/a_searchdoc_na.png \ images/a_search.png \ images/a_search_na.png \ images/a_tableofcon.png \ images/a_tableofcon_na.png \ images/a_top.png \ images/a_top_na.png \ images/a_up.png \ images/a_up_na.png \ images/bg.jpg \ images/bg_left.png \ images/bg_right.png \ images/blue_dir.png \ images/blue_down.png \ images/blue_grab.png \ images/blue_help.png \ images/blue_next.png \ images/blue_nnext.png \ images/blue_pprev.png \ images/blue_prev.png \ images/blue_readme.png \ images/blue_top.png \ images/blue_up.png \ images/blue_uup.png \ images/contents_motif.png \ images/COPYING \ images/COPYING.Attribution-ShareAlike \ images/GPL \ images/README \ images/index_motif.png \ images/Mybg.png \ images/next_motif.png \ images/next_motif_gr.png \ images/previous_motif.png \ images/previous_motif_gr.png \ images/spacer3.png \ images/xy_contents.png \ images/xy_foot.png \ images/xy_next.png \ images/xy_next_gr.png \ images/xy_nextsection.png \ images/xy_nextsection_gr.png \ images/xy_previous.png \ images/xy_previous_gr.png \ images/xy_previoussection.png \ images/xy_previoussection_gr.png \ images/xy_up.png \ images/xy_up_gr.png #texi2html: $(texi2html_sources) # sed -e "/@MYSIMPLE@/r $(srcdir)/MySimple.pm" \ # -e "/@INIT@/r $(srcdir)/texi2html.init" \ # -e "/@T2H_TRANSLATIONS_FILE@/r $(srcdir)/translations.pl" \ # -e "/@T2H_L2H_INIT@/r $(srcdir)/l2h.init" \ # -e "/@T2H_I18N@/r $(srcdir)/T2h_i18n.pm" \ # -e "/@T2H_L2H@/r $(srcdir)/T2h_l2h.pm" $< >$@ # chmod a+x $@ texi2html: $(texi2html_sources) $(SHELL) $(srcdir)/buildt2h.sh $@ $^ chmod a+x $@ texi2html.spec: texi2html.spec.in configure @echo Generating $@... @sed -e "s/[@]PACKAGE_VERSION[@]/$(PACKAGE_VERSION)/" \ -e "s/[@]PACKAGE_TARNAME[@]/$(PACKAGE_TARNAME)/" $< >texi2html.tmp @cp texi2html.tmp texi2html.spec -@rm texi2html.tmp i18n/en: texi2html.pl texi2html.init T2h_i18n.pm examples/roff.init \ examples/noheaders.init $(PERL) $(top_builddir)/manage_i18n.pl -d i18n -I . -I $(srcdir) template $^ #i18n/de i18n/nl i18n/es i18n/no i18n/pt i18n/fr: i18n/en $(i18n_files): i18n/en $(PERL) $(top_builddir)/manage_i18n.pl -d i18n -I . -I $(srcdir) update #translations.pl: i18n/de i18n/nl i18n/es i18n/no i18n/pt i18n/fr i18n/en translations.pl: $(dist_i18n_DATA) $(PERL) $(top_builddir)/manage_i18n.pl -d i18n -o $@ -I . -I $(srcdir) merge html-local: texi2html clean-local: -rm -f texi2html texi2html-1.82/test/0000755000175000017500000000000012076571313016214 5ustar flichtenheldflichtenheldtexi2html-1.82/test/singular_manual/0000755000175000017500000000000011264347126021376 5ustar flichtenheldflichtenheldtexi2html-1.82/test/singular_manual/README_ftp.texi0000644000175000017500000000437411264347126024107 0ustar flichtenheldflichtenheld@comment -*-texinfo-*- @comment Id: README_ftp.texi,v 1.1 2003/08/08 14:27:06 pertusus Exp $ @c FILE: README_download.texi @c PURPOSE: This should reside as README file in the main directory of the @c Singular ftp site. @ifclear VERSION @include version.texi @end ifclear @majorheading Welcome to the Main FTP site of SINGULAR @sc{Singular} is a Computer Algebra system for polynomial computations with special emphasis on the needs of commutative algebra, algebraic geometry, singularity theory and polynomial system solving. For a more detailed overview of @sc{Singular}, see @display @uref{http://www.singular.uni-kl.de/Overview/} @end display @sc{Singular} is developed on UNIX systems (Linux and HPUX). Moreover, there exist ports to FreeBSD, SunOS, IRIX, AIX, and Windows 95/98/ME/NT/2K/XP. If your operating system is not in this list you may try to port @sc{Singular} to your platform (see @uref{http://www.mathematik.uni-kl.de/ftp/pub/Math/Singular/src/README.html}) @macro nref{name,url} @ifhtml @item @uref{\url\,,\name\} @end ifhtml @ifinfo @item @code{\name\} @end ifinfo @end macro In this directory you find the following files: @table @asis @nref{NEWS, NEWS.html} news and changes of this version @nref{COPYING, COPYING.html} license information for @sc{Singular} @nref{INSTALL_unix, INSTALL_unix.html} Unix installation instructions @nref{INSTALL_win, INSTALL_win.html} Windows installation instructions @item @code{Singular-@value{VERSION}-share.tar.gz} @sc{Singular} distribution archive which contains architecture independent data like documentation and libraries. @item @code{Singular-@value{VERSION}-}.tar.gz @sc{Singular} distribution archives which contain architecture dependent executables, like the @sc{Singular} program. @end table @include README_download.texi @heading More information about @sc{Singular}: Comments, Questions, Bug Reports More and up-to-date information about @sc{Singular} is always available from @display @uref{http://www.singular.uni-kl.de/}. @end display We very much welcome any comments, questions, and bug reports, especially comments about our new version. Please contact us at @display @email{singular@@mathematik.uni-kl.de}. @end display GOOD LUCK and ENJOY! Your @sc{Singular} team. texi2html-1.82/test/singular_manual/TROUBLESHOOTING_win.texi0000644000175000017500000004044311264347126025442 0ustar flichtenheldflichtenheld@comment -*-texinfo-*- @comment Id: TROUBLESHOOTING_win.texi,v 1.1 2003/08/08 14:27:06 pertusus Exp $ @c FILE: INSTALL.texi @c PURPOSE: Installation instructions for Singular on MSWindows @c This file is displayed during installation and copied to @c /etc/INSTALL @ifclear VERSION @include version.texi @end ifclear @ifclear singularmanual @majorheading Troubleshooting for Singular on MS Windows. @end ifclear @strong{RECOMMENDATIONS:} @itemize @item If possible, install @code{Singular} in the directory, containing no spaces (that is, rather in @code{C:\Singular} than in @code{C:\Program Files\Singular}) @item If you have any earlier version of @code{Singular} installed, please uninstall it before setting up a newer version @end itemize @strong{GENERAL CONSIDERATIONS:} @enumerate @item In the text below, we assume the directory @code{C:\Singular} to be the destination folder for the Singular installation. @item For typing system commands (if required), you can use one of the three shells: @itemize @item rxvt terminal (Start->Programs->Singular 2.0->Tools->rxvt terminal, runs Unix Bash shell) @item Bash shell (Start->Programs->Singular 2.0->Tools->Bash shell) @item MS-DOS Command Prompt (Start->Programs->MS-DOS Command Prompt) @end itemize We highly recommend to use rxvt terminal. @end enumerate @table @strong @item While extracting files, there is a message @code{Setup failed to launch installation engine:} @code{Error loading type library/DLL}. Such a problem could appear on Win 95/98. You need to download and execute Microsoft DCOM98 package @uref{http://www.microsoft.com/com/dcom/dcom98/download.asp}. @item On startup, the DLL @code{cygwin1.dll} can not be found. @itemize @item Make sure that (1) the installation did not generate any error messages; (2) you have rebooted your machine after a successful installation (Win95/98/ME only); (3) the @code{BasicCygwin} component was not de-selected during a custom installation. @c and (4) (eventually Win 95/98) the destination folder chosen during the installation does not contain folder names which are longer than 8 characters, or contain spaces or periods. @item Make sure that the file @code{C:\Singular\bin\cygwin1.dll} is present in your system. @item If the problem persists, please try to localize the source of the problem as explained below, and, in any case, @emph{please send} an email to @email{singular@@mathematik.uni-kl-de} with a description of your problem. @item Make sure the directories @code{C:\Singular\bin} and @code{C:\Singular\usr\local\Singular\@value{VERSION}\ix86-Win} are contained in your @code{PATH} environment variable. To check this, open either an MS-DOS command prompt and type @code{PATH} or an rxvt terminal and type @code{echo $PATH}. If these directories are not contained in the listings of directories of the @code{PATH} variable, set them as follows and then (on Win 95/98/ME only) @emph{restart} your computer : @*On Windows 95/98/ME, add the following line to your @code{AUTOEXEC.BAT} file: @example SET PATH=C:\SINGULAR\BIN;C:\SINGULAR\USR\LOCAL\SINGBIN;%PATH% @end example On Windows NT/2K/XP add these paths to the @code{PATH} variable in your @code{Environment} control panel. @item Make sure that your chosen destination folder is correctly mounted to the root of your (Cygwin) file system: Open an rxvt terminal, and type in @code{mount}. This should produce an output which looks like: @example Device Directory Type Flags C:\Singular / system binmode @end example If not, make sure that the @code{mount.exe} command is contained in this directory, and then type at the command line: @example mount -f -s -t C:\Singular / @end example @end itemize @item Could not get expanded executable from @code{/usr/local/Singular/@value{VERSION}/ix86-Win/Singular} @item Error: Couldn't find @code{ESingular} anywhere @* These problems have common origin - they indicate that @code{cygwin} mounts are not correctly set. @itemize @item @strong{Step 1}. Searching for the wrong setting @* Open an rxvt terminal and type @code{mount}. You will get a list of mounts, present in the system. @code{Singular} installation creates the following three mounts (they are of crucial importance for running @code{Singular}) : @example C:\Singular\usr\lib on /usr/lib type system (binmode) C:\Singular\bin on /usr/bin type system (binmode) C:\Singular on / type system (binmode) @end example Moreover, if you create your own mounts, say, executing @code{mount -f -u -t C: /C}, you will see more lines like this: @example C: on /C type user (textmode) @end example @item @strong{Step 2}. Removing the problem @* If you see any extra mount points, which have the same posix name (like "/", "/usr/bin", "/usr/lib"), you have to remove them. @* Suppose there are two "root" mount points, namely @example C:\Singular on / type system (binmode) C: on / type user (textmode) @end example You have to call the "unmount" procedure, which in this concrete example will be @code{umount -u / }. Thus you remove the wrong user mount and the correct one will be activated. Type @code{umount --help} for more information on this command. @item @strong{Alternative} @* If you have problems removing or setting mount, you can do it also with the Registry Editor. However, this is recommended for advanced users. @enumerate @item Close all your cygwin-related applications @item open Registry Editor @item navigate either to @code{HKEY_CURRENT_USER} or @code{HKEY_USERS\Default} window (on Win NT/2K/XP you can also check @code{HKEY_LOCAL_MASHINE}). @item go to @code{SOFTWARE/Cygwin Solutions/Cygwin/mounts v2}. It is the place, where mount points are described. Suppose we have an extra "/" mount like in the previous step. Find the mount you need (that is, "/") and check its properties, then delete the whole key (graphically it looks like the folder), which corresponds to @code{C:} (do not delete the one corresponding to @code{C:\Singular}!). After this, close the Registry Editor, open rxvt terminal and type "mount" again. Now the mounts should be correct. @end enumerate @end itemize @item During the installation, an error is displayed complaining that an environment variable can not be set. @*Repeat the installation, and make sure that: @itemize @item On Windows 95/98/ME, the file @code{C:\AUTOEXEC.BAT} is not hidden and not write-protected. @item On Windows NT/2K/XP, you are logged on either as user @code{Administrator} or as a user with the Administrator rights during the installation. @end itemize @item @*On start-up of @code{ESingular}, the @code{xemacs} editor can not be found. @*Make sure that (1) the folder @code{C:\Singular\usr\local\Singular\@value{VERSION}\ix86-Win} is contained in your @code{PATH} (see above for details) and (2) that the file @code{C:\Singular\usr\local\Singular\@value{VERSION}\ix86-Win\xemacs.exe} exists. @*Open an rxvt terminal and type @code{xemacs} (or, alternatively, @code{which xemacs}). If this fails (or returns nothing), make sure your root mount "/" is set correctly (see above). @item @*What help systems are available for @code{Singular}? @*There are following help files in @code{C:\Singular\usr\local\Singular\@value{VERSION}}: @itemize @item @code{\info\singular.hlp} - Singular Manual in texinfo format, @item @code{\html\Manual.hlp} - Singular Manual in Windows Help format (is set by default), @item @code{\html\*.htm} (in the Typical and Custom setup components) - Singular Manual in HTML format. @end itemize @c @* The default help browser for Windows is set to @code{winhlp}. @* You can tell Singular which help to use either from the command-line (e.g. @code{system("--browser","html")}) or add this command to the file @code{\LIB\.singularrc}. @item @*There are @code{Singular.exe}, @code{TSingular.exe} and @code{ESingular.exe} files. What is the difference between them? @*The most important executables in @code{C:\Singular\usr\local\Singular\@value{VERSION}\ix86-Win} are : @itemize @item @code{runESingular.exe} - Singular inside the XEmacs editor (appears only if XEmacs is installed), @item @code{runTSingular.exe} - Singular inside the Cygwin xterm (rxvt) application, @item @code{Singular.exe} - could be run from the command line either in a Bash shell, or in an MS-DOS command prompt. For users convenience, the file @code{Singular-@value{VERSION}.exe} is just a link to @code{Singular.exe}. @end itemize @item @*How do I cut and paste with the mouse? @*First of all, we remind what we call Unix-like cut and paste with the mouse : marking a region while pressing a left button copies it to a buffer, a click on a middle-button pastes the current buffer at the current cursor position. @itemize @item @code{TSingular} and @code{ESingular} - under xterm and XEmacs, cut and paste works like under Unix @item @code{Singular.exe} from a Bash shell - you can copy and paste a region selected with the mouse using the @code{CTRL-Insert} (for copying) and @code{CTRL-Shift} (for paste) keys. @item @code{Singular.exe} from a DOS window - under Windows NT/2K/XP, you can configure the shortcut calling the Singular to work in the following manner: marking the region with a left-button, pressing @code{Enter}, and then right mouse button to paste. To enable this non-default feature, right-click on the Singular shortcut on your desktop, check Properties, click on tab Options, where check the "Quick-Edit Mode" and "Insert (Exclusive) Mode" boxes and apply changes. Under Windows 95/98/ME, this unfortunately doesn't work properly. @end itemize @item @*How to uninstall Singular-@value{VERSION} under Windows manually? @*The installation of Singular-@value{VERSION} for Windows consists of the three following components: @*(C1) Essential files ( in the installation directory) @*(C2) Shortcuts in Start Menu and on the Desktop @*(C3) Registry entries (Win NT/2K/XP) or @code{autoexec.bat} entries (Win 95/98/ME) @*To uninstall it, do the following : @*(C1) The essential files can be removed directly using the Explorer. @*(C2) To delete the shortcuts: right-click on the Start button, select Open - All Users. Then you go to the Program Files folder and you'll see the Singular 2.0 folder there, which is to be deleted. The shortcuts on the Desktop could be removed directly using the Explorer. @*(C3) At first, @itemize @item For Win 95/98/ME users : open the file @code{autoexec.bat} @item For Win NT/2K/XP users : click Start->Settings->Control Panel->System->Environment. @end itemize @* And then : just remove the line @code{HOME=...} if it corresponds to Singular-@value{VERSION} (i.e. if it looks like @code{HOME=C:\Singular\home\Singular}). You can leave the @code{PATH} variable as it is, but if you want to clean it anyway, try to figure out paths in it, which look like @code{C:\Singular\bin; C:\Singular\usr\local\Singular\@value{VERSION}\ix86-Win}. @strong{But don't delete the string @code{PATH} itself!} @item @*How to configure Singular-@value{VERSION} for use by many users under Win NT/2K/XP? @* You are installing Singular-@value{VERSION} with the administrator rights, the @emph{system variables} @code{Path} and @code{HOME} are set by default. There exists also a @emph{user variable} @code{HOME}, which overruns the system variable for the current user. @* Assume that you have Singular-@value{VERSION} installed in the @code{C:\Singular} directory and your user is named @code{NewUser}. @*1) Create the directory, say, @code{C:\Singular\home\NewUser} @*2) Copy and edit the files @code{.profile} and @code{.bashrc} to this directory from the @code{C:\Singular\home\Singular}. @*3) Set @emph{user variable} @code{HOME} to @code{C:\Singular\home\NewUser} by clicking and editing Start->Settings->Control Panel->System->Environment. User variables are listed in the respective subwindow below. @*4) Click the "Apply changes" button. The Singular-specific global settings for all the users you can add to the .singularrc file, which you can find in @code{C:\Singular\usr\local\Singular\@value{VERSION}\LIB}. For more information on @code{.singularrc}, see the Singular manual. @item Conflicting @code{HOME} variables The system variable @code{HOME} is used by Singular and other programs. The modifications of this variable during the installation procedure may lead to conflicts. @enumerate @item Where is the variable @code{HOME} defined? @itemize @item Windows 95/98/ME @code{HOME} is defined by a line @code{SET HOME = ...} in the file @code{autoexec.bat}. @item Windows NT/2K/XP Under "Environment" in the "Control Panel" there could be two definitions of @code{HOME}, namely as a @emph{system variable} (in the upper subwindow) and as a @emph{user variable} (in the lower subwindow). By default, the variable @code{HOME} appears only as a @emph{system variable} or does not appear at all. @end itemize @item How is the variable @code{HOME} modified by the Singular installation? @itemize @item Windows 95/98/ME A new line @code{SET HOME = ...} defining the Singular home directory is inserted in the file @code{autoexec.bat} after the existing line @code{SET HOME =...} defining the user home directory. To prevent the system from destroying the old settings, replace the line @code{SET HOME = ...} defining the user home directory by the line @code{REM SET HOME = ...} or copy it to another place. @item Windows NT/2K/XP If the value of the variable @code{HOME} is correct (i.e. the given directory exists), the installation proceed as follows. First, a copy of the old variable @code{HOME} is moved to the new variable @code{OLDHOME}. You will be prompted by the Setup program if such replacements take place. Afterwards, the variable @code{HOME} is set to the Singular home directory. If either the variable @code{HOME} is not defined or it contains a non-existing path, then the variable @code{HOME} is set to the Singular home directory. @end itemize @item Where is the value of the variable @code{HOME} relevant? @itemize @item Some versions of @code{(X)Emacs} for Windows and other programs (like Star Office) need this variable to find their home directory. So need it the @code{XEmacs} version 21.1.13, which is included in the Singular-@value{VERSION} distribution. In order to use different versions of (X)Emacs, one has to run (X)Emacs and ESingular (which works as an application within the XEmacs 21.1.13, shipped with the distribution) separately and eventually use some tricks (like batch files or registry macros) for changing the value of the variable @code{HOME} appropriately. @item Shortcuts like Singular, TSingular, ESingular, Bash Shell, or Xemacs will be run from the directory defined by the variable @code{HOME}. In order to run Singular, TSingular, and ESingular programs via shortcuts from the directory, which is different from the one defined in @code{HOME}, you can proceed as follows: @enumerate @item Define a new variable ( @code{SINGHOME}, for example) containing the path of the directory you wish to use. @item Right click on one of the shortcuts Singular, TSingular, or ESingular and choose "Shortcut tab". @item Enter @code{%SINGHOME%} in the field "Start in". By default, this field contains the string @code{%HOME%}. Note that there are two types of independent shortcuts, namely on the desktop and in the "Start" menu. @end enumerate @item Troubleshooting and additional information The following variables could be set additionally for various troubleshooting operations : @table @asis @item @code{ESINGULAR_EMACS} = the full path to @code{emacs.exe} or @code{xemacs.exe}, @item @code{ESINGULAR_SINGULAR} = the full path to your file @code{Singular.exe}, @item @code{ESINGULAR_EMACS_LOAD} = the full path to your file @code{.emacs-singular}, @item @code{ESINGULAR_EMACS_DIR} = the full path to your directory @code{/Singular/@value{VERSION}/emacs}. @end table If some of these variables are present in the system, Singular will use them internally for calling the respective data. @end itemize @end enumerate @item @*On a Laptop which is not connected to the network, Xemacs hangs. Remove your network card and restart Xemacs. @end table For any other troubles, please visit the @strong{Singular Forum} at @uref{http://www.singular.uni-kl.de/forum} or send an email to @email{singular@@mathematik.uni-kl.de} and include the header which is displayed by starting up @code{Singular} with the @code{-v} option, and a description of your machine and operating system. @include info.texi @ifclear singularmanual GOOD LUCK and ENJOY! Your @code{Singular} team. @end ifclear texi2html-1.82/test/singular_manual/tutor-titlepage.tex0000644000175000017500000000300611264347126025250 0ustar flichtenheldflichtenheld\documentclass[a4paper,german]{article} \usepackage[german]{babel} \usepackage{a4wide} %\usepackage{pandora} %\usepackage{amsmath} %\usepackage{amsfonts} %\usepackage{amssymb} %\usepackage{mathptm} \usepackage{epsfig} %\usepackage{changebar} %\usepackage{float} %\usepackage[isolatin]{inputenc} % Abstze: kein Einrcken, vertikaler Abstand \setlength{\parindent}{0pt} \setlength{\parskip}{5pt plus 2pt minus 1pt} \sloppy % Keine Seitenzahlen \pagestyle{empty} \begin{document} % \fontsize{20.74}{23}\selectfont \begin{center} % {\Large \verb?http://www.mathematik.uni-kl.de/~zca/Singular?}\\ %\vspace{-4ex} \begin{figure}[h] \noindent \centering\epsfig{file=singlogo,width=15cm} \end{figure} % \vspace{3ex} {\Large A Computer Algebra System for Polynomial Computations} \vspace{15ex} \Huge{\textbf{Tutorial}} \huge{for \textsc{Singular} Version 1.2} \vspace{5ex} \Large{By G.-M.~Greuel, G.~Pfister, and H.~Sch\"onemann} \end{center} \begin{center} \large{With contributions by} \\ \large{O.~Bachmann, W.~Decker, C.~Gorzel, H.~Grassmann, A.~Heydtmann, K.~Kr\"uger, M.~Lamm, B.~Martin, M.~Messollen, W.~Neumann, T.~N\"ussler, W.~Pohl, T.~Siebert, R.~Stobbe, and T.~Wichmann.} \end{center} \vspace{20ex} \begin{center} \large{ URL: \verb?http://www.mathematik.uni-kl.de/~zca/Singular? \\ email: \verb?singular@mathematik.uni-kl.de?\\ Fachbereich Mathematik \\ Zentrum f\"ur Computeralgebra \\ Universit\"at Kaiserslautern \\ D-67653 Kaiserslautern \\ Germany} \end{center} \end{document} texi2html-1.82/test/singular_manual/COPYING.texi0000644000175000017500000001277411264347126023414 0ustar flichtenheldflichtenheld@comment -*-texinfo-*- @comment Id: COPYING.texi,v 1.1 2003/08/08 14:27:06 pertusus Exp $ @comment this file contains the copyright notice on Singular @ifclear VERSION @include version.texi @end ifclear @cindex copyright @cindex factory @cindex GMP @cindex MP @cindex readline @cindex libfac @center @sc{Singular} version @value{VERSION} @center @uref{http://www.uni-kl.de/,,University of Kaiserslautern} @center @uref{http://www.mathematik.uni-kl.de/,,Department of Mathematics} and @uref{http://www.mathematik.uni-kl.de/~zca/,,Centre for Computer Algebra} @center Authors: @uref{http://www.mathematik.uni-kl.de/~greuel,,G.-M. Greuel}, @uref{http://www.mathematik.uni-kl.de/~pfister,,G. Pfister}, @uref{http://www.mathematik.uni-kl.de/~hannes,,H. Schoenemann} @center Copyright @copyright{} 1986-2003 @sp 2 @center @strong{NOTICE} This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation ( version 2 of the License ); with the following additional restrictions (which override any conflicting restrictions in the GPL): The following software used with @sc{Singular} have their own copyright: the omalloc library, the readline library, the Gnu Multiple Precision Library (GMP), NTL: A Library for doing Number Theory (NTL), the Multi Protocol library (MP), the Singular-Factory library, the Singular-libfac library, and, for the Windows distributions the Cygwin DLL and the Cygwin tools (Cygwin), and the XEmacs editor (XEmacs). Their copyrights and licenses can be found in the accompanying files which are distributed along with these packages. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA (see @uref{http://www.gnu.org/copyleft/gpl.html,,GPL}) Please send any comments or bug reports to @email{singular@@mathematik.uni-kl.de}. Please register yourself as a @sc{Singular} user by using the registration form on the @sc{Singular} homepage @uref{http://www.singular.uni-kl.de}. If for some reason you cannot access the registration form, you can also register by sending an email to @email{singular@@mathematik.uni-kl.de} with subject line @code{register} and body containing the following data: your name, email address, organisation, country and platform(s). If you use Singular or parts thereof in a project and/or publish results that were partly obtained using @sc{Singular}, we ask you to cite @sc{Singular} and inform us thereof -- see @uref{http://www.singular.uni-kl.de/how_to_cite.html}, for information on how to cite Singular. @heading Availability The latest information about @sc{Singular} is always available from @uref{http://www.singular.uni-kl.de}. @ifset singularmanual The program @sc{Singular} and the above mentioned parts are available via anonymous ftp through the following addresses: @table @asis @item GMP, libreadline @copyright{} Free Software Foundation @* @uref{ftp://ftp.gnu.ai.mit.edu} or its mirrors @item MP @copyright{} Gray/Kajler/Wang, Kent State University @* @uref{http://www.symbolicnet.org/areas/protocols/mp.html} @item NTL @copyright{} Victor Shoup @* @uref{ftp://www.shoup.net} @item Singular-Factory @copyright{} Greuel/Stobbe, University of Kaiserslautern: @* @uref{ftp://www.mathematik.uni-kl.de/pub/Math/Singular/Factory} @item Singular-libfac @copyright{} Messollen, University of Saarbr@"ucken: @* @uref{ftp://www.mathematik.uni-kl.de/pub/Math/Singular/Libfac} @item @sc{Singular} binaries and sources @uref{ftp://www.mathematik.uni-kl.de/pub/Math/Singular/} or via a WWW brow@-ser from @uref{http://www.mathematik.uni-kl.de/ftp/pub/Math/Singular/} @item Cygwin @uref{http://www.cygwin.com/} @item Xemacs @uref{http://www.xemacs.org} @end table @end ifset @heading Acknowledgements The development of @sc{Singular} is directed and coordinated by Gert-Martin Greuel, Gerhard Pfister, and Hans Sch@"onemann. @cindex Greuel, Gert-Martin @cindex Pfister, Gerhard @cindex Sch@"onemann, Hans Currently, the @sc{Singular} team has the following members: Olaf Bachmann, Anne Fr@"ubis-Kr@"uger, Thomas Keilen, Kai Kr@"uger, Christoph Lossen, Viktor Levandovskyy, Wilfred Pohl, Mathias Schulze, Eric Westenberger, and Tim Wichmann. @cindex Bachmann, Olaf @cindex Fr@"ubis-Kr@"uger, Anne @cindex Keilen, Thomas @cindex Kr@"uger, Kai @cindex Lossen, Christoph @cindex Levandovskyy, Viktor @cindex Pohl, Wilfred @cindex Schulze, Mathias @cindex Westenberger, Eric @cindex Wichmann, Tim Past members of the @sc{Singular} team are: Hubert Grassmann, Wolfgang Neumann, Jens Schmidt, R@"udiger Stobbe. @cindex Grassmann, Hubert @cindex Neumann, Wolfgang @cindex Schmidt, Jens @cindex Stobbe, R@"udiger Further contributions to @sc{Singular} were made by: Thomas Bayer, Isabelle Bermejo, Stephan Endra@ss{}, Jose Ignacio Farran Martin, Wolfram Decker, Philippe Gimenez, Christian Gorzel, Agnes Heydtmann, Dietmar Hillebrand, Tobias Hirsch, Martin Lamm, Bernd Martin, Michael Me@ss{}ollen, Thomas N@"u@ss{}ler, Moritz Wenk. We should like to acknowledge the financial support given by the Volkswagen-Stiftung, the Deutsche Forschungsgemeinschaft and the Stiftung f@"ur Innovation des Landes Rheinland-Pfalz to the @sc{Singular} project. texi2html-1.82/test/singular_manual/INSTALL_unix.texi0000644000175000017500000002745011264347126024452 0ustar flichtenheldflichtenheld@comment -*-texinfo-*- @comment Id: INSTALL_unix.texi,v 1.1 2003/08/08 14:27:06 pertusus Exp $ @c FILE: INSTALL_unix.texi @c PURPOSE: Installation instruction for Singular on Unix @c @ifclear VERSION @include version.texi @end ifclear @ifclear singularmanual @majorheading Unix installation instructions for @sc{Singular} version @value{VERSION} @end ifclear @ifclear UNAME @set _UNAME @end ifclear @ifset UNAME @include uname.texi @end ifset To install @sc{Singular} on a @ifset UNAME @value{_UNAME} @end ifset @ifclear UNAME Unix @end ifclear platform, you need the following two archives: @table @code @item Singular-@value{VERSION}-share.tar.gz contains architecture independent data like documentation and libraries (alternatively, you may also download @code{Singular-@value{VERSION}-share.zip}). @item Singular-@value{VERSION}-@value{_UNAME}.tar.gz contains architecture dependent executables, like the @sc{Singular} program. @end table @ifclear UNAME @* @code{@value{_UNAME}} is a description of the processor and operating system for which @sc{Singular} is compiled (e.g, @code{ix86-Linux}). Please contact us if you can not find an appropriate architecture dependent archive. @end ifclear You can obtain these (and other) archives from @display @uref{ftp://www.mathematik.uni-kl.de/pub/Math/Singular}. @end display @include register.texi @heading To install SINGULAR Make sure that you have approximately 12MByte of free disk space and follow these steps. @enumerate @item Simply change to the directory in which you wish to install @sc{Singular} (usually wherever you install 3rd-party software), for example: @smallexample cd /usr/local or mkdir install;cd install (you do not need root privileges in this case) @end smallexample @sc{Singular} specific subdirectories will be created in such a way that multiple versions and multiple architecture dependent files of @sc{Singular} can peaceably coexist under the same @code{/usr/local} tree. @item Unpack the archives: @smallexample gzip -dc /Singular-@value{VERSION}-@value{_UNAME}.tar.gz | tar -pxf - gzip -dc /Singular-@value{VERSION}-share.tar.gz | tar -pxf - @end smallexample @c version 2-0-x does not have *-share.zip: @c If you have downloaded @code{Singular-@value{VERSION}-share.zip}, @c unpack with @c @smallexample @c unzip -u Singular-@value{VERSION}-share.zip @c @end smallexample This creates the the directory Singular/@value{VERSION} with @multitable @columnfractions .36 .64 @item (sub)directories @tab which contain @item @code{@value{_UNAME}} @tab @code{Singular} and @code{ESingular} executables @item @code{LIB} @tab @sc{Singular} libraries (@code{*.lib} files) @item @code{emacs} @tab files for the @sc{Singular} Emacs user interface @item @code{info} @tab info files of @sc{Singular} manual @item @code{html} @tab html files of @sc{Singular} manual @item @code{doc} @tab miscellaneous documentation files @item @code{examples} @tab @sc{Singular} examples (@code{*.sing} files) @end multitable For the executable to work, the directory layout must look pretty much like this; the executable looks for "sibling" directories at run-time to figure out where its @sc{Singular} libraries and on-line documentation files are. These constraints on the local directory layout are necessary to avoid having to hard-code pathnames into the executables, or require that environment variables be set before running the executable. In particular, you @strong{must not move or copy} the @sc{Singular} executables to another place, but use soft-links instead. @end enumerate The following steps are optional: @itemize @bullet @item Arrange that typing @code{Singular} at the shell prompt starts up the installed @sc{Singular} executable. If you have root permission, do: @smallexample ln -s `pwd`/Singular/@value{VERSION}/@value{_UNAME}/Singular /usr/local/bin/Singular-@value{VERSION} ln -s `pwd`/Singular/@value{VERSION}/@value{_UNAME}/ESingular /usr/local/bin/ESingular-@value{VERSION} ln -s /usr/local/bin/Singular-@value{VERSION} /usr/local/bin/Singular ln -s /usr/local/bin/ESingular-@value{VERSION} /usr/local/bin/ESingular @end smallexample Otherwise, append the directory @code{`pwd`/Singular/@value{VERSION}/@value{_UNAME}/} to your @code{$PATH} environment variable. For the @code{csh} (or, @code{tcsh}) shell do: @smallexample set path=(`pwd`/Singular/@value{VERSION}/@value{_UNAME} $path) @end smallexample For the @code{bash} (or, @code{ksh}) shell do: @smallexample export PATH=`pwd`/Singular/@value{VERSION}/@value{_UNAME}/:$PATH @end smallexample You also might want to adjust your personal start-up files (@code{~/.cshrc} for @code{csh}, @code{~/.tcshrc} for @code{tcsh}, or @code{~/.profile} for @code{bash}) accordingly, so that the @code{$PATH} variable is set automatically each time you login. @strong{IMPORTANT:} Do @emph{never} move or copy the file @code{Singular/@value{VERSION}/@value{_UNAME}/Singular} to another place, but use soft-links instead. @item If you wish to use any of following features of @sc{Singular}, make sure that the respective programs are installed on your system: @multitable @columnfractions .5 .5 @item @strong{Feature} @tab @strong{Requires} @item running @code{ESingular}, or @code{Singular} within Emacs @tab @uref{http://www.fsf.org/software/emacs/emacs.html,,Emacs} version 20 or higher, or, @uref{http://www.xemacs.org,,XEmacs} version 20.3 or higher (ESingular is only included in the Linux distribution, on other Unix platforms you can download the @uref{ftp://www.mathematik.uni-kl.de/pub/Math/Singular/src/,, Singular emacs lisp files} but we give no warranties for specific platforms). @item on-line @code{html} help @tab @uref{http://www.netscape.com,,netscape} browser @item on-line @code{info} help @tab @uref{http://www.texinfo.org,,info}, or @uref{http://math-www.uni-paderborn.de/~axel/tkinfo/,,tkinfo} texinfo browser programs @item TAB completion and history mechanism of ASCII-terminal interface @tab shared @uref{ftp://ftp.de.uu.net/pub/gnu/readline/,,readline} library, i.e. @code{/usr/lib/libreadline.so} @item visualization of curves and surfaces @tab @uref{http://www.mathematik.uni-mainz.de/AlgebraischeGeometrie/surf/surf.shtml,,surf} version 0.9 or higher (only available for Linux and Solaris). @end multitable You may download most of these programs from @display @uref{ftp://www.mathematik.uni-kl.de/pub/Math/Singular/utils/}. @end display @item Customize the on-line help system: By default, on-line help is displayed in the @code{html} format using the @code{netscape} program. However, this behavior can be customized in several ways using the @sc{Singular} commands @code{system("--browser",)} and @code{system("--allow-net", 1)} (or, by starting up @sc{Singular} with the respective command line options). In particular, creating the file @code{Singular/@value{VERSION}/LIB/.singularrc} and putting the @sc{Singular} command @smallexample system("--allow-net", 1); @end smallexample in it, allows the on-line help system to fetch its @code{html} pages from @uref{http://www.singular.uni-kl.de, Singular's WWW home site} in case its local html pages are not found. That is, you may delete your local html pages, after setting this option. See also @ifset singularmanual @ref{The online help system}, @ref{Command line options}, and @ref{Startup sequence}, @end ifset @ifclear singularmanual the sections @emph{The online help system}, @emph{Command line options}, and @emph{Startup sequence} in the @sc{Singular} manual @end ifclear for more details on customizing the on-line help system. @item Add the line @smallexample * Singular:(singular.hlp). A system for polynomial computations @end smallexample to your system-wide @code{dir} file (usually @code{/usr/info/dir} or @code{/usr/local/info/dir} and copy or soft-link the file @code{Singular/@value{VERSION}/info/singular.hlp} to the directory of your @code{dir} file. @*This assures that the @sc{Singular} manual can be accessed from stand-alone texinfo browser programs such as @code{info} or @code{Emacs}. (It is not necessary for the use of the help system from within @code{Singular}.) @end itemize @heading Troubleshooting @itemize @bullet @item General: @sc{Singular} can not find its libraries or on-line help @enumerate @item Make sure that you have read and/or execute permission the files and directories of the Singular distribution. If in doubt, @code{cd} to the directory where you unpacked @sc{Singular}, and do (as root, if necessary): @smallexample chmod -R a+rX Singular @end smallexample @item Start up @sc{Singular}, and issue the command @code{system("Singular");}. If this does not return the correct and expanded location of the @sc{Singular} executable, then you found a bug in @sc{Singular}, which we ask you to report (see below). @item Check whether the directories containing the libraries and on-line help files can be found by @sc{Singular}: If @code{$bindir} denotes the directory where the @sc{Singular} executable resides, then @sc{Singular} looks for library files as follows: @* (0) the current directory @* (1) all dirs of the environment variable SINGULARPATH @* (2) @code{$bindir/LIB} @* (3) @code{$bindir/../LIB} @* (4) @code{/usr/local/Singular/@value{VERSION}/LIB} @* (4) @code{/usr/local/Singular/LIB} @* The on-line @code{info} files need to be at @code{$bindir/../info} and the @code{html} pages at @code{$bindir/../html}. @end enumerate You can inspect the found library and @code{info}/@code{html} directories by starting up @sc{Singular} with the @code{--version} option, or by issuing the @sc{Singular} command @code{system("--version");}. @item Under SuSE-Linux, @sc{ESingular} does not display a prompt: @cindex SuSE, ESingular bug @cindex ESingular, no prompt @cindex bug, ESingular This is due to the very restrictive access rights of @code{/dev/pty*} of the standard @uref{http:/www.suse.de,SuSE} distribution (starting from version 6.3 on). As root, do one of the following: Either @example chmod 666 /dev/pty* @end example or, @example chmod g+s $(which emacs) chgrp tty $(which emacs) chmod g+s $(which xemacs) chgrp tty $(which xemacs) @end example See also @uref{http://sdb.suse.de/sdb/de/html/ke_devpts-63.html} for details. @item For @code{HPUX} systems: @*The /etc/termcap files which are pre-installed on these systems are broken which leads to messages like @example Name collision between 9826 9836 @end example when @sc{Singular} is started. To fix this, you can get fixed termcap files from @uref{ftp://www.mathematik.uni-kl.de/pub/Math/Singular/utils} by downloading the files termcap- and either replace your /etc/termcap file by the file found there, or view, and redo the respective changes by @code{diff}'ing the downloaded and the original file. @item For @code{ix86-Linux} systems: @*Due to some incompatibilities of shared libraries, the start-up of @sc{Singular} might fail with messages like @example Can not find shared library ... @end example For DEBIAN systems, try to do @code{ln -s /usr/lib/libncurses.so /usr/lib/libncurses.so.4}. @*If this fails (and on other systems) download and install @code{Singular-@value{VERSION}-ix86-Linux-static.tar.gz}. @item For @code{AIX} systems: @*The default @code{info} program of the system is not GNU's texinfo browser which is used to display the on-line documentation in the @code{info} format. Therefore, the distribution of the AIX executable already contains the @code{info} browser program. If you remove this program, make sure that the GNU @code{info} program is executed if you call '@code{info}' from your shell. @item For any other troubles: @*Please send an email to @email{singular@@mathematik.uni-kl.de} and include the header which is displayed by starting up @sc{Singular} with the @code{-v} option, and a description of your machine (issue the command @code{uname -a} on your shell) in your report. @end itemize @include info.texi @ifclear singularmanual GOOD LUCK and ENJOY! Your @sc{Singular} team. @end ifclear texi2html-1.82/test/singular_manual/d2t_singular/0000755000175000017500000000000011264347126023773 5ustar flichtenheldflichtenheldtexi2html-1.82/test/singular_manual/d2t_singular/standard_lib.tex0000644000175000017500000005773111264347126027160 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/standard_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/standard_lib.doc INSTEAD @c library version: (1.58.2.9,2003/06/16) @c library file: ../Singular/LIB/standard.lib @cindex standard.lib @cindex standard_lib @table @asis @item @strong{Library:} standard.lib @item @strong{Purpose:} Procedures which are always loaded at Start-up @end table @strong{Procedures:} @menu * stdfglm:: standard basis of ideal via fglm [and ordering ord] * stdhilb:: standard basis of ideal using the Hilbert function * groebner:: standard basis using a heuristically chosen method * quot:: quotient using heuristically chosen method * res:: free resolution of ideal or module * sprintf:: returns formatted string * fprintf:: writes formatted string to link * printf:: displays formatted string @end menu @c ---end content LibInfo--- @c ------------------- stdfglm ------------- @node stdfglm, stdhilb,, standard_lib @subsubsection stdfglm @cindex stdfglm @c ---content stdfglm--- Procedure from library @code{standard.lib} (@pxref{standard_lib}). @table @asis @item @strong{Syntax:} @code{stdfglm (} ideal_expression @code{)} @* @code{stdfglm (} ideal_expression@code{,} string_expression @code{)} @item @strong{Type:} ideal @item @strong{Purpose:} computes the standard basis of the ideal in the basering via @code{fglm} (from the ordering given as the second argument to the ordering of the basering).@* If no second argument is given, "dp" is used. @cindex fglm @end table @strong{Example:} @smallexample @c reused example stdfglm d2t_singular/standard_lib.doc:52 ring r=0,(x,y,z),lp; ideal i=y3+x2,x2y+x2,x3-x2,z4-x2-y; ideal i1=stdfglm(i); //uses fglm from "dp" to "lp" i1; @expansion{} i1[1]=z12 @expansion{} i1[2]=yz4-z8 @expansion{} i1[3]=y2+y-z8-z4 @expansion{} i1[4]=xy-xz4-y+z4 @expansion{} i1[5]=x2+y-z4 ideal i2=stdfglm(i,"Dp"); //uses fglm from "Dp" to "lp" i2; @expansion{} i2[1]=z12 @expansion{} i2[2]=yz4-z8 @expansion{} i2[3]=y2+y-z8-z4 @expansion{} i2[4]=xy-xz4-y+z4 @expansion{} i2[5]=x2+y-z4 @c end example stdfglm d2t_singular/standard_lib.doc:52 @end smallexample @c inserted refs from d2t_singular/standard_lib.doc:61 @ifinfo @menu See also: * fglm:: * groebner:: * std:: * stdhilb:: @end menu @end ifinfo @iftex @strong{See also:} @ref{fglm}; @ref{groebner}; @ref{std}; @ref{stdhilb}. @end iftex @c end inserted refs from d2t_singular/standard_lib.doc:61 @c ---end content stdfglm--- @c ------------------- stdhilb ------------- @node stdhilb, groebner, stdfglm, standard_lib @subsubsection stdhilb @cindex stdhilb @c ---content stdhilb--- Procedure from library @code{standard.lib} (@pxref{standard_lib}). @table @asis @item @strong{Syntax:} @code{stdhilb (} ideal_expression @code{)} @* @code{stdhilb (} ideal_expression@code{,} intvec_expression @code{)} @item @strong{Type:} ideal @item @strong{Purpose:} computes the standard basis of the homogeneous ideal in the basering, via a Hilbert driven standard basis computation.@* An optional second argument will be used as 1st Hilbert function. @item @strong{Assume:} The optional second argument is the first Hilbert series as computed by @code{hilb}. @cindex Hilbert function @end table @strong{Example:} @smallexample @c reused example stdhilb d2t_singular/standard_lib.doc:95 ring r=0,(x,y,z),dp; ideal i=y3+x2,x2y+x2,x3-x2,z4-x2-y; ideal i1=stdhilb(i); i1; @expansion{} i1[1]=y3+x2 @expansion{} i1[2]=x2y+x2 @expansion{} i1[3]=x3-x2 @expansion{} i1[4]=z4-x2-y // the latter computation is equivalent to: intvec v=hilb(i,1); @expansion{} // ** i is no standardbasis ideal i2=stdhilb(i,v); i2; @expansion{} i2[1]=y3+x2 @expansion{} i2[2]=x2y+x2 @expansion{} i2[3]=x3-x2 @expansion{} i2[4]=z4-x2-y @c end example stdhilb d2t_singular/standard_lib.doc:95 @end smallexample @c inserted refs from d2t_singular/standard_lib.doc:104 @ifinfo @menu See also: * groebner:: * std:: * stdfglm:: @end menu @end ifinfo @iftex @strong{See also:} @ref{groebner}; @ref{std}; @ref{stdfglm}. @end iftex @c end inserted refs from d2t_singular/standard_lib.doc:104 @c ---end content stdhilb--- @c ------------------- groebner ------------- @node groebner, quot, stdhilb, standard_lib @subsubsection groebner @cindex groebner @c ---content groebner--- Procedure from library @code{standard.lib} (@pxref{standard_lib}). @table @asis @item @strong{Syntax:} @code{groebner (} ideal_expression @code{)} @* @code{groebner (} module_expression @code{)} @* @code{groebner (} ideal_expression@code{,} int_expression @code{)} @* @code{groebner (} module_expression@code{,} int_expression @code{)} @item @strong{Type:} type of the first argument @item @strong{Purpose:} computes the standard basis of the first argument @code{I} (ideal or module), by a heuristically chosen method: if the ordering of the current ring is a local ordering, or if it is a non-block ordering and the current ring has no parameters, then @code{std(I)} is returned. Otherwise, @code{I} is mapped into a ring with no parameters and ordering dp, where its Hilbert series is computed. This is followed by a Hilbert-series based std computation in the original ring. @item @strong{Note:} If a 2nd argument @code{wait} is given, then the computation proceeds at most @code{wait} seconds. That is, if no result could be computed in @code{wait} seconds, then the computation is interrupted, 0 is returned, a warning message is displayed, and the global variable @code{groebner_error} is defined. @cindex time limit on computations @cindex MP, groebner basis computations @end table @strong{Example:} @smallexample @c reused example groebner d2t_singular/standard_lib.doc:149 ring r=0,(a,b,c,d),lp; option(prot); ideal i=a+b+c+d,ab+ad+bc+cd,abc+abd+acd+bcd,abcd-1; // cyclic 4 groebner(i); @expansion{} std in (0),(a,b,c,d,@@t),(dp,C) @expansion{} [63:1]1(3)s2(2)s3s4-s5ss6-s7-- @expansion{} product criterion:8 chain criterion:5 @expansion{} std with hilb in (0),(a,b,c,d,@@t),(lp(4),C) @expansion{} [63:1]1(3)s2(2)s3s4-s5ss6shhhh8shh @expansion{} product criterion:9 chain criterion:8 @expansion{} hilbert series criterion:6 @expansion{} dehomogenization @expansion{} imap to original ring @expansion{} simplification @expansion{} _[1]=c2d6-c2d2-d4+1 @expansion{} _[2]=c3d2+c2d3-c-d @expansion{} _[3]=bd4-b+d5-d @expansion{} _[4]=bc-bd5+c2d4+cd-d6-d2 @expansion{} _[5]=b2+2bd+d2 @expansion{} _[6]=a+b+c+d ring rp=(0,a,b),(c,d), lp; ideal i=imap(r,i); ideal j=groebner(i); @expansion{} std in 0,(c,d,a,b,@@t),(dp,C) @expansion{} [63:1]1(3)s2(2)s3s4-s5ss6-s7-- @expansion{} product criterion:8 chain criterion:5 @expansion{} std with hilb in (0),(c,d,a,b,@@t),(lp(2),C, dp(3)) @expansion{} [63:3]1(3)s2(2)s3s4-s5ss6shhhh8shh @expansion{} product criterion:9 chain criterion:8 @expansion{} hilbert series criterion:6 @expansion{} dehomogenization @expansion{} imap to original ring @expansion{} simplification option(noprot); j; simplify(j,1); std(i); @expansion{} j[1]=(a3b2+a2b3-a-b) @expansion{} _[1]=1 @expansion{} _[1]=1 if (system("with","MP")) @{groebner(i,0);@} @expansion{} // ** groebner did not finish @expansion{} _[1]=0 defined(groebner_error); @expansion{} 1 @c end example groebner d2t_singular/standard_lib.doc:149 @end smallexample @c inserted refs from d2t_singular/standard_lib.doc:163 @ifinfo @menu See also: * std:: * stdfglm:: * stdhilb:: @end menu @end ifinfo @iftex @strong{See also:} @ref{std}; @ref{stdfglm}; @ref{stdhilb}. @end iftex @c end inserted refs from d2t_singular/standard_lib.doc:163 @c ---end content groebner--- @c ------------------- quot ------------- @node quot, res, groebner, standard_lib @subsubsection quot @cindex quot @c ---content quot--- Procedure from library @code{standard.lib} (@pxref{standard_lib}). @table @asis @item @strong{Syntax:} @code{quot (} module_expression@code{,} module_expression @code{)} @*@code{quot (} module_expression@code{,} module_expression@code{,} int_expression @code{)} @*@code{quot (} ideal_expression@code{,} ideal_expression @code{)} @*@code{quot (} ideal_expression@code{,} ideal_expression@code{,} int_expression @code{)} @item @strong{Type:} ideal @item @strong{Syntax:} @code{quot (} module_expression@code{,} ideal_expression @code{)} @item @strong{Type:} module @item @strong{Purpose:} computes the quotient of the 1st and the 2nd argument. If a 3rd argument 'n' is given the n-th method is used (n=1...5). @end table @strong{Example:} @smallexample @c reused example quot d2t_singular/standard_lib.doc:202 ring r=181,(x,y,z),(c,ls); ideal id1=maxideal(4); ideal id2=x2+xyz,y2-z3y,z3+y5xz; option(prot); ideal id3=quotient(id1,id2); @expansion{} [1023:1]4(14)s(13)s(12)s(11)s(10)s(9)s(8)s(7)s(6)s(5)s(4)s(3)s(2)sss @expansion{} product criterion:12 chain criterion:0 @expansion{} @{3@}[1023:3]8(2)s(4)s(5)s9s.s.s.s.s.s @expansion{} product criterion:0 chain criterion:39 id3; @expansion{} id3[1]=z2 @expansion{} id3[2]=yz @expansion{} id3[3]=y2 @expansion{} id3[4]=xz @expansion{} id3[5]=xy @expansion{} id3[6]=x2 ideal id4=quot(id1,id2,1); @expansion{} [1023:2]4(14)s(13)s(12)s(11)s(10)s(9)s(8)s(7)s(6)s(5)s(4)s(3)s(2)sss @expansion{} product criterion:0 chain criterion:0 @expansion{} (S:3)rtrtrt @expansion{} @{1@}[1023:3]4(2)s(4)s(5)s5s.s(3)s(2)sss @expansion{} product criterion:0 chain criterion:39 @expansion{} @{1@}[1023:3]4(5)s(4)s(3)s(2)sss @expansion{} product criterion:0 chain criterion:9 @expansion{} [255:3]3(11)s(10)sss(9)s(10)s(8)ss(7)s(8)s(6)s(7)s4(5)----- @expansion{} product criterion:12 chain criterion:9 @expansion{} @{1@}[1023:3]4(2)sss @expansion{} product criterion:0 chain criterion:12 @expansion{} [255:3]2(8)s(7)s(6)s3(5)ssssss4----- @expansion{} product criterion:15 chain criterion:3 id4; @expansion{} id4[1]=z2 @expansion{} id4[2]=yz @expansion{} id4[3]=xz @expansion{} id4[4]=y2 @expansion{} id4[5]=xy @expansion{} id4[6]=x2 ideal id5=quot(id1,id2,2); @expansion{} [1023:2]4(14)s(13)s(12)s(11)s(10)s(9)s(8)s(7)s(6)s(5)s(4)s(3)s(2)sss @expansion{} product criterion:0 chain criterion:0 @expansion{} (S:3)rtrtrt @expansion{} @{1@}[1023:3]4(2)sss @expansion{} product criterion:0 chain criterion:12 @expansion{} @{1@}[1023:3]4(5)s(4)s(3)s(2)sss @expansion{} product criterion:0 chain criterion:9 @expansion{} [255:3]2(8)s(7)s(6)s3(5)s(4)s(3)s(2)sss @expansion{} product criterion:15 chain criterion:0 id5; @expansion{} id5[1]=z2 @expansion{} id5[2]=yz @expansion{} id5[3]=xz @expansion{} id5[4]=y2 @expansion{} id5[5]=xy @expansion{} id5[6]=x2 @c end example quot d2t_singular/standard_lib.doc:202 @end smallexample @c inserted refs from d2t_singular/standard_lib.doc:215 @ifinfo @menu See also: * quotient:: @end menu @end ifinfo @iftex @strong{See also:} @ref{quotient}. @end iftex @c end inserted refs from d2t_singular/standard_lib.doc:215 @c ---end content quot--- @c ------------------- res ------------- @node res, sprintf, quot, standard_lib @subsubsection res @cindex res @c ---content res--- Procedure from library @code{standard.lib} (@pxref{standard_lib}). @c we do texinfo here: @cindex resolution, computation of @table @code @item @strong{Syntax:} @code{res (} ideal_expression@code{,} int_expression @code{[,} any_expression @code{])} @*@code{res (} module_expression@code{,} int_expression @code{[,} any_expression @code{])} @item @strong{Type:} resolution @item @strong{Purpose:} computes a (possibly minimal) free resolution of an ideal or module using a heuristically chosen method. @* The second (int) argument (say, @code{k}) specifies the length of the resolution. If it is not positive then @code{k} is assumed to be the number of variables of the basering. @* If a third argument is given, the returned resolution is minimized. Depending on the input, the returned resolution is computed using the following methods: @table @asis @item @strong{quotient rings:} @code{nres} (classical method using syzygies) , see @ref{nres}. @item @strong{homogeneous ideals and k=0:} @code{lres} (La'Scala's method), see @ref{lres}. @item @strong{not minimized resolution and (homogeneous input with k not 0, or local rings):} @code{sres} (Schreyer's method), see @ref{sres}. @item @strong{all other inputs:} @code{mres} (classical method), see @ref{mres}. @end table @item @strong{Note:} Accessing single elements of a resolution may require that some partial computations have to be finished and may therefore take some time. @end table @c inserted refs from d2t_singular/standard_lib.doc:263 @ifinfo @menu See also * betti:: * hres:: * ideal:: * lres:: * minres:: * module:: * mres:: * nres:: * resolution:: * sres:: @end menu @end ifinfo @iftex See also @ref{betti}; @ref{hres}; @ref{ideal}; @ref{lres}; @ref{minres}; @ref{module}; @ref{mres}; @ref{nres}; @ref{resolution}; @ref{sres}. @end iftex @c end inserted refs from d2t_singular/standard_lib.doc:263 @strong{Example:} @smallexample @c reused example res d2t_singular/standard_lib.doc:279 ring r=0,(x,y,z),dp; ideal i=xz,yz,x3-y3; def l=res(i,0); // homogeneous ideal: uses lres l; @expansion{} 1 3 2 @expansion{} r <-- r <-- r @expansion{} @expansion{} 0 1 2 @expansion{} resolution not minimized yet @expansion{} print(betti(l), "betti"); // input to betti may be of type resolution @expansion{} 0 1 2 @expansion{} ------------------------ @expansion{} 0: 1 - - @expansion{} 1: - 2 1 @expansion{} 2: - 1 1 @expansion{} ------------------------ @expansion{} total: 1 3 2 l[2]; // element access may take some time @expansion{} _[1]=-x*gen(1)+y*gen(2) @expansion{} _[2]=-x2*gen(2)+y2*gen(1)+z*gen(3) i=i,x+1; l=res(i,0); // inhomogeneous ideal: uses mres l; @expansion{} 1 3 3 1 @expansion{} r <-- r <-- r <-- r @expansion{} @expansion{} 0 1 2 3 @expansion{} resolution not minimized yet @expansion{} ring rs=0,(x,y,z),ds; ideal i=imap(r,i); def l=res(i,0); // local ring not minimized: uses sres l; @expansion{} 1 1 @expansion{} rs <-- rs @expansion{} @expansion{} 0 1 @expansion{} resolution not minimized yet @expansion{} res(i,0,0); // local ring and minimized: uses mres @expansion{} 1 1 @expansion{} rs <-- rs @expansion{} @expansion{} 0 1 @expansion{} @c end example res d2t_singular/standard_lib.doc:279 @end smallexample @c ---end content res--- @c ------------------- sprintf ------------- @node sprintf, fprintf, res, standard_lib @subsubsection sprintf @cindex sprintf @c ---content sprintf--- Procedure from library @code{standard.lib} (@pxref{standard_lib}). @table @asis @item @strong{Syntax:} @code{sprintf (} string_expression @code{[,} any_expressions @code{] )} @item @strong{Return:} string @item @strong{Purpose:} @code{sprintf(fmt,...);} performs output formatting. The first argument is a format control string. Additional arguments may be required, depending on the content of the control string. A series of output characters is generated as directed by the control string; these characters are returned as a string. @* The control string @code{fmt} is simply text to be copied, except that the string may contain conversion specifications.@* Do @code{help print;} for a listing of valid conversion specifications. As an addition to the conversions of @code{print}, the @code{%n} and @code{%2} conversion specification does not consume an additional argument, but simply generates a newline character. @item @strong{Note:} If one of the additional arguments is a list, then it should be enclosed once more into a @code{list()} command, since passing a list as an argument flattens the list by one level. @end table @strong{Example:} @smallexample @c reused example sprintf d2t_singular/standard_lib.doc:335 ring r=0,(x,y,z),dp; module m=[1,y],[0,x+z]; intmat M=betti(mres(m,0)); list l = r, m, M; string s = sprintf("s:%s,%n l:%l", 1, 2); s; @expansion{} s:1, @expansion{} l:int(2) s = sprintf("s:%n%s", l); s; @expansion{} s: @expansion{} (0),(x,y,z),(dp(3),C) s = sprintf("s:%2%s", list(l)); s; @expansion{} s: @expansion{} (0),(x,y,z),(dp(3),C),y*gen(2)+gen(1),x*gen(2)+z*gen(2),1,1 s = sprintf("2l:%n%2l", list(l)); s; @expansion{} 2l: @expansion{} list("(0),(x,y,z),(dp(3),C)", @expansion{} module(y*gen(2)+gen(1), @expansion{} x*gen(2)+z*gen(2)), @expansion{} intmat(intvec(1,1 ),1,2)) @expansion{} s = sprintf("%p", list(l)); s; @expansion{} [1]: @expansion{} // characteristic : 0 @expansion{} // number of vars : 3 @expansion{} // block 1 : ordering dp @expansion{} // : names x y z @expansion{} // block 2 : ordering C @expansion{} [2]: @expansion{} _[1]=y*gen(2)+gen(1) @expansion{} _[2]=x*gen(2)+z*gen(2) @expansion{} [3]: @expansion{} 1,1 @expansion{} s = sprintf("%;", list(l)); s; @expansion{} [1]: @expansion{} // characteristic : 0 @expansion{} // number of vars : 3 @expansion{} // block 1 : ordering dp @expansion{} // : names x y z @expansion{} // block 2 : ordering C @expansion{} [2]: @expansion{} _[1]=y*gen(2)+gen(1) @expansion{} _[2]=x*gen(2)+z*gen(2) @expansion{} [3]: @expansion{} 1,1 @expansion{} s = sprintf("%b", M); s; @expansion{} 0 1 @expansion{} ------------------ @expansion{} 0: 1 1 @expansion{} ------------------ @expansion{} total: 1 1 @expansion{} @c end example sprintf d2t_singular/standard_lib.doc:335 @end smallexample @c inserted refs from d2t_singular/standard_lib.doc:349 @ifinfo @menu See also: * fprintf:: * print:: * printf:: * string:: @end menu @end ifinfo @iftex @strong{See also:} @ref{fprintf}; @ref{print}; @ref{printf}; @ref{string}. @end iftex @c end inserted refs from d2t_singular/standard_lib.doc:349 @c ---end content sprintf--- @c ------------------- fprintf ------------- @node fprintf, printf, sprintf, standard_lib @subsubsection fprintf @cindex fprintf @c ---content fprintf--- Procedure from library @code{standard.lib} (@pxref{standard_lib}). @table @asis @item @strong{Syntax:} @code{fprintf (} link_expression@code{,} string_expression @code{[,} any_expressions@code{] )} @item @strong{Return:} none @item @strong{Purpose:} @code{fprintf(l,fmt,...);} performs output formatting. The second argument is a format control string. Additional arguments may be required, depending on the content of the control string. A series of output characters is generated as directed by the control string; these characters are written to the link l. The control string @code{fmt} is simply text to be copied, except that the string may contain conversion specifications.@* Do @code{help print;} for a listing of valid conversion specifications. As an addition to the conversions of @code{print}, the @code{%n} and @code{%2} conversion specification does not consume an additional argument, but simply generates a newline character. @item @strong{Note:} If one of the additional arguments is a list, then it should be enclosed once more into a @code{list()} command, since passing a list as an argument flattens the list by one level. @end table @strong{Example:} @smallexample @c reused example fprintf d2t_singular/standard_lib.doc:393 ring r=0,(x,y,z),dp; module m=[1,y],[0,x+z]; intmat M=betti(mres(m,0)); list l=r,m,M; link li=""; // link to stdout fprintf(li,"s:%s,l:%l",1,2); @expansion{} s:1,l:int(2) fprintf(li,"s:%s",l); @expansion{} s:(0),(x,y,z),(dp(3),C) fprintf(li,"s:%s",list(l)); @expansion{} s:(0),(x,y,z),(dp(3),C),y*gen(2)+gen(1),x*gen(2)+z*gen(2),1,1 fprintf(li,"2l:%2l",list(l)); @expansion{} 2l:list("(0),(x,y,z),(dp(3),C)", @expansion{} module(y*gen(2)+gen(1), @expansion{} x*gen(2)+z*gen(2)), @expansion{} intmat(intvec(1,1 ),1,2)) @expansion{} fprintf(li,"%p",list(l)); @expansion{} [1]: @expansion{} // characteristic : 0 @expansion{} // number of vars : 3 @expansion{} // block 1 : ordering dp @expansion{} // : names x y z @expansion{} // block 2 : ordering C @expansion{} [2]: @expansion{} _[1]=y*gen(2)+gen(1) @expansion{} _[2]=x*gen(2)+z*gen(2) @expansion{} [3]: @expansion{} 1,1 @expansion{} fprintf(li,"%;",list(l)); @expansion{} [1]: @expansion{} // characteristic : 0 @expansion{} // number of vars : 3 @expansion{} // block 1 : ordering dp @expansion{} // : names x y z @expansion{} // block 2 : ordering C @expansion{} [2]: @expansion{} _[1]=y*gen(2)+gen(1) @expansion{} _[2]=x*gen(2)+z*gen(2) @expansion{} [3]: @expansion{} 1,1 @expansion{} fprintf(li,"%b",M); @expansion{} 0 1 @expansion{} ------------------ @expansion{} 0: 1 1 @expansion{} ------------------ @expansion{} total: 1 1 @expansion{} @c end example fprintf d2t_singular/standard_lib.doc:393 @end smallexample @c inserted refs from d2t_singular/standard_lib.doc:408 @ifinfo @menu See also: * print:: * printf:: * sprintf:: * string:: @end menu @end ifinfo @iftex @strong{See also:} @ref{print}; @ref{printf}; @ref{sprintf}; @ref{string}. @end iftex @c end inserted refs from d2t_singular/standard_lib.doc:408 @c ---end content fprintf--- @c ------------------- printf ------------- @node printf,, fprintf, standard_lib @subsubsection printf @cindex printf @c ---content printf--- Procedure from library @code{standard.lib} (@pxref{standard_lib}). @table @asis @item @strong{Syntax:} @code{printf (} string_expression @code{[,} any_expressions@code{] )} @item @strong{Return:} none @item @strong{Purpose:} @code{printf(fmt,...);} performs output formatting. The first argument is a format control string. Additional arguments may be required, depending on the content of the control string. A series of output characters is generated as directed by the control string; these characters are displayed (i.e., printed to standard out). @* The control string @code{fmt} is simply text to be copied, except that the string may contain conversion specifications. @* Do @code{help print;} for a listing of valid conversion specifications. As an addition to the conversions of @code{print}, the @code{%n} and @code{%2} conversion specification does not consume an additional argument, but simply generates a newline character. @item @strong{Note:} If one of the additional arguments is a list, then it should be enclosed once more into a @code{list()} command, since passing a list as an argument flattens the list by one level. @end table @strong{Example:} @smallexample @c reused example printf d2t_singular/standard_lib.doc:450 ring r=0,(x,y,z),dp; module m=[1,y],[0,x+z]; intmat M=betti(mres(m,0)); list l=r,m,M; printf("s:%s,l:%l",1,2); @expansion{} s:1,l:int(2) printf("s:%s",l); @expansion{} s:(0),(x,y,z),(dp(3),C) printf("s:%s",list(l)); @expansion{} s:(0),(x,y,z),(dp(3),C),y*gen(2)+gen(1),x*gen(2)+z*gen(2),1,1 printf("2l:%2l",list(l)); @expansion{} 2l:list("(0),(x,y,z),(dp(3),C)", @expansion{} module(y*gen(2)+gen(1), @expansion{} x*gen(2)+z*gen(2)), @expansion{} intmat(intvec(1,1 ),1,2)) @expansion{} printf("%p",list(l)); @expansion{} [1]: @expansion{} // characteristic : 0 @expansion{} // number of vars : 3 @expansion{} // block 1 : ordering dp @expansion{} // : names x y z @expansion{} // block 2 : ordering C @expansion{} [2]: @expansion{} _[1]=y*gen(2)+gen(1) @expansion{} _[2]=x*gen(2)+z*gen(2) @expansion{} [3]: @expansion{} 1,1 @expansion{} printf("%;",list(l)); @expansion{} [1]: @expansion{} // characteristic : 0 @expansion{} // number of vars : 3 @expansion{} // block 1 : ordering dp @expansion{} // : names x y z @expansion{} // block 2 : ordering C @expansion{} [2]: @expansion{} _[1]=y*gen(2)+gen(1) @expansion{} _[2]=x*gen(2)+z*gen(2) @expansion{} [3]: @expansion{} 1,1 @expansion{} printf("%b",M); @expansion{} 0 1 @expansion{} ------------------ @expansion{} 0: 1 1 @expansion{} ------------------ @expansion{} total: 1 1 @expansion{} @c end example printf d2t_singular/standard_lib.doc:450 @end smallexample @c inserted refs from d2t_singular/standard_lib.doc:464 @ifinfo @menu See also: * fprintf:: * print:: * sprintf:: * string:: @end menu @end ifinfo @iftex @strong{See also:} @ref{fprintf}; @ref{print}; @ref{sprintf}; @ref{string}. @end iftex @c end inserted refs from d2t_singular/standard_lib.doc:464 @c ---end content printf--- texi2html-1.82/test/singular_manual/d2t_singular/poly_lib.tex0000644000175000017500000006206011264347126026332 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/poly_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/poly_lib.doc INSTEAD @c library version: (1.33.2.6,2003/02/10) @c library file: ../Singular/LIB/poly.lib @cindex poly.lib @cindex poly_lib @table @asis @item @strong{Library:} poly.lib @item @strong{Purpose:} Procedures for Manipulating Polys, Ideals, Modules @item @strong{Authors:} O. Bachmann, G.-M: Greuel, A. Fruehbis @end table @strong{Procedures:} @menu * cyclic:: ideal of cyclic n-roots * katsura:: katsura [i] ideal * freerank:: rank of coker(input) if coker is free else -1 * is_homog:: int, =1 resp. =0 if input is homogeneous resp. not * is_zero:: int, =1 resp. =0 if coker(input) is 0 resp. not * lcm:: lcm of given generators of ideal * maxcoef:: maximal length of coefficient occurring in poly/... * maxdeg:: int/intmat = degree/s of terms of maximal order * maxdeg1:: int = [weighted] maximal degree of input * mindeg:: int/intmat = degree/s of terms of minimal order * mindeg1:: int = [weighted] minimal degree of input * normalize:: normalize poly/... such that leading coefficient is 1 * rad_con:: check radical containment of poly p in ideal I * content:: content of polynomial/vector f * numerator:: numerator of number n * denominator:: denominator of number n * mod2id:: conversion of a module M to an ideal * id2mod:: conversion inverse to mod2id * substitute:: substitute in I variables by polynomials * subrInterred:: interred w.r.t. a subset of variables * hilbPoly:: Hilbert polynomial of basering/I @end menu @c ---end content LibInfo--- @c ------------------- cyclic ------------- @node cyclic, katsura,, poly_lib @subsubsection cyclic @cindex cyclic @c ---content cyclic--- Procedure from library @code{poly.lib} (@pxref{poly_lib}). @table @asis @item @strong{Usage:} cyclic(n); n integer @item @strong{Return:} ideal of cyclic n-roots from 1-st n variables of basering @end table @strong{Example:} @smallexample @c computed example cyclic d2t_singular/poly_lib.doc:59 LIB "poly.lib"; ring r=0,(u,v,w,x,y,z),lp; cyclic(nvars(basering)); @expansion{} _[1]=u+v+w+x+y+z @expansion{} _[2]=uv+uz+vw+wx+xy+yz @expansion{} _[3]=uvw+uvz+uyz+vwx+wxy+xyz @expansion{} _[4]=uvwx+uvwz+uvyz+uxyz+vwxy+wxyz @expansion{} _[5]=uvwxy+uvwxz+uvwyz+uvxyz+uwxyz+vwxyz @expansion{} _[6]=uvwxyz-1 homog(cyclic(5),z); @expansion{} _[1]=u+v+w+x+y @expansion{} _[2]=uv+uy+vw+wx+xy @expansion{} _[3]=uvw+uvy+uxy+vwx+wxy @expansion{} _[4]=uvwx+uvwy+uvxy+uwxy+vwxy @expansion{} _[5]=uvwxy-z5 @c end example cyclic d2t_singular/poly_lib.doc:59 @end smallexample @c ---end content cyclic--- @c ------------------- katsura ------------- @node katsura, freerank, cyclic, poly_lib @subsubsection katsura @cindex katsura @c ---content katsura--- Procedure from library @code{poly.lib} (@pxref{poly_lib}). @table @asis @item @strong{Usage:} katsura([n]): n integer @item @strong{Return:} katsura(n) : n-th katsura ideal of @*(1) newly created and set ring (32003, x(0..n), dp), if nvars(basering) < n @*(2) basering, if nvars(basering) >= n @*katsura() : katsura ideal of basering @end table @strong{Example:} @smallexample @c computed example katsura d2t_singular/poly_lib.doc:89 LIB "poly.lib"; ring r; basering; @expansion{} // characteristic : 32003 @expansion{} // number of vars : 3 @expansion{} // block 1 : ordering dp @expansion{} // : names x y z @expansion{} // block 2 : ordering C katsura(); @expansion{} _[1]=x+2y+2z-1 @expansion{} _[2]=x2+2y2+2z2-x @expansion{} _[3]=2xy+2yz-y katsura(4); basering; @expansion{} _[1]=x(0)+2*x(1)+2*x(2)+2*x(3)-1 @expansion{} _[2]=x(0)^2+2*x(1)^2+2*x(2)^2+2*x(3)^2-x(0) @expansion{} _[3]=2*x(0)*x(1)+2*x(1)*x(2)+2*x(2)*x(3)-x(1) @expansion{} _[4]=x(1)^2+2*x(0)*x(2)+2*x(1)*x(3)-x(2) @expansion{} // characteristic : 32003 @expansion{} // number of vars : 5 @expansion{} // block 1 : ordering dp @expansion{} // : names x(0) x(1) x(2) x(3) x(4) @expansion{} // block 2 : ordering C @c end example katsura d2t_singular/poly_lib.doc:89 @end smallexample @c ---end content katsura--- @c ------------------- freerank ------------- @node freerank, is_homog, katsura, poly_lib @subsubsection freerank @cindex freerank @c ---content freerank--- Procedure from library @code{poly.lib} (@pxref{poly_lib}). @table @asis @item @strong{Usage:} freerank(M[,any]); M=poly/ideal/vector/module/matrix @item @strong{Compute:} rank of module presented by M in case it is free. @*By definition this is vdim(coker(M)/m*coker(M)) if coker(M) is free, where m = maximal ideal of the variables of the basering and M is considered as matrix. @*(the 0-module is free of rank 0) @item @strong{Return:} rank of coker(M) if coker(M) is free and -1 else; @*in case of a second argument return a list: @*L[1] = rank of coker(M) or -1 @*L[2] = minbase(M) @item @strong{Note:} freerank(syz(M)); computes the rank of M if M is free (and -1 else) @end table @strong{Example:} @smallexample @c computed example freerank d2t_singular/poly_lib.doc:128 LIB "poly.lib"; ring r; ideal i=x; module M=[x,0,1],[-x,0,-1]; freerank(M); // should be 2, coker(M) is not free @expansion{} 2 freerank(syz (M),""); @expansion{} [1]: @expansion{} 1 @expansion{} [2]: @expansion{} _[1]=gen(2)+gen(1) // [1] should be 1, coker(syz(M))=M is free of rank 1 // [2] should be gen(2)+gen(1) (minimal relation of M) freerank(i); @expansion{} -1 freerank(syz(i)); // should be 1, coker(syz(i))=i is free of rank 1 @expansion{} 1 @c end example freerank d2t_singular/poly_lib.doc:128 @end smallexample @c ---end content freerank--- @c ------------------- is_homog ------------- @node is_homog, is_zero, freerank, poly_lib @subsubsection is_homog @cindex is_homog @c ---content is_homog--- Procedure from library @code{poly.lib} (@pxref{poly_lib}). @table @asis @item @strong{Usage:} is_homog(id); id poly/ideal/vector/module/matrix @item @strong{Return:} integer which is 1 if input is homogeneous (resp. weighted homogeneous if the monomial ordering consists of one block of type ws,Ws,wp or Wp, assuming that all weights are positive) and 0 otherwise @item @strong{Note:} A vector is homogeneous, if the components are homogeneous of same degree, a module/matrix is homogeneous if all column vectors are homogeneous @*//*** ergaenzen, wenn Matrizen-Spalten Gewichte haben @end table @strong{Example:} @smallexample @c computed example is_homog d2t_singular/poly_lib.doc:168 LIB "poly.lib"; ring r = 0,(x,y,z),wp(1,2,3); is_homog(x5-yz+y3); @expansion{} 0 ideal i = x6+y3+z2, x9-z3; is_homog(i); @expansion{} 1 ring s = 0,(a,b,c),ds; vector v = [a2,0,ac+bc]; vector w = [a3,b3,c4]; is_homog(v); @expansion{} 1 is_homog(w); @expansion{} 0 @c end example is_homog d2t_singular/poly_lib.doc:168 @end smallexample @c ---end content is_homog--- @c ------------------- is_zero ------------- @node is_zero, lcm, is_homog, poly_lib @subsubsection is_zero @cindex is_zero @c ---content is_zero--- Procedure from library @code{poly.lib} (@pxref{poly_lib}). @table @asis @item @strong{Usage:} is_zero(M[,any]); M=poly/ideal/vector/module/matrix @item @strong{Return:} integer, 1 if coker(M)=0 resp. 0 if coker(M)!=0, where M is considered as matrix. @*If a second argument is given, return a list: @*L[1] = 1 if coker(M)=0 resp. 0 if coker(M)!=0 @*L[2] = dim(M) @end table @strong{Example:} @smallexample @c computed example is_zero d2t_singular/poly_lib.doc:204 LIB "poly.lib"; ring r; module m = [x],[y],[1,z]; is_zero(m,1); @expansion{} [1]: @expansion{} 0 @expansion{} [2]: @expansion{} 2 qring q = std(ideal(x2+y3+z2)); ideal j = x2+y3+z2-37; is_zero(j); @expansion{} 1 @c end example is_zero d2t_singular/poly_lib.doc:204 @end smallexample @c ---end content is_zero--- @c ------------------- lcm ------------- @node lcm, maxcoef, is_zero, poly_lib @subsubsection lcm @cindex lcm @c ---content lcm--- Procedure from library @code{poly.lib} (@pxref{poly_lib}). @table @asis @item @strong{Usage:} lcm(p[,q]); p int/intvec q a list of integers or @*p poly/ideal q a list of polynomials @item @strong{Return:} the least common multiple of the common entries of p and q: @* - of type int if p is an int/intvec @* - of type poly if p is a poly/ideal @end table @strong{Example:} @smallexample @c computed example lcm d2t_singular/poly_lib.doc:236 LIB "poly.lib"; ring r = 0,(x,y,z),lp; poly p = (x+y)*(y+z); poly q = (z4+2)*(y+z); lcm(p,q); @expansion{} xyz4+2xy+xz5+2xz+y2z4+2y2+yz5+2yz ideal i=p,q,y+z; lcm(i,p); @expansion{} xyz4+2xy+xz5+2xz+y2z4+2y2+yz5+2yz lcm(2,3,6); @expansion{} 6 lcm(2..6); @expansion{} 60 @c end example lcm d2t_singular/poly_lib.doc:236 @end smallexample @c ---end content lcm--- @c ------------------- maxcoef ------------- @node maxcoef, maxdeg, lcm, poly_lib @subsubsection maxcoef @cindex maxcoef @c ---content maxcoef--- Procedure from library @code{poly.lib} (@pxref{poly_lib}). @table @asis @item @strong{Usage:} maxcoef(f); f poly/ideal/vector/module/matrix @item @strong{Return:} maximal length of coefficient of f of type int (by counting the length of the string of each coefficient) @end table @strong{Example:} @smallexample @c computed example maxcoef d2t_singular/poly_lib.doc:268 LIB "poly.lib"; ring r= 0,(x,y,z),ds; poly g = 345x2-1234567890y+7/4z; maxcoef(g); @expansion{} 10 ideal i = g,10/1234567890; maxcoef(i); @expansion{} 11 // since i[2]=1/123456789 @c end example maxcoef d2t_singular/poly_lib.doc:268 @end smallexample @c ---end content maxcoef--- @c ------------------- maxdeg ------------- @node maxdeg, maxdeg1, maxcoef, poly_lib @subsubsection maxdeg @cindex maxdeg @c ---content maxdeg--- Procedure from library @code{poly.lib} (@pxref{poly_lib}). @table @asis @item @strong{Usage:} maxdeg(id); id poly/ideal/vector/module/matrix @item @strong{Return:} int/intmat, each component equals maximal degree of monomials in the corresponding component of id, independent of ring ordering (maxdeg of each var is 1). @*Of type int if id is of type poly, of type intmat else @item @strong{Note:} proc maxdeg1 returns 1 integer, the absolute maximum; moreover, it has an option for computing weighted degrees @end table @strong{Example:} @smallexample @c computed example maxdeg d2t_singular/poly_lib.doc:304 LIB "poly.lib"; ring r = 0,(x,y,z),wp(1,2,3); poly f = x+y2+z3; deg(f); //deg; returns weighted degree (in case of 1 block)! @expansion{} 9 maxdeg(f); @expansion{} 3 matrix m[2][2]=f+x10,1,0,f^2; maxdeg(m); @expansion{} 10,0, @expansion{} -1,6 @c end example maxdeg d2t_singular/poly_lib.doc:304 @end smallexample @c ---end content maxdeg--- @c ------------------- maxdeg1 ------------- @node maxdeg1, mindeg, maxdeg, poly_lib @subsubsection maxdeg1 @cindex maxdeg1 @c ---content maxdeg1--- Procedure from library @code{poly.lib} (@pxref{poly_lib}). @table @asis @item @strong{Usage:} maxdeg1(id[,v]); id=poly/ideal/vector/module/matrix, v=intvec @item @strong{Return:} integer, maximal [weighted] degree of monomials of id independent of ring ordering, maxdeg1 of i-th variable is v[i] (default: v=1..1). @item @strong{Note:} This proc returns one integer while maxdeg returns, in general, a matrix of integers. For one polynomial and if no intvec v is given maxdeg is faster @end table @strong{Example:} @smallexample @c computed example maxdeg1 d2t_singular/poly_lib.doc:339 LIB "poly.lib"; ring r = 0,(x,y,z),wp(1,2,3); poly f = x+y2+z3; deg(f); //deg returns weighted degree (in case of 1 block)! @expansion{} 9 maxdeg1(f); @expansion{} 3 intvec v = ringweights(r); maxdeg1(f,v); //weighted maximal degree @expansion{} 9 matrix m[2][2]=f+x10,1,0,f^2; maxdeg1(m,v); //absolute weighted maximal degree @expansion{} 18 @c end example maxdeg1 d2t_singular/poly_lib.doc:339 @end smallexample @c ---end content maxdeg1--- @c ------------------- mindeg ------------- @node mindeg, mindeg1, maxdeg1, poly_lib @subsubsection mindeg @cindex mindeg @c ---content mindeg--- Procedure from library @code{poly.lib} (@pxref{poly_lib}). @table @asis @item @strong{Usage:} mindeg(id); id poly/ideal/vector/module/matrix @item @strong{Return:} minimal degree/s of monomials of id, independent of ring ordering (mindeg of each variable is 1) of type int if id of type poly, else of type intmat. @item @strong{Note:} proc mindeg1 returns one integer, the absolute minimum; moreover it has an option for computing weighted degrees. @end table @strong{Example:} @smallexample @c computed example mindeg d2t_singular/poly_lib.doc:376 LIB "poly.lib"; ring r = 0,(x,y,z),ls; poly f = x5+y2+z3; ord(f); // ord returns weighted order of leading term! @expansion{} 3 mindeg(f); // computes minimal degree @expansion{} 2 matrix m[2][2]=x10,1,0,f^2; mindeg(m); // computes matrix of minimum degrees @expansion{} 10,0, @expansion{} -1,4 @c end example mindeg d2t_singular/poly_lib.doc:376 @end smallexample @c ---end content mindeg--- @c ------------------- mindeg1 ------------- @node mindeg1, normalize, mindeg, poly_lib @subsubsection mindeg1 @cindex mindeg1 @c ---content mindeg1--- Procedure from library @code{poly.lib} (@pxref{poly_lib}). @table @asis @item @strong{Usage:} mindeg1(id[,v]); id=poly/ideal/vector/module/matrix, v=intvec @item @strong{Return:} integer, minimal [weighted] degree of monomials of id independent of ring ordering, mindeg1 of i-th variable is v[i] (default v=1..1). @item @strong{Note:} This proc returns one integer while mindeg returns, in general, a matrix of integers. For one polynomial and if no intvec v is given mindeg is faster. @end table @strong{Example:} @smallexample @c computed example mindeg1 d2t_singular/poly_lib.doc:411 LIB "poly.lib"; ring r = 0,(x,y,z),ls; poly f = x5+y2+z3; ord(f); // ord returns weighted order of leading term! @expansion{} 3 intvec v = 1,-3,2; mindeg1(f,v); // computes minimal weighted degree @expansion{} -6 matrix m[2][2]=x10,1,0,f^2; mindeg1(m,1..3); // computes absolute minimum of weighted degrees @expansion{} -1 @c end example mindeg1 d2t_singular/poly_lib.doc:411 @end smallexample @c ---end content mindeg1--- @c ------------------- normalize ------------- @node normalize, rad_con, mindeg1, poly_lib @subsubsection normalize @cindex normalize @c ---content normalize--- Procedure from library @code{poly.lib} (@pxref{poly_lib}). @table @asis @item @strong{Usage:} normalize(id); id=poly/vector/ideal/module @item @strong{Return:} object of same type with leading coefficient equal to 1 @end table @strong{Example:} @smallexample @c computed example normalize d2t_singular/poly_lib.doc:441 LIB "poly.lib"; ring r = 0,(x,y,z),ls; poly f = 2x5+3y2+4z3; normalize(f); @expansion{} z3+3/4y2+1/2x5 module m=[9xy,0,3z3],[4z,6y,2x]; normalize(m); @expansion{} _[1]=z3*gen(3)+3xy*gen(1) @expansion{} _[2]=z*gen(1)+3/2y*gen(2)+1/2x*gen(3) ring s = 0,(x,y,z),(c,ls); module m=[9xy,0,3z3],[4z,6y,2x]; normalize(m); @expansion{} _[1]=[xy,0,1/3z3] @expansion{} _[2]=[z,3/2y,1/2x] @c end example normalize d2t_singular/poly_lib.doc:441 @end smallexample @c ---end content normalize--- @c ------------------- rad_con ------------- @node rad_con, content, normalize, poly_lib @subsubsection rad_con @cindex rad_con @c ---content rad_con--- Procedure from library @code{poly.lib} (@pxref{poly_lib}). @table @asis @item @strong{Usage:} rad_con(g,I); g polynomial, I ideal @item @strong{Return:} 1 (TRUE) (type int) if g is contained in the radical of I @* 0 (FALSE) (type int) otherwise @end table @strong{Example:} @smallexample @c computed example rad_con d2t_singular/poly_lib.doc:473 LIB "poly.lib"; ring R=0,(x,y,z),dp; ideal I=x2+y2,z2; poly f=x4+y4; rad_con(f,I); @expansion{} 0 ideal J=x2+y2,z2,x4+y4; poly g=z; rad_con(g,I); @expansion{} 1 @c end example rad_con d2t_singular/poly_lib.doc:473 @end smallexample @c ---end content rad_con--- @c ------------------- content ------------- @node content, numerator, rad_con, poly_lib @subsubsection content @cindex content @c ---content content--- Procedure from library @code{poly.lib} (@pxref{poly_lib}). @table @asis @item @strong{Usage:} content(f); f polynomial/vector @item @strong{Return:} number, the content (greatest common factor of coefficients) of the polynomial/vector f @end table @strong{Example:} @smallexample @c computed example content d2t_singular/poly_lib.doc:504 LIB "poly.lib"; ring r=0,(x,y,z),(c,lp); content(3x2+18xy-27xyz); @expansion{} 3 vector v=[3x2+18xy-27xyz,15x2+12y4,3]; content(v); @expansion{} 3 @c end example content d2t_singular/poly_lib.doc:504 @end smallexample @c ---end content content--- @c ------------------- numerator ------------- @node numerator, denominator, content, poly_lib @subsubsection numerator @cindex numerator @c ---content numerator--- Procedure from library @code{poly.lib} (@pxref{poly_lib}). @table @asis @item @strong{Usage:} numerator(n); n number @item @strong{Return:} number, the numerator of n @end table @strong{Example:} @smallexample @c computed example numerator d2t_singular/poly_lib.doc:531 LIB "poly.lib"; ring r = 0,x, dp; number n = 3/2; numerator(n); @expansion{} 3 @c end example numerator d2t_singular/poly_lib.doc:531 @end smallexample @c inserted refs from d2t_singular/poly_lib.doc:538 @ifinfo @menu See also: * cleardenom:: * content:: * denominator:: @end menu @end ifinfo @iftex @strong{See also:} @ref{cleardenom}; @ref{content}; @ref{denominator}. @end iftex @c end inserted refs from d2t_singular/poly_lib.doc:538 @c ---end content numerator--- @c ------------------- denominator ------------- @node denominator, mod2id, numerator, poly_lib @subsubsection denominator @cindex denominator @c ---content denominator--- Procedure from library @code{poly.lib} (@pxref{poly_lib}). @table @asis @item @strong{Usage:} denominator(n); n number @item @strong{Return:} number, the denominator of n @end table @strong{Example:} @smallexample @c computed example denominator d2t_singular/poly_lib.doc:561 LIB "poly.lib"; ring r = 0,x, dp; number n = 3/2; denominator(n); @expansion{} 2 @c end example denominator d2t_singular/poly_lib.doc:561 @end smallexample @c inserted refs from d2t_singular/poly_lib.doc:568 @ifinfo @menu See also: * cleardenom:: * content:: * denominator:: @end menu @end ifinfo @iftex @strong{See also:} @ref{cleardenom}; @ref{content}; @ref{denominator}. @end iftex @c end inserted refs from d2t_singular/poly_lib.doc:568 @c ---end content denominator--- @c ------------------- mod2id ------------- @node mod2id, id2mod, denominator, poly_lib @subsubsection mod2id @cindex mod2id @c ---content mod2id--- Procedure from library @code{poly.lib} (@pxref{poly_lib}). @table @asis @item @strong{Usage:} mod2id(M,vpos); M matrix, vpos intvec @item @strong{Assume:} vpos is an integer vector such that gen(i) corresponds to var(vpos[i]). @*The basering contains variables var(vpos[i]) which do not occur in M. @item @strong{Return:} ideal I in which each gen(i) from the module is replaced by var(vpos[i]) and all monomials var(vpos[i])*var(vpos[j]) have been added to the generating set of I. @item @strong{Note:} This procedure should be used in the following situation: one wants to pass to a ring with new variables, say e(1),..,e(s), which correspond to the components gen(1),..,gen(s) of the module M such that e(i)*e(j)=0 for all i,j. @*The new ring should already exist and be the current ring @end table @strong{Example:} @smallexample @c computed example mod2id d2t_singular/poly_lib.doc:606 LIB "poly.lib"; ring r=0,(e(1),e(2),x,y,z),(dp(2),ds(3)); module mo=x*gen(1)+y*gen(2); intvec iv=2,1; mod2id(mo,iv); @expansion{} _[1]=e(2)^2 @expansion{} _[2]=e(1)*e(2) @expansion{} _[3]=e(1)^2 @expansion{} _[4]=e(1)*y+e(2)*x @c end example mod2id d2t_singular/poly_lib.doc:606 @end smallexample @c ---end content mod2id--- @c ------------------- id2mod ------------- @node id2mod, substitute, mod2id, poly_lib @subsubsection id2mod @cindex id2mod @c ---content id2mod--- Procedure from library @code{poly.lib} (@pxref{poly_lib}). @table @asis @item @strong{Usage:} id2mod(I,vpos); I ideal, vpos intvec @item @strong{Return:} module corresponding to the ideal by replacing var(vpos[i]) by gen(i) and omitting all generators var(vpos[i])*var(vpos[j]) @item @strong{Note:} * This procedure only makes sense if the ideal contains all var(vpos[i])*var(vpos[j]) as monomial generators and all other generators of I are linear combinations of the var(vpos[i]) over the ring in the other variables. @** This is the inverse procedure to mod2id and should be applied only to ideals created by mod2id using the same intvec vpos (possibly after a standard basis computation) @end table @strong{Example:} @smallexample @c computed example id2mod d2t_singular/poly_lib.doc:643 LIB "poly.lib"; ring r=0,(e(1),e(2),x,y,z),(dp(2),ds(3)); ideal i=e(2)^2,e(1)*e(2),e(1)^2,e(1)*y+e(2)*x; intvec iv=2,1; id2mod(i,iv); @expansion{} _[1]=x*gen(1)+y*gen(2) @c end example id2mod d2t_singular/poly_lib.doc:643 @end smallexample @c ---end content id2mod--- @c ------------------- substitute ------------- @node substitute, subrInterred, id2mod, poly_lib @subsubsection substitute @cindex substitute @c ---content substitute--- Procedure from library @code{poly.lib} (@pxref{poly_lib}). @table @asis @item @strong{Usage:} - case 1: typeof(#[1])==poly: @*substitute (I,v,f[,v1,f1,v2,f2,...]); I object of basering which can be mapped, v,v1,v2,.. ring variables, f,f1,f2,... poly @* - case 2: typeof(#[1])==ideal: substitute1 (I,v,f); I object of basering which can be mapped, v ideal of ring variables, f ideal @item @strong{Return:} object of same type as I, @* - case 1: ring variable v,v1,v2,... substituted by polynomials f,f1,f2,..., in this order @* - case 2: ring variables in v substituted by polynomials in f: v[i] is substituted by f[i], i=1,...,i=min(size(v),ncols(f)) @item @strong{Note:} this procedure extends the built-in command subst which substitutes ring variables only by monomials @end table @strong{Example:} @smallexample @c computed example substitute d2t_singular/poly_lib.doc:683 LIB "poly.lib"; ring r = 0,(b,c,t),dp; ideal I = -bc+4b2c2t,bc2t-5b2c; substitute(I,c,b+c,t,0,b,b-1); @expansion{} _[1]=-b2-bc+2b+c-1 @expansion{} _[2]=-5b3-5b2c+15b2+10bc-15b-5c+5 ideal v = c,t,b; ideal f = b+c,0,b-1; substitute(I,v,f); @expansion{} _[1]=-b2-bc+2b+c-1 @expansion{} _[2]=-5b3-5b2c+15b2+10bc-15b-5c+5 @c end example substitute d2t_singular/poly_lib.doc:683 @end smallexample @c ---end content substitute--- @c ------------------- subrInterred ------------- @node subrInterred, hilbPoly, substitute, poly_lib @subsubsection subrInterred @cindex subrInterred @c ---content subrInterred--- Procedure from library @code{poly.lib} (@pxref{poly_lib}). @table @asis @item @strong{Usage:} subrInterred(mon,sm,iv); @*sm: ideal in a ring r with n + s variables, @*e.g. x_1,..,x_n and t_1,..,t_s @*mon: ideal with monomial generators (not divisible by any of the t_i) such that sm is contained in the module k[t_1,..,t_s]*mon[1]+..+k[t_1,..,t_s]*mon[size(mon)] @*iv: intvec listing the variables which are supposed to be used as x_i @item @strong{Return:} list l: @*l[1]=the monomials from mon in the order used @*l[2]=their coefficients after interreduction @*l[3]=l[1]*l[2] @item @strong{Purpose:} Do interred only w.r.t. a subset of variables. @*The procedure returns an interreduced system of generators of sm considered as a k[t_1,..,t_s]-submodule of the free module k[t_1,..,t_s]*mon[1]+..+k[t_1,..,t_s]*mon[size(mon)]). @end table @strong{Example:} @smallexample @c computed example subrInterred d2t_singular/poly_lib.doc:728 LIB "poly.lib"; ring r=0,(x,y,z),dp; ideal i=x^2+x*y^2,x*y+x^2*y,z; ideal j=x^2+x*y^2,x*y,z; ideal mon=x^2,z,x*y; intvec iv=1,3; subrInterred(mon,i,iv); @expansion{} [1]: @expansion{} _[1,1]=z @expansion{} _[1,2]=xy @expansion{} _[1,3]=x2 @expansion{} [2]: @expansion{} _[1]=gen(1) @expansion{} _[2]=y2*gen(2)-gen(2) @expansion{} _[3]=y*gen(2)+gen(3) @expansion{} [3]: @expansion{} _[1,1]=z @expansion{} _[1,2]=xy3-xy @expansion{} _[1,3]=xy2+x2 subrInterred(mon,j,iv); @expansion{} [1]: @expansion{} _[1,1]=z @expansion{} _[1,2]=xy @expansion{} _[1,3]=x2 @expansion{} [2]: @expansion{} _[1]=gen(1) @expansion{} _[2]=gen(2) @expansion{} _[3]=gen(3) @expansion{} [3]: @expansion{} _[1,1]=z @expansion{} _[1,2]=xy @expansion{} _[1,3]=x2 @c end example subrInterred d2t_singular/poly_lib.doc:728 @end smallexample @c ---end content subrInterred--- @c ------------------- hilbPoly ------------- @node hilbPoly,, subrInterred, poly_lib @subsubsection hilbPoly @cindex hilbPoly @c ---content hilbPoly--- Procedure from library @code{poly.lib} (@pxref{poly_lib}). @table @asis @item @strong{Usage:} hilbPoly(I) I a homogeneous ideal @item @strong{Return:} the Hilbert polynomial of basering/I as an intvec v=v_0,...,v_r such that the Hilbert polynomial is (v_0+v_1*t+...v_r*t^r)/r! @end table @strong{Example:} @smallexample @c computed example hilbPoly d2t_singular/poly_lib.doc:759 LIB "poly.lib"; ring r = 0,(b,c,t,h),dp; ideal I= bct-t2h+2th2+h3, bt3-ct3-t4+b2th+c2th-2bt2h+2ct2h+2t3h-bch2-2bth2+2cth2+2th3, b2c2+bt2h-ct2h-t3h+b2h2+2bch2+c2h2-2bth2+2cth2+t2h2-2bh3+2ch3+2th3+3h4, c2t3+ct4-c3th-2c2t2h-2ct3h-t4h+bc2h2-2c2th2-bt2h2+4t3h2+2bth3-2cth3-t2h3 +bh4-6th4-2h5; hilbPoly(I); @expansion{} -11,10 @c end example hilbPoly d2t_singular/poly_lib.doc:759 @end smallexample @c ---end content hilbPoly--- texi2html-1.82/test/singular_manual/d2t_singular/primdec_lib.tex0000644000175000017500000003765611264347126027007 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/primdec_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/primdec_lib.doc INSTEAD @c library version: (1.98.2.16,2003/06/23) @c library file: ../Singular/LIB/primdec.lib @cindex primdec.lib @cindex primdec_lib @table @asis @item @strong{Library:} primdec.lib @item @strong{Purpose:} Primary Decomposition and Radical of Ideals @item @strong{Authors:} Gerhard Pfister, pfister@@mathematik.uni-kl.de (GTZ) @* Wolfram Decker, decker@@math.uni-sb.de (SY) @* Hans Schoenemann, hannes@@mathematik.uni-kl.de (SY) @item @strong{Overview:} Algorithms for primary decomposition based on the ideas of Gianni, Trager and Zacharias (implementation by Gerhard Pfister), respectively based on the ideas of Shimoyama and Yokoyama (implementation by Wolfram Decker and Hans Schoenemann). @* The procedures are implemented to be used in characteristic 0. @* They also work in positive characteristic >> 0. @* In small characteristic and for algebraic extensions, primdecGTZ may not terminate. @*Algorithms for the computation of the radical based on the ideas of Krick, Logar and Kemper (implementation by Gerhard Pfister). @end table @strong{Procedures:} @menu * Ann:: annihilator of R^n/M, R=basering, M in R^n * primdecGTZ:: complete primary decomposition via Gianni,Trager,Zacharias * primdecSY:: complete primary decomposition via Shimoyama-Yokoyama * minAssGTZ:: the minimal associated primes via Gianni,Trager,Zacharias * minAssChar:: the minimal associated primes using characteristic sets * testPrimary:: tests the result of the primary decomposition * radical:: computes the radical of I via Krick/Logar and Kemper * radicalEHV:: computes the radical of I via Eisenbud,Huneke,Vasconcelos * equiRadical:: the radical of the equidimensional part of the ideal I * prepareAss:: list of radicals of the equidimensional components of I * equidim:: weak equidimensional decomposition of I * equidimMax:: equidimensional locus of I * equidimMaxEHV:: equidimensional locus of I via Eisenbud,Huneke,Vasconcelos * zerodec:: zerodimensional decomposition via Monico @end menu @c ---end content LibInfo--- @c ------------------- Ann ------------- @node Ann, primdecGTZ,, primdec_lib @subsubsection Ann @cindex Ann @c ---content Ann--- Procedure from library @code{primdec.lib} (@pxref{primdec_lib}). @table @asis @end table @c ---end content Ann--- @c ------------------- primdecGTZ ------------- @node primdecGTZ, primdecSY, Ann, primdec_lib @subsubsection primdecGTZ @cindex primdecGTZ @c ---content primdecGTZ--- Procedure from library @code{primdec.lib} (@pxref{primdec_lib}). @table @asis @item @strong{Usage:} primdecGTZ(i); i ideal @item @strong{Return:} a list pr of primary ideals and their associated primes: @format pr[i][1] the i-th primary component, pr[i][2] the i-th prime component. @end format @item @strong{Note:} Algorithm of Gianni/Trager/Zacharias. @*Designed for characteristic 0, works also in char k > 0, if it terminates (may result in an infinite loop in small characteristic!) @end table @strong{Example:} @smallexample @c reused example primdecGTZ d2t_singular/primdec_lib.doc:86 LIB "primdec.lib"; ring r = 0,(x,y,z),lp; poly p = z2+1; poly q = z3+2; ideal i = p*q^2,y-z2; list pr = primdecGTZ(i); pr; @expansion{} [1]: @expansion{} [1]: @expansion{} _[1]=z6+4z3+4 @expansion{} _[2]=y-z2 @expansion{} [2]: @expansion{} _[1]=z3+2 @expansion{} _[2]=y-z2 @expansion{} [2]: @expansion{} [1]: @expansion{} _[1]=z2+1 @expansion{} _[2]=y-z2 @expansion{} [2]: @expansion{} _[1]=z2+1 @expansion{} _[2]=y-z2 @c end example primdecGTZ d2t_singular/primdec_lib.doc:86 @end smallexample @c ---end content primdecGTZ--- @c ------------------- primdecSY ------------- @node primdecSY, minAssGTZ, primdecGTZ, primdec_lib @subsubsection primdecSY @cindex primdecSY @c ---content primdecSY--- Procedure from library @code{primdec.lib} (@pxref{primdec_lib}). @table @asis @item @strong{Usage:} primdecSY(i); i ideal, c int @item @strong{Return:} a list pr of primary ideals and their associated primes: @format pr[i][1] the i-th primary component, pr[i][2] the i-th prime component. @end format @item @strong{Note:} Algorithm of Shimoyama/Yokoyama. @format if c=0, the given ordering of the variables is used, if c=1, minAssChar tries to use an optimal ordering, if c=2, minAssGTZ is used, if c=3, minAssGTZ and facstd are used. @end format @end table @strong{Example:} @smallexample @c reused example primdecSY d2t_singular/primdec_lib.doc:128 LIB "primdec.lib"; ring r = 0,(x,y,z),lp; poly p = z2+1; poly q = z3+2; ideal i = p*q^2,y-z2; list pr = primdecSY(i); pr; @expansion{} [1]: @expansion{} [1]: @expansion{} _[1]=z6+4z3+4 @expansion{} _[2]=y-z2 @expansion{} [2]: @expansion{} _[1]=z3+2 @expansion{} _[2]=y-z2 @expansion{} [2]: @expansion{} [1]: @expansion{} _[1]=z2+1 @expansion{} _[2]=y+1 @expansion{} [2]: @expansion{} _[1]=z2+1 @expansion{} _[2]=y+1 @c end example primdecSY d2t_singular/primdec_lib.doc:128 @end smallexample @c ---end content primdecSY--- @c ------------------- minAssGTZ ------------- @node minAssGTZ, minAssChar, primdecSY, primdec_lib @subsubsection minAssGTZ @cindex minAssGTZ @c ---content minAssGTZ--- Procedure from library @code{primdec.lib} (@pxref{primdec_lib}). @table @asis @item @strong{Usage:} minAssGTZ(i); i ideal @*minAssGTZ(i,1); i ideal does not use the factorizing Groebner @item @strong{Return:} a list, the minimal associated prime ideals of i. @item @strong{Note:} Designed for characteristic 0, works also in char k > 0 based on an algorithm of Yokoyama @end table @strong{Example:} @smallexample @c reused example minAssGTZ d2t_singular/primdec_lib.doc:162 LIB "primdec.lib"; ring r = 0,(x,y,z),dp; poly p = z2+1; poly q = z3+2; ideal i = p*q^2,y-z2; list pr = minAssGTZ(i); pr; @expansion{} [1]: @expansion{} _[1]=z2+1 @expansion{} _[2]=-z2+y @expansion{} [2]: @expansion{} _[1]=z3+2 @expansion{} _[2]=-z2+y @c end example minAssGTZ d2t_singular/primdec_lib.doc:162 @end smallexample @c ---end content minAssGTZ--- @c ------------------- minAssChar ------------- @node minAssChar, testPrimary, minAssGTZ, primdec_lib @subsubsection minAssChar @cindex minAssChar @c ---content minAssChar--- Procedure from library @code{primdec.lib} (@pxref{primdec_lib}). @table @asis @item @strong{Usage:} minAssChar(i[,c]); i ideal, c int. @item @strong{Return:} list, the minimal associated prime ideals of i. @item @strong{Note:} If c=0, the given ordering of the variables is used. @* Otherwise, the system tries to find an optimal ordering, which in some cases may considerably speed up the algorithm. @* Due to a bug in the factorization, the result may be not completely decomposed in small characteristic. @end table @strong{Example:} @smallexample @c reused example minAssChar d2t_singular/primdec_lib.doc:198 LIB "primdec.lib"; ring r = 0,(x,y,z),dp; poly p = z2+1; poly q = z3+2; ideal i = p*q^2,y-z2; list pr = minAssChar(i); pr; @expansion{} [1]: @expansion{} _[1]=y+1 @expansion{} _[2]=z2+1 @expansion{} [2]: @expansion{} _[1]=z2-y @expansion{} _[2]=yz+2 @expansion{} _[3]=y2+2z @c end example minAssChar d2t_singular/primdec_lib.doc:198 @end smallexample @c ---end content minAssChar--- @c ------------------- testPrimary ------------- @node testPrimary, radical, minAssChar, primdec_lib @subsubsection testPrimary @cindex testPrimary @c ---content testPrimary--- Procedure from library @code{primdec.lib} (@pxref{primdec_lib}). @table @asis @item @strong{Usage:} testPrimary(pr,k); pr a list, k an ideal. @item @strong{Assume:} pr is the result of primdecGTZ(k) or primdecSY(k). @item @strong{Return:} int, 1 if the intersection of the ideals in pr is k, 0 if not @end table @strong{Example:} @smallexample @c reused example testPrimary d2t_singular/primdec_lib.doc:230 LIB "primdec.lib"; ring r = 32003,(x,y,z),dp; poly p = z2+1; poly q = z4+2; ideal i = p^2*q^3,(y-z3)^3,(x-yz+z4)^4; list pr = primdecGTZ(i); testPrimary(pr,i); @expansion{} 1 @c end example testPrimary d2t_singular/primdec_lib.doc:230 @end smallexample @c ---end content testPrimary--- @c ------------------- radical ------------- @node radical, radicalEHV, testPrimary, primdec_lib @subsubsection radical @cindex radical @c ---content radical--- Procedure from library @code{primdec.lib} (@pxref{primdec_lib}). @table @asis @item @strong{Usage:} radical(i); i ideal. @item @strong{Return:} ideal, the radical of i. @item @strong{Note:} A combination of the algorithms of Krick/Logar and Kemper is used. Works also in positive characteristic (Kempers algorithm). @end table @strong{Example:} @smallexample @c reused example radical d2t_singular/primdec_lib.doc:263 LIB "primdec.lib"; ring r = 0,(x,y,z),dp; poly p = z2+1; poly q = z3+2; ideal i = p*q^2,y-z2; ideal pr= radical(i); pr; @expansion{} pr[1]=z2-y @expansion{} pr[2]=y2z+yz+2y+2 @c end example radical d2t_singular/primdec_lib.doc:263 @end smallexample @c ---end content radical--- @c ------------------- radicalEHV ------------- @node radicalEHV, equiRadical, radical, primdec_lib @subsubsection radicalEHV @cindex radicalEHV @c ---content radicalEHV--- Procedure from library @code{primdec.lib} (@pxref{primdec_lib}). @table @asis @item @strong{Usage:} radicalEHV(i); i ideal. @item @strong{Return:} ideal, the radical of i. @item @strong{Note:} Uses the algorithm of Eisenbud/Huneke/Vasconcelos, which reduces the computation to the complete intersection case, by taking, in the general case, a generic linear combination of the input. @*Works only in characteristic 0 or p large. @end table @strong{Example:} @smallexample @c reused example radicalEHV d2t_singular/primdec_lib.doc:299 LIB "primdec.lib"; ring r = 0,(x,y,z),dp; poly p = z2+1; poly q = z3+2; ideal i = p*q^2,y-z2; ideal pr= radicalEHV(i); pr; @expansion{} pr[1]=z2-y @expansion{} pr[2]=y2z+yz+2y+2 @expansion{} pr[3]=y3+y2+2yz+2z @c end example radicalEHV d2t_singular/primdec_lib.doc:299 @end smallexample @c ---end content radicalEHV--- @c ------------------- equiRadical ------------- @node equiRadical, prepareAss, radicalEHV, primdec_lib @subsubsection equiRadical @cindex equiRadical @c ---content equiRadical--- Procedure from library @code{primdec.lib} (@pxref{primdec_lib}). @table @asis @item @strong{Usage:} equiRadical(i); i ideal @item @strong{Return:} ideal, intersection of associated primes of i of maximal dimension. @item @strong{Note:} A combination of the algorithms of Krick/Logar and Kemper is used. Works also in positive characteristic (Kempers algorithm). @end table @strong{Example:} @smallexample @c reused example equiRadical d2t_singular/primdec_lib.doc:332 LIB "primdec.lib"; ring r = 0,(x,y,z),dp; poly p = z2+1; poly q = z3+2; ideal i = p*q^2,y-z2; ideal pr= equiRadical(i); pr; @expansion{} pr[1]=z2-y @expansion{} pr[2]=y2z+yz+2y+2 @c end example equiRadical d2t_singular/primdec_lib.doc:332 @end smallexample @c ---end content equiRadical--- @c ------------------- prepareAss ------------- @node prepareAss, equidim, equiRadical, primdec_lib @subsubsection prepareAss @cindex prepareAss @c ---content prepareAss--- Procedure from library @code{primdec.lib} (@pxref{primdec_lib}). @table @asis @item @strong{Usage:} prepareAss(i); i ideal @item @strong{Return:} list, the radicals of the maximal dimensional components of i. @item @strong{Note:} Uses algorithm of Eisenbud/Huneke/Vasconcelos. @end table @strong{Example:} @smallexample @c reused example prepareAss d2t_singular/primdec_lib.doc:364 LIB "primdec.lib"; ring r = 0,(x,y,z),dp; poly p = z2+1; poly q = z3+2; ideal i = p*q^2,y-z2; list pr = prepareAss(i); pr; @expansion{} [1]: @expansion{} _[1]=z2-y @expansion{} _[2]=y2z+yz+2y+2 @c end example prepareAss d2t_singular/primdec_lib.doc:364 @end smallexample @c ---end content prepareAss--- @c ------------------- equidim ------------- @node equidim, equidimMax, prepareAss, primdec_lib @subsubsection equidim @cindex equidim @c ---content equidim--- Procedure from library @code{primdec.lib} (@pxref{primdec_lib}). @table @asis @item @strong{Usage:} equidim(i) or equidim(i,1) ; i ideal @item @strong{Return:} list of equidimensional ideals a[1],...,a[s] with: @*- a[s] the equidimensional locus of i, i.e. the intersection of the primary ideals of dimension of i @*- a[1],...,a[s-1] the lower dimensional equidimensional loci. @item @strong{Note:} An embedded component q (primary ideal) of i can be replaced in the decomposition by a primary ideal q1 with the same radical as q. @* @code{equidim(i,1)} uses the algorithm of Eisenbud/Huneke/Vasconcelos. @end table @strong{Example:} @smallexample @c reused example equidim d2t_singular/primdec_lib.doc:401 LIB "primdec.lib"; ring r = 32003,(x,y,z),dp; ideal i = intersect(ideal(z),ideal(x,y),ideal(x2,z2),ideal(x5,y5,z5)); equidim(i); @expansion{} [1]: @expansion{} _[1]=z4 @expansion{} _[2]=y5 @expansion{} _[3]=x5 @expansion{} _[4]=x3z3 @expansion{} _[5]=x4y4 @expansion{} [2]: @expansion{} _[1]=yz @expansion{} _[2]=xz @expansion{} _[3]=x2 @expansion{} [3]: @expansion{} _[1]=z @c end example equidim d2t_singular/primdec_lib.doc:401 @end smallexample @c ---end content equidim--- @c ------------------- equidimMax ------------- @node equidimMax, equidimMaxEHV, equidim, primdec_lib @subsubsection equidimMax @cindex equidimMax @c ---content equidimMax--- Procedure from library @code{primdec.lib} (@pxref{primdec_lib}). @table @asis @item @strong{Usage:} equidimMax(i); i ideal @item @strong{Return:} ideal of equidimensional locus (of maximal dimension) of i. @end table @strong{Example:} @smallexample @c reused example equidimMax d2t_singular/primdec_lib.doc:427 LIB "primdec.lib"; ring r = 32003,(x,y,z),dp; ideal i = intersect(ideal(z),ideal(x,y),ideal(x2,z2),ideal(x5,y5,z5)); equidimMax(i); @expansion{} _[1]=z @c end example equidimMax d2t_singular/primdec_lib.doc:427 @end smallexample @c ---end content equidimMax--- @c ------------------- equidimMaxEHV ------------- @node equidimMaxEHV, zerodec, equidimMax, primdec_lib @subsubsection equidimMaxEHV @cindex equidimMaxEHV @c ---content equidimMaxEHV--- Procedure from library @code{primdec.lib} (@pxref{primdec_lib}). @table @asis @item @strong{Usage:} equidimMaxEHV(i); i ideal @item @strong{Return:} ideal, the equidimensional component (of maximal dimension) of i. @item @strong{Note:} Uses algorithm of Eisenbud, Huneke and Vasconcelos. @end table @strong{Example:} @smallexample @c reused example equidimMaxEHV d2t_singular/primdec_lib.doc:456 LIB "primdec.lib"; ring r = 0,(x,y,z),dp; ideal i=intersect(ideal(z),ideal(x,y),ideal(x2,z2),ideal(x5,y5,z5)); equidimMaxEHV(i); @expansion{} _[1]=z @c end example equidimMaxEHV d2t_singular/primdec_lib.doc:456 @end smallexample @c ---end content equidimMaxEHV--- @c ------------------- zerodec ------------- @node zerodec,, equidimMaxEHV, primdec_lib @subsubsection zerodec @cindex zerodec @c ---content zerodec--- Procedure from library @code{primdec.lib} (@pxref{primdec_lib}). @table @asis @item @strong{Usage:} zerodec(I); I ideal @item @strong{Assume:} I is zero-dimensional, the characteristic of the ground field is 0 @item @strong{Return:} list of primary ideals, the zero-dimensional decomposition of I @item @strong{Note:} The algorithm (of Monico), works well only for a small total number of solutions (@code{vdim(std(I))} should be < 100) and without parameters. In practice, it works also in large characteristic p>0 but may fail for small p. @* If printlevel > 0 (default = 0) additional information is displayed. @end table @strong{Example:} @smallexample @c reused example zerodec d2t_singular/primdec_lib.doc:492 LIB "primdec.lib"; ring r = 0,(x,y),dp; ideal i = x2-2,y2-2; list pr = zerodec(i); pr; @expansion{} [1]: @expansion{} _[1]=y2-2 @expansion{} _[2]=xy-2 @expansion{} _[3]=x2-2 @expansion{} [2]: @expansion{} _[1]=y2-2 @expansion{} _[2]=xy+2 @expansion{} _[3]=x2-2 @c end example zerodec d2t_singular/primdec_lib.doc:492 @end smallexample @c ---end content zerodec--- texi2html-1.82/test/singular_manual/d2t_singular/reesclos_lib.tex0000644000175000017500000002403611264347126027167 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/reesclos_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/reesclos_lib.doc INSTEAD @c library version: (1.50,2001/08/06) @c library file: ../Singular/LIB/reesclos.lib @cindex reesclos.lib @cindex reesclos_lib @table @asis @item @strong{Library:} reesclos.lib @item @strong{Purpose:} procedures to compute the int. closure of an ideal @item @strong{Author:} Tobias Hirsch, email: hirsch@@math.tu-cottbus.de @item @strong{Overview:} A library to compute the integral closure of an ideal I in a polynomial ring R=K[x(1),...,x(n)] using the Rees Algebra R[It] of I. It computes the integral closure of R[It] (in the same manner as done in the library 'normal.lib'), which is a graded subalgebra of R[t]. The degree-k-component is the integral closure of the k-th power of I. @*These procedures can also be used to compute the integral closure R^ of an integral domain R=k[x(1),...,x(n)]/ker, ker a prime ideal, in its quotient field K=Q(R), as an affine ring R^=k[T(1),...,T(s)]]/J and to get representations of elements of R^ as fractions of elements of R. @end table @strong{Procedures:} @menu * ReesAlgebra:: computes the Rees Algebra of an ideal I * normalI:: computes the integral closure of an ideal I using R[It] * primeClosure:: computes the integral closure of the int. domain R * closureRingtower:: defines the rings in the list L as global objects R(i) * closureFrac:: computes fractions representing elements of R^=L[n] @end menu @c ---end content LibInfo--- @c ------------------- ReesAlgebra ------------- @node ReesAlgebra, normalI,, reesclos_lib @subsubsection ReesAlgebra @cindex ReesAlgebra @c ---content ReesAlgebra--- Procedure from library @code{reesclos.lib} (@pxref{reesclos_lib}). @table @asis @item @strong{Usage:} ReesAlgebra (I); I = ideal @item @strong{Return:} The Rees algebra R[It] as an affine ring, where I is an ideal in R. The procedure returns a list containing two rings: @*[1]: a ring, say RR; in the ring an ideal ker such that R[It]=RR/ker [2]: a ring, say Kxt; the basering with additional variable t containing an ideal mapI that defines the map RR-->Kxt @end table @strong{Example:} @smallexample @c computed example ReesAlgebra d2t_singular/reesclos_lib.doc:59 LIB "reesclos.lib"; ring R = 0,(x,y),dp; ideal I = x2,xy4,y5; list L = ReesAlgebra(I); def Rees = L[1]; // defines the ring Rees, containing the ideal ker setring Rees; // passes to the ring Rees Rees; @expansion{} // characteristic : 0 @expansion{} // number of vars : 5 @expansion{} // block 1 : ordering dp @expansion{} // : names x y U(1) U(2) U(3) @expansion{} // block 2 : ordering C ker; // R[It] is isomorphic to Rees/ker @expansion{} ker[1]=y*U(2)-x*U(3) @expansion{} ker[2]=y^3*U(1)*U(3)-U(2)^2 @expansion{} ker[3]=y^4*U(1)-x*U(2) @expansion{} ker[4]=x*y^2*U(1)*U(3)^2-U(2)^3 @expansion{} ker[5]=x^2*y*U(1)*U(3)^3-U(2)^4 @expansion{} ker[6]=x^3*U(1)*U(3)^4-U(2)^5 @c end example ReesAlgebra d2t_singular/reesclos_lib.doc:59 @end smallexample @c ---end content ReesAlgebra--- @c ------------------- normalI ------------- @node normalI, primeClosure, ReesAlgebra, reesclos_lib @subsubsection normalI @cindex normalI @c ---content normalI--- Procedure from library @code{reesclos.lib} (@pxref{reesclos_lib}). @table @asis @item @strong{Usage:} normalI(I [,p[,c]]); I an ideal, p and c optional integers @item @strong{Return:} the integral closure of I,...,I^p. If p is not given, or p==0, compute the closure of all powers up to the maximum degree in t occurring in the generators of the closure of R[It] (so this is the last one that is not just the sum/product of the above ones). c is transferred to the procedure primeClosure and toggles its behavior in computing the integral closure of R[It]. @*The result is a list containing the closure of the desired powers of I as ideals of the basering. @end table @strong{Example:} @smallexample @c computed example normalI d2t_singular/reesclos_lib.doc:96 LIB "reesclos.lib"; ring R=0,(x,y),dp; ideal I = x2,xy4,y5; list J = normalI(I); I; @expansion{} I[1]=x2 @expansion{} I[2]=xy4 @expansion{} I[3]=y5 J; // J[1] is the integral closure of I @expansion{} [1]: @expansion{} _[1]=x2 @expansion{} _[2]=y5 @expansion{} _[3]=-xy3 @c end example normalI d2t_singular/reesclos_lib.doc:96 @end smallexample @c ---end content normalI--- @c ------------------- primeClosure ------------- @node primeClosure, closureRingtower, normalI, reesclos_lib @subsubsection primeClosure @cindex primeClosure @c ---content primeClosure--- Procedure from library @code{reesclos.lib} (@pxref{reesclos_lib}). @table @asis @item @strong{Usage:} primeClosure(L [,c]); L a list of a ring containing a prime ideal ker, c an optional integer @item @strong{Return:} a list L consisting of rings L[1],...,L[n] such that @*- L[1] is a copy of (not a reference to!) the input ring L[1] - all rings L[i] contain ideals ker, L[2],...,L[n] contain ideals phi such that @*L[1]/ker --> ... --> L[n]/ker @*are injections given by the corresponding ideals phi, and L[n]/ker is the integral closure of L[1]/ker in its quotient field. - all rings L[i] contain a polynomial nzd such that elements of L[i]/ker are quotients of elements of L[i-1]/ker with denominator nzd via the injection phi. @item @strong{Note:} - L is constructed by recursive calls of primeClosure itself. - c determines the choice of nzd: @*- c not given or equal to 0: first generator of the ideal SL, the singular locus of Spec(L[i]/ker) @*- c<>0: the generator of SL with least number of monomials. @end table @strong{Example:} @smallexample @c computed example primeClosure d2t_singular/reesclos_lib.doc:141 LIB "reesclos.lib"; ring R=0,(x,y),dp; ideal I=x4,y4; def K=ReesAlgebra(I)[1]; // K contains ker such that K/ker=R[It] list L=primeClosure(K); def R(1)=L[1]; // L[4] contains ker, L[4]/ker is the def R(4)=L[4]; // integral closure of L[1]/ker setring R(1); R(1); @expansion{} // characteristic : 0 @expansion{} // number of vars : 4 @expansion{} // block 1 : ordering dp @expansion{} // : names x y U(1) U(2) @expansion{} // block 2 : ordering C ker; @expansion{} ker[1]=y^4*U(1)-x^4*U(2) setring R(4); R(4); @expansion{} // characteristic : 0 @expansion{} // number of vars : 7 @expansion{} // block 1 : ordering a @expansion{} // : names T(1) T(2) T(3) T(4) T(5) T(6) T(7) @expansion{} // : weights 1 1 1 1 1 1 1 @expansion{} // block 2 : ordering dp @expansion{} // : names T(1) T(2) T(3) T(4) T(5) T(6) T(7) @expansion{} // block 3 : ordering C ker; @expansion{} ker[1]=T(2)*T(5)-T(1)*T(7) @expansion{} ker[2]=T(1)*T(5)-T(2)*T(6) @expansion{} ker[3]=T(5)*T(6)-T(3)*T(7) @expansion{} ker[4]=T(4)*T(6)-T(5)*T(7) @expansion{} ker[5]=T(5)^2-T(6)*T(7) @expansion{} ker[6]=T(4)*T(5)-T(7)^2 @expansion{} ker[7]=T(3)*T(5)-T(6)^2 @expansion{} ker[8]=T(2)^2*T(6)-T(1)^2*T(7) @expansion{} ker[9]=T(3)*T(4)-T(6)*T(7) @expansion{} ker[10]=T(1)*T(4)-T(2)*T(7) @expansion{} ker[11]=T(2)*T(3)-T(1)*T(6) @expansion{} ker[12]=T(2)^2*T(6)^2-T(1)^2*T(6)*T(7) @c end example primeClosure d2t_singular/reesclos_lib.doc:141 @end smallexample @c ---end content primeClosure--- @c ------------------- closureRingtower ------------- @node closureRingtower, closureFrac, primeClosure, reesclos_lib @subsubsection closureRingtower @cindex closureRingtower @c ---content closureRingtower--- Procedure from library @code{reesclos.lib} (@pxref{reesclos_lib}). @table @asis @item @strong{Usage:} closureRingtower(list L); L a list of rings @item @strong{Create:} rings R(1),...,R(n) such that R(i)=L[i] for all i @end table @strong{Example:} @smallexample @c computed example closureRingtower d2t_singular/reesclos_lib.doc:176 LIB "reesclos.lib"; ring R=0,(x,y),dp; ideal I=x4,y4; list L=primeClosure(ReesAlgebra(I)[1]); closureRingtower(L); R(1); @expansion{} // characteristic : 0 @expansion{} // number of vars : 4 @expansion{} // block 1 : ordering dp @expansion{} // : names x y U(1) U(2) @expansion{} // block 2 : ordering C R(4); @expansion{} // characteristic : 0 @expansion{} // number of vars : 7 @expansion{} // block 1 : ordering a @expansion{} // : names T(1) T(2) T(3) T(4) T(5) T(6) T(7) @expansion{} // : weights 1 1 1 1 1 1 1 @expansion{} // block 2 : ordering dp @expansion{} // : names T(1) T(2) T(3) T(4) T(5) T(6) T(7) @expansion{} // block 3 : ordering C @c end example closureRingtower d2t_singular/reesclos_lib.doc:176 @end smallexample @c ---end content closureRingtower--- @c ------------------- closureFrac ------------- @node closureFrac,, closureRingtower, reesclos_lib @subsubsection closureFrac @cindex closureFrac @c ---content closureFrac--- Procedure from library @code{reesclos.lib} (@pxref{reesclos_lib}). @table @asis @item @strong{Create:} a list fraction of two elements of L[1], such that @*f=fraction[1]/fraction[2] via the injections phi L[i]-->L[i+1]. @end table @strong{Example:} @smallexample @c computed example closureFrac d2t_singular/reesclos_lib.doc:203 LIB "reesclos.lib"; ring R=0,(x,y),dp; ideal ker=x2+y2; export R; @expansion{} // ** `R` is already global list L=primeClosure(R); // We normalize R/ker closureRingtower(L); // Now R/ker=R(1) with normalization R(2) setring R(2); kill(R); phi; // The map R(1)-->R(2) @expansion{} phi[1]=T(1)*T(2) @expansion{} phi[2]=T(1) poly f=T(1)*T(2); // We will get a representation of f export R(2); @expansion{} // ** `R(2)` is already global closureFrac(L); setring R(1); kill (R(2)); fraction; // f=fraction[1]/fraction[2] via phi @expansion{} [1]: @expansion{} xy @expansion{} [2]: @expansion{} y @c end example closureFrac d2t_singular/reesclos_lib.doc:203 @end smallexample @c ---end content closureFrac--- texi2html-1.82/test/singular_manual/d2t_singular/qhmoduli_lib.tex0000644000175000017500000002677711264347126027210 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/qhmoduli_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/qhmoduli_lib.doc INSTEAD @c library version: (1.0,2000/12/12) @c library file: ../Singular/LIB/qhmoduli.lib @cindex qhmoduli.lib @cindex qhmoduli_lib @table @asis @item @strong{Library:} qhmoduli.lib @item @strong{Purpose:} Moduli Spaces of Semi-Quasihomogeneous Singularities @item @strong{Author:} Thomas Bayer, email: bayert@@in.tum.de @end table @strong{Procedures:} @menu * ArnoldAction:: Induced action of G_f on T_. * ModEqn:: Equations of the moduli space for principal part f * QuotientEquations:: Equations of Variety(I)/G w.r.t. action 'A' * StabEqn:: Equations of the stabilizer of f. * StabEqnId:: Equations of the stabilizer of the qhom. ideal I. * StabOrder:: Order of the stabilizer of f. * UpperMonomials:: Upper basis of the Milnor algebra of f. * Max:: maximal integer contained in 'data' * Min:: minimal integer contained in 'data' * Table:: list, i-th entry is cmd(i), lb <= i <= ub @end menu @c ---end content LibInfo--- @c ------------------- ArnoldAction ------------- @node ArnoldAction, ModEqn,, qhmoduli_lib @subsubsection ArnoldAction @cindex ArnoldAction @c ---content ArnoldAction--- Procedure from library @code{qhmoduli.lib} (@pxref{qhmoduli_lib}). @table @asis @item @strong{Usage:} ArnoldAction(f, [Gf, B]); poly f; list Gf, B; @*'Gf' is a list of two rings (coming from 'StabEqn') @item @strong{Purpose:} compute the induced action of the stabilizer G of f on T_, where T_ is given by the upper monomials B of the Milnor algebra of f. @item @strong{Assume:} f is quasihomogeneous @item @strong{Return:} polynomial ring over the same ground field, containing the ideals 'actionid' and 'stabid'. @*- 'actionid' is the ideal defining the induced action of Gf on T_ @* - 'stabid' is the ideal of the stabilizer Gf in the new ring @end table @strong{Example:} @smallexample @c computed example ArnoldAction d2t_singular/qhmoduli_lib.doc:59 LIB "qhmoduli.lib"; ring B = 0,(x,y,z), ls; poly f = -z5+y5+x2z+x2y; def R = ArnoldAction(f); setring R; actionid; @expansion{} actionid[1]=-s(2)*t(1)+s(3)*t(1) @expansion{} actionid[2]=-s(2)^2*t(2)+2*s(2)^2*t(3)^2+s(3)^2*t(2) @expansion{} actionid[3]=s(2)*t(3)+s(3)*t(3) stabid; @expansion{} stabid[1]=s(2)*s(3) @expansion{} stabid[2]=s(1)^2*s(2)+s(1)^2*s(3)-1 @expansion{} stabid[3]=s(1)^2*s(3)^2-s(3) @expansion{} stabid[4]=s(1)^2+s(2)^4-s(3)^4 @expansion{} stabid[5]=s(1)^4+s(2)^3-s(3)^3 @expansion{} stabid[6]=-s(1)^2*s(3)+s(3)^5 @c end example ArnoldAction d2t_singular/qhmoduli_lib.doc:59 @end smallexample @c ---end content ArnoldAction--- @c ------------------- ModEqn ------------- @node ModEqn, QuotientEquations, ArnoldAction, qhmoduli_lib @subsubsection ModEqn @cindex ModEqn @c ---content ModEqn--- Procedure from library @code{qhmoduli.lib} (@pxref{qhmoduli_lib}). @table @asis @item @strong{Usage:} ModEqn(f [, opt]); poly f; int opt; @item @strong{Purpose:} compute equations of the moduli space of semiquasihomogeneous hypersurface singularity with principal part f w.r.t. right equivalence @item @strong{Assume:} f quasihomogeneous polynomial with an isolated singularity at 0 @item @strong{Return:} polynomial ring, possibly a simple extension of the ground field of the basering, containing the ideal 'modid' @*- 'modid' is the ideal of the moduli space if opt is even (> 0). otherwise it contains generators of the coordinate ring R of the moduli space (note : Spec(R) is the moduli space) @item @strong{Options:} 1 compute equations of the mod. space, @*2 use a primary decomposition @*4 compute E_f0, i.e., the image of G_f0 @*To combine options, add their value, default: opt =7 @end table @strong{Example:} @smallexample @c computed example ModEqn d2t_singular/qhmoduli_lib.doc:104 LIB "qhmoduli.lib"; ring B = 0,(x,y), ls; poly f = -x4 + xy5; def R = ModEqn(f); setring R; modid; @expansion{} modid[1]=Y(5)^2-Y(4)*Y(6) @expansion{} modid[2]=Y(4)*Y(5)-Y(3)*Y(6) @expansion{} modid[3]=Y(3)*Y(5)-Y(2)*Y(6) @expansion{} modid[4]=Y(2)*Y(5)-Y(1)*Y(6) @expansion{} modid[5]=Y(4)^2-Y(2)*Y(6) @expansion{} modid[6]=Y(3)*Y(4)-Y(1)*Y(6) @expansion{} modid[7]=Y(2)*Y(4)-Y(1)*Y(5) @expansion{} modid[8]=Y(3)^2-Y(1)*Y(5) @expansion{} modid[9]=Y(2)*Y(3)-Y(1)*Y(4) @expansion{} modid[10]=Y(2)^2-Y(1)*Y(3) @c end example ModEqn d2t_singular/qhmoduli_lib.doc:104 @end smallexample @c ---end content ModEqn--- @c ------------------- QuotientEquations ------------- @node QuotientEquations, StabEqn, ModEqn, qhmoduli_lib @subsubsection QuotientEquations @cindex QuotientEquations @c ---content QuotientEquations--- Procedure from library @code{qhmoduli.lib} (@pxref{qhmoduli_lib}). @table @asis @item @strong{Usage:} QuotientEquations(G,action,emb [, opt]); ideal G,action,emb;int opt @item @strong{Purpose:} compute the quotient of the variety given by the parameterization 'emb' by the linear action 'action' of the algebraic group G. @item @strong{Assume:} 'action' is linear, G must be finite if the Reynolds operator is needed (i.e., NullCone(G,action) returns some non-invariant polys) @item @strong{Return:} polynomial ring over a simple extension of the ground field of the basering, containing the ideals 'id' and 'embedid'. @*- 'id' contains the equations of the quotient, if opt = 1; if opt = 0, 2, 'id' contains generators of the coordinate ring R of the quotient (Spec(R) is the quotient) @*- 'embedid' = 0, if opt = 1; @*if opt = 0, 2, it is the ideal defining the equivariant embedding @item @strong{Options:} 1 compute equations of the quotient, @*2 use a primary decomposition when computing the Reynolds operator @* To combine options, add their value, default: opt =3. @end table @c ---end content QuotientEquations--- @c ------------------- StabEqn ------------- @node StabEqn, StabEqnId, QuotientEquations, qhmoduli_lib @subsubsection StabEqn @cindex StabEqn @c ---content StabEqn--- Procedure from library @code{qhmoduli.lib} (@pxref{qhmoduli_lib}). @table @asis @item @strong{Usage:} StabEqn(f); f polynomial @item @strong{Purpose:} compute the equations of the isometry group of f. @item @strong{Assume:} f semiquasihomogeneous polynomial with an isolated singularity at 0 @item @strong{Return:} list of two ring 'S1', 'S2' @*- 'S1' contains the equations of the stabilizer (ideal 'stabid') @* - 'S2' contains the action of the stabilizer (ideal 'actionid') @item @strong{Global:} varSubsList, contains the index j s.t. x(i) -> x(i)t(j) ... @end table @strong{Example:} @smallexample @c computed example StabEqn d2t_singular/qhmoduli_lib.doc:179 LIB "qhmoduli.lib"; ring B = 0,(x,y,z), ls; poly f = -z5+y5+x2z+x2y; list stab = StabEqn(f); def S1 = stab[1]; setring S1; stabid; @expansion{} stabid[1]=s(2)*s(3) @expansion{} stabid[2]=s(1)^2*s(2)+s(1)^2*s(3)-1 @expansion{} stabid[3]=s(1)^2*s(3)^2-s(3) @expansion{} stabid[4]=s(2)^4-s(3)^4+s(1)^2 @expansion{} stabid[5]=s(1)^4+s(2)^3-s(3)^3 @expansion{} stabid[6]=s(3)^5-s(1)^2*s(3) def S2 = stab[2]; setring S2; actionid; @expansion{} actionid[1]=s(1)*x @expansion{} actionid[2]=s(3)*y+s(2)*z @expansion{} actionid[3]=s(2)*y+s(3)*z @c end example StabEqn d2t_singular/qhmoduli_lib.doc:179 @end smallexample @c ---end content StabEqn--- @c ------------------- StabEqnId ------------- @node StabEqnId, StabOrder, StabEqn, qhmoduli_lib @subsubsection StabEqnId @cindex StabEqnId @c ---content StabEqnId--- Procedure from library @code{qhmoduli.lib} (@pxref{qhmoduli_lib}). @table @asis @item @strong{Usage:} StabEqn(I, w); I ideal, w intvec @item @strong{Purpose:} compute the equations of the isometry group of the ideal I each generator of I is fixed by the stabilizer. @item @strong{Assume:} I semiquasihomogeneous ideal wrt 'w' with an isolated singularity at 0 @item @strong{Return:} list of two ring 'S1', 'S2' @*- 'S1' contains the equations of the stabilizer (ideal 'stabid') @* - 'S2' contains the action of the stabilizer (ideal 'actionid') @item @strong{Global:} varSubsList, contains the index j s.t. t(i) -> t(i)t(j) ... @end table @strong{Example:} @smallexample @c computed example StabEqnId d2t_singular/qhmoduli_lib.doc:219 LIB "qhmoduli.lib"; ring B = 0,(x,y,z), ls; ideal I = x2,y3,z6; intvec w = 3,2,1; list stab = StabEqnId(I, w); @expansion{} // ** redefining d ** @expansion{} // ** redefining newcoMx ** @expansion{} // ** redefining coMx ** @expansion{} // ** redefining d ** @expansion{} // ** redefining newcoMx ** @expansion{} // ** redefining coMx ** def S1 = stab[1]; setring S1; stabid; @expansion{} stabid[1]=s(1)^2-1 @expansion{} stabid[2]=s(2)^3-1 @expansion{} stabid[3]=s(3)^6-1 def S2 = stab[2]; setring S2; actionid; @expansion{} actionid[1]=s(1)*x @expansion{} actionid[2]=s(2)*y @expansion{} actionid[3]=s(3)*z @c end example StabEqnId d2t_singular/qhmoduli_lib.doc:219 @end smallexample @c ---end content StabEqnId--- @c ------------------- StabOrder ------------- @node StabOrder, UpperMonomials, StabEqnId, qhmoduli_lib @subsubsection StabOrder @cindex StabOrder @c ---content StabOrder--- Procedure from library @code{qhmoduli.lib} (@pxref{qhmoduli_lib}). @table @asis @item @strong{Usage:} StabOrder(f); poly f; @item @strong{Purpose:} compute the order of the stabilizer group of f. @item @strong{Assume:} f quasihomogeneous polynomial with an isolated singularity at 0 @item @strong{Return:} int @item @strong{Global:} varSubsList @end table @c ---end content StabOrder--- @c ------------------- UpperMonomials ------------- @node UpperMonomials, Max, StabOrder, qhmoduli_lib @subsubsection UpperMonomials @cindex UpperMonomials @c ---content UpperMonomials--- Procedure from library @code{qhmoduli.lib} (@pxref{qhmoduli_lib}). @table @asis @item @strong{Usage:} UpperMonomials(poly f, [intvec w]) @item @strong{Purpose:} compute the upper monomials of the milnor algebra of f. @item @strong{Assume:} f is quasihomogeneous (w.r.t. w) @item @strong{Return:} ideal @end table @strong{Example:} @smallexample @c computed example UpperMonomials d2t_singular/qhmoduli_lib.doc:280 LIB "qhmoduli.lib"; ring B = 0,(x,y,z), ls; poly f = -z5+y5+x2z+x2y; UpperMonomials(f); @expansion{} _[1]=y3z3 @expansion{} _[2]=x2y3 @expansion{} _[3]=x2y2 @c end example UpperMonomials d2t_singular/qhmoduli_lib.doc:280 @end smallexample @c ---end content UpperMonomials--- @c ------------------- Max ------------- @node Max, Min, UpperMonomials, qhmoduli_lib @subsubsection Max @cindex Max @c ---content Max--- Procedure from library @code{qhmoduli.lib} (@pxref{qhmoduli_lib}). @table @asis @item @strong{Usage:} Max(data); intvec/list of integers data @item @strong{Purpose:} find the maximal integer contained in 'data' @item @strong{Return:} list @item @strong{Assume:} 'data' contains only integers and is not empty @end table @c ---end content Max--- @c ------------------- Min ------------- @node Min, Table, Max, qhmoduli_lib @subsubsection Min @cindex Min @c ---content Min--- Procedure from library @code{qhmoduli.lib} (@pxref{qhmoduli_lib}). @table @asis @item @strong{Usage:} Min(data); intvec/list of integers data @item @strong{Purpose:} find the minimal integer contained in 'data' @item @strong{Return:} list @item @strong{Assume:} 'data' contains only integers and is not empty @end table @c ---end content Min--- @c ------------------- Table ------------- @node Table,, Min, qhmoduli_lib @subsubsection Table @cindex Table @c ---content Table--- Procedure from library @code{qhmoduli.lib} (@pxref{qhmoduli_lib}). @table @asis @item @strong{Usage:} Table(cmd,i, lb, ub); string cmd, i; int lb, ub @item @strong{Purpose:} generate a list of size ub - lb + 1 s.t. _[i] = cmd(i) @item @strong{Return:} list @end table @c ---end content Table--- texi2html-1.82/test/singular_manual/d2t_singular/linalg_lib_noEx.tex0000644000175000017500000005373011264347126027612 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/linalg_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/linalg_lib.doc INSTEAD @c library version: (1.10.2.15,2003/04/04) @c library file: ../Singular/LIB/linalg.lib @cindex linalg.lib @cindex linalg_lib @table @asis @item @strong{Library:} linalg.lib @item @strong{Purpose:} Algorithmic Linear Algebra @item @strong{Authors:} Ivor Saynisch (ivs@@math.tu-cottbus.de) @* Mathias Schulze (mschulze@@mathematik.uni-kl.de) @end table @strong{Procedures:} @menu * inverse:: matrix, the inverse of A * inverse_B:: list(matrix Inv,poly p),Inv*A=p*En ( using busadj(A) ) * inverse_L:: list(matrix Inv,poly p),Inv*A=p*En ( using lift ) * sym_gauss:: symmetric gaussian algorithm * orthogonalize:: Gram-Schmidt orthogonalization * diag_test:: test whether A can be diagonalized * busadj:: coefficients of Adj(E*t-A) and coefficients of det(E*t-A) * charpoly:: characteristic polynomial of A ( using busadj(A) ) * adjoint:: adjoint of A ( using busadj(A) ) * det_B:: determinant of A ( using busadj(A) ) * gaussred:: gaussian reduction: P*A=U*S, S a row reduced form of A * gaussred_pivot:: gaussian reduction: P*A=U*S, uses row pivoting * gauss_nf:: gaussian normal form of A * mat_rk:: rank of constant matrix A * U_D_O:: P*A=U*D*O, P,D,U,O=permutation,diag,lower-,upper-triang * pos_def:: test symmetric matrix for positive definiteness * hessenberg:: Hessenberg form of M * evnf:: eigenvalues normal form of (e[,m]) * eigenvals:: eigenvalues with multiplicities of M * minipoly:: minimal polynomial of M * jordan:: Jordan data of M * jordanbasis:: Jordan basis and weight filtration of M * jordanmatrix:: Jordan matrix with Jordan data (e,s,m) * jordannf:: Jordan normal form of M @end menu @c ---end content LibInfo--- @c ------------------- inverse ------------- @node inverse, inverse_B,, linalg_lib @subsubsection inverse @cindex inverse @c ---content inverse--- Procedure from library @code{linalg.lib} (@pxref{linalg_lib}). @table @asis @item @strong{Usage:} inverse(A [,opt]); A a square matrix, opt integer @item @strong{Return:} @format a matrix: - the inverse matrix of A, if A is invertible; - the 1x1 0-matrix if A is not invertible (in the polynomial ring!). There are the following options: - opt=0 or not given: heuristically best option from below - opt=1 : apply std to (transpose(E,A)), ordering (C,dp). - opt=2 : apply interred (transpose(E,A)), ordering (C,dp). - opt=3 : apply lift(A,E), ordering (C,dp). @end format @item @strong{Note:} parameters and minpoly are allowed; opt=2 is only correct for matrices with entries in a field @end table @strong{Example:} @smallexample @c skipped computation of example inverse d2t_singular/linalg_lib.doc:76 LIB "linalg.lib"; ring r=0,(x,y,z),lp; matrix A[3][3]= 1,4,3, 1,5,7, 0,4,17; print(inverse(A));""; matrix B[3][3]= y+1, x+y, y, z, z+1, z, y+z+2,x+y+z+2,y+z+1; print(inverse(B)); print(B*inverse(B)); @end smallexample @c inserted refs from d2t_singular/linalg_lib.doc:92 @ifinfo @menu See also: * inverse_B:: * inverse_L:: @end menu @end ifinfo @iftex @strong{See also:} @ref{inverse_B}; @ref{inverse_L}. @end iftex @c end inserted refs from d2t_singular/linalg_lib.doc:92 @c ---end content inverse--- @c ------------------- inverse_B ------------- @node inverse_B, inverse_L, inverse, linalg_lib @subsubsection inverse_B @cindex inverse_B @c ---content inverse_B--- Procedure from library @code{linalg.lib} (@pxref{linalg_lib}). @table @asis @item @strong{Usage:} inverse_B(A); A = square matrix @item @strong{Return:} list Inv with @*- Inv[1] = matrix I and @*- Inv[2] = poly p @*such that I*A = unitmat(n)*p; @item @strong{Note:} p=1 if 1/det(A) is computable and p=det(A) if not; @*the computation uses busadj. @end table @strong{Example:} @smallexample @c skipped computation of example inverse_B d2t_singular/linalg_lib.doc:122 LIB "linalg.lib"; ring r=0,(x,y),lp; matrix A[3][3]=x,y,1,1,x2,y,x,6,0; print(A); list Inv=inverse_B(A); print(Inv[1]); print(Inv[2]); print(Inv[1]*A); @end smallexample @c inserted refs from d2t_singular/linalg_lib.doc:133 @ifinfo @menu See also: * inverse:: * inverse_L:: @end menu @end ifinfo @iftex @strong{See also:} @ref{inverse}; @ref{inverse_L}. @end iftex @c end inserted refs from d2t_singular/linalg_lib.doc:133 @c ---end content inverse_B--- @c ------------------- inverse_L ------------- @node inverse_L, sym_gauss, inverse_B, linalg_lib @subsubsection inverse_L @cindex inverse_L @c ---content inverse_L--- Procedure from library @code{linalg.lib} (@pxref{linalg_lib}). @table @asis @item @strong{Usage:} inverse_L(A); A = square matrix @item @strong{Return:} list Inv representing a left inverse of A, i.e @*- Inv[1] = matrix I and @*- Inv[2] = poly p @*such that I*A = unitmat(n)*p; @item @strong{Note:} p=1 if 1/det(A) is computable and p=det(A) if not; @*the computation computes first det(A) and then uses lift @end table @strong{Example:} @smallexample @c skipped computation of example inverse_L d2t_singular/linalg_lib.doc:163 LIB "linalg.lib"; ring r=0,(x,y),lp; matrix A[3][3]=x,y,1,1,x2,y,x,6,0; print(A); list Inv=inverse_L(A); print(Inv[1]); print(Inv[2]); print(Inv[1]*A); @end smallexample @c inserted refs from d2t_singular/linalg_lib.doc:174 @ifinfo @menu See also: * inverse:: * inverse_B:: @end menu @end ifinfo @iftex @strong{See also:} @ref{inverse}; @ref{inverse_B}. @end iftex @c end inserted refs from d2t_singular/linalg_lib.doc:174 @c ---end content inverse_L--- @c ------------------- sym_gauss ------------- @node sym_gauss, orthogonalize, inverse_L, linalg_lib @subsubsection sym_gauss @cindex sym_gauss @c ---content sym_gauss--- Procedure from library @code{linalg.lib} (@pxref{linalg_lib}). @table @asis @item @strong{Usage:} sym_gauss(A); A = symmetric matrix @item @strong{Return:} matrix, diagonalisation with symmetric gauss algorithm @end table @strong{Example:} @smallexample @c skipped computation of example sym_gauss d2t_singular/linalg_lib.doc:197 LIB "linalg.lib"; ring r=0,(x),lp; matrix A[2][2]=1,4,4,15; print(A); print(sym_gauss(A)); @end smallexample @c ---end content sym_gauss--- @c ------------------- orthogonalize ------------- @node orthogonalize, diag_test, sym_gauss, linalg_lib @subsubsection orthogonalize @cindex orthogonalize @c ---content orthogonalize--- Procedure from library @code{linalg.lib} (@pxref{linalg_lib}). @table @asis @item @strong{Usage:} orthogonalize(A); A = constant matrix @item @strong{Return:} matrix, orthogonal basis of the column space of A @end table @strong{Example:} @smallexample @c skipped computation of example orthogonalize d2t_singular/linalg_lib.doc:224 LIB "linalg.lib"; ring r=0,(x),lp; matrix A[4][4]=5,6,12,4,7,3,2,6,12,1,1,2,6,4,2,10; print(A); print(orthogonalize(A)); @end smallexample @c ---end content orthogonalize--- @c ------------------- diag_test ------------- @node diag_test, busadj, orthogonalize, linalg_lib @subsubsection diag_test @cindex diag_test @c ---content diag_test--- Procedure from library @code{linalg.lib} (@pxref{linalg_lib}). @table @asis @item @strong{Usage:} diag_test(A); A = const square matrix @item @strong{Return:} int, 1 if A is diagonalisable, 0 if not @*-1 no statement is possible, since A does not split. @item @strong{Note:} The test works only for split matrices, i.e if eigenvalues of A are in the ground field. @*Does not work with parameters (uses factorize,gcd). @end table @strong{Example:} @smallexample @c skipped computation of example diag_test d2t_singular/linalg_lib.doc:257 LIB "linalg.lib"; ring r=0,(x),dp; matrix A[4][4]=6,0,0,0,0,0,6,0,0,6,0,0,0,0,0,6; print(A); diag_test(A); @end smallexample @c ---end content diag_test--- @c ------------------- busadj ------------- @node busadj, charpoly, diag_test, linalg_lib @subsubsection busadj @cindex busadj @c ---content busadj--- Procedure from library @code{linalg.lib} (@pxref{linalg_lib}). @table @asis @item @strong{Usage:} busadj(A); A = square matrix (of size nxn) @item @strong{Return:} list L: @format L[1] contains the (n+1) coefficients of the characteristic polynomial X of A, i.e. X = L[1][1]+..+L[1][k]*t^(k-1)+..+(L[1][n+1])*t^n L[2] contains the n (nxn)-matrices Hk which are the coefficients of the busadjoint bA = adjoint(E*t-A) of A, i.e. bA = (Hn-1)*t^(n-1)+...+Hk*t^k+...+H0, ( Hk=L[2][k+1] ) @end format @end table @strong{Example:} @smallexample @c skipped computation of example busadj d2t_singular/linalg_lib.doc:292 LIB "linalg.lib"; ring r = 0,(t,x),lp; matrix A[2][2] = 1,x2,x,x2+3x; print(A); list L = busadj(A); poly X = L[1][1]+L[1][2]*t+L[1][3]*t2; X; matrix bA[2][2] = L[2][1]+L[2][2]*t; print(bA); //the busadjoint of A; print(bA*(t*unitmat(2)-A)); @end smallexample @c ---end content busadj--- @c ------------------- charpoly ------------- @node charpoly, adjoint, busadj, linalg_lib @subsubsection charpoly @cindex charpoly @c ---content charpoly--- Procedure from library @code{linalg.lib} (@pxref{linalg_lib}). @table @asis @item @strong{Usage:} charpoly(A[,v]); A square matrix, v string, name of a variable @item @strong{Return:} poly, the characteristic polynomial det(E*v-A) @*(default: v=name of last variable) @item @strong{Note:} A must be independent of the variable v. The computation uses det. If printlevel>0, det(E*v-A) is diplayed recursively. @end table @strong{Example:} @smallexample @c skipped computation of example charpoly d2t_singular/linalg_lib.doc:328 LIB "linalg.lib"; ring r=0,(x,t),dp; matrix A[3][3]=1,x2,x,x2,6,4,x,4,1; print(A); charpoly(A,"t"); @end smallexample @c ---end content charpoly--- @c ------------------- adjoint ------------- @node adjoint, det_B, charpoly, linalg_lib @subsubsection adjoint @cindex adjoint @c ---content adjoint--- Procedure from library @code{linalg.lib} (@pxref{linalg_lib}). @table @asis @item @strong{Usage:} adjoint(A); A = square matrix @item @strong{Return:} adjoint matrix of A, i.e. Adj*A=det(A)*E @item @strong{Note:} computation uses busadj(A) @end table @strong{Example:} @smallexample @c skipped computation of example adjoint d2t_singular/linalg_lib.doc:358 LIB "linalg.lib"; ring r=0,(t,x),lp; matrix A[2][2]=1,x2,x,x2+3x; print(A); matrix Adj[2][2]=adjoint(A); print(Adj); //Adj*A=det(A)*E print(Adj*A); @end smallexample @c ---end content adjoint--- @c ------------------- det_B ------------- @node det_B, gaussred, adjoint, linalg_lib @subsubsection det_B @cindex det_B @c ---content det_B--- Procedure from library @code{linalg.lib} (@pxref{linalg_lib}). @table @asis @item @strong{Usage:} det_B(A); A any matrix @item @strong{Return:} returns the determinant of A @item @strong{Note:} the computation uses the busadj algorithm @end table @strong{Example:} @smallexample @c skipped computation of example det_B d2t_singular/linalg_lib.doc:390 LIB "linalg.lib"; ring r=0,(x),dp; matrix A[10][10]=random(2,10,10)+unitmat(10)*x; print(A); det_B(A); @end smallexample @c ---end content det_B--- @c ------------------- gaussred ------------- @node gaussred, gaussred_pivot, det_B, linalg_lib @subsubsection gaussred @cindex gaussred @c ---content gaussred--- Procedure from library @code{linalg.lib} (@pxref{linalg_lib}). @table @asis @item @strong{Usage:} gaussred(A); A any constant matrix @item @strong{Return:} list Z: Z[1]=P , Z[2]=U , Z[3]=S , Z[4]=rank(A) @*gives a row reduced matrix S, a permutation matrix P and a normalized lower triangular matrix U, with P*A=U*S @item @strong{Note:} This procedure is designed for teaching purposes mainly. The straight forward implementation in the interpreted library is not very efficient (no standard basis computation). @end table @strong{Example:} @smallexample @c skipped computation of example gaussred d2t_singular/linalg_lib.doc:424 LIB "linalg.lib"; ring r=0,(x),dp; matrix A[5][4]=1,3,-1,4,2,5,-1,3,1,3,-1,4,0,4,-3,1,-3,1,-5,-2; print(A); list Z=gaussred(A); //construct P,U,S s.t. P*A=U*S print(Z[1]); //P print(Z[2]); //U print(Z[3]); //S print(Z[4]); //rank print(Z[1]*A); //P*A print(Z[2]*Z[3]); //U*S @end smallexample @c ---end content gaussred--- @c ------------------- gaussred_pivot ------------- @node gaussred_pivot, gauss_nf, gaussred, linalg_lib @subsubsection gaussred_pivot @cindex gaussred_pivot @c ---content gaussred_pivot--- Procedure from library @code{linalg.lib} (@pxref{linalg_lib}). @table @asis @item @strong{Usage:} gaussred_pivot(A); A any constant matrix @item @strong{Return:} list Z: Z[1]=P , Z[2]=U , Z[3]=S , Z[4]=rank(A) @*gives n row reduced matrix S, a permutation matrix P and a normalized lower triangular matrix U, with P*A=U*S @item @strong{Note:} with row pivoting @end table @strong{Example:} @smallexample @c skipped computation of example gaussred_pivot d2t_singular/linalg_lib.doc:462 LIB "linalg.lib"; ring r=0,(x),dp; matrix A[5][4] = 1, 3,-1,4, 2, 5,-1,3, 1, 3,-1,4, 0, 4,-3,1, -3,1,-5,-2; list Z=gaussred_pivot(A); //construct P,U,S s.t. P*A=U*S print(Z[1]); //P print(Z[2]); //U print(Z[3]); //S print(Z[4]); //rank print(Z[1]*A); //P*A print(Z[2]*Z[3]); //U*S @end smallexample @c ---end content gaussred_pivot--- @c ------------------- gauss_nf ------------- @node gauss_nf, mat_rk, gaussred_pivot, linalg_lib @subsubsection gauss_nf @cindex gauss_nf @c ---content gauss_nf--- Procedure from library @code{linalg.lib} (@pxref{linalg_lib}). @table @asis @item @strong{Usage:} gauss_nf(A); A any constant matrix @item @strong{Return:} matrix; gauss normal form of A (uses gaussred) @end table @strong{Example:} @smallexample @c skipped computation of example gauss_nf d2t_singular/linalg_lib.doc:498 LIB "linalg.lib"; ring r = 0,(x),dp; matrix A[4][4] = 1,4,4,7,2,5,5,4,4,1,1,3,0,2,2,7; print(gauss_nf(A)); @end smallexample @c ---end content gauss_nf--- @c ------------------- mat_rk ------------- @node mat_rk, U_D_O, gauss_nf, linalg_lib @subsubsection mat_rk @cindex mat_rk @c ---content mat_rk--- Procedure from library @code{linalg.lib} (@pxref{linalg_lib}). @table @asis @item @strong{Usage:} mat_rk(A); A any constant matrix @item @strong{Return:} int, rank of A @end table @strong{Example:} @smallexample @c skipped computation of example mat_rk d2t_singular/linalg_lib.doc:524 LIB "linalg.lib"; ring r = 0,(x),dp; matrix A[4][4] = 1,4,4,7,2,5,5,4,4,1,1,3,0,2,2,7; mat_rk(A); @end smallexample @c ---end content mat_rk--- @c ------------------- U_D_O ------------- @node U_D_O, pos_def, mat_rk, linalg_lib @subsubsection U_D_O @cindex U_D_O @c ---content U_D_O--- Procedure from library @code{linalg.lib} (@pxref{linalg_lib}). @table @asis @item @strong{Usage:} U_D_O(A); constant invertible matrix A @item @strong{Return:} list Z: Z[1]=P , Z[2]=U , Z[3]=D , Z[4]=O @*gives a permutation matrix P, @*a normalized lower triangular matrix U , @*a diagonal matrix D, and @*a normalized upper triangular matrix O @*with P*A=U*D*O @item @strong{Note:} Z[1]=-1 means that A is not regular (proc uses gaussred) @end table @strong{Example:} @smallexample @c skipped computation of example U_D_O d2t_singular/linalg_lib.doc:558 LIB "linalg.lib"; ring r = 0,(x),dp; matrix A[5][5] = 10, 4, 0, -9, 8, -3, 6, -6, -4, 9, 0, 3, -1, -9, -8, -4,-2, -6, -10,10, -9, 5, -1, -6, 5; list Z = U_D_O(A); //construct P,U,D,O s.t. P*A=U*D*O print(Z[1]); //P print(Z[2]); //U print(Z[3]); //D print(Z[4]); //O print(Z[1]*A); //P*A print(Z[2]*Z[3]*Z[4]); //U*D*O @end smallexample @c ---end content U_D_O--- @c ------------------- pos_def ------------- @node pos_def, hessenberg, U_D_O, linalg_lib @subsubsection pos_def @cindex pos_def @c ---content pos_def--- Procedure from library @code{linalg.lib} (@pxref{linalg_lib}). @table @asis @item @strong{Usage:} pos_def(A); A = constant, symmetric square matrix @item @strong{Return:} int: @*1 if A is positive definit , @*0 if not, @*-1 if unknown @end table @strong{Example:} @smallexample @c skipped computation of example pos_def d2t_singular/linalg_lib.doc:597 LIB "linalg.lib"; ring r = 0,(x),dp; matrix A[5][5] = 20, 4, 0, -9, 8, 4, 12, -6, -4, 9, 0, -6, -2, -9, -8, -9, -4, -9, -20, 10, 8, 9, -8, 10, 10; pos_def(A); matrix B[3][3] = 3, 2, 0, 2, 12, 4, 0, 4, 2; pos_def(B); @end smallexample @c ---end content pos_def--- @c ------------------- hessenberg ------------- @node hessenberg, evnf, pos_def, linalg_lib @subsubsection hessenberg @cindex hessenberg @c ---content hessenberg--- Procedure from library @code{linalg.lib} (@pxref{linalg_lib}). @table @asis @item @strong{Usage:} hessenberg(M); matrix M @item @strong{Assume:} M constant square matrix @item @strong{Return:} matrix H; Hessenberg form of M @end table @strong{Example:} @smallexample @c skipped computation of example hessenberg d2t_singular/linalg_lib.doc:634 LIB "linalg.lib"; ring R=0,x,dp; matrix M[3][3]=3,2,1,0,2,1,0,0,3; print(M); print(hessenberg(M)); @end smallexample @c ---end content hessenberg--- @c ------------------- evnf ------------- @node evnf, eigenvals, hessenberg, linalg_lib @subsubsection evnf @cindex evnf @c ---content evnf--- Procedure from library @code{linalg.lib} (@pxref{linalg_lib}). @table @asis @item @strong{Usage:} evnf(e[,m]); ideal e, intvec m @item @strong{Assume:} ncols(e)==size(m) @item @strong{Return:} order eigenvalues e with multiplicities m @end table @c ---end content evnf--- @c ------------------- eigenvals ------------- @node eigenvals, minipoly, evnf, linalg_lib @subsubsection eigenvals @cindex eigenvals @c ---content eigenvals--- Procedure from library @code{linalg.lib} (@pxref{linalg_lib}). @table @asis @item @strong{Usage:} eigenvals(M); matrix M @item @strong{Assume:} eigenvalues of M in basefield @item @strong{Return:} @format list l; ideal l[1]; number l[1][i]; i-th eigenvalue of M intvec l[2]; int l[2][i]; multiplicity of i-th eigenvalue of M @end format @end table @strong{Example:} @smallexample @c skipped computation of example eigenvals d2t_singular/linalg_lib.doc:690 LIB "linalg.lib"; ring R=0,x,dp; matrix M[3][3]=3,2,1,0,2,1,0,0,3; print(M); eigenvals(M); @end smallexample @c ---end content eigenvals--- @c ------------------- minipoly ------------- @node minipoly, jordan, eigenvals, linalg_lib @subsubsection minipoly @cindex minipoly @c ---content minipoly--- Procedure from library @code{linalg.lib} (@pxref{linalg_lib}). @table @asis @item @strong{Usage:} minpoly(M); matrix M @item @strong{Assume:} eigenvalues of M in basefield @item @strong{Return:} @format list l; minimal polynomial of M ideal l[1]; number l[1][i]; i-th root of minimal polynomial of M intvec l[2]; int l[2][i]; multiplicity of i-th root of minimal polynomial of M @end format @end table @strong{Example:} @smallexample @c skipped computation of example minipoly d2t_singular/linalg_lib.doc:726 LIB "linalg.lib"; ring R=0,x,dp; matrix M[3][3]=3,2,1,0,2,1,0,0,3; print(M); minipoly(M); @end smallexample @c ---end content minipoly--- @c ------------------- jordan ------------- @node jordan, jordanbasis, minipoly, linalg_lib @subsubsection jordan @cindex jordan @c ---content jordan--- Procedure from library @code{linalg.lib} (@pxref{linalg_lib}). @table @asis @item @strong{Usage:} jordan(M); matrix M @item @strong{Assume:} eigenvalues of M in basefield @item @strong{Return:} @format list l; Jordan data of M ideal l[1]; number l[1][i]; eigenvalue of i-th Jordan block of M intvec l[2]; int l[2][i]; size of i-th Jordan block of M intvec l[3]; int l[3][i]; multiplicity of i-th Jordan block of M @end format @end table @strong{Example:} @smallexample @c skipped computation of example jordan d2t_singular/linalg_lib.doc:764 LIB "linalg.lib"; ring R=0,x,dp; matrix M[3][3]=3,2,1,0,2,1,0,0,3; print(M); jordan(M); @end smallexample @c ---end content jordan--- @c ------------------- jordanbasis ------------- @node jordanbasis, jordanmatrix, jordan, linalg_lib @subsubsection jordanbasis @cindex jordanbasis @c ---content jordanbasis--- Procedure from library @code{linalg.lib} (@pxref{linalg_lib}). @table @asis @item @strong{Usage:} jordanbasis(M); matrix M @item @strong{Assume:} eigenvalues of M in basefield @item @strong{Return:} @format list l: module l[1]; inverse(l[1])*M*l[1] in Jordan normal form intvec l[2]; int l[2][i]; weight filtration index of l[1][i] @end format @end table @strong{Example:} @smallexample @c skipped computation of example jordanbasis d2t_singular/linalg_lib.doc:799 LIB "linalg.lib"; ring R=0,x,dp; matrix M[3][3]=3,2,1,0,2,1,0,0,3; print(M); list l=jordanbasis(M); print(l[1]); print(l[2]); print(inverse(l[1])*M*l[1]); @end smallexample @c ---end content jordanbasis--- @c ------------------- jordanmatrix ------------- @node jordanmatrix, jordannf, jordanbasis, linalg_lib @subsubsection jordanmatrix @cindex jordanmatrix @c ---content jordanmatrix--- Procedure from library @code{linalg.lib} (@pxref{linalg_lib}). @table @asis @item @strong{Usage:} jordanmatrix(e,s,m); ideal e, intvec s, intvec m @item @strong{Assume:} ncols(e)==size(s)==size(m) @item @strong{Return:} @format matrix J; Jordan matrix with list(e,s,m)==jordan(J) @end format @end table @strong{Example:} @smallexample @c skipped computation of example jordanmatrix d2t_singular/linalg_lib.doc:834 LIB "linalg.lib"; ring R=0,x,dp; ideal e=ideal(2,3); intvec s=1,2; intvec m=1,1; print(jordanmatrix(e,s,m)); @end smallexample @c ---end content jordanmatrix--- @c ------------------- jordannf ------------- @node jordannf,, jordanmatrix, linalg_lib @subsubsection jordannf @cindex jordannf @c ---content jordannf--- Procedure from library @code{linalg.lib} (@pxref{linalg_lib}). @table @asis @item @strong{Usage:} jordannf(M); matrix M @item @strong{Assume:} eigenvalues of M in basefield @item @strong{Return:} matrix J; Jordan normal form of M @end table @strong{Example:} @smallexample @c skipped computation of example jordannf d2t_singular/linalg_lib.doc:865 LIB "linalg.lib"; ring R=0,x,dp; matrix M[3][3]=3,2,1,0,2,1,0,0,3; print(M); print(jordannf(M)); @end smallexample @c ---end content jordannf--- texi2html-1.82/test/singular_manual/d2t_singular/brnoeth_lib.tex0000644000175000017500000011165311264347126027013 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/brnoeth_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/brnoeth_lib.doc INSTEAD @c library version: (1.11.2.5,2002/10/18) @c library file: ../Singular/LIB/brnoeth.lib @cindex brnoeth.lib @cindex brnoeth_lib @table @asis @item @strong{Library:} brnoeth.lib @item @strong{Purpose:} Brill-Noether Algorithm, Weierstrass-SG and AG-codes @item @strong{Authors:} Jose Ignacio Farran Martin, ignfar@@eis.uva.es @*Christoph Lossen, lossen@@mathematik.uni-kl.de @item @strong{Overview:} Implementation of the Brill-Noether algorithm for solving the Riemann-Roch problem and applications in Algebraic Geometry codes. The computation of Weierstrass semigroups is also implemented.@* The procedures are intended only for plane (singular) curves defined over a prime field of positive characteristic.@* For more information about the library see the end of the file brnoeth.lib. @end table @strong{Main procedures:} @menu * Adj_div:: computes the conductor of a curve * NSplaces:: computes non-singular places with given degrees * BrillNoether:: computes a vector space basis of the linear system L(D) * Weierstrass:: computes the Weierstrass semigroup of C at P up to m * extcurve:: extends the curve C to an extension of degree d * AGcode_L:: computes the evaluation AG code with divisors G and D * AGcode_Omega:: computes the residual AG code with divisors G and D * prepSV:: preprocessing for the basic decoding algorithm * decodeSV:: decoding of a word with the basic decoding algorithm @end menu @strong{Auxiliary procedures:} @menu * closed_points:: computes the zero-set of a zero-dim. ideal in 2 vars * dual_code:: computes the dual code * sys_code:: computes an equivalent systematic code * permute_L:: applies a permutation to a list @end menu @cindex Weierstrass semigroup @cindex Algebraic Geometry codes @cindex Brill-Noether algorithm @c inserted refs from d2t_singular/brnoeth_lib.doc:47 @ifinfo @menu See also: * hnoether_lib:: * triang_lib:: @end menu @end ifinfo @iftex @strong{See also:} @ref{hnoether_lib}; @ref{triang_lib}. @end iftex @c end inserted refs from d2t_singular/brnoeth_lib.doc:47 @c ---end content LibInfo--- @c ------------------- Adj_div ------------- @node Adj_div, NSplaces,, brnoeth_lib @subsubsection Adj_div @cindex Adj_div @c ---content Adj_div--- Procedure from library @code{brnoeth.lib} (@pxref{brnoeth_lib}). @table @asis @item @strong{Usage:} Adj_div( f [,l] ); f a poly, [l a list] @item @strong{Return:} list L with the computed data: @format L[1] a list of rings: L[1][1]=aff_r (affine), L[1][2]=Proj_R (projective), L[2] an intvec with 2 entries (degree, genus), L[3] a list of intvec (closed places), L[4] an intvec (conductor), L[5] a list of lists: L[5][d][1] a (local) ring over an extension of degree d, L[5][d][2] an intvec (degrees of base points of places of degree d) @end format @item @strong{Note:} @code{Adj_div(f);} computes and stores the fundamental data of the plane curve defined by f as needed for AG codes. @*In the affine ring you can find the following data: @format poly CHI: affine equation of the curve, ideal Aff_SLocus: affine singular locus (std), list Inf_Points: points at infinity Inf_Points[1]: singular points Inf_Points[2]: non-singular points, list Aff_SPoints: affine singular points (if not empty). @end format In the projective ring you can find the projective equation CHI of the curve (poly). @*In the local rings L[5][d][1] you find: @format list POINTS: base points of the places of degree d, list LOC_EQS: local equations of the curve at the base points, list BRANCHES: Hamburger-Noether developments of the places, list PARAMETRIZATIONS: local parametrizations of the places, @end format Each entry of the list L[3] corresponds to one closed place (i.e., a place and all its conjugates) which is represented by an intvec of size two, the first entry is the degree of the place (in particular, it tells the local ring where to find the data describing one representative of the closed place), and the second one is the position of those data in the lists POINTS, etc., inside this local ring.@* In the intvec L[4] (conductor) the i-th entry corresponds to the i-th entry in the list of places L[3]. With no optional arguments, the conductor is computed by local invariants of the singularities; otherwise it is computed by the Dedekind formula. @* An affine point is represented by a list P where P[1] is std of a prime ideal and P[2] is an intvec containing the position of the places above P in the list of closed places L[3]. @* If the point is at infinity, P[1] is a homogeneous irreducible polynomial in two variables. If @code{printlevel>=0} additional comments are displayed (default: @code{printlevel=0}). @cindex Hamburger-Noether expansions @cindex adjunction divisor @end table @strong{Example:} @smallexample @c computed example Adj_div d2t_singular/brnoeth_lib.doc:124 LIB "brnoeth.lib"; int plevel=printlevel; printlevel=-1; ring s=2,(x,y),lp; list C=Adj_div(y9+y8+xy6+x2y3+y2+x3); @expansion{} The genus of the curve is 3 def aff_R=C[1][1]; // the affine ring setring aff_R; listvar(aff_R); // data in the affine ring @expansion{} // aff_R [0] *ring @expansion{} // Inf_Points [0] list, size: 2 @expansion{} // Aff_SPoints [0] list, size: 3 @expansion{} // Aff_SLocus [0] ideal (SB), 2 generator(s) @expansion{} // CHI [0] poly CHI; // affine equation of the curve @expansion{} x3+x2y3+xy6+y9+y8+y2 Aff_SLocus; // ideal of the affine singular locus @expansion{} Aff_SLocus[1]=y8+y2 @expansion{} Aff_SLocus[2]=x2+y6 Aff_SPoints[1]; // 1st affine singular point: (1:1:1), no.1 @expansion{} [1]: @expansion{} _[1]=y2+y+1 @expansion{} _[2]=x+1 @expansion{} [2]: @expansion{} 1 Inf_Points[1]; // singular point(s) at infinity: (1:0:0), no.4 @expansion{} [1]: @expansion{} [1]: @expansion{} y @expansion{} [2]: @expansion{} 4 Inf_Points[2]; // list of non-singular points at infinity @expansion{} empty list // def proj_R=C[1][2]; // the projective ring setring proj_R; CHI; // projective equation of the curve @expansion{} x3z6+x2y3z4+xy6z2+y9+y8z+y2z7 C[2][1]; // degree of the curve @expansion{} 9 C[2][2]; // genus of the curve @expansion{} 3 C[3]; // list of computed places @expansion{} [1]: @expansion{} 2,1 @expansion{} [2]: @expansion{} 1,1 @expansion{} [3]: @expansion{} 1,2 @expansion{} [4]: @expansion{} 1,3 C[4]; // adjunction divisor (all points are singular!) @expansion{} 2,2,2,42 // // we look at the place(s) of degree 2 by changing to the ring C[5][2][1]; @expansion{} // characteristic : 2 @expansion{} // 1 parameter : a @expansion{} // minpoly : ... @expansion{} // number of vars : 3 @expansion{} // block 1 : ordering ls @expansion{} // : names x y t @expansion{} // block 2 : ordering C def S(2)=C[5][2][1]; setring S(2); POINTS; // base point(s) of place(s) of degree 2: (1:a:1) @expansion{} [1]: @expansion{} [1]: @expansion{} 1 @expansion{} [2]: @expansion{} (a) @expansion{} [3]: @expansion{} 1 LOC_EQS; // local equation(s) @expansion{} [1]: @expansion{} y2+y3+(a+1)*y4+y6+(a+1)*y8+y9+(a)*xy2+(a+1)*xy4+xy6+(a+1)*x2y+(a)*x2y2\ +x2y3+x3 PARAMETRIZATIONS; // parametrization(s) and exactness @expansion{} [1]: @expansion{} [1]: @expansion{} _[1]=t2+(a+1)*t3 @expansion{} _[2]=t3+(a+1)*t4 @expansion{} [2]: @expansion{} 3,4 BRANCHES; // Hamburger-Noether development @expansion{} [1]: @expansion{} [1]: @expansion{} _[1,1]=0 @expansion{} _[1,2]=x @expansion{} _[1,3]=0 @expansion{} _[2,1]=0 @expansion{} _[2,2]=1 @expansion{} _[2,3]=(a+1) @expansion{} [2]: @expansion{} 1,-4 @expansion{} [3]: @expansion{} 0 @expansion{} [4]: @expansion{} y+(a+1)*xy+(a)*x2y+(a)*x2y2+(a+1)*x3+x3y+x3y3+(a)*x4+(a+1)*x4y2+(a+\ 1)*x4y3+x5+x5y2+(a)*x6+(a+1)*x6y2+x6y4+x6y5+x7y+(a+1)*x8+(a+1)*x8y+x8y4+(\ a+1)*x8y6+x9+x9y7+(a+1)*x10+x11y6+(a+1)*x12y4+x13y5+x14+x14y+x15y4+x16+(a\ +1)*x16y2+x17y3+x19y2+(a+1)*x20+x21y+x23 printlevel=plevel; @c end example Adj_div d2t_singular/brnoeth_lib.doc:124 @end smallexample @c inserted refs from d2t_singular/brnoeth_lib.doc:158 @ifinfo @menu See also: * NSplaces:: * closed_points:: @end menu @end ifinfo @iftex @strong{See also:} @ref{NSplaces}; @ref{closed_points}. @end iftex @c end inserted refs from d2t_singular/brnoeth_lib.doc:158 @c ---end content Adj_div--- @c ------------------- NSplaces ------------- @node NSplaces, BrillNoether, Adj_div, brnoeth_lib @subsubsection NSplaces @cindex NSplaces @c ---content NSplaces--- Procedure from library @code{brnoeth.lib} (@pxref{brnoeth_lib}). @table @asis @item @strong{Usage:} NSplaces( h, CURVE ), where h is an intvec and CURVE is a list @item @strong{Return:} list L with updated data of CURVE after computing all non-singular affine closed places whose degrees are in the intvec h: @* @format in L[1][1]: (affine ring) lists Aff_Points(d) with affine non-singular (closed) points of degree d (if non-empty), in L[3]: the newly computed closed places are added, in L[5]: local rings created/updated to store (repres. of) new places. @end format See @ref{Adj_div} for a description of the entries in L. @item @strong{Note:} The list_expression should be the output of the procedure Adj_div.@* If @code{printlevel>=0} additional comments are displayed (default: @code{printlevel=0}). @end table @strong{Example:} @smallexample @c computed example NSplaces d2t_singular/brnoeth_lib.doc:194 LIB "brnoeth.lib"; int plevel=printlevel; printlevel=-1; ring s=2,(x,y),lp; list C=Adj_div(x3y+y3+x); @expansion{} The genus of the curve is 3 // The list of computed places: C[3]; @expansion{} [1]: @expansion{} 1,1 @expansion{} [2]: @expansion{} 1,2 // create places up to degree 4 list L=NSplaces(1..4,C); // The list of computed places is now: L[3]; @expansion{} [1]: @expansion{} 1,1 @expansion{} [2]: @expansion{} 1,2 @expansion{} [3]: @expansion{} 1,3 @expansion{} [4]: @expansion{} 2,1 @expansion{} [5]: @expansion{} 3,1 @expansion{} [6]: @expansion{} 3,2 @expansion{} [7]: @expansion{} 3,3 @expansion{} [8]: @expansion{} 3,4 @expansion{} [9]: @expansion{} 3,5 @expansion{} [10]: @expansion{} 3,6 @expansion{} [11]: @expansion{} 3,7 @expansion{} [12]: @expansion{} 4,1 @expansion{} [13]: @expansion{} 4,2 @expansion{} [14]: @expansion{} 4,3 // e.g., affine non-singular points of degree 4 : def aff_r=L[1][1]; setring aff_r; Aff_Points(4); @expansion{} [1]: @expansion{} [1]: @expansion{} _[1]=y2+y+1 @expansion{} _[2]=x2+xy+x+1 @expansion{} [2]: @expansion{} 12 @expansion{} [2]: @expansion{} [1]: @expansion{} _[1]=y4+y3+y2+y+1 @expansion{} _[2]=x+y2+y+1 @expansion{} [2]: @expansion{} 13 @expansion{} [3]: @expansion{} [1]: @expansion{} _[1]=y4+y3+1 @expansion{} _[2]=x+y3+y @expansion{} [2]: @expansion{} 14 // e.g., base point of the 1st place of degree 4 : def S(4)=L[5][4][1]; setring S(4); POINTS[1]; @expansion{} [1]: @expansion{} (a3) @expansion{} [2]: @expansion{} (a2+a) @expansion{} [3]: @expansion{} 1 printlevel=plevel; @c end example NSplaces d2t_singular/brnoeth_lib.doc:194 @end smallexample @c inserted refs from d2t_singular/brnoeth_lib.doc:217 @ifinfo @menu See also: * Adj_div:: * closed_points:: @end menu @end ifinfo @iftex @strong{See also:} @ref{Adj_div}; @ref{closed_points}. @end iftex @c end inserted refs from d2t_singular/brnoeth_lib.doc:217 @c ---end content NSplaces--- @c ------------------- BrillNoether ------------- @node BrillNoether, Weierstrass, NSplaces, brnoeth_lib @subsubsection BrillNoether @cindex BrillNoether @c ---content BrillNoether--- Procedure from library @code{brnoeth.lib} (@pxref{brnoeth_lib}). @table @asis @item @strong{Usage:} BrillNoether(G,CURVE); G an intvec, CURVE a list @item @strong{Return:} list of ideals (each of them with two homogeneous generators, which represent the numerator, resp. denominator, of a rational function).@* The corresponding rational functions form a vector basis of the linear system L(G), G a rational divisor over a non-singular curve. @item @strong{Note:} The procedure must be called from the ring CURVE[1][2], where CURVE is the output of the procedure @code{NSplaces}. @* The intvec G represents a rational divisor supported on the closed places of CURVE[3] (e.g. @code{G=2,0,-1;} means 2 times the closed place 1 minus 1 times the closed place 3). @end table @strong{Example:} @smallexample @c computed example BrillNoether d2t_singular/brnoeth_lib.doc:251 LIB "brnoeth.lib"; int plevel=printlevel; printlevel=-1; ring s=2,(x,y),lp; list C=Adj_div(x3y+y3+x); @expansion{} The genus of the curve is 3 C=NSplaces(1..4,C); // the first 3 Places in C[3] are of degree 1. // we define the rational divisor G = 4*C[3][1]+4*C[3][3] (of degree 8): intvec G=4,0,4; def R=C[1][2]; setring R; list LG=BrillNoether(G,C); @expansion{} Vector basis successfully computed // here is the vector basis of L(G): LG; @expansion{} [1]: @expansion{} _[1]=1 @expansion{} _[2]=1 @expansion{} [2]: @expansion{} _[1]=y @expansion{} _[2]=x @expansion{} [3]: @expansion{} _[1]=z @expansion{} _[2]=x @expansion{} [4]: @expansion{} _[1]=y2 @expansion{} _[2]=x2 @expansion{} [5]: @expansion{} _[1]=xz2+y3 @expansion{} _[2]=x3 @expansion{} [6]: @expansion{} _[1]=xyz2+y4 @expansion{} _[2]=x4 printlevel=plevel; @c end example BrillNoether d2t_singular/brnoeth_lib.doc:251 @end smallexample @c inserted refs from d2t_singular/brnoeth_lib.doc:269 @ifinfo @menu See also: * Adj_div:: * NSplaces:: * Weierstrass:: @end menu @end ifinfo @iftex @strong{See also:} @ref{Adj_div}; @ref{NSplaces}; @ref{Weierstrass}. @end iftex @c end inserted refs from d2t_singular/brnoeth_lib.doc:269 @c ---end content BrillNoether--- @c ------------------- Weierstrass ------------- @node Weierstrass, extcurve, BrillNoether, brnoeth_lib @subsubsection Weierstrass @cindex Weierstrass @c ---content Weierstrass--- Procedure from library @code{brnoeth.lib} (@pxref{brnoeth_lib}). @table @asis @item @strong{Usage:} Weierstrass( i, m, CURVE ); i,m integers and CURVE a list @item @strong{Return:} list WS of two lists: @format WS[1] list of integers (Weierstr. semigroup of the curve at place i up to m) WS[2] list of ideals (the associated rational functions) @end format @item @strong{Note:} The procedure must be called from the ring CURVE[1][2], where CURVE is the output of the procedure @code{NSplaces}. @* i represents the place CURVE[3][i]. @* Rational functions are represented by numerator/denominator in form of ideals with two homogeneous generators. @item @strong{Warning:} The place must be rational, i.e., necessarily CURVE[3][i][1]=1. @* @end table @strong{Example:} @smallexample @c computed example Weierstrass d2t_singular/brnoeth_lib.doc:306 LIB "brnoeth.lib"; int plevel=printlevel; printlevel=-1; ring s=2,(x,y),lp; list C=Adj_div(x3y+y3+x); @expansion{} The genus of the curve is 3 C=NSplaces(1..4,C); def R=C[1][2]; setring R; // Place C[3][1] has degree 1 (i.e it is rational); list WS=Weierstrass(1,7,C); @expansion{} Vector basis successfully computed // the first part of the list is the Weierstrass semigroup up to 7 : WS[1]; @expansion{} [1]: @expansion{} 0 @expansion{} [2]: @expansion{} 3 @expansion{} [3]: @expansion{} 5 @expansion{} [4]: @expansion{} 6 @expansion{} [5]: @expansion{} 7 // and the second part are the corresponding functions : WS[2]; @expansion{} [1]: @expansion{} _[1]=1 @expansion{} _[2]=1 @expansion{} [2]: @expansion{} _[1]=y @expansion{} _[2]=z @expansion{} [3]: @expansion{} _[1]=xy @expansion{} _[2]=z2 @expansion{} [4]: @expansion{} _[1]=y2 @expansion{} _[2]=z2 @expansion{} [5]: @expansion{} _[1]=y3 @expansion{} _[2]=xz2 printlevel=plevel; @c end example Weierstrass d2t_singular/brnoeth_lib.doc:306 @end smallexample @c inserted refs from d2t_singular/brnoeth_lib.doc:324 @ifinfo @menu See also: * Adj_div:: * BrillNoether:: * NSplaces:: @end menu @end ifinfo @iftex @strong{See also:} @ref{Adj_div}; @ref{BrillNoether}; @ref{NSplaces}. @end iftex @c end inserted refs from d2t_singular/brnoeth_lib.doc:324 @c ---end content Weierstrass--- @c ------------------- extcurve ------------- @node extcurve, AGcode_L, Weierstrass, brnoeth_lib @subsubsection extcurve @cindex extcurve @c ---content extcurve--- Procedure from library @code{brnoeth.lib} (@pxref{brnoeth_lib}). @table @asis @item @strong{Usage:} extcurve( d, CURVE ); d an integer, CURVE a list @item @strong{Return:} list L which is the update of the list CURVE with additional entries @format L[1][3]: ring (p,a),(x,y),lp (affine), L[1][4]: ring (p,a),(x,y,z),lp (projective), L[1][5]: ring (p,a),(x,y,t),ls (local), L[2][3]: int (the number of rational places), @end format the rings being defined over a field extension of degree d. @* If d<2 then @code{extcurve(d,CURVE);} creates a list L which is the update of the list CURVE with additional entries @format L[1][5]: ring p,(x,y,t),ls, L[2][3]: int (the number of computed places over the base field). @end format In both cases, in the ring L[1][5] lists with the data for all the computed rational places (after a field extension of degree d) are created (see @ref{Adj_div}): @format lists POINTS, LOC_EQS, BRANCHES, PARAMETRIZATIONS. @end format @item @strong{Note:} The list CURVE should be the output of @code{NSplaces}, and must contain (at least) one place of degree d. @* You actually need all the places with degree dividing d. Otherwise, not all the places are computed, but only part of them. @* This procedure must be executed before constructing AG codes, even if no extension is needed. The ring L[1][4] must be active when constructing codes over the field extension.@* @end table @strong{Example:} @smallexample @c computed example extcurve d2t_singular/brnoeth_lib.doc:375 LIB "brnoeth.lib"; int plevel=printlevel; printlevel=-1; ring s=2,(x,y),lp; list C=Adj_div(x5+y2+y); @expansion{} The genus of the curve is 2 C=NSplaces(1..4,C); // since we have all points up to degree 4, we can extend the curve // to that extension, in order to get rational points over F_16; C=extcurve(4,C); @expansion{} Total number of rational places : NrRatPl = 33 // e.g., display the basepoint of place no. 32: def R=C[1][5]; setring R; POINTS[32]; @expansion{} [1]: @expansion{} (a3+a2+a+1) @expansion{} [2]: @expansion{} (a2+a) @expansion{} [3]: @expansion{} 1 printlevel=plevel; @c end example extcurve d2t_singular/brnoeth_lib.doc:375 @end smallexample @c inserted refs from d2t_singular/brnoeth_lib.doc:392 @ifinfo @menu See also: * AGcode_L:: * AGcode_Omega:: * Adj_div:: * NSplaces:: * closed_points:: @end menu @end ifinfo @iftex @strong{See also:} @ref{AGcode_L}; @ref{AGcode_Omega}; @ref{Adj_div}; @ref{NSplaces}; @ref{closed_points}. @end iftex @c end inserted refs from d2t_singular/brnoeth_lib.doc:392 @c ---end content extcurve--- @c ------------------- AGcode_L ------------- @node AGcode_L, AGcode_Omega, extcurve, brnoeth_lib @subsubsection AGcode_L @cindex AGcode_L @c ---content AGcode_L--- Procedure from library @code{brnoeth.lib} (@pxref{brnoeth_lib}). @table @asis @item @strong{Usage:} AGcode_L( G, D, EC ); G,D intvec, EC a list @item @strong{Return:} a generator matrix for the evaluation AG code defined by the divisors G and D. @item @strong{Note:} The procedure must be called within the ring EC[1][4], where EC is the output of @code{extcurve(d)} (or within the ring EC[1][2] if d=1). @* The entry i in the intvec D refers to the i-th rational place in EC[1][5] (i.e., to POINTS[i], etc., see @ref{extcurve}).@* The intvec G represents a rational divisor (see @ref{BrillNoether} for more details).@* The code evaluates the vector basis of L(G) at the rational places given by D. @item @strong{Warnings:} G should satisfy @ifinfo @math{ 2*genus-2 < deg(G) < size(D) } @end ifinfo @tex $ 2*genus-2 < deg(G) < size(D) $ @end tex , which is not checked by the algorithm. @*G and D should have disjoint supports (checked by the algorithm). @end table @strong{Example:} @smallexample @c computed example AGcode_L d2t_singular/brnoeth_lib.doc:432 LIB "brnoeth.lib"; int plevel=printlevel; printlevel=-1; ring s=2,(x,y),lp; list HC=Adj_div(x3+y2+y); @expansion{} The genus of the curve is 1 HC=NSplaces(1..2,HC); HC=extcurve(2,HC); @expansion{} Total number of rational places : NrRatPl = 9 def ER=HC[1][4]; setring ER; intvec G=5; // the rational divisor G = 5*HC[3][1] intvec D=2..9; // D = sum of the rational places no. 2..9 over F_4 // let us construct the corresponding evaluation AG code : matrix C=AGcode_L(G,D,HC); @expansion{} Vector basis successfully computed // here is a linear code of type [8,5,>=3] over F_4 print(C); @expansion{} 0,0,(a), (a+1),1, 1, (a+1),(a), @expansion{} 1,0,(a), (a+1),(a),(a+1),(a), (a+1), @expansion{} 1,1,1, 1, 1, 1, 1, 1, @expansion{} 0,0,(a+1),(a), 1, 1, (a), (a+1), @expansion{} 0,0,(a+1),(a), (a),(a+1),1, 1 printlevel=plevel; @c end example AGcode_L d2t_singular/brnoeth_lib.doc:432 @end smallexample @c inserted refs from d2t_singular/brnoeth_lib.doc:451 @ifinfo @menu See also: * AGcode_Omega:: * Adj_div:: * BrillNoether:: * extcurve:: @end menu @end ifinfo @iftex @strong{See also:} @ref{AGcode_Omega}; @ref{Adj_div}; @ref{BrillNoether}; @ref{extcurve}. @end iftex @c end inserted refs from d2t_singular/brnoeth_lib.doc:451 @c ---end content AGcode_L--- @c ------------------- AGcode_Omega ------------- @node AGcode_Omega, prepSV, AGcode_L, brnoeth_lib @subsubsection AGcode_Omega @cindex AGcode_Omega @c ---content AGcode_Omega--- Procedure from library @code{brnoeth.lib} (@pxref{brnoeth_lib}). @table @asis @item @strong{Usage:} AGcode_Omega( G, D, EC ); G,D intvec, EC a list @item @strong{Return:} a generator matrix for the residual AG code defined by the divisors G and D. @item @strong{Note:} The procedure must be called within the ring EC[1][4], where EC is the output of @code{extcurve(d)} (or within the ring EC[1][2] if d=1). @* The entry i in the intvec D refers to the i-th rational place in EC[1][5] (i.e., to POINTS[i], etc., see @ref{extcurve}).@* The intvec G represents a rational divisor (see @ref{BrillNoether} for more details).@* The code computes the residues of a vector space basis of @ifinfo @math{\Omega(G-D)} @end ifinfo @tex $\Omega(G-D)$ @end tex at the rational places given by D. @item @strong{Warnings:} G should satisfy @ifinfo @math{ 2*genus-2 < deg(G) < size(D) } @end ifinfo @tex $ 2*genus-2 < deg(G) < size(D) $ @end tex , which is not checked by the algorithm. @*G and D should have disjoint supports (checked by the algorithm). @end table @strong{Example:} @smallexample @c computed example AGcode_Omega d2t_singular/brnoeth_lib.doc:491 LIB "brnoeth.lib"; int plevel=printlevel; printlevel=-1; ring s=2,(x,y),lp; list HC=Adj_div(x3+y2+y); @expansion{} The genus of the curve is 1 HC=NSplaces(1..2,HC); HC=extcurve(2,HC); @expansion{} Total number of rational places : NrRatPl = 9 def ER=HC[1][4]; setring ER; intvec G=5; // the rational divisor G = 5*HC[3][1] intvec D=2..9; // D = sum of the rational places no. 2..9 over F_4 // let us construct the corresponding residual AG code : matrix C=AGcode_Omega(G,D,HC); @expansion{} Vector basis successfully computed // here is a linear code of type [8,3,>=5] over F_4 print(C); @expansion{} 0, (a),(a),(a), (a+1),1,0, 0, @expansion{} (a+1),1, (a),0, (a), 0,(a),0, @expansion{} (a+1),0, (a),(a+1),(a+1),0,0, 1 printlevel=plevel; @c end example AGcode_Omega d2t_singular/brnoeth_lib.doc:491 @end smallexample @c inserted refs from d2t_singular/brnoeth_lib.doc:510 @ifinfo @menu See also: * AGcode_L:: * Adj_div:: * BrillNoether:: * extcurve:: @end menu @end ifinfo @iftex @strong{See also:} @ref{AGcode_L}; @ref{Adj_div}; @ref{BrillNoether}; @ref{extcurve}. @end iftex @c end inserted refs from d2t_singular/brnoeth_lib.doc:510 @c ---end content AGcode_Omega--- @c ------------------- prepSV ------------- @node prepSV, decodeSV, AGcode_Omega, brnoeth_lib @subsubsection prepSV @cindex prepSV @c ---content prepSV--- Procedure from library @code{brnoeth.lib} (@pxref{brnoeth_lib}). @table @asis @item @strong{Usage:} prepSV( G, D, F, EC ); G,D,F intvecs and EC a list @item @strong{Return:} list E of size n+3, where n=size(D). All its entries but E[n+3] are matrices: @format E[1]: parity check matrix for the current AG code E[2] ... E[n+2]: matrices used in the procedure decodeSV E[n+3]: intvec with E[n+3][1]: correction capacity @ifinfo @math{epsilon} @end ifinfo @tex $epsilon$ @end tex of the algorithm E[n+3][2]: designed Goppa distance @ifinfo @math{delta} @end ifinfo @tex $delta$ @end tex of the current AG code @end format @item @strong{Note:} Computes the preprocessing for the basic (Skorobogatov-Vladut) decoding algorithm.@* The procedure must be called within the ring EC[1][4], where EC is the output of @code{extcurve(d)} (or in the ring EC[1][2] if d=1) @* The intvec G and F represent rational divisors (see @ref{BrillNoether} for more details).@* The intvec D refers to rational places (see @ref{AGcode_Omega} for more details.). The current AG code is @code{AGcode_Omega(G,D,EC)}.@* If you know the exact minimum distance d and you want to use it in @code{decodeSV} instead of @ifinfo @math{delta} @end ifinfo @tex $delta$ @end tex , you can change the value of E[n+3][2] to d before applying decodeSV. @*If you have a systematic encoding for the current code and want to keep it during the decoding, you must previously permute D (using @code{permute_L(D,P);}), e.g., according to the permutation P=L[3], L being the output of @code{sys_code}. @item @strong{Warnings:} F must be a divisor with support disjoint from the support of D and with degree @ifinfo @math{epsilon + genus} @end ifinfo @tex $epsilon + genus$ @end tex , where @ifinfo @math{epsilon:=[(deg(G)-3*genus+1)/2]} @end ifinfo @tex $epsilon:=[(deg(G)-3*genus+1)/2]$ @end tex .@* G should satisfy @ifinfo @math{ 2*genus-2 < deg(G) < size(D) } @end ifinfo @tex $ 2*genus-2 < deg(G) < size(D) $ @end tex , which is not checked by the algorithm. @*G and D should also have disjoint supports (checked by the algorithm). @cindex SV-decoding algorithm, preprocessing @end table @strong{Example:} @smallexample @c computed example prepSV d2t_singular/brnoeth_lib.doc:569 LIB "brnoeth.lib"; int plevel=printlevel; printlevel=-1; ring s=2,(x,y),lp; list HC=Adj_div(x3+y2+y); @expansion{} The genus of the curve is 1 HC=NSplaces(1..2,HC); HC=extcurve(2,HC); @expansion{} Total number of rational places : NrRatPl = 9 def ER=HC[1][4]; setring ER; intvec G=5; // the rational divisor G = 5*HC[3][1] intvec D=2..9; // D = sum of the rational places no. 2..9 over F_4 // construct the corresp. residual AG code of type [8,3,>=5] over F_4: matrix C=AGcode_Omega(G,D,HC); @expansion{} Vector basis successfully computed // we can correct 1 error and the genus is 1, thus F must have degree 2 // and support disjoint from that of D; intvec F=2; list SV=prepSV(G,D,F,HC); @expansion{} Vector basis successfully computed @expansion{} Vector basis successfully computed @expansion{} Vector basis successfully computed // now everything is prepared to decode with the basic algorithm; // for example, here is a parity check matrix to compute the syndrome : print(SV[1]); @expansion{} 0,0,(a), (a+1),1, 1, (a+1),(a), @expansion{} 1,0,(a), (a+1),(a),(a+1),(a), (a+1), @expansion{} 1,1,1, 1, 1, 1, 1, 1, @expansion{} 0,0,(a+1),(a), 1, 1, (a), (a+1), @expansion{} 0,0,(a+1),(a), (a),(a+1),1, 1 // and here you have the correction capacity of the algorithm : int epsilon=SV[size(D)+3][1]; epsilon; @expansion{} 1 printlevel=plevel; @c end example prepSV d2t_singular/brnoeth_lib.doc:569 @end smallexample @c inserted refs from d2t_singular/brnoeth_lib.doc:596 @ifinfo @menu See also: * AGcode_Omega:: * decodeSV:: * extcurve:: * permute_L:: * sys_code:: @end menu @end ifinfo @iftex @strong{See also:} @ref{AGcode_Omega}; @ref{decodeSV}; @ref{extcurve}; @ref{permute_L}; @ref{sys_code}. @end iftex @c end inserted refs from d2t_singular/brnoeth_lib.doc:596 @c ---end content prepSV--- @c ------------------- decodeSV ------------- @node decodeSV, closed_points, prepSV, brnoeth_lib @subsubsection decodeSV @cindex decodeSV @c ---content decodeSV--- Procedure from library @code{brnoeth.lib} (@pxref{brnoeth_lib}). @table @asis @item @strong{Usage:} decodeSV( y, K ); y a row-matrix and K a list @item @strong{Return:} a codeword (row-matrix) if possible, resp. the 0-matrix (of size 1) if decoding is impossible. @*For decoding the basic (Skorobogatov-Vladut) decoding algorithm is applied. @item @strong{Note:} The list_expression should be the output K of the procedure @code{prepSV}.@* The matrix_expression should be a (1 x n)-matrix, where n = ncols(K[1]).@* The decoding may fail if the number of errors is greater than the correction capacity of the algorithm. @cindex SV-decoding algorithm @end table @strong{Example:} @smallexample @c computed example decodeSV d2t_singular/brnoeth_lib.doc:631 LIB "brnoeth.lib"; int plevel=printlevel; printlevel=-1; ring s=2,(x,y),lp; list HC=Adj_div(x3+y2+y); @expansion{} The genus of the curve is 1 HC=NSplaces(1..2,HC); HC=extcurve(2,HC); @expansion{} Total number of rational places : NrRatPl = 9 def ER=HC[1][4]; setring ER; intvec G=5; // the rational divisor G = 5*HC[3][1] intvec D=2..9; // D = sum of the rational places no. 2..9 over F_4 // construct the corresp. residual AG code of type [8,3,>=5] over F_4: matrix C=AGcode_Omega(G,D,HC); @expansion{} Vector basis successfully computed // we can correct 1 error and the genus is 1, thus F must have degree 2 // and support disjoint from that of D intvec F=2; list SV=prepSV(G,D,F,HC); @expansion{} Vector basis successfully computed @expansion{} Vector basis successfully computed @expansion{} Vector basis successfully computed // now we produce 1 error on the zero-codeword : matrix y[1][8]; y[1,3]=a; // and then we decode : print(decodeSV(y,SV)); @expansion{} 0,0,0,0,0,0,0,0 printlevel=plevel; @c end example decodeSV d2t_singular/brnoeth_lib.doc:631 @end smallexample @c inserted refs from d2t_singular/brnoeth_lib.doc:657 @ifinfo @menu See also: * AGcode_Omega:: * extcurve:: * prepSV:: @end menu @end ifinfo @iftex @strong{See also:} @ref{AGcode_Omega}; @ref{extcurve}; @ref{prepSV}. @end iftex @c end inserted refs from d2t_singular/brnoeth_lib.doc:657 @c ---end content decodeSV--- @c ------------------- closed_points ------------- @node closed_points, dual_code, decodeSV, brnoeth_lib @subsubsection closed_points @cindex closed_points @c ---content closed_points--- Procedure from library @code{brnoeth.lib} (@pxref{brnoeth_lib}). @table @asis @item @strong{Usage:} closed_points(I); I an ideal @item @strong{Return:} list of prime ideals (each a Groebner basis), corresponding to the (distinct affine closed) points of V(I) @item @strong{Note:} The ideal must have dimension 0, the basering must have 2 variables, the ordering must be lp, and the base field must be finite and prime.@* It might be convenient to set the option(redSB) in advance. @end table @strong{Example:} @smallexample @c computed example closed_points d2t_singular/brnoeth_lib.doc:687 LIB "brnoeth.lib"; ring s=2,(x,y),lp; // this is just the affine plane over F_4 : ideal I=x4+x,y4+y; list L=closed_points(I); // and here you have all the points : L; @expansion{} [1]: @expansion{} _[1]=y2+y+1 @expansion{} _[2]=x+y @expansion{} [2]: @expansion{} _[1]=y2+y+1 @expansion{} _[2]=x+1 @expansion{} [3]: @expansion{} _[1]=y2+y+1 @expansion{} _[2]=x+y+1 @expansion{} [4]: @expansion{} _[1]=y2+y+1 @expansion{} _[2]=x @expansion{} [5]: @expansion{} _[1]=y+1 @expansion{} _[2]=x2+x+1 @expansion{} [6]: @expansion{} _[1]=y+1 @expansion{} _[2]=x+1 @expansion{} [7]: @expansion{} _[1]=y+1 @expansion{} _[2]=x @expansion{} [8]: @expansion{} _[1]=y @expansion{} _[2]=x2+x+1 @expansion{} [9]: @expansion{} _[1]=y @expansion{} _[2]=x+1 @expansion{} [10]: @expansion{} _[1]=y @expansion{} _[2]=x @c end example closed_points d2t_singular/brnoeth_lib.doc:687 @end smallexample @c inserted refs from d2t_singular/brnoeth_lib.doc:697 @ifinfo @menu See also: * triang_lib:: @end menu @end ifinfo @iftex @strong{See also:} @ref{triang_lib}. @end iftex @c end inserted refs from d2t_singular/brnoeth_lib.doc:697 @c ---end content closed_points--- @c ------------------- dual_code ------------- @node dual_code, sys_code, closed_points, brnoeth_lib @subsubsection dual_code @cindex dual_code @c ---content dual_code--- Procedure from library @code{brnoeth.lib} (@pxref{brnoeth_lib}). @table @asis @item @strong{Usage:} dual_code(G); G a matrix of numbers @item @strong{Return:} a generator matrix of the dual code generated by G @item @strong{Note:} The input should be a matrix G of numbers. @* The output is also a parity check matrix for the code defined by G @cindex linear code, dual @end table @strong{Example:} @smallexample @c computed example dual_code d2t_singular/brnoeth_lib.doc:725 LIB "brnoeth.lib"; ring s=2,T,lp; // here is the Hamming code of length 7 and dimension 3 matrix G[3][7]=1,0,1,0,1,0,1,0,1,1,0,0,1,1,0,0,0,1,1,1,1; print(G); @expansion{} 1,0,1,0,1,0,1, @expansion{} 0,1,1,0,0,1,1, @expansion{} 0,0,0,1,1,1,1 matrix H=dual_code(G); print(H); @expansion{} 1,1,1,0,0,0,0, @expansion{} 1,0,0,1,1,0,0, @expansion{} 0,1,0,1,0,1,0, @expansion{} 1,1,0,1,0,0,1 @c end example dual_code d2t_singular/brnoeth_lib.doc:725 @end smallexample @c ---end content dual_code--- @c ------------------- sys_code ------------- @node sys_code, permute_L, dual_code, brnoeth_lib @subsubsection sys_code @cindex sys_code @c ---content sys_code--- Procedure from library @code{brnoeth.lib} (@pxref{brnoeth_lib}). @table @asis @item @strong{Usage:} sys_code(C); C is a matrix of constants @item @strong{Return:} list L with: @format L[1] is the generator matrix in standard form of an equivalent code, L[2] is the parity check matrix in standard form of such code, L[3] is an intvec which represents the needed permutation. @end format @item @strong{Note:} Computes a systematic code which is equivalent to the given one.@* The input should be a matrix of numbers.@* The output has to be interpreted as follows: if the input was the generator matrix of an AG code then one should apply the permutation L[3] to the divisor D of rational points by means of @code{permute_L(D,L[3]);} before continuing to work with the code (for instance, if you want to use the systematic encoding together with a decoding algorithm). @cindex linear code, systematic @end table @strong{Example:} @smallexample @c computed example sys_code d2t_singular/brnoeth_lib.doc:770 LIB "brnoeth.lib"; ring s=3,T,lp; matrix C[2][5]=0,1,0,1,1,0,1,0,0,1; print(C); @expansion{} 0,1,0,1,1, @expansion{} 0,1,0,0,1 list L=sys_code(C); L[3]; @expansion{} 2,4,3,1,5 // here is the generator matrix in standard form print(L[1]); @expansion{} 1,0,0,0,1, @expansion{} 0,1,0,0,0 // here is the control matrix in standard form print(L[2]); @expansion{} 0, 0,1,0,0, @expansion{} 0, 0,0,1,0, @expansion{} -1,0,0,0,1 // we can check that both codes are dual to each other print(L[1]*transpose(L[2])); @expansion{} 0,0,0, @expansion{} 0,0,0 @c end example sys_code d2t_singular/brnoeth_lib.doc:770 @end smallexample @c inserted refs from d2t_singular/brnoeth_lib.doc:785 @ifinfo @menu See also: * AGcode_Omega:: * permute_L:: * prepSV:: @end menu @end ifinfo @iftex @strong{See also:} @ref{AGcode_Omega}; @ref{permute_L}; @ref{prepSV}. @end iftex @c end inserted refs from d2t_singular/brnoeth_lib.doc:785 @c ---end content sys_code--- @c ------------------- permute_L ------------- @node permute_L,, sys_code, brnoeth_lib @subsubsection permute_L @cindex permute_L @c ---content permute_L--- Procedure from library @code{brnoeth.lib} (@pxref{brnoeth_lib}). @table @asis @item @strong{Usage:} permute_L( L, P ); L,P either intvecs or lists @item @strong{Return:} list obtained from L by applying the permutation given by P. @item @strong{Note:} If P is a list, all entries must be integers. @end table @strong{Example:} @smallexample @c computed example permute_L d2t_singular/brnoeth_lib.doc:811 LIB "brnoeth.lib"; list L=list(); L[1]="a"; L[2]="b"; L[3]="c"; L[4]="d"; intvec P=1,3,4,2; // the list L is permuted according to P : permute_L(L,P); @expansion{} [1]: @expansion{} a @expansion{} [2]: @expansion{} c @expansion{} [3]: @expansion{} d @expansion{} [4]: @expansion{} b @c end example permute_L d2t_singular/brnoeth_lib.doc:811 @end smallexample @c inserted refs from d2t_singular/brnoeth_lib.doc:823 @ifinfo @menu See also: * AGcode_Omega:: * prepSV:: * sys_code:: @end menu @end ifinfo @iftex @strong{See also:} @ref{AGcode_Omega}; @ref{prepSV}; @ref{sys_code}. @end iftex @c end inserted refs from d2t_singular/brnoeth_lib.doc:823 @c ---end content permute_L--- texi2html-1.82/test/singular_manual/d2t_singular/general_lib.tex0000644000175000017500000007745711264347126027004 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/general_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/general_lib.doc INSTEAD @c library version: (1.38.2.9,2003/04/04) @c library file: ../Singular/LIB/general.lib @cindex general.lib @cindex general_lib @table @asis @item @strong{Library:} general.lib @item @strong{Purpose:} Elementary Computations of General Type @end table @strong{Procedures:} @menu * A_Z:: string a,b,... of n comma separated letters * ASCII:: string of printable ASCII characters (number n to m) * absValue:: absolute value of c * binomial:: n choose m (type int), [type string/type number] * deleteSublist:: delete entries given by iv from list l * factorial:: n factorial (=n!) (type int), [type string/number] * fibonacci:: nth Fibonacci number [char p] * kmemory:: active [allocated] memory in kilobyte * killall:: kill all user-defined variables * number_e:: compute exp(1) up to n decimal digits * number_pi:: compute pi (area of unit circle) up to n digits * primes:: intvec of primes p, n<=p<=m * product:: multiply components of vector/ideal/...[indices v] * sort:: sort generators according to monomial ordering * sum:: add components of vector/ideal/...[with indices v] * watchdog:: only wait for result of command cmd for i seconds * which:: search for command and return absolute path, if found * primecoeffs:: primefactors <= min(p,32003) of coeffs of J * primefactors:: primefactors <= min(p,32003) of n * timeStd:: std(i) if computation finished after d seconds else i * timeFactorize:: works as timeStd with factorization * factorH:: factorizes with good choice of principal variable @end menu @c ---end content LibInfo--- @c ------------------- A_Z ------------- @node A_Z, ASCII,, general_lib @subsubsection A_Z @cindex A_Z @c ---content A_Z--- Procedure from library @code{general.lib} (@pxref{general_lib}). @table @asis @item @strong{Usage:} A_Z("a",n); a any letter, n integer (-26<= n <=26, !=0) @item @strong{Return:} string of n small (if a is small) or capital (if a is capital) letters, comma separated, beginning with a, in alphabetical order (or revers alphabetical order if n<0) @end table @strong{Example:} @smallexample @c computed example A_Z d2t_singular/general_lib.doc:60 LIB "general.lib"; A_Z("c",5); @expansion{} c,d,e,f,g A_Z("Z",-5); @expansion{} Z,Y,X,W,V string sR = "ring R = (0,"+A_Z("A",6)+"),("+A_Z("a",10)+"),dp;"; sR; @expansion{} ring R = (0,A,B,C,D,E,F),(a,b,c,d,e,f,g,h,i,j),dp; execute(sR); R; @expansion{} // characteristic : 0 @expansion{} // 6 parameter : A B C D E F @expansion{} // minpoly : 0 @expansion{} // number of vars : 10 @expansion{} // block 1 : ordering dp @expansion{} // : names a b c d e f g h i j @expansion{} // block 2 : ordering C @c end example A_Z d2t_singular/general_lib.doc:60 @end smallexample @c ---end content A_Z--- @c ------------------- ASCII ------------- @node ASCII, absValue, A_Z, general_lib @subsubsection ASCII @cindex ASCII @c ---content ASCII--- Procedure from library @code{general.lib} (@pxref{general_lib}). @table @asis @item @strong{Usage:} ASCII([n,m]); n,m= integers (32 <= n <= m <= 126) @item @strong{Return:} string of printable ASCII characters (no native language support) ASCII(): string of all ASCII characters with its numbers, ASCII(n): n-th ASCII character @*ASCII(n,m): n-th up to m-th ASCII character (inclusive) @end table @strong{Example:} @smallexample @c computed example ASCII d2t_singular/general_lib.doc:92 LIB "general.lib"; ASCII();""; @expansion{} ! " # $ % & ' ( ) * + , - . @expansion{} 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 @expansion{} / 0 1 2 3 4 5 6 7 8 9 : ; < = @expansion{} 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 @expansion{} > ? @@ A B C D E F G H I J K L @expansion{} 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 @expansion{} M N O P Q R S T U V W X Y Z [ @expansion{} 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 @expansion{} \ ] ^ _ ` a b c d e f g h i j @expansion{} 92 93 94 95 96 97 98 99 100 101 102 103 104 105 10 @expansion{} k l m n o p q r s t u v w x y @expansion{} 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 @expansion{} z @{ | @} ~ @expansion{} 122 123 124 125 126 @expansion{} ASCII(42); @expansion{} * ASCII(32,126); @expansion{} !"#$%&'()*+,-./0123456789:;<=>?@@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgh\ ijklmnopqrstuvwxyz@{|@}~ @c end example ASCII d2t_singular/general_lib.doc:92 @end smallexample @c ---end content ASCII--- @c ------------------- absValue ------------- @node absValue, binomial, ASCII, general_lib @subsubsection absValue @cindex absValue @c ---content absValue--- Procedure from library @code{general.lib} (@pxref{general_lib}). @table @asis @item @strong{Usage:} absValue(c); c int, number or poly @item @strong{Return:} absValue(c); the absolute value of c @item @strong{Note:} absValue(c)=c if c>=0; absValue=-c if c<=0. @* So the function can be applied to any type, for which comparison @* operators are defined. @end table @strong{Example:} @smallexample @c computed example absValue d2t_singular/general_lib.doc:123 LIB "general.lib"; ring r1 = 0,x,dp; absValue(-2002); @expansion{} 2002 poly f=-4; absValue(f); @expansion{} 4 @c end example absValue d2t_singular/general_lib.doc:123 @end smallexample @c inserted refs from d2t_singular/general_lib.doc:131 @ifinfo @menu See also: * boolean expressions:: @end menu @end ifinfo @iftex @strong{See also:} @ref{boolean expressions}. @end iftex @c end inserted refs from d2t_singular/general_lib.doc:131 @c ---end content absValue--- @c ------------------- binomial ------------- @node binomial, deleteSublist, absValue, general_lib @subsubsection binomial @cindex binomial @c ---content binomial--- Procedure from library @code{general.lib} (@pxref{general_lib}). @table @asis @item @strong{Usage:} binomial(n,k[,p]); n,k,p integers @item @strong{Return:} binomial(n,k); binomial coefficient n choose k @* - of type string (computed in characteristic 0) @* binomial(n,k,p); n choose k, computed in characteristic 0 or prime(p) @* - of type number if a basering, say R, is present and p=0=char(R) or if prime(p)=char(R) @* - of type string else @item @strong{Note:} In any characteristic, binomial(n,k) = coefficient of x^k in (1+x)^n @end table @strong{Example:} @smallexample @c computed example binomial d2t_singular/general_lib.doc:162 LIB "general.lib"; binomial(200,100);""; //type string, computed in char 0 @expansion{} 90548514656103281165404177077484163874504589675413336841320 @expansion{} binomial(200,100,3);""; //type string, computed in char 3 @expansion{} 0 @expansion{} int n,k = 200,100; ring r = 0,x,dp; number b1 = binomial(n,k,0); //type number, computed in ring r poly b2 = coeffs((x+1)^n,x)[k+1,1]; //coefficient of x^k in (x+1)^n b1-b2; //b1 and b2 should coincide @expansion{} 0 @c end example binomial d2t_singular/general_lib.doc:162 @end smallexample @c inserted refs from d2t_singular/general_lib.doc:173 @ifinfo @menu See also: * prime:: @end menu @end ifinfo @iftex @strong{See also:} @ref{prime}. @end iftex @c end inserted refs from d2t_singular/general_lib.doc:173 @c ---end content binomial--- @c ------------------- deleteSublist ------------- @node deleteSublist, factorial, binomial, general_lib @subsubsection deleteSublist @cindex deleteSublist @c ---content deleteSublist--- Procedure from library @code{general.lib} (@pxref{general_lib}). @table @asis @item @strong{Usage:} deleteSublist(v,l); intvec v; list l @*where the entries of the integer vector v correspond to the positions of the elements to be deleted @item @strong{Return:} list without the deleted elements @end table @strong{Example:} @smallexample @c computed example deleteSublist d2t_singular/general_lib.doc:198 LIB "general.lib"; list l=1,2,3,4,5; intvec v=1,3,4; l=deleteSublist(v,l); l; @expansion{} [1]: @expansion{} 2 @expansion{} [2]: @expansion{} 5 @c end example deleteSublist d2t_singular/general_lib.doc:198 @end smallexample @c ---end content deleteSublist--- @c ------------------- factorial ------------- @node factorial, fibonacci, deleteSublist, general_lib @subsubsection factorial @cindex factorial @c ---content factorial--- Procedure from library @code{general.lib} (@pxref{general_lib}). @table @asis @item @strong{Usage:} factorial(n[,p]); n,p integers @item @strong{Return:} factorial(n): n! (computed in characteristic 0), of type string. @* factorial(n,p): n! computed in characteristic 0 or prime(p) @* - of type number if a basering is present and 0=p=char(basering) or if prime(p)=char(basering) @* - of type string else @end table @strong{Example:} @smallexample @c computed example factorial d2t_singular/general_lib.doc:229 LIB "general.lib"; factorial(37);""; //37! of type string (as long integer) @expansion{} 13763753091226345046315979581580902400000000 @expansion{} ring r1 = 0,x,dp; number p = factorial(37,0); //37! of type number, computed in r p; @expansion{} 13763753091226345046315979581580902400000000 @c end example factorial d2t_singular/general_lib.doc:229 @end smallexample @c inserted refs from d2t_singular/general_lib.doc:237 @ifinfo @menu See also: * prime:: @end menu @end ifinfo @iftex @strong{See also:} @ref{prime}. @end iftex @c end inserted refs from d2t_singular/general_lib.doc:237 @c ---end content factorial--- @c ------------------- fibonacci ------------- @node fibonacci, kmemory, factorial, general_lib @subsubsection fibonacci @cindex fibonacci @c ---content fibonacci--- Procedure from library @code{general.lib} (@pxref{general_lib}). @table @asis @item @strong{Usage:} fibonacci(n); n,p integers @item @strong{Return:} fibonacci(n): nth Fibonacci number, f(0)=f(1)=1, f(i+1)=f(i-1)+f(i) @* - computed in characteristic 0, of type string @* fibonacci(n,p): f(n) computed in characteristic 0 or prime(p) @* - of type number if a basering is present and p=0=char(basering) or if prime(p)=char(basering) @* - of type string else @end table @strong{Example:} @smallexample @c computed example fibonacci d2t_singular/general_lib.doc:265 LIB "general.lib"; fibonacci(42); ""; //f(42) of type string (as long integer) @expansion{} 267914296 @expansion{} ring r = 2,x,dp; number b = fibonacci(42,2); //f(42) of type number, computed in r b; @expansion{} 0 @c end example fibonacci d2t_singular/general_lib.doc:265 @end smallexample @c inserted refs from d2t_singular/general_lib.doc:273 @ifinfo @menu See also: * prime:: @end menu @end ifinfo @iftex @strong{See also:} @ref{prime}. @end iftex @c end inserted refs from d2t_singular/general_lib.doc:273 @c ---end content fibonacci--- @c ------------------- kmemory ------------- @node kmemory, killall, fibonacci, general_lib @subsubsection kmemory @cindex kmemory @c ---content kmemory--- Procedure from library @code{general.lib} (@pxref{general_lib}). @table @asis @item @strong{Usage:} kmemory([n,[v]]); n,v integers @item @strong{Return:} memory in kilobyte of type int @* n=0: memory used by active variables (same as no parameters) @* n=1: total memory allocated by Singular @* n=2: difference between top and init memory address (sbrk memory) @* n!=0,1,2: 0 @item @strong{Display:} detailed information about allocated and used memory if v!=0 @item @strong{Note:} kmemory uses internal function 'memory' to compute kilobyte, and is the same as 'memory' for n!=0,1,2 @end table @strong{Example:} @smallexample @c computed example kmemory d2t_singular/general_lib.doc:307 LIB "general.lib"; kmemory(); @expansion{} 152 kmemory(1,1); @expansion{} // total memory allocated, at the moment, by SINGULAR (kilobyte): @expansion{} 650 @c end example kmemory d2t_singular/general_lib.doc:307 @end smallexample @c ---end content kmemory--- @c ------------------- killall ------------- @node killall, number_e, kmemory, general_lib @subsubsection killall @cindex killall @c ---content killall--- Procedure from library @code{general.lib} (@pxref{general_lib}). @table @asis @item @strong{Usage:} killall(); (no parameter) @*killall("type_name"); @*killall("not", "type_name"); @item @strong{Return:} killall(); kills all user-defined variables except loaded procedures, no return value. @* - killall("type_name"); kills all user-defined variables, of type "type_name" @* - killall("not", "type_name"); kills all user-defined variables, except those of type "type_name" and except loaded procedures @* - killall("not", "name_1", "name_2", ...); kills all user-defined variables, except those of name "name_i" and except loaded procedures @item @strong{Note:} killall should never be used inside a procedure @end table @strong{Example:} @smallexample @c computed example killall d2t_singular/general_lib.doc:345 LIB "general.lib"; ring rtest; ideal i=x,y,z; string str="hi"; int j = 3; export rtest,i,str,j; //this makes the local variables global @expansion{} // ** `rtest` is already global @expansion{} // ** `i` is already global @expansion{} // ** `str` is already global @expansion{} // ** `j` is already global listvar(); @expansion{} // j [0] int 3 @expansion{} // str [0] string hi @expansion{} // rtest [0] *ring @expansion{} // i [0] ideal, 3 generator(s) @expansion{} // LIB [0] string standard.lib,general..., 74 char(s) killall("ring"); // kills all rings @expansion{} // ** killing the basering for level 0 listvar(); @expansion{} // j [0] int 3 @expansion{} // str [0] string hi @expansion{} // LIB [0] string standard.lib,general..., 74 char(s) killall("not", "int"); // kills all variables except int's (and procs) listvar(); @expansion{} // j [0] int 3 @expansion{} // LIB [0] string standard.lib,general..., 74 char(s) killall(); // kills all vars except loaded procs listvar(); @expansion{} // j [0] int 3 @expansion{} // LIB [0] string standard.lib,general..., 74 char(s) @c end example killall d2t_singular/general_lib.doc:345 @end smallexample @c ---end content killall--- @c ------------------- number_e ------------- @node number_e, number_pi, killall, general_lib @subsubsection number_e @cindex number_e @c ---content number_e--- Procedure from library @code{general.lib} (@pxref{general_lib}). @table @asis @item @strong{Usage:} number_e(n); n integer @item @strong{Return:} Euler number e=exp(1) up to n decimal digits (no rounding) @* - of type string if no basering of char 0 is defined @* - of type number if a basering of char 0 is defined @item @strong{Display:} decimal format of e if printlevel > 0 (default:printlevel=0 ) @item @strong{Note:} procedure uses algorithm of A.H.J. Sale @end table @strong{Example:} @smallexample @c computed example number_e d2t_singular/general_lib.doc:385 LIB "general.lib"; number_e(30);""; @expansion{} 2.71828182845904523536028747135 @expansion{} ring R = 0,t,lp; number e = number_e(30); e; @expansion{} 13591409142295226176801437356763/5000000000000000000000000000000 @c end example number_e d2t_singular/general_lib.doc:385 @end smallexample @c ---end content number_e--- @c ------------------- number_pi ------------- @node number_pi, primes, number_e, general_lib @subsubsection number_pi @cindex number_pi @c ---content number_pi--- Procedure from library @code{general.lib} (@pxref{general_lib}). @table @asis @item @strong{Usage:} number_pi(n); n positive integer @item @strong{Return:} pi (area of unit circle) up to n decimal digits (no rounding) @* - of type string if no basering of char 0 is defined, @* - of type number, if a basering of char 0 is defined @item @strong{Display:} decimal format of pi if printlevel > 0 (default:printlevel=0 ) @item @strong{Note:} procedure uses algorithm of S. Rabinowitz @end table @strong{Example:} @smallexample @c computed example number_pi d2t_singular/general_lib.doc:420 LIB "general.lib"; number_pi(11);""; @expansion{} 3.1415926535 @expansion{} ring r = (real,10),t,dp; number pi = number_pi(11); pi; @expansion{} 3.1415926536 @c end example number_pi d2t_singular/general_lib.doc:420 @end smallexample @c ---end content number_pi--- @c ------------------- primes ------------- @node primes, product, number_pi, general_lib @subsubsection primes @cindex primes @c ---content primes--- Procedure from library @code{general.lib} (@pxref{general_lib}). @table @asis @item @strong{Usage:} primes(n,m); n,m integers @item @strong{Return:} intvec, consisting of all primes p, prime(n)<=p<=m, in increasing order if n<=m, resp. prime(m)<=p<=n, in decreasing order if m=2, else 2 @end table @strong{Example:} @smallexample @c computed example primes d2t_singular/general_lib.doc:451 LIB "general.lib"; primes(50,100);""; @expansion{} 47,53,59,61,67,71,73,79,83,89,97 @expansion{} intvec v = primes(37,1); v; @expansion{} 37,31,29,23,19,17,13,11,7,5,3,2 @c end example primes d2t_singular/general_lib.doc:451 @end smallexample @c ---end content primes--- @c ------------------- product ------------- @node product, sort, primes, general_lib @subsubsection product @cindex product @c ---content product--- Procedure from library @code{general.lib} (@pxref{general_lib}). @table @asis @item @strong{Usage:} product(id[,v]); id ideal/vector/module/matrix/intvec/intmat/list, v intvec (default: v=1..number of entries of id) @item @strong{Assume:} list members can be multiplied. @item @strong{Return:} The product of all entries of id [with index given by v] of type depending on the entries of id. @item @strong{Note:} If id is not a list, id is treated as a list of polys resp. integers. A module m is identified with the corresponding matrix M (columns of M generate m). @* If v is outside the range of id, we have the empty product and the result will be 1 (of type int). @end table @strong{Example:} @smallexample @c computed example product d2t_singular/general_lib.doc:488 LIB "general.lib"; ring r= 0,(x,y,z),dp; ideal m = maxideal(1); product(m); @expansion{} xyz product(m[2..3]); @expansion{} yz matrix M[2][3] = 1,x,2,y,3,z; product(M); @expansion{} 6xyz intvec v=2,4,6; product(M,v); @expansion{} xyz intvec iv = 1,2,3,4,5,6,7,8,9; v=1..5,7,9; product(iv,v); @expansion{} 7560 intmat A[2][3] = 1,1,1,2,2,2; product(A,3..5); @expansion{} 4 @c end example product d2t_singular/general_lib.doc:488 @end smallexample @c ---end content product--- @c ------------------- sort ------------- @node sort, sum, product, general_lib @subsubsection sort @cindex sort @c ---content sort--- Procedure from library @code{general.lib} (@pxref{general_lib}). @table @asis @item @strong{Usage:} sort(id[v,o,n]); id = ideal/module/intvec/list(of intvec's or int's) @* sort may be called with 1, 2 or 3 arguments in the following way: @* sort(id[v,n]); v=intvec of positive integers, n=integer, @* sort(id[o,n]); o=string (any allowed ordstr of a ring), n=integer @item @strong{Return:} a list l of two elements: @format l[1]: object of same type as input but sorted in the following way: - if id=ideal/module: generators of id are sorted w.r.t. intvec v (id[v[1]] becomes 1-st, id[v[2]] 2-nd element, etc.). If no v is present, id is sorted w.r.t. ordering o (if o is given) or w.r.t. actual monomial ordering (if no o is given): NOTE: generators with SMALLER(!) leading term come FIRST (e.g. sort(id); sorts backwards to actual monomial ordering) - if id=list of intvec's or int's: consider a list element, say id[1]=3,2,5, as exponent vector of the monomial x^3*y^2*z^5; the corresponding monomials are ordered w.r.t. intvec v (s.a.). If no v is present, the monomials are sorted w.r.t. ordering o (if o is given) or w.r.t. lexicographical ordering (if no o is given). The corresponding ordered list of exponent vectors is returned. (e.g. sort(id); sorts lexicographically, smaller int's come first) WARNING: Since negative exponents create the 0 polynomial in Singular, id should not contain negative integers: the result might not be as expected - if id=intvec: id is treated as list of integers - if n!=0 the ordering is inverse, i.e. w.r.t. v(size(v)..1) default: n=0 l[2]: intvec, describing the permutation of the input (hence l[2]=v if v is given (with positive integers)) @end format @item @strong{Note:} If v is given id may be any simply indexed object (e.g. any list or string); if v[i]<0 and i<=size(id) v[i] is set internally to i; entries of v must be pairwise distinct to get a permutation if id. Zero generators of ideal/module are deleted @end table @strong{Example:} @smallexample @c computed example sort d2t_singular/general_lib.doc:558 LIB "general.lib"; ring r0 = 0,(x,y,z,t),lp; ideal i = x3,z3,xyz; sort(i); //sorts using lex ordering, smaller polys come first @expansion{} [1]: @expansion{} _[1]=z3 @expansion{} _[2]=xyz @expansion{} _[3]=x3 @expansion{} [2]: @expansion{} 2,3,1 sort(i,3..1); @expansion{} [1]: @expansion{} _[1]=xyz @expansion{} _[2]=z3 @expansion{} _[3]=x3 @expansion{} [2]: @expansion{} 3,2,1 sort(i,"ls")[1]; //sort w.r.t. negative lex ordering @expansion{} _[1]=x3 @expansion{} _[2]=xyz @expansion{} _[3]=z3 intvec v =1,10..5,2..4;v; @expansion{} 1,10,9,8,7,6,5,2,3,4 sort(v)[1]; // sort v lexicographically @expansion{} 1,2,3,4,5,6,7,8,9,10 sort(v,"Dp",1)[1]; // sort v w.r.t (total sum, reverse lex) @expansion{} 10,9,8,7,6,5,4,3,2,1 @c end example sort d2t_singular/general_lib.doc:558 @end smallexample @c ---end content sort--- @c ------------------- sum ------------- @node sum, watchdog, sort, general_lib @subsubsection sum @cindex sum @c ---content sum--- Procedure from library @code{general.lib} (@pxref{general_lib}). @table @asis @item @strong{Usage:} sum(id[,v]); id ideal/vector/module/matrix/intvec/intmat/list, v intvec (default: v=1..number of entries of id) @item @strong{Assume:} list members can be added. @item @strong{Return:} The sum of all entries of id [with index given by v] of type depending on the entries of id. @item @strong{Note:} If id is not a list, id is treated as a list of polys resp. integers. A module m is identified with the corresponding matrix M (columns of M generate m). @* If v is outside the range of id, we have the empty sum and the result will be 0 (of type int). @end table @strong{Example:} @smallexample @c computed example sum d2t_singular/general_lib.doc:601 LIB "general.lib"; ring r= 0,(x,y,z),dp; vector pv = [xy,xz,yz,x2,y2,z2]; sum(pv); @expansion{} x2+xy+y2+xz+yz+z2 sum(pv,2..5); @expansion{} x2+y2+xz+yz matrix M[2][3] = 1,x,2,y,3,z; intvec w=2,4,6; sum(M,w); @expansion{} x+y+z intvec iv = 1,2,3,4,5,6,7,8,9; sum(iv,2..4); @expansion{} 9 @c end example sum d2t_singular/general_lib.doc:601 @end smallexample @c ---end content sum--- @c ------------------- watchdog ------------- @node watchdog, which, sum, general_lib @subsubsection watchdog @cindex watchdog @c ---content watchdog--- Procedure from library @code{general.lib} (@pxref{general_lib}). @table @asis @item @strong{Return:} Result of cmd, if the result can be computed in i seconds. Otherwise the computation is interrupted after i seconds, the string "Killed" is returned and the global variable 'watchdog_interrupt' is defined. @item @strong{Note:} * the MP package must be enabled @** the current basering should not be watchdog_rneu, since watchdog_rneu will be killed @** if there are variable names of the structure x(i) all polynomials have to be put into eval(...) in order to be interpreted correctly @** a second Singular process is started by this procedure @end table @strong{Example:} @smallexample @c computed example watchdog d2t_singular/general_lib.doc:642 LIB "general.lib"; ring r=0,(x,y,z),dp; poly f=x^30+y^30; watchdog(1,"factorize(eval("+string(f)+"))"); @expansion{} [1]: @expansion{} _[1]=1 @expansion{} _[2]=x16+x14y2-x10y6-x8y8-x6y10+x2y14+y16 @expansion{} _[3]=x8-x6y2+x4y4-x2y6+y8 @expansion{} _[4]=x4-x2y2+y4 @expansion{} _[5]=x2+y2 @expansion{} [2]: @expansion{} 1,1,1,1,1 watchdog(100,"factorize(eval("+string(f)+"))"); @expansion{} [1]: @expansion{} _[1]=1 @expansion{} _[2]=x16+x14y2-x10y6-x8y8-x6y10+x2y14+y16 @expansion{} _[3]=x8-x6y2+x4y4-x2y6+y8 @expansion{} _[4]=x4-x2y2+y4 @expansion{} _[5]=x2+y2 @expansion{} [2]: @expansion{} 1,1,1,1,1 @c end example watchdog d2t_singular/general_lib.doc:642 @end smallexample @c ---end content watchdog--- @c ------------------- which ------------- @node which, primecoeffs, watchdog, general_lib @subsubsection which @cindex which @c ---content which--- Procedure from library @code{general.lib} (@pxref{general_lib}). @table @asis @item @strong{Usage:} which(command); command = string expression @item @strong{Return:} Absolute pathname of command, if found in search path. Empty string, otherwise. @item @strong{Note:} Based on the Unix command 'which'. @end table @strong{Example:} @smallexample @c computed example which d2t_singular/general_lib.doc:673 LIB "general.lib"; which("sh"); @expansion{} /bin/sh @c end example which d2t_singular/general_lib.doc:673 @end smallexample @c ---end content which--- @c ------------------- primecoeffs ------------- @node primecoeffs, primefactors, which, general_lib @subsubsection primecoeffs @cindex primecoeffs @c ---content primecoeffs--- Procedure from library @code{general.lib} (@pxref{general_lib}). @table @asis @item @strong{Usage:} primecoeffs(J[,q]); J any type which can be converted to a matrix e.g. ideal, matrix, vector, module, int, intvec @*q = intger @item @strong{Compute:} primefactors <= min(p,32003) of coeffs of J (default p = 32003) @item @strong{Return:} a list, say l, of two intvectors: @*l[1] : the different primefactors of all coefficients of J l[2] : the different remaining factors @item @strong{Note:} the procedure works for small integers only, just by testing all primes (not to be considerd as serious prime factorization!) @end table @strong{Example:} @smallexample @c computed example primecoeffs d2t_singular/general_lib.doc:708 LIB "general.lib"; primecoeffs(intvec(7*8*121,7*8));""; @expansion{} [1]: @expansion{} 2,7,11 @expansion{} [2]: @expansion{} 1 @expansion{} ring r = 0,(b,c,t),dp; ideal I = -13b6c3t+4b5c4t,-10b4c2t-5b4ct2; primecoeffs(I); @expansion{} [1]: @expansion{} 2,5,13 @expansion{} [2]: @expansion{} _[1]=1 @c end example primecoeffs d2t_singular/general_lib.doc:708 @end smallexample @c ---end content primecoeffs--- @c ------------------- primefactors ------------- @node primefactors, timeStd, primecoeffs, general_lib @subsubsection primefactors @cindex primefactors @c ---content primefactors--- Procedure from library @code{general.lib} (@pxref{general_lib}). @table @asis @item @strong{Usage:} primefactors(n [,p]); n = int or number, p = integer @item @strong{Compute:} primefactors <= min(p,32003) of n (default p = 32003) @item @strong{Return:} a list, say l, @*l[1] : primefactors <= min(p,32003) of n @*l[2] : l[2][i] = multiplicity of l[1][i] @*l[3] : remaining factor ( n=product@{ (l[1][i]^l[2][i])*l[3]@} ) type(l[3])=typeof(n) @item @strong{Note:} If n is a long integer (of type number) then the procedure finds primefactors <= min(p,32003) but n may be larger as 2147483647 (max. integer representation) @item @strong{Warning:} the procedure works for small integers only, just by testing all primes (not to be considerd as serious prime factorization!) @end table @strong{Example:} @smallexample @c computed example primefactors d2t_singular/general_lib.doc:751 LIB "general.lib"; primefactors(7*8*121); @expansion{} [1]: @expansion{} 2,7,11 @expansion{} [2]: @expansion{} 3,1,2 @expansion{} [3]: @expansion{} 1 ring r = 0,x,dp; primefactors(123456789100); @expansion{} [1]: @expansion{} 2,5 @expansion{} [2]: @expansion{} 2,2 @expansion{} [3]: @expansion{} 1234567891 @c end example primefactors d2t_singular/general_lib.doc:751 @end smallexample @c ---end content primefactors--- @c ------------------- timeStd ------------- @node timeStd, timeFactorize, primefactors, general_lib @subsubsection timeStd @cindex timeStd @c ---content timeStd--- Procedure from library @code{general.lib} (@pxref{general_lib}). @table @asis @item @strong{Usage:} timeStd(i,d), i ideal, d integer @item @strong{Return:} std(i) if the standard basis computation finished after d-1 seconds and i otherwise @end table @strong{Example:} @smallexample @c computed example timeStd d2t_singular/general_lib.doc:778 LIB "general.lib"; ring r=32003,(a,b,c,d,e),dp; int n=6; ideal i= a^n-b^n, b^n-c^n, c^n-d^n, d^n-e^n, a^(n-1)*b+b^(n-1)*c+c^(n-1)*d+d^(n-1)*e+e^(n-1)*a; ideal j=timeStd(i,2); j; @expansion{} j[1]=a6-b6 @expansion{} j[2]=b6-c6 @expansion{} j[3]=c6-d6 @expansion{} j[4]=d6-e6 @expansion{} j[5]=a5b+b5c+c5d+d5e+ae5 @c end example timeStd d2t_singular/general_lib.doc:778 @end smallexample @c ---end content timeStd--- @c ------------------- timeFactorize ------------- @node timeFactorize, factorH, timeStd, general_lib @subsubsection timeFactorize @cindex timeFactorize @c ---content timeFactorize--- Procedure from library @code{general.lib} (@pxref{general_lib}). @table @asis @item @strong{Usage:} timeFactorize(p,d) poly p , integer d @item @strong{Return:} factorize(p) if the factorization finished after d-1 @*seconds otherwise f is considered to be irreducible @end table @strong{Example:} @smallexample @c computed example timeFactorize d2t_singular/general_lib.doc:812 LIB "general.lib"; ring r=0,(x,y),dp; poly p=((x2+y3)^2+xy6)*((x3+y2)^2+x10y); p=p^2; list l=timeFactorize(p,2); l; @expansion{} [1]: @expansion{} [1]: @expansion{} 1 @expansion{} [2]: @expansion{} x22y14+2x21y14+4x23y11+x20y14+2x25y8+4x22y11+6x24y8+4x26y5+2x18y13+\ x28y2+4x17y13+4x15y15+8x19y10+2x16y13+8x14y15+2x12y17+4x21y7+8x18y10+16x1\ 6y12+4x13y15+4x11y17+12x20y7+8x18y9+16x15y12+8x13y14+2x10y17+8x22y4+24x17\ y9+4x15y11+x14y12+8x12y14+2x24y+16x19y6+12x14y11+2x13y12+4x11y14+4x21y3+8\ x16y8+4x15y9+x12y12+8x10y14+6x8y16+2x18y5+2x17y6+4x14y9+16x12y11+4x9y14+1\ 2x7y16+4x5y18+6x16y6+8x14y8+16x11y11+24x9y13+6x6y16+8x4y18+x2y20+4x18y3+2\ 4x13y8+12x11y10+24x8y13+16x6y15+4x3y18+2xy20+x20+16x15y5+36x10y10+8x8y12+\ 16x5y15+4x3y17+y20+4x17y2+24x12y7+24x7y12+2x5y14+4x2y17+6x14y4+16x9y9+6x4\ y14+4x11y6+4x6y11+x8y8 @expansion{} [2]: @expansion{} 1,1 @c end example timeFactorize d2t_singular/general_lib.doc:812 @end smallexample @c ---end content timeFactorize--- @c ------------------- factorH ------------- @node factorH,, timeFactorize, general_lib @subsubsection factorH @cindex factorH @c ---content factorH--- Procedure from library @code{general.lib} (@pxref{general_lib}). @table @asis @item @strong{Usage:} factorH(p) p poly @item @strong{Return:} factorize(p) @item @strong{Note:} changes variables to become the last variable the principal one in the multivariate factorization and factorizes then the polynomial @end table @strong{Example:} @smallexample @c computed example factorH d2t_singular/general_lib.doc:845 LIB "general.lib"; system("random",992851144); ring r=32003,(x,y,z,w,t),lp; poly p=y2w9+yz7t-yz5w4-z2w4t4-w8t3; //factorize(p); //fast //system("random",992851262); //factorize(p); //slow //system("random",992851262); factorH(p); @expansion{} [1]: @expansion{} _[1]=1 @expansion{} _[2]=y2w9+yz7t-yz5w4-z2w4t4-w8t3 @expansion{} [2]: @expansion{} 1,1 @c end example factorH d2t_singular/general_lib.doc:845 @end smallexample @c ---end content factorH--- texi2html-1.82/test/singular_manual/d2t_singular/surf_lib_noEx.tex0000644000175000017500000000373711264347126027325 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/surf_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/surf_lib.doc INSTEAD @c library version: (1.19.2.6,2002/07/17) @c library file: ../Singular/LIB/surf.lib @cindex surf.lib @cindex surf_lib @table @asis @item @strong{Library:} surf.lib @item @strong{Purpose:} Procedures for Graphics with Surf @item @strong{Author:} Hans Schoenemann, @*the program surf is written by Stefan Endrass @item @strong{Note:} To use this library requires the program @code{surf} to be installed. @code{surf} is only available for Linux PCs and Sun workstations. You can download @code{surf} either from @uref{http://sourceforge.net/projects/surf} or from @uref{ftp://www.mathematik.uni-kl.de/pub/Math/Singular/utils/}. @end table @strong{Procedures:} @menu * plot:: plots plane curves and surfaces @end menu @c ---end content LibInfo--- @c ------------------- plot ------------- @node plot,,, surf_lib @subsubsection plot @cindex plot @c ---content plot--- Procedure from library @code{surf.lib} (@pxref{surf_lib}). @table @asis @item @strong{Usage:} plot(I); I ideal or poly @item @strong{Assume:} I defines a plane curve or a surface given by one equation @item @strong{Return:} nothing @item @strong{Note:} requires the external program 'surf' to be installed @end table @strong{Example:} @smallexample @c skipped computation of example plot d2t_singular/surf_lib.doc:53 LIB "surf.lib"; // --------- plane curves ------------ ring rr0 = 0,(x1,x2),dp; ideal I = x1^3 - x2^2; plot(I); ring rr1 = 0,(x,y,z),dp; ideal I(1) = 2x2-1/2x3 +1-y+1; plot(I(1)); // ---- Singular Logo -------------- poly logo = ((x+3)^3 + 2*(x+3)^2 - y^2)*(x^3 - y^2)*((x-3)^3-2*(x-3)^2-y^2); plot(logo); // Steiner surface ideal J(2) = x^2*y^2+x^2*z^2+y^2*z^2-17*x*y*z; plot(J(2)); // -------------------- plot(x*(x2-y2)+z2); // E7 plot(x^3-x*y^3+z^2); // Whitney umbrella plot(z^2-x^2*y); @end smallexample @c ---end content plot--- texi2html-1.82/test/singular_manual/d2t_singular/mondromy_lib.tex0000644000175000017500000002040111264347126027204 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/mondromy_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/mondromy_lib.doc INSTEAD @c library version: (1.22.2.2,2002/02/20) @c library file: ../Singular/LIB/mondromy.lib @cindex mondromy.lib @cindex mondromy_lib @table @asis @item @strong{Library:} mondromy.lib @item @strong{Purpose:} Monodromy of an Isolated Hypersurface Singularity @item @strong{Author:} Mathias Schulze, email: mschulze@@mathematik.uni-kl.de @item @strong{Overview:} A library to compute the monodromy of an isolated hypersurface singularity. It uses an algorithm by Brieskorn (manuscripta math. 2 (1970), 103-161) to compute a connection matrix of the meromorphic Gauss-Manin connection up to arbitrarily high order, and an algorithm of Gerard and Levelt (Ann. Inst. Fourier, Grenoble 23,1 (1973), pp. 157-195) to transform it to a simple pole. @end table @strong{Procedures:} @menu * detadj:: determinant and adjoint matrix of square matrix U * invunit:: series inverse of polynomial u up to order n * jacoblift:: lifts f^kappa in jacob(f) with minimal kappa * monodromyB:: monodromy of isolated hypersurface singularity f * H2basis:: basis of Brieskorn lattice H'' @end menu @cindex Monodromy @cindex hypersurface singularity @cindex Gauss-Manin connection @cindex Brieskorn lattice @c inserted refs from d2t_singular/mondromy_lib.doc:35 @ifinfo @menu See also: * gaussman_lib:: @end menu @end ifinfo @iftex @strong{See also:} @ref{gaussman_lib}. @end iftex @c end inserted refs from d2t_singular/mondromy_lib.doc:35 @c ---end content LibInfo--- @c ------------------- detadj ------------- @node detadj, invunit,, mondromy_lib @subsubsection detadj @cindex detadj @c ---content detadj--- Procedure from library @code{mondromy.lib} (@pxref{mondromy_lib}). @table @asis @item @strong{Usage:} detadj(U); U matrix @item @strong{Assume:} U is a square matrix with non zero determinant. @item @strong{Return:} The procedure returns a list with at most 2 entries. @*If U is not a square matrix, the list is empty. @*If U is a square matrix, then the first entry is the determinant of U. If U is a square matrix and the determinant of U not zero, then the second entry is the adjoint matrix of U. @item @strong{Display:} The procedure displays comments if printlevel>=1. @end table @strong{Example:} @smallexample @c computed example detadj d2t_singular/mondromy_lib.doc:68 LIB "mondromy.lib"; ring R=0,x,dp; matrix U[2][2]=1,1+x,1+x2,1+x3; list daU=detadj(U); daU[1]; @expansion{} -x2-x print(daU[2]); @expansion{} x3+1, -x-1, @expansion{} -x2-1,1 @c end example detadj d2t_singular/mondromy_lib.doc:68 @end smallexample @c ---end content detadj--- @c ------------------- invunit ------------- @node invunit, jacoblift, detadj, mondromy_lib @subsubsection invunit @cindex invunit @c ---content invunit--- Procedure from library @code{mondromy.lib} (@pxref{mondromy_lib}). @table @asis @item @strong{Usage:} invunit(u,n); u poly, n int @item @strong{Assume:} The polynomial u is a series unit. @item @strong{Return:} The procedure returns the series inverse of u up to order n or a zero polynomial if u is no series unit. @item @strong{Display:} The procedure displays comments if printlevel>=1. @end table @strong{Example:} @smallexample @c computed example invunit d2t_singular/mondromy_lib.doc:103 LIB "mondromy.lib"; ring R=0,(x,y),dp; invunit(2+x3+xy4,10); @expansion{} 1/8x2y8-1/16x9+1/4x4y4+1/8x6-1/4xy4-1/4x3+1/2 @c end example invunit d2t_singular/mondromy_lib.doc:103 @end smallexample @c ---end content invunit--- @c ------------------- jacoblift ------------- @node jacoblift, monodromyB, invunit, mondromy_lib @subsubsection jacoblift @cindex jacoblift @c ---content jacoblift--- Procedure from library @code{mondromy.lib} (@pxref{mondromy_lib}). @table @asis @item @strong{Usage:} jacoblift(f); f poly @item @strong{Assume:} The polynomial f in a series ring (local ordering) defines an isolated hypersurface singularity. @item @strong{Return:} The procedure returns a list with entries kappa, xi, u of type int, vector, poly such that kappa is minimal with f^kappa in jacob(f), u is a unit, and u*f^kappa=(matrix(jacob(f))*xi)[1,1]. @item @strong{Display:} The procedure displays comments if printlevel>=1. @end table @strong{Example:} @smallexample @c computed example jacoblift d2t_singular/mondromy_lib.doc:137 LIB "mondromy.lib"; ring R=0,(x,y),ds; poly f=x2y2+x6+y6; jacoblift(f); @expansion{} [1]: @expansion{} 2 @expansion{} [2]: @expansion{} 1/2x2y3*gen(2)+1/6x7*gen(1)+5/6x6y*gen(2)-2/3xy6*gen(1)+1/6y7*gen(2)-4\ x4y5*gen(2)-3/2x9y2*gen(1)-15/2x8y3*gen(2)+9/2x3y8*gen(1)-3/2x2y9*gen(2) @expansion{} [3]: @expansion{} 1-9x2y2 @c end example jacoblift d2t_singular/mondromy_lib.doc:137 @end smallexample @c ---end content jacoblift--- @c ------------------- monodromyB ------------- @node monodromyB, H2basis, jacoblift, mondromy_lib @subsubsection monodromyB @cindex monodromyB @c ---content monodromyB--- Procedure from library @code{mondromy.lib} (@pxref{mondromy_lib}). @table @asis @item @strong{Usage:} monodromyB(f[,opt]); f poly, opt int @item @strong{Assume:} The polynomial f in a series ring (local ordering) defines an isolated hypersurface singularity. @item @strong{Return:} The procedure returns a residue matrix M of the meromorphic Gauss-Manin connection of the singularity defined by f or an empty matrix if the assumptions are not fulfilled. If opt=0 (default), exp(-2*pi*i*M) is a monodromy matrix of f, else, only the characteristic polynomial of exp(-2*pi*i*M) coincides with the characteristic polynomial of the monodromy of f. @item @strong{Display:} The procedure displays more comments for higher printlevel. @end table @strong{Example:} @smallexample @c computed example monodromyB d2t_singular/mondromy_lib.doc:175 LIB "mondromy.lib"; ring R=0,(x,y),ds; poly f=x2y2+x6+y6; matrix M=monodromyB(f); print(M); @expansion{} 7/6,0, 0,0, 0, 0,0, 0,-1/2,0, 0, 0, 0, @expansion{} 0, 7/6,0,0, 0, 0,-1/2,0,0, 0, 0, 0, 0, @expansion{} 0, 0, 1,0, 0, 0,0, 0,0, 0, 0, 0, 0, @expansion{} 0, 0, 0,4/3,0, 0,0, 0,0, 0, 0, 0, 0, @expansion{} 0, 0, 0,0, 4/3,0,0, 0,0, 0, 0, 0, 0, @expansion{} 0, 0, 0,0, 0, 1,0, 0,0, 0, 0, 0, 0, @expansion{} 0, 0, 0,0, 0, 0,5/6, 0,0, 0, 0, 0, 0, @expansion{} 0, 0, 0,0, 0, 0,0, 1,0, 0, 0, 0, 0, @expansion{} 0, 0, 0,0, 0, 0,0, 0,5/6, 0, 0, 0, 0, @expansion{} 0, 0, 0,0, 0, 0,0, 0,0, 2/3,0, 0, 0, @expansion{} 0, 0, 0,0, 0, 0,0, 0,0, 0, 2/3,0, 0, @expansion{} 0, 0, 0,0, 0, 0,0, 0,0, 0, 0, 47/44,-625/396, @expansion{} 0, 0, 0,0, 0, 0,0, 0,0, 0, 0, 9/44, -3/44 @c end example monodromyB d2t_singular/mondromy_lib.doc:175 @end smallexample @c ---end content monodromyB--- @c ------------------- H2basis ------------- @node H2basis,, monodromyB, mondromy_lib @subsubsection H2basis @cindex H2basis @c ---content H2basis--- Procedure from library @code{mondromy.lib} (@pxref{mondromy_lib}). @table @asis @item @strong{Usage:} H2basis(f); f poly @item @strong{Assume:} The polynomial f in a series ring (local ordering) defines an isolated hypersurface singularity. @item @strong{Return:} The procedure returns a list of representatives of a C@{f@}-basis of the Brieskorn lattice H''=Omega^(n+1)/df^dOmega^(n-1). @item @strong{Theory:} H'' is a free C@{f@}-module of rank milnor(f). @item @strong{Display:} The procedure displays more comments for higher printlevel. @end table @strong{Example:} @smallexample @c computed example H2basis d2t_singular/mondromy_lib.doc:213 LIB "mondromy.lib"; ring R=0,(x,y),ds; poly f=x2y2+x6+y6; H2basis(f); @expansion{} [1]: @expansion{} x4 @expansion{} [2]: @expansion{} x2y2 @expansion{} [3]: @expansion{} y4 @expansion{} [4]: @expansion{} x3 @expansion{} [5]: @expansion{} x2y @expansion{} [6]: @expansion{} xy2 @expansion{} [7]: @expansion{} y3 @expansion{} [8]: @expansion{} x2 @expansion{} [9]: @expansion{} xy @expansion{} [10]: @expansion{} y2 @expansion{} [11]: @expansion{} x @expansion{} [12]: @expansion{} y @expansion{} [13]: @expansion{} 1 @c end example H2basis d2t_singular/mondromy_lib.doc:213 @end smallexample @c ---end content H2basis--- texi2html-1.82/test/singular_manual/d2t_singular/solve_lib.tex0000644000175000017500000006775111264347126026513 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/solve_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/solve_lib.doc INSTEAD @c library version: (1.21.2.14,2003/05/16) @c library file: ../Singular/LIB/solve.lib @cindex solve.lib @cindex solve_lib @table @asis @item @strong{Library:} solve.lib @item @strong{Purpose:} Complex Solving of Polynomial Systems @item @strong{Author:} Moritz Wenk, email: wenk@@mathematik.uni-kl.de @*Wilfred Pohl, email: pohl@@mathematik.uni-kl.de @end table @strong{Procedures:} @menu * laguerre_solve:: find all roots of univariate polynomial p * solve:: all roots of 0-dim. ideal i using triangular sets * ures_solve:: find all roots of 0-dimensional ideal i with resultants * mp_res_mat:: multipolynomial resultant matrix of ideal i * interpolate:: interpolate poly from evaluation points i and results j * fglm_solve:: find roots of 0-dim. ideal using FGLM and lex_solve * lex_solve:: find roots of reduced lexicographic standard basis * simplexOut:: prints solution of simplex in nice format * triangLf_solve:: find roots using triangular sys. (factorizing Lazard) * triangM_solve:: find roots of given triangular system (Moeller) * triangL_solve:: find roots using triangular system (Lazard) * triang_solve:: find roots of given triangular system @end menu @c ---end content LibInfo--- @c ------------------- laguerre_solve ------------- @node laguerre_solve, solve,, solve_lib @subsubsection laguerre_solve @cindex laguerre_solve @c ---content laguerre_solve--- Procedure from library @code{solve.lib} (@pxref{solve_lib}). @table @asis @item @strong{Usage:} laguerre_solve(f [, m, l, n, s] ); f = polynomial,@* m, l, n, s = integers (control parameters of the method) @format m: precision of output in digits ( 4 <= m), if basering is not ring of complex numbers; l: precision of internal computation in decimal digits ( l >=8 ) only if the basering is not complex or complex with smaller precision; n: control of multiplicity of roots or of splitting of f into squarefree factors n < 0, no split of f (good, if all roots are simple) n >= 0, try to split n = 0, return only different roots n > 0, find all roots (with multiplicity) s: s != 0, returns ERROR if | f(root) | > 0.1^m (when computing in the current ring) ( default: m, l, n, s = 8, 30, 1, 0 ) @end format @item @strong{Assume:} f is a univariate polynomial;@* basering has characteristic 0 and is either complex or without parameters. @item @strong{Return:} list of (complex) roots of the polynomial f, depending on n. The result is of type @format string: if the basering is not complex, number: otherwise. @end format @item @strong{Note:} If printlevel >0: displays comments ( default = 0 ). @*If s != 0 and if the procedure stops with ERROR, try a higher internal precision m. @end table @strong{Example:} @smallexample @c reused example laguerre_solve d2t_singular/solve_lib.doc:82 LIB "solve.lib"; // Find all roots of an univariate polynomial using Laguerre's method: ring rs1= 0,(x,y),lp; poly f = 15x5 + x3 + x2 - 10; // 10 digits precision laguerre_solve(f,10); @expansion{} [1]: @expansion{} (0.2930464644-i*0.9003002396) @expansion{} [2]: @expansion{} (0.2930464644+i*0.9003002396) @expansion{} [3]: @expansion{} (-0.7392783383-i*0.5355190078) @expansion{} [4]: @expansion{} (-0.7392783383+i*0.5355190078) @expansion{} [5]: @expansion{} 0.8924637479 // Now with complex coefficients, // internal precision is 30 digits (default) printlevel=2; ring rsc= (real,10,i),x,lp; poly f = (15.4+i*5)*x^5 + (25.0e-2+i*2)*x^3 + x2 - 10*i; list l = laguerre_solve(f); @expansion{} //BEGIN laguerre_solve @expansion{} //control: complex ring with precision 30 @expansion{} //working in: ring lagc=(complex,30,30),x,lp; @expansion{} // polynomial has complex coefficients @expansion{} //split in working ring: @expansion{} // split without result @expansion{} //END laguerre_solve l; @expansion{} [1]: @expansion{} (0.04588498039+i*0.9133296179) @expansion{} [2]: @expansion{} (0.5037408279-i*0.8058051828) @expansion{} [3]: @expansion{} (-0.5462895588-i*0.6796668873) @expansion{} [4]: @expansion{} (0.8524014357+i*0.2163760334) @expansion{} [5]: @expansion{} (-0.8557376852+i*0.3557664188) // check result, value of substituted poly should be near to zero // remember that l contains a list of strings // in the case of a different ring subst(f,x,l[1]); @expansion{} 0 subst(f,x,l[2]); @expansion{} 0 @c end example laguerre_solve d2t_singular/solve_lib.doc:82 @end smallexample @c ---end content laguerre_solve--- @c ------------------- solve ------------- @node solve, ures_solve, laguerre_solve, solve_lib @subsubsection solve @cindex solve @c ---content solve--- Procedure from library @code{solve.lib} (@pxref{solve_lib}). @table @asis @item @strong{Assume:} the ideal is 0-dimensional;@* basering has characteristic 0 and is either complex or without parameters; @item @strong{Return:} list of solutions of the ideal G, depending on n; one solution is a list of complex numbers in the generated output ring (the new basering). @format The result is a list L n = 0: a list of all different solutions (L[i]), n != 0: a list of two elements, L[i][1] contains all different solutions with the same multiplicity L[i][2] the multiplicity L is ordered w.r.t. multiplicity (the smallest first). @end format @item @strong{Note:} If the problem is not 0-dim. the procedure stops with ERROR, if the ideal G is not a lex. standard basis, it is generated with internal computation (Hilbert driven), if the input-ring (with char 0) has the name "", the lexicographical and complex output-ring has the name "C". @end table @strong{Example:} @smallexample @c reused example solve d2t_singular/solve_lib.doc:141 LIB "solve.lib"; // Find all roots of a multivariate ideal using triangular sets: int d=4;// with these 3 parameters you may construct int t=3;// very hard problems for 'solve' int s=2; int i; ring A=0,(x(1..d)),dp; poly p=-1; for(i=d;i>0;i--)@{p=p+x(i)^s;@} ideal I=x(d)^t-x(d)^s+p; for(i=d-1;i>0;i--)@{I=x(i)^t-x(i)^s+p,I;@} I; @expansion{} I[1]=x(1)^3+x(2)^2+x(3)^2+x(4)^2-1 @expansion{} I[2]=x(2)^3+x(1)^2+x(3)^2+x(4)^2-1 @expansion{} I[3]=x(3)^3+x(1)^2+x(2)^2+x(4)^2-1 @expansion{} I[4]=x(4)^3+x(1)^2+x(2)^2+x(3)^2-1 // the mutiplicity is vdim(std(I)); @expansion{} 81 list l1=solve(I,6,0); @expansion{} // name of new current ring: AC // the current ring is AC; @expansion{} // characteristic : 0 (complex:6 digits, additional 6 digits) @expansion{} // 1 parameter : i @expansion{} // minpoly : (i^2+1) @expansion{} // number of vars : 4 @expansion{} // block 1 : ordering lp @expansion{} // : names x(1) x(2) x(3) x(4) @expansion{} // block 2 : ordering C // you must start with char. 0 setring A; list l2=solve(I,6,1); @expansion{} // name of current ring: AC // the number of different solutions is size(l1); @expansion{} 37 // this is equal to size(l2[1][1])+size(l2[2][1]); @expansion{} 37 // the number of solutions with multiplicity is size(l2[1][1])*l2[1][2]+size(l2[2][1])*l2[2][2]; @expansion{} 81 // the solutions with multiplicity l2[2][2]; @expansion{} 12 // are l2[2][1]; @expansion{} [1]: @expansion{} [1]: @expansion{} 0 @expansion{} [2]: @expansion{} 0 @expansion{} [3]: @expansion{} 1 @expansion{} [4]: @expansion{} 0 @expansion{} [2]: @expansion{} [1]: @expansion{} 0 @expansion{} [2]: @expansion{} 1 @expansion{} [3]: @expansion{} 0 @expansion{} [4]: @expansion{} 0 @expansion{} [3]: @expansion{} [1]: @expansion{} 1 @expansion{} [2]: @expansion{} 0 @expansion{} [3]: @expansion{} 0 @expansion{} [4]: @expansion{} 0 @expansion{} [4]: @expansion{} [1]: @expansion{} 0 @expansion{} [2]: @expansion{} 0 @expansion{} [3]: @expansion{} 0 @expansion{} [4]: @expansion{} 1 @c end example solve d2t_singular/solve_lib.doc:141 @end smallexample @c ---end content solve--- @c ------------------- ures_solve ------------- @node ures_solve, mp_res_mat, solve, solve_lib @subsubsection ures_solve @cindex ures_solve @c ---content ures_solve--- Procedure from library @code{solve.lib} (@pxref{solve_lib}). @table @asis @item @strong{Usage:} ures_solve(i [, k, p] ); i = ideal, k, p = integers @format k=0: use sparse resultant matrix of Gelfand, Kapranov and Zelevinsky, k=1: use resultant matrix of Macaulay which works only for homogeneous ideals, p>0: defines precision of the long floats for internal computation if the basering is not complex (in decimal digits), (default: k=0, p=30) @end format @item @strong{Assume:} i is a zerodimensional ideal with @*nvars(basering) = ncols(i) = number of vars @*actually occurring in i, @item @strong{Return:} list of all (complex) roots of the polynomial system i = 0; the result is of type @format string: if the basering is not complex, number: otherwise. @end format @end table @strong{Example:} @smallexample @c reused example ures_solve d2t_singular/solve_lib.doc:211 LIB "solve.lib"; // compute the intersection points of two curves ring rsq = 0,(x,y),lp; ideal gls= x2 + y2 - 10, x2 + xy + 2y2 - 16; ures_solve(gls,0,16); @expansion{} [1]: @expansion{} [1]: @expansion{} 1 @expansion{} [2]: @expansion{} -3 @expansion{} [2]: @expansion{} [1]: @expansion{} -1 @expansion{} [2]: @expansion{} 3 @expansion{} [3]: @expansion{} [1]: @expansion{} 2.82842712474619 @expansion{} [2]: @expansion{} 1.414213562373095 @expansion{} [4]: @expansion{} [1]: @expansion{} -2.82842712474619 @expansion{} [2]: @expansion{} -1.414213562373095 // result is a list (x,y)-coordinates as strings // now with complex coefficient field, precision is 20 digits ring rsc= (real,20,I),(x,y),lp; ideal i = (2+3*I)*x2 + (0.35+I*45.0e-2)*y2 - 8, x2 + xy + (42.7)*y2; list l= ures_solve(i,0,10); // result is a list of (x,y)-coordinates of complex numbers l; @expansion{} [1]: @expansion{} [1]: @expansion{} (-1.315392899374542198+I*0.70468233142752928117) @expansion{} [2]: @expansion{} (0.12292646536251281054+I*0.19245727404407015049) @expansion{} [2]: @expansion{} [1]: @expansion{} (1.315392899374542198-I*0.70468233142752928117) @expansion{} [2]: @expansion{} (-0.12292646536251281054-I*0.19245727404407015049) @expansion{} [3]: @expansion{} [1]: @expansion{} (1.31584587549391830705-I*0.70396753310002259573) @expansion{} [2]: @expansion{} (0.092006639590217681983+I*0.20902112035965287775) @expansion{} [4]: @expansion{} [1]: @expansion{} (-1.31584587549391830705+I*0.70396753310002259573) @expansion{} [2]: @expansion{} (-0.092006639590217681983-I*0.20902112035965287775) // check the result subst(subst(i[1],x,l[1][1]),y,l[1][2]); @expansion{} 0 @c end example ures_solve d2t_singular/solve_lib.doc:211 @end smallexample @c ---end content ures_solve--- @c ------------------- mp_res_mat ------------- @node mp_res_mat, interpolate, ures_solve, solve_lib @subsubsection mp_res_mat @cindex mp_res_mat @c ---content mp_res_mat--- Procedure from library @code{solve.lib} (@pxref{solve_lib}). @table @asis @item @strong{Usage:} mp_res_mat(i [, k] ); i ideal, k integer, @format k=0: sparse resultant matrix of Gelfand, Kapranov and Zelevinsky, k=1: resultant matrix of Macaulay (k=0 is default) @end format @item @strong{Assume:} The number of elements in the input system must be the number of variables in the basering plus one; @*if k=1 then i must be homogeneous. @item @strong{Return:} module representing the multipolynomial resultant matrix @end table @strong{Example:} @smallexample @c reused example mp_res_mat d2t_singular/solve_lib.doc:256 LIB "solve.lib"; // compute resultant matrix in ring with parameters (sparse resultant matrix) ring rsq= (0,u0,u1,u2),(x1,x2),lp; ideal i= u0+u1*x1+u2*x2,x1^2 + x2^2 - 10,x1^2 + x1*x2 + 2*x2^2 - 16; module m = mp_res_mat(i); print(m); @expansion{} -16,0, -10,0, (u0),0, 0, 0, 0, 0, @expansion{} 0, -16,0, -10,(u2),(u0),0, 0, 0, 0, @expansion{} 2, 0, 1, 0, 0, (u2),0, 0, 0, 0, @expansion{} 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, @expansion{} 0, 0, 0, 0, (u1),0, -10,(u0),0, -16, @expansion{} 1, 0, 0, 0, 0, (u1),0, (u2),(u0),0, @expansion{} 0, 1, 0, 0, 0, 0, 1, 0, (u2),2, @expansion{} 1, 0, 1, 0, 0, 0, 0, (u1),0, 0, @expansion{} 0, 1, 0, 1, 0, 0, 0, 0, (u1),1, @expansion{} 0, 0, 0, 0, 0, 0, 1, 0, 0, 1 // computing sparse resultant det(m); @expansion{} (-2*u0^4+18*u0^2*u1^2+4*u0^2*u1*u2+22*u0^2*u2^2-16*u1^4+80*u1^3*u2-52*u1^\ 2*u2^2-120*u1*u2^3-36*u2^4) // compute resultant matrix (Macaulay resultant matrix) ring rdq= (0,u0,u1,u2),(x0,x1,x2),lp; ideal h= homog(imap(rsq,i),x0); h; @expansion{} h[1]=(u0)*x0+(u1)*x1+(u2)*x2 @expansion{} h[2]=-10*x0^2+x1^2+x2^2 @expansion{} h[3]=-16*x0^2+x1^2+x1*x2+2*x2^2 module m = mp_res_mat(h,1); print(m); @expansion{} x0, x1, x2, 0, 0, 0, 0,0, 0, 0, @expansion{} 0, x0, 0, x1,x2,0, 0,0, 0, 0, @expansion{} 0, 0, x0, 0, x1,x2,0,0, 0, 0, @expansion{} -10,0, 0, 1, 0, 1, 0,0, 0, 0, @expansion{} 0, 0, 0, 0, x0,0, 0,x1,x2,0, @expansion{} -16,0, 0, 1, 1, 2, 0,0, 0, 0, @expansion{} 0, -10,0, 0, 0, 0, 1,0, 1, 0, @expansion{} 0, 0, -10,0, 0, 0, 0,1, 0, 1, @expansion{} 0, -16,0, 0, 0, 0, 1,1, 2, 0, @expansion{} 0, 0, -16,0, 0, 0, 0,1, 1, 2 // computing Macaulay resultant (should be the same as above!) det(m); @expansion{} 2*x0^4-18*x0^2*x1^2-4*x0^2*x1*x2-22*x0^2*x2^2+16*x1^4-80*x1^3*x2+52*x1^2*\ x2^2+120*x1*x2^3+36*x2^4 // compute numerical sparse resultant matrix setring rsq; ideal ir= 15+2*x1+5*x2,x1^2 + x2^2 - 10,x1^2 + x1*x2 + 2*x2^2 - 16; module mn = mp_res_mat(ir); print(mn); @expansion{} 15,0, -10,0, 0, 0, 0, -16,0, 0, @expansion{} 5, 15,0, -10,0, 0, 0, 0, -16,0, @expansion{} 0, 5, 1, 0, 0, 0, 0, 2, 0, 0, @expansion{} 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, @expansion{} 2, 0, 0, 0, 15,0, -10,0, 0, -16, @expansion{} 0, 2, 0, 0, 5, 15,0, 1, 0, 0, @expansion{} 0, 0, 0, 0, 0, 5, 1, 0, 1, 2, @expansion{} 0, 0, 1, 0, 2, 0, 0, 1, 0, 0, @expansion{} 0, 0, 0, 1, 0, 2, 0, 0, 1, 1, @expansion{} 0, 0, 0, 0, 0, 0, 1, 0, 0, 1 // computing sparse resultant det(mn); @expansion{} -7056 @c end example mp_res_mat d2t_singular/solve_lib.doc:256 @end smallexample @c ---end content mp_res_mat--- @c ------------------- interpolate ------------- @node interpolate, fglm_solve, mp_res_mat, solve_lib @subsubsection interpolate @cindex interpolate @c ---content interpolate--- Procedure from library @code{solve.lib} (@pxref{solve_lib}). @table @asis @item @strong{Usage:} interpolate(p,v,d); p,v=ideals of numbers, d=integer @item @strong{Assume:} Ground field K is the field of rational numbers, p and v are lists of elements of the ground field K with p[j] != -1,0,1, size(p) = n (= number of vars) and size(v)=N=(d+1)^n. @item @strong{Return:} poly f, the unique polynomial f of degree n*d with prescribed values v[i] at the points p(i)=(p[1]^(i-1),..,p[n]^(i-1)), i=1,..,N. @item @strong{Note:} mainly useful when n=1, i.e. f is satisfying f(p^(i-1)) = v[i], i=1..d+1. @end table @strong{Example:} @smallexample @c reused example interpolate d2t_singular/solve_lib.doc:311 LIB "solve.lib"; ring r1 = 0,(x),lp; // determine f with deg(f) = 4 and // v = values of f at points 3^0, 3^1, 3^2, 3^3, 3^4 ideal v=16,0,11376,1046880,85949136; interpolate( 3, v, 4 ); @expansion{} 2x4-22x2+36 @c end example interpolate d2t_singular/solve_lib.doc:311 @end smallexample @c inserted refs from d2t_singular/solve_lib.doc:320 @ifinfo @menu See also: * vandermonde:: @end menu @end ifinfo @iftex @strong{See also:} @ref{vandermonde}. @end iftex @c end inserted refs from d2t_singular/solve_lib.doc:320 @c ---end content interpolate--- @c ------------------- fglm_solve ------------- @node fglm_solve, lex_solve, interpolate, solve_lib @subsubsection fglm_solve @cindex fglm_solve @c ---content fglm_solve--- Procedure from library @code{solve.lib} (@pxref{solve_lib}). @table @asis @item @strong{Usage:} fglm_solve(i [, p] ); i ideal, p integer @item @strong{Assume:} the ground field has char 0. @item @strong{Return:} a list of numbers, the complex roots of i; @*p>0: gives precision of complex numbers in decimal digits (default: p=30). @item @strong{Note:} The procedure uses a standard basis of i to determine all complex roots of i. @*It creates a ring rC with the same number of variables but with complex coefficients (and precision p). @end table @strong{Example:} @smallexample @c reused example fglm_solve d2t_singular/solve_lib.doc:354 LIB "solve.lib"; ring r = 0,(x,y),lp; // compute the intersection points of two curves ideal s= x2 + y2 - 10, x2 + xy + 2y2 - 16; fglm_solve(s,10); @expansion{} // name of new ring: rC @expansion{} // list of roots: rlist rlist; @expansion{} [1]: @expansion{} [1]: @expansion{} 2.8284271247 @expansion{} [2]: @expansion{} 1.4142135624 @expansion{} [2]: @expansion{} [1]: @expansion{} -2.8284271247 @expansion{} [2]: @expansion{} -1.4142135624 @expansion{} [3]: @expansion{} [1]: @expansion{} 1 @expansion{} [2]: @expansion{} -3 @expansion{} [4]: @expansion{} [1]: @expansion{} -1 @expansion{} [2]: @expansion{} 3 @c end example fglm_solve d2t_singular/solve_lib.doc:354 @end smallexample @c ---end content fglm_solve--- @c ------------------- lex_solve ------------- @node lex_solve, simplexOut, fglm_solve, solve_lib @subsubsection lex_solve @cindex lex_solve @c ---content lex_solve--- Procedure from library @code{solve.lib} (@pxref{solve_lib}). @table @asis @item @strong{Usage:} lex_solve( i[,p] ); i=ideal, p=integer, @format p>0: gives precision of complex numbers in decimal digits (default: p=30). @end format @item @strong{Assume:} i is a reduced lexicographical Groebner bases of a zero-dimensional ideal, sorted by increasing leading terms. @item @strong{Return:} nothing @item @strong{Create:} The procedure creates a complec ring with the same variables but with complex coefficients (and precision p). @*In this ring a list rlist of numbers is created, in which the complex roots of i are stored. @end table @strong{Example:} @smallexample @c reused example lex_solve d2t_singular/solve_lib.doc:395 LIB "solve.lib"; ring r = 0,(x,y),lp; // compute the intersection points of two curves ideal s= x2 + y2 - 10, x2 + xy + 2y2 - 16; lex_solve(stdfglm(s),10); @expansion{} // name of new ring: rC @expansion{} // list of roots: rlist rlist; @expansion{} [1]: @expansion{} [1]: @expansion{} 2.8284271247 @expansion{} [2]: @expansion{} 1.4142135624 @expansion{} [2]: @expansion{} [1]: @expansion{} -2.8284271247 @expansion{} [2]: @expansion{} -1.4142135624 @expansion{} [3]: @expansion{} [1]: @expansion{} 1 @expansion{} [2]: @expansion{} -3 @expansion{} [4]: @expansion{} [1]: @expansion{} -1 @expansion{} [2]: @expansion{} 3 @c end example lex_solve d2t_singular/solve_lib.doc:395 @end smallexample @c ---end content lex_solve--- @c ------------------- simplexOut ------------- @node simplexOut, triangLf_solve, lex_solve, solve_lib @subsubsection simplexOut @cindex simplexOut @c ---content simplexOut--- Procedure from library @code{solve.lib} (@pxref{solve_lib}). @table @asis @item @strong{Usage:} simplexOut(l); l list @item @strong{Assume:} l is the output of simplex. @item @strong{Return:} nothing. The procedure prints the computed solution of simplex (as strings) in a nice format. @end table @strong{Example:} @smallexample @c reused example simplexOut d2t_singular/solve_lib.doc:427 LIB "solve.lib"; ring r = (real,10),(x),lp; // consider the max. problem: // // maximize x(1) + x(2) + 3*x(3) - 0.5*x(4) // // with constraints: x(1) + 2*x(3) <= 740 // 2*x(2) - 7*x(4) <= 0 // x(2) - x(3) + 2*x(4) >= 0.5 // x(1) + x(2) + x(3) + x(4) = 9 // matrix sm[5][5]= 0, 1, 1, 3,-0.5, 740,-1, 0,-2, 0, 0, 0,-2, 0, 7, 0.5, 0,-1, 1,-2, 9,-1,-1,-1,-1; int n = 4; // number of constraints int m = 4; // number of variables int m1= 2; // number of <= constraints int m2= 1; // number of >= constraints int m3= 1; // number of == constraints list sol=simplex(sm, n, m, m1, m2, m3); simplexOut(sol); @expansion{} z = 17.025 @expansion{} x2 = 3.325 @expansion{} x4 = 0.95 @expansion{} x3 = 4.725 @c end example simplexOut d2t_singular/solve_lib.doc:427 @end smallexample @c inserted refs from d2t_singular/solve_lib.doc:453 @ifinfo @menu See also: * simplex:: @end menu @end ifinfo @iftex @strong{See also:} @ref{simplex}. @end iftex @c end inserted refs from d2t_singular/solve_lib.doc:453 @c ---end content simplexOut--- @c ------------------- triangLf_solve ------------- @node triangLf_solve, triangM_solve, simplexOut, solve_lib @subsubsection triangLf_solve @cindex triangLf_solve @c ---content triangLf_solve--- Procedure from library @code{solve.lib} (@pxref{solve_lib}). @table @asis @item @strong{Usage:} triangLf_solve(i [, p] ); i ideal, p integer, @*p>0: gives precision of complex numbers in digits (default: p=30). @item @strong{Assume:} the ground field has char 0; i is a zero-dimensional ideal @item @strong{Return:} nothing @item @strong{Create:} The procedure creates a ring rC with the same number of variables but with complex coefficients (and precision p).@* In rC a list rlist of numbers is created, in which the complex roots of i are stored.@* The proc uses a triangular system (Lazard's Algorithm with factorization) computed from a standard basis to determine recursively all complex roots with Laguerre's algorithm of input ideal i. @end table @strong{Example:} @smallexample @c reused example triangLf_solve d2t_singular/solve_lib.doc:489 LIB "solve.lib"; ring r = 0,(x,y),lp; // compute the intersection points of two curves ideal s= x2 + y2 - 10, x2 + xy + 2y2 - 16; triangLf_solve(s,10); @expansion{} // name of new ring: rC @expansion{} // list of roots: rlist rlist; @expansion{} [1]: @expansion{} [1]: @expansion{} -1 @expansion{} [2]: @expansion{} 3 @expansion{} [2]: @expansion{} [1]: @expansion{} 1 @expansion{} [2]: @expansion{} -3 @expansion{} [3]: @expansion{} [1]: @expansion{} 2.8284271247 @expansion{} [2]: @expansion{} 1.4142135624 @expansion{} [4]: @expansion{} [1]: @expansion{} -2.8284271247 @expansion{} [2]: @expansion{} -1.4142135624 @c end example triangLf_solve d2t_singular/solve_lib.doc:489 @end smallexample @c ---end content triangLf_solve--- @c ------------------- triangM_solve ------------- @node triangM_solve, triangL_solve, triangLf_solve, solve_lib @subsubsection triangM_solve @cindex triangM_solve @c ---content triangM_solve--- Procedure from library @code{solve.lib} (@pxref{solve_lib}). @table @asis @item @strong{Usage:} triangM_solve(i [, p ] ); i=ideal, p=integer, @*p>0: gives precision of complex numbers in digits (default: p=30). @item @strong{Assume:} the ground field has char 0;@* i zero-dimensional ideal @item @strong{Return:} nothing @item @strong{Create:} The procedure creates a ring rC with the same number of variables but with complex coefficients (and precision p).@* In rC a list rlist of numbers is created, in which the complex roots of i are stored.@* The proc uses a triangular system (Moellers Algorithm) computed from a standard basis to determine recursively all complex roots with Laguerre's algorithm of input ideal i. @end table @strong{Example:} @smallexample @c reused example triangM_solve d2t_singular/solve_lib.doc:531 LIB "solve.lib"; ring r = 0,(x,y),lp; // compute the intersection points of two curves ideal s= x2 + y2 - 10, x2 + xy + 2y2 - 16; triangM_solve(s,10); @expansion{} // name of new ring: rC @expansion{} // list of roots: rlist rlist; @expansion{} [1]: @expansion{} [1]: @expansion{} 2.8284271247 @expansion{} [2]: @expansion{} 1.4142135624 @expansion{} [2]: @expansion{} [1]: @expansion{} -2.8284271247 @expansion{} [2]: @expansion{} -1.4142135624 @expansion{} [3]: @expansion{} [1]: @expansion{} 1 @expansion{} [2]: @expansion{} -3 @expansion{} [4]: @expansion{} [1]: @expansion{} -1 @expansion{} [2]: @expansion{} 3 @c end example triangM_solve d2t_singular/solve_lib.doc:531 @end smallexample @c ---end content triangM_solve--- @c ------------------- triangL_solve ------------- @node triangL_solve, triang_solve, triangM_solve, solve_lib @subsubsection triangL_solve @cindex triangL_solve @c ---content triangL_solve--- Procedure from library @code{solve.lib} (@pxref{solve_lib}). @table @asis @item @strong{Usage:} triangL_solve(i [, p] ); i=ideal, p=integer,@* p>0: gives precision of complex numbers in digits (default: p=30). @item @strong{Assume:} the ground field has char 0; i is a zero-dimensional ideal. @item @strong{Return:} nothing @item @strong{Create:} The procedure creates a ring rC with the same number of variables but with complex coefficients (and precision p).@* In rC a list rlist of numbers is created, in which the complex roots of i are stored.@* The proc uses a triangular system (Lazard's Algorithm) computed from a standard basis to determine recursively all complex roots with Laguerre's algorithm of input ideal i. @end table @strong{Example:} @smallexample @c reused example triangL_solve d2t_singular/solve_lib.doc:572 LIB "solve.lib"; ring r = 0,(x,y),lp; // compute the intersection points of two curves ideal s= x2 + y2 - 10, x2 + xy + 2y2 - 16; triangL_solve(s,10); @expansion{} // name of new ring: rC @expansion{} // list of roots: rlist rlist; @expansion{} [1]: @expansion{} [1]: @expansion{} 2.8284271247 @expansion{} [2]: @expansion{} 1.4142135624 @expansion{} [2]: @expansion{} [1]: @expansion{} -2.8284271247 @expansion{} [2]: @expansion{} -1.4142135624 @expansion{} [3]: @expansion{} [1]: @expansion{} 1 @expansion{} [2]: @expansion{} -3 @expansion{} [4]: @expansion{} [1]: @expansion{} -1 @expansion{} [2]: @expansion{} 3 @c end example triangL_solve d2t_singular/solve_lib.doc:572 @end smallexample @c ---end content triangL_solve--- @c ------------------- triang_solve ------------- @node triang_solve,, triangL_solve, solve_lib @subsubsection triang_solve @cindex triang_solve @c ---content triang_solve--- Procedure from library @code{solve.lib} (@pxref{solve_lib}). @table @asis @item @strong{Usage:} triang_solve(l,p [, d] ); l=list, p,d=integers,@* l a list of finitely many triangular systems, such that the union of their varieties equals the variety of the initial ideal.@* p>0: gives precision of complex numbers in digits,@* d>0: gives precision (1 that @end smallexample Use @@format for preformatted text typeset in normal font @format this --> that @end format Use @@texinfo for text in pure texinfo @expansion{} @tex $i_{1,1}$ @end tex Notice that @*automatic linebreaking is still in affect (like on this line). @cindex procedure, ASCII/Texinfo help @end table @strong{Example:} @smallexample @c computed example msum d2t_singular/template_lib.doc:149 LIB "template.lib"; msum(); @expansion{} 0 msum(4); @expansion{} 4 msum(1,2,3,4); @expansion{} 10 @c end example msum d2t_singular/template_lib.doc:149 @end smallexample @c inserted refs from d2t_singular/template_lib.doc:156 @ifinfo @menu See also: * Typesetting of help strings:: * mdouble:: * mtripple:: @end menu @end ifinfo @iftex @strong{See also:} @ref{Typesetting of help strings}; @ref{mdouble}; @ref{mtripple}. @end iftex @c end inserted refs from d2t_singular/template_lib.doc:156 @c ---end content msum--- texi2html-1.82/test/singular_manual/d2t_singular/normal_lib.tex0000644000175000017500000002356211264347126026643 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/normal_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/normal_lib.doc INSTEAD @c library version: (1.34.2.17,2002/10/21) @c library file: ../Singular/LIB/normal.lib @cindex normal.lib @cindex normal_lib @table @asis @item @strong{Library:} normal.lib @item @strong{Purpose:} Normalization of Affine Rings @item @strong{Authors:} G.-M. Greuel, greuel@@mathematik.uni-kl.de, @* G. Pfister, pfister@@mathematik.uni-kl.de @end table @strong{Main procedures:} @menu * normal:: computes the normalization of basering/I, resp. computes the normalization of basering/I and the delta invariant * HomJJ:: presentation of End_R(J) as affine ring, L a list * genus:: computes genus of the projective curve defined by I @end menu @strong{Auxiliary procedure:} @menu * deltaLoc:: (sum of) delta invariant(s) at conjugated singular points @end menu @c ---end content LibInfo--- @c ------------------- normal ------------- @node normal, HomJJ,, normal_lib @subsubsection normal @cindex normal @c ---content normal--- Procedure from library @code{normal.lib} (@pxref{normal_lib}). @table @asis @item @strong{Usage:} normal(i [,choose]); i a radical ideal, choose empty, 1 or "wd" if choose=1 the normalization of the associated primes is computed (which is sometimes more efficient); if @code{choose="wd"} the delta invariant is computed simultaneously; this may take much more time in the reducible case, since the factorizing standard basis algorithm cannot be used. @item @strong{Assume:} The ideal must be radical, for non-radical ideals the output may be wrong (i=radical(i); makes i radical) @item @strong{Return:} a list of rings, say nor and in case of @code{choose="wd"} an integer at the end of the list. Each ring @code{nor[i]} contains two ideals with given names @code{norid} and @code{normap} such that@* - the direct sum of the rings @code{nor[i]/norid} is the normalization of basering/id;@* - @code{normap} gives the normalization map from basering/id to @code{nor[i]/norid} (for each i). @item @strong{Note:} to use the i-th ring type: @code{def R=nor[i]; setring R;}. @* Increasing printlevel displays more comments (default: printlevel=0). @* Not implemented for local or mixed orderings. @* If the input ideal i is weighted homogeneous a weighted ordering may be used (qhweight(i); computes weights). @cindex normalization @cindex delta invariant. @end table @strong{Example:} @smallexample @c computed example normal d2t_singular/normal_lib.doc:71 LIB "normal.lib"; ring r=32003,(x,y,z),wp(2,1,2); ideal i=z3-xy4; list nor=normal(i); @expansion{} @expansion{} // 'normal' created a list of 1 ring(s). @expansion{} // nor[1+1] is the delta-invariant in case of choose=wd. @expansion{} // To see the rings, type (if the name of your list is nor): @expansion{} show( nor); @expansion{} // To access the 1-st ring and map (similar for the others), type: @expansion{} def R = nor[1]; setring R; norid; normap; @expansion{} // R/norid is the 1-st ring of the normalization and @expansion{} // normap the map from the original basering to R/norid show(nor); @expansion{} // list, 1 element(s): @expansion{} [1]: @expansion{} // ring: (32003),(T(1),T(2),T(3)),(a(2,1,1),dp(3),C); @expansion{} // minpoly = 0 @expansion{} // objects belonging to this ring: @expansion{} // normap [0] ideal, 3 generator(s) @expansion{} // norid [0] ideal, 1 generator(s) def r1=nor[1]; setring r1; norid; @expansion{} norid[1]=T(3)3-T(1)T(2) normap; @expansion{} normap[1]=T(1) @expansion{} normap[2]=T(2) @expansion{} normap[3]=T(2)T(3) ring s=0,(x,y),dp; ideal i=(x-y^2)^2 - y*x^3; nor=normal(i,"wd"); @expansion{} @expansion{} // 'normal' created a list of 1 ring(s). @expansion{} // nor[1+1] is the delta-invariant in case of choose=wd. @expansion{} // To see the rings, type (if the name of your list is nor): @expansion{} show( nor); @expansion{} // To access the 1-st ring and map (similar for the others), type: @expansion{} def R = nor[1]; setring R; norid; normap; @expansion{} // R/norid is the 1-st ring of the normalization and @expansion{} // normap the map from the original basering to R/norid //the delta-invariant nor[size(nor)]; @expansion{} 3 @c end example normal d2t_singular/normal_lib.doc:71 @end smallexample @c ---end content normal--- @c ------------------- HomJJ ------------- @node HomJJ, genus, normal, normal_lib @subsubsection HomJJ @cindex HomJJ @c ---content HomJJ--- Procedure from library @code{normal.lib} (@pxref{normal_lib}). @table @asis @item @strong{Usage:} HomJJ (Li); Li = list: ideal SBid, ideal id, ideal J, poly p @item @strong{Assume:} R = P/id, P = basering, a polynomial ring, id an ideal of P, @* SBid = standard basis of id, @* J = ideal of P containing the polynomial p, @* p = nonzero divisor of R @item @strong{Compute:} Endomorphism ring End_R(J)=Hom_R(J,J) with its ring structure as affine ring, together with the canonical map R --> Hom_R(J,J), where R is the quotient ring of P modulo the standard basis SBid. @item @strong{Return:} a list l of two objects @format l[1] : a polynomial ring, containing two ideals, 'endid' and 'endphi' such that l[1]/endid = Hom_R(J,J) and endphi describes the canonical map R -> Hom_R(J,J) l[2] : an integer which is 1 if phi is an isomorphism, 0 if not l[3] : an integer, the contribution to delta @end format @item @strong{Note:} printlevel >=1: display comments (default: printlevel=0) @end table @strong{Example:} @smallexample @c computed example HomJJ d2t_singular/normal_lib.doc:128 LIB "normal.lib"; ring r = 0,(x,y),wp(2,3); ideal id = y^2-x^3; ideal J = x,y; poly p = x; list Li = std(id),id,J,p; list L = HomJJ(Li); def end = L[1]; // defines ring L[1], containing ideals endid, endphi setring end; // makes end the basering end; @expansion{} // characteristic : 0 @expansion{} // number of vars : 1 @expansion{} // block 1 : ordering dp @expansion{} // : names T(1) @expansion{} // block 2 : ordering C endid; // end/endid is isomorphic to End(r/id) as ring @expansion{} endid[1]=0 map psi = r,endphi;// defines the canonical map r/id -> End(r/id) psi; @expansion{} psi[1]=T(1)^2 @expansion{} psi[2]=T(1)^3 @c end example HomJJ d2t_singular/normal_lib.doc:128 @end smallexample @c ---end content HomJJ--- @c ------------------- genus ------------- @node genus, deltaLoc, HomJJ, normal_lib @subsubsection genus @cindex genus @c ---content genus--- Procedure from library @code{normal.lib} (@pxref{normal_lib}). @table @asis @item @strong{Usage:} genus(I) or genus(i,1); I a 1-dimensional ideal @item @strong{Return:} an integer, the geometric genus p_g = p_a - delta of the projective curve defined by I, where p_a is the arithmetic genus. @item @strong{Note:} delta is the sum of all local delta-invariants of the singularities, i.e. dim(R'/R), R' the normalization of the local ring R of the singularity. @*genus(i,1) uses the normalization to compute delta. Usually this is slow but sometimes not. @end table @strong{Example:} @smallexample @c computed example genus d2t_singular/normal_lib.doc:171 LIB "normal.lib"; ring r=0,(x,y),dp; ideal i=y^9 - x^2*(x - 1)^9; genus(i); @expansion{} 0 @c end example genus d2t_singular/normal_lib.doc:171 @end smallexample @c ---end content genus--- @c ------------------- deltaLoc ------------- @node deltaLoc,, genus, normal_lib @subsubsection deltaLoc @cindex deltaLoc @c ---content deltaLoc--- Procedure from library @code{normal.lib} (@pxref{normal_lib}). @table @asis @item @strong{Usage:} deltaLoc(f,J); f poly, J ideal @item @strong{Assume:} f is reduced bivariate polynomial; basering has exactly two variables; J is irreducible prime component of the singular locus of f (e.g., one entry of the output of @code{minAssGTZ(I);}, I = ). @item @strong{Return:} list L: @table @asis @item @code{L[1]}; int: the sum of (local) delta invariants of f at the (conjugated) singular points given by J. @item @code{L[2]}; int: the sum of (local) Tjurina numbers of f at the (conjugated) singular points given by J. @item @code{L[3]}; int: the sum of (local) number of branches of f at the (conjugated) singular points given by J. @end table @item @strong{Note:} procedure makes use of @code{execute}; increasing printlevel displays more comments (default: printlevel=0). @cindex delta invariant @cindex Tjurina number @end table @strong{Example:} @smallexample @c computed example deltaLoc d2t_singular/normal_lib.doc:220 LIB "normal.lib"; ring r=0,(x,y),dp; poly f=(x2+y^2-1)^3 +27x2y2; ideal I=f,jacob(f); I=std(I); list qr=minAssGTZ(I); size(qr); @expansion{} 6 // each component of the singular locus either describes a cusp or a pair // of conjugated nodes: deltaLoc(f,qr[1]); @expansion{} [1]: @expansion{} 1 @expansion{} [2]: @expansion{} 2 @expansion{} [3]: @expansion{} 1 deltaLoc(f,qr[2]); @expansion{} [1]: @expansion{} 1 @expansion{} [2]: @expansion{} 2 @expansion{} [3]: @expansion{} 1 deltaLoc(f,qr[3]); @expansion{} [1]: @expansion{} 1 @expansion{} [2]: @expansion{} 2 @expansion{} [3]: @expansion{} 1 deltaLoc(f,qr[4]); @expansion{} [1]: @expansion{} 1 @expansion{} [2]: @expansion{} 2 @expansion{} [3]: @expansion{} 1 deltaLoc(f,qr[5]); @expansion{} [1]: @expansion{} 2 @expansion{} [2]: @expansion{} 2 @expansion{} [3]: @expansion{} 4 deltaLoc(f,qr[6]); @expansion{} [1]: @expansion{} 2 @expansion{} [2]: @expansion{} 2 @expansion{} [3]: @expansion{} 4 @c end example deltaLoc d2t_singular/normal_lib.doc:220 @end smallexample @c inserted refs from d2t_singular/normal_lib.doc:238 @ifinfo @menu See also: * delta:: * tjurina:: @end menu @end ifinfo @iftex @strong{See also:} @ref{delta}; @ref{tjurina}. @end iftex @c end inserted refs from d2t_singular/normal_lib.doc:238 @c ---end content deltaLoc--- texi2html-1.82/test/singular_manual/d2t_singular/classify_lib.tex0000644000175000017500000005134211264347126027165 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/classify_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/classify_lib.doc INSTEAD @c library version: (1.48.2.4,2002/04/11) @c library file: ../Singular/LIB/classify.lib @cindex classify.lib @cindex classify_lib @table @asis @item @strong{Library:} classify.lib @item @strong{Purpose:} Arnold Classifier of Singularities @item @strong{Authors:} Kai Krueger, krueger@@mathematik.uni-kl.de @*Corina Baciu, baciu@@mathematik.uni-kl.de @item @strong{Overview:} A library for classifying isolated hypersurface singularities w.r.t. right equivalence, based on the determinator of singularities by V.I. Arnold. @end table @strong{Procedures:} @menu * basicinvariants:: computes Milnor number, determinacy-bound and corank of * classify:: normal form of poly f determined with Arnold's method * corank:: computes the corank of f (i.e. of the Hessian of f) * Hcode:: coding of intvec v according to the number repetitions * init_debug:: print trace and debugging information depending on int n * internalfunctions:: display names of internal procedures of this library * milnorcode:: Hilbert poly of [e-th] Milnor algebra coded with Hcode * morsesplit:: residual part of f after applying the splitting lemma * quickclass:: normal form of f determined by invariants (milnorcode) * singularity:: normal form of singularity given by its name s and index * swap:: returns b,a * A_L:: shortcut for quickclass(f) or normalform(s) * normalform:: normal form of singularity given by its name s * debug_log:: print trace and debugging information w.r.t level>@@DeBug @end menu @c ---end content LibInfo--- @c ------------------- basicinvariants ------------- @node basicinvariants, classify,, classify_lib @subsubsection basicinvariants @cindex basicinvariants @c ---content basicinvariants--- Procedure from library @code{classify.lib} (@pxref{classify_lib}). @table @asis @item @strong{Usage:} basicinvariants(f); f = poly @item @strong{Compute:} Compute basic invariants of f: an upper bound d for the determinacy, the milnor number mu and the corank c of f @item @strong{Return:} intvec: d, mu, c @end table @strong{Example:} @smallexample @c computed example basicinvariants d2t_singular/classify_lib.doc:61 LIB "classify.lib"; ring r=0,(x,y,z),ds; basicinvariants((x2+3y-2z)^2+xyz-(x-y3+x2*z3)^3); @expansion{} 5,4,2 @c end example basicinvariants d2t_singular/classify_lib.doc:61 @end smallexample @c ---end content basicinvariants--- @c ------------------- classify ------------- @node classify, corank, basicinvariants, classify_lib @subsubsection classify @cindex classify @c ---content classify--- Procedure from library @code{classify.lib} (@pxref{classify_lib}). @table @asis @item @strong{Usage:} classify(f); f=poly @item @strong{Compute:} normal form and singularity type of f with respect to right equivalence, as given in the book "Singularities of differentiable maps, Volume I" by V.I. Arnold, S.M. Gusein-Zade, A.N. Varchenko @item @strong{Return:} normal form of f, of type poly @item @strong{Remark:} This version of classify is only beta. Please send bugs and comments to: "Kai Krueger" @* Be sure to have at least Singular version 1.0.1. Updates can be found at: @* URL=http://www.mathematik.uni-kl.de/~krueger/Singular/ @item @strong{Note:} type init_debug(n); (0 <= n <= 10) in order to get intermediate information, higher values of n give more information. @*The proc creates several global objects with names all starting with @@, hence there should be no name conflicts @end table @strong{Example:} @smallexample @c computed example classify d2t_singular/classify_lib.doc:104 LIB "classify.lib"; ring r=0,(x,y,z),ds; poly f=(x2+3y-2z)^2+xyz-(x-y3+x2*z3)^3; classify(f); @expansion{} About the singularity : @expansion{} Milnor number(f) = 4 @expansion{} Corank(f) = 2 @expansion{} Determinacy <= 5 @expansion{} Guessing type via Milnorcode: D[k]=D[4] @expansion{} @expansion{} Computing normal form ... @expansion{} I have to apply the splitting lemma. This will take some time....:-) @expansion{} Arnold step number 4 @expansion{} The singularity @expansion{} -x3+3/2xy2+1/2x3y-1/16x2y2+3x2y3 @expansion{} is R-equivalent to D[4]. @expansion{} Milnor number = 4 @expansion{} modality = 0 @expansion{} 2z2+x2y+y3 init_debug(3); @expansion{} Debugging level change from 0 to 3 classify(f); @expansion{} Computing Basicinvariants of f ... @expansion{} About the singularity : @expansion{} Milnor number(f) = 4 @expansion{} Corank(f) = 2 @expansion{} Determinacy <= 5 @expansion{} Hcode: 1,2,1,0,0 @expansion{} Milnor code : 1,1,1 @expansion{} Debug:(2): entering HKclass3_teil_1 1,1,1 @expansion{} Debug:(2): finishing HKclass3_teil_1 @expansion{} Guessing type via Milnorcode: D[k]=D[4] @expansion{} @expansion{} Computing normal form ... @expansion{} I have to apply the splitting lemma. This will take some time....:-) @expansion{} Debug:(3): Split the polynomial below using determinacy: 5 @expansion{} Debug:(3): 9y2-12yz+4z2-x3+6x2y-4x2z+xyz+x4+3x2y3 @expansion{} Debug:(2): Permutations: 3,2,1 @expansion{} Debug:(2): Permutations: 3,2,1 @expansion{} Debug:(2): rank determined with Morse rg= 1 @expansion{} Residual singularity f= -x3+3/2xy2+1/2x3y-1/16x2y2+3x2y3 @expansion{} Step 3 @expansion{} Arnold step number 4 @expansion{} The singularity @expansion{} -x3+3/2xy2+1/2x3y-1/16x2y2+3x2y3 @expansion{} is R-equivalent to D[4]. @expansion{} Milnor number = 4 @expansion{} modality = 0 @expansion{} Debug:(2): Decode: @expansion{} Debug:(2): S_in= D[4] s_in= D[4] @expansion{} Debug:(2): Looking for Normalform of D[k] with (k,r,s) = ( 4 , 0 , 0 ) @expansion{} Debug:(2): Opening Singalarity-database: @expansion{} DBM: NFlist @expansion{} Debug:(2): DBMread( D[k] )= x2y+y^(k-1) . @expansion{} Debug:(2): S= f = x2y+y^(k-1); Tp= x2y+y^(k-1) Key= I_D[k] @expansion{} Polynom f= x2y+y3 crk= 2 Mu= 4 MlnCd= 1,1,1 @expansion{} Debug:(2): Info= x2y+y3 @expansion{} Debug:(2): Normal form NF(f)= 2*x(3)^2+x(1)^2*x(2)+x(2)^3 @expansion{} 2z2+x2y+y3 @c end example classify d2t_singular/classify_lib.doc:104 @end smallexample @c ---end content classify--- @c ------------------- corank ------------- @node corank, Hcode, classify, classify_lib @subsubsection corank @cindex corank @c ---content corank--- Procedure from library @code{classify.lib} (@pxref{classify_lib}). @table @asis @item @strong{Usage:} corank(f); f=poly @item @strong{Return:} the corank of the Hessian matrix of f, of type int @item @strong{Remark:} corank(f) is the number of variables occurring in the residual singularity after applying 'morsesplit' to f @end table @strong{Example:} @smallexample @c computed example corank d2t_singular/classify_lib.doc:136 LIB "classify.lib"; ring r=0,(x,y,z),ds; poly f=(x2+3y-2z)^2+xyz-(x-y3+x2*z3)^3; corank(f); @expansion{} 2 @c end example corank d2t_singular/classify_lib.doc:136 @end smallexample @c ---end content corank--- @c ------------------- Hcode ------------- @node Hcode, init_debug, corank, classify_lib @subsubsection Hcode @cindex Hcode @c ---content Hcode--- Procedure from library @code{classify.lib} (@pxref{classify_lib}). @table @asis @item @strong{Usage:} Hcode(v); v=intvec @item @strong{Return:} intvec, coding v according to the number of successive repetitions of an entry @end table @strong{Example:} @smallexample @c computed example Hcode d2t_singular/classify_lib.doc:163 LIB "classify.lib"; intvec v1 = 1,3,5,5,2; Hcode(v1); @expansion{} 1,0,1,0,2,0,0,1,0 intvec v2 = 1,2,3,4,4,4,4,4,4,4,3,2,1; Hcode(v2); @expansion{} 1,1,1,7,1,1,1 @c end example Hcode d2t_singular/classify_lib.doc:163 @end smallexample @c ---end content Hcode--- @c ------------------- init_debug ------------- @node init_debug, internalfunctions, Hcode, classify_lib @subsubsection init_debug @cindex init_debug @c ---content init_debug--- Procedure from library @code{classify.lib} (@pxref{classify_lib}). @table @asis @item @strong{Usage:} init_debug([level]); level=int @item @strong{Compute:} Set the global variable @@DeBug to level. The variable @@DeBug is used by the function debug_log(level, list of strings) to know when to print the list of strings. init_debug() reports only changes of @@DeBug. @item @strong{Note:} The procedure init_debug(n); is useful as trace-mode. n may range from 0 to 10, higher values of n give more information. @end table @strong{Example:} @smallexample @c computed example init_debug d2t_singular/classify_lib.doc:197 LIB "classify.lib"; init_debug(); debug_log(1,"no trace information printed"); init_debug(1); @expansion{} Debugging level change from 0 to 1 debug_log(1,"some trace information"); @expansion{} some trace information init_debug(2); @expansion{} Debugging level change from 1 to 2 debug_log(2,"nice for debugging scripts"); @expansion{} Debug:(2): nice for debugging scripts init_debug(0); @expansion{} Debugging switched off. @c end example init_debug d2t_singular/classify_lib.doc:197 @end smallexample @c ---end content init_debug--- @c ------------------- internalfunctions ------------- @node internalfunctions, milnorcode, init_debug, classify_lib @subsubsection internalfunctions @cindex internalfunctions @c ---content internalfunctions--- Procedure from library @code{classify.lib} (@pxref{classify_lib}). @table @asis @item @strong{Usage:} internalfunctions(); @item @strong{Return:} nothing, display names of internal procedures of classify.lib @end table @strong{Example:} @smallexample @c computed example internalfunctions d2t_singular/classify_lib.doc:227 LIB "classify.lib"; internalfunctions(); @expansion{} Internal functions for the classification using Arnold's method, @expansion{} the function numbers correspond to numbers in Arnold's classifier: @expansion{} Klassifiziere(poly f); //determine the type of the singularity f @expansion{} Funktion1bis (poly f, list cstn) @expansion{} Funktion3 (poly f, list cstn) @expansion{} Funktion6 (poly f, list cstn) @expansion{} Funktion13 (poly f, list cstn) @expansion{} Funktion17 (poly f, list cstn) @expansion{} Funktion25 (poly f, list cstn) @expansion{} Funktion40 (poly f, list cstn, int k) @expansion{} Funktion47 (poly f, list cstn) @expansion{} Funktion50 (poly f, list cstn) @expansion{} Funktion58 (poly fin, list cstn) @expansion{} Funktion59 (poly f, list cstn) @expansion{} Funktion66 (poly f, list cstn) @expansion{} Funktion82 (poly f, list cstn) @expansion{} Funktion83 (poly f, list cstn) @expansion{} Funktion91 (poly f, list cstn, int k) @expansion{} Funktion92 (poly f, list cstn, int k) @expansion{} Funktion93 (poly f, list cstn, int k) @expansion{} Funktion94 (poly f, list cstn, int k) @expansion{} Funktion95 (poly f, list cstn, int k) @expansion{} Funktion96 (poly f, list cstn, int k) @expansion{} Funktion97 (poly f, list cstn) @expansion{} Isomorphie_s82_x (poly f, poly fk, int k) @expansion{} Isomorphie_s82_z (poly f, poly fk, int k) @expansion{} Isomorphie_s17 (poly f, poly fk, int k, int ct) @expansion{} printresult (string f,string typ,int Mu,int m,int corank,int K) @expansion{} @expansion{} Internal functions for the classifcation by invariants: @expansion{} Cubic (poly f) @expansion{} parity (int e) //return the parity of e @expansion{} HKclass (intvec i) @expansion{} HKclass3( intvec i, string SG_Typ, int cnt) @expansion{} HKclass3_teil_1 (intvec i, string SG_Typ, int cnt) @expansion{} HKclass5 (intvec i, string SG_Typ, int cnt) @expansion{} HKclass5_teil_1 (intvec i, string SG_Typ, int cnt) @expansion{} HKclass5_teil_2 (intvec i, string SG_Typ, int cnt) @expansion{} HKclass7 (intvec i, string SG_Typ, int cnt) @expansion{} HKclass7_teil_1 (intvec i, string SG_Typ, int cnt) @expansion{} @expansion{} Internal functions for the Morse-splitting lemma: @expansion{} Morse(poly fi, int K, int corank) //splitting lemma itself @expansion{} Coeffs (list #) @expansion{} Coeff @expansion{} @expansion{} Internal functions providing tools: @expansion{} ReOrder(poly f) @expansion{} Singularitaet(string typ,int k,int r,int s,poly a,poly b,poly c,poly d) @expansion{} RandomPolyK @expansion{} Faktorisiere(poly f, poly g, int p, int k) compute g = (ax+by^k)^p @expansion{} Teile(poly f, poly g); //divides f by g @expansion{} GetRf(poly f, int n); @expansion{} Show(poly f); @expansion{} checkring(); @expansion{} DecodeNormalFormString(string s); @expansion{} Setring(int n, string ringname); @expansion{} @c end example internalfunctions d2t_singular/classify_lib.doc:227 @end smallexample @c ---end content internalfunctions--- @c ------------------- milnorcode ------------- @node milnorcode, morsesplit, internalfunctions, classify_lib @subsubsection milnorcode @cindex milnorcode @c ---content milnorcode--- Procedure from library @code{classify.lib} (@pxref{classify_lib}). @table @asis @item @strong{Usage:} milnorcode(f[,e]); f=poly, e=int @item @strong{Return:} intvec, coding the Hilbert function of the e-th Milnor algebra of f, i.e. of basering/(jacob(f)^e) (default e=1), according to proc Hcode @end table @strong{Example:} @smallexample @c computed example milnorcode d2t_singular/classify_lib.doc:253 LIB "classify.lib"; ring r=0,(x,y,z),ds; poly f=x2y+y3+z2; milnorcode(f); @expansion{} 1,1,1 milnorcode(f,2); // a big second argument may result in memory overflow @expansion{} 1,0,1,0,2,0,0,1,0 @c end example milnorcode d2t_singular/classify_lib.doc:253 @end smallexample @c ---end content milnorcode--- @c ------------------- morsesplit ------------- @node morsesplit, quickclass, milnorcode, classify_lib @subsubsection morsesplit @cindex morsesplit @c ---content morsesplit--- Procedure from library @code{classify.lib} (@pxref{classify_lib}). @table @asis @item @strong{Usage:} morsesplit(f); f=poly @item @strong{Return:} Normal form of f in M^3 after application of the splitting lemma @item @strong{Compute:} apply the splitting lemma (generalized Morse lemma) to f @end table @strong{Example:} @smallexample @c computed example morsesplit d2t_singular/classify_lib.doc:283 LIB "classify.lib"; ring r=0,(x,y,z),ds; export r; @expansion{} // ** `r` is already global init_debug(1); @expansion{} Debugging level is set to 1 poly f=(x2+3y-2z)^2+xyz-(x-y3+x2*z3)^3; poly g=morsesplit(f); @expansion{} Residual singularity f= -x3+3/2xy2+1/2x3y-1/16x2y2+3x2y3 g; @expansion{} -x3+3/2xy2+1/2x3y-1/16x2y2+3x2y3 @c end example morsesplit d2t_singular/classify_lib.doc:283 @end smallexample @c ---end content morsesplit--- @c ------------------- quickclass ------------- @node quickclass, singularity, morsesplit, classify_lib @subsubsection quickclass @cindex quickclass @c ---content quickclass--- Procedure from library @code{classify.lib} (@pxref{classify_lib}). @table @asis @item @strong{Usage:} quickclass(f); f=poly @item @strong{Return:} Normal form of f in Arnold's list @item @strong{Remark:} try to determine the normal form of f by invariants, mainly by computing the Hilbert function of the Milnor algebra, no coordinate change is needed (see also proc 'milnorcode'). @end table @strong{Example:} @smallexample @c computed example quickclass d2t_singular/classify_lib.doc:317 LIB "classify.lib"; ring r=0,(x,y,z),ds; poly f=(x2+3y-2z)^2+xyz-(x-y3+x2*z3)^3; quickclass(f); @expansion{} Singularity R-equivalent to : D[k]=D[4] @expansion{} normal form : z2+x2y+y3 @expansion{} z2+x2y+y3 @c end example quickclass d2t_singular/classify_lib.doc:317 @end smallexample @c ---end content quickclass--- @c ------------------- singularity ------------- @node singularity, swap, quickclass, classify_lib @subsubsection singularity @cindex singularity @c ---content singularity--- Procedure from library @code{classify.lib} (@pxref{classify_lib}). @table @asis @item @strong{Usage:} singularity(t, l); t=string (name of singularity), @*l=list of integers/polynomials (indices/parameters of singularity) @item @strong{Compute:} get the singularity named by type t from the database. list l is as follows: @* l= k [,r [,s [,a [,b [,c [,d]..]: k,r,s=int a,b,c,d=poly. @* The name of the dbm-database file is: NFlist.[dir,pag]. The file is found in the current directory. If it does not exist, please run the script MakeDBM first. @item @strong{Return:} Normal form and corank of the singularity named by type t and its index (indices) l. @end table @strong{Example:} @smallexample @c computed example singularity d2t_singular/classify_lib.doc:353 LIB "classify.lib"; ring r=0,(x,y,z),(c,ds); init_debug(0); singularity("E[6k]",6); @expansion{} [1]: @expansion{} x3+xy13+y19 @expansion{} [2]: @expansion{} 2 singularity("T[k,r,s]", 3, 7, 5); @expansion{} [1]: @expansion{} x3+xyz+z5+y7 @expansion{} [2]: @expansion{} 3 poly f=y; singularity("J[k,r]", 4, 0, 0, f); @expansion{} [1]: @expansion{} x3+x2y4+y13 @expansion{} [2]: @expansion{} 2 @c end example singularity d2t_singular/classify_lib.doc:353 @end smallexample @c ---end content singularity--- @c ------------------- swap ------------- @node swap, A_L, singularity, classify_lib @subsubsection swap @cindex swap @c ---content swap--- Procedure from library @code{classify.lib} (@pxref{classify_lib}). @table @asis @item @strong{Usage:} swap(a,b); @item @strong{Return:} b,a if b,a is the input (any type) @end table @strong{Example:} @smallexample @c computed example swap d2t_singular/classify_lib.doc:382 LIB "classify.lib"; swap("variable1","variable2"); @expansion{} variable2 variable1 @c end example swap d2t_singular/classify_lib.doc:382 @end smallexample @c ---end content swap--- @c ------------------- A_L ------------- @node A_L, normalform, swap, classify_lib @subsubsection A_L @cindex A_L @c ---content A_L--- Procedure from library @code{classify.lib} (@pxref{classify_lib}). @table @asis @item @strong{Usage:} A_L(f); f poly @*A_L(s); s string, the name of the singularity @item @strong{Compute:} the normal form of f in Arnold's list of singularities in case 1, in case 2 nothing has to be computed. @item @strong{Return:} A_L(f): compute via 'milnorcode' the class of f and return the normal form of f found in the database. @*A_L("name"): get the normal form from the database for the singularity given by its name. @end table @strong{Example:} @smallexample @c computed example A_L d2t_singular/classify_lib.doc:414 LIB "classify.lib"; ring r=0,(a,b,c),ds; poly f=A_L("E[13]"); f; @expansion{} c2+a3+ab5+b8 A_L(f); @expansion{} Singularity R-equivalent to : E[6k+1]=E[13] @expansion{} normal form : c2+a3+ab5+b8 @expansion{} c2+a3+ab5+b8 @c end example A_L d2t_singular/classify_lib.doc:414 @end smallexample @c ---end content A_L--- @c ------------------- normalform ------------- @node normalform, debug_log, A_L, classify_lib @subsubsection normalform @cindex normalform @c ---content normalform--- Procedure from library @code{classify.lib} (@pxref{classify_lib}). @table @asis @item @strong{Usage:} normalform(s); s=string @item @strong{Return:} Arnold's normal form of singularity with name s @end table @strong{Example:} @smallexample @c computed example normalform d2t_singular/classify_lib.doc:441 LIB "classify.lib"; ring r=0,(a,b,c),ds; normalform("E[13]"); @expansion{} c2+a3+ab5+b8 @c end example normalform d2t_singular/classify_lib.doc:441 @end smallexample @c ---end content normalform--- @c ------------------- debug_log ------------- @node debug_log,, normalform, classify_lib @subsubsection debug_log @cindex debug_log @c ---content debug_log--- Procedure from library @code{classify.lib} (@pxref{classify_lib}). @table @asis @item @strong{Usage:} debug_log(level,li); level=int, li=comma separated "message" list @item @strong{Compute:} print "messages" if level>=@@DeBug. @*useful for user-defined trace messages. @end table @strong{Example:} @smallexample @c computed example debug_log d2t_singular/classify_lib.doc:467 LIB "classify.lib"; example init_debug; @expansion{} // proc init_debug from lib classify.lib @expansion{} EXAMPLE: @expansion{} init_debug(); @expansion{} debug_log(1,"no trace information printed"); @expansion{} init_debug(1); @expansion{} Debugging level change from 0 to 1 @expansion{} debug_log(1,"some trace information"); @expansion{} some trace information @expansion{} init_debug(2); @expansion{} Debugging level change from 1 to 2 @expansion{} debug_log(2,"nice for debugging scripts"); @expansion{} Debug:(2): nice for debugging scripts @expansion{} init_debug(0); @expansion{} Debugging switched off. @expansion{} @c end example debug_log d2t_singular/classify_lib.doc:467 @end smallexample @c inserted refs from d2t_singular/classify_lib.doc:472 @ifinfo @menu See also: * init_debug:: @end menu @end ifinfo @iftex @strong{See also:} @ref{init_debug}. @end iftex @c end inserted refs from d2t_singular/classify_lib.doc:472 @c ---end content debug_log--- texi2html-1.82/test/singular_manual/d2t_singular/primitiv_lib.tex0000644000175000017500000001647511264347126027223 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/primitiv_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/primitiv_lib.doc INSTEAD @c library version: (1.15,2001/02/05) @c library file: ../Singular/LIB/primitiv.lib @cindex primitiv.lib @cindex primitiv_lib @table @asis @item @strong{Library:} primitiv.lib @item @strong{Purpose:} Computing a Primitive Element @item @strong{Author:} Martin Lamm, email: lamm@@mathematik.uni-kl.de @end table @strong{Procedures:} @menu * primitive:: find minimal polynomial for a primitive element * primitive_extra:: find primitive element for two generators * splitring:: define ring extension with name R and switch to it @end menu @c ---end content LibInfo--- @c ------------------- primitive ------------- @node primitive, primitive_extra,, primitiv_lib @subsubsection primitive @cindex primitive @c ---content primitive--- Procedure from library @code{primitiv.lib} (@pxref{primitiv_lib}). @table @asis @item @strong{Usage:} primitive(i); i ideal @item @strong{Assume:} i is given by generators m[1],...,m[n] such that for j=1,...,n @* - m[j] is a polynomial in k[x(1),...,x(j)] @* - m[j](a[1],...,a[j-1],x(j)) is the minimal polynomial for a[j] over k(a[1],...,a[j-1]) @* (k the ground field of the current basering and x(1),...,x(n) the ring variables). @item @strong{Return:} ideal j in k[x(n)] with @*- j[1] a minimal polynomial for a primitive element b of k(a[1],...,a[n]) over k, @*- j[2],...,j[n+1] polynomials in k[x(n)] such that j[i+1](b)=a[i] for i=1,...,n. @item @strong{Note:} the number of variables in the basering has to be exactly n, the number of given generators (i.e., minimal polynomials).@* If the ground field k has only a few elements it may happen that no linear combination of a[1],...,a[n] is a primitive element. In this case @code{primitive(i)} returns the zero ideal, and one should use @code{primitive_extra(i)} instead. @cindex primitive element @end table @strong{Example:} @smallexample @c computed example primitive d2t_singular/primitiv_lib.doc:62 LIB "primitiv.lib"; ring exring=0,(x,y),dp; ideal i=x2+1,y2-x; // compute Q(i,i^(1/2))=:L ideal j=primitive(i); j[1]; // L=Q(a) with a=(-1)^(1/4) @expansion{} y4+1 j[2]; // i=a^2 @expansion{} y2 j[3]; // i^(1/2)=a @expansion{} y // the 2nd element was already primitive! j=primitive(ideal(x2-2,y2-3)); // compute Q(sqrt(2),sqrt(3)) j[1]; @expansion{} y4-10y2+1 j[2]; @expansion{} 1/2y3-9/2y j[3]; @expansion{} -1/2y3+11/2y // no element was primitive -- the calculation of primitive elements // is based on a random choice. @c end example primitive d2t_singular/primitiv_lib.doc:62 @end smallexample @c inserted refs from d2t_singular/primitiv_lib.doc:79 @ifinfo @menu See also: * primitive_extra:: @end menu @end ifinfo @iftex @strong{See also:} @ref{primitive_extra}. @end iftex @c end inserted refs from d2t_singular/primitiv_lib.doc:79 @c ---end content primitive--- @c ------------------- primitive_extra ------------- @node primitive_extra, splitring, primitive, primitiv_lib @subsubsection primitive_extra @cindex primitive_extra @c ---content primitive_extra--- Procedure from library @code{primitiv.lib} (@pxref{primitiv_lib}). @table @asis @item @strong{Usage:} primitive_extra(i); i ideal @item @strong{Assume:} The ground field of the basering is k=Q or k=Z/pZ and the ideal i is given by 2 generators f,g with the following properties: @format f is the minimal polynomial of a in k[x], g is a polynomial in k[x,y] s.th. g(a,y) is the minpoly of b in k(a)[y]. @end format Here, x is the name of the first ring variable, y the name of the second. @item @strong{Return:} ideal j in k[y] such that @format j[1] is the minimal polynomial for a primitive element c of k(a,b) over k, j[2] is a polynomial s.th. j[2](c)=a. @end format @item @strong{Note:} While @code{primitive(i)} may fail for finite fields, @code{primitive_extra(i)} tries all elements of k(a,b) and, hence, always finds a primitive element. @* In order to do this (try all elements), field extensions like Z/pZ(a) are not allowed for the ground field k. @* @code{primitive_extra(i)} assumes that the second generator, g, is monic as polynomial in (k[x])[y]. @end table @strong{Example:} @smallexample @c computed example primitive_extra d2t_singular/primitiv_lib.doc:125 LIB "primitiv.lib"; ring exring=3,(x,y),dp; ideal i=x2+1,y3+y2-1; primitive_extra(i); @expansion{} _[1]=y6-y5+y4-y3-y-1 @expansion{} _[2]=y5+y4+y2+y+1 ring extension=(3,y),x,dp; minpoly=y6-y5+y4-y3-y-1; number a=y5+y4+y2+y+1; a^2; @expansion{} -1 factorize(x2+1); @expansion{} [1]: @expansion{} _[1]=1 @expansion{} _[2]=x+(-y5-y4-y2-y-1) @expansion{} _[3]=x+(y5+y4+y2+y+1) @expansion{} [2]: @expansion{} 1,1,1 factorize(x3+x2-1); @expansion{} [1]: @expansion{} _[1]=1 @expansion{} _[2]=x+(-y5-y4-y3-y2-y-1) @expansion{} _[3]=x+(y5+y4+y2+1) @expansion{} _[4]=x+(y3+y+1) @expansion{} [2]: @expansion{} 1,1,1,1 @c end example primitive_extra d2t_singular/primitiv_lib.doc:125 @end smallexample @c ---end content primitive_extra--- @c ------------------- splitring ------------- @node splitring,, primitive_extra, primitiv_lib @subsubsection splitring @cindex splitring @c ---content splitring--- Procedure from library @code{primitiv.lib} (@pxref{primitiv_lib}). @table @asis @item @strong{Usage:} splitring(f,R[,L]); f poly, R string, L list of polys and/or ideals (optional) @item @strong{Assume:} f is univariate and irreducible over the active basering. @* The active ring must allow an algebraic extension (e.g., it cannot be a transcendent ring extension of Q or Z/p). @item @strong{Create:} a ring with name R, in which f is reducible, and CHANGE to it. @item @strong{Return:} list L mapped into the new ring R, if L is given; else nothing @item @strong{Note:} If the old ring has no parameter, the name @code{a} is chosen for the parameter of R (if @code{a} is no ring variable; if it is, @code{b} is chosen, etc.; if @code{a,b,c,o} are ring variables, @code{splitring(f,R[,L])} produces an error message), otherwise the name of the parameter is kept and only the minimal polynomial is changed. @* The names of the ring variables and the orderings are not affected. @* It is also allowed to call @code{splitring} with R="". Then the old basering will be REPLACED by the new ring (with the same name as the old ring). @cindex algebraic field extension @cindex extension of rings @end table @strong{Example:} @smallexample @c computed example splitring d2t_singular/primitiv_lib.doc:180 LIB "primitiv.lib"; ring r=0,(x,y),dp; splitring(x2-2,"r1"); // change to Q(sqrt(2)) // change to Q(sqrt(2),sqrt(sqrt(2)))=Q(a) and return the transformed // old parameter: splitring(x2-a,"r2",a); @expansion{} // new minimal polynomial: a4-2 @expansion{} [1]: @expansion{} (a2) // the result is (a)^2 = (sqrt(sqrt(2)))^2 nameof(basering); @expansion{} r2 r2; @expansion{} // characteristic : 0 @expansion{} // 1 parameter : a @expansion{} // minpoly : (a4-2) @expansion{} // number of vars : 2 @expansion{} // block 1 : ordering dp @expansion{} // : names x y @expansion{} // block 2 : ordering C kill r1; kill r2; @c end example splitring d2t_singular/primitiv_lib.doc:180 @end smallexample @c ---end content splitring--- texi2html-1.82/test/singular_manual/d2t_singular/inout_lib.tex0000644000175000017500000003725411264347126026514 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/inout_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/inout_lib.doc INSTEAD @c library version: (1.21.2.5,2002/06/12) @c library file: ../Singular/LIB/inout.lib @cindex inout.lib @cindex inout_lib @table @asis @item @strong{Library:} inout.lib @item @strong{Purpose:} Printing and Manipulating In- and Output @end table @strong{Procedures:} @menu * allprint:: print list if ALLprint is defined, with pause if >0 * lprint:: display poly/... fitting to pagewidth [size n] * pmat:: print form-matrix [first n chars of each column] * rMacaulay:: read Macaulay_1 output and return its Singular format * show:: display any object in a compact format * showrecursive:: display id recursively with respect to variables in p * split:: split given string into lines of length n * tab:: string of n space tabs * writelist:: write a list into a file and keep the list structure * pause:: stop the computation until user input @end menu @c ---end content LibInfo--- @c ------------------- allprint ------------- @node allprint, lprint,, inout_lib @subsubsection allprint @cindex allprint @c ---content allprint--- Procedure from library @code{inout.lib} (@pxref{inout_lib}). @table @asis @item @strong{Usage:} allprint(L); L list @item @strong{Display:} prints L[1], L[2], ... if an integer with name ALLprint is defined. @* makes "pause", if ALLprint > 0 @* listvar(matrix), if ALLprint = 2 @item @strong{Return:} no return value @end table @strong{Example:} @smallexample @c computed example allprint d2t_singular/inout_lib.doc:51 LIB "inout.lib"; ring S; matrix M=matrix(freemodule(2),3,3); int ALLprint; export ALLprint; @expansion{} // ** `ALLprint` is already global allprint("M =",M); @expansion{} M = @expansion{} 1,0,0, @expansion{} 0,1,0, @expansion{} 0,0,0 kill ALLprint; @c end example allprint d2t_singular/inout_lib.doc:51 @end smallexample @c ---end content allprint--- @c ------------------- lprint ------------- @node lprint, pmat, allprint, inout_lib @subsubsection lprint @cindex lprint @c ---content lprint--- Procedure from library @code{inout.lib} (@pxref{inout_lib}). @table @asis @item @strong{Usage:} lprint(id[,n]); id poly/ideal/vector/module/matrix, n integer @item @strong{Return:} string of id in a format fitting into lines of size n, such that no monomial is destroyed, i.e. the new line starts with + or -; (default: n = pagewidth). @item @strong{Note:} id is printed columnwise, each column separated by a blank line; hence lprint(transpose(id)); displays a matrix id in a format which can be used as input. @end table @strong{Example:} @smallexample @c computed example lprint d2t_singular/inout_lib.doc:86 LIB "inout.lib"; ring r= 0,(x,y,z),ds; poly f=((x+y)*(x-y)*(x+z)*(y+z)^2); lprint(f,40); @expansion{} x3y2-xy4+2x3yz+x2y2z-2xy3z-y4z+x3z2 @expansion{} +2x2yz2-xy2z2-2y3z2+x2z3-y2z3 module m = [f*(x-y)],[0,f*(x-y)]; string s=lprint(m); s;""; @expansion{} x4y2-x3y3-x2y4+xy5+2x4yz-x3y2z-3x2y3z+xy4z+y5z+x4z2+x3yz2-3x2y2z2-xy3z2 @expansion{} +2y4z2+x3z3-x2yz3-xy2z3+y3z3, @expansion{} 0, @expansion{} @expansion{} 0, @expansion{} x4y2-x3y3-x2y4+xy5+2x4yz-x3y2z-3x2y3z+xy4z+y5z+x4z2+x3yz2-3x2y2z2-xy3z2 @expansion{} +2y4z2+x3z3-x2yz3-xy2z3+y3z3 @expansion{} execute("matrix M[2][2]="+s+";"); //use the string s as input module m1 = transpose(M); //should be the same as m print(m-m1); @expansion{} 0,0, @expansion{} 0,0 @c end example lprint d2t_singular/inout_lib.doc:86 @end smallexample @c ---end content lprint--- @c ------------------- pmat ------------- @node pmat, rMacaulay, lprint, inout_lib @subsubsection pmat @cindex pmat @c ---content pmat--- Procedure from library @code{inout.lib} (@pxref{inout_lib}). @table @asis @item @strong{Usage:} pmat(M,[n]); M matrix, n integer @item @strong{Display:} display M in array format if it fits into pagewidth; if n is given, only the first n characters of each column are shown @item @strong{Return:} no return value @end table @strong{Example:} @smallexample @c computed example pmat d2t_singular/inout_lib.doc:121 LIB "inout.lib"; ring r=0,(x,y,z),ls; ideal i= x,z+3y,x+y,z; matrix m[3][3]=i^2; pmat(m); @expansion{} x2, xz+3xy, xy+x2, @expansion{} xz, z2+6yz+9y2, yz+3y2+xz+3xy, @expansion{} z2+3yz, y2+2xy+x2, yz+xz pmat(m,3); @expansion{} x2 xz+ xy+ @expansion{} xz z2+ yz+ @expansion{} z2+ y2+ yz+ @c end example pmat d2t_singular/inout_lib.doc:121 @end smallexample @c ---end content pmat--- @c ------------------- rMacaulay ------------- @node rMacaulay, show, pmat, inout_lib @subsubsection rMacaulay @cindex rMacaulay @c ---content rMacaulay--- Procedure from library @code{inout.lib} (@pxref{inout_lib}). @table @asis @item @strong{Usage:} rMacaulay(s[,n]); s string, n integer @item @strong{Return:} A string which should be readable by Singular if s is a string which was produced by Macaulay. If a second argument is present the first n lines of the file are deleted (which is useful if the file was produced e.g. by the putstd command of Macaulay). @item @strong{Note:} This does not always work with 'cut and paste' since the character \ is treated differently @end table @strong{Example:} @smallexample @c computed example rMacaulay d2t_singular/inout_lib.doc:156 LIB "inout.lib"; // Assume there exists a file 'Macid' with the following ideal in // Macaulay format:" // x[0]3-101/74x[0]2x[1]+7371x[0]x[1]2-13/83x[1]3-x[0]2x[2] \ // -4/71x[0]x[1]x[2] // Read this file into Singular and assign it to the string s1 by: // string s1 = read("Macid"); // This is equivalent to"; string s1 = "x[0]3-101/74x[0]2x[1]+7371x[0]x[1]2-13/83x[1]3-x[0]2x[2]-4/71x[0]x[1]x[2]"; rMacaulay(s1); @expansion{} x(0)^3-101/74*x(0)^2*x(1)+7371*x(0)*x(1)^2-13/83*x(1)^3-x(0)^2*x(2)-4/71*\ x(0)*x(1)*x(2) // You may wish to assign s1 to a Singular ideal id: string sid = "ideal id =",rMacaulay(s1),";"; ring r = 0,x(0..3),dp; execute(sid); id; ""; @expansion{} id[1]=x(0)^3-101/74*x(0)^2*x(1)+7371*x(0)*x(1)^2-13/83*x(1)^3-x(0)^2*x(2)\ -4/71*x(0)*x(1)*x(2) @expansion{} // Now treat a matrix in Macaulay format. Using the execute // command, this could be assinged to a Singular matrix as above. string s2 = " 0 0 0 0 0 a3 0 0 0 0 0 b3 0 0 0 0 0 c3 0 0 0 0 0 d3 0 0 0 0 0 e3 "; rMacaulay(s2); @expansion{} 0, 0, 0, 0, 0, @expansion{} a3,0, 0, 0, 0, @expansion{} 0, b3,0, 0, 0, @expansion{} 0, 0, c3,0, 0, @expansion{} 0, 0, 0, d3,0, @expansion{} 0, 0, 0, 0, e3 @c end example rMacaulay d2t_singular/inout_lib.doc:156 @end smallexample @c ---end content rMacaulay--- @c ------------------- show ------------- @node show, showrecursive, rMacaulay, inout_lib @subsubsection show @cindex show @c ---content show--- Procedure from library @code{inout.lib} (@pxref{inout_lib}). @table @asis @item @strong{Usage:} show(id); id any object of basering or of type ring/qring @* show(R,s); R=ring, s=string (s = name of an object belonging to R) @item @strong{Display:} display id/s in a compact format together with some information @item @strong{Return:} no return value @item @strong{Note:} objects of type string, int, intvec, intmat belong to any ring. id may be a ring or a qring. In this case the minimal polynomial is displayed, and, for a qring, also the defining ideal. @*id may be of type list but the list must not contain a ring. @* show(R,s) does not work inside a procedure! @end table @strong{Example:} @smallexample @c computed example show d2t_singular/inout_lib.doc:215 LIB "inout.lib"; ring r; show(r); @expansion{} // ring: (32003),(x,y,z),(dp(3),C); @expansion{} // minpoly = 0 @expansion{} // objects belonging to this ring: ideal i=x^3+y^5-6*z^3,xy,x3-y2; show(i,3); // introduce 3 space tabs before information @expansion{} // ideal, 3 generator(s) @expansion{} y5+x3-6z3, @expansion{} xy, @expansion{} x3-y2 vector v=x*gen(1)+y*gen(3); module m=v,2*v+gen(4); list L = i,v,m; show(L); @expansion{} // list, 3 element(s): @expansion{} [1]: @expansion{} // ideal, 3 generator(s) @expansion{} y5+x3-6z3, @expansion{} xy, @expansion{} x3-y2 @expansion{} [2]: @expansion{} // vector @expansion{} [x,0,y] @expansion{} [3]: @expansion{} // module, 2 generator(s) @expansion{} [x,0,y] @expansion{} [2x,0,2y,1] ring S=(0,T),(a,b,c,d),ws(1,2,3,4); minpoly = T^2+1; ideal i=a2+b,c2+T^2*d2; i=std(i); qring Q=i; show(Q); @expansion{} // qring: (0,T),(a,b,c,d),(ws(1,2,3,4),C); @expansion{} // minpoly = (T2+1) @expansion{} // quotient ring from ideal: @expansion{} _[1]=a2+b @expansion{} _[2]=c2-d2 map F=r,a2,b^2,3*c3; show(F); @expansion{} // i-th variable of preimage ring is mapped to @@map[i] @expansion{} // @@map [1] map from r @expansion{} @@map[1]=a2 @expansion{} @@map[2]=b2 @expansion{} @@map[3]=3*c3 // Apply 'show' to i (which does not belong to the basering) by typing // ring r; ideal i=xy,x3-y2; ring Q; show(r,"i"); @c end example show d2t_singular/inout_lib.doc:215 @end smallexample @c ---end content show--- @c ------------------- showrecursive ------------- @node showrecursive, split, show, inout_lib @subsubsection showrecursive @cindex showrecursive @c ---content showrecursive--- Procedure from library @code{inout.lib} (@pxref{inout_lib}). @table @asis @item @strong{Usage:} showrecursive(id,p[ord]); id= any object of basering, p= product of variables and ord=string (any allowed ordstr) @item @strong{Display:} display 'id' in a recursive format as a polynomial in the variables occurring in p with coefficients in the remaining variables. This is done by mapping to a ring with parameters [and ordering 'ord', if a 3rd argument is present (default: ord="dp")] and applying procedure 'show' @item @strong{Return:} no return value @end table @strong{Example:} @smallexample @c computed example showrecursive d2t_singular/inout_lib.doc:263 LIB "inout.lib"; ring r=2,(a,b,c,d,x,y),ds; poly f=y+ax2+bx3+cx2y2+dxy3; showrecursive(f,x); @expansion{} // poly, 4 monomial(s) @expansion{} (b)*x3+(a+cy2)*x2+(dy3)*x+(y) showrecursive(f,xy,"lp"); @expansion{} // poly, 5 monomial(s) @expansion{} (b)*x3+(c)*x2y2+(a)*x2+(d)*xy3+y @c end example showrecursive d2t_singular/inout_lib.doc:263 @end smallexample @c ---end content showrecursive--- @c ------------------- split ------------- @node split, tab, showrecursive, inout_lib @subsubsection split @cindex split @c ---content split--- Procedure from library @code{inout.lib} (@pxref{inout_lib}). @table @asis @item @strong{Usage:} split(s[,n]); s string, n integer @item @strong{Return:} same string, split into lines of length n separated by \ (default: n=pagewidth) @item @strong{Note:} may be used in connection with lprint @end table @strong{Example:} @smallexample @c computed example split d2t_singular/inout_lib.doc:294 LIB "inout.lib"; ring r= 0,(x,y,z),ds; poly f = (x+y+z)^4; split(string(f),50); @expansion{} x4+4x3y+6x2y2+4xy3+y4+4x3z+12x2yz+12xy2z+4y3z+6x\ @expansion{} 2z2+12xyz2+6y2z2+4xz3+4yz3+z4 split(lprint(f)); @expansion{} x4+4x3y+6x2y2+4xy3+y4+4x3z+12x2yz+12xy2z+4y3z+6x2z2+12xyz2+6y2z2+4xz3+4\ yz3\ @expansion{} +z4 @c end example split d2t_singular/inout_lib.doc:294 @end smallexample @c ---end content split--- @c ------------------- tab ------------- @node tab, writelist, split, inout_lib @subsubsection tab @cindex tab @c ---content tab--- Procedure from library @code{inout.lib} (@pxref{inout_lib}). @table @asis @item @strong{Usage:} tab(n); n integer @item @strong{Return:} string of n space tabs @end table @strong{Example:} @smallexample @c computed example tab d2t_singular/inout_lib.doc:321 LIB "inout.lib"; for(int n=0; n<=5; n=n+1) @{ tab(5-n)+"*"+tab(n)+"+"+tab(n)+"*"; @} @expansion{} *+* @expansion{} * + * @expansion{} * + * @expansion{} * + * @expansion{} * + * @expansion{} * + * @c end example tab d2t_singular/inout_lib.doc:321 @end smallexample @c ---end content tab--- @c ------------------- writelist ------------- @node writelist, pause, tab, inout_lib @subsubsection writelist @cindex writelist @c ---content writelist--- Procedure from library @code{inout.lib} (@pxref{inout_lib}). @table @asis @item @strong{Usage:} writelist(file,name,L); file,name strings (file-name, list-name), L a list. @item @strong{Create:} a file with name `file`, write the content of the list L into it and call the list `name`, keeping the list structure @item @strong{Return:} no return value @item @strong{Note:} The syntax of writelist uses and is similar to the syntax of the write command of Singular which does not manage lists properly. If (file,name) = ("listfile","L1"), writelist creates (resp. appends if listfile exists) a file with name listfile and stores there the list L under the name L1. The Singular command execute(read("listfile")); assigns the content of L (stored in listfile) to a list L1. @* On a UNIX system, write(">file",...) overwrites an existing file `file` while write("file",...) and write(">>file",...) append. @end table @strong{Example:} @smallexample @c computed example writelist d2t_singular/inout_lib.doc:362 LIB "inout.lib"; ring r; ideal i=x,y,z; list k="Hi",nameof(basering),i,37; writelist("zumSpass","lustig",k); read("zumSpass"); @expansion{} list lustig; @expansion{} lustig[1]= @expansion{} Hi; @expansion{} lustig[2]= @expansion{} r; @expansion{} lustig[3]= @expansion{} x,y,z; @expansion{} lustig[4]= @expansion{} 37; @expansion{} list L=res(i,0); //resolution of the ideal i writelist("res_list","res-name",L); ""; @expansion{} read("res_list"); @expansion{} list res-name; @expansion{} res-name[1]= @expansion{} z,y,x; @expansion{} res-name[2]= @expansion{} -y*gen(1)+z*gen(2),-x*gen(1)+z*gen(3),-x*gen(2)+y*gen(3); @expansion{} res-name[3]= @expansion{} x*gen(1)-y*gen(2)+z*gen(3); @expansion{} // execute(read("res_list")); would create a list with name res-name, // which is the resolution of i (the same content as L) system("sh","/bin/rm res_list zumSpass"); @expansion{} 0 // Under UNIX, this removes the files 'res_list' and 'zumSpass' // Type help system; to get more information about the shell escape // If your operating system does not accept the shell escape, you // must remove the just created files 'zumSpass' and 'res_list' directly @c end example writelist d2t_singular/inout_lib.doc:362 @end smallexample @c ---end content writelist--- @c ------------------- pause ------------- @node pause,, writelist, inout_lib @subsubsection pause @cindex pause @c ---content pause--- Procedure from library @code{inout.lib} (@pxref{inout_lib}). @table @asis @item @strong{Usage:} pause([ prompt ]) prompt string @item @strong{Return:} none @item @strong{Purpose:} interrupt the execution of commands until user input @item @strong{Note:} pause is useful in procedures in connection with printlevel to interrupt the computation and to display intermediate results. @end table @strong{Example:} @smallexample @c computed example pause d2t_singular/inout_lib.doc:407 LIB "inout.lib"; // can only be shown interactively, try the following commands: // pause("press to continue"); // pause(); // In the following pocedure TTT, xxx is printed and the execution of // TTT is stopped until the return-key is pressed, if printlevel>0. // xxx may be any result of a previous computation or a comment, etc: // // proc TTT // @{ int pp = printlevel-voice+2; //pp=0 if printlevel=0 and if TTT is // .... //not called from another procedure // if( pp>0 ) // @{ // print( xxx ); // pause("press to continue"); // @} // .... // @} @c end example pause d2t_singular/inout_lib.doc:407 @end smallexample @c inserted refs from d2t_singular/inout_lib.doc:428 @ifinfo @menu See also: * printlevel:: * read:: @end menu @end ifinfo @iftex @strong{See also:} @ref{printlevel}; @ref{read}. @end iftex @c end inserted refs from d2t_singular/inout_lib.doc:428 @c ---end content pause--- texi2html-1.82/test/singular_manual/d2t_singular/algebra_lib.tex0000644000175000017500000005523411264347126026751 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/algebra_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/algebra_lib.doc INSTEAD @c library version: (1.9.2.3,2002/04/11) @c library file: ../Singular/LIB/algebra.lib @cindex algebra.lib @cindex algebra_lib @table @asis @item @strong{Library:} algebra.lib @item @strong{Purpose:} Compute with Algebras and Algebra Maps @item @strong{Authors:} Gert-Martin Greuel, greuel@@mathematik.uni-kl.de, @* Agnes Eileen Heydtmann, agnes@@math.uni-sb.de, @* Gerhard Pfister, pfister@@mathematik.uni-kl.de @end table @strong{Procedures:} @menu * algebra_containment:: query of algebra containment * module_containment:: query of module containment over a subalgebra * inSubring:: test whether poly p is in subring generated by I * algDependent:: computes algebraic relations between generators of I * alg_kernel:: computes the kernel of the ring map phi * is_injective:: test for injectivity of ring map phi * is_surjective:: test for surjectivity of ring map phi * is_bijective:: test for bijectivity of ring map phi * noetherNormal:: noether normalization of ideal id * mapIsFinite:: query for finiteness of map phi:R --> basering/I * finitenessTest:: find variables which occur as pure power in lead(i) @end menu @c ---end content LibInfo--- @c ------------------- algebra_containment ------------- @node algebra_containment, module_containment,, algebra_lib @subsubsection algebra_containment @cindex algebra_containment @c ---content algebra_containment--- Procedure from library @code{algebra.lib} (@pxref{algebra_lib}). @table @asis @item @strong{Usage:} algebra_containment(p,A[,k]); p poly, A ideal, k integer. @* A = A[1],...,A[m] generators of subalgebra of the basering @item @strong{Return:} @format - k=0 (or if k is not given) an integer: 1 : if p is contained in the subalgebra K[A[1],...,A[m]] 0 : if p is not contained in K[A[1],...,A[m]] - k=1 : a list, say l, of size 2, l[1] integer, l[2] ring, satisfying l[1]=1 if p is in the subalgebra K[A[1],...,A[m]] and then the ring l[2] contains poly check = h(y(1),...,y(m)) if p=h(A[1],...,A[m]) l[1]=0 if p is in not the subalgebra K[A[1],...,A[m]] and then l[2] contains the poly check = h(x,y(1),...,y(m)) if p satisfies the nonlinear relation p = h(x,A[1],...,A[m]) where x = x(1),...,x(n) denote the variables of the basering @end format @item @strong{Display:} if k=0 and printlevel >= voice+1 (default) display the poly check @item @strong{Note:} The proc inSubring uses a different algorithm which is sometimes faster. @item @strong{Theory:} The ideal of algebraic relations of the algebra generators A[1],..., A[m] is computed introducing new variables y(i) and the product order with x(i) >> y(i). @*p reduces to a polynomial only in the y(i) <=> p is contained in the subring generated by the polynomials A[1],...,A[m]. @end table @strong{Example:} @smallexample @c computed example algebra_containment d2t_singular/algebra_lib.doc:77 LIB "algebra.lib"; int p = printlevel; printlevel = 1; ring R = 0,(x,y,z),dp; ideal A=x2+y2,z2,x4+y4,1,x2z-1y2z,xyz,x3y-1xy3; poly p1=z; poly p2= x10z3-x8y2z3+2x6y4z3-2x4y6z3+x2y8z3-y10z3+x6z4+3x4y2z4+3x2y4z4+y6z4; algebra_containment(p1,A); @expansion{} // x(3) @expansion{} 0 algebra_containment(p2,A); @expansion{} // y(1)*y(2)*y(5)^2+y(3)*y(5)^3+4*y(1)*y(2)*y(6)^2+4*y(6)^3*y(7)+2*y(2)*y\ (5)*y(7)^2 @expansion{} 1 list L = algebra_containment(p2,A,1); @expansion{} @expansion{} // 'algebra_containment' created a ring as 2nd element of the list. @expansion{} // The ring contains the poly check which defines the algebraic relation. @expansion{} // To access to the ring and see check you must give the ring a name, @expansion{} // e.g.: @expansion{} def S = l[2]; setring S; check; @expansion{} L[1]; @expansion{} 1 def S = L[2]; setring S; check; @expansion{} y(1)*y(2)*y(5)^2+y(3)*y(5)^3+4*y(1)*y(2)*y(6)^2+4*y(6)^3*y(7)+2*y(2)*y(5)\ *y(7)^2 printlevel = p; @c end example algebra_containment d2t_singular/algebra_lib.doc:77 @end smallexample @c ---end content algebra_containment--- @c ------------------- module_containment ------------- @node module_containment, inSubring, algebra_containment, algebra_lib @subsubsection module_containment @cindex module_containment @c ---content module_containment--- Procedure from library @code{algebra.lib} (@pxref{algebra_lib}). @table @asis @item @strong{Usage:} module_containment(p,P,M[,k]); p poly, P ideal, M ideal, k int @* P = P[1],...,P[n] generators of a subalgebra of the basering, @* M = M[1],...,M[m] generators of a module over the subalgebra K[P] @item @strong{Assume:} ncols(P) = nvars(basering), the P[i] are algebraically independent @item @strong{Return:} @format - k=0 (or if k is not given), an integer: 1 : if p is contained in the module over K[P] 0 : if p is not contained in - k=1, a list, say l, of size 2, l[1] integer, l[2] ring: l[1]=1 : if p is in and then the ring l[2] contains the polynomial check = h(y(1),...,y(m),z(1),...,z(n)) if p = h(M[1],...,M[m],P[1],...,P[n]) l[1]=0 : if p is in not in , then l[2] contains the poly check = h(x,y(1),...,y(m),z(1),...,z(n)) if p satisfies the nonlinear relation p = h(x,M[1],...,M[m],P[1],...,P[n]) where x = x(1),...,x(n) denote the variables of the basering @end format @item @strong{Display:} the polynomial h(y(1),...,y(m),z(1),...,z(n)) if k=0, resp. a comment how to access the relation check if k=1, provided printlevel >= voice+1 (default). @item @strong{Theory:} The ideal of algebraic relations of all the generators p1,...,pn, s1,...,st given by P and S is computed introducing new variables y(j), z(i) and the product order: x^a*y^b*z^c > x^d*y^e*z^f if x^a > x^d with respect to the lp ordering or else if z^c > z^f with respect to the dp ordering or else if y^b > y^e with respect to the lp ordering again. p reduces to a polynomial only in the y(j) and z(i), linear in the z(i) <=> p is contained in the module. @end table @strong{Example:} @smallexample @c computed example module_containment d2t_singular/algebra_lib.doc:144 LIB "algebra.lib"; int p = printlevel; printlevel = 1; ring R=0,(x,y,z),dp; ideal P = x2+y2,z2,x4+y4; //algebra generators ideal M = 1,x2z-1y2z,xyz,x3y-1xy3; //module generators poly p1= x10z3-x8y2z3+2x6y4z3-2x4y6z3+x2y8z3-y10z3+x6z4+3x4y2z4+3x2y4z4+y6z4; module_containment(p1,P,M); @expansion{} // y(2)*z(2)*z(3)^2+z(1)^3*z(2)^2 @expansion{} 1 poly p2=z; list l = module_containment(p2,P,M,1); @expansion{} @expansion{} // 'module_containment' created a ring as 2nd element of the list. The @expansion{} // ring contains the poly check which defines the algebraic relation @expansion{} // for p. To access to the ring and see check you must give the ring @expansion{} // a name, e.g.: @expansion{} def S = l[2]; setring S; check; @expansion{} l[1]; @expansion{} 0 def S = l[2]; setring S; check; @expansion{} x(3) printlevel=p; @c end example module_containment d2t_singular/algebra_lib.doc:144 @end smallexample @c ---end content module_containment--- @c ------------------- inSubring ------------- @node inSubring, algDependent, module_containment, algebra_lib @subsubsection inSubring @cindex inSubring @c ---content inSubring--- Procedure from library @code{algebra.lib} (@pxref{algebra_lib}). @table @asis @item @strong{Usage:} inSubring(p,i); p poly, i ideal @item @strong{Return:} @format a list l of size 2, l[1] integer, l[2] string l[1]=1 iff p is in the subring generated by i=i[1],...,i[k], and then l[2] = y(0)-h(y(1),...,y(k)) if p = h(i[1],...,i[k]) l[1]=0 iff p is in not the subring generated by i, and then l[2] = h(y(0),y(1),...,y(k) where p satisfies the nonlinear relation h(p,i[1],...,i[k])=0. @end format @item @strong{Note:} the proc algebra_containment tests the same with a different algorithm, which is often faster @end table @strong{Example:} @smallexample @c computed example inSubring d2t_singular/algebra_lib.doc:190 LIB "algebra.lib"; ring q=0,(x,y,z,u,v,w),dp; poly p=xyzu2w-1yzu2w2+u4w2-1xu2vw+u2vw2+xyz-1yzw+2u2w-1xv+vw+2; ideal I =x-w,u2w+1,yz-v; inSubring(p,I); @expansion{} [1]: @expansion{} 1 @expansion{} [2]: @expansion{} y(1)*y(2)*y(3)+y(2)^2-y(0)+1 @c end example inSubring d2t_singular/algebra_lib.doc:190 @end smallexample @c ---end content inSubring--- @c ------------------- algDependent ------------- @node algDependent, alg_kernel, inSubring, algebra_lib @subsubsection algDependent @cindex algDependent @c ---content algDependent--- Procedure from library @code{algebra.lib} (@pxref{algebra_lib}). @table @asis @item @strong{Usage:} algDependent(f[,c]); f ideal (say, f = f1,...,fm), c integer @item @strong{Return:} @format a list l of size 2, l[1] integer, l[2] ring: - l[1] = 1 if f1,...,fm are algebraic dependent, 0 if not - l[2] is a ring with variables x(1),...,x(n),y(1),...,y(m) if the basering has n variables. It contains the ideal 'ker', depending only on the y(i) and generating the algebraic relations between the f[i], i.e. substituting y(i) by fi yields 0. Of course, ker is nothing but the kernel of the ring map K[y(1),...,y(m)] ---> basering, y(i) --> fi. @end format @item @strong{Note:} Three different algorithms are used depending on c = 1,2,3. If c is not given or c=0, a heuristically best method is chosen. The basering may be a quotient ring. @*To access to the ring l[2] and see ker you must give the ring a name, e.g. def S=l[2]; setring S; ker; @item @strong{Display:} The above comment is displayed if printlevel >= 0 (default). @end table @strong{Example:} @smallexample @c computed example algDependent d2t_singular/algebra_lib.doc:236 LIB "algebra.lib"; int p = printlevel; printlevel = 1; ring R = 0,(x,y,z,u,v,w),dp; ideal I = xyzu2w-1yzu2w2+u4w2-1xu2vw+u2vw2+xyz-1yzw+2u2w-1xv+vw+2, x-w, u2w+1, yz-v; list l = algDependent(I); @expansion{} @expansion{} // The 2nd element of the list l is a ring with variables x(1),...,x(n), @expansion{} // and y(1),...,y(m) if the basering has n variables and if the ideal @expansion{} // is f[1],...,f[m]. The ring contains the ideal ker which depends only @expansion{} // on the y(i) and generates the relations between the f[i]. @expansion{} // I.e. substituting y(i) by f[i] yields 0. @expansion{} // To access to the ring and see ker you must give the ring a name, @expansion{} // e.g.: @expansion{} def S = l[2]; setring S; ker; @expansion{} l[1]; @expansion{} 1 def S = l[2]; setring S; ker; @expansion{} ker[1]=y(2)*y(3)*y(4)+y(3)^2-y(1)+1 printlevel = p; @c end example algDependent d2t_singular/algebra_lib.doc:236 @end smallexample @c ---end content algDependent--- @c ------------------- alg_kernel ------------- @node alg_kernel, is_injective, algDependent, algebra_lib @subsubsection alg_kernel @cindex alg_kernel @c ---content alg_kernel--- Procedure from library @code{algebra.lib} (@pxref{algebra_lib}). @table @asis @item @strong{Usage:} alg_kernel(phi,pr[,s,c]); phi map to basering, pr preimage ring, s string (name of kernel in pr), c integer. @item @strong{Return:} a string, the kernel of phi as string. @*If, moreover, a string s is given, the algorithm creates, in the preimage ring pr the kernel of phi with name s. @*Three different algorithms are used depending on c = 1,2,3. If c is not given or c=0, a heuristically best method is chosen. (algorithm 1 uses the preimage command) @item @strong{Note:} Since the kernel of phi lives in pr, it cannot be returned to the basering. If s is given, the user has access to it in pr via s. The basering may be a quotient ring. @end table @strong{Example:} @smallexample @c computed example alg_kernel d2t_singular/algebra_lib.doc:279 LIB "algebra.lib"; ring r = 0,(a,b,c),ds; ring s = 0,(x,y,z,u,v,w),dp; ideal I = x-w,u2w+1,yz-v; map phi = r,I; // a map from r to s: alg_kernel(phi,r); // a,b,c ---> x-w,u2w+1,yz-v @expansion{} 0 ring S = 0,(a,b,c),ds; ring R = 0,(x,y,z),dp; qring Q = std(x-y); ideal i = x, y, x2-y3; map phi = S,i; // a map to a quotient ring alg_kernel(phi,S,"ker",3); // uses algorithm 3 @expansion{} a-b,b^3-b^2+c setring S; // you have access to kernel in preimage ker; @expansion{} ker[1]=a-b @expansion{} ker[2]=c-b2+b3 @c end example alg_kernel d2t_singular/algebra_lib.doc:279 @end smallexample @c ---end content alg_kernel--- @c ------------------- is_injective ------------- @node is_injective, is_surjective, alg_kernel, algebra_lib @subsubsection is_injective @cindex is_injective @c ---content is_injective--- Procedure from library @code{algebra.lib} (@pxref{algebra_lib}). @table @asis @item @strong{Usage:} is_injective(phi,pr[,c,s]); phi map, pr preimage ring, c int, s string @item @strong{Return:} @format - 1 (type int) if phi is injective, 0 if not (if s is not given). - If s is given, return a list l of size 2, l[1] int, l[2] ring: l[1] is 1 if phi is injective, 0 if not l[2] is a ring with variables x(1),...,x(n),y(1),...,y(m) if the basering has n variables and the map m components, it contains the ideal 'ker', depending only on the y(i), the kernel of the given map @end format @item @strong{Note:} Three different algorithms are used depending on c = 1,2,3. If c is not given or c=0, a heuristically best method is chosen. The basering may be a quotient ring. However, if the preimage ring is a quotient ring, say pr = P/I, consider phi as a map from P and then the algorithm returns 1 if the kernel of phi is 0 mod I. To access to the ring l[2] and see ker you must give the ring a name, e.g. def S=l[2]; setring S; ker; @item @strong{Display:} The above comment is displayed if printlevel >= 0 (default). @end table @strong{Example:} @smallexample @c computed example is_injective d2t_singular/algebra_lib.doc:334 LIB "algebra.lib"; int p = printlevel; ring r = 0,(a,b,c),ds; ring s = 0,(x,y,z,u,v,w),dp; ideal I = x-w,u2w+1,yz-v; map phi = r,I; // a map from r to s: is_injective(phi,r); // a,b,c ---> x-w,u2w+1,yz-v @expansion{} 1 ring R = 0,(x,y,z),dp; ideal i = x, y, x2-y3; map phi = R,i; // a map from R to itself, z --> x2-y3 list l = is_injective(phi,R,""); @expansion{} @expansion{} // The 2nd element of the list is a ring with variables x(1),...,x(n), @expansion{} // y(1),...,y(m) if the basering has n variables and the map is @expansion{} // F[1],...,F[m]. @expansion{} // It contains the ideal ker, the kernel of the given map y(i) --> F[i]. @expansion{} // To access to the ring and see ker you must give the ring a name, @expansion{} // e.g.: @expansion{} def S = l[2]; setring S; ker; @expansion{} l[1]; @expansion{} 0 def S = l[2]; setring S; ker; @expansion{} ker[1]=y(2)^3-y(1)^2+y(3) @c end example is_injective d2t_singular/algebra_lib.doc:334 @end smallexample @c ---end content is_injective--- @c ------------------- is_surjective ------------- @node is_surjective, is_bijective, is_injective, algebra_lib @subsubsection is_surjective @cindex is_surjective @c ---content is_surjective--- Procedure from library @code{algebra.lib} (@pxref{algebra_lib}). @table @asis @item @strong{Usage:} is_surjective(phi); phi map to basering, or ideal defining it @item @strong{Return:} an integer, 1 if phi is surjective, 0 if not @item @strong{Note:} The algorithm returns 1 iff all the variables of the basering are contained in the polynomial subalgebra generated by the polynomials defining phi. Hence, if the basering has local or mixed ordering or if the preimage ring is a quotient ring (in which case the map may not be well defined) then the return value 1 means @*"surjectivity" in this sense. @end table @strong{Example:} @smallexample @c computed example is_surjective d2t_singular/algebra_lib.doc:378 LIB "algebra.lib"; ring R = 0,(x,y,z),dp; ideal i = x, y, x2-y3; map phi = R,i; // a map from R to itself, z->x2-y3 is_surjective(phi); @expansion{} 0 qring Q = std(ideal(z-x37)); map psi = R, x,y,x2-y3; // the same map to the quotient ring is_surjective(psi); @expansion{} 1 ring S = 0,(a,b,c),dp; map psi = R,ideal(a,a+b,c-a2+b3); // a map from R to S, is_surjective(psi); // x->a, y->a+b, z->c-a2+b3 @expansion{} 1 @c end example is_surjective d2t_singular/algebra_lib.doc:378 @end smallexample @c ---end content is_surjective--- @c ------------------- is_bijective ------------- @node is_bijective, noetherNormal, is_surjective, algebra_lib @subsubsection is_bijective @cindex is_bijective @c ---content is_bijective--- Procedure from library @code{algebra.lib} (@pxref{algebra_lib}). @table @asis @item @strong{Usage:} is_bijective(phi,pr); phi map to basering, pr preimage ring @item @strong{Return:} an integer, 1 if phi is bijective, 0 if not @item @strong{Note:} The algorithm checks first injectivity and then surjectivity To interpret this for local/mixed orderings, or for quotient rings type help is_surjective; and help is_injective; @item @strong{Display:} A comment if printlevel >= voice-1 (default) @end table @strong{Example:} @smallexample @c computed example is_bijective d2t_singular/algebra_lib.doc:419 LIB "algebra.lib"; int p = printlevel; printlevel = 1; ring R = 0,(x,y,z),dp; ideal i = x, y, x2-y3; map phi = R,i; // a map from R to itself, z->x2-y3 is_bijective(phi,R); @expansion{} // map not injective @expansion{} 0 qring Q = std(z-x2+y3); is_bijective(ideal(x,y,x2-y3),Q); @expansion{} 1 ring S = 0,(a,b,c,d),dp; map psi = R,ideal(a,a+b,c-a2+b3,0); // a map from R to S, is_bijective(psi,R); // x->a, y->a+b, z->c-a2+b3 @expansion{} // map injective, but not surjective @expansion{} 0 qring T = std(d,c-a2+b3); @expansion{} // ** _ is no standardbasis map chi = Q,a,b,a2-b3; // amap between two quotient rings is_bijective(chi,Q); @expansion{} 1 printlevel = p; @c end example is_bijective d2t_singular/algebra_lib.doc:419 @end smallexample @c ---end content is_bijective--- @c ------------------- noetherNormal ------------- @node noetherNormal, mapIsFinite, is_bijective, algebra_lib @subsubsection noetherNormal @cindex noetherNormal @c ---content noetherNormal--- Procedure from library @code{algebra.lib} (@pxref{algebra_lib}). @table @asis @item @strong{Usage:} noetherNormal(id[,p]); id ideal, p integer @item @strong{Return:} @format a list l two ideals, say I,J: - I is generated by a subset of the variables with size(I) = dim(id) - J defines a map (coordinate change in the basering), such that: if we define map phi=basering,J; then k[var(1),...,var(n)]/phi(id) is finite over k[I]. If p is given, 0<=p<=100, a sparse coordinate change with p percent of the matrix entries being 0 (default: p=0 i.e. dense) @end format @item @strong{Note:} Designed for characteristic 0.It works also in char k > 0 if it terminates,but may result in an infinite loop in small characteristic @end table @strong{Example:} @smallexample @c computed example noetherNormal d2t_singular/algebra_lib.doc:468 LIB "algebra.lib"; ring r=0,(x,y,z),dp; ideal i= xy,xz; noetherNormal(i); @expansion{} [1]: @expansion{} _[1]=x @expansion{} _[2]=2x+y @expansion{} _[3]=3x+4y+z @expansion{} [2]: @expansion{} _[1]=y @expansion{} _[2]=z @c end example noetherNormal d2t_singular/algebra_lib.doc:468 @end smallexample @c ---end content noetherNormal--- @c ------------------- mapIsFinite ------------- @node mapIsFinite, finitenessTest, noetherNormal, algebra_lib @subsubsection mapIsFinite @cindex mapIsFinite @c ---content mapIsFinite--- Procedure from library @code{algebra.lib} (@pxref{algebra_lib}). @table @asis @item @strong{Usage:} mapIsFinite(phi,R[,J]); R a ring, phi: R ---> basering a map J an ideal in the basering, J = 0 if not given @item @strong{Return:} 1 if R ---> basering/J is finite and 0 else @end table @strong{Example:} @smallexample @c computed example mapIsFinite d2t_singular/algebra_lib.doc:495 LIB "algebra.lib"; ring r = 0,(a,b,c),dp; ring s = 0,(x,y,z),dp; ideal i= xy; map phi= r,(xy)^3+x2+z,y2-1,z3; mapIsFinite(phi,r,i); @expansion{} 1 @c end example mapIsFinite d2t_singular/algebra_lib.doc:495 @end smallexample @c ---end content mapIsFinite--- @c ------------------- finitenessTest ------------- @node finitenessTest,, mapIsFinite, algebra_lib @subsubsection finitenessTest @cindex finitenessTest @c ---content finitenessTest--- Procedure from library @code{algebra.lib} (@pxref{algebra_lib}). @table @asis @item @strong{Usage:} finitenessTest(J[,v]); J ideal, v intvec (say v1,...,vr with vi>0) @item @strong{Return:} @format a list l with l[1] integer, l[2], l[3], l[4] ideals - l[1] = 1 if var(v1),...,var(vr) are in l[2] and 0 else - l[2] (resp. l[3]) contains those variables which occur, (resp. occur not) as pure power in the leading term of one of the generators of J, - l[4] contains those J[i] for which the leading term is a pure power of a variable (which is then in l[2]) (default: v = [1,2,..,nvars(basering)]) @end format @item @strong{Theory:} If J is a standard basis of an ideal generated by x_1 - f_1(y),..., x_n - f_n with y_j ordered lexicographically and y_j >> x_i, then, if y_i appears as pure power in the leading term of J[k]. J[k] defines an integral relation for y_i over the y_(i+1),... and the f's. Moreover, in this situation, if l[2] = y_1,...,y_r, then K[y_1,...y_r] is finite over K[f_1..f_n]. If J contains furthermore polynomials h_j(y), then K[y_1,...y_z]/ is finite over K[f_1..f_n]. @end table @strong{Example:} @smallexample @c computed example finitenessTest d2t_singular/algebra_lib.doc:541 LIB "algebra.lib"; ring s = 0,(x,y,z,a,b,c),(lp(3),dp); ideal i= a -(xy)^3+x2-z, b -y2-1, c -z3; ideal j = a -(xy)^3+x2-z, b -y2-1, c -z3, xy; finitenessTest(std(i),1..3); @expansion{} [1]: @expansion{} 0 @expansion{} [2]: @expansion{} _[1]=y @expansion{} _[2]=z @expansion{} [3]: @expansion{} _[1]=x @expansion{} _[2]=a @expansion{} _[3]=b @expansion{} _[4]=c @expansion{} [4]: @expansion{} _[1]=z3-c @expansion{} _[2]=y2-b+1 finitenessTest(std(j),1..3); @expansion{} [1]: @expansion{} 1 @expansion{} [2]: @expansion{} _[1]=x @expansion{} _[2]=y @expansion{} _[3]=z @expansion{} [3]: @expansion{} _[1]=a @expansion{} _[2]=b @expansion{} _[3]=c @expansion{} [4]: @expansion{} _[1]=z3-c @expansion{} _[2]=y2-b+1 @expansion{} _[3]=x2-z+a @c end example finitenessTest d2t_singular/algebra_lib.doc:541 @end smallexample @c ---end content finitenessTest--- texi2html-1.82/test/singular_manual/d2t_singular/finvar_lib.tex0000644000175000017500000017110511264347126026635 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/finvar_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/finvar_lib.doc INSTEAD @c library version: (1.32.2.2,2002/08/13) @c library file: ../Singular/LIB/finvar.lib @cindex finvar.lib @cindex finvar_lib @table @asis @item @strong{Library:} finvar.lib @item @strong{Purpose:} Invariant Rings of Finite Groups @item @strong{Author:} Agnes E. Heydtmann, email: agnes@@math.uni-sb.de @item @strong{Overview:} A library for computing polynomial invariants of finite matrix groups and generators of related varieties. The algorithms are based on B. Sturmfels, G. Kemper and W. Decker et al.. @end table @strong{Main procedures:} @menu * invariant_ring:: generators of the invariant ring (i.r.) * invariant_ring_random:: generators of the i.r., randomized alg. * primary_invariants:: primary invariants (p.i.) * primary_invariants_random:: primary invariants, randomized alg. @end menu @strong{Auxiliary procedures:} @menu * cyclotomic:: cyclotomic polynomial * group_reynolds:: finite group and Reynolds operator (R.o.) * molien:: Molien series (M.s.) * reynolds_molien:: Reynolds operator and Molien series * partial_molien:: partial expansion of Molien series * evaluate_reynolds:: image under the Reynolds operator * invariant_basis:: basis of homogeneous invariants of a degree * invariant_basis_reynolds:: as invariant_basis(), with R.o. * primary_char0:: primary invariants in char 0 * primary_charp:: primary invariant in char p * primary_char0_no_molien:: p.i., char 0, without Molien series * primary_charp_no_molien:: p.i., char p, without Molien series * primary_charp_without:: p.i., char p, without R.o. or Molien series * primary_char0_random:: primary invariants in char 0, randomized * primary_charp_random:: primary invariants in char p, randomized * primary_char0_no_molien_random:: p.i., char 0, without M.s., randomized * primary_charp_no_molien_random:: p.i., char p, without M.s., randomized * primary_charp_without_random:: p.i., char p, without R.o. or M.s., random. * power_products:: exponents for power products * secondary_char0:: secondary (s.i.) invariants in char 0 * secondary_charp:: secondary invariants in char p * secondary_no_molien:: secondary invariants, without Molien series * secondary_and_irreducibles_no_molien:: s.i. & irreducible s.i., without M.s. * secondary_not_cohen_macaulay:: s.i. when invariant ring not Cohen-Macaulay * orbit_variety:: ideal of the orbit variety * relative_orbit_variety:: ideal of a relative orbit variety * image_of_variety:: ideal of the image of a variety @end menu @c ---end content LibInfo--- @c ------------------- invariant_ring ------------- @node invariant_ring, invariant_ring_random,, finvar_lib @subsubsection invariant_ring @cindex invariant_ring @c ---content invariant_ring--- Procedure from library @code{finvar.lib} (@pxref{finvar_lib}). @table @asis @item @strong{Usage:} invariant_ring(G1,G2,...[,flags]); @*G1,G2,...: generating a finite matrix group, flags: an optional with three entries: if the first one equals 0, the program attempts to compute the Molien series and Reynolds operator, if it equals 1, the program is told that the Molien series should not be computed, if it equals -1 characteristic 0 is simulated, i.e. the Molien series is computed as if the base field were characteristic 0 (the user must choose a field of large prime characteristic, e.g. 32003) and if the first one is anything else, it means that the characteristic of the base field divides the group order (i.e. it will not even be attempted to compute the Reynolds operator or Molien series), the second component should give the size of intervals between canceling common factors in the expansion of Molien series, 0 (the default) means only once after generating all terms, in prime characteristic also a negative number can be given to indicate that common factors should always be canceled when the expansion is simple (the root of the extension field occurs not among the coefficients) @item @strong{Return:} primary and secondary invariants (both of type ) generating the invariant ring with respect to the matrix group generated by the matrices in the input and irreducible secondary invariants (type ) if the Molien series was available @item @strong{Display:} information about the various stages of the program if the third flag does not equal 0 @item @strong{Theory:} Bases of homogeneous invariants are generated successively and those are chosen as primary invariants that lower the dimension of the ideal generated by the previously found invariants (see "Generating a Noetherian Normalization of the Invariant Ring of a Finite Group" by Decker, Heydtmann, Schreyer (1998)). In the @*non-modular case secondary invariants are calculated by finding a basis (in terms of monomials) of the basering modulo the primary invariants, mapping to invariants with the Reynolds operator and using those or their power products such that they are linearly independent modulo the primary invariants (see "Some Algorithms in Invariant Theory of Finite Groups" by Kemper and Steel (1997)). In the modular case they are generated according to "Generating Invariant Rings of Finite Groups over Arbitrary Fields" by Kemper (1996). @end table @strong{Example:} @smallexample @c computed example invariant_ring d2t_singular/finvar_lib.doc:115 LIB "finvar.lib"; ring R=0,(x,y,z),dp; matrix A[3][3]=0,1,0,-1,0,0,0,0,-1; matrix P,S,IS=invariant_ring(A); print(P); @expansion{} z2,x2+y2,x2y2 print(S); @expansion{} 1,xyz,x2z-y2z,x3y-xy3 print(IS); @expansion{} xyz,x2z-y2z,x3y-xy3 @c end example invariant_ring d2t_singular/finvar_lib.doc:115 @end smallexample @c ---end content invariant_ring--- @c ------------------- invariant_ring_random ------------- @node invariant_ring_random, primary_invariants, invariant_ring, finvar_lib @subsubsection invariant_ring_random @cindex invariant_ring_random @c ---content invariant_ring_random--- Procedure from library @code{finvar.lib} (@pxref{finvar_lib}). @table @asis @item @strong{Usage:} invariant_ring_random(G1,G2,...,r[,flags]); @*G1,G2,...: generating a finite matrix group, r: an where -|r| to |r| is the range of coefficients of random combinations of bases elements that serve as primary invariants, flags: an optional with three entries: if the first equals 0, the program attempts to compute the Molien series and Reynolds operator, if it equals 1, the program is told that the Molien series should not be computed, if it equals -1 characteristic 0 is simulated, i.e. the Molien series is computed as if the base field were characteristic 0 (the user must choose a field of large prime characteristic, e.g. 32003) and if the first one is anything else, then the characteristic of the base field divides the group order (i.e. we will not even attempt to compute the Reynolds operator or Molien series), the second component should give the size of intervals between canceling common factors in the expansion of the Molien series, 0 (the default) means only once after generating all terms, in prime characteristic also a negative number can be given to indicate that common factors should always be canceled when the expansion is simple (the root of the extension field does not occur among the coefficients) @item @strong{Return:} primary and secondary invariants (both of type ) generating invariant ring with respect to the matrix group generated by the matrices in the input and irreducible secondary invariants (type ) if the Molien series was available @item @strong{Display:} information about the various stages of the program if the third flag does not equal 0 @item @strong{Theory:} is the same as for invariant_ring except that random combinations of basis elements are chosen as candidates for primary invariants and hopefully they lower the dimension of the previously found primary invariants by the right amount. @end table @strong{Example:} @smallexample @c computed example invariant_ring_random d2t_singular/finvar_lib.doc:176 LIB "finvar.lib"; ring R=0,(x,y,z),dp; matrix A[3][3]=0,1,0,-1,0,0,0,0,-1; matrix P,S,IS=invariant_ring_random(A,1); print(P); @expansion{} z2,x2+y2,x4+y4-z4 print(S); @expansion{} 1,xyz,x2z-y2z,x3y-xy3 print(IS); @expansion{} xyz,x2z-y2z,x3y-xy3 @c end example invariant_ring_random d2t_singular/finvar_lib.doc:176 @end smallexample @c ---end content invariant_ring_random--- @c ------------------- primary_invariants ------------- @node primary_invariants, primary_invariants_random, invariant_ring_random, finvar_lib @subsubsection primary_invariants @cindex primary_invariants @c ---content primary_invariants--- Procedure from library @code{finvar.lib} (@pxref{finvar_lib}). @table @asis @item @strong{Usage:} primary_invariants(G1,G2,...[,flags]); @*G1,G2,...: generating a finite matrix group, flags: an optional with three entries, if the first one equals 0 (also the default), the program attempts to compute the Molien series and Reynolds operator, if it equals 1, the program is told that the Molien series should not be computed, if it equals -1 characteristic 0 is simulated, i.e. the Molien series is computed as if the base field were characteristic 0 (the user must choose a field of large prime characteristic, e.g. 32003) and if the first one is anything else, it means that the characteristic of the base field divides the group order, the second component should give the size of intervals between canceling common factors in the expansion of the Molien series, 0 (the default) means only once after generating all terms, in prime characteristic also a negative number can be given to indicate that common factors should always be canceled when the expansion is simple (the root of the extension field occurs not among the coefficients) @item @strong{Display:} information about the various stages of the program if the third flag does not equal 0 @item @strong{Return:} primary invariants (type ) of the invariant ring and if computable Reynolds operator (type ) and Molien series (type ) or ring name (type string) where the Molien series can be found in the char p case; if the first flag is 1 and we are in the non-modular case then an is returned giving some of the degrees where no non-trivial homogeneous invariants can be found @item @strong{Theory:} Bases of homogeneous invariants are generated successively and those are chosen as primary invariants that lower the dimension of the ideal generated by the previously found invariants (see paper "Generating a Noetherian Normalization of the Invariant Ring of a Finite Group" by Decker, Heydtmann, Schreyer (1998)). @end table @strong{Example:} @smallexample @c computed example primary_invariants d2t_singular/finvar_lib.doc:236 LIB "finvar.lib"; ring R=0,(x,y,z),dp; matrix A[3][3]=0,1,0,-1,0,0,0,0,-1; list L=primary_invariants(A); print(L[1]); @expansion{} z2,x2+y2,x2y2 @c end example primary_invariants d2t_singular/finvar_lib.doc:236 @end smallexample @c ---end content primary_invariants--- @c ------------------- primary_invariants_random ------------- @node primary_invariants_random, cyclotomic, primary_invariants, finvar_lib @subsubsection primary_invariants_random @cindex primary_invariants_random @c ---content primary_invariants_random--- Procedure from library @code{finvar.lib} (@pxref{finvar_lib}). @table @asis @item @strong{Usage:} primary_invariants_random(G1,G2,...,r[,flags]); @*G1,G2,...: generating a finite matrix group, r: an where -|r| to |r| is the range of coefficients of the random combinations of bases elements, flags: an optional with three entries, if the first one equals 0 (also the default), the program attempts to compute the Molien series and Reynolds operator, if it equals 1, the program is told that the Molien series should not be computed, if it equals -1 characteristic 0 is simulated, i.e. the Molien series is computed as if the base field were characteristic 0 (the user must choose a field of large prime characteristic, e.g. 32003) and if the first one is anything else, it means that the characteristic of the base field divides the group order, the second component should give the size of intervals between canceling common factors in the expansion of the Molien series, 0 (the default) means only once after generating all terms, in prime characteristic also a negative number can be given to indicate that common factors should always be canceled when the expansion is simple (the root of the extension field does not occur among the coefficients) @item @strong{Display:} information about the various stages of the program if the third flag does not equal 0 @item @strong{Return:} primary invariants (type ) of the invariant ring and if computable Reynolds operator (type ) and Molien series (type ), if the first flag is 1 and we are in the non-modular case then an is returned giving some of the degrees where no non-trivial homogeneous invariants can be found @item @strong{Theory:} Bases of homogeneous invariants are generated successively and random linear combinations are chosen as primary invariants that lower the dimension of the ideal generated by the previously found invariants (see "Generating a Noetherian Normalization of the Invariant Ring of a Finite Group" by Decker, Heydtmann, Schreyer (1998)). @end table @strong{Example:} @smallexample @c computed example primary_invariants_random d2t_singular/finvar_lib.doc:295 LIB "finvar.lib"; ring R=0,(x,y,z),dp; matrix A[3][3]=0,1,0,-1,0,0,0,0,-1; list L=primary_invariants_random(A,1); print(L[1]); @expansion{} z2,x2+y2,x4+y4-z4 @c end example primary_invariants_random d2t_singular/finvar_lib.doc:295 @end smallexample @c ---end content primary_invariants_random--- @c ------------------- cyclotomic ------------- @node cyclotomic, group_reynolds, primary_invariants_random, finvar_lib @subsubsection cyclotomic @cindex cyclotomic @c ---content cyclotomic--- Procedure from library @code{finvar.lib} (@pxref{finvar_lib}). @table @asis @item @strong{Usage:} cyclotomic(i); i integer > 0 @item @strong{Returns:} the i-th cyclotomic polynomial (type ) as one in the first ring variable @item @strong{Theory:} x^i-1 is divided by the j-th cyclotomic polynomial where j takes on the value of proper divisors of i @end table @strong{Example:} @smallexample @c computed example cyclotomic d2t_singular/finvar_lib.doc:327 LIB "finvar.lib"; ring R=0,(x,y,z),dp; print(cyclotomic(25)); @expansion{} x20+x15+x10+x5+1 @c end example cyclotomic d2t_singular/finvar_lib.doc:327 @end smallexample @c ---end content cyclotomic--- @c ------------------- group_reynolds ------------- @node group_reynolds, molien, cyclotomic, finvar_lib @subsubsection group_reynolds @cindex group_reynolds @c ---content group_reynolds--- Procedure from library @code{finvar.lib} (@pxref{finvar_lib}). @table @asis @item @strong{Usage:} group_reynolds(G1,G2,...[,v]); @*G1,G2,...: nxn generating a finite matrix group, v: an optional @item @strong{Assume:} n is the number of variables of the basering, g the number of group elements @item @strong{Return:} a , the first list element will be a gxn representing the Reynolds operator if we are in the non-modular case; if the characteristic is >0, minpoly==0 and the finite group non-cyclic the second list element is an giving the lowest common multiple of the matrix group elements' order (used in molien); in general all other list elements are nxn listing all elements of the finite group @item @strong{Display:} information if v does not equal 0 @item @strong{Theory:} The entire matrix group is generated by getting all left products of generators with the new elements from the last run through the loop (or the generators themselves during the first run). All the ones that have been generated before are thrown out and the program terminates when no new elements found in one run. Additionally each time a new group element is found the corresponding ring mapping of which the Reynolds operator is made up is generated. They are stored in the rows of the first return value. @end table @strong{Example:} @smallexample @c computed example group_reynolds d2t_singular/finvar_lib.doc:377 LIB "finvar.lib"; ring R=0,(x,y,z),dp; matrix A[3][3]=0,1,0,-1,0,0,0,0,-1; list L=group_reynolds(A); print(L[1]); @expansion{} y, -x,-z, @expansion{} -x,-y,z, @expansion{} -y,x, -z, @expansion{} x, y, z print(L[2..size(L)]); @expansion{} 0, 1,0, @expansion{} -1,0,0, @expansion{} 0, 0,-1 @expansion{} -1,0, 0, @expansion{} 0, -1,0, @expansion{} 0, 0, 1 @expansion{} 0,-1,0, @expansion{} 1,0, 0, @expansion{} 0,0, -1 @expansion{} 1,0,0, @expansion{} 0,1,0, @expansion{} 0,0,1 @c end example group_reynolds d2t_singular/finvar_lib.doc:377 @end smallexample @c ---end content group_reynolds--- @c ------------------- molien ------------- @node molien, reynolds_molien, group_reynolds, finvar_lib @subsubsection molien @cindex molien @c ---content molien--- Procedure from library @code{finvar.lib} (@pxref{finvar_lib}). @table @asis @item @strong{Usage:} molien(G1,G2,...[,ringname,lcm,flags]); @*G1,G2,...: nxn , all elements of a finite matrix group, ringname: a giving a name for a new ring of characteristic 0 for the Molien series in case of prime characteristic, lcm: an giving the lowest common multiple of the elements' orders in case of prime characteristic, minpoly==0 and a non-cyclic group, flags: an optional with three components: if the first element is not equal to 0 characteristic 0 is simulated, i.e. the Molien series is computed as if the base field were characteristic 0 (the user must choose a field of large prime characteristic, e.g. 32003), the second component should give the size of intervals between canceling common factors in the expansion of the Molien series, 0 (the default) means only once after generating all terms, in prime characteristic also a negative number can be given to indicate that common factors should always be canceled when the expansion is simple (the root of the extension field does not occur among the coefficients) @item @strong{Assume:} n is the number of variables of the basering, G1,G2... are the group elements generated by group_reynolds(), lcm is the second return value of group_reynolds() @item @strong{Return:} in case of characteristic 0 a 1x2 giving enumerator and denominator of Molien series; in case of prime characteristic a ring with the name `ringname` of characteristic 0 is created where the same Molien series (named M) is stored @item @strong{Display:} information if the third component of flags does not equal 0 @item @strong{Theory:} In characteristic 0 the terms 1/det(1-xE) for all group elements of the Molien series are computed in a straight forward way. In prime characteristic a Brauer lift is involved. The returned matrix gives enumerator and denominator of the expanded version where common factors have been canceled. @end table @strong{Example:} @smallexample @c computed example molien d2t_singular/finvar_lib.doc:438 LIB "finvar.lib"; " note the case of prime characteristic"; @expansion{} note the case of prime characteristic ring R=0,(x,y,z),dp; matrix A[3][3]=0,1,0,-1,0,0,0,0,-1; list L=group_reynolds(A); matrix M=molien(L[2..size(L)]); print(M); @expansion{} x3+x2-x+1,-x7+x6+x5-x4+x3-x2-x+1 ring S=3,(x,y,z),dp; string newring="alksdfjlaskdjf"; matrix A[3][3]=0,1,0,-1,0,0,0,0,-1; list L=group_reynolds(A); molien(L[2..size(L)],newring); setring alksdfjlaskdjf; print(M); @expansion{} x3+x2-x+1,-x7+x6+x5-x4+x3-x2-x+1 setring S; kill alksdfjlaskdjf; @c end example molien d2t_singular/finvar_lib.doc:438 @end smallexample @c ---end content molien--- @c ------------------- reynolds_molien ------------- @node reynolds_molien, partial_molien, molien, finvar_lib @subsubsection reynolds_molien @cindex reynolds_molien @c ---content reynolds_molien--- Procedure from library @code{finvar.lib} (@pxref{finvar_lib}). @table @asis @item @strong{Usage:} reynolds_molien(G1,G2,...[,ringname,flags]); @*G1,G2,...: nxn generating a finite matrix group, ringname: a giving a name for a new ring of characteristic 0 for the Molien series in case of prime characteristic, flags: an optional with three components: if the first element is not equal to 0 characteristic 0 is simulated, i.e. the Molien series is computed as if the base field were characteristic 0 (the user must choose a field of large prime characteristic, e.g. 32003) the second component should give the size of intervals between canceling common factors in the expansion of the Molien series, 0 (the default) means only once after generating all terms, in prime characteristic also a negative number can be given to indicate that common factors should always be canceled when the expansion is simple (the root of the extension field does not occur among the coefficients) @item @strong{Assume:} n is the number of variables of the basering, G1,G2... are the group elements generated by group_reynolds(), g is the size of the group @item @strong{Return:} a gxn representing the Reynolds operator is the first return value and in case of characteristic 0 a 1x2 giving enumerator and denominator of Molien series is the second one; in case of prime characteristic a ring with the name `ringname` of characteristic 0 is created where the same Molien series (named M) is stored @item @strong{Display:} information if the third component of flags does not equal 0 @item @strong{Theory:} The entire matrix group is generated by getting all left products of the generators with new elements from the last run through the loop (or the generators themselves during the first run). All the ones that have been generated before are thrown out and the program terminates when are no new elements found in one run. Additionally each time a new group element is found the corresponding ring mapping of which the Reynolds operator is made up is generated. They are stored in the rows of the first return value. In characteristic 0 the terms 1/det(1-xE) is computed whenever a new element E is found. In prime characteristic a Brauer lift is involved and the terms are only computed after the entire matrix group is generated (to avoid the modular case). The returned matrix gives enumerator and denominator of the expanded version where common factors have been canceled. @end table @strong{Example:} @smallexample @c computed example reynolds_molien d2t_singular/finvar_lib.doc:515 LIB "finvar.lib"; " note the case of prime characteristic"; @expansion{} note the case of prime characteristic ring R=0,(x,y,z),dp; matrix A[3][3]=0,1,0,-1,0,0,0,0,-1; matrix REY,M=reynolds_molien(A); print(REY); @expansion{} y, -x,-z, @expansion{} -x,-y,z, @expansion{} -y,x, -z, @expansion{} x, y, z print(M); @expansion{} x3+x2-x+1,-x7+x6+x5-x4+x3-x2-x+1 ring S=3,(x,y,z),dp; string newring="Qadjoint"; matrix A[3][3]=0,1,0,-1,0,0,0,0,-1; matrix REY=reynolds_molien(A,newring); print(REY); @expansion{} y, -x,-z, @expansion{} -x,-y,z, @expansion{} -y,x, -z, @expansion{} x, y, z setring Qadjoint; print(M); @expansion{} x3+x2-x+1,-x7+x6+x5-x4+x3-x2-x+1 setring S; kill Qadjoint; @c end example reynolds_molien d2t_singular/finvar_lib.doc:515 @end smallexample @c ---end content reynolds_molien--- @c ------------------- partial_molien ------------- @node partial_molien, evaluate_reynolds, reynolds_molien, finvar_lib @subsubsection partial_molien @cindex partial_molien @c ---content partial_molien--- Procedure from library @code{finvar.lib} (@pxref{finvar_lib}). @table @asis @item @strong{Usage:} partial_molien(M,n[,p]); @*M: a 1x2 , n: an indicating number of terms in the expansion, p: an optional @item @strong{Assume:} M is the return value of molien or the second return value of reynolds_molien, p ought to be the second return value of a previous run of partial_molien and avoids recalculating known terms @item @strong{Return:} n terms (type ) of the partial expansion of the Molien series (first n if there is no third parameter given, otherwise the next n terms depending on a previous calculation) and an intermediate result (type ) of the calculation to be used as third parameter in a next run of partial_molien @item @strong{Theory:} The following calculation is implemented: @format (1+a1x+a2x^2+...+anx^n)/(1+b1x+b2x^2+...+bmx^m)=(1+(a1-b1)x+... (1+b1x+b2x^2+...+bmx^m) ----------------------- (a1-b1)x+(a2-b2)x^2+... (a1-b1)x+b1(a1-b1)x^2+... @end format @end table @strong{Example:} @smallexample @c computed example partial_molien d2t_singular/finvar_lib.doc:574 LIB "finvar.lib"; ring R=0,(x,y,z),dp; matrix A[3][3]=0,1,0,-1,0,0,0,0,-1; matrix REY,M=reynolds_molien(A); poly p(1..2); p(1..2)=partial_molien(M,5); p(1); @expansion{} 4x5+5x4+2x3+2x2+1 p(1..2)=partial_molien(M,5,p(2)); p(1); @expansion{} 18x10+12x9+13x8+8x7+8x6 @c end example partial_molien d2t_singular/finvar_lib.doc:574 @end smallexample @c ---end content partial_molien--- @c ------------------- evaluate_reynolds ------------- @node evaluate_reynolds, invariant_basis, partial_molien, finvar_lib @subsubsection evaluate_reynolds @cindex evaluate_reynolds @c ---content evaluate_reynolds--- Procedure from library @code{finvar.lib} (@pxref{finvar_lib}). @table @asis @item @strong{Usage:} evaluate_reynolds(REY,I); @*REY: a representing the Reynolds operator, I: an arbitrary @item @strong{Assume:} REY is the first return value of group_reynolds() or reynolds_molien() @item @strong{Returns:} image of the polynomials defining I under the Reynolds operator (type ) @item @strong{Note:} the characteristic of the coefficient field of the polynomial ring should not divide the order of the finite matrix group @item @strong{Theory:} REY has been constructed in such a way that each row serves as a ring mapping of which the Reynolds operator is made up. @end table @strong{Example:} @smallexample @c computed example evaluate_reynolds d2t_singular/finvar_lib.doc:619 LIB "finvar.lib"; ring R=0,(x,y,z),dp; matrix A[3][3]=0,1,0,-1,0,0,0,0,-1; list L=group_reynolds(A); ideal I=x2,y2,z2; print(evaluate_reynolds(L[1],I)); @expansion{} 1/2x2+1/2y2, @expansion{} 1/2x2+1/2y2, @expansion{} z2 @c end example evaluate_reynolds d2t_singular/finvar_lib.doc:619 @end smallexample @c ---end content evaluate_reynolds--- @c ------------------- invariant_basis ------------- @node invariant_basis, invariant_basis_reynolds, evaluate_reynolds, finvar_lib @subsubsection invariant_basis @cindex invariant_basis @c ---content invariant_basis--- Procedure from library @code{finvar.lib} (@pxref{finvar_lib}). @table @asis @item @strong{Usage:} invariant_basis(g,G1,G2,...); @*g: an indicating of which degree (>0) the homogeneous basis should be, G1,G2,...: generating a finite matrix group @item @strong{Returns:} the basis (type ) of the space of invariants of degree g @item @strong{Theory:} A general polynomial of degree g is generated and the generators of the matrix group applied. The difference ought to be 0 and this way a system of linear equations is created. It is solved by computing syzygies. @end table @strong{Example:} @smallexample @c computed example invariant_basis d2t_singular/finvar_lib.doc:655 LIB "finvar.lib"; ring R=0,(x,y,z),dp; matrix A[3][3]=0,1,0,-1,0,0,0,0,-1; print(invariant_basis(2,A)); @expansion{} x2+y2, @expansion{} z2 @c end example invariant_basis d2t_singular/finvar_lib.doc:655 @end smallexample @c ---end content invariant_basis--- @c ------------------- invariant_basis_reynolds ------------- @node invariant_basis_reynolds, primary_char0, invariant_basis, finvar_lib @subsubsection invariant_basis_reynolds @cindex invariant_basis_reynolds @c ---content invariant_basis_reynolds--- Procedure from library @code{finvar.lib} (@pxref{finvar_lib}). @table @asis @item @strong{Usage:} invariant_basis_reynolds(REY,d[,flags]); @*REY: a representing the Reynolds operator, d: an indicating of which degree (>0) the homogeneous basis should be, flags: an optional with two entries: its first component gives the dimension of the space (default <0 meaning unknown) and its second component is used as the number of polynomials that should be mapped to invariants during one call of evaluate_reynolds if the dimension of the space is unknown or the number such that number x dimension polynomials are mapped to invariants during one call of evaluate_reynolds @item @strong{Assume:} REY is the first return value of group_reynolds() or reynolds_molien() and flags[1] given by partial_molien @item @strong{Return:} the basis (type ) of the space of invariants of degree d @item @strong{Theory:} Monomials of degree d are mapped to invariants with the Reynolds operator. A linearly independent set is generated with the help of minbase. @end table @strong{Example:} @smallexample @c computed example invariant_basis_reynolds d2t_singular/finvar_lib.doc:699 LIB "finvar.lib"; ring R=0,(x,y,z),dp; matrix A[3][3]=0,1,0,-1,0,0,0,0,-1; intvec flags=0,1,0; matrix REY,M=reynolds_molien(A,flags); flags=8,6; print(invariant_basis_reynolds(REY,6,flags)); @expansion{} z6, @expansion{} x2z4+y2z4, @expansion{} x2y2z2, @expansion{} x3yz2-xy3z2, @expansion{} x4z2+y4z2, @expansion{} x4y2+x2y4, @expansion{} x5y-xy5, @expansion{} x6+y6 @c end example invariant_basis_reynolds d2t_singular/finvar_lib.doc:699 @end smallexample @c ---end content invariant_basis_reynolds--- @c ------------------- primary_char0 ------------- @node primary_char0, primary_charp, invariant_basis_reynolds, finvar_lib @subsubsection primary_char0 @cindex primary_char0 @c ---content primary_char0--- Procedure from library @code{finvar.lib} (@pxref{finvar_lib}). @table @asis @item @strong{Usage:} primary_char0(REY,M[,v]); @*REY: a representing the Reynolds operator, M: a 1x2 representing the Molien series, v: an optional @item @strong{Assume:} REY is the first return value of group_reynolds or reynolds_molien and M the one of molien or the second one of reynolds_molien @item @strong{Display:} information about the various stages of the program if v does not equal 0 @item @strong{Return:} primary invariants (type ) of the invariant ring @item @strong{Theory:} Bases of homogeneous invariants are generated successively and those are chosen as primary invariants that lower the dimension of the ideal generated by the previously found invariants (see paper "Generating a Noetherian Normalization of the Invariant Ring of a Finite Group" by Decker, Heydtmann, Schreyer (1998)). @end table @strong{Example:} @smallexample @c computed example primary_char0 d2t_singular/finvar_lib.doc:745 LIB "finvar.lib"; ring R=0,(x,y,z),dp; matrix A[3][3]=0,1,0,-1,0,0,0,0,-1; matrix REY,M=reynolds_molien(A); matrix P=primary_char0(REY,M); print(P); @expansion{} z2,x2+y2,x2y2 @c end example primary_char0 d2t_singular/finvar_lib.doc:745 @end smallexample @c ---end content primary_char0--- @c ------------------- primary_charp ------------- @node primary_charp, primary_char0_no_molien, primary_char0, finvar_lib @subsubsection primary_charp @cindex primary_charp @c ---content primary_charp--- Procedure from library @code{finvar.lib} (@pxref{finvar_lib}). @table @asis @item @strong{Usage:} primary_charp(REY,ringname[,v]); @*REY: a representing the Reynolds operator, ringname: a giving the name of a ring where the Molien series is stored, v: an optional @item @strong{Assume:} REY is the first return value of group_reynolds or reynolds_molien and ringname gives the name of a ring of characteristic 0 that has been created by molien or reynolds_molien @item @strong{Display:} information about the various stages of the program if v does not equal 0 @item @strong{Return:} primary invariants (type ) of the invariant ring @item @strong{Theory:} Bases of homogeneous invariants are generated successively and those are chosen as primary invariants that lower the dimension of the ideal generated by the previously found invariants (see paper "Generating a Noetherian Normalization of the Invariant Ring of a Finite Group" by Decker, Heydtmann, Schreyer (1998)). @end table @strong{Example:} @smallexample @c computed example primary_charp d2t_singular/finvar_lib.doc:792 LIB "finvar.lib"; ring R=3,(x,y,z),dp; matrix A[3][3]=0,1,0,-1,0,0,0,0,-1; list L=group_reynolds(A); string newring="alskdfj"; molien(L[2..size(L)],newring); matrix P=primary_charp(L[1],newring); if(system("with","Namespaces")) @{ kill Top::`newring`; @} kill `newring`; print(P); @expansion{} z2,x2+y2,x2y2 @c end example primary_charp d2t_singular/finvar_lib.doc:792 @end smallexample @c ---end content primary_charp--- @c ------------------- primary_char0_no_molien ------------- @node primary_char0_no_molien, primary_charp_no_molien, primary_charp, finvar_lib @subsubsection primary_char0_no_molien @cindex primary_char0_no_molien @c ---content primary_char0_no_molien--- Procedure from library @code{finvar.lib} (@pxref{finvar_lib}). @table @asis @item @strong{Usage:} primary_char0_no_molien(REY[,v]); @*REY: a representing the Reynolds operator, v: an optional @item @strong{Assume:} REY is the first return value of group_reynolds or reynolds_molien @item @strong{Display:} information about the various stages of the program if v does not equal 0 @item @strong{Return:} primary invariants (type ) of the invariant ring and an listing some of the degrees where no non-trivial homogeneous invariants are to be found @item @strong{Theory:} Bases of homogeneous invariants are generated successively and those are chosen as primary invariants that lower the dimension of the ideal generated by the previously found invariants (see paper "Generating a Noetherian Normalization of the Invariant Ring of a Finite Group" by Decker, Heydtmann, Schreyer (1998)). @end table @strong{Example:} @smallexample @c computed example primary_char0_no_molien d2t_singular/finvar_lib.doc:842 LIB "finvar.lib"; ring R=0,(x,y,z),dp; matrix A[3][3]=0,1,0,-1,0,0,0,0,-1; list L=group_reynolds(A); list l=primary_char0_no_molien(L[1]); print(l[1]); @expansion{} z2,x2+y2,x2y2 @c end example primary_char0_no_molien d2t_singular/finvar_lib.doc:842 @end smallexample @c ---end content primary_char0_no_molien--- @c ------------------- primary_charp_no_molien ------------- @node primary_charp_no_molien, primary_charp_without, primary_char0_no_molien, finvar_lib @subsubsection primary_charp_no_molien @cindex primary_charp_no_molien @c ---content primary_charp_no_molien--- Procedure from library @code{finvar.lib} (@pxref{finvar_lib}). @table @asis @item @strong{Usage:} primary_charp_no_molien(REY[,v]); @*REY: a representing the Reynolds operator, v: an optional @item @strong{Assume:} REY is the first return value of group_reynolds or reynolds_molien @item @strong{Display:} information about the various stages of the program if v does not equal 0 @item @strong{Return:} primary invariants (type ) of the invariant ring and an listing some of the degrees where no non-trivial homogeneous invariants are to be found @item @strong{Theory:} Bases of homogeneous invariants are generated successively and those are chosen as primary invariants that lower the dimension of the ideal generated by the previously found invariants (see paper "Generating a Noetherian Normalization of the Invariant Ring of a Finite Group" by Decker, Heydtmann, Schreyer (1998)). @end table @strong{Example:} @smallexample @c computed example primary_charp_no_molien d2t_singular/finvar_lib.doc:888 LIB "finvar.lib"; ring R=3,(x,y,z),dp; matrix A[3][3]=0,1,0,-1,0,0,0,0,-1; list L=group_reynolds(A); list l=primary_charp_no_molien(L[1]); print(l[1]); @expansion{} z2,x2+y2,x2y2 @c end example primary_charp_no_molien d2t_singular/finvar_lib.doc:888 @end smallexample @c ---end content primary_charp_no_molien--- @c ------------------- primary_charp_without ------------- @node primary_charp_without, primary_char0_random, primary_charp_no_molien, finvar_lib @subsubsection primary_charp_without @cindex primary_charp_without @c ---content primary_charp_without--- Procedure from library @code{finvar.lib} (@pxref{finvar_lib}). @table @asis @item @strong{Usage:} primary_charp_without(G1,G2,...[,v]); @*G1,G2,...: generating a finite matrix group, v: an optional @item @strong{Display:} information about the various stages of the program if v does not equal 0 @item @strong{Return:} primary invariants (type ) of the invariant ring @item @strong{Theory:} Bases of homogeneous invariants are generated successively and those are chosen as primary invariants that lower the dimension of the ideal generated by the previously found invariants (see paper "Generating a Noetherian Normalization of the Invariant Ring of a Finite Group" by Decker, Heydtmann, Schreyer (1998)). No Reynolds @*operator or Molien series is used. @end table @strong{Example:} @smallexample @c computed example primary_charp_without d2t_singular/finvar_lib.doc:930 LIB "finvar.lib"; ring R=2,(x,y,z),dp; matrix A[3][3]=0,1,0,-1,0,0,0,0,-1; matrix P=primary_charp_without(A); print(P); @expansion{} x+y,z,xy @c end example primary_charp_without d2t_singular/finvar_lib.doc:930 @end smallexample @c ---end content primary_charp_without--- @c ------------------- primary_char0_random ------------- @node primary_char0_random, primary_charp_random, primary_charp_without, finvar_lib @subsubsection primary_char0_random @cindex primary_char0_random @c ---content primary_char0_random--- Procedure from library @code{finvar.lib} (@pxref{finvar_lib}). @table @asis @item @strong{Usage:} primary_char0_random(REY,M,r[,v]); @*REY: a representing the Reynolds operator, M: a 1x2 representing the Molien series, r: an where -|r| to |r| is the range of coefficients of the random combinations of bases elements, v: an optional @item @strong{Assume:} REY is the first return value of group_reynolds or reynolds_molien and M the one of molien or the second one of reynolds_molien @item @strong{Display:} information about the various stages of the program if v does not equal 0 @item @strong{Return:} primary invariants (type ) of the invariant ring @item @strong{Theory:} Bases of homogeneous invariants are generated successively and random linear combinations are chosen as primary invariants that lower the dimension of the ideal generated by the previously found invariants (see "Generating a Noetherian Normalization of the Invariant Ring of a Finite Group" by Decker, Heydtmann, Schreyer (1998)). @end table @strong{Example:} @smallexample @c computed example primary_char0_random d2t_singular/finvar_lib.doc:976 LIB "finvar.lib"; ring R=0,(x,y,z),dp; matrix A[3][3]=0,1,0,-1,0,0,0,0,-1; matrix REY,M=reynolds_molien(A); matrix P=primary_char0_random(REY,M,1); print(P); @expansion{} z2,x2+y2,x4+y4-z4 @c end example primary_char0_random d2t_singular/finvar_lib.doc:976 @end smallexample @c ---end content primary_char0_random--- @c ------------------- primary_charp_random ------------- @node primary_charp_random, primary_char0_no_molien_random, primary_char0_random, finvar_lib @subsubsection primary_charp_random @cindex primary_charp_random @c ---content primary_charp_random--- Procedure from library @code{finvar.lib} (@pxref{finvar_lib}). @table @asis @item @strong{Usage:} primary_charp_random(REY,ringname,r[,v]); @*REY: a representing the Reynolds operator, ringname: a giving the name of a ring where the Molien series is stored, r: an where -|r| to |r| is the range of coefficients of the random combinations of bases elements, v: an optional @item @strong{Assume:} REY is the first return value of group_reynolds or reynolds_molien and ringname gives the name of a ring of characteristic 0 that has been created by molien or reynolds_molien @item @strong{Display:} information about the various stages of the program if v does not equal 0 @item @strong{Return:} primary invariants (type ) of the invariant ring @item @strong{Theory:} Bases of homogeneous invariants are generated successively and random linear combinations are chosen as primary invariants that lower the dimension of the ideal generated by the previously found invariants (see "Generating a Noetherian Normalization of the Invariant Ring of a Finite Group" by Decker, Heydtmann, Schreyer (1998)). @end table @strong{Example:} @smallexample @c computed example primary_charp_random d2t_singular/finvar_lib.doc:1024 LIB "finvar.lib"; ring R=3,(x,y,z),dp; matrix A[3][3]=0,1,0,-1,0,0,0,0,-1; list L=group_reynolds(A); string newring="alskdfj"; molien(L[2..size(L)],newring); matrix P=primary_charp_random(L[1],newring,1); if(system("with","Namespaces")) @{ kill Top::`newring`; @} kill `newring`; print(P); @expansion{} z2,x2+y2,x4+y4-z4 @c end example primary_charp_random d2t_singular/finvar_lib.doc:1024 @end smallexample @c ---end content primary_charp_random--- @c ------------------- primary_char0_no_molien_random ------------- @node primary_char0_no_molien_random, primary_charp_no_molien_random, primary_charp_random, finvar_lib @subsubsection primary_char0_no_molien_random @cindex primary_char0_no_molien_random @c ---content primary_char0_no_molien_random--- Procedure from library @code{finvar.lib} (@pxref{finvar_lib}). @table @asis @item @strong{Usage:} primary_char0_no_molien_random(REY,r[,v]); @*REY: a representing the Reynolds operator, r: an where -|r| to |r| is the range of coefficients of the random combinations of bases elements, v: an optional @item @strong{Assume:} REY is the first return value of group_reynolds or reynolds_molien @item @strong{Display:} information about the various stages of the program if v does not equal 0 @item @strong{Return:} primary invariants (type ) of the invariant ring and an listing some of the degrees where no non-trivial homogeneous invariants are to be found @item @strong{Theory:} Bases of homogeneous invariants are generated successively and random linear combinations are chosen as primary invariants that lower the dimension of the ideal generated by the previously found invariants (see "Generating a Noetherian Normalization of the Invariant Ring of a Finite Group" by Decker, Heydtmann, Schreyer (1998)). @end table @strong{Example:} @smallexample @c computed example primary_char0_no_molien_random d2t_singular/finvar_lib.doc:1075 LIB "finvar.lib"; ring R=0,(x,y,z),dp; matrix A[3][3]=0,1,0,-1,0,0,0,0,-1; list L=group_reynolds(A); list l=primary_char0_no_molien_random(L[1],1); print(l[1]); @expansion{} z2,x2+y2,x4+y4-z4 @c end example primary_char0_no_molien_random d2t_singular/finvar_lib.doc:1075 @end smallexample @c ---end content primary_char0_no_molien_random--- @c ------------------- primary_charp_no_molien_random ------------- @node primary_charp_no_molien_random, primary_charp_without_random, primary_char0_no_molien_random, finvar_lib @subsubsection primary_charp_no_molien_random @cindex primary_charp_no_molien_random @c ---content primary_charp_no_molien_random--- Procedure from library @code{finvar.lib} (@pxref{finvar_lib}). @table @asis @item @strong{Usage:} primary_charp_no_molien_random(REY,r[,v]); @*REY: a representing the Reynolds operator, r: an where -|r| to |r| is the range of coefficients of the random combinations of bases elements, v: an optional @item @strong{Assume:} REY is the first return value of group_reynolds or reynolds_molien @item @strong{Display:} information about the various stages of the program if v does not equal 0 @item @strong{Return:} primary invariants (type ) of the invariant ring and an listing some of the degrees where no non-trivial homogeneous invariants are to be found @item @strong{Theory:} Bases of homogeneous invariants are generated successively and random linear combinations are chosen as primary invariants that lower the dimension of the ideal generated by the previously found invariants (see "Generating a Noetherian Normalization of the Invariant Ring of a Finite Group" by Decker, Heydtmann, Schreyer (1998)). @end table @strong{Example:} @smallexample @c computed example primary_charp_no_molien_random d2t_singular/finvar_lib.doc:1122 LIB "finvar.lib"; ring R=3,(x,y,z),dp; matrix A[3][3]=0,1,0,-1,0,0,0,0,-1; list L=group_reynolds(A); list l=primary_charp_no_molien_random(L[1],1); print(l[1]); @expansion{} z2,x2+y2,x4+y4-z4 @c end example primary_charp_no_molien_random d2t_singular/finvar_lib.doc:1122 @end smallexample @c ---end content primary_charp_no_molien_random--- @c ------------------- primary_charp_without_random ------------- @node primary_charp_without_random, power_products, primary_charp_no_molien_random, finvar_lib @subsubsection primary_charp_without_random @cindex primary_charp_without_random @c ---content primary_charp_without_random--- Procedure from library @code{finvar.lib} (@pxref{finvar_lib}). @table @asis @item @strong{Usage:} primary_charp_without_random(G1,G2,...,r[,v]); @*G1,G2,...: generating a finite matrix group, r: an where -|r| to |r| is the range of coefficients of the random combinations of bases elements, v: an optional @item @strong{Display:} information about the various stages of the program if v does not equal 0 @item @strong{Return:} primary invariants (type ) of the invariant ring @item @strong{Theory:} Bases of homogeneous invariants are generated successively and random linear combinations are chosen as primary invariants that lower the dimension of the ideal generated by the previously found invariants (see "Generating a Noetherian Normalization of the Invariant Ring of a Finite Group" by Decker, Heydtmann, Schreyer (1998)). No Reynolds operator or Molien series is used. @end table @strong{Example:} @smallexample @c computed example primary_charp_without_random d2t_singular/finvar_lib.doc:1165 LIB "finvar.lib"; ring R=2,(x,y,z),dp; matrix A[3][3]=0,1,0,-1,0,0,0,0,-1; matrix P=primary_charp_without_random(A,1); print(P); @expansion{} x+y,z,xy @c end example primary_charp_without_random d2t_singular/finvar_lib.doc:1165 @end smallexample @c ---end content primary_charp_without_random--- @c ------------------- power_products ------------- @node power_products, secondary_char0, primary_charp_without_random, finvar_lib @subsubsection power_products @cindex power_products @c ---content power_products--- Procedure from library @code{finvar.lib} (@pxref{finvar_lib}). @table @asis @item @strong{Usage:} power_products(dv,d); @*dv: an giving the degrees of homogeneous polynomials, d: the degree of the desired power products @item @strong{Return:} a size(dv)*m where each column ought to be interpreted as containing the exponents of the corresponding polynomials. The product of the powers is then homogeneous of degree d. @end table @strong{Example:} @smallexample @c computed example power_products d2t_singular/finvar_lib.doc:1196 LIB "finvar.lib"; intvec dv=5,5,5,10,10; print(power_products(dv,10)); @expansion{} 2 1 1 0 0 0 0 0 @expansion{} 0 1 0 2 1 0 0 0 @expansion{} 0 0 1 0 1 2 0 0 @expansion{} 0 0 0 0 0 0 1 0 @expansion{} 0 0 0 0 0 0 0 1 print(power_products(dv,7)); @expansion{} 0 @expansion{} 0 @expansion{} 0 @expansion{} 0 @expansion{} 0 @c end example power_products d2t_singular/finvar_lib.doc:1196 @end smallexample @c ---end content power_products--- @c ------------------- secondary_char0 ------------- @node secondary_char0, secondary_charp, power_products, finvar_lib @subsubsection secondary_char0 @cindex secondary_char0 @c ---content secondary_char0--- Procedure from library @code{finvar.lib} (@pxref{finvar_lib}). @table @asis @item @strong{Usage:} secondary_char0(P,REY,M[,v]); @*P: a 1xn with primary invariants, REY: a gxn representing the Reynolds operator, M: a 1x2 giving numerator and denominator of the Molien series, v: an optional @item @strong{Assume:} n is the number of variables of the basering, g the size of the group, REY is the 1st return value of group_reynolds(), reynolds_molien() or the second one of primary_invariants(), M the return value of molien() or the second one of reynolds_molien() or the third one of primary_invariants() @item @strong{Return:} secondary invariants of the invariant ring (type ) and irreducible secondary invariants (type ) @item @strong{Display:} information if v does not equal 0 @item @strong{Theory:} The secondary invariants are calculated by finding a basis (in terms of monomials) of the basering modulo the primary invariants, mapping those to invariants with the Reynolds operator and using these images or their power products such that they are linearly independent modulo the primary invariants (see paper "Some Algorithms in Invariant Theory of Finite Groups" by Kemper and Steel (1997)). @end table @strong{Example:} @smallexample @c computed example secondary_char0 d2t_singular/finvar_lib.doc:1244 LIB "finvar.lib"; ring R=0,(x,y,z),dp; matrix A[3][3]=0,1,0,-1,0,0,0,0,-1; list L=primary_invariants(A); matrix S,IS=secondary_char0(L[1..3]); print(S); @expansion{} 1,xyz,x2z-y2z,x3y-xy3 print(IS); @expansion{} xyz,x2z-y2z,x3y-xy3 @c end example secondary_char0 d2t_singular/finvar_lib.doc:1244 @end smallexample @c ---end content secondary_char0--- @c ------------------- secondary_charp ------------- @node secondary_charp, secondary_no_molien, secondary_char0, finvar_lib @subsubsection secondary_charp @cindex secondary_charp @c ---content secondary_charp--- Procedure from library @code{finvar.lib} (@pxref{finvar_lib}). @table @asis @item @strong{Usage:} secondary_charp(P,REY,ringname[,v]); @*P: a 1xn with primary invariants, REY: a gxn representing the Reynolds operator, ringname: a giving the name of a ring of characteristic 0 where the Molien series is stored, v: an optional @item @strong{Assume:} n is the number of variables of the basering, g the size of the group, REY is the 1st return value of group_reynolds(), reynolds_molien() or the second one of primary_invariants(), `ringname` is a ring of char 0 that has been created by molien() or reynolds_molien() or primary_invariants() @item @strong{Return:} secondary invariants of the invariant ring (type ) and irreducible secondary invariants (type ) @item @strong{Display:} information if v does not equal 0 @item @strong{Theory:} Secondary invariants are calculated by finding a basis (in terms of monomials) of the basering modulo primary invariants, mapping those to invariants with the Reynolds operator and using these images or their power products such that they are linearly independent modulo the primary invariants (see paper "Some Algorithms in Invariant Theory of Finite Groups" by Kemper and Steel (1997)). @end table @strong{Example:} @smallexample @c computed example secondary_charp d2t_singular/finvar_lib.doc:1296 LIB "finvar.lib"; ring R=3,(x,y,z),dp; matrix A[3][3]=0,1,0,-1,0,0,0,0,-1; list L=primary_invariants(A); matrix S,IS=secondary_charp(L[1..size(L)]); print(S); @expansion{} 1,xyz,x2z-y2z,x3y-xy3 print(IS); @expansion{} xyz,x2z-y2z,x3y-xy3 @c end example secondary_charp d2t_singular/finvar_lib.doc:1296 @end smallexample @c ---end content secondary_charp--- @c ------------------- secondary_no_molien ------------- @node secondary_no_molien, secondary_and_irreducibles_no_molien, secondary_charp, finvar_lib @subsubsection secondary_no_molien @cindex secondary_no_molien @c ---content secondary_no_molien--- Procedure from library @code{finvar.lib} (@pxref{finvar_lib}). @table @asis @item @strong{Usage:} secondary_no_molien(P,REY[,deg_vec,v]); @*P: a 1xn with primary invariants, REY: a gxn representing the Reynolds operator, deg_vec: an optional listing some degrees where no non-trivial homogeneous invariants can be found, v: an optional @item @strong{Assume:} n is the number of variables of the basering, g the size of the group, REY is the 1st return value of group_reynolds(), reynolds_molien() or the second one of primary_invariants(), deg_vec is the second return value of primary_char0_no_molien(), primary_charp_no_molien(), primary_char0_no_molien_random() or primary_charp_no_molien_random() @item @strong{Return:} secondary invariants of the invariant ring (type ) @item @strong{Display:} information if v does not equal 0 @item @strong{Theory:} Secondary invariants are calculated by finding a basis (in terms of monomials) of the basering modulo primary invariants, mapping those to invariants with the Reynolds operator and using these images as candidates for secondary invariants. @end table @strong{Example:} @smallexample @c computed example secondary_no_molien d2t_singular/finvar_lib.doc:1345 LIB "finvar.lib"; ring R=0,(x,y,z),dp; matrix A[3][3]=0,1,0,-1,0,0,0,0,-1; list L=primary_invariants(A,intvec(1,1,0)); matrix S=secondary_no_molien(L[1..3]); print(S); @expansion{} 1,xyz,x2z-y2z,x3y-xy3 @c end example secondary_no_molien d2t_singular/finvar_lib.doc:1345 @end smallexample @c ---end content secondary_no_molien--- @c ------------------- secondary_and_irreducibles_no_molien ------------- @node secondary_and_irreducibles_no_molien, secondary_not_cohen_macaulay, secondary_no_molien, finvar_lib @subsubsection secondary_and_irreducibles_no_molien @cindex secondary_and_irreducibles_no_molien @c ---content secondary_and_irreducibles_no_molien--- Procedure from library @code{finvar.lib} (@pxref{finvar_lib}). @table @asis @item @strong{Usage:} secondary_and_irreducibles_no_molien(P,REY[,v]); @*P: a 1xn with primary invariants, REY: a gxn representing the Reynolds operator, v: an optional @item @strong{Assume:} n is the number of variables of the basering, g the size of the group, REY is the 1st return value of group_reynolds(), reynolds_molien() or the second one of primary_invariants() @item @strong{Return:} secondary invariants of the invariant ring (type ) and irreducible secondary invariants (type ) @item @strong{Display:} information if v does not equal 0 @item @strong{Theory:} Secondary invariants are calculated by finding a basis (in terms of monomials) of the basering modulo primary invariants, mapping those to invariants with the Reynolds operator and using these images or their power products such that they are linearly independent modulo the primary invariants (see paper "Some Algorithms in Invariant Theory of Finite Groups" by Kemper and Steel (1997)). @end table @strong{Example:} @smallexample @c computed example secondary_and_irreducibles_no_molien d2t_singular/finvar_lib.doc:1392 LIB "finvar.lib"; ring R=0,(x,y,z),dp; matrix A[3][3]=0,1,0,-1,0,0,0,0,-1; list L=primary_invariants(A,intvec(1,1,0)); matrix S,IS=secondary_and_irreducibles_no_molien(L[1..2]); print(S); @expansion{} 1,xyz,x2z-y2z,x3y-xy3 print(IS); @expansion{} xyz,x2z-y2z,x3y-xy3 @c end example secondary_and_irreducibles_no_molien d2t_singular/finvar_lib.doc:1392 @end smallexample @c ---end content secondary_and_irreducibles_no_molien--- @c ------------------- secondary_not_cohen_macaulay ------------- @node secondary_not_cohen_macaulay, orbit_variety, secondary_and_irreducibles_no_molien, finvar_lib @subsubsection secondary_not_cohen_macaulay @cindex secondary_not_cohen_macaulay @c ---content secondary_not_cohen_macaulay--- Procedure from library @code{finvar.lib} (@pxref{finvar_lib}). @table @asis @item @strong{Usage:} secondary_not_cohen_macaulay(P,G1,G2,...[,v]); @*P: a 1xn with primary invariants, G1,G2,...: nxn generating a finite matrix group, v: an optional @item @strong{Assume:} n is the number of variables of the basering @item @strong{Return:} secondary invariants of the invariant ring (type ) @item @strong{Display:} information if v does not equal 0 @item @strong{Theory:} Secondary invariants are generated following "Generating Invariant Rings of Finite Groups over Arbitrary Fields" by Kemper (1996). @end table @strong{Example:} @smallexample @c computed example secondary_not_cohen_macaulay d2t_singular/finvar_lib.doc:1433 LIB "finvar.lib"; ring R=2,(x,y,z),dp; matrix A[3][3]=0,1,0,-1,0,0,0,0,-1; list L=primary_invariants(A); matrix S=secondary_not_cohen_macaulay(L[1],A); print(S); @expansion{} 1 @c end example secondary_not_cohen_macaulay d2t_singular/finvar_lib.doc:1433 @end smallexample @c ---end content secondary_not_cohen_macaulay--- @c ------------------- orbit_variety ------------- @node orbit_variety, relative_orbit_variety, secondary_not_cohen_macaulay, finvar_lib @subsubsection orbit_variety @cindex orbit_variety @c ---content orbit_variety--- Procedure from library @code{finvar.lib} (@pxref{finvar_lib}). @table @asis @item @strong{Usage:} orbit_variety(F,s); @*F: a 1xm defining an invariant ring, s: a giving the name for a new ring @item @strong{Return:} a Groebner basis (type , named G) for the ideal defining the orbit variety (i.e. the syzygy ideal) in the new ring (named `s`) @item @strong{Theory:} The ideal of algebraic relations of the invariant ring generators is calculated, then the variables of the original ring are eliminated and the polynomials that are left over define the orbit variety @end table @strong{Example:} @smallexample @c computed example orbit_variety d2t_singular/finvar_lib.doc:1469 LIB "finvar.lib"; ring R=0,(x,y,z),dp; matrix F[1][7]=x2+y2,z2,x4+y4,1,x2z-1y2z,xyz,x3y-1xy3; string newring="E"; orbit_variety(F,newring); print(G); @expansion{} y(4)-1, @expansion{} y(5)*y(6)-y(2)*y(7), @expansion{} y(2)*y(3)-y(5)^2-2*y(6)^2, @expansion{} y(1)^2*y(6)-2*y(3)*y(6)+y(5)*y(7), @expansion{} y(1)^2*y(5)-y(3)*y(5)-2*y(6)*y(7), @expansion{} y(1)^2*y(2)-y(2)*y(3)-2*y(6)^2, @expansion{} y(1)^4-3*y(1)^2*y(3)+2*y(3)^2+2*y(7)^2 basering; @expansion{} // characteristic : 0 @expansion{} // number of vars : 7 @expansion{} // block 1 : ordering dp @expansion{} // : names y(1) y(2) y(3) y(4) y(5) y(6) y(7) @expansion{} // block 2 : ordering C @c end example orbit_variety d2t_singular/finvar_lib.doc:1469 @end smallexample @c ---end content orbit_variety--- @c ------------------- relative_orbit_variety ------------- @node relative_orbit_variety, image_of_variety, orbit_variety, finvar_lib @subsubsection relative_orbit_variety @cindex relative_orbit_variety @c ---content relative_orbit_variety--- Procedure from library @code{finvar.lib} (@pxref{finvar_lib}). @table @asis @item @strong{Usage:} relative_orbit_variety(I,F,s); @*I: an invariant under the action of a group, F: a 1xm defining the invariant ring of this group, s: a giving a name for a new ring @item @strong{Return:} a Groebner basis (type , named G) for the ideal defining the relative orbit variety with respect to I in the new ring (named s) @item @strong{Theory:} A Groebner basis of the ideal of algebraic relations of the invariant ring generators is calculated, then one of the basis elements plus the ideal generators. The variables of the original ring are eliminated and the polynomials that are left define the relative orbit variety with respect to I. @end table @strong{Example:} @smallexample @c computed example relative_orbit_variety d2t_singular/finvar_lib.doc:1509 LIB "finvar.lib"; ring R=0,(x,y,z),dp; matrix F[1][3]=x+y+z,xy+xz+yz,xyz; ideal I=x2+y2+z2-1,x2y+y2z+z2x-2x-2y-2z,xy2+yz2+zx2-2x-2y-2z; string newring="E"; relative_orbit_variety(I,F,newring); print(G); @expansion{} 27*y(3)^6-513*y(3)^4+33849*y(3)^2-784, @expansion{} 1475*y(2)+9*y(3)^4-264*y(3)^2+736, @expansion{} 8260*y(1)+9*y(3)^5-87*y(3)^3+5515*y(3) basering; @expansion{} // characteristic : 0 @expansion{} // number of vars : 3 @expansion{} // block 1 : ordering lp @expansion{} // : names y(1) y(2) y(3) @expansion{} // block 2 : ordering C @c end example relative_orbit_variety d2t_singular/finvar_lib.doc:1509 @end smallexample @c ---end content relative_orbit_variety--- @c ------------------- image_of_variety ------------- @node image_of_variety,, relative_orbit_variety, finvar_lib @subsubsection image_of_variety @cindex image_of_variety @c ---content image_of_variety--- Procedure from library @code{finvar.lib} (@pxref{finvar_lib}). @table @asis @item @strong{Usage:} image_of_variety(I,F); @*I: an arbitrary , F: a 1xm defining an invariant ring of a some matrix group @item @strong{Return:} the defining the image under that group of the variety defined by I @item @strong{Theory:} relative_orbit_variety(I,F,s) is called and the newly introduced variables in the output are replaced by the generators of the invariant ring. This ideal in the original variables defines the image of the variety defined by I @end table @strong{Example:} @smallexample @c computed example image_of_variety d2t_singular/finvar_lib.doc:1548 LIB "finvar.lib"; ring R=0,(x,y,z),dp; matrix F[1][3]=x+y+z,xy+xz+yz,xyz; ideal I=xy; print(image_of_variety(I,F)); @expansion{} xyz @c end example image_of_variety d2t_singular/finvar_lib.doc:1548 @end smallexample @c ---end content image_of_variety--- texi2html-1.82/test/singular_manual/d2t_singular/ring_lib.tex0000644000175000017500000007116111264347126026310 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/ring_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/ring_lib.doc INSTEAD @c library version: (1.17.2.1,2002/02/20) @c library file: ../Singular/LIB/ring.lib @cindex ring.lib @cindex ring_lib @table @asis @item @strong{Library:} ring.lib @item @strong{Purpose:} Manipulating Rings and Maps @end table @strong{Procedures:} @menu * changechar:: make a copy R of basering [ring r] with new char c * changeord:: make a copy R of basering [ring r] with new ord o * changevar:: make a copy R of basering [ring r] with new vars v * defring:: define a ring R in specified char c, n vars v, ord o * defrings:: define ring Sn in n vars, char 32003 [p], ord ds * defringp:: define ring Pn in n vars, char 32003 [p], ord dp * extendring:: extend given ring by n vars v, ord o and name it R * fetchall:: fetch all objects of ring R to basering * imapall:: imap all objects of ring R to basering * mapall:: map all objects of ring R via ideal i to basering * ord_test:: test whether ordering of R is global, local or mixed * ringtensor:: create ring R, tensor product of rings s,t,... * ringweights:: intvec of weights of ring variables of ring r @end menu @c ---end content LibInfo--- @c ------------------- changechar ------------- @node changechar, changeord,, ring_lib @subsubsection changechar @cindex changechar @c ---content changechar--- Procedure from library @code{ring.lib} (@pxref{ring_lib}). @table @asis @item @strong{Usage:} changechar(newr,c[,r]); newr,c=strings, r=ring @item @strong{Create:} create a new ring with name `newr` and make it the basering if r is an existing ring [default: r=basering]. @*The new ring differs from the old ring only in the characteristic. If, say, (newr,c) = ("R","0,A") and the ring r exists, the new basering will have name R, characteristic 0 and one parameter A. @item @strong{Return:} No return value @item @strong{Note:} Works for qrings if map from old_char to new_char is implemented This proc uses 'execute' or calls a procedure using 'execute'. If you use it in your own proc, let the local names of your proc start with @@. @end table @strong{Example:} @smallexample @c computed example changechar d2t_singular/ring_lib.doc:62 LIB "ring.lib"; ring r=0,(x,y,u,v),(dp(2),ds); changechar("R","2,A"); R;""; @expansion{} // basering is now R @expansion{} // characteristic : 2 @expansion{} // 1 parameter : A @expansion{} // minpoly : 0 @expansion{} // number of vars : 4 @expansion{} // block 1 : ordering dp @expansion{} // : names x y @expansion{} // block 2 : ordering ds @expansion{} // : names u v @expansion{} // block 3 : ordering C @expansion{} changechar("R1","32003",R); R1; @expansion{} // basering is now R1 @expansion{} // characteristic : 32003 @expansion{} // number of vars : 4 @expansion{} // block 1 : ordering dp @expansion{} // : names x y @expansion{} // block 2 : ordering ds @expansion{} // : names u v @expansion{} // block 3 : ordering C kill R,R1; if(system("with","Namespaces")) @{ if( nameof(Current) == "Ring" ) @{ kill Top::R,Top::R1; @} else @{ kill Ring::R,Ring::R1; @} @} @c end example changechar d2t_singular/ring_lib.doc:62 @end smallexample @c ---end content changechar--- @c ------------------- changeord ------------- @node changeord, changevar, changechar, ring_lib @subsubsection changeord @cindex changeord @c ---content changeord--- Procedure from library @code{ring.lib} (@pxref{ring_lib}). @table @asis @item @strong{Usage:} changeord(newr,o[,r]); newr,o=strings, r=ring/qring @item @strong{Create:} create a new ring with name `newr` and make it the basering if r is an existing ring/qring [default: r=basering]. @*The new ring differs from the old ring only in the ordering. If, say, (newr,o) = ("R","wp(2,3),dp") and the ring r exists and has >=3 variables, the new basering will have name R and ordering wp(2,3),dp. @item @strong{Return:} No return value @item @strong{Note:} This proc uses 'execute' or calls a procedure using 'execute'. If you use it in your own proc, let the local names of your proc start with @@. @end table @strong{Example:} @smallexample @c computed example changeord d2t_singular/ring_lib.doc:108 LIB "ring.lib"; ring r=0,(x,y,u,v),(dp(2),ds); changeord("R","wp(2,3),dp"); R; ""; @expansion{} // basering is now R @expansion{} // characteristic : 0 @expansion{} // number of vars : 4 @expansion{} // block 1 : ordering wp @expansion{} // : names x y @expansion{} // : weights 2 3 @expansion{} // block 2 : ordering dp @expansion{} // : names u v @expansion{} // block 3 : ordering C @expansion{} ideal i = x^2,y^2-u^3,v; qring Q = std(i); changeord("Q'","lp",Q); Q'; @expansion{} // basering is now Q' @expansion{} // characteristic : 0 @expansion{} // number of vars : 4 @expansion{} // block 1 : ordering lp @expansion{} // : names x y u v @expansion{} // block 2 : ordering C @expansion{} // quotient ring from ideal @expansion{} _[1]=v @expansion{} _[2]=x2 @expansion{} _[3]=y2-u3 kill R,Q,Q'; if(system("with","Namespaces")) @{ if( nameof(Current) == "Ring" ) @{ kill Top::R,Top::Q'; @} else @{ kill Ring::R,Ring::Q'; @} @} @c end example changeord d2t_singular/ring_lib.doc:108 @end smallexample @c ---end content changeord--- @c ------------------- changevar ------------- @node changevar, defring, changeord, ring_lib @subsubsection changevar @cindex changevar @c ---content changevar--- Procedure from library @code{ring.lib} (@pxref{ring_lib}). @table @asis @item @strong{Usage:} changevar(newr,vars[,r]); newr,vars=strings, r=ring/qring @item @strong{Create:} creates a new ring with name `newr` and makes it the basering if r is an existing ring/qring [default: r=basering]. @*The new ring differs from the old ring only in the variables. If, say, (newr,vars) = ("R","t()") and the ring r exists and has n variables, the new basering will have name R and variables t(1),...,t(n). @*If vars = "a,b,c,d", the new ring will have the variables a,b,c,d. @item @strong{Return:} No return value @item @strong{Note:} This procedure is useful in connection with the procedure ringtensor, when a conflict between variable names must be avoided. This proc uses 'execute' or calls a procedure using 'execute'. If you use it in your own proc, let the local names of your proc start with @@. @end table @strong{Example:} @smallexample @c computed example changevar d2t_singular/ring_lib.doc:160 LIB "ring.lib"; ring r=0,(x,y,u,v),(dp(2),ds); ideal i = x^2,y^2-u^3,v; qring Q = std(i); setring(r); changevar("R","A()"); R; ""; @expansion{} // basering is now R @expansion{} // characteristic : 0 @expansion{} // number of vars : 4 @expansion{} // block 1 : ordering dp @expansion{} // : names A(1) A(2) @expansion{} // block 2 : ordering ds @expansion{} // : names A(3) A(4) @expansion{} // block 3 : ordering C @expansion{} changevar("Q'","a,b,c,d",Q); Q'; @expansion{} // basering is now Q' @expansion{} // characteristic : 0 @expansion{} // number of vars : 4 @expansion{} // block 1 : ordering dp @expansion{} // : names a b @expansion{} // block 2 : ordering ds @expansion{} // : names c d @expansion{} // block 3 : ordering C @expansion{} // quotient ring from ideal @expansion{} _[1]=d @expansion{} _[2]=a2 @expansion{} _[3]=b2-c3 kill R,Q,Q'; if(system("with","Namespaces")) @{ if( nameof(Current) == "Ring" ) @{ kill Top::R,Top::Q'; @} else @{ kill Ring::R,Ring::Q'; @} @} @c end example changevar d2t_singular/ring_lib.doc:160 @end smallexample @c ---end content changevar--- @c ------------------- defring ------------- @node defring, defrings, changevar, ring_lib @subsubsection defring @cindex defring @c ---content defring--- Procedure from library @code{ring.lib} (@pxref{ring_lib}). @table @asis @item @strong{Usage:} defring(s1,s2,n,s3,s4); s1..s4=strings, n=integer @item @strong{Create:} Define a ring with name 's1', characteristic 's2', ordering 's4' and n variables with names derived from s3 and make it the basering. If s3 is a single letter, say s3="a", and if n<=26 then a and the following n-1 letters from the alphabet (cyclic order) are taken as variables. If n>26 or if s3 is a single letter followed by (, say s3="T(", the variables are T(1),...,T(n). @item @strong{Return:} No return value @item @strong{Note:} This proc is useful for defining a ring in a procedure. This proc uses 'execute' or calls a procedure using 'execute'. If you use it in your own proc, let the local names of your proc start with @@. @end table @strong{Example:} @smallexample @c computed example defring d2t_singular/ring_lib.doc:211 LIB "ring.lib"; defring("r","0",5,"u","ls"); r; ""; @expansion{} // basering is now: r @expansion{} // characteristic : 0 @expansion{} // number of vars : 5 @expansion{} // block 1 : ordering ls @expansion{} // : names u v w x y @expansion{} // block 2 : ordering C @expansion{} defring("R","2,A",10,"x(","dp(3),ws(1,2,3),ds"); R; @expansion{} // basering is now: R @expansion{} // characteristic : 2 @expansion{} // 1 parameter : A @expansion{} // minpoly : 0 @expansion{} // number of vars : 10 @expansion{} // block 1 : ordering dp @expansion{} // : names x(1) x(2) x(3) @expansion{} // block 2 : ordering ws @expansion{} // : names x(4) x(5) x(6) @expansion{} // : weights 1 2 3 @expansion{} // block 3 : ordering ds @expansion{} // : names x(7) x(8) x(9) x(10) @expansion{} // block 4 : ordering C kill r,R; if(system("with","Namespaces")) @{ if( nameof(Current) == "Ring" ) @{ kill Top::r,Top::R; @} else @{ kill Ring::r,Ring::R; @} @} @c end example defring d2t_singular/ring_lib.doc:211 @end smallexample @c ---end content defring--- @c ------------------- defrings ------------- @node defrings, defringp, defring, ring_lib @subsubsection defrings @cindex defrings @c ---content defrings--- Procedure from library @code{ring.lib} (@pxref{ring_lib}). @table @asis @item @strong{Usage:} defrings(n,[p]); n,p integers @item @strong{Create:} Defines a ring with name Sn, characteristic p, ordering ds and n variables x,y,z,a,b,...if n<=26 (resp. x(1..n) if n>26) and makes it the basering (default: p=32003) @item @strong{Return:} No return value @end table @strong{Example:} @smallexample @c computed example defrings d2t_singular/ring_lib.doc:249 LIB "ring.lib"; defrings(5,0); S5; ""; @expansion{} // basering is now: ring S5=0,(x,y,z,a,b),ds; @expansion{} // characteristic : 0 @expansion{} // number of vars : 5 @expansion{} // block 1 : ordering ds @expansion{} // : names x y z a b @expansion{} // block 2 : ordering C @expansion{} defrings(30); S30; @expansion{} // basering is now: ring S30=32003,x(1..30),ds; @expansion{} // characteristic : 32003 @expansion{} // number of vars : 30 @expansion{} // block 1 : ordering ds @expansion{} // : names x(1) x(2) x(3) x(4) x(5) x(6) x(7) x(8) x(\ 9) x(10) x(11) x(12) x(13) x(14) x(15) x(16) x(17) x(18) x(19) x(20) x(21\ ) x(22) x(23) x(24) x(25) x(26) x(27) x(28) x(29) x(30) @expansion{} // block 2 : ordering C kill S5, S30; if(system("with","Namespaces")) @{ if( nameof(Current) == "Ring" ) @{ kill Top::S5,Top::S30; @} else @{ kill Ring::S5,Ring::S30; @} @} @c end example defrings d2t_singular/ring_lib.doc:249 @end smallexample @c ---end content defrings--- @c ------------------- defringp ------------- @node defringp, extendring, defrings, ring_lib @subsubsection defringp @cindex defringp @c ---content defringp--- Procedure from library @code{ring.lib} (@pxref{ring_lib}). @table @asis @item @strong{Usage:} defringp(n,[p]); n,p=integers @item @strong{Create:} defines a ring with name Pn, characteristic p, ordering dp and n variables x,y,z,a,b,...if n<=26 (resp. x(1..n) if n>26) and makes it the basering (default: p=32003) @item @strong{Return:} No return value @end table @strong{Example:} @smallexample @c computed example defringp d2t_singular/ring_lib.doc:287 LIB "ring.lib"; defringp(5,0); P5; ""; @expansion{} // basering is now: ring P5=0,(x,y,z,a,b),dp; @expansion{} // characteristic : 0 @expansion{} // number of vars : 5 @expansion{} // block 1 : ordering dp @expansion{} // : names x y z a b @expansion{} // block 2 : ordering C @expansion{} defringp(30); P30; @expansion{} // basering is now: ring P30=32003,x(1..30),dp; @expansion{} // characteristic : 32003 @expansion{} // number of vars : 30 @expansion{} // block 1 : ordering dp @expansion{} // : names x(1) x(2) x(3) x(4) x(5) x(6) x(7) x(8) x(\ 9) x(10) x(11) x(12) x(13) x(14) x(15) x(16) x(17) x(18) x(19) x(20) x(21\ ) x(22) x(23) x(24) x(25) x(26) x(27) x(28) x(29) x(30) @expansion{} // block 2 : ordering C kill P5, P30; if(system("with","Namespaces")) @{ if( nameof(Current) == "Ring" ) @{ kill Top::P5,Top::P30; @} else @{ kill Ring::P5,Ring::P30; @} @} @c end example defringp d2t_singular/ring_lib.doc:287 @end smallexample @c ---end content defringp--- @c ------------------- extendring ------------- @node extendring, fetchall, defringp, ring_lib @subsubsection extendring @cindex extendring @c ---content extendring--- Procedure from library @code{ring.lib} (@pxref{ring_lib}). @table @asis @item @strong{Usage:} extendring(na,n,va,o[iv,i,r]); na,va,o=strings, @*n,i=integers, r=ring, iv=intvec of positive integers or iv=0 @item @strong{Create:} Define a ring with name `na` which extends the ring r by adding n new variables in front of [after, if i!=0] the old variables and make it the basering [default: (i,r)=(0,basering)]. @* -- The characteristic is the characteristic of r. @* -- The new vars are derived from va. If va is a single letter, say va="T", and if n<=26 then T and the following n-1 letters from T..Z..T (resp. T(1..n) if n>26) are taken as additional variables. If va is a single letter followed by (, say va="x(", the new variables are x(1),...,x(n). @* -- The ordering is the product ordering between the ordering of r and an ordering derived from `o` [and iv]. @* - If o contains a 'c' or a 'C' in front resp. at the end this is taken for the whole ordering in front resp. at the end. If o does not contain a 'c' or a 'C' the same rule applies to ordstr(r). @* - If no intvec iv is given, or if iv=0, o may be any allowed ordstr, like "ds" or "dp(2),wp(1,2,3),Ds(2)" or "ds(a),dp(b),ls" if a and b are globally (!) defined integers and if a+b+1<=n. If, however, a and b are local to a proc calling extendring, the intvec iv must be used to let extendring know the values of a and b @* - If an intvec iv !=0 is given, iv[1],iv[2],... is taken for the 1st, 2nd,... block of o, if o contains no substring "w" or "W" i.e. no weighted ordering (in the above case o="ds,dp,ls" and iv=a,b). @*If o contains a weighted ordering (only one (!) weighted block is allowed) iv[1] is taken as size for the weight-vector, the next iv[1] values of iv are taken as weights and the remaining values of iv as block-size for the remaining non-weighted blocks. e.g. o="dp,ws,Dp,ds", iv=3,2,3,4,2,5 creates the ordering dp(2),ws(2,3,4),Dp(5),ds @item @strong{Return:} No return value @item @strong{Note:} This proc is useful for adding deformation parameters. @*This proc uses 'execute' or calls a procedure using 'execute'. If you use it in your own proc, let the local names of your proc start with @@ (see the file HelpForProc) @end table @strong{Example:} @smallexample @c computed example extendring d2t_singular/ring_lib.doc:358 LIB "ring.lib"; ring r=0,(x,y,z),ds; show(r);""; @expansion{} // ring: (0),(x,y,z),(ds(3),C); @expansion{} // minpoly = 0 @expansion{} // objects belonging to this ring: @expansion{} //blocksize is derived from no of vars: int t=5; extendring("R1",t,"a","dp"); //t global: "dp" -> "dp(5)" @expansion{} // basering is now R1 show(R1); ""; @expansion{} // ring: (0),(a,b,c,d,e,x,y,z),(dp(5),ds(3),C); @expansion{} // minpoly = 0 @expansion{} // objects belonging to this ring: @expansion{} extendring("R2",4,"T(","c,dp",1,r); //"dp" -> "c,..,dp(4)" @expansion{} // basering is now R2 show(R2);""; @expansion{} // ring: (0),(x,y,z,T(1),T(2),T(3),T(4)),(c,ds(3),dp(4)); @expansion{} // minpoly = 0 @expansion{} // objects belonging to this ring: @expansion{} //no intvec given, blocksize given: given blocksize is used: extendring("R3",4,"T(","dp(2)",0,r); // "dp(2)" -> "dp(2)" @expansion{} // basering is now R3 show(R3);""; @expansion{} // ring: (0),(T(1),T(2),T(3),T(4),x,y,z),(dp(2),ds(5),C); @expansion{} // minpoly = 0 @expansion{} // objects belonging to this ring: @expansion{} //intvec given: weights and blocksize is derived from given intvec //(no specification of a blocksize in the given ordstr is allowed!) //if intvec does not cover all given blocks, the last block is used //for the remaining variables, if intvec has too many components, //the last ones are ignored intvec v=3,2,3,4,1,3; extendring("R4",10,"A","ds,ws,Dp,dp",v,0,r); @expansion{} // basering is now R4 //v covers 3 blocks: v[1] (=3) : no of components of ws //next v[1] values (=v[2..4]) give weights //remaining components of v are used for the remaining blocks show(R4); @expansion{} // ring: (0),(A,B,C,D,E,F,G,H,I,J,x,y,z),(ds(1),ws(2,3,4),Dp(3),dp(3),ds(\ 3),C); @expansion{} // minpoly = 0 @expansion{} // objects belonging to this ring: kill r,R1,R2,R3,R4; if(system("with","Namespaces")) @{ if( nameof(Current) == "Ring" ) @{ kill Top::R1,Top::R2,Top::R3,Top::R4; @} else @{ kill Ring::R1,Ring::R2,Ring::R3,Ring::R4; @} @} @c end example extendring d2t_singular/ring_lib.doc:358 @end smallexample @c ---end content extendring--- @c ------------------- fetchall ------------- @node fetchall, imapall, extendring, ring_lib @subsubsection fetchall @cindex fetchall @c ---content fetchall--- Procedure from library @code{ring.lib} (@pxref{ring_lib}). @table @asis @item @strong{Usage:} fetchall(R[,s]); R=ring/qring, s=string @item @strong{Create:} fetch all objects of ring R (of type poly/ideal/vector/module/number/ matrix) into the basering. @*If no 3rd argument is present, the names are the same as in R. If, say, f is a poly in R and the 3rd argument is the string "R", then f is mapped to f_R etc. @item @strong{Return:} no return value @item @strong{Note:} As fetch, this procedure maps the 1st, 2nd, ... variable of R to the 1st, 2nd, ... variable of the basering. @*The 3rd argument is useful in order to avoid conflicts of names, the empty string is allowed @item @strong{Caution:} fetchall does not work inside a procedure. @*It does not work if R contains a map. @end table @strong{Example:} @smallexample @c computed example fetchall d2t_singular/ring_lib.doc:428 LIB "ring.lib"; // The example is not shown since fetchall does not work in a procedure; // (and hence not in the example procedure). Try the following commands: // ring R=0,(x,y,z),dp; // ideal j=x,y2,z2; // matrix M[2][3]=1,2,3,x,y,z; // j; print(M); // ring S=0,(a,b,c),ds; // fetchall(R); //map from R to S: x->a, y->b, z->c; // names(S); // j; print(M); // fetchall(S,"1"); //identity map of S: copy objects, change names // names(S); // kill R,S; @c end example fetchall d2t_singular/ring_lib.doc:428 @end smallexample @c ---end content fetchall--- @c ------------------- imapall ------------- @node imapall, mapall, fetchall, ring_lib @subsubsection imapall @cindex imapall @c ---content imapall--- Procedure from library @code{ring.lib} (@pxref{ring_lib}). @table @asis @item @strong{Usage:} imapall(R[,s]); R=ring/qring, s=string @item @strong{Create:} map all objects of ring R (of type poly/ideal/vector/module/number/ matrix) into the basering, by applying imap to all objects of R. If no 3rd argument is present, the names are the same as in R. If, say, f is a poly in R and the 3rd argument is the string "R", then f is mapped to f_R etc. @item @strong{Return:} no return value @item @strong{Note:} As imap, this procedure maps the variables of R to the variables with the same name in the basering, the other variables are mapped to 0. The 3rd argument is useful in order to avoid conflicts of names, the empty string is allowed @item @strong{Caution:} imapall does not work inside a procedure @*It does not work if R contains a map @end table @strong{Example:} @smallexample @c computed example imapall d2t_singular/ring_lib.doc:481 LIB "ring.lib"; // The example is not shown since imapall does not work in a procedure // (and hence not in the example procedure). Try the following commands: // ring R=0,(x,y,z,u),dp; // ideal j=x,y,z,u2+ux+z; // matrix M[2][3]=1,2,3,x,y,uz; // j; print(M); // ring S=0,(a,b,c,x,z,y),ds; // imapall(R); //map from R to S: x->x, y->y, z->z, u->0 // names(S); // j; print(M); // imapall(S,"1"); //identity map of S: copy objects, change names // names(S); // kill R,S; @c end example imapall d2t_singular/ring_lib.doc:481 @end smallexample @c ---end content imapall--- @c ------------------- mapall ------------- @node mapall, ord_test, imapall, ring_lib @subsubsection mapall @cindex mapall @c ---content mapall--- Procedure from library @code{ring.lib} (@pxref{ring_lib}). @table @asis @item @strong{Usage:} mapall(R,i[,s]); R=ring/qring, i=ideal of basering, s=string @item @strong{Create:} map all objects of ring R (of type poly/ideal/vector/module/number/ matrix, map) into the basering, by mapping the j-th variable of R to the j-th generator of the ideal i. If no 3rd argument is present, the names are the same as in R. If, say, f is a poly in R and the 3rd argument is the string "R", then f is mapped to f_R etc. @item @strong{Return:} no return value. @item @strong{Note:} This procedure has the same effect as defining a map, say psi, by map psi=R,i; and then applying psi to all objects of R. In particular, maps from R to some ring S are composed with psi, creating thus a map from the basering to S. @*mapall may be combined with copyring to change vars for all objects. The 3rd argument is useful in order to avoid conflicts of names, the empty string is allowed. @item @strong{Caution:} mapall does not work inside a procedure. @end table @strong{Example:} @smallexample @c computed example mapall d2t_singular/ring_lib.doc:536 LIB "ring.lib"; // The example is not shown since mapall does not work in a procedure // (and hence not in the example procedure). Try the following commands: // ring R=0,(x,y,z),dp; // ideal j=x,y,z; // matrix M[2][3]=1,2,3,x,y,z; // map phi=R,x2,y2,z2; // ring S=0,(a,b,c),ds; // ideal i=c,a,b; // mapall(R,i); //map from R to S: x->c, y->a, z->b // names(S); // j; print(M); phi; //phi maps R to S: x->c2, y->a2, z->b2 // ideal i1=a2,a+b,1; // mapall(R,i1,""); //map from R to S: x->a2, y->a+b, z->1 // names(S); // j_; print(M_); phi_; // changevar("T","x()",R); //change vars in R and call result T // mapall(R,maxideal(1)); //identity map from R to T // names(T); // j; print(M); phi; // kill R,S,T; @c end example mapall d2t_singular/ring_lib.doc:536 @end smallexample @c ---end content mapall--- @c ------------------- ord_test ------------- @node ord_test, ringtensor, mapall, ring_lib @subsubsection ord_test @cindex ord_test @c ---content ord_test--- Procedure from library @code{ring.lib} (@pxref{ring_lib}). @table @asis @item @strong{Usage:} ord_test(r); r ring @item @strong{Return:} int 1 (resp. -1, resp. 0) if ordering of r is global (resp. local, resp. mixed) @end table @strong{Example:} @smallexample @c computed example ord_test d2t_singular/ring_lib.doc:580 LIB "ring.lib"; ring R = 0,(x,y),dp; ring S = 0,(u,v),ls; ord_test(R); @expansion{} 1 ord_test(S); @expansion{} -1 ord_test(R+S); @expansion{} 0 @c end example ord_test d2t_singular/ring_lib.doc:580 @end smallexample @c ---end content ord_test--- @c ------------------- ringtensor ------------- @node ringtensor, ringweights, ord_test, ring_lib @subsubsection ringtensor @cindex ringtensor @c ---content ringtensor--- Procedure from library @code{ring.lib} (@pxref{ring_lib}). @table @asis @item @strong{Usage:} ringtensor(s,r1,r2,...); s=string, r1,r2,...=rings @item @strong{Create:} A new base ring with name `s` if r1,r2,... are existing rings. If, say, s = "R" and the rings r1,r2,... exist, the new ring will have name R, variables from all rings r1,r2,... and as monomial ordering the block (product) ordering of r1,r2,... . Hence, R is the tensor product of the rings r1,r2,... with ordering matrix equal to the direct sum of the ordering matrices of r1,r2,... @item @strong{Return:} no return value @item @strong{Note:} The characteristic of the new ring will be that of r1. The names of variables in the rings r1,r2,... should differ (if a name, say x, occurs in r1 and r2, then, in the new ring r, x always refers to the variable with name x in r1, there is no access to x in r2). The procedure works also for quotient rings ri, if the characteristic of ri is compatible with the characteristic of r1 (i.e. if imap from ri to r1 is implemented) @*This proc uses 'execute' or calls a procedure using 'execute'. If you use it in your own proc, let the local names of your proc start with @@ (see the file HelpForProc) @end table @strong{Example:} @smallexample @c computed example ringtensor d2t_singular/ring_lib.doc:628 LIB "ring.lib"; ring r=32003,(x,y,u,v),dp; ring s=0,(a,b,c),wp(1,2,3); ring t=0,x(1..5),(c,ls); ringtensor("R",r,s,t); @expansion{} // basering is now R type R; @expansion{} // R [0] *ring @expansion{} // characteristic : 32003 @expansion{} // number of vars : 12 @expansion{} // block 1 : ordering dp @expansion{} // : names x y u v @expansion{} // block 2 : ordering wp @expansion{} // : names a b c @expansion{} // : weights 1 2 3 @expansion{} // block 3 : ordering ls @expansion{} // : names x(1) x(2) x(3) x(4) x(5) @expansion{} // block 4 : ordering C setring s; ideal i = a2+b3+c5; changevar("S","x,y,z"); //change vars of sand make S the basering @expansion{} // basering is now S qring qS =std(fetch(s,i)); //create qring of S mod i (mapped to S) changevar("T","d,e,f,g,h",t); //change vars of t and make T the basering @expansion{} // basering is now T qring qT=std(d2+e2-f3); //create qring of T mod d2+e2-f3 ringtensor("Q",s,qS,t,qT); @expansion{} // basering is now Q type Q; @expansion{} // Q [0] *qring @expansion{} // characteristic : 0 @expansion{} // number of vars : 16 @expansion{} // block 1 : ordering wp @expansion{} // : names a b c @expansion{} // : weights 1 2 3 @expansion{} // block 2 : ordering wp @expansion{} // : names x y z @expansion{} // : weights 1 2 3 @expansion{} // block 3 : ordering ls @expansion{} // : names x(1) x(2) x(3) x(4) x(5) @expansion{} // block 4 : ordering ls @expansion{} // : names d e f g h @expansion{} // block 5 : ordering C @expansion{} // quotient ring from ideal @expansion{} _[1]=f3-e2-d2 @expansion{} _[2]=z5+y3+x2 kill R,Q,S,T; if(system("with","Namespaces")) @{ if( nameof(Current) == "Ring" ) @{ kill Top::R,Top::Q,Top::S,Top::T; @} else @{ kill Ring::R,Ring::Q,Ring::S,Ring::T; @} @} @c end example ringtensor d2t_singular/ring_lib.doc:628 @end smallexample @c ---end content ringtensor--- @c ------------------- ringweights ------------- @node ringweights,, ringtensor, ring_lib @subsubsection ringweights @cindex ringweights @c ---content ringweights--- Procedure from library @code{ring.lib} (@pxref{ring_lib}). @table @asis @item @strong{Usage:} ringweights(P); P=name of an existing ring (true name, not a string) @item @strong{Return:} intvec consisting of the weights of the variables of P, as they appear when typing P;. @item @strong{Note:} This is useful when enlarging P but keeping the weights of the old variables. @end table @strong{Example:} @smallexample @c computed example ringweights d2t_singular/ring_lib.doc:677 LIB "ring.lib"; ring r0 = 0,(x,y,z),dp; ringweights(r0); @expansion{} 1,1,1 ring r1 = 0,x(1..5),(ds(3),wp(2,3)); ringweights(r1);""; @expansion{} 1,1,1,2,3 @expansion{} // an example for enlarging the ring, keeping the first weights: intvec v = ringweights(r1),6,2,3,4,5; ring R = 0,x(1..10),(a(v),dp); ordstr(R); @expansion{} a(1,1,1,2,3,6,2,3,4,5),dp(10),C @c end example ringweights d2t_singular/ring_lib.doc:677 @end smallexample @c ---end content ringweights--- texi2html-1.82/test/singular_manual/d2t_singular/gaussman_lib.tex0000644000175000017500000010166511264347126027172 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/gaussman_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/gaussman_lib.doc INSTEAD @c library version: (1.33.2.26,2003/02/10) @c library file: ../Singular/LIB/gaussman.lib @cindex gaussman.lib @cindex gaussman_lib @table @asis @item @strong{Library:} gaussman.lib @item @strong{Purpose:} Algorithmic Gauss-Manin Connection @item @strong{Author:} Mathias Schulze, email: mschulze@@mathematik.uni-kl.de @item @strong{Overview:} A library to compute Hodge-theoretic invariants @*of isolated hypersurface singularities @end table @strong{Procedures:} @menu * gmsring:: Gauss-Manin system of t with variable s * gmsnf:: Gauss-Manin normal form of p * gmscoeffs:: Gauss-Manin basis representation of p * bernstein:: roots of the Bernstein polynomial of t * monodromy:: Jordan data of complex monodromy of t * spectrum:: singularity spectrum of t * sppairs:: spectral pairs of t * spnf:: spectrum normal form of (a,m,V) * sppnf:: spectral pairs normal form of (a,w,m,V) * vfilt:: V-filtration of t on Brieskorn lattice * vwfilt:: weighted V-filtration of t on Brieskorn lattice * tmatrix:: C[[s]]-matrix of t on Brieskorn lattice * endvfilt:: endomorphism V-filtration on Jacobian algebra * spprint:: print spectrum sp * sppprint:: print spectral pairs spp * spadd:: sum of spectra sp1 and sp2 * spsub:: difference of spectra sp1 and sp2 * spmul:: linear combination of spectra sp * spissemicont:: semicontinuity test of spectrum sp * spsemicont:: semicontinuous combinations of spectra sp0 in sp * spmilnor:: Milnor number of spectrum sp * spgeomgenus:: geometrical genus of spectrum sp * spgamma:: gamma invariant of spectrum sp @end menu @cindex singularities @cindex Gauss-Manin connection @cindex Brieskorn lattice @cindex monodromy @cindex spectrum @cindex spectral pairs @cindex mixed Hodge structure @cindex V-filtration @cindex weight filtration @c inserted refs from d2t_singular/gaussman_lib.doc:56 @ifinfo @menu See also: * mondromy_lib:: * spectrum_lib:: @end menu @end ifinfo @iftex @strong{See also:} @ref{mondromy_lib}; @ref{spectrum_lib}. @end iftex @c end inserted refs from d2t_singular/gaussman_lib.doc:56 @c ---end content LibInfo--- @c ------------------- gmsring ------------- @node gmsring, gmsnf,, gaussman_lib @subsubsection gmsring @cindex gmsring @c ---content gmsring--- Procedure from library @code{gaussman.lib} (@pxref{gaussman_lib}). @table @asis @item @strong{Usage:} gmsring(t,s); poly t, string s @item @strong{Assume:} characteristic 0; local degree ordering; @*isolated critical point 0 of t @item @strong{Return:} @format ring G; Gauss-Manin system of t with variable s poly gmspoly=t; ideal gmsjacob; Jacobian ideal of t ideal gmsstd; standard basis of Jacobian ideal matrix gmsmatrix; matrix(gmsjacob)*gmsmatrix==matrix(gmsstd) ideal gmsbasis; monomial vector space basis of Jacobian algebra int gmsmaxdeg; maximal weight of variables @end format @item @strong{Note:} gmsbasis is a C[[s]]-basis of H'' and [t,s]=s^2 @cindex singularities @cindex Gauss-Manin connection @cindex Brieskorn lattice @end table @strong{Example:} @smallexample @c computed example gmsring d2t_singular/gaussman_lib.doc:97 LIB "gaussman.lib"; ring R=0,(x,y),ds; poly t=x5+x2y2+y5; def G=gmsring(t,"s"); setring(G); gmspoly; @expansion{} x2y2+x5+y5 print(gmsjacob); @expansion{} 2xy2+5x4, @expansion{} 2x2y+5y4 print(gmsstd); @expansion{} 2x2y+5y4, @expansion{} 2xy2+5x4, @expansion{} 5x5-5y5, @expansion{} 10y6+25x3y4 print(gmsmatrix); @expansion{} 0,1,x, -2xy, @expansion{} 1,0,-y,2y2+5x3 print(gmsbasis); @expansion{} y5, @expansion{} y4, @expansion{} y3, @expansion{} y2, @expansion{} xy, @expansion{} y, @expansion{} x4, @expansion{} x3, @expansion{} x2, @expansion{} x, @expansion{} 1 gmsmaxdeg; @expansion{} 1 @c end example gmsring d2t_singular/gaussman_lib.doc:97 @end smallexample @c ---end content gmsring--- @c ------------------- gmsnf ------------- @node gmsnf, gmscoeffs, gmsring, gaussman_lib @subsubsection gmsnf @cindex gmsnf @c ---content gmsnf--- Procedure from library @code{gaussman.lib} (@pxref{gaussman_lib}). @table @asis @item @strong{Usage:} gmsnf(p,K); poly p, int K @item @strong{Assume:} basering returned by gmsring @item @strong{Return:} @format list nf; ideal nf[1]; projection of p to C[[s]] mod s^(K+1) ideal nf[2]; p==nf[1]+nf[2] @end format @item @strong{Note:} computation can be continued by setting p=nf[2] @cindex singularities @cindex Gauss-Manin connection @cindex Brieskorn lattice @end table @strong{Example:} @smallexample @c computed example gmsnf d2t_singular/gaussman_lib.doc:143 LIB "gaussman.lib"; ring R=0,(x,y),ds; poly t=x5+x2y2+y5; def G=gmsring(t,"s"); setring(G); list l0=gmsnf(gmspoly,0); print(l0[1]); @expansion{} -1/2y5 list l1=gmsnf(gmspoly,1); print(l1[1]); @expansion{} -1/2y5+1/2s list l=gmsnf(l0[2],1); print(l[1]); @expansion{} 1/2s @c end example gmsnf d2t_singular/gaussman_lib.doc:143 @end smallexample @c ---end content gmsnf--- @c ------------------- gmscoeffs ------------- @node gmscoeffs, bernstein, gmsnf, gaussman_lib @subsubsection gmscoeffs @cindex gmscoeffs @c ---content gmscoeffs--- Procedure from library @code{gaussman.lib} (@pxref{gaussman_lib}). @table @asis @item @strong{Usage:} gmscoeffs(p,K); poly p, int K @item @strong{Assume:} basering constructed by gmsring @item @strong{Return:} @format list l; matrix l[1]; C[[s]]-basis representation of p mod s^(K+1) ideal l[2]; p==matrix(gmsbasis)*l[1]+l[2] @end format @item @strong{Note:} computation can be continued by setting p=l[2] @cindex singularities @cindex Gauss-Manin connection @cindex Brieskorn lattice @end table @strong{Example:} @smallexample @c computed example gmscoeffs d2t_singular/gaussman_lib.doc:189 LIB "gaussman.lib"; ring R=0,(x,y),ds; poly t=x5+x2y2+y5; def G=gmsring(t,"s"); setring(G); list l0=gmscoeffs(gmspoly,0); print(l0[1]); @expansion{} -1/2, @expansion{} 0, @expansion{} 0, @expansion{} 0, @expansion{} 0, @expansion{} 0, @expansion{} 0, @expansion{} 0, @expansion{} 0, @expansion{} 0, @expansion{} 0 list l1=gmscoeffs(gmspoly,1); print(l1[1]); @expansion{} -1/2, @expansion{} 0, @expansion{} 0, @expansion{} 0, @expansion{} 0, @expansion{} 0, @expansion{} 0, @expansion{} 0, @expansion{} 0, @expansion{} 0, @expansion{} 1/2s list l=gmscoeffs(l0[2],1); print(l[1]); @expansion{} 0, @expansion{} 0, @expansion{} 0, @expansion{} 0, @expansion{} 0, @expansion{} 0, @expansion{} 0, @expansion{} 0, @expansion{} 0, @expansion{} 0, @expansion{} 1/2s @c end example gmscoeffs d2t_singular/gaussman_lib.doc:189 @end smallexample @c ---end content gmscoeffs--- @c ------------------- bernstein ------------- @node bernstein, monodromy, gmscoeffs, gaussman_lib @subsubsection bernstein @cindex bernstein @c ---content bernstein--- Procedure from library @code{gaussman.lib} (@pxref{gaussman_lib}). @table @asis @item @strong{Usage:} bernstein(t); poly t @item @strong{Assume:} characteristic 0; local degree ordering; @*isolated critical point 0 of t @item @strong{Return:} ideal r; roots of the Bernstein polynomial b excluding the root -1 @item @strong{Note:} the roots of b are negative rational numbers and -1 is a root of b @cindex singularities @cindex Gauss-Manin connection @cindex Brieskorn lattice @cindex Bernstein polynomial @end table @strong{Example:} @smallexample @c computed example bernstein d2t_singular/gaussman_lib.doc:233 LIB "gaussman.lib"; ring R=0,(x,y),ds; poly t=x5+x2y2+y5; bernstein(t); @expansion{} [1]: @expansion{} _[1]=-1/2 @expansion{} _[2]=-7/10 @expansion{} _[3]=-9/10 @expansion{} _[4]=-1 @expansion{} _[5]=-11/10 @expansion{} _[6]=-13/10 @expansion{} [2]: @expansion{} 2,1,1,2,1,1 @c end example bernstein d2t_singular/gaussman_lib.doc:233 @end smallexample @c ---end content bernstein--- @c ------------------- monodromy ------------- @node monodromy, spectrum, bernstein, gaussman_lib @subsubsection monodromy @cindex monodromy @c ---content monodromy--- Procedure from library @code{gaussman.lib} (@pxref{gaussman_lib}). @table @asis @item @strong{Usage:} monodromy(t); poly t @item @strong{Assume:} characteristic 0; local degree ordering; @*isolated critical point 0 of t @item @strong{Return:} @format list l; Jordan data jordan(M) of monodromy matrix exp(-2*pi*i*M) ideal l[1]; number l[1][i]; eigenvalue of i-th Jordan block of M intvec l[2]; int l[2][i]; size of i-th Jordan block of M intvec l[3]; int l[3][i]; multiplicity of i-th Jordan block of M @end format @cindex singularities @cindex Gauss-Manin connection @cindex Brieskorn lattice @cindex monodromy @end table @strong{Example:} @smallexample @c computed example monodromy d2t_singular/gaussman_lib.doc:275 LIB "gaussman.lib"; ring R=0,(x,y),ds; poly t=x5+x2y2+y5; monodromy(t); @expansion{} [1]: @expansion{} _[1]=1/2 @expansion{} _[2]=7/10 @expansion{} _[3]=9/10 @expansion{} _[4]=1 @expansion{} _[5]=11/10 @expansion{} _[6]=13/10 @expansion{} [2]: @expansion{} 2,1,1,1,1,1 @expansion{} [3]: @expansion{} 1,2,2,1,2,2 @c end example monodromy d2t_singular/gaussman_lib.doc:275 @end smallexample @c inserted refs from d2t_singular/gaussman_lib.doc:282 @ifinfo @menu See also: * linalg_lib:: * mondromy_lib:: @end menu @end ifinfo @iftex @strong{See also:} @ref{linalg_lib}; @ref{mondromy_lib}. @end iftex @c end inserted refs from d2t_singular/gaussman_lib.doc:282 @c ---end content monodromy--- @c ------------------- spectrum ------------- @node spectrum, sppairs, monodromy, gaussman_lib @subsubsection spectrum @cindex spectrum @c ---content spectrum--- Procedure from library @code{gaussman.lib} (@pxref{gaussman_lib}). @table @asis @item @strong{Usage:} spectrum(t); poly t @item @strong{Assume:} characteristic 0; local degree ordering; @*isolated critical point 0 of t @item @strong{Return:} @format list sp; singularity spectrum of t ideal sp[1]; number sp[1][i]; i-th spectral number intvec sp[2]; int sp[2][i]; multiplicity of i-th spectral number @end format @cindex singularities @cindex Gauss-Manin connection @cindex Brieskorn lattice @cindex mixed Hodge structure @cindex V-filtration @cindex spectrum @end table @strong{Example:} @smallexample @c computed example spectrum d2t_singular/gaussman_lib.doc:321 LIB "gaussman.lib"; ring R=0,(x,y),ds; poly t=x5+x2y2+y5; spprint(spectrum(t)); @expansion{} (-1/2,1),(-3/10,2),(-1/10,2),(0,1),(1/10,2),(3/10,2),(1/2,1) @c end example spectrum d2t_singular/gaussman_lib.doc:321 @end smallexample @c inserted refs from d2t_singular/gaussman_lib.doc:328 @ifinfo @menu See also: * spectrum_lib:: @end menu @end ifinfo @iftex @strong{See also:} @ref{spectrum_lib}. @end iftex @c end inserted refs from d2t_singular/gaussman_lib.doc:328 @c ---end content spectrum--- @c ------------------- sppairs ------------- @node sppairs, spnf, spectrum, gaussman_lib @subsubsection sppairs @cindex sppairs @c ---content sppairs--- Procedure from library @code{gaussman.lib} (@pxref{gaussman_lib}). @table @asis @item @strong{Usage:} sppairs(t); poly t @item @strong{Assume:} characteristic 0; local degree ordering; @*isolated critical point 0 of t @item @strong{Return:} @format list spp; spectral pairs of t ideal spp[1]; number spp[1][i]; V-filtration index of i-th spectral pair intvec spp[2]; int spp[2][i]; weight filtration index of i-th spectral pair intvec spp[3]; int spp[3][i]; multiplicity of i-th spectral pair @end format @cindex singularities @cindex Gauss-Manin connection @cindex Brieskorn lattice @cindex mixed Hodge structure @cindex V-filtration @cindex weight filtration @cindex spectrum @cindex spectral pairs @end table @strong{Example:} @smallexample @c computed example sppairs d2t_singular/gaussman_lib.doc:371 LIB "gaussman.lib"; ring R=0,(x,y),ds; poly t=x5+x2y2+y5; sppprint(sppairs(t)); @expansion{} ((-1/2,2),1),((-3/10,1),2),((-1/10,1),2),((0,1),1),((1/10,1),2),((3/10,1)\ ,2),((1/2,0),1) @c end example sppairs d2t_singular/gaussman_lib.doc:371 @end smallexample @c inserted refs from d2t_singular/gaussman_lib.doc:378 @ifinfo @menu See also: * spectrum_lib:: @end menu @end ifinfo @iftex @strong{See also:} @ref{spectrum_lib}. @end iftex @c end inserted refs from d2t_singular/gaussman_lib.doc:378 @c ---end content sppairs--- @c ------------------- spnf ------------- @node spnf, sppnf, sppairs, gaussman_lib @subsubsection spnf @cindex spnf @c ---content spnf--- Procedure from library @code{gaussman.lib} (@pxref{gaussman_lib}). @table @asis @item @strong{Assume:} ncols(a)==size(m)==size(V); typeof(V[i])=="int" @item @strong{Return:} order (a[i][,V[i]]) with multiplicity m[i] lexicographically @end table @c ---end content spnf--- @c ------------------- sppnf ------------- @node sppnf, vfilt, spnf, gaussman_lib @subsubsection sppnf @cindex sppnf @c ---content sppnf--- Procedure from library @code{gaussman.lib} (@pxref{gaussman_lib}). @table @asis @item @strong{Assume:} ncols(e)=size(w)=size(m)=size(V); typeof(V[i])=="module" @item @strong{Return:} order (a[i][,w[i]][,V[i]]) with multiplicity m[i] lexicographically @end table @c ---end content sppnf--- @c ------------------- vfilt ------------- @node vfilt, vwfilt, sppnf, gaussman_lib @subsubsection vfilt @cindex vfilt @c ---content vfilt--- Procedure from library @code{gaussman.lib} (@pxref{gaussman_lib}). @table @asis @item @strong{Usage:} vfilt(t); poly t @item @strong{Assume:} characteristic 0; local degree ordering; @*isolated critical point 0 of t @item @strong{Return:} @format list v; V-filtration on H''/s*H'' ideal v[1]; number v[1][i]; V-filtration index of i-th spectral number intvec v[2]; int v[2][i]; multiplicity of i-th spectral number list v[3]; module v[3][i]; vector space of i-th graded part in terms of v[4] ideal v[4]; monomial vector space basis of H''/s*H'' ideal v[5]; standard basis of Jacobian ideal @end format @cindex singularities @cindex Gauss-Manin connection @cindex Brieskorn lattice @cindex mixed Hodge structure @cindex V-filtration @cindex spectrum @end table @strong{Example:} @smallexample @c computed example vfilt d2t_singular/gaussman_lib.doc:455 LIB "gaussman.lib"; ring R=0,(x,y),ds; poly t=x5+x2y2+y5; vfilt(t); @expansion{} [1]: @expansion{} _[1]=-1/2 @expansion{} _[2]=-3/10 @expansion{} _[3]=-1/10 @expansion{} _[4]=0 @expansion{} _[5]=1/10 @expansion{} _[6]=3/10 @expansion{} _[7]=1/2 @expansion{} [2]: @expansion{} 1,2,2,1,2,2,1 @expansion{} [3]: @expansion{} [1]: @expansion{} _[1]=gen(11) @expansion{} [2]: @expansion{} _[1]=gen(10) @expansion{} _[2]=gen(6) @expansion{} [3]: @expansion{} _[1]=gen(9) @expansion{} _[2]=gen(4) @expansion{} [4]: @expansion{} _[1]=gen(5) @expansion{} [5]: @expansion{} _[1]=gen(3) @expansion{} _[2]=gen(8) @expansion{} [6]: @expansion{} _[1]=gen(2) @expansion{} _[2]=gen(7) @expansion{} [7]: @expansion{} _[1]=gen(1) @expansion{} [4]: @expansion{} _[1]=y5 @expansion{} _[2]=y4 @expansion{} _[3]=y3 @expansion{} _[4]=y2 @expansion{} _[5]=xy @expansion{} _[6]=y @expansion{} _[7]=x4 @expansion{} _[8]=x3 @expansion{} _[9]=x2 @expansion{} _[10]=x @expansion{} _[11]=1 @expansion{} [5]: @expansion{} _[1]=2x2y+5y4 @expansion{} _[2]=2xy2+5x4 @expansion{} _[3]=5x5-5y5 @expansion{} _[4]=10y6+25x3y4 @c end example vfilt d2t_singular/gaussman_lib.doc:455 @end smallexample @c inserted refs from d2t_singular/gaussman_lib.doc:462 @ifinfo @menu See also: * spectrum_lib:: @end menu @end ifinfo @iftex @strong{See also:} @ref{spectrum_lib}. @end iftex @c end inserted refs from d2t_singular/gaussman_lib.doc:462 @c ---end content vfilt--- @c ------------------- vwfilt ------------- @node vwfilt, tmatrix, vfilt, gaussman_lib @subsubsection vwfilt @cindex vwfilt @c ---content vwfilt--- Procedure from library @code{gaussman.lib} (@pxref{gaussman_lib}). @table @asis @item @strong{Usage:} vwfilt(t); poly t @item @strong{Assume:} characteristic 0; local degree ordering; @*isolated critical point 0 of t @item @strong{Return:} @format list vw; weighted V-filtration on H''/s*H'' ideal vw[1]; number vw[1][i]; V-filtration index of i-th spectral pair intvec vw[2]; int vw[2][i]; weight filtration index of i-th spectral pair intvec vw[3]; int vw[3][i]; multiplicity of i-th spectral pair list vw[4]; module vw[4][i]; vector space of i-th graded part in terms of vw[5] ideal vw[5]; monomial vector space basis of H''/s*H'' ideal vw[6]; standard basis of Jacobian ideal @end format @cindex singularities @cindex Gauss-Manin connection @cindex Brieskorn lattice @cindex mixed Hodge structure @cindex V-filtration @cindex weight filtration @cindex spectrum @cindex spectral pairs @end table @strong{Example:} @smallexample @c computed example vwfilt d2t_singular/gaussman_lib.doc:509 LIB "gaussman.lib"; ring R=0,(x,y),ds; poly t=x5+x2y2+y5; vwfilt(t); @expansion{} [1]: @expansion{} _[1]=-1/2 @expansion{} _[2]=-3/10 @expansion{} _[3]=-1/10 @expansion{} _[4]=0 @expansion{} _[5]=1/10 @expansion{} _[6]=3/10 @expansion{} _[7]=1/2 @expansion{} [2]: @expansion{} 2,1,1,1,1,1,0 @expansion{} [3]: @expansion{} 1,2,2,1,2,2,1 @expansion{} [4]: @expansion{} [1]: @expansion{} _[1]=gen(11) @expansion{} [2]: @expansion{} _[1]=gen(10) @expansion{} _[2]=gen(6) @expansion{} [3]: @expansion{} _[1]=gen(9) @expansion{} _[2]=gen(4) @expansion{} [4]: @expansion{} _[1]=gen(5) @expansion{} [5]: @expansion{} _[1]=gen(3) @expansion{} _[2]=gen(8) @expansion{} [6]: @expansion{} _[1]=gen(2) @expansion{} _[2]=gen(7) @expansion{} [7]: @expansion{} _[1]=gen(1) @expansion{} [5]: @expansion{} _[1]=y5 @expansion{} _[2]=y4 @expansion{} _[3]=y3 @expansion{} _[4]=y2 @expansion{} _[5]=xy @expansion{} _[6]=y @expansion{} _[7]=x4 @expansion{} _[8]=x3 @expansion{} _[9]=x2 @expansion{} _[10]=x @expansion{} _[11]=1 @expansion{} [6]: @expansion{} _[1]=2x2y+5y4 @expansion{} _[2]=2xy2+5x4 @expansion{} _[3]=5x5-5y5 @expansion{} _[4]=10y6+25x3y4 @c end example vwfilt d2t_singular/gaussman_lib.doc:509 @end smallexample @c inserted refs from d2t_singular/gaussman_lib.doc:516 @ifinfo @menu See also: * spectrum_lib:: @end menu @end ifinfo @iftex @strong{See also:} @ref{spectrum_lib}. @end iftex @c end inserted refs from d2t_singular/gaussman_lib.doc:516 @c ---end content vwfilt--- @c ------------------- tmatrix ------------- @node tmatrix, endvfilt, vwfilt, gaussman_lib @subsubsection tmatrix @cindex tmatrix @c ---content tmatrix--- Procedure from library @code{gaussman.lib} (@pxref{gaussman_lib}). @table @asis @item @strong{Usage:} tmatrix(t); poly t @item @strong{Assume:} characteristic 0; local degree ordering; @*isolated critical point 0 of t @item @strong{Return:} @format list l=A0,A1,T,M; matrix A0,A1; t=A0+s*A1+s^2*(d/ds) on H'' w.r.t. C[[s]]-basis M*T module T; C-basis of C^mu ideal M; monomial C-basis of H''/sH'' @end format @cindex singularities @cindex Gauss-Manin connection @cindex Brieskorn lattice @cindex mixed Hodge structure @cindex opposite Hodge filtration @cindex V-filtration @end table @strong{Example:} @smallexample @c computed example tmatrix d2t_singular/gaussman_lib.doc:554 LIB "gaussman.lib"; ring R=0,(x,y),ds; poly t=x5+x2y2+y5; list A=tmatrix(t); print(A[1]); @expansion{} 0,0,0,0,0,0,0,0,0,0,0, @expansion{} 0,0,0,0,0,0,0,0,0,0,0, @expansion{} 0,0,0,0,0,0,0,0,0,0,0, @expansion{} 0,0,0,0,0,0,0,0,0,0,0, @expansion{} 0,0,0,0,0,0,0,0,0,0,0, @expansion{} 0,0,0,0,0,0,0,0,0,0,0, @expansion{} 0,0,0,0,0,0,0,0,0,0,0, @expansion{} 0,0,0,0,0,0,0,0,0,0,0, @expansion{} 0,0,0,0,0,0,0,0,0,0,0, @expansion{} 0,0,0,0,0,0,0,0,0,0,0, @expansion{} 1,0,0,0,0,0,0,0,0,0,0 print(A[2]); @expansion{} 1/2,0, 0, 0, 0, 0,0, 0, 0, 0, 0, @expansion{} 0, 7/10,0, 0, 0, 0,0, 0, 0, 0, 0, @expansion{} 0, 0, 7/10,0, 0, 0,0, 0, 0, 0, 0, @expansion{} 0, 0, 0, 9/10,0, 0,0, 0, 0, 0, 0, @expansion{} 0, 0, 0, 0, 9/10,0,0, 0, 0, 0, 0, @expansion{} 0, 0, 0, 0, 0, 1,0, 0, 0, 0, 0, @expansion{} 0, 0, 0, 0, 0, 0,11/10,0, 0, 0, 0, @expansion{} 0, 0, 0, 0, 0, 0,0, 11/10,0, 0, 0, @expansion{} 0, 0, 0, 0, 0, 0,0, 0, 13/10,0, 0, @expansion{} 0, 0, 0, 0, 0, 0,0, 0, 0, 13/10,0, @expansion{} 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 3/2 print(A[3]); @expansion{} -1445/64,0, 0, 0,0,85/8,0,0,0,0,1/2, @expansion{} 0, 125,0, 0,0,0, 0,0,1,0,0, @expansion{} 0, 0, 0, 5,0,0, 1,0,0,0,0, @expansion{} 0, 0, 0, 0,4,0, 0,0,0,0,0, @expansion{} 2, 0, 0, 0,0,1, 0,0,0,0,0, @expansion{} 0, 0, 16, 0,0,0, 0,0,0,0,0, @expansion{} 0, 0, 125,0,0,0, 0,0,0,1,0, @expansion{} 0, 0, 0, 0,5,0, 0,1,0,0,0, @expansion{} 0, 0, 0, 4,0,0, 0,0,0,0,0, @expansion{} 0, 16, 0, 0,0,0, 0,0,0,0,0, @expansion{} -1, 0, 0, 0,0,0, 0,0,0,0,0 print(A[4]); @expansion{} y5, @expansion{} y4, @expansion{} y3, @expansion{} y2, @expansion{} xy, @expansion{} y, @expansion{} x4, @expansion{} x3, @expansion{} x2, @expansion{} x, @expansion{} 1 @c end example tmatrix d2t_singular/gaussman_lib.doc:554 @end smallexample @c ---end content tmatrix--- @c ------------------- endvfilt ------------- @node endvfilt, spprint, tmatrix, gaussman_lib @subsubsection endvfilt @cindex endvfilt @c ---content endvfilt--- Procedure from library @code{gaussman.lib} (@pxref{gaussman_lib}). @table @asis @item @strong{Usage:} endvfilt(v); list v @item @strong{Assume:} v returned by vfilt @item @strong{Return:} @format list ev; V-filtration on Jacobian algebra ideal ev[1]; number ev[1][i]; i-th V-filtration index intvec ev[2]; int ev[2][i]; i-th multiplicity list ev[3]; module ev[3][i]; vector space of i-th graded part in terms of ev[4] ideal ev[4]; monomial vector space basis of Jacobian algebra ideal ev[5]; standard basis of Jacobian ideal @end format @cindex singularities @cindex Gauss-Manin connection @cindex Brieskorn lattice @cindex mixed Hodge structure @cindex V-filtration @cindex endomorphism filtration @end table @strong{Example:} @smallexample @c computed example endvfilt d2t_singular/gaussman_lib.doc:603 LIB "gaussman.lib"; ring R=0,(x,y),ds; poly t=x5+x2y2+y5; endvfilt(vfilt(t)); @expansion{} [1]: @expansion{} _[1]=0 @expansion{} _[2]=1/5 @expansion{} _[3]=2/5 @expansion{} _[4]=1/2 @expansion{} _[5]=3/5 @expansion{} _[6]=4/5 @expansion{} _[7]=1 @expansion{} [2]: @expansion{} 1,2,2,1,2,2,1 @expansion{} [3]: @expansion{} [1]: @expansion{} _[1]=gen(11) @expansion{} [2]: @expansion{} _[1]=gen(10) @expansion{} _[2]=gen(6) @expansion{} [3]: @expansion{} _[1]=gen(9) @expansion{} _[2]=gen(4) @expansion{} [4]: @expansion{} _[1]=gen(5) @expansion{} [5]: @expansion{} _[1]=gen(8) @expansion{} _[2]=gen(3) @expansion{} [6]: @expansion{} _[1]=gen(7) @expansion{} _[2]=gen(2) @expansion{} [7]: @expansion{} _[1]=gen(1) @expansion{} [4]: @expansion{} _[1]=y5 @expansion{} _[2]=y4 @expansion{} _[3]=y3 @expansion{} _[4]=y2 @expansion{} _[5]=xy @expansion{} _[6]=y @expansion{} _[7]=x4 @expansion{} _[8]=x3 @expansion{} _[9]=x2 @expansion{} _[10]=x @expansion{} _[11]=1 @expansion{} [5]: @expansion{} _[1]=2x2y+5y4 @expansion{} _[2]=2xy2+5x4 @expansion{} _[3]=5x5-5y5 @expansion{} _[4]=10y6+25x3y4 @c end example endvfilt d2t_singular/gaussman_lib.doc:603 @end smallexample @c ---end content endvfilt--- @c ------------------- spprint ------------- @node spprint, sppprint, endvfilt, gaussman_lib @subsubsection spprint @cindex spprint @c ---content spprint--- Procedure from library @code{gaussman.lib} (@pxref{gaussman_lib}). @table @asis @item @strong{Usage:} spprint(sp); list sp @item @strong{Return:} string s; spectrum sp @end table @strong{Example:} @smallexample @c computed example spprint d2t_singular/gaussman_lib.doc:629 LIB "gaussman.lib"; ring R=0,(x,y),ds; list sp=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(1,2,2,1,2,2,1)); spprint(sp); @expansion{} (-1/2,1),(-3/10,2),(-1/10,2),(0,1),(1/10,2),(3/10,2),(1/2,1) @c end example spprint d2t_singular/gaussman_lib.doc:629 @end smallexample @c ---end content spprint--- @c ------------------- sppprint ------------- @node sppprint, spadd, spprint, gaussman_lib @subsubsection sppprint @cindex sppprint @c ---content sppprint--- Procedure from library @code{gaussman.lib} (@pxref{gaussman_lib}). @table @asis @item @strong{Usage:} sppprint(spp); list spp @item @strong{Return:} string s; spectral pairs spp @end table @strong{Example:} @smallexample @c computed example sppprint d2t_singular/gaussman_lib.doc:655 LIB "gaussman.lib"; ring R=0,(x,y),ds; list spp=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(2,1,1,1,1,1,0),intvec(1,2,2,1,2,2,1)); sppprint(spp); @expansion{} ((-1/2,2),1),((-3/10,1),2),((-1/10,1),2),((0,1),1),((1/10,1),2),((3/10,1)\ ,2),((1/2,0),1) @c end example sppprint d2t_singular/gaussman_lib.doc:655 @end smallexample @c ---end content sppprint--- @c ------------------- spadd ------------- @node spadd, spsub, sppprint, gaussman_lib @subsubsection spadd @cindex spadd @c ---content spadd--- Procedure from library @code{gaussman.lib} (@pxref{gaussman_lib}). @table @asis @item @strong{Usage:} spadd(sp1,sp2); list sp1, list sp2 @item @strong{Return:} list sp; sum of spectra sp1 and sp2 @end table @strong{Example:} @smallexample @c computed example spadd d2t_singular/gaussman_lib.doc:681 LIB "gaussman.lib"; ring R=0,(x,y),ds; list sp1=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(1,2,2,1,2,2,1)); spprint(sp1); @expansion{} (-1/2,1),(-3/10,2),(-1/10,2),(0,1),(1/10,2),(3/10,2),(1/2,1) list sp2=list(ideal(-1/6,1/6),intvec(1,1)); spprint(sp2); @expansion{} (-1/6,1),(1/6,1) spprint(spadd(sp1,sp2)); @expansion{} (-1/2,1),(-3/10,2),(-1/6,1),(-1/10,2),(0,1),(1/10,2),(1/6,1),(3/10,2),(1/\ 2,1) @c end example spadd d2t_singular/gaussman_lib.doc:681 @end smallexample @c ---end content spadd--- @c ------------------- spsub ------------- @node spsub, spmul, spadd, gaussman_lib @subsubsection spsub @cindex spsub @c ---content spsub--- Procedure from library @code{gaussman.lib} (@pxref{gaussman_lib}). @table @asis @item @strong{Usage:} spsub(sp1,sp2); list sp1, list sp2 @item @strong{Return:} list sp; difference of spectra sp1 and sp2 @end table @strong{Example:} @smallexample @c computed example spsub d2t_singular/gaussman_lib.doc:710 LIB "gaussman.lib"; ring R=0,(x,y),ds; list sp1=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(1,2,2,1,2,2,1)); spprint(sp1); @expansion{} (-1/2,1),(-3/10,2),(-1/10,2),(0,1),(1/10,2),(3/10,2),(1/2,1) list sp2=list(ideal(-1/6,1/6),intvec(1,1)); spprint(sp2); @expansion{} (-1/6,1),(1/6,1) spprint(spsub(sp1,sp2)); @expansion{} (-1/2,1),(-3/10,2),(-1/6,-1),(-1/10,2),(0,1),(1/10,2),(1/6,-1),(3/10,2),(\ 1/2,1) @c end example spsub d2t_singular/gaussman_lib.doc:710 @end smallexample @c ---end content spsub--- @c ------------------- spmul ------------- @node spmul, spissemicont, spsub, gaussman_lib @subsubsection spmul @cindex spmul @c ---content spmul--- Procedure from library @code{gaussman.lib} (@pxref{gaussman_lib}). @table @asis @item @strong{Usage:} spmul(sp0,k); list sp0, int[vec] k @item @strong{Return:} list sp; linear combination of spectra sp0 with coefficients k @end table @strong{Example:} @smallexample @c computed example spmul d2t_singular/gaussman_lib.doc:739 LIB "gaussman.lib"; ring R=0,(x,y),ds; list sp=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(1,2,2,1,2,2,1)); spprint(sp); @expansion{} (-1/2,1),(-3/10,2),(-1/10,2),(0,1),(1/10,2),(3/10,2),(1/2,1) spprint(spmul(sp,2)); @expansion{} (-1/2,2),(-3/10,4),(-1/10,4),(0,2),(1/10,4),(3/10,4),(1/2,2) list sp1=list(ideal(-1/6,1/6),intvec(1,1)); spprint(sp1); @expansion{} (-1/6,1),(1/6,1) list sp2=list(ideal(-1/3,0,1/3),intvec(1,2,1)); spprint(sp2); @expansion{} (-1/3,1),(0,2),(1/3,1) spprint(spmul(list(sp1,sp2),intvec(1,2))); @expansion{} (-1/3,2),(-1/6,1),(0,4),(1/6,1),(1/3,2) @c end example spmul d2t_singular/gaussman_lib.doc:739 @end smallexample @c ---end content spmul--- @c ------------------- spissemicont ------------- @node spissemicont, spsemicont, spmul, gaussman_lib @subsubsection spissemicont @cindex spissemicont @c ---content spissemicont--- Procedure from library @code{gaussman.lib} (@pxref{gaussman_lib}). @table @asis @item @strong{Usage:} spissemicont(sp[,1]); list sp, int opt @item @strong{Return:} @format int k= 1; if sum of sp is positive on all intervals [a,a+1) [and (a,a+1)] 0; if sum of sp is negative on some interval [a,a+1) [or (a,a+1)] @end format @end table @strong{Example:} @smallexample @c computed example spissemicont d2t_singular/gaussman_lib.doc:775 LIB "gaussman.lib"; ring R=0,(x,y),ds; list sp1=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(1,2,2,1,2,2,1)); spprint(sp1); @expansion{} (-1/2,1),(-3/10,2),(-1/10,2),(0,1),(1/10,2),(3/10,2),(1/2,1) list sp2=list(ideal(-1/6,1/6),intvec(1,1)); spprint(sp2); @expansion{} (-1/6,1),(1/6,1) spissemicont(spsub(sp1,spmul(sp2,3))); @expansion{} 1 spissemicont(spsub(sp1,spmul(sp2,4))); @expansion{} 0 @c end example spissemicont d2t_singular/gaussman_lib.doc:775 @end smallexample @c ---end content spissemicont--- @c ------------------- spsemicont ------------- @node spsemicont, spmilnor, spissemicont, gaussman_lib @subsubsection spsemicont @cindex spsemicont @c ---content spsemicont--- Procedure from library @code{gaussman.lib} (@pxref{gaussman_lib}). @table @asis @item @strong{Usage:} spsemicont(sp0,sp,k[,1]); list sp0, list sp @item @strong{Return:} @format list l; intvec l[i]; if the spectra sp0 occur with multiplicities k in a deformation of a [quasihomogeneous] singularity with spectrum sp then k<=l[i] @end format @end table @strong{Example:} @smallexample @c computed example spsemicont d2t_singular/gaussman_lib.doc:810 LIB "gaussman.lib"; ring R=0,(x,y),ds; list sp0=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(1,2,2,1,2,2,1)); spprint(sp0); @expansion{} (-1/2,1),(-3/10,2),(-1/10,2),(0,1),(1/10,2),(3/10,2),(1/2,1) list sp1=list(ideal(-1/6,1/6),intvec(1,1)); spprint(sp1); @expansion{} (-1/6,1),(1/6,1) list sp2=list(ideal(-1/3,0,1/3),intvec(1,2,1)); spprint(sp2); @expansion{} (-1/3,1),(0,2),(1/3,1) list sp=sp1,sp2; list l=spsemicont(sp0,sp); l; @expansion{} [1]: @expansion{} 3 @expansion{} [2]: @expansion{} 2,1 spissemicont(spsub(sp0,spmul(sp,l[1]))); @expansion{} 1 spissemicont(spsub(sp0,spmul(sp,l[1]-1))); @expansion{} 1 spissemicont(spsub(sp0,spmul(sp,l[1]+1))); @expansion{} 0 @c end example spsemicont d2t_singular/gaussman_lib.doc:810 @end smallexample @c ---end content spsemicont--- @c ------------------- spmilnor ------------- @node spmilnor, spgeomgenus, spsemicont, gaussman_lib @subsubsection spmilnor @cindex spmilnor @c ---content spmilnor--- Procedure from library @code{gaussman.lib} (@pxref{gaussman_lib}). @table @asis @item @strong{Usage:} spmilnor(sp); list sp @item @strong{Return:} int mu; Milnor number of spectrum sp @end table @strong{Example:} @smallexample @c computed example spmilnor d2t_singular/gaussman_lib.doc:846 LIB "gaussman.lib"; ring R=0,(x,y),ds; list sp=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(1,2,2,1,2,2,1)); spprint(sp); @expansion{} (-1/2,1),(-3/10,2),(-1/10,2),(0,1),(1/10,2),(3/10,2),(1/2,1) spmilnor(sp); @expansion{} 11 @c end example spmilnor d2t_singular/gaussman_lib.doc:846 @end smallexample @c ---end content spmilnor--- @c ------------------- spgeomgenus ------------- @node spgeomgenus, spgamma, spmilnor, gaussman_lib @subsubsection spgeomgenus @cindex spgeomgenus @c ---content spgeomgenus--- Procedure from library @code{gaussman.lib} (@pxref{gaussman_lib}). @table @asis @item @strong{Usage:} spgeomgenus(sp); list sp @item @strong{Return:} int g; geometrical genus of spectrum sp @end table @strong{Example:} @smallexample @c computed example spgeomgenus d2t_singular/gaussman_lib.doc:873 LIB "gaussman.lib"; ring R=0,(x,y),ds; list sp=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(1,2,2,1,2,2,1)); spprint(sp); @expansion{} (-1/2,1),(-3/10,2),(-1/10,2),(0,1),(1/10,2),(3/10,2),(1/2,1) spgeomgenus(sp); @expansion{} 6 @c end example spgeomgenus d2t_singular/gaussman_lib.doc:873 @end smallexample @c ---end content spgeomgenus--- @c ------------------- spgamma ------------- @node spgamma,, spgeomgenus, gaussman_lib @subsubsection spgamma @cindex spgamma @c ---content spgamma--- Procedure from library @code{gaussman.lib} (@pxref{gaussman_lib}). @table @asis @item @strong{Usage:} spgamma(sp); list sp @item @strong{Return:} number gamma; gamma invariant of spectrum sp @end table @strong{Example:} @smallexample @c computed example spgamma d2t_singular/gaussman_lib.doc:900 LIB "gaussman.lib"; ring R=0,(x,y),ds; list sp=list(ideal(-1/2,-3/10,-1/10,0,1/10,3/10,1/2),intvec(1,2,2,1,2,2,1)); spprint(sp); @expansion{} (-1/2,1),(-3/10,2),(-1/10,2),(0,1),(1/10,2),(3/10,2),(1/2,1) spgamma(sp); @expansion{} 1/240 @c end example spgamma d2t_singular/gaussman_lib.doc:900 @end smallexample @c ---end content spgamma--- texi2html-1.82/test/singular_manual/d2t_singular/hnoether_lib.tex0000644000175000017500000014633111264347126027167 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/hnoether_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/hnoether_lib.doc INSTEAD @c library version: (1.29.2.14,2002/10/21) @c library file: ../Singular/LIB/hnoether.lib @cindex hnoether.lib @cindex hnoether_lib @table @asis @item @strong{Library:} hnoether.lib @item @strong{Purpose:} Hamburger-Noether (Puiseux) Development @item @strong{Author:} Martin Lamm, lamm@@mathematik.uni-kl.de @item @strong{Overview:} A library for computing the Hamburger-Noether, resp. Puiseux, development of a plane curve singularity following [Campillo, A.: Algebroid curves in positive characteristic, Springer LNM 813 (1980)]. @* The library contains also procedures for computing the (topological) numerical invariants of plane curve singularities. @end table @strong{Main procedures:} @menu * hnexpansion:: Hamburger-Noether (H-N) development of f * sethnering:: changes to the hnering created by hnexpansion * develop:: H-N development of irreducible curves * extdevelop:: extension of the H-N development hne of f * parametrisation:: a parametrization of f * displayHNE:: display H-N development as an ideal * invariants:: invariants of f, e.g. the characteristic exponents * displayInvariants:: display invariants of f * multsequence:: sequence of multiplicities * displayMultsequence:: display sequence of multiplicities * intersection:: intersection multiplicity of two curves * stripHNE:: reduce amount of memory consumed by hne * is_irred:: test if f is irreducible * delta:: delta invariant of f * newtonpoly:: (local) Newton polygon of f * is_NND:: test if f is Newton non-degenerate @end menu @strong{Auxiliary procedures:} @menu * puiseux2generators:: convert Puiseux pairs to generators of semigroup * separateHNE:: number of quadratic transf. needed for separation * squarefree:: a squarefree divisor of the poly f * allsquarefree:: the maximal squarefree divisor of the poly f * further_hn_proc:: show further procedures useful for interactive use @end menu @cindex Hamburger-Noether expansion @cindex Puiseux expansion @cindex curve singularities @c ---end content LibInfo--- @c ------------------- hnexpansion ------------- @node hnexpansion, sethnering,, hnoether_lib @subsubsection hnexpansion @cindex hnexpansion @c ---content hnexpansion--- Procedure from library @code{hnoether.lib} (@pxref{hnoether_lib}). @table @asis @item @strong{Usage:} hnexpansion(f); or hnexpansion(f,"ess"); f poly @item @strong{Usage:} hnexpansion(f); f poly @item @strong{Assume:} f is a bivariate polynomial (in the first 2 ring variables) @item @strong{Create:} ring with variables @code{x,y} and ordering @code{ls} over a field extension of the current basering's ground field, since the Hamburger-Noether development usually does not exist in the originally given basering. The field extension is chosen minimally.@* Moreover, in the ring a list @code{hne} of lists @code{hne[i]} is created (corresponding to the output of @code{develop(f[i])}, f[i] a branch of f, but the last entry being omitted). @table @asis @item @code{hne[i][1]}; matrix: Each row contains the coefficients of the corresponding line of the Hamburger-Noether expansion (HNE) for f[i]. The end of the line is marked in the matrix by the first ring variable (usually x). @item @code{hne[i][2]}; intvec: indicating the length of lines of the HNE @item @code{hne[i][3]}; int: 0 if the 1st ring variable was transversal (with respect to f[i]), @* 1 if the variables were changed at the beginning of the computation, @* -1 if an error has occurred. @item @code{hne[i][4]}; poly: the transformed polynomial of f[i] to make it possible to extend the Hamburger-Noether development a posteriori without having to do all the previous calculation once again (0 if not needed) @end table @item @strong{Return:} a list, say @code{hn}, containing the created ring @item @strong{Note:} to use the ring type: @code{def HNEring=hn[i]; setring HNEring;}. @* If f is known to be irreducible as a power series, @code{develop(f)} could be chosen instead to avoid the change of basering. @* Increasing @code{printlevel} leads to more and more comments. @item @strong{Usage:} hnexpansion(f,"ess"); f poly @item @strong{Assume:} f is a bivariate polynomial (in the first 2 ring variables) @item @strong{Create:} ring with variables @code{x,y} and ordering @code{ls} over a field extension of the current basering's ground field, since the Hamburger-Noether development usually does not exist in the originally given basering. The field extension is chosen minimally. @* Moreover, in the ring a list @code{hne} of lists @code{hne[i]} is created (corresponding to the output of @code{develop(f[i])}, f[i] an "essential" branch of f, but the last entry being omitted). See @code{hnexpansion} above for more details. @item @strong{Return:} a list, say @code{hn}, containing the created ring @item @strong{Note:} to use the ring type: @code{def hnering=hn[i]; setring hnering;}. @* Alternatively you may use the procedure sethnering and type: @code{sethnering(hn);} @* If the HNE needs a field extension, some of the branches will be conjugate. In this case @code{hnexpansion(f,"ess")} reduces the computation to one representative for each group of conjugate branches.@* Note that the degree of each branch is in general less than the degree of the field extension in which all HNEs can be put.@* Use @code{hnexpansion(f)} to compute a complete HNE, i.e., a HNE for all branches.@* Increasing @code{printlevel} leads to more and more comments. @end table @strong{Example:} @smallexample @c computed example hnexpansion d2t_singular/hnoether_lib.doc:150 LIB "hnoether.lib"; ring r=0,(x,y),ls; list hn=hnexpansion(x4-y6); show(hn); @expansion{} // list, 1 element(s): @expansion{} [1]: @expansion{} // ring: (0),(x,y),(ls(2),C); @expansion{} // minpoly = 0 @expansion{} // objects belonging to this ring: @expansion{} // hne [0] list, size: 2 def hnering=hn[1]; setring hnering; size(hne); // number of branches @expansion{} 2 print(hne[1][1]); // HN-matrix of 1st branch @expansion{} 0,x,0, @expansion{} 0,1,x parametrisation(hne); // parametrization of the two branches @expansion{} [1]: @expansion{} _[1]=x3 @expansion{} _[2]=x2 @expansion{} [2]: @expansion{} _[1]=-x3 @expansion{} _[2]=-x2 ///////////////////////////////////////////////////////// ring s=2,(x,y),ls; poly f=(x4+x2y+y2)*(x3+xy2+y3); // --------- compute all branches: --------- hn=hnexpansion(f); @expansion{} // new minimal polynomial: a6+a5+a3+a2+1 hnering=hn[1]; setring hnering; displayHNE(hne[1]); // HN-matrix of 1st branch @expansion{} HNE[1]=y+(a^4+a+1)*z(0) @expansion{} HNE[2]=x+z(0) displayHNE(hne[4]); // HN-matrix of 4th branch @expansion{} HNE[1]=y+(a^4+a^2+a+1)*z(0)^2 @expansion{} HNE[2]=x+z(0) setring s; // --- compute only one of conjugate branches: --- hn=hnexpansion(f,"ess"); @expansion{} // new minimal polynomial: a6+a5+a3+a2+1 hnering=hn[1]; setring hnering; displayHNE(hne); @expansion{} // Hamburger-Noether development of branch nr.1: @expansion{} HNE[1]=y+(a^4+a^2)*z(0) @expansion{} HNE[2]=x+z(0) @expansion{} @expansion{} // Hamburger-Noether development of branch nr.2: @expansion{} HNE[1]=y+(a^4+a^2+a)*z(0)^2 @expansion{} HNE[2]=x+z(0) @expansion{} // no. 1 of hnexpansion(f,"ess") represents no. 1 - 3 of hnexpansion(f) and // no. 2 of hnexpansion(f,"ess") represents no. 4 + 5 of hnexpansion(f) @c end example hnexpansion d2t_singular/hnoether_lib.doc:150 @end smallexample @c inserted refs from d2t_singular/hnoether_lib.doc:179 @ifinfo @menu See also: * develop:: * displayHNE:: * extdevelop:: * parametrisation:: @end menu @end ifinfo @iftex @strong{See also:} @ref{develop}; @ref{displayHNE}; @ref{extdevelop}; @ref{parametrisation}. @end iftex @c end inserted refs from d2t_singular/hnoether_lib.doc:179 @c ---end content hnexpansion--- @c ------------------- sethnering ------------- @node sethnering, develop, hnexpansion, hnoether_lib @subsubsection sethnering @cindex sethnering @c ---content sethnering--- Procedure from library @code{hnoether.lib} (@pxref{hnoether_lib}). @table @asis @item @strong{Usage:} sethnering(L[,s]); L list, s string (optional) @item @strong{Assume:} L is a list containing a ring (e.g. the output of @code{hnexpansion}). @item @strong{Create:} The procedure creates a ring with name given by the optional parameter s resp. with name hnering, if no optional parameter is given, and changes your ring to this ring. The new ring will be the ring given as the first entry in the list L. @item @strong{Return:} nothing. @end table @strong{Example:} @smallexample @c computed example sethnering d2t_singular/hnoether_lib.doc:211 LIB "hnoether.lib"; // -------- prepare for example --------- if (defined(hnering)) @{ def rette@@ring=hnering; if (nameof(basering)=="hnering") @{ int wechsel=1; @} else @{ int wechsel; @} kill hnering; @} // ------ the example starts here ------- ring r=0,(x,y),ls; nameof(basering); @expansion{} r sethnering(hnexpansion(x4-y6)); // Creates hnering and changes to it! nameof(basering); @expansion{} hnering // --- restore HNEring if previously defined --- kill hnering; if (defined(rette@@ring)) @{ def hnering=rette@@ring; export hnering; if (wechsel==1) @{ setring hnering; @} @} @c end example sethnering d2t_singular/hnoether_lib.doc:211 @end smallexample @c inserted refs from d2t_singular/hnoether_lib.doc:244 @ifinfo @menu See also: * hnexpansion:: @end menu @end ifinfo @iftex @strong{See also:} @ref{hnexpansion}. @end iftex @c end inserted refs from d2t_singular/hnoether_lib.doc:244 @c ---end content sethnering--- @c ------------------- develop ------------- @node develop, extdevelop, sethnering, hnoether_lib @subsubsection develop @cindex develop @c ---content develop--- Procedure from library @code{hnoether.lib} (@pxref{hnoether_lib}). @table @asis @item @strong{Usage:} develop(f [,n]); f poly, n int @item @strong{Assume:} f is a bivariate polynomial (in the first 2 ring variables) and irreducible as power series (for reducible f use @code{hnexpansion}). @item @strong{Return:} list @code{L} with: @table @asis @item @code{L[1]}; matrix: Each row contains the coefficients of the corresponding line of the Hamburger-Noether expansion (HNE). The end of the line is marked in the matrix by the first ring variable (usually x). @item @code{L[2]}; intvec: indicating the length of lines of the HNE @item @code{L[3]}; int: 0 if the 1st ring variable was transversal (with respect to f), @* 1 if the variables were changed at the beginning of the computation, @* -1 if an error has occurred. @item @code{L[4]}; poly: the transformed polynomial of f to make it possible to extend the Hamburger-Noether development a posteriori without having to do all the previous calculation once again (0 if not needed) @item @code{L[5]}; int: 1 if the curve has exactly one branch (i.e., is irreducible), @* 0 else (i.e., the curve has more than one HNE, or f is not valid). @end table @item @strong{Display:} The (non zero) elements of the HNE (if not called by another proc). @item @strong{Note:} The optional parameter @code{n} affects only the computation of the LAST line of the HNE. If it is given, the HN-matrix @code{L[1]} will have at least @code{n} columns. @* Otherwise, the number of columns will be chosen minimal such that the matrix contains all necessary information (i.e., all lines of the HNE but the last (which is in general infinite) have place). @* If @code{n} is negative, the algorithm is stopped as soon as the computed information is sufficient for @code{invariants(L)}, but the HN-matrix @code{L[1]} may still contain undetermined elements, which are marked with the 2nd variable (of the basering). @* For time critical computations it is recommended to use @code{ring ...,(x,y),ls} as basering - it increases the algorithm's speed. @* If @code{printlevel>=0} comments are displayed (default is @code{printlevel=0}). @end table @strong{Example:} @smallexample @c computed example develop d2t_singular/hnoether_lib.doc:312 LIB "hnoether.lib"; ring exring = 7,(x,y),ds; list hne=develop(4x98+2x49y7+x11y14+2y14); print(hne[1]); @expansion{} 0,0, 0,0,0,0,3,x, @expansion{} 0,x, 0,0,0,0,0,0, @expansion{} 0,0, 0,x,0,0,0,0, @expansion{} 0,x, 0,0,0,0,0,0, @expansion{} 0,-1,0,0,0,0,0,0 // therefore the HNE is: // z(-1)= 3*z(0)^7 + z(0)^7*z(1), // z(0) = z(1)*z(2), (there is 1 zero in the 2nd row before x) // z(1) = z(2)^3*z(3), (there are 3 zeroes in the 3rd row) // z(2) = z(3)*z(4), // z(3) = -z(4)^2 + 0*z(4)^3 +...+ 0*z(4)^8 + ?*z(4)^9 + ... // (the missing x in the last line indicates that it is not complete.) hne[2]; @expansion{} 7,1,3,1,-1 parametrisation(hne); @expansion{} [1]: @expansion{} _[1]=-x14 @expansion{} _[2]=-3x98-x109 // parametrization: x(t)= -t^14+O(t^21), y(t)= -3t^98+O(t^105) // (the term -t^109 in y may have a wrong coefficient) displayHNE(hne); @expansion{} HNE[1]=-y+3*z(0)^7+z(0)^7*z(1) @expansion{} HNE[2]=-x+z(1)*z(2) @expansion{} HNE[3]=z(2)^3*z(3) @expansion{} HNE[4]=z(3)*z(4) @expansion{} HNE[5]=-z(4)^2 @c end example develop d2t_singular/hnoether_lib.doc:312 @end smallexample @c inserted refs from d2t_singular/hnoether_lib.doc:331 @ifinfo @menu See also: * displayHNE:: * extdevelop:: * hnexpansion:: @end menu @end ifinfo @iftex @strong{See also:} @ref{displayHNE}; @ref{extdevelop}; @ref{hnexpansion}. @end iftex @c end inserted refs from d2t_singular/hnoether_lib.doc:331 @c ---end content develop--- @c ------------------- extdevelop ------------- @node extdevelop, parametrisation, develop, hnoether_lib @subsubsection extdevelop @cindex extdevelop @c ---content extdevelop--- Procedure from library @code{hnoether.lib} (@pxref{hnoether_lib}). @table @asis @item @strong{Usage:} extdevelop(L,N); list L, int N @item @strong{Assume:} L is the output of @code{develop(f)}, or of @code{extdevelop(l,n)}, or one entry in the list @code{hne} in the ring created by @code{hnexpansion(f[,"ess"])}. @item @strong{Return:} an extension of the Hamburger-Noether development of f as a list in the same format as L has (up to the last entry in the output of @code{develop(f)}).@* Type @code{help develop;}, resp. @code{help hnexpansion;} for more details. @item @strong{Note:} The new HN-matrix will have at least N columns (if the HNE is not finite). In particular, if f is irreducible then (in most cases) @code{extdevelop(develop(f),N)} will produce the same result as @code{develop(f,N)}.@* If the matrix M of L has n columns then, compared with @code{parametrisation(L)}, @code{paramametrize(extdevelop(L,N))} will increase the exactness by at least (N-n) more significant monomials. @end table @strong{Example:} @smallexample @c computed example extdevelop d2t_singular/hnoether_lib.doc:372 LIB "hnoether.lib"; if (defined(HNEring)) @{ def save_r_i_n_g=HNEring; kill HNEring; @} // ------ the example starts here ------- ring exring=0,(x,y),dp; list hn=hnexpansion(x14-3y2x11-y3x10-y2x9+3y4x8+y5x7+3y4x6+x5*(-y6+y5) -3y6x3-y7x2+y8); def HNEring=hn[1]; setring HNEring; export(HNEring); @expansion{} // ** `HNEring` is already global print(hne[1][1]); // HNE of 1st branch is finite @expansion{} 0,x,0, @expansion{} 0,1,x print(extdevelop(hne[1],5)[1]); @expansion{} No extension is possible @expansion{} 0,x,0, @expansion{} 0,1,x print(hne[2][1]); // HNE of 2nd branch can be extended @expansion{} 0,x,0, @expansion{} 0,1,x, @expansion{} 0,1,-1 list ehne=extdevelop(hne[2],5); print(ehne[1]); // new HN-matrix has 5 columns @expansion{} 0,x,0, 0,0, @expansion{} 0,1,x, 0,0, @expansion{} 0,1,-1,1,-1 parametrisation(hne[2]); @expansion{} [1]: @expansion{} _[1]=x4-x5-x6+x7 @expansion{} _[2]=x6-2x7+2x9-x10 parametrisation(ehne); @expansion{} [1]: @expansion{} _[1]=x4-x5+x6-x7-x8+x9-x10+x11 @expansion{} _[2]=x6-2x7+3x8-4x9+2x10-2x12+4x13-3x14+2x15-x16 if (defined(save_r_i_n_g)) @{ kill HNEring; def HNEring=save_r_i_n_g; @} @c end example extdevelop d2t_singular/hnoether_lib.doc:372 @end smallexample @c inserted refs from d2t_singular/hnoether_lib.doc:400 @ifinfo @menu See also: * develop:: * hnexpansion:: * parametrisation:: @end menu @end ifinfo @iftex @strong{See also:} @ref{develop}; @ref{hnexpansion}; @ref{parametrisation}. @end iftex @c end inserted refs from d2t_singular/hnoether_lib.doc:400 @c ---end content extdevelop--- @c ------------------- parametrisation ------------- @node parametrisation, displayHNE, extdevelop, hnoether_lib @subsubsection parametrisation @cindex parametrisation @c ---content parametrisation--- Procedure from library @code{hnoether.lib} (@pxref{hnoether_lib}). @table @asis @item @strong{Usage:} parametrisation(INPUT [,x]); INPUT list or poly, x int (optional) @item @strong{Assume:} INPUT is either a bivariate polynomial f defining a plane curve singularity, or it is the output of @code{hnexpansion(f[,"ess"])}, or of @code{develop(f)}, or of @code{extdevelop(develop(f),n)}, or the list @@@{hne@} in the ring created by @code{hnexpansion(f)} respectively one entry thereof. @item @strong{Return:} a list L containing a parametrization L[i] for each branch f[i] of f in the following format: @* - if only the list INPUT is given, L[i] is an ideal of two polynomials p[1],p[2]: if the HNE of was finite then f[i](p[1],p[2])=0; if not, the "real" parametrization will be two power series and p[1],p[2] are truncations of these series.@* - if the optional parameter x is given, L[i] is itself a list: L[i][1] is the parametrization ideal as above and L[i][2] is an intvec with two entries indicating the highest degree up to which the coefficients of the monomials in L[i][1] are exact (entry -1 means that the corresponding parametrization is exact). @item @strong{Note:} If the basering has only 2 variables, the first variable is chosen as indefinite. Otherwise, the 3rd variable is chosen. @* In case the Hamburger-Noether expansion of the curve f is needed for other purposes as well it is better to calculate this first with the aid of @code{hnexpansion} and use it as input instead of the polynomial itself. @cindex parametrization @end table @strong{Example:} @smallexample @c computed example parametrisation d2t_singular/hnoether_lib.doc:449 LIB "hnoether.lib"; ring exring=0,(x,y,t),ds; // 1st Example: input is a polynomial poly g=(x2-y3)*(x3-y5); parametrisation(g); @expansion{} [1]: @expansion{} _[1]=t3 @expansion{} _[2]=t2 @expansion{} [2]: @expansion{} _[1]=t5 @expansion{} _[2]=t3 // 2nd Example: input is the ring of a Hamburger-Noether expansion poly h=x2-y2-y3; list hn=hnexpansion(h); parametrisation(h,1); @expansion{} [1]: @expansion{} [1]: @expansion{} _[1]=t @expansion{} _[2]=t-1/2t2 @expansion{} [2]: @expansion{} -1,2 @expansion{} [2]: @expansion{} [1]: @expansion{} _[1]=t @expansion{} _[2]=-t-1/2t2 @expansion{} [2]: @expansion{} -1,2 // 3rd Example: input is a Hamburger-Noether expansion poly f=x3+2xy2+y2; list hne=develop(f); list hne_extended=extdevelop(hne,10); // compare the matrices ... print(hne[1]); @expansion{} 0,x, @expansion{} 0,-1 print(hne_extended[1]); @expansion{} 0,x, 0,0,0,0, 0,0,0,0, @expansion{} 0,-1,0,2,0,-4,0,8,0,-16 // ... and the resulting parametrizations: parametrisation(hne); @expansion{} [1]: @expansion{} _[1]=-t2 @expansion{} _[2]=-t3 parametrisation(hne_extended); @expansion{} [1]: @expansion{} _[1]=-t2+2t4-4t6+8t8-16t10 @expansion{} _[2]=-t3+2t5-4t7+8t9-16t11 parametrisation(hne_extended,0); @expansion{} [1]: @expansion{} [1]: @expansion{} _[1]=-t2+2t4-4t6+8t8-16t10 @expansion{} _[2]=-t3+2t5-4t7+8t9-16t11 @expansion{} [2]: @expansion{} 10,11 @c end example parametrisation d2t_singular/hnoether_lib.doc:449 @end smallexample @c inserted refs from d2t_singular/hnoether_lib.doc:472 @ifinfo @menu See also: * develop:: * extdevelop:: @end menu @end ifinfo @iftex @strong{See also:} @ref{develop}; @ref{extdevelop}. @end iftex @c end inserted refs from d2t_singular/hnoether_lib.doc:472 @c ---end content parametrisation--- @c ------------------- displayHNE ------------- @node displayHNE, invariants, parametrisation, hnoether_lib @subsubsection displayHNE @cindex displayHNE @c ---content displayHNE--- Procedure from library @code{hnoether.lib} (@pxref{hnoether_lib}). @table @asis @item @strong{Usage:} displayHNE(L[,n]); L list, n int @item @strong{Assume:} L is the output of @code{develop(f)}, or of @code{exdevelop(f,n)}, or of @code{hnexpansion(f[,"ess"])}, or (one entry in) the list @code{hne} in the ring created by @code{hnexpansion(f[,"ess"])}. @item @strong{Return:} - if only one argument is given, no return value, but display an ideal HNE of the following form: @smallexample HNE[1]=-y+[]*z(0)^1+[]*z(0)^2+...+z(0)^<>*z(1) HNE[2]=-x+ []*z(1)^2+...+z(1)^<>*z(2) HNE[3]= []*z(2)^2+...+z(2)^<>*z(3) ....... .......................... HNE[r+1]= []*z(r)^2+[]*z(r)^3+...... @end smallexample where @code{x},@code{y} are the first 2 variables of the basering. The values of @code{[]} are the coefficients of the Hamburger-Noether matrix, the values of @code{<>} are represented by @code{x} in the HN-matrix.@* - if a second argument is given, create and export a new ring with name @code{displayring} containing an ideal @code{HNE} as described above.@* - if L corresponds to the output of @code{hnexpansion(f[,"ess"])} or to the list @code{hne} in the ring created by @code{hnexpansion(f[,"ess"])}, @code{displayHNE(L[,n])} shows the HNE's of all branches of f in the form described above. The optional parameter is then ignored. @item @strong{Note:} The 1st line of the above ideal (i.e., @code{HNE[1]}) means that @code{y=[]*z(0)^1+...}, the 2nd line (@code{HNE[2]}) means that @code{x=[]*z(1)^2+...}, so you can see which indeterminate corresponds to which line (it's also possible that @code{x} corresponds to the 1st line and @code{y} to the 2nd). @end table @strong{Example:} @smallexample @c computed example displayHNE d2t_singular/hnoether_lib.doc:526 LIB "hnoether.lib"; ring r=0,(x,y),dp; poly f=x3+2xy2+y2; list hn=develop(f); displayHNE(hn); @expansion{} HNE[1]=-y+z(0)*z(1) @expansion{} HNE[2]=-x-z(1)^2 @c end example displayHNE d2t_singular/hnoether_lib.doc:526 @end smallexample @c inserted refs from d2t_singular/hnoether_lib.doc:534 @ifinfo @menu See also: * develop:: * hnexpansion:: @end menu @end ifinfo @iftex @strong{See also:} @ref{develop}; @ref{hnexpansion}. @end iftex @c end inserted refs from d2t_singular/hnoether_lib.doc:534 @c ---end content displayHNE--- @c ------------------- invariants ------------- @node invariants, displayInvariants, displayHNE, hnoether_lib @subsubsection invariants @cindex invariants @c ---content invariants--- Procedure from library @code{hnoether.lib} (@pxref{hnoether_lib}). @table @asis @item @strong{Usage:} invariants(INPUT); INPUT list or poly @item @strong{Assume:} INPUT is the output of @code{develop(f)}, or of @code{extdevelop(develop(f),n)}, or one entry in the list @code{hne} of the HNEring created by @code{hnexpansion}. @item @strong{Return:} list, if INPUT contains a valid HNE: @format invariants(INPUT)[1]: intvec (characteristic exponents) invariants(INPUT)[2]: intvec (generators of the semigroup) invariants(INPUT)[3]: intvec (Puiseux pairs, 1st components) invariants(INPUT)[4]: intvec (Puiseux pairs, 2nd components) invariants(INPUT)[5]: int (degree of the conductor) invariants(INPUT)[6]: intvec (sequence of multiplicities) @end format an empty list, if INPUT contains no valid HNE. @item @strong{Assume:} INPUT is bivariate polynomial f or the output of @code{hnexpansion(f[,"ess"])}, or the list @code{hne} in the HNEring created by @code{hnexpansion}. @item @strong{Return:} list INV, such that INV[i] is the output of @code{invariants(develop(f[i]))} as above, where f[i] is the ith branch of the curve f, and the last entry contains further invariants of f in the format: @format INV[i][1] : intvec (characteristic exponents) INV[i][2] : intvec (generators of the semigroup) INV[i][3] : intvec (Puiseux pairs, 1st components) INV[i][4] : intvec (Puiseux pairs, 2nd components) INV[i][5] : int (degree of the conductor) INV[i][6] : intvec (sequence of multiplicities) INV[last][1] : intmat (contact matrix of the branches) INV[last][2] : intmat (intersection multiplicities of the branches) INV[last][3] : int (delta invariant of f) @end format @item @strong{Note:} In case the Hamburger-Noether expansion of the curve f is needed for other purposes as well it is better to calculate this first with the aid of @code{hnexpansion} and use it as input instead of the polynomial itself. @cindex characteristic exponents @cindex semigroup of values @cindex Puiseux pairs @cindex conductor, degree @cindex multiplicities, sequence of @end table @strong{Example:} @smallexample @c computed example invariants d2t_singular/hnoether_lib.doc:602 LIB "hnoether.lib"; ring exring=0,(x,y),dp; list hne=develop(y4+2x3y2+x6+x5y); list INV=invariants(hne); INV[1]; // the characteristic exponents @expansion{} 4,6,7 INV[2]; // the generators of the semigroup of values @expansion{} 4,6,13 INV[3],INV[4]; // the Puiseux pairs in packed form @expansion{} 3,7 2,2 INV[5] / 2; // the delta-invariant @expansion{} 8 INV[6]; // the sequence of multiplicities @expansion{} 4,2,2,1,1 // To display the invariants more 'nicely': displayInvariants(hne); @expansion{} characteristic exponents : 4,6,7 @expansion{} generators of semigroup : 4,6,13 @expansion{} Puiseux pairs : (3,2)(7,2) @expansion{} degree of the conductor : 16 @expansion{} delta invariant : 8 @expansion{} sequence of multiplicities: 4,2,2,1,1 ///////////////////////////// INV=invariants((x2-y3)*(x3-y5)); INV[1][1]; // the characteristic exponents of the first branch @expansion{} 2,3 INV[2][6]; // the sequence of multiplicities of the second branch @expansion{} 3,2,1,1 print(INV[size(INV)][1]); // the contact matrix of the branches @expansion{} 0 3 @expansion{} 3 0 print(INV[size(INV)][2]); // the intersection numbers of the branches @expansion{} 0 9 @expansion{} 9 0 INV[size(INV)][3]; // the delta invariant of the curve @expansion{} 14 @c end example invariants d2t_singular/hnoether_lib.doc:602 @end smallexample @c inserted refs from d2t_singular/hnoether_lib.doc:623 @ifinfo @menu See also: * develop:: * displayInvariants:: * intersection:: * multsequence:: @end menu @end ifinfo @iftex @strong{See also:} @ref{develop}; @ref{displayInvariants}; @ref{intersection}; @ref{multsequence}. @end iftex @c end inserted refs from d2t_singular/hnoether_lib.doc:623 @c ---end content invariants--- @c ------------------- displayInvariants ------------- @node displayInvariants, multsequence, invariants, hnoether_lib @subsubsection displayInvariants @cindex displayInvariants @c ---content displayInvariants--- Procedure from library @code{hnoether.lib} (@pxref{hnoether_lib}). @table @asis @item @strong{Usage:} displayInvariants(INPUT); INPUT list or poly @item @strong{Assume:} INPUT is a bivariate polynomial, or the output of @code{develop(f)}, or of @code{extdevelop(develop(f),n)}, or (one entry of) the list @code{hne} in the ring created by @code{hnexpansion(f[,"ess"])}. @item @strong{Return:} none @item @strong{Display:} invariants of the corresponding branch, resp. of all branches, in a better readable form. @item @strong{Note:} In case the Hamburger-Noether expansion of the curve f is needed for other purposes as well it is better to calculate this first with the aid of @code{hnexpansion} and use it as input instead of the polynomial itself. @end table @strong{Example:} @smallexample @c computed example displayInvariants d2t_singular/hnoether_lib.doc:661 LIB "hnoether.lib"; ring exring=0,(x,y),dp; list hne=develop(y4+2x3y2+x6+x5y); displayInvariants(hne); @expansion{} characteristic exponents : 4,6,7 @expansion{} generators of semigroup : 4,6,13 @expansion{} Puiseux pairs : (3,2)(7,2) @expansion{} degree of the conductor : 16 @expansion{} delta invariant : 8 @expansion{} sequence of multiplicities: 4,2,2,1,1 @c end example displayInvariants d2t_singular/hnoether_lib.doc:661 @end smallexample @c inserted refs from d2t_singular/hnoether_lib.doc:668 @ifinfo @menu See also: * develop:: * hnexpansion:: * intersection:: * invariants:: @end menu @end ifinfo @iftex @strong{See also:} @ref{develop}; @ref{hnexpansion}; @ref{intersection}; @ref{invariants}. @end iftex @c end inserted refs from d2t_singular/hnoether_lib.doc:668 @c ---end content displayInvariants--- @c ------------------- multsequence ------------- @node multsequence, displayMultsequence, displayInvariants, hnoether_lib @subsubsection multsequence @cindex multsequence @c ---content multsequence--- Procedure from library @code{hnoether.lib} (@pxref{hnoether_lib}). @table @asis @item @strong{Usage:} multsequence(INPUT); INPUT list or poly @item @strong{Assume:} INPUT is the output of @code{develop(f)}, or of @code{extdevelop(develop(f),n)}, or one entry in the list @code{hne} of the ring created by @code{hnexpansion(f)}. @item @strong{Return:} intvec corresponding to the multiplicity sequence of (a branch) of the curve (the same as @code{invariants(INPUT)[6]}). @item @strong{Assume:} INPUT is a bivariate polynomial, or the output of @code{hnexpansion(f)}, or the list @code{hne} in the ring created by @code{hnexpansion(f)}. @item @strong{Return:} list of two integer matrices: @table @asis @item @code{multsequence(INPUT)[1][i,*]} contains the multiplicities of the branches at their infinitely near point of 0 in its (i-1) order neighbourhood (i.e., i=1: multiplicity of the branches themselves, i=2: multiplicity of their 1st quadratic transformed, etc., @* Hence, @code{multsequence(INPUT)[1][*,j]} is the multiplicity sequence of branch j. @item @code{multsequence(INPUT)[2][i,*]}: contains the information which of these infinitely near points coincide. @end table @item @strong{Note:} The order of elements of the list @code{hne} obtained from @code{hnexpansion(f[,"ess")} must not be changed (because then the coincident infinitely near points couldn't be grouped together, cf. meaning of 2nd intmat in example). Hence, it is not wise to compute the HNE of several polynomials separately, put them into a list INPUT and call @code{multsequence(INPUT)}. @* Use @code{displayMultsequence} to produce a better readable output for reducible curves on the screen. @* In case the Hamburger-Noether expansion of the curve f is needed for other purposes as well it is better to calculate this first with the aid of @code{hnexpansion} and use it as input instead of the polynomial itself. @cindex multiplicity sequence @end table @strong{Example:} @smallexample @c computed example multsequence d2t_singular/hnoether_lib.doc:729 LIB "hnoether.lib"; // -------- prepare for example --------- if (nameof(basering)=="HNEring") @{ def rettering=HNEring; kill HNEring; @} // ------ the example starts here ------- ring r=0,(x,y),dp; list hn=hnexpansion((x6-y10)*(x+y2-y3)*(x+y2+y3)); // 4 branches def HNEring=hn[1]; setring HNEring; multsequence(hne[1])," | ",multsequence(hne[2])," | ", multsequence(hne[3])," | ",multsequence(hne[4]); @expansion{} 3,2,1,1 | 3,2,1,1 | 1 | 1 multsequence(hne); @expansion{} [1]: @expansion{} 3,3,1,1, @expansion{} 2,2,1,1, @expansion{} 1,1,1,1, @expansion{} 1,1,1,1, @expansion{} 1,1,1,1 @expansion{} [2]: @expansion{} 4,0,0,0, @expansion{} 4,0,0,0, @expansion{} 2,2,0,0, @expansion{} 2,1,1,0, @expansion{} 1,1,1,1 // The meaning of the entries of the 2nd matrix is as follows: displayMultsequence(hne); @expansion{} [(3,3,1,1)], @expansion{} [(2,2,1,1)], @expansion{} [(1,1),(1,1)], @expansion{} [(1,1),(1),(1)], @expansion{} [(1),(1),(1),(1)] // --- restore HNEring if previously defined --- kill HNEring,r; if (defined(rettering)) @{ setring rettering; def HNEring=rettering; export HNEring; @} @c end example multsequence d2t_singular/hnoether_lib.doc:729 @end smallexample @c inserted refs from d2t_singular/hnoether_lib.doc:755 @ifinfo @menu See also: * develop:: * displayMultsequence:: * hnexpansion:: * separateHNE:: @end menu @end ifinfo @iftex @strong{See also:} @ref{develop}; @ref{displayMultsequence}; @ref{hnexpansion}; @ref{separateHNE}. @end iftex @c end inserted refs from d2t_singular/hnoether_lib.doc:755 @c ---end content multsequence--- @c ------------------- displayMultsequence ------------- @node displayMultsequence, intersection, multsequence, hnoether_lib @subsubsection displayMultsequence @cindex displayMultsequence @c ---content displayMultsequence--- Procedure from library @code{hnoether.lib} (@pxref{hnoether_lib}). @table @asis @item @strong{Usage:} displayMultsequence(INPUT); INPUT list or poly @item @strong{Assume:} INPUT is a bivariate polynomial, or the output of @code{develop(f)}, or of @code{extdevelop(develop(f),n)}, or of of @code{hnexpansion(f[,"ess"])}, or (one entry in) the list @code{hne} of the ring created by @code{hnexpansion(f[,"ess "])}. @item @strong{Return:} nothing @item @strong{Display:} the sequence of multiplicities: @format - if @code{INPUT=develop(f)} or @code{INPUT=extdevelop(develop(f),n)} or @code{INPUT=hne[i]}: @code{a , b , c , ....... , 1} - if @code{INPUT=f} or @code{INPUT=hnexpansion(f[,"ess"])} or @code{INPUT=hne}: @code{[(a_1, .... , b_1 , .... , c_1)],} @code{[(a_2, ... ), ... , (... , c_2)],} @code{ ........................................ ,} @code{[(a_n),(b_n), ....., (c_n)]} with: @code{a_1 , ... , a_n} the sequence of multiplicities of the 1st branch, @code{[...]} the multiplicities of the j-th transformed of all branches, @code{(...)} indicating branches meeting in an infinitely near point. @end format @item @strong{Note:} The same restrictions for INPUT as in @code{multsequence} apply.@* In case the Hamburger-Noether expansion of the curve f is needed for other purposes as well it is better to calculate this first with the aid of @code{hnexpansion} and use it as input instead of the polynomial itself. @end table @strong{Example:} @smallexample @c computed example displayMultsequence d2t_singular/hnoether_lib.doc:806 LIB "hnoether.lib"; // ------ the example starts here ------- ring r=0,(x,y),dp; //// Example 1: Input = output of develop displayMultsequence(develop(x3-y5)); @expansion{} The sequence of multiplicities is 3,2,1,1 //// Example 2: Input = bivariate polynomial displayMultsequence((x6-y10)*(x+y2-y3)*(x+y2+y3)); @expansion{} [(3,3,1,1)], @expansion{} [(2,2,1,1)], @expansion{} [(1,1),(1,1)], @expansion{} [(1,1),(1),(1)], @expansion{} [(1),(1),(1),(1)] @c end example displayMultsequence d2t_singular/hnoether_lib.doc:806 @end smallexample @c inserted refs from d2t_singular/hnoether_lib.doc:816 @ifinfo @menu See also: * develop:: * hnexpansion:: * multsequence:: * separateHNE:: @end menu @end ifinfo @iftex @strong{See also:} @ref{develop}; @ref{hnexpansion}; @ref{multsequence}; @ref{separateHNE}. @end iftex @c end inserted refs from d2t_singular/hnoether_lib.doc:816 @c ---end content displayMultsequence--- @c ------------------- intersection ------------- @node intersection, stripHNE, displayMultsequence, hnoether_lib @subsubsection intersection @cindex intersection @c ---content intersection--- Procedure from library @code{hnoether.lib} (@pxref{hnoether_lib}). @table @asis @item @strong{Usage:} intersection(hne1,hne2); hne1, hne2 lists @item @strong{Assume:} hne1, hne2 represent a HNE (i.e., are the output of @code{develop(f)}, or of @code{extdevelop(develop(f),n)}, or one entry of the list @code{hne} in the ring created by @code{hnexpansion(f[,"ess"])}). @item @strong{Return:} int, the intersection multiplicity of the branches corresponding to hne1 and hne2. @cindex intersection multiplicity @end table @strong{Example:} @smallexample @c computed example intersection d2t_singular/hnoether_lib.doc:847 LIB "hnoether.lib"; // ------ the example starts here ------- ring r=0,(x,y),dp; list hn=hnexpansion((x2-y3)*(x2+y3)); def HNEring=hn[1]; setring HNEring; intersection(hne[1],hne[2]); @expansion{} 6 @c end example intersection d2t_singular/hnoether_lib.doc:847 @end smallexample @c inserted refs from d2t_singular/hnoether_lib.doc:857 @ifinfo @menu See also: * displayInvariants:: * hnexpansion:: @end menu @end ifinfo @iftex @strong{See also:} @ref{displayInvariants}; @ref{hnexpansion}. @end iftex @c end inserted refs from d2t_singular/hnoether_lib.doc:857 @c ---end content intersection--- @c ------------------- stripHNE ------------- @node stripHNE, is_irred, intersection, hnoether_lib @subsubsection stripHNE @cindex stripHNE @c ---content stripHNE--- Procedure from library @code{hnoether.lib} (@pxref{hnoether_lib}). @table @asis @item @strong{Usage:} stripHNE(L); L list @item @strong{Assume:} L is the output of @code{develop(f)}, or of @code{extdevelop(develop(f),n)}, or (one entry of) the list @code{hne} in the ring created by @code{hnexpansion(f[,"ess"])}. @item @strong{Return:} list in the same format as L, but all polynomials L[4], resp. L[i][4], are set to zero. @item @strong{Note:} The purpose of this procedure is to remove huge amounts of data no longer needed. It is useful, if one or more of the polynomials in L consume much memory. It is still possible to compute invariants, parametrizations etc. with the stripped HNE(s), but it is not possible to use @code{extdevelop} with them. @end table @strong{Example:} @smallexample @c computed example stripHNE d2t_singular/hnoether_lib.doc:893 LIB "hnoether.lib"; ring r=0,(x,y),dp; list hne=develop(x2+y3+y4); hne; @expansion{} [1]: @expansion{} _[1,1]=0 @expansion{} _[1,2]=x @expansion{} _[2,1]=0 @expansion{} _[2,2]=-1 @expansion{} [2]: @expansion{} 1,-1 @expansion{} [3]: @expansion{} 1 @expansion{} [4]: @expansion{} x4-2x2y+y2+y @expansion{} [5]: @expansion{} 1 stripHNE(hne); @expansion{} [1]: @expansion{} _[1,1]=0 @expansion{} _[1,2]=x @expansion{} _[2,1]=0 @expansion{} _[2,2]=-1 @expansion{} [2]: @expansion{} 1,-1 @expansion{} [3]: @expansion{} 1 @expansion{} [4]: @expansion{} 0 @expansion{} [5]: @expansion{} 1 @c end example stripHNE d2t_singular/hnoether_lib.doc:893 @end smallexample @c inserted refs from d2t_singular/hnoether_lib.doc:901 @ifinfo @menu See also: * develop:: * extdevelop:: * hnexpansion:: @end menu @end ifinfo @iftex @strong{See also:} @ref{develop}; @ref{extdevelop}; @ref{hnexpansion}. @end iftex @c end inserted refs from d2t_singular/hnoether_lib.doc:901 @c ---end content stripHNE--- @c ------------------- is_irred ------------- @node is_irred, delta, stripHNE, hnoether_lib @subsubsection is_irred @cindex is_irred @c ---content is_irred--- Procedure from library @code{hnoether.lib} (@pxref{hnoether_lib}). @table @asis @item @strong{Usage:} is_irred(f); f poly @item @strong{Assume:} f is a squarefree bivariate polynomial (in the first 2 ring variables). @item @strong{Return:} int (0 or 1): @* - @code{is_irred(f)=1} if f is irreducible as a formal power series over the algebraic closure of its coefficient field (f defines an analytically irreducible curve at zero), @* - @code{is_irred(f)=0} otherwise. @item @strong{Note:} 0 and units in the ring of formal power series are considered to be not irreducible. @cindex irreducible power series @end table @strong{Example:} @smallexample @c computed example is_irred d2t_singular/hnoether_lib.doc:937 LIB "hnoether.lib"; ring exring=0,(x,y),ls; is_irred(x2+y3); @expansion{} 1 is_irred(x2+y2); @expansion{} 0 is_irred(x2+y3+1); @expansion{} 0 @c end example is_irred d2t_singular/hnoether_lib.doc:937 @end smallexample @c ---end content is_irred--- @c ------------------- delta ------------- @node delta, newtonpoly, is_irred, hnoether_lib @subsubsection delta @cindex delta @c ---content delta--- Procedure from library @code{hnoether.lib} (@pxref{hnoether_lib}). @table @asis @item @strong{Usage:} delta(INPUT); INPUT a polynomial defining an isolated plane curve singularity at 0, or the Hamburger-Noether expansion thereof, i.e. the output of @code{develop(f)}, or the output of @code{hnexpansion(f[,"ess"])}, or (one of the entries of) the list @code{hne} in the ring created by @code{hnexpansion(f[,"ess"])}. @item @strong{Return:} the delta invariant of the singularity at 0, the vector space dimension of R~/R, where R~ is the normalization of the singularity R=basering/f @item @strong{Note:} In case the Hamburger-Noether expansion of the curve f is needed for other purposes as well it is better to calculate this first with the aid of @code{hnexpansion} and use it as input instead of the polynomial itself. @cindex delta invariant @end table @strong{Example:} @smallexample @c computed example delta d2t_singular/hnoether_lib.doc:977 LIB "hnoether.lib"; ring r = 32003,(x,y),ds; poly f = x25+x24-4x23-1x22y+4x22+8x21y-2x21-12x20y-4x19y2+4x20+10x19y +12x18y2-24x18y-20x17y2-4x16y3+x18+60x16y2+20x15y3-9x16y -80x14y3-10x13y4+36x14y2+60x12y4+2x11y5-84x12y3-24x10y5 +126x10y4+4x8y6-126x8y5+84x6y6-36x4y7+9x2y8-1y9; delta(f); @expansion{} 96 @c end example delta d2t_singular/hnoether_lib.doc:977 @end smallexample @c inserted refs from d2t_singular/hnoether_lib.doc:987 @ifinfo @menu See also: * deltaLoc:: * invariants:: @end menu @end ifinfo @iftex @strong{See also:} @ref{deltaLoc}; @ref{invariants}. @end iftex @c end inserted refs from d2t_singular/hnoether_lib.doc:987 @c ---end content delta--- @c ------------------- newtonpoly ------------- @node newtonpoly, is_NND, delta, hnoether_lib @subsubsection newtonpoly @cindex newtonpoly @c ---content newtonpoly--- Procedure from library @code{hnoether.lib} (@pxref{hnoether_lib}). @table @asis @item @strong{Usage:} newtonpoly(f); f poly @item @strong{Assume:} basering has exactly two variables; @* f is convenient, that is, f(x,0) != 0 != f(0,y). @item @strong{Return:} list of intvecs (= coordinates x,y of the Newton polygon of f). @item @strong{Note:} Procedure uses @code{execute}; this can be avoided by calling @code{newtonpoly(f,1)} if the ordering of the basering is @code{ls}. @cindex Newton polygon @end table @strong{Example:} @smallexample @c computed example newtonpoly d2t_singular/hnoether_lib.doc:1019 LIB "hnoether.lib"; ring r=0,(x,y),ls; poly f=x5+2x3y-x2y2+3xy5+y6-y7; newtonpoly(f); @expansion{} [1]: @expansion{} 0,6 @expansion{} [2]: @expansion{} 2,2 @expansion{} [3]: @expansion{} 3,1 @expansion{} [4]: @expansion{} 5,0 @c end example newtonpoly d2t_singular/hnoether_lib.doc:1019 @end smallexample @c ---end content newtonpoly--- @c ------------------- is_NND ------------- @node is_NND, puiseux2generators, newtonpoly, hnoether_lib @subsubsection is_NND @cindex is_NND @c ---content is_NND--- Procedure from library @code{hnoether.lib} (@pxref{hnoether_lib}). @table @asis @item @strong{Usage:} is_NND(f[,mu,NP]); f poly, mu int, NP list of intvecs @item @strong{Assume:} f is convenient, that is, f(x,0) != 0 != f(0,y);@* mu (optional) is Milnor number of f.@* NP (optional) is output of @code{newtonpoly(f)}. @item @strong{Return:} int: 1 if f in Newton non-degenerate, 0 otherwise. @cindex Newton non-degenerate @cindex Newton polygon @end table @strong{Example:} @smallexample @c computed example is_NND d2t_singular/hnoether_lib.doc:1052 LIB "hnoether.lib"; ring r=0,(x,y),ls; poly f=x5+y3; is_NND(f); @expansion{} 1 poly g=(x-y)^5+3xy5+y6-y7; is_NND(g); @expansion{} 0 // if already computed, one should give the Minor number and Newton polygon // as second and third input: int mu=milnor(g); list NP=newtonpoly(g); is_NND(g,mu,NP); @expansion{} 0 @c end example is_NND d2t_singular/hnoether_lib.doc:1052 @end smallexample @c inserted refs from d2t_singular/hnoether_lib.doc:1066 @ifinfo @menu See also: * newtonpoly:: @end menu @end ifinfo @iftex @strong{See also:} @ref{newtonpoly}. @end iftex @c end inserted refs from d2t_singular/hnoether_lib.doc:1066 @c ---end content is_NND--- @c ------------------- puiseux2generators ------------- @node puiseux2generators, separateHNE, is_NND, hnoether_lib @subsubsection puiseux2generators @cindex puiseux2generators @c ---content puiseux2generators--- Procedure from library @code{hnoether.lib} (@pxref{hnoether_lib}). @table @asis @item @strong{Usage:} puiseux2generators(m,n); m,n intvec @item @strong{Assume:} m, resp. n, represent the 1st, resp. 2nd, components of Puiseux pairs (e.g., @code{m=invariants(L)[3]}, @code{n=invariants(L)[4]}). @item @strong{Return:} intvec of the generators of the semigroup of values. @end table @strong{Example:} @smallexample @c computed example puiseux2generators d2t_singular/hnoether_lib.doc:1093 LIB "hnoether.lib"; // take (3,2),(7,2),(15,2),(31,2),(63,2),(127,2) as Puiseux pairs: puiseux2generators(intvec(3,7,15,31,63,127),intvec(2,2,2,2,2,2)); @expansion{} 64,96,208,424,852,1706,3413 @c end example puiseux2generators d2t_singular/hnoether_lib.doc:1093 @end smallexample @c inserted refs from d2t_singular/hnoether_lib.doc:1099 @ifinfo @menu See also: * invariants:: @end menu @end ifinfo @iftex @strong{See also:} @ref{invariants}. @end iftex @c end inserted refs from d2t_singular/hnoether_lib.doc:1099 @c ---end content puiseux2generators--- @c ------------------- separateHNE ------------- @node separateHNE, squarefree, puiseux2generators, hnoether_lib @subsubsection separateHNE @cindex separateHNE @c ---content separateHNE--- Procedure from library @code{hnoether.lib} (@pxref{hnoether_lib}). @table @asis @item @strong{Usage:} separateHNE(hne1,hne2); hne1, hne2 lists @item @strong{Assume:} hne1, hne2 are HNEs (=output of @code{develop(f)}, @code{extdevelop(develop(f),n)}, or one entry in the list @code{hne} in the ring created by @code{hnexpansion(f[,"ess"])}. @item @strong{Return:} number of quadratic transformations needed to separate both curves (branches). @end table @strong{Example:} @smallexample @c computed example separateHNE d2t_singular/hnoether_lib.doc:1129 LIB "hnoether.lib"; int p=printlevel; printlevel=-1; ring r=0,(x,y),dp; list hne1=develop(x); list hne2=develop(x+y); list hne3=develop(x+y2); separateHNE(hne1,hne2); // two transversal lines @expansion{} 1 separateHNE(hne1,hne3); // one quadratic transform. gives 1st example @expansion{} 2 printlevel=p; @c end example separateHNE d2t_singular/hnoether_lib.doc:1129 @end smallexample @c inserted refs from d2t_singular/hnoether_lib.doc:1141 @ifinfo @menu See also: * develop:: * displayMultsequence:: * hnexpansion:: * multsequence:: @end menu @end ifinfo @iftex @strong{See also:} @ref{develop}; @ref{displayMultsequence}; @ref{hnexpansion}; @ref{multsequence}. @end iftex @c end inserted refs from d2t_singular/hnoether_lib.doc:1141 @c ---end content separateHNE--- @c ------------------- squarefree ------------- @node squarefree, allsquarefree, separateHNE, hnoether_lib @subsubsection squarefree @cindex squarefree @c ---content squarefree--- Procedure from library @code{hnoether.lib} (@pxref{hnoether_lib}). @table @asis @item @strong{Usage:} squarefree(f); f poly @item @strong{Assume:} f is a bivariate polynomial (in the first 2 ring variables). @item @strong{Return:} poly, a squarefree divisor of f. @item @strong{Note:} Usually, the return value is the greatest squarefree divisor, but there is one exception: factors with a p-th root, p the characteristic of the basering, are lost. @end table @strong{Example:} @smallexample @c computed example squarefree d2t_singular/hnoether_lib.doc:1172 LIB "hnoether.lib"; ring exring=3,(x,y),dp; squarefree((x3+y)^2); @expansion{} x3+y squarefree((x+y)^3*(x-y)^2); // Warning: (x+y)^3 is lost @expansion{} x-y squarefree((x+y)^4*(x-y)^2); // result is (x+y)*(x-y) @expansion{} x2-y2 @c end example squarefree d2t_singular/hnoether_lib.doc:1172 @end smallexample @c inserted refs from d2t_singular/hnoether_lib.doc:1180 @ifinfo @menu See also: * allsquarefree:: @end menu @end ifinfo @iftex @strong{See also:} @ref{allsquarefree}. @end iftex @c end inserted refs from d2t_singular/hnoether_lib.doc:1180 @c ---end content squarefree--- @c ------------------- allsquarefree ------------- @node allsquarefree, further_hn_proc, squarefree, hnoether_lib @subsubsection allsquarefree @cindex allsquarefree @c ---content allsquarefree--- Procedure from library @code{hnoether.lib} (@pxref{hnoether_lib}). @table @asis @item @strong{Usage :} allsquarefree(f,g); f,g poly @item @strong{Assume:} g is the output of @code{squarefree(f)}. @item @strong{Return:} the greatest squarefree divisor of f. @item @strong{Note :} This proc uses factorize to get the missing factors of f not in g and, therefore, may be slow. @end table @strong{Example:} @smallexample @c computed example allsquarefree d2t_singular/hnoether_lib.doc:1210 LIB "hnoether.lib"; ring exring=7,(x,y),dp; poly f=(x+y)^7*(x-y)^8; poly g=squarefree(f); g; // factor x+y lost, since characteristic=7 @expansion{} x-y allsquarefree(f,g); // all factors (x+y)*(x-y) found @expansion{} x2-y2 @c end example allsquarefree d2t_singular/hnoether_lib.doc:1210 @end smallexample @c inserted refs from d2t_singular/hnoether_lib.doc:1219 @ifinfo @menu See also: * squarefree:: @end menu @end ifinfo @iftex @strong{See also:} @ref{squarefree}. @end iftex @c end inserted refs from d2t_singular/hnoether_lib.doc:1219 @c ---end content allsquarefree--- @c ------------------- further_hn_proc ------------- @node further_hn_proc,, allsquarefree, hnoether_lib @subsubsection further_hn_proc @cindex further_hn_proc @c ---content further_hn_proc--- Procedure from library @code{hnoether.lib} (@pxref{hnoether_lib}). @table @asis @item @strong{Usage:} further_hn_proc(); @item @strong{Note:} The library @code{hnoether.lib} contains some more procedures which are not shown when typing @code{help hnoether.lib;}. They may be useful for interactive use (e.g. if you want to do the calculation of an HN development "by hand" to see the intermediate results), and they can be enumerated by calling @code{further_hn_proc()}. @* Use @code{help ;} for detailed information about each of them. @end table @strong{Example:} @smallexample @c computed example further_hn_proc d2t_singular/hnoether_lib.doc:1248 LIB "hnoether.lib"; further_hn_proc(); @expansion{} @expansion{} The following procedures are also part of `hnoether.lib': @expansion{} @expansion{} getnm(f); intersection pts. of Newton polygon with axes @expansion{} T_Transform(f,Q,N); returns f(y,xy^Q)/y^NQ (f: poly, Q,N: int) @expansion{} T1_Transform(f,d,M); returns f(x,y+d*x^M) (f: poly,d:number,M:int) @expansion{} T2_Transform(f,d,M,N,ref); a composition of T1 & T @expansion{} koeff(f,I,J); gets coefficient of indicated monomial of poly f @expansion{} redleit(f,S,E); restriction of monomials of f to line (S-E) @expansion{} leit(f,n,m); special case of redleit (for irred. polynomials) @expansion{} testreducible(f,n,m); tests whether f is reducible @expansion{} charPoly(f,M,N); characteristic polynomial of f @expansion{} find_in_list(L,p); find int p in list L @expansion{} get_last_divisor(M,N); last divisor in Euclid's algorithm @expansion{} factorfirst(f,M,N); try to factor f without `factorize' @expansion{} factorlist(L); factorize a list L of polynomials @expansion{} referencepoly(D); a polynomial f s.t. D is the Newton diagram of f @c end example further_hn_proc d2t_singular/hnoether_lib.doc:1248 @end smallexample @c ---end content further_hn_proc--- texi2html-1.82/test/singular_manual/d2t_singular/random_lib.tex0000644000175000017500000003364111264347126026632 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/random_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/random_lib.doc INSTEAD @c library version: (1.16.2.1,2002/02/20) @c library file: ../Singular/LIB/random.lib @cindex random.lib @cindex random_lib @table @asis @item @strong{Library:} random.lib @item @strong{Purpose:} Creating Random and Sparse Matrices, Ideals, Polys @end table @strong{Procedures:} @menu * genericid:: generic sparse linear combinations of generators of i * randomid:: random linear combinations of generators of id * randommat:: nxm matrix of random linear combinations of id * sparseid:: ideal of k random sparse poly's of degree d [u<=d<=o] * sparsematrix:: nxm sparse matrix of polynomials of degree<=o * sparsemat:: nxm sparse integer matrix with random coefficients * sparsepoly:: random sparse polynomial with terms of degree in [u,o] * sparsetriag:: nxm sparse lower-triag intmat with random coefficients * triagmatrix:: nxm sparse lower-triag matrix of poly's of degree<=o * randomLast:: random transformation of the last variable * randomBinomial:: binomial ideal, k random generators of degree >=u @end menu @c ---end content LibInfo--- @c ------------------- genericid ------------- @node genericid, randomid,, random_lib @subsubsection genericid @cindex genericid @c ---content genericid--- Procedure from library @code{random.lib} (@pxref{random_lib}). @table @asis @item @strong{Usage:} genericid(id,[,p,b]); id ideal/module, k,p,b integers @item @strong{Return:} system of generators of id which are generic, sparse, triagonal linear combinations of given generators with coefficients in [1,b] and sparseness p percent, bigger p being sparser (default: p=75, b=30000) @item @strong{Note:} For performance reasons try small bound b in characteristic 0 @end table @strong{Example:} @smallexample @c computed example genericid d2t_singular/random_lib.doc:52 LIB "random.lib"; ring r=0,(t,x,y,z),ds; ideal i= x3+y4,z4+yx,t+x+y+z; genericid(i,0,10); @expansion{} _[1]=3t+3x+3y+3z+2xy+x3+y4+2z4 @expansion{} _[2]=4t+4x+4y+4z+xy+z4 @expansion{} _[3]=t+x+y+z module m=[x,0,0,0],[0,y2,0,0],[0,0,z3,0],[0,0,0,t4]; print(genericid(m)); @expansion{} x, 0, 0, 0, @expansion{} 17904y2,y2, 0, 0, @expansion{} 0, 24170z3,z3,0, @expansion{} 0, 0, 0, t4 @c end example genericid d2t_singular/random_lib.doc:52 @end smallexample @c ---end content genericid--- @c ------------------- randomid ------------- @node randomid, randommat, genericid, random_lib @subsubsection randomid @cindex randomid @c ---content randomid--- Procedure from library @code{random.lib} (@pxref{random_lib}). @table @asis @item @strong{Usage:} randomid(id,[k,b]); id ideal/module, b,k integers @item @strong{Return:} ideal/module having k generators which are random linear combinations of generators of id with coefficients in the interval [-b,b] (default: b=30000, k=size(id)) @item @strong{Note:} For performance reasons try small bound b in characteristic 0 @end table @strong{Example:} @smallexample @c computed example randomid d2t_singular/random_lib.doc:85 LIB "random.lib"; ring r=0,(x,y,z),dp; randomid(maxideal(2),2,9); @expansion{} _[1]=-5x2-9xy+6y2-8xz-8yz+4z2 @expansion{} _[2]=-9xy+2y2+xz+yz-z2 module m=[x,0,1],[0,y2,0],[y,0,z3]; show(randomid(m)); @expansion{} // module, 3 generator(s) @expansion{} [1369x-11685y,-4481y2,-11685z3+1369] @expansion{} [-642x-13756y,25342y2,-13756z3-642] @expansion{} [2536x-6355y,8285y2,-6355z3+2536] @c end example randomid d2t_singular/random_lib.doc:85 @end smallexample @c ---end content randomid--- @c ------------------- randommat ------------- @node randommat, sparseid, randomid, random_lib @subsubsection randommat @cindex randommat @c ---content randommat--- Procedure from library @code{random.lib} (@pxref{random_lib}). @table @asis @item @strong{Usage:} randommat(n,m[,id,b]); n,m,b integers, id ideal @item @strong{Return:} nxm matrix, entries are random linear combinations of elements of id and coefficients in [-b,b] @*[default: (id,b) = (maxideal(1),30000)] @item @strong{Note:} For performance reasons try small bound b in char 0 @end table @strong{Example:} @smallexample @c computed example randommat d2t_singular/random_lib.doc:117 LIB "random.lib"; ring r=0,(x,y,z),dp; matrix A=randommat(3,3,maxideal(2),9); print(A); @expansion{} 9x2-2xy-8y2-9xz+yz+4z2, 9x2-4xy+y2-5xz+6yz-z2, 8x2+xy-9y2+2yz-8z2, @expansion{} -x2+5xy-8y2-7xz+4yz-3z2,x2+xy-4y2-xz+5z2, 5x2-8xy+8y2+6xz+yz+7z2, @expansion{} 4x2-5xy-6y2-4yz-5z2, -4x2-6xy-4y2-8xz+3yz+5z2,2x2+3xy+y2+4xz-3yz+2z2 A=randommat(2,3); print(A); @expansion{} 15276x+9897y+7526z, 6495x-24178y+11295z,-5745x-14754y+15979z, @expansion{} 20788x-28366y-20283z,24911x-10978y+3341z,12412x+11216y+15344z @c end example randommat d2t_singular/random_lib.doc:117 @end smallexample @c ---end content randommat--- @c ------------------- sparseid ------------- @node sparseid, sparsematrix, randommat, random_lib @subsubsection sparseid @cindex sparseid @c ---content sparseid--- Procedure from library @code{random.lib} (@pxref{random_lib}). @table @asis @item @strong{Usage:} sparseid(k,u[,o,p,b]); k,u,o,p,b integers @item @strong{Return:} ideal having k generators, each of degree d, u<=d<=o, p percent of terms in degree d are 0, the remaining have random coefficients in the interval [1,b], (default: o=u=d, p=75, b=30000) @end table @strong{Example:} @smallexample @c computed example sparseid d2t_singular/random_lib.doc:147 LIB "random.lib"; ring r = 0,(a,b,c,d),ds; sparseid(2,3);""; @expansion{} _[1]=12773a3+24263a2c+20030abc+17904b2c+26359c3 @expansion{} _[2]=24004a3+6204b2c+24170bc2+19505c2d+21962bd2 @expansion{} sparseid(3,0,4,90,9); @expansion{} _[1]=1+4a2+8b2c+3c3+4a3b+4a2b2+5abc2+3ac3 @expansion{} _[2]=a+a2+7ab2+6a2c+3c3+5a3b+9ab3+2c4+3c3d+8ad3 @expansion{} _[3]=5a+ab+2ac2+2b3c+8abcd @c end example sparseid d2t_singular/random_lib.doc:147 @end smallexample @c ---end content sparseid--- @c ------------------- sparsematrix ------------- @node sparsematrix, sparsemat, sparseid, random_lib @subsubsection sparsematrix @cindex sparsematrix @c ---content sparsematrix--- Procedure from library @code{random.lib} (@pxref{random_lib}). @table @asis @item @strong{Usage:} sparsematrix(n,m,o[,u,pe,pp,b]); n,m,o,u,pe,pp,b integers @item @strong{Return:} nxm matrix, about pe percent of the entries are 0, the remaining are random polynomials of degree d, u<=d<=o, with pp percent of the terms being 0, the remaining have random coefficients in the interval [1,b] [default: (pe,u,pp,b) = (0,50,75,100)] @end table @strong{Example:} @smallexample @c computed example sparsematrix d2t_singular/random_lib.doc:176 LIB "random.lib"; ring r = 0,(a,b,c,d),dp; // sparse matrix of sparse polys of degree <=2: print(sparsematrix(3,4,2));""; @expansion{} 14ab+20bc+79cd+30b, 32a2+97bc+5b, 0, 0, @expansion{} 0, 0, 6c2+16b+64c+76,0, @expansion{} 17a2+30ab+94bc+19b+45d,88a2+44bc+13d2+31a,59ac, 0 @expansion{} // dense matrix of sparse linear forms: print(sparsematrix(3,3,1,1,0,55,9)); @expansion{} 9b+7c+8d,9b+9d,5a, @expansion{} 7c+d, a+6b, 2b+2d, @expansion{} 9a+5b+9c,2a+9d,2d @c end example sparsematrix d2t_singular/random_lib.doc:176 @end smallexample @c ---end content sparsematrix--- @c ------------------- sparsemat ------------- @node sparsemat, sparsepoly, sparsematrix, random_lib @subsubsection sparsemat @cindex sparsemat @c ---content sparsemat--- Procedure from library @code{random.lib} (@pxref{random_lib}). @table @asis @item @strong{Usage:} sparsemat(n,m[,p,b]); n,m,p,b integers @item @strong{Return:} nxm integer matrix, p percent of the entries are 0, the remaining are random coefficients >=1 and <= b; [defaults: (p,b) = (75,1)] @end table @strong{Example:} @smallexample @c computed example sparsemat d2t_singular/random_lib.doc:205 LIB "random.lib"; sparsemat(5,5);""; @expansion{} 0,0,0,0,0, @expansion{} 0,1,0,0,1, @expansion{} 0,0,0,1,0, @expansion{} 0,1,0,0,0, @expansion{} 0,1,0,1,1 @expansion{} sparsemat(5,5,95);""; @expansion{} 1,0,0,0,0, @expansion{} 0,0,0,0,0, @expansion{} 0,0,0,0,0, @expansion{} 0,0,0,0,0, @expansion{} 0,0,0,1,0 @expansion{} sparsemat(5,5,5);""; @expansion{} 1,1,1,1,1, @expansion{} 1,1,1,1,1, @expansion{} 1,1,1,1,1, @expansion{} 1,0,1,1,1, @expansion{} 1,1,1,1,0 @expansion{} sparsemat(5,5,50,100); @expansion{} 0,17,24,80,0, @expansion{} 0,13,30,45,0, @expansion{} 19,0,0,0,0, @expansion{} 93,0,23,0,69, @expansion{} 0,88,44,31,0 @c end example sparsemat d2t_singular/random_lib.doc:205 @end smallexample @c ---end content sparsemat--- @c ------------------- sparsepoly ------------- @node sparsepoly, sparsetriag, sparsemat, random_lib @subsubsection sparsepoly @cindex sparsepoly @c ---content sparsepoly--- Procedure from library @code{random.lib} (@pxref{random_lib}). @table @asis @item @strong{Usage:} sparsepoly(u[,o,p,b]); u,o,p,b integers @item @strong{Return:} poly having only terms in degree d, u<=d<=o, p percent of the terms in degree d are 0, the remaining have random coefficients in [1,b), (defaults: o=u=d, p=75, b=30000) @end table @strong{Example:} @smallexample @c computed example sparsepoly d2t_singular/random_lib.doc:234 LIB "random.lib"; ring r=0,(x,y,z),dp; sparsepoly(5);""; @expansion{} 24263xy4+24170x4z+21962x3yz+26642xy3z+5664xy2z2+17904xz4 @expansion{} sparsepoly(3,5,90,9); @expansion{} 8x3z2+2y3z2+3xyz3+2xy3+yz3+xy2 @c end example sparsepoly d2t_singular/random_lib.doc:234 @end smallexample @c ---end content sparsepoly--- @c ------------------- sparsetriag ------------- @node sparsetriag, triagmatrix, sparsepoly, random_lib @subsubsection sparsetriag @cindex sparsetriag @c ---content sparsetriag--- Procedure from library @code{random.lib} (@pxref{random_lib}). @table @asis @item @strong{Usage:} sparsetriag(n,m[,p,b]); n,m,p,b integers @item @strong{Return:} nxm lower triagonal integer matrix, diagonal entries equal to 1, about p percent of lower diagonal entries are 0, the remaining are random integers >=1 and <= b; [defaults: (p,b) = (75,1)] @end table @strong{Example:} @smallexample @c computed example sparsetriag d2t_singular/random_lib.doc:262 LIB "random.lib"; sparsetriag(5,7);""; @expansion{} 1,0,0,0,0,0,0, @expansion{} 0,1,0,0,0,0,0, @expansion{} 0,1,1,0,0,0,0, @expansion{} 0,0,0,1,0,0,0, @expansion{} 1,1,0,0,1,0,0 @expansion{} sparsetriag(7,5,90);""; @expansion{} 1,0,0,0,0, @expansion{} 0,1,0,0,0, @expansion{} 0,1,1,0,0, @expansion{} 0,0,0,1,0, @expansion{} 0,0,0,0,1, @expansion{} 0,0,0,1,0, @expansion{} 0,1,0,0,0 @expansion{} sparsetriag(5,5,0);""; @expansion{} 1,0,0,0,0, @expansion{} 1,1,0,0,0, @expansion{} 1,1,1,0,0, @expansion{} 1,1,1,1,0, @expansion{} 1,1,1,1,1 @expansion{} sparsetriag(5,5,50,100); @expansion{} 1,0,0,0,0, @expansion{} 73,1,0,0,0, @expansion{} 0,79,1,0,0, @expansion{} 14,0,0,1,0, @expansion{} 0,48,23,0,1 @c end example sparsetriag d2t_singular/random_lib.doc:262 @end smallexample @c ---end content sparsetriag--- @c ------------------- triagmatrix ------------- @node triagmatrix, randomLast, sparsetriag, random_lib @subsubsection triagmatrix @cindex triagmatrix @c ---content triagmatrix--- Procedure from library @code{random.lib} (@pxref{random_lib}). @table @asis @item @strong{Usage:} triagmatrix(n,m,o[,u,pe,pp,b]); n,m,o,u,pe,pp,b integers @item @strong{Return:} nxm lower triagonal matrix, diagonal entries equal to 1, about p percent of lower diagonal entries are 0, the remaining are random polynomials of degree d, u<=d<=o, with pp percent of the terms being 0, the remaining have random coefficients in the interval [1,b] [default: (pe,u,pp,b) = (0,50,75,100)] @end table @strong{Example:} @smallexample @c computed example triagmatrix d2t_singular/random_lib.doc:293 LIB "random.lib"; ring r = 0,(a,b,c,d),dp; // sparse triagonal matrix of sparse polys of degree <=2: print(triagmatrix(3,4,2));""; @expansion{} 1, 0,0,0, @expansion{} 52ac+54cd+14c, 1,0,0, @expansion{} 17a2+19b2+45ac+94bc+50b+87c+54d+21,0,1,0 @expansion{} // dense triagonal matrix of sparse linear forms: print(triagmatrix(3,3,1,1,0,55,9)); @expansion{} 1, 0, 0, @expansion{} 7a+8d, 1, 0, @expansion{} 9b+7c+4d,7b+9d,1 @c end example triagmatrix d2t_singular/random_lib.doc:293 @end smallexample @c ---end content triagmatrix--- @c ------------------- randomLast ------------- @node randomLast, randomBinomial, triagmatrix, random_lib @subsubsection randomLast @cindex randomLast @c ---content randomLast--- Procedure from library @code{random.lib} (@pxref{random_lib}). @table @asis @item @strong{Usage:} randomLast(b); b int @item @strong{Return:} ideal = maxideal(1), but the last variable is exchanged by a random linear combination of all variables, with coefficients in the interval [-b,b]. @end table @strong{Example:} @smallexample @c computed example randomLast d2t_singular/random_lib.doc:323 LIB "random.lib"; ring r = 0,(x,y,z),lp; ideal i = randomLast(10); i; @expansion{} i[1]=x @expansion{} i[2]=y @expansion{} i[3]=-x+z @c end example randomLast d2t_singular/random_lib.doc:323 @end smallexample @c ---end content randomLast--- @c ------------------- randomBinomial ------------- @node randomBinomial,, randomLast, random_lib @subsubsection randomBinomial @cindex randomBinomial @c ---content randomBinomial--- Procedure from library @code{random.lib} (@pxref{random_lib}). @table @asis @item @strong{Usage:} randomBinomial(k,u[,o,b]); k,u,o,b integers @item @strong{Return:} binomial ideal, k homogeneous generators of degree d, u<=d<=o, with randomly chosen monomials and coefficients in the interval [-b,b] (default: u=o, b=10). @end table @strong{Example:} @smallexample @c computed example randomBinomial d2t_singular/random_lib.doc:351 LIB "random.lib"; ring r = 0,(x,y,z),lp; ideal i = randomBinomial(4,5,6); i; @expansion{} i[1]=-x4z-xz4 @expansion{} i[2]=8x2y3+8xy3z @expansion{} i[3]=-4x2y2z2-4xy5 @expansion{} i[4]=5x3yz2+5xz5 @c end example randomBinomial d2t_singular/random_lib.doc:351 @end smallexample @c ---end content randomBinomial--- texi2html-1.82/test/singular_manual/d2t_singular/matrix_lib.tex0000644000175000017500000010555611264347126026663 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/matrix_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/matrix_lib.doc INSTEAD @c library version: (1.26.2.3,2003/05/14) @c library file: ../Singular/LIB/matrix.lib @cindex matrix.lib @cindex matrix_lib @table @asis @item @strong{Library:} matrix.lib @item @strong{Purpose:} Elementary Matrix Operations @end table @strong{Procedures:} @menu * compress:: matrix, zero columns from A deleted * concat:: matrix, concatenation of matrices A1,A2,... * diag:: matrix, nxn diagonal matrix with entries poly p * dsum:: matrix, direct sum of matrices A1,A2,... * flatten:: ideal, generated by entries of matrix A * genericmat:: generic nxm matrix [entries from id] * is_complex:: 1 if list c is a complex, 0 if not * outer:: matrix, outer product of matrices A and B * power:: matrix/intmat, n-th power of matrix/intmat A * skewmat:: generic skew-symmetric nxn matrix [entries from id] * submat:: submatrix of A with rows/cols specified by intvec r/c * symmat:: generic symmetric nxn matrix [entries from id] * tensor:: matrix, tensor product of matrices A nd B * unitmat:: unit square matrix of size n * gauss_col:: transform a matrix into col-reduced Gauss normal form * gauss_row:: transform a matrix into row-reduced Gauss normal form * addcol:: add p*(c1-th col) to c2-th column of matrix A, p poly * addrow:: add p*(r1-th row) to r2-th row of matrix A, p poly * multcol:: multiply c-th column of A with poly p * multrow:: multiply r-th row of A with poly p * permcol:: permute i-th and j-th columns * permrow:: permute i-th and j-th rows * rowred:: reduction of matrix A with elementary row-operations * colred:: reduction of matrix A with elementary col-operations * rm_unitrow:: remove unit rows and associated columns of A * rm_unitcol:: remove unit columns and associated rows of A * headStand:: A[n-i+1,m-j+1]=headStand(A[i,j]) @end menu @c ---end content LibInfo--- @c ------------------- compress ------------- @node compress, concat,, matrix_lib @subsubsection compress @cindex compress @c ---content compress--- Procedure from library @code{matrix.lib} (@pxref{matrix_lib}). @table @asis @item @strong{Usage:} compress(A); A matrix/ideal/module/intmat/intvec @item @strong{Return:} same type, zero columns/generators from A deleted @*(if A=intvec, zero elements are deleted) @end table @strong{Example:} @smallexample @c reused example compress d2t_singular/matrix_lib.doc:64 LIB "matrix.lib"; ring r=0,(x,y,z),ds; matrix A[3][4]=1,0,3,0,x,0,z,0,x2,0,z2,0; print(A); @expansion{} 1, 0,3, 0, @expansion{} x, 0,z, 0, @expansion{} x2,0,z2,0 print(compress(A)); @expansion{} 1, 3, @expansion{} x, z, @expansion{} x2,z2 module m=module(A); show(m); @expansion{} // module, 4 generator(s) @expansion{} [1,x,x2] @expansion{} [0] @expansion{} [3,z,z2] @expansion{} [0] show(compress(m)); @expansion{} // module, 2 generator(s) @expansion{} [1,x,x2] @expansion{} [3,z,z2] intmat B[3][4]=1,0,3,0,4,0,5,0,6,0,7,0; compress(B); @expansion{} 1,3, @expansion{} 4,5, @expansion{} 6,7 intvec C=0,0,1,2,0,3; compress(C); @expansion{} 1,2,3 @c end example compress d2t_singular/matrix_lib.doc:64 @end smallexample @c ---end content compress--- @c ------------------- concat ------------- @node concat, diag, compress, matrix_lib @subsubsection concat @cindex concat @c ---content concat--- Procedure from library @code{matrix.lib} (@pxref{matrix_lib}). @table @asis @item @strong{Usage:} concat(A1,A2,..); A1,A2,... matrices @item @strong{Return:} matrix, concatenation of A1,A2,.... Number of rows of result matrix is max(nrows(A1),nrows(A2),...) @end table @strong{Example:} @smallexample @c reused example concat d2t_singular/matrix_lib.doc:98 LIB "matrix.lib"; ring r=0,(x,y,z),ds; matrix A[3][3]=1,2,3,x,y,z,x2,y2,z2; matrix B[2][2]=1,0,2,0; matrix C[1][4]=4,5,x,y; print(A); @expansion{} 1, 2, 3, @expansion{} x, y, z, @expansion{} x2,y2,z2 print(B); @expansion{} 1,0, @expansion{} 2,0 print(C); @expansion{} 4,5,x,y print(concat(A,B,C)); @expansion{} 1, 2, 3, 1,0,4,5,x,y, @expansion{} x, y, z, 2,0,0,0,0,0, @expansion{} x2,y2,z2,0,0,0,0,0,0 @c end example concat d2t_singular/matrix_lib.doc:98 @end smallexample @c ---end content concat--- @c ------------------- diag ------------- @node diag, dsum, concat, matrix_lib @subsubsection diag @cindex diag @c ---content diag--- Procedure from library @code{matrix.lib} (@pxref{matrix_lib}). @table @asis @item @strong{Usage:} diag(p,n); p poly, n integer @*diag(A); A matrix @item @strong{Return:} diag(p,n): diagonal matrix, p times unit matrix of size n. @* diag(A) : n*m x n*m diagonal matrix with entries all the entries of the nxm matrix A, taken from the 1st row, 2nd row etc of A @end table @strong{Example:} @smallexample @c reused example diag d2t_singular/matrix_lib.doc:131 LIB "matrix.lib"; ring r = 0,(x,y,z),ds; print(diag(xy,4)); @expansion{} xy,0, 0, 0, @expansion{} 0, xy,0, 0, @expansion{} 0, 0, xy,0, @expansion{} 0, 0, 0, xy matrix A[3][2] = 1,2,3,4,5,6; print(A); @expansion{} 1,2, @expansion{} 3,4, @expansion{} 5,6 print(diag(A)); @expansion{} 1,0,0,0,0,0, @expansion{} 0,2,0,0,0,0, @expansion{} 0,0,3,0,0,0, @expansion{} 0,0,0,4,0,0, @expansion{} 0,0,0,0,5,0, @expansion{} 0,0,0,0,0,6 @c end example diag d2t_singular/matrix_lib.doc:131 @end smallexample @c ---end content diag--- @c ------------------- dsum ------------- @node dsum, flatten, diag, matrix_lib @subsubsection dsum @cindex dsum @c ---content dsum--- Procedure from library @code{matrix.lib} (@pxref{matrix_lib}). @table @asis @item @strong{Usage:} dsum(A1,A2,..); A1,A2,... matrices @item @strong{Return:} matrix, direct sum of A1,A2,... @end table @strong{Example:} @smallexample @c reused example dsum d2t_singular/matrix_lib.doc:159 LIB "matrix.lib"; ring r = 0,(x,y,z),ds; matrix A[3][3] = 1,2,3,4,5,6,7,8,9; matrix B[2][2] = 1,x,y,z; print(A); @expansion{} 1,2,3, @expansion{} 4,5,6, @expansion{} 7,8,9 print(B); @expansion{} 1,x, @expansion{} y,z print(dsum(A,B)); @expansion{} 1,2,3,0,0, @expansion{} 4,5,6,0,0, @expansion{} 7,8,9,0,0, @expansion{} 0,0,0,1,x, @expansion{} 0,0,0,y,z @c end example dsum d2t_singular/matrix_lib.doc:159 @end smallexample @c ---end content dsum--- @c ------------------- flatten ------------- @node flatten, genericmat, dsum, matrix_lib @subsubsection flatten @cindex flatten @c ---content flatten--- Procedure from library @code{matrix.lib} (@pxref{matrix_lib}). @table @asis @item @strong{Usage:} flatten(A); A matrix @item @strong{Return:} ideal, generated by all entries from A @end table @strong{Example:} @smallexample @c reused example flatten d2t_singular/matrix_lib.doc:188 LIB "matrix.lib"; ring r = 0,(x,y,z),ds; matrix A[2][3] = 1,2,x,y,z,7; print(A); @expansion{} 1,2,x, @expansion{} y,z,7 flatten(A); @expansion{} _[1]=1 @expansion{} _[2]=2 @expansion{} _[3]=x @expansion{} _[4]=y @expansion{} _[5]=z @expansion{} _[6]=7 @c end example flatten d2t_singular/matrix_lib.doc:188 @end smallexample @c ---end content flatten--- @c ------------------- genericmat ------------- @node genericmat, is_complex, flatten, matrix_lib @subsubsection genericmat @cindex genericmat @c ---content genericmat--- Procedure from library @code{matrix.lib} (@pxref{matrix_lib}). @table @asis @item @strong{Usage:} genericmat(n,m[,id]); n,m=integers, id=ideal @item @strong{Return:} nxm matrix, with entries from id. @item @strong{Note:} if id has less than nxm elements, the matrix is filled with 0's, (default: id=maxideal(1)). @*genericmat(n,m); creates the generic nxm matrix @end table @strong{Example:} @smallexample @c reused example genericmat d2t_singular/matrix_lib.doc:220 LIB "matrix.lib"; ring R = 0,x(1..16),lp; print(genericmat(3,3)); // the generic 3x3 matrix @expansion{} x(1),x(2),x(3), @expansion{} x(4),x(5),x(6), @expansion{} x(7),x(8),x(9) ring R1 = 0,(a,b,c,d),dp; matrix A = genericmat(3,4,maxideal(1)^3); print(A); @expansion{} a3, a2b,a2c,a2d, @expansion{} ab2,abc,abd,ac2, @expansion{} acd,ad2,b3, b2c int n,m = 3,2; ideal i = ideal(randommat(1,n*m,maxideal(1),9)); print(genericmat(n,m,i)); // matrix of generic linear forms @expansion{} 4a-8b-2c-3d,-a+b-4c+5d, @expansion{} -8a-9b+c+7d,a-9b+9c+4d, @expansion{} 6a-5b+9c, 2a+8c+d @c end example genericmat d2t_singular/matrix_lib.doc:220 @end smallexample @c ---end content genericmat--- @c ------------------- is_complex ------------- @node is_complex, outer, genericmat, matrix_lib @subsubsection is_complex @cindex is_complex @c ---content is_complex--- Procedure from library @code{matrix.lib} (@pxref{matrix_lib}). @table @asis @item @strong{Usage:} is_complex(c); c = list of size-compatible modules or matrices @item @strong{Return:} 1 if c[i]*c[i+1]=0 for all i, 0 if not, hence checking whether the list of matrices forms a complex. @item @strong{Note:} Ideals are treated internally as 1-line matrices. @*If printlevel > 0, the position where c is not a complex is shown. @end table @strong{Example:} @smallexample @c reused example is_complex d2t_singular/matrix_lib.doc:256 LIB "matrix.lib"; ring r = 32003,(x,y,z),ds; ideal i = x4+y5+z6,xyz,yx2+xz2+zy7; list L = nres(i,0); is_complex(L); @expansion{} 1 L[4] = matrix(i); is_complex(L); @expansion{} 0 @c end example is_complex d2t_singular/matrix_lib.doc:256 @end smallexample @c ---end content is_complex--- @c ------------------- outer ------------- @node outer, power, is_complex, matrix_lib @subsubsection outer @cindex outer @c ---content outer--- Procedure from library @code{matrix.lib} (@pxref{matrix_lib}). @table @asis @item @strong{Usage:} outer(A,B); A,B matrices @item @strong{Return:} matrix, outer (tensor) product of A and B @end table @strong{Example:} @smallexample @c reused example outer d2t_singular/matrix_lib.doc:285 LIB "matrix.lib"; ring r=32003,(x,y,z),ds; matrix A[3][3]=1,2,3,4,5,6,7,8,9; matrix B[2][2]=x,y,0,z; print(A); @expansion{} 1,2,3, @expansion{} 4,5,6, @expansion{} 7,8,9 print(B); @expansion{} x,y, @expansion{} 0,z print(outer(A,B)); @expansion{} x, y, 2x,2y,3x,3y, @expansion{} 0, z, 0, 2z,0, 3z, @expansion{} 4x,4y,5x,5y,6x,6y, @expansion{} 0, 4z,0, 5z,0, 6z, @expansion{} 7x,7y,8x,8y,9x,9y, @expansion{} 0, 7z,0, 8z,0, 9z @c end example outer d2t_singular/matrix_lib.doc:285 @end smallexample @c ---end content outer--- @c ------------------- power ------------- @node power, skewmat, outer, matrix_lib @subsubsection power @cindex power @c ---content power--- Procedure from library @code{matrix.lib} (@pxref{matrix_lib}). @table @asis @item @strong{Usage:} power(A,n); A a square-matrix of type intmat or matrix, n=integer @item @strong{Return:} intmat resp. matrix, the n-th power of A @item @strong{Note:} for A=intmat and big n the result may be wrong because of int overflow @end table @strong{Example:} @smallexample @c reused example power d2t_singular/matrix_lib.doc:317 LIB "matrix.lib"; intmat A[3][3]=1,2,3,4,5,6,7,8,9; print(power(A,3));""; @expansion{} 468 576 684 @expansion{} 1062 1305 1548 @expansion{} 1656 2034 2412 @expansion{} ring r=0,(x,y,z),dp; matrix B[3][3]=0,x,y,z,0,0,y,z,0; print(power(B,3));""; @expansion{} yz2, xy2+x2z,y3+xyz, @expansion{} y2z+xz2,yz2, 0, @expansion{} y3+xyz, y2z+xz2,yz2 @expansion{} @c end example power d2t_singular/matrix_lib.doc:317 @end smallexample @c ---end content power--- @c ------------------- skewmat ------------- @node skewmat, submat, power, matrix_lib @subsubsection skewmat @cindex skewmat @c ---content skewmat--- Procedure from library @code{matrix.lib} (@pxref{matrix_lib}). @table @asis @item @strong{Usage:} skewmat(n[,id]); n integer, id ideal @item @strong{Return:} skew-symmetric nxn matrix, with entries from id @*(default: id=maxideal(1)) @*skewmat(n); creates the generic skew-symmetric matrix @item @strong{Note:} if id has less than n*(n-1)/2 elements, the matrix is @*filled with 0's, @end table @strong{Example:} @smallexample @c reused example skewmat d2t_singular/matrix_lib.doc:351 LIB "matrix.lib"; ring R=0,x(1..5),lp; print(skewmat(4)); // the generic skew-symmetric matrix @expansion{} 0, x(1), x(2),x(3), @expansion{} -x(1),0, x(4),x(5), @expansion{} -x(2),-x(4),0, 0, @expansion{} -x(3),-x(5),0, 0 ring R1 = 0,(a,b,c),dp; matrix A=skewmat(4,maxideal(1)^2); print(A); @expansion{} 0, a2, ab, ac, @expansion{} -a2,0, b2, bc, @expansion{} -ab,-b2,0, c2, @expansion{} -ac,-bc,-c2,0 int n=3; ideal i = ideal(randommat(1,n*(n-1) div 2,maxideal(1),9)); print(skewmat(n,i)); // skew matrix of generic linear forms @expansion{} 0, 4a+b-8c, -a+6b+c, @expansion{} -4a-b+8c,0, -8a+2b-9c, @expansion{} a-6b-c, 8a-2b+9c,0 kill R1; @c end example skewmat d2t_singular/matrix_lib.doc:351 @end smallexample @c ---end content skewmat--- @c ------------------- submat ------------- @node submat, symmat, skewmat, matrix_lib @subsubsection submat @cindex submat @c ---content submat--- Procedure from library @code{matrix.lib} (@pxref{matrix_lib}). @table @asis @item @strong{Usage:} submat(A,r,c); A=matrix, r,c=intvec @item @strong{Return:} matrix, submatrix of A with rows specified by intvec r and columns specified by intvec c. @end table @strong{Example:} @smallexample @c reused example submat d2t_singular/matrix_lib.doc:384 LIB "matrix.lib"; ring R=32003,(x,y,z),lp; matrix A[4][4]=x,y,z,0,1,2,3,4,5,6,7,8,9,x2,y2,z2; print(A); @expansion{} x,y, z, 0, @expansion{} 1,2, 3, 4, @expansion{} 5,6, 7, 8, @expansion{} 9,x2,y2,z2 intvec v=1,3,4; matrix B=submat(A,v,1..3); print(B); @expansion{} x,y, z, @expansion{} 5,6, 7, @expansion{} 9,x2,y2 @c end example submat d2t_singular/matrix_lib.doc:384 @end smallexample @c ---end content submat--- @c ------------------- symmat ------------- @node symmat, tensor, submat, matrix_lib @subsubsection symmat @cindex symmat @c ---content symmat--- Procedure from library @code{matrix.lib} (@pxref{matrix_lib}). @table @asis @item @strong{Usage:} symmat(n[,id]); n integer, id ideal @item @strong{Return:} symmetric nxn matrix, with entries from id (default: id=maxideal(1)) @item @strong{Note:} if id has less than n*(n+1)/2 elements, the matrix is filled with 0's, symmat(n); creates the generic symmetric matrix @end table @strong{Example:} @smallexample @c reused example symmat d2t_singular/matrix_lib.doc:417 LIB "matrix.lib"; ring R=0,x(1..10),lp; print(symmat(4)); // the generic symmetric matrix @expansion{} x(1),x(2),x(3),x(4), @expansion{} x(2),x(5),x(6),x(7), @expansion{} x(3),x(6),x(8),x(9), @expansion{} x(4),x(7),x(9),x(10) ring R1 = 0,(a,b,c),dp; matrix A=symmat(4,maxideal(1)^3); print(A); @expansion{} a3, a2b,a2c,ab2, @expansion{} a2b,abc,ac2,b3, @expansion{} a2c,ac2,b2c,bc2, @expansion{} ab2,b3, bc2,c3 int n=3; ideal i = ideal(randommat(1,n*(n+1) div 2,maxideal(1),9)); print(symmat(n,i)); // symmetric matrix of generic linear forms @expansion{} 4a-8b-2c,-a+b-4c, -8a-9b+c, @expansion{} -a+b-4c, a-9b+9c, 6a-5b+9c, @expansion{} -8a-9b+c,6a-5b+9c,2a+8c kill R1; @c end example symmat d2t_singular/matrix_lib.doc:417 @end smallexample @c ---end content symmat--- @c ------------------- tensor ------------- @node tensor, unitmat, symmat, matrix_lib @subsubsection tensor @cindex tensor @c ---content tensor--- Procedure from library @code{matrix.lib} (@pxref{matrix_lib}). @table @asis @item @strong{Usage:} tensor(A,B); A,B matrices @item @strong{Return:} matrix, tensor product of A and B @end table @strong{Example:} @smallexample @c reused example tensor d2t_singular/matrix_lib.doc:449 LIB "matrix.lib"; ring r=32003,(x,y,z),(c,ds); matrix A[3][3]=1,2,3,4,5,6,7,8,9; matrix B[2][2]=x,y,0,z; print(A); @expansion{} 1,2,3, @expansion{} 4,5,6, @expansion{} 7,8,9 print(B); @expansion{} x,y, @expansion{} 0,z print(tensor(A,B)); @expansion{} x, y, 2x,2y,3x,3y, @expansion{} 0, z, 0, 2z,0, 3z, @expansion{} 4x,4y,5x,5y,6x,6y, @expansion{} 0, 4z,0, 5z,0, 6z, @expansion{} 7x,7y,8x,8y,9x,9y, @expansion{} 0, 7z,0, 8z,0, 9z @c end example tensor d2t_singular/matrix_lib.doc:449 @end smallexample @c ---end content tensor--- @c ------------------- unitmat ------------- @node unitmat, gauss_col, tensor, matrix_lib @subsubsection unitmat @cindex unitmat @c ---content unitmat--- Procedure from library @code{matrix.lib} (@pxref{matrix_lib}). @table @asis @item @strong{Usage:} unitmat(n); n integer >= 0 @item @strong{Return:} nxn unit matrix @item @strong{Note:} needs a basering, diagonal entries are numbers (=1) in the basering @end table @strong{Example:} @smallexample @c reused example unitmat d2t_singular/matrix_lib.doc:481 LIB "matrix.lib"; ring r=32003,(x,y,z),lp; print(xyz*unitmat(4)); @expansion{} xyz,0, 0, 0, @expansion{} 0, xyz,0, 0, @expansion{} 0, 0, xyz,0, @expansion{} 0, 0, 0, xyz print(unitmat(5)); @expansion{} 1,0,0,0,0, @expansion{} 0,1,0,0,0, @expansion{} 0,0,1,0,0, @expansion{} 0,0,0,1,0, @expansion{} 0,0,0,0,1 @c end example unitmat d2t_singular/matrix_lib.doc:481 @end smallexample @c ---end content unitmat--- @c ------------------- gauss_col ------------- @node gauss_col, gauss_row, unitmat, matrix_lib @subsubsection gauss_col @cindex gauss_col @c ---content gauss_col--- Procedure from library @code{matrix.lib} (@pxref{matrix_lib}). @table @asis @item @strong{Usage:} gauss_col(A[,e]); A a matrix, e any type @item @strong{Return:} - a matrix B, if called with one argument; B is the complete column- reduced upper-triangular normal form of A if A is constant, (resp. as far as this is possible if A is a polynomial matrix; no division by polynomials). @* - a list L of two matrices, if called with two arguments; L satisfies L[1] = A * L[2] with L[1] the column-reduced form of A and L[2] the transformation matrix. @item @strong{Note:} * The procedure just applies interred to A with ordering (C,dp). The transformation matrix is obtained by applying 'lift'. This should be faster than the procedure colred. @* * It should only be used with exact coefficient field (there is no pivoting and rounding error treatment). @* * Parameters are allowed. Hence, if the entries of A are parameters, B is the column-reduced form of A over the rational function field. @end table @strong{Example:} @smallexample @c reused example gauss_col d2t_singular/matrix_lib.doc:522 LIB "matrix.lib"; ring r=(0,a,b),(A,B,C),dp; matrix m[8][6]= 0, 2*C, 0, 0, 0, 0, 0, -4*C,a*A, 0, 0, 0, b*B, -A, 0, 0, 0, 0, -A, B, 0, 0, 0, 0, -4*C, 0, B, 2, 0, 0, 2*A, B, 0, 0, 0, 0, 0, 3*B, 0, 0, 2b, 0, 0, AB, 0, 2*A,A, 2a;""; @expansion{} list L=gauss_col(m,1); print(L[1]); @expansion{} 0,0,2*C, 0, 0,0, @expansion{} A,0,-4*C,0, 0,0, @expansion{} 0,0,-A, (1/2b)*B,0,0, @expansion{} 0,0,B, -1/2*A, 0,0, @expansion{} 0,1,0, 0, 0,0, @expansion{} 0,0,B, A, 0,0, @expansion{} 0,0,0, 0, 1,0, @expansion{} 0,0,0, 0, 0,1 print(L[2]); @expansion{} 0, 0, 0, 1/2, 0, 0, @expansion{} 0, 0, 1, 0, 0, 0, @expansion{} 1/(a), 0, 0, 0, 0, 0, @expansion{} -1/(2a)*B, 1/2, 0, C, 0, 0, @expansion{} 0, 0, -3/(2b)*B, 0, 1/(2b), 0, @expansion{} 1/(2a2)*AB,-1/(2a)*A,(-2b+3)/(4ab)*AB,-1/(a)*AC,-1/(4ab)*A,1/(2a) ring S=0,x,(c,dp); matrix A[5][4] = 3, 1, 1, 1, 13, 8, 6,-7, 14,10, 6,-7, 7, 4, 3,-3, 2, 1, 0, 3; print(gauss_col(A)); @expansion{} 8/9,-5/9,-1/3,7/9, @expansion{} 1, 0, 0, 0, @expansion{} 0, 1, 0, 0, @expansion{} 0, 0, 1, 0, @expansion{} 0, 0, 0, 1 @c end example gauss_col d2t_singular/matrix_lib.doc:522 @end smallexample @c inserted refs from d2t_singular/matrix_lib.doc:547 @ifinfo @menu See also: * colred:: @end menu @end ifinfo @iftex @strong{See also:} @ref{colred}. @end iftex @c end inserted refs from d2t_singular/matrix_lib.doc:547 @c ---end content gauss_col--- @c ------------------- gauss_row ------------- @node gauss_row, addcol, gauss_col, matrix_lib @subsubsection gauss_row @cindex gauss_row @c ---content gauss_row--- Procedure from library @code{matrix.lib} (@pxref{matrix_lib}). @table @asis @item @strong{Usage:} gauss_row(A [,e]); A matrix, e any type @item @strong{Return:} - a matrix B, if called with one argument; B is the complete row- reduced lower-triangular normal form of A if A is constant, (resp. as far as this is possible if A is a polynomial matrix; no division by polynomials). @* - a list L of two matrices, if called with two arguments; L satisfies L[1] = L[2] * A with L[1] the row-reduced form of A and L[2] the transformation matrix. @item @strong{Note:} * This procedure just applies gauss_col to the transposed matrix. The transformation matrix is obtained by applying lift. This should be faster than the procedure rowred. @* * It should only be used with exact coefficient field (there is no pivoting and rounding error treatment). @* * Parameters are allowed. Hence, if the entries of A are parameters, B is the row-reduced form of A over the rational function field. @end table @strong{Example:} @smallexample @c reused example gauss_row d2t_singular/matrix_lib.doc:585 LIB "matrix.lib"; ring r=(0,a,b),(A,B,C),dp; matrix m[6][8]= 0, 0, b*B, -A,-4C,2A,0, 0, 2C,-4C,-A,B, 0, B, 3B,AB, 0,a*A, 0, 0, B, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2A, 0, 0, 0, 0, 0, 0, 2b, A, 0, 0, 0, 0, 0, 0, 0, 2a;""; @expansion{} print(gauss_row(m));""; @expansion{} 0, A, 0, 0, 0,0,0,0, @expansion{} 0, 0, 0, 0, 1,0,0,0, @expansion{} 2*C,-4*C,-A, B, 0,B,0,0, @expansion{} 0, 0, (1/2b)*B,-1/2*A,0,A,0,0, @expansion{} 0, 0, 0, 0, 0,0,1,0, @expansion{} 0, 0, 0, 0, 0,0,0,1 @expansion{} ring S=0,x,dp; matrix A[4][5] = 3, 1,1,-1,2, 13, 8,6,-7,1, 14,10,6,-7,1, 7, 4,3,-3,3; list L=gauss_row(A,1); print(L[1]); @expansion{} 1/2,-7/3,-19/6,5/6, @expansion{} 1, 0, 0, 0, @expansion{} 0, 1, 0, 0, @expansion{} 0, 0, 1, 0, @expansion{} 0, 0, 0, 1 print(L[2]); @expansion{} 0, -6, -5, 1, @expansion{} -1/2,2/3, -1/6,-1/6, @expansion{} 1/2, -5/3,-5/6,1/6, @expansion{} 0, 13/3,11/3,-1/3 @c end example gauss_row d2t_singular/matrix_lib.doc:585 @end smallexample @c inserted refs from d2t_singular/matrix_lib.doc:606 @ifinfo @menu See also: * rowred:: @end menu @end ifinfo @iftex @strong{See also:} @ref{rowred}. @end iftex @c end inserted refs from d2t_singular/matrix_lib.doc:606 @c ---end content gauss_row--- @c ------------------- addcol ------------- @node addcol, addrow, gauss_row, matrix_lib @subsubsection addcol @cindex addcol @c ---content addcol--- Procedure from library @code{matrix.lib} (@pxref{matrix_lib}). @table @asis @item @strong{Usage:} addcol(A,c1,p,c2); A matrix, p poly, c1, c2 positive integers @item @strong{Return:} matrix, A being modified by adding p times column c1 to column c2 @end table @strong{Example:} @smallexample @c reused example addcol d2t_singular/matrix_lib.doc:629 LIB "matrix.lib"; ring r=32003,(x,y,z),lp; matrix A[3][3]=1,2,3,4,5,6,7,8,9; print(A); @expansion{} 1,2,3, @expansion{} 4,5,6, @expansion{} 7,8,9 print(addcol(A,1,xy,2)); @expansion{} 1,xy+2, 3, @expansion{} 4,4xy+5,6, @expansion{} 7,7xy+8,9 @c end example addcol d2t_singular/matrix_lib.doc:629 @end smallexample @c ---end content addcol--- @c ------------------- addrow ------------- @node addrow, multcol, addcol, matrix_lib @subsubsection addrow @cindex addrow @c ---content addrow--- Procedure from library @code{matrix.lib} (@pxref{matrix_lib}). @table @asis @item @strong{Usage:} addcol(A,r1,p,r2); A matrix, p poly, r1, r2 positive integers @item @strong{Return:} matrix, A being modified by adding p times row r1 to row r2 @end table @strong{Example:} @smallexample @c reused example addrow d2t_singular/matrix_lib.doc:656 LIB "matrix.lib"; ring r=32003,(x,y,z),lp; matrix A[3][3]=1,2,3,4,5,6,7,8,9; print(A); @expansion{} 1,2,3, @expansion{} 4,5,6, @expansion{} 7,8,9 print(addrow(A,1,xy,3)); @expansion{} 1, 2, 3, @expansion{} 4, 5, 6, @expansion{} xy+7,2xy+8,3xy+9 @c end example addrow d2t_singular/matrix_lib.doc:656 @end smallexample @c ---end content addrow--- @c ------------------- multcol ------------- @node multcol, multrow, addrow, matrix_lib @subsubsection multcol @cindex multcol @c ---content multcol--- Procedure from library @code{matrix.lib} (@pxref{matrix_lib}). @table @asis @item @strong{Usage:} addcol(A,c,p); A matrix, p poly, c positive integer @item @strong{Return:} matrix, A being modified by multiplying column c with p @end table @strong{Example:} @smallexample @c reused example multcol d2t_singular/matrix_lib.doc:683 LIB "matrix.lib"; ring r=32003,(x,y,z),lp; matrix A[3][3]=1,2,3,4,5,6,7,8,9; print(A); @expansion{} 1,2,3, @expansion{} 4,5,6, @expansion{} 7,8,9 print(multcol(A,2,xy)); @expansion{} 1,2xy,3, @expansion{} 4,5xy,6, @expansion{} 7,8xy,9 @c end example multcol d2t_singular/matrix_lib.doc:683 @end smallexample @c ---end content multcol--- @c ------------------- multrow ------------- @node multrow, permcol, multcol, matrix_lib @subsubsection multrow @cindex multrow @c ---content multrow--- Procedure from library @code{matrix.lib} (@pxref{matrix_lib}). @table @asis @item @strong{Usage:} multrow(A,r,p); A matrix, p poly, r positive integer @item @strong{Return:} matrix, A being modified by multiplying row r with p @end table @strong{Example:} @smallexample @c reused example multrow d2t_singular/matrix_lib.doc:710 LIB "matrix.lib"; ring r=32003,(x,y,z),lp; matrix A[3][3]=1,2,3,4,5,6,7,8,9; print(A); @expansion{} 1,2,3, @expansion{} 4,5,6, @expansion{} 7,8,9 print(multrow(A,2,xy)); @expansion{} 1, 2, 3, @expansion{} 4xy,5xy,6xy, @expansion{} 7, 8, 9 @c end example multrow d2t_singular/matrix_lib.doc:710 @end smallexample @c ---end content multrow--- @c ------------------- permcol ------------- @node permcol, permrow, multrow, matrix_lib @subsubsection permcol @cindex permcol @c ---content permcol--- Procedure from library @code{matrix.lib} (@pxref{matrix_lib}). @table @asis @item @strong{Usage:} permcol(A,c1,c2); A matrix, c1,c2 positive integers @item @strong{Return:} matrix, A being modified by permuting column c1 and c2 @end table @strong{Example:} @smallexample @c reused example permcol d2t_singular/matrix_lib.doc:737 LIB "matrix.lib"; ring r=32003,(x,y,z),lp; matrix A[3][3]=1,x,3,4,y,6,7,z,9; print(A); @expansion{} 1,x,3, @expansion{} 4,y,6, @expansion{} 7,z,9 print(permcol(A,2,3)); @expansion{} 1,3,x, @expansion{} 4,6,y, @expansion{} 7,9,z @c end example permcol d2t_singular/matrix_lib.doc:737 @end smallexample @c ---end content permcol--- @c ------------------- permrow ------------- @node permrow, rowred, permcol, matrix_lib @subsubsection permrow @cindex permrow @c ---content permrow--- Procedure from library @code{matrix.lib} (@pxref{matrix_lib}). @table @asis @item @strong{Usage:} permrow(A,r1,r2); A matrix, r1,r2 positive integers @item @strong{Return:} matrix, A being modified by permuting row r1 and r2 @end table @strong{Example:} @smallexample @c reused example permrow d2t_singular/matrix_lib.doc:764 LIB "matrix.lib"; ring r=32003,(x,y,z),lp; matrix A[3][3]=1,2,3,x,y,z,7,8,9; print(A); @expansion{} 1,2,3, @expansion{} x,y,z, @expansion{} 7,8,9 print(permrow(A,2,1)); @expansion{} x,y,z, @expansion{} 1,2,3, @expansion{} 7,8,9 @c end example permrow d2t_singular/matrix_lib.doc:764 @end smallexample @c ---end content permrow--- @c ------------------- rowred ------------- @node rowred, colred, permrow, matrix_lib @subsubsection rowred @cindex rowred @c ---content rowred--- Procedure from library @code{matrix.lib} (@pxref{matrix_lib}). @table @asis @item @strong{Usage:} rowred(A[,e]); A matrix, e any type @item @strong{Return:} - a matrix B, being the row reduced form of A, if rowred is called with one argument. @*(as far as this is possible over the polynomial ring; no division by polynomials) @* - a list L of two matrices, such that L[1] = L[2] * A with L[1] the row-reduced form of A and L[2] the transformation matrix (if rowred is called with two arguments). @item @strong{Note:} * This procedure is designed for teaching purposes mainly. @* * The straight forward Gaussian algorithm is implemented in the library (no standard basis computation). @*The transformation matrix is obtained by concatenating a unit matrix to A. proc gauss_row should be faster. @* * It should only be used with exact coefficient field (there is no pivoting) over the polynomial ring (ordering lp or dp). @* * Parameters are allowed. Hence, if the entries of A are parameters the computation takes place over the field of rational functions. @end table @strong{Example:} @smallexample @c reused example rowred d2t_singular/matrix_lib.doc:808 LIB "matrix.lib"; ring r=(0,a,b),(A,B,C),dp; matrix m[6][8]= 0, 0, b*B, -A,-4C,2A,0, 0, 2C,-4C,-A,B, 0, B, 3B,AB, 0,a*A, 0, 0, B, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2A, 0, 0, 0, 0, 0, 0, 2b, A, 0, 0, 0, 0, 0, 0, 0, 2a;""; @expansion{} print(rowred(m));""; @expansion{} 0, 0, 0, 0, 1,0, 0,0, @expansion{} 0, 0, 0, 0, 0,0, 1,0, @expansion{} 0, 0, 0, 0, 0,0, 0,1, @expansion{} 0, 0, (b)*B,-A,0,2*A,0,0, @expansion{} 2*C,-4*C, -A, B, 0,B, 0,0, @expansion{} 0, (a)*A,0, 0, 0,0, 0,0 @expansion{} list L=rowred(m,1); print(L[1]); @expansion{} 0, 0, 0, 0, 1,0, 0,0, @expansion{} 0, 0, 0, 0, 0,0, 1,0, @expansion{} 0, 0, 0, 0, 0,0, 0,1, @expansion{} 0, 0, (b)*B,-A,0,2*A,0,0, @expansion{} 2*C,-4*C, -A, B, 0,B, 0,0, @expansion{} 0, (a)*A,0, 0, 0,0, 0,0 print(L[2]); @expansion{} 0,0,0,1/2, 0, -1/(2a)*A, @expansion{} 0,0,0,0, 1/(2b), -1/(4ab)*A, @expansion{} 0,0,0,0, 0, 1/(2a), @expansion{} 1,0,0,2*C, 0, -2/(a)*AC, @expansion{} 0,1,0,0, -3/(2b)*B,(-2b+3)/(4ab)*AB, @expansion{} 0,0,1,-1/2*B,0, 1/(2a)*AB @c end example rowred d2t_singular/matrix_lib.doc:808 @end smallexample @c inserted refs from d2t_singular/matrix_lib.doc:824 @ifinfo @menu See also: * gauss_row:: @end menu @end ifinfo @iftex @strong{See also:} @ref{gauss_row}. @end iftex @c end inserted refs from d2t_singular/matrix_lib.doc:824 @c ---end content rowred--- @c ------------------- colred ------------- @node colred, rm_unitrow, rowred, matrix_lib @subsubsection colred @cindex colred @c ---content colred--- Procedure from library @code{matrix.lib} (@pxref{matrix_lib}). @table @asis @item @strong{Usage:} colred(A[,e]); A matrix, e any type @item @strong{Return:} - a matrix B, being the column reduced form of A, if colred is called with one argument. @*(as far as this is possible over the polynomial ring; no division by polynomials) @* - a list L of two matrices, such that L[1] = A * L[2] with L[1] the column-reduced form of A and L[2] the transformation matrix (if colred is called with two arguments). @item @strong{Note:} * This procedure is designed for teaching purposes mainly. @* * It applies rowred to the transposed matrix. proc gauss_col should be faster. @* * It should only be used with exact coefficient field (there is no pivoting) over the polynomial ring (ordering lp or dp). @* * Parameters are allowed. Hence, if the entries of A are parameters the computation takes place over the field of rational functions. @end table @strong{Example:} @smallexample @c reused example colred d2t_singular/matrix_lib.doc:862 LIB "matrix.lib"; ring r=(0,a,b),(A,B,C),dp; matrix m[8][6]= 0, 2*C, 0, 0, 0, 0, 0, -4*C,a*A, 0, 0, 0, b*B, -A, 0, 0, 0, 0, -A, B, 0, 0, 0, 0, -4*C, 0, B, 2, 0, 0, 2*A, B, 0, 0, 0, 0, 0, 3*B, 0, 0, 2b, 0, 0, AB, 0, 2*A,A, 2a;""; @expansion{} print(colred(m));""; @expansion{} 0,0,0,0, 2*C, 0, @expansion{} 0,0,0,0, -4*C,(a)*A, @expansion{} 0,0,0,(b)*B,-A, 0, @expansion{} 0,0,0,-A, B, 0, @expansion{} 1,0,0,0, 0, 0, @expansion{} 0,0,0,2*A, B, 0, @expansion{} 0,1,0,0, 0, 0, @expansion{} 0,0,1,0, 0, 0 @expansion{} list L=colred(m,1); print(L[1]); @expansion{} 0,0,0,0, 2*C, 0, @expansion{} 0,0,0,0, -4*C,(a)*A, @expansion{} 0,0,0,(b)*B,-A, 0, @expansion{} 0,0,0,-A, B, 0, @expansion{} 1,0,0,0, 0, 0, @expansion{} 0,0,0,2*A, B, 0, @expansion{} 0,1,0,0, 0, 0, @expansion{} 0,0,1,0, 0, 0 print(L[2]); @expansion{} 0, 0, 0, 1, 0, 0, @expansion{} 0, 0, 0, 0, 1, 0, @expansion{} 0, 0, 0, 0, 0, 1, @expansion{} 1/2, 0, 0, 2*C, 0, -1/2*B, @expansion{} 0, 1/(2b), 0, 0, -3/(2b)*B, 0, @expansion{} -1/(2a)*A,-1/(4ab)*A,1/(2a),-2/(a)*AC,(-2b+3)/(4ab)*AB,1/(2a)*AB @c end example colred d2t_singular/matrix_lib.doc:862 @end smallexample @c inserted refs from d2t_singular/matrix_lib.doc:880 @ifinfo @menu See also: * gauss_col:: @end menu @end ifinfo @iftex @strong{See also:} @ref{gauss_col}. @end iftex @c end inserted refs from d2t_singular/matrix_lib.doc:880 @c ---end content colred--- @c ------------------- rm_unitrow ------------- @node rm_unitrow, rm_unitcol, colred, matrix_lib @subsubsection rm_unitrow @cindex rm_unitrow @c ---content rm_unitrow--- Procedure from library @code{matrix.lib} (@pxref{matrix_lib}). @table @asis @item @strong{Usage:} rm_unitrow(A); A matrix (being col-reduced) @item @strong{Return:} matrix, obtained from A by deleting unit rows (having just one 1 and else 0 as entries) and associated columns @end table @strong{Example:} @smallexample @c reused example rm_unitrow d2t_singular/matrix_lib.doc:904 LIB "matrix.lib"; ring r=0,(A,B,C),dp; matrix m[8][6]= 0,0, 0, 0, 2C, 0, 0,0, 0, 0, -4C,A, A,-C2,0, B, -A, 0, 0,0, 1/2B,-A,B, 0, 1,0, 0, 0, 0, 0, 0,0, 0, 2A,B, 0, 0,1, 0, 0, 0, 0, 0,0, 1, 0, 0, 0; print(rm_unitrow(m)); @expansion{} 0, 2C, 0, @expansion{} 0, -4C,A, @expansion{} B, -A, 0, @expansion{} -A,B, 0, @expansion{} 2A,B, 0 @c end example rm_unitrow d2t_singular/matrix_lib.doc:904 @end smallexample @c ---end content rm_unitrow--- @c ------------------- rm_unitcol ------------- @node rm_unitcol, headStand, rm_unitrow, matrix_lib @subsubsection rm_unitcol @cindex rm_unitcol @c ---content rm_unitcol--- Procedure from library @code{matrix.lib} (@pxref{matrix_lib}). @table @asis @item @strong{Usage:} rm_unitcol(A); A matrix (being row-reduced) @item @strong{Return:} matrix, obtained from A by deleting unit columns (having just one 1 and else 0 as entries) and associated rows @end table @strong{Example:} @smallexample @c reused example rm_unitcol d2t_singular/matrix_lib.doc:939 LIB "matrix.lib"; ring r=0,(A,B,C),dp; matrix m[6][8]= 0, 0, A, 0, 1,0, 0,0, 0, 0, -C2, 0, 0,0, 1,0, 0, 0, 0,1/2B, 0,0, 0,1, 0, 0, B, -A, 0,2A, 0,0, 2C,-4C, -A, B, 0,B, 0,0, 0, A, 0, 0, 0,0, 0,0; print(rm_unitcol(m)); @expansion{} 0, 0, B, -A,2A, @expansion{} 2C,-4C,-A,B, B, @expansion{} 0, A, 0, 0, 0 @c end example rm_unitcol d2t_singular/matrix_lib.doc:939 @end smallexample @c ---end content rm_unitcol--- @c ------------------- headStand ------------- @node headStand,, rm_unitcol, matrix_lib @subsubsection headStand @cindex headStand @c ---content headStand--- Procedure from library @code{matrix.lib} (@pxref{matrix_lib}). @table @asis @end table @c ---end content headStand--- texi2html-1.82/test/singular_manual/d2t_singular/elim_lib.tex0000644000175000017500000002771711264347126026307 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/elim_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/elim_lib.doc INSTEAD @c library version: (1.14.2.4,2003/04/16) @c library file: ../Singular/LIB/elim.lib @cindex elim.lib @cindex elim_lib @table @asis @item @strong{Library:} elim.lib @item @strong{Purpose:} Elimination, Saturation and Blowing up @end table @strong{Procedures:} @menu * blowup0:: create presentation of blownup ring of ideal j * elim:: variable n..m eliminated from id (ideal/module) * elim1:: p=product of vars to be eliminated from id * nselect:: select generators not containing n-th [..m-th] variable * sat:: saturated quotient of ideal/module id by ideal j * select:: select generators containing all variables n...m * select1:: select generators containing one variable n...m @end menu @c ---end content LibInfo--- @c ------------------- blowup0 ------------- @node blowup0, elim,, elim_lib @subsubsection blowup0 @cindex blowup0 @c ---content blowup0--- Procedure from library @code{elim.lib} (@pxref{elim_lib}). @table @asis @item @strong{Usage:} blowup0(j[,s1,s2]); j ideal, s1,s2 nonempty strings @item @strong{Create:} Create a presentation of the blowup ring of j @item @strong{Return:} no return value @item @strong{Note:} s1 and s2 are used to give names to the blownup ring and the blownup ideal (default: s1="j", s2="A") @*Assume R = char,x(1..n),ord is the basering of j, and s1="j", s2="A" then the procedure creates a new ring with name Bl_jR @*(equal to R[A,B,...]) @*Bl_jR = char,(A,B,...,x(1..n)),(dp(k),ord) @*with k=ncols(j) new variables A,B,... and ordering wp(d1..dk) if j is homogeneous with deg(j[i])=di resp. dp otherwise for these vars. If k>26 or size(s2)>1, say s2="A()", the new vars are A(1),...,A(k). Let j_ be the kernel of the ring map Bl_jR -> R defined by A(i)->j[i], x(i)->x(i), then the quotient ring Bl_jR/j_ is the blowup ring of j in R (being isomorphic to R+j+j^2+...). Moreover the procedure creates a std basis of j_ with name j_ in Bl_jR. @*This proc uses 'execute' or calls a procedure using 'execute'. @item @strong{Display:} printlevel >=0: explain created objects (default) @end table @strong{Example:} @smallexample @c computed example blowup0 d2t_singular/elim_lib.doc:65 LIB "elim.lib"; ring R=0,(x,y),dp; poly f=y2+x3; ideal j=jacob(f); blowup0(j); @expansion{} @expansion{} // The proc created the ring Bl_jR (equal to R[A,B]) @expansion{} // it contains the ideal j_ , such that @expansion{} // Bl_jR/j_ is the blowup ring @expansion{} // show(Bl_jR); shows this ring. @expansion{} // Make Bl_jR the basering and see j_ by typing: @expansion{} setring Bl_jR; @expansion{} j_; show(Bl_jR); @expansion{} // ring: (0),(A,B,x,y),(wp(2,1),dp(2),C); @expansion{} // minpoly = 0 @expansion{} // objects belonging to this ring: @expansion{} // j_ [0] ideal, 1 generator(s) setring Bl_jR; j_;""; @expansion{} j_[1]=2Ay-3Bx2 @expansion{} ring r=32003,(x,y,z),ds; blowup0(maxideal(1),"m","T()"); @expansion{} @expansion{} // The proc created the ring Bl_mr (equal to r[T(1..3)]) @expansion{} // it contains the ideal m_ , such that @expansion{} // Bl_mr/m_ is the blowup ring @expansion{} // show(Bl_mr); shows this ring. @expansion{} // Make Bl_mr the basering and see m_ by typing: @expansion{} setring Bl_mr; @expansion{} m_; show(Bl_mr); @expansion{} // ring: (32003),(T(1),T(2),T(3),x,y,z),(wp(1,1,1),ds(3),C); @expansion{} // minpoly = 0 @expansion{} // objects belonging to this ring: @expansion{} // m_ [0] ideal, 3 generator(s) setring Bl_mr; m_; @expansion{} m_[1]=T(1)y-T(2)x @expansion{} m_[2]=T(1)z-T(3)x @expansion{} m_[3]=T(2)z-T(3)y kill Bl_jR, Bl_mr; @c end example blowup0 d2t_singular/elim_lib.doc:65 @end smallexample @c ---end content blowup0--- @c ------------------- elim ------------- @node elim, elim1, blowup0, elim_lib @subsubsection elim @cindex elim @c ---content elim--- Procedure from library @code{elim.lib} (@pxref{elim_lib}). @table @asis @item @strong{Usage:} elim(id,n,m); id ideal/module, n,m integers @item @strong{Returns:} ideal/module obtained from id by eliminating variables n..m @item @strong{Note:} no special monomial ordering is required, result is a SB with respect to ordering dp (resp. ls) if the first var not to be eliminated belongs to a -p (resp. -s) block ordering @*This proc uses 'execute' or calls a procedure using 'execute'. @end table @strong{Example:} @smallexample @c computed example elim d2t_singular/elim_lib.doc:106 LIB "elim.lib"; ring r=0,(x,y,u,v,w),dp; ideal i=x-u,y-u2,w-u3,v-x+y3; elim(i,3,4); @expansion{} _[1]=y2-xw @expansion{} _[2]=xy-w @expansion{} _[3]=x2-y module m=i*gen(1)+i*gen(2); m=elim(m,3,4);show(m); @expansion{} // module, 6 generator(s) @expansion{} [y2-xw] @expansion{} [0,y2-xw] @expansion{} [xy-w] @expansion{} [0,xy-w] @expansion{} [x2-y] @expansion{} [0,x2-y] @c end example elim d2t_singular/elim_lib.doc:106 @end smallexample @c inserted refs from d2t_singular/elim_lib.doc:115 @ifinfo @menu See also: * elim1:: * eliminate:: @end menu @end ifinfo @iftex @strong{See also:} @ref{elim1}; @ref{eliminate}. @end iftex @c end inserted refs from d2t_singular/elim_lib.doc:115 @c ---end content elim--- @c ------------------- elim1 ------------- @node elim1, nselect, elim, elim_lib @subsubsection elim1 @cindex elim1 @c ---content elim1--- Procedure from library @code{elim.lib} (@pxref{elim_lib}). @table @asis @item @strong{Usage:} elim1(id,p); id ideal/module, p product of vars to be eliminated @item @strong{Return:} ideal/module obtained from id by eliminating vars occurring in poly @item @strong{Note:} no special monomial ordering is required, result is a SB with respect to ordering dp (resp. ls) if the first var not to be eliminated belongs to a -p (resp. -s) block ordering @*This proc uses 'execute' or calls a procedure using 'execute'. @end table @strong{Example:} @smallexample @c computed example elim1 d2t_singular/elim_lib.doc:144 LIB "elim.lib"; ring r=0,(x,y,t,s,z),dp; ideal i=x-t,y-t2,z-t3,s-x+y3; elim1(i,ts); @expansion{} _[1]=y2-xz @expansion{} _[2]=xy-z @expansion{} _[3]=x2-y module m=i*gen(1)+i*gen(2); m=elim1(m,st); show(m); @expansion{} // module, 6 generator(s) @expansion{} [y2-xz] @expansion{} [0,y2-xz] @expansion{} [xy-z] @expansion{} [0,xy-z] @expansion{} [x2-y] @expansion{} [0,x2-y] @c end example elim1 d2t_singular/elim_lib.doc:144 @end smallexample @c inserted refs from d2t_singular/elim_lib.doc:153 @ifinfo @menu See also: * elim:: * eliminate:: @end menu @end ifinfo @iftex @strong{See also:} @ref{elim}; @ref{eliminate}. @end iftex @c end inserted refs from d2t_singular/elim_lib.doc:153 @c ---end content elim1--- @c ------------------- nselect ------------- @node nselect, sat, elim1, elim_lib @subsubsection nselect @cindex nselect @c ---content nselect--- Procedure from library @code{elim.lib} (@pxref{elim_lib}). @table @asis @item @strong{Usage:} nselect(id,n[,m]); id a module or ideal, n, m integers @item @strong{Return:} generators of id not containing the variable n [up to m] @end table @strong{Example:} @smallexample @c computed example nselect d2t_singular/elim_lib.doc:176 LIB "elim.lib"; ring r=0,(x,y,t,s,z),(c,dp); ideal i=x-y,y-z2,z-t3,s-x+y3; nselect(i,3); @expansion{} _[1]=x-y @expansion{} _[2]=-z2+y @expansion{} _[3]=y3-x+s module m=i*(gen(1)+gen(2)); show(m); @expansion{} // module, 4 generator(s) @expansion{} [x-y,x-y] @expansion{} [-z2+y,-z2+y] @expansion{} [-t3+z,-t3+z] @expansion{} [y3-x+s,y3-x+s] show(nselect(m,3,4)); @expansion{} // module, 2 generator(s) @expansion{} [x-y,x-y] @expansion{} [-z2+y,-z2+y] @c end example nselect d2t_singular/elim_lib.doc:176 @end smallexample @c inserted refs from d2t_singular/elim_lib.doc:186 @ifinfo @menu See also: * select:: * select1:: @end menu @end ifinfo @iftex @strong{See also:} @ref{select}; @ref{select1}. @end iftex @c end inserted refs from d2t_singular/elim_lib.doc:186 @c ---end content nselect--- @c ------------------- sat ------------- @node sat, select, nselect, elim_lib @subsubsection sat @cindex sat @c ---content sat--- Procedure from library @code{elim.lib} (@pxref{elim_lib}). @table @asis @item @strong{Usage:} sat(id,j); id=ideal/module, j=ideal @item @strong{Return:} list of an ideal/module [1] and an integer [2]: @*[1] = saturation of id with respect to j (= union_(k=1...) of id:j^k) [2] = saturation exponent (= min( k | id:j^k = id:j^(k+1) )) @item @strong{Note:} [1] is a standard basis in the basering @item @strong{Display:} saturation exponent during computation if printlevel >=1 @end table @strong{Example:} @smallexample @c computed example sat d2t_singular/elim_lib.doc:217 LIB "elim.lib"; int p = printlevel; ring r = 2,(x,y,z),dp; poly F = x5+y5+(x-y)^2*xyz; ideal j = jacob(F); sat(j,maxideal(1)); @expansion{} [1]: @expansion{} _[1]=x3+x2y+xy2+y3 @expansion{} _[2]=y4+x2yz+y3z @expansion{} _[3]=x2y2+x2yz+y3z @expansion{} [2]: @expansion{} 4 printlevel = 2; sat(j,maxideal(2)); @expansion{} // compute quotient 1 @expansion{} // compute quotient 2 @expansion{} // compute quotient 3 @expansion{} // saturation becomes stable after 2 iteration(s) @expansion{} @expansion{} [1]: @expansion{} _[1]=x3+x2y+xy2+y3 @expansion{} _[2]=y4+x2yz+y3z @expansion{} _[3]=x2y2+x2yz+y3z @expansion{} [2]: @expansion{} 2 printlevel = p; @c end example sat d2t_singular/elim_lib.doc:217 @end smallexample @c ---end content sat--- @c ------------------- select ------------- @node select, select1, sat, elim_lib @subsubsection select @cindex select @c ---content select--- Procedure from library @code{elim.lib} (@pxref{elim_lib}). @table @asis @item @strong{Usage:} select(id,n[,m]); id ideal/module, n, m integers @item @strong{Return:} generators of id containing the variable n [all variables up to m] @item @strong{Note:} use 'select1' for selecting generators containing at least one of the variables between n and m @end table @strong{Example:} @smallexample @c computed example select d2t_singular/elim_lib.doc:252 LIB "elim.lib"; ring r=0,(x,y,t,s,z),(c,dp); ideal i=x-y,y-z2,z-t3,s-x+y3; ideal j=select(i,1); j; @expansion{} j[1]=x-y @expansion{} j[2]=y3-x+s module m=i*(gen(1)+gen(2)); m; @expansion{} m[1]=[x-y,x-y] @expansion{} m[2]=[-z2+y,-z2+y] @expansion{} m[3]=[-t3+z,-t3+z] @expansion{} m[4]=[y3-x+s,y3-x+s] select(m,1,2); @expansion{} _[1]=[x-y,x-y] @expansion{} _[2]=[y3-x+s,y3-x+s] @c end example select d2t_singular/elim_lib.doc:252 @end smallexample @c inserted refs from d2t_singular/elim_lib.doc:263 @ifinfo @menu See also: * nselect:: * select1:: @end menu @end ifinfo @iftex @strong{See also:} @ref{nselect}; @ref{select1}. @end iftex @c end inserted refs from d2t_singular/elim_lib.doc:263 @c ---end content select--- @c ------------------- select1 ------------- @node select1,, select, elim_lib @subsubsection select1 @cindex select1 @c ---content select1--- Procedure from library @code{elim.lib} (@pxref{elim_lib}). @table @asis @item @strong{Usage:} select1(id,n[,m]); id ideal/module, n, m integers @item @strong{Return:} generators of id containing the variable n @*[at least one of the variables up to m] @item @strong{Note:} use 'select' for selecting generators containing all the variables between n and m @end table @strong{Example:} @smallexample @c computed example select1 d2t_singular/elim_lib.doc:291 LIB "elim.lib"; ring r=0,(x,y,t,s,z),(c,dp); ideal i=x-y,y-z2,z-t3,s-x+y3; ideal j=select1(i,1); j; @expansion{} j[1]=x-y @expansion{} j[2]=y3-x+s module m=i*(gen(1)+gen(2)); m; @expansion{} m[1]=[x-y,x-y] @expansion{} m[2]=[-z2+y,-z2+y] @expansion{} m[3]=[-t3+z,-t3+z] @expansion{} m[4]=[y3-x+s,y3-x+s] select1(m,1,2); @expansion{} _[1]=[x-y,x-y] @expansion{} _[2]=[-z2+y,-z2+y] @expansion{} _[3]=[y3-x+s,y3-x+s] @c end example select1 d2t_singular/elim_lib.doc:291 @end smallexample @c inserted refs from d2t_singular/elim_lib.doc:302 @ifinfo @menu See also: * nselect:: * select:: @end menu @end ifinfo @iftex @strong{See also:} @ref{nselect}; @ref{select}. @end iftex @c end inserted refs from d2t_singular/elim_lib.doc:302 @c ---end content select1--- texi2html-1.82/test/singular_manual/d2t_singular/triang_lib_noEx.tex0000644000175000017500000001216211264347126027622 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/triang_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/triang_lib.doc INSTEAD @c library version: (1.7,2001/02/19) @c library file: ../Singular/LIB/triang.lib @cindex triang.lib @cindex triang_lib @table @asis @item @strong{Library:} triang.lib @item @strong{Purpose:} Decompose Zero-dimensional Ideals into Triangular Sets @item @strong{Author:} D. Hillebrand @end table @strong{Procedures:} @menu * triangL:: Decomposition of (G) into triangular systems (Lazard). * triangLfak:: Decomp. of (G) into tri. systems plus factorization. * triangM:: Decomposition of (G) into triangular systems (Moeller). * triangMH:: Decomp. of (G) into tri. syst. with disjoint varieties. @end menu @c ---end content LibInfo--- @c ------------------- triangL ------------- @node triangL, triangLfak,, triang_lib @subsubsection triangL @cindex triangL @c ---content triangL--- Procedure from library @code{triang.lib} (@pxref{triang_lib}). @table @asis @item @strong{Usage:} triangL(G); G=ideal @item @strong{Assume:} G is the reduced lexicographical Groebner bases of the zero-dimensional ideal (G), sorted by increasing leading terms. @item @strong{Return:} a list of finitely many triangular systems, such that the union of their varieties equals the variety of (G). @item @strong{Note:} Algorithm of Lazard (see: Lazard, D.: Solving zero-dimensional algebraic systems, J. Symb. Comp. 13, 117 - 132, 1992). @end table @strong{Example:} @smallexample @c skipped computation of example triangL d2t_singular/triang_lib.doc:51 LIB "triang.lib"; ring rC5 = 0,(e,d,c,b,a),lp; triangL(stdfglm(cyclic(5))); @end smallexample @c ---end content triangL--- @c ------------------- triangLfak ------------- @node triangLfak, triangM, triangL, triang_lib @subsubsection triangLfak @cindex triangLfak @c ---content triangLfak--- Procedure from library @code{triang.lib} (@pxref{triang_lib}). @table @asis @item @strong{Usage:} triangLfak(G); G=ideal @item @strong{Assume:} G is the reduced lexicographical Groebner bases of the zero-dimensional ideal (G), sorted by increasing leading terms. @item @strong{Return:} a list of finitely many triangular systems, such that the union of their varieties equals the variety of (G). @item @strong{Note:} Algorithm of Lazard with factorization (see: Lazard, D.: Solving zero-dimensional algebraic systems, J. Symb. Comp. 13, 117 - 132, 1992). @item @strong{Remark:} each polynomial of the triangular systems is factorized. @end table @strong{Example:} @smallexample @c skipped computation of example triangLfak d2t_singular/triang_lib.doc:88 LIB "triang.lib"; ring rC5 = 0,(e,d,c,b,a),lp; triangLfak(stdfglm(cyclic(5))); @end smallexample @c ---end content triangLfak--- @c ------------------- triangM ------------- @node triangM, triangMH, triangLfak, triang_lib @subsubsection triangM @cindex triangM @c ---content triangM--- Procedure from library @code{triang.lib} (@pxref{triang_lib}). @table @asis @item @strong{Usage:} triangM(G[,i]); G=ideal, i=integer,@* @item @strong{Assume:} G is the reduced lexicographical Groebner bases of the zero-dimensional ideal (G), sorted by increasing leading terms. @item @strong{Return:} a list of finitely many triangular systems, such that the union of their varieties equals the variety of (G). If i = 2, then each polynomial of the triangular systems is factorized. @item @strong{Note:} Algorithm of Moeller (see: Moeller, H.M.: @*On decomposing systems of polynomial equations with @*finitely many solutions, Appl. Algebra Eng. Commun. Comput. 4, 217 - 230, 1993). @end table @strong{Example:} @smallexample @c skipped computation of example triangM d2t_singular/triang_lib.doc:126 LIB "triang.lib"; ring rC5 = 0,(e,d,c,b,a),lp; triangM(stdfglm(cyclic(5))); //oder: triangM(stdfglm(cyclic(5)),2); @end smallexample @c ---end content triangM--- @c ------------------- triangMH ------------- @node triangMH,, triangM, triang_lib @subsubsection triangMH @cindex triangMH @c ---content triangMH--- Procedure from library @code{triang.lib} (@pxref{triang_lib}). @table @asis @item @strong{Usage:} triangMH(G[,i]); G=ideal, i=integer @item @strong{Assume:} G is the reduced lexicographical Groebner bases of the zero-dimensional ideal (G), sorted by increasing leading terms. @item @strong{Return:} a list of finitely many triangular systems, such that the disjoint union of their varieties equals the variety of (G). If i = 2, then each polynomial of the triangular systems is factorized. @item @strong{Note:} Algorithm of Moeller and Hillebrand (see: Moeller, H.M.: On decomposing systems of polynomial equations with finitely many solutions, Appl. Algebra Eng. Commun. Comput. 4, 217 - 230, 1993 and Hillebrand, D.: Triangulierung nulldimensionaler Ideale - Implementierung und Vergleich zweier Algorithmen, master thesis, Universitaet Dortmund, Fachbereich Mathematik, Prof. Dr. H.M. Moeller, 1999). @end table @strong{Example:} @smallexample @c skipped computation of example triangMH d2t_singular/triang_lib.doc:166 LIB "triang.lib"; ring rC5 = 0,(e,d,c,b,a),lp; triangMH(stdfglm(cyclic(5))); @end smallexample @c ---end content triangMH--- texi2html-1.82/test/singular_manual/d2t_singular/deform_lib.tex0000644000175000017500000002414211264347126026622 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/deform_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/deform_lib.doc INSTEAD @c library version: (1.25.2.2,2003/02/24) @c library file: ../Singular/LIB/deform.lib @cindex deform.lib @cindex deform_lib @table @asis @item @strong{Library:} deform.lib @item @strong{Purpose:} Miniversal Deformation of Singularities and Modules @item @strong{Author:} Bernd Martin, email: martin@@math.tu-cottbus.de @end table @strong{Procedures:} @menu * versal:: miniversal deformation of isolated singularity Fo * mod_versal:: miniversal deformation of module Mo modulo ideal I * lift_kbase:: lifting N into standard kbase of M * lift_rel_kb:: relative lifting N into a kbase of M * kill_rings:: kills the exported rings from above @end menu @c ---end content LibInfo--- @c ------------------- versal ------------- @node versal, mod_versal,, deform_lib @subsubsection versal @cindex versal @c ---content versal--- Procedure from library @code{deform.lib} (@pxref{deform_lib}). @table @asis @item @strong{Usage:} versal(Fo[,d,any]); Fo=ideal, d=int, any=list @item @strong{Compute:} miniversal deformation of Fo up to degree d (default d=100), @item @strong{Create:} Rings (exported): @*'my'Px = extending the basering Po by new variables given by "A,B,.." (deformation parameters), returns as basering; the new variables precede the old ones, the ordering is the product between "ls" and "ord(Po)" @*'my'Qx = Px/Fo extending Qo=Po/Fo, @*'my'So = the embedding-ring of the versal base space, @*'my'Ox = Px/Js extending So/Js. (default my="") Matrices (in Px, exported): @*Js = giving the versal base space (obstructions), @*Fs = giving the versal family of Fo, @*Rs = giving the lifting of Ro=syz(Fo). If d is defined (!=0), it computes up to degree d. @*If 'any' is defined and any[1] is no string, interactive version. @*Otherwise 'any' gives predefined strings: "my","param","order","out" ("my" prefix-string, "param" is a letter (e.g. "A") for the name of first parameter or (e.g. "A(") for index parameter variables, "order" ordering string for ring extension), "out" name of output-file). @item @strong{Note:} printlevel < 0 no output at all, @*printlevel >=0,1,2,.. informs you, what is going on; @*this proc uses 'execute'. @end table @strong{Example:} @smallexample @c computed example versal d2t_singular/deform_lib.doc:70 LIB "deform.lib"; int p = printlevel; printlevel = 0; ring r1 = 0,(x,y,z,u,v),ds; matrix m[2][4] = x,y,z,u,y,z,u,v; ideal Fo = minor(m,2); // cone over rational normal curve of degree 4 versal(Fo); @expansion{} // ready: T_1 and T_2 @expansion{} // start computation in degree 2. @expansion{} @expansion{} // Result belongs to ring Px. @expansion{} // Equations of total space of miniversal deformation are @expansion{} // given by Fs, equations of miniversal base space by Js. @expansion{} // Make Px the basering and list objects defined in Px by typing: @expansion{} setring Px; show(Px); @expansion{} listvar(matrix); @expansion{} // NOTE: rings Qx, Px, So are alive! @expansion{} // (use 'kill_rings("");' to remove) setring Px; // ___ Equations of miniversal base space ___: Js;""; @expansion{} Js[1,1]=BD @expansion{} Js[1,2]=-AD+D2 @expansion{} Js[1,3]=-CD @expansion{} // ___ Equations of miniversal total space ___: Fs;""; @expansion{} Fs[1,1]=-u2+zv+Bu+Dv @expansion{} Fs[1,2]=-zu+yv-Au+Du @expansion{} Fs[1,3]=-yu+xv+Cu+Dz @expansion{} Fs[1,4]=z2-yu+Az+By @expansion{} Fs[1,5]=yz-xu+Bx-Cz @expansion{} Fs[1,6]=-y2+xz+Ax+Cy @expansion{} @c end example versal d2t_singular/deform_lib.doc:70 @end smallexample @c ---end content versal--- @c ------------------- mod_versal ------------- @node mod_versal, lift_kbase, versal, deform_lib @subsubsection mod_versal @cindex mod_versal @c ---content mod_versal--- Procedure from library @code{deform.lib} (@pxref{deform_lib}). @table @asis @item @strong{Usage:} mod_versal(Mo,I[,d,any]); I=ideal, M=module, d=int, any =list @item @strong{Compute:} miniversal deformation of coker(Mo) over Qo=Po/Io, Po=basering; @item @strong{Create:} Ringsr (exported): @*'my'Px = extending the basering by new variables (deformation parameters), the new variables precede the old ones, @*the ordering is the product between "my_ord" @*and "ord(Po)" @*'my'Qx = Px/Io extending Qo (returns as basering), @*'my'Ox = Px/(Io+Js) ring of the versal deformation of coker(Ms), @*'my'So = embedding-ring of the versal base space. (default 'my'="") Matrices (in Qx, exported): @*Js = giving the versal base space (obstructions), @*Ms = giving the versal family of Mo, @*Ls = giving the lifting of syzygies Lo=syz(Mo), If d is defined (!=0), it computes up to degree d. @*If 'any' is defined and any[1] is no string, interactive version. @*Otherwise 'any' gives predefined strings:"my","param","order","out" ("my" prefix-string, "param" is a letter (e.g. "A") for the name of first parameter or (e.g. "A(") for index parameter variables, "ord" ordering string for ring extension), "out" name of output-file). @item @strong{Note:} printlevel < 0 no output at all, @*printlevel >=0,1,2,.. informs you, what is going on, @*this proc uses 'execute'. @end table @strong{Example:} @smallexample @c computed example mod_versal d2t_singular/deform_lib.doc:132 LIB "deform.lib"; int p = printlevel; printlevel = 1; ring Ro = 0,(x,y),wp(3,4); ideal Io = x4+y3; matrix Mo[2][2] = x2,y,-y2,x2; mod_versal(Mo,Io); @expansion{} // vdim (Ext^2) = 4 @expansion{} // vdim (Ext^1) = 4 @expansion{} // ready: Ext1 and Ext2 @expansion{} // Ext1 is quasi-homogeneous represented: 3,6,1,4 @expansion{} // infinitesimal extension @expansion{} x2-Ax-B, y+Cx+D, @expansion{} -y2+Cxy+Dy,x2+Ax+B @expansion{} // start deg = 2 @expansion{} // start deg = 3 @expansion{} // start deg = 4 @expansion{} // start deg = 5 @expansion{} // finished in degree @expansion{} 5 @expansion{} // quasi-homogeneous weights of miniversal base @expansion{} 3,6,1,4 @expansion{} // Result belongs to qring Qx @expansion{} // Equations of total space of miniversal deformation are in Js @expansion{} -2AB+A3+3CD2-BC3-3AC2D+A2C3, @expansion{} -B2+A2B+D3-3BC2D+ABC3 @expansion{} // Matrix of the deformed module is Ms and lifted syzygies are Ls. @expansion{} // Make Qx the basering and list objects defined in Qx by typing: @expansion{} listvar(ring);setring Qx; show(Qx);listvar(ideal);listvar(matrix); @expansion{} // NOTE: rings Qx, Ox, So are still alive! @expansion{} // (use: 'kill_rings();' to remove them) printlevel = p; if(system("with","Namespaces")) @{ if(nameof(Current) == "Ring" ) @{ kill Top::Px,Top::Qx,Top::So; @} else @{ kill Ring::Px,Ring::So; @} @} kill Px,Qx,So; @c end example mod_versal d2t_singular/deform_lib.doc:132 @end smallexample @c ---end content mod_versal--- @c ------------------- lift_kbase ------------- @node lift_kbase, lift_rel_kb, mod_versal, deform_lib @subsubsection lift_kbase @cindex lift_kbase @c ---content lift_kbase--- Procedure from library @code{deform.lib} (@pxref{deform_lib}). @table @asis @item @strong{Usage:} lift_kbase(N,M); N,M=poly/ideal/vector/module @item @strong{Return:} matrix A, coefficient matrix expressing N as linear combination of k-basis of M. Let the k-basis have k elements and size(N)=c columns. Then A satisfies: @*matrix(reduce(N,std(M)),k,c) = matrix(kbase(std(M)))*A @item @strong{Assume:} dim(M)=0 and the monomial ordering is a well ordering or the last block of the ordering is c or C @end table @strong{Example:} @smallexample @c computed example lift_kbase d2t_singular/deform_lib.doc:177 LIB "deform.lib"; ring R=0,(x,y),ds; module M=[x2,xy],[y2,xy],[0,xx],[0,yy]; module N=[x3+xy,x],[x,x+y2]; print(M); @expansion{} x2,y2,0, 0, @expansion{} xy,xy,x2,y2 module kb=kbase(std(M)); print(kb); @expansion{} y2,xy,y,x,1,0,0,0, @expansion{} 0, 0, 0,0,0,y,x,1 print(N); @expansion{} xy+x3,x, @expansion{} x, x+y2 matrix A=lift_kbase(N,M); print(A); @expansion{} 0,0, @expansion{} 1,0, @expansion{} 0,0, @expansion{} 0,1, @expansion{} 0,0, @expansion{} 0,0, @expansion{} 1,1, @expansion{} 0,0 matrix(reduce(N,std(M)),nrows(kb),ncols(A)) - matrix(kbase(std(M)))*A; @expansion{} _[1,1]=0 @expansion{} _[1,2]=0 @expansion{} _[2,1]=0 @expansion{} _[2,2]=0 @c end example lift_kbase d2t_singular/deform_lib.doc:177 @end smallexample @c ---end content lift_kbase--- @c ------------------- lift_rel_kb ------------- @node lift_rel_kb, kill_rings, lift_kbase, deform_lib @subsubsection lift_rel_kb @cindex lift_rel_kb @c ---content lift_rel_kb--- Procedure from library @code{deform.lib} (@pxref{deform_lib}). @table @asis @item @strong{Usage:} lift_rel_kb(N,M[,kbaseM,p]); @item @strong{Assume:} [p a monomial ] or the product of all variables @*N, M modules of same rank, M depending only on variables not in p and vdim(M) is finite in this ring, @*[ kbaseM the kbase of M in the subring given by variables not in p ] @* warning: these assumptions are not checked by the procedure @item @strong{Return:} matrix A, whose j-th columns present the coeff's of N[j] in kbaseM, i.e. kbaseM*A = reduce(N,std(M)) @end table @strong{Example:} @smallexample @c computed example lift_rel_kb d2t_singular/deform_lib.doc:218 LIB "deform.lib"; ring r=0,(A,B,x,y),dp; module M = [x2,xy],[xy,y3],[y2],[0,x]; module kbaseM = [1],[x],[xy],[y],[0,1],[0,y],[0,y2]; poly f=xy; module N = [AB,BBy],[A3xy+x4,AB*(1+y2)]; matrix A = lift_rel_kb(N,M,kbaseM,f); print(A); @expansion{} AB,0, @expansion{} 0, 0, @expansion{} 0, A3, @expansion{} 0, 0, @expansion{} 0, AB, @expansion{} B2,0, @expansion{} 0, AB "TEST:"; @expansion{} TEST: print(matrix(kbaseM)*A-matrix(reduce(N,std(M)))); @expansion{} 0,0, @expansion{} 0,0 @c end example lift_rel_kb d2t_singular/deform_lib.doc:218 @end smallexample @c ---end content lift_rel_kb--- @c ------------------- kill_rings ------------- @node kill_rings,, lift_rel_kb, deform_lib @subsubsection kill_rings @cindex kill_rings @c ---content kill_rings--- Procedure from library @code{deform.lib} (@pxref{deform_lib}). @table @asis @item @strong{Usage:} kill_rings([string]); @item @strong{Return:} nothing, but kills exported rings generated by procedures 'versal' and 'mod_versal' with optional prefix 'string' @end table @c ---end content kill_rings--- texi2html-1.82/test/singular_manual/d2t_singular/rinvar_lib.tex0000644000175000017500000004473611264347126026662 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/rinvar_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/rinvar_lib.doc INSTEAD @c library version: (1.7.2.3,2002/02/20) @c library file: ../Singular/LIB/rinvar.lib @cindex rinvar.lib @cindex rinvar_lib @table @asis @item @strong{Library:} rinvar.lib @item @strong{Purpose:} Invariant Rings of Reductive Groups @item @strong{Author:} Thomas Bayer, tbayer@@in.tum.de @*http://wwwmayr.informatik.tu-muenchen.de/personen/bayert/ Current Adress: Institut fuer Informatik, TU Muenchen @item @strong{Overview:} Implementation based on Derksen's algorithm. Written in the frame of the diploma thesis (advisor: Prof. Gert-Martin Greuel) 'Computations of moduli spaces of semiquasihomogeneous singularities and an implementation in Singular' @end table @strong{Procedures:} @menu * HilbertSeries:: Hilbert series of the ideal I w.r.t. weight w * HilbertWeights:: weighted degrees of the generators of I * ImageVariety:: ideal of the image variety F(variety(I)) * ImageGroup:: ideal of G w.r.t. the induced representation * InvariantRing:: generators of the invariant ring of G * InvariantQ:: decide if f is invariant w.r.t. G * LinearizeAction:: linearization of the action 'Gaction' of G * LinearActionQ:: decide if action is linear in var(s..nvars) * LinearCombinationQ:: decide if f is in the linear hull of 'base' * MinimalDecomposition:: minimal decomposition of f (like coef) * NullCone:: ideal of the null cone of the action 'act' of G * ReynoldsImage:: image of f under the Reynolds operator 'RO' * ReynoldsOperator:: Reynolds operator of the group G * SimplifyIdeal:: simplify the ideal I (try to reduce variables) * TransferIdeal:: transfer the ideal 'name' from R to basering @end menu @c inserted refs from d2t_singular/rinvar_lib.doc:41 @ifinfo @menu See also: * qhmoduli_lib:: * zeroset_lib:: @end menu @end ifinfo @iftex @strong{See also:} @ref{qhmoduli_lib}; @ref{zeroset_lib}. @end iftex @c end inserted refs from d2t_singular/rinvar_lib.doc:41 @c ---end content LibInfo--- @c ------------------- HilbertSeries ------------- @node HilbertSeries, HilbertWeights,, rinvar_lib @subsubsection HilbertSeries @cindex HilbertSeries @c ---content HilbertSeries--- Procedure from library @code{rinvar.lib} (@pxref{rinvar_lib}). @table @asis @item @strong{Usage:} HilbertSeries(I, w); ideal I, intvec wt @item @strong{Purpose:} compute the polynomial p of the Hilbert Series,represented by p/q, of the ring K[t_1,...,t_m,y_1,...,y_r]/I1 where 'w' are the weights of the variables, computed, e.g., by 'HilbertWeights', 'I1' is of the form I[1] - y_1,...,I[r] - y_r and is quasihomogeneous w.r.t. 'w' @item @strong{Return:} intvec @item @strong{Note:} the leading 0 of the result does not belong to p, but is needed in the hilbert-driven 'std'. @end table @c ---end content HilbertSeries--- @c ------------------- HilbertWeights ------------- @node HilbertWeights, ImageVariety, HilbertSeries, rinvar_lib @subsubsection HilbertWeights @cindex HilbertWeights @c ---content HilbertWeights--- Procedure from library @code{rinvar.lib} (@pxref{rinvar_lib}). @table @asis @item @strong{Purpose:} compute the weights of the "slack" variables needed for the computation of the algebraic relations of the generators of 'I' s.t. the Hilbert driven 'std' can be used. @item @strong{Return:} intvec @item @strong{Assume:} basering = K[t_1,...,t_m,...], 'I' is quasihomogeneous w.r.t. 'w' and contains only polynomials in t_1,...,t_m @end table @c ---end content HilbertWeights--- @c ------------------- ImageVariety ------------- @node ImageVariety, ImageGroup, HilbertWeights, rinvar_lib @subsubsection ImageVariety @cindex ImageVariety @c ---content ImageVariety--- Procedure from library @code{rinvar.lib} (@pxref{rinvar_lib}). @table @asis @item @strong{Usage:} ImageVariety(ideal I, F [, w]);ideal I; F is a list/ideal, intvec w. @item @strong{Purpose:} compute the Zariski closure of the image of the variety of I under the morphism F. @item @strong{Note:} if 'I' and 'F' are quasihomogeneous w.r.t. 'w' then the Hilbert-driven 'std' is used. @item @strong{Return:} polynomial ring over the same ground field, containing the ideal 'imageid'. The variables are Y(1),...,Y(k) where k = size(F) - 'imageid' is the ideal of the Zariski closure of F(X) where X is the variety of I. @end table @strong{Example:} @smallexample @c computed example ImageVariety d2t_singular/rinvar_lib.doc:125 LIB "rinvar.lib"; ring B = 0,(x,y),dp; ideal I = x4 - y4; ideal F = x2, y2, x*y; def R = ImageVariety(I, F); setring R; imageid; @expansion{} imageid[1]=Y(1)*Y(2)-Y(3)^2 @expansion{} imageid[2]=Y(1)^2-Y(2)^2 @expansion{} imageid[3]=Y(2)^3-Y(1)*Y(3)^2 @c end example ImageVariety d2t_singular/rinvar_lib.doc:125 @end smallexample @c ---end content ImageVariety--- @c ------------------- ImageGroup ------------- @node ImageGroup, InvariantRing, ImageVariety, rinvar_lib @subsubsection ImageGroup @cindex ImageGroup @c ---content ImageGroup--- Procedure from library @code{rinvar.lib} (@pxref{rinvar_lib}). @table @asis @item @strong{Usage:} ImageGroup(G, action); ideal G, action; @item @strong{Purpose:} compute the ideal of the image of G in GL(m,K) induced by the linear action 'action', where G is an algebraic group and 'action' defines an action of G on K^m (size(action) = m). @item @strong{Return:} ring, a polynomial ring over the same ground field as the basering, containing the ideals 'groupid' and 'actionid'. @*- 'groupid' is the ideal of the image of G (order <= order of G) - 'actionid' defines the linear action of 'groupid' on K^m. @item @strong{Note:} 'action' and 'actionid' have the same orbits @*all variables which give only rise to 0's in the m x m matrices of G have been omitted. @item @strong{Assume:} basering K[s(1..r),t(1..m)] has r + m variables, G is the ideal of an algebraic group and F is an action of G on K^m. G contains only the variables s(1)...s(r). The action 'action' is given by polynomials f_1,...,f_m in basering, s.t. on the ring level we have K[t_1,...,t_m] --> K[s_1,...,s_r,t_1,...,t_m]/G @*t_i --> f_i(s_1,...,s_r,t_1,...,t_m) @end table @strong{Example:} @smallexample @c computed example ImageGroup d2t_singular/rinvar_lib.doc:175 LIB "rinvar.lib"; ring B = 0,(s(1..2), t(1..2)),dp; ideal G = s(1)^3-1, s(2)^10-1; ideal action = s(1)*s(2)^8*t(1), s(1)*s(2)^7*t(2); def R = ImageGroup(G, action); setring R; groupid; @expansion{} groupid[1]=-s(1)+s(2)^4 @expansion{} groupid[2]=s(1)^8-s(2)^2 @expansion{} groupid[3]=s(1)^7*s(2)^2-1 actionid; @expansion{} actionid[1]=s(1)*t(1) @expansion{} actionid[2]=s(2)*t(2) @c end example ImageGroup d2t_singular/rinvar_lib.doc:175 @end smallexample @c ---end content ImageGroup--- @c ------------------- InvariantRing ------------- @node InvariantRing, InvariantQ, ImageGroup, rinvar_lib @subsubsection InvariantRing @cindex InvariantRing @c ---content InvariantRing--- Procedure from library @code{rinvar.lib} (@pxref{rinvar_lib}). @table @asis @item @strong{Usage:} InvariantRing(G, Gact [, opt]); ideal G, Gact; int opt @item @strong{Purpose:} compute generators of the invariant ring of G w.r.t. the action 'Gact' @item @strong{Assume:} G is a finite group and 'Gact' is a linear action. @item @strong{Return:} polynomial ring over a simple extension of the ground field of the basering (the extension might be trivial), containing the ideals 'invars' and 'groupid' and the poly 'newA' @*- 'invars' contains the algebra-generators of the invariant ring - 'groupid' is the ideal of G in the new ring @*- 'newA' if the minpoly changes this is the new representation of the algebraic number, otherwise it is set to 'a'. @item @strong{Note:} the delivered ring might have a different minimal polynomial @end table @strong{Example:} @smallexample @c computed example InvariantRing d2t_singular/rinvar_lib.doc:220 LIB "rinvar.lib"; ring B = 0, (s(1..2), t(1..2)), dp; ideal G = -s(1)+s(2)^3, s(1)^4-1; ideal action = s(1)*t(1), s(2)*t(2); def R = InvariantRing(std(G), action); setring R; invars; @expansion{} invars[1]=t(1)^4 @expansion{} invars[2]=t(1)^3*t(2)^3 @expansion{} invars[3]=t(1)^2*t(2)^6 @expansion{} invars[4]=t(1)*t(2)^9 @expansion{} invars[5]=t(2)^12 @c end example InvariantRing d2t_singular/rinvar_lib.doc:220 @end smallexample @c ---end content InvariantRing--- @c ------------------- InvariantQ ------------- @node InvariantQ, LinearizeAction, InvariantRing, rinvar_lib @subsubsection InvariantQ @cindex InvariantQ @c ---content InvariantQ--- Procedure from library @code{rinvar.lib} (@pxref{rinvar_lib}). @table @asis @item @strong{Usage:} InvariantQ(f, G, action); poly f; ideal G, action @item @strong{Purpose:} check if the polynomial f is invariant w.r.t. G where G acts via 'action' on K^m. @item @strong{Assume:} basering = K[s_1,...,s_m,t_1,...,t_m] where K = Q of K = Q(a) and minpoly != 0, f contains only t_1,...,t_m, G is the ideal of an algebraic group and a standard basis. @item @strong{Return:} int; @*0 if f is not invariant, @*1 if f is invariant @item @strong{Note:} G need not be finite @end table @c ---end content InvariantQ--- @c ------------------- LinearizeAction ------------- @node LinearizeAction, LinearActionQ, InvariantQ, rinvar_lib @subsubsection LinearizeAction @cindex LinearizeAction @c ---content LinearizeAction--- Procedure from library @code{rinvar.lib} (@pxref{rinvar_lib}). @table @asis @item @strong{Usage:} LinearizeAction(G,action,r); ideal G, action; int r @item @strong{Purpose:} linearize the group action 'action' and find an equivariant embedding of K^m where m = size(action). @item @strong{Assume:} G contains only variables var(1..r) (r = nrs) @*basering = K[s(1..r),t(1..m)], K = Q or K = Q(a) and minpoly != 0. @item @strong{Return:} polynomial ring containing the ideals 'actionid', 'embedid', 'groupid' - 'actionid' is the ideal defining the linearized action of G - 'embedid' is a parameterization of an equivariant embedding (closed) - 'groupid' is the ideal of G in the new ring @item @strong{Note:} set printlevel > 0 to see a trace @end table @strong{Example:} @smallexample @c computed example LinearizeAction d2t_singular/rinvar_lib.doc:294 LIB "rinvar.lib"; ring B = 0,(s(1..5), t(1..3)),dp; ideal G = s(3)-s(4), s(2)-s(5), s(4)*s(5), s(1)^2*s(4)+s(1)^2*s(5)-1, s(1)^2*s(5)^2-s(5), s(4)^4-s(5)^4+s(1)^2, s(1)^4+s(4)^3-s(5)^3, s(5)^5-s(1)^2*s(5); ideal action = -s(4)*t(1)+s(5)*t(1), -s(4)^2*t(2)+2*s(4)^2*t(3)^2+s(5)^2*t(2), s(4)*t(3)+s(5)*t(3); LinearActionQ(action, 5); @expansion{} 0 def R = LinearizeAction(G, action, 5); setring R; R; @expansion{} // characteristic : 0 @expansion{} // number of vars : 9 @expansion{} // block 1 : ordering dp @expansion{} // : names s(1) s(2) s(3) s(4) s(5) t(1) t(2) t(3) t(\ 4) @expansion{} // block 2 : ordering C actionid; @expansion{} actionid[1]=-s(4)*t(1)+s(5)*t(1) @expansion{} actionid[2]=-s(4)^2*t(2)+s(5)^2*t(2)+2*s(4)^2*t(4) @expansion{} actionid[3]=s(4)*t(3)+s(5)*t(3) @expansion{} actionid[4]=s(4)^2*t(4)+s(5)^2*t(4) embedid; @expansion{} embedid[1]=t(1) @expansion{} embedid[2]=t(2) @expansion{} embedid[3]=t(3) @expansion{} embedid[4]=t(3)^2 groupid; @expansion{} groupid[1]=s(3)-s(4) @expansion{} groupid[2]=s(2)-s(5) @expansion{} groupid[3]=s(4)*s(5) @expansion{} groupid[4]=s(1)^2*s(4)+s(1)^2*s(5)-1 @expansion{} groupid[5]=s(1)^2*s(5)^2-s(5) @expansion{} groupid[6]=s(4)^4-s(5)^4+s(1)^2 @expansion{} groupid[7]=s(1)^4+s(4)^3-s(5)^3 @expansion{} groupid[8]=s(5)^5-s(1)^2*s(5) LinearActionQ(actionid, 5); @expansion{} 1 @c end example LinearizeAction d2t_singular/rinvar_lib.doc:294 @end smallexample @c ---end content LinearizeAction--- @c ------------------- LinearActionQ ------------- @node LinearActionQ, LinearCombinationQ, LinearizeAction, rinvar_lib @subsubsection LinearActionQ @cindex LinearActionQ @c ---content LinearActionQ--- Procedure from library @code{rinvar.lib} (@pxref{rinvar_lib}). @table @asis @item @strong{Usage:} LinearActionQ(action,nrs,nrt); ideal action, int nrs @item @strong{Purpose:} check if the action defined by 'action' is linear w.r.t. the variables var(nrs + 1...nvars(basering)). @item @strong{Return:} 0 action not linear @*1 action is linear @end table @strong{Example:} @smallexample @c computed example LinearActionQ d2t_singular/rinvar_lib.doc:333 LIB "rinvar.lib"; ring R = 0,(s(1..5), t(1..3)),dp; ideal G = s(3)-s(4), s(2)-s(5), s(4)*s(5), s(1)^2*s(4)+s(1)^2*s(5)-1, s(1)^2*s(5)^2-s(5), s(4)^4-s(5)^4+s(1)^2, s(1)^4+s(4)^3-s(5)^3, s(5)^5-s(1)^2*s(5); ideal Gaction = -s(4)*t(1)+s(5)*t(1), -s(4)^2*t(2)+2*s(4)^2*t(3)^2+s(5)^2*t(2), s(4)*t(3)+s(5)*t(3); LinearActionQ(Gaction, 5, 3); @expansion{} // ** too many arguments for LinearActionQ @expansion{} 0 @c end example LinearActionQ d2t_singular/rinvar_lib.doc:333 @end smallexample @c ---end content LinearActionQ--- @c ------------------- LinearCombinationQ ------------- @node LinearCombinationQ, MinimalDecomposition, LinearActionQ, rinvar_lib @subsubsection LinearCombinationQ @cindex LinearCombinationQ @c ---content LinearCombinationQ--- Procedure from library @code{rinvar.lib} (@pxref{rinvar_lib}). @table @asis @item @strong{Usage:} LinearCombination(I, f); ideal I, poly f @item @strong{Purpose:} test if f can be written as a linear combination of the generators of I. @item @strong{Return:} 0 f is not a linear combination @*1 f is a linear combination @end table @c ---end content LinearCombinationQ--- @c ------------------- MinimalDecomposition ------------- @node MinimalDecomposition, NullCone, LinearCombinationQ, rinvar_lib @subsubsection MinimalDecomposition @cindex MinimalDecomposition @c ---content MinimalDecomposition--- Procedure from library @code{rinvar.lib} (@pxref{rinvar_lib}). @table @asis @item @strong{Usage:} MinimalDecomposition(f,a,b); poly f; int a, b. @item @strong{Purpose:} decompose f as a sum M[1,1]*M[2,1] + ... + M[1,r]*M[2,r] where M[1,i] contains only s(1..a), M[2,i] contains only t(1...b) s.t. r is minimal @item @strong{Assume:} f polynomial in K[s(1..a),t(1..b)], K = Q or K = Q(a) and minpoly != 0 @item @strong{Return:} 2 x r matrix M s.t. f = M[1,1]*M[2,1] + ... + M[1,r]*M[2,r] @end table @strong{Example:} @smallexample @c computed example MinimalDecomposition d2t_singular/rinvar_lib.doc:388 LIB "rinvar.lib"; ring R = 0, (s(1..2), t(1..2)), dp; poly h = s(1)*(t(1) + t(1)^2) + (t(2) + t(2)^2)*(s(1)^2 + s(2)); matrix M = MinimalDecomposition(h, 2, 2); M; @expansion{} M[1,1]=s(1)^2+s(2) @expansion{} M[1,2]=s(1) @expansion{} M[2,1]=t(2)^2+t(2) @expansion{} M[2,2]=t(1)^2+t(1) M[1,1]*M[2,1] + M[1,2]*M[2,2] - h; @expansion{} 0 @c end example MinimalDecomposition d2t_singular/rinvar_lib.doc:388 @end smallexample @c ---end content MinimalDecomposition--- @c ------------------- NullCone ------------- @node NullCone, ReynoldsImage, MinimalDecomposition, rinvar_lib @subsubsection NullCone @cindex NullCone @c ---content NullCone--- Procedure from library @code{rinvar.lib} (@pxref{rinvar_lib}). @table @asis @item @strong{Usage:} NullCone(G, action); ideal G, action @item @strong{Purpose:} compute the ideal of the null cone of the linear action of G on K^n, given by 'action', by means of Derksen's algorithm @item @strong{Assume:} basering = K[s(1..r),t(1..n)], K = Q or K = Q(a) and minpoly != 0, G is an ideal of a reductive algebraic group in K[s(1..r)], 'action' is a linear group action of G on K^n (n = ncols(action)) @item @strong{Return:} ideal of the null cone of G. @item @strong{Note:} the generators of the null cone are homogeneous, but i.g. not invariant @end table @strong{Example:} @smallexample @c computed example NullCone d2t_singular/rinvar_lib.doc:428 LIB "rinvar.lib"; ring R = 0, (s(1..2), x, y), dp; ideal G = -s(1)+s(2)^3, s(1)^4-1; ideal action = s(1)*x, s(2)*y; ideal inv = NullCone(G, action); inv; @expansion{} inv[1]=x^4 @expansion{} inv[2]=x^3*y^3 @expansion{} inv[3]=x^2*y^6 @expansion{} inv[4]=x*y^9 @expansion{} inv[5]=y^12 @c end example NullCone d2t_singular/rinvar_lib.doc:428 @end smallexample @c ---end content NullCone--- @c ------------------- ReynoldsImage ------------- @node ReynoldsImage, ReynoldsOperator, NullCone, rinvar_lib @subsubsection ReynoldsImage @cindex ReynoldsImage @c ---content ReynoldsImage--- Procedure from library @code{rinvar.lib} (@pxref{rinvar_lib}). @table @asis @item @strong{Usage:} ReynoldsImage(RO, f); list RO, poly f @item @strong{Purpose:} compute the Reynolds image of the polynomial f where RO represents the Reynolds operator @item @strong{Return:} poly @end table @c ---end content ReynoldsImage--- @c ------------------- ReynoldsOperator ------------- @node ReynoldsOperator, SimplifyIdeal, ReynoldsImage, rinvar_lib @subsubsection ReynoldsOperator @cindex ReynoldsOperator @c ---content ReynoldsOperator--- Procedure from library @code{rinvar.lib} (@pxref{rinvar_lib}). @table @asis @item @strong{Usage:} ReynoldsOperator(G, action [, opt); ideal G, action; int opt @item @strong{Purpose:} compute the Reynolds operator of the group G which act via 'action' @item @strong{Return:} polynomial ring R over a simple extension of the ground field of the basering (the extension might be trivial), containing a list 'ROelements', the ideals 'id', 'actionid' and the polynomial 'newA'. R = K(a)[s(1..r),t(1..n)]. @*- 'ROelements' is a list of ideal, each ideal represents a substitution map F : R -> R according to the zero-set of G - 'id' is the ideal of G in the new ring @*- 'newA' is the new representation of a' in terms of a. If the basering does not contain a parameter then 'newA' = 'a'. @item @strong{Assume:} basering = K[s(1..r),t(1..n)], K = Q or K = Q(a') and minpoly != 0, G is the ideal of a finite group in K[s(1..r)], 'action' is a linear group action of G @end table @c ---end content ReynoldsOperator--- @c ------------------- SimplifyIdeal ------------- @node SimplifyIdeal, TransferIdeal, ReynoldsOperator, rinvar_lib @subsubsection SimplifyIdeal @cindex SimplifyIdeal @c ---content SimplifyIdeal--- Procedure from library @code{rinvar.lib} (@pxref{rinvar_lib}). @table @asis @item @strong{Purpose:} simplify ideal I to the ideal I', do not change the names of the first m variables, new ideal I' might contain less variables. I' contains variables var(1..m) @item @strong{Return:} list @*_[1] ideal I' @*_[2] ideal representing a map phi to a ring with probably less vars. s.t. phi(I) = I' @*_[3] list of variables @*_[4] list from 'elimpart' @end table @c ---end content SimplifyIdeal--- @c ------------------- TransferIdeal ------------- @node TransferIdeal,, SimplifyIdeal, rinvar_lib @subsubsection TransferIdeal @cindex TransferIdeal @c ---content TransferIdeal--- Procedure from library @code{rinvar.lib} (@pxref{rinvar_lib}). @table @asis @end table @c ---end content TransferIdeal--- texi2html-1.82/test/singular_manual/d2t_singular/CVS/0000755000175000017500000000000011264347126024426 5ustar flichtenheldflichtenheldtexi2html-1.82/test/singular_manual/d2t_singular/CVS/Repository0000644000175000017500000000005411264347126026527 0ustar flichtenheldflichtenheldtexi2html/test/singular_manual/d2t_singular texi2html-1.82/test/singular_manual/d2t_singular/CVS/Entries0000644000175000017500000000410611264347126025763 0ustar flichtenheldflichtenheld/ainvar_lib.tex/1.1/Mon Aug 18 18:20:31 2008// /algebra_lib.tex/1.1/Mon Aug 18 18:20:31 2008// /brnoeth_lib.tex/1.1/Mon Aug 18 18:20:32 2008// /classify_lib.tex/1.1/Mon Aug 18 18:20:32 2008// /deform_lib.tex/1.1/Mon Aug 18 18:20:33 2008// /elim_lib.tex/1.1/Mon Aug 18 18:20:33 2008// /equising_lib.tex/1.1/Mon Aug 18 18:20:33 2008// /finvar_lib.tex/1.1/Mon Aug 18 18:20:34 2008// /gaussman_lib.tex/1.1/Mon Aug 18 18:20:34 2008// /general_lib.tex/1.1/Mon Aug 18 18:20:35 2008// /graphics_lib_noEx.tex/1.1/Mon Aug 18 18:20:35 2008// /hnoether_lib.tex/1.1/Mon Aug 18 18:20:36 2008// /homolog_lib.tex/1.1/Mon Aug 18 18:20:36 2008// /inout_lib.tex/1.1/Mon Aug 18 18:20:37 2008// /intprog_lib.tex/1.1/Mon Aug 18 18:20:37 2008// /latex_lib.tex/1.1/Mon Aug 18 18:20:37 2008// /linalg_lib_noEx.tex/1.1/Mon Aug 18 18:20:38 2008// /matrix_lib.tex/1.1/Mon Aug 18 18:20:38 2008// /mondromy_lib.tex/1.1/Mon Aug 18 18:20:39 2008// /mprimdec_lib.tex/1.1/Mon Aug 18 18:20:39 2008// /mregular_lib.tex/1.1/Mon Aug 18 18:20:39 2008// /normal_lib.tex/1.1/Mon Aug 18 18:20:40 2008// /ntsolve_lib.tex/1.1/Mon Aug 18 18:20:40 2008// /paramet_lib.tex/1.1/Mon Aug 18 18:20:40 2008// /poly_lib.tex/1.1/Mon Aug 18 18:20:41 2008// /presolve_lib.tex/1.1/Mon Aug 18 18:20:41 2008// /primdec_lib.tex/1.1/Mon Aug 18 18:20:41 2008// /primitiv_lib.tex/1.1/Mon Aug 18 18:20:42 2008// /qhmoduli_lib.tex/1.1/Mon Aug 18 18:20:42 2008// /random_lib.tex/1.1/Mon Aug 18 18:20:42 2008// /reesclos_lib.tex/1.1/Mon Aug 18 18:20:43 2008// /ring_lib.tex/1.1/Mon Aug 18 18:20:43 2008// /rinvar_lib.tex/1.1/Mon Aug 18 18:20:43 2008// /sing_lib.tex/1.1/Mon Aug 18 18:20:44 2008// /solve_lib.tex/1.1/Mon Aug 18 18:20:44 2008// /spcurve_lib.tex/1.1/Mon Aug 18 18:20:44 2008// /spectrum_lib.tex/1.1/Mon Aug 18 18:20:45 2008// /standard_lib.tex/1.1/Mon Aug 18 18:20:45 2008// /stratify_lib.tex/1.1/Mon Aug 18 18:20:45 2008// /surf_lib_noEx.tex/1.1/Mon Aug 18 18:20:45 2008// /template_lib.tex/1.1/Mon Aug 18 18:20:46 2008// /toric_lib.tex/1.1/Mon Aug 18 18:20:46 2008// /triang_lib_noEx.tex/1.1/Mon Aug 18 18:20:46 2008// /zeroset_lib.tex/1.1/Mon Aug 18 18:20:46 2008// D texi2html-1.82/test/singular_manual/d2t_singular/CVS/Root0000644000175000017500000000006711264347126025277 0ustar flichtenheldflichtenheld:ext:dprice@cvs.savannah.nongnu.org:/cvsroot/texi2html texi2html-1.82/test/singular_manual/d2t_singular/homolog_lib.tex0000644000175000017500000014025111264347126027012 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/homolog_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/homolog_lib.doc INSTEAD @c library version: (1.15.2.2,2002/10/07) @c library file: ../Singular/LIB/homolog.lib @cindex homolog.lib @cindex homolog_lib @table @asis @item @strong{Library:} homolog.lib @item @strong{Purpose:} Procedures for Homological Algebra @item @strong{Authors:} Gert-Martin Greuel, greuel@@mathematik.uni-kl.de, @* Bernd Martin, martin@@math.tu-cottbus.de @* Christoph Lossen, lossen@@mathematik.uni-kl.de @end table @strong{Procedures:} @menu * cup:: cup: Ext^1(M',M') x Ext^1() --> Ext^2() * cupproduct:: cup: Ext^p(M',N') x Ext^q(N',P') --> Ext^p+q(M',P') * depth:: depth(I,M'), I ideal, M module, M'=coker(M) * Ext_R:: Ext^k(M',R), M module, R basering, M'=coker(M) * Ext:: Ext^k(M',N'), M,N modules, M'=coker(M), N'=coker(N) * fitting:: n-th Fitting ideal of M'=coker(M), M module, n int * flatteningStrat:: Flattening stratification of M'=coker(M), M module * Hom:: Hom(M',N'), M,N modules, M'=coker(M), N'=coker(N) * homology:: ker(B)/im(A), homology of complex R^k--A->M'--B->N' * isCM:: test if coker(M) is Cohen-Macaulay, M module * isFlat:: test if coker(M) is flat, M module * isLocallyFree:: test if coker(M) is locally free of constant rank r * isReg:: test if I is coker(M)-sequence, I ideal, M module * kernel:: ker(M'--A->N') M,N modules, A matrix * kohom:: Hom(R^k,A), A matrix over basering R * kontrahom:: Hom(A,R^k), A matrix over basering R * KoszulHomology:: n-th Koszul homology H_n(I,coker(M)), I=ideal * tensorMod:: Tensor product of modules M'=coker(M), N'=coker(N) * Tor:: Tor_k(M',N'), M,N modules, M'=coker(M), N'=coker(N) @end menu @c ---end content LibInfo--- @c ------------------- cup ------------- @node cup, cupproduct,, homolog_lib @subsubsection cup @cindex cup @c ---content cup--- Procedure from library @code{homolog.lib} (@pxref{homolog_lib}). @table @asis @item @strong{Usage:} cup(M,[,any,any]); M=module @item @strong{Compute:} cup-product Ext^1(M',M') x Ext^1(M',M') ---> Ext^2(M',M'), where M':=R^m/M, if M in R^m, R basering (i.e. M':=coker(matrix(M))). @* If called with >= 2 arguments: compute symmetrized cup-product @item @strong{Assume:} all Ext's are finite dimensional @item @strong{Return:} - if called with 1 argument: matrix, the columns of the output present the coordinates of b_i&b_j with respect to a kbase of Ext^2, where b_1,b_2,... is a kbase of Ext^1 and & denotes cup product;@* - if called with 2 arguments: matrix, the columns of the output present the coordinates of (1/2)(b_i&b_j + b_j&b_i) with respect to a kbase of Ext^2; @*- if called with 3 arguments: list, @format L[1] = matrix see above (symmetric case, for >=2 arguments) L[2] = matrix of kbase of Ext^1 L[3] = matrix of kbase of Ext^2 @end format @item @strong{Note:} printlevel >=1; shows what is going on. @*printlevel >=2; shows result in another representation. @* For computing cupproduct of M itself, apply proc to syz(M)! @end table @strong{Example:} @smallexample @c computed example cup d2t_singular/homolog_lib.doc:83 LIB "homolog.lib"; int p = printlevel; ring rr = 32003,(x,y,z),(dp,C); ideal I = x4+y3+z2; qring o = std(I); module M = [x,y,0,z],[y2,-x3,z,0],[z,0,-y,-x3],[0,z,x,-y2]; print(cup(M)); @expansion{} 0,1,0, 0, 0,0,0,0,0,0,0, 0,0,0,0,0,0, @expansion{} 0,0,-1,0, 0,1,0,0,0,0,0, 0,0,0,0,0,0, @expansion{} 0,0,0, -1,0,0,0,0,0,1,0, 0,0,0,0,0,0, @expansion{} 0,0,0, 0, 1,0,0,1,0,0,-1,0,0,1,0,0,0 print(cup(M,1)); @expansion{} 0,1,0,0,0,0,0,0,0,0,0, @expansion{} 0,0,0,0,0,0,0,0,0,0,0, @expansion{} 0,0,0,0,0,0,0,0,0,0,0, @expansion{} 0,0,0,0,1,0,0,0,0,0,0 // 2nd EXAMPLE (shows what is going on) printlevel = 3; ring r = 0,(x,y),(dp,C); ideal i = x2-y3; qring q = std(i); module M = [-x,y],[-y2,x]; print(cup(M)); @expansion{} // vdim (Ext^1) = 2 @expansion{} // kbase of Ext^1(M,M) @expansion{} // - the columns present the kbase elements in Hom(F(1),F(0)) @expansion{} // - F(*) a free resolution of M @expansion{} -1,0, @expansion{} 0, y, @expansion{} 0, 1, @expansion{} -1,0 @expansion{} // lift kbase of Ext^1: @expansion{} // - the columns present liftings of kbase elements into Hom(F(2),F(1)) @expansion{} // - F(*) a free resolution of M @expansion{} 1,0, @expansion{} 0,y, @expansion{} 0,1, @expansion{} 1,0 @expansion{} // vdim (Ext^2) = 2 @expansion{} // kbase of Ext^2(M,M) @expansion{} // - the columns present the kbase elements in Hom(F(2),F(0)) @expansion{} // - F(*) is a a free resolution of M @expansion{} -1,0, @expansion{} 0, y, @expansion{} 0, 1, @expansion{} -1,0 @expansion{} // matrix of cup-products (in Ext^2) @expansion{} 0,-1,0, 0,y, @expansion{} 0,0, -y,y,0, @expansion{} 0,0, -1,1,0, @expansion{} 0,-1,0, 0,y @expansion{} ////// end level 2 ////// @expansion{} // the associated matrices of the bilinear mapping 'cup' @expansion{} // corresponding to the kbase elements of Ext^2(M,M) are shown, @expansion{} // i.e. the rows of the final matrix are written as matrix of @expansion{} // a bilinear form on Ext^1 x Ext^1 @expansion{} //-----component 1: @expansion{} 0,1, @expansion{} 0,0 @expansion{} //-----component 2: @expansion{} 0, 0, @expansion{} -1,1 @expansion{} ////// end level 3 ////// @expansion{} 0,1,0, 0,0, @expansion{} 0,0,-1,1,0 printlevel = p; @c end example cup d2t_singular/homolog_lib.doc:83 @end smallexample @c ---end content cup--- @c ------------------- cupproduct ------------- @node cupproduct, depth, cup, homolog_lib @subsubsection cupproduct @cindex cupproduct @c ---content cupproduct--- Procedure from library @code{homolog.lib} (@pxref{homolog_lib}). @table @asis @item @strong{Usage:} cupproduct(M,N,P,p,q[,any]); M,N,P modules, p,q integers @item @strong{Compute:} cup-product Ext^p(M',N') x Ext^q(N',P') ---> Ext^p+q(M',P'), where M':=R^m/M, if M in R^m, R basering (i.e. M':=coker(matrix(M))) @item @strong{Assume:} all Ext's are of finite dimension @item @strong{Return:} - if called with 5 arguments: matrix of the associated linear map Ext^p (tensor) Ext^q --> Ext^p+q, i.e. the columns of present the coordinates of the cup products (b_i & c_j) with respect to a kbase of Ext^p+q (b_i resp. c_j are the choosen bases of Ext^p, resp. Ext^q).@* - if called with 6 arguments: list L, @format L[1] = matrix (see above) L[2] = matrix of kbase of Ext^p(M',N') L[3] = matrix of kbase of Ext^q(N',P') L[4] = matrix of kbase of Ext^p+q(N',P') @end format @item @strong{Note:} printlevel >=1; shows what is going on. @*printlevel >=2; shows the result in another representation.@* For computing the cupproduct of M,N itself, apply proc to syz(M), syz(N)! @end table @strong{Example:} @smallexample @c computed example cupproduct d2t_singular/homolog_lib.doc:145 LIB "homolog.lib"; int p = printlevel; ring rr = 32003,(x,y,z),(dp,C); ideal I = x4+y3+z2; qring o = std(I); module M = [x,y,0,z],[y2,-x3,z,0],[z,0,-y,-x3],[0,z,x,-y2]; print(cupproduct(M,M,M,1,3)); @expansion{} 0,1,0, 0, 0,0,0,0,0,0,0, 0,0,0,0,0,0, @expansion{} 0,0,-1,0, 0,1,0,0,0,0,0, 0,0,0,0,0,0, @expansion{} 0,0,0, -1,0,0,0,0,0,1,0, 0,0,0,0,0,0, @expansion{} 0,0,0, 0, 1,0,0,1,0,0,-1,0,0,1,0,0,0 printlevel = 3; list l = (cupproduct(M,M,M,1,3,"any")); @expansion{} // vdim Ext(M,N) = 4 @expansion{} // kbase of Ext^p(M,N) @expansion{} // - the columns present the kbase elements in Hom(F(p),G(0)) @expansion{} // - F(*),G(*) are free resolutions of M and N @expansion{} 0, 0, 1, 0, @expansion{} 0, y, 0, 0, @expansion{} 1, 0, 0, 0, @expansion{} 0, 0, 0, y, @expansion{} 0, -1,0, 0, @expansion{} 0, 0, x2,0, @expansion{} 0, 0, 0, -x2, @expansion{} 1, 0, 0, 0, @expansion{} 0, 0, 0, -1, @expansion{} -1,0, 0, 0, @expansion{} 0, 1, 0, 0, @expansion{} 0, 0, 1, 0, @expansion{} -1,0, 0, 0, @expansion{} 0, 0, 0, x2y, @expansion{} 0, 0, x2,0, @expansion{} 0, -y,0, 0 @expansion{} // vdim Ext(N,P) = 4 @expansion{} // kbase of Ext(N,P): @expansion{} 0, 0, 1, 0, @expansion{} 0, 0, 0, y, @expansion{} 1, 0, 0, 0, @expansion{} 0, -y,0, 0, @expansion{} 0, -1,0, 0, @expansion{} 1, 0, 0, 0, @expansion{} 0, 0, 0, -x2, @expansion{} 0, 0, -x2,0, @expansion{} 0, 0, 0, -1, @expansion{} 0, 0, 1, 0, @expansion{} 0, 1, 0, 0, @expansion{} 1, 0, 0, 0, @expansion{} -1,0, 0, 0, @expansion{} 0, -y,0, 0, @expansion{} 0, 0, x2, 0, @expansion{} 0, 0, 0, -x2y @expansion{} // kbase of Ext^q(N,P) @expansion{} // - the columns present the kbase elements in Hom(G(q),H(0)) @expansion{} // - G(*),H(*) are free resolutions of N and P @expansion{} 0, 0, 1, 0, @expansion{} 0, 0, 0, y, @expansion{} 1, 0, 0, 0, @expansion{} 0, -y,0, 0, @expansion{} 0, -1,0, 0, @expansion{} 1, 0, 0, 0, @expansion{} 0, 0, 0, -x2, @expansion{} 0, 0, -x2,0, @expansion{} 0, 0, 0, -1, @expansion{} 0, 0, 1, 0, @expansion{} 0, 1, 0, 0, @expansion{} 1, 0, 0, 0, @expansion{} -1,0, 0, 0, @expansion{} 0, -y,0, 0, @expansion{} 0, 0, x2, 0, @expansion{} 0, 0, 0, -x2y @expansion{} // vdim Ext(M,P) = 4 @expansion{} // kbase of Ext^p+q(M,P) @expansion{} // - the columns present the kbase elements in Hom(F(p+q),H(0)) @expansion{} // - F(*),H(*) are free resolutions of M and P @expansion{} 0, 0, 1, 0, @expansion{} 0, 0, 0, y, @expansion{} 1, 0, 0, 0, @expansion{} 0, -y,0, 0, @expansion{} 0, -1,0, 0, @expansion{} 1, 0, 0, 0, @expansion{} 0, 0, 0, -x2, @expansion{} 0, 0, -x2,0, @expansion{} 0, 0, 0, -1, @expansion{} 0, 0, 1, 0, @expansion{} 0, 1, 0, 0, @expansion{} 1, 0, 0, 0, @expansion{} -1,0, 0, 0, @expansion{} 0, -y,0, 0, @expansion{} 0, 0, x2, 0, @expansion{} 0, 0, 0, -x2y @expansion{} // lifting of kbase of Ext^p(M,N) @expansion{} // - the columns present liftings of kbase elements in Hom(F(p+q),G(q)) @expansion{} 1,0, 0, 0, @expansion{} 0,-y,0, 0, @expansion{} 0,0, x2,0, @expansion{} 0,0, 0, x2y, @expansion{} 0,1, 0, 0, @expansion{} 1,0, 0, 0, @expansion{} 0,0, 0, -x2, @expansion{} 0,0, x2,0, @expansion{} 0,0, -1,0, @expansion{} 0,0, 0, y, @expansion{} 1,0, 0, 0, @expansion{} 0,y, 0, 0, @expansion{} 0,0, 0, -1, @expansion{} 0,0, -1,0, @expansion{} 0,-1,0, 0, @expansion{} 1,0, 0, 0 @expansion{} // matrix of cup-products (in Ext^p+q) @expansion{} 0,0, 0, -1, 0, 0, 0, 0, y, 1, 0, 0, 0, 0, y, 0, 0, @expansion{} 0,0, 0, 0, y, 0, 0, y, 0, 0, -y, 0, 0, y, 0, 0, 0, @expansion{} 0,1, 0, 0, 0, 0, y, 0, 0, 0, 0, x2, 0, 0, 0, 0, -x2y, @expansion{} 0,0, y, 0, 0, -y,0, 0, 0, 0, 0, 0, x2y,0, 0, x2y,0, @expansion{} 0,0, 1, 0, 0, -1,0, 0, 0, 0, 0, 0, x2, 0, 0, x2, 0, @expansion{} 0,1, 0, 0, 0, 0, y, 0, 0, 0, 0, x2, 0, 0, 0, 0, -x2y, @expansion{} 0,0, 0, 0, -x2, 0, 0, -x2, 0, 0, x2, 0, 0, -x2, 0, 0, 0, @expansion{} 0,0, 0, x2, 0, 0, 0, 0, -x2y,-x2,0, 0, 0, 0, -x2y,0, 0, @expansion{} 0,0, 0, 0, -1, 0, 0, -1, 0, 0, 1, 0, 0, -1, 0, 0, 0, @expansion{} 0,0, 0, -1, 0, 0, 0, 0, y, 1, 0, 0, 0, 0, y, 0, 0, @expansion{} 0,0, -1,0, 0, 1, 0, 0, 0, 0, 0, 0, -x2,0, 0, -x2,0, @expansion{} 0,1, 0, 0, 0, 0, y, 0, 0, 0, 0, x2, 0, 0, 0, 0, -x2y, @expansion{} 0,-1,0, 0, 0, 0, -y,0, 0, 0, 0, -x2,0, 0, 0, 0, x2y, @expansion{} 0,0, y, 0, 0, -y,0, 0, 0, 0, 0, 0, x2y,0, 0, x2y,0, @expansion{} 0,0, 0, -x2,0, 0, 0, 0, x2y, x2, 0, 0, 0, 0, x2y, 0, 0, @expansion{} 0,0, 0, 0, -x2y,0, 0, -x2y,0, 0, x2y,0, 0, -x2y,0, 0, 0 @expansion{} ////// end level 2 ////// @expansion{} // the associated matrices of the bilinear mapping 'cup' @expansion{} // corresponding to the kbase elements of Ext^p+q(M,P) are shown, @expansion{} // i.e. the rows of the final matrix are written as matrix of @expansion{} // a bilinear form on Ext^p x Ext^q @expansion{} //----component 1: @expansion{} 0,1,0,0, @expansion{} 0,0,0,0, @expansion{} 0,0,0,0, @expansion{} 0,0,0,0 @expansion{} //----component 2: @expansion{} 0,0,-1,0, @expansion{} 0,1,0, 0, @expansion{} 0,0,0, 0, @expansion{} 0,0,0, 0 @expansion{} //----component 3: @expansion{} 0,0,0,-1, @expansion{} 0,0,0,0, @expansion{} 0,1,0,0, @expansion{} 0,0,0,0 @expansion{} //----component 4: @expansion{} 0,0,0, 0, @expansion{} 1,0,0, 1, @expansion{} 0,0,-1,0, @expansion{} 0,1,0, 0 @expansion{} ////// end level 3 ////// show(l[1]);show(l[2]); @expansion{} // matrix, 4x17 @expansion{} 0,1,0, 0, 0,0,0,0,0,0,0, 0,0,0,0,0,0, @expansion{} 0,0,-1,0, 0,1,0,0,0,0,0, 0,0,0,0,0,0, @expansion{} 0,0,0, -1,0,0,0,0,0,1,0, 0,0,0,0,0,0, @expansion{} 0,0,0, 0, 1,0,0,1,0,0,-1,0,0,1,0,0,0 @expansion{} // matrix, 16x4 @expansion{} 0, 0, 1, 0, @expansion{} 0, y, 0, 0, @expansion{} 1, 0, 0, 0, @expansion{} 0, 0, 0, y, @expansion{} 0, -1,0, 0, @expansion{} 0, 0, x2,0, @expansion{} 0, 0, 0, -x2, @expansion{} 1, 0, 0, 0, @expansion{} 0, 0, 0, -1, @expansion{} -1,0, 0, 0, @expansion{} 0, 1, 0, 0, @expansion{} 0, 0, 1, 0, @expansion{} -1,0, 0, 0, @expansion{} 0, 0, 0, x2y, @expansion{} 0, 0, x2,0, @expansion{} 0, -y,0, 0 printlevel = p; @c end example cupproduct d2t_singular/homolog_lib.doc:145 @end smallexample @c ---end content cupproduct--- @c ------------------- depth ------------- @node depth, Ext_R, cupproduct, homolog_lib @subsubsection depth @cindex depth @c ---content depth--- Procedure from library @code{homolog.lib} (@pxref{homolog_lib}). @table @asis @item @strong{Usage:} depth(M,[I]); M module, I ideal @item @strong{Return:} int, @*- if called with 1 argument: the depth of M'=coker(M) w.r.t. the maxideal in the basering (which is then assumed to be local)@* - if called with 2 arguments: the depth of M'=coker(M) w.r.t. the ideal I. @item @strong{Note:} procedure makes use of KoszulHomology. @end table @strong{Example:} @smallexample @c computed example depth d2t_singular/homolog_lib.doc:185 LIB "homolog.lib"; ring R=0,(x,y,z),dp; ideal I=x2,xy,yz; module M=0; depth(M,I); // depth(,Q[x,y,z]) @expansion{} 2 ring r=0,(x,y,z),ds; // local ring matrix M[2][2]=x,xy,1+yz,0; print(M); @expansion{} x, xy, @expansion{} 1+yz,0 depth(M); // depth(maxideal,coker(M)) @expansion{} 2 ideal I=x; depth(M,I); // depth(,coker(M)) @expansion{} 0 I=x+z; depth(M,I); // depth(,coker(M)) @expansion{} 1 @c end example depth d2t_singular/homolog_lib.doc:185 @end smallexample @c ---end content depth--- @c ------------------- Ext_R ------------- @node Ext_R, Ext, depth, homolog_lib @subsubsection Ext_R @cindex Ext_R @c ---content Ext_R--- Procedure from library @code{homolog.lib} (@pxref{homolog_lib}). @table @asis @item @strong{Usage:} Ext_R(v,M[,p]); v int resp. intvec , M module, p int @item @strong{Compute:} A presentation of Ext^k(M',R); for k=v[1],v[2],..., M'=coker(M). Let @smallexample 0 <-- M' <-- F0 <-M-- F1 <-- F2 <-- ... @end smallexample be a free resolution of M'. If @smallexample 0 --> F0* -A1-> F1* -A2-> F2* -A3-> ... @end smallexample is the dual sequence, Fi*=Hom(Fi,R), then Ext^k = ker(Ak+1)/im(Ak) is presented as in the following exact sequences: @smallexample R^p --syz(Ak+1)-> Fk* ---Ak+1----> Fk+1* , R^q ----Ext^k---> R^p --syz(Ak+1)-> Fk*/im(Ak). @end smallexample Hence, Ext^k=modulo(syz(Ak+1),Ak) presents Ext^k(M',R). @item @strong{Return:} - module Ext, a presentation of Ext^k(M',R) if v is of type int@* - a list of Ext^k (k=v[1],v[2],...) if v is of type intvec.@* - In case of a third argument of type int return a list l: @format l[1] = module Ext^k resp. list of Ext^k l[2] = SB of Ext^k resp. list of SB of Ext^k l[3] = matrix resp. list of matrices, each representing a kbase of Ext^k (if finite dimensional) @end format @item @strong{Display:} printlevel >=0: (affine) dimension of Ext^k for each k (default) printlevel >=1: Ak, Ak+1 and kbase of Ext^k in Fk* @item @strong{Note:} In order to compute Ext^k(M,R) use the command Ext_R(k,syz(M)); or the 2 commands: list L=mres(M,2); Ext_R(k,L[2]); @end table @strong{Example:} @smallexample @c computed example Ext_R d2t_singular/homolog_lib.doc:254 LIB "homolog.lib"; int p = printlevel; printlevel = 1; ring r = 0,(x,y,z),dp; ideal i = x2y,y2z,z3x; module E = Ext_R(1,i); //computes Ext^1(r/i,r) @expansion{} // Computing Ext^1: @expansion{} // Let 0<--coker(M)<--F0<--F1<--F2<--... be a resolution of M, @expansion{} // then F1*-->F2* is given by: @expansion{} x2, -yz,0, @expansion{} 0, z3, -xy, @expansion{} xz2,0, -y2 @expansion{} // and F0*-->F1* is given by: @expansion{} y2z, @expansion{} x2y, @expansion{} xz3 @expansion{} @expansion{} // dimension of Ext^1: -1 @expansion{} is_zero(E); @expansion{} 1 qring R = std(x2+yz); intvec v = 0,2; printlevel = 2; //shows what is going on ideal i = x,y,z; //computes Ext^i(r/(x,y,z),r/(x2+yz)), i=0,2 list L = Ext_R(v,i,1); //over the qring R=r/(x2+yz), std and kbase @expansion{} // Computing Ext^0: @expansion{} // Let 0<--coker(M)<--F0<--F1<--F2<--... be a resolution of M, @expansion{} // then F0*-->F1* is given by: @expansion{} z, @expansion{} y, @expansion{} x @expansion{} // and F-1*-->F0* is given by: @expansion{} 0 @expansion{} @expansion{} // dimension of Ext^0: -1 @expansion{} @expansion{} // columns of matrix are kbase of Ext^0 in F0*: @expansion{} 0 @expansion{} @expansion{} // Computing Ext^2: @expansion{} // Let 0<--coker(M)<--F0<--F1<--F2<--... be a resolution of M, @expansion{} // then F2*-->F3* is given by: @expansion{} x,-y,z, 0, @expansion{} z,x, 0, z, @expansion{} 0,0, x, y, @expansion{} 0,0, -z,x @expansion{} // and F1*-->F2* is given by: @expansion{} y,-z,0, @expansion{} x,0, -z, @expansion{} 0,x, -y, @expansion{} 0,z, x @expansion{} @expansion{} // dimension of Ext^2: 0 @expansion{} // vdim of Ext^2: 1 @expansion{} @expansion{} // columns of matrix are kbase of Ext^2 in F2*: @expansion{} x, @expansion{} -z, @expansion{} 0, @expansion{} 0 @expansion{} printlevel = p; @c end example Ext_R d2t_singular/homolog_lib.doc:254 @end smallexample @c ---end content Ext_R--- @c ------------------- Ext ------------- @node Ext, fitting, Ext_R, homolog_lib @subsubsection Ext @cindex Ext @c ---content Ext--- Procedure from library @code{homolog.lib} (@pxref{homolog_lib}). @table @asis @item @strong{Usage:} Ext(v,M,N[,any]); v int resp. intvec, M,N modules @item @strong{Compute:} A presentation of Ext^k(M',N'); for k=v[1],v[2],... where M'=coker(M) and N'=coker(N). Let @smallexample 0 <-- M' <-- F0 <-M-- F1 <-- F2 <--... , 0 <-- N' <-- G0 <--N- G1 @end smallexample be a free resolution of M', resp. a presentation of N'. Consider the commutative diagram @smallexample 0 0 0 |^ |^ |^ --> Hom(Fk-1,N') -Ak-> Hom(Fk,N') -Ak+1-> Hom(Fk+1,N') |^ |^ |^ --> Hom(Fk-1,G0) -Ak-> Hom(Fk,G0) -Ak+1-> Hom(Fk+1,G0) |^ |^ |C |B Hom(Fk,G1) ------> Hom(Fk+1,G1) (Ak,Ak+1 induced by M and B,C induced by N). @end smallexample Let K=modulo(Ak+1,B), J=module(Ak)+module(C) and Ext=modulo(K,J), then we have exact sequences @smallexample R^p --K-> Hom(Fk,G0) --Ak+1-> Hom(Fk+1,G0)/im(B), R^q -Ext-> R^p --K-> Hom(Fk,G0)/(im(Ak)+im(C)). @end smallexample Hence, Ext presents Ext^k(M',N'). @item @strong{Return:} - module Ext, a presentation of Ext^k(M',N') if v is of type int@* - a list of Ext^k (k=v[1],v[2],...) if v is of type intvec.@* - In case of a third argument of any type return a list l: @format l[1] = module Ext/list of Ext^k l[2] = SB of Ext/list of SB of Ext^k l[3] = matrix/list of matrices, each representing a kbase of Ext^k (if finite dimensional) @end format @item @strong{Display:} printlevel >=0: dimension, vdim of Ext^k for each k (default). @* printlevel >=1: matrices Ak, Ak+1 and kbase of Ext^k in Hom(Fk,G0) (if finite dimensional) @item @strong{Note:} In order to compute Ext^k(M,N) use the command Ext(k,syz(M),syz(N)); or: list P=mres(M,2); list Q=mres(N,2); Ext(k,P[2],Q[2]); @end table @strong{Example:} @smallexample @c computed example Ext d2t_singular/homolog_lib.doc:336 LIB "homolog.lib"; int p = printlevel; printlevel = 1; ring r = 0,(x,y),dp; ideal i = x2-y3; ideal j = x2-y5; list E = Ext(0..2,i,j); // Ext^k(r/i,r/j) for k=0,1,2 over r @expansion{} // Computing Ext^0 (help Ext; gives an explanation): @expansion{} // Let 0<--coker(M)<--F0<--F1<--F2<--... be a resolution of coker(M), @expansion{} // and 0<--coker(N)<--G0<--G1 a presentation of coker(N), @expansion{} // then Hom(F0,G0)-->Hom(F1,G0) is given by: @expansion{} y3-x2 @expansion{} // and Hom(F-1,G0) + Hom(F0,G1)-->Hom(F0,G0) is given by: @expansion{} 0,-y5+x2 @expansion{} @expansion{} // dimension of Ext^0: -1 @expansion{} @expansion{} // Computing Ext^1 (help Ext; gives an explanation): @expansion{} // Let 0<--coker(M)<--F0<--F1<--F2<--... be a resolution of coker(M), @expansion{} // and 0<--coker(N)<--G0<--G1 a presentation of coker(N), @expansion{} // then Hom(F1,G0)-->Hom(F2,G0) is given by: @expansion{} 0 @expansion{} // and Hom(F0,G0) + Hom(F1,G1)-->Hom(F1,G0) is given by: @expansion{} y3-x2,-y5+x2 @expansion{} @expansion{} // dimension of Ext^1: 0 @expansion{} // vdim of Ext^1: 10 @expansion{} @expansion{} // Computing Ext^2 (help Ext; gives an explanation): @expansion{} // Let 0<--coker(M)<--F0<--F1<--F2<--... be a resolution of coker(M), @expansion{} // and 0<--coker(N)<--G0<--G1 a presentation of coker(N), @expansion{} // then Hom(F2,G0)-->Hom(F3,G0) is given by: @expansion{} 1 @expansion{} // and Hom(F1,G0) + Hom(F2,G1)-->Hom(F2,G0) is given by: @expansion{} 0,-y5+x2 @expansion{} @expansion{} // dimension of Ext^2: -1 @expansion{} qring R = std(i); ideal j = fetch(r,j); module M = [-x,y],[-y2,x]; printlevel = 2; module E1 = Ext(1,M,j); // Ext^1(R^2/M,R/j) over R=r/i @expansion{} // Computing Ext^1 (help Ext; gives an explanation): @expansion{} // Let 0<--coker(M)<--F0<--F1<--F2<--... be a resolution of coker(M), @expansion{} // and 0<--coker(N)<--G0<--G1 a presentation of coker(N), @expansion{} // then Hom(F1,G0)-->Hom(F2,G0) is given by: @expansion{} x, -y, @expansion{} y2,-x @expansion{} // and Hom(F0,G0) + Hom(F1,G1)-->Hom(F1,G0) is given by: @expansion{} x, -y,-y5+x2,0, @expansion{} y2,-x,0, -y5+x2 @expansion{} @expansion{} // dimension of Ext^1: -1 @expansion{} list l = Ext(4,M,M,1); // Ext^4(R^2/M,R^2/M) over R=r/i @expansion{} // Computing Ext^4 (help Ext; gives an explanation): @expansion{} // Let 0<--coker(M)<--F0<--F1<--F2<--... be a resolution of coker(M), @expansion{} // and 0<--coker(N)<--G0<--G1 a presentation of coker(N), @expansion{} // then Hom(F4,G0)-->Hom(F5,G0) is given by: @expansion{} x, -y,0, 0, @expansion{} y2,-x,0, 0, @expansion{} 0, 0, x, -y, @expansion{} 0, 0, y2,-x @expansion{} // and Hom(F3,G0) + Hom(F4,G1)-->Hom(F4,G0) is given by: @expansion{} x, -y,0, 0, -x,0, -y2,0, @expansion{} y2,-x,0, 0, 0, -x,0, -y2, @expansion{} 0, 0, x, -y,y, 0, x, 0, @expansion{} 0, 0, y2,-x,0, y, 0, x @expansion{} @expansion{} // dimension of Ext^4: 0 @expansion{} // vdim of Ext^4: 2 @expansion{} @expansion{} // columns of matrix are kbase of Ext^4 in Hom(F4,G0) @expansion{} 1,0, @expansion{} 0,y, @expansion{} 0,1, @expansion{} 1,0 @expansion{} @expansion{} // element 1 of kbase of Ext^4 in Hom(F4,G0) @expansion{} // as matrix: F4-->G0 @expansion{} 1,0, @expansion{} 0,1 @expansion{} // element 2 of kbase of Ext^4 in Hom(F4,G0) @expansion{} // as matrix: F4-->G0 @expansion{} 0,y, @expansion{} 1,0 @expansion{} printlevel = p; @c end example Ext d2t_singular/homolog_lib.doc:336 @end smallexample @c ---end content Ext--- @c ------------------- fitting ------------- @node fitting, flatteningStrat, Ext, homolog_lib @subsubsection fitting @cindex fitting @c ---content fitting--- Procedure from library @code{homolog.lib} (@pxref{homolog_lib}). @table @asis @item @strong{Usage:} fitting (M,n); M module, n int @item @strong{Return:} ideal, (standard basis of) n-th Fitting ideal of M'=coker(M). @end table @strong{Example:} @smallexample @c computed example fitting d2t_singular/homolog_lib.doc:372 LIB "homolog.lib"; ring R=0,x(0..4),dp; matrix M[2][4]=x(0),x(1),x(2),x(3),x(1),x(2),x(3),x(4); print(M); @expansion{} x(0),x(1),x(2),x(3), @expansion{} x(1),x(2),x(3),x(4) fitting(M,-1); @expansion{} _[1]=0 fitting(M,0); @expansion{} _[1]=x(3)^2-x(2)*x(4) @expansion{} _[2]=x(2)*x(3)-x(1)*x(4) @expansion{} _[3]=x(1)*x(3)-x(0)*x(4) @expansion{} _[4]=x(2)^2-x(0)*x(4) @expansion{} _[5]=x(1)*x(2)-x(0)*x(3) @expansion{} _[6]=x(1)^2-x(0)*x(2) fitting(M,1); @expansion{} _[1]=x(4) @expansion{} _[2]=x(3) @expansion{} _[3]=x(2) @expansion{} _[4]=x(1) @expansion{} _[5]=x(0) fitting(M,2); @expansion{} _[1]=1 @c end example fitting d2t_singular/homolog_lib.doc:372 @end smallexample @c ---end content fitting--- @c ------------------- flatteningStrat ------------- @node flatteningStrat, Hom, fitting, homolog_lib @subsubsection flatteningStrat @cindex flatteningStrat @c ---content flatteningStrat--- Procedure from library @code{homolog.lib} (@pxref{homolog_lib}). @table @asis @item @strong{Usage:} flatteningStrat(M); M module @item @strong{Return:} list of ideals. @*The list entries L[1],...,L[r] describe the flattening stratification of M'=coker(M): setting L[0]=0, L[r+1]=1, the flattening stratification is given by the open sets Spec(A/V(L[i-1])) \ V(L[i]), i=1,...,r+1 (A = basering). @item @strong{Note:} for more information see the book 'A Singular Introduction to Commutative Algebra' (by Greuel/Pfister, Springer 2002). @end table @strong{Example:} @smallexample @c computed example flatteningStrat d2t_singular/homolog_lib.doc:410 LIB "homolog.lib"; ring A = 0,x(0..4),dp; // presentation matrix: matrix M[2][4] = x(0),x(1),x(2),x(3),x(1),x(2),x(3),x(4); list L = flatteningStrat(M); L; @expansion{} [1]: @expansion{} _[1]=x(3)^2-x(2)*x(4) @expansion{} _[2]=x(2)*x(3)-x(1)*x(4) @expansion{} _[3]=x(1)*x(3)-x(0)*x(4) @expansion{} _[4]=x(2)^2-x(0)*x(4) @expansion{} _[5]=x(1)*x(2)-x(0)*x(3) @expansion{} _[6]=x(1)^2-x(0)*x(2) @expansion{} [2]: @expansion{} _[1]=x(4) @expansion{} _[2]=x(3) @expansion{} _[3]=x(2) @expansion{} _[4]=x(1) @expansion{} _[5]=x(0) @c end example flatteningStrat d2t_singular/homolog_lib.doc:410 @end smallexample @c ---end content flatteningStrat--- @c ------------------- Hom ------------- @node Hom, homology, flatteningStrat, homolog_lib @subsubsection Hom @cindex Hom @c ---content Hom--- Procedure from library @code{homolog.lib} (@pxref{homolog_lib}). @table @asis @item @strong{Usage:} Hom(M,N,[any]); M,N=modules @item @strong{Compute:} A presentation of Hom(M',N'), M'=coker(M), N'=coker(N) as follows: let @smallexample F1 --M-> F0 -->M' --> 0, G1 --N-> G0 --> N' --> 0 @end smallexample be presentations of M' and N'. Consider @smallexample 0 0 |^ |^ 0 --> Hom(M',N') ----> Hom(F0,N') ----> Hom(F1,N') |^ |^ (A: induced by M) Hom(F0,G0) --A-> Hom(F1,G0) |^ |^ (B,C:induced by N) |C |B Hom(F0,G1) ----> Hom(F1,G1) @end smallexample Let D=modulo(A,B) and Hom=modulo(D,C), then we have exact sequences @smallexample R^p --D-> Hom(F0,G0) --A-> Hom(F1,G0)/im(B), R^q -Hom-> R^p --D-> Hom(F0,G0)/im(C) --A-> Hom(F1,G0)/im(B). @end smallexample Hence Hom presents Hom(M',N') @item @strong{Return:} module Hom, a presentation of Hom(M',N'), resp., in case of 3 arguments, a list l (of size <=3): @format - l[1] = Hom - l[2] = SB of Hom - l[3] = kbase of coker(Hom) (if finite dimensional, not 0), represented by elements in Hom(F0,G0) via mapping D @end format @item @strong{Display:} printlevel >=0: (affine) dimension of Hom (default) @* printlevel >=1: D and C and kbase of coker(Hom) in Hom(F0,G0) @* printlevel >=2: elements of kbase of coker(Hom) as matrix :F0-->G0 @item @strong{Note:} DISPLAY is as described only for a direct call of 'Hom'. Calling 'Hom' from another proc has the same effect as decreasing printlevel by 1. @end table @strong{Example:} @smallexample @c computed example Hom d2t_singular/homolog_lib.doc:480 LIB "homolog.lib"; int p = printlevel; printlevel= 1; //in 'example proc' printlevel has to be increased by 1 ring r = 0,(x,y),dp; ideal i = x2-y3,xy; qring q = std(i); ideal i = fetch(r,i); module M = [-x,y],[-y2,x],[x3]; module H = Hom(M,i); @expansion{} // dimension of Hom: 0 @expansion{} // vdim of Hom: 5 @expansion{} @expansion{} // given F1 --M-> F0 -->M'--> 0 and G1 --N-> G0 -->N'--> 0, @expansion{} // show D = ker( Hom(F0,G0) --> Hom(F1,G0)/im(Hom(F1,G1)->Hom(F1,G0)) ) @expansion{} y,x, 0, @expansion{} x,y2,x2 @expansion{} // show C = im ( Hom(F0,G1) --> Hom(F0,G0) ) @expansion{} -y3+x2,0, xy,0, @expansion{} 0, -y3+x2,0, xy @expansion{} print(H); @expansion{} 0, x, 0,y2,0, @expansion{} y, 0, 0,-x,x2, @expansion{} -1,-1,x,0, 0 printlevel= 2; list L = Hom(M,i,1);""; @expansion{} // dimension of Hom: 0 @expansion{} // vdim of Hom: 5 @expansion{} @expansion{} // given F1 --M-> F0 -->M'--> 0 and G1 --N-> G0 -->N'--> 0, @expansion{} // show D = ker( Hom(F0,G0) --> Hom(F1,G0)/im(Hom(F1,G1)->Hom(F1,G0)) ) @expansion{} y,x, 0, @expansion{} x,y2,x2 @expansion{} // show C = im ( Hom(F0,G1) --> Hom(F0,G0) ) @expansion{} -y3+x2,0, xy,0, @expansion{} 0, -y3+x2,0, xy @expansion{} @expansion{} // element 1 of kbase of Hom in Hom(F0,G0) as matrix: F0-->G0: @expansion{} y2,xy @expansion{} // element 2 of kbase of Hom in Hom(F0,G0) as matrix: F0-->G0: @expansion{} y,x @expansion{} // element 3 of kbase of Hom in Hom(F0,G0) as matrix: F0-->G0: @expansion{} x2,xy2 @expansion{} // element 4 of kbase of Hom in Hom(F0,G0) as matrix: F0-->G0: @expansion{} x,y2 @expansion{} // element 5 of kbase of Hom in Hom(F0,G0) as matrix: F0-->G0: @expansion{} 0,x2 @expansion{} printlevel=1; ring s = 3,(x,y,z),(c,dp); ideal i = jacob(ideal(x2+y5+z4)); qring rq=std(i); matrix M[2][2]=xy,x3,5y,4z,x2; matrix N[3][2]=x2,x,y3,3xz,x2z,z; print(M); @expansion{} xy,x3, @expansion{} -y,z print(N); @expansion{} x2, x, @expansion{} y3, 0, @expansion{} x2z,z list l=Hom(M,N,1); @expansion{} // dimension of Hom: 0 @expansion{} // vdim of Hom: 16 @expansion{} @expansion{} // given F1 --M-> F0 -->M'--> 0 and G1 --N-> G0 -->N'--> 0, @expansion{} // show D = ker( Hom(F0,G0) --> Hom(F1,G0)/im(Hom(F1,G1)->Hom(F1,G0)) ) @expansion{} 0,0, 0,0, 0, 0,0, 1, @expansion{} 0,0, 0,0, 0, 0,y3z2,0, @expansion{} 0,0, 0,0, 0, 1,0, 0, @expansion{} 0,0, 0,y3,y2z2,0,0, 0, @expansion{} 0,0, 1,0, 0, 0,0, 0, @expansion{} z,y3,0,0, 0, 0,0, 0 @expansion{} // show C = im ( Hom(F0,G1) --> Hom(F0,G0) ) @expansion{} x2, 0, x,0, @expansion{} 0, x2, 0,x, @expansion{} y3, 0, 0,0, @expansion{} 0, y3, 0,0, @expansion{} x2z,0, z,0, @expansion{} 0, x2z,0,z @expansion{} @expansion{} // columns of matrix are kbase of Hom in Hom(F0,G0) @expansion{} 0, 0, 0, 0,0,0, 0, 0, 0, 0, 0, 0,0, 0,0,0, @expansion{} 0, 0, 0, 0,0,0, 0, 0, 0, 0, 0, 0,0, 0,0,y3z2, @expansion{} 0, 0, 0, 0,0,0, y2z2,yz2,z2,y2z,yz,z,y2,y,1,0, @expansion{} 0, 0, 0, 0,0,y2z2,0, 0, 0, 0, 0, 0,0, 0,0,0, @expansion{} 0, y3,y2,y,1,0, 0, 0, 0, 0, 0, 0,0, 0,0,0, @expansion{} y3,0, 0, 0,0,0, 0, 0, 0, 0, 0, 0,0, 0,0,0 printlevel = p; @c end example Hom d2t_singular/homolog_lib.doc:480 @end smallexample @c ---end content Hom--- @c ------------------- homology ------------- @node homology, isCM, Hom, homolog_lib @subsubsection homology @cindex homology @c ---content homology--- Procedure from library @code{homolog.lib} (@pxref{homolog_lib}). @table @asis @item @strong{Usage:} homology(A,B,M,N); @item @strong{Compute:} Let M and N be submodules of R^m and R^n presenting M'=R^m/M, N'=R^n/N (R=basering) and let A,B matrices inducing maps @smallexample R^k --A--> R^m --B--> R^n. @end smallexample Compute a presentation of the module @smallexample ker(B)/im(A) := ker(M'/im(A) --B--> N'/im(BM)+im(BA)). @end smallexample If B induces a map M'-->N' (i.e BM=0) and if im(A) is contained in ker(B) (that is, BA=0) then ker(B)/im(A) is the homology of the complex @smallexample R^k--A-->M'--B-->N'. @end smallexample @item @strong{Return:} module H, a presentation of ker(B)/im(A). @item @strong{Note:} homology returns a free module of rank m if ker(B)=im(A). @end table @strong{Example:} @smallexample @c computed example homology d2t_singular/homolog_lib.doc:544 LIB "homolog.lib"; ring r; ideal id=maxideal(4); qring qr=std(id); module N=maxideal(3)*freemodule(2); module M=maxideal(2)*freemodule(2); module B=[2x,0],[x,y],[z2,y]; module A=M; module H=homology(A,B,M,N); H=std(H); // dimension of homology: dim(H); @expansion{} 0 // vector space dimension: vdim(H); @expansion{} 19 ring s=0,x,ds; qring qs=std(x4); module A=[x]; module B=A; module M=[x3]; module N=M; homology(A,B,M,N); @expansion{} _[1]=gen(1) @c end example homology d2t_singular/homolog_lib.doc:544 @end smallexample @c ---end content homology--- @c ------------------- isCM ------------- @node isCM, isFlat, homology, homolog_lib @subsubsection isCM @cindex isCM @c ---content isCM--- Procedure from library @code{homolog.lib} (@pxref{homolog_lib}). @table @asis @item @strong{Usage:} isCM(M); M module @item @strong{Return:} 1 if M'=coker(M) is Cohen-Macaulay;@* 0 if this is not the case. @item @strong{Assume:} basering is local. @end table @strong{Example:} @smallexample @c computed example isCM d2t_singular/homolog_lib.doc:591 LIB "homolog.lib"; ring R=0,(x,y,z),ds; // local ring R = Q[x,y,z]_ module M=xz,yz,z2; isCM(M); // test if R/ is Cohen-Macaulay @expansion{} 0 M=x2+y2,z7; // test if R/ is Cohen-Macaulay isCM(M); @expansion{} 1 @c end example isCM d2t_singular/homolog_lib.doc:591 @end smallexample @c ---end content isCM--- @c ------------------- isFlat ------------- @node isFlat, isLocallyFree, isCM, homolog_lib @subsubsection isFlat @cindex isFlat @c ---content isFlat--- Procedure from library @code{homolog.lib} (@pxref{homolog_lib}). @table @asis @item @strong{Usage:} isFlat(M); M module @item @strong{Return:} 1 if M'=coker(M) is flat;@* 0 if this is not the case. @end table @strong{Example:} @smallexample @c computed example isFlat d2t_singular/homolog_lib.doc:620 LIB "homolog.lib"; ring A = 0,(x,y),dp; matrix M[3][3] = x-1,y,x,x,x+1,y,x2,xy+x+1,x2+y; print(M); @expansion{} x-1,y, x, @expansion{} x, x+1, y, @expansion{} x2, xy+x+1,x2+y isFlat(M); // coker(M) is not flat over A=Q[x,y] @expansion{} 0 qring B = std(x2+x-y); // the ring B=Q[x,y]/ matrix M = fetch(A,M); isFlat(M); // coker(M) is flat over B @expansion{} 1 setring A; qring C = std(x2+x+y); // the ring C=Q[x,y]/ matrix M = fetch(A,M); isFlat(M); // coker(M) is not flat over C @expansion{} 0 @c end example isFlat d2t_singular/homolog_lib.doc:620 @end smallexample @c ---end content isFlat--- @c ------------------- isLocallyFree ------------- @node isLocallyFree, isReg, isFlat, homolog_lib @subsubsection isLocallyFree @cindex isLocallyFree @c ---content isLocallyFree--- Procedure from library @code{homolog.lib} (@pxref{homolog_lib}). @table @asis @item @strong{Usage:} isLocallyFree(M,r); M module, r int @item @strong{Return:} 1 if M'=coker(M) is locally free of constant rank r;@* 0 if this is not the case. @end table @strong{Example:} @smallexample @c computed example isLocallyFree d2t_singular/homolog_lib.doc:655 LIB "homolog.lib"; ring R=0,(x,y,z),dp; matrix M[2][3]; // the presentation matrix M=x-1,y-1,z,y-1,x-2,x; ideal I=fitting(M,0); // 0-th Fitting ideal of coker(M) qring Q=I; matrix M=fetch(R,M); isLocallyFree(M,1); // as R/I-module, coker(M) is locally free of rk 1 @expansion{} 1 isLocallyFree(M,0); @expansion{} 0 @c end example isLocallyFree d2t_singular/homolog_lib.doc:655 @end smallexample @c ---end content isLocallyFree--- @c ------------------- isReg ------------- @node isReg, kernel, isLocallyFree, homolog_lib @subsubsection isReg @cindex isReg @c ---content isReg--- Procedure from library @code{homolog.lib} (@pxref{homolog_lib}). @table @asis @item @strong{Usage:} isReg(I,M); I ideal, M module @item @strong{Return:} 1 if given (ordered) list of generators for I is coker(M)-sequence;@* 0 if this is not the case. @end table @strong{Example:} @smallexample @c computed example isReg d2t_singular/homolog_lib.doc:687 LIB "homolog.lib"; ring R = 0,(x,y,z),dp; ideal I = x*(y-1),y,z*(y-1); isReg(I,0); // given list of generators is Q[x,y,z]-sequence @expansion{} 1 I = x*(y-1),z*(y-1),y; // change sorting of generators isReg(I,0); @expansion{} 0 ring r = 0,(x,y,z),ds; // local ring ideal I=fetch(R,I); isReg(I,0); // result independent of sorting of generators @expansion{} 1 @c end example isReg d2t_singular/homolog_lib.doc:687 @end smallexample @c ---end content isReg--- @c ------------------- kernel ------------- @node kernel, kohom, isReg, homolog_lib @subsubsection kernel @cindex kernel @c ---content kernel--- Procedure from library @code{homolog.lib} (@pxref{homolog_lib}). @table @asis @item @strong{Usage:} kernel(A,M,N); @item @strong{Compute:} Let M and N be submodules of R^m and R^n, presenting M'=R^m/M, N'=R^n/N (R=basering), and let A:R^m-->R^n be a matrix inducing a map A':M'-->N'. Then kernel(A,M,N); computes a presentation K of ker(A') as in the commutative diagram: @smallexample ker(A') ---> M' --A'--> N' |^ |^ |^ | | | R^r ---> R^m --A--> R^n |^ |^ |^ |K |M |N | | | R^s ---> R^p -----> R^q @end smallexample @item @strong{Return:} module K, a presentation of ker(A':coker(M)->coker(N)). @end table @strong{Example:} @smallexample @c computed example kernel d2t_singular/homolog_lib.doc:734 LIB "homolog.lib"; ring r; module N=[2x,x],[0,y]; module M=maxideal(1)*freemodule(2); matrix A[2][2]=2x,0,x,y,z2,y; module K=kernel(A,M,N); // dimension of kernel: dim(std(K)); @expansion{} 0 // vector space dimension of kernel: vdim(std(K)); @expansion{} 2 print(K); @expansion{} z,0,y,0,x,0, @expansion{} 0,z,0,y,0,x @c end example kernel d2t_singular/homolog_lib.doc:734 @end smallexample @c ---end content kernel--- @c ------------------- kohom ------------- @node kohom, kontrahom, kernel, homolog_lib @subsubsection kohom @cindex kohom @c ---content kohom--- Procedure from library @code{homolog.lib} (@pxref{homolog_lib}). @table @asis @item @strong{Usage:} kohom(A,k); A=matrix, k=integer @item @strong{Return:} matrix Hom(R^k,A), i.e. let A be a matrix defining a map F1-->F2 of free R-modules, then the matrix of Hom(R^k,F1)-->Hom(R^k,F2) is computed (R=basering). @end table @strong{Example:} @smallexample @c computed example kohom d2t_singular/homolog_lib.doc:769 LIB "homolog.lib"; ring r; matrix n[2][3]=x,y,5,z,77,33; print(kohom(n,3)); @expansion{} x,0,0,y, 0, 0, 5, 0, 0, @expansion{} 0,x,0,0, y, 0, 0, 5, 0, @expansion{} 0,0,x,0, 0, y, 0, 0, 5, @expansion{} z,0,0,77,0, 0, 33,0, 0, @expansion{} 0,z,0,0, 77,0, 0, 33,0, @expansion{} 0,0,z,0, 0, 77,0, 0, 33 @c end example kohom d2t_singular/homolog_lib.doc:769 @end smallexample @c ---end content kohom--- @c ------------------- kontrahom ------------- @node kontrahom, KoszulHomology, kohom, homolog_lib @subsubsection kontrahom @cindex kontrahom @c ---content kontrahom--- Procedure from library @code{homolog.lib} (@pxref{homolog_lib}). @table @asis @item @strong{Usage:} kontrahom(A,k); A=matrix, k=integer @item @strong{Return:} matrix Hom(A,R^k), i.e. let A be a matrix defining a map F1-->F2 of free R-modules, then the matrix of Hom(F2,R^k)-->Hom(F1,R^k) is computed (R=basering). @end table @strong{Example:} @smallexample @c computed example kontrahom d2t_singular/homolog_lib.doc:797 LIB "homolog.lib"; ring r; matrix n[2][3]=x,y,5,z,77,33; print(kontrahom(n,3)); @expansion{} x,z, 0,0, 0,0, @expansion{} y,77,0,0, 0,0, @expansion{} 5,33,0,0, 0,0, @expansion{} 0,0, x,z, 0,0, @expansion{} 0,0, y,77,0,0, @expansion{} 0,0, 5,33,0,0, @expansion{} 0,0, 0,0, x,z, @expansion{} 0,0, 0,0, y,77, @expansion{} 0,0, 0,0, 5,33 @c end example kontrahom d2t_singular/homolog_lib.doc:797 @end smallexample @c ---end content kontrahom--- @c ------------------- KoszulHomology ------------- @node KoszulHomology, tensorMod, kontrahom, homolog_lib @subsubsection KoszulHomology @cindex KoszulHomology @c ---content KoszulHomology--- Procedure from library @code{homolog.lib} (@pxref{homolog_lib}). @table @asis @item @strong{Compute:} A presentation of the p-th Koszul homology module H_p(f_1,...,f_k;M'), where M'=coker(M) and f_1,...,f_k are the given (ordered list of generators of the) ideal I. The computed presentation is minimized via prune. In particular, if H_p(f_1,...,f_k;M')=0 then the return value is 0. @item @strong{Return:} module H, s.th. coker(H) = H_p(f_1,...,f_k;M'). @item @strong{Note:} size of input ideal has to be <= 20. @end table @strong{Example:} @smallexample @c computed example KoszulHomology d2t_singular/homolog_lib.doc:830 LIB "homolog.lib"; ring R=0,x(1..3),dp; ideal x=maxideal(1); module M=0; KoszulHomology(x,M,0); // H_0(x,R), x=(x_1,x_2,x_3) @expansion{} _[1]=x(3)*gen(1) @expansion{} _[2]=x(2)*gen(1) @expansion{} _[3]=x(1)*gen(1) KoszulHomology(x,M,1); // H_1(x,R), x=(x_1,x_2,x_3) @expansion{} _[1]=0 qring S=std(x(1)*x(2)); module M=0; ideal x=maxideal(1); KoszulHomology(x,M,1); @expansion{} _[1]=-x(3)*gen(1) @expansion{} _[2]=-x(2)*gen(1) @expansion{} _[3]=-x(1)*gen(1) KoszulHomology(x,M,2); @expansion{} _[1]=0 @c end example KoszulHomology d2t_singular/homolog_lib.doc:830 @end smallexample @c ---end content KoszulHomology--- @c ------------------- tensorMod ------------- @node tensorMod, Tor, KoszulHomology, homolog_lib @subsubsection tensorMod @cindex tensorMod @c ---content tensorMod--- Procedure from library @code{homolog.lib} (@pxref{homolog_lib}). @table @asis @item @strong{Usage:} tensorMod(M,N); M,N modules @item @strong{Compute:} presentation matrix A of the tensor product T of the modules M'=coker(M), N'=coker(N): if matrix(M) defines a map M: R^r-->R^s and matrix(N) defines a map N: R^p-->R^q, then A defines a presentation @smallexample R^(sp+rq) --A-> R^(sq) --> T --> 0 . @end smallexample @item @strong{Return:} matrix A satisfying coker(A) = tensorprod(coker(M),coker(N)) . @end table @strong{Example:} @smallexample @c computed example tensorMod d2t_singular/homolog_lib.doc:871 LIB "homolog.lib"; ring A=0,(x,y,z),dp; matrix M[3][3]=1,2,3,4,5,6,7,8,9; matrix N[2][2]=x,y,0,z; print(M); @expansion{} 1,2,3, @expansion{} 4,5,6, @expansion{} 7,8,9 print(N); @expansion{} x,y, @expansion{} 0,z print(tensorMod(M,N)); @expansion{} x,y,0,0,0,0,1,0,2,0,3,0, @expansion{} 0,z,0,0,0,0,0,1,0,2,0,3, @expansion{} 0,0,x,y,0,0,4,0,5,0,6,0, @expansion{} 0,0,0,z,0,0,0,4,0,5,0,6, @expansion{} 0,0,0,0,x,y,7,0,8,0,9,0, @expansion{} 0,0,0,0,0,z,0,7,0,8,0,9 @c end example tensorMod d2t_singular/homolog_lib.doc:871 @end smallexample @c ---end content tensorMod--- @c ------------------- Tor ------------- @node Tor,, tensorMod, homolog_lib @subsubsection Tor @cindex Tor @c ---content Tor--- Procedure from library @code{homolog.lib} (@pxref{homolog_lib}). @table @asis @item @strong{Compute:} a presentation of Tor_k(M',N'), for k=v[1],v[2],... , where M'=coker(M) and N'=coker(N): let @smallexample 0 <-- M' <-- G0 <-M-- G1 0 <-- N' <-- F0 <--N- F1 <-- F2 <--... @end smallexample be a presentation of M', resp. a free resolution of N', and consider the commutative diagram @smallexample 0 0 0 |^ |^ |^ Tensor(M',Fk+1) -Ak+1-> Tensor(M',Fk) -Ak-> Tensor(M',Fk-1) |^ |^ |^ Tensor(G0,Fk+1) -Ak+1-> Tensor(G0,Fk) -Ak-> Tensor(G0,Fk-1) |^ |^ |C |B Tensor(G1,Fk) ----> Tensor(G1,Fk-1) (Ak,Ak+1 induced by N and B,C induced by M). @end smallexample Let K=modulo(Ak,B), J=module(C)+module(Ak+1) and Tor=modulo(K,J), then we have exact sequences @smallexample R^p --K-> Tensor(G0,Fk) --Ak-> Tensor(G0,Fk-1)/im(B), R^q -Tor-> R^p --K-> Tensor(G0,Fk)/(im(C)+im(Ak+1)). @end smallexample Hence, Tor presents Tor_k(M',N'). @item @strong{Return:} - if v is of type int: module Tor, a presentation of Tor_k(M',N');@* - if v is of type intvec: a list of Tor_k(M',N') (k=v[1],v[2],...);@* - in case of a third argument of any type: list l with @format l[1] = module Tor/list of Tor_k(M',N'), l[2] = SB of Tor/list of SB of Tor_k(M',N'), l[3] = matrix/list of matrices, each representing a kbase of Tor_k(M',N') (if finite dimensional), or 0. @end format @item @strong{Display:} printlevel >=0: (affine) dimension of Tor_k for each k (default). @* printlevel >=1: matrices Ak, Ak+1 and kbase of Tor_k in Tensor(G0,Fk) (if finite dimensional). @item @strong{Note:} In order to compute Tor_k(M,N) use the command Tor(k,syz(M),syz(N)); or: list P=mres(M,2); list Q=mres(N,2); Tor(k,P[2],Q[2]); @end table @strong{Example:} @smallexample @c computed example Tor d2t_singular/homolog_lib.doc:944 LIB "homolog.lib"; int p = printlevel; printlevel = 1; ring r = 0,(x,y),dp; ideal i = x2,y; ideal j = x; list E = Tor(0..2,i,j); // Tor_k(r/i,r/j) for k=0,1,2 over r @expansion{} // dimension of Tor_0: 0 @expansion{} // vdim of Tor_0: 1 @expansion{} @expansion{} // Computing Tor_1 (help Tor; gives an explanation): @expansion{} // Let 0 <- coker(M) <- G0 <-M- G1 be the present. of coker(M), @expansion{} // and 0 <- coker(N) <- F0 <-N- F1 <- F2 <- ... a resolution of @expansion{} // coker(N), then Tensor(G0,F1)-->Tensor(G0,F0) is given by: @expansion{} x @expansion{} // and Tensor(G0,F2) + Tensor(G1,F1)-->Tensor(G0,F1) is given by: @expansion{} 0,x2,y @expansion{} @expansion{} // dimension of Tor_1: 0 @expansion{} // vdim of Tor_1: 1 @expansion{} @expansion{} // Computing Tor_2 (help Tor; gives an explanation): @expansion{} // Let 0 <- coker(M) <- G0 <-M- G1 be the present. of coker(M), @expansion{} // and 0 <- coker(N) <- F0 <-N- F1 <- F2 <- ... a resolution of @expansion{} // coker(N), then Tensor(G0,F2)-->Tensor(G0,F1) is given by: @expansion{} 0 @expansion{} // and Tensor(G0,F3) + Tensor(G1,F2)-->Tensor(G0,F2) is given by: @expansion{} 1,x2,y @expansion{} @expansion{} // dimension of Tor_2: -1 @expansion{} qring R = std(i); ideal j = fetch(r,j); module M = [x,0],[0,x]; printlevel = 2; module E1 = Tor(1,M,j); // Tor_1(R^2/M,R/j) over R=r/i @expansion{} // Computing Tor_1 (help Tor; gives an explanation): @expansion{} // Let 0 <- coker(M) <- G0 <-M- G1 be the present. of coker(M), @expansion{} // and 0 <- coker(N) <- F0 <-N- F1 <- F2 <- ... a resolution of @expansion{} // coker(N), then Tensor(G0,F1)-->Tensor(G0,F0) is given by: @expansion{} x,0, @expansion{} 0,x @expansion{} // and Tensor(G0,F2) + Tensor(G1,F1)-->Tensor(G0,F1) is given by: @expansion{} x,0,x,0, @expansion{} 0,x,0,x @expansion{} @expansion{} // dimension of Tor_1: 0 @expansion{} // vdim of Tor_1: 2 @expansion{} list l = Tor(3,M,M,1); // Tor_3(R^2/M,R^2/M) over R=r/i @expansion{} // Computing Tor_3 (help Tor; gives an explanation): @expansion{} // Let 0 <- coker(M) <- G0 <-M- G1 be the present. of coker(M), @expansion{} // and 0 <- coker(N) <- F0 <-N- F1 <- F2 <- ... a resolution of @expansion{} // coker(N), then Tensor(G0,F3)-->Tensor(G0,F2) is given by: @expansion{} x,0,0,0, @expansion{} 0,x,0,0, @expansion{} 0,0,x,0, @expansion{} 0,0,0,x @expansion{} // and Tensor(G0,F4) + Tensor(G1,F3)-->Tensor(G0,F3) is given by: @expansion{} x,0,0,0,x,0,0,0, @expansion{} 0,x,0,0,0,x,0,0, @expansion{} 0,0,x,0,0,0,x,0, @expansion{} 0,0,0,x,0,0,0,x @expansion{} @expansion{} // dimension of Tor_3: 0 @expansion{} // vdim of Tor_3: 4 @expansion{} @expansion{} // columns of matrix are kbase of Tor_3 in Tensor(G0,F3) @expansion{} 1,0,0,0, @expansion{} 0,1,0,0, @expansion{} 0,0,1,0, @expansion{} 0,0,0,1 @expansion{} printlevel = p; @c end example Tor d2t_singular/homolog_lib.doc:944 @end smallexample @c ---end content Tor--- texi2html-1.82/test/singular_manual/d2t_singular/intprog_lib.tex0000644000175000017500000001167511264347126027037 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/intprog_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/intprog_lib.doc INSTEAD @c library version: (1.5,2001/02/06) @c library file: ../Singular/LIB/intprog.lib @cindex intprog.lib @cindex intprog_lib @table @asis @item @strong{Library:} intprog.lib @item @strong{Purpose:} Integer Programming with Groebner Basis Methods @item @strong{Author:} Christine Theis, email: ctheis@@math.uni-sb.de @end table @strong{Procedures:} @menu * solve_IP:: procedures for solving Integer Programming problems @end menu @c ---end content LibInfo--- @c ------------------- solve_IP ------------- @node solve_IP,,, intprog_lib @subsubsection solve_IP @cindex solve_IP @c ---content solve_IP--- Procedure from library @code{intprog.lib} (@pxref{intprog_lib}). @table @asis @item @strong{Usage:} solve_IP(A,bx,c,alg); A intmat, bx intvec, c intvec, alg string. solve_IP(A,bx,c,alg); A intmat, bx list of intvec, c intvec, alg string. @*solve_IP(A,bx,c,alg,prsv); A intmat, bx intvec, c intvec, alg string, prsv intvec. @*solve_IP(A,bx,c,alg,prsv); A intmat, bx list of intvec, c intvec, alg string, prsv intvec. @item @strong{Return:} same type as bx: solution of the associated integer programming problem(s) as explained in @ref{Toric ideals and integer programming}. @item @strong{Note:} This procedure returns the solution(s) of the given IP-problem(s) or the message `not solvable'. @*One may call the procedure with several different algorithms: @*- the algorithm of Conti/Traverso (ct), @*- the positive variant of the algorithm of Conti/Traverso (pct), @*- the algorithm of Conti/Traverso using elimination (ect), @*- the algorithm of Pottier (pt), @*- an algorithm of Bigatti/La Scala/Robbiano (blr), @*- the algorithm of Hosten/Sturmfels (hs), @*- the algorithm of DiBiase/Urbanke (du). The argument `alg' should be the abbreviation for an algorithm as above: ct, pct, ect, pt, blr, hs or du. `ct' allows computation of an optimal solution of the IP-problem directly from the right-hand vector b. @*The same is true for its `positive' variant `pct' which may only be applied if A and b have nonnegative entries. @*All other algorithms need initial solutions of the IP-problem. If `alg' is chosen to be `ct' or `pct', bx is read as the right hand vector b of the system Ax=b. b should then be an intvec of size m where m is the number of rows of A. @*Furthermore, bx and A should be nonnegative if `pct' is used. If `alg' is chosen to be `ect',`pt',`blr',`hs' or `du', bx is read as an initial solution x of the system Ax=b. bx should then be a nonnegative intvec of size n where n is the number of columns of A. If `alg' is chosen to be `blr' or `hs', the algorithm needs a vector with positive coefficients in the row space of A. @*If no row of A contains only positive entries, one has to use the versions of solve_IP which take such a vector prsv as an argument. solve_IP may also be called with a list bx of intvecs instead of a single intvec. @end table @strong{Example:} @smallexample @c computed example solve_IP d2t_singular/intprog_lib.doc:85 LIB "intprog.lib"; // 1. call with single right-hand vector intmat A[2][3]=1,1,0,0,1,1; intvec b1=1,1; intvec c=2,2,1; intvec solution_vector=solve_IP(A,b1,c,"pct"); solution_vector;""; @expansion{} 0,1,0 @expansion{} // 2. call with list of right-hand vectors intvec b2=-1,1; list l=b1,b2; l; @expansion{} [1]: @expansion{} 1,1 @expansion{} [2]: @expansion{} -1,1 list solution_list=solve_IP(A,l,c,"ct"); solution_list;""; @expansion{} [1]: @expansion{} 0,1,0 @expansion{} [2]: @expansion{} not solvable @expansion{} // 3. call with single initial solution vector A=2,1,-1,-1,1,2; b1=3,4,5; solve_IP(A,b1,c,"du");""; @expansion{} 0,7,2 @expansion{} // 4. call with single initial solution vector // and algorithm needing a positive row space vector solution_vector=solve_IP(A,b1,c,"hs");""; @expansion{} ERROR: The chosen algorithm needs a positive vector in the row space of t\ he matrix. @expansion{} 0 @expansion{} // 5. call with single initial solution vector // and positive row space vector intvec prsv=1,2,1; solution_vector=solve_IP(A,b1,c,"hs",prsv); solution_vector;""; @expansion{} 0,7,2 @expansion{} // 6. call with list of initial solution vectors // and positive row space vector b2=7,8,0; l=b1,b2; l; @expansion{} [1]: @expansion{} 3,4,5 @expansion{} [2]: @expansion{} 7,8,0 solution_list=solve_IP(A,l,c,"blr",prsv); solution_list; @expansion{} [1]: @expansion{} 0,7,2 @expansion{} [2]: @expansion{} 7,8,0 @c end example solve_IP d2t_singular/intprog_lib.doc:85 @end smallexample @c inserted refs from d2t_singular/intprog_lib.doc:120 @ifinfo @menu See also: * Integer programming:: * intprog_lib:: * toric_lib:: @end menu @end ifinfo @iftex @strong{See also:} @ref{Integer programming}; @ref{intprog_lib}; @ref{toric_lib}. @end iftex @c end inserted refs from d2t_singular/intprog_lib.doc:120 @c ---end content solve_IP--- texi2html-1.82/test/singular_manual/d2t_singular/ntsolve_lib.tex0000644000175000017500000000727411264347126027047 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/ntsolve_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/ntsolve_lib.doc INSTEAD @c library version: (1.12.2.1,2002/04/12) @c library file: ../Singular/LIB/ntsolve.lib @cindex ntsolve.lib @cindex ntsolve_lib @table @asis @item @strong{Library:} ntsolve.lib @item @strong{Purpose:} Real Newton Solving of Polynomial Systems @item @strong{Authors:} Wilfred Pohl, email: pohl@@mathematik.uni-kl.de @*Dietmar Hillebrand @end table @strong{Procedures:} @menu * nt_solve:: find one real root of 0-dimensional ideal G * triMNewton:: find one real root for 0-dim triangular system G @end menu @c ---end content LibInfo--- @c ------------------- nt_solve ------------- @node nt_solve, triMNewton,, ntsolve_lib @subsubsection nt_solve @cindex nt_solve @c ---content nt_solve--- Procedure from library @code{ntsolve.lib} (@pxref{ntsolve_lib}). @table @asis @item @strong{Usage:} nt_solve(gls,ini[,ipar]); gls,ini= ideals, ipar=list/intvec,@* gls: contains the equations, for which a solution will be computed ini: ideal of initial values (approximate solutions to start with),@* ipar: control integers (default: ipar = 100,10) @format ipar[1]: max. number of iterations ipar[2]: accuracy (we have the l_2-norm ||.||): accept solution @code{sol} if ||gls(sol)|| < eps0*(0.1^ipar[2]) where eps0 = ||gls(ini)|| is the initial error @end format @item @strong{Assume:} gls is a zerodimensional ideal with nvars(basering) = size(gls) (>1) @item @strong{Return:} ideal, coordinates of one solution (if found), 0 else @item @strong{Note:} if printlevel >0: displays comments (default =0) @end table @strong{Example:} @smallexample @c computed example nt_solve d2t_singular/ntsolve_lib.doc:56 LIB "ntsolve.lib"; ring rsq = (real,40),(x,y,z,w),lp; ideal gls = x2+y2+z2-10, y2+z3+w-8, xy+yz+xz+w5 - 1,w3+y; ideal ini = 3.1,2.9,1.1,0.5; intvec ipar = 200,0; ideal sol = nt_solve(gls,ini,ipar); sol; @expansion{} sol[1]=0.8698104581550055082008024750939710335537 @expansion{} sol[2]=2.8215774457503246008496262517717182369409 @expansion{} sol[3]=1.1323120084664179900060940157112668717318 @expansion{} sol[4]=-1.413071026406678849397999475590194239628 @c end example nt_solve d2t_singular/ntsolve_lib.doc:56 @end smallexample @c ---end content nt_solve--- @c ------------------- triMNewton ------------- @node triMNewton,, nt_solve, ntsolve_lib @subsubsection triMNewton @cindex triMNewton @c ---content triMNewton--- Procedure from library @code{ntsolve.lib} (@pxref{ntsolve_lib}). @table @asis @item @strong{Usage:} triMNewton(G,a[,ipar]); G,a= ideals, ipar=list/intvec @item @strong{Assume:} G: g1,..,gn, a triangular system of n equations in n vars, i.e. gi=gi(var(n-i+1),..,var(n)),@* a: ideal of numbers, coordinates of an approximation of a common zero of G to start with (with a[i] to be substituted in var(i)),@* ipar: control integer vector (default: ipar = 100,10) @format ipar[1]: max. number of iterations ipar[2]: accuracy (we have as norm |.| absolute value ): accept solution @code{sol} if |G(sol)| < |G(a)|*(0.1^ipar[2]). @end format @item @strong{Return:} an ideal, coordinates of a better approximation of a zero of G @end table @strong{Example:} @smallexample @c computed example triMNewton d2t_singular/ntsolve_lib.doc:97 LIB "ntsolve.lib"; ring r = (real,30),(z,y,x),(lp); ideal i = x^2-1,y^2+x4-3,z2-y4+x-1; ideal a = 2,3,4; intvec e = 20,10; ideal l = triMNewton(i,a,e); l; @expansion{} l[1]=-2.000000000042265738880279143423 @expansion{} l[2]=1.41421356237309504880168872421 @expansion{} l[3]=1 @c end example triMNewton d2t_singular/ntsolve_lib.doc:97 @end smallexample @c ---end content triMNewton--- texi2html-1.82/test/singular_manual/d2t_singular/paramet_lib.tex0000644000175000017500000001517511264347126027005 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/paramet_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/paramet_lib.doc INSTEAD @c library version: (1.11.2.1,2002/10/21) @c library file: ../Singular/LIB/paramet.lib @cindex paramet.lib @cindex paramet_lib @table @asis @item @strong{Library:} paramet.lib @item @strong{Purpose:} Parametrization of Varieties @item @strong{Author:} Thomas Keilen, keilen@@mathematik.uni-kl.de @end table @strong{Procedures:} @menu * parametrize:: parametrizes a prime ideal via the normalization * parametrizepd:: calculates the prim.dec. and parametrizes the components * parametrizesing:: parametrizes an isolated plane curve singularity @end menu @table @asis @item @strong{Overview:} A library to compute parametrizations of algebraic varieties (if possible) with the aid of a normalization, or a primary decomposition, resp. to compute a parametrization of a plane curve singularity with the aid of a Hamburger-Noether expansion. @end table @c inserted refs from d2t_singular/paramet_lib.doc:30 @ifinfo @menu See also: * hnoether_lib:: * normal_lib:: * primdec_lib:: @end menu @end ifinfo @iftex @strong{See also:} @ref{hnoether_lib}; @ref{normal_lib}; @ref{primdec_lib}. @end iftex @c end inserted refs from d2t_singular/paramet_lib.doc:30 @c ---end content LibInfo--- @c ------------------- parametrize ------------- @node parametrize, parametrizepd,, paramet_lib @subsubsection parametrize @cindex parametrize @c ---content parametrize--- Procedure from library @code{paramet.lib} (@pxref{paramet_lib}). @table @asis @item @strong{Usage:} parametrize(I); I ideal in an arbitrary number of variables, whose radical is prime, in a ring with global ordering @item @strong{Create:} If the parametrization is successful, the basering will be changed to the parametrization ring, that is to the ring PR=0,(s,t),dp; respectively PR=0,t(1..d),dp;, depending on the dimension of the parametrized variety. @item @strong{Return:} a list containing the parametrization ideal resp. the original ideal, the number of variables needed for the parametrization resp. 0, and 1 resp. 0 depending on whether the parametrization was successful or not @cindex parametrization @cindex normalization @end table @strong{Example:} @smallexample @c computed example parametrize d2t_singular/paramet_lib.doc:65 LIB "paramet.lib"; ring RING=0,(x,y,z),dp; ideal I=z2-y2x2+x3; parametrize(I); @expansion{} [1]: @expansion{} _[1]=s2-t2 @expansion{} _[2]=s @expansion{} _[3]=s2t-t3 @expansion{} [2]: @expansion{} 2 @expansion{} [3]: @expansion{} 1 @c end example parametrize d2t_singular/paramet_lib.doc:65 @end smallexample @c inserted refs from d2t_singular/paramet_lib.doc:72 @ifinfo @menu See also: * normal:: * parametrizepd:: * primdecGTZ:: * radical:: @end menu @end ifinfo @iftex @strong{See also:} @ref{normal}; @ref{parametrizepd}; @ref{primdecGTZ}; @ref{radical}. @end iftex @c end inserted refs from d2t_singular/paramet_lib.doc:72 @c ---end content parametrize--- @c ------------------- parametrizepd ------------- @node parametrizepd, parametrizesing, parametrize, paramet_lib @subsubsection parametrizepd @cindex parametrizepd @c ---content parametrizepd--- Procedure from library @code{paramet.lib} (@pxref{paramet_lib}). @table @asis @item @strong{Usage:} parametrizepd(I); I ideal in a polynomial ring with global ordering @item @strong{Create:} If the parametrization is successful, the basering will be changed to the parametrization ring, that is to the ring PR=0,(s,t),dp; respectively PR=0,t(1..d),dp;, depending on the dimension of the parametrized variety. @item @strong{Return:} a list of lists, where each entry contains the parametrization of a primary component of I resp. 0, the number of variables resp. 0, and 1 resp. 0 depending on whether the parametrization of the component was successful or not @cindex parametrization @cindex normalization @end table @strong{Example:} @smallexample @c computed example parametrizepd d2t_singular/paramet_lib.doc:106 LIB "paramet.lib"; ring RING=0,(x,y,z),dp; ideal I=(x2-y2z2+z3)*(x2-z2-z3),(x2-y2z2+z3)*yz; parametrizepd(I); @expansion{} [1]: @expansion{} [1]: @expansion{} _[1]=s2t-t3 @expansion{} _[2]=s @expansion{} _[3]=s2-t2 @expansion{} [2]: @expansion{} 2 @expansion{} [3]: @expansion{} 1 @expansion{} [2]: @expansion{} [1]: @expansion{} _[1]=0 @expansion{} _[2]=s @expansion{} _[3]=0 @expansion{} [2]: @expansion{} 1 @expansion{} [3]: @expansion{} 1 @expansion{} [3]: @expansion{} [1]: @expansion{} _[1]=s3-s @expansion{} _[2]=0 @expansion{} _[3]=s2-1 @expansion{} [2]: @expansion{} 1 @expansion{} [3]: @expansion{} 1 @c end example parametrizepd d2t_singular/paramet_lib.doc:106 @end smallexample @c inserted refs from d2t_singular/paramet_lib.doc:113 @ifinfo @menu See also: * normal:: * parametrize:: * primdecGTZ:: @end menu @end ifinfo @iftex @strong{See also:} @ref{normal}; @ref{parametrize}; @ref{primdecGTZ}. @end iftex @c end inserted refs from d2t_singular/paramet_lib.doc:113 @c ---end content parametrizepd--- @c ------------------- parametrizesing ------------- @node parametrizesing,, parametrizepd, paramet_lib @subsubsection parametrizesing @cindex parametrizesing @c ---content parametrizesing--- Procedure from library @code{paramet.lib} (@pxref{paramet_lib}). @table @asis @item @strong{Usage:} parametrizesing(f); f a polynomial in two variables, ordering ls or ds @item @strong{Create:} If the parametrization is successful, the basering will be changed to the parametrization ring, that is to the ring 0,(x,y),ls; @item @strong{Return:} a list containing the parametrizations of the different branches of the singularity at the origin resp. 0, if f was not of the desired kind @cindex parametrization @cindex curve singularities @end table @strong{Example:} @smallexample @c computed example parametrizesing d2t_singular/paramet_lib.doc:143 LIB "paramet.lib"; ring RING=0,(x,y),ls; poly f=(x^2-y^3)*(x^2-y^2-y^3); parametrizesing(f); @expansion{} [1]: @expansion{} _[1]=x @expansion{} _[2]=x-1/2x2 @expansion{} [2]: @expansion{} _[1]=x @expansion{} _[2]=-x-1/2x2 @expansion{} [3]: @expansion{} _[1]=x3 @expansion{} _[2]=x2 @c end example parametrizesing d2t_singular/paramet_lib.doc:143 @end smallexample @c inserted refs from d2t_singular/paramet_lib.doc:150 @ifinfo @menu See also: * develop:: * hnexpansion:: * hnoether_lib:: @end menu @end ifinfo @iftex @strong{See also:} @ref{develop}; @ref{hnexpansion}; @ref{hnoether_lib}. @end iftex @c end inserted refs from d2t_singular/paramet_lib.doc:150 @c ---end content parametrizesing--- texi2html-1.82/test/singular_manual/d2t_singular/sing_lib.tex0000644000175000017500000006256311264347126026317 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/sing_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/sing_lib.doc INSTEAD @c library version: (1.24.2.5,2003/04/15) @c library file: ../Singular/LIB/sing.lib @cindex sing.lib @cindex sing_lib @table @asis @item @strong{Library:} sing.lib @item @strong{Purpose:} Invariants of Singularities @item @strong{Authors:} Gert-Martin Greuel, email: greuel@@mathematik.uni-kl.de @* Bernd Martin, email: martin@@math.tu-cottbus.de @end table @strong{Procedures:} @menu * deform:: infinitesimal deformations of ideal i * dim_slocus:: dimension of singular locus of ideal i * is_active:: is poly f an active element mod id? (id ideal/module) * is_ci:: is ideal i a complete intersection? * is_is:: is ideal i an isolated singularity? * is_reg:: is poly f a regular element mod id? (id ideal/module) * is_regs:: are gen's of ideal i regular sequence modulo id? * locstd:: SB for local degree ordering without cancelling units * milnor:: milnor number of ideal i; (assume i is ICIS in nf) * nf_icis:: generic combinations of generators; get ICIS in nf * slocus:: ideal of singular locus of ideal i * qhspectrum:: spectrum numbers of w-homogeneous polynomial f * Tjurina:: SB of Tjurina module of ideal i (assume i is ICIS) * tjurina:: Tjurina number of ideal i (assume i is ICIS) * T_1:: T^1-module of ideal i * T_2:: T^2-module of ideal i * T_12:: T^1- and T^2-module of ideal i * tangentcone:: compute tangent cone of id @end menu @c ---end content LibInfo--- @c ------------------- deform ------------- @node deform, dim_slocus,, sing_lib @subsubsection deform @cindex deform @c ---content deform--- Procedure from library @code{sing.lib} (@pxref{sing_lib}). @table @asis @item @strong{Usage:} deform(id); id=ideal or poly @item @strong{Return:} matrix, columns are kbase of infinitesimal deformations @end table @strong{Example:} @smallexample @c computed example deform d2t_singular/sing_lib.doc:57 LIB "sing.lib"; ring r = 32003,(x,y,z),ds; ideal i = xy,xz,yz; matrix T = deform(i); print(T); @expansion{} x,0,0, @expansion{} 0,0,z, @expansion{} 0,y,0 print(deform(x3+y5+z2)); @expansion{} xy3,y3,xy2,y2,xy,y,x,1 @c end example deform d2t_singular/sing_lib.doc:57 @end smallexample @c ---end content deform--- @c ------------------- dim_slocus ------------- @node dim_slocus, is_active, deform, sing_lib @subsubsection dim_slocus @cindex dim_slocus @c ---content dim_slocus--- Procedure from library @code{sing.lib} (@pxref{sing_lib}). @table @asis @item @strong{Usage:} dim_slocus(i); i ideal or poly @item @strong{Return:} dimension of singular locus of i @end table @strong{Example:} @smallexample @c computed example dim_slocus d2t_singular/sing_lib.doc:85 LIB "sing.lib"; ring r = 32003,(x,y,z),ds; ideal i = x5+y6+z6,x2+2y2+3z2; dim_slocus(i); @expansion{} 0 @c end example dim_slocus d2t_singular/sing_lib.doc:85 @end smallexample @c ---end content dim_slocus--- @c ------------------- is_active ------------- @node is_active, is_ci, dim_slocus, sing_lib @subsubsection is_active @cindex is_active @c ---content is_active--- Procedure from library @code{sing.lib} (@pxref{sing_lib}). @table @asis @item @strong{Usage:} is_active(f,id); f poly, id ideal or module @item @strong{Return:} 1 if f is an active element modulo id (i.e. dim(id)=dim(id+f*R^n)+1, if id is a submodule of R^n) resp. 0 if f is not active. The basering may be a quotient ring @item @strong{Note:} regular parameters are active but not vice versa (id may have embedded components). proc is_reg tests whether f is a regular parameter @end table @strong{Example:} @smallexample @c computed example is_active d2t_singular/sing_lib.doc:117 LIB "sing.lib"; ring r =32003,(x,y,z),ds; ideal i = yx3+y,yz3+y3z; poly f = x; is_active(f,i); @expansion{} 1 qring q = std(x4y5); poly f = x; module m = [yx3+x,yx3+y3x]; is_active(f,m); @expansion{} 0 @c end example is_active d2t_singular/sing_lib.doc:117 @end smallexample @c ---end content is_active--- @c ------------------- is_ci ------------- @node is_ci, is_is, is_active, sing_lib @subsubsection is_ci @cindex is_ci @c ---content is_ci--- Procedure from library @code{sing.lib} (@pxref{sing_lib}). @table @asis @item @strong{Usage:} is_ci(i); i ideal @item @strong{Return:} intvec = sequence of dimensions of ideals (j[1],...,j[k]), for k=1,...,size(j), where j is minimal base of i. i is a complete intersection if last number equals nvars-size(i) @item @strong{Note:} dim(0-ideal) = -1. You may first apply simplify(i,10); in order to delete zeroes and multiples from set of generators @*printlevel >=0: display comments (default) @end table @strong{Example:} @smallexample @c computed example is_ci d2t_singular/sing_lib.doc:155 LIB "sing.lib"; int p = printlevel; printlevel = 1; // display comments ring r = 32003,(x,y,z),ds; ideal i = x4+y5+z6,xyz,yx2+xz2+zy7; is_ci(i); @expansion{} // complete intersection of dim 0 @expansion{} // dim-sequence: @expansion{} 2,1,0 i = xy,yz; is_ci(i); @expansion{} // no complete intersection @expansion{} // dim-sequence: @expansion{} 2,2 printlevel = p; @c end example is_ci d2t_singular/sing_lib.doc:155 @end smallexample @c ---end content is_ci--- @c ------------------- is_is ------------- @node is_is, is_reg, is_ci, sing_lib @subsubsection is_is @cindex is_is @c ---content is_is--- Procedure from library @code{sing.lib} (@pxref{sing_lib}). @table @asis @item @strong{Usage:} is_is(id); id ideal or poly @item @strong{Return:} intvec = sequence of dimensions of singular loci of ideals generated by id[1]..id[i], k = 1..size(id); @* dim(0-ideal) = -1; @*id defines an isolated singularity if last number is 0 @item @strong{Note:} printlevel >=0: display comments (default) @end table @strong{Example:} @smallexample @c computed example is_is d2t_singular/sing_lib.doc:192 LIB "sing.lib"; int p = printlevel; printlevel = 1; ring r = 32003,(x,y,z),ds; ideal i = x2y,x4+y5+z6,yx2+xz2+zy7; is_is(i); @expansion{} // dim of singular locus = 0 @expansion{} // isolated singularity if last number is 0 in dim-sequence: @expansion{} 2,1,0 poly f = xy+yz; is_is(f); @expansion{} // dim of singular locus = 1 @expansion{} // isolated singularity if last number is 0 in dim-sequence: @expansion{} 1 printlevel = p; @c end example is_is d2t_singular/sing_lib.doc:192 @end smallexample @c ---end content is_is--- @c ------------------- is_reg ------------- @node is_reg, is_regs, is_is, sing_lib @subsubsection is_reg @cindex is_reg @c ---content is_reg--- Procedure from library @code{sing.lib} (@pxref{sing_lib}). @table @asis @item @strong{Usage:} is_reg(f,id); f poly, id ideal or module @item @strong{Return:} 1 if multiplication with f is injective modulo id, 0 otherwise @item @strong{Note:} let R be the basering and id a submodule of R^n. The procedure checks injectivity of multiplication with f on R^n/id. The basering may be a quotient ring @end table @strong{Example:} @smallexample @c computed example is_reg d2t_singular/sing_lib.doc:228 LIB "sing.lib"; ring r = 32003,(x,y),ds; ideal i = x8,y8; ideal j = (x+y)^4; i = intersect(i,j); poly f = xy; is_reg(f,i); @expansion{} 0 @c end example is_reg d2t_singular/sing_lib.doc:228 @end smallexample @c ---end content is_reg--- @c ------------------- is_regs ------------- @node is_regs, locstd, is_reg, sing_lib @subsubsection is_regs @cindex is_regs @c ---content is_regs--- Procedure from library @code{sing.lib} (@pxref{sing_lib}). @table @asis @item @strong{Usage:} is_regs(i[,id]); i poly, id ideal or module (default: id=0) @item @strong{Return:} 1 if generators of i are a regular sequence modulo id, 0 otherwise @item @strong{Note:} let R be the basering and id a submodule of R^n. The procedure checks injectivity of multiplication with i[k] on R^n/id+i[1..k-1]. The basering may be a quotient ring @*printlevel >=0: display comments (default) @*printlevel >=1: display comments during computation @end table @strong{Example:} @smallexample @c computed example is_regs d2t_singular/sing_lib.doc:264 LIB "sing.lib"; int p = printlevel; printlevel = 1; ring r1 = 32003,(x,y,z),ds; ideal i = x8,y8,(x+y)^4; is_regs(i); @expansion{} // checking whether element 1 is regular mod 1 .. 0 @expansion{} // checking whether element 2 is regular mod 1 .. 1 @expansion{} // checking whether element 3 is regular mod 1 .. 2 @expansion{} // elements 1..2 are regular, 3 is not regular mod 1..2 @expansion{} 0 module m = [x,0,y]; i = x8,(x+z)^4;; is_regs(i,m); @expansion{} // checking whether element 1 is regular mod 1 .. 0 @expansion{} // checking whether element 2 is regular mod 1 .. 1 @expansion{} // elements are a regular sequence of length 2 @expansion{} 1 printlevel = p; @c end example is_regs d2t_singular/sing_lib.doc:264 @end smallexample @c ---end content is_regs--- @c ------------------- locstd ------------- @node locstd, milnor, is_regs, sing_lib @subsubsection locstd @cindex locstd @c ---content locstd--- Procedure from library @code{sing.lib} (@pxref{sing_lib}). @table @asis @item @strong{Usage:} locstd (id); id = ideal @item @strong{Return:} a standard basis for a local degree ordering @item @strong{Note:} the procedure homogenizes id w.r.t. a new 1st variable @@t@@, computes a SB wrt (dp(1),dp) and substitutes @@t@@ by 1. @*Hence the result is a SB with respect to an ordering which sorts first w.r.t. the order and then refines it with dp. This is a local degree ordering. @*This is done in order to avoid cancellation of units and thus be able to use option(contentSB); @end table @strong{Example:} @smallexample @c computed example locstd d2t_singular/sing_lib.doc:305 LIB "sing.lib"; ring R = 0,(x,y,z),ds; ideal i = xyz+z5,2x2+y3+z7,3z5+y5; locstd(i); @expansion{} _[1]=y5+3z5 @expansion{} _[2]=3x4y3z8-4x3y3z9+6x2y4z9+3y5z10 @expansion{} _[3]=3x4z13-4x3z14+6x2yz14+3y2z15 @expansion{} _[4]=3x4yz12-4x3yz13+6x2y2z13+3y3z14 @expansion{} _[5]=2x2z9+x2y2z8+y3z9 @expansion{} _[6]=2x2y4z5+y7z5-3x2yz9 @expansion{} _[7]=6y2z10-3x2y3z8+4xy3z9-3y4z9 @expansion{} _[8]=3x2y2z8+3y3z9+2xy4z8 @expansion{} _[9]=18z14-4xy6z8+3y7z8-9x2yz12 @expansion{} _[10]=xyz+z5 @expansion{} _[11]=3xz6-y4z5 @expansion{} _[12]=3y3z6+2xy4z5-3xyz9 @expansion{} _[13]=y4z5-2xz9-xy2z8 @expansion{} _[14]=3z10+2xyz9+xy3z8 @expansion{} _[15]=2x2z5+y3z5-xyz8 @expansion{} _[16]=y4z-2xz5+yz8 @expansion{} _[17]=3z6+2xyz5-y2z8 @expansion{} _[18]=2x2+y3+z7 @c end example locstd d2t_singular/sing_lib.doc:305 @end smallexample @c ---end content locstd--- @c ------------------- milnor ------------- @node milnor, nf_icis, locstd, sing_lib @subsubsection milnor @cindex milnor @c ---content milnor--- Procedure from library @code{sing.lib} (@pxref{sing_lib}). @table @asis @item @strong{Usage:} milnor(i); i ideal or poly @item @strong{Return:} Milnor number of i, if i is ICIS (isolated complete intersection singularity) in generic form, resp. -1 if not @item @strong{Note:} use proc nf_icis to put generators in generic form @*printlevel >=0: display comments (default) @end table @strong{Example:} @smallexample @c computed example milnor d2t_singular/sing_lib.doc:336 LIB "sing.lib"; int p = printlevel; printlevel = 1; ring r = 32003,(x,y,z),ds; ideal j = x5+y6+z6,x2+2y2+3z2,xyz+yx; milnor(j); @expansion{} //sequence of discriminant numbers: 100,149,70 @expansion{} 21 poly f = x7+y7+(x-y)^2*x2y2+z2; milnor(f); @expansion{} 28 printlevel = p; @c end example milnor d2t_singular/sing_lib.doc:336 @end smallexample @c ---end content milnor--- @c ------------------- nf_icis ------------- @node nf_icis, slocus, milnor, sing_lib @subsubsection nf_icis @cindex nf_icis @c ---content nf_icis--- Procedure from library @code{sing.lib} (@pxref{sing_lib}). @table @asis @item @strong{Usage:} nf_icis(i); i ideal @item @strong{Return:} ideal = generic linear combination of generators of i if i is an ICIS (isolated complete intersection singularity), return i if not @item @strong{Note:} this proc is useful in connection with proc milnor @*printlevel >=0: display comments (default) @end table @strong{Example:} @smallexample @c computed example nf_icis d2t_singular/sing_lib.doc:372 LIB "sing.lib"; int p = printlevel; printlevel = 1; ring r = 32003,(x,y,z),ds; ideal i = x3+y4,z4+yx; nf_icis(i); @expansion{} // complete intersection of dim 1 @expansion{} // dim-sequence: @expansion{} // dim of singular locus = 0 @expansion{} // isolated singularity if last number is 0 in dim-sequence: @expansion{} // dim of singular locus = 0 @expansion{} // isolated singularity if last number is 0 in dim-sequence: @expansion{} // ICIS in generic form after 1 genericity loop(s) @expansion{} _[1]=2xy+x3+y4+2z4 @expansion{} _[2]=xy+z4 ideal j = x3+y4,xy,yz; nf_icis(j); @expansion{} // no complete intersection @expansion{} // dim-sequence: @expansion{} // no complete intersection @expansion{} _[1]=x3+y4 @expansion{} _[2]=xy @expansion{} _[3]=yz printlevel = p; @c end example nf_icis d2t_singular/sing_lib.doc:372 @end smallexample @c ---end content nf_icis--- @c ------------------- slocus ------------- @node slocus, qhspectrum, nf_icis, sing_lib @subsubsection slocus @cindex slocus @c ---content slocus--- Procedure from library @code{sing.lib} (@pxref{sing_lib}). @table @asis @item @strong{Usage:} slocus(i); i ideal @item @strong{Return:} ideal of singular locus of i @end table @strong{Example:} @smallexample @c computed example slocus d2t_singular/sing_lib.doc:403 LIB "sing.lib"; ring r = 0,(u,v,w,x,y,z),dp; ideal i = wx,wy,wz,vx,vy,vz,ux,uy,uz,y3-x2;; slocus(i); @expansion{} _[1]=x @expansion{} _[2]=w @expansion{} _[3]=v @expansion{} _[4]=u @expansion{} _[5]=y2 @c end example slocus d2t_singular/sing_lib.doc:403 @end smallexample @c ---end content slocus--- @c ------------------- qhspectrum ------------- @node qhspectrum, Tjurina, slocus, sing_lib @subsubsection qhspectrum @cindex qhspectrum @c ---content qhspectrum--- Procedure from library @code{sing.lib} (@pxref{sing_lib}). @table @asis @item @strong{Usage:} qhspectrum(f,w); f=poly, w=intvec; @item @strong{Assume:} f is a weighted homogeneous isolated singularity w.r.t. the weights given by w; w must consist of as many positive integers as there are variables of the basering @item @strong{Compute:} the spectral numbers of the w-homogeneous polynomial f, computed in a ring of characteristic 0 @item @strong{Return:} intvec d,s1,...,su where: @*d = w-degree(f) and si/d = i-th spectral-number(f) @*No return value if basering has parameters or if f is no isolated singularity, displays a warning in this case @end table @strong{Example:} @smallexample @c computed example qhspectrum d2t_singular/sing_lib.doc:441 LIB "sing.lib"; ring r; poly f=x3+y5+z2; intvec w=10,6,15; qhspectrum(f,w); @expansion{} 30,1,7,11,13,17,19,23,29 // the spectrum numbers are: // 1/30,7/30,11/30,13/30,17/30,19/30,23/30,29/30 @c end example qhspectrum d2t_singular/sing_lib.doc:441 @end smallexample @c ---end content qhspectrum--- @c ------------------- Tjurina ------------- @node Tjurina, tjurina, qhspectrum, sing_lib @subsubsection Tjurina @cindex Tjurina @c ---content Tjurina--- Procedure from library @code{sing.lib} (@pxref{sing_lib}). @table @asis @item @strong{Usage:} Tjurina(id[,]); id=ideal or poly @item @strong{Assume:} id=ICIS (isolated complete intersection singularity) @item @strong{Return:} standard basis of Tjurina-module of id, @*of type module if id=ideal, resp. of type ideal if id=poly. If a second argument is present (of any type) return a list: @* [1] = Tjurina number, @*[2] = k-basis of miniversal deformation, @*[3] = SB of Tjurina module, @*[4] = Tjurina module @item @strong{Display:} Tjurina number if printlevel >= 0 (default) @item @strong{Note:} Tjurina number = -1 implies that id is not an ICIS @end table @strong{Example:} @smallexample @c computed example Tjurina d2t_singular/sing_lib.doc:485 LIB "sing.lib"; int p = printlevel; printlevel = 1; ring r = 0,(x,y,z),ds; poly f = x5+y6+z7+xyz; // singularity T[5,6,7] list T = Tjurina(f,""); @expansion{} // Tjurina number = 16 show(T[1]); // Tjurina number, should be 16 @expansion{} // int, size 1 @expansion{} 16 show(T[2]); // basis of miniversal deformation @expansion{} // ideal, 16 generator(s) @expansion{} z6, @expansion{} z5, @expansion{} z4, @expansion{} z3, @expansion{} z2, @expansion{} z, @expansion{} y5, @expansion{} y4, @expansion{} y3, @expansion{} y2, @expansion{} y, @expansion{} x4, @expansion{} x3, @expansion{} x2, @expansion{} x, @expansion{} 1 show(T[3]); // SB of Tjurina ideal @expansion{} // ideal, 6 generator(s) @expansion{} xy+7z6, @expansion{} xz+6y5, @expansion{} yz+5x4, @expansion{} 5x5-6y6, @expansion{} 6y6, @expansion{} z7 show(T[4]); ""; // Tjurina ideal @expansion{} // ideal, 4 generator(s) @expansion{} yz+5x4, @expansion{} xz+6y5, @expansion{} xy+7z6, @expansion{} xyz+x5+y6+z7 @expansion{} ideal j = x2+y2+z2,x2+2y2+3z2; show(kbase(Tjurina(j))); // basis of miniversal deformation @expansion{} // Tjurina number = 5 @expansion{} // module, 5 generator(s) @expansion{} [z] @expansion{} [y] @expansion{} [x] @expansion{} [1] @expansion{} [0,1] hilb(Tjurina(j)); // Hilbert series of Tjurina module @expansion{} // Tjurina number = 5 @expansion{} // 2 t^0 @expansion{} // -3 t^1 @expansion{} // -3 t^2 @expansion{} // 7 t^3 @expansion{} // -3 t^4 @expansion{} @expansion{} // 2 t^0 @expansion{} // 3 t^1 @expansion{} // dimension (local) = 0 @expansion{} // multiplicity = 5 printlevel = p; @c end example Tjurina d2t_singular/sing_lib.doc:485 @end smallexample @c ---end content Tjurina--- @c ------------------- tjurina ------------- @node tjurina, T_1, Tjurina, sing_lib @subsubsection tjurina @cindex tjurina @c ---content tjurina--- Procedure from library @code{sing.lib} (@pxref{sing_lib}). @table @asis @item @strong{Usage:} tjurina(id); id=ideal or poly @item @strong{Assume:} id=ICIS (isolated complete intersection singularity) @item @strong{Return:} int = Tjurina number of id @item @strong{Note:} Tjurina number = -1 implies that id is not an ICIS @end table @strong{Example:} @smallexample @c computed example tjurina d2t_singular/sing_lib.doc:527 LIB "sing.lib"; ring r=32003,(x,y,z),(c,ds); ideal j=x2+y2+z2,x2+2y2+3z2; tjurina(j); @expansion{} 5 @c end example tjurina d2t_singular/sing_lib.doc:527 @end smallexample @c ---end content tjurina--- @c ------------------- T_1 ------------- @node T_1, T_2, tjurina, sing_lib @subsubsection T_1 @cindex T_1 @c ---content T_1--- Procedure from library @code{sing.lib} (@pxref{sing_lib}). @table @asis @item @strong{Usage:} T_1(id[,]); id = ideal or poly @item @strong{Return:} T_1(id): of type module/ideal if id is of type ideal/poly. We call T_1(id) the T_1-module of id. It is a std basis of the presentation of 1st order deformations of P/id, if P is the basering. If a second argument is present (of any type) return a list of 3 modules: @*[1]= T_1(id) @*[2]= generators of normal bundle of id, lifted to P @*[3]= module of relations of [2], lifted to P @*(note: transpose[3]*[2]=0 mod id) @*The list contains all non-easy objects which must be computed to get T_1(id). @item @strong{Display:} k-dimension of T_1(id) if printlevel >= 0 (default) @item @strong{Note:} T_1(id) itself is usually of minor importance. Nevertheless, from it all relevant information can be obtained. The most important are probably vdim(T_1(id)); (which computes the Tjurina number), hilb(T_1(id)); and kbase(T_1(id)); @*If T_1 is called with two argument, then matrix([2])*(kbase([1])) represents a basis of 1st order semiuniversal deformation of id (use proc 'deform', to get this in a direct way). @*For a complete intersection the proc Tjurina is faster @end table @strong{Example:} @smallexample @c computed example T_1 d2t_singular/sing_lib.doc:576 LIB "sing.lib"; int p = printlevel; printlevel = 1; ring r = 32003,(x,y,z),(c,ds); ideal i = xy,xz,yz; module T = T_1(i); @expansion{} // dim T_1 = 3 vdim(T); // Tjurina number = dim_K(T_1), should be 3 @expansion{} 3 list L=T_1(i,""); @expansion{} // dim T_1 = 3 module kB = kbase(L[1]); print(L[2]*kB); // basis of 1st order miniversal deformation @expansion{} 0,0,0, @expansion{} z,0,0, @expansion{} 0,y,z show(L[2]); // presentation of normal bundle @expansion{} // module, 6 generator(s) @expansion{} [x] @expansion{} [y,z] @expansion{} [0,x,y] @expansion{} [0,z] @expansion{} [0,0,y] @expansion{} [0,0,z] print(L[3]); // relations of i @expansion{} z, 0, @expansion{} -y,y, @expansion{} 0, -x print(transpose(L[3])*L[2]); // should be 0 (mod i) @expansion{} xz,0, -xy,-yz,0, 0, @expansion{} 0, yz,0, yz, -xy,-xz printlevel = p; @c end example T_1 d2t_singular/sing_lib.doc:576 @end smallexample @c ---end content T_1--- @c ------------------- T_2 ------------- @node T_2, T_12, T_1, sing_lib @subsubsection T_2 @cindex T_2 @c ---content T_2--- Procedure from library @code{sing.lib} (@pxref{sing_lib}). @table @asis @item @strong{Usage:} T_2(id[,]); id = ideal @item @strong{Return:} T_2(id): T_2-module of id . This is a std basis of a presentation of the module of obstructions of R=P/id, if P is the basering. If a second argument is present (of any type) return a list of 4 modules and 1 ideal: @*[1]= T_2(id) @*[2]= standard basis of id (ideal) @*[3]= module of relations of id (=1st syzygy module of id) @* [4]= presentation of syz/kos @*[5]= relations of Hom_P([3]/kos,R), lifted to P @*The list contains all non-easy objects which must be computed to get T_2(id). @item @strong{Display:} k-dimension of T_2(id) if printlevel >= 0 (default) @item @strong{Note:} The most important information is probably vdim(T_2(id)). Use proc miniversal to get equations of miniversal deformation. @end table @strong{Example:} @smallexample @c computed example T_2 d2t_singular/sing_lib.doc:629 LIB "sing.lib"; int p = printlevel; printlevel = 1; ring r = 32003,(x,y),(c,dp); ideal j = x6-y4,x6y6,x2y4-x5y2; module T = T_2(j); @expansion{} // dim T_2 = 6 vdim(T); @expansion{} 6 hilb(T);""; @expansion{} // 1 t^0 @expansion{} // -1 t^2 @expansion{} // -1 t^3 @expansion{} // 1 t^5 @expansion{} @expansion{} // 1 t^0 @expansion{} // 2 t^1 @expansion{} // 2 t^2 @expansion{} // 1 t^3 @expansion{} // dimension (affine) = 0 @expansion{} // degree = 6 @expansion{} ring r1 = 0,(x,y,z),dp; ideal id = xy,xz,yz; list L = T_2(id,""); @expansion{} // dim T_2 = 0 vdim(L[1]); // vdim of T_2 @expansion{} 0 print(L[3]); // syzygy module of id @expansion{} -z,-z, @expansion{} y, 0, @expansion{} 0, x printlevel = p; @c end example T_2 d2t_singular/sing_lib.doc:629 @end smallexample @c ---end content T_2--- @c ------------------- T_12 ------------- @node T_12, tangentcone, T_2, sing_lib @subsubsection T_12 @cindex T_12 @c ---content T_12--- Procedure from library @code{sing.lib} (@pxref{sing_lib}). @table @asis @item @strong{Usage:} T_12(i[,any]); i = ideal @item @strong{Return:} T_12(i): list of 2 modules: @* * standard basis of T_1-module =T_1(i), 1st order deformations @* * standard basis of T_2-module =T_2(i), obstructions of R=P/i @* If a second argument is present (of any type) return a list of 9 modules, matrices, integers: @* [1]= standard basis of T_1-module @*[2]= standard basis of T_2-module @*[3]= vdim of T_1 @*[4]= vdim of T_2 @*[5]= matrix, whose cols present infinitesimal deformations @* [6]= matrix, whose cols are generators of relations of i(=syz(i)) @* [7]= matrix, presenting Hom_P(syz/kos,R), lifted to P @* [8]= presentation of T_1-module, no std basis @*[9]= presentation of T_2-module, no std basis @item @strong{Display:} k-dimension of T_1 and T_2 if printlevel >= 0 (default) @item @strong{Note:} Use proc miniversal from deform.lib to get miniversal deformation of i, the list contains all objects used by proc miniversal @end table @strong{Example:} @smallexample @c computed example T_12 d2t_singular/sing_lib.doc:685 LIB "sing.lib"; int p = printlevel; printlevel = 1; ring r = 200,(x,y,z,u,v),(c,ws(4,3,2,3,4)); ideal i = xz-y2,yz2-xu,xv-yzu,yu-z3,z2u-yv,zv-u2; //a cyclic quotient singularity list L = T_12(i,1); @expansion{} // dim T_1 = 5 @expansion{} // dim T_2 = 3 print(L[5]); //matrix of infin. deformations @expansion{} 0, 0, 0, 0, 0, @expansion{} yz, y, z2, 0, 0, @expansion{} -z3,-z2,-zu,yz, yu, @expansion{} -z2,-z, -u, 0, 0, @expansion{} zu, u, v, -z2,-zu, @expansion{} 0, 0, 0, u, v printlevel = p; @c end example T_12 d2t_singular/sing_lib.doc:685 @end smallexample @c ---end content T_12--- @c ------------------- tangentcone ------------- @node tangentcone,, T_12, sing_lib @subsubsection tangentcone @cindex tangentcone @c ---content tangentcone--- Procedure from library @code{sing.lib} (@pxref{sing_lib}). @table @asis @item @strong{Usage:} tangentcone(id [,n]); id = ideal, n = int @item @strong{Return:} the tangent cone of id @item @strong{Note:} the procedure works for any monomial ordering. @*If n=0 use std w.r.t. local ordering ds, if n=1 use locstd @end table @strong{Example:} @smallexample @c computed example tangentcone d2t_singular/sing_lib.doc:720 LIB "sing.lib"; ring R = 0,(x,y,z),ds; ideal i = 7xyz+z5,x2+y3+z7,5z5+y5; tangentcone(i); @expansion{} _[1]=x2 @expansion{} _[2]=7xyz @expansion{} _[3]=y5+5z5 @expansion{} _[4]=7y4z @expansion{} _[5]=35z6 @c end example tangentcone d2t_singular/sing_lib.doc:720 @end smallexample @c ---end content tangentcone--- texi2html-1.82/test/singular_manual/d2t_singular/presolve_lib.tex0000644000175000017500000007503111264347126027210 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/presolve_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/presolve_lib.doc INSTEAD @c library version: (1.17.2.7,2003/06/12) @c library file: ../Singular/LIB/presolve.lib @cindex presolve.lib @cindex presolve_lib @table @asis @item @strong{Library:} presolve.lib @item @strong{Purpose:} Pre-Solving of Polynomial Equations @item @strong{Author:} Gert-Martin Greuel, email: greuel@@mathematik.uni-kl.de, @end table @strong{Procedures:} @menu * degreepart:: elements of id of total degree >= d1 and <= d2 * elimlinearpart:: linear part eliminated from id * elimpart:: partial elimination of vars [among first n vars] * elimpartanyr:: factors of p partially eliminated from i in any ring * fastelim:: fast elimination of factors of p from i [options] * findvars:: ideal of variables occurring in id [more information] * hilbvec:: intvec of Hilbert-series of id [in char c and ord o] * linearpart:: elements of id of total degree <=1 * tolessvars:: maps id to new basering having only vars occurring in id * solvelinearpart:: reduced std-basis of linear part of id * sortandmap:: map to new basering with vars sorted w.r.t. complexity * sortvars:: sort vars w.r.t. complexity in id [different blocks] * shortid:: generators of id having <= n terms * valvars:: valuation of vars w.r.t. to their complexity in id * idealSimplify:: eliminates variables which are linear in id * idealSplit:: intersection of the ideals has the same radical as id @end menu @c ---end content LibInfo--- @c ------------------- degreepart ------------- @node degreepart, elimlinearpart,, presolve_lib @subsubsection degreepart @cindex degreepart @c ---content degreepart--- Procedure from library @code{presolve.lib} (@pxref{presolve_lib}). @table @asis @item @strong{Usage:} degreepart(id,d1,d2[,v]); id=ideal/module, d1,d1=integers, v=intvec @item @strong{Return:} generators of id of [v-weighted] total degree >= d1 and <= d2 (default: v = 1,...,1) @end table @strong{Example:} @smallexample @c reused example degreepart d2t_singular/presolve_lib.doc:55 LIB "presolve.lib"; ring r=0,(x,y,z),dp; ideal i=1+x+x2+x3+x4,3,xz+y3+z8; degreepart(i,0,4); @expansion{} _[1]=x4+x3+x2+x+1 @expansion{} _[2]=3 module m=[x,y,z],x*[x3,y2,z],[1,x2,z3,0,1]; intvec v=2,3,6; show(degreepart(m,8,8,v)); @expansion{} // module, 1 generator(s) @expansion{} [x4,xy2,xz] @c end example degreepart d2t_singular/presolve_lib.doc:55 @end smallexample @c ---end content degreepart--- @c ------------------- elimlinearpart ------------- @node elimlinearpart, elimpart, degreepart, presolve_lib @subsubsection elimlinearpart @cindex elimlinearpart @c ---content elimlinearpart--- Procedure from library @code{presolve.lib} (@pxref{presolve_lib}). @table @asis @item @strong{Usage:} elimlinearpart(i[,n]); i=ideal, n=integer,@* default: n=nvars(basering) @item @strong{Return:} list L with 5 entries: @format L[1]: (interreduced) ideal obtained from i by substituing from the first n variables those, which appear in a linear part of i, by putting this part into triangular form L[2]: ideal of variables which have been substituted L[3]: ideal, j-th element defines substitution of j-th var in [2] L[4]: ideal of variables of basering, eliminated ones are set to 0 L[5]: ideal, describing the map from the basering to itself such that L[1] is the image of i @end format @item @strong{Note:} the procedure does always interreduce the ideal i internally w.r.t. ordering dp. @end table @strong{Example:} @smallexample @c reused example elimlinearpart d2t_singular/presolve_lib.doc:99 LIB "presolve.lib"; ring s=0,(x,y,z),dp; ideal i = x3+y2+z,x2y2+z3,y+z+1; elimlinearpart(i); @expansion{} [1]: @expansion{} _[1]=x3+z2+3z+1 @expansion{} _[2]=x2z2+2x2z+z3+x2 @expansion{} [2]: @expansion{} _[1]=y @expansion{} [3]: @expansion{} _[1]=y+z+1 @expansion{} [4]: @expansion{} _[1]=x @expansion{} _[2]=0 @expansion{} _[3]=z @expansion{} [5]: @expansion{} _[1]=x @expansion{} _[2]=-z-1 @expansion{} _[3]=z @c end example elimlinearpart d2t_singular/presolve_lib.doc:99 @end smallexample @c ---end content elimlinearpart--- @c ------------------- elimpart ------------- @node elimpart, elimpartanyr, elimlinearpart, presolve_lib @subsubsection elimpart @cindex elimpart @c ---content elimpart--- Procedure from library @code{presolve.lib} (@pxref{presolve_lib}). @table @asis @item @strong{Usage:} elimpart(i [,n,e] ); i=ideal, n,e=integers @*n : only the first n vars are considered for substitution,@* e =0: substitute from linear part of i (same as elimlinearpart)@* e!=0: eliminate also by direct substitution@* (default: n = nvars(basering), e = 1) @item @strong{Return:} list of 5 objects: @format [1]: ideal obtained by substituting from the first n variables those from i, which appear in the linear part of i (or, if e!=0, which can be expressed directly in the remaining vars) [2]: ideal, variables which have been substituted [3]: ideal, i-th element defines substitution of i-th var in [2] [4]: ideal of variables of basering, substituted ones are set to 0 [5]: ideal, describing the map from the basering, say k[x(1..m)], to itself onto k[..variables fom [4]..] and [1] is the image of i @end format The ideal i is generated by [1] and [3] in k[x(1..m)], the map [5] maps [3] to 0, hence induces an isomorphism @format k[x(1..m)]/i -> k[..variables fom [4]..]/[1] @end format @item @strong{Note:} If the basering has ordering (c,dp), this is faster for big ideals, since it avoids internal ring change and mapping. @end table @strong{Example:} @smallexample @c reused example elimpart d2t_singular/presolve_lib.doc:148 LIB "presolve.lib"; ring s=0,(x,y,z),dp; ideal i =x2+y2,x2+y+1; elimpart(i,3,0); @expansion{} [1]: @expansion{} _[1]=y2-y-1 @expansion{} _[2]=x2+y+1 @expansion{} [2]: @expansion{} _[1]=0 @expansion{} [3]: @expansion{} _[1]=0 @expansion{} [4]: @expansion{} _[1]=x @expansion{} _[2]=y @expansion{} _[3]=z @expansion{} [5]: @expansion{} _[1]=x @expansion{} _[2]=y @expansion{} _[3]=z elimpart(i,3,1); @expansion{} [1]: @expansion{} _[1]=x4+3x2+1 @expansion{} [2]: @expansion{} _[1]=y @expansion{} [3]: @expansion{} _[1]=x2+y+1 @expansion{} [4]: @expansion{} _[1]=x @expansion{} _[2]=0 @expansion{} _[3]=z @expansion{} [5]: @expansion{} _[1]=x @expansion{} _[2]=-x2-1 @expansion{} _[3]=z @c end example elimpart d2t_singular/presolve_lib.doc:148 @end smallexample @c ---end content elimpart--- @c ------------------- elimpartanyr ------------- @node elimpartanyr, fastelim, elimpart, presolve_lib @subsubsection elimpartanyr @cindex elimpartanyr @c ---content elimpartanyr--- Procedure from library @code{presolve.lib} (@pxref{presolve_lib}). @table @asis @item @strong{Usage:} elimpartanyr(i [,p,e] ); i=ideal, p=polynomial, e=integer@* p: product of vars to be eliminated,@* e =0: substitute from linear part of i (same as elimlinearpart)@* e!=0: eliminate also by direct substitution@* (default: p=product of all vars, e=1) @item @strong{Return:} list of 6 objects: @format [1]: (interreduced) ideal obtained by substituting from i those vars appearing in p, which occur in the linear part of i (or which can be expressed directly in the remaining variables, if e!=0) [2]: ideal, variables which have been substituted [3]: ideal, i-th element defines substitution of i-th var in [2] [4]: ideal of variables of basering, substituted ones are set to 0 [5]: ideal, describing the map from the basering, say k[x(1..m)], to itself onto k[..variables fom [4]..] and [1] is the image of i [6]: int, # of vars considered for substitution (= # of factors of p) @end format The ideal i is generated by [1] and [3] in k[x(1..m)], the map [5] maps [3] to 0, hence induces an isomorphism @format k[x(1..m)]/i -> k[..variables fom [4]..]/[1] @end format @item @strong{Note:} the proc uses @code{execute} to create a ring with ordering dp and vars placed correctly and then applies @code{elimpart}. @end table @strong{Example:} @smallexample @c reused example elimpartanyr d2t_singular/presolve_lib.doc:199 LIB "presolve.lib"; ring s=0,(x,y,z),dp; ideal i = x3+y2+z,x2y2+z3,y+z+1; elimpartanyr(i,z); @expansion{} [1]: @expansion{} _[1]=x3+y2-y-1 @expansion{} _[2]=x2y2-y3-3y2-3y-1 @expansion{} [2]: @expansion{} _[1]=z @expansion{} [3]: @expansion{} _[1]=y+z+1 @expansion{} [4]: @expansion{} _[1]=0 @expansion{} _[2]=x @expansion{} _[3]=y @expansion{} [5]: @expansion{} _[1]=-y-1 @expansion{} _[2]=x @expansion{} _[3]=y @expansion{} [6]: @expansion{} 1 @c end example elimpartanyr d2t_singular/presolve_lib.doc:199 @end smallexample @c ---end content elimpartanyr--- @c ------------------- fastelim ------------- @node fastelim, findvars, elimpartanyr, presolve_lib @subsubsection fastelim @cindex fastelim @c ---content fastelim--- Procedure from library @code{presolve.lib} (@pxref{presolve_lib}). @table @asis @item @strong{Usage:} fastelim(i,p[h,o,a,b,e,m]); i=ideal, p=polynomial; h,o,a,b,e=integers p: product of variables to be eliminated;@* Optional parameters: @format - h !=0: use Hilbert-series driven std-basis computation - o !=0: use proc @code{valvars} for a - hopefully - optimal ordering of vars - a !=0: order vars to be eliminated w.r.t. increasing complexity - b !=0: order vars not to be eliminated w.r.t. increasing complexity - e !=0: use @code{elimpart} first to eliminate easy part - m !=0: compute a minimal system of generators @end format (default: h,o,a,b,e,m = 0,1,0,0,0,0) @item @strong{Return:} ideal obtained from i by eliminating those variables, which occur in p @end table @strong{Example:} @smallexample @c reused example fastelim d2t_singular/presolve_lib.doc:236 LIB "presolve.lib"; ring s=31991,(e,f,x,y,z,t,u,v,w,a,b,c,d),dp; ideal i = w2+f2-1, x2+t2+a2-1, y2+u2+b2-1, z2+v2+c2-1, d2+e2-1, f4+2u, wa+tf, xy+tu+ab; fastelim(i,xytua,1,1); //with hilb,valvars @expansion{} _[1]=f2+w2-1 @expansion{} _[2]=z2+v2+c2-1 @expansion{} _[3]=e2+d2-1 fastelim(i,xytua,1,0,1); //with hilb,minbase @expansion{} _[1]=z2+v2+c2-1 @expansion{} _[2]=f2+w2-1 @expansion{} _[3]=e2+d2-1 @c end example fastelim d2t_singular/presolve_lib.doc:236 @end smallexample @c ---end content fastelim--- @c ------------------- findvars ------------- @node findvars, hilbvec, fastelim, presolve_lib @subsubsection findvars @cindex findvars @c ---content findvars--- Procedure from library @code{presolve.lib} (@pxref{presolve_lib}). @table @asis @item @strong{Usage:} findvars(id [,any] ); id=poly/ideal/vector/module/matrix, any=any type @item @strong{Return:} if no second argument is present: ideal of variables occurring in id,@* if a second argument is given (of any type): list L with 4 entries: @format L[1]: ideal of variables occurring in id L[2]: intvec of variables occurring in id L[3]: ideal of variables not occurring in id L[4]: intvec of variables not occurring in id @end format @end table @strong{Example:} @smallexample @c reused example findvars d2t_singular/presolve_lib.doc:271 LIB "presolve.lib"; ring s = 0,(e,f,x,y,t,u,v,w,a,d),dp; ideal i = w2+f2-1, x2+t2+a2-1; findvars(i); @expansion{} _[1]=f @expansion{} _[2]=x @expansion{} _[3]=t @expansion{} _[4]=w @expansion{} _[5]=a findvars(i,1); @expansion{} [1]: @expansion{} _[1]=f @expansion{} _[2]=x @expansion{} _[3]=t @expansion{} _[4]=w @expansion{} _[5]=a @expansion{} [2]: @expansion{} 2,3,5,8,9 @expansion{} [3]: @expansion{} _[1]=e @expansion{} _[2]=y @expansion{} _[3]=u @expansion{} _[4]=v @expansion{} _[5]=d @expansion{} [4]: @expansion{} 1,4,6,7,10 @c end example findvars d2t_singular/presolve_lib.doc:271 @end smallexample @c ---end content findvars--- @c ------------------- hilbvec ------------- @node hilbvec, linearpart, findvars, presolve_lib @subsubsection hilbvec @cindex hilbvec @c ---content hilbvec--- Procedure from library @code{presolve.lib} (@pxref{presolve_lib}). @table @asis @item @strong{Usage:} hilbvec(id[,c,o]); id=poly/ideal/vector/module/matrix, c,o=strings,@* c=char, o=ordering used by @code{hilb}@* (default: c="32003", o="dp") @item @strong{Return:} intvec of 1-st Hilbert-series of id, computed in char c and ordering o @item @strong{Note:} id must be homogeneous (i.e. all vars have weight 1) @end table @strong{Example:} @smallexample @c reused example hilbvec d2t_singular/presolve_lib.doc:303 LIB "presolve.lib"; ring s = 0,(e,f,x,y,z,t,u,v,w,a,b,c,d,H),dp; ideal id = w2+f2-1, x2+t2+a2-1, y2+u2+b2-1, z2+v2+c2-1, d2+e2-1, f4+2u, wa+tf, xy+tu+ab; id = homog(id,H); hilbvec(id); @expansion{} 1,0,-7,0,20,0,-28,0,14,0,14,0,-28,0,20,0,-7,0,1,0 @c end example hilbvec d2t_singular/presolve_lib.doc:303 @end smallexample @c ---end content hilbvec--- @c ------------------- linearpart ------------- @node linearpart, tolessvars, hilbvec, presolve_lib @subsubsection linearpart @cindex linearpart @c ---content linearpart--- Procedure from library @code{presolve.lib} (@pxref{presolve_lib}). @table @asis @item @strong{Usage:} linearpart(id); id=ideal/module @item @strong{Return:} generators of id of total degree <= 1 @end table @strong{Example:} @smallexample @c reused example linearpart d2t_singular/presolve_lib.doc:331 LIB "presolve.lib"; ring r=0,(x,y,z),dp; ideal i=1+x+x2+x3,3,x+3y+5z; linearpart(i); @expansion{} _[1]=3 @expansion{} _[2]=x+3y+5z module m=[x,y,z],x*[x3,y2,z],[1,x2,z3,0,1]; show(linearpart(m)); @expansion{} // module, 1 generator(s) @expansion{} [x,y,z] @c end example linearpart d2t_singular/presolve_lib.doc:331 @end smallexample @c ---end content linearpart--- @c ------------------- tolessvars ------------- @node tolessvars, solvelinearpart, linearpart, presolve_lib @subsubsection tolessvars @cindex tolessvars @c ---content tolessvars--- Procedure from library @code{presolve.lib} (@pxref{presolve_lib}). @table @asis @item @strong{Usage:} tolessvars(id [,s1,s2] ); id poly/ideal/vector/module/matrix, s1,s2=strings@* s1: name of new ring,@* s2: new ordering@* (default: s1="R(n)" where n is the # of vars in the new ring, s2="dp" or "ds" depending whether the first block of the old ordering is a p- resp. an s-ordering) @item @strong{Create:} nothing, if id contains all vars of the basering.@* Else, create a ring with same char as the basering, but possibly less variables (only those variables which actually occur in id) and map id to the new ring, which will be the basering after the proc has finished. @item @strong{Display:} If printlevel >=0, display ideal of vars, which have been omitted from the old ring @item @strong{Return:} the original ideal id (see NOTE) @item @strong{Note:} You must not type, say, 'ideal id=tolessvars(id);' since the ring to which 'id' would belong will only be defined by the r.h.s.. But you may type 'def id=tolessvars(id);' or 'list id=tolessvars(id);' since then 'id' does not a priory belong to a ring, its type will be defined by the right hand side. Moreover, do not use a name which occurs in the old ring, for the same reason. @end table @strong{Example:} @smallexample @c reused example tolessvars d2t_singular/presolve_lib.doc:384 LIB "presolve.lib"; ring r = 0,(x,y,z),dp; ideal i = y2-x3,x-3,y-2x; def j = tolessvars(i,"R_r","lp"); @expansion{} @expansion{} // variables which did not occur: @expansion{} z @expansion{} // basering is now R_r show(basering); @expansion{} // ring: (0),(x,y),(lp(2),C); @expansion{} // minpoly = 0 @expansion{} // objects belonging to this ring: @expansion{} // j [0] ideal, 3 generator(s) j; @expansion{} j[1]=-x3+y2 @expansion{} j[2]=x-3 @expansion{} j[3]=-2x+y kill R_r; @c end example tolessvars d2t_singular/presolve_lib.doc:384 @end smallexample @c ---end content tolessvars--- @c ------------------- solvelinearpart ------------- @node solvelinearpart, sortandmap, tolessvars, presolve_lib @subsubsection solvelinearpart @cindex solvelinearpart @c ---content solvelinearpart--- Procedure from library @code{presolve.lib} (@pxref{presolve_lib}). @table @asis @item @strong{Usage:} solvelinearpart(id [,n] ); id=ideal/module, n=integer,@* (default: n=0) @item @strong{Return:} (interreduced) generators of id of degree <=1 in reduced triangular form if n=0 [non-reduced triangular form if n!=0] @item @strong{Assume:} monomial ordering is a global ordering (p-ordering) @item @strong{Note:} may be used to solve a system of linear equations see proc @code{gauss_row} from 'matrix.lib' for a different method @item @strong{Warning:} the result is very likely to be false for 'real' coefficients, use char 0 instead! @end table @strong{Example:} @smallexample @c reused example solvelinearpart d2t_singular/presolve_lib.doc:426 LIB "presolve.lib"; // Solve the system of linear equations: // 3x + y + z - u = 2 // 3x + 8y + 6z - 7u = 1 // 14x + 10y + 6z - 7u = 0 // 7x + 4y + 3z - 3u = 3 ring r = 0,(x,y,z,u),lp; ideal i= 3x + y + z - u, 13x + 8y + 6z - 7u, 14x + 10y + 6z - 7u, 7x + 4y + 3z - 3u; ideal j= 2,1,0,3; j = i-j; // difference of 1x4 matrices // compute reduced triangular form, setting solvelinearpart(j); // the RHS equal 0 gives the solutions! @expansion{} _[1]=u-4 @expansion{} _[2]=z-4 @expansion{} _[3]=y+1 @expansion{} _[4]=x-1 solvelinearpart(j,1); ""; // triangular form, not reduced @expansion{} _[1]=u-4 @expansion{} _[2]=3z-8u+20 @expansion{} _[3]=18y-6z+7u+14 @expansion{} _[4]=13x+8y+6z-7u-1 @expansion{} @c end example solvelinearpart d2t_singular/presolve_lib.doc:426 @end smallexample @c ---end content solvelinearpart--- @c ------------------- sortandmap ------------- @node sortandmap, sortvars, solvelinearpart, presolve_lib @subsubsection sortandmap @cindex sortandmap @c ---content sortandmap--- Procedure from library @code{presolve.lib} (@pxref{presolve_lib}). @table @asis @item @strong{Usage:} sortandmap(id,s1,s2[,n1,p1,n2,p2...,o1,m1,o2,m2...]);@* id=poly/ideal/vector/module,@* s1,s2 = strings (names for new ring and mapped id),@* p1,p2,...= polynomials (product of variables),@* n1,n2,...= integers,@* o1,o2,...= strings,@* m1,m2,...= integers@* (default: p1=product of all vars, n1=0, o1="dp",m1=0) @*the last pi (containing the remaining vars) may be omitted @item @strong{Create:} a new ring and map id into it, the new ring has same char as basering but with new ordering and vars sorted in the following manner: @format - each block of vars occurring in pi is sorted w.r.t. its complexity in id, - ni controls the sorting in i-th block (= vars occurring in pi): ni=0 (resp.!=0) means that less (resp. more) complex vars come first - oi and mi define the monomial ordering of the i-th block: if mi =0, oi=ordstr(i-th block) if mi!=0, the ordering of the i-th block itself is a blockordering, each subblock having ordstr=oi, such that vars of same complexity are in one block @end format Note that only simple ordstrings oi are allowed: @*"lp","dp","Dp","ls","ds","Ds". @item @strong{Return:} nothing @item @strong{Note:} We define a variable x to be more complex than y (with respect to id) if val(x) > val(y) lexicographically, where val(x) denotes the valuation vector of x:@* consider id as list of polynomials in x with coefficients in the remaining variables. Then:@* val(x) = (maximal occurring power of x, # of all monomials in leading coefficient, # of all monomials in coefficient of next smaller power of x,...). @end table @strong{Example:} @smallexample @c reused example sortandmap d2t_singular/presolve_lib.doc:498 LIB "presolve.lib"; ring s = 32003,(x,y,z),dp; ideal i=x3+y2,xz+z2; sortandmap(i,"R_r","i"); // i is now an ideal in the new basering R_r show(R_r); @expansion{} // ring: (32003),(y,z,x),(dp(3),C); @expansion{} // minpoly = 0 @expansion{} // objects belonging to this ring: @expansion{} // i [0] ideal, 2 generator(s) kill R_r; setring s; sortandmap(i,"R_r","i",1,xy,0,z,0,"ds",0,"lp",0); show(R_r); @expansion{} // ring: (32003),(x,y,z),(ds(2),lp(1),C); @expansion{} // minpoly = 0 @expansion{} // objects belonging to this ring: @expansion{} // i [0] ideal, 2 generator(s) kill R_r; @c end example sortandmap d2t_singular/presolve_lib.doc:498 @end smallexample @c ---end content sortandmap--- @c ------------------- sortvars ------------- @node sortvars, shortid, sortandmap, presolve_lib @subsubsection sortvars @cindex sortvars @c ---content sortvars--- Procedure from library @code{presolve.lib} (@pxref{presolve_lib}). @table @asis @item @strong{Usage:} sortvars(id[,n1,p1,n2,p2,...]);@* id=poly/ideal/vector/module,@* p1,p2,...= polynomials (product of vars),@* n1,n2,...=integers@* (default: p1=product of all vars, n1=0) @*the last pi (containing the remaining vars) may be omitted @item @strong{Compute:} sort variables with respect to their complexity in id @item @strong{Return:} list of two elements, an ideal and a list: @format [1]: ideal, variables of basering sorted w.r.t their complexity in id ni controls the ordering in i-th block (= vars occurring in pi): ni=0 (resp.!=0) means that less (resp. more) complex vars come first [2]: a list with 4 entries for each pi: ideal ai : vars of pi in correct order, intvec vi: permutation vector describing the ordering in ai, intmat Mi: valuation matrix of ai, the columns of Mi being the valuation vectors of the vars in ai intvec wi: size of 1-st, 2-nd,... block of identical columns of Mi (vars with same valuation) @end format @item @strong{Note:} We define a variable x to be more complex than y (with respect to id) if val(x) > val(y) lexicographically, where val(x) denotes the valuation vector of x:@* consider id as list of polynomials in x with coefficients in the remaining variables. Then:@* val(x) = (maximal occurring power of x, # of all monomials in leading coefficient, # of all monomials in coefficient of next smaller power of x,...). @end table @strong{Example:} @smallexample @c reused example sortvars d2t_singular/presolve_lib.doc:560 LIB "presolve.lib"; ring s=0,(x,y,z,w),dp; ideal i = x3+y2+yw2,xz+z2,xyz-w2; sortvars(i,0,xy,1,zw); @expansion{} [1]: @expansion{} _[1]=y @expansion{} _[2]=x @expansion{} _[3]=w @expansion{} _[4]=z @expansion{} [2]: @expansion{} [1]: @expansion{} _[1]=y @expansion{} _[2]=x @expansion{} [2]: @expansion{} 2,1 @expansion{} [3]: @expansion{} 2,3, @expansion{} 1,1, @expansion{} 2,0, @expansion{} 0,2 @expansion{} [4]: @expansion{} 1,1 @expansion{} [5]: @expansion{} _[1]=w @expansion{} _[2]=z @expansion{} [6]: @expansion{} 2,1 @expansion{} [7]: @expansion{} 2,2, @expansion{} 2,1, @expansion{} 0,2 @expansion{} [8]: @expansion{} 1,1 @c end example sortvars d2t_singular/presolve_lib.doc:560 @end smallexample @c ---end content sortvars--- @c ------------------- shortid ------------- @node shortid, valvars, sortvars, presolve_lib @subsubsection shortid @cindex shortid @c ---content shortid--- Procedure from library @code{presolve.lib} (@pxref{presolve_lib}). @table @asis @item @strong{Usage:} shortid(id,n[,e]); id= ideal/module, n,e=integers @item @strong{Return:} - if called with two arguments or e=0: @* same type as id, containing generators of id having <= n terms. @* - if called with three arguments and e!=0: @* a list L: @* L[1]: same type as id, containing generators of id having <= n terms. @* L[2]: number of corresponding generator of id @item @strong{Note:} May be used to compute partial standard basis in case id is to hard @end table @strong{Example:} @smallexample @c reused example shortid d2t_singular/presolve_lib.doc:594 LIB "presolve.lib"; ring s=0,(x,y,z,w),dp; ideal i = (x3+y2+yw2)^2,(xz+z2)^2,xyz-w2-xzw; shortid(i,3); @expansion{} _[1]=x2z2+2xz3+z4 @expansion{} _[2]=xyz-xzw-w2 @c end example shortid d2t_singular/presolve_lib.doc:594 @end smallexample @c ---end content shortid--- @c ------------------- valvars ------------- @node valvars, idealSimplify, shortid, presolve_lib @subsubsection valvars @cindex valvars @c ---content valvars--- Procedure from library @code{presolve.lib} (@pxref{presolve_lib}). @table @asis @item @strong{Usage:} valvars(id[,n1,p1,n2,p2,...]);@* id=poly/ideal/vector/module,@* p1,p2,...= polynomials (product of vars),@* n1,n2,...= integers, ni controls the ordering of vars occurring in pi: ni=0 (resp.!=0) means that less (resp. more) complex vars come first@* (default: p1=product of all vars, n1=0) @*the last pi (containing the remaining vars) may be omitted @item @strong{Compute:} valuation (complexity) of variables with respect to id.@* ni controls the ordering of vars occurring in pi:@* ni=0 (resp.!=0) means that less (resp. more) complex vars come first. @item @strong{Return:} list with 3 entries: @format [1]: intvec, say v, describing the permutation such that the permuted ringvariables are ordered with respect to their complexity in id [2]: list of intvecs, i-th intvec, say v(i) describing permutation of vars in a(i) such that v=v(1),v(2),... [3]: list of ideals and intmat's, say a(i) and M(i), where a(i): factors of pi, M(i): valuation matrix of a(i), such that the j-th column of M(i) is the valuation vector of j-th generator of a(i) @end format @item @strong{Note:} Use @code{sortvars} in order to actually sort the variables! We define a variable x to be more complex than y (with respect to id) if val(x) > val(y) lexicographically, where val(x) denotes the valuation vector of x:@* consider id as list of polynomials in x with coefficients in the remaining variables. Then:@* val(x) = (maximal occurring power of x, # of all monomials in leading coefficient, # of all monomials in coefficient of next smaller power of x,...). @end table @strong{Example:} @smallexample @c reused example valvars d2t_singular/presolve_lib.doc:654 LIB "presolve.lib"; ring s=0,(x,y,z,a,b),dp; ideal i=ax2+ay3-b2x,abz+by2; valvars (i,0,xyz); @expansion{} [1]: @expansion{} 3,1,2,4,5 @expansion{} [2]: @expansion{} [1]: @expansion{} 3,1,2 @expansion{} [2]: @expansion{} 1,2 @expansion{} [3]: @expansion{} [1]: @expansion{} _[1]=x @expansion{} _[2]=y @expansion{} _[3]=z @expansion{} [2]: @expansion{} 2,3,1, @expansion{} 1,1,1, @expansion{} 1,1,0 @expansion{} [3]: @expansion{} _[1]=a @expansion{} _[2]=b @expansion{} [4]: @expansion{} 1,2, @expansion{} 3,1, @expansion{} 0,2 @c end example valvars d2t_singular/presolve_lib.doc:654 @end smallexample @c ---end content valvars--- @c ------------------- idealSimplify ------------- @node idealSimplify, idealSplit, valvars, presolve_lib @subsubsection idealSimplify @cindex idealSimplify @c ---content idealSimplify--- Procedure from library @code{presolve.lib} (@pxref{presolve_lib}). @table @asis @item @strong{Usage:} idealSimplify(id); id ideal @item @strong{Return:} ideal I = eliminate(Id,m) m is a product of variables which are only linearly involved in the generators of id @end table @strong{Example:} @smallexample @c reused example idealSimplify d2t_singular/presolve_lib.doc:681 LIB "presolve.lib"; ring r=0,(x,y,z,w,t),dp; ideal i= t, x3+y2+2z, x2+3y, x2+y2+z2, w2+z; ideal j=idealSimplify(i); ideal k=eliminate(i,zyt); reduce(k,std(j)); @expansion{} _[1]=0 @expansion{} _[2]=0 reduce(j,std(k)); @expansion{} _[1]=0 @expansion{} _[2]=0 @c end example idealSimplify d2t_singular/presolve_lib.doc:681 @end smallexample @c ---end content idealSimplify--- @c ------------------- idealSplit ------------- @node idealSplit,, idealSimplify, presolve_lib @subsubsection idealSplit @cindex idealSplit @c ---content idealSplit--- Procedure from library @code{presolve.lib} (@pxref{presolve_lib}). @table @asis @item @strong{Usage:} idealSplit(id,timeF,timeS); id ideal and optional @*timeF ,timeS integers to bound the time which can be used for factorization resp. standard basis computation @item @strong{Return:} a list of ideals such that their intersection @*has the same radical as id @end table @strong{Example:} @smallexample @c reused example idealSplit d2t_singular/presolve_lib.doc:718 LIB "presolve.lib"; ring r=32003,(b,s,t,u,v,w,x,y,z),dp; ideal i= bv+su, bw+tu, sw+tv, by+sx, bz+tx, sz+ty, uy+vx, uz+wx, vz+wy, bvz; idealSplit(i); @expansion{} [1]: @expansion{} _[1]=x @expansion{} _[2]=u @expansion{} _[3]=t @expansion{} _[4]=s @expansion{} _[5]=b @expansion{} _[6]=wy+vz @expansion{} [2]: @expansion{} _[1]=z @expansion{} _[2]=w @expansion{} _[3]=t @expansion{} _[4]=s @expansion{} _[5]=b @expansion{} _[6]=vx+uy @expansion{} [3]: @expansion{} _[1]=z @expansion{} _[2]=x @expansion{} _[3]=w @expansion{} _[4]=u @expansion{} _[5]=t @expansion{} _[6]=b @expansion{} [4]: @expansion{} _[1]=z @expansion{} _[2]=y @expansion{} _[3]=x @expansion{} _[4]=t @expansion{} _[5]=s @expansion{} _[6]=b @expansion{} [5]: @expansion{} _[1]=z @expansion{} _[2]=y @expansion{} _[3]=x @expansion{} _[4]=u @expansion{} _[5]=b @expansion{} _[6]=tv+sw @expansion{} [6]: @expansion{} _[1]=z @expansion{} _[2]=y @expansion{} _[3]=x @expansion{} _[4]=w @expansion{} _[5]=t @expansion{} _[6]=su+bv @expansion{} [7]: @expansion{} _[1]=w @expansion{} _[2]=v @expansion{} _[3]=u @expansion{} _[4]=t @expansion{} _[5]=s @expansion{} _[6]=b @expansion{} [8]: @expansion{} _[1]=x @expansion{} _[2]=w @expansion{} _[3]=v @expansion{} _[4]=u @expansion{} _[5]=b @expansion{} _[6]=ty+sz @expansion{} [9]: @expansion{} _[1]=z @expansion{} _[2]=w @expansion{} _[3]=v @expansion{} _[4]=u @expansion{} _[5]=t @expansion{} _[6]=sx+by @expansion{} [10]: @expansion{} _[1]=z @expansion{} _[2]=y @expansion{} _[3]=x @expansion{} _[4]=w @expansion{} _[5]=v @expansion{} _[6]=u @expansion{} [11]: @expansion{} _[1]=y @expansion{} _[2]=v @expansion{} _[3]=t @expansion{} _[4]=s @expansion{} _[5]=b @expansion{} _[6]=wx+uz @expansion{} [12]: @expansion{} _[1]=y @expansion{} _[2]=x @expansion{} _[3]=v @expansion{} _[4]=u @expansion{} _[5]=s @expansion{} _[6]=b @expansion{} [13]: @expansion{} _[1]=z @expansion{} _[2]=y @expansion{} _[3]=x @expansion{} _[4]=v @expansion{} _[5]=s @expansion{} _[6]=tu+bw @expansion{} [14]: @expansion{} _[1]=z @expansion{} _[2]=y @expansion{} _[3]=w @expansion{} _[4]=v @expansion{} _[5]=t @expansion{} _[6]=s @expansion{} [15]: @expansion{} _[1]=y @expansion{} _[2]=w @expansion{} _[3]=v @expansion{} _[4]=u @expansion{} _[5]=s @expansion{} _[6]=tx+bz @c end example idealSplit d2t_singular/presolve_lib.doc:718 @end smallexample @c ---end content idealSplit--- texi2html-1.82/test/singular_manual/d2t_singular/spcurve_lib.tex0000644000175000017500000003257211264347126027043 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/spcurve_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/spcurve_lib.doc INSTEAD @c library version: (1.15.2.1,2002/02/20) @c library file: ../Singular/LIB/spcurve.lib @cindex spcurve.lib @cindex spcurve_lib @table @asis @item @strong{Library:} spcurve.lib @item @strong{Purpose:} Deformations and Invariants of CM-codim 2 Singularities @item @strong{Author:} Anne Fruehbis-Krueger, anne@@mathematik.uni-kl.de @end table @strong{Procedures:} @menu * isCMcod2:: presentation matrix of the ideal i, if i is CM * CMtype:: Cohen-Macaulay type of the ideal i * matrixT1:: 1st order deformation T1 in matrix description * semiCMcod2:: semiuniversal deformation of maximal minors of M * discr:: discriminant of semiuniversal deformation * qhmatrix:: weights if M is quasihomogeneous * relweight:: relative matrix weight of N w.r.t. weights (W,a) * posweight:: deformation of coker(M) of non-negative weight * KSpencerKernel:: kernel of the Kodaira-Spencer map @end menu @c ---end content LibInfo--- @c ------------------- isCMcod2 ------------- @node isCMcod2, CMtype,, spcurve_lib @subsubsection isCMcod2 @cindex isCMcod2 @c ---content isCMcod2--- Procedure from library @code{spcurve.lib} (@pxref{spcurve_lib}). @table @asis @item @strong{Usage:} isCMcod2(i); i an ideal @item @strong{Return:} presentation matrix of i, if i is Cohen-Macaulay of codimension 2 @* a zero matrix otherwise @end table @strong{Example:} @smallexample @c computed example isCMcod2 d2t_singular/spcurve_lib.doc:48 LIB "spcurve.lib"; ring r=32003,(x,y,z),ds; ideal i=xz,yz,x^3-y^4; print(isCMcod2(i)); @expansion{} -y,-x2, @expansion{} x, y3, @expansion{} 0, z @c end example isCMcod2 d2t_singular/spcurve_lib.doc:48 @end smallexample @c ---end content isCMcod2--- @c ------------------- CMtype ------------- @node CMtype, matrixT1, isCMcod2, spcurve_lib @subsubsection CMtype @cindex CMtype @c ---content CMtype--- Procedure from library @code{spcurve.lib} (@pxref{spcurve_lib}). @table @asis @item @strong{Usage:} CMtype(i); i an ideal, CM of codimension 2 @item @strong{Return:} Cohen-Macaulay type of i (integer) @*(-1, if i is not Cohen-Macaulay of codimension 2) @end table @strong{Example:} @smallexample @c computed example CMtype d2t_singular/spcurve_lib.doc:75 LIB "spcurve.lib"; ring r=32003,(x,y,z),ds; ideal i=xy,xz,yz; CMtype(i); @expansion{} 2 @c end example CMtype d2t_singular/spcurve_lib.doc:75 @end smallexample @c ---end content CMtype--- @c ------------------- matrixT1 ------------- @node matrixT1, semiCMcod2, CMtype, spcurve_lib @subsubsection matrixT1 @cindex matrixT1 @c ---content matrixT1--- Procedure from library @code{spcurve.lib} (@pxref{spcurve_lib}). @table @asis @item @strong{Usage:} matrixT1(M,n); M matrix, n integer @item @strong{Assume:} M is a presentation matrix of an ideal i, CM of codimension 2; consider i as a family of ideals in a ring in the first n variables where the remaining variables are considered as parameters @item @strong{Return:} list consisting of the k x (k+1) matrix M and a module K_M such that T1=Mat(k,k+1;R)/K_M is the space of first order deformations of i @end table @strong{Example:} @smallexample @c computed example matrixT1 d2t_singular/spcurve_lib.doc:108 LIB "spcurve.lib"; ring r=32003,(x(1),x(2),x(3)),ds; ideal curve=x(1)*x(2),x(1)*x(3),x(2)*x(3); matrix M=isCMcod2(curve); matrixT1(M,3); @expansion{} [1]: @expansion{} _[1,1]=0 @expansion{} _[1,2]=-x(3) @expansion{} _[2,1]=-x(2) @expansion{} _[2,2]=x(2) @expansion{} _[3,1]=x(1) @expansion{} _[3,2]=0 @expansion{} [2]: @expansion{} _[1]=gen(5) @expansion{} _[2]=gen(4)-gen(3) @expansion{} _[3]=-gen(2) @expansion{} _[4]=x(1)*gen(5)-x(2)*gen(3) @expansion{} _[5]=x(1)*gen(6)-x(2)*gen(4) @expansion{} _[6]=x(2)*gen(3)-x(3)*gen(1) @expansion{} _[7]=x(2)*gen(4)-x(3)*gen(2) @expansion{} _[8]=-x(3)*gen(2) @expansion{} _[9]=x(2)*gen(2)-x(2)*gen(1) @expansion{} _[10]=x(1)*gen(1) @expansion{} _[11]=-x(3)*gen(4) @expansion{} _[12]=x(2)*gen(4)-x(2)*gen(3) @expansion{} _[13]=x(1)*gen(3) @expansion{} _[14]=-x(3)*gen(6) @expansion{} _[15]=x(2)*gen(6)-x(2)*gen(5) @expansion{} _[16]=x(1)*gen(5) @c end example matrixT1 d2t_singular/spcurve_lib.doc:108 @end smallexample @c ---end content matrixT1--- @c ------------------- semiCMcod2 ------------- @node semiCMcod2, discr, matrixT1, spcurve_lib @subsubsection semiCMcod2 @cindex semiCMcod2 @c ---content semiCMcod2--- Procedure from library @code{spcurve.lib} (@pxref{spcurve_lib}). @table @asis @item @strong{Usage:} semiCMcod2(M,t1); M matrix, t1 module @item @strong{Assume:} M is a presentation matrix of an ideal i, CM of codimension 2, and t1 is a presentation of the space of first order deformations of i ((M,t1) as returned by the procedure matrixT1) @item @strong{Create:} new basering with name rneu @item @strong{Return:} ideal in rneu describing the semiuniversal deformation of i @item @strong{Note:} The current basering should not contain any variables named A(j) where j is some integer! @end table @strong{Example:} @smallexample @c computed example semiCMcod2 d2t_singular/spcurve_lib.doc:147 LIB "spcurve.lib"; ring r=32003,(x(1),x(2),x(3)),ds; ideal curve=x(1)*x(2),x(1)*x(3),x(2)*x(3); matrix M=isCMcod2(curve); list l=matrixT1(M,3); semiCMcod2(l[1],std(l[2])); @expansion{} _[1]=A(2)*A(3)-x(2)*A(3)-x(1)*x(2) @expansion{} _[2]=A(1)*A(3)+x(1)*x(3) @expansion{} _[3]=-x(2)*A(1)-x(3)*A(2)+x(2)*x(3) @c end example semiCMcod2 d2t_singular/spcurve_lib.doc:147 @end smallexample @c ---end content semiCMcod2--- @c ------------------- discr ------------- @node discr, qhmatrix, semiCMcod2, spcurve_lib @subsubsection discr @cindex discr @c ---content discr--- Procedure from library @code{spcurve.lib} (@pxref{spcurve_lib}). @table @asis @item @strong{Usage:} discr(sem,n); sem ideal, n integer @item @strong{Assume:} sem is the versal deformation of an ideal of codimension 2. @* the first n variables of the ring are treated as variables all the others as parameters @item @strong{Return:} ideal describing the discriminant @item @strong{Note:} This is not a powerful algorithm! @end table @strong{Example:} @smallexample @c computed example discr d2t_singular/spcurve_lib.doc:183 LIB "spcurve.lib"; ring r=32003,(x(1),x(2),x(3)),ds; ideal curve=x(1)*x(2),x(1)*x(3),x(2)*x(3); matrix M=isCMcod2(curve); list l=matrixT1(M,3); def sem=semiCMcod2(l[1],std(l[2])); basering; @expansion{} // characteristic : 32003 @expansion{} // number of vars : 6 @expansion{} // block 1 : ordering ds @expansion{} // : names x(1) x(2) x(3) @expansion{} // block 2 : ordering dp @expansion{} // : names A(1) A(2) A(3) @expansion{} // block 3 : ordering C discr(sem,3); @expansion{} _[1]=A(1)*A(2)*A(3) @c end example discr d2t_singular/spcurve_lib.doc:183 @end smallexample @c ---end content discr--- @c ------------------- qhmatrix ------------- @node qhmatrix, relweight, discr, spcurve_lib @subsubsection qhmatrix @cindex qhmatrix @c ---content qhmatrix--- Procedure from library @code{spcurve.lib} (@pxref{spcurve_lib}). @table @asis @item @strong{Usage:} qhmatrix(M); M a k x (k+1) matrix @item @strong{Return:} list, consisting of an integer vector containing the weights of the variables of the basering and an integer matrix giving the weights of the entries of M, if M is quasihomogeneous; zero integer vector and zero integer matrix, if M is not quasihomogeneous, i.e. does not allow row and column weights @end table @strong{Example:} @smallexample @c computed example qhmatrix d2t_singular/spcurve_lib.doc:217 LIB "spcurve.lib"; ring r=0,(x,y,z),ds; matrix M[3][2]=z,0,y,x,x^3,y; qhmatrix(M); @expansion{} [1]: @expansion{} 1,2,1 @expansion{} [2]: @expansion{} 1,0, @expansion{} 2,1, @expansion{} 3,2 pmat(M); @expansion{} z, 0, @expansion{} y, x, @expansion{} x3, y @c end example qhmatrix d2t_singular/spcurve_lib.doc:217 @end smallexample @c ---end content qhmatrix--- @c ------------------- relweight ------------- @node relweight, posweight, qhmatrix, spcurve_lib @subsubsection relweight @cindex relweight @c ---content relweight--- Procedure from library @code{spcurve.lib} (@pxref{spcurve_lib}). @table @asis @item @strong{Assume:} N is a non-zero matrix @*W is an integer matrix of the same size as N @*a is an integer vector giving the weights of the variables @item @strong{Return:} integer, max(a-weighted order(N_ij) - W_ij | all entries ij) @* string "ERROR" if sizes do not match @end table @strong{Example:} @smallexample @c computed example relweight d2t_singular/spcurve_lib.doc:247 LIB "spcurve.lib"; ring r=32003,(x,y,z),ds; matrix N[2][3]=z,0,y,x,x^3,y; intmat W[2][3]=1,1,1,1,1,1; intvec a=1,1,1; relweight(N,W,a); @expansion{} 2 @c end example relweight d2t_singular/spcurve_lib.doc:247 @end smallexample @c ---end content relweight--- @c ------------------- posweight ------------- @node posweight, KSpencerKernel, relweight, spcurve_lib @subsubsection posweight @cindex posweight @c ---content posweight--- Procedure from library @code{spcurve.lib} (@pxref{spcurve_lib}). @table @asis @item @strong{Usage:} posweight(M,t1,n[,s]); M matrix, t1 module, n int, s string @* n=0 : all deformations of non-negative weight @* n=1 : only non-constant deformations of non-negative weight @* n=2 : all deformations of positive weight @* As an optional parameter the name of a new ring may be specified. @item @strong{Assume:} M is a presentation matrix of a Cohen-Macaulay codimension 2 ideal and t1 is its T1 space in matrix notation @item @strong{Create:} new basering (default name: rneu); a different name for this ring may be given as a 4th parameter @item @strong{Return:} list, consisting of a presentation matrix describing the deformation given by the generators of T1 of non-negative/positive weight and the weight vector for the new variables @item @strong{Note:} The current basering should not contain any variables named T(i) where i is some integer! @end table @strong{Example:} @smallexample @c computed example posweight d2t_singular/spcurve_lib.doc:294 LIB "spcurve.lib"; ring r=32003,(x(1),x(2),x(3)),ds; ideal curve=(x(3)-x(1)^2)*x(3),(x(3)-x(1)^2)*x(2),x(2)^2-x(1)^7*x(3); matrix M=isCMcod2(curve); list l=matrixT1(M,3); list li=posweight(l[1],std(l[2]),0); pmat(li[1]); @expansion{} T(2)+x(1)*T(1), -x(3)+x(1)^2, @expansion{} -x(3), x(2), @expansion{} x(2), -x(1)^7 li[2]; @expansion{} 3,1 @c end example posweight d2t_singular/spcurve_lib.doc:294 @end smallexample @c ---end content posweight--- @c ------------------- KSpencerKernel ------------- @node KSpencerKernel,, posweight, spcurve_lib @subsubsection KSpencerKernel @cindex KSpencerKernel @c ---content KSpencerKernel--- Procedure from library @code{spcurve.lib} (@pxref{spcurve_lib}). @table @asis @item @strong{Usage:} KSpencerKernel(M[,s][,v]); M matrix, s string, v intvec @* optional parameters (please specify in this order, if both are present): @** s = first of the names of the new rings @*e.g. "R" leads to ring names R and R1 @** v of size n(n+1) leads to the following module ordering @* gen(v[1]) > gen(v[2]) > ... > gen(v[n(n+1)]) where the matrix entry ij corresponds to gen((i-1)*n+j) @item @strong{Assume:} M is a quasihomogeneous n x (n+1) matrix where the n minors define an isolated space curve singularity @item @strong{Create:} 2 new rings (default names: rneu and reneu) @*different ring names may be specified as a 2nd parameter @item @strong{Return:} coefficient matrix representing the kernel of the Kodaira- Spencer map of the family of non-negative deformations having the given singularity as special fibre @item @strong{Note:} * the initial basering should not contain variables with name e(i) or T(i), since those variable names will internally be used by the script @** setting an intvec with 5 entries and name watchProgress shows the progress of the computations: @* watchProgress[1]>0 => option(prot) in groebner commands @* watchProgress[2]>0 => trace output for highcorner @* watchProgress[3]>0 => output of deformed matrix @* watchProgress[4]>0 => result of elimination step @* watchProgress[4]>1 => trace output of multiplications with xyz and subsequent reductions @* watchProgress[5]>0 => matrix representing the kernel using print @end table @strong{Example:} @smallexample @c computed example KSpencerKernel d2t_singular/spcurve_lib.doc:355 LIB "spcurve.lib"; ring r=0,(x,y,z),ds; matrix M[3][2]=z-x^7,0,y^2,z,x^9,y; def KS=KSpencerKernel(M,"ar"); print(KS); @expansion{} T(7), 0, 0, 0, 0, 0, 0, 0, @expansion{} KS[2,1],6*T(3), 3*T(7), 0, 0, 0, 0, 0, @expansion{} KS[3,1],KS[3,2],KS[3,3],6*T(3),3*T(7),0, 0, 0, @expansion{} 10*T(4),8*T(1), 7*T(5), 5*T(2),4*T(6),2*T(8),2*T(3),T(7) nameof(basering); @expansion{} ar basering; @expansion{} // characteristic : 0 @expansion{} // number of vars : 17 @expansion{} // block 1 : ordering Ws @expansion{} // : names e(1) e(2) e(3) e(4) e(5) e(6) x y z @expansion{} // : weights -21 -10 -32 -21 -27 -16 3 16 21 @expansion{} // block 2 : ordering wp @expansion{} // : names T(1) T(2) T(3) T(4) T(5) T(6) T(7) T(8) @expansion{} // : weights 8 5 2 10 7 4 1 2 @expansion{} // block 3 : ordering C @c end example KSpencerKernel d2t_singular/spcurve_lib.doc:355 @end smallexample @c ---end content KSpencerKernel--- texi2html-1.82/test/singular_manual/d2t_singular/mregular_lib.tex0000644000175000017500000002003111264347126027155 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/mregular_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/mregular_lib.doc INSTEAD @c library version: (1.6.2.1,2002/02/20) @c library file: ../Singular/LIB/mregular.lib @cindex mregular.lib @cindex mregular_lib @table @asis @item @strong{Library:} mregular.lib @item @strong{Purpose:} Castelnuovo-Mumford Regularity of CM-Schemes and Curves @item @strong{Authors:} I.Bermejo, ibermejo@@ull.es @* Ph.Gimenez, pgimenez@@agt.uva.es @* G.-M.Greuel, greuel@@mathematik.uni-kl.de @item @strong{Overview:} A library for computing the Castelnuovo-Mumford regularity of a subscheme of the projective n-space that DOES NOT require the computation of a minimal graded free resolution of the saturated ideal defining the subscheme. The procedures are based on two papers by Isabel Bermejo and Philippe Gimenez: 'On Castelnuovo-Mumford regularity of projective curves' Proc.Amer.Math.Soc. 128(5) (2000), and 'Computing the Castelnuovo-Mumford regularity of some subschemes of Pn using quotients of monomial ideals', Proceedings of MEGA-2000, J. Pure Appl. Algebra (to appear). @*The algorithm assumes the variables to be in Noether position. @end table @strong{Procedures:} @menu * reg_CM:: regularity of arith. C-M subscheme V(id_sat) of Pn * reg_curve:: regularity of projective curve V(id_sat) in Pn * reg_moncurve:: regularity of projective monomial curve defined by li @end menu @c ---end content LibInfo--- @c ------------------- reg_CM ------------- @node reg_CM, reg_curve,, mregular_lib @subsubsection reg_CM @cindex reg_CM @c ---content reg_CM--- Procedure from library @code{mregular.lib} (@pxref{mregular_lib}). @table @asis @item @strong{Usage:} reg_CM (i); i ideal @item @strong{Return:} an integer, the Castelnuovo-Mumford regularity of i-sat. @item @strong{Assume:} i is a homogeneous ideal of the basering S=K[x(0)..x(n)] where the field K is infinite, and S/i-sat is Cohen-Macaulay. Assume that K[x(n-d),...,x(n)] is a Noether normalization of S/i-sat where d=dim S/i -1. If this is not the case, compute a Noether normalization e.g. by using the proc noetherNormal from algebra.lib. @item @strong{Note:} The output is reg(X)=reg(i-sat) where X is the arithmetically Cohen-Macaulay subscheme of the projective n-space defined by i. If printlevel > 0 (default = 0) additional information is displayed. In particular, the value of the regularity of the Hilbert function of S/i-sat is given. @end table @strong{Example:} @smallexample @c computed example reg_CM d2t_singular/mregular_lib.doc:68 LIB "mregular.lib"; ring s=0,x(0..5),dp; ideal i=x(2)^2-x(4)*x(5),x(1)*x(2)-x(0)*x(5),x(0)*x(2)-x(1)*x(4), x(1)^2-x(3)*x(5),x(0)*x(1)-x(2)*x(3),x(0)^2-x(3)*x(4); reg_CM(i); @expansion{} 2 // Additional information can be obtained as follows: printlevel = 1; reg_CM(i); @expansion{} // Ideal i of S defining an arithm. Cohen-Macaulay subscheme X of P5: @expansion{} // - dimension of X: 2 @expansion{} // - i is saturated: YES @expansion{} // - regularity of the Hilbert function of S/i-sat: -1 @expansion{} // - time for computing reg(X): 0 sec. @expansion{} // Castelnuovo-Mumford regularity of X: @expansion{} 2 @c end example reg_CM d2t_singular/mregular_lib.doc:68 @end smallexample @c ---end content reg_CM--- @c ------------------- reg_curve ------------- @node reg_curve, reg_moncurve, reg_CM, mregular_lib @subsubsection reg_curve @cindex reg_curve @c ---content reg_curve--- Procedure from library @code{mregular.lib} (@pxref{mregular_lib}). @table @asis @item @strong{Usage:} reg_curve (i[,e]); i ideal, e integer @item @strong{Return:} an integer, the Castelnuovo-Mumford regularity of i-sat. @item @strong{Assume:} i is a homogeneous ideal of the basering S=K[x(0)..x(n)] where the field K is infinite, and it defines a projective curve C in the projective n-space (dim(i)=2). We assume that K[x(n-1),x(n)] is a Noether normalization of S/i-sat. @*e=0: (default) @*Uses a random choice of an element of K when it is necessary. This is absolutely safe (if the element is bad, another random choice will be done until a good element is found). @*e=1: Substitutes the random choice of an element of K by a simple transcendental field extension of K. @item @strong{Note:} The output is the integer reg(C)=reg(i-sat). @*If printlevel > 0 (default = 0) additional information is displayed. In particular, says if C is arithmetically Cohen-Macaulay or not, determines in which step of a minimal graded free resolution of i-sat the regularity of C is attained, and sometimes gives the value of the regularity of the Hilbert function of S/i-sat (otherwise, an upper bound is given). @end table @strong{Example:} @smallexample @c computed example reg_curve d2t_singular/mregular_lib.doc:119 LIB "mregular.lib"; ring s = 0,(x,y,z,t),dp; // 1st example is Ex.2.5 in [Bermejo-Gimenez], Proc.Amer.Math.Soc. 128(5): ideal i = x17y14-y31, x20y13, x60-y36z24-x20z20t20; reg_curve(i); @expansion{} 72 // 2nd example is Ex.2.9 in [Bermejo-Gimenez], Proc.Amer.Math.Soc. 128(5): int k=43; ideal j=x17y14-y31,x20y13,x60-y36z24-x20z20t20,y41*z^k-y40*z^(k+1); reg_curve(j); @expansion{} 93 // Additional information can be obtained as follows: printlevel = 1; reg_curve(j); @expansion{} // Ideal i of S defining a projective curve C in P3: @expansion{} // - i is saturated: YES @expansion{} // - C is arithm. Cohen-Macaulay: NO @expansion{} // - reg(C) attained at the last step of a m.g.f.r. of i-sat: YES @expansion{} // - regularity of the Hilbert function of S/i-sat: 92 @expansion{} // - time for computing reg(C): 0 sec. @expansion{} // Castelnuovo-Mumford regularity of C: @expansion{} 93 @c end example reg_curve d2t_singular/mregular_lib.doc:119 @end smallexample @c ---end content reg_curve--- @c ------------------- reg_moncurve ------------- @node reg_moncurve,, reg_curve, mregular_lib @subsubsection reg_moncurve @cindex reg_moncurve @c ---content reg_moncurve--- Procedure from library @code{mregular.lib} (@pxref{mregular_lib}). @table @asis @item @strong{Usage:} reg_moncurve (a0,...,an) ; ai integers with a0=0 < a1 < ... < an=:d @item @strong{Return:} an integer, the Castelnuovo-Mumford regularity of the projective monomial curve C in Pn parametrically defined by: @*x(0)=t^d , x(1)=s^(a1)t^(d-a1), ... , x(n)=s^d. @item @strong{Assume:} a0=0 < a1 < ... < an are integers and the base field is infinite. @item @strong{Note:} The defining ideal I(C) in S is determined using elimination. The procedure reg_curve is improved in this case since one knows beforehand that the dimension is 2, that the variables are in Noether position, that I(C) is prime. @*If printlevel > 0 (default = 0) additional information is displayed. In particular, says if C is arithmetically Cohen-Macaulay or not, determines in which step of a minimal graded free resolution of I(C) the regularity is attained, and sometimes gives the value of the regularity of the Hilbert function of S/I(C) (otherwise, an upper bound is given). @end table @strong{Example:} @smallexample @c computed example reg_moncurve d2t_singular/mregular_lib.doc:170 LIB "mregular.lib"; // The 1st example is the twisted cubic: reg_moncurve(0,1,2,3); @expansion{} 2 // The 2nd. example is the non arithm. Cohen-Macaulay monomial curve in P4 // parametrized by: x(0)-s6,x(1)-s5t,x(2)-s3t3,x(3)-st5,x(4)-t6: reg_moncurve(0,1,3,5,6); @expansion{} 3 // Additional information can be obtained as follows: printlevel = 1; reg_moncurve(0,1,3,5,6); @expansion{} // Sequence of integers defining a monomial curve C in P4: @expansion{} // - time for computing ideal I(C) of S (elimination): 0 sec. @expansion{} // - C is arithm. Cohen-Macaulay: NO @expansion{} // - reg(C) attained at the last step of a m.g.f.r. of I(C): YES @expansion{} // - reg(C) attained at the second last step of a m.g.f.r. of I(C): YES @expansion{} // - regularity of the Hilbert function of S/I(C): 2 @expansion{} // - time for computing reg(C): 0 sec. @expansion{} // Castelnuovo-Mumford regularity of C: @expansion{} 3 @c end example reg_moncurve d2t_singular/mregular_lib.doc:170 @end smallexample @c ---end content reg_moncurve--- texi2html-1.82/test/singular_manual/d2t_singular/toric_lib.tex0000644000175000017500000001253411264347126026470 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/toric_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/toric_lib.doc INSTEAD @c library version: (1.11,2001/02/06) @c library file: ../Singular/LIB/toric.lib @cindex toric.lib @cindex toric_lib @table @asis @item @strong{Library:} toric.lib @item @strong{Purpose:} Standard Basis of Toric Ideals @item @strong{Author:} Christine Theis, email: ctheis@@math.uni-sb.de @end table @strong{Procedures:} @menu * toric_ideal:: computes the toric ideal of A * toric_std:: standard basis of I by a specialized Buchberger algorithm @end menu @c ---end content LibInfo--- @c ------------------- toric_ideal ------------- @node toric_ideal, toric_std,, toric_lib @subsubsection toric_ideal @cindex toric_ideal @c ---content toric_ideal--- Procedure from library @code{toric.lib} (@pxref{toric_lib}). @table @asis @item @strong{Usage:} toric_ideal(A,alg); A intmat, alg string @*toric_ideal(A,alg,prsv); A intmat, alg string, prsv intvec @item @strong{Return:} ideal: standard basis of the toric ideal of A @item @strong{Note:} These procedures return the standard basis of the toric ideal of A with respect to the term ordering in the current basering. Not all term orderings are supported: The usual global term orderings may be used, but no block orderings combining them. @*One may call the procedure with several different algorithms: @* - the algorithm of Conti/Traverso using elimination (ect), @* - the algorithm of Pottier (pt), @*- an algorithm of Bigatti/La Scala/Robbiano (blr), @*- the algorithm of Hosten/Sturmfels (hs), @*- the algorithm of DiBiase/Urbanke (du). @*The argument `alg' should be the abbreviation for an algorithm as above: ect, pt, blr, hs or du. If `alg' is chosen to be `blr' or `hs', the algorithm needs a vector with positive coefficients in the row space of A. @*If no row of A contains only positive entries, one has to use the second version of toric_ideal which takes such a vector as its third argument. @*For the mathematical background, see @ref{Toric ideals and integer programming}. @end table @strong{Example:} @smallexample @c computed example toric_ideal d2t_singular/toric_lib.doc:64 LIB "toric.lib"; ring r=0,(x,y,z),dp; // call with two arguments intmat A[2][3]=1,1,0,0,1,1; A; @expansion{} 1,1,0, @expansion{} 0,1,1 ideal I=toric_ideal(A,"du"); I; @expansion{} I[1]=xz-y I=toric_ideal(A,"blr"); @expansion{} ERROR: The chosen algorithm needs a positive vector in the row space of t\ he matrix. I; @expansion{} I[1]=0 // call with three arguments intvec prsv=1,2,1; I=toric_ideal(A,"blr",prsv); I; @expansion{} I[1]=xz-y @c end example toric_ideal d2t_singular/toric_lib.doc:64 @end smallexample @c inserted refs from d2t_singular/toric_lib.doc:80 @ifinfo @menu See also: * Toric ideals:: * intprog_lib:: * toric_lib:: * toric_std:: @end menu @end ifinfo @iftex @strong{See also:} @ref{Toric ideals}; @ref{intprog_lib}; @ref{toric_lib}; @ref{toric_std}. @end iftex @c end inserted refs from d2t_singular/toric_lib.doc:80 @c ---end content toric_ideal--- @c ------------------- toric_std ------------- @node toric_std,, toric_ideal, toric_lib @subsubsection toric_std @cindex toric_std @c ---content toric_std--- Procedure from library @code{toric.lib} (@pxref{toric_lib}). @table @asis @item @strong{Usage:} toric_std(I); I ideal @item @strong{Return:} ideal: standard basis of I @item @strong{Note:} This procedure computes the standard basis of I using a specialized Buchberger algorithm. The generating system by which I is given has to consist of binomials of the form x^u-x^v. There is no real check if I is toric. If I is generated by binomials of the above form, but not toric, toric_std computes an ideal `between' I and its saturation with respect to all variables. @*For the mathematical background, see @ref{Toric ideals and integer programming}. @end table @strong{Example:} @smallexample @c computed example toric_std d2t_singular/toric_lib.doc:114 LIB "toric.lib"; ring r=0,(x,y,z),wp(3,2,1); // call with toric ideal (of the matrix A=(1,1,1)) ideal I=x-y,x-z; ideal J=toric_std(I); J; @expansion{} J[1]=y-z @expansion{} J[2]=x-z // call with the same ideal, but badly chosen generators: // 1) not only binomials I=x-y,2x-y-z; J=toric_std(I); @expansion{} ERROR: Generator 2 of the input ideal is no difference of monomials. // 2) binomials whose monomials are not relatively prime I=x-y,xy-yz,y-z; J=toric_std(I); @expansion{} Warning: The monomials of generator 2 of the input ideal are not relative\ ly prime. J; @expansion{} J[1]=y-z @expansion{} J[2]=x-z // call with a non-toric ideal that seems to be toric I=x-yz,xy-z; J=toric_std(I); J; @expansion{} J[1]=y2-1 @expansion{} J[2]=x-yz // comparison with real standard basis and saturation ideal H=std(I); H; @expansion{} H[1]=x-yz @expansion{} H[2]=y2z-z LIB "elim.lib"; sat(H,xyz); @expansion{} [1]: @expansion{} _[1]=x-yz @expansion{} _[2]=y2-1 @expansion{} [2]: @expansion{} 1 @c end example toric_std d2t_singular/toric_lib.doc:114 @end smallexample @c inserted refs from d2t_singular/toric_lib.doc:140 @ifinfo @menu See also: * Toric ideals:: * intprog_lib:: * toric_ideal:: * toric_lib:: @end menu @end ifinfo @iftex @strong{See also:} @ref{Toric ideals}; @ref{intprog_lib}; @ref{toric_ideal}; @ref{toric_lib}. @end iftex @c end inserted refs from d2t_singular/toric_lib.doc:140 @c ---end content toric_std--- texi2html-1.82/test/singular_manual/d2t_singular/graphics_lib_noEx.tex0000644000175000017500000001075111264347126030140 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/graphics_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/graphics_lib.doc INSTEAD @c library version: (1.10,2001/02/19) @c library file: ../Singular/LIB/graphics.lib @cindex graphics.lib @cindex graphics_lib @table @asis @item @strong{Library:} graphics.lib @item @strong{Purpose:} Procedures to use Graphics with Mathematica @item @strong{Author:} Christian Gorzel, gorzelc@@math.uni-muenster.de @end table @strong{Procedures:} @menu * staircase:: Mathematica text for displaying staircase of I * mathinit:: string for loading Mathematica's ImplicitPlot * mplot:: Mathematica text for various plots @end menu @c ---end content LibInfo--- @c ------------------- staircase ------------- @node staircase, mathinit,, graphics_lib @subsubsection staircase @cindex staircase @c ---content staircase--- Procedure from library @code{graphics.lib} (@pxref{graphics_lib}). @table @asis @item @strong{Usage:} staircase(s,I); s a string, I ideal in two variables @item @strong{Return:} string with Mathematica input for displaying staircase diagrams of an ideal I, i.e. exponent vectors of the initial ideal of I @item @strong{Note:} ideal I should be given by a standard basis. Let s="" and copy and paste the result into a Mathematica notebook. @end table @strong{Example:} @smallexample @c skipped computation of example staircase d2t_singular/graphics_lib.doc:46 LIB "graphics.lib"; ring r0 = 0,(x,y),ls; ideal I = -1x2y6-1x4y2, 7x6y5+1/2x7y4+6x4y6; staircase("",std(I)); ring r1 = 0,(x,y),dp; ideal I = fetch(r0,I); staircase("",std(I)); ring r2 = 0,(x,y),wp(2,3); ideal I = fetch(r0,I); staircase("",std(I)); // Paste the output into a Mathematica notebook // active evalutation of the cell with SHIFT RETURN @end smallexample @c ---end content staircase--- @c ------------------- mathinit ------------- @node mathinit, mplot, staircase, graphics_lib @subsubsection mathinit @cindex mathinit @c ---content mathinit--- Procedure from library @code{graphics.lib} (@pxref{graphics_lib}). @table @asis @item @strong{Usage:} mathinit(); @item @strong{Return:} initializing string for loading Mathematica's ImplicitPlot @end table @strong{Example:} @smallexample @c skipped computation of example mathinit d2t_singular/graphics_lib.doc:80 LIB "graphics.lib"; mathinit(); // Paste the output into a Mathematica notebook // active evalutation of the cell with SHIFT RETURN @end smallexample @c ---end content mathinit--- @c ------------------- mplot ------------- @node mplot,, mathinit, graphics_lib @subsubsection mplot @cindex mplot @c ---content mplot--- Procedure from library @code{graphics.lib} (@pxref{graphics_lib}). @table @asis @item @strong{Usage:} mplot(fname, I [,I1,I2,..,s] ); fname=string; I,I1,I2,..=ideals, s=string representing the plot region.@* Use the ideals I1,I2,.. in order to produce multiple plots (they need to have the same number of entries as I!). @item @strong{Return:} string, text with Mathematica commands to display a plot @item @strong{Note:} The plotregion is defaulted to -1,1 around zero. @*For implicit given curves enter first the string returned by proc mathinit into Mathematica in order to load ImplicitPlot. The following conventions for I are used: @format - ideal with 2 entries in one variable means a parametrised plane curve, - ideal with 3 entries in one variable means a parametrised space curve, - ideal with 3 entries in two variables means a parametrised surface, - ideal with 2 entries in two variables means an implicit curve given as I[1]==I[2], - ideal with 1 entry (or one polynomial) in two variables means an implicit curve given as f == 0, @end format @end table @strong{Example:} @smallexample @c skipped computation of example mplot d2t_singular/graphics_lib.doc:124 LIB "graphics.lib"; // --------- plane curves ------------ ring rr0 = 0,x,dp; export rr0; ideal I = x3 + x, x2; ideal J = x2, -x+x3; mplot("",I,J,"-2,2"); // Paste the output into a Mathematica notebook // active evalutation of the cell with SHIFT RETURN // --------- space curves -------------- I = x3,-1/10x3+x2,x2; mplot("",I); // Paste the output into a Mathematica notebook // active evalutation of the cell with SHIFT RETURN // ----------- surfaces ------------------- ring rr1 = 0,(x,y),dp; export rr1; ideal J = xy,y,x2; mplot("",J,"-2,1","1,2"); // Paste the output into a Mathematica notebook // active evalutation of the cell with SHIFT RETURN kill rr0,rr1; @end smallexample @c ---end content mplot--- texi2html-1.82/test/singular_manual/d2t_singular/stratify_lib.tex0000644000175000017500000001355111264347126027215 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/stratify_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/stratify_lib.doc INSTEAD @c library version: (1.7.2.4,2002/04/11) @c library file: ../Singular/LIB/stratify.lib @cindex stratify.lib @cindex stratify_lib @table @asis @item @strong{Library:} stratify.lib @item @strong{Purpose:} Algorithmic Stratification for Unipotent Group-Actions @item @strong{Author:} Anne Fruehbis-Krueger, anne@@mathematik.uni-kl.de @item @strong{Overview:} This library provides an implementation of the algorithm of Greuel and Pfister introduced in the article . @end table @strong{Procedures:} @menu * prepMat:: list of submatrices corresp. to given filtration * stratify:: algorithmic stratification (main procedure) @end menu @c ---end content LibInfo--- @c ------------------- prepMat ------------- @node prepMat, stratify,, stratify_lib @subsubsection prepMat @cindex prepMat @c ---content prepMat--- Procedure from library @code{stratify.lib} (@pxref{stratify_lib}). @table @asis @item @strong{Usage:} prepMat(M,wr,ws,step); @*where M is a matrix, wr is an intvec of size ncols(M), ws an intvec of size nrows(M) and step is an integer @item @strong{Return:} 2 lists of submatrices corresponding to the filtrations specified by wr and ws @*the first list corresponds to the list for the filtration of AdA, i.e. the ranks of these matrices will be the r_i, the second one to the list for the filtration of L, i.e. the ranks of these matrices will be the s_i @item @strong{Note:} * the entries of the matrix M are M_ij=delta_i(x_j), @** wr is used to determine what subset of the set of all dx_i is generating AdF^l(A): @*if (k-1)*step <= wr[i] < k*step, then dx_i is in the set of generators of AdF^l(A) for all l>=k and the i-th column of M appears in each submatrix starting from the k-th @** ws is used to determine what subset of the set of all delta_i is generating Z_l(L): @*if (k-1)*step <= ws[i] < k*step, then delta_i is in the set of generators of Z_l(A) for l < k and the i-th row of M appears in each submatrix up to the (k-1)th @** the entries of wr and ws as well as step should be positive integers @end table @strong{Example:} @smallexample @c computed example prepMat d2t_singular/stratify_lib.doc:67 LIB "stratify.lib"; ring r=0,(t(1..3)),dp; matrix M[2][3]=0,t(1),3*t(2),0,0,t(1); print(M); @expansion{} 0,t(1),3*t(2), @expansion{} 0,0, t(1) intvec wr=1,3,5; intvec ws=2,4; int step=2; prepMat(M,wr,ws,step); @expansion{} [1]: @expansion{} [1]: @expansion{} _[1,1]=0 @expansion{} _[2,1]=0 @expansion{} [2]: @expansion{} _[1,1]=0 @expansion{} _[1,2]=t(1) @expansion{} _[2,1]=0 @expansion{} _[2,2]=0 @expansion{} [3]: @expansion{} _[1,1]=0 @expansion{} _[1,2]=t(1) @expansion{} _[1,3]=3*t(2) @expansion{} _[2,1]=0 @expansion{} _[2,2]=0 @expansion{} _[2,3]=t(1) @expansion{} [2]: @expansion{} [1]: @expansion{} _[1,1]=0 @expansion{} _[1,2]=t(1) @expansion{} _[1,3]=3*t(2) @expansion{} _[2,1]=0 @expansion{} _[2,2]=0 @expansion{} _[2,3]=t(1) @expansion{} [2]: @expansion{} _[1,1]=0 @expansion{} _[1,2]=0 @expansion{} _[1,3]=t(1) @c end example prepMat d2t_singular/stratify_lib.doc:67 @end smallexample @c ---end content prepMat--- @c ------------------- stratify ------------- @node stratify,, prepMat, stratify_lib @subsubsection stratify @cindex stratify @c ---content stratify--- Procedure from library @code{stratify.lib} (@pxref{stratify_lib}). @table @asis @item @strong{Usage:} stratify(M,wr,ws,step); @*where M is a matrix, wr is an intvec of size ncols(M), ws an intvec of size nrows(M) and step is an integer @item @strong{Return:} list of lists, each entry of the big list corresponds to one locally closed set and has the following entries: @*1) intvec giving the corresponding rs-vector @*2) ideal determining the closed set @*3) list d of polynomials determining the open set D(d[1]) empty list if there is more than one open set @*4-n) lists of polynomials determining open sets which all lead to the same rs-vector @item @strong{Note:} * ring ordering should be global, i.e. the ring should be a polynomial ring @** the entries of the matrix M are M_ij=delta_i(x_j), @** wr is used to determine what subset of the set of all dx_i is generating AdF^l(A): @*if (k-1)*step < wr[i] <= k*step, then dx_i is in the set of generators of AdF^l(A) for all l>=k @** ws is used to determine what subset of the set of all delta_i is generating Z_l(L): @*if (k-1)*step <= ws[i] < k*step, then delta_i is in the set of generators of Z_l(A) for l < k @** the entries of wr and ws as well as step should be positive integers @** the filtrations have to be known, no sanity checks concerning the filtrations are performed !!! @end table @strong{Example:} @smallexample @c computed example stratify d2t_singular/stratify_lib.doc:123 LIB "stratify.lib"; ring r=0,(t(1..3)),dp; matrix M[2][3]=0,t(1),3*t(2),0,0,t(1); intvec wr=1,3,5; intvec ws=2,4; int step=2; stratify(M,wr,ws,step); @expansion{} [1]: @expansion{} [1]: @expansion{} 0,0,0,0 @expansion{} [2]: @expansion{} _[1]=t(2) @expansion{} _[2]=t(1) @expansion{} [3]: @expansion{} [1]: @expansion{} 1 @expansion{} [2]: @expansion{} [1]: @expansion{} 0,1,0,1 @expansion{} [2]: @expansion{} _[1]=t(1) @expansion{} [3]: @expansion{} [1]: @expansion{} t(2) @expansion{} [2]: @expansion{} t(2) @expansion{} [3]: @expansion{} [1]: @expansion{} 1,2,1,2 @expansion{} [2]: @expansion{} _[1]=0 @expansion{} [3]: @expansion{} [1]: @expansion{} t(1) @expansion{} [2]: @expansion{} t(1) @c end example stratify d2t_singular/stratify_lib.doc:123 @end smallexample @c ---end content stratify--- texi2html-1.82/test/singular_manual/d2t_singular/ainvar_lib.tex0000644000175000017500000003006011264347126026622 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/ainvar_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/ainvar_lib.doc INSTEAD @c library version: (1.6.2.2,2002/04/12) @c library file: ../Singular/LIB/ainvar.lib @cindex ainvar.lib @cindex ainvar_lib @table @asis @item @strong{Library:} ainvar.lib @item @strong{Purpose:} Invariant Rings of the Additive Group @item @strong{Authors:} Gerhard Pfister (email: pfister@@mathematik.uni-kl.de), Gert-Martin Greuel (email: greuel@@mathematik.uni-kl.de) @end table @strong{Procedures:} @menu * invariantRing:: compute ring of invariants of (K,+)-action given by m * derivate:: derivation of f with respect to the vector field m * actionIsProper:: tests whether action defined by m is proper * reduction:: SAGBI reduction of p in the subring generated by I * completeReduction:: complete SAGBI reduction * localInvar:: invariant polynomial under m computed from p,... * furtherInvar:: compute further invariants of m from the given ones * sortier:: sorts generators of id by increasing leading terms @end menu @c ---end content LibInfo--- @c ------------------- invariantRing ------------- @node invariantRing, derivate,, ainvar_lib @subsubsection invariantRing @cindex invariantRing @c ---content invariantRing--- Procedure from library @code{ainvar.lib} (@pxref{ainvar_lib}). @table @asis @item @strong{Usage:} invariantRing(m,p,q,b[,r,pa]); m matrix, p,q poly, b,r int, pa string @item @strong{Assume:} p,q variables with m(p)=q and q invariant under m @*i.e. if p=x(i) and q=x(j) then m[j,1]=0 and m[i,1]=x(j) @item @strong{Return:} ideal, containing generators of the ring of invariants of the additive group (K,+) given by the vector field @format m = m[1,1]*d/dx(1) +...+ m[n,1]*d/dx(n). @end format If b>0 the computation stops after all invariants of degree <= b (and at least one of higher degree) are found or when all invariants are computed. @*If b<=0, the computation continues until all generators of the ring of invariants are computed (should be used only if the ring of invariants is known to be finitely generated otherwise the algorithm might not stop). @*If r=1 a different reduction is used which is sometimes faster (default r=0). @item @strong{Display:} if pa is given (any string as 5th or 6th argument), the computation pauses whenever new invariants are found and displays them @item @strong{Theory:} The algorithm to compute the ring of invariants works in char 0 or big enough characteristic. (K,+) acts as the exponential of the vector field defined by the matrix m. For background see G.-M. Greuel, G. Pfister, Geometric quotients of unipotent group actions, Proc. London Math. Soc. (3) 67, 75-105 (1993). @end table @strong{Example:} @smallexample @c computed example invariantRing d2t_singular/ainvar_lib.doc:75 LIB "ainvar.lib"; //Winkelmann: free action but Spec(k[x(1),...,x(5)]) --> Spec(invariant ring) //is not surjective ring rw=0,(x(1..5)),dp; matrix m[5][1]; m[3,1]=x(1); m[4,1]=x(2); m[5,1]=1+x(1)*x(4)+x(2)*x(3); ideal in=invariantRing(m,x(3),x(1),0); //compute full invarint ring in; @expansion{} in[1]=x(1) @expansion{} in[2]=x(2) @expansion{} in[3]=x(2)*x(3)*x(4)-x(2)*x(5)+x(4) @expansion{} in[4]=x(1)*x(3)*x(4)-x(1)*x(5)+x(3) //Deveney/Finston: The ring of invariants is not finitely generated ring rf=0,(x(1..7)),dp; matrix m[7][1]; m[4,1]=x(1)^3; m[5,1]=x(2)^3; m[6,1]=x(3)^3; m[7,1]=(x(1)*x(2)*x(3))^2; ideal in=invariantRing(m,x(4),x(1),6); //all invariants up to degree 6 in; @expansion{} in[1]=x(1) @expansion{} in[2]=x(3) @expansion{} in[3]=x(2) @expansion{} in[4]=x(3)^3*x(4)-x(1)^3*x(6) @expansion{} in[5]=x(2)^3*x(4)-x(1)^3*x(5) @expansion{} in[6]=x(2)^2*x(3)^2*x(4)-x(1)*x(7) @expansion{} in[7]=x(1)^2*x(2)^2*x(6)-x(3)*x(7) @expansion{} in[8]=x(1)^2*x(3)^2*x(5)-x(2)*x(7) @expansion{} in[9]=x(1)^2*x(2)*x(3)^4*x(4)*x(5)+x(1)^2*x(2)^4*x(3)*x(4)*x(6)-x(1)^5*x(\ 2)*x(3)*x(5)*x(6)-2*x(2)^2*x(3)^2*x(4)*x(7)+x(1)*x(7)^2 @c end example invariantRing d2t_singular/ainvar_lib.doc:75 @end smallexample @c ---end content invariantRing--- @c ------------------- derivate ------------- @node derivate, actionIsProper, invariantRing, ainvar_lib @subsubsection derivate @cindex derivate @c ---content derivate--- Procedure from library @code{ainvar.lib} (@pxref{ainvar_lib}). @table @asis @item @strong{Usage:} derivate(m,id); m matrix, id poly/vector/ideal @item @strong{Assume:} m is a nx1 matrix, where n = number of variables of the basering @item @strong{Return:} poly/vector/ideal (same type as input), result of applying the vector field by the matrix m componentwise to id; @item @strong{Note:} the vector field is m[1,1]*d/dx(1) +...+ m[1,n]*d/dx(n) @end table @strong{Example:} @smallexample @c computed example derivate d2t_singular/ainvar_lib.doc:123 LIB "ainvar.lib"; ring q=0,(x,y,z,u,v,w),dp; poly f=2xz-y2; matrix m[6][1] =x,y,0,u,v; derivate(m,f); @expansion{} -2y2+2xz vector v = [2xz-y2,u6-3]; derivate(m,v); @expansion{} 6u6*gen(2)-2y2*gen(1)+2xz*gen(1) derivate(m,ideal(2xz-y2,u6-3)); @expansion{} _[1]=-2y2+2xz @expansion{} _[2]=6u6 @c end example derivate d2t_singular/ainvar_lib.doc:123 @end smallexample @c ---end content derivate--- @c ------------------- actionIsProper ------------- @node actionIsProper, reduction, derivate, ainvar_lib @subsubsection actionIsProper @cindex actionIsProper @c ---content actionIsProper--- Procedure from library @code{ainvar.lib} (@pxref{ainvar_lib}). @table @asis @item @strong{Usage:} actionIsProper(m); m matrix @item @strong{Assume:} m is a nx1 matrix, where n = number of variables of the basering @item @strong{Return:} int = 1, if the action defined by m is proper, 0 if not @item @strong{Note:} m defines a group action which is the exponential of the vector field m[1,1]*d/dx(1) +...+ m[1,n]*d/dx(n) @end table @strong{Example:} @smallexample @c computed example actionIsProper d2t_singular/ainvar_lib.doc:160 LIB "ainvar.lib"; ring rf=0,x(1..7),dp; matrix m[7][1]; m[4,1]=x(1)^3; m[5,1]=x(2)^3; m[6,1]=x(3)^3; m[7,1]=(x(1)*x(2)*x(3))^2; actionIsProper(m); @expansion{} 0 ring rd=0,x(1..5),dp; matrix m[5][1]; m[3,1]=x(1); m[4,1]=x(2); m[5,1]=1+x(1)*x(4)^2; actionIsProper(m); @expansion{} 1 @c end example actionIsProper d2t_singular/ainvar_lib.doc:160 @end smallexample @c ---end content actionIsProper--- @c ------------------- reduction ------------- @node reduction, completeReduction, actionIsProper, ainvar_lib @subsubsection reduction @cindex reduction @c ---content reduction--- Procedure from library @code{ainvar.lib} (@pxref{ainvar_lib}). @table @asis @item @strong{Usage:} reduction(p,I[,q,n]); p poly, I ideal, [q monomial, n int (optional)] @item @strong{Return:} a polynomial equal to p-H(f1,...,fr), in case the leading term LT(p) of p is of the form H(LT(f1),...,LT(fr)) for some polynomial H in r variables over the base field, I=f1,...,fr; if q is given, a maximal power a is computed such that q^a divides p-H(f1,...,fr), and then (p-H(f1,...,fr))/q^a is returned; return p if no H is found @*if n=1, a different algorithm is chosen which is sometimes faster (default: n=0; q and n can be given (or not) in any order) @item @strong{Note:} this is a kind of SAGBI reduction in the subalgebra K[f1,...,fr] of the basering @end table @strong{Example:} @smallexample @c computed example reduction d2t_singular/ainvar_lib.doc:207 LIB "ainvar.lib"; ring q=0,(x,y,z,u,v,w),dp; poly p=x2yz-x2v; ideal dom =x-w,u2w+1,yz-v; reduction(p,dom); @expansion{} 2xyzw-yzw2-2xvw+vw2 reduction(p,dom,w); @expansion{} 2xyz-yzw-2xv+vw @c end example reduction d2t_singular/ainvar_lib.doc:207 @end smallexample @c ---end content reduction--- @c ------------------- completeReduction ------------- @node completeReduction, localInvar, reduction, ainvar_lib @subsubsection completeReduction @cindex completeReduction @c ---content completeReduction--- Procedure from library @code{ainvar.lib} (@pxref{ainvar_lib}). @table @asis @item @strong{Usage:} completeReduction(p,I[,q,n]); p poly, I ideal, [q monomial, n int] @item @strong{Return:} a polynomial, the SAGBI reduction of the polynomial p with I via the procedure 'reduction' as long as possible @*if n=1, a different algorithm is chosen which is sometimes faster (default: n=0; q and n can be given (or not) in any order) @item @strong{Note:} help reduction; shows an explanation of SAGBI reduction @end table @strong{Example:} @smallexample @c computed example completeReduction d2t_singular/ainvar_lib.doc:241 LIB "ainvar.lib"; ring q=0,(x,y,z,u,v,w),dp; poly p=x2yz-x2v; ideal dom =x-w,u2w+1,yz-v; completeReduction(p,dom); @expansion{} 2xyzw-yzw2-2xvw+vw2 completeReduction(p,dom,w); @expansion{} 0 @c end example completeReduction d2t_singular/ainvar_lib.doc:241 @end smallexample @c ---end content completeReduction--- @c ------------------- localInvar ------------- @node localInvar, furtherInvar, completeReduction, ainvar_lib @subsubsection localInvar @cindex localInvar @c ---content localInvar--- Procedure from library @code{ainvar.lib} (@pxref{ainvar_lib}). @table @asis @item @strong{Usage:} localInvar(m,p,q,h); m matrix, p,q,h polynomials @item @strong{Assume:} m(q) and h are invariant under the vector field m, i.e. m(m(q))=m(h)=0 h must be a ring variable @item @strong{Return:} a polynomial, the invariant polynomial of the vector field @format m = m[1,1]*d/dx(1) +...+ m[n,1]*d/dx(n) @end format with respect to p,q,h. It is defined as follows: set inv = p if p is invariant, and else as @*inv = m(q)^N * sum_i=1..N-1@{ (-1)^i*(1/i!)*m^i(p)*(q/m(q))^i @} where m^N(p) = 0, m^(N-1)(p) != 0; @*the result is inv divided by h as much as possible @end table @strong{Example:} @smallexample @c computed example localInvar d2t_singular/ainvar_lib.doc:281 LIB "ainvar.lib"; ring q=0,(x,y,z),dp; matrix m[3][1]; m[2,1]=x; m[3,1]=y; poly in=localInvar(m,z,y,x); in; @expansion{} -1/2y2+xz @c end example localInvar d2t_singular/ainvar_lib.doc:281 @end smallexample @c ---end content localInvar--- @c ------------------- furtherInvar ------------- @node furtherInvar, sortier, localInvar, ainvar_lib @subsubsection furtherInvar @cindex furtherInvar @c ---content furtherInvar--- Procedure from library @code{ainvar.lib} (@pxref{ainvar_lib}). @table @asis @item @strong{Usage:} furtherInvar(m,id,karl,q); m matrix, id,karl ideals, q poly, n int @item @strong{Assume:} karl,id,q are invariant under the vector field m, @*moreover, q must be a variable @item @strong{Return:} list of two ideals, the first ideal contains further invariants of the vector field @format m = sum m[i,1]*d/dx(i) with respect to id,p,q, @end format i.e. we compute elements in the (invariant) subring generated by id which are divisible by q and divide them by q as much as possible the second ideal contains all invariants given before if n=1, a different algorithm is chosen which is sometimes faster (default: n=0) @end table @strong{Example:} @smallexample @c computed example furtherInvar d2t_singular/ainvar_lib.doc:323 LIB "ainvar.lib"; ring r=0,(x,y,z,u),dp; matrix m[4][1]; m[2,1]=x; m[3,1]=y; m[4,1]=z; ideal id=localInvar(m,z,y,x),localInvar(m,u,y,x); ideal karl=id,x; list in=furtherInvar(m,id,karl,x); in; @expansion{} [1]: @expansion{} _[1]=y2z2-8/3xz3-2y3u+6xyzu-3x2u2 @expansion{} [2]: @expansion{} _[1]=-1/2y2+xz @expansion{} _[2]=1/3y3-xyz+x2u @expansion{} _[3]=x @c end example furtherInvar d2t_singular/ainvar_lib.doc:323 @end smallexample @c ---end content furtherInvar--- @c ------------------- sortier ------------- @node sortier,, furtherInvar, ainvar_lib @subsubsection sortier @cindex sortier @c ---content sortier--- Procedure from library @code{ainvar.lib} (@pxref{ainvar_lib}). @table @asis @item @strong{Usage:} sortier(id); id ideal/module @item @strong{Return:} the same ideal/module but with generators ordered by there leading term, starting with the smallest @end table @strong{Example:} @smallexample @c computed example sortier d2t_singular/ainvar_lib.doc:356 LIB "ainvar.lib"; ring q=0,(x,y,z,u,v,w),dp; ideal i=w,x,z,y,v; sortier(i); @expansion{} _[1]=w @expansion{} _[2]=v @expansion{} _[3]=z @expansion{} _[4]=y @expansion{} _[5]=x @c end example sortier d2t_singular/ainvar_lib.doc:356 @end smallexample @c ---end content sortier--- texi2html-1.82/test/singular_manual/d2t_singular/zeroset_lib.tex0000644000175000017500000004333711264347126027050 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/zeroset_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/zeroset_lib.doc INSTEAD @c library version: (1.7.2.2,2002/02/20) @c library file: ../Singular/LIB/zeroset.lib @cindex zeroset.lib @cindex zeroset_lib @table @asis @item @strong{Library:} zeroset.lib @item @strong{Purpose:} Procedures For Roots and Factorization @item @strong{Author:} Thomas Bayer, email: tbayer@@mathematik.uni-kl.de @*http://wwwmayr.informatik.tu-muenchen.de/personen/bayert/ Current Adress: Institut fuer Informatik, TU Muenchen @item @strong{Overview:} Algorithms for finding the zero-set of a zero-dim. ideal in Q(a)[x_1,..,x_n], Roots and Factorization of univariate polynomials over Q(a)[t] where a is an algebraic number. Written in the frame of the diploma thesis (advisor: Prof. Gert-Martin Greuel) 'Computations of moduli spaces of semiquasihomogeneous singularities and an implementation in Singular'. This library is meant as a preliminary extension of the functionality of Singular for univariate factorization of polynomials over simple algebraic extensions in characteristic 0. @*Subprocedures with postfix 'Main' require that the ring contains a variable 'a' and no parameters, and the ideal 'mpoly', where 'minpoly' from the basering is stored. @end table @strong{Procedures:} @menu * EGCD:: gcd over an algebraic extension field of Q * Factor:: factorization of f over an algebraic extension field * Quotient:: quotient q of f w.r.t. g (in f = q*g + remainder) * Remainder:: remainder of the division of f by g * Roots:: computes all roots of f in an extension field of Q * SQFRNorm:: norm of f (f must be squarefree) * ZeroSet:: zero-set of the 0-dim. ideal I @end menu @strong{Auxiliary procedures:} @menu * EGCDMain:: gcd over an algebraic extension field of Q * FactorMain:: factorization of f over an algebraic extension field * InvertNumberMain:: inverts an element of an algebraic extension field * QuotientMain:: quotient of f w.r.t. g * RemainderMain:: remainder of the division of f by g * RootsMain:: computes all roots of f, might extend the ground field * SQFRNormMain:: norm of f (f must be squarefree) * ContainedQ:: f in data ? * SameQ:: a == b (list a,b) @end menu @c ---end content LibInfo--- @c ------------------- EGCD ------------- @node EGCD, Factor,, zeroset_lib @subsubsection EGCD @cindex EGCD @c ---content EGCD--- Procedure from library @code{zeroset.lib} (@pxref{zeroset_lib}). @table @asis @item @strong{Usage:} EGCD(f, g); where f,g are polynomials @item @strong{Purpose:} compute the polynomial gcd of f and g over Q(a)[x] @item @strong{Return:} polynomial h s.t. h is a greatest common divisor of f and g (not nec. monic) @item @strong{Assume:} basering = Q(a)[t] @end table @strong{Example:} @smallexample @c computed example EGCD d2t_singular/zeroset_lib.doc:79 LIB "zeroset.lib"; ring R = (0,a), x, lp; minpoly = a2+1; poly f = x4 - 1; poly g = x2 - 2*a*x - 1; EGCD(f, g); @expansion{} (-4a)*x-4 @c end example EGCD d2t_singular/zeroset_lib.doc:79 @end smallexample @c ---end content EGCD--- @c ------------------- Factor ------------- @node Factor, Quotient, EGCD, zeroset_lib @subsubsection Factor @cindex Factor @c ---content Factor--- Procedure from library @code{zeroset.lib} (@pxref{zeroset_lib}). @table @asis @item @strong{Usage:} Factor(f); where f is a polynomial @item @strong{Purpose:} compute the factorization of the squarefree poly f over Q(a)[t] @item @strong{Return:} list with two entries @format _[1] = factors (monic), first entry is the leading coefficient _[2] = multiplicities (not yet implemented) @end format @item @strong{Assume:} basering must be the univariate polynomial ring over a field, which is Q or a simple extension of Q given by a minpoly. @item @strong{Note:} if basering = Q[t] then this is the built-in @code{factorize} @end table @strong{Example:} @smallexample @c computed example Factor d2t_singular/zeroset_lib.doc:121 LIB "zeroset.lib"; ring R = (0,a), x, lp; minpoly = a2+1; poly f = x4 - 1; list fl = Factor(f); fl; @expansion{} [1]: @expansion{} _[1]=1 @expansion{} _[2]=(40a+60)*x+(40a+60) @expansion{} _[3]=(1/65a-29/130)*x+(-1/65a+29/130) @expansion{} _[4]=(4a)*x+4 @expansion{} _[5]=(7/520a+1/130)*x+(1/130a-7/520) @expansion{} [2]: @expansion{} _[1]=1 @expansion{} _[2]=1 @expansion{} _[3]=1 @expansion{} _[4]=1 @expansion{} _[5]=1 fl[1][1]*fl[1][2]*fl[1][3]*fl[1][4]*fl[1][5] - f; @expansion{} 0 @c end example Factor d2t_singular/zeroset_lib.doc:121 @end smallexample @c ---end content Factor--- @c ------------------- Quotient ------------- @node Quotient, Remainder, Factor, zeroset_lib @subsubsection Quotient @cindex Quotient @c ---content Quotient--- Procedure from library @code{zeroset.lib} (@pxref{zeroset_lib}). @table @asis @item @strong{Usage:} Quotient(f, g); where f,g are polynomials; @item @strong{Purpose:} compute the quotient q and remainder r s.t. f = g*q + r, deg(r) < deg(g) @item @strong{Return:} list of polynomials @format _[1] = quotient q _[2] = remainder r @end format @item @strong{Assume:} basering = Q[x] or Q(a)[x] @end table @strong{Example:} @smallexample @c computed example Quotient d2t_singular/zeroset_lib.doc:160 LIB "zeroset.lib"; ring R = (0,a), x, lp; minpoly = a2+1; poly f = x4 - 2; poly g = x - a; list qr = Quotient(f, g); qr; @expansion{} [1]: @expansion{} x3+(a)*x2-x+(-a) @expansion{} [2]: @expansion{} 0 qr[1]*g + qr[2] - f; @expansion{} 1 @c end example Quotient d2t_singular/zeroset_lib.doc:160 @end smallexample @c ---end content Quotient--- @c ------------------- Remainder ------------- @node Remainder, Roots, Quotient, zeroset_lib @subsubsection Remainder @cindex Remainder @c ---content Remainder--- Procedure from library @code{zeroset.lib} (@pxref{zeroset_lib}). @table @asis @item @strong{Usage:} Remainder(f, g); where f,g are polynomials @item @strong{Purpose:} compute the remainder of the division of f by g, i.e. a polynomial r s.t. f = g*q + r, deg(r) < deg(g). @item @strong{Return:} poly @item @strong{Assume:} basering = Q[x] or Q(a)[x] @end table @strong{Example:} @smallexample @c computed example Remainder d2t_singular/zeroset_lib.doc:197 LIB "zeroset.lib"; ring R = (0,a), x, lp; minpoly = a2+1; poly f = x4 - 1; poly g = x3 - 1; Remainder(f, g); @expansion{} x-1 @c end example Remainder d2t_singular/zeroset_lib.doc:197 @end smallexample @c ---end content Remainder--- @c ------------------- Roots ------------- @node Roots, SQFRNorm, Remainder, zeroset_lib @subsubsection Roots @cindex Roots @c ---content Roots--- Procedure from library @code{zeroset.lib} (@pxref{zeroset_lib}). @table @asis @item @strong{Usage:} Roots(f); where f is a polynomial @item @strong{Purpose:} compute all roots of f in a finite extension of the ground field without multiplicities. @item @strong{Return:} ring, a polynomial ring over an extension field of the ground field, containing a list 'roots' and polynomials 'newA' and 'f': @format - 'roots' is the list of roots of the polynomial f (no multiplicities) - if the ground field is Q(a') and the extension field is Q(a), then 'newA' is the representation of a' in Q(a). If the basering contains a parameter 'a' and the minpoly remains unchanged then 'newA' = 'a'. If the basering does not contain a parameter then 'newA' = 'a' (default). - 'f' is the polynomial f in Q(a) (a' being substituted by 'newA') @end format @item @strong{Assume:} ground field to be Q or a simple extension of Q given by a minpoly @end table @strong{Example:} @smallexample @c computed example Roots d2t_singular/zeroset_lib.doc:242 LIB "zeroset.lib"; ring R = (0,a), x, lp; minpoly = a2+1; poly f = x3 - a; def R1 = Roots(f); @expansion{} @expansion{} // 'Roots' created a new ring which contains the list 'roots' and @expansion{} // the polynomials 'f' and 'newA' @expansion{} // To access the roots, newA and the new representation of f, type @expansion{} def R = Roots(f); setring R; roots; newA; f; @expansion{} setring R1; minpoly; @expansion{} (a4-a2+1) newA; @expansion{} (a3) f; @expansion{} x3+(-a3) roots; @expansion{} [1]: @expansion{} (-a3) @expansion{} [2]: @expansion{} (a3-a) @expansion{} [3]: @expansion{} (a) map F; F[1] = roots[1]; F(f); @expansion{} 0 @c end example Roots d2t_singular/zeroset_lib.doc:242 @end smallexample @c ---end content Roots--- @c ------------------- SQFRNorm ------------- @node SQFRNorm, ZeroSet, Roots, zeroset_lib @subsubsection SQFRNorm @cindex SQFRNorm @c ---content SQFRNorm--- Procedure from library @code{zeroset.lib} (@pxref{zeroset_lib}). @table @asis @item @strong{Usage:} SQFRNorm(f); where f is a polynomial @item @strong{Purpose:} compute the norm of the squarefree polynomial f in Q(a)[x]. @item @strong{Return:} list with 3 entries @format _[1] = squarefree norm of g (poly) _[2] = g (= f(x - s*a)) (poly) _[3] = s (int) @end format @item @strong{Assume:} f must be squarefree, basering = Q(a)[x] and minpoly != 0. @item @strong{Note:} the norm is an element of Q[x] @end table @strong{Example:} @smallexample @c computed example SQFRNorm d2t_singular/zeroset_lib.doc:291 LIB "zeroset.lib"; ring R = (0,a), x, lp; minpoly = a2+1; poly f = x4 - 2*x + 1; SQFRNorm(f); @expansion{} [1]: @expansion{} x8+4*x6-4*x5+8*x4+8*x3-4*x2+8*x+8 @expansion{} [2]: @expansion{} x4+(-4a)*x3-6*x2+(4a-2)*x+(2a+2) @expansion{} [3]: @expansion{} 1 @c end example SQFRNorm d2t_singular/zeroset_lib.doc:291 @end smallexample @c ---end content SQFRNorm--- @c ------------------- ZeroSet ------------- @node ZeroSet, EGCDMain, SQFRNorm, zeroset_lib @subsubsection ZeroSet @cindex ZeroSet @c ---content ZeroSet--- Procedure from library @code{zeroset.lib} (@pxref{zeroset_lib}). @table @asis @item @strong{Usage:} ZeroSet(I [,opt] ); I=ideal, opt=integer @item @strong{Purpose:} compute the zero-set of the zero-dim. ideal I, in a finite extension of the ground field. @item @strong{Return:} ring, a polynomial ring over an extension field of the ground field, containing a list 'zeroset', a polynomial 'newA', and an ideal 'id': @format - 'zeroset' is the list of the zeros of the ideal I, each zero is an ideal. - if the ground field is Q(a') and the extension field is Q(a), then 'newA' is the representation of a' in Q(a). If the basering contains a parameter 'a' and the minpoly remains unchanged then 'newA' = 'a'. If the basering does not contain a parameter then 'newA' = 'a' (default). - 'id' is the ideal I in Q(a)[x_1,...] (a' substituted by 'newA') @end format @item @strong{Assume:} dim(I) = 0, and ground field to be Q or a simple extension of Q given by a minpoly. @item @strong{Options:} opt = 0 no primary decomposition (default) @*opt > 0 primary decomposition @item @strong{Note:} If I contains an algebraic number (parameter) then 'I' must be transformed w.r.t. 'newA' in the new ring. @end table @strong{Example:} @smallexample @c computed example ZeroSet d2t_singular/zeroset_lib.doc:345 LIB "zeroset.lib"; ring R = (0,a), (x,y,z), lp; minpoly = a2 + 1; ideal I = x2 - 1/2, a*z - 1, y - 2; def T = ZeroSet(I); @expansion{} 1 setring T; minpoly; @expansion{} (4a4+4a2+9) newA; @expansion{} (1/3a3+5/6a) id; @expansion{} id[1]=(1/3a3+5/6a)*z-1 @expansion{} id[2]=y-2 @expansion{} id[3]=2*x2-1 zeroset; @expansion{} [1]: @expansion{} _[1]=(1/3a3-1/6a) @expansion{} _[2]=2 @expansion{} _[3]=(-1/3a3-5/6a) @expansion{} [2]: @expansion{} _[1]=(-1/3a3+1/6a) @expansion{} _[2]=2 @expansion{} _[3]=(-1/3a3-5/6a) map F1 = basering, zeroset[1]; map F2 = basering, zeroset[2]; F1(id); @expansion{} _[1]=0 @expansion{} _[2]=0 @expansion{} _[3]=0 F2(id); @expansion{} _[1]=0 @expansion{} _[2]=0 @expansion{} _[3]=0 @c end example ZeroSet d2t_singular/zeroset_lib.doc:345 @end smallexample @c ---end content ZeroSet--- @c ------------------- EGCDMain ------------- @node EGCDMain, FactorMain, ZeroSet, zeroset_lib @subsubsection EGCDMain @cindex EGCDMain @c ---content EGCDMain--- Procedure from library @code{zeroset.lib} (@pxref{zeroset_lib}). @table @asis @item @strong{Purpose:} compute the polynomial gcd of f and g over Q(a)[x] @item @strong{Return:} poly @item @strong{Assume:} basering = Q[x,a] and ideal mpoly is defined (it might be 0), this represents the ring Q(a)[x] together with its minimal polynomial. @end table @c ---end content EGCDMain--- @c ------------------- FactorMain ------------- @node FactorMain, InvertNumberMain, EGCDMain, zeroset_lib @subsubsection FactorMain @cindex FactorMain @c ---content FactorMain--- Procedure from library @code{zeroset.lib} (@pxref{zeroset_lib}). @table @asis @item @strong{Purpose:} compute the factorization of the squarefree poly f over Q(a)[t], minpoly = p(a). @item @strong{Return:} list with 2 entries @format _[1] = factors, first is a constant _[2] = multiplicities (not yet implemented) @end format @item @strong{Assume:} basering = Q[x,a], representing Q(a)[x]. An ideal mpoly must be defined, representing the minimal polynomial (it might be 0!). @end table @c ---end content FactorMain--- @c ------------------- InvertNumberMain ------------- @node InvertNumberMain, QuotientMain, FactorMain, zeroset_lib @subsubsection InvertNumberMain @cindex InvertNumberMain @c ---content InvertNumberMain--- Procedure from library @code{zeroset.lib} (@pxref{zeroset_lib}). @table @asis @item @strong{Usage:} InvertNumberMain(f); where f is a polynomial @item @strong{Purpose:} compute 1/f if f is a number in Q(a) i.e., f is represented by a polynomial in Q[a]. @item @strong{Return:} poly 1/f @item @strong{Assume:} basering = Q[x_1,...,x_n,a], ideal mpoly must be defined and != 0 ! @end table @c ---end content InvertNumberMain--- @c ------------------- QuotientMain ------------- @node QuotientMain, RemainderMain, InvertNumberMain, zeroset_lib @subsubsection QuotientMain @cindex QuotientMain @c ---content QuotientMain--- Procedure from library @code{zeroset.lib} (@pxref{zeroset_lib}). @table @asis @item @strong{Usage:} QuotientMain(f, g); where f,g are polynomials @item @strong{Purpose:} compute the quotient q and remainder r s.t. f = g*q + r, deg(r) < deg(g) @item @strong{Return:} list of polynomials @format _[1] = quotient q _[2] = remainder r @end format @item @strong{Assume:} basering = Q[x,a] and ideal mpoly is defined (it might be 0), this represents the ring Q(a)[x] together with its minimal polynomial. @end table @c ---end content QuotientMain--- @c ------------------- RemainderMain ------------- @node RemainderMain, RootsMain, QuotientMain, zeroset_lib @subsubsection RemainderMain @cindex RemainderMain @c ---content RemainderMain--- Procedure from library @code{zeroset.lib} (@pxref{zeroset_lib}). @table @asis @item @strong{Usage:} RemainderMain(f, g); where f,g are polynomials @item @strong{Purpose:} compute the remainder r s.t. f = g*q + r, deg(r) < deg(g) @item @strong{Return:} poly @item @strong{Assume:} basering = Q[x,a] and ideal mpoly is defined (it might be 0), this represents the ring Q(a)[x] together with its minimal polynomial. @end table @c ---end content RemainderMain--- @c ------------------- RootsMain ------------- @node RootsMain, SQFRNormMain, RemainderMain, zeroset_lib @subsubsection RootsMain @cindex RootsMain @c ---content RootsMain--- Procedure from library @code{zeroset.lib} (@pxref{zeroset_lib}). @table @asis @item @strong{Usage:} RootsMain(f); where f is a polynomial @item @strong{Purpose:} compute all roots of f in a finite extension of the ground field without multiplicities. @item @strong{Return:} list, all entries are polynomials @format _[1] = roots of f, each entry is a polynomial _[2] = 'newA' - if the ground field is Q(a') and the extension field is Q(a), then 'newA' is the representation of a' in Q(a) _[3] = minpoly of the algebraic extension of the ground field @end format @item @strong{Assume:} basering = Q[x,a] ideal mpoly must be defined, it might be 0! @item @strong{Note:} might change the ideal mpoly !! @end table @c ---end content RootsMain--- @c ------------------- SQFRNormMain ------------- @node SQFRNormMain, ContainedQ, RootsMain, zeroset_lib @subsubsection SQFRNormMain @cindex SQFRNormMain @c ---content SQFRNormMain--- Procedure from library @code{zeroset.lib} (@pxref{zeroset_lib}). @table @asis @item @strong{Usage:} SQFRNorm(f); where f is a polynomial @item @strong{Purpose:} compute the norm of the squarefree polynomial f in Q(a)[x]. @item @strong{Return:} list with 3 entries @format _[1] = squarefree norm of g (poly) _[2] = g (= f(x - s*a)) (poly) _[3] = s (int) @end format @item @strong{Assume:} f must be squarefree, basering = Q[x,a] and ideal mpoly is equal to 'minpoly',this represents the ring Q(a)[x] together with 'minpoly'. @item @strong{Note:} the norm is an element of Q[x] @end table @c ---end content SQFRNormMain--- @c ------------------- ContainedQ ------------- @node ContainedQ, SameQ, SQFRNormMain, zeroset_lib @subsubsection ContainedQ @cindex ContainedQ @c ---content ContainedQ--- Procedure from library @code{zeroset.lib} (@pxref{zeroset_lib}). @table @asis @item @strong{Usage:} ContainedQ(data, f [, opt]); data=list; f=any type, opt=integer @item @strong{Purpose:} test if f is an element of data. @item @strong{Return:} int @*0 if f not contained in data @*1 if f contained in data @item @strong{Options:} opt = 0 : use '==' for comparing f with elements from data@* opt = 1 : use @code{SameQ} for comparing f with elements from data @end table @c ---end content ContainedQ--- @c ------------------- SameQ ------------- @node SameQ,, ContainedQ, zeroset_lib @subsubsection SameQ @cindex SameQ @c ---content SameQ--- Procedure from library @code{zeroset.lib} (@pxref{zeroset_lib}). @table @asis @item @strong{Usage:} SameQ(a, b); a,b=list/intvec @item @strong{Purpose:} test a == b elementwise, i.e., a[i] = b[i]. @item @strong{Return:} int @*0 if a != b @*1 if a == b @end table @c ---end content SameQ--- texi2html-1.82/test/singular_manual/d2t_singular/latex_lib.tex0000644000175000017500000006023411264347126026465 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/latex_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/latex_lib.doc INSTEAD @c library version: (1.19.2.1,2002/02/20) @c library file: ../Singular/LIB/latex.lib @cindex latex.lib @cindex latex_lib @table @asis @item @strong{Library:} latex.lib @item @strong{Purpose:} Typesetting of Singular-Objects in LaTeX2e @item @strong{Author:} Christian Gorzel, gorzelc@@math.uni-muenster.de @end table @strong{Procedures:} @menu * closetex:: writes closing line for LaTeX-document * opentex:: writes header for LaTeX-file fnm * tex:: calls LaTeX2e for LaTeX-file fnm * texdemo:: produces a file explaining the features of this lib * texfactorize:: creates string in LaTeX-format for factors of poly f * texmap:: creates string in LaTeX-format for map m:r1->r2 * texname:: creates string in LaTeX-format for identifier * texobj:: creates string in LaTeX-format for any (basic) type * texpoly:: creates string in LaTeX-format for poly * texproc:: creates string in LaTeX-format of text from proc p * texring:: creates string in LaTeX-format for ring/qring * rmx:: removes .aux and .log files of LaTeX-files * xdvi:: calls xdvi for dvi-files @end menu @table @asis @item @strong{Global variables:} TeXwidth, TeXnofrac, TeXbrack, TeXproj, TeXaligned, TeXreplace, NoDollars are used to control the typesetting. Call @code{texdemo();} to obtain a LaTeX2e file @code{texlibdemo.tex} explaining the features of @code{latex.lib} and its global variables. @format @code{TeXwidth} (int) -1, 0, 1..9, >9: controls breaking of long polynomials @code{TeXnofrac} (int) flag: write 1/2 instead of \frac@{1@}@{2@} @code{TeXbrack} (string) "@{", "(", "<", "|", empty string: controls brackets around ideals and matrices @code{TeXproj} (int) flag: write ":" instead of "," in vectors @code{TeXaligned} (int) flag: write maps (and ideals) aligned @code{TeXreplace} (list) list entries = 2 strings: replacing symbols @code{NoDollars} (int) flag: suppresses surrounding $ signs @end format @end table @c ---end content LibInfo--- @c ------------------- closetex ------------- @node closetex, opentex,, latex_lib @subsubsection closetex @cindex closetex @c ---content closetex--- Procedure from library @code{latex.lib} (@pxref{latex_lib}). @table @asis @item @strong{Usage:} closetex(fname); fname string @item @strong{Return:} nothing; writes a LaTeX2e closing line into file @code{}. @item @strong{Note:} preceding ">>" are deleted and suffix ".tex" (if not given) is added to @code{fname}. @end table @strong{Example:} @smallexample @c computed example closetex d2t_singular/latex_lib.doc:73 LIB "latex.lib"; opentex("exmpl"); texobj("exmpl","@{\\large \\bf hello@}"); closetex("exmpl"); @c end example closetex d2t_singular/latex_lib.doc:73 @end smallexample @c ---end content closetex--- @c ------------------- opentex ------------- @node opentex, tex, closetex, latex_lib @subsubsection opentex @cindex opentex @c ---content opentex--- Procedure from library @code{latex.lib} (@pxref{latex_lib}). @table @asis @item @strong{Usage:} opentex(fname); fname string @item @strong{Return:} nothing; writes a LaTeX2e header into a new file @code{}. @item @strong{Note:} preceding ">>" are deleted and suffix ".tex" (if not given) is added to @code{fname}. @end table @strong{Example:} @smallexample @c computed example opentex d2t_singular/latex_lib.doc:103 LIB "latex.lib"; opentex("exmpl"); texobj("exmpl","hello"); closetex("exmpl"); @c end example opentex d2t_singular/latex_lib.doc:103 @end smallexample @c ---end content opentex--- @c ------------------- tex ------------- @node tex, texdemo, opentex, latex_lib @subsubsection tex @cindex tex @c ---content tex--- Procedure from library @code{latex.lib} (@pxref{latex_lib}). @table @asis @item @strong{Usage:} tex(fname); fname string @item @strong{Return:} nothing; calls latex (LaTeX2e) for compiling the file fname @item @strong{Note:} preceding ">>" are deleted and suffix ".tex" (if not given) is added to @code{fname}. @end table @strong{Example:} @smallexample @c computed example tex d2t_singular/latex_lib.doc:133 LIB "latex.lib"; ring r; ideal I = maxideal(7); opentex("exp001"); // open latex2e document texobj("exp001","An ideal ",I); closetex("exp001"); tex("exp001"); @expansion{} calling latex2e for : exp001.tex @expansion{} @expansion{} This is TeX, Version 3.14159 (Web2C 7.3.1) @expansion{} (exp001.tex @expansion{} LaTeX2e <1998/12/01> patch level 1 @expansion{} Babel and hyphenation patterns for american, french, german, nger\ man, i @expansion{} talian, nohyphenation, loaded. @expansion{} (/usr/share/texmf/tex/latex/base/article.cls @expansion{} Document Class: article 1999/01/07 v1.4a Standard LaTeX document class @expansion{} (/usr/share/texmf/tex/latex/base/size10.clo)) @expansion{} (/usr/share/texmf/tex/latex/amslatex/amsmath.sty @expansion{} (/usr/share/texmf/tex/latex/amslatex/amstext.sty @expansion{} (/usr/share/texmf/tex/latex/amslatex/amsgen.sty)) @expansion{} (/usr/share/texmf/tex/latex/amslatex/amsbsy.sty) @expansion{} (/usr/share/texmf/tex/latex/amslatex/amsopn.sty)) @expansion{} (/usr/share/texmf/tex/latex/amsfonts/amssymb.sty @expansion{} (/usr/share/texmf/tex/latex/amsfonts/amsfonts.sty)) @expansion{} No file exp001.aux. @expansion{} (/usr/share/texmf/tex/latex/amsfonts/umsa.fd) @expansion{} (/usr/share/texmf/tex/latex/amsfonts/umsb.fd) [1] (exp001.aux) ) @expansion{} Output written on exp001.dvi (1 page, 2912 bytes). @expansion{} Transcript written on exp001.log. system("sh","rm exp001.*"); @expansion{} 0 @c end example tex d2t_singular/latex_lib.doc:133 @end smallexample @c ---end content tex--- @c ------------------- texdemo ------------- @node texdemo, texfactorize, tex, latex_lib @subsubsection texdemo @cindex texdemo @c ---content texdemo--- Procedure from library @code{latex.lib} (@pxref{latex_lib}). @table @asis @item @strong{Usage:} texdemo(); @item @strong{Return:} nothing; generates a LaTeX2e file called @code{texlibdemo.tex} explaining the features of @code{latex.lib} and its global variables. @item @strong{Note:} this proc may take some time. @end table @c ---end content texdemo--- @c ------------------- texfactorize ------------- @node texfactorize, texmap, texdemo, latex_lib @subsubsection texfactorize @cindex texfactorize @c ---content texfactorize--- Procedure from library @code{latex.lib} (@pxref{latex_lib}). @table @asis @item @strong{Usage:} texfactorize(fname,f); fname string, f poly @item @strong{Return:} if @code{fname=""}: string, f as a product of its irreducible factors@* otherwise: append this string to the file @code{}, and return nothing. @item @strong{Note:} preceding ">>" are deleted and suffix ".tex" (if not given) is added to @code{fname}. @end table @strong{Example:} @smallexample @c computed example texfactorize d2t_singular/latex_lib.doc:191 LIB "latex.lib"; ring r2 = 13,(x,y),dp; poly f = (x+1+y)^2*x3y*(2x-2y)*y12; texfactorize("",f); @expansion{} $-2\cdot x^@{3@}\cdot y^@{13@}\cdot (-x+y)\cdot (x+y+1)^@{2@}$ ring R49 = (7,a),x,dp; minpoly = a2+a+3; poly f = (a24x5+x3)*a2x6*(x+1)^2; f; @expansion{} (a+3)*x13+(2a-1)*x12+(-2a+1)*x10+(-a-3)*x9 texfactorize("",f); @expansion{} $(a+3)\cdot (x-1)\cdot (x+1)^@{3@}\cdot x^@{9@}$ @c end example texfactorize d2t_singular/latex_lib.doc:191 @end smallexample @c ---end content texfactorize--- @c ------------------- texmap ------------- @node texmap, texname, texfactorize, latex_lib @subsubsection texmap @cindex texmap @c ---content texmap--- Procedure from library @code{latex.lib} (@pxref{latex_lib}). @table @asis @item @strong{Usage:} texmap(fname,m,@@r1,@@r2); fname string, m string/map, @@r1,@@r2 rings @item @strong{Return:} if @code{fname=""}: string, the map m from @@r1 to @@r2 (preceded by its name if m = string) in TeX-typesetting;@* otherwise: append this string to the file @code{}, and return nothing. @item @strong{Note:} preceding ">>" are deleted in @code{fname}, and suffix ".tex" (if not given) is added to @code{fname}. If m is a string then it has to be the name of an existing map from @@r1 to @@r2. @end table @strong{Example:} @smallexample @c computed example texmap d2t_singular/latex_lib.doc:231 LIB "latex.lib"; // -------- prepare for example --------- if (defined(TeXaligned)) @{int Teali=TeXaligned; kill TeXaligned;@} if (defined(TeXreplace)) @{list Terep=TeXreplace; kill TeXreplace;@} // -------- the example starts here --------- // string fname = "tldemo"; ring @@r1=0,(x,y,z),dp; if(system("with","Namespaces")) @{ exportto(Current, @@r1); @} else @{ export @@r1; @} @expansion{} // ** `@@r1` is already global ring r2=0,(u,v),dp; map @@phi =(@@r1,u2,uv -v,v2); export @@phi; @expansion{} // ** `@@phi` is already global list TeXreplace; TeXreplace[1] = list("@@phi","\\phi"); // @@phi --> \phi export TeXreplace; @expansion{} // ** `TeXreplace` is already global texmap("","@@phi",@@r1,r2); // standard form @expansion{} $$ @expansion{} \begin@{array@}@{rcc@} @expansion{} \phi:\Q[x,y,z] & \longrightarrow & \Q[u,v]\\[2mm] @expansion{} \left(x,y,z\right) & \longmapsto & @expansion{} \left( @expansion{} \begin@{array@}@{c@} @expansion{} u^@{2@}\\ @expansion{} uv-v\\ @expansion{} v^@{2@} @expansion{} \end@{array@} @expansion{} \right) @expansion{} \end@{array@} @expansion{} $$ // int TeXaligned; export TeXaligned; // map in one line @expansion{} // ** `TeXaligned` is already global texmap("",@@phi,@@r1,r2); @expansion{} $\Q[x,y,z]\longrightarrow\Q[u,v], \ \left(x,y,z\right)\longmapsto \left(u\ ^@{2@},uv-v,v^@{2@}\right)$ // kill @@r1,TeXreplace,TeXaligned; // // --- restore global variables if previously defined --- if (defined(Teali)) @{int TeXaligned=Teali; export TeXaligned; kill Teali;@} if (defined(Terep)) @{list TeXreplace=Terep; export TeXreplace; kill Terep;@} @c end example texmap d2t_singular/latex_lib.doc:231 @end smallexample @c ---end content texmap--- @c ------------------- texname ------------- @node texname, texobj, texmap, latex_lib @subsubsection texname @cindex texname @c ---content texname--- Procedure from library @code{latex.lib} (@pxref{latex_lib}). @table @asis @item @strong{Usage:} texname(fname,s); fname,s strings @item @strong{Return:} if @code{fname=""}: string, the transformed string s, where the following rules apply: @smallexample s' + "~" --> "\\tilde@{"+ s' +"@}" "_" + int --> "_@{" + int +"@}" "[" + s' + "]" --> "_@{" + s' + "@}" "A..Z" + int --> "A..Z" + "^@{" + int + "@}" "a..z" + int --> "a..z" + "_@{" + int + "@}" "(" + int + "," + s' + ")" --> "_@{"+ int +"@}" + "^@{" + s'+"@}" @end smallexample Anyhow, strings which begin with a @code{"@{"} are only changed by deleting the first and last character (intended to remove the surrounding curly brackets). if @code{fname!=""}: append the transformed string s to the file @code{}, and return nothing. @item @strong{Note:} preceding ">>" are deleted in @code{fname}, and suffix ".tex" (if not given) is added to @code{fname}. @end table @strong{Example:} @smallexample @c computed example texname d2t_singular/latex_lib.doc:297 LIB "latex.lib"; ring r = 0,(x,y),lp; poly f = 3xy4 + 2xy2 + x5y3 + x + y6; texname("","@{f(10)@}"); @expansion{} f(10) texname("","f(10) ="); @expansion{} f_@{10@} = texname("","n1"); @expansion{} n_@{1@} texname("","T1_12"); @expansion{} T^@{1@}_@{12@} texname("","g'_11"); @expansion{} g'_@{11@} texname("","f23"); @expansion{} f_@{23@} texname("","M[2,3]"); @expansion{} M_@{2,3@} texname("","A(0,3);"); @expansion{} A_@{0@}^@{3@}; texname("","E~(3)"); @expansion{} \tilde@{E@}_@{3@} @c end example texname d2t_singular/latex_lib.doc:297 @end smallexample @c ---end content texname--- @c ------------------- texobj ------------- @node texobj, texpoly, texname, latex_lib @subsubsection texobj @cindex texobj @c ---content texobj--- Procedure from library @code{latex.lib} (@pxref{latex_lib}). @table @asis @item @strong{Usage:} texobj(fname,l); fname string, l list @item @strong{Return:} if @code{fname=""}: string, the entries of l in LaTeX-typesetting;@* otherwise: append this string to the file @code{}, and return nothing. @item @strong{Note:} preceding ">>" are deleted in @code{fname}, and suffix ".tex" (if not given) is added to @code{fname}. @end table @strong{Example:} @smallexample @c computed example texobj d2t_singular/latex_lib.doc:337 LIB "latex.lib"; // -------- prepare for example --------- if (defined(TeXaligned)) @{int Teali=TeXaligned; kill TeXaligned;@} if (defined(TeXbrack))@{string Tebra=TeXbrack; kill TeXbrack;@} // // -------------- typesetting for polynomials ---------- ring r = 0,(x,y),lp; poly f = x5y3 + 3xy4 + 2xy2 + y6; f; @expansion{} x5y3+3xy4+2xy2+y6 texobj("",f); @expansion{} $$\begin@{array@}@{rl@} @expansion{} & x^@{5@}y^@{3@}+3xy^@{4@}+2xy^@{2@}+y^@{6@}\\ @expansion{} \end@{array@} @expansion{} $$ @expansion{} // -------------- typesetting for ideals ---------- ideal G = jacob(f); G; @expansion{} G[1]=5x4y3+3y4+2y2 @expansion{} G[2]=3x5y2+12xy3+4xy+6y5 texobj("",G); @expansion{} $$\left( @expansion{} \begin@{array@}@{c@} @expansion{} 5x^@{4@}y^@{3@}+3y^@{4@}+2y^@{2@}, \\ @expansion{} 3x^@{5@}y^@{2@}+12xy^@{3@}+4xy+6y^@{5@} @expansion{} \end@{array@} @expansion{} \right)$$ @expansion{} // -------------- variation of typesetting for ideals ---------- int TeXaligned = 1; export TeXaligned; @expansion{} // ** `TeXaligned` is already global string TeXbrack = "<"; export TeXbrack; @expansion{} // ** `TeXbrack` is already global texobj("",G); @expansion{} $\left<5x^@{4@}y^@{3@}+3y^@{4@}+2y^@{2@},3x^@{5@}y^@{2@}+12xy^@{3@}+4xy+6y^@{5@}\right>$ @expansion{} kill TeXaligned, TeXbrack; // -------------- typesetting for matrices ---------- matrix J = jacob(G); texobj("",J); @expansion{} $$\left( @expansion{} \begin@{array@}@{*@{2@}@{c@}@} @expansion{} 20x^@{3@}y^@{3@} & 15x^@{4@}y^@{2@}+12y^@{3@}+4y \\ @expansion{} 15x^@{4@}y^@{2@}+12y^@{3@}+4y & 6x^@{5@}y+36xy^@{2@}+4x+30y^@{4@} @expansion{} \end@{array@} @expansion{} \right) @expansion{} $$ @expansion{} // -------------- typesetting for intmats ---------- intmat m[3][4] = 9,2,4,5,2,5,-2,4,-6,10,-1,2,7; texobj("",m); @expansion{} $$\left( @expansion{} \begin@{array@}@{*@{4@}@{r@}@} @expansion{} 9 & 2 & 4 & 5\\ @expansion{} 2 & 5 & -2 & 4\\ @expansion{} -6 & 10 & -1 & 2 @expansion{} \end@{array@} @expansion{} \right) @expansion{} $$ @expansion{} // // --- restore global variables if previously defined --- if (defined(Teali))@{int TeXaligned=Teali; export TeXaligned; kill Teali;@} if (defined(Tebra))@{string TeXbrack=Tebra; export TeXbrack; kill Tebra;@} @c end example texobj d2t_singular/latex_lib.doc:337 @end smallexample @c ---end content texobj--- @c ------------------- texpoly ------------- @node texpoly, texproc, texobj, latex_lib @subsubsection texpoly @cindex texpoly @c ---content texpoly--- Procedure from library @code{latex.lib} (@pxref{latex_lib}). @table @asis @item @strong{Usage:} texpoly(fname,p); fname string, p poly @item @strong{Return:} if @code{fname=""}: string, the poly p in LaTeX-typesetting;@* otherwise: append this string to the file @code{}, and return nothing. @item @strong{Note:} preceding ">>" are deleted in @code{fname}, and suffix ".tex" (if not given) is added to @code{fname}. @end table @strong{Example:} @smallexample @c computed example texpoly d2t_singular/latex_lib.doc:394 LIB "latex.lib"; ring r0=0,(x,y,z),dp; poly f = -1x^2 + 2; texpoly("",f); @expansion{} $-x^@{2@}+2$ ring rr= real,(x,y,z),dp; texpoly("",2x2y23z); @expansion{} $2.000x^@{2@}y^@{23@}z$ ring r7= 7,(x,y,z),dp; poly f = 2x2y23z; texpoly("",f); @expansion{} $2x^@{2@}y^@{23@}z$ ring rab =(0,a,b),(x,y,z),dp; poly f = (-2a2 +b3 -2)/a * x2y4z5 + (a2+1)*x + a+1; f; @expansion{} (-2a2+b3-2)/(a)*x2y4z5+(a2+1)*x+(a+1) texpoly("",f); @expansion{} $-\frac@{2a^@{2@}-b^@{3@}+2@}@{a@}x^@{2@}y^@{4@}z^@{5@}+(a^@{2@}+1)x+(a+1)$ @c end example texpoly d2t_singular/latex_lib.doc:394 @end smallexample @c ---end content texpoly--- @c ------------------- texproc ------------- @node texproc, texring, texpoly, latex_lib @subsubsection texproc @cindex texproc @c ---content texproc--- Procedure from library @code{latex.lib} (@pxref{latex_lib}). @table @asis @item @strong{Usage:} texproc(fname,pname); fname,pname strings @item @strong{Assume:} @code{`pname`} is a procedure. @item @strong{Return:} if @code{fname=""}: string, the proc @code{`pname`} in a verbatim environment in LaTeX-typesetting;@* otherwise: append this string to the file @code{}, and return nothing. @item @strong{Note:} preceding ">>" are deleted in @code{fname}, and suffix ".tex" (if not given) is added to @code{fname}.@* @code{texproc} cannot be applied to itself correctly. @end table @strong{Example:} @smallexample @c computed example texproc d2t_singular/latex_lib.doc:440 LIB "latex.lib"; proc exp(int i,int j,list #) @{ string s; if (size(#)) @{ for(i;i<=j;i++) @{ s = s + string(j) + string(#); @} @} return(s); @} export exp; @expansion{} // ** `exp` is already global texproc("","exp"); @expansion{} \begin@{verbatim@} @expansion{} proc exp(int i,int j,list #) @expansion{} @{ @expansion{} string s; @expansion{} if (size(#)) @expansion{} @{ @expansion{} for(i;i<=j;i++) @expansion{} @{ s = s + string(j) + string(#); @} @expansion{} @} @expansion{} return(s); @expansion{} @expansion{} @} @expansion{} \end@{verbatim@} @expansion{} kill exp; @c end example texproc d2t_singular/latex_lib.doc:440 @end smallexample @c ---end content texproc--- @c ------------------- texring ------------- @node texring, rmx, texproc, latex_lib @subsubsection texring @cindex texring @c ---content texring--- Procedure from library @code{latex.lib} (@pxref{latex_lib}). @table @asis @item @strong{Usage:} texring(fname, r[,L]); fname string, r ring, L list @item @strong{Return:} if @code{fname=""}: string, the ring in TeX-typesetting;@* otherwise: append this string to the file @code{} and return nothing. @item @strong{Note:} preceding ">>" are deleted and suffix ".tex" (if not given) is added to @code{fname}.@* The optional list L is assumed to be a list of strings which control, e.g., the symbol for the field of coefficients.@* For more details call @code{texdemo();} (generates a LaTeX2e file called @code{texlibdemo.tex} which explains all features of @code{texring}). @end table @strong{Example:} @smallexample @c computed example texring d2t_singular/latex_lib.doc:486 LIB "latex.lib"; ring r0 = 0,(x,y),dp; // char = 0, polynomial ordering texring("",r0); @expansion{} $\Q[x,y]$ // ring r7 =7,(x(0..2)),ds; // char = 7, local ordering texring("",r7); @expansion{} $\Z_@{7@}[[x_@{0@},x_@{1@},x_@{2@}]]$ // ring r1 = 0,(x1,x2,y1,y2),wp(1,2,3,4); texring("",r1); @expansion{} $\Q[x_@{1@},x_@{2@},y_@{1@},y_@{2@}]$ // ring rr = real,(x),dp; // real numbers texring("",rr); @expansion{} $\R[x]$ // ring rabc =(0,t1,t2,t3),(x,y),dp; // ring with parameters texring("",rabc); @expansion{} $\Q(t_@{1@},t_@{2@},t_@{3@})[x,y]$ // ring ralg = (7,a),(x1,x2),ds; // algebraic extension minpoly = a2-a+3; texring("",ralg); @expansion{} $\Z_@{7@}(a)[[x_@{1@},x_@{2@}]]$ texring("",ralg,"mipo"); @expansion{} $\Z_@{7@}(a)/(a^@{2@}-a+3)[[x_@{1@},x_@{2@}]]$ // ring r49=(49,a),x,dp; // Galois field texring("",r49); @expansion{} $\F_@{49@}[x]$ // setring r0; // quotient ring ideal i = x2-y3; qring q = std(i); texring("",q); @expansion{} $\Q[x,y]/\left(y^@{3@}-x^@{2@}\right) @expansion{} $ // // ------------------ additional features ------------------- ring r9 =0,(x(0..9)),ds; texring("",r9,1); @expansion{} $\Q[[x_@{0@},\ldots,x_@{9@}]]$ texring("",r9,"C","@{","^G"); @expansion{} $\C\@{x_@{0@},x_@{1@},x_@{2@},x_@{3@},x_@{4@},x_@{5@},x_@{6@},x_@{7@},x_@{8@},x_@{9@}\@}^G$ // ring rxy = 0,(x(1..5),y(1..6)),ds; intvec v = 5,6; texring("",rxy,v); @expansion{} $\Q[[x_@{1@},\ldots,x_@{5@},y_@{1@},\ldots,y_@{6@}]]$ @c end example texring d2t_singular/latex_lib.doc:486 @end smallexample @c ---end content texring--- @c ------------------- rmx ------------- @node rmx, xdvi, texring, latex_lib @subsubsection rmx @cindex rmx @c ---content rmx--- Procedure from library @code{latex.lib} (@pxref{latex_lib}). @table @asis @item @strong{Usage:} rmx(fname); fname string @item @strong{Return:} nothing; removes the @code{.log} and @code{.aux} files associated to the LaTeX file .@* @item @strong{Note:} If @code{fname} ends by @code{".dvi"} or @code{".tex"}, the @code{.dvi} or @code{.tex} file will be deleted, too. @end table @strong{Example:} @smallexample @c computed example rmx d2t_singular/latex_lib.doc:550 LIB "latex.lib"; ring r; poly f = x+y+z; opentex("exp001"); // defaulted latex2e document texobj("exp001","A polynom",f); closetex("exp001"); tex("exp001"); @expansion{} calling latex2e for : exp001.tex @expansion{} @expansion{} This is TeX, Version 3.14159 (Web2C 7.3.1) @expansion{} (exp001.tex @expansion{} LaTeX2e <1998/12/01> patch level 1 @expansion{} Babel and hyphenation patterns for american, french, german, nger\ man, i @expansion{} talian, nohyphenation, loaded. @expansion{} (/usr/share/texmf/tex/latex/base/article.cls @expansion{} Document Class: article 1999/01/07 v1.4a Standard LaTeX document class @expansion{} (/usr/share/texmf/tex/latex/base/size10.clo)) @expansion{} (/usr/share/texmf/tex/latex/amslatex/amsmath.sty @expansion{} (/usr/share/texmf/tex/latex/amslatex/amstext.sty @expansion{} (/usr/share/texmf/tex/latex/amslatex/amsgen.sty)) @expansion{} (/usr/share/texmf/tex/latex/amslatex/amsbsy.sty) @expansion{} (/usr/share/texmf/tex/latex/amslatex/amsopn.sty)) @expansion{} (/usr/share/texmf/tex/latex/amsfonts/amssymb.sty @expansion{} (/usr/share/texmf/tex/latex/amsfonts/amsfonts.sty)) @expansion{} No file exp001.aux. @expansion{} (/usr/share/texmf/tex/latex/amsfonts/umsa.fd) @expansion{} (/usr/share/texmf/tex/latex/amsfonts/umsb.fd) [1] (exp001.aux) ) @expansion{} Output written on exp001.dvi (1 page, 308 bytes). @expansion{} Transcript written on exp001.log. rmx("exp001"); // removes aux and log file of exp001 system("sh","rm exp001.*"); @expansion{} 0 @c end example rmx d2t_singular/latex_lib.doc:550 @end smallexample @c ---end content rmx--- @c ------------------- xdvi ------------- @node xdvi,, rmx, latex_lib @subsubsection xdvi @cindex xdvi @c ---content xdvi--- Procedure from library @code{latex.lib} (@pxref{latex_lib}). @table @asis @item @strong{Usage:} xdvi(fname[,style]); fname,style = string @item @strong{Return:} nothing; displays dvi-file fname.dvi with previewer xdvi @item @strong{Note:} ending .dvi may miss in fname @*style overwrites the default setting xdvi @end table @strong{Example:} @smallexample @c computed example xdvi d2t_singular/latex_lib.doc:585 LIB "latex.lib"; intmat m[3][4] = 9,2,4,5,2,5,-2,4,-6,10,-1,2,7; opentex("exp001"); texobj("exp001","An intmat: ",m); closetex("exp001"); tex("exp001"); @expansion{} calling latex2e for : exp001.tex @expansion{} @expansion{} This is TeX, Version 3.14159 (Web2C 7.3.1) @expansion{} (exp001.tex @expansion{} LaTeX2e <1998/12/01> patch level 1 @expansion{} Babel and hyphenation patterns for american, french, german, nger\ man, i @expansion{} talian, nohyphenation, loaded. @expansion{} (/usr/share/texmf/tex/latex/base/article.cls @expansion{} Document Class: article 1999/01/07 v1.4a Standard LaTeX document class @expansion{} (/usr/share/texmf/tex/latex/base/size10.clo)) @expansion{} (/usr/share/texmf/tex/latex/amslatex/amsmath.sty @expansion{} (/usr/share/texmf/tex/latex/amslatex/amstext.sty @expansion{} (/usr/share/texmf/tex/latex/amslatex/amsgen.sty)) @expansion{} (/usr/share/texmf/tex/latex/amslatex/amsbsy.sty) @expansion{} (/usr/share/texmf/tex/latex/amslatex/amsopn.sty)) @expansion{} (/usr/share/texmf/tex/latex/amsfonts/amssymb.sty @expansion{} (/usr/share/texmf/tex/latex/amsfonts/amsfonts.sty)) @expansion{} No file exp001.aux. @expansion{} (/usr/share/texmf/tex/latex/amsfonts/umsa.fd) @expansion{} (/usr/share/texmf/tex/latex/amsfonts/umsb.fd) [1] (exp001.aux) ) @expansion{} Output written on exp001.dvi (1 page, 524 bytes). @expansion{} Transcript written on exp001.log. xdvi("exp001"); @expansion{} calling xdvi for : exp001 @expansion{} system("sh","rm exp001.*"); @expansion{} 0 @c end example xdvi d2t_singular/latex_lib.doc:585 @end smallexample @c ---end content xdvi--- texi2html-1.82/test/singular_manual/d2t_singular/spectrum_lib.tex0000644000175000017500000001575211264347126027217 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/spectrum_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/spectrum_lib.doc INSTEAD @c library version: (1.12.2.3,2002/03/06) @c library file: ../Singular/LIB/spectrum.lib @cindex spectrum.lib @cindex spectrum_lib @table @asis @item @strong{Library:} spectrum.lib @item @strong{Purpose:} Singularity Spectrum for Nondegenerate Singularities @item @strong{Author:} S. Endrass @end table @strong{Procedures:} @menu * spectrumnd:: spectrum of nondegenerate isolated singularity f @end menu @c ---end content LibInfo--- @c ------------------- spectrumnd ------------- @node spectrumnd,,, spectrum_lib @subsubsection spectrumnd @cindex spectrumnd @c ---content spectrumnd--- Procedure from library @code{spectrum.lib} (@pxref{spectrum_lib}). @table @asis @item @strong{Usage:} spectrumnd(f[,1]); poly f @item @strong{Assume:} basering has characteristic 0 and local ordering, @*f has isolated singularity at 0 and nondegenerate principal part @item @strong{Return:} @format list S: ideal S[1]: spectral numbers in increasing order intvec S[2]: int S[2][i]: multiplicity of spectral number S[1][i] @end format @item @strong{Note:} if a second argument 1 is given, @*no test for a degenerate principal part will be done @*SEE_ALSO: gaussman_lib @cindex singularities @cindex Gauss-Manin connection @cindex spectrum @end table @strong{Example:} @smallexample @c computed example spectrumnd d2t_singular/spectrum_lib.doc:56 LIB "spectrum.lib"; ring R=0,(x,y),ds; poly f=x^31+x^6*y^7+x^2*y^12+x^13*y^2+y^29; spectrumnd(f); @expansion{} [1]: @expansion{} _[1]=-67/79 @expansion{} _[2]=-62/79 @expansion{} _[3]=-45/58 @expansion{} _[4]=-57/79 @expansion{} _[5]=-41/58 @expansion{} _[6]=-55/79 @expansion{} _[7]=-52/79 @expansion{} _[8]=-37/58 @expansion{} _[9]=-50/79 @expansion{} _[10]=-18/29 @expansion{} _[11]=-47/79 @expansion{} _[12]=-45/79 @expansion{} _[13]=-33/58 @expansion{} _[14]=-16/29 @expansion{} _[15]=-43/79 @expansion{} _[16]=-42/79 @expansion{} _[17]=-40/79 @expansion{} _[18]=-1/2 @expansion{} _[19]=-15/31 @expansion{} _[20]=-14/29 @expansion{} _[21]=-38/79 @expansion{} _[22]=-27/58 @expansion{} _[23]=-14/31 @expansion{} _[24]=-35/79 @expansion{} _[25]=-25/58 @expansion{} _[26]=-13/31 @expansion{} _[27]=-33/79 @expansion{} _[28]=-12/29 @expansion{} _[29]=-23/58 @expansion{} _[30]=-31/79 @expansion{} _[31]=-12/31 @expansion{} _[32]=-30/79 @expansion{} _[33]=-21/58 @expansion{} _[34]=-11/31 @expansion{} _[35]=-28/79 @expansion{} _[36]=-10/29 @expansion{} _[37]=-26/79 @expansion{} _[38]=-19/58 @expansion{} _[39]=-10/31 @expansion{} _[40]=-25/79 @expansion{} _[41]=-9/29 @expansion{} _[42]=-17/58 @expansion{} _[43]=-23/79 @expansion{} _[44]=-9/31 @expansion{} _[45]=-8/29 @expansion{} _[46]=-21/79 @expansion{} _[47]=-15/58 @expansion{} _[48]=-8/31 @expansion{} _[49]=-20/79 @expansion{} _[50]=-7/29 @expansion{} _[51]=-19/79 @expansion{} _[52]=-18/79 @expansion{} _[53]=-7/31 @expansion{} _[54]=-13/58 @expansion{} _[55]=-6/29 @expansion{} _[56]=-16/79 @expansion{} _[57]=-6/31 @expansion{} _[58]=-15/79 @expansion{} _[59]=-11/58 @expansion{} _[60]=-14/79 @expansion{} _[61]=-5/29 @expansion{} _[62]=-13/79 @expansion{} _[63]=-5/31 @expansion{} _[64]=-9/58 @expansion{} _[65]=-11/79 @expansion{} _[66]=-4/29 @expansion{} _[67]=-4/31 @expansion{} _[68]=-10/79 @expansion{} _[69]=-7/58 @expansion{} _[70]=-9/79 @expansion{} _[71]=-3/29 @expansion{} _[72]=-8/79 @expansion{} _[73]=-3/31 @expansion{} _[74]=-7/79 @expansion{} _[75]=-5/58 @expansion{} _[76]=-6/79 @expansion{} _[77]=-2/29 @expansion{} _[78]=-2/31 @expansion{} _[79]=-5/79 @expansion{} _[80]=-3/58 @expansion{} _[81]=-4/79 @expansion{} _[82]=-3/79 @expansion{} _[83]=-1/29 @expansion{} _[84]=-1/31 @expansion{} _[85]=-2/79 @expansion{} _[86]=-1/58 @expansion{} _[87]=-1/79 @expansion{} _[88]=0 @expansion{} _[89]=1/79 @expansion{} _[90]=1/58 @expansion{} _[91]=2/79 @expansion{} _[92]=1/31 @expansion{} _[93]=1/29 @expansion{} _[94]=3/79 @expansion{} _[95]=4/79 @expansion{} _[96]=3/58 @expansion{} _[97]=5/79 @expansion{} _[98]=2/31 @expansion{} _[99]=2/29 @expansion{} _[100]=6/79 @expansion{} _[101]=5/58 @expansion{} _[102]=7/79 @expansion{} _[103]=3/31 @expansion{} _[104]=8/79 @expansion{} _[105]=3/29 @expansion{} _[106]=9/79 @expansion{} _[107]=7/58 @expansion{} _[108]=10/79 @expansion{} _[109]=4/31 @expansion{} _[110]=4/29 @expansion{} _[111]=11/79 @expansion{} _[112]=9/58 @expansion{} _[113]=5/31 @expansion{} _[114]=13/79 @expansion{} _[115]=5/29 @expansion{} _[116]=14/79 @expansion{} _[117]=11/58 @expansion{} _[118]=15/79 @expansion{} _[119]=6/31 @expansion{} _[120]=16/79 @expansion{} _[121]=6/29 @expansion{} _[122]=13/58 @expansion{} _[123]=7/31 @expansion{} _[124]=18/79 @expansion{} _[125]=19/79 @expansion{} _[126]=7/29 @expansion{} _[127]=20/79 @expansion{} _[128]=8/31 @expansion{} _[129]=15/58 @expansion{} _[130]=21/79 @expansion{} _[131]=8/29 @expansion{} _[132]=9/31 @expansion{} _[133]=23/79 @expansion{} _[134]=17/58 @expansion{} _[135]=9/29 @expansion{} _[136]=25/79 @expansion{} _[137]=10/31 @expansion{} _[138]=19/58 @expansion{} _[139]=26/79 @expansion{} _[140]=10/29 @expansion{} _[141]=28/79 @expansion{} _[142]=11/31 @expansion{} _[143]=21/58 @expansion{} _[144]=30/79 @expansion{} _[145]=12/31 @expansion{} _[146]=31/79 @expansion{} _[147]=23/58 @expansion{} _[148]=12/29 @expansion{} _[149]=33/79 @expansion{} _[150]=13/31 @expansion{} _[151]=25/58 @expansion{} _[152]=35/79 @expansion{} _[153]=14/31 @expansion{} _[154]=27/58 @expansion{} _[155]=38/79 @expansion{} _[156]=14/29 @expansion{} _[157]=15/31 @expansion{} _[158]=1/2 @expansion{} _[159]=40/79 @expansion{} _[160]=42/79 @expansion{} _[161]=43/79 @expansion{} _[162]=16/29 @expansion{} _[163]=33/58 @expansion{} _[164]=45/79 @expansion{} _[165]=47/79 @expansion{} _[166]=18/29 @expansion{} _[167]=50/79 @expansion{} _[168]=37/58 @expansion{} _[169]=52/79 @expansion{} _[170]=55/79 @expansion{} _[171]=41/58 @expansion{} _[172]=57/79 @expansion{} _[173]=45/58 @expansion{} _[174]=62/79 @expansion{} _[175]=67/79 @expansion{} [2]: @expansion{} 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,\ 1,1,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,1,1,1,1,2,1,1,1\ ,1,1,2,1,1,1,1,2,1,1,1,1,1,2,1,4,1,2,1,1,1,1,1,2,1,1,1,1,2,1,1,1,1,1,2,1,\ 1,1,1,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1\ ,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 @c end example spectrumnd d2t_singular/spectrum_lib.doc:56 @end smallexample @c ---end content spectrumnd--- texi2html-1.82/test/singular_manual/d2t_singular/equising_lib.tex0000644000175000017500000003040611264347126027172 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/equising_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/equising_lib.doc INSTEAD @c library version: (1.7.2.6,2003/05/23) @c library file: ../Singular/LIB/equising.lib @cindex equising.lib @cindex equising_lib @table @asis @item @strong{Library:} equising.lib @item @strong{Purpose:} Equisingularity Stratum of a Family of Plane Curves @item @strong{Author:} Christoph Lossen, lossen@@mathematik.uni-kl.de @*Andrea Mindnich, mindnich@@mathematik.uni-kl.de @end table @strong{Main procedures:} @menu * tau_es:: codim of mu-const stratum in semi-universal def. base * esIdeal:: (Wahl's) equisingularity ideal of f * esStratum:: equisingularity stratum of a family F * isEquising:: tests if a given deformation is equisingular @end menu @strong{Auxiliary procedure:} @menu * control_Matrix:: computes list of blowing-up data @end menu @c ---end content LibInfo--- @c ------------------- tau_es ------------- @node tau_es, esIdeal,, equising_lib @subsubsection tau_es @cindex tau_es @c ---content tau_es--- Procedure from library @code{equising.lib} (@pxref{equising_lib}). @table @asis @item @strong{Usage:} tau_es(f); f poly @item @strong{Assume:} f is a reduced bivariate polynomial, the basering has precisely two variables, is local and no qring. @item @strong{Return:} int, the codimension of the mu-const stratum in the semi-universal deformation base. @item @strong{Note:} printlevel>=1 displays additional information. @*When called with any additional parameter, the computation of the Milnor number is avoided (no check for NND). @end table @strong{Example:} @smallexample @c reused example tau_es d2t_singular/equising_lib.doc:57 LIB "equising.lib"; ring r=32003,(x,y),ds; poly f=(x4-y4)^2-x10; tau_es(f); @expansion{} 42 @c end example tau_es d2t_singular/equising_lib.doc:57 @end smallexample @c inserted refs from d2t_singular/equising_lib.doc:64 @ifinfo @menu See also: * esIdeal:: * invariants:: * tjurina:: @end menu @end ifinfo @iftex @strong{See also:} @ref{esIdeal}; @ref{invariants}; @ref{tjurina}. @end iftex @c end inserted refs from d2t_singular/equising_lib.doc:64 @c ---end content tau_es--- @c ------------------- esIdeal ------------- @node esIdeal, esStratum, tau_es, equising_lib @subsubsection esIdeal @cindex esIdeal @c ---content esIdeal--- Procedure from library @code{equising.lib} (@pxref{equising_lib}). @table @asis @item @strong{Usage:} esIdeal(f); f poly @item @strong{Assume:} f is a reduced bivariate polynomial, the basering has precisely two variables, is local and no qring, and the characteristic of the ground field does not divide mult(f). @item @strong{Return:} list of two ideals: @format _[1]: equisingularity ideal of f (in sense of Wahl) _[2]: equisingularity ideal of f with fixed section @end format @item @strong{Note:} if some of the above condition is not satisfied then return value is list(0,0). @cindex equisingularity ideal @end table @strong{Example:} @smallexample @c computed example esIdeal d2t_singular/equising_lib.doc:101 LIB "equising.lib"; ring r=0,(x,y),ds; poly f=x7+y7+(x-y)^2*x2y2; list K=esIdeal(f); @expansion{} polynomial is Newton degenerated ! @expansion{} @expansion{} // @expansion{} // versal deformation with triv. section @expansion{} // ===================================== @expansion{} // @expansion{} // @expansion{} // Compute equisingular Stratum over Spec(C[t]/t^2) @expansion{} // ================================================ @expansion{} // @expansion{} // finished @expansion{} // option(redSB); // Wahl's equisingularity ideal: std(K[1]); @expansion{} _[1]=4x4y-10x2y3+6xy4+21x6+14y6 @expansion{} _[2]=4x3y2-6x2y3+2xy4+7x6 @expansion{} _[3]=x2y4-xy5 @expansion{} _[4]=x7 @expansion{} _[5]=xy6 @expansion{} _[6]=y7 ring rr=0,(x,y),ds; poly f=x4+4x3y+6x2y2+4xy3+y4+2x2y15+4xy16+2y17+xy23+y24+y30+y31; list K=esIdeal(f); @expansion{} polynomial is Newton degenerated ! @expansion{} @expansion{} // @expansion{} // versal deformation with triv. section @expansion{} // ===================================== @expansion{} // @expansion{} // @expansion{} // Compute equisingular Stratum over Spec(C[t]/t^2) @expansion{} // ================================================ @expansion{} // @expansion{} // finished @expansion{} // vdim(std(K[1])); @expansion{} 68 // the latter should be equal to: tau_es(f); @expansion{} 68 @c end example esIdeal d2t_singular/equising_lib.doc:101 @end smallexample @c inserted refs from d2t_singular/equising_lib.doc:117 @ifinfo @menu See also: * esStratum:: * tau_es:: @end menu @end ifinfo @iftex @strong{See also:} @ref{esStratum}; @ref{tau_es}. @end iftex @c end inserted refs from d2t_singular/equising_lib.doc:117 @c ---end content esIdeal--- @c ------------------- esStratum ------------- @node esStratum, isEquising, esIdeal, equising_lib @subsubsection esStratum @cindex esStratum @c ---content esStratum--- Procedure from library @code{equising.lib} (@pxref{equising_lib}). @table @asis @item @strong{Usage:} esStratum(F[,m,L]); F poly, m int, L list @item @strong{Assume:} F defines a deformation of a reduced bivariate polynomial f and the characteristic of the basering does not divide mult(f). @* If nv is the number of variables of the basering, then the first nv-2 variables are the deformation parameters. @* If the basering is a qring, ideal(basering) must only depend on the deformation parameters. @item @strong{Compute:} equations for the stratum of equisingular deformations with fixed (trivial) section. @item @strong{Return:} list l: either consisting of an ideal and an integer, where @format l[1]=ideal defining the equisingular stratum l[2]=1 if some error has occured, l[2]=0 otherwise; @end format or consisting of a ring and an integer, where @format l[1]=ESSring is a ring extension of basering containing the ideal ES (describing the ES-stratum) and the poly p_F=F, l[2]=1 if some error has occured, l[2]=0 otherwise. @end format @item @strong{Note:} L is supposed to be the output of reddevelop (with the given ordering of the variables appearing in f). @* If m is given, the ES Stratum over A/maxideal(m) is computed. @* This procedure uses @code{execute} or calls a procedure using @code{execute}. printlevel>=2 displays additional information. @cindex equisingular stratum @end table @strong{Example:} @smallexample @c reused example esStratum d2t_singular/equising_lib.doc:171 LIB "equising.lib"; int p=printlevel; printlevel=1; ring r = 0,(a,b,c,d,e,f,g,x,y),ds; poly F = (x2+2xy+y2+x5)+ax+by+cx2+dxy+ey2+fx3+gx4; list M = esStratum(F); M[1]; @expansion{} _[1]=g @expansion{} _[2]=f @expansion{} _[3]=b @expansion{} _[4]=a @expansion{} _[5]=-4c+4d-4e+d2-4ce printlevel=3; // displays additional information esStratum(F,2); // es stratum over Q[a,b,c,d,e,f,g] / ^2 @expansion{} // @expansion{} // Compute HN development @expansion{} // ---------------------- @expansion{} // finished @expansion{} // @expansion{} // Blowup Step 1 completed @expansion{} // Blowup Step 2 completed @expansion{} // Blowup Step 3 completed @expansion{} // 1 branch finished @expansion{} // @expansion{} // Elimination starts: @expansion{} // ------------------- @expansion{} // finished @expansion{} // @expansion{} // output of 'esStratum' is list consisting of: @expansion{} // _[1] = ideal defining equisingular stratum @expansion{} // _[2] = 0 @expansion{} [1]: @expansion{} _[1]=b @expansion{} _[2]=a @expansion{} _[3]=c-d+e @expansion{} _[4]=g @expansion{} _[5]=f @expansion{} [2]: @expansion{} 0 ideal I = f-fa,e+b; qring q = std(I); poly F = imap(r,F); esStratum(F); @expansion{} // @expansion{} // Compute HN development @expansion{} // ---------------------- @expansion{} // finished @expansion{} // @expansion{} // Blowup Step 1 completed @expansion{} // Blowup Step 2 completed @expansion{} // Blowup Step 3 completed @expansion{} // 1 branch finished @expansion{} // @expansion{} // Elimination starts: @expansion{} // ------------------- @expansion{} // finished @expansion{} // @expansion{} // output of 'esStratum' is list consisting of: @expansion{} // _[1] = ideal defining equisingular stratum @expansion{} // _[2] = 0 @expansion{} [1]: @expansion{} _[1]=e @expansion{} _[2]=a @expansion{} _[3]=-4c+4d+d2 @expansion{} _[4]=g @expansion{} [2]: @expansion{} 0 printlevel=p; @c end example esStratum d2t_singular/equising_lib.doc:171 @end smallexample @c inserted refs from d2t_singular/equising_lib.doc:188 @ifinfo @menu See also: * esIdeal:: * isEquising:: @end menu @end ifinfo @iftex @strong{See also:} @ref{esIdeal}; @ref{isEquising}. @end iftex @c end inserted refs from d2t_singular/equising_lib.doc:188 @c ---end content esStratum--- @c ------------------- isEquising ------------- @node isEquising, control_Matrix, esStratum, equising_lib @subsubsection isEquising @cindex isEquising @c ---content isEquising--- Procedure from library @code{equising.lib} (@pxref{equising_lib}). @table @asis @item @strong{Usage:} isEquising(F[,m,L]); F poly, m int, L list @item @strong{Assume:} F defines a deformation of a reduced bivariate polynomial f and the characteristic of the basering does not divide mult(f). @* If nv is the number of variables of the basering, then the first nv-2 variables are the deformation parameters. @* If the basering is a qring, ideal(basering) must only depend on the deformation parameters. @item @strong{Compute:} tests if the given family is equisingular along the trivial section. @item @strong{Return:} int: 1 if the family is equisingular, 0 otherwise. @item @strong{Note:} L is supposed to be the output of reddevelop (with the given ordering of the variables appearing in f). @* If m is given, the family is considered over A/maxideal(m). @* This procedure uses @code{execute} or calls a procedure using @code{execute}. printlevel>=2 displays additional information. @end table @strong{Example:} @smallexample @c reused example isEquising d2t_singular/equising_lib.doc:231 LIB "equising.lib"; ring r = 0,(a,b,x,y),ds; poly F = (x2+2xy+y2+x5)+ay3+bx5; isEquising(F); @expansion{} 0 ideal I = ideal(a); qring q = std(I); poly F = imap(r,F); isEquising(F); @expansion{} 1 ring rr=0,(A,B,C,x,y),ls; poly f=x7+y7+(x-y)^2*x2y2; poly F=f+A*y*diff(f,x)+B*x*diff(f,x); isEquising(F); @expansion{} 0 isEquising(F,2); // computation over Q[a,b] / ^2 @expansion{} 1 @c end example isEquising d2t_singular/equising_lib.doc:231 @end smallexample @c ---end content isEquising--- @c ------------------- control_Matrix ------------- @node control_Matrix,, isEquising, equising_lib @subsubsection control_Matrix @cindex control_Matrix @c ---content control_Matrix--- Procedure from library @code{equising.lib} (@pxref{equising_lib}). @table @asis @item @strong{Assume:} L is the output of multsequence(reddevelop(f)). @item @strong{Return:} list M of 4 intmat's: @format M[1] contains the multiplicities at the respective infinitely near points p[i,j] (i=step of blowup+1, j=branch) -- if branches j=k,...,k+m pass through the same p[i,j] then the multiplicity is stored in M[1][k,j], while M[1][k+1]=...=M[1][k+m]=0. M[2] contains the number of branches meeting at p[i,j] (again, the information is stored according to the above rule) M[3] contains the information about the splitting of M[1][i,j] with respect to different tangents of branches at p[i,j] (information is stored only for minimal j>=k corresponding to a new tangent direction). The entries are the sum of multiplicities of all branches with the respective tangent. M[4] contains the maximal sum of higher multiplicities for a branch passing through p[i,j] ( = degree Bound for blowing up) @end format @item @strong{Note:} the branches are ordered in such a way that only consecutive branches can meet at an infinitely near point. @* the final rows of the matrices M[1],...,M[3] is (1,1,1,...,1), and correspond to infinitely near points such that the strict transforms of the branches are smooth and intersect the exceptional divisor transversally. @end table @c inserted refs from d2t_singular/equising_lib.doc:287 @ifinfo @menu See also: * multsequence:: @end menu @end ifinfo @iftex @strong{See also:} @ref{multsequence}. @end iftex @c end inserted refs from d2t_singular/equising_lib.doc:287 @c ---end content control_Matrix--- texi2html-1.82/test/singular_manual/d2t_singular/mprimdec_lib.tex0000644000175000017500000006432311264347126027153 0ustar flichtenheldflichtenheld@c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/mprimdec_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/mprimdec_lib.doc INSTEAD @c library version: (1.1.2.3,2002/03/19) @c library file: ../Singular/LIB/mprimdec.lib @cindex mprimdec.lib @cindex mprimdec_lib @table @asis @item @strong{Library:} mprimdec.lib @item @strong{Purpose:} procedures for primary decomposition of modules @item @strong{Authors:} Alexander Dreyer, dreyer@@mathematik.uni-kl.de; adreyer@@web.de @item @strong{Remark:} These procedures are implemented to be used in characteristic 0. @*They also work in positive characteristic >> 0. @*In small characteristic and for algebraic extensions, the procedures via Gianni, Trager, Zacharias may not terminate. @end table @strong{Procedures:} @menu * separator:: computes a list of separators of prime ideals * PrimdecA:: (not necessarily minimal) primary decomposition via Shimoyama/Yokoyama (suggested by Graebe) * PrimdecB:: (not necessarily minimal) primary decomposition for pseudo-primary ideals * modDec:: minimal primary decomposition via Shimoyama/Yokoyama (suggested by Graebe) * zeroMod:: minimal zero-dimensional primary decomposition via Gianni, Trager and Zacharias * GTZmod:: minimal primary decomposition via Gianni, Trager and Zacharias * dec1var:: primary decomposition for one variable * annil:: the annihilator of M/N in the basering * splitting:: splitting to simpler modules * primTest:: tests whether i is prime or homogeneous * preComp:: enhanced Version of splitting * indSet:: lists with varstrings of(in)dependent variables * GTZopt:: a faster version of GTZmod * zeroOpt:: a faster version of zeroMod * clrSBmod:: extracts an minimal SB from a SB * minSatMod:: minimal saturation of N w.r.t. I * specialModulesEqual:: checks for equality of standard bases of modules if N1 is contained in N2 or vice versa * stdModulesEqual:: checks for equality of standard bases * modulesEqual:: checks for equality of modules * getData:: extracts oldData and computes the remaining data @end menu @c ---end content LibInfo--- @c ------------------- separator ------------- @node separator, PrimdecA,, mprimdec_lib @subsubsection separator @cindex separator @c ---content separator--- Procedure from library @code{mprimdec.lib} (@pxref{mprimdec_lib}). @table @asis @item @strong{Usage:} separator(l); list l of prime ideals @item @strong{Return:} list sepList; @*a list of separators of the prime ideals in l, @*i.e. polynomials p_ij, s.th. p_ij is in l[j], @*for all l[j] not contained in l[i] @*but p_ij is not in l[i] @end table @strong{Example:} @smallexample @c computed example separator d2t_singular/mprimdec_lib.doc:68 LIB "mprimdec.lib"; ring r=0,(x,y,z),dp; ideal i=(x2y,xz2,y2z,z3); list l=minAssGTZ(i); list sepL=separator(l); sepL; @expansion{} [1]: @expansion{} x @expansion{} [2]: @expansion{} y @c end example separator d2t_singular/mprimdec_lib.doc:68 @end smallexample @c ---end content separator--- @c ------------------- PrimdecA ------------- @node PrimdecA, PrimdecB, separator, mprimdec_lib @subsubsection PrimdecA @cindex PrimdecA @c ---content PrimdecA--- Procedure from library @code{mprimdec.lib} (@pxref{mprimdec_lib}). @table @asis @item @strong{Usage:} PrimdecA (N[, i]); module N, int i @item @strong{Return:} list l @*a (not necessarily minimal) primary decomposition of N computed by a generalized version of @*the algorithm of Schimoyama/Yokoyama, @*if i=1 is given, the factorizing Groebner is used @*to compute the isolated primes. @end table @strong{Example:} @smallexample @c computed example PrimdecA d2t_singular/mprimdec_lib.doc:101 LIB "mprimdec.lib"; ring r=0,(x,y,z),dp; module N=x*gen(1)+ y*gen(2), x*gen(1)-x2*gen(2); list l=PrimdecA(N); l; @expansion{} [1]: @expansion{} [1]: @expansion{} _[1]=x*gen(1)+y*gen(2) @expansion{} _[2]=x*gen(2)-gen(1) @expansion{} [2]: @expansion{} _[1]=x2+y @expansion{} [2]: @expansion{} [1]: @expansion{} _[1]=gen(2) @expansion{} _[2]=x*gen(1) @expansion{} [2]: @expansion{} _[1]=x @expansion{} [3]: @expansion{} [1]: @expansion{} _[1]=y*gen(1) @expansion{} _[2]=y*gen(2) @expansion{} _[3]=x*gen(1) @expansion{} _[4]=x*gen(2) @expansion{} [2]: @expansion{} _[1]=y @expansion{} _[2]=x @c end example PrimdecA d2t_singular/mprimdec_lib.doc:101 @end smallexample @c ---end content PrimdecA--- @c ------------------- PrimdecB ------------- @node PrimdecB, modDec, PrimdecA, mprimdec_lib @subsubsection PrimdecB @cindex PrimdecB @c ---content PrimdecB--- Procedure from library @code{mprimdec.lib} (@pxref{mprimdec_lib}). @table @asis @item @strong{Usage:} PrimdecB (N, p); pseudo-primary module N, isolated prime ideal p @item @strong{Return:} list l @*a (not necessarily minimal) primary decomposition of N @end table @strong{Example:} @smallexample @c computed example PrimdecB d2t_singular/mprimdec_lib.doc:130 LIB "mprimdec.lib"; ring r=0,(x,y,z),dp; module N=y*gen(1),y2*gen(2),yz*gen(2),yx*gen(2); ideal p=y; list l=PrimdecB(N,p); l; @expansion{} [1]: @expansion{} [1]: @expansion{} _[1]=y*gen(1) @expansion{} _[2]=y*gen(2) @expansion{} [2]: @expansion{} _[1]=y @expansion{} [2]: @expansion{} [1]: @expansion{} _[1]=y*gen(1) @expansion{} _[2]=y*gen(2) @expansion{} _[3]=x*gen(1) @expansion{} _[4]=x*gen(2) @expansion{} [2]: @expansion{} _[1]=y @expansion{} _[2]=x @expansion{} [3]: @expansion{} [1]: @expansion{} _[1]=z*gen(1) @expansion{} _[2]=z*gen(2) @expansion{} _[3]=y*gen(1) @expansion{} _[4]=x*gen(1) @expansion{} _[5]=x*gen(2) @expansion{} _[6]=y2*gen(2) @expansion{} [2]: @expansion{} _[1]=z @expansion{} _[2]=y @expansion{} _[3]=x @c end example PrimdecB d2t_singular/mprimdec_lib.doc:130 @end smallexample @c ---end content PrimdecB--- @c ------------------- modDec ------------- @node modDec, zeroMod, PrimdecB, mprimdec_lib @subsubsection modDec @cindex modDec @c ---content modDec--- Procedure from library @code{mprimdec.lib} (@pxref{mprimdec_lib}). @table @asis @item @strong{Usage:} modDec (N[, i]); module N, int i @item @strong{Return:} list l @*a minimal primary decomposition of N @*computed by an generalized version of @*the algorithm of Schimoyama/Yokoyama, @*if i=1 is given, the factorizing Groebner is used @end table @strong{Example:} @smallexample @c computed example modDec d2t_singular/mprimdec_lib.doc:162 LIB "mprimdec.lib"; ring r=0,(x,y,z),dp; module N=x*gen(1)+ y*gen(2), x*gen(1)-x2*gen(2); list l=modDec(N); l; @expansion{} [1]: @expansion{} [1]: @expansion{} _[1]=x*gen(1)+y*gen(2) @expansion{} _[2]=x*gen(2)-gen(1) @expansion{} [2]: @expansion{} _[1]=x2+y @expansion{} [2]: @expansion{} [1]: @expansion{} _[1]=gen(2) @expansion{} _[2]=x*gen(1) @expansion{} [2]: @expansion{} _[1]=x @c end example modDec d2t_singular/mprimdec_lib.doc:162 @end smallexample @c ---end content modDec--- @c ------------------- zeroMod ------------- @node zeroMod, GTZmod, modDec, mprimdec_lib @subsubsection zeroMod @cindex zeroMod @c ---content zeroMod--- Procedure from library @code{mprimdec.lib} (@pxref{mprimdec_lib}). @table @asis @item @strong{Usage:} zeroMod (N[, check]); zero-dimensional module N[, module check] @item @strong{Return:} list l @*the minimal primary decomposition of a zero-dimensional module N, computed by a generalized version of the algorithm @*of Gianni, Trager and Zacharias @item @strong{Note:} if the parameter check is given, only components @*not containing check are computed @end table @strong{Example:} @smallexample @c computed example zeroMod d2t_singular/mprimdec_lib.doc:197 LIB "mprimdec.lib"; ring r=0,z,dp; module N=z*gen(1),(z-1)*gen(2),(z+1)*gen(3); list l=zeroMod(N); @expansion{} 2 l; @expansion{} [1]: @expansion{} [1]: @expansion{} _[1]=gen(1) @expansion{} _[2]=gen(3) @expansion{} _[3]=z*gen(2)-gen(2) @expansion{} [2]: @expansion{} _[1]=z-1 @expansion{} [2]: @expansion{} [1]: @expansion{} _[1]=gen(2) @expansion{} _[2]=gen(3) @expansion{} _[3]=z*gen(1) @expansion{} [2]: @expansion{} _[1]=z @expansion{} [3]: @expansion{} [1]: @expansion{} _[1]=gen(1) @expansion{} _[2]=gen(2) @expansion{} _[3]=z*gen(3)+gen(3) @expansion{} [2]: @expansion{} _[1]=z+1 @c end example zeroMod d2t_singular/mprimdec_lib.doc:197 @end smallexample @c ---end content zeroMod--- @c ------------------- GTZmod ------------- @node GTZmod, dec1var, zeroMod, mprimdec_lib @subsubsection GTZmod @cindex GTZmod @c ---content GTZmod--- Procedure from library @code{mprimdec.lib} (@pxref{mprimdec_lib}). @table @asis @item @strong{Usage:} GTZmod (N[, check]); module N[, module check] @item @strong{Return:} list l @*the minimal primary decomposition of the module N, @*computed by a generalized version of the algorithm @*of Gianny, Trager and Zacharias @item @strong{Note:} if the parameter check is given, only components @*not containing check are computed @end table @strong{Example:} @smallexample @c computed example GTZmod d2t_singular/mprimdec_lib.doc:231 LIB "mprimdec.lib"; ring r=0,(x,y,z),dp; module N=x*gen(1)+ y*gen(2), x*gen(1)-x2*gen(2); list l=GTZmod(N); @expansion{} 2 l; @expansion{} [1]: @expansion{} [1]: @expansion{} _[1]=x*gen(1)+y*gen(2) @expansion{} _[2]=x*gen(2)-gen(1) @expansion{} [2]: @expansion{} _[1]=x2+y @expansion{} [2]: @expansion{} [1]: @expansion{} _[1]=gen(2) @expansion{} _[2]=x*gen(1) @expansion{} [2]: @expansion{} _[1]=x @c end example GTZmod d2t_singular/mprimdec_lib.doc:231 @end smallexample @c ---end content GTZmod--- @c ------------------- dec1var ------------- @node dec1var, annil, GTZmod, mprimdec_lib @subsubsection dec1var @cindex dec1var @c ---content dec1var--- Procedure from library @code{mprimdec.lib} (@pxref{mprimdec_lib}). @table @asis @item @strong{Usage:} dec1var (N); zero-dimensional module N[, module check] @item @strong{Return:} list l @*the minimal primary decomposition of a submodule N of R^s if nvars(R)=1 @item @strong{Note:} if the parameter check is given, only components @*not containing check are computed @end table @strong{Example:} @smallexample @c computed example dec1var d2t_singular/mprimdec_lib.doc:265 LIB "mprimdec.lib"; ring r=0,z,dp; module N=z*gen(1),(z-1)*gen(2),(z+1)*gen(3); list l=dec1var(N); l; @expansion{} [1]: @expansion{} [1]: @expansion{} _[1]=gen(1) @expansion{} _[2]=gen(3) @expansion{} _[3]=z*gen(2)-gen(2) @expansion{} [2]: @expansion{} _[1]=z-1 @expansion{} [2]: @expansion{} [1]: @expansion{} _[1]=gen(2) @expansion{} _[2]=gen(3) @expansion{} _[3]=z*gen(1) @expansion{} [2]: @expansion{} _[1]=z @expansion{} [3]: @expansion{} [1]: @expansion{} _[1]=gen(1) @expansion{} _[2]=gen(2) @expansion{} _[3]=z*gen(3)+gen(3) @expansion{} [2]: @expansion{} _[1]=z+1 @c end example dec1var d2t_singular/mprimdec_lib.doc:265 @end smallexample @c ---end content dec1var--- @c ------------------- annil ------------- @node annil, splitting, dec1var, mprimdec_lib @subsubsection annil @cindex annil @c ---content annil--- Procedure from library @code{mprimdec.lib} (@pxref{mprimdec_lib}). @table @asis @item @strong{Usage:} annil(N); module N @item @strong{Return:} ideal ann=std(quotient(N,freemodule(nrows(N)))); @*the annihilator of M/N in the basering @item @strong{Note:} ann is a std basis in the basering @end table @strong{Example:} @smallexample @c computed example annil d2t_singular/mprimdec_lib.doc:296 LIB "mprimdec.lib"; ring r=0,(x,y,z),dp; module N=x*gen(1), y*gen(2); ideal ann=annil(N); ann; @expansion{} ann[1]=xy @c end example annil d2t_singular/mprimdec_lib.doc:296 @end smallexample @c ---end content annil--- @c ------------------- splitting ------------- @node splitting, primTest, annil, mprimdec_lib @subsubsection splitting @cindex splitting @c ---content splitting--- Procedure from library @code{mprimdec.lib} (@pxref{mprimdec_lib}). @table @asis @item @strong{Usage:} splitting(N[,check[, ann]]); module N, module check, ideal ann @item @strong{Return:} (l, check) list l, module check @*the elements of l consists of a triple with @*[1] of type module [2] and [3] of type ideal @*s.th. the intersection of the modules is equal to the zero-dimensional module N, furthermore l[j][3]=annil(l[j][1]) if l[j][2]!=0 then the module l[j][1] is primary @*with associated prime l[j][2], @*and check=intersect(check, l[j][1]) is computed @item @strong{Note:} if the parameter check is given, only components not containing check are computed; if ann is given, ann is used instead of annil(N) @end table @strong{Example:} @smallexample @c computed example splitting d2t_singular/mprimdec_lib.doc:334 LIB "mprimdec.lib"; ring r=0,z,lp; module N=z*gen(1), (z+1)*gen(2); N=std(N); list l; module check; (l, check)=splitting(N); l; @expansion{} [1]: @expansion{} [1]: @expansion{} _[1]=gen(2) @expansion{} _[2]=z*gen(1) @expansion{} [2]: @expansion{} _[1]=z @expansion{} [3]: @expansion{} _[1]=z @expansion{} [4]: @expansion{} _[1]=z @expansion{} [2]: @expansion{} [1]: @expansion{} _[1]=gen(1) @expansion{} _[2]=z*gen(2)+gen(2) @expansion{} [2]: @expansion{} _[1]=z+1 @expansion{} [3]: @expansion{} _[1]=z+1 @expansion{} [4]: @expansion{} _[1]=z+1 check; @expansion{} check[1]=z*gen(2)+gen(2) @expansion{} check[2]=z*gen(1) @c end example splitting d2t_singular/mprimdec_lib.doc:334 @end smallexample @c ---end content splitting--- @c ------------------- primTest ------------- @node primTest, preComp, splitting, mprimdec_lib @subsubsection primTest @cindex primTest @c ---content primTest--- Procedure from library @code{mprimdec.lib} (@pxref{mprimdec_lib}). @table @asis @item @strong{Usage:} primTest(i[, p]); a zero-dimensional ideal i, irreducible poly p in i @item @strong{Return:} if i neither is prime nor is homogeneous then ideal(0) is returned, else radical(i) @end table @strong{Example:} @smallexample @c computed example primTest d2t_singular/mprimdec_lib.doc:365 LIB "mprimdec.lib"; ring r=0,(x,y,z),lp; ideal i=x+1,y-1,z; i=std(i); ideal primId=primTest(i,z); primId; @expansion{} primId[1]=z @expansion{} primId[2]=y-1 @expansion{} primId[3]=x+1 i=x,z2,yz,y2; i=std(i); primId=primTest(i); primId; @expansion{} primId[1]=x @expansion{} primId[2]=y @expansion{} primId[3]=z @c end example primTest d2t_singular/mprimdec_lib.doc:365 @end smallexample @c ---end content primTest--- @c ------------------- preComp ------------- @node preComp, indSet, primTest, mprimdec_lib @subsubsection preComp @cindex preComp @c ---content preComp--- Procedure from library @code{mprimdec.lib} (@pxref{mprimdec_lib}). @table @asis @item @strong{Usage:} preComp(N,check[, ann]); module N, module check, ideal ann @item @strong{Return:} (l, check) list l, module check @*the elements of l consists of a triple with @*[1] of type module [2] and [3] of type ideal @*s.th. the intersection of the modules is equal to the zero-dimensional module N, furthermore l[j][3]=annil(l[j][1]) if l[j][2]!=0 then the module l[j][1] is primary @*with associated prime l[j][2], @*and check=intersect(check, l[j][1]) is computed @item @strong{Note:} only components not containing check are computed; @*if ann is given, ann is used instead of annil(N) @end table @strong{Example:} @smallexample @c computed example preComp d2t_singular/mprimdec_lib.doc:408 LIB "mprimdec.lib"; ring r=0,z,lp; module N=z*gen(1), (z+1)*gen(2); N=std(N); list l; module check; (l, check)=preComp(N,freemodule(2)); l; @expansion{} [1]: @expansion{} [1]: @expansion{} _[1]=z*gen(1) @expansion{} _[2]=gen(2) @expansion{} [2]: @expansion{} _[1]=z @expansion{} [3]: @expansion{} _[1]=z @expansion{} [2]: @expansion{} [1]: @expansion{} _[1]=gen(1) @expansion{} _[2]=z*gen(2)+gen(2) @expansion{} [2]: @expansion{} _[1]=z+1 @expansion{} [3]: @expansion{} _[1]=z+1 check; @expansion{} check[1]=z*gen(1) @expansion{} check[2]=z*gen(2)+gen(2) @c end example preComp d2t_singular/mprimdec_lib.doc:408 @end smallexample @c ---end content preComp--- @c ------------------- indSet ------------- @node indSet, GTZopt, preComp, mprimdec_lib @subsubsection indSet @cindex indSet @c ---content indSet--- Procedure from library @code{mprimdec.lib} (@pxref{mprimdec_lib}). @table @asis @item @strong{Usage:} indSet(i); i ideal @item @strong{Return:} list with two entrees @*both are lists of new varstrings with the dependent variables the independent set, the ordstring with the corresp. block ordering, and the integer where the independent set starts in the varstring @item @strong{Note:} the first entry gives the strings for all maximal independent sets the second gives the strings for the independent sets, @*which cannot be enhanced @end table @strong{Example:} @smallexample @c computed example indSet d2t_singular/mprimdec_lib.doc:446 LIB "mprimdec.lib"; ring s1=(0,x,y),(a,b,c,d,e,f,g),lp; ideal i=ea-fbg,fa+be,ec-fdg,fc+de; i=std(i); list l=indSet(i); l; @expansion{} [1]: @expansion{} [1]: @expansion{} [1]: @expansion{} e,f @expansion{} [2]: @expansion{} a,b,c,d,g @expansion{} [3]: @expansion{} (C,dp(2),dp) @expansion{} [4]: @expansion{} 5 @expansion{} [2]: @expansion{} [1]: @expansion{} [1]: @expansion{} a,b,c,d @expansion{} [2]: @expansion{} e,f,g @expansion{} [3]: @expansion{} (C,dp(4),dp) @expansion{} [4]: @expansion{} 3 @expansion{} [2]: @expansion{} [1]: @expansion{} a,c,e @expansion{} [2]: @expansion{} b,d,f,g @expansion{} [3]: @expansion{} (C,dp(3),dp) @expansion{} [4]: @expansion{} 4 @c end example indSet d2t_singular/mprimdec_lib.doc:446 @end smallexample @c ---end content indSet--- @c ------------------- GTZopt ------------- @node GTZopt, zeroOpt, indSet, mprimdec_lib @subsubsection GTZopt @cindex GTZopt @c ---content GTZopt--- Procedure from library @code{mprimdec.lib} (@pxref{mprimdec_lib}). @table @asis @item @strong{Usage:} GTZopt (N[, check]); module N[, module check] @item @strong{Return:} list l @*the minimal primary decomposition of the module N, @*computed by a generalized and optimized version of @*the algorithm of Gianny, Trager and Zacharias @item @strong{Note:} if the parameter check is given, only components @*not containing check are computed @end table @strong{Example:} @smallexample @c computed example GTZopt d2t_singular/mprimdec_lib.doc:481 LIB "mprimdec.lib"; ring r=0,(x,y,z),dp; module N=x*gen(1)+ y*gen(2), x*gen(1)-x2*gen(2); list l=GTZopt(N); l; @expansion{} [1]: @expansion{} [1]: @expansion{} _[1]=x*gen(1)+y*gen(2) @expansion{} _[2]=x*gen(2)-gen(1) @expansion{} [2]: @expansion{} _[1]=x2+y @expansion{} [2]: @expansion{} [1]: @expansion{} _[1]=gen(2) @expansion{} _[2]=x*gen(1) @expansion{} [2]: @expansion{} _[1]=x @c end example GTZopt d2t_singular/mprimdec_lib.doc:481 @end smallexample @c ---end content GTZopt--- @c ------------------- zeroOpt ------------- @node zeroOpt, clrSBmod, GTZopt, mprimdec_lib @subsubsection zeroOpt @cindex zeroOpt @c ---content zeroOpt--- Procedure from library @code{mprimdec.lib} (@pxref{mprimdec_lib}). @table @asis @item @strong{Usage:} zeroOpt (N[, check]); zero-dimensional module N[, module check] @item @strong{Return:} list l @*the minimal primary decomposition of a zero-dimensional module N, computed by a generalized and optimized version of the algorithm of Gianny, Trager and Zacharias @item @strong{Note:} if the parameter check is given, only components @*not containing check are computed @end table @strong{Example:} @smallexample @c computed example zeroOpt d2t_singular/mprimdec_lib.doc:516 LIB "mprimdec.lib"; ring r=0,z,dp; module N=z*gen(1),(z-1)*gen(2),(z+1)*gen(3); list l=zeroOpt(N); l; @expansion{} [1]: @expansion{} [1]: @expansion{} _[1]=gen(1) @expansion{} _[2]=z*gen(2)-gen(2) @expansion{} _[3]=gen(3) @expansion{} [2]: @expansion{} _[1]=z-1 @expansion{} [2]: @expansion{} [1]: @expansion{} _[1]=z*gen(1) @expansion{} _[2]=gen(2) @expansion{} _[3]=gen(3) @expansion{} [2]: @expansion{} _[1]=z @expansion{} [3]: @expansion{} [1]: @expansion{} _[1]=gen(1) @expansion{} _[2]=gen(2) @expansion{} _[3]=z*gen(3)+gen(3) @expansion{} [2]: @expansion{} _[1]=z+1 @c end example zeroOpt d2t_singular/mprimdec_lib.doc:516 @end smallexample @c ---end content zeroOpt--- @c ------------------- clrSBmod ------------- @node clrSBmod, minSatMod, zeroOpt, mprimdec_lib @subsubsection clrSBmod @cindex clrSBmod @c ---content clrSBmod--- Procedure from library @code{mprimdec.lib} (@pxref{mprimdec_lib}). @table @asis @item @strong{Usage:} clrSBmod(N); N module which is SB ordered by monomial ordering @item @strong{Return:} module = minimal SB @end table @strong{Example:} @smallexample @c computed example clrSBmod d2t_singular/mprimdec_lib.doc:543 LIB "mprimdec.lib"; ring r = (0,a,b),(x,y,z),dp; module N1=ax2+y,a2x+y,bx; module N2=clrSBmod(N1); N2; @expansion{} N2[1]=(a)*x2*gen(1)+y*gen(1) @expansion{} N2[2]=(b)*x*gen(1) @c end example clrSBmod d2t_singular/mprimdec_lib.doc:543 @end smallexample @c ---end content clrSBmod--- @c ------------------- minSatMod ------------- @node minSatMod, specialModulesEqual, clrSBmod, mprimdec_lib @subsubsection minSatMod @cindex minSatMod @c ---content minSatMod--- Procedure from library @code{mprimdec.lib} (@pxref{mprimdec_lib}). @table @asis @item @strong{Usage:} minSatMod(N, I); module N, ideal I @item @strong{Return:} list with 2 elements: @*[1]=sat(N,product(I))[1], @*[2]=p, the polynomial of minimal degree s.th. [1]=quotient(N,p) @end table @strong{Example:} @smallexample @c computed example minSatMod d2t_singular/mprimdec_lib.doc:572 LIB "mprimdec.lib"; ring r = 0,(x,y,z),dp; module N=xy*gen(1); ideal h=yz,z2; list l=minSatMod(N,h); l; @expansion{} [1]: @expansion{} _[1]=x*gen(1) @expansion{} [2]: @expansion{} y @c end example minSatMod d2t_singular/mprimdec_lib.doc:572 @end smallexample @c ---end content minSatMod--- @c ------------------- specialModulesEqual ------------- @node specialModulesEqual, stdModulesEqual, minSatMod, mprimdec_lib @subsubsection specialModulesEqual @cindex specialModulesEqual @c ---content specialModulesEqual--- Procedure from library @code{mprimdec.lib} (@pxref{mprimdec_lib}). @table @asis @item @strong{Usage:} specialModulesEqual(N1, N2) N1, N2 standard bases of modules, s.th. N1 is contained in N2 or vice versa @item @strong{Return:} int i @*if (N1==N2) then i=1 @*else i=0 @end table @strong{Example:} @smallexample @c computed example specialModulesEqual d2t_singular/mprimdec_lib.doc:603 LIB "mprimdec.lib"; ring r = 0,(x,y,z),dp; module N1=x*freemodule(2); module N2=xy*freemodule(2); int i=specialModulesEqual(N1,N2); i; @expansion{} 0 N2=N1; i=specialModulesEqual(N1,N2); i; @expansion{} 1 @c end example specialModulesEqual d2t_singular/mprimdec_lib.doc:603 @end smallexample @c ---end content specialModulesEqual--- @c ------------------- stdModulesEqual ------------- @node stdModulesEqual, modulesEqual, specialModulesEqual, mprimdec_lib @subsubsection stdModulesEqual @cindex stdModulesEqual @c ---content stdModulesEqual--- Procedure from library @code{mprimdec.lib} (@pxref{mprimdec_lib}). @table @asis @item @strong{Usage:} stdModulesEqual(N1, N2) N1, N2 standard bases of modules, @item @strong{Return:} int i @*if (N1==N2) then i=1 @*else i=0 @end table @strong{Example:} @smallexample @c computed example stdModulesEqual d2t_singular/mprimdec_lib.doc:636 LIB "mprimdec.lib"; ring r = 0,(x,y,z),dp; module N1=x*freemodule(2); module N2=xy*freemodule(2); int i=stdModulesEqual(N1,N2); i; @expansion{} 0 N2=N1; i=stdModulesEqual(N1,N2); i; @expansion{} 1 @c end example stdModulesEqual d2t_singular/mprimdec_lib.doc:636 @end smallexample @c ---end content stdModulesEqual--- @c ------------------- modulesEqual ------------- @node modulesEqual, getData, stdModulesEqual, mprimdec_lib @subsubsection modulesEqual @cindex modulesEqual @c ---content modulesEqual--- Procedure from library @code{mprimdec.lib} (@pxref{mprimdec_lib}). @table @asis @item @strong{Usage:} modulesEqual(N1, N2) N1, N2 modules, @item @strong{Return:} int i @*if (N1==N2) then i=1 @*else i=0 @end table @strong{Example:} @smallexample @c computed example modulesEqual d2t_singular/mprimdec_lib.doc:669 LIB "mprimdec.lib"; ring r = 0,(x,y,z),dp; module N1=x*freemodule(2); module N2=xy*freemodule(2); int i=modulesEqual(N1,N2); i; @expansion{} 0 N2=N1; i=modulesEqual(N1,N2); i; @expansion{} 1 @c end example modulesEqual d2t_singular/mprimdec_lib.doc:669 @end smallexample @c ---end content modulesEqual--- @c ------------------- getData ------------- @node getData,, modulesEqual, mprimdec_lib @subsubsection getData @cindex getData @c ---content getData--- Procedure from library @code{mprimdec.lib} (@pxref{mprimdec_lib}). @table @asis @item @strong{Usage:} getData(N, l[, noCheck]); module N, list l[, int noCheck] @item @strong{Return:} (ann, check, M, checked) @*ideal ann, module check, M, int checked if l[1] is contained in N [and noCheck is not given] @*then checked=1, ann=ideal(0), check=0, M=0; @*else checked=0, M=freemodule(nrows(N)); check=l[1] @*(resp. check=M if l is an empty list) and @*if size(l)>1 then ann=l[2] else ann is the annihilator of M/N. @item @strong{Note:} ann is a std basis in the basering @end table @strong{Example:} @smallexample @c computed example getData d2t_singular/mprimdec_lib.doc:710 LIB "mprimdec.lib"; ring r = 0,(x,y,z),lp; module N=x*gen(1),y*gen(2); N=std(N); ideal ann; module check, M; int checked; list l; (ann, check, M, checked)=getData(N,l); ann; check; M; checked; @expansion{} ann[1]=xy @expansion{} check[1]=gen(1) @expansion{} check[2]=gen(2) @expansion{} M[1]=gen(1) @expansion{} M[2]=gen(2) @expansion{} 0 l=list(check,ann); (ann, check, M, checked)=getData(N,l); ann; check; M; checked; @expansion{} ann[1]=xy @expansion{} check[1]=gen(1) @expansion{} check[2]=gen(2) @expansion{} M[1]=gen(1) @expansion{} M[2]=gen(2) @expansion{} 0 l=list(N); (ann, check, M, checked)=getData(N,l); ann; check; M; checked; @expansion{} ann[1]=0 @expansion{} check[1]=0 @expansion{} M[1]=0 @expansion{} 1 @c end example getData d2t_singular/mprimdec_lib.doc:710 @end smallexample @c ---end content getData--- texi2html-1.82/test/singular_manual/platform.tex0000644000175000017500000000662411264347126023754 0ustar flichtenheldflichtenheld@comment -*-texinfo-*- @comment This file was generated by doc2tex.pl from platform.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT platform.doc INSTEAD @comment Id: platform.tex,v 1.1 2003/08/08 14:27:06 pertusus Exp $ @comment this file contains Release notes and various howto's @c The following directives are necessary for proper compilation @c with emacs (C-c C-e C-r). Please keep it as it is. Since it @c is wrapped in `@ignore' and `@end ignore' it does not harm `tex' or @c `makeinfo' but is a great help in editing this file (emacs @c ignores the `@ignore'). @ignore %**start \input texinfo.tex @setfilename platform.hlp @node Installation and Platform Specifics @menu * Installation and Platform Specifics:: @end menu @node Installation and Platform Specifics, Index, SINGULAR libraries, Top @chapter Installation and Platform Specifics %**end @end ignore @menu * News and changes:: * Downloading instructions:: * Unix installation instructions:: * Windows installation instructions:: * Macintosh installation instructions:: @end menu @c ---------------------------------------------------------- @node News and changes, Downloading instructions,,Release Notes @section News and changes @cindex news @cindex changes @include NEWS.texi @c ---------------------------------------------------------- @node Downloading instructions, Unix installation instructions, News and changes, Release Notes @section Downloading instructions @cindex downloading @cindex instructions, downloading @cindex howto, download @sc{Singular} is available as binary program for most common hard- and software platforms. Release versions of @sc{Singular} can be downloaded with ftp from our FTP site @display @uref{ftp://www.mathematik.uni-kl.de/pub/Math/Singular/}, @end display or, using your favorite WWW browser, from @display @uref{http://www.mathematik.uni-kl.de/ftp/pub/Math/Singular/}. @end display @include README_download.texi @c ---------------------------------------------------------- @node Unix installation instructions, Windows installation instructions,Downloading instructions, Release Notes @section Unix installation instructions @cindex Unix installation @cindex instructions, Unix installation @cindex howto, install on Unix @include INSTALL_unix.texi @c ---------------------------------------------------------- @node Windows installation instructions, Macintosh installation instructions, Unix installation instructions, Release Notes @section Windows installation instructions @cindex Windows installation @cindex instructions, Windows installation @cindex howto, install on Windows @include INSTALL_win.texi @c ---------------------------------------------------------- @node Macintosh installation instructions,,Windows installation instructions, Release Notes @section Macintosh installation instructions @cindex Macintosh installation @cindex instructions, Macintosh installation @cindex howto, install on Macintosh For the SINGULAR version for Mac OS X refer to the Unix section. The SINGULAR version for Mac OS 9 is available as `ftp://www.mathematik.uni-kl.de/pub/Math/Singular/MAC/classic/Singular-@value{VERSION}-html.sea.hqx' (documentation) and `ftp://www.mathematik.uni-kl.de/pub/Math/Singular/MAC/classic/Singular-@value{VERSION}-ppc-MPW.sea.hqx' (binaries and libraries). The file `ftp://www.mathematik.uni-kl.de/pub/Math/Singular/MAC/classic/INSTALL_mac.txt' gives details on how to finish the installation. @include INSTALL_mac.texi texi2html-1.82/test/singular_manual/NEWS.texi0000644000175000017500000000706511264347126023055 0ustar flichtenheldflichtenheld@comment -*-texinfo-*- @comment Id: NEWS.texi,v 1.1 2003/08/08 14:27:06 pertusus Exp $ @comment this file contains the News about Singular versions @comment Unix @ifclear VERSION @include version.texi @end ifclear @majorheading NEWS in SINGULAR @value{VERSION} @ifclear singularmanual @macro nref{what} \what\ @end macro @end ifclear @ifset singularmanual @macro nref{what} @ref{\what\} @end macro @end ifset The current version @value{VERSION} is an update to the release series version 2-0. Changes with respect to version 2-0-3: @heading Factorizing algorithms revisited Starting with version 2-0-4, we use NTL (by Victor Shoup) for factoring univariate polynomials. The multivariate factoring code in libfac/factory does now also work over algebraic extension fields. @heading Help system is configurable via LIB/help.cnf The help browsers of Singular can be configured via the file LIB/help.cnf, also the addition of new help browsers is possible. @heading Extensions of the ring concept @table @asis @item new coefficient domains: arbitrary long real and complex numbers @item no restriction on number of parameters @item degree bound on exponent values (maximum is now 2^31, standard 2^15) @item non-positives weights get a better handling (converts wp/Wp to ws/Ws) @item handle blocks of mixed orders correctly @item maximal prime characteristic is now 2147483629 instead of 32003 @c @item TBC: parameters over real/complex @c @item TBC: declaration with "ring of ring". @end table @heading Changes in @sc{Singular} libraries The documentation of libraries was generally improved. @table @asis @item @nref{equising_lib} procedures esStratum, isEquising now also for reducible polynomials @*new procedures: tau_es (codim of mu-const stratum in semi-universal def. base); esIdeal ((Wahl's) equisingularity ideal) @item @nref{gaussman_lib} added bernstein: roots of the Bernstein polynomial of t @item @nref{hnoether_lib} HNdevelop, reddevelop, essdevelop are obsolete, replaced by hnexpansion @*multsequence is "repaired" (since branches computed by hnexpansion et al) are now ordered according to the needs of multsequence. @*newtonpoly needs no longer that ordering of the basering is ls @*new procedures: is_NND test if f is Newton non-degenerate @item @nref{homolog_lib} new procedures: depth, fitting, flatteningStrat, isCM, isFlat, isLocallyFree, isReg, KoszulHomology, tensorMod, Tor @item @nref{matrix_lib} in proc tensor(A,B): check if ncols(A)==0 @item @nref{normal_lib} new procedure: deltaLoc(f,S); (sum of) delta invariant(s) at conjugated singular points @*proc genus makes now use of is_NND of hnoether.lib @item @nref{primdec_lib} optimizations again @item @nref{solve_lib} procedure laguerre_solve ignores no longer the 2nd parameter (precision of internal computation) @* new procedure simplexOut: prints solution of simplex in nice format @end table @heading Internal Changes @table @asis @item normal form computation uses Bucket representation of polynomials. @item factorization revisited, missing cases implemented @item NTL NTL is used for univariate factorization @item source code adapted for use with gcc 3.1/3.2, gmp 4.x @end table @heading Porting @itemize @bullet @item Singular is available for ix86-libc5, ix86-libc6, HPUX_9, HPUX_10, SunOS-4, SunOS-5, IRIX-6, ix86-Win (Windows 95/98/ME/NT/2K/XP), FreeBSD 4.x, MacOS X @c @item @code{dbm} functionality is not available on Windows 95/98/ME/NT/2K/XP and MacOS X @item @code{MP} functionality is not available on Windows 95/98/ME/NT/2K/XP and MacOS X. @item Singular 2-0-2 was the last version for MacOS 9 @end itemize texi2html-1.82/test/singular_manual/types.tex0000644000175000017500000037140611264347126023277 0ustar flichtenheldflichtenheld@comment -*-texinfo-*- @comment This file was generated by doc2tex.pl from types.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT types.doc INSTEAD @comment Id: types.tex,v 1.1 2003/08/08 14:27:06 pertusus Exp $ @comment this file contains the type definitions @c The following directives are necessary for proper compilation @c with emacs (C-c C-e C-r). Please keep it as it is. Since it @c is wrapped in `@ignore' and `@end ignore' it does not harm `tex' or @c `makeinfo' but is a great help in editing this file (emacs @c ignores the conditionals). @ignore %**start \input texinfo.tex @setfilename types.hlp @node Top, Data types @menu * Data types:: @end menu @node Data types, Functions and system Variables, General concepts, Top @chapter Data types %**end @end ignore @cindex expression list This chapter explains all data types of @sc{Singular} in alphabetical order. For every type, there is a description of the declaration syntax as well as information about how to build expressions of certain types. The term expression list in @sc{Singular} refers to any comma separated list of expressions. For the general syntax of a declaration see @ref{General command syntax}. @menu * def:: * ideal:: * int:: * intmat:: * intvec:: * link:: * list:: * map:: * matrix:: * module:: * number:: * poly:: * proc:: * qring:: * resolution:: * ring:: * string:: * vector:: @ifset namespaces * package:: @end ifset @end menu @c --------------------------------------- @node def, ideal, Data types, Data types @section def @cindex def @cindex untyped definitions Objects may be defined without a specific type: they get their type from the first assignment to them. E.g., @code{ideal i=x,y,z; def j=i^2;} defines the ideal @code{i^2} with the name @code{j}. @strong{Note:} Unlike other assignments a ring as an untyped object is not a copy but another reference to the same (possibly unnamed) ring. This means that entries in one of these rings appear also in the other ones. The following defines a ring @code{s} which is just another reference (or name) for the basering @code{r}. @smallexample @c reused example def types.doc:78 ring r=32003,(x,y,z),dp; poly f = x; def s=basering; setring s; nameof(basering); @expansion{} s listvar(); @expansion{} // s [0] *ring @expansion{} // f [0] poly @expansion{} // r [0] ring @expansion{} // LIB [0] string standard.lib poly g = y; kill f; listvar(r); @expansion{} // r [0] ring @expansion{} // g [0] poly ring t=32003,(u,w),dp; def rt=r+t; rt; @expansion{} // characteristic : 32003 @expansion{} // number of vars : 5 @expansion{} // block 1 : ordering dp @expansion{} // : names x y z @expansion{} // block 2 : ordering dp @expansion{} // : names u w @expansion{} // block 3 : ordering C @c end example def types.doc:78 @end smallexample This reference to a ring with def is useful if the basering is not local to the procedure (so it cannot be accessed by its name) but one needs a name for it (e.g., for a use with @code{setring} or @code{map}). @code{setring r;} does not work in this case, because @code{r} may not be local to the procedure. @menu * def declarations:: @end menu @c ------------------------------ @node def declarations, , def, def @subsection def declarations @cindex def declarations @table @strong @item Syntax: @code{def} name @code{=} expression @code{;} @item Purpose: defines an object of the same type as the right-hand side. @item Default: none @item Note: This is useful if the right-hand side may be of variable type as a consequence of a computation (e.g., ideal or module or matrix). It may also be used in procedures to give the basering a name which is local to the procedure. @item Example: @smallexample @c reused example def_declarations types.doc:127 def i=2; typeof(i); @expansion{} int @c end example def_declarations types.doc:127 @end smallexample @end table @c inserted refs from types.doc:134 @ifinfo @menu See * typeof:: @end menu @end ifinfo @iftex See @ref{typeof}. @end iftex @c end inserted refs from types.doc:134 @c --------------------------------------- @node ideal, int, def, Data types @section ideal @cindex ideal Ideals are represented as lists of polynomials which generate the ideal. Like polynomials they can only be defined or accessed with respect to a basering. @strong{Note:} @code{size} counts only the non-zero generators of an ideal whereas @code{ncols} counts all generators. @menu * ideal declarations:: * ideal expressions:: * ideal operations:: * ideal related functions:: @end menu @c --------------------------------------- @node ideal declarations, ideal expressions, ideal, ideal @subsection ideal declarations @cindex ideal declarations @table @strong @item Syntax: @code{ideal} name @code{=} list_of_poly_and_ideal_expressions @code{;} @*@code{ideal} name @code{=} ideal_expression @code{;} @item Purpose: defines an ideal. @item Default: 0 @item Example: @smallexample @c reused example ideal_declarations types.doc:175 ring r=0,(x,y,z),dp; poly s1 = x2; poly s2 = y3; poly s3 = z; ideal i = s1, s2-s1, 0,s2*s3, s3^4; i; @expansion{} i[1]=x2 @expansion{} i[2]=y3-x2 @expansion{} i[3]=0 @expansion{} i[4]=y3z @expansion{} i[5]=z4 size(i); @expansion{} 4 ncols(i); @expansion{} 5 @c end example ideal_declarations types.doc:175 @end smallexample @end table @c ------------------------------ @node ideal expressions, ideal operations, ideal declarations, ideal @subsection ideal expressions @cindex ideal expressions An ideal expression is: @enumerate @item an identifier of type ideal @item a function returning ideal @item ideal expressions combined by the arithmetic operations @code{+} or @code{*} @item a power of an ideal expression (operator @code{^} or @code{**}) @*Note that the computation of the product @code{i*i} involves all products of generators of @code{i} while @code{i^2} involves only the different ones, and is therefore faster. @item a type cast to ideal @end enumerate @*@strong{Example:} @smallexample @c reused example ideal_expressions types.doc:213 ring r=0,(x,y,z),dp; ideal m = maxideal(1); m; @expansion{} m[1]=x @expansion{} m[2]=y @expansion{} m[3]=z poly f = x2; poly g = y3; ideal i = x*y*z , f-g, g*(x-y) + f^4 ,0, 2x-z2y; ideal M = i + maxideal(10); timer =0; i = M*M; timer; @expansion{} 0 ncols(i); @expansion{} 505 timer =0; i = M^2; ncols(i); @expansion{} 505 timer; @expansion{} 0 i[ncols(i)]; @expansion{} x20 vector v = [x,y-z,x2,y-x,x2yz2-y]; ideal j = ideal(v); @c end example ideal_expressions types.doc:213 @end smallexample @c ------------------------------ @node ideal operations, ideal related functions, ideal expressions, ideal @subsection ideal operations @cindex ideal operations @table @asis @item @code{+} addition (concatenation of the generators and simplification) @item @code{*} multiplication (with ideal, poly, vector, module; simplification in case of multiplication with ideal) @item @code{^} exponentiation (by a non-negative integer) @item ideal_expression @code{[} intvec_expression @code{]} are polynomial generators of the ideal, index 1 gives the first generator. @end table @strong{Note:} For simplification of an ideal, see also @ref{simplify}. @*@strong{Example:} @smallexample @c reused example ideal_operations types.doc:259 ring r=0,(x,y,z),dp; ideal I = 0,x,0,1; I; @expansion{} I[1]=0 @expansion{} I[2]=x @expansion{} I[3]=0 @expansion{} I[4]=1 I + 0; // simplification @expansion{} _[1]=1 ideal J = I,0,x,x-z;; J; @expansion{} J[1]=0 @expansion{} J[2]=x @expansion{} J[3]=0 @expansion{} J[4]=1 @expansion{} J[5]=0 @expansion{} J[6]=x @expansion{} J[7]=x-z I * J; // multiplication with simplification @expansion{} _[1]=1 I*x; @expansion{} _[1]=0 @expansion{} _[2]=x2 @expansion{} _[3]=0 @expansion{} _[4]=x vector V = [x,y,z]; print(V*I); @expansion{} 0,x2,0,x, @expansion{} 0,xy,0,y, @expansion{} 0,xz,0,z ideal m = maxideal(1); m^2; @expansion{} _[1]=x2 @expansion{} _[2]=xy @expansion{} _[3]=xz @expansion{} _[4]=y2 @expansion{} _[5]=yz @expansion{} _[6]=z2 ideal II = I[2..4]; II; @expansion{} II[1]=x @expansion{} II[2]=0 @expansion{} II[3]=1 @c end example ideal_operations types.doc:259 @end smallexample @c ------------------------------ @node ideal related functions, , ideal operations, ideal @subsection ideal related functions @cindex ideal related functions @table @code @item char_series irreducible characteristic series (see @ref{char_series}) @item coeffs matrix of coefficients (see @ref{coeffs}) @item contract contraction by an ideal (see @ref{contract}) @item diff partial derivative (see @ref{diff}) @item degree multiplicity, dimension and codimension of the ideal of leading terms (see @ref{degree}) @item dim Krull dimension of basering modulo the ideal of leading terms (see @ref{dim}) @item eliminate elimination of variables (see @ref{eliminate}) @item facstd factorizing Groebner basis algorithm (see @ref{facstd}) @item factorize ideal of factors of a polynomial (see @ref{factorize}) @item fglm Groebner basis computation from a Groebner basis w.r.t.@: a different ordering (see @ref{fglm}) @item finduni computation of univariate polynomials lying in a zero dimensional ideal (see @ref{finduni}) @item groebner Groebner basis computation (a wrapper around @code{std,stdhilb,stdfglm},...) (see @ref{groebner}) @item highcorner computes the smallest monomial not contained in the ideal. The ideal has to be zero-dimensional. (see @ref{highcorner}) @item homog homogenization with respect to a variable (see @ref{homog}) @item hilb Hilbert series of a standard basis (see @ref{hilb}) @item indepSet sets of independent variables of an ideal (see @ref{indepSet}) @item interred interreduction of an ideal (see @ref{interred}) @item intersect ideal intersection (see @ref{intersect}) @item jacob ideal of all partial derivatives resp.@: jacobian matrix (see @ref{jacob}) @item jet Taylor series up to a given order (see @ref{jet}) @item kbase vector space basis of basering modulo ideal of leading terms (see @ref{kbase}) @item koszul Koszul matrix (see @ref{koszul}) @item lead leading terms of a set of generators (see @ref{lead}) @item lift lift-matrix (see @ref{lift}) @item liftstd standard basis and transformation matrix computation (see @ref{liftstd}) @item lres free resolution for homogeneous ideals (see @ref{lres}) @item maxideal power of the maximal ideal at 0 (see @ref{maxideal}) @item minbase minimal generating set of a homogeneous ideal, resp.@: module, or an ideal, resp.@: module, in a local ring (see @ref{minbase}) @item minor set of minors of a matrix (see @ref{minor}) @item modulo represents @tex $(h1+h2)/h1 \cong h2/(h1 \cap h2)$ @end tex @ifinfo (h1+h2)/h1=h2/(h1 intersect h2) @end ifinfo (see @ref{modulo}) @item mres minimal free resolution of an ideal resp.@: module w.r.t. a minimal set of generators of the given ideal resp.@: module (see @ref{mres}) @item mstd standard basis and minimal generating set of an ideal (see @ref{mstd}) @item mult multiplicity, resp.@: degree, of the ideal of leading terms (see @ref{mult}) @item ncols number of columns (see @ref{ncols}) @item preimage preimage under a ring map (see @ref{preimage}) @item qhweight quasihomogeneous weights of an ideal (see @ref{qhweight}) @item quotient ideal quotient (see @ref{quotient}) @item reduce normalform with respect to a standard basis (see @ref{reduce}) @item res free resolution of an ideal resp.@: module but not changing the given ideal resp.@: module (see @ref{res}) @item simplify simplify a set of polynomials (see @ref{simplify}) @item size number of non-zero generators (see @ref{size}) @item sortvec permutation for sorting ideals resp@:. modules (see @ref{sortvec}) @item sres free resolution of a standard basis (see @ref{sres}) @item std standard basis computation (see @ref{std}) @item stdfglm standard basis computation with fglm technique (see @ref{stdfglm}) @item stdhilb Hilbert driven standard basis computation (see @ref{stdhilb} @item subst substitute a ring variable (see @ref{subst}) @item syz computation of the first syzygy module (see @ref{syz}) @item vdim vector space dimension of basering modulo ideal of leading terms (see @ref{vdim}) @item weight optimal weights (see @ref{weight}) @end table @c --------------------------------------- @node int, intmat, ideal, Data types @section int @cindex int Variables of type int represent the machine integers and are, therefore, limited in their range (e.g., the range is between -2147483647 and 2147483647 on 32-bit machines). They are mainly used to count things (dimension, rank, etc.), in loops (see @ref{for}), and to represent boolean values (FALSE is represented by 0, every other value means TRUE, see @ref{boolean expressions}). Integers consist of a sequence of digits, possibly preceded by a sign. A space is considered as a separator, so it is not allowed between digits. A sequence of digits outside the allowed range is converted to the type @code{number} if possible. @menu * int declarations:: * int expressions:: * int operations:: * boolean expressions:: * boolean operations:: * int related functions:: @end menu @c --------------------------------------- @node int declarations, int expressions, int, int @subsection int declarations @cindex int declarations @table @strong @item Syntax: @code{int} name @code{=} int_expression @code{;} @item Purpose: defines an integer variable. @item Default: 0 @item Example: @smallexample @c reused example int_declarations types.doc:447 int i = 42; int j = i + 3; j; @expansion{} 45 i = i * 3 - j; i; @expansion{} 81 int k; // assigning the default value 0 to k k; @expansion{} 0 @c end example int_declarations types.doc:447 @end smallexample @end table @c ------------------------------ @node int expressions, int operations, int declarations, int @subsection int expressions @cindex int expressions An int expression is: @enumerate @item a sequence of digits (if the number represented by this sequence is too large to fit into the range of integers it is automatically converted to the type number, if a basering is defined) @item an identifier of type int @item a function returning int @item int expressions combined by the arithmetic operations @code{+}, @code{-}, @code{*}, @code{div}, @code{/}, @code{%} (@code{mod}), or @code{^} @item a boolean expression @item a type cast to int @end enumerate @strong{Note:} Variables of type int represent the compiler integers and are, therefore, limited in their range (see @ref{Limitations}). If this range is too small the expression must be converted to the type number over a ring with characteristic 0. @*@strong{Example:} @smallexample @c reused example int_expressions types.doc:489 12345678901; // too large @expansion{} ? `12345678901` greater than 2147483647(max. integer representation) @expansion{} ? error occurred in line 1: `12345678901; // too large` typeof(_); @expansion{} none ring r=0,x,dp; 12345678901; @expansion{} 12345678901 typeof(_); @expansion{} number // Note: 11*13*17*100*200*2000*503*1111*222222 // returns a machine integer: 11*13*17*100*200*2000*503*1111*222222; @expansion{} // ** int overflow(*), result may be wrong @expansion{} // ** int overflow(*), result may be wrong @expansion{} // ** int overflow(*), result may be wrong @expansion{} // ** int overflow(*), result may be wrong @expansion{} -1875651584 // using the type cast number for a greater allowed range number(11)*13*17*100*200*2000*503*1111*222222; @expansion{} 12075748128684240000000 ring rp=32003,x,dp; 12345678901; @expansion{} 9603 typeof(_); @expansion{} number intmat m[2][2] = 1,2,3,4; m; @expansion{} 1,2, @expansion{} 3,4 m[2,2]; @expansion{} 4 typeof(_); @expansion{} int det(m); @expansion{} -2 m[1,1] + m[2,1] == trace(m); @expansion{} 0 ! 0; @expansion{} 1 1 and 2; @expansion{} 1 intvec v = 1,2,3; def d =transpose(v)*v; // scalarproduct gives an 1x1 intvec typeof(d); @expansion{} intvec int i = d[1]; // access the first (the only) entry in the intvec ring rr=31,(x,y,z),dp; poly f = 1; i = int(f); // cast to int // Integers may be converted to constant polynomials by an assignment, poly g=37; // define the constant polynomial g equal to the image of // the integer 37 in the actual coefficient field, here it equals 6 g; @expansion{} 6 @c end example int_expressions types.doc:489 @end smallexample @c inserted refs from types.doc:526 @ifinfo @menu See * Type conversion and casting:: * number:: @end menu @end ifinfo @iftex See @ref{Type conversion and casting}; @ref{number}. @end iftex @c end inserted refs from types.doc:526 @c ------------------------------ @node int operations, int related functions, int expressions, int @subsection int operations @cindex int operations @cindex mod @cindex div @c remark: the following table should have style @asis, since the @c commas below should not by set in style @code. @table @asis @item @code{++} changes its operand to its successor, is itself no int expression @item @code{--} changes its operand to its predecessor, is itself no int expression @item @code{+} addition @item @code{-} negation or subtraction @item @code{*} multiplication @item @code{/} integer division (omitting the remainder), rounding toward 0 @item @code{div} integer division (omitting the remainder >= 0) @item @code{%} integer modulo (the remainder of the division @code{/}) @item @code{mod} integer modulo (the remainder of the division @code{div}), always non-negative @item @code{^}, @code{**} exponentiation (exponent must be non-negative) @item @code{<}, @code{>}, @code{<=}, @code{>=}, @code{==}, @code{<>} comparison @end table @strong{Note:} An assignment @code{j=i++;} or @code{j=i--;} is not allowed, in particular it does not change the value of @code{j}, see @ref{Limitations}. @c @strong{Note:} @code{/} might no longer be available in the future. @*@strong{Example:} @smallexample @c reused example int_operations types.doc:574 int i=1; int j; i++; i; i--; i; @expansion{} 2 @expansion{} 1 // ++ and -- do not return a value as in C, can not assign j = i++; @expansion{} // ** right side is not a datum, assignment ignored // the value of j is unchanged j; i; @expansion{} 0 @expansion{} 2 i+2, 2-i, 5^2; @expansion{} 4 0 25 5 div 2, 8%3; @expansion{} 2 2 -5 div 2, -5 / 2, -5 mod 2, -5 % 2; @expansion{} -3 -2 1 -1 1<2, 2<=2; @expansion{} 1 1 @c end example int_operations types.doc:574 @end smallexample @c ------------------------------ @node int related functions, boolean expressions,int operations, int @subsection int related functions @cindex int related functions @table @code @item char characteristic of the coefficient field of a ring (see @ref{char}) @item deg degree of a poly resp.@: vector (see @ref{deg}) @item det determinant (see @ref{det}) @item dim Krull dimension of basering modulo ideal of leading terms, resp.@: dimension of module of leading terms (see @ref{dim}) @item extgcd Bezout representation of gcd (see @ref{extgcd}) @item find position of a substring in a string (see @ref{find}) @item gcd greatest common divisor (see @ref{gcd}) @item koszul Koszul matrix (see @ref{koszul}) @item memory memory usage (see @ref{memory}) @item mult multiplicity of an ideal, resp.@: module, of leading terms (see @ref{mult}) @item ncols number of columns (see @ref{ncols}) @item npars number of ring parameters (see @ref{npars}) @item nrows number of rows of a matrix, resp.@: the rank of the free module where the vector or module lives (see @ref{nrows}) @item nvars number of ring variables (see @ref{nvars}) @item ord degree of the leading term of a poly resp.@: vector (see @ref{ord}) @item par n-th parameter of the basering (see @ref{par}) @item pardeg degree of a number considered as a polynomial in the ring parameters (see @ref{pardeg}) @item prime the next lower prime (see @ref{prime}) @item random a pseudo random integer between the given limits (see @ref{random}) @item regularity regularity of a resolution (see @ref{regularity}) @item rvar test, if the given expression or string is a ring variable (see @ref{rvar}) @item size number of elements in an object (see @ref{size}) @item trace trace of an integer matrix (see @ref{trace}) @item var n-th ring variable of the basering (see @ref{var}) @item vdim vector space dimension of basering modulo ideal of leading terms, resp.@: of freemodule modulo module of leading terms (see @ref{vdim}) @end table @c ------------------------------ @node boolean expressions, boolean operations, int related functions, int @subsection boolean expressions @cindex boolean expressions @cindex == @cindex != @cindex <> @cindex <= @cindex >= A boolean expression is really an int expression used in a logical context: @c item @*An int expression (<> 0 evaluates to @emph{TRUE} (represented by 1), 0 represents @emph{FALSE}). The following is the list of available comparisons of objects of the same type. @strong{Note:} There are no comparisons for ideals and modules, resolution and maps. @enumerate @item an integer comparison: @smallexample i == j i != j // or i <> j i <= j i >= j i > j i < j @end smallexample @item a number comparison: @smallexample m == n m != n // or m <> n m < n m > n m <= n m >= n @end smallexample For numbers from Z/p or from field extensions not all operations are useful: @* - 0 is always the smallest element, @* - in Z/p the representatives in the range -(p-1)/2..(p-1)/2 when p>2 resp. 0 and 1 for p=2 are used for comparisons, @* - in field extensions the last two operations (@code{>=,<=}) yield always TRUE (1) and the @code{<} and @code{>} are equivalent to @code{!=}. @item a polynomial or vector comparison: @smallexample f == g f != g // or f <> g f <= g // comparing the leading term w.r.t. the monomial order f < g f >= g f > g @end smallexample @item an intmat or matrix comparison: @smallexample v == w v != w // or v <> w @end smallexample @item an intvec or string comparison: @smallexample f == g f != g // or f <> g f <= g // comparing lexicographically f >= g // w.r.t. the order specified by ASCII f > g f < g @end smallexample @item boolean expressions combined by boolean operations (@code{and}, @code{or}, @code{not}) @end enumerate @strong{Note:} @c ------------------------------------------------------------ @c This piece of text exists also in the file singular.doc, @c chapter "Evaluation of logical expressions". @c If you change something here, change it there, too! @c ------------------------------------------------------------ All arguments of a logical expression are first evaluated and then the value of the logical expression is determined. For example, the logical expression @code{(a || b)} is evaluated by first evaluating @code{a} @emph{and} @code{b}, even though the value of @code{b} has no influence on the value of @code{(a || b)}, if @code{a} evaluates to true. Note that this evaluation is different from the left-to-right, conditional evaluation of logical expressions (as found in most programming languages). For example, in these other languages, the value of @code{(1 || b)} is determined without ever evaluating @code{b}. See @ref{Major differences to the C programming language}. @c ------------------------------ @node boolean operations, , boolean expressions, int @subsection boolean operations @cindex boolean operations @cindex and @cindex && @cindex or @cindex || @cindex not @table @code @item and logical @code{and}, may also be written as @code{&&} @item or logical @code{or}, may also be written as @code{||} @item not logical @code{not}, may also be written as @code{!} @end table The precedence of the boolean operations is: @enumerate @item parentheses @item comparisons @item not @item and @item or @end enumerate @*@strong{Example:} @smallexample @c reused example boolean_operations types.doc:784 (1>2) and 3; @expansion{} 0 1 > 2 and 3; @expansion{} 0 ! 0 or 1; @expansion{} 1 !(0 or 1); @expansion{} 0 @c end example boolean_operations types.doc:784 @end smallexample @c --------------------------------------- @node intmat, intvec, int, Data types @section intmat @cindex intmat Integer matrices are matrices with integer entries. For the range of integers see @ref{Limitations}. Integer matrices do not belong to a ring, they may be defined without a basering being defined. An intmat can be multiplied by and added to an int; in this case the int is converted into an intmat of the right size with the integer on the diagonal. The integer @code{1}, for example, is converted into the unit matrix. @menu * intmat declarations:: * intmat expressions:: * intmat type cast:: * intmat operations:: * intmat related functions:: @end menu @c ------------------------------ @node intmat declarations, intmat expressions, intmat, intmat @subsection intmat declarations @cindex intmat declarations @table @strong @item Syntax: @code{intmat} name @code{=} intmat_expression @code{;} @*@code{intmat} name @code{[} rows @code{] [} cols @code{] =} intmat_expression @code{;} @*@code{intmat} name @code{[} rows @code{] [} cols @code{] =} list_of_int_and_intvec_and_intmat_expressions @code{;} @*rows and cols must be positive int expressions. @item Purpose: defines an intmat variable. @* Given a list of integers, the matrix is filled up with the first row from the left to the right, then the second row and so on. If the int_list contains less than rows*cols elements, the matrix is filled up with zeros; if it contains more elements, only the first rows*cols elements are used. @item Default: 0 (1 x 1 matrix) @item Example: @smallexample @c reused example intmat_declarations types.doc:838 intmat im[3][5]=1,3,5,7,8,9,10,11,12,13; im; @expansion{} 1,3,5,7,8, @expansion{} 9,10,11,12,13, @expansion{} 0,0,0,0,0 im[3,2]; @expansion{} 0 intmat m[2][3] = im[1..2,3..5]; // defines a submatrix m; @expansion{} 5,7,8, @expansion{} 11,12,13 @c end example intmat_declarations types.doc:838 @end smallexample @end table @c ------------------------------ @node intmat expressions, intmat type cast, intmat declarations, intmat @subsection intmat expressions @cindex intmat expressions An intmat expression is: @enumerate @item an identifier of type intmat @item a function returning intmat @item intmat operations with int (@code{+}, @code{-}, @code{*}, @code{div}, @code{%}) @item intmat operations (@code{+}, @code{-}, @code{*}) @item a type cast to intmat (@pxref{intmat type cast}) @end enumerate @*@strong{Example:} @smallexample @c reused example intmat_expressions types.doc:869 intmat Idm[2][2]; Idm +1; // add the unit intmat @expansion{} 1,0, @expansion{} 0,1 intmat m1[3][2] = _,1,-2; // take entries from the last result m1; @expansion{} 1,0, @expansion{} 0,1, @expansion{} 1,-2 intmat m2[2][3]=1,0,2,4,5,1; transpose(m2); @expansion{} 1,4, @expansion{} 0,5, @expansion{} 2,1 intvec v1=1,2,4; intvec v2=5,7,8; m1=v1,v2; // fill m1 with v1 and v2 m1; @expansion{} 1,2, @expansion{} 4,5, @expansion{} 7,8 trace(m1*m2); @expansion{} 56 @c end example intmat_expressions types.doc:869 @end smallexample @c inserted refs from types.doc:883 @ifinfo @menu See * Type conversion and casting:: * number:: @end menu @end ifinfo @iftex See @ref{Type conversion and casting}; @ref{number}. @end iftex @c end inserted refs from types.doc:883 @c ------------------------------ @node intmat type cast, intmat operations, intmat expressions, intmat @subsection intmat type cast @cindex intmat type cast @table @code @item @strong{Syntax:} @code{intmat (} expression @code{)} @*@code{intmat (} expression, int_n, int_m @code{)} @item @strong{Type:} intmat @item @strong{Purpose:} Converts expression to an intmat, where expression must be of type intvec, or intmat. If int_n and int_m are supplied, then they specify the dimension of the intmat. Otherwise, the size (resp.@: dimensions) of the intmat are determined by the size (resp.@: dimensions) of the expression. @item @strong{Example:} @smallexample @c reused example intmat_type_cast types.doc:908 intmat(intvec(1)); @expansion{} 1 intmat(intvec(1), 1, 2); @expansion{} 1,0 intmat(intvec(1,2,3,4), 2, 2); @expansion{} 1,2, @expansion{} 3,4 intmat(_, 2, 3); @expansion{} 1,2,3, @expansion{} 4,0,0 intmat(_, 2, 1); @expansion{} 1, @expansion{} 2 @c end example intmat_type_cast types.doc:908 @end smallexample @end table @c inserted refs from types.doc:917 @ifinfo @menu See * Type conversion and casting:: * intmat:: * matrix type cast:: @end menu @end ifinfo @iftex See @ref{Type conversion and casting}; @ref{intmat}; @ref{matrix type cast}. @end iftex @c end inserted refs from types.doc:917 @c ------------------------------ @node intmat operations, intmat related functions, intmat type cast, intmat @subsection intmat operations @cindex intmat operations @table @asis @item @code{+} addition with intmat or int; the int is converted into a diagonal intmat @item @code{-} negation or subtraction with intmat or int; the int is converted into a diagonal intmat @item @code{*} multiplication with intmat, intvec, or int; the int is converted into a diagonal intmat @item @code{div,/} division of entries in the integers (omitting the remainder) @item @code{%, mod} entries modulo int (remainder of the division) @item @code{<>}, @code{==} comparison @item intmat_expression @code{[} intvec_expression@code{,} intvec_expression @code{]} is an intmat entry, where the first index indicates the row and the second the column @end table @*@strong{Example:} @smallexample @c reused example intmat_operations types.doc:954 intmat m[2][4] = 1,0,2,4,0,1,-1,0,3,2,1,-2; m; @expansion{} 1,0,2,4, @expansion{} 0,1,-1,0 m[2,3]; // entry at row 2, col 3 @expansion{} -1 size(m); // number of entries @expansion{} 8 intvec v = 1,0,-1,2; m * v; @expansion{} 7,1 typeof(_); @expansion{} intvec intmat m1[4][3] = 0,1,2,3,v,1; intmat m2 = m * m1; m2; // 2 x 3 intmat @expansion{} -2,5,4, @expansion{} 4,-1,-1 m2*10; // multiply each entry of m with 10; @expansion{} -20,50,40, @expansion{} 40,-10,-10 -m2; @expansion{} 2,-5,-4, @expansion{} -4,1,1 m2 % 2; @expansion{} 0,1,0, @expansion{} 0,1,1 m2 div 2; @expansion{} -1,2,2, @expansion{} 2,-1,-1 m2[2,1]; // entry at row 2, col 1 @expansion{} 4 m1[2..3,2..3]; // submatrix @expansion{} 1 0 2 1 m2[nrows(m2),ncols(m2)]; // the last entry of intmat m2 @expansion{} -1 @c end example intmat_operations types.doc:954 @end smallexample @c ------------------------------ @node intmat related functions, , intmat operations, intmat @subsection intmat related functions @cindex intmat related functions @table @code @item betti Betti numbers of a free resolution (see @ref{betti}) @item det determinant (see @ref{det}) @item ncols number of cols (see @ref{ncols}) @item nrows number of rows (see @ref{nrows}) @item random create a pseudo random intmat (see @ref{random}) @item size total number of entries (see @ref{size}) @item transpose transpose of an intmat (see @ref{transpose}) @item trace trace of an intmat (see @ref{trace}) @end table @c --------------------------------------- @node intvec, link, intmat, Data types @section intvec @cindex intvec Variables of type intvec are lists of integers. For the range of integers see @ref{Limitations}. They may be used for simulating sets of integers (and other sets if the intvec is used as an index set for other objects). Addition and subtraction of an intvec with an int or an intvec is done element-wise. @c @example @c @c example @c intvec iv=1,2,5,7; @c iv; @c iv[3]; @c iv[7]=1; @c iv; @c @c example @c @end example @menu * intvec declarations:: * intvec expressions:: * intvec operations:: * intvec related functions:: @end menu @c ------------------------------ @node intvec declarations, intvec expressions, intvec, intvec @subsection intvec declarations @cindex intvec declarations @table @strong @item Syntax: @code{intvec} name @code{=} intvec_expression @code{;} @*@code{intvec} name @code{=} list_of_int_and_intvec_expressions @code{;} @item Purpose: defines an intvec variable. @* An intvec consists of an ordered list of integers. @item Default: 0 @item Example: @smallexample @c reused example intvec_declarations types.doc:1045 intvec iv=1,3,5,7,8; iv; @expansion{} 1,3,5,7,8 iv[4]; @expansion{} 7 iv[3..size (iv)]; @expansion{} 5 7 8 @c end example intvec_declarations types.doc:1045 @end smallexample @end table @c ------------------------------ @node intvec expressions, intvec operations, intvec declarations, intvec @subsection intvec expressions @cindex intvec expressions An intvec expression is: @enumerate @item a range: int expression @code{..} int expression @item a function returning intvec @item intvec operations with int (@code{+}, @code{-}, @code{*}, @code{/}, @code{%}) @item intvec operations (@code{+}, @code{-}) @item intvec operation with intmat (@code{*}) @item a type cast to intvec @end enumerate @*@strong{Example:} @smallexample @c reused example intvec_expressions types.doc:1077 intvec v=-1,2; intvec w=v,v; // concatenation w; @expansion{} -1,2,-1,2 w = -2..2,v,1; w; @expansion{} -2,-1,0,1,2,-1,2,1 intmat m[3][2] = 0,1,2,-2,3,1; m*v; @expansion{} 2,-6,-1 typeof(_); @expansion{} intvec v = intvec(m); v; @expansion{} 0,1,2,-2,3,1 ring r; poly f = x2z + 2xy-z; f; @expansion{} x2z+2xy-z v = leadexp(f); v; @expansion{} 2,0,1 @c end example intvec_expressions types.doc:1077 @end smallexample @c ------------------------------ @node intvec operations, intvec related functions, intvec expressions, intvec @subsection intvec operations @cindex intvec operations @table @asis @item @code{+} addition with intvec or int (component-wise) @item @code{-} negation or subtraction with intvec or int (component-wise) @item @code{*} multiplication with int (component-wise) @item @code{/}, @code{div} division by int (component-wise) @item @code{%, mod} modulo (component-wise) @item @code{<>}, @code{==}, @code{<=}, @code{>=}, @code{>}, @code{<} comparison (done lexicographically) @item intvec_expression @code{[} int_expression @code{]} is an element of the intvec; the first element has index one. @end table @*@strong{Example:} @smallexample @c reused example intvec_operations types.doc:1126 intvec iv = 1,3,5,7,8; iv+1; // add 1 to each entry @expansion{} 2,4,6,8,9 iv*2; @expansion{} 2,6,10,14,16 iv; @expansion{} 1,3,5,7,8 iv-10; @expansion{} -9,-7,-5,-3,-2 iv=iv,0; iv; @expansion{} 1,3,5,7,8,0 iv div 2; @expansion{} 0,1,2,3,4,0 iv+iv; // component-wise addition @expansion{} 2,6,10,14,16,0 iv[size(iv)-1]; // last-1 entry @expansion{} 8 intvec iw=2,3,4,0; iv==iw; // lexicographic comparison @expansion{} 0 iv < iw; @expansion{} 1 iv != iw; @expansion{} 1 iv[2]; @expansion{} 3 iw = 4,1,2; iv[iw]; @expansion{} 7 1 3 @c end example intvec_operations types.doc:1126 @end smallexample @c ------------------------------ @node intvec related functions, , intvec operations, intvec @subsection intvec related functions @cindex intvec related functions @table @code @item hilb returns Hilbert series as intvec (see @ref{hilb}) @item indepSet sets of independent variables of an ideal (see @ref{indepSet}) @item leadexp the exponent vector of the leading monomial (see @ref{leadexp}) @item nrows number of rows (see @ref{nrows}) @item qhweight returns quasihomogeneous weights (see @ref{qhweight}) @item size length of the intvec (see @ref{size}) @item sortvec permutation for sorting ideals/modules (see @ref{sortvec}) @item transpose transpose of an intvec, returns an intmat (see @ref{transpose}) @item weight returns weights for the weighted ecart method (see @ref{weight}) @end table @c --------------------------------------- @node link, list, intvec, Data types @section link @cindex link @c {{{ section link }}} Links are the communication channels of @sc{Singular}, i.e., something @sc{Singular} can write to and/or read from. Currently, @sc{Singular} supports four different link types: @itemize @bullet @item ASCII links (see @ref{ASCII links}) @item MPfile links (see @ref{MPfile links}) @item MPtcp links (see @ref{MPtcp links}) @item DBM links (see @ref{DBM links}) @end itemize @menu * link declarations:: * link expressions:: * link related functions:: * ASCII links:: * MP links:: * DBM links:: @end menu @c ------------------------------ @node link declarations, link expressions, link, link @subsection link declarations @cindex link declarations @table @strong @item Syntax: @code{link} name @code{=} string_expression @code{;} @item Purpose: defines a new communication link. @item Default: none @item Example: @smallexample @c Tim: Let's only do the read here once, doing it twice without closing @c it first might be confusing @c reused example link_declarations types.doc:1224 link l=":w example.txt"; int i=22; // cf. ASCII links for explanation string s="An int follows:"; write(l,s,i); l; @expansion{} // type : ASCII @expansion{} // mode : w @expansion{} // name : example.txt @expansion{} // open : yes @expansion{} // read : not ready @expansion{} // write: ready close(l); // read(l); @expansion{} An int follows: @expansion{} 22 @expansion{} close(l); @c end example link_declarations types.doc:1224 @end smallexample @end table @c ------------------------------ @node link expressions, link related functions, link declarations, link @subsection link expressions @cindex link expressions A link expression is: @enumerate @item an identifier of type link @item a string describing the link @end enumerate A link is described by a string which consists of two parts: a property string followed by a name string. The property string describes the type of the link (@code{ASCII}, @code{MPfile}, @code{MPtcp} or @code{DBM}) and the mode of the link (e.g., open for read, write or append). The name string describes the filename of the link, resp.@: a network connection for MPtcp links. For a detailed format description of the link describing string see: @iftex @itemize @bullet @item for ASCII links: @ref{ASCII links} @item for MPfile links: @ref{MPfile links} @item for MPtcp links: @ref{MPtcp links} @item for DBM links: @ref{DBM links} @end itemize @end iftex @menu * ASCII links:: * MPfile links:: * MPtcp links:: * DBM links:: @end menu @c ------------------------------ @node link related functions, ASCII links, link expressions, link @subsection link related functions @cindex link related functions @table @code @item close closes a link (see @ref{close}) @item dump generates a dump of all variables and their values (see @ref{dump}) @item getdump reads a dump (see @ref{getdump}) @item open opens a link (see @ref{open}) @item read reads from a link (see @ref{read}) @item status gets the status of a link (see @ref{status}) @item write writes to a link (see @ref{write}) @item kill closes and kills a link (see @ref{kill}) @end table @c ------------------------------ @node ASCII links, MP links, link related functions, link @subsection ASCII links @cindex ASCII links Via ASCII links data that can be converted to a string can be written into files for storage or communication with other programs. The data is written in plain ASCII format. The output format of polynomials is done w.r.t@:. the value of the global variable @code{short} (see @ref{short}). Reading from an ASCII link returns a string --- conversion into other data is up to the user. This can be done, for example, using the command @code{execute} (see @ref{execute}). The ASCII link describing string has to be one of the following: @enumerate @item @code{"ASCII: "} + filename @*the mode (read or append) is set by the first @code{read} or @code{write} command. @item @code{"ASCII:r "} + filename @*opens the file for reading. @item @code{"ASCII:w "} + filename @*opens the file for overwriting. @item @code{"ASCII:a "} + filename @*opens the file for appending. @end enumerate There are the following default values: @itemize @bullet @item the type @code{ASCII} may be omitted since ASCII links are the default links. @item if non of @code{r}, @code{w}, or @code{a} is specified, the mode of the link is set by the first @code{read} or @code{write} command on the link. If the first command is @code{write}, the mode is set to @code{a} (append mode). @item if the filename is omitted, @code{read} reads from stdin and @code{write} writes to stdout. @end itemize Using these default rules, the string @code{":r temp"} describes a link which is equivalent to the link @code{"ASCII:r temp"}: an ASCII link to the file @code{temp} which is opened for reading. The string @code{"temp"} describes an ASCII link to the file @code{temp}, where the mode is set by the first @code{read} or @code{write} command. See also the example below. Note that the filename may contain a path. On Microsoft Windows (resp.@: MS-DOS) platforms, names of a drive can precede the filename, but must be started with a @code{//} (as in @code{//c/temp/ex}. An ASCII link can be used either for reading or for writing, but not for both at the same time. A @code{close} command must be used before a change of I/O direction. Types without a conversion to @code{string} cannot be written. @*@strong{Example:} @smallexample @c reused example ASCII_links types.doc:1364 ring r=32003,(x,y,z),dp; link l=":w example.txt"; // type is ASCII, mode is overwrite l; @expansion{} // type : ASCII @expansion{} // mode : w @expansion{} // name : example.txt @expansion{} // open : no @expansion{} // read : not ready @expansion{} // write: not ready status(l, "open", "yes"); // link is not yet opened @expansion{} 0 ideal i=x2,y2,z2; write (l,1,";",2,";","ideal i=",i,";"); status(l, "open", "yes"); // now link is open @expansion{} 1 status(l, "mode"); // for writing @expansion{} w close(l); // link is closed write("example.txt","int j=5;");// data is appended to file read("example.txt"); // data is returned as string @expansion{} 1 @expansion{} ; @expansion{} 2 @expansion{} ; @expansion{} ideal i= @expansion{} x2,y2,z2 @expansion{} ; @expansion{} int j=5; @expansion{} execute(read(l)); // read string is executed @expansion{} 1 @expansion{} 2 @expansion{} // ** redefining i ** close(l); // link is closed @c end example ASCII_links types.doc:1364 @c // dump vars overwriting previous file content: @c dump(":w example.txt"); @end smallexample @c ------------------------------ @node MP links, DBM links, ASCII links, link @subsection MP links @cindex MP links MP (Multi Protocol) links give the possibility to store and communicate data in the binary MP format: Read and write access is very fast compared to ASCII links. MP links can be established using files (link type is @code{MPfile}) or using TCP sockets (link type is @code{MPtcp}). All data (including such data that cannot be converted to a string) can be written to an MP link. For ring-dependent data, a ring description is written together with the data. Reading from an MP link returns an expression (not a string) which was evaluated after the read operation. If the expression read from an MP link is not from the same ring as the current ring, then a @code{read} changes the current ring. Currently, MP links are only available on Unix platforms and data is written without attributes (which is likely to change in future versions). For a general description of MP, see @code{http://symbolicnet.mcs.kent.edu/areas/mp.html}. @menu * MPfile links:: * MPtcp links:: @end menu @c ------------------------------------------------------------- @node MPfile links, MPtcp links, MP links, MP links @subsubsection MPfile links @cindex MPfile links MPfile links provide the possibility to store data in a file using the binary MP format. Read and write operations are very fast compared to ASCII links. Therefore, for storing large amounts of data, MPfile links should be used instead of ASCII links. Unlike ASCII links, data read from MPfile links is returned as expressions one at a time, and not as a string containing the entire content of the file. Furthermore, ring-dependent data is stored together with a ring description. Therefore, reading ring-dependent data might change the current ring. The MPfile link describing string has to be one of the following: @enumerate @item @code{"MPfile: "} + filename @*the mode (read or append) is set by the first @code{read} or @code{write} command. @item @code{"MPfile:r "} + filename @*opens the file for reading. @item @code{"MPfile:w "} + filename @*opens the file for overwriting. @item @code{"MPfile:a "} + filename @*opens the file for appending. @end enumerate There are the following default values: @itemize @bullet @item if none of @code{r}, @code{w}, or @code{a} is specified, the mode of the link is set by the first @code{read} or @code{write} command on the link. If the first command is @code{write}, the mode is set to @code{a} (append mode). @c Tim: You and I were right here: It is indeed append. Olaf @end itemize Note that the filename may contain a path. An MPfile link can be used either for reading or for writing, but not for both at the same time. A @code{close} command must be used before a change of I/O direction. @*@strong{Example:} @smallexample @c reused example MPfile_links types.doc:1453 ring r; link l="MPfile:w example.mp"; // type=MPfile, mode=overwrite l; @expansion{} // type : MPfile @expansion{} // mode : w @expansion{} // name : example.mp @expansion{} // open : no @expansion{} // read : not ready @expansion{} // write: not ready ideal i=x2,y2,z2; write (l,1, i, "hello world");// write three expressions write(l,4); // append one more expression close(l); // link is closed // open the file for reading now read(l); // only first expression is read @expansion{} 1 kill r; // no basering active now def i = read(l); // second expression // notice that current ring was set, the name was assigned // automatically listvar(ring); @expansion{} // mpsr_r0 [0] *ring def s = read(l); // third expression listvar(); @expansion{} // s [0] string hello world @expansion{} // mpsr_r0 [0] *ring @expansion{} // i [0] ideal, 3 generator(s) @expansion{} // l [0] link @expansion{} // LIB [0] string standard.lib close(l); // link is closed dump("MPfile:w example.mp"); // dump everything to example.mp kill i, s; // kill i and s getdump("MPfile: example.mp");// get previous dump listvar(); // got all variables and values back @expansion{} // mpsr_r0 [0] *ring @expansion{} // i [0] ideal, 3 generator(s) @expansion{} // s [0] string hello world @expansion{} // l [0] link @expansion{} // LIB [0] string standard.lib @c end example MPfile_links types.doc:1453 @end smallexample @c ------------------------------------------------------------- @node MPtcp links, , MPfile links, MP links @subsubsection MPtcp links @cindex MPtcp links MPtcp links give the possibility to exchange data in the binary MP format between two processes which may run on the same or on different computers. MPtcp links can be opened in four different modes: @table @code @item listen @sc{Singular} acts as a server. @item connect @sc{Singular} acts as a client. @item launch @sc{Singular} acts as a client, launching an application as server. @item fork @sc{Singular} acts as a client, forking another @sc{Singular} as server. @end table The MPtcp link describing string has to be @itemize @bullet @item listen mode: @enumerate @item @code{"MPtcp:listen --MPport "} + portnumber @end enumerate @sc{Singular} becomes a server and waits at the port for a connect call. @item connect mode: @enumerate 2 @item @code{"MPtcp:connect --MPport "} + portnumber @item @code{"MPtcp:connect --MPhost "} + hostname + @code{" --MPport "} + portnumber @end enumerate @sc{Singular} becomes a client and connects to a server waiting at the host and port. @item launch mode: @enumerate 4 @item @code{"MPtcp:launch"} @item @code{"MPtcp:launch --MPrsh "} + rsh @item @code{"MPtcp:launch --MPrsh "} + rsh + @code{" --MPhost "} + hostname @item @code{"MPtcp:launch --MPrsh "} + rsh + @code{" --MPhost "} + hostname + @code{" --MPapplication "} + application @end enumerate @sc{Singular} becomes a client and starts (launches) the application using the specified remote shell command (default is @code{ssh}) on a (possibly) different host (default is @code{localhost} which then acts as a server. @item fork mode: @enumerate 8 @item @code{"MPtcp:fork"} @end enumerate @sc{Singular} becomes a client and forks another @sc{Singular} on the same host which acts as a server. @end itemize There are the following default values: @itemize @bullet @item if none of @code{listen}, @code{connect}, @code{launch} or @code{fork} is specified, the default mode is set to @code{fork}. @item if no remote shell (rsh) command is specified, then the command @code{ssh} is used. @item if no application is specified (in mode @code{launch}) the default application is the value of @code{system("Singular") + "-bq"}. (This evaluates to the absolute path of the @sc{Singular} currently running with the option @code{"-bq"} appended.) @item if no hostname is specified the local host is used as default host. @end itemize To open an MPtcp link in launch mode, the application to launch must either be given with an absolute pathname, or must be in a directory contained in the search path. The launched application acts as a server, whereas the @sc{Singular} that actually opened the link acts as a client. @sc{Singular} automatically appends the command line arguments "@code{--MPmode connect --MPhost} hostname @code{--MPport} portnumber" to the command line of the server application. Both hostname and portnumber are substituted by the values from the link specification. The client "listens" at the given port until the server application does a connect call. If @sc{Singular} is used as server application it has to be started with the command line option @code{-b}. Since launching is done using a remote shell command, the host on which the application should run must have an entry in the @code{.rhosts} file. Even the local machine must have an entry if applications are to be launched locally. If the MPtcp link is opened in fork mode a child of the current @sc{Singular} is forked. All variables and their values are inherited by the child. The child acts as a server whereas the @sc{Singular} that actually opened the link acts as a client. To arrange the evaluation of an expression by a server, the expression must be quoted using the command @code{quote} (see @ref{quote}), so that a local evaluation is prevented. Otherwise, the expression is evaluated first, and the result of the evaluation is written, instead of the expression which is to be evaluated. If @sc{Singular} is in server mode, the value of the variable @code{mp_ll} is the MPtcp link connecting to the client and @sc{Singular} is in an infinite read-eval-write loop until the connection is closed from the client side (by closing its connecting link). Reading and writing is done to the link @code{mp_ll}: After an expression is read, it is evaluated and the result of the evaluation is written back. That is, for each expression which was written to the server, there is exactly one expression written back. This might be an "empty" expression, if the evaluation on the server side does not return a value. MPtcp links should explicitly be opened before being used. MPtcp links are bidirectional, i.e., can be be used for both, writing and reading. Reading from an MPtcp link blocks until data was written to that link. The @code{status} command can be used to check whether there is data to read. @*@strong{Example:} @smallexample @c reused example MPtcp_links types.doc:1601 LIB "general.lib"; // needed for "killall" command link l="MPtcp:launch"; open(l); l; // l is ready for writing but not for reading @expansion{} // type : MPtcp @expansion{} // mode : launch @expansion{} // name : @expansion{} // open : yes @expansion{} // read : not ready @expansion{} // write: ready ring r; ideal i=x2+y,xyz+z,x2+y2; write (l,quote(std(eval(i)))); // std(i) is computed on server def j = read(l);j; // result of computation on server is read @expansion{} j[1]=z @expansion{} j[2]=y2-y @expansion{} j[3]=x2+y2 write(l, quote(getdump(mp_ll))); // server reads dump dump(l); // dump is written to server (includes proc's) read(l); // result of previous write-command is read killall("not", "link"); killall("proc"); // kills everything, but links @expansion{} // ** killing the basering for level 0 write(l, quote(dump(mp_ll))); // server writes dump getdump(l); // dump is read from server read(l); // result of previous write-command is read close(l); // server is shut down listvar(all); // same state as we had before "killall()" @expansion{} // mpsr_r0 [0] ring @expansion{} // r [0] *ring @expansion{} // j [0] ideal, 3 generator(s) @expansion{} // i [0] ideal, 3 generator(s) @expansion{} // l [0] link l = "MPtcp:"; // fork link declaration open(l); l; // Notice that name is "parent" @expansion{} // type : MPtcp @expansion{} // mode : fork @expansion{} // name : parent @expansion{} // open : yes @expansion{} // read : not ready @expansion{} // write: ready write(l, quote(status(mp_ll, "name"))); read(l); // and name of forked link is "child" @expansion{} child write(l,quote(i)); // Child inherited vars and their values read(l); @expansion{} _[1]=x2+y @expansion{} _[2]=xyz+z @expansion{} _[3]=x2+y2 close(l); // shut down forked child @c end example MPtcp_links types.doc:1601 @end smallexample @c ------------------------------ @node DBM links, , MP links, link @subsection DBM links @cindex DBM links DBM links provide access to data stored in a data base. Each entry in the data base consists of a (key_string, value_string) pair. Such a pair can be inserted with the command @code{write(}link@code{,} key_string@code{,} value_string@code{)}. By calling @code{write(}link@code{,} key_string@code{)}, the entry with key key_string is deleted from the data base. The value of an entry is returned by the command @code{read(}link@code{,} key_string@code{)}. With only one argument, @code{read(}link@code{)} returns the next key in the data base. Using this feature a data base can be scanned in order to access all entries of the data base. If a data base with name @code{name} is opened for writing for the first time, two files (@code{name.pag} and @code{name.dir}), which contain the data base, are automatically created. The DBM link describing string has to be one of the following: @enumerate @item @code{"DBM: "} + name @*opens the data base for reading (default mode). @item @code{"DBM:r "} + name @*opens the data base for reading. @item @code{"DBM:rw "} + name @*opens the data base for reading and writing. @end enumerate Note that @code{name} must be given without the suffix @code{.pag} or @code{.dir}. The name may contain an (absolute) path. @*@strong{Example:} @smallexample @c reused example DBM_links types.doc:1672 link l="DBM:rw example"; write(l,"1","abc"); write(l,"3","XYZ"); write(l,"2","ABC"); l; @expansion{} // type : DBM @expansion{} // mode : rw @expansion{} // name : example @expansion{} // open : yes @expansion{} // read : ready @expansion{} // write: ready close(l); // read all keys (till empty string): read(l); @expansion{} 1 read(l); @expansion{} 3 read(l); @expansion{} 2 read(l); @expansion{} // read data corresponding to key "1" read(l,"1"); @expansion{} abc // read all data: read(l,read(l)); @expansion{} abc read(l,read(l)); @expansion{} XYZ read(l,read(l)); @expansion{} ABC // close close(l); @c end example DBM_links types.doc:1672 @end smallexample @c --------------------------------------- @node list, map, link, Data types @section list @cindex list Lists are arrays whose elements can be of any type (including ring and qring). If one element belongs to a ring the whole list belongs to that ring. This applies also to the special list @code{#}. The expression @code{list()} is the empty list. Note that a list stores the objects itself and not the names. Hence, if @code{L} is a list, @code{L[1]} for example has no name. A name, say @code{R}, can be created for @code{L[1]} by @code{def R=L[1];}. To store also the name of an object, say @code{r}, it can be added to the list with @code{nameof(r);}. Rings and qrings may be objects of a list. @strong{Note}: Unlike other assignments a ring as an element of a list is not a copy but another reference to the same ring. @menu * list declarations:: * list expressions:: * list operations:: * list related functions:: @end menu @c ------------------------------ @node list declarations, list expressions, list, list @subsection list declarations @cindex list declarations @table @strong @item Syntax: @code{list} name @code{=} expression_list@code{;} @*@code{list} name @code{=} list_expression@code{;} @item Purpose: defines a list (of objects of possibly different types). @item Default: empty list @item Example: @smallexample @c reused example list_declarations types.doc:1739 list l=1,"str"; l[1]; @expansion{} 1 l[2]; @expansion{} str ring r; listvar(r); @expansion{} // r [0] *ring ideal i = x^2, y^2 + z^3; l[3] = i; l; @expansion{} [1]: @expansion{} 1 @expansion{} [2]: @expansion{} str @expansion{} [3]: @expansion{} _[1]=x2 @expansion{} _[2]=z3+y2 listvar(r); // the list l belongs now to the ring r @expansion{} // r [0] *ring @expansion{} // l [0] list, size: 3 @expansion{} // i [0] ideal, 2 generator(s) @c end example list_declarations types.doc:1739 @end smallexample @end table @c ------------------------------ @node list expressions, list operations, list declarations, list @subsection list expressions @cindex list expressions A list expression is: @enumerate @item the empty list @code{list()} @item an identifier of type list @item a function returning list @item list expressions combined by the arithmetic operation @code{+} @item a type cast to list @end enumerate @c inserted refs from types.doc:1772 @ifinfo @menu See * Type conversion and casting:: @end menu @end ifinfo @iftex See @ref{Type conversion and casting}. @end iftex @c end inserted refs from types.doc:1772 @*@strong{Example:} @smallexample @c reused example list_expressions types.doc:1778 list l = "hello",1; l; @expansion{} [1]: @expansion{} hello @expansion{} [2]: @expansion{} 1 l = list(); l; @expansion{} empty list ring r =0,x,dp; factorize((x+1)^2); @expansion{} [1]: @expansion{} _[1]=1 @expansion{} _[2]=x+1 @expansion{} [2]: @expansion{} 1,2 list(1,2,3); @expansion{} [1]: @expansion{} 1 @expansion{} [2]: @expansion{} 2 @expansion{} [3]: @expansion{} 3 @c end example list_expressions types.doc:1778 @end smallexample @c ------------------------------ @node list operations, list related functions, list expressions, list @subsection list operations @cindex list operations @table @asis @item @code{+} concatenation @item @code{delete} deletes one element from list, returns new list @item @code{insert} inserts or appends a new element to list, returns a new list @item list_expression @code{[} int_expression @code{]} is a list entry; the index 1 gives the first element. @end table @*@strong{Example:} @smallexample @c reused example list_operations types.doc:1807 list l1 = 1,"hello",list(-1,1); list l2 = list(1,2,3); l1 + l2; // one new list @expansion{} [1]: @expansion{} 1 @expansion{} [2]: @expansion{} hello @expansion{} [3]: @expansion{} [1]: @expansion{} -1 @expansion{} [2]: @expansion{} 1 @expansion{} [4]: @expansion{} 1 @expansion{} [5]: @expansion{} 2 @expansion{} [6]: @expansion{} 3 list l3 =_; l1,l2; // two lists @expansion{} [1]: @expansion{} 1 @expansion{} [2]: @expansion{} hello @expansion{} [3]: @expansion{} [1]: @expansion{} -1 @expansion{} [2]: @expansion{} 1 @expansion{} [1]: @expansion{} 1 @expansion{} [2]: @expansion{} 2 @expansion{} [3]: @expansion{} 3 l2[2]; @expansion{} 2 @c end example list_operations types.doc:1807 @end smallexample @c ------------------------------ @node list related functions, , list operations, list @subsection list related functions @cindex list related functions @table @code @item bareiss returns a list of a matrix (lower triangular) and of an intvec (permutations of columns, see @ref{bareiss}) @item betti Betti numbers of a resolution (see @ref{betti}) @item delete deletes an element from a list (see @ref{delete}) @item facstd factorizing Groebner basis algorithm (see @ref{facstd}) @item factorize list of factors of a polynomial (see @ref{factorize}) @item insert inserts or appends a new element to a list (see @ref{insert}) @item lres free resolution (see @ref{lres}) @item minres minimize a free resolution (see @ref{minres}) @item mres minimal free resolution of an ideal, resp.@: module w.r.t. a minimal set of generators of the first module (see @ref{mres}) @item names list of all user-defined variable names (see @ref{names}) @item res free resolution of an ideal, resp.@: module (see @ref{res}) @item size number of entries (see @ref{size}) @item sres free resolution of an ideal, resp.@: module, given by a standard base (see @ref{sres}) @end table @c --------------------------------------- @node map, matrix, list, Data types @section map @cindex map Maps are ring maps from a preimage ring into the basering. @strong{Note:} @itemize @bullet @item the target of a map is @strong{ALWAYS} the actual basering @item the preimage ring is stored "by name", that means, maps can only be used in such contexts, where the name of the preimage ring can be resolved (i.e., there might be problems for rings/maps defined in subprocedures). See also @ref{Identifier resolution}, @ref{Names in procedures}. @end itemize Maps between rings with different coefficient fields are possible and listed below. Canonically realized are @itemize @bullet @item @tex $Q \rightarrow Q(a, \ldots)$ @end tex @ifinfo Q -> Q(a,..) @end ifinfo @item @tex $Q \rightarrow R$ @end tex @ifinfo Q -> R @end ifinfo @item @tex $Q \rightarrow C$ @end tex @ifinfo Q -> C @end ifinfo @item @tex $Z/p \rightarrow (Z/p)(a, \ldots)$ @end tex @ifinfo Z/p ->(Z/p)(a,...) @end ifinfo @item @tex $Z/p \rightarrow GF(p^n)$ @end tex @ifinfo Z/p -> GF(p^n) @end ifinfo @item @tex $Z/p \rightarrow R$ @end tex @ifinfo Z/p -> R @end ifinfo @item @tex $R \rightarrow C$ @end tex @ifinfo R -> C @end ifinfo @end itemize Possible are furthermore @itemize @bullet @item @tex % This is quite a hack, but for now it works. $Z/p \rightarrow Q, \quad [i]_p \mapsto i \in [-p/2, \, p/2] \subseteq Z$ @end tex @ifinfo Z/p -> Q : [i]_p -> i in [-p/2, p/2] in Z @end ifinfo @item @tex $Z/p \rightarrow Z/p^\prime, \quad [i]_p \mapsto i \in [-p/2, \, p/2] \subseteq Z, \; i \mapsto [i]_{p^\prime} \in Z/p^\prime$ @end tex @ifinfo Z/p -> Z/p' : [i]_p in Z/p -> i in [-p/2,p/2] in Z, i -> [i]_p' in Z/p' @end ifinfo @item @tex $C \rightarrow R, \quad$ the real part @end tex @ifinfo C -> R : the real part @end ifinfo @end itemize Finally, in Singular we allow the mapping from rings with coefficient field Q to rings whose ground fields have finite characteristic: @itemize @bullet @item @tex $Q \rightarrow Z/p$ @end tex @ifinfo Q -> Z/p @end ifinfo @item @tex $Q \rightarrow (Z/p)(a, \ldots)$ @end tex @ifinfo Q -> (Z/p)(a,..) @end ifinfo @end itemize In these cases the denominator and the numerator of a number are mapped separately by the usual map from Z to Z/p, and the image of the number is built again afterwards by division. It is thus not allowed to map numbers whose denominator is divisible by the characteristic of the target ground field, or objects containing such numbers. We, therefore, strongly recommend using such maps only to map objects with integer coefficients. @menu * map declarations:: * map expressions:: * map operations:: * fetch:: * imap:: * subst:: @end menu @iftex See @ref{imap}; @ref{fetch}; @ref{subst}. @end iftex @c ------------------------------ @node map declarations, map expressions, map, map @subsection map declarations @cindex map declarations @table @strong @item Syntax: @code{map} name @code{=} preimage_ring_name @code{,} ideal_expression @code{;} @*@code{map} name @code{=} preimage_ring_name @code{,} list_of_poly_and_ideal_expressions @code{;} @*@code{map} name @code{=} map_expression @code{;} @item Purpose: defines a ring map from preimage_ring to basering. @* Maps the variables of the preimage ring to the generators of the ideal. If the ideal contains less elements than variables in the preimage_ring the remaining variables are mapped to 0, if the ideal contains more elements these are ignored. The image ring is always the actual basering. For the mapping of coefficients from different fields see @ref{map}. @item Default: none @item Note: There are standard mappings for maps which are close to the identity map: @code{fetch} and @code{imap}. The name of a map serves as the function which maps objects from the preimage_ring into the basering. These objects must be defined by names (no evaluation in the preimage ring is possible). @item Example: @smallexample @c reused example map_declarations types.doc:2044 ring r1=32003,(x,y,z),dp; ideal i=x,y,z; ring r2=32003,(a,b),dp; map f=r1,a,b,a+b; // maps from r1 to r2, // x -> a // y -> b // z -> a+b f(i); @expansion{} _[1]=a @expansion{} _[2]=b @expansion{} _[3]=a+b // operations like f(i[1]) or f(i*i) are not allowed ideal i=f(i); // objects in different rings may have the same name map g = r2,a2,b2; map phi = g(f); // composition of map f and g // maps from r1 to r2, // x -> a2 // y -> b2 // z -> a2+b2 phi(i); @expansion{} _[1]=a2 @expansion{} _[2]=b2 @expansion{} _[3]=a2+b2 @c end example map_declarations types.doc:2044 @end smallexample @end table @c inserted refs from types.doc:2069 @ifinfo @menu See * fetch:: * ideal expressions:: * imap:: * map:: * ring:: @end menu @end ifinfo @iftex See @ref{fetch}; @ref{ideal expressions}; @ref{imap}; @ref{map}; @ref{ring}. @end iftex @c end inserted refs from types.doc:2069 @c ------------------------------ @node map expressions, map operations, map declarations, map @subsection map expressions @cindex map expressions A map expression is: @enumerate @item an identifier of type map @item a function returning map @item map expressions combined by composition using parentheses (@code{(}, @code{)}) @end enumerate @c ------------------------------ @node map operations, , map expressions, map @subsection map operations @cindex map operations @table @asis @item @code{( )} composition of maps. If, for example, @code{f} and @code{g} are maps, then @code{f(g)} is a map expression giving the composition of @code{f} and @code{g}. @item map_expression @code{[} int_expressions @code{]} is a map entry (the image of the corresponding variable) @end table @*@strong{Example:} @smallexample @c reused example map_operations types.doc:2107 ring r=0,(x,y),dp; map f=r,y,x; // the map f permutes the variables f; @expansion{} f[1]=y @expansion{} f[2]=x poly p=x+2y3; f(p); @expansion{} 2x3+y map g=f(f); // the map g defined as f^2 is the identity g; @expansion{} g[1]=x @expansion{} g[2]=y g(p) == p; @expansion{} 1 @c end example map_operations types.doc:2107 @end smallexample @c --------------------------------------- @node matrix, module, map, Data types @section matrix @cindex matrix Objects of type matrix are matrices with polynomial entries. Like polynomials they can only be defined or accessed with respect to a basering. In order to compute with matrices having integer or rational entries define a ring with characteristic 0 and at least one variable. A matrix can be multiplied by and added to a poly; in this case the poly is converted into a matrix of the right size with the poly on the diagonal. If A is a matrix then the assignment @code{module M=A;} or @code{module M=module(A);} creates a module generated by the columns of A. Note that the trailing zero columns of A may be deleted by module operations with M. @menu * matrix declarations:: * matrix expressions:: * matrix type cast:: * matrix operations:: * matrix related functions:: @end menu @c ------------------------------ @node matrix declarations, matrix expressions, matrix, matrix @subsection matrix declarations @cindex matrix declarations @table @strong @item Syntax: @code{matrix} name@code{[}rows@code{][}cols@code{] =} list_of_poly_expressions @code{;} @*@code{matrix} name = matrix_expression @code{;} @item Purpose: defines a matrix (of polynomials). The given poly_list fills up the matrix beginning with the first row from the left to the right, then the second row and so on. If the poly_list contains less than rows*cols elements, the matrix is filled up with zeros; if it contains more elements, then only the first rows*cols elements are used. If the right-hand side is a matrix expression the matrix on the left-hand side gets the same size as the right-hand side, otherwise the size is determined by the left-hand side. If the size is omitted a 1x1 matrix is created. @item Default: 0 (1 x 1 matrix) @item Example: @smallexample @c reused example matrix_declarations types.doc:2175 int ro = 3; ring r = 32003,(x,y,z),dp; poly f=xyz; poly g=z*f; ideal i=f,g,g^2; matrix m[ro][3] = x3y4, 0, i, f ; // a 3 x 3 matrix m; @expansion{} m[1,1]=x3y4 @expansion{} m[1,2]=0 @expansion{} m[1,3]=xyz @expansion{} m[2,1]=xyz2 @expansion{} m[2,2]=x2y2z4 @expansion{} m[2,3]=xyz @expansion{} m[3,1]=0 @expansion{} m[3,2]=0 @expansion{} m[3,3]=0 print(m); @expansion{} x3y4,0, xyz, @expansion{} xyz2,x2y2z4,xyz, @expansion{} 0, 0, 0 matrix A; // the 1 x 1 zero matrix matrix B[2][2] = m[1..2, 2..3]; //defines a submatrix print(B); @expansion{} 0, xyz, @expansion{} x2y2z4,xyz matrix C=m; // defines C as a 3 x 3 matrix equal to m print(C); @expansion{} x3y4,0, xyz, @expansion{} xyz2,x2y2z4,xyz, @expansion{} 0, 0, 0 @c end example matrix_declarations types.doc:2175 @end smallexample @end table @c ------------------------------ @node matrix expressions, matrix type cast, matrix declarations, matrix @subsection matrix expressions @cindex matrix expressions A matrix expression is: @enumerate @item an identifier of type matrix @item a function returning matrix @item matrix expressions combined by the arithmetic operations @code{+}, @code{-} or @code{*} @item a type cast to matrix (@pxref{matrix type cast}) @end enumerate @*@strong{Example:} @smallexample @c reused example matrix_expressions types.doc:2213 ring r=0,(x,y),dp; poly f= x3y2 + 2x2y2 +2; matrix H = jacob(jacob(f)); // the Hessian of f matrix mc = coef(f,y); print(mc); @expansion{} y2, 1, @expansion{} x3+2x2,2 module MD = [x+y,1,x],[x+y,0,y]; matrix M = MD; print(M); @expansion{} x+y,x+y, @expansion{} 1, 0, @expansion{} x, y @c end example matrix_expressions types.doc:2213 @end smallexample @c ------------------------------ @node matrix type cast, matrix operations, matrix expressions, matrix @subsection matrix type cast @cindex matrix type cast @table @code @item @strong{Syntax:} @code{matrix (} expression @code{)} @*@code{matrix (} expression, int_n, int_m @code{)} @item @strong{Type:} matrix @item @strong{Purpose:} Converts expression to a matrix, where expression must be of type int, intmat, intvec, number, poly, ideal, vector, module, or matrix. If int_n and int_m are supplied, then they specify the dimension of the matrix. Otherwise, the size (resp.@: dimensions) of the matrix are determined by the size (resp.@: dimensions) of the expression. @item @strong{Example:} @smallexample @c reused example matrix_type_cast types.doc:2244 ring r=32003,(x,y,z),dp; matrix(x); @expansion{} _[1,1]=x matrix(x, 1, 2); @expansion{} _[1,1]=x @expansion{} _[1,2]=0 matrix(intmat(intvec(1,2,3,4), 2, 2)); @expansion{} _[1,1]=1 @expansion{} _[1,2]=2 @expansion{} _[2,1]=3 @expansion{} _[2,2]=4 matrix(_, 2, 3); @expansion{} _[1,1]=1 @expansion{} _[1,2]=2 @expansion{} _[1,3]=0 @expansion{} _[2,1]=3 @expansion{} _[2,2]=4 @expansion{} _[2,3]=0 matrix(_, 2, 1); @expansion{} _[1,1]=1 @expansion{} _[2,1]=3 @c end example matrix_type_cast types.doc:2244 @end smallexample @end table @c inserted refs from types.doc:2254 @ifinfo @menu See * Type conversion and casting:: * intmat type cast:: * matrix:: @end menu @end ifinfo @iftex See @ref{Type conversion and casting}; @ref{intmat type cast}; @ref{matrix}. @end iftex @c end inserted refs from types.doc:2254 @c ------------------------------ @node matrix operations, matrix related functions, matrix type cast, matrix @subsection matrix operations @cindex matrix operations @table @asis @item @code{+} addition with matrix or poly; the poly is converted into a diagonal matrix @item @code{-} negation or subtraction with matrix or poly; the poly is converted into a diagonal matrix @item @code{*} multiplication with matrix or poly; the poly is converted into a diagonal matrix @item @code{/} division by poly @item @code{==}, @code{<>}, @code{!=} comparison @item matrix_expression @code{[} int_expression@code{,} int_expression @code{]} is a matrix entry, where the first index indicates the row and the second the column @end table @*@strong{Example:} @smallexample @c reused example matrix_operations types.doc:2291 ring r=32003,x,dp; matrix A[3][3] = 1,3,2,5,0,3,2,4,5; // define a matrix print(A); // nice printing of small matrices @expansion{} 1,3,2, @expansion{} 5,0,3, @expansion{} 2,4,5 A[2,3]; // matrix entry @expansion{} 3 A[2,3] = A[2,3] + 1; // change entry A[2,1..3] = 1,2,3; // change 2nd row print(A); @expansion{} 1,3,2, @expansion{} 1,2,3, @expansion{} 2,4,5 matrix E[3][3]; E = E + 1; // the unit matrix matrix B =x*E - A; print(B); @expansion{} x-1,-3, -2, @expansion{} -1, x-2,-3, @expansion{} -2, -4, x-5 det(B); // the characteristic polynomial of A @expansion{} x3-8x2-2x-1 A*A*A - 8 * A*A - 2*A == E; // Cayley-Hamilton @expansion{} 1 vector v =[x,-1,x2]; A*v; // multiplication of matrix and vector @expansion{} _[1,1]=2x2+x-3 @expansion{} _[2,1]=3x2+x-2 @expansion{} _[3,1]=5x2+2x-4 matrix m[2][2]=1,2,3; print(m-transpose(m)); @expansion{} 0,-1, @expansion{} 1,0 @c end example matrix_operations types.doc:2291 @end smallexample @c ------------------------------ @node matrix related functions, , matrix operations, matrix @subsection matrix related functions @cindex matrix related functions @table @code @item bareiss Gauss-Bareiss algorithm (see @ref{bareiss}) @item coef matrix of coefficients and monomials (see @ref{coef}) @item coeffs matrix of coefficients (see @ref{coeffs}) @item det determinant (see @ref{det}) @item diff partial derivative (see @ref{diff}) @item jacob Jacobi matrix (see @ref{jacob}) @item koszul Koszul matrix (see @ref{koszul}) @item lift lift-matrix (see @ref{lift}) @item liftstd standard basis and transformation matrix computation (see @ref{liftstd}) @item minor set of minors of a matrix (see @ref{minor}) @item ncols number of columns (see @ref{ncols}) @item nrows number of rows (see @ref{nrows}) @item print nice print format (see @ref{print}) @item size number of matrix entries (see @ref{size}) @item subst substitute a ring variable (see @ref{subst}) @item trace trace of a matrix (see @ref{trace}) @item transpose transpose a matrix (see @ref{transpose}) @item wedge wedge product (see @ref{wedge}) @end table See also the library @ref{matrix_lib}, which contains more matrix-related functions. @c @*@strong{Example:} @c @example @c @end example @c --------------------------------------- @node module, number, matrix, Data types @section module @cindex module Modules are submodules of a free module over the basering with basis @code{gen(1)}, @code{gen(2)}, @dots{} . They are represented by lists of vectors which generate the submodule. Like vectors they can only be defined or accessed with respect to a basering. If @ifinfo @math{M} @end ifinfo @tex $M$ @end tex is a submodule of @ifinfo R^n, @end ifinfo @tex $R^n$, @end tex @ifinfo @math{R} @end ifinfo @tex $R$ @end tex the basering, generated by vectors @ifinfo v_1, @dots{}, v_k, then v_1, @dots{}, v_k @end ifinfo @tex $v_1, \ldots, v_k$, then $v_1, \ldots, v_k$ @end tex may be considered as the generators of relations of @ifinfo R^n/M @end ifinfo @tex $R^n/M$ @end tex between the canonical generators @code{gen(1)},@dots{},@code{gen(n)}. Hence any finitely generated @ifinfo @math{R} @end ifinfo @tex $R$ @end tex -module can be represented in @sc{Singular} by its module of relations. The assignments @code{module M=v1,...,vk; matrix A=M;} create the presentation matrix of size @ifinfo n x k @end ifinfo @tex n$\times$k @end tex for @ifinfo R^n/M, @end ifinfo @tex R$^n$/M, @end tex i.e., the columns of A are the vectors @ifinfo v_1, @dots{}, v_k @end ifinfo @tex $v_1, \ldots, v_k$ @end tex which generate M (cf. @ref{Representation of mathematical objects}). @menu * module declarations:: * module expressions:: * module operations:: * module related functions:: @end menu @c ------------------------------ @node module declarations, module expressions, module, module @subsection module declarations @cindex module declarations @table @strong @item Syntax: @code{module} name @code{=} list_of_vector_expressions @code{;} @*@code{module} name @code{=} module_expression @code{;} @item Purpose: defines a module. @item Default: [0] @item Example: @smallexample @c reused example module_declarations types.doc:2445 ring r=0,(x,y,z),(c,dp); vector s1 = [x2,y3,z]; vector s2 = [xy,1,0]; vector s3 = [0,x2-y2,z]; poly f = xyz; module m = s1, s2-s1,f*(s3-s1); m; @expansion{} m[1]=[x2,y3,z] @expansion{} m[2]=[-x2+xy,-y3+1,-z] @expansion{} m[3]=[-x3yz,-xy4z+x3yz-xy3z] // show m in matrix format (columns generate m) print(m); @expansion{} x2,-x2+xy,-x3yz, @expansion{} y3,-y3+1, -xy4z+x3yz-xy3z, @expansion{} z, -z, 0 @c end example module_declarations types.doc:2445 @end smallexample @end table @c ------------------------------ @node module expressions, module operations, module declarations, module @subsection module expressions @cindex module expressions A module expression is: @enumerate @item an identifier of type module @item a function returning module @item module expressions combined by the arithmetic operation @code{+} @item multiplication of a module expression with an ideal or a poly expression: @code{*} @item a type cast to module @end enumerate @c inserted refs from types.doc:2478 @ifinfo @menu See * Type conversion and casting:: * ideal:: * poly:: * vector:: @end menu @end ifinfo @iftex See @ref{Type conversion and casting}; @ref{ideal}; @ref{poly}; @ref{vector}. @end iftex @c end inserted refs from types.doc:2478 @c @*@strong{Example:} @c @example @c @c example @c @c example @c @end example @c ------------------------------ @node module operations, module related functions, module expressions, module @subsection module operations @cindex module operations @table @asis @item @code{+} addition (concatenation of the generators and simplification) @item @code{*} multiplication with ideal or poly, but not `module` * `module` @item module_expression @code{[} int_expression @code{,} int_expression @code{]} is a module entry, where the first index indicates the row and the second the column @item module_expressions @code{[} int_expression @code{]} is a vector, where the index indicates the column @end table @*@strong{Example:} @smallexample @c reused example module_operations types.doc:2514 ring r=0,(x,y,z),dp; module m=[x,y],[0,0,z]; print(m*(x+y)); @expansion{} x2+xy,0, @expansion{} xy+y2,0, @expansion{} 0, xz+yz @c end example module_operations types.doc:2514 @end smallexample @c ------------------------------ @node module related functions, , module operations, module @subsection module related functions @cindex module related functions @table @code @item coeffs matrix of coefficients (see @ref{coeffs}) @item degree multiplicity, dimension and codimension of the module of leading terms (see @ref{degree}) @item diff partial derivative (see @ref{diff}) @item dim Krull dimension of free module over the basering modulo the module of leading terms (see @ref{dim}) @item eliminate elimination of variables (see @ref{eliminate}) @item freemodule the free module of given rank (see @ref{freemodule}) @item groebner Groebner basis computation (a wrapper around @code{std,stdhilb,stdfglm},...) (see @ref{groebner}) @item hilb Hilbert function of a standard basis (see @ref{hilb}) @item homog homogenization with respect to a variable (see @ref{homog}) @item interred interreduction of a module (see @ref{interred}) @item intersect module intersection (see @ref{intersect}) @item jet Taylor series up to a given order (see @ref{jet}) @item kbase vector space basis of free module over the basering modulo the module of leading terms (see @ref{kbase}) @item lead initial module (see @ref{lead}) @item lift lift-matrix (see @ref{lift}) @item liftstd standard basis and transformation matrix computation (see @ref{liftstd}) @item lres free resolution (see @ref{lres}) @item minbase minimal generating set of a homogeneous ideal, resp.@: module, or an ideal, resp.@: module, over a local ring @item modulo represents @tex $(h1+h2)/h1=h2/(h1 \cap h2)$ @end tex @ifinfo (h1+h2)/h1=h2/(h1 intersect h2) @end ifinfo (see @ref{modulo}) @item mres minimal free resolution of an ideal resp.@: module w.r.t. a minimal set of generators of the given module (see @ref{mres}) @item mult multiplicity, resp.@: degree, of the module of leading terms (see @ref{mult}) @item ncols number of columns (see @ref{ncols}) @item nrows number of rows (see @ref{nrows}) @item print nice print format (see @ref{print}) @item prune minimize the embedding into a free module (see @ref{prune}) @item qhweight quasihomogeneous weights of an ideal, resp.@: module (see @ref{qhweight}) @item quotient module quotient (see @ref{quotient}) @item reduce normalform with respect to a standard basis (see @ref{reduce}) @item res free resolution of an ideal, resp.@: module, but not changing the given ideal, resp.@: module (see @ref{res}) @item simplify simplify a set of vectors (see @ref{simplify}) @item size number of non-zero generators (see @ref{size}) @item sortvec permutation for sorting ideals/modules (see @ref{sortvec}) @item sres free resolution of a standard basis (see @ref{sres}) @item std standard basis computation (see @ref{std}, @ref{liftstd}) @item subst substitute a ring variable (see @ref{subst}) @item syz computation of the first syzygy module (see @ref{syz}) @item vdim vector space dimension of free module over the basering modulo module of leading terms (see @ref{vdim}) @item weight "optimal" weights (see @ref{weight}) @end table @c @*@strong{Example:} @c @example @c @end example @c --------------------------------------- @ifset namespaces @node number, package, module, Data types @end ifset @ifclear namespaces @node number, poly, module, Data types @end ifclear @section number @cindex number @cindex coefficient field @cindex ground field @cindex field @cindex galois field @cindex finite field @cindex parameter, as numbers Numbers are elements from the coefficient field (or ground field). They can only be defined or accessed with respect to a basering which determines the coefficient field. See @ref{ring declarations} for declarations of coefficient fields. @strong{Warning:} Beware of the special meaning of the letter @code{e} (immediately following a sequence of digits) if the field is real (or complex). See @ref{number operations}, @ref{Miscellaneous oddities}. @menu * number declarations:: * number expressions:: * number operations:: * number related functions:: @end menu @c ------------------------------ @node number declarations, number expressions, number, number @subsection number declarations @cindex number declarations @table @strong @item Syntax: @code{number} name @code{=} number_expression @code{;} @item Purpose: defines a number. @item Default: 0 @item Note: Numbers may only be declared w.r.t. the coefficient field of the current basering, i.e., a ring has to be defined prior to any number declaration. See @ref{Rings and orderings} for a list of the available coefficient fields. @item Example: @smallexample @c reused example number_declarations types.doc:2677 // finite field Z/p, p<= 32003 ring r = 32003,(x,y,z),dp; number n = 4/6; n; @expansion{} -10667 // finite field GF(p^n), p^n <= 32767 // z is a primitive root of the minimal polynomial ring rg= (7^2,z),x,dp; number n = 4/9+z; n; @expansion{} z11 // the rational numbers ring r0 = 0,x,dp; number n = 4/6; n; @expansion{} 2/3 // algebraic extensions of Z/p or Q ring ra=(0,a),x,dp; minpoly=a^2+1; number n=a3+a2+2a-1; n; @expansion{} (a-2) a^2; @expansion{} -1 // transcedental extensions of Z/p or Q ring rt=(0,a),x,dp; number n=a3+a2+2a-1; n; @expansion{} (a3+a2+2a-1) a^2; @expansion{} (a2) // machine floating point numbers, single precision ring R_0=real,x,dp; number n=4/6; n; @expansion{} 6.667e-01 n=0.25e+2; n; @expansion{} 2.500e+01 // floating point numbers, arbitrary prescribed precision ring R_1=(real,50),x,dp; number n=4.0/6; n; @expansion{} 0.66666666666666666666666666666666666666666666666667 n=0.25e+2; n; @expansion{} 25 // floating point complex numbers, arbitrary prescribed precision // the third parameter gives the name of the imaginary unit ring R_2=(complex,50,i),x,dp; number n=4.0/6; n; @expansion{} 0.66666666666666666666666666666666666666666666666667 n=0.25e+2*i+n; n; @expansion{} (0.66666666666666666666666666666666666666666666666667+i*25) @c end example number_declarations types.doc:2677 @end smallexample @end table @c ------------------------------ @node number expressions, number operations, number declarations, number @subsection number expressions @cindex number expressions A number expression is: @enumerate @item a rational number (there are NO spaces allowed inside a rational number, see @ref{int expressions}) @item a floating point number (if the coefficient field is @code{real}): @*@code{.}@code{e} @item an identifier of type number @item a function returning number @item an int expression (see @ref{Type conversion and casting}) @item number expressions combined by the arithmetic operations @code{+}, @code{-}, @code{*}, @code{/}, @code{^}, or @code{**}. @item a type cast to number @end enumerate @*@strong{Example:} @smallexample @c reused example number_expressions types.doc:2753 // the following expressions are in any ring int expressions 2 / 3; @expansion{} 0 4/ 8; @expansion{} 0 2 /2; // the notation of / for div might change in the future @expansion{} 1 ring r0=0,x,dp; 2/3, 4/8, 2/2 ; // are numbers @expansion{} 2/3 1/2 1 poly f = 2x2 +1; leadcoef(f); @expansion{} 2 typeof(_); @expansion{} number ring rr =real,x,dp; 1.7e-2; 1.7e+2; // are valid (but 1.7e2 not), if the field is `real` @expansion{} 1.700e-02 @expansion{} 1.700e+02 ring rp = (31,t),x,dp; 2/3, 4/8, 2/2 ; // are numbers @expansion{} 11 -15 1 poly g = (3t2 +1)*x2 +1; leadcoef(g); @expansion{} (3t2+1) typeof(_); @expansion{} number par(1); @expansion{} (t) typeof(_); @expansion{} number @c end example number_expressions types.doc:2753 @end smallexample @c inserted refs from types.doc:2775 @ifinfo @menu See * Type conversion and casting:: * ring:: @end menu @end ifinfo @iftex See @ref{Type conversion and casting}; @ref{ring}. @end iftex @c end inserted refs from types.doc:2775 @c ------------------------------ @node number operations, number related functions, number expressions, number @subsection number operations @cindex number operations @cindex mod @table @asis @item @code{+} addition @item @code{-} negation or subtraction @item @code{*} multiplication @item @code{/} division @item @code{^}, @code{**} power, exponentiation (by an integer) @item @code{<=, >=, ==, <>} comparison @item @code{mod} integer modulo (the remainder of the division @code{div}), always non-negative @end table @strong{Note:} quotient and exponentiation is only recognized as a number expression if it is already a number, see @ref{Miscellaneous oddities}. @* For the behavior of comparison operators in rings with ground field different from real or the rational numbers, see @ref{boolean expressions}. @*@strong{Example:} @smallexample @c reused example number_operations types.doc:2813 ring r=0,x,dp; number n = 1/2 +1/3; n; @expansion{} 5/6 n/2; @expansion{} 5/12 1/2/3; @expansion{} 1/6 1/2 * 1/3; @expansion{} 1/6 n = 2; n^-2; @expansion{} 1/4 // the following oddities appear here 2/(2+3); @expansion{} 0 number(2)/(2+3); @expansion{} 2/5 2^-2; // for int's exponent must be non-negative @expansion{} ? exponent must be non-negative @expansion{} ? error occurred in line 12: ` 2^-2; // for int's exponent must be no\ n-negative` number(2)^-2; @expansion{} 1/4 3/4>=2/5; @expansion{} 1 2/6==1/3; @expansion{} 1 @c end example number_operations types.doc:2813 @end smallexample @c ------------------------------ @node number related functions, , number operations, number @subsection number related functions @cindex number related functions @table @code @item cleardenom cancel denominators of numbers in poly and divide it by its content (see @ref{cleardenom}) @item impart imaginary part of a complex number, 0 otherwise (see @ref{impart}, @ref{repart}) @item numerator, denominator return the numerator/denominator of a rational number (see @ref{numerator}, @ref{denominator}) @item leadcoef coefficient of the leading term (see @ref{leadcoef}) @item par n-th parameter of the basering (see @ref{par}) @item pardeg degree of a number in ring parameters (see @ref{pardeg}) @item parstr string form of ring parameters (see @ref{parstr}) @item repart real part of a complex number (see @ref{impart}, @ref{repart}) @end table @c --------------------------------------- @ifset namespaces @node package, poly, number, Data types @section package @cindex package @cindex :: Package are a collection of identifier. The set of all identifier is called toplevel package: @code{Top}. Other reserved package names are @code{Current} with denotes the current package name in use, and @code{Up} which will be the current package when leave the current one. @ref{Libraries}, @ref{Namespaces}. @c * package expressions:: @c * package operations:: @menu * package declarations:: * package related functions:: @end menu @c ------------------------------ @node package declarations, package related functions, package, package @subsection package declarations @cindex package declarations @table @strong @item Syntax: @code{package} name @code{;} @item Purpose: defines a package @item Example: @smallexample @c reused example package_declarations types.doc:2894 package Test; int Test::i; @expansion{} ? package is not supported in this version @expansion{} ? object to declare is not a name @expansion{} ? error occurred in line 2: ` int Test::i;` @expansion{} ? wrong type declaration. type 'help int;' listvar(); @expansion{} // Test [0] package (N) @expansion{} // LIB [0] string standard.lib listvar(Test); @expansion{} // Test [0] package (N) package dummy = Test; kill Test; @expansion{} // ** unknown type to kill: package(452) listvar(dummy); @expansion{} // dummy [0] package (N) @c end example package_declarations types.doc:2894 @end smallexample @end table @c ------------------------------ @node package related functions, , package declarations, package @subsection package related functions @cindex package related functions @table @code @item exportto (see @ref{exportto}) @item importfrom (see @ref{importfrom}) @item listvar (see @ref{listvar}) @item names (see @ref{names}) @item load (see @ref{load}) @item LIB (see @ref{LIB}) @item system @code{system("nsstack")} @code{system("nspop")} @code{system("nspush",}package @code{)} (see @ref{system}) @end table @end ifset @c --------------------------------------- @ifset namespaces @node poly, proc, package, Data types @end ifset @ifclear namespaces @node poly, proc, number, Data types @end ifclear @section poly @cindex poly Polynomials are the basic data for all main algorithms in @code{@sc{Singular}}. They consist of finitely many terms (coefficient*power product) which are combined by the usual polynomial operations (see @ref{poly expressions}). Polynomials can only be defined or accessed with respect to a basering which determines the coefficient type, the names of the indeterminates and the monomial ordering. @smallexample @c reused example poly types.doc:2950 ring r=32003,(x,y,z),dp; poly f=x3+y5+z2; @c end example poly types.doc:2950 @end smallexample @menu * poly declarations:: * poly expressions:: * poly operations:: * poly related functions:: @end menu @c ------------------------------ @node poly declarations, poly expressions, poly, poly @subsection poly declarations @cindex poly declarations @table @strong @item Syntax: @code{poly} name @code{=} poly_expression @code{;} @item Purpose: defines a polynomial. @item Default: 0 @item Example: @smallexample @c reused example poly_declarations types.doc:2980 ring r = 32003,(x,y,z),dp; poly s1 = x3y2+151x5y+186xy6+169y9; poly s2 = 1*x^2*y^2*z^2+3z8; poly s3 = 5/4x4y2+4/5*x*y^5+2x2y2z3+y7+11x10; int a,b,c,t=37,5,4,1; poly f=3*x^a+x*y^(b+c)+t*x^a*y^b*z^c; f; @expansion{} x37y5z4+3x37+xy9 short = 0; f; @expansion{} x^37*y^5*z^4+3*x^37+x*y^9 @c end example poly_declarations types.doc:2980 @end smallexample @end table @c inserted refs from types.doc:2993 @ifinfo @menu See also: * short:: @end menu @end ifinfo @iftex @strong{See also:} @ref{short}. @end iftex @c end inserted refs from types.doc:2993 @c ------------------------------ @node poly expressions, poly operations, poly declarations, poly @subsection poly expressions @cindex poly expressions A poly expression is (optional parts in square brackets): @enumerate @item a monomial (there are NO spaces allowed inside a monomial) @smallexample [coefficient] ring_variable [ exponent] [ring_variable [exponent] @dots{}] @end smallexample monomials which contain an indexed ring variable must be built from @code{ring_variable} and @code{coefficient} with the operations @code{*} and @code{^} @item an identifier of type poly @item a function returning poly @item poly expressions combined by the arithmetic operations @code{+}, @code{-}, @code{*}, @code{/}, or @code{^} @item an int expression (see @ref{Type conversion and casting}) @item a type cast to poly @end enumerate @*@strong{Example:} @smallexample 2x, x3, 2x2y3, xyz, 2xy2; // are monomials 2*x, x^3, 2*x^2*y^3, x*y*z, 2*x*y^2; // are poly expressions 2*x(1); // is a valid poly expression, but not 2x(1) (a syntax error) 2*x^3; // is a valid poly expression equal to 2x3 (a valid monomial) // but not equal to 2x^3 which will be interpreted as (2x)^3 // since 2x is a monomial @c reused example poly_expressions types.doc:3032 ring r=0,(x,y),dp; poly f = 10x2y3 +2x2y2-2xy+y -x+2; lead(f); @expansion{} 10x2y3 leadmonom(f); @expansion{} x2y3 simplify(f,1); // normalize leading coefficient @expansion{} x2y3+1/5x2y2-1/5xy-1/10x+1/10y+1/5 poly g = 1/2x2 + 1/3y; cleardenom(g); @expansion{} 3x2+2y int i = 102; poly(i); @expansion{} 102 typeof(_); @expansion{} poly @c end example poly_expressions types.doc:3032 @end smallexample @c inserted refs from types.doc:3046 @ifinfo @menu See * Type conversion and casting:: * ring:: @end menu @end ifinfo @iftex See @ref{Type conversion and casting}; @ref{ring}. @end iftex @c end inserted refs from types.doc:3046 @c ------------------------------ @node poly operations, poly related functions, poly expressions, poly @subsection poly operations @cindex poly operations @table @asis @item @code{+} addition @item @code{-} negation or subtraction @item @code{*} multiplication @item @code{/} division by a polynomial, ignoring the rest @item @code{^}, @code{**} power by an integer @item @code{<}, @code{<=}, @code{>}, @code{>=}, @code{==}, @code{<>} comparison (w.r.t. monomial ordering) @item poly_expression @code{[} intvec_expression @code{]} the monomial at the indicated place w.r.t.@: the monomial ordering @end table @*@strong{Example:} @smallexample @c reused example poly_operations types.doc:3080 ring R=0,(x,y),dp; poly f = x3y2 + 2x2y2 + xy - x + y + 1; f; @expansion{} x3y2+2x2y2+xy-x+y+1 f + x5 + 2; @expansion{} x5+x3y2+2x2y2+xy-x+y+3 f * x2; @expansion{} x5y2+2x4y2+x3y-x3+x2y+x2 (x+y)/x; @expansion{} 1 f/3x2; @expansion{} 1/3xy2+2/3y2 x5 > f; @expansion{} 1 x<=y; @expansion{} 0 x>y; @expansion{} 1 ring r=0,(x,y),ds; poly f = fetch(R,f); f; @expansion{} 1-x+y+xy+2x2y2+x3y2 x5 > f; @expansion{} 0 f[2..4]; @expansion{} -x+y+xy size(f); @expansion{} 6 f[size(f)+1]; f[-1]; // monomials out of range are 0 @expansion{} 0 @expansion{} 0 intvec v = 6,1,3; f[v]; // the polynom built from the 1st, 3rd and 6th monomial of f @expansion{} 1+y+x3y2 @c end example poly_operations types.doc:3080 @end smallexample @c ------------------------------ @node poly related functions, , poly operations, poly @subsection poly related functions @cindex poly related functions @table @code @item cleardenom cancel denominators of numbers in poly and divide it by its content (see @ref{cleardenom}) @item coef matrix of coefficients and monomials (see @ref{coef}) @item coeffs matrix of coefficients (see @ref{coeffs}) @item deg degree (see @ref{deg}) @item det determinant (see @ref{det}) @item diff partial derivative (see @ref{diff}) @item extgcd Bezout representation of gcd (see @ref{extgcd}) @item factorize factorize polynomial (see @ref{factorize}) @item finduni find univariate polynomials in a zero-dimensional ideal (see @ref{finduni}) @item gcd greatest common divisor (see @ref{gcd}) @item homog homogenization (see @ref{homog}) @item jacob ideal, resp.@: matrix, of all partial derivatives (see @ref{jacob}) @item lead leading term (see @ref{lead}) @item leadcoef coefficient of the leading term (see @ref{leadcoef}) @item leadexp the exponent vector of the leading monomial (see @ref{leadexp}) @item leadmonom leading monomial (see @ref{leadmonom}) @item jet monomials with degree smaller k+1 (see @ref{jet}) @item ord degree of the leading monomial (see @ref{ord}) @item qhweight quasihomogeneous weights (see @ref{qhweight}) @item reduce normal form with respect to a standard base (see @ref{reduce}) @item rvar test for ring variable (see @ref{rvar}) @item simplify normalize a polynomial (see @ref{simplify}) @item size number of monomials (see @ref{size}) @item subst substitute a ring variable (see @ref{subst}) @item trace trace of a matrix (see @ref{trace}) @item var the indicated variable of the ring (see @ref{var}) @item varstr variable in string form (see @ref{varstr}) @end table @c @*@strong{Example:} @c @example @c @end example @c --------------------------------------- @node proc, qring, poly, Data types @section proc @cindex proc Procedures are sequences of @sc{Singular} commands in a special format. They are used to extend the set of @sc{Singular} commands with user defined commands. Once a procedure is defined it can be used as any other @sc{Singular} command. Procedures may be defined by either typing them on the command line or by loading them from a file. For a detailed description on the concept of procedures in @sc{Singular} see @ref{Procedures}. A file containing procedure definitions which comply with certain syntax rules is called a library. Such a file is loaded using the command @code{LIB}. For more information on libraries see @ref{Libraries}. @menu * proc declaration:: @end menu @c --------------------------------------- @node proc declaration, , proc, proc @subsection proc declaration @cindex proc declaration @c ------------------------------------------------------------ @c This piece of text exists also in the file general.doc, @c chapter "Proc in a library". @c If you change something here, change it there, too! @c ------------------------------------------------------------ @table @strong @item Syntax: [@code{static}] @code{proc} proc_name [parameter_list] @*["help_text"] @*@code{@{} @* @tex \quad @end tex procedure_body @*@code{@}} @*[@code{example} @*@code{@{} @* @tex \quad @end tex sequence_of_commands; @*@code{@}}] @*@code{proc} proc_name @code{=} proc_name @code{;} @*@code{proc} proc_name @code{=} string_expression @code{;} @item Purpose: defines a new function, the @code{proc} proc_name, with the additional information help_text, which is copied to the screen by @code{help proc_name;} and the @code{example} section which is executed by @code{example proc_name;}. @* The help_text, the parameter_list, and the example section are optional. The default for a parameter_list is @code{(list #)}, see @ref{Parameter list}. The help and example sections are ignored if the procedure is defined interactively, i.e., if it was not loaded from a file by a @ref{LIB} command. @* Specifying @code{static} in front of the proc-definition is only possible in a library file and makes this procedure local to the library, i.e., accessible only for the other procedures in the same library, but not for the users. @item Example: @smallexample @c reused example proc_declaration types.doc:3237 proc milnor_number (poly p) @{ ideal i= std(jacob(p)); int m_nr=vdim(i); if (m_nr<0) @{ "// not an isolated singularity"; @} return(m_nr); // the value of m_nr is returned @} ring r1=0,(x,y,z),ds; poly p=x^2+y^2+z^5; milnor_number(p); @expansion{} 4 @c end example proc_declaration types.doc:3237 @end smallexample @end table @c inserted refs from types.doc:3254 @ifinfo @menu See * LIB:: * Libraries:: * Procedures:: @end menu @end ifinfo @iftex See @ref{LIB}; @ref{Libraries}; @ref{Procedures}. @end iftex @c end inserted refs from types.doc:3254 @c --------------------------------------- @node qring, resolution, proc, Data types @section qring @cindex qring @sc{Singular} offers the opportunity to calculate in quotient rings (factor rings), i.e., rings modulo an ideal. The ideal has to be given as a standard basis. For a detailed description of the concept of rings and quotient rings see @ref{Rings and orderings}. @menu * qring declaration:: @end menu @c --------------------------------------- @node qring declaration, , qring, qring @subsection qring declaration @cindex qring declaration @c ------------------------------------------------------------ @c This piece of text exists also in the file general.doc, @c chapter "General syntax of a ring declaration". @c If you change something here, change it there, too! @c ------------------------------------------------------------ @table @strong @item Syntax: @code{qring} name @code{=} ideal_expression @code{;} @item Default: none @item Purpose: declares a quotient ring as the basering modulo ideal_expression. Sets it as current basering. @item Example: @smallexample @c reused example qring_declaration types.doc:3297 ring r=0,(x,y,z),dp; ideal i=xy; qring q=std(i); basering; @expansion{} // characteristic : 0 @expansion{} // number of vars : 3 @expansion{} // block 1 : ordering dp @expansion{} // : names x y z @expansion{} // block 2 : ordering C @expansion{} // quotient ring from ideal @expansion{} _[1]=xy @c end example qring_declaration types.doc:3297 @end smallexample @end table @c --------------------------------------- @node resolution, ring, qring, Data types @section resolution @cindex resolution The resolution type is intended as an intermediate representation which internally retains additional information obtained during computation of resolutions. It furthermore enables the use of partial results to compute, for example, Betti numbers or minimal resolutions. Like ideals and modules, a resolution can only be defined w.r.t.@: a basering. @strong{Note:} to access the elements of a resolution, it has to be assigned to a list, which also completes computations and may therefore take time, (resp.@: an access directly with the brackets @code{[ , ]} causes implicitly a cast to a list). @menu * resolution declarations:: * resolution expressions:: * resolution related functions:: @end menu @c --------------------------------------- @node resolution declarations, resolution expressions, resolution, resolution @subsection resolution declarations @cindex resolution declarations @table @strong @item Syntax: @code{resolution} name @code{=} resolution_expression @code{;} @item Purpose: defines a resolution. @item Default: none @item Example: @smallexample @c reused example resolution_declarations types.doc:3346 ring R; ideal i=z2,x; resolution re=res(i,0); re; @expansion{} 1 2 1 @expansion{} R <-- R <-- R @expansion{} @expansion{} 0 1 2 @expansion{} resolution not minimized yet @expansion{} betti(re); @expansion{} 1,1,0, @expansion{} 0,1,1 list l = re; l; @expansion{} [1]: @expansion{} _[1]=x @expansion{} _[2]=z2 @expansion{} [2]: @expansion{} _[1]=-z2*gen(1)+x*gen(2) @expansion{} [3]: @expansion{} _[1]=0 @c end example resolution_declarations types.doc:3346 @end smallexample @end table @c ------------------------------ @node resolution expressions, resolution related functions, resolution declarations, resolution @subsection resolution expressions @cindex resolution expressions A resolution expression is: @enumerate @item an identifier of type resolution @item a function returning a resolution @item a type cast to resolution from a list of ideals, resp.@: modules.. @end enumerate @c inserted refs from types.doc:3373 @ifinfo @menu See * Type conversion and casting:: @end menu @end ifinfo @iftex See @ref{Type conversion and casting}. @end iftex @c end inserted refs from types.doc:3373 @c ------------------------------ @node resolution related functions, , resolution expressions, resolution @subsection resolution related functions @cindex resolution related functions @table @code @item betti Betti numbers of a resolution (see @ref{betti}) @item lres free resolution (see @ref{lres}) @item minres minimize a free resolution (see @ref{minres}) @item mres minimal free resolution of an ideal, resp.@: module w.r.t. a minimal set of generators of the given ideal, resp.@: module (see @ref{mres}) @item res free resolution of an ideal, resp.@: module, but not changing the given ideal, resp.@: module (see @ref{res}) @item sres free resolution of a standard basis (see @ref{sres}) @end table @c @*@strong{Example:} @c @example @c @end example @c --------------------------------------- @node ring, string, resolution, Data types @section ring @cindex ring Rings are used to describe properties of polynomials, ideals etc. Almost all computations in @sc{Singular} require a basering. For a detailed description of the concept of rings see @ref{Rings and orderings}. @menu * ring declarations:: * ring related functions:: * ring operations:: @end menu @c --------------------------------------- @node ring declarations, ring related functions, ring, ring @subsection ring declarations @cindex ring declarations @table @strong @item Syntax: @code{ring} name @code{= (} coefficient_field @code{),} @code{(} names_of_ring_variables @code{),} @code{(} ordering @code{);} @item Default: @code{32003,(x,y,z),(dp,C);} @item Purpose: declares a ring and sets it as the actual basering. @end table The coefficient_field is given by one of the following: @enumerate @item a non-negative int_expression less or equal 2147483629. @item an expression_list of an int_expression and one or more names. @item the name @code{real} @item an expression_list of the name @code{real} and an int_expression. @item an expression_list of the name @code{complex}, an optional int_expression and a name. @end enumerate For the definition of the 'coefficient_field', see @ref{Rings and orderings}. 'names_of_ring_variables' must be a list of names or indexed names. 'ordering' is a list of block orderings where each block ordering is either @enumerate @item @code{lp}, @code{dp}, @code{Dp}, @code{ls}, @code{ds}, or @code{Ds} optionally followed by a size parameter in parentheses. @item @code{wp}, @code{Wp}, @code{ws}, @code{Ws}, or @code{a} followed by a weight vector given as an intvec_expression in parentheses. @item @code{M} followed by an intmat_expression in parentheses. @item @code{c} or @code{C}. @end enumerate For the definition of the orderings, see @ref{Term orderings}, @ref{Monomial orderings}. If one of coefficient_field, names_of_ring_variables, and ordering consists of only one entry, the parentheses around this entry may be omitted. @c --------------------------------------- @node ring related functions, ring operations, ring declarations, ring @subsection ring related functions @cindex ring related functions @table @code @item charstr description of the coefficient field of a ring (see @ref{charstr}) @item keepring move ring to next upper level (see @ref{keepring}) @item npars number of ring parameters (see @ref{npars}) @item nvars number of ring variables (see @ref{nvars}) @item ordstr monomial ordering of a ring (see @ref{ordstr}) @item parstr names of all ring parameters or the name of the n-th ring parameter (see @ref{parstr}) @item qring quotient ring (see @ref{qring}) @item setring set a new basering (see @ref{setring}) @item varstr names of all ring variables or the name of the n-th ring variable (see @ref{varstr}) @end table @c --------------------------------------- @node ring operations, , ring related functions, ring @subsection ring operations @cindex ring operations @table @asis @item @code{+} construct a new ring @ifinfo @math{k[X,Y]} @end ifinfo @tex $k[X,Y]$ @end tex from @ifinfo @math{k_1[X]} @end ifinfo @tex $k_1[X]$ @end tex and @ifinfo @math{k_2[Y]} @end ifinfo @tex $k_2[Y]$ @end tex . @end table Concerning the ground fields @ifinfo @math{k_1} @end ifinfo @tex $k_1$ @end tex and @ifinfo @math{k_2} @end ifinfo @tex $k_2$ @end tex take the following guide lines into consideration: @itemize @bullet @item Neither @ifinfo @math{k_1} @end ifinfo @tex $k_1$ @end tex nor @ifinfo @math{k_2} @end ifinfo @tex $k_2$ @end tex may be @ifinfo @math{R} @end ifinfo @tex $R$ @end tex or @ifinfo @math{C} @end ifinfo @tex $C$ @end tex . @item If the characteristic of @ifinfo @math{k_1} @end ifinfo @tex $k_1$ @end tex and @ifinfo @math{k_2} @end ifinfo @tex $k_2$ @end tex differs, then one of them must be @ifinfo @math{Q} @end ifinfo @tex $Q$ @end tex . @item At most one of @ifinfo @math{k_1} @end ifinfo @tex $k_1$ @end tex and @ifinfo @math{k_2} @end ifinfo @tex $k_2$ @end tex may be have parameters. @item If one of @ifinfo @math{k_1} @end ifinfo @tex $k_1$ @end tex and @ifinfo @math{k_2} @end ifinfo @tex $k_2$ @end tex is an algebraic extension of @ifinfo @math{Z/p} @end ifinfo @tex $Z/p$ @end tex it may not be defined by a @code{charstr} of type @code{(p^n,a)}. @end itemize @strong{Example:} @smallexample @c reused example ring_operations types.doc:3527 ring R1=0,(x,y),dp; ring R2=32003,(a,b),dp; def R=R1+R2; R; @expansion{} // characteristic : 32003 @expansion{} // number of vars : 4 @expansion{} // block 1 : ordering dp @expansion{} // : names x y @expansion{} // block 2 : ordering dp @expansion{} // : names a b @expansion{} // block 3 : ordering C @c end example ring_operations types.doc:3527 @end smallexample @c inserted refs from types.doc:3535 @ifinfo @menu See also: * ring_lib:: @end menu @end ifinfo @iftex @strong{See also:} @ref{ring_lib}. @end iftex @c end inserted refs from types.doc:3535 @c --------------------------------------- @node string, vector, ring, Data types @section string @cindex string @cindex newline Variables of type @code{string} are used for output (almost every type can be "converted" to @code{string}) and for creating new commands at runtime see @ref{execute}. They are also return values of certain interpreter related functions (see @ref{Functions}). String constants consist of a sequence of ANY characters (including newline!) between a starting @code{"} and a closing @code{"}. There is also a string constant @code{newline}, which is the newline character. The @code{+} sign "adds" strings, @code{""} is the empty string (hence strings form a semigroup). Strings may be used to comment the output of a computation or to give it a nice format. Strings may also be used for intermediate conversion of one type into another. @smallexample @c reused example string types.doc:3558 string s="Hi"; string s1="a string with new line at the end"+newline; string s2="another string with new line at the end "; s;s1;s2; @expansion{} Hi @expansion{} a string with new line at the end @expansion{} @expansion{} another string with new line at the end @expansion{} ring r; ideal i=std(ideal(x,y^3)); "dimension of i =",dim(i),", multiplicity of i =",mult(i); @expansion{} dimension of i = 1 , multiplicity of i = 3 "dimension of i = "+string(dim(i))+", multiplicity of i = "+string(mult(i)); @expansion{} dimension of i = 1, multiplicity of i = 3 "a"+"b","c"; @expansion{} ab c @c end example string types.doc:3558 @end smallexample A comma between two strings makes an expression list out of them (such a list is printed with a separating blank in between), while a @code{+} concatenates strings. @menu * string declarations:: * string expressions:: * string type cast:: * string operations:: * string related functions:: @end menu @c ------------------------------ @node string declarations, string expressions, string, string @subsection string declarations @cindex string declarations @table @strong @item Syntax: @code{string} name @code{=} string_expression @code{;} @*@code{string} name @code{=} list_of_string_expressions @code{;} @item Purpose: defines a string variable. @item Default: "" (the empty string) @item Example: @smallexample @c reused example string_declarations types.doc:3600 string s1="Now I know"; string s2="how to encode a \" in a string..."; string s=s1+" "+s2; // concatenation of 3 strings s; @expansion{} Now I know how to encode a " in a string... s1,s2; // 2 strings, separated by a blank in the output: @expansion{} Now I know how to encode a " in a string... @c end example string_declarations types.doc:3600 @end smallexample @end table @c ------------------------------ @node string expressions, string type cast, string declarations, string @subsection string expressions @cindex string expressions A string expression is: @enumerate @item a sequence of characters between two unescaped quotes (@code{"}) @item an identifier of type string @item a function returning string @item a substring (using the bracket operator) @item a type cast to string (@pxref{string type cast}) @item string expressions combined by the operation @code{+}. @end enumerate @*@strong{Example:} @smallexample @c // a string constant @c "@dots{}"; @c // a type cast from name @c string(name) @c // concatenation @c string_expression + string_expression @c reused example string_expressions types.doc:3639 // string_expression[start, length] : a substring // (possibly filled up with blanks) // the substring of s starting at position 2 // with a length of 4 string s="123456"; s[2,4]; @expansion{} 2345 "abcd"[2,2]; @expansion{} bc // string_expression[position] : a character from a string s[3]; @expansion{} 3 // string_expression[position..position] : // a substring starting at the first position up to the second // given position s[2..4]; @expansion{} 2 3 4 // a function returning a string typeof(s); @expansion{} string @c end example string_expressions types.doc:3639 @end smallexample @c inserted refs from types.doc:3658 @ifinfo @menu See * Type conversion and casting:: * string type cast:: @end menu @end ifinfo @iftex See @ref{Type conversion and casting}; @ref{string type cast}. @end iftex @c end inserted refs from types.doc:3658 @c ------------------------------ @node string type cast, string operations, string expressions, string @subsection string type cast @cindex string type cast @table @code @item @strong{Syntax:} @code{string (} expression [, expression_2, ... expression_n]@code{)} @item @strong{Type:} string @item @strong{Purpose:} Converts each expression to a string, where expression can be of any type. The concatenated string of all concersions is returned. @*The elements of intvec, intmat, ideal, module, matrix, and list, are separated by a comma. No newlines are inserted. @*Not defined elements of a list are omitted. @*For link, the name of the link is used. @*For map, the ideal defining the mapping is converted. @item @strong{Note:} When applied to a list, elements of type intvec, intmat, ideal, module, matrix, and list become indistinguishable. @item @strong{Example:} @smallexample @c reused example string_type_cast types.doc:3688 string("1+1=", 2); @expansion{} 1+1=2 string(intvec(1,2,3,4)); @expansion{} 1,2,3,4 string(intmat(intvec(1,2,3,4), 2, 2)); @expansion{} 1,2,3,4 ring r; string(r); @expansion{} (32003),(x,y,z),(dp(3),C) string(ideal(x,y)); @expansion{} x,y qring R = std(ideal(x,y)); string(R); @expansion{} (32003),(x,y,z),(dp(3),C) map phi = r, ideal(x,z); string(phi); @expansion{} x,z list l; string(l); @expansion{} l[3] = 1; string(l); // notice that l[1],l[2] are omitted @expansion{} 1 l[2] = l; l; @expansion{} [2]: @expansion{} [3]: @expansion{} 1 @expansion{} [3]: @expansion{} 1 string(l); // notice that lists of list is flattened @expansion{} 1,1 l[1] = intvec(1,2,3); l; @expansion{} [1]: @expansion{} 1,2,3 @expansion{} [2]: @expansion{} [3]: @expansion{} 1 @expansion{} [3]: @expansion{} 1 string(l); // notice that intvec elements are not distinguishable @expansion{} 1,2,3,1,1 @c end example string_type_cast types.doc:3688 @end smallexample @end table @c inserted refs from types.doc:3712 @ifinfo @menu See * Type conversion and casting:: * print:: * string:: @end menu @end ifinfo @iftex See @ref{Type conversion and casting}; @ref{print}; @ref{string}. @end iftex @c end inserted refs from types.doc:3712 @c ------------------------------ @node string operations, string related functions, string type cast, string @subsection string operations @cindex string operations @table @asis @item @code{+} concatenation @item @code{<=}, @code{>=}, @code{==}, @code{<>} comparison (lexicographical with respect to the ASCII encoding) @item string_expression @code{[} int_expression @code{]} is a character of the string; the index 1 gives the first character. @item string_expression @code{[} int_expression@code{,} int_expression @code{]} is a substring, where the first argument is the start index and the second is the length of the substring, filled up with blanks if the length exceeds the total size of the string @item string_expression @code{[} intvec_expression @code{]} is a expression list of characters from the string @end table @*@strong{Example:} @smallexample @c reused example string_operations types.doc:3745 string s="abcde"; s[2]; @expansion{} b s[3,2]; @expansion{} cd ">>"+s[1,10]+"<<"; @expansion{} >>abcde << s[2]="BC"; s; @expansion{} aBcde intvec v=1,3,5; s=s[v]; s; @expansion{} ace s="123456"; s=s[3..5]; s; @expansion{} 345 @c end example string_operations types.doc:3745 @end smallexample @c ------------------------------ @node string related functions, , string operations, string @subsection string related functions @cindex string related functions @table @code @item charstr description of the coefficient field of a ring (see @ref{charstr}) @item execute executing string as command (see @ref{execute}) @item find position of a substring in a string (see @ref{find}) @item names list of strings of all user-defined variable names (see @ref{names}) @item nameof name of an object (see @ref{nameof}) @item option lists all defined options (see @ref{option}) @item ordstr monomial ordering of a ring (see @ref{ordstr}) @item parstr names of all ring parameters or the name of the n-th ring parameter (see @ref{parstr}) @item read read a file (see @ref{read}) @item size length of a string (see @ref{size}) @item sprintf string formatting (see @ref{sprintf}) @item typeof type of an object (see @ref{typeof}) @item varstr names of all ring variables or the name of the n-th ring variable (see @ref{varstr}) @end table @c @*@strong{Example:} @c @example @c @end example @c --------------------------------------- @node vector, , string, Data types @section vector @cindex vector Vectors are elements of a free module over the basering with basis @code{gen(1)}, @code{gen(2)}, @dots{} . Each vector belongs to a free module of rank equal to the biggest index of a generator with non-zero coefficient. Since generators with zero coefficients need not be written any vector may be considered also as an element of a free module of higher rank. Like polynomials they can only be defined or accessed with respect to the basering. (E.g., if @code{f} and @code{g} are polynomials then @code{f*gen(1)+g*gen(3)+gen(4)} may also be written as @code{[f,0,g,1]} or as @code{[f,0,g,1,0]}.) Note that the elements of a vector have to be surrounded by square brackets (@code{[} , @code{]}) (cf. @ref{Representation of mathematical objects}). @menu * vector declarations:: * vector expressions:: * vector operations:: * vector related functions:: @end menu @c ------------------------------ @node vector declarations, vector expressions, vector, vector @subsection vector declarations @cindex vector declarations @table @strong @item Syntax: @code{vector} name @code{=} vector_expression @code{;} @item Purpose: defines a vector of polynomials (an element of a free module). @item Default: [0] @item Example: @smallexample @c reused example vector_declarations types.doc:3840 ring r=0,(x,y,z),(c,dp); poly s1 = x2; poly s2 = y3; poly s3 = z; vector v = [s1, s2-s1, s3-s1]+ s1*gen(5); // v is a vector in the free module of rank 5 v; @expansion{} [x2,y3-x2,-x2+z,0,x2] @c end example vector_declarations types.doc:3840 @end smallexample @end table @c ------------------------------ @node vector expressions, vector operations, vector declarations, vector @subsection vector expressions @cindex vector expressions A vector expression is: @enumerate @item an identifier of type vector @item a function returning vector @item a poly expression (via the canonical embedding @code{p} @expansion{} @code{p*gen(1)}) @item vector expressions combined by the arithmetic operations @code{+} or @code{-} @item a poly expression and a vector expression combined by the arithmetic operation @code{*} @item a type cast to vector using the brackets @code{[} , @code{]} @end enumerate @*@strong{Example:} @smallexample @c reused example vector_expressions types.doc:3877 // ordering gives priority to components: ring rr=0,(x,y,z),(c,dp); vector v=[x2+y3,2,0,x*y]+gen(6)*x6; v; @expansion{} [y3+x2,2,0,xy,0,x6] vector w=[z3-x,3y]; v-w; @expansion{} [y3-z3+x2+x,-3y+2,0,xy,0,x6] v*(z+x); @expansion{} [xy3+y3z+x3+x2z,2x+2z,0,x2y+xyz,0,x7+x6z] @c end example vector_expressions types.doc:3877 @end smallexample @c inserted refs from types.doc:3888 @ifinfo @menu See * Type conversion and casting:: * ring:: @end menu @end ifinfo @iftex See @ref{Type conversion and casting}; @ref{ring}. @end iftex @c end inserted refs from types.doc:3888 @c ------------------------------ @node vector operations, vector related functions, vector expressions, vector @subsection vector operations @cindex vector operations @table @asis @item @code{+} addition @item @code{-} negation or subtraction @item @code{/} division by a monomial, not divisible terms yield 0 @item @code{<}, @code{<=}, @code{>}, @code{>=}, @code{==}, @code{<>} comparison of leading terms w.r.t. monomial ordering @item vector_expression @code{[} int_expressions @code{]} is a vector entry; the index 1 gives the first entry. @end table @*@strong{Example:} @smallexample @c reused example vector_operations types.doc:3918 ring R=0,(x,y),(c,dp); [x,y]-[1,x]; @expansion{} [x-1,-x+y] [1,2,x,4][3]; @expansion{} x @c end example vector_operations types.doc:3918 @end smallexample @c ------------------------------ @node vector related functions, , vector operations, vector @subsection vector related functions @cindex vector related functions @table @code @item cleardenom quotient of a vector by its content (see @ref{cleardenom}) @item coeffs matrix of coefficients (see @ref{coeffs}) @item deg degree (see @ref{deg}) @item diff partial derivative (see @ref{diff}) @item gen i-th generator (see @ref{gen}) @item homog homogenization (see @ref{homog}) @item jet k-jet: monomials with degree smaller k+1 (see @ref{jet}) @item lead leading term (see @ref{lead}) @item leadcoef leading coefficient (see @ref{leadcoef}) @item leadexp the exponent vector of the leading monomial (see @ref{leadexp}) @item leadmonom leading monomial (see @ref{leadmonom}) @item nrows number of rows (see @ref{nrows}) @item ord degree of the leading monomial (see @ref{ord}) @item reduce normal form with respect to a standard base (see @ref{reduce}) @item simplify normalize a vector (see @ref{simplify}) @item size number of monomials (see @ref{size}) @item subst substitute a ring variable (see @ref{subst}) @end table @c @*@strong{Example:} @c @example @c @end example texi2html-1.82/test/singular_manual/lib2doc.texi0000644000175000017500000000432411264347126023612 0ustar flichtenheldflichtenheld@ifclear singularmanual This is the README file for lib2doc. @end ifclear @code{lib2doc} is a utility to generate the stand-alone documentation for a @sc{Singular} library in various formats. The @code{lib2doc} utility should be used by developers of @sc{Singular} libraries to check the generation of the documentation of their libraries. @code{lib2doc} can be downloaded from @* @url{ftp://www.mathematik.uni-kl.de/pub/Math/Singular/misc/lib2doc.tar.gz} @strong{Important:} @*To use @code{lib2doc}, you need to have @code{perl} (version 5 or higher), @code{texinfo} (version 3.12 or higher) and @code{Singular} and @code{libparse} (version 1-3-4 or higher) installed on your system. To generate the documentation for a library, follow these steps: @enumerate @item Unpack lib2doc.tar.gz @smallexample gzip -dc lib2doc.tar.gz | tar -pxf - @end smallexample and @smallexample cd lib2doc @end smallexample @item Edit the beginning of the file @code{Makefile}, filling in the values for @code{SINGULAR} and @code{LIBPARSE}. Check also the values of @code{PERL} and @code{LATEX2HTML}. @item Copy your library to the current directory: @smallexample cp /mylib.lib . @end smallexample @item Now you can run the following commands: @table @code @item make mylib.hlp Generates the file @code{mylib.hlp} -- the info file for the documentation of @code{mylib.lib}. This file can be viewed with @smallexample info -f mylib.hlp @end smallexample @item make mylib.dvi Generates the file @code{mylib.dvi} -- the dvi file for the documentation of @code{mylib.lib}. This file can be viewed with @smallexample xdvi mylib.dvi @end smallexample @item make mylib.ps Generates the file @code{mylib.ps} -- the PostScript file for the documentation of @code{mylib.lib}. This file can be viewed with (for example) @smallexample ghostview mylib.dvi @end smallexample @item make mylib.html Generates the file @code{mylib.html} -- the HTML file for the documentation of @code{mylib.lib}. This file can be viewed with (for example) @smallexample netscape mylib.html @end smallexample @item make clean Deletes all generated files. @end table Note that you can safely ignore messages complaining about undefined references. @end enumerate texi2html-1.82/test/singular_manual/Makefile.in0000644000175000017500000002206611264347126023451 0ustar flichtenheldflichtenheld# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = test/singular_manual DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DATE = @PACKAGE_DATE@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ REQUIRE_DATA_DUMPER = @REQUIRE_DATA_DUMPER@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_DATA_DUMPER = @USE_DATA_DUMPER@ USE_UNICODE = @USE_UNICODE@ USE_UNIDECODE = @USE_UNIDECODE@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ am__leading_dot = @am__leading_dot@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ COPYING.texi math.tex start.tex \ examples.tex NEWS.texi \ exmpl.tex pdata.tex ti_ip.tex \ general.tex platform.tex tricks.tex \ info.texi README_distribution.texi TROUBLESHOOTING_win.texi \ INSTALL_mac.texi README_download.texi tutor.tex \ INSTALL_osx.texi README_ftp.texi tutor-titlepage.tex \ INSTALL_rpm.texi README_src.texi types.tex \ INSTALL_unix.texi reference.tex uname.texi \ INSTALL_win.texi register.texi usercard.tex \ lib2doc.texi singcard.tex version.texi \ manual-titlepage.tex singular.texi \ d2t_singular t2h_singular.init tests.txt # res DISTCLEANFILES = l2h_tmp_dir.init tests.log tests.out all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/singular_manual/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu test/singular_manual/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-exec-am: install-html: install-html-am install-info: install-info-am install-man: install-pdf: install-pdf-am install-ps: install-ps-am installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distclean-local distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am distclean-local: rm -rf out diffs # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: texi2html-1.82/test/singular_manual/general.tex0000644000175000017500000045670011264347126023551 0ustar flichtenheldflichtenheld@comment -*-texinfo-*- @comment This file was generated by doc2tex.pl from general.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT general.doc INSTEAD @comment Id: general.tex,v 1.1 2003/08/08 14:27:06 pertusus Exp $ @comment this file contains the general information about Singular @c The following directives are necessary for proper compilation @c with emacs (C-c C-e C-r). Please keep it as it is. Since it @c is wrapped in `@ignore' and `@end ignore' it does not harm `tex' or @c `makeinfo' but is a great help in editing this file (emacs @c ignores the `@ignore'). @ignore %**start \input texinfo.tex @setfilename general.hlp @node Top, General concepts @menu * General concepts:: @end menu @node General concepts, Data types, Introduction, Top @chapter General concepts %**end @end ignore @menu * Interactive use:: * Emacs user interface:: * Rings and orderings:: * Implemented algorithms:: * The SINGULAR language:: * Input and output:: * Procedures:: * Libraries:: * Guidelines for writing a library:: * Debugging tools:: @end menu @c --------------------------------------------------------------------------- @node Interactive use, Emacs user interface, General concepts, General concepts @section Interactive use @cindex Interactive use In this section, aspects of interactive use are discussed. This includes how to enter and exit @sc{Singular}, how to interpret its prompt, how to get the online help, and so on. There are a few important notes which one should not forget: @itemize @bullet @item every command has to be terminated by a @code{;} (semicolon) followed by a @key{RETURN} @item the online help is accessible by means of the @code{help} function @end itemize @menu * How to enter and exit:: * The SINGULAR prompt:: * The online help system:: * Interrupting SINGULAR:: * Editing input:: * Command line options:: * Startup sequence:: @end menu @c -------------------------------------------------------------------------- @node How to enter and exit, The SINGULAR prompt, Interactive use, Interactive use @subsection How to enter and exit @cindex How to enter and exit @sc{Singular} can either be run in ASCII-terminal or within Emacs. To start @sc{Singular} in its ASCII-terminal user interface, enter @code{Singular} at the system prompt. The @sc{Singular} banner appears which, among others, reports the version and the compilation date. To start @sc{Singular} in its Emacs user interface, either enter @code{ESingular} at the system prompt, or type @code{M-x singular} within a running Emacs (provided you have loaded the file @code{singular.el} in your running Emacs, see @ref{Running SINGULAR under Emacs} for details). Generally, we recommend to use @sc{Singular} in its Emacs interface, since this offers many more features and is more convenient to use than the ASCII-terminal interface (@pxref{Emacs user interface}). To exit @sc{Singular} type @code{quit;}, @code{exit;} or @code{$} (or, when running within Emacs preferably type @code{C-c $}). @sc{Singular} and @code{ESingular} may also be started with command line options and with filenames as arguments. More generally, the synopsis of @sc{Singular} is @smallexample Singular [options] [file1 [file2 @dots{}]] ESingular [options] [file1 [file2 @dots{}]] @end smallexample @xref{Command line options}, @ref{Startup sequence}, @ref{Running SINGULAR under Emacs}. @c -------------------------------------------------------------------------- @node The SINGULAR prompt,The online help system,How to enter and exit, Interactive use @subsection The SINGULAR prompt @cindex prompt @cindex error recovery The @sc{Singular} prompt @code{>} (larger than) asks the user for input of commands. The ``continuation'' prompt @code{.} (period) asks the user for input of missing parts of a command (remember the semicolon at the end of every command). @sc{Singular} does not interpret the semicolon as the end of a command if it occurs inside a string. Also, @sc{Singular} waits for blocks (sequences of commands enclosed in curly brackets) to be closed before prompting with @code{>} for more commands. Thus, if @sc{Singular} does not respond with its regular prompt after typing a semicolon it may wait for a @code{"} or a @code{@}} first. Additional semicolons will not harm @sc{Singular} since they are interpreted as empty statements. @c -------------------------------------------------------------------------- @node The online help system,Interrupting SINGULAR, The SINGULAR prompt,Interactive use @subsection The online help system @cindex The online help system @cindex online help @cindex help, online help system The online help system is invoked with the @code{help} command. @code{?} may be used as a synonym for @code{help}. Simply typing @code{help;} displays the ``top'' of the help system (i.e., the title page of the @sc{Singular} manual) which offers a short table of contents. Typing @code{help} topic@code{;} shows the available documentation on topic. Here, topic may be either a function name or, more generally, any index entry of the @sc{Singular} manual. Furthermore, topic may contain wildcard characters. @xref{help}, for more information. @cindex browsers @cindex help browsers Online help information can be displayed in various help browsers. The following table lists a summary of the supported browsers. See below for more details about particular browsers. @multitable @columnfractions .2 .2 .6 @item @strong{Browser} @tab @strong{Platform} @tab @strong{Description} @item html @cindex help browsers, html @cindex html, default help @tab Windows @tab displays html version of manual in your default html browser @item winhlp @cindex help browsers, winhlp @cindex html, default help @tab Windows @tab displays Windows help (.hlp) version of manual @item netscape @cindex netscape @cindex help browsers, netscape @tab Unix, Windows @tab uses @code{netscape} to display html version of manual @item tkinfo @cindex tkinfo @cindex help browsers, tkinfo @tab Unix @tab uses the @code{tkinfo} program to display texinfo version of manual @item xinfo @cindex xinfo @cindex help browsers, xinfo @tab Unix, Windows @tab uses the @code{info} program to display texinfo version of manual in an extra @code{xterm} @item info @cindex info @cindex help browsers, info @tab Unix, Windows @tab uses the @code{info} program to display texinfo version of manual @item builtin @cindex help browsers, dummy @tab all @tab simply outputs the help information in plain ASCII format @item emacs @cindex help browsers, emacs @tab Unix, Windows @tab when running @sc{Singular} within (X)emacs, display help in (X)emacs info buffer. @item dummy @tab all @cindex help browsers, dummy @tab displays error message about no available help browser @end multitable The browser which is used to display the help information, can be either set at startup time with the command line option (@pxref{Command line options}) @smallexample --brower= @end smallexample or with the @sc{Singular} command (@pxref{system}) @smallexample system("--browser", ); @end smallexample The @sc{Singular} command @smallexample system("browsers"); @end smallexample lists all available browsers and the command @smallexample system("--browser"); @end smallexample returns the currently used browser. If no browser is explicitly set by the user, then the first (w.r.t. the order of the browsers in the table above) available browser is chosen. In other words, the default browser is @code{netscape} for Unix platforms, and @code{html} for Windows, unless your local set-up does not allow to run it. The @code{.singularrc} (@pxref{Startup sequence}) file is a good place to set your default browser. Recall that if a file @code{$HOME/.singularrc} exists on your system, then the content of this file is executed before the first user input. Hence, putting @smallexample if (system("version") >= 1306) // keep backwards-compatibility @{ if (! system("--emacs") @{ // only set help browser if not running within emacs system("--browser", "info"); @} // if help browser is later on set to netscape, // allow it to fetch HTML pages from the net system("--allow-net", 1); @}; // the last semicolon is important: otherwise no ">", but "." prompt @end smallexample in your file @code{$HOME/.singularrc} sets your default browser to @code{info}, unless @sc{Singular} is run within emacs (in which case the default browser is set automatically to @code{emacs}). Obviously, certain external files and programs are required for the @sc{Singular} help system to work correctly. If something is not available or goes wrong, here are some tips for troubleshooting the help system: @itemize @bullet @item @cindex DISPLAY environment variable @cindex environment variable, DISPLAY Under Unix, the environment variable @code{DISPLAY} has to be set for the browsers @code{netscape}, @code{tkinfo}, and @code{xinfo} to work. @item @cindex NETSCAPE environment variable @cindex XINFO environment variable @cindex XTERM environment variable @cindex INFO environment variable @cindex help browsers, setting command to use The help browsers @code{netscape}, @code{tkinfo}, @code{xinfo}, and @code{info} are only available if the respective programs are installed on your system (for @code{xinfo}, the programs @code{xterm} and @code{info} are necessary). You can explicitly specify which program to use, by setting appropriate environment variables (whose names are the names of the respective programs in all up-case letters). @*For example, to use the program @code{navigator} with a private colormap as @code{netscape} help browser, set the environment variable @code{NETSCAPE} to the value @code{"navigator -install"}. @c TBC (@xref{Setting environment variables}). @item If the help browser @code{netscape} can not find the local html pages of the @sc{Singular} manual (which it looks for at @code{$RootDir/html} -- see @ref{Loading of a library} for more info on @code{$RootDir}) @emph{and} the (command-line) option @code{--allow-net} has @emph{explicitly} been set (see @ref{Command line options} and @ref{system} for more info on setting values of command-line options), then it dispatches the html pages from @url{http://www.singular.uni-kl.de/Manual} (note that the non-local net-access of HTML pages is disabled, by default). @*An alternative location of a local directory where the html pages reside can be specified by setting the environment variable @code{SINGULAR_HTML_DIR}. @c TBC (@xref{Setting environment variables}). @item The help browsers @code{tkinfo}, @code{xinfo}, @code{info}, and @code{builtin} need the (info) file @code{singular.hlp} which it looks for at @code{$RootDir/info/singular.hlp} (see @ref{Loading of a library} for more info on @code{$RootDir}). An alternative location of the info file of the manual can be specified by setting the environment variable @code{SINGULAR_INFO_FILE}. @c TBC (@xref{Setting environment variables}). @end itemize @c inserted refs from general.doc:308 @ifinfo @menu See also: * Command line options:: * Loading of a library:: * Startup sequence:: * system:: @end menu @end ifinfo @iftex @strong{See also:} @ref{Command line options}; @ref{Loading of a library}; @ref{Startup sequence}; @ref{system}. @end iftex @c end inserted refs from general.doc:308 @subsubheading Info help browsers @cindex info The help browsers @code{tkinfo}, @code{xinfo} and @code{info} (so-called info help browsers) are based on the @code{info} program from the Gnu @code{texinfo} package. @xref{Top, An Introduction to Info, Getting started, info, The Info Manual}, for more information. For info help browsers, the online manual is decomposed into ``nodes'' of information, closely related to the division of the printed manual into sections and subsections. A node contains text describing a specific topic at a specific level of detail. The top line of a node is its ``header''. The node's header tells the name of the current node (@code{Node:}), the name of the next node (@code{Next:}), the name of the previous node (@code{Prev:}), and the name of the upper node (@code{Up:}). To move within info, type commands consisting of single characters. Do not type @code{RETURN}. Do not use cursor keys, either. Using some of the cursor keys by accident might pop to some totally different node. Type @code{l} to return to the original node. Some of the @code{info} commands read input from the command line at the bottom line. The @code{TAB} key may be used to complete partially entered input. The most important commands are: @table @asis @item @code{q} leaves the online help system @item @code{n} goes to the next node @item @code{p} goes to the previous node @item @code{u} goes to the upper node @item @code{m} picks a menu item specified by name @item @code{f} follows a cross reference @item @code{l} goes to the previously visited node @item @code{b} goes to the beginning of the current node @item @code{e} goes to the end of the current node @item @code{SPACE} scrolls forward a page @item @code{DEL} scrolls backward a page @item @code{h} invokes info tutorial (use @code{l} to return to the manual or @code{CTRL-X 0} to remove extra window) @item @code{CTRL-H} shows a short overview on the online help system (use @code{l} to return to the manual or @code{CTRL-X 0} to remove extra window) @item @code{s} searches through the manual for a specified string, and selects the node in which the next occurrence is found @item @code{1}, @dots{}, @code{9} picks i-th subtopic from a menu @end table @c -------------------------------------------------------------------------- @node Interrupting SINGULAR,Editing input,The online help system,Interactive use @subsection Interrupting SINGULAR @cindex Interrupting SINGULAR On Unix-like operating systems and on Windows NT, typing @code{CTRL-C} (or, alternatively @code{C-c C-c}, when running within Emacs), interrupts @sc{Singular}. @sc{Singular} prints the current command and the current line and prompts for further action. The following choices are available: @table @code @item a returns to the top level after finishing the current (kernel) command. Notice that commands of the @sc{Singular} kernel (like @code{std}) can not be aborted, i.e. (@code{a})bort only happens whenever the interpreter is active. @item c continues @item q quits @sc{Singular} @end table @c -------------------------------------------------------------------------- @node Editing input,Command line options,Interrupting SINGULAR,Interactive use @subsection Editing input @cindex Editing input @cindex SINGULARHIST @c This section describes only a subset of the key bindings of @c @sc{Singular} binaries built with the GNU Readline library. @c @xref{Command Line Editing, GNU Readline Library, Command Line Editing, @c readline, The GNU Readline Library Manual}, for more information. The following keys can be used for editing the input and retrieving previous input lines: @table @code @item TAB provides command line completion for function names and file names @item CTRL-B moves cursor left @item CTRL-F moves cursor right @item CTRL-A moves cursor to beginning of line @item CTRL-E moves cursor to end of line @item CTRL-D deletes character under cursor @* Warning: on an empty line, @code{CTRL-D} is interpreted as the @code{EOF} character which immediately terminates @sc{Singular}. @item BACKSPACE @itemx DELETE @itemx CTRL-H deletes character before cursor @item CTRL-K kills from cursor to end of line @item CTRL-U kills from cursor to beginning of line @item CTRL-N saves current line on history and gives next line @item CTRL-P saves current line on history and gives previous line @item RETURN saves the current line to the history and sends it to the @sc{Singular} parser for interpretation @end table When run under a Unix-like operating system and in its ASCII-terminal user interface, @sc{Singular} tries to dynamically link at runtime with the GNU Readline library. @xref{Command Line Editing, GNU Readline Library, Command Line Editing, readline, The GNU Readline Library Manual}, for more information. If a shared version of this library can be found on your machine, then additional command-line editing features like history completion are available. In particular, if @sc{Singular} is able to load that library and if the environment variable @code{SINGULARHIST} is set and has a name of a file as value, then the input history is stored across sessions using this file. Otherwise, i.e., if the environment variable @code{SINGULARHIST} is not set, then the history of the last inputs is only available for the commands of the current session. @c -------------------------------------------------------------------------- @node Command line options, Startup sequence, Editing input, Interactive use @subsection Command line options @cindex Command line options The synopsis of @sc{Singular} is @smallexample Singular [options] [file1 [file2 @dots{}]] ESingular [options] [file1 [file2 @dots{}]] @end smallexample Options can be given in both, their long and short format. The following options control the general behavior of @sc{Singular}: @table @asis @item @code{-d}, @code{--sdb} @cindex -d @cindex --sdb @cindex Source code debugger, invocation Enable the use of the source code debugger. @xref{Source code debugger}. @item @code{-e}, @code{--echo[=VAL]} @cindex -e @cindex --echo Set value of variable @code{echo} to @code{VAL} (integer in the range 0, @dots{}, 9). Without an argument, @code{echo} is set to 1, which echoes all input coming from a file. By default, the value of @code{echo} is 0. @xref{echo}. @item @code{-h}, @code{--help} @cindex -h @cindex --help @cindex command-line options, short help Print a one-line description of each command line option and exit. @item @code{--allow-net} @cindex --allow-net @cindex net access @cindex allowing net access @cindex help, accessing over the net Allow the @code{netscape} and @code{html} help browser to fetch HTML manual pages over the net from the WWW home-site of @sc{Singular}. @xref{The online help system}, for more info. @item @code{--browser=VAL} @cindex --browser @cindex browser, command line option Use @code{VAL} as browser for the @sc{Singular} online manual. @*@code{VAL} may be one of @code{html} (Windows only), @code{netscape}, @code{xinfo}, @code{tkinfo}, @code{info}, @code{builtin}, or @code{emacs}. Depending on your platform and local installation, only some browsers might be available. The default browser is @code{html} for Windows and @code{netscape} for Unix platforms. @xref{The online help system}, for more info. @item @code{--no-rc} @cindex --no-rc @cindex .singularrc file, no loading Do not execute the @code{.singularrc} file on start-up. By default, this file is executed on start-up. @xref{Startup sequence}. @item @code{--no-stdlib} @cindex --no-stdlib Do not load the library @code{standard.lib} on start-up. By default, this library is loaded on start-up. @xref{Startup sequence}. @item @code{--no-warn} @cindex --no-warn Do not display warning messages. @item @code{--no-out} @cindex --no-out Suppress display of all output. @item @code{-t}, @code{--no-tty} @cindex --no-tty Do not redefine the terminal characteristics. This option should be used for batch processes. @item @code{-q}, @code{--quiet} @cindex -q @cindex --quiet Do not print the start-up banner and messages when loading libraries. Furthermore, redirect @code{stderr} (all error messages) to @code{stdout} (normal output channel). This option should be used if @sc{Singular}'s output is redirected to a file. @item @code{-v}, @code{--verbose} @cindex --verbose @cindex -v Print extended information about the version and configuration of @sc{Singular} (used optional parts, compilation date, start of random generator etc.). This information should be included if a user reports an error to the authors. @end table The following command line options allow manipulations of the timer and the pseudo random generator and enable the passing of commands and strings to @sc{Singular}: @table @asis @item @code{-c}, @code{--execute=STRING} @cindex -c @cindex --execute Execute @code{STRING} as (a sequence of) @sc{Singular} commands on start-up after the @code{.singularrc} file is executed, but prior to executing the files given on the command line. E.g., @code{Singular -c "help all.lib; quit;"} shows the help for the library @code{all.lib} and exits. @item @code{-u}, @code{--user-option=STRING} @cindex -u @cindex --user-option Returns @code{STRING} on @code{system("--user-option")}. This is useful for passing arbitrary arguments from the command line to the @sc{Singular} interpreter. E.g., @*@code{Singular -u "xxx.dump" -c 'getdump(system("--user-option"))'} reads the file @code{xxx.dump} at start-up and allows the user to start working with all the objects defined in a previous session. @item @code{-r}, @code{--random=SEED} @cindex -r @cindex --random Seed (i.e., set the initial value of) the pseudo random generator with integer @code{SEED}. If this option is not given, then the random generator is seeded with a time-based @code{SEED} (the number of seconds since January, 1, 1970, on Unix-like operating systems, to be precise). @item @code{--min-time=SECS} @cindex --min-time If the @code{timer} (@pxref{timer}), resp.@: @code{rtimer} (@pxref{rtimer}) , variable is set, report only times larger than @code{SECS} seconds (@code{SECS} needs to be a floating point number greater than 0). By default, this value is set to 0.5 (i.e., half a second). E.g., the option @code{--min-time=0.01} forces @sc{Singular} to report all times larger than 1/100 of a second. @item @code{--ticks-per-sec=TICKS} @cindex --ticks-per-sec Set unit of timer to @code{TICKS} ticks per second (i.e., the value reported by the @code{timer} and @code{rtimer} variable divided by @code{TICKS} gives the time in seconds). By default, this value is 1. @end table The next three options are of interest for the use with MP links: @table @asis @item @code{-b}, @code{--batch} @cindex -b @cindex --batch Run in MP batch mode. Opens a TCP/IP connection with host specified by @code{--MPhost} at the port specified by @code{--MPport}. Input is read from and output is written to this connection in the MP format. @xref{MPtcp links}. @item @code{--MPport=PORT} @cindex --MPport Use @code{PORT} as default port number for MP connections (whenever not further specified). This option is mandatory when the @code{--batch} option is given. @xref{MPtcp links}. @item @code{--MPhost=HOST} @cindex --MPhost Use @code{HOST} as default host for MP connections (whenever not further specified). This option is mandatory when the @code{--batch} option is given. @xref{MPtcp links}. @end table Finally, the following options are only available when running @code{ESingular} (see @ref{Running SINGULAR under Emacs} for details). @table @code @item --emacs=EMACS @cindex --emacs Use @code{EMACS} as Emacs program to run the @sc{Singular} Emacs interface, where @code{EMACS} may e.g. be emacs ore xemacs. @item --emacs-dir=DIR @cindex --emacs-dir Set the singular-emacs-home-directory, which is the directory where singular.el can be found, to @code{DIR}. @item --emacs-load=FILE @cindex --emacs-load Load @code{FILE} on Emacs start-up, instead of the default load file. @item --singular=PROG @cindex --singular Start @code{PROG} as @sc{Singular} program within Emacs @end table The value of options given to @sc{Singular} (resp.@: their default values, if an option was not given), can be checked with the command @code{system("--}long_option_name@code{")}. @xref{system}. @smallexample @c computed example Command_line_options general.doc:658 system("--quiet"); // if ``quiet'' 1, otherwise 0 @expansion{} 1 system("--min-time"); // minimal reported time @expansion{} 0.5 system("--random"); // seed of the random generator @expansion{} 12345678 @c end example Command_line_options general.doc:658 @end smallexample Furthermore, the value of options (e.g., @code{--browser}) can be re-set while @sc{Singular} is running with the command @code{system("--}long_option_name_string @code{",}expression@code{)}. @xref{system}. @smallexample system("--browser", "builtin"); // sets browser to 'builtin' system("--ticks-per-sec", 100); // sets timer resolution to 100 @end smallexample @c -------------------------------------------------------------------------- @node Startup sequence, , Command line options, Interactive use @subsection Startup sequence @cindex Startup sequence On start-up, @sc{Singular} @enumerate @item loads the library @code{standard.lib} (provided the @code{--no-stdlib} option was not given), @item @cindex file, .singularrc @cindex .singularrc file @cindex singularrc searches the current directory and then the home directory of the user, and then all directories contained in the library @code{SearchPath} (see @ref{Loading of a library} for more info on @code{SearchPath}) for a file named @code{.singularrc} and executes it, if found (provided the @code{--no-rc} option was not given), @item executes the string specified with the @code{--execute} command line option, @item executes the files @code{file1}, @code{file2} @dots{} (given on the command line) in that order. @end enumerate @strong{Note:} @code{.singularrc} file(s) are an appropriate place for setting some default values of (command-line) options. For example, a system administrator might remove the locally installed HTML version of the manual and put a @code{.singularrc} file with the following content @smallexample if (system("version") >= 1306) // assure backwards-compatibility @{ system("--allow-net", 1); @}; // the last semicolon is important: otherwise no ">", but "." prompt @end smallexample in the directory containing the @sc{Singular} libraries, thereby allowing to fetch the HTML on-line help from the WWW home-site of @sc{Singular}. On the other hand, a single user might put a @code{.singularrc} with the following content @smallexample if (system("version") >= 1306) // assure backwards-compatibility @{ if (! system("--emacs")) @{ // set default browser to info, unless we run within emacs system("--browser", "info"); @} @}; // the last semicolon is important: otherwise no ">", but "." prompt @end smallexample in his home directory, which sets the default help browser to @code{info} (unless @sc{Singular} is run within emacs) and thereby prevents the execution of the"global" @code{.singularrc} file installed by the system administrator (since the @code{.singularrc} file of the user is found before the "global" @code{.singularrc} file installed by the system administrator). @c --------------------------------------------------------------------------- @node Emacs user interface, Rings and orderings, Interactive use, General concepts @section Emacs user interface @cindex Emacs, user interface @cindex Emacs @cindex interface, Emacs @cindex user interface, Emacs Besides running @sc{Singular} in an ASCII-terminal, @sc{Singular} might also be run within Emacs. Emacs (or, XEmacs which is very similar) is a powerful and freely available text editor, which, among others, provides a framework for the implementation of interactive user interfaces. Starting from version 1.3.6, @sc{Singular} provides such an implementation, the so-called @sc{Singular} Emacs mode, or Emacs user interface. Generally, we recommend to use the Emacs interface, instead of the ASCII-terminal interface: The Emacs interface does not only provide everything the ASCII-terminal interface provides, but offers much more. Among others, it offers @itemize @bullet @item color-highlighting @item truncation of long lines @item folding of input and output @item TAB-completion for help topics @item highlighting of matching parentheses @item key-bindings and interactive menus for most user interface commands and for basic @sc{Singular} commands (such as loading of libraries and files) @item a mode for running interactive @sc{Singular} demonstrations @item convenient ways to edit @sc{Singular} input files @item interactive customization of nearly all aspects of the user-interface. @end itemize To use the @sc{Singular}-Emacs interface you need to have Emacs version 20 or higher, or XEmacs version 20.3 or higher installed on your system. These editors can be downloaded for most hard- and software platforms (including Windows 95/98/NT, but excluding the Macintosh), from either @uref{http://www.fsf.org/software/emacs/emacs.html} (Emacs), from @uref{http://www.xemacs.org} (XEmacs), or from our ftp site at @uref{ftp://www.mathematik.uni-kl.de/pub/Math/Singular/utils/}. The differences between Emacs and XEmacs w.r.t. the @sc{Singular}-Emacs interface are marginal -- which editor to use is mainly a matter of personal preferences. The simplest way to start-up @sc{Singular} in its Emacs interface is by running the program @code{ESingular} which is contained in the Singular distribution. Alternatively, @sc{Singular} can be started within an already running Emacs -- see @ref{Running SINGULAR under Emacs} for details. The next section gives a tutorial-like introduction to Emacs. This introductory section is followed by sections which explain the functionality of various aspects of the Emacs user interface in more detail: how to start/restart/kill @sc{Singular} within Emacs, how to run an interactive demonstration, how to customize the Emacs user interface, etc. Finally, the 20 most important commands of the Emacs interface together with their key bindings are listed. @menu * A quick guide to Emacs:: * Running SINGULAR under Emacs:: * Demo mode:: * Customization of the Emacs interface:: * Editing SINGULAR input files with Emacs:: * Top 20 Emacs commands:: @end menu @c -------------------------------------------------------------------------- @node A quick guide to Emacs, Running SINGULAR under Emacs, Emacs user interface, Emacs user interface @subsection A quick guide to Emacs @cindex Emacs, overview @cindex Emacs, a quick guide This section gives a tutorial-like introduction to Emacs. Especially to users who are not familiar with Emacs, we recommend that they go through this section and try out the described features. Emacs commands generally involve the @code{CONTROL} key (sometimes labeled @code{CTRL} or @code{CTL}) or the @code{META} key. On some keyboards, the @code{META} key is labeled @code{ALT} or @code{EDIT} or something else (for example, on Sun keyboards, the diamond key to the left of the space-bar is @code{META}). If there is no @code{META} key, the @code{ESC} key can be used, instead. Rather than writing out @code{META} or @code{CONTROL} each time we want to prefix a character, we will use the following abbreviations: @multitable @columnfractions .2 .8 @item @code{C-} @tab means hold the @code{CONTROL} key while typing the character @code{}. Thus, @code{C-f} would be: hold the @code{CONTROL} key and type @code{f}. @item @code{M-} @tab means hold the @code{META} key down while typing @code{}. If there is no @code{META} key, type @key{ESC}, release it, then type the character @code{}. @end multitable For user new to Emacs, we highly recommend that they go through the interactive Emacs tutorial: type @code{C-h t} to start it. For others, it is important to understand the following Emacs concepts: @table @asis @item window In Emacs terminology, a window refers to separate panes within the same window of the window system, and not to overlapping, separate windows. When using @sc{Singular} within Emacs, extra windows may appear which display help or output from certain commands. The most important window commands are: @multitable @columnfractions 2. .3 .5 @item @code{C-x 1} @tab @code{File->Un-Split} @tab Un-Split window (i.e., kill other windows) @item @code{C-x o} @tab @tab Goto other window, i.e. move cursor into other window. @end multitable @item cursor and point The location of the cursor in the text is also called "point". To paraphrase, the cursor shows on the screen where point is located in the text. Here is a summary of simple cursor-moving operations: @multitable @columnfractions .2 .8 @item @code{C-f} @tab Move forward a character @item @code{C-b} @tab Move backward a character @item @code{M-f} @tab Move forward a word @item @code{M-b} @tab Move backward a word @item @code{C-a} @tab Move to the beginning of line @item @code{C-e} @tab Move to the end of line @end multitable @item buffer Any text you see in an Emacs window is always part of some buffer. For example, each file you are editing with Emacs is stored inside a buffer, but also @sc{Singular} is running inside an Emacs buffer. Each buffer has a name: for example, the buffer of a file you edit usually has the same name as the file, @sc{Singular} is running in a buffer which has the name @code{*singular*} (or, @code{*singular<2>*}, @code{*singular<3>*}, etc., if you have multiple @sc{Singular} sessions within the same Emacs). When you are asked for input to an Emacs command, the cursor moves to the bottom line of Emacs, i.e., to a special buffer, called the "minibuffer". Typing @key{RETURN} within the minibuffer, ends the input, typing @key{SPACE} within the minibuffer, lists all possible input values to the interactive Emacs command. The most important buffer commands are @multitable @columnfractions .2 .8 @item @code{C-x b} @tab Switch buffer @item @code{C-x k} @tab Kill current buffer @end multitable Alternatively, you can switch to or kill buffers using the @code{Buffer} menu. @item Executing commands Emacs commands are executed by typing @code{M-x } (remember that @key{SPACE} completes partial command names). Important and frequently used commands have short-cuts for their execution: Key bindings or even menu entries. For example, a file can be loaded with @code{M-x load-file}, or @code{C-x C-f}, or with the @code{File->Open} menu. @item How to exit To end the Emacs (and, @sc{Singular}) session, type @code{C-x C-c} (two characters), or use the @code{File -> Exit} menu. @item When Emacs is hung If Emacs stops responding to your commands, you can stop it safely by typing @code{C-g}, or, if this fails, by typing @code{C-]}. @item More help Nearly all aspects of Emacs are very well documented: type @code{C-h} and then a character saying what kind of help you want. For example, typing @code{C-h i} enters the @code{Info} documentation browser. @item Using the mouse Emacs is fully integrated with the mouse. In particular, clicking the right mouse button brings up a pop-up menu which usually contains a few commonly used commands. @end table @c -------------------------------------------------------------------------- @node Running SINGULAR under Emacs, Demo mode, A quick guide to Emacs, Emacs user interface @subsection Running SINGULAR under Emacs @cindex Emacs, running Singular under @cindex Singular, running within Emacs @cindex Running SINGULAR under Emacs There are two ways to start the @sc{Singular} Emacs interface: Typing @code{ESingular} instead of @code{Singular} on the command shell launches a new Emacs process, initializes the interface and runs @sc{Singular} within Emacs. The other way is to start the interface in an already running Emacs, by typing @code{M-x singular} inside Emacs. This initializes the interface and runs @sc{Singular} within Emacs. Both ways are described in more detail below. Note: To properly run the Emacs interface, several files are needed which usually reside in the @code{emacs} subdirectory of your @sc{Singular} distribution. This directory is called singular-emacs-home-directory in the following. @subheading Starting the interface using ESingular As mentioned above, @code{ESingular} is an "out-of-the-box" solution: You don't have to add special things to your @code{.emacs} startup file to initialize the interface; everything is done for you in a special file called @code{.emacs-singular} (which comes along with the @sc{Singular} distribution and resides in the singular-emacs-home-directory) which is automatically loaded on Emacs startup (and the loading of the @code{.emacs} file is automatically suppressed). The customizable variables of the @sc{Singular} Emacs interface are set to defaults which give the novice user a very shell like feeling of the interface. Nevertheless, these default settings can be changed, see @ref{Customization of the Emacs interface}. Besides other Emacs initializations, such as fontification or blinking parentheses, a new menu item called @code{Singular} is added to the main menu, providing menu items for starting @sc{Singular}. On XEmacs, a button starting @sc{Singular} is added to the main toolbar. The @sc{Singular} interface is started automatically; once you see a buffer called @code{*singular*} and the @sc{Singular} prompt you are ready to start your @sc{Singular} session. @code{ESingular} inherits all @code{Singular} options. For a description off all these options, see @ref{Command line options}. Additionally there are the following options which are special to @code{ESingular}: @multitable @columnfractions .3 .7 @item command-line option / @*environment variable @tab functionality @item @code{--emacs=EMACS} @*@code{ESINGULAR_EMACS} @tab Use @code{EMACS} as Emacs program to run the @sc{Singular} Emacs interface, where @code{EMACS} may e.g. be emacs or xemacs. @item @code{--emacs-dir=DIR} @*@code{ESINGULAR_EMACS_DIR} @tab Set the singular-emacs-home-directory, which is the directory where singular.el can be found, to @code{DIR}. @item @code{--emacs-load=FILE} @*@code{ESINGULAR_EMACS_LOAD} @tab Load @code{FILE} on Emacs start-up, instead of the default load file. @item @code{--singular=PROG} @*@code{ESINGULAR_SINGULAR} @tab Start @code{PROG} as @sc{Singular} program within Emacs @end multitable Notice that values of these options can also be given by setting the above mentioned environment variables (where values given as command-line arguments take priority over values given by environment variables). @subheading Starting the interface within a running Emacs If you are a more experienced Emacs user and you already have your own local @code{.emacs} startup file, you might want to start the interface out of your running Emacs without using @code{ESingular}. For this, you should add the following lisp code to your @code{.emacs} file: @smallexample (setq load-path (cons "" load-path)) (autoload 'singular "singular" "Start Singular using default values." t) (autoload 'singular-other "singular" "Ask for arguments and start Singular." t) @end smallexample Then typing @code{M-x singular} in a running Emacs session initializes the interface in a new buffer and launches a @sc{Singular} process. The @sc{Singular} prompt comes up and you are ready to start your @sc{Singular} session. It is a good idea to take a look at the (well documented) file @code{.emacs-singular} in the singular-emacs-home-directory, which comes along with the distribution. In it you find some useful initializations of the @sc{Singular} interface as well as some lisp code, which, for example, adds a button to the XEmacs toolbar. Some of this code might be useful for your @code{.emacs} file, too. And if you are a Emacs wizard, it is of course a good idea to take a look at @code{singular.el} in the singular-emacs-home-directory. @subheading Starting, interrupting and stopping SINGULAR There are the following commands to start and stop @sc{Singular}: @itemize @bullet @item @code{singular-other} (or menu @code{Singular}, item @code{Start...}) Starts a @sc{Singular} process and asks for the following four parameters in the minibuffer area: @enumerate @item The Singular executable. This can either be a file name with complete path, e.g., @code{/local/bin/Singular}. Then exactly this executable is started. The path may contain the character @code{~} denoting your home directory. Or it can be the name of a command without path, e.g., @code{Singular}. Then the executable is searched for in your @code{$PATH} environment variable. @item The default working directory. This is the path to an existing directory, e.g., @code{~/work}. The current directory is set to this directory before @sc{Singular} is started. @item Command line options. You can set any @sc{Singular} command line option (see @ref{Command line options}). @item The buffer name. You can specify the name of the buffer the interface is running in. @end enumerate @item @code{singular} (or menu @code{Singular}, item @code{Start default}) Starts @sc{Singular} with default settings for the executable, the working directory, command line switches, and the buffer name. You can customize this default settings, see @ref{Customization of the Emacs interface}. @item @code{singular-exit-singular} (bound to @code{C-c $} or menu @code{Singular}, item @code{Exit}) Kills the running @sc{Singular} process of the current buffer (but does not kill the buffer). Once you have killed a @sc{Singular} process you can start a new one in the same buffer with the command @code{singular} (or select the item @code{Start default} of the @code{Singular} menu). @item @code{singular-restart} (bound to @code{C-c C-r} or menu @code{Singular}, item @code{Restart}) Kills the running @sc{Singular} process of the current buffer and starts a new process in the same buffer with exactly the same command line arguments as before. @item @code{singular-control-c} (bound to @code{C-c C-c} or menu @code{Singular}, item @code{Interrupt}) Interrupt the Singular process running in the current buffer. Asks whether to (@code{a})bort the current @sc{Singular} command, (@code{q})uit or (@code{r})estart the current @sc{Singular} process, or (@code{c})ontinue without doing anything (default). @end itemize Whenever a @sc{Singular} process is started within the Emacs interface, the contents of a special startup file (by default @code{~/.emacs-singularrc}) is pasted as input to @sc{Singular} at the very end of the usual startup sequence (see @ref{Startup sequence}). The name of the startup file can be changed, see @ref{Customization of the Emacs interface}. @c -------------------------------------------------------------------------- @node Demo mode, Customization of the Emacs interface, Running SINGULAR under Emacs, Emacs user interface @subsection Demo mode @cindex Emacs, Singular demo mode @cindex Singular, demo mode @cindex Demo mode The Emacs interface can be used to run interactive @sc{Singular} demonstrations. A demonstration is started by loading a so-called @sc{Singular} demo file with the Emacs command @code{singular-demo-load}, bound to @code{C-c C-d}, or with the menu @code{Commands->Load Demo}. A @sc{Singular} demo file should consist of @sc{Singular} commands separated by blank lines. When running a demo, the input up to the next blank line is echoed to the screen. Hitting @key{RETURN} executes the echoed commands and shows their output. Hitting @key{RETURN} again, echos the next commands to the screen, and so on, until all commands of the demo file are executed. While running a demo, you can execute other commands on the @sc{Singular} prompt: the next input of from the demo file is then echoed again, if you hit @key{RETURN} on an empty input line. A @sc{Singular} demo can prematurely be exited by either starting another demo, or by executing the Emacs command @code{singular-demo-exit} (menu: @code{Commands->Exit Demo}). Some aspects of running @sc{Singular} demos can be customized. @xref{Customization of the Emacs interface}, for more info. @c -------------------------------------------------------------------------- @node Customization of the Emacs interface, Editing SINGULAR input files with Emacs, Demo mode, Emacs user interface @subsection Customization of the Emacs interface @cindex Emacs, customization of Singular mode @cindex Singular, customization of Emacs user interface @cindex Customization of the Emacs interface Emacs provides a convenient interface to customize the behavior of Emacs and the SINGULAR Emacs interface for your own needs. You enter the customize environment by either calling @code{M-x customize} (on XEmacs you afterwards have to enter @code{emacs} in the minibuffer area) or by selecting the menu item @code{Options->Customize->Emacs...} for XEmacs, and the menu item @code{Help->Customize->Toplevel Customization Group} for Emacs, resp. A brief introduction to the customization mode comes up with the customization buffer. All customizable parameters are hierarchically grouped and you can browse through all these groups and change the values of the parameters using the mouse. At the end you can safe the settings to a special file making your changes permanent. To change the settings of the @sc{Singular} Emacs interface you can either select the item @code{Preferences} of the @code{Singular} menu, call @code{M-x customize-group} and give the argument @code{singular-interactive} in the minibuffer area, or browse from the top-level customization group through the path @code{External->Singular->Singular interactive}. The @sc{Singular} interface customization buffer is divided into four groups: @itemize @bullet @item Singular Faces Here you can specify various faces used if font-lock-mode is enabled (which it is, by default). @item Singular Sections And Foldings Here you can specify special faces for @sc{Singular} input and output and change the text used as replacement for folded sections. For doing this, you also might find handy the function @code{customize-face-at-point}, which let's you customize the face at the current position of point. This function is automatically defined if you run @code{ESingular}). Otherwise, you should add its definition (see below) to your personal @code{.emacs} file. @item Singular Interactive Miscellaneous Here you can specify various different things such as the behavior of the cursor keys, the name of the special @sc{Singular} startup file, the appearance of the help window, or the default values for the @code{singular} command. @c Time: I find this sentence rather confusing @c For a first look at customization of the @c interface, this is probably the best group. @item Singular Demo Mode Here you can specify how chunks of the demo file are divided, or specify a default directory for demo files. @end itemize When you run @code{ESingular}, the settings of customized variables are saved in the file @code{$HOME/.emacs-singular-cust}. Otherwise, the settings are appended to your @code{.emacs} file. Among others, this means that the customized settings of @code{ESingular} are not automatically taken over by a "normal" Emacs, and vice versa. @c -------------------------------------------------------------------------- @node Editing SINGULAR input files with Emacs, Top 20 Emacs commands, Customization of the Emacs interface, Emacs user interface @subsection Editing SINGULAR input files with Emacs @cindex Emacs, editing Singular input files @cindex Singular, editing input files with Emacs @cindex Editing SINGULAR input files with Emacs Since @sc{Singular}'s programming language is similar to C, you should use the Emacs C/C++-mode to edit @sc{Singular} input files and @sc{Singular} libraries. Among others, this Emacs mode provides automatic indentation, line-breaking and keyword highlighting. When running @code{ESingular}, the C/C++-mode is automatically turned on whenever a file with the suffix @code{.sing}, or @code{.lib} is loaded. For Emacs sessions which were not started by @code{ESingular}, you should add the following to your @code{.emacs} file: @smallexample ;; turn on c++-mode for files ending in ".sing" and ".lib" (setq auto-mode-alist (cons '("\\.sing\\'" . c++-mode) auto-mode-alist)) (setq auto-mode-alist (cons '("\\.lib\\'" . c++-mode) auto-mode-alist)) ;; turn-on fontification for c++-mode (add-hook 'c++-mode-hook (function (lambda () (font-lock-mode 1)))) ;; turn on aut-new line and hungry-delete (add-hook 'c++-mode-hook (function (lambda () (c-toggle-auto-hungry-state 1)))) ;; a handy function for customization (defun customize-face-at-point () "Customize face which point is at." (interactive) (let ((face (get-text-property (point) 'face))) (if face (customize-face face) (message "No face defined at point")))) @end smallexample Notice that you can change the default settings for source-code highlighting (colors, fonts, etc.) by customizing the respective faces using the @code{Customize} feature of Emacs. For doing this, you might find handy the above given function @code{customize-face-at-point}, which lets you customize the face of the current position of point (this function is automatically defined if you run @code{ESingular}). @c -------------------------------------------------------------------------- @node Top 20 Emacs commands,,Editing SINGULAR input files with Emacs, Emacs user interface @subsection Top 20 Emacs commands @cindex Emacs, important commands @cindex Singular, important commands of Emacs interface @cindex Top 20 Emacs commands Here is a list of the 20 probably most useful commands when using the @sc{Singular} Emacs interface. Starting and stopping of @sc{Singular}: @itemize @bullet @item @code{singular} (menu @code{Singular->Start Default...}): starts @sc{Singular} using default arguments. @item @code{singular-other} (menu @code{Singular->Start}): starts @sc{Singular} asking for several arguments in the minibuffer area. @item @code{singular-exit} (key @code{C-c $} or menu @code{Singular->Exit}): kills the @sc{Singular} process running in the current buffer (but does not kill the buffer). @item @code{singular-restart} (key @code{C-c C-r} or menu @code{Singular->Restart}): kills the @sc{Singular} process running in the current buffer and starts a new @sc{Singular} process with exactly the same arguments as before. @end itemize Editing input and output: @itemize @bullet @item @code{singular-beginning-of-line} (key @code{C-a}): moves point to beginning of line, then skip past the @sc{Singular} prompt, if any. @item @code{singular-toggle-truncate-lines} (key @code{C-c C-t} or menu @code{Commands->Truncate lines}): toggles whether long lines should be truncated or not. If lines are not truncated, the commands @code{singular-scroll-left} and @code{singular-scroll-right} are useful to scroll left and right, resp. @item @code{singular-dynamic-complete} (key @code{TAB}): performs context specific completion. If point is inside a string, file name completion is done. If point is at the end of a help command (i.e., @code{help} or @code{?}), completion on @sc{Singular} help topics is done. If point is at the end of an example command (i.e., @code{example}), completion is done on @sc{Singular} examples. In all other cases, completion on @sc{Singular} commands is done. @c note: add space between Fold/ Unfold to avoid overfull line @item @code{singular-folding-toggle-fold-latest-output} (key @code{C-c C-o} or menu @code{Commands->Fold/ Unfold Latest Output}): toggles folding of the latest output section. If your last @sc{Singular} command produced a huge output, simply type @code{C-c C-o} and it will be replaced by a single line. @item @code{singular-folding-toggle-fold-at-point} (key @code{C-c C-f} or menu @code{Commands->Fold/Unfold At Point}): toggles folding of the section the point currently is in. @item @code{singular-folding-fold-all-output} (menu @code{Commands->Fold All Output}): folds all @sc{Singular} output, replacing each output section by a single line. @item @code{singular-folding-unfold-all-output} (menu @code{Commands->Unfold All Output}): unfolds all @sc{Singular} output sections showing their true contents. @end itemize Loading of files and @sc{Singular} demo mode: @itemize @bullet @item @code{singular-load-library} (key @code{C-c C-l} or menu @code{Commands->Libraries->other...}): asks for a standard library name or a library file in the minibuffer (hit @code{TAB} for completion) and loads the library into @sc{Singular}. The submenu @code{Libraries} of the @code{Commands} menu also provides a separate menu item for each standard library. @item @code{singular-load-file} (key @code{C-c <} or menu @code{Commands->Load File...}): asks for a file name in the minibuffer (which is expanded using @code{expand-file-name} if given a prefix argument) and loads the file into @sc{Singular}. @item @code{singular-demo-load} (key @code{C-c C-d} or menu @code{Commands->Load Demo...}): asks for a file name of a @sc{Singular} demo file in the minibuffer area (hit @code{SPACE} for completion) and enters the @sc{Singular} demo mode showing the first chunk of the demo. @item @code{singular-demo-exit} (menu @code{Commands->Exit Demo}): exits from @sc{Singular} demo mode and cleans up everything that is left from the demo. @end itemize Help and Customization: @itemize @bullet @item @code{singular-help} (key @code{C-h C-s} or menu @code{Singular->Singular Help}): asks for a @sc{Singular} help topic in the minibuffer (hit @code{TAB} for completion) and shows the help text in a separate buffer. @item @code{singular-example} (key @code{C-c C-e} or menu @code{Singular->Singular Example}): asks for a @sc{Singular} command in the minibuffer (hit @code{TAB} for completion) and executes the example of this command in the current @sc{Singular} buffer. @item @code{customize-group} (menu @code{Singular->Preferences}): enters the customization group of the @sc{Singular} Emacs interface. (If called via @code{M-x customize-group} give argument @code{singular-interactive} in the minibuffer area.) @end itemize @c --------------------------------------------------------------------------- @c --------------------------------------------------------------------------- @node Rings and orderings, Implemented algorithms, Emacs user interface, General concepts @section Rings and orderings @cindex Rings and orderings All non-trivial algorithms in @sc{Singular} require the prior definition of a ring. Such a ring can be @enumerate @item a polynomial ring over a field, @item a localization of a polynomial ring, @item a quotient ring by an ideal of one of 1.@: or 2., @item a tensor product of one of 1.@: or 2. @end enumerate Except for quotient rings, all of these rings are realized by choosing a coefficient field, ring variables, and an appropriate global or local monomial ordering on the ring variables. @xref{Term orderings}, @ref{Mathematical background}. The coefficient field of the rings may be @cindex real @cindex complex @enumerate @item the field of rational numbers @ifinfo @math{Q} @end ifinfo @tex $Q$ @end tex , @item @tex finite fields $Z/p$, $p$ a prime $\le 2147483629$, @end tex @ifinfo finite fields Z/p, p a prime <= 2147483629, @end ifinfo @item @tex finite fields $\hbox{GF}(p^n)$ with $p^n$ elements, $p$ a prime, $p^n \le 2^{15}$, @end tex @ifinfo finite fields GF(p^n) with p^n elements, p a prime, p^n <= 2^15, @end ifinfo @item transcendental extension of @ifinfo @math{Q} @end ifinfo @tex $Q$ @end tex or @ifinfo @math{Z/p} @end ifinfo @tex $Z/p$ @end tex , @item simple algebraic extension of @ifinfo @math{Q} @end ifinfo @tex $Q$ @end tex or @ifinfo @math{Z/p} @end ifinfo @tex $Z/p$ @end tex , @item the field of real numbers represented by floating point numbers of a user defined precision. @item the field of complex numbers represented by (pairs of) floating point numbers of a user defined precision. @end enumerate Throughout this manual, the current active ring in @sc{Singular} is called basering. The reserved name @code{basering} in @sc{Singular} is an alias for the current active ring. The basering can be set by declaring a new ring as described in the following subsections or with the commands @code{setring} and @code{keepring}. @xref{keepring}, @ref{setring}. Objects of ring dependent types are local to a ring. To access them after a change of the basering they have to be mapped using @code{map} or by the functions @code{imap} or @code{fetch}. @xref{Objects}, @ref{fetch}, @ref{imap}, @ref{map}. All changes of the basering in a procedure are local to this procedure unless a @code{keepring} command is used as the last statement of the procedure. @xref{Procedures}, @ref{keepring}. @menu * Examples of ring declarations:: * General syntax of a ring declaration:: * Term orderings:: @end menu @c -------------------------------------- @node Examples of ring declarations, General syntax of a ring declaration, Rings and orderings, Rings and orderings @subsection Examples of ring declarations @cindex Examples of ring declarations The exact syntax of a ring declaration is given in the next two subsections; this subsection lists some examples first. Note that the ordering has to be chosen such that the unit-elements of the ring are precisely those elements with leading monomial 1. For more information, see @ref{Monomial orderings}. Every floating point number in a ring consists of two parts, which may be chosen from the user. The leading part represents the number and the rest is for the numerical stability. Two numbers with a difference only in the rest are equal. @itemize @bullet @item the ring @ifinfo @math{Z/32003[x,y,z]} @end ifinfo @tex $Z/32003[x,y,z]$ @end tex with degree reverse lexicographical ordering. The exact ring declaration may be omitted in the first example since this is the default ring: @smallexample ring r; ring r = 32003,(x,y,z),dp; @end smallexample @item the ring @ifinfo @math{Q[a,b,c,d]} @end ifinfo @tex $Q[a,b,c,d]$ @end tex with lexicographical ordering: @smallexample ring r = 0,(a,b,c,d),lp; @end smallexample @item the ring @ifinfo @math{Z/7[x,y,z]} @end ifinfo @tex $Z/7[x,y,z]$ @end tex with local degree reverse lexicographical ordering. The non-prime 10 is converted to the next lower prime in the second example: @smallexample ring r = 7,(x,y,z),ds; ring r = 10,(x,y,z),ds; @end smallexample @item the ring @tex $Z/7[x_1,\ldots,x_6]$ @end tex @ifinfo Z/7[x1,@dots{},x6] @end ifinfo with lexicographical ordering for @tex $x_1,x_2,x_3$ @end tex @ifinfo x1,x2,x3 @end ifinfo and degree reverse lexicographical ordering for @tex $x_4,x_5,x_6$: @end tex @ifinfo x4,x5,x6: @end ifinfo @smallexample ring r = 7,(x(1..6)),(lp(3),dp); @end smallexample @item the localization of @ifinfo @math{(Q[a,b,c])[x,y,z]} @end ifinfo @tex $(Q[a,b,c])[x,y,z]$ @end tex at the maximal ideal @ifinfo @math{(x,y,z)} @end ifinfo @tex $(x,y,z)$ @end tex : @smallexample ring r = 0,(x,y,z,a,b,c),(ds(3), dp(3)); @end smallexample @item the ring @ifinfo @math{Q[x,y,z]} @end ifinfo @tex $Q[x,y,z]$ @end tex with weighted reverse lexicographical ordering. The variables @ifinfo @math{x} @end ifinfo @tex $x$ @end tex , @ifinfo @math{y} @end ifinfo @tex $y$ @end tex , and @ifinfo @math{z} @end ifinfo @tex $z$ @end tex have the weights 2, 1, and 3, respectively, and vectors are first ordered by components (in descending order) and then by monomials: @smallexample ring r = 0,(x,y,z),(c,wp(2,1,3)); @end smallexample For ascending component order, the component ordering @code{C} has to be used. @item the ring @ifinfo @math{K[x,y,z]} @end ifinfo @tex $K[x,y,z]$ @end tex , where @ifinfo @math{K=Z/7(a,b,c)} @end ifinfo @tex $K=Z/7(a,b,c)$ @end tex denotes the transcendental extension of @ifinfo @math{Z/7} @end ifinfo @tex $Z/7$ @end tex by @ifinfo @math{a} @end ifinfo @tex $a$ @end tex , @ifinfo @math{b} @end ifinfo @tex $b$ @end tex and @ifinfo @math{c} @end ifinfo @tex $c$ @end tex with degree lexicographical ordering: @smallexample ring r = (7,a,b,c),(x,y,z),Dp; @end smallexample @item the ring @ifinfo @math{K[x,y,z]} @end ifinfo @tex $K[x,y,z]$ @end tex , where @ifinfo @math{K=Z/7[a]} @end ifinfo @tex $K=Z/7[a]$ @end tex denotes the algebraic extension of degree 2 of @ifinfo @math{Z/7} @end ifinfo @tex $Z/7$ @end tex by @ifinfo @math{a.} @end ifinfo @tex $a.$ @end tex In other words, @ifinfo @math{K} @end ifinfo @tex $K$ @end tex is the finite field with 49 elements. In the first case, @ifinfo @math{a} @end ifinfo @tex $a$ @end tex denotes an algebraic element over @ifinfo @math{Z/7} @end ifinfo @tex $Z/7$ @end tex with minimal polynomial @tex $\mu_a=a^2+a+3$, @end tex @ifinfo mu_a=a^2+a+3, @end ifinfo in the second case, @ifinfo @math{a} @end ifinfo @tex $a$ @end tex refers to some generator of the cyclic group of units of @ifinfo @math{K} @end ifinfo @tex $K$ @end tex : @smallexample ring r = (7,a),(x,y,z),dp; minpoly = a^2+a+3; ring r = (7^2,a),(x,y,z),dp; @end smallexample @item the ring @ifinfo @math{R[x,y,z]} @end ifinfo @tex $R[x,y,z]$ @end tex , where @ifinfo @math{R} @end ifinfo @tex $R$ @end tex denotes the field of real numbers represented by simple precision floating point numbers. This is a special case: @smallexample ring r = real,(x,y,z),dp; @end smallexample @item the ring @ifinfo @math{R[x,y,z]} @end ifinfo @tex $R[x,y,z]$ @end tex , where @ifinfo @math{R} @end ifinfo @tex $R$ @end tex denotes the field of real numbers represented by floating point numbers of 50 valid decimal digits and the same number of digits for the rest: @smallexample ring r = (real,50),(x,y,z),dp; @end smallexample @item the ring @ifinfo @math{R[x,y,z]} @end ifinfo @tex $R[x,y,z]$ @end tex , where @ifinfo @math{R} @end ifinfo @tex $R$ @end tex denotes the field of real numbers represented by floating point numbers of 10 valid decimal digits and with 50 digits for the rest: @smallexample ring r = (real,10,50),(x,y,z),dp; @end smallexample @item the ring @ifinfo @math{R(j)[x,y,z]} @end ifinfo @tex $R(j)[x,y,z]$ @end tex , where @ifinfo @math{R} @end ifinfo @tex $R$ @end tex denotes the field of real numbers represented by floating point numbers of 30 valid decimal digits and the same number for the rest. @ifinfo @math{j} @end ifinfo @tex $j$ @end tex denotes the imaginary unit. @smallexample ring r = (complex,30,j),(x,y,z),dp; @end smallexample @item the ring @ifinfo @math{R(i)[x,y,z]} @end ifinfo @tex $R(i)[x,y,z]$ @end tex , where @ifinfo @math{R} @end ifinfo @tex $R$ @end tex denotes the field of real numbers represented by floating point numbers of 6 valid decimal digits and the same number for the rest. @ifinfo @math{i} @end ifinfo @tex $i$ @end tex is the default for the imaginary unit. @smallexample ring r = complex,(x,y,z),dp; @end smallexample @item the quotient ring @ifinfo @math{Z/7[x,y,z]} @end ifinfo @tex $Z/7[x,y,z]$ @end tex modulo the square of the maximal ideal @ifinfo @math{(x,y,z)} @end ifinfo @tex $(x,y,z)$ @end tex : @smallexample ring R = 7,(x,y,z), dp; qring r = std(maxideal(2)); @end smallexample @end itemize @c --------------------------------------------------------------------------- @node General syntax of a ring declaration, Term orderings, Examples of ring declarations, Rings and orderings @subsection General syntax of a ring declaration @cindex General syntax of a ring declaration @subsubheading Rings @c ------------------------------------------------------------ @c This piece of text (partially) exists also in the @c file types.doc, chapter "ring declarations". @c If you change something here, change it there, too! @c ------------------------------------------------------------ @table @strong @item Syntax: @code{ring} name @code{=} @code{(}coefficient_field@code{),} @code{(} names_of_ring_variables @code{),} @code{(} ordering @code{);} @item Default: @code{32003,(x,y,z),(dp,C);} @item Purpose: declares a ring and sets it as the current basering. @end table The coefficient_field is given by one of the following: @enumerate @item a non-negative int_expression less or equal 32003. @* The int_expression should either be 0, specifying the field of rational numbers Q, or a prime number p, specifying the finite field with p elements. If it is not a prime number, int_expression is converted to the next lower prime number. @item an expression_list of an int_expression and one or more names. @* The int_expression specifies the characteristic of the coefficient field as described above. The names are used as parameters in transcendental or algebraic extensions of the coefficient field. Algebraic extensions are implemented for one parameter only. In this case, a minimal polynomial has to be defined by assignment to @code{minpoly}. @xref{minpoly}. @item an expression_list of an int_expression and a name. @* The int_expression has to be a prime number p to the power of a positive integer n. This defines the Galois field @tex $\hbox{GF}(p^n)$ with $p^n$ elements, where $p^n$ has to be smaller or equal $2^{15}$. @end tex @ifinfo GF(p^n) with p^n elements, where p^n has to be smaller or equal 2^15. @end ifinfo The given name refers to a primitive element of @tex $\hbox{GF}(p^n)$ @end tex @ifinfo GF(p^n) @end ifinfo generating the multiplicative group. Due to a different internal representation, the arithmetic operations in these coefficient fields are faster than arithmetic operations in algebraic extensions as described above. @item an expression_list of the name @code{real} and two optional int_expression giving the precision in decimal digits and the size for the stabilizing rest. The default for the rest is the same size as for the representation. An exception is the name @code{real} without any integers. These numbers are implemented as machine floating point numbers of single precision. Note that computations over all these fields are not exact. @item an expression_list of the name @code{complex}, two optional int_expression and a name. This specifies the field of complex numbers represented with floating point numbers with a precision similar to @code{real}. An expression_list without int_expression defines a precision and rest with length 6. The name of the imaginary unit is given by the last parameter. Note that computations over these fields are not exact. @end enumerate 'names_of_ring_variables' is a list of names or indexed names. 'ordering' is a list of block orderings where each block ordering is either @enumerate @item @code{lp}, @code{dp}, @code{Dp}, @code{ls}, @code{ds}, or @code{Ds} optionally followed by a size parameter in parentheses. @item @code{wp}, @code{Wp}, @code{ws}, @code{Ws}, or @code{a} followed by a weight vector given as an intvec_expression in parentheses. @item @code{M} followed by an intmat_expression in parentheses. @item @code{c} or @code{C}. @end enumerate For the definition of the orderings, see @ref{Monomial orderings}. If one of coefficient_field, names_of_ring_variables, and ordering consists of only one entry, the parentheses around this entry may be omitted. @c ------------------------------------------------------------ @c End of duplicate piece of text. @c ------------------------------------------------------------ @subsubheading Quotient rings @c ------------------------------------------------------------ @c This piece of text (partially) exists also in the @c file types.doc, chapter "qring declarations", and in @c singular.doc, chapter "Miscellaneous oddities". @c If you change something here, change it there, too! @c ------------------------------------------------------------ @table @strong @item Syntax: @code{qring} name @code{=} ideal_expression @code{;} @item Default: none @item Purpose: declares a quotient ring as the basering modulo ideal_expression. Sets it as current basering. @end table ideal_expression has to be represented by a standard basis. The most convenient way to map objects from a ring to its quotient ring and vice versa is to use the @code{fetch} function (@pxref{fetch}). @sc{Singular} computes in a quotient ring as long as possible with the given representative of a polynomial, say, @code{f}. I.e., it usually does not reduce @code{f} w.r.t. the quotient ideal. This is only done when necessary during standard bases computations or by an explicit reduction using the command @code{reduce(f, std(0))} (@pxref{reduce}). @strong{Example:} @smallexample @c computed example Quotient_rings general.doc:1784 ring r=32003,(x,y),dp; poly f=x3+yx2+3y+4; qring q=std(maxideal(2)); basering; @expansion{} // characteristic : 32003 @expansion{} // number of vars : 2 @expansion{} // block 1 : ordering dp @expansion{} // : names x y @expansion{} // block 2 : ordering C @expansion{} // quotient ring from ideal @expansion{} _[1]=y2 @expansion{} _[2]=xy @expansion{} _[3]=x2 poly g=fetch(r, f); g; @expansion{} x3+x2y+3y+4 reduce(g,std(0)); @expansion{} 3y+4 @c end example Quotient_rings general.doc:1784 @end smallexample @c ------------------------------------------------------------ @c End of duplicate piece of text. @c ------------------------------------------------------------ @c --------------------------------------------------------------------------- @node Term orderings, , General syntax of a ring declaration, Rings and orderings @subsection Term orderings @cindex Monomial orderings, Term orderings Any polynomial (resp.@: vector) in @sc{Singular} is ordered w.r.t. a term ordering (or, monomial ordering), which has to be specified together with the declaration of a ring. @sc{Singular} stores and displays a polynomial (resp.@: vector) w.r.t. this ordering, i.e., the greatest monomial (also called the leading monomial) is the first one appearing in the output polynomial, and the smallest monomial is the last one. @strong{Remark:} The novice user should generally use the ordering @code{dp} for computations in the polynomial ring @tex $K[x_1,\ldots,x_n]$, @end tex @ifinfo K[x1,...,xn], @end ifinfo resp.@: @code{ds} for computations in the localization @tex $\hbox{Loc}_{(x)}K[x_1,\ldots,x_n])$. @end tex @ifinfo Loc_(x)K[x1,...,xn]). @end ifinfo For more details, see @ref{Polynomial data}. In a ring declaration, @sc{Singular} offers the following orderings: @enumerate @item Global orderings @table @asis @item @code{lp} lexicographical ordering @item @code{dp} degree reverse lexicographical ordering @item @code{Dp} degree lexicographical ordering @item @code{wp(} intvec_expression @code{)} weighted reverse lexicographical ordering; the weight vector may consist of positive integers only. @item @code{Wp(} intvec_expression @code{)} weighted lexicographical ordering; the weight vector may consist of positive integers only. @end table Global orderings are well-orderings, i.e., @ifinfo @math{1 < x} @end ifinfo @tex $1 < x$ @end tex for each ring variable @ifinfo @math{x} @end ifinfo @tex $x$ @end tex . They are denoted by a @code{p} as the second character in their name. @item Local orderings @table @asis @item @code{ls} negative lexicographical ordering @item @code{ds} negative degree reverse lexicographical ordering @item @code{Ds} negative degree lexicographical ordering @item @code{ws(} intvec_expression @code{)} (general) weighted reverse lexicographical ordering; the first element of the weight vector has to be non-zero. @item @code{Ws(} intvec_expression @code{)} (general) weighted lexicographical ordering; the first element of the weight vector has to be non-zero. @end table Local orderings are not well-orderings. They are denoted by an @code{s} as the second character in their name. @item Matrix orderings @table @asis @item @code{M(} intmat_expression @code{)} intmat_expression has to be an invertible square matrix @end table Using matrix orderings, @sc{Singular} can compute standard bases w.r.t.@: any monomial ordering that is compatible with the natural semi-group structure on the monomials. In practice, the predefined global and local orderings together with the block orderings should be sufficient in most cases. These orderings are faster than their corresponding matrix orderings since evaluation of a matrix ordering is time consuming. @item Extra weight vector @table @asis @item @code{a(} intvec_expression @code{)} an extra weight vector @code{a(} intvec_expression @code{)} may precede any monomial ordering @end table @item Product ordering @table @asis @item @code{(} ordering [ @code{(} int_expression @code{)} ]@code{,} @dots{} @code{)} any of the above orderings and the extra weight vector may be combined to yield product or block orderings @end table The orderings @code{lp}, @code{dp}, @code{Dp}, @code{ls}, @code{ds}, and @code{Ds} may be followed by an int_expression in parentheses giving the size of the block. For the last block the size is calculated automatically. For the weighted orderings the size of the block is given by the size of the weight vector. The same holds analogously for matrix orderings. @item Module orderings @table @asis @itemx @code{(} ordering@code{,} @dots{}@code{, C )} @item @code{(} ordering@code{,} @dots{}@code{, c )} sort polynomial vectors by the monomial ordering first, then by components @itemx @code{( C,} ordering@code{,} @dots{} @code{)} @item @code{( c,} ordering@code{,} @dots{} @code{)} sort polynomial vectors by components first, then by the monomial ordering @end table Here a capital @code{C} sorts generators in ascending order, i.e., @code{gen(1)} < @code{gen(2)} < @enddots{} A small @code{c} sorts in descending order, i.e., @code{gen(1)} > @code{gen(2)} > @enddots{} It is not necessary to specify the module ordering explicitly since @code{(} ordering@code{,} @dots{}@code{, C )} is the default. In fact, @code{c} or @code{C} may be specified anywhere in a product ordering specification, not only at its beginning or end. All monomial block orderings preceding the component ordering have higher precedence, all monomial block orderings following after it have lower precedence. @end enumerate For a mathematical description of these orderings, see @ref{Polynomial data}. @c --------------------------------------------------------------------------- @node Implemented algorithms, The SINGULAR language, Rings and orderings, General concepts @section Implemented algorithms @cindex Implemented algorithms The basic algorithm in @sc{Singular} is a general standard basis algorithm for any monomial ordering which is compatible with the natural semi-group structure of the exponents. This includes well-orderings (Buchberger algorithm to compute a Groebner basis) and tangent cone orderings (Mora algorithm) as special cases. Nonetheless, there are a lot of other important algorithms: @itemize @bullet @item Algorithms to compute the standard operations on ideals and modules: intersection, ideal quotient, elimination, etc. @item Different Syzygy algorithms and algorithms to compute free resolutions of modules. @item Combinatorial algorithms to compute dimensions, Hilbert series, multiplicities, etc. @item Algorithms for univariate and multivariate polynomial factorization, resultant and gcd computations. @end itemize @c ---------------------------------------------------------------------- @subheading Commands to compute standard bases @table @code @item facstd @ref{facstd} @*computes a list of Groebner bases via the Factorizing Groebner Basis Algorithm, i.e., their intersection has the same radical as the original ideal. It need not be a Groebner basis of the given ideal. The intersection of the zero-sets is the zero-set of the given ideal. @item fglm @ref{fglm} @*computes a Groebner basis provided that a reduced Groebner basis w.r.t.@: another ordering is given. Implements the so-called FGLM (Faugere, Gianni, Lazard, Mora) algorithm. The given ideal must be zero-dimensional. @item groebner @ref{groebner}@* computes a standard resp.@: Groebner bases using a heuristically chosen method. This is the preferred method to compute a standard resp.@: Groebner bases. @item mstd @ref{mstd} @*computes a standard basis and a minimal set of generators. @item std @ref{std} @*computes a standard resp.@: Groebner basis. @item stdfglm @ref{stdfglm} @*computes a Groebner basis in a ring with a ``difficult'' ordering (e.g., lexicographical) via @code{std} w.r.t.@: a ``simple'' ordering and @code{fglm}. The given ideal must be zero-dimensional. @item stdhilb @ref{stdhilb}@* computes a Groebner basis in a ring with a ``difficult'' ordering (e.g., lexicographical) via @code{std} w.r.t.@: a ``simple'' ordering and a @code{std} computation guided by the Hilbert series. @end table @c ---------------------------------------------------------------------- @subheading Further processing of standard bases The next commands require the input to be a standard basis. @table @code @item degree @ref{degree} @*computes the (Krull) dimension, codimension and the multiplicity. The result is only displayed on the screen. @item dim @ref{dim}@* computes the dimension of the ideal resp.@: module. @item highcorner @ref{highcorner}@* computes the smallest monomial not contained in the ideal resp.@: module. The ideal resp.@: module has to be finite dimensional as a vector space over the ground field. @item hilb @ref{hilb}@* computes the first, and resp.@: or, second Hilbert series of an ideal resp.@: module. @item kbase @ref{kbase}@* computes a vector space basis (consisting of monomials) of the quotient of a ring by an ideal resp.@: of a free module by a submodule. The ideal resp.@: module has to be finite dimensional as a vector space over the ground field and has to be represented by a standard basis w.r.t.@: the ring ordering. @item mult @ref{mult}@* computes the degree of the monomial ideal resp.@: module generated by the leading monomials of the input. @item reduce @ref{reduce}@* reduces a polynomial, vector, ideal or module to its normal form with respect to an ideal or module represented by a standard basis. @item vdim @ref{vdim}@* computes the vector space dimension of a ring (resp.@: free module) modulo an ideal (resp.@: module). @end table @c ---------------------------------------------------------------------- @subheading Commands to compute resolutions @table @code @item res @ref{res}@* computes a free resolution of an ideal or module using a heuristically chosen method. This is the preferred method to compute free resolutions of ideals or modules. @item lres @ref{lres}@* computes a free resolution of an ideal or module with La Scala's method. The input needs to be homogeneous. @item mres @ref{mres}@* computes a minimal free resolution of an ideal or module with the Syzygy method. @item sres @ref{sres}@* computes a free resolution of an ideal or module with Schreyer's method. The input has to be a standard basis. @item nres @ref{nres}@* computes a free resolution of an ideal or module with the standard basis method. @item syz @ref{syz}@* computes the first Syzygy (i.e., the module of relations of the given generators). @end table @c ---------------------------------------------------------------------- @subheading Further processing of resolutions @table @code @item betti @ref{betti}@* computes the graded Betti numbers of a module from a free resolution. @item minres @ref{minres}@* minimizes a free resolution of an ideal or module. @item regularity @ref{regularity}@* computes the regularity of a homogeneous ideal resp.@: module from a given minimal free resolution. @end table @c ---------------------------------------------------------------------- @subheading Processing of polynomials @table @code @item char_series @ref{char_series}@* computes characteristic sets of polynomial ideals. @item extgcd @ref{extgcd}@* computes the extended gcd of two polynomials. Implemented as extended Euclidean Algorithm. Applicable for univariate polynomials only. @item factorize @ref{factorize}@* computes factorization of univariate and multivariate polynomials into irreducible factors. The most basic algorithm is univariate factorization in prime characteristic. The Cantor-Zassenhaus Algorithm is used in this case. For characteristic 0, a univariate Hensel-lifting is done to lift from prime characteristic to characteristic 0. For multivariate factorization in any characteristic, the problem is reduced to the univariate case first, then a multivariate Hensel-lifting is used to lift the univariate factorization. Note that there is no factorization of polynomials over algebraic extensions of Q. @item gcd @ref{gcd}@* computes greatest common divisors of univariate and multivariate polynomials. For prime characteristic, a subresultant gcd is used. In characteristic 0, a modular algorithm is used for the univariate case. For the multivariate case, the EZGCD is used. Note that there is no gcd calculation for polynomials over algebraic extensions of Q. @item resultant @ref{resultant}@* computes the resultant of two univariate polynomials using the subresultant algorithm. Multivariate polynomials are considered as univariate polynomials in the main variable (which has to be specified by the user). @item vandermonde @ref{vandermonde}@* interpolates a polynomial from its values at several points @end table @c ---------------------------------------------------------------------- @subheading Matrix computations @table @code @item bareiss @ref{bareiss}@* implements sparse Gauss-Bareiss method for elimination (matrix triangularization) in arbitrary integral domains. @item det @ref{det}@* computes the determinant of a square matrix. For matrices with integer entries a modular algorithm is used. For other domains the Gauss-Bareiss method is used. @item minor @ref{minor}@* computes all minors (=subdeterminants) of a given size for a matrix. @end table @c ---------------------------------------------------------------------- @subheading Numeric computations @table @code @item laguerre @ref{laguerre}@* computes all (complex) roots of a univariate polynomial @item uressolve @ref{uressolve}@* find all roots of 0-dimensional ideal i with multivariate resultants @end table @c ---------------------------------------------------------------------- @subheading Controlling computations @table @code @item option @ref{option}@* allows setting of options for manipulating the behavior of computations (such as reduction strategies) and for showing protocol information indicating the progress of a computation. @end table @c --------------------------------------------------------------------------- @node The SINGULAR language, Input and output, Implemented algorithms, General concepts @section The SINGULAR language @cindex The SINGULAR language @sc{Singular} interprets commands given interactively on the command line as well as given in the context of user-defined procedures. In fact, @sc{Singular} makes no distinction between these two cases. Thus, @sc{Singular} offers a powerful programming language as well as an easy-to-use command line interface without differences in syntax or semantics. In the following, the basic language concepts such as commands, expressions, names, objects, etc., are discussed. @xref{Procedures}, and @ref{Libraries}, for the concepts of procedures and libraries. In many aspects, the @sc{Singular} language is similar to the C programming language. For a description of some of the subtle differences, see @ref{Major differences to the C programming language}. @subsubheading Elements of the language The major building blocks of the @sc{Singular} language are expressions, commands, and control structures. The notion of expressions in the @sc{Singular} and the C programming language are identical, whereas the notion of commands and control structures only roughly corresponds to the C statements. @itemize @bullet @item An ``expression'' is a sequence of operators, functions, and operands that specifies a computation. An expression always results in a value of a specific type. @xref{Data types}, and its subsections (e.g., @ref{poly expressions}), for information on how to build expressions. @item A ``command'' is either a declaration, an assignment, a call to a function without return value, or a print command. For detailed information, see @ref{General command syntax}. @item ``Control structures'' determine the execution sequence of commands. @sc{Singular} provides control structures for conditional execution (@code{if} @dots{} @code{else}) and iteration (@code{for} and @code{while}). Commands may be grouped in pairs of @code{@{} @code{@}} (curly brackets) to form blocks. @xref{Control structures}, for more information. @end itemize @subsubheading Other notational conventions For user-defined functions, the notion of ``procedure'' and ``function'' are synonymous. As already mentioned above, functions without return values are called commands. Furthermore, whenever convenient, the term ``command'' is used for a function, even if it does return a value. @menu * General command syntax:: * Special characters:: * Names:: * Objects:: * Type conversion and casting:: * Flow control:: @end menu @c --------------------------------------------------------------------------- @node General command syntax, Special characters, The SINGULAR language, The SINGULAR language @subsection General command syntax @cindex General command syntax In @sc{Singular} a command is either a declaration, an assignment, a call to a function without return value, or a print command. The general form of a command is described in the following subsections. @subsubheading Declaration @enumerate @item type name @code{=} expression @code{;} @* declares a variable with the given name of the given type and assigns the expression as initial value to it. Expression is an expression of the specified type or one that can be converted to that type. @xref{Type conversion and casting}. @item type name_list @code{=} expression_list @code{;} @* declares variables with the given names and assigns successively each expression of expression_list to the corresponding name of name_list. Both lists must be of the same length. Each expression in expression_list is an expression of the specified type or one that can be converted to that type. @xref{Type conversion and casting}. @item type name @code{;} @* declares a variable with the given name of the given type and assigns the default value of the specific type to it. @end enumerate @xref{Names}, for more information on declarations. @xref{Data types}, for a description of all data types known to @sc{Singular}. @smallexample ring r; // the default ring poly f,g = x^2+y^3,xy+z2; // the polynomials f=x^2+y^3 and g=x*y+z^2 ideal I = f,g; // the ideal generated by f and g matrix m[3][3]; // a 3 x 3 zero matrix int i=2; // the integer i=2 @end smallexample @subsubheading Assignment @enumerate 4 @item name @code{=} expression @code{;} @* assigns expression to name. @item name_list @code{=} expression_list @code{;} @* assigns successively each expression of expression_list to the corresponding name of name_list. Both lists must be of the same length. This is not a simultaneous assignment. Thus, @code{f, g = g, f;} does not swap the values of @code{f} and @code{g}, but rather assigns @code{g} to both @code{f} and @code{g}. @end enumerate There must be a type conversion of the type of expression to the type of name. @xref{Type conversion and casting}. An assignment itself does not yield a value. Hence, compound assignments like @code{i = j = k;} are not allowed and result in an error. @smallexample f = x^2 + y^2 ; // overwrites the old value of f I = jacob(f); f,g = I[1],x^2+y^2 ; // overwrites the old values of f and g @end smallexample @subsubheading Function without return value @enumerate 6 @item function_name [ @code{(} argument_list @code{)} ] @code{;} @* calls function function_name with arguments argument_list. @end enumerate The function may have output (not to be confused with a return value of type string). @xref{Functions}. Functions without a return value are specified there to have a return type 'none'. Some of these functions have to be called without parentheses, e.g., @code{help}, @code{LIB}. @smallexample @c computed example Function_without_return_value general.doc:2344 ring r; ideal i=x2+y2,x; i=std(i); degree(i); // degree has no return value but prints output @expansion{} 2 @c end example Function_without_return_value general.doc:2344 @end smallexample @subsubheading Print command @enumerate 7 @item expression @code{;} @* prints the value of an expression, for example, of a variable. @end enumerate Use the function @code{print} (or the procedure show from inout.lib) to get a pretty output of various data types, e.g., matrix or intmat. @xref{print}. @smallexample @c computed example Print_command general.doc:2364 int i=2; i; @expansion{} 2 intmat m[2][2]=1,7,10,0; print(m); @expansion{} 1 7 @expansion{} 10 0 @c end example Print_command general.doc:2364 @end smallexample @c ------------------------------------------------------------ @node Special characters, Names, General command syntax, The SINGULAR language @subsection Special characters @cindex Special characters The following characters and operators have special meaning: @table @asis @item @code{=} @cindex = assignment @item @code{(}, @code{)} @cindex ( @cindex ) @cindex indexed names in expressions, for indexed names and for argument lists @item @code{[}, @code{]} @cindex [ @cindex ] access operator for strings, integer vectors, ideals, matrices, polynomials, resolutions, and lists. Used to build vectors of polynomials. Example: @code{s[3]}, @code{m[1,3]}, @code{i[1..3]}, @code{[f,g+x,0,0,1]}. @item @code{+} @cindex + addition operator @item @code{-} @cindex - subtraction operator @item @code{*} @cindex * multiplication operator @item @code{/} @cindex / division operator. @xref{Miscellaneous oddities}, for the difference between the division operators @code{/} and @code{div}. @item @code{%} @cindex % modulo operator @item @code{^} or @code{**} @cindex ^ @cindex ** exponentiation operator @item @code{==} @cindex == comparison operator equal @item @code{!=} or @code{<>} @cindex != @cindex <> comparison operator not equal @item @code{>=} @cindex >= comparison operator bigger or equal @item @code{>} @cindex > comparison operator bigger @item @code{<=} @cindex <= comparison operator smaller or equal @item @code{<} @cindex < comparison operator smaller. Also used for file input. @xref{filecmd}. @item @code{!} @cindex ! boolean operator not @item @code{&&} @cindex && boolean operator and @item @code{||} @cindex || boolean operator or @item @code{"} @cindex " delimiter for string constants @item @code{`} @cindex ` delimiter for name substitution @item @code{?} @cindex ? synonym for @code{help} @item @code{//} @cindex // comment delimiter. Comment extends to end of line. @item @code{/*} @cindex // comment delimiter. Starts a comment which ends with @code{*/}. @item @code{*/} @cindex // comment delimiter. Ends a comment which starts with @code{/*}. @item @code{;} @cindex ; statement separator @item @code{,} separator for expression lists and function arguments @item @code{\} @cindex \ escape character for @code{"} and @code{\} within strings @item @code{..} @cindex .. interval specifier returning intvec. E.g., @code{1..3} which is equivalent to the intvec @code{1, 2, 3}. @item @code{_} @cindex _ value of expression last displayed @item @code{~} @cindex ~ breakpoint in procedures @item @code{#} @cindex # list of parameters in procedures without explicit parameter list @item @code{$} @cindex $ terminates @sc{Singular} @end table @c ------------------------------------------------------------ @node Names, Objects, Special characters, The SINGULAR language @subsection Names @cindex Names @cindex Identifiers, syntax of @sc{Singular} is a strongly typed language. This means that all names (= identifiers) have to be declared prior to their use. For the general syntax of a declaration, see the description of declaration commands (@pxref{General command syntax}). @xref{Data types}, for a description of @sc{Singular}'s data types. @xref{typeof}, for a short overview of possible types. To get information on a name and the object named by it, the @code{type} command may be used (@pxref{type}). It is possible to redefine an already existing name if doing so does not change its type. A redefinition first sets the variable to the default value and then computes the expression. The difference between redefining and overwriting a variable is shown in the following example: @smallexample @c computed example Names general.doc:2507 int i=3; i=i+1; // overwriting i; @expansion{} 4 int i=i+1; // redefinition @expansion{} // ** redefining i ** i; @expansion{} 1 @c end example Names general.doc:2507 @end smallexample User defined names should start with a letter and consist of letters and digits only. As an exception to this rule, the characters @code{@@}, and @code{_} may be used as part of a name, too. Capital and small letters are distinguished. Indexed names are built as a name followed by an int_expression in parentheses. A list of indexed names can be built as a name followed by an intvec_expression in parentheses. @smallexample @c computed example Names_1 general.doc:2525 ring R; int n=3; ideal j(3); ideal j(n); // is equivalent to the above @expansion{} // ** redefining j(3) ** ideal j(2)=x; j(2..3); @expansion{} j(2)[1]=x j(3)[1]=0 @c end example Names_1 general.doc:2525 @end smallexample Names may not coincide with reserved names (keywords). Type @code{reservedName();} to get a list of the reserved names. @xref{reservedName}. Names should not interfere with names of ring variables or, more generally, with monomials. @xref{Identifier resolution}. @* The command @code{listvar} provides a list of the names in use (@pxref{listvar}). The most recently printed expression is available under the special name @code{_}, e.g., @smallexample @c computed example Names_2 general.doc:2546 ring r; ideal i=x2+y3,y3+z4; std(i); @expansion{} _[1]=y3+x2 @expansion{} _[2]=z4-x2 ideal k=_; k*k+x; @expansion{} _[1]=y6+2x2y3+x4 @expansion{} _[2]=y3z4+x2z4-x2y3-x4 @expansion{} _[3]=z8-2x2z4+x4 @expansion{} _[4]=x size(_[3]); @expansion{} 3 @c end example Names_2 general.doc:2546 @end smallexample A string_expression enclosed in @code{`}@dots{}@code{`} (back ticks) evaluates to the value of the variable named by the string_expression. This feature is referred to as name substitution. @smallexample @c computed example Names_3 general.doc:2561 int foo(1)=42; string bar="foo"; `bar+"(1)"`; @expansion{} 42 @c end example Names_3 general.doc:2561 @end smallexample @c ------------------------------------------------------------ @node Objects, Type conversion and casting, Names, The SINGULAR language @subsection Objects @cindex Objects Every object in @sc{Singular} has a type and a value. In most cases it has also a name and in some cases an attribute list. The value of an object may be examined simply by printing it with a print command: object@code{;}. The type of an object may be determined by means of the @code{typeof} function, the attributes by means of the @code{attrib} function (@ref{typeof}, @ref{attrib}): @smallexample @c computed example Objects general.doc:2581 ring r=0,x,dp; typeof(10); @expansion{} int typeof(10000000000000000); @expansion{} number typeof(r); @expansion{} ring attrib(x); @expansion{} no attributes attrib(std(ideal(x))); @expansion{} attr:isSB, type int @c end example Objects general.doc:2581 @end smallexample Each object of type @code{poly}, @code{ideal}, @code{vector}, @code{module}, @code{map}, @code{matrix}, @code{number}, or @code{resolution} belongs to a specific ring. Also @code{list}, if at least one of the objects contained in the list belongs to a ring. These objects are local to the ring. Their names can be used for other objects in other rings. Objects from one ring can be mapped to another ring using maps or with the commands @code{fetch} or @code{imap}. @xref{map}, @ref{fetch}, @ref{imap}. All other types do not belong to a ring and can be accessed within every ring and across rings. They can be declared even if there is no active basering. @c ------------------------------------------------------------ @node Type conversion and casting, Flow control, Objects, The SINGULAR language @subsection Type conversion and casting @subsubheading Type conversion @cindex Type conversion Assignments convert the type of the right-hand side to the type of the left-hand side of the assignment, if possible. Operators and functions which require certain types of operands can also implicitly convert the type of an expression. It is, for example, possible to multiply a polynomial by an integer because the integer is automatically converted to a polynomial. Type conversions do not act transitively. Possible conversions are: @c ------------------------------------------------ @c Do not delete the leading `@ ' for indentation of the whole table. The @c table is indented since regular @tables are indented by a small amount, @c too. @c ------------------------------------------------ @multitable @columnfractions .05 .18 .81 @item @ 1. @tab @code{int} @tab @expansion{} @code{ideal} @item @ 2. @tab @code{poly} @tab @expansion{} @code{ideal} @item @ 3. @tab @code{intvec} @tab @expansion{} @code{intmat} @item @ 4. @tab @code{int} @tab @expansion{} @code{intvec} @item @ 5. @tab @code{int} @tab @expansion{} @code{intmat} @item @ 6. @tab @code{string} @tab @expansion{} @code{link} @item @ 7. @tab @code{resolution} @tab @expansion{} @code{list} @item @ 8. @tab @code{ideal} @tab @expansion{} @code{matrix} @item @ 9. @tab @code{int} @tab @expansion{} @code{matrix} @item @ 10. @tab @code{intmat} @tab @expansion{} @code{matrix} @item @ 11. @tab @code{intvec} @tab @expansion{} @code{matrix} @item @ 12. @tab @code{module} @tab @expansion{} @code{matrix} @item @ 13. @tab @code{number} @tab @expansion{} @code{matrix} @item @ 14. @tab @code{poly} @tab @expansion{} @code{matrix} @item @ 15. @tab @code{vector} @tab @expansion{} @code{matrix} @item @ 16. @tab @code{ideal} @tab @expansion{} @code{module} @item @ 17. @tab @code{matrix} @tab @expansion{} @code{module} @item @ 18. @tab @code{vector} @tab @expansion{} @code{module} @item @ 19. @tab @code{int} @tab @expansion{} @code{number} @item @ 20. @tab @code{int} @tab @expansion{} @code{poly} @item @ 21. @tab @code{number} @tab @expansion{} @code{poly} @item @ 22. @tab @code{string} @tab @expansion{} @code{proc} @item @ 23. @tab @code{list} @tab @expansion{} @code{resolution} @item @ 24. @tab @code{int} @tab @expansion{} @code{vector} (i @expansion{} i*@code{gen(1)}) @item @ 25. @tab @code{poly} @tab @expansion{} @code{vector} (p @expansion{} p*@code{gen(1)}) @end multitable @subsubheading Type casting @cindex Type casting An expression can be casted to another type by using a type cast expression: @* type @code{(} expression @code{)}. Possible type casts are: @c ------------------------------------------------ @c Do not delete the leading `@ ' for indentation of the whole table. The @c table is indented since regular @tables are indented by a small amount, @c too. @c ------------------------------------------------ @multitable @columnfractions .05 .15 .83 @item @ @tab to @tab from @item @ @tab @code{ideal} @tab expression lists of @code{int}, @code{number}, @code{poly} @item @ @tab @code{ideal} @tab @code{int}, @code{matrix}, @code{module}, @code{number}, @code{poly}, @code{vector} @item @ @tab @code{int} @tab @code{number}, @code{poly} @item @ @tab @code{intvec} @tab expression lists of @code{int}, @code{intmat} @item @ @tab @code{intmat} @tab @code{intvec} (@pxref{intmat type cast}) @item @ @tab @code{list} @tab expression lists of any type @item @ @tab @code{matrix} @tab @code{module}, @code{ideal}, @code{vector}, @code{matrix}. @* There are two forms to convert something to a matrix: if @code{matrix(} expression @code{)} is used then the size of the matrix is determined by the size of expression. @* But @code{matrix(} expression @code{,} m @code{,} n @code{)} may also be used - the result is a @tex $ m \times n $ @end tex @ifinfo m x n @end ifinfo matrix (@pxref{matrix type cast}) @item @ @tab @code{module} @tab expression lists of @code{int}, @code{number}, @code{poly}, @code{vector} @item @ @tab @code{module} @tab @code{ideal}, @code{matrix}, @code{vector} @item @ @tab @code{number} @tab @code{poly} @item @ @tab @code{poly} @tab @code{int}, @code{number} @item @ @tab @code{string} @tab any type (@pxref{string type cast}) @end multitable @strong{Example:} @smallexample @c computed example Type_casting general.doc:2743 ring r=0,x,(c,dp); number(3x); @expansion{} 0 number(poly(3)); @expansion{} 3 ideal i=1,2,3,4,5,6; print(matrix(i)); @expansion{} 1,2,3,4,5,6 print(matrix(i,3,2)); @expansion{} 1,2, @expansion{} 3,4, @expansion{} 5,6 vector v=[1,2]; print(matrix(v)); @expansion{} 1, @expansion{} 2 module(matrix(i,3,2)); @expansion{} _[1]=[1,3,5] @expansion{} _[2]=[2,4,6] @c end example Type_casting general.doc:2743 @end smallexample @c ------------------------------------------------------------ @node Flow control, ,Type conversion and casting, The SINGULAR language @subsection Flow control @cindex Flow control @cindex block A block is a sequence of commands surrounded by @{ and @}. @smallexample @{ command; @dots{} @} @end smallexample Blocks are used whenever @sc{Singular} is used as a structured programming language. The @code{if} and @code{else} structures allow conditional execution of blocks (see @ref{if}, @ref{else}). @code{for} and @code{while} loops are available for repeated execution of blocks (see @ref{for}, @ref{while}). In procedure definitions the main part and the example section are blocks as well(see @ref{proc}). @menu * break:: * quit:: * keepring:: * export:: * if:: * else:: * for:: * while:: * proc:: * return:: * continue:: @end menu @c ---------------------------------------------------------------------- @c ---------------------------------------------------------------------- @node Input and output, Procedures, The SINGULAR language, General concepts @section Input and output @cindex input @cindex output @sc{Singular}'s input and output (short, I/O) is realized using links. Links are the communication channels of @sc{Singular}, i.e., something @sc{Singular} can write to and read from. In this section, a short overview of the usage of links and of the different link types is given. For loading of libraries, see @ref{LIB}. For executing program scripts, see @ref{filecmd}. @subheading Monitoring A special form of I/O is monitoring. When monitoring is enabled, @sc{Singular} makes a typescript of everything printed on your terminal to a file. This is useful to create a protocol of a @sc{Singular} session. The @code{monitor} command enables and disables this feature (@pxref{monitor}). @subheading How to use links Recall that links are the communication channels of @sc{Singular}, i.e., something @sc{Singular} can write to and read from using the functions @code{write} and @code{read}. There are furthermore the functions @code{dump} and @code{getdump} which store resp.@: retrieve the content of an entire @sc{Singular} session to, resp.@: from, a link. The @code{dump} and @code{getdump} commands are not available for DBM links. For more information, see @ref{write}, @ref{read}, @ref{dump}, @ref{getdump}. @strong{Example:} @smallexample @c computed example How_to_use_links general.doc:2830 ring r; poly p = x+y; dump("MPfile:w test.mp"); // dump the session to the file test.mp kill r; // kill the basering listvar(); @expansion{} // LIB [0] string standard.lib getdump("MPfile:r test.mp");// read the dump from the file listvar(); @expansion{} // r [0] *ring @expansion{} // p [0] poly @expansion{} // LIB [0] string standard.lib @c end example How_to_use_links general.doc:2830 @end smallexample Specifying a link can be as easy as specifying a filename as a string. Except for MPtcp links, links even do not need to be explicitly opened or closed before, resp.@: after, they are used. To explicitly open or close a link, the @code{open}, resp.@: @code{close}, commands may be used (see @ref{open}, @ref{close}). Links have various properties which can be queried using the @code{status} function (@pxref{status}). @strong{Example:} @smallexample @c computed example How_to_use_links_1 general.doc:2851 link l = "MPtcp:fork"; l; @expansion{} // type : MPtcp @expansion{} // mode : fork @expansion{} // name : @expansion{} // open : no @expansion{} // read : not ready @expansion{} // write: not ready open(l); status(l, "open"); @expansion{} yes close(l); status(l, "open"); @expansion{} no @c end example How_to_use_links_1 general.doc:2851 @end smallexample @subheading ASCII links Data that can be converted to a string that can be written into files for storage or communication with other programs. The data are written in plain ASCII format. Reading from an ASCII link returns a string --- conversion into other data is up to the user. This can be done, for example, using the command @code{execute} (@pxref{execute}). ASCII links should primarily be used for storing small amounts of data, especially if it might become necessary to manually inspect or manipulate the data. @xref{ASCII links}, for more information. @strong{Example:} @smallexample @c computed example ASCII_links general.doc:2876 // (over)write file test.ascii, link is specified as string write(":w test.ascii", "int i =", 3, ";"); // reading simply returns the string read("test.ascii"); @expansion{} int i = @expansion{} 3 @expansion{} ; @expansion{} // but now test.ascii is "executed" execute(read("test.ascii")); i; @expansion{} 3 @c end example ASCII_links general.doc:2876 @end smallexample @subheading MPfile links Data is stored in the binary MP format. Read and write access is very fast compared to ASCII links. All data (including such data that cannot be converted to a string) can be written to an MPfile link. Reading from an MPfile link returns the written expressions (i.e., not a string, in general). MPfile links should primarily be used for storing large amounts of data (like dumps of the content of an entire @sc{Singular} session), and if the data to be stored cannot be easily converted from or to a string (like rings, or maps). MPfile links are implemented on Unix-like operating systems only. @xref{MPfile links}, for more information. @strong{Example:} @smallexample @c computed example MPfile_links general.doc:2905 ring r; // (over)write MPfile test.mp, link is specified as string write("MPfile:w test.mp", x+y); kill r; def p = read("MPfile:r test.mp"); typeof(p); p; @expansion{} poly @expansion{} x+y @c end example MPfile_links general.doc:2905 @end smallexample @subheading MPtcp links Data is communicated with other processes (e.g., @sc{Singular} processes) which may run on the same computer or on different ones. Data exchange is accomplished using TCP/IP links in the binary MP format. Reading from an MPtcp link returns the written expressions (i.e., not a string, in general). MPtcp links should primarily be used for communications with other programs or for parallel computations (see, for example, @ref{Parallelization with MPtcp links}). MPtcp links are implemented on Unix-like operating systems only. @xref{MPtcp links}, for more information. @strong{Example:} @smallexample @c computed example MPtcp_links general.doc:2932 ring r; link l = "MPtcp:launch"; // declare a link explicitly open(l); // needs an open, launches another SINGULAR as a server write(l, x+y); kill r; def p = read(l); typeof(p); p; @expansion{} poly @expansion{} x+y close(l); // shuts down SINGULAR server @c end example MPtcp_links general.doc:2932 @end smallexample @subheading DBM links Data is stored in and accessed from a data base. Writing is accomplished by a key and a value and associates the value with the key in the specified data base. Reading is accomplished w.r.t.@: a key, the value associated to it is returned. Both the key and the value have to be specified as strings. Hence, DBM links may be used only for data which may be converted to or from strings. DBM links should primarily be used when data needs to be accessed not in a sequential way (like with files) but in an associative way (like with data bases). @xref{DBM links}, for more information. @strong{Example:} @smallexample @c computed example DBM_links general.doc:2960 ring r; // associate "x+y" with "mykey" write("DBM:w test.dbm", "mykey", string(x+y)); // get from data base what is stored under "mykey" execute(read("DBM: test.dbm", "mykey")); @expansion{} x+y @c end example DBM_links general.doc:2960 @end smallexample @c --------------------------------------------------------------------------- @node Procedures, Libraries, Input and output, General concepts @section Procedures @cindex Procedures Procedures contain sequences of commands of the @sc{Singular} language. They are used to extend the set of commands with user defined commands. Procedures are defined by either typing them on the command line or by loading them from a so-called library file with the LIB command, see @ref{LIB}. Procedures are invoked like normal built-in commands, i.e., by typing their name followed by the list of arguments in parentheses. The invocation then executes the sequence of commands stored in the specified procedure. All defined procedures can be displayed by the command @code{listvar(proc);}. @menu * Procedure definition:: * Names in procedures:: * Parameter list:: * Procedure commands:: @end menu @c ------------------------------------------------- @node Procedure definition, Names in procedures, Procedures, Procedures @subsection Procedure definition @cindex Procedure definition @cindex procedures, static @cindex static procedures @c ------------------------------------------------------------ @c This piece of text exists also in the file types.doc, @c chapter "proc declaration". @c If you change something here, change it there, too! @c ------------------------------------------------------------ @table @strong @item Syntax: [@code{static}] @code{proc} proc_name [parameter_list] @*["help_text"] @*@code{@{} @* @tex \quad @end tex procedure_body @*@code{@}} @*[@code{example} @*@code{@{} @* @tex \quad @end tex sequence_of_commands; @*@code{@}}] @item Purpose: defines a new function, the @code{proc} proc_name, with the additional information help_text, which is copied to the screen by @code{help proc_name;} and the @code{example} section which is executed by @code{example proc_name;}. @* The help_text, the parameter_list, and the example section are optional. The default for a parameter_list is @code{(list #)}, see @ref{Parameter list}. The help and example sections are ignored if the procedure is defined @ifset namespaces interactively, i.e., if it was not loaded from a file by a @ref{load} command. @end ifset @ifclear namespaces interactively, i.e., if it was not loaded from a file by a LIB command (@ref{LIB}). @end ifclear @* Specifying @code{static} in front of the proc-definition (in a library file) makes this procedure local to the library, i.e., accessible only for the other procedures in the same library, but not for the users. So there is no reason anymore to define a procedure within another one (it just makes debugging harder). @end table @subsubheading Example of an interactive procedure definition @smallexample @c computed example Example_of_an_interactive_procedure_definition general.doc:3045 proc milnor_number (poly p) @{ ideal i= std(jacob(p)); int m_nr=vdim(i); if (m_nr<0) @{ "// not an isolated singularity"; @} return(m_nr); // the value of m_nr is returned @} ring r1=0,(x,y,z),ds; poly p=x^2+y^2+z^5; milnor_number(p); @expansion{} 4 @c end example Example_of_an_interactive_procedure_definition general.doc:3045 @end smallexample @subsubheading Example of a procedure definition in a library First, the library definition: @smallexample @c begin included file sample.lib from general.doc:3065 // Example of a user accessible procedure proc tab (int n) "USAGE: tab(n); (n integer) RETURNS: string of n space tabs EXAMPLE: example tab; shows an example" @{ return(internal_tab(n)); @} example @{ "EXAMPLE:"; echo=2; for(int n=0; n<=4; n=n+1) @{ tab(4-n)+"*"+tab(n)+"+"+tab(n)+"*"; @} @} // Example of a static procedure static proc internal_tab (int n) @{ return(" "[1,n]); @} @c end included file from general.doc:3065 @end smallexample Now, we load the library and execute the procedures defined there: @smallexample @c computed example Example_of_a_procedure_definition_in_a_library general.doc:3070 LIB "sample.lib"; // load the library sample.lib example tab; // show an example @expansion{} // proc tab from lib sample.lib @expansion{} EXAMPLE: @expansion{} for(int n=0; n<=4; n=n+1) @expansion{} @{ tab(4-n)+"*"+tab(n)+"+"+tab(n)+"*"; @} @expansion{} *+* @expansion{} * + * @expansion{} * + * @expansion{} * + * @expansion{} * + * @expansion{} "*"+tab(3)+"*"; // use the procedure tab @expansion{} * * // the static procedure internal_tab is not accessible "*"+internal_tab(3)+"*"; @expansion{} ? 'sample.lib::internal_tab()' is a local procedure and cannot be acce\ ssed by an user. @expansion{} ? error occurred in line 5: ` "*"+internal_tab(3)+"*";` // show the help section for tab help tab; @expansion{} // ** Could not get IdxFile. @expansion{} // ** Either set environment variable SINGULAR_IDX_FILE to IdxFile, @expansion{} // ** or make sure that IdxFile is at /home/hannes/singular/2-0/doc/singu\ lar.idx @expansion{} // proc tab from lib sample.lib @expansion{} proc tab (int n) @expansion{} USAGE: tab(n); (n integer) @expansion{} RETURNS: string of n space tabs @expansion{} EXAMPLE: example tab; shows an example @c end example Example_of_a_procedure_definition_in_a_library general.doc:3070 @end smallexample @subsubheading Guidelines for the help text of a procedure There are no enforced rules on the format of the help section of a procedure. Nevertheless, we recommend that the help text of a procedure should contain information about the usage, purpose, return values and generated objects. Particular assumptions or limitations should be listed. It should also be mentioned if global objects are generated or manipulated. The help text of procedures contained in libraries of the @sc{Singular} distribution should furthermore comply with certain rules as explained in @ref{The help string of procedures}. @c --------------------------------------- @node Names in procedures, Parameter list, Procedure definition, Procedures @subsection Names in procedures @cindex Names in procedures @cindex local names All variables are local to the procedure they are defined in. Locally defined variables cannot interfere with names in other procedures and are automatically deleted after leaving the procedure. Internally, local variables are stored using the nesting level. A variable is said to have nesting level 1, if it is local to a procedure that was called interactively, nesting level 2, if it is local to a procedure that was called by a procedure of nesting level 1 etc. @code{listvar()} also displays the nesting level, nesting level 0 is used for global objects (see @ref{listvar}). A ring may be 'moved up' by one nesting level with @code{keepring} (see @ref{keepring}). All variables living in that ring are moved together with that ring. To keep local variables after leaving the procedure, they have to be exported (i.e. made known) to some higher level by the @code{export} command (@pxref{export}). @strong{Example:} @smallexample @c computed example Names_in_procedures general.doc:3122 proc xxx @{ int k=4; //defines a local variable k int result=k+2; export(result); //defines the global variable "result". @} xxx(); listvar(all); @expansion{} // result [0] int 6 @expansion{} // LIB [0] string standard.lib @c end example Names_in_procedures general.doc:3122 @end smallexample Note that the variable @code{result} became a global variable after the execution of @code{xxx}. @c --------------------------------------- @node Parameter list, Procedure commands, Names in procedures, Procedures @subsection Parameter list @cindex Parameter list @table @code @item @strong{Syntax:} @code{( )} @*@code{(} parameter_definition @code{)} @item @strong{Purpose:} defines the number, type and names of the arguments to a @code{proc}. @*The parameter_list is optional. The default for a parameter_list is @code{(list #)} which means the arguments are referenced by @code{#[1], #[2]}, etc. @item @strong{Example:} @smallexample proc x0 @{ // can be called with ... // any number of arguments of any type: #[1], #[2],... // number of arguments: size(#) @} proc x1 () @{ ... // can only be called without arguments @} proc x2 (ideal i, int j) @{ ... // can only be called with 2 arguments, // which can be converted to ideal resp. int @} proc x3 (i,j) @{ ... // can only be called with 2 arguments // of any type // (i,j) is the same as (def i,def j) @} proc x5 (i,list #) @{ ... // can only be called with at least 1 argument // number of arguments: size(#)+1 @} @end smallexample @item @strong{Note:} @* The parameter_list may stretch across multiple lines. @* A parameter may have any type (including the types @code{proc} and @code{ring}). If a parameter is of type ring, then it can only be specified by name, but not with a type, e.g. @smallexample proc x6 (r) @{ ... // this is correct even if the parameter is a ring @} proc x7 (ring r) @{ ... // this is NOT CORRECT @} @end smallexample @end table @c --------------------------------------- ---------- @node Procedure commands, , Parameter list, Procedures @subsection Procedure commands @cindex Procedure commands Some commands only make sense inside a procedure, since they make objects known to the nesting level from which the procedure was called or to all nesting levels. @c inserted refs from general.doc:3211 @ifinfo @menu See * export:: * keepring:: * return:: @end menu @end ifinfo @iftex See @ref{export}; @ref{keepring}; @ref{return}. @end iftex @c end inserted refs from general.doc:3211 @c ---------------------------------------------------------------------- @node Libraries, Guidelines for writing a library, Procedures, General concepts @section Libraries @cindex Libraries A library is a collection of @sc{Singular} procedures in a file. @*@sc{Singular} reads a library with the command @code{LIB}. General information about the library is displayed by the command @code{help libname_lib}. After loading the library, its procedures can be used like the built-in @sc{Singular} functions. To have the full functionality of a built-in function libraries have to comply with the few syntax rules described below. Furthermore, libraries which are to be included in the @sc{Singular} distribution, have to comply with certain rules as explained in @ref{Guidelines for writing a library}. @menu * Loading of a library:: * Format of a library:: @end menu @c --------------------------------------- @node Loading of a library, Format of a library,, Libraries @subsection Loading of a library @cindex Loading of a library @cindex path @cindex SearchPath @cindex RootDir @cindex BinDir @cindex DefaultDir @cindex SINGULARPATH Libraries can be loaded with the @code{LIB} command: @c ------------------------------------------------------------ @c This piece of text exists also in the file reference.doc, @c chapter "LIB". @c chapter "load". @c If you change something here, change it there, too! @c ------------------------------------------------------------ @table @code @item @strong{Syntax:} @code{LIB} string_expression @code{;} @item @strong{Type:} none @item @strong{Purpose:} reads a library of procedures from a file. If the given filename does not start with @kbd{.} or @kbd{/} and can not be located in the current directory, each directory contained in the library @code{SearchPath} is searched for file of this name. @item @strong{Note on SearchPath:} The the library @code{SearchPath} is constructed at @sc{Singular} start-up time as follows: @enumerate @item the directories contained in the environment variable @code{SINGULARPATH} are appended @item the directories @code{$BinDir/LIB}, @code{$RootDir/LIB}, @code{$RootDir/../LIB}, @code{$DefaultDir/LIB}, @code{$DefaultDir/../LIB} are appended, where @itemize @bullet @item @code{$BinDir} is the value of the environment variable @code{SINGULAR_BIN_DIR}, if set, or, if not set, the directory in which the @sc{Singular} program resides @item @code{$RootDir} is the value of the environment variable @code{SINGULAR_ROOT_DIR}, if set, or, if not set, @code{$BinDir/../}. @item @code{$DefaultDir} is the value of the environment variable @code{SINGULAR_DEFAULT_DIR}, if set, or @code{/usr/local/Singular/} on a Unix platform, @code{\Singular\} on a Windows 95/98/NT platform, and @code{::Singular:} on a Macintosh. @end itemize @item all directories which do not exist are removed from the @code{SearchPath}. @end enumerate For setting environment variables see @ref{system}, or consult the manual of your shell. The library @code{SearchPath} can be examined by starting up @sc{Singular} with the option @code{-v}, or by issuing the command @code{system("--version");}. @item @strong{Note on standard.lib:} Unless @sc{Singular} is started with the @code{--no-stdlib} option, the library @code{standard.lib} is automatically loaded at start-up time. @end table Only the names of the procedures in the library are loaded, the body of the procedures is read during the first call of this procedure. This minimizes memory consumption by unused procedures. When @sc{Singular} is started with the @code{-q} or @code{--quiet} option, no message about the loading of a library is displayed. More precisely, option @code{-q} (and likewise @code{--quiet}) unsets option @code{loadLib} to inhibit monitoring of library loading (@pxref{option}). All loaded libraries are displayed by the @code{LIB;} command: @smallexample @c computed example Loading_of_a_library general.doc:3327 option(loadLib); // show loading of libraries; // standard.lib is loaded LIB; @expansion{} standard.lib // the names of the procedures of inout.lib LIB "inout.lib"; // are now known to Singular @expansion{} // ** loaded inout.lib (1.21.2.5,2002/06/12) LIB; @expansion{} standard.lib,inout.lib @c end example Loading_of_a_library general.doc:3327 @end smallexample @c inserted refs from general.doc:3337 @ifinfo @menu See * Command line options:: * LIB:: * Procedures and libraries:: * SINGULAR libraries:: * proc:: * standard_lib:: * string:: * system:: @end menu @end ifinfo @iftex See @ref{Command line options}; @ref{LIB}; @ref{Procedures and libraries}; @ref{SINGULAR libraries}; @ref{proc}; @ref{standard_lib}; @ref{string}; @ref{system}. @end iftex @c end inserted refs from general.doc:3337 @c --------------------------------------- @node Format of a library,, Loading of a library, Libraries @subsection Format of a library @cindex Format of a library A library file can contain comments, a category-, info- and version-string definition, @code{LIB} commands, @code{proc} commands and @code{proc} commands with @code{example} and @code{help} sections, i.e., the following keywords are allowed: @code{category}, @code{info}, @code{version}, @code{LIB}, @code{/* ... */}, @code{//}, @code{[static] proc}. Anything else is not recognized by the parser of @sc{Singular} and leads to an error message while loading the library. If an error occurs, loading is aborted and an error message is displayed, specifying the type of error and the line where it was detected. The category-, info- and version-string are defined as follows: @cindex info in a library @table @code @item @strong{Syntax:} @code{info} = string_constant @code{;} @item @strong{Purpose:} defines the general help for the library. This text is displayed on @code{help libname_lib;}. @item @strong{Example:} @smallexample info=" This could be the general help of a library. Quotes must be escaped with a \ such as \" "; @end smallexample @item @strong{Note:} In the info-string the characters \ and " must be preceded by a \ (escaped). It is recommended that the info string is placed on the top of a library file and contains general information about the library as well as a listing of all procedures available to the users (with a one line description of each procedure). Although there is no enforced format of the info string of a library, we recommend that you follow certain rules as explained in @ref{The help string of a library}. @end table @cindex version in a library @table @code @item @strong{Syntax:} @code{version} = string_constant @code{;} @item @strong{Purpose:} defines the version number for the library. It is displayed when the library is loaded. @item @strong{Example:} @smallexample version="$I@i{}@comment @comment !! Do not erase the @comment at the end of the previous line !! @comment !! It prevents cvs to substitute the id string !! d: sample.lib,v 1.2 1998/05/07 singular Exp $"; version="some version string"; @end smallexample @item @strong{Note:} It is common practice to simply define the version string to be @code{"$I}@comment @comment !! Do not erase the @comment at the end of the previous line !! @comment !! It prevents cvs to substitute the id string !! @code{d:$"} and let a version control system expand it. @end table @cindex category in a library @table @code @item @strong{Syntax:} @code{category} = string_constant @code{;} @item @strong{Purpose:} defines the category for the library. @item @strong{Example:} @smallexample category="Utilities"; @end smallexample @item @strong{Note:} reserved for sorting the libraries into categories. @end table @c --------------------------------------- @node Guidelines for writing a library, Debugging tools, Libraries, General concepts @section Guidelines for writing a library @cindex Guidelines for writing a library @cindex library, Guidelines for writing Although there are very few enforced rules on how libraries are written (see @ref{Libraries}), it is recommended that the libraries comply with the guidelines explained in this section, so that debugging and understanding are made easier. @strong{Note:} For libraries which are to be included in the @sc{Singular} distribution, the following guidelines are mandatory. @menu * Procedures in a library:: * Documentation of a library:: * Typesetting of help strings:: * The help string of a library:: * The help string of procedures:: * template_lib:: @end menu @c --------------------------------------- @node Procedures in a library, Documentation of a library,,Guidelines for writing a library @subsection Procedures in a library @cindex Procedures in a library @cindex library, procedures In this section we list miscellaneous recommendations on how procedures contained in a library should be implemented. @enumerate @item The info- and version-string should appear at the beginning of the library, before procedure definitions. @item The info-string should have the format as explained in @ref{The help string of a library}. @item Each procedure which should not be accessible by users should be declared @code{static}. @item Each procedure which is not declared @code{static} should have a help and example section as explained in @ref{Procedure definition}. @*Such procedures should furthermore carefully check any assumptions made about their input (like the type of list elements), and, if necessary, omit an error using the function @ref{ERROR}. @item No procedures should be defined within the body of another procedure. @item If the value of the reserved variable @code{printlevel} (@pxref{printlevel}) is greater than 0 then interactive user-input, i.e., the usage of functions like @code{pause("..")} or @code{read("");} (@pxref{read}), may be requested. @item If the value of the reserved variable @code{printlevel} (@pxref{printlevel}) is 0 then interactive user-input, i.e., the usage of functions like @code{pause("..")} or @code{read("");} (@pxref{read}), may @strong{not} be requested. Instead, an error (using the function @ref{ERROR}) should be reported together with the recommendation on increasing the value of the reserved variable @code{printlevel}. @item It is often useful for a procedure to print out comments, either to explain results or to display intermediate computations. However, if this procedure is called by another procedure, such comments are confusing and disturbing in most cases. @sc{Singular} offers an elegant solution, which requires the usage of the @sc{Singular} function @ref{dbprint} and the reserved variables @ref{printlevel}, and @ref{voice} (@code{voice} counts the nesting of procedures; It has the value 1 on the top level, 2 inside the first procedure etc.; @code{printlevel} has the value 0 by default, but can be set to any integer value by the user). For example, if the following procedure @code{Test} is called directly from the top level then @samp{comment1} is displayed (i.e., printed out) but not @samp{comment2}; and nothing is displayed if @code{Test} is called from within any other procedure. However, if @code{printlevel} is set to a value k with k>0, then @samp{comment1} (resp.@: @samp{comment2}) is displayed provided that @code{Test} is called from other procedures, with a nesting level up to k (resp.@: k-1). Note furthermore, that the example part of a procedure behaves in this respect like a procedure (i.e., the value of @code{voice} is 1). Therefore, the command @code{printlevel=1;} is necessary for @samp{comment1} to be displayed on @code{ example Test;}. However, since printlevel is a global variable, it should be reset to the old value at the end of the example part. @smallexample proc Test "USAGE: ... ... EXAMPLE: example Test; shows an example " @{ ... int p = printlevel - voice + 3; ... dbprint(p,"comment1"); dbprint(p-1,"comment2"); // dbprint prints only if p > 0 ... @} example @{ "EXAMPLE:"; echo = 2; int p = printlevel; //store old value of printlevel printlevel = 1; //assign new value to printlevel ... Test(); printlevel = p; //reset printlevel to old value @} @end smallexample @end enumerate @c @end table @c --------------------------------------- @node Documentation of a library, Typesetting of help strings, Procedures in a library, Guidelines for writing a library @subsection Documentation of a library @cindex Documentation of a library @cindex library, documentation The typesetting language in which the @sc{Singular} documentation is written is @code{texinfo}. Based on various tools, @code{info, dvi, ps,} and @code{html} versions of the @code{texinfo} documentation are generated. Starting with @sc{Singular} version 1-3, the @code{texinfo} documentation of all libraries of the @sc{Singular} distribution is generated automatically from their source code. More precisely, for each library, @itemize @minus @item the info string of the library is parsed and typeset as explained in @ref{Typesetting of help strings}. @item the help string of each procedure listed in the @code{PROCEDURE:} section of the library info string is parsed and typeset as explained in @ref{Typesetting of help strings}. @item the example of each procedure listed in the @code{PROCEDURE:} section of the library info string is computed and its output is included into the documentation. @end itemize For a uniform look-and-feel of the library documentation, library developers should @itemize @minus @item follow the recommendation of @ref{The help string of a library} and @ref{The help string of procedures}. @item consult the source code of libraries like @code{template.lib} (@pxref{template_lib}) for examples on how library documentations are written. @item make sure that each procedure listed in the @code{PROCEDURE:} section of the library info string has a help string and an example section. @item not use interactive functions like @code{pause("..")} or @code{read("");} (@pxref{read}) and should limit the length of input lines to 60 characters in the example section of procedures. @item carefully check the generated documentation of their libraries in its various formats using the @code{lib2doc} (@pxref{lib2doc}) utility. @end itemize @menu * lib2doc:: @end menu @node lib2doc,,,Documentation of a library @subsubsection lib2doc @cindex lib2doc @include lib2doc.texi @c ---------------------------------------- @node Typesetting of help strings, The help string of a library, Documentation of a library, Guidelines for writing a library @subsection Typesetting of help strings @cindex Typesetting of help strings @cindex library, typesetting of help strings The help strings of procedures and info strings of libraries which are included in the distribution of @sc{Singular} are parsed and automatically converted into the texinfo format (the typesetting language in which the documentation of @sc{Singular} is written). For optimal typesetting results, the guidelines for writing libraries and procedures should be followed, and the following points should be kept in mind: @itemize @bullet @item If a help string starts with an @code{@@} sign, then no parsing is done, and the help string is assumed to be already in the texinfo format. @item help strings are typeset within a @code{@@table @@asis} environment (which is similar to a latex @code{description} environment). @item If a line starts with only uppercase words and contains a colon, then the text up to the colon is taken to be the description-string of an item and the text following the colon is taken to be the content of the item. @item If the description-string of an item matches @table @asis @item @code{EXAMPLE} then this item and its content is ignored. @item @code{SEE ALSO} then the content of the item is assumed to be comma-separated words which are valid references to other texinfo nodes of the manual. (e.g., all procedure and command names are also texinfo nodes). @item @code{KEYWORDS} (or, @code{KEYPHRASES}) then the content of the item is assumed to be a semicolon-separated list of phrases which are taken as keys for the index of the manual (N.B. the name of a procedure/library is automatically added to the index keys). @item @code{PROCEDURES} then the content of the item is assumed to be a summary description of the procedures contained in the library. Separate texinfo nodes (subsections in printed documents) are @strong{only} created out of the help strings of such procedures which appear in the summary description of a library. @item @code{LIBRARY} then the content of the item is assumed to be a one-line description of a library. If this one-line description consist of only uppercase characters, then it is typeset in all lowercase characters in the manual (otherwise it is left as is). @end table @item For the content of an item, the following texinfo markup elements are recognized (and, their content not further manipulated): @table @asis @item @code{@@*} to enforce a line-break. @table @asis @item Example: @code{old line @@* new line} @* @expansion{} @* old line @* new line @end table @item @code{@@ref@{...@}} References to other parts of the @sc{Singular} manual can be set using one of the following @code{@@ref@{node@}} constructs. Notice that @code{node} must be the name of a section of the @sc{Singular} manual. In particular, it may be a name of a function, library or library procedure. @table @asis @item @code{@@xref@{node@}} for a reference to the node @code{node} at the beginning of a sentence. @item @code{@@ref@{node@}} for a reference to the node @code{node} at the end of a sentence. @item @code{@@pxref@{node@}} for a reference to the node @code{node} within parenthesis. @item Example: @code{@@xref@{Tropical Storms@}, for more info.} @*@expansion{}*Note Hurricanes::, for more info. @*@expansion{}See Section 3.1 [Hurricanes], page 24, for more info. @code{For more information, see @@ref@{Hurricanes@}.} @*@expansion{}For more information, see *Note Hurricanes::. @*@expansion{}For more information, see Section 3.1 [Hurricanes], page 24. @code{... storms cause flooding (@@pxref@{Hurricanes@}) ...} @*@expansion{}... storms cause flooding (*Note Hurricanes::) ... @*@expansion{}... storms cause flooding (see Section 3.1 [Hurricanes], page 24) @end table @item @code{@@math@{..@}} for typesetting of small (i.e., which do not go over multiple lines) mathematical expressions in LaTeX math-mode syntax. @table @asis @item Example: @code{@@math@{\alpha@}} @*@expansion{} @* @ifinfo @math{\alpha} @end ifinfo @tex $\alpha$ @end tex @item Note: Mathematical expressions inside @code{@@math@{..@}} may not contain curly parenthesis and the "at" sign, i.e., may not contain @code{@{,@},@@}. @end table @item @code{@@code@{..@}} for typesetting of small (i.e., which do not go over multiple lines) strings in typewriter font. @table @asis @item Example: @code{@@code@{typewriter font@}} @*@expansion{} @*@code{typewriter font} @item Note: The string inside @code{@@code@{..@}} may not contain curly parenthesis and the "at" sign, i.e., may not contain @code{@{,@},@@}. @end table @item @code{@@example} @code{...} @item @code{@@end example} for pre-formatted text which is indented and typeset in typewriter font. @table @asis @item Example: @example before example @@example in example notice extra identation and escape of special characters like @@@{,@@@},@@@@ @@end example after example @end example @expansion{} @*before example @example in example notice extra identation and escape of special characters like @{,@},@@ @end example after example @item Note: The characters @{,@},@@ have to be escaped by an @@ sign inside an @@example environment. @end table @item @code{@@format} @code{...} @item @code{@@end format} for pre-formatted text which is not indented and typeset in normal font. @table @asis @item Example: @example before format @@format in format no extra identation but still escape of special characters like @@@{,@@@},@@@@ @@end format after format @end example @expansion{} @*before format @format in format no extra identation but still escape of special characters like @{,@},@@ @end format after format @item Note: The characters @{,@},@@ have to be escaped by an @@ sign inside an @@example environment. @end table @item @code{@@texinfo} @code{...} @item @code{@@end texinfo} for text which is written in pure texinfo. @table @asis @item Example: @example @@texinfo Among others, within a texinfo environment one can use the tex environment to typeset more complex mathematical like @@tex $i_@{1,1@} $ @@tex @@end texinfo @end example @*@expansion{} @*Among others, within a texinfo environment one can use the tex environment to typeset more complex mathematical like @tex $ i_{1,1} $ @end tex @end table @end table Furthermore, a line-break is inserted in front of each line whose previous line is shorter than 60 characters and does not contain any of the above described recognized texinfo markup elements. @end itemize See also @ref{template_lib} for an examples of the typesetting rules explained here. @c ---------------------------------------- @node The help string of a library, The help string of procedures, Typesetting of help strings, Guidelines for writing a library @subsection The help string of a library @cindex help string of a library @cindex library, help string @cindex library, info string @cindex info string of a library The help (or, info) string of a library should have the following format: @smallexample info=" LIBRARY: AUTHOR: [SEE ALSO: ] [KEYWORDS: ] PROCEDURES: ; . . ; "; @end smallexample Only such procedures should be listed in the @code{PROCEDURE} section which are not @code{static} and which have a help and example section. The purpose of the one line procedure descriptions is not to give a short help for the procedure, but to help the user decide what procedure might be the right one for the job. Details can then be found in the help section of each procedure. Therefore parameters may be omitted or abbreviated if necessary. If this description consists of only upper-case characters, then it will be typeset in all lowercase characters in the manual. For more information, see @ref{Typesetting of help strings}. For an example, see @ref{template_lib}. @c ---------------------------------------- @node The help string of procedures, template_lib, The help string of a library, Guidelines for writing a library @subsection The help string of procedures @cindex help string of a procedure @cindex procedures, help string The help string of a procedure should have the following format: @smallexample USAGE: (); [CREATE: ] RETURN: [NOTE: ] [SEE ALSO: ] [KEYWORDS: ] EXAMPLE: example ; shows an example @end smallexample Further arbitrary items (like @code{THEORY:}, or @code{BACKGROUND:}) are recognized, as well, but should be used diligently. Remember that help strings are formatted as explained in @ref{Typesetting of help strings}. In particular, descriptions may contain the texinfo markup elements @code{@@*, @@math@{..@}, @@code@{..@}, @@example, @@format, @@texinfo} to better control their typesetting. See @ref{msum}, @ref{mdouble}, @ref{mtripple} for examples. @c ---------------------------------------- @node template_lib,, The help string of procedures, Guidelines for writing a library @subsection template_lib @cindex template_lib @cindex Template for writing a library @cindex library, template First, we show the source-code of a template library: @smallexample @c begin included file template.lib from general.doc:3933 //////////////////////////////////////////////////////////////////// // version string automatically expanded by CVS version="Id: general.tex,v 1.1 2003/08/08 14:27:06 pertusus Exp $"; category="Miscellaneous"; // summary description of the library info=" LIBRARY: template.lib A Template for a Singular Library AUTHOR: Olaf Bachmann, email: obachman@@mathematik.uni-kl.de SEE ALSO: standard_lib, Guidelines for writing a library, Typesetting of help strings KEYWORDS: library, template.lib; template.lib; library, info string PROCEDURES: mdouble(int) return double of int argument mtripple(int) return three times int argument msum([int,..,int]) sum of int arguments "; //////////////////////////////////////////////////////////////////// proc mdouble(int i) "USAGE: mdouble(i); i int RETURN: int: i+i NOTE: Help string is in pure ASCII this line starts on a new line since previous line is short mdouble(i): no new line SEE ALSO: msum, mtripple, Typesetting of help strings KEYWORDS: procedure, ASCII help EXAMPLE: example mdouble; shows an example" @{ return (i + i); @} example @{ "EXAMPLE:"; echo = 2; mdouble(0); mdouble(-1); @} //////////////////////////////////////////////////////////////////// proc mtripple(int i) "@@c we do texinfo here @@table @@asis @@item @@strong@{Usage:@} @@code@{mtripple(i)@}; @@code@{i@} int @@item @@strong@{Return:@} int: @@math@{i+i+i@} @@item @@strong@{Note:@} Help is in pure Texinfo @@*This help string is written in texinfo, which enables you to use, among others, the @@@@math command for mathematical typesetting (like @@math@{\alpha, \beta@}). @@*It also gives more control over the layout, but is, admittingly, more cumbersome to write. @@end table @@c use @@c ref contstuct for references @@cindex procedure, texinfo help @@c ref @@strong@{See also:@} @@ref@{mdouble@}, @@ref@{msum@}, @@ref@{Typesetting of help strings@} @@c ref " @{ return (i + i + i); @} example @{ "EXAMPLE:"; echo = 2; mtripple(0); mtripple(-1); @} //////////////////////////////////////////////////////////////////// proc msum(list #) "USAGE: msum([i_1,..,i_n]); @@code@{i_1,..,i_n@} def RETURN: Sum of int arguments NOTE: This help string is written in a mixture of ASCII and texinfo @@* Use a @@ref constructs for references (like @@pxref@{mtripple@}) @@* Use @@code for typewriter font (like @@code@{i_1@}) @@* Use @@math for simple math mode typesetting (like @@math@{i_1@}). @@* Note: No parenthesis like @} are allowed inside @@math and @@code @@* Use @@example for indented preformatted text typeset in typewriter font like @@example this --> that @@end example Use @@format for preformatted text typeset in normal font @@format this --> that @@end format Use @@texinfo for text in pure texinfo @@texinfo @@expansion@{@} @@tex $i_@{1,1@}$ @@end tex @@end texinfo Notice that automatic linebreaking is still in affect (like on this line). SEE ALSO: mdouble, mtripple, Typesetting of help strings KEYWORDS: procedure, ASCII/Texinfo help EXAMPLE: example msum; shows an example" @{ if (size(#) == 0) @{ return (0);@} if (size(#) == 1) @{ return (#[1]);@} int i; def s = #[1]; for (i=2; i<=size(#); i++) @{ s = s + #[i]; @} return (s); @} example @{ "EXAMPLE:"; echo = 2; msum(); msum(4); msum(1,2,3,4); @} @c end included file from general.doc:3933 @end smallexample After typesetting, the library appears in the document as follows (with one subsection for each procedure): @c include of docu for template.lib @include d2t_singular/template_lib.tex @c ---------------------------------------------------------------------- @node Debugging tools, , Guidelines for writing a library, General concepts @section Debugging tools @cindex Debugging tools If @sc{Singular} does not come back to the prompt while calling a user defined procedure, probably a bracket or a @code{"} is missing. The easiest way to leave the procedure is to type some brackets or @code{"} and then @key{RETURN} . @menu * Tracing of procedures:: * Source code debugger:: * Break points:: * Printing of data:: * libparse:: @end menu @c --------------------------------------- @node Tracing of procedures,Source code debugger,Debugging tools,Debugging tools @subsection Tracing of procedures Setting the @code{TRACE} variable to 1 (resp.@: 3) results in a listing of the called procedures (resp.@: together with line numbers). If @code{TRACE} is set to 4, @code{Singular} displays each line before its interpretation and waits for the @key{RETURN} key being pressed. @menu * TRACE var:: @end menu @iftex See @ref{TRACE var}. @end iftex @strong{Example:} @smallexample @c computed example Tracing_of_procedures general.doc:3976 proc t1 @{ int i=2; while (i>0) @{ i=i-1; @} @} TRACE=3; t1(); @expansion{} @expansion{} entering t1 (level 0) @expansion{} @{1@}@{2@}@{3@}@{4@}@{5@}@{4@}@{5@}@{6@}@{7@}@{4@}@{5@}@{6@}@{7@}@{4@}@{6@}@{7@}@{8@} @expansion{} leaving t1 (level 0) @c end example Tracing_of_procedures general.doc:3976 @end smallexample @c --------------------------------------- @node Source code debugger, Break points, Tracing of procedures, Debugging tools @subsection Source code debugger @cindex debugging library code @cindex source code debugger, sdb @cindex debugger @cindex sdb, source code debugger The source code debugger (sdb) is an experimental feature, it's interface may change in future versions of Singular. @*To enable the use of the source code debugger @sc{Singular} has to be started with the option @code{-d} or @code{--sdb} (see @ref{Command line options}). @subsubheading sdb commands Each sdb command consist of one character which may be followed by a parameter. @table @asis @item @code{b} print backtrace of calling stack @item @code{c} continue @item @code{e} edit the current procedure and reload it (current call will be aborted) @* only available on UNIX systems @item @code{h},@code{?} display help screen @item @code{n} execute current line, sdb break at next line @item @code{p} display type and value of the variable given by @item @code{Q} quit this Singular session @item @code{q} quit debugger, set debugger flags(0,1,2) @* 0: continue, disable the debugger @* 1: continue @* 2: throw an error, return to toplevel @end table @subsubheading Syntactical errors in procedures If @sc{Singular} was started with the command line option @code{-d} or @code{--sdb} a syntactical error in a procedure will start the source code debugger instead of returning to the top level with an error message. The commands @code{q 1} and @code{q 2} are equivalent in this case. @subsubheading SDB breakpoints in procedures @cindex SDB breakpoint @cindex SDB debugger Up to seven SDB breakpoints can be set. To set a breakpoint at a procedure use @code{breakpoint}. (See @ref{breakpoint}). @*These breakpoints can be cleared with the command @code{d breakpoint_no} from within the debugger or with @code{breakpoint(} proc_name @code{,-1);}. @c --------------------------------------- @node Break points, Printing of data, Source code debugger, Debugging tools @subsection Break points A break point can be put into a proc by inserting the command @code{~}. If @code{Singular} reaches a break point it asks for lines of commands (line-length must be less than 80 characters) from the user. It returns to normal execution if given an empty line. See @ref{~}. @strong{Example:} @smallexample proc t @{ int i=2; ~; return(i+1); @} t(); @expansion{} -- break point in t -- @expansion{} -- 0: called from STDIN -- i; // here local variables of the procedure can be accessed @expansion{} 2 @expansion{} -- break point in t -- @expansion{} 3 @end smallexample @sp 2 @c --------------------------------------- @node Printing of data,libparse,Break points,Debugging tools @subsection Printing of data The procedure @code{dbprint} is useful for optional output of data: it takes 2 arguments and prints the second argument, if the first argument is positive; it does nothing otherwise. @menu * dbprint:: * voice:: @end menu @ifnothtml @iftex See @ref{dbprint}; @ref{voice}. @end iftex @end ifnothtml @c --------------------------------------- @node libparse,,Printing of data,Debugging tools @subsection libparse @cindex libparse @code{libparse} is a stand-alone program contained in the @sc{Singular} distribution (at the place where the @sc{Singular} executable program resides), which cannot be called inside of @sc{Singular}. It is a debugging tool for libraries which performs exactly the same checks as @ifset namespaces the @code{load} command in @sc{Singular}, but generates more output during @end ifset @ifclear namespaces the @code{LIB} command in @sc{Singular}, but generates more output during @end ifclear parsing. @code{libparse} is useful if an error occurs while loading the library, but the whole block around the line specified seems to be correct. In these situations the real error might be hundreds of lines earlier in the library. @strong{Usage:} @*@code{libparse [options] singular-library} @*@strong{Options:} @table @asis @item @code{-d} Debuglevel increases the amount of output during parsing, where Debuglevel is an integer between 0 and 4. Default is 0. @item @code{-s} turns on reporting about violations of unenforced syntax rules @end table The following syntax checks are performed in any case: @itemize @bullet @item counting of pairs of brackets @{,@} , [,] and (,) (number of @{ has to match number of @}, same for [,] and (,) ). @item counting of " ( number of " must be even ). @item general library syntax ( only LIB, static, proc (with parameters, help, body and example) and comments, i.e // and @code{/* ... */}, are allowed). @end itemize Its output lists all procedures that have been parsed successfully: @smallexample $ libparse sample.lib Checking library 'sample.lib' Library function line,start-eod line,body-eob line,example-eoe Version:0.0.0; g Sample tab line 9, 149-165 13, 271-298 14, 300-402 l Sample internal_tab line 24, 450-475 25, 476-496 0, 0-496 @end smallexample where the following abbreviations are used: @itemize @bullet @item g: global procedure (default) @item l: static procedure, i.e., local to the library. @end itemize each of the following is the position of the byte in the library. @itemize @bullet @item start: begin of 'proc' @item eod: end of parameters @item body: start of procedure body '@{' @item eob: end of procedure body '@}' @item example: position of 'example' @item eoe: end of example '@}' @end itemize Hence in the above example, the first procedure of the library sample.lib is user-accessible and its name is tab. The procedure starts in line 9, at character 149. The head of the procedure ends at character 165, the body starts in line 13 at character 271 and ends at character 298. The example section extends from line 14 character 300 to character 402. The following example shows the result of a missing close-bracket @} in line 26 of the library @code{sample.lib}. @smallexample LIB "sample.lib"; @expansion{} ? Library sample.lib: ERROR occurred: in line 26, 497. @expansion{} ? missing close bracket '@}' at end of library in line 26. @expansion{} ? Cannot load library,... aborting. @expansion{} ? error occurred in STDIN line 1: `LIB "sample.lib";` @end smallexample texi2html-1.82/test/singular_manual/README_distribution.texi0000644000175000017500000000377611264347126026042 0ustar flichtenheldflichtenheld@comment -*-texinfo-*- @comment Id: README_distribution.texi,v 1.1 2003/08/08 14:27:06 pertusus Exp $ @c FILE: README_distribution.texi @c PURPOSE: general README file to be included in the distribution @c @ifclear VERSION @include version.texi @end ifclear @majorheading README file for the @sc{Singular} distribution @sc{Singular} is a Computer Algebra system for polynomial computations with special emphasize on the needs of commutative algebra, algebraic geometry, singularity theory and polynomial system solving. For a more detailed overview of @sc{Singular}, see @display @uref{http://www.singular.uni-kl.de/Overview/} @end display @sc{Singular} version 2 is generally much faster than any previous version of @sc{Singular}, due to a rewriting of major parts of the @sc{Singular} kernel (e.g., the kernel has a new memory manager and a new polynomial arithmetic), and due to new and better implemented algorithms (e.g., for computing resolutions and determinants). Besides these internal changes, @sc{Singular} version 2 offers many new features and functionalities (which were already partly included in the 1-3 series). E.g., a native Windows distribution, an Emacs user interface, a new help system, 16 new libraries, etc. @macro nref{name,url} @ifhtml @item @uref{\url\,,\name\} @end ifhtml @ifnothtml @item @code{\name\} @end ifnothtml @end macro See the files @table @asis @nref{NEWS, NEWS.html} for news and changes of this version @nref{COPYING, COPYING.html} for license information for @sc{Singular} @nref{INSTALL, INSTALL.html} for installation instructions, troubleshooting tips, and answers to Frequently Asked Questions (FAQs). @end table More and up-to-date information about @sc{Singular} is always available from @display @uref{http://www.singular.uni-kl.de}. @end display We very much welcome any comments, questions, and bug reports, especially comments about our new version. Please contact us at @display @email{singular@@mathematik.uni-kl.de}. @end display GOOD LUCK and ENJOY! Your @sc{Singular} team. texi2html-1.82/test/singular_manual/singcard.tex0000644000175000017500000001462611264347126023723 0ustar flichtenheldflichtenheld% Id: singcard.tex,v 1.1 2003/08/08 14:27:06 pertusus Exp $ % % singcard.tex - common macros for Singular reference cards. % % Some of the macros/settings ripped from gdb reference card. % % % - declare configurable parameters. % \newdimen\totalwidth \newdimen\totalheight \newdimen\hmargin \newdimen\vmargin \newdimen\barwidth \newdimen\barheight %%% START CONFIGURABLE SECTION % % - configure your papersize. % % US letter paper (8.5x11in) %\totalwidth=11in % total width of paper %\totalheight=8.5in % total height of paper %\hmargin=.25in % horizontal margin width %\vmargin=.25in % vertical margin width % A4 paper \totalwidth=29.7cm \totalheight=21cm \hmargin=6mm \vmargin=6mm % % - configure your folding guides. % \barwidth=.1pt % width of the folding guide \barheight=2pt % height of the folding guide % For NO printed folding guide, % comment out other \def\vdecor's and uncomment: %\def\vdecor{\hskip\hmargin plus1fil\hskip\barwidth plus1fil\hskip\hmargin plus1fil} % For SOLID LINE folding guide, % comment out other \def\vdecor's and uncomment: %\def\vdecor{\hskip\hmargin plus1fil \vrule width \barwidth \hskip\hmargin plus1fil} % For SMALL MARKS NEAR TOP AND BOTTOM as folding guide, % comment out other \def\vdecor's and uncomment: \def\vdecor{\hskip\hmargin plus1fil \vbox to \vsize{\hbox to \barwidth{\vrule height\barheight width\barwidth}\vfill \hbox to \barwidth{\vrule height\barheight width\barwidth}}%THIS PERCENT SIGN IS ESSENTIAL \hskip\hmargin plus1fil} %%% END CONFIGURABLE SECTION % % - compute parameters of three column format. % \newdimen\fullhsize % width of area without margins \newdimen\itemwidth % width of item column \newdimen\definitionwidth % width of definition column \newdimen\temp % only for temporary use % adjust the offsets so the margins are measured *from paper edge* \hoffset=-1in \advance \hoffset by \hmargin \voffset=-1in \advance \voffset by \vmargin % fullhsize = totalwidth - (2 * hmargin) \fullhsize=\totalwidth \temp=\hmargin \multiply \temp by 2 \advance \fullhsize by -\temp % hsize = (fullhsize - (4 * hmargin) - (2 * barwidth)) / 3 \hsize=\fullhsize \temp=\hmargin \multiply \temp by 4 \advance \hsize by -\temp \temp=\barwidth \multiply \temp by 2 \advance \hsize by -\temp \divide \hsize by 3 % vsize = totalheight - (2 * vmargin) \vsize=\totalheight \temp=\vmargin \multiply \temp by 2 \advance \vsize by -\temp % default itemwidth = hsize * 1/4 % default definitionwidth = hsize * 3/4 \temp=\hsize \divide \temp by 4 \itemwidth=\temp \definitionwidth=\hsize \advance \definitionwidth by -\itemwidth % % - miscellaneous parameters. % \tolerance=2000 \hyphenpenalty=500 \parindent=0pt \parskip=0pt \baselineskip=9pt \footline={\vbox to0pt{\hss}} % % - font definitions. % \font\rm=cmr7 \font\bf=cmbx7 \font\it=cmti7 \font\bit=cmbxti10 at 7pt \font\tt=cmtt8 % cmtt7 seems too small \font\sc=cmcsc10 at 7pt % huge fonts \font\hbf=cmbx12 % large fonts \font\lbf=cmbx10 % small fonts \font\srm=cmr6 \font\ssc=cmcsc10 at 6pt % tiny fonts \font\tit=cmti7 at 5pt % math fonts \font\mathrm=cmr7 \font\smathrm=cmr5 \font\mathit=cmmi7 \font\smathit=cmmi5 \font\mathsy=cmsy7 \font\smathsy=cmsy5 \font\mathex=cmex7 \textfont0=\mathrm \scriptfont0=\smathrm \textfont1=\mathit \scriptfont1=\smathit \textfont2=\mathsy \scriptfont2=\smathsy \textfont3=\mathex \scriptfont3=\mathex % % - macros for tree column format. % \def\fulline{\hbox to \fullhsize} \def\columnbox{\leftline{\pagebody}} \def\tripleformat{\shipout \vbox{\fulline{\box\leftcolumn\vdecor \box\centercolumn\vdecor \columnbox}}% \advancepageno} \def\bye{\par\vfill \supereject \if R\currentcolumn\null\vfill\eject\fi \end} % % - miscellaneous macros. % % \Singular: for sake of corporate identity % \ctl: print control keys % \opt: print optional arguments % \alt: separate alternative arguments % \rep: denote repitition of arguments % \rmslash: print a slash in roman type face % \eg, \ie: obvious % \verysmallskip: skip a very small amount (used between \sec entries). % Extra skip does not harm in the applications of \verysmallskip, % so we choose a large stretch for it. % \strut: redefinition of TeX's \strut macro % \def\Singular{{\sc Singular}} \def\ctl#1{{\tt C-#1}} \def\opt#1{{\rm[{\tt #1}]}} \def\alt{\hbox{\hskip 1pt$\mid$\hskip 1pt}} \def\rep{$\ldots$} \def\rmslash{{\rm /}} \def\eg{e.g.~} \def\ie{i.e.~} \newskip\verysmallskipamount \verysmallskipamount=1pt plus 0.333333pt minus 0.333333pt \def\verysmallskip{\vskip \verysmallskipamount} \newbox\sevenptstrutbox \setbox\sevenptstrutbox=\hbox{\vrule height6pt depth3pt width0pt} \def\strut{\relax\ifmmode\copy\sevenptstrutbox\else\unhcopy\sevenptstrutbox\fi} % % \sec - insert a new section into the card. % % First argument is section title, second argument the item column % width (defaults to 1/4*hsize), third the section itself. % % \setitemwidth: auxiliary macro % \def\setitemwidth#1{\itemwidth=#1 \definitionwidth=\hsize \advance\definitionwidth by -\itemwidth} \long\def\sec#1(#2)#3\endsec{{% \def\\{#2}\ifx\empty\\ \else\setitemwidth{#2}\fi \halign{% column 1 \vtop{\hsize=\itemwidth\strut\tt##\strut}& % column 2 \vtop{\hsize=\definitionwidth\strut\rm##\strut}\cr % tail of \long\def fills in halign body with argument \noalign{\bigskip\lbf #1\verysmallskip}% #3}}} % % - macros to use inside a \sec. % % \subsec: insert a sub heading into a \sec % \sectext: insert non-aligned text into a \sec % \longentry: insert an entry with a long item field into a \sec % \longitem: insert an entry with a long item field and no % definition field into a \sec % \entryskip: insert glue between two entries % \def\subsec#1{\noalign{\smallskip\bf #1}} \long\def\sectext#1\cr{\noalign{\strut\hyphenpenalty=50 #1\strut}} % the `\ ' forces a non empty item field \long\def\longentry#1\cr{\noalign{\strut\tt #1\strut}\ \cr} \long\def\longitem#1\cr{\noalign{\strut\tt #1\strut}} \newskip\entryskipamount \entryskipamount=\smallskipamount \def\entryskip{\noalign{\vskip \entryskipamount}} % % - initialization. % % set output routine \newbox\leftcolumn \newbox\centercolumn \let\currentcolumn=L \output={\if L\currentcolumn \global\setbox\leftcolumn=\columnbox \global\let\currentcolumn=C% \else \if C\currentcolumn \global\setbox\centercolumn=\columnbox \global\let\currentcolumn=R% \else \tripleformat \global\let\currentcolumn=L% \fi \fi} % switch to our default font \rm % ragged format \raggedbottom \raggedright texi2html-1.82/test/singular_manual/usercard.tex0000644000175000017500000004364411264347126023743 0ustar flichtenheldflichtenheld% Id: usercard.tex,v 1.1 2003/08/08 14:27:06 pertusus Exp $ % % usercard.tex - Singular user quick reference card. % \input singcard.tex \centerline{\hbf SINGULAR Quick Reference} \centerline{\srm {\ssc Singular} Version 1.2.0} \bigskip Do not forget to terminate all commands with a {\tt ;} (semicolon)! In particular if \Singular\ prints the continuation prompt {\tt .} (peri\-od) instead of the regular command prompt {\tt >}, then it waits for a command to be terminated by a {\tt ;}. If that does not help, try one or more {\tt "} or {\tt \char`}} to close an opened string or block. Comments start with {\tt //} and extend to end of line. \smallskip Some of the topics concerning interactive use are system dependent. \sec Starting SINGULAR(2.5cm) Singular& start \Singular\cr Singular {\it file} \rep& read {\it files\/} and prompt for further commands\cr Singular --help& print help on command line options and exit\cr \endsec \sec Stopping SINGULAR() quit;& exit \Singular; also {\tt exit;} or {\tt \$}\cr \ctl c& interrupt \Singular\cr \endsec \sec Getting help() help;& enter online help system\cr help {\it topic\/};& describe {\it topic\/}; also {\tt? {\it topic\/};}\cr \subsec{Inside the online help system:} \ctl h& get help on help system\cr q& exit from help system\cr n\rmslash p\rmslash u& go to next/previous/upper node\cr m& pick menu item by name\cr l& go to last visited node/exit from help on help\cr SPC\rmslash DEL& scroll forward/backward one page\cr \endsec \sec Commandline editing() \sectext Commandline editing is similar to that of, e.g., {\tt bash} or {\tt tcsh}:\cr BS\rmslash\ctl d& remove character on the left/right of cursor\cr \ctl p\rmslash\ctl n& get previous/next line from history\cr \ctl b\rmslash\ctl f& move cursor left/right\cr \ctl a\rmslash\ctl e& go to beginning/end of line\cr \ctl u\rmslash\ctl k& delete to beginning/end of line\cr \endsec \sec Names and objects() \sectext Names (= identifiers) have to be declared before they are used:\cr \entryskip \longentry {\it type\/} {\it name\/} \opt{= {\it expression\/}};& declare variable {\it name}\cr kill({\it name\/})& delete variable {\it name}\cr \entryskip \sectext \parskip=\verysmallskipamount Names of type {\tt number}, {\tt poly}, {\tt ideal}, {\tt vector}, {\tt module}, {\tt matrix}, {\tt map}, and {\tt resolution} may be declared only inside a ring. They are local to that ring. The same holds for a {\tt list} if it contains an object of the above types. All other types may be declared at any time. They are globally visible. Names may consist of alphanumeric characters including {\tt \_} (underscore) and have to start with a letter. Capital and small letters are distinguished. Names may be followed by an integer expression in parentheses, resulting in so-called {\it indexed names}.\cr \entryskip {\it name\/}({\it n}..{\it m\/})& shortcut for {\tt {\it name\/}({\it n\/}), $\ldots$, {\it name\/}({\it m\/})}\hfil\break (\eg {\tt ring r = 0, x(1..3), dp;})\cr \_ {\rm (underscore)}& refers to the value of the last expression printed\cr \endsec \vfill \centerline{\srm \copyright 1998 \qquad Permissions on back} \eject \sec Ring declaration() \longentry ring {\it name\/} = {\it basefield}, ({\it ringvars\/}), {\it ordering\/};& \hyphenpenalty=50 \tolerance=200 declare ring {\it name\/} and make it the new base\-ring. {\it ringvars\/} has to be a list of names, the other items are described below. Example:\par {\tt ring r = 32003, (x, y, z), dp;}\cr \longentry qring {\it name\/} = {\it ideal\/};& declare quotient ring {\it name\/} of the current base\-ring with respect to {\it ideal\/}. {\it ideal\/} has to be a standard basis. Make {\it name\/} the new basering.\cr \subsec{Available {\bit basefields\/}:} 0& the rational numbers\cr \it p& the finite field $Z_p$ with {\it p\/} elements,\par $2 \le p \le 32003$ a prime\cr ({\it p\/}\^{}{\it n}, {\it gen\/})& the finite field with $p^n$ elements, {\it p\/} a prime and\par $4 \le p^n \le 32671$. The name {\it gen\/} refers to some generator of the cyclic group of unities.\cr ({\it p}, {\it alpha\/})& algebraic extension of $Q$ or $Z_p$ ($p = 0$ or as above) by {\it alpha}. The minpoly $\mu_{\hbox{\tit alpha}}$ for {\it alpha\/} has to be specified with an assignment to {\tt minpoly} (\eg {\tt minpoly=a\^{}2+1;}, for $\hbox{\it alpha}=\hbox{\tt a}$). {\it alpha\/} has to be a name.\cr ({\it p}, $t_1$, $\ldots$)& transcendental extension of $Q$ or $Z_p$ ($p = 0$ or as above) by~$t_i$. The $t_i$ have to be names.\cr real& the real numbers represented by floating point numbers\cr \endsec \sec Term orderings() \sectext An {\it ordering\/} as referred to in the ring declaration may either be a global, local, or matrix ordering or a list of these resulting in a pro\-duct ordering. The list may include extra weight vectors and may be preceded or followed by a module ordering specification.\cr \subsec{Global orderings} lp& lexicographical ordering\cr dp& degree reverse lexicographical ordering\cr Dp& degree lexicographical ordering\cr wp($w_1$, $\ldots$)& weighted reverse lexicographical ordering\cr Wp($w_1$, $\ldots$)& weighted lexicographical ordering\cr & The $w_i$ have to be positive integers.\cr \subsec{Local orderings} ls& negative lexicographical ordering\cr ds& negative degree reverse lexicographical ordering\cr Ds& negative degree lexicographical ordering\cr ws($w_1$, $\ldots$)& general weighted reverse lexicographical ordering\cr Ws($w_1$, $\ldots$)& general weighted lexicographical ordering\cr & $w_1$ has to be a non-zero integer, every other $w_i$ may be any integer\cr \subsec{Matrix orderings} \longentry M($m_{11}$, $m_{12}$, $\ldots$, $m_{nn}$)& {\it m\/} has to be an invertible matrix with integer coeffi\-cients. Coefficients have to be specified row-wise.\cr \subsec{Product orderings} \longentry($o_1$\opt{($k_1$)}, $o_2$\opt{($k_2$)}, $\ldots$, $o_n$\opt{($k_n$)})& the $o_i$ have to be any of the above orderings. {\tt lp}, {\tt dp}, {\tt Dp}, {\tt ls}, {\tt ds}, {\tt Ds} may be followed by an integer expression $k_i$ in parentheses specifying the number of variables $o_i$ refers to (\eg {\tt (lp(3), dp(2))}).\cr \subsec{Extra weight vector} a($w_1$, $\ldots$)& any of the above degree orderings may be preceded by an extra weight vector\cr \noalign{\eject} \subsec{Module orderings} ({\it c}, $o_1$, $\ldots$)& sort by components first\cr ($o_1$, $\ldots$, {\it c\/})& sort by variables first\cr & $o_i$ may be any of the above orderings or an extra weight vector, {\it c\/} may be one of {\tt C} or {\tt c}:\cr C& sort generators in ascending order (\ie {\tt gen({\it i\/})} $<$ {\tt gen({\it j\/})} iff $i < j$)\cr c& sort generators in descending order\cr \endsec \sec Data types(1.5cm) \sectext Examples of ring-independent types:\cr \entryskip \longitem int i1 = 101; int i2 = 13 div 3;\cr \entryskip \longitem intvec iv = 13 div 3, -4, i1;\cr \entryskip \longentry intmat im[2][2] = 13 div 3, -4, i1;& a $2\times 2$ matrix. Entries are filled row-wise, missing entries are set to zero, extra entries are ignored. vector/matrix elements are accessed using the {\tt[$\ldots$]} operator, where the first element has index one (\eg {\tt iv[3]; im[1, 2];}).\cr \entryskip \longitem string s1 = "a quote \char"5C " and a backslash \char"5C \char"5C";\par string s2 = "con" + "catenation";\cr \entryskip \sectext Basering in the following is {\tt ring r = 0, (x, y, z, mu, nu), dp;}\cr \entryskip \longitem number n = 5/3;\cr \entryskip \longentry poly p(1) = 3/4x3yz4+2xy2;\par poly p(2) = (5/3)*mu\^{}2*nu\^{}3+n*yz2;& {\tt p(1)} equals $3/4x^3yz^4+2xy^2$. Short format of mono\-mials is valid for one-character ring variables only.\cr \entryskip \longentry ideal i = p(1..2), x+y;& note the use of indexed names\cr \entryskip \longentry vector v = [p(1), p(2), x+y];\par vector w = 2*p(1)*gen(6)+n*nu*gen(1);& vectors may be written in brackets ({\tt [$\ldots$]}) or expressed as linear combinations of the canonical generators {\tt gen({\it i\/})}\cr \entryskip \longitem module mo = v, w, x+y*gen(1);\cr \entryskip \longitem resolution r = sres(std(mo), 0);\cr \entryskip \longentry matrix ma[2][2] = 5/3, p(1), 101;& the rules for declaring, filling, and accessing integer matrices apply to types {\tt matrix} and {\tt vector}, too\cr \entryskip \longentry list l = iv, v, p(1..2), mo;& lists may collect objects of any type. They are ring-dependent iff one of the entries is.\cr \entryskip \longentry def d = read("MPfile:r example.mp");& a name of type {\tt def} inherits the type of the object assigned first to it. Useful if the actual type of an object is unknown.\cr \endsec \sec Monitoring and debugging tools() timer = 1;& print time used for commands to execute\cr \longentry int t = timer; {\it command\/}; \rep; timer-t;& print time used for {\it commands\/} to execute\cr memory(1);& print number of bytes allocated from system\cr option(prot);& show algorithm protocol\cr option(mem);& show algorithm memory usage\cr \entryskip TRACE = 1;& print protocol on execution of procedures\cr listvar(all);& list all (user-)defined names\cr \longentry listvar({\it ringname\/});& list all names belonging to {\it ringname}\cr \endsec \eject \sec Options() option();& show current option settings\cr \longentry option($option_1$, no$option_2$, $\ldots$);& switch $option_1$ on and $option_2$ off, resp.\cr option(none);& reset all options to default values\cr \sectext Type {\tt help option;} for a list of all options.\cr \subsec{Monitoring} debugLib& show loading of procedures from libraries\cr mem& show algorithm memory usage\cr prot& show algorithm protocol\cr \subsec{Standard bases} fastHC& try to find highest corner as fast as possible\cr intStrategy& avoid divisions\cr morePairs& create additional pairs\cr notSugar& disable sugar strategy\cr redSB& compute reduced standard bases\cr redTail& reduce tails\cr sugarCrit& use sugar criteria\cr weightM& automatically compute weights\cr \subsec{Resolutions} minRes& do additional minimizing\cr notRegularity& disable regularity bound\cr \subsec{Miscellany} returnSB& let some functions return standard bases\cr \endsec \sec System variables() \sectext Type {\tt help System variables;} for a list of all system variables.\cr \subsec{Standard bases} degBound& stop if (weighted) total degree exceeds {\tt degBound}\cr multBound& stop if multiplicity gets smaller than {\tt multBound}\cr noether& cut off all monomials above monomial {\tt noether}\cr \subsec{Miscellany} basering& current basering\cr minpoly& minimal polynomial for algebraic extensions\cr short& do not print monomials in short format if zero\cr timer& on assignment of a non-zero value show time used for execution of executed commands. On evaluation, return system time in seconds used by \Singular\ since start\cr TRACE& print information on procedures being executed if larger than one\cr \endsec \sec Input and output() < "{\it filename\/}";& load and execute {\it filename\/}\cr \longentry write("{\it filename\/}", {\it expression}, \rep)& write {\it expressions\/} to ASCII file {\it filename}\cr \longentry read("{\it filename\/}");& read ASCII file {\it filename\/} and return content as a string. See also example below.\cr \longentry dump("MPfile: {\it filename\/}");\par getdump("MPfile: {\it filename\/}");& dump current state of {\sc Singular} to {\it filename} and retrieve it, resp.\cr \entryskip \sectext An example how to write one single expression (in this case the ideal {\tt i}) to a file and read it back from there: {\tt write("i.save", i);\par execute("ideal i=" + read("i.save") + ";"); }\cr \endsec \eject \sec Libraries() LIB "{\it library\/}";& load {\it library}\cr help {\it library\/};& show help on {\it library}\cr help all.lib;& show list of all libraries\cr \endsec \sec Mapping(1.5cm) \longentry map {\it name\/} = {\it ringname}, {\it ideal\/};& declare a map {\it name\/} from {\it ringname\/} to current basering. The $i$-th ring variable from {\it ringname\/} is mapped to the $i$-th generator of {\it ideal}.\cr \longentry {\it mapname\/}({\it expression\/})& apply map {\it mapname\/} to {\it expression}\cr \entryskip \sectext Coefficients between rings with different basefields are mapped in the following way (non-canonical maps only):\strut \abovedisplayskip=0pt \belowdisplayskip=0pt $$ \eqalign{Z_p \rightarrow Q& :[i]_p \mapsto i \in [-p/2,p/2] \subset Z\cr Z_p \rightarrow Z_q&:[i]_p \mapsto i \in [-p/2,p/2] \subset Z, i \mapsto [i]_q} $$ \cr \noalign{\vskip -9pt} % dirty trick, gobbles the trailing \strut from \sectext \entryskip \longentry fetch({\it ringname}, {\it name\/})& map from ring {\it ringname\/} to current base\-ring. The rings have to be identical up to names of ring variables\cr \longentry imap({\it ringname}, {\it name\/})& map from subring {\it ringname\/} to current basering\cr \longentry subst({\it expression}, {\it ringvar}, {\it monomial\/})& substitute {\it ringvar\/} by {\it monomial\/} in {\it expression}\cr \endsec \sec Miscellany(1.5cm) \longentry setring({\it ringname\/})& make {\it ringname\/} the current basering\cr \subsec{Data on polynomials} \longentry ord({\it poly\/\alt vector\/})& return (weighted) degree of initial term\cr \longentry deg({\it poly\/\alt vector\/})& return maximal (weighted) degree\cr \longentry size({\it ideal\/\alt module\/})\par size({\it poly\/\alt vector\/})\par size({\it string\/\alt intvec\/\alt list\/})& return (1) number of non-zero generators; (2) number of monomials; (3) length\cr \longentry lead({\it expression\/})& return initial term(s)\cr \subsec{Operations on polynomials} \longentry gcd({\it $\hbox{poly}_1$}, {\it $\hbox{poly}_2$\/})& return greatest common divisor\cr \longentry factorize({\it poly\/}\opt{, {\it int\/}})& return irreducible factors. Return constant factor and multiplicities in dependency on {\it int}.\cr \endsec \sec Differentiation and jets(1.5cm) \longentry diff({\it expression}, {\it ringvar\/})\par diff({\it $\hbox{ideal}_1$}, {\it $\hbox{ideal}_2$\/})& (1) return partial derivation by {\it ringvar\/}; (2) differentiate each elt.\ of {\it $\hbox{ideal}_2$\/} by the differential operators corres\-pon\-ding to the elements of {\it $\hbox{ideal}_1$}\cr \longentry jacob({\it poly\/\alt ideal\/})& return jacobi ideal or matrix, resp.\cr \longentry jet({\it expression}, {\it int\/}\opt{, {\it intvec\/}})& return {\it int\/}-jet of {\it expression}. Return weighted {\it int\/}-jet if {\it intvec\/} is specifified.\cr \endsec \eject \sec Standard bases(1.5cm) \longentry groebner({\it ideal\/\alt module\/}\opt{, {\it int\/}})& compute a standard basis (SB) of {\it ideal\/} resp.\ {\it module\/} using a heuristically chosen method. Delimit com\-pu\-tation time to {\it int\/} seconds.\cr \longentry std({\it ideal\/\alt module\/}\opt{, {\it intvec\/}})& compute a SB. Use first Hilbert series {\it intvec\/} (result from {\tt hilb($\ldots$, 1)}) for Hilbert-driven computation.\cr \longentry stdfglm({\it ideal\/}\opt{, {\it string\/}})& use FGLM algorithm to compute a SB from a SB w.r.t.\ the ``simpler'' ordering {\it string\/} (de\-faults to {\tt dp})\cr \longentry stdhilb({\it ideal\/}\opt{, {\it intvec\/}})& use Hilbert-driven algorithm to compute a SB. If Hil\-bert series {\it intvec\/} is not specified compute it first.\cr \longentry fglm({\it ringname}, {\it idealname\/})& use FGLM algorithm to transform SB {\it idealname\/} from ring {\it ringname\/} to a SB w.r.t.\ the ordering of the current basering\cr \longentry reduce({\it expression}, {\it ideal\/\alt module\/}\opt{, {\it int\/}})& reduce {\it expression\/} w.r.t.\ second argument which should be a SB. Use lazy reduction if {\it int\/} equals one.\cr \endsec \sec Computation of invariants(1.5cm) \sectext Most of the results are meaningful only if the input ideal or module is represented by a standard basis.\cr \longentry degree({\it ideal\/\alt module\/})& display (Krull) dimension, codimension and multiplicity\cr \longentry dim({\it ideal\/\alt module\/})& return (Krull) dimension\cr \longentry hilb({\it ideal\/\alt module\/}\opt{, {\it int\/}})& display first and second Hilbert series with one argument. Return {\it int}-th Hilber series otherwise (${\it \hbox{int}} = 1,2$).\cr \longentry mult({\it ideal\/\alt module\/})& return multiplicity\cr \longentry vdim({\it ideal\/\alt module\/})& return vector space dimension of current basering modulo {\it ideal\/} or {\it module}, resp.\cr \endsec \sec Resolutions(1.5cm) \sectext An integer argument {\it length\/} in the following descriptions specifies the length of the resolution to compute. If {\it length\/} equals zero, the whole resolution is computed.\cr \longentry res({\it ideal\/\alt module}, {\it length\/}\opt{, {\it int\/}})& compute a free resolution (FR) of {\it ideal\/} resp.\ {\it module\/} using a heuristically chosen method. Compute a minimal resolution if a third argument is given.\cr \longentry mres({\it ideal\/\alt module}, {\it length\/})& compute a minimal FR using the standard basis method\cr \longentry lres({\it ideal\/\alt module}, {\it length\/})& compute a FR using LaSacala's method\cr \longentry sres({\it ideal\/\alt module}, {\it length\/})& compute a FR using Schreyer's method\cr \longentry syz({\it ideal\/\alt module\/})& compute the first syzygy\cr \longentry minres({\it resolution\/\alt list\/})& minimize a free resolution\cr \longentry betty({\it resolution\/\alt list\/})& compute the graded Betti numbers of a module represented by a resolution\cr \endsec \bye texi2html-1.82/test/singular_manual/README_src.texi0000644000175000017500000001162311264347126024100 0ustar flichtenheldflichtenheld@comment -*-texinfo-*- @comment Id: README_src.texi,v 1.1 2003/08/08 14:27:06 pertusus Exp $ @c FILE: README_src.texi @c PURPOSE: This should reside as README file in the src directory of the @c Singular ftp site. @ifclear VERSION @include version.texi @end ifclear @majorheading Welcome to the Source FTP site of SINGULAR @sc{Singular} is a Computer Algebra system for polynomial computations with special emphasize on the needs of commutative algebra, algebraic geometry, singularity theory and polynomial system solving. For a more detailed overview of @sc{Singular}, see @display @uref{http://www.singular.uni-kl.de/Overview/} @end display So far, there are only version for Linux, HPUX, SunOS, IRIX, AIX, FreeBSD 4.2, MacOS X, MacOS 9, and Windows 95/98/ME/NT/2K/XP. @macro nref{name,url} @ifhtml @item @uref{\url\,,\name\} @end ifhtml @ifinfo @item @code{\name\} @end ifinfo @end macro In this directory you find the following files: @table @asis @nref{COPYING, COPYING.html} license information for @sc{Singular} @item @code{Singular-@value{VERSION}-.tar.gz} @sc{Singular} distribution archive which contains the package @code{} @item @code{omalloc.tar.gz} @sc{Singular} distribution archives which contains the package omalloc @end table @heading Compiling SINGULAR for a Unix platform Make sure that you have approximately 120 MByte of free disk space and follow these steps. @enumerate @item Make sure that you have the following software (the list may be incomplete): @enumerate @item general unix utilities: grep, test, sed, cp, mv, gzip, uudecode, ... @item autoconf @item gnu-make @item gcc, g++ (version 2.7.2 preferred, but gcc version 2.6.3 to 2.95.3, egcs 1.0.3 and 1.1.2 should work, gcc 2.96 does not work) @item bison (version >= 1.2.2) @item flex (version >=2.4) @item perl (version >=5) @item library gmp (version 3.x.x) @item (optional) library libreadline @item (optional, required to build the documentation:) latex2html, tex, texi2html, texinfo @* (your latex2html should produce gif files, not png files) @end enumerate @item (optional, required for MP:) @*make sure that you can log in to your computer via rsh/remsh or ssh without a password (check .rhosts/.shosts); otherwise the configure script stops while checking this: if you cannot fix it, simply kill the rsh/ssh-processes - the configure will then disable this particulare feature @*The following is tested by configure @*rsh localhost uname @*ssh localhost uname @*rsh `hostname` uname @*ssh `hostname` uname @item You need to download all of the .tar.gz-files @item create a new working directory @item unpack all packages into that working directory @item (optional, for porting to a unknown machine:) fix ./singuname.sh not to report something unknown, but to recognize the machine @item run ./configure @*(try ./configure --help, ./omalloc/configure --help, ./MP/configure --help, ./factory/configure --help, ./Singular/configure --help for a list of all options of configure) @item make install (resp. gmake install - the make program must be GNU-Make) the make process will (hopefully) build: @enumerate @item omalloc: the memry management routines (required) @item MP: Multi-Protocoll (optional) @item factory (optional, but strongly recommended) @item libfac (optional, but strongly recommended) @item Singular (Kernel, required) @item doc (only possible, if all optional packages are included) @item emacs (only possible, if doc was build) @item IntegerProgramming @item misc @end enumerate @item if you want to make any change in the directory Singular, run make depend there @item to install the resulting files at any other place in the system, run @* make bindist sharedist @*(sharedist can only be build if doc was build sucessfully) and install the resulting .tar.gz files as explained for the binary distribution @item if you compiled Singular for a non-standard architecture and you are willing to share your porting effort, upload the changed sources and the resulting binaries to @code{ftp://www.mathematik.uni-kl.de/pub/Incoming} and send us an email about it (Singular@@mathematik.uni-kl.de) @item bug-fixes or other improvements to the source code are welcome @end enumerate @heading Notes for specific platforms @itemize @asis @item Windows (Cygwin):@* ./configure --with-malloc=system @item MacOS X:@* you need a file values.h where MP can find it (we copied one from Linux)@* ./configure --with-malloc=system @item DecAlpha/Linux:@* egcs-1.1.2 does not work, but gcc version 2.95.2 does@* ./configure --without-MP @item FreeBSD 4.2:@* you need a file values.h where MP can find it (we copied one from Linux)@* ./configure --with-malloc=system @end itemize @heading Compiling SINGULAR for a Non-Unix platform This is a non-trivial task. Please contact us directly. (@uref{mailto:Singular@@mathematik.uni-kl.de}) GOOD LUCK and ENJOY! Your @sc{Singular} team. texi2html-1.82/test/singular_manual/INSTALL_rpm.texi0000644000175000017500000001201011264347126024247 0ustar flichtenheldflichtenheld@comment -*-texinfo-*- @comment Id: INSTALL_rpm.texi,v 1.1 2003/08/08 14:27:06 pertusus Exp $ @c FILE: INSTALL_rpm.texi @c PURPOSE: Installation instruction for Singular on RPM based Linux systems @c @ifclear VERSION @include version.texi @end ifclear @ifclear singularmanual @majorheading Installation of @sc{Singular} @value{RPM_VERSION} on @sc{rpm} based @sc{Linux} systems @end ifclear @sc{rpm} is a powerful package manager, which can be used to build, install, query, verify, update, and erase individual software packages. @sc{Singular} can be installed on an @sc{rpm} based @sc{Linux} system. The installation of @sc{Singular} on a general @sc{Unix} system is described in @code{INSTALL_unix}. @heading @sc{Singular} @sc{rpm} packages There are the following @sc{Singular} @sc{rpm} packages. @table @code @item @uref{Singular-@value{RPM_VERSION}-1.i386.rpm} contains architecture dependend executables like the Singular program. @item @uref{Singular-static-@value{RPM_VERSION}-1.i386.rpm} contains the static version of the architecture dependend executables. @item @uref{Singular-share-@value{RPM_VERSION}-1.noarch.rpm} contains architecture independend data like documentation and libraries. @item @uref{Singular-desktop-@value{RPM_VERSION}-1.noarch.rpm} contains icons and menues for @sc{gnome} and @sc{kde}. @end table The above @sc{rpm} packages are available at @display @uref{ftp://www.mathematik.uni-kl.de/pub/Math/Singular/UNIX}. @end display @include register.texi @heading Usage of @sc{rpm} packages @enumerate @item You can only use the @sc{Singular} @sc{rpm} packages for an @sc{rpm} based @sc{Linux} system like @sc{RedHat Linux} or @sc{SuSE Linux}. You can check this by typing @smallexample rpm @end smallexample in a command shell. This should produce an output like @smallexample RPM Version 4.0.3 Copyright (C) 1998-2000 - Red Hat, Inc. This program may be freely redistributed under the terms of the GNU GPL Usage: rpm @{--help@} rpm @{--version@} @end smallexample @item To deal with @sc{rpm} packages, you can either use the @sc{rpm} command line tool @code{rpm} or a graphical @sc{rpm} frontend like e.g. @code{gnorpm} under @sc{gnome} or @code{kpackage} under @sc{kde}. For a description of the usage of @code{rpm}, type @smallexample rpm -h @end smallexample in a command shell. @item To install or deinstall @sc{rpm} packages, you have to be superuser. To become superuser, type @smallexample su @end smallexample in a command shell and enter the root password. @end enumerate @heading Installation of @sc{Singular} @sc{rpm} packages In the following, we describe how to install @sc{Singular} using the @sc{rpm} command line tool @code{rpm}. Alternatively, you can use a graphical @sc{rpm} frontend like e.g. @code{gnorpm} under @sc{gnome} or @code{kpackage} under @sc{kde}. @enumerate @item The installation requires about 20MB of free disk space under @code{/opt}. You can check the free disk space by typing @smallexample df -h @end smallexample in a command shell. @item Different versions of @sc{Singular} @sc{rpm} packages coexist without conflicts. @item To install the @sc{Singular} binary @sc{rpm} package, type @smallexample rpm -ivh Singular-@value{RPM_VERSION}-1.i386.rpm @end smallexample in a command shell. This requires several shared libraries. If these are not present in your system, @code{rpm} will give an error report. In this case, you have to install @sc{rpm} packages providing these shared libraries and retry. Alternatively, you can install the @sc{Singular} static binary @sc{rpm} package by typing @smallexample rpm -ivh Singular-static-@value{RPM_VERSION}-1.i386.rpm @end smallexample in a command shell. @item To install the @sc{Singular} shared @sc{rpm} package, type @smallexample rpm -ivh Singular-share-@value{RPM_VERSION}-1.noarch.rpm @end smallexample in a command shell. @item To install a @sc{Singular} menu @sc{rpm} package, @sc{gnome} or @sc{kde} have to be installed. Type @smallexample rpm -ivh Singular-desktop-@value{RPM_VERSION}-1.noarch.rpm @end smallexample in a command shell. @item To deinstall a @sc{Singular} @sc{rpm} package, type @smallexample rpm -e Singular-...-@value{RPM_VERSION} @end smallexample in a command shell. @end enumerate @heading Starting @sc{Singular} @enumerate @item To run @sc{Singular} @value{RPM_VERSION}, type @smallexample Singular-@value{VERSION} @end smallexample in a command shell. To run @sc{Singular} @value{RPM_VERSION} under @sc{Emacs}, type @smallexample ESingular-@value{VERSION} @end smallexample in a command shell. @item There is a menu @code{Singular @value{RPM_VERSION}} in the @sc{gnome} and @sc{kde} menu with menu items @code{TSingular}, @code{ESingular}, and @code{Manual}. Click on the menu item @code{TSingular} to run @sc{Singular} @value{RPM_VERSION} in a terminal, on the menu item @code{ESingular} to run @sc{Singular} @value{RPM_VERSION} under @sc{Emacs}, and on the menu item @code{Manual} to read the @sc{Singular} @value{RPM_VERSION} manual. @end enumerate @include info.texi @ifclear singularmanual Good luck and enjoy! Your @sc{Singular} team. @end ifclear texi2html-1.82/test/singular_manual/t2h_singular.init0000644000175000017500000001412711264347126024671 0ustar flichtenheldflichtenheld# -*-perl-*- ###################################################################### # # File: t2h_singular.init init file for singular t2h # # we only redefine things which ar of relevance to singular # all the others we simply "include" # -prefix # Set the output file prefix, prepended to all .html, .png and .pl files. $PREFIX = 'sing'; # -expand # if set to "tex" (or, "info") expand @iftex and @tex (or, @ifinfo) sections # else, neither expand @iftex, @tex, nor @ifinfo sections @EXPAND = ('html', 'tex'); # if set, creates one html file per node $SPLIT = 'node'; #if set cross-references are given without section numbers $SHORT_REF = 1; # if set, chatter about what we are doing $VERBOSE = 1; # print index summary for 'cp' index $IDX_SUMMARY = 'cp'; my $T2H_SING_base_images = '../singular_images/'; # inside $BODYTEXT = 'lang="en" background="'.${T2H_SING_base_images}.'Mybg.png"'; # after $AFTER_BODY_OPEN = < $PRE_BODY_CLOSE = <\n" . # &$anchor('', $Texi2HTML::HREF{Contents}, "Table of Contents") . # "\n
    \n" . # &$anchor('', $Texi2HTML::HREF{About}, "About this document") . # ""; # # &$print_foot_navigation($fh); # print $fh "$SMALL_RULE\n"; # if ($SPLIT) # { # &$print_navigation($fh, $buttons); # &$print_page_foot($fh); # } my $fh = shift; #my $buttons = shift; #my $nwords = shift; my $end_page = shift; my $buttons = \@MISC_BUTTONS; print $fh "
    \n" . &$anchor('', $Texi2HTML::HREF{Contents}, "Table of Contents") . "\n
    \n" . &$anchor('', $Texi2HTML::HREF{About}, "About this document") . "
    "; &$print_foot_navigation($fh); print $fh "$SMALL_RULE\n"; #if ($SPLIT) if ($end_page) { print $fh "".&$print_navigation($buttons); &$print_page_foot($fh); } } # footer of page sub T2H_SING_print_page_foot { my $fh = shift; print $fh <             User manual for
    Singular version $main::value{VERSION}, $main::value{VERSION_DATE}, generated by $Texi2HTML::THISDOC{'program'}.
    $PRE_BODY_CLOSE EOT } sub singular_banner { my $result = ''; $result .= <Top EOT # print $fh $result if (defined($fh)); return $result; } # always use bottom navigation $WORDS_IN_PAGE = 0; $VERTICAL_HEAD_NAVIGATION = 1; @SECTION_BUTTONS = ( \&singular_banner, 'Back', 'Forward', 'FastBack', 'FastForward', 'Up', 'Top', 'Contents', 'Index', 'About' ); @NODE_FOOTER_BUTTONS = @SECTION_BUTTONS; # buttons for misc stuff @MISC_BUTTONS = (\&singular_banner, 'Top', 'Contents', 'Index', 'About'); $ICONS = 1; if ($T2H_BLUE_BUTTONS) { %ACTIVE_ICONS = ( 'Top', 'blue_top.png', 'Contents', 'blue_dir.png', 'Overview', '', 'Index', 'blue_readme.png', 'Back', 'blue_prev.png', 'FastBack', 'blue_pprev.png', 'Prev', 'blue_pprev.png', 'Up', 'blue_up.png', 'Next', 'blue_nnext.png', 'Forward', 'blue_next.png', 'FastForward', 'blue_nnext.png', 'About' , 'blue_help.png', ' ', '' ); %PASSIVE_ICONS = ( 'Top', 'blue_top.png', 'Contents', 'blue_dir.png', 'Overview', '', 'Index', 'blue_readme.png', 'Back', 'blue_prev.png', 'FastBack', 'blue_pprev.png', 'Prev', 'blue_pprev.png', 'Up', 'blue_up.png', 'Next', 'blue_nnext.png', 'Forward', 'blue_next.png', 'FastForward', 'blue_nnext.png', 'About' , 'blue_help.png', ); } else { %ACTIVE_ICONS = ( 'Top', 'a_top.png', 'Contents', 'a_tableofcon.png', 'Overview', '', 'Index', 'a_index.png', 'Back', 'a_left.png', 'FastBack', 'a_leftdouble.png', 'Prev', 'a_leftdouble.png', 'Up', 'a_up.png', 'Next', 'a_rightdouble.png', 'Forward', 'a_right.png', 'FastForward', 'a_rightdouble.png', 'About' , 'a_help.png', ' ', 'a_empty.png' ); %PASSIVE_ICONS = ( 'Top', 'a_top_na.png', 'Contents', 'a_tableofcon_na.png', 'Overview', '', 'Index', 'a_index_na.png', 'Back', 'a_left_na.png', 'FastBack', 'a_leftdouble_na.png', 'Prev', 'a_leftdouble_na.png', 'Up', 'a_up_na.png', 'Next', 'a_rightdouble_na.png', 'Forward', 'a_right_na.png', 'FastForward', 'a_rightdouble_na.png', 'About' , 'a_help_na.png', ); } foreach my $hash_ref((\%ACTIVE_ICONS, \%PASSIVE_ICONS)) { foreach my $key (keys(%$hash_ref)) { next if ($hash_ref->{$key} eq ''); $hash_ref->{$key} = $T2H_SING_base_images.$hash_ref->{$key}; } } sub T2H_SING_pre_about { return <Singular version $main::value{VERSION}, $main::value{VERSION_DATE}.
    For questions and comments about Singular, send email to singular\@mathematik.uni-kl.de.

    This document was generated by $Texi2HTML::THISDOC{'program'} and LaTeX2HTML and is best viewed with a 16 or 18 point screen font.

    EOT } $PRE_ABOUT = \&T2H_SING_pre_about; # a whole menu $menu = \&t2h_sing_menu; sub t2h_sing_menu($) { my $text = shift; if ($text =~ /\S/) { return "
    \n" . $text. "
    \n"; } return ''; } 1; # This must be the last line texi2html-1.82/test/singular_manual/README_download.texi0000644000175000017500000001433311264347126025121 0ustar flichtenheldflichtenheld@comment -*-texinfo-*- @comment Id: README_download.texi,v 1.1 2003/08/08 14:27:06 pertusus Exp $ @c FILE: README_download.texi @c PURPOSE: downloading instructions, to be includeded in manual and README_ftp @c @ifclear VERSION @include version.texi @end ifclear @heading To download @sc{Singular} for a Unix platform Make sure that you have approximately 20 MByte of free disk space and follow these steps. @enumerate @item You need to download two (archive) files: @table @code @item Singular-@value{VERSION}-share.tar.gz contains architecture independent data like documentation and libraries @*@uref{ftp://www.mathematik.uni-kl.de/pub/Math/Singular/UNIX/Singular-@value{VERSION}-share.tar.gz} @item Singular-@value{VERSION}-.tar.gz contains architecture dependent executables, like the @sc{Singular} program. @end table @code{} is a description of the processor and operating system for which @sc{Singular} is compiled. Choose one of the following: @multitable @columnfractions .2 .8 @item @code{ix86-Linux} @tab PC's running under Linux with @code{libc} version 6 (e.g., for SuSe Linux distribution version >= 6; RedHat Linux distribution version >= 5.2). @* @*@uref{ftp://www.mathematik.uni-kl.de/pub/Math/Singular/UNIX/Singular-@value{VERSION}-ix86-Linux.tar.gz} @item @code{ix86-Linux-libc5} @tab PC's running under Linux with @code{libc} version 5 (if you are not sure which @code{libc} version you have, run @code{ldd /bin/ls}). @*@uref{ftp://www.mathematik.uni-kl.de/pub/Math/Singular/UNIX/Singular-@value{VERSION}-ix86-Linux-libc5.tar.gz} @item @code{ix86-freebsd} @tab 's running under FreeBSD @*@uref{ftp://www.mathematik.uni-kl.de/pub/Math/Singular/UNIX/Singular-@value{VERSION}-ix86-freebsd.tar.gz} @item @code{ix86-Win} @tab PC's running Windows 95/98/ME/NT/2K/XP which have Cygwin version 1.3.9 (or higher) already installed. Unless you are familiar with Cygwin, we recommend that you download one of the self-extracting archives as described below. @item @code{HPUX-9} @tab HP workstations running under HPUX version 9 @*@uref{ftp://www.mathematik.uni-kl.de/pub/Math/Singular/UNIX/Singular-@value{VERSION}-HPUX-9.tar.gz} @item @code{HPUX-10} @tab HP workstations running under HPUX version 10 @*@uref{ftp://www.mathematik.uni-kl.de/pub/Math/Singular/UNIX/Singular-@value{VERSION}-HPUX-10.tar.gz} @item @code{SunOS-5} @tab Sun workstations running Solaris version 5 @*@uref{ftp://www.mathematik.uni-kl.de/pub/Math/Singular/UNIX/Singular-@value{VERSION}-SunOS-5.tar.gz} @item @code{IRIX-6} @tab IRIX workstations running IRIX version 6 @*@uref{ftp://www.mathematik.uni-kl.de/pub/Math/Singular/UNIX/Singular-@value{VERSION}-IRIX-6.tar.gz} @item @code{AIX-4} @tab AIX workstations running AIX version 4 @*@uref{ftp://www.mathematik.uni-kl.de/pub/Math/Singular/UNIX/Singular-@value{VERSION}-AIX-4.tar.gz} @item @code{PowerMacintosh-darwin} @tab PowerMacintosh running Mac OS X @*@uref{ftp://www.mathematik.uni-kl.de/pub/Math/Singular/MAC/OsX/Singular-@value{VERSION}-PowerMacintosh-darwin.tar.gz} @item @code{DecAlpha-Linux} @tab Digital Dec Alpha running Linux (RedHat 5.2) @*@uref{ftp://www.mathematik.uni-kl.de/pub/Math/Singular/UNIX/Singular-@value{VERSION}-DecAlpha-Linux.tar.gz} @item @code{DecAlpha-OSF1} @tab Digital Dec Alpha running OSF 1 @*@uref{ftp://www.mathematik.uni-kl.de/pub/Math/Singular/UNIX/Singular-@value{VERSION}-DecAlpha-OSF1.tar.gz} @end multitable Please contact us if you can not find an appropriate architecture dependent archive. @item Simply change to the directory in which you wish to install @sc{Singular} (usually wherever you install 3rd-party software): @smallexample cd /usr/local/ @end smallexample @sc{Singular} specific subdirectories will be created in such a way that multiple versions and multiple architecture dependent files of @sc{Singular} can peaceably coexist under the same @code{/usr/local/} tree. @item Unpack the archives: @smallexample gzip -dc Singular-@value{VERSION}-.tar.gz | tar -pxf - gzip -dc Singular-@value{VERSION}-share.tar.gz | tar -pxf - @end smallexample If you have downloaded @code{Singular-@value{VERSION}-share.zip}, unpack with @smallexample unzip -u Singular-@value{VERSION}-share.zip @end smallexample @item After unpacking, see the created file @code{Singular/@value{VERSION}/INSTALL} (which is also located at @uref{ftp://www.mathematik.uni-kl.de/pub/Math/Singular/INSTALL_unix.html} for details on how to finish the installation. @end enumerate @heading To download @sc{Singular} for Windows 95/98/ME/NT/2K/XP @enumerate @item Download one of the following self-extracting archives: @table @code @item @uref{ftp://www.mathematik.uni-kl.de/pub/Math/Singular/WINDOWS/Singular-@value{VERSION}-Compact.exe,Singular-@value{VERSION}-Compact.exe} Minimal archive to download. Installs Singular and minimal set of needed tools and DLLs. @item @uref{ftp://www.mathematik.uni-kl.de/pub/Math/Singular/WINDOWS/Singular-@value{VERSION}-Typical.exe,Singular-@value{VERSION}-Typical.exe} Typical archive to download. Installs Singular and the XEmacs editor to run ESingular. @end table @item Double-click (or, execute), the self-extracting archives, and @strong{carefully} follow the instructions given there. @item If, while running setup, you obtain the following message @code{Setup failed to launch installation engine:} @code{Error loading type library/DLL}, then you need to download and execute Microsoft DCOM98 package @uref{http://www.microsoft.com/com/dcom/dcom98/download.asp}. Such a problem could appear on Win 95/98. @item In case of problems, see the created file @code{/etc/INSTALL.txt} (which is also located at @uref{ftp://www.mathematik.uni-kl.de/pub/Math/Singular/WINDOWS/INSTALL_win.htm} for details on how to finish the installation. @end enumerate @heading To download @sc{Singular} for the Macintosh For the @sc{Singular} version for Mac OS X refer to the Unix section. @*The @sc{Singular} version for Mac OS 9 is available as @uref{ftp://www.mathematik.uni-kl.de/pub/Math/Singular/MAC/classic/Singular-2-0-2-html.sea.hqx} (documentation) and @uref{ftp://www.mathematik.uni-kl.de/pub/Math/Singular/MAC/classic/Singular-2-0-2-ppc-MPW.sea.hqx} (binaries and libraries). The file @uref{ftp://www.mathematik.uni-kl.de/pub/Math/Singular/MAC/classic/INSTALL_mac.html} gives details on how to finish the installation. texi2html-1.82/test/singular_manual/INSTALL_osx.texi0000644000175000017500000002203011264347126024265 0ustar flichtenheldflichtenheld@comment -*-texinfo-*- @comment Id: INSTALL_osx.texi,v 1.1 2003/08/08 14:27:06 pertusus Exp $ @c FILE: INSTALL_unix.texi @c PURPOSE: Installation instruction for Singular on MacOS X @c @ifclear VERSION @include version.texi @end ifclear @ifclear singularmanual @majorheading MacOS X installation instructions for @sc{Singular} version @value{VERSION} @end ifclear @ifclear UNAME @set _UNAME @end ifclear @ifset UNAME @include uname.texi @end ifset To install @sc{Singular} on @ifset UNAME @value{_UNAME} @end ifset @ifclear UNAME MacOS X @end ifclear , you need the following two archives: @table @code @item Singular-@value{VERSION}-share.tar.gz contains architecture independent data like documentation and libraries (alternatively, you may also download @code{Singular-@value{VERSION}-share.zip}). @item Singular-@value{VERSION}-@value{_UNAME}.tar.gz contains architecture dependent executables, like the @sc{Singular} program. @end table @ifclear UNAME @* @code{@value{_UNAME}} is a description of the processor and operating system for which @sc{Singular} is compiled (e.g, @code{ix86-Linux}). Please contact us if you can not find an appropriate architecture dependent archive. @end ifclear You can obtain these (and other) archives from @display @uref{ftp://www.mathematik.uni-kl.de/pub/Math/Singular}. @end display @include register.texi @heading To install SINGULAR Make sure that you have approximately 12MByte of free disk space and follow these steps. @enumerate @item Simply change to the directory in which you wish to install @sc{Singular} (usually wherever you install 3rd-party software), for example: @smallexample cd /usr/local or mkdir install;cd install (you do not need root privileges in this case) @end smallexample @sc{Singular} specific subdirectories will be created in such a way that multiple versions and multiple architecture dependent files of @sc{Singular} can peaceably coexist under the same @code{/usr/local} tree. @item Unpack the archives: @smallexample gzip -dc /Singular-@value{VERSION}-@value{_UNAME}.tar.gz | tar -pxf - gzip -dc /Singular-@value{VERSION}-share.tar.gz | tar -pxf - @end smallexample @c version 2-0-x does not have *-share.zip: @c If you have downloaded @code{Singular-@value{VERSION}-share.zip}, @c unpack with @c @smallexample @c unzip -u Singular-@value{VERSION}-share.zip @c @end smallexample This creates the the directory Singular/@value{VERSION} with @multitable @columnfractions .36 .64 @item (sub)directories @tab which contain @item @code{@value{_UNAME}} @tab @code{Singular} executetable @item @code{LIB} @tab @sc{Singular} libraries (@code{*.lib} files) @item @code{emacs} @tab files for the @sc{Singular} Emacs user interface @item @code{info} @tab info files of @sc{Singular} manual @item @code{html} @tab html files of @sc{Singular} manual @item @code{doc} @tab miscellaneous documentation files @item @code{examples} @tab @sc{Singular} examples (@code{*.sing} files) @end multitable For the executable to work, the directory layout must look pretty much like this; the executable looks for "sibling" directories at run-time to figure out where its @sc{Singular} libraries and on-line documentation files are. These constraints on the local directory layout are necessary to avoid having to hard-code pathnames into the executables, or require that environment variables be set before running the executable. In particular, you @strong{must not move or copy} the @sc{Singular} executables to another place, but use soft-links instead. @end enumerate The following steps are optional: @itemize @bullet @item Arrange that typing @code{Singular} at the shell prompt starts up the installed @sc{Singular} executable. If you have root permission, do: @smallexample ln -s `pwd`/Singular/@value{VERSION}/@value{_UNAME}/Singular /usr/local/bin/Singular-@value{VERSION} ln -s /usr/local/bin/Singular-@value{VERSION} /usr/local/bin/Singular @end smallexample Otherwise, append the directory @code{`pwd`/Singular/@value{VERSION}/@value{_UNAME}/} to your @code{$PATH} environment variable. For the @code{csh} (or, @code{tcsh}) shell do: @smallexample set path=(`pwd`/Singular/@value{VERSION}/@value{_UNAME} $path) @end smallexample For the @code{bash} (or, @code{ksh}) shell do: @smallexample export PATH=`pwd`/Singular/@value{VERSION}/@value{_UNAME}/:$PATH @end smallexample You also might want to adjust your personal start-up files (@code{~/.cshrc} for @code{csh}, @code{~/.tcshrc} for @code{tcsh}, or @code{~/.profile} for @code{bash}) accordingly, so that the @code{$PATH} variable is set automatically each time you login. @strong{IMPORTANT:} Do @emph{never} move or copy the file @code{Singular/@value{VERSION}/@value{_UNAME}/Singular} to another place, but use soft-links instead. @item If you wish to use any of following features of @sc{Singular}, make sure that the respective programs are installed on your system: @multitable @columnfractions .5 .5 @item @strong{Feature} @tab @strong{Requires} @item on-line @code{html} help @tab @uref{http://www.netscape.com,,netscape} browser @item on-line @code{info} help @tab @uref{http://www.texinfo.org,,info}, or @uref{http://math-www.uni-paderborn.de/~axel/tkinfo/,,tkinfo} texinfo browser programs @item TAB completion and history mechanism of ASCII-terminal interface @tab shared @uref{ftp://ftp.de.uu.net/pub/gnu/readline/,,readline} library, i.e. @code{/usr/lib/libreadline.so} @end multitable You may download most of these programs from @display @uref{ftp://www.mathematik.uni-kl.de/pub/Math/Singular/utils/}. @end display @item Customize the on-line help system: By default, on-line help is displayed in the @code{html} format using the @code{netscape} program. However, this behavior can be customized in several ways using the @sc{Singular} commands @code{system("--browser",)} and @code{system("--allow-net", 1)} (or, by starting up @sc{Singular} with the respective command line options). In particular, creating the file @code{Singular/@value{VERSION}/LIB/.singularrc} and putting the @sc{Singular} command @smallexample system("--allow-net", 1); @end smallexample in it, allows the on-line help system to fetch its @code{html} pages from @uref{http://www.singular.uni-kl.de, Singular's WWW home site} in case its local html pages are not found. That is, you may delete your local html pages, after setting this option. See also @ifset singularmanual @ref{The online help system}, @ref{Command line options}, and @ref{Startup sequence}, @end ifset @ifclear singularmanual the sections @emph{The online help system}, @emph{Command line options}, and @emph{Startup sequence} in the @sc{Singular} manual @end ifclear for more details on customizing the on-line help system. @item Add the line @smallexample * Singular:(singular.hlp). A system for polynomial computations @end smallexample to your system-wide @code{dir} file (usually @code{/usr/info/dir} or @code{/usr/local/info/dir} and copy or soft-link the file @code{Singular/@value{VERSION}/info/singular.hlp} to the directory of your @code{dir} file. @*This assures that the @sc{Singular} manual can be accessed from stand-alone texinfo browser programs such as @code{info} or @code{Emacs}. (It is not necessary for the use of the help system from within @code{Singular}.) @end itemize @heading Troubleshooting @itemize @bullet @item General: @sc{Singular} can not find its libraries or on-line help @enumerate @item Make sure that you have read and/or execute permission the files and directories of the Singular distribution. If in doubt, @code{cd} to the directory where you unpacked @sc{Singular}, and do (as root, if necessary): @smallexample chmod -R a+rX Singular @end smallexample @item Start up @sc{Singular}, and issue the command @code{system("Singular");}. If this does not return the correct and expanded location of the @sc{Singular} executable, then you found a bug in @sc{Singular}, which we ask you to report (see below). @item Check whether the directories containing the libraries and on-line help files can be found by @sc{Singular}: If @code{$bindir} denotes the directory where the @sc{Singular} executable resides, then @sc{Singular} looks for library files as follows: @* (0) the current directory @* (1) all dirs of the environment variable SINGULARPATH @* (2) @code{$bindir/LIB} @* (3) @code{$bindir/../LIB} @* (4) @code{/usr/local/Singular/@value{VERSION}/LIB} @* (4) @code{/usr/local/Singular/LIB} @* The on-line @code{info} files need to be at @code{$bindir/../info} and the @code{html} pages at @code{$bindir/../html}. @end enumerate You can inspect the found library and @code{info}/@code{html} directories by starting up @sc{Singular} with the @code{--version} option, or by issuing the @sc{Singular} command @code{system("--version");}. @item For any other troubles: @*Please send an email to @email{singular@@mathematik.uni-kl.de} and include the header which is displayed by starting up @sc{Singular} with the @code{-v} option, and a description of your machine (issue the command @code{uname -a} on your shell) in your report. @end itemize @include info.texi @ifclear singularmanual GOOD LUCK and ENJOY! Your @sc{Singular} team. @end ifclear texi2html-1.82/test/singular_manual/manual-titlepage.tex0000644000175000017500000000315411264347126025354 0ustar flichtenheldflichtenheld\documentclass[a4paper,german]{article} \usepackage[german]{babel} \usepackage{a4wide} %\usepackage{pandora} %\usepackage{amsmath} %\usepackage{amsfonts} %\usepackage{amssymb} %\usepackage{mathptm} \usepackage{epsfig} %\usepackage{changebar} %\usepackage{float} %\usepackage[isolatin]{inputenc} % Abstze: kein Einrcken, vertikaler Abstand \setlength{\parindent}{0pt} \setlength{\parskip}{5pt plus 2pt minus 1pt} \sloppy % Keine Seitenzahlen \pagestyle{empty} \begin{document} % \fontsize{20.74}{23}\selectfont \begin{center} % {\Large \verb?http://www.mathematik.uni-kl.de/~zca/Singular?}\\ %\vspace{-4ex} \begin{figure}[h] \noindent \centering\epsfig{file=singlogo,width=15cm} \end{figure} % \vspace{3ex} {\Large A Computer Algebra System for Polynomial Computations} \vspace{15ex} \Huge{\textbf{User Manual}} \huge{for \textsc{Singular} Version 1.3.6} \vspace{5ex} \Large{By G.-M.~Greuel, G.~Pfister, and H.~Sch\"onemann} \end{center} \begin{center} \large{With contributions by} \\ \large{O.~Bachmann, T.~Siebert, T.~Wichmann, W.~Pohl, A.~Fr\"ubis-Kr\"uger, W.~Decker, S.~Endra\ss, C.~ Gorzel, H.~ Grassmann, A.~Heydtmann, D.~Hillebrand, C.~Jung, U.~Klein, K.~Kr\"uger, M.~Lamm, B.~Martin, M.~ Messollen, W.~ Neumann, T.~N\"ussler, J.~Schmidt, M.~Schulze, R. Stobbe, M.~Wenk.} \end{center} \vspace{20ex} \begin{center} \large{ URL: \verb?http://www.mathematik.uni-kl.de/~zca/Singular? \\ email: \verb?singular@mathematik.uni-kl.de?\\ Fachbereich Mathematik \\ Zentrum f\"ur Computeralgebra \\ Universit\"at Kaiserslautern \\ D-67653 Kaiserslautern \\ Germany} \end{center} \end{document} texi2html-1.82/test/singular_manual/reference.tex0000644000175000017500000107612711264347126024074 0ustar flichtenheldflichtenheld@comment -*-texinfo-*- @comment This file was generated by doc2tex.pl from reference.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT reference.doc INSTEAD @comment Id: reference.tex,v 1.1 2003/08/08 14:27:06 pertusus Exp $ @comment this file contains the reference part of the manual @c The following directives are necessary for proper compilation @c with emacs (C-c C-e C-r). Please keep it as it is. Since it @c is wrapped in `@ifset' and `@end' it does not harm `tex' or @c `makeinfo' but is a great help in editing this file (emacs @c ignores the conditionals). @ignore %**start \input texinfo.tex @setfilename reference.hlp @node Top, Functions and system variables @menu * Functions and system variables:: @end menu @node Functions and system variables, Tricks and pitfalls, Data types, Top @chapter Functions and system variables %**end @end ignore @c --------------------------------------- @menu * Functions:: * Control structures:: * System variables:: @end menu @c --------------------------------------- @node Functions, Control structures, Functions and system variables, Functions and system variables @section Functions @cindex Functions This section gives a complete reference of all functions, commands and special variables of the @sc{Singular} kernel (i.e., all built-in commands). @xref{standard_lib}, for those functions from the @code{standard.lib} (this library is automatically loaded at start-up time) which extend the functionality of the kernel and are written in the @sc{Singular} programming language. The general syntax of a function is @format [target =] function_name (); @end format If no target is specified, the result is printed. In some cases (e.g., @code{export}, @code{keepring}, @code{kill}, @code{setring}, @code{type}) the brackets are optional. For the commands @code{help}, @code{break}, @code{quit}, @code{exit} and @code{LIB} no brackets are allowed. @ifinfo @*List of all supported kernel functions. @end ifinfo @menu * attrib:: * bareiss:: * betti:: * char:: * char_series:: * charstr:: * cleardenom:: * close:: * coef:: * coeffs:: * contract:: * dbprint:: * defined:: * deg:: * degree:: * delete:: * det:: * diff:: * dim:: * division:: * dump:: * eliminate:: * eval:: * ERROR:: * example:: * execute:: * exit:: * extgcd:: * facstd:: * factorize:: * fetch:: * fglm:: * fglmquot:: * filecmd:: * find:: * finduni:: * fprintf:: * freemodule:: * gcd:: * gen:: * getdump:: * groebner:: * help:: * highcorner:: * hilb:: * homog:: * hres:: * imap:: * impart:: * indepSet:: * insert:: * interred:: * intersect:: * jacob:: * jet:: * kbase:: * kill:: * killattrib:: * koszul:: * laguerre:: * lead:: * leadcoef:: * leadexp:: * leadmonom:: * LIB:: * lift:: * liftstd:: * listvar:: * lres:: * maxideal:: * memory:: * minbase:: * minor:: * minres:: * modulo:: * monitor:: * mpresmat:: * mres:: * mstd:: * mult:: * nameof:: * names:: * ncols:: * npars:: * nres:: * nrows:: * nvars:: * open:: * option:: * ord:: * ordstr:: * par:: * pardeg:: * parstr:: * preimage:: * prime:: * print:: * printf:: * prune:: * qhweight:: * quot:: * quote:: * quotient:: * random:: * read:: * reduce:: * regularity:: * repart:: * res:: * reservedName:: * resultant:: * rvar:: * setring:: * simplex:: * simplify:: * size:: * sortvec:: * sprintf:: * sres:: * status:: * std:: * stdfglm:: * stdhilb:: * subst:: * system:: * syz:: * trace:: * transpose:: * type:: * typeof:: * uressolve:: * vandermonde:: * var:: * varstr:: * vdim:: * wedge:: * weight:: * write:: @end menu @c --------------------------------------- @node attrib, bareiss, Functions, Functions @subsection attrib @cindex attrib @table @code @item @strong{Syntax:} @code{attrib (} name @code{)} @item @strong{Type:} none @item @strong{Purpose:} displays the attribute list of the object called name. @item @strong{Example:} @smallexample @c reused example attrib reference.doc:209 ring r=0,(x,y,z),dp; ideal I=std(maxideal(2)); attrib(I); @expansion{} attr:isSB, type int @c end example attrib reference.doc:209 @end smallexample @item @strong{Syntax:} @code{attrib (} name @code{,} string_expression @code{)} @item @strong{Type:} any @item @strong{Purpose:} returns the value of the attribute string_expression of the variable name. If the attribute is not defined for this variable, @code{attrib} returns the empty string. @item @strong{Example:} @smallexample @c reused example attrib_1 reference.doc:225 ring r=0,(x,y,z),dp; ideal I=std(maxideal(2)); attrib(I,"isSB"); @expansion{} 1 // although maxideal(2) is a standard basis, // SINGULAR does not know it: attrib(maxideal(2), "isSB"); @expansion{} 0 @c end example attrib_1 reference.doc:225 @end smallexample @item @strong{Syntax:} @code{attrib (} name@code{,} string_expression@code{,} expression @code{)} @item @strong{Type:} none @item @strong{Purpose:} sets the attribute string_expression of the variable name to the value expression. @item @strong{Example:} @smallexample @c reused example attrib_2 reference.doc:243 ring r=0,(x,y,z),dp; ideal I=maxideal(2); // the attribute "isSB" is not set vdim(I); @expansion{} // ** I is no standardbasis @expansion{} 4 attrib(I,"isSB",1); // the standard basis attribute is set here vdim(I); @expansion{} 4 @c end example attrib_2 reference.doc:243 @end smallexample @item @strong{Remark:} An attribute may be described by any string_expression. Some of these are used by the kernel of @sc{Singular} and referred to as reserved attributes. Non-reserved attributes may be used, however, in procedures and can considerably speed up computations. @sp 1 @item @strong{Reserved attributes:} (not all are in use at the moment) @table @code @item isSB the standard basis property is set by all commands computing a standard basis like @code{groebner}, @code{std}, @code{stdhilb} etc.; used by @code{lift}, @code{dim}, @code{degree}, @code{mult}, @code{hilb}, @code{vdim}, @code{kbase} @item isHomog the weight vector for homogeneous or quasihomogeneous ideals/modules @item isCI complete intersection property @item isCM Cohen-Macaulay property @item rank set the rank of a module (see @ref{nrows}) @item withSB value of type ideal, resp.@: module, is std @item withHilb value of type intvec is hilb(_,1) (see @ref{hilb}) @item withRes value of type list is a free resolution @item withDim value of type int is the dimension (see @ref{dim}) @item withMult value of type int is the multiplicity (see @ref{mult}) @c @item @code{D} @c object is an differential operator, if set to 1; @c @*object is in a module, if set to 0 @c @*only valid in a dring (see @ref{dring}). @end table @end table @c @c ref @c See @c @ref{Expressions}; @c @ref{killattrib}. @c @c ref @c --------------------------------------- @node bareiss, betti, attrib, Functions @subsection bareiss @cindex bareiss @table @code @item @strong{Syntax:} @code{bareiss (} module_expression @code{)} @*@code{bareiss (} matrix_expression @code{)} @*@code{bareiss (} module_expression@code{,} int_expression@code{,} int_expression @code{)} @*@code{bareiss (} matrix_expression@code{,} int_expression@code{,} int_expression @code{)} @item @strong{Type:} list of module and intvec @item @strong{Purpose:} applies the sparse Gauss-Bareiss algorithm (see @ref{References}, Lee and Saunders) to a module (or with type conversion to a matrix) with an 'optimal' pivot strategy. The vectors of the module are the columns of the matrix, hence elimination takes place w.r.t.@: rows. @* With only one parameter a complete elimination is done. Result is a list: the first entry is a module with a minimal independent set of vectors (as a matrix lower triangular), the second entry an intvec with the permutation of the rows w.r.t.@: the original matrix, that is, a k at position l indicates that row l became row k. @* The further parameters control the algorithm. @code{bareiss(M,i,j)} does not consider the last i rows in the elimination procedure and stops computing when the remaining number of vectors (columns) to reduce is at most j. @item @strong{Example:} @smallexample @c reused example bareiss reference.doc:324 ring r=0,(x,y,z),(c,dp); module mm; // ** generation of the module mm ** int d=7; int b=2; int db=d-b; int i; for(i=d;i>0;i--)@{ mm[i]=3*x*gen(i); @} for(i=db;i;i--)@{ mm[i]=mm[i]+7*y*gen(i+b); @} for(i=d;i>db;i--)@{ mm[i]=mm[i]+7*y*gen(i-db); @} for(i=d;i>b;i--)@{ mm[i]=mm[i]+11*z*gen(i-b); @} for(i=b;i;i--)@{ mm[i]=mm[i]+11*z*gen(i+db); @} // ** the generating matrix of mm ** print(mm); @expansion{} 3x, 0, 11z,0, 0, 7y, 0, @expansion{} 0, 3x, 0, 11z,0, 0, 7y, @expansion{} 7y, 0, 3x, 0, 11z,0, 0, @expansion{} 0, 7y, 0, 3x, 0, 11z,0, @expansion{} 0, 0, 7y, 0, 3x, 0, 11z, @expansion{} 11z,0, 0, 7y, 0, 3x, 0, @expansion{} 0, 11z,0, 0, 7y, 0, 3x // complete elimination list ss=bareiss(mm); print(ss[1]); @expansion{} 7y, 0, 0, 0, 0, 0, 0, @expansion{} 3x, -33xz, 0, 0, 0, 0, 0, @expansion{} 11z,-121z2,1331z3,0, 0, 0, 0, @expansion{} 0, 0, 0, 9317yz3,0, 0, 0, @expansion{} 0, 21xy, _[5,3],14641z4,-43923xz4,0, 0, @expansion{} 0, 0, 0, 0, 65219y2z3,_[6,6],0, @expansion{} 0, 49y2, _[7,3],3993xz3,_[7,5], _[7,6],_[7,7] ss[2]; @expansion{} 2,7,5,1,4,3,6 // elimination up to 3 vectors ss=bareiss(mm,0,3); print(ss[1]); @expansion{} 7y, 0, 0, 0, 0, 0, 0, @expansion{} 3x, -33xz, 0, 0, 0, 0, 0, @expansion{} 11z,-121z2,1331z3,0, 0, 0, 0, @expansion{} 0, 0, 0, 9317yz3,0, 0, 0, @expansion{} 0, 0, 0, 0, 27951xyz3,102487yz4,65219y2z3, @expansion{} 0, 21xy, _[6,3],14641z4,_[6,5], _[6,6], -43923xz4, @expansion{} 0, 49y2, _[7,3],3993xz3,_[7,5], _[7,6], _[7,7] ss[2]; @expansion{} 2,7,5,1,3,4,6 // elimination without the last 3 rows ss=bareiss(mm,3,0); print(ss[1]); @expansion{} 7y, 0, 0, 0, 0, 0, 0, @expansion{} 0, 77yz,0, 0, 0, 0, 0, @expansion{} 0, 0, 231xyz, 0, 0, 0, 0, @expansion{} 0, 0, 0, 1617xy2z,0, 0, 0, @expansion{} 11z,21xy,-1331z3,14641z4, _[5,5],_[5,6],_[5,7], @expansion{} 0, 0, 539y2z, _[6,4], _[6,5],_[6,6],-3773y3z, @expansion{} 3x, 49y2,-363xz2,3993xz3, _[7,5],_[7,6],_[7,7] ss[2]; @expansion{} 2,3,4,1 @c end example bareiss reference.doc:324 @end smallexample @end table @c inserted refs from reference.doc:354 @ifinfo @menu See * det:: * matrix:: @end menu @end ifinfo @iftex See @ref{det}; @ref{matrix}. @end iftex @c end inserted refs from reference.doc:354 @c --------------------------------------- @node betti, char, bareiss, Functions @subsection betti @cindex betti @table @code @item @strong{Syntax:} @code{betti (} list_expression @code{)} @*@code{betti (} resolution_expression @code{)} @*@code{betti (} list_expression @code{,} int_expression @code{)} @*@code{betti (} resolution_expression @code{,} int_expression @code{)} @item @strong{Type:} intmat @item @strong{Purpose:} with 1 argument: computes the graded Betti numbers of a minimal resolution of @tex $R^n/M$, if $R$ denotes the basering and $M$ a homogeneous submodule of $R^n$ and the argument represents a resolution of $R^n/M$. @end tex @iftex @* @end iftex @tex The entry d of the intmat at place (i,j) is the minimal number of generators in degree i+j of the j-th syzygy module (= module of relations) of $R^n/M$ (the 0th (resp.\ 1st) syzygy module of $R^n/M$ is $R^n$ (resp.\ $M$)). @end tex @ifinfo R^n/M, if R denotes the basering and M a homogeneous submodule of R^n and the argument represents a resolution of R^n/M: @*The entry d of the intmat at place (i,j) is the minimal number of generators in degree i+j of the j-th syzygy module (= module of relations) of R^n/M (the 0th (resp.@: 1st) syzygy module of R^n/M is R^n (resp.@: M)). @end ifinfo The argument is considered to be the result of a res/sres/mres/nres/lres command. This implies that a zero is only allowed (and counted) as a generator in the first module. @*For the computation betti uses only the initial monomials. This could lead to confusing results for a non-homogeneous input. The optional second argument is a switch for the minimization of the Betti numbers. If it is 0 then the Betti numbers correspond exactly to the input - otherwise the command is identical to the one-argument form. @item @strong{Example:} @smallexample @c reused example betti reference.doc:408 ring r=32003,(a,b,c,d),dp; ideal j=bc-ad,b3-a2c,c3-bd2,ac2-b2d; list T=mres(j,0); // 0 forces a full resolution // a minimal set of generators for j: print(T[1]); @expansion{} bc-ad, @expansion{} c3-bd2, @expansion{} ac2-b2d, @expansion{} b3-a2c // second syzygy module of r/j which is the first // syzygy module of j (minimal generating set): print(T[2]); @expansion{} bd,c2,ac,b2, @expansion{} -a,-b,0, 0, @expansion{} c, d, -b,-a, @expansion{} 0, 0, -d,-c // the second syzygy module (minimal generating set): print(T[3]); @expansion{} -b, @expansion{} a, @expansion{} -c, @expansion{} d print(T[4]); @expansion{} 0 betti(T); @expansion{} 1,0,0,0, @expansion{} 0,1,0,0, @expansion{} 0,3,4,1 // most useful for reading off the graded Betti numbers: print(betti(T),"betti"); @expansion{} 0 1 2 3 @expansion{} ------------------------------ @expansion{} 0: 1 - - - @expansion{} 1: - 1 - - @expansion{} 2: - 3 4 1 @expansion{} ------------------------------ @expansion{} total: 1 4 4 1 @c end example betti reference.doc:408 @end smallexample @end table Hence @itemize @bullet @item the 0th syzygy module of r/j (which is r) has 1 generator in degree 0 (which is 1), @item the 1st syzygy module @code{T[1]} (which is j) has 4 generators (one in degree 2 and three in degree 3), @item the 2nd syzygy module @code{T[2]} has 4 generators (all in degree 4), @item the 3rd syzygy module @code{T[3]} has 1 generator in degree 5, @end itemize where the generators are the columns of the displayed matrix and degrees are assigned such that the corresponding maps have degree 0: @tex $$ 0 \longleftarrow r/j \longleftarrow r(1) \buildrel{T[1]}\over{\longleftarrow} r(2) \oplus r^3(3) \buildrel{T[2]}\over{\longleftarrow} r^4(4) \buildrel{T[3]}\over{\longleftarrow} r(5) \longleftarrow 0 \quad . $$ @end tex @ifinfo @* T[1] T[2] T[3] @*0 <-- r/j <-- r(1) <------ r(2)+r^3(3) <------ r^4(4) <------ r(5) <-- 0 . @end ifinfo @c inserted refs from reference.doc:455 @ifinfo @menu See * Syzygies and resolutions:: * hres:: * lres:: * mres:: * print:: * res:: * resolution:: * sres:: @end menu @end ifinfo @iftex See @ref{Syzygies and resolutions}; @ref{hres}; @ref{lres}; @ref{mres}; @ref{print}; @ref{res}; @ref{resolution}; @ref{sres}. @end iftex @c end inserted refs from reference.doc:455 @c --------------------------------------- @node char, char_series, betti, Functions @subsection char @cindex char @table @code @item @strong{Syntax:} @code{char (} ring_name @code{)} @item @strong{Type:} int @item @strong{Purpose:} returns the characteristic of the coefficient field of a ring. @item @strong{Example:} @smallexample @c reused example char reference.doc:480 ring r=32003,(x,y),dp; char(r); @expansion{} 32003 ring s=0,(x,y),dp; char(s); @expansion{} 0 ring ra=(7,a),(x,y),dp; minpoly=a^3+a+1; char(ra); @expansion{} 7 ring rp=(49,a),(x,y),dp; char(rp); @expansion{} 7 ring rr=real,x,dp; char(rr); @expansion{} 0 @c end example char reference.doc:480 @end smallexample @end table @c inserted refs from reference.doc:495 @ifinfo @menu See * charstr:: * ring:: @end menu @end ifinfo @iftex See @ref{charstr}; @ref{ring}. @end iftex @c end inserted refs from reference.doc:495 @c --------------------------------------- @node char_series, charstr, char, Functions @subsection char_series @cindex char_series @table @code @item @strong{Syntax:} @code{char_series (} ideal_expression @code{)} @item @strong{Type:} matrix @item @strong{Purpose:} the rows of the matrix represent the irreducible characteristic series of the ideal with respect to the current ordering of variables. @*One application is the decomposition of the zero-set. @item @strong{Example:} @smallexample @c reused example char_series reference.doc:516 ring r=32003,(x,y,z),dp; print(char_series(ideal(xyz,xz,y))); @expansion{} y,z, @expansion{} x,y @c end example char_series reference.doc:516 @end smallexample @c @item @strong{Background:} @c @tex @c Let $>$ be the lexicographical ordering $x_1 < ... < x_n$ on $R=K[x_1,...,x_n]$. @c For $f \in R$ let lvar(f) (the leading variable of f) be the largest @c variable in lead(f) (the leading term of f with respect to $>$), @c i.e., if $f=a_k(x_1,...,x_{k-1})x_k^s+...+a_0(x_1,...,x_{k-1})$ for some @c $k \leq n$ then $lvar(f)=x_k$, moreover let $ini(f):=a_k(x_1,...,x_{k-1})$. @c @c A set $T=\{f_1,...,f_r\} \subset R$ is called triangular if $lvar(f_1)<... be the lexicographical ordering x_1 < ... < x_n on R=K[x_1,...,x_n]. @c For f in R let lvar(f) (the leading variable of f) be the largest @c variable in lead(f) (the leading term of f with respect to >), @c i.e., if f=a_k(x_1,...,x_(k-1))x_k^s+...+a_0(x_1,...,x_(k-1)) for some @c k<=n then lvar(f)=x_k, moreover let ini(f):=a_k(x_1,...,x_(k-1)). @c @c A set T=@{f_1,...,f_r@} in R is called triangular if lvar(f_1)<...=A componentwise), := 0 (otherwise), @end format @end ifinfo @tex $${\rm contract}(x^A , x^B) := \cases{ x^{(B-A)}, &if $B\ge A$ componentwise\cr 0,&otherwise.\cr}$$ @end tex where A and B are the multiexponents of the ring variables represented by @tex $x$. @end tex @ifinfo x. @end ifinfo @code{contract} is extended bilinearly to all polynomials. @item @strong{Example:} @smallexample @c reused example contract reference.doc:900 ring r=0,(a,b,c,d),dp; ideal I=a2,a2+bc,abc; ideal J=a2-bc,abcd; print(contract(I,J)); @expansion{} 1,0, @expansion{} 0,ad, @expansion{} 0,d @c end example contract reference.doc:900 @end smallexample @end table @c inserted refs from reference.doc:908 @ifinfo @menu See * diff:: @end menu @end ifinfo @iftex See @ref{diff}. @end iftex @c end inserted refs from reference.doc:908 @c --------------------------------------- @node dbprint, defined, contract, Functions @subsection dbprint @cindex dbprint @table @code @item @strong{Syntax:} @code{dbprint (} int_expression@code{,} expression_list @code{)} @item @strong{Type:} none @item @strong{Purpose:} applies the print command to each expression in the expression_list if int_expression is positive. @code{dbprint} may also be used in procedures in order to print results subject to certain conditions. @item @strong{Syntax:} @code{dbprint (} expression @code{)} @item @strong{Type:} none @item @strong{Purpose:} The print command is applied to the expression if @code{printlevel>=voice}. @item @strong{Note:} @xref{Guidelines for writing a library}, for an example how this is used for displaying comments while procedures are executed. @item @strong{Example:} @smallexample @c reused example dbprint reference.doc:939 int debug=0; intvec i=1,2,3; dbprint(debug,i); debug=1; dbprint(debug,i); @expansion{} 1,2,3 voice; @expansion{} 1 printlevel; @expansion{} 0 dbprint(i); @c end example dbprint reference.doc:939 @end smallexample @end table @c inserted refs from reference.doc:951 @ifinfo @menu See * Debugging tools:: * print:: * printlevel:: * voice:: @end menu @end ifinfo @iftex See @ref{Debugging tools}; @ref{print}; @ref{printlevel}; @ref{voice}. @end iftex @c end inserted refs from reference.doc:951 @c --------------------------------------- @node defined, deg, dbprint, Functions @subsection defined @cindex defined @table @code @item @strong{Syntax:} @code{defined (} name @code{)} @item @strong{Type:} int @item @strong{Purpose:} returns a value <>0 (TRUE) if there is a user-defined object with this name, and 0 (FALSE) otherwise. @*A non-zero return value is the level where the object is defined (level 1 denotes the top level, level 2 the level of a first procedure, level 3 the level of a procedure called by a first procedure, etc.). For ring variables, -1 is returned. @item @strong{Note:} A local object @code{m} may be identified by @code{if (defined(m)==voice)}. @item @strong{Example:} @smallexample @c reused example defined reference.doc:980 ring r=(0,t),(x,y),dp; matrix m[5][6]=x,y,1,2,0,x+y; defined(mm); @expansion{} 0 defined(r) and defined(m); @expansion{} 1 defined(m)==voice; // m is defined in the current level @expansion{} 1 defined(x); @expansion{} -1 defined(z); @expansion{} 0 defined(t); @expansion{} -1 defined(42); @expansion{} -1 @c end example defined reference.doc:980 @end smallexample @end table @c inserted refs from reference.doc:993 @ifinfo @menu See * rvar:: * voice:: @end menu @end ifinfo @iftex See @ref{rvar}; @ref{voice}. @end iftex @c end inserted refs from reference.doc:993 @c --------------------------------------- @node deg, degree, defined, Functions @subsection deg @cindex deg @table @code @item @strong{Syntax:} @code{deg (} poly_expression @code{)} @*@code{deg (} vector_expression @code{)} @*@code{deg (} poly_expression @code{,} intvec_expression @code{)} @*@code{deg (} vector_expression @code{,} intvec_expression @code{)} @item @strong{Type:} int @item @strong{Purpose:} returns the maximal (weighted) degree of the terms of a polynomial or a vector; @*deg(0) is -1. @*The optional second argument gives the weight vector, the default weights of the base ring will be used otherwise. @item @strong{Example:} @smallexample @c reused example deg reference.doc:1019 ring r=0,(x,y,z),lp; deg(0); @expansion{} -1 deg(x3+y4+xyz3); @expansion{} 5 ring rr=7,(x,y),wp(2,3); poly f=x2+y3; deg(f); @expansion{} 9 ring R=7,(x,y),ws(2,3); poly f=x2+y3; deg(f); @expansion{} 9 vector v=[x2,y]; deg(v); @expansion{} 4 @c end example deg reference.doc:1019 @end smallexample @end table @c inserted refs from reference.doc:1034 @ifinfo @menu See * jet:: * ord:: * poly:: * vector:: @end menu @end ifinfo @iftex See @ref{jet}; @ref{ord}; @ref{poly}; @ref{vector}. @end iftex @c end inserted refs from reference.doc:1034 @c --------------------------------------- @node degree, delete, deg, Functions @subsection degree @cindex degree @table @code @item @strong{Syntax:} @code{degree (} ideal_expression @code{)} @*@code{degree (} module_expression @code{)} @item @strong{Type:} int @item @strong{Purpose:} computes the (weighted) degree of the projective variety, respectively sheaf over the projective variety, defined by the ideal, respectively module, generated by the leading monomials of the input. This is equal to the (weighted) degree of the projective variety, respectively sheaf over the projective variety, defined by the ideal, respectively module, if the input is a standard basis with respect to a (weighted) degree ordering. @item @strong{Example:} @smallexample ring r3=32003,(x,y,z,h),dp; int a,b,c,t=11,10,3,1; poly f=x^a+y^b+z^(3*c)+x^(c+2)*y^(c-1)+x^(c-1)*y^(c-1)*z3 +x^(c-2)*y^c*(y2+t*x)^2; ideal i=jacob(f); i=homog(i,h); ideal i0=std(i); degree(i0); @expansion{} 720 @end smallexample @end table @c inserted refs from reference.doc:1073 @ifinfo @menu See * dim:: * ideal:: * mult:: * std:: * vdim:: @end menu @end ifinfo @iftex See @ref{dim}; @ref{ideal}; @ref{mult}; @ref{std}; @ref{vdim}. @end iftex @c end inserted refs from reference.doc:1073 @c --------------------------------------- @node delete, det, degree, Functions @subsection delete @cindex delete @table @code @item @strong{Syntax:} @code{delete (} list_expression@code{,} int_expression @code{)} @item @strong{Type:} list @item @strong{Purpose:} deletes the element with the given index from a list (the input is not changed). @item @strong{Example:} @smallexample @c reused example delete reference.doc:1095 list l="a","b","c"; list l1=delete(l,2);l1; @expansion{} [1]: @expansion{} a @expansion{} [2]: @expansion{} c l; @expansion{} [1]: @expansion{} a @expansion{} [2]: @expansion{} b @expansion{} [3]: @expansion{} c @c end example delete reference.doc:1095 @end smallexample @end table @c inserted refs from reference.doc:1102 @ifinfo @menu See * insert:: * list:: @end menu @end ifinfo @iftex See @ref{insert}; @ref{list}. @end iftex @c end inserted refs from reference.doc:1102 @c --------------------------------------- @node det, diff, delete, Functions @subsection det @cindex det @table @code @item @strong{Syntax:} @code{det (} intmat_expression @code{)} @*@code{det (} matrix_expression @code{)} @*@code{det (} module_expression @code{)} @item @strong{Type:} int, resp.@: poly @item @strong{Purpose:} returns the determinant of a square matrix. A module is considered as a matrix. The applied algorithms depend on type of input. If the input is a module or matrix with symbolic entries the Bareiss algorithm is used. In the other cases the chinese remainder algorithm is used. For large sparse problems the input as a module has advantages. @item @strong{Example:} @smallexample @c reused example det reference.doc:1128 ring r=7,(x,y),wp(2,3); matrix m[3][3]=1,2,3,4,5,6,7,8,x; det(m); @expansion{} -3x-1 @c end example det reference.doc:1128 @end smallexample @end table @c inserted refs from reference.doc:1135 @ifinfo @menu See * intmat:: * matrix:: * minor:: @end menu @end ifinfo @iftex See @ref{intmat}; @ref{matrix}; @ref{minor}. @end iftex @c end inserted refs from reference.doc:1135 @c --------------------------------------- @node diff, dim, det, Functions @subsection diff @cindex diff @table @code @item @strong{Syntax:} @code{diff (} poly_expression@code{,} ring_variable @code{)} @*@code{diff (} vector_expression@code{,} ring_variable @code{)} @*@code{diff (} ideal_expression@code{,} ring_variable @code{)} @*@code{diff (} module_expression@code{,} ring_variable @code{)} @*@code{diff (} matrix_expression@code{,} ring_variable @code{)} @item @strong{Type:} the same as the type of the first argument @item @strong{Syntax:} @code{diff (} ideal_expression@code{,} ideal_expression @code{)} @item @strong{Type:} matrix @item @strong{Purpose:} computes the partial derivative of a polynomial object by a ring variable (first forms) @*respectively differentiates each polynomial (1..n) of the second ideal by the differential operator corresponding to each polynomial (1..m) in the first ideal, producing an m x n matrix. @item @strong{Example:} @smallexample @c reused example diff reference.doc:1167 ring r=0,(x,y,z),dp; poly f=2x3y+3z5; diff(f,x); @expansion{} 6x2y vector v=[f,y2+z]; diff(v,z); @expansion{} 15z4*gen(1)+gen(2) ideal j=x2-yz,xyz; ideal i=x2,x2+yz,xyz; // corresponds to differential operators // d2/dx2, d2/dx2+d2/dydz, d3/dxdydz: print(diff(i,j)); @expansion{} 2,0, @expansion{} 1,x, @expansion{} 0,1 @c end example diff reference.doc:1167 @end smallexample @end table @c inserted refs from reference.doc:1181 @ifinfo @menu See * contract:: * ideal:: * jacob:: * matrix:: * module:: * poly:: * var:: * vector:: @end menu @end ifinfo @iftex See @ref{contract}; @ref{ideal}; @ref{jacob}; @ref{matrix}; @ref{module}; @ref{poly}; @ref{var}; @ref{vector}. @end iftex @c end inserted refs from reference.doc:1181 @c --------------------------------------- @node dim, division, diff, Functions @subsection dim @cindex dim @table @code @item @strong{Syntax:} @code{dim (} ideal_expression @code{)} @*@code{dim (} module_expression @code{)} @item @strong{Type:} int @item @strong{Purpose:} computes the dimension of the ideal, resp.@: module, generated by the leading monomials of the given generators of the ideal, resp.@: module. This is also the dimension of the ideal if it is represented by a standard basis. @item @strong{Note:} The dimension of an ideal I means the Krull dimension of the basering modulo I. @*The dimension of a module is the dimension of its annihilator ideal. @item @strong{Example:} @smallexample @c reused example dim reference.doc:1215 ring r=32003,(x,y,z),dp; ideal I=x2-y,x3; dim(std(I)); @expansion{} 1 @c end example dim reference.doc:1215 @end smallexample @end table @c inserted refs from reference.doc:1222 @ifinfo @menu See * degree:: * ideal:: * mult:: * std:: * vdim:: @end menu @end ifinfo @iftex See @ref{degree}; @ref{ideal}; @ref{mult}; @ref{std}; @ref{vdim}. @end iftex @c end inserted refs from reference.doc:1222 @c ------------------------------------------------- @node division, dump, dim, Functions @subsection division @cindex division @table @code @item @strong{Syntax:} @code{division (} ideal_expression@code{,} ideal_expression @code{)} @*@code{division (} module_expression@code{,} module_expression @code{)} @*@code{division (} ideal_expression@code{,} ideal_expression@code{,} int_expression @code{)} @*@code{division (} module_expression@code{,} module_expression@code{,} int_expression @code{)} @*@code{division (} ideal_expression@code{,} ideal_expression@code{,} int_expression@code{,} intvec_expression @code{)} @*@code{division (} module_expression@code{,} module_expression@code{,} int_expression@code{,} intvec_expression @code{)} @item @strong{Type:} list @item @strong{Purpose:} @code{division} computes a division with remainder. For two ideals resp.@: modules @code{M} (first argument) and @code{N} (second argument), it returns a list @code{T,R,U} where @code{T} is a matrix, @code{R} is an ideal resp. a module, and @code{U} is a diagonal matrix of units such that @code{matrix(M)*U=matrix(N)*T+matrix(R)} is a standard representation for the normal form @code{R} of @code{M} with respect to a standard basis of @code{N}. @code{division} uses different algorithms depending on whether @code{N} is represented by a standard basis. For a polynomial basering, the matrix @code{U} is the identity matrix. A matrix @code{T} as above is also computed by @code{lift}. @*For additional arguments @code{n} (third argument) and @code{w} (fourth argument), @code{division} returns a list @code{T,R} as above such that @code{matrix(M)=matrix(N)*T+matrix(R)} is a standard representation for the normal form @code{R} of @code{M} with respect to @code{N} up to weighted degree @code{n} with respect to the weight vector @code{w}. The weighted degree of @code{T} and @code{R} respect to @code{w} is at most @code{n}. If the weight vector @code{w} is not given, @code{division} uses the standard weight vector @code{w=1,...,1}. @item @strong{Example:} @smallexample @c reused example division reference.doc:1255 ring R=0,(x,y),ds; poly f=x5+x2y2+y5; division(f,jacob(f)); @expansion{} [1]: @expansion{} _[1,1]=1/5x @expansion{} _[2,1]=3/10y @expansion{} [2]: @expansion{} _[1]=-1/2y5 @expansion{} [3]: @expansion{} _[1,1]=1 division(f^2,jacob(f)); @expansion{} [1]: @expansion{} _[1,1]=1/20x6-9/80xy5-5/16x7y+5/8x2y6 @expansion{} _[2,1]=1/8x2y3+1/5x5y+1/20y6-3/4x3y4-5/4x6y2-5/16xy7 @expansion{} [2]: @expansion{} _[1]=0 @expansion{} [3]: @expansion{} _[1,1]=1/4-25/16xy division(ideal(f^2),jacob(f),10); @expansion{} // ** _ is no standardbasis @expansion{} [1]: @expansion{} _[1,1]=-75/8y9 @expansion{} _[2,1]=1/2x2y3+x5y-1/4y6-3/2x3y4+15/4xy7+375/16x2y8 @expansion{} [2]: @expansion{} _[1]=x10+9/4y10 @c end example division reference.doc:1255 @end smallexample @end table @c inserted refs from reference.doc:1264 @ifinfo @menu See * ideal:: * lift:: * module:: @end menu @end ifinfo @iftex See @ref{ideal}; @ref{lift}; @ref{module}. @end iftex @c end inserted refs from reference.doc:1264 @c --------------------------------------- @node dump, eliminate, division, Functions @subsection dump @cindex dump @table @code @item @strong{Syntax:} @code{dump (} link_expression @code{)} @item @strong{Type:} none @item @strong{Purpose:} dumps (i.e., writes in one "message" or "block") the state of the @sc{Singular} session (i.e., all defined variables and their values) to the specified link (which must be either an ASCII or MP link) such that a @code{getdump} can retrieve it later on. @item @strong{Example:} @smallexample @c reused example dump reference.doc:1286 ring r; // write the whole session to the file dump.ascii // in ASCII format dump(":w dump.ascii"); kill r; // kill the basering // reread the session from the file // redefining everything which was not explicitly killed before getdump("dump.ascii"); @expansion{} // ** redefining stdfglm ** @expansion{} // ** redefining stdhilb ** @expansion{} // ** redefining groebner ** @expansion{} // ** redefining res ** @expansion{} // ** redefining quot ** @expansion{} // ** redefining quot1 ** @expansion{} // ** redefining quotient0 ** @expansion{} // ** redefining quotient1 ** @expansion{} // ** redefining quotient2 ** @expansion{} // ** redefining quotient3 ** @expansion{} // ** redefining quotient5 ** @expansion{} // ** redefining quotient4 ** @expansion{} // ** redefining intersect1 ** @expansion{} // ** redefining sprintf ** @expansion{} // ** redefining printf ** @expansion{} // ** redefining fprintf ** r; @expansion{} // characteristic : 32003 @expansion{} // number of vars : 3 @expansion{} // block 1 : ordering dp @expansion{} // : names x y z @expansion{} // block 2 : ordering C @c end example dump reference.doc:1286 @end smallexample @item @strong{Restrictions:} For ASCII links, integer matrices contained in lists are dumped as integer list elements (and not as integer matrices), and lists of lists are dumped as one flatted list. Furthermore, links themselves are not dumped. @end table @c inserted refs from reference.doc:1304 @ifinfo @menu See * getdump:: * link:: * write:: @end menu @end ifinfo @iftex See @ref{getdump}; @ref{link}; @ref{write}. @end iftex @c end inserted refs from reference.doc:1304 @c --------------------------------------- @node eliminate, eval, dump, Functions @subsection eliminate @cindex eliminate @table @code @item @strong{Syntax:} @code{eliminate (} ideal_expression@code{,} product_of_ring_variables@code{)} @*@code{eliminate (} module_expression@code{,} product_of_ring_variables@code{)} @*@code{eliminate (} ideal_expression@code{,} product_of_ring_variables@code{,} intvec_hilb @code{)} @*@code{eliminate (} module_expression@code{,} product_of_ring_variables@code{,} intvec_hilb @code{)} @item @strong{Type:} the same as the type of the first argument @item @strong{Purpose:} eliminates variables occurring as factors of the second argument from an ideal, resp.@: module, by intersecting it with the subring not containing these variables. @*@code{eliminate} does not need a special ordering nor a standard basis as input. @item @strong{Note:} Since elimination is expensive, for homogeneous input it might be useful first to compute the Hilbert function of the ideal (first argument) with a fast ordering (e.g., @code{dp}). Then make use of it to speed up the computation: a Hilbert-driven elimination uses the intvec provided as the third argument. @item @strong{Example:} @smallexample @c reused example eliminate reference.doc:1336 ring r=32003,(x,y,z),dp; ideal i=x2,xy,y5; eliminate(i,x); @expansion{} _[1]=y5 ring R=0,(x,y,t,s,z),dp; ideal i=x-t,y-t2,z-t3,s-x+y3; eliminate(i,ts); @expansion{} _[1]=y2-xz @expansion{} _[2]=xy-z @expansion{} _[3]=x2-y intvec v=hilb(std(i),1); eliminate(i,ts,v); @expansion{} _[1]=y2-xz @expansion{} _[2]=xy-z @expansion{} _[3]=x2-y @c end example eliminate reference.doc:1336 @end smallexample @end table @c inserted refs from reference.doc:1348 @ifinfo @menu See * hilb:: * ideal:: * module:: * std:: @end menu @end ifinfo @iftex See @ref{hilb}; @ref{ideal}; @ref{module}; @ref{std}. @end iftex @c end inserted refs from reference.doc:1348 @c --------------------------------------- @node eval, ERROR, eliminate, Functions @subsection eval @cindex eval @table @code @item @strong{Syntax:} @code{eval (} expression @code{)} @item @strong{Type:} none @item @strong{Purpose:} evaluates (quoted) expressions. Within a quoted expression, the quote can be "undone" by an @code{eval} (i.e., each eval "undoes" the effect of exactly one quote). Used only when receiving a quoted expression from an MPfile link, with @code{quote} and @code{write} to prevent local evaluations when writing to an MPtcp link. @item @strong{Example:} @smallexample @c @c example unix_only link l="MPfile:w example.mp"; ring r=0,(x,y,z),ds; ideal i=maxideal(3); ideal j=x7,x2,z; // compute i+j before writing, but not std // this writes 'std(ideal(x3,...,z))' write (l, quote(std(eval(i+j)))); option(prot); close(l); // now read it in again and evaluate // read(l) forces to compute 'std(ideal(x3,...,z))' read(l); close(l); @c @c example @end smallexample @end table @c inserted refs from reference.doc:1390 @ifinfo @menu See * MPfile links:: * quote:: * write:: @end menu @end ifinfo @iftex See @ref{MPfile links}; @ref{quote}; @ref{write}. @end iftex @c end inserted refs from reference.doc:1390 @c --------------------------------------- @node ERROR, example, eval, Functions @subsection ERROR @cindex ERROR @table @code @item @strong{Syntax:} @code{ERROR (} string_expression @code{)} @item @strong{Type:} none @item @strong{Purpose:} Immediately interrupts the current computation, returns to the top-level, and displays the argument @code{string_expression} as error message. @item @strong{Note:} This should be used as an emergency, resp.@: failure, exit within procedures. @item @strong{Example:} @smallexample @c reused example ERROR reference.doc:1415 int i=1; proc myError() @{ERROR("Need to leave now");i=2;@} myError(); @expansion{} ? Need to leave now @expansion{} ? error occurred in line 2: `ERROR("Need to leave now");i=2;` @expansion{} ? leaving ::myError @expansion{} skipping text from `;` error at token `)` i; @expansion{} 1 @c end example ERROR reference.doc:1415 @end smallexample @end table @c --------------------------------------- @node example, execute, ERROR, Functions @subsection example @cindex example @table @code @item @strong{Syntax:} @code{example} topic @code{;} @item @strong{Purpose:} computes an example for @code{topic}. Examples are available for all @sc{Singular} kernel and library functions. Where available (e.g., within Emacs), use @code{} completion for a list of all available example @code{topic}s. @item @strong{Example:} @smallexample example prime; example intvec_declarations; @end smallexample @end table @c inserted refs from reference.doc:1441 @ifinfo @menu See also: * help:: @end menu @end ifinfo @iftex @strong{See also:} @ref{help}. @end iftex @c end inserted refs from reference.doc:1441 @c --------------------------------------- @node execute, exit, example, Functions @subsection execute @cindex execute @table @code @item @strong{Syntax:} @code{execute (} string_expression @code{)} @item @strong{Type:} none @item @strong{Purpose:} executes a string containing a sequence of @sc{Singular} commands. @item @strong{Note:} The command @code{return} cannot appear in the string. @* @code{execute} should be avoided in procedures whenever possible, since it may give rise to name conflicts. Moreover, such procedures cannot be precompiled (a feature which @sc{Singular} will provide in the future). @item @strong{Example:} @smallexample @c reused example execute reference.doc:1463 ring r=32003,(x,y,z),dp; ideal i=x+y,z3+22y; write(":w save_i",i); ring r0=0,(x,y,z),Dp; string s="ideal k="+read("save_i")+";"; s; @expansion{} ideal k=x+y,z3+22y @expansion{} ; execute(s); // define the ideal k k; @expansion{} k[1]=x+y @expansion{} k[2]=z3+22y @c end example execute reference.doc:1463 @end smallexample @end table @c --------------------------------------- @node exit, extgcd, execute, Functions @subsection exit @cindex exit @table @code @item @strong{Syntax:} @code{exit;} @item @strong{Purpose:} exits (quits) @sc{Singular}, works also from inside a procedure or from an interrupt. @end table @c --------------------------------------- @node extgcd, facstd, exit, Functions @subsection extgcd @cindex extgcd @table @code @item @strong{Syntax:} @code{extgcd (} int_expression@code{,} int_expression @code{)} @*@code{extgcd (} poly_expression@code{,} poly_expression @code{)} @item @strong{Type:} list of 3 objects of the same type as the type of the arguments @item @strong{Purpose:} computes extended gcd: the first element is the greatest common divisor of the two arguments, the second and third are factors such that if @code{list L=extgcd(a,b);} then L[1]=a*L[2]+b*L[3]. @item @strong{Note:} Polynomials must be univariate to apply @code{extgcd}. @item @strong{Example:} @smallexample @c reused example extgcd reference.doc:1506 extgcd(24,10); @expansion{} [1]: @expansion{} 2 @expansion{} [2]: @expansion{} -2 @expansion{} [3]: @expansion{} 5 ring r=0,(x,y),lp; extgcd(x4-x6,(x2+x5)*(x2+x3)); @expansion{} [1]: @expansion{} 2x5+2x4 @expansion{} [2]: @expansion{} x2+x+1 @expansion{} [3]: @expansion{} 1 @c end example extgcd reference.doc:1506 @end smallexample @end table @c inserted refs from reference.doc:1513 @ifinfo @menu See * gcd:: * int:: * poly:: @end menu @end ifinfo @iftex See @ref{gcd}; @ref{int}; @ref{poly}. @end iftex @c end inserted refs from reference.doc:1513 @c --------------------------------------- @node facstd, factorize, extgcd, Functions @subsection facstd @cindex facstd @table @code @item @strong{Syntax:} @code{facstd (} ideal_expression @code{)} @*@code{facstd (} ideal_expression@code{,} ideal_expression @code{)} @item @strong{Type:} list of ideals @item @strong{Purpose:} returns a list of ideals computed by the factorizing Groebner basis algorithm. @*The intersection of these ideals has the same zero-set as the input, i.e., the radical of the intersection coincides with the radical of the input ideal. In many (but not all!) cases this is already a decomposition of the radical of the ideal. (Note however, that, in general, no inclusion between the input and output ideals holds.) @*The second, optional argument gives a list of polynomials which define non-zero constraints. Hence, the intersection of the output ideals has a zero-set which is the (closure of the) complement of the zero-set of the second argument in the zero-set of the first argument. @item @strong{Note:} Not implemented for baserings over real ground fields, galois fields and over algebraic extensions over the rational numbers (that is, only implemented for ground fields for which @ref{factorize} is implemented). @item @strong{Example:} @smallexample @c reused example facstd reference.doc:1548 ring r=32003,(x,y,z),(c,dp); ideal I=xyz,x2z; facstd(I); @expansion{} [1]: @expansion{} _[1]=z @expansion{} [2]: @expansion{} _[1]=x facstd(I,x); @expansion{} [1]: @expansion{} _[1]=z @c end example facstd reference.doc:1548 @end smallexample @end table @c inserted refs from reference.doc:1556 @ifinfo @menu See * ideal:: * ring:: * std:: @end menu @end ifinfo @iftex See @ref{ideal}; @ref{ring}; @ref{std}. @end iftex @c end inserted refs from reference.doc:1556 @c --------------------------------------- @node factorize, fetch, facstd, Functions @subsection factorize @cindex factorize @table @code @item @strong{Syntax:} @code{factorize (} poly_expression @code{)} @*@code{factorize (} poly_expression@code{, 0 )} @*@code{factorize (} poly_expression@code{, 2 )} @item @strong{Type:} list of ideal and intvec @* @item @strong{Syntax:} @code{factorize (} poly_expression@code{, 1 )} @item @strong{Type:} ideal @item @strong{Purpose:} computes the irreducible factors (as an ideal) of the polynomial together with or without the multiplicities (as an intvec) depending on the second argument: @format 0: returns factors and multiplicities, first factor is a constant. May also be written with only one argument. 1: returns non-constant factors (no multiplicities). 2: returns non-constant factors and multiplicities. @end format @item @strong{Note:} Not implemented for the coefficient fields real and finite fields of type @code{(p^n,a)}. @item @strong{Example:} @smallexample @c reused example factorize reference.doc:1594 ring r=32003,(x,y,z),dp; factorize(9*(x-1)^2*(y+z)); @expansion{} [1]: @expansion{} _[1]=9 @expansion{} _[2]=y+z @expansion{} _[3]=x-1 @expansion{} [2]: @expansion{} 1,1,2 factorize(9*(x-1)^2*(y+z),1); @expansion{} _[1]=y+z @expansion{} _[2]=x-1 factorize(9*(x-1)^2*(y+z),2); @expansion{} [1]: @expansion{} _[1]=y+z @expansion{} _[2]=x-1 @expansion{} [2]: @expansion{} 1,2 @c end example factorize reference.doc:1594 @end smallexample @end table @c inserted refs from reference.doc:1602 @ifinfo @menu See * poly:: @end menu @end ifinfo @iftex See @ref{poly}. @end iftex @c end inserted refs from reference.doc:1602 @c --------------------------------------- @node fetch, fglm, factorize, Functions @subsection fetch @cindex fetch @table @code @item @strong{Syntax:} @code{fetch (} ring_name@code{,} name @code{)} @item @strong{Type:} number, poly, vector, ideal, module, matrix or list (the same type as the second argument) @item @strong{Purpose:} maps objects between rings. @code{fetch} is the identity map between rings and qrings, the i-th variable of the source ring is mapped to the i-th variable of the basering. The coefficient fields must be compatible. (See @ref{map} for a description of possible mapping between different ground fields). @*@code{fetch} offers a convenient way to change variable names or orderings, or to map objects from a ring to a quotient ring of that ring or vice versa. @item @strong{Note:} Compared with @code{imap}, @code{fetch} uses the position of the ring variables, not their names. @item @strong{Example:} @smallexample @c reused example fetch reference.doc:1632 ring r=0,(x,y,z),dp; ideal i=maxideal(2); ideal j=std(i); poly f=x+y2+z3; vector v=[f,1]; qring q=j; poly f=fetch(r,f); f; @expansion{} z3+y2+x vector v=fetch(r,v); v; @expansion{} z3*gen(1)+y2*gen(1)+x*gen(1)+gen(2) ideal i=fetch(r,i); i; @expansion{} i[1]=z2 @expansion{} i[2]=yz @expansion{} i[3]=y2 @expansion{} i[4]=xz @expansion{} i[5]=xy @expansion{} i[6]=x2 ring rr=0,(a,b,c),lp; poly f=fetch(q,f); f; @expansion{} a+b2+c3 vector v=fetch(r,v); v; @expansion{} a*gen(1)+b2*gen(1)+c3*gen(1)+gen(2) ideal k=fetch(q,i); k; @expansion{} k[1]=c2 @expansion{} k[2]=bc @expansion{} k[3]=b2 @expansion{} k[4]=ac @expansion{} k[5]=ab @expansion{} k[6]=a2 @c end example fetch reference.doc:1632 @end smallexample @end table @c inserted refs from reference.doc:1655 @ifinfo @menu See * imap:: * map:: * qring:: * ring:: @end menu @end ifinfo @iftex See @ref{imap}; @ref{map}; @ref{qring}; @ref{ring}. @end iftex @c end inserted refs from reference.doc:1655 @c --------------------------------------- @node fglm, fglmquot, fetch, Functions @subsection fglm @cindex fglm @table @code @item @strong{Syntax:} @code{fglm (} ring_name@code{,} ideal_name @code{)} @item @strong{Type:} ideal @item @strong{Purpose:} computes for the given ideal in the given ring a reduced Groebner basis in the current ring, by applying the so-called FGLM (Faugere, Gianni, Lazard, Mora) algorithm. @*The main application is to compute a lexicographical Groebner basis from a reduced Groebner basis with respect to a degree ordering. This can be much faster than computing a lexicographical Groebner basis directly. @item @strong{Note:} The ideal must be zero-dimensional and given as a reduced Groebner basis in the given ring. @*The only permissible differences between the given ring and the current ring are the monomial ordering and a permutation of the variables, resp.@: parameters. @item @strong{Example:} @smallexample @c reused example fglm reference.doc:1688 ring r=0,(x,y,z),dp; ideal i=y3+x2, x2y+x2, x3-x2, z4-x2-y; option(redSB); // force the computation of a reduced SB i=std(i); vdim(i); @expansion{} 28 ring s=0,(z,x,y),lp; ideal j=fglm(r,i); j; @expansion{} j[1]=y4+y3 @expansion{} j[2]=xy3-y3 @expansion{} j[3]=x2+y3 @expansion{} j[4]=z4+y3-y @c end example fglm reference.doc:1688 @end smallexample @end table @c inserted refs from reference.doc:1700 @ifinfo @menu See * fglmquot:: * option:: * qring:: * ring:: * std:: * stdfglm:: * vdim:: @end menu @end ifinfo @iftex See @ref{fglmquot}; @ref{option}; @ref{qring}; @ref{ring}; @ref{std}; @ref{stdfglm}; @ref{vdim}. @end iftex @c end inserted refs from reference.doc:1700 @c --------------------------------------- @node fglmquot, filecmd, fglm, Functions @subsection fglmquot @cindex fglmquot @table @code @item @strong{Syntax:} @code{fglmquot (} ideal_expression@code{,} poly_expression @code{)} @item @strong{Type:} ideal @item @strong{Purpose:} computes a reduced Groebner basis of the ideal quotient @code{I:p} of a zero-dimensional ideal @code{I} and a polynomial @code{p} using FGLM-techniques. @item @strong{Note:} The ideal must be zero-dimensional and given as a reduced Groebner basis in the given ring. The poly must be reduced with respect to the ideal. @item @strong{Example:} @smallexample @c reused example fglmquot reference.doc:1730 ring r=0,(x,y,z),lp; ideal i=y3+x2,x2y+x2,x3-x2,z4-x2-y; option(redSB); // force the computation of a reduced SB i=std(i); poly p=reduce(x+yz2+z10,i); ideal j=fglmquot(i,p); j; @expansion{} j[1]=z12 @expansion{} j[2]=yz4-z8 @expansion{} j[3]=y2+y-z8-z4 @expansion{} j[4]=x+y-z10-z6-z4 @c end example fglmquot reference.doc:1730 @end smallexample @end table @c inserted refs from reference.doc:1741 @ifinfo @menu See * fglm:: * option:: * quotient:: * ring:: * std:: * vdim:: @end menu @end ifinfo @iftex See @ref{fglm}; @ref{option}; @ref{quotient}; @ref{ring}; @ref{std}; @ref{vdim}. @end iftex @c end inserted refs from reference.doc:1741 @c --------------------------------------- @node filecmd, find, fglmquot, Functions @subsection files, input from @cindex filecmd @cindex < @table @code @item @strong{Syntax:} @code{< "}filename@code{"} @item @strong{Type:} none @item @strong{Purpose:} input comes from the file filename. Shorthand for @code{execute(read(filename))}. @item @strong{Example:} @smallexample < "example"; //read in the file example and execute it @end smallexample @end table @c inserted refs from reference.doc:1768 @ifinfo @menu See * execute:: * read:: @end menu @end ifinfo @iftex See @ref{execute}; @ref{read}. @end iftex @c end inserted refs from reference.doc:1768 @c --------------------------------------- @node find, finduni, filecmd, Functions @subsection find @cindex find @table @code @item @strong{Syntax:} @code{find (} string_expression@code{,} substring_expression @code{)} @*@code{find (} string_expression@code{,} substring_expression@code{,} int_expression @code{)} @item @strong{Type:} int @item @strong{Purpose:} returns the first position of the substring in the string or 0 (if not found), @*starts the search at the position given in the 3rd argument. @item @strong{Example:} @smallexample @c reused example find reference.doc:1789 find("Aac","a"); @expansion{} 2 find("abab","a"+"b"); @expansion{} 1 find("abab","a"+"b",2); @expansion{} 3 find("abab","ab",3); @expansion{} 3 find("0123","abcd"); @expansion{} 0 @c end example find reference.doc:1789 @end smallexample @end table @c inserted refs from reference.doc:1798 @ifinfo @menu See * string:: @end menu @end ifinfo @iftex See @ref{string}. @end iftex @c end inserted refs from reference.doc:1798 @c --------------------------------------- @node finduni, fprintf, find, Functions @subsection finduni @cindex finduni @table @code @item @strong{Syntax:} @code{finduni (} ideal_expression @code{)} @item @strong{Type:} ideal @item @strong{Purpose:} returns an ideal which is contained in the ideal_expression such that the i-th generator is a univariate polynomial in the i-th ring variable. @* The polynomials have minimal degree w.r.t.@: this property. @item @strong{Note:} The ideal must be zero-dimensional and given as a reduced Groebner basis in the current ring. @item @strong{Example:} @smallexample @c reused example finduni reference.doc:1820 ring r=0,(x,y,z), dp; ideal i=y3+x2,x2y+x2,z4-x2-y; option(redSB); // force computation of reduced basis i=std(i); ideal k=finduni(i); print(k); @expansion{} x4-x2, @expansion{} y4+y3, @expansion{} z12 @c end example finduni reference.doc:1820 @end smallexample @end table @c inserted refs from reference.doc:1830 @ifinfo @menu See * option:: * ring:: * std:: * vdim:: @end menu @end ifinfo @iftex See @ref{option}; @ref{ring}; @ref{std}; @ref{vdim}. @end iftex @c end inserted refs from reference.doc:1830 @c --------------------------------------- @node fprintf, freemodule, finduni, Functions @subsection fprintf @cindex fprintf @c start include of docu for standard.lib:fprintf @c replaced @subsubsection by @sub @c ---content fprintf--- Procedure from library @code{standard.lib} (@pxref{standard_lib}). @table @asis @item @strong{Syntax:} @code{fprintf (} link_expression@code{,} string_expression @code{[,} any_expressions@code{] )} @item @strong{Return:} none @item @strong{Purpose:} @code{fprintf(l,fmt,...);} performs output formatting. The second argument is a format control string. Additional arguments may be required, depending on the content of the control string. A series of output characters is generated as directed by the control string; these characters are written to the link l. The control string @code{fmt} is simply text to be copied, except that the string may contain conversion specifications.@* Do @code{help print;} for a listing of valid conversion specifications. As an addition to the conversions of @code{print}, the @code{%n} and @code{%2} conversion specification does not consume an additional argument, but simply generates a newline character. @item @strong{Note:} If one of the additional arguments is a list, then it should be enclosed once more into a @code{list()} command, since passing a list as an argument flattens the list by one level. @end table @strong{Example:} @smallexample @c reused example fprintf d2t_singular/standard_lib.doc:393 ring r=0,(x,y,z),dp; module m=[1,y],[0,x+z]; intmat M=betti(mres(m,0)); list l=r,m,M; link li=""; // link to stdout fprintf(li,"s:%s,l:%l",1,2); @expansion{} s:1,l:int(2) fprintf(li,"s:%s",l); @expansion{} s:(0),(x,y,z),(dp(3),C) fprintf(li,"s:%s",list(l)); @expansion{} s:(0),(x,y,z),(dp(3),C),y*gen(2)+gen(1),x*gen(2)+z*gen(2),1,1 fprintf(li,"2l:%2l",list(l)); @expansion{} 2l:list("(0),(x,y,z),(dp(3),C)", @expansion{} module(y*gen(2)+gen(1), @expansion{} x*gen(2)+z*gen(2)), @expansion{} intmat(intvec(1,1 ),1,2)) @expansion{} fprintf(li,"%p",list(l)); @expansion{} [1]: @expansion{} // characteristic : 0 @expansion{} // number of vars : 3 @expansion{} // block 1 : ordering dp @expansion{} // : names x y z @expansion{} // block 2 : ordering C @expansion{} [2]: @expansion{} _[1]=y*gen(2)+gen(1) @expansion{} _[2]=x*gen(2)+z*gen(2) @expansion{} [3]: @expansion{} 1,1 @expansion{} fprintf(li,"%;",list(l)); @expansion{} [1]: @expansion{} // characteristic : 0 @expansion{} // number of vars : 3 @expansion{} // block 1 : ordering dp @expansion{} // : names x y z @expansion{} // block 2 : ordering C @expansion{} [2]: @expansion{} _[1]=y*gen(2)+gen(1) @expansion{} _[2]=x*gen(2)+z*gen(2) @expansion{} [3]: @expansion{} 1,1 @expansion{} fprintf(li,"%b",M); @expansion{} 0 1 @expansion{} ------------------ @expansion{} 0: 1 1 @expansion{} ------------------ @expansion{} total: 1 1 @expansion{} @c end example fprintf d2t_singular/standard_lib.doc:393 @end smallexample @c inserted refs from d2t_singular/standard_lib.doc:408 @ifinfo @menu See also: * print:: * printf:: * sprintf:: * string:: @end menu @end ifinfo @iftex @strong{See also:} @ref{print}; @ref{printf}; @ref{sprintf}; @ref{string}. @end iftex @c end inserted refs from d2t_singular/standard_lib.doc:408 @c ---end content fprintf--- @c generated lib proc docu for standard.lib:fprintf reference.doc:1842 @c end include of docu for standard.lib:fprintf @c --------------------------------------- @node freemodule, gcd, fprintf, Functions @subsection freemodule @cindex freemodule @table @code @item @strong{Syntax:} @code{freemodule (} int_expression @code{)} @item @strong{Type:} module @item @strong{Purpose:} creates the free module of rank n generated by @code{gen(1)}, @dots{}, @code{gen(n)}. @item @strong{Example:} @smallexample @c reused example freemodule reference.doc:1859 ring r=32003,(x,y),(c,dp); freemodule(3); @expansion{} _[1]=[1] @expansion{} _[2]=[0,1] @expansion{} _[3]=[0,0,1] matrix m=freemodule(3); // generates the 3x3 unit matrix print(m); @expansion{} 1,0,0, @expansion{} 0,1,0, @expansion{} 0,0,1 @c end example freemodule reference.doc:1859 @end smallexample @end table @c inserted refs from reference.doc:1867 @ifinfo @menu See * gen:: * module:: @end menu @end ifinfo @iftex See @ref{gen}; @ref{module}. @end iftex @c end inserted refs from reference.doc:1867 @c --------------------------------------- @node gcd, gen, freemodule, Functions @subsection gcd @cindex gcd @table @code @item @strong{Syntax:} @code{gcd (} int_expression@code{,} int_expression @code{)} @*@code{gcd (} number_expression@code{,} number_expression @code{)} @*@code{gcd (} poly_expression@code{,} poly_expression @code{)} @item @strong{Type:} the same as the type of the arguments @item @strong{Purpose:} computes the greatest common divisor. @item @strong{Note:} Not implemented for the coefficient fields real and finite fields of type @code{(p^n,a)}. @*The gcd of two numbers is their gcd as integer numbers or polynomials, otherwise it is not defined. @item @strong{Example:} @smallexample @c reused example gcd reference.doc:1893 gcd(2,3); @expansion{} 1 ring r=0,(x,y,z),lp; gcd(3x2*(x+y),9x*(y2-x2)); @expansion{} x2+xy gcd(number(6472674604870),number(878646537247372)); @expansion{} 2 @c end example gcd reference.doc:1893 @end smallexample @end table @c inserted refs from reference.doc:1901 @ifinfo @menu See * extgcd:: * int:: * number:: * poly:: @end menu @end ifinfo @iftex See @ref{extgcd}; @ref{int}; @ref{number}; @ref{poly}. @end iftex @c end inserted refs from reference.doc:1901 @c ---------------------------------------- @node gen, getdump, gcd, Functions @subsection gen @cindex gen @table @code @item @strong{Syntax:} @code{gen (} int_expression @code{)} @item @strong{Type:} vector @item @strong{Purpose:} returns the i-th free generator of a free module. @item @strong{Example:} @smallexample @c reused example gen reference.doc:1922 ring r=32003,(x,y,z),(c,dp); gen(3); @expansion{} [0,0,1] vector v=gen(5); poly f=xyz; v=v+f*gen(4); v; @expansion{} [0,0,0,xyz,1] ring rr=32003,(x,y,z),dp; fetch(r,v); @expansion{} xyz*gen(4)+gen(5) @c end example gen reference.doc:1922 @end smallexample @end table @c inserted refs from reference.doc:1933 @ifinfo @menu See * freemodule:: * int:: * vector:: @end menu @end ifinfo @iftex See @ref{freemodule}; @ref{int}; @ref{vector}. @end iftex @c end inserted refs from reference.doc:1933 @c --------------------------------------- @node getdump, groebner, gen, Functions @subsection getdump @cindex getdump @table @code @item @strong{Syntax:} @code{getdump (} link_expression @code{)} @item @strong{Type:} none @item @strong{Purpose:} reads the content of the entire file, resp.@: link, and restores all variables from it. For ASCII links, @code{getdump} is equivalent to an @code{execute(read(} link @code{))} command. For MP links, @code{getdump} should only be used on data which were previously @code{dump}'ed. @item @strong{Example:} @smallexample @c reused example getdump reference.doc:1956 int i=3; dump(":w example.txt"); kill i; option(noredefine); getdump("example.txt"); i; @expansion{} 3 @c end example getdump reference.doc:1956 @end smallexample @item @strong{Restrictions:} @code{getdump} is not supported for DBM links, or for a link connecting to @code{stdin} (standard input). @end table @c inserted refs from reference.doc:1969 @ifinfo @menu See * dump:: * link:: * read:: @end menu @end ifinfo @iftex See @ref{dump}; @ref{link}; @ref{read}. @end iftex @c end inserted refs from reference.doc:1969 @c --------------------------------------- @node groebner, help, getdump, Functions @subsection groebner @cindex groebner @c start include of docu for standard.lib:groebner @c replaced @subsubsection by @sub @c ---content groebner--- Procedure from library @code{standard.lib} (@pxref{standard_lib}). @table @asis @item @strong{Syntax:} @code{groebner (} ideal_expression @code{)} @* @code{groebner (} module_expression @code{)} @* @code{groebner (} ideal_expression@code{,} int_expression @code{)} @* @code{groebner (} module_expression@code{,} int_expression @code{)} @item @strong{Type:} type of the first argument @item @strong{Purpose:} computes the standard basis of the first argument @code{I} (ideal or module), by a heuristically chosen method: if the ordering of the current ring is a local ordering, or if it is a non-block ordering and the current ring has no parameters, then @code{std(I)} is returned. Otherwise, @code{I} is mapped into a ring with no parameters and ordering dp, where its Hilbert series is computed. This is followed by a Hilbert-series based std computation in the original ring. @item @strong{Note:} If a 2nd argument @code{wait} is given, then the computation proceeds at most @code{wait} seconds. That is, if no result could be computed in @code{wait} seconds, then the computation is interrupted, 0 is returned, a warning message is displayed, and the global variable @code{groebner_error} is defined. @cindex time limit on computations @cindex MP, groebner basis computations @end table @strong{Example:} @smallexample @c reused example groebner d2t_singular/standard_lib.doc:149 ring r=0,(a,b,c,d),lp; option(prot); ideal i=a+b+c+d,ab+ad+bc+cd,abc+abd+acd+bcd,abcd-1; // cyclic 4 groebner(i); @expansion{} std in (0),(a,b,c,d,@@t),(dp,C) @expansion{} [63:1]1(3)s2(2)s3s4-s5ss6-s7-- @expansion{} product criterion:8 chain criterion:5 @expansion{} std with hilb in (0),(a,b,c,d,@@t),(lp(4),C) @expansion{} [63:1]1(3)s2(2)s3s4-s5ss6shhhh8shh @expansion{} product criterion:9 chain criterion:8 @expansion{} hilbert series criterion:6 @expansion{} dehomogenization @expansion{} imap to original ring @expansion{} simplification @expansion{} _[1]=c2d6-c2d2-d4+1 @expansion{} _[2]=c3d2+c2d3-c-d @expansion{} _[3]=bd4-b+d5-d @expansion{} _[4]=bc-bd5+c2d4+cd-d6-d2 @expansion{} _[5]=b2+2bd+d2 @expansion{} _[6]=a+b+c+d ring rp=(0,a,b),(c,d), lp; ideal i=imap(r,i); ideal j=groebner(i); @expansion{} std in 0,(c,d,a,b,@@t),(dp,C) @expansion{} [63:1]1(3)s2(2)s3s4-s5ss6-s7-- @expansion{} product criterion:8 chain criterion:5 @expansion{} std with hilb in (0),(c,d,a,b,@@t),(lp(2),C, dp(3)) @expansion{} [63:3]1(3)s2(2)s3s4-s5ss6shhhh8shh @expansion{} product criterion:9 chain criterion:8 @expansion{} hilbert series criterion:6 @expansion{} dehomogenization @expansion{} imap to original ring @expansion{} simplification option(noprot); j; simplify(j,1); std(i); @expansion{} j[1]=(a3b2+a2b3-a-b) @expansion{} _[1]=1 @expansion{} _[1]=1 if (system("with","MP")) @{groebner(i,0);@} @expansion{} // ** groebner did not finish @expansion{} _[1]=0 defined(groebner_error); @expansion{} 1 @c end example groebner d2t_singular/standard_lib.doc:149 @end smallexample @c inserted refs from d2t_singular/standard_lib.doc:163 @ifinfo @menu See also: * std:: * stdfglm:: * stdhilb:: @end menu @end ifinfo @iftex @strong{See also:} @ref{std}; @ref{stdfglm}; @ref{stdhilb}. @end iftex @c end inserted refs from d2t_singular/standard_lib.doc:163 @c ---end content groebner--- @c generated lib proc docu for standard.lib:groebner reference.doc:1979 @c end include of docu for standard.lib:groebner @c @table @code @c @item @strong{Syntax:} @c @code{groebner (} ideal_expression @code{)} @c @*@code{groebner (} module_expression @code{)} @c @item @strong{Type:} @c ideal or module @c @item @strong{Purpose:} @c returns a standard basis of an ideal or module with respect to the @c monomial ordering of the basering using a heuristically chosen method. @c @item @strong{Example:} @c @example @c @c example @c ring r=0,(a,b,c,d),lp; @c ideal i=a+b+c+d,ab+ad+bc+cd,abc+abd+acd+bcd,abcd-1; @c groebner(i); @c @c example @c @end example @c @end table @c @c ref @c See @c @ref{std}; @c @ref{stdfglm}; @c @ref{stdhilb}. @c @c ref @c --------------------------------------- @node help, highcorner, groebner, Functions @subsection help @cindex help @table @code @item @strong{Syntax:} @code{help;} @*@code{help} topic @code{;} @item @strong{Type:} none @item @strong{Purpose:} displays online help information for @code{topic} using the currently set help browser. If no @code{topic} is given, the title page of the manual is displayed. @item @strong{Note:} @itemize @bullet @cindex ? @item @code{?} may be used instead of @code{help}. @item @code{topic} can be an index entry of the @sc{Singular} manual or the name of a (loaded) procedure which has a help section. @item @code{topic} may contain wildcard characters (i.e., @code{*} characters). @item If a (possibly "wildcarded") @code{topic} cannot be found (or uniquely matched) a warning is displayed and no help information is provided. @item If @code{topic} is the name of a (loaded) procedure whose help section has changed w.r.t.@: the help available in the manual then, instead of displaying the respective help section of the manual in the help browser, the "newer" help section of the procedure is simply printed to the terminal. @item The browser in which the help information is displayed can be either set with the command-line option @code{--browser=} (@pxref{Command line options}), or with the command @code{system("--browser", "")}. Use the command @code{system("browsers");} for a list of all available browsers. @xref{The online help system}, for more details about help browsers. @end itemize @item @strong{Example:} @smallexample help; // display title page of manual help ring; // display help for 'ring' ?ringe; // equivalent to 'help ringe;' @expansion{} // ** No help for topic 'ringe' (not even for '*ringe*') @expansion{} // ** Try '?;' for general help @expansion{} // ** or '?Index;' for all available help topics ?ring*; @expansion{} // ** No unique help for 'ring*' @expansion{} // ** Try one of @expansion{} ?Rings and orderings; ?Rings and standard bases; ?ring; @expansion{} ?ring declarations; ?ring operations; ?ring related functions; @expansion{} ?ring.lib; ?ring_lib; ?ringtensor; ?ringweights; help Rings and orderings; help standard.lib; // displays help for library 'standard.lib' @end smallexample @end table @c inserted refs from reference.doc:2072 @ifinfo @menu See * Command line options:: * Format of a library:: * Procedure definition:: * The online help system:: * system:: @end menu @end ifinfo @iftex See @ref{Command line options}; @ref{Format of a library}; @ref{Procedure definition}; @ref{The online help system}; @ref{system}. @end iftex @c end inserted refs from reference.doc:2072 @c --------------------------------------- @node highcorner, hilb, help, Functions @subsection highcorner @cindex highcorner @table @code @item @strong{Syntax:} @code{highcorner (} ideal_expression @code{)} @*@code{highcorner (} module_expression @code{)} @item @strong{Type:} poly, resp.@: vector @item @strong{Purpose:} returns the smallest monomial not contained in the ideal, resp.@: module, generated by the initial terms of the given generators. If the generators are a standard basis, this is also the smallest monomial not contained in the ideal, resp.@: module. @*If the ideal, resp.@: module, is not zero-dimensional, 0 is returned. @item @strong{Note:} Let the ideal I be given by a standard basis. Then @code{highcorner(I)} returns 0 iff @code{dim(I)>0} or @code{dim(I)=-1}. Otherwise it returns the smallest monomial m not in I which has the following properties (with @ifinfo x(i) @end ifinfo @tex $x_i$ @end tex the variables of the basering): @itemize @bullet @item if @ifinfo x(i)>1 then x(i) @end ifinfo @tex $x_i>1$ then $x_i$ @end tex does not divide m (e.g., m=1 if the ordering is global) @item given any set of generators @ifinfo f_1,...f_k of I, let f_i' be obtained from f_i by deleting the terms divisible by x(i)*m for all i with x(i)<1. Then f_1',...,f_k' generate I. @end ifinfo @tex $f_1,\dots,f_k$ of I, let $f'_i$ be obtained from $f_i$ by deleting the terms divisible by $x_i\cdot m$ for all i with $x_i<1$. Then $f'_1,\dots,f'_k$ generate I. @end tex @end itemize @item @strong{Example:} @smallexample @c reused example highcorner reference.doc:2133 ring r=0,(x,y),ds; ideal i=x3,x2y,y3; highcorner(std(i)); @expansion{} xy2 highcorner(std(ideal(1))); @expansion{} 0 @c end example highcorner reference.doc:2133 @end smallexample @end table @c inserted refs from reference.doc:2141 @ifinfo @menu See * dim:: * std:: * vdim:: @end menu @end ifinfo @iftex See @ref{dim}; @ref{std}; @ref{vdim}. @end iftex @c end inserted refs from reference.doc:2141 @c --------------------------------------- @node hilb, homog, highcorner, Functions @subsection hilb @cindex hilb @table @code @item @strong{Syntax:} @code{hilb (} ideal_expression @code{)} @*@code{hilb (} module_expression @code{)} @*@code{hilb (} ideal_expression@code{,} int_expression @code{)} @*@code{hilb (} module_expression@code{,} int_expression @code{)} @*@code{hilb (} ideal_expression@code{,} int_expression @code{,} intvec_expression @code{)} @*@code{hilb (} module_expression@code{,} int_expression @code{,} intvec_expression @code{)} @item @strong{Type:} none (if called with one argument) @*intvec (if called with two or three arguments) @item @strong{Purpose:} computes the (weighted) Hilbert series of the ideal, resp.@: module, defined by the leading terms of the generators of the given ideal, resp.@: module.@* If @code{hilb} is called with one argument, then the 1st and 2nd Hilbert series together with some additional information are displayed.@* If @code{hilb} is called with two arguments, then the n-th Hilbert series is returned as an intvec, where n=1,2 is the second argument.@* If a weight vector w is a given as 3rd argument, then the Hilbert series is computed w.r.t.@: these weights w (by default all weights are set to 1). @item @strong{Caution:} The last entry of the returned intvec is not part of the actual Hilbert series, but is used in the Hilbert driven standard basis computation (see @ref{stdhilb}). @item @strong{Note:} If the input is homogeneous w.r.t.@: the weights and a standard basis, the result is the (weighted) Hilbert series of the original ideal, resp.@: module.@* @item @strong{Example:} @smallexample @c reused example hilb reference.doc:2179 ring R=32003,(x,y,z),dp; ideal i=x2,y2,z2; ideal s=std(i); hilb(s); @expansion{} // 1 t^0 @expansion{} // -3 t^2 @expansion{} // 3 t^4 @expansion{} // -1 t^6 @expansion{} @expansion{} // 1 t^0 @expansion{} // 3 t^1 @expansion{} // 3 t^2 @expansion{} // 1 t^3 @expansion{} // dimension (affine) = 0 @expansion{} // degree = 8 hilb(s,1); @expansion{} 1,0,-3,0,3,0,-1,0 hilb(s,2); @expansion{} 1,3,3,1,0 intvec w=2,2,2; hilb(s,1,w); @expansion{} 1,0,0,0,-3,0,0,0,3,0,0,0,-1,0 @c end example hilb reference.doc:2179 @end smallexample @end table @c inserted refs from reference.doc:2191 @ifinfo @menu See * Hilbert function:: * ideal:: * intvec:: * module:: * std:: * stdhilb:: @end menu @end ifinfo @iftex See @ref{Hilbert function}; @ref{ideal}; @ref{intvec}; @ref{module}; @ref{std}; @ref{stdhilb}. @end iftex @c end inserted refs from reference.doc:2191 @c --------------------------------------- @node homog, hres, hilb, Functions @subsection homog @cindex homog @table @code @item @strong{Syntax:} @code{homog (} ideal_expression @code{)} @*@code{homog (} module_expression @code{)} @item @strong{Type:} int @item @strong{Purpose:} tests for homogeneity: returns 1 for homogeneous input, 0 otherwise. @item @strong{Syntax:} @*@code{homog (} polynomial_expression@code{,} ring_variable @code{)} @*@code{homog (} vector_expression@code{,} ring_variable @code{)} @*@code{homog (} ideal_expression@code{,} ring_variable @code{)} @*@code{homog (} module_expression@code{,} ring_variable @code{)} @item @strong{Type:} same as first argument @item @strong{Purpose:} homogenizes polynomials, vectors, ideals, or modules by multiplying each monomial with a suitable power of the given ring variable (which must have weight 1). @item @strong{Example:} @smallexample @c reused example homog reference.doc:2226 ring r=32003,(x,y,z),ds; poly s1=x3y2+x5y+3y9; poly s2=x2y2z2+3z8; poly s3=5x4y2+4xy5+2x2y2z3+y7+11x10; ideal i=s1,s2,s3; homog(s2,z); @expansion{} x2y2z4+3z8 homog(i,z); @expansion{} _[1]=3y9+x5yz3+x3y2z4 @expansion{} _[2]=x2y2z4+3z8 @expansion{} _[3]=11x10+y7z3+5x4y2z4+4xy5z4+2x2y2z6 homog(i); @expansion{} 0 homog(homog(i,z)); @expansion{} 1 @c end example homog reference.doc:2226 @end smallexample @end table @c inserted refs from reference.doc:2239 @ifinfo @menu See * ideal:: * module:: * poly:: * vector:: @end menu @end ifinfo @iftex See @ref{ideal}; @ref{module}; @ref{poly}; @ref{vector}. @end iftex @c end inserted refs from reference.doc:2239 @c --------------------------------------- @node hres, imap, homog, Functions @subsection hres @cindex hres @cindex resolution, hilbert-driven @table @code @item @strong{Syntax:} @code{hres (} ideal_expression@code{,} int_expression @code{)} @item @strong{Type:} resolution @item @strong{Purpose:} computes a free resolution of an ideal using the Hilbert-driven algorithm. More precisely, let R be the basering and I be the given ideal. Then @code{hres} computes a minimal free resolution of R/I @ifinfo @format A2 A1 ... ----> F2 ----> F1 ----> R --> R/I --> 0. @end format @end ifinfo @tex $$...\longrightarrow F_2 \buildrel{A_2}\over{\longrightarrow} F_1 \buildrel{A_1}\over{\longrightarrow} R\longrightarrow R/I \longrightarrow 0.$$ @end tex If the int_expression k is not zero then the computation stops after k steps and returns a list of modules @tex $M_i={\tt module} (A_i)$, i=1..k. @end tex @ifinfo Mi=module(Ai), i=1...k. @end ifinfo @code{list L=hres(I,0);} returns a list L of n modules (where n is the number of variables of the basering) such that @tex ${\tt L[i]}=M_i$ @end tex @ifinfo L[i]=M_i @end ifinfo in the above notation. @item @strong{Note:} The ideal_expression has to be homogeneous. @* Accessing single elements of a resolution may require that some partial computations have to be finished and may therefore take some time. @item @strong{Example:} @smallexample @c reused example hres reference.doc:2297 ring r=0,(x,y,z),dp; ideal I=xz,yz,x3-y3; def L=hres(I,0); print(betti(L),"betti"); @expansion{} 0 1 2 @expansion{} ------------------------ @expansion{} 0: 1 - - @expansion{} 1: - 2 1 @expansion{} 2: - 1 1 @expansion{} ------------------------ @expansion{} total: 1 3 2 L[2]; // the first syzygy module of r/I @expansion{} _[1]=-x*gen(1)+y*gen(2) @expansion{} _[2]=-x2*gen(2)+y2*gen(1)+z*gen(3) @c end example hres reference.doc:2297 @end smallexample @end table @c inserted refs from reference.doc:2306 @ifinfo @menu See * betti:: * ideal:: * int:: * lres:: * minres:: * module:: * mres:: * res:: * sres:: @end menu @end ifinfo @iftex See @ref{betti}; @ref{ideal}; @ref{int}; @ref{lres}; @ref{minres}; @ref{module}; @ref{mres}; @ref{res}; @ref{sres}. @end iftex @c end inserted refs from reference.doc:2306 @c --------------------------------------- @node imap, impart, hres, Functions @subsection imap @cindex imap @table @code @item @strong{Syntax:} @code{imap (} ring_name@code{,} name @code{)} @item @strong{Type:} number, poly, vector, ideal, module, matrix or list (the same type as the second argument) @item @strong{Purpose:} identity map on common subrings. @code{imap} is the map between rings and qrings with compatible ground fields which is the identity on variables and parameters of the same name and 0 otherwise. (See @ref{map} for a description of possible mapping between different ground fields). Useful for mapping from a homogenized ring to the original ring or for mappings from/to rings with/without parameters. Compared with @code{fetch}, @code{imap} uses the names of variables and parameters. Unlike @code{map} and @code{fetch} @code{imap} can map parameters to variables. @item @strong{Example:} @smallexample @c reused example imap reference.doc:2341 ring r=0,(x,y,z,a,b,c),dp; ideal i=xy2z3a4b5+1,homog(xy2z3a4b5+1,c); i; @expansion{} i[1]=xy2z3a4b5+1 @expansion{} i[2]=xy2z3a4b5+c15 ring r1=0,(a,b,x,y,z),lp; ideal j=imap(r,i); j; @expansion{} j[1]=a4b5xy2z3+1 @expansion{} j[2]=a4b5xy2z3 ring r2=(0,a,b),(x,y,z),ls; ideal j=imap(r,i); j; @expansion{} j[1]=1+(a4b5)*xy2z3 @expansion{} j[2]=(a4b5)*xy2z3 @c end example imap reference.doc:2341 @end smallexample @end table @c inserted refs from reference.doc:2351 @ifinfo @menu See * fetch:: * homog:: * map:: * qring:: * ring:: @end menu @end ifinfo @iftex See @ref{fetch}; @ref{homog}; @ref{map}; @ref{qring}; @ref{ring}. @end iftex @c end inserted refs from reference.doc:2351 @c --------------------------------------- @node impart, indepSet, imap, Functions @subsection impart @cindex impart @table @code @item @strong{Syntax:} @code{impart (} number_expression @code{)} @item @strong{Type:} number @item @strong{Purpose:} returns the imaginary part of a number in a complex ground field, @*returns 0 otherwise. @item @strong{Example:} @smallexample @c reused example impart reference.doc:2374 ring r=(complex,i),x,dp; impart(1+2*i); @expansion{} 2 @c end example impart reference.doc:2374 @end smallexample @end table @c inserted refs from reference.doc:2380 @ifinfo @menu See * repart:: @end menu @end ifinfo @iftex See @ref{repart}. @end iftex @c end inserted refs from reference.doc:2380 @c --------------------------------------- @node indepSet, insert, impart, Functions @subsection indepSet @cindex indepSet @table @code @item @strong{Syntax:} @code{indepSet (} ideal_expression @code{)} @item @strong{Type:} intvec @item @strong{Purpose:} computes a maximal set U of independent variables of the ideal given by a standard basis. If @code{v} is the result then @code{v[i]} is 1 if and only if the i-th variable of the ring, @code{x(i)}, is an independent variable. Hence, the set U consisting of all variables @code{x(i)} with @code{v[i]=1} is a maximal independent set. @c Indeed we compute a maximal strongly independent set U, @c where no power of a variable from U occurs as a leading term ofs @c a standard basis of the ideal. @item @strong{Note:} U is a set of independent variables for I if and only if @tex $I \cap K[U]=(0)$, @end tex @ifinfo I intersect K[U]=(0), @end ifinfo i.e., eliminating the remaining variables gives (0). U is maximal if dim(I)=#U. @item @strong{Syntax:} @code{indepSet (} ideal_expression, int_expression @code{)} @item @strong{Type:} list @item @strong{Purpose:} computes a list of all maximal independent sets of the leading ideal (if the flag is 0), resp.@: of all those sets of independent variables of the leading ideal which cannot be enlarged. @item @strong{Example:} @smallexample @c reused example indepSet reference.doc:2425 ring r=32003,(x,y,u,v,w),dp; ideal I=xyw,yvw,uyw,xv; attrib(I,"isSB",1); indepSet(I); @expansion{} 1,1,1,0,0 eliminate(I,vw); @expansion{} _[1]=0 indepSet(I,0); @expansion{} [1]: @expansion{} 1,1,1,0,0 @expansion{} [2]: @expansion{} 0,1,1,1,0 @expansion{} [3]: @expansion{} 1,0,1,0,1 @expansion{} [4]: @expansion{} 0,0,1,1,1 indepSet(I,1); @expansion{} [1]: @expansion{} 1,1,1,0,0 @expansion{} [2]: @expansion{} 0,1,1,1,0 @expansion{} [3]: @expansion{} 1,0,1,0,1 @expansion{} [4]: @expansion{} 0,0,1,1,1 @expansion{} [5]: @expansion{} 0,1,0,0,1 eliminate(I,xuv); @expansion{} _[1]=0 @c end example indepSet reference.doc:2425 @end smallexample @end table @c inserted refs from reference.doc:2437 @ifinfo @menu See * ideal:: * std:: @end menu @end ifinfo @iftex See @ref{ideal}; @ref{std}. @end iftex @c end inserted refs from reference.doc:2437 @c --------------------------------------- @node insert, interred, indepSet, Functions @subsection insert @cindex insert @table @code @item @strong{Syntax:} @code{insert (} list_expression@code{,} expression @code{)} @*@code{insert (} list_expression@code{,} expression@code{,} int_expression @code{)} @item @strong{Type:} list @item @strong{Purpose:} inserts a new element (expression) into a list at the beginning, or (if called with 3 arguments) after the given position (the input is not changed). @item @strong{Example:} @smallexample @c reused example insert reference.doc:2458 list L=1,2; insert(L,4,2); @expansion{} [1]: @expansion{} 1 @expansion{} [2]: @expansion{} 2 @expansion{} [3]: @expansion{} 4 insert(L,4); @expansion{} [1]: @expansion{} 4 @expansion{} [2]: @expansion{} 1 @expansion{} [3]: @expansion{} 2 @c end example insert reference.doc:2458 @end smallexample @end table @c inserted refs from reference.doc:2465 @ifinfo @menu See * delete:: * list:: @end menu @end ifinfo @iftex See @ref{delete}; @ref{list}. @end iftex @c end inserted refs from reference.doc:2465 @c --------------------------------------- @node interred, intersect, insert, Functions @subsection interred @cindex interred @table @code @item @strong{Syntax:} @code{interred (} ideal_expression @code{)} @*@code{interred (} module_expression @code{)} @item @strong{Type:} the same as the input type @item @strong{Purpose:} interreduces a set of polynomials/vectors. @* @ifinfo input: f_1,@dots{},f_n @end ifinfo @tex input: $f_1,\dots,f_n$ @end tex @* @ifinfo output: g_1,@dots{},g_s with s<=n and the properties @* @end ifinfo @tex output: $g_1,\dots,g_s$ with $s \leq n$ and the properties @end tex @itemize @bullet @item @ifinfo (f_1,@dots{},f_n) = (g_1,@dots{},g_s) @end ifinfo @tex $(f_1,\dots,f_n) = (g_1,\dots,g_s)$ @end tex @item @ifinfo L(g_i)<>L(g_j) for all i<>j @end ifinfo @tex $L(g_i)\neq L(g_j)$ for all $i\neq j$ @end tex @item in the case of a global ordering (polynomial ring): @* @ifinfo L(g_i) @end ifinfo @tex $L(g_i)$ @end tex does not divide m for all monomials m of @ifinfo @{g_1,@dots{},g_(i-1),g_(i+1),@dots{},g_s@} @end ifinfo @tex $\{g_1,\dots,g_{i-1},g_{i+1},\dots,g_s\}$ @end tex @item in the case of a local or mixed ordering (localization of polynomial ring): @* if @ifinfo L(g_i) | L(g_j) for any i<>j, @end ifinfo @tex $L(g_i) | L(g_j)$ for any $i \neq j$, @end tex then @ifinfo ecart(g_i) > ecart(g_j) @end ifinfo @tex $ecart(g_i) > ecart(g_j)$ @end tex @end itemize @tex Here, $L(g)$ denotes the leading term of $g$ and $ecart(g):=deg(g)-deg(L(g))$. @end tex @ifinfo @* Here, L(g) denotes the leading term of g and ecart(g) := deg(g)-deg(L(g)). @end ifinfo @item @strong{Example:} @smallexample @c reused example interred reference.doc:2557 ring r=0,(x,y,z),dp; ideal i=x2+z,z,2z; interred(i); @expansion{} _[1]=z @expansion{} _[2]=x2 ring R=0,(x,y,z),ds; ideal i=zx+y3,z+y3,z+xy; interred(i); @expansion{} _[1]=z+xy @expansion{} _[2]=xy-y3 @expansion{} _[3]=x2y-y3 @c end example interred reference.doc:2557 @end smallexample @end table @c inserted refs from reference.doc:2567 @ifinfo @menu See * ideal:: * module:: * std:: @end menu @end ifinfo @iftex See @ref{ideal}; @ref{module}; @ref{std}. @end iftex @c end inserted refs from reference.doc:2567 @c --------------------------------------- @node intersect, jacob, interred, Functions @subsection intersect @cindex intersect @table @code @item @strong{Syntax:} @code{intersect (} expression_list of ideal_expression @code{)} @*@code{intersect (} expression_list of module_expression @code{)} @item @strong{Type:} ideal, resp.@: module @item @strong{Purpose:} computes the intersection of ideals, resp.@: modules. @item @strong{Note:} If the option @code{returnSB} is enabled then the result is a standard basis. @item @strong{Example:} @smallexample @c reused example intersect reference.doc:2589 ring R=0,(x,y),dp; ideal i=x; ideal j=y; intersect(i,j); @expansion{} _[1]=xy ring r=181,(x,y,z),(c,ls); ideal id1=maxideal(3); ideal id2=x2+xyz,y2-z3y,z3+y5xz; ideal id3=intersect(id1,id2,ideal(x,y)); id3; @expansion{} id3[1]=yz3+xy6z @expansion{} id3[2]=yz4-y2z @expansion{} id3[3]=y2z3-y3 @expansion{} id3[4]=xz3+x2y5z @expansion{} id3[5]=xyz2+x2z @expansion{} id3[6]=xyz3-xy2 @expansion{} id3[7]=xy2z+x2y @expansion{} id3[8]=x2yz+x3 @c end example intersect reference.doc:2589 @end smallexample @end table @c inserted refs from reference.doc:2602 @ifinfo @menu See * ideal:: * module:: * option:: @end menu @end ifinfo @iftex See @ref{ideal}; @ref{module}; @ref{option}. @end iftex @c end inserted refs from reference.doc:2602 @c --------------------------------------- @node jacob, jet, intersect, Functions @subsection jacob @cindex jacob @table @code @item @strong{Syntax:} @code{jacob (} poly_expression @code{)} @*@code{jacob (} ideal_expression @code{)} @item @strong{Type:} ideal, if the input is a polynomial @* matrix, if the input is an ideal @item @strong{Purpose:} computes the Jacobi ideal, resp.@: Jacobi matrix, generated by all partial derivatives of the input. @item @strong{Example:} @smallexample @c reused example jacob reference.doc:2624 ring R; poly f=x2+y3+z5; jacob(f); @expansion{} _[1]=2x @expansion{} _[2]=3y2 @expansion{} _[3]=5z4 ideal i=jacob(f); print(jacob(i)); @expansion{} 2,0, 0, @expansion{} 0,6y,0, @expansion{} 0,0, 20z3 @c end example jacob reference.doc:2624 @end smallexample @end table @c inserted refs from reference.doc:2633 @ifinfo @menu See * diff:: * ideal:: * module:: * nvars:: @end menu @end ifinfo @iftex See @ref{diff}; @ref{ideal}; @ref{module}; @ref{nvars}. @end iftex @c end inserted refs from reference.doc:2633 @c --------------------------------------- @node jet, kbase, jacob, Functions @subsection jet @cindex jet @table @code @item @strong{Syntax:} @code{jet (} poly_expression@code{,} int_expression @code{)} @*@code{jet (} vector_expression@code{,} int_expression @code{)} @*@code{jet (} ideal_expression@code{,} int_expression @code{)} @*@code{jet (} module_expression@code{,} int_expression @code{)} @*@code{jet (} poly_expression@code{,} int_expression@code{,} intvec_expression @code{)} @*@code{jet (} vector_expression@code{,} int_expression@code{,} intvec_expression @code{)} @*@code{jet (} ideal_expression@code{,} int_expression@code{,} intvec_expression @code{)} @*@code{jet (} module_expression@code{,} int_expression@code{,} intvec_expression @code{)} @*@code{jet (} poly_expression@code{,} int_expression@code{,} poly_expression @code{)} @*@code{jet (} vector_expression@code{,} int_expression@code{,} poly_expression @code{)} @*@code{jet (} ideal_expression@code{,} int_expression@code{,} matrix_expression @code{)} @*@code{jet (} module_expression@code{,} int_expression@code{,} matrix_expression @code{)} @item @strong{Type:} the same as the type of the first argument @item @strong{Purpose:} deletes from the first argument all terms of degree bigger than the second argument. @*If a third argument @code{w} of type intvec is given, the degree is replaced by the weighted degree defined by @code{w}. @*If a third argument @code{u} of type poly or matrix is given, the first argument @code{p} is replaced by @code{p/u}. @item @strong{Example:} @smallexample @c reused example jet reference.doc:2666 ring r=32003,(x,y,z),(c,dp); jet(1+x+x2+x3+x4,3); @expansion{} x3+x2+x+1 poly f=1+x+x2+xz+y2+x3+y3+x2y2+z4; jet(f,3); @expansion{} x3+y3+x2+y2+xz+x+1 intvec iv=2,1,1; jet(f,3,iv); @expansion{} y3+y2+xz+x+1 // the part of f with (total) degree >3: f-jet(f,3); @expansion{} x2y2+z4 // the homogeneous part of f of degree 2: jet(f,2)-jet(f,1); @expansion{} x2+y2+xz // the part of maximal degree: jet(f,deg(f))-jet(f,deg(f)-1); @expansion{} x2y2+z4 // the absolute term of f: jet(f,0); @expansion{} 1 // now for other types: ideal i=f,x,f*f; jet(i,2); @expansion{} _[1]=x2+y2+xz+x+1 @expansion{} _[2]=x @expansion{} _[3]=3x2+2y2+2xz+2x+1 vector v=[f,1,x]; jet(v,1); @expansion{} [x+1,1,x] jet(v,0); @expansion{} [1,1] v=[f,1,0]; module m=v,v,[1,x2,z3,0,1]; jet(m,2); @expansion{} _[1]=[x2+y2+xz+x+1,1] @expansion{} _[2]=[x2+y2+xz+x+1,1] @expansion{} _[3]=[1,x2,0,0,1] @c end example jet reference.doc:2666 @end smallexample @end table @c inserted refs from reference.doc:2693 @ifinfo @menu See * deg:: * ideal:: * int:: * intvec:: * module:: * poly:: * vector:: @end menu @end ifinfo @iftex See @ref{deg}; @ref{ideal}; @ref{int}; @ref{intvec}; @ref{module}; @ref{poly}; @ref{vector}. @end iftex @c end inserted refs from reference.doc:2693 @c --------------------------------------- @node kbase, kill, jet, Functions @subsection kbase @cindex kbase @table @code @item @strong{Syntax:} @code{kbase (} ideal_expression @code{)} @*@code{kbase (} module_expression @code{)} @*@code{kbase (} ideal_expression@code{,} int_expression@code{)} @*@code{kbase (} module_expression@code{,} int_expression@code{)} @item @strong{Type:} the same as the input type of the first argument @item @strong{Purpose:} with one argument: computes a vector space basis (consisting of monomials) of the quotient ring by the ideal, resp.@: of a free module by the module, in case it is finite dimensional and if the input is a standard basis with respect to the ring ordering. If the input is not a standard basis, the leading terms of the input are used and the result may have no meaning. @*With two arguments: computes the part of a vector space basis of the respective quotient with degree of the monomials equal to the second argument. Here, the quotient does not need to be finite dimensional. @item @strong{Example:} @smallexample @c reused example kbase reference.doc:2728 ring r=32003,(x,y,z),ds; ideal i=x2,y2,z; kbase(std(i)); @expansion{} _[1]=xy @expansion{} _[2]=y @expansion{} _[3]=x @expansion{} _[4]=1 i=x2,y3,xyz; // quotient not finite dimensional kbase(std(i),2); @expansion{} _[1]=z2 @expansion{} _[2]=yz @expansion{} _[3]=xz @expansion{} _[4]=y2 @expansion{} _[5]=xy @c end example kbase reference.doc:2728 @end smallexample @end table @c inserted refs from reference.doc:2737 @ifinfo @menu See * ideal:: * module:: * vdim:: @end menu @end ifinfo @iftex See @ref{ideal}; @ref{module}; @ref{vdim}. @end iftex @c end inserted refs from reference.doc:2737 @c --------------------------------------- @node kill, killattrib, kbase, Functions @subsection kill @cindex kill @table @code @item @strong{Syntax:} @code{kill (} name @code{)} @*@code{kill (} list_of_names @code{)} @item @strong{Type:} none @item @strong{Purpose:} deletes objects. @item @strong{Example:} @smallexample @c reused example kill reference.doc:2757 int i=3; ring r=0,x,dp; poly p; listvar(); @expansion{} // r [0] *ring @expansion{} // p [0] poly @expansion{} // i [0] int 3 @expansion{} // LIB [0] string standard.lib kill(i,r); // the variable `i` does not exist any more i; @expansion{} ? `i` is undefined @expansion{} ? error occurred in line 7: ` i;` listvar(); @expansion{} // LIB [0] string standard.lib @c end example kill reference.doc:2757 @end smallexample @end table @c inserted refs from reference.doc:2769 @ifinfo @menu See * defined:: * general_lib:: * names:: @end menu @end ifinfo @iftex See @ref{defined}; @ref{general_lib}; @ref{names}. @end iftex @c end inserted refs from reference.doc:2769 @c --------------------------------------- @node killattrib, koszul, kill, Functions @subsection killattrib @cindex killattrib @table @code @item @strong{Syntax:} @code{killattrib (} name@code{,} string_expression @code{)} @item @strong{Type:} none @item @strong{Purpose:} deletes the attribute given as the second argument. @item @strong{Example:} @smallexample @c reused example killattrib reference.doc:2788 ring r=32003,(x,y),lp; ideal i=maxideal(1); attrib(i,"isSB",1); attrib(i); @expansion{} attr:isSB, type int killattrib(i,"isSB"); attrib(i); @expansion{} no attributes @c end example killattrib reference.doc:2788 @end smallexample @end table @c inserted refs from reference.doc:2798 @ifinfo @menu See * attrib:: * option:: @end menu @end ifinfo @iftex See @ref{attrib}; @ref{option}. @end iftex @c end inserted refs from reference.doc:2798 @c --------------------------------------- @node koszul, laguerre, killattrib, Functions @subsection koszul @cindex koszul @table @code @item @strong{Syntax:} @code{koszul (} int_expression@code{,} int_expression @code{)} @*@code{koszul (} int_expression@code{,} ideal_expression @code{)} @*@code{koszul (} int_expression@code{,} int_expression@code{,} ideal_expression @code{)} @item @strong{Type:} matrix @item @strong{Purpose:} @code{koszul(d,n)} computes a matrix of the Koszul relations of degree d of the first n ring variables. @code{koszul(d,id)} computes a matrix of the Koszul relations of degree d of the generators of the ideal @code{id}. @code{koszul(d,n,id)} computes a matrix of the Koszul relations of degree d of the first n generators of the ideal @code{id}. @item @strong{Note:} @code{koszul(1,id),koszul(2,id),...} form a complex, that is, the product of the matrices @code{koszul(i,id)} and @code{koszul(i+1,id)} equals zero. @item @strong{Example:} @smallexample @c reused example koszul reference.doc:2829 ring r=32003,(x,y,z),dp; print(koszul(2,3)); @expansion{} -y,-z,0, @expansion{} x, 0, -z, @expansion{} 0, x, y ideal I=xz2+yz2+z3,xyz+y2z+yz2,xy2+y3+y2z; print(koszul(1,I)); @expansion{} xz2+yz2+z3,xyz+y2z+yz2,xy2+y3+y2z print(koszul(2,I)); @expansion{} -xyz-y2z-yz2,-xy2-y3-y2z,0, @expansion{} xz2+yz2+z3, 0, -xy2-y3-y2z, @expansion{} 0, xz2+yz2+z3, xyz+y2z+yz2 print(koszul(2,I)*koszul(3,I)); @expansion{} 0, @expansion{} 0, @expansion{} 0 @c end example koszul reference.doc:2829 @end smallexample @end table @c inserted refs from reference.doc:2839 @ifinfo @menu See * int:: * matrix:: @end menu @end ifinfo @iftex See @ref{int}; @ref{matrix}. @end iftex @c end inserted refs from reference.doc:2839 @c --------------------------------------- @node laguerre, lead, koszul, Functions @subsection laguerre @cindex laguerre @table @code @item @strong{Syntax:} @code{laguerre (} poly_expression@code{,} int_expression@code{,} int_expression @code{)} @item @strong{Type:} list @item @strong{Purpose:} computes all complex roots of a univariate polynomial using Laguerre's algorithm. The second argument defines the precision of the fractional part if the ground field is the field of rational numbers, otherwise it will be ignored. The third argument (can be 0, 1 or 2) gives the number of extra runs for Laguerre's algorithm (with corrupted roots), leading to better results. @item @strong{Note:} If the ground field is the field of complex numbers, the elements of the list are of type number, otherwise of type string. @item @strong{Example:} @smallexample @c reused example laguerre reference.doc:2864 ring rs1=0,(x,y),lp; poly f=15x5+x3+x2-10; laguerre(f,10,2); @expansion{} [1]: @expansion{} (0.2930464644-I*0.9003002396) @expansion{} [2]: @expansion{} (0.2930464644+I*0.9003002396) @expansion{} [3]: @expansion{} (-0.7392783383-I*0.5355190078) @expansion{} [4]: @expansion{} (-0.7392783383+I*0.5355190078) @expansion{} [5]: @expansion{} 0.8924637479 @c end example laguerre reference.doc:2864 @end smallexample @end table @c @c ref @c @c ref @c ------------------------------------------------- @node lead, leadcoef, laguerre, Functions @subsection lead @cindex lead @table @code @item @strong{Syntax:} @code{lead (} poly_expression @code{)} @*@code{lead (} vector_expression @code{)} @*@code{lead (} ideal_expression @code{)} @*@code{lead (} module_expression @code{)} @item @strong{Type:} the same as the input type @item @strong{Purpose:} returns the leading (or initial) term(s) of a polynomial, a vector, resp.@: of the generators of an ideal or module with respect to the monomial ordering. @cindex IN @item @strong{Note:} @code{IN} may be used instead of @code{lead}. @item @strong{Example:} @smallexample @c reused example lead reference.doc:2894 ring r=32003,(x,y,z),(c,ds); poly f=2x2+3y+4z3; vector v=[2x10,f]; ideal i=f,z; module m=v,[0,0,2+x]; lead(f); @expansion{} 3y lead(v); @expansion{} [2x10] lead(i); @expansion{} _[1]=3y @expansion{} _[2]=z lead(m); @expansion{} _[1]=[2x10] @expansion{} _[2]=[0,0,2] lead(0); @expansion{} 0 @c end example lead reference.doc:2894 @end smallexample @end table @c inserted refs from reference.doc:2908 @ifinfo @menu See * ideal:: * leadcoef:: * leadexp:: * leadmonom:: * module:: * poly:: * vector:: @end menu @end ifinfo @iftex See @ref{ideal}; @ref{leadcoef}; @ref{leadexp}; @ref{leadmonom}; @ref{module}; @ref{poly}; @ref{vector}. @end iftex @c end inserted refs from reference.doc:2908 @c ------------------------------------------------- @node leadcoef, leadexp, lead, Functions @subsection leadcoef @cindex leadcoef @table @code @item @strong{Syntax:} @code{leadcoef (} poly_expression @code{)} @*@code{leadcoef (} vector_expression @code{)} @item @strong{Type:} number @item @strong{Purpose:} returns the leading (or initial) coefficient of a polynomial or a vector with respect to the monomial ordering. @item @strong{Example:} @smallexample @c reused example leadcoef reference.doc:2933 ring r=32003,(x,y,z),(c,ds); poly f=x2+y+z3; vector v=[2*x^10,f]; leadcoef(f); @expansion{} 1 leadcoef(v); @expansion{} 2 leadcoef(0); @expansion{} 0 @c end example leadcoef reference.doc:2933 @end smallexample @end table @c inserted refs from reference.doc:2943 @ifinfo @menu See * lead:: * leadexp:: * leadmonom:: * number:: * poly:: * vector:: @end menu @end ifinfo @iftex See @ref{lead}; @ref{leadexp}; @ref{leadmonom}; @ref{number}; @ref{poly}; @ref{vector}. @end iftex @c end inserted refs from reference.doc:2943 @c ------------------------------------------------- @node leadexp, leadmonom, leadcoef, Functions @subsection leadexp @cindex leadexp @table @code @item @strong{Syntax:} @code{leadexp (} poly_expression @code{)} @*@code{leadexp (} vector_expression @code{)} @item @strong{Type:} intvec @item @strong{Purpose:} returns the exponent vector of the leading monomial of a polynomial or a vector. In the case of a vector the last component is the index in the vector. @item @strong{Example:} @smallexample @c reused example leadexp reference.doc:2967 ring r=32003,(x,y,z),(c,ds); poly f=x2+y+z3; vector v=[2*x^10,f]; leadexp(f); @expansion{} 0,1,0 leadexp(v); @expansion{} 10,0,0,1 leadexp(0); @expansion{} 0,0,0 @c end example leadexp reference.doc:2967 @end smallexample @end table @c inserted refs from reference.doc:2977 @ifinfo @menu See * intvec:: * lead:: * leadcoef:: * leadmonom:: * poly:: * vector:: @end menu @end ifinfo @iftex See @ref{intvec}; @ref{lead}; @ref{leadcoef}; @ref{leadmonom}; @ref{poly}; @ref{vector}. @end iftex @c end inserted refs from reference.doc:2977 @c ------------------------------------------------- @node leadmonom, LIB, leadexp, Functions @subsection leadmonom @cindex leadmonom @table @code @item @strong{Syntax:} @code{leadmonom (} poly_expression @code{)} @*@code{leadmonom (} vector_expression @code{)} @item @strong{Type:} the same as the input type @item @strong{Purpose:} returns the leading monomial of a polynomial or a vector as a polynomial or vector whose coefficient is one. @item @strong{Example:} @smallexample @c reused example leadmonom reference.doc:3001 ring r=32003,(x,y,z),(c,ds); poly f=2x2+3y+4z3; vector v=[2x10,f]; leadmonom(f); @expansion{} y leadmonom(v); @expansion{} [x10] leadmonom(0); @expansion{} 0 @c end example leadmonom reference.doc:3001 @end smallexample @end table @c inserted refs from reference.doc:3012 @ifinfo @menu See * intvec:: * lead:: * leadcoef:: * leadexp:: * poly:: * vector:: @end menu @end ifinfo @iftex See @ref{intvec}; @ref{lead}; @ref{leadcoef}; @ref{leadexp}; @ref{poly}; @ref{vector}. @end iftex @c end inserted refs from reference.doc:3012 @c --------------------------------------- @node LIB, lift, leadmonom, Functions @subsection LIB @cindex LIB @table @code @item @strong{Syntax:} @code{LIB} string_expression@code{;} @item @strong{Type:} none @ifset namespaces @item @strong{Note:} This command is obsoleted by @code{load(}string_expression@code{,"with");} @end ifset @ifclear namespaces @item @strong{Purpose:} reads a library of procedures from a file. If the given filename does not start with @kbd{.} or @kbd{/} and cannot be located in the current directory, each directory contained in the library @code{SearchPath} is searched for file of this name. @xref{Loading of a library}, for more info on @code{SearchPath}. @end ifclear @item @strong{Note on standard.lib:} Unless @sc{Singular} is started with the @code{--no-stdlib} option, the library @code{standard.lib} is automatically loaded at start-up time. @item @strong{Syntax:} @code{LIB;} @item @strong{Type:} string @item @strong{Purpose:} shows all loaded libraries written in Singular. @item @strong{Example:} @smallexample @c reused example LIB reference.doc:3058 option(loadLib); // show loading of libraries LIB; // standard.lib is loaded @expansion{} standard.lib // the names of the procedures of inout.lib LIB "inout.lib"; // are now known to Singular @expansion{} // ** loaded inout.lib (1.21.2.5,2002/06/12) LIB; @expansion{} standard.lib,inout.lib @c end example LIB reference.doc:3058 @end smallexample @end table @ifset namespaces @c inserted refs from reference.doc:3069 @ifinfo @menu See * Command line options:: * Namespaces:: * Procedures and libraries:: * SINGULAR libraries:: * load:: * package:: * proc:: * standard_lib:: * string:: * system:: @end menu @end ifinfo @iftex See @ref{Command line options}; @ref{Namespaces}; @ref{Procedures and libraries}; @ref{SINGULAR libraries}; @ref{load}; @ref{package}; @ref{proc}; @ref{standard_lib}; @ref{string}; @ref{system}. @end iftex @c end inserted refs from reference.doc:3069 @end ifset @ifclear namespaces @c inserted refs from reference.doc:3084 @ifinfo @menu See * Command line options:: * Loading of a library:: * Procedures and libraries:: * SINGULAR libraries:: * proc:: * standard_lib:: * string:: * system:: @end menu @end ifinfo @iftex See @ref{Command line options}; @ref{Loading of a library}; @ref{Procedures and libraries}; @ref{SINGULAR libraries}; @ref{proc}; @ref{standard_lib}; @ref{string}; @ref{system}. @end iftex @c end inserted refs from reference.doc:3084 @end ifclear @c ------------------------------------------------- @node lift, liftstd, LIB, Functions @subsection lift @cindex lift @table @code @item @strong{Syntax:} @code{lift (} ideal_expression@code{,} subideal_expression @code{)} @*@code{lift (} module_expression@code{,} submodule_expression @code{)} @*@code{lift (} ideal_expression@code{,} subideal_expression@code{,} matrix_name @code{)} @*@code{lift (} module_expression@code{,} submodule_expression@code{,} matrix_name @code{)} @item @strong{Type:} matrix @item @strong{Purpose:} computes the transformation matrix which expresses the generators of a submodule in terms of the generators of a module. Uses different algorithms for modules which are, resp.@: are not, represented by a standard basis. @* More precisely, if @code{m} is the module (or ideal), @code{sm} the submodule (or ideal), and @code{T} the transformation matrix returned by lift, then @code{matrix(sm)*U = matrix(m)*T} and @code{module(sm*U) = module(matrix(m)*T)} (resp.@: @code{ideal(sm*U) = ideal(matrix(m)*T)}), where @code{U} is a diagonal matrix of units. @*@code{U} is always the unity matrix if the basering is a polynomial ring (not power series ring). @code{U} is stored in the optional third argument. @item @strong{Note:} Gives a warning if @code{sm} is not a submodule. @item @strong{Example:} @smallexample @c reused example lift reference.doc:3126 ring r=32003,(x,y,z),(dp,C); ideal m=3x2+yz,7y6+2x2y+5xz; poly f=y7+x3+xyz+z2; ideal i=jacob(f); matrix T=lift(i,m); matrix(m)-matrix(i)*T; @expansion{} _[1,1]=0 @expansion{} _[1,2]=0 @c end example lift reference.doc:3126 @end smallexample @end table @c inserted refs from reference.doc:3136 @ifinfo @menu See * division:: * ideal:: * module:: @end menu @end ifinfo @iftex See @ref{division}; @ref{ideal}; @ref{module}. @end iftex @c end inserted refs from reference.doc:3136 @c ----------------------------------------- @node liftstd, listvar, lift, Functions @subsection liftstd @cindex liftstd @table @code @item @strong{Syntax:} @code{liftstd (} ideal_expression@code{,} matrix_name @code{)} @*@code{liftstd (} module_expression@code{,} matrix_name @code{)} @item @strong{Type:} ideal or module @item @strong{Purpose:} returns a standard basis of an ideal or module and the transformation matrix from the given ideal, resp.@: module, to the standard basis. @*That is, if @code{m} is the ideal or module, @code{sm} the standard basis returned by @code{liftstd}, and @code{T} the transformation matrix then @code{matrix(sm)=matrix(m)*T} and @code{sm=ideal(matrix(m)*T)}, resp.@: @code{sm=module(matrix(m)*T)}. @item @strong{Example:} @smallexample @c reused example liftstd reference.doc:3161 ring R=0,(x,y,z),dp; poly f=x3+y7+z2+xyz; ideal i=jacob(f); matrix T; ideal sm=liftstd(i,T); sm; @expansion{} sm[1]=xy+2z @expansion{} sm[2]=3x2+yz @expansion{} sm[3]=yz2+3048192z3 @expansion{} sm[4]=3024xz2-yz2 @expansion{} sm[5]=y2z-6xz @expansion{} sm[6]=3097158156288z4+2016z3 @expansion{} sm[7]=7y6+xz print(T); @expansion{} 0,1,T[1,3], T[1,4],y, T[1,6],0, @expansion{} 0,0,-3x+3024z,3x, 0, T[2,6],1, @expansion{} 1,0,T[3,3], T[3,4],-3x,T[3,6],0 matrix(sm)-matrix(i)*T; @expansion{} _[1,1]=0 @expansion{} _[1,2]=0 @expansion{} _[1,3]=0 @expansion{} _[1,4]=0 @expansion{} _[1,5]=0 @expansion{} _[1,6]=0 @expansion{} _[1,7]=0 @c end example liftstd reference.doc:3161 @end smallexample @end table @c inserted refs from reference.doc:3173 @ifinfo @menu See * ideal:: * matrix:: * option:: * ring:: * std:: @end menu @end ifinfo @iftex See @ref{ideal}; @ref{matrix}; @ref{option}; @ref{ring}; @ref{std}. @end iftex @c end inserted refs from reference.doc:3173 @c --------------------------------------- @node listvar, lres, liftstd, Functions @subsection listvar @cindex listvar @table @code @item @strong{Syntax:} @ifset namespaces @code{listvar (} [package] @code{)} @*@code{listvar (} [package@code{,}] type @code{)} @*@code{listvar (} [package@code{,}] ring_name @code{)} @*@code{listvar (} [package@code{,}] name @code{)} @*@code{listvar (} [package@code{,}] @code{all )} @end ifset @ifclear namespaces @code{listvar (} [package] @code{)} @*@code{listvar (} [package@code{,}] type @code{)} @*@code{listvar (} [package@code{,}] ring_name @code{)} @*@code{listvar (} [package@code{,}] name @code{)} @*@code{listvar (} [package@code{,}] @code{all )} @end ifclear @item @strong{Type:} none @item @strong{Purpose:} lists all (user-)defined names in the current namespace: @itemize @bullet @item @code{listvar()}: all currently visible names except procedures, @item @code{listvar(}type@code{)}: all currently visible names of the given type, @item @code{listvar(}ring_name@code{)}: all names which belong to the given ring, @item @code{listvar(}name@code{)}: the object with the given name, @item @code{listvar(all)}: all names except procedures. @end itemize The current basering is marked with a @code{*}. The nesting level of variables in procedures is shown in square brackets. @ifset namespaces package can be @code{Current}, @code{Up}, @code{Top} or any other identifier of type package. @item @strong{Example:} @smallexample @c reused example listvar reference.doc:3222 proc t1 @{ @} proc t2 @{ @} ring s; poly ss; ring r; poly f=x+y+z; int i=7; ideal I=f,x,y; listvar(all); @expansion{} // i [0] int 7 @expansion{} // r [0] *ring @expansion{} // I [0] ideal, 3 generator(s) @expansion{} // f [0] poly @expansion{} // s [0] ring @expansion{} // ss [0] poly @expansion{} // LIB [0] string standard.lib listvar(); @expansion{} // i [0] int 7 @expansion{} // r [0] *ring @expansion{} // I [0] ideal, 3 generator(s) @expansion{} // f [0] poly @expansion{} // s [0] ring @expansion{} // LIB [0] string standard.lib listvar(r); @expansion{} // r [0] *ring @expansion{} // I [0] ideal, 3 generator(s) @expansion{} // f [0] poly listvar(t1); @expansion{} // t1 [0] proc listvar(proc); @expansion{} // t2 [0] proc @expansion{} // t1 [0] proc @expansion{} // fprintf [0] proc from standard.lib @expansion{} // printf [0] proc from standard.lib @expansion{} // sprintf [0] proc from standard.lib @expansion{} // intersect1 [0] proc from standard.lib (static) @expansion{} // quotient4 [0] proc from standard.lib @expansion{} // quotient5 [0] proc from standard.lib @expansion{} // quotient3 [0] proc from standard.lib @expansion{} // quotient2 [0] proc from standard.lib @expansion{} // quotient1 [0] proc from standard.lib @expansion{} // quotient0 [0] proc from standard.lib (static) @expansion{} // quot1 [0] proc from standard.lib (static) @expansion{} // quot [0] proc from standard.lib @expansion{} // res [0] proc from standard.lib @expansion{} // groebner [0] proc from standard.lib @expansion{} // stdhilb [0] proc from standard.lib @expansion{} // stdfglm [0] proc from standard.lib listvar(Standard, proc); @c end example listvar reference.doc:3222 @end smallexample @end ifset @ifclear namespaces @item @strong{Example:} @smallexample @c reused example listvar_1 reference.doc:3243 proc t1 @{ @} proc t2 @{ @} ring s; poly ss; ring r; poly f=x+y+z; int i=7; ideal I=f,x,y; listvar(all); @expansion{} // i [0] int 7 @expansion{} // r [0] *ring @expansion{} // I [0] ideal, 3 generator(s) @expansion{} // f [0] poly @expansion{} // s [0] ring @expansion{} // ss [0] poly @expansion{} // LIB [0] string standard.lib listvar(); @expansion{} // i [0] int 7 @expansion{} // r [0] *ring @expansion{} // I [0] ideal, 3 generator(s) @expansion{} // f [0] poly @expansion{} // s [0] ring @expansion{} // LIB [0] string standard.lib listvar(r); @expansion{} // r [0] *ring @expansion{} // I [0] ideal, 3 generator(s) @expansion{} // f [0] poly listvar(t1); @expansion{} // t1 [0] proc listvar(proc); @expansion{} // t2 [0] proc @expansion{} // t1 [0] proc @expansion{} // fprintf [0] proc from standard.lib @expansion{} // printf [0] proc from standard.lib @expansion{} // sprintf [0] proc from standard.lib @expansion{} // intersect1 [0] proc from standard.lib (static) @expansion{} // quotient4 [0] proc from standard.lib @expansion{} // quotient5 [0] proc from standard.lib @expansion{} // quotient3 [0] proc from standard.lib @expansion{} // quotient2 [0] proc from standard.lib @expansion{} // quotient1 [0] proc from standard.lib @expansion{} // quotient0 [0] proc from standard.lib (static) @expansion{} // quot1 [0] proc from standard.lib (static) @expansion{} // quot [0] proc from standard.lib @expansion{} // res [0] proc from standard.lib @expansion{} // groebner [0] proc from standard.lib @expansion{} // stdhilb [0] proc from standard.lib @expansion{} // stdfglm [0] proc from standard.lib @c end example listvar_1 reference.doc:3243 @end smallexample @end ifclear @end table @ifset namespaces @c inserted refs from reference.doc:3262 @ifinfo @menu See * Names:: * Names in procedures:: * Namespaces:: * defined:: * names:: * package:: * type:: @end menu @end ifinfo @iftex See @ref{Names}; @ref{Names in procedures}; @ref{Namespaces}; @ref{defined}; @ref{names}; @ref{package}; @ref{type}. @end iftex @c end inserted refs from reference.doc:3262 @end ifset @ifclear namespaces @c inserted refs from reference.doc:3274 @ifinfo @menu See * Names:: * Names in procedures:: * defined:: * names:: * type:: @end menu @end ifinfo @iftex See @ref{Names}; @ref{Names in procedures}; @ref{defined}; @ref{names}; @ref{type}. @end iftex @c end inserted refs from reference.doc:3274 @end ifclear @c --------------------------------------- @node lres, maxideal, listvar, Functions @subsection lres @cindex lres @cindex resolution, La Scala's method @table @code @item @strong{Syntax:} @code{lres (} ideal_expression@code{,} int_expression @code{)} @item @strong{Type:} resolution @item @strong{Purpose:} computes a free resolution of an ideal using La Scala's algorithm. More precisely, let R be the basering and I be the given ideal. Then @code{lres} computes a minimal free resolution of R/I @ifinfo @format A2 A1 ... ----> F2 ----> F1 ----> R --> R/I --> 0. @end format @end ifinfo @tex $$...\longrightarrow F_2 \buildrel{A_2}\over{\longrightarrow} F_1 \buildrel{A_1}\over{\longrightarrow} R\longrightarrow R/I \longrightarrow 0.$$ @end tex If the int_expression k is not zero then the computation stops after k steps and returns a list of modules @tex $M_i={\tt module}(A_i)$, i=1..k. @end tex @ifinfo Mi=module(Ai), i=1..k. @end ifinfo @code{list L=lres(I,0);} returns a list L of n modules (where n is the number of variables of the basering) such that @tex ${\tt L[i]}=M_i$ @end tex @ifinfo L[i]=M_i @end ifinfo in the above notation. @item @strong{Note:} The ideal_expression has to be homogeneous. @*Accessing single elements of a resolution may require that some partial computations have to be finished and may therefore take some time. @item @strong{Example:} @smallexample @c reused example lres reference.doc:3334 ring r=0,(x,y,z),dp; ideal I=xz,yz,x3-y3; def L=lres(I,0); print(betti(L),"betti"); @expansion{} 0 1 2 @expansion{} ------------------------ @expansion{} 0: 1 - - @expansion{} 1: - 2 1 @expansion{} 2: - 1 1 @expansion{} ------------------------ @expansion{} total: 1 3 2 L[2]; // the first syzygy module of r/I @expansion{} _[1]=-x*gen(1)+y*gen(2) @expansion{} _[2]=-x2*gen(2)+y2*gen(1)+z*gen(3) @c end example lres reference.doc:3334 @end smallexample @end table @c inserted refs from reference.doc:3343 @ifinfo @menu See * betti:: * hres:: * ideal:: * int:: * minres:: * module:: * mres:: * res:: * sres:: @end menu @end ifinfo @iftex See @ref{betti}; @ref{hres}; @ref{ideal}; @ref{int}; @ref{minres}; @ref{module}; @ref{mres}; @ref{res}; @ref{sres}. @end iftex @c end inserted refs from reference.doc:3343 @c --------------------------------------- @node maxideal, memory, lres, Functions @subsection maxideal @cindex maxideal @table @code @item @strong{Syntax:} @code{maxideal (} int_expression @code{)} @item @strong{Type:} ideal @item @strong{Purpose:} returns the power given by int_expression of the maximal ideal generated by all ring variables (@code{maxideal(i)=1} for @code{i<=0}). @item @strong{Example:} @smallexample @c reused example maxideal reference.doc:3369 ring r=32003,(x,y,z),dp; maxideal(2); @expansion{} _[1]=z2 @expansion{} _[2]=yz @expansion{} _[3]=y2 @expansion{} _[4]=xz @expansion{} _[5]=xy @expansion{} _[6]=x2 @c end example maxideal reference.doc:3369 @end smallexample @end table @c inserted refs from reference.doc:3375 @ifinfo @menu See * ideal:: * ring:: @end menu @end ifinfo @iftex See @ref{ideal}; @ref{ring}. @end iftex @c end inserted refs from reference.doc:3375 @c --------------------------------------- @node memory, minbase, maxideal, Functions @subsection memory @cindex memory @cindex memory managment @table @code @item @strong{Syntax:} @code{memory (} int_expression @code{)} @item @strong{Type:} int @item @strong{Purpose:} returns statistics concerning the memory management: @itemize @bullet @item @code{memory(0)} is the number of active (used) bytes, @item @code{memory(1)} is the number of bytes allocated from the operating system, @item @code{memory(2)} is the maximal number of bytes ever allocated from the operating system during the current @sc{Singular} session. @end itemize @item @strong{Note:} To monitor the memory usage during ongoing computations the option @code{mem} should be set (using the command @code{option(mem);}, see also @ref{option}). @item @strong{Example:} @smallexample @c reused example memory reference.doc:3405 ring r=0,(x(1..500)),dp; poly p=(x(1)+x(500))^50; proc ReportMemoryUsage() @{ "Memory currently used by SINGULAR :",memory(0),"Byte (", memory(0)/1023, "KByte)" +newline+ "Memory currently allocated from system:",memory(1), "Byte (", memory(1)/1023, "KByte)"; "Maximal memory allocated from system :",memory(2), "Byte (", memory(2)/1023, "KByte)"; @} ReportMemoryUsage(); @expansion{} Memory currently used by SINGULAR : 206940 Byte ( 202 KByte) @expansion{} Memory currently allocated from system: 669128 Byte ( 654 KByte) @expansion{} Maximal memory allocated from system : 669128 Byte ( 654 KByte) kill p; ReportMemoryUsage(); // less memory used: p killed @expansion{} Memory currently used by SINGULAR : 153704 Byte ( 150 KByte) @expansion{} Memory currently allocated from system: 669128 Byte ( 654 KByte) @expansion{} Maximal memory allocated from system : 669128 Byte ( 654 KByte) kill r; ReportMemoryUsage(); // even less memory: r killed @expansion{} Memory currently used by SINGULAR : 143124 Byte ( 139 KByte) @expansion{} Memory currently allocated from system: 669128 Byte ( 654 KByte) @expansion{} Maximal memory allocated from system : 669128 Byte ( 654 KByte) @c end example memory reference.doc:3405 @end smallexample @end table @c inserted refs from reference.doc:3424 @ifinfo @menu See * option:: * system:: @end menu @end ifinfo @iftex See @ref{option}; @ref{system}. @end iftex @c end inserted refs from reference.doc:3424 @c --------------------------------------- @node minbase, minor, memory, Functions @subsection minbase @cindex minbase @table @code @item @strong{Syntax:} @code{minbase (} ideal_expression @code{)} @*@code{minbase (} module_expression @code{)} @item @strong{Type:} the same as the type of the argument @item @strong{Purpose:} returns a minimal set of generators of an ideal, resp.@: module, if the input is either homogeneous or if the ordering is local. @item @strong{Example:} @smallexample @c reused example minbase reference.doc:3445 ring r=181,(x,y,z),(c,ls); ideal id2=x2+xyz,y2-z3y,z3+y5xz; ideal id4=maxideal(3)+id2; size(id4); @expansion{} 13 minbase(id4); @expansion{} _[1]=x2 @expansion{} _[2]=xyz+x2 @expansion{} _[3]=xz2 @expansion{} _[4]=y2 @expansion{} _[5]=yz2 @expansion{} _[6]=z3 @c end example minbase reference.doc:3445 @end smallexample @end table @c inserted refs from reference.doc:3454 @ifinfo @menu See * mstd:: @end menu @end ifinfo @iftex See @ref{mstd}. @end iftex @c end inserted refs from reference.doc:3454 @c --------------------------------------- @node minor, minres, minbase, Functions @subsection minor @cindex minor @table @code @item @strong{Syntax:} @code{minor (} matrix_expression@code{,} int_expression @code{)} @*@code{minor (} matrix_expression@code{,} int_expression@code{,} ideal_expression @code{)} @item @strong{Type:} ideal @item @strong{Purpose:} returns the set of all minors (=subdeterminants) of the given size of a matrix. The optional third argument must be a standard basis. If a third argument is given, the computations will be performed modulo that ideal. @item @strong{Example:} @smallexample @c reused example minor reference.doc:3475 ring r=0,(x(1..5)),ds; matrix m[2][4]=x(1..4),x(2..5); print(m); @expansion{} x(1),x(2),x(3),x(4), @expansion{} x(2),x(3),x(4),x(5) ideal j=minor(m,2); j; @expansion{} j[1]=-x(4)^2+x(3)*x(5) @expansion{} j[2]=-x(3)*x(4)+x(2)*x(5) @expansion{} j[3]=-x(2)*x(4)+x(1)*x(5) @expansion{} j[4]=x(3)^2-x(2)*x(4) @expansion{} j[5]=x(2)*x(3)-x(1)*x(4) @expansion{} j[6]=-x(2)^2+x(1)*x(3) minor(m,2,std(ideal(x(1)))); @expansion{} _[1]=-x(4)^2+x(3)*x(5) @expansion{} _[2]=-x(3)*x(4)+x(2)*x(5) @expansion{} _[3]=-x(2)*x(4) @expansion{} _[4]=x(3)^2-x(2)*x(4) @expansion{} _[5]=x(2)*x(3) @expansion{} _[6]=-x(2)^2 @c end example minor reference.doc:3475 @end smallexample @end table @c inserted refs from reference.doc:3485 @ifinfo @menu See * det:: @end menu @end ifinfo @iftex See @ref{det}. @end iftex @c end inserted refs from reference.doc:3485 @c --------------------------------------- @node minres, modulo, minor, Functions @subsection minres @cindex minres @table @code @item @strong{Syntax:} @code{minres (} list_expression @code{)} @item @strong{Type:} list @item @strong{Syntax:} @code{minres (} resolution_expression @code{)} @item @strong{Type:} resolution @item @strong{Purpose:} minimizes a free resolution of an ideal or module given by the list_expression, resp.@: resolution_expression. @item @strong{Example:} @smallexample @c reused example minres reference.doc:3507 ring r1=32003,(x,y),dp; ideal i=x5+xy4,x3+x2y+xy2+y3; resolution rs=lres(i,0); rs; @expansion{} 1 2 1 @expansion{} r1 <-- r1 <-- r1 @expansion{} @expansion{} 0 1 2 @expansion{} resolution not minimized yet @expansion{} list(rs); @expansion{} [1]: @expansion{} _[1]=x3+x2y+xy2+y3 @expansion{} _[2]=xy4 @expansion{} _[3]=y7 @expansion{} [2]: @expansion{} _[1]=-y4*gen(1)+x2*gen(2)+xy*gen(2)+y2*gen(2)+gen(3) @expansion{} _[2]=-y3*gen(2)+x*gen(3) minres(rs); @expansion{} 1 2 1 @expansion{} r1 <-- r1 <-- r1 @expansion{} @expansion{} 0 1 2 @expansion{} list(rs); @expansion{} [1]: @expansion{} _[1]=x3+x2y+xy2+y3 @expansion{} _[2]=xy4 @expansion{} [2]: @expansion{} _[1]=xy4*gen(1)-x3*gen(2)-x2y*gen(2)-xy2*gen(2)-y3*gen(2) @c end example minres reference.doc:3507 @end smallexample @end table @c inserted refs from reference.doc:3518 @ifinfo @menu See * mres:: * res:: * sres:: @end menu @end ifinfo @iftex See @ref{mres}; @ref{res}; @ref{sres}. @end iftex @c end inserted refs from reference.doc:3518 @c -------------------------------------- @node modulo, monitor, minres, Functions @subsection modulo @cindex modulo @table @code @item @strong{Syntax:} @code{modulo (} ideal_expression@code{,} ideal_expression @code{)} @*@code{modulo (} module_expression@code{,} module_expression @code{)} @item @strong{Type:} module @item @strong{Purpose:} @code{modulo(h1,h2)} @ifinfo represents h1/(h1 intersect h2) (isomorphic to (h1+h2)/h2) @end ifinfo @tex represents $h_1/(h_1 \cap h_2) \cong (h_1+h_2)/h_2$ @end tex where @tex $h_1$ and $h_2$ @end tex @ifinfo h1 and h2 @end ifinfo are considered as submodules of the same free module @tex $R^l$ @end tex @ifinfo R^l @end ifinfo (l=1 for ideals). Let @tex $H_1$, resp.\ $H_2$, @end tex @ifinfo H1 and H2 be the matrices of size l x k, resp.@: l x m, having the columns of @end ifinfo @tex be the matrices of size $l \times k$, resp.\ $l \times m$, having the generators of $h_1$, resp.\ $h_2$, @end tex @ifinfo h1, resp.@: h2, @end ifinfo as columns. @c @* @c @tex @c $R^k \buildrel{H_1}\over{\rightarrow} R^l @c \buildrel{H_2}\over{\leftarrow} R^m$ @c @end tex @c @ifinfo @c @smallexample @c H1 H2 @c R^k ----> R^l <---- R^m @c @end smallexample @c @end ifinfo Then @tex $h_1/(h_1 \cap h_2) \cong R^k / ker(\overline{H_1})$ @end tex @ifinfo @format __ h1/(h1 intersect h2) is isomorphic to R^k/ker(H1) @* @end format @end ifinfo where @tex $\overline{H_1}: R^k \rightarrow R^l/Im(H_2)=R^l/h_2$ is the induced map. @end tex @ifinfo @format __ H1: R^k ----> R^l/Im(H2)=R^l/h2 is the induced map. @* @end format @end ifinfo @*@code{modulo(h1,h2)} returns generators of the kernel of this induced map. @item @strong{Example:} @smallexample @c reused example modulo reference.doc:3612 ring r; ideal h1=x,y,z; ideal h2=x; module m=modulo(h1,h2); print(m); @expansion{} 1,0, 0,0, @expansion{} 0,-z,x,0, @expansion{} 0,y, 0,x @c end example modulo reference.doc:3612 @end smallexample @end table @c inserted refs from reference.doc:3621 @ifinfo @menu See * syz:: @end menu @end ifinfo @iftex See @ref{syz}. @end iftex @c end inserted refs from reference.doc:3621 @c --------------------------------------- @node monitor, mpresmat, modulo, Functions @subsection monitor @cindex monitor @table @code @item @strong{Syntax:} @code{monitor (} string_expression @code{)} @*@code{monitor (} string_expression@code{,} string_expression @code{)} @item @strong{Type:} none @item @strong{Purpose:} controls the recording of all user input and/or program output into a file. The second argument describes what to log: @code{"i"} means input, @code{"o"} means output, @code{"io"} for both. @*The default for the second argument is @code{"i"}. @*Each @code{monitor} command closes a previous monitor file and opens the file given by the first string expression. @*@code{monitor ("")} turns off recording. @item @strong{Example:} @smallexample monitor("doe.tmp","io"); // log input and output to doe.tmp ring r; poly f=x+y+z; int i=7; ideal I=f,x,y; monitor(""); // stop logging @end smallexample @end table @c --------------------------------------- @node mpresmat, mres, monitor, Functions @subsection mpresmat @cindex mpresmat @table @code @item @strong{Syntax:} @code{mpresmat (} ideal_expression@code{,} int_expression @code{)} @item @strong{Type:} module @item @strong{Purpose:} computes the multipolynomial resultant matrix of the input system. Uses the sparse resultant matrix method of Gelfand, Kapranov and Zelevinsky (second parameter = 0) or the resultant matrix method of Macaulay (second parameter = 1). @item @strong{Note:} When using the resultant matrix method of Macaulay the input system must be homogeneous. The number of elements in the input system must be the number of variables in the basering plus one. @item @strong{Example:} @smallexample @c reused example mpresmat reference.doc:3675 ring rsq=(0,s,t,u),(x,y),lp; ideal i=s+tx+uy,x2+y2-10,x2+xy+2y2-16; module m=mpresmat(i,0); print(m); @expansion{} -16,0, -10,0, (s),0, 0, 0, 0, 0, @expansion{} 0, -16,0, -10,(u),(s),0, 0, 0, 0, @expansion{} 2, 0, 1, 0, 0, (u),0, 0, 0, 0, @expansion{} 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, @expansion{} 0, 0, 0, 0, (t),0, -10,(s),0, -16, @expansion{} 1, 0, 0, 0, 0, (t),0, (u),(s),0, @expansion{} 0, 1, 0, 0, 0, 0, 1, 0, (u),2, @expansion{} 1, 0, 1, 0, 0, 0, 0, (t),0, 0, @expansion{} 0, 1, 0, 1, 0, 0, 0, 0, (t),1, @expansion{} 0, 0, 0, 0, 0, 0, 1, 0, 0, 1 @c end example mpresmat reference.doc:3675 @end smallexample @end table @c inserted refs from reference.doc:3683 @ifinfo @menu See * uressolve:: @end menu @end ifinfo @iftex See @ref{uressolve}. @end iftex @c end inserted refs from reference.doc:3683 @c --------------------------------------- @node mres, mstd, mpresmat, Functions @subsection mres @cindex mres @table @code @item @strong{Syntax:} @code{mres (} ideal_expression@code{,} int_expression @code{)} @*@code{mres (} module_expression@code{,} int_expression @code{)} @item @strong{Type:} resolution @item @strong{Purpose:} computes a minimal free resolution of an ideal or module M with the standard basis method. More precisely, let A=@code{matrix}(M), then @code{mres} computes a free resolution of @ifinfo coker(A)=F0/M @format A2 A1 ... ----> F2 ----> F1 ----> F0 --> F0/M --> 0. @end format @end ifinfo @tex $coker(A)=F_0/M$ $$...\longrightarrow F_2 \buildrel{A_2}\over{\longrightarrow} F_1 \buildrel{A_1}\over{\longrightarrow} F_0\longrightarrow F_0/M \longrightarrow 0,$$ @end tex where the columns of the matrix @tex $A_1$ @end tex @ifinfo A1 @end ifinfo are a minimal set of generators of M if the basering is local or if M is homogeneous. If the int expression k is not zero then the computation stops after k steps and returns a list of modules @tex $M_i={\tt module}(A_i)$, i=1...k. @end tex @ifinfo Mi=module(Ai), i=1...k. @end ifinfo @*@code{mres(M,0)} returns a resolution consisting of at most n+2 modules, where n is the number of variables of the basering. Let @code{list L=mres(M,0);} then @code{L[1]} consists of a minimal set of generators of the input, @code{L[2]} consists of a minimal set of generators for the first syzygy module of @code{L[1]}, etc., until @code{L[p+1]}, such that @ifinfo L[i]<>0 for i<=p, @end ifinfo @tex ${\tt L[i]}\neq 0$ for $i \le p$, @end tex but @code{L[p+1]}, the first syzygy module of @code{L[p]}, is 0 (if the basering is not a qring). @item @strong{Note:} Accessing single elements of a resolution may require that some partial computations have to be finished and may therefore take some time. @item @strong{Example:} @smallexample @c reused example mres reference.doc:3750 ring r=31991,(t,x,y,z,w),ls; ideal M=t2x2+tx2y+x2yz,t2y2+ty2z+y2zw, t2z2+tz2w+xz2w,t2w2+txw2+xyw2; resolution L=mres(M,0); L; @expansion{} 1 4 15 18 7 1 @expansion{} r <-- r <-- r <-- r <-- r <-- r @expansion{} @expansion{} 0 1 2 3 4 5 @expansion{} // projective dimension of M is 5 @c end example mres reference.doc:3750 @end smallexample @end table @c inserted refs from reference.doc:3760 @ifinfo @menu See * hres:: * ideal:: * lres:: * module:: * res:: * sres:: @end menu @end ifinfo @iftex See @ref{hres}; @ref{ideal}; @ref{lres}; @ref{module}; @ref{res}; @ref{sres}. @end iftex @c end inserted refs from reference.doc:3760 @c --------------------------------------- @node mstd, mult, mres, Functions @subsection mstd @cindex mstd @table @code @item @strong{Syntax:} @code{mstd (} ideal_expression @code{)} @*@code{mstd (} module_expression @code{)} @item @strong{Type:} list @item @strong{Purpose:} returns a list whose first entry is a standard basis for the ideal, resp.@: module. If the monomial ordering is global, then the second entry is both a generating set for the ideal, resp.@: module, and a subset of the standard basis. If, additionally, the input is homogeneous then the second entry is a minimal generating set for the ideal, resp.@: module. @item @strong{Example:} @smallexample @c reused example mstd reference.doc:3788 ring r=0,(x,y,z,t),dp; poly f=x3+y4+z6+xyz; ideal j=jacob(f),f; j=homog(j,t);j; @expansion{} j[1]=3x2+yz @expansion{} j[2]=4y3+xzt @expansion{} j[3]=6z5+xyt3 @expansion{} j[4]=0 @expansion{} j[5]=z6+y4t2+x3t3+xyzt3 mstd(j); @expansion{} [1]: @expansion{} _[1]=3x2+yz @expansion{} _[2]=4y3+xzt @expansion{} _[3]=6z5+xyt3 @expansion{} _[4]=xyzt3 @expansion{} _[5]=y2z2t3 @expansion{} _[6]=yz3t4 @expansion{} _[7]=xz3t4 @expansion{} _[8]=yz2t7 @expansion{} _[9]=xz2t7 @expansion{} _[10]=y2zt7 @expansion{} _[11]=xy2t7 @expansion{} [2]: @expansion{} _[1]=3x2+yz @expansion{} _[2]=4y3+xzt @expansion{} _[3]=6z5+xyt3 @expansion{} _[4]=xyzt3 @c end example mstd reference.doc:3788 @end smallexample @end table @c inserted refs from reference.doc:3797 @ifinfo @menu See * ideal:: * minbase:: * module:: * std:: @end menu @end ifinfo @iftex See @ref{ideal}; @ref{minbase}; @ref{module}; @ref{std}. @end iftex @c end inserted refs from reference.doc:3797 @c --------------------------------------- @node mult, nameof, mstd, Functions @subsection mult @cindex mult @table @code @item @strong{Syntax:} @code{mult (} ideal_expression @code{)} @*@code{mult (} module_expression @code{)} @item @strong{Type:} int @item @strong{Purpose:} computes the degree of the monomial ideal, resp.@: module, generated by the leading monomials of the input. @*If the input is a standard basis of a homogeneous ideal then it returns the degree of this ideal. @*If the input is a standard basis of an ideal in a (local) ring with respect to a local degree ordering then it returns the multiplicity of the ideal (in the sense of Samuel, with respect to the maximal ideal). @item @strong{Example:} @smallexample @c reused example mult reference.doc:3825 ring r=32003,(x,y),ds; poly f=(x3+y5)^2+x2y7; ideal i=std(jacob(f)); mult(i); @expansion{} 46 mult(std(f)); @expansion{} 6 @c end example mult reference.doc:3825 @end smallexample @end table @c inserted refs from reference.doc:3834 @ifinfo @menu See * degree:: * dim:: * ideal:: * std:: * vdim:: @end menu @end ifinfo @iftex See @ref{degree}; @ref{dim}; @ref{ideal}; @ref{std}; @ref{vdim}. @end iftex @c end inserted refs from reference.doc:3834 @c --------------------------------------- @node nameof, names, mult, Functions @subsection nameof @cindex nameof @table @code @item @strong{Syntax:} @code{nameof (} expression @code{)} @item @strong{Type:} string @item @strong{Purpose:} returns the name of an expression as string. @item @strong{Example:} @smallexample @c reused example nameof reference.doc:3855 int i=9; string s=nameof(i); s; @expansion{} i nameof(s); @expansion{} s nameof(i+1); //returns the empty string: @expansion{} nameof(basering); @expansion{} basering basering; @expansion{} ? `basering` is undefined @expansion{} ? error occurred in line 7: ` basering;` ring r; nameof(basering); @expansion{} r @c end example nameof reference.doc:3855 @end smallexample @end table @c inserted refs from reference.doc:3868 @ifinfo @menu See * names:: * reservedName:: * typeof:: @end menu @end ifinfo @iftex See @ref{names}; @ref{reservedName}; @ref{typeof}. @end iftex @c end inserted refs from reference.doc:3868 @c --------------------------------------- @node names, ncols, nameof, Functions @subsection names @cindex names @table @code @item @strong{Syntax:} @code{names ( )} @*@code{names (} ring_name @code{)} @ifset namespaces @*@code{names (} package_name @code{)} @end ifset @item @strong{Type:} list of strings @item @strong{Purpose:} returns the names of all user-defined variables which are ring independent (this includes the names of procedures) or, in the second case, which belong to the given ring. @ifset namespaces package_name can be @code{Current}, @code{Up}, @code{Top} or any other identifier of type package. @item @strong{Example:} @smallexample @c reused example names reference.doc:3897 int i=9; ring r; poly f; package p; int p::j; @expansion{} ? package is not supported in this version @expansion{} ? object to declare is not a name @expansion{} ? error occurred in line 5: ` int p::j;` @expansion{} ? wrong type declaration. type 'help int;' ring p::q; @expansion{} ? package is not supported in this version @expansion{} ? error occurred in line 6: ` ring p::q;` @expansion{} ? wrong type declaration. type 'help ring;' poly g; setring r; names(); @expansion{} [1]: @expansion{} p @expansion{} [2]: @expansion{} r @expansion{} [3]: @expansion{} i @expansion{} [4]: @expansion{} fprintf @expansion{} [5]: @expansion{} printf @expansion{} [6]: @expansion{} sprintf @expansion{} [7]: @expansion{} intersect1 @expansion{} [8]: @expansion{} quotient4 @expansion{} [9]: @expansion{} quotient5 @expansion{} [10]: @expansion{} quotient3 @expansion{} [11]: @expansion{} quotient2 @expansion{} [12]: @expansion{} quotient1 @expansion{} [13]: @expansion{} quotient0 @expansion{} [14]: @expansion{} quot1 @expansion{} [15]: @expansion{} quot @expansion{} [16]: @expansion{} res @expansion{} [17]: @expansion{} groebner @expansion{} [18]: @expansion{} stdhilb @expansion{} [19]: @expansion{} stdfglm @expansion{} [20]: @expansion{} LIB names(r); @expansion{} [1]: @expansion{} g @expansion{} [2]: @expansion{} f names(p); @expansion{} empty list names(p::q); @expansion{} ? package is not supported in this version @expansion{} ? error occurred in line 12: ` names(p::q);` @c end example names reference.doc:3897 @end smallexample @end ifset @ifclear namespaces @item @strong{Example:} @smallexample @c reused example names_1 reference.doc:3916 int i=9; ring r; poly f; poly g; setring r; names(); @expansion{} [1]: @expansion{} r @expansion{} [2]: @expansion{} i @expansion{} [3]: @expansion{} fprintf @expansion{} [4]: @expansion{} printf @expansion{} [5]: @expansion{} sprintf @expansion{} [6]: @expansion{} intersect1 @expansion{} [7]: @expansion{} quotient4 @expansion{} [8]: @expansion{} quotient5 @expansion{} [9]: @expansion{} quotient3 @expansion{} [10]: @expansion{} quotient2 @expansion{} [11]: @expansion{} quotient1 @expansion{} [12]: @expansion{} quotient0 @expansion{} [13]: @expansion{} quot1 @expansion{} [14]: @expansion{} quot @expansion{} [15]: @expansion{} res @expansion{} [16]: @expansion{} groebner @expansion{} [17]: @expansion{} stdhilb @expansion{} [18]: @expansion{} stdfglm @expansion{} [19]: @expansion{} LIB names(r); @expansion{} [1]: @expansion{} g @expansion{} [2]: @expansion{} f @c end example names_1 reference.doc:3916 @end smallexample @end ifclear @end table @c inserted refs from reference.doc:3928 @ifinfo @menu See * nameof:: * reservedName:: @end menu @end ifinfo @iftex See @ref{nameof}; @ref{reservedName}. @end iftex @c end inserted refs from reference.doc:3928 @c --------------------------------------- @node ncols, npars, names, Functions @subsection ncols @cindex ncols @table @code @item @strong{Syntax:} @code{ncols (} matrix_expression @code{)} @*@code{ncols (} intmat_expression @code{)} @*@code{ncols (} ideal_expression @code{)} @item @strong{Type:} int @item @strong{Purpose:} returns the number of columns of a matrix or an intmat or the number of given generators of the ideal, including zeros. @item @strong{Note:} @code{size(}ideal@code{)} counts the number of generators which are different from zero. (Use @code{nrows} to get the number of rows of a given matrix or intmat.) @item @strong{Example:} @smallexample @c reused example ncols reference.doc:3953 ring r; matrix m[5][6]; ncols(m); @expansion{} 6 ideal i=x,0,y; ncols(i); @expansion{} 3 size(i); @expansion{} 2 @c end example ncols reference.doc:3953 @end smallexample @end table @c inserted refs from reference.doc:3963 @ifinfo @menu See * matrix:: * nrows:: * size:: @end menu @end ifinfo @iftex See @ref{matrix}; @ref{nrows}; @ref{size}. @end iftex @c end inserted refs from reference.doc:3963 @c --------------------------------------- @node npars, nres, ncols, Functions @subsection npars @cindex npars @table @code @item @strong{Syntax:} @code{npars (} ring_name @code{)} @item @strong{Type:} int @item @strong{Purpose:} returns the number of parameters of a ring. @item @strong{Example:} @smallexample @c reused example npars reference.doc:3982 ring r=(23,t,v),(x,a(1..7)),lp; // the parameters are t,v npars(r); @expansion{} 2 @c end example npars reference.doc:3982 @end smallexample @end table @c inserted refs from reference.doc:3989 @ifinfo @menu See * par:: * parstr:: * ring:: @end menu @end ifinfo @iftex See @ref{par}; @ref{parstr}; @ref{ring}. @end iftex @c end inserted refs from reference.doc:3989 @c --------------------------------------- @node nres, nrows, npars, Functions @subsection nres @cindex nres @table @code @item @strong{Syntax:} @code{nres (} ideal_expression@code{,} int_expression @code{)} @*@code{nres (} module_expression@code{,} int_expression @code{)} @item @strong{Type:} resolution @item @strong{Purpose:} computes a free resolution of an ideal or module M which is minimized from the second module on (by the standard basis method). More precisely, let @tex $A_1$=matrix(M), @end tex @ifinfo A1=matrix(M), @end ifinfo then @code{nres} computes a free resolution of @ifinfo coker(A1)=F0/M @format A2 A1 ... ----> F2 ----> F1 ----> F0 --> F0/M --> 0. @end format @end ifinfo @tex $coker(A_1)=F_0/M$ $$...\longrightarrow F_2 \buildrel{A_2}\over{\longrightarrow} F_1 \buildrel{A_1}\over{\longrightarrow} F_0\longrightarrow F_0/M\longrightarrow 0,$$ @end tex @*where the columns of the matrix @tex $A_1$ @end tex @ifinfo A1 @end ifinfo are the given set of generators of M. If the int expression k is not zero then the computation stops after k steps and returns a list of modules @tex $M_i={\tt module}(A_i)$, i=1..k. @end tex @ifinfo Mi=module(Ai), i=1..k. @end ifinfo @*@code{nres(M,0)} returns a list of n modules where n is the number of variables of the basering. Let @code{list L=nres(M,0);} then @code{L[1]=M} is identical to the input, @code{L[2]} is a minimal set of generators for the first syzygy module of @code{L[1]}, etc. @ifinfo (L[i]=M_i @end ifinfo @tex (${\tt L[i]}=M_i$ @end tex in the notations from above). @item @strong{Example:} @smallexample @c reused example nres reference.doc:4058 ring r=31991,(t,x,y,z,w),ls; ideal M=t2x2+tx2y+x2yz,t2y2+ty2z+y2zw, t2z2+tz2w+xz2w,t2w2+txw2+xyw2; resolution L=nres(M,0); L; @expansion{} 1 4 15 18 7 1 @expansion{} r <-- r <-- r <-- r <-- r <-- r @expansion{} @expansion{} 0 1 2 3 4 5 @expansion{} resolution not minimized yet @expansion{} @c end example nres reference.doc:4058 @end smallexample @end table @c inserted refs from reference.doc:4067 @ifinfo @menu See * hres:: * ideal:: * lres:: * module:: * mres:: * res:: * resolution:: * sres:: @end menu @end ifinfo @iftex See @ref{hres}; @ref{ideal}; @ref{lres}; @ref{module}; @ref{mres}; @ref{res}; @ref{resolution}; @ref{sres}. @end iftex @c end inserted refs from reference.doc:4067 @c --------------------------------------- @node nrows, nvars, nres, Functions @subsection nrows @cindex nrows @table @code @item @strong{Syntax:} @code{nrows (} matrix_expression @code{)} @*@code{nrows (} intmat_expression @code{)} @*@code{nrows (} intvec_expression @code{)} @*@code{nrows (} module_expression @code{)} @*@code{nrows (} vector_expression @code{)} @item @strong{Type:} int @item @strong{Purpose:} returns the number of rows of a matrix, an intmat or an intvec, resp.@: the minimal rank of a free module in which the given module or vector lives (the index of the last non-zero component). @item @strong{Note:} Use @code{ncols} to get the number of columns of a given matrix or intmat. @item @strong{Example:} @smallexample @c reused example nrows reference.doc:4099 ring R; matrix M[2][3]; nrows(M); @expansion{} 2 nrows(freemodule(4)); @expansion{} 4 module m=[0,0,1]; nrows(m); @expansion{} 3 nrows([0,x,0]); @expansion{} 2 @c end example nrows reference.doc:4099 @end smallexample @end table @c inserted refs from reference.doc:4110 @ifinfo @menu See * gen:: * matrix:: * module:: * ncols:: * vector:: @end menu @end ifinfo @iftex See @ref{gen}; @ref{matrix}; @ref{module}; @ref{ncols}; @ref{vector}. @end iftex @c end inserted refs from reference.doc:4110 @c --------------------------------------- @node nvars, open, nrows, Functions @subsection nvars @cindex nvars @table @code @item @strong{Syntax:} @code{nvars (} ring_name @code{)} @item @strong{Type:} int @item @strong{Purpose:} returns the number of variables of a ring. @item @strong{Example:} @smallexample @c reused example nvars reference.doc:4131 ring r=(23,t,v),(x,a(1..7)),ls; // the variables are x,a(1),...,a(7) nvars(r); @expansion{} 8 @c end example nvars reference.doc:4131 @end smallexample @end table @c inserted refs from reference.doc:4138 @ifinfo @menu See * npars:: * ring:: * var:: * varstr:: @end menu @end ifinfo @iftex See @ref{npars}; @ref{ring}; @ref{var}; @ref{varstr}. @end iftex @c end inserted refs from reference.doc:4138 @c --------------------------------------- @node open, option, nvars, Functions @subsection open @cindex open @table @code @item @strong{Syntax:} @code{open (} link_expression @code{)} @item @strong{Type:} none @item @strong{Purpose:} opens a link. @item @strong{Example:} @smallexample link l="MPtcp:launch"; open(l); // start SINGULAR "server" on localhost in batchmode close(l); // shut down SINGULAR server @end smallexample @end table @c inserted refs from reference.doc:4163 @ifinfo @menu See * close:: * link:: @end menu @end ifinfo @iftex See @ref{close}; @ref{link}. @end iftex @c end inserted refs from reference.doc:4163 @c --------------------------------------- @node option, ord, open, Functions @subsection option @cindex option @table @code @item @strong{Syntax:} @code{option ()} @item @strong{Type:} string @item @strong{Purpose:} lists all defined options. @* @item @strong{Syntax:} @code{option (} option_name @code{)} @item @strong{Type:} none @item @strong{Purpose:} sets an option. @item @strong{Note:} To disable an option, use the prefix @code{no}. @* @item @strong{Syntax:} @code{option ( get )} @item @strong{Type:} intvec @item @strong{Purpose:} dumps the state of all options to an intvec. @* @item @strong{Syntax:} @code{option ( set,} intvec_expression @code{)} @item @strong{Type:} none @item @strong{Purpose:} restores the state of all options from an intvec (produced by @code{option(get)}). @sp 1 @item @strong{Values:} The following options are used to manipulate the behavior of computations and act like boolean switches. Use the prefix @code{no} to disable an option. Notice that some options are ring dependent and reset to their default values on a change of the current basering. @table @asis @item @code{none} @c --------- @cindex none, option turns off all options (including the @code{prompt} option). @c --------- @item @code{returnSB} @cindex returnSB, option the functions @code{syz}, @code{intersect}, @code{quotient}, @code{modulo} return a standard base instead of a generating set if @code{returnSB} is set. This option should not be used for @code{lift}. @c --------- @item @code{fastHC} @cindex fastHC, option tries to the find the highest corner of the staircase (HC) as fast as possible during a standard basis computation (only used for local orderings). @c --------- @c @item @code{interrupt} @c allows fast interruption of standard basis computation @c --------- @item @code{intStrategy} @cindex intStrategy, option avoids division of coefficients during standard basis computations. This option is ring dependent. By default, it is set for rings with characteristic 0 and not set for all other rings. @c --------- @item @code{oldStd} @cindex oldStd, option uses a more lazy approach in std computations, which was used in Singular version before 2-0 (and which may lead to faster or slower computations, depending on the example) @item @code{minRes} @cindex minRes, option special (additional) minimizing during computations (@code{res}, @code{mres}), @*assumes homogeneous case and degree-compatible ordering. @c --------- @item @code{notRegularity} @cindex notRegularity, option disables the regularity bound for @code{res} and @code{mres} (see @ref{regularity}). @c --------- @item @code{notSugar} @cindex notSugar, option disables the sugar strategy during standard basis computation. @anchor{option(prot)} @c --------- @item @code{notBuckets} @cindex notBuckets, option disables the bucket representation of polynomials during standard basis computations. This option usually decreases the memory usage but increases the computation time. It should only be set for memory-critical standard basis computations. @c --------- @item @code{prot} @cindex prot, option @cindex protocoll of computations @cindex progress watch shows protocol information indicating the progress during the following computations: @code{facstd}, @code{fglm}, @code{groebner}, @code{lres}, @code{mres}, @code{minres}, @code{mstd}, @code{res}, @code{sres}, @code{std}, @code{stdfglm}, @code{stdhilb}, @code{syz}. See below for more details. @c --------- @item @code{redSB} @cindex redSB, option @cindex reduced standard basis computes a reduced standard basis in any standard basis computation. @c --------- @item @code{redTail} @cindex redTail, option reduction of the tails of polynomials during standard basis computations. This option is ring dependent. By default, it is set for rings with global degree orderings and not set for all other rings. @c --------- @item @code{redThrough} @cindex redThrough, option for inhomogeneous input, polynomial reductions during standard basis computations are never postponed, but always finished through. This option is ring dependent. By default, it is set for rings with global degree orderings and not set for all other rings. @c --------- @item @code{sugarCrit} @cindex sugarCrit, option uses criteria similar to the homogeneous case to keep more useless pairs. @c --------- @item @code{weightM} @cindex weightM, option automatically computes suitable weights for the weighted ecart and the weighted sugar method. @end table @* The following options, which also control computations, are special, since they are not manipulated by the @code{option} command but by a direct assignment of a value. Reset the option by assigning the value 0; the command @code{option(none)} will not reset them! If there is a non-zero value assigned, the command @code{option()} prints the option. @table @asis @item @code{multBound} a multiplicity bound is set (see @ref{multBound}). @item @code{degBound} a degree bound is set (see @ref{degBound}). @end table @* The last set of options controls the output of @sc{Singular}: @table @asis @item @code{Imap} @cindex Imap, option shows the mapping of variables with the fetch and imap commands. @item @code{loadLib} @cindex loadLib, option shows loading of libraries (set by default). @item @code{debugLib} @cindex debugLib, option warns about syntax errors during loading of libraries. @item @code{loadProc} @cindex loadProc, option shows loading of procedures from libraries. @item @code{mem} @cindex mem, option shows memory usage in square brackets (see @ref{memory}). @item @code{prompt} @cindex prompt, option shows prompt (@code{>}, resp.@: @code{.}) if ready for input (default). @item @code{reading} @cindex reading, option shows the number of characters read from a file. @item @code{redefine} @cindex redefine, option warns about variable redefinitions (set by default). @item @code{usage} @cindex usage, option shows correct usage in error messages (set by default). @end table @item @strong{Example:} @smallexample @c reused example option reference.doc:4356 option(prot); option(); @expansion{} //options: prot redefine usage prompt option(notSugar); option(); @expansion{} //options: prot notSugar redefine usage prompt option(noprot); option(); @expansion{} //options: notSugar redefine usage prompt option(none); option(); @expansion{} //options: none ring r=0,x,dp; degBound=22; option(); @expansion{} //options: degBound redTail redThrough intStrategy intvec i=option(get); option(none); option(set,i); option(); @expansion{} //options: degBound redTail redThrough intStrategy @c end example option reference.doc:4356 @end smallexample @end table @*The output reported on @code{option(prot)} has the following meaning: @multitable @columnfractions .01 .14 .11 .65 @item @tab @code{facstd} @tab @code{F} @tab found a new factor @item @tab @tab @tab all other characters: like the output of @code{std} and @code{reduce} @item @tab @tab @tab @item @tab @code{fglm} @tab @code{.} @tab basis monomial found @item @tab @tab @code{+} @tab edge monomial found @item @tab @tab @code{-} @tab border monomial found @item @tab @tab @tab @item @tab @code{groebner} @tab @tab all characters: like the output of @code{std} @item @tab @tab @tab @item @tab @code{lres} @tab @code{.} @tab minimal syzygy found @item @tab @tab @code{n} @tab slanted degree, i.e., row of Betti matrix @item @tab @tab @code{(mn)} @tab calculate in module n @item @tab @tab @code{g} @tab pair found giving reductum and syzygy @item @tab @tab @tab @item @tab @code{mres} @tab @code{[d]} @tab computations of the d-th syzygy module @item @tab @tab @tab all other characters: like the output of @code{std} @item @tab @tab @tab @item @tab @code{minres} @tab @code{[d]} @tab minimizing of the d-th syzygy module @item @tab @tab @tab @item @tab @code{mstd} @tab @tab all characters: like the output of @code{std} @item @tab @tab @tab @item @tab @code{reduce} @tab @code{r} @tab reduced a leading term @item @tab @tab @code{t} @tab reduced a non-leading term @item @tab @code{res} @tab @code{[d]} @tab computations of the d-th syzygy module @item @tab @tab @tab all other characters: like the output of @code{std} @item @tab @tab @tab @item @tab @code{sres} @tab @code{.} @tab syzygy found @item @tab @tab @code{(n)} @tab n elements remaining @item @tab @tab @code{[n]} @tab finished module n @item @tab @tab @tab @item @tab @code{std} @tab @code{[m:n]} @tab internal ring change to poly representation with exponent bound m and n words in exponent vector @item @tab @tab @code{s} @tab found a new element of the standard basis @item @tab @tab @code{-} @tab reduced a pair/S-polynomial to 0 @item @tab @tab @code{.} @tab postponed a reduction of a pair/S-polynomial @item @tab @tab @code{h} @tab used Hilbert series criterion @item @tab @tab @code{H(d)} @tab found a 'highest corner' of degree d, no need to consider higher degrees @item @tab @tab @code{(n)} @tab n critical pairs are still to be reduced @item @tab @tab @code{(S:n)} @tab doing complete reduction of n elements @item @tab @tab @code{d} @tab the degree of the leading terms is currently d @item @tab @tab @tab @item @tab @code{stdfglm} @tab @tab all characters in first part: like the output of @code{std} @item @tab @tab @tab all characters in second part: like the output of @code{fglm} @item @tab @tab @tab @item @tab @code{stdhilb} @tab @tab all characters: like the output of @code{std} @item @tab @tab @tab @item @tab @code{syz} @tab @tab all characters: like the output of @code{std} @end multitable @c inserted refs from reference.doc:4442 @ifinfo @menu See * degBound:: * multBound:: * std:: @end menu @end ifinfo @iftex See @ref{degBound}; @ref{multBound}; @ref{std}. @end iftex @c end inserted refs from reference.doc:4442 @c --------------------------------------- @node ord, ordstr, option, Functions @subsection ord @cindex ord @table @code @item @strong{Syntax:} @code{ord (} poly_expression @code{)} @*@code{ord (} vector_expression @code{)} @item @strong{Type:} int @item @strong{Purpose:} returns the (weighted) degree of the initial term of a polynomial or a vector; the weights are the weights used for the first block of the ring ordering. @item @strong{Note:} @code{ord(0)} is @code{-1}. @item @strong{Example:} @smallexample @c reused example ord reference.doc:4466 ring r=7,(x,y),wp(2,3); ord(0); @expansion{} -1 poly f=x2+y3; // weight on y is 3 ord(f); @expansion{} 9 ring R=7,(x,y),ws(2,3); poly f=x2+y3; ord(f); @expansion{} 4 vector v=[x2,y]; ord(v); @expansion{} 3 @c end example ord reference.doc:4466 @end smallexample @end table @c inserted refs from reference.doc:4479 @ifinfo @menu See * deg:: * poly:: * vector:: @end menu @end ifinfo @iftex See @ref{deg}; @ref{poly}; @ref{vector}. @end iftex @c end inserted refs from reference.doc:4479 @c --------------------------------------- @node ordstr, par, ord, Functions @subsection ordstr @cindex ordstr @table @code @item @strong{Syntax:} @code{ordstr (} ring_name @code{)} @item @strong{Type:} string @item @strong{Purpose:} returns the description of the monomial ordering of the ring. @item @strong{Example:} @smallexample @c reused example ordstr reference.doc:4498 ring r=7,(x,y),wp(2,3); ordstr(r); @expansion{} wp(2,3),C @c end example ordstr reference.doc:4498 @end smallexample @end table @c inserted refs from reference.doc:4504 @ifinfo @menu See * charstr:: * parstr:: * ring:: * varstr:: @end menu @end ifinfo @iftex See @ref{charstr}; @ref{parstr}; @ref{ring}; @ref{varstr}. @end iftex @c end inserted refs from reference.doc:4504 @c --------------------------------------- @node par, pardeg, ordstr, Functions @subsection par @cindex par @table @code @item @strong{Syntax:} @code{par (} int_expression @code{)} @item @strong{Type:} number @item @strong{Purpose:} @code{par(n);} returns the n-th parameter of the basering. @item @strong{Note:} This command should only be used if the basering has at least one parameter. @item @strong{Example:} @smallexample @c reused example par reference.doc:4526 ring r=(0,a,b,c),(x,y,z),dp; char(r); // char to get the characteristic @expansion{} 0 par(2); // par to get the n-th parameter @expansion{} (b) @c end example par reference.doc:4526 @end smallexample @end table @c inserted refs from reference.doc:4533 @ifinfo @menu See * char:: * npars:: * parstr:: * ring:: * var:: @end menu @end ifinfo @iftex See @ref{char}; @ref{npars}; @ref{parstr}; @ref{ring}; @ref{var}. @end iftex @c end inserted refs from reference.doc:4533 @c --------------------------------------- @node pardeg, parstr, par, Functions @subsection pardeg @cindex pardeg @table @code @item @strong{Syntax:} @code{pardeg (} number_expression @code{)} @item @strong{Type:} int @item @strong{Purpose:} returns the degree of a number considered as a polynomial in the ring parameters. @item @strong{Example:} @smallexample @c reused example pardeg reference.doc:4554 ring r=(0,a,b,c),(x,y,z),dp; pardeg(a^2*b); @expansion{} 3 @c end example pardeg reference.doc:4554 @end smallexample @end table @c inserted refs from reference.doc:4560 @ifinfo @menu See * deg:: * number:: * ring:: * var:: @end menu @end ifinfo @iftex See @ref{deg}; @ref{number}; @ref{ring}; @ref{var}. @end iftex @c end inserted refs from reference.doc:4560 @c --------------------------------------- @node parstr, preimage, pardeg, Functions @subsection parstr @cindex parstr @table @code @item @strong{Syntax:} @code{parstr (} ring_name @code{)} @*@code{parstr (} int_expression @code{)} @*@code{parstr (} ring_name@code{,} int_expression @code{)} @item @strong{Type:} string @item @strong{Purpose:} returns the list of parameters of the ring as a string or the name of the n-th parameter where n is given by the int_expression. @*If the ring_name is omitted, the basering is used, thus @code{parstr(n)} is equivalent to @code{parstr(basering,n)}. @item @strong{Example:} @smallexample @c reused example parstr reference.doc:4585 ring r=(7,a,b,c),(x,y),wp(2,3); parstr(r); @expansion{} a,b,c parstr(2); @expansion{} b parstr(r,3); @expansion{} c @c end example parstr reference.doc:4585 @end smallexample @end table @c inserted refs from reference.doc:4593 @ifinfo @menu See * charstr:: * npars:: * ordstr:: * par:: * ring:: * varstr:: @end menu @end ifinfo @iftex See @ref{charstr}; @ref{npars}; @ref{ordstr}; @ref{par}; @ref{ring}; @ref{varstr}. @end iftex @c end inserted refs from reference.doc:4593 @c --------------------------------------- @node preimage, prime, parstr, Functions @subsection preimage @cindex preimage @cindex kernel @table @code @item @strong{Syntax:} @code{preimage (} ring_name@code{,} map_name@code{,} ideal_name @code{)} @*@code{preimage (} ring_name@code{,} ideal_expression@code{,} ideal_name @code{)} @item @strong{Type:} ideal @item @strong{Purpose:} returns the preimage of an ideal under a given map. @* The second argument has to be a map from the basering to the given ring (or an ideal defining such a map), and the ideal has to be an ideal in the given ring. @item @strong{Note:} To compute the kernel of a map, the preimage of zero has to be determined. Hence there is no special command for computing the kernel of a map in @sc{Singular}. @item @strong{Example:} @smallexample @c reused example preimage reference.doc:4626 ring r1=32003,(x,y,z,w),lp; ring r=32003,(x,y,z),dp; ideal i=x,y,z; ideal i1=x,y; ideal i0=0; map f=r1,i; setring r1; ideal i1=preimage(r,f,i1); i1; @expansion{} i1[1]=w @expansion{} i1[2]=y @expansion{} i1[3]=x // the kernel of f preimage(r,f,i0); @expansion{} _[1]=w @c end example preimage reference.doc:4626 @end smallexample @end table @c inserted refs from reference.doc:4641 @ifinfo @menu See * ideal:: * map:: * ring:: @end menu @end ifinfo @iftex See @ref{ideal}; @ref{map}; @ref{ring}. @end iftex @c end inserted refs from reference.doc:4641 @c --------------------------------------- @node prime, print, preimage, Functions @subsection prime @cindex prime @table @code @item @strong{Syntax:} @code{prime (} int_expression @code{)} @item @strong{Type:} int @item @strong{Purpose:} returns the largest prime less then 32004 smaller or equal to the argument; @*returns 2 for all arguments smaller than 3. @item @strong{Example:} @smallexample @c reused example prime reference.doc:4661 prime(32004); @expansion{} 32003 prime(0); @expansion{} 2 prime(-1); @expansion{} 2 @c end example prime reference.doc:4661 @end smallexample @end table @c inserted refs from reference.doc:4668 @ifinfo @menu See * general_lib:: * int:: @end menu @end ifinfo @iftex See @ref{general_lib}; @ref{int}. @end iftex @c end inserted refs from reference.doc:4668 @c --------------------------------------- @node print, printf, prime, Functions @subsection print @cindex print @table @code @item @strong{Syntax:} @code{print (} expression @code{)} @*@code{print (} expression@code{, "betti" )} @*@code{print (} expression@code{,} format_string @code{)} @item @strong{Type:} none (for the first two calling sequences), resp.@: @*string (for the last calling sequence) @item @strong{Purpose:} The first form prints the expression to the terminal and has no return value. Use the format string @code{%p} to print into a string (see below). @*The second form prints the graded Betti numbers from a matrix. See the description of the format string @code{"betti"} below for more details. @*The last form returns the printed output as a string. The format string determines which format to use to generate the string. The following format strings are supported: @table @code @item "betti" The Betti numbers are printed in a matrix-like format where the entry @tex $d$ in row $i$ and column $j$ @end tex @ifinfo d in row i and column j @end ifinfo is the minimal number of generators in degree @tex $i+j$ of the $j$-th @end tex @ifinfo i+j of the j-th @end ifinfo syzygy module of @tex $R^n/M$ (the 0th and 1st syzygy module of $R^n/M$ is $R^n$ and $M$, resp.). @end tex @ifinfo R^n/M (the 0th and 1st syzygy module of R^n/M are R^n and M, resp.). @end ifinfo @item "%s" returns @code{string(} expression @code{)} @item "%2s" similar to @code{"%s"}, except that newlines are inserted after every comma and at the end @item "%l" similar to @code{"%s"}, except that each object is embraced by its type such that it can be directly used for "cutting and pasting" @item "%2l" similar to @code{"%l"}, except that newlines are inserted after every comma and at the end @item "%;" returns the string equivalent to typing @code{expression;} @item "%t" returns the string equivalent to typing @code{type expression;} @item "%p" returns the string equivalent to typing @code{print(expression);} @item "%b" returns the string equivalent to typing @code{print(expression, "betti");} @end table @item @strong{Example:} @smallexample @c reused example print reference.doc:4742 ring r=0,(x,y,z),dp; module m=[1,y],[0,x+z]; m; @expansion{} m[1]=y*gen(2)+gen(1) @expansion{} m[2]=x*gen(2)+z*gen(2) print(m); // the columns generate m @expansion{} 1,0, @expansion{} y,x+z string s=print(m,"%s"); s; @expansion{} y*gen(2)+gen(1),x*gen(2)+z*gen(2) s=print(m,"%2s"); s; @expansion{} y*gen(2)+gen(1), @expansion{} x*gen(2)+z*gen(2) @expansion{} s=print(m,"%l"); s; @expansion{} module(y*gen(2)+gen(1),x*gen(2)+z*gen(2)) s=print(m,"%;"); s; @expansion{} m[1]=y*gen(2)+gen(1) @expansion{} m[2]=x*gen(2)+z*gen(2) @expansion{} s=print(m,"%t"); s; @expansion{} // m [0] module, rk 2, 2 generator(s) @expansion{} m[1]=y*gen(2)+gen(1) @expansion{} m[2]=x*gen(2)+z*gen(2) s=print(m,"%p"); s; @expansion{} 1,0, @expansion{} y,x+z @expansion{} intmat M=betti(mres(m,0)); print(M,"betti"); @expansion{} 0 1 @expansion{} ------------------ @expansion{} 0: 1 1 @expansion{} ------------------ @expansion{} total: 1 1 list l=r,M; s=print(l,"%s"); s; @expansion{} (0),(x,y,z),(dp(3),C),1,1 s=print(l,"%2s"); s; @expansion{} (0),(x,y,z),(dp(3),C), @expansion{} 1,1 @expansion{} s=print(l,"%l"); s; @expansion{} list("(0),(x,y,z),(dp(3),C)",intmat(intvec(1,1 ),1,2)) @c end example print reference.doc:4742 @end smallexample @end table @c inserted refs from reference.doc:4762 @ifinfo @menu See * Type conversion and casting:: * betti:: * dbprint:: * fprintf:: * printf:: * short:: * sprintf:: * string type cast:: * type:: @end menu @end ifinfo @iftex See @ref{Type conversion and casting}; @ref{betti}; @ref{dbprint}; @ref{fprintf}; @ref{printf}; @ref{short}; @ref{sprintf}; @ref{string type cast}; @ref{type}. @end iftex @c end inserted refs from reference.doc:4762 @c --------------------------------------- @node printf, prune, print, Functions @subsection printf @cindex printf @c start include of docu for standard.lib:printf @c replaced @subsubsection by @sub @c ---content printf--- Procedure from library @code{standard.lib} (@pxref{standard_lib}). @table @asis @item @strong{Syntax:} @code{printf (} string_expression @code{[,} any_expressions@code{] )} @item @strong{Return:} none @item @strong{Purpose:} @code{printf(fmt,...);} performs output formatting. The first argument is a format control string. Additional arguments may be required, depending on the content of the control string. A series of output characters is generated as directed by the control string; these characters are displayed (i.e., printed to standard out). @* The control string @code{fmt} is simply text to be copied, except that the string may contain conversion specifications. @* Do @code{help print;} for a listing of valid conversion specifications. As an addition to the conversions of @code{print}, the @code{%n} and @code{%2} conversion specification does not consume an additional argument, but simply generates a newline character. @item @strong{Note:} If one of the additional arguments is a list, then it should be enclosed once more into a @code{list()} command, since passing a list as an argument flattens the list by one level. @end table @strong{Example:} @smallexample @c reused example printf d2t_singular/standard_lib.doc:450 ring r=0,(x,y,z),dp; module m=[1,y],[0,x+z]; intmat M=betti(mres(m,0)); list l=r,m,M; printf("s:%s,l:%l",1,2); @expansion{} s:1,l:int(2) printf("s:%s",l); @expansion{} s:(0),(x,y,z),(dp(3),C) printf("s:%s",list(l)); @expansion{} s:(0),(x,y,z),(dp(3),C),y*gen(2)+gen(1),x*gen(2)+z*gen(2),1,1 printf("2l:%2l",list(l)); @expansion{} 2l:list("(0),(x,y,z),(dp(3),C)", @expansion{} module(y*gen(2)+gen(1), @expansion{} x*gen(2)+z*gen(2)), @expansion{} intmat(intvec(1,1 ),1,2)) @expansion{} printf("%p",list(l)); @expansion{} [1]: @expansion{} // characteristic : 0 @expansion{} // number of vars : 3 @expansion{} // block 1 : ordering dp @expansion{} // : names x y z @expansion{} // block 2 : ordering C @expansion{} [2]: @expansion{} _[1]=y*gen(2)+gen(1) @expansion{} _[2]=x*gen(2)+z*gen(2) @expansion{} [3]: @expansion{} 1,1 @expansion{} printf("%;",list(l)); @expansion{} [1]: @expansion{} // characteristic : 0 @expansion{} // number of vars : 3 @expansion{} // block 1 : ordering dp @expansion{} // : names x y z @expansion{} // block 2 : ordering C @expansion{} [2]: @expansion{} _[1]=y*gen(2)+gen(1) @expansion{} _[2]=x*gen(2)+z*gen(2) @expansion{} [3]: @expansion{} 1,1 @expansion{} printf("%b",M); @expansion{} 0 1 @expansion{} ------------------ @expansion{} 0: 1 1 @expansion{} ------------------ @expansion{} total: 1 1 @expansion{} @c end example printf d2t_singular/standard_lib.doc:450 @end smallexample @c inserted refs from d2t_singular/standard_lib.doc:464 @ifinfo @menu See also: * fprintf:: * print:: * sprintf:: * string:: @end menu @end ifinfo @iftex @strong{See also:} @ref{fprintf}; @ref{print}; @ref{sprintf}; @ref{string}. @end iftex @c end inserted refs from d2t_singular/standard_lib.doc:464 @c ---end content printf--- @c generated lib proc docu for standard.lib:printf reference.doc:4779 @c end include of docu for standard.lib:printf @c --------------------------------------- @node prune, qhweight, printf, Functions @subsection prune @cindex prune @table @code @item @strong{Syntax:} @code{prune (} module_expression @code{)} @item @strong{Type:} module @item @strong{Purpose:} returns the module minimally embedded in a free module such that the corresponding factor modules are isomorphic. @item @strong{Example:} @smallexample @c reused example prune reference.doc:4795 ring r=0,(x,y,z),dp; module m=gen(1),gen(3),[x,y,0,z],[x+y,0,0,0,1]; print(m); @expansion{} 1,0,x,x+y, @expansion{} 0,0,y,0, @expansion{} 0,1,0,0, @expansion{} 0,0,z,0, @expansion{} 0,0,0,1 print(prune(m)); @expansion{} y, @expansion{} z @c end example prune reference.doc:4795 @end smallexample @end table @c inserted refs from reference.doc:4803 @ifinfo @menu See * module:: @end menu @end ifinfo @iftex See @ref{module}. @end iftex @c end inserted refs from reference.doc:4803 @c --------------------------------------- @node qhweight, quot, prune, Functions @subsection qhweight @cindex qhweight @table @code @item @strong{Syntax:} @code{qhweight (} ideal_expression @code{)} @item @strong{Type:} intvec @item @strong{Purpose:} computes the weight vector of the variables for a quasihomogeneous ideal. If the input is not weighted homogeneous, an intvec of zeros is returned. @item @strong{Example:} @smallexample @c reused example qhweight reference.doc:4821 ring h1=32003,(t,x,y,z),dp; ideal i=x4+y3+z2; qhweight(i); @expansion{} 0,3,4,6 @c end example qhweight reference.doc:4821 @end smallexample @end table @c inserted refs from reference.doc:4828 @ifinfo @menu See * ideal:: * intvec:: * weight:: @end menu @end ifinfo @iftex See @ref{ideal}; @ref{intvec}; @ref{weight}. @end iftex @c end inserted refs from reference.doc:4828 @c --------------------------------------- @node quot, quote, qhweight, Functions @subsection quot @cindex quot @c start include of docu for standard.lib:quot @c replaced @subsubsection by @sub @c ---content quot--- Procedure from library @code{standard.lib} (@pxref{standard_lib}). @table @asis @item @strong{Syntax:} @code{quot (} module_expression@code{,} module_expression @code{)} @*@code{quot (} module_expression@code{,} module_expression@code{,} int_expression @code{)} @*@code{quot (} ideal_expression@code{,} ideal_expression @code{)} @*@code{quot (} ideal_expression@code{,} ideal_expression@code{,} int_expression @code{)} @item @strong{Type:} ideal @item @strong{Syntax:} @code{quot (} module_expression@code{,} ideal_expression @code{)} @item @strong{Type:} module @item @strong{Purpose:} computes the quotient of the 1st and the 2nd argument. If a 3rd argument 'n' is given the n-th method is used (n=1...5). @end table @strong{Example:} @smallexample @c reused example quot d2t_singular/standard_lib.doc:202 ring r=181,(x,y,z),(c,ls); ideal id1=maxideal(4); ideal id2=x2+xyz,y2-z3y,z3+y5xz; option(prot); ideal id3=quotient(id1,id2); @expansion{} [1023:1]4(14)s(13)s(12)s(11)s(10)s(9)s(8)s(7)s(6)s(5)s(4)s(3)s(2)sss @expansion{} product criterion:12 chain criterion:0 @expansion{} @{3@}[1023:3]8(2)s(4)s(5)s9s.s.s.s.s.s @expansion{} product criterion:0 chain criterion:39 id3; @expansion{} id3[1]=z2 @expansion{} id3[2]=yz @expansion{} id3[3]=y2 @expansion{} id3[4]=xz @expansion{} id3[5]=xy @expansion{} id3[6]=x2 ideal id4=quot(id1,id2,1); @expansion{} [1023:2]4(14)s(13)s(12)s(11)s(10)s(9)s(8)s(7)s(6)s(5)s(4)s(3)s(2)sss @expansion{} product criterion:0 chain criterion:0 @expansion{} (S:3)rtrtrt @expansion{} @{1@}[1023:3]4(2)s(4)s(5)s5s.s(3)s(2)sss @expansion{} product criterion:0 chain criterion:39 @expansion{} @{1@}[1023:3]4(5)s(4)s(3)s(2)sss @expansion{} product criterion:0 chain criterion:9 @expansion{} [255:3]3(11)s(10)sss(9)s(10)s(8)ss(7)s(8)s(6)s(7)s4(5)----- @expansion{} product criterion:12 chain criterion:9 @expansion{} @{1@}[1023:3]4(2)sss @expansion{} product criterion:0 chain criterion:12 @expansion{} [255:3]2(8)s(7)s(6)s3(5)ssssss4----- @expansion{} product criterion:15 chain criterion:3 id4; @expansion{} id4[1]=z2 @expansion{} id4[2]=yz @expansion{} id4[3]=xz @expansion{} id4[4]=y2 @expansion{} id4[5]=xy @expansion{} id4[6]=x2 ideal id5=quot(id1,id2,2); @expansion{} [1023:2]4(14)s(13)s(12)s(11)s(10)s(9)s(8)s(7)s(6)s(5)s(4)s(3)s(2)sss @expansion{} product criterion:0 chain criterion:0 @expansion{} (S:3)rtrtrt @expansion{} @{1@}[1023:3]4(2)sss @expansion{} product criterion:0 chain criterion:12 @expansion{} @{1@}[1023:3]4(5)s(4)s(3)s(2)sss @expansion{} product criterion:0 chain criterion:9 @expansion{} [255:3]2(8)s(7)s(6)s3(5)s(4)s(3)s(2)sss @expansion{} product criterion:15 chain criterion:0 id5; @expansion{} id5[1]=z2 @expansion{} id5[2]=yz @expansion{} id5[3]=xz @expansion{} id5[4]=y2 @expansion{} id5[5]=xy @expansion{} id5[6]=x2 @c end example quot d2t_singular/standard_lib.doc:202 @end smallexample @c inserted refs from d2t_singular/standard_lib.doc:215 @ifinfo @menu See also: * quotient:: @end menu @end ifinfo @iftex @strong{See also:} @ref{quotient}. @end iftex @c end inserted refs from d2t_singular/standard_lib.doc:215 @c ---end content quot--- @c generated lib proc docu for standard.lib:quot reference.doc:4839 @c end include of docu for standard.lib:quot @c --------------------------------------- @node quote, quotient, quot, Functions @subsection quote @cindex quote @table @code @item @strong{Syntax:} @code{quote (} expression @code{)} @item @strong{Type:} none @item @strong{Purpose:} prevents expressions from evaluation. Used only in connections with write to MPfile links, prevents evaluation of an expression before sending it to an other @sc{Singular} process. Within a quoted expression, the quote can be "undone" by an @code{eval} (i.e., each eval "undoes" the effect of exactly one quote). @item @strong{Example:} @smallexample @c reused example quote reference.doc:4860 link l="MPfile:w example.mp"; ring r=0,(x,y,z),ds; ideal i=maxideal(3); ideal j=x7,x2,z; option(prot); // compute i+j before writing, but not std write (l, quote(std(eval(i+j)))); close(l); // now read it in again and evaluate: read(l); @expansion{} [1023:1]1(12)s2(11)s3(10)--s(7)s(6)-----7- @expansion{} product criterion:4 chain criterion:0 @expansion{} _[1]=z @expansion{} _[2]=x2 @expansion{} _[3]=xy2 @expansion{} _[4]=y3 close(l); @c end example quote reference.doc:4860 @end smallexample @end table @c inserted refs from reference.doc:4875 @ifinfo @menu See * MPfile links:: * eval:: * write:: @end menu @end ifinfo @iftex See @ref{MPfile links}; @ref{eval}; @ref{write}. @end iftex @c end inserted refs from reference.doc:4875 @c --------------------------------------- @node quotient, random, quote, Functions @subsection quotient @cindex quotient @table @code @item @strong{Syntax:} @code{quotient (} ideal_expression@code{,} ideal_expression @code{)} @*@code{quotient (} module_expression@code{,} module_expression @code{)} @item @strong{Type:} ideal @item @strong{Syntax:} @code{quotient (} module_expression@code{,} ideal_expression @code{)} @item @strong{Type:} module @item @strong{Purpose:} computes the ideal quotient, resp.@: module quotient. Let @code{R} be the basering, @code{I,J} ideals and @code{M} a module in @ifinfo R^n. @end ifinfo @tex ${\tt R}^n$. @end tex Then @itemize @item @code{quotient(I,J)}= @ifinfo @{a in R | aJ in I @} @end ifinfo @tex $\{a \in R \mid aJ \subset I\}$, @end tex @item @code{quotient(M,J)}= @ifinfo @{b in R | bJ in M @}. @end ifinfo @tex $\{b \in R^n \mid bJ \subset M\}$. @end tex @end itemize @item @strong{Example:} @smallexample @c reused example quotient reference.doc:4925 ring r=181,(x,y,z),(c,ls); ideal id1=maxideal(3); ideal id2=x2+xyz,y2-z3y,z3+y5xz; ideal id6=quotient(id1,id2); id6; @expansion{} id6[1]=z @expansion{} id6[2]=y @expansion{} id6[3]=x quotient(id2,id1); @expansion{} _[1]=z2 @expansion{} _[2]=yz @expansion{} _[3]=y2 @expansion{} _[4]=xz @expansion{} _[5]=xy @expansion{} _[6]=x2 module m=x*freemodule(3),y*freemodule(2); ideal id3=x,y; quotient(m,id3); @expansion{} _[1]=[1] @expansion{} _[2]=[0,1] @expansion{} _[3]=[0,0,x] @c end example quotient reference.doc:4925 @end smallexample @end table @c inserted refs from reference.doc:4938 @ifinfo @menu See * fglmquot:: * ideal:: * module:: @end menu @end ifinfo @iftex See @ref{fglmquot}; @ref{ideal}; @ref{module}. @end iftex @c end inserted refs from reference.doc:4938 @c --------------------------------------- @node random, read, quotient, Functions @subsection random @cindex random @table @code @item @strong{Syntax:} @code{random (} int_expression@code{,} int_expression @code{)} @item @strong{Type:} int @item @strong{Purpose:} returns a random integer between the integer given by the first int_expression and the one given by the second int_expression. @* @item @strong{Syntax:} @code{random (} int_expression@code{,} int_expression@code{,} int_expression @code{)} @item @strong{Type:} intmat @item @strong{Purpose:} returns a random intmat where the size is given by the second (number of rows) and third argument (number of columns). The absolute value of the entries of the matrix is smaller than or equal to the integer given as the first argument. @item @strong{Note:} The random generator can be set to a start value with the function @code{system}, resp.@: by a command line option. @item @strong{Example:} @smallexample @c reused example random reference.doc:4971 random(1,1000); @expansion{} 35 random(1,2,3); @expansion{} 0,0,0, @expansion{} 1,1,-1 system("random",210); // start random generator with 210 random(-1000,1000); @expansion{} 707 random(-1000,1000); @expansion{} 284 system("random",210); random(-1000,1000); // the same random values again @expansion{} 707 @c end example random reference.doc:4971 @end smallexample @end table @c inserted refs from reference.doc:4982 @ifinfo @menu See * Command line options:: * int:: * intmat:: * system:: @end menu @end ifinfo @iftex See @ref{Command line options}; @ref{int}; @ref{intmat}; @ref{system}. @end iftex @c end inserted refs from reference.doc:4982 @c --------------------------------------- @node read, reduce, random, Functions @subsection read @cindex read @table @code @item @strong{Syntax:} @code{read (} link_expression @code{)} @*for DBM links: @*@code{read (} link_expression @code{)} @*@code{read (} link_expression@code{,} string_expression @code{)} @item @strong{Type:} any @item @strong{Purpose:} reads data from a link. @*For ASCII links, the content of the entire file is returned as one string. If the ASCII link is the empty string, @code{read} reads from standard input. @*For MP links, one expression is read from the link and returned after evaluation. @*For MPtcp links the @code{read} command blocks as long as there is no data to be read from the link. The @code{status} command can be used to check whether or not there is data to be read. @*For DBM links, a @code{read} with one argument returns the value of the next entry in the data base, and a @code{read} with two arguments returns the value to the key given as the second argument from the data base. @item @strong{Example:} @smallexample @c reused example read reference.doc:5017 ring r=32003,(x,y,z),dp; ideal i=x+y,z3+22y; // write the ideal i to the file save_i write(":w save_i",i); ring r0=0,(x,y,z),Dp; // create an ideal k equal to the content // of the file save_i string s="ideal k="+read("save_i")+";"; execute(s); k; @expansion{} k[1]=x+y @expansion{} k[2]=z3+22y @c end example read reference.doc:5017 @end smallexample @end table @c inserted refs from reference.doc:5031 @ifinfo @menu See * execute:: * getdump:: * link:: * status:: * write:: @end menu @end ifinfo @iftex See @ref{execute}; @ref{getdump}; @ref{link}; @ref{status}; @ref{write}. @end iftex @c end inserted refs from reference.doc:5031 @c --------------------------------------- @node reduce, regularity, read, Functions @subsection reduce @cindex reduce @cindex NF @table @code @item @strong{Syntax:} @code{reduce (} poly_expression@code{,} ideal_expression @code{)} @*@code{reduce (} poly_expression@code{,} ideal_expression@code{,} int_expression @code{)} @*@code{reduce (} poly_expression@code{,} ideal_expression@code{,} poly_expression @code{)} @*@code{reduce (} vector_expression@code{,} ideal_expression @code{)} @*@code{reduce (} vector_expression@code{,} ideal_expression@code{,} int_expression @code{)} @*@code{reduce (} vector_expression@code{,} module_expression @code{)} @*@code{reduce (} vector_expression@code{,} module_expression@code{,} int_expression @code{)} @*@code{reduce (} vector_expression@code{,} module_expression@code{,} poly_expression @code{)} @*@code{reduce (} ideal_expression@code{,} ideal_expression @code{)} @*@code{reduce (} ideal_expression@code{,} ideal_expression@code{,} int_expression @code{)} @*@code{reduce (} ideal_expression@code{,} ideal_expression@code{,} matrix_expression @code{)} @*@code{reduce (} module_expression@code{,} ideal_expression @code{)} @*@code{reduce (} module_expression@code{,} ideal_expression@code{,} int_expression @code{)} @*@code{reduce (} module_expression@code{,} module_expression @code{)} @*@code{reduce (} module_expression@code{,} module_expression@code{,} int_expression @code{)} @*@code{reduce (} module_expression@code{,} module_expression@code{,} matrix_expression @code{)} @item @strong{Type:} the type of the first argument @item @strong{Purpose:} reduces a polynomial, vector, ideal or module to its normal form with respect to an ideal or module represented by a standard basis. Returns 0 if and only if the polynomial (resp.@: vector, ideal, module) is an element (resp.@: subideal, submodule) of the ideal (resp.@: module). The result may have no meaning if the second argument is not a standard basis. @*The third (optional) argument 1 of type int forces a reduction which considers only the leading term and does no tail reduction. @*If a third argument @code{u} of type poly or matrix is given, the first argument @code{p} is replaced by @code{p/u}. This works only for zero dimensional ideals (resp.@: modules) in the second argument and gives, even in a local ring, a reduced normal form which is the projection to the quotient by the ideal (resp.@: module). @item @strong{Note:} The commands @code{reduce} and @code{NF} are synonymous. @item @strong{Example:} @smallexample @c reused example reduce reference.doc:5076 ring r1 = 0,(z,y,x),ds; poly s1=2x5y+7x2y4+3x2yz3; poly s2=1x2y2z2+3z8; poly s3=4xy5+2x2y2z3+11x10; ideal i=s1,s2,s3; ideal j=std(i); reduce(3z3yx2+7y4x2+yx5+z12y2x2,j); @expansion{} -yx5+2401/81y14x2+2744/81y11x5+392/27y8x8+224/81y5x11+16/81y2x14 reduce(3z3yx2+7y4x2+yx5+z12y2x2,j,1); @expansion{} -yx5+z12y2x2 @c end example reduce reference.doc:5076 @end smallexample @end table @c inserted refs from reference.doc:5088 @ifinfo @menu See * ideal:: * module:: * std:: * vector:: @end menu @end ifinfo @iftex See @ref{ideal}; @ref{module}; @ref{std}; @ref{vector}. @end iftex @c end inserted refs from reference.doc:5088 @c --------------------------------------- @node regularity, repart, reduce, Functions @subsection regularity @cindex regularity @table @code @item @strong{Syntax:} @code{regularity (} list_expression @code{)} @*@code{regularity (} resolution_expression @code{)} @item @strong{Type:} int @item @strong{Purpose:} computes the regularity of a homogeneous ideal, resp.@: module, from a minimal resolution given by the list expression. @* @ifinfo Let @format K[X]e(a,n) ---> ... ---> (+) K[X]e(a,0) ---> I ---> 0 @end format be a minimal resolution with homogeneous maps of degree 0. The regularity is the smallest number s with the property @* deg(e(a,i)) <= s+i for all i. @end ifinfo @tex \noindent Let $0 \rightarrow\ \bigoplus_a K[x]e_{a,n}\ \rightarrow\ \dots \rightarrow\ \bigoplus_a K[x]e_{a,0}\ \rightarrow\ I\ \rightarrow\ 0$ be a minimal resolution of I considered with homogeneous maps of degree 0. The regularity is the smallest number $s$ with the property deg($e_{a,i}) \leq s+i$ for all $i$. @end tex @item @strong{Note:} If applied to a non minimal resolution only an upper bound is returned. @*If the input to the commands @code{res} and @code{mres} is homogeneous the regularity is computed and used as a degree bound during the computation unless @code{option(notRegularity);} is given. @item @strong{Example:} @smallexample @c reused example regularity reference.doc:5134 ring rh3=32003,(w,x,y,z),(dp,C); poly f=x11+y10+z9+x5y2+x2y2z3+xy3*(y2+x)^2; ideal j=homog(jacob(f),w); def jr=res(j,0); regularity(jr); @expansion{} 25 // example for upper bound behavior: list jj=jr; regularity(jj); @expansion{} 25 jj=nres(j,0); regularity(jj); @expansion{} 27 jj=minres(jj); regularity(jj); @expansion{} 25 @c end example regularity reference.doc:5134 @end smallexample @end table @c inserted refs from reference.doc:5150 @ifinfo @menu See * list:: * minres:: * mres:: * option:: * res:: * resolution:: * sres:: @end menu @end ifinfo @iftex See @ref{list}; @ref{minres}; @ref{mres}; @ref{option}; @ref{res}; @ref{resolution}; @ref{sres}. @end iftex @c end inserted refs from reference.doc:5150 @c --------------------------------------- @node repart, res, regularity, Functions @subsection repart @cindex repart @table @code @item @strong{Syntax:} @code{repart (} number_expression @code{)} @item @strong{Type:} number @item @strong{Purpose:} returns the real part of a number from a complex ground field, @*returns its argument otherwise. @item @strong{Example:} @smallexample @c reused example repart reference.doc:5175 ring r=(complex,i),x,dp; repart(1+2*i); @expansion{} 1 @c end example repart reference.doc:5175 @end smallexample @end table @c inserted refs from reference.doc:5181 @ifinfo @menu See * impart:: @end menu @end ifinfo @iftex See @ref{impart}. @end iftex @c end inserted refs from reference.doc:5181 @c --------------------------------------- @node res, reservedName, repart, Functions @subsection res @cindex res @c start include of docu for standard.lib:res @c replaced @subsubsection by @sub @c ---content res--- Procedure from library @code{standard.lib} (@pxref{standard_lib}). @c we do texinfo here: @cindex resolution, computation of @table @code @item @strong{Syntax:} @code{res (} ideal_expression@code{,} int_expression @code{[,} any_expression @code{])} @*@code{res (} module_expression@code{,} int_expression @code{[,} any_expression @code{])} @item @strong{Type:} resolution @item @strong{Purpose:} computes a (possibly minimal) free resolution of an ideal or module using a heuristically chosen method. @* The second (int) argument (say, @code{k}) specifies the length of the resolution. If it is not positive then @code{k} is assumed to be the number of variables of the basering. @* If a third argument is given, the returned resolution is minimized. Depending on the input, the returned resolution is computed using the following methods: @table @asis @item @strong{quotient rings:} @code{nres} (classical method using syzygies) , see @ref{nres}. @item @strong{homogeneous ideals and k=0:} @code{lres} (La'Scala's method), see @ref{lres}. @item @strong{not minimized resolution and (homogeneous input with k not 0, or local rings):} @code{sres} (Schreyer's method), see @ref{sres}. @item @strong{all other inputs:} @code{mres} (classical method), see @ref{mres}. @end table @item @strong{Note:} Accessing single elements of a resolution may require that some partial computations have to be finished and may therefore take some time. @end table @c inserted refs from d2t_singular/standard_lib.doc:263 @ifinfo @menu See also * betti:: * hres:: * ideal:: * lres:: * minres:: * module:: * mres:: * nres:: * resolution:: * sres:: @end menu @end ifinfo @iftex See also @ref{betti}; @ref{hres}; @ref{ideal}; @ref{lres}; @ref{minres}; @ref{module}; @ref{mres}; @ref{nres}; @ref{resolution}; @ref{sres}. @end iftex @c end inserted refs from d2t_singular/standard_lib.doc:263 @strong{Example:} @smallexample @c reused example res d2t_singular/standard_lib.doc:279 ring r=0,(x,y,z),dp; ideal i=xz,yz,x3-y3; def l=res(i,0); // homogeneous ideal: uses lres l; @expansion{} 1 3 2 @expansion{} r <-- r <-- r @expansion{} @expansion{} 0 1 2 @expansion{} resolution not minimized yet @expansion{} print(betti(l), "betti"); // input to betti may be of type resolution @expansion{} 0 1 2 @expansion{} ------------------------ @expansion{} 0: 1 - - @expansion{} 1: - 2 1 @expansion{} 2: - 1 1 @expansion{} ------------------------ @expansion{} total: 1 3 2 l[2]; // element access may take some time @expansion{} _[1]=-x*gen(1)+y*gen(2) @expansion{} _[2]=-x2*gen(2)+y2*gen(1)+z*gen(3) i=i,x+1; l=res(i,0); // inhomogeneous ideal: uses mres l; @expansion{} 1 3 3 1 @expansion{} r <-- r <-- r <-- r @expansion{} @expansion{} 0 1 2 3 @expansion{} resolution not minimized yet @expansion{} ring rs=0,(x,y,z),ds; ideal i=imap(r,i); def l=res(i,0); // local ring not minimized: uses sres l; @expansion{} 1 1 @expansion{} rs <-- rs @expansion{} @expansion{} 0 1 @expansion{} resolution not minimized yet @expansion{} res(i,0,0); // local ring and minimized: uses mres @expansion{} 1 1 @expansion{} rs <-- rs @expansion{} @expansion{} 0 1 @expansion{} @c end example res d2t_singular/standard_lib.doc:279 @end smallexample @c ---end content res--- @c generated lib proc docu for standard.lib:res reference.doc:5189 @c end include of docu for standard.lib:res @c --------------------------------------- @node reservedName, resultant, res, Functions @subsection reservedName @cindex reservedName @table @code @item @strong{Syntax:} @code{reservedName ()} @item @strong{Type:} none @item @strong{Syntax:} @code{reservedName (} string_expression @code{)} @item @strong{Type:} int @item @strong{Purpose:} prints a list of all reserved identifiers (first form) or tests whether the string is a reserved identifier (second form). @item @strong{Example:} @smallexample reservedName(); @expansion{} ... // output skipped @c reused example reservedName reference.doc:5211 reservedName("ring"); @expansion{} 1 reservedName("xyz"); @expansion{} 0 @c end example reservedName reference.doc:5211 @end smallexample @end table @c inserted refs from reference.doc:5217 @ifinfo @menu See * names:: * string:: @end menu @end ifinfo @iftex See @ref{names}; @ref{string}. @end iftex @c end inserted refs from reference.doc:5217 @c --------------------------------------- @node resultant, rvar, reservedName, Functions @subsection resultant @cindex resultant @table @code @item @strong{Syntax:} @code{resultant (} poly_expression@code{,} poly_expression@code{,} ring_variable @code{)} @item @strong{Type:} poly @item @strong{Purpose:} computes the resultant of the first and second argument with respect to the variable given as the third argument. @item @strong{Example:} @smallexample @c reused example resultant reference.doc:5236 ring r=32003,(x,y,z),dp; poly f=3*(x+2)^3+y; poly g=x+y+z; resultant(f,g,x); @expansion{} 3y3+9y2z+9yz2+3z3-18y2-36yz-18z2+35y+36z-24 @c end example resultant reference.doc:5236 @end smallexample @end table @c inserted refs from reference.doc:5244 @ifinfo @menu See * poly:: * ring:: @end menu @end ifinfo @iftex See @ref{poly}; @ref{ring}. @end iftex @c end inserted refs from reference.doc:5244 @c --------------------------------------- @node rvar, setring, resultant, Functions @subsection rvar @cindex rvar @table @code @item @strong{Syntax:} @code{rvar (} name @code{)} @*@code{rvar (} poly_expression @code{)} @*@code{rvar (} string_expression @code{)} @item @strong{Type:} int @item @strong{Purpose:} returns the number of the variable if the name is a ring variable of the basering or if the string is the name of a ring variable of the basering; returns 0 if not. Hence the return value of @code{rvar} can also be used in a boolean context to check whether the variable exists. @item @strong{Example:} @smallexample @c reused example rvar reference.doc:5267 ring r=29,(x,y,z),lp; rvar(x); @expansion{} 1 rvar(r); @expansion{} 0 rvar(y); @expansion{} 2 rvar(var(3)); @expansion{} 3 rvar("x"); @expansion{} 1 @c end example rvar reference.doc:5267 @end smallexample @end table @c inserted refs from reference.doc:5277 @ifinfo @menu See * defined:: * ring:: * var:: * varstr:: @end menu @end ifinfo @iftex See @ref{defined}; @ref{ring}; @ref{var}; @ref{varstr}. @end iftex @c end inserted refs from reference.doc:5277 @c --------------------------------------- @node setring, simplex, rvar, Functions @subsection setring @cindex setring @table @code @item @strong{Syntax:} @code{setring} ring_name @item @strong{Type:} none @item @strong{Purpose:} changes the basering to another (already defined) ring. @item @strong{Example:} @smallexample @c reused example setring reference.doc:5297 ring r1=0,(x,y),lp; // the basering is r1 ring r2=32003,(a(1..8)),ds; // the basering is r2 setring r1; // the basering is again r1 nameof(basering); @expansion{} r1 listvar(); @expansion{} // r2 [0] ring @expansion{} // r1 [0] *ring @expansion{} // LIB [0] string standard.lib @c end example setring reference.doc:5297 @end smallexample @item @strong{Use in procedures:} All changes of the basering by a definition of a new ring or a @code{setring} command in a procedure are local to this procedure. Use @code{keepring} to move a ring, which is local to a procedure, up by one nesting level. @end table @c inserted refs from reference.doc:5315 @ifinfo @menu See * keepring:: * qring:: * ring:: @end menu @end ifinfo @iftex See @ref{keepring}; @ref{qring}; @ref{ring}. @end iftex @c end inserted refs from reference.doc:5315 @c --------------------------------------- @node simplex, simplify, setring, Functions @subsection simplex @cindex simplex @table @code @item @strong{Syntax:} @code{simplex (} matrix_expression@code{,} int_expression@code{,} int_expression@code{,} int_expression@code{,} int_expression@code{,} int_expression@code{)} @item @strong{Type:} list @item @strong{Purpose:} perform the simplex algorithm for the tableau given by the input, e.g. M,m,n,m1,m2,m3: @table @asis @item M matrix of numbers : first row describing the objective function (maximize problem), the remaining rows describing constraints; @item m,n,m1,m2,m3 int : n = number of variables; m = total number of constraints; m1 = number of <=constraints (rows 2 ... m1+1 of M); m2 = number of >=constraints (rows m1+2 ... m1+m2+1 of M); m3 = number of == constraints. @end table The following assumptions are made: @table @asis @item * ground field is of type @code{(real,N)}, N>=4; @item * the matrix M is of size m x n; @item * m=m1+m2+m3; @item * the entries M[2,1] ,..., M[m+1,1] are non-negative; @item * the variables x(i) are non-negative; @item * a row b, a(1) ,..., a(n) corresponds to b+a(1)x(1)+...+a(n)x(n); @item * for a <=, >=, or == constraint: add "in mind" >=0, <=0, or ==0. @end table The output is a list L with @table @asis @item * L[1] = matrix @item * L[2] = int: 0 = finite solution found; 1 = unbounded; -1 = no solution; -2 = error occured; @item * L[3] = intvec : L[3][k] = number of variable which corresponds to row k+1 of L[1]; @item * L[4] = intvec : L[4][j] = number of variable which is represented by column j+1 of L[1] ("non-basis variable"); @item * L[5] = int : number of constraints (= m); @item * L[6] = int : number of variables (= n). @end table The solution can be read from the first column of L[1] as is done by the procedure @ref{simplexOut} in @code{solve.lib}. @item @strong{Example:} @smallexample @c reused example simplex reference.doc:5381 ring r = (real,10),(x),lp; // consider the max. problem: // // maximize x(1) + x(2) + 3*x(3) - 0.5*x(4) // // with constraints: x(1) + 2*x(3) <= 740 // 2*x(2) - 7*x(4) <= 0 // x(2) - x(3) + 2*x(4) >= 0.5 // x(1) + x(2) + x(3) + x(4) = 9 // matrix sm[5][5]=( 0, 1, 1, 3,-0.5, 740,-1, 0,-2, 0, 0, 0,-2, 0, 7, 0.5, 0,-1, 1,-2, 9,-1,-1,-1,-1); int n = 4; // number of constraints int m = 4; // number of variables int m1= 2; // number of <= constraints int m2= 1; // number of >= constraints int m3= 1; // number of == constraints simplex(sm, n, m, m1, m2, m3); @expansion{} [1]: @expansion{} _[1,1]=17.025 @expansion{} _[1,2]=-0.95 @expansion{} _[1,3]=-0.05 @expansion{} _[1,4]=1.95 @expansion{} _[1,5]=-1.05 @expansion{} _[2,1]=730.55 @expansion{} _[2,2]=0.1 @expansion{} _[2,3]=-0.1 @expansion{} _[2,4]=-1.1 @expansion{} _[2,5]=0.9 @expansion{} _[3,1]=3.325 @expansion{} _[3,2]=-0.35 @expansion{} _[3,3]=-0.15 @expansion{} _[3,4]=0.35 @expansion{} _[3,5]=0.35 @expansion{} _[4,1]=0.95 @expansion{} _[4,2]=-0.1 @expansion{} _[4,3]=0.1 @expansion{} _[4,4]=0.1 @expansion{} _[4,5]=0.1 @expansion{} _[5,1]=4.725 @expansion{} _[5,2]=-0.55 @expansion{} _[5,3]=0.05 @expansion{} _[5,4]=0.55 @expansion{} _[5,5]=-0.45 @expansion{} [2]: @expansion{} 0 @expansion{} [3]: @expansion{} 5,2,4,3 @expansion{} [4]: @expansion{} 1,6,8,7 @expansion{} [5]: @expansion{} 4 @expansion{} [6]: @expansion{} 4 @c end example simplex reference.doc:5381 @end smallexample @end table @c inserted refs from reference.doc:5408 @ifinfo @menu See * simplexOut:: @end menu @end ifinfo @iftex See @ref{simplexOut}. @end iftex @c end inserted refs from reference.doc:5408 @c --------------------------------------- @node simplify, size, simplex, Functions @subsection simplify @cindex simplify @table @code @item @strong{Syntax:} @code{simplify (} poly_expression@code{,} int_expression @code{)} @*@code{simplify (} vector_expression@code{,} int_expression @code{)} @*@code{simplify (} ideal_expression@code{,} int_expression @code{)} @*@code{simplify (} module_expression@code{,} int_expression @code{)} @item @strong{Type:} the type of the first argument @item @strong{Purpose:} returns the "simplified" first argument depending on the simplification rule given as the second argument. The simplification rules are the sum of the following functions: @table @code @item 1 normalize (make leading coefficients 1). @item 2 erase zero generators/columns. @item 4 keep only the first one of identical generators/columns. @item 8 keep only the first one of generators/columns which differ only by a factor in the ground field. @item 16 keep only those generators/columns whose leading monomials differ. @item 32 keep only those generators/columns whose leading monomials are not divisible by other ones. @end table @item @strong{Example:} @smallexample @c reused example simplify reference.doc:5448 ring r=0,(x,y,z),(c,dp); ideal i=0,2x,2x,4x,3x+y,5x2; simplify(i,1); @expansion{} _[1]=0 @expansion{} _[2]=x @expansion{} _[3]=x @expansion{} _[4]=x @expansion{} _[5]=x+1/3y @expansion{} _[6]=x2 simplify(i,2); @expansion{} _[1]=2x @expansion{} _[2]=2x @expansion{} _[3]=4x @expansion{} _[4]=3x+y @expansion{} _[5]=5x2 simplify(i,4); @expansion{} _[1]=0 @expansion{} _[2]=2x @expansion{} _[3]=4x @expansion{} _[4]=3x+y @expansion{} _[5]=5x2 simplify(i,8); @expansion{} _[1]=0 @expansion{} _[2]=2x @expansion{} _[3]=3x+y @expansion{} _[4]=5x2 simplify(i,16); @expansion{} _[1]=0 @expansion{} _[2]=2x @expansion{} _[3]=5x2 simplify(i,32); @expansion{} _[1]=0 @expansion{} _[2]=2x simplify(i,32+2+1); @expansion{} _[1]=x matrix A[2][3]=x,0,2x,y,0,2y; simplify(A,2+8); // by automatic conversion to module @expansion{} _[1]=[x,y] @c end example simplify reference.doc:5448 @end smallexample @end table @c inserted refs from reference.doc:5463 @ifinfo @menu See * ideal:: * module:: * poly:: * vector:: @end menu @end ifinfo @iftex See @ref{ideal}; @ref{module}; @ref{poly}; @ref{vector}. @end iftex @c end inserted refs from reference.doc:5463 @c --------------------------------------- @node size, sortvec, simplify, Functions @subsection size @cindex size @table @code @item @strong{Syntax:} @code{size (} string_expression @code{)} @*@code{size (} intvec_expression @code{)} @*@code{size (} intmat_expression @code{)} @*@code{size (} poly_expression @code{)} @*@code{size (} vector_expression @code{)} @*@code{size (} ideal_expression @code{)} @*@code{size (} module_expression @code{)} @*@code{size (} matrix_expression @code{)} @*@code{size (} list_expression @code{)} @*@code{size (} resolution_expression @code{)} @*@code{size (} ring_expression @code{)} @item @strong{Type:} int @item @strong{Purpose:} depends on the type of argument: @table @asis @item ideal or module returns the number of (non-zero) generators. @item string, intvec, list or resolution returns the length, i.e., the number of characters, entries or elements. @item poly or vector returns the number of monomials. @item matrix or intmat returns the number of entries (rows*columns). @item ring returns the number of elements in the ground field (for Z/p and algebraic extensions) or -1 @end table @item @strong{Example:} @smallexample @c reused example size reference.doc:5506 string s="hello"; size(s); @expansion{} 5 intvec iv=1,2; size(iv); @expansion{} 2 ring r=0,(x,y,z),lp; poly f=x+y+z; size(f); @expansion{} 3 vector v=[x+y,0,0,1]; size(v); @expansion{} 3 ideal i=f,y; size(i); @expansion{} 2 module m=v,[0,1],[0,0,1],2*v; size(m); @expansion{} 4 matrix mm[2][2]; size(mm); @expansion{} 4 ring r1=(2,a),x,dp; minpoly=a4+a+1; size(r1); @expansion{} 8 @c end example size reference.doc:5506 @end smallexample @end table @c inserted refs from reference.doc:5528 @ifinfo @menu See * ideal:: * intmat:: * intvec:: * module:: * ncols:: * nrows:: * poly:: * string:: * vector:: @end menu @end ifinfo @iftex See @ref{ideal}; @ref{intmat}; @ref{intvec}; @ref{module}; @ref{ncols}; @ref{nrows}; @ref{poly}; @ref{string}; @ref{vector}. @end iftex @c end inserted refs from reference.doc:5528 @c --------------------------------------- @node sortvec, sprintf, size, Functions @subsection sortvec @cindex sortvec @table @code @item @strong{Syntax:} @code{sortvec (} ideal_expression @code{)} @*@code{sortvec (} module_expression @code{)} @item @strong{Type:} intvec @item @strong{Purpose:} @tex computes the permutation {\tt v} which orders the ideal, resp.\ module, {\tt I} by its initial terms, starting with the smallest, that is, {\tt I(v[i]) < I(v[i+1])} for all {\tt i}. @end tex @ifinfo computes the permutation v which orders the ideal, resp.@: module, I by its initial terms, starting with the smallest, that is, @*I(v[i]) < I(v[i+1]) for all i. @end ifinfo @item @strong{Example:} @smallexample @c reused example sortvec reference.doc:5565 ring r=0,(x,y,z),dp; ideal I=y,z,x,x3,xz; sortvec(I); @expansion{} 2,1,3,5,4 @c end example sortvec reference.doc:5565 @end smallexample @end table @c inserted refs from reference.doc:5572 @ifinfo @menu See * general_lib:: @end menu @end ifinfo @iftex See @ref{general_lib}. @end iftex @c end inserted refs from reference.doc:5572 @c --------------------------------------- @node sprintf, sres, sortvec, Functions @subsection sprintf @cindex sprintf @c start include of docu for standard.lib:sprintf @c replaced @subsubsection by @sub @c ---content sprintf--- Procedure from library @code{standard.lib} (@pxref{standard_lib}). @table @asis @item @strong{Syntax:} @code{sprintf (} string_expression @code{[,} any_expressions @code{] )} @item @strong{Return:} string @item @strong{Purpose:} @code{sprintf(fmt,...);} performs output formatting. The first argument is a format control string. Additional arguments may be required, depending on the content of the control string. A series of output characters is generated as directed by the control string; these characters are returned as a string. @* The control string @code{fmt} is simply text to be copied, except that the string may contain conversion specifications.@* Do @code{help print;} for a listing of valid conversion specifications. As an addition to the conversions of @code{print}, the @code{%n} and @code{%2} conversion specification does not consume an additional argument, but simply generates a newline character. @item @strong{Note:} If one of the additional arguments is a list, then it should be enclosed once more into a @code{list()} command, since passing a list as an argument flattens the list by one level. @end table @strong{Example:} @smallexample @c reused example sprintf d2t_singular/standard_lib.doc:335 ring r=0,(x,y,z),dp; module m=[1,y],[0,x+z]; intmat M=betti(mres(m,0)); list l = r, m, M; string s = sprintf("s:%s,%n l:%l", 1, 2); s; @expansion{} s:1, @expansion{} l:int(2) s = sprintf("s:%n%s", l); s; @expansion{} s: @expansion{} (0),(x,y,z),(dp(3),C) s = sprintf("s:%2%s", list(l)); s; @expansion{} s: @expansion{} (0),(x,y,z),(dp(3),C),y*gen(2)+gen(1),x*gen(2)+z*gen(2),1,1 s = sprintf("2l:%n%2l", list(l)); s; @expansion{} 2l: @expansion{} list("(0),(x,y,z),(dp(3),C)", @expansion{} module(y*gen(2)+gen(1), @expansion{} x*gen(2)+z*gen(2)), @expansion{} intmat(intvec(1,1 ),1,2)) @expansion{} s = sprintf("%p", list(l)); s; @expansion{} [1]: @expansion{} // characteristic : 0 @expansion{} // number of vars : 3 @expansion{} // block 1 : ordering dp @expansion{} // : names x y z @expansion{} // block 2 : ordering C @expansion{} [2]: @expansion{} _[1]=y*gen(2)+gen(1) @expansion{} _[2]=x*gen(2)+z*gen(2) @expansion{} [3]: @expansion{} 1,1 @expansion{} s = sprintf("%;", list(l)); s; @expansion{} [1]: @expansion{} // characteristic : 0 @expansion{} // number of vars : 3 @expansion{} // block 1 : ordering dp @expansion{} // : names x y z @expansion{} // block 2 : ordering C @expansion{} [2]: @expansion{} _[1]=y*gen(2)+gen(1) @expansion{} _[2]=x*gen(2)+z*gen(2) @expansion{} [3]: @expansion{} 1,1 @expansion{} s = sprintf("%b", M); s; @expansion{} 0 1 @expansion{} ------------------ @expansion{} 0: 1 1 @expansion{} ------------------ @expansion{} total: 1 1 @expansion{} @c end example sprintf d2t_singular/standard_lib.doc:335 @end smallexample @c inserted refs from d2t_singular/standard_lib.doc:349 @ifinfo @menu See also: * fprintf:: * print:: * printf:: * string:: @end menu @end ifinfo @iftex @strong{See also:} @ref{fprintf}; @ref{print}; @ref{printf}; @ref{string}. @end iftex @c end inserted refs from d2t_singular/standard_lib.doc:349 @c ---end content sprintf--- @c generated lib proc docu for standard.lib:sprintf reference.doc:5580 @c end include of docu for standard.lib:sprintf @c --------------------------------------- @node sres, status, sprintf, Functions @subsection sres @cindex sres @table @code @item @strong{Syntax:} @code{sres (} ideal_expression@code{,} int_expression @code{)} @*@code{sres (} module_expression@code{,} int_expression @code{)} @item @strong{Type:} resolution @item @strong{Purpose:} computes a free resolution of an ideal or module with Schreyer's method. The ideal, resp.@: module, has to be a standard basis. More precisely, let M be given by a standard basis and @tex $A_1={\tt matrix}(M)$. @end tex @ifinfo A1=matrix(M). @end ifinfo Then @code{sres} computes a free resolution of @ifinfo coker(A1)=F0/M @format A2 A1 ... ----> F2 ----> F1 ----> F0 --> F0/M --> 0. @end format @end ifinfo @tex $coker(A_1)=F_0/M$ $$...\longrightarrow F_2 \buildrel{A_2}\over{\longrightarrow} F_1 \buildrel{A_1}\over{\longrightarrow} F_0\longrightarrow F_0/M\longrightarrow 0.$$ @end tex If the int expression k is not zero then the computation stops after k steps and returns a list of modules (given by standard bases) @tex $M_i={\tt module}(A_i)$, i=1..k. @end tex @ifinfo Mi=module(Ai), i=1..k. @end ifinfo @*@code{sres(M,0)} returns a list of n modules where n is the number of variables of the basering. Even if @code{sres} does not compute a minimal resolution, the @code{betti} command gives the true betti numbers! In many cases of interest @code{sres} is much faster than any other known method. Let @code{list L=sres(M,0);} then @code{L[1]=M} is identical to the input, @code{L[2]} is a standard basis with respect to the Schreyer ordering of the first syzygy module of @code{L[1]}, etc. @ifinfo (L[i]=M_i @end ifinfo @tex (${\tt L[i]}=M_i$ @end tex in the notations from above.) @item @strong{Note:} Accessing single elements of a resolution may require that some partial computations have to be finished and may therefore take some time. @item @strong{Example:} @smallexample @c reused example sres reference.doc:5645 ring r=31991,(t,x,y,z,w),ls; ideal M=t2x2+tx2y+x2yz,t2y2+ty2z+y2zw, t2z2+tz2w+xz2w,t2w2+txw2+xyw2; M=std(M); resolution L=sres(M,0); L; @expansion{} 1 35 141 209 141 43 4 @expansion{} r <-- r <-- r <-- r <-- r <-- r <-- r @expansion{} @expansion{} 0 1 2 3 4 5 6 @expansion{} resolution not minimized yet @expansion{} print(betti(L),"betti"); @expansion{} 0 1 2 3 4 5 @expansion{} ------------------------------------------ @expansion{} 0: 1 - - - - - @expansion{} 1: - - - - - - @expansion{} 2: - - - - - - @expansion{} 3: - 4 - - - - @expansion{} 4: - - - - - - @expansion{} 5: - - - - - - @expansion{} 6: - - 6 - - - @expansion{} 7: - - 9 16 2 - @expansion{} 8: - - - 2 5 1 @expansion{} ------------------------------------------ @expansion{} total: 1 4 15 18 7 1 @c end example sres reference.doc:5645 @end smallexample @end table @c inserted refs from reference.doc:5656 @ifinfo @menu See * betti:: * hres:: * ideal:: * int:: * lres:: * minres:: * module:: * mres:: * res:: * syz:: @end menu @end ifinfo @iftex See @ref{betti}; @ref{hres}; @ref{ideal}; @ref{int}; @ref{lres}; @ref{minres}; @ref{module}; @ref{mres}; @ref{res}; @ref{syz}. @end iftex @c end inserted refs from reference.doc:5656 @c --------------------------------------- @node status, std, sres, Functions @subsection status @cindex status @cindex sleep @cindex suspend @table @code @item @strong{Syntax:} @code{status (} link_expression@code{,} string_expression @code{)} @item @strong{Type:} string @item @strong{Syntax:} @code{status (} link_expression@code{,} string_expression@code{,} string_expression @code{)} @*@code{status (} link_expression@code{,} string_expression@code{,} string_expression@code{,} int_expression @code{)} @item @strong{Type:} int @item @strong{Purpose:} returns the status of the link as asked for by the second argument. If a third argument is given, the result of the comparison to the status string is returned: @code{(status(l,s1)==s2)} is equivalent to @code{status(l,s1,s2)}. If a fourth integer argument (say, @code{i}) is given and if @code{status(l,s1,s2)} yields @code{0}, then the execution of the current process is suspended (the process is put to ``sleep'') for approximately@: @code{i} microseconds, and afterwards the result of another call to @code{status(l,s1,s2)} is returned. The latter is useful for ``polling'' the @code{read} status of MPtcp links such that busy loops are avoided (see @ref{Parallelization with MPtcp links} for an example). Note that on some systems, the minimum time for a process to be put to sleep is one second. @*The following string expressions are allowed: @table @code @item @code{"name"} the name string given by the definition of the link (usually the filename) @item @code{"type"} returns @code{"ASCII"}, @code{"MPfile"}, @code{"MPtcp"} or @code{"DBM"} @item @code{"open"} returns @code{"yes"} or @code{"no"} @item @code{"openread"} returns @code{"yes"} or @code{"no"} @item @code{"openwrite"} returns @code{"yes"} or @code{"no"} @item @code{"read"} returns @code{"ready"} or @code{"not ready"} @item @code{"write"} returns @code{"ready"} or @code{"not ready"} @item @code{"mode"} returns (depending on the type of the link and its status) @code{"","w","a","r"} or @code{"rw"} @end table @item @strong{Example:} @smallexample @c reused example status reference.doc:5720 link l=":w example.txt"; status(l,"write"); @expansion{} not ready open(l); status(l,"write","ready"); @expansion{} 1 close(l); @c end example status reference.doc:5720 @end smallexample @end table @c inserted refs from reference.doc:5729 @ifinfo @menu See * link:: * open:: * read:: * write:: @end menu @end ifinfo @iftex See @ref{link}; @ref{open}; @ref{read}; @ref{write}. @end iftex @c end inserted refs from reference.doc:5729 @c --------------------------------------- @node std, stdfglm, status, Functions @subsection std @cindex std @table @code @item @strong{Syntax:} @code{std (} ideal_expression@code{)} @*@code{std (} module_expression@code{)} @*@code{std (} ideal_expression@code{,} intvec_expression @code{)} @*@code{std (} module_expression@code{,} intvec_expression @code{)} @*@code{std (} ideal_expression@code{,} intvec_expression@code{,} intvec_expression @code{)} @*@code{std (} module_expression@code{,} intvec_expression@code{,} intvec_expression @code{)} @*@code{std (} ideal_expression@code{,} poly_expression @code{)} @*@code{std (} module_expression@code{,} vector_expression @code{)} @item @strong{Type:} ideal or module @item @strong{Purpose:} returns a standard basis of an ideal or module with respect to the monomial ordering of the basering. A standard basis is a set of generators such that the leading terms generate the leading ideal, resp.@: module. @*Use an optional second argument of type intvec as Hilbert series (result of @code{hilb(i,1)}, see @ref{hilb}), if the ideal, resp.@: module, is homogeneous (Hilbert driven standard basis computation, @ref{stdhilb}). If the ideal is quasihomogeneous with some weights w and if the Hilbert series is computed w.r.t.@: to these weights, then use w as third argument. @*Use an optional second argument of type poly, resp.@: vector, to construct the standard basis from an already computed one (given as the first argument) and one additional generator (the second argument). @item @strong{Note:} The standard basis is computed with a (more or less) straight-forward implementation of the classical Buchberger (resp.@: Mora) algorithm. For global orderings, use the @code{groebner} command instead (@pxref{groebner}), which heuristically chooses the "best" algorithm to compute a Groebner basis. @*To view the progress of long running computations, use @code{option(prot)} (see @ref{option(prot)}). @item @strong{Example:} @smallexample @c reused example std reference.doc:5779 // local computation ring r=32003,(x,y,z),ds; poly s1=1x2y+151xyz10+169y21; poly s2=1xz14+6x2y4+3z24; poly s3=5y10z10x+2y20z10+y10z20+11x3; ideal i=s1,s2,s3; ideal j=std(i); degree(j); @expansion{} 0 // Hilbert driven elimination (standard) ring rhom=32003,(x,y,z,h),dp; ideal i=homog(imap(r,i),h); ideal j=std(i); intvec iv=hilb(j,1); ring rlex=32003,(x,y,z,h),lp; ideal i=fetch(rhom,i); ideal j=std(i,iv); j=subst(j,h,1); j[1]; @expansion{} z64 // Hilbert driven elimination (ideal is quasihomogeneous) intvec w=10,1,1; ring whom=32003,(x,y,z),wp(w); ideal i=fetch(r,i); ideal j=std(i); intvec iw=hilb(j,1,w); ring wlex=32003,(x,y,z),lp; ideal i=fetch(whom,i); ideal j=std(i,iw,w); j[1]; @expansion{} z64 @c end example std reference.doc:5779 @end smallexample @end table @c inserted refs from reference.doc:5811 @ifinfo @menu See * facstd:: * fglm:: * groebner:: * ideal:: * mstd:: * option:: * ring:: * stdfglm:: * stdhilb:: @end menu @end ifinfo @iftex See @ref{facstd}; @ref{fglm}; @ref{groebner}; @ref{ideal}; @ref{mstd}; @ref{option}; @ref{ring}; @ref{stdfglm}; @ref{stdhilb}. @end iftex @c end inserted refs from reference.doc:5811 @c --------------------------------------- @node stdfglm, stdhilb, std, Functions @subsection stdfglm @cindex stdfglm @c start include of docu for standard.lib:stdfglm @c replaced @subsubsection by @sub @c ---content stdfglm--- Procedure from library @code{standard.lib} (@pxref{standard_lib}). @table @asis @item @strong{Syntax:} @code{stdfglm (} ideal_expression @code{)} @* @code{stdfglm (} ideal_expression@code{,} string_expression @code{)} @item @strong{Type:} ideal @item @strong{Purpose:} computes the standard basis of the ideal in the basering via @code{fglm} (from the ordering given as the second argument to the ordering of the basering).@* If no second argument is given, "dp" is used. @cindex fglm @end table @strong{Example:} @smallexample @c reused example stdfglm d2t_singular/standard_lib.doc:52 ring r=0,(x,y,z),lp; ideal i=y3+x2,x2y+x2,x3-x2,z4-x2-y; ideal i1=stdfglm(i); //uses fglm from "dp" to "lp" i1; @expansion{} i1[1]=z12 @expansion{} i1[2]=yz4-z8 @expansion{} i1[3]=y2+y-z8-z4 @expansion{} i1[4]=xy-xz4-y+z4 @expansion{} i1[5]=x2+y-z4 ideal i2=stdfglm(i,"Dp"); //uses fglm from "Dp" to "lp" i2; @expansion{} i2[1]=z12 @expansion{} i2[2]=yz4-z8 @expansion{} i2[3]=y2+y-z8-z4 @expansion{} i2[4]=xy-xz4-y+z4 @expansion{} i2[5]=x2+y-z4 @c end example stdfglm d2t_singular/standard_lib.doc:52 @end smallexample @c inserted refs from d2t_singular/standard_lib.doc:61 @ifinfo @menu See also: * fglm:: * groebner:: * std:: * stdhilb:: @end menu @end ifinfo @iftex @strong{See also:} @ref{fglm}; @ref{groebner}; @ref{std}; @ref{stdhilb}. @end iftex @c end inserted refs from d2t_singular/standard_lib.doc:61 @c ---end content stdfglm--- @c generated lib proc docu for standard.lib:stdfglm reference.doc:5828 @c end include of docu for standard.lib:stdfglm @c --------------------------------------- @node stdhilb, subst, stdfglm, Functions @subsection stdhilb @cindex stdhilb @c start include of docu for standard.lib:stdhilb @c replaced @subsubsection by @sub @c ---content stdhilb--- Procedure from library @code{standard.lib} (@pxref{standard_lib}). @table @asis @item @strong{Syntax:} @code{stdhilb (} ideal_expression @code{)} @* @code{stdhilb (} ideal_expression@code{,} intvec_expression @code{)} @item @strong{Type:} ideal @item @strong{Purpose:} computes the standard basis of the homogeneous ideal in the basering, via a Hilbert driven standard basis computation.@* An optional second argument will be used as 1st Hilbert function. @item @strong{Assume:} The optional second argument is the first Hilbert series as computed by @code{hilb}. @cindex Hilbert function @end table @strong{Example:} @smallexample @c reused example stdhilb d2t_singular/standard_lib.doc:95 ring r=0,(x,y,z),dp; ideal i=y3+x2,x2y+x2,x3-x2,z4-x2-y; ideal i1=stdhilb(i); i1; @expansion{} i1[1]=y3+x2 @expansion{} i1[2]=x2y+x2 @expansion{} i1[3]=x3-x2 @expansion{} i1[4]=z4-x2-y // the latter computation is equivalent to: intvec v=hilb(i,1); @expansion{} // ** i is no standardbasis ideal i2=stdhilb(i,v); i2; @expansion{} i2[1]=y3+x2 @expansion{} i2[2]=x2y+x2 @expansion{} i2[3]=x3-x2 @expansion{} i2[4]=z4-x2-y @c end example stdhilb d2t_singular/standard_lib.doc:95 @end smallexample @c inserted refs from d2t_singular/standard_lib.doc:104 @ifinfo @menu See also: * groebner:: * std:: * stdfglm:: @end menu @end ifinfo @iftex @strong{See also:} @ref{groebner}; @ref{std}; @ref{stdfglm}. @end iftex @c end inserted refs from d2t_singular/standard_lib.doc:104 @c ---end content stdhilb--- @c generated lib proc docu for standard.lib:stdhilb reference.doc:5834 @c end include of docu for standard.lib:stdhilb @c --------------------------------------- @node subst, system, stdhilb, Functions @subsection subst @cindex subst @table @code @item @strong{Syntax:} @code{subst (} poly_expression@code{,} ring_variable@code{,} poly_expression @code{)} @*@code{subst (} vector_expression@code{,} ring_variable@code{,} poly_expression @code{)} @*@code{subst (} ideal_expression@code{,} ring_variable@code{,} poly_expression @code{)} @*@code{subst (} module_expression@code{,} ring_variable@code{,} poly_expression @code{)} @item @strong{Type:} poly, vector, ideal or module (corresponding to the first argument) @item @strong{Purpose:} substitutes a ring variable by a polynomial. @item @strong{Example:} @smallexample @c reused example subst reference.doc:5852 ring r=0,(x,y,z),dp; poly f=x2+y2+z2+x+y+z; subst(f,x,3/2); @expansion{} y2+z2+y+z+15/4 int a=1; subst(f,y,a); @expansion{} x2+z2+x+z+2 subst(f,y,z); @expansion{} x2+2z2+x+2z subst(f,y,z+1); @expansion{} x2+2z2+x+4z+2 @c end example subst reference.doc:5852 @end smallexample @end table @c inserted refs from reference.doc:5863 @ifinfo @menu See * ideal:: * map:: * module:: * poly:: * vector:: @end menu @end ifinfo @iftex See @ref{ideal}; @ref{map}; @ref{module}; @ref{poly}; @ref{vector}. @end iftex @c end inserted refs from reference.doc:5863 @c --------------------------------------- @node system, syz, subst, Functions @subsection system @cindex system @table @code @item @strong{Syntax:} @code{system (} string_expression @code{)} @*@code{system (} string_expression@code{,} expression @code{)} @item @strong{Type:} depends on the desired function, may be none @item @strong{Purpose:} interface to internal data and the operating system. The string_expression determines the command to execute. Some commands require an additional argument (second form) where the type of the argument depends on the command. See below for a list of all possible commands. @item @strong{Note:} Not all functions work on every platform. @item @strong{Functions:} @table @asis @item @code{system("sh"}, string_expression @code{)} @cindex sh @cindex system, sh shell escape, returns the return code of the shell as int. The string is sent literally to the shell. @item @code{system("pid")} @cindex pid @cindex system, pid returns the process number as int (for creating unique names). @item @code{system("uname")} @cindex uname @cindex system, uname @cindex hardware platform returns a string identifying the architecture for which @sc{Singular} was compiled. @item @code{system("getenv",} string_expression@code{)} @cindex getenv @cindex system, getenv returns the value of the shell environment variable given as the second argument. The return type is string. @item @code{system("setenv",}string_expression, string_expression@code{)} @cindex setenv @cindex system, setenv sets the shell environment variable given as the second argument to the value given as the third argument. Returns the third argument. Might not be available on all platforms. @item @code{system("tty")} @cindex tty @cindex system, tty resets the terminal. @item @code{system("version")} @cindex version @cindex system, version returns the version number of @sc{Singular} as int. @item @code{system("contributors")} @cindex contributors @cindex system, contributors returns names of people who contributed to the @sc{Singular} kernel as string. @item @code{system("gen")} @c gen is reserved id: @cindex gen @cindex system, gen returns the generating element of the multiplicative group of (Z/p)\@{0@} (as int) where p is the characteristic of the basering. @item @code{system("nblocks")} @item @code{system("nblocks",} ring_name @code{)} @cindex nblocks @cindex system, nblocks returns the number of blocks of the given ring, or the number of parameters of the current basering, if no second argument is given. The return type is int. @item @code{system("Singular")} @cindex Singular @cindex system, Singular returns the absolute (path) name of the running @sc{Singular} as string. @item @code{system("}--@code{")} @cindex system, -- @cindex command-line options, print all values of prints the values of all options. @item @code{system("}--long_option_name@code{")} @cindex command-line option, value of @cindex system, --long_option_name returns the value of the (command-line) option long_option_name. The type of the returned value is either string or int. @xref{Command line options}, for more info. @item @code{system("}--long_option_name@code{",} expression@code{)} @cindex command-line option, setting value of @cindex system, --long_option_name=value @cindex random number generator, seed @cindex browsers, setting the @cindex browser, setting the @cindex help browsers, setting the @cindex timer resolution, setting the @cindex minimal display time, setting the sets the value of the (command-line) option long_option_name to the value given by the expression. Type of the expression must be string, or int. @xref{Command line options}, for more info. Among others, this can be used for setting the seed of the random number generator, the used help browser, the minimal display time, or the timer resolution. @item @code{system("browsers");} @cindex system, browsers returns a string about available help browsers. @xref{The online help system}. @end table @item @strong{Example:} @smallexample // a listing of the current directory: system("sh","ls"); // execute a shell, return to SINGULAR with exit: system("sh","sh"); string unique_name="/tmp/xx"+string(system("pid")); unique_name; @expansion{} /tmp/xx4711 system("uname") @expansion{} ix86-Linux system("getenv","PATH"); @expansion{} /bin:/usr/bin:/usr/local/bin system("Singular"); @expansion{} /usr/local/bin/Singular // report value of all options system("--"); @expansion{} // --batch 0 @expansion{} // --execute @expansion{} // --sdb 0 @expansion{} // --echo 0 @expansion{} // --help 0 @expansion{} // --quiet 0 @expansion{} // --random 937848971 @expansion{} // --no-tty 0 @expansion{} // --user-option @expansion{} // --version 0 @expansion{} // --allow-net 0 @expansion{} // --browser @expansion{} // --emacs 0 @expansion{} // --no-stdlib 0 @expansion{} // --no-rc 0 @expansion{} // --no-warn 0 @expansion{} // --no-out 0 @expansion{} // --min-time "0.5" @expansion{} // --mp-port @expansion{} // --mp-host @expansion{} // --ticks-per-sec 1 @expansion{} // --mp-transp @expansion{} // --mp-mode // set minimal display time to 0.02 seconds system("--min-time", "0.02"); // set timer resolution to 0.01 seconds system("--ticks-per-sec", 100); // re-seed random number generator system("--random", 12345678); // allow netscape to access HTML pages from the net system("--allow-net", 1); // and set help browser to netscape system("--browser", "netscape"); @end smallexample @end table @c ------------------------------------------------- @node syz, trace, system, Functions @subsection syz @cindex syz @table @code @item @strong{Syntax:} @code{syz (} ideal_expression @code{)} @*@code{syz (} module_expression @code{)} @item @strong{Type:} module @item @strong{Purpose:} computes the first syzygy (i.e., the module of relations of the given generators) of the ideal, resp.@: module. @item @strong{Example:} @smallexample @c reused example syz reference.doc:6043 ring R=0,(x,y),(c,dp); ideal i=x,y; syz(i); @expansion{} _[1]=[y,-x] @c end example syz reference.doc:6043 @end smallexample @end table @c inserted refs from reference.doc:6050 @ifinfo @menu See * hres:: * ideal:: * lres:: * module:: * mres:: * nres:: * res:: * sres:: @end menu @end ifinfo @iftex See @ref{hres}; @ref{ideal}; @ref{lres}; @ref{module}; @ref{mres}; @ref{nres}; @ref{res}; @ref{sres}. @end iftex @c end inserted refs from reference.doc:6050 @c --------------------------------------- @node trace, transpose, syz, Functions @subsection trace @cindex trace @table @code @item @strong{Syntax:} @code{trace (} intmat_expression @code{)} @*@code{trace (} matrix_expression @code{)} @item @strong{Type:} int, if the argument is an intmat, resp.@: @* poly, if the argument is a matrix @item @strong{Purpose:} returns the trace of an intmat, resp.@: matrix. @item @strong{Example:} @smallexample @c reused example trace reference.doc:6076 intmat m[2][2]=1,2,3,4; print(m); @expansion{} 1 2 @expansion{} 3 4 trace(m); @expansion{} 5 @c end example trace reference.doc:6076 @end smallexample @end table @c inserted refs from reference.doc:6083 @ifinfo @menu See * intmat:: * matrix:: @end menu @end ifinfo @iftex See @ref{intmat}; @ref{matrix}. @end iftex @c end inserted refs from reference.doc:6083 @c --------------------------------------- @node transpose, type, trace, Functions @subsection transpose @cindex transpose @table @code @item @strong{Syntax:} @code{transpose (} intmat_expression @code{)} @*@code{transpose (} matrix_expression @code{)} @*@code{transpose (} module_expression @code{)} @item @strong{Type:} intmat, matrix, or module, corresponding to the argument @item @strong{Purpose:} transposes a matrix. @item @strong{Example:} @smallexample @c reused example transpose reference.doc:6103 ring R=0,x,dp; matrix m[2][3]=1,2,3,4,5,6; print(m); @expansion{} 1,2,3, @expansion{} 4,5,6 print(transpose(m)); @expansion{} 1,4, @expansion{} 2,5, @expansion{} 3,6 @c end example transpose reference.doc:6103 @end smallexample @end table @c inserted refs from reference.doc:6111 @ifinfo @menu See * intmat:: * matrix:: * module:: @end menu @end ifinfo @iftex See @ref{intmat}; @ref{matrix}; @ref{module}. @end iftex @c end inserted refs from reference.doc:6111 @c --------------------------------------- @node type, typeof, transpose, Functions @subsection type @cindex type @table @code @item @strong{Syntax:} @code{type } name @code{;} @* @code{type (} name @code{);} @item @strong{Type:} none @item @strong{Purpose:} prints the name, level, type and value of a variable. To display the value of an expression, it is sufficient to type the expression followed by @code{;}. @item @strong{Example:} @smallexample @c reused example type reference.doc:6133 int i=3; i; @expansion{} 3 type(i); @expansion{} // i [0] int 3 @c end example type reference.doc:6133 @end smallexample @end table @c inserted refs from reference.doc:6140 @ifinfo @menu See * Data types:: * listvar:: * print:: @end menu @end ifinfo @iftex See @ref{Data types}; @ref{listvar}; @ref{print}. @end iftex @c end inserted refs from reference.doc:6140 @c --------------------------------------- @node typeof, uressolve, type, Functions @subsection typeof @cindex typeof @table @code @item @strong{Syntax:} @code{typeof (} expression @code{)} @item @strong{Type:} string @item @strong{Purpose:} returns the type of an expression as string. Returns the type of the first list element if the expression is an expression list. Possible types are: @code{"ideal"}, @code{"int"}, @code{"intmat"}, @code{"intvec"}, @code{"list"}, @code{"map"}, @code{"matrix"}, @code{"module"}, @code{"number"}, @code{"none"}, @code{"poly"}, @code{"proc"}, @code{"qring"}, @code{"resolution"}, @code{"ring"}, @code{"string"}, @code{"vector"}. For internal use only is the type @c @code{"package"}, @code{"?unknown type?"}. @item @strong{Example:} @smallexample @c reused example typeof reference.doc:6185 int i=9; i; @expansion{} 9 typeof(_); @expansion{} int print(i); @expansion{} 9 typeof(_); @expansion{} none type i; @expansion{} // i [0] int 9 typeof(_); @expansion{} string string s=typeof(i); s; @expansion{} int typeof(s); @expansion{} string proc p() @{ "hello"; return();@} p(); @expansion{} hello typeof(_); @expansion{} none @c end example typeof reference.doc:6185 @end smallexample @end table @c inserted refs from reference.doc:6201 @ifinfo @menu See * Data types:: * type:: @end menu @end ifinfo @iftex See @ref{Data types}; @ref{type}. @end iftex @c end inserted refs from reference.doc:6201 @c --------------------------------------- @node uressolve, vandermonde, typeof, Functions @subsection uressolve @cindex uressolve @table @code @item @strong{Syntax:} @code{uressolve (} ideal_expression@code{,} int_expression@code{,} int_expression@code{,} int_expression @code{)} @item @strong{Type:} list @item @strong{Purpose:} computes all complex roots of a zerodimensional ideal. @* Makes either use of the multipolynomial resultant of Macaulay (second argument = 1), which works only for homogeneous ideals, or uses the sparse resultant of Gelfand, Kapranov and Zelevinsky (second argument = 0). @* The sparse resultant algorithm uses a mixed polyhedral subdivision of the Minkowsky sum of the Newton polytopes in order to construct the sparse resultant matrix. Its determinant is a nonzero multiple of the sparse resultant. The u-resultant of B.L.@: van der Waerden and Laguerre's algorithm are used to determine the complex roots. @* The third argument defines the precision of the fractional part if the ground field is the field of rational numbers, otherwise it will be ignored. @* The fourth argument (can be 0, 1 or 2) gives the number of extra runs of Laguerre's algorithm (with corrupted roots), leading to better results. @item @strong{Note:} If the ground field is the field of complex numbers, the elements of the list are of type number, otherwise of type string. @item @strong{Example:} @smallexample @c reused example uressolve reference.doc:6234 ring rsc=(real,20,I),(x,y),lp; ideal i=(2+3*I)*x2+(0.35+I*45.0e-2)*y2-8,x2+xy+(42.7)*y2; list l=uressolve(i,0,0,2); l[1]; @expansion{} [1]: @expansion{} (-1.315392899374542198+I*0.70468233142752928117) @expansion{} [2]: @expansion{} (0.12292646536251281054+I*0.19245727404407015049) subst(subst(i[1],x,l[1][1]),y,l[1][2]); @expansion{} 0 @c end example uressolve reference.doc:6234 @end smallexample @end table @c inserted refs from reference.doc:6243 @ifinfo @menu See * laguerre:: * mpresmat:: @end menu @end ifinfo @iftex See @ref{laguerre}; @ref{mpresmat}. @end iftex @c end inserted refs from reference.doc:6243 @c --------------------------------------- @node vandermonde, var, uressolve, Functions @subsection vandermonde @cindex vandermonde @table @code @item @strong{Syntax:} @code{vandermonde (} ideal_expression@code{,} ideal_expression@code{,} int_expression @code{)} @item @strong{Type:} poly @item @strong{Purpose:} @ifinfo @code{vandermonde(p,v,d)} computes the (unique) polynomial of degree d with prescribed values v[1],...,v[N] at the points p^0,...,p^(N-1), N=(d+1)^n, n the number of ring variables. @*The returned polynomial is sum_a c[a]*x1^a1*@dots{}*xn^an, where the coefficients c[a] are the solution of the (transposed) Vandermonde system of linear equations @format sum_(|a|<=d) c_[a] * p[1]^(k*a1) *..* p[n]^(k*an) = v[k+1], k=1,@dots{},N. @end format @end ifinfo @tex {\tt vandermonde(p,v,d)} computes the (unique) polynomial of degree @code{d} with prescribed values {\tt v[1],...,v[N]} at the points {\tt p}$^0,\dots,$ {\tt p}$^{N-1}$, {\tt N=(d+1)}$^n$, $n$ the number of ring variables. The returned polynomial is $\sum c_{\alpha_1\ldots\alpha_n}\cdot x_1^{\alpha_1} \cdot \dots \cdot x_n^{\alpha_n}$, where the coefficients $c_{\alpha_1\ldots\alpha_n}$ are the solution of the (transposed) Vandermonde system of linear equations $$ \sum_{\alpha_1+\ldots+\alpha_n\leq d} c_{\alpha_1\ldots\alpha_n} \cdot {\tt p}_1^{(k-1)\alpha_1}\cdot\dots\cdot {\tt p}_n^{(k-1)\alpha_n} = {\tt v}[k], \quad k=1,\dots,{\tt N}.$$ @end tex @item @strong{Note:} @ifinfo the ground field has to be the field of rational numbers. Moreover, ncols(p)==n, the number of variables in the basering, and all the given generators have to be numbers different from 0,1 or -1. Finally, ncols(v)==(d+1)^n, and all given generators have to be numbers. @end ifinfo @tex the ground field has to be the field of rational numbers. Moreover, {\tt ncols(p)==}$n$, the number of variables in the basering, and all the given generators have to be numbers different from 0,1 or -1. Finally, {\tt ncols(v)==(d+1)$^n$}, and all given generators have to be numbers. @end tex @item @strong{Example:} @smallexample @c reused example vandermonde reference.doc:6304 ring r=0,(x,y),dp; // determine f with deg(f)=2 and with given values v of f // at 9 points: (2,3)^0=(1,1),...,(2,3)^8=(2^8,3^8) // valuation point: (2,3) ideal p=2,3; ideal v=1,2,3,4,5,6,7,8,9; poly ip=vandermonde(p,v,2); ip[1..5]; // the 5 first terms of ip: @expansion{} -1/9797760x2y2-595/85536x2y+55/396576xy2+935/384x2-1309/3240xy // compute value of ip at the point 2^8,3^8, result must be 9 subst(subst(ip,x,2^8),y,3^8); @expansion{} 9 @c end example vandermonde reference.doc:6304 @end smallexample @end table @c inserted refs from reference.doc:6318 @ifinfo @menu See also: @end menu @end ifinfo @iftex @end iftex @c end inserted refs from reference.doc:6318 @c --------------------------------------- @node var, varstr, vandermonde, Functions @subsection var @cindex var @table @code @item @strong{Syntax:} @code{var (} int_expression @code{)} @item @strong{Type:} poly @item @strong{Purpose:} @code{var(n)} returns the n-th ring variable. @item @strong{Example:} @smallexample @c reused example var reference.doc:6333 ring r=0,(x,y,z),dp; var(2); @expansion{} y @c end example var reference.doc:6333 @end smallexample @end table @c inserted refs from reference.doc:6339 @ifinfo @menu See * int:: * nvars:: * ring:: * varstr:: @end menu @end ifinfo @iftex See @ref{int}; @ref{nvars}; @ref{ring}; @ref{varstr}. @end iftex @c end inserted refs from reference.doc:6339 @c --------------------------------------- @node varstr, vdim, var, Functions @subsection varstr @cindex varstr @table @code @item @strong{Syntax:} @code{varstr (} ring_name @code{)} @*@code{varstr (} int_expression @code{)} @*@code{varstr (} ring_name@code{,} int_expression @code{)} @item @strong{Type:} string @item @strong{Purpose:} returns the list of the names of the ring variables as a string or the name of the n-th ring variable, where n is given by the int_expression. @*If the ring name is omitted, the basering is used, thus @code{varstr(n)} is equivalent to @code{varstr(basering,n)}. @item @strong{Example:} @smallexample @c reused example varstr reference.doc:6365 ring r=0,(x,y,z),dp; varstr(r); @expansion{} x,y,z varstr(r,1); @expansion{} x varstr(2); @expansion{} y @c end example varstr reference.doc:6365 @end smallexample @end table @c inserted refs from reference.doc:6373 @ifinfo @menu See * charstr:: * int:: * nvars:: * ordstr:: * parstr:: * ring:: * var:: @end menu @end ifinfo @iftex See @ref{charstr}; @ref{int}; @ref{nvars}; @ref{ordstr}; @ref{parstr}; @ref{ring}; @ref{var}. @end iftex @c end inserted refs from reference.doc:6373 @c --------------------------------------- @node vdim, wedge, varstr, Functions @subsection vdim @cindex vdim @table @code @item @strong{Syntax:} @code{vdim (} ideal_expression @code{)} @*@code{vdim (} module_expression @code{)} @item @strong{Type:} int @item @strong{Purpose:} computes the vector space dimension of the ring, resp.@: free module, modulo the ideal, resp.@: module, generated by the initial terms of the given generators. If the generators form a standard basis, this is the same as the vector space dimension of the ring, resp.@: free module, modulo the ideal, resp.@: module. @*If the ideal, resp.@: module, is not zero-dimensional, -1 is returned. @item @strong{Example:} @smallexample @c reused example vdim reference.doc:6403 ring r=0,(x,y),ds; ideal i=x2+y2,x2-y2; ideal j=std(i); vdim(j); @expansion{} 4 @c end example vdim reference.doc:6403 @end smallexample @end table @c inserted refs from reference.doc:6411 @ifinfo @menu See * degree:: * dim:: * ideal:: * kbase:: * mult:: * std:: @end menu @end ifinfo @iftex See @ref{degree}; @ref{dim}; @ref{ideal}; @ref{kbase}; @ref{mult}; @ref{std}. @end iftex @c end inserted refs from reference.doc:6411 @c --------------------------------------- @node wedge, weight, vdim, Functions @subsection wedge @cindex wedge @table @code @item @strong{Syntax:} @code{wedge (} matrix_expression@code{,} int_expression @code{)} @item @strong{Type:} matrix @item @strong{Purpose:} @code{wedge(M,n)} computes the @code{n}-th exterior power of the matrix @code{M}. @item @strong{Example:} @smallexample @c reused example wedge reference.doc:6434 ring r; matrix m[2][3]=x,y,y,z,z,x; print(m); @expansion{} x,y,y, @expansion{} z,z,x print(wedge(m,2)); @expansion{} xz-yz,-x2+yz,xy-yz @c end example wedge reference.doc:6434 @end smallexample @end table @c inserted refs from reference.doc:6442 @ifinfo @menu See * int:: * matrix:: * minor:: @end menu @end ifinfo @iftex See @ref{int}; @ref{matrix}; @ref{minor}. @end iftex @c end inserted refs from reference.doc:6442 @c --------------------------------------- @node weight, write, wedge, Functions @subsection weight @cindex weight @table @code @item @strong{Syntax:} @code{weight (} ideal_expression @code{)} @*@code{weight (} module_expression @code{)} @item @strong{Type:} intvec @item @strong{Purpose:} computes an "optimal" weight vector for an ideal, resp.@: module, which may be used as weight vector for the variables in order to speed up the standard basis algorithm. If the input is weighted homogeneous, a weight vector for which the input is weighted homogeneous is found. @item @strong{Example:} @smallexample @c reused example weight reference.doc:6465 ring h1=32003,(t,x,y,z),dp; ideal i= 9x8+y7t3z4+5x4y2t2+2xy2z3t2, 9y8+7xy6t+2x5y4t2+2x2yz3t2, 9z8+3x2y3z2t4; intvec e=weight(i); e; @expansion{} 5,7,5,7 ring r=32003,(a,b,c,d),wp(e); map f=h1,a,b,c,d; ideal i0=std(f(i)); @c end example weight reference.doc:6465 @end smallexample @end table @c inserted refs from reference.doc:6479 @ifinfo @menu See * ideal:: * intvec:: * qhweight:: @end menu @end ifinfo @iftex See @ref{ideal}; @ref{intvec}; @ref{qhweight}. @end iftex @c end inserted refs from reference.doc:6479 @c --------------------------------------- @node write, , weight, Functions @subsection write @cindex write @table @code @item @strong{Syntax:} @code{write (} link_expression@code{,} expression_list @code{)} @*for DBM links: @*@code{write (} link@code{,} string_expression@code{,} string_expression @code{)} @*@code{write (} link@code{,} string_expression @code{)} @item @strong{Type:} none @item @strong{Purpose:} writes data to a link. @*If the link is of type @code{ASCII}, all expressions are converted to strings (and separated by a newline character) before they are written. As a consequence, only such values which can be converted to a string can be written to an @code{ASCII} link. @*For MP links, ring-dependent expressions are written together with a ring description. To prevent an evaluation of the expression before it is written, the @code{quote} command (possibly together with @code{eval}) can be used. A @code{write} blocks (i.e., does not return to the prompt), as long as a MPtcp link is not ready for writing. @*For DBM links, @code{write} with three arguments inserts the first string as key and the second string as value into the dbm data base. @*Called with two arguments, it deletes the entry with the key specified by the string from the data base. @item @strong{Example:} @smallexample // write the values of the variables f and i as strings into // the file "outfile" (overwrite it, if it exists) write(":w outfile",f,i); // now append the string "that was f,i" (without the quotes) // at the end of the file "outfile" write(":a outfile","that was f,i"); // alternatively, links could be used: link l=":a outfile"; l; // type : ASCII // mode : a // name : outfile // open : no // read : not ready // write: not ready write(l," that was f,i"); // saving and retrieving data (ASCII format): ring r=32003,(x,y,z),dp; ideal i=x+y,z3+22y; write(":w save_i",i);// this writes x+y,z3+22y to the file save_i ring r=32003,(x,y,z),dp; string s=read("save_i"); //creates the string x+y,z3+22y execute("ideal k="+s+";"); // this defines an ideal k which // is equal to i. // for large objects, the MP format and MPfile links are better: write("MPfile:w save_i.mp",i); def j=read("MPfile:r save_i.mp"); @end smallexample @end table @c inserted refs from reference.doc:6545 @ifinfo @menu See * Data types:: * dump:: * eval:: * link:: * print:: * printf:: * quote:: * read:: * short:: @end menu @end ifinfo @iftex See @ref{Data types}; @ref{dump}; @ref{eval}; @ref{link}; @ref{print}; @ref{printf}; @ref{quote}; @ref{read}; @ref{short}. @end iftex @c end inserted refs from reference.doc:6545 @c --------------------------------------- @node Control structures, System variables, Functions, Functions and system variables @section Control structures @cindex Control structures @cindex block @ifinfo @*List of all supported control structures. @end ifinfo @menu * break:: * breakpoint:: * continue:: * else:: * export:: * for:: * if:: * keepring:: * quit:: * return:: * while:: * ~:: @ifset namespaces * exportto:: * importfrom:: * load:: * unload:: @end ifset @end menu A sequence of commands surrounded by curly brackets (@code{@{} and @code{@}}) is a so called block. Blocks are used in @sc{Singular} in order to define procedures and to collect commands belonging to @code{if}, @code{else}, @code{for} and @code{while} statements and to the @code{example} part in libraries. Even if the sequence of statements consists of only a single command it has to be surrounded by curly brackets! Variables which are defined inside a block are not local to that block. Note that there is no ending semicolon at the end of the block. @table @code @item @strong{Example:} @smallexample if ( i>j ) @{ // This is the block int temp; temp=i; i=j; j=temp; kill temp; @} @end smallexample @end table @c --------------------------------------- @node break, breakpoint, Control structures, Control structures @subsection break @cindex break @table @code @item @strong{Syntax:} @code{break;} @item @strong{Purpose:} leaves the innermost @code{for} or @code{while} block. @item @strong{Example:} @smallexample while (1) @{ @dots{} if ( @dots{} ) @{ break; // leave the while block @} @} @end smallexample @end table @c inserted refs from reference.doc:6634 @ifinfo @menu See * Control structures:: * for:: * while:: @end menu @end ifinfo @iftex See @ref{Control structures}; @ref{for}; @ref{while}. @end iftex @c end inserted refs from reference.doc:6634 @c --------------------------------------- @node breakpoint, continue, break, Control structures @subsection breakpoint @cindex breakpoint @table @code @item @strong{Syntax:} @code{breakpoint(} proc_name @code{);} @*@code{breakpoint(} proc_name@code{,} line_no @code{);} @item @strong{Purpose:} sets a breakpoint at the beginning of the specified procedure or at the given line. @strong{Note:} Line number 1 is the first line of a library (for procedures from libraries), resp.@: the line with the @code{@{}. @*A line number of -1 removes all breakpoint from that procedure. @item @strong{Example:} @smallexample @c reused example breakpoint reference.doc:6656 breakpoint(groebner); @expansion{} breakpoint 1, at line 163 in groebner breakpoint(groebner, 176); @expansion{} breakpoint 2, at line 176 in groebner breakpoint(groebner, -1); @expansion{} breakpoints in groebner deleted(0x6) @c end example breakpoint reference.doc:6656 @end smallexample @end table @c inserted refs from reference.doc:6663 @ifinfo @menu See * Source code debugger:: * ~:: @end menu @end ifinfo @iftex See @ref{Source code debugger}; @ref{~}. @end iftex @c end inserted refs from reference.doc:6663 @c --------------------------------------- @node continue, else, breakpoint, Control structures @subsection continue @cindex continue @table @code @item @strong{Syntax:} @code{continue;} @item @strong{Purpose:} skips the rest of the innermost @code{for} or @code{while} loop und jumps to the beginning of the block. This command is only valid inside a @code{for} or a @code{while} construction. @item @strong{Note:} Unlike the C-construct it @strong{does not execute the increment statement}. The command @code{continue} is mainly for internal use. @item @strong{Example:} @smallexample for (int i = 1 ; i<=10; i=i+1) @{ @dots{} if (i==3) @{ i=8;continue; @} // skip the rest if i is 3 and // continue with the next i: 8 i; @} @expansion{} 1 @expansion{} 2 @expansion{} 8 @expansion{} 9 @expansion{} 10 @end smallexample @end table @c inserted refs from reference.doc:6699 @ifinfo @menu See * Control structures:: * for:: * while:: @end menu @end ifinfo @iftex See @ref{Control structures}; @ref{for}; @ref{while}. @end iftex @c end inserted refs from reference.doc:6699 @c --------------------------------------- @node else, export, continue, Control structures @subsection else @table @code @item @strong{Syntax:} @code{if (} boolean_expression @code{)} true_block @code{else} false_block @item @strong{Purpose:} executes false_block if the boolean_expression of the @code{if} statement is false. This command is only valid in combination with an @code{if} command. @item @strong{Example:} @smallexample int i=3; if (i > 5) @{ "i is bigger than 5"; @} else @{ "i is smaller than 6"; @} @expansion{} i is smaller than 6 @end smallexample @end table @c inserted refs from reference.doc:6729 @ifinfo @menu See * Control structures:: * boolean expressions:: * if:: @end menu @end ifinfo @iftex See @ref{Control structures}; @ref{boolean expressions}; @ref{if}. @end iftex @c end inserted refs from reference.doc:6729 @c --------------------------------------- @ifset namespaces @node export, exportto, else, Control structures @end ifset @ifclear namespaces @node export, for, else, Control structures @end ifclear @subsection export @cindex export @table @code @item @strong{Syntax:} @code{export} name @code{;} @*@code{export} list_of_names @code{;} @item @strong{Purpose:} converts a local variable of a procedure to a global one. @item @strong{Note:} Objects defined in a ring are not automatically exported when exporting the ring (use @code{keepring} instead). @item @strong{Example:} @smallexample proc p1 @{ int i,j; export(i); intmat m; listvar(); export(m); @} p1(); @expansion{} // m [1] intmat 1 x 1 @expansion{} // j [1] int 0 @expansion{} // i [0] int 0 listvar(); @expansion{} // m [0] intmat 1 x 1 @expansion{} // i [0] int 0 @end smallexample @end table @ifset namespaces @c inserted refs from reference.doc:6774 @ifinfo @menu See * exportto:: * keepring:: @end menu @end ifinfo @iftex See @ref{exportto}; @ref{keepring}. @end iftex @c end inserted refs from reference.doc:6774 @end ifset @ifclear namespaces @c inserted refs from reference.doc:6780 @ifinfo @menu See * keepring:: @end menu @end ifinfo @iftex See @ref{keepring}. @end iftex @c end inserted refs from reference.doc:6780 @end ifclear @c --------------------------------------- @ifset namespaces @c --------------------------------------- @node exportto, importfrom, export, Control structures @subsection exportto @cindex exportto @table @code @item @strong{Syntax:} @code{exportto(} package_name @code{, }name @code{);} @*@code{exportto(} package_name @code{,} list_of_names @code{);} @item @strong{Purpose:} converts a local variable of a procedure to a global one. package_name can be @code{Current}, @code{Up}, @code{Top} or any other identifier of type package. @item @strong{Note:} Objects defined in a ring are not automatically exported when exporting the ring (use @code{keepring} instead). @item @strong{Example:} @smallexample proc p1 @{ int i,j; exportto(Current,i); intmat m; listvar(); exportto(Top,m); @} p1(); @expansion{} // m [1] intmat 1 x 1 @expansion{} // j [1] int 0 @expansion{} // i [0] int 0 listvar(); @expansion{} // m [0] intmat 1 x 1 @expansion{} // i [0] int 0 @end smallexample @end table @c inserted refs from reference.doc:6822 @ifinfo @menu See * keepring:: @end menu @end ifinfo @iftex See @ref{keepring}. @end iftex @c end inserted refs from reference.doc:6822 @c --------------------------------------- @node importfrom, load, exportto, Control structures @subsection importfrom @cindex importfrom @table @code @item @strong{Syntax:} @code{importfrom(}@code{);} @end table @c inserted refs from reference.doc:6834 @ifinfo @menu See * exportto:: @end menu @end ifinfo @iftex See @ref{exportto}. @end iftex @c end inserted refs from reference.doc:6834 @c --------------------------------------- @node load, unload, importfrom, Control structures @subsection load @cindex load @table @code @item @strong{Syntax:} @code{load(} string_expression @code{);} @*@code{load(}string_expression@code{,"with");} @item @strong{Type:} none @item @strong{Purpose:} @c reads a library of procedures or functions from a file. If the given @c filename does not start with @kbd{~}, @kbd{.} or @kbd{/}, the following @c directories are searched for (in that order): the current directory, the @c directories given in the environment variable @code{SINGULARPATH}, some @c default directories relative to the location of the @sc{Singular} @c executable program, and finally some default absolute directories. You @c can view the search path which @sc{Singular} uses to locate its @c libraries, by starting up @sc{Singular} with the option @code{-v}, or by @c issuing the command @code{system("with");"}. reads a library of procedures from a file. If the given filename does not start with @kbd{.} or @kbd{/}, the following directories are searched for (in that order): the current directory, the directories given in the environment variable @code{SINGULARPATH}, some default directories relative to the location of the @sc{Singular} executable program, and finally some default absolute directories. You can view the search path which @sc{Singular} uses to locate its libraries, by starting up @sc{Singular} with the option @code{-v}, or by issuing the command @code{system("with");"}. Unless @sc{Singular} is started with the @code{--no-stdlib} option, the library @code{standard.lib} is automatically loaded at start-up time. @end table All loaded libraries are displayed by the @code{listvar(package);} command: @smallexample @c reused example load reference.doc:6874 option(loadLib); // show loading of libraries; // standard.lib is loaded listvar(package); // the names of the procedures of inout.lib load("inout.lib"); // are now known to Singular @expansion{} // ** loaded inout.lib (1.21.2.5,2002/06/12) listvar(package); @c end example load reference.doc:6874 @end smallexample Each time a library @ref{Singular library} / dynamic module @ref{dynamic module} is loaded, the corresponding namespace is created, if it does not already exist. The name of this namespace corresponding to a Singular library is derived from the name of the library file. The first letter is capitalized and everything to right of the left-most dot is dropped. For a dynamic module the packagename is hard-coded in the binary file. @sc{Singular} also supports autoloading of packages. To use this features, just specify the identifier by its full name: @smallexample @c reused example load_1 reference.doc:6898 listvar(package); Inout::version; // full name of a variable in the package Inout @expansion{} ? package is not supported in this version @expansion{} ? error occurred in line 2: ` Inout::version; // full name of a v\ ariable in the package Inout` listvar(package); // the package Inout has been autoloaded @c end example load_1 reference.doc:6898 @end smallexample For autoloading the base of the filename is generated by converting the packagename to lowercase letters. The search is done in the standard @sc{Singular} search path, first looking for a file of this name, and then appending to the base @code{.lib}, @code{.so}, @code{.sl} (in this order). An identifier of type @code{package} is created and all procedures are stored in that package. Before loading the type of the file is checking. For an Singular library, the package is set as filename until the first '.' in the name with an uppercase first letter. If the library to load is an binary file with procedures written in an higher language (e.g. C, C++, ...) the package name s hard-code in the library. The second argument @code{"with"} will automatically export all none static procedures to the toplevel. Only the names of the procedures in the library are loaded, the body of the procedures is read during the first call of this procedure. This minimizes memory consumption by unused procedures. When @sc{Singular} is started with the @code{-q} or @code{--quiet} option, no message about the loading of a library is displayed. More exactly, option @code{-q} (and likewise @code{--quiet}) unsets option @code{loadLib} to inhibit monitoring of library loading (@pxref{option}). Unless @sc{Singular} is started with the @code{--no-stdlib} option, the library @code{standard.lib} is automatically loaded at start-up time. @smallexample @c reused example load_2 reference.doc:6936 option(loadLib); // show loading of libraries; standard.lib is loaded // the names of the procedures of inout.lib load("inout.lib"); // are now known to Singular @expansion{} // ** loaded inout.lib (1.21.2.5,2002/06/12) listvar(); @expansion{} // LIB [0] string standard.lib,inout.l..., 22 char(s) @c end example load_2 reference.doc:6936 @end smallexample @c inserted refs from reference.doc:6943 @ifinfo @menu See * Command line options:: * LIB:: * Namespaces:: * Procedures and libraries:: * SINGULAR libraries:: * dynamic module:: * exportto:: * importfrom:: * package:: * proc:: * standard_lib:: * string:: * system:: @end menu @end ifinfo @iftex See @ref{Command line options}; @ref{LIB}; @ref{Namespaces}; @ref{Procedures and libraries}; @ref{SINGULAR libraries}; @ref{dynamic module}; @ref{exportto}; @ref{importfrom}; @ref{package}; @ref{proc}; @ref{standard_lib}; @ref{string}; @ref{system}. @end iftex @c end inserted refs from reference.doc:6943 @c --------------------------------------- @node unload, for, load, Control structures @subsection unload @cindex unload @table @code @item @strong{Syntax:} @code{unload(}@code{);} @end table @c --------------------------------------- @end ifset @c --------------------------------------- @ifset namespaces @node for, if, unload, Control structures @end ifset @ifclear namespaces @node for, if, export, Control structures @end ifclear @subsection for @cindex for @table @code @item @strong{Syntax:} @code{for (} init_command@code{;} boolean_expression@code{;} iterate_commands@code{)} block @item @strong{Purpose:} repetitive, conditional execution of a command block. @*The command init_command is executed first. Then boolean_expression is evaluated. If its value is TRUE the block is executed, otherwise the @code{for} statement is complete. After each execution of the block, the command iterate_command is executed and boolean_expression is evaluated. This is repeated until boolean_expression evaluates to FALSE. @*The command @code{break;} leaves the innermost @code{for} construct. @item @strong{Example:} @smallexample // sum of 1 to 10: int s=0; for (int i=1; i<=10; i=i+1) @{ s=s+i; @} s; @expansion{} 55 @end smallexample @end table @c inserted refs from reference.doc:7004 @ifinfo @menu See * Control structures:: * boolean expressions:: * break:: * continue:: * if:: * while:: @end menu @end ifinfo @iftex See @ref{Control structures}; @ref{boolean expressions}; @ref{break}; @ref{continue}; @ref{if}; @ref{while}. @end iftex @c end inserted refs from reference.doc:7004 @c --------------------------------------- @node if, keepring, for, Control structures @subsection if @cindex if @cindex else @table @code @item @strong{Syntax:} @code{if (} boolean_expression @code{)} true_block @*@code{if (} boolean_expression @code{)} true_block @code{else} false_block @item @strong{Purpose:} executes true_block if the boolean condition is true. If the @code{if} statement is followed by an @code{else} statement and the boolean condition is false, then false_block is executed. @item @strong{Example:} @smallexample int i = 9; matrix m[i][i]; if (i > 5 and typeof(m) == "matrix") @{ m[i][i] = i; @} @end smallexample @end table @c inserted refs from reference.doc:7036 @ifinfo @menu See * Control structures:: * boolean expressions:: * break:: * else:: @end menu @end ifinfo @iftex See @ref{Control structures}; @ref{boolean expressions}; @ref{break}; @ref{else}. @end iftex @c end inserted refs from reference.doc:7036 @c --------------------------------------- @node keepring, quit, if, Control structures @subsection keepring @cindex keepring @table @code @item @strong{Syntax:} @code{keepring} name @code{;} @item @strong{Purpose:} moves the specified ring to the next (upper) level. This command can only be used inside of procedures and it should be the last command before the @code{return} statement. There it provides the possibility to keep a ring which is local to the procedure (and its objects) accessible after the procedure ended without making the ring global. @item @strong{Example:} @smallexample proc P1 @{ ring r=0,x,dp; keepring r; @} proc P2 @{ "inside P2: " + nameof(basering); P1(); "inside P2, after call of P1: " + nameof(basering); @} ring r1= 0,y,dp; P2(); @expansion{} inside P2: r1 @expansion{} inside P2, after call of P1: r "at top level: " + nameof(basering); @expansion{} at top level: r1 @end smallexample @end table @c inserted refs from reference.doc:7077 @ifinfo @menu See * ring:: @end menu @end ifinfo @iftex See @ref{ring}. @end iftex @c end inserted refs from reference.doc:7077 @c --------------------------------------- @node quit, return, keepring, Control structures @subsection quit @cindex quit @cindex exit @table @code @item @strong{Syntax:} @code{quit;} @item @strong{Purpose:} quits @sc{Singular}; works also from inside a procedure. The commands @code{quit} and @code{exit} are synonymous. @item @strong{Example:} @smallexample quit; @end smallexample @end table @c --------------------------------------- @node return, while, quit, Control structures @subsection return @cindex return @table @code @item @strong{Syntax:} @code{return (} expression_list @code{);} @*@code{return ();} @item @strong{Type:} any @item @strong{Purpose:} returns the result(s) of a procedure and can only be used inside a procedure. Note that the brackets are required even if no return value is given. @item @strong{Example:} @smallexample proc p2 @{ int i,j; for(i=1;i<=10;i++) @{ j=j+i; @} return(j); @} // can also return an expression list, i.e., more than one value proc tworeturn () @{ return (1,2); @} int i,j = tworeturn(); // return type may even depend on the input proc type_return (int i) @{ if (i > 0) @{return (i);@} else @{return (list(i));@} @} // then we need def type (or list) to collect value def t1 = type_return(1); def t2 = type_return(-1); @end smallexample @end table @c inserted refs from reference.doc:7138 @ifinfo @menu See * Data types:: * proc:: @end menu @end ifinfo @iftex See @ref{Data types}; @ref{proc}. @end iftex @c end inserted refs from reference.doc:7138 @c --------------------------------------- @node while, ~ , return, Control structures @subsection while @cindex while @table @code @item @strong{Syntax:} @code{while (}boolean_expression@code{)} block @item @strong{Purpose:} repetitive, conditional execution of block. @*The boolean_expression is evaluated and if its value is TRUE, the block gets executed. This is repeated until boolean_expression evaluates to FALSE. The command @code{break} leaves the innermost @code{while} construction. @item @strong{Example:} @smallexample int i = 9; while (i>0) @{ // @dots{} // do something for i=9, 8, ..., 1 i = i - 1; @} while (1) @{ // @dots{} // do something forever if (i == -5) // but leave the loop if i is -5 @{ break; @} @} @end smallexample @end table @c inserted refs from reference.doc:7174 @ifinfo @menu See * Control structures:: * boolean expressions:: * break:: @end menu @end ifinfo @iftex See @ref{Control structures}; @ref{boolean expressions}; @ref{break}. @end iftex @c end inserted refs from reference.doc:7174 @c --------------------------------------- @node ~, , while, Control structures @subsection ~ (break point) @cindex ~ @cindex break point @table @code @item @strong{Syntax:} @code{~;} @item @strong{Purpose:} sets a break point. Whenever @sc{Singular} reaches the command @code{~;} in a sequence of commands it prompts for input. The user may now input lines of @sc{Singular} commands. The line length cannot exceed 80 characters. @sc{Singular} proceeds with the execution of the command following @code{~;} as soon as it receives an empty line. @item @strong{Example:} @smallexample proc t @{ int i=2; ~; return(i+1); @} t(); @expansion{} -- break point in t -- @expansion{} -- 0: called from STDIN -- // here local variables of the procedure can be accessed i; @expansion{} 2 @expansion{} -- break point in t -- @expansion{} 3 @end smallexample @end table @c inserted refs from reference.doc:7215 @ifinfo @menu See * Break points:: @end menu @end ifinfo @iftex See @ref{Break points}. @end iftex @c end inserted refs from reference.doc:7215 @c --------------------------------------- @node System variables, , Control structures, Functions and system variables @section System variables @cindex System variables @ifinfo @*List of all system variables. @end ifinfo @menu * degBound:: * echo:: * minpoly:: * multBound:: * noether:: * printlevel:: * short:: * timer:: * TRACE var:: * rtimer:: * voice:: @end menu @c --------------------------------------- @c @node alternating, degBound, System variables, System variables @c @subsection alternating @c @cindex alternating @c @table @code @c @item @strong{Syntax:} @c @code{alternating =} int_expression@code{;} @c @*int_variable @code{= alternating;} @c @item @strong{Purpose:} @c describes the position of the first alternating variable in the current @c basering, thus creating the tensor @c product of a polynomial ring with an exterior algebra. @c @*Remark: Setting @code{alternating=1;} defines the exterior algebra. @c @item @strong{Note:} @c These algebras are only available in those versions of @c @sc{Singular} which are compiled with the SRING option. @c The SRING version is @c significantly slower for usual (commutative) ring operations. @c @item @strong{Example:} @c @example @c // define the exterior algebra in 3 variables x, y, z @c ring r=0,(x,y,z),dp; @c alternating=1; @c y*x; @c @expansion{} -1*xy @c @end example @c @end table @c @c ref @c See @c @ref{ring}; @c @ref{int expressions}. @c @c ref @c @c ----------------------------------------------------- @node degBound, echo, System variables, System variables @subsection degBound @cindex degBound @table @code @item @strong{Type:} int @item @strong{Purpose:} The standard basis computation is stopped if the total (weighted) degree exceeds @code{degBound}. @* @code{degBound} should not be used for a global ordering with inhomogeneous input. @*Reset this bound by setting @code{degBound} to 0. @item @strong{Example:} @smallexample degBound = 7; option(); @expansion{} //options for 'std'-command: degBound ideal j=std(i); degBound; @expansion{} 7 degBound = 0; //resets degree bound to infinity @end smallexample @end table @c inserted refs from reference.doc:7297 @ifinfo @menu See * deg:: * int:: * option:: * std:: @end menu @end ifinfo @iftex See @ref{deg}; @ref{int}; @ref{option}; @ref{std}. @end iftex @c end inserted refs from reference.doc:7297 @c ----------------------------------------------------- @node echo, minpoly, degBound, System variables @subsection echo @cindex echo @table @code @item @strong{Type:} int @item @strong{Purpose:} input is echoed if @code{echo} >= @code{voice}. @*@code{echo} is a local setting for a procedure and defaulted to 0. @*@code{echo} does not affect the output of commands. @item @strong{Example:} @c this example cannot be a computed one - echo interferes with -e @smallexample echo = 1; int i = echo; @expansion{} int i = echo; @end smallexample @end table @c inserted refs from reference.doc:7323 @ifinfo @menu See * int:: * voice:: @end menu @end ifinfo @iftex See @ref{int}; @ref{voice}. @end iftex @c end inserted refs from reference.doc:7323 @c ----------------------------------------------------- @node minpoly, multBound, echo, System variables @subsection minpoly @cindex minpoly @table @code @item @strong{Type:} number @item @strong{Purpose:} describes the coefficient field of the current basering as an algebraic extension with the minimal polynomial equal to @code{minpoly}. Setting the @code{minpoly} should be the first command after defining the ring. @item @strong{Note:} The minimal polynomial has to be specified in the syntax of a polynomial. Its variable is not one of the ring variables, but the algebraic element which is being adjoined to the field. Algebraic extensions in @sc{singular} are only possible over the rational numbers or over Z/p, p a prime number. @c @*@strong{Warning:} @*@sc{Singular} does not check whether the given polynomial is irreducible! It can be checked in advance with the function @code{factorize} (@pxref{factorize}). @item @strong{Example:} @smallexample @c reused example minpoly reference.doc:7352 //(Q[i]/(i^2+1))[x,y,z]: ring Cxyz=(0,i),(x,y,z),dp; minpoly=i^2+1; i2; //this is a number, not a poly @expansion{} -1 @c end example minpoly reference.doc:7352 @end smallexample @end table @c inserted refs from reference.doc:7360 @ifinfo @menu See * factorize:: * ring:: @end menu @end ifinfo @iftex See @ref{factorize}; @ref{ring}. @end iftex @c end inserted refs from reference.doc:7360 @c ----------------------------------------------------- @node multBound, noether, minpoly, System variables @subsection multBound @cindex multBound @table @code @item @strong{Type:} int @item @strong{Purpose:} The standard basis computation is stopped if the ideal is zero-dimensional in a ring with local ordering and its multiplicity (@code{mult}) is lower than @code{multBound}. @*Reset this bound by setting @code{multBound} to 0. @item @strong{Example:} @smallexample multBound = 20; option(); @expansion{} //options for 'std'-command: multBound ideal j=std(i); multBound; @expansion{} 20 multBound = 0; //disables multBound @end smallexample @end table @c inserted refs from reference.doc:7388 @ifinfo @menu See * int:: * mult:: * option:: * std:: @end menu @end ifinfo @iftex See @ref{int}; @ref{mult}; @ref{option}; @ref{std}. @end iftex @c end inserted refs from reference.doc:7388 @c ----------------------------------------------------- @node noether, printlevel, multBound, System variables @subsection noether @cindex noether @table @code @item @strong{Type:} poly @item @strong{Purpose:} The standard basis computation in local rings cuts off all monomials above (in the sense of the monomial ordering) the monomial @code{noether} during the computation. @*Reset @code{noether} by setting @code{noether} to 0. @item @strong{Example:} @smallexample @c reused example noether reference.doc:7410 ring R=32003,(x,y,z),ds; ideal i=x2+y12,y13; std(i); @expansion{} _[1]=x2+y12 @expansion{} _[2]=y13 noether=x11; std(i); @expansion{} _[1]=x2 noether=0; //disables noether @c end example noether reference.doc:7410 @end smallexample @end table @c inserted refs from reference.doc:7420 @ifinfo @menu See * poly:: * std:: @end menu @end ifinfo @iftex See @ref{poly}; @ref{std}. @end iftex @c end inserted refs from reference.doc:7420 @c ----------------------------------------------------- @node printlevel, short, noether, System variables @subsection printlevel @cindex printlevel @table @code @item @strong{Type:} int @item @strong{Purpose:} sets the debug level for @code{dbprint}. If @code{printlevel} >= @code{voice} then @code{dbprint} is equivalent to @code{print}, otherwise nothing is printed. @item @strong{Note:} @xref{Procedures in a library}, for a small example about how this is used for the display of comments while procedures are executed. @item @strong{Example:} @smallexample @c reused example printlevel reference.doc:7441 voice; @expansion{} 1 printlevel=0; dbprint(1); printlevel=voice; dbprint(1); @expansion{} 1 @c end example printlevel reference.doc:7441 @end smallexample @end table @c inserted refs from reference.doc:7450 @ifinfo @menu See * dbprint:: * int:: * voice:: @end menu @end ifinfo @iftex See @ref{dbprint}; @ref{int}; @ref{voice}. @end iftex @c end inserted refs from reference.doc:7450 @c ----------------------------------------------------- @node short, timer, printlevel, System variables @subsection short @cindex short @table @code @item @strong{Type:} int @item @strong{Purpose:} the output of monomials is done in the short manner, if @code{short} is non-zero. A C-like notion is used, if short is zero. Both notations may be used as input. @*The default depends on the names of the ring variables (0 if there are names of variables longer than 1 character, 1 otherwise). Every change of the basering sets @code{short} to the previous value for that ring. In other words, the value of the variable @code{short} is "ring-local". @item @strong{Example:} @smallexample @c reused example short reference.doc:7474 ring r=23,x,dp; int save=short; short=1; 2x2,x2; @expansion{} 2x2 x2 short=0; 2x2,x2; @expansion{} 2*x^2 x^2 short=save; //resets short to the previous value @c end example short reference.doc:7474 @end smallexample @end table @c inserted refs from reference.doc:7485 @ifinfo @menu See * int:: @end menu @end ifinfo @iftex See @ref{int}. @end iftex @c end inserted refs from reference.doc:7485 @c ----------------------------------------------------- @node timer, TRACE var, short, System variables @subsection timer @cindex timer @table @code @item @strong{Type:} int @item @strong{Purpose:} @enumerate @item the CPU time (i.e, user and system time) used for each command is printed if timer >0 , if this time is bigger than a (customizable) minimal time and if @code{printlevel+1 >= voice} (which is by default true on the @sc{Singular} top level, but not true while procedures are executed). @item yields the used CPU time since the start-up of @sc{Singular} in a (customizable) resolution. @end enumerate The default setting of @code{timer} is 0, the default minimal time is 0.5 seconds, and the default timer resolution is 1 (i.e., the default unit of time is one second). The minimal time and timer resolution can be set using the command line options @code{--min-time} and @code{--ticks-per-sec} and can be checked using @code{system("--min-time")} and @code{system("--ticks-per-sec")}. How to use @code{timer} in order to measure the time for a sequence of commands, see example below. @item @strong{Note for Windows95/98:} The value of the @code{timer} cannot be used (resp.@: trusted) when @sc{Singular} is run under Windows95/98 (this is due to the shortcomings of the Windows95/98 operating system). Use @ref{rtimer}, instead. @item @strong{Example:} @smallexample @c reused example timer reference.doc:7527 timer=1; // The time of each command is printed int t=timer; // initialize t by timer ring r=0,(x,y,z),dp; poly p=(x+2y+3z+4xy+5xz+6yz)^20; // timer as int_expression: t=timer-t; t; // yields the time in ticks-per-sec (default 1) @expansion{} 0 // since t was initialized by timer int tps=system("--ticks-per-sec"); t/tps; // yields the time in seconds truncated to int @expansion{} 0 @c end example timer reference.doc:7527 @end smallexample @end table @c inserted refs from reference.doc:7541 @ifinfo @menu See * Command line options:: * printlevel:: * rtimer:: * system:: * voice:: @end menu @end ifinfo @iftex See @ref{Command line options}; @ref{printlevel}; @ref{rtimer}; @ref{system}; @ref{voice}. @end iftex @c end inserted refs from reference.doc:7541 @c --------------------------------------- @node TRACE var, rtimer, timer, System variables @subsection TRACE @cindex TRACE @table @code @item @strong{Type:} int @item @strong{Purpose:} sets level of debugging. @table @asis @item @code{TRACE=0} no debugging messages are printed. @item @code{TRACE=1} messages about entering and leaving of procedures are displayed. @item @code{TRACE=3} messages about entering and leaving of procedures together with line numbers are displayed. @item @code{TRACE=4} each line is echoed and the interpretation of commands in this line is suspended until the user presses @code{RETURN}. @end table @*@code{TRACE} is defaulted to 0. @*@code{TRACE} does not affect the output of commands. @item @strong{Example:} @smallexample @c reused example TRACE reference.doc:7575 TRACE=1; LIB "general.lib"; sum(1..100); @expansion{} entering sum (level 0) @expansion{} leaving sum (level 0) @expansion{} 5050 @c end example TRACE reference.doc:7575 @end smallexample @end table @c inserted refs from reference.doc:7582 @ifinfo @menu See * int:: @end menu @end ifinfo @iftex See @ref{int}. @end iftex @c end inserted refs from reference.doc:7582 @c --------------------------------------- @node rtimer, voice, TRACE var, System variables @subsection rtimer @cindex timer @table @code @item @strong{Type:} int @item @strong{Purpose:} identical to @code{timer} (@pxref{timer}), except that real times (i.e., wall-clock) times are reported, instead of CPU times. This can be trusted on all operating systems (including Windows95/98). @end table @c --------------------------------------- @node voice,, rtimer, System variables @subsection voice @cindex voice @table @code @item @strong{Type:} int @item @strong{Purpose:} shows the nesting level of procedures. @item @strong{Note:} @xref{Guidelines for writing a library}, for an small example how this is used for the display of comments while procedures are executed. @item @strong{Example:} @smallexample @c reused example voice reference.doc:7614 voice; @expansion{} 1 @c end example voice reference.doc:7614 proc p @{ voice; @}; p(); @expansion{} 2 @end smallexample @end table @c inserted refs from reference.doc:7625 @ifinfo @menu See * dbprint:: * listvar:: * printlevel:: @end menu @end ifinfo @iftex See @ref{dbprint}; @ref{listvar}; @ref{printlevel}. @end iftex @c end inserted refs from reference.doc:7625 @c --------------------------------------- texi2html-1.82/test/singular_manual/uname.texi0000644000175000017500000000010311264347126023370 0ustar flichtenheldflichtenheld@c DO not edit this file. @set _UNAME ix86-Linux @set ix86-Linux texi2html-1.82/test/singular_manual/pdata.tex0000644000175000017500000010153111264347126023212 0ustar flichtenheldflichtenheld@comment -*-texinfo-*- @comment This file was generated by doc2tex.pl from pdata.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT pdata.doc INSTEAD @comment Id: pdata.tex,v 1.1 2003/08/08 14:27:06 pertusus Exp $ @comment this file contains the "Polynomial data" appendix. @c The following directives are necessary for proper compilation @c with emacs (C-c C-e C-r). Please keep it as it is. Since it @c is wrapped in `@ignore' and `@end ignore' it does not harm `tex' or @c `makeinfo' but is a great help in editing this file (emacs @c ignores the `@ignore'). @ignore %**start \input texinfo.tex @setfilename pdata.hlp @node Top, Polynomial data @menu * Polynomial data:: @end menu @node Polynomial data, Examples, Mathematical background, Top @chapter Polynomial data %**end @end ignore @menu * Representation of mathematical objects:: * Monomial orderings:: @end menu @c ----------------------------------------------------------------- @node Representation of mathematical objects,Monomial orderings,,Polynomial data @section Representation of mathematical objects @cindex mathematical objects @cindex representation, math objects @sc{Singular} distinguishes between objects which do not belong to a ring and those which belong to a specific ring (see @ref{Rings and orderings}). We comment only on the latter ones. Internally all ring-dependent objects are polynomials or structures built from polynomials (and some additional information). Note that @sc{Singular} stores (and hence prints) a polynomial automatically w.r.t@:. the monomial ordering. Hence, in order to define such an object in @sc{Singular}, one has to give a list of polynomials in a specific format. For ideals, resp.@: matrices, this is straight forward: The user gives a list of polynomials which generate the ideal, resp.@: which are the entries of the matrix. (The number of rows and columns has to be given when creating the matrix.) A vector in @sc{Singular} is always an element of a free module over the basering. It is given as a list of polynomials in one of the following formats @tex $[f_1,...,f_n]$ or $f_1*gen(1)+...+f_n*gen(n)$, where $gen(i)$ @end tex @ifinfo [f_1,...,f_n] or f_1*gen(1)+...+f_n*gen(n), where gen(i) @end ifinfo denotes the i-th canonical generator of a free module (with 1 at place i and 0 everywhere else). Both forms are equivalent. A vector is internally represented in the second form with the @tex $gen(i)$ @end tex @ifinfo gen(i) @end ifinfo being "special" ring variables, ordered accordingly to the monomial ordering. Therefore, the form @tex $[f_1,...,f_n]$ @end tex @ifinfo [f_1,...,f_n] @end ifinfo is given as output only if the monomial ordering gives priority to the component, i.e@:., is of the form @code{(c,...)} (see @ref{Module orderings}). However, in any case the procedure @code{show} from the library @code{inout.lib} displays the bracket format. A vector @tex $v=[f_1,...,f_n]$ @end tex @ifinfo v=[f_1,...,f_n] @end ifinfo should always be considered as a column vector in a free module of rank equal to @tex nrows($v$) @end tex @ifinfo nrows(v) @end ifinfo where @tex nrows($v$) @end tex @ifinfo nrows(v) @end ifinfo is equal to the maximal index @tex $r$ @end tex @ifinfo r @end ifinfo such that @tex $f_r \not= 0$. @end tex @ifinfo f_r<>0. @end ifinfo This is due to the fact, that internally @tex $v$ @end tex @ifinfo v @end ifinfo is a polynomial in a sparse representation, i.e., @tex $f_i*gen(i)$ @end tex @ifinfo f_i*gen(i) @end ifinfo is not stored if @tex $f_i=0$ @end tex @ifinfo f_i=0 @end ifinfo (for reasons of efficiency), hence the last 0-entries of @tex $v$ @end tex @ifinfo v @end ifinfo are lost. Only more complex structures are able to keep the rank. A module @tex $M$ @end tex @ifinfo M @end ifinfo in @sc{Singular} is given by a list of vectors @tex $v_1,...,v_k$ @end tex @ifinfo v_1,....v_k @end ifinfo which generate the module as a submodule of the free module of rank equal to @tex nrows($M$) @end tex @ifinfo nrows(M) @end ifinfo which is the maximum of @tex nrows($v_i$). @end tex @ifinfo nrows(v_i). @end ifinfo If one wants to create a module with a larger rank than given by its generators, one has to use the command @code{attrib(M,"rank",r)} (see @ref{attrib}, @ref{nrows}) or to define a matrix first, then converting it into a module. Modules in @sc{Singular} are almost the same as matrices, they may be considered as sparse representations of matrices. A module of a matrix is generated by the columns of the matrix and a matrix of a module has as columns the generators of the module. These conversions preserve the rank and the number of generators, resp@:. the number of rows and columns. By the above remarks it might appear that @sc{Singular} is only able to handle submodules of a free module. However, this is not true. @sc{Singular} can compute with any finitely generated module over the basering @tex $R$. @end tex @ifinfo R. @end ifinfo Such a module, say @tex $N$, @end tex @ifinfo N, @end ifinfo is not represented by its generators but by its (generators and) relations. This means that @tex $N = R^n/M$ where $n$ @end tex @ifinfo N = R^n/M where n @end ifinfo is the number of generators of @tex $N$ and $M \subseteq R^n$ @end tex @ifinfo N and M in R^n @end ifinfo is the module of relations. In other words, defining a module @tex $M$ @end tex @ifinfo M @end ifinfo as a submodule of a free module @tex $R^n$ @end tex @ifinfo R^n @end ifinfo can also be considered as the definition of @tex $N = R^n/M$. @end tex @ifinfo N=R^n/M. @end ifinfo Note that most functions, when applied to a module @tex $M$, @end tex @ifinfo M, @end ifinfo really deal with @tex $M$. @end tex @ifinfo M. @end ifinfo However, there are some functions which deal with @tex $N = R^n/M$ instead of $M$. @end tex @ifinfo N=R^n/M instead of M. @end ifinfo For example, @code{std(M)} computes a standard basis of @tex $M$ @end tex @ifinfo M @end ifinfo (and thus gives another representation of @tex $N$ as $N = R^n/$std($M$)). @end tex @ifinfo N as N=R^n/std(M)). @end ifinfo However, @code{dim(M)}, resp.@: @code{vdim(M)}, returns @tex dim$(R^n/M)$, resp.@: dim$_k(R^n/M)$ @end tex @ifinfo dim(R^n/M), resp.@: dim_k(R^n/M) @end ifinfo (if M is given by a standard basis). The function @code{syz(M)} returns the first syzygy module of @tex $M$, @end tex @ifinfo M, @end ifinfo i.e@:., the module of relations of the given generators of @tex $M$ @end tex @ifinfo M @end ifinfo which is equal to the second syzygy module of @tex $N$. @end tex @ifinfo N. @end ifinfo Refer to the description of each function in @ref{Functions} to get information which module the function deals with. The numbering in @code{res} and other commands for computing resolutions refers to a resolution of @tex $N = R^n/M$ @end tex @ifinfo N=R^n/M @end ifinfo (see @ref{res}; @ref{Syzygies and resolutions}). It is possible to compute in any field which is a valid ground field in @sc{Singular}. For doing so, one has to define a ring with the desired ground field and at least one variable. The elements of the field are of type number, but may also be considered as polynomials (of degree 0). Large computations should be faster if the elements of the field are defined as numbers. The above remarks do also apply to quotient rings. Polynomial data are stored internally in the same manner, the only difference is that this polynomial representation is in general not unique. @code{reduce(f,std(0))} computes a normal form of a polynomial f in a quotient ring (cf.@: @ref{reduce}). @c ----------------------------------------------------------------- @node Monomial orderings,,Representation of mathematical objects,Polynomial data @section Monomial orderings @cindex Monomial orderings @menu * Introduction to orderings:: * General definitions for orderings:: * Global orderings:: * Local orderings:: * Module orderings:: * Matrix orderings:: * Product orderings:: * Extra weight vector:: @end menu @c -------------------------------------------------------------------------- @node Introduction to orderings, General definitions for orderings, , Monomial orderings @subsection Introduction to orderings @cindex orderings introduction @cindex term orderings introduction @cindex monomial orderings introduction @sc{Singular} offers a great variety of monomial orderings which provide an enormous functionality, if used diligently. However, this flexibility might also be confusing for the novice user. Therefore, we recommend to those not familiar with monomial orderings to generally use the ordering @code{dp} for computations in the polynomial ring @tex $K[x_1,\ldots,x_n]$, @end tex @ifinfo K[x1,...,xn], @end ifinfo resp.@: @code{ds} for computations in the localization @tex $\hbox{Loc}_{(x)}K[x_1,\ldots,x_n]$. @end tex @ifinfo Loc_(x)K[x1,...,xn]. @end ifinfo For inhomogeneous input ideals, standard (resp.@: groebner) bases computations are generally faster with the orderings @tex $\hbox{Wp}(w_1, \ldots, w_n)$ @end tex @ifinfo Wp(w_1, ..., w_n) @end ifinfo (resp.@: @tex $\hbox{Ws}(w_1, \ldots, w_n)$) @end tex @ifinfo Ws(w_1, ..., w_n)) @end ifinfo if the input is quasihomogeneous w.r.t. the weights @tex $w_1$, $\ldots$, $w_n$ of $x_1$, $\ldots$, $x_n$. @end tex @ifinfo w_1, ..., w_n of x_1, ..., x_n. @end ifinfo If the output needs to be "triangular" (resp.@: "block-triangular"), the lexicographical ordering @code{lp} (resp.@: lexicographical block-orderings) need to be used. However, these orderings usually result in much less efficient computations. @c -------------------------------------------------------------------------- @node General definitions for orderings, Global orderings, Introduction to orderings, Monomial orderings @subsection General definitions for orderings @cindex orderings @cindex term orderings @cindex monomial orderings @tex A monomial ordering (term ordering) on $K[x_1, \ldots, x_n]$ is a total ordering $<$ on the set of monomials (power products) $\{x^\alpha \mid \alpha \in \bf{N}^n\}$ which is compatible with the natural semigroup structure, i.e., $x^\alpha < x^\beta$ implies $x^\gamma x^\alpha < x^\gamma x^\beta$ for any $\gamma \in \bf{N}^n$. We do not require $<$ to be a well ordering. @end tex @ifinfo A monomial ordering (term ordering) on K[x_1, ..., x_n] is a total ordering < on the set of monomials (power products) @{x^a | a in N^n@} which is compatible with the natural semigroup structure, i.e., x^a < x^b implies x^c*x^a < x^c*x^b for any c in N^n. We do not require < to be a well ordering. @end ifinfo @ifset singularmanual See the literature cited in @ref{References}. @end ifset It is known that any monomial ordering can be represented by a matrix @tex $M$ in $GL(n,R)$, @end tex @ifinfo M in GL(n,R), @end ifinfo but, of course, only integer coefficients are of relevance in practice. @tex Global orderings are well orderings (i.e., \hbox{$1 < x_i$} for each variable $x_i$), local orderings satisfy $1 > x_i$ for each variable. If some variables are ordered globally and others locally we call it a mixed ordering. Local or mixed orderings are not well orderings. Let $K$ be the ground field, \hbox{$x = (x_1, \ldots, x_n)$} the variables and $<$ a monomial ordering, then Loc $K[x]$ denotes the localization of $K[x]$ with respect to the multiplicatively closed set $$\{1 + g \mid g = 0 \hbox{ or } g \in K[x]\backslash \{0\} \hbox{ and }L(g) < 1\}.$$ Here, $L(g)$ denotes the leading monomial of $g$, i.e., the biggest monomial of $g$ with respect to $<$. The result of any computation which uses standard basis computations has to be interpreted in Loc $K[x]$. @end tex @ifinfo Global orderings are well orderings (i.e., 1 < x_i for each variable x_i), local orderings satisfy 1 > x_i for each variable. If some variables are ordered globally and others locally we call it a mixed ordering. Local or mixed orderings are not well orderings. If K is the ground field, x = (x_1, @dots{}, x_n) the variables and < a monomial ordering, then Loc K[x] denotes the localization of K[x] with respect to the multiplicatively closed set @{1 + g | g = 0 or g in K[x]\@{0@} and L(g) < 1@}. L(g) denotes the leading monomial of g, i.e., the biggest monomial of g with respect to <. The result of any computation which uses standard basis computations has to be interpreted in Loc K[x]. @end ifinfo Note that the definition of a ring includes the definition of its monomial ordering (see @ref{Rings and orderings}). @sc{Singular} offers the monomial orderings described in the following sections. @c -------------------------------------------------------------------------- @node Global orderings, Local orderings, General definitions for orderings, Monomial orderings @subsection Global orderings @cindex Global orderings @cindex orderings, global @tex For all these orderings: Loc $K[x]$ = $K[x]$ @end tex @ifinfo For all these orderings: Loc K[x] = K[x] @end ifinfo @table @asis @item lp: lexicographical ordering: @cindex lp, global ordering @cindex lexicographical ordering @* @ifinfo x^a < x^b <==> there is an i, 1 <= i <= n : @* a_1 = b_1, @dots{}, a_(i-1) = b_(i-1), a_i < b_i. @end ifinfo @tex $x^\alpha < x^\beta \Leftrightarrow \exists\; 1 \le i \le n : \alpha_1 = \beta_1, \ldots, \alpha_{i-1} = \beta_{i-1}, \alpha_i < \beta_i$. @end tex @item rp: reverse lexicographical ordering: @cindex rp, global ordering @cindex reverse lexicographical ordering @* @ifinfo x^a < x^b <==> there is an i, 1 <= i <= n : @* a_n = b_n, @dots{}, a_(i+1) = b_(i+1), a_i > b_i. @end ifinfo @tex $x^\alpha < x^\beta \Leftrightarrow \exists\; 1 \le i \le n : \alpha_n = \beta_n, \ldots, \alpha_{i+1} = \beta_{i+1}, \alpha_i > \beta_i.$ @end tex @item dp: degree reverse lexicographical ordering: @cindex degree reverse lexicographical ordering @cindex dp, global ordering @* @ifinfo let deg(x^a) = a_1 + @dots{} + a_n, then @end ifinfo @tex let $\deg(x^\alpha) = \alpha_1 + \cdots + \alpha_n,$ then @end tex @ifinfo @*x^a < x^b <==> @* deg(x^a) < deg(x^b), @* or @* deg(x^a) = deg(x^b) and there exist an i, 1 <= i <= n: @* a_n = b_n, @dots{}, a_(i+1) = b_(i+1), a_i > b_i. @end ifinfo @tex $x^\alpha < x^\beta \Leftrightarrow \deg(x^\alpha) < \deg(x^\beta)$ or @end tex @iftex @* @end iftex @tex \phantom{$x^\alpha < x^\beta \Leftrightarrow $}$ \deg(x^\alpha) = \deg(x^\beta)$ and $\exists\ 1 \le i \le n: \alpha_n = \beta_n, \ldots, \alpha_{i+1} = \beta_{i+1}, \alpha_i > \beta_i.$ @end tex @item Dp: degree lexicographical ordering: @cindex degree lexicographical ordering @cindex Dp, global ordering @* @ifinfo let deg(x^a) = a_1 + @dots{} + a_n, then @end ifinfo @tex let $\deg(x^\alpha) = \alpha_1 + \cdots + \alpha_n,$ then @end tex @ifinfo @*x^a < x^b <==> @* deg(x^a) < deg(x^b) @* or @* deg(x^a) = deg(x^b) and there exist an i, 1 <= i <= n: @* a_1 = b_1, @dots{}, a_(i-1) = b_(i-1), a_i < b_i. @end ifinfo @tex $x^\alpha < x^\beta \Leftrightarrow \deg(x^\alpha) < \deg(x^\beta)$ or @end tex @iftex @* @end iftex @tex \phantom{ $x^\alpha < x^\beta \Leftrightarrow $} $\deg(x^\alpha) = \deg(x^\beta)$ and $\exists\ 1 \le i \le n:\alpha_1 = \beta_1, \ldots, \alpha_{i-1} = \beta_{i-1}, \alpha_i < \beta_i.$ @end tex @item wp: weighted reverse lexicographical ordering: @cindex weighted reverse lexicographical ordering @cindex wp, global ordering @* @ifinfo wp(w_1, @dots{}, w_n), w_i positive integers, @end ifinfo @tex let $w_1, \ldots, w_n$ be positive integers. Then ${\tt wp}(w_1, \ldots, w_n)$ @end tex is defined as @code{dp} but with @ifinfo deg(x^a) = w_1 a_1 + @dots{} + w_n a_n. @end ifinfo @tex $\deg(x^\alpha) = w_1 \alpha_1 + \cdots + w_n\alpha_n.$ @end tex @item Wp: weighted lexicographical ordering: @cindex weighted lexicographical ordering @cindex WP, global ordering @* @ifinfo Wp(w_1, @dots{}, w_n), w_i positive integers, @end ifinfo @tex let $w_1, \ldots, w_n$ be positive integers. Then ${\tt Wp}(w_1, \ldots, w_n)$ @end tex is defined as @code{Dp} but with @ifinfo deg(x^a) = w_1 a_1 + @dots{} + w_n a_n. @end ifinfo @tex $\deg(x^\alpha) = w_1 \alpha_1 + \cdots + w_n\alpha_n.$ @end tex @end table @c -------------------------------------------------------------------------- @node Local orderings, Module orderings, Global orderings, Monomial orderings @subsection Local orderings @cindex Local orderings @cindex orderings, local For ls, ds, Ds and, if the weights are positive integers, also for ws and Ws, we have @ifinfo Loc K[x] = K[x]_(x), @end ifinfo @tex Loc $K[x]$ = $K[x]_{(x)}$, @end tex the localization of @tex $K[x]$ @end tex @ifinfo K[x] @end ifinfo at the maximal ideal @ifinfo (x_1, @dots{}, x_n). @end ifinfo @tex \ $(x_1, ..., x_n)$. @end tex @table @asis @item ls: negative lexicographical ordering: @cindex negative lexicographical ordering @cindex ls, local ordering @* @ifinfo x^a < x^b <==> there is an i, 1 <= i <= n : @* a_1 = b_1, @dots{}, a_(i-1) = b_(i-1), a_i > b_i. @end ifinfo @tex $x^\alpha < x^\beta \Leftrightarrow \exists\; 1 \le i \le n : \alpha_1 = \beta_1, \ldots, \alpha_{i-1} = \beta_{i-1}, \alpha_i > \beta_i$. @end tex @item ds: negative degree reverse lexicographical ordering: @cindex negative degree reverse lexicographical ordering @cindex ds, local ordering @* @ifinfo let deg(x^a) = a_1 + @dots{} + a_n, then @end ifinfo @tex let $\deg(x^\alpha) = \alpha_1 + \cdots + \alpha_n,$ then @end tex @ifinfo @*x^a < x^b <==> @* deg(x^a) > deg(x^b) @* or @* deg(x^a) = deg(x^b) and there exist an i, 1 <= i <= n: @* a_n = b_n, @dots{}, a_(i+1) = b_(i+1), a_i > b_i. @end ifinfo @tex $x^\alpha < x^\beta \Leftrightarrow \deg(x^\alpha) > \deg(x^\beta)$ or @end tex @iftex @* @end iftex @tex \phantom{ $x^\alpha < x^\beta \Leftrightarrow$}$ \deg(x^\alpha) = \deg(x^\beta)$ and $\exists\ 1 \le i \le n: \alpha_n = \beta_n, \ldots, \alpha_{i+1} = \beta_{i+1}, \alpha_i > \beta_i.$ @end tex @item Ds: negative degree lexicographical ordering: @cindex negative degree lexicographical ordering @cindex Ds, local ordering @* @ifinfo let deg(x^a) = a_1 + @dots{} + a_n, then @end ifinfo @tex let $\deg(x^\alpha) = \alpha_1 + \cdots + \alpha_n,$ then @end tex @ifinfo x^a < x^b <==> @* deg(x^a) > deg(x^b) @* or @* deg(x^a) = deg(x^b) and there exist an i, 1 <= i <= n: @* a_1 = b_1, @dots{}, a_(i-1) = b_(i-1), a_i < b_i. @end ifinfo @tex $x^\alpha < x^\beta \Leftrightarrow \deg(x^\alpha) > \deg(x^\beta)$ or @end tex @iftex @* @end iftex @tex \phantom{ $ x^\alpha < x^\beta \Leftrightarrow$}$ \deg(x^\alpha) = \deg(x^\beta)$ and $\exists\ 1 \le i \le n:\alpha_1 = \beta_1, \ldots, \alpha_{i-1} = \beta_{i-1}, \alpha_i < \beta_i.$ @end tex @item ws: (general) weighted reverse lexicographical ordering: @cindex general weighted reverse lexicographical ordering @cindex local weighted reverse lexicographical ordering @cindex ws, local ordering @* @ifinfo ws(w_1, @dots{}, w_n), w_1 @end ifinfo @tex ${\tt ws}(w_1, \ldots, w_n),\; w_1$ @end tex a nonzero integer, @ifinfo w_2,@dots{},w_n @end ifinfo @tex $w_2,\ldots,w_n$ @end tex any integer (including 0), is defined as @code{ds} but with @ifinfo deg(x^a) = w_1 a_1 + @dots{} + w_n a_n. @end ifinfo @tex $\deg(x^\alpha) = w_1 \alpha_1 + \cdots + w_n\alpha_n.$ @end tex @item Ws: (general) weighted lexicographical ordering: @cindex general weighted lexicographical ordering @cindex local weighted lexicographical ordering @cindex Ws, local ordering @* @ifinfo Ws(w_1, @dots{}, w_n), w_1 @end ifinfo @tex ${\tt Ws}(w_1, \ldots, w_n),\; w_1$ @end tex a nonzero integer, @ifinfo w_2,@dots{},w_n @end ifinfo @tex $w_2,\ldots,w_n$ @end tex any integer (including 0), is defined as @code{Ds} but with @ifinfo deg(x^a) = w_1 a_1 + @dots{} + w_n a_n. @end ifinfo @tex $\deg(x^\alpha) = w_1 \alpha_1 + \cdots + w_n\alpha_n.$ @end tex @end table @c -------------------------------------------------------------------------- @node Module orderings, Matrix orderings, Local orderings, Monomial orderings @subsection Module orderings @cindex Module orderings @sc{Singular} offers also orderings on the set of ``monomials'' @ifinfo @{ x^a*gen(i) | a in N^n, 1 <= i <= r @} in Loc K[x]^r = Loc K[x]gen(1) + @dots{} + Loc K[x]gen(r), where gen(1), @dots{}, gen(r) denote the canonical generators of Loc K[x]^r, the r-fold direct sum of Loc K[x]. @end ifinfo @tex $\{ x^a e_i \mid a \in N^n, 1 \leq i \leq r \}$ in Loc $K[x]^r$ = Loc $K[x]e_1 + \ldots +$Loc $K[x]e_r$, where $e_1, \ldots, e_r$ denote the canonical generators of Loc $K[x]^r$, the r-fold direct sum of Loc $K[x]$. (The function {\tt gen(i)} yields $e_i$). @end tex We have two possibilities: either to give priority to the component of a vector in @ifinfo Loc K[x]^r @end ifinfo @tex Loc $K[x]^r$ @end tex or (which is the default in @sc{Singular}) to give priority to the coefficients. The orderings @code{(<,c)} and @code{(<,C)} give priority to the coefficients; whereas @code{(c,<)} and @code{(C,<)} give priority to the components. @*Let < be any of the monomial orderings of @tex Loc $K[x]$ @end tex @ifinfo Loc K[x] @end ifinfo as above. @table @asis @item (<,C): @cindex C, module ordering @cindex module ordering C @ifinfo <_m = (<,C) denotes the module ordering (giving priority to the coefficients): @* x^a*gen(i) <_m x^b*gen(j) <==> @* x^a < x^b @* or @* x^a = x^b and i < j. @end ifinfo @tex $<_m = (<,C)$ denotes the module ordering (giving priority to the coefficients): @end tex @* @tex \quad \quad $x^\alpha e_i <_m x^\beta e_j \Leftrightarrow x^\alpha < x^\beta$ or ($x^\alpha = x^\beta $ and $ i < j$). @end tex @strong{Example:} @smallexample @c computed example Module_orderings pdata.doc:849 ring r = 0, (x,y,z), ds; // the same as ring r = 0, (x,y,z), (ds, C); [x+y2,z3+xy]; @expansion{} x*gen(1)+xy*gen(2)+y2*gen(1)+z3*gen(2) [x,x,x]; @expansion{} x*gen(3)+x*gen(2)+x*gen(1) @c end example Module_orderings pdata.doc:849 @end smallexample @item (C,<): @ifinfo <_m = (C, <) denotes the module ordering (giving priority to the component): @* x^a*gen(i) <_m x^b*gen(j) <==> @* i @* x^a < x^b @* or @* x^a = x^b and i > j. @end ifinfo @tex $<_m = (<,c)$ denotes the module ordering (giving priority to the coefficients): @end tex @iftex @* @end iftex @tex \quad \quad $x^\alpha e_i <_m x^\beta e_j \Leftrightarrow x^\alpha < x^\beta$ or ($x^\alpha = x^\beta $ and $ i > j$). @end tex @strong{Example:} @smallexample @c computed example Module_orderings_2 pdata.doc:909 ring r = 0, (x,y,z), (lp,c); [x+y2,z3+xy]; @expansion{} xy*gen(2)+x*gen(1)+y2*gen(1)+z3*gen(2) [x,x,x]; @expansion{} x*gen(1)+x*gen(2)+x*gen(3) @c end example Module_orderings_2 pdata.doc:909 @end smallexample @item (c,<): @ifinfo <_m = (c, <) denotes the module ordering (giving priority to the component): @* x^a*gen(i) <_m x^b*gen(j) <==> @* i>j @* or @* i = j and x^a < x^b. @end ifinfo @tex $<_m = (c, <)$ denotes the module ordering (giving priority to the component): @end tex @iftex @* @end iftex @tex \quad \quad $x^\alpha e_i <_m x^\beta e_j \Leftrightarrow i > j$ or ($ i = j $ and $ x^\alpha < x^\beta $). @end tex @strong{Example:} @smallexample @c computed example Module_orderings_3 pdata.doc:938 ring r = 0, (x,y,z), (c,lp); [x+y2,z3+xy]; @expansion{} [x+y2,xy+z3] [x,x,x]; @expansion{} [x,x,x] @c end example Module_orderings_3 pdata.doc:938 @end smallexample @end table @ifinfo The output of a vector v in K[x]^r with components v_1, @dots{}, v_r has the format v_1 * gen(1) + @dots{} + v_r * gen(r) @end ifinfo @tex The output of a vector $v$ in $K[x]^r$ with components $v_1, \ldots, v_r$ has the format $v_1 * gen(1) + \ldots + v_r * gen(r)$ @end tex (up to permutation) unless the ordering starts with @code{c}. @ifinfo In this case a vector is written as [v_1, @dots{}, v_r]. @end ifinfo @tex In this case a vector is written as $[v_1, \ldots, v_r]$. @end tex In all cases @sc{Singular} can read input in both formats. @c -------------------------------------------------------------------------- @node Matrix orderings, Product orderings, Module orderings, Monomial orderings @subsection Matrix orderings @cindex Matrix orderings @cindex orderings, M @cindex M, ordering Let @tex $M$ @end tex @ifinfo M @end ifinfo be an invertible @tex $(n \times n)$-matrix @end tex @ifinfo (n x n)-matrix @end ifinfo with integer coefficients and @ifinfo M_1, @dots{}, M_n the rows of M. @end ifinfo @tex $M_1, \ldots, M_n$ the rows of $M$. @end tex The M-ordering < is defined as follows: @* @ifinfo x^a < x^b <==> there exists an i: 1 <= i <= n : M_1*a = M_1*b, @dots{}, M_(i-1)*a = M_(i-1)*b, M_i*a < M_i*b. @end ifinfo @tex \quad \quad $x^a < x^b \Leftrightarrow \exists\ 1 \leq i \leq n : M_1 a = \; M_1 b, \ldots, M_{i-1} a = \; M_{i-1} b$ and $M_i a < \; M_i b$. @end tex Thus, @ifinfo x^a < x^b if and only if M*a is smaller than M*b @end ifinfo @tex $x^a < x^b$ if and only if $M a$ is smaller than $M b$ @end tex with respect to the lexicographical ordering. The following matrices represent (for 3 variables) the global and local orderings defined above (note that the matrix is not uniquely determined by the ordering): @ifinfo @table @asis @item lp: 1 0 0 @* 0 1 0 @* 0 0 1 @item dp: 1 1 1 @* 0 0 -1 @* 0 -1 0 @item Dp: 1 1 1 @* 1 0 0 @* 0 1 0 @item wp(1,2,3): 1 2 3 @* 0 0 -1 @* 0 -1 0 @item Wp(1,2,3): 1 2 3 @* 1 0 0 @* 0 1 0 @item ls: -1 0 0 @* 0 -1 0 @* 0 0 -1 @item ds: -1 -1 -1 @* 0 0 -1 @* 0 -1 0 @item Ds: -1 -1 -1 @* 1 0 0 @* 0 1 0 @item ws(1,2,3): -1 -2 -3 @* 0 0 -1 @* 0 -1 0 @item Ws(1,2,3): -1 -2 -3 @* 1 0 0 @* 0 1 0 @end table @end ifinfo @tex $\quad$ lp: $\left(\matrix{ 1 & 0 & 0 \cr 0 & 1 & 0 \cr 0 & 0 & 1 \cr }\right)$ \quad dp: $\left(\matrix{ 1 & 1 & 1 \cr 0 & 0 &-1 \cr 0 &-1 & 0 \cr }\right)$ \quad Dp: $\left(\matrix{ 1 & 1 & 1 \cr 1 & 0 & 0 \cr 0 & 1 & 0 \cr }\right)$ $\quad$ wp(1,2,3): $\left(\matrix{ 1 & 2 & 3 \cr 0 & 0 &-1 \cr 0 &-1 & 0 \cr }\right)$ \quad Wp(1,2,3): $\left(\matrix{ 1 & 2 & 3 \cr 1 & 0 & 0 \cr 0 & 1 & 0 \cr }\right)$ $\quad$ ls: $\left(\matrix{ -1 & 0 & 0 \cr 0 &-1 & 0 \cr 0 & 0 &-1 \cr }\right)$ \quad ds: $\left(\matrix{ -1 &-1 &-1 \cr 0 & 0 &-1 \cr 0 &-1 & 0 \cr }\right)$ \quad Ds: $\left(\matrix{ -1 &-1 &-1 \cr 1 & 0 & 0 \cr 0 & 1 & 0 \cr }\right)$ $\quad$ ws(1,2,3): $\left(\matrix{ -1 &-2 &-3 \cr 0 & 0 &-1 \cr 0 &-1 & 0 \cr }\right)$ \quad Ws(1,2,3): $\left(\matrix{ -1 &-2 &-3 \cr 1 & 0 & 0 \cr 0 & 1 & 0 \cr }\right)$ @end tex Product orderings (see next section) represented by a matrix: @ifinfo @table @asis @item (dp(3), wp(1,2,3)): 1 1 1 0 0 0 @*0 0 -1 0 0 0 @*0 -1 0 0 0 0 @*0 0 0 1 2 3 @*0 0 0 0 0 -1 @*0 0 0 0 -1 0 @item (Dp(3), ds(3)): 1 1 1 0 0 0 @*1 0 0 0 0 0 @*0 1 0 0 0 0 @*0 0 0 -1 -1 -1 @*0 0 0 0 0 -1 @*0 0 0 0 -1 0 @end table @end ifinfo @tex $\quad$ (dp(3), wp(1,2,3)): $\left(\matrix{ 1& 1& 1& 0& 0& 0 \cr 0& 0& -1& 0& 0& 0 \cr 0& -1& 0& 0& 0& 0 \cr 0& 0& 0& 1& 2& 3 \cr 0& 0& 0& 0& 0& -1 \cr 0& 0& 0& 0& -1& 0 \cr }\right)$ $\quad$ (Dp(3), ds(3)): $\left(\matrix{ 1& 1& 1& 0& 0& 0 \cr 1& 0& 0& 0& 0& 0 \cr 0& 1& 0& 0& 0& 0 \cr 0& 0& 0& -1& -1& -1 \cr 0& 0& 0& 0& 0& -1 \cr 0& 0& 0& 0& -1& 0 \cr }\right)$ @end tex Orderings with extra weight vector (see below) represented by a matrix: @ifinfo @table @asis @item (dp(3), a(1,2,3),dp(3)): 1 1 1 0 0 0 @*0 0 -1 0 0 0 @*0 -1 0 0 0 0 @*0 0 0 1 2 3 @*0 0 0 1 1 1 @*0 0 0 0 0 -1 @*0 0 0 0 -1 0 @item (a(1,2,3,4,5),Dp(3), ds(3)): 1 2 3 4 5 0 @*1 1 1 0 0 0 @*1 0 0 0 0 0 @*0 1 0 0 0 0 @*0 0 0 -1 -1 -1 @*0 0 0 0 0 -1 @*0 0 0 0 -1 0 @end table @end ifinfo @tex $\quad$ (dp(3), a(1,2,3),dp(3)): $\left(\matrix{ 1& 1& 1& 0& 0& 0 \cr 0& 0& -1& 0& 0& 0 \cr 0& -1& 0& 0& 0& 0 \cr 0& 0& 0& 1& 2& 3 \cr 0& 0& 0& 1& 1& 1 \cr 0& 0& 0& 0& 0& -1 \cr 0& 0& 0& 0& -1& 0 \cr }\right)$ $\quad$ (a(1,2,3,4,5),Dp(3), ds(3)): $\left(\matrix{ 1& 2& 3& 4& 5& 0 \cr 1& 1& 1& 0& 0& 0 \cr 1& 0& 0& 0& 0& 0 \cr 0& 1& 0& 0& 0& 0 \cr 0& 0& 0& -1& -1& -1 \cr 0& 0& 0& 0& 0 & -1 \cr 0& 0& 0& 0& -1& 0 \cr }\right)$ @end tex @*@strong{Example}: @smallexample @c computed example Matrix_orderings pdata.doc:1219 ring r = 0, (x,y,z), M(1, 0, 0, 0, 1, 0, 0, 0, 1); @c end example Matrix_orderings pdata.doc:1219 @end smallexample @*which may also be written as: @smallexample @c computed example Matrix_orderings_1 pdata.doc:1225 intmat m[3][3]=1, 0, 0, 0, 1, 0, 0, 0, 1; m; @expansion{} 1,0,0, @expansion{} 0,1,0, @expansion{} 0,0,1 ring r = 0, (x,y,z), M(m); r; @expansion{} // characteristic : 0 @expansion{} // number of vars : 3 @expansion{} // block 1 : ordering M @expansion{} // : names x y z @expansion{} // : weights 1 0 0 @expansion{} // : weights 0 1 0 @expansion{} // : weights 0 0 1 @expansion{} // block 2 : ordering C @c end example Matrix_orderings_1 pdata.doc:1225 @end smallexample If the ring has @tex $n$ @end tex @ifinfo n @end ifinfo variables and the matrix contains less than @tex $n \times n$ @end tex @ifinfo n x n @end ifinfo entries an error message is given, if there are more entries, the last ones are ignored. @strong{WARNING:} @sc{Singular} does not check whether the matrix has full rank. In such a case some computations might not terminate, others might give a nonsense result. Having these matrix orderings @sc{Singular} can compute standard bases for any monomial ordering which is compatible with the natural semigroup structure. In practice the global and local orderings together with block orderings should be sufficient in most cases. These orderings are faster than the corresponding matrix orderings, since evaluating a matrix product is time consuming. @c -------------------------------------------------------------------------- @node Product orderings, Extra weight vector, Matrix orderings, Monomial orderings @subsection Product orderings @cindex Product orderings @cindex orderings, product Let @ifinfo x = (x_1, @dots{}, x_n) = x(1..n) and y = (y_1, @dots{}, y_m) = y(1..m) @end ifinfo @tex $x = (x_1, \ldots, x_n)$ and $y = (y_1, \ldots, y_m)$ @end tex be two ordered sets of variables, @ifinfo <_1 a monomial ordering on K[x] and <_2 a monomial ordering on K[y]. The product ordering (or block ordering) < = (<_1,<_2) on K[x,y] is the following: @*x^a y^b < x^A y^B <==> @*x^a <_1 x^A @*or @*x^a = x^A and y^b <_2 y^B. @end ifinfo @iftex @tex $<_1$ a monomial ordering on $K[x]$ and $<_2$ a monomial ordering on $K[y]$. The product ordering (or block ordering) $<\ := (<_1,<_2)$ on $K[x,y]$ is the following: @end tex @* @tex \quad \quad $x^a y^b < x^A y^B \Leftrightarrow x^a <_1 x^A $ or ($x^a = x^A$ and $y^b <_2 y^B$). @end tex @end iftex Inductively one defines the product ordering of more than two monomial orderings. In @sc{Singular}, any of the above global orderings, local orderings or matrix orderings may be combined (in an arbitrary manner and length) to a product ordering. E.g., @code{(lp(3), M(1, 2, 3, 1, 1, 1, 1, 0, 0), ds(4), ws(1,2,3))} defines: @code{lp} on the first 3 variables, the matrix ordering @code{M(1, 2, 3, 1, 1, 1, 1, 0, 0)} on the next 3 variables, @code{ds} on the next 4 variables and @code{ws(1,2,3)} on the last 3 variables. @c -------------------------------------------------------------- @node Extra weight vector, , Product orderings, Monomial orderings @subsection Extra weight vector @cindex Extra weight vector @cindex a, ordering @cindex orderings, a @ifinfo a(w_1, @dots{}, w_n), @end ifinfo @tex ${\tt a}(w_1, \ldots, w_n),\; $ @end tex @ifinfo w_1,@dots{},w_n @end ifinfo @tex $w_1,\ldots,w_n$ @end tex any integers (including 0), defines @ifinfo deg(x^a) = w_1 a_1 + @dots{} + w_n a_n @end ifinfo @tex $\deg(x^\alpha) = w_1 \alpha_1 + \cdots + w_n\alpha_n$ @end tex and @* @ifinfo deg(x^a) < deg(x^b) ==> x^a < x^b @end ifinfo @tex $$\deg(x^\alpha) < \deg(x^\beta) \Rightarrow x^\alpha < x^\beta,$$ @end tex @ifinfo @* deg(x^a) > deg(x^b) ==> x^a > x^b. @end ifinfo @tex $$\deg(x^\alpha) > \deg(x^\beta) \Rightarrow x^\alpha > x^\beta. $$ @end tex @*An extra weight vector does not define a monomial ordering by itself: it can only be used in combination with other orderings to insert an extra line of weights into the ordering matrix. @*@strong{Example}: @smallexample ring r = 0, (x,y,z), (a(1,2,3),wp(4,5,2)); ring s = 0, (x,y,z), (a(1,2,3),dp); ring q = 0, (a,b,c,d),(lp(1),a(1,2,3),ds); @end smallexample texi2html-1.82/test/singular_manual/tutor.tex0000644000175000017500000000347611264347126023307 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @comment Id: tutor.tex,v 1.1 2003/08/08 14:27:06 pertusus Exp $ @c --------------------------------------------------------------------------- @comment %**start of header @c ----------------------- @setfilename tutor.hlp @settitle Singular Tutorial @iftex @afourpaper @finalout @end iftex @comment %**end of header @c ------------------------ @set VERSION 1.2 @c ------------------------ @html

    @end html @ifinfo this is the texinfo file with the Singular Tutorial (version @value{VERSION}) @end ifinfo @c @c ---------------------------------------------------------------------------- @node Top, Preface, (dir), (dir) @ifinfo @c q: quit help, m: menu item, n: next node, p: previous node, u: up @sp 1 @center Singular Tutorial @center Version @value{VERSION} @center A Computer Algebra System for Polynomial Computations @sp 2 @center University of Kaiserslautern @center Department of Mathematics and Centre for Computer algebra @end ifinfo @menu * Preface:: * Introduction:: * Getting started:: * Examples:: @end menu @c ---------------------------------------------------------------------------- @node Preface, Introduction, (dir), (dir) @chapter Preface @cindex Preface @include copyright.tex @c ---------------------------------------------------------------------------- @node Introduction, Examples, Preface, Top @chapter Introduction @cindex Introduction @include start.tex @c ---------------------------------------------------------------------------- @node Examples,Index,Introduction, Top @chapter Examples @cindex Examples @include examples.tex @c ---------------------------------------------------------------------------- @node ,,Examples,Top @contents @bye texi2html-1.82/test/singular_manual/exmpl.tex0000644000175000017500000000056711264347126023255 0ustar flichtenheldflichtenheld\documentclass{article} \usepackage{amsmath,amssymb} \setlength{\textwidth}{390pt} \parindent=0pt \newcommand{\C}{\mathbb{C}} \newcommand{\F}{\mathbb{F}} \newcommand{\N}{\mathbb{N}} \newcommand{\Q}{\mathbb{Q}} \newcommand{\R}{\mathbb{R}} \newcommand{\T}{\mathbb{T}} \newcommand{\Z}{\mathbb{Z}} \begin{document} $$hello $$ \end{document} - Thanks latex.lib and Singular - texi2html-1.82/test/singular_manual/info.texi0000644000175000017500000000062011264347126023222 0ustar flichtenheldflichtenheld@ifclear singularmanual @heading More information about @sc{Singular}: Comments, Questions, Bug Reports More and up-to-date information about @sc{Singular} is always available from @display @uref{http://www.singular.uni-kl.de}. @end display We very much welcome any comments, questions, and bug reports. Please contact us at @display @email{singular@@mathematik.uni-kl.de}. @end display @end ifclear texi2html-1.82/test/singular_manual/singular.texi0000644000175000017500000006025011264347126024120 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @comment Id: singular.tex,v 1.1 2003/08/08 14:27:06 pertusus Exp $ @comment This file was generated by doc2tex.pl from singular.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT singular.doc INSTEAD @comment this file contains the main structure of the manual @c ------------------------ @c %**start of header @c ------------------------ @include version.texi @setfilename singular.hlp @settitle Singular @value{VERSION} Manual @c @setchapternewpage odd @paragraphindent 0 @c ------------------------ @c %**end of header @c ------------------------ @c --------------------- general settings -------------------- @iftex @afourpaper @finalout @pagesizes 23cm, 16.5cm @end iftex @set singularmanual 1 @c @set namespaces 1 @include uname.texi @c --------------------- end general setting -------------------- @c --------------------- invisible Info header ------------------------ @ifinfo This is the texinfo file describing Singular (version @value{VERSION}) @end ifinfo @c --------------------- end Info invisible header -------------------- @c --------------------- tex titlepage -------------------- @titlepage @sp 2 @center @titlefont{Singular} @sp 2 @center A Computer Algebra System for Polynomial Computations @sp 5 @center @titlefont{Manual} @center Version @value{VERSION} @sp 2 @center Singular is created and its development is directed and coordinated by @center G.-M. Greuel, G. Pfister, and H. Sch@"onemann @sp 2 @center with contributions by @center O. Bachmann, W. Decker, S. Endra@ss{}, I. Farran, A. Fr@"uhbis-Kr@"uger, C. Gorzel, @center H. Grassmann, A. Heydtmann, D. Hillebrand, T. Keilen, U. Klein, K. Kr@"uger, M. Lamm, @center C. Lossen, B. Martin, M. Me@ss{}ollen, W. Neumann, T. N@"u@ss{}ler, W. Pohl, T. Siebert, @center J. Schmidt, M. Schulze, R. Stobbe, M. Wenk, T. Wichmann @sp 2 @author Fachbereich Mathematik @author Zentrum f@"ur Computeralgebra @author Universit@"at Kaiserslautern @author D-67653 Kaiserslautern @end titlepage @c print short table of contents in tex right after titlepage @c Detailed ToC is printed at the end of the manual @shortcontents @c -----------------------Top node----------------------------------- @node Top, Preface, (dir), (dir) @ifnothtml @ifinfo @center @strong{SINGULAR} @center A Computer Algebra System for Polynomial Computations @center User Manual for @sc{Singular} Version @value{VERSION} @center @uref{http://www.singular.uni-kl.de} @end ifinfo @end ifnothtml @ifhtml @html

    A Computer Algebra System for Polynomial Computations

    HTML User Manual for Singular Version @end html @value{VERSION}, @value{VERSION_DATE} @html

    University of Kaiserslautern
    Department of Mathematics
    Centre for Computer Algebra

    @end html @end ifhtml @menu * Preface:: * Introduction:: * General concepts:: * Data types:: * Functions and system variables:: * Tricks and pitfalls:: * Examples:: * Polynomial data:: * Mathematical background:: * SINGULAR libraries:: * Release Notes:: * Index:: @end menu @c ---------------------------------------------------------------------------- @node Preface, Introduction, Top, Top @chapter Preface @cindex Preface @include COPYING.texi @c ---------------------------------------------------------------------------- @node Introduction, General concepts, Preface, Top @chapter Introduction @cindex Introduction @include start.tex @c ---------------------------------------------------------------------------- @node General concepts, Data types, Introduction, Top @chapter General concepts @cindex General concepts @include general.tex @c ---------------------------------------------------------------------------- @node Data types, Functions and system variables, General concepts, Top @chapter Data types @cindex Data types @include types.tex @c ---------------------------------------------------------------------------- @node Functions and system variables, Tricks and pitfalls, Data types, Top @chapter Functions and system variables @cindex Commands @include reference.tex @c ---------------------------------------------------------------------------- @node Tricks and pitfalls, Examples, Functions and system variables, Top @chapter Tricks and pitfalls @cindex Tricks and pitfalls @include tricks.tex @c ---------------------------------------------------------------------------- @node Examples, Polynomial data, Tricks and pitfalls, Top @appendix Examples @cindex Examples @include examples.tex @c ---------------------------------------------------------------------------- @node Polynomial data,Mathematical background, Examples, Top @appendix Polynomial data @cindex Polynomial data @include pdata.tex @c ---------------------------------------------------------------------------- @node Mathematical background, SINGULAR libraries, Polynomial data, Top @appendix Mathematical background @cindex Mathematical background @include math.tex @c ---------------------------------------------------------------------------- @node SINGULAR libraries, Release Notes, Mathematical background, Top @appendix SINGULAR libraries @cindex SINGULAR libraries @cindex LIBs @sc{Singular} comes with a set of standard libraries. Their content is described in the following subsections. Use the @ref{LIB} command for loading of single libraries, and the command @code{LIB "all.lib";} for loading all libraries. @menu * standard_lib:: extensions of Singular kernel * General purpose:: * Linear algebra:: * Commutative algebra:: * Singularities:: * Invariant theory:: * Symbolic-numerical solving:: * Visualization:: * Coding theory:: @end menu @c ---------------------------------------------------------- @node standard_lib, General purpose, SINGULAR libraries, SINGULAR libraries @section standard_lib The library @code{standard.lib} provides extensions to the set of built-in commands and is automatically loaded during the start of @sc{Singular}, unless @sc{Singular} is started up with the @code{--no-stdlib} command line option (see @ref{Command line options}). @c start include of docu for standard.lib:LibInfo @c ---content LibInfo--- @comment This file was generated by doc2tex.pl from d2t_singular/standard_lib.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/standard_lib.doc INSTEAD @c library version: (1.58.2.9,2003/06/16) @c library file: ../Singular/LIB/standard.lib @cindex standard.lib @cindex standard_lib @table @asis @item @strong{Library:} standard.lib @item @strong{Purpose:} Procedures which are always loaded at Start-up @end table @strong{Procedures:} @menu * stdfglm:: standard basis of ideal via fglm [and ordering ord] * stdhilb:: standard basis of ideal using the Hilbert function * groebner:: standard basis using a heuristically chosen method * quot:: quotient using heuristically chosen method * res:: free resolution of ideal or module * sprintf:: returns formatted string * fprintf:: writes formatted string to link * printf:: displays formatted string @end menu @c ---end content LibInfo--- @c generated lib proc docu for standard.lib:LibInfo singular.doc:200 @c end include of docu for standard.lib:LibInfo @c ---------------------------------------------------------------------------- @node General purpose, Linear algebra, standard_lib, SINGULAR libraries @section General purpose @cindex General purpose @menu * all_lib:: load all other libraries * general_lib:: procedures of general type * inout_lib:: procedures for manipulating in- and output * poly_lib:: procedures for manipulating polynomials and ideals * random_lib:: procedures of random/sparse matrix and poly operations * ring_lib:: procedures for manipulating rings and maps @end menu @c ---------------------------------------------------------- @node all_lib, general_lib, General purpose, General purpose @subsection all_lib @cindex all_lib @cindex all.lib The library @code{all.lib} provides a convenient way to load all libraries of the @sc{Singular} distribution. @strong{Example:} @smallexample @c reused example all_lib singular.doc:227 option(loadLib); LIB "all.lib"; @expansion{} // ** loaded all.lib (1.35.2.4,2003/02/25) @expansion{} // ** loaded makedbm.lib (1.11,2000/12/22) @expansion{} // ** loaded brnoeth.lib (1.11.2.5,2002/10/18) @expansion{} // ** loaded paramet.lib (1.11.2.1,2002/10/21) @expansion{} // ** loaded surf.lib (1.19.2.6,2002/07/17) @expansion{} // ** loaded latex.lib (1.19.2.1,2002/02/20) @expansion{} // ** loaded graphics.lib (1.10,2001/02/19) @expansion{} // ** loaded zeroset.lib (1.7.2.2,2002/02/20) @expansion{} // ** loaded ntsolve.lib (1.12.2.1,2002/04/12) @expansion{} // ** loaded triang.lib (1.7,2001/02/19) @expansion{} // ** loaded solve.lib (1.21.2.13,2002/10/21) @expansion{} // ** loaded presolve.lib (1.17.2.6,2003/03/26) @expansion{} // ** loaded stratify.lib (1.7.2.4,2002/04/11) @expansion{} // ** loaded rinvar.lib (1.7.2.3,2002/02/20) @expansion{} // ** loaded finvar.lib (1.32.2.2,2002/08/13) @expansion{} // ** loaded ainvar.lib (1.6.2.2,2002/04/12) @expansion{} // ** loaded spectrum.lib (1.12.2.3,2002/03/06) @expansion{} // ** loaded spcurve.lib (1.15.2.1,2002/02/20) @expansion{} // ** loaded sing.lib (1.24.2.5,2003/04/15) @expansion{} // ** loaded qhmoduli.lib (1.0,2000/12/12) @expansion{} // ** loaded mondromy.lib (1.22.2.2,2002/02/20) @expansion{} // ** loaded hnoether.lib (1.29.2.14,2002/10/21) @expansion{} // ** loaded gaussman.lib (1.33.2.26,2003/02/10) @expansion{} // ** loaded equising.lib (1.7.2.5,2003/02/25) @expansion{} // ** loaded deform.lib (1.25.2.2,2003/02/24) @expansion{} // ** loaded classify.lib (1.48.2.4,2002/04/11) @expansion{} // ** loaded toric.lib (1.11,2001/02/06) @expansion{} // ** loaded intprog.lib (1.5,2001/02/06) @expansion{} // ** loaded reesclos.lib (1.50,2001/08/06) @expansion{} // ** loaded primitiv.lib (1.15,2001/02/05) @expansion{} // ** loaded primdec.lib (1.98.2.14,2003/04/07) @expansion{} // ** loaded normal.lib (1.34.2.17,2002/10/21) @expansion{} // ** loaded mregular.lib (1.6.2.1,2002/02/20) @expansion{} // ** loaded mprimdec.lib (1.1.2.3,2002/03/19) @expansion{} // ** loaded homolog.lib (1.15.2.2,2002/10/07) @expansion{} // ** loaded elim.lib (1.14.2.4,2003/04/16) @expansion{} // ** loaded algebra.lib (1.9.2.3,2002/04/11) @expansion{} // ** loaded linalg.lib (1.10.2.15,2003/04/04) @expansion{} // ** loaded matrix.lib (1.26.2.2,2002/10/07) @expansion{} // ** loaded ring.lib (1.17.2.1,2002/02/20) @expansion{} // ** loaded random.lib (1.16.2.1,2002/02/20) @expansion{} // ** loaded poly.lib (1.33.2.6,2003/02/10) @expansion{} // ** loaded inout.lib (1.21.2.5,2002/06/12) @expansion{} // ** loaded general.lib (1.38.2.9,2003/04/04) @c end example all_lib singular.doc:227 @end smallexample @c ---------------------------------------------------------- @node general_lib, inout_lib, all_lib, General purpose @subsection general_lib @c include of docu for general.lib @include d2t_singular/general_lib.tex @c ---------------------------------------------------------- @node inout_lib, poly_lib, general_lib, General purpose @subsection inout_lib @c include of docu for inout.lib @include d2t_singular/inout_lib.tex @c ---------------------------------------------------------- @node poly_lib, random_lib, inout_lib, General purpose @subsection poly_lib @c include of docu for poly.lib @include d2t_singular/poly_lib.tex @c ---------------------------------------------------------- @node random_lib, ring_lib, poly_lib, General purpose @subsection random_lib @c include of docu for random.lib @include d2t_singular/random_lib.tex @c ---------------------------------------------------------- @node ring_lib, , random_lib, General purpose @subsection ring_lib @c include of docu for ring.lib @include d2t_singular/ring_lib.tex @c ---------------------------------------------------------------------------- @node Linear algebra, Commutative algebra, General purpose, SINGULAR libraries @section Linear algebra @cindex Linear algebra @menu * matrix_lib:: procedures for matrix operations * linalg_lib:: procedures for algorithmic linear algebra @end menu @c ---------------------------------------------------------- @node matrix_lib, linalg_lib, Linear algebra, Linear algebra @subsection matrix_lib @c include of docu for matrix.lib @include d2t_singular/matrix_lib.tex @c --------------------------------------------------------- @node linalg_lib, , matrix_lib, Linear algebra @subsection linalg_lib @c include of docu for linalg.lib @include d2t_singular/linalg_lib_noEx.tex @c ---------------------------------------------------------------------------- @node Commutative algebra, Singularities, Linear algebra, SINGULAR libraries @section Commutative algebra @cindex Commutative algebra @menu * algebra_lib:: procedures for computing with algebras and maps * elim_lib:: procedures for elimination, saturation and blowing up * homolog_lib:: procedures for homological algebra * mprimdec_lib:: procedures for primary decomposition of modules * mregular_lib:: procedures for Castelnuovo-Mumford regularity * normal_lib:: procedure for normalization * primdec_lib:: procedures for primary decomposition * primitiv_lib:: procedures for finding a primitive element * reesclos_lib:: Rees Algebra and integral closure of an ideal * intprog_lib:: Integer Programming * toric_lib:: toric ideals @end menu @c --------------------------------------------------------- @node algebra_lib, elim_lib, Commutative algebra, Commutative algebra @subsection algebra_lib @c include of docu for algebra.lib @include d2t_singular/algebra_lib.tex @c ---------------------------------------------------------- @node elim_lib, homolog_lib, algebra_lib, Commutative algebra @subsection elim_lib @c include of docu for elim.lib @include d2t_singular/elim_lib.tex @c ---------------------------------------------------------- @node homolog_lib, mprimdec_lib, elim_lib, Commutative algebra @subsection homolog_lib @c include of docu for homolog.lib @include d2t_singular/homolog_lib.tex @c ---------------------------------------------------------- @node mprimdec_lib, mregular_lib, homolog_lib, Commutative algebra @subsection mprimdec_lib @c include of docu for mprimdec.lib @include d2t_singular/mprimdec_lib.tex @c ---------------------------------------------------------- @node mregular_lib, normal_lib, mprimdec_lib, Commutative algebra @subsection mregular_lib @c include of docu for mregular.lib @include d2t_singular/mregular_lib.tex @c --------------------------------------------------------- @node normal_lib, primdec_lib, mregular_lib, Commutative algebra @subsection normal_lib @c include of docu for normal.lib @include d2t_singular/normal_lib.tex @c ---------------------------------------------------------- @node primdec_lib, primitiv_lib, normal_lib, Commutative algebra @subsection primdec_lib @c include of docu for primdec.lib @include d2t_singular/primdec_lib.tex @c --------------------------------------------------------- @node primitiv_lib, reesclos_lib, primdec_lib, Commutative algebra @subsection primitiv_lib @c include of docu for primitiv.lib @include d2t_singular/primitiv_lib.tex @c --------------------------------------------------------- @node reesclos_lib, intprog_lib, primitiv_lib, Commutative algebra @subsection reesclos_lib @c include of docu for reesclos.lib @include d2t_singular/reesclos_lib.tex @c --------------------------------------------------------- @node intprog_lib, toric_lib, reesclos_lib, Commutative algebra @subsection intprog_lib @c include of docu for intprog.lib @include d2t_singular/intprog_lib.tex @c --------------------------------------------------------- @node toric_lib, ,intprog_lib, Commutative algebra @subsection toric_lib @c include of docu for toric.lib @include d2t_singular/toric_lib.tex @c ---------------------------------------------------------------------------- @node Singularities, Invariant theory, Commutative algebra, SINGULAR libraries @section Singularities @cindex Singularities @menu @c * alexpoly_lib:: Resolution Graph and Alexander Polynomial * classify_lib:: procedures for the Arnold-classifier of singularities * deform_lib:: procedures for computing miniversal deformation * equising_lib:: procedures for equisingularity strata * gaussman_lib:: procedures for gauss-manin connection of a singularity * hnoether_lib:: procedures for the Hamburger-Noether (Puiseux) development * mondromy_lib:: procedures to compute the monodromy of a singularity * qhmoduli_lib:: procedures for moduli spaces of sqh-singularities * sing_lib:: procedures for computing invariants of singularities * spcurve_lib:: procedures for cm codimension 2 singularities * spectrum_lib:: procedures for computing singularity spectra @end menu @c --------------------------------------------------------- @c @node alexpoly_lib, classify_lib, Singularities, Singularities @c @subsection alexpoly_lib @c @c lib alexpoly.lib @c --------------------------------------------------------- @c @node classify_lib, deform_lib, alexpoly_lib, Singularities @node classify_lib, deform_lib, Singularities, Singularities @subsection classify_lib @c include of docu for classify.lib @include d2t_singular/classify_lib.tex @c ---------------------------------------------------------- @node deform_lib, equising_lib, classify_lib, Singularities @subsection deform_lib @c include of docu for deform.lib @include d2t_singular/deform_lib.tex @c ---------------------------------------------------------- @node equising_lib, gaussman_lib, deform_lib, Singularities @subsection equising_lib @c include of docu for equising.lib @include d2t_singular/equising_lib.tex @c ---------------------------------------------------------- @node gaussman_lib, hnoether_lib, equising_lib, Singularities @subsection gaussman_lib @c include of docu for gaussman.lib @include d2t_singular/gaussman_lib.tex @c --------------------------------------------------------- @node hnoether_lib, mondromy_lib, gaussman_lib, Singularities @subsection hnoether_lib @c include of docu for hnoether.lib @include d2t_singular/hnoether_lib.tex @c --------------------------------------------------------- @node mondromy_lib, qhmoduli_lib, hnoether_lib, Singularities @subsection mondromy_lib @c include of docu for mondromy.lib @include d2t_singular/mondromy_lib.tex @c --------------------------------------------------------- @node qhmoduli_lib, sing_lib, mondromy_lib, Singularities @subsection qhmoduli_lib @c include of docu for qhmoduli.lib @include d2t_singular/qhmoduli_lib.tex @c ---------------------------------------------------------- @node sing_lib, spcurve_lib, qhmoduli_lib, Singularities @subsection sing_lib @c include of docu for sing.lib @include d2t_singular/sing_lib.tex @c --------------------------------------------------------- @node spcurve_lib, spectrum_lib, sing_lib, Singularities @subsection spcurve_lib @c include of docu for spcurve.lib @include d2t_singular/spcurve_lib.tex @c --------------------------------------------------------- @node spectrum_lib, , spcurve_lib, Singularities @subsection spectrum_lib @c include of docu for spectrum.lib @include d2t_singular/spectrum_lib.tex @c ---------------------------------------------------------------------------- @node Invariant theory, Symbolic-numerical solving, Singularities, SINGULAR libraries @section Invariant theory @cindex Invariant theory @menu * finvar_lib:: procedures to compute invariant rings of finite groups * ainvar_lib:: procedures to compute invariants rings of the additive group * rinvar_lib:: procedures to compute invariants ring of reductive groups * stratify_lib:: algorithmic stratification by the Greuel-Pfister algorithm @end menu @c ---------------------------------------------------------- @node finvar_lib, ainvar_lib, Invariant theory, Invariant theory @subsection finvar_lib @c include of docu for finvar.lib @include d2t_singular/finvar_lib.tex @c ---------------------------------------------------------- @node ainvar_lib, rinvar_lib, finvar_lib, Invariant theory @subsection ainvar_lib @c include of docu for ainvar.lib @include d2t_singular/ainvar_lib.tex @c ---------------------------------------------------------- @node rinvar_lib, stratify_lib, ainvar_lib, Invariant theory @subsection rinvar_lib @c include of docu for rinvar.lib @include d2t_singular/rinvar_lib.tex @c ---------------------------------------------------------- @node stratify_lib, ,rinvar_lib, Invariant theory @subsection stratify_lib @c include of docu for stratify.lib @include d2t_singular/stratify_lib.tex @c ---------------------------------------------------------------------------- @node Symbolic-numerical solving, Visualization, Invariant theory, SINGULAR libraries @section Symbolic-numerical solving @cindex Symbolic-numerical solving @menu * presolve_lib:: procedures for pre-solving polynomial equations * solve_lib:: procedures to solve polynomial systems * triang_lib:: procedures for decomposing zero-dimensional ideals * ntsolve_lib:: one real solution of polynomial systems (Newton iteration) * zeroset_lib:: procedures for roots and factorization @end menu @c --------------------------------------------------------- @node presolve_lib, solve_lib, Symbolic-numerical solving, Symbolic-numerical solving @subsection presolve_lib @c include of docu for presolve.lib @include d2t_singular/presolve_lib.tex @c --------------------------------------------------------- @node solve_lib, triang_lib, presolve_lib, Symbolic-numerical solving @subsection solve_lib @c include of docu for solve.lib @include d2t_singular/solve_lib.tex @c --------------------------------------------------------- @node triang_lib, ntsolve_lib, solve_lib, Symbolic-numerical solving @subsection triang_lib @c include of docu for triang.lib @include d2t_singular/triang_lib_noEx.tex @c --------------------------------------------------------- @node ntsolve_lib, zeroset_lib, triang_lib, Symbolic-numerical solving @subsection ntsolve_lib @c include of docu for ntsolve.lib @include d2t_singular/ntsolve_lib.tex @c --------------------------------------------------------- @node zeroset_lib, , ntsolve_lib, Symbolic-numerical solving @subsection zeroset_lib @c include of docu for zeroset.lib @include d2t_singular/zeroset_lib.tex @c ---------------------------------------------------------------------------- @node Visualization, Coding theory, Symbolic-numerical solving, SINGULAR libraries @section Visualization @cindex Visualization @menu * graphics_lib:: procedures to draw with Mathematica * latex_lib:: procedures for typesetting in TeX * paramet_lib:: procedures for parametrizations * surf_lib:: interface to the surf program @end menu @c --------------------------------------------------------- @node graphics_lib, latex_lib, Visualization, Visualization @subsection graphics_lib @c include of docu for graphics.lib @include d2t_singular/graphics_lib_noEx.tex @c --------------------------------------------------------- @node latex_lib, paramet_lib, graphics_lib, Visualization @subsection latex_lib @c include of docu for latex.lib @include d2t_singular/latex_lib.tex @c --------------------------------------------------------- @node paramet_lib, surf_lib, latex_lib, Visualization @subsection paramet_lib @c include of docu for paramet.lib @include d2t_singular/paramet_lib.tex @c --------------------------------------------------------- @node surf_lib,, paramet_lib, Visualization @subsection surf_lib @c include of docu for surf.lib @include d2t_singular/surf_lib_noEx.tex @c ---------------------------------------------------------------------------- @node Coding theory, , Visualization, SINGULAR libraries @section Coding theory @cindex Coding theory @menu * brnoeth_lib:: Brill-Noether algorithm, Weierstrass semigroups and AG codes @end menu @c --------------------------------------------------------- @node brnoeth_lib, , , Coding theory @subsection brnoeth_lib @c include of docu for brnoeth.lib @include d2t_singular/brnoeth_lib.tex @c ---------------------------------------------------------- @node Release Notes, Index, SINGULAR libraries, Top @chapter Release Notes @cindex Release Notes @include platform.tex @c ---------------------------------------------------------- @node Index, , Release Notes, Top @chapter Index @cindex Index @printindex cp @c --------------------------------------------------------- @c generate table of content and short table of content @contents @bye texi2html-1.82/test/singular_manual/INSTALL_win.texi0000644000175000017500000002544011264347126024261 0ustar flichtenheldflichtenheld@comment -*-texinfo-*- @comment Id: INSTALL_win.texi,v 1.1 2003/08/08 14:27:06 pertusus Exp $ @c FILE: INSTALL.texi @c PURPOSE: Installation instructions for Singular on MSWindows @c This file is displayed during installation and copied to @c /etc/INSTALL @c use set CD for producing a special INSTALL_win which will be opened @c by the autorun on the Singular CD @ifclear singularmanual @c @set CD @end ifclear @ifclear VERSION @include version.texi @end ifclear @ifclear singularmanual @majorheading Installation instructions for Singular on MS Windows. @end ifclear @heading For the impatient: @itemize @item If you run Windows NT/2K/XP, make sure you are logged in with the @code{Administrator} rights. @item If you have some older version of @code{Singular} installed, please uninstall it before installing @code{Singular-@value{VERSION}}. It is recommended to install the new @code{Singular} in the same directory where the previous version was installed. Thus your existing environment will be used automatically. @item If you have @code{Cygwin} or @code{XEmacs} installed and they do not belong of some previous @code{Singular} installation, please read the information below. @item Execute the self-extracting installation archive and @strong{carefully} follow the instructions given there. Setup will analyze your system, create the corresponding configuration and give you further tips on the installation process. @item In case of troubles, see the installed files @code{/etc/INSTALL.txt}, @code{/etc/TROUBLESHOOTING.txt} or visit the @strong{Singular Forum} at @uref{http://www.singular.uni-kl.de/forum}. @end itemize @ifset CD @ifhtml @heading @strong{ @uref{Singular-@value{VERSION}-Typical.exe, Install Singular-@value{VERSION} Now!}} @end ifhtml @end ifset @heading Installation preliminaries Running @code{Singular} on MS Windows requires that the Cygwin DLL (dynamically linked library) version 1.3.9 or higher is installed on your system (see @uref{http://sources.redhat.com/cygwin/} for details about Cygwin). We install and configure @code{Cygwin} version 1.3.9 automatically, if the @code{BasicCygwin} component is selected (default setting). To run @code{ESingular} (i.e. @code{Singular} within its Emacs interface) on MS Windows requires furthermore that the @code{XEmacs} editor is installed on your system. We install and configure @code{XEmacs} version 21.1.13 automatically, if the @code{XEmacs} component is selected. @cindex Windows installation, components @cindex Components of Windows installation The @code{Singular} installation is divided into the following components (you see them explicitly if you choose the Custom Setup Type during the installation): @table @code @item @strong{Program Files:} @table @code @item Singular Contains the @code{Singular} Program, documentation and example files. @*All files of this component are installed under the directory @code{/usr/local/Singular/@value{VERSION}} @item BasicCygwin Contains the Cygwin DLL and basic tools/programs (like @code{bash} or @code{info}) of the Cygwin environment. @*The Cygwin DLL and programs are installed in the directory @code{/bin}. Miscellaneous documentation and configuration files are installed into the directory @code{/etc}. @item XEmacs Contains the Cygwin port of the @code{XEmacs} editor (see @url{http://www.xemacs.org} for more about @code{XEmacs}) version 21.1.13. @*All files of this component are installed under the directory @code{/usr/local}. @item ESingular Contains the @code{ESingular}, the most comfortable Singular interface. Requires @code{XEmacs} to run. @end table @item @strong{Remark:} All essential DLLs, some programs and symbolic links are installed in the directory @code{/usr/local/Singular/@value{VERSION}/ix86-Win}, which must be present in your @code{PATH} system variable. @item @strong{Help Files:} @table @code @item WinHelp Contains Singular Manual, converted to Windows help format (.hlp). We recommend to install it, because it is small in size. Moreover, we set it as default help browser in all the Singular executables. @item HTML Help Contains the "native" Singular Manual. It's not included by default, because it is much bigger than WinHelp, though it has better typesetting of mathematical formulae. @end table @end table The Typical Setup Type of the Singular-@value{VERSION}-Typical.exe contains @code{BasicCygwin}, @code{Singular}, @code{XEmacs}, @code{ESingular}, @code{WinHelp} and @code{HTML Help} components. The Compact Setup Type does not contain only the @code{HTML Help} component. @ifclear CD @heading Downloading preliminaries To install @code{Singular} on a PC running Windows 95/98/ME/NT/2K/XP, you need to download @strong{one} of the following archive files: Minimal archive: @uref{Singular-@value{VERSION}-Compact.exe, Singular-@value{VERSION}-Compact.exe} (@code{BasicCygwin}, @code{Singular}, @code{WinHelp} components) Typical archive : @uref{Singular-@value{VERSION}-Typical.exe, Singular-@value{VERSION}-Typical.exe} (@code{BasicCygwin}, @code{Singular}, @code{XEmacs}, @code{ESingular}, @code{WinHelp}, @code{HTML Help} components) You can obtain these (and other) archives either from the @code{WINDOWS} directory on the @code{Singular} CD or from @display @uref{ftp://www.mathematik.uni-kl.de/pub/Math/Singular/}. @end display @end ifclear @ifclear singularmanual @strong{Important:} Please see @ifhtml @uref{COPYING.htm, COPYING.htm} @end ifhtml @ifnothtml the file @code{/etc/COPYING.txt} contained in the distribution @end ifnothtml for license information on @code{Singular}. Please register yourself as a @code{Singular} user by using the registration form on the @code{Singular} homepage @uref{http://www.singular.uni-kl.de}. If for some reason you cannot access the registration form, you can also register by sending an email to @email{singular@@mathematik.uni-kl.de} with subject line @code{register} and body containing the following data: your name, email address, organisation, country and platform(s). @end ifclear @heading Installing Singular The recent Setup program analyzes your system, e.g. it detects whether Cygwin and XEmacs are present and functional. Then it gives you hints and/or error messages with instructions during the installation. @table @code @item If you have Cygwin installed If the version of @code{cygwin1.dll} is not less than 1.3.9, you will be prompted that the @code{BasicCygwin} component will not be installed. Moreover, the existing Cygwin root directory will be proposed as the default installation directory. You can accept it, then @code{Singular} will be placed into the existing Cygwin environment. If you choose another destination, @code{Singular} will use Cygwin programs anyway. If your Cygwin has incorrect settings (like inconsistent mount points among the important ones), @code{Singular} Setup will correct them. @* If setup could not detect @code{cygwin}, present in the system, you can try to break the installation, start it once more, choose the "Custom" setup type and unselect the @code{BasicCygwin} component. @item If you have XEmacs installed The @code{Cygwin} port of @code{XEmacs} version 21.1.13 together with the most important packages is included in the distribution. The use of non-@code{Cygwin} ports or earlier @code{Cygwin} ports has some quirks and does not work properly together with @code{Singular} (i.e., running @code{ESingular} results in problems). Nevertheless, if you want to test the compatibility of @code{ESingular} with your own @code{XEmacs}, just de-select the XEmacs component, but leave @code{ESingular} selected. If your @code{XEmacs} happens to be incompatible with ESingular, you can install just the XEmacs component and use in fact two different @code{XEmacs} programs. The setup program will search for @code{XEmacs} and packages in @code{/usr/local/lib} (here @code{} is the directory which you selected while running setup). If you have @code{Cygwin} and the Cygwin port of @code{XEmacs}, you might have @code{XEmacs} installed there. To avoid overwriting your @code{XEmacs} files, setup will ask you what to do. @end table @ifset CD @ifhtml @heading @strong{ @uref{Singular-@value{VERSION}-Typical.exe, Install Singular-@value{VERSION} Now!}} @end ifhtml @end ifset @heading Customizing Singular The following step(s) are optional: @itemize @item To conveniently access all files on your computer, mount the drives of your disk(s): @enumerate @item Open a rxvt terminal (from Start->Programs->Singular 2.0->Tools). @item For each drive (letter) issue the following command (the drive @code{C:} is used in the example): @example mount -f -s -t C: /C @end example @end enumerate After mounting the drive(s) this way, you can conveniently access the files on a drive from the @code{bash} shell and from @code{XEmacs} using the @code{/C/} prefix. Otherwise, you need to type @code{/cygdrive/C} - that is the Cygwin convention. You can get more information on @code{mount} command by invoking @code{mount --help}. Command @code{umount} unmount the selected mount point. @item Create your personal @code{HOME} directory. @*Various applications (e.g., @code{bash} or @code{XEmacs}) store user-specific configuration/customization files in the @code{HOME} directory of the current user. During the installation, the @code{HOME} directory is globally set for all users to @code{/home/Singular}. To create your individual @code{HOME} directory follow these steps: @enumerate @item Create a directory (folder), say, @code{C:\home\MyHome}. @item Copy all files from @code{/home/Singular} to @code{C:\home\MyHome}. @item Set the @emph{user} environment variable @code{HOME} to @code{C:\home\MyHome}: @*On Windows 95/98/ME, edit the respective line the @code{AUTOEXEC.BAT} file. @*On Windows NT/2K/XP add an entry in your @code{Environment} control panel. @item Restart your computer (On Windows 95/98/ME). @end enumerate You may furthermore examine the files copied into your @code{HOME} directory and adjust (i.e. edit) them to your personal preferences/needs. System-wide settings are stored in the file @code{/etc/profile}. @end itemize @heading Uninstalling Singular You can uninstall individual or all installed components by opening the @code{Software} shortcut of the @code{Control panel}. Simply double-click the @code{Singular} item and follow the instructions given there. For any other troubles, please send an email to @email{singular@@mathematik.uni-kl.de} and include the header which is displayed by starting up @code{Singular} with the @code{-v} option, and a description of your machine and operating system. @include info.texi @ifclear singularmanual GOOD LUCK and ENJOY! Your @code{Singular} team. @end ifclear texi2html-1.82/test/singular_manual/register.texi0000644000175000017500000000122711264347126024117 0ustar flichtenheldflichtenheld@ifclear singularmanual @strong{Important:} Please see @ifhtml @uref{COPYING.html, COPYING} @end ifhtml @ifnothtml the file COPYING contained in the distribution @end ifnothtml for license information on @sc{Singular}. Please register yourself as a @sc{Singular} user by using the registration form on the @sc{Singular} homepage @uref{http://www.singular.uni-kl.de}. If for some reason you cannot access the registration form, you can also register by sending an email to @email{singular@@mathematik.uni-kl.de} with subject line @code{register} and body containing the following data: your name, email address, organisation, country and platform(s). @end ifclear texi2html-1.82/test/singular_manual/tests.txt0000644000175000017500000000043511264347126023303 0ustar flichtenheldflichtenheldtexi singular.texi singular singular.texi -init-file t2h_singular.init -init l2h_tmp_dir.init -l2h -short-ext -prefix sing -top-file index.htm -noVerbose singular_httex singular.texi -init-file t2h_singular.init -init tex4ht.init -short-ext -prefix sing -top-file index.htm -noVerbose texi2html-1.82/test/singular_manual/tricks.tex0000644000175000017500000004717511264347126023435 0ustar flichtenheldflichtenheld@comment -*-texinfo-*- @comment This file was generated by doc2tex.pl from tricks.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT tricks.doc INSTEAD @comment Id: tricks.tex,v 1.1 2003/08/08 14:27:06 pertusus Exp $ @comment this file contains the "Tricks and pittfals" sections @c The following directives are necessary for proper compilation @c with emacs (C-c C-e C-r). Please keep it as it is. Since it @c is wrapped in `@ignore' and `@end ignore' it does not harm `tex' or @c `makeinfo' but is a great help in editing this file (emacs @c ignores the `@ignore'). @ignore %**start \input texinfo.tex @setfilename tricks.hlp @node Top, Tricks and pitfalls @menu * Tricks and pitfalls:: @end menu @node Tricks and pitfalls, Examples, Functions and system variables, Top @chapter Tricks and pitfalls %**end @end ignore @menu * Limitations:: * Major differences to the C programming language:: * Miscellaneous oddities:: * Identifier resolution:: @end menu @c ------------------------------------------------------------------------- @node Limitations,Major differences to the C programming language,,Tricks and pitfalls @section Limitations @cindex Limitations @sc{Singular} has the following limitations: @itemize @bullet @item the characteristic of a prime field must be less than 2147483629 @item the (weighted) degree of a monomial must be smaller than the largest @code{long}, usually 2147483648 @item the exponent of a ring variable must be smaller than 32768 unless the ring ordering start with the pseudo ordering @code{L(} max_exponent @code{)} @item the rank of any free module must be smaller than the largest @code{long}, usually 2147483648 @item the number of parameters must be smaller than 32768 @item the number of ring variables must be smaller than 32768 @item the precision of long floating point numbers (for ground field @code{real}) must be smaller than 32768 @item integers (of type @code{int}) have the limited range from -2147483647 to 2147483647 @item floating point numbers (type @code{number} from field @code{real}) have a limited range which is machine dependent. A typical range is -1.0e-38 to 1.0e+38. The string representation of overflow and underflow is machine dependent, as well. For example "@code{Inf}" on Linux, or "@code{+.+00e+00}" on HPUX. @c @item @c a token (in the input) must have 16383 characters or less. @c @*(Tokens are strings, blocks of statements, numbers) @c @*This does not apply to proc in libraries but to blocks @c within a procedure @item the length of an identifier is unlimited but @code{listvar} displays only the first 20 characters @c @item @c the interpretation of text between a closing @code{@}} and the end of @c the line is undefined. (Therefore do not put anything but spaces between @c @code{@}} and the end of the line.) @item statements may not contain more than 10000 tokens @item @cindex German Umlaute @cindex non-english special characters @cindex special characters, non-english All input to Singular must be 7-bit clean, i.e. special characters like the the German Umlaute (@"a, @"o, etc.), or the French accent characters may neither appear as input to @sc{Singular}, nor in libraries or procedure definitions. @end itemize @c ------------------------------------------------------------------------- @node Major differences to the C programming language,Miscellaneous oddities,Limitations,Tricks and pitfalls @section Major differences to the C programming language @cindex C programming language Although many constructs from @sc{Singular}'s programming language are similar to those from the C programming language, there are some subtle differences. Most notably: @menu * No rvalue of increments and assignments:: * Evaluation of logical expressions:: * No case or switch statement:: * Usage of commas:: * Usage of brackets:: * Behavior of continue:: * Return type of procedures:: @end menu @c --------------------------------------- @node No rvalue of increments and assignments, Evaluation of logical expressions,,Major differences to the C programming language @subsection No rvalue of increments and assignments @cindex rvalue The increment operator @code{++} (resp.@: decrement operator @code{--}) has no rvalue, i.e., cannot be used on the right-hand sides of assignments. So, instead of @smallexample j = i++; // WRONG!!! @end smallexample @noindent (which results in an error), it must be written @smallexample i++; j = i; @end smallexample Likewise, an assignment expression does not have a result. Therefore, compound assignments like @code{i = j = k;} are not allowed and result in an error. @c --------------------------------------- @node Evaluation of logical expressions, No case or switch statement, No rvalue of increments and assignments, Major differences to the C programming language @subsection Evaluation of logical expressions @cindex Evaluation of logical expressions @cindex and @cindex or @c ------------------------------------------------------------ @c This piece of text partially exists also in the file types.doc, @c chapter "boolean expressions". @c If you change something here, change it there, too! @c ------------------------------------------------------------ @strong{All} arguments of a logical expression are first evaluated and then the value of the logical expression is determined. For example, the logical expressions @code{(a || b)} is evaluated by first evaluating @code{a} @emph{and} @code{b}, even though the value of @code{b} has no influence on the value of @code{(a || b)}, if @code{a} evaluates to true. Note, that this evaluation is different from the left-to-right, conditional evaluation of logical expressions (as found in most programming languages). For example, in these other languages, the value of @code{(1 || b)} is determined without ever evaluating @code{b}. This causes some problems with boolean tests on variables, which might not be defined at evaluation time. For example, the following results in an error, if the variable @code{i} is undefined: @smallexample if (defined(i) && i > 0) @{@} // WRONG!!! @end smallexample This must be written instead as: @smallexample if (defined(i)) @{ if (i > 0) @{@} @} @end smallexample @c ------------------------------------------------------------ @c end of duplicate text @c ------------------------------------------------------------ However, there are several short work-arounds for this problem: @enumerate @item If a variable (say, @code{i}) is only to be used as a boolean flag, then define (value is TRUE) and undefine (value is FALSE) @code{i} instead of assigning a value. Using this scheme, it is sufficient to simply write @smallexample if (defined(i)) @end smallexample in order to check whether @code{i} is TRUE. Use the command @code{kill} to undefine a variable, i.e.@: to assign it a FALSE value (@pxref{kill}). @item If a variable can have more than two values, then define it, if necessary, before it is used for the first time. For example, if the following is used within a procedure @smallexample if (! defined(DEBUG)) @{ int DEBUG = 1;@} @dots{} if (DEBUG == 3) @{@dots{}@} if (DEBUG == 2) @{@dots{}@} @dots{} @end smallexample then a user of this procedure does not need to care about the existence of the @code{DEBUG} variable -- this remains hidden from the user. However, if @code{DEBUG} exists globally, then its local default value is overwritten by its global one. @end enumerate @c --------------------------------------- @node No case or switch statement, Usage of commas, Evaluation of logical expressions, Major differences to the C programming language @subsection No case or switch statement @cindex case @cindex switch @sc{Singular} does not offer a @code{case} (or @code{switch}) statement. However, it can be imitated in the following way: @smallexample while (1) @{ if (choice == choice_1) @{ @dots{}; break;@} @dots{} if (choice == choice_n) @{ @dots{}; break;@} // default case @dots{}; break; @} @end smallexample @c --------------------------------------- @node Usage of commas, Usage of brackets, No case or switch statement, Major differences to the C programming language @subsection Usage of commas @cindex comma In @sc{Singular}, a comma separates list elements and the value of a comma expression is a list. Hence, commas can not be used to combine several expressions into a single expression. For example, instead of writing @smallexample for (i=1, j=5; i<5 || j<10; i++, j++) @{@dots{}@} // WRONG!!!!!! @end smallexample @noindent one has to write @smallexample for (i,j = 1,5; i<5 || j<10; i++, j++) @{@dots{}@} @end smallexample @c --------------------------------------- @node Usage of brackets, Behavior of continue, Usage of commas, Major differences to the C programming language @subsection Usage of brackets @cindex bracket In @sc{Singular}, curly brackets (@code{@{} @code{@}}) @strong{must always} be used to enclose the statement body following such constructs like @code{if}, @code{else}, @code{for}, or @code{while}, even if this block consists of only a single statement. Similarly, in the return statement of a procedure, parentheses (@code{(} @code{)}) @strong{must always} be used to enclose the return value. Even if there is no value to return, parentheses have to be used after a return statement (i.e., @code{return();}). For example, @smallexample if (i == 1) return i; // WRONG!!!!! @end smallexample @noindent results in an error. Instead, it must be written as @smallexample if (i == 1) @{ return (i); @} @end smallexample @c --------------------------------------- @node Behavior of continue, Return type of procedures, Usage of brackets, Major differences to the C programming language @subsection Behavior of continue @cindex continue @sc{Singular}'s @code{continue} construct is only valid inside the body of a @code{for} or @code{while} construct. It skips the rest of the loop-body and jumps to the beginning of the block. Unlike the C-construct @sc{Singular}'s @code{continue} @strong{does not execute the increment statement}. For example, @smallexample for (int i = 1 ; i<=10; i=i+1) @{ @dots{} if (i==3) @{ i=8;continue; @} // skip the rest if i is 3 and // continue with the next i: 8 i; @} @expansion{} 1 @expansion{} 2 @expansion{} 8 @expansion{} 9 @expansion{} 10 @end smallexample @c --------------------------------------- @node Return type of procedures,,Behavior of continue, Major differences to the C programming language @subsection Return type of procedures @cindex return type of procedures Although the @sc{Singular} language is a strongly typed programming language, the type of the return value of a procedure does not need to be specified. As a consequence, the return type of a procedure may vary, i.e., may, for example, depend on the input. However, the return value of such a procedure may then only be assigned to a variable of type @code{def}. @smallexample @c reused example Return_type_of_procedures tricks.doc:308 proc type_return (int i) @{ if (i > 0) @{return (i);@} else @{return (list(i));@} @} def t1 = type_return(1); def t2 = type_return(-1); typeof(t1); typeof(t2); @expansion{} int @expansion{} list @c end example Return_type_of_procedures tricks.doc:308 @end smallexample Furthermore, it is mandatory to assign the return value of a procedure to a variable of type @code{def}, if a procedure changes the current ring using the @code{keepring} command (@pxref{keepring}) and returns a ring-dependent value (like a polynomial or module). @smallexample @c reused example Return_type_of_procedures_1 tricks.doc:326 proc def_return @{ ring r=0,(x,y),dp; poly p = x; keepring r; return (x); @} def p = def_return(); // poly p = def_return(); would be WRONG!!! typeof(p); @expansion{} poly @c end example Return_type_of_procedures_1 tricks.doc:326 @end smallexample On the other hand, more than one value can be returned by a single @code{return} statement. For example, @smallexample proc tworeturn () @{ return (1,2); @} int i,j = tworeturn(); @end smallexample @c ------------------------------------------------------------------------- @node Miscellaneous oddities, Identifier resolution, Major differences to the C programming language, Tricks and pitfalls @section Miscellaneous oddities @enumerate @item integer division @cindex integer division @cindex div If two numerical constants (i.e., two sequences of digits) are divided using the @code{/} operator, the surrounding whitespace determines which division to use: if there is no space between the constants and the @code{/} operator (e.g., "3/2"), both numerical constants are treated as of type @code{number} and the current ring division is used. If there is at least one space surrounding the @code{/} operator (e.g., "3 / 2"), both numerical constants are treated as of type @code{int} and an integer division is performed. To avoid confusion, use the @code{div} operator instead of @code{/} for integer division and an explicit type cast to @code{number} for ring division. Note, that this problem does only occur for divisions of numerical constants. @smallexample @c reused example Miscellaneous_oddities tricks.doc:370 ring r=32002,x,dp; 3/2; // ring division @expansion{} -15994 3 / 2; // integer division @expansion{} 1 3 div 2; @expansion{} 1 number(3) / number(2); @expansion{} -15994 number a=3; number b=2; a/b; @expansion{} -15994 int c=3; int d=2; c / d; @expansion{} 1 @c end example Miscellaneous_oddities tricks.doc:370 @end smallexample @item monomials and precedence @cindex monomials and precedence The computation of a monomial has precedence over all operators: @smallexample @c reused example Miscellaneous_oddities_1 tricks.doc:391 ring r=0,(x,y),dp; 2xy^2 == (2*x*y)^2; @expansion{} 1 2xy^2 == 2x*y^2; @expansion{} 0 2x*y^2 == 2*x * (y^2); @expansion{} 1 @c end example Miscellaneous_oddities_1 tricks.doc:391 @end smallexample @item meaning of @code{mult} @cindex mult @cindex degree For an arbitrary ideal or module @code{i}, @code{mult(i)} returns the multiplicity of the ideal generated by the leading monomials of the given generators of @code{i}, hence depends on the monomial ordering! A standard mistake is to interpret @code{degree(i)} or @code{mult(i)} for an inhomogeneous ideal @code{i} as the degree of the homogenization or as something like the 'degree of the affine part'. For the ordering @code{dp} (degree reverse lexicographical) the converse is true: if @code{i} is given by a standard basis, @code{mult(i)} is the degree of the homogeneous ideal obtained by homogenization of @code{i} and then putting the homogenizing variable to 0, hence it is the degree of the part at infinity (this can also be checked by looking at the initial ideal). @item size of ideals @cindex ideals @cindex size @code{size} counts the non-zero entries of an ideal or module. Use @code{ncols} to determine the actual number of entries in the ideal or module. @item computations in @code{qring} @cindex qring In order to speed up computations in quotient rings, @sc{Singular} usually does not reduce polynomials w.r.t.@: the quotient ideal; rather the given representative is used as long as possible during computations. If it is necessary, reduction is done during standard base computations. To reduce a polynomial @code{f} by hand w.r.t.@: the current quotient ideal use the command @code{reduce(f,std(0))} (@pxref{reduce}). @item substring selection @cindex string To extract substrings from a @code{string}, square brackets are used, enclosing either two comma-separated @code{int}s or an @code{intvec}. Although two comma-separated @code{int}s represent an @code{intvec}, they mean different things in substring access. Square brackets enclosing two @code{int}s (e.g.@: @code{s[2,6]}) return a substring where the first integer denotes the starting position and the second integer denotes the length of the substring. The result is returned as a @code{string}. Square brackets enclosing an @code{intvec} (e.g.@: @code{s[intvec(2,6)]}) return the characters of the string at the position given by the values of the @code{intvec}. The result is returned as an expression list of strings. @c Note, that this problem does @c not occur for square brackets enclosing a single @code{int} or more than @c two @code{int}s. Those always return an expression list of strings. @smallexample @c reused example Miscellaneous_oddities_2 tricks.doc:454 string s = "one-word"; s[2,6]; // a substring starting at the second char @expansion{} ne-wor size(_); @expansion{} 6 intvec v = 2,6; s[v]; // the second and the sixth char @expansion{} n o string st = s[v]; // stick together by an assignment st; @expansion{} no size(_); @expansion{} 2 v = 2,6,8; s[v]; @expansion{} n o d @c end example Miscellaneous_oddities_2 tricks.doc:454 @end smallexample @ifset namespaces @item packages and indexed variables See example @smallexample @c reused example Miscellaneous_oddities_3 tricks.doc:473 package K; string K::varok; @expansion{} ? package is not supported in this version @expansion{} ? object to declare is not a name @expansion{} ? error occurred in line 2: `string K::varok;` @expansion{} ? wrong type declaration. type 'help string;' string K::donotwork(1); @expansion{} ? package is not supported in this version @expansion{} ? error occurred in line 3: `string K::donotwork(1);` @expansion{} ? wrong type declaration. type 'help string;' int K::i(1..3); @expansion{} ? package is not supported in this version @expansion{} ? error occurred in line 4: `int K::i(1..3);` @expansion{} ? wrong type declaration. type 'help int;' // Toplevel does not contain i(1..3) listvar(); @expansion{} // K [0] package (N) @expansion{} // LIB [0] string standard.lib // i(1..3) are stored in Package 'K' listvar(K); @expansion{} // K [0] package (N) @c end example Miscellaneous_oddities_3 tricks.doc:473 @end smallexample @end ifset @end enumerate @c ---------------------------------------------- @node Identifier resolution,, Miscellaneous oddities, Tricks and pitfalls @section Identifier resolution @cindex identifier In @sc{Singular}, an identifier (i.e., a "word") is resolved in the following way and order: It is checked for @enumerate @item a reserved name (like @code{ring}, @code{std}, @dots{}), @item a local variable (w.r.t. a procedure), @item a local ring variable (w.r.t. the current basering locally set in a procedure), @item a global variable, @item a global ring variable (w.r.t. the current basering) @item a monomial consisting of local ring variables written without operators, @item a monomial consisting of global ring variables written without operators. @end enumerate Consequently, it is allowed to have general variables with the same name as ring variables. However, the above identifier resolution order must be kept in mind. Otherwise, surprising results may come up. @smallexample @c reused example Identifier_resolution tricks.doc:517 ring r=0,(x,y),dp; int x; x*y; // resolved product int*poly, i.e., 0*y @expansion{} 0 xy; // "xy" is one identifier and resolved to monomial xy @expansion{} xy @c end example Identifier_resolution tricks.doc:517 @end smallexample For these reasons, we strongly recommend not to use variables which have the same name(s) as ring variables. Moreover, we strongly recommend not to use ring variables whose name is fully contained in (i.e., is a substring of) another name of a ring variable. Otherwise, effects like the following might occur: @smallexample @c reused example Identifier_resolution_1 tricks.doc:534 ring r=0,(x, x1),dp; // name x is substring of name x1 !!!!!!!!! x;x1; // resolved poly x @expansion{} x @expansion{} x1 short=0; 2x1; // resolved to monomial 2*x^1 !!!!!! @expansion{} 2*x 2*x1; // resolved to product 2 times x1 @expansion{} 2*x1 @c end example Identifier_resolution_1 tricks.doc:534 @end smallexample texi2html-1.82/test/singular_manual/start.tex0000644000175000017500000010667311264347126023272 0ustar flichtenheldflichtenheld@comment -*-texinfo-*- @comment This file was generated by doc2tex.pl from start.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT start.doc INSTEAD @comment Id: start.tex,v 1.1 2003/08/08 14:27:06 pertusus Exp $ @comment this file contains the "Introduction" chapter. @c * wichmann: + added changes by GMG. @c The following directives are necessary for proper compilation @c with emacs (C-c C-e C-r). Please keep it as it is. Since it @c is wrapped in `@ignore' and `@end ignore' it does not harm `tex' or @c `makeinfo' but is a great help in editing this file (emacs @c ignores the `@ignore'). @ignore %**start \input texinfo.tex @setfilename start.hlp @node Top, Introduction @menu * Introduction:: @end menu @node Introduction, General concepts, Preface, Top @chapter Introduction %**end @end ignore @ifset singularmanual @menu * Background:: * How to use this manual:: * Getting started:: @end menu @end ifset @ifclear singularmanual @menu * Background:: * How to use this tutorial:: * Getting started:: @end menu @end ifclear @c ------------------------------------------------------------------ @ifset singularmanual @node Background, How to use this manual, Introduction, Introduction @end ifset @ifclear singularmanual @node Background, How to use this tutorial, Introduction, Introduction @end ifclear @section Background @cindex Background @sc{Singular} is a Computer Algebra system for polynomial computations with emphasis on the special needs of commutative algebra, algebraic geometry, and singularity theory. @sc{Singular}'s main computational objects are ideals and modules over a large variety of baserings. The baserings are polynomial rings or localizations thereof over a field (e.g., finite fields, the rationals, floats, algebraic extensions, transcendental extensions) or quotient rings with respect to an ideal. @sc{Singular} features one of the fastest and most general implementations of various algorithms for computing Groebner resp.@: standard bases. The implementation includes Buchberger's algorithm (if the ordering is a well ordering) and Mora's algorithm (if the ordering is a tangent cone ordering) as special cases. Furthermore, it provides polynomial factorizations, resultant, characteristic set and gcd computations, syzygy and free-resolution computations, and many more related functionalities. Based on an easy-to-use interactive shell and a C-like programming language, @sc{Singular}'s internal functionality is augmented and user-extendible by libraries written in the @sc{Singular} programming language. A general and efficient implementation of communication links allows @sc{Singular} to make its functionality available to other programs. @sc{Singular}'s development started in 1984 with an implementation of Mora's Tangent Cone algorithm in Modula-2 on an Atari computer (K.P. Neuendorf, G. Pfister, @ifinfo H.@: Schoenemann; Humboldt-Universitaet @end ifinfo @tex H.\ Sch\"onemann; Humboldt-Universit\"at @end tex zu Berlin). The need for a new system arose from the investigation of mathematical problems coming from singularity theory which none of the existing systems was able to compute. In the early 1990s @sc{Singular}'s "home-town" moved to Kaiserslautern, a general standard basis algorithm was implemented in C and @sc{Singular} was ported to Unix, MS-DOS, Windows NT, and MacOS. Continuous extensions (like polynomial factorization, gcd computations, links) and refinements led in 1997 to the release of @sc{Singular} version 1.0 and in 1998 to the release of version 1.2 (much faster standard and Groebner bases computations based on Hilbert series and on improved implementations of the algorithms, libraries for primary decomposition, ring normalization, etc.) For the highlights of the new @sc{Singular} version @value{VERSION} see @ref{News and changes}. @c Thus, we hope to offer a useful system @c for dealing with local and global computational aspects @c of systems of polynomial equations. @c ------------------------------------------------------------------ @ifset singularmanual @node How to use this manual, Getting started, Background, Introduction @section How to use this manual @cindex How to use this manual @end ifset @ifclear singularmanual @node How to use this tutorial, Getting started, Background, Introduction @section How to use this tutorial @cindex How to use this tutorial @end ifclear @ifset singularmanual @subsubheading For the impatient user @end ifset In @ref{Getting started}, some simple examples explain how to use @sc{Singular} in a step-by-step manner. @ref{Examples} should come next for real learning-by-doing or to quickly solve some given mathematical problems without dwelling too deeply into @sc{Singular}. @ifset singularmanual This chapter contains a lot of real-life examples and detailed instructions and explanations on how to solve mathematical problems using @sc{Singular}. @end ifset @c ------------------------------------------------------------------------ @ifset singularmanual @subsubheading For the systematic user In @ref{General concepts}, all basic concepts which are important to use and to understand @sc{Singular} are developed. But even for users preferring the systematic approach it will be helpful to have a look at the examples in @ref{Getting started}, every now and then. The topics in the chapter are organized more or less in the order the novice user has to deal with them. @itemize @bullet @item In @ref{Interactive use}, and its subsections there are some words on entering and exiting @sc{Singular}, followed by a number of other aspects concerning the interactive user-interface. @item To do anything more than trivial integer computations, one needs to define a basering in @sc{Singular}. This is explained in detail in @ref{Rings and orderings}. @item An overview of the algorithms implemented in the kernel of @sc{Singular} is given in @ref{Implemented algorithms}. @item In @ref{The SINGULAR language}, language specific concepts are introduced such as the notions of names and objects, data types and conversion between them, etc. @item In @ref{Input and output}, @sc{Singular}'s mechanisms to store and retrieve data are discussed. @item The more complex concepts of procedures and libraries as well as tools to debug them are considered in the following sections: @ref{Procedures}, @ref{Libraries}, and @ref{Debugging tools}. @end itemize @ref{Data types}, is a complete treatment for @sc{Singular}'s data types where each section corresponds to one data type, alphabetically sorted. For each data type, its purpose is explained, the syntax of its declaration is given, and related operations and functions are listed. Examples illustrate its usage. @ref{Functions and system variables}, is an alphabetically ordered reference list of all of @sc{Singular}'s functions, control structures, and system variables. Each entry includes a description of the syntax and semantics of the item being explained as well as one or more examples on how to use it. @subsubheading Miscellaneous @ref{Tricks and pitfalls}, is a loose collection of limitations and features which may be unexpected by those who expect the @sc{Singular} language to be an exact copy of the C programming language or of some Computer Algebra system's languages. But some mathematical hints are collected there, as well. @ref{Mathematical background}, introduces some of the mathematical notions and definitions used throughout this manual. For example, if in doubt what exactly @sc{Singular} means by a ``negative degree reverse lexicographical ordering'' one should refer to this chapter. @ref{SINGULAR libraries}, lists the libraries which come with @sc{Singular} and the functions contained in them, respectively. @end ifset @c ------------------------------------------------------------------------ @subsubheading Typographical conventions Throughout this manual, the following typographical conventions are adopted: @itemize @bullet @item text in @code{typewriter} denotes @sc{Singular} input and output as well as reserved names: @itemize @asis @item The basering can be set using the command @code{setring}. @end itemize @item the arrow @expansion{} denotes @sc{Singular} output: @itemize @asis @item @code{poly p=x+y+z;} @item @code{p*p;} @item @code{@expansion{} x2+2xy+y2+2xz+2yz+z2} @end itemize @item square brackets are used to denote parts of syntax descriptions which are optional: @itemize @asis [optional_text] required_text @end itemize @item keys are denoted using typewriter, for example: @itemize @asis @item @code{N} (press the key @code{N} to get to the next node in help mode) @item @code{RETURN} (press @code{RETURN} to finish an input line) @item @code{CTRL-P} (press control key together with the key @code{P} to get the previous input line) @end itemize @end itemize @c ------------------------------------------------------------------ @ifset singularmanual @node Getting started, , How to use this manual, Introduction @section Getting started @end ifset @ifclear singularmanual @node Getting started, , How to use this tutorial, Introduction @chapter Getting started @end ifclear @cindex Getting started @sc{Singular} is a special purpose system for polynomial computations. Hence, most of the powerful computations in @sc{Singular} require the prior definition of a ring. Most important rings are polynomial rings over a field, localizations hereof, or quotient rings of such rings modulo an ideal. However, some simple computations with integers (machine integers of limited size) and manipulations of strings are available without a ring. @menu * First steps:: * Rings and standard bases:: * Procedures and libraries:: * Change of rings:: * Modules and their annihilator:: * Resolution:: @end menu @c ------------------------------------------------------------------ @node First steps, Rings and standard bases, Getting started, Getting started @ifset singularmanual @subsection First steps @end ifset @ifclear singularmanual @section First steps @end ifclear @cindex First steps Once @sc{Singular} is started, it awaits an input after the prompt @code{>}. Every statement has to be terminated by @code{;} . @smallexample 37+5; @expansion{} 42 @end smallexample All objects have a type, e.g., integer variables are defined by the word @code{int}. An assignment is done by the symbol @code{=} . @smallexample int k = 2; @end smallexample @noindent Test for equality resp.@: inequality is done using @code{==} resp.@: @code{!=} (or @code{<>}), where @code{0} represents the boolean value FALSE, any other value represents TRUE. @smallexample k == 2; @expansion{} 1 k != 2; @expansion{} 0 @end smallexample @noindent The value of an object is displayed by simply typing its name. @smallexample k; @expansion{} 2 @end smallexample @noindent On the other hand the output is suppressed if an assignment is made. @smallexample int j; j = k+1; @end smallexample @noindent The last displayed (!) result is always available with the special symbol @code{_} . @smallexample 2*_; // the value from k displayed above @expansion{} 4 @end smallexample Text starting with @code{//} denotes a comment and is ignored in calculations, as seen in the previous example. Furthermore @sc{Singular} maintains a history of the previous lines of input, which may be accessed by @code{CTRL-P} (previous) and @code{CTRL-N} (next) or the arrows on the keyboard. Note that the history is not available on Macintosh systems. The whole manual is available online by typing the command @code{help;} . Explanation on single topics, e.g., on @code{intmat}, which defines a matrix of integers, are obtained by @smallexample help intmat; @end smallexample @ifset singularmanual @noindent This shows the text of @ref{intmat}, in the printed manual. @end ifset @ifclear singularmanual @noindent This shows the text from node @code{intmat}, in the printed manual. @end ifclear Next, we define a @tex $3 \times 3$ @end tex @ifinfo 3 x 3 @end ifinfo matrix of integers and initialize it with some values, row by row from left to right: @smallexample intmat m[3][3] = 1,2,3,4,5,6,7,8,9; @end smallexample @noindent A single matrix entry may be selected and changed using square brackets @code{[} and @code{]}. @smallexample m[1,2]=0; m; @expansion{} 1,0,3, @expansion{} 4,5,6, @expansion{} 7,8,9 @end smallexample To calculate the trace of this matrix, we use a @code{for} loop. The curly brackets @code{@{} and @code{@}} denote the beginning resp.@: end of a block. If you define a variable without giving an initial value, as the variable @code{tr} in the example below, @sc{Singular} assigns a default value for the specific type. In this case, the default value for integers is @code{0}. Note that the integer variable @code{j} has already been defined above. @smallexample int tr; for ( j=1; j <= 3; j++ ) @{ tr=tr + m[j,j]; @} tr; @expansion{} 15 @end smallexample Variables of type string can also be defined and used without a ring being active. Strings are delimited by @code{"} (double quotes). They may be used to comment the output of a computation or to give it a nice format. If a string contains valid @sc{Singular} commands, it can be executed using the function @code{execute}. The result is the same as if the commands would have been written on the command line. This feature is especially useful to define new rings inside procedures. @smallexample "example for strings:"; @expansion{} example for strings: string s="The element of m "; s = s + "at position [2,3] is:"; // concatenation of strings by + s , m[2,3] , "."; @expansion{} The element of m at position [2,3] is: 6 . s="m[2,1]=0; m;"; execute(s); @expansion{} 1,0,3, @expansion{} 0,5,6, @expansion{} 7,8,9 @end smallexample This example shows that expressions can be separated by @code{,} (comma) giving a list of expressions. @sc{Singular} evaluates each expression in this list and prints all results separated by spaces. @c ------------------------------------------------------------------ @node Rings and standard bases, Procedures and libraries, First steps, Getting started @ifset singularmanual @subsection Rings and standard bases @end ifset @ifclear singularmanual @section Rings and standard bases @end ifclear @cindex Rings and standard bases To calculate with objects as ideals, matrices, modules, and polynomial vectors, a ring has to be defined first. @smallexample ring r = 0,(x,y,z),dp; @end smallexample The definition of a ring consists of three parts: the first part determines the ground field, the second part determines the names of the ring variables, and the third part determines the monomial ordering to be used. So the example above declares a polynomial ring called @code{r} with a ground field of characteristic @ifinfo @math{0} @end ifinfo @tex $0$ @end tex (i.e., the rational numbers) and ring variables called @code{x}, @code{y}, and @code{z}. The @code{dp} at the end means that the degree reverse lexicographical ordering should be used. Other ring declarations: @table @code @item ring r1=32003,(x,y,z),dp; characteristic 32003, variables @code{x}, @code{y}, and @code{z} and ordering @code{dp}. @item ring r2=32003,(a,b,c,d),lp; characteristic 32003, variable names @code{a}, @code{b}, @code{c}, @code{d} and lexicographical ordering. @item ring r3=7,(x(1..10)),ds; characteristic 7, variable names @code{x(1)},@dots{},@code{x(10)}, negative degree reverse lexicographical ordering (@code{ds}). @item ring r4=(0,a),(mu,nu),lp; transcendental extension of @ifinfo @math{Q} @end ifinfo @tex $Q$ @end tex by @ifinfo @math{a} @end ifinfo @tex $a$ @end tex , variable names @code{mu} and @code{nu}. @item ring r5=real,(a,b),lp; floating point numbers (single machine precision), variable names @code{a} and @code{b}. @item ring r6=(real,50),(a,b),lp; floating point numbers with extended precision of 50 digits, variable names @code{a} and @code{b}. @item ring r7=(complex,50,i),(a,b),lp; complex floating point numbers with extended precision of 50 digits and imaginary unit @code{i}, variable names @code{a} and @code{b}. @end table @c Another valid characteristic would be, for example, a prime number less @c or equal to 32003. The name of the ring variables may be any @c valid @sc{Singular} name. Even indexed names are allowed, so @c @code{x(1..10)} specifies the ring variables @code{x(1)}, @dots{}, @c @code{x(10)}. @sc{Singular} offers the possibility to calculate with any @c monomial ordering, some orderings are predefined with special names like @c @code{dp} in the example above. Another important example is the @c lexicographical ordering called @code{lp}. @c Typing the name of a ring prints its definition. The example below shows that the default ring in @sc{Singular} is @ifinfo @math{Z/32003[x,y,z]} @end ifinfo @tex $Z/32003[x,y,z]$ @end tex with degree reverse lexicographical ordering: @smallexample @c computed example Rings_and_standard_bases start.doc:494 ring r8; r8; @expansion{} // characteristic : 32003 @expansion{} // number of vars : 3 @expansion{} // block 1 : ordering dp @expansion{} // : names x y z @expansion{} // block 2 : ordering C @c end example Rings_and_standard_bases start.doc:494 @end smallexample Defining a ring makes this ring the current active basering, so each ring definition above switches to a new basering. The concept of rings in @sc{Singular} is discussed in detail in @ifset singularmanual @ref{Rings and orderings}. @end ifset @ifclear singularmanual the chapter "Rings and orderings" of the @sc{Singular} manual. @end ifclear The basering is now @code{r8}. Since we want to calculate in the ring @code{r}, which we defined first, we have to switch back to it. This can be done using the function @code{setring}: @smallexample setring r; @end smallexample Once a ring is active, we can define polynomials. A monomial, say @tex $x^3$ @end tex @ifinfo x^3 @end ifinfo may be entered in two ways: either using the power operator @code{^}, saying @code{x^3}, or in short-hand notation without operator, saying @code{x3}. Note that the short-hand notation is forbidden if the name of the ring variable consists of more than one character. Note, that @sc{Singular} always expands brackets and automatically sorts the terms with respect to the monomial ordering of the basering. @smallexample poly f = x3+y3+(x-y)*x2y2+z2; f; @expansion{} x3y2-x2y3+x3+y3+z2 @end smallexample The command @code{size} determines in general the number of ''single entries`` in an object. In particular, for polynomials, @code{size} determines the number of monomials. @smallexample size(f); @expansion{} 5 @end smallexample A natural question is to ask if a point, e.g., @code{(x,y,z)=(1,2,0)}, lies on the variety defined by the polynomials @code{f} and @code{g}. For this we define an ideal generated by both polynomials, substitute the coordinates of the point for the ring variables, and check if the result is zero: @smallexample poly g = f^2 *(2x-y); ideal I = f,g; ideal J = subst(I,var(1),1); J = subst(J,var(2),2); J = subst(J,var(3),0); J; @expansion{} J[1]=5 @expansion{} J[2]=0 @end smallexample @noindent Since the result is not zero, the point @code{(1,2,0)} does not lie on the variety @code{V(f,g)}. Another question is to decide whether some function vanishes on a variety, or in algebraic terms if a polynomial is contained in a given ideal. For this we calculate a standard basis using the command @code{groebner} and afterwards reduce the polynomial with respect to this standard basis. @smallexample ideal sI = groebner(f); reduce(g,sI); @expansion{} 0 @end smallexample @noindent As the result is @code{0} the polynomial @code{g} belongs to the ideal defined by @code{f}. The function @code{groebner}, like many other functions in @sc{Singular}, prints a protocol during calculations, if desired. The command @code{option(prot);} enables protocolling whereas @code{option(noprot);} turns it off. @ifset singularmanual @ref{option}, explains the meaning of the different symbols printed during calculations. @end ifset The command @code{kbase} calculates a basis of the polynomial ring modulo an ideal, if the quotient ring is finite dimensional. As an example we calculate the Milnor number of a hypersurface singularity in the global and local case. This is the vector space dimension of the polynomial ring modulo the Jacobian ideal in the global case resp.@: of the power series ring modulo the Jacobian ideal in the local case. @xref{Critical points}, for a detailed explanation. The Jacobian ideal is obtained with the command @code{jacob}. @smallexample ideal J = jacob(f); @expansion{} // ** redefining J ** J; @expansion{} J[1]=3x2y2-2xy3+3x2 @expansion{} J[2]=2x3y-3x2y2+3y2 @expansion{} J[3]=2z @end smallexample @noindent @sc{Singular} prints the line @code{// ** redefining J **}. This indicates that we have previously defined a variable with name @code{J} of type ideal (see above). To obtain a representing set of the quotient vector space we first calculate a standard basis, then we apply the function @code{kbase} to this standard basis. @smallexample J = groebner(J); ideal K = kbase(J); K; @expansion{} K[1]=y4 @expansion{} K[2]=xy3 @expansion{} K[3]=y3 @expansion{} K[4]=xy2 @expansion{} K[5]=y2 @expansion{} K[6]=x2y @expansion{} K[7]=xy @expansion{} K[8]=y @expansion{} K[9]=x3 @expansion{} K[10]=x2 @expansion{} K[11]=x @expansion{} K[12]=1 @end smallexample @noindent Then @smallexample size(K); @expansion{} 12 @end smallexample @noindent gives the desired vector space dimension @tex $K[x,y,z]/\hbox{\rm jacob}(f)$. @end tex @ifinfo K[x,y,z]/jacob(f). @end ifinfo As in @sc{Singular} the functions may take the input directly from earlier calculations, the whole sequence of commands may be written in one single statement. @smallexample size(kbase(groebner(jacob(f)))); @expansion{} 12 @end smallexample When we are not interested in a basis of the quotient vector space, but only in the resulting dimension we may even use the command @code{vdim} and write: @smallexample vdim(groebner(jacob(f))); @expansion{} 12 @end smallexample @c ------------------------------------------------------------------ @node Procedures and libraries, Change of rings, Rings and standard bases, Getting started @ifset singularmanual @subsection Procedures and libraries @end ifset @ifclear singularmanual @section Procedures and libraries @end ifclear @cindex Procedures and libraries @sc{Singular} offers a comfortable programming language, with a syntax close to C. So it is possible to define procedures which collect several commands to a new one. Procedures are defined with the keyword @code{proc} followed by a name and an optional parameter list with specified types. Finally, a procedure may return values using the command @code{return}. Define the following procedure called @code{Milnor}: @smallexample proc Milnor (poly h) @{ return(vdim(groebner(jacob(h)))); @} @end smallexample Note: if you have entered the first line of the procedure and pressed @code{RETURN}, @sc{Singular} prints the prompt @code{.} (dot) instead of the usual prompt @code{>} . This shows that the input is incomplete and @sc{Singular} expects more lines. After typing the closing curly bracket, @sc{Singular} prints the usual prompt indicating that the input is now complete. @noindent Then call the procedure: @smallexample Milnor(f); @expansion{} 12 @end smallexample @noindent Note that the result may depend on the basering as we will see in the next chapter. The distribution of @sc{Singular} contains several libraries, each of which is a collection of useful procedures based on the kernel commands, which extend the functionality of @sc{Singular}. The command @code{help "all.lib";} lists all libraries together with a one-line explanation. @c The command @code{help} @c library_name@code{;} lists all procedures of the library, @code{help} @c proc_name@code{;} shows an explanation of the procedure after the @c library has been loaded. The command @code{LIB "all.lib";} loads all @c libraries. One of these libraries is @code{sing.lib} which already contains a procedure called @code{milnor} to calculate the Milnor number not only for hypersurfaces but more generally for complete intersection singularities. Libraries are loaded with the command @code{LIB}. Some additional information during the process of loading is displayed on the screen, which we omit here. @smallexample LIB "sing.lib"; @end smallexample As all input in @sc{Singular} is case sensitive, there is no conflict with the previously defined procedure @code{Milnor}, but the result is the same. @smallexample milnor(f); @expansion{} 12 @end smallexample The procedures in a library have a help part which is displayed by typing @smallexample help milnor; @c @expansion{} // proc milnor from lib sing.lib @c @expansion{} proc milnor (ideal i) @c @expansion{} USAGE: milnor(i); i ideal or poly @c @expansion{} RETURN: Milnor number of i, if i is ICIS (isolated complete intersection @c @expansion{} singularity) in generic form, resp. -1 if not @c @expansion{} NOTE: use proc nf_icis to put generators in generic form @c @expansion{} printlevel >=0: display comments (default) @c @expansion{} EXAMPLE: example milnor; shows an example @c @expansion{} @end smallexample @noindent as well as some examples, which are executed by @smallexample example milnor; @c @expansion{} // proc milnor from lib sing.lib @c @expansion{} EXAMPLE: @c @expansion{} int p = printlevel; @c @expansion{} printlevel = 1; @c @expansion{} ring r = 32003,(x,y,z),ds; @c @expansion{} ideal j = x5+y6+z6,x2+2y2+3z2,xyz+yx; @c @expansion{} milnor(j); @c @expansion{} //sequence of discriminant numbers: 100,149,70 @c @expansion{} 21 @c @expansion{} poly f = x7+y7+(x-y)^2*x2y2+z2; @c @expansion{} milnor(f); @c @expansion{} 28 @c @expansion{} printlevel = p; @c @expansion{} @end smallexample @noindent Likewise, the library itself has a help part, to show a list of all the functions available for the user which are contained in the library. @smallexample help sing.lib; @end smallexample @noindent The output of the help commands is omitted here. @c ------------------------------------------------------------------ @node Change of rings, Modules and their annihilator, Procedures and libraries, Getting started @ifset singularmanual @subsection Change of rings @end ifset @ifclear singularmanual @section Change of rings @end ifclear @cindex Change of rings To calculate the local Milnor number we have to do the calculation with the same commands in a ring with local ordering. @ifset singularmanual Define the localization of the polynomial ring at the origin (@pxref{Polynomial data}, and @ref{Mathematical background}). @end ifset @ifclear singularmanual Define the localization of the polynomial ring at the origin. @end ifclear @smallexample ring rl = 0,(x,y,z),ds; @end smallexample This ordering determines the standard basis which will be calculated. Fetch the polynomial defined in the ring @code{r} into this new ring, thus avoiding retyping the input. @smallexample poly f = fetch(r,f); f; @expansion{} z2+x3+y3+x3y2-x2y3 @end smallexample @noindent Instead of @code{fetch} we can use the function @code{imap} which is more general but less efficient. @ifset singularmanual The most general way to fetch data from one ring to another is to use maps, this will be explained in @ref{map}. @end ifset @ifclear singularmanual The most general way to fetch data from one ring to another is to use maps. @end ifclear In this ring the terms are ordered by increasing exponents. The local Milnor number is now @smallexample Milnor(f); @expansion{} 4 @end smallexample This shows that @code{f} has outside the origin in affine 3-space singularities with local Milnor number adding up to @tex $12-4=8$. @end tex @ifinfo 12-4=8. @end ifinfo Using global and local orderings as above is a convenient way to check whether a variety has singularities outside the origin. The command @code{jacob} applied twice gives the Hessian of @code{f}, a 3x3 - matrix. @smallexample matrix H = jacob(jacob(f)); H; @expansion{} H[1,1]=6x+6xy2-2y3 @expansion{} H[1,2]=6x2y-6xy2 @expansion{} H[1,3]=0 @expansion{} H[2,1]=6x2y-6xy2 @expansion{} H[2,2]=6y+2x3-6x2y @expansion{} H[2,3]=0 @expansion{} H[3,1]=0 @expansion{} H[3,2]=0 @expansion{} H[3,3]=2 @end smallexample The @code{print} command displays the matrix in a nicer form. @smallexample print(H); @expansion{} 6x+6xy2-2y3,6x2y-6xy2, 0, @expansion{} 6x2y-6xy2, 6y+2x3-6x2y,0, @expansion{} 0, 0, 2 @end smallexample We may calculate the determinant and (the ideal generated by all) minors of a given size. @smallexample det(H); @expansion{} 72xy+24x4-72x3y+72xy3-24y4-48x4y2+64x3y3-48x2y4 minor(H,1); // the 1x1 - minors @expansion{} _[1]=2 @expansion{} _[2]=6y+2x3-6x2y @expansion{} _[3]=6x2y-6xy2 @expansion{} _[4]=6x2y-6xy2 @expansion{} _[5]=6x+6xy2-2y3 @end smallexample The algorithm of the standard basis computations may be affected by the command @code{option}. For example, a reduced standard basis of the ideal generated by the @tex $1 \times 1$-minors @end tex @ifinfo 1 x 1 - minors @end ifinfo of H is obtained in the following way: @smallexample option(redSB); groebner(minor(H,1)); @expansion{} _[1]=1 @end smallexample This shows that 1 is contained in the ideal of the @tex $1 \times 1$-minors, @end tex @ifinfo 1 x 1 - minors, @end ifinfo hence the corresponding variety is empty. @c Coming back to some mathematical considerations, we study the problem how @c to calculate some .... @c ------------------------------------------------------------------ @c REMEMBER TO EDIT NEXT AND PREVIOUS NODE IF YOU UNCOMMENT THIS NODE! @c @node Maps and elimination, Modules and their annihilator, Change of rings, Getting started @c @subsection Maps and elimination @c @cindex Maps and elimination @c ------------------------------------------------------------------ @node Modules and their annihilator, Resolution, Change of rings, Getting started @ifset singularmanual @subsection Modules and their annihilator @end ifset @ifclear singularmanual @section Modules and their annihilator @end ifclear @cindex Modules and and their annihilator Now we shall give three more advanced examples. @sc{Singular} is able to handle modules over all the rings, which can be defined as a basering. A free module of rank @code{n} is defined as follows: @smallexample ring rr; int n = 4; freemodule(4); @expansion{} _[1]=gen(1) @expansion{} _[2]=gen(2) @expansion{} _[3]=gen(3) @expansion{} _[4]=gen(4) typeof(_); @expansion{} module print(freemodule(4)); @expansion{} 1,0,0,0, @expansion{} 0,1,0,0, @expansion{} 0,0,1,0, @expansion{} 0,0,0,1 @end smallexample To define a module, we give a list of vectors generating a submodule of a free module. Then this set of vectors may be identified with the columns of a matrix. For that reason in @sc{Singular} matrices and modules may be interchanged. However, the representation is different (modules may be considered as sparse represented matrices). @smallexample ring r =0,(x,y,z),dp; module MD = [x,0,x],[y,z,-y],[0,z,-2y]; matrix MM = MD; print(MM); @expansion{} x,y,0, @expansion{} 0,z,z, @expansion{} x,-y,-2y @end smallexample However the submodule @ifinfo @math{MD} @end ifinfo @tex $MD$ @end tex may also be considered as the module of relations of the factor module @tex $r^3/MD$. @end tex @ifinfo r^3/MD. @end ifinfo In this way, @sc{Singular} can treat arbitrary finitely generated modules over the @ifset singularmanual basering (@pxref{Representation of mathematical objects}). @end ifset @ifclear singularmanual basering. @end ifclear In order to get the module of relations of @ifinfo @math{MD} @end ifinfo @tex $MD$ @end tex , we use the command @code{syz}. @smallexample syz(MD); @expansion{} _[1]=x*gen(3)-x*gen(2)+y*gen(1) @end smallexample We want to calculate, as an application, the annihilator of a given module. Let @tex $M = r^3/U$, @end tex @ifinfo M = r^3/U, @end ifinfo where U is our defining module of relations for the module @tex $M$. @end tex @ifinfo M. @end ifinfo @smallexample module U = [z3,xy2,x3],[yz2,1,xy5z+z3],[y2z,0,x3],[xyz+x2,y2,0],[xyz,x2y,1]; @end smallexample Then, by definition, the annihilator of M is the ideal @tex $\hbox{ann}(M) = \{a \mid aM = 0 \}$ @end tex @ifinfo ann(M) = @{a | aM = 0 @} @end ifinfo which is by the description of M the same as @tex $\{ a \mid ar^3 \in U \}$. @end tex @ifinfo @{ a | ar^3 contained in U@}. @end ifinfo Hence we have to calculate the quotient @tex $U \colon r^3 $. @end tex @ifinfo U:r^3. @end ifinfo The rank of the free module is determined by the choice of U and is the number of rows of the corresponding matrix. This may be determined by the function @code{nrows}. All we have to do now is the following: @smallexample quotient(U,freemodule(nrows(U))); @end smallexample @noindent The result is too big to be shown here. @c ------------------------------------------------------------------ @node Resolution, , Modules and their annihilator, Getting started @ifset singularmanual @subsection Resolution @end ifset @ifclear singularmanual @section Resolution @end ifclear @cindex Resolution There are several commands in @sc{Singular} for computing free resolutions. The most general command is @code{res(... ,n)} which determines heuristically what method to use for the given problem. It computes the free resolution up to the length @ifinfo @math{n} @end ifinfo @tex $n$ @end tex , where @ifinfo @math{n=0} @end ifinfo @tex $n=0$ @end tex corresponds to the full resolution. Here we use the possibility to inspect the calculation process using the option @code{prot}. @smallexample ring R; // the default ring in char 32003 R; @expansion{} // characteristic : 32003 @expansion{} // number of vars : 3 @expansion{} // block 1 : ordering dp @expansion{} // : names x y z @expansion{} // block 2 : ordering C ideal I = x4+x3y+x2yz,x2y2+xy2z+y2z2,x2z2+2xz3,2x2z2+xyz2; option(prot); resolution rs = res(I,0); @expansion{} using lres @expansion{} 4(m0)4(m1).5(m1)g.g6(m1)...6(m2).. @end smallexample @noindent Disable this protocol with @smallexample option(noprot); @end smallexample When we enter the name of the calculated resolution, we get a pictorial description of the minimized resolution where the exponents denote the rank of the free modules. Note that the calculated resolution itself may not yet be minimal. @smallexample rs; @expansion{} 1 4 5 2 0 @expansion{}R <-- R <-- R <-- R <-- R @expansion{} @expansion{}0 1 2 3 4 print(betti(rs),"betti"); @expansion{} 0 1 2 3 @expansion{} ------------------------------ @expansion{} 0: 1 - - - @expansion{} 1: - - - - @expansion{} 2: - - - - @expansion{} 3: - 4 1 - @expansion{} 4: - - 1 - @expansion{} 5: - - 3 2 @expansion{} ------------------------------ @expansion{} total: 1 4 5 2 @end smallexample In order to minimize the resolution, that is to calculate the maps of the minimal free resolution, we use the command @code{minres}: @smallexample rs=minres(rs); @end smallexample A single module in this resolution is obtained (as usual) with the brackets @code{[} and @code{]}. The @code{print} command can be used to display a module in a more readable format: @smallexample print(rs[3]); @expansion{} z3, -xyz-y2z-4xz2+16z3, @expansion{} 0, -y2, @expansion{} -y+4z,48z, @expansion{} x+2z, 48z, @expansion{} 0, x+y-z @end smallexample In this case, the output is to be interpreted as follows: the 3rd syzygy module of R/I, @code{rs[3]}, is the rank-2-submodule of @tex $R^5$ @end tex @ifinfo R^5 @end ifinfo generated by the vectors @tex $(z^3,0,-y+4z,x+2z,0)$ and $(-xyz-y^2z-4xz^2+16z^3,-y^2,48z,48z,x+y-z)$. @end tex @ifinfo (z^3,0,-y+4z,x+2z,0) and (-xyz-y^2z-4xz^2+16z^3,-y^2,48z,48z,x+y-z). @end ifinfo texi2html-1.82/test/singular_manual/math.tex0000644000175000017500000010164311264347126023056 0ustar flichtenheldflichtenheld@comment -*-texinfo-*- @comment This file was generated by doc2tex.pl from math.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT math.doc INSTEAD @comment Id: math.tex,v 1.1 2003/08/08 14:27:06 pertusus Exp $ @comment this file contains the mathematical background of Singular @c The following directives are necessary for proper compilation @c with emacs (C-c C-e C-r). Please keep it as it is. Since it @c is wrapped in `@ignore' and `@end ignore' it does not harm `tex' or @c `makeinfo' but is a great help in editing this file (emacs @c ignores the `@ignore'). @ignore %**start \input texinfo.tex @setfilename math.hlp @node Top, Mathematical background @menu * General concepts:: @end menu @node Mathematical background, SINGULAR libraries, Examples, Top @chapter Mathematical background %**end @end ignore This chapter introduces some of the mathematical notions and definitions used throughout the manual. It is mostly a collection of the most prominent definitions and properties. For details, please, refer to some articles or text books (see @ref{References}). @menu * Standard bases:: * Hilbert function:: * Syzygies and resolutions:: * Characteristic sets:: * Gauss-Manin connection:: * Toric ideals and integer programming:: * References:: @end menu @c --------------------------------------------------------------------------- @node Standard bases, Hilbert function, ,Mathematical background @section Standard bases @cindex Standard bases @subheading Definition @tex Let $R = \hbox{Loc}_< K[\underline{x}]$ and let $I$ be a submodule of $R^r$. Note that for r=1 this means that $I$ is an ideal in $R$. Denote by $L(I)$ the submodule of $R^r$ generated by the leading terms of elements of $I$, i.e. by $\left\{L(f) \mid f \in I\right\}$. Then $f_1, \ldots, f_s \in I$ is called a {\bf standard basis} of $I$ if $L(f_1), \ldots, L(f_s)$ generate $L(I)$. @end tex @ifinfo Let R = Loc K[x] and let I be a submodule of $R^r$. Denote by L(I) the submodule of R^r generated by the leading terms of elements in $I$, i.e. by @{ L(f) | f in I@}. Then f_1, @dots{}, f_s in I is called a @strong{standard basis} of I if L(f_1), @dots{}, L(f_s) generate L(I). @end ifinfo @subheading Properties @table @asis @item normal form: @cindex Normal form @tex A function $\hbox{NF} : R^r \times \{G \mid G\ \hbox{ a standard basis}\} \to R^r, (p,G) \mapsto \hbox{NF}(p|G)$, is called a {\bf normal form} if for any $p \in R^r$ and any standard basis $G$ the following holds: if $\hbox{NF}(p|G) \not= 0$ then $L(g)$ does not divide $L(\hbox{NF}(p|G))$ for all $g \in G$. \noindent $\hbox{NF}(p|G)$ is called a {\bf normal form of} $p$ {\bf with respect to} $G$ (note that such a function is not unique). @end tex @ifinfo A function NF : R^r x @{G | G a standard basis@} -> R^r, (p,G) -> NF(p|G), is called a @strong{normal form} if for any p in R^r and any standard basis G the following holds: if NF(p|G) <> 0 then L(g) does not divide L(NF(p|G)) for all g in G. @*NF(p|G) is called a @strong{normal form} of p with respect to G (note that such a function is not unique). @end ifinfo @item ideal membership: @cindex Ideal membership @tex For a standard basis $G$ of $I$ the following holds: $f \in I$ if and only if $\hbox{NF}(f,G) = 0$. @end tex @ifinfo For a standart basis G of I the following holds: f in I if and only if NF(f,G) = 0. @end ifinfo @item Hilbert function: @tex Let \hbox{$I \subseteq K[\underline{x}]^r$} be a homogeneous module, then the Hilbert function $H_I$ of $I$ (see below) and the Hilbert function $H_{L(I)}$ of the leading module $L(I)$ coincide, i.e., $H_I=H_{L(I)}$. @end tex @ifinfo Let I in K[x]^r be a homogeneous ideal, then the Hilbert function H_I of I and the Hilbert function H_L(I) of the leading ideal L(I) coincide. @end ifinfo @end table @c --------------------------------------------------------------------------- @node Hilbert function, Syzygies and resolutions, Standard bases, Mathematical background @section Hilbert function @cindex Hilbert function @cindex Hilbert series @tex Let M $=\bigoplus_i M_i$ be a graded module over $K[x_1,..,x_n]$ with respect to weights $(w_1,..w_n)$. The {\bf Hilbert function} of $M$, $H_M$, is defined (on the integers) by $$H_M(k) :=dim_K M_k.$$ The {\bf Hilbert-Poincare series} of $M$ is the power series $$\hbox{HP}_M(t) :=\sum_{i=-\infty}^\infty H_M(i)t^i=\sum_{i=-\infty}^\infty dim_K M_i \cdot t^i.$$ It turns out that $\hbox{HP}_M(t)$ can be written in two useful ways for weights $(1,..,1)$: $$\hbox{HP}_M(t)={Q(t)\over (1-t)^n}={P(t)\over (1-t)^{dim(M)}}$$ where $Q(t)$ and $P(t)$ are polynomials in ${\bf Z}[t]$. $Q(t)$ is called the {\bf first Hilbert series}, and $P(t)$ the {\bf second Hilbert series}. If \hbox{$P(t)=\sum_{k=0}^N a_k t^k$}, and \hbox{$d = dim(M)$}, then \hbox{$H_M(s)=\sum_{k=0}^N a_k$ ${d+s-k-1}\choose{d-1}$} (the {\bf Hilbert polynomial}) for $s \ge N$. @end tex @ifinfo Let M =(+) M_i be a graded module over K[x_1,...,x_n] with respect to weights (w_1,..w_n). The Hilbert function of M H_M is defined by @display H_M(k)=dim_K M_k. @end display The Hilbert-Poincare series of M is the power series @display HP_M(t)=sum_i dim_K (M_i)*t^i. @end display It turns out that HP_M(t) can be written in two useful ways for weights $(1,..,1)$: @display H_M(t)=Q(t)/(1-t)^n=P(t)/(1-t)^dim(M). @end display where Q(t) and P(t) are polynomials in Z[t]. Q(t) is called the first Hilbert series, and P(t) the second Hilbert series. If P(t)=sum_(k=0)^N a_k t^k, and d=dim(M), then @display H_M(s)=sum_(k=0)^N a_k binomial(d+s-k-1,d-1) (the Hilbert polynomial) @end display for s >= N. @end ifinfo @* @* @tex Generalizing these to quasihomogeneous modules we get $$\hbox{HP}_M(t)={Q(t)\over {\Pi_{i=1}^n(1-t^{w_i})}}$$ where $Q(t)$ is a polynomial in ${\bf Z}[t]$. $Q(t)$ is called the {\bf first (weighted) Hilbert series} of M. @end tex @ifinfo Generalizing these to quasihomogeneous modules we get @display H_M(t)=Q(t)/Prod((1-t)^(w_i)). @end display where Q(t) is a polynomial in Z[t]. Q(t) is called the first (weighted) Hilbert series of M. @end ifinfo @c --------------------------------------------------------------------------- @node Syzygies and resolutions, Characteristic sets, Hilbert function, Mathematical background @section Syzygies and resolutions @cindex Syzygies and resolutions @subheading Syzygies @tex Let $R$ be a quotient of $\hbox{Loc}_< K[\underline{x}]$ and let \hbox{$I=(g_1, ..., g_s)$} be a submodule of $R^r$. Then the {\bf module of syzygies} (or {\bf 1st syzygy module}, {\bf module of relations}) of $I$, syz($I$), is defined to be the kernel of the map \hbox{$R^s \rightarrow R^r,\; \sum_{i=1}^s w_ie_i \mapsto \sum_{i=1}^s w_ig_i$.} @end tex @ifinfo Let R be a quotient of Loc K[x] and let I=(g_1, ..., g_s) be a submodule of R^r. Then the @strong{module of syzygies} (or @strong{1st syzygy module}, @strong{module of relations}) of I, syz(I), is defined to be the kernel of the map @display R^s --> R^r, w_1*e_1 + ... + w_s*e_s -> w_1*g_1 + ... + w_s*g_s. @end display @end ifinfo The @strong{k-th syzygy module} is defined inductively to be the module of syzygies of the @tex $(k-1)$-st @end tex @ifinfo (k-1)-st @end ifinfo syzygy module. @tex Note, that the syzygy modules of $I$ depend on a choice of generators $g_1, ..., g_s$. But one can show that they depend on $I$ uniquely up to direct summands. @end tex @ifinfo Note, that the syzygy modules of I depend on a choice of generators g_1, ..., g_s. But one can show that they depend on I uniquely up to direct summands. @end ifinfo @table @code @item @strong{Example:} @smallexample @c reused example Syzygies math.doc:213 ring R= 0,(u,v,x,y,z),dp; ideal i=ux, vx, uy, vy; print(syz(i)); @expansion{} -y,0, -v,0, @expansion{} 0, -y,u, 0, @expansion{} x, 0, 0, -v, @expansion{} 0, x, 0, u @c end example Syzygies math.doc:213 @end smallexample @end table @subheading Free resolutions @tex Let $I=(g_1,...,g_s)\subseteq R^r$ and $M= R^r/I$. A {\bf free resolution of $M$} is a long exact sequence $$...\longrightarrow F_2 \buildrel{A_2}\over{\longrightarrow} F_1 \buildrel{A_1}\over{\longrightarrow} F_0\longrightarrow M\longrightarrow 0,$$ @end tex @ifinfo Let I=(g_1,...,g_s) in R^r and M=R^r/I. A free resolution of M is a long exact sequence @display ...--> F2 --A2-> F1 --A1-> F0-->M-->0, @end display @end ifinfo @*where the columns of the matrix @tex $A_1$ @end tex @ifinfo A_1 @end ifinfo generate @ifinfo @math{I} @end ifinfo @tex $I$ @end tex . Note, that resolutions need not to be finite (i.e., of finite length). The Hilbert Syzygy Theorem states, that for @tex $R=\hbox{Loc}_< K[\underline{x}]$ @end tex @ifinfo R=Loc K[x] @end ifinfo there exists a ("minimal") resolution of length not exceeding the number of variables. @table @code @item @strong{Example:} @smallexample @c reused example Free_resolutions math.doc:257 ring R= 0,(u,v,x,y,z),dp; ideal I = ux, vx, uy, vy; resolution resI = mres(I,0); resI; @expansion{} 1 4 4 1 @expansion{} R <-- R <-- R <-- R @expansion{} @expansion{} 0 1 2 3 @expansion{} // The matrix A_1 is given by print(matrix(resI[1])); @expansion{} vy,uy,vx,ux // We see that the columns of A_1 generate I. // The matrix A_2 is given by print(matrix(resI[3])); @expansion{} u, @expansion{} -v, @expansion{} -x, @expansion{} y @c end example Free_resolutions math.doc:257 @end smallexample @end table @subheading Betti numbers and regularity @cindex Betti number @cindex regularity @tex Let $R$ be a graded ring (e.g., $R = \hbox{Loc}_< K[\underline{x}]$) and let $I \subset R^r$ be a graded submodule. Let $$ R^r = \bigoplus_a R\cdot e_{a,0} \buildrel A_1 \over \longleftarrow \bigoplus_a R\cdot e_{a,1} \longleftarrow \ldots \longleftarrow \bigoplus_a R\cdot e_{a,n} \longleftarrow 0 $$ be a minimal free resolution of $R^n/I$ considered with homogeneous maps of degree 0. Then the {\bf graded Betti number} $b_{i,j}$ of $R^r/I$ is the minimal number of generators $e_{a,j}$ in degree $i+j$ of the $j$-th syzygy module of $R^r/I$ (i.e., the $(j-1)$-st syzygy module of $I$). Note, that by definition the $0$-th syzygy module of $R^r/I$ is $R^r$ and the 1st syzygy module of $R^r/I$ is $I$. @end tex @ifinfo Let R be a graded ring (e.g., R = K[x]) and let I in R^r be a graded submodule. Let @display R^r = (+) K[x]e(a,0) <--- (+) K[x]e(a,1) <--- @dots{} <--- (+) K[x]e(a,n) <--- 0 @end display be a minimal free resolution of R^n/I considered with homogeneous maps of degree 0. Then the @strong{graded Betti number} b_i,j of R^r/I is the minimal number of generators e_a,j in degree i+j of the j-th syzygy module of R^r/I (i.e., the (j-1)-st syzygy module of I). Note, that by definition the 0th syzygy module of R^r/I is R^r and the 1st syzygy module of R^r/I is I. @end ifinfo The @strong{regularity} of @ifinfo @math{I} @end ifinfo @tex $I$ @end tex is the smallest integer @ifinfo @math{s} @end ifinfo @tex $s$ @end tex such that @tex $$ \hbox{deg}(e_{a,j}) \le s+j-1 \quad \hbox{for all $j$.} $$ @end tex @ifinfo @display deg(e(a,j)) <= s+j-1 for all j. @end display @end ifinfo @table @code @item @strong{Example:} @smallexample @c reused example Betti_numbers_and_regularity math.doc:319 ring R= 0,(u,v,x,y,z),dp; ideal I = ux, vx, uy, vy; resolution resI = mres(I,0); resI; @expansion{} 1 4 4 1 @expansion{} R <-- R <-- R <-- R @expansion{} @expansion{} 0 1 2 3 @expansion{} // the betti number: print(betti(resI), "betti"); @expansion{} 0 1 2 3 @expansion{} ------------------------------ @expansion{} 0: 1 - - - @expansion{} 1: - 4 4 1 @expansion{} ------------------------------ @expansion{} total: 1 4 4 1 // the regularity: regularity(resI); @expansion{} 2 @c end example Betti_numbers_and_regularity math.doc:319 @end smallexample @end table @c --------------------------------------------------------------------------- @node Characteristic sets, Gauss-Manin connection, Syzygies and resolutions, Mathematical background @section Characteristic sets @cindex Characteristic sets @tex Let $<$ be the lexicographical ordering on $R=K[x_1,...,x_n]$ with $x_1 < ... < x_n$. For $f \in R$ let lvar($f$) (the leading variable of $f$) be the largest variable in $f$, i.e., if $f=a_s(x_1,...,x_{k-1})x_k^s+...+a_0(x_1,...,x_{k-1})$ for some $k \leq n$ then lvar$(f)=x_k$. Moreover, let \hbox{ini}$(f):=a_s(x_1,...,x_{k-1})$. The pseudo remainder $r=\hbox{prem}(g,f)$ of $g$ with respect to $f$ is defined by the equality $\hbox{ini}(f)^a\cdot g = qf+r$ with $\hbox{deg}_{lvar(f)}(r)<\hbox{deg}_{lvar(f)}(f)$ and $a$ minimal. A set $T=\{f_1,...,f_r\} \subset R$ is called triangular if $\hbox{lvar}(f_1)<...<\hbox{lvar}(f_r)$. Moreover, let $ U \subset T $, then $(T,U)$ is called a triangular system, if $T$ is a triangular set such that $\hbox{ini}(T)$ does not vanish on $V(T) \setminus V(U) (=:V(T\setminus U))$. $T$ is called irreducible if for every $i$ there are no $d_i$,$f_i'$,$f_i''$ such that $$ \hbox{lvar}(d_i)<\hbox{lvar}(f_i) = \hbox{lvar}(f_i')=\hbox{lvar}(f_i''),$$ $$ 0 \not\in \hbox{prem}(\{ d_i, \hbox{ini}(f_i'), \hbox{ini}(f_i'')\},\{ f_1,...,f_{i-1}\}),$$ $$\hbox{prem}(d_if_i-f_i'f_i'',\{f_1,...,f_{i-1}\})=0.$$ Furthermore, $(T,U)$ is called irreducible if $T$ is irreducible. The main result on triangular sets is the following: let $G=\{g_1,...,g_s\} \subset R$ then there are irreducible triangular sets $T_1,...,T_l$ such that $V(G)=\bigcup_{i=1}^{l}(V(T_i\setminus I_i))$ where $I_i=\{\hbox{ini}(f) \mid f \in T_i \}$. Such a set $\{T_1,...,T_l\}$ is called an {\bf irreducible characteristic series} of the ideal $(G)$. @end tex @ifinfo Let > be the lexicographical ordering on R=K[x_1,...,x_n] with x_1<...), i.e., if f=a_s(x_1,...,x_(k-1))x_k^s+...+a_0(x_1,...,x_(k-1)) for some k<=n then lvar(f)=x_k. Moreover, let ini(f):=a_s(x_1,...,x_(k-1)). The pseudo remainder r=prem(g,f) of g with respect to f is defined by ini(f)^a*g=q*f+r with the property deg_(lvar(f))(r)(C,0) be a complex isolated hypersurface singularity given by a polynomial with algebraic coefficients which we also denote by f. Let O=C[x_0,...,x_n]_(x_0,...,x_n) be the local ring at the origin and J_f the Jacobian ideal of f. A @strong{Milnor representative} of f defines a differentiable fibre bundle over the punctured disc with fibres of homotopy type of mu n-spheres. The n-th cohomology bundle is a flat vector bundle of dimension n and carries a natural flat connection with covariant derivative d_t. The @strong{monodromy operator} is the action of a positively oriented generator of the fundamental group of the puctured disc on the Milnor fibre. Sections in the cohomology bundle of @strong{moderate growth} at 0 form a regular D=C@{t@}[d_t]-module G, the @strong{Gauss-Manin connection}. By integrating along flat multivalued families of cycles, one can consider fibrewise global holomorphic differential forms as elements of G. This factors through an inclusion of the @strong{Brieskorn lattice} H'':=Omega^(n+1)_(C^(n+1),0)/df*dOmega^(n-1)_(C^(n+1),0) in G. The D-module structure defines the @strong{V-filtration} V on G by V^a:=sum_(b>=a)C@{t@}ker(t*d_t-b)^(n+1). The Brieskorn lattice defines the @strong{Hodge filtration} F on G by F_k=d_t^kH'' which comes from the @strong{mixed Hodge structure} on the Milnor fibre. Note that F_(-1)=H'. The induced V-filtration on the Brieskorn lattice determines the @strong{singularity spectrum} Sp by Sp(a):=dim_CGr_V^a Gr^F_0G. The spectrum consists of mu rational numbers a_1,...,a_mu such that exp(2*pi*i*a_1),...,exp(2*pi*i*a_mu) are the eigenvalues of the monodromy. These @strong{spectral numbers} lie in the open interval (-1,n), symmetric about the midpoint (n-1)/2. The spectrum is constant under mu-constant deformations and has the following semicontinuity property: The number of spectral numbers in an interval (a,a+1] of all singularities of a small deformation of f is greater or equal to that of f in this interval. For semiquasihomogeneous singularities, this also holds for intervals of the form (a,a+1). Two given isolated singularities f and g determine two spectra and from these spectra we get an integer. This integer is the maximal positive integer k such that the semicontinuity holds for the spectrum of f and k times the spectrum of g. These numbers give bounds for the maximal number of isolated singularties of a specific type on a hypersurface X in P^n of degree d: such a hypersurface has a smooth hyperplane section, and the complement is a small deformation of a cone over this hyperplane section. The cone itself being a mu-constant deformation of x_0^d+...+x_n^d=0, the singularities are bounded by the spectrum of x_0^d+...+x_n^d. Using the library @code{gaussman.lib} one can compute the @strong{monodromy}, the V-filtration on H''/H', and the spectrum. @end ifinfo Let us consider as an example @ifinfo @math{f=x^5+x^2y^2+y^5} @end ifinfo @tex $f=x^5+x^2y^2+y^5$ @end tex . First, we compute a matrix @ifinfo @math{M} @end ifinfo @tex $M$ @end tex such that @tex $\exp(2\pi iM)$ @end tex @ifinfo exp(-2*pi*i*M) @end ifinfo is a monodromy matrix of @ifinfo @math{f} @end ifinfo @tex $f$ @end tex and the Jordan normal form of @ifinfo @math{M} @end ifinfo @tex $M$ @end tex : @smallexample @c reused example Gauss-Manin_connection math.doc:505 LIB "gaussman.lib"; ring R=0,(x,y),ds; poly f=x5+x2y2+y5; list l=monodromy(f); matrix M=jordanmatrix(l[1],l[2],l[3]); print(M); @expansion{} 1/2,0, 0, 0, 0, 0, 0,0, 0, 0, 0, @expansion{} 1, 1/2,0, 0, 0, 0, 0,0, 0, 0, 0, @expansion{} 0, 0, 7/10,0, 0, 0, 0,0, 0, 0, 0, @expansion{} 0, 0, 0, 7/10,0, 0, 0,0, 0, 0, 0, @expansion{} 0, 0, 0, 0, 9/10,0, 0,0, 0, 0, 0, @expansion{} 0, 0, 0, 0, 0, 9/10,0,0, 0, 0, 0, @expansion{} 0, 0, 0, 0, 0, 0, 1,0, 0, 0, 0, @expansion{} 0, 0, 0, 0, 0, 0, 0,11/10,0, 0, 0, @expansion{} 0, 0, 0, 0, 0, 0, 0,0, 11/10,0, 0, @expansion{} 0, 0, 0, 0, 0, 0, 0,0, 0, 13/10,0, @expansion{} 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 13/10 @c end example Gauss-Manin_connection math.doc:505 @end smallexample Now, we compute the V-filtration on @ifinfo @math{H''/H'} @end ifinfo @tex $H''/H'$ @end tex and the spectrum: @smallexample @c reused example Gauss-Manin_connection_1 math.doc:517 LIB "gaussman.lib"; ring R=0,(x,y),ds; poly f=x5+x2y2+y5; list l=vfilt(f); print(l[1]); @expansion{} -1/2, @expansion{} -3/10, @expansion{} -1/10, @expansion{} 0, @expansion{} 1/10, @expansion{} 3/10, @expansion{} 1/2 print(l[2]); @expansion{} 1,2,2,1,2,2,1 print(l[3]); @expansion{} [1]: @expansion{} _[1]=gen(11) @expansion{} [2]: @expansion{} _[1]=gen(10) @expansion{} _[2]=gen(6) @expansion{} [3]: @expansion{} _[1]=gen(9) @expansion{} _[2]=gen(4) @expansion{} [4]: @expansion{} _[1]=gen(5) @expansion{} [5]: @expansion{} _[1]=gen(3) @expansion{} _[2]=gen(8) @expansion{} [6]: @expansion{} _[1]=gen(2) @expansion{} _[2]=gen(7) @expansion{} [7]: @expansion{} _[1]=gen(1) print(l[4]); @expansion{} y5, @expansion{} y4, @expansion{} y3, @expansion{} y2, @expansion{} xy, @expansion{} y, @expansion{} x4, @expansion{} x3, @expansion{} x2, @expansion{} x, @expansion{} 1 @c end example Gauss-Manin_connection_1 math.doc:517 @end smallexample Here @code{l[1]} contains the spectral numbers, @code{l[2]} the corresponding multiplicities, @code{l[3]} a @ifinfo @math{C} @end ifinfo @tex $C$ @end tex -basis of the V-filtration on @ifinfo @math{H''/H'} @end ifinfo @tex $H''/H'$ @end tex in terms of the monomial basis of @tex $O/J_f\cong H''/H'$ @end tex @ifinfo O/J_f~=H''/H' @end ifinfo in @code{l[4]}. @tex If the principal part of $f$ is $C$-nondegenerate, one can compute the spectrum using the library {\tt spectrum.lib}. In this case, the V-filtration on $H''$ coincides with the Newton-filtration on $H''$ which allows to compute the spectrum more efficiently. @end tex @ifinfo If the principal part of f is C-nondegenerate, one can compute the spectrum using the library @code{spectrum.lib}. In this case, the V-filtration on H'' coincides with the Newton-filtration on H'' which allows to compute the spectrum more efficiently. @end ifinfo Let us calculate one specific example, the maximal number of triple points of type @tex $\tilde{E}_6$ on a surface $X\subset{P}^3$ @end tex @ifinfo E~_6 on a surface X in P^3 @end ifinfo of degree seven. This calculation can be done over the rationals. So choose a local ordering on @ifinfo @math{Q[x,y,z]} @end ifinfo @tex $Q[x,y,z]$ @end tex . Here we take the negative degree lexicographical ordering which is denoted @code{ds} in @sc{Singular}: @smallexample @c reused example Gauss-Manin_connection_2 math.doc:562 ring r=0,(x,y,z),ds; LIB "spectrum.lib"; poly f=x^7+y^7+z^7; list s1=spectrumnd( f ); s1; @expansion{} [1]: @expansion{} _[1]=-4/7 @expansion{} _[2]=-3/7 @expansion{} _[3]=-2/7 @expansion{} _[4]=-1/7 @expansion{} _[5]=0 @expansion{} _[6]=1/7 @expansion{} _[7]=2/7 @expansion{} _[8]=3/7 @expansion{} _[9]=4/7 @expansion{} _[10]=5/7 @expansion{} _[11]=6/7 @expansion{} _[12]=1 @expansion{} _[13]=8/7 @expansion{} _[14]=9/7 @expansion{} _[15]=10/7 @expansion{} _[16]=11/7 @expansion{} [2]: @expansion{} 1,3,6,10,15,21,25,27,27,25,21,15,10,6,3,1 @c end example Gauss-Manin_connection_2 math.doc:562 @end smallexample The command @code{spectrumnd(f)} computes the spectrum of @ifinfo @math{f} @end ifinfo @tex $f$ @end tex and returns a list with six entries: The Milnor number @tex $\mu(f)$, the geometric genus $p_g(f)$ @end tex @ifinfo mu(f), the geometric genus p_g(f) @end ifinfo and the number of different spectrum numbers. The other three entries are of type @code{intvec}. They contain the numerators, denominators and multiplicities of the spectrum numbers. So @tex $x^7+y^7+z^7=0$ @end tex @ifinfo x^7+y^7+z^7=0 @end ifinfo has Milnor number 216 and geometrical genus 35. Its spectrum consists of the 16 different rationals @* @tex ${3 \over 7}, {4 \over 7}, {5 \over 7}, {6 \over 7}, {1 \over 1}, {8 \over 7}, {9 \over 7}, {10 \over 7}, {11 \over 7}, {12 \over 7}, {13 \over 7}, {2 \over 1}, {15 \over 7}, {16 \over 7}, {17 \over 7}, {18 \over 7}$ @end tex @ifinfo 3/7, 4/7, 5/7, 6/7, 1, 8/7, 9/7, 10/7, 11/7, 12/7, 13/7, 2, 15/7, 16/7, 17/7, 18/7 @end ifinfo @*appearing with multiplicities @*1,3,6,10,15,21,25,27,27,25,21,15,10,6,3,1. @tex The singularities of type $\tilde{E}_6$ form a $\mu$-constant one parameter family given by $x^3+y^3+z^3+\lambda xyz=0,\quad \lambda^3\neq-27$. @end tex @ifinfo The singularities of type E~_6 form a mu-constant one parameter family given by x^3+y^3+z^3+lambda xyz=0, lambda^3 <> -27. @end ifinfo Therefore they have all the same spectrum, which we compute for @tex $x^3+y^3+z^3$. @end tex @ifinfo @math{x^3+y^3+z^3}. @end ifinfo @smallexample poly g=x^3+y^3+z^3; list s2=spectrumnd(g); s2; @expansion{} [1]: @expansion{} 8 @expansion{} [2]: @expansion{} 1 @expansion{} [3]: @expansion{} 4 @expansion{} [4]: @expansion{} 1,4,5,2 @expansion{} [5]: @expansion{} 1,3,3,1 @expansion{} [6]: @expansion{} 1,3,3,1 @end smallexample Evaluating semicontinuity is very easy: @smallexample semicont(s1,s2); @expansion{} 18 @end smallexample This tells us that there are at most 18 singularities of type @tex $\tilde{E}_6$ on a septic in $P^3$. But $x^7+y^7+z^7$ @end tex @ifinfo E~_6 on a septic in P^3. But x^7+y^7+z^7 @end ifinfo is semiquasihomogeneous (sqh), so we can also apply the stronger form of semicontinuity: @smallexample semicontsqh(s1,s2); @expansion{} 17 @end smallexample So in fact a septic has at most 17 triple points of type @tex $\tilde{E}_6$. @end tex @ifinfo E~_6. @end ifinfo Note that @code{spectrumnd(f)} works only if @ifinfo @math{f} @end ifinfo @tex $f$ @end tex has nondegenerate principal part. In fact @code{spectrumnd} will detect a degenerate principal part in many cases and print out an error message. However if it is known in advance that @ifinfo @math{f} @end ifinfo @tex $f$ @end tex has nondegenerate principal part, then the spectrum may be computed much faster using @code{spectrumnd(f,1)}. @c --------------------------------------------------------------------------- @node Toric ideals and integer programming, References, Gauss-Manin connection, Mathematical background @section Toric ideals and integer programming @cindex Toric ideals and integer programming @include ti_ip.tex @c --------------------------------------------------------------------------- @node References, , Toric ideals and integer programming, Mathematical background @section References @cindex References The Centre for Computer Algebra Kaiserslautern publishes a series of preprints which are electronically available at @code{http://www.mathematik.uni-kl.de/~zca/Reports_on_ca}. Other sources to check are @code{http://symbolicnet.mcs.kent.edu/}, @code{http://www.can.nl/},... and the following list of books: @subheading Text books on computational algebraic geometry @itemize @bullet @item Adams, W.; Loustaunau, P.: An Introduction to Gr@"obner Bases. Providence, RI, AMS, 1996 @item Becker, T.; Weisspfenning, V.: Gr@"obner Bases - A Computational Approach to Commutative Algebra. Springer, 1993 @item Cohen, H.: A Course in Computational Algebraic Number Theory, Springer, 1995 @item Cox, D.; Little, J.; O'Shea, D.: Ideals, Varieties and Algorithms. Springer, 1996 @item Eisenbud, D.: Commutative Algebra with a View Toward Algebraic Geometry. Springer, 1995 @item Greuel, G.-M.; Pfister, G.: A SINGULAR Introduction to Commuative Algebra, Springer, 2002 @item Mishra, B.: Algorithmic Algebra, Texts and Monographs in Computer Science. Springer, 1993 @item Sturmfels, B.: Algorithms in Invariant Theory. Springer 1993 @item Vasconcelos, W.: Computational Methods in Commutative Algebra and Algebraic Geometry. Springer, 1998 @end itemize @subheading Descriptions of algorithms @itemize @bullet @item Bareiss, E.: Sylvester's identity and multistep integer-preserving Gaussian elimination. Math. Comp. 22 (1968), 565-578 @item Campillo, A.: Algebroid curves in positive characteristic. SLN 813, 1980 @item Chou, S.: Mechanical Geometry Theorem Proving. D.Reidel Publishing Company, 1988 @item Decker, W.; Greuel, G.-M.; Pfister, G.: Primary decomposition: algorithms and comparisons. Preprint, Univ. Kaiserslautern, 1998. To appear in: Greuel, G.-M.; Matzat, B. H.; Hiss, G. (Eds.), Algorithmic Algebra and Number Theory. Springer Verlag, Heidelberg, 1998 @item Decker, W.; Greuel, G.-M.; de Jong, T.; Pfister, G.: The normalization: a new algorithm, implementation and comparisons. Preprint, Univ. Kaiserslautern, 1998 @item Decker, W.; Heydtmann, A.; Schreyer, F. O.: Generating a Noetherian Normalization of the Invariant Ring of a Finite Group, 1997, to appear in Journal of Symbolic Computation @item @tex Faug\`ere, @end tex @ifinfo Faugere, @end ifinfo J. C.; Gianni, P.; Lazard, D.; Mora, T.: Efficient computation of zero-dimensional Gr@"obner bases by change of ordering. Journal of Symbolic Computation, 1989 @item Gr@"abe, H.-G.: On factorized Gr@"obner bases, Univ. Leipzig, Inst. f@"ur Informatik, 1994 @item Grassmann, H.; Greuel, G.-M.; Martin, B.; Neumann, W.; Pfister, G.; Pohl, W.; Sch@"onemann, H.; Siebert, T.: On an implementation of standard bases and syzygies in @sc{Singular}. Proceedings of the Workshop Computational Methods in Lie theory in AAECC (1995) @item Greuel, G.-M.; Pfister, G.: Advances and improvements in the theory of standard bases and syzygies. Arch. d. Math. 63(1995) @item Kemper; Generating Invariant Rings of Finite Groups over Arbitrary Fields. 1996, to appear in Journal of Symbolic Computation @item Kemper and Steel: Some Algorithms in Invariant Theory of Finite Groups. 1997 @item Lee, H.R.; Saunders, B.D.: Fraction Free Gaussian Elimination for Sparse Matrices. Journal of Symbolic Computation (1995) 19, 393-402 @item Sch@"onemann, H.: Algorithms in @sc{Singular}, Reports on Computer Algebra 2(1996), Kaiserslautern @item Siebert, T.: On strategies and implementations for computations of free resolutions. Reports on Computer Algebra 8(1996), Kaiserslautern @item Wang, D.: Characteristic Sets and Zero Structure of Polynomial Sets. Lecture Notes, RISC Linz, 1989 @end itemize texi2html-1.82/test/singular_manual/INSTALL_mac.texi0000644000175000017500000001130311264347126024215 0ustar flichtenheldflichtenheld@comment -*-texinfo-*- @comment Id: INSTALL_mac.texi,v 1.1 2003/08/08 14:27:06 pertusus Exp $ @c FILE: INSTALL_classicMac.texi @c PURPOSE: Installation instructions for Singular on Macintosh @ifclear VERSION @include version.texi @end ifclear @ifclear singularmanual @majorheading Installation instructions for @sc{Singular} on a (classic) Macintosh @end ifclear @heading Installation preliminaries This is the final distribution of @sc{Singular} as MPW tool. Newer versions of @sc{Singular} will only be available for MacOS X (which is handled like other @sc{Unix}-systems). To install @sc{Singular} on a Macintosh (PPC only), you need the file @code{Singular-2-0-2-ppc-MPW.sea.hqx} resp. @code{Singular-2-0-2-ppc-MPW.hqx} which you can obtain by public ftp from @uref{ftp://www.mathematik.uni-kl.de/pub/Math/Singular}. Furthermore, you need MacOS version >= 8.5 with an installed MPW shell. This version works also without Carbon. @include register.texi @heading Installing @sc{Singular} on MacOS X Please see @uref{INSTALL_unix.html}. In contrast to other Unix systems, under MacOS X, @sc{Singular} is only available as a shell command and there is no Emacs interface. Enter @code{Singular} in a terminal under Aqua to run @sc{Singular}. Alternatively, you may choose @code{Terminal} as the application to open the file @code{Singular} with and put it into the dock. @heading Installing Singular @enumerate @item Make sure that you have MPW installed on your system. See below for instructions on how to install MPW and how to avoid conflicts with the @code{Carbon.lib}. @item Download the file @code{Singular-2-0-2-ppc-MPW.sea.hqx}. @item Expand the downloaded file using a standard Expander (like Compact Pro or StuffIt) to obtain the corresponding self-extracting @code{Singular-2-0-2-ppc-MPW.sea} file. @item Click on the self-extracting @code{Singular-2-0-2-ppc-MPW.sea} file. This will create a new folder named @code{Singular:} which contains the @sc{Singular} program in the subfolder @code{2-0-2:ppc-MPW:}. Do not change the structure of the subfolders. @item Make the folder which contains the executable to the working directory of the MPW shell. To start @sc{Singular}, you need to type @code{Singular} in the MPW worksheet. Clicking on the @sc{Singular} icon on the desktop, starts up the MPW shell (the working directory of the MPW shell is then the directory of the executable). If you start the MPW shell manually, you must set the working directory to the directory of the @sc{Singular} program. You may use the directory menu or write into the startup file of the MPW shell the line @smallexample setdirectory "@{Boot@}"Singular:2-0-2:ppc-MPW: @end smallexample if @code{"@{Boot@}"Singular:2-0-2:ppc-MPW:} is the folder of the executable. After unpacking, you will have a directory structure like: @table @code @item Singular:2-0-2:ppc-MPW:Singular Singular executable @item Singular:2-0-2:ppc-MPW:libparse parser for Singular libraries @item Singular:2-0-2:LIB: Singular libraries @item Singular:2-0-2:LIB:gftables: Singular gftables @item Singular:2-0-2:doc:singular.idx index of inline help @item Singular:2-0-2:doc:singular.hlp file for inline help @item Singular:2-0-2:README information of the distribution @item Singular:2-0-2:README.hlml @item Singular:2-0-2:COPYING license information @item Singular:2-0-2:COPYING.html @item Singular:2-0-2:NEWS news in the distribution @item Singular:2-0-2:NEWS.html @item Singular:2-0-2:INSTALL instructions like this file @end table The @sc{Singular} libraries have a special form to work here. Do not use the libraries from other distributions. They are not compatible. A supplementary file is @code{Singular-2-0-2-html.sea.hqx} which contains the html pages. You can use this with a browser but not from the program @sc{Singular}. The self-extracting archive will create the folder @code{html:} and you may extract it at @code{"@{Boot@}"Singular:2-0-2:}. @end enumerate @heading Installing MPW The final version of MPW is downloadable from Apple at @uref{ftp://ftp.apple.com/developer/Tool_Chest/Core_Mac_OS_Tools/MPW_etc./MPW-GM_Images/}. Older versions of @code{Carbon.lib} may conflict with the latest MPW. In this case, you need to update @code{Carbon.lib} or work without it. @heading Restrictions Some typical Unix features of @sc{Singular} are not working with MPW, e.g. links and cooperation with other programs like XEmacs and xterm. For any other troubles, please send an email to @email{singular@@mathematik.uni-kl.de} and include the header which is displayed by starting up @sc{Singular} with the @code{-v} option, and a description of your machine and operating system. @include info.texi @ifclear singularmanual Good luck and enjoy! Your @sc{Singular} team. @end ifclear texi2html-1.82/test/singular_manual/version.texi0000644000175000017500000000017411264347126023760 0ustar flichtenheldflichtenheld@c DO not edit this file. @set VERSION 2-0-4 @set VERSION_DATE October 2002 @set SHORT_VERSION 2-0 @set RPM_VERSION 2.0.4 texi2html-1.82/test/singular_manual/examples.tex0000644000175000017500000033663311264347126023754 0ustar flichtenheldflichtenheld@comment -*-texinfo-*- @comment This file was generated by doc2tex.pl from examples.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT examples.doc INSTEAD @comment Id: examples.tex,v 1.1 2003/08/08 14:27:06 pertusus Exp $ @comment this file contains the examples @c The following directives are necessary for proper compilation @c with emacs (C-c C-e C-r). Please keep it as it is. Since it @c is wrapped in `@ignore' and `@end ignore' it does not harm `tex' or @c `makeinfo' but is a great help in editing this file (emacs @c ignores the `@ignore'). @ignore %**start \input texinfo.tex @setfilename examples.hlp @node Top, Examples @menu * General concepts:: @end menu @node Examples, Mathematical Background, Tricks and pitfalls, Top @appendix Examples %**end @end ignore @ifinfo The following topics are treated: @end ifinfo @ifset singularmanual @menu * Milnor and Tjurina:: * Procedures and LIB:: * Critical points:: * Saturation:: * Long coefficients:: * Parameters:: * T1 and T2:: * Deformations:: * Finite fields:: * Elimination:: * Free resolution:: * Computation of Ext:: * Polar curves:: * Depth:: * Formatting output:: * Cyclic roots:: * G_a -Invariants:: * Invariants of a finite group:: * Factorization:: * Puiseux pairs:: * Primary decomposition:: * Normalization:: * Branches of an Isolated Space Curve Singularity:: * Kernel of module homomorphisms:: * Algebraic dependence:: * Classification:: * Fast lexicographical GB:: * Parallelization with MPtcp links:: @end menu @end ifset @ifclear singularmanual @menu * Milnor and Tjurina:: * Procedures and LIB:: * Critical points:: * Saturation:: * Parameters:: * Deformations:: * Elimination:: * Free resolution:: * Formatting output:: * Factorization:: * Kernel of module homomorphisms:: * Algebraic dependence:: @end menu @end ifclear @c ---------------------------------------------------------------------------- @c @node Start SINGULAR, Milnor and Tjurina,Examples, Examples @c @section Start SINGULAR @c @cindex Start SINGULAR @c Call @sc{Singular} by typing @code{Singular} [return] @c To use the online help type for instance: @c @code{help;} @code{help command;} @code{help General syntax;} @code{help ring;}... @c Please note: EVERY COMMAND MUST END WITH A SEMICOLON ";" @c To leave @sc{Singular}, type one of the: @c @code{quit;} @code{exit;} @code{$} @c The two characters @code{//} make the rest of the line a comment. @c ---------------------------------------------------------------------------- @node Milnor and Tjurina, Procedures and LIB, Examples, Examples @section Milnor and Tjurina @cindex Milnor @cindex Tjurina The Milnor number, resp.@: the Tjurina number, of a power series f in @tex $K[[x_1,\ldots,x_n]]$ @end tex @ifinfo K[[x1,...,xn]] @end ifinfo is @ifinfo @* milnor(f) = dim_K(K[[x1,...,xn]]/jacob(f)) @*resp.@: @* tjurina(f) = dim_K(K[[x1,...,xn]]/((f)+jacob(f))) @*where @end ifinfo @tex $$ \hbox{milnor}(f) = \hbox{dim}_K(K[[x_1,\ldots,x_n]]/\hbox{jacob}(f)), $$ respectively $$ \hbox{tjurina}(f) = \hbox{dim}_K(K[[x_1,\ldots,x_n]]/((f)+\hbox{jacob}(f))) $$ where @end tex @code{jacob(f)} is the ideal generated by the partials of @code{f}. @code{tjurina(f)} is finite, if and only if @code{f} has an isolated singularity. The same holds for @code{milnor(f)} if K has characteristic 0. @sc{Singular} displays -1 if the dimension is infinite. @sc{Singular} cannot compute with infinite power series. But it can work in @tex $\hbox{Loc}_{(x)}K[x_1,\ldots,x_n]$, @end tex @ifinfo Loc_(x)K[x1,...,xn], @end ifinfo the localization of @tex $K[x_1,\ldots,x_n]$ @end tex @ifinfo K[x1,...,xn] @end ifinfo at the maximal ideal @tex $(x_1,\ldots,x_n)$. @end tex @ifinfo (x1,...,xn). @end ifinfo To do this one has to define an s-ordering like ds, Ds, ls, ws, Ws or an appropriate matrix ordering (look at the manual to get information about the possible monomial orderings in @sc{Singular}, or type @code{help Monomial orderings;} to get a menu of possible orderings. For further help type, e.g., @code{help local orderings;}). @ifset singularmanual See @ref{Monomial orderings}. @end ifset We shall show in the example below how to realize the following: @itemize @bullet @item set option @code{prot} to have a short protocol during standard basis computation @item define the ring @code{r1} with char 32003, variables @code{x,y,z}, monomial ordering @code{ds}, series ring (i.e., K[x,y,z] localized at (x,y,z)) @item list the information about @code{r1} by typing its name @item define the integers @code{a,b,c,t} @item define a polynomial @code{f} (depending on @code{a,b,c,t}) and display it @item define the jacobian ideal @code{i} of @code{f} @item compute a standard basis of @code{i} @item compute the Milnor number (=250) with @code{vdim} and create and display a string in order to comment the result (text between quotes " "; is a 'string') @item compute a standard basis of @code{i+(f)} @item compute the Tjurina number (=195) with @code{vdim} @item then compute the Milnor number (=248) and the Tjurina number (=195) for @code{t}=1 @item reset the option to @code{noprot} @end itemize @smallexample @c computed example Milnor_and_Tjurina examples.doc:196 option(prot); ring r1 = 32003,(x,y,z),ds; r1; @expansion{} // characteristic : 32003 @expansion{} // number of vars : 3 @expansion{} // block 1 : ordering ds @expansion{} // : names x y z @expansion{} // block 2 : ordering C int a,b,c,t=11,5,3,0; poly f = x^a+y^b+z^(3*c)+x^(c+2)*y^(c-1)+x^(c-1)*y^(c-1)*z3+ x^(c-2)*y^c*(y^2+t*x)^2; f; @expansion{} y5+x5y2+x2y2z3+xy7+z9+x11 ideal i=jacob(f); i; @expansion{} i[1]=5x4y2+2xy2z3+y7+11x10 @expansion{} i[2]=5y4+2x5y+2x2yz3+7xy6 @expansion{} i[3]=3x2y2z2+9z8 ideal j=std(i); @expansion{} [1023:2]7(2)s8s10s11s12s(3)s13(4)s(5)s14(6)s(7)15--.s(6)-16.-.s(5)17.s(7)\ s--s18(6).--19-..sH(24)20(3)...21....22....23.--24- @expansion{} product criterion:10 chain criterion:69 "The Milnor number of f(11,5,3) for t=0 is", vdim(j); @expansion{} The Milnor number of f(11,5,3) for t=0 is 250 j=i+f; // overwrite j j=std(j); @expansion{} [1023:2]7(3)s8(2)s10s11(3)ss12(4)s(5)s13(6)s(8)s14(9).s(10).15--sH(23)(8)\ ...16......17.......sH(21)(9)sH(20)16(10).17...........18.......19..----.\ .sH(19) @expansion{} product criterion:10 chain criterion:53 vdim(j); // compute the Tjurina number for t=0 @expansion{} 195 t=1; f=x^a+y^b+z^(3*c)+x^(c+2)*y^(c-1)+x^(c-1)*y^(c-1)*z3 +x^(c-2)*y^c*(y^2+t*x)^2; ideal i1=jacob(f); ideal j1=std(i1); @expansion{} [1023:2]7(2)s8s10s11s12s13(3)ss(4)s14(5)s(6)s15(7).....s(8)16.s...s(9)..1\ 7............s18(10).....s(11)..-.19.......sH(24)(10).....20...........21\ ..........22.............................23..............................\ .24.----------.25.26 @expansion{} product criterion:11 chain criterion:83 "The Milnor number of f(11,5,3) for t=1:",vdim(j1); @expansion{} The Milnor number of f(11,5,3) for t=1: 248 vdim(std(j1+f)); // compute the Tjurina number for t=1 @expansion{} [1023:2]7(16)s8(15)s10s11ss(16)-12.s-s13s(17)s(18)s(19)-s(18).-14-s(17)-s\ (16)ss(17)s15(18)..-s...--.16....-.......s(16).sH(23)s(18)...17..........\ 18.........sH(20)17(17)....................18..........19..---....-.-....\ .....20.-----...s17(9).........18..............19..-.......20.-......21..\ .......sH(19)16(5).....18......19.----- @expansion{} product criterion:15 chain criterion:174 @expansion{} 195 option(noprot); @c end example Milnor_and_Tjurina examples.doc:196 @end smallexample @c ---------------------------------------------------------------------------- @node Procedures and LIB, Critical points, Milnor and Tjurina, Examples @section Procedures and LIB @cindex Procedures and LIB The computation of the Milnor number (for an arbitrary isolated complete intersection singularity ICIS) and the Tjurina number (for an arbitrary isolated singularity) can be done by using procedures from the library @code{sing.lib}. For a hypersurface singularity it is very easy to write a procedure which computes the Milnor number and the Tjurina number. We shall demonstrate: @itemize @bullet @item load the library @code{sing.lib} @c item @c disable the protocol option @item define a local ring in 2 variables and characteristic 0 @item define a plane curve singularity @item compute Milnor number and Tjurina number by using the procedures @code{milnor} and @code{tjurina} @item write your own procedures: (A procedure has a list of input parameters and of return values, both lists may be empty.) @itemize @minus @item the procedure @code{mil} which must be called with one parameter, a polynomial. The name g is local to the procedure and is killed automatically. @code{mil} returns the Milnor number (and displays a comment). @item the procedure @code{tjur} where the parameters are not specified. They are referred to by @code{#[1]} for the 1st, @code{#[2]} for the 2nd parameter, etc. @code{tjur} returns the Tjurina number (and displays a comment). @item the procedure @code{milrina} which returns a list consisting of two integers, the Milnor and the Tjurina number. @end itemize @end itemize @smallexample LIB "sing.lib"; // you should get the information that sing.lib has been loaded // together with some other libraries which are needed by sing.lib ring r = 0,(x,y),ds; poly f = x7+y7+(x-y)^2*x2y2; milnor(f); @expansion{} 28 tjurina(f); @expansion{} 24 proc mil (poly g) @{ "Milnor number:"; return(vdim(std(jacob(g)))); @} mil(f); @expansion{} Milnor number: @expansion{} 28 proc tjur @{ "Tjurina number:"; return(vdim(std(jacob(#[1])+#[1]))); @} tjur(f); @expansion{} Tjurina number: @expansion{} 24 proc milrina (poly f) @{ ideal j=jacob(f); list L=vdim(std(j)),vdim(std(j+f)); return(L); @} milrina(f); // a list containing Milnor and Tjurina number @expansion{} [1]: @expansion{} 28 @expansion{} [2]: @expansion{} 24 milrina(f)[2]; // the second element of the list @expansion{} 24 @end smallexample @c ---------------------------------------------------------------------------- @node Critical points, Saturation, Procedures and LIB, Examples @section Critical points @cindex Critical points The same computation which computes the Milnor, resp.@: the Tjurina, number, but with ordering @code{dp} instead of @code{ds} (i.e., in @tex $K[x_1,\ldots,x_n]$ @end tex @ifinfo K[x1,...,xn] @end ifinfo instead of @tex $\hbox{Loc}_{(x)}K[x_1,\ldots,x_n])$ @end tex @ifinfo Loc_(x)K[x1,...,xn]) @end ifinfo gives: @itemize @bullet @item the number of critical points of @code{f} in the affine plane (counted with multiplicities) @item the number of singular points of @code{f} on the affine plane curve @code{f}=0 (counted with multiplicities). @end itemize We start with the ring @code{r1} from section @ref{Milnor and Tjurina} and its elements. The following will be realized below: @itemize @bullet @item reset the protocol option and activate the timer @item define the ring @code{r2} with char 32003, variables @code{x,y,z} and monomial ordering @code{dp} (= degrevlex) (i.e., the polynomial ring = K[x,y,z]). @item Note that polynomials, ideals, matrices (of polys), vectors, modules belong to a ring, hence we have to define @code{f} and @code{jacob(f)} again in @code{r2}. Since these objects are local to a ring, we may use the same names. Instead of defining @code{f} again we map it from ring @code{r1} to @code{r2} by using the @code{imap} command (@code{imap} is a convenient way to map variables from some ring identically to variables with the same name in the basering, even if the ground field is different. Compare with @code{fetch} which works for almost identical rings, e.g., if the rings differ only by the ordering or by the names of the variables and which may be used to rename variables). Integers and strings, however, do not belong to any ring. Once defined they are globally known. @item The result of the computation here (together with the previous one in @ref{Milnor and Tjurina}) shows that (for @code{t}=0) @tex $\hbox{dim}_K(\hbox{Loc}_{(x,y,z)}K[x,y,z]/\hbox{jacob}(f))$ @end tex @ifinfo dim_K(Loc_(x,y,z)K[x,y,z]/jacob(f)) @end ifinfo = 250 (previously computed) while @tex $\hbox{dim}_K(K[x,y,z]/\hbox{jacob}(f))$ @end tex @ifinfo dim_K(K[x,y,z]/jacob(f)) @end ifinfo = 536. Hence @code{f} has 286 critical points, counted with multiplicity, outside the origin. Moreover, since @tex $\hbox{dim}_K(\hbox{Loc}_{(x,y,z)}K[x,y,z]/(\hbox{jacob}(f)+(f)))$ @end tex @ifinfo dim_K(Loc_(x,y,z)K[x,y,z]/(jacob(f)+(f))) @end ifinfo = 195 = @tex $\hbox{dim}_K(K[x,y,z]/(\hbox{jacob}(f)+(f)))$, @end tex @ifinfo dim_K(K[x,y,z]/(jacob(f)+(f))), @end ifinfo the affine surface @code{f}=0 is smooth outside the origin. @end itemize @smallexample @c computed example Critical_points examples.doc:402 ring r1 = 32003,(x,y,z),ds; int a,b,c,t=11,5,3,0; poly f = x^a+y^b+z^(3*c)+x^(c+2)*y^(c-1)+x^(c-1)*y^(c-1)*z3+ x^(c-2)*y^c*(y^2+t*x)^2; option(noprot); timer=1; ring r2 = 32003,(x,y,z),dp; poly f=imap(r1,f); ideal j=jacob(f); vdim(std(j)); @expansion{} 536 vdim(std(j+f)); @expansion{} 195 timer=0; // reset timer @c end example Critical_points examples.doc:402 @end smallexample @c ---------------------------------------------------------------------------- @ifset singularmanual @node Saturation, Long coefficients, Critical points, Examples @end ifset @ifclear singularmanual @node Saturation, Parameters, Critical points, Examples @end ifclear @section Saturation @cindex Saturation Since in the example above, the ideal @ifinfo @math{j+(f)} @end ifinfo @tex $j+(f)$ @end tex has the same @code{vdim} in the polynomial ring and in the localization at 0 (each 195), @ifinfo @math{f=0} @end ifinfo @tex $f=0$ @end tex is smooth outside 0. Hence @ifinfo @math{j+(f)} @end ifinfo @tex $j+(f)$ @end tex contains some power of the maximal ideal @ifinfo @math{m} @end ifinfo @tex $m$ @end tex . We shall check this in a different manner: For any two ideals @ifinfo @math{i, j} @end ifinfo @tex $i, j$ @end tex in the basering @ifinfo @math{R} @end ifinfo @tex $R$ @end tex let @tex $$ \hbox{sat}(i,j)=\{x\in R\;|\; \exists\;n\hbox{ s.t. } x\cdot(j^n)\subseteq i\} = \bigcup_{n=1}^\infty i:j^n$$ @end tex @ifinfo @*sat(i,j) = @{x in @math{R} | there is an n s.t. x*(j^n) contained in i@} @* = union_(n=1...) of i:j^n, @end ifinfo @*denote the saturation of @ifinfo @math{i} @end ifinfo @tex $i$ @end tex with respect to @ifinfo @math{j} @end ifinfo @tex $j$ @end tex . This defines, geometrically, the closure of the complement of V( @ifinfo @math{j} @end ifinfo @tex $j$ @end tex ) in V( @ifinfo @math{i} @end ifinfo @tex $i$ @end tex ) (V( @ifinfo @math{i} @end ifinfo @tex $i$ @end tex ) denotes the variety defined by @ifinfo @math{i} @end ifinfo @tex $i$ @end tex ). In our case, @ifinfo @math{sat(j+(f),m)} @end ifinfo @tex $sat(j+(f),m)$ @end tex must be the whole ring, hence generated by 1. The saturation is computed by the procedure @code{sat} in @code{elim.lib} by computing iterated ideal quotients with the maximal ideal. @code{sat} returns a list of two elements: the saturated ideal and the number of iterations. (Note that @code{maxideal(n)} denotes the n-th power of the maximal ideal). @smallexample @c computed example Saturation examples.doc:457 LIB "elim.lib"; // loading library elim.lib // you should get the information that elim.lib has been loaded // together with some other libraries which are needed by it option(noprot); // no protocol ring r2 = 32003,(x,y,z),dp; poly f = x^11+y^5+z^(3*3)+x^(3+2)*y^(3-1)+x^(3-1)*y^(3-1)*z3+ x^(3-2)*y^3*(y^2)^2; ideal j=jacob(f); sat(j+f,maxideal(1)); @expansion{} [1]: @expansion{} _[1]=1 @expansion{} [2]: @expansion{} 17 // list the variables defined so far: listvar(); @expansion{} // r2 [0] *ring @expansion{} // j [0] ideal, 3 generator(s) @expansion{} // f [0] poly @expansion{} // LIB [0] string standard.lib,elim.li..., 83 char(s) @c end example Saturation examples.doc:457 @end smallexample @c ---------------------------------------------------------------------------- @ifset singularmanual @node Long coefficients, Parameters, Saturation, Examples @section Long coefficients @cindex Long coefficients The following innocent example produces in its standard basis extremely long coefficients in char 0 for the lexicographical ordering. But a very small deformation does not (the undeformed example is degenerate with respect to the Newton boundary). This example demonstrates that it might be wise, for complicated examples, to do the calculation first in positive char (e.g., 32003). It has been shown, that in complicated examples, more than 95 percent of the time needed for a standard basis computation is used in the computation of the coefficients (in char 0). The representation of long integers with real is demonstrated. @smallexample @c computed example Long_coefficients examples.doc:491 timer = 1; // activate the timer option(prot); ring R0 = 0,(x,y),lp; poly f = x5+y11+xy9+x3y9; ideal i = jacob(f); ideal i1 = i,i[1]*i[2]; // undeformed ideal ideal i2 = i,i[1]*i[2]+1/1000000*x5y8; // deformation of i1 i1; i2; @expansion{} i1[1]=5x4+3x2y9+y9 @expansion{} i1[2]=9x3y8+9xy8+11y10 @expansion{} i1[3]=45x7y8+27x5y17+45x5y8+55x4y10+36x3y17+33x2y19+9xy17+11y19 @expansion{} i2[1]=5x4+3x2y9+y9 @expansion{} i2[2]=9x3y8+9xy8+11y10 @expansion{} i2[3]=45x7y8+27x5y17+45000001/1000000x5y8+55x4y10+36x3y17+33x2y19+9xy17+1\ 1y19 ideal j = std(i1); @expansion{} [65535:1]11(2)ss19s20s21s22(3)-23-s27s28s29s30s31s32s33s34s35s36s37s38s39\ s40s70- @expansion{} product criterion:1 chain criterion:30 j; @expansion{} j[1]=264627y39+26244y35-1323135y30-131220y26+1715175y21+164025y17+1830125\ y16 @expansion{} j[2]=12103947791971846719838321886393392913750065060875xy8-28639152114168\ 3198701331939250003266767738632875y38-31954402206909026926764622877573565\ 78554430672591y37+57436621420822663849721381265738895282846320y36+1657764\ 214948799497573918210031067353932439400y35+213018481589308191195677223898\ 98682697001205500y34+1822194158663066565585991976961565719648069806148y33\ -4701709279892816135156972313196394005220175y32-1351872269688192267600786\ 97600850686824231975y31-3873063305929810816961516976025038053001141375y30\ +1325886675843874047990382005421144061861290080000y29+1597720195476063141\ 9467945895542406089526966887310y28-26270181336309092660633348002625330426\ 7126525y27-7586082690893335269027136248944859544727953125y26-867853074106\ 49464602285843351672148965395945625y25-5545808143273594102173252331151835\ 700278863924745y24+19075563013460437364679153779038394895638325y23+548562\ 322715501761058348996776922561074021125y22+157465452677648386073957464715\ 68100780933983125y21-1414279129721176222978654235817359505555191156250y20\ -20711190069445893615213399650035715378169943423125y19+272942733337472665\ 573418092977905322984009750y18+789065115845334505801847294677413365720955\ 3750y17+63554897038491686787729656061044724651089803125y16-22099251729923\ 906699732244761028266074350255961625y14+147937139679655904353579489722585\ 91339027857296625y10 @expansion{} j[3]=5x4+3x2y9+y9 // Compute average coefficient length (=51) by // - converting j[2] to a string in order to compute the number // of characters // - divide this by the number of monomials: size(string(j[2]))/size(j[2]); @expansion{} 51 vdim(j); @expansion{} 63 // For a better representation normalize the long coefficients // of the polynomial j[2] and map it to real: poly p=(1/12103947791971846719838321886393392913750065060875)*j[2]; ring R1=real,(x,y),lp; short=0; // force the long output format poly p=imap(R0,p); p; @expansion{} x*y^8-2.366e-02*y^38-2.640e-01*y^37+4.745e-06*y^36+1.370e-04*y^35+1.760e-\ 03*y^34+1.505e-01*y^33+3.884e-07*y^32-1.117e-05*y^31-3.200e-04*y^30+1.095\ e-01*y^29+1.320e+00*y^28-2.170e-05*y^27-6.267e-04*y^26-7.170e-03*y^25-4.5\ 82e-01*y^24+1.576e-06*y^23+4.532e-05*y^22+1.301e-03*y^21-1.168e-01*y^20-1\ .711e+00*y^19+2.255e-05*y^18+6.519e-04*y^17+5.251e-03*y^16-1.826e+00*y^14\ +1.222e+00*y^10 // Compute a standard basis for the deformed ideal: setring R0; j = std(i2); @expansion{} [65535:1]11(2)ss19s20s21s22(3)-s23(2)s27.28.s29(3)s30.s31ss32sss33sss34ss\ 35--38- @expansion{} product criterion:11 chain criterion:21 j; @expansion{} j[1]=y16 @expansion{} j[2]=65610xy8+17393508y27+7223337y23+545292y19+6442040y18-119790y14+80190\ y10 @expansion{} j[3]=5x4+3x2y9+y9 vdim(j); @expansion{} 40 @c end example Long_coefficients examples.doc:491 @end smallexample @end ifset @c ---------------------------------------------------------------------------- @ifset singularmanual @node Parameters, T1 and T2, Long coefficients, Examples @end ifset @ifclear singularmanual @node Parameters, Deformations, Saturation, Examples @end ifclear @section Parameters @cindex Parameters @ifset singularmanual Let us deform the above ideal now by introducing a parameter t and compute over the ground field Q(t). We compute the dimension at the generic point, @end ifset @ifclear singularmanual Let us now deform a given 0-dimensional ideal j by introducing a parameter t and compute over the ground field Q(t). We compute the dimension at the generic point, @end ifclear i.e., @tex $dim_{Q(t)}Q(t)[x,y]/j$. @end tex @ifinfo dim_Q(t) Q(t)[x,y]/j. @end ifinfo @ifset singularmanual (This gives the same result as for the deformed ideal above. Hence, the above small deformation was "generic".) @end ifset For almost all @tex $a \in Q$ @end tex @ifinfo a in Q @end ifinfo this is the same as @tex $dim_Q Q[x,y]/j_0$, @end tex @ifinfo dim_Q Q[x,y]/j0, @end ifinfo where @tex $j_0=j|_{t=a}$. @end tex @ifinfo j_0=j_t=a @end ifinfo @smallexample @c computed example Parameters examples.doc:579 ring Rt = (0,t),(x,y),lp; Rt; @expansion{} // characteristic : 0 @expansion{} // 1 parameter : t @expansion{} // minpoly : 0 @expansion{} // number of vars : 2 @expansion{} // block 1 : ordering lp @expansion{} // : names x y @expansion{} // block 2 : ordering C poly f = x5+y11+xy9+x3y9; ideal i = jacob(f); ideal j = i,i[1]*i[2]+t*x5y8; // deformed ideal, parameter t vdim(std(j)); @expansion{} 40 ring R=0,(x,y),lp; ideal i=imap(Rt,i); int a=random(1,30000); ideal j=i,i[1]*i[2]+a*x5y8; // deformed ideal, fixed integer a vdim(std(j)); @expansion{} 40 @c end example Parameters examples.doc:579 @end smallexample @c ---------------------------------------------------------------------------- @ifset singularmanual @node T1 and T2, Deformations, Parameters, Examples @section T1 and T2 @cindex T1 @cindex T2 @ifinfo @math{T^1} @end ifinfo @tex $T^1$ @end tex , resp.@: @ifinfo @math{T^2} @end ifinfo @tex $T^2$ @end tex , of an ideal @ifinfo @math{j} @end ifinfo @tex $j$ @end tex usually denote the modules of infinitesimal deformations, resp.@: of obstructions. In @sc{Singular} there are procedures @code{T_1} and @code{T_2} in @code{sing.lib} such that @code{T_1(j)} and @code{T_2(j)} compute a standard basis of a presentation of these modules. If T_1 and T_2 are finite dimensional K-vector spaces (e.g., for isolated singularities), a basis can be computed by applying @code{kbase(T_1(j));}, resp.@: @code{kbase(T_2(j));}, the dimensions by applying @code{vdim}. For a complete intersection j the procedure @code{Tjurina} also computes T_1, but faster (T_2=0 in this case). For a non complete intersection, it is faster to use the procedure @code{T_12} instead of @code{T_1} and @code{T_2}. Type @code{help T_1;} (or @code{help T_2;} or @code{help T_12;}) to obtain more detailed information about these procedures. We give three examples, the first being a hypersurface, the second a complete intersection, the third no complete intersection: @itemize @bullet @item load @code{sing.lib} @item check whether the ideal j is a complete intersection. It is, if number of variables = dimension + minimal number of generators @item compute the Tjurina number @item compute a vector space basis (kbase) of T_1 @item compute the Hilbert function of T_1 @item create a polynomial encoding the Hilbert series @item compute the dimension of T_2 @end itemize @smallexample @c computed example T1_and_T2 examples.doc:639 LIB "sing.lib"; ring R=32003,(x,y,z),ds; // --------------------------------------- // hypersurface case (from series T[p,q,r]): int p,q,r = 3,3,4; poly f = x^p+y^q+z^r+xyz; tjurina(f); @expansion{} 8 // Tjurina number = 8 kbase(Tjurina(f)); @expansion{} // Tjurina number = 8 @expansion{} _[1]=z3 @expansion{} _[2]=z2 @expansion{} _[3]=yz @expansion{} _[4]=xz @expansion{} _[5]=z @expansion{} _[6]=y @expansion{} _[7]=x @expansion{} _[8]=1 // --------------------------------------- // complete intersection case (from series P[k,l]): int k,l =3,2; ideal j=xy,x^k+y^l+z2; dim(std(j)); // Krull dimension @expansion{} 1 size(minbase(j)); // minimal number of generators @expansion{} 2 tjurina(j); // Tjurina number @expansion{} 6 module T=Tjurina(j); @expansion{} // Tjurina number = 6 kbase(T); // a sparse output of the k-basis of T_1 @expansion{} _[1]=z*gen(1) @expansion{} _[2]=gen(1) @expansion{} _[3]=y*gen(2) @expansion{} _[4]=x2*gen(2) @expansion{} _[5]=x*gen(2) @expansion{} _[6]=gen(2) print(kbase(T)); // columns of matrix are a k-basis of T_1 @expansion{} z,1,0,0, 0,0, @expansion{} 0,0,y,x2,x,1 // --------------------------------------- // general case (cone over rational normal curve of degree 4): ring r1=0,(x,y,z,u,v),ds; matrix m[2][4]=x,y,z,u,y,z,u,v; ideal i=minor(m,2); // 2x2 minors of matrix m module M=T_1(i); // a presentation matrix of T_1 @expansion{} // dim T_1 = 4 vdim(M); // Tjurina number @expansion{} 4 hilb(M); // display of both Hilbert series @expansion{} // 4 t^0 @expansion{} // -20 t^1 @expansion{} // 40 t^2 @expansion{} // -40 t^3 @expansion{} // 20 t^4 @expansion{} // -4 t^5 @expansion{} @expansion{} // 4 t^0 @expansion{} // dimension (local) = 0 @expansion{} // multiplicity = 4 intvec v1=hilb(M,1); // first Hilbert series as intvec intvec v2=hilb(M,2); // second Hilbert series as intvec v1; @expansion{} 4,-20,40,-40,20,-4,0 v2; @expansion{} 4,0 v1[3]; // 3rd coefficient of the 1st Hilbert series @expansion{} 40 module N=T_2(i); @expansion{} // dim T_2 = 3 @c end example T1_and_T2 examples.doc:639 @end smallexample @smallexample // In some cases it might be useful to have a polynomial in some ring // encoding the Hilbert series. This polynomial can then be // differentiated, evaluated etc. It can be done as follows: ring H = 0,t,ls; poly h1; int ii; for (ii=1; ii<=size(v1); ii=ii+1) @{ h1=h1+v1[ii]*t^(ii-1); @} h1; // 1st Hilbert series @expansion{} 4-20t+40t2-40t3+20t4-4t5 diff(h1,t); // differentiate h1 @expansion{} -20+80t-120t2+80t3-20t4 subst(h1,t,1); // substitute t by 1 @expansion{} 0 // The procedures T_1, T_2, T_12 may be called with two arguments and then // they return a list with more information (type help T_1; etc.) // e.g., T_12(i,); returns a list with 9 nonempty objects where // _[1] = std basis of T_1-module, _[2] = std basis of T_2-module, // _[3]= vdim of T_1, _[4]= vdim of T_2 setring r1; // make r1 again the basering list L = T_12(i,1); @expansion{} // dim T_1 = 4 @expansion{} // dim T_2 = 3 kbase(L[1]); // kbase of T_1 @expansion{} _[1]=1*gen(2) @expansion{} _[2]=1*gen(3) @expansion{} _[3]=1*gen(6) @expansion{} _[4]=1*gen(7) kbase(L[2]); // kbase of T_2 @expansion{} _[1]=1*gen(6) @expansion{} _[2]=1*gen(8) @expansion{} _[3]=1*gen(9) L[3]; // vdim of T_1 @expansion{} 4 L[4]; // vdim of T_2 @expansion{} 3 @end smallexample @c killall(); // a procedure from general.lib @c @expansion{} // ** killing the basering for level 0 @end ifset @c ---------------------------------------------------------------------------- @ifset singularmanual @node Deformations, Finite fields, T1 and T2, Examples @end ifset @ifclear singularmanual @node Deformations, Elimination, Parameters, Examples @end ifclear @section Deformations @cindex Deformations @itemize @bullet @item The libraries @code{sing.lib}, resp.@: @code{deform.lib}, contain procedures to compute total and base space of the miniversal (= semiuniversal) deformation of an isolated complete intersection singularity, resp.@: arbitrary isolated singularity. @item The procedure @code{deform} in @code{sing.lib} returns a matrix whose columns @ifinfo @code{h_1,..., h_r} @end ifinfo @tex $h_1,\ldots,h_r$ @end tex represent all 1st order deformations. More precisely, if @ifinfo I in R is the ideal generated by @code{f_1,...,f_s}, then any infinitesimal deformation of R/I over K[e]/(e^2) is given by @code{f+eg}, where f=(f_1,...,f_s), g a K-linear combination of the h_i. @end ifinfo @tex $I \subset R$ is the ideal generated by $f_1,...,f_s$, then any infinitesimal deformation of $R/I$ over $K[\varepsilon]/(\varepsilon^2)$ is given by $f+\varepsilon g$, where $f=(f_1,...,f_s)$, $g$ a $K$-linear combination of the $h_i$. @end tex @item The procedure @code{versal} in @code{deform.lib} computes a formal miniversal deformation up to a certain order which can be prescribed by the user. For a complete intersection the 1st order part is already miniversal. @item The procedure @code{versal} extends the basering to a new ring with additional deformation parameters which contains the equations for the miniversal base space and the miniversal total space. @item There are default names for the objects created, but the user may also choose his own names. @item If the user sets @code{printlevel=2;} before running @code{versal}, some intermediate results are shown. This is useful since @code{versal} is already complicated and might run for some time on more complicated examples. (type @code{help versal;}) @end itemize @ifset singularmanual We compute for the same examples as in the preceding section the miniversal deformations: @end ifset @ifclear singularmanual We give three examples, the first being a hypersurface, the second a complete intersection, the third no complete intersection and compute in each of the cases the miniversal deformation: @end ifclear @smallexample @c computed example Deformations examples.doc:787 LIB "deform.lib"; ring R=32003,(x,y,z),ds; //---------------------------------------------------- // hypersurface case (from series T[p,q,r]): int p,q,r = 3,3,4; poly f = x^p+y^q+z^r+xyz; print(deform(f)); @expansion{} z3,z2,yz,xz,z,y,x,1 // the miniversal deformation of f=0 is the projection from the // miniversal total space to the miniversal base space: // @{ (A,B,C,D,E,F,G,H,x,y,z) | x3+y3+xyz+z4+A+Bx+Cxz+Dy+Eyz+Fz+Gz2+Hz3 =0 @} // --> @{ (A,B,C,D,E,F,G,H) @} //---------------------------------------------------- // complete intersection case (from series P[k,l]): int k,l =3,2; ideal j=xy,x^k+y^l+z2; print(deform(j)); @expansion{} 0,0, 0,0,z,1, @expansion{} y,x2,x,1,0,0 versal(j); // using default names @expansion{} // smooth base space @expansion{} // ready: T_1 and T_2 @expansion{} @expansion{} // Result belongs to ring Px. @expansion{} // Equations of total space of miniversal deformation are @expansion{} // given by Fs, equations of miniversal base space by Js. @expansion{} // Make Px the basering and list objects defined in Px by typing: @expansion{} setring Px; show(Px); @expansion{} listvar(matrix); @expansion{} // NOTE: rings Qx, Px, So are alive! @expansion{} // (use 'kill_rings("");' to remove) setring Px; show(Px); // show is a procedure from inout.lib @expansion{} // ring: (32003),(A,B,C,D,E,F,x,y,z),(ds(6),ds(3),C); @expansion{} // minpoly = 0 @expansion{} // objects belonging to this ring: @expansion{} // Rs [0] matrix 2 x 1 @expansion{} // Fs [0] matrix 1 x 2 @expansion{} // Js [0] matrix 1 x 0 listvar(matrix); @expansion{} // Rs [0] matrix 2 x 1 @expansion{} // Fs [0] matrix 1 x 2 @expansion{} // Js [0] matrix 1 x 0 // ___ Equations of miniversal base space ___: Js; @expansion{} // ___ Equations of miniversal total space ___: Fs; @expansion{} Fs[1,1]=xy+Ez+F @expansion{} Fs[1,2]=y2+z2+x3+Ay+Bx2+Cx+D // the miniversal deformation of V(j) is the projection from the // miniversal total space to the miniversal base space: // @{ (A,B,C,D,E,F,x,y,z) | xy+F+Ez=0, y2+z2+x3+D+Cx+Bx2+Ay=0 @} // --> @{ (A,B,C,D,E,F) @} //---------------------------------------------------- // general case (cone over rational normal curve of degree 4): ring r1=0,(x,y,z,u,v),ds; matrix m[2][4]=x,y,z,u,y,z,u,v; ideal i=minor(m,2); // 2x2 minors of matrix m int time=timer; // Def_r is the name of the miniversal base space with // parameters A(1),...,A(4) versal(i,0,"Def_r","A("); @expansion{} // ready: T_1 and T_2 @expansion{} @expansion{} // Result belongs to ring Def_rPx. @expansion{} // Equations of total space of miniversal deformation are @expansion{} // given by Fs, equations of miniversal base space by Js. @expansion{} // Make Def_rPx the basering and list objects defined in Def_rPx by typin\ g: @expansion{} setring Def_rPx; show(Def_rPx); @expansion{} listvar(matrix); @expansion{} // NOTE: rings Def_rQx, Def_rPx, Def_rSo are alive! @expansion{} // (use 'kill_rings("Def_r");' to remove) "// used time:",timer-time,"sec"; // time of last command @expansion{} // used time: 1 sec // the miniversal deformation of V(i) is the projection from the // miniversal total space to the miniversal base space: // @{ (A(1..4),x,y,z,u,v) | // -y^2+x*z+A(2)*x-A(3)*y=0, -y*z+x*u-A(1)*x-A(3)*z=0, // -y*u+x*v-A(3)*u-A(4)*z=0, -z^2+y*u-A(1)*y-A(2)*z=0, // -z*u+y*v-A(2)*u-A(4)*u=0, -u^2+z*v+A(1)*u-A(4)*v=0 @} // --> @{ A(1..4) | // -A(1)*A(4) = A(3)*A(4) = -A(2)*A(4)-A(4)^2 = 0 @} //---------------------------------------------------- @c end example Deformations examples.doc:787 @end smallexample @c ---------------------------------------------------------------------------- @ifset singularmanual @node Finite fields, Elimination, Deformations, Examples @section Finite fields @cindex Finite fields We define a variety in @ifinfo @math{n} @end ifinfo @tex $n$ @end tex -space of codimension 2 defined by polynomials of degree @ifinfo @math{d} @end ifinfo @tex $d$ @end tex with generic coefficients over the prime field @ifinfo @math{Z/p} @end ifinfo @tex $Z/p$ @end tex and look for zeros on the torus. First over the prime field and then in the finite extension field with @tex $p^k$ @end tex @ifinfo p^k @end ifinfo elements. In general there will be many more solutions in the second case. (Since the @sc{Singular} language is interpreted, the evaluation of many @code{for}-loops is not very fast): @smallexample @c computed example Finite_fields examples.doc:860 int p=3; int n=3; int d=5; int k=2; ring rp = p,(x(1..n)),dp; int s = size(maxideal(d)); s; @expansion{} 21 // create a dense homogeneous ideal m, all generators of degree d, with // generic (random) coefficients: ideal m = maxideal(d)*random(p,s,n-2); m; @expansion{} m[1]=x(1)^3*x(2)^2-x(1)*x(2)^4+x(1)^4*x(3)-x(1)^3*x(2)*x(3)+x(1)*x(2)^3*x\ (3)+x(2)^4*x(3)+x(2)^3*x(3)^2+x(1)*x(2)*x(3)^3+x(1)*x(3)^4-x(3)^5 // look for zeros on the torus by checking all points (with no component 0) // of the affine n-space over the field with p elements : ideal mt; int i(1..n); // initialize integers i(1),...,i(n) int l; s=0; for (i(1)=1;i(1) k^n @end ifinfo is a polynomial map, the Zariski-closure of the image is the zero-set of the ideal @tex $$ \displaylines{ j=J \cap k[x_1,\ldots,x_n], \;\quad\hbox{\rm where}\cr J=(x_1-f_1(t_1,\ldots,t_r),\ldots,x_n-f_n(t_1,\ldots,t_r))\subseteq k[t_1,\ldots,t_r,x_1,\ldots,x_n] } $$ @end tex @ifinfo @smallexample j = J intersected with K[x1,...,xn] J=(x1-f1(t1,...,tr),...,xn-fn(t1,...,tr)) in k[t1,...tr,x1,...,xn] @end smallexample @end ifinfo i.e, of the ideal j obtained from J by eliminating the variables @tex $t_1,\ldots,t_r$. @end tex @ifinfo t1,...,tr. @end ifinfo This can be done by computing a standard basis of J with respect to a product ordering where the block of t-variables precedes the block of x-variables and then selecting those polynomials which do not contain any t. In @sc{Singular} the most convenient way is to use the @code{eliminate} command. In contrast to the first method, with @code{eliminate} the result needs not be a standard basis in the given ordering. Hence, there may be cases where the first method is the preferred one. @strong{WARNING:} In the case of a local or a mixed ordering, elimination needs special care. f may be considered as a map of germs @tex $f:(k^r,0)\rightarrow(k^n,0)$, @end tex @ifinfo f : (k^r,0) --> (k^n,0), @end ifinfo but even if this map germ is finite, we are in general not able to compute the image germ because for this we would need an implementation of the Weierstrass preparation theorem. What we can compute, and what @code{eliminate} actually does, is the following: let V(J) be the zero-set of J in @tex $k^r\times(k^n,0)$, @end tex @ifinfo k^r x (k^n,0), @end ifinfo then the closure of the image of V(J) under the projection @tex $$\hbox{pr}:k^r\times(k^n,0)\rightarrow(k^n,0)$$ can be computed. @end tex @ifinfo @* pr: k^r x (k^n,0) --> (k^n,0) @*can be computed. @end ifinfo Note that this germ contains also those components of V(J) which meet the fiber of pr outside the origin. This is achieved by an ordering with the block of t-variables having a global ordering (and preceding the x-variables) and the x-variables having a local ordering. In a local situation we propose @code{eliminate} with ordering ls. In any case, if the input is weighted homogeneous (=quasihomogeneous), the weights given to the variables should be chosen accordingly. @sc{Singular} offers a function @code{weight} which proposes, given an ideal or module, integer weights for the variables, such that the ideal, resp.@: module, is as homogeneous as possible with respect to these weights. The function finds correct weights, if the input is weighted homogeneous (but is rather slow for many variables). In order to check, whether the input is quasihomogeneous, use the function @code{qhweight}, which returns an intvec of correct weights if the input is quasihomogeneous and an intvec of zeros otherwise. Let us give two examples: @enumerate @item First we compute the equations of the simple space curve @tex $\hbox{T}[7]^\prime$ @end tex @ifinfo T[7]' @end ifinfo consisting of two tangential cusps given in parametric form. @item We compute weights for the equations such that the equations are quasihomogeneous w.r.t. these weights. @item Then we compute the tangent developable of the rational normal curve in @tex $P^4$. @end tex @ifinfo P^4. @end ifinfo @end enumerate @smallexample @c computed example Elimination examples.doc:1058 // 1. Compute equations of curve given in parametric form: // Two transversal cusps in (k^3,0): ring r1 = 0,(t,x,y,z),ls; ideal i1 = x-t2,y-t3,z; // parametrization of the first branch ideal i2 = y-t2,z-t3,x; // parametrization of the second branch ideal j1 = eliminate(i1,t); j1; // equations of the first branch @expansion{} j1[1]=z @expansion{} j1[2]=y2-x3 ideal j2 = eliminate(i2,t); j2; // equations of the second branch @expansion{} j2[1]=x @expansion{} j2[2]=z2-y3 // Now map to a ring with only x,y,z as variables and compute the // intersection of j1 and j2 there: ring r2 = 0,(x,y,z),ds; ideal j1= imap(r1,j1); // imap is a convenient ringmap for ideal j2= imap(r1,j2); // inclusions and projections of rings ideal i = intersect(j1,j2); i; // equations of both branches @expansion{} i[1]=z2-y3+x3y @expansion{} i[2]=xz @expansion{} i[3]=xy2-x4 @expansion{} i[4]=x3z // // 2. Compute the weights: intvec v= qhweight(i); // compute weights v; @expansion{} 4,6,9 // // 3. Compute the tangent developable // The tangent developable of a projective variety given parametrically // by F=(f1,...,fn) : P^r --> P^n is the union of all tangent spaces // of the image. The tangent space at a smooth point F(t1,...,tr) // is given as the image of the tangent space at (t1,...,tr) under // the tangent map (affine coordinates) // T(t1,...,tr): (y1,...,yr) --> jacob(f)*transpose((y1,...,yr)) // where jacob(f) denotes the jacobian matrix of f with respect to the // t's evaluated at the point (t1,...,tr). // Hence we have to create the graph of this map and then to eliminate // the t's and y's. // The rational normal curve in P^4 is given as the image of // F(s,t) = (s4,s3t,s2t2,st3,t4) // each component being homogeneous of degree 4. ring P = 0,(s,t,x,y,a,b,c,d,e),dp; ideal M = maxideal(1); ideal F = M[1..2]; // take the 1st two generators of M F=F^4; // simplify(...,2); deletes 0-columns matrix jac = simplify(jacob(F),2); ideal T = x,y; ideal J = jac*transpose(T); ideal H = M[5..9]; ideal i = H-J; // this is tricky: difference between two // ideals is not defined, but between two // matrices. By automatic type conversion // the ideals are converted to matrices, // subtracted and afterwards converted // to an ideal. Note that '+' is defined // and adds (concatenates) two ideals i; @expansion{} i[1]=-4s3x+a @expansion{} i[2]=-3s2tx-s3y+b @expansion{} i[3]=-2st2x-2s2ty+c @expansion{} i[4]=-t3x-3st2y+d @expansion{} i[5]=-4t3y+e // Now we define a ring with product ordering and weights 4 // for the variables a,...,e. // Then we map i from P to P1 and eliminate s,t,x,y from i. ring P1 = 0,(s,t,x,y,a,b,c,d,e),(dp(4),wp(4,4,4,4,4)); ideal i = fetch(P,i); ideal j= eliminate(i,stxy); // equations of tangent developable j; @expansion{} j[1]=3c2-4bd+ae @expansion{} j[2]=2bcd-3ad2-3b2e+4ace @expansion{} j[3]=8b2d2-9acd2-9b2ce+12ac2e-2abde // We can use the product ordering to eliminate s,t,x,y from i // by a std-basis computation. // We need proc 'nselect' from elim.lib. LIB "elim.lib"; j = std(i); // compute a std basis j j = nselect(j,1,4); // select generators from j not j; // containing variable 1,...,4 @expansion{} j[1]=3c2-4bd+ae @expansion{} j[2]=2bcd-3ad2-3b2e+4ace @expansion{} j[3]=8b2d2-9acd2-9b2ce+12ac2e-2abde @c end example Elimination examples.doc:1058 @end smallexample @c killall(); @c ---------------------------------------------------------------------------- @ifset singularmanual @node Free resolution, Computation of Ext, Elimination, Examples @end ifset @ifclear singularmanual @node Free resolution, Formatting output, Elimination, Examples @end ifclear @section Free resolution @cindex Free resolution In @sc{Singular} a free resolution of a module or ideal has its own type: @code{resolution}. It is a structure that stores all information related to free resolutions. This allows partial computations of resolutions via the command @code{res}. After applying @code{res}, only a pre-format of the resolution is computed which allows to determine invariants like Betti-numbers or homological dimension. To see the differentials of the complex, a resolution must be converted into the type list which yields a list of modules: the k-th module in this list is the first syzygy-module (module of relations) of the (k-1)st module. There are the following commands to compute a resolution: @table @code @item res @ifset singularmanual @ref{res}@* @end ifset computes a free resolution of an ideal or module using a heuristically chosen method. This is the preferred method to compute free resolutions of ideals or modules. @item lres @ifset singularmanual @ref{lres}@* @end ifset computes a free resolution of an ideal or module with La Scala's method. The input needs to be homogeneous. @item mres @ifset singularmanual @ref{mres}@* @end ifset computes a minimal free resolution of an ideal or module with the syzygy method. @item sres @ifset singularmanual @ref{sres}@* @end ifset computes a free resolution of an ideal or module with Schreyer's method. The input has to be a standard basis. @item nres @ifset singularmanual @ref{nres}@* @end ifset computes a free resolution of an ideal or module with the standard basis method. @item minres @ifset singularmanual @ref{minres}@* @end ifset minimizes a free resolution of an ideal or module. @item syz @ifset singularmanual @ref{syz}@* @end ifset computes the first syzygy module. @end table @code{res(i,r)}, @code{lres(i,r)}, @code{sres(i,r)}, @code{mres(i,r)}, @code{nres(i,r)} compute the first r modules of the resolution of i, resp.@: the full resolution if r=0 and the basering is not a qring. See the manual for a precise description of these commands. @*Note: The command @code{betti} does not require a minimal resolution for the minimal betti numbers. Now let's look at an example which uses resolutions: The Hilbert-Burch theorem says that the ideal i of a reduced curve in @tex $K^3$ @end tex @ifinfo K^3 @end ifinfo has a free resolution of length 2 and that i is given by the 2x2 minors of the 2nd matrix in the resolution. We test this for two transversal cusps in @tex $K^3$. @end tex @ifinfo K^3. @end ifinfo Afterwards we compute the resolution of the ideal j of the tangent developable of the rational normal curve in @tex $P^4$ @end tex @ifinfo P^4 @end ifinfo from above. Finally we demonstrate the use of the type @code{resolution} in connection with the @code{lres} command. @smallexample @c computed example Free_resolution examples.doc:1231 // Two transversal cusps in (k^3,0): ring r2 =0,(x,y,z),ds; ideal i =z2-1y3+x3y,xz,-1xy2+x4,x3z; resolution rs=mres(i,0); // computes a minimal resolution rs; // the standard representation of complexes @expansion{} 1 3 2 @expansion{} r2 <-- r2 <-- r2 @expansion{} @expansion{} 0 1 2 @expansion{} list resi=rs; // convertion to a list print(resi[1]); // the 1st module is i minimized @expansion{} xz, @expansion{} z2-y3+x3y, @expansion{} xy2-x4 print(resi[2]); // the 1st syzygy module of i @expansion{} -z,-y2+x3, @expansion{} x, 0, @expansion{} y, z resi[3]; // the 2nd syzygy module of i @expansion{} _[1]=0 ideal j=minor(resi[2],2); reduce(j,std(i)); // check whether j is contained in i @expansion{} _[1]=0 @expansion{} _[2]=0 @expansion{} _[3]=0 size(reduce(i,std(j))); // check whether i is contained in j @expansion{} 0 // size() counts the non-zero generators // --------------------------------------------- // The tangent developable of the rational normal curve in P^4: ring P = 0,(a,b,c,d,e),dp; ideal j= 3c2-4bd+ae, -2bcd+3ad2+3b2e-4ace, 8b2d2-9acd2-9b2ce+9ac2e+2abde-1a2e2; resolution rs=mres(j,0); rs; @expansion{} 1 2 1 @expansion{} P <-- P <-- P @expansion{} @expansion{} 0 1 2 @expansion{} list L=rs; print(L[2]); @expansion{} 2bcd-3ad2-3b2e+4ace, @expansion{} -3c2+4bd-ae // create an intmat with graded betti numbers intmat B=betti(rs); // this gives a nice output of betti numbers print(B,"betti"); @expansion{} 0 1 2 @expansion{} ------------------------ @expansion{} 0: 1 - - @expansion{} 1: - 1 - @expansion{} 2: - 1 - @expansion{} 3: - - 1 @expansion{} ------------------------ @expansion{} total: 1 2 1 // the user has access to all betti numbers // the 2-nd column of B: B[1..4,2]; @expansion{} 0 1 1 0 ring cyc5=32003,(a,b,c,d,e,h),dp; ideal i= a+b+c+d+e, ab+bc+cd+de+ea, abc+bcd+cde+dea+eab, abcd+bcde+cdea+deab+eabc, h5-abcde; resolution rs=lres(i,0); //computes the resolution according La Scala rs; //the shape of the minimal resolution @expansion{} 1 5 10 10 5 1 @expansion{} cyc5 <-- cyc5 <-- cyc5 <-- cyc5 <-- cyc5 <-- cyc5 @expansion{} @expansion{} 0 1 2 3 4 5 @expansion{} resolution not minimized yet @expansion{} print(betti(rs),"betti"); //shows the Betti-numbers of cyclic 5 @expansion{} 0 1 2 3 4 5 @expansion{} ------------------------------------------ @expansion{} 0: 1 1 - - - - @expansion{} 1: - 1 1 - - - @expansion{} 2: - 1 1 - - - @expansion{} 3: - 1 2 1 - - @expansion{} 4: - 1 2 1 - - @expansion{} 5: - - 2 2 - - @expansion{} 6: - - 1 2 1 - @expansion{} 7: - - 1 2 1 - @expansion{} 8: - - - 1 1 - @expansion{} 9: - - - 1 1 - @expansion{} 10: - - - - 1 1 @expansion{} ------------------------------------------ @expansion{} total: 1 5 10 10 5 1 dim(rs); //the homological dimension @expansion{} 4 size(list(rs)); //gets the full (non-reduced) resolution @expansion{} 6 minres(rs); //minimizes the resolution @expansion{} 1 5 10 10 5 1 @expansion{} cyc5 <-- cyc5 <-- cyc5 <-- cyc5 <-- cyc5 <-- cyc5 @expansion{} @expansion{} 0 1 2 3 4 5 @expansion{} size(list(rs)); //gets the minimized resolution @expansion{} 6 @c end example Free_resolution examples.doc:1231 @end smallexample @c ---------------------------------------------------------------------------- @ifset singularmanual @node Computation of Ext, Polar curves, Free resolution, Examples @section Computation of Ext @cindex Ext We start by showing how to calculate the @ifinfo @math{n} @end ifinfo @tex $n$ @end tex -th Ext group of an ideal. The ingredients to do this are by the definition of Ext the following: calculate a (minimal) resolution at least up to length @ifinfo @math{n} @end ifinfo @tex $n$ @end tex , apply the Hom-functor, and calculate the @ifinfo @math{n} @end ifinfo @tex $n$ @end tex -th homology group, that is form the quotient @tex $\hbox{\rm ker} / \hbox{\rm Im}$ @end tex @ifinfo ker/Im @end ifinfo in the resolution sequence. The Hom functor is given simply by transposing (hence dualizing) the module or the corresponding matrix with the command @code{transpose}. The image of the @ifinfo @math{(n-1)} @end ifinfo @tex $(n-1)$ @end tex -st map is generated by the columns of the corresponding matrix. To calculate the kernel apply the command @code{syz} at the @ifinfo @math{(n-1)} @end ifinfo @tex $(n-1)$ @end tex -st transposed entry of the resolution. Finally, the quotient is obtained by the command @code{modulo}, which gives for two modules A = ker, B = Im the module of relations of @tex $A/(A \cap B)$ @end tex @ifinfo A/(A intersect B) @end ifinfo in the usual way. As we have a chain complex this is obviously the same as ker/Im. We collect these statements in the following short procedure: @smallexample proc ext(int n, ideal I) @{ resolution rs = mres(I,n+1); module tAn = transpose(rs[n+1]); module tAn_1 = transpose(rs[n]); module ext_n = modulo(syz(tAn),tAn_1); return(ext_n); @} @end smallexample Now consider the following example: @smallexample ring r5 = 32003,(a,b,c,d,e),dp; ideal I = a2b2+ab2c+b2cd, a2c2+ac2d+c2de,a2d2+ad2e+bd2e,a2e2+abe2+bce2; print(ext(2,I)); @expansion{} 1,0,0,0,0,0,0, @expansion{} 0,1,0,0,0,0,0, @expansion{} 0,0,1,0,0,0,0, @expansion{} 0,0,0,1,0,0,0, @expansion{} 0,0,0,0,1,0,0, @expansion{} 0,0,0,0,0,1,0, @expansion{} 0,0,0,0,0,0,1 ext(3,I); // too big to be displayed here @end smallexample The library @code{homolog.lib} contains several procedures for computing Ext-modules and related modules, which are much more general and sophisticated then the above one. They are used in the following example. If @ifinfo @math{M} @end ifinfo @tex $M$ @end tex is a module, then @tex $\hbox{Ext}^1(M,M)$, resp.\ $\hbox{Ext}^2(M,M)$, @end tex @ifinfo Ext^1(M,M), resp.@: Ext^2(M,M), @end ifinfo are the modules of infinitesimal deformations, resp.@: of obstructions, of @ifinfo @math{M} @end ifinfo @tex $M$ @end tex (like T1 and T2 for a singularity). Similar to the treatment for singularities, the semiuniversal deformation of @ifinfo @math{M} @end ifinfo @tex $M$ @end tex can be computed (if @tex $\hbox{Ext}^1$ @end tex @ifinfo Ext^1 @end ifinfo is finite dimensional) with the help of @tex $\hbox{Ext}^1$, $\hbox{Ext}^2$ @end tex @ifinfo Ext^1, Ext^2 @end ifinfo and the cup product. There is an extra procedure for @tex $\hbox{Ext}^k(R/J,R)$ @end tex @ifinfo Ext^k(R/J,R) @end ifinfo if @ifinfo @math{J} @end ifinfo @tex $J$ @end tex is an ideal in @ifinfo @math{R} @end ifinfo @tex $R$ @end tex since this is faster than the general Ext. We compute @itemize @bullet @item the infinitesimal deformations @tex ($=\hbox{Ext}^1(K,K)$) @end tex @ifinfo (=Ext^1(K,K)) @end ifinfo and obstructions @tex ($=\hbox{Ext}^2(K,K)$) @end tex @ifinfo (=Ext^2(K,K)) @end ifinfo of the residue field @ifinfo @math{K=R/m} @end ifinfo @tex $K=R/m$ @end tex of an ordinary cusp, @tex $R=Loc_m K[x,y]/(x^2-y^3)$, $m=(x,y)$. @end tex @ifinfo R=Loc_m K[x,y]/(x^2-y^3), m=(x,y). @end ifinfo To compute @tex $\hbox{Ext}^1(m,m)$ @end tex @ifinfo Ext^1(m,m), @end ifinfo we have to apply @code{Ext(1,syz(m),syz(m))} with @code{syz(m)} the first syzygy module of @ifinfo @math{m} @end ifinfo @tex $m$ @end tex , which is isomorphic to @tex $\hbox{Ext}^2(K,K)$. @end tex @ifinfo Ext^2(K,K). @end ifinfo @item @tex $\hbox{Ext}^k(R/i,R)$ @end tex @ifinfo Ext^k(R/i,R) @end ifinfo for some ideal @ifinfo @math{i} @end ifinfo @tex $i$ @end tex and with an extra option. @end itemize @smallexample @c computed example Computation_of_Ext examples.doc:1432 LIB "homolog.lib"; ring R=0,(x,y),ds; ideal i=x2-y3; qring q = std(i); // defines the quotient ring Loc_m k[x,y]/(x2-y3) ideal m = maxideal(1); module T1K = Ext(1,m,m); // computes Ext^1(R/m,R/m) @expansion{} // dimension of Ext^1: 0 @expansion{} // vdim of Ext^1: 2 @expansion{} print(T1K); @expansion{} 0, 0,y,x,0,y,0, x2-y3, @expansion{} -y2,x,x,0,y,0,x2-y3,0, @expansion{} 1, 0,0,0,0,0,0, 0 printlevel=2; // gives more explanation module T2K=Ext(2,m,m); // computes Ext^2(R/m,R/m) @expansion{} // Computing Ext^2 (help Ext; gives an explanation): @expansion{} // Let 0<--coker(M)<--F0<--F1<--F2<--... be a resolution of coker(M), @expansion{} // and 0<--coker(N)<--G0<--G1 a presentation of coker(N), @expansion{} // then Hom(F2,G0)-->Hom(F3,G0) is given by: @expansion{} y2,x, @expansion{} x, y @expansion{} // and Hom(F1,G0) + Hom(F2,G1)-->Hom(F2,G0) is given by: @expansion{} -y,x, x,0,y,0, @expansion{} x, -y2,0,x,0,y @expansion{} @expansion{} // dimension of Ext^2: 0 @expansion{} // vdim of Ext^2: 2 @expansion{} print(std(T2K)); @expansion{} -y2,0,x,0,y, @expansion{} 0, x,0,y,0, @expansion{} 1, 0,0,0,0 printlevel=0; module E = Ext(1,syz(m),syz(m)); @expansion{} // dimension of Ext^1: 0 @expansion{} // vdim of Ext^1: 2 @expansion{} print(std(E)); @expansion{} -y,x, 0, 0,0,x,0,y, @expansion{} 0, -y,-y,0,x,0,y,0, @expansion{} 0, 0, 0, 1,0,0,0,0, @expansion{} 0, 0, 1, 0,0,0,0,0, @expansion{} 0, 1, 0, 0,0,0,0,0, @expansion{} 1, 0, 0, 0,0,0,0,0 //The matrices which we have just computed are presentation matrices //of the modules T2K and E. Hence we may ignore those columns //containing 1 as an entry and see that T2K and E are isomorphic //as expected, but differently presented. //------------------------------------------- ring S=0,(x,y,z),dp; ideal i = x2y,y2z,z3x; module E = Ext_R(2,i); @expansion{} // dimension of Ext^2: 1 @expansion{} print(E); @expansion{} 0,y,0,z2, @expansion{} z,0,0,-x, @expansion{} 0,0,x,-y // if a 3-rd argument is given (of any type) // a list of Ext^k(R/i,R), a SB of Ext^k(R/i,R) and a vector space basis // is returned: list LE = Ext_R(3,i,""); @expansion{} // dimension of Ext^3: 0 @expansion{} // vdim of Ext^3: 2 @expansion{} LE; @expansion{} [1]: @expansion{} _[1]=y*gen(1) @expansion{} _[2]=x*gen(1) @expansion{} _[3]=z2*gen(1) @expansion{} [2]: @expansion{} _[1]=y*gen(1) @expansion{} _[2]=x*gen(1) @expansion{} _[3]=z2*gen(1) @expansion{} [3]: @expansion{} _[1,1]=z @expansion{} _[1,2]=1 print(LE[2]); @expansion{} y,x,z2 print(kbase(LE[2])); @expansion{} z,1 @c end example Computation_of_Ext examples.doc:1432 @end smallexample @c killall(); @end ifset @c ---------------------------------------------------------------------------- @ifset singularmanual @node Polar curves, Depth, Computation of Ext, Examples @section Polar curves @cindex Polar curves The polar curve of a hypersurface given by a polynomial @tex $f\in k[x_1,\ldots,x_n,t]$ @end tex @ifinfo f in k[x1,...,xn,t] @end ifinfo with respect to @ifinfo @math{t} @end ifinfo @tex $t$ @end tex (we may consider @ifinfo @math{f=0} @end ifinfo @tex $f=0$ @end tex as a family of hypersurfaces parametrized by @ifinfo @math{t} @end ifinfo @tex $t$ @end tex ) is defined as the Zariski closure of @tex $V(\partial f/\partial x_1,\ldots,\partial f/\partial x_n) \setminus V(f)$ @end tex @ifinfo V(diff(f,x1),...,diff(f,xn)) \ V(f) @end ifinfo if this happens to be a curve. Some authors consider @tex $V(\partial f/\partial x_1,\ldots,\partial f/\partial x_n)$ @end tex @ifinfo V(diff(f,x1),...,diff(f,xn)) @end ifinfo itself as polar curve. We may consider projective hypersurfaces @tex (in $P^n$), @end tex @ifinfo (in P^n), @end ifinfo affine hypersurfaces @tex (in $k^n$) @end tex @ifinfo (in k^n) @end ifinfo or germs of hypersurfaces @tex (in $(k^n,0)$), @end tex @ifinfo (in (k^n,0)), @end ifinfo getting in this way projective, affine or local polar curves. Now let us compute this for a family of curves. We need the library @code{elim.lib} for saturation and @code{sing.lib} for the singular locus. @smallexample @c computed example Polar_curves examples.doc:1526 LIB "elim.lib"; LIB "sing.lib"; // Affine polar curve: ring R = 0,(x,z,t),dp; // global ordering dp poly f = z5+xz3+x2-tz6; dim_slocus(f); // dimension of singular locus @expansion{} 1 ideal j = diff(f,x),diff(f,z); dim(std(j)); // dim V(j) @expansion{} 1 dim(std(j+ideal(f))); // V(j,f) also 1-dimensional @expansion{} 1 // j defines a curve, but to get the polar curve we must remove the // branches contained in f=0 (they exist since dim V(j,f) = 1). This // gives the polar curve set theoretically. But for the structure we // may take either j:f or j:f^k for k sufficiently large. The first is // just the ideal quotient, the second the iterated ideal quotient // or saturation. In our case both coincide. ideal q = quotient(j,ideal(f)); // ideal quotient ideal qsat = sat(j,f)[1]; // saturation, proc from elim.lib ideal sq = std(q); dim(sq); @expansion{} 1 // 1-dimensional, hence q defines the affine polar curve // // to check that q and qsat are the same, we show both inclusions, i.e., // both reductions must give the 0-ideal size(reduce(qsat,sq)); @expansion{} 0 size(reduce(q,std(qsat))); @expansion{} 0 qsat; @expansion{} qsat[1]=12zt+3z-10 @expansion{} qsat[2]=5z2+12xt+3x @expansion{} qsat[3]=144xt2+72xt+9x+50z // We see that the affine polar curve does not pass through the origin, // hence we expect the local polar "curve" to be empty // ------------------------------------------------ // Local polar curve: ring r = 0,(x,z,t),ds; // local ordering ds poly f = z5+xz3+x2-tz6; ideal j = diff(f,x),diff(f,z); dim(std(j)); // V(j) 1-dimensional @expansion{} 1 dim(std(j+ideal(f))); // V(j,f) also 1-dimensional @expansion{} 1 ideal q = quotient(j,ideal(f)); // ideal quotient q; @expansion{} q[1]=1 // The local polar "curve" is empty, i.e., V(j) is contained in V(f) // ------------------------------------------------ // Projective polar curve: (we need "sing.lib" and "elim.lib") ring P = 0,(x,z,t,y),dp; // global ordering dp poly f = z5y+xz3y2+x2y4-tz6; // but consider t as parameter dim_slocus(f); // projective 1-dimensional singular locus @expansion{} 2 ideal j = diff(f,x),diff(f,z); dim(std(j)); // V(j), projective 1-dimensional @expansion{} 2 dim(std(j+ideal(f))); // V(j,f) also projective 1-dimensional @expansion{} 2 ideal q = quotient(j,ideal(f)); ideal qsat = sat(j,f)[1]; // saturation, proc from elim.lib dim(std(qsat)); @expansion{} 2 // projective 1-dimensional, hence q and/or qsat define the projective // polar curve. In this case, q and qsat are not the same, we needed // 2 quotients. // Let us check both reductions: size(reduce(qsat,std(q))); @expansion{} 4 size(reduce(q,std(qsat))); @expansion{} 0 // Hence q is contained in qsat but not conversely q; @expansion{} q[1]=12zty+3zy-10y2 @expansion{} q[2]=60z2t-36xty-9xy-50zy qsat; @expansion{} qsat[1]=12zt+3z-10y @expansion{} qsat[2]=12xty+5z2+3xy @expansion{} qsat[3]=144xt2+72xt+9x+50z @expansion{} qsat[4]=z3+2xy2 // // Now consider again the affine polar curve, // homogenize it with respect to y (deg t=0) and compare: // affine polar curve: ideal qa = 12zt+3z-10,5z2+12xt+3x,-144xt2-72xt-9x-50z; // homogenized: ideal qh = 12zt+3z-10y,5z2+12xyt+3xy,-144xt2-72xt-9x-50z; size(reduce(qh,std(qsat))); @expansion{} 0 size(reduce(qsat,std(qh))); @expansion{} 0 // both ideals coincide @c end example Polar_curves examples.doc:1526 @end smallexample @end ifset @c ---------------------------------------------------------------------------- @ifset singularmanual @node Depth, Formatting output, Polar curves, Examples @section Depth @cindex Depth We compute the depth of the module of Kaehler differentials @tex D$_k$(R) @end tex @ifinfo D_k(R) @end ifinfo of the variety defined by the @ifinfo @math{(m+1)} @end ifinfo @tex $(m+1)$ @end tex -minors of a generic symmetric @tex $(n \times n)$-matrix. @end tex @ifinfo (n x n)-matrix. @end ifinfo We do this by computing the resolution over the polynomial ring. Then, by the Auslander-Buchsbaum formula, the depth is equal to the number of variables minus the length of a minimal resolution. This example was suggested by U.@: Vetter in order to check whether his bound @tex $\hbox{depth}(\hbox{D}_k(R))\geq m(m+1)/2 + m-1$ @end tex @ifinfo depth(D_k(R)) >= m(m+1)/2 + m-1 @end ifinfo could be improved. @smallexample @c computed example Depth examples.doc:1632 LIB "matrix.lib"; LIB "sing.lib"; int n = 4; int m = 3; int N = n*(n+1)/2; // will become number of variables ring R = 32003,x(1..N),dp; matrix X = symmat(n); // proc from matrix.lib // creates the symmetric generic nxn matrix print(X); @expansion{} x(1),x(2),x(3),x(4), @expansion{} x(2),x(5),x(6),x(7), @expansion{} x(3),x(6),x(8),x(9), @expansion{} x(4),x(7),x(9),x(10) ideal J = minor(X,m); J=std(J); // Kaehler differentials D_k(R) // of R=k[x1..xn]/J: module D = J*freemodule(N)+transpose(jacob(J)); ncols(D); @expansion{} 110 nrows(D); @expansion{} 10 // // Note: D is a submodule with 110 generators of a free module // of rank 10 over a polynomial ring in 10 variables. // Compute a full resolution of D with sres. // This takes about 17 sec on a Mac PB 520c and 2 sec an a HP 735 int time = timer; module sD = std(D); list Dres = sres(sD,0); // the full resolution timer-time; // time used for std + sres @expansion{} 0 intmat B = betti(Dres); print(B,"betti"); @expansion{} 0 1 2 3 4 5 6 @expansion{} ------------------------------------------------ @expansion{} 0: 10 - - - - - - @expansion{} 1: - 10 - - - - - @expansion{} 2: - 84 144 60 - - - @expansion{} 3: - - 35 80 60 16 1 @expansion{} ------------------------------------------------ @expansion{} total: 10 94 179 140 60 16 1 N-ncols(B)+1; // the desired depth @expansion{} 4 @c end example Depth examples.doc:1632 @end smallexample @c killall(); @end ifset @c ---------------------------------------------------------------------------- @ifset singularmanual @node Formatting output, Cyclic roots, Depth, Examples @end ifset @ifclear singularmanual @node Formatting output, Factorization, Free resolution, Examples @end ifclear @section Formatting output @cindex Formatting output We show how to insert the result of a computation inside a text by using strings. First we compute the powers of 2 and comment the result with some text. Then we do the same and give the output a nice format by computing and adding appropriate space. @smallexample @c computed example Formatting_output examples.doc:1682 // The powers of 2: int n; for (n = 2; n <= 128; n = n * 2) @{"n = " + string (n);@} @expansion{} n = 2 @expansion{} n = 4 @expansion{} n = 8 @expansion{} n = 16 @expansion{} n = 32 @expansion{} n = 64 @expansion{} n = 128 // The powers of 2 in a nice format int j; string space = ""; for (n = 2; n <= 128; n = n * 2) @{ space = ""; for (j = 1; j <= 5 - size (string (n)); j = j+1) @{ space = space + " "; @} "n =" + space + string (n); @} @expansion{} n = 2 @expansion{} n = 4 @expansion{} n = 8 @expansion{} n = 16 @expansion{} n = 32 @expansion{} n = 64 @expansion{} n = 128 @c end example Formatting_output examples.doc:1682 @end smallexample @c ---------------------------------------------------------------------------- @ifset singularmanual @node Cyclic roots, G_a -Invariants, Formatting output, Examples @section Cyclic roots @cindex Cyclic roots We write a procedure returning a string that enables us to create automatically the ideal of cyclic roots over the basering with n variables. The procedure assumes that the variables consist of a single letter each (hence no indexed variables are allowed; the procedure @code{cyclic} in @code{poly.lib} does not have this restriction). Then we compute a standard basis of this ideal and some numerical information. (This ideal is used as a classical benchmark for standard basis computations). @smallexample // We call the procedure 'cyclic': proc cyclic (int n) @{ string vs = varstr(basering)+varstr(basering); int c=find(vs,","); while ( c!=0 ) @{ vs=vs[1,c-1]+vs[c+1,size(vs)]; c=find(vs,","); @} string t,s; int i,j; for ( j=1; j<=n-1; j=j+1 ) @{ t=""; for ( i=1; i <=n; i=i+1 ) @{ t = t + vs[i,j] + "+"; @} t = t[1,size(t)-1] + ","+newline; s=s+t; @} s=s+vs[1,n]+"-1"; return (s); @} ring r=0,(a,b,c,d,e),lp; // basering, char 0, lex ordering string sc=cyclic(nvars(basering)); sc; // the string of the ideal @expansion{} a+b+c+d+e, @expansion{} ab+bc+cd+de+ea, @expansion{} abc+bcd+cde+dea+eab, @expansion{} abcd+bcde+cdea+deab+eabc, @expansion{} abcde-1 execute("ideal i="+sc+";"); // this defines the ideal of cyclic roots i; @expansion{} i[1]=a+b+c+d+e @expansion{} i[2]=ab+bc+cd+ae+de @expansion{} i[3]=abc+bcd+abe+ade+cde @expansion{} i[4]=abcd+abce+abde+acde+bcde @expansion{} i[5]=abcde-1 timer=1; ideal j=std(i); @expansion{} //used time: 7.5 sec size(j); // number of elements in the std basis @expansion{} 11 degree(j); @expansion{} // codimension = 5 @expansion{} // dimension = 0 @expansion{} // degree = 70 @end smallexample @end ifset @c ---------------------------------------------------------------------------- @ifset singularmanual @node G_a -Invariants, Invariants of a finite group, Cyclic roots, Examples @section G_a -Invariants @cindex G_a -Invariants We work in characteristic 0 and use the Lie algebra generated by one vector field of the form @tex $\sum x_i \partial /\partial x_{i+1}$. @end tex @ifinfo sum x(i)*d/dx(i+1). @end ifinfo @smallexample @c computed example G_a_-Invariants examples.doc:1783 LIB "ainvar.lib"; int n=5; int i; ring s=32003,(x(1..n)),wp(1,2,3,4,5); // definition of the vector field m=sum m[i,1]*d/dx(i) matrix m[n][1]; for (i=1;i<=n-1;i=i+1) @{ m[i+1,1]=x(i); @} // computation of the ring of invariants ideal in=invariantRing(m,x(2),x(1),0); in; //invariant ring is generated by 5 invariants @expansion{} in[1]=x(1) @expansion{} in[2]=x(2)^2-2*x(1)*x(3) @expansion{} in[3]=x(3)^2-2*x(2)*x(4)+2*x(1)*x(5) @expansion{} in[4]=x(2)^3-3*x(1)*x(2)*x(3)+3*x(1)^2*x(4) @expansion{} in[5]=x(3)^3-3*x(2)*x(3)*x(4)-15997*x(1)*x(4)^2+3*x(2)^2*x(5)-6*x(1)*x(3)\ *x(5) ring q=32003,(x,y,z,u,v,w),dp; matrix m[6][1]; m[2,1]=x; m[3,1]=y; m[5,1]=u; m[6,1]=v; // the vector field is: xd/dy+yd/dz+ud/dv+vd/dw ideal in=invariantRing(m,y,x,0); in; //invariant ring is generated by 6 invariants @expansion{} in[1]=x @expansion{} in[2]=u @expansion{} in[3]=v2-2uw @expansion{} in[4]=zu-yv+xw @expansion{} in[5]=yu-xv @expansion{} in[6]=y2-2xz @c end example G_a_-Invariants examples.doc:1783 @end smallexample @c kill n,i,s,q; @end ifset @c ---------------------------------------------------------------------------- @ifset singularmanual @node Invariants of a finite group, Factorization, G_a -Invariants, Examples @section Invariants of a finite group @cindex Invariants of a finite group Two algorithms to compute the invariant ring are implemented in @sc{Singular}, @code{invariant_ring} and @code{invariant_ring_random}, both by Agnes E. Heydtmann (@code{agnes@@math.uni-sb.de}). Bases of homogeneous invariants are generated successively and those are chosen as primary invariants that lower the dimension of the ideal generated by the previously found invariants (see paper "Generating a Noetherian Normalization of the Invariant Ring of a Finite Group" by Decker, Heydtmann, Schreyer (1997) to appear in JSC). In the non-modular case secondary invariants are calculated by finding a basis (in terms of monomials) of the basering modulo the primary invariants, mapping to invariants with the Reynolds operator and using those or their power products such that they are linearly independent modulo the primary invariants (see paper "Some Algorithms in Invariant Theory of Finite Groups" by Kemper and Steel (1997)). In the modular case they are generated according to "Generating Invariant Rings of Finite Groups over Arbitrary Fields" by Kemper (1996, to appear in JSC). We calculate now an example from Sturmfels: "Algorithms in Invariant Theory 2.3.7": @smallexample @c computed example Invariants_of_a_finite_group examples.doc:1838 LIB "finvar.lib"; ring R=0,(x,y,z),dp; matrix A[3][3]=0,1,0,-1,0,0,0,0,-1; // the group G is generated by A in Gl(3,Q); print(A); @expansion{} 0, 1,0, @expansion{} -1,0,0, @expansion{} 0, 0,-1 print(A*A*A*A); // the fourth power of A is 1 @expansion{} 1,0,0, @expansion{} 0,1,0, @expansion{} 0,0,1 // Use the first method to compute the invariants of G: matrix B(1..3); B(1..3)=invariant_ring(A); // SINGULAR returns 2 matrices, the first containing // primary invariants and the second secondary // invariants, i.e., module generators over a Noetherian // normalization // the third result are the irreducible secondary invariants // if the Molien series was available print(B(1)); @expansion{} z2,x2+y2,x2y2 print(B(2)); @expansion{} 1,xyz,x2z-y2z,x3y-xy3 print(B(3)); @expansion{} xyz,x2z-y2z,x3y-xy3 // Use the second method, // with random numbers between -1 and 1: B(1..3)=invariant_ring_random(A,1); print(B(1..3)); @expansion{} z2,x2+y2,x4+y4-z4 @expansion{} 1,xyz,x2z-y2z,x3y-xy3 @expansion{} xyz,x2z-y2z,x3y-xy3 @c end example Invariants_of_a_finite_group examples.doc:1838 @end smallexample @end ifset @c ---------------------------------------------------------------------------- @ifset singularmanual @node Factorization, Puiseux pairs, Invariants of a finite group, Examples @end ifset @ifclear singularmanual @node Factorization, Kernel of module homomorphisms, Formatting output, Examples @end ifclear @section Factorization @cindex Factorization The factorization of polynomials is implemented in the C++ libraries Factory (written mainly by Ruediger Stobbe) and libfac (written by Michael Messollen) which are part of the @sc{Singular} system. @smallexample @c computed example Factorization examples.doc:1879 ring r = 0,(x,y),dp; poly f = 9x16-18x13y2-9x12y3+9x10y4-18x11y2+36x8y4 +18x7y5-18x5y6+9x6y4-18x3y6-9x2y7+9y8; // = 9 * (x5-1y2)^2 * (x6-2x3y2-1x2y3+y4) factorize(f); @expansion{} [1]: @expansion{} _[1]=9 @expansion{} _[2]=x6-2x3y2-x2y3+y4 @expansion{} _[3]=-x5+y2 @expansion{} [2]: @expansion{} 1,1,2 // returns factors and multiplicities, // first factor is a constant. poly g = (y4+x8)*(x2+y2); factorize(g); @expansion{} [1]: @expansion{} _[1]=1 @expansion{} _[2]=x8+y4 @expansion{} _[3]=x2+y2 @expansion{} [2]: @expansion{} 1,1,1 // The same in characteristic 2: ring s =2,(x,y),dp; poly g = (y4+x8)*(x2+y2); factorize(g); @expansion{} [1]: @expansion{} _[1]=1 @expansion{} _[2]=x+y @expansion{} _[3]=x2+y @expansion{} [2]: @expansion{} 1,2,4 @c end example Factorization examples.doc:1879 @end smallexample @c ---------------------------------------------------------------------------- @ifset singularmanual @node Puiseux pairs, Primary decomposition, Factorization, Examples @section Puiseux pairs @cindex Puiseux pairs The Puiseux pairs of an irreducible and reduced curve singularity are its most important invariants. They can be computed from its Hamburger-Noether expansion. The library @code{hnoether.lib} written by Martin Lamm uses the algorithm of Antonio Campillo "Algebroid curves in positive characteristic" SLN 813, 1980. This algorithm has the advantage that it needs least possible field extensions and, moreover, works in any characteristic. This fact can be used to compute the invariants over a field of finite characteristic, say 32003, which will then most probably be the same in characteristic 0. We compute the Hamburger-Noether expansion of a plane curve singularity given by a polynomial @ifinfo @math{f} @end ifinfo @tex $f$ @end tex in two variables. This is a matrix which allows to compute the parametrization (up to a given order) and all numerical invariants like the @itemize @bullet @item characteristic exponents, @item Puiseux pairs (of a complex model), @item degree of the conductor, @item delta invariant, @item generators of the semigroup. @end itemize Besides this, the library contains procedures to compute the Newton polygon of @ifinfo @math{f} @end ifinfo @tex $f$ @end tex , the squarefree part of @ifinfo @math{f} @end ifinfo @tex $f$ @end tex and a procedure to convert one set of invariants to another. @smallexample @c computed example Puiseux_pairs examples.doc:1934 LIB "hnoether.lib"; // ======== The irreducible case ======== ring s = 0,(x,y),ds; poly f = y4-2x3y2-4x5y+x6-x7; list hn = develop(f); show(hn[1]); // Hamburger-Noether matrix @expansion{} // matrix, 3x3 @expansion{} 0,x, 0, @expansion{} 0,1, x, @expansion{} 0,1/4,-1/2 displayHNE(hn); // Hamburger-Noether development @expansion{} HNE[1]=-y+z(0)*z(1) @expansion{} HNE[2]=-x+z(1)^2+z(1)^2*z(2) @expansion{} HNE[3]=1/4*z(2)^2-1/2*z(2)^3 setring s; displayInvariants(hn); @expansion{} characteristic exponents : 4,6,7 @expansion{} generators of semigroup : 4,6,13 @expansion{} Puiseux pairs : (3,2)(7,2) @expansion{} degree of the conductor : 16 @expansion{} delta invariant : 8 @expansion{} sequence of multiplicities: 4,2,2,1,1 // invariants(hn); returns the invariants as list // partial parametrization of f: param takes the first variable // as infinite except the ring has more than 2 variables. Then // the 3rd variable is chosen. param(hn); @expansion{} // ** Warning: result is exact up to order 5 in x and 7 in y ! @expansion{} _[1]=1/16x4-3/16x5+1/4x7 @expansion{} _[2]=1/64x6-5/64x7+3/32x8+1/16x9-1/8x10 ring extring=0,(x,y,t),ds; poly f=x3+2xy2+y2; list hn=develop(f,-1); param(hn); // partial parametrization of f @expansion{} // ** Warning: result is exact up to order 2 in x and 3 in y ! @expansion{} _[1]=-t2 @expansion{} _[2]=-t3 list hn1=develop(f,6); param(hn1); // a better parametrization @expansion{} // ** Warning: result is exact up to order 6 in x and 7 in y ! @expansion{} _[1]=-t2+2t4-4t6 @expansion{} _[2]=-t3+2t5-4t7 // instead of recomputing you may extend the development: list hn2=extdevelop(hn,12); param(hn2); // a still better parametrization @expansion{} // ** Warning: result is exact up to order 12 in x and 13 in y ! @expansion{} _[1]=-t2+2t4-4t6+8t8-16t10+32t12 @expansion{} _[2]=-t3+2t5-4t7+8t9-16t11+32t13 // // ======== The reducible case ======== ring r = 0,(x,y),dp; poly f=x11-2y2x8-y3x7-y2x6+y4x5+2y4x3+y5x2-y6; // = (x5-1y2) * (x6-2x3y2-1x2y3+y4) list hn=reddevelop(f); show(hn[1][1]); // Hamburger-Noether matrix of 1st branch @expansion{} // matrix, 3x3 @expansion{} 0,x,0, @expansion{} 0,1,x, @expansion{} 0,1,-1 displayInvariants(hn); @expansion{} --- invariants of branch number 1 : --- @expansion{} characteristic exponents : 4,6,7 @expansion{} generators of semigroup : 4,6,13 @expansion{} Puiseux pairs : (3,2)(7,2) @expansion{} degree of the conductor : 16 @expansion{} delta invariant : 8 @expansion{} sequence of multiplicities: 4,2,2,1,1 @expansion{} @expansion{} --- invariants of branch number 2 : --- @expansion{} characteristic exponents : 2,5 @expansion{} generators of semigroup : 2,5 @expansion{} Puiseux pairs : (5,2) @expansion{} degree of the conductor : 4 @expansion{} delta invariant : 2 @expansion{} sequence of multiplicities: 2,2,1,1 @expansion{} @expansion{} -------------- contact numbers : -------------- @expansion{} @expansion{} branch | 2 @expansion{} -------+----- @expansion{} 1 | 2 @expansion{} @expansion{} -------------- intersection multiplicities : -------------- @expansion{} @expansion{} branch | 2 @expansion{} -------+----- @expansion{} 1 | 12 @expansion{} @expansion{} -------------- delta invariant of the curve : 22 param(hn[2]); // parametrization of 2nd branch @expansion{} _[1]=x2 @expansion{} _[2]=x5 @c end example Puiseux_pairs examples.doc:1934 @end smallexample @end ifset @c ---------------------------------------------------------------------------- @ifset singularmanual @node Primary decomposition, Normalization, Puiseux pairs, Examples @section Primary decomposition @cindex Primary decomposition There are two algorithms implemented in @sc{Singular} which provide primary decomposition: @code{primdecGTZ}, based on Gianni/Trager/Zacharias (written by Gerhard Pfister) and @code{primdecSY}, based on Shimoyama/Yokoyama (written by Wolfram Decker and Hans Schoenemann). The result of @code{primdecGTZ} and @code{primdecSY} is returned as a list of pairs of ideals, where the second ideal form the prime ideal and the first ideal form the corresponding primary ideal. @smallexample @c computed example Primary_decomposition examples.doc:1988 LIB "primdec.lib"; ring r = 0,(a,b,c,d,e,f),dp; ideal i= f3, ef2, e2f, bcf-adf, de+cf, be+af, e3; primdecGTZ(i); @expansion{} [1]: @expansion{} [1]: @expansion{} _[1]=f @expansion{} _[2]=e @expansion{} [2]: @expansion{} _[1]=f @expansion{} _[2]=e @expansion{} [2]: @expansion{} [1]: @expansion{} _[1]=f3 @expansion{} _[2]=ef2 @expansion{} _[3]=e2f @expansion{} _[4]=e3 @expansion{} _[5]=de+cf @expansion{} _[6]=be+af @expansion{} _[7]=-bc+ad @expansion{} [2]: @expansion{} _[1]=f @expansion{} _[2]=e @expansion{} _[3]=-bc+ad // We consider now the ideal J of the base space of the // miniversal deformation of the cone over the rational // normal curve computed in section *8* and compute // its primary decomposition. ring R = 0,(A,B,C,D),dp; ideal J = CD, BD+D2, AD; primdecGTZ(J); @expansion{} [1]: @expansion{} [1]: @expansion{} _[1]=D @expansion{} [2]: @expansion{} _[1]=D @expansion{} [2]: @expansion{} [1]: @expansion{} _[1]=C @expansion{} _[2]=B+D @expansion{} _[3]=A @expansion{} [2]: @expansion{} _[1]=C @expansion{} _[2]=B+D @expansion{} _[3]=A // We see that there are two components which are both // prime, even linear subspaces, one 3-dimensional, // the other 1-dimensional. // (This is Pinkhams example and was the first known // surface singularity with two components of // different dimensions) // // Let us now produce an embedded component in the last // example, compute the minimal associated primes and // the radical. We use the Characteristic set methods // from prim_dec.lib. J = intersect(J,maxideal(3)); // The following shows that the maximal ideal defines an embedded // (prime) component. primdecSY(J); @expansion{} [1]: @expansion{} [1]: @expansion{} _[1]=D @expansion{} [2]: @expansion{} _[1]=D @expansion{} [2]: @expansion{} [1]: @expansion{} _[1]=C @expansion{} _[2]=B+D @expansion{} _[3]=A @expansion{} [2]: @expansion{} _[1]=C @expansion{} _[2]=B+D @expansion{} _[3]=A @expansion{} [3]: @expansion{} [1]: @expansion{} _[1]=D2 @expansion{} _[2]=C2 @expansion{} _[3]=B2 @expansion{} _[4]=AB @expansion{} _[5]=A2 @expansion{} _[6]=BCD @expansion{} _[7]=ACD @expansion{} [2]: @expansion{} _[1]=D @expansion{} _[2]=C @expansion{} _[3]=B @expansion{} _[4]=A minAssChar(J); @expansion{} [1]: @expansion{} _[1]=C @expansion{} _[2]=B+D @expansion{} _[3]=A @expansion{} [2]: @expansion{} _[1]=D radical(J); @expansion{} _[1]=CD @expansion{} _[2]=BD+D2 @expansion{} _[3]=AD @c end example Primary_decomposition examples.doc:1988 @end smallexample @end ifset @c ---------------------------------------------------------------------------- @ifset singularmanual @node Normalization, Branches of an Isolated Space Curve Singularity, Primary decomposition, Examples @section Normalization @cindex Normalization The normalization will be computed for a reduced ring @ifinfo @math{R/I} @end ifinfo @tex $R/I$ @end tex . The result is a list of rings; ideals are always called @code{norid} in the rings of this list. The normalization of @ifinfo @math{R/I} @end ifinfo @tex $R/I$ @end tex is the product of the factor rings of the rings in the list divided out by the ideals @code{norid}. @smallexample @c computed example Normalization examples.doc:2032 LIB "normal.lib"; // ----- first example: rational quadruple point ----- ring R=32003,(x,y,z),wp(3,5,15); ideal I=z*(y3-x5)+x10; list pr=normal(I); @expansion{} @expansion{} // 'normal' created a list of 1 ring(s). @expansion{} // nor[1+1] is the delta-invariant in case of choose=wd. @expansion{} // To see the rings, type (if the name of your list is nor): @expansion{} show( nor); @expansion{} // To access the 1-st ring and map (similar for the others), type: @expansion{} def R = nor[1]; setring R; norid; normap; @expansion{} // R/norid is the 1-st ring of the normalization and @expansion{} // normap the map from the original basering to R/norid def S=pr[1]; setring S; norid; @expansion{} norid[1]=T(2)*T(3)-T(1)*T(4) @expansion{} norid[2]=T(1)^7-T(1)^2*T(3)+T(2)*T(5) @expansion{} norid[3]=T(1)^2*T(5)-T(2)*T(4) @expansion{} norid[4]=T(1)^5*T(4)-T(3)*T(4)+T(5)^2 @expansion{} norid[5]=T(1)^6*T(3)-T(1)*T(3)^2+T(4)*T(5) @expansion{} norid[6]=T(1)*T(3)*T(5)-T(4)^2 // ----- second example: union of straight lines ----- ring R1=0,(x,y,z),dp; ideal I=(x-y)*(x-z)*(y-z); list qr=normal(I); @expansion{} @expansion{} // 'normal' created a list of 3 ring(s). @expansion{} // nor[3+1] is the delta-invariant in case of choose=wd. @expansion{} // To see the rings, type (if the name of your list is nor): @expansion{} show( nor); @expansion{} // To access the 1-st ring and map (similar for the others), type: @expansion{} def R = nor[1]; setring R; norid; normap; @expansion{} // R/norid is the 1-st ring of the normalization and @expansion{} // normap the map from the original basering to R/norid def S1=qr[1]; def S2=qr[2]; setring S1; norid; @expansion{} norid[1]=0 setring S2; norid; @expansion{} norid[1]=0 @c end example Normalization examples.doc:2032 @end smallexample @end ifset @c ---------------------------------------------------------------------------- @ifset singularmanual @node Branches of an Isolated Space Curve Singularity, Kernel of module homomorphisms, Normalization,Examples @section Branches of an Isolated Space Curve Singularity @cindex Branches of an Isolated Space Curve Singularity In this example, the number of branches of a given quasihomogeneous isolated space curve singularity will be computed as an example of the pitfalls appearing in the use of primary decomposition. When dealing with singularities, two situations are possible in which the primary decomposition algorithm might not lead to a complete decomposition: first of all, one of the computed components could be globally irreducible, but analytically reducible (this is impossible for quasihomogeneous singularities) and, as a second possibility, a component might be irreducible over the rational numbers, but reducible over the complex numbers. @smallexample @c computed example Branches_of_an_Isolated_Space_Curve_Singularity examples.doc:2067 ring r=0,(x,y,z),ds; ideal i=x^4-y*z^2,x*y-z^3,y^2-x^3*z; // the space curve singularity qhweight(i); @expansion{} 1,2,1 // The given space curve singularity is quasihomogeneous. Hence we can pass // to the polynomial ring. ring rr=0,(x,y,z),dp; ideal i=imap(r,i); resolution ires=mres(i,0); ires; @expansion{} 1 3 2 @expansion{} rr <-- rr <-- rr @expansion{} @expansion{} 0 1 2 @expansion{} // From the structure of the resolution, we see that the Cohen-Macaulay // type of the given singularity is 2 // // Let us now look for the branches using the primdec library. LIB "primdec.lib"; primdecSY(i); @expansion{} [1]: @expansion{} [1]: @expansion{} _[1]=z3-xy @expansion{} _[2]=x3+x2z+xz2+xy+yz @expansion{} _[3]=x2z2+x2y+xyz+yz2+y2 @expansion{} [2]: @expansion{} _[1]=z3-xy @expansion{} _[2]=x3+x2z+xz2+xy+yz @expansion{} _[3]=x2z2+x2y+xyz+yz2+y2 @expansion{} [2]: @expansion{} [1]: @expansion{} _[1]=x-z @expansion{} _[2]=z2-y @expansion{} [2]: @expansion{} _[1]=x-z @expansion{} _[2]=z2-y def li=_[2]; ideal i2=li[2]; // call the second ideal i2 // The curve seems to have 2 branches by what we computed using the // algorithm of Shimoyama-Yokoyama. // Now the same computation by the Gianni-Trager-Zacharias algorithm: primdecGTZ(i); @expansion{} [1]: @expansion{} [1]: @expansion{} _[1]=z8+yz6+y2z4+y3z2+y4 @expansion{} _[2]=xz5+z6+yz4+y2z2+y3 @expansion{} _[3]=-z3+xy @expansion{} _[4]=x2z2+xz3+xyz+yz2+y2 @expansion{} _[5]=x3+x2z+xz2+xy+yz @expansion{} [2]: @expansion{} _[1]=z8+yz6+y2z4+y3z2+y4 @expansion{} _[2]=xz5+z6+yz4+y2z2+y3 @expansion{} _[3]=-z3+xy @expansion{} _[4]=x2z2+xz3+xyz+yz2+y2 @expansion{} _[5]=x3+x2z+xz2+xy+yz @expansion{} [2]: @expansion{} [1]: @expansion{} _[1]=-z2+y @expansion{} _[2]=x-z @expansion{} [2]: @expansion{} _[1]=-z2+y @expansion{} _[2]=x-z // Having computed the primary decomposition in 2 different ways and // having obtained the same number of branches, we might expect that the // number of branches is really 2, but we can check this by formulae // for the invariants of space curve singularities: // // mu = tau - t + 1 (for quasihomogeneous curve singularities) // where mu denotes the Milnor number, tau the Tjurina number and // t the Cohen-Macaulay type // // mu = 2 delta - r + 1 // where delta denotes the delta-Invariant and r the number of branches // // tau can be computed by using the corresponding procedure T1 from // sing.lib. setring r; LIB "sing.lib"; T_1(i); @expansion{} // dim T_1 = 13 @expansion{} _[1]=gen(6)+2z*gen(5) @expansion{} _[2]=gen(4)+3x2*gen(2) @expansion{} _[3]=gen(3)+gen(1) @expansion{} _[4]=x*gen(5)-y*gen(2)-z*gen(1) @expansion{} _[5]=x*gen(1)-z2*gen(2) @expansion{} _[6]=y*gen(5)+3x2z*gen(2) @expansion{} _[7]=y*gen(2)-z*gen(1) @expansion{} _[8]=2y*gen(1)-z2*gen(5) @expansion{} _[9]=z2*gen(5) @expansion{} _[10]=z2*gen(1) @expansion{} _[11]=x3*gen(2) @expansion{} _[12]=x2z2*gen(2) @expansion{} _[13]=xz3*gen(2) @expansion{} _[14]=z4*gen(2) setring rr; // Hence tau is 13 and therefore mu is 12. But then it is impossible that // the singularity has two branches, since mu is even and delta is an // integer! // So obviously, we did not decompose completely. Because the first branch // is smooth, only the second ideal can be the one which can be decomposed // further. // Let us now consider the normalization of this second ideal i2. LIB "normal.lib"; normal(i2); @expansion{} @expansion{} // 'normal' created a list of 1 ring(s). @expansion{} // nor[1+1] is the delta-invariant in case of choose=wd. @expansion{} // To see the rings, type (if the name of your list is nor): @expansion{} show( nor); @expansion{} // To access the 1-st ring and map (similar for the others), type: @expansion{} def R = nor[1]; setring R; norid; normap; @expansion{} // R/norid is the 1-st ring of the normalization and @expansion{} // normap the map from the original basering to R/norid @expansion{} [1]: @expansion{} // characteristic : 0 @expansion{} // number of vars : 1 @expansion{} // block 1 : ordering dp @expansion{} // : names T(1) @expansion{} // block 2 : ordering C def rno=_[1]; setring rno; norid; @expansion{} norid[1]=0 // The ideal is generated by a polynomial in one variable of degree 4 which // factors completely into 4 polynomials of type T(2)+a. // From this, we know that the ring of the normalization is the direct sum of // 4 polynomial rings in one variable. // Hence our original curve has these 4 branches plus a smooth one // which we already determined by primary decomposition. // Our final result is therefore: 5 branches. @c end example Branches_of_an_Isolated_Space_Curve_Singularity examples.doc:2067 @end smallexample @end ifset @c ---------------------------------------------------------------------------- @ifset singularmanual @node Kernel of module homomorphisms, Algebraic dependence, Branches of an Isolated Space Curve Singularity, Examples @end ifset @ifclear singularmanual @node Kernel of module homomorphisms, Algebraic dependence, Factorization, Examples @end ifclear @section Kernel of module homomorphisms @cindex Kernel of module homomorphisms Let @ifinfo @math{A} @end ifinfo @tex $A$ @end tex , @ifinfo @math{B} @end ifinfo @tex $B$ @end tex be two matrices of size @tex $m\times r$ and $m\times s$ @end tex @ifinfo m x r and m x s @end ifinfo over the ring @ifinfo @math{R} @end ifinfo @tex $R$ @end tex and consider the corresponding maps @tex $$ R^r \buildrel{A}\over{\longrightarrow} R^m \buildrel{B}\over{\longleftarrow} R^s\;. $$ @end tex @ifinfo @smallexample r A m R -----> R ^ | | s R . @end smallexample @end ifinfo We want to compute the kernel of the map @tex $R^r \buildrel{A}\over{\longrightarrow} R^m\longrightarrow R^m/\hbox{Im}(B) \;.$ @end tex @ifinfo @smallexample r A m m R -----> R -----> R /Im(B) . @end smallexample @end ifinfo This can be done using the @code{modulo} command: @tex $$ \hbox{\tt modulo}(A,B)=\hbox{ker}(R^r \buildrel{A}\over{\longrightarrow}R^m/\hbox{Im}(B)) \; . $$ @end tex @ifinfo @smallexample r A m modulo(A,B)=ker(R -----> R /Im(B)) . @end smallexample @end ifinfo @smallexample @c computed example Kernel_of_module_homomorphisms examples.doc:2196 ring r=0,(x,y,z),(c,dp); matrix A[2][2]=x,y,z,1; matrix B[2][2]=x2,y2,z2,xz; print(modulo(A,B)); @expansion{} yz2-x2, xyz-y2, x2z-xy, x3-y2z, @expansion{} x2z-xz2,-x2z+y2z,xyz-yz2,0 @c end example Kernel_of_module_homomorphisms examples.doc:2196 @end smallexample @c ---------------------------------------------------------------------------- @ifset singularmanual @node Algebraic dependence, Classification, Kernel of module homomorphisms, Examples @end ifset @ifclear singularmanual @node Algebraic dependence, , Kernel of module homomorphisms, Examples @end ifclear @section Algebraic dependence @cindex Algebraic dependence Let @tex $g$, $f_1$, \dots, $f_r\in K[x_1,\ldots,x_n]$. @end tex @ifinfo g, f_1, @dots{}, f_r in K[x1,@dots{},xn]. @end ifinfo We want to check whether @enumerate @item @tex $f_1$, \dots, $f_r$ @end tex @ifinfo f_1, @dots{}, f_r @end ifinfo are algebraically dependent. Let @tex $I=\langle Y_1-f_1,\ldots,Y_r-f_r \rangle \subseteq K[x_1,\ldots,x_n,Y_1,\ldots,Y_r]$. @end tex @ifinfo @smallexample I= subset K[x1,@dots{},xn,Y_1,@dots{},Y_r]. @end smallexample @end ifinfo Then @tex $I \cap K[Y_1,\ldots,Y_r]$ @end tex @ifinfo I intersected with K[Y_1,@dots{},Y_r] @end ifinfo are the algebraic relations between @tex $f_1$, \dots, $f_r$. @end tex @ifinfo f_1, @dots{}, f_r. @end ifinfo @item @tex $g \in K [f_1,\ldots,f_r]$. @end tex @ifinfo g in K[f_1,@dots{},f_r]. @end ifinfo @tex $g \in K[f_1,\ldots,f_r]$ @end tex @ifinfo g in K[f_1,@dots{},f_r] @end ifinfo if and only if the normal form of @ifinfo @math{g} @end ifinfo @tex $g$ @end tex with respect to @ifinfo @math{I} @end ifinfo @tex $I$ @end tex and a block ordering with respect to @tex $X=(x_1,\ldots,x_n)$ and $Y=(Y_1,\ldots,Y_r)$ with $X>Y$ @end tex @ifinfo X=(x1,@dots{},xn) and Y=(Y_1,@dots{},Y_r) with X>Y @end ifinfo is in @ifinfo @math{K[Y]} @end ifinfo @tex $K[Y]$ @end tex . @end enumerate Both questions can be answered using the following procedure. If the second argument is zero, it checks for algebraic dependence and returns the ideal of relations between the generators of the given ideal. Otherwise it checks for subring membership and returns the normal form of the second argument with respect to the ideal I. @smallexample @c computed example Algebraic_dependence examples.doc:2290 proc algebraicDep(ideal J, poly g) @{ def R=basering; // give a name to the basering int n=size(J); int k=nvars(R); int i; intvec v; // construction of the new ring: // construct a weight vector v[n+k]=0; // gives a zero vector of length n+k for(i=1;i<=k;i++) @{ v[i]=1; @} string orde="(a("+string(v)+"),dp);"; string ri="ring Rhelp=("+charstr(R)+"), ("+varstr(R)+",Y(1.."+string(n)+")),"+orde; // ring definition as a string execute(ri); // execution of the string // construction of the new ideal I=(J[1]-Y(1),...,J[n]-Y(n)) ideal I=imap(R,J); for(i=1;i<=n;i++) @{ I[i]=I[i]-var(k+i); @} poly g=imap(R,g); if(g==0) @{ // construction of the ideal of relations by elimination poly el=var(1); for(i=2;i<=k;i++) @{ el=el*var(i); @} ideal KK=eliminate(I,el); keepring(Rhelp); return(KK); @} // reduction of g with respect to I ideal KK=reduce(g,std(I)); keepring(Rhelp); return(KK); @} // applications of the procedure ring r=0,(x,y,z),dp; ideal i=xz,yz; algebraicDep(i,0); @expansion{} _[1]=0 // Note: after call of algebraicDep(), the basering is Rhelp. setring r; kill Rhelp; ideal j=xy+z2,z2+y2,x2y2-2xy3+y4; algebraicDep(j,0); @expansion{} _[1]=Y(1)^2-2*Y(1)*Y(2)+Y(2)^2-Y(3) setring r; kill Rhelp; poly g=y2z2-xz; algebraicDep(i,g); @expansion{} _[1]=Y(2)^2-Y(1) // this shows that g is contained in i. setring r; kill Rhelp; algebraicDep(j,g); @expansion{} _[1]=-z^4+z^2*Y(2)-x*z // this shows that g is contained in j. @c end example Algebraic_dependence examples.doc:2290 @end smallexample @c ---------------------------------------------------------------------------- @ifset singularmanual @node Classification, Fast lexicographical GB, Algebraic dependence, Examples @section Classification @cindex Classification Classification of isolated hypersurface singularities with respect to right equivalence is provided by the command @code{classify} of the library @code{classify.lib}. The classification is done using the algorithm of Arnold. Before entering this algorithm, a first guess based on the Hilbert polynomial of the Milnor algebra is made. @smallexample @c computed example Classification examples.doc:2369 LIB "classify.lib"; ring r=0,(x,y,z),ds; poly p=singularity("E[6k+2]",2)[1]; p=p+z^2; p; @expansion{} z2+x3+xy6+y8 // We received an E_14 singularity in normal form // from the database of normal forms. Since only the residual // part is saved in the database, we added z^2 to get an E_14 // of embedding dimension 3. // // Now we apply a coordinate change in order to deal with a // singularity which is not in normal form: map phi=r,x+y,y+z,x; poly q=phi(p); // Yes, q really looks ugly, now: q; @expansion{} x2+x3+3x2y+3xy2+y3+xy6+y7+6xy5z+6y6z+15xy4z2+15y5z2+20xy3z3+20y4z3+15xy2z\ 4+15y3z4+6xyz5+6y2z5+xz6+yz6+y8+8y7z+28y6z2+56y5z3+70y4z4+56y3z5+28y2z6+8\ yz7+z8 // Classification classify(q); @expansion{} About the singularity : @expansion{} Milnor number(f) = 14 @expansion{} Corank(f) = 2 @expansion{} Determinacy <= 12 @expansion{} Guessing type via Milnorcode: E[6k+2]=E[14] @expansion{} @expansion{} Computing normal form ... @expansion{} I have to apply the splitting lemma. This will take some time....:-) @expansion{} Arnold step number 9 @expansion{} The singularity @expansion{} x3-9/4x4+27/4x5-189/8x6+737/8x7+6x6y+15x5y2+20x4y3+15x3y4+6x2y5+xy6-24\ 089/64x8-x7y+11/2x6y2+26x5y3+95/2x4y4+47x3y5+53/2x2y6+8xy7+y8+104535/64x9\ +27x8y+135/2x7y2+90x6y3+135/2x5y4+27x4y5+9/2x3y6-940383/128x10-405/4x9y-2\ 025/8x8y2-675/2x7y3-2025/8x6y4-405/4x5y5-135/8x4y6+4359015/128x11+1701/4x\ 10y+8505/8x9y2+2835/2x8y3+8505/8x7y4+1701/4x6y5+567/8x5y6-82812341/512x12\ -15333/8x11y-76809/16x10y2-25735/4x9y3-78525/16x8y4-16893/8x7y5-8799/16x6\ y6-198x5y7-495/4x4y8-55x3y9-33/2x2y10-3xy11-1/4y12 @expansion{} is R-equivalent to E[14]. @expansion{} Milnor number = 14 @expansion{} modality = 1 @expansion{} 2z2+x3+xy6+y8 // The library also provides routines to determine the corank of q // and its residual part without going through the whole // classification algorithm. corank(q); @expansion{} 2 morsesplit(q); @expansion{} y3-9/4y4+27/4y5-189/8y6+737/8y7+6y6z+15y5z2+20y4z3+15y3z4+6y2z5+yz6-24089\ /64y8-y7z+11/2y6z2+26y5z3+95/2y4z4+47y3z5+53/2y2z6+8yz7+z8+104535/64y9+27\ y8z+135/2y7z2+90y6z3+135/2y5z4+27y4z5+9/2y3z6-940383/128y10-405/4y9z-2025\ /8y8z2-675/2y7z3-2025/8y6z4-405/4y5z5-135/8y4z6+4359015/128y11+1701/4y10z\ +8505/8y9z2+2835/2y8z3+8505/8y7z4+1701/4y6z5+567/8y5z6-82812341/512y12-15\ 333/8y11z-76809/16y10z2-25735/4y9z3-78525/16y8z4-16893/8y7z5-8799/16y6z6-\ 198y5z7-495/4y4z8-55y3z9-33/2y2z10-3yz11-1/4z12 @c end example Classification examples.doc:2369 @end smallexample @end ifset @c ---------------------------------------------------------------------------- @ifset singularmanual @node Fast lexicographical GB, Parallelization with MPtcp links, Classification, Examples @section Fast lexicographical GB @cindex Fast lexicographical GB Compute Groebner basis in lexicographical ordering by using the FGLM algorithm (@code{stdfglm}) and Hilbert driven Groebner (@code{stdhilb}). The command @code{stdfglm} applies only for zero-dimensional ideals and returns a reduced Groebner basis. For the ideal below, @code{stdfglm} is more than 100 times and @code{stdhilb} about 10 times faster than @code{std}. @smallexample @c computed example Fast_lexicographical_GB examples.doc:2413 ring r =32003,(a,b,c,d,e),lp; ideal i=a+b+c+d, ab+bc+cd+ae+de, abc+bcd+abe+ade+cde, abc+abce+abde+acde+bcde, abcde-1; int t=timer; ideal j1=stdfglm(i); timer-t; @expansion{} 0 size(j1); // size (no. of polys) in computed GB @expansion{} 5 t=timer; ideal j2=stdhilb(i); timer-t; @expansion{} 0 size(j2); // size (no. of polys) in computed GB @expansion{} 158 // usual Groebner basis computation for lex ordering t=timer; ideal j0 =std(i); timer-t; @expansion{} 1 @c end example Fast_lexicographical_GB examples.doc:2413 @end smallexample @end ifset @c ---------------------------------------------------------------------------- @ifset singularmanual @node Parallelization with MPtcp links, , Fast lexicographical GB, Examples @section Parallelization with MPtcp links @cindex Parallelization @cindex MPtcp @cindex link In this example, we demonstrate how MPtcp links can be used to parallelize computations. To compute a standard basis for a zero-dimensional ideal in the lexicographical ordering, one of the two powerful routines @code{stdhilb} @ifset singularmanual (see @ref{stdhilb}) @end ifset and @code{stdfglm} @ifset singularmanual (see @ref{stdfglm}) @end ifset should be used. However, a priory one can not predict which one of the two commands is faster. This very much depends on the (input) example. Therefore, we use MPtcp links to let both commands work on the problem independently and in parallel, so that the one which finishes first delivers the result. The example we use is the so-called "omdi example". See @i{Tim Wichmann; Der FGLM-Algorithmus: verallgemeinert und implementiert in Singular; Diplomarbeit Fachbereich Mathematik, Universitaet Kaiserslautern; 1997} for more details. @smallexample @c computed example Parallelization_with_MPtcp_links examples.doc:2464 ring r=0,(a,b,c,u,v,w,x,y,z),lp; ideal i=a+c+v+2x-1, ab+cu+2vw+2xy+2xz-2/3, ab2+cu2+2vw2+2xy2+2xz2-2/5, ab3+cu3+2vw3+2xy3+2xz3-2/7, ab4+cu4+2vw4+2xy4+2xz4-2/9, vw2+2xyz-1/9, vw4+2xy2z2-1/25, vw3+xyz2+xy2z-1/15, vw4+xyz3+xy3z-1/21; link l_hilb,l_fglm = "MPtcp:fork","MPtcp:fork"; // 1. open(l_fglm); open(l_hilb); write(l_hilb, quote(system("pid"))); // 2. write(l_fglm, quote(system("pid"))); int pid_hilb,pid_fglm = read(l_hilb),read(l_fglm); write(l_hilb, quote(stdhilb(i))); // 3. write(l_fglm, quote(stdfglm(eval(i)))); while ((! status(l_hilb, "read", "ready", 1)) && // 4. (! status(l_fglm, "read", "ready", 1))) @{@} if (status(l_hilb, "read", "ready")) @{ "stdhilb won !!!!"; size(read(l_hilb)); close(l_hilb); pid_fglm = system("sh","kill "+string(pid_fglm)); @} else // 5. @{ "stdfglm won !!!!"; size(read(l_fglm)); close(l_fglm); pid_hilb = system("sh","kill "+string(pid_hilb)); @} @expansion{} stdfglm won !!!! @expansion{} 9 @c end example Parallelization_with_MPtcp_links examples.doc:2464 @end smallexample Some explanatory remarks are in order: @enumerate @item Instead of using links of the type @code{MPtcp:fork}, we alternatively could use @code{MPtcp:launch} links such that the two "competing" @sc{Singular} processes run on different machines. This has the advantage of "true" parallel computing since no resource sharing is involved (as it usually is with forked processes). @item Unfortunately, MPtcp links do not offer means to (asynchronously) interrupt or kill an attached (i.e., launched or forked) process. Therefore, we explicitly need to get the process id numbers of the competing @sc{Singular} processes, so that we can "kill" the looser later. @item Notice how quoting is used in order to prevent local evaluation (i.e., local computation of results). Since we "forked" the two competing processes, the identifier @code{i} is defined and has identical values in both child processes. Therefore, the innermost @code{eval} can be omitted (as is done for the @code{l_hilb} link), and only the identifier @code{i} needs to be communicated to the children. However, when @code{MPtcp:launch} links are used, the inner evaluation must be applied so that actual values, and not the identifiers are communicated (as is done for the @code{l_fglm} link). @item We go into a "sleepy" loop and wait until one of the two children finished the computation. That is, the current process checks approximately once per second the status of one of the connecting links, and sleeps (i.e., suspends its execution) in the intermediate time. @item The child which has won delivers the result and is terminated with the usual @code{close} command. The other child which is still computing needs to be terminated by an explicit (i.e., system) kill command, since it can not be terminated through the link while it is still computing. @end enumerate @end ifset @c -------------------------------------------------------------------- @ifclear singularmanual @section Further smallexamples The example section of the @sc{Singular} manual contains further examples, e.g.: @itemize @bullet @item Long coefficients @*how they arise in innocent smallexamples @item T1 and T2 @*compute first order deformations and obstructions @item Finite fields @*compute in fields with @tex $q=p^n$ @end tex @ifinfo q=p^n @end ifinfo elements @item Ext @*compute Ext groups, derived from the Hom functor @item Polar curves @*compute local and global polar curves @item Depth @*various ways to compute the depth of a module @item Cyclic roots @*create and compute with this standard benchmark smallexample @item Invariants of finite group @*compute invariant rings for finite group @item Puiseux pairs @*compute Puiseux development and invariants with the Hamburger-Noether method @item Primary decomposition @*compute primar decomposition of an ideal @item Normalization @*compute the normalization of a ring @item Classification @*determine type and normal form of a hypersurface singularity after Arnold @item Fast lexicographical GB @*FGLM and Hilbert-driven Groebner @item Parallelization with MPtcp links @*use MP for distributed and parallel computation @end itemize In this list the names of the items are the names of the examples in the online help system. So by the command @code{help T1 and T2} the example about the computation of first order deformations and obstructions is displayed. @end ifclear texi2html-1.82/test/singular_manual/Makefile.am0000644000175000017500000000175511264347126023442 0ustar flichtenheldflichtenheldEXTRA_DIST = \ COPYING.texi math.tex start.tex \ examples.tex NEWS.texi \ exmpl.tex pdata.tex ti_ip.tex \ general.tex platform.tex tricks.tex \ info.texi README_distribution.texi TROUBLESHOOTING_win.texi \ INSTALL_mac.texi README_download.texi tutor.tex \ INSTALL_osx.texi README_ftp.texi tutor-titlepage.tex \ INSTALL_rpm.texi README_src.texi types.tex \ INSTALL_unix.texi reference.tex uname.texi \ INSTALL_win.texi register.texi usercard.tex \ lib2doc.texi singcard.tex version.texi \ manual-titlepage.tex singular.texi \ d2t_singular t2h_singular.init tests.txt # res DISTCLEANFILES = l2h_tmp_dir.init tests.log tests.out distclean-local: rm -rf out diffs texi2html-1.82/test/singular_manual/ti_ip.tex0000644000175000017500000004657211264347126023242 0ustar flichtenheldflichtenheld@menu * Toric ideals:: Definition and computation. * Integer programming:: An algorithm using toric ideals. * Relevant References:: @end menu @node Toric ideals, Integer programming, , Toric ideals and integer programming @subsection Toric ideals @cindex toric ideals @comment This file was generated by doc2tex.pl from ti_ip.doc @comment DO NOT EDIT DIRECTLY, BUT EDIT ti_ip.doc INSTEAD @cindex ideal, toric @tex Let $A$ denote an $m\times n$ matrix with integral coefficients. For $u \in Z\!\!\! Z^n$, we define $u^+,u^-$ to be the uniquely determined vectors with nonnegative coefficients and disjoint support (i.e., $u_i^+=0$ or $u_i^-=0$ for each component $i$) such that $u=u^+-u^-$. For $u\geq 0$ component-wise, let $x^u$ denote the monomial $x_1^{u_1}\cdot\ldots\cdot x_n^{u_n}\in K[x_1,\ldots,x_n]$. The ideal $$ I_A:=\ \subset K[x_1,\ldots,x_n] $$ is called a \bf toric ideal. \rm The first problem in computing toric ideals is to find a finite generating set: Let $v_1,\ldots,v_r$ be a lattice basis of $\ker(A)\cap Z\!\!\! Z^n$ (i.e, a basis of the $Z\!\!\! Z$-module). Then $$ I_A:=I:(x_1\cdot\ldots\cdot x_n)^\infty $$ where $$ I= $$ @end tex @ifinfo Let A denote an mxn matrix with integral coefficients. For u in Z^n, we define u+,u- to be the uniquely determined vectors with nonnegative coefficients and disjoint support (i.e., u+[i]=0 or u-[i]=0 for each component i) such that u = u+ - u-. For u>=0 component-wise, let x^u denote the monomial x(1)^u[1] *@dots{}* x(n)^u[n] in K[x(1),@dots{},x(n)]. The ideal in K[x(1),@dots{},x(n)] @* @display I(A):= < x^u+ - x^u- | u in ker(A), u in Z^n > @end display is called a @strong{toric ideal}. The first problem in computing toric ideals is to find a finite generating set: Let v(1),@dots{},v(r) be a lattice basis of ker(A) as a subset of Z^n (i.e., a basis of the Z-module). Then @* @display I(A):= sat( I, x[1] *@dots{}* x[n]) @end display where @* @display I= < x^v(i)+ - x^v(i)- | i=1,@dots{},r >. @end display @end ifinfo The required lattice basis can be computed using the LLL-algorithm (@pxref{[Coh93]}). For the computation of the saturation, there are various possibilities described in the @tex section Algorithms. @end tex @ifinfo menu entry Algorithms. @end ifinfo @menu * Algorithms:: Various algorithms for computing toric ideals. * Buchberger algorithm:: Specializing it for toric ideals. @end menu @node Algorithms, Buchberger algorithm, , Toric ideals @subsection Algorithms The following algorithms are implemented in @ref{toric_lib}. @menu * Conti and Traverso:: * Pottier:: * Hosten and Sturmfels:: * Di Biase and Urbanke:: * Bigatti and La Scala and Robbiano:: @end menu @node Conti and Traverso, Pottier, , Algorithms @subsubsection The algorithm of Conti and Traverso @cindex Conti-Traverso algorithm @cindex algorithm of Conti and Traverso The algorithm of Conti and Traverso (@pxref{[CoTr91]}) @tex computes $I_A$ via the extended matrix $B=(I_m|A)$, where $I_m$ is the $m\times m$ unity matrix. A lattice basis of $B$ is given by the set of vectors $(a^j,-e_j)\in Z\!\!\! Z^{m+n}$, where $a^j$ is the $j$-th row of $A$ and $e_j$ the $j$-th coordinate vector. We look at the ideal in $K[y_1,\ldots,y_m,x_1,\ldots,x_n]$ corresponding to these vectors, namely $$ I_1=.$$ We introduce a further variable $t$ and adjoin the binomial $t\cdot y_1\cdot\ldots\cdot y_m -1$ to the generating set of $I_1$, obtaining an ideal $I_2$ in the polynomial ring $K[t, y_1,\ldots,y_m,x_1,\ldots,x_n]$. $I_2$ is saturated w.r.t. all variables because all variables are invertible modulo $I_2$. Now $I_A$ can be computed from $I_2$ by eliminating the variables $t,y_1,\ldots,y_m$. @end tex @ifinfo computes I(A) via the extended matrix B= ( I | A ), where I is the mxm unity matrix. A lattice basis of B is given by the set of vectors (a^j,-e_j) in Z^(m+n), where a^j is the j-th row of A and e_j the j-th coordinate vector. We look at the ideal in K[y(1),@dots{},y(m),x(1),@dots{},x(n)] corresponding to these vectors, namely @* @display I1= < y^(a_j)+ - x(j) * y^(a_j)- | j=1,@dots{},n >. @end display We introduce a further variable t and adjoin the binomial t * y(1) *@dots{}* y(m) -1 to the generating set of I1, obtaining an ideal I2 in the polynomial ring K[t,y(1),@dots{},y(m),x(1),@dots{},x(n)]. I2 is saturated w.r.t.@: all variables because all variables are invertible modulo I2. Now I(A) can be computed from I2 by eliminating the variables t,y(1),@dots{},y(m). @end ifinfo Because of the big number of auxiliary variables needed to compute a toric ideal, this algorithm is rather slow in practice. However, it has a special importance in the application to integer programming (@pxref{Integer programming}). @node Pottier, Hosten and Sturmfels, Conti and Traverso, Algorithms @subsubsection The algorithm of Pottier @cindex Pottier algorithm @cindex algorithm of Pottier The algorithm of Pottier (@pxref{[Pot94]}) starts by computing a lattice @tex basis $v_1,\ldots,v_r$ for the integer kernel of $A$ using the LLL-algorithm. The ideal corresponding to the lattice basis vectors $$ I_1= $$ is saturated -- as in the algorithm of Conti and Traverso -- by inversion of all variables: One adds an auxiliary variable $t$ and the generator $t\cdot x_1\cdot\ldots\cdot x_n -1$ to obtain an ideal $I_2$ in $K[t,x_1,\ldots,x_n]$ from which one computes $I_A$ by elimination of $t$. @end tex @ifinfo basis v(1),@dots{},v(r) for the integer kernel of A using the LLL-algorithm. The ideal corresponding to the lattice basis vectors @* @display I1= < x^v(i)+ - x^v(i)- | i=1,@dots{},r > @end display is saturated -- as in the algorithm of Conti and Traverso -- by inversion of all variables: One adds an auxiliary variable t and the generator t * x(1) *@dots{}* x(n) -1 to obtain an ideal I2 in K[t,x(1),@dots{},x(n)] from which one computes I(A) by elimination of t. @end ifinfo @node Hosten and Sturmfels, Di Biase and Urbanke, Pottier, Algorithms @subsubsection The algorithm of Hosten and Sturmfels @cindex Hosten-Sturmfels algorithm @cindex algorithm of Hosten and Sturmfels The algorithm of Hosten and Sturmfels (@pxref{[HoSt95]}) allows to @tex compute $I_A$ without any auxiliary variables, provided that $A$ contains a vector $w$ with positive coefficients in its row space. This is a real restriction, i.e., the algorithm will not necessarily work in the general case. A lattice basis $v_1,\ldots,v_r$ is again computed via the LLL-algorithm. The saturation step is performed in the following way: First note that $w$ induces a positive grading w.r.t. which the ideal $$ I= $$ corresponding to our lattice basis is homogeneous. We use the following lemma: Let $I$ be a homogeneous ideal w.r.t. the weighted reverse lexicographical ordering with weight vector $w$ and variable order $x_1 > x_2 > \ldots > x_n$. Let $G$ denote a Groebner basis of $I$ w.r.t. to this ordering. Then a Groebner basis of $(I:x_n^\infty)$ is obtained by dividing each element of $G$ by the highest possible power of $x_n$. From this fact, we can successively compute $$ I_A= I:(x_1\cdot\ldots\cdot x_n)^\infty =(((I:x_1^\infty):x_2^\infty):\ldots :x_n^\infty); $$ in the $i$-th step we take $x_i$ as the cheapest variable and apply the lemma with $x_i$ instead of $x_n$. This procedure involves $n$ Groebner basis computations. Actually, this number can be reduced to at most $n/2$ @end tex @ifinfo compute I(A) without any auxiliary variables, provided that A contains a vector w with positive coefficients in its row space. This is a real restriction, i.e., the algorithm will not necessarily work in the general case. A lattice basis v(1),@dots{},v(r) is again computed via the LLL-algorithm. The saturation step is performed in the following way: First note that w induces a positive grading w.r.t.@: which the ideal @* @display I= < x^v(i)+ - x^v(i)- | i=1,@dots{},r > @end display corresponding to our lattice basis is homogeneous. We use the following lemma: Let I be a homogeneous ideal w.r.t.@: the weighted reverse lexicographical ordering with weight vector w and variable order x(1) > x(2) > @dots{} > x(n). Let G denote a Groebner basis of I w.r.t.@: to this ordering. Then a Groebner basis of sat(I,x(n)) is obtained by dividing each element of G by the highest possible power of x(n). From this fact, we can successively compute @* @display I(A)= sat(I, x(1) *@dots{}* x(n)) @ @ @ @ = sat(@dots{}(sat(sat(I,x(1)), x(2)), @dots{}, x(n))); @end display in the i-th step we take x(i) as the cheapest variable and apply the lemma with x(i) instead of x(n). This procedure involves n Groebner basis computations. Actually, this number can be reduced to at most n/2 @end ifinfo (@pxref{[HoSh98]}), and the single computations -- except from the first one -- show to be easy and fast in practice. @node Di Biase and Urbanke, Bigatti and La Scala and Robbiano, Hosten and Sturmfels, Algorithms @subsubsection The algorithm of Di Biase and Urbanke @cindex Di Biase-Urbanke algorithm @cindex algorithm of Di Biase and Urbanke Like the algorithm of Hosten and Sturmfels, the algorithm of Di Biase and Urbanke (@pxref{[DBUr95]}) performs up @tex to $n/2$ Groebner basis computations. It needs no auxiliary variables, but a supplementary precondition; namely, the existence of a vector without zero components in the kernel of $A$. The main idea comes from the following observation: Let $B$ be an integer matrix, $u_1,\ldots,u_r$ a lattice basis of the integer kernel of $B$. Assume that all components of $u_1$ are positive. Then $$ I_B=, $$ i.e., the ideal on the right is already saturated w.r.t. all variables. The algorithm starts by finding a lattice basis $v_1,\ldots,v_r$ of the kernel of $A$ such that $v_1$ has no zero component. Let $\{i_1,\ldots,i_l\}$ be the set of indices $i$ with $v_{1,i}<0$. Multiplying the components $i_1,\ldots,i_l$ of $v_1,\ldots,v_r$ and the columns $i_1,\ldots,i_l$ of $A$ by $-1$ yields a matrix $B$ and a lattice basis $u_1,\ldots,u_r$ of the kernel of $B$ that fulfill the assumption of the observation above. We are then able to compute a generating set of $I_A$ by applying the following ``variable flip'' successively to $i=i_1,\ldots,i_l$: Let $>$ be an elimination ordering for $x_i$. Let $A_i$ be the matrix obtained by multiplying the $i$-th column of $A$ with $-1$. Let $$\{x_i^{r_j} x^{a_j} - x^{b_j} | j\in J \}$$ be a Groebner basis of $I_{A_i}$ w.r.t. $>$ (where $x_i$ is neither involved in $x^{a_j}$ nor in $x^{b_j}$). Then $$\{x^{a_j} - x_i^{r_j} x^{b_j} | j\in J \}$$ is a generating set for $I_A$. @end tex @ifinfo to n/2 Groebner basis computations. It needs no auxiliary variables, but a supplementary precondition; namely, the existence of a vector without zero components in the kernel of A. The main idea comes from the following observation: Let B be an integer matrix, u(1),@dots{},u(r) a lattice basis of the integer kernel of B. Assume that all components of u(1) are positive. Then @* @display I(B)= < x^u(i)+ - x^u(i)- | i=1,@dots{},r >, @end display i.e., the ideal on the right is already saturated w.r.t.@: all variables. The algorithm starts by finding a lattice basis v(1),@dots{},v(r) of the kernel of A such that v(1) has no zero component. Let @{ i1,@dots{},il @} be the set of indices i with v(1)_i <0. Multiplying the components i1,@dots{},il of v(1),@dots{},v(r) and the columns i1,@dots{},il of A by -1 yields a matrix B and a lattice basis u(1),@dots{},u(r) of the kernel of B that fulfill the assumption of the observation above. We are then able to compute a generating set of I(A) by applying the following ``variable flip'' successively to i=i1,@dots{},il: Let > be an elimination ordering for x(i). Let A(i) be the matrix obtained by multiplying the i-th column of A with -1. Let @* @display @{ x(i)^r(j) * x^a(j) - x^b(j) | j in J @} @end display be a Groebner basis of I(A(i)) w.r.t.@: > (where x(i) is neither involved in x^a(j) nor in x^b(j)). Then @* @display @{ x^a(j) - x(i)^r(j) * x^b(j) | j in J @} @end display is a generating set for I(A). @end ifinfo @node Bigatti and La Scala and Robbiano, , Di Biase and Urbanke, Algorithms @subsubsection The algorithm of Bigatti, La Scala and Robbiano @cindex Bigatti-La Scala-Robbiano algorithm @cindex algorithm of Bigatti, La Scala and Robbiano The algorithm of Bigatti, La Scala and Robbiano (@pxref{[BLR98]}) combines the ideas of the algorithms of Pottier and of Hosten and Sturmfels. The computations are performed on a graded ideal with one auxiliary @tex variable $u$ and one supplementary generator $x_1\cdot\ldots\cdot x_n - u$ (instead of the generator $t\cdot x_1\cdot\ldots\cdot x_n -1$ in the algorithm of Pottier). The algorithm uses a quite unusual technique to get rid of the variable $u$ again. @end tex @ifinfo variable u and one supplementary generator x(1) *@dots{}* x(n) -u (instead of the generator t * x(1) *@dots{}* x(n) -1 in the algorithm of Pottier). The algorithm uses a quite unusual technique to get rid of the variable u again. @end ifinfo There is another algorithm of the authors which tries to parallelize the computations (but which is not implemented in this library). @node Buchberger algorithm, , Algorithms, Toric ideals @subsection The Buchberger algorithm for toric ideals @cindex Buchberger algorithm for toric ideals Toric ideals have a very special structure that allows us to improve the Buchberger algorithm in many respects: They are prime ideals and generated by binomials. Pottier used this fact to describe all operations of the Buchberger algorithm on the ideal generators in terms of vector additions and subtractions. Some other strategies like multiple reduction (@pxref{[CoTr91]}) or the use of bit vectors to represent the support of a monomial (@pxref{[Big97]}) may be applied to more general ideals, but show to be especially useful in the toric case. @node Integer programming, Relevant References, Toric ideals, Toric ideals and integer programming @subsection Integer programming @cindex integer programming @tex Let $A$ be an $m\times n$ matrix with integral coefficients, $b\in Z\!\!\! Z^m$ and $c\in Z\!\!\! Z^n$. The problem $$ \min\{c^T x | x\in Z\!\!\! Z^n, Ax=b, x\geq 0\hbox{ component-wise}\} $$ is called an instance of the \bf integer programming problem \rm or \bf IP problem. \rm The IP problem is very hard; namely, it is NP-complete. For the following discussion let $c\geq 0$ (component-wise). We consider $c$ as a weight vector; because of its non-negativity, $c$ can be refined into a monomial ordering $>_c$. It turns out that we can solve such an IP instance with the help of toric ideals: First we assume that an initial solution $v$ (i.e., $v\in Z\!\!\! Z^n, v\geq 0, Av=b$) is already known. We obtain the optimal solution $v_0$ (i.e., with $c^T v_0$ minimal) by the following procedure: @end tex @c \begin{itemize} @c \item (1) Compute the toric ideal $I_A$ using one of the algorithms in the @c previous section. @c \item (2) Compute the reduced Groebner basis $G_c$ of $I_A$ w.r.t. @c $>_c$. @c \item (3) Reduce $x^v$ modulo $G_c$ using the Hironaka division algorithm. @c If the result of this reduction is $x^{v_0}$, then $v_0$ is an @c optimal solution of the given instance. @c \end{itemize} @ifinfo Let A be an mxn matrix with integral coefficients, b in Z^m and c in Z^n. The problem @* @display min @{ c*x | x in Z^n, A*x=b, x>=0 component-wise @} @end display is called an instance of the @strong{integer programming problem} or @strong{IP problem}. The IP problem is very hard; namely, it is NP-complete. For the following discussion let c>=0 (component-wise). We consider c as a weight vector; because of its non-negativity, c can be refined into a monomial ordering >_c. It turns out that we can solve such an IP instance with the help of toric ideals: First we assume that an initial solution v (i.e., v in Z^n, v>=0, A*v=b) is already known. We obtain the optimal solution v(opt) (i.e., with c*v(opt) minimal) by the following procedure: @end ifinfo @itemize @bullet @item (1) Compute the toric ideal I(A) using one of the algorithms in the previous section. @item (2) Compute the reduced Groebner basis G(c) of I(A) w.r.t.@: @ifinfo @math{>_c} @end ifinfo @tex $>_c$ @end tex . @item (3) Reduce @ifinfo @math{x^v} @end ifinfo @tex $x^v$ @end tex modulo G(c) using the Hironaka division algorithm. If the result of this reduction is @ifinfo @math{x^(v_0)} @end ifinfo @tex $x^(v_0)$ @end tex , then @ifinfo @math{v_0} @end ifinfo @tex $v_0$ @end tex is an optimal solution of the given instance. @end itemize If no initial solution is known, we are nevertheless able to solve the problem with similar techniques. For this purpose we replace our instance by an extended instance with the matrix used in the Conti-Traverso algorithm. Indeed, the Conti-Traverso algorithm offers the possibility to verify solvability of a given instance and to find an initial solution in the case of existence (but none of the other algorithms does!). Details can be found in [CoTr91] and [The99]. An implementation of the above algorithm and some examples can be found in @ref{intprog_lib}. Classical methods for solving IP instances like Branch-and-Bound methods seem to be faster in general than the methods using toric ideals. But the latter have one great advantage: If one wants to solve various instances that differ only by the vector @ifinfo @math{b} @end ifinfo @tex $b$ @end tex , one has to perform steps (1) and (2) above only once. As the running time of step (3) is very short, solving all the instances is not much harder than solving one single instance. For a detailed discussion see [The99]. @node Relevant References, , Integer programming, Toric ideals and integer programming @subsection Relevant References @itemize @bullet @item [Big97] Bigatti, A.M.: @anchor{[Big97]} Computation of Hilbert-Poincare series. Journal of Pure and Applied Algebra (1997) 199, 237-253 @item [BLR98] Bigatti, A.M.; La Scala, R.; Robbiano, L.: @anchor{[BLR98]} Computing toric ideals. Journal of Symbolic Computation (to appear) @item [Coh93] Cohen, H.: @anchor{[Coh93]} A Course in Computational Algebraic Number Theory. Springer (1997) @item [CoTr91] Conti, P.; Traverso, C.: @anchor{[CoTr91]} Buchberger algorithm and integer programming. Proceedings AAECC-9 (new Orleans), Springer LNCS (1991) 539, 130-139 @item [DBUr95] Di Biase, F.; Urbanke, R.: @anchor{[DBUr95]} An algorithm to calculate the kernel of certain polynomial ring homomorphisms. Experimental Mathematics (1995) 4, 227-234 @item [HoSh98] Hosten, S.; Shapiro, J.: @anchor{[HoSh98]} Primary decomposition of lattice basis ideals. (to appear) @item [HoSt95] Hosten, S.; Sturmfels, B.: @anchor{[HoSt95]} GRIN: An implementation of Groebner bases for integer programming. in Balas, E.; Clausen, J. (editors): Integer Programming and Combinatorial Optimization. Springer LNCS (1995) 920, 267-276 @item [Pot94] Pottier, L.: @anchor{[Pot94]} Groebner bases of toric ideals. Rapport de recherche 2224 (1997), INRIA Sophia Antipolis @item [Stu96] Sturmfels, B.: @anchor{[Stu96]} Groebner Bases and Convex Polytopes. University Lecture Series, Volume 8 (1996), American Mathematical Society @item [The99] Theis, C.: @anchor{[The99]} Der Buchberger-Algorithmus fuer torische Ideale und seine Anwendung in der ganzzahligen Optimierung. Diplomarbeit, Universitaet des Saarlandes (1999), Saarbruecken (Germany) @end itemize texi2html-1.82/test/tests.sh0000755000175000017500000000063611264347121017716 0ustar flichtenheldflichtenheld#! /bin/sh if [ z"$srcdir" = 'z' ]; then srcdir=. fi arg= if [ z"$1" = 'z-clean' ]; then arg='-clean' shift elif [ z"$1" = 'z-copy' ]; then arg='-copy' shift fi failed=0 while [ z"$1" != 'z' ]; do dir=$1 shift [ -d "$dir" ] || mkdir $dir (export srcdir_test=$dir; cd "$dir" && ../"$srcdir"/run_test.sh $arg) result=$? echo "$dir: $result" [ $result != 0 ] && failed=1 done exit $failed texi2html-1.82/test/coverage/0000755000175000017500000000000011264347123020005 5ustar flichtenheldflichtenheldtexi2html-1.82/test/coverage/float.texi0000644000175000017500000001303711264347123022011 0ustar flichtenheldflichtenheld\input texinfo.tex @c -*-texinfo-*- @setfilename float.info @node Top @top Test floats A list of floats at the begining. @listoffloats Text After the listoffloats. @menu * chapter:: * Unnumbered:: * Chapter with unnumbsubsec:: * list of floats:: @end menu @float Text, text with a lot of features An example of float @enddots{} @c makeinfo --docbook segfaults @ifset texi2html An example. @example example @end example A multitable. @multitable {truc} {bidule} @item truc @tab bidule @item truc @tab bidule @end multitable @end ifset An index entry @cindex float example A table. @table @emph @item truc line @end table An itemize. @itemize @minus @item truc line @end itemize A ref. @xref{Top,xref Text with features}. A footnote. @footnote{footnote Text with features}. @TeX{} and @emph{@b{t@'e@^{@dotless{i}}}@url{an_url}} @sc{and} @verb{!it is @verb!} @ a wo@-rd @!@@ @AE{}. @caption{ An example of float caption@enddots{} An example. @example example @end example @anchor{Anchor in caption} A table. @table @emph @item truc line @end table A multitable. @multitable {truc} {bidule} @item truc @tab bidule @item truc @tab bidule @end multitable An index entry @cindex float example in caption An itemize. @itemize @minus @item truc line @end itemize A ref. @xref{Top,xref Text with features caption}. A footnote. @footnote{footnote Text with features caption}. @TeX{} and @emph{@b{t@'e@^{@dotless{i}}}@url{an_url}} @sc{and} @verb{!it is @verb!} @ a wo@-rd @!@@ @AE{}. } @shortcaption{@TeX{} and @emph{@b{t@'e@^{@dotless{i}}}@url{an_url}} @sc{and} @verb{!it is @verb!} @ a wo@-rd @!@@ @AE{}.} @end float @float Text No label but caption and shortcaption. @caption{No label} @shortcaption{No label} @end float @float ,label but no type No type but caption and shortcaption. @caption{No type} @shortcaption{No type} @end float @float ,label but no type and no caption No type but label and no caption nor shortcaption. @end float @float No label, no type, no caption no shortcaption. @end float @float No label, no type, but caption and shortcaption. @caption{No label, no type, but caption and shortcaption.} @shortcaption{No label, no type, but caption and shortcaption.} @end float @float ,label but no type 2 Second float with no type. @caption{No type 2} @shortcaption{No type 2} @end float @float Warning, warning in top A warning @caption{A warning} @shortcaption{A warning} @end float @node chapter @chapter A chapter @float Text, text in chapter Text in chapter @caption{Text in chapter} @end float @float Text, float with a lot of features and no shortcaption Float text of a float with a lot of features. @caption{ An example of float caption@enddots{} 2 An example 2. @example example 2 @end example A table 2. @table @emph @item truc 2 line 2 @end table A multitable 2. @multitable {truc} {bidule} @item truc 2 @tab bidule @item truc 2 @tab bidule @end multitable An index entry 2 @cindex float example in caption 2 An itemize 2. @itemize @minus @item truc 2 line @end itemize @anchor{Anchor in caption 2} A ref 2. @xref{Top,xref Text with features caption}. A footnote 2. @footnote{footnote Text with features caption 2}. @TeX{} and @emph{@b{t@'e@^{@dotless{i}}}@url{an_url}} @sc{and} @verb{!it is @verb!} @ a wo@-rd @!@@ @AE{}. } @end float @float th@'eor@`eme, theoreme A th@'eor@`eme @caption{A th@'eor@`eme} @end float @float ,label but no type in chapter float with no type. @caption{No type in chapter} @shortcaption{No type in chapter} @end float @float Warning, warning in chapter A warning @caption{A warning in chapter} @shortcaption{A warning in chapter} @end float @menu * section:: @end menu @node section @section A section @float Text, text in section A text in float no caption a label a type. @end float @node Unnumbered @unnumbered Unnumbered @menu * Section within unnumbered:: @end menu @float Text, unnumbered float unnum @shortcaption{unnumbered float} @caption{unnumbered float} @end float @float ,label but no type in unnumbered float with no type. @caption{No type in unnumbered} @shortcaption{No type in unnumbered} @end float @node Section within unnumbered @section Section within unnumbered @float Text, Section within unnumbered float Section within unnumbered @shortcaption{Section within unnumbered} @caption{Section within unnumbered} @end float @node Chapter with unnumbsubsec @chapter Chapter with unnumbsubsec @menu * unnumbered sec:: @end menu @float Text, Chapter with subsec float Chap @shortcaption{Chapter with subsec} @caption{Chapter with subsec} @end float @node unnumbered sec @unnumberedsec unnumbered sec @float Text, unnumbered sec float Chap @shortcaption{unnumbered sec float} @caption{unnumbered sec float} @end float @float ,label but no type in unnumbered subsec in chapter float with no type. @caption{No type in unnumbered subsec in chapter} @shortcaption{No type in unnumbered subsec in chapter} @end float @node list of floats @unnumbered list of floats See @ref{text in section}. And (@pxref{text in chapter}). @xref{text with a lot of features}. And now a ref (without manual or printed manual) @ref{text with a lot of features, cross ref, title}. And now a ref (with manual without printed manual) @ref{text with a lot of features, cross ref, title, manual}. And now a ref (without manual with a printed manual) @ref{text with a lot of features, cross ref, title,, printed manual title}. A ref to float without type @ref{label but no type}. @listoffloats Text @listoffloats th@'eor@`eme @printindex cp @bye texi2html-1.82/test/coverage/f--ile.jpg0000644000175000017500000000000011264347123021546 0ustar flichtenheldflichtenheldtexi2html-1.82/test/coverage/Makefile.in0000644000175000017500000002070011264347123022051 0ustar flichtenheldflichtenheld# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = test/coverage DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DATE = @PACKAGE_DATE@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ REQUIRE_DATA_DUMPER = @REQUIRE_DATA_DUMPER@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_DATA_DUMPER = @USE_DATA_DUMPER@ USE_UNICODE = @USE_UNICODE@ USE_UNIDECODE = @USE_UNIDECODE@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ am__leading_dot = @am__leading_dot@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = formatting.texi comments.texi pass0_macros.texi float.texi \ imbrications.texi \ f--ile.e--xt f--ile.jpg simplest.texi tests.txt res DISTCLEANFILES = l2h_tmp_dir.init tests.log tests.out all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/coverage/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu test/coverage/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-exec-am: install-html: install-html-am install-info: install-info-am install-man: install-pdf: install-pdf-am install-ps: install-ps-am installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic dist-hook \ distclean distclean-generic distclean-local distdir dvi dvi-am \ html html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am distclean-local: rm -rf out diffs dist-hook: rm -rf `find $(distdir)/res -name CVS` # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: texi2html-1.82/test/coverage/res/0000755000175000017500000000000011264347123020576 5ustar flichtenheldflichtenheldtexi2html-1.82/test/coverage/res/texi_formatting/0000755000175000017500000000000011264347123024001 5ustar flichtenheldflichtenheldtexi2html-1.82/test/coverage/res/texi_formatting/formatting.20000644000175000017500000000724011264347123026241 0ustar flichtenheldflichtenheld** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) texi2html-1.82/test/coverage/res/texi_formatting/formatting.passfirst0000644000175000017500000023270211264347123030121 0ustar flichtenheldflichtenheldformatting.texi(,2) @setfilename formatting.info formatting.texi(,3) @node Top formatting.texi(,4) @top Top section formatting.texi(,5) formatting.texi(,6) @menu formatting.texi(,7) * chapter:: chapter formatting.texi(,8) formatting.texi(,9) Menu comment formatting.texi(,10) formatting.texi(,11) * description:chapter2. Chapter 2 formatting.texi(,12) @end menu formatting.texi(,13) formatting.texi(,15) formatting.texi(,20) formatting.texi(,33) formatting.texi(,34) Insertcopying in normal text formatting.texi(,35) @insertcopying formatting.texi(,36) formatting.texi(,37) Normal text formatting.texi(mymacro,38) formatting.texi(mymacro,38) < formatting.texi(mymacro,38) > formatting.texi(mymacro,38) " formatting.texi(mymacro,38) & formatting.texi(mymacro,38) ' formatting.texi(mymacro,38) ` formatting.texi(mymacro,38) formatting.texi(mymacro,38) ``simple-double--three---four----''@* formatting.texi(mymacro,38) code: @code{``simple-double--three---four----''} @* formatting.texi(mymacro,38) asis: @asis{``simple-double--three---four----''} @* formatting.texi(mymacro,38) strong: @strong{``simple-double--three---four----''} @* formatting.texi(mymacro,38) kbd: @kbd{``simple-double--three---four----''} @* formatting.texi(mymacro,38) formatting.texi(mymacro,38) `@w{}`simple-double-@w{}-three---four----'@w{}'@* formatting.texi(mymacro,38) formatting.texi(mymacro,38) @cindex --option formatting.texi(mymacro,38) @cindex `` formatting.texi(mymacro,38) @findex `` formatting.texi(mymacro,38) @findex --foption formatting.texi(mymacro,38) formatting.texi(mymacro,38) @@"u @"u formatting.texi(mymacro,38) @@"@{U@} @"{U} formatting.texi(mymacro,38) @@~n @~n formatting.texi(mymacro,38) @@^a @^a formatting.texi(mymacro,38) @@'e @'e formatting.texi(mymacro,38) @@=o @=o formatting.texi(mymacro,38) @@`i @`i formatting.texi(mymacro,38) @@'@{e@} @'{e} formatting.texi(mymacro,38) @@'@{@@dotless@{i@}@} @'{@dotless{i}} formatting.texi(mymacro,38) @@dotless@{i@} @dotless{i} formatting.texi(mymacro,38) @@dotless@{j@} @dotless{j} formatting.texi(mymacro,38) @@`@{@@=E@} @`{@=E} formatting.texi(mymacro,38) @@l@{@} @l{} formatting.texi(mymacro,38) @@,@{@@'C@} @,{@'C} formatting.texi(mymacro,38) @@,c @,c formatting.texi(mymacro,38) @@,c@@"u @,c@"u @* formatting.texi(mymacro,38) formatting.texi(mymacro,38) @@* @* formatting.texi(mymacro,38) @@ followed by a space formatting.texi(mymacro,38) @ formatting.texi(mymacro,38) @@ followed by a tab formatting.texi(mymacro,38) @ formatting.texi(mymacro,38) @@ followed by a new line formatting.texi(mymacro,38) @ formatting.texi(mymacro,38) @code{@@-} @- formatting.texi(mymacro,38) @code{@@|} @| formatting.texi(mymacro,38) @code{@@:} @: formatting.texi(mymacro,38) @code{@@!} @! formatting.texi(mymacro,38) @code{@@?} @? formatting.texi(mymacro,38) @code{@@.} @. formatting.texi(mymacro,38) @code{@@@@} @@ formatting.texi(mymacro,38) @code{@@@}} @} formatting.texi(mymacro,38) @code{@@@{} @{ formatting.texi(mymacro,38) @code{@@/} @/ formatting.texi(mymacro,38) formatting.texi(mymacro,38) foo vs.@: bar. formatting.texi(mymacro,38) colon :@:And something else. formatting.texi(mymacro,38) semi colon ;@:. formatting.texi(mymacro,38) And ? ?@:. formatting.texi(mymacro,38) Now ! !@:@@ formatting.texi(mymacro,38) but , ,@: formatting.texi(mymacro,38) formatting.texi(mymacro,38) @@TeX @TeX{} formatting.texi(mymacro,38) @@LaTeX @LaTeX{} formatting.texi(mymacro,38) @@bullet @bullet{} formatting.texi(mymacro,38) @@copyright @copyright{} formatting.texi(mymacro,38) @@dots @dots{} formatting.texi(mymacro,38) @@enddots @enddots{} formatting.texi(mymacro,38) @@equiv @equiv{} formatting.texi(mymacro,38) @@error @error{} formatting.texi(mymacro,38) @@expansion @expansion{} formatting.texi(mymacro,38) @@minus @minus{} formatting.texi(mymacro,38) @@point @point{} formatting.texi(mymacro,38) @@print @print{} formatting.texi(mymacro,38) @@result @result{} formatting.texi(mymacro,38) @@today @today{} formatting.texi(mymacro,38) @@aa @aa{} formatting.texi(mymacro,38) @@AA @AA{} formatting.texi(mymacro,38) @@ae @ae{} formatting.texi(mymacro,38) @@oe @oe{} formatting.texi(mymacro,38) @@AE @AE{} formatting.texi(mymacro,38) @@OE @OE{} formatting.texi(mymacro,38) @@o @o{} formatting.texi(mymacro,38) @@O @O{} formatting.texi(mymacro,38) @@ss @ss{} formatting.texi(mymacro,38) @@l @l{} formatting.texi(mymacro,38) @@L @L{} formatting.texi(mymacro,38) @@exclamdown @exclamdown{} formatting.texi(mymacro,38) @@questiondown @questiondown{} formatting.texi(mymacro,38) @@pounds @pounds{} formatting.texi(mymacro,38) @@registeredsymbol @registeredsymbol{} formatting.texi(mymacro,38) @@ordf @ordf{} formatting.texi(mymacro,38) @@ordm @ordm{} formatting.texi(mymacro,38) @@comma @comma{} formatting.texi(mymacro,38) @@quotedblleft @quotedblleft{} formatting.texi(mymacro,38) @@quotedblright @quotedblright{} formatting.texi(mymacro,38) @@quoteleft @quoteleft{} formatting.texi(mymacro,38) @@quoteright @quoteright{} formatting.texi(mymacro,38) @@quotedblbase @quotedblbase{} formatting.texi(mymacro,38) @@quotesinglbase @quotesinglbase{} formatting.texi(mymacro,38) @@guillemetleft @guillemetleft{} formatting.texi(mymacro,38) @@guillemetright @guillemetright{} formatting.texi(mymacro,38) @@guillemotleft @guillemotleft{} formatting.texi(mymacro,38) @@guillemotright @guillemotright{} formatting.texi(mymacro,38) @@guilsinglleft @guilsinglleft{} formatting.texi(mymacro,38) @@guilsinglright @guilsinglright{} formatting.texi(mymacro,38) @@textdegree @textdegree{} formatting.texi(mymacro,38) @@euro @euro{} formatting.texi(mymacro,38) @@arrow @arrow{} formatting.texi(mymacro,38) @@leq @leq{} formatting.texi(mymacro,38) @@geq @geq{} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@acronym@{--a,an accronym@}} @acronym{--a,an accronym} formatting.texi(mymacro,38) @code{@@acronym@{--a@}} @acronym{--a} formatting.texi(mymacro,38) @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude Autonome @}} @abbr{@'E--. @comma{}A., @'Etude Autonome } formatting.texi(mymacro,38) @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} formatting.texi(mymacro,38) @code{@@asis@{--a@}} @asis{--a} formatting.texi(mymacro,38) @code{@@b@{--a@}} @b{--a} formatting.texi(mymacro,38) @code{@@cite@{--a@}} @cite{--a} formatting.texi(mymacro,38) @code{@@code@{--a@}} @code{--a} formatting.texi(mymacro,38) @code{@@command@{--a@}} @command{--a} formatting.texi(mymacro,38) @code{@@ctrl@{--a@}} @ctrl{--a} formatting.texi(mymacro,38) @code{@@dfn@{--a@}} @dfn{--a} formatting.texi(mymacro,38) @code{@@dmn@{--a@}} @dmn{--a} formatting.texi(mymacro,38) @code{@@email@{--a,--b@}} @email{--a,--b} formatting.texi(mymacro,38) @code{@@email@{,--b@}} @email{,--b} formatting.texi(mymacro,38) @code{@@email@{--a@}} @email{--a} formatting.texi(mymacro,38) @code{@@emph@{--a@}} @emph{--a} formatting.texi(mymacro,38) @code{@@env@{--a@}} @env{--a} formatting.texi(mymacro,38) @code{@@file@{--a@}} @file{--a} formatting.texi(mymacro,38) @code{@@i@{--a@}} @i{--a} formatting.texi(mymacro,38) @code{@@kbd@{--a@}} @kbd{--a} formatting.texi(mymacro,38) @code{@@key@{--a@}} @key{--a} formatting.texi(mymacro,38) @code{@@math@{--a @{\frac@{1@}@{2@}@} @@minus@{@}@}} @math{--a {\frac{1}{2}} @minus{}} formatting.texi(mymacro,38) @code{@@option@{--a@}} @option{--a} formatting.texi(mymacro,38) @code{@@r@{--a@}} @r{--a} formatting.texi(mymacro,38) @code{@@samp@{--a@}} @samp{--a} formatting.texi(mymacro,38) @code{@@sc@{--a@}} @sc{--a} formatting.texi(mymacro,38) @code{@@strong@{--a@}} @strong{--a} formatting.texi(mymacro,38) @code{@@t@{--a@}} @t{--a} formatting.texi(mymacro,38) @code{@@sansserif@{--a@}} @sansserif{--a} formatting.texi(mymacro,38) @code{@@titlefont@{--a@}} @titlefont{--a} formatting.texi(mymacro,38) @code{@@indicateurl@{--a@}} @indicateurl{--a} formatting.texi(mymacro,38) @code{@@uref@{--a,--b@}} @uref{--a,--b} formatting.texi(mymacro,38) @code{@@uref@{--a@}} @uref{--a} formatting.texi(mymacro,38) @code{@@uref@{,--b@}} @uref{,--b} formatting.texi(mymacro,38) @code{@@uref@{--a,--b,--c@}} @uref{--a,--b,--c} formatting.texi(mymacro,38) @code{@@uref@{,--b,--c@}} @uref{,--b,--c} formatting.texi(mymacro,38) @code{@@uref@{--a,,--c@}} @uref{--a,,--c} formatting.texi(mymacro,38) @code{@@uref@{,,--c@}} @uref{,,--c} formatting.texi(mymacro,38) @code{@@url@{--a,--b@}} @url{--a,--b} formatting.texi(mymacro,38) @code{@@url@{--a,@}} @url{--a,} formatting.texi(mymacro,38) @code{@@url@{,--b@}} @url{,--b} formatting.texi(mymacro,38) @code{@@var@{--a@}} @var{--a} formatting.texi(mymacro,38) @code{@@verb@{:--a:@}} @verb{:--a:} formatting.texi(mymacro,38) @code{@@verb@{:a < & @@ % " -- b:@}} @verb{:a < & @ % " -- b:} formatting.texi(mymacro,38) @code{@@w@{@}} @w{} formatting.texi(mymacro,38) @code{@@H@{a@}} @H{a} formatting.texi(mymacro,38) @code{@@H@{--a@}} @H{--a} formatting.texi(mymacro,38) @code{@@dotaccent@{a@}} @dotaccent{a} formatting.texi(mymacro,38) @code{@@dotaccent@{--a@}} @dotaccent{--a} formatting.texi(mymacro,38) @code{@@ringaccent@{a@}} @ringaccent{a} formatting.texi(mymacro,38) @code{@@ringaccent@{--a@}} @ringaccent{--a} formatting.texi(mymacro,38) @code{@@tieaccent@{a@}} @tieaccent{a} formatting.texi(mymacro,38) @code{@@tieaccent@{--a@}} @tieaccent{--a} formatting.texi(mymacro,38) @code{@@u@{a@}} @u{a} formatting.texi(mymacro,38) @code{@@u@{--a@}} @u{--a} formatting.texi(mymacro,38) @code{@@ubaraccent@{a@}} @ubaraccent{a} formatting.texi(mymacro,38) @code{@@ubaraccent@{--a@}} @ubaraccent{--a} formatting.texi(mymacro,38) @code{@@udotaccent@{a@}} @udotaccent{a} formatting.texi(mymacro,38) @code{@@udotaccent@{--a@}} @udotaccent{--a} formatting.texi(mymacro,38) @code{@@v@{a@}} @v{a} formatting.texi(mymacro,38) @code{@@v@{--a@}} @v{--a} formatting.texi(mymacro,38) @code{@@,@{c@}} @,{c} formatting.texi(mymacro,38) @code{@@,@{--c@}} @,{--c} formatting.texi(mymacro,38) @code{@@ogonek@{a@}} @ogonek{a} formatting.texi(mymacro,38) @code{@@ogonek@{--a@}} @ogonek{--a} formatting.texi(mymacro,38) @code{@@footnote@{in footnote@}} @footnote{in footnote} formatting.texi(mymacro,38) @code{@@footnote@{in footnote2@}} @footnote{in footnote2} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@image@{f--ile@}} @image{f--ile} formatting.texi(mymacro,38) @code{@@image@{f--ile,l--i@}} @image{f--ile,l--i} formatting.texi(mymacro,38) @code{@@image@{f--ile,,l--e@}} @image{f--ile,,l--e} formatting.texi(mymacro,38) @code{@@image@{f--ile,,,alt@}} @image{f--ile,,,alt} formatting.texi(mymacro,38) @code{@@image@{f--ile,,,,e-d-xt@}} @image{f--ile,,,,e--xt} formatting.texi(mymacro,38) @code{@@image@{f--ile,aze,az,alt,e--xt@}} @image{f--ile,aze,az,alt,e--xt} formatting.texi(mymacro,38) @code{@@image@{f-ile,aze,,a--lt@}} @image{f-ile,aze,,a--lt} formatting.texi(mymacro,38) @code{@@image@{@@file@{f--ile@}@@@@@@.,aze,az,alt,@@file@{file ext@} e--xt@@@}} @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@}} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @sp 2 formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} formatting.texi(mymacro,38) @clickstyle @result formatting.texi(mymacro,38) After clickstyle @result{} formatting.texi(mymacro,38) @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} formatting.texi(mymacro,38) @clickstyle @arrow formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation formatting.texi(mymacro,38) A quot---ation formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation Note formatting.texi(mymacro,38) A Note formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation note formatting.texi(mymacro,38) A note formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation Caution formatting.texi(mymacro,38) Caution formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation Important formatting.texi(mymacro,38) Important formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation Tip formatting.texi(mymacro,38) a Tip formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation Warning formatting.texi(mymacro,38) a Warning. formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation something @'e @TeX{} formatting.texi(mymacro,38) The something @'e @TeX{} is here. formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation @@ at the end of line @ formatting.texi(mymacro,38) A @@ at the end of the @@quotation line. formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation something, other thing formatting.texi(mymacro,38) something, other thing formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation Note, the note formatting.texi(mymacro,38) Note, the note formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation Empty formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation @asis{} formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation @* formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @smallquotation formatting.texi(mymacro,38) A small quot---ation formatting.texi(mymacro,38) @end smallquotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @smallquotation Note formatting.texi(mymacro,38) A small Note formatting.texi(mymacro,38) @end smallquotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @smallquotation something, other thing formatting.texi(mymacro,38) something, other thing formatting.texi(mymacro,38) @end smallquotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @itemize formatting.texi(mymacro,38) @item i--temize formatting.texi(mymacro,38) @end itemize formatting.texi(mymacro,38) formatting.texi(mymacro,38) @itemize + formatting.texi(mymacro,38) @item i--tem + formatting.texi(mymacro,38) @end itemize formatting.texi(mymacro,38) formatting.texi(mymacro,38) @itemize @bullet formatting.texi(mymacro,38) @item b--ullet formatting.texi(mymacro,38) @end itemize formatting.texi(mymacro,38) formatting.texi(mymacro,38) @itemize @minus formatting.texi(mymacro,38) @item minu--s formatting.texi(mymacro,38) @end itemize formatting.texi(mymacro,38) formatting.texi(mymacro,38) @itemize @emph formatting.texi(mymacro,38) @item e--mph item formatting.texi(mymacro,38) @end itemize formatting.texi(mymacro,38) formatting.texi(mymacro,38) @itemize @emph{after emph} formatting.texi(mymacro,38) @c comment in itemize formatting.texi(mymacro,38) @item e--mph item formatting.texi(mymacro,38) @end itemize formatting.texi(mymacro,38) formatting.texi(mymacro,38) @itemize @bullet{} a--n itemize line formatting.texi(mymacro,38) @cindex index entry within itemize formatting.texi(mymacro,38) @item i--tem 1 formatting.texi(mymacro,38) @item i--tem 2 formatting.texi(mymacro,38) @end itemize formatting.texi(mymacro,38) formatting.texi(mymacro,38) @enumerate formatting.texi(mymacro,38) @item e--numerate formatting.texi(mymacro,38) @end enumerate formatting.texi(mymacro,38) formatting.texi(mymacro,38) @multitable @columnfractions 6 7 formatting.texi(mymacro,38) @headitem mu--ltitable headitem @tab another tab formatting.texi(mymacro,38) @item mu--ltitable item @tab multitable tab formatting.texi(mymacro,38) @c comment in multitable formatting.texi(mymacro,38) @item mu--ltitable item 2 @tab multitable tab 2 formatting.texi(mymacro,38) @cindex index entry within multitable formatting.texi(mymacro,38) @item lone mu--ltitable item formatting.texi(mymacro,38) @end multitable formatting.texi(mymacro,38) formatting.texi(mymacro,38) @multitable {truc} {bidule} formatting.texi(mymacro,38) @item truc @tab bidule formatting.texi(mymacro,38) @end multitable formatting.texi(mymacro,38) formatting.texi(mymacro,38) @example formatting.texi(mymacro,38) e--xample some formatting.texi(mymacro,38) text formatting.texi(mymacro,38) @end example formatting.texi(mymacro,38) formatting.texi(mymacro,38) @smallexample formatting.texi(mymacro,38) s--mallexample formatting.texi(mymacro,38) @end smallexample formatting.texi(mymacro,38) formatting.texi(mymacro,38) @display formatting.texi(mymacro,38) d--isplay formatting.texi(mymacro,38) @end display formatting.texi(mymacro,38) formatting.texi(mymacro,38) @smalldisplay formatting.texi(mymacro,38) s--malldisplay formatting.texi(mymacro,38) @end smalldisplay formatting.texi(mymacro,38) formatting.texi(mymacro,38) @lisp formatting.texi(mymacro,38) l--isp formatting.texi(mymacro,38) @end lisp formatting.texi(mymacro,38) formatting.texi(mymacro,38) @smalllisp formatting.texi(mymacro,38) s--malllisp formatting.texi(mymacro,38) @end smalllisp formatting.texi(mymacro,38) formatting.texi(mymacro,38) @format formatting.texi(mymacro,38) f--ormat formatting.texi(mymacro,38) @end format formatting.texi(mymacro,38) formatting.texi(mymacro,38) @smallformat formatting.texi(mymacro,38) s--mallformat formatting.texi(mymacro,38) @end smallformat formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deffn c--ategory d--effn_name a--rguments... formatting.texi(mymacro,38) d--effn formatting.texi(mymacro,38) @end deffn formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deffn cate--gory de--ffn_name ar--guments more args @* even more so formatting.texi(mymacro,38) def--fn formatting.texi(mymacro,38) @end deffn formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deffn fset @var{i} a g formatting.texi(mymacro,38) @cindex index entry within deffn formatting.texi(mymacro,38) @deffnx {cmde} truc {} formatting.texi(mymacro,38) @deffnx Command {log trap} {} formatting.texi(mymacro,38) @deffnx Command { log trap1} {} formatting.texi(mymacro,38) @deffnx Command {log trap2 } {} formatting.texi(mymacro,38) @deffnx cmde @b{id ule} truc formatting.texi(mymacro,38) @deffnx cmde2 @b{id @samp{i} ule} truc formatting.texi(mymacro,38) @deffnx @b{id @samp{i} ule} formatting.texi(mymacro,38) @deffnx formatting.texi(mymacro,38) @deffnx aaa formatting.texi(mymacro,38) @deffnx {} {} formatting.texi(mymacro,38) @deffnx{} formatting.texi(mymacro,38) @deffnx{} machin formatting.texi(mymacro,38) @deffnx{} {bidule machin} formatting.texi(mymacro,38) @deffnx{truc} machin formatting.texi(mymacro,38) @deffnx{truc} { } formatting.texi(mymacro,38) @deffnx{truc} followed by a comment formatting.texi(mymacro,38) @c comment formatting.texi(mymacro,38) @deffnx{truc} formatting.texi(mymacro,38) @deffnx{} {} formatting.texi(mymacro,38) @deffnx {truc} a b c d e @b{f g} {h i} formatting.texi(mymacro,38) @deffnx {truc} deffnx before end deffn formatting.texi(mymacro,38) @end deffn formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deffn empty deffn formatting.texi(mymacro,38) @end deffn formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deffn empty deffn with deffnx formatting.texi(mymacro,38) @c comment between deffn and deffnx formatting.texi(mymacro,38) @deffnx empty deffnx formatting.texi(mymacro,38) @end deffn formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deffn fset @var{i} a g formatting.texi(mymacro,38) @deffnx {cmde} truc {} formatting.texi(mymacro,38) @c comment formatting.texi(mymacro,38) text in def item for second def item formatting.texi(mymacro,38) @end deffn formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defvr c--ategory d--efvr_name formatting.texi(mymacro,38) d--efvr formatting.texi(mymacro,38) @end defvr formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... formatting.texi(mymacro,38) d--eftypefn formatting.texi(mymacro,38) @end deftypefn formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... formatting.texi(mymacro,38) d--eftypeop formatting.texi(mymacro,38) @end deftypeop formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deftypevr c--ategory t--ype d--eftypevr_name formatting.texi(mymacro,38) d--eftypevr formatting.texi(mymacro,38) @end deftypevr formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defcv c--ategory c--lass d--efcv_name formatting.texi(mymacro,38) d--efcv formatting.texi(mymacro,38) @end defcv formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defop c--ategory c--lass d--efop_name a--rguments... formatting.texi(mymacro,38) d--efop formatting.texi(mymacro,38) @end defop formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deftp c--ategory d--eftp_name a--ttributes... formatting.texi(mymacro,38) d--eftp formatting.texi(mymacro,38) @end deftp formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defun d--efun_name a--rguments... formatting.texi(mymacro,38) d--efun formatting.texi(mymacro,38) @end defun formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defmac d--efmac_name a--rguments... formatting.texi(mymacro,38) d--efmac formatting.texi(mymacro,38) @end defmac formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defspec d--efspec_name a--rguments... formatting.texi(mymacro,38) d--efspec formatting.texi(mymacro,38) @end defspec formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defvar d--efvar_name argvar argvar1 formatting.texi(mymacro,38) d--efvar formatting.texi(mymacro,38) @end defvar formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defopt d--efopt_name formatting.texi(mymacro,38) d--efopt formatting.texi(mymacro,38) @end defopt formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deftypefun t--ype d--eftypefun_name a--rguments... formatting.texi(mymacro,38) d--eftypefun formatting.texi(mymacro,38) @end deftypefun formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deftypevar t--ype d--eftypevar_name formatting.texi(mymacro,38) d--eftypevar formatting.texi(mymacro,38) @end deftypevar formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defivar c--lass d--efivar_name formatting.texi(mymacro,38) d--efivar formatting.texi(mymacro,38) @end defivar formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deftypeivar c--lass t--ype d--eftypeivar_name formatting.texi(mymacro,38) d--eftypeivar formatting.texi(mymacro,38) @end deftypeivar formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defmethod c--lass d--efmethod_name a--rguments... formatting.texi(mymacro,38) d--efmethod formatting.texi(mymacro,38) @end defmethod formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... formatting.texi(mymacro,38) d--eftypemethod formatting.texi(mymacro,38) @end deftypemethod formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@xref@{c---hapter@@@@, cross r---ef name@@@@, t---itle@@@@, file n---ame@@@@, ma---nual@@@@@}} @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@}. formatting.texi(mymacro,38) @code{@@ref@{chapter, cross ref name, title, file name, manual@}} @ref{chapter, cross ref name, title, file name, manual} formatting.texi(mymacro,38) @code{@@pxref@{chapter, cross ref name, title, file name, manual@}} @pxref{chapter, cross ref name, title, file name, manual} formatting.texi(mymacro,38) @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@ref@{chapter@}} @ref{chapter} formatting.texi(mymacro,38) @code{@@xref@{chapter@}} @xref{chapter}. formatting.texi(mymacro,38) @code{@@pxref@{chapter@}} @pxref{chapter} formatting.texi(mymacro,38) @code{@@ref@{s--ect@@comma@{@}ion@}} @ref{s--ect@comma{}ion} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@ref@{s--ect@@comma@{@}ion, a @@comma@{@} in cross formatting.texi(mymacro,38) ref, a comma@@comma@{@} in title, a comma@@comma@{@} in file, a @@comma@{@} in manual name @}} formatting.texi(mymacro,38) @ref{s--ect@comma{}ion, a @comma{} in cross formatting.texi(mymacro,38) ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@ref@{chapter,cross ref name@}} @ref{chapter,cross ref name} formatting.texi(mymacro,38) @code{@@ref@{chapter,,title@}} @ref{chapter,,title} formatting.texi(mymacro,38) @code{@@ref@{chapter,,,file name@}} @ref{chapter,,,file name} formatting.texi(mymacro,38) @code{@@ref@{chapter,,,,manual@}} @ref{chapter,,,,manual} formatting.texi(mymacro,38) @code{@@ref@{chapter,cross ref name,title,@}} @ref{chapter,cross ref name,title,} formatting.texi(mymacro,38) @code{@@ref@{chapter,cross ref name,,file name@}} @ref{chapter,cross ref name,,file name} formatting.texi(mymacro,38) @code{@@ref@{chapter,cross ref name,,,manual@}} @ref{chapter,cross ref name,,,manual} formatting.texi(mymacro,38) @code{@@ref@{chapter,cross ref name,title,file name@}} @ref{chapter,cross ref name,title,file name} formatting.texi(mymacro,38) @code{@@ref@{chapter,cross ref name,title,,manual@}} @ref{chapter,cross ref name,title,,manual} formatting.texi(mymacro,38) @code{@@ref@{chapter,cross ref name,title, file name, manual@}} @ref{chapter,cross ref name,title, file name, manual} formatting.texi(mymacro,38) @code{@@ref@{chapter,,title,file name@}} @ref{chapter,,title,file name} formatting.texi(mymacro,38) @code{@@ref@{chapter,,title,,manual@}} @ref{chapter,,title,,manual} formatting.texi(mymacro,38) @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} formatting.texi(mymacro,38) @code{@@ref@{chapter,,,file name,manual@}} @ref{chapter,,,file name,manual} formatting.texi(mymacro,38) formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,cross ref name@}} @ref{(pman)anode,cross ref name} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,,title@}} @ref{(pman)anode,,title} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,,,file name@}} @ref{(pman)anode,,,file name} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,,,,manual@}} @ref{(pman)anode,,,,manual} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,cross ref name,title,@}} @ref{(pman)anode,cross ref name,title,} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,cross ref name,,file name@}} @ref{(pman)anode,cross ref name,,file name} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,cross ref name,,,manual@}} @ref{(pman)anode,cross ref name,,,manual} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,cross ref name,title,file name@}} @ref{(pman)anode,cross ref name,title,file name} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,cross ref name,title,,manual@}} @ref{(pman)anode,cross ref name,title,,manual} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,cross ref name,title, file name, manual@}} @ref{(pman)anode,cross ref name,title, file name, manual} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,,title,file name@}} @ref{(pman)anode,,title,file name} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,,title,,manual@}} @ref{(pman)anode,,title,,manual} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,,title, file name, manual@}} @ref{(pman)anode,,title, file name, manual} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,,,file name,manual@}} @ref{(pman)anode,,,file name,manual} formatting.texi(mymacro,38) formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} formatting.texi(mymacro,38) @code{@@inforef@{chapter@}} @inforef{chapter} formatting.texi(mymacro,38) @code{@@inforef@{chapter, cross ref name@}} @inforef{chapter, cross ref name} formatting.texi(mymacro,38) @code{@@inforef@{chapter,,file name@}} @inforef{chapter,,file name} formatting.texi(mymacro,38) @code{@@inforef@{node, cross ref name, file name@}} @inforef{node, cross ref name, file name} formatting.texi(mymacro,38) @code{@@inforef@{node@}} @inforef{node} formatting.texi(mymacro,38) @code{@@inforef@{node, cross ref name@}} @inforef{node, cross ref name} formatting.texi(mymacro,38) @code{@@inforef@{node,,file name@}} @inforef{node,,file name} formatting.texi(mymacro,38) @code{@@inforef@{chapter, cross ref name, file name, spurious arg@}} @inforef{chapter, cross ref name, file name, spurious arg} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@inforef@{s--ect@@comma@{@}ion, a @@comma@{@} in cross formatting.texi(mymacro,38) ref, a comma@@comma@{@} in file@}} formatting.texi(mymacro,38) @inforef{s--ect@comma{}ion, a @comma{} in cross formatting.texi(mymacro,38) ref, a comma@comma{} in file} formatting.texi(mymacro,38) formatting.texi(mymacro,38) formatting.texi(mymacro,38) @table @bullet formatting.texi(mymacro,38) @c comment in table formatting.texi(mymacro,38) @item a formatting.texi(mymacro,38) l--ine formatting.texi(mymacro,38) @end table formatting.texi(mymacro,38) formatting.texi(mymacro,38) @vtable @asis formatting.texi(mymacro,38) @item a formatting.texi(mymacro,38) @c comment between item and itemx formatting.texi(mymacro,38) @itemx b formatting.texi(mymacro,38) l--ine formatting.texi(mymacro,38) @end vtable formatting.texi(mymacro,38) formatting.texi(mymacro,38) @ftable @minus formatting.texi(mymacro,38) @item a formatting.texi(mymacro,38) @cindex index entry between item and itemx formatting.texi(mymacro,38) @itemx b formatting.texi(mymacro,38) l--ine formatting.texi(mymacro,38) @end ftable formatting.texi(mymacro,38) formatting.texi(mymacro,38) @cartouche formatting.texi(mymacro,38) c--artouche formatting.texi(mymacro,38) @end cartouche formatting.texi(mymacro,38) formatting.texi(mymacro,38) @flushleft formatting.texi(mymacro,38) f--lushleft formatting.texi(mymacro,38) @end flushleft formatting.texi(mymacro,38) formatting.texi(mymacro,38) @flushright formatting.texi(mymacro,38) f--lushright formatting.texi(mymacro,38) @end flushright formatting.texi(mymacro,38) formatting.texi(mymacro,38) @center ce--ntered line formatting.texi(mymacro,38) formatting.texi(mymacro,38) @verbatiminclude simplest.texi formatting.texi(mymacro,38) formatting.texi(mymacro,38) @verbatim formatting.texi(mymacro,38) in verbatim '' formatting.texi(mymacro,38) @end verbatim formatting.texi(mymacro,38) formatting.texi(mymacro,38) formatting.texi(mymacro,38) @html formatting.texi(mymacro,38) html '' formatting.texi(mymacro,38) @end html formatting.texi(mymacro,38) formatting.texi(mymacro,38) formatting.texi(mymacro,38) formatting.texi(mymacro,38) @majorheading majorheading formatting.texi(mymacro,38) formatting.texi(mymacro,38) @chapheading chapheading formatting.texi(mymacro,38) formatting.texi(mymacro,38) @heading heading formatting.texi(mymacro,38) formatting.texi(mymacro,38) @subheading subheading formatting.texi(mymacro,38) formatting.texi(mymacro,38) @subsubheading subsubheading formatting.texi(mymacro,38) formatting.texi(mymacro,38) @c makeinfo cannot handle that formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@acronym@{--a,an accronym @@comma@{@} @@enddots@{@}@}} @acronym{--a,an accronym @comma{} @enddots{}} formatting.texi(mymacro,38) @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude--@@comma@{@} @@b@{Autonome@} @}} @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } formatting.texi(mymacro,38) @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@math@{--a@@minus@{@} @{\frac@{1@}@{2@}@}@}} @math{--a@minus{} {\frac{1}{2}}} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@image@{f-ile,,,alt@@verb@{:jk _" %@:@}@}} @image{f-ile,,,alt@verb{:jk _" %@:}} formatting.texi(mymacro,38) @code{@@image@{f--ile,aze,az,@@verb@{:jk _" %@@:@} @@b@{in b "@},e--xt@}} @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} formatting.texi(mymacro,38) @code{@@image@{file@@verb@{:jk _" %@@:@},,,alt@@verb@{:jk _" %@@:@}@}} @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @set invalid formatting.texi(mymacro,38) formatting.texi(mymacro,38) formatting.texi(mymacro,38) @c invalid texinfo formatting.texi(mymacro,38) formatting.texi(mymacro,38) Somehow invalid use of @@,:@* formatting.texi(mymacro,38) @@, @, formatting.texi(mymacro,38) @* formatting.texi(mymacro,38) @@,@@"u @,@"u formatting.texi(mymacro,38) formatting.texi(mymacro,38) Invalid use of @@':@* formatting.texi(mymacro,38) @@' @' formatting.texi(mymacro,38) @* formatting.texi(mymacro,38) @@'@@"u @'@"u formatting.texi(mymacro,38) formatting.texi(mymacro,38) @c only i or j as arg formatting.texi(mymacro,38) @@dotless@{truc@} @dotless{truc} formatting.texi(mymacro,38) @@dotless@{ij@} @dotless{ij} formatting.texi(mymacro,38) @code{@@dotless@{--a@}} @dotless{--a} formatting.texi(mymacro,38) @code{@@dotless@{a@}} @dotless{a} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @c braces missing formatting.texi(mymacro,38) @@TeX, but without brace @TeX formatting.texi(mymacro,38) formatting.texi(mymacro,38) @c unknown command formatting.texi(mymacro,38) @code{@@#} @# formatting.texi(mymacro,38) formatting.texi(mymacro,38) @c no arg formatting.texi(mymacro,38) @code{@@w@{--a@}} @w{--a} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @c no file formatting.texi(mymacro,38) @code{@@image@{,1--xt@}} @image{,1--xt} formatting.texi(mymacro,38) @code{@@image@{,,2--xt@}} @image{,,2--xt} formatting.texi(mymacro,38) @code{@@image@{,,,3--xt@}} @image{,,,3--xt} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @sp formatting.texi(mymacro,38) formatting.texi(mymacro,38) @c braces missing formatting.texi(mymacro,38) @itemize @emph after emph formatting.texi(mymacro,38) @item e--mph item formatting.texi(mymacro,38) @end itemize formatting.texi(mymacro,38) formatting.texi(mymacro,38) @c braces missing formatting.texi(mymacro,38) @itemize @bullet a--n itemize line formatting.texi(mymacro,38) @item i--tem 1 formatting.texi(mymacro,38) @item i--tem 2 formatting.texi(mymacro,38) @end itemize formatting.texi(mymacro,38) formatting.texi(mymacro,38) @c deffnx after deff lines formatting.texi(mymacro,38) @deffn fun formatting.texi(mymacro,38) @deffnx truc machin bidule chose and } formatting.texi(mymacro,38) @deffnx truc machin bidule chose and } after formatting.texi(mymacro,38) @deffnx truc machin bidule chose and { formatting.texi(mymacro,38) @deffnx truc machin bidule chose and { and after formatting.texi(mymacro,38) @deffnx {truc} followed by a comment formatting.texi(mymacro,38) @c comment formatting.texi(mymacro,38) Various deff lines formatting.texi(mymacro,38) @deffnx {truc} after a deff item formatting.texi(mymacro,38) @end deffn formatting.texi(mymacro,38) formatting.texi(mymacro,38) @c node is non existent, or missing first arg formatting.texi(mymacro,38) @code{@@ref@{node@}} @ref{node} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@ref@{,cross ref name@}} @ref{,cross ref name} formatting.texi(mymacro,38) @code{@@ref@{,,title@}} @ref{,,title} formatting.texi(mymacro,38) @code{@@ref@{,,,file name@}} @ref{,,,file name} formatting.texi(mymacro,38) @code{@@ref@{,,,,manual@}} @ref{,,,,manual} formatting.texi(mymacro,38) @code{@@ref@{node,cross ref name@}} @ref{node,cross ref name} formatting.texi(mymacro,38) @code{@@ref@{node,,title@}} @ref{node,,title} formatting.texi(mymacro,38) @code{@@ref@{node,,,file name@}} @ref{node,,,file name} formatting.texi(mymacro,38) @code{@@ref@{node,,,,manual@}} @ref{node,,,,manual} formatting.texi(mymacro,38) @code{@@ref@{node,cross ref name,title,@}} @ref{node,cross ref name,title,} formatting.texi(mymacro,38) @code{@@ref@{node,cross ref name,,file name@}} @ref{node,cross ref name,,file name} formatting.texi(mymacro,38) @code{@@ref@{node,cross ref name,,,manual@}} @ref{node,cross ref name,,,manual} formatting.texi(mymacro,38) @code{@@ref@{node,cross ref name,title,file name@}} @ref{node,cross ref name,title,file name} formatting.texi(mymacro,38) @code{@@ref@{node,cross ref name,title,,manual@}} @ref{node,cross ref name,title,,manual} formatting.texi(mymacro,38) @code{@@ref@{node,cross ref name,title, file name, manual@}} @ref{node,cross ref name,title, file name, manual} formatting.texi(mymacro,38) @code{@@ref@{node,,title,file name@}} @ref{node,,title,file name} formatting.texi(mymacro,38) @code{@@ref@{node,,title,,manual@}} @ref{node,,title,,manual} formatting.texi(mymacro,38) @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} formatting.texi(mymacro,38) @code{@@ref@{node,,title, file name, manual@}} @ref{node,,title, file name, manual} formatting.texi(mymacro,38) @code{@@ref@{node,,,file name,manual@}} @ref{node,,,file name,manual} formatting.texi(mymacro,38) @code{@@ref@{,cross ref name,title,@}} @ref{,cross ref name,title,} formatting.texi(mymacro,38) @code{@@ref@{,cross ref name,,file name@}} @ref{,cross ref name,,file name} formatting.texi(mymacro,38) @code{@@ref@{,cross ref name,,,manual@}} @ref{,cross ref name,,,manual} formatting.texi(mymacro,38) @code{@@ref@{,cross ref name,title,file name@}} @ref{,cross ref name,title,file name} formatting.texi(mymacro,38) @code{@@ref@{,cross ref name,title,,manual@}} @ref{,cross ref name,title,,manual} formatting.texi(mymacro,38) @code{@@ref@{,cross ref name,title, file name, manual@}} @ref{,cross ref name,title, file name, manual} formatting.texi(mymacro,38) @code{@@ref@{,,title,file name@}} @ref{,,title,file name} formatting.texi(mymacro,38) @code{@@ref@{,,title,,manual@}} @ref{,,title,,manual} formatting.texi(mymacro,38) @code{@@ref@{,,title, file name, manual@}} @ref{,,title, file name, manual} formatting.texi(mymacro,38) @code{@@ref@{,,,file name,manual@}} @ref{,,,file name,manual} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@inforef@{,cross ref name @}} @inforef{,cross ref name } formatting.texi(mymacro,38) @code{@@inforef@{,,file name@}} @inforef{,,file name} formatting.texi(mymacro,38) @code{@@inforef@{,cross ref name, file name@}} @inforef{,cross ref name, file name} formatting.texi(mymacro,38) @code{@@inforef@{@}} @inforef{} formatting.texi(mymacro,38) formatting.texi(mymacro,38) formatting.texi(,39) formatting.texi(,40) In example. formatting.texi(,41) @example formatting.texi(mymacro,42) formatting.texi(mymacro,42) < formatting.texi(mymacro,42) > formatting.texi(mymacro,42) " formatting.texi(mymacro,42) & formatting.texi(mymacro,42) ' formatting.texi(mymacro,42) ` formatting.texi(mymacro,42) formatting.texi(mymacro,42) ``simple-double--three---four----''@* formatting.texi(mymacro,42) code: @code{``simple-double--three---four----''} @* formatting.texi(mymacro,42) asis: @asis{``simple-double--three---four----''} @* formatting.texi(mymacro,42) strong: @strong{``simple-double--three---four----''} @* formatting.texi(mymacro,42) kbd: @kbd{``simple-double--three---four----''} @* formatting.texi(mymacro,42) formatting.texi(mymacro,42) `@w{}`simple-double-@w{}-three---four----'@w{}'@* formatting.texi(mymacro,42) formatting.texi(mymacro,42) @cindex --option formatting.texi(mymacro,42) @cindex `` formatting.texi(mymacro,42) @findex `` formatting.texi(mymacro,42) @findex --foption formatting.texi(mymacro,42) formatting.texi(mymacro,42) @@"u @"u formatting.texi(mymacro,42) @@"@{U@} @"{U} formatting.texi(mymacro,42) @@~n @~n formatting.texi(mymacro,42) @@^a @^a formatting.texi(mymacro,42) @@'e @'e formatting.texi(mymacro,42) @@=o @=o formatting.texi(mymacro,42) @@`i @`i formatting.texi(mymacro,42) @@'@{e@} @'{e} formatting.texi(mymacro,42) @@'@{@@dotless@{i@}@} @'{@dotless{i}} formatting.texi(mymacro,42) @@dotless@{i@} @dotless{i} formatting.texi(mymacro,42) @@dotless@{j@} @dotless{j} formatting.texi(mymacro,42) @@`@{@@=E@} @`{@=E} formatting.texi(mymacro,42) @@l@{@} @l{} formatting.texi(mymacro,42) @@,@{@@'C@} @,{@'C} formatting.texi(mymacro,42) @@,c @,c formatting.texi(mymacro,42) @@,c@@"u @,c@"u @* formatting.texi(mymacro,42) formatting.texi(mymacro,42) @@* @* formatting.texi(mymacro,42) @@ followed by a space formatting.texi(mymacro,42) @ formatting.texi(mymacro,42) @@ followed by a tab formatting.texi(mymacro,42) @ formatting.texi(mymacro,42) @@ followed by a new line formatting.texi(mymacro,42) @ formatting.texi(mymacro,42) @code{@@-} @- formatting.texi(mymacro,42) @code{@@|} @| formatting.texi(mymacro,42) @code{@@:} @: formatting.texi(mymacro,42) @code{@@!} @! formatting.texi(mymacro,42) @code{@@?} @? formatting.texi(mymacro,42) @code{@@.} @. formatting.texi(mymacro,42) @code{@@@@} @@ formatting.texi(mymacro,42) @code{@@@}} @} formatting.texi(mymacro,42) @code{@@@{} @{ formatting.texi(mymacro,42) @code{@@/} @/ formatting.texi(mymacro,42) formatting.texi(mymacro,42) foo vs.@: bar. formatting.texi(mymacro,42) colon :@:And something else. formatting.texi(mymacro,42) semi colon ;@:. formatting.texi(mymacro,42) And ? ?@:. formatting.texi(mymacro,42) Now ! !@:@@ formatting.texi(mymacro,42) but , ,@: formatting.texi(mymacro,42) formatting.texi(mymacro,42) @@TeX @TeX{} formatting.texi(mymacro,42) @@LaTeX @LaTeX{} formatting.texi(mymacro,42) @@bullet @bullet{} formatting.texi(mymacro,42) @@copyright @copyright{} formatting.texi(mymacro,42) @@dots @dots{} formatting.texi(mymacro,42) @@enddots @enddots{} formatting.texi(mymacro,42) @@equiv @equiv{} formatting.texi(mymacro,42) @@error @error{} formatting.texi(mymacro,42) @@expansion @expansion{} formatting.texi(mymacro,42) @@minus @minus{} formatting.texi(mymacro,42) @@point @point{} formatting.texi(mymacro,42) @@print @print{} formatting.texi(mymacro,42) @@result @result{} formatting.texi(mymacro,42) @@today @today{} formatting.texi(mymacro,42) @@aa @aa{} formatting.texi(mymacro,42) @@AA @AA{} formatting.texi(mymacro,42) @@ae @ae{} formatting.texi(mymacro,42) @@oe @oe{} formatting.texi(mymacro,42) @@AE @AE{} formatting.texi(mymacro,42) @@OE @OE{} formatting.texi(mymacro,42) @@o @o{} formatting.texi(mymacro,42) @@O @O{} formatting.texi(mymacro,42) @@ss @ss{} formatting.texi(mymacro,42) @@l @l{} formatting.texi(mymacro,42) @@L @L{} formatting.texi(mymacro,42) @@exclamdown @exclamdown{} formatting.texi(mymacro,42) @@questiondown @questiondown{} formatting.texi(mymacro,42) @@pounds @pounds{} formatting.texi(mymacro,42) @@registeredsymbol @registeredsymbol{} formatting.texi(mymacro,42) @@ordf @ordf{} formatting.texi(mymacro,42) @@ordm @ordm{} formatting.texi(mymacro,42) @@comma @comma{} formatting.texi(mymacro,42) @@quotedblleft @quotedblleft{} formatting.texi(mymacro,42) @@quotedblright @quotedblright{} formatting.texi(mymacro,42) @@quoteleft @quoteleft{} formatting.texi(mymacro,42) @@quoteright @quoteright{} formatting.texi(mymacro,42) @@quotedblbase @quotedblbase{} formatting.texi(mymacro,42) @@quotesinglbase @quotesinglbase{} formatting.texi(mymacro,42) @@guillemetleft @guillemetleft{} formatting.texi(mymacro,42) @@guillemetright @guillemetright{} formatting.texi(mymacro,42) @@guillemotleft @guillemotleft{} formatting.texi(mymacro,42) @@guillemotright @guillemotright{} formatting.texi(mymacro,42) @@guilsinglleft @guilsinglleft{} formatting.texi(mymacro,42) @@guilsinglright @guilsinglright{} formatting.texi(mymacro,42) @@textdegree @textdegree{} formatting.texi(mymacro,42) @@euro @euro{} formatting.texi(mymacro,42) @@arrow @arrow{} formatting.texi(mymacro,42) @@leq @leq{} formatting.texi(mymacro,42) @@geq @geq{} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@acronym@{--a,an accronym@}} @acronym{--a,an accronym} formatting.texi(mymacro,42) @code{@@acronym@{--a@}} @acronym{--a} formatting.texi(mymacro,42) @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude Autonome @}} @abbr{@'E--. @comma{}A., @'Etude Autonome } formatting.texi(mymacro,42) @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} formatting.texi(mymacro,42) @code{@@asis@{--a@}} @asis{--a} formatting.texi(mymacro,42) @code{@@b@{--a@}} @b{--a} formatting.texi(mymacro,42) @code{@@cite@{--a@}} @cite{--a} formatting.texi(mymacro,42) @code{@@code@{--a@}} @code{--a} formatting.texi(mymacro,42) @code{@@command@{--a@}} @command{--a} formatting.texi(mymacro,42) @code{@@ctrl@{--a@}} @ctrl{--a} formatting.texi(mymacro,42) @code{@@dfn@{--a@}} @dfn{--a} formatting.texi(mymacro,42) @code{@@dmn@{--a@}} @dmn{--a} formatting.texi(mymacro,42) @code{@@email@{--a,--b@}} @email{--a,--b} formatting.texi(mymacro,42) @code{@@email@{,--b@}} @email{,--b} formatting.texi(mymacro,42) @code{@@email@{--a@}} @email{--a} formatting.texi(mymacro,42) @code{@@emph@{--a@}} @emph{--a} formatting.texi(mymacro,42) @code{@@env@{--a@}} @env{--a} formatting.texi(mymacro,42) @code{@@file@{--a@}} @file{--a} formatting.texi(mymacro,42) @code{@@i@{--a@}} @i{--a} formatting.texi(mymacro,42) @code{@@kbd@{--a@}} @kbd{--a} formatting.texi(mymacro,42) @code{@@key@{--a@}} @key{--a} formatting.texi(mymacro,42) @code{@@math@{--a @{\frac@{1@}@{2@}@} @@minus@{@}@}} @math{--a {\frac{1}{2}} @minus{}} formatting.texi(mymacro,42) @code{@@option@{--a@}} @option{--a} formatting.texi(mymacro,42) @code{@@r@{--a@}} @r{--a} formatting.texi(mymacro,42) @code{@@samp@{--a@}} @samp{--a} formatting.texi(mymacro,42) @code{@@sc@{--a@}} @sc{--a} formatting.texi(mymacro,42) @code{@@strong@{--a@}} @strong{--a} formatting.texi(mymacro,42) @code{@@t@{--a@}} @t{--a} formatting.texi(mymacro,42) @code{@@sansserif@{--a@}} @sansserif{--a} formatting.texi(mymacro,42) @code{@@titlefont@{--a@}} @titlefont{--a} formatting.texi(mymacro,42) @code{@@indicateurl@{--a@}} @indicateurl{--a} formatting.texi(mymacro,42) @code{@@uref@{--a,--b@}} @uref{--a,--b} formatting.texi(mymacro,42) @code{@@uref@{--a@}} @uref{--a} formatting.texi(mymacro,42) @code{@@uref@{,--b@}} @uref{,--b} formatting.texi(mymacro,42) @code{@@uref@{--a,--b,--c@}} @uref{--a,--b,--c} formatting.texi(mymacro,42) @code{@@uref@{,--b,--c@}} @uref{,--b,--c} formatting.texi(mymacro,42) @code{@@uref@{--a,,--c@}} @uref{--a,,--c} formatting.texi(mymacro,42) @code{@@uref@{,,--c@}} @uref{,,--c} formatting.texi(mymacro,42) @code{@@url@{--a,--b@}} @url{--a,--b} formatting.texi(mymacro,42) @code{@@url@{--a,@}} @url{--a,} formatting.texi(mymacro,42) @code{@@url@{,--b@}} @url{,--b} formatting.texi(mymacro,42) @code{@@var@{--a@}} @var{--a} formatting.texi(mymacro,42) @code{@@verb@{:--a:@}} @verb{:--a:} formatting.texi(mymacro,42) @code{@@verb@{:a < & @@ % " -- b:@}} @verb{:a < & @ % " -- b:} formatting.texi(mymacro,42) @code{@@w@{@}} @w{} formatting.texi(mymacro,42) @code{@@H@{a@}} @H{a} formatting.texi(mymacro,42) @code{@@H@{--a@}} @H{--a} formatting.texi(mymacro,42) @code{@@dotaccent@{a@}} @dotaccent{a} formatting.texi(mymacro,42) @code{@@dotaccent@{--a@}} @dotaccent{--a} formatting.texi(mymacro,42) @code{@@ringaccent@{a@}} @ringaccent{a} formatting.texi(mymacro,42) @code{@@ringaccent@{--a@}} @ringaccent{--a} formatting.texi(mymacro,42) @code{@@tieaccent@{a@}} @tieaccent{a} formatting.texi(mymacro,42) @code{@@tieaccent@{--a@}} @tieaccent{--a} formatting.texi(mymacro,42) @code{@@u@{a@}} @u{a} formatting.texi(mymacro,42) @code{@@u@{--a@}} @u{--a} formatting.texi(mymacro,42) @code{@@ubaraccent@{a@}} @ubaraccent{a} formatting.texi(mymacro,42) @code{@@ubaraccent@{--a@}} @ubaraccent{--a} formatting.texi(mymacro,42) @code{@@udotaccent@{a@}} @udotaccent{a} formatting.texi(mymacro,42) @code{@@udotaccent@{--a@}} @udotaccent{--a} formatting.texi(mymacro,42) @code{@@v@{a@}} @v{a} formatting.texi(mymacro,42) @code{@@v@{--a@}} @v{--a} formatting.texi(mymacro,42) @code{@@,@{c@}} @,{c} formatting.texi(mymacro,42) @code{@@,@{--c@}} @,{--c} formatting.texi(mymacro,42) @code{@@ogonek@{a@}} @ogonek{a} formatting.texi(mymacro,42) @code{@@ogonek@{--a@}} @ogonek{--a} formatting.texi(mymacro,42) @code{@@footnote@{in footnote@}} @footnote{in footnote} formatting.texi(mymacro,42) @code{@@footnote@{in footnote2@}} @footnote{in footnote2} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@image@{f--ile@}} @image{f--ile} formatting.texi(mymacro,42) @code{@@image@{f--ile,l--i@}} @image{f--ile,l--i} formatting.texi(mymacro,42) @code{@@image@{f--ile,,l--e@}} @image{f--ile,,l--e} formatting.texi(mymacro,42) @code{@@image@{f--ile,,,alt@}} @image{f--ile,,,alt} formatting.texi(mymacro,42) @code{@@image@{f--ile,,,,e-d-xt@}} @image{f--ile,,,,e--xt} formatting.texi(mymacro,42) @code{@@image@{f--ile,aze,az,alt,e--xt@}} @image{f--ile,aze,az,alt,e--xt} formatting.texi(mymacro,42) @code{@@image@{f-ile,aze,,a--lt@}} @image{f-ile,aze,,a--lt} formatting.texi(mymacro,42) @code{@@image@{@@file@{f--ile@}@@@@@@.,aze,az,alt,@@file@{file ext@} e--xt@@@}} @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@}} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @sp 2 formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} formatting.texi(mymacro,42) @clickstyle @result formatting.texi(mymacro,42) After clickstyle @result{} formatting.texi(mymacro,42) @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} formatting.texi(mymacro,42) @clickstyle @arrow formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation formatting.texi(mymacro,42) A quot---ation formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation Note formatting.texi(mymacro,42) A Note formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation note formatting.texi(mymacro,42) A note formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation Caution formatting.texi(mymacro,42) Caution formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation Important formatting.texi(mymacro,42) Important formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation Tip formatting.texi(mymacro,42) a Tip formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation Warning formatting.texi(mymacro,42) a Warning. formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation something @'e @TeX{} formatting.texi(mymacro,42) The something @'e @TeX{} is here. formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation @@ at the end of line @ formatting.texi(mymacro,42) A @@ at the end of the @@quotation line. formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation something, other thing formatting.texi(mymacro,42) something, other thing formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation Note, the note formatting.texi(mymacro,42) Note, the note formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation Empty formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation @asis{} formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation @* formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @smallquotation formatting.texi(mymacro,42) A small quot---ation formatting.texi(mymacro,42) @end smallquotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @smallquotation Note formatting.texi(mymacro,42) A small Note formatting.texi(mymacro,42) @end smallquotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @smallquotation something, other thing formatting.texi(mymacro,42) something, other thing formatting.texi(mymacro,42) @end smallquotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @itemize formatting.texi(mymacro,42) @item i--temize formatting.texi(mymacro,42) @end itemize formatting.texi(mymacro,42) formatting.texi(mymacro,42) @itemize + formatting.texi(mymacro,42) @item i--tem + formatting.texi(mymacro,42) @end itemize formatting.texi(mymacro,42) formatting.texi(mymacro,42) @itemize @bullet formatting.texi(mymacro,42) @item b--ullet formatting.texi(mymacro,42) @end itemize formatting.texi(mymacro,42) formatting.texi(mymacro,42) @itemize @minus formatting.texi(mymacro,42) @item minu--s formatting.texi(mymacro,42) @end itemize formatting.texi(mymacro,42) formatting.texi(mymacro,42) @itemize @emph formatting.texi(mymacro,42) @item e--mph item formatting.texi(mymacro,42) @end itemize formatting.texi(mymacro,42) formatting.texi(mymacro,42) @itemize @emph{after emph} formatting.texi(mymacro,42) @c comment in itemize formatting.texi(mymacro,42) @item e--mph item formatting.texi(mymacro,42) @end itemize formatting.texi(mymacro,42) formatting.texi(mymacro,42) @itemize @bullet{} a--n itemize line formatting.texi(mymacro,42) @cindex index entry within itemize formatting.texi(mymacro,42) @item i--tem 1 formatting.texi(mymacro,42) @item i--tem 2 formatting.texi(mymacro,42) @end itemize formatting.texi(mymacro,42) formatting.texi(mymacro,42) @enumerate formatting.texi(mymacro,42) @item e--numerate formatting.texi(mymacro,42) @end enumerate formatting.texi(mymacro,42) formatting.texi(mymacro,42) @multitable @columnfractions 6 7 formatting.texi(mymacro,42) @headitem mu--ltitable headitem @tab another tab formatting.texi(mymacro,42) @item mu--ltitable item @tab multitable tab formatting.texi(mymacro,42) @c comment in multitable formatting.texi(mymacro,42) @item mu--ltitable item 2 @tab multitable tab 2 formatting.texi(mymacro,42) @cindex index entry within multitable formatting.texi(mymacro,42) @item lone mu--ltitable item formatting.texi(mymacro,42) @end multitable formatting.texi(mymacro,42) formatting.texi(mymacro,42) @multitable {truc} {bidule} formatting.texi(mymacro,42) @item truc @tab bidule formatting.texi(mymacro,42) @end multitable formatting.texi(mymacro,42) formatting.texi(mymacro,42) @example formatting.texi(mymacro,42) e--xample some formatting.texi(mymacro,42) text formatting.texi(mymacro,42) @end example formatting.texi(mymacro,42) formatting.texi(mymacro,42) @smallexample formatting.texi(mymacro,42) s--mallexample formatting.texi(mymacro,42) @end smallexample formatting.texi(mymacro,42) formatting.texi(mymacro,42) @display formatting.texi(mymacro,42) d--isplay formatting.texi(mymacro,42) @end display formatting.texi(mymacro,42) formatting.texi(mymacro,42) @smalldisplay formatting.texi(mymacro,42) s--malldisplay formatting.texi(mymacro,42) @end smalldisplay formatting.texi(mymacro,42) formatting.texi(mymacro,42) @lisp formatting.texi(mymacro,42) l--isp formatting.texi(mymacro,42) @end lisp formatting.texi(mymacro,42) formatting.texi(mymacro,42) @smalllisp formatting.texi(mymacro,42) s--malllisp formatting.texi(mymacro,42) @end smalllisp formatting.texi(mymacro,42) formatting.texi(mymacro,42) @format formatting.texi(mymacro,42) f--ormat formatting.texi(mymacro,42) @end format formatting.texi(mymacro,42) formatting.texi(mymacro,42) @smallformat formatting.texi(mymacro,42) s--mallformat formatting.texi(mymacro,42) @end smallformat formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deffn c--ategory d--effn_name a--rguments... formatting.texi(mymacro,42) d--effn formatting.texi(mymacro,42) @end deffn formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deffn cate--gory de--ffn_name ar--guments more args @* even more so formatting.texi(mymacro,42) def--fn formatting.texi(mymacro,42) @end deffn formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deffn fset @var{i} a g formatting.texi(mymacro,42) @cindex index entry within deffn formatting.texi(mymacro,42) @deffnx {cmde} truc {} formatting.texi(mymacro,42) @deffnx Command {log trap} {} formatting.texi(mymacro,42) @deffnx Command { log trap1} {} formatting.texi(mymacro,42) @deffnx Command {log trap2 } {} formatting.texi(mymacro,42) @deffnx cmde @b{id ule} truc formatting.texi(mymacro,42) @deffnx cmde2 @b{id @samp{i} ule} truc formatting.texi(mymacro,42) @deffnx @b{id @samp{i} ule} formatting.texi(mymacro,42) @deffnx formatting.texi(mymacro,42) @deffnx aaa formatting.texi(mymacro,42) @deffnx {} {} formatting.texi(mymacro,42) @deffnx{} formatting.texi(mymacro,42) @deffnx{} machin formatting.texi(mymacro,42) @deffnx{} {bidule machin} formatting.texi(mymacro,42) @deffnx{truc} machin formatting.texi(mymacro,42) @deffnx{truc} { } formatting.texi(mymacro,42) @deffnx{truc} followed by a comment formatting.texi(mymacro,42) @c comment formatting.texi(mymacro,42) @deffnx{truc} formatting.texi(mymacro,42) @deffnx{} {} formatting.texi(mymacro,42) @deffnx {truc} a b c d e @b{f g} {h i} formatting.texi(mymacro,42) @deffnx {truc} deffnx before end deffn formatting.texi(mymacro,42) @end deffn formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deffn empty deffn formatting.texi(mymacro,42) @end deffn formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deffn empty deffn with deffnx formatting.texi(mymacro,42) @c comment between deffn and deffnx formatting.texi(mymacro,42) @deffnx empty deffnx formatting.texi(mymacro,42) @end deffn formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deffn fset @var{i} a g formatting.texi(mymacro,42) @deffnx {cmde} truc {} formatting.texi(mymacro,42) @c comment formatting.texi(mymacro,42) text in def item for second def item formatting.texi(mymacro,42) @end deffn formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defvr c--ategory d--efvr_name formatting.texi(mymacro,42) d--efvr formatting.texi(mymacro,42) @end defvr formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... formatting.texi(mymacro,42) d--eftypefn formatting.texi(mymacro,42) @end deftypefn formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... formatting.texi(mymacro,42) d--eftypeop formatting.texi(mymacro,42) @end deftypeop formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deftypevr c--ategory t--ype d--eftypevr_name formatting.texi(mymacro,42) d--eftypevr formatting.texi(mymacro,42) @end deftypevr formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defcv c--ategory c--lass d--efcv_name formatting.texi(mymacro,42) d--efcv formatting.texi(mymacro,42) @end defcv formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defop c--ategory c--lass d--efop_name a--rguments... formatting.texi(mymacro,42) d--efop formatting.texi(mymacro,42) @end defop formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deftp c--ategory d--eftp_name a--ttributes... formatting.texi(mymacro,42) d--eftp formatting.texi(mymacro,42) @end deftp formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defun d--efun_name a--rguments... formatting.texi(mymacro,42) d--efun formatting.texi(mymacro,42) @end defun formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defmac d--efmac_name a--rguments... formatting.texi(mymacro,42) d--efmac formatting.texi(mymacro,42) @end defmac formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defspec d--efspec_name a--rguments... formatting.texi(mymacro,42) d--efspec formatting.texi(mymacro,42) @end defspec formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defvar d--efvar_name argvar argvar1 formatting.texi(mymacro,42) d--efvar formatting.texi(mymacro,42) @end defvar formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defopt d--efopt_name formatting.texi(mymacro,42) d--efopt formatting.texi(mymacro,42) @end defopt formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deftypefun t--ype d--eftypefun_name a--rguments... formatting.texi(mymacro,42) d--eftypefun formatting.texi(mymacro,42) @end deftypefun formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deftypevar t--ype d--eftypevar_name formatting.texi(mymacro,42) d--eftypevar formatting.texi(mymacro,42) @end deftypevar formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defivar c--lass d--efivar_name formatting.texi(mymacro,42) d--efivar formatting.texi(mymacro,42) @end defivar formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deftypeivar c--lass t--ype d--eftypeivar_name formatting.texi(mymacro,42) d--eftypeivar formatting.texi(mymacro,42) @end deftypeivar formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defmethod c--lass d--efmethod_name a--rguments... formatting.texi(mymacro,42) d--efmethod formatting.texi(mymacro,42) @end defmethod formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... formatting.texi(mymacro,42) d--eftypemethod formatting.texi(mymacro,42) @end deftypemethod formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@xref@{c---hapter@@@@, cross r---ef name@@@@, t---itle@@@@, file n---ame@@@@, ma---nual@@@@@}} @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@}. formatting.texi(mymacro,42) @code{@@ref@{chapter, cross ref name, title, file name, manual@}} @ref{chapter, cross ref name, title, file name, manual} formatting.texi(mymacro,42) @code{@@pxref@{chapter, cross ref name, title, file name, manual@}} @pxref{chapter, cross ref name, title, file name, manual} formatting.texi(mymacro,42) @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@ref@{chapter@}} @ref{chapter} formatting.texi(mymacro,42) @code{@@xref@{chapter@}} @xref{chapter}. formatting.texi(mymacro,42) @code{@@pxref@{chapter@}} @pxref{chapter} formatting.texi(mymacro,42) @code{@@ref@{s--ect@@comma@{@}ion@}} @ref{s--ect@comma{}ion} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@ref@{s--ect@@comma@{@}ion, a @@comma@{@} in cross formatting.texi(mymacro,42) ref, a comma@@comma@{@} in title, a comma@@comma@{@} in file, a @@comma@{@} in manual name @}} formatting.texi(mymacro,42) @ref{s--ect@comma{}ion, a @comma{} in cross formatting.texi(mymacro,42) ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@ref@{chapter,cross ref name@}} @ref{chapter,cross ref name} formatting.texi(mymacro,42) @code{@@ref@{chapter,,title@}} @ref{chapter,,title} formatting.texi(mymacro,42) @code{@@ref@{chapter,,,file name@}} @ref{chapter,,,file name} formatting.texi(mymacro,42) @code{@@ref@{chapter,,,,manual@}} @ref{chapter,,,,manual} formatting.texi(mymacro,42) @code{@@ref@{chapter,cross ref name,title,@}} @ref{chapter,cross ref name,title,} formatting.texi(mymacro,42) @code{@@ref@{chapter,cross ref name,,file name@}} @ref{chapter,cross ref name,,file name} formatting.texi(mymacro,42) @code{@@ref@{chapter,cross ref name,,,manual@}} @ref{chapter,cross ref name,,,manual} formatting.texi(mymacro,42) @code{@@ref@{chapter,cross ref name,title,file name@}} @ref{chapter,cross ref name,title,file name} formatting.texi(mymacro,42) @code{@@ref@{chapter,cross ref name,title,,manual@}} @ref{chapter,cross ref name,title,,manual} formatting.texi(mymacro,42) @code{@@ref@{chapter,cross ref name,title, file name, manual@}} @ref{chapter,cross ref name,title, file name, manual} formatting.texi(mymacro,42) @code{@@ref@{chapter,,title,file name@}} @ref{chapter,,title,file name} formatting.texi(mymacro,42) @code{@@ref@{chapter,,title,,manual@}} @ref{chapter,,title,,manual} formatting.texi(mymacro,42) @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} formatting.texi(mymacro,42) @code{@@ref@{chapter,,,file name,manual@}} @ref{chapter,,,file name,manual} formatting.texi(mymacro,42) formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,cross ref name@}} @ref{(pman)anode,cross ref name} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,,title@}} @ref{(pman)anode,,title} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,,,file name@}} @ref{(pman)anode,,,file name} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,,,,manual@}} @ref{(pman)anode,,,,manual} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,cross ref name,title,@}} @ref{(pman)anode,cross ref name,title,} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,cross ref name,,file name@}} @ref{(pman)anode,cross ref name,,file name} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,cross ref name,,,manual@}} @ref{(pman)anode,cross ref name,,,manual} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,cross ref name,title,file name@}} @ref{(pman)anode,cross ref name,title,file name} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,cross ref name,title,,manual@}} @ref{(pman)anode,cross ref name,title,,manual} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,cross ref name,title, file name, manual@}} @ref{(pman)anode,cross ref name,title, file name, manual} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,,title,file name@}} @ref{(pman)anode,,title,file name} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,,title,,manual@}} @ref{(pman)anode,,title,,manual} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,,title, file name, manual@}} @ref{(pman)anode,,title, file name, manual} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,,,file name,manual@}} @ref{(pman)anode,,,file name,manual} formatting.texi(mymacro,42) formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} formatting.texi(mymacro,42) @code{@@inforef@{chapter@}} @inforef{chapter} formatting.texi(mymacro,42) @code{@@inforef@{chapter, cross ref name@}} @inforef{chapter, cross ref name} formatting.texi(mymacro,42) @code{@@inforef@{chapter,,file name@}} @inforef{chapter,,file name} formatting.texi(mymacro,42) @code{@@inforef@{node, cross ref name, file name@}} @inforef{node, cross ref name, file name} formatting.texi(mymacro,42) @code{@@inforef@{node@}} @inforef{node} formatting.texi(mymacro,42) @code{@@inforef@{node, cross ref name@}} @inforef{node, cross ref name} formatting.texi(mymacro,42) @code{@@inforef@{node,,file name@}} @inforef{node,,file name} formatting.texi(mymacro,42) @code{@@inforef@{chapter, cross ref name, file name, spurious arg@}} @inforef{chapter, cross ref name, file name, spurious arg} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@inforef@{s--ect@@comma@{@}ion, a @@comma@{@} in cross formatting.texi(mymacro,42) ref, a comma@@comma@{@} in file@}} formatting.texi(mymacro,42) @inforef{s--ect@comma{}ion, a @comma{} in cross formatting.texi(mymacro,42) ref, a comma@comma{} in file} formatting.texi(mymacro,42) formatting.texi(mymacro,42) formatting.texi(mymacro,42) @table @bullet formatting.texi(mymacro,42) @c comment in table formatting.texi(mymacro,42) @item a formatting.texi(mymacro,42) l--ine formatting.texi(mymacro,42) @end table formatting.texi(mymacro,42) formatting.texi(mymacro,42) @vtable @asis formatting.texi(mymacro,42) @item a formatting.texi(mymacro,42) @c comment between item and itemx formatting.texi(mymacro,42) @itemx b formatting.texi(mymacro,42) l--ine formatting.texi(mymacro,42) @end vtable formatting.texi(mymacro,42) formatting.texi(mymacro,42) @ftable @minus formatting.texi(mymacro,42) @item a formatting.texi(mymacro,42) @cindex index entry between item and itemx formatting.texi(mymacro,42) @itemx b formatting.texi(mymacro,42) l--ine formatting.texi(mymacro,42) @end ftable formatting.texi(mymacro,42) formatting.texi(mymacro,42) @cartouche formatting.texi(mymacro,42) c--artouche formatting.texi(mymacro,42) @end cartouche formatting.texi(mymacro,42) formatting.texi(mymacro,42) @flushleft formatting.texi(mymacro,42) f--lushleft formatting.texi(mymacro,42) @end flushleft formatting.texi(mymacro,42) formatting.texi(mymacro,42) @flushright formatting.texi(mymacro,42) f--lushright formatting.texi(mymacro,42) @end flushright formatting.texi(mymacro,42) formatting.texi(mymacro,42) @center ce--ntered line formatting.texi(mymacro,42) formatting.texi(mymacro,42) @verbatiminclude simplest.texi formatting.texi(mymacro,42) formatting.texi(mymacro,42) @verbatim formatting.texi(mymacro,42) in verbatim '' formatting.texi(mymacro,42) @end verbatim formatting.texi(mymacro,42) formatting.texi(mymacro,42) formatting.texi(mymacro,42) @html formatting.texi(mymacro,42) html '' formatting.texi(mymacro,42) @end html formatting.texi(mymacro,42) formatting.texi(mymacro,42) formatting.texi(mymacro,42) formatting.texi(mymacro,42) @majorheading majorheading formatting.texi(mymacro,42) formatting.texi(mymacro,42) @chapheading chapheading formatting.texi(mymacro,42) formatting.texi(mymacro,42) @heading heading formatting.texi(mymacro,42) formatting.texi(mymacro,42) @subheading subheading formatting.texi(mymacro,42) formatting.texi(mymacro,42) @subsubheading subsubheading formatting.texi(mymacro,42) formatting.texi(mymacro,42) @c makeinfo cannot handle that formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@acronym@{--a,an accronym @@comma@{@} @@enddots@{@}@}} @acronym{--a,an accronym @comma{} @enddots{}} formatting.texi(mymacro,42) @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude--@@comma@{@} @@b@{Autonome@} @}} @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } formatting.texi(mymacro,42) @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@math@{--a@@minus@{@} @{\frac@{1@}@{2@}@}@}} @math{--a@minus{} {\frac{1}{2}}} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@image@{f-ile,,,alt@@verb@{:jk _" %@:@}@}} @image{f-ile,,,alt@verb{:jk _" %@:}} formatting.texi(mymacro,42) @code{@@image@{f--ile,aze,az,@@verb@{:jk _" %@@:@} @@b@{in b "@},e--xt@}} @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} formatting.texi(mymacro,42) @code{@@image@{file@@verb@{:jk _" %@@:@},,,alt@@verb@{:jk _" %@@:@}@}} @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @set invalid formatting.texi(mymacro,42) formatting.texi(mymacro,42) formatting.texi(mymacro,42) @c invalid texinfo formatting.texi(mymacro,42) formatting.texi(mymacro,42) Somehow invalid use of @@,:@* formatting.texi(mymacro,42) @@, @, formatting.texi(mymacro,42) @* formatting.texi(mymacro,42) @@,@@"u @,@"u formatting.texi(mymacro,42) formatting.texi(mymacro,42) Invalid use of @@':@* formatting.texi(mymacro,42) @@' @' formatting.texi(mymacro,42) @* formatting.texi(mymacro,42) @@'@@"u @'@"u formatting.texi(mymacro,42) formatting.texi(mymacro,42) @c only i or j as arg formatting.texi(mymacro,42) @@dotless@{truc@} @dotless{truc} formatting.texi(mymacro,42) @@dotless@{ij@} @dotless{ij} formatting.texi(mymacro,42) @code{@@dotless@{--a@}} @dotless{--a} formatting.texi(mymacro,42) @code{@@dotless@{a@}} @dotless{a} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @c braces missing formatting.texi(mymacro,42) @@TeX, but without brace @TeX formatting.texi(mymacro,42) formatting.texi(mymacro,42) @c unknown command formatting.texi(mymacro,42) @code{@@#} @# formatting.texi(mymacro,42) formatting.texi(mymacro,42) @c no arg formatting.texi(mymacro,42) @code{@@w@{--a@}} @w{--a} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @c no file formatting.texi(mymacro,42) @code{@@image@{,1--xt@}} @image{,1--xt} formatting.texi(mymacro,42) @code{@@image@{,,2--xt@}} @image{,,2--xt} formatting.texi(mymacro,42) @code{@@image@{,,,3--xt@}} @image{,,,3--xt} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @sp formatting.texi(mymacro,42) formatting.texi(mymacro,42) @c braces missing formatting.texi(mymacro,42) @itemize @emph after emph formatting.texi(mymacro,42) @item e--mph item formatting.texi(mymacro,42) @end itemize formatting.texi(mymacro,42) formatting.texi(mymacro,42) @c braces missing formatting.texi(mymacro,42) @itemize @bullet a--n itemize line formatting.texi(mymacro,42) @item i--tem 1 formatting.texi(mymacro,42) @item i--tem 2 formatting.texi(mymacro,42) @end itemize formatting.texi(mymacro,42) formatting.texi(mymacro,42) @c deffnx after deff lines formatting.texi(mymacro,42) @deffn fun formatting.texi(mymacro,42) @deffnx truc machin bidule chose and } formatting.texi(mymacro,42) @deffnx truc machin bidule chose and } after formatting.texi(mymacro,42) @deffnx truc machin bidule chose and { formatting.texi(mymacro,42) @deffnx truc machin bidule chose and { and after formatting.texi(mymacro,42) @deffnx {truc} followed by a comment formatting.texi(mymacro,42) @c comment formatting.texi(mymacro,42) Various deff lines formatting.texi(mymacro,42) @deffnx {truc} after a deff item formatting.texi(mymacro,42) @end deffn formatting.texi(mymacro,42) formatting.texi(mymacro,42) @c node is non existent, or missing first arg formatting.texi(mymacro,42) @code{@@ref@{node@}} @ref{node} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@ref@{,cross ref name@}} @ref{,cross ref name} formatting.texi(mymacro,42) @code{@@ref@{,,title@}} @ref{,,title} formatting.texi(mymacro,42) @code{@@ref@{,,,file name@}} @ref{,,,file name} formatting.texi(mymacro,42) @code{@@ref@{,,,,manual@}} @ref{,,,,manual} formatting.texi(mymacro,42) @code{@@ref@{node,cross ref name@}} @ref{node,cross ref name} formatting.texi(mymacro,42) @code{@@ref@{node,,title@}} @ref{node,,title} formatting.texi(mymacro,42) @code{@@ref@{node,,,file name@}} @ref{node,,,file name} formatting.texi(mymacro,42) @code{@@ref@{node,,,,manual@}} @ref{node,,,,manual} formatting.texi(mymacro,42) @code{@@ref@{node,cross ref name,title,@}} @ref{node,cross ref name,title,} formatting.texi(mymacro,42) @code{@@ref@{node,cross ref name,,file name@}} @ref{node,cross ref name,,file name} formatting.texi(mymacro,42) @code{@@ref@{node,cross ref name,,,manual@}} @ref{node,cross ref name,,,manual} formatting.texi(mymacro,42) @code{@@ref@{node,cross ref name,title,file name@}} @ref{node,cross ref name,title,file name} formatting.texi(mymacro,42) @code{@@ref@{node,cross ref name,title,,manual@}} @ref{node,cross ref name,title,,manual} formatting.texi(mymacro,42) @code{@@ref@{node,cross ref name,title, file name, manual@}} @ref{node,cross ref name,title, file name, manual} formatting.texi(mymacro,42) @code{@@ref@{node,,title,file name@}} @ref{node,,title,file name} formatting.texi(mymacro,42) @code{@@ref@{node,,title,,manual@}} @ref{node,,title,,manual} formatting.texi(mymacro,42) @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} formatting.texi(mymacro,42) @code{@@ref@{node,,title, file name, manual@}} @ref{node,,title, file name, manual} formatting.texi(mymacro,42) @code{@@ref@{node,,,file name,manual@}} @ref{node,,,file name,manual} formatting.texi(mymacro,42) @code{@@ref@{,cross ref name,title,@}} @ref{,cross ref name,title,} formatting.texi(mymacro,42) @code{@@ref@{,cross ref name,,file name@}} @ref{,cross ref name,,file name} formatting.texi(mymacro,42) @code{@@ref@{,cross ref name,,,manual@}} @ref{,cross ref name,,,manual} formatting.texi(mymacro,42) @code{@@ref@{,cross ref name,title,file name@}} @ref{,cross ref name,title,file name} formatting.texi(mymacro,42) @code{@@ref@{,cross ref name,title,,manual@}} @ref{,cross ref name,title,,manual} formatting.texi(mymacro,42) @code{@@ref@{,cross ref name,title, file name, manual@}} @ref{,cross ref name,title, file name, manual} formatting.texi(mymacro,42) @code{@@ref@{,,title,file name@}} @ref{,,title,file name} formatting.texi(mymacro,42) @code{@@ref@{,,title,,manual@}} @ref{,,title,,manual} formatting.texi(mymacro,42) @code{@@ref@{,,title, file name, manual@}} @ref{,,title, file name, manual} formatting.texi(mymacro,42) @code{@@ref@{,,,file name,manual@}} @ref{,,,file name,manual} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@inforef@{,cross ref name @}} @inforef{,cross ref name } formatting.texi(mymacro,42) @code{@@inforef@{,,file name@}} @inforef{,,file name} formatting.texi(mymacro,42) @code{@@inforef@{,cross ref name, file name@}} @inforef{,cross ref name, file name} formatting.texi(mymacro,42) @code{@@inforef@{@}} @inforef{} formatting.texi(mymacro,42) formatting.texi(mymacro,42) formatting.texi(,43) @end example formatting.texi(,44) formatting.texi(,45) @cindex t--ruc formatting.texi(,46) @cindex T--ruc formatting.texi(,47) @cindex . formatting.texi(,48) @cindex ? formatting.texi(,49) @cindex a formatting.texi(,50) @findex t--ruc formatting.texi(,51) @findex T--ruc formatting.texi(,52) @findex . formatting.texi(,53) @findex ? formatting.texi(,54) @findex a formatting.texi(,55) formatting.texi(,56) formatting.texi(,57) cp formatting.texi(,58) @printindex cp formatting.texi(,59) formatting.texi(,60) fn formatting.texi(,61) @printindex fn formatting.texi(,62) formatting.texi(,63) vr formatting.texi(,64) @printindex vr formatting.texi(,65) formatting.texi(,66) ky formatting.texi(,67) @printindex ky formatting.texi(,68) formatting.texi(,69) pg formatting.texi(,70) @printindex pg formatting.texi(,71) formatting.texi(,72) tp formatting.texi(,73) @printindex tp formatting.texi(,74) formatting.texi(,75) formatting.texi(,76) formatting.texi(,77) @node chapter formatting.texi(,78) @chapter chapter formatting.texi(,79) formatting.texi(,80) @footnote{in footnote} formatting.texi(,81) formatting.texi(,82) @format formatting.texi(,83) @menu formatting.texi(,84) * s--ect@comma{}ion:: s--ect@comma{}ion formatting.texi(,85) formatting.texi(,86) Menu comment formatting.texi(,87) ``simple-double--three---four----''@* formatting.texi(,88) formatting.texi(,89) @end menu formatting.texi(,90) @end format formatting.texi(,91) formatting.texi(,92) @node s--ect@comma{}ion formatting.texi(,93) @section A section formatting.texi(,94) formatting.texi(,95) @menu formatting.texi(,96) * subsection:: formatting.texi(,97) @end menu formatting.texi(,98) formatting.texi(,99) @node subsection formatting.texi(,100) @subsection subsection formatting.texi(,101) formatting.texi(,102) @menu formatting.texi(,103) * subsubsection ``simple-double--three---four----'':: formatting.texi(,104) @end menu formatting.texi(,105) formatting.texi(,106) @anchor{anchor} formatting.texi(,107) formatting.texi(,108) @node subsubsection ``simple-double--three---four----'' formatting.texi(,109) @subsubsection subsubsection ``simple-double--three---four----'' formatting.texi(,110) formatting.texi(,111) @node chapter2 formatting.texi(,112) @centerchap chapter 2 formatting.texi(,113) formatting.texi(,114) @printindex cp formatting.texi(,115) @printindex fn formatting.texi(,116) formatting.texi(,117) @contents formatting.texi(,118) @shortcontents formatting.texi(,119) @bye texi2html-1.82/test/coverage/res/texi_formatting/formatting.passtexi0000644000175000017500000046065011264347123027750 0ustar flichtenheldflichtenheldformatting.texi(,2) @setfilename formatting.info formatting.texi(,3) @node Top formatting.texi(,4) @top Top section formatting.texi(,5) formatting.texi(,6) @menu formatting.texi(,7) * chapter:: chapter formatting.texi(,8) formatting.texi(,9) Menu comment formatting.texi(,10) formatting.texi(,11) * description:chapter2. Chapter 2 formatting.texi(,12) @end menu formatting.texi(,13) formatting.texi(,15) formatting.texi(,16) @copying formatting.texi(,17) In copying formatting.texi(mymacro,18) formatting.texi(mymacro,18) < formatting.texi(mymacro,18) > formatting.texi(mymacro,18) " formatting.texi(mymacro,18) & formatting.texi(mymacro,18) ' formatting.texi(mymacro,18) ` formatting.texi(mymacro,18) formatting.texi(mymacro,18) ``simple-double--three---four----''@* formatting.texi(mymacro,18) code: @code{``simple-double--three---four----''} @* formatting.texi(mymacro,18) asis: @asis{``simple-double--three---four----''} @* formatting.texi(mymacro,18) strong: @strong{``simple-double--three---four----''} @* formatting.texi(mymacro,18) kbd: @kbd{``simple-double--three---four----''} @* formatting.texi(mymacro,18) formatting.texi(mymacro,18) `@w{}`simple-double-@w{}-three---four----'@w{}'@* formatting.texi(mymacro,18) formatting.texi(mymacro,18) @cindex --option formatting.texi(mymacro,18) @cindex `` formatting.texi(mymacro,18) @findex `` formatting.texi(mymacro,18) @findex --foption formatting.texi(mymacro,18) formatting.texi(mymacro,18) @@"u @"u formatting.texi(mymacro,18) @@"@{U@} @"{U} formatting.texi(mymacro,18) @@~n @~n formatting.texi(mymacro,18) @@^a @^a formatting.texi(mymacro,18) @@'e @'e formatting.texi(mymacro,18) @@=o @=o formatting.texi(mymacro,18) @@`i @`i formatting.texi(mymacro,18) @@'@{e@} @'{e} formatting.texi(mymacro,18) @@'@{@@dotless@{i@}@} @'{@dotless{i}} formatting.texi(mymacro,18) @@dotless@{i@} @dotless{i} formatting.texi(mymacro,18) @@dotless@{j@} @dotless{j} formatting.texi(mymacro,18) @@`@{@@=E@} @`{@=E} formatting.texi(mymacro,18) @@l@{@} @l{} formatting.texi(mymacro,18) @@,@{@@'C@} @,{@'C} formatting.texi(mymacro,18) @@,c @,c formatting.texi(mymacro,18) @@,c@@"u @,c@"u @* formatting.texi(mymacro,18) formatting.texi(mymacro,18) @@* @* formatting.texi(mymacro,18) @@ followed by a space formatting.texi(mymacro,18) @ formatting.texi(mymacro,18) @@ followed by a tab formatting.texi(mymacro,18) @ formatting.texi(mymacro,18) @@ followed by a new line formatting.texi(mymacro,18) @ formatting.texi(mymacro,18) @code{@@-} @- formatting.texi(mymacro,18) @code{@@|} @| formatting.texi(mymacro,18) @code{@@:} @: formatting.texi(mymacro,18) @code{@@!} @! formatting.texi(mymacro,18) @code{@@?} @? formatting.texi(mymacro,18) @code{@@.} @. formatting.texi(mymacro,18) @code{@@@@} @@ formatting.texi(mymacro,18) @code{@@@}} @} formatting.texi(mymacro,18) @code{@@@{} @{ formatting.texi(mymacro,18) @code{@@/} @/ formatting.texi(mymacro,18) formatting.texi(mymacro,18) foo vs.@: bar. formatting.texi(mymacro,18) colon :@:And something else. formatting.texi(mymacro,18) semi colon ;@:. formatting.texi(mymacro,18) And ? ?@:. formatting.texi(mymacro,18) Now ! !@:@@ formatting.texi(mymacro,18) but , ,@: formatting.texi(mymacro,18) formatting.texi(mymacro,18) @@TeX @TeX{} formatting.texi(mymacro,18) @@LaTeX @LaTeX{} formatting.texi(mymacro,18) @@bullet @bullet{} formatting.texi(mymacro,18) @@copyright @copyright{} formatting.texi(mymacro,18) @@dots @dots{} formatting.texi(mymacro,18) @@enddots @enddots{} formatting.texi(mymacro,18) @@equiv @equiv{} formatting.texi(mymacro,18) @@error @error{} formatting.texi(mymacro,18) @@expansion @expansion{} formatting.texi(mymacro,18) @@minus @minus{} formatting.texi(mymacro,18) @@point @point{} formatting.texi(mymacro,18) @@print @print{} formatting.texi(mymacro,18) @@result @result{} formatting.texi(mymacro,18) @@today @today{} formatting.texi(mymacro,18) @@aa @aa{} formatting.texi(mymacro,18) @@AA @AA{} formatting.texi(mymacro,18) @@ae @ae{} formatting.texi(mymacro,18) @@oe @oe{} formatting.texi(mymacro,18) @@AE @AE{} formatting.texi(mymacro,18) @@OE @OE{} formatting.texi(mymacro,18) @@o @o{} formatting.texi(mymacro,18) @@O @O{} formatting.texi(mymacro,18) @@ss @ss{} formatting.texi(mymacro,18) @@l @l{} formatting.texi(mymacro,18) @@L @L{} formatting.texi(mymacro,18) @@exclamdown @exclamdown{} formatting.texi(mymacro,18) @@questiondown @questiondown{} formatting.texi(mymacro,18) @@pounds @pounds{} formatting.texi(mymacro,18) @@registeredsymbol @registeredsymbol{} formatting.texi(mymacro,18) @@ordf @ordf{} formatting.texi(mymacro,18) @@ordm @ordm{} formatting.texi(mymacro,18) @@comma @comma{} formatting.texi(mymacro,18) @@quotedblleft @quotedblleft{} formatting.texi(mymacro,18) @@quotedblright @quotedblright{} formatting.texi(mymacro,18) @@quoteleft @quoteleft{} formatting.texi(mymacro,18) @@quoteright @quoteright{} formatting.texi(mymacro,18) @@quotedblbase @quotedblbase{} formatting.texi(mymacro,18) @@quotesinglbase @quotesinglbase{} formatting.texi(mymacro,18) @@guillemetleft @guillemetleft{} formatting.texi(mymacro,18) @@guillemetright @guillemetright{} formatting.texi(mymacro,18) @@guillemotleft @guillemotleft{} formatting.texi(mymacro,18) @@guillemotright @guillemotright{} formatting.texi(mymacro,18) @@guilsinglleft @guilsinglleft{} formatting.texi(mymacro,18) @@guilsinglright @guilsinglright{} formatting.texi(mymacro,18) @@textdegree @textdegree{} formatting.texi(mymacro,18) @@euro @euro{} formatting.texi(mymacro,18) @@arrow @arrow{} formatting.texi(mymacro,18) @@leq @leq{} formatting.texi(mymacro,18) @@geq @geq{} formatting.texi(mymacro,18) formatting.texi(mymacro,18) @code{@@acronym@{--a,an accronym@}} @acronym{--a,an accronym} formatting.texi(mymacro,18) @code{@@acronym@{--a@}} @acronym{--a} formatting.texi(mymacro,18) @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude Autonome @}} @abbr{@'E--. @comma{}A., @'Etude Autonome } formatting.texi(mymacro,18) @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} formatting.texi(mymacro,18) @code{@@asis@{--a@}} @asis{--a} formatting.texi(mymacro,18) @code{@@b@{--a@}} @b{--a} formatting.texi(mymacro,18) @code{@@cite@{--a@}} @cite{--a} formatting.texi(mymacro,18) @code{@@code@{--a@}} @code{--a} formatting.texi(mymacro,18) @code{@@command@{--a@}} @command{--a} formatting.texi(mymacro,18) @code{@@ctrl@{--a@}} @ctrl{--a} formatting.texi(mymacro,18) @code{@@dfn@{--a@}} @dfn{--a} formatting.texi(mymacro,18) @code{@@dmn@{--a@}} @dmn{--a} formatting.texi(mymacro,18) @code{@@email@{--a,--b@}} @email{--a,--b} formatting.texi(mymacro,18) @code{@@email@{,--b@}} @email{,--b} formatting.texi(mymacro,18) @code{@@email@{--a@}} @email{--a} formatting.texi(mymacro,18) @code{@@emph@{--a@}} @emph{--a} formatting.texi(mymacro,18) @code{@@env@{--a@}} @env{--a} formatting.texi(mymacro,18) @code{@@file@{--a@}} @file{--a} formatting.texi(mymacro,18) @code{@@i@{--a@}} @i{--a} formatting.texi(mymacro,18) @code{@@kbd@{--a@}} @kbd{--a} formatting.texi(mymacro,18) @code{@@key@{--a@}} @key{--a} formatting.texi(mymacro,18) @code{@@math@{--a @{\frac@{1@}@{2@}@} @@minus@{@}@}} @math{--a {\frac{1}{2}} @minus{}} formatting.texi(mymacro,18) @code{@@option@{--a@}} @option{--a} formatting.texi(mymacro,18) @code{@@r@{--a@}} @r{--a} formatting.texi(mymacro,18) @code{@@samp@{--a@}} @samp{--a} formatting.texi(mymacro,18) @code{@@sc@{--a@}} @sc{--a} formatting.texi(mymacro,18) @code{@@strong@{--a@}} @strong{--a} formatting.texi(mymacro,18) @code{@@t@{--a@}} @t{--a} formatting.texi(mymacro,18) @code{@@sansserif@{--a@}} @sansserif{--a} formatting.texi(mymacro,18) @code{@@titlefont@{--a@}} @titlefont{--a} formatting.texi(mymacro,18) @code{@@indicateurl@{--a@}} @indicateurl{--a} formatting.texi(mymacro,18) @code{@@uref@{--a,--b@}} @uref{--a,--b} formatting.texi(mymacro,18) @code{@@uref@{--a@}} @uref{--a} formatting.texi(mymacro,18) @code{@@uref@{,--b@}} @uref{,--b} formatting.texi(mymacro,18) @code{@@uref@{--a,--b,--c@}} @uref{--a,--b,--c} formatting.texi(mymacro,18) @code{@@uref@{,--b,--c@}} @uref{,--b,--c} formatting.texi(mymacro,18) @code{@@uref@{--a,,--c@}} @uref{--a,,--c} formatting.texi(mymacro,18) @code{@@uref@{,,--c@}} @uref{,,--c} formatting.texi(mymacro,18) @code{@@url@{--a,--b@}} @url{--a,--b} formatting.texi(mymacro,18) @code{@@url@{--a,@}} @url{--a,} formatting.texi(mymacro,18) @code{@@url@{,--b@}} @url{,--b} formatting.texi(mymacro,18) @code{@@var@{--a@}} @var{--a} formatting.texi(mymacro,18) @code{@@verb@{:--a:@}} @verb{:--a:} formatting.texi(mymacro,18) @code{@@verb@{:a < & @@ % " -- b:@}} @verb{:a < & @ % " -- b:} formatting.texi(mymacro,18) @code{@@w@{@}} @w{} formatting.texi(mymacro,18) @code{@@H@{a@}} @H{a} formatting.texi(mymacro,18) @code{@@H@{--a@}} @H{--a} formatting.texi(mymacro,18) @code{@@dotaccent@{a@}} @dotaccent{a} formatting.texi(mymacro,18) @code{@@dotaccent@{--a@}} @dotaccent{--a} formatting.texi(mymacro,18) @code{@@ringaccent@{a@}} @ringaccent{a} formatting.texi(mymacro,18) @code{@@ringaccent@{--a@}} @ringaccent{--a} formatting.texi(mymacro,18) @code{@@tieaccent@{a@}} @tieaccent{a} formatting.texi(mymacro,18) @code{@@tieaccent@{--a@}} @tieaccent{--a} formatting.texi(mymacro,18) @code{@@u@{a@}} @u{a} formatting.texi(mymacro,18) @code{@@u@{--a@}} @u{--a} formatting.texi(mymacro,18) @code{@@ubaraccent@{a@}} @ubaraccent{a} formatting.texi(mymacro,18) @code{@@ubaraccent@{--a@}} @ubaraccent{--a} formatting.texi(mymacro,18) @code{@@udotaccent@{a@}} @udotaccent{a} formatting.texi(mymacro,18) @code{@@udotaccent@{--a@}} @udotaccent{--a} formatting.texi(mymacro,18) @code{@@v@{a@}} @v{a} formatting.texi(mymacro,18) @code{@@v@{--a@}} @v{--a} formatting.texi(mymacro,18) @code{@@,@{c@}} @,{c} formatting.texi(mymacro,18) @code{@@,@{--c@}} @,{--c} formatting.texi(mymacro,18) @code{@@ogonek@{a@}} @ogonek{a} formatting.texi(mymacro,18) @code{@@ogonek@{--a@}} @ogonek{--a} formatting.texi(mymacro,18) @code{@@footnote@{in footnote@}} @footnote{in footnote} formatting.texi(mymacro,18) @code{@@footnote@{in footnote2@}} @footnote{in footnote2} formatting.texi(mymacro,18) formatting.texi(mymacro,18) @code{@@image@{f--ile@}} @image{f--ile} formatting.texi(mymacro,18) @code{@@image@{f--ile,l--i@}} @image{f--ile,l--i} formatting.texi(mymacro,18) @code{@@image@{f--ile,,l--e@}} @image{f--ile,,l--e} formatting.texi(mymacro,18) @code{@@image@{f--ile,,,alt@}} @image{f--ile,,,alt} formatting.texi(mymacro,18) @code{@@image@{f--ile,,,,e-d-xt@}} @image{f--ile,,,,e--xt} formatting.texi(mymacro,18) @code{@@image@{f--ile,aze,az,alt,e--xt@}} @image{f--ile,aze,az,alt,e--xt} formatting.texi(mymacro,18) @code{@@image@{f-ile,aze,,a--lt@}} @image{f-ile,aze,,a--lt} formatting.texi(mymacro,18) @code{@@image@{@@file@{f--ile@}@@@@@@.,aze,az,alt,@@file@{file ext@} e--xt@@@}} @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@}} formatting.texi(mymacro,18) formatting.texi(mymacro,18) @sp 2 formatting.texi(mymacro,18) formatting.texi(mymacro,18) @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} formatting.texi(mymacro,18) @clickstyle @result formatting.texi(mymacro,18) After clickstyle @result{} formatting.texi(mymacro,18) @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} formatting.texi(mymacro,18) @clickstyle @arrow formatting.texi(mymacro,18) formatting.texi(mymacro,18) @quotation formatting.texi(mymacro,18) A quot---ation formatting.texi(mymacro,18) @end quotation formatting.texi(mymacro,18) formatting.texi(mymacro,18) @quotation Note formatting.texi(mymacro,18) A Note formatting.texi(mymacro,18) @end quotation formatting.texi(mymacro,18) formatting.texi(mymacro,18) @quotation note formatting.texi(mymacro,18) A note formatting.texi(mymacro,18) @end quotation formatting.texi(mymacro,18) formatting.texi(mymacro,18) @quotation Caution formatting.texi(mymacro,18) Caution formatting.texi(mymacro,18) @end quotation formatting.texi(mymacro,18) formatting.texi(mymacro,18) @quotation Important formatting.texi(mymacro,18) Important formatting.texi(mymacro,18) @end quotation formatting.texi(mymacro,18) formatting.texi(mymacro,18) @quotation Tip formatting.texi(mymacro,18) a Tip formatting.texi(mymacro,18) @end quotation formatting.texi(mymacro,18) formatting.texi(mymacro,18) @quotation Warning formatting.texi(mymacro,18) a Warning. formatting.texi(mymacro,18) @end quotation formatting.texi(mymacro,18) formatting.texi(mymacro,18) @quotation something @'e @TeX{} formatting.texi(mymacro,18) The something @'e @TeX{} is here. formatting.texi(mymacro,18) @end quotation formatting.texi(mymacro,18) formatting.texi(mymacro,18) @quotation @@ at the end of line @ formatting.texi(mymacro,18) A @@ at the end of the @@quotation line. formatting.texi(mymacro,18) @end quotation formatting.texi(mymacro,18) formatting.texi(mymacro,18) @quotation something, other thing formatting.texi(mymacro,18) something, other thing formatting.texi(mymacro,18) @end quotation formatting.texi(mymacro,18) formatting.texi(mymacro,18) @quotation Note, the note formatting.texi(mymacro,18) Note, the note formatting.texi(mymacro,18) @end quotation formatting.texi(mymacro,18) formatting.texi(mymacro,18) @quotation formatting.texi(mymacro,18) @end quotation formatting.texi(mymacro,18) formatting.texi(mymacro,18) @quotation Empty formatting.texi(mymacro,18) @end quotation formatting.texi(mymacro,18) formatting.texi(mymacro,18) @quotation @asis{} formatting.texi(mymacro,18) @end quotation formatting.texi(mymacro,18) formatting.texi(mymacro,18) @quotation @* formatting.texi(mymacro,18) @end quotation formatting.texi(mymacro,18) formatting.texi(mymacro,18) @smallquotation formatting.texi(mymacro,18) A small quot---ation formatting.texi(mymacro,18) @end smallquotation formatting.texi(mymacro,18) formatting.texi(mymacro,18) @smallquotation Note formatting.texi(mymacro,18) A small Note formatting.texi(mymacro,18) @end smallquotation formatting.texi(mymacro,18) formatting.texi(mymacro,18) @smallquotation something, other thing formatting.texi(mymacro,18) something, other thing formatting.texi(mymacro,18) @end smallquotation formatting.texi(mymacro,18) formatting.texi(mymacro,18) @itemize formatting.texi(mymacro,18) @item i--temize formatting.texi(mymacro,18) @end itemize formatting.texi(mymacro,18) formatting.texi(mymacro,18) @itemize + formatting.texi(mymacro,18) @item i--tem + formatting.texi(mymacro,18) @end itemize formatting.texi(mymacro,18) formatting.texi(mymacro,18) @itemize @bullet formatting.texi(mymacro,18) @item b--ullet formatting.texi(mymacro,18) @end itemize formatting.texi(mymacro,18) formatting.texi(mymacro,18) @itemize @minus formatting.texi(mymacro,18) @item minu--s formatting.texi(mymacro,18) @end itemize formatting.texi(mymacro,18) formatting.texi(mymacro,18) @itemize @emph formatting.texi(mymacro,18) @item e--mph item formatting.texi(mymacro,18) @end itemize formatting.texi(mymacro,18) formatting.texi(mymacro,18) @itemize @emph{after emph} formatting.texi(mymacro,18) @c comment in itemize formatting.texi(mymacro,18) @item e--mph item formatting.texi(mymacro,18) @end itemize formatting.texi(mymacro,18) formatting.texi(mymacro,18) @itemize @bullet{} a--n itemize line formatting.texi(mymacro,18) @cindex index entry within itemize formatting.texi(mymacro,18) @item i--tem 1 formatting.texi(mymacro,18) @item i--tem 2 formatting.texi(mymacro,18) @end itemize formatting.texi(mymacro,18) formatting.texi(mymacro,18) @enumerate formatting.texi(mymacro,18) @item e--numerate formatting.texi(mymacro,18) @end enumerate formatting.texi(mymacro,18) formatting.texi(mymacro,18) @multitable @columnfractions 6 7 formatting.texi(mymacro,18) @headitem mu--ltitable headitem @tab another tab formatting.texi(mymacro,18) @item mu--ltitable item @tab multitable tab formatting.texi(mymacro,18) @c comment in multitable formatting.texi(mymacro,18) @item mu--ltitable item 2 @tab multitable tab 2 formatting.texi(mymacro,18) @cindex index entry within multitable formatting.texi(mymacro,18) @item lone mu--ltitable item formatting.texi(mymacro,18) @end multitable formatting.texi(mymacro,18) formatting.texi(mymacro,18) @multitable {truc} {bidule} formatting.texi(mymacro,18) @item truc @tab bidule formatting.texi(mymacro,18) @end multitable formatting.texi(mymacro,18) formatting.texi(mymacro,18) @example formatting.texi(mymacro,18) e--xample some formatting.texi(mymacro,18) text formatting.texi(mymacro,18) @end example formatting.texi(mymacro,18) formatting.texi(mymacro,18) @smallexample formatting.texi(mymacro,18) s--mallexample formatting.texi(mymacro,18) @end smallexample formatting.texi(mymacro,18) formatting.texi(mymacro,18) @display formatting.texi(mymacro,18) d--isplay formatting.texi(mymacro,18) @end display formatting.texi(mymacro,18) formatting.texi(mymacro,18) @smalldisplay formatting.texi(mymacro,18) s--malldisplay formatting.texi(mymacro,18) @end smalldisplay formatting.texi(mymacro,18) formatting.texi(mymacro,18) @lisp formatting.texi(mymacro,18) l--isp formatting.texi(mymacro,18) @end lisp formatting.texi(mymacro,18) formatting.texi(mymacro,18) @smalllisp formatting.texi(mymacro,18) s--malllisp formatting.texi(mymacro,18) @end smalllisp formatting.texi(mymacro,18) formatting.texi(mymacro,18) @format formatting.texi(mymacro,18) f--ormat formatting.texi(mymacro,18) @end format formatting.texi(mymacro,18) formatting.texi(mymacro,18) @smallformat formatting.texi(mymacro,18) s--mallformat formatting.texi(mymacro,18) @end smallformat formatting.texi(mymacro,18) formatting.texi(mymacro,18) @deffn c--ategory d--effn_name a--rguments... formatting.texi(mymacro,18) d--effn formatting.texi(mymacro,18) @end deffn formatting.texi(mymacro,18) formatting.texi(mymacro,18) @deffn cate--gory de--ffn_name ar--guments @ formatting.texi(mymacro,18) more args @* even more so formatting.texi(mymacro,18) def--fn formatting.texi(mymacro,18) @end deffn formatting.texi(mymacro,18) formatting.texi(mymacro,18) @deffn fset @var{i} a g formatting.texi(mymacro,18) @cindex index entry within deffn formatting.texi(mymacro,18) @deffnx {cmde} truc {} formatting.texi(mymacro,18) @deffnx Command {log trap} {} formatting.texi(mymacro,18) @deffnx Command { log trap1} {} formatting.texi(mymacro,18) @deffnx Command {log trap2 } {} formatting.texi(mymacro,18) @deffnx cmde @b{id ule} truc formatting.texi(mymacro,18) @deffnx cmde2 @b{id @samp{i} ule} truc formatting.texi(mymacro,18) @deffnx @b{id @samp{i} ule} formatting.texi(mymacro,18) @deffnx formatting.texi(mymacro,18) @deffnx aaa formatting.texi(mymacro,18) @deffnx {} {} formatting.texi(mymacro,18) @deffnx{} formatting.texi(mymacro,18) @deffnx{} machin formatting.texi(mymacro,18) @deffnx{} {bidule machin} formatting.texi(mymacro,18) @deffnx{truc} machin formatting.texi(mymacro,18) @deffnx{truc} { } formatting.texi(mymacro,18) @deffnx{truc} followed by a comment formatting.texi(mymacro,18) @c comment formatting.texi(mymacro,18) @deffnx{truc} formatting.texi(mymacro,18) @deffnx{} {} formatting.texi(mymacro,18) @deffnx {truc} a b c d e @b{f g} {h i} formatting.texi(mymacro,18) @deffnx {truc} deffnx before end deffn formatting.texi(mymacro,18) @end deffn formatting.texi(mymacro,18) formatting.texi(mymacro,18) @deffn empty deffn formatting.texi(mymacro,18) @end deffn formatting.texi(mymacro,18) formatting.texi(mymacro,18) @deffn empty deffn with deffnx formatting.texi(mymacro,18) @c comment between deffn and deffnx formatting.texi(mymacro,18) @deffnx empty deffnx formatting.texi(mymacro,18) @end deffn formatting.texi(mymacro,18) formatting.texi(mymacro,18) @deffn fset @var{i} a g formatting.texi(mymacro,18) @deffnx {cmde} truc {} formatting.texi(mymacro,18) @c comment formatting.texi(mymacro,18) text in def item for second def item formatting.texi(mymacro,18) @end deffn formatting.texi(mymacro,18) formatting.texi(mymacro,18) @defvr c--ategory d--efvr_name formatting.texi(mymacro,18) d--efvr formatting.texi(mymacro,18) @end defvr formatting.texi(mymacro,18) formatting.texi(mymacro,18) @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... formatting.texi(mymacro,18) d--eftypefn formatting.texi(mymacro,18) @end deftypefn formatting.texi(mymacro,18) formatting.texi(mymacro,18) @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... formatting.texi(mymacro,18) d--eftypeop formatting.texi(mymacro,18) @end deftypeop formatting.texi(mymacro,18) formatting.texi(mymacro,18) @deftypevr c--ategory t--ype d--eftypevr_name formatting.texi(mymacro,18) d--eftypevr formatting.texi(mymacro,18) @end deftypevr formatting.texi(mymacro,18) formatting.texi(mymacro,18) @defcv c--ategory c--lass d--efcv_name formatting.texi(mymacro,18) d--efcv formatting.texi(mymacro,18) @end defcv formatting.texi(mymacro,18) formatting.texi(mymacro,18) @defop c--ategory c--lass d--efop_name a--rguments... formatting.texi(mymacro,18) d--efop formatting.texi(mymacro,18) @end defop formatting.texi(mymacro,18) formatting.texi(mymacro,18) @deftp c--ategory d--eftp_name a--ttributes... formatting.texi(mymacro,18) d--eftp formatting.texi(mymacro,18) @end deftp formatting.texi(mymacro,18) formatting.texi(mymacro,18) @defun d--efun_name a--rguments... formatting.texi(mymacro,18) d--efun formatting.texi(mymacro,18) @end defun formatting.texi(mymacro,18) formatting.texi(mymacro,18) @defmac d--efmac_name a--rguments... formatting.texi(mymacro,18) d--efmac formatting.texi(mymacro,18) @end defmac formatting.texi(mymacro,18) formatting.texi(mymacro,18) @defspec d--efspec_name a--rguments... formatting.texi(mymacro,18) d--efspec formatting.texi(mymacro,18) @end defspec formatting.texi(mymacro,18) formatting.texi(mymacro,18) @defvar d--efvar_name argvar argvar1 formatting.texi(mymacro,18) d--efvar formatting.texi(mymacro,18) @end defvar formatting.texi(mymacro,18) formatting.texi(mymacro,18) @defopt d--efopt_name formatting.texi(mymacro,18) d--efopt formatting.texi(mymacro,18) @end defopt formatting.texi(mymacro,18) formatting.texi(mymacro,18) @deftypefun t--ype d--eftypefun_name a--rguments... formatting.texi(mymacro,18) d--eftypefun formatting.texi(mymacro,18) @end deftypefun formatting.texi(mymacro,18) formatting.texi(mymacro,18) @deftypevar t--ype d--eftypevar_name formatting.texi(mymacro,18) d--eftypevar formatting.texi(mymacro,18) @end deftypevar formatting.texi(mymacro,18) formatting.texi(mymacro,18) @defivar c--lass d--efivar_name formatting.texi(mymacro,18) d--efivar formatting.texi(mymacro,18) @end defivar formatting.texi(mymacro,18) formatting.texi(mymacro,18) @deftypeivar c--lass t--ype d--eftypeivar_name formatting.texi(mymacro,18) d--eftypeivar formatting.texi(mymacro,18) @end deftypeivar formatting.texi(mymacro,18) formatting.texi(mymacro,18) @defmethod c--lass d--efmethod_name a--rguments... formatting.texi(mymacro,18) d--efmethod formatting.texi(mymacro,18) @end defmethod formatting.texi(mymacro,18) formatting.texi(mymacro,18) @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... formatting.texi(mymacro,18) d--eftypemethod formatting.texi(mymacro,18) @end deftypemethod formatting.texi(mymacro,18) formatting.texi(mymacro,18) @code{@@xref@{c---hapter@@@@, cross r---ef name@@@@, t---itle@@@@, file n---ame@@@@, ma---nual@@@@@}} @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@}. formatting.texi(mymacro,18) @code{@@ref@{chapter, cross ref name, title, file name, manual@}} @ref{chapter, cross ref name, title, file name, manual} formatting.texi(mymacro,18) @code{@@pxref@{chapter, cross ref name, title, file name, manual@}} @pxref{chapter, cross ref name, title, file name, manual} formatting.texi(mymacro,18) @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} formatting.texi(mymacro,18) formatting.texi(mymacro,18) @code{@@ref@{chapter@}} @ref{chapter} formatting.texi(mymacro,18) @code{@@xref@{chapter@}} @xref{chapter}. formatting.texi(mymacro,18) @code{@@pxref@{chapter@}} @pxref{chapter} formatting.texi(mymacro,18) @code{@@ref@{s--ect@@comma@{@}ion@}} @ref{s--ect@comma{}ion} formatting.texi(mymacro,18) formatting.texi(mymacro,18) @code{@@ref@{s--ect@@comma@{@}ion, a @@comma@{@} in cross formatting.texi(mymacro,18) ref, a comma@@comma@{@} in title, a comma@@comma@{@} in file, a @@comma@{@} in manual name @}} formatting.texi(mymacro,18) @ref{s--ect@comma{}ion, a @comma{} in cross formatting.texi(mymacro,18) ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } formatting.texi(mymacro,18) formatting.texi(mymacro,18) @code{@@ref@{chapter,cross ref name@}} @ref{chapter,cross ref name} formatting.texi(mymacro,18) @code{@@ref@{chapter,,title@}} @ref{chapter,,title} formatting.texi(mymacro,18) @code{@@ref@{chapter,,,file name@}} @ref{chapter,,,file name} formatting.texi(mymacro,18) @code{@@ref@{chapter,,,,manual@}} @ref{chapter,,,,manual} formatting.texi(mymacro,18) @code{@@ref@{chapter,cross ref name,title,@}} @ref{chapter,cross ref name,title,} formatting.texi(mymacro,18) @code{@@ref@{chapter,cross ref name,,file name@}} @ref{chapter,cross ref name,,file name} formatting.texi(mymacro,18) @code{@@ref@{chapter,cross ref name,,,manual@}} @ref{chapter,cross ref name,,,manual} formatting.texi(mymacro,18) @code{@@ref@{chapter,cross ref name,title,file name@}} @ref{chapter,cross ref name,title,file name} formatting.texi(mymacro,18) @code{@@ref@{chapter,cross ref name,title,,manual@}} @ref{chapter,cross ref name,title,,manual} formatting.texi(mymacro,18) @code{@@ref@{chapter,cross ref name,title, file name, manual@}} @ref{chapter,cross ref name,title, file name, manual} formatting.texi(mymacro,18) @code{@@ref@{chapter,,title,file name@}} @ref{chapter,,title,file name} formatting.texi(mymacro,18) @code{@@ref@{chapter,,title,,manual@}} @ref{chapter,,title,,manual} formatting.texi(mymacro,18) @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} formatting.texi(mymacro,18) @code{@@ref@{chapter,,,file name,manual@}} @ref{chapter,,,file name,manual} formatting.texi(mymacro,18) formatting.texi(mymacro,18) formatting.texi(mymacro,18) @code{@@ref@{(pman)anode,cross ref name@}} @ref{(pman)anode,cross ref name} formatting.texi(mymacro,18) @code{@@ref@{(pman)anode,,title@}} @ref{(pman)anode,,title} formatting.texi(mymacro,18) @code{@@ref@{(pman)anode,,,file name@}} @ref{(pman)anode,,,file name} formatting.texi(mymacro,18) @code{@@ref@{(pman)anode,,,,manual@}} @ref{(pman)anode,,,,manual} formatting.texi(mymacro,18) @code{@@ref@{(pman)anode,cross ref name,title,@}} @ref{(pman)anode,cross ref name,title,} formatting.texi(mymacro,18) @code{@@ref@{(pman)anode,cross ref name,,file name@}} @ref{(pman)anode,cross ref name,,file name} formatting.texi(mymacro,18) @code{@@ref@{(pman)anode,cross ref name,,,manual@}} @ref{(pman)anode,cross ref name,,,manual} formatting.texi(mymacro,18) @code{@@ref@{(pman)anode,cross ref name,title,file name@}} @ref{(pman)anode,cross ref name,title,file name} formatting.texi(mymacro,18) @code{@@ref@{(pman)anode,cross ref name,title,,manual@}} @ref{(pman)anode,cross ref name,title,,manual} formatting.texi(mymacro,18) @code{@@ref@{(pman)anode,cross ref name,title, file name, manual@}} @ref{(pman)anode,cross ref name,title, file name, manual} formatting.texi(mymacro,18) @code{@@ref@{(pman)anode,,title,file name@}} @ref{(pman)anode,,title,file name} formatting.texi(mymacro,18) @code{@@ref@{(pman)anode,,title,,manual@}} @ref{(pman)anode,,title,,manual} formatting.texi(mymacro,18) @code{@@ref@{(pman)anode,,title, file name, manual@}} @ref{(pman)anode,,title, file name, manual} formatting.texi(mymacro,18) @code{@@ref@{(pman)anode,,,file name,manual@}} @ref{(pman)anode,,,file name,manual} formatting.texi(mymacro,18) formatting.texi(mymacro,18) formatting.texi(mymacro,18) @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} formatting.texi(mymacro,18) @code{@@inforef@{chapter@}} @inforef{chapter} formatting.texi(mymacro,18) @code{@@inforef@{chapter, cross ref name@}} @inforef{chapter, cross ref name} formatting.texi(mymacro,18) @code{@@inforef@{chapter,,file name@}} @inforef{chapter,,file name} formatting.texi(mymacro,18) @code{@@inforef@{node, cross ref name, file name@}} @inforef{node, cross ref name, file name} formatting.texi(mymacro,18) @code{@@inforef@{node@}} @inforef{node} formatting.texi(mymacro,18) @code{@@inforef@{node, cross ref name@}} @inforef{node, cross ref name} formatting.texi(mymacro,18) @code{@@inforef@{node,,file name@}} @inforef{node,,file name} formatting.texi(mymacro,18) @code{@@inforef@{chapter, cross ref name, file name, spurious arg@}} @inforef{chapter, cross ref name, file name, spurious arg} formatting.texi(mymacro,18) formatting.texi(mymacro,18) @code{@@inforef@{s--ect@@comma@{@}ion, a @@comma@{@} in cross formatting.texi(mymacro,18) ref, a comma@@comma@{@} in file@}} formatting.texi(mymacro,18) @inforef{s--ect@comma{}ion, a @comma{} in cross formatting.texi(mymacro,18) ref, a comma@comma{} in file} formatting.texi(mymacro,18) formatting.texi(mymacro,18) formatting.texi(mymacro,18) @table @bullet formatting.texi(mymacro,18) @c comment in table formatting.texi(mymacro,18) @item a formatting.texi(mymacro,18) l--ine formatting.texi(mymacro,18) @end table formatting.texi(mymacro,18) formatting.texi(mymacro,18) @vtable @asis formatting.texi(mymacro,18) @item a formatting.texi(mymacro,18) @c comment between item and itemx formatting.texi(mymacro,18) @itemx b formatting.texi(mymacro,18) l--ine formatting.texi(mymacro,18) @end vtable formatting.texi(mymacro,18) formatting.texi(mymacro,18) @ftable @minus formatting.texi(mymacro,18) @item a formatting.texi(mymacro,18) @cindex index entry between item and itemx formatting.texi(mymacro,18) @itemx b formatting.texi(mymacro,18) l--ine formatting.texi(mymacro,18) @end ftable formatting.texi(mymacro,18) formatting.texi(mymacro,18) @cartouche formatting.texi(mymacro,18) c--artouche formatting.texi(mymacro,18) @end cartouche formatting.texi(mymacro,18) formatting.texi(mymacro,18) @flushleft formatting.texi(mymacro,18) f--lushleft formatting.texi(mymacro,18) @end flushleft formatting.texi(mymacro,18) formatting.texi(mymacro,18) @flushright formatting.texi(mymacro,18) f--lushright formatting.texi(mymacro,18) @end flushright formatting.texi(mymacro,18) formatting.texi(mymacro,18) @center ce--ntered line formatting.texi(mymacro,18) formatting.texi(mymacro,18) @verbatiminclude simplest.texi formatting.texi(mymacro,18) formatting.texi(mymacro,18) @verbatim formatting.texi(mymacro,18) in verbatim '' formatting.texi(mymacro,18) @end verbatim formatting.texi(mymacro,18) formatting.texi(mymacro,18) formatting.texi(mymacro,18) @html formatting.texi(mymacro,18) html '' formatting.texi(mymacro,18) @end html formatting.texi(mymacro,18) formatting.texi(mymacro,18) formatting.texi(mymacro,18) formatting.texi(mymacro,18) @majorheading majorheading formatting.texi(mymacro,18) formatting.texi(mymacro,18) @chapheading chapheading formatting.texi(mymacro,18) formatting.texi(mymacro,18) @heading heading formatting.texi(mymacro,18) formatting.texi(mymacro,18) @subheading subheading formatting.texi(mymacro,18) formatting.texi(mymacro,18) @subsubheading subsubheading formatting.texi(mymacro,18) formatting.texi(mymacro,18) @c makeinfo cannot handle that formatting.texi(mymacro,18) formatting.texi(mymacro,18) @code{@@acronym@{--a,an accronym @@comma@{@} @@enddots@{@}@}} @acronym{--a,an accronym @comma{} @enddots{}} formatting.texi(mymacro,18) @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude--@@comma@{@} @@b@{Autonome@} @}} @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } formatting.texi(mymacro,18) @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} formatting.texi(mymacro,18) formatting.texi(mymacro,18) @code{@@math@{--a@@minus@{@} @{\frac@{1@}@{2@}@}@}} @math{--a@minus{} {\frac{1}{2}}} formatting.texi(mymacro,18) formatting.texi(mymacro,18) @code{@@image@{f-ile,,,alt@@verb@{:jk _" %@:@}@}} @image{f-ile,,,alt@verb{:jk _" %@:}} formatting.texi(mymacro,18) @code{@@image@{f--ile,aze,az,@@verb@{:jk _" %@@:@} @@b@{in b "@},e--xt@}} @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} formatting.texi(mymacro,18) @code{@@image@{file@@verb@{:jk _" %@@:@},,,alt@@verb@{:jk _" %@@:@}@}} @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} formatting.texi(mymacro,18) formatting.texi(mymacro,18) @set invalid formatting.texi(mymacro,18) formatting.texi(mymacro,18) formatting.texi(mymacro,18) @c invalid texinfo formatting.texi(mymacro,18) formatting.texi(mymacro,18) Somehow invalid use of @@,:@* formatting.texi(mymacro,18) @@, @, formatting.texi(mymacro,18) @* formatting.texi(mymacro,18) @@,@@"u @,@"u formatting.texi(mymacro,18) formatting.texi(mymacro,18) Invalid use of @@':@* formatting.texi(mymacro,18) @@' @' formatting.texi(mymacro,18) @* formatting.texi(mymacro,18) @@'@@"u @'@"u formatting.texi(mymacro,18) formatting.texi(mymacro,18) @c only i or j as arg formatting.texi(mymacro,18) @@dotless@{truc@} @dotless{truc} formatting.texi(mymacro,18) @@dotless@{ij@} @dotless{ij} formatting.texi(mymacro,18) @code{@@dotless@{--a@}} @dotless{--a} formatting.texi(mymacro,18) @code{@@dotless@{a@}} @dotless{a} formatting.texi(mymacro,18) formatting.texi(mymacro,18) @c braces missing formatting.texi(mymacro,18) @@TeX, but without brace @TeX formatting.texi(mymacro,18) formatting.texi(mymacro,18) @c unknown command formatting.texi(mymacro,18) @code{@@#} @# formatting.texi(mymacro,18) formatting.texi(mymacro,18) @c no arg formatting.texi(mymacro,18) @code{@@w@{--a@}} @w{--a} formatting.texi(mymacro,18) formatting.texi(mymacro,18) @c no file formatting.texi(mymacro,18) @code{@@image@{,1--xt@}} @image{,1--xt} formatting.texi(mymacro,18) @code{@@image@{,,2--xt@}} @image{,,2--xt} formatting.texi(mymacro,18) @code{@@image@{,,,3--xt@}} @image{,,,3--xt} formatting.texi(mymacro,18) formatting.texi(mymacro,18) @sp formatting.texi(mymacro,18) formatting.texi(mymacro,18) @c braces missing formatting.texi(mymacro,18) @itemize @emph after emph formatting.texi(mymacro,18) @item e--mph item formatting.texi(mymacro,18) @end itemize formatting.texi(mymacro,18) formatting.texi(mymacro,18) @c braces missing formatting.texi(mymacro,18) @itemize @bullet a--n itemize line formatting.texi(mymacro,18) @item i--tem 1 formatting.texi(mymacro,18) @item i--tem 2 formatting.texi(mymacro,18) @end itemize formatting.texi(mymacro,18) formatting.texi(mymacro,18) @c deffnx after deff lines formatting.texi(mymacro,18) @deffn fun formatting.texi(mymacro,18) @deffnx truc machin bidule chose and } formatting.texi(mymacro,18) @deffnx truc machin bidule chose and } after formatting.texi(mymacro,18) @deffnx truc machin bidule chose and { formatting.texi(mymacro,18) @deffnx truc machin bidule chose and { and after formatting.texi(mymacro,18) @deffnx {truc} followed by a comment formatting.texi(mymacro,18) @c comment formatting.texi(mymacro,18) Various deff lines formatting.texi(mymacro,18) @deffnx {truc} after a deff item formatting.texi(mymacro,18) @end deffn formatting.texi(mymacro,18) formatting.texi(mymacro,18) @c node is non existent, or missing first arg formatting.texi(mymacro,18) @code{@@ref@{node@}} @ref{node} formatting.texi(mymacro,18) formatting.texi(mymacro,18) @code{@@ref@{,cross ref name@}} @ref{,cross ref name} formatting.texi(mymacro,18) @code{@@ref@{,,title@}} @ref{,,title} formatting.texi(mymacro,18) @code{@@ref@{,,,file name@}} @ref{,,,file name} formatting.texi(mymacro,18) @code{@@ref@{,,,,manual@}} @ref{,,,,manual} formatting.texi(mymacro,18) @code{@@ref@{node,cross ref name@}} @ref{node,cross ref name} formatting.texi(mymacro,18) @code{@@ref@{node,,title@}} @ref{node,,title} formatting.texi(mymacro,18) @code{@@ref@{node,,,file name@}} @ref{node,,,file name} formatting.texi(mymacro,18) @code{@@ref@{node,,,,manual@}} @ref{node,,,,manual} formatting.texi(mymacro,18) @code{@@ref@{node,cross ref name,title,@}} @ref{node,cross ref name,title,} formatting.texi(mymacro,18) @code{@@ref@{node,cross ref name,,file name@}} @ref{node,cross ref name,,file name} formatting.texi(mymacro,18) @code{@@ref@{node,cross ref name,,,manual@}} @ref{node,cross ref name,,,manual} formatting.texi(mymacro,18) @code{@@ref@{node,cross ref name,title,file name@}} @ref{node,cross ref name,title,file name} formatting.texi(mymacro,18) @code{@@ref@{node,cross ref name,title,,manual@}} @ref{node,cross ref name,title,,manual} formatting.texi(mymacro,18) @code{@@ref@{node,cross ref name,title, file name, manual@}} @ref{node,cross ref name,title, file name, manual} formatting.texi(mymacro,18) @code{@@ref@{node,,title,file name@}} @ref{node,,title,file name} formatting.texi(mymacro,18) @code{@@ref@{node,,title,,manual@}} @ref{node,,title,,manual} formatting.texi(mymacro,18) @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} formatting.texi(mymacro,18) @code{@@ref@{node,,title, file name, manual@}} @ref{node,,title, file name, manual} formatting.texi(mymacro,18) @code{@@ref@{node,,,file name,manual@}} @ref{node,,,file name,manual} formatting.texi(mymacro,18) @code{@@ref@{,cross ref name,title,@}} @ref{,cross ref name,title,} formatting.texi(mymacro,18) @code{@@ref@{,cross ref name,,file name@}} @ref{,cross ref name,,file name} formatting.texi(mymacro,18) @code{@@ref@{,cross ref name,,,manual@}} @ref{,cross ref name,,,manual} formatting.texi(mymacro,18) @code{@@ref@{,cross ref name,title,file name@}} @ref{,cross ref name,title,file name} formatting.texi(mymacro,18) @code{@@ref@{,cross ref name,title,,manual@}} @ref{,cross ref name,title,,manual} formatting.texi(mymacro,18) @code{@@ref@{,cross ref name,title, file name, manual@}} @ref{,cross ref name,title, file name, manual} formatting.texi(mymacro,18) @code{@@ref@{,,title,file name@}} @ref{,,title,file name} formatting.texi(mymacro,18) @code{@@ref@{,,title,,manual@}} @ref{,,title,,manual} formatting.texi(mymacro,18) @code{@@ref@{,,title, file name, manual@}} @ref{,,title, file name, manual} formatting.texi(mymacro,18) @code{@@ref@{,,,file name,manual@}} @ref{,,,file name,manual} formatting.texi(mymacro,18) formatting.texi(mymacro,18) @code{@@inforef@{,cross ref name @}} @inforef{,cross ref name } formatting.texi(mymacro,18) @code{@@inforef@{,,file name@}} @inforef{,,file name} formatting.texi(mymacro,18) @code{@@inforef@{,cross ref name, file name@}} @inforef{,cross ref name, file name} formatting.texi(mymacro,18) @code{@@inforef@{@}} @inforef{} formatting.texi(mymacro,18) formatting.texi(mymacro,18) formatting.texi(,19) @end copying formatting.texi(,20) formatting.texi(,21) @titlepage formatting.texi(,22) @title title --a formatting.texi(,23) @subtitle formatting subtitle --a formatting.texi(,24) @subtitle subtitle 2 --a formatting.texi(,25) @author author1 --a with accents in name T@'e@,ca formatting.texi(,26) @author author2 --a formatting.texi(,27) In titlepage formatting.texi(mymacro,28) formatting.texi(mymacro,28) < formatting.texi(mymacro,28) > formatting.texi(mymacro,28) " formatting.texi(mymacro,28) & formatting.texi(mymacro,28) ' formatting.texi(mymacro,28) ` formatting.texi(mymacro,28) formatting.texi(mymacro,28) ``simple-double--three---four----''@* formatting.texi(mymacro,28) code: @code{``simple-double--three---four----''} @* formatting.texi(mymacro,28) asis: @asis{``simple-double--three---four----''} @* formatting.texi(mymacro,28) strong: @strong{``simple-double--three---four----''} @* formatting.texi(mymacro,28) kbd: @kbd{``simple-double--three---four----''} @* formatting.texi(mymacro,28) formatting.texi(mymacro,28) `@w{}`simple-double-@w{}-three---four----'@w{}'@* formatting.texi(mymacro,28) formatting.texi(mymacro,28) @cindex --option formatting.texi(mymacro,28) @cindex `` formatting.texi(mymacro,28) @findex `` formatting.texi(mymacro,28) @findex --foption formatting.texi(mymacro,28) formatting.texi(mymacro,28) @@"u @"u formatting.texi(mymacro,28) @@"@{U@} @"{U} formatting.texi(mymacro,28) @@~n @~n formatting.texi(mymacro,28) @@^a @^a formatting.texi(mymacro,28) @@'e @'e formatting.texi(mymacro,28) @@=o @=o formatting.texi(mymacro,28) @@`i @`i formatting.texi(mymacro,28) @@'@{e@} @'{e} formatting.texi(mymacro,28) @@'@{@@dotless@{i@}@} @'{@dotless{i}} formatting.texi(mymacro,28) @@dotless@{i@} @dotless{i} formatting.texi(mymacro,28) @@dotless@{j@} @dotless{j} formatting.texi(mymacro,28) @@`@{@@=E@} @`{@=E} formatting.texi(mymacro,28) @@l@{@} @l{} formatting.texi(mymacro,28) @@,@{@@'C@} @,{@'C} formatting.texi(mymacro,28) @@,c @,c formatting.texi(mymacro,28) @@,c@@"u @,c@"u @* formatting.texi(mymacro,28) formatting.texi(mymacro,28) @@* @* formatting.texi(mymacro,28) @@ followed by a space formatting.texi(mymacro,28) @ formatting.texi(mymacro,28) @@ followed by a tab formatting.texi(mymacro,28) @ formatting.texi(mymacro,28) @@ followed by a new line formatting.texi(mymacro,28) @ formatting.texi(mymacro,28) @code{@@-} @- formatting.texi(mymacro,28) @code{@@|} @| formatting.texi(mymacro,28) @code{@@:} @: formatting.texi(mymacro,28) @code{@@!} @! formatting.texi(mymacro,28) @code{@@?} @? formatting.texi(mymacro,28) @code{@@.} @. formatting.texi(mymacro,28) @code{@@@@} @@ formatting.texi(mymacro,28) @code{@@@}} @} formatting.texi(mymacro,28) @code{@@@{} @{ formatting.texi(mymacro,28) @code{@@/} @/ formatting.texi(mymacro,28) formatting.texi(mymacro,28) foo vs.@: bar. formatting.texi(mymacro,28) colon :@:And something else. formatting.texi(mymacro,28) semi colon ;@:. formatting.texi(mymacro,28) And ? ?@:. formatting.texi(mymacro,28) Now ! !@:@@ formatting.texi(mymacro,28) but , ,@: formatting.texi(mymacro,28) formatting.texi(mymacro,28) @@TeX @TeX{} formatting.texi(mymacro,28) @@LaTeX @LaTeX{} formatting.texi(mymacro,28) @@bullet @bullet{} formatting.texi(mymacro,28) @@copyright @copyright{} formatting.texi(mymacro,28) @@dots @dots{} formatting.texi(mymacro,28) @@enddots @enddots{} formatting.texi(mymacro,28) @@equiv @equiv{} formatting.texi(mymacro,28) @@error @error{} formatting.texi(mymacro,28) @@expansion @expansion{} formatting.texi(mymacro,28) @@minus @minus{} formatting.texi(mymacro,28) @@point @point{} formatting.texi(mymacro,28) @@print @print{} formatting.texi(mymacro,28) @@result @result{} formatting.texi(mymacro,28) @@today @today{} formatting.texi(mymacro,28) @@aa @aa{} formatting.texi(mymacro,28) @@AA @AA{} formatting.texi(mymacro,28) @@ae @ae{} formatting.texi(mymacro,28) @@oe @oe{} formatting.texi(mymacro,28) @@AE @AE{} formatting.texi(mymacro,28) @@OE @OE{} formatting.texi(mymacro,28) @@o @o{} formatting.texi(mymacro,28) @@O @O{} formatting.texi(mymacro,28) @@ss @ss{} formatting.texi(mymacro,28) @@l @l{} formatting.texi(mymacro,28) @@L @L{} formatting.texi(mymacro,28) @@exclamdown @exclamdown{} formatting.texi(mymacro,28) @@questiondown @questiondown{} formatting.texi(mymacro,28) @@pounds @pounds{} formatting.texi(mymacro,28) @@registeredsymbol @registeredsymbol{} formatting.texi(mymacro,28) @@ordf @ordf{} formatting.texi(mymacro,28) @@ordm @ordm{} formatting.texi(mymacro,28) @@comma @comma{} formatting.texi(mymacro,28) @@quotedblleft @quotedblleft{} formatting.texi(mymacro,28) @@quotedblright @quotedblright{} formatting.texi(mymacro,28) @@quoteleft @quoteleft{} formatting.texi(mymacro,28) @@quoteright @quoteright{} formatting.texi(mymacro,28) @@quotedblbase @quotedblbase{} formatting.texi(mymacro,28) @@quotesinglbase @quotesinglbase{} formatting.texi(mymacro,28) @@guillemetleft @guillemetleft{} formatting.texi(mymacro,28) @@guillemetright @guillemetright{} formatting.texi(mymacro,28) @@guillemotleft @guillemotleft{} formatting.texi(mymacro,28) @@guillemotright @guillemotright{} formatting.texi(mymacro,28) @@guilsinglleft @guilsinglleft{} formatting.texi(mymacro,28) @@guilsinglright @guilsinglright{} formatting.texi(mymacro,28) @@textdegree @textdegree{} formatting.texi(mymacro,28) @@euro @euro{} formatting.texi(mymacro,28) @@arrow @arrow{} formatting.texi(mymacro,28) @@leq @leq{} formatting.texi(mymacro,28) @@geq @geq{} formatting.texi(mymacro,28) formatting.texi(mymacro,28) @code{@@acronym@{--a,an accronym@}} @acronym{--a,an accronym} formatting.texi(mymacro,28) @code{@@acronym@{--a@}} @acronym{--a} formatting.texi(mymacro,28) @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude Autonome @}} @abbr{@'E--. @comma{}A., @'Etude Autonome } formatting.texi(mymacro,28) @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} formatting.texi(mymacro,28) @code{@@asis@{--a@}} @asis{--a} formatting.texi(mymacro,28) @code{@@b@{--a@}} @b{--a} formatting.texi(mymacro,28) @code{@@cite@{--a@}} @cite{--a} formatting.texi(mymacro,28) @code{@@code@{--a@}} @code{--a} formatting.texi(mymacro,28) @code{@@command@{--a@}} @command{--a} formatting.texi(mymacro,28) @code{@@ctrl@{--a@}} @ctrl{--a} formatting.texi(mymacro,28) @code{@@dfn@{--a@}} @dfn{--a} formatting.texi(mymacro,28) @code{@@dmn@{--a@}} @dmn{--a} formatting.texi(mymacro,28) @code{@@email@{--a,--b@}} @email{--a,--b} formatting.texi(mymacro,28) @code{@@email@{,--b@}} @email{,--b} formatting.texi(mymacro,28) @code{@@email@{--a@}} @email{--a} formatting.texi(mymacro,28) @code{@@emph@{--a@}} @emph{--a} formatting.texi(mymacro,28) @code{@@env@{--a@}} @env{--a} formatting.texi(mymacro,28) @code{@@file@{--a@}} @file{--a} formatting.texi(mymacro,28) @code{@@i@{--a@}} @i{--a} formatting.texi(mymacro,28) @code{@@kbd@{--a@}} @kbd{--a} formatting.texi(mymacro,28) @code{@@key@{--a@}} @key{--a} formatting.texi(mymacro,28) @code{@@math@{--a @{\frac@{1@}@{2@}@} @@minus@{@}@}} @math{--a {\frac{1}{2}} @minus{}} formatting.texi(mymacro,28) @code{@@option@{--a@}} @option{--a} formatting.texi(mymacro,28) @code{@@r@{--a@}} @r{--a} formatting.texi(mymacro,28) @code{@@samp@{--a@}} @samp{--a} formatting.texi(mymacro,28) @code{@@sc@{--a@}} @sc{--a} formatting.texi(mymacro,28) @code{@@strong@{--a@}} @strong{--a} formatting.texi(mymacro,28) @code{@@t@{--a@}} @t{--a} formatting.texi(mymacro,28) @code{@@sansserif@{--a@}} @sansserif{--a} formatting.texi(mymacro,28) @code{@@titlefont@{--a@}} @titlefont{--a} formatting.texi(mymacro,28) @code{@@indicateurl@{--a@}} @indicateurl{--a} formatting.texi(mymacro,28) @code{@@uref@{--a,--b@}} @uref{--a,--b} formatting.texi(mymacro,28) @code{@@uref@{--a@}} @uref{--a} formatting.texi(mymacro,28) @code{@@uref@{,--b@}} @uref{,--b} formatting.texi(mymacro,28) @code{@@uref@{--a,--b,--c@}} @uref{--a,--b,--c} formatting.texi(mymacro,28) @code{@@uref@{,--b,--c@}} @uref{,--b,--c} formatting.texi(mymacro,28) @code{@@uref@{--a,,--c@}} @uref{--a,,--c} formatting.texi(mymacro,28) @code{@@uref@{,,--c@}} @uref{,,--c} formatting.texi(mymacro,28) @code{@@url@{--a,--b@}} @url{--a,--b} formatting.texi(mymacro,28) @code{@@url@{--a,@}} @url{--a,} formatting.texi(mymacro,28) @code{@@url@{,--b@}} @url{,--b} formatting.texi(mymacro,28) @code{@@var@{--a@}} @var{--a} formatting.texi(mymacro,28) @code{@@verb@{:--a:@}} @verb{:--a:} formatting.texi(mymacro,28) @code{@@verb@{:a < & @@ % " -- b:@}} @verb{:a < & @ % " -- b:} formatting.texi(mymacro,28) @code{@@w@{@}} @w{} formatting.texi(mymacro,28) @code{@@H@{a@}} @H{a} formatting.texi(mymacro,28) @code{@@H@{--a@}} @H{--a} formatting.texi(mymacro,28) @code{@@dotaccent@{a@}} @dotaccent{a} formatting.texi(mymacro,28) @code{@@dotaccent@{--a@}} @dotaccent{--a} formatting.texi(mymacro,28) @code{@@ringaccent@{a@}} @ringaccent{a} formatting.texi(mymacro,28) @code{@@ringaccent@{--a@}} @ringaccent{--a} formatting.texi(mymacro,28) @code{@@tieaccent@{a@}} @tieaccent{a} formatting.texi(mymacro,28) @code{@@tieaccent@{--a@}} @tieaccent{--a} formatting.texi(mymacro,28) @code{@@u@{a@}} @u{a} formatting.texi(mymacro,28) @code{@@u@{--a@}} @u{--a} formatting.texi(mymacro,28) @code{@@ubaraccent@{a@}} @ubaraccent{a} formatting.texi(mymacro,28) @code{@@ubaraccent@{--a@}} @ubaraccent{--a} formatting.texi(mymacro,28) @code{@@udotaccent@{a@}} @udotaccent{a} formatting.texi(mymacro,28) @code{@@udotaccent@{--a@}} @udotaccent{--a} formatting.texi(mymacro,28) @code{@@v@{a@}} @v{a} formatting.texi(mymacro,28) @code{@@v@{--a@}} @v{--a} formatting.texi(mymacro,28) @code{@@,@{c@}} @,{c} formatting.texi(mymacro,28) @code{@@,@{--c@}} @,{--c} formatting.texi(mymacro,28) @code{@@ogonek@{a@}} @ogonek{a} formatting.texi(mymacro,28) @code{@@ogonek@{--a@}} @ogonek{--a} formatting.texi(mymacro,28) @code{@@footnote@{in footnote@}} @footnote{in footnote} formatting.texi(mymacro,28) @code{@@footnote@{in footnote2@}} @footnote{in footnote2} formatting.texi(mymacro,28) formatting.texi(mymacro,28) @code{@@image@{f--ile@}} @image{f--ile} formatting.texi(mymacro,28) @code{@@image@{f--ile,l--i@}} @image{f--ile,l--i} formatting.texi(mymacro,28) @code{@@image@{f--ile,,l--e@}} @image{f--ile,,l--e} formatting.texi(mymacro,28) @code{@@image@{f--ile,,,alt@}} @image{f--ile,,,alt} formatting.texi(mymacro,28) @code{@@image@{f--ile,,,,e-d-xt@}} @image{f--ile,,,,e--xt} formatting.texi(mymacro,28) @code{@@image@{f--ile,aze,az,alt,e--xt@}} @image{f--ile,aze,az,alt,e--xt} formatting.texi(mymacro,28) @code{@@image@{f-ile,aze,,a--lt@}} @image{f-ile,aze,,a--lt} formatting.texi(mymacro,28) @code{@@image@{@@file@{f--ile@}@@@@@@.,aze,az,alt,@@file@{file ext@} e--xt@@@}} @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@}} formatting.texi(mymacro,28) formatting.texi(mymacro,28) @sp 2 formatting.texi(mymacro,28) formatting.texi(mymacro,28) @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} formatting.texi(mymacro,28) @clickstyle @result formatting.texi(mymacro,28) After clickstyle @result{} formatting.texi(mymacro,28) @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} formatting.texi(mymacro,28) @clickstyle @arrow formatting.texi(mymacro,28) formatting.texi(mymacro,28) @quotation formatting.texi(mymacro,28) A quot---ation formatting.texi(mymacro,28) @end quotation formatting.texi(mymacro,28) formatting.texi(mymacro,28) @quotation Note formatting.texi(mymacro,28) A Note formatting.texi(mymacro,28) @end quotation formatting.texi(mymacro,28) formatting.texi(mymacro,28) @quotation note formatting.texi(mymacro,28) A note formatting.texi(mymacro,28) @end quotation formatting.texi(mymacro,28) formatting.texi(mymacro,28) @quotation Caution formatting.texi(mymacro,28) Caution formatting.texi(mymacro,28) @end quotation formatting.texi(mymacro,28) formatting.texi(mymacro,28) @quotation Important formatting.texi(mymacro,28) Important formatting.texi(mymacro,28) @end quotation formatting.texi(mymacro,28) formatting.texi(mymacro,28) @quotation Tip formatting.texi(mymacro,28) a Tip formatting.texi(mymacro,28) @end quotation formatting.texi(mymacro,28) formatting.texi(mymacro,28) @quotation Warning formatting.texi(mymacro,28) a Warning. formatting.texi(mymacro,28) @end quotation formatting.texi(mymacro,28) formatting.texi(mymacro,28) @quotation something @'e @TeX{} formatting.texi(mymacro,28) The something @'e @TeX{} is here. formatting.texi(mymacro,28) @end quotation formatting.texi(mymacro,28) formatting.texi(mymacro,28) @quotation @@ at the end of line @ formatting.texi(mymacro,28) A @@ at the end of the @@quotation line. formatting.texi(mymacro,28) @end quotation formatting.texi(mymacro,28) formatting.texi(mymacro,28) @quotation something, other thing formatting.texi(mymacro,28) something, other thing formatting.texi(mymacro,28) @end quotation formatting.texi(mymacro,28) formatting.texi(mymacro,28) @quotation Note, the note formatting.texi(mymacro,28) Note, the note formatting.texi(mymacro,28) @end quotation formatting.texi(mymacro,28) formatting.texi(mymacro,28) @quotation formatting.texi(mymacro,28) @end quotation formatting.texi(mymacro,28) formatting.texi(mymacro,28) @quotation Empty formatting.texi(mymacro,28) @end quotation formatting.texi(mymacro,28) formatting.texi(mymacro,28) @quotation @asis{} formatting.texi(mymacro,28) @end quotation formatting.texi(mymacro,28) formatting.texi(mymacro,28) @quotation @* formatting.texi(mymacro,28) @end quotation formatting.texi(mymacro,28) formatting.texi(mymacro,28) @smallquotation formatting.texi(mymacro,28) A small quot---ation formatting.texi(mymacro,28) @end smallquotation formatting.texi(mymacro,28) formatting.texi(mymacro,28) @smallquotation Note formatting.texi(mymacro,28) A small Note formatting.texi(mymacro,28) @end smallquotation formatting.texi(mymacro,28) formatting.texi(mymacro,28) @smallquotation something, other thing formatting.texi(mymacro,28) something, other thing formatting.texi(mymacro,28) @end smallquotation formatting.texi(mymacro,28) formatting.texi(mymacro,28) @itemize formatting.texi(mymacro,28) @item i--temize formatting.texi(mymacro,28) @end itemize formatting.texi(mymacro,28) formatting.texi(mymacro,28) @itemize + formatting.texi(mymacro,28) @item i--tem + formatting.texi(mymacro,28) @end itemize formatting.texi(mymacro,28) formatting.texi(mymacro,28) @itemize @bullet formatting.texi(mymacro,28) @item b--ullet formatting.texi(mymacro,28) @end itemize formatting.texi(mymacro,28) formatting.texi(mymacro,28) @itemize @minus formatting.texi(mymacro,28) @item minu--s formatting.texi(mymacro,28) @end itemize formatting.texi(mymacro,28) formatting.texi(mymacro,28) @itemize @emph formatting.texi(mymacro,28) @item e--mph item formatting.texi(mymacro,28) @end itemize formatting.texi(mymacro,28) formatting.texi(mymacro,28) @itemize @emph{after emph} formatting.texi(mymacro,28) @c comment in itemize formatting.texi(mymacro,28) @item e--mph item formatting.texi(mymacro,28) @end itemize formatting.texi(mymacro,28) formatting.texi(mymacro,28) @itemize @bullet{} a--n itemize line formatting.texi(mymacro,28) @cindex index entry within itemize formatting.texi(mymacro,28) @item i--tem 1 formatting.texi(mymacro,28) @item i--tem 2 formatting.texi(mymacro,28) @end itemize formatting.texi(mymacro,28) formatting.texi(mymacro,28) @enumerate formatting.texi(mymacro,28) @item e--numerate formatting.texi(mymacro,28) @end enumerate formatting.texi(mymacro,28) formatting.texi(mymacro,28) @multitable @columnfractions 6 7 formatting.texi(mymacro,28) @headitem mu--ltitable headitem @tab another tab formatting.texi(mymacro,28) @item mu--ltitable item @tab multitable tab formatting.texi(mymacro,28) @c comment in multitable formatting.texi(mymacro,28) @item mu--ltitable item 2 @tab multitable tab 2 formatting.texi(mymacro,28) @cindex index entry within multitable formatting.texi(mymacro,28) @item lone mu--ltitable item formatting.texi(mymacro,28) @end multitable formatting.texi(mymacro,28) formatting.texi(mymacro,28) @multitable {truc} {bidule} formatting.texi(mymacro,28) @item truc @tab bidule formatting.texi(mymacro,28) @end multitable formatting.texi(mymacro,28) formatting.texi(mymacro,28) @example formatting.texi(mymacro,28) e--xample some formatting.texi(mymacro,28) text formatting.texi(mymacro,28) @end example formatting.texi(mymacro,28) formatting.texi(mymacro,28) @smallexample formatting.texi(mymacro,28) s--mallexample formatting.texi(mymacro,28) @end smallexample formatting.texi(mymacro,28) formatting.texi(mymacro,28) @display formatting.texi(mymacro,28) d--isplay formatting.texi(mymacro,28) @end display formatting.texi(mymacro,28) formatting.texi(mymacro,28) @smalldisplay formatting.texi(mymacro,28) s--malldisplay formatting.texi(mymacro,28) @end smalldisplay formatting.texi(mymacro,28) formatting.texi(mymacro,28) @lisp formatting.texi(mymacro,28) l--isp formatting.texi(mymacro,28) @end lisp formatting.texi(mymacro,28) formatting.texi(mymacro,28) @smalllisp formatting.texi(mymacro,28) s--malllisp formatting.texi(mymacro,28) @end smalllisp formatting.texi(mymacro,28) formatting.texi(mymacro,28) @format formatting.texi(mymacro,28) f--ormat formatting.texi(mymacro,28) @end format formatting.texi(mymacro,28) formatting.texi(mymacro,28) @smallformat formatting.texi(mymacro,28) s--mallformat formatting.texi(mymacro,28) @end smallformat formatting.texi(mymacro,28) formatting.texi(mymacro,28) @deffn c--ategory d--effn_name a--rguments... formatting.texi(mymacro,28) d--effn formatting.texi(mymacro,28) @end deffn formatting.texi(mymacro,28) formatting.texi(mymacro,28) @deffn cate--gory de--ffn_name ar--guments @ formatting.texi(mymacro,28) more args @* even more so formatting.texi(mymacro,28) def--fn formatting.texi(mymacro,28) @end deffn formatting.texi(mymacro,28) formatting.texi(mymacro,28) @deffn fset @var{i} a g formatting.texi(mymacro,28) @cindex index entry within deffn formatting.texi(mymacro,28) @deffnx {cmde} truc {} formatting.texi(mymacro,28) @deffnx Command {log trap} {} formatting.texi(mymacro,28) @deffnx Command { log trap1} {} formatting.texi(mymacro,28) @deffnx Command {log trap2 } {} formatting.texi(mymacro,28) @deffnx cmde @b{id ule} truc formatting.texi(mymacro,28) @deffnx cmde2 @b{id @samp{i} ule} truc formatting.texi(mymacro,28) @deffnx @b{id @samp{i} ule} formatting.texi(mymacro,28) @deffnx formatting.texi(mymacro,28) @deffnx aaa formatting.texi(mymacro,28) @deffnx {} {} formatting.texi(mymacro,28) @deffnx{} formatting.texi(mymacro,28) @deffnx{} machin formatting.texi(mymacro,28) @deffnx{} {bidule machin} formatting.texi(mymacro,28) @deffnx{truc} machin formatting.texi(mymacro,28) @deffnx{truc} { } formatting.texi(mymacro,28) @deffnx{truc} followed by a comment formatting.texi(mymacro,28) @c comment formatting.texi(mymacro,28) @deffnx{truc} formatting.texi(mymacro,28) @deffnx{} {} formatting.texi(mymacro,28) @deffnx {truc} a b c d e @b{f g} {h i} formatting.texi(mymacro,28) @deffnx {truc} deffnx before end deffn formatting.texi(mymacro,28) @end deffn formatting.texi(mymacro,28) formatting.texi(mymacro,28) @deffn empty deffn formatting.texi(mymacro,28) @end deffn formatting.texi(mymacro,28) formatting.texi(mymacro,28) @deffn empty deffn with deffnx formatting.texi(mymacro,28) @c comment between deffn and deffnx formatting.texi(mymacro,28) @deffnx empty deffnx formatting.texi(mymacro,28) @end deffn formatting.texi(mymacro,28) formatting.texi(mymacro,28) @deffn fset @var{i} a g formatting.texi(mymacro,28) @deffnx {cmde} truc {} formatting.texi(mymacro,28) @c comment formatting.texi(mymacro,28) text in def item for second def item formatting.texi(mymacro,28) @end deffn formatting.texi(mymacro,28) formatting.texi(mymacro,28) @defvr c--ategory d--efvr_name formatting.texi(mymacro,28) d--efvr formatting.texi(mymacro,28) @end defvr formatting.texi(mymacro,28) formatting.texi(mymacro,28) @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... formatting.texi(mymacro,28) d--eftypefn formatting.texi(mymacro,28) @end deftypefn formatting.texi(mymacro,28) formatting.texi(mymacro,28) @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... formatting.texi(mymacro,28) d--eftypeop formatting.texi(mymacro,28) @end deftypeop formatting.texi(mymacro,28) formatting.texi(mymacro,28) @deftypevr c--ategory t--ype d--eftypevr_name formatting.texi(mymacro,28) d--eftypevr formatting.texi(mymacro,28) @end deftypevr formatting.texi(mymacro,28) formatting.texi(mymacro,28) @defcv c--ategory c--lass d--efcv_name formatting.texi(mymacro,28) d--efcv formatting.texi(mymacro,28) @end defcv formatting.texi(mymacro,28) formatting.texi(mymacro,28) @defop c--ategory c--lass d--efop_name a--rguments... formatting.texi(mymacro,28) d--efop formatting.texi(mymacro,28) @end defop formatting.texi(mymacro,28) formatting.texi(mymacro,28) @deftp c--ategory d--eftp_name a--ttributes... formatting.texi(mymacro,28) d--eftp formatting.texi(mymacro,28) @end deftp formatting.texi(mymacro,28) formatting.texi(mymacro,28) @defun d--efun_name a--rguments... formatting.texi(mymacro,28) d--efun formatting.texi(mymacro,28) @end defun formatting.texi(mymacro,28) formatting.texi(mymacro,28) @defmac d--efmac_name a--rguments... formatting.texi(mymacro,28) d--efmac formatting.texi(mymacro,28) @end defmac formatting.texi(mymacro,28) formatting.texi(mymacro,28) @defspec d--efspec_name a--rguments... formatting.texi(mymacro,28) d--efspec formatting.texi(mymacro,28) @end defspec formatting.texi(mymacro,28) formatting.texi(mymacro,28) @defvar d--efvar_name argvar argvar1 formatting.texi(mymacro,28) d--efvar formatting.texi(mymacro,28) @end defvar formatting.texi(mymacro,28) formatting.texi(mymacro,28) @defopt d--efopt_name formatting.texi(mymacro,28) d--efopt formatting.texi(mymacro,28) @end defopt formatting.texi(mymacro,28) formatting.texi(mymacro,28) @deftypefun t--ype d--eftypefun_name a--rguments... formatting.texi(mymacro,28) d--eftypefun formatting.texi(mymacro,28) @end deftypefun formatting.texi(mymacro,28) formatting.texi(mymacro,28) @deftypevar t--ype d--eftypevar_name formatting.texi(mymacro,28) d--eftypevar formatting.texi(mymacro,28) @end deftypevar formatting.texi(mymacro,28) formatting.texi(mymacro,28) @defivar c--lass d--efivar_name formatting.texi(mymacro,28) d--efivar formatting.texi(mymacro,28) @end defivar formatting.texi(mymacro,28) formatting.texi(mymacro,28) @deftypeivar c--lass t--ype d--eftypeivar_name formatting.texi(mymacro,28) d--eftypeivar formatting.texi(mymacro,28) @end deftypeivar formatting.texi(mymacro,28) formatting.texi(mymacro,28) @defmethod c--lass d--efmethod_name a--rguments... formatting.texi(mymacro,28) d--efmethod formatting.texi(mymacro,28) @end defmethod formatting.texi(mymacro,28) formatting.texi(mymacro,28) @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... formatting.texi(mymacro,28) d--eftypemethod formatting.texi(mymacro,28) @end deftypemethod formatting.texi(mymacro,28) formatting.texi(mymacro,28) @code{@@xref@{c---hapter@@@@, cross r---ef name@@@@, t---itle@@@@, file n---ame@@@@, ma---nual@@@@@}} @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@}. formatting.texi(mymacro,28) @code{@@ref@{chapter, cross ref name, title, file name, manual@}} @ref{chapter, cross ref name, title, file name, manual} formatting.texi(mymacro,28) @code{@@pxref@{chapter, cross ref name, title, file name, manual@}} @pxref{chapter, cross ref name, title, file name, manual} formatting.texi(mymacro,28) @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} formatting.texi(mymacro,28) formatting.texi(mymacro,28) @code{@@ref@{chapter@}} @ref{chapter} formatting.texi(mymacro,28) @code{@@xref@{chapter@}} @xref{chapter}. formatting.texi(mymacro,28) @code{@@pxref@{chapter@}} @pxref{chapter} formatting.texi(mymacro,28) @code{@@ref@{s--ect@@comma@{@}ion@}} @ref{s--ect@comma{}ion} formatting.texi(mymacro,28) formatting.texi(mymacro,28) @code{@@ref@{s--ect@@comma@{@}ion, a @@comma@{@} in cross formatting.texi(mymacro,28) ref, a comma@@comma@{@} in title, a comma@@comma@{@} in file, a @@comma@{@} in manual name @}} formatting.texi(mymacro,28) @ref{s--ect@comma{}ion, a @comma{} in cross formatting.texi(mymacro,28) ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } formatting.texi(mymacro,28) formatting.texi(mymacro,28) @code{@@ref@{chapter,cross ref name@}} @ref{chapter,cross ref name} formatting.texi(mymacro,28) @code{@@ref@{chapter,,title@}} @ref{chapter,,title} formatting.texi(mymacro,28) @code{@@ref@{chapter,,,file name@}} @ref{chapter,,,file name} formatting.texi(mymacro,28) @code{@@ref@{chapter,,,,manual@}} @ref{chapter,,,,manual} formatting.texi(mymacro,28) @code{@@ref@{chapter,cross ref name,title,@}} @ref{chapter,cross ref name,title,} formatting.texi(mymacro,28) @code{@@ref@{chapter,cross ref name,,file name@}} @ref{chapter,cross ref name,,file name} formatting.texi(mymacro,28) @code{@@ref@{chapter,cross ref name,,,manual@}} @ref{chapter,cross ref name,,,manual} formatting.texi(mymacro,28) @code{@@ref@{chapter,cross ref name,title,file name@}} @ref{chapter,cross ref name,title,file name} formatting.texi(mymacro,28) @code{@@ref@{chapter,cross ref name,title,,manual@}} @ref{chapter,cross ref name,title,,manual} formatting.texi(mymacro,28) @code{@@ref@{chapter,cross ref name,title, file name, manual@}} @ref{chapter,cross ref name,title, file name, manual} formatting.texi(mymacro,28) @code{@@ref@{chapter,,title,file name@}} @ref{chapter,,title,file name} formatting.texi(mymacro,28) @code{@@ref@{chapter,,title,,manual@}} @ref{chapter,,title,,manual} formatting.texi(mymacro,28) @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} formatting.texi(mymacro,28) @code{@@ref@{chapter,,,file name,manual@}} @ref{chapter,,,file name,manual} formatting.texi(mymacro,28) formatting.texi(mymacro,28) formatting.texi(mymacro,28) @code{@@ref@{(pman)anode,cross ref name@}} @ref{(pman)anode,cross ref name} formatting.texi(mymacro,28) @code{@@ref@{(pman)anode,,title@}} @ref{(pman)anode,,title} formatting.texi(mymacro,28) @code{@@ref@{(pman)anode,,,file name@}} @ref{(pman)anode,,,file name} formatting.texi(mymacro,28) @code{@@ref@{(pman)anode,,,,manual@}} @ref{(pman)anode,,,,manual} formatting.texi(mymacro,28) @code{@@ref@{(pman)anode,cross ref name,title,@}} @ref{(pman)anode,cross ref name,title,} formatting.texi(mymacro,28) @code{@@ref@{(pman)anode,cross ref name,,file name@}} @ref{(pman)anode,cross ref name,,file name} formatting.texi(mymacro,28) @code{@@ref@{(pman)anode,cross ref name,,,manual@}} @ref{(pman)anode,cross ref name,,,manual} formatting.texi(mymacro,28) @code{@@ref@{(pman)anode,cross ref name,title,file name@}} @ref{(pman)anode,cross ref name,title,file name} formatting.texi(mymacro,28) @code{@@ref@{(pman)anode,cross ref name,title,,manual@}} @ref{(pman)anode,cross ref name,title,,manual} formatting.texi(mymacro,28) @code{@@ref@{(pman)anode,cross ref name,title, file name, manual@}} @ref{(pman)anode,cross ref name,title, file name, manual} formatting.texi(mymacro,28) @code{@@ref@{(pman)anode,,title,file name@}} @ref{(pman)anode,,title,file name} formatting.texi(mymacro,28) @code{@@ref@{(pman)anode,,title,,manual@}} @ref{(pman)anode,,title,,manual} formatting.texi(mymacro,28) @code{@@ref@{(pman)anode,,title, file name, manual@}} @ref{(pman)anode,,title, file name, manual} formatting.texi(mymacro,28) @code{@@ref@{(pman)anode,,,file name,manual@}} @ref{(pman)anode,,,file name,manual} formatting.texi(mymacro,28) formatting.texi(mymacro,28) formatting.texi(mymacro,28) @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} formatting.texi(mymacro,28) @code{@@inforef@{chapter@}} @inforef{chapter} formatting.texi(mymacro,28) @code{@@inforef@{chapter, cross ref name@}} @inforef{chapter, cross ref name} formatting.texi(mymacro,28) @code{@@inforef@{chapter,,file name@}} @inforef{chapter,,file name} formatting.texi(mymacro,28) @code{@@inforef@{node, cross ref name, file name@}} @inforef{node, cross ref name, file name} formatting.texi(mymacro,28) @code{@@inforef@{node@}} @inforef{node} formatting.texi(mymacro,28) @code{@@inforef@{node, cross ref name@}} @inforef{node, cross ref name} formatting.texi(mymacro,28) @code{@@inforef@{node,,file name@}} @inforef{node,,file name} formatting.texi(mymacro,28) @code{@@inforef@{chapter, cross ref name, file name, spurious arg@}} @inforef{chapter, cross ref name, file name, spurious arg} formatting.texi(mymacro,28) formatting.texi(mymacro,28) @code{@@inforef@{s--ect@@comma@{@}ion, a @@comma@{@} in cross formatting.texi(mymacro,28) ref, a comma@@comma@{@} in file@}} formatting.texi(mymacro,28) @inforef{s--ect@comma{}ion, a @comma{} in cross formatting.texi(mymacro,28) ref, a comma@comma{} in file} formatting.texi(mymacro,28) formatting.texi(mymacro,28) formatting.texi(mymacro,28) @table @bullet formatting.texi(mymacro,28) @c comment in table formatting.texi(mymacro,28) @item a formatting.texi(mymacro,28) l--ine formatting.texi(mymacro,28) @end table formatting.texi(mymacro,28) formatting.texi(mymacro,28) @vtable @asis formatting.texi(mymacro,28) @item a formatting.texi(mymacro,28) @c comment between item and itemx formatting.texi(mymacro,28) @itemx b formatting.texi(mymacro,28) l--ine formatting.texi(mymacro,28) @end vtable formatting.texi(mymacro,28) formatting.texi(mymacro,28) @ftable @minus formatting.texi(mymacro,28) @item a formatting.texi(mymacro,28) @cindex index entry between item and itemx formatting.texi(mymacro,28) @itemx b formatting.texi(mymacro,28) l--ine formatting.texi(mymacro,28) @end ftable formatting.texi(mymacro,28) formatting.texi(mymacro,28) @cartouche formatting.texi(mymacro,28) c--artouche formatting.texi(mymacro,28) @end cartouche formatting.texi(mymacro,28) formatting.texi(mymacro,28) @flushleft formatting.texi(mymacro,28) f--lushleft formatting.texi(mymacro,28) @end flushleft formatting.texi(mymacro,28) formatting.texi(mymacro,28) @flushright formatting.texi(mymacro,28) f--lushright formatting.texi(mymacro,28) @end flushright formatting.texi(mymacro,28) formatting.texi(mymacro,28) @center ce--ntered line formatting.texi(mymacro,28) formatting.texi(mymacro,28) @verbatiminclude simplest.texi formatting.texi(mymacro,28) formatting.texi(mymacro,28) @verbatim formatting.texi(mymacro,28) in verbatim '' formatting.texi(mymacro,28) @end verbatim formatting.texi(mymacro,28) formatting.texi(mymacro,28) formatting.texi(mymacro,28) @html formatting.texi(mymacro,28) html '' formatting.texi(mymacro,28) @end html formatting.texi(mymacro,28) formatting.texi(mymacro,28) formatting.texi(mymacro,28) formatting.texi(mymacro,28) @majorheading majorheading formatting.texi(mymacro,28) formatting.texi(mymacro,28) @chapheading chapheading formatting.texi(mymacro,28) formatting.texi(mymacro,28) @heading heading formatting.texi(mymacro,28) formatting.texi(mymacro,28) @subheading subheading formatting.texi(mymacro,28) formatting.texi(mymacro,28) @subsubheading subsubheading formatting.texi(mymacro,28) formatting.texi(mymacro,28) @c makeinfo cannot handle that formatting.texi(mymacro,28) formatting.texi(mymacro,28) @code{@@acronym@{--a,an accronym @@comma@{@} @@enddots@{@}@}} @acronym{--a,an accronym @comma{} @enddots{}} formatting.texi(mymacro,28) @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude--@@comma@{@} @@b@{Autonome@} @}} @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } formatting.texi(mymacro,28) @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} formatting.texi(mymacro,28) formatting.texi(mymacro,28) @code{@@math@{--a@@minus@{@} @{\frac@{1@}@{2@}@}@}} @math{--a@minus{} {\frac{1}{2}}} formatting.texi(mymacro,28) formatting.texi(mymacro,28) @code{@@image@{f-ile,,,alt@@verb@{:jk _" %@:@}@}} @image{f-ile,,,alt@verb{:jk _" %@:}} formatting.texi(mymacro,28) @code{@@image@{f--ile,aze,az,@@verb@{:jk _" %@@:@} @@b@{in b "@},e--xt@}} @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} formatting.texi(mymacro,28) @code{@@image@{file@@verb@{:jk _" %@@:@},,,alt@@verb@{:jk _" %@@:@}@}} @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} formatting.texi(mymacro,28) formatting.texi(mymacro,28) @set invalid formatting.texi(mymacro,28) formatting.texi(mymacro,28) formatting.texi(mymacro,28) @c invalid texinfo formatting.texi(mymacro,28) formatting.texi(mymacro,28) Somehow invalid use of @@,:@* formatting.texi(mymacro,28) @@, @, formatting.texi(mymacro,28) @* formatting.texi(mymacro,28) @@,@@"u @,@"u formatting.texi(mymacro,28) formatting.texi(mymacro,28) Invalid use of @@':@* formatting.texi(mymacro,28) @@' @' formatting.texi(mymacro,28) @* formatting.texi(mymacro,28) @@'@@"u @'@"u formatting.texi(mymacro,28) formatting.texi(mymacro,28) @c only i or j as arg formatting.texi(mymacro,28) @@dotless@{truc@} @dotless{truc} formatting.texi(mymacro,28) @@dotless@{ij@} @dotless{ij} formatting.texi(mymacro,28) @code{@@dotless@{--a@}} @dotless{--a} formatting.texi(mymacro,28) @code{@@dotless@{a@}} @dotless{a} formatting.texi(mymacro,28) formatting.texi(mymacro,28) @c braces missing formatting.texi(mymacro,28) @@TeX, but without brace @TeX formatting.texi(mymacro,28) formatting.texi(mymacro,28) @c unknown command formatting.texi(mymacro,28) @code{@@#} @# formatting.texi(mymacro,28) formatting.texi(mymacro,28) @c no arg formatting.texi(mymacro,28) @code{@@w@{--a@}} @w{--a} formatting.texi(mymacro,28) formatting.texi(mymacro,28) @c no file formatting.texi(mymacro,28) @code{@@image@{,1--xt@}} @image{,1--xt} formatting.texi(mymacro,28) @code{@@image@{,,2--xt@}} @image{,,2--xt} formatting.texi(mymacro,28) @code{@@image@{,,,3--xt@}} @image{,,,3--xt} formatting.texi(mymacro,28) formatting.texi(mymacro,28) @sp formatting.texi(mymacro,28) formatting.texi(mymacro,28) @c braces missing formatting.texi(mymacro,28) @itemize @emph after emph formatting.texi(mymacro,28) @item e--mph item formatting.texi(mymacro,28) @end itemize formatting.texi(mymacro,28) formatting.texi(mymacro,28) @c braces missing formatting.texi(mymacro,28) @itemize @bullet a--n itemize line formatting.texi(mymacro,28) @item i--tem 1 formatting.texi(mymacro,28) @item i--tem 2 formatting.texi(mymacro,28) @end itemize formatting.texi(mymacro,28) formatting.texi(mymacro,28) @c deffnx after deff lines formatting.texi(mymacro,28) @deffn fun formatting.texi(mymacro,28) @deffnx truc machin bidule chose and } formatting.texi(mymacro,28) @deffnx truc machin bidule chose and } after formatting.texi(mymacro,28) @deffnx truc machin bidule chose and { formatting.texi(mymacro,28) @deffnx truc machin bidule chose and { and after formatting.texi(mymacro,28) @deffnx {truc} followed by a comment formatting.texi(mymacro,28) @c comment formatting.texi(mymacro,28) Various deff lines formatting.texi(mymacro,28) @deffnx {truc} after a deff item formatting.texi(mymacro,28) @end deffn formatting.texi(mymacro,28) formatting.texi(mymacro,28) @c node is non existent, or missing first arg formatting.texi(mymacro,28) @code{@@ref@{node@}} @ref{node} formatting.texi(mymacro,28) formatting.texi(mymacro,28) @code{@@ref@{,cross ref name@}} @ref{,cross ref name} formatting.texi(mymacro,28) @code{@@ref@{,,title@}} @ref{,,title} formatting.texi(mymacro,28) @code{@@ref@{,,,file name@}} @ref{,,,file name} formatting.texi(mymacro,28) @code{@@ref@{,,,,manual@}} @ref{,,,,manual} formatting.texi(mymacro,28) @code{@@ref@{node,cross ref name@}} @ref{node,cross ref name} formatting.texi(mymacro,28) @code{@@ref@{node,,title@}} @ref{node,,title} formatting.texi(mymacro,28) @code{@@ref@{node,,,file name@}} @ref{node,,,file name} formatting.texi(mymacro,28) @code{@@ref@{node,,,,manual@}} @ref{node,,,,manual} formatting.texi(mymacro,28) @code{@@ref@{node,cross ref name,title,@}} @ref{node,cross ref name,title,} formatting.texi(mymacro,28) @code{@@ref@{node,cross ref name,,file name@}} @ref{node,cross ref name,,file name} formatting.texi(mymacro,28) @code{@@ref@{node,cross ref name,,,manual@}} @ref{node,cross ref name,,,manual} formatting.texi(mymacro,28) @code{@@ref@{node,cross ref name,title,file name@}} @ref{node,cross ref name,title,file name} formatting.texi(mymacro,28) @code{@@ref@{node,cross ref name,title,,manual@}} @ref{node,cross ref name,title,,manual} formatting.texi(mymacro,28) @code{@@ref@{node,cross ref name,title, file name, manual@}} @ref{node,cross ref name,title, file name, manual} formatting.texi(mymacro,28) @code{@@ref@{node,,title,file name@}} @ref{node,,title,file name} formatting.texi(mymacro,28) @code{@@ref@{node,,title,,manual@}} @ref{node,,title,,manual} formatting.texi(mymacro,28) @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} formatting.texi(mymacro,28) @code{@@ref@{node,,title, file name, manual@}} @ref{node,,title, file name, manual} formatting.texi(mymacro,28) @code{@@ref@{node,,,file name,manual@}} @ref{node,,,file name,manual} formatting.texi(mymacro,28) @code{@@ref@{,cross ref name,title,@}} @ref{,cross ref name,title,} formatting.texi(mymacro,28) @code{@@ref@{,cross ref name,,file name@}} @ref{,cross ref name,,file name} formatting.texi(mymacro,28) @code{@@ref@{,cross ref name,,,manual@}} @ref{,cross ref name,,,manual} formatting.texi(mymacro,28) @code{@@ref@{,cross ref name,title,file name@}} @ref{,cross ref name,title,file name} formatting.texi(mymacro,28) @code{@@ref@{,cross ref name,title,,manual@}} @ref{,cross ref name,title,,manual} formatting.texi(mymacro,28) @code{@@ref@{,cross ref name,title, file name, manual@}} @ref{,cross ref name,title, file name, manual} formatting.texi(mymacro,28) @code{@@ref@{,,title,file name@}} @ref{,,title,file name} formatting.texi(mymacro,28) @code{@@ref@{,,title,,manual@}} @ref{,,title,,manual} formatting.texi(mymacro,28) @code{@@ref@{,,title, file name, manual@}} @ref{,,title, file name, manual} formatting.texi(mymacro,28) @code{@@ref@{,,,file name,manual@}} @ref{,,,file name,manual} formatting.texi(mymacro,28) formatting.texi(mymacro,28) @code{@@inforef@{,cross ref name @}} @inforef{,cross ref name } formatting.texi(mymacro,28) @code{@@inforef@{,,file name@}} @inforef{,,file name} formatting.texi(mymacro,28) @code{@@inforef@{,cross ref name, file name@}} @inforef{,cross ref name, file name} formatting.texi(mymacro,28) @code{@@inforef@{@}} @inforef{} formatting.texi(mymacro,28) formatting.texi(mymacro,28) formatting.texi(,29) formatting.texi(,30) Insercopying in titlepage formatting.texi(,31) @insertcopying formatting.texi(,32) @end titlepage formatting.texi(,33) formatting.texi(,34) Insertcopying in normal text formatting.texi(,35) @insertcopying formatting.texi(,36) formatting.texi(,37) Normal text formatting.texi(mymacro,38) formatting.texi(mymacro,38) < formatting.texi(mymacro,38) > formatting.texi(mymacro,38) " formatting.texi(mymacro,38) & formatting.texi(mymacro,38) ' formatting.texi(mymacro,38) ` formatting.texi(mymacro,38) formatting.texi(mymacro,38) ``simple-double--three---four----''@* formatting.texi(mymacro,38) code: @code{``simple-double--three---four----''} @* formatting.texi(mymacro,38) asis: @asis{``simple-double--three---four----''} @* formatting.texi(mymacro,38) strong: @strong{``simple-double--three---four----''} @* formatting.texi(mymacro,38) kbd: @kbd{``simple-double--three---four----''} @* formatting.texi(mymacro,38) formatting.texi(mymacro,38) `@w{}`simple-double-@w{}-three---four----'@w{}'@* formatting.texi(mymacro,38) formatting.texi(mymacro,38) @cindex --option formatting.texi(mymacro,38) @cindex `` formatting.texi(mymacro,38) @findex `` formatting.texi(mymacro,38) @findex --foption formatting.texi(mymacro,38) formatting.texi(mymacro,38) @@"u @"u formatting.texi(mymacro,38) @@"@{U@} @"{U} formatting.texi(mymacro,38) @@~n @~n formatting.texi(mymacro,38) @@^a @^a formatting.texi(mymacro,38) @@'e @'e formatting.texi(mymacro,38) @@=o @=o formatting.texi(mymacro,38) @@`i @`i formatting.texi(mymacro,38) @@'@{e@} @'{e} formatting.texi(mymacro,38) @@'@{@@dotless@{i@}@} @'{@dotless{i}} formatting.texi(mymacro,38) @@dotless@{i@} @dotless{i} formatting.texi(mymacro,38) @@dotless@{j@} @dotless{j} formatting.texi(mymacro,38) @@`@{@@=E@} @`{@=E} formatting.texi(mymacro,38) @@l@{@} @l{} formatting.texi(mymacro,38) @@,@{@@'C@} @,{@'C} formatting.texi(mymacro,38) @@,c @,c formatting.texi(mymacro,38) @@,c@@"u @,c@"u @* formatting.texi(mymacro,38) formatting.texi(mymacro,38) @@* @* formatting.texi(mymacro,38) @@ followed by a space formatting.texi(mymacro,38) @ formatting.texi(mymacro,38) @@ followed by a tab formatting.texi(mymacro,38) @ formatting.texi(mymacro,38) @@ followed by a new line formatting.texi(mymacro,38) @ formatting.texi(mymacro,38) @code{@@-} @- formatting.texi(mymacro,38) @code{@@|} @| formatting.texi(mymacro,38) @code{@@:} @: formatting.texi(mymacro,38) @code{@@!} @! formatting.texi(mymacro,38) @code{@@?} @? formatting.texi(mymacro,38) @code{@@.} @. formatting.texi(mymacro,38) @code{@@@@} @@ formatting.texi(mymacro,38) @code{@@@}} @} formatting.texi(mymacro,38) @code{@@@{} @{ formatting.texi(mymacro,38) @code{@@/} @/ formatting.texi(mymacro,38) formatting.texi(mymacro,38) foo vs.@: bar. formatting.texi(mymacro,38) colon :@:And something else. formatting.texi(mymacro,38) semi colon ;@:. formatting.texi(mymacro,38) And ? ?@:. formatting.texi(mymacro,38) Now ! !@:@@ formatting.texi(mymacro,38) but , ,@: formatting.texi(mymacro,38) formatting.texi(mymacro,38) @@TeX @TeX{} formatting.texi(mymacro,38) @@LaTeX @LaTeX{} formatting.texi(mymacro,38) @@bullet @bullet{} formatting.texi(mymacro,38) @@copyright @copyright{} formatting.texi(mymacro,38) @@dots @dots{} formatting.texi(mymacro,38) @@enddots @enddots{} formatting.texi(mymacro,38) @@equiv @equiv{} formatting.texi(mymacro,38) @@error @error{} formatting.texi(mymacro,38) @@expansion @expansion{} formatting.texi(mymacro,38) @@minus @minus{} formatting.texi(mymacro,38) @@point @point{} formatting.texi(mymacro,38) @@print @print{} formatting.texi(mymacro,38) @@result @result{} formatting.texi(mymacro,38) @@today @today{} formatting.texi(mymacro,38) @@aa @aa{} formatting.texi(mymacro,38) @@AA @AA{} formatting.texi(mymacro,38) @@ae @ae{} formatting.texi(mymacro,38) @@oe @oe{} formatting.texi(mymacro,38) @@AE @AE{} formatting.texi(mymacro,38) @@OE @OE{} formatting.texi(mymacro,38) @@o @o{} formatting.texi(mymacro,38) @@O @O{} formatting.texi(mymacro,38) @@ss @ss{} formatting.texi(mymacro,38) @@l @l{} formatting.texi(mymacro,38) @@L @L{} formatting.texi(mymacro,38) @@exclamdown @exclamdown{} formatting.texi(mymacro,38) @@questiondown @questiondown{} formatting.texi(mymacro,38) @@pounds @pounds{} formatting.texi(mymacro,38) @@registeredsymbol @registeredsymbol{} formatting.texi(mymacro,38) @@ordf @ordf{} formatting.texi(mymacro,38) @@ordm @ordm{} formatting.texi(mymacro,38) @@comma @comma{} formatting.texi(mymacro,38) @@quotedblleft @quotedblleft{} formatting.texi(mymacro,38) @@quotedblright @quotedblright{} formatting.texi(mymacro,38) @@quoteleft @quoteleft{} formatting.texi(mymacro,38) @@quoteright @quoteright{} formatting.texi(mymacro,38) @@quotedblbase @quotedblbase{} formatting.texi(mymacro,38) @@quotesinglbase @quotesinglbase{} formatting.texi(mymacro,38) @@guillemetleft @guillemetleft{} formatting.texi(mymacro,38) @@guillemetright @guillemetright{} formatting.texi(mymacro,38) @@guillemotleft @guillemotleft{} formatting.texi(mymacro,38) @@guillemotright @guillemotright{} formatting.texi(mymacro,38) @@guilsinglleft @guilsinglleft{} formatting.texi(mymacro,38) @@guilsinglright @guilsinglright{} formatting.texi(mymacro,38) @@textdegree @textdegree{} formatting.texi(mymacro,38) @@euro @euro{} formatting.texi(mymacro,38) @@arrow @arrow{} formatting.texi(mymacro,38) @@leq @leq{} formatting.texi(mymacro,38) @@geq @geq{} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@acronym@{--a,an accronym@}} @acronym{--a,an accronym} formatting.texi(mymacro,38) @code{@@acronym@{--a@}} @acronym{--a} formatting.texi(mymacro,38) @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude Autonome @}} @abbr{@'E--. @comma{}A., @'Etude Autonome } formatting.texi(mymacro,38) @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} formatting.texi(mymacro,38) @code{@@asis@{--a@}} @asis{--a} formatting.texi(mymacro,38) @code{@@b@{--a@}} @b{--a} formatting.texi(mymacro,38) @code{@@cite@{--a@}} @cite{--a} formatting.texi(mymacro,38) @code{@@code@{--a@}} @code{--a} formatting.texi(mymacro,38) @code{@@command@{--a@}} @command{--a} formatting.texi(mymacro,38) @code{@@ctrl@{--a@}} @ctrl{--a} formatting.texi(mymacro,38) @code{@@dfn@{--a@}} @dfn{--a} formatting.texi(mymacro,38) @code{@@dmn@{--a@}} @dmn{--a} formatting.texi(mymacro,38) @code{@@email@{--a,--b@}} @email{--a,--b} formatting.texi(mymacro,38) @code{@@email@{,--b@}} @email{,--b} formatting.texi(mymacro,38) @code{@@email@{--a@}} @email{--a} formatting.texi(mymacro,38) @code{@@emph@{--a@}} @emph{--a} formatting.texi(mymacro,38) @code{@@env@{--a@}} @env{--a} formatting.texi(mymacro,38) @code{@@file@{--a@}} @file{--a} formatting.texi(mymacro,38) @code{@@i@{--a@}} @i{--a} formatting.texi(mymacro,38) @code{@@kbd@{--a@}} @kbd{--a} formatting.texi(mymacro,38) @code{@@key@{--a@}} @key{--a} formatting.texi(mymacro,38) @code{@@math@{--a @{\frac@{1@}@{2@}@} @@minus@{@}@}} @math{--a {\frac{1}{2}} @minus{}} formatting.texi(mymacro,38) @code{@@option@{--a@}} @option{--a} formatting.texi(mymacro,38) @code{@@r@{--a@}} @r{--a} formatting.texi(mymacro,38) @code{@@samp@{--a@}} @samp{--a} formatting.texi(mymacro,38) @code{@@sc@{--a@}} @sc{--a} formatting.texi(mymacro,38) @code{@@strong@{--a@}} @strong{--a} formatting.texi(mymacro,38) @code{@@t@{--a@}} @t{--a} formatting.texi(mymacro,38) @code{@@sansserif@{--a@}} @sansserif{--a} formatting.texi(mymacro,38) @code{@@titlefont@{--a@}} @titlefont{--a} formatting.texi(mymacro,38) @code{@@indicateurl@{--a@}} @indicateurl{--a} formatting.texi(mymacro,38) @code{@@uref@{--a,--b@}} @uref{--a,--b} formatting.texi(mymacro,38) @code{@@uref@{--a@}} @uref{--a} formatting.texi(mymacro,38) @code{@@uref@{,--b@}} @uref{,--b} formatting.texi(mymacro,38) @code{@@uref@{--a,--b,--c@}} @uref{--a,--b,--c} formatting.texi(mymacro,38) @code{@@uref@{,--b,--c@}} @uref{,--b,--c} formatting.texi(mymacro,38) @code{@@uref@{--a,,--c@}} @uref{--a,,--c} formatting.texi(mymacro,38) @code{@@uref@{,,--c@}} @uref{,,--c} formatting.texi(mymacro,38) @code{@@url@{--a,--b@}} @url{--a,--b} formatting.texi(mymacro,38) @code{@@url@{--a,@}} @url{--a,} formatting.texi(mymacro,38) @code{@@url@{,--b@}} @url{,--b} formatting.texi(mymacro,38) @code{@@var@{--a@}} @var{--a} formatting.texi(mymacro,38) @code{@@verb@{:--a:@}} @verb{:--a:} formatting.texi(mymacro,38) @code{@@verb@{:a < & @@ % " -- b:@}} @verb{:a < & @ % " -- b:} formatting.texi(mymacro,38) @code{@@w@{@}} @w{} formatting.texi(mymacro,38) @code{@@H@{a@}} @H{a} formatting.texi(mymacro,38) @code{@@H@{--a@}} @H{--a} formatting.texi(mymacro,38) @code{@@dotaccent@{a@}} @dotaccent{a} formatting.texi(mymacro,38) @code{@@dotaccent@{--a@}} @dotaccent{--a} formatting.texi(mymacro,38) @code{@@ringaccent@{a@}} @ringaccent{a} formatting.texi(mymacro,38) @code{@@ringaccent@{--a@}} @ringaccent{--a} formatting.texi(mymacro,38) @code{@@tieaccent@{a@}} @tieaccent{a} formatting.texi(mymacro,38) @code{@@tieaccent@{--a@}} @tieaccent{--a} formatting.texi(mymacro,38) @code{@@u@{a@}} @u{a} formatting.texi(mymacro,38) @code{@@u@{--a@}} @u{--a} formatting.texi(mymacro,38) @code{@@ubaraccent@{a@}} @ubaraccent{a} formatting.texi(mymacro,38) @code{@@ubaraccent@{--a@}} @ubaraccent{--a} formatting.texi(mymacro,38) @code{@@udotaccent@{a@}} @udotaccent{a} formatting.texi(mymacro,38) @code{@@udotaccent@{--a@}} @udotaccent{--a} formatting.texi(mymacro,38) @code{@@v@{a@}} @v{a} formatting.texi(mymacro,38) @code{@@v@{--a@}} @v{--a} formatting.texi(mymacro,38) @code{@@,@{c@}} @,{c} formatting.texi(mymacro,38) @code{@@,@{--c@}} @,{--c} formatting.texi(mymacro,38) @code{@@ogonek@{a@}} @ogonek{a} formatting.texi(mymacro,38) @code{@@ogonek@{--a@}} @ogonek{--a} formatting.texi(mymacro,38) @code{@@footnote@{in footnote@}} @footnote{in footnote} formatting.texi(mymacro,38) @code{@@footnote@{in footnote2@}} @footnote{in footnote2} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@image@{f--ile@}} @image{f--ile} formatting.texi(mymacro,38) @code{@@image@{f--ile,l--i@}} @image{f--ile,l--i} formatting.texi(mymacro,38) @code{@@image@{f--ile,,l--e@}} @image{f--ile,,l--e} formatting.texi(mymacro,38) @code{@@image@{f--ile,,,alt@}} @image{f--ile,,,alt} formatting.texi(mymacro,38) @code{@@image@{f--ile,,,,e-d-xt@}} @image{f--ile,,,,e--xt} formatting.texi(mymacro,38) @code{@@image@{f--ile,aze,az,alt,e--xt@}} @image{f--ile,aze,az,alt,e--xt} formatting.texi(mymacro,38) @code{@@image@{f-ile,aze,,a--lt@}} @image{f-ile,aze,,a--lt} formatting.texi(mymacro,38) @code{@@image@{@@file@{f--ile@}@@@@@@.,aze,az,alt,@@file@{file ext@} e--xt@@@}} @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@}} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @sp 2 formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} formatting.texi(mymacro,38) @clickstyle @result formatting.texi(mymacro,38) After clickstyle @result{} formatting.texi(mymacro,38) @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} formatting.texi(mymacro,38) @clickstyle @arrow formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation formatting.texi(mymacro,38) A quot---ation formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation Note formatting.texi(mymacro,38) A Note formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation note formatting.texi(mymacro,38) A note formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation Caution formatting.texi(mymacro,38) Caution formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation Important formatting.texi(mymacro,38) Important formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation Tip formatting.texi(mymacro,38) a Tip formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation Warning formatting.texi(mymacro,38) a Warning. formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation something @'e @TeX{} formatting.texi(mymacro,38) The something @'e @TeX{} is here. formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation @@ at the end of line @ formatting.texi(mymacro,38) A @@ at the end of the @@quotation line. formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation something, other thing formatting.texi(mymacro,38) something, other thing formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation Note, the note formatting.texi(mymacro,38) Note, the note formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation Empty formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation @asis{} formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @quotation @* formatting.texi(mymacro,38) @end quotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @smallquotation formatting.texi(mymacro,38) A small quot---ation formatting.texi(mymacro,38) @end smallquotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @smallquotation Note formatting.texi(mymacro,38) A small Note formatting.texi(mymacro,38) @end smallquotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @smallquotation something, other thing formatting.texi(mymacro,38) something, other thing formatting.texi(mymacro,38) @end smallquotation formatting.texi(mymacro,38) formatting.texi(mymacro,38) @itemize formatting.texi(mymacro,38) @item i--temize formatting.texi(mymacro,38) @end itemize formatting.texi(mymacro,38) formatting.texi(mymacro,38) @itemize + formatting.texi(mymacro,38) @item i--tem + formatting.texi(mymacro,38) @end itemize formatting.texi(mymacro,38) formatting.texi(mymacro,38) @itemize @bullet formatting.texi(mymacro,38) @item b--ullet formatting.texi(mymacro,38) @end itemize formatting.texi(mymacro,38) formatting.texi(mymacro,38) @itemize @minus formatting.texi(mymacro,38) @item minu--s formatting.texi(mymacro,38) @end itemize formatting.texi(mymacro,38) formatting.texi(mymacro,38) @itemize @emph formatting.texi(mymacro,38) @item e--mph item formatting.texi(mymacro,38) @end itemize formatting.texi(mymacro,38) formatting.texi(mymacro,38) @itemize @emph{after emph} formatting.texi(mymacro,38) @c comment in itemize formatting.texi(mymacro,38) @item e--mph item formatting.texi(mymacro,38) @end itemize formatting.texi(mymacro,38) formatting.texi(mymacro,38) @itemize @bullet{} a--n itemize line formatting.texi(mymacro,38) @cindex index entry within itemize formatting.texi(mymacro,38) @item i--tem 1 formatting.texi(mymacro,38) @item i--tem 2 formatting.texi(mymacro,38) @end itemize formatting.texi(mymacro,38) formatting.texi(mymacro,38) @enumerate formatting.texi(mymacro,38) @item e--numerate formatting.texi(mymacro,38) @end enumerate formatting.texi(mymacro,38) formatting.texi(mymacro,38) @multitable @columnfractions 6 7 formatting.texi(mymacro,38) @headitem mu--ltitable headitem @tab another tab formatting.texi(mymacro,38) @item mu--ltitable item @tab multitable tab formatting.texi(mymacro,38) @c comment in multitable formatting.texi(mymacro,38) @item mu--ltitable item 2 @tab multitable tab 2 formatting.texi(mymacro,38) @cindex index entry within multitable formatting.texi(mymacro,38) @item lone mu--ltitable item formatting.texi(mymacro,38) @end multitable formatting.texi(mymacro,38) formatting.texi(mymacro,38) @multitable {truc} {bidule} formatting.texi(mymacro,38) @item truc @tab bidule formatting.texi(mymacro,38) @end multitable formatting.texi(mymacro,38) formatting.texi(mymacro,38) @example formatting.texi(mymacro,38) e--xample some formatting.texi(mymacro,38) text formatting.texi(mymacro,38) @end example formatting.texi(mymacro,38) formatting.texi(mymacro,38) @smallexample formatting.texi(mymacro,38) s--mallexample formatting.texi(mymacro,38) @end smallexample formatting.texi(mymacro,38) formatting.texi(mymacro,38) @display formatting.texi(mymacro,38) d--isplay formatting.texi(mymacro,38) @end display formatting.texi(mymacro,38) formatting.texi(mymacro,38) @smalldisplay formatting.texi(mymacro,38) s--malldisplay formatting.texi(mymacro,38) @end smalldisplay formatting.texi(mymacro,38) formatting.texi(mymacro,38) @lisp formatting.texi(mymacro,38) l--isp formatting.texi(mymacro,38) @end lisp formatting.texi(mymacro,38) formatting.texi(mymacro,38) @smalllisp formatting.texi(mymacro,38) s--malllisp formatting.texi(mymacro,38) @end smalllisp formatting.texi(mymacro,38) formatting.texi(mymacro,38) @format formatting.texi(mymacro,38) f--ormat formatting.texi(mymacro,38) @end format formatting.texi(mymacro,38) formatting.texi(mymacro,38) @smallformat formatting.texi(mymacro,38) s--mallformat formatting.texi(mymacro,38) @end smallformat formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deffn c--ategory d--effn_name a--rguments... formatting.texi(mymacro,38) d--effn formatting.texi(mymacro,38) @end deffn formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deffn cate--gory de--ffn_name ar--guments @ formatting.texi(mymacro,38) more args @* even more so formatting.texi(mymacro,38) def--fn formatting.texi(mymacro,38) @end deffn formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deffn fset @var{i} a g formatting.texi(mymacro,38) @cindex index entry within deffn formatting.texi(mymacro,38) @deffnx {cmde} truc {} formatting.texi(mymacro,38) @deffnx Command {log trap} {} formatting.texi(mymacro,38) @deffnx Command { log trap1} {} formatting.texi(mymacro,38) @deffnx Command {log trap2 } {} formatting.texi(mymacro,38) @deffnx cmde @b{id ule} truc formatting.texi(mymacro,38) @deffnx cmde2 @b{id @samp{i} ule} truc formatting.texi(mymacro,38) @deffnx @b{id @samp{i} ule} formatting.texi(mymacro,38) @deffnx formatting.texi(mymacro,38) @deffnx aaa formatting.texi(mymacro,38) @deffnx {} {} formatting.texi(mymacro,38) @deffnx{} formatting.texi(mymacro,38) @deffnx{} machin formatting.texi(mymacro,38) @deffnx{} {bidule machin} formatting.texi(mymacro,38) @deffnx{truc} machin formatting.texi(mymacro,38) @deffnx{truc} { } formatting.texi(mymacro,38) @deffnx{truc} followed by a comment formatting.texi(mymacro,38) @c comment formatting.texi(mymacro,38) @deffnx{truc} formatting.texi(mymacro,38) @deffnx{} {} formatting.texi(mymacro,38) @deffnx {truc} a b c d e @b{f g} {h i} formatting.texi(mymacro,38) @deffnx {truc} deffnx before end deffn formatting.texi(mymacro,38) @end deffn formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deffn empty deffn formatting.texi(mymacro,38) @end deffn formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deffn empty deffn with deffnx formatting.texi(mymacro,38) @c comment between deffn and deffnx formatting.texi(mymacro,38) @deffnx empty deffnx formatting.texi(mymacro,38) @end deffn formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deffn fset @var{i} a g formatting.texi(mymacro,38) @deffnx {cmde} truc {} formatting.texi(mymacro,38) @c comment formatting.texi(mymacro,38) text in def item for second def item formatting.texi(mymacro,38) @end deffn formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defvr c--ategory d--efvr_name formatting.texi(mymacro,38) d--efvr formatting.texi(mymacro,38) @end defvr formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... formatting.texi(mymacro,38) d--eftypefn formatting.texi(mymacro,38) @end deftypefn formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... formatting.texi(mymacro,38) d--eftypeop formatting.texi(mymacro,38) @end deftypeop formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deftypevr c--ategory t--ype d--eftypevr_name formatting.texi(mymacro,38) d--eftypevr formatting.texi(mymacro,38) @end deftypevr formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defcv c--ategory c--lass d--efcv_name formatting.texi(mymacro,38) d--efcv formatting.texi(mymacro,38) @end defcv formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defop c--ategory c--lass d--efop_name a--rguments... formatting.texi(mymacro,38) d--efop formatting.texi(mymacro,38) @end defop formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deftp c--ategory d--eftp_name a--ttributes... formatting.texi(mymacro,38) d--eftp formatting.texi(mymacro,38) @end deftp formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defun d--efun_name a--rguments... formatting.texi(mymacro,38) d--efun formatting.texi(mymacro,38) @end defun formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defmac d--efmac_name a--rguments... formatting.texi(mymacro,38) d--efmac formatting.texi(mymacro,38) @end defmac formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defspec d--efspec_name a--rguments... formatting.texi(mymacro,38) d--efspec formatting.texi(mymacro,38) @end defspec formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defvar d--efvar_name argvar argvar1 formatting.texi(mymacro,38) d--efvar formatting.texi(mymacro,38) @end defvar formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defopt d--efopt_name formatting.texi(mymacro,38) d--efopt formatting.texi(mymacro,38) @end defopt formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deftypefun t--ype d--eftypefun_name a--rguments... formatting.texi(mymacro,38) d--eftypefun formatting.texi(mymacro,38) @end deftypefun formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deftypevar t--ype d--eftypevar_name formatting.texi(mymacro,38) d--eftypevar formatting.texi(mymacro,38) @end deftypevar formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defivar c--lass d--efivar_name formatting.texi(mymacro,38) d--efivar formatting.texi(mymacro,38) @end defivar formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deftypeivar c--lass t--ype d--eftypeivar_name formatting.texi(mymacro,38) d--eftypeivar formatting.texi(mymacro,38) @end deftypeivar formatting.texi(mymacro,38) formatting.texi(mymacro,38) @defmethod c--lass d--efmethod_name a--rguments... formatting.texi(mymacro,38) d--efmethod formatting.texi(mymacro,38) @end defmethod formatting.texi(mymacro,38) formatting.texi(mymacro,38) @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... formatting.texi(mymacro,38) d--eftypemethod formatting.texi(mymacro,38) @end deftypemethod formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@xref@{c---hapter@@@@, cross r---ef name@@@@, t---itle@@@@, file n---ame@@@@, ma---nual@@@@@}} @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@}. formatting.texi(mymacro,38) @code{@@ref@{chapter, cross ref name, title, file name, manual@}} @ref{chapter, cross ref name, title, file name, manual} formatting.texi(mymacro,38) @code{@@pxref@{chapter, cross ref name, title, file name, manual@}} @pxref{chapter, cross ref name, title, file name, manual} formatting.texi(mymacro,38) @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@ref@{chapter@}} @ref{chapter} formatting.texi(mymacro,38) @code{@@xref@{chapter@}} @xref{chapter}. formatting.texi(mymacro,38) @code{@@pxref@{chapter@}} @pxref{chapter} formatting.texi(mymacro,38) @code{@@ref@{s--ect@@comma@{@}ion@}} @ref{s--ect@comma{}ion} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@ref@{s--ect@@comma@{@}ion, a @@comma@{@} in cross formatting.texi(mymacro,38) ref, a comma@@comma@{@} in title, a comma@@comma@{@} in file, a @@comma@{@} in manual name @}} formatting.texi(mymacro,38) @ref{s--ect@comma{}ion, a @comma{} in cross formatting.texi(mymacro,38) ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@ref@{chapter,cross ref name@}} @ref{chapter,cross ref name} formatting.texi(mymacro,38) @code{@@ref@{chapter,,title@}} @ref{chapter,,title} formatting.texi(mymacro,38) @code{@@ref@{chapter,,,file name@}} @ref{chapter,,,file name} formatting.texi(mymacro,38) @code{@@ref@{chapter,,,,manual@}} @ref{chapter,,,,manual} formatting.texi(mymacro,38) @code{@@ref@{chapter,cross ref name,title,@}} @ref{chapter,cross ref name,title,} formatting.texi(mymacro,38) @code{@@ref@{chapter,cross ref name,,file name@}} @ref{chapter,cross ref name,,file name} formatting.texi(mymacro,38) @code{@@ref@{chapter,cross ref name,,,manual@}} @ref{chapter,cross ref name,,,manual} formatting.texi(mymacro,38) @code{@@ref@{chapter,cross ref name,title,file name@}} @ref{chapter,cross ref name,title,file name} formatting.texi(mymacro,38) @code{@@ref@{chapter,cross ref name,title,,manual@}} @ref{chapter,cross ref name,title,,manual} formatting.texi(mymacro,38) @code{@@ref@{chapter,cross ref name,title, file name, manual@}} @ref{chapter,cross ref name,title, file name, manual} formatting.texi(mymacro,38) @code{@@ref@{chapter,,title,file name@}} @ref{chapter,,title,file name} formatting.texi(mymacro,38) @code{@@ref@{chapter,,title,,manual@}} @ref{chapter,,title,,manual} formatting.texi(mymacro,38) @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} formatting.texi(mymacro,38) @code{@@ref@{chapter,,,file name,manual@}} @ref{chapter,,,file name,manual} formatting.texi(mymacro,38) formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,cross ref name@}} @ref{(pman)anode,cross ref name} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,,title@}} @ref{(pman)anode,,title} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,,,file name@}} @ref{(pman)anode,,,file name} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,,,,manual@}} @ref{(pman)anode,,,,manual} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,cross ref name,title,@}} @ref{(pman)anode,cross ref name,title,} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,cross ref name,,file name@}} @ref{(pman)anode,cross ref name,,file name} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,cross ref name,,,manual@}} @ref{(pman)anode,cross ref name,,,manual} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,cross ref name,title,file name@}} @ref{(pman)anode,cross ref name,title,file name} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,cross ref name,title,,manual@}} @ref{(pman)anode,cross ref name,title,,manual} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,cross ref name,title, file name, manual@}} @ref{(pman)anode,cross ref name,title, file name, manual} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,,title,file name@}} @ref{(pman)anode,,title,file name} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,,title,,manual@}} @ref{(pman)anode,,title,,manual} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,,title, file name, manual@}} @ref{(pman)anode,,title, file name, manual} formatting.texi(mymacro,38) @code{@@ref@{(pman)anode,,,file name,manual@}} @ref{(pman)anode,,,file name,manual} formatting.texi(mymacro,38) formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} formatting.texi(mymacro,38) @code{@@inforef@{chapter@}} @inforef{chapter} formatting.texi(mymacro,38) @code{@@inforef@{chapter, cross ref name@}} @inforef{chapter, cross ref name} formatting.texi(mymacro,38) @code{@@inforef@{chapter,,file name@}} @inforef{chapter,,file name} formatting.texi(mymacro,38) @code{@@inforef@{node, cross ref name, file name@}} @inforef{node, cross ref name, file name} formatting.texi(mymacro,38) @code{@@inforef@{node@}} @inforef{node} formatting.texi(mymacro,38) @code{@@inforef@{node, cross ref name@}} @inforef{node, cross ref name} formatting.texi(mymacro,38) @code{@@inforef@{node,,file name@}} @inforef{node,,file name} formatting.texi(mymacro,38) @code{@@inforef@{chapter, cross ref name, file name, spurious arg@}} @inforef{chapter, cross ref name, file name, spurious arg} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@inforef@{s--ect@@comma@{@}ion, a @@comma@{@} in cross formatting.texi(mymacro,38) ref, a comma@@comma@{@} in file@}} formatting.texi(mymacro,38) @inforef{s--ect@comma{}ion, a @comma{} in cross formatting.texi(mymacro,38) ref, a comma@comma{} in file} formatting.texi(mymacro,38) formatting.texi(mymacro,38) formatting.texi(mymacro,38) @table @bullet formatting.texi(mymacro,38) @c comment in table formatting.texi(mymacro,38) @item a formatting.texi(mymacro,38) l--ine formatting.texi(mymacro,38) @end table formatting.texi(mymacro,38) formatting.texi(mymacro,38) @vtable @asis formatting.texi(mymacro,38) @item a formatting.texi(mymacro,38) @c comment between item and itemx formatting.texi(mymacro,38) @itemx b formatting.texi(mymacro,38) l--ine formatting.texi(mymacro,38) @end vtable formatting.texi(mymacro,38) formatting.texi(mymacro,38) @ftable @minus formatting.texi(mymacro,38) @item a formatting.texi(mymacro,38) @cindex index entry between item and itemx formatting.texi(mymacro,38) @itemx b formatting.texi(mymacro,38) l--ine formatting.texi(mymacro,38) @end ftable formatting.texi(mymacro,38) formatting.texi(mymacro,38) @cartouche formatting.texi(mymacro,38) c--artouche formatting.texi(mymacro,38) @end cartouche formatting.texi(mymacro,38) formatting.texi(mymacro,38) @flushleft formatting.texi(mymacro,38) f--lushleft formatting.texi(mymacro,38) @end flushleft formatting.texi(mymacro,38) formatting.texi(mymacro,38) @flushright formatting.texi(mymacro,38) f--lushright formatting.texi(mymacro,38) @end flushright formatting.texi(mymacro,38) formatting.texi(mymacro,38) @center ce--ntered line formatting.texi(mymacro,38) formatting.texi(mymacro,38) @verbatiminclude simplest.texi formatting.texi(mymacro,38) formatting.texi(mymacro,38) @verbatim formatting.texi(mymacro,38) in verbatim '' formatting.texi(mymacro,38) @end verbatim formatting.texi(mymacro,38) formatting.texi(mymacro,38) formatting.texi(mymacro,38) @html formatting.texi(mymacro,38) html '' formatting.texi(mymacro,38) @end html formatting.texi(mymacro,38) formatting.texi(mymacro,38) formatting.texi(mymacro,38) formatting.texi(mymacro,38) @majorheading majorheading formatting.texi(mymacro,38) formatting.texi(mymacro,38) @chapheading chapheading formatting.texi(mymacro,38) formatting.texi(mymacro,38) @heading heading formatting.texi(mymacro,38) formatting.texi(mymacro,38) @subheading subheading formatting.texi(mymacro,38) formatting.texi(mymacro,38) @subsubheading subsubheading formatting.texi(mymacro,38) formatting.texi(mymacro,38) @c makeinfo cannot handle that formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@acronym@{--a,an accronym @@comma@{@} @@enddots@{@}@}} @acronym{--a,an accronym @comma{} @enddots{}} formatting.texi(mymacro,38) @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude--@@comma@{@} @@b@{Autonome@} @}} @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } formatting.texi(mymacro,38) @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@math@{--a@@minus@{@} @{\frac@{1@}@{2@}@}@}} @math{--a@minus{} {\frac{1}{2}}} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@image@{f-ile,,,alt@@verb@{:jk _" %@:@}@}} @image{f-ile,,,alt@verb{:jk _" %@:}} formatting.texi(mymacro,38) @code{@@image@{f--ile,aze,az,@@verb@{:jk _" %@@:@} @@b@{in b "@},e--xt@}} @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} formatting.texi(mymacro,38) @code{@@image@{file@@verb@{:jk _" %@@:@},,,alt@@verb@{:jk _" %@@:@}@}} @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @set invalid formatting.texi(mymacro,38) formatting.texi(mymacro,38) formatting.texi(mymacro,38) @c invalid texinfo formatting.texi(mymacro,38) formatting.texi(mymacro,38) Somehow invalid use of @@,:@* formatting.texi(mymacro,38) @@, @, formatting.texi(mymacro,38) @* formatting.texi(mymacro,38) @@,@@"u @,@"u formatting.texi(mymacro,38) formatting.texi(mymacro,38) Invalid use of @@':@* formatting.texi(mymacro,38) @@' @' formatting.texi(mymacro,38) @* formatting.texi(mymacro,38) @@'@@"u @'@"u formatting.texi(mymacro,38) formatting.texi(mymacro,38) @c only i or j as arg formatting.texi(mymacro,38) @@dotless@{truc@} @dotless{truc} formatting.texi(mymacro,38) @@dotless@{ij@} @dotless{ij} formatting.texi(mymacro,38) @code{@@dotless@{--a@}} @dotless{--a} formatting.texi(mymacro,38) @code{@@dotless@{a@}} @dotless{a} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @c braces missing formatting.texi(mymacro,38) @@TeX, but without brace @TeX formatting.texi(mymacro,38) formatting.texi(mymacro,38) @c unknown command formatting.texi(mymacro,38) @code{@@#} @# formatting.texi(mymacro,38) formatting.texi(mymacro,38) @c no arg formatting.texi(mymacro,38) @code{@@w@{--a@}} @w{--a} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @c no file formatting.texi(mymacro,38) @code{@@image@{,1--xt@}} @image{,1--xt} formatting.texi(mymacro,38) @code{@@image@{,,2--xt@}} @image{,,2--xt} formatting.texi(mymacro,38) @code{@@image@{,,,3--xt@}} @image{,,,3--xt} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @sp formatting.texi(mymacro,38) formatting.texi(mymacro,38) @c braces missing formatting.texi(mymacro,38) @itemize @emph after emph formatting.texi(mymacro,38) @item e--mph item formatting.texi(mymacro,38) @end itemize formatting.texi(mymacro,38) formatting.texi(mymacro,38) @c braces missing formatting.texi(mymacro,38) @itemize @bullet a--n itemize line formatting.texi(mymacro,38) @item i--tem 1 formatting.texi(mymacro,38) @item i--tem 2 formatting.texi(mymacro,38) @end itemize formatting.texi(mymacro,38) formatting.texi(mymacro,38) @c deffnx after deff lines formatting.texi(mymacro,38) @deffn fun formatting.texi(mymacro,38) @deffnx truc machin bidule chose and } formatting.texi(mymacro,38) @deffnx truc machin bidule chose and } after formatting.texi(mymacro,38) @deffnx truc machin bidule chose and { formatting.texi(mymacro,38) @deffnx truc machin bidule chose and { and after formatting.texi(mymacro,38) @deffnx {truc} followed by a comment formatting.texi(mymacro,38) @c comment formatting.texi(mymacro,38) Various deff lines formatting.texi(mymacro,38) @deffnx {truc} after a deff item formatting.texi(mymacro,38) @end deffn formatting.texi(mymacro,38) formatting.texi(mymacro,38) @c node is non existent, or missing first arg formatting.texi(mymacro,38) @code{@@ref@{node@}} @ref{node} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@ref@{,cross ref name@}} @ref{,cross ref name} formatting.texi(mymacro,38) @code{@@ref@{,,title@}} @ref{,,title} formatting.texi(mymacro,38) @code{@@ref@{,,,file name@}} @ref{,,,file name} formatting.texi(mymacro,38) @code{@@ref@{,,,,manual@}} @ref{,,,,manual} formatting.texi(mymacro,38) @code{@@ref@{node,cross ref name@}} @ref{node,cross ref name} formatting.texi(mymacro,38) @code{@@ref@{node,,title@}} @ref{node,,title} formatting.texi(mymacro,38) @code{@@ref@{node,,,file name@}} @ref{node,,,file name} formatting.texi(mymacro,38) @code{@@ref@{node,,,,manual@}} @ref{node,,,,manual} formatting.texi(mymacro,38) @code{@@ref@{node,cross ref name,title,@}} @ref{node,cross ref name,title,} formatting.texi(mymacro,38) @code{@@ref@{node,cross ref name,,file name@}} @ref{node,cross ref name,,file name} formatting.texi(mymacro,38) @code{@@ref@{node,cross ref name,,,manual@}} @ref{node,cross ref name,,,manual} formatting.texi(mymacro,38) @code{@@ref@{node,cross ref name,title,file name@}} @ref{node,cross ref name,title,file name} formatting.texi(mymacro,38) @code{@@ref@{node,cross ref name,title,,manual@}} @ref{node,cross ref name,title,,manual} formatting.texi(mymacro,38) @code{@@ref@{node,cross ref name,title, file name, manual@}} @ref{node,cross ref name,title, file name, manual} formatting.texi(mymacro,38) @code{@@ref@{node,,title,file name@}} @ref{node,,title,file name} formatting.texi(mymacro,38) @code{@@ref@{node,,title,,manual@}} @ref{node,,title,,manual} formatting.texi(mymacro,38) @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} formatting.texi(mymacro,38) @code{@@ref@{node,,title, file name, manual@}} @ref{node,,title, file name, manual} formatting.texi(mymacro,38) @code{@@ref@{node,,,file name,manual@}} @ref{node,,,file name,manual} formatting.texi(mymacro,38) @code{@@ref@{,cross ref name,title,@}} @ref{,cross ref name,title,} formatting.texi(mymacro,38) @code{@@ref@{,cross ref name,,file name@}} @ref{,cross ref name,,file name} formatting.texi(mymacro,38) @code{@@ref@{,cross ref name,,,manual@}} @ref{,cross ref name,,,manual} formatting.texi(mymacro,38) @code{@@ref@{,cross ref name,title,file name@}} @ref{,cross ref name,title,file name} formatting.texi(mymacro,38) @code{@@ref@{,cross ref name,title,,manual@}} @ref{,cross ref name,title,,manual} formatting.texi(mymacro,38) @code{@@ref@{,cross ref name,title, file name, manual@}} @ref{,cross ref name,title, file name, manual} formatting.texi(mymacro,38) @code{@@ref@{,,title,file name@}} @ref{,,title,file name} formatting.texi(mymacro,38) @code{@@ref@{,,title,,manual@}} @ref{,,title,,manual} formatting.texi(mymacro,38) @code{@@ref@{,,title, file name, manual@}} @ref{,,title, file name, manual} formatting.texi(mymacro,38) @code{@@ref@{,,,file name,manual@}} @ref{,,,file name,manual} formatting.texi(mymacro,38) formatting.texi(mymacro,38) @code{@@inforef@{,cross ref name @}} @inforef{,cross ref name } formatting.texi(mymacro,38) @code{@@inforef@{,,file name@}} @inforef{,,file name} formatting.texi(mymacro,38) @code{@@inforef@{,cross ref name, file name@}} @inforef{,cross ref name, file name} formatting.texi(mymacro,38) @code{@@inforef@{@}} @inforef{} formatting.texi(mymacro,38) formatting.texi(mymacro,38) formatting.texi(,39) formatting.texi(,40) In example. formatting.texi(,41) @example formatting.texi(mymacro,42) formatting.texi(mymacro,42) < formatting.texi(mymacro,42) > formatting.texi(mymacro,42) " formatting.texi(mymacro,42) & formatting.texi(mymacro,42) ' formatting.texi(mymacro,42) ` formatting.texi(mymacro,42) formatting.texi(mymacro,42) ``simple-double--three---four----''@* formatting.texi(mymacro,42) code: @code{``simple-double--three---four----''} @* formatting.texi(mymacro,42) asis: @asis{``simple-double--three---four----''} @* formatting.texi(mymacro,42) strong: @strong{``simple-double--three---four----''} @* formatting.texi(mymacro,42) kbd: @kbd{``simple-double--three---four----''} @* formatting.texi(mymacro,42) formatting.texi(mymacro,42) `@w{}`simple-double-@w{}-three---four----'@w{}'@* formatting.texi(mymacro,42) formatting.texi(mymacro,42) @cindex --option formatting.texi(mymacro,42) @cindex `` formatting.texi(mymacro,42) @findex `` formatting.texi(mymacro,42) @findex --foption formatting.texi(mymacro,42) formatting.texi(mymacro,42) @@"u @"u formatting.texi(mymacro,42) @@"@{U@} @"{U} formatting.texi(mymacro,42) @@~n @~n formatting.texi(mymacro,42) @@^a @^a formatting.texi(mymacro,42) @@'e @'e formatting.texi(mymacro,42) @@=o @=o formatting.texi(mymacro,42) @@`i @`i formatting.texi(mymacro,42) @@'@{e@} @'{e} formatting.texi(mymacro,42) @@'@{@@dotless@{i@}@} @'{@dotless{i}} formatting.texi(mymacro,42) @@dotless@{i@} @dotless{i} formatting.texi(mymacro,42) @@dotless@{j@} @dotless{j} formatting.texi(mymacro,42) @@`@{@@=E@} @`{@=E} formatting.texi(mymacro,42) @@l@{@} @l{} formatting.texi(mymacro,42) @@,@{@@'C@} @,{@'C} formatting.texi(mymacro,42) @@,c @,c formatting.texi(mymacro,42) @@,c@@"u @,c@"u @* formatting.texi(mymacro,42) formatting.texi(mymacro,42) @@* @* formatting.texi(mymacro,42) @@ followed by a space formatting.texi(mymacro,42) @ formatting.texi(mymacro,42) @@ followed by a tab formatting.texi(mymacro,42) @ formatting.texi(mymacro,42) @@ followed by a new line formatting.texi(mymacro,42) @ formatting.texi(mymacro,42) @code{@@-} @- formatting.texi(mymacro,42) @code{@@|} @| formatting.texi(mymacro,42) @code{@@:} @: formatting.texi(mymacro,42) @code{@@!} @! formatting.texi(mymacro,42) @code{@@?} @? formatting.texi(mymacro,42) @code{@@.} @. formatting.texi(mymacro,42) @code{@@@@} @@ formatting.texi(mymacro,42) @code{@@@}} @} formatting.texi(mymacro,42) @code{@@@{} @{ formatting.texi(mymacro,42) @code{@@/} @/ formatting.texi(mymacro,42) formatting.texi(mymacro,42) foo vs.@: bar. formatting.texi(mymacro,42) colon :@:And something else. formatting.texi(mymacro,42) semi colon ;@:. formatting.texi(mymacro,42) And ? ?@:. formatting.texi(mymacro,42) Now ! !@:@@ formatting.texi(mymacro,42) but , ,@: formatting.texi(mymacro,42) formatting.texi(mymacro,42) @@TeX @TeX{} formatting.texi(mymacro,42) @@LaTeX @LaTeX{} formatting.texi(mymacro,42) @@bullet @bullet{} formatting.texi(mymacro,42) @@copyright @copyright{} formatting.texi(mymacro,42) @@dots @dots{} formatting.texi(mymacro,42) @@enddots @enddots{} formatting.texi(mymacro,42) @@equiv @equiv{} formatting.texi(mymacro,42) @@error @error{} formatting.texi(mymacro,42) @@expansion @expansion{} formatting.texi(mymacro,42) @@minus @minus{} formatting.texi(mymacro,42) @@point @point{} formatting.texi(mymacro,42) @@print @print{} formatting.texi(mymacro,42) @@result @result{} formatting.texi(mymacro,42) @@today @today{} formatting.texi(mymacro,42) @@aa @aa{} formatting.texi(mymacro,42) @@AA @AA{} formatting.texi(mymacro,42) @@ae @ae{} formatting.texi(mymacro,42) @@oe @oe{} formatting.texi(mymacro,42) @@AE @AE{} formatting.texi(mymacro,42) @@OE @OE{} formatting.texi(mymacro,42) @@o @o{} formatting.texi(mymacro,42) @@O @O{} formatting.texi(mymacro,42) @@ss @ss{} formatting.texi(mymacro,42) @@l @l{} formatting.texi(mymacro,42) @@L @L{} formatting.texi(mymacro,42) @@exclamdown @exclamdown{} formatting.texi(mymacro,42) @@questiondown @questiondown{} formatting.texi(mymacro,42) @@pounds @pounds{} formatting.texi(mymacro,42) @@registeredsymbol @registeredsymbol{} formatting.texi(mymacro,42) @@ordf @ordf{} formatting.texi(mymacro,42) @@ordm @ordm{} formatting.texi(mymacro,42) @@comma @comma{} formatting.texi(mymacro,42) @@quotedblleft @quotedblleft{} formatting.texi(mymacro,42) @@quotedblright @quotedblright{} formatting.texi(mymacro,42) @@quoteleft @quoteleft{} formatting.texi(mymacro,42) @@quoteright @quoteright{} formatting.texi(mymacro,42) @@quotedblbase @quotedblbase{} formatting.texi(mymacro,42) @@quotesinglbase @quotesinglbase{} formatting.texi(mymacro,42) @@guillemetleft @guillemetleft{} formatting.texi(mymacro,42) @@guillemetright @guillemetright{} formatting.texi(mymacro,42) @@guillemotleft @guillemotleft{} formatting.texi(mymacro,42) @@guillemotright @guillemotright{} formatting.texi(mymacro,42) @@guilsinglleft @guilsinglleft{} formatting.texi(mymacro,42) @@guilsinglright @guilsinglright{} formatting.texi(mymacro,42) @@textdegree @textdegree{} formatting.texi(mymacro,42) @@euro @euro{} formatting.texi(mymacro,42) @@arrow @arrow{} formatting.texi(mymacro,42) @@leq @leq{} formatting.texi(mymacro,42) @@geq @geq{} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@acronym@{--a,an accronym@}} @acronym{--a,an accronym} formatting.texi(mymacro,42) @code{@@acronym@{--a@}} @acronym{--a} formatting.texi(mymacro,42) @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude Autonome @}} @abbr{@'E--. @comma{}A., @'Etude Autonome } formatting.texi(mymacro,42) @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} formatting.texi(mymacro,42) @code{@@asis@{--a@}} @asis{--a} formatting.texi(mymacro,42) @code{@@b@{--a@}} @b{--a} formatting.texi(mymacro,42) @code{@@cite@{--a@}} @cite{--a} formatting.texi(mymacro,42) @code{@@code@{--a@}} @code{--a} formatting.texi(mymacro,42) @code{@@command@{--a@}} @command{--a} formatting.texi(mymacro,42) @code{@@ctrl@{--a@}} @ctrl{--a} formatting.texi(mymacro,42) @code{@@dfn@{--a@}} @dfn{--a} formatting.texi(mymacro,42) @code{@@dmn@{--a@}} @dmn{--a} formatting.texi(mymacro,42) @code{@@email@{--a,--b@}} @email{--a,--b} formatting.texi(mymacro,42) @code{@@email@{,--b@}} @email{,--b} formatting.texi(mymacro,42) @code{@@email@{--a@}} @email{--a} formatting.texi(mymacro,42) @code{@@emph@{--a@}} @emph{--a} formatting.texi(mymacro,42) @code{@@env@{--a@}} @env{--a} formatting.texi(mymacro,42) @code{@@file@{--a@}} @file{--a} formatting.texi(mymacro,42) @code{@@i@{--a@}} @i{--a} formatting.texi(mymacro,42) @code{@@kbd@{--a@}} @kbd{--a} formatting.texi(mymacro,42) @code{@@key@{--a@}} @key{--a} formatting.texi(mymacro,42) @code{@@math@{--a @{\frac@{1@}@{2@}@} @@minus@{@}@}} @math{--a {\frac{1}{2}} @minus{}} formatting.texi(mymacro,42) @code{@@option@{--a@}} @option{--a} formatting.texi(mymacro,42) @code{@@r@{--a@}} @r{--a} formatting.texi(mymacro,42) @code{@@samp@{--a@}} @samp{--a} formatting.texi(mymacro,42) @code{@@sc@{--a@}} @sc{--a} formatting.texi(mymacro,42) @code{@@strong@{--a@}} @strong{--a} formatting.texi(mymacro,42) @code{@@t@{--a@}} @t{--a} formatting.texi(mymacro,42) @code{@@sansserif@{--a@}} @sansserif{--a} formatting.texi(mymacro,42) @code{@@titlefont@{--a@}} @titlefont{--a} formatting.texi(mymacro,42) @code{@@indicateurl@{--a@}} @indicateurl{--a} formatting.texi(mymacro,42) @code{@@uref@{--a,--b@}} @uref{--a,--b} formatting.texi(mymacro,42) @code{@@uref@{--a@}} @uref{--a} formatting.texi(mymacro,42) @code{@@uref@{,--b@}} @uref{,--b} formatting.texi(mymacro,42) @code{@@uref@{--a,--b,--c@}} @uref{--a,--b,--c} formatting.texi(mymacro,42) @code{@@uref@{,--b,--c@}} @uref{,--b,--c} formatting.texi(mymacro,42) @code{@@uref@{--a,,--c@}} @uref{--a,,--c} formatting.texi(mymacro,42) @code{@@uref@{,,--c@}} @uref{,,--c} formatting.texi(mymacro,42) @code{@@url@{--a,--b@}} @url{--a,--b} formatting.texi(mymacro,42) @code{@@url@{--a,@}} @url{--a,} formatting.texi(mymacro,42) @code{@@url@{,--b@}} @url{,--b} formatting.texi(mymacro,42) @code{@@var@{--a@}} @var{--a} formatting.texi(mymacro,42) @code{@@verb@{:--a:@}} @verb{:--a:} formatting.texi(mymacro,42) @code{@@verb@{:a < & @@ % " -- b:@}} @verb{:a < & @ % " -- b:} formatting.texi(mymacro,42) @code{@@w@{@}} @w{} formatting.texi(mymacro,42) @code{@@H@{a@}} @H{a} formatting.texi(mymacro,42) @code{@@H@{--a@}} @H{--a} formatting.texi(mymacro,42) @code{@@dotaccent@{a@}} @dotaccent{a} formatting.texi(mymacro,42) @code{@@dotaccent@{--a@}} @dotaccent{--a} formatting.texi(mymacro,42) @code{@@ringaccent@{a@}} @ringaccent{a} formatting.texi(mymacro,42) @code{@@ringaccent@{--a@}} @ringaccent{--a} formatting.texi(mymacro,42) @code{@@tieaccent@{a@}} @tieaccent{a} formatting.texi(mymacro,42) @code{@@tieaccent@{--a@}} @tieaccent{--a} formatting.texi(mymacro,42) @code{@@u@{a@}} @u{a} formatting.texi(mymacro,42) @code{@@u@{--a@}} @u{--a} formatting.texi(mymacro,42) @code{@@ubaraccent@{a@}} @ubaraccent{a} formatting.texi(mymacro,42) @code{@@ubaraccent@{--a@}} @ubaraccent{--a} formatting.texi(mymacro,42) @code{@@udotaccent@{a@}} @udotaccent{a} formatting.texi(mymacro,42) @code{@@udotaccent@{--a@}} @udotaccent{--a} formatting.texi(mymacro,42) @code{@@v@{a@}} @v{a} formatting.texi(mymacro,42) @code{@@v@{--a@}} @v{--a} formatting.texi(mymacro,42) @code{@@,@{c@}} @,{c} formatting.texi(mymacro,42) @code{@@,@{--c@}} @,{--c} formatting.texi(mymacro,42) @code{@@ogonek@{a@}} @ogonek{a} formatting.texi(mymacro,42) @code{@@ogonek@{--a@}} @ogonek{--a} formatting.texi(mymacro,42) @code{@@footnote@{in footnote@}} @footnote{in footnote} formatting.texi(mymacro,42) @code{@@footnote@{in footnote2@}} @footnote{in footnote2} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@image@{f--ile@}} @image{f--ile} formatting.texi(mymacro,42) @code{@@image@{f--ile,l--i@}} @image{f--ile,l--i} formatting.texi(mymacro,42) @code{@@image@{f--ile,,l--e@}} @image{f--ile,,l--e} formatting.texi(mymacro,42) @code{@@image@{f--ile,,,alt@}} @image{f--ile,,,alt} formatting.texi(mymacro,42) @code{@@image@{f--ile,,,,e-d-xt@}} @image{f--ile,,,,e--xt} formatting.texi(mymacro,42) @code{@@image@{f--ile,aze,az,alt,e--xt@}} @image{f--ile,aze,az,alt,e--xt} formatting.texi(mymacro,42) @code{@@image@{f-ile,aze,,a--lt@}} @image{f-ile,aze,,a--lt} formatting.texi(mymacro,42) @code{@@image@{@@file@{f--ile@}@@@@@@.,aze,az,alt,@@file@{file ext@} e--xt@@@}} @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@}} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @sp 2 formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} formatting.texi(mymacro,42) @clickstyle @result formatting.texi(mymacro,42) After clickstyle @result{} formatting.texi(mymacro,42) @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} formatting.texi(mymacro,42) @clickstyle @arrow formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation formatting.texi(mymacro,42) A quot---ation formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation Note formatting.texi(mymacro,42) A Note formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation note formatting.texi(mymacro,42) A note formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation Caution formatting.texi(mymacro,42) Caution formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation Important formatting.texi(mymacro,42) Important formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation Tip formatting.texi(mymacro,42) a Tip formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation Warning formatting.texi(mymacro,42) a Warning. formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation something @'e @TeX{} formatting.texi(mymacro,42) The something @'e @TeX{} is here. formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation @@ at the end of line @ formatting.texi(mymacro,42) A @@ at the end of the @@quotation line. formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation something, other thing formatting.texi(mymacro,42) something, other thing formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation Note, the note formatting.texi(mymacro,42) Note, the note formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation Empty formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation @asis{} formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @quotation @* formatting.texi(mymacro,42) @end quotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @smallquotation formatting.texi(mymacro,42) A small quot---ation formatting.texi(mymacro,42) @end smallquotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @smallquotation Note formatting.texi(mymacro,42) A small Note formatting.texi(mymacro,42) @end smallquotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @smallquotation something, other thing formatting.texi(mymacro,42) something, other thing formatting.texi(mymacro,42) @end smallquotation formatting.texi(mymacro,42) formatting.texi(mymacro,42) @itemize formatting.texi(mymacro,42) @item i--temize formatting.texi(mymacro,42) @end itemize formatting.texi(mymacro,42) formatting.texi(mymacro,42) @itemize + formatting.texi(mymacro,42) @item i--tem + formatting.texi(mymacro,42) @end itemize formatting.texi(mymacro,42) formatting.texi(mymacro,42) @itemize @bullet formatting.texi(mymacro,42) @item b--ullet formatting.texi(mymacro,42) @end itemize formatting.texi(mymacro,42) formatting.texi(mymacro,42) @itemize @minus formatting.texi(mymacro,42) @item minu--s formatting.texi(mymacro,42) @end itemize formatting.texi(mymacro,42) formatting.texi(mymacro,42) @itemize @emph formatting.texi(mymacro,42) @item e--mph item formatting.texi(mymacro,42) @end itemize formatting.texi(mymacro,42) formatting.texi(mymacro,42) @itemize @emph{after emph} formatting.texi(mymacro,42) @c comment in itemize formatting.texi(mymacro,42) @item e--mph item formatting.texi(mymacro,42) @end itemize formatting.texi(mymacro,42) formatting.texi(mymacro,42) @itemize @bullet{} a--n itemize line formatting.texi(mymacro,42) @cindex index entry within itemize formatting.texi(mymacro,42) @item i--tem 1 formatting.texi(mymacro,42) @item i--tem 2 formatting.texi(mymacro,42) @end itemize formatting.texi(mymacro,42) formatting.texi(mymacro,42) @enumerate formatting.texi(mymacro,42) @item e--numerate formatting.texi(mymacro,42) @end enumerate formatting.texi(mymacro,42) formatting.texi(mymacro,42) @multitable @columnfractions 6 7 formatting.texi(mymacro,42) @headitem mu--ltitable headitem @tab another tab formatting.texi(mymacro,42) @item mu--ltitable item @tab multitable tab formatting.texi(mymacro,42) @c comment in multitable formatting.texi(mymacro,42) @item mu--ltitable item 2 @tab multitable tab 2 formatting.texi(mymacro,42) @cindex index entry within multitable formatting.texi(mymacro,42) @item lone mu--ltitable item formatting.texi(mymacro,42) @end multitable formatting.texi(mymacro,42) formatting.texi(mymacro,42) @multitable {truc} {bidule} formatting.texi(mymacro,42) @item truc @tab bidule formatting.texi(mymacro,42) @end multitable formatting.texi(mymacro,42) formatting.texi(mymacro,42) @example formatting.texi(mymacro,42) e--xample some formatting.texi(mymacro,42) text formatting.texi(mymacro,42) @end example formatting.texi(mymacro,42) formatting.texi(mymacro,42) @smallexample formatting.texi(mymacro,42) s--mallexample formatting.texi(mymacro,42) @end smallexample formatting.texi(mymacro,42) formatting.texi(mymacro,42) @display formatting.texi(mymacro,42) d--isplay formatting.texi(mymacro,42) @end display formatting.texi(mymacro,42) formatting.texi(mymacro,42) @smalldisplay formatting.texi(mymacro,42) s--malldisplay formatting.texi(mymacro,42) @end smalldisplay formatting.texi(mymacro,42) formatting.texi(mymacro,42) @lisp formatting.texi(mymacro,42) l--isp formatting.texi(mymacro,42) @end lisp formatting.texi(mymacro,42) formatting.texi(mymacro,42) @smalllisp formatting.texi(mymacro,42) s--malllisp formatting.texi(mymacro,42) @end smalllisp formatting.texi(mymacro,42) formatting.texi(mymacro,42) @format formatting.texi(mymacro,42) f--ormat formatting.texi(mymacro,42) @end format formatting.texi(mymacro,42) formatting.texi(mymacro,42) @smallformat formatting.texi(mymacro,42) s--mallformat formatting.texi(mymacro,42) @end smallformat formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deffn c--ategory d--effn_name a--rguments... formatting.texi(mymacro,42) d--effn formatting.texi(mymacro,42) @end deffn formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deffn cate--gory de--ffn_name ar--guments @ formatting.texi(mymacro,42) more args @* even more so formatting.texi(mymacro,42) def--fn formatting.texi(mymacro,42) @end deffn formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deffn fset @var{i} a g formatting.texi(mymacro,42) @cindex index entry within deffn formatting.texi(mymacro,42) @deffnx {cmde} truc {} formatting.texi(mymacro,42) @deffnx Command {log trap} {} formatting.texi(mymacro,42) @deffnx Command { log trap1} {} formatting.texi(mymacro,42) @deffnx Command {log trap2 } {} formatting.texi(mymacro,42) @deffnx cmde @b{id ule} truc formatting.texi(mymacro,42) @deffnx cmde2 @b{id @samp{i} ule} truc formatting.texi(mymacro,42) @deffnx @b{id @samp{i} ule} formatting.texi(mymacro,42) @deffnx formatting.texi(mymacro,42) @deffnx aaa formatting.texi(mymacro,42) @deffnx {} {} formatting.texi(mymacro,42) @deffnx{} formatting.texi(mymacro,42) @deffnx{} machin formatting.texi(mymacro,42) @deffnx{} {bidule machin} formatting.texi(mymacro,42) @deffnx{truc} machin formatting.texi(mymacro,42) @deffnx{truc} { } formatting.texi(mymacro,42) @deffnx{truc} followed by a comment formatting.texi(mymacro,42) @c comment formatting.texi(mymacro,42) @deffnx{truc} formatting.texi(mymacro,42) @deffnx{} {} formatting.texi(mymacro,42) @deffnx {truc} a b c d e @b{f g} {h i} formatting.texi(mymacro,42) @deffnx {truc} deffnx before end deffn formatting.texi(mymacro,42) @end deffn formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deffn empty deffn formatting.texi(mymacro,42) @end deffn formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deffn empty deffn with deffnx formatting.texi(mymacro,42) @c comment between deffn and deffnx formatting.texi(mymacro,42) @deffnx empty deffnx formatting.texi(mymacro,42) @end deffn formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deffn fset @var{i} a g formatting.texi(mymacro,42) @deffnx {cmde} truc {} formatting.texi(mymacro,42) @c comment formatting.texi(mymacro,42) text in def item for second def item formatting.texi(mymacro,42) @end deffn formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defvr c--ategory d--efvr_name formatting.texi(mymacro,42) d--efvr formatting.texi(mymacro,42) @end defvr formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... formatting.texi(mymacro,42) d--eftypefn formatting.texi(mymacro,42) @end deftypefn formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... formatting.texi(mymacro,42) d--eftypeop formatting.texi(mymacro,42) @end deftypeop formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deftypevr c--ategory t--ype d--eftypevr_name formatting.texi(mymacro,42) d--eftypevr formatting.texi(mymacro,42) @end deftypevr formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defcv c--ategory c--lass d--efcv_name formatting.texi(mymacro,42) d--efcv formatting.texi(mymacro,42) @end defcv formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defop c--ategory c--lass d--efop_name a--rguments... formatting.texi(mymacro,42) d--efop formatting.texi(mymacro,42) @end defop formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deftp c--ategory d--eftp_name a--ttributes... formatting.texi(mymacro,42) d--eftp formatting.texi(mymacro,42) @end deftp formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defun d--efun_name a--rguments... formatting.texi(mymacro,42) d--efun formatting.texi(mymacro,42) @end defun formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defmac d--efmac_name a--rguments... formatting.texi(mymacro,42) d--efmac formatting.texi(mymacro,42) @end defmac formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defspec d--efspec_name a--rguments... formatting.texi(mymacro,42) d--efspec formatting.texi(mymacro,42) @end defspec formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defvar d--efvar_name argvar argvar1 formatting.texi(mymacro,42) d--efvar formatting.texi(mymacro,42) @end defvar formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defopt d--efopt_name formatting.texi(mymacro,42) d--efopt formatting.texi(mymacro,42) @end defopt formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deftypefun t--ype d--eftypefun_name a--rguments... formatting.texi(mymacro,42) d--eftypefun formatting.texi(mymacro,42) @end deftypefun formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deftypevar t--ype d--eftypevar_name formatting.texi(mymacro,42) d--eftypevar formatting.texi(mymacro,42) @end deftypevar formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defivar c--lass d--efivar_name formatting.texi(mymacro,42) d--efivar formatting.texi(mymacro,42) @end defivar formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deftypeivar c--lass t--ype d--eftypeivar_name formatting.texi(mymacro,42) d--eftypeivar formatting.texi(mymacro,42) @end deftypeivar formatting.texi(mymacro,42) formatting.texi(mymacro,42) @defmethod c--lass d--efmethod_name a--rguments... formatting.texi(mymacro,42) d--efmethod formatting.texi(mymacro,42) @end defmethod formatting.texi(mymacro,42) formatting.texi(mymacro,42) @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... formatting.texi(mymacro,42) d--eftypemethod formatting.texi(mymacro,42) @end deftypemethod formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@xref@{c---hapter@@@@, cross r---ef name@@@@, t---itle@@@@, file n---ame@@@@, ma---nual@@@@@}} @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@}. formatting.texi(mymacro,42) @code{@@ref@{chapter, cross ref name, title, file name, manual@}} @ref{chapter, cross ref name, title, file name, manual} formatting.texi(mymacro,42) @code{@@pxref@{chapter, cross ref name, title, file name, manual@}} @pxref{chapter, cross ref name, title, file name, manual} formatting.texi(mymacro,42) @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@ref@{chapter@}} @ref{chapter} formatting.texi(mymacro,42) @code{@@xref@{chapter@}} @xref{chapter}. formatting.texi(mymacro,42) @code{@@pxref@{chapter@}} @pxref{chapter} formatting.texi(mymacro,42) @code{@@ref@{s--ect@@comma@{@}ion@}} @ref{s--ect@comma{}ion} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@ref@{s--ect@@comma@{@}ion, a @@comma@{@} in cross formatting.texi(mymacro,42) ref, a comma@@comma@{@} in title, a comma@@comma@{@} in file, a @@comma@{@} in manual name @}} formatting.texi(mymacro,42) @ref{s--ect@comma{}ion, a @comma{} in cross formatting.texi(mymacro,42) ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@ref@{chapter,cross ref name@}} @ref{chapter,cross ref name} formatting.texi(mymacro,42) @code{@@ref@{chapter,,title@}} @ref{chapter,,title} formatting.texi(mymacro,42) @code{@@ref@{chapter,,,file name@}} @ref{chapter,,,file name} formatting.texi(mymacro,42) @code{@@ref@{chapter,,,,manual@}} @ref{chapter,,,,manual} formatting.texi(mymacro,42) @code{@@ref@{chapter,cross ref name,title,@}} @ref{chapter,cross ref name,title,} formatting.texi(mymacro,42) @code{@@ref@{chapter,cross ref name,,file name@}} @ref{chapter,cross ref name,,file name} formatting.texi(mymacro,42) @code{@@ref@{chapter,cross ref name,,,manual@}} @ref{chapter,cross ref name,,,manual} formatting.texi(mymacro,42) @code{@@ref@{chapter,cross ref name,title,file name@}} @ref{chapter,cross ref name,title,file name} formatting.texi(mymacro,42) @code{@@ref@{chapter,cross ref name,title,,manual@}} @ref{chapter,cross ref name,title,,manual} formatting.texi(mymacro,42) @code{@@ref@{chapter,cross ref name,title, file name, manual@}} @ref{chapter,cross ref name,title, file name, manual} formatting.texi(mymacro,42) @code{@@ref@{chapter,,title,file name@}} @ref{chapter,,title,file name} formatting.texi(mymacro,42) @code{@@ref@{chapter,,title,,manual@}} @ref{chapter,,title,,manual} formatting.texi(mymacro,42) @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} formatting.texi(mymacro,42) @code{@@ref@{chapter,,,file name,manual@}} @ref{chapter,,,file name,manual} formatting.texi(mymacro,42) formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,cross ref name@}} @ref{(pman)anode,cross ref name} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,,title@}} @ref{(pman)anode,,title} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,,,file name@}} @ref{(pman)anode,,,file name} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,,,,manual@}} @ref{(pman)anode,,,,manual} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,cross ref name,title,@}} @ref{(pman)anode,cross ref name,title,} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,cross ref name,,file name@}} @ref{(pman)anode,cross ref name,,file name} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,cross ref name,,,manual@}} @ref{(pman)anode,cross ref name,,,manual} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,cross ref name,title,file name@}} @ref{(pman)anode,cross ref name,title,file name} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,cross ref name,title,,manual@}} @ref{(pman)anode,cross ref name,title,,manual} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,cross ref name,title, file name, manual@}} @ref{(pman)anode,cross ref name,title, file name, manual} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,,title,file name@}} @ref{(pman)anode,,title,file name} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,,title,,manual@}} @ref{(pman)anode,,title,,manual} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,,title, file name, manual@}} @ref{(pman)anode,,title, file name, manual} formatting.texi(mymacro,42) @code{@@ref@{(pman)anode,,,file name,manual@}} @ref{(pman)anode,,,file name,manual} formatting.texi(mymacro,42) formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} formatting.texi(mymacro,42) @code{@@inforef@{chapter@}} @inforef{chapter} formatting.texi(mymacro,42) @code{@@inforef@{chapter, cross ref name@}} @inforef{chapter, cross ref name} formatting.texi(mymacro,42) @code{@@inforef@{chapter,,file name@}} @inforef{chapter,,file name} formatting.texi(mymacro,42) @code{@@inforef@{node, cross ref name, file name@}} @inforef{node, cross ref name, file name} formatting.texi(mymacro,42) @code{@@inforef@{node@}} @inforef{node} formatting.texi(mymacro,42) @code{@@inforef@{node, cross ref name@}} @inforef{node, cross ref name} formatting.texi(mymacro,42) @code{@@inforef@{node,,file name@}} @inforef{node,,file name} formatting.texi(mymacro,42) @code{@@inforef@{chapter, cross ref name, file name, spurious arg@}} @inforef{chapter, cross ref name, file name, spurious arg} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@inforef@{s--ect@@comma@{@}ion, a @@comma@{@} in cross formatting.texi(mymacro,42) ref, a comma@@comma@{@} in file@}} formatting.texi(mymacro,42) @inforef{s--ect@comma{}ion, a @comma{} in cross formatting.texi(mymacro,42) ref, a comma@comma{} in file} formatting.texi(mymacro,42) formatting.texi(mymacro,42) formatting.texi(mymacro,42) @table @bullet formatting.texi(mymacro,42) @c comment in table formatting.texi(mymacro,42) @item a formatting.texi(mymacro,42) l--ine formatting.texi(mymacro,42) @end table formatting.texi(mymacro,42) formatting.texi(mymacro,42) @vtable @asis formatting.texi(mymacro,42) @item a formatting.texi(mymacro,42) @c comment between item and itemx formatting.texi(mymacro,42) @itemx b formatting.texi(mymacro,42) l--ine formatting.texi(mymacro,42) @end vtable formatting.texi(mymacro,42) formatting.texi(mymacro,42) @ftable @minus formatting.texi(mymacro,42) @item a formatting.texi(mymacro,42) @cindex index entry between item and itemx formatting.texi(mymacro,42) @itemx b formatting.texi(mymacro,42) l--ine formatting.texi(mymacro,42) @end ftable formatting.texi(mymacro,42) formatting.texi(mymacro,42) @cartouche formatting.texi(mymacro,42) c--artouche formatting.texi(mymacro,42) @end cartouche formatting.texi(mymacro,42) formatting.texi(mymacro,42) @flushleft formatting.texi(mymacro,42) f--lushleft formatting.texi(mymacro,42) @end flushleft formatting.texi(mymacro,42) formatting.texi(mymacro,42) @flushright formatting.texi(mymacro,42) f--lushright formatting.texi(mymacro,42) @end flushright formatting.texi(mymacro,42) formatting.texi(mymacro,42) @center ce--ntered line formatting.texi(mymacro,42) formatting.texi(mymacro,42) @verbatiminclude simplest.texi formatting.texi(mymacro,42) formatting.texi(mymacro,42) @verbatim formatting.texi(mymacro,42) in verbatim '' formatting.texi(mymacro,42) @end verbatim formatting.texi(mymacro,42) formatting.texi(mymacro,42) formatting.texi(mymacro,42) @html formatting.texi(mymacro,42) html '' formatting.texi(mymacro,42) @end html formatting.texi(mymacro,42) formatting.texi(mymacro,42) formatting.texi(mymacro,42) formatting.texi(mymacro,42) @majorheading majorheading formatting.texi(mymacro,42) formatting.texi(mymacro,42) @chapheading chapheading formatting.texi(mymacro,42) formatting.texi(mymacro,42) @heading heading formatting.texi(mymacro,42) formatting.texi(mymacro,42) @subheading subheading formatting.texi(mymacro,42) formatting.texi(mymacro,42) @subsubheading subsubheading formatting.texi(mymacro,42) formatting.texi(mymacro,42) @c makeinfo cannot handle that formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@acronym@{--a,an accronym @@comma@{@} @@enddots@{@}@}} @acronym{--a,an accronym @comma{} @enddots{}} formatting.texi(mymacro,42) @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude--@@comma@{@} @@b@{Autonome@} @}} @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } formatting.texi(mymacro,42) @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@math@{--a@@minus@{@} @{\frac@{1@}@{2@}@}@}} @math{--a@minus{} {\frac{1}{2}}} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@image@{f-ile,,,alt@@verb@{:jk _" %@:@}@}} @image{f-ile,,,alt@verb{:jk _" %@:}} formatting.texi(mymacro,42) @code{@@image@{f--ile,aze,az,@@verb@{:jk _" %@@:@} @@b@{in b "@},e--xt@}} @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} formatting.texi(mymacro,42) @code{@@image@{file@@verb@{:jk _" %@@:@},,,alt@@verb@{:jk _" %@@:@}@}} @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @set invalid formatting.texi(mymacro,42) formatting.texi(mymacro,42) formatting.texi(mymacro,42) @c invalid texinfo formatting.texi(mymacro,42) formatting.texi(mymacro,42) Somehow invalid use of @@,:@* formatting.texi(mymacro,42) @@, @, formatting.texi(mymacro,42) @* formatting.texi(mymacro,42) @@,@@"u @,@"u formatting.texi(mymacro,42) formatting.texi(mymacro,42) Invalid use of @@':@* formatting.texi(mymacro,42) @@' @' formatting.texi(mymacro,42) @* formatting.texi(mymacro,42) @@'@@"u @'@"u formatting.texi(mymacro,42) formatting.texi(mymacro,42) @c only i or j as arg formatting.texi(mymacro,42) @@dotless@{truc@} @dotless{truc} formatting.texi(mymacro,42) @@dotless@{ij@} @dotless{ij} formatting.texi(mymacro,42) @code{@@dotless@{--a@}} @dotless{--a} formatting.texi(mymacro,42) @code{@@dotless@{a@}} @dotless{a} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @c braces missing formatting.texi(mymacro,42) @@TeX, but without brace @TeX formatting.texi(mymacro,42) formatting.texi(mymacro,42) @c unknown command formatting.texi(mymacro,42) @code{@@#} @# formatting.texi(mymacro,42) formatting.texi(mymacro,42) @c no arg formatting.texi(mymacro,42) @code{@@w@{--a@}} @w{--a} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @c no file formatting.texi(mymacro,42) @code{@@image@{,1--xt@}} @image{,1--xt} formatting.texi(mymacro,42) @code{@@image@{,,2--xt@}} @image{,,2--xt} formatting.texi(mymacro,42) @code{@@image@{,,,3--xt@}} @image{,,,3--xt} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @sp formatting.texi(mymacro,42) formatting.texi(mymacro,42) @c braces missing formatting.texi(mymacro,42) @itemize @emph after emph formatting.texi(mymacro,42) @item e--mph item formatting.texi(mymacro,42) @end itemize formatting.texi(mymacro,42) formatting.texi(mymacro,42) @c braces missing formatting.texi(mymacro,42) @itemize @bullet a--n itemize line formatting.texi(mymacro,42) @item i--tem 1 formatting.texi(mymacro,42) @item i--tem 2 formatting.texi(mymacro,42) @end itemize formatting.texi(mymacro,42) formatting.texi(mymacro,42) @c deffnx after deff lines formatting.texi(mymacro,42) @deffn fun formatting.texi(mymacro,42) @deffnx truc machin bidule chose and } formatting.texi(mymacro,42) @deffnx truc machin bidule chose and } after formatting.texi(mymacro,42) @deffnx truc machin bidule chose and { formatting.texi(mymacro,42) @deffnx truc machin bidule chose and { and after formatting.texi(mymacro,42) @deffnx {truc} followed by a comment formatting.texi(mymacro,42) @c comment formatting.texi(mymacro,42) Various deff lines formatting.texi(mymacro,42) @deffnx {truc} after a deff item formatting.texi(mymacro,42) @end deffn formatting.texi(mymacro,42) formatting.texi(mymacro,42) @c node is non existent, or missing first arg formatting.texi(mymacro,42) @code{@@ref@{node@}} @ref{node} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@ref@{,cross ref name@}} @ref{,cross ref name} formatting.texi(mymacro,42) @code{@@ref@{,,title@}} @ref{,,title} formatting.texi(mymacro,42) @code{@@ref@{,,,file name@}} @ref{,,,file name} formatting.texi(mymacro,42) @code{@@ref@{,,,,manual@}} @ref{,,,,manual} formatting.texi(mymacro,42) @code{@@ref@{node,cross ref name@}} @ref{node,cross ref name} formatting.texi(mymacro,42) @code{@@ref@{node,,title@}} @ref{node,,title} formatting.texi(mymacro,42) @code{@@ref@{node,,,file name@}} @ref{node,,,file name} formatting.texi(mymacro,42) @code{@@ref@{node,,,,manual@}} @ref{node,,,,manual} formatting.texi(mymacro,42) @code{@@ref@{node,cross ref name,title,@}} @ref{node,cross ref name,title,} formatting.texi(mymacro,42) @code{@@ref@{node,cross ref name,,file name@}} @ref{node,cross ref name,,file name} formatting.texi(mymacro,42) @code{@@ref@{node,cross ref name,,,manual@}} @ref{node,cross ref name,,,manual} formatting.texi(mymacro,42) @code{@@ref@{node,cross ref name,title,file name@}} @ref{node,cross ref name,title,file name} formatting.texi(mymacro,42) @code{@@ref@{node,cross ref name,title,,manual@}} @ref{node,cross ref name,title,,manual} formatting.texi(mymacro,42) @code{@@ref@{node,cross ref name,title, file name, manual@}} @ref{node,cross ref name,title, file name, manual} formatting.texi(mymacro,42) @code{@@ref@{node,,title,file name@}} @ref{node,,title,file name} formatting.texi(mymacro,42) @code{@@ref@{node,,title,,manual@}} @ref{node,,title,,manual} formatting.texi(mymacro,42) @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} formatting.texi(mymacro,42) @code{@@ref@{node,,title, file name, manual@}} @ref{node,,title, file name, manual} formatting.texi(mymacro,42) @code{@@ref@{node,,,file name,manual@}} @ref{node,,,file name,manual} formatting.texi(mymacro,42) @code{@@ref@{,cross ref name,title,@}} @ref{,cross ref name,title,} formatting.texi(mymacro,42) @code{@@ref@{,cross ref name,,file name@}} @ref{,cross ref name,,file name} formatting.texi(mymacro,42) @code{@@ref@{,cross ref name,,,manual@}} @ref{,cross ref name,,,manual} formatting.texi(mymacro,42) @code{@@ref@{,cross ref name,title,file name@}} @ref{,cross ref name,title,file name} formatting.texi(mymacro,42) @code{@@ref@{,cross ref name,title,,manual@}} @ref{,cross ref name,title,,manual} formatting.texi(mymacro,42) @code{@@ref@{,cross ref name,title, file name, manual@}} @ref{,cross ref name,title, file name, manual} formatting.texi(mymacro,42) @code{@@ref@{,,title,file name@}} @ref{,,title,file name} formatting.texi(mymacro,42) @code{@@ref@{,,title,,manual@}} @ref{,,title,,manual} formatting.texi(mymacro,42) @code{@@ref@{,,title, file name, manual@}} @ref{,,title, file name, manual} formatting.texi(mymacro,42) @code{@@ref@{,,,file name,manual@}} @ref{,,,file name,manual} formatting.texi(mymacro,42) formatting.texi(mymacro,42) @code{@@inforef@{,cross ref name @}} @inforef{,cross ref name } formatting.texi(mymacro,42) @code{@@inforef@{,,file name@}} @inforef{,,file name} formatting.texi(mymacro,42) @code{@@inforef@{,cross ref name, file name@}} @inforef{,cross ref name, file name} formatting.texi(mymacro,42) @code{@@inforef@{@}} @inforef{} formatting.texi(mymacro,42) formatting.texi(mymacro,42) formatting.texi(,43) @end example formatting.texi(,44) formatting.texi(,45) @cindex t--ruc formatting.texi(,46) @cindex T--ruc formatting.texi(,47) @cindex . formatting.texi(,48) @cindex ? formatting.texi(,49) @cindex a formatting.texi(,50) @findex t--ruc formatting.texi(,51) @findex T--ruc formatting.texi(,52) @findex . formatting.texi(,53) @findex ? formatting.texi(,54) @findex a formatting.texi(,55) formatting.texi(,56) formatting.texi(,57) cp formatting.texi(,58) @printindex cp formatting.texi(,59) formatting.texi(,60) fn formatting.texi(,61) @printindex fn formatting.texi(,62) formatting.texi(,63) vr formatting.texi(,64) @printindex vr formatting.texi(,65) formatting.texi(,66) ky formatting.texi(,67) @printindex ky formatting.texi(,68) formatting.texi(,69) pg formatting.texi(,70) @printindex pg formatting.texi(,71) formatting.texi(,72) tp formatting.texi(,73) @printindex tp formatting.texi(,74) formatting.texi(,75) formatting.texi(,76) formatting.texi(,77) @node chapter formatting.texi(,78) @chapter chapter formatting.texi(,79) formatting.texi(,80) @footnote{in footnote} formatting.texi(,81) formatting.texi(,82) @format formatting.texi(,83) @menu formatting.texi(,84) * s--ect@comma{}ion:: s--ect@comma{}ion formatting.texi(,85) formatting.texi(,86) Menu comment formatting.texi(,87) ``simple-double--three---four----''@* formatting.texi(,88) formatting.texi(,89) @end menu formatting.texi(,90) @end format formatting.texi(,91) formatting.texi(,92) @node s--ect@comma{}ion formatting.texi(,93) @section A section formatting.texi(,94) formatting.texi(,95) @menu formatting.texi(,96) * subsection:: formatting.texi(,97) @end menu formatting.texi(,98) formatting.texi(,99) @node subsection formatting.texi(,100) @subsection subsection formatting.texi(,101) formatting.texi(,102) @menu formatting.texi(,103) * subsubsection ``simple-double--three---four----'':: formatting.texi(,104) @end menu formatting.texi(,105) formatting.texi(,106) @anchor{anchor} formatting.texi(,107) formatting.texi(,108) @node subsubsection ``simple-double--three---four----'' formatting.texi(,109) @subsubsection subsubsection ``simple-double--three---four----'' formatting.texi(,110) formatting.texi(,111) @node chapter2 formatting.texi(,112) @centerchap chapter 2 formatting.texi(,113) formatting.texi(,114) @printindex cp formatting.texi(,115) @printindex fn formatting.texi(,116) formatting.texi(,117) @contents formatting.texi(,118) @shortcontents formatting.texi(,119) @bye texi2html-1.82/test/coverage/res/texi_formatting/formatting.texi0000644000175000017500000022342711264347123027060 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename formatting.info @node Top @top Top section @menu * chapter:: chapter Menu comment * description:chapter2. Chapter 2 @end menu @copying In copying < > " & ' ` ``simple-double--three---four----''@* code: @code{``simple-double--three---four----''} @* asis: @asis{``simple-double--three---four----''} @* strong: @strong{``simple-double--three---four----''} @* kbd: @kbd{``simple-double--three---four----''} @* `@w{}`simple-double-@w{}-three---four----'@w{}'@* @cindex --option @cindex `` @findex `` @findex --foption @@"u @"u @@"@{U@} @"{U} @@~n @~n @@^a @^a @@'e @'e @@=o @=o @@`i @`i @@'@{e@} @'{e} @@'@{@@dotless@{i@}@} @'{@dotless{i}} @@dotless@{i@} @dotless{i} @@dotless@{j@} @dotless{j} @@`@{@@=E@} @`{@=E} @@l@{@} @l{} @@,@{@@'C@} @,{@'C} @@,c @,c @@,c@@"u @,c@"u @* @@* @* @@ followed by a space @ @@ followed by a tab @ @@ followed by a new line @ @code{@@-} @- @code{@@|} @| @code{@@:} @: @code{@@!} @! @code{@@?} @? @code{@@.} @. @code{@@@@} @@ @code{@@@}} @} @code{@@@{} @{ @code{@@/} @/ foo vs.@: bar. colon :@:And something else. semi colon ;@:. And ? ?@:. Now ! !@:@@ but , ,@: @@TeX @TeX{} @@LaTeX @LaTeX{} @@bullet @bullet{} @@copyright @copyright{} @@dots @dots{} @@enddots @enddots{} @@equiv @equiv{} @@error @error{} @@expansion @expansion{} @@minus @minus{} @@point @point{} @@print @print{} @@result @result{} @@today @today{} @@aa @aa{} @@AA @AA{} @@ae @ae{} @@oe @oe{} @@AE @AE{} @@OE @OE{} @@o @o{} @@O @O{} @@ss @ss{} @@l @l{} @@L @L{} @@exclamdown @exclamdown{} @@questiondown @questiondown{} @@pounds @pounds{} @@registeredsymbol @registeredsymbol{} @@ordf @ordf{} @@ordm @ordm{} @@comma @comma{} @@quotedblleft @quotedblleft{} @@quotedblright @quotedblright{} @@quoteleft @quoteleft{} @@quoteright @quoteright{} @@quotedblbase @quotedblbase{} @@quotesinglbase @quotesinglbase{} @@guillemetleft @guillemetleft{} @@guillemetright @guillemetright{} @@guillemotleft @guillemotleft{} @@guillemotright @guillemotright{} @@guilsinglleft @guilsinglleft{} @@guilsinglright @guilsinglright{} @@textdegree @textdegree{} @@euro @euro{} @@arrow @arrow{} @@leq @leq{} @@geq @geq{} @code{@@acronym@{--a,an accronym@}} @acronym{--a,an accronym} @code{@@acronym@{--a@}} @acronym{--a} @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude Autonome @}} @abbr{@'E--. @comma{}A., @'Etude Autonome } @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} @code{@@asis@{--a@}} @asis{--a} @code{@@b@{--a@}} @b{--a} @code{@@cite@{--a@}} @cite{--a} @code{@@code@{--a@}} @code{--a} @code{@@command@{--a@}} @command{--a} @code{@@ctrl@{--a@}} @ctrl{--a} @code{@@dfn@{--a@}} @dfn{--a} @code{@@dmn@{--a@}} @dmn{--a} @code{@@email@{--a,--b@}} @email{--a,--b} @code{@@email@{,--b@}} @email{,--b} @code{@@email@{--a@}} @email{--a} @code{@@emph@{--a@}} @emph{--a} @code{@@env@{--a@}} @env{--a} @code{@@file@{--a@}} @file{--a} @code{@@i@{--a@}} @i{--a} @code{@@kbd@{--a@}} @kbd{--a} @code{@@key@{--a@}} @key{--a} @code{@@math@{--a @{\frac@{1@}@{2@}@} @@minus@{@}@}} @math{--a {\frac{1}{2}} @minus{}} @code{@@option@{--a@}} @option{--a} @code{@@r@{--a@}} @r{--a} @code{@@samp@{--a@}} @samp{--a} @code{@@sc@{--a@}} @sc{--a} @code{@@strong@{--a@}} @strong{--a} @code{@@t@{--a@}} @t{--a} @code{@@sansserif@{--a@}} @sansserif{--a} @code{@@titlefont@{--a@}} @titlefont{--a} @code{@@indicateurl@{--a@}} @indicateurl{--a} @code{@@uref@{--a,--b@}} @uref{--a,--b} @code{@@uref@{--a@}} @uref{--a} @code{@@uref@{,--b@}} @uref{,--b} @code{@@uref@{--a,--b,--c@}} @uref{--a,--b,--c} @code{@@uref@{,--b,--c@}} @uref{,--b,--c} @code{@@uref@{--a,,--c@}} @uref{--a,,--c} @code{@@uref@{,,--c@}} @uref{,,--c} @code{@@url@{--a,--b@}} @url{--a,--b} @code{@@url@{--a,@}} @url{--a,} @code{@@url@{,--b@}} @url{,--b} @code{@@var@{--a@}} @var{--a} @code{@@verb@{:--a:@}} @verb{:--a:} @code{@@verb@{:a < & @@ % " -- b:@}} @verb{:a < & @ % " -- b:} @code{@@w@{@}} @w{} @code{@@H@{a@}} @H{a} @code{@@H@{--a@}} @H{--a} @code{@@dotaccent@{a@}} @dotaccent{a} @code{@@dotaccent@{--a@}} @dotaccent{--a} @code{@@ringaccent@{a@}} @ringaccent{a} @code{@@ringaccent@{--a@}} @ringaccent{--a} @code{@@tieaccent@{a@}} @tieaccent{a} @code{@@tieaccent@{--a@}} @tieaccent{--a} @code{@@u@{a@}} @u{a} @code{@@u@{--a@}} @u{--a} @code{@@ubaraccent@{a@}} @ubaraccent{a} @code{@@ubaraccent@{--a@}} @ubaraccent{--a} @code{@@udotaccent@{a@}} @udotaccent{a} @code{@@udotaccent@{--a@}} @udotaccent{--a} @code{@@v@{a@}} @v{a} @code{@@v@{--a@}} @v{--a} @code{@@,@{c@}} @,{c} @code{@@,@{--c@}} @,{--c} @code{@@ogonek@{a@}} @ogonek{a} @code{@@ogonek@{--a@}} @ogonek{--a} @code{@@footnote@{in footnote@}} @footnote{in footnote} @code{@@footnote@{in footnote2@}} @footnote{in footnote2} @code{@@image@{f--ile@}} @image{f--ile} @code{@@image@{f--ile,l--i@}} @image{f--ile,l--i} @code{@@image@{f--ile,,l--e@}} @image{f--ile,,l--e} @code{@@image@{f--ile,,,alt@}} @image{f--ile,,,alt} @code{@@image@{f--ile,,,,e-d-xt@}} @image{f--ile,,,,e--xt} @code{@@image@{f--ile,aze,az,alt,e--xt@}} @image{f--ile,aze,az,alt,e--xt} @code{@@image@{f-ile,aze,,a--lt@}} @image{f-ile,aze,,a--lt} @code{@@image@{@@file@{f--ile@}@@@@@@.,aze,az,alt,@@file@{file ext@} e--xt@@@}} @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@}} @sp 2 @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} @clickstyle @result After clickstyle @result{} @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} @clickstyle @arrow @quotation A quot---ation @end quotation @quotation Note A Note @end quotation @quotation note A note @end quotation @quotation Caution Caution @end quotation @quotation Important Important @end quotation @quotation Tip a Tip @end quotation @quotation Warning a Warning. @end quotation @quotation something @'e @TeX{} The something @'e @TeX{} is here. @end quotation @quotation @@ at the end of line @ A @@ at the end of the @@quotation line. @end quotation @quotation something, other thing something, other thing @end quotation @quotation Note, the note Note, the note @end quotation @quotation @end quotation @quotation Empty @end quotation @quotation @asis{} @end quotation @quotation @* @end quotation @smallquotation A small quot---ation @end smallquotation @smallquotation Note A small Note @end smallquotation @smallquotation something, other thing something, other thing @end smallquotation @itemize @item i--temize @end itemize @itemize + @item i--tem + @end itemize @itemize @bullet @item b--ullet @end itemize @itemize @minus @item minu--s @end itemize @itemize @emph @item e--mph item @end itemize @itemize @emph{after emph} @c comment in itemize @item e--mph item @end itemize @itemize @bullet{} a--n itemize line @cindex index entry within itemize @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 6 7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @c comment in multitable @item mu--ltitable item 2 @tab multitable tab 2 @cindex index entry within multitable @item lone mu--ltitable item @end multitable @multitable {truc} {bidule} @item truc @tab bidule @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @display d--isplay @end display @smalldisplay s--malldisplay @end smalldisplay @lisp l--isp @end lisp @smalllisp s--malllisp @end smalllisp @format f--ormat @end format @smallformat s--mallformat @end smallformat @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @deffn cate--gory de--ffn_name ar--guments @ more args @* even more so def--fn @end deffn @deffn fset @var{i} a g @cindex index entry within deffn @deffnx {cmde} truc {} @deffnx Command {log trap} {} @deffnx Command { log trap1} {} @deffnx Command {log trap2 } {} @deffnx cmde @b{id ule} truc @deffnx cmde2 @b{id @samp{i} ule} truc @deffnx @b{id @samp{i} ule} @deffnx @deffnx aaa @deffnx {} {} @deffnx{} @deffnx{} machin @deffnx{} {bidule machin} @deffnx{truc} machin @deffnx{truc} { } @deffnx{truc} followed by a comment @c comment @deffnx{truc} @deffnx{} {} @deffnx {truc} a b c d e @b{f g} {h i} @deffnx {truc} deffnx before end deffn @end deffn @deffn empty deffn @end deffn @deffn empty deffn with deffnx @c comment between deffn and deffnx @deffnx empty deffnx @end deffn @deffn fset @var{i} a g @deffnx {cmde} truc {} @c comment text in def item for second def item @end deffn @defvr c--ategory d--efvr_name d--efvr @end defvr @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... d--eftypefn @end deftypefn @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... d--eftypeop @end deftypeop @deftypevr c--ategory t--ype d--eftypevr_name d--eftypevr @end deftypevr @defcv c--ategory c--lass d--efcv_name d--efcv @end defcv @defop c--ategory c--lass d--efop_name a--rguments... d--efop @end defop @deftp c--ategory d--eftp_name a--ttributes... d--eftp @end deftp @defun d--efun_name a--rguments... d--efun @end defun @defmac d--efmac_name a--rguments... d--efmac @end defmac @defspec d--efspec_name a--rguments... d--efspec @end defspec @defvar d--efvar_name argvar argvar1 d--efvar @end defvar @defopt d--efopt_name d--efopt @end defopt @deftypefun t--ype d--eftypefun_name a--rguments... d--eftypefun @end deftypefun @deftypevar t--ype d--eftypevar_name d--eftypevar @end deftypevar @defivar c--lass d--efivar_name d--efivar @end defivar @deftypeivar c--lass t--ype d--eftypeivar_name d--eftypeivar @end deftypeivar @defmethod c--lass d--efmethod_name a--rguments... d--efmethod @end defmethod @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... d--eftypemethod @end deftypemethod @code{@@xref@{c---hapter@@@@, cross r---ef name@@@@, t---itle@@@@, file n---ame@@@@, ma---nual@@@@@}} @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@}. @code{@@ref@{chapter, cross ref name, title, file name, manual@}} @ref{chapter, cross ref name, title, file name, manual} @code{@@pxref@{chapter, cross ref name, title, file name, manual@}} @pxref{chapter, cross ref name, title, file name, manual} @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} @code{@@ref@{chapter@}} @ref{chapter} @code{@@xref@{chapter@}} @xref{chapter}. @code{@@pxref@{chapter@}} @pxref{chapter} @code{@@ref@{s--ect@@comma@{@}ion@}} @ref{s--ect@comma{}ion} @code{@@ref@{s--ect@@comma@{@}ion, a @@comma@{@} in cross ref, a comma@@comma@{@} in title, a comma@@comma@{@} in file, a @@comma@{@} in manual name @}} @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } @code{@@ref@{chapter,cross ref name@}} @ref{chapter,cross ref name} @code{@@ref@{chapter,,title@}} @ref{chapter,,title} @code{@@ref@{chapter,,,file name@}} @ref{chapter,,,file name} @code{@@ref@{chapter,,,,manual@}} @ref{chapter,,,,manual} @code{@@ref@{chapter,cross ref name,title,@}} @ref{chapter,cross ref name,title,} @code{@@ref@{chapter,cross ref name,,file name@}} @ref{chapter,cross ref name,,file name} @code{@@ref@{chapter,cross ref name,,,manual@}} @ref{chapter,cross ref name,,,manual} @code{@@ref@{chapter,cross ref name,title,file name@}} @ref{chapter,cross ref name,title,file name} @code{@@ref@{chapter,cross ref name,title,,manual@}} @ref{chapter,cross ref name,title,,manual} @code{@@ref@{chapter,cross ref name,title, file name, manual@}} @ref{chapter,cross ref name,title, file name, manual} @code{@@ref@{chapter,,title,file name@}} @ref{chapter,,title,file name} @code{@@ref@{chapter,,title,,manual@}} @ref{chapter,,title,,manual} @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} @code{@@ref@{chapter,,,file name,manual@}} @ref{chapter,,,file name,manual} @code{@@ref@{(pman)anode,cross ref name@}} @ref{(pman)anode,cross ref name} @code{@@ref@{(pman)anode,,title@}} @ref{(pman)anode,,title} @code{@@ref@{(pman)anode,,,file name@}} @ref{(pman)anode,,,file name} @code{@@ref@{(pman)anode,,,,manual@}} @ref{(pman)anode,,,,manual} @code{@@ref@{(pman)anode,cross ref name,title,@}} @ref{(pman)anode,cross ref name,title,} @code{@@ref@{(pman)anode,cross ref name,,file name@}} @ref{(pman)anode,cross ref name,,file name} @code{@@ref@{(pman)anode,cross ref name,,,manual@}} @ref{(pman)anode,cross ref name,,,manual} @code{@@ref@{(pman)anode,cross ref name,title,file name@}} @ref{(pman)anode,cross ref name,title,file name} @code{@@ref@{(pman)anode,cross ref name,title,,manual@}} @ref{(pman)anode,cross ref name,title,,manual} @code{@@ref@{(pman)anode,cross ref name,title, file name, manual@}} @ref{(pman)anode,cross ref name,title, file name, manual} @code{@@ref@{(pman)anode,,title,file name@}} @ref{(pman)anode,,title,file name} @code{@@ref@{(pman)anode,,title,,manual@}} @ref{(pman)anode,,title,,manual} @code{@@ref@{(pman)anode,,title, file name, manual@}} @ref{(pman)anode,,title, file name, manual} @code{@@ref@{(pman)anode,,,file name,manual@}} @ref{(pman)anode,,,file name,manual} @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} @code{@@inforef@{chapter@}} @inforef{chapter} @code{@@inforef@{chapter, cross ref name@}} @inforef{chapter, cross ref name} @code{@@inforef@{chapter,,file name@}} @inforef{chapter,,file name} @code{@@inforef@{node, cross ref name, file name@}} @inforef{node, cross ref name, file name} @code{@@inforef@{node@}} @inforef{node} @code{@@inforef@{node, cross ref name@}} @inforef{node, cross ref name} @code{@@inforef@{node,,file name@}} @inforef{node,,file name} @code{@@inforef@{chapter, cross ref name, file name, spurious arg@}} @inforef{chapter, cross ref name, file name, spurious arg} @code{@@inforef@{s--ect@@comma@{@}ion, a @@comma@{@} in cross ref, a comma@@comma@{@} in file@}} @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} @table @bullet @c comment in table @item a l--ine @end table @vtable @asis @item a @c comment between item and itemx @itemx b l--ine @end vtable @ftable @minus @item a @cindex index entry between item and itemx @itemx b l--ine @end ftable @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @verbatiminclude simplest.texi @verbatim in verbatim '' @end verbatim @html html '' @end html @majorheading majorheading @chapheading chapheading @heading heading @subheading subheading @subsubheading subsubheading @c makeinfo cannot handle that @code{@@acronym@{--a,an accronym @@comma@{@} @@enddots@{@}@}} @acronym{--a,an accronym @comma{} @enddots{}} @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude--@@comma@{@} @@b@{Autonome@} @}} @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} @code{@@math@{--a@@minus@{@} @{\frac@{1@}@{2@}@}@}} @math{--a@minus{} {\frac{1}{2}}} @code{@@image@{f-ile,,,alt@@verb@{:jk _" %@:@}@}} @image{f-ile,,,alt@verb{:jk _" %@:}} @code{@@image@{f--ile,aze,az,@@verb@{:jk _" %@@:@} @@b@{in b "@},e--xt@}} @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} @code{@@image@{file@@verb@{:jk _" %@@:@},,,alt@@verb@{:jk _" %@@:@}@}} @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} @set invalid @c invalid texinfo Somehow invalid use of @@,:@* @@, @, @* @@,@@"u @,@"u Invalid use of @@':@* @@' @' @* @@'@@"u @'@"u @c only i or j as arg @@dotless@{truc@} @dotless{truc} @@dotless@{ij@} @dotless{ij} @code{@@dotless@{--a@}} @dotless{--a} @code{@@dotless@{a@}} @dotless{a} @c braces missing @@TeX, but without brace @TeX @c unknown command @code{@@#} @# @c no arg @code{@@w@{--a@}} @w{--a} @c no file @code{@@image@{,1--xt@}} @image{,1--xt} @code{@@image@{,,2--xt@}} @image{,,2--xt} @code{@@image@{,,,3--xt@}} @image{,,,3--xt} @sp @c braces missing @itemize @emph after emph @item e--mph item @end itemize @c braces missing @itemize @bullet a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @c deffnx after deff lines @deffn fun @deffnx truc machin bidule chose and } @deffnx truc machin bidule chose and } after @deffnx truc machin bidule chose and { @deffnx truc machin bidule chose and { and after @deffnx {truc} followed by a comment @c comment Various deff lines @deffnx {truc} after a deff item @end deffn @c node is non existent, or missing first arg @code{@@ref@{node@}} @ref{node} @code{@@ref@{,cross ref name@}} @ref{,cross ref name} @code{@@ref@{,,title@}} @ref{,,title} @code{@@ref@{,,,file name@}} @ref{,,,file name} @code{@@ref@{,,,,manual@}} @ref{,,,,manual} @code{@@ref@{node,cross ref name@}} @ref{node,cross ref name} @code{@@ref@{node,,title@}} @ref{node,,title} @code{@@ref@{node,,,file name@}} @ref{node,,,file name} @code{@@ref@{node,,,,manual@}} @ref{node,,,,manual} @code{@@ref@{node,cross ref name,title,@}} @ref{node,cross ref name,title,} @code{@@ref@{node,cross ref name,,file name@}} @ref{node,cross ref name,,file name} @code{@@ref@{node,cross ref name,,,manual@}} @ref{node,cross ref name,,,manual} @code{@@ref@{node,cross ref name,title,file name@}} @ref{node,cross ref name,title,file name} @code{@@ref@{node,cross ref name,title,,manual@}} @ref{node,cross ref name,title,,manual} @code{@@ref@{node,cross ref name,title, file name, manual@}} @ref{node,cross ref name,title, file name, manual} @code{@@ref@{node,,title,file name@}} @ref{node,,title,file name} @code{@@ref@{node,,title,,manual@}} @ref{node,,title,,manual} @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} @code{@@ref@{node,,title, file name, manual@}} @ref{node,,title, file name, manual} @code{@@ref@{node,,,file name,manual@}} @ref{node,,,file name,manual} @code{@@ref@{,cross ref name,title,@}} @ref{,cross ref name,title,} @code{@@ref@{,cross ref name,,file name@}} @ref{,cross ref name,,file name} @code{@@ref@{,cross ref name,,,manual@}} @ref{,cross ref name,,,manual} @code{@@ref@{,cross ref name,title,file name@}} @ref{,cross ref name,title,file name} @code{@@ref@{,cross ref name,title,,manual@}} @ref{,cross ref name,title,,manual} @code{@@ref@{,cross ref name,title, file name, manual@}} @ref{,cross ref name,title, file name, manual} @code{@@ref@{,,title,file name@}} @ref{,,title,file name} @code{@@ref@{,,title,,manual@}} @ref{,,title,,manual} @code{@@ref@{,,title, file name, manual@}} @ref{,,title, file name, manual} @code{@@ref@{,,,file name,manual@}} @ref{,,,file name,manual} @code{@@inforef@{,cross ref name @}} @inforef{,cross ref name } @code{@@inforef@{,,file name@}} @inforef{,,file name} @code{@@inforef@{,cross ref name, file name@}} @inforef{,cross ref name, file name} @code{@@inforef@{@}} @inforef{} @end copying @titlepage @title title --a @subtitle formatting subtitle --a @subtitle subtitle 2 --a @author author1 --a with accents in name T@'e@,ca @author author2 --a In titlepage < > " & ' ` ``simple-double--three---four----''@* code: @code{``simple-double--three---four----''} @* asis: @asis{``simple-double--three---four----''} @* strong: @strong{``simple-double--three---four----''} @* kbd: @kbd{``simple-double--three---four----''} @* `@w{}`simple-double-@w{}-three---four----'@w{}'@* @cindex --option @cindex `` @findex `` @findex --foption @@"u @"u @@"@{U@} @"{U} @@~n @~n @@^a @^a @@'e @'e @@=o @=o @@`i @`i @@'@{e@} @'{e} @@'@{@@dotless@{i@}@} @'{@dotless{i}} @@dotless@{i@} @dotless{i} @@dotless@{j@} @dotless{j} @@`@{@@=E@} @`{@=E} @@l@{@} @l{} @@,@{@@'C@} @,{@'C} @@,c @,c @@,c@@"u @,c@"u @* @@* @* @@ followed by a space @ @@ followed by a tab @ @@ followed by a new line @ @code{@@-} @- @code{@@|} @| @code{@@:} @: @code{@@!} @! @code{@@?} @? @code{@@.} @. @code{@@@@} @@ @code{@@@}} @} @code{@@@{} @{ @code{@@/} @/ foo vs.@: bar. colon :@:And something else. semi colon ;@:. And ? ?@:. Now ! !@:@@ but , ,@: @@TeX @TeX{} @@LaTeX @LaTeX{} @@bullet @bullet{} @@copyright @copyright{} @@dots @dots{} @@enddots @enddots{} @@equiv @equiv{} @@error @error{} @@expansion @expansion{} @@minus @minus{} @@point @point{} @@print @print{} @@result @result{} @@today @today{} @@aa @aa{} @@AA @AA{} @@ae @ae{} @@oe @oe{} @@AE @AE{} @@OE @OE{} @@o @o{} @@O @O{} @@ss @ss{} @@l @l{} @@L @L{} @@exclamdown @exclamdown{} @@questiondown @questiondown{} @@pounds @pounds{} @@registeredsymbol @registeredsymbol{} @@ordf @ordf{} @@ordm @ordm{} @@comma @comma{} @@quotedblleft @quotedblleft{} @@quotedblright @quotedblright{} @@quoteleft @quoteleft{} @@quoteright @quoteright{} @@quotedblbase @quotedblbase{} @@quotesinglbase @quotesinglbase{} @@guillemetleft @guillemetleft{} @@guillemetright @guillemetright{} @@guillemotleft @guillemotleft{} @@guillemotright @guillemotright{} @@guilsinglleft @guilsinglleft{} @@guilsinglright @guilsinglright{} @@textdegree @textdegree{} @@euro @euro{} @@arrow @arrow{} @@leq @leq{} @@geq @geq{} @code{@@acronym@{--a,an accronym@}} @acronym{--a,an accronym} @code{@@acronym@{--a@}} @acronym{--a} @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude Autonome @}} @abbr{@'E--. @comma{}A., @'Etude Autonome } @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} @code{@@asis@{--a@}} @asis{--a} @code{@@b@{--a@}} @b{--a} @code{@@cite@{--a@}} @cite{--a} @code{@@code@{--a@}} @code{--a} @code{@@command@{--a@}} @command{--a} @code{@@ctrl@{--a@}} @ctrl{--a} @code{@@dfn@{--a@}} @dfn{--a} @code{@@dmn@{--a@}} @dmn{--a} @code{@@email@{--a,--b@}} @email{--a,--b} @code{@@email@{,--b@}} @email{,--b} @code{@@email@{--a@}} @email{--a} @code{@@emph@{--a@}} @emph{--a} @code{@@env@{--a@}} @env{--a} @code{@@file@{--a@}} @file{--a} @code{@@i@{--a@}} @i{--a} @code{@@kbd@{--a@}} @kbd{--a} @code{@@key@{--a@}} @key{--a} @code{@@math@{--a @{\frac@{1@}@{2@}@} @@minus@{@}@}} @math{--a {\frac{1}{2}} @minus{}} @code{@@option@{--a@}} @option{--a} @code{@@r@{--a@}} @r{--a} @code{@@samp@{--a@}} @samp{--a} @code{@@sc@{--a@}} @sc{--a} @code{@@strong@{--a@}} @strong{--a} @code{@@t@{--a@}} @t{--a} @code{@@sansserif@{--a@}} @sansserif{--a} @code{@@titlefont@{--a@}} @titlefont{--a} @code{@@indicateurl@{--a@}} @indicateurl{--a} @code{@@uref@{--a,--b@}} @uref{--a,--b} @code{@@uref@{--a@}} @uref{--a} @code{@@uref@{,--b@}} @uref{,--b} @code{@@uref@{--a,--b,--c@}} @uref{--a,--b,--c} @code{@@uref@{,--b,--c@}} @uref{,--b,--c} @code{@@uref@{--a,,--c@}} @uref{--a,,--c} @code{@@uref@{,,--c@}} @uref{,,--c} @code{@@url@{--a,--b@}} @url{--a,--b} @code{@@url@{--a,@}} @url{--a,} @code{@@url@{,--b@}} @url{,--b} @code{@@var@{--a@}} @var{--a} @code{@@verb@{:--a:@}} @verb{:--a:} @code{@@verb@{:a < & @@ % " -- b:@}} @verb{:a < & @ % " -- b:} @code{@@w@{@}} @w{} @code{@@H@{a@}} @H{a} @code{@@H@{--a@}} @H{--a} @code{@@dotaccent@{a@}} @dotaccent{a} @code{@@dotaccent@{--a@}} @dotaccent{--a} @code{@@ringaccent@{a@}} @ringaccent{a} @code{@@ringaccent@{--a@}} @ringaccent{--a} @code{@@tieaccent@{a@}} @tieaccent{a} @code{@@tieaccent@{--a@}} @tieaccent{--a} @code{@@u@{a@}} @u{a} @code{@@u@{--a@}} @u{--a} @code{@@ubaraccent@{a@}} @ubaraccent{a} @code{@@ubaraccent@{--a@}} @ubaraccent{--a} @code{@@udotaccent@{a@}} @udotaccent{a} @code{@@udotaccent@{--a@}} @udotaccent{--a} @code{@@v@{a@}} @v{a} @code{@@v@{--a@}} @v{--a} @code{@@,@{c@}} @,{c} @code{@@,@{--c@}} @,{--c} @code{@@ogonek@{a@}} @ogonek{a} @code{@@ogonek@{--a@}} @ogonek{--a} @code{@@footnote@{in footnote@}} @footnote{in footnote} @code{@@footnote@{in footnote2@}} @footnote{in footnote2} @code{@@image@{f--ile@}} @image{f--ile} @code{@@image@{f--ile,l--i@}} @image{f--ile,l--i} @code{@@image@{f--ile,,l--e@}} @image{f--ile,,l--e} @code{@@image@{f--ile,,,alt@}} @image{f--ile,,,alt} @code{@@image@{f--ile,,,,e-d-xt@}} @image{f--ile,,,,e--xt} @code{@@image@{f--ile,aze,az,alt,e--xt@}} @image{f--ile,aze,az,alt,e--xt} @code{@@image@{f-ile,aze,,a--lt@}} @image{f-ile,aze,,a--lt} @code{@@image@{@@file@{f--ile@}@@@@@@.,aze,az,alt,@@file@{file ext@} e--xt@@@}} @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@}} @sp 2 @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} @clickstyle @result After clickstyle @result{} @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} @clickstyle @arrow @quotation A quot---ation @end quotation @quotation Note A Note @end quotation @quotation note A note @end quotation @quotation Caution Caution @end quotation @quotation Important Important @end quotation @quotation Tip a Tip @end quotation @quotation Warning a Warning. @end quotation @quotation something @'e @TeX{} The something @'e @TeX{} is here. @end quotation @quotation @@ at the end of line @ A @@ at the end of the @@quotation line. @end quotation @quotation something, other thing something, other thing @end quotation @quotation Note, the note Note, the note @end quotation @quotation @end quotation @quotation Empty @end quotation @quotation @asis{} @end quotation @quotation @* @end quotation @smallquotation A small quot---ation @end smallquotation @smallquotation Note A small Note @end smallquotation @smallquotation something, other thing something, other thing @end smallquotation @itemize @item i--temize @end itemize @itemize + @item i--tem + @end itemize @itemize @bullet @item b--ullet @end itemize @itemize @minus @item minu--s @end itemize @itemize @emph @item e--mph item @end itemize @itemize @emph{after emph} @c comment in itemize @item e--mph item @end itemize @itemize @bullet{} a--n itemize line @cindex index entry within itemize @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 6 7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @c comment in multitable @item mu--ltitable item 2 @tab multitable tab 2 @cindex index entry within multitable @item lone mu--ltitable item @end multitable @multitable {truc} {bidule} @item truc @tab bidule @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @display d--isplay @end display @smalldisplay s--malldisplay @end smalldisplay @lisp l--isp @end lisp @smalllisp s--malllisp @end smalllisp @format f--ormat @end format @smallformat s--mallformat @end smallformat @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @deffn cate--gory de--ffn_name ar--guments @ more args @* even more so def--fn @end deffn @deffn fset @var{i} a g @cindex index entry within deffn @deffnx {cmde} truc {} @deffnx Command {log trap} {} @deffnx Command { log trap1} {} @deffnx Command {log trap2 } {} @deffnx cmde @b{id ule} truc @deffnx cmde2 @b{id @samp{i} ule} truc @deffnx @b{id @samp{i} ule} @deffnx @deffnx aaa @deffnx {} {} @deffnx{} @deffnx{} machin @deffnx{} {bidule machin} @deffnx{truc} machin @deffnx{truc} { } @deffnx{truc} followed by a comment @c comment @deffnx{truc} @deffnx{} {} @deffnx {truc} a b c d e @b{f g} {h i} @deffnx {truc} deffnx before end deffn @end deffn @deffn empty deffn @end deffn @deffn empty deffn with deffnx @c comment between deffn and deffnx @deffnx empty deffnx @end deffn @deffn fset @var{i} a g @deffnx {cmde} truc {} @c comment text in def item for second def item @end deffn @defvr c--ategory d--efvr_name d--efvr @end defvr @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... d--eftypefn @end deftypefn @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... d--eftypeop @end deftypeop @deftypevr c--ategory t--ype d--eftypevr_name d--eftypevr @end deftypevr @defcv c--ategory c--lass d--efcv_name d--efcv @end defcv @defop c--ategory c--lass d--efop_name a--rguments... d--efop @end defop @deftp c--ategory d--eftp_name a--ttributes... d--eftp @end deftp @defun d--efun_name a--rguments... d--efun @end defun @defmac d--efmac_name a--rguments... d--efmac @end defmac @defspec d--efspec_name a--rguments... d--efspec @end defspec @defvar d--efvar_name argvar argvar1 d--efvar @end defvar @defopt d--efopt_name d--efopt @end defopt @deftypefun t--ype d--eftypefun_name a--rguments... d--eftypefun @end deftypefun @deftypevar t--ype d--eftypevar_name d--eftypevar @end deftypevar @defivar c--lass d--efivar_name d--efivar @end defivar @deftypeivar c--lass t--ype d--eftypeivar_name d--eftypeivar @end deftypeivar @defmethod c--lass d--efmethod_name a--rguments... d--efmethod @end defmethod @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... d--eftypemethod @end deftypemethod @code{@@xref@{c---hapter@@@@, cross r---ef name@@@@, t---itle@@@@, file n---ame@@@@, ma---nual@@@@@}} @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@}. @code{@@ref@{chapter, cross ref name, title, file name, manual@}} @ref{chapter, cross ref name, title, file name, manual} @code{@@pxref@{chapter, cross ref name, title, file name, manual@}} @pxref{chapter, cross ref name, title, file name, manual} @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} @code{@@ref@{chapter@}} @ref{chapter} @code{@@xref@{chapter@}} @xref{chapter}. @code{@@pxref@{chapter@}} @pxref{chapter} @code{@@ref@{s--ect@@comma@{@}ion@}} @ref{s--ect@comma{}ion} @code{@@ref@{s--ect@@comma@{@}ion, a @@comma@{@} in cross ref, a comma@@comma@{@} in title, a comma@@comma@{@} in file, a @@comma@{@} in manual name @}} @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } @code{@@ref@{chapter,cross ref name@}} @ref{chapter,cross ref name} @code{@@ref@{chapter,,title@}} @ref{chapter,,title} @code{@@ref@{chapter,,,file name@}} @ref{chapter,,,file name} @code{@@ref@{chapter,,,,manual@}} @ref{chapter,,,,manual} @code{@@ref@{chapter,cross ref name,title,@}} @ref{chapter,cross ref name,title,} @code{@@ref@{chapter,cross ref name,,file name@}} @ref{chapter,cross ref name,,file name} @code{@@ref@{chapter,cross ref name,,,manual@}} @ref{chapter,cross ref name,,,manual} @code{@@ref@{chapter,cross ref name,title,file name@}} @ref{chapter,cross ref name,title,file name} @code{@@ref@{chapter,cross ref name,title,,manual@}} @ref{chapter,cross ref name,title,,manual} @code{@@ref@{chapter,cross ref name,title, file name, manual@}} @ref{chapter,cross ref name,title, file name, manual} @code{@@ref@{chapter,,title,file name@}} @ref{chapter,,title,file name} @code{@@ref@{chapter,,title,,manual@}} @ref{chapter,,title,,manual} @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} @code{@@ref@{chapter,,,file name,manual@}} @ref{chapter,,,file name,manual} @code{@@ref@{(pman)anode,cross ref name@}} @ref{(pman)anode,cross ref name} @code{@@ref@{(pman)anode,,title@}} @ref{(pman)anode,,title} @code{@@ref@{(pman)anode,,,file name@}} @ref{(pman)anode,,,file name} @code{@@ref@{(pman)anode,,,,manual@}} @ref{(pman)anode,,,,manual} @code{@@ref@{(pman)anode,cross ref name,title,@}} @ref{(pman)anode,cross ref name,title,} @code{@@ref@{(pman)anode,cross ref name,,file name@}} @ref{(pman)anode,cross ref name,,file name} @code{@@ref@{(pman)anode,cross ref name,,,manual@}} @ref{(pman)anode,cross ref name,,,manual} @code{@@ref@{(pman)anode,cross ref name,title,file name@}} @ref{(pman)anode,cross ref name,title,file name} @code{@@ref@{(pman)anode,cross ref name,title,,manual@}} @ref{(pman)anode,cross ref name,title,,manual} @code{@@ref@{(pman)anode,cross ref name,title, file name, manual@}} @ref{(pman)anode,cross ref name,title, file name, manual} @code{@@ref@{(pman)anode,,title,file name@}} @ref{(pman)anode,,title,file name} @code{@@ref@{(pman)anode,,title,,manual@}} @ref{(pman)anode,,title,,manual} @code{@@ref@{(pman)anode,,title, file name, manual@}} @ref{(pman)anode,,title, file name, manual} @code{@@ref@{(pman)anode,,,file name,manual@}} @ref{(pman)anode,,,file name,manual} @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} @code{@@inforef@{chapter@}} @inforef{chapter} @code{@@inforef@{chapter, cross ref name@}} @inforef{chapter, cross ref name} @code{@@inforef@{chapter,,file name@}} @inforef{chapter,,file name} @code{@@inforef@{node, cross ref name, file name@}} @inforef{node, cross ref name, file name} @code{@@inforef@{node@}} @inforef{node} @code{@@inforef@{node, cross ref name@}} @inforef{node, cross ref name} @code{@@inforef@{node,,file name@}} @inforef{node,,file name} @code{@@inforef@{chapter, cross ref name, file name, spurious arg@}} @inforef{chapter, cross ref name, file name, spurious arg} @code{@@inforef@{s--ect@@comma@{@}ion, a @@comma@{@} in cross ref, a comma@@comma@{@} in file@}} @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} @table @bullet @c comment in table @item a l--ine @end table @vtable @asis @item a @c comment between item and itemx @itemx b l--ine @end vtable @ftable @minus @item a @cindex index entry between item and itemx @itemx b l--ine @end ftable @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @verbatiminclude simplest.texi @verbatim in verbatim '' @end verbatim @html html '' @end html @majorheading majorheading @chapheading chapheading @heading heading @subheading subheading @subsubheading subsubheading @c makeinfo cannot handle that @code{@@acronym@{--a,an accronym @@comma@{@} @@enddots@{@}@}} @acronym{--a,an accronym @comma{} @enddots{}} @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude--@@comma@{@} @@b@{Autonome@} @}} @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} @code{@@math@{--a@@minus@{@} @{\frac@{1@}@{2@}@}@}} @math{--a@minus{} {\frac{1}{2}}} @code{@@image@{f-ile,,,alt@@verb@{:jk _" %@:@}@}} @image{f-ile,,,alt@verb{:jk _" %@:}} @code{@@image@{f--ile,aze,az,@@verb@{:jk _" %@@:@} @@b@{in b "@},e--xt@}} @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} @code{@@image@{file@@verb@{:jk _" %@@:@},,,alt@@verb@{:jk _" %@@:@}@}} @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} @set invalid @c invalid texinfo Somehow invalid use of @@,:@* @@, @, @* @@,@@"u @,@"u Invalid use of @@':@* @@' @' @* @@'@@"u @'@"u @c only i or j as arg @@dotless@{truc@} @dotless{truc} @@dotless@{ij@} @dotless{ij} @code{@@dotless@{--a@}} @dotless{--a} @code{@@dotless@{a@}} @dotless{a} @c braces missing @@TeX, but without brace @TeX @c unknown command @code{@@#} @# @c no arg @code{@@w@{--a@}} @w{--a} @c no file @code{@@image@{,1--xt@}} @image{,1--xt} @code{@@image@{,,2--xt@}} @image{,,2--xt} @code{@@image@{,,,3--xt@}} @image{,,,3--xt} @sp @c braces missing @itemize @emph after emph @item e--mph item @end itemize @c braces missing @itemize @bullet a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @c deffnx after deff lines @deffn fun @deffnx truc machin bidule chose and } @deffnx truc machin bidule chose and } after @deffnx truc machin bidule chose and { @deffnx truc machin bidule chose and { and after @deffnx {truc} followed by a comment @c comment Various deff lines @deffnx {truc} after a deff item @end deffn @c node is non existent, or missing first arg @code{@@ref@{node@}} @ref{node} @code{@@ref@{,cross ref name@}} @ref{,cross ref name} @code{@@ref@{,,title@}} @ref{,,title} @code{@@ref@{,,,file name@}} @ref{,,,file name} @code{@@ref@{,,,,manual@}} @ref{,,,,manual} @code{@@ref@{node,cross ref name@}} @ref{node,cross ref name} @code{@@ref@{node,,title@}} @ref{node,,title} @code{@@ref@{node,,,file name@}} @ref{node,,,file name} @code{@@ref@{node,,,,manual@}} @ref{node,,,,manual} @code{@@ref@{node,cross ref name,title,@}} @ref{node,cross ref name,title,} @code{@@ref@{node,cross ref name,,file name@}} @ref{node,cross ref name,,file name} @code{@@ref@{node,cross ref name,,,manual@}} @ref{node,cross ref name,,,manual} @code{@@ref@{node,cross ref name,title,file name@}} @ref{node,cross ref name,title,file name} @code{@@ref@{node,cross ref name,title,,manual@}} @ref{node,cross ref name,title,,manual} @code{@@ref@{node,cross ref name,title, file name, manual@}} @ref{node,cross ref name,title, file name, manual} @code{@@ref@{node,,title,file name@}} @ref{node,,title,file name} @code{@@ref@{node,,title,,manual@}} @ref{node,,title,,manual} @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} @code{@@ref@{node,,title, file name, manual@}} @ref{node,,title, file name, manual} @code{@@ref@{node,,,file name,manual@}} @ref{node,,,file name,manual} @code{@@ref@{,cross ref name,title,@}} @ref{,cross ref name,title,} @code{@@ref@{,cross ref name,,file name@}} @ref{,cross ref name,,file name} @code{@@ref@{,cross ref name,,,manual@}} @ref{,cross ref name,,,manual} @code{@@ref@{,cross ref name,title,file name@}} @ref{,cross ref name,title,file name} @code{@@ref@{,cross ref name,title,,manual@}} @ref{,cross ref name,title,,manual} @code{@@ref@{,cross ref name,title, file name, manual@}} @ref{,cross ref name,title, file name, manual} @code{@@ref@{,,title,file name@}} @ref{,,title,file name} @code{@@ref@{,,title,,manual@}} @ref{,,title,,manual} @code{@@ref@{,,title, file name, manual@}} @ref{,,title, file name, manual} @code{@@ref@{,,,file name,manual@}} @ref{,,,file name,manual} @code{@@inforef@{,cross ref name @}} @inforef{,cross ref name } @code{@@inforef@{,,file name@}} @inforef{,,file name} @code{@@inforef@{,cross ref name, file name@}} @inforef{,cross ref name, file name} @code{@@inforef@{@}} @inforef{} Insercopying in titlepage @insertcopying @end titlepage Insertcopying in normal text @insertcopying Normal text < > " & ' ` ``simple-double--three---four----''@* code: @code{``simple-double--three---four----''} @* asis: @asis{``simple-double--three---four----''} @* strong: @strong{``simple-double--three---four----''} @* kbd: @kbd{``simple-double--three---four----''} @* `@w{}`simple-double-@w{}-three---four----'@w{}'@* @cindex --option @cindex `` @findex `` @findex --foption @@"u @"u @@"@{U@} @"{U} @@~n @~n @@^a @^a @@'e @'e @@=o @=o @@`i @`i @@'@{e@} @'{e} @@'@{@@dotless@{i@}@} @'{@dotless{i}} @@dotless@{i@} @dotless{i} @@dotless@{j@} @dotless{j} @@`@{@@=E@} @`{@=E} @@l@{@} @l{} @@,@{@@'C@} @,{@'C} @@,c @,c @@,c@@"u @,c@"u @* @@* @* @@ followed by a space @ @@ followed by a tab @ @@ followed by a new line @ @code{@@-} @- @code{@@|} @| @code{@@:} @: @code{@@!} @! @code{@@?} @? @code{@@.} @. @code{@@@@} @@ @code{@@@}} @} @code{@@@{} @{ @code{@@/} @/ foo vs.@: bar. colon :@:And something else. semi colon ;@:. And ? ?@:. Now ! !@:@@ but , ,@: @@TeX @TeX{} @@LaTeX @LaTeX{} @@bullet @bullet{} @@copyright @copyright{} @@dots @dots{} @@enddots @enddots{} @@equiv @equiv{} @@error @error{} @@expansion @expansion{} @@minus @minus{} @@point @point{} @@print @print{} @@result @result{} @@today @today{} @@aa @aa{} @@AA @AA{} @@ae @ae{} @@oe @oe{} @@AE @AE{} @@OE @OE{} @@o @o{} @@O @O{} @@ss @ss{} @@l @l{} @@L @L{} @@exclamdown @exclamdown{} @@questiondown @questiondown{} @@pounds @pounds{} @@registeredsymbol @registeredsymbol{} @@ordf @ordf{} @@ordm @ordm{} @@comma @comma{} @@quotedblleft @quotedblleft{} @@quotedblright @quotedblright{} @@quoteleft @quoteleft{} @@quoteright @quoteright{} @@quotedblbase @quotedblbase{} @@quotesinglbase @quotesinglbase{} @@guillemetleft @guillemetleft{} @@guillemetright @guillemetright{} @@guillemotleft @guillemotleft{} @@guillemotright @guillemotright{} @@guilsinglleft @guilsinglleft{} @@guilsinglright @guilsinglright{} @@textdegree @textdegree{} @@euro @euro{} @@arrow @arrow{} @@leq @leq{} @@geq @geq{} @code{@@acronym@{--a,an accronym@}} @acronym{--a,an accronym} @code{@@acronym@{--a@}} @acronym{--a} @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude Autonome @}} @abbr{@'E--. @comma{}A., @'Etude Autonome } @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} @code{@@asis@{--a@}} @asis{--a} @code{@@b@{--a@}} @b{--a} @code{@@cite@{--a@}} @cite{--a} @code{@@code@{--a@}} @code{--a} @code{@@command@{--a@}} @command{--a} @code{@@ctrl@{--a@}} @ctrl{--a} @code{@@dfn@{--a@}} @dfn{--a} @code{@@dmn@{--a@}} @dmn{--a} @code{@@email@{--a,--b@}} @email{--a,--b} @code{@@email@{,--b@}} @email{,--b} @code{@@email@{--a@}} @email{--a} @code{@@emph@{--a@}} @emph{--a} @code{@@env@{--a@}} @env{--a} @code{@@file@{--a@}} @file{--a} @code{@@i@{--a@}} @i{--a} @code{@@kbd@{--a@}} @kbd{--a} @code{@@key@{--a@}} @key{--a} @code{@@math@{--a @{\frac@{1@}@{2@}@} @@minus@{@}@}} @math{--a {\frac{1}{2}} @minus{}} @code{@@option@{--a@}} @option{--a} @code{@@r@{--a@}} @r{--a} @code{@@samp@{--a@}} @samp{--a} @code{@@sc@{--a@}} @sc{--a} @code{@@strong@{--a@}} @strong{--a} @code{@@t@{--a@}} @t{--a} @code{@@sansserif@{--a@}} @sansserif{--a} @code{@@titlefont@{--a@}} @titlefont{--a} @code{@@indicateurl@{--a@}} @indicateurl{--a} @code{@@uref@{--a,--b@}} @uref{--a,--b} @code{@@uref@{--a@}} @uref{--a} @code{@@uref@{,--b@}} @uref{,--b} @code{@@uref@{--a,--b,--c@}} @uref{--a,--b,--c} @code{@@uref@{,--b,--c@}} @uref{,--b,--c} @code{@@uref@{--a,,--c@}} @uref{--a,,--c} @code{@@uref@{,,--c@}} @uref{,,--c} @code{@@url@{--a,--b@}} @url{--a,--b} @code{@@url@{--a,@}} @url{--a,} @code{@@url@{,--b@}} @url{,--b} @code{@@var@{--a@}} @var{--a} @code{@@verb@{:--a:@}} @verb{:--a:} @code{@@verb@{:a < & @@ % " -- b:@}} @verb{:a < & @ % " -- b:} @code{@@w@{@}} @w{} @code{@@H@{a@}} @H{a} @code{@@H@{--a@}} @H{--a} @code{@@dotaccent@{a@}} @dotaccent{a} @code{@@dotaccent@{--a@}} @dotaccent{--a} @code{@@ringaccent@{a@}} @ringaccent{a} @code{@@ringaccent@{--a@}} @ringaccent{--a} @code{@@tieaccent@{a@}} @tieaccent{a} @code{@@tieaccent@{--a@}} @tieaccent{--a} @code{@@u@{a@}} @u{a} @code{@@u@{--a@}} @u{--a} @code{@@ubaraccent@{a@}} @ubaraccent{a} @code{@@ubaraccent@{--a@}} @ubaraccent{--a} @code{@@udotaccent@{a@}} @udotaccent{a} @code{@@udotaccent@{--a@}} @udotaccent{--a} @code{@@v@{a@}} @v{a} @code{@@v@{--a@}} @v{--a} @code{@@,@{c@}} @,{c} @code{@@,@{--c@}} @,{--c} @code{@@ogonek@{a@}} @ogonek{a} @code{@@ogonek@{--a@}} @ogonek{--a} @code{@@footnote@{in footnote@}} @footnote{in footnote} @code{@@footnote@{in footnote2@}} @footnote{in footnote2} @code{@@image@{f--ile@}} @image{f--ile} @code{@@image@{f--ile,l--i@}} @image{f--ile,l--i} @code{@@image@{f--ile,,l--e@}} @image{f--ile,,l--e} @code{@@image@{f--ile,,,alt@}} @image{f--ile,,,alt} @code{@@image@{f--ile,,,,e-d-xt@}} @image{f--ile,,,,e--xt} @code{@@image@{f--ile,aze,az,alt,e--xt@}} @image{f--ile,aze,az,alt,e--xt} @code{@@image@{f-ile,aze,,a--lt@}} @image{f-ile,aze,,a--lt} @code{@@image@{@@file@{f--ile@}@@@@@@.,aze,az,alt,@@file@{file ext@} e--xt@@@}} @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@}} @sp 2 @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} @clickstyle @result After clickstyle @result{} @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} @clickstyle @arrow @quotation A quot---ation @end quotation @quotation Note A Note @end quotation @quotation note A note @end quotation @quotation Caution Caution @end quotation @quotation Important Important @end quotation @quotation Tip a Tip @end quotation @quotation Warning a Warning. @end quotation @quotation something @'e @TeX{} The something @'e @TeX{} is here. @end quotation @quotation @@ at the end of line @ A @@ at the end of the @@quotation line. @end quotation @quotation something, other thing something, other thing @end quotation @quotation Note, the note Note, the note @end quotation @quotation @end quotation @quotation Empty @end quotation @quotation @asis{} @end quotation @quotation @* @end quotation @smallquotation A small quot---ation @end smallquotation @smallquotation Note A small Note @end smallquotation @smallquotation something, other thing something, other thing @end smallquotation @itemize @item i--temize @end itemize @itemize + @item i--tem + @end itemize @itemize @bullet @item b--ullet @end itemize @itemize @minus @item minu--s @end itemize @itemize @emph @item e--mph item @end itemize @itemize @emph{after emph} @c comment in itemize @item e--mph item @end itemize @itemize @bullet{} a--n itemize line @cindex index entry within itemize @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 6 7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @c comment in multitable @item mu--ltitable item 2 @tab multitable tab 2 @cindex index entry within multitable @item lone mu--ltitable item @end multitable @multitable {truc} {bidule} @item truc @tab bidule @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @display d--isplay @end display @smalldisplay s--malldisplay @end smalldisplay @lisp l--isp @end lisp @smalllisp s--malllisp @end smalllisp @format f--ormat @end format @smallformat s--mallformat @end smallformat @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @deffn cate--gory de--ffn_name ar--guments @ more args @* even more so def--fn @end deffn @deffn fset @var{i} a g @cindex index entry within deffn @deffnx {cmde} truc {} @deffnx Command {log trap} {} @deffnx Command { log trap1} {} @deffnx Command {log trap2 } {} @deffnx cmde @b{id ule} truc @deffnx cmde2 @b{id @samp{i} ule} truc @deffnx @b{id @samp{i} ule} @deffnx @deffnx aaa @deffnx {} {} @deffnx{} @deffnx{} machin @deffnx{} {bidule machin} @deffnx{truc} machin @deffnx{truc} { } @deffnx{truc} followed by a comment @c comment @deffnx{truc} @deffnx{} {} @deffnx {truc} a b c d e @b{f g} {h i} @deffnx {truc} deffnx before end deffn @end deffn @deffn empty deffn @end deffn @deffn empty deffn with deffnx @c comment between deffn and deffnx @deffnx empty deffnx @end deffn @deffn fset @var{i} a g @deffnx {cmde} truc {} @c comment text in def item for second def item @end deffn @defvr c--ategory d--efvr_name d--efvr @end defvr @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... d--eftypefn @end deftypefn @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... d--eftypeop @end deftypeop @deftypevr c--ategory t--ype d--eftypevr_name d--eftypevr @end deftypevr @defcv c--ategory c--lass d--efcv_name d--efcv @end defcv @defop c--ategory c--lass d--efop_name a--rguments... d--efop @end defop @deftp c--ategory d--eftp_name a--ttributes... d--eftp @end deftp @defun d--efun_name a--rguments... d--efun @end defun @defmac d--efmac_name a--rguments... d--efmac @end defmac @defspec d--efspec_name a--rguments... d--efspec @end defspec @defvar d--efvar_name argvar argvar1 d--efvar @end defvar @defopt d--efopt_name d--efopt @end defopt @deftypefun t--ype d--eftypefun_name a--rguments... d--eftypefun @end deftypefun @deftypevar t--ype d--eftypevar_name d--eftypevar @end deftypevar @defivar c--lass d--efivar_name d--efivar @end defivar @deftypeivar c--lass t--ype d--eftypeivar_name d--eftypeivar @end deftypeivar @defmethod c--lass d--efmethod_name a--rguments... d--efmethod @end defmethod @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... d--eftypemethod @end deftypemethod @code{@@xref@{c---hapter@@@@, cross r---ef name@@@@, t---itle@@@@, file n---ame@@@@, ma---nual@@@@@}} @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@}. @code{@@ref@{chapter, cross ref name, title, file name, manual@}} @ref{chapter, cross ref name, title, file name, manual} @code{@@pxref@{chapter, cross ref name, title, file name, manual@}} @pxref{chapter, cross ref name, title, file name, manual} @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} @code{@@ref@{chapter@}} @ref{chapter} @code{@@xref@{chapter@}} @xref{chapter}. @code{@@pxref@{chapter@}} @pxref{chapter} @code{@@ref@{s--ect@@comma@{@}ion@}} @ref{s--ect@comma{}ion} @code{@@ref@{s--ect@@comma@{@}ion, a @@comma@{@} in cross ref, a comma@@comma@{@} in title, a comma@@comma@{@} in file, a @@comma@{@} in manual name @}} @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } @code{@@ref@{chapter,cross ref name@}} @ref{chapter,cross ref name} @code{@@ref@{chapter,,title@}} @ref{chapter,,title} @code{@@ref@{chapter,,,file name@}} @ref{chapter,,,file name} @code{@@ref@{chapter,,,,manual@}} @ref{chapter,,,,manual} @code{@@ref@{chapter,cross ref name,title,@}} @ref{chapter,cross ref name,title,} @code{@@ref@{chapter,cross ref name,,file name@}} @ref{chapter,cross ref name,,file name} @code{@@ref@{chapter,cross ref name,,,manual@}} @ref{chapter,cross ref name,,,manual} @code{@@ref@{chapter,cross ref name,title,file name@}} @ref{chapter,cross ref name,title,file name} @code{@@ref@{chapter,cross ref name,title,,manual@}} @ref{chapter,cross ref name,title,,manual} @code{@@ref@{chapter,cross ref name,title, file name, manual@}} @ref{chapter,cross ref name,title, file name, manual} @code{@@ref@{chapter,,title,file name@}} @ref{chapter,,title,file name} @code{@@ref@{chapter,,title,,manual@}} @ref{chapter,,title,,manual} @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} @code{@@ref@{chapter,,,file name,manual@}} @ref{chapter,,,file name,manual} @code{@@ref@{(pman)anode,cross ref name@}} @ref{(pman)anode,cross ref name} @code{@@ref@{(pman)anode,,title@}} @ref{(pman)anode,,title} @code{@@ref@{(pman)anode,,,file name@}} @ref{(pman)anode,,,file name} @code{@@ref@{(pman)anode,,,,manual@}} @ref{(pman)anode,,,,manual} @code{@@ref@{(pman)anode,cross ref name,title,@}} @ref{(pman)anode,cross ref name,title,} @code{@@ref@{(pman)anode,cross ref name,,file name@}} @ref{(pman)anode,cross ref name,,file name} @code{@@ref@{(pman)anode,cross ref name,,,manual@}} @ref{(pman)anode,cross ref name,,,manual} @code{@@ref@{(pman)anode,cross ref name,title,file name@}} @ref{(pman)anode,cross ref name,title,file name} @code{@@ref@{(pman)anode,cross ref name,title,,manual@}} @ref{(pman)anode,cross ref name,title,,manual} @code{@@ref@{(pman)anode,cross ref name,title, file name, manual@}} @ref{(pman)anode,cross ref name,title, file name, manual} @code{@@ref@{(pman)anode,,title,file name@}} @ref{(pman)anode,,title,file name} @code{@@ref@{(pman)anode,,title,,manual@}} @ref{(pman)anode,,title,,manual} @code{@@ref@{(pman)anode,,title, file name, manual@}} @ref{(pman)anode,,title, file name, manual} @code{@@ref@{(pman)anode,,,file name,manual@}} @ref{(pman)anode,,,file name,manual} @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} @code{@@inforef@{chapter@}} @inforef{chapter} @code{@@inforef@{chapter, cross ref name@}} @inforef{chapter, cross ref name} @code{@@inforef@{chapter,,file name@}} @inforef{chapter,,file name} @code{@@inforef@{node, cross ref name, file name@}} @inforef{node, cross ref name, file name} @code{@@inforef@{node@}} @inforef{node} @code{@@inforef@{node, cross ref name@}} @inforef{node, cross ref name} @code{@@inforef@{node,,file name@}} @inforef{node,,file name} @code{@@inforef@{chapter, cross ref name, file name, spurious arg@}} @inforef{chapter, cross ref name, file name, spurious arg} @code{@@inforef@{s--ect@@comma@{@}ion, a @@comma@{@} in cross ref, a comma@@comma@{@} in file@}} @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} @table @bullet @c comment in table @item a l--ine @end table @vtable @asis @item a @c comment between item and itemx @itemx b l--ine @end vtable @ftable @minus @item a @cindex index entry between item and itemx @itemx b l--ine @end ftable @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @verbatiminclude simplest.texi @verbatim in verbatim '' @end verbatim @html html '' @end html @majorheading majorheading @chapheading chapheading @heading heading @subheading subheading @subsubheading subsubheading @c makeinfo cannot handle that @code{@@acronym@{--a,an accronym @@comma@{@} @@enddots@{@}@}} @acronym{--a,an accronym @comma{} @enddots{}} @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude--@@comma@{@} @@b@{Autonome@} @}} @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} @code{@@math@{--a@@minus@{@} @{\frac@{1@}@{2@}@}@}} @math{--a@minus{} {\frac{1}{2}}} @code{@@image@{f-ile,,,alt@@verb@{:jk _" %@:@}@}} @image{f-ile,,,alt@verb{:jk _" %@:}} @code{@@image@{f--ile,aze,az,@@verb@{:jk _" %@@:@} @@b@{in b "@},e--xt@}} @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} @code{@@image@{file@@verb@{:jk _" %@@:@},,,alt@@verb@{:jk _" %@@:@}@}} @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} @set invalid @c invalid texinfo Somehow invalid use of @@,:@* @@, @, @* @@,@@"u @,@"u Invalid use of @@':@* @@' @' @* @@'@@"u @'@"u @c only i or j as arg @@dotless@{truc@} @dotless{truc} @@dotless@{ij@} @dotless{ij} @code{@@dotless@{--a@}} @dotless{--a} @code{@@dotless@{a@}} @dotless{a} @c braces missing @@TeX, but without brace @TeX @c unknown command @code{@@#} @# @c no arg @code{@@w@{--a@}} @w{--a} @c no file @code{@@image@{,1--xt@}} @image{,1--xt} @code{@@image@{,,2--xt@}} @image{,,2--xt} @code{@@image@{,,,3--xt@}} @image{,,,3--xt} @sp @c braces missing @itemize @emph after emph @item e--mph item @end itemize @c braces missing @itemize @bullet a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @c deffnx after deff lines @deffn fun @deffnx truc machin bidule chose and } @deffnx truc machin bidule chose and } after @deffnx truc machin bidule chose and { @deffnx truc machin bidule chose and { and after @deffnx {truc} followed by a comment @c comment Various deff lines @deffnx {truc} after a deff item @end deffn @c node is non existent, or missing first arg @code{@@ref@{node@}} @ref{node} @code{@@ref@{,cross ref name@}} @ref{,cross ref name} @code{@@ref@{,,title@}} @ref{,,title} @code{@@ref@{,,,file name@}} @ref{,,,file name} @code{@@ref@{,,,,manual@}} @ref{,,,,manual} @code{@@ref@{node,cross ref name@}} @ref{node,cross ref name} @code{@@ref@{node,,title@}} @ref{node,,title} @code{@@ref@{node,,,file name@}} @ref{node,,,file name} @code{@@ref@{node,,,,manual@}} @ref{node,,,,manual} @code{@@ref@{node,cross ref name,title,@}} @ref{node,cross ref name,title,} @code{@@ref@{node,cross ref name,,file name@}} @ref{node,cross ref name,,file name} @code{@@ref@{node,cross ref name,,,manual@}} @ref{node,cross ref name,,,manual} @code{@@ref@{node,cross ref name,title,file name@}} @ref{node,cross ref name,title,file name} @code{@@ref@{node,cross ref name,title,,manual@}} @ref{node,cross ref name,title,,manual} @code{@@ref@{node,cross ref name,title, file name, manual@}} @ref{node,cross ref name,title, file name, manual} @code{@@ref@{node,,title,file name@}} @ref{node,,title,file name} @code{@@ref@{node,,title,,manual@}} @ref{node,,title,,manual} @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} @code{@@ref@{node,,title, file name, manual@}} @ref{node,,title, file name, manual} @code{@@ref@{node,,,file name,manual@}} @ref{node,,,file name,manual} @code{@@ref@{,cross ref name,title,@}} @ref{,cross ref name,title,} @code{@@ref@{,cross ref name,,file name@}} @ref{,cross ref name,,file name} @code{@@ref@{,cross ref name,,,manual@}} @ref{,cross ref name,,,manual} @code{@@ref@{,cross ref name,title,file name@}} @ref{,cross ref name,title,file name} @code{@@ref@{,cross ref name,title,,manual@}} @ref{,cross ref name,title,,manual} @code{@@ref@{,cross ref name,title, file name, manual@}} @ref{,cross ref name,title, file name, manual} @code{@@ref@{,,title,file name@}} @ref{,,title,file name} @code{@@ref@{,,title,,manual@}} @ref{,,title,,manual} @code{@@ref@{,,title, file name, manual@}} @ref{,,title, file name, manual} @code{@@ref@{,,,file name,manual@}} @ref{,,,file name,manual} @code{@@inforef@{,cross ref name @}} @inforef{,cross ref name } @code{@@inforef@{,,file name@}} @inforef{,,file name} @code{@@inforef@{,cross ref name, file name@}} @inforef{,cross ref name, file name} @code{@@inforef@{@}} @inforef{} In example. @example < > " & ' ` ``simple-double--three---four----''@* code: @code{``simple-double--three---four----''} @* asis: @asis{``simple-double--three---four----''} @* strong: @strong{``simple-double--three---four----''} @* kbd: @kbd{``simple-double--three---four----''} @* `@w{}`simple-double-@w{}-three---four----'@w{}'@* @cindex --option @cindex `` @findex `` @findex --foption @@"u @"u @@"@{U@} @"{U} @@~n @~n @@^a @^a @@'e @'e @@=o @=o @@`i @`i @@'@{e@} @'{e} @@'@{@@dotless@{i@}@} @'{@dotless{i}} @@dotless@{i@} @dotless{i} @@dotless@{j@} @dotless{j} @@`@{@@=E@} @`{@=E} @@l@{@} @l{} @@,@{@@'C@} @,{@'C} @@,c @,c @@,c@@"u @,c@"u @* @@* @* @@ followed by a space @ @@ followed by a tab @ @@ followed by a new line @ @code{@@-} @- @code{@@|} @| @code{@@:} @: @code{@@!} @! @code{@@?} @? @code{@@.} @. @code{@@@@} @@ @code{@@@}} @} @code{@@@{} @{ @code{@@/} @/ foo vs.@: bar. colon :@:And something else. semi colon ;@:. And ? ?@:. Now ! !@:@@ but , ,@: @@TeX @TeX{} @@LaTeX @LaTeX{} @@bullet @bullet{} @@copyright @copyright{} @@dots @dots{} @@enddots @enddots{} @@equiv @equiv{} @@error @error{} @@expansion @expansion{} @@minus @minus{} @@point @point{} @@print @print{} @@result @result{} @@today @today{} @@aa @aa{} @@AA @AA{} @@ae @ae{} @@oe @oe{} @@AE @AE{} @@OE @OE{} @@o @o{} @@O @O{} @@ss @ss{} @@l @l{} @@L @L{} @@exclamdown @exclamdown{} @@questiondown @questiondown{} @@pounds @pounds{} @@registeredsymbol @registeredsymbol{} @@ordf @ordf{} @@ordm @ordm{} @@comma @comma{} @@quotedblleft @quotedblleft{} @@quotedblright @quotedblright{} @@quoteleft @quoteleft{} @@quoteright @quoteright{} @@quotedblbase @quotedblbase{} @@quotesinglbase @quotesinglbase{} @@guillemetleft @guillemetleft{} @@guillemetright @guillemetright{} @@guillemotleft @guillemotleft{} @@guillemotright @guillemotright{} @@guilsinglleft @guilsinglleft{} @@guilsinglright @guilsinglright{} @@textdegree @textdegree{} @@euro @euro{} @@arrow @arrow{} @@leq @leq{} @@geq @geq{} @code{@@acronym@{--a,an accronym@}} @acronym{--a,an accronym} @code{@@acronym@{--a@}} @acronym{--a} @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude Autonome @}} @abbr{@'E--. @comma{}A., @'Etude Autonome } @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} @code{@@asis@{--a@}} @asis{--a} @code{@@b@{--a@}} @b{--a} @code{@@cite@{--a@}} @cite{--a} @code{@@code@{--a@}} @code{--a} @code{@@command@{--a@}} @command{--a} @code{@@ctrl@{--a@}} @ctrl{--a} @code{@@dfn@{--a@}} @dfn{--a} @code{@@dmn@{--a@}} @dmn{--a} @code{@@email@{--a,--b@}} @email{--a,--b} @code{@@email@{,--b@}} @email{,--b} @code{@@email@{--a@}} @email{--a} @code{@@emph@{--a@}} @emph{--a} @code{@@env@{--a@}} @env{--a} @code{@@file@{--a@}} @file{--a} @code{@@i@{--a@}} @i{--a} @code{@@kbd@{--a@}} @kbd{--a} @code{@@key@{--a@}} @key{--a} @code{@@math@{--a @{\frac@{1@}@{2@}@} @@minus@{@}@}} @math{--a {\frac{1}{2}} @minus{}} @code{@@option@{--a@}} @option{--a} @code{@@r@{--a@}} @r{--a} @code{@@samp@{--a@}} @samp{--a} @code{@@sc@{--a@}} @sc{--a} @code{@@strong@{--a@}} @strong{--a} @code{@@t@{--a@}} @t{--a} @code{@@sansserif@{--a@}} @sansserif{--a} @code{@@titlefont@{--a@}} @titlefont{--a} @code{@@indicateurl@{--a@}} @indicateurl{--a} @code{@@uref@{--a,--b@}} @uref{--a,--b} @code{@@uref@{--a@}} @uref{--a} @code{@@uref@{,--b@}} @uref{,--b} @code{@@uref@{--a,--b,--c@}} @uref{--a,--b,--c} @code{@@uref@{,--b,--c@}} @uref{,--b,--c} @code{@@uref@{--a,,--c@}} @uref{--a,,--c} @code{@@uref@{,,--c@}} @uref{,,--c} @code{@@url@{--a,--b@}} @url{--a,--b} @code{@@url@{--a,@}} @url{--a,} @code{@@url@{,--b@}} @url{,--b} @code{@@var@{--a@}} @var{--a} @code{@@verb@{:--a:@}} @verb{:--a:} @code{@@verb@{:a < & @@ % " -- b:@}} @verb{:a < & @ % " -- b:} @code{@@w@{@}} @w{} @code{@@H@{a@}} @H{a} @code{@@H@{--a@}} @H{--a} @code{@@dotaccent@{a@}} @dotaccent{a} @code{@@dotaccent@{--a@}} @dotaccent{--a} @code{@@ringaccent@{a@}} @ringaccent{a} @code{@@ringaccent@{--a@}} @ringaccent{--a} @code{@@tieaccent@{a@}} @tieaccent{a} @code{@@tieaccent@{--a@}} @tieaccent{--a} @code{@@u@{a@}} @u{a} @code{@@u@{--a@}} @u{--a} @code{@@ubaraccent@{a@}} @ubaraccent{a} @code{@@ubaraccent@{--a@}} @ubaraccent{--a} @code{@@udotaccent@{a@}} @udotaccent{a} @code{@@udotaccent@{--a@}} @udotaccent{--a} @code{@@v@{a@}} @v{a} @code{@@v@{--a@}} @v{--a} @code{@@,@{c@}} @,{c} @code{@@,@{--c@}} @,{--c} @code{@@ogonek@{a@}} @ogonek{a} @code{@@ogonek@{--a@}} @ogonek{--a} @code{@@footnote@{in footnote@}} @footnote{in footnote} @code{@@footnote@{in footnote2@}} @footnote{in footnote2} @code{@@image@{f--ile@}} @image{f--ile} @code{@@image@{f--ile,l--i@}} @image{f--ile,l--i} @code{@@image@{f--ile,,l--e@}} @image{f--ile,,l--e} @code{@@image@{f--ile,,,alt@}} @image{f--ile,,,alt} @code{@@image@{f--ile,,,,e-d-xt@}} @image{f--ile,,,,e--xt} @code{@@image@{f--ile,aze,az,alt,e--xt@}} @image{f--ile,aze,az,alt,e--xt} @code{@@image@{f-ile,aze,,a--lt@}} @image{f-ile,aze,,a--lt} @code{@@image@{@@file@{f--ile@}@@@@@@.,aze,az,alt,@@file@{file ext@} e--xt@@@}} @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@}} @sp 2 @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} @clickstyle @result After clickstyle @result{} @code{@@clicksequence@{click @@click@{@} A@}} @clicksequence{click @click{} A} @clickstyle @arrow @quotation A quot---ation @end quotation @quotation Note A Note @end quotation @quotation note A note @end quotation @quotation Caution Caution @end quotation @quotation Important Important @end quotation @quotation Tip a Tip @end quotation @quotation Warning a Warning. @end quotation @quotation something @'e @TeX{} The something @'e @TeX{} is here. @end quotation @quotation @@ at the end of line @ A @@ at the end of the @@quotation line. @end quotation @quotation something, other thing something, other thing @end quotation @quotation Note, the note Note, the note @end quotation @quotation @end quotation @quotation Empty @end quotation @quotation @asis{} @end quotation @quotation @* @end quotation @smallquotation A small quot---ation @end smallquotation @smallquotation Note A small Note @end smallquotation @smallquotation something, other thing something, other thing @end smallquotation @itemize @item i--temize @end itemize @itemize + @item i--tem + @end itemize @itemize @bullet @item b--ullet @end itemize @itemize @minus @item minu--s @end itemize @itemize @emph @item e--mph item @end itemize @itemize @emph{after emph} @c comment in itemize @item e--mph item @end itemize @itemize @bullet{} a--n itemize line @cindex index entry within itemize @item i--tem 1 @item i--tem 2 @end itemize @enumerate @item e--numerate @end enumerate @multitable @columnfractions 6 7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @c comment in multitable @item mu--ltitable item 2 @tab multitable tab 2 @cindex index entry within multitable @item lone mu--ltitable item @end multitable @multitable {truc} {bidule} @item truc @tab bidule @end multitable @example e--xample some text @end example @smallexample s--mallexample @end smallexample @display d--isplay @end display @smalldisplay s--malldisplay @end smalldisplay @lisp l--isp @end lisp @smalllisp s--malllisp @end smalllisp @format f--ormat @end format @smallformat s--mallformat @end smallformat @deffn c--ategory d--effn_name a--rguments... d--effn @end deffn @deffn cate--gory de--ffn_name ar--guments @ more args @* even more so def--fn @end deffn @deffn fset @var{i} a g @cindex index entry within deffn @deffnx {cmde} truc {} @deffnx Command {log trap} {} @deffnx Command { log trap1} {} @deffnx Command {log trap2 } {} @deffnx cmde @b{id ule} truc @deffnx cmde2 @b{id @samp{i} ule} truc @deffnx @b{id @samp{i} ule} @deffnx @deffnx aaa @deffnx {} {} @deffnx{} @deffnx{} machin @deffnx{} {bidule machin} @deffnx{truc} machin @deffnx{truc} { } @deffnx{truc} followed by a comment @c comment @deffnx{truc} @deffnx{} {} @deffnx {truc} a b c d e @b{f g} {h i} @deffnx {truc} deffnx before end deffn @end deffn @deffn empty deffn @end deffn @deffn empty deffn with deffnx @c comment between deffn and deffnx @deffnx empty deffnx @end deffn @deffn fset @var{i} a g @deffnx {cmde} truc {} @c comment text in def item for second def item @end deffn @defvr c--ategory d--efvr_name d--efvr @end defvr @deftypefn c--ategory t--ype d--eftypefn_name a--rguments... d--eftypefn @end deftypefn @deftypeop c--ategory c--lass t--ype d--eftypeop_name a--rguments... d--eftypeop @end deftypeop @deftypevr c--ategory t--ype d--eftypevr_name d--eftypevr @end deftypevr @defcv c--ategory c--lass d--efcv_name d--efcv @end defcv @defop c--ategory c--lass d--efop_name a--rguments... d--efop @end defop @deftp c--ategory d--eftp_name a--ttributes... d--eftp @end deftp @defun d--efun_name a--rguments... d--efun @end defun @defmac d--efmac_name a--rguments... d--efmac @end defmac @defspec d--efspec_name a--rguments... d--efspec @end defspec @defvar d--efvar_name argvar argvar1 d--efvar @end defvar @defopt d--efopt_name d--efopt @end defopt @deftypefun t--ype d--eftypefun_name a--rguments... d--eftypefun @end deftypefun @deftypevar t--ype d--eftypevar_name d--eftypevar @end deftypevar @defivar c--lass d--efivar_name d--efivar @end defivar @deftypeivar c--lass t--ype d--eftypeivar_name d--eftypeivar @end deftypeivar @defmethod c--lass d--efmethod_name a--rguments... d--efmethod @end defmethod @deftypemethod c--lass t--ype d--eftypemethod_name a--rguments... d--eftypemethod @end deftypemethod @code{@@xref@{c---hapter@@@@, cross r---ef name@@@@, t---itle@@@@, file n---ame@@@@, ma---nual@@@@@}} @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@}. @code{@@ref@{chapter, cross ref name, title, file name, manual@}} @ref{chapter, cross ref name, title, file name, manual} @code{@@pxref@{chapter, cross ref name, title, file name, manual@}} @pxref{chapter, cross ref name, title, file name, manual} @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} @code{@@ref@{chapter@}} @ref{chapter} @code{@@xref@{chapter@}} @xref{chapter}. @code{@@pxref@{chapter@}} @pxref{chapter} @code{@@ref@{s--ect@@comma@{@}ion@}} @ref{s--ect@comma{}ion} @code{@@ref@{s--ect@@comma@{@}ion, a @@comma@{@} in cross ref, a comma@@comma@{@} in title, a comma@@comma@{@} in file, a @@comma@{@} in manual name @}} @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } @code{@@ref@{chapter,cross ref name@}} @ref{chapter,cross ref name} @code{@@ref@{chapter,,title@}} @ref{chapter,,title} @code{@@ref@{chapter,,,file name@}} @ref{chapter,,,file name} @code{@@ref@{chapter,,,,manual@}} @ref{chapter,,,,manual} @code{@@ref@{chapter,cross ref name,title,@}} @ref{chapter,cross ref name,title,} @code{@@ref@{chapter,cross ref name,,file name@}} @ref{chapter,cross ref name,,file name} @code{@@ref@{chapter,cross ref name,,,manual@}} @ref{chapter,cross ref name,,,manual} @code{@@ref@{chapter,cross ref name,title,file name@}} @ref{chapter,cross ref name,title,file name} @code{@@ref@{chapter,cross ref name,title,,manual@}} @ref{chapter,cross ref name,title,,manual} @code{@@ref@{chapter,cross ref name,title, file name, manual@}} @ref{chapter,cross ref name,title, file name, manual} @code{@@ref@{chapter,,title,file name@}} @ref{chapter,,title,file name} @code{@@ref@{chapter,,title,,manual@}} @ref{chapter,,title,,manual} @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} @code{@@ref@{chapter,,,file name,manual@}} @ref{chapter,,,file name,manual} @code{@@ref@{(pman)anode,cross ref name@}} @ref{(pman)anode,cross ref name} @code{@@ref@{(pman)anode,,title@}} @ref{(pman)anode,,title} @code{@@ref@{(pman)anode,,,file name@}} @ref{(pman)anode,,,file name} @code{@@ref@{(pman)anode,,,,manual@}} @ref{(pman)anode,,,,manual} @code{@@ref@{(pman)anode,cross ref name,title,@}} @ref{(pman)anode,cross ref name,title,} @code{@@ref@{(pman)anode,cross ref name,,file name@}} @ref{(pman)anode,cross ref name,,file name} @code{@@ref@{(pman)anode,cross ref name,,,manual@}} @ref{(pman)anode,cross ref name,,,manual} @code{@@ref@{(pman)anode,cross ref name,title,file name@}} @ref{(pman)anode,cross ref name,title,file name} @code{@@ref@{(pman)anode,cross ref name,title,,manual@}} @ref{(pman)anode,cross ref name,title,,manual} @code{@@ref@{(pman)anode,cross ref name,title, file name, manual@}} @ref{(pman)anode,cross ref name,title, file name, manual} @code{@@ref@{(pman)anode,,title,file name@}} @ref{(pman)anode,,title,file name} @code{@@ref@{(pman)anode,,title,,manual@}} @ref{(pman)anode,,title,,manual} @code{@@ref@{(pman)anode,,title, file name, manual@}} @ref{(pman)anode,,title, file name, manual} @code{@@ref@{(pman)anode,,,file name,manual@}} @ref{(pman)anode,,,file name,manual} @code{@@inforef@{chapter, cross ref name, file name@}} @inforef{chapter, cross ref name, file name} @code{@@inforef@{chapter@}} @inforef{chapter} @code{@@inforef@{chapter, cross ref name@}} @inforef{chapter, cross ref name} @code{@@inforef@{chapter,,file name@}} @inforef{chapter,,file name} @code{@@inforef@{node, cross ref name, file name@}} @inforef{node, cross ref name, file name} @code{@@inforef@{node@}} @inforef{node} @code{@@inforef@{node, cross ref name@}} @inforef{node, cross ref name} @code{@@inforef@{node,,file name@}} @inforef{node,,file name} @code{@@inforef@{chapter, cross ref name, file name, spurious arg@}} @inforef{chapter, cross ref name, file name, spurious arg} @code{@@inforef@{s--ect@@comma@{@}ion, a @@comma@{@} in cross ref, a comma@@comma@{@} in file@}} @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} @table @bullet @c comment in table @item a l--ine @end table @vtable @asis @item a @c comment between item and itemx @itemx b l--ine @end vtable @ftable @minus @item a @cindex index entry between item and itemx @itemx b l--ine @end ftable @cartouche c--artouche @end cartouche @flushleft f--lushleft @end flushleft @flushright f--lushright @end flushright @center ce--ntered line @verbatiminclude simplest.texi @verbatim in verbatim '' @end verbatim @html html '' @end html @majorheading majorheading @chapheading chapheading @heading heading @subheading subheading @subsubheading subsubheading @c makeinfo cannot handle that @code{@@acronym@{--a,an accronym @@comma@{@} @@enddots@{@}@}} @acronym{--a,an accronym @comma{} @enddots{}} @code{@@abbr@{@@'E--. @@comma@{@}A., @@'Etude--@@comma@{@} @@b@{Autonome@} @}} @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } @code{@@abbr@{@@'E--. @@comma@{@}A.@}} @abbr{@'E--. @comma{}A.} @code{@@math@{--a@@minus@{@} @{\frac@{1@}@{2@}@}@}} @math{--a@minus{} {\frac{1}{2}}} @code{@@image@{f-ile,,,alt@@verb@{:jk _" %@:@}@}} @image{f-ile,,,alt@verb{:jk _" %@:}} @code{@@image@{f--ile,aze,az,@@verb@{:jk _" %@@:@} @@b@{in b "@},e--xt@}} @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} @code{@@image@{file@@verb@{:jk _" %@@:@},,,alt@@verb@{:jk _" %@@:@}@}} @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} @set invalid @c invalid texinfo Somehow invalid use of @@,:@* @@, @, @* @@,@@"u @,@"u Invalid use of @@':@* @@' @' @* @@'@@"u @'@"u @c only i or j as arg @@dotless@{truc@} @dotless{truc} @@dotless@{ij@} @dotless{ij} @code{@@dotless@{--a@}} @dotless{--a} @code{@@dotless@{a@}} @dotless{a} @c braces missing @@TeX, but without brace @TeX @c unknown command @code{@@#} @# @c no arg @code{@@w@{--a@}} @w{--a} @c no file @code{@@image@{,1--xt@}} @image{,1--xt} @code{@@image@{,,2--xt@}} @image{,,2--xt} @code{@@image@{,,,3--xt@}} @image{,,,3--xt} @sp @c braces missing @itemize @emph after emph @item e--mph item @end itemize @c braces missing @itemize @bullet a--n itemize line @item i--tem 1 @item i--tem 2 @end itemize @c deffnx after deff lines @deffn fun @deffnx truc machin bidule chose and } @deffnx truc machin bidule chose and } after @deffnx truc machin bidule chose and { @deffnx truc machin bidule chose and { and after @deffnx {truc} followed by a comment @c comment Various deff lines @deffnx {truc} after a deff item @end deffn @c node is non existent, or missing first arg @code{@@ref@{node@}} @ref{node} @code{@@ref@{,cross ref name@}} @ref{,cross ref name} @code{@@ref@{,,title@}} @ref{,,title} @code{@@ref@{,,,file name@}} @ref{,,,file name} @code{@@ref@{,,,,manual@}} @ref{,,,,manual} @code{@@ref@{node,cross ref name@}} @ref{node,cross ref name} @code{@@ref@{node,,title@}} @ref{node,,title} @code{@@ref@{node,,,file name@}} @ref{node,,,file name} @code{@@ref@{node,,,,manual@}} @ref{node,,,,manual} @code{@@ref@{node,cross ref name,title,@}} @ref{node,cross ref name,title,} @code{@@ref@{node,cross ref name,,file name@}} @ref{node,cross ref name,,file name} @code{@@ref@{node,cross ref name,,,manual@}} @ref{node,cross ref name,,,manual} @code{@@ref@{node,cross ref name,title,file name@}} @ref{node,cross ref name,title,file name} @code{@@ref@{node,cross ref name,title,,manual@}} @ref{node,cross ref name,title,,manual} @code{@@ref@{node,cross ref name,title, file name, manual@}} @ref{node,cross ref name,title, file name, manual} @code{@@ref@{node,,title,file name@}} @ref{node,,title,file name} @code{@@ref@{node,,title,,manual@}} @ref{node,,title,,manual} @code{@@ref@{chapter,,title, file name, manual@}} @ref{chapter,,title, file name, manual} @code{@@ref@{node,,title, file name, manual@}} @ref{node,,title, file name, manual} @code{@@ref@{node,,,file name,manual@}} @ref{node,,,file name,manual} @code{@@ref@{,cross ref name,title,@}} @ref{,cross ref name,title,} @code{@@ref@{,cross ref name,,file name@}} @ref{,cross ref name,,file name} @code{@@ref@{,cross ref name,,,manual@}} @ref{,cross ref name,,,manual} @code{@@ref@{,cross ref name,title,file name@}} @ref{,cross ref name,title,file name} @code{@@ref@{,cross ref name,title,,manual@}} @ref{,cross ref name,title,,manual} @code{@@ref@{,cross ref name,title, file name, manual@}} @ref{,cross ref name,title, file name, manual} @code{@@ref@{,,title,file name@}} @ref{,,title,file name} @code{@@ref@{,,title,,manual@}} @ref{,,title,,manual} @code{@@ref@{,,title, file name, manual@}} @ref{,,title, file name, manual} @code{@@ref@{,,,file name,manual@}} @ref{,,,file name,manual} @code{@@inforef@{,cross ref name @}} @inforef{,cross ref name } @code{@@inforef@{,,file name@}} @inforef{,,file name} @code{@@inforef@{,cross ref name, file name@}} @inforef{,cross ref name, file name} @code{@@inforef@{@}} @inforef{} @end example @cindex t--ruc @cindex T--ruc @cindex . @cindex ? @cindex a @findex t--ruc @findex T--ruc @findex . @findex ? @findex a cp @printindex cp fn @printindex fn vr @printindex vr ky @printindex ky pg @printindex pg tp @printindex tp @node chapter @chapter chapter @footnote{in footnote} @format @menu * s--ect@comma{}ion:: s--ect@comma{}ion Menu comment ``simple-double--three---four----''@* @end menu @end format @node s--ect@comma{}ion @section A section @menu * subsection:: @end menu @node subsection @subsection subsection @menu * subsubsection ``simple-double--three---four----'':: @end menu @anchor{anchor} @node subsubsection ``simple-double--three---four----'' @subsubsection subsubsection ``simple-double--three---four----'' @node chapter2 @centerchap chapter 2 @printindex cp @printindex fn @contents @shortcontents @bye texi2html-1.82/test/coverage/res/pass0_macros/0000755000175000017500000000000011264347123023170 5ustar flichtenheldflichtenheldtexi2html-1.82/test/coverage/res/pass0_macros/pass0_macros.20000644000175000017500000000006111264347123025642 0ustar flichtenheldflichtenheld*** Bad defindex line: chose machin (l. 39) texi2html-1.82/test/coverage/res/pass0_macros/pass0_macros.html0000644000175000017500000001541211264347123026453 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    pass0 macro


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. first node chapter

    before syncodeindex

    syncodeindex on its line line following syncodeindex

    One more thing following syncodeindex truc line following syncodeindex cp fn truc

    documentlanguage

    documentlanguage on its line line following documentlanguage

    double documentlanguage on its line line following documentlanguage

    after documentlanguage

    definedx truc after

    definedx chose machin after

    Before bye


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/coverage/res/texi_comments/0000755000175000017500000000000011264347123023454 5ustar flichtenheldflichtenheldtexi2html-1.82/test/coverage/res/texi_comments/comments.passtexi0000644000175000017500000002357611264347123027100 0ustar flichtenheldflichtenheldcomments.texi(,2) @setfilename comments.info comments.texi(,3) comments.texi(,4) @hyphenation{some-where comments.texi(,5) be-low comments.texi(,6) may-be to-morow comments.texi(,7) } comments.texi(,8) comments.texi(,9) @node Top comments.texi(,10) @top comments.texi(,11) @subheading Comment like: comments.texi(,12) comments.texi(,13) Text line followed by a comment on the same line and another below @c comment comments.texi(,14) @c comment comments.texi(,15) Text line after the comment followed by a comment @comment c comments.texi(,16) Text line after the text line followed by the comment. comments.texi(,17) comments.texi(,18) Comment at the end of the line @c comment comments.texi(,19) comments.texi(,20) Example with comments 2 lines comments.texi(,21) @example comments.texi(,22) line @c comment comments.texi(,23) second line @c comment comments.texi(,24) @end example comments.texi(,25) comments.texi(,26) Example with comments 1 line comments.texi(,27) @example comments.texi(,28) line @c comment comments.texi(,29) @end example comments.texi(,30) comments.texi(,31) No comments comments.texi(,32) @example comments.texi(,33) line comments.texi(,34) @end example comments.texi(,35) comments.texi(,36) The same but with oddfooting instead of comment: comments.texi(,37) Text line followed by a comment on the same line and another below @oddfooting comment comments.texi(,38) @oddfooting some text ignored comments.texi(,39) Text line after the comment followed by a comment @oddfooting c comments.texi(,40) Text line after the text line followed by the comment. comments.texi(,41) comments.texi(,42) @@pagesizes @pagesizes 200mm,150mm following @@pagesizes arg comments.texi(,43) @@afourpaper @afourpaper on line following afourpaper comments.texi(,44) @@smallbook @smallbook on line following smallbook comments.texi(,45) @@headings @headings on line following headings comments.texi(,46) @@oddfooting @oddfooting on line following oddfooting comments.texi(,47) @@everyheading @everyheading on line following everyheading comments.texi(,48) @@everyfooting @everyfooting on line following everyfooting comments.texi(,49) @@evenheading @evenheading on line following evenheading comments.texi(,50) @@evenfooting @evenfooting on line following evenfooting comments.texi(,51) @@oddheading @oddheading on line following comments.texi(,53) @@need @need 0.1 on line following comments.texi(,55) @@need @need 0.1 comments.texi(,56) @@setchapternewpage @setchapternewpage on line following setchapternewpage comments.texi(,57) @@raisesections @raisesections on line following raisesections comments.texi(,58) @@lowersections @lowersections on line following lowersections comments.texi(,59) @c @@kbdinputstyle @kbdinputstyle wrong arg on line following kbdinputstyle comments.texi(,61) @@kbdinputstyle code @kbdinputstyle code something comments.texi(,63) @@afourpaper @afourpaper on line following afourpaper comments.texi(,64) @@afourlatex @afourlatex on line following afourlatex comments.texi(,65) @@afourwide @afourwide on line following afourwide comments.texi(,66) comments.texi(,67) @c tex error: Use of \ doesn't match its definition. comments.texi(,70) @@definfoenclose phoo,//,\\ comments.texi(,70) comments.texi(,71) //bar\\ comments.texi(,73) comments.texi(,75) @@definfoenclose phi,:,: comments.texi(,75) comments.texi(,76) @c this is required comments.texi(,80) comments.texi(,81) :bar: comments.texi(,82) comments.texi(,83) @strong{very strong} comments.texi(,84) comments.texi(,86) comments.texi(,87) (strong: is it really strong? :) comments.texi(,88) comments.texi(,89) Makeinfo ignore @@kbdinputstyle: comments.texi(,90) comments.texi(,91) @kbdinputstyle code comments.texi(,92) comments.texi(,93) @kbd{truc} comments.texi(,94) comments.texi(,95) @example comments.texi(,96) @kbd{example} comments.texi(,97) @end example comments.texi(,98) comments.texi(,99) @subheading ignore arg comments.texi(,100) comments.texi(,101) comments.texi(,102) Commands doesn't accept anything after a non numerical arg on the line comments.texi(,103) and ignore things after a numerical arg comments.texi(,104) comments.texi(,105) @@paragraphindent asis @paragraphindent asis comments.texi(,106) @@paragraphindent 0 @paragraphindent 0 comments.texi(,107) @@paragraphindent none @paragraphindent none comments.texi(,108) @@paragraphindent 4 @paragraphindent 4 comments.texi(,109) @@firstparagraphindent none @firstparagraphindent none comments.texi(,111) @@exampleindent 6 @exampleindent 6 on line following exampleindent comments.texi(,113) @@exampleindent 6 @exampleindent 6 comments.texi(,114) @@footnotestyle @footnotestyle end comments.texi(,115) @@footnotestyle @footnotestyle separate comments.texi(,116) comments.texi(,117) Special arg for documentencoding. makeinfo complains, not tex comments.texi(,118) comments.texi(,119) @documentencoding comments.texi(,120) @@documentencoding @documentencoding bad encoding name comments.texi(,121) @documentencoding ISO-8859-1 comments.texi(,122) @c accepts on or off comments.texi(,123) @@frenchspacing @frenchspacing on comments.texi(,124) @@frenchspacing @frenchspacing off comments.texi(,125) @c accepts 10 or 11 comments.texi(,126) @@fonttextsize @fonttextsize 10 comments.texi(,127) @c @@fonttextsize @fonttextsize 11 comments.texi(,128) @c accept bottom and top comments.texi(,129) @c tex keeps the line, makeinfo doesn't comments.texi(,130) @@everyheadingmarks @everyheadingmarks bottom on line following everyheadingmarks comments.texi(,131) @c accept false or true comments.texi(,132) @c makeinfo don't care about the arg and remove the remaining of the line comments.texi(,133) @allowcodebreaks false comments.texi(,134) @code{false aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa} comments.texi(,135) comments.texi(,136) @allowcodebreaks true comments.texi(,137) @code{true aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa} comments.texi(,138) comments.texi(,145) comments.texi(,146) @subheading command removed comments.texi(,147) comments.texi(,148) And now finalout: comments.texi(,149) Text line followed by finalout on the same line and another below @finalout comments.texi(,150) @finalout comments.texi(,151) Text line after the finalout followed by a fianlout @finalout comments.texi(,152) Text line after the text line followed by the finalout. comments.texi(,153) comments.texi(,154) Test text after finalout comments.texi(,155) @finalout a word after finalout comments.texi(,156) Line after finalout comments.texi(,157) comments.texi(,158) @@page @page @@noindent @noindent @@refill @refill something comments.texi(,159) comments.texi(,160) @noindent noindent at beginning of line comments.texi(,161) @noindent comments.texi(,162) noindent on the preceding line comments.texi(,163) @noindent noindent after space at beginning of line comments.texi(,164) @page page at beginning of line comments.texi(,165) @page comments.texi(,166) After page on it's own line. comments.texi(,167) comments.texi(,168) @@page @page @@noindent @noindent @@refill @refill @@novalidate @novalidate something comments.texi(,169) comments.texi(,170) @@contents @contents something comments.texi(,171) comments.texi(,178) comments.texi(,179) @subheading special comments.texi(,180) comments.texi(,181) Only valid between iftex: comments.texi(,182) @c @@vskip @vskip @@cropmarks @cropmarks comments.texi(,183) Unknown ??? comments.texi(,184) @c @@fillbreak @fillbreak eol comments.texi(,185) comments.texi(,186) @@exdent @exdent line after exdent comments.texi(,187) comments.texi(,188) And now sp: comments.texi(,189) Text line followed by a comment on the same line and another below @sp 1 comments.texi(,190) @sp 2 comments.texi(,191) Text line after the comment followed by a comment @sp 1 comments.texi(,192) Text line after the text line followed by the comment. comments.texi(,194) @sp 2 a number after sp comments.texi(,196) comments.texi(,197) @clickstyle @result comments.texi(,198) comments.texi(,199) A @click{} (result). comments.texi(,200) comments.texi(,202) @c invalid, makeinfo warns about @result needing braces comments.texi(,203) @c others are also invalid comments.texi(,204) @clickstyle @result on the same line comments.texi(,205) comments.texi(,206) A @click{} (result on the same line). comments.texi(,207) comments.texi(,208) @clickstyle @nocmd comments.texi(,209) comments.texi(,210) A @click{} (nocmd). comments.texi(,211) comments.texi(,212) @clickstyle something comments.texi(,213) comments.texi(,214) A @click{} (something). comments.texi(,216) comments.texi(,217) Menu: comments.texi(,218) @menu comments.texi(,219) * node:: comments.texi(,220) * bidule:: comments.texi(,221) * bidule2:: comments.texi(,222) * undefined:: comments.texi(,223) @end menu comments.texi(,224) comments.texi(,225) @node node comments.texi(,226) @chapter chapter comments.texi(,227) @menu comments.texi(,228) * truc:: comments.texi(,229) @end menu comments.texi(,230) comments.texi(,231) @node truc comments.texi(,232) @section section comments.texi(,233) comments.texi(,234) first @@contents @contents line following first content comments.texi(,235) second @@contents @contents line following second content comments.texi(,236) Third content on the following line on his own comments.texi(,237) @contents comments.texi(,238) Line following contents comments.texi(,239) comments.texi(,240) @node bidule comments.texi(,241) @chapter bidule comments.texi(,242) comments.texi(,243) @@shortcontents @shortcontents eol comments.texi(,244) @@shortcontents @shortcontents eol comments.texi(,245) @@summarycontents @summarycontents line following summarycontents comments.texi(,246) comments.texi(,247) @node bidule2 comments.texi(,248) @chapter last comments.texi(,249) comments.texi(,250) @c no ref ignored because of novalidate comments.texi(,251) @ref{machin} comments.texi(,252) comments.texi(,253) @bye texi2html-1.82/test/coverage/res/texi_comments/comments.passfirst0000644000175000017500000002353011264347123027244 0ustar flichtenheldflichtenheldcomments.texi(,2) @setfilename comments.info comments.texi(,3) comments.texi(,4) @hyphenation{some-where comments.texi(,5) be-low comments.texi(,6) may-be to-morow comments.texi(,7) } comments.texi(,8) comments.texi(,9) @node Top comments.texi(,10) @top comments.texi(,11) @subheading Comment like: comments.texi(,12) comments.texi(,13) Text line followed by a comment on the same line and another below @c comment comments.texi(,14) @c comment comments.texi(,15) Text line after the comment followed by a comment @comment c comments.texi(,16) Text line after the text line followed by the comment. comments.texi(,17) comments.texi(,18) Comment at the end of the line @c comment comments.texi(,19) comments.texi(,20) Example with comments 2 lines comments.texi(,21) @example comments.texi(,22) line @c comment comments.texi(,23) second line @c comment comments.texi(,24) @end example comments.texi(,25) comments.texi(,26) Example with comments 1 line comments.texi(,27) @example comments.texi(,28) line @c comment comments.texi(,29) @end example comments.texi(,30) comments.texi(,31) No comments comments.texi(,32) @example comments.texi(,33) line comments.texi(,34) @end example comments.texi(,35) comments.texi(,36) The same but with oddfooting instead of comment: comments.texi(,37) Text line followed by a comment on the same line and another below @oddfooting comment comments.texi(,38) @oddfooting some text ignored comments.texi(,39) Text line after the comment followed by a comment @oddfooting c comments.texi(,40) Text line after the text line followed by the comment. comments.texi(,41) comments.texi(,42) @@pagesizes @pagesizes 200mm,150mm following @@pagesizes arg comments.texi(,43) @@afourpaper @afourpaper on line following afourpaper comments.texi(,44) @@smallbook @smallbook on line following smallbook comments.texi(,45) @@headings @headings on line following headings comments.texi(,46) @@oddfooting @oddfooting on line following oddfooting comments.texi(,47) @@everyheading @everyheading on line following everyheading comments.texi(,48) @@everyfooting @everyfooting on line following everyfooting comments.texi(,49) @@evenheading @evenheading on line following evenheading comments.texi(,50) @@evenfooting @evenfooting on line following evenfooting comments.texi(,51) @@oddheading @oddheading on line following comments.texi(,53) @@need @need 0.1 on line following comments.texi(,55) @@need @need 0.1 comments.texi(,56) @@setchapternewpage @setchapternewpage on line following setchapternewpage comments.texi(,57) @@raisesections @raisesections on line following raisesections comments.texi(,58) @@lowersections @lowersections on line following lowersections comments.texi(,59) @c @@kbdinputstyle @kbdinputstyle wrong arg on line following kbdinputstyle comments.texi(,61) @@kbdinputstyle code @kbdinputstyle code something comments.texi(,63) @@afourpaper @afourpaper on line following afourpaper comments.texi(,64) @@afourlatex @afourlatex on line following afourlatex comments.texi(,65) @@afourwide @afourwide on line following afourwide comments.texi(,66) comments.texi(,67) @c tex error: Use of \ doesn't match its definition. comments.texi(,70) @@definfoenclose phoo,//,\\ comments.texi(,71) //bar\\ comments.texi(,73) comments.texi(,75) @@definfoenclose phi,:,: comments.texi(,76) @c this is required comments.texi(,80) comments.texi(,81) :bar: comments.texi(,82) comments.texi(,83) @strong{very strong} comments.texi(,84) comments.texi(,86) comments.texi(,87) (strong: is it really strong? :) comments.texi(,88) comments.texi(,89) Makeinfo ignore @@kbdinputstyle: comments.texi(,90) comments.texi(,91) @kbdinputstyle code comments.texi(,92) comments.texi(,93) @kbd{truc} comments.texi(,94) comments.texi(,95) @example comments.texi(,96) @kbd{example} comments.texi(,97) @end example comments.texi(,98) comments.texi(,99) @subheading ignore arg comments.texi(,100) comments.texi(,101) comments.texi(,102) Commands doesn't accept anything after a non numerical arg on the line comments.texi(,103) and ignore things after a numerical arg comments.texi(,104) comments.texi(,105) @@paragraphindent asis @paragraphindent asis comments.texi(,106) @@paragraphindent 0 @paragraphindent 0 comments.texi(,107) @@paragraphindent none @paragraphindent none comments.texi(,108) @@paragraphindent 4 @paragraphindent 4 comments.texi(,109) @@firstparagraphindent none @firstparagraphindent none comments.texi(,111) @@exampleindent 6 @exampleindent 6 on line following exampleindent comments.texi(,113) @@exampleindent 6 @exampleindent 6 comments.texi(,114) @@footnotestyle @footnotestyle end comments.texi(,115) @@footnotestyle @footnotestyle separate comments.texi(,116) comments.texi(,117) Special arg for documentencoding. makeinfo complains, not tex comments.texi(,118) comments.texi(,119) @documentencoding comments.texi(,120) @@documentencoding @documentencoding bad encoding name comments.texi(,121) @documentencoding ISO-8859-1 comments.texi(,122) @c accepts on or off comments.texi(,123) @@frenchspacing @frenchspacing on comments.texi(,124) @@frenchspacing @frenchspacing off comments.texi(,125) @c accepts 10 or 11 comments.texi(,126) @@fonttextsize @fonttextsize 10 comments.texi(,127) @c @@fonttextsize @fonttextsize 11 comments.texi(,128) @c accept bottom and top comments.texi(,129) @c tex keeps the line, makeinfo doesn't comments.texi(,130) @@everyheadingmarks @everyheadingmarks bottom on line following everyheadingmarks comments.texi(,131) @c accept false or true comments.texi(,132) @c makeinfo don't care about the arg and remove the remaining of the line comments.texi(,133) @allowcodebreaks false comments.texi(,134) @code{false aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa} comments.texi(,135) comments.texi(,136) @allowcodebreaks true comments.texi(,137) @code{true aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa} comments.texi(,138) comments.texi(,145) comments.texi(,146) @subheading command removed comments.texi(,147) comments.texi(,148) And now finalout: comments.texi(,149) Text line followed by finalout on the same line and another below @finalout comments.texi(,150) @finalout comments.texi(,151) Text line after the finalout followed by a fianlout @finalout comments.texi(,152) Text line after the text line followed by the finalout. comments.texi(,153) comments.texi(,154) Test text after finalout comments.texi(,155) @finalout a word after finalout comments.texi(,156) Line after finalout comments.texi(,157) comments.texi(,158) @@page @page @@noindent @noindent @@refill @refill something comments.texi(,159) comments.texi(,160) @noindent noindent at beginning of line comments.texi(,161) @noindent comments.texi(,162) noindent on the preceding line comments.texi(,163) @noindent noindent after space at beginning of line comments.texi(,164) @page page at beginning of line comments.texi(,165) @page comments.texi(,166) After page on it's own line. comments.texi(,167) comments.texi(,168) @@page @page @@noindent @noindent @@refill @refill @@novalidate @novalidate something comments.texi(,169) comments.texi(,170) @@contents @contents something comments.texi(,171) comments.texi(,178) comments.texi(,179) @subheading special comments.texi(,180) comments.texi(,181) Only valid between iftex: comments.texi(,182) @c @@vskip @vskip @@cropmarks @cropmarks comments.texi(,183) Unknown ??? comments.texi(,184) @c @@fillbreak @fillbreak eol comments.texi(,185) comments.texi(,186) @@exdent @exdent line after exdent comments.texi(,187) comments.texi(,188) And now sp: comments.texi(,189) Text line followed by a comment on the same line and another below @sp 1 comments.texi(,190) @sp 2 comments.texi(,191) Text line after the comment followed by a comment @sp 1 comments.texi(,192) Text line after the text line followed by the comment. comments.texi(,194) @sp 2 a number after sp comments.texi(,196) comments.texi(,197) @clickstyle @result comments.texi(,198) comments.texi(,199) A @click{} (result). comments.texi(,200) comments.texi(,202) @c invalid, makeinfo warns about @result needing braces comments.texi(,203) @c others are also invalid comments.texi(,204) @clickstyle @result on the same line comments.texi(,205) comments.texi(,206) A @click{} (result on the same line). comments.texi(,207) comments.texi(,208) @clickstyle @nocmd comments.texi(,209) comments.texi(,210) A @click{} (nocmd). comments.texi(,211) comments.texi(,212) @clickstyle something comments.texi(,213) comments.texi(,214) A @click{} (something). comments.texi(,216) comments.texi(,217) Menu: comments.texi(,218) @menu comments.texi(,219) * node:: comments.texi(,220) * bidule:: comments.texi(,221) * bidule2:: comments.texi(,222) * undefined:: comments.texi(,223) @end menu comments.texi(,224) comments.texi(,225) @node node comments.texi(,226) @chapter chapter comments.texi(,227) @menu comments.texi(,228) * truc:: comments.texi(,229) @end menu comments.texi(,230) comments.texi(,231) @node truc comments.texi(,232) @section section comments.texi(,233) comments.texi(,234) first @@contents @contents line following first content comments.texi(,235) second @@contents @contents line following second content comments.texi(,236) Third content on the following line on his own comments.texi(,237) @contents comments.texi(,238) Line following contents comments.texi(,239) comments.texi(,240) @node bidule comments.texi(,241) @chapter bidule comments.texi(,242) comments.texi(,243) @@shortcontents @shortcontents eol comments.texi(,244) @@shortcontents @shortcontents eol comments.texi(,245) @@summarycontents @summarycontents line following summarycontents comments.texi(,246) comments.texi(,247) @node bidule2 comments.texi(,248) @chapter last comments.texi(,249) comments.texi(,250) @c no ref ignored because of novalidate comments.texi(,251) @ref{machin} comments.texi(,252) comments.texi(,253) @bye texi2html-1.82/test/coverage/res/texi_comments/comments.20000644000175000017500000000027611264347123025371 0ustar flichtenheldflichtenheld** Encoding name unknown: bad *** @clickstyle should only accept a macro as argument (l. 212) ** Encoding name unknown: bad *** @clickstyle should only accept a macro as argument (l. 212) texi2html-1.82/test/coverage/res/texi_comments/comments.texi0000644000175000017500000001317611264347123026204 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename comments.info @hyphenation{some-where be-low may-be to-morow } @node Top @top @subheading Comment like: Text line followed by a comment on the same line and another below @c comment @c comment Text line after the comment followed by a comment @comment c Text line after the text line followed by the comment. Comment at the end of the line @c comment Example with comments 2 lines @example line @c comment second line @c comment @end example Example with comments 1 line @example line @c comment @end example No comments @example line @end example The same but with oddfooting instead of comment: Text line followed by a comment on the same line and another below @oddfooting comment @oddfooting some text ignored Text line after the comment followed by a comment @oddfooting c Text line after the text line followed by the comment. @@pagesizes @pagesizes 200mm,150mm following @@pagesizes arg @@afourpaper @afourpaper on line following afourpaper @@smallbook @smallbook on line following smallbook @@headings @headings on line following headings @@oddfooting @oddfooting on line following oddfooting @@everyheading @everyheading on line following everyheading @@everyfooting @everyfooting on line following everyfooting @@evenheading @evenheading on line following evenheading @@evenfooting @evenfooting on line following evenfooting @@oddheading @oddheading on line following @@need @need 0.1 on line following @@need @need 0.1 @@setchapternewpage @setchapternewpage on line following setchapternewpage @@raisesections @raisesections on line following raisesections @@lowersections @lowersections on line following lowersections @c @@kbdinputstyle @kbdinputstyle wrong arg on line following kbdinputstyle @@kbdinputstyle code @kbdinputstyle code something @@afourpaper @afourpaper on line following afourpaper @@afourlatex @afourlatex on line following afourlatex @@afourwide @afourwide on line following afourwide @c tex error: Use of \ doesn't match its definition. @@definfoenclose phoo,//,\\ //bar\\ @@definfoenclose phi,:,: @c this is required :bar: @strong{very strong} (strong: is it really strong? :) Makeinfo ignore @@kbdinputstyle: @kbdinputstyle code @kbd{truc} @example @kbd{example} @end example @subheading ignore arg Commands doesn't accept anything after a non numerical arg on the line and ignore things after a numerical arg @@paragraphindent asis @paragraphindent asis @@paragraphindent 0 @paragraphindent 0 @@paragraphindent none @paragraphindent none @@paragraphindent 4 @paragraphindent 4 @@firstparagraphindent none @firstparagraphindent none @@exampleindent 6 @exampleindent 6 on line following exampleindent @@exampleindent 6 @exampleindent 6 @@footnotestyle @footnotestyle end @@footnotestyle @footnotestyle separate Special arg for documentencoding. makeinfo complains, not tex @documentencoding @@documentencoding @documentencoding bad encoding name @documentencoding ISO-8859-1 @c accepts on or off @@frenchspacing @frenchspacing on @@frenchspacing @frenchspacing off @c accepts 10 or 11 @@fonttextsize @fonttextsize 10 @c @@fonttextsize @fonttextsize 11 @c accept bottom and top @c tex keeps the line, makeinfo doesn't @@everyheadingmarks @everyheadingmarks bottom on line following everyheadingmarks @c accept false or true @c makeinfo don't care about the arg and remove the remaining of the line @allowcodebreaks false @code{false aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa} @allowcodebreaks true @code{true aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa} @subheading command removed And now finalout: Text line followed by finalout on the same line and another below @finalout @finalout Text line after the finalout followed by a fianlout @finalout Text line after the text line followed by the finalout. Test text after finalout @finalout a word after finalout Line after finalout @@page @page @@noindent @noindent @@refill @refill something @noindent noindent at beginning of line @noindent noindent on the preceding line @noindent noindent after space at beginning of line @page page at beginning of line @page After page on it's own line. @@page @page @@noindent @noindent @@refill @refill @@novalidate @novalidate something @@contents @contents something @subheading special Only valid between iftex: @c @@vskip @vskip @@cropmarks @cropmarks Unknown ??? @c @@fillbreak @fillbreak eol @@exdent @exdent line after exdent And now sp: Text line followed by a comment on the same line and another below @sp 1 @sp 2 Text line after the comment followed by a comment @sp 1 Text line after the text line followed by the comment. @sp 2 a number after sp @clickstyle @result A @click{} (result). @c invalid, makeinfo warns about @result needing braces @c others are also invalid @clickstyle @result on the same line A @click{} (result on the same line). @clickstyle @nocmd A @click{} (nocmd). @clickstyle something A @click{} (something). Menu: @menu * node:: * bidule:: * bidule2:: * undefined:: @end menu @node node @chapter chapter @menu * truc:: @end menu @node truc @section section first @@contents @contents line following first content second @@contents @contents line following second content Third content on the following line on his own @contents Line following contents @node bidule @chapter bidule @@shortcontents @shortcontents eol @@shortcontents @shortcontents eol @@summarycontents @summarycontents line following summarycontents @node bidule2 @chapter last @c no ref ignored because of novalidate @ref{machin} @bye texi2html-1.82/test/coverage/res/texi_imbrications/0000755000175000017500000000000011264347123024312 5ustar flichtenheldflichtenheldtexi2html-1.82/test/coverage/res/texi_imbrications/imbrications.passtexi0000644000175000017500000002654011264347123030566 0ustar flichtenheldflichtenheldimbrications.texi(,2) imbrications.texi(,3) @setfilename imbrications.info imbrications.texi(,4) imbrications.texi(,5) @syncodeindex pg cp imbrications.texi(,6) imbrications.texi(,7) @node Top,First node,(dir) imbrications.texi(,8) @top imbrications.texi(,9) @menu imbrications.texi(,10) * First node:: node 1 imbrications.texi(,11) * name:Second node. node 2 imbrications.texi(,12) @end menu imbrications.texi(,13) @c * node in table:: imbrications.texi(,14) @c * node in example:: imbrications.texi(,15) @c * node in flushright:: imbrications.texi(,16) @c *node in defun -> bug imbrications.texi(,17) @node First node imbrications.texi(,18) @chapter first node chapter imbrications.texi(,19) imbrications.texi(,20) @cindex elem imbrications.texi(,21) imbrications.texi(,31) imbrications.texi(,32) @node Second node imbrications.texi(,33) @chapter second imbrications.texi(,34) imbrications.texi(,35) Some text imbrications.texi(,36) imbrications.texi(,37) @deffn Function buffer-end flag imbrications.texi(,38) A nice function imbrications.texi(,39) imbrications.texi(,40) makeinfo accepts a menu within defun but it isn't possible imbrications.texi(,41) to follow it imbrications.texi(,42) imbrications.texi(,43) @menu imbrications.texi(,44) * node within defun menu:: imbrications.texi(,45) @end menu imbrications.texi(,46) @c makeinfo accepts the following but cannot properly close defun imbrications.texi(,47) @c @node node within defun menu imbrications.texi(,48) @c @section within menu imbrications.texi(,49) imbrications.texi(,50) end of the function imbrications.texi(,51) @end deffn imbrications.texi(,52) imbrications.texi(,53) @node node within defun menu imbrications.texi(,54) @section the node is within menu imbrications.texi(,55) imbrications.texi(,56) Test @@option inside @@emph imbrications.texi(,57) Foo @emph{emphasized and referring to @option{--some} option}. imbrications.texi(,58) imbrications.texi(,59) Table imbricated in code:@* imbrications.texi(,60) @code{ imbrications.texi(,61) in code imbrications.texi(,62) @table @emph imbrications.texi(,63) @item line imbrications.texi(,64) text imbrications.texi(,65) @end table imbrications.texi(,66) } imbrications.texi(,67) imbrications.texi(,68) ref with uref within:@* imbrications.texi(,69) @ref{(file)node, cross ref with uref @uref{href://http/myhost.com/index.html,uref1}, title with uref2 @uref{href://http/myhost.com/index2.html,uref2}, info file with uref3 @uref{href://http/myhost.com/index3.html,uref3}, printed manual with uref4 @uref{href://http/myhost.com/index4.html,uref4}} imbrications.texi(,70) imbrications.texi(,71) footnote with code within:@* imbrications.texi(,72) @footnote{ in footnote @code{par1 imbrications.texi(,73) imbrications.texi(,74) par2}} imbrications.texi(,75) imbrications.texi(,76) Refs in samp:@* imbrications.texi(,77) imbrications.texi(,78) Refs without samp: empty section name see @ref{other node}. imbrications.texi(,79) With a chapter: @ref{Second node}. imbrications.texi(,80) imbrications.texi(,81) A ref in samp to a node with empty section name: imbrications.texi(,82) see @samp{@ref{other node}}. imbrications.texi(,83) imbrications.texi(,84) Same but to a regular node associated with a chapter: imbrications.texi(,85) see @samp{@ref{Second node}}. imbrications.texi(,86) imbrications.texi(,87) code with table and example within:@* imbrications.texi(,88) @code{ imbrications.texi(,89) in code imbrications.texi(,90) @table @emph imbrications.texi(,91) @item line imbrications.texi(,92) in code and table imbrications.texi(,93) @example imbrications.texi(,94) in example imbrications.texi(,95) @end example imbrications.texi(,96) @end table imbrications.texi(,97) } imbrications.texi(,98) imbrications.texi(,99) imbrications.texi(,100) @table @bullet imbrications.texi(,101) @item item imbrications.texi(,102) @c @node node in table imbrications.texi(,103) @c @chapter in table imbrications.texi(,104) @end table imbrications.texi(,105) imbrications.texi(,106) @example imbrications.texi(,107) @c @node node in example imbrications.texi(,108) @c @chapter example imbrications.texi(,109) imbrications.texi(,110) an example imbrications.texi(,111) @end example imbrications.texi(,112) imbrications.texi(,113) @cindex other entry imbrications.texi(,114) imbrications.texi(,115) @example imbrications.texi(,116) @html imbrications.texi(,117) imbrications.texi(,118) Some html some code. imbrications.texi(,119) imbrications.texi(,120) @end html imbrications.texi(,121) after html in example imbrications.texi(,122) imbrications.texi(,123) imbrications.texi(,124) two line breaks imbrications.texi(,125) Tex doesn't like math in @@example imbrications.texi(,137) @cindex index in example imbrications.texi(,138) imbrications.texi(,139) Now a content within example imbrications.texi(,140) imbrications.texi(,141) @contents imbrications.texi(,142) imbrications.texi(,143) @printindex cp imbrications.texi(,144) printindex works but cannot be followed in info, in TeX imbrications.texi(,145) the result is quite strange. imbrications.texi(,146) imbrications.texi(,147) and now yes---now and ``so''. imbrications.texi(,148) imbrications.texi(,149) @end example imbrications.texi(,150) after example and now yes---now and ``so''. imbrications.texi(,151) @flushright imbrications.texi(,152) imbrications.texi(,153) is the text imbrications.texi(,154) flushed right ? imbrications.texi(,155) @c @node node in flushright imbrications.texi(,156) @c @chapter flushright imbrications.texi(,157) imbrications.texi(,158) imbrications.texi(,159) @end flushright imbrications.texi(,160) imbrications.texi(,161) @flushright imbrications.texi(,162) @example imbrications.texi(,163) text flushed right and then example imbrications.texi(,164) imbrications.texi(,165) it should be flushed imbrications.texi(,166) @end example imbrications.texi(,167) @end flushright imbrications.texi(,168) imbrications.texi(,169) @example imbrications.texi(,170) @flushright imbrications.texi(,171) example and then text flushed right imbrications.texi(,172) @end flushright imbrications.texi(,173) @end example imbrications.texi(,174) imbrications.texi(,175) @display imbrications.texi(,176) simple displayed text imbrications.texi(,177) @end display imbrications.texi(,178) imbrications.texi(,179) a display within example imbrications.texi(,180) @example imbrications.texi(,181) example imbrications.texi(,182) @display imbrications.texi(,183) display imbrications.texi(,184) @end display imbrications.texi(,185) @end example imbrications.texi(,186) imbrications.texi(,187) @cartouche imbrications.texi(,188) A cartouched text imbrications.texi(,189) @end cartouche imbrications.texi(,190) imbrications.texi(,191) A cartouche within example imbrications.texi(,192) @example imbrications.texi(,193) example imbrications.texi(,194) @cartouche imbrications.texi(,195) A cartouched text imbrications.texi(,196) @end cartouche imbrications.texi(,197) @end example imbrications.texi(,198) imbrications.texi(,199) An example with table, multitable, quotation, enumerate imbrications.texi(,200) @example imbrications.texi(,201) a table within example imbrications.texi(,202) @table @bullet imbrications.texi(,203) @item item imbrications.texi(,204) text imbrications.texi(,205) @end table imbrications.texi(,206) a multitable imbrications.texi(,207) @multitable {a} {b} imbrications.texi(,208) @item beginnin imbrications.texi(,209) imbrications.texi(,210) @item @dots{} imbrications.texi(,211) @tab imbrications.texi(,212) imbrications.texi(,213) a new column no splitting ??????????????????? imbrications.texi(,214) @end multitable imbrications.texi(,215) imbrications.texi(,216) a menu imbrications.texi(,217) @menu imbrications.texi(,218) * node menu:: a node in menu imbrications.texi(,219) imbrications.texi(,220) in menu comment imbrications.texi(,221) html imbrications.texi(,222) @html imbrications.texi(,223) cite me a cite in html imbrications.texi(,224) @end html imbrications.texi(,225) imbrications.texi(,226) A ref in samp in menu comment to a node with empty section name: imbrications.texi(,227) @samp{@ref{other node}}. imbrications.texi(,228) imbrications.texi(,229) Same but to a regular node associated with a chapter: imbrications.texi(,230) @samp{@ref{Second node}}. imbrications.texi(,231) imbrications.texi(,232) * a menu name:other node. imbrications.texi(,233) description of other imbrications.texi(,234) node imbrications.texi(,235) imbrications.texi(,236) @end menu imbrications.texi(,237) imbrications.texi(,238) A quotation imbrications.texi(,239) @quotation imbrications.texi(,240) This is a pre imbrications.texi(,241) quotation imbrications.texi(,242) imbrications.texi(,243) @end quotation imbrications.texi(,244) imbrications.texi(,245) Enumerate imbrications.texi(,246) imbrications.texi(,247) @enumerate imbrications.texi(,248) @item first item imbrications.texi(,249) @item second item imbrications.texi(,250) imbrications.texi(,251) still second imbrications.texi(,252) @end enumerate imbrications.texi(,253) imbrications.texi(,254) @end example imbrications.texi(,255) imbrications.texi(,256) example with deff-like commands imbrications.texi(,257) @example imbrications.texi(,258) deffs imbrications.texi(,259) @defun {my def} args @var{arg} @dots{} imbrications.texi(,260) @defunx {other def} no args imbrications.texi(,261) @deffnx {type} {name} and now the args imbrications.texi(,262) @defvar {variables} variable-name imbrications.texi(,263) imbrications.texi(,264) @defvarx {variables too} other-variable imbrications.texi(,265) THis is the defvar imbrications.texi(,266) imbrications.texi(,267) A table within the def imbrications.texi(,268) @table @asis imbrications.texi(,269) @item item imbrications.texi(,270) text imbrications.texi(,271) imbrications.texi(,272) more text imbrications.texi(,273) @item second item imbrications.texi(,274) @end table imbrications.texi(,275) imbrications.texi(,276) explanation imbrications.texi(,277) @end defvar imbrications.texi(,278) @end deffn imbrications.texi(,279) @end defun imbrications.texi(,280) imbrications.texi(,281) @end example imbrications.texi(,282) imbrications.texi(,283) table within display within example imbrications.texi(,284) @example imbrications.texi(,285) @display imbrications.texi(,286) @table @asis imbrications.texi(,287) @item item imbrications.texi(,288) Line imbrications.texi(,289) @end table imbrications.texi(,290) @end display imbrications.texi(,291) @end example imbrications.texi(,292) imbrications.texi(,293) table within example within display imbrications.texi(,294) @display imbrications.texi(,295) @example imbrications.texi(,296) @table @asis imbrications.texi(,297) @item item imbrications.texi(,298) Line imbrications.texi(,299) @end table imbrications.texi(,300) @end example imbrications.texi(,301) @end display imbrications.texi(,302) imbrications.texi(,303) @node node menu imbrications.texi(,304) @unnumberedsubsec imbrications.texi(,305) @node other node imbrications.texi(,306) @unnumberedsubsec imbrications.texi(,307) imbrications.texi(,308) imbrications.texi(,309) @contents imbrications.texi(,310) @bye texi2html-1.82/test/coverage/res/texi_imbrications/imbrications.texi0000644000175000017500000001131111264347123027665 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename imbrications.info @syncodeindex pg cp @node Top,First node,(dir) @top @menu * First node:: node 1 * name:Second node. node 2 @end menu @c * node in table:: @c * node in example:: @c * node in flushright:: @c *node in defun -> bug @node First node @chapter first node chapter @cindex elem @node Second node @chapter second Some text @deffn Function buffer-end flag A nice function makeinfo accepts a menu within defun but it isn't possible to follow it @menu * node within defun menu:: @end menu @c makeinfo accepts the following but cannot properly close defun @c @node node within defun menu @c @section within menu end of the function @end deffn @node node within defun menu @section the node is within menu Test @@option inside @@emph Foo @emph{emphasized and referring to @option{--some} option}. Table imbricated in code:@* @code{ in code @table @emph @item line text @end table } ref with uref within:@* @ref{(file)node, cross ref with uref @uref{href://http/myhost.com/index.html,uref1}, title with uref2 @uref{href://http/myhost.com/index2.html,uref2}, info file with uref3 @uref{href://http/myhost.com/index3.html,uref3}, printed manual with uref4 @uref{href://http/myhost.com/index4.html,uref4}} footnote with code within:@* @footnote{ in footnote @code{par1 par2}} Refs in samp:@* Refs without samp: empty section name see @ref{other node}. With a chapter: @ref{Second node}. A ref in samp to a node with empty section name: see @samp{@ref{other node}}. Same but to a regular node associated with a chapter: see @samp{@ref{Second node}}. code with table and example within:@* @code{ in code @table @emph @item line in code and table @example in example @end example @end table } @table @bullet @item item @c @node node in table @c @chapter in table @end table @example @c @node node in example @c @chapter example an example @end example @cindex other entry @example @html Some html some code. @end html after html in example two line breaks Tex doesn't like math in @@example @cindex index in example Now a content within example @contents @printindex cp printindex works but cannot be followed in info, in TeX the result is quite strange. and now yes---now and ``so''. @end example after example and now yes---now and ``so''. @flushright is the text flushed right ? @c @node node in flushright @c @chapter flushright @end flushright @flushright @example text flushed right and then example it should be flushed @end example @end flushright @example @flushright example and then text flushed right @end flushright @end example @display simple displayed text @end display a display within example @example example @display display @end display @end example @cartouche A cartouched text @end cartouche A cartouche within example @example example @cartouche A cartouched text @end cartouche @end example An example with table, multitable, quotation, enumerate @example a table within example @table @bullet @item item text @end table a multitable @multitable {a} {b} @item beginnin @item @dots{} @tab a new column no splitting ??????????????????? @end multitable a menu @menu * node menu:: a node in menu in menu comment html @html cite me a cite in html @end html A ref in samp in menu comment to a node with empty section name: @samp{@ref{other node}}. Same but to a regular node associated with a chapter: @samp{@ref{Second node}}. * a menu name:other node. description of other node @end menu A quotation @quotation This is a pre quotation @end quotation Enumerate @enumerate @item first item @item second item still second @end enumerate @end example example with deff-like commands @example deffs @defun {my def} args @var{arg} @dots{} @defunx {other def} no args @deffnx {type} {name} and now the args @defvar {variables} variable-name @defvarx {variables too} other-variable THis is the defvar A table within the def @table @asis @item item text more text @item second item @end table explanation @end defvar @end deffn @end defun @end example table within display within example @example @display @table @asis @item item Line @end table @end display @end example table within example within display @display @example @table @asis @item item Line @end table @end example @end display @node node menu @unnumberedsubsec @node other node @unnumberedsubsec @contents @bye texi2html-1.82/test/coverage/res/texi_imbrications/imbrications.20000644000175000017500000000025011264347123027055 0ustar flichtenheldflichtenheld** unnumberedsubsec without name (l. 304) ** unnumberedsubsec without name (l. 306) ** unnumberedsubsec without name (l. 304) ** unnumberedsubsec without name (l. 306) texi2html-1.82/test/coverage/res/texi_imbrications/imbrications.passfirst0000644000175000017500000002654011264347123030744 0ustar flichtenheldflichtenheldimbrications.texi(,2) imbrications.texi(,3) @setfilename imbrications.info imbrications.texi(,4) imbrications.texi(,5) @syncodeindex pg cp imbrications.texi(,6) imbrications.texi(,7) @node Top,First node,(dir) imbrications.texi(,8) @top imbrications.texi(,9) @menu imbrications.texi(,10) * First node:: node 1 imbrications.texi(,11) * name:Second node. node 2 imbrications.texi(,12) @end menu imbrications.texi(,13) @c * node in table:: imbrications.texi(,14) @c * node in example:: imbrications.texi(,15) @c * node in flushright:: imbrications.texi(,16) @c *node in defun -> bug imbrications.texi(,17) @node First node imbrications.texi(,18) @chapter first node chapter imbrications.texi(,19) imbrications.texi(,20) @cindex elem imbrications.texi(,21) imbrications.texi(,31) imbrications.texi(,32) @node Second node imbrications.texi(,33) @chapter second imbrications.texi(,34) imbrications.texi(,35) Some text imbrications.texi(,36) imbrications.texi(,37) @deffn Function buffer-end flag imbrications.texi(,38) A nice function imbrications.texi(,39) imbrications.texi(,40) makeinfo accepts a menu within defun but it isn't possible imbrications.texi(,41) to follow it imbrications.texi(,42) imbrications.texi(,43) @menu imbrications.texi(,44) * node within defun menu:: imbrications.texi(,45) @end menu imbrications.texi(,46) @c makeinfo accepts the following but cannot properly close defun imbrications.texi(,47) @c @node node within defun menu imbrications.texi(,48) @c @section within menu imbrications.texi(,49) imbrications.texi(,50) end of the function imbrications.texi(,51) @end deffn imbrications.texi(,52) imbrications.texi(,53) @node node within defun menu imbrications.texi(,54) @section the node is within menu imbrications.texi(,55) imbrications.texi(,56) Test @@option inside @@emph imbrications.texi(,57) Foo @emph{emphasized and referring to @option{--some} option}. imbrications.texi(,58) imbrications.texi(,59) Table imbricated in code:@* imbrications.texi(,60) @code{ imbrications.texi(,61) in code imbrications.texi(,62) @table @emph imbrications.texi(,63) @item line imbrications.texi(,64) text imbrications.texi(,65) @end table imbrications.texi(,66) } imbrications.texi(,67) imbrications.texi(,68) ref with uref within:@* imbrications.texi(,69) @ref{(file)node, cross ref with uref @uref{href://http/myhost.com/index.html,uref1}, title with uref2 @uref{href://http/myhost.com/index2.html,uref2}, info file with uref3 @uref{href://http/myhost.com/index3.html,uref3}, printed manual with uref4 @uref{href://http/myhost.com/index4.html,uref4}} imbrications.texi(,70) imbrications.texi(,71) footnote with code within:@* imbrications.texi(,72) @footnote{ in footnote @code{par1 imbrications.texi(,73) imbrications.texi(,74) par2}} imbrications.texi(,75) imbrications.texi(,76) Refs in samp:@* imbrications.texi(,77) imbrications.texi(,78) Refs without samp: empty section name see @ref{other node}. imbrications.texi(,79) With a chapter: @ref{Second node}. imbrications.texi(,80) imbrications.texi(,81) A ref in samp to a node with empty section name: imbrications.texi(,82) see @samp{@ref{other node}}. imbrications.texi(,83) imbrications.texi(,84) Same but to a regular node associated with a chapter: imbrications.texi(,85) see @samp{@ref{Second node}}. imbrications.texi(,86) imbrications.texi(,87) code with table and example within:@* imbrications.texi(,88) @code{ imbrications.texi(,89) in code imbrications.texi(,90) @table @emph imbrications.texi(,91) @item line imbrications.texi(,92) in code and table imbrications.texi(,93) @example imbrications.texi(,94) in example imbrications.texi(,95) @end example imbrications.texi(,96) @end table imbrications.texi(,97) } imbrications.texi(,98) imbrications.texi(,99) imbrications.texi(,100) @table @bullet imbrications.texi(,101) @item item imbrications.texi(,102) @c @node node in table imbrications.texi(,103) @c @chapter in table imbrications.texi(,104) @end table imbrications.texi(,105) imbrications.texi(,106) @example imbrications.texi(,107) @c @node node in example imbrications.texi(,108) @c @chapter example imbrications.texi(,109) imbrications.texi(,110) an example imbrications.texi(,111) @end example imbrications.texi(,112) imbrications.texi(,113) @cindex other entry imbrications.texi(,114) imbrications.texi(,115) @example imbrications.texi(,116) @html imbrications.texi(,117) imbrications.texi(,118) Some html some code. imbrications.texi(,119) imbrications.texi(,120) @end html imbrications.texi(,121) after html in example imbrications.texi(,122) imbrications.texi(,123) imbrications.texi(,124) two line breaks imbrications.texi(,125) Tex doesn't like math in @@example imbrications.texi(,137) @cindex index in example imbrications.texi(,138) imbrications.texi(,139) Now a content within example imbrications.texi(,140) imbrications.texi(,141) @contents imbrications.texi(,142) imbrications.texi(,143) @printindex cp imbrications.texi(,144) printindex works but cannot be followed in info, in TeX imbrications.texi(,145) the result is quite strange. imbrications.texi(,146) imbrications.texi(,147) and now yes---now and ``so''. imbrications.texi(,148) imbrications.texi(,149) @end example imbrications.texi(,150) after example and now yes---now and ``so''. imbrications.texi(,151) @flushright imbrications.texi(,152) imbrications.texi(,153) is the text imbrications.texi(,154) flushed right ? imbrications.texi(,155) @c @node node in flushright imbrications.texi(,156) @c @chapter flushright imbrications.texi(,157) imbrications.texi(,158) imbrications.texi(,159) @end flushright imbrications.texi(,160) imbrications.texi(,161) @flushright imbrications.texi(,162) @example imbrications.texi(,163) text flushed right and then example imbrications.texi(,164) imbrications.texi(,165) it should be flushed imbrications.texi(,166) @end example imbrications.texi(,167) @end flushright imbrications.texi(,168) imbrications.texi(,169) @example imbrications.texi(,170) @flushright imbrications.texi(,171) example and then text flushed right imbrications.texi(,172) @end flushright imbrications.texi(,173) @end example imbrications.texi(,174) imbrications.texi(,175) @display imbrications.texi(,176) simple displayed text imbrications.texi(,177) @end display imbrications.texi(,178) imbrications.texi(,179) a display within example imbrications.texi(,180) @example imbrications.texi(,181) example imbrications.texi(,182) @display imbrications.texi(,183) display imbrications.texi(,184) @end display imbrications.texi(,185) @end example imbrications.texi(,186) imbrications.texi(,187) @cartouche imbrications.texi(,188) A cartouched text imbrications.texi(,189) @end cartouche imbrications.texi(,190) imbrications.texi(,191) A cartouche within example imbrications.texi(,192) @example imbrications.texi(,193) example imbrications.texi(,194) @cartouche imbrications.texi(,195) A cartouched text imbrications.texi(,196) @end cartouche imbrications.texi(,197) @end example imbrications.texi(,198) imbrications.texi(,199) An example with table, multitable, quotation, enumerate imbrications.texi(,200) @example imbrications.texi(,201) a table within example imbrications.texi(,202) @table @bullet imbrications.texi(,203) @item item imbrications.texi(,204) text imbrications.texi(,205) @end table imbrications.texi(,206) a multitable imbrications.texi(,207) @multitable {a} {b} imbrications.texi(,208) @item beginnin imbrications.texi(,209) imbrications.texi(,210) @item @dots{} imbrications.texi(,211) @tab imbrications.texi(,212) imbrications.texi(,213) a new column no splitting ??????????????????? imbrications.texi(,214) @end multitable imbrications.texi(,215) imbrications.texi(,216) a menu imbrications.texi(,217) @menu imbrications.texi(,218) * node menu:: a node in menu imbrications.texi(,219) imbrications.texi(,220) in menu comment imbrications.texi(,221) html imbrications.texi(,222) @html imbrications.texi(,223) cite me a cite in html imbrications.texi(,224) @end html imbrications.texi(,225) imbrications.texi(,226) A ref in samp in menu comment to a node with empty section name: imbrications.texi(,227) @samp{@ref{other node}}. imbrications.texi(,228) imbrications.texi(,229) Same but to a regular node associated with a chapter: imbrications.texi(,230) @samp{@ref{Second node}}. imbrications.texi(,231) imbrications.texi(,232) * a menu name:other node. imbrications.texi(,233) description of other imbrications.texi(,234) node imbrications.texi(,235) imbrications.texi(,236) @end menu imbrications.texi(,237) imbrications.texi(,238) A quotation imbrications.texi(,239) @quotation imbrications.texi(,240) This is a pre imbrications.texi(,241) quotation imbrications.texi(,242) imbrications.texi(,243) @end quotation imbrications.texi(,244) imbrications.texi(,245) Enumerate imbrications.texi(,246) imbrications.texi(,247) @enumerate imbrications.texi(,248) @item first item imbrications.texi(,249) @item second item imbrications.texi(,250) imbrications.texi(,251) still second imbrications.texi(,252) @end enumerate imbrications.texi(,253) imbrications.texi(,254) @end example imbrications.texi(,255) imbrications.texi(,256) example with deff-like commands imbrications.texi(,257) @example imbrications.texi(,258) deffs imbrications.texi(,259) @defun {my def} args @var{arg} @dots{} imbrications.texi(,260) @defunx {other def} no args imbrications.texi(,261) @deffnx {type} {name} and now the args imbrications.texi(,262) @defvar {variables} variable-name imbrications.texi(,263) imbrications.texi(,264) @defvarx {variables too} other-variable imbrications.texi(,265) THis is the defvar imbrications.texi(,266) imbrications.texi(,267) A table within the def imbrications.texi(,268) @table @asis imbrications.texi(,269) @item item imbrications.texi(,270) text imbrications.texi(,271) imbrications.texi(,272) more text imbrications.texi(,273) @item second item imbrications.texi(,274) @end table imbrications.texi(,275) imbrications.texi(,276) explanation imbrications.texi(,277) @end defvar imbrications.texi(,278) @end deffn imbrications.texi(,279) @end defun imbrications.texi(,280) imbrications.texi(,281) @end example imbrications.texi(,282) imbrications.texi(,283) table within display within example imbrications.texi(,284) @example imbrications.texi(,285) @display imbrications.texi(,286) @table @asis imbrications.texi(,287) @item item imbrications.texi(,288) Line imbrications.texi(,289) @end table imbrications.texi(,290) @end display imbrications.texi(,291) @end example imbrications.texi(,292) imbrications.texi(,293) table within example within display imbrications.texi(,294) @display imbrications.texi(,295) @example imbrications.texi(,296) @table @asis imbrications.texi(,297) @item item imbrications.texi(,298) Line imbrications.texi(,299) @end table imbrications.texi(,300) @end example imbrications.texi(,301) @end display imbrications.texi(,302) imbrications.texi(,303) @node node menu imbrications.texi(,304) @unnumberedsubsec imbrications.texi(,305) @node other node imbrications.texi(,306) @unnumberedsubsec imbrications.texi(,307) imbrications.texi(,308) imbrications.texi(,309) @contents imbrications.texi(,310) @bye texi2html-1.82/test/coverage/res/comments/0000755000175000017500000000000011264347123022423 5ustar flichtenheldflichtenheldtexi2html-1.82/test/coverage/res/comments/comments.20000644000175000017500000000013711264347123024334 0ustar flichtenheldflichtenheld** Encoding name unknown: bad *** @clickstyle should only accept a macro as argument (l. 212) texi2html-1.82/test/coverage/res/comments/comments.html0000644000175000017500000003753011264347123025146 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Top

    Comment like:

    Text line followed by a comment on the same line and another below Text line after the comment followed by a comment Text line after the text line followed by the comment.

    Comment at the end of the line

    Example with comments 2 lines

     
    line second line 

    Example with comments 1 line

     
    line 

    No comments

     
    line 
    

    The same but with oddfooting instead of comment: Text line followed by a comment on the same line and another below Text line after the comment followed by a comment Text line after the text line followed by the comment.

    @pagesizes @afourpaper @smallbook @headings @oddfooting @everyheading @everyfooting @evenheading @evenfooting @oddheading @need @need @setchapternewpage @raisesections @lowersections @kbdinputstyle code something @afourpaper @afourlatex @afourwide

    @definfoenclose phoo,//,\\ //bar\\

    @definfoenclose phi,:,:

    :bar:

    very strong

    (strong: is it really strong? :)

    Makeinfo ignore @kbdinputstyle:

    truc

     
    example
    

    ignore arg

    Commands doesn’t accept anything after a non numerical arg on the line and ignore things after a numerical arg

    @paragraphindent asis @paragraphindent 0 @paragraphindent none @paragraphindent 4 @firstparagraphindent none @exampleindent 6 @exampleindent 6 @footnotestyle @footnotestyle

    Special arg for documentencoding. makeinfo complains, not tex

    @documentencoding encoding name @frenchspacing @frenchspacing @fonttextsize @everyheadingmarks on line following everyheadingmarks false aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

    true aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

    command removed

    And now finalout: Text line followed by finalout on the same line and another below Text line after the finalout followed by a fianlout Text line after the text line followed by the finalout.

    Test text after finalout a word after finalout Line after finalout

    @page @noindent @refill something

    noindent at beginning of line noindent on the preceding line noindent after space at beginning of line page at beginning of line After page on it’s own line.

    @page @noindent @refill @novalidate something

    @contents something

    special

    Only valid between iftex: Unknown ???

    @exdent line after exdent

    And now sp: Text line followed by a comment on the same line and another below


    Text line after the comment followed by a comment
    Text line after the text line followed by the comment.

    a number after sp

    A ⇒ (result).

    A ⇒ (result on the same line).

    A (nocmd).

    A (something).

    Menu:


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. chapter


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 section

    first @contents line following first content second @contents line following second content Third content on the following line on his own Line following contents


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. bidule

    @shortcontents eol @shortcontents eol @summarycontents line following summarycontents


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. last

    machin


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    Short Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/coverage/res/float/0000755000175000017500000000000011264347123021703 5ustar flichtenheldflichtenheldtexi2html-1.82/test/coverage/res/float/float.20000644000175000017500000000000011264347123023061 0ustar flichtenheldflichtenheldtexi2html-1.82/test/coverage/res/float/float.html0000644000175000017500000006511611264347123023707 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Test floats

    A list of floats at the begining.

    Text 1

    TeX and téîan_url AND it is @verb  a word !@ Æ.

    Text 1.1

    Text in chapter

    Text 1.2

    An example of float caption... 2 An example 2.

     
    example 2
    

    A table 2.

    truc 2

    line 2

    A multitable 2.

    truc 2bidule
    truc 2bidule

    An index entry 2

    An itemize 2.

    • - truc 2 line

    A ref 2. See section xref Text with features caption. A footnote 2. (1).

    TeX and téîan_url AND it is @verb  a word !@ Æ.

    Text 1.3
    Text 5

    unnumbered float

    Text 6

    Section within unnumbered

    Text 2.1

    Chapter with subsec

    Text 2.2

    unnumbered sec float

    After the listoffloats.

    An example of float ...

    An example.

     
    example
    

    A multitable.

    trucbidule
    trucbidule

    An index entry

    A table.

    truc

    line

    An itemize.

    • - truc line

    A ref. See section xref Text with features. A footnote. (1).

    TeX and téîan_url AND it is @verb  a word !@ Æ.

    Text 1: An example of float caption... An example.

     
    example
    

    A table.

    truc

    line

    A multitable.

    truc bidule
    truc bidule

    An index entry

    An itemize.

    • - truc line

    A ref. See section xref Text with features caption. A footnote. (2).

    TeX and téîan_url AND it is @verb  a word !@ Æ.

    No label but caption and shortcaption.

    Text: No label

    No type but caption and shortcaption.

    1: No type

    No type but label and no caption nor shortcaption.

    2

    No label, no type, no caption no shortcaption.

    No label, no type, but caption and shortcaption.

    No label, no type, but caption and shortcaption.

    Second float with no type.

    3: No type 2

    A warning

    Warning 1: A warning


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. A chapter

    Text in chapter

    Text 1.1: Text in chapter

    Float text of a float with a lot of features.

    Text 1.2: An example of float caption... 2 An example 2.

     
    example 2
    

    A table 2.

    truc 2

    line 2

    A multitable 2.

    truc 2 bidule
    truc 2 bidule

    An index entry 2

    An itemize 2.

    • - truc 2 line

    A ref 2. See section xref Text with features caption. A footnote 2. (3).

    TeX and téîan_url AND it is @verb  a word !@ Æ.

    A théorème

    théorème 1.1: A théorème

    float with no type.

    1.1: No type in chapter

    A warning

    Warning 1.1: A warning in chapter


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 A section

    A text in float no caption a label a type.

    Text 1.3


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Unnumbered

    unnum

    Text 5: unnumbered float

    float with no type.

    5: No type in unnumbered


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2 Section within unnumbered

    Section within unnumbered

    Text 6: Section within unnumbered


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. Chapter with unnumbsubsec

    Chap

    Text 2.1: Chapter with subsec


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    unnumbered sec

    Chap

    Text 2.2: unnumbered sec float

    float with no type.

    2.1: No type in unnumbered subsec in chapter


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    list of floats

    See text in section. And (see text in chapter). See text with a lot of features.

    And now a ref (without manual or printed manual) title.

    And now a ref (with manual without printed manual) cross ref: (manual)text with a lot of features.

    And now a ref (without manual with a printed manual) section ‘title’ in printed manual title.

    A ref to float without type label but no type.

    Text 1

    TeX and téîan_url AND it is @verb  a word !@ Æ.

    Text 1.1

    Text in chapter

    Text 1.2

    An example of float caption... 2 An example 2.

     
    example 2
    

    A table 2.

    truc 2

    line 2

    A multitable 2.

    truc 2bidule
    truc 2bidule

    An index entry 2

    An itemize 2.

    • - truc 2 line

    A ref 2. See section xref Text with features caption. A footnote 2. (1).

    TeX and téîan_url AND it is @verb  a word !@ Æ.

    Text 1.3
    Text 5

    unnumbered float

    Text 6

    Section within unnumbered

    Text 2.1

    Chapter with subsec

    Text 2.2

    unnumbered sec float

    théorème 1.1

    A théorème

    Jump to:   F  
    Index Entry Section

    F
    float exampleTest floats
    float example in captionTest floats
    float example in caption 21. A chapter

    Jump to:   F  

    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)

    footnote Text with features

    (2)

    footnote Text with features caption

    (3)

    footnote Text with features caption 2


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/coverage/res/texi_float/0000755000175000017500000000000011264347123022734 5ustar flichtenheldflichtenheldtexi2html-1.82/test/coverage/res/texi_float/float.texi0000644000175000017500000001300311264347123024731 0ustar flichtenheldflichtenheld\input texinfo.tex @c -*-texinfo-*- @setfilename float.info @node Top @top Test floats A list of floats at the begining. @listoffloats Text After the listoffloats. @menu * chapter:: * Unnumbered:: * Chapter with unnumbsubsec:: * list of floats:: @end menu @float Text, text with a lot of features An example of float @enddots{} @c makeinfo --docbook segfaults An example. @example example @end example A multitable. @multitable {truc} {bidule} @item truc @tab bidule @item truc @tab bidule @end multitable An index entry @cindex float example A table. @table @emph @item truc line @end table An itemize. @itemize @minus @item truc line @end itemize A ref. @xref{Top,xref Text with features}. A footnote. @footnote{footnote Text with features}. @TeX{} and @emph{@b{t@'e@^{@dotless{i}}}@url{an_url}} @sc{and} @verb{!it is @verb!} @ a wo@-rd @!@@ @AE{}. @caption{ An example of float caption@enddots{} An example. @example example @end example @anchor{Anchor in caption} A table. @table @emph @item truc line @end table A multitable. @multitable {truc} {bidule} @item truc @tab bidule @item truc @tab bidule @end multitable An index entry @cindex float example in caption An itemize. @itemize @minus @item truc line @end itemize A ref. @xref{Top,xref Text with features caption}. A footnote. @footnote{footnote Text with features caption}. @TeX{} and @emph{@b{t@'e@^{@dotless{i}}}@url{an_url}} @sc{and} @verb{!it is @verb!} @ a wo@-rd @!@@ @AE{}. } @shortcaption{@TeX{} and @emph{@b{t@'e@^{@dotless{i}}}@url{an_url}} @sc{and} @verb{!it is @verb!} @ a wo@-rd @!@@ @AE{}.} @end float @float Text No label but caption and shortcaption. @caption{No label} @shortcaption{No label} @end float @float ,label but no type No type but caption and shortcaption. @caption{No type} @shortcaption{No type} @end float @float ,label but no type and no caption No type but label and no caption nor shortcaption. @end float @float No label, no type, no caption no shortcaption. @end float @float No label, no type, but caption and shortcaption. @caption{No label, no type, but caption and shortcaption.} @shortcaption{No label, no type, but caption and shortcaption.} @end float @float ,label but no type 2 Second float with no type. @caption{No type 2} @shortcaption{No type 2} @end float @float Warning, warning in top A warning @caption{A warning} @shortcaption{A warning} @end float @node chapter @chapter A chapter @float Text, text in chapter Text in chapter @caption{Text in chapter} @end float @float Text, float with a lot of features and no shortcaption Float text of a float with a lot of features. @caption{ An example of float caption@enddots{} 2 An example 2. @example example 2 @end example A table 2. @table @emph @item truc 2 line 2 @end table A multitable 2. @multitable {truc} {bidule} @item truc 2 @tab bidule @item truc 2 @tab bidule @end multitable An index entry 2 @cindex float example in caption 2 An itemize 2. @itemize @minus @item truc 2 line @end itemize @anchor{Anchor in caption 2} A ref 2. @xref{Top,xref Text with features caption}. A footnote 2. @footnote{footnote Text with features caption 2}. @TeX{} and @emph{@b{t@'e@^{@dotless{i}}}@url{an_url}} @sc{and} @verb{!it is @verb!} @ a wo@-rd @!@@ @AE{}. } @end float @float th@'eor@`eme, theoreme A th@'eor@`eme @caption{A th@'eor@`eme} @end float @float ,label but no type in chapter float with no type. @caption{No type in chapter} @shortcaption{No type in chapter} @end float @float Warning, warning in chapter A warning @caption{A warning in chapter} @shortcaption{A warning in chapter} @end float @menu * section:: @end menu @node section @section A section @float Text, text in section A text in float no caption a label a type. @end float @node Unnumbered @unnumbered Unnumbered @menu * Section within unnumbered:: @end menu @float Text, unnumbered float unnum @shortcaption{unnumbered float} @caption{unnumbered float} @end float @float ,label but no type in unnumbered float with no type. @caption{No type in unnumbered} @shortcaption{No type in unnumbered} @end float @node Section within unnumbered @section Section within unnumbered @float Text, Section within unnumbered float Section within unnumbered @shortcaption{Section within unnumbered} @caption{Section within unnumbered} @end float @node Chapter with unnumbsubsec @chapter Chapter with unnumbsubsec @menu * unnumbered sec:: @end menu @float Text, Chapter with subsec float Chap @shortcaption{Chapter with subsec} @caption{Chapter with subsec} @end float @node unnumbered sec @unnumberedsec unnumbered sec @float Text, unnumbered sec float Chap @shortcaption{unnumbered sec float} @caption{unnumbered sec float} @end float @float ,label but no type in unnumbered subsec in chapter float with no type. @caption{No type in unnumbered subsec in chapter} @shortcaption{No type in unnumbered subsec in chapter} @end float @node list of floats @unnumbered list of floats See @ref{text in section}. And (@pxref{text in chapter}). @xref{text with a lot of features}. And now a ref (without manual or printed manual) @ref{text with a lot of features, cross ref, title}. And now a ref (with manual without printed manual) @ref{text with a lot of features, cross ref, title, manual}. And now a ref (without manual with a printed manual) @ref{text with a lot of features, cross ref, title,, printed manual title}. A ref to float without type @ref{label but no type}. @listoffloats Text @listoffloats th@'eor@`eme @printindex cp @bye texi2html-1.82/test/coverage/res/texi_float/float.passtexi0000644000175000017500000002501211264347123025623 0ustar flichtenheldflichtenheldfloat.texi(,2) float.texi(,3) @setfilename float.info float.texi(,4) float.texi(,5) @node Top float.texi(,6) @top Test floats float.texi(,7) float.texi(,8) A list of floats at the begining. float.texi(,9) @listoffloats Text float.texi(,10) float.texi(,11) After the listoffloats. float.texi(,12) float.texi(,13) @menu float.texi(,14) * chapter:: float.texi(,15) * Unnumbered:: float.texi(,16) * Chapter with unnumbsubsec:: float.texi(,17) * list of floats:: float.texi(,18) @end menu float.texi(,19) float.texi(,20) @float Text, text with a lot of features float.texi(,21) An example of float @enddots{} float.texi(,22) float.texi(,23) @c makeinfo --docbook segfaults float.texi(,25) An example. float.texi(,26) @example float.texi(,27) example float.texi(,28) @end example float.texi(,29) float.texi(,30) A multitable. float.texi(,31) @multitable {truc} {bidule} float.texi(,32) @item truc @tab bidule float.texi(,33) @item truc @tab bidule float.texi(,34) @end multitable float.texi(,36) float.texi(,37) An index entry float.texi(,38) @cindex float example float.texi(,39) float.texi(,40) A table. float.texi(,41) @table @emph float.texi(,42) @item truc float.texi(,43) line float.texi(,44) @end table float.texi(,45) float.texi(,46) An itemize. float.texi(,47) @itemize @minus float.texi(,48) @item truc float.texi(,49) line float.texi(,50) @end itemize float.texi(,51) float.texi(,52) A ref. float.texi(,53) @xref{Top,xref Text with features}. float.texi(,54) A footnote. float.texi(,55) @footnote{footnote Text with features}. float.texi(,56) float.texi(,57) @TeX{} and @emph{@b{t@'e@^{@dotless{i}}}@url{an_url}} @sc{and} @verb{!it is @verb!} @ a wo@-rd @!@@ @AE{}. float.texi(,58) float.texi(,59) @caption{ An example of float caption@enddots{} float.texi(,60) An example. float.texi(,61) @example float.texi(,62) example float.texi(,63) @end example float.texi(,64) float.texi(,65) @anchor{Anchor in caption} float.texi(,66) float.texi(,67) A table. float.texi(,68) @table @emph float.texi(,69) @item truc float.texi(,70) line float.texi(,71) @end table float.texi(,72) float.texi(,73) A multitable. float.texi(,74) @multitable {truc} {bidule} float.texi(,75) @item truc @tab bidule float.texi(,76) @item truc @tab bidule float.texi(,77) @end multitable float.texi(,78) An index entry float.texi(,79) @cindex float example in caption float.texi(,80) float.texi(,81) An itemize. float.texi(,82) @itemize @minus float.texi(,83) @item truc float.texi(,84) line float.texi(,85) @end itemize float.texi(,86) float.texi(,87) A ref. float.texi(,88) @xref{Top,xref Text with features caption}. float.texi(,89) A footnote. float.texi(,90) @footnote{footnote Text with features caption}. float.texi(,91) float.texi(,92) @TeX{} and @emph{@b{t@'e@^{@dotless{i}}}@url{an_url}} @sc{and} @verb{!it is @verb!} @ a wo@-rd @!@@ @AE{}. float.texi(,93) } float.texi(,94) float.texi(,95) @shortcaption{@TeX{} and @emph{@b{t@'e@^{@dotless{i}}}@url{an_url}} @sc{and} @verb{!it is @verb!} @ a wo@-rd @!@@ @AE{}.} float.texi(,96) float.texi(,97) @end float float.texi(,98) float.texi(,99) float.texi(,100) @float Text float.texi(,101) No label but caption and shortcaption. float.texi(,102) float.texi(,103) @caption{No label} float.texi(,104) @shortcaption{No label} float.texi(,105) @end float float.texi(,106) float.texi(,107) @float ,label but no type float.texi(,108) No type but caption and shortcaption. float.texi(,109) float.texi(,110) @caption{No type} float.texi(,111) @shortcaption{No type} float.texi(,112) @end float float.texi(,113) float.texi(,114) float.texi(,115) @float ,label but no type and no caption float.texi(,116) No type but label and no caption nor shortcaption. float.texi(,117) float.texi(,118) @end float float.texi(,119) float.texi(,120) float.texi(,121) @float float.texi(,122) No label, no type, no caption no shortcaption. float.texi(,123) float.texi(,124) @end float float.texi(,125) float.texi(,126) @float float.texi(,127) No label, no type, but caption and shortcaption. float.texi(,128) @caption{No label, no type, but caption and shortcaption.} float.texi(,129) @shortcaption{No label, no type, but caption and shortcaption.} float.texi(,130) @end float float.texi(,131) float.texi(,132) float.texi(,133) float.texi(,134) @float ,label but no type 2 float.texi(,135) Second float with no type. float.texi(,136) float.texi(,137) @caption{No type 2} float.texi(,138) @shortcaption{No type 2} float.texi(,139) @end float float.texi(,140) float.texi(,141) @float Warning, warning in top float.texi(,142) A warning float.texi(,143) float.texi(,144) @caption{A warning} float.texi(,145) @shortcaption{A warning} float.texi(,146) @end float float.texi(,147) float.texi(,148) @node chapter float.texi(,149) @chapter A chapter float.texi(,150) float.texi(,151) @float Text, text in chapter float.texi(,152) Text in chapter float.texi(,153) float.texi(,154) @caption{Text in chapter} float.texi(,155) @end float float.texi(,156) float.texi(,157) @float Text, float with a lot of features and no shortcaption float.texi(,158) float.texi(,159) Float text of a float with a lot of features. float.texi(,160) float.texi(,161) @caption{ An example of float caption@enddots{} 2 float.texi(,162) An example 2. float.texi(,163) @example float.texi(,164) example 2 float.texi(,165) @end example float.texi(,166) float.texi(,167) A table 2. float.texi(,168) @table @emph float.texi(,169) @item truc 2 float.texi(,170) line 2 float.texi(,171) @end table float.texi(,172) float.texi(,173) A multitable 2. float.texi(,174) @multitable {truc} {bidule} float.texi(,175) @item truc 2 @tab bidule float.texi(,176) @item truc 2 @tab bidule float.texi(,177) @end multitable float.texi(,178) An index entry 2 float.texi(,179) @cindex float example in caption 2 float.texi(,180) float.texi(,181) An itemize 2. float.texi(,182) @itemize @minus float.texi(,183) @item truc 2 float.texi(,184) line float.texi(,185) @end itemize float.texi(,186) float.texi(,187) @anchor{Anchor in caption 2} float.texi(,188) float.texi(,189) A ref 2. float.texi(,190) @xref{Top,xref Text with features caption}. float.texi(,191) A footnote 2. float.texi(,192) @footnote{footnote Text with features caption 2}. float.texi(,193) float.texi(,194) @TeX{} and @emph{@b{t@'e@^{@dotless{i}}}@url{an_url}} @sc{and} @verb{!it is @verb!} @ a wo@-rd @!@@ @AE{}. float.texi(,195) } float.texi(,196) float.texi(,197) @end float float.texi(,198) float.texi(,199) @float th@'eor@`eme, theoreme float.texi(,200) A th@'eor@`eme float.texi(,201) float.texi(,202) @caption{A th@'eor@`eme} float.texi(,203) @end float float.texi(,204) float.texi(,205) @float ,label but no type in chapter float.texi(,206) float with no type. float.texi(,207) float.texi(,208) @caption{No type in chapter} float.texi(,209) @shortcaption{No type in chapter} float.texi(,210) @end float float.texi(,211) float.texi(,212) @float Warning, warning in chapter float.texi(,213) A warning float.texi(,214) float.texi(,215) @caption{A warning in chapter} float.texi(,216) @shortcaption{A warning in chapter} float.texi(,217) @end float float.texi(,218) float.texi(,219) @menu float.texi(,220) * section:: float.texi(,221) @end menu float.texi(,222) float.texi(,223) @node section float.texi(,224) @section A section float.texi(,225) float.texi(,226) @float Text, text in section float.texi(,227) float.texi(,228) A text in float no caption a label a type. float.texi(,229) float.texi(,230) @end float float.texi(,231) float.texi(,232) @node Unnumbered float.texi(,233) @unnumbered Unnumbered float.texi(,234) float.texi(,235) @menu float.texi(,236) * Section within unnumbered:: float.texi(,237) @end menu float.texi(,238) @float Text, unnumbered float float.texi(,239) unnum float.texi(,240) @shortcaption{unnumbered float} float.texi(,241) @caption{unnumbered float} float.texi(,242) @end float float.texi(,243) float.texi(,244) @float ,label but no type in unnumbered float.texi(,245) float with no type. float.texi(,246) float.texi(,247) @caption{No type in unnumbered} float.texi(,248) @shortcaption{No type in unnumbered} float.texi(,249) @end float float.texi(,250) float.texi(,251) float.texi(,252) @node Section within unnumbered float.texi(,253) @section Section within unnumbered float.texi(,254) float.texi(,255) float.texi(,256) @float Text, Section within unnumbered float float.texi(,257) Section within unnumbered float.texi(,258) @shortcaption{Section within unnumbered} float.texi(,259) @caption{Section within unnumbered} float.texi(,260) @end float float.texi(,261) float.texi(,262) @node Chapter with unnumbsubsec float.texi(,263) @chapter Chapter with unnumbsubsec float.texi(,264) float.texi(,265) @menu float.texi(,266) * unnumbered sec:: float.texi(,267) @end menu float.texi(,268) @float Text, Chapter with subsec float float.texi(,269) Chap float.texi(,270) @shortcaption{Chapter with subsec} float.texi(,271) @caption{Chapter with subsec} float.texi(,272) @end float float.texi(,273) float.texi(,274) @node unnumbered sec float.texi(,275) @unnumberedsec unnumbered sec float.texi(,276) float.texi(,277) @float Text, unnumbered sec float float.texi(,278) Chap float.texi(,279) @shortcaption{unnumbered sec float} float.texi(,280) @caption{unnumbered sec float} float.texi(,281) @end float float.texi(,282) float.texi(,283) @float ,label but no type in unnumbered subsec in chapter float.texi(,284) float with no type. float.texi(,285) float.texi(,286) @caption{No type in unnumbered subsec in chapter} float.texi(,287) @shortcaption{No type in unnumbered subsec in chapter} float.texi(,288) @end float float.texi(,289) float.texi(,290) @node list of floats float.texi(,291) @unnumbered list of floats float.texi(,292) float.texi(,293) See @ref{text in section}. float.texi(,294) And (@pxref{text in chapter}). float.texi(,295) @xref{text with a lot of features}. float.texi(,296) float.texi(,297) And now a ref (without manual or printed manual) float.texi(,298) @ref{text with a lot of features, cross ref, title}. float.texi(,299) float.texi(,300) And now a ref (with manual without printed manual) float.texi(,301) @ref{text with a lot of features, cross ref, title, manual}. float.texi(,302) float.texi(,303) And now a ref (without manual with a printed manual) float.texi(,304) @ref{text with a lot of features, cross ref, title,, printed manual title}. float.texi(,305) float.texi(,306) A ref to float without type @ref{label but no type}. float.texi(,307) float.texi(,308) @listoffloats Text float.texi(,309) @listoffloats th@'eor@`eme float.texi(,310) float.texi(,311) @printindex cp float.texi(,312) float.texi(,313) @bye texi2html-1.82/test/coverage/res/texi_float/float.passfirst0000644000175000017500000002501211264347123026001 0ustar flichtenheldflichtenheldfloat.texi(,2) float.texi(,3) @setfilename float.info float.texi(,4) float.texi(,5) @node Top float.texi(,6) @top Test floats float.texi(,7) float.texi(,8) A list of floats at the begining. float.texi(,9) @listoffloats Text float.texi(,10) float.texi(,11) After the listoffloats. float.texi(,12) float.texi(,13) @menu float.texi(,14) * chapter:: float.texi(,15) * Unnumbered:: float.texi(,16) * Chapter with unnumbsubsec:: float.texi(,17) * list of floats:: float.texi(,18) @end menu float.texi(,19) float.texi(,20) @float Text, text with a lot of features float.texi(,21) An example of float @enddots{} float.texi(,22) float.texi(,23) @c makeinfo --docbook segfaults float.texi(,25) An example. float.texi(,26) @example float.texi(,27) example float.texi(,28) @end example float.texi(,29) float.texi(,30) A multitable. float.texi(,31) @multitable {truc} {bidule} float.texi(,32) @item truc @tab bidule float.texi(,33) @item truc @tab bidule float.texi(,34) @end multitable float.texi(,36) float.texi(,37) An index entry float.texi(,38) @cindex float example float.texi(,39) float.texi(,40) A table. float.texi(,41) @table @emph float.texi(,42) @item truc float.texi(,43) line float.texi(,44) @end table float.texi(,45) float.texi(,46) An itemize. float.texi(,47) @itemize @minus float.texi(,48) @item truc float.texi(,49) line float.texi(,50) @end itemize float.texi(,51) float.texi(,52) A ref. float.texi(,53) @xref{Top,xref Text with features}. float.texi(,54) A footnote. float.texi(,55) @footnote{footnote Text with features}. float.texi(,56) float.texi(,57) @TeX{} and @emph{@b{t@'e@^{@dotless{i}}}@url{an_url}} @sc{and} @verb{!it is @verb!} @ a wo@-rd @!@@ @AE{}. float.texi(,58) float.texi(,59) @caption{ An example of float caption@enddots{} float.texi(,60) An example. float.texi(,61) @example float.texi(,62) example float.texi(,63) @end example float.texi(,64) float.texi(,65) @anchor{Anchor in caption} float.texi(,66) float.texi(,67) A table. float.texi(,68) @table @emph float.texi(,69) @item truc float.texi(,70) line float.texi(,71) @end table float.texi(,72) float.texi(,73) A multitable. float.texi(,74) @multitable {truc} {bidule} float.texi(,75) @item truc @tab bidule float.texi(,76) @item truc @tab bidule float.texi(,77) @end multitable float.texi(,78) An index entry float.texi(,79) @cindex float example in caption float.texi(,80) float.texi(,81) An itemize. float.texi(,82) @itemize @minus float.texi(,83) @item truc float.texi(,84) line float.texi(,85) @end itemize float.texi(,86) float.texi(,87) A ref. float.texi(,88) @xref{Top,xref Text with features caption}. float.texi(,89) A footnote. float.texi(,90) @footnote{footnote Text with features caption}. float.texi(,91) float.texi(,92) @TeX{} and @emph{@b{t@'e@^{@dotless{i}}}@url{an_url}} @sc{and} @verb{!it is @verb!} @ a wo@-rd @!@@ @AE{}. float.texi(,93) } float.texi(,94) float.texi(,95) @shortcaption{@TeX{} and @emph{@b{t@'e@^{@dotless{i}}}@url{an_url}} @sc{and} @verb{!it is @verb!} @ a wo@-rd @!@@ @AE{}.} float.texi(,96) float.texi(,97) @end float float.texi(,98) float.texi(,99) float.texi(,100) @float Text float.texi(,101) No label but caption and shortcaption. float.texi(,102) float.texi(,103) @caption{No label} float.texi(,104) @shortcaption{No label} float.texi(,105) @end float float.texi(,106) float.texi(,107) @float ,label but no type float.texi(,108) No type but caption and shortcaption. float.texi(,109) float.texi(,110) @caption{No type} float.texi(,111) @shortcaption{No type} float.texi(,112) @end float float.texi(,113) float.texi(,114) float.texi(,115) @float ,label but no type and no caption float.texi(,116) No type but label and no caption nor shortcaption. float.texi(,117) float.texi(,118) @end float float.texi(,119) float.texi(,120) float.texi(,121) @float float.texi(,122) No label, no type, no caption no shortcaption. float.texi(,123) float.texi(,124) @end float float.texi(,125) float.texi(,126) @float float.texi(,127) No label, no type, but caption and shortcaption. float.texi(,128) @caption{No label, no type, but caption and shortcaption.} float.texi(,129) @shortcaption{No label, no type, but caption and shortcaption.} float.texi(,130) @end float float.texi(,131) float.texi(,132) float.texi(,133) float.texi(,134) @float ,label but no type 2 float.texi(,135) Second float with no type. float.texi(,136) float.texi(,137) @caption{No type 2} float.texi(,138) @shortcaption{No type 2} float.texi(,139) @end float float.texi(,140) float.texi(,141) @float Warning, warning in top float.texi(,142) A warning float.texi(,143) float.texi(,144) @caption{A warning} float.texi(,145) @shortcaption{A warning} float.texi(,146) @end float float.texi(,147) float.texi(,148) @node chapter float.texi(,149) @chapter A chapter float.texi(,150) float.texi(,151) @float Text, text in chapter float.texi(,152) Text in chapter float.texi(,153) float.texi(,154) @caption{Text in chapter} float.texi(,155) @end float float.texi(,156) float.texi(,157) @float Text, float with a lot of features and no shortcaption float.texi(,158) float.texi(,159) Float text of a float with a lot of features. float.texi(,160) float.texi(,161) @caption{ An example of float caption@enddots{} 2 float.texi(,162) An example 2. float.texi(,163) @example float.texi(,164) example 2 float.texi(,165) @end example float.texi(,166) float.texi(,167) A table 2. float.texi(,168) @table @emph float.texi(,169) @item truc 2 float.texi(,170) line 2 float.texi(,171) @end table float.texi(,172) float.texi(,173) A multitable 2. float.texi(,174) @multitable {truc} {bidule} float.texi(,175) @item truc 2 @tab bidule float.texi(,176) @item truc 2 @tab bidule float.texi(,177) @end multitable float.texi(,178) An index entry 2 float.texi(,179) @cindex float example in caption 2 float.texi(,180) float.texi(,181) An itemize 2. float.texi(,182) @itemize @minus float.texi(,183) @item truc 2 float.texi(,184) line float.texi(,185) @end itemize float.texi(,186) float.texi(,187) @anchor{Anchor in caption 2} float.texi(,188) float.texi(,189) A ref 2. float.texi(,190) @xref{Top,xref Text with features caption}. float.texi(,191) A footnote 2. float.texi(,192) @footnote{footnote Text with features caption 2}. float.texi(,193) float.texi(,194) @TeX{} and @emph{@b{t@'e@^{@dotless{i}}}@url{an_url}} @sc{and} @verb{!it is @verb!} @ a wo@-rd @!@@ @AE{}. float.texi(,195) } float.texi(,196) float.texi(,197) @end float float.texi(,198) float.texi(,199) @float th@'eor@`eme, theoreme float.texi(,200) A th@'eor@`eme float.texi(,201) float.texi(,202) @caption{A th@'eor@`eme} float.texi(,203) @end float float.texi(,204) float.texi(,205) @float ,label but no type in chapter float.texi(,206) float with no type. float.texi(,207) float.texi(,208) @caption{No type in chapter} float.texi(,209) @shortcaption{No type in chapter} float.texi(,210) @end float float.texi(,211) float.texi(,212) @float Warning, warning in chapter float.texi(,213) A warning float.texi(,214) float.texi(,215) @caption{A warning in chapter} float.texi(,216) @shortcaption{A warning in chapter} float.texi(,217) @end float float.texi(,218) float.texi(,219) @menu float.texi(,220) * section:: float.texi(,221) @end menu float.texi(,222) float.texi(,223) @node section float.texi(,224) @section A section float.texi(,225) float.texi(,226) @float Text, text in section float.texi(,227) float.texi(,228) A text in float no caption a label a type. float.texi(,229) float.texi(,230) @end float float.texi(,231) float.texi(,232) @node Unnumbered float.texi(,233) @unnumbered Unnumbered float.texi(,234) float.texi(,235) @menu float.texi(,236) * Section within unnumbered:: float.texi(,237) @end menu float.texi(,238) @float Text, unnumbered float float.texi(,239) unnum float.texi(,240) @shortcaption{unnumbered float} float.texi(,241) @caption{unnumbered float} float.texi(,242) @end float float.texi(,243) float.texi(,244) @float ,label but no type in unnumbered float.texi(,245) float with no type. float.texi(,246) float.texi(,247) @caption{No type in unnumbered} float.texi(,248) @shortcaption{No type in unnumbered} float.texi(,249) @end float float.texi(,250) float.texi(,251) float.texi(,252) @node Section within unnumbered float.texi(,253) @section Section within unnumbered float.texi(,254) float.texi(,255) float.texi(,256) @float Text, Section within unnumbered float float.texi(,257) Section within unnumbered float.texi(,258) @shortcaption{Section within unnumbered} float.texi(,259) @caption{Section within unnumbered} float.texi(,260) @end float float.texi(,261) float.texi(,262) @node Chapter with unnumbsubsec float.texi(,263) @chapter Chapter with unnumbsubsec float.texi(,264) float.texi(,265) @menu float.texi(,266) * unnumbered sec:: float.texi(,267) @end menu float.texi(,268) @float Text, Chapter with subsec float float.texi(,269) Chap float.texi(,270) @shortcaption{Chapter with subsec} float.texi(,271) @caption{Chapter with subsec} float.texi(,272) @end float float.texi(,273) float.texi(,274) @node unnumbered sec float.texi(,275) @unnumberedsec unnumbered sec float.texi(,276) float.texi(,277) @float Text, unnumbered sec float float.texi(,278) Chap float.texi(,279) @shortcaption{unnumbered sec float} float.texi(,280) @caption{unnumbered sec float} float.texi(,281) @end float float.texi(,282) float.texi(,283) @float ,label but no type in unnumbered subsec in chapter float.texi(,284) float with no type. float.texi(,285) float.texi(,286) @caption{No type in unnumbered subsec in chapter} float.texi(,287) @shortcaption{No type in unnumbered subsec in chapter} float.texi(,288) @end float float.texi(,289) float.texi(,290) @node list of floats float.texi(,291) @unnumbered list of floats float.texi(,292) float.texi(,293) See @ref{text in section}. float.texi(,294) And (@pxref{text in chapter}). float.texi(,295) @xref{text with a lot of features}. float.texi(,296) float.texi(,297) And now a ref (without manual or printed manual) float.texi(,298) @ref{text with a lot of features, cross ref, title}. float.texi(,299) float.texi(,300) And now a ref (with manual without printed manual) float.texi(,301) @ref{text with a lot of features, cross ref, title, manual}. float.texi(,302) float.texi(,303) And now a ref (without manual with a printed manual) float.texi(,304) @ref{text with a lot of features, cross ref, title,, printed manual title}. float.texi(,305) float.texi(,306) A ref to float without type @ref{label but no type}. float.texi(,307) float.texi(,308) @listoffloats Text float.texi(,309) @listoffloats th@'eor@`eme float.texi(,310) float.texi(,311) @printindex cp float.texi(,312) float.texi(,313) @bye texi2html-1.82/test/coverage/res/texi_float/float.20000644000175000017500000000000011264347123024112 0ustar flichtenheldflichtenheldtexi2html-1.82/test/coverage/res/imbrications/0000755000175000017500000000000011264347123023261 5ustar flichtenheldflichtenheldtexi2html-1.82/test/coverage/res/imbrications/imbrications.html0000644000175000017500000005314711264347123026644 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Top


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. first node chapter


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. second

    Some text

    Function: buffer-end flag

    A nice function

    makeinfo accepts a menu within defun but it isn’t possible to follow it

    end of the function


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.1 the node is within menu

    Test @option inside @emph Foo emphasized and referring to ‘--some’ option.

    Table imbricated in code:
    in code

    line

    text

    ref with uref within:
    cross ref with uref uref1: (info file with uref3 uref3)node section ‘title with uref2 uref2’ in printed manual with uref4 uref4

    footnote with code within:
    (1)

    Refs in samp:

    Refs without samp: empty section name see . With a chapter: second.

    A ref in samp to a node with empty section name: see ‘’.

    Same but to a regular node associated with a chapter: see ‘second’.

    code with table and example within:
    in code

    line

    in code and table

     
      in example
    

    • item
     
    an example
    
     
    Some html some code.
    after html in example
    
    
    two line breaks
    Tex doesn't like math in @example
    
    Now a content within example
    
    
    
    Jump to:   E   I   O  
    Index Entry Section

    E
    elem1. first node chapter

    I
    index in example2.1 the node is within menu

    O
    other entry2.1 the node is within menu

    Jump to:   E   I   O  
    printindex  works but cannot be followed in info, in TeX
    the result is quite strange.
    
    and now yes---now and ``so''.
    
    

    after example and now yes—now and “so”.

    is the text flushed right ?

     
    text flushed  right and then example
    
    it should be flushed
    
     
    example and then text flushed  right
    
     
    simple displayed text
    

    a display within example

     
    example
    
     
    display
    

    A cartouched text

    A cartouche within example

     
    example
    
    A cartouched text
    

    An example with table, multitable, quotation, enumerate

     
    a table within example
    
    • item
    text
    
    a multitable
    
    beginnin
    a new column                          no splitting ???????????????????
    a menu
    
    A quotation
    
    This is a pre
    quotation
    
    
    Enumerate
    
    
    1.  first item
      
    2.  second  item
      
      still second
      

    example with deff-like commands

     
    deffs
    
    Function: my def args arg
    Function: other def no args
    type: name and now the args
    Variable: variables variable-name
    Variable: variables too other-variable
    THis is the defvar
    
    A table within the def
    
    item
    text
    
    more text
    
    second item
    explanation
    

    table within display within example

     
     
    item
    Line
    

    table within example within display

     
     
    item
    Line
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)

    in footnote par1

    par2


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/coverage/res/imbrications/imbrications.20000644000175000017500000000012411264347123026024 0ustar flichtenheldflichtenheld** unnumberedsubsec without name (l. 304) ** unnumberedsubsec without name (l. 306) texi2html-1.82/test/coverage/res/texi_pass0_macros/0000755000175000017500000000000011264347123024221 5ustar flichtenheldflichtenheldtexi2html-1.82/test/coverage/res/texi_pass0_macros/pass0_macros.passfirst0000644000175000017500000000350311264347123030554 0ustar flichtenheldflichtenheldpass0_macros.texi(,2) pass0_macros.texi(,3) @node Top,First node,(dir) pass0_macros.texi(,4) @top pass0 macro pass0_macros.texi(,5) @menu pass0_macros.texi(,6) * First node:: node 1 pass0_macros.texi(,7) @end menu pass0_macros.texi(,8) pass0_macros.texi(,9) @node First node,,Top,Top pass0_macros.texi(,10) @chapter first node chapter pass0_macros.texi(,11) pass0_macros.texi(,12) before syncodeindex @syncodeindex cp fn pass0_macros.texi(,13) pass0_macros.texi(,14) syncodeindex on its line pass0_macros.texi(,15) @syncodeindex cp fn pass0_macros.texi(,16) line following syncodeindex pass0_macros.texi(,17) pass0_macros.texi(,18) One more thing following syncodeindex pass0_macros.texi(,19) @syncodeindex cp fn truc pass0_macros.texi(,20) line following syncodeindex cp fn truc pass0_macros.texi(,21) pass0_macros.texi(,22) documentlanguage @documentlanguage en pass0_macros.texi(,23) pass0_macros.texi(,24) documentlanguage on its line pass0_macros.texi(,25) @documentlanguage en pass0_macros.texi(,26) line following documentlanguage pass0_macros.texi(,27) pass0_macros.texi(,28) double documentlanguage on its line pass0_macros.texi(,29) @documentlanguage en @documentlanguage en pass0_macros.texi(,30) line following documentlanguage pass0_macros.texi(,31) pass0_macros.texi(,32) @documentlanguage en after documentlanguage pass0_macros.texi(,33) pass0_macros.texi(,34) definedx truc pass0_macros.texi(,35) @defindex truc pass0_macros.texi(,36) after pass0_macros.texi(,37) pass0_macros.texi(,38) definedx chose machin pass0_macros.texi(,39) @defindex chose machin pass0_macros.texi(,40) after pass0_macros.texi(,41) pass0_macros.texi(,42) @trucindex index truc pass0_macros.texi(,43) @c @choseindex index pass0_macros.texi(,44) @c @machinindex machin pass0_macros.texi(,45) pass0_macros.texi(,46) Before bye @bye texi2html-1.82/test/coverage/res/texi_pass0_macros/pass0_macros.passtexi0000644000175000017500000000350311264347123030376 0ustar flichtenheldflichtenheldpass0_macros.texi(,2) pass0_macros.texi(,3) @node Top,First node,(dir) pass0_macros.texi(,4) @top pass0 macro pass0_macros.texi(,5) @menu pass0_macros.texi(,6) * First node:: node 1 pass0_macros.texi(,7) @end menu pass0_macros.texi(,8) pass0_macros.texi(,9) @node First node,,Top,Top pass0_macros.texi(,10) @chapter first node chapter pass0_macros.texi(,11) pass0_macros.texi(,12) before syncodeindex @syncodeindex cp fn pass0_macros.texi(,13) pass0_macros.texi(,14) syncodeindex on its line pass0_macros.texi(,15) @syncodeindex cp fn pass0_macros.texi(,16) line following syncodeindex pass0_macros.texi(,17) pass0_macros.texi(,18) One more thing following syncodeindex pass0_macros.texi(,19) @syncodeindex cp fn truc pass0_macros.texi(,20) line following syncodeindex cp fn truc pass0_macros.texi(,21) pass0_macros.texi(,22) documentlanguage @documentlanguage en pass0_macros.texi(,23) pass0_macros.texi(,24) documentlanguage on its line pass0_macros.texi(,25) @documentlanguage en pass0_macros.texi(,26) line following documentlanguage pass0_macros.texi(,27) pass0_macros.texi(,28) double documentlanguage on its line pass0_macros.texi(,29) @documentlanguage en @documentlanguage en pass0_macros.texi(,30) line following documentlanguage pass0_macros.texi(,31) pass0_macros.texi(,32) @documentlanguage en after documentlanguage pass0_macros.texi(,33) pass0_macros.texi(,34) definedx truc pass0_macros.texi(,35) @defindex truc pass0_macros.texi(,36) after pass0_macros.texi(,37) pass0_macros.texi(,38) definedx chose machin pass0_macros.texi(,39) @defindex chose machin pass0_macros.texi(,40) after pass0_macros.texi(,41) pass0_macros.texi(,42) @trucindex index truc pass0_macros.texi(,43) @c @choseindex index pass0_macros.texi(,44) @c @machinindex machin pass0_macros.texi(,45) pass0_macros.texi(,46) Before bye @bye texi2html-1.82/test/coverage/res/texi_pass0_macros/pass0_macros.20000644000175000017500000000014211264347123026673 0ustar flichtenheldflichtenheld*** Bad defindex line: chose machin (l. 39) *** Bad defindex line: chose machin (l. 39) texi2html-1.82/test/coverage/res/texi_pass0_macros/pass0_macros.texi0000644000175000017500000000154011264347123027506 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top,First node,(dir) @top pass0 macro @menu * First node:: node 1 @end menu @node First node,,Top,Top @chapter first node chapter before syncodeindex @syncodeindex cp fn syncodeindex on its line @syncodeindex cp fn line following syncodeindex One more thing following syncodeindex @syncodeindex cp fn truc line following syncodeindex cp fn truc documentlanguage @documentlanguage en documentlanguage on its line @documentlanguage en line following documentlanguage double documentlanguage on its line @documentlanguage en @documentlanguage en line following documentlanguage @documentlanguage en after documentlanguage definedx truc @defindex truc after definedx chose machin @defindex chose machin after @trucindex index truc @c @choseindex index @c @machinindex machin Before bye @bye texi2html-1.82/test/coverage/res/formatting/0000755000175000017500000000000011264347123022750 5ustar flichtenheldflichtenheldtexi2html-1.82/test/coverage/res/formatting/formatting.20000644000175000017500000002243411264347123025212 0ustar flichtenheldflichtenheld** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} (l. 38 in @mymacro) ** Unknown command `@#' (left as is) (l. 38 in @mymacro) *** no file argument for @image (l. 38 in @mymacro) *** no file argument for @image (l. 38 in @mymacro) *** no file argument for @image (l. 38 in @mymacro) *** '}' without opening '{' before: (l. 38 in @mymacro) *** '}' without opening '{' before: (l. 38 in @mymacro) *** '{' without macro. Before: (l. 38 in @mymacro) *** '{' without macro. Before: and after (l. 38 in @mymacro) *** Undefined node `node' in @ref (l. 38 in @mymacro) *** Undefined node `' in @ref (l. 38 in @mymacro) *** Undefined node `' in @ref (l. 38 in @mymacro) *** Undefined node `node' in @ref (l. 38 in @mymacro) *** Undefined node `node' in @ref (l. 38 in @mymacro) *** Undefined node `node' in @ref (l. 38 in @mymacro) *** Undefined node `' in @ref (l. 38 in @mymacro) *** First argument to @inforef may not be empty (l. 38 in @mymacro) *** First argument to @inforef may not be empty (l. 38 in @mymacro) *** First argument to @inforef may not be empty (l. 38 in @mymacro) *** First argument to @inforef may not be empty (l. 38 in @mymacro) ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} (l. 42 in @mymacro) ** Unknown command `@#' (left as is) (l. 42 in @mymacro) *** no file argument for @image (l. 42 in @mymacro) *** no file argument for @image (l. 42 in @mymacro) *** no file argument for @image (l. 42 in @mymacro) *** '}' without opening '{' before: (l. 42 in @mymacro) *** '}' without opening '{' before: (l. 42 in @mymacro) *** '{' without macro. Before: (l. 42 in @mymacro) *** '{' without macro. Before: and after (l. 42 in @mymacro) *** Undefined node `node' in @ref (l. 42 in @mymacro) *** Undefined node `' in @ref (l. 42 in @mymacro) *** Undefined node `' in @ref (l. 42 in @mymacro) *** Undefined node `node' in @ref (l. 42 in @mymacro) *** Undefined node `node' in @ref (l. 42 in @mymacro) *** Undefined node `node' in @ref (l. 42 in @mymacro) *** Undefined node `' in @ref (l. 42 in @mymacro) *** First argument to @inforef may not be empty (l. 42 in @mymacro) *** First argument to @inforef may not be empty (l. 42 in @mymacro) *** First argument to @inforef may not be empty (l. 42 in @mymacro) *** First argument to @inforef may not be empty (l. 42 in @mymacro) texi2html-1.82/test/coverage/res/formatting/formatting.html0000644000175000017500000055022111264347123026015 0ustar flichtenheldflichtenheld title –a
    [Top] [Contents] [Index] [ ? ]

    Insertcopying in normal text

    In copying

    < > " & ’ ‘

    “simple-double–three—four—-”
    code: ``simple-double--three---four----''
    asis: “simple-double–three—four—-”
    strong: “simple-double–three—four—-”
    kbd: ``simple-double--three---four----''

    ‘‘simple-double--three—four—-’’

    @"u ü @"{U} Ü @~n ñ @^a â @’e é @=o ō @‘i ì @’{e} é @’{@dotless{i}} í @dotless{i} i @dotless{j} j @‘{@=E} Ē` @l{} ł @,{@’C} Ć, @,c ç @,c@"u çü

    @*
    @ followed by a space   @ followed by a tab   @ followed by a new line  @- @| @: @! ! @? ? @. . @@ @ @} } @{ { @/

    foo vs. bar. colon :And something else. semi colon ;. And ? ?. Now ! !@ but , ,

    @TeX TeX @LaTeX LaTeX @bullet • @copyright © @dots … @enddots ... @equiv ≡ @error error--> @expansion → @minus - @point ∗ @print -| @result ⇒ @today a sunny day @aa å @AA Å @ae æ @oe œ @AE Æ @OE Œ @o ø @O Ø @ss ß @l ł @L Ł @exclamdown ¡ @questiondown ¿ @pounds £ @registeredsymbol ® @ordf ª @ordm º @comma , @quotedblleft “ @quotedblright ” @quoteleft ‘ @quoteright ’ @quotedblbase „ @quotesinglbase ‚ @guillemetleft « @guillemetright » @guillemotleft « @guillemotright » @guilsinglleft ‹ @guilsinglright › @textdegree ° @euro € @arrow → @leq ≤ @geq ≥

    @acronym{--a,an accronym} –a (an accronym) @acronym{--a} –a @abbr{@'E--. @comma{}A., @'Etude Autonome } É–. ,A. (Étude Autonome) @abbr{@'E--. @comma{}A.} É–. ,A. @asis{--a} –a @b{--a} –a @cite{--a} –a @code{--a} --a @command{--a} --a @ctrl{--a} –a @dfn{--a} –a @dmn{--a} –a @email{--a,--b} –b @email{,--b} –b @email{--a} --a @emph{--a} –a @env{--a} --a @file{--a}--a@i{--a} –a @kbd{--a} --a @key{--a} <--a> @math{--a {\frac{1}{2}} @minus{}} –a \frac12 - @option{--a}--a@r{--a} –a @samp{--a}--a@sc{--a} –A @strong{--a} –a @t{--a} –a @sansserif{--a} –a @titlefont{--a}

    –a

    @indicateurl{--a} <--a> @uref{--a,--b} –b @uref{--a} --a @uref{,--b} –b @uref{--a,--b,--c} –c @uref{,--b,--c} –c @uref{--a,,--c} –c @uref{,,--c} –c @url{--a,--b} –b @url{--a,} --a @url{,--b} –b @var{--a} –a @verb{:--a:} --a @verb{:a < & @ % " -- b:} a < & @ % " -- b @w{} @H{a} a'' @H{--a} –a'' @dotaccent{a} ȧ @dotaccent{--a} –a. @ringaccent{a} å @ringaccent{--a} –a* @tieaccent{a} a[ @tieaccent{--a} –a[ @u{a} ă @u{--a} –a( @ubaraccent{a} a_ @ubaraccent{--a} –a_ @udotaccent{a}@udotaccent{--a} .–a @v{a} a< @v{--a} –a< @,{c} ç @,{--c} –c, @ogonek{a} ą @ogonek{--a} –a; @footnote{in footnote} (1) @footnote{in footnote2} (2)

    @image{f--ile} f--ile @image{f--ile,l--i} f--ile @image{f--ile,,l--e} f--ile @image{f--ile,,,alt} alt @image{f--ile,,,,e-d-xt} f--ile @image{f--ile,aze,az,alt,e--xt} alt @image{f-ile,aze,,a--lt} a–lt @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} alt



    @clicksequence{click @click{} A} click → A After clickstyle ⇒ @clicksequence{click @click{} A} click ⇒ A

    A quot—ation

    Note: A Note

    note: A note

    Caution: Caution

    Important: Important

    Tip: a Tip

    Warning: a Warning.

    something é TeX: The something é TeX is here.

    @ at the end of line A @ at the end of the @quotation line.

    something, other thing: something, other thing

    Note, the note: Note, the note

    Empty:

    :


    :

    A small quot—ation

    Note: A small Note

    something, other thing: something, other thing

    • i–temize
    • + i–tem +
    • b–ullet
    • - minu–s
    • e–mph item
    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
    trucbidule
     
    e--xample  some
       text
    
     
    s--mallexample
    
     
    d–isplay
    
     
    s–malldisplay
    
     
    l--isp
    
     
    s--malllisp
    
     
    f–ormat
    
     
    s–mallformat
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    cate--gory: de--ffn_name ar--guments more args
    even more so

    def–fn

    fset: i a g
    cmde: truc
    Command: log trap
    Command: log trap1
    Command: log trap2
    cmde: id ule truc
    cmde2: id ‘i’ ule truc
    id ‘i’ ule:
    :
    aaa:
    :
    :
    : machin
    : bidule machin
    truc: machin
    truc:
    truc: followed by a comment
    truc:
    :
    truc: a b c d e f g h i
    truc: deffnx before end deffn
    empty: deffn
    empty: deffn with deffnx
    empty: deffnx
    fset: i a g
    cmde: truc

    text in def item for second def item

    c--ategory: d--efvr_name

    d–efvr

    c--ategory: t--ype d--eftypefn_name a--rguments...

    d–eftypefn

    c--ategory on c--lass: t--ype d--eftypeop_name a--rguments...

    d–eftypeop

    c--ategory: t--ype d--eftypevr_name

    d–eftypevr

    c--ategory of c--lass: d--efcv_name

    d–efcv

    c--ategory on c--lass: d--efop_name a--rguments...

    d–efop

    c--ategory: d--eftp_name a--ttributes...

    d–eftp

    Function: d--efun_name a--rguments...

    d–efun

    Macro: d--efmac_name a--rguments...

    d–efmac

    Special Form: d--efspec_name a--rguments...

    d–efspec

    Variable: d--efvar_name argvar argvar1

    d–efvar

    User Option: d--efopt_name

    d–efopt

    Function: t--ype d--eftypefun_name a--rguments...

    d–eftypefun

    Variable: t--ype d--eftypevar_name

    d–eftypevar

    Instance Variable of c--lass: d--efivar_name

    d–efivar

    Instance Variable of c--lass: t--ype d--eftypeivar_name

    d–eftypeivar

    Method on c--lass: d--efmethod_name a--rguments...

    d–efmethod

    Method on c--lass: t--ype d--eftypemethod_name a--rguments...

    d–eftypemethod

    @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} See cross r—ef name@: (file n—ame@)c—hapter@ section ‘t—itle@’ in ma—nual@. @ref{chapter, cross ref name, title, file name, manual} cross ref name: (file name)chapter section ‘title’ in manual @pxref{chapter, cross ref name, title, file name, manual} see cross ref name: (file name)chapter section ‘title’ in manual @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter

    @ref{chapter} chapter @xref{chapter} See section chapter. @pxref{chapter} see section chapter @ref{s--ect@comma{}ion} A section

    @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } a , in cross ref: (a comma, in file)s–ect,ion section ‘a comma, in title’ in a , in manual name

    @ref{chapter,cross ref name} cross ref name @ref{chapter,,title} title @ref{chapter,,,file name} (file name)chapter @ref{chapter,,,,manual} section ‘chapter’ in manual @ref{chapter,cross ref name,title,} title @ref{chapter,cross ref name,,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,,,manual} section ‘chapter’ in manual @ref{chapter,cross ref name,title,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,title,,manual} section ‘title’ in manual @ref{chapter,cross ref name,title, file name, manual} cross ref name: (file name)chapter section ‘title’ in manual @ref{chapter,,title,file name} (file name)chapter @ref{chapter,,title,,manual} section ‘title’ in manual @ref{chapter,,title, file name, manual} (file name)chapter section ‘title’ in manual @ref{chapter,,,file name,manual} (file name)chapter section ‘chapter’ in manual

    @ref{(pman)anode,cross ref name} cross ref name: (pman)anode @ref{(pman)anode,,title} (pman)anode @ref{(pman)anode,,,file name} (file name)anode @ref{(pman)anode,,,,manual} (pman)anode section ‘anode’ in manual @ref{(pman)anode,cross ref name,title,} cross ref name: (pman)anode @ref{(pman)anode,cross ref name,,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,,,manual} cross ref name: (pman)anode section ‘anode’ in manual @ref{(pman)anode,cross ref name,title,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,title,,manual} cross ref name: (pman)anode section ‘title’ in manual @ref{(pman)anode,cross ref name,title, file name, manual} cross ref name: (file name)anode section ‘title’ in manual @ref{(pman)anode,,title,file name} (file name)anode @ref{(pman)anode,,title,,manual} (pman)anode section ‘title’ in manual @ref{(pman)anode,,title, file name, manual} (file name)anode section ‘title’ in manual @ref{(pman)anode,,,file name,manual} (file name)anode section ‘anode’ in manual

    @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter @inforef{chapter} @inforef{chapter, cross ref name} @inforef{chapter,,file name} See (file name)chapter @inforef{node, cross ref name, file name} See cross ref name: (file name)node @inforef{node} @inforef{node, cross ref name} @inforef{node,,file name} See (file name)node @inforef{chapter, cross ref name, file name, spurious arg} See cross ref name: (file name, spurious arg)chapter

    @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} See a , in cross ref: (a comma, in file)s–ect,ion

    • a

    l–ine

    a
    b

    l–ine

    - a
    - b

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    \input texinfo @c -*-texinfo-*-
    
    @setfilename simplest.info
    
    @node Top
    
    This is a very simple texi manual @  <>.
    
    @bye
    
    in verbatim ''
    
    html ''

    majorheading

    chapheading

    heading

    subheading

    subsubheading

    @acronym{--a,an accronym @comma{} @enddots{}} –a (an accronym , ...) @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } É–. ,A. (Étude–, Autonome) @abbr{@'E--. @comma{}A.} É–. ,A.

    @math{--a@minus{} {\frac{1}{2}}} –a- \frac12

    @image{f-ile,,,alt@verb{:jk _" %}} altjk _" %@ @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} jk _" %@ in b " @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} altjk _" %@

    Somehow invalid use of @,:
    @, ,
    @,@"u @,"u

    Invalid use of @’:
    @’ ’
    @’@"u @'"u

    @dotless{truc} truc @dotless{ij} ij @dotless{--a} –a @dotless{a} a

    @TeX, but without brace TeX

    @# @#

    @w{--a} –a

    @image{,1--xt} @image{,,2--xt} @image{,,,3--xt}


    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    fun:
    truc: machin bidule chose and
    truc: machin bidule chose and after
    truc: machin bidule chose and {
    truc: machin bidule chose and { and after
    truc: followed by a comment

    Various deff lines

    truc: after a deff item

    @ref{node} @ref{node}

    @ref{,cross ref name} @ref{,cross ref name} @ref{,,title} @ref{,,title} @ref{,,,file name} (file name) @ref{,,,,manual} manual @ref{node,cross ref name} @ref{node,cross ref name} @ref{node,,title} @ref{node,,title} @ref{node,,,file name} (file name)node @ref{node,,,,manual} section ‘node’ in manual @ref{node,cross ref name,title,} @ref{node,cross ref name,title,} @ref{node,cross ref name,,file name} cross ref name: (file name)node @ref{node,cross ref name,,,manual} section ‘node’ in manual @ref{node,cross ref name,title,file name} cross ref name: (file name)node @ref{node,cross ref name,title,,manual} section ‘title’ in manual @ref{node,cross ref name,title, file name, manual} cross ref name: (file name)node section ‘title’ in manual @ref{node,,title,file name} (file name)node @ref{node,,title,,manual} section ‘title’ in manual @ref{chapter,,title, file name, manual} (file name)chapter section ‘title’ in manual @ref{node,,title, file name, manual} (file name)node section ‘title’ in manual @ref{node,,,file name,manual} (file name)node section ‘node’ in manual @ref{,cross ref name,title,} @ref{,cross ref name,title,} @ref{,cross ref name,,file name} cross ref name: (file name) @ref{,cross ref name,,,manual} manual @ref{,cross ref name,title,file name} cross ref name: (file name) @ref{,cross ref name,title,,manual} section ‘title’ in manual @ref{,cross ref name,title, file name, manual} cross ref name: (file name) section ‘title’ in manual @ref{,,title,file name} (file name) @ref{,,title,,manual} section ‘title’ in manual @ref{,,title, file name, manual} (file name) section ‘title’ in manual @ref{,,,file name,manual} (file name) manual

    @inforef{,cross ref name } @inforef{,,file name} @inforef{,cross ref name, file name} @inforef{}

    Normal text

    < > " & ’ ‘

    “simple-double–three—four—-”
    code: ``simple-double--three---four----''
    asis: “simple-double–three—four—-”
    strong: “simple-double–three—four—-”
    kbd: ``simple-double--three---four----''

    ‘‘simple-double--three—four—-’’

    @"u ü @"{U} Ü @~n ñ @^a â @’e é @=o ō @‘i ì @’{e} é @’{@dotless{i}} í @dotless{i} i @dotless{j} j @‘{@=E} Ē` @l{} ł @,{@’C} Ć, @,c ç @,c@"u çü

    @*
    @ followed by a space   @ followed by a tab   @ followed by a new line  @- @| @: @! ! @? ? @. . @@ @ @} } @{ { @/

    foo vs. bar. colon :And something else. semi colon ;. And ? ?. Now ! !@ but , ,

    @TeX TeX @LaTeX LaTeX @bullet • @copyright © @dots … @enddots ... @equiv ≡ @error error--> @expansion → @minus - @point ∗ @print -| @result ⇒ @today a sunny day @aa å @AA Å @ae æ @oe œ @AE Æ @OE Œ @o ø @O Ø @ss ß @l ł @L Ł @exclamdown ¡ @questiondown ¿ @pounds £ @registeredsymbol ® @ordf ª @ordm º @comma , @quotedblleft “ @quotedblright ” @quoteleft ‘ @quoteright ’ @quotedblbase „ @quotesinglbase ‚ @guillemetleft « @guillemetright » @guillemotleft « @guillemotright » @guilsinglleft ‹ @guilsinglright › @textdegree ° @euro € @arrow → @leq ≤ @geq ≥

    @acronym{--a,an accronym} –a (an accronym) @acronym{--a} –a @abbr{@'E--. @comma{}A., @'Etude Autonome } É–. ,A. (Étude Autonome) @abbr{@'E--. @comma{}A.} É–. ,A. @asis{--a} –a @b{--a} –a @cite{--a} –a @code{--a} --a @command{--a} --a @ctrl{--a} –a @dfn{--a} –a @dmn{--a} –a @email{--a,--b} –b @email{,--b} –b @email{--a} --a @emph{--a} –a @env{--a} --a @file{--a}--a@i{--a} –a @kbd{--a} --a @key{--a} <--a> @math{--a {\frac{1}{2}} @minus{}} –a \frac12 - @option{--a}--a@r{--a} –a @samp{--a}--a@sc{--a} –A @strong{--a} –a @t{--a} –a @sansserif{--a} –a @titlefont{--a}

    –a

    @indicateurl{--a} <--a> @uref{--a,--b} –b @uref{--a} --a @uref{,--b} –b @uref{--a,--b,--c} –c @uref{,--b,--c} –c @uref{--a,,--c} –c @uref{,,--c} –c @url{--a,--b} –b @url{--a,} --a @url{,--b} –b @var{--a} –a @verb{:--a:} --a @verb{:a < & @ % " -- b:} a < & @ % " -- b @w{} @H{a} a'' @H{--a} –a'' @dotaccent{a} ȧ @dotaccent{--a} –a. @ringaccent{a} å @ringaccent{--a} –a* @tieaccent{a} a[ @tieaccent{--a} –a[ @u{a} ă @u{--a} –a( @ubaraccent{a} a_ @ubaraccent{--a} –a_ @udotaccent{a}@udotaccent{--a} .–a @v{a} a< @v{--a} –a< @,{c} ç @,{--c} –c, @ogonek{a} ą @ogonek{--a} –a; @footnote{in footnote} (1) @footnote{in footnote2} (2)

    @image{f--ile} f--ile @image{f--ile,l--i} f--ile @image{f--ile,,l--e} f--ile @image{f--ile,,,alt} alt @image{f--ile,,,,e-d-xt} f--ile @image{f--ile,aze,az,alt,e--xt} alt @image{f-ile,aze,,a--lt} a–lt @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} alt



    @clicksequence{click @click{} A} click → A After clickstyle ⇒ @clicksequence{click @click{} A} click ⇒ A

    A quot—ation

    Note: A Note

    note: A note

    Caution: Caution

    Important: Important

    Tip: a Tip

    Warning: a Warning.

    something é TeX: The something é TeX is here.

    @ at the end of line A @ at the end of the @quotation line.

    something, other thing: something, other thing

    Note, the note: Note, the note

    Empty:

    :


    :

    A small quot—ation

    Note: A small Note

    something, other thing: something, other thing

    • i–temize
    • + i–tem +
    • b–ullet
    • - minu–s
    • e–mph item
    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
    trucbidule
     
    e--xample  some
       text
    
     
    s--mallexample
    
     
    d–isplay
    
     
    s–malldisplay
    
     
    l--isp
    
     
    s--malllisp
    
     
    f–ormat
    
     
    s–mallformat
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    cate--gory: de--ffn_name ar--guments more args
    even more so

    def–fn

    fset: i a g
    cmde: truc
    Command: log trap
    Command: log trap1
    Command: log trap2
    cmde: id ule truc
    cmde2: id ‘i’ ule truc
    id ‘i’ ule:
    :
    aaa:
    :
    :
    : machin
    : bidule machin
    truc: machin
    truc:
    truc: followed by a comment
    truc:
    :
    truc: a b c d e f g h i
    truc: deffnx before end deffn
    empty: deffn
    empty: deffn with deffnx
    empty: deffnx
    fset: i a g
    cmde: truc

    text in def item for second def item

    c--ategory: d--efvr_name

    d–efvr

    c--ategory: t--ype d--eftypefn_name a--rguments...

    d–eftypefn

    c--ategory on c--lass: t--ype d--eftypeop_name a--rguments...

    d–eftypeop

    c--ategory: t--ype d--eftypevr_name

    d–eftypevr

    c--ategory of c--lass: d--efcv_name

    d–efcv

    c--ategory on c--lass: d--efop_name a--rguments...

    d–efop

    c--ategory: d--eftp_name a--ttributes...

    d–eftp

    Function: d--efun_name a--rguments...

    d–efun

    Macro: d--efmac_name a--rguments...

    d–efmac

    Special Form: d--efspec_name a--rguments...

    d–efspec

    Variable: d--efvar_name argvar argvar1

    d–efvar

    User Option: d--efopt_name

    d–efopt

    Function: t--ype d--eftypefun_name a--rguments...

    d–eftypefun

    Variable: t--ype d--eftypevar_name

    d–eftypevar

    Instance Variable of c--lass: d--efivar_name

    d–efivar

    Instance Variable of c--lass: t--ype d--eftypeivar_name

    d–eftypeivar

    Method on c--lass: d--efmethod_name a--rguments...

    d–efmethod

    Method on c--lass: t--ype d--eftypemethod_name a--rguments...

    d–eftypemethod

    @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} See cross r—ef name@: (file n—ame@)c—hapter@ section ‘t—itle@’ in ma—nual@. @ref{chapter, cross ref name, title, file name, manual} cross ref name: (file name)chapter section ‘title’ in manual @pxref{chapter, cross ref name, title, file name, manual} see cross ref name: (file name)chapter section ‘title’ in manual @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter

    @ref{chapter} chapter @xref{chapter} See section chapter. @pxref{chapter} see section chapter @ref{s--ect@comma{}ion} A section

    @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } a , in cross ref: (a comma, in file)s–ect,ion section ‘a comma, in title’ in a , in manual name

    @ref{chapter,cross ref name} cross ref name @ref{chapter,,title} title @ref{chapter,,,file name} (file name)chapter @ref{chapter,,,,manual} section ‘chapter’ in manual @ref{chapter,cross ref name,title,} title @ref{chapter,cross ref name,,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,,,manual} section ‘chapter’ in manual @ref{chapter,cross ref name,title,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,title,,manual} section ‘title’ in manual @ref{chapter,cross ref name,title, file name, manual} cross ref name: (file name)chapter section ‘title’ in manual @ref{chapter,,title,file name} (file name)chapter @ref{chapter,,title,,manual} section ‘title’ in manual @ref{chapter,,title, file name, manual} (file name)chapter section ‘title’ in manual @ref{chapter,,,file name,manual} (file name)chapter section ‘chapter’ in manual

    @ref{(pman)anode,cross ref name} cross ref name: (pman)anode @ref{(pman)anode,,title} (pman)anode @ref{(pman)anode,,,file name} (file name)anode @ref{(pman)anode,,,,manual} (pman)anode section ‘anode’ in manual @ref{(pman)anode,cross ref name,title,} cross ref name: (pman)anode @ref{(pman)anode,cross ref name,,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,,,manual} cross ref name: (pman)anode section ‘anode’ in manual @ref{(pman)anode,cross ref name,title,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,title,,manual} cross ref name: (pman)anode section ‘title’ in manual @ref{(pman)anode,cross ref name,title, file name, manual} cross ref name: (file name)anode section ‘title’ in manual @ref{(pman)anode,,title,file name} (file name)anode @ref{(pman)anode,,title,,manual} (pman)anode section ‘title’ in manual @ref{(pman)anode,,title, file name, manual} (file name)anode section ‘title’ in manual @ref{(pman)anode,,,file name,manual} (file name)anode section ‘anode’ in manual

    @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter @inforef{chapter} @inforef{chapter, cross ref name} @inforef{chapter,,file name} See (file name)chapter @inforef{node, cross ref name, file name} See cross ref name: (file name)node @inforef{node} @inforef{node, cross ref name} @inforef{node,,file name} See (file name)node @inforef{chapter, cross ref name, file name, spurious arg} See cross ref name: (file name, spurious arg)chapter

    @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} See a , in cross ref: (a comma, in file)s–ect,ion

    • a

    l–ine

    a
    b

    l–ine

    - a
    - b

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    \input texinfo @c -*-texinfo-*-
    
    @setfilename simplest.info
    
    @node Top
    
    This is a very simple texi manual @  <>.
    
    @bye
    
    in verbatim ''
    
    html ''

    majorheading

    chapheading

    heading

    subheading

    subsubheading

    @acronym{--a,an accronym @comma{} @enddots{}} –a (an accronym , ...) @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } É–. ,A. (Étude–, Autonome) @abbr{@'E--. @comma{}A.} É–. ,A.

    @math{--a@minus{} {\frac{1}{2}}} –a- \frac12

    @image{f-ile,,,alt@verb{:jk _" %}} altjk _" %@ @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} jk _" %@ in b " @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} altjk _" %@

    Somehow invalid use of @,:
    @, ,
    @,@"u @,"u

    Invalid use of @’:
    @’ ’
    @’@"u @'"u

    @dotless{truc} truc @dotless{ij} ij @dotless{--a} –a @dotless{a} a

    @TeX, but without brace TeX

    @# @#

    @w{--a} –a

    @image{,1--xt} @image{,,2--xt} @image{,,,3--xt}


    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    fun:
    truc: machin bidule chose and
    truc: machin bidule chose and after
    truc: machin bidule chose and {
    truc: machin bidule chose and { and after
    truc: followed by a comment

    Various deff lines

    truc: after a deff item

    @ref{node} @ref{node}

    @ref{,cross ref name} @ref{,cross ref name} @ref{,,title} @ref{,,title} @ref{,,,file name} (file name) @ref{,,,,manual} manual @ref{node,cross ref name} @ref{node,cross ref name} @ref{node,,title} @ref{node,,title} @ref{node,,,file name} (file name)node @ref{node,,,,manual} section ‘node’ in manual @ref{node,cross ref name,title,} @ref{node,cross ref name,title,} @ref{node,cross ref name,,file name} cross ref name: (file name)node @ref{node,cross ref name,,,manual} section ‘node’ in manual @ref{node,cross ref name,title,file name} cross ref name: (file name)node @ref{node,cross ref name,title,,manual} section ‘title’ in manual @ref{node,cross ref name,title, file name, manual} cross ref name: (file name)node section ‘title’ in manual @ref{node,,title,file name} (file name)node @ref{node,,title,,manual} section ‘title’ in manual @ref{chapter,,title, file name, manual} (file name)chapter section ‘title’ in manual @ref{node,,title, file name, manual} (file name)node section ‘title’ in manual @ref{node,,,file name,manual} (file name)node section ‘node’ in manual @ref{,cross ref name,title,} @ref{,cross ref name,title,} @ref{,cross ref name,,file name} cross ref name: (file name) @ref{,cross ref name,,,manual} manual @ref{,cross ref name,title,file name} cross ref name: (file name) @ref{,cross ref name,title,,manual} section ‘title’ in manual @ref{,cross ref name,title, file name, manual} cross ref name: (file name) section ‘title’ in manual @ref{,,title,file name} (file name) @ref{,,title,,manual} section ‘title’ in manual @ref{,,title, file name, manual} (file name) section ‘title’ in manual @ref{,,,file name,manual} (file name) manual

    @inforef{,cross ref name } @inforef{,,file name} @inforef{,cross ref name, file name} @inforef{}

    In example.

     
    <
    >
    "
    &
    '
    `
    
    ``simple-double--three---four----''
    
    code: ``simple-double--three---four----'' 
    
    asis: ``simple-double--three---four----'' 
    
    strong: ``simple-double--three---four----'' 
    
    kbd: ``simple-double--three---four----'' 
    
    
    ``simple-double--three---four----''
    
    
    
    @"u ü 
    @"{U} Ü 
    @~n ñ
    @^a â
    @'e é
    @=o ō
    @`i ì
    @'{e} é
    @'{@dotless{i}} í 
    @dotless{i} i
    @dotless{j} j
    @`{@=E} Ē` 
    @l{} ł
    @,{@'C} Ć,
    @,c ç
    @,c@"u çü 
    
    
    @* 
    
    @ followed by a space
     
    @ followed by a tab
     
    @ followed by a new line
     @- 
    @| 
    @: 
    @! !
    @? ?
    @. .
    @@ @
    @} }
    @{ {
    @/ 
    
    foo vs. bar. 
    colon :And something else.
    semi colon ;.
    And ? ?.
    Now ! !@
    but , ,
    
    @TeX TeX
    @LaTeX LaTeX
    @bullet •
    @copyright ©
    @dots …
    @enddots ...
    @equiv ≡
    @error error-->
    @expansion →
    @minus -
    @point ∗
    @print -|
    @result ⇒
    @today a sunny day
    @aa å
    @AA Å
    @ae æ
    @oe œ
    @AE Æ
    @OE Œ
    @o ø
    @O Ø
    @ss ß
    @l ł
    @L Ł
    @exclamdown ¡
    @questiondown ¿
    @pounds £
    @registeredsymbol ®
    @ordf ª
    @ordm º
    @comma ,
    @quotedblleft “
    @quotedblright ”
    @quoteleft ‘
    @quoteright ’
    @quotedblbase „
    @quotesinglbase ‚
    @guillemetleft «
    @guillemetright »
    @guillemotleft «
    @guillemotright »
    @guilsinglleft ‹
    @guilsinglright ›
    @textdegree °
    @euro €
    @arrow →
    @leq ≤
    @geq ≥
    
    @acronym{--a,an accronym} --a (an accronym)
    @acronym{--a} --a
    @abbr{@'E--. @comma{}A., @'Etude Autonome } É--. ,A. (Étude Autonome)
    @abbr{@'E--. @comma{}A.} É--. ,A.
    @asis{--a} --a
    @b{--a} --a
    @cite{--a} --a
    @code{--a} --a
    @command{--a} --a
    @ctrl{--a} --a
    @dfn{--a} --a
    @dmn{--a} --a
    @email{--a,--b} --b
    @email{,--b} --b
    @email{--a} --a
    @emph{--a} --a
    @env{--a} --a
    @file{--a}--a@i{--a} --a
    @kbd{--a} --a
    @key{--a} <--a>
    @math{--a {\frac{1}{2}} @minus{}} --a \frac12 -
    @option{--a}--a@r{--a} --a
    @samp{--a}--a@sc{--a} --A
    @strong{--a} --a
    @t{--a} --a
    @sansserif{--a} --a
    @titlefont{--a} --a
    @indicateurl{--a} <--a>
    @uref{--a,--b} --b
    @uref{--a} --a
    @uref{,--b} --b
    @uref{--a,--b,--c} --c
    @uref{,--b,--c} --c
    @uref{--a,,--c} --c
    @uref{,,--c} --c
    @url{--a,--b} --b
    @url{--a,} --a
    @url{,--b} --b
    @var{--a} --a
    @verb{:--a:} --a
    @verb{:a  < & @ % " --    b:} a  < & @ % " --    b
    @w{} 
    @H{a} a''
    @H{--a} --a''
    @dotaccent{a} ȧ
    @dotaccent{--a} --a.
    @ringaccent{a} å
    @ringaccent{--a} --a*
    @tieaccent{a} a[
    @tieaccent{--a} --a[
    @u{a} ă
    @u{--a} --a(
    @ubaraccent{a} a_
    @ubaraccent{--a} --a_
    @udotaccent{a}@udotaccent{--a} .--a
    @v{a} a<
    @v{--a} --a<
    @,{c} ç
    @,{--c} --c,
    @ogonek{a} ą
    @ogonek{--a} --a;
    @footnote{in footnote} (3)
    @footnote{in footnote2} (4)
    
    @image{f--ile} [ f--ile ]
    @image{f--ile,l--i} [ f--ile ]
    @image{f--ile,,l--e} [ f--ile ]
    @image{f--ile,,,alt} [ alt ]
    @image{f--ile,,,,e-d-xt} [ f--ile ]
    @image{f--ile,aze,az,alt,e--xt} [ alt ]
    @image{f-ile,aze,,a--lt} [ a–lt ]
    @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} [ alt ]
    
    
    
    
    @clicksequence{click @click{} A} click → A
    After clickstyle ⇒
    @clicksequence{click @click{} A} click ⇒ A
    
    
    A quot---ation
    
    Note: A Note
    
    note: A note
    
    Caution: Caution
    
    Important: Important
    
    Tip: a Tip
    
    Warning: a Warning.
    
    something é TeX: The something é TeX is here.
    
    @ at the end of line  A @ at the end of the @quotation line.
    
    something, other thing: something, other thing
    
    Note, the note: Note, the note
    
    Empty: 
    : 
    
    : 
    A small quot---ation
    
    Note: A small Note
    
    something, other thing: something, other thing
    
    •  i--temize
      
    •  +  i--tem +
      
    •  b--ullet
      
    • -
       minu--s
      
    •  e--mph item
      
    •  after emph  e--mph item
      
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
    mu--ltitable headitem
    another tab
    mu--ltitable item
    multitable tab
    mu--ltitable item 2
    multitable tab 2
    
    lone mu--ltitable item
    truc
    bidule
     
    e--xample  some
       text
    
     
    s--mallexample
    
     
    d--isplay
    
     
    s--malldisplay
    
     
    l--isp
    
     
    s--malllisp
    
     
    f--ormat
    
     
    s--mallformat
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    cate--gory: de--ffn_name ar--guments more args even more so
    def--fn
    
     
    
    fset: i a g
    cmde: truc
    Command: log trap
    Command: log trap1
    Command: log trap2
    cmde: id ule truc
    cmde2: id ‘i’ ule truc
    id ‘i’ ule:
    :
    aaa:
    :
    :
    : machin
    : bidule machin
    truc: machin
    truc:
    truc: followed by a comment
    truc:
    :
    truc: a b c d e f g h i
    truc: deffnx before end deffn
    empty: deffn
    empty: deffn with deffnx
    empty: deffnx
    fset: i a g
    cmde: truc
    text in def item for second def item
    
    c--ategory: d--efvr_name
    d--efvr
    
    c--ategory: t--ype d--eftypefn_name a--rguments...
    d--eftypefn
    
    c--ategory on c--lass: t--ype d--eftypeop_name a--rguments...
    d--eftypeop
    
    c--ategory: t--ype d--eftypevr_name
    d--eftypevr
    
    c--ategory of c--lass: d--efcv_name
    d--efcv
    
    c--ategory on c--lass: d--efop_name a--rguments...
    d--efop
    
    c--ategory: d--eftp_name a--ttributes...
    d--eftp
    
    Function: d--efun_name a--rguments...
    d--efun
    
    Macro: d--efmac_name a--rguments...
    d--efmac
    
    Special Form: d--efspec_name a--rguments...
    d--efspec
    
    Variable: d--efvar_name argvar argvar1
    d--efvar
    
    User Option: d--efopt_name
    d--efopt
    
    Function: t--ype d--eftypefun_name a--rguments...
    d--eftypefun
    
    Variable: t--ype d--eftypevar_name
    d--eftypevar
    
    Instance Variable of c--lass: d--efivar_name
    d--efivar
    
    Instance Variable of c--lass: t--ype d--eftypeivar_name
    d--eftypeivar
    
    Method on c--lass: d--efmethod_name a--rguments...
    d--efmethod
    
    Method on c--lass: t--ype d--eftypemethod_name a--rguments...
    d--eftypemethod
    
    @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} See cross r---ef name@: (file n---ame@)c---hapter@ section `t---itle@' in ma---nual@.
    @ref{chapter, cross ref name, title, file name, manual} cross ref name: (file name)chapter section `title' in manual
    @pxref{chapter, cross ref name, title, file name, manual} see cross ref name: (file name)chapter section `title' in manual
    @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter
    
    @ref{chapter} chapter
    @xref{chapter} See section chapter.
    @pxref{chapter} see section chapter
    @ref{s--ect@comma{}ion} A section
    
    @ref{s--ect@comma{}ion, a @comma{} in cross
    ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name }
    a , in cross ref: (a comma, in file)s--ect,ion section `a comma, in title' in a , in manual name
    
    @ref{chapter,cross ref name} cross ref name
    @ref{chapter,,title} title
    @ref{chapter,,,file name} (file name)chapter
    @ref{chapter,,,,manual} section `chapter' in manual
    @ref{chapter,cross ref name,title,} title
    @ref{chapter,cross ref name,,file name} cross ref name: (file name)chapter
    @ref{chapter,cross ref name,,,manual} section `chapter' in manual
    @ref{chapter,cross ref name,title,file name} cross ref name: (file name)chapter
    @ref{chapter,cross ref name,title,,manual} section `title' in manual
    @ref{chapter,cross ref name,title, file name, manual} cross ref name: (file name)chapter section `title' in manual
    @ref{chapter,,title,file name} (file name)chapter
    @ref{chapter,,title,,manual} section `title' in manual
    @ref{chapter,,title, file name, manual} (file name)chapter section `title' in manual
    @ref{chapter,,,file name,manual} (file name)chapter section `chapter' in manual
    
    
    @ref{(pman)anode,cross ref name} cross ref name: (pman)anode
    @ref{(pman)anode,,title} (pman)anode
    @ref{(pman)anode,,,file name} (file name)anode
    @ref{(pman)anode,,,,manual} (pman)anode section `anode' in manual
    @ref{(pman)anode,cross ref name,title,} cross ref name: (pman)anode
    @ref{(pman)anode,cross ref name,,file name} cross ref name: (file name)anode
    @ref{(pman)anode,cross ref name,,,manual} cross ref name: (pman)anode section `anode' in manual
    @ref{(pman)anode,cross ref name,title,file name} cross ref name: (file name)anode
    @ref{(pman)anode,cross ref name,title,,manual} cross ref name: (pman)anode section `title' in manual
    @ref{(pman)anode,cross ref name,title, file name, manual} cross ref name: (file name)anode section `title' in manual
    @ref{(pman)anode,,title,file name} (file name)anode
    @ref{(pman)anode,,title,,manual} (pman)anode section `title' in manual
    @ref{(pman)anode,,title, file name, manual} (file name)anode section `title' in manual
    @ref{(pman)anode,,,file name,manual} (file name)anode section `anode' in manual
    
    
    @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter
    @inforef{chapter} 
    @inforef{chapter, cross ref name} 
    @inforef{chapter,,file name} See (file name)chapter
    @inforef{node, cross ref name, file name} See cross ref name: (file name)node
    @inforef{node} 
    @inforef{node, cross ref name} 
    @inforef{node,,file name} See (file name)node
    @inforef{chapter, cross ref name, file name, spurious arg} See cross ref name: (file name, spurious arg)chapter
    
    @inforef{s--ect@comma{}ion, a @comma{} in cross
    ref, a comma@comma{} in file}
    See a , in cross ref: (a comma, in file)s--ect,ion
    
    
    
    • a
    l--ine
    
    a
    b
    l--ine
    
    - a
    - b
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    \input texinfo @c -*-texinfo-*-
    
    @setfilename simplest.info
    
    @node Top
    
    This is a very simple texi manual @  <>.
    
    @bye
    
    in verbatim ''
    
    
    html ''
    
    
    
    majorheading
    
    
    chapheading
    
    
    heading
    
    
    subheading
    
    
    subsubheading
    
    
    @acronym{--a,an accronym @comma{} @enddots{}} --a (an accronym , ...)
    @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } É--. ,A. (Étude--, Autonome)
    @abbr{@'E--. @comma{}A.} É--. ,A.
    
    @math{--a@minus{} {\frac{1}{2}}} --a- \frac12
    
    @image{f-ile,,,alt@verb{:jk _" %}} [ altjk _" %@ ]
    @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} [ jk _" %@ in b " ]
    @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} [ altjk _" %@ ]
    
    
    
    
    Somehow invalid use of @,:
    
    @, ,
    
    
    @,@"u @,"u
    
    Invalid use of @':
    
    @' '
    
    
    @'@"u @'"u
    
    @dotless{truc} truc
    @dotless{ij} ij
    @dotless{--a} --a
    @dotless{a} a
    
    @TeX, but without brace TeX
    
    @# @#
    
    @w{--a} --a
    
    @image{,1--xt} 
    @image{,,2--xt} 
    @image{,,,3--xt} 
    
    
    
    
    • after emph  e--mph item
      
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    fun:
    truc: machin bidule chose and
    truc: machin bidule chose and after
    truc: machin bidule chose and {
    truc: machin bidule chose and { and after
    truc: followed by a comment
    Various deff lines
    
    truc: after a deff item
    @ref{node} @ref{node}
    
    @ref{,cross ref name} @ref{,cross ref name}
    @ref{,,title} @ref{,,title}
    @ref{,,,file name} (file name)
    @ref{,,,,manual} manual
    @ref{node,cross ref name} @ref{node,cross ref name}
    @ref{node,,title} @ref{node,,title}
    @ref{node,,,file name} (file name)node
    @ref{node,,,,manual} section `node' in manual
    @ref{node,cross ref name,title,} @ref{node,cross ref name,title,}
    @ref{node,cross ref name,,file name} cross ref name: (file name)node
    @ref{node,cross ref name,,,manual} section `node' in manual
    @ref{node,cross ref name,title,file name} cross ref name: (file name)node
    @ref{node,cross ref name,title,,manual} section `title' in manual
    @ref{node,cross ref name,title, file name, manual} cross ref name: (file name)node section `title' in manual
    @ref{node,,title,file name} (file name)node
    @ref{node,,title,,manual} section `title' in manual
    @ref{chapter,,title, file name, manual} (file name)chapter section `title' in manual
    @ref{node,,title, file name, manual} (file name)node section `title' in manual
    @ref{node,,,file name,manual} (file name)node section `node' in manual
    @ref{,cross ref name,title,} @ref{,cross ref name,title,}
    @ref{,cross ref name,,file name} cross ref name: (file name)
    @ref{,cross ref name,,,manual} manual
    @ref{,cross ref name,title,file name} cross ref name: (file name)
    @ref{,cross ref name,title,,manual} section `title' in manual
    @ref{,cross ref name,title, file name, manual} cross ref name: (file name) section `title' in manual
    @ref{,,title,file name} (file name)
    @ref{,,title,,manual} section `title' in manual
    @ref{,,title, file name, manual} (file name) section `title' in manual
    @ref{,,,file name,manual} (file name) manual
    
    @inforef{,cross ref name } 
    @inforef{,,file name} 
    @inforef{,cross ref name, file name} 
    @inforef{} 
    
    
    

    cp

    Jump to:   "   -   .   ?  
    A   I   T  
    Index Entry Section

    "
    Top section
    Top section
    subsubheading
    subsubheading

    -
    –optionTop section
    –optionTop section
    –optionsubsubheading
    –optionsubsubheading

    .
    .subsubheading

    ?
    ?subsubheading

    A
    asubsubheading

    I
    index entry between item and itemxTop section
    index entry between item and itemxTop section
    index entry between item and itemxsubsubheading
    index entry between item and itemxsubsubheading
    index entry within deffnTop section
    index entry within deffnTop section
    index entry within deffnsubsubheading
    index entry within deffnsubsubheading
    index entry within itemizeTop section
    index entry within itemizeTop section
    index entry within itemizesubsubheading
    index entry within itemizesubsubheading
    index entry within multitableTop section
    index entry within multitableTop section
    index entry within multitablesubsubheading
    index entry within multitablesubsubheading

    T
    t–rucsubsubheading
    T–rucsubsubheading

    Jump to:   "   -   .   ?  
    A   I   T  

    fn

    Jump to:   "   -   .   ?  
    A   B   D   F   I   L   M   T  
    Index Entry Section

    "
    ``Top section
    ``Top section
    ``subsubheading
    ``subsubheading

    -
    --foptionTop section
    --foptionTop section
    --foptionsubsubheading
    --foptionsubsubheading

    .
    .subsubheading

    ?
    ?subsubheading

    A
    aTop section
    aTop section
    aTop section
    aTop section
    asubsubheading
    asubsubheading
    asubsubheading
    asubsubheading
    asubsubheading
    afterTop section
    afterTop section
    aftersubsubheading
    aftersubsubheading

    B
    bTop section
    bTop section
    bsubsubheading
    bsubsubheading
    bidule machinTop section
    bidule machinTop section
    bidule machinsubsubheading
    bidule machinsubsubheading

    D
    d--effn_nameTop section
    d--effn_nameTop section
    d--effn_namesubsubheading
    d--effn_namesubsubheading
    d--efmac_nameTop section
    d--efmac_nameTop section
    d--efmac_namesubsubheading
    d--efmac_namesubsubheading
    d--efmethod_name on c--lassTop section
    d--efmethod_name on c--lassTop section
    d--efmethod_name on c--lasssubsubheading
    d--efmethod_name on c--lasssubsubheading
    d--efop_name on c--lassTop section
    d--efop_name on c--lassTop section
    d--efop_name on c--lasssubsubheading
    d--efop_name on c--lasssubsubheading
    d--efspec_nameTop section
    d--efspec_nameTop section
    d--efspec_namesubsubheading
    d--efspec_namesubsubheading
    d--eftypefn_nameTop section
    d--eftypefn_nameTop section
    d--eftypefn_namesubsubheading
    d--eftypefn_namesubsubheading
    d--eftypefun_nameTop section
    d--eftypefun_nameTop section
    d--eftypefun_namesubsubheading
    d--eftypefun_namesubsubheading
    d--eftypemethod_name on c--lassTop section
    d--eftypemethod_name on c--lassTop section
    d--eftypemethod_name on c--lasssubsubheading
    d--eftypemethod_name on c--lasssubsubheading
    d--eftypeop_name on c--lassTop section
    d--eftypeop_name on c--lassTop section
    d--eftypeop_name on c--lasssubsubheading
    d--eftypeop_name on c--lasssubsubheading
    d--efun_nameTop section
    d--efun_nameTop section
    d--efun_namesubsubheading
    d--efun_namesubsubheading
    de--ffn_nameTop section
    de--ffn_nameTop section
    de--ffn_namesubsubheading
    de--ffn_namesubsubheading
    deffnTop section
    deffnTop section
    deffnTop section
    deffnTop section
    deffnsubsubheading
    deffnsubsubheading
    deffnsubsubheading
    deffnsubsubheading
    deffnxTop section
    deffnxTop section
    deffnxTop section
    deffnxTop section
    deffnxsubsubheading
    deffnxsubsubheading
    deffnxsubsubheading
    deffnxsubsubheading

    F
    followedTop section
    followedTop section
    followedTop section
    followedTop section
    followedsubsubheading
    followedsubsubheading
    followedsubsubheading
    followedsubsubheading

    I
    iTop section
    iTop section
    iTop section
    iTop section
    isubsubheading
    isubsubheading
    isubsubheading
    isubsubheading
    id ‘i’ uleTop section
    id ‘i’ uleTop section
    id ‘i’ ulesubsubheading
    id ‘i’ ulesubsubheading
    id uleTop section
    id uleTop section
    id ulesubsubheading
    id ulesubsubheading

    L
    log trapTop section
    log trapTop section
    log trapsubsubheading
    log trapsubsubheading
    log trap1Top section
    log trap1Top section
    log trap1subsubheading
    log trap1subsubheading
    log trap2Top section
    log trap2Top section
    log trap2subsubheading
    log trap2subsubheading

    M
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading

    T
    t--rucsubsubheading
    T--rucsubsubheading
    trucTop section
    trucTop section
    trucTop section
    trucTop section
    trucsubsubheading
    trucsubsubheading
    trucsubsubheading
    trucsubsubheading

    Jump to:   "   -   .   ?  
    A   B   D   F   I   L   M   T  

    vr

    Jump to:   A   B   D  
    Index Entry Section

    A
    aTop section
    aTop section
    asubsubheading
    asubsubheading

    B
    bTop section
    bTop section
    bsubsubheading
    bsubsubheading

    D
    d--efcv_nameTop section
    d--efcv_nameTop section
    d--efcv_namesubsubheading
    d--efcv_namesubsubheading
    d--efivar_nameTop section
    d--efivar_nameTop section
    d--efivar_namesubsubheading
    d--efivar_namesubsubheading
    d--efopt_nameTop section
    d--efopt_nameTop section
    d--efopt_namesubsubheading
    d--efopt_namesubsubheading
    d--eftypeivar_name of c--lassTop section
    d--eftypeivar_name of c--lassTop section
    d--eftypeivar_name of c--lasssubsubheading
    d--eftypeivar_name of c--lasssubsubheading
    d--eftypevar_nameTop section
    d--eftypevar_nameTop section
    d--eftypevar_namesubsubheading
    d--eftypevar_namesubsubheading
    d--eftypevr_nameTop section
    d--eftypevr_nameTop section
    d--eftypevr_namesubsubheading
    d--eftypevr_namesubsubheading
    d--efvar_nameTop section
    d--efvar_nameTop section
    d--efvar_namesubsubheading
    d--efvar_namesubsubheading
    d--efvr_nameTop section
    d--efvr_nameTop section
    d--efvr_namesubsubheading
    d--efvr_namesubsubheading

    Jump to:   A   B   D  

    ky

    pg

    tp

    Jump to:   D  
    Index Entry Section

    D
    d--eftp_nameTop section
    d--eftp_nameTop section
    d--eftp_namesubsubheading
    d--eftp_namesubsubheading

    Jump to:   D  

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. chapter

    (5)

     

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 A section


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.1 subsection


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.1.1 subsubsection “simple-double–three—four—-”


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. chapter 2

    Jump to:   "   -   .   ?  
    A   I   T  
    Index Entry Section

    "
    Top section
    Top section
    subsubheading
    subsubheading

    -
    –optionTop section
    –optionTop section
    –optionsubsubheading
    –optionsubsubheading

    .
    .subsubheading

    ?
    ?subsubheading

    A
    asubsubheading

    I
    index entry between item and itemxTop section
    index entry between item and itemxTop section
    index entry between item and itemxsubsubheading
    index entry between item and itemxsubsubheading
    index entry within deffnTop section
    index entry within deffnTop section
    index entry within deffnsubsubheading
    index entry within deffnsubsubheading
    index entry within itemizeTop section
    index entry within itemizeTop section
    index entry within itemizesubsubheading
    index entry within itemizesubsubheading
    index entry within multitableTop section
    index entry within multitableTop section
    index entry within multitablesubsubheading
    index entry within multitablesubsubheading

    T
    t–rucsubsubheading
    T–rucsubsubheading

    Jump to:   "   -   .   ?  
    A   I   T  
    Jump to:   "   -   .   ?  
    A   B   D   F   I   L   M   T  
    Index Entry Section

    "
    ``Top section
    ``Top section
    ``subsubheading
    ``subsubheading

    -
    --foptionTop section
    --foptionTop section
    --foptionsubsubheading
    --foptionsubsubheading

    .
    .subsubheading

    ?
    ?subsubheading

    A
    aTop section
    aTop section
    aTop section
    aTop section
    asubsubheading
    asubsubheading
    asubsubheading
    asubsubheading
    asubsubheading
    afterTop section
    afterTop section
    aftersubsubheading
    aftersubsubheading

    B
    bTop section
    bTop section
    bsubsubheading
    bsubsubheading
    bidule machinTop section
    bidule machinTop section
    bidule machinsubsubheading
    bidule machinsubsubheading

    D
    d--effn_nameTop section
    d--effn_nameTop section
    d--effn_namesubsubheading
    d--effn_namesubsubheading
    d--efmac_nameTop section
    d--efmac_nameTop section
    d--efmac_namesubsubheading
    d--efmac_namesubsubheading
    d--efmethod_name on c--lassTop section
    d--efmethod_name on c--lassTop section
    d--efmethod_name on c--lasssubsubheading
    d--efmethod_name on c--lasssubsubheading
    d--efop_name on c--lassTop section
    d--efop_name on c--lassTop section
    d--efop_name on c--lasssubsubheading
    d--efop_name on c--lasssubsubheading
    d--efspec_nameTop section
    d--efspec_nameTop section
    d--efspec_namesubsubheading
    d--efspec_namesubsubheading
    d--eftypefn_nameTop section
    d--eftypefn_nameTop section
    d--eftypefn_namesubsubheading
    d--eftypefn_namesubsubheading
    d--eftypefun_nameTop section
    d--eftypefun_nameTop section
    d--eftypefun_namesubsubheading
    d--eftypefun_namesubsubheading
    d--eftypemethod_name on c--lassTop section
    d--eftypemethod_name on c--lassTop section
    d--eftypemethod_name on c--lasssubsubheading
    d--eftypemethod_name on c--lasssubsubheading
    d--eftypeop_name on c--lassTop section
    d--eftypeop_name on c--lassTop section
    d--eftypeop_name on c--lasssubsubheading
    d--eftypeop_name on c--lasssubsubheading
    d--efun_nameTop section
    d--efun_nameTop section
    d--efun_namesubsubheading
    d--efun_namesubsubheading
    de--ffn_nameTop section
    de--ffn_nameTop section
    de--ffn_namesubsubheading
    de--ffn_namesubsubheading
    deffnTop section
    deffnTop section
    deffnTop section
    deffnTop section
    deffnsubsubheading
    deffnsubsubheading
    deffnsubsubheading
    deffnsubsubheading
    deffnxTop section
    deffnxTop section
    deffnxTop section
    deffnxTop section
    deffnxsubsubheading
    deffnxsubsubheading
    deffnxsubsubheading
    deffnxsubsubheading

    F
    followedTop section
    followedTop section
    followedTop section
    followedTop section
    followedsubsubheading
    followedsubsubheading
    followedsubsubheading
    followedsubsubheading

    I
    iTop section
    iTop section
    iTop section
    iTop section
    isubsubheading
    isubsubheading
    isubsubheading
    isubsubheading
    id ‘i’ uleTop section
    id ‘i’ uleTop section
    id ‘i’ ulesubsubheading
    id ‘i’ ulesubsubheading
    id uleTop section
    id uleTop section
    id ulesubsubheading
    id ulesubsubheading

    L
    log trapTop section
    log trapTop section
    log trapsubsubheading
    log trapsubsubheading
    log trap1Top section
    log trap1Top section
    log trap1subsubheading
    log trap1subsubheading
    log trap2Top section
    log trap2Top section
    log trap2subsubheading
    log trap2subsubheading

    M
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading

    T
    t--rucsubsubheading
    T--rucsubsubheading
    trucTop section
    trucTop section
    trucTop section
    trucTop section
    trucsubsubheading
    trucsubsubheading
    trucsubsubheading
    trucsubsubheading

    Jump to:   "   -   .   ?  
    A   B   D   F   I   L   M   T  

    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)

    in footnote

    (2)

    in footnote2

    (1)

    in footnote

    (2)

    in footnote2

    (3)

    in footnote

    (4)

    in footnote2

    (5)

    in footnote


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    Short Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/coverage/imbrications.texi0000644000175000017500000001163511264347123023371 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename imbrications.info @syncodeindex pg cp @node Top,First node,(dir) @top @menu * First node:: node 1 * name:Second node. node 2 @end menu @c * node in table:: @c * node in example:: @c * node in flushright:: @c *node in defun -> bug @node First node @chapter first node chapter @cindex elem @tex $$ \chi^2 = \sum_{i=1}^N \left(y_i - (a + b x_i) \over \sigma_i\right)^2 $$ @end tex @node Second node @chapter second Some text @deffn Function buffer-end flag A nice function makeinfo accepts a menu within defun but it isn't possible to follow it @menu * node within defun menu:: @end menu @c makeinfo accepts the following but cannot properly close defun @c @node node within defun menu @c @section within menu end of the function @end deffn @node node within defun menu @section the node is within menu Test @@option inside @@emph Foo @emph{emphasized and referring to @option{--some} option}. Table imbricated in code:@* @code{ in code @table @emph @item line text @end table } ref with uref within:@* @ref{(file)node, cross ref with uref @uref{href://http/myhost.com/index.html,uref1}, title with uref2 @uref{href://http/myhost.com/index2.html,uref2}, info file with uref3 @uref{href://http/myhost.com/index3.html,uref3}, printed manual with uref4 @uref{href://http/myhost.com/index4.html,uref4}} footnote with code within:@* @footnote{ in footnote @code{par1 par2}} Refs in samp:@* Refs without samp: empty section name see @ref{other node}. With a chapter: @ref{Second node}. A ref in samp to a node with empty section name: see @samp{@ref{other node}}. Same but to a regular node associated with a chapter: see @samp{@ref{Second node}}. code with table and example within:@* @code{ in code @table @emph @item line in code and table @example in example @end example @end table } @table @bullet @item item @c @node node in table @c @chapter in table @end table @example @c @node node in example @c @chapter example an example @end example @cindex other entry @example @html Some html some code. @end html after html in example two line breaks Tex doesn't like math in @@example @ifnottex @tex $$ \chi^2 = \sum_{i=1}^N \left(y_i - (a + b x_i) \over \sigma_i\right)^2 $$ @end tex @end ifnottex @cindex index in example Now a content within example @contents @printindex cp printindex works but cannot be followed in info, in TeX the result is quite strange. and now yes---now and ``so''. @end example after example and now yes---now and ``so''. @flushright is the text flushed right ? @c @node node in flushright @c @chapter flushright @end flushright @flushright @example text flushed right and then example it should be flushed @end example @end flushright @example @flushright example and then text flushed right @end flushright @end example @display simple displayed text @end display a display within example @example example @display display @end display @end example @cartouche A cartouched text @end cartouche A cartouche within example @example example @cartouche A cartouched text @end cartouche @end example An example with table, multitable, quotation, enumerate @example a table within example @table @bullet @item item text @end table a multitable @multitable {a} {b} @item beginnin @item @dots{} @tab a new column no splitting ??????????????????? @end multitable a menu @menu * node menu:: a node in menu in menu comment html @html cite me a cite in html @end html A ref in samp in menu comment to a node with empty section name: @samp{@ref{other node}}. Same but to a regular node associated with a chapter: @samp{@ref{Second node}}. * a menu name:other node. description of other node @end menu A quotation @quotation This is a pre quotation @end quotation Enumerate @enumerate @item first item @item second item still second @end enumerate @end example example with deff-like commands @example deffs @defun {my def} args @var{arg} @dots{} @defunx {other def} no args @deffnx {type} {name} and now the args @defvar {variables} variable-name @defvarx {variables too} other-variable THis is the defvar A table within the def @table @asis @item item text more text @item second item @end table explanation @end defvar @end deffn @end defun @end example table within display within example @example @display @table @asis @item item Line @end table @end display @end example table within example within display @display @example @table @asis @item item Line @end table @end example @end display @node node menu @unnumberedsubsec @node other node @unnumberedsubsec @contents @bye texi2html-1.82/test/coverage/simplest.texi0000644000175000017500000000016711264347123022544 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename simplest.info @node Top This is a very simple texi manual @ <>. @bye texi2html-1.82/test/coverage/tests.txt0000644000175000017500000000034711264347123021714 0ustar flichtenheldflichtenheldtexi comments.texi texi formatting.texi texi pass0_macros.texi texi float.texi texi imbrications.texi comments comments.texi formatting formatting.texi pass0_macros pass0_macros.texi float float.texi imbrications imbrications.texi texi2html-1.82/test/coverage/f--ile.e--xt0000644000175000017500000000000011264347123021720 0ustar flichtenheldflichtenheldtexi2html-1.82/test/coverage/comments.texi0000644000175000017500000001407711264347123022536 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename comments.info @hyphenation{some-where be-low may-be to-morow } @node Top @top @subheading Comment like: Text line followed by a comment on the same line and another below @c comment @c comment Text line after the comment followed by a comment @comment c Text line after the text line followed by the comment. Comment at the end of the line @c comment Example with comments 2 lines @example line @c comment second line @c comment @end example Example with comments 1 line @example line @c comment @end example No comments @example line @end example The same but with oddfooting instead of comment: Text line followed by a comment on the same line and another below @oddfooting comment @oddfooting some text ignored Text line after the comment followed by a comment @oddfooting c Text line after the text line followed by the comment. @@pagesizes @pagesizes 200mm,150mm following @@pagesizes arg @@afourpaper @afourpaper on line following afourpaper @@smallbook @smallbook on line following smallbook @@headings @headings on line following headings @@oddfooting @oddfooting on line following oddfooting @@everyheading @everyheading on line following everyheading @@everyfooting @everyfooting on line following everyfooting @@evenheading @evenheading on line following evenheading @@evenfooting @evenfooting on line following evenfooting @@oddheading @oddheading on line following @ifnottex @@need @need 0.1 on line following @end ifnottex @@need @need 0.1 @@setchapternewpage @setchapternewpage on line following setchapternewpage @@raisesections @raisesections on line following raisesections @@lowersections @lowersections on line following lowersections @c @@kbdinputstyle @kbdinputstyle wrong arg on line following kbdinputstyle @ifnottex @@kbdinputstyle code @kbdinputstyle code something @end ifnottex @@afourpaper @afourpaper on line following afourpaper @@afourlatex @afourlatex on line following afourlatex @@afourwide @afourwide on line following afourwide @c tex error: Use of \ doesn't match its definition. @ifnottex @@definfoenclose phoo,//,\\ @definfoenclose phoo,//,\\ @phoo{bar} @end ifnottex @@definfoenclose phi,:,: @definfoenclose phi,:,: @c this is required @iftex @global@let@phi=@i @end iftex @phi{bar} @strong{very strong} @definfoenclose strong,(strong:,:) @strong{ is it really strong? } Makeinfo ignore @@kbdinputstyle: @kbdinputstyle code @kbd{truc} @example @kbd{example} @end example @subheading ignore arg Commands doesn't accept anything after a non numerical arg on the line and ignore things after a numerical arg @@paragraphindent asis @paragraphindent asis @@paragraphindent 0 @paragraphindent 0 @@paragraphindent none @paragraphindent none @@paragraphindent 4 @paragraphindent 4 @@firstparagraphindent none @firstparagraphindent none @ifnottex @@exampleindent 6 @exampleindent 6 on line following exampleindent @end ifnottex @@exampleindent 6 @exampleindent 6 @@footnotestyle @footnotestyle end @@footnotestyle @footnotestyle separate Special arg for documentencoding. makeinfo complains, not tex @documentencoding @@documentencoding @documentencoding bad encoding name @documentencoding ISO-8859-1 @c accepts on or off @@frenchspacing @frenchspacing on @@frenchspacing @frenchspacing off @c accepts 10 or 11 @@fonttextsize @fonttextsize 10 @c @@fonttextsize @fonttextsize 11 @c accept bottom and top @c tex keeps the line, makeinfo doesn't @@everyheadingmarks @everyheadingmarks bottom on line following everyheadingmarks @c accept false or true @c makeinfo don't care about the arg and remove the remaining of the line @allowcodebreaks false @code{false aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa} @allowcodebreaks true @code{true aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa} @ignore @@ @ on line following @@ @ on line following @@ @ on line following @@ @ on line following @end ignore @subheading command removed And now finalout: Text line followed by finalout on the same line and another below @finalout @finalout Text line after the finalout followed by a fianlout @finalout Text line after the text line followed by the finalout. Test text after finalout @finalout a word after finalout Line after finalout @@page @page @@noindent @noindent @@refill @refill something @noindent noindent at beginning of line @noindent noindent on the preceding line @noindent noindent after space at beginning of line @page page at beginning of line @page After page on it's own line. @@page @page @@noindent @noindent @@refill @refill @@novalidate @novalidate something @@contents @contents something @ignore @@ @ arg @@ @ arg @@ @ arg @@ @ arg @end ignore @subheading special Only valid between iftex: @c @@vskip @vskip @@cropmarks @cropmarks Unknown ??? @c @@fillbreak @fillbreak eol @@exdent @exdent line after exdent And now sp: Text line followed by a comment on the same line and another below @sp 1 @sp 2 Text line after the comment followed by a comment @sp 1 Text line after the text line followed by the comment. @ifnottex @sp 2 a number after sp @end ifnottex @clickstyle @result A @click{} (result). @ifset texi2html @c invalid, makeinfo warns about @result needing braces @c others are also invalid @clickstyle @result on the same line A @click{} (result on the same line). @clickstyle @nocmd A @click{} (nocmd). @clickstyle something A @click{} (something). @end ifset Menu: @menu * node:: * bidule:: * bidule2:: * undefined:: @end menu @node node @chapter chapter @menu * truc:: @end menu @node truc @section section first @@contents @contents line following first content second @@contents @contents line following second content Third content on the following line on his own @contents Line following contents @node bidule @chapter bidule @@shortcontents @shortcontents eol @@shortcontents @shortcontents eol @@summarycontents @summarycontents line following summarycontents @node bidule2 @chapter last @c no ref ignored because of novalidate @ref{machin} @bye texi2html-1.82/test/coverage/formatting.texi0000644000175000017500000000267611264347123023065 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename formatting.info @node Top @top Top section @menu * chapter:: chapter Menu comment * description:chapter2. Chapter 2 @end menu @include coverage_macro.texi @copying In copying @mymacro{} @end copying @titlepage @title title --a @subtitle formatting subtitle --a @subtitle subtitle 2 --a @author author1 --a with accents in name T@'e@,ca @author author2 --a In titlepage @mymacro Insercopying in titlepage @insertcopying @end titlepage Insertcopying in normal text @insertcopying Normal text @mymacro{} In example. @example @mymacro{} @end example @cindex t--ruc @cindex T--ruc @cindex . @cindex ? @cindex a @findex t--ruc @findex T--ruc @findex . @findex ? @findex a cp @printindex cp fn @printindex fn vr @printindex vr ky @printindex ky pg @printindex pg tp @printindex tp @node chapter @chapter chapter @footnote{in footnote} @format @menu * s--ect@comma{}ion:: s--ect@comma{}ion Menu comment ``simple-double--three---four----''@* @end menu @end format @node s--ect@comma{}ion @section A section @menu * subsection:: @end menu @node subsection @subsection subsection @menu * subsubsection ``simple-double--three---four----'':: @end menu @anchor{anchor} @node subsubsection ``simple-double--three---four----'' @subsubsection subsubsection ``simple-double--three---four----'' @node chapter2 @centerchap chapter 2 @printindex cp @printindex fn @contents @shortcontents @bye texi2html-1.82/test/coverage/Makefile.am0000644000175000017500000000044311264347123022042 0ustar flichtenheldflichtenheldEXTRA_DIST = formatting.texi comments.texi pass0_macros.texi float.texi \ imbrications.texi \ f--ile.e--xt f--ile.jpg simplest.texi tests.txt res DISTCLEANFILES = l2h_tmp_dir.init tests.log tests.out distclean-local: rm -rf out diffs dist-hook: rm -rf `find $(distdir)/res -name CVS` texi2html-1.82/test/coverage/pass0_macros.texi0000644000175000017500000000156711264347123023303 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top,First node,(dir) @top pass0 macro @menu * First node:: node 1 @end menu @node First node,,Top,Top @chapter first node chapter before syncodeindex @syncodeindex cp fn syncodeindex on its line @syncodeindex cp fn line following syncodeindex One more thing following syncodeindex @syncodeindex cp fn truc line following syncodeindex cp fn truc documentlanguage @documentlanguage en documentlanguage on its line @documentlanguage en line following documentlanguage double documentlanguage on its line @documentlanguage en @documentlanguage en line following documentlanguage @documentlanguage en after documentlanguage definedx truc @defindex truc after definedx chose machin @defindex chose machin after @trucindex index truc @c @choseindex index @c @machinindex machin Before bye @bye on bye line after bye texi2html-1.82/test/misc/0000755000175000017500000000000012076571376017160 5ustar flichtenheldflichtenheldtexi2html-1.82/test/misc/testkb.texi0000644000175000017500000001734411264347115021346 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename testkb.info @documentlanguage de @documentencoding ASCII @setchapternewpage on @footnotestyle separate @c @ifset shorttitlepage-enabled @shorttitlepage Cfg @end ifset @titlepage @title Test for @@def stuff @end titlepage @c ---------------------------------------------------------------------------- @node Top,Overview,,(dir) @chapter Test 1 Hier kann eine Erkl@"arung zum Thema stehen oder auch nicht. Noch mehr erkl@"arungen zu dem Thema. @menu * Overview::. Methode four. @end menu @c ---------------------------------------------------------------------------- @node Overview,,Top,Top @chapter Class Here you can read many things I need for this documentation. But more and more of this exploration can be done here. @section Overview Das ist ein Test @r{Roman Text in einer Umgebung} Hier ist normaler Text. Hier sollte keine Einr@"uckung stattfinden. Sondern eher ein normaler umbruch. Somit kann es hier wieder weitergehen. Oder sehe ich da was falsch. Hier ist normaler Text. Hier sollte keine Einr@"uckung stattfinden. Sondern eher ein normaler umbruch. Somit kann es hier wieder weitergehen. Oder sehe ich da was falsch. Hier ist normaler Text. Hier sollte keine Einr@"uckung stattfinden. Sondern eher ein normaler umbruch. Somit kann es hier wieder weitergehen. Oder sehe ich da was falsch. Hier ist normaler Text. Hier sollte keine Einr@"uckung stattfinden. Sondern eher ein normaler umbruch. Somit kann es hier wieder weitergehen. Oder sehe ich da was falsch. @defcv dcvKat dcvClass dcvName Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defcv. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defcv. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defcv. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defcv. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defcv. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defcv. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defcv. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defcv. @end defcv @deffn {dfnKat} dfnName (dfnArgumente) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deffn. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deffn. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deffn. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deffn. @itemize @item Erstens @item Zweitens @item Drittens @end itemize Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deffn. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deffn. @sp 2 @example Das ist ein Beispiel in HTML Das ist ein Beispiel in HTML Das ist ein Beispiel in HTML Das ist ein Beispiel in HTML @end example @* Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deffn. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deffn. @end deffn @deffn {dfnKat1} dfnName1 (dfnArgumente11) @deffnx {dfnKat2} dfnName2 (dfnArgumente12) @deffnx {dfnKat3} dfnName3 (dfnArgumente13) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deffn. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deffn. @end deffn @defivar {divClass} {divExemplarVar} Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defivar. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defivar. @end defivar @defmac dmcName (dmcArgumente) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defmac. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defmac. @end defmac @defmethod {dmeClass} dmName (dmArguments) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defmethod. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defmethod. @end defmethod @defop {dopKat} {dopClass} dopName (dopArgumente) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defop. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defop. @end defop @defopt {dptName} Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defopt. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defopt. @end defopt @defspec dspName (dspArgument) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defspec. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defspec. @end defspec @deftp {dtpKat} dtpType (dtpA1 dtpA2) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftp. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftp. @end deftp @deftypefn {PUBLIC} int EditLine (int col, int row) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypefn. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypefn. @end deftypefn @deftypefun int FunktionEins (int col, int row) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypefun. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypefun. @end deftypefun @deftypemethod {dtmClass} int dtmName (int col, int row) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypemethod. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypemethod. @end deftypemethod @deftypevar DataType VarName Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypevar. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypevar. @end deftypevar @deftypeivar {dtiv} DataType VarName Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypeivar. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypeivar. @end deftypeivar @deftypevr {dtv} DataType VarName Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypevr. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypevr. @end deftypevr @defun FuntionName (Argumente) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defun. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defun. @end defun @defvar VariablenName Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defvar. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defvar. @end defvar @defvr {dvrKat} dvrName Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defvr. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defvr. @end defvr @deftypeop {dtypeopCat} deftypeopClass deftypeopType deftypeopName deftypeopArgs Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypeop. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypeop. @end deftypeop @appendix Indizes @appendixsec Konzept Index @printindex cp @appendixsec Funktionen Index @printindex fn @appendixsec Programme Index @printindex pg @appendixsec Tasten Index @printindex ky @appendixsec Var Index @printindex vr @contents @bye texi2html-1.82/test/misc/Makefile.in0000644000175000017500000002056711264347115021225 0ustar flichtenheldflichtenheld# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = test/misc DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DATE = @PACKAGE_DATE@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ REQUIRE_DATA_DUMPER = @REQUIRE_DATA_DUMPER@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_DATA_DUMPER = @USE_DATA_DUMPER@ USE_UNICODE = @USE_UNICODE@ USE_UNIDECODE = @USE_UNIDECODE@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ am__leading_dot = @am__leading_dot@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = testkb.texi viper.texi verbatim_html.texi templates.texi \ tests.txt res DISTCLEANFILES = l2h_tmp_dir.init tests.log tests.out all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/misc/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu test/misc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-exec-am: install-html: install-html-am install-info: install-info-am install-man: install-pdf: install-pdf-am install-ps: install-ps-am installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic dist-hook \ distclean distclean-generic distclean-local distdir dvi dvi-am \ html html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am distclean-local: rm -rf out diffs dist-hook: rm -rf `find $(distdir)/res -name CVS` # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: texi2html-1.82/test/misc/res/0000755000175000017500000000000012076571376017751 5ustar flichtenheldflichtenheldtexi2html-1.82/test/misc/res/texi_verbatim_html/0000755000175000017500000000000011264347115023625 5ustar flichtenheldflichtenheldtexi2html-1.82/test/misc/res/texi_verbatim_html/verbatim_html.passtexi0000644000175000017500000003156011264347115030251 0ustar flichtenheldflichtenheldverbatim_html.texi(,2) verbatim_html.texi(,3) @node Top,First node,(dir) verbatim_html.texi(,4) @top Tests verbatim_html.texi(,5) @menu verbatim_html.texi(,6) * First node:: node 1 verbatim_html.texi(,7) * description: node @'{a}. node with braces verbatim_html.texi(,8) * node: (manual)A node. node in another manual verbatim_html.texi(,9) verbatim_html.texi(,10) a verbatim in menu comment @verbatim verbatim on same line than @verbatim verbatim_html.texi(,11) verbatim_html.texi(,12) bidule verbatim_html.texi(,13) verbatim_html.texi(,14) @end verbatim verbatim_html.texi(,15) verbatim_html.texi(,16) * node d@'a:: node without braces verbatim_html.texi(,17) @end menu verbatim_html.texi(,18) verbatim_html.texi(,19) Tests for environments not matching verbatim_html.texi(,20) verbatim_html.texi(,21) @quotation verbatim_html.texi(,22) A quotation verbatim_html.texi(,23) @end cartouche verbatim_html.texi(,24) verbatim_html.texi(,25) @deffn {Function Reference} print_navigation $filehandle verbatim_html.texi(,26) Text verbatim_html.texi(,27) @end deftypefun verbatim_html.texi(,28) verbatim_html.texi(,29) @table verbatim_html.texi(,30) @item item verbatim_html.texi(,31) line verbatim_html.texi(,32) @end vtable verbatim_html.texi(,33) verbatim_html.texi(,34) @table @emph verbatim_html.texi(,35) @item ref verbatim_html.texi(,36) @example verbatim_html.texi(,37) example verbatim_html.texi(,38) @end display verbatim_html.texi(,39) @end table verbatim_html.texi(,40) verbatim_html.texi(,41) verbatim_html.texi(,42) verbatim_html.texi(,43) @node First node verbatim_html.texi(,44) @chapter first node chapter verbatim_html.texi(,45) verbatim_html.texi(,46) ref to a non existing node@ref{bidule}. verbatim_html.texi(,47) verbatim_html.texi(,48) a 2 paragraphs sample @samp{in first paragraph verbatim_html.texi(,49) verbatim_html.texi(,50) in second}. verbatim_html.texi(,51) verbatim_html.texi(,52) a 3 paragraphs sample @samp{in first paragraph verbatim_html.texi(,53) verbatim_html.texi(,54) in second verbatim_html.texi(,55) verbatim_html.texi(,56) in third}. verbatim_html.texi(,57) verbatim_html.texi(,58) Unknown macro @unknown{ first paragraph verbatim_html.texi(,59) verbatim_html.texi(,60) second paragraph} verbatim_html.texi(,61) verbatim_html.texi(,62) @unknown2{ first paragraph verbatim_html.texi(,63) verbatim_html.texi(,64) second paragraph verbatim_html.texi(,65) verbatim_html.texi(,66) third} verbatim_html.texi(,67) verbatim_html.texi(,68) verbatim_html.texi(,69) verbatim_html.texi(,70) Unknown thing @thing{} verbatim_html.texi(,71) verbatim_html.texi(,72) verbatim_html.texi(,73) verbatim_html.texi(,74) A list with bullet verbatim_html.texi(,75) Before itemize, in that case @@bullet isn'right, one needs @@bullet@{@} (in info) @itemize @bullet{} @c segfault <- @item on the same line that itemize verbatim_html.texi(,76) @item on the same line than item verbatim_html.texi(,77) some text verbatim_html.texi(,78) @item verbatim_html.texi(,79) more text @end itemize verbatim_html.texi(,80) verbatim_html.texi(,81) A list with text before first @@item: verbatim_html.texi(,82) verbatim_html.texi(,83) @itemize @bullet verbatim_html.texi(,84) text @item more verbatim_html.texi(,85) text verbatim_html.texi(,86) @end itemize verbatim_html.texi(,87) verbatim_html.texi(,89) a verbatim, not first on the line @verbatim text following @verbatim verbatim_html.texi(,90) verbatim_html.texi(,91) text verbatim_html.texi(,92) verbatim_html.texi(,93) verbatim_html.texi(,94) @@@@ @ text before @end verbatim @end verbatim Text following end verbatim, must be exactly one space verbatim_html.texi(,95) between end and verbatim. @@end verbatim doesn't need to begin at beginning verbatim_html.texi(,96) of line. verbatim_html.texi(,98) verbatim_html.texi(,99) In tex, @@end verbatim must be on its own on a line. verbatim_html.texi(,100) verbatim_html.texi(,101) A verbatim with begin and end on its own line verbatim_html.texi(,102) @verbatim verbatim_html.texi(,103) verbatim @samp{item} verbatim_html.texi(,104) verbatim_html.texi(,105) @end verbatim verbatim_html.texi(,106) verbatim_html.texi(,107) verbatim_html.texi(,109) Now html @html verbatim_html.texi(,110) verbatim_html.texi(,111) some html verbatim_html.texi(,112) @end html bidule ignored verbatim_html.texi(,113) verbatim_html.texi(,114) @@end html begins the line, and there must be exactly one space between @@end verbatim_html.texi(,115) and html and thing following @@end html are ignored in info. Strangely verbatim_html.texi(,116) the empty line following @@end html is ignored but spaces are inserted. verbatim_html.texi(,118) verbatim_html.texi(,119) Now html valid for @TeX{} @html verbatim_html.texi(,120) verbatim_html.texi(,121) some html verbatim_html.texi(,122) @end html verbatim_html.texi(,123) Some text one the line following @@end html verbatim_html.texi(,124) verbatim_html.texi(,125) And html on it's own line verbatim_html.texi(,126) verbatim_html.texi(,127) @html verbatim_html.texi(,128) an html tt verbatim_html.texi(,129) @end html verbatim_html.texi(,130) verbatim_html.texi(,131) verbatim_html.texi(,132) A sc: @sc{ieee}, and another one in example: verbatim_html.texi(,133) @example verbatim_html.texi(,134) @sc{aeei} verbatim_html.texi(,135) @end example verbatim_html.texi(,136) verbatim_html.texi(,140) ignore verbatim_html.texi(,140) bidule ignore verbatim_html.texi(,142) verbatim_html.texi(,143) Ignore is the same than @@html. verbatim_html.texi(,144) verbatim_html.texi(,149) Now ifnothtml on same line verbatim_html.texi(,149) verbatim_html.texi(,150) @@end ifnothtml doesn't need to begin the line, and there can be more verbatim_html.texi(,151) than one space between @@end and ifnothtml, but nothing more verbatim_html.texi(,152) on the line. verbatim_html.texi(,153) verbatim_html.texi(,154) Text on the line before ifnothtml with text following, verbatim_html.texi(,157) Text on the line following ifnothtml. verbatim_html.texi(,158) verbatim_html.texi(,159) Text on the line before ifnothtml without text following, verbatim_html.texi(,163) Text on the line following ifnothtml. verbatim_html.texi(,164) verbatim_html.texi(,165) Text on the line before ifnothtml, verbatim_html.texi(,168) Text on the line following empty ifnothtml verbatim_html.texi(,169) verbatim_html.texi(,170) verbatim_html.texi(,171) @TeX{} has problems with the ftable. verbatim_html.texi(,172) verbatim_html.texi(,174) an ftable on same line @ftable @bullet verbatim_html.texi(,175) @item fun1 verbatim_html.texi(,176) @itemx fun2 verbatim_html.texi(,177) fun1 et fun2 @item more fun verbatim_html.texi(,178) text on the same line than end @end ftable verbatim_html.texi(,179) works like @@ifnothtml verbatim_html.texi(,181) verbatim_html.texi(,182) @item outside format. verbatim_html.texi(,183) verbatim_html.texi(,184) @tab outside format. verbatim_html.texi(,185) verbatim_html.texi(,186) @multitable {@samp{bidule}} verbatim_html.texi(,187) truc before table beginning @item first cell @tab ignored cell verbatim_html.texi(,188) @itemx second row verbatim_html.texi(,189) @end multitable verbatim_html.texi(,190) verbatim_html.texi(,191) before bad multitable @multitable 6 7 verbatim_html.texi(,192) @item 1-1 @tab 1-2 @item@tab@item 3-1 @tab 3-2 @end multitable verbatim_html.texi(,193) verbatim_html.texi(,194) right multitable verbatim_html.texi(,195) @multitable @columnfractions 6 7 verbatim_html.texi(,196) @item 1-1 @tab 1-2 @item@tab@item 3-1 @tab 3-2 @end multitable verbatim_html.texi(,197) verbatim_html.texi(,198) Columnfraction multitable with an ignored cell verbatim_html.texi(,199) @multitable @columnfractions 0.3 0.4 verbatim_html.texi(,200) @item 1-1 @tab 1-2 @tab 1-3 (ignored) verbatim_html.texi(,201) @end multitable verbatim_html.texi(,202) verbatim_html.texi(,203) multitable beginning with @@tab verbatim_html.texi(,204) @multitable {@samp{@verb{.something.}}} {sec} verbatim_html.texi(,205) @tab after first tab verbatim_html.texi(,206) @item new line verbatim_html.texi(,207) @end multitable verbatim_html.texi(,208) verbatim_html.texi(,209) A flushright verbatim_html.texi(,210) @flushright some text flushed right verbatim_html.texi(,211) @end flushright verbatim_html.texi(,212) verbatim_html.texi(,213) A center @center Centered line verbatim_html.texi(,214) And a center after empty line verbatim_html.texi(,215) verbatim_html.texi(,216) @center centered line after empty line verbatim_html.texi(,217) verbatim_html.texi(,218) And a center at end of line @center verbatim_html.texi(,219) And an empty center @center verbatim_html.texi(,220) verbatim_html.texi(,221) An empty flushright @flushright verbatim_html.texi(,222) verbatim_html.texi(,223) @end flushright verbatim_html.texi(,224) verbatim_html.texi(,225) A verb follows: verbatim_html.texi(,226) verbatim_html.texi(,227) @verb{' a little verbatim_html.texi(,228) verbatim_html.texi(,229) very little verbatim_html.texi(,230) verb '} verbatim_html.texi(,231) verbatim_html.texi(,232) another with space as delimiter verbatim_html.texi(,233) verbatim_html.texi(,234) @verb{ what@@ } verbatim_html.texi(,235) verbatim_html.texi(,236) @@verb followed by end of line seems incorrect. verbatim_html.texi(,237) Now verb delimited with *, with an empty line, a comment and @@samp: verbatim_html.texi(,238) verbatim_html.texi(,239) @verb{*with verbatim_html.texi(,240) verb @c comment verbatim_html.texi(,241) verbatim_html.texi(,242) and samp @samp{text } verbatim_html.texi(,243) *} verbatim_html.texi(,244) verbatim_html.texi(,245) verbatim_html.texi(,246) verbatim_html.texi(,247) @node node @'{a}, node d@'a, First node, Top verbatim_html.texi(,248) @chapter node 'a with braces verbatim_html.texi(,249) In the node with braces verbatim_html.texi(,250) verbatim_html.texi(,251) A footnote with an empty line within. verbatim_html.texi(,252) @footnote{with empty line verbatim_html.texi(,253) verbatim_html.texi(,254) before before} verbatim_html.texi(,255) verbatim_html.texi(,256) Now a ref with a footnote within, there aren't 2 paragraphes in the footnote verbatim_html.texi(,257) in that case in info. tex doesn't like the paragraph break in the ref verbatim_html.texi(,259) @ref{First verbatim_html.texi(,260) node, within ref a footnote @footnote{with empty line verbatim_html.texi(,261) verbatim_html.texi(,262) before before}}. verbatim_html.texi(,263) verbatim_html.texi(,264) Conversely, a ref in a footnote verbatim_html.texi(,265) @footnote{ This is a ref @ref{First node} } verbatim_html.texi(,266) verbatim_html.texi(,267) A footnote with an example verbatim_html.texi(,268) @footnote{ verbatim_html.texi(,269) @example verbatim_html.texi(,270) verbatim_html.texi(,271) verbatim_html.texi(,272) An example verbatim_html.texi(,273) verbatim_html.texi(,274) @end example verbatim_html.texi(,275) } verbatim_html.texi(,276) verbatim_html.texi(,278) verbatim_html.texi(,279) Some @@verbatim, @@verb and @@ignore within an xref, very hard for @TeX{}: verbatim_html.texi(,281) @xref{First node, verbatim_html.texi(,282) @verbatim verbatim_html.texi(,283) verbatim_html.texi(,284) some verbatim_html.texi(,285) verbatim @@ verbatim_html.texi(,286) text verbatim_html.texi(,287) within an xref verbatim_html.texi(,288) verbatim_html.texi(,289) @end verbatim verbatim_html.texi(,290) verbatim_html.texi(,291) verbatim_html.texi(,292) and now verb delimited with * with an empty line a comment and @@samp verbatim_html.texi(,293) @verb{*with verbatim_html.texi(,294) verb @c comment verbatim_html.texi(,295) verbatim_html.texi(,296) and samp @samp{text } verbatim_html.texi(,297) next line verbatim_html.texi(,298) *} verbatim_html.texi(,299) verbatim_html.texi(,300) last ignored sentence verbatim_html.texi(,304) verbatim_html.texi(,305) }. verbatim_html.texi(,307) verbatim_html.texi(,308) @xref{First node, verbatim_html.texi(,309) no verb}. verbatim_html.texi(,310) verbatim_html.texi(,311) @node node d@'a,, node @'{a}, Top verbatim_html.texi(,312) @chapter node 'a without braces verbatim_html.texi(,313) @menu verbatim_html.texi(,314) * node:: node verbatim_html.texi(,315) @end menu verbatim_html.texi(,316) verbatim_html.texi(,317) @node node,,, verbatim_html.texi(,318) @section node verbatim_html.texi(,319) verbatim_html.texi(,320) A node with gggggggg verbatim_html.texi(,321) before example @example after example verbatim_html.texi(,322) verbatim_html.texi(,323) the example verbatim_html.texi(,324) before end example @end example verbatim_html.texi(,325) after end example verbatim_html.texi(,326) verbatim_html.texi(,327) Text only after the end verbatim_html.texi(,328) verbatim_html.texi(,329) @example verbatim_html.texi(,330) Example verbatim_html.texi(,331) @end example text following end example. verbatim_html.texi(,332) verbatim_html.texi(,333) @deffn category name args verbatim_html.texi(,334) Deffn. verbatim_html.texi(,335) @end deffn text following end deffn. verbatim_html.texi(,336) verbatim_html.texi(,337) @contents verbatim_html.texi(,338) @bye texi2html-1.82/test/misc/res/texi_verbatim_html/verbatim_html.20000644000175000017500000000000011264347115026533 0ustar flichtenheldflichtenheldtexi2html-1.82/test/misc/res/texi_verbatim_html/verbatim_html.texi0000644000175000017500000001263111264347115027360 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top,First node,(dir) @top Tests @menu * First node:: node 1 * description: node @'{a}. node with braces * node: (manual)A node. node in another manual a verbatim in menu comment @verbatim verbatim on same line than @verbatim bidule @end verbatim * node d@'a:: node without braces @end menu Tests for environments not matching @quotation A quotation @end cartouche @deffn {Function Reference} print_navigation $filehandle Text @end deftypefun @table @item item line @end vtable @table @emph @item ref @example example @end display @end table @node First node @chapter first node chapter ref to a non existing node@ref{bidule}. a 2 paragraphs sample @samp{in first paragraph in second}. a 3 paragraphs sample @samp{in first paragraph in second in third}. Unknown macro @unknown{ first paragraph second paragraph} @unknown2{ first paragraph second paragraph third} Unknown thing @thing{} A list with bullet Before itemize, in that case @@bullet isn'right, one needs @@bullet@{@} (in info) @itemize @bullet{} @c segfault <- @item on the same line that itemize @item on the same line than item some text @item more text @end itemize A list with text before first @@item: @itemize @bullet text @item more text @end itemize a verbatim, not first on the line @verbatim text following @verbatim text @@@@ @ text before @end verbatim @end verbatim Text following end verbatim, must be exactly one space between end and verbatim. @@end verbatim doesn't need to begin at beginning of line. In tex, @@end verbatim must be on its own on a line. A verbatim with begin and end on its own line @verbatim verbatim @samp{item} @end verbatim Now html @html some html @end html bidule ignored @@end html begins the line, and there must be exactly one space between @@end and html and thing following @@end html are ignored in info. Strangely the empty line following @@end html is ignored but spaces are inserted. Now html valid for @TeX{} @html some html @end html Some text one the line following @@end html And html on it's own line @html an html tt @end html A sc: @sc{ieee}, and another one in example: @example @sc{aeei} @end example ignore bidule ignore Ignore is the same than @@html. Now ifnothtml on same line @@end ifnothtml doesn't need to begin the line, and there can be more than one space between @@end and ifnothtml, but nothing more on the line. Text on the line before ifnothtml with text following, Text on the line following ifnothtml. Text on the line before ifnothtml without text following, Text on the line following ifnothtml. Text on the line before ifnothtml, Text on the line following empty ifnothtml @TeX{} has problems with the ftable. an ftable on same line @ftable @bullet @item fun1 @itemx fun2 fun1 et fun2 @item more fun text on the same line than end @end ftable works like @@ifnothtml @item outside format. @tab outside format. @multitable {@samp{bidule}} truc before table beginning @item first cell @tab ignored cell @itemx second row @end multitable before bad multitable @multitable 6 7 @item 1-1 @tab 1-2 @item@tab@item 3-1 @tab 3-2 @end multitable right multitable @multitable @columnfractions 6 7 @item 1-1 @tab 1-2 @item@tab@item 3-1 @tab 3-2 @end multitable Columnfraction multitable with an ignored cell @multitable @columnfractions 0.3 0.4 @item 1-1 @tab 1-2 @tab 1-3 (ignored) @end multitable multitable beginning with @@tab @multitable {@samp{@verb{.something.}}} {sec} @tab after first tab @item new line @end multitable A flushright @flushright some text flushed right @end flushright A center @center Centered line And a center after empty line @center centered line after empty line And a center at end of line @center And an empty center @center An empty flushright @flushright @end flushright A verb follows: @verb{' a little very little verb '} another with space as delimiter @verb{ what@@ } @@verb followed by end of line seems incorrect. Now verb delimited with *, with an empty line, a comment and @@samp: @verb{*with verb @c comment and samp @samp{text } *} @node node @'{a}, node d@'a, First node, Top @chapter node 'a with braces In the node with braces A footnote with an empty line within. @footnote{with empty line before before} Now a ref with a footnote within, there aren't 2 paragraphes in the footnote in that case in info. tex doesn't like the paragraph break in the ref @ref{First node, within ref a footnote @footnote{with empty line before before}}. Conversely, a ref in a footnote @footnote{ This is a ref @ref{First node} } A footnote with an example @footnote{ @example An example @end example } Some @@verbatim, @@verb and @@ignore within an xref, very hard for @TeX{}: @xref{First node, @verbatim some verbatim @@ text within an xref @end verbatim and now verb delimited with * with an empty line a comment and @@samp @verb{*with verb @c comment and samp @samp{text } next line *} last ignored sentence }. @xref{First node, no verb}. @node node d@'a,, node @'{a}, Top @chapter node 'a without braces @menu * node:: node @end menu @node node,,, @section node A node with gggggggg before example @example after example the example before end example @end example after end example Text only after the end @example Example @end example text following end example. @deffn category name args Deffn. @end deffn text following end deffn. @contents @bye texi2html-1.82/test/misc/res/texi_verbatim_html/verbatim_html.passfirst0000644000175000017500000003147311264347115030432 0ustar flichtenheldflichtenheldverbatim_html.texi(,2) verbatim_html.texi(,3) @node Top,First node,(dir) verbatim_html.texi(,4) @top Tests verbatim_html.texi(,5) @menu verbatim_html.texi(,6) * First node:: node 1 verbatim_html.texi(,7) * description: node @'{a}. node with braces verbatim_html.texi(,8) * node: (manual)A node. node in another manual verbatim_html.texi(,9) verbatim_html.texi(,10) a verbatim in menu comment @verbatim verbatim on same line than @verbatim verbatim_html.texi(,11) verbatim_html.texi(,12) bidule verbatim_html.texi(,13) verbatim_html.texi(,14) @end verbatim verbatim_html.texi(,15) verbatim_html.texi(,16) * node d@'a:: node without braces verbatim_html.texi(,17) @end menu verbatim_html.texi(,18) verbatim_html.texi(,19) Tests for environments not matching verbatim_html.texi(,20) verbatim_html.texi(,21) @quotation verbatim_html.texi(,22) A quotation verbatim_html.texi(,23) @end cartouche verbatim_html.texi(,24) verbatim_html.texi(,25) @deffn {Function Reference} print_navigation $filehandle verbatim_html.texi(,26) Text verbatim_html.texi(,27) @end deftypefun verbatim_html.texi(,28) verbatim_html.texi(,29) @table verbatim_html.texi(,30) @item item verbatim_html.texi(,31) line verbatim_html.texi(,32) @end vtable verbatim_html.texi(,33) verbatim_html.texi(,34) @table @emph verbatim_html.texi(,35) @item ref verbatim_html.texi(,36) @example verbatim_html.texi(,37) example verbatim_html.texi(,38) @end display verbatim_html.texi(,39) @end table verbatim_html.texi(,40) verbatim_html.texi(,41) verbatim_html.texi(,42) verbatim_html.texi(,43) @node First node verbatim_html.texi(,44) @chapter first node chapter verbatim_html.texi(,45) verbatim_html.texi(,46) ref to a non existing node@ref{bidule}. verbatim_html.texi(,47) verbatim_html.texi(,48) a 2 paragraphs sample @samp{in first paragraph verbatim_html.texi(,49) verbatim_html.texi(,50) in second}. verbatim_html.texi(,51) verbatim_html.texi(,52) a 3 paragraphs sample @samp{in first paragraph verbatim_html.texi(,53) verbatim_html.texi(,54) in second verbatim_html.texi(,55) verbatim_html.texi(,56) in third}. verbatim_html.texi(,57) verbatim_html.texi(,58) Unknown macro @unknown{ first paragraph verbatim_html.texi(,59) verbatim_html.texi(,60) second paragraph} verbatim_html.texi(,61) verbatim_html.texi(,62) @unknown2{ first paragraph verbatim_html.texi(,63) verbatim_html.texi(,64) second paragraph verbatim_html.texi(,65) verbatim_html.texi(,66) third} verbatim_html.texi(,67) verbatim_html.texi(,68) verbatim_html.texi(,69) verbatim_html.texi(,70) Unknown thing @thing{} verbatim_html.texi(,71) verbatim_html.texi(,72) verbatim_html.texi(,73) verbatim_html.texi(,74) A list with bullet verbatim_html.texi(,75) Before itemize, in that case @@bullet isn'right, one needs @@bullet@{@} (in info) @itemize @bullet{} @c segfault <- @item on the same line that itemize verbatim_html.texi(,76) @item on the same line than item verbatim_html.texi(,77) some text verbatim_html.texi(,78) @item verbatim_html.texi(,79) more text @end itemize verbatim_html.texi(,80) verbatim_html.texi(,81) A list with text before first @@item: verbatim_html.texi(,82) verbatim_html.texi(,83) @itemize @bullet verbatim_html.texi(,84) text @item more verbatim_html.texi(,85) text verbatim_html.texi(,86) @end itemize verbatim_html.texi(,87) verbatim_html.texi(,89) a verbatim, not first on the line @verbatim text following @verbatim verbatim_html.texi(,90) verbatim_html.texi(,91) text verbatim_html.texi(,92) verbatim_html.texi(,93) verbatim_html.texi(,94) @@@@ @ text before @end verbatim @end verbatim Text following end verbatim, must be exactly one space verbatim_html.texi(,95) between end and verbatim. @@end verbatim doesn't need to begin at beginning verbatim_html.texi(,96) of line. verbatim_html.texi(,98) verbatim_html.texi(,99) In tex, @@end verbatim must be on its own on a line. verbatim_html.texi(,100) verbatim_html.texi(,101) A verbatim with begin and end on its own line verbatim_html.texi(,102) @verbatim verbatim_html.texi(,103) verbatim @samp{item} verbatim_html.texi(,104) verbatim_html.texi(,105) @end verbatim verbatim_html.texi(,106) verbatim_html.texi(,107) verbatim_html.texi(,109) Now html @html verbatim_html.texi(,110) verbatim_html.texi(,111) some html verbatim_html.texi(,112) @end html bidule ignored verbatim_html.texi(,113) verbatim_html.texi(,114) @@end html begins the line, and there must be exactly one space between @@end verbatim_html.texi(,115) and html and thing following @@end html are ignored in info. Strangely verbatim_html.texi(,116) the empty line following @@end html is ignored but spaces are inserted. verbatim_html.texi(,118) verbatim_html.texi(,119) Now html valid for @TeX{} @html verbatim_html.texi(,120) verbatim_html.texi(,121) some html verbatim_html.texi(,122) @end html verbatim_html.texi(,123) Some text one the line following @@end html verbatim_html.texi(,124) verbatim_html.texi(,125) And html on it's own line verbatim_html.texi(,126) verbatim_html.texi(,127) @html verbatim_html.texi(,128) an html tt verbatim_html.texi(,129) @end html verbatim_html.texi(,130) verbatim_html.texi(,131) verbatim_html.texi(,132) A sc: @sc{ieee}, and another one in example: verbatim_html.texi(,133) @example verbatim_html.texi(,134) @sc{aeei} verbatim_html.texi(,135) @end example verbatim_html.texi(,136) verbatim_html.texi(,140) ignore bidule ignore verbatim_html.texi(,142) verbatim_html.texi(,143) Ignore is the same than @@html. verbatim_html.texi(,144) verbatim_html.texi(,149) Now ifnothtml on same line verbatim_html.texi(,150) @@end ifnothtml doesn't need to begin the line, and there can be more verbatim_html.texi(,151) than one space between @@end and ifnothtml, but nothing more verbatim_html.texi(,152) on the line. verbatim_html.texi(,153) verbatim_html.texi(,154) Text on the line before ifnothtml with text following, verbatim_html.texi(,157) Text on the line following ifnothtml. verbatim_html.texi(,158) verbatim_html.texi(,159) Text on the line before ifnothtml without text following, verbatim_html.texi(,163) Text on the line following ifnothtml. verbatim_html.texi(,164) verbatim_html.texi(,165) Text on the line before ifnothtml, verbatim_html.texi(,168) Text on the line following empty ifnothtml verbatim_html.texi(,169) verbatim_html.texi(,170) verbatim_html.texi(,171) @TeX{} has problems with the ftable. verbatim_html.texi(,172) verbatim_html.texi(,174) an ftable on same line @ftable @bullet verbatim_html.texi(,175) @item fun1 verbatim_html.texi(,176) @itemx fun2 verbatim_html.texi(,177) fun1 et fun2 @item more fun verbatim_html.texi(,178) text on the same line than end @end ftable verbatim_html.texi(,179) works like @@ifnothtml verbatim_html.texi(,181) verbatim_html.texi(,182) @item outside format. verbatim_html.texi(,183) verbatim_html.texi(,184) @tab outside format. verbatim_html.texi(,185) verbatim_html.texi(,186) @multitable {@samp{bidule}} verbatim_html.texi(,187) truc before table beginning @item first cell @tab ignored cell verbatim_html.texi(,188) @itemx second row verbatim_html.texi(,189) @end multitable verbatim_html.texi(,190) verbatim_html.texi(,191) before bad multitable @multitable 6 7 verbatim_html.texi(,192) @item 1-1 @tab 1-2 @item@tab@item 3-1 @tab 3-2 @end multitable verbatim_html.texi(,193) verbatim_html.texi(,194) right multitable verbatim_html.texi(,195) @multitable @columnfractions 6 7 verbatim_html.texi(,196) @item 1-1 @tab 1-2 @item@tab@item 3-1 @tab 3-2 @end multitable verbatim_html.texi(,197) verbatim_html.texi(,198) Columnfraction multitable with an ignored cell verbatim_html.texi(,199) @multitable @columnfractions 0.3 0.4 verbatim_html.texi(,200) @item 1-1 @tab 1-2 @tab 1-3 (ignored) verbatim_html.texi(,201) @end multitable verbatim_html.texi(,202) verbatim_html.texi(,203) multitable beginning with @@tab verbatim_html.texi(,204) @multitable {@samp{@verb{.something.}}} {sec} verbatim_html.texi(,205) @tab after first tab verbatim_html.texi(,206) @item new line verbatim_html.texi(,207) @end multitable verbatim_html.texi(,208) verbatim_html.texi(,209) A flushright verbatim_html.texi(,210) @flushright some text flushed right verbatim_html.texi(,211) @end flushright verbatim_html.texi(,212) verbatim_html.texi(,213) A center @center Centered line verbatim_html.texi(,214) And a center after empty line verbatim_html.texi(,215) verbatim_html.texi(,216) @center centered line after empty line verbatim_html.texi(,217) verbatim_html.texi(,218) And a center at end of line @center verbatim_html.texi(,219) And an empty center @center verbatim_html.texi(,220) verbatim_html.texi(,221) An empty flushright @flushright verbatim_html.texi(,222) verbatim_html.texi(,223) @end flushright verbatim_html.texi(,224) verbatim_html.texi(,225) A verb follows: verbatim_html.texi(,226) verbatim_html.texi(,227) @verb{' a little verbatim_html.texi(,228) verbatim_html.texi(,229) very little verbatim_html.texi(,230) verb '} verbatim_html.texi(,231) verbatim_html.texi(,232) another with space as delimiter verbatim_html.texi(,233) verbatim_html.texi(,234) @verb{ what@@ } verbatim_html.texi(,235) verbatim_html.texi(,236) @@verb followed by end of line seems incorrect. verbatim_html.texi(,237) Now verb delimited with *, with an empty line, a comment and @@samp: verbatim_html.texi(,238) verbatim_html.texi(,239) @verb{*with verbatim_html.texi(,240) verb @c comment verbatim_html.texi(,241) verbatim_html.texi(,242) and samp @samp{text } verbatim_html.texi(,243) *} verbatim_html.texi(,244) verbatim_html.texi(,245) verbatim_html.texi(,246) verbatim_html.texi(,247) @node node @'{a}, node d@'a, First node, Top verbatim_html.texi(,248) @chapter node 'a with braces verbatim_html.texi(,249) In the node with braces verbatim_html.texi(,250) verbatim_html.texi(,251) A footnote with an empty line within. verbatim_html.texi(,252) @footnote{with empty line verbatim_html.texi(,253) verbatim_html.texi(,254) before before} verbatim_html.texi(,255) verbatim_html.texi(,256) Now a ref with a footnote within, there aren't 2 paragraphes in the footnote verbatim_html.texi(,257) in that case in info. tex doesn't like the paragraph break in the ref verbatim_html.texi(,259) @ref{First verbatim_html.texi(,260) node, within ref a footnote @footnote{with empty line verbatim_html.texi(,261) verbatim_html.texi(,262) before before}}. verbatim_html.texi(,263) verbatim_html.texi(,264) Conversely, a ref in a footnote verbatim_html.texi(,265) @footnote{ This is a ref @ref{First node} } verbatim_html.texi(,266) verbatim_html.texi(,267) A footnote with an example verbatim_html.texi(,268) @footnote{ verbatim_html.texi(,269) @example verbatim_html.texi(,270) verbatim_html.texi(,271) verbatim_html.texi(,272) An example verbatim_html.texi(,273) verbatim_html.texi(,274) @end example verbatim_html.texi(,275) } verbatim_html.texi(,276) verbatim_html.texi(,278) verbatim_html.texi(,279) Some @@verbatim, @@verb and @@ignore within an xref, very hard for @TeX{}: verbatim_html.texi(,281) @xref{First node, verbatim_html.texi(,282) @verbatim verbatim_html.texi(,283) verbatim_html.texi(,284) some verbatim_html.texi(,285) verbatim @@ verbatim_html.texi(,286) text verbatim_html.texi(,287) within an xref verbatim_html.texi(,288) verbatim_html.texi(,289) @end verbatim verbatim_html.texi(,290) verbatim_html.texi(,291) verbatim_html.texi(,292) and now verb delimited with * with an empty line a comment and @@samp verbatim_html.texi(,293) @verb{*with verbatim_html.texi(,294) verb @c comment verbatim_html.texi(,295) verbatim_html.texi(,296) and samp @samp{text } verbatim_html.texi(,297) next line verbatim_html.texi(,298) *} verbatim_html.texi(,299) verbatim_html.texi(,300) last ignored sentence verbatim_html.texi(,304) verbatim_html.texi(,305) }. verbatim_html.texi(,307) verbatim_html.texi(,308) @xref{First node, verbatim_html.texi(,309) no verb}. verbatim_html.texi(,310) verbatim_html.texi(,311) @node node d@'a,, node @'{a}, Top verbatim_html.texi(,312) @chapter node 'a without braces verbatim_html.texi(,313) @menu verbatim_html.texi(,314) * node:: node verbatim_html.texi(,315) @end menu verbatim_html.texi(,316) verbatim_html.texi(,317) @node node,,, verbatim_html.texi(,318) @section node verbatim_html.texi(,319) verbatim_html.texi(,320) A node with gggggggg verbatim_html.texi(,321) before example @example after example verbatim_html.texi(,322) verbatim_html.texi(,323) the example verbatim_html.texi(,324) before end example @end example verbatim_html.texi(,325) after end example verbatim_html.texi(,326) verbatim_html.texi(,327) Text only after the end verbatim_html.texi(,328) verbatim_html.texi(,329) @example verbatim_html.texi(,330) Example verbatim_html.texi(,331) @end example text following end example. verbatim_html.texi(,332) verbatim_html.texi(,333) @deffn category name args verbatim_html.texi(,334) Deffn. verbatim_html.texi(,335) @end deffn text following end deffn. verbatim_html.texi(,336) verbatim_html.texi(,337) @contents verbatim_html.texi(,338) @bye texi2html-1.82/test/misc/res/texi_testkb/0000755000175000017500000000000011264347115022264 5ustar flichtenheldflichtenheldtexi2html-1.82/test/misc/res/texi_testkb/testkb.passtexi0000644000175000017500000002617211264347115025352 0ustar flichtenheldflichtenheldtestkb.texi(,2) @setfilename testkb.info testkb.texi(,3) @documentlanguage de testkb.texi(,4) @documentencoding ASCII testkb.texi(,5) @setchapternewpage on testkb.texi(,6) @footnotestyle separate testkb.texi(,7) @c testkb.texi(,11) @titlepage testkb.texi(,12) @title Test for @@def stuff testkb.texi(,13) @end titlepage testkb.texi(,14) @c ---------------------------------------------------------------------------- testkb.texi(,15) @node Top,Overview,,(dir) testkb.texi(,16) @chapter Test 1 testkb.texi(,17) Hier kann eine Erkl@"arung zum Thema stehen oder auch nicht. testkb.texi(,18) Noch mehr erkl@"arungen zu dem Thema. testkb.texi(,19) @menu testkb.texi(,20) * Overview::. Methode four. testkb.texi(,21) @end menu testkb.texi(,22) @c ---------------------------------------------------------------------------- testkb.texi(,23) @node Overview,,Top,Top testkb.texi(,24) @chapter Class testkb.texi(,25) Here you can read many things I need for this documentation. testkb.texi(,26) But more and more of this exploration can be done here. testkb.texi(,27) @section Overview testkb.texi(,28) Das ist ein Test @r{Roman Text in einer Umgebung} testkb.texi(,29) testkb.texi(,30) Hier ist normaler Text. Hier sollte keine Einr@"uckung stattfinden. testkb.texi(,31) Sondern eher ein normaler umbruch. Somit kann es hier wieder testkb.texi(,32) weitergehen. Oder sehe ich da was falsch. testkb.texi(,33) Hier ist normaler Text. Hier sollte keine Einr@"uckung stattfinden. testkb.texi(,34) Sondern eher ein normaler umbruch. Somit kann es hier wieder testkb.texi(,35) weitergehen. Oder sehe ich da was falsch. testkb.texi(,36) Hier ist normaler Text. Hier sollte keine Einr@"uckung stattfinden. testkb.texi(,37) Sondern eher ein normaler umbruch. Somit kann es hier wieder testkb.texi(,38) weitergehen. Oder sehe ich da was falsch. testkb.texi(,39) Hier ist normaler Text. Hier sollte keine Einr@"uckung stattfinden. testkb.texi(,40) Sondern eher ein normaler umbruch. Somit kann es hier wieder testkb.texi(,41) weitergehen. Oder sehe ich da was falsch. testkb.texi(,42) testkb.texi(,43) @defcv dcvKat dcvClass dcvName testkb.texi(,44) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,45) Beschreibung zu defcv. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,46) werden. Hier ist das ok. Beschreibung zu defcv. testkb.texi(,47) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,48) Beschreibung zu defcv. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,49) werden. Hier ist das ok. Beschreibung zu defcv. testkb.texi(,50) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,51) Beschreibung zu defcv. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,52) werden. Hier ist das ok. Beschreibung zu defcv. testkb.texi(,53) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,54) Beschreibung zu defcv. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,55) werden. Hier ist das ok. Beschreibung zu defcv. testkb.texi(,56) @end defcv testkb.texi(,57) testkb.texi(,58) @deffn {dfnKat} dfnName (dfnArgumente) testkb.texi(,59) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,60) Beschreibung zu deffn. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,61) werden. Hier ist das ok. Beschreibung zu deffn. testkb.texi(,62) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,63) Beschreibung zu deffn. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,64) werden. Hier ist das ok. Beschreibung zu deffn. testkb.texi(,65) @itemize testkb.texi(,66) @item Erstens testkb.texi(,67) @item Zweitens testkb.texi(,68) @item Drittens testkb.texi(,69) @end itemize testkb.texi(,70) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,71) Beschreibung zu deffn. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,72) werden. Hier ist das ok. Beschreibung zu deffn. testkb.texi(,73) @sp 2 testkb.texi(,74) @example testkb.texi(,75) Das ist ein Beispiel in HTML testkb.texi(,76) Das ist ein Beispiel in HTML testkb.texi(,77) Das ist ein Beispiel in HTML testkb.texi(,78) Das ist ein Beispiel in HTML testkb.texi(,79) @end example testkb.texi(,80) @* testkb.texi(,81) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,82) Beschreibung zu deffn. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,83) werden. Hier ist das ok. Beschreibung zu deffn. testkb.texi(,84) @end deffn testkb.texi(,85) testkb.texi(,86) @deffn {dfnKat1} dfnName1 (dfnArgumente11) testkb.texi(,87) @deffnx {dfnKat2} dfnName2 (dfnArgumente12) testkb.texi(,88) @deffnx {dfnKat3} dfnName3 (dfnArgumente13) testkb.texi(,89) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,90) Beschreibung zu deffn. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,91) werden. Hier ist das ok. Beschreibung zu deffn. testkb.texi(,92) @end deffn testkb.texi(,93) testkb.texi(,94) @defivar {divClass} {divExemplarVar} testkb.texi(,95) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,96) Beschreibung zu defivar. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,97) werden. Hier ist das ok. Beschreibung zu defivar. testkb.texi(,98) @end defivar testkb.texi(,99) testkb.texi(,100) @defmac dmcName (dmcArgumente) testkb.texi(,101) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,102) Beschreibung zu defmac. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,103) werden. Hier ist das ok. Beschreibung zu defmac. testkb.texi(,104) @end defmac testkb.texi(,105) testkb.texi(,106) @defmethod {dmeClass} dmName (dmArguments) testkb.texi(,107) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,108) Beschreibung zu defmethod. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,109) werden. Hier ist das ok. Beschreibung zu defmethod. testkb.texi(,110) @end defmethod testkb.texi(,111) testkb.texi(,112) @defop {dopKat} {dopClass} dopName (dopArgumente) testkb.texi(,113) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,114) Beschreibung zu defop. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,115) werden. Hier ist das ok. Beschreibung zu defop. testkb.texi(,116) @end defop testkb.texi(,117) testkb.texi(,118) @defopt {dptName} testkb.texi(,119) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,120) Beschreibung zu defopt. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,121) werden. Hier ist das ok. Beschreibung zu defopt. testkb.texi(,122) @end defopt testkb.texi(,123) testkb.texi(,124) @defspec dspName (dspArgument) testkb.texi(,125) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,126) Beschreibung zu defspec. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,127) werden. Hier ist das ok. Beschreibung zu defspec. testkb.texi(,128) @end defspec testkb.texi(,129) testkb.texi(,130) @deftp {dtpKat} dtpType (dtpA1 dtpA2) testkb.texi(,131) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,132) Beschreibung zu deftp. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,133) werden. Hier ist das ok. Beschreibung zu deftp. testkb.texi(,134) @end deftp testkb.texi(,135) testkb.texi(,136) @deftypefn {PUBLIC} int EditLine (int col, int row) testkb.texi(,137) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,138) Beschreibung zu deftypefn. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,139) werden. Hier ist das ok. Beschreibung zu deftypefn. testkb.texi(,140) @end deftypefn testkb.texi(,141) testkb.texi(,142) @deftypefun int FunktionEins (int col, int row) testkb.texi(,143) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,144) Beschreibung zu deftypefun. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,145) werden. Hier ist das ok. Beschreibung zu deftypefun. testkb.texi(,146) @end deftypefun testkb.texi(,147) testkb.texi(,148) @deftypemethod {dtmClass} int dtmName (int col, int row) testkb.texi(,149) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,150) Beschreibung zu deftypemethod. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,151) werden. Hier ist das ok. Beschreibung zu deftypemethod. testkb.texi(,152) @end deftypemethod testkb.texi(,153) testkb.texi(,154) @deftypevar DataType VarName testkb.texi(,155) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,156) Beschreibung zu deftypevar. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,157) werden. Hier ist das ok. Beschreibung zu deftypevar. testkb.texi(,158) @end deftypevar testkb.texi(,159) testkb.texi(,160) @deftypeivar {dtiv} DataType VarName testkb.texi(,161) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,162) Beschreibung zu deftypeivar. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,163) werden. Hier ist das ok. Beschreibung zu deftypeivar. testkb.texi(,164) @end deftypeivar testkb.texi(,165) testkb.texi(,166) @deftypevr {dtv} DataType VarName testkb.texi(,167) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,168) Beschreibung zu deftypevr. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,169) werden. Hier ist das ok. Beschreibung zu deftypevr. testkb.texi(,170) @end deftypevr testkb.texi(,171) testkb.texi(,172) @defun FuntionName (Argumente) testkb.texi(,173) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,174) Beschreibung zu defun. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,175) werden. Hier ist das ok. Beschreibung zu defun. testkb.texi(,176) @end defun testkb.texi(,177) testkb.texi(,178) @defvar VariablenName testkb.texi(,179) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,180) Beschreibung zu defvar. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,181) werden. Hier ist das ok. Beschreibung zu defvar. testkb.texi(,182) @end defvar testkb.texi(,183) testkb.texi(,184) @defvr {dvrKat} dvrName testkb.texi(,185) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,186) Beschreibung zu defvr. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,187) werden. Hier ist das ok. Beschreibung zu defvr. testkb.texi(,188) @end defvr testkb.texi(,189) testkb.texi(,190) @deftypeop {dtypeopCat} deftypeopClass deftypeopType deftypeopName deftypeopArgs testkb.texi(,191) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,192) Beschreibung zu deftypeop. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,193) werden. Hier ist das ok. Beschreibung zu deftypeop. testkb.texi(,194) @end deftypeop testkb.texi(,195) testkb.texi(,196) @appendix Indizes testkb.texi(,197) @appendixsec Konzept Index testkb.texi(,198) @printindex cp testkb.texi(,199) @appendixsec Funktionen Index testkb.texi(,200) @printindex fn testkb.texi(,201) @appendixsec Programme Index testkb.texi(,202) @printindex pg testkb.texi(,203) @appendixsec Tasten Index testkb.texi(,204) @printindex ky testkb.texi(,205) @appendixsec Var Index testkb.texi(,206) @printindex vr testkb.texi(,207) @contents testkb.texi(,208) @bye texi2html-1.82/test/misc/res/texi_testkb/testkb.texi0000644000175000017500000001724711264347115024466 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename testkb.info @documentlanguage de @documentencoding ASCII @setchapternewpage on @footnotestyle separate @c @titlepage @title Test for @@def stuff @end titlepage @c ---------------------------------------------------------------------------- @node Top,Overview,,(dir) @chapter Test 1 Hier kann eine Erkl@"arung zum Thema stehen oder auch nicht. Noch mehr erkl@"arungen zu dem Thema. @menu * Overview::. Methode four. @end menu @c ---------------------------------------------------------------------------- @node Overview,,Top,Top @chapter Class Here you can read many things I need for this documentation. But more and more of this exploration can be done here. @section Overview Das ist ein Test @r{Roman Text in einer Umgebung} Hier ist normaler Text. Hier sollte keine Einr@"uckung stattfinden. Sondern eher ein normaler umbruch. Somit kann es hier wieder weitergehen. Oder sehe ich da was falsch. Hier ist normaler Text. Hier sollte keine Einr@"uckung stattfinden. Sondern eher ein normaler umbruch. Somit kann es hier wieder weitergehen. Oder sehe ich da was falsch. Hier ist normaler Text. Hier sollte keine Einr@"uckung stattfinden. Sondern eher ein normaler umbruch. Somit kann es hier wieder weitergehen. Oder sehe ich da was falsch. Hier ist normaler Text. Hier sollte keine Einr@"uckung stattfinden. Sondern eher ein normaler umbruch. Somit kann es hier wieder weitergehen. Oder sehe ich da was falsch. @defcv dcvKat dcvClass dcvName Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defcv. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defcv. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defcv. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defcv. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defcv. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defcv. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defcv. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defcv. @end defcv @deffn {dfnKat} dfnName (dfnArgumente) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deffn. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deffn. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deffn. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deffn. @itemize @item Erstens @item Zweitens @item Drittens @end itemize Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deffn. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deffn. @sp 2 @example Das ist ein Beispiel in HTML Das ist ein Beispiel in HTML Das ist ein Beispiel in HTML Das ist ein Beispiel in HTML @end example @* Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deffn. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deffn. @end deffn @deffn {dfnKat1} dfnName1 (dfnArgumente11) @deffnx {dfnKat2} dfnName2 (dfnArgumente12) @deffnx {dfnKat3} dfnName3 (dfnArgumente13) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deffn. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deffn. @end deffn @defivar {divClass} {divExemplarVar} Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defivar. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defivar. @end defivar @defmac dmcName (dmcArgumente) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defmac. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defmac. @end defmac @defmethod {dmeClass} dmName (dmArguments) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defmethod. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defmethod. @end defmethod @defop {dopKat} {dopClass} dopName (dopArgumente) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defop. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defop. @end defop @defopt {dptName} Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defopt. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defopt. @end defopt @defspec dspName (dspArgument) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defspec. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defspec. @end defspec @deftp {dtpKat} dtpType (dtpA1 dtpA2) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftp. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftp. @end deftp @deftypefn {PUBLIC} int EditLine (int col, int row) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypefn. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypefn. @end deftypefn @deftypefun int FunktionEins (int col, int row) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypefun. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypefun. @end deftypefun @deftypemethod {dtmClass} int dtmName (int col, int row) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypemethod. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypemethod. @end deftypemethod @deftypevar DataType VarName Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypevar. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypevar. @end deftypevar @deftypeivar {dtiv} DataType VarName Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypeivar. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypeivar. @end deftypeivar @deftypevr {dtv} DataType VarName Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypevr. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypevr. @end deftypevr @defun FuntionName (Argumente) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defun. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defun. @end defun @defvar VariablenName Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defvar. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defvar. @end defvar @defvr {dvrKat} dvrName Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defvr. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defvr. @end defvr @deftypeop {dtypeopCat} deftypeopClass deftypeopType deftypeopName deftypeopArgs Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypeop. Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypeop. @end deftypeop @appendix Indizes @appendixsec Konzept Index @printindex cp @appendixsec Funktionen Index @printindex fn @appendixsec Programme Index @printindex pg @appendixsec Tasten Index @printindex ky @appendixsec Var Index @printindex vr @contents @bye texi2html-1.82/test/misc/res/texi_testkb/testkb.20000644000175000017500000000000011264347115023631 0ustar flichtenheldflichtenheldtexi2html-1.82/test/misc/res/texi_testkb/testkb.passfirst0000644000175000017500000002602111264347115025521 0ustar flichtenheldflichtenheldtestkb.texi(,2) @setfilename testkb.info testkb.texi(,3) @documentlanguage de testkb.texi(,4) @documentencoding ASCII testkb.texi(,5) @setchapternewpage on testkb.texi(,6) @footnotestyle separate testkb.texi(,7) @c testkb.texi(,14) @c ---------------------------------------------------------------------------- testkb.texi(,15) @node Top,Overview,,(dir) testkb.texi(,16) @chapter Test 1 testkb.texi(,17) Hier kann eine Erkl@"arung zum Thema stehen oder auch nicht. testkb.texi(,18) Noch mehr erkl@"arungen zu dem Thema. testkb.texi(,19) @menu testkb.texi(,20) * Overview::. Methode four. testkb.texi(,21) @end menu testkb.texi(,22) @c ---------------------------------------------------------------------------- testkb.texi(,23) @node Overview,,Top,Top testkb.texi(,24) @chapter Class testkb.texi(,25) Here you can read many things I need for this documentation. testkb.texi(,26) But more and more of this exploration can be done here. testkb.texi(,27) @section Overview testkb.texi(,28) Das ist ein Test @r{Roman Text in einer Umgebung} testkb.texi(,29) testkb.texi(,30) Hier ist normaler Text. Hier sollte keine Einr@"uckung stattfinden. testkb.texi(,31) Sondern eher ein normaler umbruch. Somit kann es hier wieder testkb.texi(,32) weitergehen. Oder sehe ich da was falsch. testkb.texi(,33) Hier ist normaler Text. Hier sollte keine Einr@"uckung stattfinden. testkb.texi(,34) Sondern eher ein normaler umbruch. Somit kann es hier wieder testkb.texi(,35) weitergehen. Oder sehe ich da was falsch. testkb.texi(,36) Hier ist normaler Text. Hier sollte keine Einr@"uckung stattfinden. testkb.texi(,37) Sondern eher ein normaler umbruch. Somit kann es hier wieder testkb.texi(,38) weitergehen. Oder sehe ich da was falsch. testkb.texi(,39) Hier ist normaler Text. Hier sollte keine Einr@"uckung stattfinden. testkb.texi(,40) Sondern eher ein normaler umbruch. Somit kann es hier wieder testkb.texi(,41) weitergehen. Oder sehe ich da was falsch. testkb.texi(,42) testkb.texi(,43) @defcv dcvKat dcvClass dcvName testkb.texi(,44) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,45) Beschreibung zu defcv. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,46) werden. Hier ist das ok. Beschreibung zu defcv. testkb.texi(,47) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,48) Beschreibung zu defcv. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,49) werden. Hier ist das ok. Beschreibung zu defcv. testkb.texi(,50) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,51) Beschreibung zu defcv. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,52) werden. Hier ist das ok. Beschreibung zu defcv. testkb.texi(,53) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,54) Beschreibung zu defcv. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,55) werden. Hier ist das ok. Beschreibung zu defcv. testkb.texi(,56) @end defcv testkb.texi(,57) testkb.texi(,58) @deffn {dfnKat} dfnName (dfnArgumente) testkb.texi(,59) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,60) Beschreibung zu deffn. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,61) werden. Hier ist das ok. Beschreibung zu deffn. testkb.texi(,62) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,63) Beschreibung zu deffn. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,64) werden. Hier ist das ok. Beschreibung zu deffn. testkb.texi(,65) @itemize testkb.texi(,66) @item Erstens testkb.texi(,67) @item Zweitens testkb.texi(,68) @item Drittens testkb.texi(,69) @end itemize testkb.texi(,70) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,71) Beschreibung zu deffn. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,72) werden. Hier ist das ok. Beschreibung zu deffn. testkb.texi(,73) @sp 2 testkb.texi(,74) @example testkb.texi(,75) Das ist ein Beispiel in HTML testkb.texi(,76) Das ist ein Beispiel in HTML testkb.texi(,77) Das ist ein Beispiel in HTML testkb.texi(,78) Das ist ein Beispiel in HTML testkb.texi(,79) @end example testkb.texi(,80) @* testkb.texi(,81) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,82) Beschreibung zu deffn. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,83) werden. Hier ist das ok. Beschreibung zu deffn. testkb.texi(,84) @end deffn testkb.texi(,85) testkb.texi(,86) @deffn {dfnKat1} dfnName1 (dfnArgumente11) testkb.texi(,87) @deffnx {dfnKat2} dfnName2 (dfnArgumente12) testkb.texi(,88) @deffnx {dfnKat3} dfnName3 (dfnArgumente13) testkb.texi(,89) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,90) Beschreibung zu deffn. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,91) werden. Hier ist das ok. Beschreibung zu deffn. testkb.texi(,92) @end deffn testkb.texi(,93) testkb.texi(,94) @defivar {divClass} {divExemplarVar} testkb.texi(,95) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,96) Beschreibung zu defivar. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,97) werden. Hier ist das ok. Beschreibung zu defivar. testkb.texi(,98) @end defivar testkb.texi(,99) testkb.texi(,100) @defmac dmcName (dmcArgumente) testkb.texi(,101) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,102) Beschreibung zu defmac. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,103) werden. Hier ist das ok. Beschreibung zu defmac. testkb.texi(,104) @end defmac testkb.texi(,105) testkb.texi(,106) @defmethod {dmeClass} dmName (dmArguments) testkb.texi(,107) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,108) Beschreibung zu defmethod. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,109) werden. Hier ist das ok. Beschreibung zu defmethod. testkb.texi(,110) @end defmethod testkb.texi(,111) testkb.texi(,112) @defop {dopKat} {dopClass} dopName (dopArgumente) testkb.texi(,113) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,114) Beschreibung zu defop. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,115) werden. Hier ist das ok. Beschreibung zu defop. testkb.texi(,116) @end defop testkb.texi(,117) testkb.texi(,118) @defopt {dptName} testkb.texi(,119) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,120) Beschreibung zu defopt. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,121) werden. Hier ist das ok. Beschreibung zu defopt. testkb.texi(,122) @end defopt testkb.texi(,123) testkb.texi(,124) @defspec dspName (dspArgument) testkb.texi(,125) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,126) Beschreibung zu defspec. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,127) werden. Hier ist das ok. Beschreibung zu defspec. testkb.texi(,128) @end defspec testkb.texi(,129) testkb.texi(,130) @deftp {dtpKat} dtpType (dtpA1 dtpA2) testkb.texi(,131) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,132) Beschreibung zu deftp. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,133) werden. Hier ist das ok. Beschreibung zu deftp. testkb.texi(,134) @end deftp testkb.texi(,135) testkb.texi(,136) @deftypefn {PUBLIC} int EditLine (int col, int row) testkb.texi(,137) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,138) Beschreibung zu deftypefn. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,139) werden. Hier ist das ok. Beschreibung zu deftypefn. testkb.texi(,140) @end deftypefn testkb.texi(,141) testkb.texi(,142) @deftypefun int FunktionEins (int col, int row) testkb.texi(,143) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,144) Beschreibung zu deftypefun. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,145) werden. Hier ist das ok. Beschreibung zu deftypefun. testkb.texi(,146) @end deftypefun testkb.texi(,147) testkb.texi(,148) @deftypemethod {dtmClass} int dtmName (int col, int row) testkb.texi(,149) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,150) Beschreibung zu deftypemethod. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,151) werden. Hier ist das ok. Beschreibung zu deftypemethod. testkb.texi(,152) @end deftypemethod testkb.texi(,153) testkb.texi(,154) @deftypevar DataType VarName testkb.texi(,155) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,156) Beschreibung zu deftypevar. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,157) werden. Hier ist das ok. Beschreibung zu deftypevar. testkb.texi(,158) @end deftypevar testkb.texi(,159) testkb.texi(,160) @deftypeivar {dtiv} DataType VarName testkb.texi(,161) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,162) Beschreibung zu deftypeivar. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,163) werden. Hier ist das ok. Beschreibung zu deftypeivar. testkb.texi(,164) @end deftypeivar testkb.texi(,165) testkb.texi(,166) @deftypevr {dtv} DataType VarName testkb.texi(,167) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,168) Beschreibung zu deftypevr. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,169) werden. Hier ist das ok. Beschreibung zu deftypevr. testkb.texi(,170) @end deftypevr testkb.texi(,171) testkb.texi(,172) @defun FuntionName (Argumente) testkb.texi(,173) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,174) Beschreibung zu defun. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,175) werden. Hier ist das ok. Beschreibung zu defun. testkb.texi(,176) @end defun testkb.texi(,177) testkb.texi(,178) @defvar VariablenName testkb.texi(,179) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,180) Beschreibung zu defvar. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,181) werden. Hier ist das ok. Beschreibung zu defvar. testkb.texi(,182) @end defvar testkb.texi(,183) testkb.texi(,184) @defvr {dvrKat} dvrName testkb.texi(,185) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,186) Beschreibung zu defvr. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,187) werden. Hier ist das ok. Beschreibung zu defvr. testkb.texi(,188) @end defvr testkb.texi(,189) testkb.texi(,190) @deftypeop {dtypeopCat} deftypeopClass deftypeopType deftypeopName deftypeopArgs testkb.texi(,191) Hier mu@ss{} in HTML eine Tabelle erzeugt werden. Hier ist das ok. testkb.texi(,192) Beschreibung zu deftypeop. Hier mu@ss{} in HTML eine Tabelle erzeugt testkb.texi(,193) werden. Hier ist das ok. Beschreibung zu deftypeop. testkb.texi(,194) @end deftypeop testkb.texi(,195) testkb.texi(,196) @appendix Indizes testkb.texi(,197) @appendixsec Konzept Index testkb.texi(,198) @printindex cp testkb.texi(,199) @appendixsec Funktionen Index testkb.texi(,200) @printindex fn testkb.texi(,201) @appendixsec Programme Index testkb.texi(,202) @printindex pg testkb.texi(,203) @appendixsec Tasten Index testkb.texi(,204) @printindex ky testkb.texi(,205) @appendixsec Var Index testkb.texi(,206) @printindex vr testkb.texi(,207) @contents testkb.texi(,208) @bye texi2html-1.82/test/misc/res/verbatim_html/0000755000175000017500000000000011264347115022574 5ustar flichtenheldflichtenheldtexi2html-1.82/test/misc/res/verbatim_html/verbatim_html.20000644000175000017500000000215011264347115025512 0ustar flichtenheldflichtenheld*** waiting for end of quotation, found @end cartouche (l. 23) *** closing `quotation' (l. 23) ** Waiting for @end deffn, found @end deftypefun (l. 27) ** Waiting for @end table, found @end vtable (l. 32) *** waiting for end of example, found @end display (l. 38) *** closing `example' (l. 38) *** closing `table' (l. 38) *** @end table without corresponding opening (l. 39) *** Undefined node `bidule' in @ref (l. 46) ** Unknown command with braces `@unknown' (l. 59) ** Unknown command with braces `@unknown2' (l. 63) ** Unknown command with braces `@thing' (l. 70) ** @item outside of table or list (l. 182) ** @tab outside of multitable (l. 184) ** too much @tab (multitable has only 1 column(s)) (l. 187) ** garbage in multitable specification: 6 (l. 191) ** garbage in multitable specification: 7 (l. 191) ** empty multitable (l. 191) ** @item in empty multitable (l. 192) ** @tab in empty multitable (l. 192) ** @item in empty multitable (l. 192) ** @tab in empty multitable (l. 192) ** @item in empty multitable (l. 192) ** @tab in empty multitable (l. 192) ** too much @tab (multitable has only 2 column(s)) (l. 200) texi2html-1.82/test/misc/res/verbatim_html/verbatim_html.html0000644000175000017500000004515511264347115026331 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Tests

    Tests for environments not matching

    A quotation

    Function Reference: print_navigation $filehandle

    Text

    item

    line

    ref
     
    example
    
    @end table
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. first node chapter

    ref to a non existing node@ref{bidule}.

    a 2 paragraphs sample ‘in first paragraph

    in second’.

    a 3 paragraphs sample ‘in first paragraph

    in second

    in third’.

    Unknown macro @unknown{ first paragraph

    second paragraph}

    @unknown2{ first paragraph

    second paragraph

    third}

    Unknown thing @thing{}

    A list with bullet Before itemize, in that case @bullet isn’right, one needs @bullet{} (in info)

    • on the same line than item some text
    • more text

    A list with text before first @item:

    • text
    • more text

    a verbatim, not first on the line

     text following @verbatim
    
    text
    
    
    @@@@ @ text before @end  verbatim 
    Text following end verbatim, must be exactly one space

    between end and verbatim. @end verbatim doesn’t need to begin at beginning of line.

    In tex, @end verbatim must be on its own on a line.

    A verbatim with begin and end on its own line

    verbatim @samp{item}
    
    

    Now html some html bidule ignored

    @end html begins the line, and there must be exactly one space between @end and html and thing following @end html are ignored in info. Strangely the empty line following @end html is ignored but spaces are inserted.

    Now html valid for TeX some html Some text one the line following @end html

    And html on it’s own line

    an html tt

    A sc: IEEE, and another one in example:

     
    AEEI
    

    ignore bidule ignore

    Ignore is the same than @html.

    Now ifnothtml on same line @end ifnothtml doesn’t need to begin the line, and there can be more than one space between @end and ifnothtml, but nothing more on the line.

    Text on the line before ifnothtml with text following, Text on the line following ifnothtml.

    Text on the line before ifnothtml without text following, Text on the line following ifnothtml.

    Text on the line before ifnothtml, Text on the line following empty ifnothtml

    TeX has problems with the ftable.

    an ftable on same line

    • fun1
    • fun2

    fun1 et fun2

    • more fun

    text on the same line than end

    works like @ifnothtml

    outside format.

    outside format.

    truc before table beginning
    first cell
    second row

    before bad multitable

    right multitable

    1-11-2
    3-13-2

    Columnfraction multitable with an ignored cell

    1-11-2

    multitable beginning with @tab

    after first tab
    new line

    A flushright

    some text flushed right

    A center

    Centered line

    And a center after empty line

    centered line after empty line

    And a center at end of line

    And an empty center

    An empty flushright

    A verb follows:

    a little

    very little verb

    another with space as delimiter

    what@@

    @verb followed by end of line seems incorrect. Now verb delimited with *, with an empty line, a comment and @samp:

    with verb @c comment

    and samp @samp{text }


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. node ’a with braces

    In the node with braces

    A footnote with an empty line within. (1)

    Now a ref with a footnote within, there aren’t 2 paragraphes in the footnote in that case in info. tex doesn’t like the paragraph break in the ref within ref a footnote (2).

    Conversely, a ref in a footnote (3)

    A footnote with an example (4)

    Some @verbatim, @verb and @ignore within an xref, very hard for TeX: See section

     some verbatim @@ text within an xref 
    and now verb delimited with * with an empty line a comment and @samp with verb @c comment and samp @samp{text } next line last ignored sentence.

    See section no verb.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. node ’a without braces


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.1 node

    A node with gggggggg before example

     
     after example
    
    the example
    before end example  

    after end example

    Text only after the end

     
    Example
    

    text following end example.

    category: name args

    Deffn.

    text following end deffn.


    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)

    with empty line

    before before

    (2)

    with empty line before before

    (3)

    This is a ref first node chapter

    (4)

     
    
    An example
    
    

    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/misc/res/templates/0000755000175000017500000000000011264347115021735 5ustar flichtenheldflichtenheldtexi2html-1.82/test/misc/res/templates/templates.20000644000175000017500000000031011264347115024010 0ustar flichtenheldflichtenheld** `Related' doesn't appear in menus ** `Overview' is up for `Related', but has no menu entry for this node *** Undefined node `EExpansion' in @xref (l. 263) *** Undefined node `EExpansion' in @xref texi2html-1.82/test/misc/res/templates/templates.html0000644000175000017500000020705611264347115024633 0ustar flichtenheldflichtenheld Emacs template package documentation, version 3.1c
    [Top] [Contents] [Index] [ ? ]

    Top node.

    This is the manual of Emacs template package


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Overview

    When you create a new file with Emacs, package Template supplies an initial buffer content via a template: a file with normal text and expansion forms. There is a menu to easily create such templates. You can also use new commands to decorate comments and update the buffer contents.

    The main difference between Template and other similar packages is that you can define very flexible templates without having to learn Lisp or changing your Emacs init file. This package does not help Lisp programmers to define complex macros.

    • The template mechanism is hooked into the normal find/open file command. There are also new commands for creating a new file using a template and inserting &amp; expanding a template.
    • You do not have to enter the file name of the template file. This package uses a sophisticated search to find the most appropritate template (supporting project- and subproject specific template files). You can change the suggestion, of course.
    • A template file can be easily created. Most of the file usually contains simple text; only expansion forms which look like ‘(>>>Key<<<)’ will get replaced.
    • There are various useful predefined expansions: set point (the cursor position), mark and registers to the current position; insert various parts of the filename, the user/system name, the current date/time in various formats, and some text to be entered by the user.
    • Template-specific expansions can be defined at the end of the template file. There are commands to create these definitions; only complex expansions would require some knowledge of Lisp.

    There is a menu to support the creation of template files. Additionally, this package provides the following features:

    • When saving a buffer, some parts of the buffer contents (header and time stamps) are automatically updated if necessary.
    • There are commands to decorate comments with dashes and alike. Works for languages with any comment style, even languages having mixed comments like C++ and Java.

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 Packages Related to Template

    There are template packages of two different categories, which are determined by one question:

    What do you want to do with templates? Do you want to use templates when creating new files, or do you want to insert some stuff during editing (but you are not satisfied with the standard macro mechanism)?

    Well, templates could be seen as both new-file templates and macro-like template, but the main application of templates determines the answers for the following questions:

    • How do you define a template? You can define it by one file per template or by customizing some Emacs variables. The first solution (which is used by package Template) avoids Emacs hacking but might not be optimal if you just want to define complex macros or if you want to use templates to program a new Emacs major-mode.
    • How is an appropriate template selected? If you want to use complex macro during editing, the answer is clear: the user have to provide the name of the template. For new files, the appropriate template should be automatically selected. But of course, you don’t want to loose any flexibility and you don’t want to customize your Emacs for every project you start.
    • How do you do "clever" things in the template? The aims are to have many predefined expansions (e.g., the current date) and to define some non-trivial things without learning Lisp. Any functionality here is the overlapping point of both template categories.

    Here is a little list of related files, collected around 1998, some discarded later (no URLs, no active updating, but you can send me a mail):

    • Package autoinsert.el uses templates when creating new files. These templates are defined via files or by customizing Emacs. For each new template you want to introduce, you must customize your Emacs, the selection is restricted to one template per major-mode or regexp match. No predefined expansions; clever things are provided by usual Lisp expressions or the macro-like templates of package skeleton.
    • Package skeleton.el is a Lisp language extension for writing statement skeletons, i.e., you get macro-like Lisp commands.
    • Package tempo.el helps you defining and using named macro-like templates. Its predefined macros are similar to some predefined expansions of package Template. A specific template is used by <code class="lisp">html-helper-mode</code> when creating a new html file. (This is turned off with the default installation of package Template.)
    • Package hm–html-menus provides a command to insert templates editing. These templates are defined via files. There are no predefined expansions (except setting point), non-trivial expansions are defined via Lisp.

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. Installation


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.1 Installation Instructions

    1. Copy file ‘template/lisp/template.el’ into your load-path and byte-compile it.
    2. Insert the following code into your Emacs init file (‘~/.emacs’):
       
      (require 'template)
      (template-initialize)
      
    3. If you want to customize package Template, use M-x customize-group <RET> template <RET> or the customize entry in menu Options.
    4. You might want to copy the template files from directory ‘template/templates/’ to ‘~/.templates/’ and change them according to your preferences.

    Installation instructions with further explanations can be found in file ‘template/INSTALL’ of the distribution.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. Basics

    Emacs, template, file template, comment decoration, auto-updating, time stamp, details


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.1 Menus and Key-Bindings

    For Emacs-21.1+ and XEmacs, this package defines the following menu entries and key-bindings:

    • In menu File , there is a new menu item New File Using Template... . The corresponding command is also bound to the key sequence C-x t.
    • At the end of menu Cmds (in XEmacs if it exists) or menu Edit , there is a new submenu Template Creation.
    • Enter C-x C-= (command template-single-comment) to insert dashes and alike into the current line and end the comment.
    • Enter C-x C-; (command template-single-comment) to insert dashes and alike around the current comment block.
    • At the end of menu Edit , there is a new submenu Comment. It also contains the two commands just mentioned.

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.2 Using a Template

    Package Template offers various ways how to use template files:

    In Emacs, the usual way to create a new file is by typing C-x C-f, using the menu or the toolbar (running command find-file or ffap) and entering a non-existent file name. In this case, you will be asked whether to use a template for the new file. You can turn off this feature.

    • Here a first undefined xref @xref{EExpansion}. There is a new command template-new-file (1) to create a new file using a template. Here, you have the chance to edit the name of the template file. This command also supports file name refinement which is useful to create a file in a series of files like ‘exercise2.tex’ etc.
    • There is also a command (M-x template-expand-template) to insert a template file into the current buffer and expand its expansion forms.

    For more template-new-file and template-auto-insert, See section Customization of keyword expansion rules.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.3 Finding a Template

    The algorithm for finding the most appropriate template can be best explained with a little example:

    • You have a project ‘~/proj/’ with subprojects ‘foo/’ and ‘bar/’ containing ‘.java’ files.
    • You want to define a general template for the ‘.java’ in your project files, although ‘.java’ files in subproject ‘foo/’ should use their own template. You also want to define a special template for all files ‘proj.java’ in the project.
    • Since you do not want to clutter the project directory with template files, you first create a directory ‘~/proj/Templates/’. In this directory, you create new files ‘TEMPLATE.java.tpl’ and ‘proj.java.tpl’. In directory ‘~/proj/foo/’, you create a new file ‘TEMPLATE.java.tpl’.

    The creation of the template files in the right directory is already enough for packages Template to find the most appropriate template for a new file:

    • If you create a new file ‘~/proj/foo/abc.java’, this package tries to find a template based on the file extension of the new file. The generic base file name for a template is ‘TEMPLATE’ and the additional extension is ‘.tpl’, a file ‘TEMPLATE.java.tpl’ exists in ‘~/proj/foo/’, so that file is used as the template.
    • If you create a new file ‘~/proj/bar/abc.java’, this package again tries to find ‘TEMPLATE.java.tpl’. Since this file doesn’t exist in ‘~/proj/bar/’, it first inspects the subdirectory ‘Templates/’ which doesn’t exist. The search continues with the parent directory ‘~/proj/’ and then its subdirectory ‘Templates/’. Thus ‘~/proj/Templates/TEMPLATE.java.tpl’ will be used.
    • If you create a new file ‘~/proj/foo/proj.java’, this package finds a template file with the same base name: it uses ‘~/proj/Templates/proj.java.tpl’. You might argue that ‘~/proj/foo/TEMPLATE.java.tpl’ resides in a more specific directory, but having the same base name is considered to be more important (remember that some file like Makefiles do not have file extensions).
    • If you create a new file ‘~/other_proj/foo/proj.java’, i.e., a project where you have defined no template files, this package uses one of the default templates, in this case ‘~/.templates/TEMPLATE.java.tpl’.

    For more on derivation See section Customization of how templates are derived.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.4 Creating a Template

    There are various predefined expansions which are probably enough for most templates. A corresponding expansion forms can be easily inserted by selecting the appropriate entry in the new submenu Template Creation :

    • Remember positions: use ‘(>>>POINT<<<)’ to set point (the cursor position), ‘(>>>MARK<<<)’ to set mark (e.g., the opposite position when a region is highlighted), and ‘(>>>1<<<)’ to ‘(>>>0<<<)’ to registers to the current position. Remember that C-x r j Key jumps to the position stored in register Key.
    • Insert parts of the file name, e.g., when creating the new file ‘~/proj/foo/abc1.java’: ‘(>>>DIR<<<)’ is replaced by ‘/home/user/proj/foo/’, ‘(>>>FILE<<<)’ by ‘abc1.java’, ‘(>>>FILE_SANS<<<)’ by ‘abc1’ , ‘(>>>FILE_UPCASE<<<)’ by ‘ABC1’ , ‘(>>>FILE_RAW<<<)’ by ‘abc’, ‘(>>>FILE_NUM<<<)’ by ‘1’ , and ‘(>>>FILE_EXT<<<)’ by ‘java’.
    • Insert the current date/time in two customizable and three fixed formats: use ‘(>>>DATE<<<)’ for ‘20 Feb 2002’, ‘(>>>TIME<<<)’ for ‘20:01:13’ , ‘(>>>YEAR<<<)’ for ‘2002’ , ‘(>>>ISO_DATE<<<)’ for ‘2002-02-20’ , and ‘(>>>VC_DATE<<<)’ for ‘2002/02/20 19:01:13
    • Insert the user/system name in various formats: use ‘(>>>AUTHOR<<<)’ for Christoph Wedler <wedler@fmi.uni-passau.de>, ‘(>>>USER_NAME<<<)’ for ‘Christoph Wedler’ , ‘(>>>LOGIN_NAME<<<)’ for ‘wedler’ , and ‘(>>>HOST_ADDR<<<)’ for ‘fmi.uni-passau.de’ .
    • Ask the user for some initial comment. If this expansion is used, the buffer for the new file will be marked as modified. For each undefined expansion, the user is also asked.
    • Disabling the search for expansion forms: ‘(>>>ZERO_FORM<<<)’ can be inserted into a string which will be otherwise regarded as an expansion form, the region between ‘(>>>LITERAL<<<)’ and the first ‘(>>>/LITERAL<<<)’ after it will be skipped.

    You can define your own expansions in your Emacs init file and at the end of a template file. A corresponding definition can be easily inserted by selecting the appropriate entry in the new submenu Template Creation:

    • Define User Input . Ask the user to insert some text using some specific prompt. Optionally, ask for a text with completion, or for a sequence of user input (exit with empty input).
    • Define Text Register . Define a text for register Reg which can be inserted with C-x r i Reg. Optionally, provide a comment for it which will be temporarily shown at point.
    • Define Message . Define a message which will be temporarily shown at point or before/after the expansion in a special buffer. There is also a computed message in the echo area.
    • Execute some Lisp coding defined at the end of the template. By default, you have to confirm it first, since it is insecure to execute unchecked coding. (You do not have menu support to define this kind of expansion.)
    User Option: template-default-expansion-alist
    User Option: template-definition-start

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.5 Decorating a Comment

    There are commands to decorate comments with dashes and alike (‘-’, ‘=’ and ‘#’ by default). Both commands are included in the new submenu Comments and bound to keys:

    • Use command template-single-comment to jump to the end of the current line and insert the dashes and the final comment end-string up-to the fill position. This command works with any comment style, including for languages having mixed comments like C++ and Java. It also works in major modes without a defined comment syntax.
    • Use command template-block-comment to surround the current comment block (i.e., contiguous comment lines) with extra lines containing dashes and alike and to put the correct number of newlines around the block. This command only works with comments which are terminated with the end of the line (like Java’s // comment).

    The comment decoration style is highly customizable and can be controlled by

    • The prefix argument given to the two commands.
    • The existing comment decoration style when present.
    • Determined by the indentation or the repetition of a single-character comment start (like Emacs-Lisp’s ;).

    For more on comments See section Customization of comments.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.6 Updating a Buffer

    A buffer is automatically updated according to some rules when saving the file. This updating can be invoked explicitly by selecting the menu entry Update Buffer in the new submenu Comments .

    • Update the file name in the first three lines of the buffer if the file name is indicated by @(#) FileName or ;;; FileName -- where ;;; stands for any comment start (with optional repetition of a single-character comment start).
    • Update the date if it is the last text inside the address element of a HTML buffer.
    • Automatic updating is optional, as is user confirmation for it. Automatic updating can be disabled for buffers whose file name matches a regular expression.
    • If nothing will be changed by the updating, there will be no user confirmation and the buffer will not be marked as modified.
    User Option: template-update-buffer
    User Option: template-auto-update
    User Option: template-update-buffer-alist
    User Option: template-header-regexp-alist

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4. Templates for advanced users


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.1 Templates customization


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.1.1 Customization of keyword expansion rules

    Interactive Command: template-new-file file template with-undo

    Open a new file file by using a template. Using a template for creating a new file consists of, steps 1 to 3 are only executed when called interactively:

    1. Prompt for the name of the new file.
    2. Template derivation: suggest a reasonable template file to the user see template-derivation-alist.
    3. File name refinement: e.g., if the given file name is ‘exercise’ and there are two files ‘exercise1.tex’ and ‘exercise2.tex’ in the same directory and if we have a template ‘exercise.tex.tpl’, the file name is refined to ‘exercise3.tex’. This is turned off when C-x t is called with a prefix argument.
    4. Template insertion: insert the template file into the empty buffer.
    5. Read per-template expansion definition section starting at template-definition-start and delete it.
    6. Display: before message in template-message-buffer.
    7. Execute pre-expansion commands defined in the definition section.
    8. Set local variables defined in the definition section.
    9. Expansion: expand the expansion forms (text matched by template-expansion-regexp) They are defined in the definition section, in template-expansion-alist, or provided by default, see template-expansion-regexp and template-register-regexp.
    10. Execute post-expansion commands defined in the definition section.
    11. Run normal-mode and functions in find-file-hooks.
    12. Update header according to template-update-header with argument if-exists.
    13. Display: after message in template-message-buffer.
    14. Report: display a temporary message at point defined in the definition section and an automatically generated message in the minibuffer area, see template-message-timeout.

    If optional with-undo is non-nil, store corresponding changes in buffer-undo-list. If file is nil, the buffer for file has already been created and the accessible part will be replaced by the expanded template. If template is nil (empty input when called interactively), do not use a template.

    User Option: template-auto-insert

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.1.2 Customization of how templates are derived

    User Option: template-derivation-alist

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.1.3 Customization of comments

    User Option: template-single-comment
    Interactive command: template-block-comment arg

    It is bound to C-x C-;, and <menu-bar> <edit> <Comment> <Decorate Comment Block>.

    Decorate the current block of comment-only lines with dashes and alike. That is, surround the the contiguous comment-only lines around point with extra lines containing dashes and alike and to put the correct number of newlines around the block.

    Barf if the comment syntax at point has a non-empty comment-end or if point is not in a comment-only line.

    A block comment consists of all neighboring lines which start with spaces and comment-start. If comment-start is a string of length 1, the number of repetitions of comment-start must be the same or larger than in the line where the command is invoked from, too.

    Prefix argument arg and template-comment-specification determines the comment style to use. The length of the separator line is determined by template-max-column.

    This command can also be used with point in an empty line after a block comment. A second invocation of this command directly after a successful invocation deletes the remaining empty lines from the current line on.

    User Option: template-comment-specification-alist

    List of specifications for comment functions. Each specification at level, starting at 1, is a list (separator before-block after-block DELETE-LINES)

    separator is the string which is inserted repeatedly by commands C-x C-= and C-x C-; up to template-max-column.

    After that, C-x C-; deletes DELETE-LINES after the comment block and inserts string after-block at the end of the block and before-block at the front of the block.

    The specification level to use is determined by:

    1. If the prefix argument is non-nil and its numeric value is > 0, this value is the level.
    2. If the prefix argument is nil, and there is an old comment style, use old comment style.
    3. If template-comment-specification-special is a function or the current major mode has a property with this name and its value is a function, this function returns the specification.
    4. If comment-end is empty and comment-start is a string of length 1: level is number of repetitions of comment-start at the beginning of the line. Otherwise, if the correctly indented line starts at the beginning of the line, level=3, else level=2.

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5. Indexes for commands, keyword, and variable


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.1 Keyword Index


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.2 Keyword Index

    Jump to:   T  
    Index Entry Section

    T
    template-block-comment4.1.3 Customization of comments
    template-new-file4.1.1 Customization of keyword expansion rules

    Jump to:   T  

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.3 Variable Index

    Jump to:   T  
    Index Entry Section

    T
    template-auto-insert4.1.1 Customization of keyword expansion rules
    template-auto-update3.6 Updating a Buffer
    template-comment-specification-alist4.1.3 Customization of comments
    template-default-expansion-alist3.4 Creating a Template
    template-definition-start3.4 Creating a Template
    template-derivation-alist4.1.2 Customization of how templates are derived
    template-header-regexp-alist3.6 Updating a Buffer
    template-single-comment4.1.3 Customization of comments
    template-update-buffer3.6 Updating a Buffer
    template-update-buffer-alist3.6 Updating a Buffer

    Jump to:   T  

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6. News for Package Template

    Latest Version:

    3.1c (21 Aug 2003).

    Requirements:

    Emacs-20.2, XEmacs-20.2, or higher.

    No menu support for Emacs before Version 21.1.

    Licence:

    GNU General Public License.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.1 Changes with Release 3.1c

    • Bug fix: on XEmacs, initialization would fail without menus "File" and "Edit" in menubar.
    • Allow messages to be displayed in a separate buffer "*Template Messages*" instead at point.
    • Correct and improve header updating.
    • Extend use of M-x template-single-comment.
    • Minor bug fixes. Miscellaneous.

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6.2 Changes with Release 3.1

    • Moved to SourceForge.net. Less technical description on web page.
    • Remove examples from distribution, they were more confusing than helpful.
    • Bug fix: would sometimes indent the current line when using the menubar.
    • Menus work with Emacs-21, too. Rename some menu entries.
    • Don’t search further for remote templates. Nuke this home/base directory stuff, stop search at root.
    • Don’t rely on command ffap to always add an entry to command-history if the filename is read from terminal. Special setup for ffap and html-helper.
    • Make date/time formats work as names suggest.
    • Command to insert & expand a template file.
    • Allow user to define a choice in the definition section to be answered via y-or-n-p.
    • Various miscellaneous improvements. Minor bug fixes.

    Christoph Wedler http://sourceforge.net/users/wedler/, 21 Aug 2003


    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)

    for the menu entry and its key-binding type C-h f template-new-file, @xref{EExpansion}


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/misc/res/mini_ker_httex/0000755000175000017500000000000011264347115022750 5ustar flichtenheldflichtenheldtexi2html-1.82/test/misc/res/mini_ker_httex/mini_ker_tex4ht_math.texi0000644000175000017500000004422411264347115027757 0ustar flichtenheldflichtenheld\input texinfo @setfilename mini_ker_tex4ht_math.info @c Automatically generated @verbatim @end verbatim @math{\eta} @verbatim @end verbatim @verbatim @end verbatim @math{\varphi} @verbatim @end verbatim @verbatim @end verbatim @math{t} @verbatim @end verbatim @verbatim @end verbatim @math{t + \delta t} @verbatim @end verbatim @verbatim @end verbatim @math{\delta \eta} @verbatim @end verbatim @verbatim @end verbatim @math{\eta} @verbatim @end verbatim @verbatim @end verbatim @math{\delta \varphi} @verbatim @end verbatim @verbatim @end verbatim @math{\varphi} @verbatim @end verbatim @verbatim @end verbatim @math{f} @verbatim @end verbatim @verbatim @end verbatim @math{g} @verbatim @end verbatim @verbatim @end verbatim @math{\delta t} @verbatim @end verbatim @verbatim @end verbatim @math{\delta \eta} @verbatim @end verbatim @verbatim @end verbatim @math{\delta \varphi} @verbatim @end verbatim @verbatim @end verbatim @math{\delta \varphi} @verbatim @end verbatim @verbatim @end verbatim @math{\delta \eta} @verbatim @end verbatim @verbatim @end verbatim @math{a} @verbatim @end verbatim @verbatim @end verbatim @math{c} @verbatim @end verbatim @verbatim @end verbatim @math{\varphi_{meet}} @verbatim @end verbatim @verbatim @end verbatim @math{\eta_{prey}} @verbatim @end verbatim @verbatim @end verbatim @math{\eta_{pred}} @verbatim @end verbatim @verbatim @end verbatim @math{\varphi} @verbatim @end verbatim @verbatim @end verbatim @math{\delta\eta} @verbatim @end verbatim @verbatim @end verbatim @math{\varphi} @verbatim @end verbatim @verbatim @end verbatim @math{\varphi=f(\eta(t-dt)+d\varphi} @verbatim @end verbatim @verbatim @end verbatim @math{d\varphi} @verbatim @end verbatim @verbatim @end verbatim @math{\varphi=f(\eta),\varphi)} @verbatim @end verbatim @verbatim @end verbatim @math{10^{-3}} @verbatim @end verbatim @verbatim @end verbatim @math{(I-D)} @verbatim @end verbatim @verbatim @end verbatim @math{(I-D)} @verbatim @end verbatim @verbatim @end verbatim @math{(I-D)} @verbatim @end verbatim @verbatim @end verbatim @math{k} @verbatim @end verbatim @verbatim @end verbatim @math{m_k} @verbatim @end verbatim @verbatim @end verbatim @math{k} @verbatim @end verbatim @verbatim @end verbatim @math{r_k} @verbatim @end verbatim @verbatim @end verbatim @math{d_k} @verbatim @end verbatim @verbatim @end verbatim @math{N} @verbatim @end verbatim @verbatim @end verbatim @math{N} @verbatim @end verbatim @verbatim @end verbatim @math{N+1} @verbatim @end verbatim @verbatim @end verbatim @math{N+1} @verbatim @end verbatim @verbatim @end verbatim @math{k} @verbatim @end verbatim @verbatim @end verbatim @math{k} @verbatim @end verbatim @verbatim @end verbatim @math{x/\Delta} @verbatim @end verbatim @verbatim @end verbatim @math{\omega} @verbatim @end verbatim @verbatim @end verbatim @math{h} @verbatim @end verbatim @verbatim @end verbatim @math{\varphi_{meet}} @verbatim @end verbatim @verbatim @end verbatim @math{\eta_{prey}} @verbatim @end verbatim @verbatim @end verbatim @math{\eta_{pred}} @verbatim @end verbatim @verbatim @end verbatim @math{\eta_1(t)} @verbatim @end verbatim @verbatim @end verbatim @math{\eta_1(t=0)} @verbatim @end verbatim @verbatim @end verbatim @math{t=0} @verbatim @end verbatim @verbatim @end verbatim @math{\phi_{j}(t)} @verbatim @end verbatim @verbatim @end verbatim @math{\eta_i(t=0)} @verbatim @end verbatim @verbatim @end verbatim @math{h(t)} @verbatim @end verbatim @verbatim @end verbatim @math{J} @verbatim @end verbatim @verbatim @end verbatim @math{T} @verbatim @end verbatim @verbatim @end verbatim @math{J} @verbatim @end verbatim @verbatim @end verbatim @math{\psi} @verbatim @end verbatim @verbatim @end verbatim @math{l} @verbatim @end verbatim @verbatim @end verbatim @math{h} @verbatim @end verbatim @verbatim @end verbatim @math{J} @verbatim @end verbatim @verbatim @end verbatim @math{t=0} @verbatim @end verbatim @verbatim @end verbatim @math{\omega} @verbatim @end verbatim @verbatim @end verbatim @math{t=s_i} @verbatim @end verbatim @verbatim @end verbatim @math{\mu} @verbatim @end verbatim @verbatim @end verbatim @math{Q} @verbatim @end verbatim @verbatim @end verbatim @math{\nu} @verbatim @end verbatim @verbatim @end verbatim @math{R} @verbatim @end verbatim @verbatim @end verbatim @math{W} @verbatim @end verbatim @verbatim @end verbatim @math{W} @verbatim @end verbatim @verbatim @end verbatim @math{W} @verbatim @end verbatim @verbatim @end verbatim @math{g(\tau)} @verbatim @end verbatim @verbatim @end verbatim @math{g(\tau)} @verbatim @end verbatim @verbatim @end verbatim @math{\tau} @verbatim @end verbatim @verbatim @end verbatim @math{\tau} @verbatim @end verbatim @verbatim @end verbatim @math{g(\tau;t)} @verbatim @end verbatim @verbatim @end verbatim @math{t} @verbatim @end verbatim @verbatim @end verbatim @math{\tau} @verbatim @end verbatim @verbatim @end verbatim @math{2} @verbatim @end verbatim @verbatim @end verbatim @math{\tau} @verbatim @end verbatim @verbatim @end verbatim @math{g(\tau;t)} @verbatim @end verbatim @verbatim @end verbatim @math{\tau} @verbatim @end verbatim @verbatim @end verbatim @math{\tau} @verbatim @end verbatim @verbatim @end verbatim @math{tau} @verbatim @end verbatim @verbatim @end verbatim @math{\tau} @verbatim @end verbatim @verbatim @end verbatim @math{\tau} @verbatim @end verbatim @verbatim @end verbatim @math{0.2} @verbatim @end verbatim @verbatim @end verbatim @math{\sqrt{\sqrt{2}}} @verbatim @end verbatim @verbatim @end verbatim @math{\tau} @verbatim @end verbatim @verbatim @end verbatim @math{\tau} @verbatim @end verbatim @verbatim @end verbatim @math{\tau} @verbatim @end verbatim @verbatim @end verbatim @math{g(\tau)} @verbatim @end verbatim @verbatim @end verbatim @math{g(t,\tau)} @verbatim @end verbatim @verbatim @end verbatim @math{A_{st}} @verbatim @end verbatim @verbatim @end verbatim @math{A_{st}} @verbatim @end verbatim @verbatim @end verbatim @math{A_{st} + A_{st}^\dagger} @verbatim @end verbatim @verbatim @end verbatim @math{A_{st}} @verbatim @end verbatim @verbatim @end verbatim @math{U} @verbatim @end verbatim @verbatim @end verbatim @math{w} @verbatim @end verbatim @verbatim @end verbatim @math{V} @verbatim @end verbatim @verbatim @end verbatim @math{A_{st} + A_{st}^\dagger} @verbatim @end verbatim @verbatim @end verbatim @math{A_{st}} @verbatim @end verbatim @verbatim @end verbatim @math{\Phi(t+\delta t,t)=\exp{A_{st} \delta t}} @verbatim @end verbatim @verbatim @end verbatim @math{w} @verbatim @end verbatim @verbatim @end verbatim @math{\Phi} @verbatim @end verbatim @verbatim @end verbatim @math{t} @verbatim @end verbatim @verbatim @end verbatim @math{\Phi(t,0)} @verbatim @end verbatim @verbatim @end verbatim @math{U} @verbatim @end verbatim @verbatim @end verbatim @math{\Phi} @verbatim @end verbatim @verbatim @end verbatim @math{w} @verbatim @end verbatim @verbatim @end verbatim @math{\Phi} @verbatim @end verbatim @verbatim @end verbatim @math{V} @verbatim @end verbatim @verbatim @end verbatim @math{\Phi} @verbatim @end verbatim @verbatim @end verbatim @math{\Phi(t,0)} @verbatim @end verbatim @verbatim @end verbatim @math{\Phi(t,0)} @verbatim @end verbatim @bye texi2html-1.82/test/misc/res/mini_ker_httex/mini_ker.html0000644000175000017500000140250211264347115025437 0ustar flichtenheldflichtenheld Miniker 102 manual
    [Top] [Contents] [Index] [ ? ]

    Miniker 102 manual


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Introduction

    Miniker is a modeling tool, built especially in order to implement models written following the TEF (Transfer Evolution Formalism) formalism, a mathematical framework for system analysis and simulation. Miniker allows for timewise simulation, system analysis, adjoint computation, Kalman filtering and more.

    Miniker uses a fortran preprocessor, mortran, designed in the 1970’s, to ease model writing using dedicated specific languages. For example partial derivatives are symbolicaly determined by mortran macros in Miniker. For the selection of another compile-time features, another set of preprocessor directives, the cmz directives, are used. In most cases the user does not need to know anything about that preprocessing that occurs behind the scene, he simply writes down the equations of his model and he is done.

    A comprehensive description of the TEF formalism in available on http://www.lmd.jussieu.fr/ZOOM/doc/tef-GB-partA5.pdf). The Miniker software is a reduced version of ZOOM, that can only handle a hundreds of variables, but is much easier to use.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Intended audience

    The reader should have notions in system dynamics. Moreover a minimal knowledge of programmation and fortran is required. What is required is a basic understanding of variable types, affectation and fortran expressions.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Reading guide

    The first chapter is a brief overview of the TEF. The following describes how to write, compile and run a model in Miniker in its basic and comprehensive syntax. Reading up to the section Controlling the run is required to be able to use Miniker. In this section it is assumed that Miniker is properly setup. The installation instructions are in the appendix at Installation.

    The next chapter describes advanced features, first a general introduction to features settings and then a description of other model description related features.

    The next chapter describes system analysis tools available with Miniker. The sections are independant and each describes how to use a specific feature. If you plan on using these features, you should also read Overview of feature setting.

    A final chapter describes advanced features in a development environment using make,

    In the appendix the instructions for the installation are described (see section Installation).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Other Manuals and documentation

    A programmers’Manual is available (in French), and can be asked for to any member of the collabration. See additional documents in http://www.lmd.jussieu.fr/Zoom/doc or ask for Research texts and articles to members.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. An overview of the TEF formalism

    The TEF (Transfer Evolution Formalism) is based on partitionning and recoupling of model subsystems. It allows the study of the coupling between subsystems by the means of linearization and time discretization.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 Cell and Transfer equations

    In the TEF, a model is mathematically represented by a set of equations corresponding to two kinds objects:

    1. Cells which are elementary models and correspond to evolution equations such as:
      ∂ η(t) = g(η(t),φ(t))
 t

      Vector η represent the state variables of cells and the vector φ represent the dependent boundary conditions, i.e. the variables considered as boundary conditions by a cell, but depending upon the complete model state. This dependent boundary conditions are required to make the cells correspond to well-posed problems. These variables are often called state variables, and prognostic variables in meteorology.

    2. Transfers which are determined by constraint equations such as:
      φ(t) = f (η(t),φ (t))
      These equations are often called algebraic equations, and in meteorology diagnostic equations.

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2 Linearization and discretization in the TEF

    The relations between sub-systems is excessively difficult to exhibit when having to cope with non-linear system. In the TEF, the TLS (Tangent Linear System) is constructed along the trajectory. One considers the system over a small portion along the trajectory, say between t and t + δt. The variation δη of η and δφ of φ is obtained through a Padé approximation of the state-transition matrix. The final form of the algebraic system is closed to the classical Crank-Nicolson scheme:

    (            )(    )   (  )
   A     B      δη      Γ
 - C+  I - D    δφ   =  Ω

    The blocks appearing in the Jacobian matrix are constructed with partial derivative of f and g, and with δt. From this system the elimination of δη leads to another formulation giving the coupling between transfers, and allows for the δφ computation. The δφ value is then substitued in δη to complete the time-step solving process.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. Miniker model programming

    Miniker works by combining the model specification code given by the user and other source files provided in the package. The code is assembled, preprocessed, compiled, linked and the resulting program can be run to produce the model trajectory and dynamic analysis.

    The code provided in the package contains a principal program, some usefull subroutines and pieces of code called sequences combined with the different codes. Among these sequences some hold the code describing the model and are to be written by the user (sequences are similar to Fortran include files).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.1 General structure of the code

    The sequences used to enter model description hold the mathematical formulae for each cell and transfer component, dedicated derived computations, and time-step steering. During the code generation stage, cmz directives are preprocessed, then the user pseudo-Fortran instructions are translated by mortran using macros designed to generate in particular all Fortran instructions that compute the Jacobian matrices used in TEF modelling.

    The sequence ‘zinit’ contains the mathematical formulation of the model (see section Entering model equation and parameters). Another sequence, ‘zsteer’, is merged at the end of the time step advance of the simulation, where the user can monitor the time step values and printing levels, and perform particular computations etc. (see section Executing code at the end of each time step).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2 Miniker programming illustrated

    The general TEF system writes:

    ∂η(t) = g(η(t),φ(t))
 t
 φ(t) = f(η(t),φ(t))

    To illustrate the model description in Miniker a simple predator-prey model of Lotka-Volterra is used. This model can be written in the following TEF form:

    {
  ∂tηprey = aηprey - aφmeet

  ∂tηpred = - cηpred + cφmeet
    φmeet = ηpreyηpred

    with two cell equations, i.e. state evolution of the prey and predator groups, and one transfer accounting for the meeting of individuals of different group.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2.1 All you need to know about mortran and cmz directives

    The first stage of code generation consists in cmz directives preprocessing. Cmz directives are used for conditional selection of features, and sequence inclusion. At that point you don’t need to know anything about these directives. They are only usefull if you want to take advantage of advanced features (see section Programming with cmz directives).

    The code in sequences is written in Mortran and the second stage of code generation consists in mortran macro expansion. The mortran language is described in its own manual, here we only explain the very basics which is all you need to know to use Miniker. Mortran basic instructions are almost Fortran, the differences are the following:

    • The code is free-form, and each statement should end with a semi-colon ;.
    • Comments may be introduced by an exclamation mark ! at the beginning of a line, or appear within double quotes " in a single line.
    • It is possible to use blocs, for do or if statement for example, and they are enclosed within brackets ‘<’ and ‘>’. To be in the safe side, a semi-colon ; should be added after a closng bracket >.

    The following fictious code is legal mortran:

     
    real 
      param;
    param = 3.; ff(1) = ff(3)**eta(1);       "a comment"                 
    ! a line comment
    do inode=1,n_node <eta_move(inode)=0.01; eta_speed(inode)=0.0;>;
    

    Thanks to mortran the model code is very simply specified, as you’ll see next.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2.2 Entering model equation and parameters

    The model equation and parameters and some Miniker parameters are entered in the ‘zinit’ sequence. The whole layout of the model is given before detailing the keywords.

     
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Parameters           
    !%%%%%%%%%%%%%%%%%%%%%%
      real apar,bpar;        "optional Fortran type declaration"
    
    ! required parameters
         dt=.01;             "initial time-step"
         nstep=10 000;       "number of iterations along the trajectory"
         time=0.;            "time initialisation "
    
    ! model parameters            
         apar = 1.5;             
         cpar = 0.7;          
                                                      
    ! misceallaneous parameters
         modzprint = 1000;    "printouts frequency" 
    
    print*,'***************************************';
    print*,'Lotka-Volterra model with parameters as:';
    z_pr: apar,bpar;
    print*,'***************************************';
    
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Transfer definition
    !%%%%%%%%%%%%%%%%%%%%%%
    ! rencontre (meeting)
    set_Phi
    < var: ff_interact, fun: f_interact = eta_prey*eta_pred;
    >;
    
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Cell definition
    !%%%%%%%%%%%%%%%%%%%%%%
    
    set_eta
    < var: eta_prey, fun: deta_prey =   apar*eta_prey - apar*ff_interact;
      var: eta_pred, fun: deta_pred = - cpar*eta_pred + cpar*ff_interact;
    >;
    
    
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Initial states
    !%%%%%%%%%%%%%%%%%%%%%%
         eta_prey = 1.;
         eta_pred = 1.;
    ;
        OPEN(50,FILE='title.tex',STATUS='UNKNOWN');   "title file"
        write(50,5000) apar,cpar;                     
    5000;format('Lotka-Volterra par:',2F4.1);
    

    Variables and model parameters

    The following variables are mandatory:

    dt

    The time step.

    time

    Model time initialisation.

    nstep

    Number of iterations along the trajectory.

    There are no other mandatory variables. Some optional variables are used to monitor the printout and ouput of results of the code. As an example, the variable modzprint is used to set the frequency of the printout of the model matrix and vectors during the run (see section Controlling the printout and data output).

    User’s defined variable and Fortran or Mortran instructions can always be added for intermediate calculus. To avoid conflict with the variables of the Miniker code, the rule is that a users symbol must not have characters ‘o’ in the first two symbol characters.

    In the predator-prey example there are two model parameters. The fortran variables are called here apar for a and cpar for c. If a Fortan type definition is needed, it should be set at the very beginning of ‘zinit’. The predator-prey code variable initializations finally reads

     
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Parameters         
    !%%%%%%%%%%%%%%%%%%%%%%
      real apar,bpar;        "optional Fortran type declaration"
    
         dt=.01;           
         nstep=10 000;    
         time=0.;            
    
    ! model parameters
         apar = 1.5;           
         cpar = 0.7;                                                            
    
         modzprint = 1000;  
    

    Model equations

    The model equations for cells and model equations for transferts are entered in two mortran blocks, one for the transferts, the other for the cell components. The model equations for cells are entered into a set_eta block, and the transfer equations are entered into a set_phi block.

    In each block the couples variable-function are specified. For transfers the function defines the transfer itself while for cells the function describes the cell evolution. The variable is specified with var:, the function is defined with fun:.

    In the case of the predator-prey model, the transfer variable associated with φmeet could be called ff_interact and the transfer definition would be given by:

     
    set_Phi
    < var: ff_interact, fun: f_interact = eta_prey*eta_pred;
    >;
    

    The two cell equations of the predator-prey model, with name eta_prey for the prey ( ηprey) and eta_pred for the predator ( ηpred) are:

     
    set_eta
    < var: eta_prey, fun: deta_prey =   apar*eta_prey - apar*ff_interact;
      var: eta_pred, fun: deta_pred = - cpar*eta_pred + cpar*ff_interact;
    >;
    

    The ‘;’ at the end of the mortran block is important.

    The whole model equations are setup with:

     
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Transfer definition
    !%%%%%%%%%%%%%%%%%%%%%%
    ! rencontre (meeting)
    set_Phi
    < var: ff_interact, fun: f_interact = eta_prey*eta_pred;
    >;
    
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Cell definition
    !%%%%%%%%%%%%%%%%%%%%%%
    
    set_eta
    < var: eta_prey, fun: deta_prey =   apar*eta_prey - apar*ff_interact;
      var: eta_pred, fun: deta_pred = - cpar*eta_pred + cpar*ff_interact;
    >;
    

    Whenever the user is not concerned with giving a specific name to a function, it is possible to specify the equation only with eqn:. Therefore the user may replace an instruction as:

     
      var: ff_dump,
      fun: f_dump  = - rd*(eta_speed - eta_speed_limiting);
    

    with:

     
       eqn: ff_dump = - rd*(eta_speed - eta_speed_limiting);
    

    In that case, the unnamed function will take the name of the defined variable preceded by the ‘$’ sign: $ff_dump.

    Starting points

    The cells equations require state initial conditions. In some case, the transfers may also need starting points although they are determined from the cell values.

    In the predator-prey model the starting points for cells are:

     
    !     initial state
    !     -------------
         eta_prey = 1.;
         eta_pred = 1.;
    

    When there is a non trivial implicit relationship between the transfers in the model, it may be usefull or even necessary to set some transfers to non-zero values. This difficulty is only relevant for the very first step of the simulation and will be used as a first guess of φ. The uninitialized transfers having a default compiler-dependant (often zero) value, an initialization to another value may help avoiding singular functions or matrix and ensure convergence in the Newton algorithm used to solve the transfer implicit equation.

    The cell and transfer arrays

    Sometime it is easier to iterate over an array than to use the cell or transfer variable name. This is possible because there is a correspondence between the variable names and the fortran array eta(.) for the cell variables and the fortran array ff(.) for the transfer variables(1).

    The index of the variable is determined by the order of appearance in the variable definition blocks. It is reminded in the output, as explained later (see section Running a simulation and using the output).

    The number of cells is in the integer np variable, and the number of transfer is in the integer mp variable.

    title file

    For some graphics generation, a file with name ‘title.tex’ is required which sets the title. The following instructions take care of that:

     
        OPEN(50,FILE='title.tex',STATUS='UNKNOWN');
        write(50,5000) apar,cpar;                 
    5000;format('Lotka-Volterra par:',2F4.1);
    
        close(50);
    

    In that case the parameter values are written down, to differenciate between different runs. This step is in general not needed.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3 Setting and running a model

    In this section it is assumed that a programming environment has been properly setup. This environment may use either cmz or make to drive the preprocessing and compilation. You can skip the part related with the environment you don’t intend to use.

    For instructions regarding the installation, see Installation.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3.1 Setup a model and compile with cmz

    The user defined sequences are ‘KEEP’ in the cmz world. The most common organization is to have a cmz file in a subdirectory of the directory containing the ‘mini_ker.cmz’ cmz file. In this cmz file there should be a ‘PATCH’ called ‘zinproc’ with the KEEPs within the patch. The KEEP must be called ‘$zinit’.

    From within cmz in the directory of your model the source extraction, compilation and linking will be triggered by a mod command. This macro uses the ‘selseq.kumac’ information to find the ‘mini_ker.cmz’ cmz file. mod shall create a directory with the same name than the cmz file, ‘mymodel/’ in our example. In this directory there is another directory ‘cfs/’ containing the sources extracted from the cmz file.

    The file ‘mymodel_o.tmp’ contains all the mortran code generated by cmz with the sequences substituted, including the ‘$zinit’. The fortran produced by the preprocessing and splitting of this file is in files with the traditional ‘.f’ suffix. The principal program is in ‘principal.f’. An efficient way of getting familiar with mini_ker methods is looking at the ‘mymodel_o.tmp’ where all sequences and main Mortran instructions are gathered. Symbolic derivation is noted as F_D(expression)(/variable), and the resulting Fortran code is in ‘principal.f’.

    mod also triggers compilation and linking. The object files are in the same ‘cfs/’ directory and the executable is in the ‘mymodel/’ directory, with name ‘mymodel.exe’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3.2 Setup a model and compile with make

    With make, the sequences are files ending with ‘.mti’ (for mortran include files), called, for example, ‘zinit.mti’. They are included by mortran in other source files. You also need a ‘Makefile’ to drive the compilation of the model.

    If you don’t need additional code or libraries to be linked with your model you have two alternatives.

    1. The simplest alternative is to run the start_miniker script with the model file name as argument. It should copy a ‘zinit.mti’ file ready to be edited and a Makefile ready to compile the model. For the predator prey model, for example, you could run
       
      $ start_miniker predator
      
    2. Otherwise you can copy the Makefile from ‘template/Makefile’ in the directory containing the sequences. You should then change the compiled model file name, by changing the value of the model_file_name variable to the name of your choice in the Makefile. It is set to ‘mymodel’ in the template. For the predator-prey model, it could be set like
       
      model_file_name = predator
      

      If you want the executable model file to be built in another directory, you could set

       
      model_file_name = some_dir/predator
      

      The other items set in the default Makefile should be right.

    The preprocessing and the compilation are launched with

     
    make all
    

    The mortran files are generated by the cmz directive preprocessor from files found in the package source directories. The mortran files end with ‘.mtn’ for the main files and ‘.mti’ for include files. They are output in the current directory. The mortran preprocessor then preprocess these mortran files and includes the sequences. The resulting fortran code is also in the current directory, in files with a ‘.f’ suffix. Some fortran files ending with ‘.F’ may also be created by the cmz directive preprocessor. The object files resulting from the compilation of all the fortran files (generated from mortran or directly from fortran files) are there too.

    In case you want to override the default sequences or a subroutine file you just have to create it in your working directory along with the ‘zinit.mti’. For example you could want to create or modify a ‘zsteer.mti’ file (see section Executing code at the end of each time step), a ‘zcmd_law.mti’ file (see section Control laws), a ‘monitor.f’ file (see section Turning the model into a subroutine) to take advantage of features presented later in this manual.

    More in-depth discussion of using make to run Miniker is covered in Advanced use of Miniker with make. For example it is also possible to create files that are to be preprocessed by the cmz directive preprocessor and separate source files and generated files. This advanced use is more precisely covered in Programming with cmz directives.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3.3 Running a simulation and using the output

    Once compiled the model is ready to run, it only has to be executed. On standard output informations about the states, transfers, tangent linear system and other jacobian matrices are printed. For example the predator-prey model could be executed with:

     
    ./predator > result.lis
    

    The correspondance between the symbolic variables and the basic vectors and functions are printed at run time:

     
      ---------------- Informing on Phi definition -----------------
        Var-name,           Function-name,       index in ff vector
                 ff_interact              f_interact  1
      ----------------------------------------------------
    
      --------------- Informing on Eta definition ------------------
       Var-name,           Function-name,       index in eta vector
                    eta_prey               deta_prey  1
                    eta_pred               deta_pred  2
    

    A summary of the model equations are in ‘Model.hlp’ file. For the same example:

     
    ======================= set_Phi                                                                
                                                                                             
        1 ff_interact f_interact           eta_pray*eta_pred
    ======================= set_Eta                                                                
                                                                                             
        1 eta_pray    deta_pray            apar*eta_pray-apar*ff_interact
        2 eta_pred    deta_pred            -cpar*eta_pred+cpar*ff_interact
    

    when other general functions are specified with f_set, it can appear also in the same help file when replaced by fun_set.

    As far as possible, all data printed in the listing are associated with a name related to a variable. Here is an extract:

     
     Gamma :-8.19100E-02-1.42151E-01 3.87150E-02
             eta_courant eta_T_czcx  eta_T_sz   
           ------------------------------------------------
     Omega : 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00
             courant_L   T_czcx      Psi_Tczc    Psi_Tsz 
           ------------------------------------------------
    

    for the two known vectors of the system, and:

     
     >ker : Matrice de couplage       4 4 4 4
    courant_L Raw(1,j=1,4):   1.000     -9.9010E-03  0.000       0.000    
    T_czcx    Raw(2,j=1,4): -2.7972E-02   1.000      0.000      9.9900E-04
    Psi_Tczcx Raw(3,j=1,4):  0.1605      9.7359E-02  1.000     -5.7321E-03
    Psi_Tsz   Raw(4,j=1,4):   0.000     -0.1376     5.7225E-03   1.000    
              Var-Name      courant_L   T_czcx      Psi_Tczc    Psi_Tsz 
              ----------------------------------------------------------
    

    where the couplage (coupling matrix) is given that corresponds to the matrix coupling the four transfer components after δη has been eliminated from system. It is computed in the subprogram ‘oker’ (for kernel) which solves the system.

    Basic results are output in a set of ‘.data’ files. The first line (or two lines) describes the column with a ‘#’ character used to mark the lines as comments (for gnuplot for example). In the ‘.data’ files, the data are simply separated with spaces. Each data file has the time variable values as first column. (2). Following columns give the values of eta(.) in ‘res.data’, dEta(.) in ‘dres.data’ – the step by step variation of eta(.) – and ff(.) in ‘tr.data’.

    Along the simulation the TEF Jacobian matrices are computed. A transfer variables elimination process also leads to the definition of the classical state advance matrix of the system (the corresponding array is aspha(.,.) in the code). This matrix is output in the file ‘aspha.data’ that is used to post-run dynamics analyses. The matrix columns are written column wise on each record. See section Stability analysis of fastest modes. See section Generalized tangent linear system analysis. It is not used in the solving process.

    Other ‘.data’ files will be described later.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3.4 Doing graphics

    Since the data are simply separated with spaces, and comment lines begin with ‘#’, the files can be vizualised with many programs. With gnuplot, for example, to plot eta(n), the gnuplot statement could be:

     
    plot "res.data" using 1:(n+1)
    

    The similar one for ff(n):

     
    plot "tr.data" using 1:(n+1)
    

    For people using PAW, the CERN graphical computer code, Miniker prepares kumacs that allow to read process the ‘.data’ files in the form of n-tuples (see the PAW manual for more information). In that cas, the flag sel paw has to be gievn in the ‘selsequ.kumac’. The generated n-tuples are ready to use only for vector dimension of at most 10 (including the variable time). These kumacs are overwritten each time the model is run. Usaually, gnuplot has to be preferred, but when using surfaces and histograms, PAW is better. The ‘gains.f’ (and ‘go.xqt’ is provided as an example in the Miniker files.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4 Controlling the run

    It is possible to add code that will be executed at the end of each time step. It is also possible to specify which time step leads to a printout on standard output. For maximal control, the code running te model may be turned into a subroutine to be called from another fortran (or C) program, this possibility is covered in Calling the model code.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4.1 Executing code at the end of each time step

    The code in the sequence ‘zsteer’ is executed at the end of each time step. It is possible to change the time step length (variable dt) verify that the non linearity are not too big, or perform discontinuous modifications of the states. One available variable res might be usefull for time step monitoring. At the end of the time step, as soon as φ has been computed, a numerical test is applied on a pseudo relative quadratic residual between φ = f(η(t - dt) + dφ ( ffl), where dφ is given by the system resolution in ker,and φ = f(η),φ) , Fortran variable (ff):

    ! ========================================================
    ! test linearite ffl - ff
    ! ========================================================
    if (istep.gt.1)
    < res=0.; <io=1,m; res = res +(ffl(io)-ff(io))**2/max(one,ff(io)*ff(io)); >;
      if (res .gt. TOL_FFL)
      < print*,'*** pb linearite : res > TOL_FFL a istep',istep,res,' > ',TOL_FFL;
        do io=1,m < z_pr: io,ff(io),ff(io)-ffl(io); >;
      >;
    >;
    

    This test hence applies only for non linearities in tranfer models. Nevertheless, res might be usefull to monitor the time step dt in ZSTEER and eventually go backward one step (goto :ReDoStep:). This can more appropriatly be coded in the (empty in default case) sequence zstep, inserted just before time-advancing states and time variables in ‘principal’.

    It is also possible to fix the value of the criterium TOL_FFL in ‘zinit’ different from its default value of 10-3 – independent of the Fortran precision.

    Many other variables are available, including

    istep

    The step number;

    couplage(.)

    The TEF coupling matrix between transfers;

    H

    The Jacobian matrix corresponding with:

    ∂ηg(η(t),φ(t));

    Bb

    The Jacobian matrix corresponding with:

    ∂φg(η(t),φ(t));

    Bt

    The Jacobian matrix corresponding with:

    ∂ηf(η(t),φ(t));

    D

    The Jacobian matrix corresponding with:

    ∂φf(η(t),φ(t));

    aspha

    The state advance matrix;

    dneta
    dphi

    the variable increments;

    One should be aware of that the linearity test concerns the preceding step. We have yet no example of managing the time-step.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4.2 Controlling the printout and data output

    The printout on standard output is performed if the variable zprint of type logical is true. Therefore it is possible to control this printout by setting zprint false or true. For example the following code, in sequence ‘zsteer’, triggers printing for every modzprint time step and the two following time steps:

     
    ZPRINT = mod(istep+1,modzprint).eq.0;
    Zprint = zprint .or. mod(istep+1,modzprint).eq.1;
    Zprint = zprint .or. mod(istep+1,modzprint).eq.2;
    

    The data output to ‘.data’ files described in Running a simulation and using the output is performed if the logical variable zout is true. For example the following code, in ‘zsteer’, triggers output to ‘.data’ files every modzout step.

     
    Zout = mod(istep,modzout).eq.0;
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. Advanced Miniker programming


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.1 Overview of additional features setting

    It is possible to enable some features by selecting which code should be part of the principal program. Each of these optionnal features are associated with a select flag. For example double precision is used instead of simple precision with the ‘double’ select flag, the model is a subroutine with the select flag ‘monitor’, the Kalman filter code is set with ‘kalman’ and the 1D gridded model capabilities are associated with ‘grid1d’. To select a given feature the cmz statement sel select_flag should be written down in the ‘selseq.kumac’ found in the model directory. With make either the corresponding variable should be set to 1 or it should be added to the SEL make variable, depending on the feature.

    Other features don’t need different or additional code to be used. Most of the features are enabled by setting specific logical variables to ‘.true.’. This is the case for zback for the adjoint model, zcommand if the command is in a file and zlaw if it is a function and zkalman for the Kalman filter. These select and logical flags are described in the corresponding sections.

    In cmz an alternative of writing select flags to ‘selseq.kumac’ is to drive the compilation with smod sel_flag. In that case the sel_flag is selected and the files and executable goes to a directory named ‘sel_flag’.

    The select flags are taken into account during cmz directives preprocessing. Therefore you have the possibility to use these flags to conditionnaly include pieces of code. In most cases you don’t need to include code conditionally yourself though, but if you want to, this is covered in Programming with cmz directives.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.2 Calling the model code

    When the model code is a subroutine, it can be called from another fortran program unit (or another program), and the model will be run each time the subroutine is called. This technique could be used, for example to perform optimization (see section Adjoint model and optimisation with Miniker), or to run the model with different parameters.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.2.1 Turning the model into a subroutine

    With cmz, one has to do a

     
    sel monitor
    

    in the ‘selseq.kumac’ file and create the KEEP that call the model code. See section Overview of additional features setting.

    With make ‘monitor’ should be added to the SEL variable in the ‘Makefile’, for example:

     
    SEL = monitor
    

    A file that call the principal subroutine should also be written, using the prefered language of the user. The additional object files should then be linked with the Miniker objects. To that aim they may be added to the miniker_user_objects variable.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.2.2 Calling the model subroutine

    The model subroutine is called ‘principal’ and is called with the following arguments:

    Subroutine: principal (Cost, ncall, integer_flag, file_suffix, info, idxerror)

    Where Cost is a real number, real or double precision, and is set by the principal subroutine. It holds the value of the cost function if such function has been defined (the use and setting of a cost function is covered later, see Cost function coding and adjoint modeling). ncall is an integer which corresponds with the number of call to principal done so far, it should be initialized to 0 and its value should not be changed, as it is changed in the principal subroutine. integer_flag is an integer that can be set by the user to be accessed in the principal subroutine. For example its value could be used to set some flags in the ‘zinit’ sequence. file_suffix is a character string, that is suffixed to the output files names instead of ‘.data’. If the first character is the null character ‘char(0)’, the default suffix, ‘.data’ is appended. info and idxerror are integer used for error reporting. idxerror value is 0 if there was no error. It is negative for an alert, positive for a very serious error. The precise value determines where the error occured. info is an integer holding more precise information about the error. It is usually the information value from lapack. The precise meaning of these error codes is in tab:error_codes.

    Source of error or warninginfoidxerror
    state matrix inversion in kerinversion1
    time advance system resolution in kersystem2
    transfer propagator, (I - D) inversioninversion3
    kalman analysis state matrix advance in phase space, (I - D) inversioninversion21
    kalman analysis variance covariance matrix non positiveCholeski22
    kalman analysis error matrix inversioninversion23
    kalman error matrix advancesystem24
    transfers determination linearity problem for transfers-1
    transerts determination Newton D_loop does not converge-2

    table 3.1: Meaning of error codes returned by principal.

    In general more information than the provided arguments has to be passed to the principal subroutine, in that case a common block, to be written in the ‘zinit’ sequence can be used.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.3 Describing 1D gridded model

    Specific macros have been built that allow generic description of 1D gridded models. Because of the necessity of defining left and right limiting conditions, the models are partitionned in three groups for cell and transfer components. In the following example, a chain of masselottes linked by springs and dumps is bounded to a wall on the left, and open at right. The TEF formulation of the problem is written in the phase space (position-shift, velocity) for node k, with bounding conditions:

    {    pos    vel
  ∂tηk  = ηk
  ∂tηvkel= (φspkr- φspk+r1 + φdkmp- φdmk+p1 )∕mk
    {  spr       pos   pos
  φk  = - kk(ηk  - ηk-1)
  φskpr= - dk(ηvkel- ηvek-l1)
    (   pos
||||  η0  = 0
{   ηv0el= 0
|| φsNp+r1 = 0
||(  dmp
  φN+1 = 0

    where mk is the mass of node k, rk and dk the rigidity of springs and dumping coefficients. There are N nodes in the grid, from 1 to N, and two nodes outside of the grid, a limiting node 0, and a limiting node N + 1. The limiting node corresponding with node 0 is called the down node, while the limiting node corresponding with node N + 1 is called the up node. Other models not part of the 1D grid may be added if any.

    To enable 1D gridded models, one should set the select flag ‘grid1d’. In cmz it is achieved setting the select flag in ‘selseq.kumac’, like

     
    sel grid1d
    

    With make, the SEL variable should contain grid1d. For example to select grid1d and monitor, it could be

     
    SEL = grid1d,monitor
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.3.1 Setting dimensions for 1D gridded model

    In that case the number of nodes, the number of states and tranferts per node, and the number of limiting transfers and states are required. These dimensions has to be entered in the ‘DimEtaPhi’ sequence. The parameters for cells are

    n_node

    Number of cell nodes in the 1D grid.

    n_dwn

    Number of limiting cells with index -1, i.e. number of cells in the limiting down node.

    n_up

    Number of limiting cells with index +1, i.e. number of cells in the limiting up node.

    n_mult

    Number of cells in each node (multiplicity).

    The parameters for transfers, are similarly m_node, m_dwn, m_up, m_mult. The layout of their declaration should be respected as the precompiler matches the line. Also this procedure is tedious, it should be selected for debuging processes (use the flag sel dimetaphi in “selsequ.kumac”. Otherwise, the dimensioning sequence will be automaticaly generated, which is smart but can lead to diffculty in interpreting syntax errors. Once a model is correctly entred, turn off the sel flag and further modifications will automatically generate the proper dimensions. The correctness of dimensionning should nevertheless always be checked in principal.f, where you can also check that null valued parameters as lp, mobs, nxp will suppress parts of the code - this is signaled as Fortran comment cards.

    In our example, there are three grids of cell and transfer variables (n_node=m_node=3). There are two cells and two transfers in each node (n_mult=2 and m_mult=2). There is no limiting condition for the states in the down node therefore n_up=0. There is no transfer for the first limiting node, and therefore m_dwn=0. There are two states in the limiting node 0, the down node, n_dwn=2, and two transfers in the limiting last node the node up, and m_up=2:

     
    ! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    ! nodes parameters, and Limiting Conditions (Low and High)
    ! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
          parameter (n_node=3,n_dwn=2,n_up=0,n_mult=2);
          parameter (m_node=3,m_dwn=0,m_up=2,m_mult=2);
    ! ________________________________________________________
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.3.2 1D gridded Model coding

    The model code and parameters go in the ‘zinit’ sequence.

    Parameters

    A value for the Miniker parameters and the model parameters should be given in ‘zinit’, in our example we have

     
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Parameters
    !%%%%%%%%%%%%%%%%%%%%%%
    real rk(n_node),rd(n_node),rmassm1(n_node);
    
    data rk/n_node*1./;
    data rd/n_node*0.1/;
    data rmassm1/n_node*1./;
         dt=.01;
         nstep=5 000;
         modzprint = 1000;
         time=0.;
    

    Limiting conditions

    There are four mortran blocks for node and up and down, both for states and transfers:

    set_dwn_eta

    down node cells

    set_up_eta

    up node cells

    set_dwn_phi

    down node transfers

    set_up_phi

    up node transfers

    The following scheme illustrates the example:

     
    !%%%%%%%%%%%%%%%%%%%%%%%%%%================================================
    ! Maillage convention inode
    !%%%%%%%%%%%%%%%%%%%%%%%%%%                                 Open ended
    !(2 Down    Phi    Eta                         (n_node)
    ! Eta)  \|       .-----.       .-----.          .-----.        /
    ! wall  \|-\/\/\-|     |-\/\/\-|     |  . . .  -|     |-\/\/\- |dummy
    !  pos  \|--***--|  1  |--***--|  2  |  . . .  -|  n  |--***-- |Phis
    ! speed \|   1   |_____|   2   |_____|      n   |_____|  n+1   \(2 Up Phi)
    !
    

    Two states are associated with the down node, they correspond to the position and speed of the wall. As the wall don’t move these states are initialized to be 0, and the cells are stationnary cells, therefore these values remain 0.

     
    ! Down cells (wall)
    ! -----------------
    eta_pos_wall = 0; eta_speed_wall = 0.;
    
    set_dwn_eta
    < var: eta_pos_wall,  fun: deta_pos_wall  = 0.;
      var: eta_speed_wall, fun: deta_speed_wall= 0.;
    >;
    

    There are 2 limiting transfers in the up node. They correspond with an open end and are therefore set to 0.

     
    ! limiting Transfers : dummy ones
    ! -------------------------------
    set_Up_Phi
    < var:ff_dummy_1, fun: f_dummy_1=0.;
      var:ff_dummy_2, fun: f_dummy_2=0.;
    >;
    

    Starting points

    The cell node state values are initialized. They are in an array indexed by the inode variable. In the example the variable corresponding with position is eta_move and the variable corresponding with speed is eta_speed. Their initial values are set with the following mortran code

     
    !---------------
    ! Initialisation
    !---------------
    ;
    do inode=1,n_node <eta_move(inode)=0.01; eta_speed(inode)=0.0;>;
    

    If any transfer needs to be given a first-guess value, this is also done using inode as the node index.

    Grid node equations

    Each node is associated with an index inode. It allows to refer to the preceding node, with inode-1 and the following node inode+1. The node states are declared in set_node_Eta block and the transfers are in set_node_Phi blocks.

    In the example, the cells are declared with

     
    ! node cells
    ! ----------
    ;
    set_node_Eta
    < var: eta_move(inode),  fun: deta_move(inode) = eta_speed(inode);
      var: eta_speed(inode),
      fun: deta_speed(inode) = rmassm1(inode)
                                 *( - ff_spring(inode+1) + ff_spring(inode)
                                   - ff_dump(inode+1)  + ff_dump(inode)
                                  );
    >;
    

    Note that the inode is dummy in the var: definition and can as well be written as: var: eta_move(.).

    The transfers are (ff_spring corresponds with springs and ff_dump with dumps):

     
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Transfer definition
    !%%%%%%%%%%%%%%%%%%%%%%
    ! node transfers
    ! --------------
    ! convention de signe spring : comprime:= +
    set_node_Phi
    < var: ff_spring(.),
      fun:
       f_spring(inode)= -rk(inode)*(eta_move(inode) - eta_move(inode-1));
      var: ff_dump(.),
      fun:
       f_dump(inode)  = -rd(inode)*(eta_speed(inode) - eta_speed(inode-1));
    >;
    

    The limiting states and transfers are associated with the states or transfers with index inode+1 or inode-1 appearing in node cell and transfer equations (inode-1 for down limiting conditions and inode+1 for up limiting conditions) in their order of appearance. In our example, in the eta_speed state node equation ff_spring(inode+1) appears before ff_dump(inode+1) and is therefore associated with ff_dummy_1 while ff_dump(inode+1) is associated with the ff_dummy_2 limiting transfer, as ff_dummy_1 appears before ff_dummy_2 in the limiting up transfers definitions. Verification of the grid index coherence should be eased with the following help printed in the listing header:

     
    
    
    
      --------------- Informing on Dwn Eta definition ---------------
     Var-name,            Function-name, index in eta vector
             eta_pos_wall        deta_pos_wall  1 [
           eta_speed_wall      deta_speed_wall  2 [
    
      -------------- Informing on Eta Nodes definition --------------
     Var-name,     Function, k2index of (inode: 0 [ 1,...n_node ] n_node+1)
                eta_move           deta_move    1 [   3 ...   7 ]   9
               eta_speed          deta_speed    2 [   4 ...   8 ]  10
    
      ---------------- Informing on Up  Phi  definition -------------
     Var-name,             Function-name, index in ff vector
              ff_dummy_1           f_dummy_1 ]    7
              ff_dummy_2           f_dummy_2 ]    8
             ff_move_sum          f_move_sum ]    9
            ff_speed_sum         f_speed_sum ]   10
      ----------------------------------------------------
    
     -------------- Informing on Phi Nodes definition ---------------
     Var-name,     Function, k2index of (inode: 0 [ 1,...m_node ] m_node+1)
               ff_spring            f_spring   -1 [   1 ...   5 ]   7
                 ff_dump              f_dump    0 [   2 ...   6 ]   8
      ----------------------------------------------------
    

    All variable names and functions are free but has to be different. Any particular node-attached variable k is referred to as: ‘(inode:k)’, where k has to be a Fortran expression allowed in arguments. The symbol ‘inode’ is reserved. As usual other Fortran instructions can be written within the Mortran block ‘< >’ of each set_ block.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.4 Double precision

    The default for real variables is the real Fortran type. It is possible to use double precision instead. In that case all the occurences of ‘real ’ in mortran code is substituted with ‘double precision ’ at precompilation stage, and the Lapack subroutine names are replaced by the double precision names. Eventual users’declaration of complex  Fortran variables is also changed to double complex .

    This feature is turned on by sel double in ‘selseq.kumac’ with cmz and double = 1 in the ‘Makefile’ with make.

    In order for the model to run as well in double as in simple precision, some care should be taken to use the generic intrinsic functions, like sin and not dsin. No numerical constant should be passed directly to subroutines or functions, but instead a variable with the right type should be used to hold the constant value, taking advantage of the implicit casts to the variable type.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.5 Partial Derivatives

    The partial derivative rules are included in a Mortran macro series in ‘Derive_mac’ of Miniker files. When using an anusual function, one should verify that the corersponding rules are in that file. It is easy to understand and add new rules in analogy with the already existing ones.

    For instance, suppose one wants to use the intrinsic Fortran function abs(). Its derivatives uses the other function sign() this way:

     
     &'(ABS(#))(/#)' = '((#1)(/#2)*SIGN(1.,#1))'
    

    In such cases when one is adding a new rule, it is important to use the generic function names only (i.e. sin not dsin), because when compilating Miniker in the double precision version, or complex version, the generic names will correctly handle the different variable types - which is not the case when coding with specific function names.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.5.1 Derivating a power function

    Partial derivative of a function in exponent is not secure in its Fortran form g(x,y)**(f(y)). It should be replaced by power(g,f) of the Miniker ‘mathlib’, or by the explicit form exp(f(y)*log(g(x,y))).

    Its derivative will have the following form:

    ∂xf g = gfg-1∂xf + f glogf ∂xg
        g-1
     = f   (g∂xf + f∂xg)

    and is in the macros list already defined in: ‘DERIVE_MAC’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.6 Rule of programming non continuous models

    Some models may originally be non continuous, as the ones using a Fortran instruction IF. Some may use implicitly a step function on a variable. In such cases, the model has to be set in a derivable form, and use a “smooth step” instead. One should be aware of that this apparently mathematical treatment currently indeed leads to a physical question about the macroscopic form of a physical law. At a macroscipic level, a step function is usually a nonsense. Taking the example of phase-change, a fluid volume does not change phase at once, and a “smooth change of state” is a correct macroscopic model.

    Miniker provides with the smooth step function Heavyside(3) in the Miniker ‘mathlib’:

     
            Delta = -1."K";
            A_Ice =  heavyside("in:" (T_K-Tf), Delta, "out:" dAIce_dT);
    

    in this example, Tf is the ice fusion-temperature, A_ice gives the ice-fraction of the mesh-volume of water at temperature T_k. The smooth-step function is a quasi hyperbolic tangent function of x∕Δ, normalised from 0 to 1, with a maximum slope of 2.5, see figure heavy.

    heavyside

    Figure 3.1: Heaviside function and derivative

    For Mortran to be able to symbolicaly compute the partial derivarives, the rule is in the table of macros as:

     
    &'(HEAVYSIDE(#,#,#))(/#)' = '((#1)(/#4)*HEAVYDELTA(#1,#2,#3))'
    

    which uses the Foratn entry point HeavyDelta in the Fortrsan function heavyside.

    Another type of problem arises when coding a var=min(f(x),g(x)) Fortran instruction. In such a case one does not want a derivative and one will code:

     
    var = HeavySide(f(x)-g(x),Delta,dum)*g(x) + (1.-HeavySide(f(x)-g(x),Delta,dum)*f(x);
    

    or equivalently:

     
    var = HeavySide(f(x)-g(x),Delta,dum)*g(x) + HeavySide(g(x)-f(x),-Delta,dum)*f(x);
    

    Warning: the value of the argument Delta is important because it will fix the maximum slope of the function that will appear as a coefficient in the Jacbian matrices.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.7 Parameters

    It is possible to specify some Fortran variables as specific model parameters. Model parameters may be used in sensitivity studies (see section Sensitivity to a parameter) and in the adjoint model (see section Sensitivity of cost function to parameters). Nothing special is done with parameters with Kalman filtering.

    The parameters are fortran variables that should be initialized somewhere in ‘zinit’. For a variable to be considered as a parameter, it should be passed as an argument to the Free_parameters macro. For example if apar and cpar (from the predator example) are to be considered as parameters, Free_parameters should be called with:

     
    Free_parameter: apar, cpar;
    

    When used with grid1d models (see section Describing 1D gridded model) the inode number may appear in parenthesis:

     
    Free_parameter: rd(1), rk(2);
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.8 Observations and data

    Some support for observations and interactions with data is available. The observations are functions of the model variables. They don’t have any action on the model result, but they may (in theory) be observed and measured. The natural use of these observations is to be compared with data that correspond with the values from real measurements. They are used in the Kalman filter (see section Kalman filter).

    The (model) observation vector is noted ω and the observation function is noted h:

    ω = h(η,φ )


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.8.1 Observations

    The observation functions are set in a set_probe block in the ‘zinit’ sequence.

    For example suppose that, in the predator-prey model, we only have access to the total population of preys and predators, we would have:

     
    set_probe
    < eqn: pop = eta_pred + eta_pray;
    >;
    

    The number of observations is put in the integer variable mobs. The observation vector corresponds with the part of the ff(.) array situated past the regular transferts, ff(mp+.), and is output in the file ‘obs.data’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.8.2 Data

    Currently this code is only used if the Kalman code is activated. This may be changed in the future.

    The convention for data is that whenever some data are available, the logical variable zgetobs should be set to ‘.true.’. And the vobs(.) vector should be filled with the data values. This vector has the same dimension than the observation vector and each coordinate is meant to correspond with one coordinate of the observation vector.

    This feature is turned on by setting the logical variable zdata to ‘.true.’, and the zgetobs flag is typically set in the ‘zsteer’ sequence (see section Executing code at the end of each time step). Every instant data are available (zgetobs is true) the observations are written to the file ‘data.data’. With the Kalman filter more informations are output to the ‘data.data’ file, see Kalman filter results.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.9 Entering model size explicitely

    It is possible to enter the model dimensions explicitely, instead of generating them automatically, as it was done previously. This feature is turned on by sel dimetaphi in ‘selseq.kumac’ with cmz and dimetaphi added to the SEL variable in the ‘Makefile’ with make.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.9.1 The explicit size sequence

    The dimension of the model is entered in the sequence ‘dimetaphi’, using the fortran parameter np for eta(.) and mp for ff(.). For the Lotka-Volterra model, we have two cell components and only one transfer.

     
    parameter (np=2,mp=1);
    

    You should not change the layout of the parameter statement as the mortran preprocessor matches the line.

    You also have to provide other parameters even if you don’t have any use for them. If you don’t it will trigger fortran errors. It includes the maxstep parameter that can have any value but 0, lp and mobs that should be 0 in the example, and nxp, nyp and nzp that should also be 0. The layout is the following:

     
    parameter (np=2,mp=1);
    parameter (mobs=0);
    
    parameter (nxp=0,nyp=0,nzp=0);
    parameter (lp=0);
    parameter (maxstep=1);
    

    If there are observations, (see section Observations), the size of the observation vector is set in the ‘dimetaphi’ sequence by the mobs parameter. For example if there is one observation:

     
    parameter (mobs=1);
    

    To specify parameters (see section Parameters), the number of such parameters has to be declared in ‘dimetaphi’ with the parameter lp. Then, if there are two parameters, they are first declared with

     
    parameter (lp=2);
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.9.2 Entering the model equations, with explicit sizes

    When sizes are explicit, another possibility exists for entering the model equations. The use of symbolic names, as described in Model equations is still possible, and it also becomes possible to set directly the equations associated with the eta(.) and ff(.) vectors.

    In case the symbolic names are not used, the model equations for cells and transfers are entered using a mortran macro, f_set(4), setting the eta(.) evolution with deta_tef(.) and the transfer definitions ff(.) with Phi_tef(.).

    Macro: f_set Phi_tef(i) = f(eta(.),ff(.))

    This macro defines the transfer i static equation. f is a fortran expression which may be function of cell state variables, ‘eta(1)’…‘eta(np)’ and transfers ‘ff(1)’…‘ff(mp)’.

    In the case of the predator-prey model, the transfer definition for φmeet is:

     
    f_set Phi_tef(1) = eta(1)*eta(2);  
    
    Macro: f_set deta_tef(i) = g(eta(i),ff(.))

    This macro defines the cell state component i time evolution model. g is a expression which may be function of cell state variables, ‘eta(1)’…‘eta(np)’ and transfers ‘ff(1)’…‘ff(mp)’.

    The two cell equations of the predator-prey model are, with index 1 for the prey ( ηprey) and index 2 for the predator ( ηpred):

     
    f_set  deta_tef(1) = apar*eta(1)-apar*ff(1);
    f_set  deta_tef(2) = - cpar*eta(2) + cpar*ff(1);
    

    The whole model is:

     
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Transfer definition
    !%%%%%%%%%%%%%%%%%%%%%%
    ! rencontres (meeting)
        f_set Phi_tef(1) = eta(1)*eta(2); 
    
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Cell definition
    !%%%%%%%%%%%%%%%%%%%%%%
    ! eta(1) : prey
    ! eta(2) : predator      
    
        f_set  deta_tef(1) = apar*eta(1)-apar*ff(1);
        f_set  deta_tef(2) = - cpar*eta(2) + cpar*ff(1);
    

    The starting points for cells are entered like:

     
    !     initial state
    !     -------------
         eta(1) = 1.;
         eta(2) = 1.;
    

    If there are observations, they are entered as special transferts with index above mp, for example:

     
    f_set Phi_tef(mp+1) = ff(1) ;
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.10 Programming with cmz directives


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.10.1 Cmz directives used with Miniker

    The main feature of cmz directive is to use code conditionnaly for a given select flag. For example when the double precision is selected (see section Double precision) the use of the conditionnal double flag may be required in case there is a different subroutine name for different types. If, for example, the user use the subroutine smysub for simple precision and dmysub for double precision the following code is an example of what could appear in the user code:

    +IF,double
     call dmysub(eta);
    +ELSE
     call smysub(eta);
    +ENDIF
    

    For a complete reference on cmz directives see the appendix Cmz directives reference.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.10.2 Using cmz directives in Miniker

    In cmz the KEEP and DECK have their cmz directives preprocessed as part of the source files extraction. And the +KEEP and +DECK directives are automatically set when creating the KEEP or DECK. With make, files with these directives has to be created within the files that are to be preprocessed by the cmz directives preprocessor.

    To be processed by make, a file that contains cmz directives should have a file suffix corresponding with the language of the resulting file and with the normal file suffix of that language. More precisely ‘cm’ should be added before the normal file suffix and after the ‘.’. Therefore if the resulting file language is associated with a suffix ‘.suf’, the file with cmz directives should have a ‘.cmsuf’ suffix. The tradition is to have a different suffix for main files and include files. To add directories searched for cmfiles (files with cmz directives) they should be added to the CMFDIRS makefile variable, separated by ‘:’.

    Rules for preprocessing of the files are defined in the file ‘Makefile.miniker’ for the file types described in tab:cmfile_suffix:

    languagefile typecmfile suffixsuffixlanguage
    fortranmain/deck.cmf.fftn
    fortran preprocessedmain/deck.cmF.Ff77
    fortran preprocessedinclude/keep.cminc.incf77
    mortranmain/deck.cmmtn.mtnmtn
    mortraninclude/keep.cmmti.mtimtn

    table 3.2: Association between file language, file type, file suffixes and language identifier in cmz directives. A main file is called a deck in cmz and an include file is called a keep.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4. Dynamic analysis of systems in Miniker


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.1 Automatic sensitivity computation

    An obvious advantage of having acces to the Jacobian matrices along the system trajectory concerns automatic sensitivity analyses, as either:

    • the sensitivity of all variables to perturbation in the initial condition of one state variable;
    • the same sensitivities to an initial pulse (or step) on a transfer;
    • the same sensitivities to a series of pulses (or steps) on a transfer;
    • the same for a change in a parameter, eventually during the run;
    • the sensitivity of the matrix of advance in state space to a change in a parameter.

    This is declared in Zinit as:

     
    ! -------------
    ! Sensitivities
    ! -------------
    Sensy_to_var
    < var: eta_pray, pert: INIT;
      var: eta_pred, pert: INIT;
    >;
    

    Each variable at origin of a perturbation is declared as var:, and the type of perturbation in pert:. Here, INIT conditions are only allowed because the two variables are states variables. For transfers, pert: pulse corresponds to an initial pulse, pert: step_resp and pert: step_eff to initial steps, the difference between _resp (response form) and _eff (effect form) concerns the diagonal only of the sensitivity matrix (see Feedback gains in non-linear models).

    Non initial perturbation can also be asked for:

     
      Sensy_to_var
      <
    !*     var: eta_courant_L, pert: init at 100;
    !*     var: ff_T_czcx,     pert: pulse at 100 every 20;
    !*     var: ff_Psi_Tczcx,  pert: step_eff;
    !*     var: ff_Psi_Tczcx,  pert: step_Resp at 10 every 100;
    ! *** premiers tests identiques a lorhcl.ref
        var: ff_courant_L , pert: step_eff;
        var: ff_T_czcx    , pert: step_eff;
        var: ff_Psi_Tczcx , pert: step_eff;
        var: ff_Psi_Tsz   , pert: pulse at 100 every 50;
      >;
    

    In this example taken from ‘lorhcl’, a sensitivity can increase so as to trespass the Fortran capacity, so that each sensitivity vector (matrix column) can be reset at some time-increment at III every JJJ;

    It is noteworthy that these sensitivity analyses are not based on difference between two runs with different initial states or parameter values, but on the formal derivatives of the model. This method is not only numerically robust, but is also rigorously funded as based on the TLS of the model(5).

    If the dimetaphi sequence is built by the users, he should declare the number of perturbing variables as nxp=:

     
          parameter (nxp=np,nyp=0,nzp=0);
    

    here, all state variables are considered as perturbing variables.

    The sensitivity vectors are output in the result files ‘sens.data’ for cells and ‘sigma.data’ for transfers. In those files the first column corresponds again with time, and the other columns are relative sensitivities of the cell states (in ‘sens.data’) and transfers (in ‘sigma.data’) with respect to the initial value of the perturbed state.

    In our predator-prey example, the second column of ‘sens.data’ will contain the derivative of η1(t) with respect to η1(t = 0). Drawing the second column of ‘sens.data’ against the first one gives the time evolution of the sensitivity of eta-pred to a change in the initial value of eta-pray. One can check in that it is set to 1 at t = 0:

     
    #    Sensy_to: eta_pray         3        eta_pred         5       
    # time \\  of: eta_pray     eta_pred     eta_pray     eta_pred    
      0.00000E+00  1.00000E+00  0.00000E+00  0.00000E+00  1.00000E+00
      1.00000E-02  9.90868E-01  1.11905E-02 -1.26414E-02  9.98859E-01
    

    The two last columns are the state sensitivity to a change in initial conditions of the number of predators.

    In the same way, the j+1th column of ‘sigma.data’ will be the derivative of ϕj(t) with respect to ηi(t = 0) . Here:

     
    #    Sensy_to: eta_pray     eta_pred    
    # time \\  of: ff_interact  ff_interact 
      0.00000E+00  1.60683E+00  8.47076E-01
      1.00000E-02  1.59980E+00  8.18164E-01
    

    the unique transfer variable gives rise to two sensitivity columns.

    Sensitivity studies are usefull to assess the predictability properties of the corresponding system.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.1.1 Sensitivity to a parameter

    A forward sensitivity to a parameter will be computed when specified as described in Parameters. For example, suppose that the sensitivity to an initial change in the apar parameter of the predator model is of interest.

    The sensitivity calculs is turned on as a forward parameter specified on the Free_parameter list:

     
    Free_parameter: [fwd: apar, cpar];
    

    The result are in ‘sensp.data’ for cells and ‘sigmap.data’ for transfers.

     
    #    Sensy_to: pi_prandtl       3            4        pi_rayleigh_     6
    # time \\  of: eta_courant_ eta_T_czcx   eta_T_sz     eta_courant_ eta_T
      0.00000E+00  0.00000E+00  0.00000E+00  0.00000E+00  0.00000E+00  0.000
      2.00000E-03 -4.77172E-03 -3.99170E-05  3.55971E-05 -9.94770E-05 -1.004
    

    In the above example from ‘lorhcl’ sensitivity of the three states with respect to an initial change in two parameters are independantly given (first line also numbers the column to easy gnuplot using).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.1.2 Advance matrix sensitivity

    It is possible to look at the sensitivity of the matrix of advance in states space (the matrix aspha) with regard to a parameter. The parameter must be accounted for in the parameter number and be in the parameter list, flagged as the matrix mx parameter, like in

     
    Free_parameter: [mx: apar], cpar;
    

    This feature is associated with a selecting flag, ‘dPi_aspha’. One gets the result in the matrix d_pi_aspha(.,.) of dimension (np,np).

    This matrix may be used to compute other quantities, for example it may be used to compute the sensitivity of the eigenvalues of the state-advance matrix with regard to the [fwd] parameter. These additional computations have to be programmed by the user in ‘zsteer’ with matrices declared and initialized in ‘zinit’. An example is given in the example ‘lorhcl’ provided with the Miniker installation files, following a method proposed by Stephane Blanco.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.2 Adjoint model and optimisation with Miniker

    In the following a possible use of Miniker for optimisation is discussed. More precisely the use of adjoint and control laws in Miniker are presented. Optimisation isn’t the only application of these tools, but it is the most common one. In that case the adjoint may be used to determine the gradient of a functional to perturbations in the control laws, and an optimisation process can use this information to search for the optimum. Another application of the adjoint is to compute the sensitivity of a cost function to parameters (the ones declared in the free_parameters:’ list. Note that the cost function can be sensitive to probe’s variables, even if these are uncoupled with standard variables in the forward calculations; this is the case when minimizing a quadratic distance function between probes (from the model) and the corresponding measurements.

    The code is close transcription of the mathematical calculus described in
    http://www.lmd.jussieu.fr/ZOOM/doc/Adjoint.pdf . It essentialy reverse time and transpose the four Jacobian matrices: states and transfers are saved in array dimensionned with maxstep Fortran parameter.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.2.1 Overview of optimisation with Miniker

    In the proposed method, Miniker is run twice, one time forward and then backward to determine the trajectory and the adjoint model. After that the control laws are modified by a program external to Miniker. The same steps are repeated until convergence. More pecisely,

    forward

    The command law h(t) is given (by an explicit law or taken from a file). The trajectory is computed in a classical way, with the additionnal computation of the functional to be optimised, J, prescribed with specific f_set macros. The states, transfers and control laws are stored.

    backward

    The adjoint variable is computed from the last time T backward. The time increment is re-read as it could have changed during the forward simulation. The system is solved by using the same technics as in the forward simulation, but with a negative time step.

    external phase

    Now the command should be corrected. This step isn’t covered here, but, for example, minuit the optimisation tool from the CERN could be used. In order to ease such a use of Miniker, the principal program has to be compiled as a subroutine to be driven by an external program (see section Calling the model code).

    The functionnal J to be optimised is defined as

                           ∫ T
J = ψ [η(T),φ(T),h(T)]+    l[η(τ),φ (τ ),h(τ)]dτ
                        0

    Where ψ is the final cost function, l is the integrand cost function and h represents the control laws variations.

    The general use of the adjoint model of a system is the determination of the gradient of this J functional to be optimised, with respect to perturbations of the original conditions of the reference trajectory, that is, along its GTLS(6).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.2.2 Control laws

    Each control law is associated with one cell or transfer equation, meaning that a command associated with an equation does not appear in any other equation. It is still possible to add commands acting anywhere by defining a transfer equal to that command.

    The control laws associated with states are in the ux_com(.) array, control laws associated with transfers are in the uy_com(.) array. The control laws may be prescribed even when there is no adjoint computed, nor any optimisation, and they are used during simulation, in which case they will act as external sources. To enable the use of commands, the logical flag Zcommand should be .true..

    The command can be given either as:

    1. a table of numerical values in the files ‘uxcom.data’ and ‘uycom.data’.
    2. a function of the problem variables. To turn that feature on the logical flag Zlaw should be set to .true. in ‘zinit’. The sequence ‘zcmd_law’ should hold the code filling the ux_com(.) and uy_com(.) arrays, as the code from that sequence is used whenever the control laws are needed. In that case the files ‘uxcom.data’ and ‘uycom.data’ will be filled by the command values generated by the function along the trajectory.

    For example in the Lotka-Volterra model, the parameter apar could be a control variable. In that case, apar would be defined as the variable ux_com(1), and either entered as a law in the sequence ‘zcmd_law’ , either written in the file ‘uxcom.data’ step by step. In that case, there must be a perfect corresponodence between time of the commands and time of the run.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.2.3 Cost function coding and adjoint modeling

    First of all the flag zback should be set to .true. in order to allow adjoint model computation:

     
    Zback=.true.;
    

    The two functions cout_Psi corresponding with the final cost and cout_l corresponding with the integrand cost are set up with the f_set macros.

    Macro: f_set cout_Psi = f(eta(.),ff(.),ux_com(.),uy_com(.))

    This macro defines the final cost function. f is a fortran expression which may be function of cell state variables, ‘eta(1)’…‘eta(np)’, transfers ‘ff(1)’…‘ff(mp)’, state control laws ‘ux_com(1)’…‘ux_com(np)’, and transfer control laws ‘uy_com(1)’…‘uy_com(mp)’.

    Macro: f_set cout_l = f(eta(.),ff(.),ux_com(.),uy_com(.))

    This macro defines the integrand cost function. f is a fortran expression which may be function of cell state variables, ‘eta(1)’…‘eta(np)’, transfers ‘ff(1)’…‘ff(mp)’, state control laws ‘ux_com(1)’…‘ux_com(np)’, and transfer control laws ‘uy_com(1)’…‘uy_com(mp)’.

    For example, the following code sets a cost function for the masselottes model:

     
    ! Initialisation 
      F_set cout_Psi = eta_move(inode:1);
    !and f_set cout_l integrand in the functionnal    
      F_set cout_l = 0.;
    

    In that example the functional is reduced to the final value of the first state component. Here, the adjoint vector will correspond to the final sensitivity (at t = 0) of that component (here the first masselotte position) to a perturbation in all initial conditions(7).

    The following variables are set during the backward phase, and output in the associated files:

    varfileexplanation
    v_adj(.)vadj.dataadjoint to eta(.)
    w_adj(.)wadj.dataadjoint to ff(.)
    wadj(mp+.)gradmuj.dataadjoint to ff(mp+.)
    graduej(.)gradxj.dataadjoint to ux_com(.)
    gradufj(.)gradyj.dataadjoint to uy_com(.)
    hamiltonhamilton.datatime increment, hamiltonian, cost function increment

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.2.4 Sensitivity of cost function to parameters

    The sensitivity of the cost function to all the parameters given as arguments of Free_parameters is computed. For the predator model the sensitivity of a cost function consisting in the integral of the predator population with respect with apar an cpar is obtained with a number of parameters set to 2 in ‘dimetaphi’:

     
    parameter (lp=2);
    

    And the cost function and Free_parameters list in ‘zinit’:

     
    f_set cout_Psi = eta(2);
    f_set cout_l = eta(2);
    Free_parameters: apar,cpar;
    

    apar and cpar also have to be given a value. The result is output in ‘gradpj.data’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3 Kalman filter

    The Kalman filter allows for data assimilation along the model run. In that case it is assumed that there is a real-world model with stochastic perturbations on the states, and that noisy observations are available. The situation implemented in Miniker corresponds to a continuous stochastic perturbation on the state, and discrete noisy observations. In the TEF this leads to:

    ∂tη(t) = g(η(t),φ(t))+ W (t)μ
 φ (t) = f (η(t),φ (t))

 ω (t) = h (η(t),φ (t))+ ν

    The observations ω are available at discrete time steps t = si. The stochastic perturbation on state, μ is characterized by a variance-covariance matrix Q and the noise on the observation, ν has a variance-covariance matrix R. W relates states with stochastic perturbations. At each time step the Kalman filter recomputes an estimation of the state and the variance-covariance matrix of the state.

    In the following we use the example of a linear model with perturbation on state and observation of state. The model has 3 states and 3 corresponding transfers (equal to the states), but the error on the state is of dimension 2. The 3 states are observed. The corresponding equations read:

    (
|{ ∂tη1 = a11η1 + a12φ2 + a13φ3 + W11 μ1 + W12μ2
| ∂tη2 = a21φ1 + a22η2 + a23φ3 + W21 μ1 + W22μ2
( ∂tη3 = a31φ1 + a32φ2 + a33η3 + W31 μ1 + W32μ2
    (
|{ φ1 = η1
  φ2 = η2
|( φ  = η
   3    3
    (
|{ ω1 = φ1 + ν1
  ω = η  + ν
|(  2   2   2
  ω3 = η3 + ν3


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3.1 Coding the Kalman filter

    First of all the Kalman filter code should be activated. The observations code is also required (see section Observations). If cmz is used the code should be selected with the select flag kalman in the ‘selseq.kumac’:

     
    sel kalman
    

    With make the kalman variable should be set to 1:

     
    kalman = 1
    

    The kalman code is actually used by setting the flag zkalman to .true., for example in the ‘zinit’:

     
    zkalman = .True.;
    

    With the Kalman filter the dimension of estimated states, of the error on the state and of the observation, the W matrix, the observation function, the initial variance-covariance matrices on the state and the variance-covariance matrices of errors have to be given.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3.1.1 Kalman filter vectors dimensions

    These dimensions should be set in the ‘zinit’ sequence. The size of the estimated states is given by the parameter nkp. You can set this to np if all the states are estimated, but in case there are some deterministic state variables, nkp may be less than np. In that case the first nkp elements of eta(.) will be estimated using the Kalman filter.

    The error on state dimension is associated with the parameter nerrp and the size of the observations vector is mobs (see section Observations). In our example the dimensions are set with:

     
    parameter (nkp=np);
    parameter (mobs=3);
    parameter (nerrp=2);
    

    All the states are estimated, there are 3 observation functions and the error on the state vector is of dimension 2.

    If the sizes are set explicitely, the parameters should be set in ‘dimetaphi’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3.1.2 Error and observation matrices

    Initial variance-covariance matrix on the state

    The variance-covariance on the state matrix is covfor(.,.). The initial values have to be given for this matrix, as in our example:

     
    covfor(1,1) = 1000.; covfor(1,2) = 10.; covfor(1,3) = 10.;
    covfor(2,1) = 10.; covfor(2,2) = 5000.; covfor(2,3) = 5.;
    covfor(3,1) = 10.; covfor(3,2) = 5.; covfor(3,3) = 2000.;
    

    This matrix is updated by the filter at each time step because the states are pertubated by some noise, and when assimilation takes place as new information reduce the error.

    Observations and error on state matrix

    The matrix that relates errors on states vector components to states, corresponding with W is mereta(.,.). In our example it is set by:

     
    mereta(1,1) = 1.;  mereta(1,2) = 0.;
    mereta(2,1) = 0.;  mereta(2,2) = 1.;
    mereta(3,1) = 0.5;  mereta(3,2) = 0.5;
    

    The observation functions are set by a f_set macro with Obs_tef(.) as described in Observations. In our example the observation functions are set by:

     
    f_set Obs_tef(1) = ff(1) ;
    f_set Obs_tef(2) = eta(2);
    f_set Obs_tef(3) = eta(3);
    

    Error variance-covariance matrices

    The variance-covariance matrix on observation noise is covobs(.,.) set, in our example, by:

     
    covobs(1,1) = 0.3; covobs(1,2) = 0.; covobs(1,3) = 0.;
    covobs(2,1) = 0.; covobs(2,2) = 0.1; covobs(2,3) = 0.;
    covobs(3,1) = 0.; covobs(3,2) = 0.; covobs(3,3) = 0.2;
    

    The variance-covariance matrix on state noise is coveta(.,.) set, in our example, by:

     
    coveta(1,1) = 0.2; coveta(1,2) = 0.001;
    coveta(2,1) = 0.001; coveta(2,2) = 0.1;
    

    These matrices are not changed during the run of the model as part of the filtering process. They may be changed by the user in ‘zsteer’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3.2 Kalman filter run and output


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3.2.1 Feeding the observations to the model

    The observations must be made available to the model during the run. These observations are set in the vobs(.) array, and the assimilation (also called the analysis step of the filter) takes place if the logical variable zgetobs is .true. (see section Data).

    These steps are typically performed in the ‘zsteer’ sequence. In this sequence there should be some code such that when there are data ready to be assimilated, zgetobs is set to .true. and the data is stored in vobs(.), ready for the next step processing.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3.2.2 Kalman filter results

    The estimated states and transfers are still in the same ‘.data’ files, ‘res.data’ and ‘tr.data’ and there is the additional file with observations, called ‘obs.data’ (see section Observations). Each time zgetobs is .true. the data, and the optimally weighted innovations are output in the file associated with data, ‘data.data’ (see section Data).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3.3 Executing code after the analysis

    The analysis takes place before the time step advance when zgetobs is .true.. It may be usefull to add some code after the analysis and before the time step advance. For example the analysis may lead to absurd values for some states or parameters, it could be usefull to correct them in that case. The sequence included after the analysis is called ‘kalsteer’. At this point, in addition to the usual variables the following variables could be usefull:

    etafor(.)

    The state before the analysis.

    kgain(.)

    The Kalman gain.

    innobs(.)

    The innovation vector (observations coherent with the states minus data values).

    covana(.,.)

    The variance-covariance error matrix after the analysis.

    At each time step the derivative of the observation function with respect to transfer and cells variables are recomputed. The elimination of transfers is also performed to get the partial derivative of the observation function of the equivalent model, with states only, with respect to the states. In other words, the Kalman filter does not follow the TEF formalism, because the advance of the var-covar matrix could not yet be set in the TEF form.

    obspha(.,.)

    derivative of observation function in state space with respect to cell variables.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.4 Feedback gain

    The feedback dynamic gain associated with a feedback loop can be expressed as the inverse Borel transform of the coefficient of the reduced scalar coupling matrix, g(τ), associated with a transfer. A Borel sweep provides this g(τ). Therefore it is an interesting tool for the characterization of the feedback loop(8).

    As explained in the ZOOM web page document http://www.lmd.jussieu.fr/ZOOM/doc/Feedback_Gain.pdf, this allows for the calculation of the dynamic gain and factor of any feedback that goes through a unique transfer variable. An example of the conclusions that can be drawn from such an analysis is provided in the same document.

    For linear systems – whose GTLS are autonomous along the whole trajectory – the τ function of the feedback gain is independent of the position on the system trajectory. But in general it is dependant, and one can analyse the function g(τ;t) defined on a segment t of the trajectory.

    The document introducing the TEF-ZOOM technique explains how a Crank-Nicolson scheme for the time discretisation symbolically gives the solution of the Borel transform of the system. One can identify the dt variable with the Borel τ within a factor 2 . Hence, to numerically study the τ dependency of the transform of various coefficients in the system coupling matrix at one point in time, one can calculate the Borel transform of the TLS solutions by making a time-step sweep.

    The function g(τ;t) is simply output for the feedback gain attached to a unique ff(k) transfer variable. All the relevant informations should be entered in the ‘zinit’ sequence.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.4.1 Specifying the Borel sweep

    First of all the logical flag ZBorel should be raised:

     
    ZBorel=.true.;
    

    The index of the studied transfer is given in the index_ff_gain variable

     
    index_ff_gain=7;
    

    At each time step a Borel sweep may be performed. The time steps of interest are specified with three variables, one for the first step, one for the last step and one for the number of steps between two Borel sweeps:

    istep_B_deb

    First time step for the Borel sweep.

    istep_B_fin

    Last time step for the Borel sweep.

    istep_B_inc

    Number of time steps between Borel sweeps.

    In the following examples Borel sweeps are performed from the time step 1000 up to the time step 1200, with a sweep at each time step:

     
    istep_B_deb=1000;   
    istep_B_fin=1200;  
    istep_B_inc=1;      
    

    For each Borel sweep, the range of the τ variable should be set. As this is a multiplicative variable the initial value, a multiplicative factor and the number of values are to be given.

    tau_B_ini

    Initial value for τ.

    tau_B_mult

    Multiplicative factor for sweep in tau.

    itau_max

    Number of τ values.

    For example, in the following, at each time step, the Borel transform will be computed for τ values starting at 0.2 and then multiplied a hundred times by ∘ __√ _2

     
    tau_B_ini=0.2;    
    tau_B_mult=sqrt(sqrt(2.)); 
    itau_max=100;             
    

    When the initial value of τ is set to a negative value (i.e. tau_B_ini=-0.2;), the Borel sweep will first be applied with itau_max negative values for -0.2, tau_B_mult*(-0.2),..., then for the zero value, and finally for the symetric positive values, resulting in 2*itau_max+1 values for τ.

    The whole example reads

     
    ! -------------------
    ! Feedback gain
    ! Borel
    ! -------------------
    ZBorel=.true.;
    if ZBorel           
    <  istep_B_deb=1000; 
       istep_B_fin=1200;
       istep_B_inc=1;  
    ;
       index_ff_gain=7; 
       tau_B_ini=0.2;    
       tau_B_mult=sqrt(sqrt(2.)); 
       itau_max=100;             
       z_pr/Borel/:tau_B_mult,tau_B_ini*(tau_B_mult)**itau_max;
    >;
    

    Instead of using the index of the transfer in index_ff_gain it is possible to specify the name of the transfer.In that case the transfer is specified by the zborel for macro. For example if the transfer selected for the feedback gain computation is b_transfer, it can be selected with:

     
    zborel for: b_transfer;
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.4.2 Borel sweep results

    The file ‘tau_Borel.data’ gives the τ values of the tau sweep, and the file ‘gains.data’ records the feedback gain function values of g(τ), with one line for each sweep along the trajectory. In the 1.01 version, a new feature is also provided giving the poles and residuals of the Borel transform in the file ‘vpgains.data’. Consult the subroutine Boreleig for (not definitive) output description.

    One can easily obtain the surface contours of g(t,τ) using the Fortran program provided as ‘gains.f’ and its compilation shell ‘gains.xqt’, that builds 2D histograms for PAW, in which one uses the ‘borels.kumac’ provided kumac.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.5 Stability analysis of fastest modes

    The preceding analyses are done along with a simulation. One has also the possibility of using in a more classical fashion the state advance matrix Ast, after the end of the simulation. Code to perform the SVD (Singular Value Decomposition) of the state matrix Ast and also of Ast + A† st is provided with Miniker. The singular elements of these two matrices correspond to the most rapid modes of instability of the perturbed system.

    The Singular value decomposition of a matrix is noted

        †
UwV

    An executable file, ‘sltc.exe’ is generated and running this file will produce the corresponding results.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.5.1 Singular Value Decomposition with cmz

    The cmz macro smod SLTC prepares a main program (‘circul’ of +PATCH SLTC), provided as a base for user’s own analysis, in the directory ‘sltc/’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.5.2 Singular Value Decomposition with make

    To compile the singular value decomposition executable with make you can do

     
    make sltc.exe
    

    If you want to have a separate directory for the SVD, you should copy the sequence ‘dimetaphi.inc’ (or make a link to that file) to the directory. You should also copy the file ‘Makefile.sltc’ from the ‘template/’ directory in this directory, rename it ‘Makefile’ and set the Miniker directory path in the miniker_dir variable. For example, if the Miniker directory is in ‘/u/src/mini_ker’:

     
    miniker_dir = /u/src/mini_ker
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.5.3 Singular Value Decomposition run and output

    As it is, the ‘sltc.exe’ executable generated by the compilation determines the SVD. This program requires ‘title.tex’ (see Title file) to transmit a title for output and graphics, and ‘aspha.data’ (see section Running a simulation and using the output) to access the state matrix. To get access to these files (in case they are not in the current directory) it is possible to make a link to the corresponding files in the model directory. Once it is done the program may be run:

     
    ./sltc.exe
    

    The files ‘u.data’, ‘w.data’, and ‘v.data’ holds the singular elements for Ast ( U, w and V), and ‘us.data’, ‘ws.data’, and ‘vs.data’ holds the singular elements of Ast + A† st. The corresponding macros ‘.kumac’ for PAW(9) are also generated.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.6 Generalized linear tangent system analysis

    The state matrix Ast may also be used to compute the GTLS propagator (or state transition matrix applied to perturbation), after the simulation. The algorithm is a finite product of 5th order development of Φ(t + δt,t) = expAstδt. Numerous element of analysis are given, in particular the determination of the Lyapunov exponents of the system.

    An executable file, ‘sltcirc.exe’ is generated and running this file will produce the corresponding results.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.6.1 Generalized tangent linear system with cmz

    The cmz macro smod SLTCIRC prepares a main program (‘circule’ of +PATCH SLTCIRC), in the directory ‘sltcirc/’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.6.2 Generalized tangent linear system with make

    To compile the GTLS analysis executable with make you can do

     
    make sltcirc.exe
    

    If you want to have a separate directory for the GTLS analysis, you should copy the sequence ‘dimetaphi.inc’ (or make a link to that file) to the directory. You should also copy the file ‘Makefile.sltcirc’ from the ‘template/’ directory in this directory and rename it ‘Makefile’ and set the Miniker directory path in the miniker_dir variable.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.6.3 Generalized tangent linear system analysis run and output

    The ‘sltcirc.exe’ executable generated by the compilation computes the elements of analysis of the system. This program requires ‘title.tex’ to transmit a title for output and graphics (see Title file), ‘aspha.data’ to access the state matrix and ‘dres.data’, because time-step can be changed along the simulation (see section Running a simulation and using the output) (10). To get access to these files (in case they are not in the current directory) it is possible to make a link to the corresponding files in the model directory. Once it is done the program may be run:

     
    ./sltcirc.exe
    

    The following table gives the correspondence between variable name, result file and ntuple number, with a short explanation:

    varfilentupleexplanation
    p(.,.)phit.data55propagator from 0 to t, Φ(t,0)
    up(.,.)uphit.data50Left singular vectors U in the SVD of Φ
    wp(.)wphit.data51singulat values w in the SVD of Φ
    vp(.,.)vphit.data52Right Singular Vectors V in the SVD of Φ
    wr(.)wr.data53real part of eigen values of Φ(t,0)
    wi(.)wi.data54imaginary part of eigen values of Φ(t,0)
    lwp(.)lwphit.data67Lyapunov exponents

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5. Advanced use of Miniker with make


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.1 Make variables

    The ‘Makefile.miniker’ Makefile provided in the distribution should be included as it defines a lot of important variables and rules.

    The following make variables can be set by the user:

    miniker_dir

    that variable should hold the Miniker sources directory. If you installed Miniker that variable should be set to ‘$(includedir)/mini_ker’. If you use the sources right from the sources directory it should be set to the sources package directory.

    MTNDIRS

    This variable can hold a ‘:’ delimited list of directories that will be searched for mortran include files.

    CMFDIRS

    This variable can hold a ‘:’ delimited list of directories that will be searched for cmz directive include files.

    SEL

    This variable holds a ‘,’ delimited list of select flags, for example monitor, grid1d, debug.

    LDADD

    This variable can be used to add libraries flags and files. It is used in the default linking command/rule.

    miniker_user_objects

    This variable should hold a space separated list of additional object files to be linked with the model and helper object files.

    CAR2TXTFLAGS

    cmz directives preprocessor flag.

    kalman

    This variable should be set to 1 if you want to use the kalman filter (see section Kalman filter).

    double

    This variable should be set to 1 if you want to have a double precision code (see section Double precision).

    The following variables are allready set and may be used (some are set by ./configure see Configuration):

    miniker_principal_objects

    The list of object files needed for the model build, together with some helper object files often used but not strictly required for the linking.

    DEPDIR

    The name of a hidden directory containing the dependencies computed for the main mortran files.

    F77
    FC
    FFLAGS
    LDFLAGS

    Compiler and linker related variables set by ./configure.

    LIBS

    This variable should hold the link flags and files required to build Miniker, set by ./configure.

    CAR2TXT
    MORTRAN
    MTNFLAGS
    MTNDEPEND

    Preprocessor and preprocessor flags, set by ./configure.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.2 Rules

    The following rules are defined in the ‘Makefile.miniker’ file.

    miniker-clean

    remove the fortran files generated from the mortran files. Remove the object files.

    miniker-mtn-clean

    remove the mortran files generated from the files with cmz directives.

    Various rules to preprocess files with cmz directives and mortran files and to compile fortran files.

    If the user needs a mortran main file, he may take advantage of the rule used to compute the dependencies of a mortran file. If the file is called, say, ‘mtnfile.mtn’ leading to ‘mtnfile.f’, the following include should lead to the automatic creation, updating and inclusion of a file describing the dependencies of ‘mtnfile.mtn’ in the ‘Makefile’:

     
    include $(DEPDIR)/mtnfile.Pf
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.3 Linking rule

    The rule used for the linking of the model file is not in the ‘Makefile.miniker’ file but should be provided in the user ‘Makefile’ for more flexibility. The default rule uses the variables miniker_user_objects for additional object files and LDADD for additionnal linking flags and files, those variables are there to be changed by the user.

    The object files required by the Miniker code are in the make variable miniker_principal_objects, this variable is also used. The value of the variables FC for the Fortran compiler, FFLAGS for the Fortran compiler flags and LDFLAGS for the linker flags should be set to right values; LIBS should also be right and hold the link flags and link files required to compile the Miniker model. These variables are set by by ./configure during configuration (see section Configuration) and used in the default rule:

    $(model_file): $(miniker_user_objects) $(miniker_principal_objects)
    	$(FC) $(FFLAGS) $(LDFLAGS) $^ $(LDADD) $(LIBS) -o $@
    

    In case this isn’t right it may be freely changed. You should certainly refer to the (make)Top section ‘Top’ in GNU Make Manual manual to understand what that rule exactly means and make your own.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Concepts index

    Jump to:   $  
    A   B   C   D   E   F   G   H   I   K   L   M   O   P   R   S   T   U   V   Z  
    Index Entry Section

    $
    $dimetaphi2.3.1 Setup a model and compile with cmz
    $zinit2.3.1 Setup a model and compile with cmz

    A
    adjoint4.2.1 Overview of optimisation with Miniker
    aspha.data2.3.3 Running a simulation and using the output
    aspha.data’, GTLS4.6.3 Generalized tangent linear system analysis run and output
    aspha.data’, SVD4.5.3 Singular Value Decomposition run and output

    B
    Borel sweep4.4 Feedback gain
    Borel sweep graphics4.4.2 Borel sweep results
    Borel sweep results4.4.2 Borel sweep results

    C
    cellsIntroduction
    cernlibA.2 Common requisites
    command law4.2.2 Control laws
    compilation2.3.2 Setup a model and compile with make
    configuration of sourceA.4.2 Configuration
    controlling the run2.4 Controlling the run

    D
    data.data3.8.2 Data
    data.data4.3.2.2 Kalman filter results
    dimetaphi3.9.1 The explicit size sequence
    dimetaphi3.9.1 The explicit size sequence
    dimetaphi’, Kalman filter4.3.1.1 Kalman filter vectors dimensions
    down node3.3 Describing 1D gridded model
    dres.data2.3.3 Running a simulation and using the output
    dres.data
    dres.data’, GTLS4.6.3 Generalized tangent linear system analysis run and output

    E
    equations, gridGrid node equations
    error vector dimension4.3.1.1 Kalman filter vectors dimensions

    F
    FDL, GNU Free Documentation LicenseC.1 GNU Free Documentation License
    feature setting3.1 Overview of additional features setting
    Feedback gain4.4 Feedback gain
    ffl (linearity test)2.4.1 Executing code at the end of each time step
    final cost4.2.1 Overview of optimisation with Miniker

    G
    Generalized linear tangent system4.6 Generalized linear tangent system analysis
    gradpj.data4.2.4 Sensitivity of cost function to parameters
    graphics2.3.4 Doing graphics
    graphics with gnuplot2.3.4 Doing graphics
    graphics with PAW2.3.4 Doing graphics
    graphics, Borel sweep4.4.2 Borel sweep results
    GTLS4.6 Generalized linear tangent system analysis
    GTLS output4.6.3 Generalized tangent linear system analysis run and output
    GTLS run4.6.3 Generalized tangent linear system analysis run and output

    H
    Heaviside function3.6 Rule of programming non continuous models

    I
    initial variance-covariance on statesInitial variance-covariance matrix on the state
    installation with makeA.4.3 Installation with make
    integrand cost4.2.1 Overview of optimisation with Miniker

    K
    Kalman filter4.3 Kalman filter
    Kalman filter output4.3.2.2 Kalman filter results
    Kalman filter results4.3.2.2 Kalman filter results

    L
    lapackA.2 Common requisites
    limiting conditionsLimiting conditions
    linearity test2.4.1 Executing code at the end of each time step
    logical flags3.1 Overview of additional features setting
    Lyapunov exponents4.6 Generalized linear tangent system analysis

    M
    Makefile.miniker5.1 Make variables
    Makefile.sltc4.5.2 Singular Value Decomposition with make
    Makefile.sltcirc4.6.2 Generalized tangent linear system with make
    mini_ker.cmzA.3 Miniker with cmz
    mod2.3.1 Setup a model and compile with cmz
    model equations3.9.2 Entering the model equations, with explicit sizes
    model size3.9.1 The explicit size sequence
    Model.hlp2.3.3 Running a simulation and using the output
    mortranIntroduction
    mortran2.2.1 All you need to know about mortran and cmz directives
    mortran, with makeA.4.1 Additional requirements for Miniker with make

    O
    obs.data3.8.1 Observations
    observation function3.8.1 Observations
    observations4.3.1.2 Error and observation matrices
    observations, general4.3 Kalman filter
    optimisation4.2.1 Overview of optimisation with Miniker
    output file2.3.3 Running a simulation and using the output
    output, GTLS4.6.3 Generalized tangent linear system analysis run and output
    output, Kalman filter4.3.2.2 Kalman filter results
    output, sensitivity4.1 Automatic sensitivity computation
    output, SVD4.5.3 Singular Value Decomposition run and output

    P
    printing2.4.2 Controlling the printout and data output
    Programming environmentsA.1 Programming environments
    propagator4.6 Generalized linear tangent system analysis

    R
    requirements, with makeA.4.1 Additional requirements for Miniker with make
    res.data2.3.3 Running a simulation and using the output
    results, Borel sweep4.4.2 Borel sweep results
    results, Kalman filter4.3.2.2 Kalman filter results
    run, GTLS4.6.3 Generalized tangent linear system analysis run and output
    run, SVD4.5.3 Singular Value Decomposition run and output
    running model2.3.3 Running a simulation and using the output

    S
    select flag3.1 Overview of additional features setting
    selseq.kumac3.1 Overview of additional features setting
    selseq.kumacA.3 Miniker with cmz
    sens.data4.1 Automatic sensitivity computation
    sensitivities4.1 Automatic sensitivity computation
    sensitivity, output4.1 Automatic sensitivity computation
    sequence2.1 General structure of the code
    sequences2. Miniker model programming
    sigma.data4.1 Automatic sensitivity computation
    Singular Value Decomposition4.5 Stability analysis of fastest modes
    sltc.exe4.5 Stability analysis of fastest modes
    sltc.exe4.5.3 Singular Value Decomposition run and output
    sltcirc.exe4.6 Generalized linear tangent system analysis
    sltcirc.exe4.6.3 Generalized tangent linear system analysis run and output
    smod4.5.1 Singular Value Decomposition with cmz
    smod4.6.1 Generalized tangent linear system with cmz
    starting pointStarting points
    state matrix4.5 Stability analysis of fastest modes
    SVD4.5 Stability analysis of fastest modes
    SVD output4.5.3 Singular Value Decomposition run and output
    SVD run4.5.3 Singular Value Decomposition run and output

    T
    TEFIntroduction
    TEF2.2 Miniker programming illustrated
    title filetitle file
    title.textitle file
    title.tex’, GTLS4.6.3 Generalized tangent linear system analysis run and output
    title.tex’, SVD4.5.3 Singular Value Decomposition run and output
    tr.data2.3.3 Running a simulation and using the output
    transfersIntroduction

    U
    up node3.3 Describing 1D gridded model
    uxcom.data4.2.2 Control laws
    uycom.data4.2.2 Control laws

    V
    variance-covariance errorError variance-covariance matrices
    variance-covariance matrices4.3.1.2 Error and observation matrices
    variance-covariance matrices, general4.3 Kalman filter
    variance-covariance matrix on stateObservations and error on state matrix

    Z
    zcmd_law4.2.2 Control laws
    zcmd_law.inc4.2.2 Control laws
    zinit2.2.2 Entering model equation and parameters
    zinit, general2.1 General structure of the code
    zinit’, Kalman filter4.3.1.2 Error and observation matrices
    zinit.mti2.3.2 Setup a model and compile with make
    ZOOMIntroduction
    zsteer2.4.1 Executing code at the end of each time step
    zsteer’, Kalman filter4.3.2.1 Feeding the observations to the model
    zsteer.inc2.4.1 Executing code at the end of each time step

    Jump to:   $  
    A   B   C   D   E   F   G   H   I   K   L   M   O   P   R   S   T   U   V   Z  

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Variables, macros and functions index

    Jump to:   A   B   C   D   E   F   H   I   K   M   N   O   P   S   T   V   Z  
    Index Entry Section

    A
    aspha2.4.1 Executing code at the end of each time step

    B
    Bb2.4.1 Executing code at the end of each time step
    Bt2.4.1 Executing code at the end of each time step

    C
    couplage(.)2.4.1 Executing code at the end of each time step
    cout_l4.2.3 Cost function coding and adjoint modeling
    cout_Psi4.2.3 Cost function coding and adjoint modeling
    covana(.,.)4.3.3 Executing code after the analysis
    coveta(.,.)Error variance-covariance matrices
    covfor(.,.)Initial variance-covariance matrix on the state
    covobs(.,.)Error variance-covariance matrices

    D
    D2.4.1 Executing code at the end of each time step
    dEta(.)2.3.3 Running a simulation and using the output
    deta_tef(.)3.9.2 Entering the model equations, with explicit sizes
    dneta2.4.1 Executing code at the end of each time step
    dphi2.4.1 Executing code at the end of each time step
    dt2.2.2 Entering model equation and parameters
    dt
    d_pi_aspha(.,.)4.1.2 Advance matrix sensitivity

    E
    eqn:Model equations
    eta(.)The cell and transfer arrays
    eta(.), explicit sizes3.9.2 Entering the model equations, with explicit sizes
    etafor(.)4.3.3 Executing code after the analysis

    F
    ff(.)The cell and transfer arrays
    ff(.), explicit sizes3.9.2 Entering the model equations, with explicit sizes
    ffl(.)2.4.1 Executing code at the end of each time step
    Free_parameter3.7 Parameters
    fun:Model equations
    f_set3.9.2 Entering the model equations, with explicit sizes
    f_set3.9.2 Entering the model equations, with explicit sizes
    f_set4.2.3 Cost function coding and adjoint modeling
    f_set4.2.3 Cost function coding and adjoint modeling

    H
    H2.4.1 Executing code at the end of each time step

    I
    index_ff_gain4.4.1 Specifying the Borel sweep
    innobs(.)4.3.3 Executing code after the analysis
    istep2.4.1 Executing code at the end of each time step
    istep_B_deb4.4.1 Specifying the Borel sweep
    istep_B_fin4.4.1 Specifying the Borel sweep
    istep_B_inc4.4.1 Specifying the Borel sweep
    itau_max4.4.1 Specifying the Borel sweep

    K
    kgain(.)4.3.3 Executing code after the analysis

    M
    maxstep3.9.1 The explicit size sequence
    mereta(.,.)Observations and error on state matrix
    mobs3.8.1 Observations
    model_file_name2.3.2 Setup a model and compile with make
    modzprint2.2.2 Entering model equation and parameters
    modzprint2.4.2 Controlling the printout and data output
    mpThe cell and transfer arrays
    mp3.9.1 The explicit size sequence
    m_dwn3.3.1 Setting dimensions for 1D gridded model
    m_mult3.3.1 Setting dimensions for 1D gridded model
    m_node3.3.1 Setting dimensions for 1D gridded model
    m_up3.3.1 Setting dimensions for 1D gridded model

    N
    npThe cell and transfer arrays
    np3.9.1 The explicit size sequence
    nstep2.2.2 Entering model equation and parameters
    n_dwn3.3.1 Setting dimensions for 1D gridded model
    n_mult3.3.1 Setting dimensions for 1D gridded model
    n_node3.3.1 Setting dimensions for 1D gridded model
    n_up3.3.1 Setting dimensions for 1D gridded model

    O
    obspha(.,.)4.3.3 Executing code after the analysis

    P
    Phi_tef(.)3.9.2 Entering the model equations, with explicit sizes
    principal3.2.2 Calling the model subroutine

    S
    set_dwn_etaLimiting conditions
    set_dwn_phiLimiting conditions
    set_etaModel equations
    set_node_etaGrid node equations
    set_node_PhiGrid node equations
    set_PhiModel equations
    set_up_etaLimiting conditions
    set_up_phiLimiting conditions

    T
    tau_B_ini4.4.1 Specifying the Borel sweep
    tau_B_mult4.4.1 Specifying the Borel sweep
    time2.2.2 Entering model equation and parameters

    V
    var:Model equations
    vobs(.)3.8.2 Data
    vobs(.)4.3.2.1 Feeding the observations to the model

    Z
    zback4.2.3 Cost function coding and adjoint modeling
    ZBorel4.4.1 Specifying the Borel sweep
    zborel for4.4.1 Specifying the Borel sweep
    zcommand4.2.2 Control laws
    zgetobs3.8.2 Data
    zgetobs4.3.2.1 Feeding the observations to the model
    zkalman4.3.1 Coding the Kalman filter
    zlaw4.2.2 Control laws
    zprint2.4.2 Controlling the printout and data output

    Jump to:   A   B   C   D   E   F   H   I   K   M   N   O   P   S   T   V   Z  

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A. Installation


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.1 Programming environments

    Miniker is not a traditionnal software in that it isn’t a library or an interpreter but rather a set of source and macro file that combines with the user model code and enable to build a binary program corresponding with the model. It requires a build environment with a preprocessor, a compiler and facilities that automate these steps.

    Two different environment are proposed. One use cmz (http://wwwcmz.web.cern.ch/wwwcmz/index.html), while the other is based on make. Other libraries are needed, the CERN Program Library (cernlib) and lapack.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.2 Common requisites

    Whatever method is used a fortran 77 compiler is required. The compilers that have been used so far are g77, gfortran and the sun solaris compiler.

    When usng CMZ, the CERN Program Library, available at http://wwwasd.web.cern.ch/wwwasd/cernlib/, has to be installed. With make, internal source files copied from the cernlib may be used instead but then some examples won’t be available, since they rely on some mathematical functions provided by the CERN library. On windows, in case you want to use the compiler from the GNU compiler collection with cygwin or MINGW/MSYS you can use the binaries provided at http://zyao.home.cern.ch/zyao/cernlib.html. On Mac OS X, the cernlib provided by fink (package cernlib-devel) can be used.

    You should also have LAPACK, available at http://www.netlib.org/lapack/. LAPACK can also be installed as part of the CERN Library or as part of the http://math-atlas.sourceforge.net/ implementation. On most linux distributions a lapack package is available. On Mac OS X, the ATLAS implementation provided by fink or the frameworks from Xcode can be used.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.3 Miniker with cmz

    First of all you have to get the cmz file ‘mini_ker.cmz’ and put it in a directory. In that same directory you should create a directory for each of your models. In the model directory you should copy the file ‘selseq.kumac’ available with Miniker, and create your own cmz file for your model, called for example ‘mymodel.cmz’. You should also have installed the kumac macro files handling mortan compilation, the associated shell scripts and the mortran preprocessor.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.4 Miniker with make


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.4.1 Additional requirements for Miniker with make

    The package has been tested with GNU make and solaris make.

    Suitable preprocessors should also be installed. Two preprocessors are required, one that preprocess the cmz directives, and a mortran preprocessor. A cmz directives processor written in perl, is distributed in the car2txt package available at http://www.environnement.ens.fr/perso/dumas/mini_ker/software.html. A mortran package with a command able to preprocess a mortran file given on the command line with a syntax similar with the cpp command line syntax is also required. Such a mortran is available at http://www.environnement.ens.fr/perso/dumas/mini_ker/software.html.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.4.2 Configuration

    The package is available at http://www.environnement.ens.fr/perso/dumas/mini_ker/software.html. It is available as a compresssed tar archive. On UNIX, with GNU tar it may be unpacked using

     
    $ tar xzvf mini_ker-4.2.tar.gz
    

    The detection of the compiler, the preprocessors (car2txt and mortran), and the libraries are performed by the configure script. This script sets the apropriate variables in makefiles. It can be run with:

     
    $ cd mini_ker-4.2
    $ ./configure
    

    If the output of ./configure doesn’t show any error it means that all the components are here. It is possible to give ./configure switches and also specify environment variables (see also ./configure --help):

    --disable-cernlib

    Use the internal cernlib source files, even if a cernlib is detected.

    --with-static-cernlib

    This command line switch forces a static linking with the cernlib (or a dynamic linking if set to no).

    --with-cernlib

    This command line switch can be used to specify the cernlib location (if not detected or you want to use a specific cernlib).

    --with-blas
    --with-lapack

    With this command switch, you can specify the location of the blas and lapack libraries.

    For example, on mac OS X this can be used to specify the blas and lapack from the Apple frameworks:

     
    ./configure \
    --with-blas=/System/Library/Frameworks/vecLib.framework/versions/A/vecLib \
    --with-lapack=/System/Library/Frameworks/vecLib.framework/versions/A/vecLib
    
    F77
    FC
    FFLAGS
    LDFLAGS

    Classical compiler, compiler flags and linker flags.

    MORTRAN

    This environment variable holds the mortran preprocessor command (default is mortran).

    MTNFLAGS

    This environment variable holds command line arguments for the mortran preprocessor. It is empty in the default case.

    MTN

    This environment variable may be used to specify the mortran executable name and/or path, it should be used by the mortran commmand. (default is empty, which leads to a mortran executable called mtn).

    MTNDEPEND

    This environment variable may be used to specify the mortran dependencies checker executable. It should be used by the mortran commmand. (default is empty, which leads to a mortran dependencies checker called mtndepend).

    After a proper configuration, if make is run then the example models should be build. You have to perform the configuration only once.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.4.3 Installation with make

    Miniker can be installed by running

     
    make install
    

    It should copy the sources and the ‘Makefile.miniker’ file in a ‘mini_ker’ directory in the $(includedir) directory, and copy the templates in ‘$(datadir)/mini_ker’. The default for $(includedir) is ‘/usr/local/include’ and the default for $(datadir) is ‘/usr/local/share’, these defaults may be changed by ./configure switches ‘--prefix’, ‘--includedir’ and ‘--datadir’. See ./configure --help and the ‘INSTALL’ file for more informations. The helper script ‘start_miniker’ should also be installed.

    The installation is not required to use comfortably Miniker. Indeed the only thing that changes with the sources and the ‘Makefile.miniker’ directory location is the miniker_dir variable in a project Makefile.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    B. Cmz directives reference

    The cmz directives are described together with the other features of cmz in the cmz manual at http://wwwcmz.web.cern.ch/wwwcmz/, the important ones are nevertheless recalled here, especially for those that use make and don’t need the whole features of cmz.

    After the description of the generic features, we turn to the cmz directive of interest. There are three kinds of cmz directives that are of use within Miniker: one kind that introduce files, the other for conditionnal compilation and the third for sequence inclusion.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    B.1 Cmz directives general syntax

    The cmz directives always begin with a ‘+’ in the first column, optionnaly followed by any number of ‘_’ that may be used for indentation, then the directive label, case insensitive, followed by the directive arguments separated by ‘,’. The arguments are also case insensitive. Optional spaces may be around directive arguments. An optionnal ‘.’ ends the directive arguments and begin a comment, everything that follows that ‘.’ is ignored.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    B.2 Conditional expressions

    A directive argument common to all the directives is the conditionnal expression. A conditionnal expression may be true or false, it is a combination of select flags. the select flags are combined with logical operators. A select flag itself is true if it was selected. A select flag selflag is selected by using the sel selflag instruction in cmz. It is selected by passing the -D selflag command line switch to the call of the cmz directives preprocessor when using make.

    A ‘-’ negates the expression that follows. Parenthesis ‘(’ and ‘)’ are used for the grouping of subexpressions. ‘|’ and ‘,’ are for the boolean or: an expression with a or is true if the expression on the left or the expression on the right of the or is true. ‘&’ is for the boolean and: an expression with an and is true if the expression on the left and the expression on the right are true.

    The grouping is left to right when there is no parenthesis, with or and ‘&’ having the same precedence. Therefore

     
    a&b|c    ≡    (a&b)|c
    a|b&c    ≡    (a|b)&c
    a|b&c  is not  a|(b&c)
    a&b|c  is not  a&(b|c)
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    B.3 File introduction directives

    A file (or sequence) introduction directive appears at the beginning of the file. There are two different directives, one is DECK for normal files, the other is KEEP for include files (sequences). The first argument is the name of the file. The file name may not be larger than 32 characters and is converted to lower case in the general case. The optionnal following arguments may be of 2 type (and may be mixed, separated by ‘,’):

    conditional

    A conditionnal is introduced by IF= followed by a conditionnal expression described in Conditional expressions. The file is preprocessed if the conditionnal expression is true.

    language specification

    A language specification is introduced by a T=. The most common languages are ‘mtn’ for the mortran, ‘ftn’ for fortran not preprocessed, ‘f77’ for preprocessed fortran, ‘c’ for the c language and ‘txt’ for text files. In general the language of the file determines the name of files the preprocessed file is extracted to, the comment style and the command for inclusions.

    It is a common practice to have wrong language type in KEEP as the language may be determined from the DECK that include them with cmz, or from their file name with make. This is not recommended and considered a bad practice.

    Such a directive will always appear in cmz, as it is built-in. It is recommended to have one when using make too, even though it is not required in most cases. Indeed make uses the file name directly and finds the language and file type by looking at the file extension. make should then pass the language type with a --lang lang command line switch when calling the cmz directives preprocessor. With make, the convention is to have ‘cm’ added before the normal file suffix and after the ‘.’. The table tab:cmfile_suffix shows the matching between suffixes, file type and file language.

    For example, a file beginning with

    +Deck, subroutine_foo, If=monitor&-simple, T=f77. 
    

    is a main preprocessed fortran file that will only be generated if ‘monitor’ is selected and ‘simple’ is not selected. The file to be preprocessed by make should have the ‘.cmF’ suffix, and be called ‘subroutine_foo.cmF’.

    A file beginning with

    +KEEP,inc_common,If=monitor|interface,T=mtn
    

    is an mortran include file that should be processed only if ‘monitor’ or ‘interface’ is selected. The file to be preprocessed by make should have the ‘cmmti’ suffix and be called ‘inc_common.cmmti’. The resulting file when make is used will be called ‘inc_common.mti’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    B.4 Conditional directives

    Conditional directives may be used to conditionnaly skip blocks of code. There are 4 conditional directives: if, elseif, else and endif. +if begins a conditional directives sequence, with argument a conditional expression. If the expression is true the block of code following the +if is output in the resulting file, up to another conditional directive, if it is false the code block is skipped. If the expression is false and the following conditional directive is +elseif, the same procedure is followed with the argument of +elseif which is also a conditionnal expression. More than one +elseif may follow a +if. If a +if or +elseif expression is true the following code block is output and all the following +elseif code blocks are skipped. If all the +if and +elseif expressions are false and the following coditionnal directive is +else then the block following the +else is output. If a previous expression was true the code block following the +else is skipped. The last code block is closed by +endif.

    Conditionnal directives may be nested, a +if begins a deeper conditionnal sequences directives that is ended by the corresponding +endif.

    The simplest example is:

         some code;
    +IF,monitor
         code output only if monitor is true;
    +ENDIF
    

    If ‘monitor’ is selected, the +if block is output, it leads to

         some code;
         code output only if monitor is true;
    

    If ‘monitor’ isn’t selected the +if block is skipped, it leads to

         some code;
    

    An example with +else may be:

    +IF,double
     call dmysub(eta);
    +ELSE
     call smysub(eta);
    +ENDIF
    

    If ‘double’ is selected the code output is call dmysub(eta);, if ‘double’ isn’t selected the code output is call dmysub(eta);.

    Here is a self explanatory example of use of +elseif:

    +IF,monitor
      code used if monitor is selected;
    +ELSEIF,kalman
      code used if kalman is selected and monitor is not;
    +ELSE
      code used if kalman and monitor are not selected;
    +ENDIF
    

    And last an example of nested conditional directives:

    +IF,monitor
      code used if monitor is selected;
    +_IF,kalman. deep if
        code used if monitor and kalman are selected;
    +_ELSE. deep else
        code used if monitor is selected and kalman is not;
    +_ENDIF. end the deep conditionnals sequence
    +ELSE
      code used if monitor is not selected;
    +_IF,kalman
        code used if monitor is not selected but kalman is;
    +_ELSE
        code used if monitor and kalman are not selected;
    +_ENDIF
      other code used if monitor is not selected;
    +ENDIF
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    B.5 File inclusion directive

    The file (sequence) inclusion directive is seq. The argument of seq is an include files ‘,’ separated list. The include files are Keep in cmz. The following optional arguments may be mixed:

    conditional

    A conditionnal is introduced by IF= followed by a conditionnal expression described in Conditional expressions. The directive is ignored if the conditionnal expression is false.

    T=noinclude

    When this argument is present the text of the sequence will always be included in the file where the +seq appears.

    When there is no T=noinclude argument, the +seq directive may be replaced with an inclusion command suitable for the language of the file being processed, if such command has been specified.

    For example if we have the following sequence

    +KEEP,inc,lang=C
    typedef struct incstr {char* msg};
    

    And the following code in the file being processed:

    +DECK,mainf,lang=C
    +SEQ,inc
    int main (int argc, char* argv) { exit(0); }
    

    the processing of ‘mainf’ should lead to the file ‘mainf.c’, containing an include command for ‘inc’:

    #include "inc.h"
    int main (int argc, char* argv) { exit(0); }
    

    In case the +seq has the T=noinclude:

    +DECK,mainf,lang=C
    +SEQ,inc,T=noinclude
    int main (int argc, char* argv) { exit(0); }
    

    The processing of ‘mainf’ should lead to the file ‘mainf.c’ containing the text of ‘inc’:

    typedef struct incstr {char* msg};
    int main (int argc, char* argv) { exit(0); }
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    B.6 The ‘self’ directive

    The self directive is an obsolete directive that may be used for conditionnal skipping of code. For a better approach see Conditional directives. The optionnal argument of +SELF is If= followed by a conditionnal expression. If the conditionnal expression is true the code following the directive is output, if it is false the code is skipped up to any directive (including another +SELF) except +seq.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    C. Copying This Manual


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    C.1 GNU Free Documentation License

    Version 1.1, March 2000

     
    Copyright © 2000 Free Software Foundation, Inc.
    59 Temple Place, Suite 330, Boston, MA  02111-1307, USA
    
    Everyone is permitted to copy and distribute verbatim copies
    of this license document, but changing it is not allowed.
    
    1. PREAMBLE

      The purpose of this License is to make a manual, textbook, or other written document free in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.

      This License is a kind of “copyleft”, which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.

      We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

    2. APPLICABILITY AND DEFINITIONS

      This License applies to any manual or other work that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. The “Document”, below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as “you”.

      A “Modified Version” of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.

      A “Secondary Section” is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document’s overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (For example, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.

      The “Invariant Sections” are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License.

      The “Cover Texts” are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License.

      A “Transparent” copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, whose contents can be viewed and edited directly and straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup has been designed to thwart or discourage subsequent modification by readers is not Transparent. A copy that is not “Transparent” is called “Opaque”.

      Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML designed for human modification. Opaque formats include PostScript, PDF, proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML produced by some word processors for output purposes only.

      The “Title Page” means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, “Title Page” means the text near the most prominent appearance of the work’s title, preceding the beginning of the body of the text.

    3. VERBATIM COPYING

      You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.

      You may also lend copies, under the same conditions stated above, and you may publicly display copies.

    4. COPYING IN QUANTITY

      If you publish printed copies of the Document numbering more than 100, and the Document’s license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.

      If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.

      If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access to download anonymously at no charge using public-standard network protocols. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.

      It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

    5. MODIFICATIONS

      You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

      1. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.
      2. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has less than five).
      3. State on the Title page the name of the publisher of the Modified Version, as the publisher.
      4. Preserve all the copyright notices of the Document.
      5. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
      6. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.
      7. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document’s license notice.
      8. Include an unaltered copy of this License.
      9. Preserve the section entitled “History”, and its title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section entitled “History” in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.
      10. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the “History” section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.
      11. In any section entitled “Acknowledgments” or “Dedications”, preserve the section’s title, and preserve in the section all the substance and tone of each of the contributor acknowledgments and/or dedications given therein.
      12. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.
      13. Delete any section entitled “Endorsements”. Such a section may not be included in the Modified Version.
      14. Do not retitle any existing section as “Endorsements” or to conflict in title with any Invariant Section.

      If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version’s license notice. These titles must be distinct from any other section titles.

      You may add a section entitled “Endorsements”, provided it contains nothing but endorsements of your Modified Version by various parties—for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.

      You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.

      The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.

    6. COMBINING DOCUMENTS

      You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice.

      The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.

      In the combination, you must combine any sections entitled “History” in the various original documents, forming one section entitled “History”; likewise combine any sections entitled “Acknowledgments”, and any sections entitled “Dedications”. You must delete all sections entitled “Endorsements.”

    7. COLLECTIONS OF DOCUMENTS

      You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.

      You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

    8. AGGREGATION WITH INDEPENDENT WORKS

      A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, does not as a whole count as a Modified Version of the Document, provided no compilation copyright is claimed for the compilation. Such a compilation is called an “aggregate”, and this License does not apply to the other self-contained works thus compiled with the Document, on account of their being thus compiled, if they are not themselves derivative works of the Document.

      If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one quarter of the entire aggregate, the Document’s Cover Texts may be placed on covers that surround only the Document within the aggregate. Otherwise they must appear on covers around the whole aggregate.

    9. TRANSLATION

      Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English version will prevail.

    10. TERMINATION

      You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

    11. FUTURE REVISIONS OF THIS LICENSE

      The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.

      Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License “or any later version” applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    C.1.1 ADDENDUM: How to use this License for your documents

    To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:

     
      Copyright (C)  year  your name.
      Permission is granted to copy, distribute and/or modify this document
      under the terms of the GNU Free Documentation License, Version 1.1
      or any later version published by the Free Software Foundation;
      with the Invariant Sections being list their titles, with the
      Front-Cover Texts being list, and with the Back-Cover Texts being list.
      A copy of the license is included in the section entitled ``GNU
      Free Documentation License''.
    

    If you have no Invariant Sections, write “with no Invariant Sections” instead of saying which ones are invariant. If you have no Front-Cover Texts, write “no Front-Cover Texts” instead of “Front-Cover Texts being list”; likewise for Back-Cover Texts.

    If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.


    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)

    In fact the variables names are transformed into fortran array elements by mortran generated macros, so the symbolic names defined in the mortran blocks never appears in the generated fortran code, they are replaced by the fortran arrays.

    (2)

    dres.data’ has another time related variable as second column: dt, the time step that can vary in the course of a simulation.

    (3)

    This naming is a joke for “Inert” Heaviside function.

    (4)

    fun_set, or equivalently f_set, is a general mortran macro associating a symbol with a fortran expression. Here, it is the name of the symbol (eta) that has a particular meaning for the building of the model.

    (5)

    For a short introduction to automatic sensitivity analysis, see the document:
    http://lmd.jussieu.fr/zoom/doc/sensibilite.ps, in French, or ask for the more complete research document to a member of the TEF-ZOOM collaboration

    (6)

    General Tangent Linear System, i.e. the TLS circulating along a trajectory. See the explanation in the document http://www.lmd.jussieu.fr/Zoom/doc/Adjoint.pdf (in French).

    (7)

    For detailed explanation of the adjoint model, see the document in pdf or .ps.gz

    (8)

    More generally, the Borel sweep allows the numerical study of the dependency in τ of the Borel transform of various coefficients in the system coupling matrix.

    (9)

    Explanation in the research paper about SLTC (Al1 2003) available on request.

    (10)

    cf our research texts about propagator analyses in SLTC, and “les Gains sur champs (Al1 2003-2004)”


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/misc/res/mini_ker_httex/mini_ker_tex4ht_tex.tmp0000644000175000017500000000001711264347115027445 0ustar flichtenheldflichtenheld /* css.sty */texi2html-1.82/test/misc/res/mini_ker_httex/mini_ker_tex4ht_math.cp0000644000175000017500000000000011264347115027370 0ustar flichtenheldflichtenheldtexi2html-1.82/test/misc/res/mini_ker_httex/mini_ker_tex4ht_tex.4tc0000644000175000017500000000011411264347115027335 0ustar flichtenheldflichtenheld\expandafter\ifx\csname doTocEntry\endcsname\relax \expandafter\endinput\fi texi2html-1.82/test/misc/res/mini_ker_httex/mini_ker_tex4ht_tex.css0000644000175000017500000000342211264347115027440 0ustar flichtenheldflichtenheld /* start css.sty */ .cmr-7{font-size:70%;} .cmmi-10{font-style: italic;} .cmmi-7{font-size:70%;font-style: italic;} .cmsy-7{font-size:70%;} p.noindent { text-indent: 0em } td p.noindent { text-indent: 0em; margin-top:0em; } p.nopar { text-indent: 0em; } p.indent{ text-indent: 1.5em } @media print {div.crosslinks {visibility:hidden;}} a img { border-top: 0; border-left: 0; border-right: 0; } center { margin-top:1em; margin-bottom:1em; } td center { margin-top:0em; margin-bottom:0em; } .Canvas { position:relative; } img.math{vertical-align:middle;} .obeylines-h,.obeylines-v {white-space: nowrap; } div.obeylines-v p { margin-top:0; margin-bottom:0; } .overline{ text-decoration:overline; } .overline img{ border-top: 1px solid black; } td.displaylines {text-align:center; white-space:nowrap;} .centerline {text-align:center;} .rightline {text-align:right;} span.TEX {letter-spacing: -0.125em; } span.TEX span.E{ position:relative;top:0.5ex;left:-0.0417em;} a span.TEX span.E {text-decoration: none; } .underline{ text-decoration:underline; } .underline img{ border-bottom: 1px solid black; margin-bottom:1pt; } div.proclaim { margin-top: 1em; margin-bottom: 1em; } p.item {text-indent:-2em; margin-left:2em;} p.itemitem {text-indent:-2em; margin-left:4em;} span.item, span.itemitem {width:2em; margin-right:0.4em;} td.eqalign3 { text-align:right; margin-left:10em;} .eqalign td { white-space: nowrap; } div.eqalign {text-align:center;} td.eqalignno3, td.leqalignno3 { text-align:right; margin-left:10em;} .leqalignno td, .eqalignno td { white-space: nowrap; } .leqalignno td.noalign, .eqalignno td.noalign { width:5%; white-space: normal; } table.leqalignno, table.eqalignno {width:100%;} img.cdots{vertical-align:middle;} div.pmatrix {text-align:center;} table.pmatrix {width:100%;} /* end css.sty */ texi2html-1.82/test/misc/res/mini_ker_httex/mini_ker.20000644000175000017500000000274011264347115024633 0ustar flichtenheldflichtenhelddvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) ** no image file for heavyside, (using heavyside.jpg) texi2html-1.82/test/misc/res/mini_ker_httex/mini_ker_tex4ht_math.html0000644000175000017500000004114111264347115027745 0ustar flichtenheldflichtenheld<!-- tex4ht_begin mini_ker_tex4ht_math math 1 --> η <!-- tex4ht_end mini_ker_tex4ht_math math 1 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 2 --> φ <!-- tex4ht_end mini_ker_tex4ht_math math 2 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 3 --> t <!-- tex4ht_end mini_ker_tex4ht_math math 3 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 4 --> t + δt <!-- tex4ht_end mini_ker_tex4ht_math math 4 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 5 --> δη <!-- tex4ht_end mini_ker_tex4ht_math math 5 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 6 --> η <!-- tex4ht_end mini_ker_tex4ht_math math 6 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 7 --> δφ <!-- tex4ht_end mini_ker_tex4ht_math math 7 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 8 --> φ <!-- tex4ht_end mini_ker_tex4ht_math math 8 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 9 --> f <!-- tex4ht_end mini_ker_tex4ht_math math 9 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 10 --> g <!-- tex4ht_end mini_ker_tex4ht_math math 10 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 11 --> δt <!-- tex4ht_end mini_ker_tex4ht_math math 11 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 12 --> δη <!-- tex4ht_end mini_ker_tex4ht_math math 12 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 13 --> δφ <!-- tex4ht_end mini_ker_tex4ht_math math 13 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 14 --> δφ <!-- tex4ht_end mini_ker_tex4ht_math math 14 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 15 --> δη <!-- tex4ht_end mini_ker_tex4ht_math math 15 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 16 --> a <!-- tex4ht_end mini_ker_tex4ht_math math 16 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 17 --> c <!-- tex4ht_end mini_ker_tex4ht_math math 17 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 18 --> φmeet <!-- tex4ht_end mini_ker_tex4ht_math math 18 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 19 --> ηprey <!-- tex4ht_end mini_ker_tex4ht_math math 19 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 20 --> ηpred <!-- tex4ht_end mini_ker_tex4ht_math math 20 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 21 --> φ <!-- tex4ht_end mini_ker_tex4ht_math math 21 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 22 --> δη <!-- tex4ht_end mini_ker_tex4ht_math math 22 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 23 --> φ <!-- tex4ht_end mini_ker_tex4ht_math math 23 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 24 --> φ = f(η(t - dt) + dφ <!-- tex4ht_end mini_ker_tex4ht_math math 24 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 25 --> dφ <!-- tex4ht_end mini_ker_tex4ht_math math 25 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 26 --> φ = f(η),φ) <!-- tex4ht_end mini_ker_tex4ht_math math 26 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 27 --> 10-3 <!-- tex4ht_end mini_ker_tex4ht_math math 27 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 28 --> (I - D) <!-- tex4ht_end mini_ker_tex4ht_math math 28 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 29 --> (I - D) <!-- tex4ht_end mini_ker_tex4ht_math math 29 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 30 --> (I - D) <!-- tex4ht_end mini_ker_tex4ht_math math 30 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 31 --> k <!-- tex4ht_end mini_ker_tex4ht_math math 31 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 32 --> mk <!-- tex4ht_end mini_ker_tex4ht_math math 32 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 33 --> k <!-- tex4ht_end mini_ker_tex4ht_math math 33 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 34 --> rk <!-- tex4ht_end mini_ker_tex4ht_math math 34 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 35 --> dk <!-- tex4ht_end mini_ker_tex4ht_math math 35 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 36 --> N <!-- tex4ht_end mini_ker_tex4ht_math math 36 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 37 --> N <!-- tex4ht_end mini_ker_tex4ht_math math 37 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 38 --> N + 1 <!-- tex4ht_end mini_ker_tex4ht_math math 38 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 39 --> N + 1 <!-- tex4ht_end mini_ker_tex4ht_math math 39 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 40 --> k <!-- tex4ht_end mini_ker_tex4ht_math math 40 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 41 --> k <!-- tex4ht_end mini_ker_tex4ht_math math 41 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 42 --> x∕Δ <!-- tex4ht_end mini_ker_tex4ht_math math 42 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 43 --> ω <!-- tex4ht_end mini_ker_tex4ht_math math 43 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 44 --> h <!-- tex4ht_end mini_ker_tex4ht_math math 44 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 45 --> φmeet <!-- tex4ht_end mini_ker_tex4ht_math math 45 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 46 --> ηprey <!-- tex4ht_end mini_ker_tex4ht_math math 46 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 47 --> ηpred <!-- tex4ht_end mini_ker_tex4ht_math math 47 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 48 --> η1(t) <!-- tex4ht_end mini_ker_tex4ht_math math 48 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 49 --> η1(t = 0) <!-- tex4ht_end mini_ker_tex4ht_math math 49 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 50 --> t = 0 <!-- tex4ht_end mini_ker_tex4ht_math math 50 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 51 --> ϕj(t) <!-- tex4ht_end mini_ker_tex4ht_math math 51 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 52 --> ηi(t = 0) <!-- tex4ht_end mini_ker_tex4ht_math math 52 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 53 --> h(t) <!-- tex4ht_end mini_ker_tex4ht_math math 53 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 54 --> J <!-- tex4ht_end mini_ker_tex4ht_math math 54 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 55 --> T <!-- tex4ht_end mini_ker_tex4ht_math math 55 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 56 --> J <!-- tex4ht_end mini_ker_tex4ht_math math 56 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 57 --> ψ <!-- tex4ht_end mini_ker_tex4ht_math math 57 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 58 --> l <!-- tex4ht_end mini_ker_tex4ht_math math 58 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 59 --> h <!-- tex4ht_end mini_ker_tex4ht_math math 59 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 60 --> J <!-- tex4ht_end mini_ker_tex4ht_math math 60 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 61 --> t = 0 <!-- tex4ht_end mini_ker_tex4ht_math math 61 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 62 --> ω <!-- tex4ht_end mini_ker_tex4ht_math math 62 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 63 --> t = si <!-- tex4ht_end mini_ker_tex4ht_math math 63 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 64 --> μ <!-- tex4ht_end mini_ker_tex4ht_math math 64 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 65 --> Q <!-- tex4ht_end mini_ker_tex4ht_math math 65 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 66 --> ν <!-- tex4ht_end mini_ker_tex4ht_math math 66 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 67 --> R <!-- tex4ht_end mini_ker_tex4ht_math math 67 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 68 --> W <!-- tex4ht_end mini_ker_tex4ht_math math 68 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 69 --> W <!-- tex4ht_end mini_ker_tex4ht_math math 69 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 70 --> W <!-- tex4ht_end mini_ker_tex4ht_math math 70 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 71 --> g(τ) <!-- tex4ht_end mini_ker_tex4ht_math math 71 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 72 --> g(τ) <!-- tex4ht_end mini_ker_tex4ht_math math 72 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 73 --> τ <!-- tex4ht_end mini_ker_tex4ht_math math 73 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 74 --> τ <!-- tex4ht_end mini_ker_tex4ht_math math 74 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 75 --> g(τ;t) <!-- tex4ht_end mini_ker_tex4ht_math math 75 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 76 --> t <!-- tex4ht_end mini_ker_tex4ht_math math 76 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 77 --> τ <!-- tex4ht_end mini_ker_tex4ht_math math 77 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 78 --> 2 <!-- tex4ht_end mini_ker_tex4ht_math math 78 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 79 --> τ <!-- tex4ht_end mini_ker_tex4ht_math math 79 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 80 --> g(τ;t) <!-- tex4ht_end mini_ker_tex4ht_math math 80 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 81 --> τ <!-- tex4ht_end mini_ker_tex4ht_math math 81 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 82 --> τ <!-- tex4ht_end mini_ker_tex4ht_math math 82 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 83 --> tau <!-- tex4ht_end mini_ker_tex4ht_math math 83 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 84 --> τ <!-- tex4ht_end mini_ker_tex4ht_math math 84 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 85 --> τ <!-- tex4ht_end mini_ker_tex4ht_math math 85 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 86 --> 0.2 <!-- tex4ht_end mini_ker_tex4ht_math math 86 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 87 --> ∘ __√ _2 <!-- tex4ht_end mini_ker_tex4ht_math math 87 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 88 --> τ <!-- tex4ht_end mini_ker_tex4ht_math math 88 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 89 --> τ <!-- tex4ht_end mini_ker_tex4ht_math math 89 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 90 --> τ <!-- tex4ht_end mini_ker_tex4ht_math math 90 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 91 --> g(τ) <!-- tex4ht_end mini_ker_tex4ht_math math 91 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 92 --> g(t,τ) <!-- tex4ht_end mini_ker_tex4ht_math math 92 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 93 --> Ast <!-- tex4ht_end mini_ker_tex4ht_math math 93 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 94 --> Ast <!-- tex4ht_end mini_ker_tex4ht_math math 94 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 95 --> Ast + A† st <!-- tex4ht_end mini_ker_tex4ht_math math 95 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 96 --> Ast <!-- tex4ht_end mini_ker_tex4ht_math math 96 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 97 --> U <!-- tex4ht_end mini_ker_tex4ht_math math 97 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 98 --> w <!-- tex4ht_end mini_ker_tex4ht_math math 98 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 99 --> V <!-- tex4ht_end mini_ker_tex4ht_math math 99 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 100 --> Ast + A† st <!-- tex4ht_end mini_ker_tex4ht_math math 100 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 101 --> Ast <!-- tex4ht_end mini_ker_tex4ht_math math 101 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 102 --> Φ(t + δt,t) = expAstδt <!-- tex4ht_end mini_ker_tex4ht_math math 102 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 103 --> w <!-- tex4ht_end mini_ker_tex4ht_math math 103 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 104 --> Φ <!-- tex4ht_end mini_ker_tex4ht_math math 104 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 105 --> t <!-- tex4ht_end mini_ker_tex4ht_math math 105 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 106 --> Φ(t,0) <!-- tex4ht_end mini_ker_tex4ht_math math 106 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 107 --> U <!-- tex4ht_end mini_ker_tex4ht_math math 107 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 108 --> Φ <!-- tex4ht_end mini_ker_tex4ht_math math 108 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 109 --> w <!-- tex4ht_end mini_ker_tex4ht_math math 109 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 110 --> Φ <!-- tex4ht_end mini_ker_tex4ht_math math 110 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 111 --> V <!-- tex4ht_end mini_ker_tex4ht_math math 111 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 112 --> Φ <!-- tex4ht_end mini_ker_tex4ht_math math 112 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 113 --> Φ(t,0) <!-- tex4ht_end mini_ker_tex4ht_math math 113 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 114 --> Φ(t,0) <!-- tex4ht_end mini_ker_tex4ht_math math 114 --> texi2html-1.82/test/misc/res/mini_ker_httex/mini_ker_tex4ht_math.lg0000644000175000017500000000061611264347115027405 0ustar flichtenheldflichtenheldhtfcss: cmmi font-style: italic; htfcss: cmmib font-style: italic; font-weight: bold; htfcss: cmtt font-family: monospace; File: mini_ker_tex4ht_math.html --- characters --- Font("cmr","7","7","100") Font("cmmi","7","7","100") Font("cmsy","7","7","100") Font("cmex","10","10","100") Font("cmr","10","10","109") Font("cmtt","10","10","109") Font("cmmi","10","10","109") Font("cmsy","10","10","109") texi2html-1.82/test/misc/res/mini_ker_httex/mini_ker_tex4ht_math.vr0000644000175000017500000000000011264347115027415 0ustar flichtenheldflichtenheldtexi2html-1.82/test/misc/res/mini_ker_httex/mini_ker_tex4ht_tex.4ct0000644000175000017500000000012311264347115027335 0ustar flichtenheldflichtenheld\expandafter\ifx\csname doTocEntry\endcsname\relax \expandafter\endinput\fi \par texi2html-1.82/test/misc/res/mini_ker_httex/mini_ker_tex4ht_tex.tex0000644000175000017500000001132011264347115027444 0ustar flichtenheldflichtenheld% Automatically generated \csname tex4ht\endcsname \HCode{\Hnewline \Hnewline} $$\partial_t \eta (t) = g(\eta(t),\varphi(t))$$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$ \varphi(t) = f(\eta(t),\varphi(t)) $$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$\pmatrix{A & B\cr -C^+ & I-D\cr} \pmatrix{\delta \eta\cr \delta \varphi\cr} = \pmatrix{\Gamma\cr \Omega\cr}$$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$\eqalign{\partial_t \eta (t) &= g(\eta(t),\varphi(t))\cr \varphi(t) &= f(\eta(t),\varphi(t))\cr }$$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$\left\{\eqalign{\partial_t \eta _{prey} &= a \eta _{prey} - a \varphi _{meet} \cr \partial_t \eta _{pred} &= -c \eta _{pred} + c \varphi _{meet}\cr}\right.$$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$\varphi _{meet} = \eta _{prey}\eta _{pred}$$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$\partial_{\eta} g(\eta(t),\varphi(t)); $$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$\partial_{\varphi} g(\eta(t),\varphi(t)); $$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$\partial_{\eta} f(\eta(t),\varphi(t)); $$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$\partial_{\varphi} f(\eta(t),\varphi(t)); $$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$\left\{\eqalign{\partial_t \eta _{k} ^{pos} &= \eta _{k} ^{vel} \cr \partial_t \eta _{k} ^{vel} &= ( \varphi_k ^{spr} -\varphi _{k+1} ^{spr} + \varphi _{k} ^{dmp}-\varphi _{k+1} ^{dmp})\,/m_k \cr}\right.$$ $$\left\{\eqalign{ \varphi_k ^{spr} &= -k_k (\eta _{k} ^{pos}- \eta _{k-1} ^{pos})\cr \varphi_k ^{spr} &= -d_k (\eta _{k} ^{vel}- \eta _{k-1} ^{vel}) \cr}\right.$$ $$\left\{\eqalign{\eta ^{pos}_{0} &= 0\cr \eta ^{vel}_{0} &= 0\cr \varphi ^{spr}_{N+1} &= 0\cr \varphi ^{dmp}_{N+1} &= 0\cr}\right.$$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$\eqalign{\partial_x f^g &= g f^{g-1}\partial_x f + f^g \log f\partial_x g\cr &= f^{g-1}(g\partial_x f + f\partial_x g)\cr}$$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$ \omega = h ( \eta , \varphi) $$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$ J = \psi[\eta(T),\varphi(T) ,h(T)] + \int_0 ^T {l[\eta(\tau),\varphi(\tau),h(\tau)]}\, d\tau $$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$\eqalign{ \partial_t \eta (t) &= g(\eta(t),\varphi(t)) + W(t) \mu\cr \varphi(t) &= f(\eta(t),\varphi(t))\cr \omega(t) &= h ( \eta(t) , \varphi(t)) + \nu\cr }$$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$\left\{\eqalign{ \partial_t \eta_1 &= a_{11} \eta_1 + a_{12} \varphi_2 + a_{13} \varphi_3 + W_{11} \mu_1 + W_{12} \mu_2\cr \partial_t \eta_2 &= a_{21} \varphi_1 + a_{22} \eta_2 + a_{23} \varphi_3 + W_{21} \mu_1 + W_{22} \mu_2\cr \partial_t \eta_3 &= a_{31} \varphi_1 + a_{32} \varphi_2 + a_{33} \eta_3 + W_{31} \mu_1 + W_{32} \mu_2 }\right.$$ $$\left\{\eqalign{ \varphi _1 &= \eta _1\cr \varphi _2 &= \eta _2\cr \varphi _3 &= \eta _3 }\right.$$ $$\left\{\eqalign{ \omega _1 &= \varphi _1 + \nu_1\cr \omega _2 &= \eta _2 + \nu_2 \cr \omega _3 &= \eta _3 + \nu_3 }\right.$$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$ U w V^\dagger $$ \HCode{\Hnewline \Hnewline} \bye texi2html-1.82/test/misc/res/mini_ker_httex/mini_ker_tex4ht_math.aux0000644000175000017500000000000011264347115027563 0ustar flichtenheldflichtenheldtexi2html-1.82/test/misc/res/mini_ker_httex/mini_ker_tex4ht_math.tp0000644000175000017500000000000011264347115027411 0ustar flichtenheldflichtenheldtexi2html-1.82/test/misc/res/mini_ker_httex/mini_ker_tex4ht_tex.lg0000644000175000017500000001011511264347115027247 0ustar flichtenheldflichtenheldhtfcss: cmmi font-style: italic; htfcss: cmmib font-style: italic; font-weight: bold; File: mini_ker_tex4ht_tex.html File: mini_ker_tex4ht_tex.css File: mini_ker_tex4ht_tex.tmp Css: p.noindent { text-indent: 0em } Css: td p.noindent { text-indent: 0em; margin-top:0em; } Css: p.nopar { text-indent: 0em; } Css: p.indent{ text-indent: 1.5em } Css: @media print {div.crosslinks {visibility:hidden;}} Css: a img { border-top: 0; border-left: 0; border-right: 0; } Font_Css("4"): .small-caps{font-variant: small-caps; } Font_Css("10"): .htf-cmbx {font-weight: bold; font-style:normal;} Font_Css("12"): .htf-calligraphy {font-family:cursive} Font_Css("14"): .htf-italic {font-style: italic;} Font_Css("16"): .htf-bold {font-weight: bold;} Font_Css("12"): .htf-calligraphy-bold {font-family:cursive ; font-weight: bold; } Css: center { margin-top:1em; margin-bottom:1em; } Css: td center { margin-top:0em; margin-bottom:0em; } Css: .Canvas { position:relative; } Css: img.math{vertical-align:middle;} Css: .obeylines-h,.obeylines-v {white-space: nowrap; } Css: div.obeylines-v p { margin-top:0; margin-bottom:0; } Css: .overline{ text-decoration:overline; } Css: .overline img{ border-top: 1px solid black; } Css: td.displaylines {text-align:center; white-space:nowrap;} Css: .centerline {text-align:center;} Css: .rightline {text-align:right;} Css: span.TEX {letter-spacing: -0.125em; } Css: span.TEX span.E{ position:relative;top:0.5ex;left:-0.0417em;} Css: a span.TEX span.E {text-decoration: none; } Css: .underline{ text-decoration:underline; } Css: .underline img{ border-bottom: 1px solid black; margin-bottom:1pt; } Css: div.proclaim { margin-top: 1em; margin-bottom: 1em; } Css: p.item {text-indent:-2em; margin-left:2em;} Css: p.itemitem {text-indent:-2em; margin-left:4em;} Css: span.item, span.itemitem {width:2em; margin-right:0.4em;} Css: td.eqalign3 { text-align:right; margin-left:10em;} Css: .eqalign td { white-space: nowrap; } Css: div.eqalign {text-align:center;} Css: td.eqalignno3, td.leqalignno3 { text-align:right; margin-left:10em;} Css: .leqalignno td, .eqalignno td { white-space: nowrap; } Css: .leqalignno td.noalign, .eqalignno td.noalign { width:5%; white-space: normal; } Css: table.leqalignno, table.eqalignno {width:100%;} Css: img.cdots{vertical-align:middle;} Css: div.pmatrix {text-align:center;} Css: table.pmatrix {width:100%;} --- needs --- mini_ker_tex4ht_tex.idv[1] ==> mini_ker_tex4ht_tex0x.png --- --- needs --- mini_ker_tex4ht_tex.idv[2] ==> mini_ker_tex4ht_tex1x.png --- --- needs --- mini_ker_tex4ht_tex.idv[3] ==> mini_ker_tex4ht_tex2x.png --- --- needs --- mini_ker_tex4ht_tex.idv[4] ==> mini_ker_tex4ht_tex3x.png --- --- needs --- mini_ker_tex4ht_tex.idv[5] ==> mini_ker_tex4ht_tex4x.png --- --- needs --- mini_ker_tex4ht_tex.idv[6] ==> mini_ker_tex4ht_tex5x.png --- --- needs --- mini_ker_tex4ht_tex.idv[7] ==> mini_ker_tex4ht_tex6x.png --- --- needs --- mini_ker_tex4ht_tex.idv[8] ==> mini_ker_tex4ht_tex7x.png --- --- needs --- mini_ker_tex4ht_tex.idv[9] ==> mini_ker_tex4ht_tex8x.png --- --- needs --- mini_ker_tex4ht_tex.idv[10] ==> mini_ker_tex4ht_tex9x.png --- --- needs --- mini_ker_tex4ht_tex.idv[11] ==> mini_ker_tex4ht_tex10x.png --- --- needs --- mini_ker_tex4ht_tex.idv[12] ==> mini_ker_tex4ht_tex11x.png --- --- needs --- mini_ker_tex4ht_tex.idv[13] ==> mini_ker_tex4ht_tex12x.png --- --- needs --- mini_ker_tex4ht_tex.idv[14] ==> mini_ker_tex4ht_tex13x.png --- --- needs --- mini_ker_tex4ht_tex.idv[15] ==> mini_ker_tex4ht_tex14x.png --- --- needs --- mini_ker_tex4ht_tex.idv[16] ==> mini_ker_tex4ht_tex15x.png --- --- needs --- mini_ker_tex4ht_tex.idv[17] ==> mini_ker_tex4ht_tex16x.png --- --- needs --- mini_ker_tex4ht_tex.idv[18] ==> mini_ker_tex4ht_tex17x.png --- --- needs --- mini_ker_tex4ht_tex.idv[19] ==> mini_ker_tex4ht_tex18x.png --- --- needs --- mini_ker_tex4ht_tex.idv[20] ==> mini_ker_tex4ht_tex19x.png --- --- needs --- mini_ker_tex4ht_tex.idv[21] ==> mini_ker_tex4ht_tex20x.png --- --- characters --- Font("cmr","10","10","100") Font("cmr","7","7","100") Font("cmmi","10","10","100") Font("cmmi","7","7","100") Font("cmsy","10","10","100") Font("cmsy","7","7","100") Font("cmex","10","10","100") texi2html-1.82/test/misc/res/mini_ker_httex/mini_ker_tex4ht_tex.xref0000644000175000017500000000006111264347115027610 0ustar flichtenheldflichtenheld\:CrossWord{)F1F-}{mini_ker_tex4ht_tex.html}{1}% texi2html-1.82/test/misc/res/mini_ker_httex/mini_ker_tex4ht_math.pg0000644000175000017500000000000011264347115027374 0ustar flichtenheldflichtenheldtexi2html-1.82/test/misc/res/mini_ker_httex/mini_ker_tex4ht_math.ky0000644000175000017500000000000011264347115027411 0ustar flichtenheldflichtenheldtexi2html-1.82/test/misc/res/mini_ker_httex/mini_ker_tex4ht_math.fn0000644000175000017500000000000011264347115027371 0ustar flichtenheldflichtenheldtexi2html-1.82/test/misc/res/formatting_html32/0000755000175000017500000000000011264347115023302 5ustar flichtenheldflichtenheldtexi2html-1.82/test/misc/res/formatting_html32/formatting.20000644000175000017500000002243411264347115025544 0ustar flichtenheldflichtenheld** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 18 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 28 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 38 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** Empty index entry for @deffn (l. 42 in @mymacro) ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} ** Unknown command `@#' (left as is) *** no file argument for @image *** no file argument for @image *** no file argument for @image *** '}' without opening '{' before: *** '}' without opening '{' before: *** '{' without macro. Before: *** '{' without macro. Before: and after *** Undefined node `node' in @ref *** Undefined node `' in @ref *** Undefined node `' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `node' in @ref *** Undefined node `' in @ref *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty *** First argument to @inforef may not be empty ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** TeX requires {} ** Unknown command `@#' (left as is) *** '}' without opening '{' before: *** '}' without opening '{' before: after ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} (l. 38 in @mymacro) ** Unknown command `@#' (left as is) (l. 38 in @mymacro) *** no file argument for @image (l. 38 in @mymacro) *** no file argument for @image (l. 38 in @mymacro) *** no file argument for @image (l. 38 in @mymacro) *** '}' without opening '{' before: (l. 38 in @mymacro) *** '}' without opening '{' before: (l. 38 in @mymacro) *** '{' without macro. Before: (l. 38 in @mymacro) *** '{' without macro. Before: and after (l. 38 in @mymacro) *** Undefined node `node' in @ref (l. 38 in @mymacro) *** Undefined node `' in @ref (l. 38 in @mymacro) *** Undefined node `' in @ref (l. 38 in @mymacro) *** Undefined node `node' in @ref (l. 38 in @mymacro) *** Undefined node `node' in @ref (l. 38 in @mymacro) *** Undefined node `node' in @ref (l. 38 in @mymacro) *** Undefined node `' in @ref (l. 38 in @mymacro) *** First argument to @inforef may not be empty (l. 38 in @mymacro) *** First argument to @inforef may not be empty (l. 38 in @mymacro) *** First argument to @inforef may not be empty (l. 38 in @mymacro) *** First argument to @inforef may not be empty (l. 38 in @mymacro) ** no image file for f-ile, (using f-ile.jpg) ** no image file for f--ile@., (using f--ile@..file ext e--xt}) ** no image file for f-ile, (using f-ile.jpg) ** no image file for filejk _" %@, (using filejk _" %@.jpg) ** TeX requires {} (l. 42 in @mymacro) ** Unknown command `@#' (left as is) (l. 42 in @mymacro) *** no file argument for @image (l. 42 in @mymacro) *** no file argument for @image (l. 42 in @mymacro) *** no file argument for @image (l. 42 in @mymacro) *** '}' without opening '{' before: (l. 42 in @mymacro) *** '}' without opening '{' before: (l. 42 in @mymacro) *** '{' without macro. Before: (l. 42 in @mymacro) *** '{' without macro. Before: and after (l. 42 in @mymacro) *** Undefined node `node' in @ref (l. 42 in @mymacro) *** Undefined node `' in @ref (l. 42 in @mymacro) *** Undefined node `' in @ref (l. 42 in @mymacro) *** Undefined node `node' in @ref (l. 42 in @mymacro) *** Undefined node `node' in @ref (l. 42 in @mymacro) *** Undefined node `node' in @ref (l. 42 in @mymacro) *** Undefined node `' in @ref (l. 42 in @mymacro) *** First argument to @inforef may not be empty (l. 42 in @mymacro) *** First argument to @inforef may not be empty (l. 42 in @mymacro) *** First argument to @inforef may not be empty (l. 42 in @mymacro) *** First argument to @inforef may not be empty (l. 42 in @mymacro) texi2html-1.82/test/misc/res/formatting_html32/formatting.html0000644000175000017500000052026211264347115026351 0ustar flichtenheldflichtenheld title -a
    [Top] [Contents] [Index] [ ? ]

    Top section

    1. chapter  
    Menu comment
    
    
    2. chapter 2   Chapter 2

    Insertcopying in normal text

    In copying

    < > " & ' `

    "simple-double-three--four---"
    code: ``simple-double--three---four----''
    asis: "simple-double-three--four---"
    strong: "simple-double-three--four---"
    kbd: ``simple-double--three---four----''

    ``simple-double--three--four---''

    @"u ü @"{U} Ü @~n ñ @^a â @'e é @=o ō @`i ì @'{e} é @'{@dotless{i}} í @dotless{i} i @dotless{j} j @`{@=E} Ē` @l{} ł @,{@'C} Ć, @,c ç @,c@"u çü

    @*
    @ followed by a space   @ followed by a tab   @ followed by a new line  @- @| @: @! ! @? ? @. . @@ @ @} } @{ { @/

    foo vs. bar. colon :And something else. semi colon ;. And ? ?. Now ! !@ but , ,

    @TeX TeX @LaTeX LaTeX @bullet * @copyright © @dots ... @enddots ... @equiv == @error error--> @expansion ==> @minus - @point -!- @print -| @result => @today a sunny day @aa å @AA Å @ae æ @oe œ @AE Æ @OE Œ @o ø @O Ø @ss ß @l ł @L Ł @exclamdown ¡ @questiondown ¿ @pounds £ @registeredsymbol ® @ordf ª @ordm º @comma , @quotedblleft `` @quotedblright '' @quoteleft ` @quoteright ' @quotedblbase ,, @quotesinglbase , @guillemetleft << @guillemetright >> @guillemotleft << @guillemotright >> @guilsinglleft < @guilsinglright > @textdegree ° @euro Euro @arrow -> @leq <= @geq >=

    @acronym{--a,an accronym} -a (an accronym) @acronym{--a} -a @abbr{@'E--. @comma{}A., @'Etude Autonome } É-. ,A. (Étude Autonome) @abbr{@'E--. @comma{}A.} É-. ,A. @asis{--a} -a @b{--a} -a @cite{--a} -a @code{--a} --a @command{--a} --a @ctrl{--a} -a @dfn{--a} -a @dmn{--a} -a @email{--a,--b} -b @email{,--b} -b @email{--a} --a @emph{--a} -a @env{--a} --a @file{--a} `--a' @i{--a} -a @kbd{--a} --a @key{--a} <--a> @math{--a {\frac{1}{2}} @minus{}} -a \frac12 - @option{--a} `--a' @r{--a} -a @samp{--a} `--a' @sc{--a} -A @strong{--a} -a @t{--a} -a @sansserif{--a} -a @titlefont{--a}

    -a

    @indicateurl{--a} <--a> @uref{--a,--b} -b @uref{--a} --a @uref{,--b} -b @uref{--a,--b,--c} -c @uref{,--b,--c} -c @uref{--a,,--c} -c @uref{,,--c} -c @url{--a,--b} -b @url{--a,} --a @url{,--b} -b @var{--a} -a @verb{:--a:} --a @verb{:a < & @ % " -- b:} a < & @ % " -- b @w{} @H{a} a'' @H{--a} -a'' @dotaccent{a} ȧ @dotaccent{--a} -a. @ringaccent{a} å @ringaccent{--a} -a* @tieaccent{a} a[ @tieaccent{--a} -a[ @u{a} ă @u{--a} -a( @ubaraccent{a} a_ @ubaraccent{--a} -a_ @udotaccent{a}@udotaccent{--a} .-a @v{a} a< @v{--a} -a< @,{c} ç @,{--c} -c, @ogonek{a} ą @ogonek{--a} -a; @footnote{in footnote} (1) @footnote{in footnote2} (2)

    @image{f--ile} f--ile @image{f--ile,l--i} f--ile @image{f--ile,,l--e} f--ile @image{f--ile,,,alt} alt @image{f--ile,,,,e-d-xt} f--ile @image{f--ile,aze,az,alt,e--xt} alt @image{f-ile,aze,,a--lt} a-lt @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} alt



    @clicksequence{click @click{} A} click -> A After clickstyle => @clicksequence{click @click{} A} click => A

    A quot--ation

    Note: A Note

    note: A note

    Caution: Caution

    Important: Important

    Tip: a Tip

    Warning: a Warning.

    something é TeX: The something é TeX is here.

    @ at the end of line A @ at the end of the @quotation line.

    something, other thing: something, other thing

    Note, the note: Note, the note

    Empty:

    :


    :

    A small quot--ation

    Note: A small Note

    something, other thing: something, other thing

    • i-temize
    • + i-tem +
    • b-ullet
    • - minu-s
    • e-mph item
    • after emph e-mph item
    • a-n itemize line i-tem 1
    • a-n itemize line i-tem 2
    1. e-numerate
    mu-ltitable headitemanother tab
    mu-ltitable itemmultitable tab
    mu-ltitable item 2multitable tab 2
    lone mu-ltitable item
    trucbidule
     
    e--xample  some
       text
    
     
    s--mallexample
    
     
    d-isplay
    
     
    s-malldisplay
    
     
    l--isp
    
     
    s--malllisp
    
     
    f-ormat
    
     
    s-mallformat
    
    c--ategory: d--effn_name a--rguments...

    d-effn

    cate--gory: de--ffn_name ar--guments more args
    even more so

    def-fn

    fset: i a g
    cmde: truc
    Command: log trap
    Command: log trap1
    Command: log trap2
    cmde: id ule truc
    cmde2: id `i' ule truc
    id `i' ule:
    :
    aaa:
    :
    :
    : machin
    : bidule machin
    truc: machin
    truc:
    truc: followed by a comment
    truc:
    :
    truc: a b c d e f g h i
    truc: deffnx before end deffn
    empty: deffn
    empty: deffn with deffnx
    empty: deffnx
    fset: i a g
    cmde: truc

    text in def item for second def item

    c--ategory: d--efvr_name

    d-efvr

    c--ategory: t--ype d--eftypefn_name a--rguments...

    d-eftypefn

    c--ategory on c--lass: t--ype d--eftypeop_name a--rguments...

    d-eftypeop

    c--ategory: t--ype d--eftypevr_name

    d-eftypevr

    c--ategory of c--lass: d--efcv_name

    d-efcv

    c--ategory on c--lass: d--efop_name a--rguments...

    d-efop

    c--ategory: d--eftp_name a--ttributes...

    d-eftp

    Function: d--efun_name a--rguments...

    d-efun

    Macro: d--efmac_name a--rguments...

    d-efmac

    Special Form: d--efspec_name a--rguments...

    d-efspec

    Variable: d--efvar_name argvar argvar1

    d-efvar

    User Option: d--efopt_name

    d-efopt

    Function: t--ype d--eftypefun_name a--rguments...

    d-eftypefun

    Variable: t--ype d--eftypevar_name

    d-eftypevar

    Instance Variable of c--lass: d--efivar_name

    d-efivar

    Instance Variable of c--lass: t--ype d--eftypeivar_name

    d-eftypeivar

    Method on c--lass: d--efmethod_name a--rguments...

    d-efmethod

    Method on c--lass: t--ype d--eftypemethod_name a--rguments...

    d-eftypemethod

    @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} See cross r--ef name@: (file n--ame@)c--hapter@ section `t--itle@' in ma--nual@. @ref{chapter, cross ref name, title, file name, manual} cross ref name: (file name)chapter section `title' in manual @pxref{chapter, cross ref name, title, file name, manual} see cross ref name: (file name)chapter section `title' in manual @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter

    @ref{chapter} chapter @xref{chapter} See section chapter. @pxref{chapter} see section chapter @ref{s--ect@comma{}ion} A section

    @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } a , in cross ref: (a comma, in file)s-ect,ion section `a comma, in title' in a , in manual name

    @ref{chapter,cross ref name} cross ref name @ref{chapter,,title} title @ref{chapter,,,file name} (file name)chapter @ref{chapter,,,,manual} section `chapter' in manual @ref{chapter,cross ref name,title,} title @ref{chapter,cross ref name,,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,,,manual} section `chapter' in manual @ref{chapter,cross ref name,title,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,title,,manual} section `title' in manual @ref{chapter,cross ref name,title, file name, manual} cross ref name: (file name)chapter section `title' in manual @ref{chapter,,title,file name} (file name)chapter @ref{chapter,,title,,manual} section `title' in manual @ref{chapter,,title, file name, manual} (file name)chapter section `title' in manual @ref{chapter,,,file name,manual} (file name)chapter section `chapter' in manual

    @ref{(pman)anode,cross ref name} cross ref name: (pman)anode @ref{(pman)anode,,title} (pman)anode @ref{(pman)anode,,,file name} (file name)anode @ref{(pman)anode,,,,manual} (pman)anode section `anode' in manual @ref{(pman)anode,cross ref name,title,} cross ref name: (pman)anode @ref{(pman)anode,cross ref name,,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,,,manual} cross ref name: (pman)anode section `anode' in manual @ref{(pman)anode,cross ref name,title,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,title,,manual} cross ref name: (pman)anode section `title' in manual @ref{(pman)anode,cross ref name,title, file name, manual} cross ref name: (file name)anode section `title' in manual @ref{(pman)anode,,title,file name} (file name)anode @ref{(pman)anode,,title,,manual} (pman)anode section `title' in manual @ref{(pman)anode,,title, file name, manual} (file name)anode section `title' in manual @ref{(pman)anode,,,file name,manual} (file name)anode section `anode' in manual

    @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter @inforef{chapter} @inforef{chapter, cross ref name} @inforef{chapter,,file name} See (file name)chapter @inforef{node, cross ref name, file name} See cross ref name: (file name)node @inforef{node} @inforef{node, cross ref name} @inforef{node,,file name} See (file name)node @inforef{chapter, cross ref name, file name, spurious arg} See cross ref name: (file name, spurious arg)chapter

    @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} See a , in cross ref: (a comma, in file)s-ect,ion

    * a

    l-ine

    a
    b

    l-ine

    - a
    - b

    l-ine

    c-artouche

    f-lushleft

    f-lushright

    ce-ntered line

    \input texinfo @c -*-texinfo-*-
    
    @setfilename simplest.info
    
    @node Top
    
    This is a very simple texi manual @  <>.
    
    @bye
    
    in verbatim ''
    
    html ''

    majorheading

    chapheading

    heading

    subheading

    subsubheading

    @acronym{--a,an accronym @comma{} @enddots{}} -a (an accronym , ...) @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } É-. ,A. (Étude-, Autonome) @abbr{@'E--. @comma{}A.} É-. ,A.

    @math{--a@minus{} {\frac{1}{2}}} -a- \frac12

    @image{f-ile,,,alt@verb{:jk _" %}} altjk _" %@ @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} jk _" %@ in b " @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} altjk _" %@

    Somehow invalid use of @,:
    @, ,
    @,@"u @,"u

    Invalid use of @':
    @' '
    @'@"u @'"u

    @dotless{truc} truc @dotless{ij} ij @dotless{--a} -a @dotless{a} a

    @TeX, but without brace TeX

    @# @#

    @w{--a} -a

    @image{,1--xt} @image{,,2--xt} @image{,,,3--xt}


    • after emph e-mph item
    • a-n itemize line i-tem 1
    • a-n itemize line i-tem 2
    fun:
    truc: machin bidule chose and
    truc: machin bidule chose and after
    truc: machin bidule chose and {
    truc: machin bidule chose and { and after
    truc: followed by a comment

    Various deff lines

    truc: after a deff item

    @ref{node} @ref{node}

    @ref{,cross ref name} @ref{,cross ref name} @ref{,,title} @ref{,,title} @ref{,,,file name} (file name) @ref{,,,,manual} manual @ref{node,cross ref name} @ref{node,cross ref name} @ref{node,,title} @ref{node,,title} @ref{node,,,file name} (file name)node @ref{node,,,,manual} section `node' in manual @ref{node,cross ref name,title,} @ref{node,cross ref name,title,} @ref{node,cross ref name,,file name} cross ref name: (file name)node @ref{node,cross ref name,,,manual} section `node' in manual @ref{node,cross ref name,title,file name} cross ref name: (file name)node @ref{node,cross ref name,title,,manual} section `title' in manual @ref{node,cross ref name,title, file name, manual} cross ref name: (file name)node section `title' in manual @ref{node,,title,file name} (file name)node @ref{node,,title,,manual} section `title' in manual @ref{chapter,,title, file name, manual} (file name)chapter section `title' in manual @ref{node,,title, file name, manual} (file name)node section `title' in manual @ref{node,,,file name,manual} (file name)node section `node' in manual @ref{,cross ref name,title,} @ref{,cross ref name,title,} @ref{,cross ref name,,file name} cross ref name: (file name) @ref{,cross ref name,,,manual} manual @ref{,cross ref name,title,file name} cross ref name: (file name) @ref{,cross ref name,title,,manual} section `title' in manual @ref{,cross ref name,title, file name, manual} cross ref name: (file name) section `title' in manual @ref{,,title,file name} (file name) @ref{,,title,,manual} section `title' in manual @ref{,,title, file name, manual} (file name) section `title' in manual @ref{,,,file name,manual} (file name) manual

    @inforef{,cross ref name } @inforef{,,file name} @inforef{,cross ref name, file name} @inforef{}

    Normal text

    < > " & ' `

    "simple-double-three--four---"
    code: ``simple-double--three---four----''
    asis: "simple-double-three--four---"
    strong: "simple-double-three--four---"
    kbd: ``simple-double--three---four----''

    ``simple-double--three--four---''

    @"u ü @"{U} Ü @~n ñ @^a â @'e é @=o ō @`i ì @'{e} é @'{@dotless{i}} í @dotless{i} i @dotless{j} j @`{@=E} Ē` @l{} ł @,{@'C} Ć, @,c ç @,c@"u çü

    @*
    @ followed by a space   @ followed by a tab   @ followed by a new line  @- @| @: @! ! @? ? @. . @@ @ @} } @{ { @/

    foo vs. bar. colon :And something else. semi colon ;. And ? ?. Now ! !@ but , ,

    @TeX TeX @LaTeX LaTeX @bullet * @copyright © @dots ... @enddots ... @equiv == @error error--> @expansion ==> @minus - @point -!- @print -| @result => @today a sunny day @aa å @AA Å @ae æ @oe œ @AE Æ @OE Œ @o ø @O Ø @ss ß @l ł @L Ł @exclamdown ¡ @questiondown ¿ @pounds £ @registeredsymbol ® @ordf ª @ordm º @comma , @quotedblleft `` @quotedblright '' @quoteleft ` @quoteright ' @quotedblbase ,, @quotesinglbase , @guillemetleft << @guillemetright >> @guillemotleft << @guillemotright >> @guilsinglleft < @guilsinglright > @textdegree ° @euro Euro @arrow -> @leq <= @geq >=

    @acronym{--a,an accronym} -a (an accronym) @acronym{--a} -a @abbr{@'E--. @comma{}A., @'Etude Autonome } É-. ,A. (Étude Autonome) @abbr{@'E--. @comma{}A.} É-. ,A. @asis{--a} -a @b{--a} -a @cite{--a} -a @code{--a} --a @command{--a} --a @ctrl{--a} -a @dfn{--a} -a @dmn{--a} -a @email{--a,--b} -b @email{,--b} -b @email{--a} --a @emph{--a} -a @env{--a} --a @file{--a} `--a' @i{--a} -a @kbd{--a} --a @key{--a} <--a> @math{--a {\frac{1}{2}} @minus{}} -a \frac12 - @option{--a} `--a' @r{--a} -a @samp{--a} `--a' @sc{--a} -A @strong{--a} -a @t{--a} -a @sansserif{--a} -a @titlefont{--a}

    -a

    @indicateurl{--a} <--a> @uref{--a,--b} -b @uref{--a} --a @uref{,--b} -b @uref{--a,--b,--c} -c @uref{,--b,--c} -c @uref{--a,,--c} -c @uref{,,--c} -c @url{--a,--b} -b @url{--a,} --a @url{,--b} -b @var{--a} -a @verb{:--a:} --a @verb{:a < & @ % " -- b:} a < & @ % " -- b @w{} @H{a} a'' @H{--a} -a'' @dotaccent{a} ȧ @dotaccent{--a} -a. @ringaccent{a} å @ringaccent{--a} -a* @tieaccent{a} a[ @tieaccent{--a} -a[ @u{a} ă @u{--a} -a( @ubaraccent{a} a_ @ubaraccent{--a} -a_ @udotaccent{a}@udotaccent{--a} .-a @v{a} a< @v{--a} -a< @,{c} ç @,{--c} -c, @ogonek{a} ą @ogonek{--a} -a; @footnote{in footnote} (1) @footnote{in footnote2} (2)

    @image{f--ile} f--ile @image{f--ile,l--i} f--ile @image{f--ile,,l--e} f--ile @image{f--ile,,,alt} alt @image{f--ile,,,,e-d-xt} f--ile @image{f--ile,aze,az,alt,e--xt} alt @image{f-ile,aze,,a--lt} a-lt @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} alt



    @clicksequence{click @click{} A} click -> A After clickstyle => @clicksequence{click @click{} A} click => A

    A quot--ation

    Note: A Note

    note: A note

    Caution: Caution

    Important: Important

    Tip: a Tip

    Warning: a Warning.

    something é TeX: The something é TeX is here.

    @ at the end of line A @ at the end of the @quotation line.

    something, other thing: something, other thing

    Note, the note: Note, the note

    Empty:

    :


    :

    A small quot--ation

    Note: A small Note

    something, other thing: something, other thing

    • i-temize
    • + i-tem +
    • b-ullet
    • - minu-s
    • e-mph item
    • after emph e-mph item
    • a-n itemize line i-tem 1
    • a-n itemize line i-tem 2
    1. e-numerate
    mu-ltitable headitemanother tab
    mu-ltitable itemmultitable tab
    mu-ltitable item 2multitable tab 2
    lone mu-ltitable item
    trucbidule
     
    e--xample  some
       text
    
     
    s--mallexample
    
     
    d-isplay
    
     
    s-malldisplay
    
     
    l--isp
    
     
    s--malllisp
    
     
    f-ormat
    
     
    s-mallformat
    
    c--ategory: d--effn_name a--rguments...

    d-effn

    cate--gory: de--ffn_name ar--guments more args
    even more so

    def-fn

    fset: i a g
    cmde: truc
    Command: log trap
    Command: log trap1
    Command: log trap2
    cmde: id ule truc
    cmde2: id `i' ule truc
    id `i' ule:
    :
    aaa:
    :
    :
    : machin
    : bidule machin
    truc: machin
    truc:
    truc: followed by a comment
    truc:
    :
    truc: a b c d e f g h i
    truc: deffnx before end deffn
    empty: deffn
    empty: deffn with deffnx
    empty: deffnx
    fset: i a g
    cmde: truc

    text in def item for second def item

    c--ategory: d--efvr_name

    d-efvr

    c--ategory: t--ype d--eftypefn_name a--rguments...

    d-eftypefn

    c--ategory on c--lass: t--ype d--eftypeop_name a--rguments...

    d-eftypeop

    c--ategory: t--ype d--eftypevr_name

    d-eftypevr

    c--ategory of c--lass: d--efcv_name

    d-efcv

    c--ategory on c--lass: d--efop_name a--rguments...

    d-efop

    c--ategory: d--eftp_name a--ttributes...

    d-eftp

    Function: d--efun_name a--rguments...

    d-efun

    Macro: d--efmac_name a--rguments...

    d-efmac

    Special Form: d--efspec_name a--rguments...

    d-efspec

    Variable: d--efvar_name argvar argvar1

    d-efvar

    User Option: d--efopt_name

    d-efopt

    Function: t--ype d--eftypefun_name a--rguments...

    d-eftypefun

    Variable: t--ype d--eftypevar_name

    d-eftypevar

    Instance Variable of c--lass: d--efivar_name

    d-efivar

    Instance Variable of c--lass: t--ype d--eftypeivar_name

    d-eftypeivar

    Method on c--lass: d--efmethod_name a--rguments...

    d-efmethod

    Method on c--lass: t--ype d--eftypemethod_name a--rguments...

    d-eftypemethod

    @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} See cross r--ef name@: (file n--ame@)c--hapter@ section `t--itle@' in ma--nual@. @ref{chapter, cross ref name, title, file name, manual} cross ref name: (file name)chapter section `title' in manual @pxref{chapter, cross ref name, title, file name, manual} see cross ref name: (file name)chapter section `title' in manual @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter

    @ref{chapter} chapter @xref{chapter} See section chapter. @pxref{chapter} see section chapter @ref{s--ect@comma{}ion} A section

    @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } a , in cross ref: (a comma, in file)s-ect,ion section `a comma, in title' in a , in manual name

    @ref{chapter,cross ref name} cross ref name @ref{chapter,,title} title @ref{chapter,,,file name} (file name)chapter @ref{chapter,,,,manual} section `chapter' in manual @ref{chapter,cross ref name,title,} title @ref{chapter,cross ref name,,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,,,manual} section `chapter' in manual @ref{chapter,cross ref name,title,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,title,,manual} section `title' in manual @ref{chapter,cross ref name,title, file name, manual} cross ref name: (file name)chapter section `title' in manual @ref{chapter,,title,file name} (file name)chapter @ref{chapter,,title,,manual} section `title' in manual @ref{chapter,,title, file name, manual} (file name)chapter section `title' in manual @ref{chapter,,,file name,manual} (file name)chapter section `chapter' in manual

    @ref{(pman)anode,cross ref name} cross ref name: (pman)anode @ref{(pman)anode,,title} (pman)anode @ref{(pman)anode,,,file name} (file name)anode @ref{(pman)anode,,,,manual} (pman)anode section `anode' in manual @ref{(pman)anode,cross ref name,title,} cross ref name: (pman)anode @ref{(pman)anode,cross ref name,,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,,,manual} cross ref name: (pman)anode section `anode' in manual @ref{(pman)anode,cross ref name,title,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,title,,manual} cross ref name: (pman)anode section `title' in manual @ref{(pman)anode,cross ref name,title, file name, manual} cross ref name: (file name)anode section `title' in manual @ref{(pman)anode,,title,file name} (file name)anode @ref{(pman)anode,,title,,manual} (pman)anode section `title' in manual @ref{(pman)anode,,title, file name, manual} (file name)anode section `title' in manual @ref{(pman)anode,,,file name,manual} (file name)anode section `anode' in manual

    @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter @inforef{chapter} @inforef{chapter, cross ref name} @inforef{chapter,,file name} See (file name)chapter @inforef{node, cross ref name, file name} See cross ref name: (file name)node @inforef{node} @inforef{node, cross ref name} @inforef{node,,file name} See (file name)node @inforef{chapter, cross ref name, file name, spurious arg} See cross ref name: (file name, spurious arg)chapter

    @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} See a , in cross ref: (a comma, in file)s-ect,ion

    * a

    l-ine

    a
    b

    l-ine

    - a
    - b

    l-ine

    c-artouche

    f-lushleft

    f-lushright

    ce-ntered line

    \input texinfo @c -*-texinfo-*-
    
    @setfilename simplest.info
    
    @node Top
    
    This is a very simple texi manual @  <>.
    
    @bye
    
    in verbatim ''
    
    html ''

    majorheading

    chapheading

    heading

    subheading

    subsubheading

    @acronym{--a,an accronym @comma{} @enddots{}} -a (an accronym , ...) @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } É-. ,A. (Étude-, Autonome) @abbr{@'E--. @comma{}A.} É-. ,A.

    @math{--a@minus{} {\frac{1}{2}}} -a- \frac12

    @image{f-ile,,,alt@verb{:jk _" %}} altjk _" %@ @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} jk _" %@ in b " @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} altjk _" %@

    Somehow invalid use of @,:
    @, ,
    @,@"u @,"u

    Invalid use of @':
    @' '
    @'@"u @'"u

    @dotless{truc} truc @dotless{ij} ij @dotless{--a} -a @dotless{a} a

    @TeX, but without brace TeX

    @# @#

    @w{--a} -a

    @image{,1--xt} @image{,,2--xt} @image{,,,3--xt}


    • after emph e-mph item
    • a-n itemize line i-tem 1
    • a-n itemize line i-tem 2
    fun:
    truc: machin bidule chose and
    truc: machin bidule chose and after
    truc: machin bidule chose and {
    truc: machin bidule chose and { and after
    truc: followed by a comment

    Various deff lines

    truc: after a deff item

    @ref{node} @ref{node}

    @ref{,cross ref name} @ref{,cross ref name} @ref{,,title} @ref{,,title} @ref{,,,file name} (file name) @ref{,,,,manual} manual @ref{node,cross ref name} @ref{node,cross ref name} @ref{node,,title} @ref{node,,title} @ref{node,,,file name} (file name)node @ref{node,,,,manual} section `node' in manual @ref{node,cross ref name,title,} @ref{node,cross ref name,title,} @ref{node,cross ref name,,file name} cross ref name: (file name)node @ref{node,cross ref name,,,manual} section `node' in manual @ref{node,cross ref name,title,file name} cross ref name: (file name)node @ref{node,cross ref name,title,,manual} section `title' in manual @ref{node,cross ref name,title, file name, manual} cross ref name: (file name)node section `title' in manual @ref{node,,title,file name} (file name)node @ref{node,,title,,manual} section `title' in manual @ref{chapter,,title, file name, manual} (file name)chapter section `title' in manual @ref{node,,title, file name, manual} (file name)node section `title' in manual @ref{node,,,file name,manual} (file name)node section `node' in manual @ref{,cross ref name,title,} @ref{,cross ref name,title,} @ref{,cross ref name,,file name} cross ref name: (file name) @ref{,cross ref name,,,manual} manual @ref{,cross ref name,title,file name} cross ref name: (file name) @ref{,cross ref name,title,,manual} section `title' in manual @ref{,cross ref name,title, file name, manual} cross ref name: (file name) section `title' in manual @ref{,,title,file name} (file name) @ref{,,title,,manual} section `title' in manual @ref{,,title, file name, manual} (file name) section `title' in manual @ref{,,,file name,manual} (file name) manual

    @inforef{,cross ref name } @inforef{,,file name} @inforef{,cross ref name, file name} @inforef{}

    In example.

     
    <
    >
    "
    &
    '
    `
    
    ``simple-double--three---four----''
    
    code: ``simple-double--three---four----'' 
    
    asis: ``simple-double--three---four----'' 
    
    strong: ``simple-double--three---four----'' 
    
    kbd: ``simple-double--three---four----'' 
    
    
    ``simple-double--three---four----''
    
    
    
    @"u ü 
    @"{U} Ü 
    @~n ñ
    @^a â
    @'e é
    @=o ō
    @`i ì
    @'{e} é
    @'{@dotless{i}} í 
    @dotless{i} i
    @dotless{j} j
    @`{@=E} Ē` 
    @l{} ł
    @,{@'C} Ć,
    @,c ç
    @,c@"u çü 
    
    
    @* 
    
    @ followed by a space
     
    @ followed by a tab
     
    @ followed by a new line
     @- 
    @| 
    @: 
    @! !
    @? ?
    @. .
    @@ @
    @} }
    @{ {
    @/ 
    
    foo vs. bar. 
    colon :And something else.
    semi colon ;.
    And ? ?.
    Now ! !@
    but , ,
    
    @TeX TeX
    @LaTeX LaTeX
    @bullet *
    @copyright ©
    @dots ...
    @enddots ...
    @equiv ==
    @error error-->
    @expansion ==>
    @minus -
    @point -!-
    @print -|
    @result =>
    @today a sunny day
    @aa å
    @AA Å
    @ae æ
    @oe œ
    @AE Æ
    @OE Œ
    @o ø
    @O Ø
    @ss ß
    @l ł
    @L Ł
    @exclamdown ¡
    @questiondown ¿
    @pounds £
    @registeredsymbol ®
    @ordf ª
    @ordm º
    @comma ,
    @quotedblleft ``
    @quotedblright ''
    @quoteleft `
    @quoteright '
    @quotedblbase ,,
    @quotesinglbase ,
    @guillemetleft <<
    @guillemetright >>
    @guillemotleft <<
    @guillemotright >>
    @guilsinglleft <
    @guilsinglright >
    @textdegree °
    @euro €
    @arrow ->
    @leq ≤
    @geq ≥
    
    @acronym{--a,an accronym} --a (an accronym)
    @acronym{--a} --a
    @abbr{@'E--. @comma{}A., @'Etude Autonome } É--. ,A. (Étude Autonome)
    @abbr{@'E--. @comma{}A.} É--. ,A.
    @asis{--a} --a
    @b{--a} --a
    @cite{--a} --a
    @code{--a} --a
    @command{--a} --a
    @ctrl{--a} --a
    @dfn{--a} --a
    @dmn{--a} --a
    @email{--a,--b} --b
    @email{,--b} --b
    @email{--a} --a
    @emph{--a} --a
    @env{--a} --a
    @file{--a} `--a'
    @i{--a} --a
    @kbd{--a} --a
    @key{--a} <--a>
    @math{--a {\frac{1}{2}} @minus{}} --a \frac12 -
    @option{--a} `--a'
    @r{--a} --a
    @samp{--a} `--a'
    @sc{--a} --A
    @strong{--a} --a
    @t{--a} --a
    @sansserif{--a} --a
    @titlefont{--a} --a
    @indicateurl{--a} <--a>
    @uref{--a,--b} --b
    @uref{--a} --a
    @uref{,--b} --b
    @uref{--a,--b,--c} --c
    @uref{,--b,--c} --c
    @uref{--a,,--c} --c
    @uref{,,--c} --c
    @url{--a,--b} --b
    @url{--a,} --a
    @url{,--b} --b
    @var{--a} --a
    @verb{:--a:} --a
    @verb{:a  < & @ % " --    b:} a  < & @ % " --    b
    @w{} 
    @H{a} a''
    @H{--a} --a''
    @dotaccent{a} ȧ
    @dotaccent{--a} --a.
    @ringaccent{a} å
    @ringaccent{--a} --a*
    @tieaccent{a} a[
    @tieaccent{--a} --a[
    @u{a} ă
    @u{--a} --a(
    @ubaraccent{a} a_
    @ubaraccent{--a} --a_
    @udotaccent{a}@udotaccent{--a} .--a
    @v{a} a<
    @v{--a} --a<
    @,{c} ç
    @,{--c} --c,
    @ogonek{a} ą
    @ogonek{--a} --a;
    @footnote{in footnote} (3)
    @footnote{in footnote2} (4)
    
    @image{f--ile} [ f--ile ]
    @image{f--ile,l--i} [ f--ile ]
    @image{f--ile,,l--e} [ f--ile ]
    @image{f--ile,,,alt} [ alt ]
    @image{f--ile,,,,e-d-xt} [ f--ile ]
    @image{f--ile,aze,az,alt,e--xt} [ alt ]
    @image{f-ile,aze,,a--lt} [ a-lt ]
    @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} [ alt ]
    
    
    
    
    @clicksequence{click @click{} A} click -> A
    After clickstyle =>
    @clicksequence{click @click{} A} click => A
    
    
    A quot---ation
    
    Note: A Note
    
    note: A note
    
    Caution: Caution
    
    Important: Important
    
    Tip: a Tip
    
    Warning: a Warning.
    
    something é TeX: The something é TeX is here.
    
    @ at the end of line  A @ at the end of the @quotation line.
    
    something, other thing: something, other thing
    
    Note, the note: Note, the note
    
    Empty: 
    : 
    
    : 
    A small quot---ation
    
    Note: A small Note
    
    something, other thing: something, other thing
    
    •  i--temize
      
    •  +  i--tem +
      
    •  b--ullet
      
    • -
       minu--s
      
    •  e--mph item
      
    •  after emph  e--mph item
      
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    1.  e--numerate
      
     mu--ltitable headitem 
     another tab
    
     mu--ltitable item 
     multitable tab
    
     mu--ltitable item 2 
     multitable tab 2
    
     lone mu--ltitable item
    
     truc 
     bidule
    
     
    e--xample  some
       text
    
     
    s--mallexample
    
     
    d--isplay
    
     
    s--malldisplay
    
     
    l--isp
    
     
    s--malllisp
    
     
    f--ormat
    
     
    s--mallformat
    
    c--ategory: d--effn_name a--rguments...
    d--effn
    
    cate--gory: de--ffn_name ar--guments more args even more so
    def--fn
    
     
    
    fset: i a g
    cmde: truc
    Command: log trap
    Command: log trap1
    Command: log trap2
    cmde: id ule truc
    cmde2: id `i' ule truc
    id `i' ule:
    :
    aaa:
    :
    :
    : machin
    : bidule machin
    truc: machin
    truc:
    truc: followed by a comment
    truc:
    :
    truc: a b c d e f g h i
    truc: deffnx before end deffn
    empty: deffn
    empty: deffn with deffnx
    empty: deffnx
    fset: i a g
    cmde: truc
    text in def item for second def item
    
    c--ategory: d--efvr_name
    d--efvr
    
    c--ategory: t--ype d--eftypefn_name a--rguments...
    d--eftypefn
    
    c--ategory on c--lass: t--ype d--eftypeop_name a--rguments...
    d--eftypeop
    
    c--ategory: t--ype d--eftypevr_name
    d--eftypevr
    
    c--ategory of c--lass: d--efcv_name
    d--efcv
    
    c--ategory on c--lass: d--efop_name a--rguments...
    d--efop
    
    c--ategory: d--eftp_name a--ttributes...
    d--eftp
    
    Function: d--efun_name a--rguments...
    d--efun
    
    Macro: d--efmac_name a--rguments...
    d--efmac
    
    Special Form: d--efspec_name a--rguments...
    d--efspec
    
    Variable: d--efvar_name argvar argvar1
    d--efvar
    
    User Option: d--efopt_name
    d--efopt
    
    Function: t--ype d--eftypefun_name a--rguments...
    d--eftypefun
    
    Variable: t--ype d--eftypevar_name
    d--eftypevar
    
    Instance Variable of c--lass: d--efivar_name
    d--efivar
    
    Instance Variable of c--lass: t--ype d--eftypeivar_name
    d--eftypeivar
    
    Method on c--lass: d--efmethod_name a--rguments...
    d--efmethod
    
    Method on c--lass: t--ype d--eftypemethod_name a--rguments...
    d--eftypemethod
    
    @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} See cross r---ef name@: (file n---ame@)c---hapter@ section `t---itle@' in ma---nual@.
    @ref{chapter, cross ref name, title, file name, manual} cross ref name: (file name)chapter section `title' in manual
    @pxref{chapter, cross ref name, title, file name, manual} see cross ref name: (file name)chapter section `title' in manual
    @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter
    
    @ref{chapter} chapter
    @xref{chapter} See section chapter.
    @pxref{chapter} see section chapter
    @ref{s--ect@comma{}ion} A section
    
    @ref{s--ect@comma{}ion, a @comma{} in cross
    ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name }
    a , in cross ref: (a comma, in file)s--ect,ion section `a comma, in title' in a , in manual name
    
    @ref{chapter,cross ref name} cross ref name
    @ref{chapter,,title} title
    @ref{chapter,,,file name} (file name)chapter
    @ref{chapter,,,,manual} section `chapter' in manual
    @ref{chapter,cross ref name,title,} title
    @ref{chapter,cross ref name,,file name} cross ref name: (file name)chapter
    @ref{chapter,cross ref name,,,manual} section `chapter' in manual
    @ref{chapter,cross ref name,title,file name} cross ref name: (file name)chapter
    @ref{chapter,cross ref name,title,,manual} section `title' in manual
    @ref{chapter,cross ref name,title, file name, manual} cross ref name: (file name)chapter section `title' in manual
    @ref{chapter,,title,file name} (file name)chapter
    @ref{chapter,,title,,manual} section `title' in manual
    @ref{chapter,,title, file name, manual} (file name)chapter section `title' in manual
    @ref{chapter,,,file name,manual} (file name)chapter section `chapter' in manual
    
    
    @ref{(pman)anode,cross ref name} cross ref name: (pman)anode
    @ref{(pman)anode,,title} (pman)anode
    @ref{(pman)anode,,,file name} (file name)anode
    @ref{(pman)anode,,,,manual} (pman)anode section `anode' in manual
    @ref{(pman)anode,cross ref name,title,} cross ref name: (pman)anode
    @ref{(pman)anode,cross ref name,,file name} cross ref name: (file name)anode
    @ref{(pman)anode,cross ref name,,,manual} cross ref name: (pman)anode section `anode' in manual
    @ref{(pman)anode,cross ref name,title,file name} cross ref name: (file name)anode
    @ref{(pman)anode,cross ref name,title,,manual} cross ref name: (pman)anode section `title' in manual
    @ref{(pman)anode,cross ref name,title, file name, manual} cross ref name: (file name)anode section `title' in manual
    @ref{(pman)anode,,title,file name} (file name)anode
    @ref{(pman)anode,,title,,manual} (pman)anode section `title' in manual
    @ref{(pman)anode,,title, file name, manual} (file name)anode section `title' in manual
    @ref{(pman)anode,,,file name,manual} (file name)anode section `anode' in manual
    
    
    @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter
    @inforef{chapter} 
    @inforef{chapter, cross ref name} 
    @inforef{chapter,,file name} See (file name)chapter
    @inforef{node, cross ref name, file name} See cross ref name: (file name)node
    @inforef{node} 
    @inforef{node, cross ref name} 
    @inforef{node,,file name} See (file name)node
    @inforef{chapter, cross ref name, file name, spurious arg} See cross ref name: (file name, spurious arg)chapter
    
    @inforef{s--ect@comma{}ion, a @comma{} in cross
    ref, a comma@comma{} in file}
    See a , in cross ref: (a comma, in file)s--ect,ion
    
    
    
    * a
    l--ine
    
    a
    b
    l--ine
    
    - a
    - b
    l--ine
    
    c--artouche
    
    f--lushleft
    
    f--lushright
    
     ce--ntered line
    
    \input texinfo @c -*-texinfo-*-
    
    @setfilename simplest.info
    
    @node Top
    
    This is a very simple texi manual @  <>.
    
    @bye
    
    in verbatim ''
    
    
    html ''
    
    
    
    
    

    majorheading

    chapheading

    heading

    subheading

    subsubheading

    @acronym{--a,an accronym @comma{} @enddots{}} --a (an accronym , ...) @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } É--. ,A. (Étude--, Autonome) @abbr{@'E--. @comma{}A.} É--. ,A. @math{--a@minus{} {\frac{1}{2}}} --a- \frac12 @image{f-ile,,,alt@verb{:jk _" %}} [ altjk _" %@ ] @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} [ jk _" %@ in b " ] @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} [ altjk _" %@ ] Somehow invalid use of @,: @, , @,@"u @,"u Invalid use of @': @' ' @'@"u @'"u @dotless{truc} truc @dotless{ij} ij @dotless{--a} --a @dotless{a} a @TeX, but without brace TeX @# @# @w{--a} --a @image{,1--xt} @image{,,2--xt} @image{,,,3--xt}
    • after emph  e--mph item
      
    • a--n itemize line  i--tem 1
      
    • a--n itemize line  i--tem 2
      
    fun:
    truc: machin bidule chose and
    truc: machin bidule chose and after
    truc: machin bidule chose and {
    truc: machin bidule chose and { and after
    truc: followed by a comment
    Various deff lines
    
    truc: after a deff item
    @ref{node} @ref{node}
    
    @ref{,cross ref name} @ref{,cross ref name}
    @ref{,,title} @ref{,,title}
    @ref{,,,file name} (file name)
    @ref{,,,,manual} manual
    @ref{node,cross ref name} @ref{node,cross ref name}
    @ref{node,,title} @ref{node,,title}
    @ref{node,,,file name} (file name)node
    @ref{node,,,,manual} section `node' in manual
    @ref{node,cross ref name,title,} @ref{node,cross ref name,title,}
    @ref{node,cross ref name,,file name} cross ref name: (file name)node
    @ref{node,cross ref name,,,manual} section `node' in manual
    @ref{node,cross ref name,title,file name} cross ref name: (file name)node
    @ref{node,cross ref name,title,,manual} section `title' in manual
    @ref{node,cross ref name,title, file name, manual} cross ref name: (file name)node section `title' in manual
    @ref{node,,title,file name} (file name)node
    @ref{node,,title,,manual} section `title' in manual
    @ref{chapter,,title, file name, manual} (file name)chapter section `title' in manual
    @ref{node,,title, file name, manual} (file name)node section `title' in manual
    @ref{node,,,file name,manual} (file name)node section `node' in manual
    @ref{,cross ref name,title,} @ref{,cross ref name,title,}
    @ref{,cross ref name,,file name} cross ref name: (file name)
    @ref{,cross ref name,,,manual} manual
    @ref{,cross ref name,title,file name} cross ref name: (file name)
    @ref{,cross ref name,title,,manual} section `title' in manual
    @ref{,cross ref name,title, file name, manual} cross ref name: (file name) section `title' in manual
    @ref{,,title,file name} (file name)
    @ref{,,title,,manual} section `title' in manual
    @ref{,,title, file name, manual} (file name) section `title' in manual
    @ref{,,,file name,manual} (file name) manual
    
    @inforef{,cross ref name } 
    @inforef{,,file name} 
    @inforef{,cross ref name, file name} 
    @inforef{} 
    
    
    

    cp

    Jump to:   "   -   .   ?  
    A   I   T  
    Index Entry Section

    "
    "Top section
    "Top section
    "subsubheading
    "subsubheading

    -
    -optionTop section
    -optionTop section
    -optionsubsubheading
    -optionsubsubheading

    .
    .subsubheading

    ?
    ?subsubheading

    A
    asubsubheading

    I
    index entry between item and itemxTop section
    index entry between item and itemxTop section
    index entry between item and itemxsubsubheading
    index entry between item and itemxsubsubheading
    index entry within deffnTop section
    index entry within deffnTop section
    index entry within deffnsubsubheading
    index entry within deffnsubsubheading
    index entry within itemizeTop section
    index entry within itemizeTop section
    index entry within itemizesubsubheading
    index entry within itemizesubsubheading
    index entry within multitableTop section
    index entry within multitableTop section
    index entry within multitablesubsubheading
    index entry within multitablesubsubheading

    T
    t-rucsubsubheading
    T-rucsubsubheading

    Jump to:   "   -   .   ?  
    A   I   T  

    fn

    Jump to:   "   -   .   ?  
    A   B   D   F   I   L   M   T  
    Index Entry Section

    "
    ``Top section
    ``Top section
    ``subsubheading
    ``subsubheading

    -
    --foptionTop section
    --foptionTop section
    --foptionsubsubheading
    --foptionsubsubheading

    .
    .subsubheading

    ?
    ?subsubheading

    A
    aTop section
    aTop section
    aTop section
    aTop section
    asubsubheading
    asubsubheading
    asubsubheading
    asubsubheading
    asubsubheading
    afterTop section
    afterTop section
    aftersubsubheading
    aftersubsubheading

    B
    bTop section
    bTop section
    bsubsubheading
    bsubsubheading
    bidule machinTop section
    bidule machinTop section
    bidule machinsubsubheading
    bidule machinsubsubheading

    D
    d--effn_nameTop section
    d--effn_nameTop section
    d--effn_namesubsubheading
    d--effn_namesubsubheading
    d--efmac_nameTop section
    d--efmac_nameTop section
    d--efmac_namesubsubheading
    d--efmac_namesubsubheading
    d--efmethod_name on c--lassTop section
    d--efmethod_name on c--lassTop section
    d--efmethod_name on c--lasssubsubheading
    d--efmethod_name on c--lasssubsubheading
    d--efop_name on c--lassTop section
    d--efop_name on c--lassTop section
    d--efop_name on c--lasssubsubheading
    d--efop_name on c--lasssubsubheading
    d--efspec_nameTop section
    d--efspec_nameTop section
    d--efspec_namesubsubheading
    d--efspec_namesubsubheading
    d--eftypefn_nameTop section
    d--eftypefn_nameTop section
    d--eftypefn_namesubsubheading
    d--eftypefn_namesubsubheading
    d--eftypefun_nameTop section
    d--eftypefun_nameTop section
    d--eftypefun_namesubsubheading
    d--eftypefun_namesubsubheading
    d--eftypemethod_name on c--lassTop section
    d--eftypemethod_name on c--lassTop section
    d--eftypemethod_name on c--lasssubsubheading
    d--eftypemethod_name on c--lasssubsubheading
    d--eftypeop_name on c--lassTop section
    d--eftypeop_name on c--lassTop section
    d--eftypeop_name on c--lasssubsubheading
    d--eftypeop_name on c--lasssubsubheading
    d--efun_nameTop section
    d--efun_nameTop section
    d--efun_namesubsubheading
    d--efun_namesubsubheading
    de--ffn_nameTop section
    de--ffn_nameTop section
    de--ffn_namesubsubheading
    de--ffn_namesubsubheading
    deffnTop section
    deffnTop section
    deffnTop section
    deffnTop section
    deffnsubsubheading
    deffnsubsubheading
    deffnsubsubheading
    deffnsubsubheading
    deffnxTop section
    deffnxTop section
    deffnxTop section
    deffnxTop section
    deffnxsubsubheading
    deffnxsubsubheading
    deffnxsubsubheading
    deffnxsubsubheading

    F
    followedTop section
    followedTop section
    followedTop section
    followedTop section
    followedsubsubheading
    followedsubsubheading
    followedsubsubheading
    followedsubsubheading

    I
    iTop section
    iTop section
    iTop section
    iTop section
    isubsubheading
    isubsubheading
    isubsubheading
    isubsubheading
    id `i' uleTop section
    id `i' uleTop section
    id `i' ulesubsubheading
    id `i' ulesubsubheading
    id uleTop section
    id uleTop section
    id ulesubsubheading
    id ulesubsubheading

    L
    log trapTop section
    log trapTop section
    log trapsubsubheading
    log trapsubsubheading
    log trap1Top section
    log trap1Top section
    log trap1subsubheading
    log trap1subsubheading
    log trap2Top section
    log trap2Top section
    log trap2subsubheading
    log trap2subsubheading

    M
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading

    T
    t--rucsubsubheading
    T--rucsubsubheading
    trucTop section
    trucTop section
    trucTop section
    trucTop section
    trucsubsubheading
    trucsubsubheading
    trucsubsubheading
    trucsubsubheading

    Jump to:   "   -   .   ?  
    A   B   D   F   I   L   M   T  

    vr

    Jump to:   A   B   D  
    Index Entry Section

    A
    aTop section
    aTop section
    asubsubheading
    asubsubheading

    B
    bTop section
    bTop section
    bsubsubheading
    bsubsubheading

    D
    d--efcv_nameTop section
    d--efcv_nameTop section
    d--efcv_namesubsubheading
    d--efcv_namesubsubheading
    d--efivar_nameTop section
    d--efivar_nameTop section
    d--efivar_namesubsubheading
    d--efivar_namesubsubheading
    d--efopt_nameTop section
    d--efopt_nameTop section
    d--efopt_namesubsubheading
    d--efopt_namesubsubheading
    d--eftypeivar_name of c--lassTop section
    d--eftypeivar_name of c--lassTop section
    d--eftypeivar_name of c--lasssubsubheading
    d--eftypeivar_name of c--lasssubsubheading
    d--eftypevar_nameTop section
    d--eftypevar_nameTop section
    d--eftypevar_namesubsubheading
    d--eftypevar_namesubsubheading
    d--eftypevr_nameTop section
    d--eftypevr_nameTop section
    d--eftypevr_namesubsubheading
    d--eftypevr_namesubsubheading
    d--efvar_nameTop section
    d--efvar_nameTop section
    d--efvar_namesubsubheading
    d--efvar_namesubsubheading
    d--efvr_nameTop section
    d--efvr_nameTop section
    d--efvr_namesubsubheading
    d--efvr_namesubsubheading

    Jump to:   A   B   D  

    ky

    pg

    tp

    Jump to:   D  
    Index Entry Section

    D
    d--eftp_nameTop section
    d--eftp_nameTop section
    d--eftp_namesubsubheading
    d--eftp_namesubsubheading

    Jump to:   D  

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. chapter

    (5)

     
    * s--ect,ion:: s-ect,ion
    
    Menu comment
    "simple-double-three--four---"
    
    
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 A section

    1.1.1 subsection  

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.1 subsection

    1.1.1.1 subsubsection "simple-double-three--four---"  


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.1.1 subsubsection "simple-double-three--four---"


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. chapter 2

    Jump to:   "   -   .   ?  
    A   I   T  
    Index Entry Section

    "
    "Top section
    "Top section
    "subsubheading
    "subsubheading

    -
    -optionTop section
    -optionTop section
    -optionsubsubheading
    -optionsubsubheading

    .
    .subsubheading

    ?
    ?subsubheading

    A
    asubsubheading

    I
    index entry between item and itemxTop section
    index entry between item and itemxTop section
    index entry between item and itemxsubsubheading
    index entry between item and itemxsubsubheading
    index entry within deffnTop section
    index entry within deffnTop section
    index entry within deffnsubsubheading
    index entry within deffnsubsubheading
    index entry within itemizeTop section
    index entry within itemizeTop section
    index entry within itemizesubsubheading
    index entry within itemizesubsubheading
    index entry within multitableTop section
    index entry within multitableTop section
    index entry within multitablesubsubheading
    index entry within multitablesubsubheading

    T
    t-rucsubsubheading
    T-rucsubsubheading

    Jump to:   "   -   .   ?  
    A   I   T  
    Jump to:   "   -   .   ?  
    A   B   D   F   I   L   M   T  
    Index Entry Section

    "
    ``Top section
    ``Top section
    ``subsubheading
    ``subsubheading

    -
    --foptionTop section
    --foptionTop section
    --foptionsubsubheading
    --foptionsubsubheading

    .
    .subsubheading

    ?
    ?subsubheading

    A
    aTop section
    aTop section
    aTop section
    aTop section
    asubsubheading
    asubsubheading
    asubsubheading
    asubsubheading
    asubsubheading
    afterTop section
    afterTop section
    aftersubsubheading
    aftersubsubheading

    B
    bTop section
    bTop section
    bsubsubheading
    bsubsubheading
    bidule machinTop section
    bidule machinTop section
    bidule machinsubsubheading
    bidule machinsubsubheading

    D
    d--effn_nameTop section
    d--effn_nameTop section
    d--effn_namesubsubheading
    d--effn_namesubsubheading
    d--efmac_nameTop section
    d--efmac_nameTop section
    d--efmac_namesubsubheading
    d--efmac_namesubsubheading
    d--efmethod_name on c--lassTop section
    d--efmethod_name on c--lassTop section
    d--efmethod_name on c--lasssubsubheading
    d--efmethod_name on c--lasssubsubheading
    d--efop_name on c--lassTop section
    d--efop_name on c--lassTop section
    d--efop_name on c--lasssubsubheading
    d--efop_name on c--lasssubsubheading
    d--efspec_nameTop section
    d--efspec_nameTop section
    d--efspec_namesubsubheading
    d--efspec_namesubsubheading
    d--eftypefn_nameTop section
    d--eftypefn_nameTop section
    d--eftypefn_namesubsubheading
    d--eftypefn_namesubsubheading
    d--eftypefun_nameTop section
    d--eftypefun_nameTop section
    d--eftypefun_namesubsubheading
    d--eftypefun_namesubsubheading
    d--eftypemethod_name on c--lassTop section
    d--eftypemethod_name on c--lassTop section
    d--eftypemethod_name on c--lasssubsubheading
    d--eftypemethod_name on c--lasssubsubheading
    d--eftypeop_name on c--lassTop section
    d--eftypeop_name on c--lassTop section
    d--eftypeop_name on c--lasssubsubheading
    d--eftypeop_name on c--lasssubsubheading
    d--efun_nameTop section
    d--efun_nameTop section
    d--efun_namesubsubheading
    d--efun_namesubsubheading
    de--ffn_nameTop section
    de--ffn_nameTop section
    de--ffn_namesubsubheading
    de--ffn_namesubsubheading
    deffnTop section
    deffnTop section
    deffnTop section
    deffnTop section
    deffnsubsubheading
    deffnsubsubheading
    deffnsubsubheading
    deffnsubsubheading
    deffnxTop section
    deffnxTop section
    deffnxTop section
    deffnxTop section
    deffnxsubsubheading
    deffnxsubsubheading
    deffnxsubsubheading
    deffnxsubsubheading

    F
    followedTop section
    followedTop section
    followedTop section
    followedTop section
    followedsubsubheading
    followedsubsubheading
    followedsubsubheading
    followedsubsubheading

    I
    iTop section
    iTop section
    iTop section
    iTop section
    isubsubheading
    isubsubheading
    isubsubheading
    isubsubheading
    id `i' uleTop section
    id `i' uleTop section
    id `i' ulesubsubheading
    id `i' ulesubsubheading
    id uleTop section
    id uleTop section
    id ulesubsubheading
    id ulesubsubheading

    L
    log trapTop section
    log trapTop section
    log trapsubsubheading
    log trapsubsubheading
    log trap1Top section
    log trap1Top section
    log trap1subsubheading
    log trap1subsubheading
    log trap2Top section
    log trap2Top section
    log trap2subsubheading
    log trap2subsubheading

    M
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinTop section
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading
    machinsubsubheading

    T
    t--rucsubsubheading
    T--rucsubsubheading
    trucTop section
    trucTop section
    trucTop section
    trucTop section
    trucsubsubheading
    trucsubsubheading
    trucsubsubheading
    trucsubsubheading

    Jump to:   "   -   .   ?  
    A   B   D   F   I   L   M   T  

    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)

    in footnote

    (2)

    in footnote2

    (1)

    in footnote

    (2)

    in footnote2

    (3)

    in footnote

    (4)

    in footnote2

    (5)

    in footnote


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    Short Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/misc/res/mini_ker_l2h/0000755000175000017500000000000011264347115022301 5ustar flichtenheldflichtenheldtexi2html-1.82/test/misc/res/mini_ker_l2h/mini_ker.html0000644000175000017500000144347711264347115025010 0ustar flichtenheldflichtenheld Miniker 102 manual
    [Top] [Contents] [Index] [ ? ]

    Miniker 102 manual


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Introduction

    Miniker is a modeling tool, built especially in order to implement models written following the TEF (Transfer Evolution Formalism) formalism, a mathematical framework for system analysis and simulation. Miniker allows for timewise simulation, system analysis, adjoint computation, Kalman filtering and more.

    Miniker uses a fortran preprocessor, mortran, designed in the 1970’s, to ease model writing using dedicated specific languages. For example partial derivatives are symbolicaly determined by mortran macros in Miniker. For the selection of another compile-time features, another set of preprocessor directives, the cmz directives, are used. In most cases the user does not need to know anything about that preprocessing that occurs behind the scene, he simply writes down the equations of his model and he is done.

    A comprehensive description of the TEF formalism in available on http://www.lmd.jussieu.fr/ZOOM/doc/tef-GB-partA5.pdf). The Miniker software is a reduced version of ZOOM, that can only handle a hundreds of variables, but is much easier to use.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Intended audience

    The reader should have notions in system dynamics. Moreover a minimal knowledge of programmation and fortran is required. What is required is a basic understanding of variable types, affectation and fortran expressions.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Reading guide

    The first chapter is a brief overview of the TEF. The following describes how to write, compile and run a model in Miniker in its basic and comprehensive syntax. Reading up to the section Controlling the run is required to be able to use Miniker. In this section it is assumed that Miniker is properly setup. The installation instructions are in the appendix at Installation.

    The next chapter describes advanced features, first a general introduction to features settings and then a description of other model description related features.

    The next chapter describes system analysis tools available with Miniker. The sections are independant and each describes how to use a specific feature. If you plan on using these features, you should also read Overview of feature setting.

    A final chapter describes advanced features in a development environment using make,

    In the appendix the instructions for the installation are described (see section Installation).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Other Manuals and documentation

    A programmers’Manual is available (in French), and can be asked for to any member of the collabration. See additional documents in http://www.lmd.jussieu.fr/Zoom/doc or ask for Research texts and articles to members.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. An overview of the TEF formalism

    The TEF (Transfer Evolution Formalism) is based on partitionning and recoupling of model subsystems. It allows the study of the coupling between subsystems by the means of linearization and time discretization.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 Cell and Transfer equations

    In the TEF, a model is mathematically represented by a set of equations corresponding to two kinds objects:

    1. Cells which are elementary models and correspond to evolution equations such as:

      \begin{displaymath}\partial_t \eta (t) = g(\eta(t),\varphi(t))\end{displaymath}

      Vector $\eta$ represent the state variables of cells and the vector $\varphi$ represent the dependent boundary conditions, i.e. the variables considered as boundary conditions by a cell, but depending upon the complete model state. This dependent boundary conditions are required to make the cells correspond to well-posed problems. These variables are often called state variables, and prognostic variables in meteorology.

    2. Transfers which are determined by constraint equations such as:

      \begin{displaymath}
\varphi(t) = f(\eta(t),\varphi(t))
\end{displaymath}

      These equations are often called algebraic equations, and in meteorology diagnostic equations.

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2 Linearization and discretization in the TEF

    The relations between sub-systems is excessively difficult to exhibit when having to cope with non-linear system. In the TEF, the TLS (Tangent Linear System) is constructed along the trajectory. One considers the system over a small portion along the trajectory, say between $t$ and $t + \delta t$. The variation $\delta \eta$ of $\eta$ and $\delta \varphi$ of $\varphi$ is obtained through a Padé approximation of the state-transition matrix. The final form of the algebraic system is closed to the classical Crank-Nicolson scheme:


    \begin{displaymath}\pmatrix{A & B\cr
-C^+ & I-D\cr} \pmatrix{\delta \eta\cr
\delta \varphi\cr} = \pmatrix{\Gamma\cr
\Omega\cr}\end{displaymath}

    The blocks appearing in the Jacobian matrix are constructed with partial derivative of $f$ and $g$, and with $\delta t$. From this system the elimination of $\delta \eta$ leads to another formulation giving the coupling between transfers, and allows for the $\delta \varphi$ computation. The $\delta \varphi$ value is then substitued in $\delta \eta$ to complete the time-step solving process.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. Miniker model programming

    Miniker works by combining the model specification code given by the user and other source files provided in the package. The code is assembled, preprocessed, compiled, linked and the resulting program can be run to produce the model trajectory and dynamic analysis.

    The code provided in the package contains a principal program, some usefull subroutines and pieces of code called sequences combined with the different codes. Among these sequences some hold the code describing the model and are to be written by the user (sequences are similar to Fortran include files).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.1 General structure of the code

    The sequences used to enter model description hold the mathematical formulae for each cell and transfer component, dedicated derived computations, and time-step steering. During the code generation stage, cmz directives are preprocessed, then the user pseudo-Fortran instructions are translated by mortran using macros designed to generate in particular all Fortran instructions that compute the Jacobian matrices used in TEF modelling.

    The sequence ‘zinit’ contains the mathematical formulation of the model (see section Entering model equation and parameters). Another sequence, ‘zsteer’, is merged at the end of the time step advance of the simulation, where the user can monitor the time step values and printing levels, and perform particular computations etc. (see section Executing code at the end of each time step).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2 Miniker programming illustrated

    The general TEF system writes:

    \begin{displaymath}\eqalign{\partial_t \eta (t) &= g(\eta(t),\varphi(t))\cr
\varphi(t) &= f(\eta(t),\varphi(t))\cr
}\end{displaymath}

    To illustrate the model description in Miniker a simple predator-prey model of Lotka-Volterra is used. This model can be written in the following TEF form:


    \begin{displaymath}\left\{\eqalign{\partial_t \eta _{prey} &= a \eta _{prey} - a...
... \eta _{pred} &= -c \eta _{pred} + c \varphi _{meet}\cr}\right.\end{displaymath}


    \begin{displaymath}\varphi _{meet} = \eta _{prey}\eta _{pred}\end{displaymath}

    with two cell equations, i.e. state evolution of the prey and predator groups, and one transfer accounting for the meeting of individuals of different group.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2.1 All you need to know about mortran and cmz directives

    The first stage of code generation consists in cmz directives preprocessing. Cmz directives are used for conditional selection of features, and sequence inclusion. At that point you don’t need to know anything about these directives. They are only usefull if you want to take advantage of advanced features (see section Programming with cmz directives).

    The code in sequences is written in Mortran and the second stage of code generation consists in mortran macro expansion. The mortran language is described in its own manual, here we only explain the very basics which is all you need to know to use Miniker. Mortran basic instructions are almost Fortran, the differences are the following:

    • The code is free-form, and each statement should end with a semi-colon ;.
    • Comments may be introduced by an exclamation mark ! at the beginning of a line, or appear within double quotes " in a single line.
    • It is possible to use blocs, for do or if statement for example, and they are enclosed within brackets ‘<’ and ‘>’. To be in the safe side, a semi-colon ; should be added after a closng bracket >.

    The following fictious code is legal mortran:

     
    real 
      param;
    param = 3.; ff(1) = ff(3)**eta(1);       "a comment"                 
    ! a line comment
    do inode=1,n_node <eta_move(inode)=0.01; eta_speed(inode)=0.0;>;
    

    Thanks to mortran the model code is very simply specified, as you’ll see next.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2.2 Entering model equation and parameters

    The model equation and parameters and some Miniker parameters are entered in the ‘zinit’ sequence. The whole layout of the model is given before detailing the keywords.

     
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Parameters           
    !%%%%%%%%%%%%%%%%%%%%%%
      real apar,bpar;        "optional Fortran type declaration"
    
    ! required parameters
         dt=.01;             "initial time-step"
         nstep=10 000;       "number of iterations along the trajectory"
         time=0.;            "time initialisation "
    
    ! model parameters            
         apar = 1.5;             
         cpar = 0.7;          
                                                      
    ! misceallaneous parameters
         modzprint = 1000;    "printouts frequency" 
    
    print*,'***************************************';
    print*,'Lotka-Volterra model with parameters as:';
    z_pr: apar,bpar;
    print*,'***************************************';
    
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Transfer definition
    !%%%%%%%%%%%%%%%%%%%%%%
    ! rencontre (meeting)
    set_Phi
    < var: ff_interact, fun: f_interact = eta_prey*eta_pred;
    >;
    
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Cell definition
    !%%%%%%%%%%%%%%%%%%%%%%
    
    set_eta
    < var: eta_prey, fun: deta_prey =   apar*eta_prey - apar*ff_interact;
      var: eta_pred, fun: deta_pred = - cpar*eta_pred + cpar*ff_interact;
    >;
    
    
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Initial states
    !%%%%%%%%%%%%%%%%%%%%%%
         eta_prey = 1.;
         eta_pred = 1.;
    ;
        OPEN(50,FILE='title.tex',STATUS='UNKNOWN');   "title file"
        write(50,5000) apar,cpar;                     
    5000;format('Lotka-Volterra par:',2F4.1);
    

    Variables and model parameters

    The following variables are mandatory:

    dt

    The time step.

    time

    Model time initialisation.

    nstep

    Number of iterations along the trajectory.

    There are no other mandatory variables. Some optional variables are used to monitor the printout and ouput of results of the code. As an example, the variable modzprint is used to set the frequency of the printout of the model matrix and vectors during the run (see section Controlling the printout and data output).

    User’s defined variable and Fortran or Mortran instructions can always be added for intermediate calculus. To avoid conflict with the variables of the Miniker code, the rule is that a users symbol must not have characters ‘o’ in the first two symbol characters.

    In the predator-prey example there are two model parameters. The fortran variables are called here apar for $a$ and cpar for $c$. If a Fortan type definition is needed, it should be set at the very beginning of ‘zinit’. The predator-prey code variable initializations finally reads

     
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Parameters         
    !%%%%%%%%%%%%%%%%%%%%%%
      real apar,bpar;        "optional Fortran type declaration"
    
         dt=.01;           
         nstep=10 000;    
         time=0.;            
    
    ! model parameters
         apar = 1.5;           
         cpar = 0.7;                                                            
    
         modzprint = 1000;  
    

    Model equations

    The model equations for cells and model equations for transferts are entered in two mortran blocks, one for the transferts, the other for the cell components. The model equations for cells are entered into a set_eta block, and the transfer equations are entered into a set_phi block.

    In each block the couples variable-function are specified. For transfers the function defines the transfer itself while for cells the function describes the cell evolution. The variable is specified with var:, the function is defined with fun:.

    In the case of the predator-prey model, the transfer variable associated with $\varphi_{meet}$ could be called ff_interact and the transfer definition would be given by:

     
    set_Phi
    < var: ff_interact, fun: f_interact = eta_prey*eta_pred;
    >;
    

    The two cell equations of the predator-prey model, with name eta_prey for the prey ($\eta_{prey}$) and eta_pred for the predator ($\eta_{pred}$) are:

     
    set_eta
    < var: eta_prey, fun: deta_prey =   apar*eta_prey - apar*ff_interact;
      var: eta_pred, fun: deta_pred = - cpar*eta_pred + cpar*ff_interact;
    >;
    

    The ‘;’ at the end of the mortran block is important.

    The whole model equations are setup with:

     
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Transfer definition
    !%%%%%%%%%%%%%%%%%%%%%%
    ! rencontre (meeting)
    set_Phi
    < var: ff_interact, fun: f_interact = eta_prey*eta_pred;
    >;
    
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Cell definition
    !%%%%%%%%%%%%%%%%%%%%%%
    
    set_eta
    < var: eta_prey, fun: deta_prey =   apar*eta_prey - apar*ff_interact;
      var: eta_pred, fun: deta_pred = - cpar*eta_pred + cpar*ff_interact;
    >;
    

    Whenever the user is not concerned with giving a specific name to a function, it is possible to specify the equation only with eqn:. Therefore the user may replace an instruction as:

     
      var: ff_dump,
      fun: f_dump  = - rd*(eta_speed - eta_speed_limiting);
    

    with:

     
       eqn: ff_dump = - rd*(eta_speed - eta_speed_limiting);
    

    In that case, the unnamed function will take the name of the defined variable preceded by the ‘$’ sign: $ff_dump.

    Starting points

    The cells equations require state initial conditions. In some case, the transfers may also need starting points although they are determined from the cell values.

    In the predator-prey model the starting points for cells are:

     
    !     initial state
    !     -------------
         eta_prey = 1.;
         eta_pred = 1.;
    

    When there is a non trivial implicit relationship between the transfers in the model, it may be usefull or even necessary to set some transfers to non-zero values. This difficulty is only relevant for the very first step of the simulation and will be used as a first guess of $\varphi$. The uninitialized transfers having a default compiler-dependant (often zero) value, an initialization to another value may help avoiding singular functions or matrix and ensure convergence in the Newton algorithm used to solve the transfer implicit equation.

    The cell and transfer arrays

    Sometime it is easier to iterate over an array than to use the cell or transfer variable name. This is possible because there is a correspondence between the variable names and the fortran array eta(.) for the cell variables and the fortran array ff(.) for the transfer variables(1).

    The index of the variable is determined by the order of appearance in the variable definition blocks. It is reminded in the output, as explained later (see section Running a simulation and using the output).

    The number of cells is in the integer np variable, and the number of transfer is in the integer mp variable.

    title file

    For some graphics generation, a file with name ‘title.tex’ is required which sets the title. The following instructions take care of that:

     
        OPEN(50,FILE='title.tex',STATUS='UNKNOWN');
        write(50,5000) apar,cpar;                 
    5000;format('Lotka-Volterra par:',2F4.1);
    
        close(50);
    

    In that case the parameter values are written down, to differenciate between different runs. This step is in general not needed.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3 Setting and running a model

    In this section it is assumed that a programming environment has been properly setup. This environment may use either cmz or make to drive the preprocessing and compilation. You can skip the part related with the environment you don’t intend to use.

    For instructions regarding the installation, see Installation.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3.1 Setup a model and compile with cmz

    The user defined sequences are ‘KEEP’ in the cmz world. The most common organization is to have a cmz file in a subdirectory of the directory containing the ‘mini_ker.cmz’ cmz file. In this cmz file there should be a ‘PATCH’ called ‘zinproc’ with the KEEPs within the patch. The KEEP must be called ‘$zinit’.

    From within cmz in the directory of your model the source extraction, compilation and linking will be triggered by a mod command. This macro uses the ‘selseq.kumac’ information to find the ‘mini_ker.cmz’ cmz file. mod shall create a directory with the same name than the cmz file, ‘mymodel/’ in our example. In this directory there is another directory ‘cfs/’ containing the sources extracted from the cmz file.

    The file ‘mymodel_o.tmp’ contains all the mortran code generated by cmz with the sequences substituted, including the ‘$zinit’. The fortran produced by the preprocessing and splitting of this file is in files with the traditional ‘.f’ suffix. The principal program is in ‘principal.f’. An efficient way of getting familiar with mini_ker methods is looking at the ‘mymodel_o.tmp’ where all sequences and main Mortran instructions are gathered. Symbolic derivation is noted as F_D(expression)(/variable), and the resulting Fortran code is in ‘principal.f’.

    mod also triggers compilation and linking. The object files are in the same ‘cfs/’ directory and the executable is in the ‘mymodel/’ directory, with name ‘mymodel.exe’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3.2 Setup a model and compile with make

    With make, the sequences are files ending with ‘.mti’ (for mortran include files), called, for example, ‘zinit.mti’. They are included by mortran in other source files. You also need a ‘Makefile’ to drive the compilation of the model.

    If you don’t need additional code or libraries to be linked with your model you have two alternatives.

    1. The simplest alternative is to run the start_miniker script with the model file name as argument. It should copy a ‘zinit.mti’ file ready to be edited and a Makefile ready to compile the model. For the predator prey model, for example, you could run
       
      $ start_miniker predator
      
    2. Otherwise you can copy the Makefile from ‘template/Makefile’ in the directory containing the sequences. You should then change the compiled model file name, by changing the value of the model_file_name variable to the name of your choice in the Makefile. It is set to ‘mymodel’ in the template. For the predator-prey model, it could be set like
       
      model_file_name = predator
      

      If you want the executable model file to be built in another directory, you could set

       
      model_file_name = some_dir/predator
      

      The other items set in the default Makefile should be right.

    The preprocessing and the compilation are launched with

     
    make all
    

    The mortran files are generated by the cmz directive preprocessor from files found in the package source directories. The mortran files end with ‘.mtn’ for the main files and ‘.mti’ for include files. They are output in the current directory. The mortran preprocessor then preprocess these mortran files and includes the sequences. The resulting fortran code is also in the current directory, in files with a ‘.f’ suffix. Some fortran files ending with ‘.F’ may also be created by the cmz directive preprocessor. The object files resulting from the compilation of all the fortran files (generated from mortran or directly from fortran files) are there too.

    In case you want to override the default sequences or a subroutine file you just have to create it in your working directory along with the ‘zinit.mti’. For example you could want to create or modify a ‘zsteer.mti’ file (see section Executing code at the end of each time step), a ‘zcmd_law.mti’ file (see section Control laws), a ‘monitor.f’ file (see section Turning the model into a subroutine) to take advantage of features presented later in this manual.

    More in-depth discussion of using make to run Miniker is covered in Advanced use of Miniker with make. For example it is also possible to create files that are to be preprocessed by the cmz directive preprocessor and separate source files and generated files. This advanced use is more precisely covered in Programming with cmz directives.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3.3 Running a simulation and using the output

    Once compiled the model is ready to run, it only has to be executed. On standard output informations about the states, transfers, tangent linear system and other jacobian matrices are printed. For example the predator-prey model could be executed with:

     
    ./predator > result.lis
    

    The correspondance between the symbolic variables and the basic vectors and functions are printed at run time:

     
      ---------------- Informing on Phi definition -----------------
        Var-name,           Function-name,       index in ff vector
                 ff_interact              f_interact  1
      ----------------------------------------------------
    
      --------------- Informing on Eta definition ------------------
       Var-name,           Function-name,       index in eta vector
                    eta_prey               deta_prey  1
                    eta_pred               deta_pred  2
    

    A summary of the model equations are in ‘Model.hlp’ file. For the same example:

     
    ======================= set_Phi                                                                
                                                                                             
        1 ff_interact f_interact           eta_pray*eta_pred
    ======================= set_Eta                                                                
                                                                                             
        1 eta_pray    deta_pray            apar*eta_pray-apar*ff_interact
        2 eta_pred    deta_pred            -cpar*eta_pred+cpar*ff_interact
    

    when other general functions are specified with f_set, it can appear also in the same help file when replaced by fun_set.

    As far as possible, all data printed in the listing are associated with a name related to a variable. Here is an extract:

     
     Gamma :-8.19100E-02-1.42151E-01 3.87150E-02
             eta_courant eta_T_czcx  eta_T_sz   
           ------------------------------------------------
     Omega : 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00
             courant_L   T_czcx      Psi_Tczc    Psi_Tsz 
           ------------------------------------------------
    

    for the two known vectors of the system, and:

     
     >ker : Matrice de couplage       4 4 4 4
    courant_L Raw(1,j=1,4):   1.000     -9.9010E-03  0.000       0.000    
    T_czcx    Raw(2,j=1,4): -2.7972E-02   1.000      0.000      9.9900E-04
    Psi_Tczcx Raw(3,j=1,4):  0.1605      9.7359E-02  1.000     -5.7321E-03
    Psi_Tsz   Raw(4,j=1,4):   0.000     -0.1376     5.7225E-03   1.000    
              Var-Name      courant_L   T_czcx      Psi_Tczc    Psi_Tsz 
              ----------------------------------------------------------
    

    where the couplage (coupling matrix) is given that corresponds to the matrix coupling the four transfer components after $\delta \eta$ has been eliminated from system. It is computed in the subprogram ‘oker’ (for kernel) which solves the system.

    Basic results are output in a set of ‘.data’ files. The first line (or two lines) describes the column with a ‘#’ character used to mark the lines as comments (for gnuplot for example). In the ‘.data’ files, the data are simply separated with spaces. Each data file has the time variable values as first column. (2). Following columns give the values of eta(.) in ‘res.data’, dEta(.) in ‘dres.data’ – the step by step variation of eta(.) – and ff(.) in ‘tr.data’.

    Along the simulation the TEF Jacobian matrices are computed. A transfer variables elimination process also leads to the definition of the classical state advance matrix of the system (the corresponding array is aspha(.,.) in the code). This matrix is output in the file ‘aspha.data’ that is used to post-run dynamics analyses. The matrix columns are written column wise on each record. See section Stability analysis of fastest modes. See section Generalized tangent linear system analysis. It is not used in the solving process.

    Other ‘.data’ files will be described later.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3.4 Doing graphics

    Since the data are simply separated with spaces, and comment lines begin with ‘#’, the files can be vizualised with many programs. With gnuplot, for example, to plot eta(n), the gnuplot statement could be:

     
    plot "res.data" using 1:(n+1)
    

    The similar one for ff(n):

     
    plot "tr.data" using 1:(n+1)
    

    For people using PAW, the CERN graphical computer code, Miniker prepares kumacs that allow to read process the ‘.data’ files in the form of n-tuples (see the PAW manual for more information). In that cas, the flag sel paw has to be gievn in the ‘selsequ.kumac’. The generated n-tuples are ready to use only for vector dimension of at most 10 (including the variable time). These kumacs are overwritten each time the model is run. Usaually, gnuplot has to be preferred, but when using surfaces and histograms, PAW is better. The ‘gains.f’ (and ‘go.xqt’ is provided as an example in the Miniker files.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4 Controlling the run

    It is possible to add code that will be executed at the end of each time step. It is also possible to specify which time step leads to a printout on standard output. For maximal control, the code running te model may be turned into a subroutine to be called from another fortran (or C) program, this possibility is covered in Calling the model code.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4.1 Executing code at the end of each time step

    The code in the sequence ‘zsteer’ is executed at the end of each time step. It is possible to change the time step length (variable dt) verify that the non linearity are not too big, or perform discontinuous modifications of the states. One available variable res might be usefull for time step monitoring. At the end of the time step, as soon as $\varphi$ has been computed, a numerical test is applied on a pseudo relative quadratic residual between $\varphi=f(\eta(t-dt)+d\varphi$ ( ffl), where $d\varphi$ is given by the system resolution in ker,and $\varphi=f(\eta),\varphi)$, Fortran variable (ff):

    ! ========================================================
    ! test linearite ffl - ff
    ! ========================================================
    if (istep.gt.1)
    < res=0.; <io=1,m; res = res +(ffl(io)-ff(io))**2/max(one,ff(io)*ff(io)); >;
      if (res .gt. TOL_FFL)
      < print*,'*** pb linearite : res > TOL_FFL a istep',istep,res,' > ',TOL_FFL;
        do io=1,m < z_pr: io,ff(io),ff(io)-ffl(io); >;
      >;
    >;
    

    This test hence applies only for non linearities in tranfer models. Nevertheless, res might be usefull to monitor the time step dt in ZSTEER and eventually go backward one step (goto :ReDoStep:). This can more appropriatly be coded in the (empty in default case) sequence zstep, inserted just before time-advancing states and time variables in ‘principal’.

    It is also possible to fix the value of the criterium TOL_FFL in ‘zinit’ different from its default value of $10^{-3}$ – independent of the Fortran precision.

    Many other variables are available, including

    istep

    The step number;

    couplage(.)

    The TEF coupling matrix between transfers;

    H

    The Jacobian matrix corresponding with:

    \begin{displaymath}\partial_{\eta} g(\eta(t),\varphi(t));
\end{displaymath}

    Bb

    The Jacobian matrix corresponding with:

    \begin{displaymath}\partial_{\varphi} g(\eta(t),\varphi(t));
\end{displaymath}

    Bt

    The Jacobian matrix corresponding with:

    \begin{displaymath}\partial_{\eta} f(\eta(t),\varphi(t));
\end{displaymath}

    D

    The Jacobian matrix corresponding with:

    \begin{displaymath}\partial_{\varphi} f(\eta(t),\varphi(t));
\end{displaymath}

    aspha

    The state advance matrix;

    dneta
    dphi

    the variable increments;

    One should be aware of that the linearity test concerns the preceding step. We have yet no example of managing the time-step.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4.2 Controlling the printout and data output

    The printout on standard output is performed if the variable zprint of type logical is true. Therefore it is possible to control this printout by setting zprint false or true. For example the following code, in sequence ‘zsteer’, triggers printing for every modzprint time step and the two following time steps:

     
    ZPRINT = mod(istep+1,modzprint).eq.0;
    Zprint = zprint .or. mod(istep+1,modzprint).eq.1;
    Zprint = zprint .or. mod(istep+1,modzprint).eq.2;
    

    The data output to ‘.data’ files described in Running a simulation and using the output is performed if the logical variable zout is true. For example the following code, in ‘zsteer’, triggers output to ‘.data’ files every modzout step.

     
    Zout = mod(istep,modzout).eq.0;
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. Advanced Miniker programming


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.1 Overview of additional features setting

    It is possible to enable some features by selecting which code should be part of the principal program. Each of these optionnal features are associated with a select flag. For example double precision is used instead of simple precision with the ‘double’ select flag, the model is a subroutine with the select flag ‘monitor’, the Kalman filter code is set with ‘kalman’ and the 1D gridded model capabilities are associated with ‘grid1d’. To select a given feature the cmz statement sel select_flag should be written down in the ‘selseq.kumac’ found in the model directory. With make either the corresponding variable should be set to 1 or it should be added to the SEL make variable, depending on the feature.

    Other features don’t need different or additional code to be used. Most of the features are enabled by setting specific logical variables to ‘.true.’. This is the case for zback for the adjoint model, zcommand if the command is in a file and zlaw if it is a function and zkalman for the Kalman filter. These select and logical flags are described in the corresponding sections.

    In cmz an alternative of writing select flags to ‘selseq.kumac’ is to drive the compilation with smod sel_flag. In that case the sel_flag is selected and the files and executable goes to a directory named ‘sel_flag’.

    The select flags are taken into account during cmz directives preprocessing. Therefore you have the possibility to use these flags to conditionnaly include pieces of code. In most cases you don’t need to include code conditionally yourself though, but if you want to, this is covered in Programming with cmz directives.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.2 Calling the model code

    When the model code is a subroutine, it can be called from another fortran program unit (or another program), and the model will be run each time the subroutine is called. This technique could be used, for example to perform optimization (see section Adjoint model and optimisation with Miniker), or to run the model with different parameters.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.2.1 Turning the model into a subroutine

    With cmz, one has to do a

     
    sel monitor
    

    in the ‘selseq.kumac’ file and create the KEEP that call the model code. See section Overview of additional features setting.

    With make ‘monitor’ should be added to the SEL variable in the ‘Makefile’, for example:

     
    SEL = monitor
    

    A file that call the principal subroutine should also be written, using the prefered language of the user. The additional object files should then be linked with the Miniker objects. To that aim they may be added to the miniker_user_objects variable.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.2.2 Calling the model subroutine

    The model subroutine is called ‘principal’ and is called with the following arguments:

    Subroutine: principal (Cost, ncall, integer_flag, file_suffix, info, idxerror)

    Where Cost is a real number, real or double precision, and is set by the principal subroutine. It holds the value of the cost function if such function has been defined (the use and setting of a cost function is covered later, see Cost function coding and adjoint modeling). ncall is an integer which corresponds with the number of call to principal done so far, it should be initialized to 0 and its value should not be changed, as it is changed in the principal subroutine. integer_flag is an integer that can be set by the user to be accessed in the principal subroutine. For example its value could be used to set some flags in the ‘zinit’ sequence. file_suffix is a character string, that is suffixed to the output files names instead of ‘.data’. If the first character is the null character ‘char(0)’, the default suffix, ‘.data’ is appended. info and idxerror are integer used for error reporting. idxerror value is 0 if there was no error. It is negative for an alert, positive for a very serious error. The precise value determines where the error occured. info is an integer holding more precise information about the error. It is usually the information value from lapack. The precise meaning of these error codes is in tab:error_codes.

    Source of error or warninginfoidxerror
    state matrix inversion in kerinversion1
    time advance system resolution in kersystem2
    transfer propagator, $(I-D)$ inversioninversion3
    kalman analysis state matrix advance in phase space, $(I-D)$ inversioninversion21
    kalman analysis variance covariance matrix non positiveCholeski22
    kalman analysis error matrix inversioninversion23
    kalman error matrix advancesystem24
    transfers determination linearity problem for transfers-1
    transerts determination Newton D_loop does not converge-2

    table 3.1: Meaning of error codes returned by principal.

    In general more information than the provided arguments has to be passed to the principal subroutine, in that case a common block, to be written in the ‘zinit’ sequence can be used.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.3 Describing 1D gridded model

    Specific macros have been built that allow generic description of 1D gridded models. Because of the necessity of defining left and right limiting conditions, the models are partitionned in three groups for cell and transfer components. In the following example, a chain of masselottes linked by springs and dumps is bounded to a wall on the left, and open at right. The TEF formulation of the problem is written in the phase space (position-shift, velocity) for node $k$, with bounding conditions:

    \begin{displaymath}\left\{\eqalign{\partial_t \eta _{k} ^{pos} &= \eta _{k} ^{ve...
... + \varphi _{k} ^{dmp}-\varphi _{k+1} ^{dmp})\,/m_k \cr}\right.\end{displaymath}


    \begin{displaymath}\left\{\eqalign{
\varphi_k ^{spr} &= -k_k (\eta _{k} ^{pos}- ...
...spr} &= -d_k (\eta _{k} ^{vel}- \eta _{k-1} ^{vel})
\cr}\right.\end{displaymath}


    \begin{displaymath}\left\{\eqalign{\eta ^{pos}_{0} &= 0\cr
\eta ^{vel}_{0} &= 0\...
...arphi ^{spr}_{N+1} &= 0\cr
\varphi ^{dmp}_{N+1} &= 0\cr}\right.\end{displaymath}

    where $m_k$ is the mass of node $k$, $r_k$ and $d_k$ the rigidity of springs and dumping coefficients. There are $N$ nodes in the grid, from 1 to $N$, and two nodes outside of the grid, a limiting node 0, and a limiting node $N+1$. The limiting node corresponding with node 0 is called the down node, while the limiting node corresponding with node $N+1$ is called the up node. Other models not part of the 1D grid may be added if any.

    To enable 1D gridded models, one should set the select flag ‘grid1d’. In cmz it is achieved setting the select flag in ‘selseq.kumac’, like

     
    sel grid1d
    

    With make, the SEL variable should contain grid1d. For example to select grid1d and monitor, it could be

     
    SEL = grid1d,monitor
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.3.1 Setting dimensions for 1D gridded model

    In that case the number of nodes, the number of states and tranferts per node, and the number of limiting transfers and states are required. These dimensions has to be entered in the ‘DimEtaPhi’ sequence. The parameters for cells are

    n_node

    Number of cell nodes in the 1D grid.

    n_dwn

    Number of limiting cells with index -1, i.e. number of cells in the limiting down node.

    n_up

    Number of limiting cells with index +1, i.e. number of cells in the limiting up node.

    n_mult

    Number of cells in each node (multiplicity).

    The parameters for transfers, are similarly m_node, m_dwn, m_up, m_mult. The layout of their declaration should be respected as the precompiler matches the line. Also this procedure is tedious, it should be selected for debuging processes (use the flag sel dimetaphi in “selsequ.kumac”. Otherwise, the dimensioning sequence will be automaticaly generated, which is smart but can lead to diffculty in interpreting syntax errors. Once a model is correctly entred, turn off the sel flag and further modifications will automatically generate the proper dimensions. The correctness of dimensionning should nevertheless always be checked in principal.f, where you can also check that null valued parameters as lp, mobs, nxp will suppress parts of the code - this is signaled as Fortran comment cards.

    In our example, there are three grids of cell and transfer variables (n_node=m_node=3). There are two cells and two transfers in each node (n_mult=2 and m_mult=2). There is no limiting condition for the states in the down node therefore n_up=0. There is no transfer for the first limiting node, and therefore m_dwn=0. There are two states in the limiting node 0, the down node, n_dwn=2, and two transfers in the limiting last node the node up, and m_up=2:

     
    ! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    ! nodes parameters, and Limiting Conditions (Low and High)
    ! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
          parameter (n_node=3,n_dwn=2,n_up=0,n_mult=2);
          parameter (m_node=3,m_dwn=0,m_up=2,m_mult=2);
    ! ________________________________________________________
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.3.2 1D gridded Model coding

    The model code and parameters go in the ‘zinit’ sequence.

    Parameters

    A value for the Miniker parameters and the model parameters should be given in ‘zinit’, in our example we have

     
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Parameters
    !%%%%%%%%%%%%%%%%%%%%%%
    real rk(n_node),rd(n_node),rmassm1(n_node);
    
    data rk/n_node*1./;
    data rd/n_node*0.1/;
    data rmassm1/n_node*1./;
         dt=.01;
         nstep=5 000;
         modzprint = 1000;
         time=0.;
    

    Limiting conditions

    There are four mortran blocks for node and up and down, both for states and transfers:

    set_dwn_eta

    down node cells

    set_up_eta

    up node cells

    set_dwn_phi

    down node transfers

    set_up_phi

    up node transfers

    The following scheme illustrates the example:

     
    !%%%%%%%%%%%%%%%%%%%%%%%%%%================================================
    ! Maillage convention inode
    !%%%%%%%%%%%%%%%%%%%%%%%%%%                                 Open ended
    !(2 Down    Phi    Eta                         (n_node)
    ! Eta)  \|       .-----.       .-----.          .-----.        /
    ! wall  \|-\/\/\-|     |-\/\/\-|     |  . . .  -|     |-\/\/\- |dummy
    !  pos  \|--***--|  1  |--***--|  2  |  . . .  -|  n  |--***-- |Phis
    ! speed \|   1   |_____|   2   |_____|      n   |_____|  n+1   \(2 Up Phi)
    !
    

    Two states are associated with the down node, they correspond to the position and speed of the wall. As the wall don’t move these states are initialized to be 0, and the cells are stationnary cells, therefore these values remain 0.

     
    ! Down cells (wall)
    ! -----------------
    eta_pos_wall = 0; eta_speed_wall = 0.;
    
    set_dwn_eta
    < var: eta_pos_wall,  fun: deta_pos_wall  = 0.;
      var: eta_speed_wall, fun: deta_speed_wall= 0.;
    >;
    

    There are 2 limiting transfers in the up node. They correspond with an open end and are therefore set to 0.

     
    ! limiting Transfers : dummy ones
    ! -------------------------------
    set_Up_Phi
    < var:ff_dummy_1, fun: f_dummy_1=0.;
      var:ff_dummy_2, fun: f_dummy_2=0.;
    >;
    

    Starting points

    The cell node state values are initialized. They are in an array indexed by the inode variable. In the example the variable corresponding with position is eta_move and the variable corresponding with speed is eta_speed. Their initial values are set with the following mortran code

     
    !---------------
    ! Initialisation
    !---------------
    ;
    do inode=1,n_node <eta_move(inode)=0.01; eta_speed(inode)=0.0;>;
    

    If any transfer needs to be given a first-guess value, this is also done using inode as the node index.

    Grid node equations

    Each node is associated with an index inode. It allows to refer to the preceding node, with inode-1 and the following node inode+1. The node states are declared in set_node_Eta block and the transfers are in set_node_Phi blocks.

    In the example, the cells are declared with

     
    ! node cells
    ! ----------
    ;
    set_node_Eta
    < var: eta_move(inode),  fun: deta_move(inode) = eta_speed(inode);
      var: eta_speed(inode),
      fun: deta_speed(inode) = rmassm1(inode)
                                 *( - ff_spring(inode+1) + ff_spring(inode)
                                   - ff_dump(inode+1)  + ff_dump(inode)
                                  );
    >;
    

    Note that the inode is dummy in the var: definition and can as well be written as: var: eta_move(.).

    The transfers are (ff_spring corresponds with springs and ff_dump with dumps):

     
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Transfer definition
    !%%%%%%%%%%%%%%%%%%%%%%
    ! node transfers
    ! --------------
    ! convention de signe spring : comprime:= +
    set_node_Phi
    < var: ff_spring(.),
      fun:
       f_spring(inode)= -rk(inode)*(eta_move(inode) - eta_move(inode-1));
      var: ff_dump(.),
      fun:
       f_dump(inode)  = -rd(inode)*(eta_speed(inode) - eta_speed(inode-1));
    >;
    

    The limiting states and transfers are associated with the states or transfers with index inode+1 or inode-1 appearing in node cell and transfer equations (inode-1 for down limiting conditions and inode+1 for up limiting conditions) in their order of appearance. In our example, in the eta_speed state node equation ff_spring(inode+1) appears before ff_dump(inode+1) and is therefore associated with ff_dummy_1 while ff_dump(inode+1) is associated with the ff_dummy_2 limiting transfer, as ff_dummy_1 appears before ff_dummy_2 in the limiting up transfers definitions. Verification of the grid index coherence should be eased with the following help printed in the listing header:

     
    
    
    
      --------------- Informing on Dwn Eta definition ---------------
     Var-name,            Function-name, index in eta vector
             eta_pos_wall        deta_pos_wall  1 [
           eta_speed_wall      deta_speed_wall  2 [
    
      -------------- Informing on Eta Nodes definition --------------
     Var-name,     Function, k2index of (inode: 0 [ 1,...n_node ] n_node+1)
                eta_move           deta_move    1 [   3 ...   7 ]   9
               eta_speed          deta_speed    2 [   4 ...   8 ]  10
    
      ---------------- Informing on Up  Phi  definition -------------
     Var-name,             Function-name, index in ff vector
              ff_dummy_1           f_dummy_1 ]    7
              ff_dummy_2           f_dummy_2 ]    8
             ff_move_sum          f_move_sum ]    9
            ff_speed_sum         f_speed_sum ]   10
      ----------------------------------------------------
    
     -------------- Informing on Phi Nodes definition ---------------
     Var-name,     Function, k2index of (inode: 0 [ 1,...m_node ] m_node+1)
               ff_spring            f_spring   -1 [   1 ...   5 ]   7
                 ff_dump              f_dump    0 [   2 ...   6 ]   8
      ----------------------------------------------------
    

    All variable names and functions are free but has to be different. Any particular node-attached variable $k$ is referred to as: ‘(inode:k)’, where $k$ has to be a Fortran expression allowed in arguments. The symbol ‘inode’ is reserved. As usual other Fortran instructions can be written within the Mortran block ‘< >’ of each set_ block.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.4 Double precision

    The default for real variables is the real Fortran type. It is possible to use double precision instead. In that case all the occurences of ‘real ’ in mortran code is substituted with ‘double precision ’ at precompilation stage, and the Lapack subroutine names are replaced by the double precision names. Eventual users’declaration of complex  Fortran variables is also changed to double complex .

    This feature is turned on by sel double in ‘selseq.kumac’ with cmz and double = 1 in the ‘Makefile’ with make.

    In order for the model to run as well in double as in simple precision, some care should be taken to use the generic intrinsic functions, like sin and not dsin. No numerical constant should be passed directly to subroutines or functions, but instead a variable with the right type should be used to hold the constant value, taking advantage of the implicit casts to the variable type.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.5 Partial Derivatives

    The partial derivative rules are included in a Mortran macro series in ‘Derive_mac’ of Miniker files. When using an anusual function, one should verify that the corersponding rules are in that file. It is easy to understand and add new rules in analogy with the already existing ones.

    For instance, suppose one wants to use the intrinsic Fortran function abs(). Its derivatives uses the other function sign() this way:

     
     &'(ABS(#))(/#)' = '((#1)(/#2)*SIGN(1.,#1))'
    

    In such cases when one is adding a new rule, it is important to use the generic function names only (i.e. sin not dsin), because when compilating Miniker in the double precision version, or complex version, the generic names will correctly handle the different variable types - which is not the case when coding with specific function names.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.5.1 Derivating a power function

    Partial derivative of a function in exponent is not secure in its Fortran form g(x,y)**(f(y)). It should be replaced by power(g,f) of the Miniker ‘mathlib’, or by the explicit form exp(f(y)*log(g(x,y))).

    Its derivative will have the following form:


    \begin{displaymath}\eqalign{\partial_x f^g &= g f^{g-1}\partial_x f + f^g \log f\partial_x g\cr
&= f^{g-1}(g\partial_x f + f\partial_x g)\cr}\end{displaymath}

    and is in the macros list already defined in: ‘DERIVE_MAC’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.6 Rule of programming non continuous models

    Some models may originally be non continuous, as the ones using a Fortran instruction IF. Some may use implicitly a step function on a variable. In such cases, the model has to be set in a derivable form, and use a “smooth step” instead. One should be aware of that this apparently mathematical treatment currently indeed leads to a physical question about the macroscopic form of a physical law. At a macroscipic level, a step function is usually a nonsense. Taking the example of phase-change, a fluid volume does not change phase at once, and a “smooth change of state” is a correct macroscopic model.

    Miniker provides with the smooth step function Heavyside(3) in the Miniker ‘mathlib’:

     
            Delta = -1."K";
            A_Ice =  heavyside("in:" (T_K-Tf), Delta, "out:" dAIce_dT);
    

    in this example, Tf is the ice fusion-temperature, A_ice gives the ice-fraction of the mesh-volume of water at temperature T_k. The smooth-step function is a quasi hyperbolic tangent function of $x/\Delta$, normalised from 0 to 1, with a maximum slope of 2.5, see figure heavy.

    heavyside

    Figure 3.1: Heaviside function and derivative

    For Mortran to be able to symbolicaly compute the partial derivarives, the rule is in the table of macros as:

     
    &'(HEAVYSIDE(#,#,#))(/#)' = '((#1)(/#4)*HEAVYDELTA(#1,#2,#3))'
    

    which uses the Foratn entry point HeavyDelta in the Fortrsan function heavyside.

    Another type of problem arises when coding a var=min(f(x),g(x)) Fortran instruction. In such a case one does not want a derivative and one will code:

     
    var = HeavySide(f(x)-g(x),Delta,dum)*g(x) + (1.-HeavySide(f(x)-g(x),Delta,dum)*f(x);
    

    or equivalently:

     
    var = HeavySide(f(x)-g(x),Delta,dum)*g(x) + HeavySide(g(x)-f(x),-Delta,dum)*f(x);
    

    Warning: the value of the argument Delta is important because it will fix the maximum slope of the function that will appear as a coefficient in the Jacbian matrices.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.7 Parameters

    It is possible to specify some Fortran variables as specific model parameters. Model parameters may be used in sensitivity studies (see section Sensitivity to a parameter) and in the adjoint model (see section Sensitivity of cost function to parameters). Nothing special is done with parameters with Kalman filtering.

    The parameters are fortran variables that should be initialized somewhere in ‘zinit’. For a variable to be considered as a parameter, it should be passed as an argument to the Free_parameters macro. For example if apar and cpar (from the predator example) are to be considered as parameters, Free_parameters should be called with:

     
    Free_parameter: apar, cpar;
    

    When used with grid1d models (see section Describing 1D gridded model) the inode number may appear in parenthesis:

     
    Free_parameter: rd(1), rk(2);
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.8 Observations and data

    Some support for observations and interactions with data is available. The observations are functions of the model variables. They don’t have any action on the model result, but they may (in theory) be observed and measured. The natural use of these observations is to be compared with data that correspond with the values from real measurements. They are used in the Kalman filter (see section Kalman filter).

    The (model) observation vector is noted $\omega$ and the observation function is noted $h$:


    \begin{displaymath}
\omega = h ( \eta , \varphi)
\end{displaymath}


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.8.1 Observations

    The observation functions are set in a set_probe block in the ‘zinit’ sequence.

    For example suppose that, in the predator-prey model, we only have access to the total population of preys and predators, we would have:

     
    set_probe
    < eqn: pop = eta_pred + eta_pray;
    >;
    

    The number of observations is put in the integer variable mobs. The observation vector corresponds with the part of the ff(.) array situated past the regular transferts, ff(mp+.), and is output in the file ‘obs.data’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.8.2 Data

    Currently this code is only used if the Kalman code is activated. This may be changed in the future.

    The convention for data is that whenever some data are available, the logical variable zgetobs should be set to ‘.true.’. And the vobs(.) vector should be filled with the data values. This vector has the same dimension than the observation vector and each coordinate is meant to correspond with one coordinate of the observation vector.

    This feature is turned on by setting the logical variable zdata to ‘.true.’, and the zgetobs flag is typically set in the ‘zsteer’ sequence (see section Executing code at the end of each time step). Every instant data are available (zgetobs is true) the observations are written to the file ‘data.data’. With the Kalman filter more informations are output to the ‘data.data’ file, see Kalman filter results.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.9 Entering model size explicitely

    It is possible to enter the model dimensions explicitely, instead of generating them automatically, as it was done previously. This feature is turned on by sel dimetaphi in ‘selseq.kumac’ with cmz and dimetaphi added to the SEL variable in the ‘Makefile’ with make.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.9.1 The explicit size sequence

    The dimension of the model is entered in the sequence ‘dimetaphi’, using the fortran parameter np for eta(.) and mp for ff(.). For the Lotka-Volterra model, we have two cell components and only one transfer.

     
    parameter (np=2,mp=1);
    

    You should not change the layout of the parameter statement as the mortran preprocessor matches the line.

    You also have to provide other parameters even if you don’t have any use for them. If you don’t it will trigger fortran errors. It includes the maxstep parameter that can have any value but 0, lp and mobs that should be 0 in the example, and nxp, nyp and nzp that should also be 0. The layout is the following:

     
    parameter (np=2,mp=1);
    parameter (mobs=0);
    
    parameter (nxp=0,nyp=0,nzp=0);
    parameter (lp=0);
    parameter (maxstep=1);
    

    If there are observations, (see section Observations), the size of the observation vector is set in the ‘dimetaphi’ sequence by the mobs parameter. For example if there is one observation:

     
    parameter (mobs=1);
    

    To specify parameters (see section Parameters), the number of such parameters has to be declared in ‘dimetaphi’ with the parameter lp. Then, if there are two parameters, they are first declared with

     
    parameter (lp=2);
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.9.2 Entering the model equations, with explicit sizes

    When sizes are explicit, another possibility exists for entering the model equations. The use of symbolic names, as described in Model equations is still possible, and it also becomes possible to set directly the equations associated with the eta(.) and ff(.) vectors.

    In case the symbolic names are not used, the model equations for cells and transfers are entered using a mortran macro, f_set(4), setting the eta(.) evolution with deta_tef(.) and the transfer definitions ff(.) with Phi_tef(.).

    Macro: f_set Phi_tef(i) = f(eta(.),ff(.))

    This macro defines the transfer i static equation. f is a fortran expression which may be function of cell state variables, ‘eta(1)’…‘eta(np)’ and transfers ‘ff(1)’…‘ff(mp)’.

    In the case of the predator-prey model, the transfer definition for $\varphi_{meet}$ is:

     
    f_set Phi_tef(1) = eta(1)*eta(2);  
    
    Macro: f_set deta_tef(i) = g(eta(i),ff(.))

    This macro defines the cell state component i time evolution model. g is a expression which may be function of cell state variables, ‘eta(1)’…‘eta(np)’ and transfers ‘ff(1)’…‘ff(mp)’.

    The two cell equations of the predator-prey model are, with index 1 for the prey ($\eta_{prey}$) and index 2 for the predator ($\eta_{pred}$):

     
    f_set  deta_tef(1) = apar*eta(1)-apar*ff(1);
    f_set  deta_tef(2) = - cpar*eta(2) + cpar*ff(1);
    

    The whole model is:

     
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Transfer definition
    !%%%%%%%%%%%%%%%%%%%%%%
    ! rencontres (meeting)
        f_set Phi_tef(1) = eta(1)*eta(2); 
    
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Cell definition
    !%%%%%%%%%%%%%%%%%%%%%%
    ! eta(1) : prey
    ! eta(2) : predator      
    
        f_set  deta_tef(1) = apar*eta(1)-apar*ff(1);
        f_set  deta_tef(2) = - cpar*eta(2) + cpar*ff(1);
    

    The starting points for cells are entered like:

     
    !     initial state
    !     -------------
         eta(1) = 1.;
         eta(2) = 1.;
    

    If there are observations, they are entered as special transferts with index above mp, for example:

     
    f_set Phi_tef(mp+1) = ff(1) ;
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.10 Programming with cmz directives


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.10.1 Cmz directives used with Miniker

    The main feature of cmz directive is to use code conditionnaly for a given select flag. For example when the double precision is selected (see section Double precision) the use of the conditionnal double flag may be required in case there is a different subroutine name for different types. If, for example, the user use the subroutine smysub for simple precision and dmysub for double precision the following code is an example of what could appear in the user code:

    +IF,double
     call dmysub(eta);
    +ELSE
     call smysub(eta);
    +ENDIF
    

    For a complete reference on cmz directives see the appendix Cmz directives reference.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.10.2 Using cmz directives in Miniker

    In cmz the KEEP and DECK have their cmz directives preprocessed as part of the source files extraction. And the +KEEP and +DECK directives are automatically set when creating the KEEP or DECK. With make, files with these directives has to be created within the files that are to be preprocessed by the cmz directives preprocessor.

    To be processed by make, a file that contains cmz directives should have a file suffix corresponding with the language of the resulting file and with the normal file suffix of that language. More precisely ‘cm’ should be added before the normal file suffix and after the ‘.’. Therefore if the resulting file language is associated with a suffix ‘.suf’, the file with cmz directives should have a ‘.cmsuf’ suffix. The tradition is to have a different suffix for main files and include files. To add directories searched for cmfiles (files with cmz directives) they should be added to the CMFDIRS makefile variable, separated by ‘:’.

    Rules for preprocessing of the files are defined in the file ‘Makefile.miniker’ for the file types described in tab:cmfile_suffix:

    languagefile typecmfile suffixsuffixlanguage
    fortranmain/deck.cmf.fftn
    fortran preprocessedmain/deck.cmF.Ff77
    fortran preprocessedinclude/keep.cminc.incf77
    mortranmain/deck.cmmtn.mtnmtn
    mortraninclude/keep.cmmti.mtimtn

    table 3.2: Association between file language, file type, file suffixes and language identifier in cmz directives. A main file is called a deck in cmz and an include file is called a keep.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4. Dynamic analysis of systems in Miniker


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.1 Automatic sensitivity computation

    An obvious advantage of having acces to the Jacobian matrices along the system trajectory concerns automatic sensitivity analyses, as either:

    • the sensitivity of all variables to perturbation in the initial condition of one state variable;
    • the same sensitivities to an initial pulse (or step) on a transfer;
    • the same sensitivities to a series of pulses (or steps) on a transfer;
    • the same for a change in a parameter, eventually during the run;
    • the sensitivity of the matrix of advance in state space to a change in a parameter.

    This is declared in Zinit as:

     
    ! -------------
    ! Sensitivities
    ! -------------
    Sensy_to_var
    < var: eta_pray, pert: INIT;
      var: eta_pred, pert: INIT;
    >;
    

    Each variable at origin of a perturbation is declared as var:, and the type of perturbation in pert:. Here, INIT conditions are only allowed because the two variables are states variables. For transfers, pert: pulse corresponds to an initial pulse, pert: step_resp and pert: step_eff to initial steps, the difference between _resp (response form) and _eff (effect form) concerns the diagonal only of the sensitivity matrix (see Feedback gains in non-linear models).

    Non initial perturbation can also be asked for:

     
      Sensy_to_var
      <
    !*     var: eta_courant_L, pert: init at 100;
    !*     var: ff_T_czcx,     pert: pulse at 100 every 20;
    !*     var: ff_Psi_Tczcx,  pert: step_eff;
    !*     var: ff_Psi_Tczcx,  pert: step_Resp at 10 every 100;
    ! *** premiers tests identiques a lorhcl.ref
        var: ff_courant_L , pert: step_eff;
        var: ff_T_czcx    , pert: step_eff;
        var: ff_Psi_Tczcx , pert: step_eff;
        var: ff_Psi_Tsz   , pert: pulse at 100 every 50;
      >;
    

    In this example taken from ‘lorhcl’, a sensitivity can increase so as to trespass the Fortran capacity, so that each sensitivity vector (matrix column) can be reset at some time-increment at III every JJJ;

    It is noteworthy that these sensitivity analyses are not based on difference between two runs with different initial states or parameter values, but on the formal derivatives of the model. This method is not only numerically robust, but is also rigorously funded as based on the TLS of the model(5).

    If the dimetaphi sequence is built by the users, he should declare the number of perturbing variables as nxp=:

     
          parameter (nxp=np,nyp=0,nzp=0);
    

    here, all state variables are considered as perturbing variables.

    The sensitivity vectors are output in the result files ‘sens.data’ for cells and ‘sigma.data’ for transfers. In those files the first column corresponds again with time, and the other columns are relative sensitivities of the cell states (in ‘sens.data’) and transfers (in ‘sigma.data’) with respect to the initial value of the perturbed state.

    In our predator-prey example, the second column of ‘sens.data’ will contain the derivative of $\eta_1(t)$ with respect to $\eta_1(t=0)$. Drawing the second column of ‘sens.data’ against the first one gives the time evolution of the sensitivity of eta-pred to a change in the initial value of eta-pray. One can check in that it is set to 1 at $t=0$:

     
    #    Sensy_to: eta_pray         3        eta_pred         5       
    # time \\  of: eta_pray     eta_pred     eta_pray     eta_pred    
      0.00000E+00  1.00000E+00  0.00000E+00  0.00000E+00  1.00000E+00
      1.00000E-02  9.90868E-01  1.11905E-02 -1.26414E-02  9.98859E-01
    

    The two last columns are the state sensitivity to a change in initial conditions of the number of predators.

    In the same way, the j+1th column of ‘sigma.data’ will be the derivative of $\phi_{j}(t)$ with respect to $\eta_i(t=0)$. Here:

     
    #    Sensy_to: eta_pray     eta_pred    
    # time \\  of: ff_interact  ff_interact 
      0.00000E+00  1.60683E+00  8.47076E-01
      1.00000E-02  1.59980E+00  8.18164E-01
    

    the unique transfer variable gives rise to two sensitivity columns.

    Sensitivity studies are usefull to assess the predictability properties of the corresponding system.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.1.1 Sensitivity to a parameter

    A forward sensitivity to a parameter will be computed when specified as described in Parameters. For example, suppose that the sensitivity to an initial change in the apar parameter of the predator model is of interest.

    The sensitivity calculs is turned on as a forward parameter specified on the Free_parameter list:

     
    Free_parameter: [fwd: apar, cpar];
    

    The result are in ‘sensp.data’ for cells and ‘sigmap.data’ for transfers.

     
    #    Sensy_to: pi_prandtl       3            4        pi_rayleigh_     6
    # time \\  of: eta_courant_ eta_T_czcx   eta_T_sz     eta_courant_ eta_T
      0.00000E+00  0.00000E+00  0.00000E+00  0.00000E+00  0.00000E+00  0.000
      2.00000E-03 -4.77172E-03 -3.99170E-05  3.55971E-05 -9.94770E-05 -1.004
    

    In the above example from ‘lorhcl’ sensitivity of the three states with respect to an initial change in two parameters are independantly given (first line also numbers the column to easy gnuplot using).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.1.2 Advance matrix sensitivity

    It is possible to look at the sensitivity of the matrix of advance in states space (the matrix aspha) with regard to a parameter. The parameter must be accounted for in the parameter number and be in the parameter list, flagged as the matrix mx parameter, like in

     
    Free_parameter: [mx: apar], cpar;
    

    This feature is associated with a selecting flag, ‘dPi_aspha’. One gets the result in the matrix d_pi_aspha(.,.) of dimension (np,np).

    This matrix may be used to compute other quantities, for example it may be used to compute the sensitivity of the eigenvalues of the state-advance matrix with regard to the [fwd] parameter. These additional computations have to be programmed by the user in ‘zsteer’ with matrices declared and initialized in ‘zinit’. An example is given in the example ‘lorhcl’ provided with the Miniker installation files, following a method proposed by Stephane Blanco.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.2 Adjoint model and optimisation with Miniker

    In the following a possible use of Miniker for optimisation is discussed. More precisely the use of adjoint and control laws in Miniker are presented. Optimisation isn’t the only application of these tools, but it is the most common one. In that case the adjoint may be used to determine the gradient of a functional to perturbations in the control laws, and an optimisation process can use this information to search for the optimum. Another application of the adjoint is to compute the sensitivity of a cost function to parameters (the ones declared in the free_parameters:’ list. Note that the cost function can be sensitive to probe’s variables, even if these are uncoupled with standard variables in the forward calculations; this is the case when minimizing a quadratic distance function between probes (from the model) and the corresponding measurements.

    The code is close transcription of the mathematical calculus described in
    http://www.lmd.jussieu.fr/ZOOM/doc/Adjoint.pdf . It essentialy reverse time and transpose the four Jacobian matrices: states and transfers are saved in array dimensionned with maxstep Fortran parameter.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.2.1 Overview of optimisation with Miniker

    In the proposed method, Miniker is run twice, one time forward and then backward to determine the trajectory and the adjoint model. After that the control laws are modified by a program external to Miniker. The same steps are repeated until convergence. More pecisely,

    forward

    The command law $h(t)$ is given (by an explicit law or taken from a file). The trajectory is computed in a classical way, with the additionnal computation of the functional to be optimised, $J$, prescribed with specific f_set macros. The states, transfers and control laws are stored.

    backward

    The adjoint variable is computed from the last time $T$ backward. The time increment is re-read as it could have changed during the forward simulation. The system is solved by using the same technics as in the forward simulation, but with a negative time step.

    external phase

    Now the command should be corrected. This step isn’t covered here, but, for example, minuit the optimisation tool from the CERN could be used. In order to ease such a use of Miniker, the principal program has to be compiled as a subroutine to be driven by an external program (see section Calling the model code).

    The functionnal $J$ to be optimised is defined as


    \begin{displaymath}
J = \psi[\eta(T),\varphi(T) ,h(T)] + \int_0 ^T {l[\eta(\tau),\varphi(\tau),h(\tau)]}\, d\tau
\end{displaymath}

    Where $\psi$ is the final cost function, $l$ is the integrand cost function and $h$ represents the control laws variations.

    The general use of the adjoint model of a system is the determination of the gradient of this $J$ functional to be optimised, with respect to perturbations of the original conditions of the reference trajectory, that is, along its GTLS(6).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.2.2 Control laws

    Each control law is associated with one cell or transfer equation, meaning that a command associated with an equation does not appear in any other equation. It is still possible to add commands acting anywhere by defining a transfer equal to that command.

    The control laws associated with states are in the ux_com(.) array, control laws associated with transfers are in the uy_com(.) array. The control laws may be prescribed even when there is no adjoint computed, nor any optimisation, and they are used during simulation, in which case they will act as external sources. To enable the use of commands, the logical flag Zcommand should be .true..

    The command can be given either as:

    1. a table of numerical values in the files ‘uxcom.data’ and ‘uycom.data’.
    2. a function of the problem variables. To turn that feature on the logical flag Zlaw should be set to .true. in ‘zinit’. The sequence ‘zcmd_law’ should hold the code filling the ux_com(.) and uy_com(.) arrays, as the code from that sequence is used whenever the control laws are needed. In that case the files ‘uxcom.data’ and ‘uycom.data’ will be filled by the command values generated by the function along the trajectory.

    For example in the Lotka-Volterra model, the parameter apar could be a control variable. In that case, apar would be defined as the variable ux_com(1), and either entered as a law in the sequence ‘zcmd_law’ , either written in the file ‘uxcom.data’ step by step. In that case, there must be a perfect corresponodence between time of the commands and time of the run.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.2.3 Cost function coding and adjoint modeling

    First of all the flag zback should be set to .true. in order to allow adjoint model computation:

     
    Zback=.true.;
    

    The two functions cout_Psi corresponding with the final cost and cout_l corresponding with the integrand cost are set up with the f_set macros.

    Macro: f_set cout_Psi = f(eta(.),ff(.),ux_com(.),uy_com(.))

    This macro defines the final cost function. f is a fortran expression which may be function of cell state variables, ‘eta(1)’…‘eta(np)’, transfers ‘ff(1)’…‘ff(mp)’, state control laws ‘ux_com(1)’…‘ux_com(np)’, and transfer control laws ‘uy_com(1)’…‘uy_com(mp)’.

    Macro: f_set cout_l = f(eta(.),ff(.),ux_com(.),uy_com(.))

    This macro defines the integrand cost function. f is a fortran expression which may be function of cell state variables, ‘eta(1)’…‘eta(np)’, transfers ‘ff(1)’…‘ff(mp)’, state control laws ‘ux_com(1)’…‘ux_com(np)’, and transfer control laws ‘uy_com(1)’…‘uy_com(mp)’.

    For example, the following code sets a cost function for the masselottes model:

     
    ! Initialisation 
      F_set cout_Psi = eta_move(inode:1);
    !and f_set cout_l integrand in the functionnal    
      F_set cout_l = 0.;
    

    In that example the functional is reduced to the final value of the first state component. Here, the adjoint vector will correspond to the final sensitivity (at $t=0$) of that component (here the first masselotte position) to a perturbation in all initial conditions(7).

    The following variables are set during the backward phase, and output in the associated files:

    varfileexplanation
    v_adj(.)vadj.dataadjoint to eta(.)
    w_adj(.)wadj.dataadjoint to ff(.)
    wadj(mp+.)gradmuj.dataadjoint to ff(mp+.)
    graduej(.)gradxj.dataadjoint to ux_com(.)
    gradufj(.)gradyj.dataadjoint to uy_com(.)
    hamiltonhamilton.datatime increment, hamiltonian, cost function increment

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.2.4 Sensitivity of cost function to parameters

    The sensitivity of the cost function to all the parameters given as arguments of Free_parameters is computed. For the predator model the sensitivity of a cost function consisting in the integral of the predator population with respect with apar an cpar is obtained with a number of parameters set to 2 in ‘dimetaphi’:

     
    parameter (lp=2);
    

    And the cost function and Free_parameters list in ‘zinit’:

     
    f_set cout_Psi = eta(2);
    f_set cout_l = eta(2);
    Free_parameters: apar,cpar;
    

    apar and cpar also have to be given a value. The result is output in ‘gradpj.data’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3 Kalman filter

    The Kalman filter allows for data assimilation along the model run. In that case it is assumed that there is a real-world model with stochastic perturbations on the states, and that noisy observations are available. The situation implemented in Miniker corresponds to a continuous stochastic perturbation on the state, and discrete noisy observations. In the TEF this leads to:


    \begin{displaymath}\eqalign{
\partial_t \eta (t) &= g(\eta(t),\varphi(t)) + W(t)...
...varphi(t))\cr
\omega(t) &= h ( \eta(t) , \varphi(t)) + \nu\cr
}\end{displaymath}

    The observations $\omega$ are available at discrete time steps $t=s_i$. The stochastic perturbation on state, $\mu$ is characterized by a variance-covariance matrix $Q$ and the noise on the observation, $\nu$ has a variance-covariance matrix $R$. $W$ relates states with stochastic perturbations. At each time step the Kalman filter recomputes an estimation of the state and the variance-covariance matrix of the state.

    In the following we use the example of a linear model with perturbation on state and observation of state. The model has 3 states and 3 corresponding transfers (equal to the states), but the error on the state is of dimension 2. The 3 states are observed. The corresponding equations read:


    \begin{displaymath}\left\{\eqalign{
\partial_t \eta_1 &= a_{11} \eta_1 + a_{12} ...
...varphi_2 + a_{33} \eta_3 + W_{31} \mu_1 + W_{32} \mu_2
}\right.\end{displaymath}


    \begin{displaymath}\left\{\eqalign{
\varphi _1 &= \eta _1\cr
\varphi _2 &= \eta _2\cr
\varphi _3 &= \eta _3
}\right.\end{displaymath}


    \begin{displaymath}\left\{\eqalign{
\omega _1 &= \varphi _1 + \nu_1\cr
\omega _2 &= \eta _2 + \nu_2 \cr
\omega _3 &= \eta _3 + \nu_3
}\right.\end{displaymath}


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3.1 Coding the Kalman filter

    First of all the Kalman filter code should be activated. The observations code is also required (see section Observations). If cmz is used the code should be selected with the select flag kalman in the ‘selseq.kumac’:

     
    sel kalman
    

    With make the kalman variable should be set to 1:

     
    kalman = 1
    

    The kalman code is actually used by setting the flag zkalman to .true., for example in the ‘zinit’:

     
    zkalman = .True.;
    

    With the Kalman filter the dimension of estimated states, of the error on the state and of the observation, the $W$ matrix, the observation function, the initial variance-covariance matrices on the state and the variance-covariance matrices of errors have to be given.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3.1.1 Kalman filter vectors dimensions

    These dimensions should be set in the ‘zinit’ sequence. The size of the estimated states is given by the parameter nkp. You can set this to np if all the states are estimated, but in case there are some deterministic state variables, nkp may be less than np. In that case the first nkp elements of eta(.) will be estimated using the Kalman filter.

    The error on state dimension is associated with the parameter nerrp and the size of the observations vector is mobs (see section Observations). In our example the dimensions are set with:

     
    parameter (nkp=np);
    parameter (mobs=3);
    parameter (nerrp=2);
    

    All the states are estimated, there are 3 observation functions and the error on the state vector is of dimension 2.

    If the sizes are set explicitely, the parameters should be set in ‘dimetaphi’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3.1.2 Error and observation matrices

    Initial variance-covariance matrix on the state

    The variance-covariance on the state matrix is covfor(.,.). The initial values have to be given for this matrix, as in our example:

     
    covfor(1,1) = 1000.; covfor(1,2) = 10.; covfor(1,3) = 10.;
    covfor(2,1) = 10.; covfor(2,2) = 5000.; covfor(2,3) = 5.;
    covfor(3,1) = 10.; covfor(3,2) = 5.; covfor(3,3) = 2000.;
    

    This matrix is updated by the filter at each time step because the states are pertubated by some noise, and when assimilation takes place as new information reduce the error.

    Observations and error on state matrix

    The matrix that relates errors on states vector components to states, corresponding with $W$ is mereta(.,.). In our example it is set by:

     
    mereta(1,1) = 1.;  mereta(1,2) = 0.;
    mereta(2,1) = 0.;  mereta(2,2) = 1.;
    mereta(3,1) = 0.5;  mereta(3,2) = 0.5;
    

    The observation functions are set by a f_set macro with Obs_tef(.) as described in Observations. In our example the observation functions are set by:

     
    f_set Obs_tef(1) = ff(1) ;
    f_set Obs_tef(2) = eta(2);
    f_set Obs_tef(3) = eta(3);
    

    Error variance-covariance matrices

    The variance-covariance matrix on observation noise is covobs(.,.) set, in our example, by:

     
    covobs(1,1) = 0.3; covobs(1,2) = 0.; covobs(1,3) = 0.;
    covobs(2,1) = 0.; covobs(2,2) = 0.1; covobs(2,3) = 0.;
    covobs(3,1) = 0.; covobs(3,2) = 0.; covobs(3,3) = 0.2;
    

    The variance-covariance matrix on state noise is coveta(.,.) set, in our example, by:

     
    coveta(1,1) = 0.2; coveta(1,2) = 0.001;
    coveta(2,1) = 0.001; coveta(2,2) = 0.1;
    

    These matrices are not changed during the run of the model as part of the filtering process. They may be changed by the user in ‘zsteer’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3.2 Kalman filter run and output


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3.2.1 Feeding the observations to the model

    The observations must be made available to the model during the run. These observations are set in the vobs(.) array, and the assimilation (also called the analysis step of the filter) takes place if the logical variable zgetobs is .true. (see section Data).

    These steps are typically performed in the ‘zsteer’ sequence. In this sequence there should be some code such that when there are data ready to be assimilated, zgetobs is set to .true. and the data is stored in vobs(.), ready for the next step processing.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3.2.2 Kalman filter results

    The estimated states and transfers are still in the same ‘.data’ files, ‘res.data’ and ‘tr.data’ and there is the additional file with observations, called ‘obs.data’ (see section Observations). Each time zgetobs is .true. the data, and the optimally weighted innovations are output in the file associated with data, ‘data.data’ (see section Data).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3.3 Executing code after the analysis

    The analysis takes place before the time step advance when zgetobs is .true.. It may be usefull to add some code after the analysis and before the time step advance. For example the analysis may lead to absurd values for some states or parameters, it could be usefull to correct them in that case. The sequence included after the analysis is called ‘kalsteer’. At this point, in addition to the usual variables the following variables could be usefull:

    etafor(.)

    The state before the analysis.

    kgain(.)

    The Kalman gain.

    innobs(.)

    The innovation vector (observations coherent with the states minus data values).

    covana(.,.)

    The variance-covariance error matrix after the analysis.

    At each time step the derivative of the observation function with respect to transfer and cells variables are recomputed. The elimination of transfers is also performed to get the partial derivative of the observation function of the equivalent model, with states only, with respect to the states. In other words, the Kalman filter does not follow the TEF formalism, because the advance of the var-covar matrix could not yet be set in the TEF form.

    obspha(.,.)

    derivative of observation function in state space with respect to cell variables.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.4 Feedback gain

    The feedback dynamic gain associated with a feedback loop can be expressed as the inverse Borel transform of the coefficient of the reduced scalar coupling matrix, $g(\tau)$, associated with a transfer. A Borel sweep provides this $g(\tau)$. Therefore it is an interesting tool for the characterization of the feedback loop(8).

    As explained in the ZOOM web page document http://www.lmd.jussieu.fr/ZOOM/doc/Feedback_Gain.pdf, this allows for the calculation of the dynamic gain and factor of any feedback that goes through a unique transfer variable. An example of the conclusions that can be drawn from such an analysis is provided in the same document.

    For linear systems – whose GTLS are autonomous along the whole trajectory – the $\tau$ function of the feedback gain is independent of the position on the system trajectory. But in general it is dependant, and one can analyse the function $g(\tau;t)$ defined on a segment $t$ of the trajectory.

    The document introducing the TEF-ZOOM technique explains how a Crank-Nicolson scheme for the time discretisation symbolically gives the solution of the Borel transform of the system. One can identify the dt variable with the Borel $\tau$ within a factor $2$. Hence, to numerically study the $\tau$ dependency of the transform of various coefficients in the system coupling matrix at one point in time, one can calculate the Borel transform of the TLS solutions by making a time-step sweep.

    The function $g(\tau;t)$ is simply output for the feedback gain attached to a unique ff(k) transfer variable. All the relevant informations should be entered in the ‘zinit’ sequence.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.4.1 Specifying the Borel sweep

    First of all the logical flag ZBorel should be raised:

     
    ZBorel=.true.;
    

    The index of the studied transfer is given in the index_ff_gain variable

     
    index_ff_gain=7;
    

    At each time step a Borel sweep may be performed. The time steps of interest are specified with three variables, one for the first step, one for the last step and one for the number of steps between two Borel sweeps:

    istep_B_deb

    First time step for the Borel sweep.

    istep_B_fin

    Last time step for the Borel sweep.

    istep_B_inc

    Number of time steps between Borel sweeps.

    In the following examples Borel sweeps are performed from the time step 1000 up to the time step 1200, with a sweep at each time step:

     
    istep_B_deb=1000;   
    istep_B_fin=1200;  
    istep_B_inc=1;      
    

    For each Borel sweep, the range of the $\tau$ variable should be set. As this is a multiplicative variable the initial value, a multiplicative factor and the number of values are to be given.

    tau_B_ini

    Initial value for $\tau$.

    tau_B_mult

    Multiplicative factor for sweep in $\tau$.

    itau_max

    Number of $\tau$ values.

    For example, in the following, at each time step, the Borel transform will be computed for $\tau$ values starting at $0.2$ and then multiplied a hundred times by $\sqrt{\sqrt{2}}$

     
    tau_B_ini=0.2;    
    tau_B_mult=sqrt(sqrt(2.)); 
    itau_max=100;             
    

    When the initial value of $\tau$ is set to a negative value (i.e. tau_B_ini=-0.2;), the Borel sweep will first be applied with itau_max negative values for -0.2, tau_B_mult*(-0.2),..., then for the zero value, and finally for the symetric positive values, resulting in 2*itau_max+1 values for $\tau$.

    The whole example reads

     
    ! -------------------
    ! Feedback gain
    ! Borel
    ! -------------------
    ZBorel=.true.;
    if ZBorel           
    <  istep_B_deb=1000; 
       istep_B_fin=1200;
       istep_B_inc=1;  
    ;
       index_ff_gain=7; 
       tau_B_ini=0.2;    
       tau_B_mult=sqrt(sqrt(2.)); 
       itau_max=100;             
       z_pr/Borel/:tau_B_mult,tau_B_ini*(tau_B_mult)**itau_max;
    >;
    

    Instead of using the index of the transfer in index_ff_gain it is possible to specify the name of the transfer.In that case the transfer is specified by the zborel for macro. For example if the transfer selected for the feedback gain computation is b_transfer, it can be selected with:

     
    zborel for: b_transfer;
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.4.2 Borel sweep results

    The file ‘tau_Borel.data’ gives the $\tau$ values of the tau sweep, and the file ‘gains.data’ records the feedback gain function values of $g(\tau)$, with one line for each sweep along the trajectory. In the 1.01 version, a new feature is also provided giving the poles and residuals of the Borel transform in the file ‘vpgains.data’. Consult the subroutine Boreleig for (not definitive) output description.

    One can easily obtain the surface contours of $g(t,\tau)$ using the Fortran program provided as ‘gains.f’ and its compilation shell ‘gains.xqt’, that builds 2D histograms for PAW, in which one uses the ‘borels.kumac’ provided kumac.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.5 Stability analysis of fastest modes

    The preceding analyses are done along with a simulation. One has also the possibility of using in a more classical fashion the state advance matrix $A_{st}$, after the end of the simulation. Code to perform the SVD (Singular Value Decomposition) of the state matrix $A_{st}$ and also of $A_{st} + A_{st}^\dagger$ is provided with Miniker. The singular elements of these two matrices correspond to the most rapid modes of instability of the perturbed system.

    The Singular value decomposition of a matrix is noted


    \begin{displaymath}
U w V^\dagger
\end{displaymath}

    An executable file, ‘sltc.exe’ is generated and running this file will produce the corresponding results.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.5.1 Singular Value Decomposition with cmz

    The cmz macro smod SLTC prepares a main program (‘circul’ of +PATCH SLTC), provided as a base for user’s own analysis, in the directory ‘sltc/’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.5.2 Singular Value Decomposition with make

    To compile the singular value decomposition executable with make you can do

     
    make sltc.exe
    

    If you want to have a separate directory for the SVD, you should copy the sequence ‘dimetaphi.inc’ (or make a link to that file) to the directory. You should also copy the file ‘Makefile.sltc’ from the ‘template/’ directory in this directory, rename it ‘Makefile’ and set the Miniker directory path in the miniker_dir variable. For example, if the Miniker directory is in ‘/u/src/mini_ker’:

     
    miniker_dir = /u/src/mini_ker
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.5.3 Singular Value Decomposition run and output

    As it is, the ‘sltc.exe’ executable generated by the compilation determines the SVD. This program requires ‘title.tex’ (see Title file) to transmit a title for output and graphics, and ‘aspha.data’ (see section Running a simulation and using the output) to access the state matrix. To get access to these files (in case they are not in the current directory) it is possible to make a link to the corresponding files in the model directory. Once it is done the program may be run:

     
    ./sltc.exe
    

    The files ‘u.data’, ‘w.data’, and ‘v.data’ holds the singular elements for $A_{st}$ ($U$, $w$ and $V$), and ‘us.data’, ‘ws.data’, and ‘vs.data’ holds the singular elements of $A_{st} + A_{st}^\dagger$. The corresponding macros ‘.kumac’ for PAW(9) are also generated.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.6 Generalized linear tangent system analysis

    The state matrix $A_{st}$ may also be used to compute the GTLS propagator (or state transition matrix applied to perturbation), after the simulation. The algorithm is a finite product of 5th order development of $\Phi(t+\delta t,t)=\exp{A_{st} \delta t}$. Numerous element of analysis are given, in particular the determination of the Lyapunov exponents of the system.

    An executable file, ‘sltcirc.exe’ is generated and running this file will produce the corresponding results.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.6.1 Generalized tangent linear system with cmz

    The cmz macro smod SLTCIRC prepares a main program (‘circule’ of +PATCH SLTCIRC), in the directory ‘sltcirc/’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.6.2 Generalized tangent linear system with make

    To compile the GTLS analysis executable with make you can do

     
    make sltcirc.exe
    

    If you want to have a separate directory for the GTLS analysis, you should copy the sequence ‘dimetaphi.inc’ (or make a link to that file) to the directory. You should also copy the file ‘Makefile.sltcirc’ from the ‘template/’ directory in this directory and rename it ‘Makefile’ and set the Miniker directory path in the miniker_dir variable.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.6.3 Generalized tangent linear system analysis run and output

    The ‘sltcirc.exe’ executable generated by the compilation computes the elements of analysis of the system. This program requires ‘title.tex’ to transmit a title for output and graphics (see Title file), ‘aspha.data’ to access the state matrix and ‘dres.data’, because time-step can be changed along the simulation (see section Running a simulation and using the output) (10). To get access to these files (in case they are not in the current directory) it is possible to make a link to the corresponding files in the model directory. Once it is done the program may be run:

     
    ./sltcirc.exe
    

    The following table gives the correspondence between variable name, result file and ntuple number, with a short explanation:

    varfilentupleexplanation
    p(.,.)phit.data55propagator from 0 to $t$, $\Phi(t,0)$
    up(.,.)uphit.data50Left singular vectors $U$ in the SVD of $\Phi$
    wp(.)wphit.data51singulat values $w$ in the SVD of $\Phi$
    vp(.,.)vphit.data52Right Singular Vectors $V$ in the SVD of $\Phi$
    wr(.)wr.data53real part of eigen values of $\Phi(t,0)$
    wi(.)wi.data54imaginary part of eigen values of $\Phi(t,0)$
    lwp(.)lwphit.data67Lyapunov exponents

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5. Advanced use of Miniker with make


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.1 Make variables

    The ‘Makefile.miniker’ Makefile provided in the distribution should be included as it defines a lot of important variables and rules.

    The following make variables can be set by the user:

    miniker_dir

    that variable should hold the Miniker sources directory. If you installed Miniker that variable should be set to ‘$(includedir)/mini_ker’. If you use the sources right from the sources directory it should be set to the sources package directory.

    MTNDIRS

    This variable can hold a ‘:’ delimited list of directories that will be searched for mortran include files.

    CMFDIRS

    This variable can hold a ‘:’ delimited list of directories that will be searched for cmz directive include files.

    SEL

    This variable holds a ‘,’ delimited list of select flags, for example monitor, grid1d, debug.

    LDADD

    This variable can be used to add libraries flags and files. It is used in the default linking command/rule.

    miniker_user_objects

    This variable should hold a space separated list of additional object files to be linked with the model and helper object files.

    CAR2TXTFLAGS

    cmz directives preprocessor flag.

    kalman

    This variable should be set to 1 if you want to use the kalman filter (see section Kalman filter).

    double

    This variable should be set to 1 if you want to have a double precision code (see section Double precision).

    The following variables are allready set and may be used (some are set by ./configure see Configuration):

    miniker_principal_objects

    The list of object files needed for the model build, together with some helper object files often used but not strictly required for the linking.

    DEPDIR

    The name of a hidden directory containing the dependencies computed for the main mortran files.

    F77
    FC
    FFLAGS
    LDFLAGS

    Compiler and linker related variables set by ./configure.

    LIBS

    This variable should hold the link flags and files required to build Miniker, set by ./configure.

    CAR2TXT
    MORTRAN
    MTNFLAGS
    MTNDEPEND

    Preprocessor and preprocessor flags, set by ./configure.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.2 Rules

    The following rules are defined in the ‘Makefile.miniker’ file.

    miniker-clean

    remove the fortran files generated from the mortran files. Remove the object files.

    miniker-mtn-clean

    remove the mortran files generated from the files with cmz directives.

    Various rules to preprocess files with cmz directives and mortran files and to compile fortran files.

    If the user needs a mortran main file, he may take advantage of the rule used to compute the dependencies of a mortran file. If the file is called, say, ‘mtnfile.mtn’ leading to ‘mtnfile.f’, the following include should lead to the automatic creation, updating and inclusion of a file describing the dependencies of ‘mtnfile.mtn’ in the ‘Makefile’:

     
    include $(DEPDIR)/mtnfile.Pf
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.3 Linking rule

    The rule used for the linking of the model file is not in the ‘Makefile.miniker’ file but should be provided in the user ‘Makefile’ for more flexibility. The default rule uses the variables miniker_user_objects for additional object files and LDADD for additionnal linking flags and files, those variables are there to be changed by the user.

    The object files required by the Miniker code are in the make variable miniker_principal_objects, this variable is also used. The value of the variables FC for the Fortran compiler, FFLAGS for the Fortran compiler flags and LDFLAGS for the linker flags should be set to right values; LIBS should also be right and hold the link flags and link files required to compile the Miniker model. These variables are set by by ./configure during configuration (see section Configuration) and used in the default rule:

    $(model_file): $(miniker_user_objects) $(miniker_principal_objects)
    	$(FC) $(FFLAGS) $(LDFLAGS) $^ $(LDADD) $(LIBS) -o $@
    

    In case this isn’t right it may be freely changed. You should certainly refer to the (make)Top section ‘Top’ in GNU Make Manual manual to understand what that rule exactly means and make your own.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Concepts index

    Jump to:   $  
    A   B   C   D   E   F   G   H   I   K   L   M   O   P   R   S   T   U   V   Z  
    Index Entry Section

    $
    $dimetaphi2.3.1 Setup a model and compile with cmz
    $zinit2.3.1 Setup a model and compile with cmz

    A
    adjoint4.2.1 Overview of optimisation with Miniker
    aspha.data2.3.3 Running a simulation and using the output
    aspha.data’, GTLS4.6.3 Generalized tangent linear system analysis run and output
    aspha.data’, SVD4.5.3 Singular Value Decomposition run and output

    B
    Borel sweep4.4 Feedback gain
    Borel sweep graphics4.4.2 Borel sweep results
    Borel sweep results4.4.2 Borel sweep results

    C
    cellsIntroduction
    cernlibA.2 Common requisites
    command law4.2.2 Control laws
    compilation2.3.2 Setup a model and compile with make
    configuration of sourceA.4.2 Configuration
    controlling the run2.4 Controlling the run

    D
    data.data3.8.2 Data
    data.data4.3.2.2 Kalman filter results
    dimetaphi3.9.1 The explicit size sequence
    dimetaphi3.9.1 The explicit size sequence
    dimetaphi’, Kalman filter4.3.1.1 Kalman filter vectors dimensions
    down node3.3 Describing 1D gridded model
    dres.data2.3.3 Running a simulation and using the output
    dres.data
    dres.data’, GTLS4.6.3 Generalized tangent linear system analysis run and output

    E
    equations, gridGrid node equations
    error vector dimension4.3.1.1 Kalman filter vectors dimensions

    F
    FDL, GNU Free Documentation LicenseC.1 GNU Free Documentation License
    feature setting3.1 Overview of additional features setting
    Feedback gain4.4 Feedback gain
    ffl (linearity test)2.4.1 Executing code at the end of each time step
    final cost4.2.1 Overview of optimisation with Miniker

    G
    Generalized linear tangent system4.6 Generalized linear tangent system analysis
    gradpj.data4.2.4 Sensitivity of cost function to parameters
    graphics2.3.4 Doing graphics
    graphics with gnuplot2.3.4 Doing graphics
    graphics with PAW2.3.4 Doing graphics
    graphics, Borel sweep4.4.2 Borel sweep results
    GTLS4.6 Generalized linear tangent system analysis
    GTLS output4.6.3 Generalized tangent linear system analysis run and output
    GTLS run4.6.3 Generalized tangent linear system analysis run and output

    H
    Heaviside function3.6 Rule of programming non continuous models

    I
    initial variance-covariance on statesInitial variance-covariance matrix on the state
    installation with makeA.4.3 Installation with make
    integrand cost4.2.1 Overview of optimisation with Miniker

    K
    Kalman filter4.3 Kalman filter
    Kalman filter output4.3.2.2 Kalman filter results
    Kalman filter results4.3.2.2 Kalman filter results

    L
    lapackA.2 Common requisites
    limiting conditionsLimiting conditions
    linearity test2.4.1 Executing code at the end of each time step
    logical flags3.1 Overview of additional features setting
    Lyapunov exponents4.6 Generalized linear tangent system analysis

    M
    Makefile.miniker5.1 Make variables
    Makefile.sltc4.5.2 Singular Value Decomposition with make
    Makefile.sltcirc4.6.2 Generalized tangent linear system with make
    mini_ker.cmzA.3 Miniker with cmz
    mod2.3.1 Setup a model and compile with cmz
    model equations3.9.2 Entering the model equations, with explicit sizes
    model size3.9.1 The explicit size sequence
    Model.hlp2.3.3 Running a simulation and using the output
    mortranIntroduction
    mortran2.2.1 All you need to know about mortran and cmz directives
    mortran, with makeA.4.1 Additional requirements for Miniker with make

    O
    obs.data3.8.1 Observations
    observation function3.8.1 Observations
    observations4.3.1.2 Error and observation matrices
    observations, general4.3 Kalman filter
    optimisation4.2.1 Overview of optimisation with Miniker
    output file2.3.3 Running a simulation and using the output
    output, GTLS4.6.3 Generalized tangent linear system analysis run and output
    output, Kalman filter4.3.2.2 Kalman filter results
    output, sensitivity4.1 Automatic sensitivity computation
    output, SVD4.5.3 Singular Value Decomposition run and output

    P
    printing2.4.2 Controlling the printout and data output
    Programming environmentsA.1 Programming environments
    propagator4.6 Generalized linear tangent system analysis

    R
    requirements, with makeA.4.1 Additional requirements for Miniker with make
    res.data2.3.3 Running a simulation and using the output
    results, Borel sweep4.4.2 Borel sweep results
    results, Kalman filter4.3.2.2 Kalman filter results
    run, GTLS4.6.3 Generalized tangent linear system analysis run and output
    run, SVD4.5.3 Singular Value Decomposition run and output
    running model2.3.3 Running a simulation and using the output

    S
    select flag3.1 Overview of additional features setting
    selseq.kumac3.1 Overview of additional features setting
    selseq.kumacA.3 Miniker with cmz
    sens.data4.1 Automatic sensitivity computation
    sensitivities4.1 Automatic sensitivity computation
    sensitivity, output4.1 Automatic sensitivity computation
    sequence2.1 General structure of the code
    sequences2. Miniker model programming
    sigma.data4.1 Automatic sensitivity computation
    Singular Value Decomposition4.5 Stability analysis of fastest modes
    sltc.exe4.5 Stability analysis of fastest modes
    sltc.exe4.5.3 Singular Value Decomposition run and output
    sltcirc.exe4.6 Generalized linear tangent system analysis
    sltcirc.exe4.6.3 Generalized tangent linear system analysis run and output
    smod4.5.1 Singular Value Decomposition with cmz
    smod4.6.1 Generalized tangent linear system with cmz
    starting pointStarting points
    state matrix4.5 Stability analysis of fastest modes
    SVD4.5 Stability analysis of fastest modes
    SVD output4.5.3 Singular Value Decomposition run and output
    SVD run4.5.3 Singular Value Decomposition run and output

    T
    TEFIntroduction
    TEF2.2 Miniker programming illustrated
    title filetitle file
    title.textitle file
    title.tex’, GTLS4.6.3 Generalized tangent linear system analysis run and output
    title.tex’, SVD4.5.3 Singular Value Decomposition run and output
    tr.data2.3.3 Running a simulation and using the output
    transfersIntroduction

    U
    up node3.3 Describing 1D gridded model
    uxcom.data4.2.2 Control laws
    uycom.data4.2.2 Control laws

    V
    variance-covariance errorError variance-covariance matrices
    variance-covariance matrices4.3.1.2 Error and observation matrices
    variance-covariance matrices, general4.3 Kalman filter
    variance-covariance matrix on stateObservations and error on state matrix

    Z
    zcmd_law4.2.2 Control laws
    zcmd_law.inc4.2.2 Control laws
    zinit2.2.2 Entering model equation and parameters
    zinit, general2.1 General structure of the code
    zinit’, Kalman filter4.3.1.2 Error and observation matrices
    zinit.mti2.3.2 Setup a model and compile with make
    ZOOMIntroduction
    zsteer2.4.1 Executing code at the end of each time step
    zsteer’, Kalman filter4.3.2.1 Feeding the observations to the model
    zsteer.inc2.4.1 Executing code at the end of each time step

    Jump to:   $  
    A   B   C   D   E   F   G   H   I   K   L   M   O   P   R   S   T   U   V   Z  

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Variables, macros and functions index

    Jump to:   A   B   C   D   E   F   H   I   K   M   N   O   P   S   T   V   Z  
    Index Entry Section

    A
    aspha2.4.1 Executing code at the end of each time step

    B
    Bb2.4.1 Executing code at the end of each time step
    Bt2.4.1 Executing code at the end of each time step

    C
    couplage(.)2.4.1 Executing code at the end of each time step
    cout_l4.2.3 Cost function coding and adjoint modeling
    cout_Psi4.2.3 Cost function coding and adjoint modeling
    covana(.,.)4.3.3 Executing code after the analysis
    coveta(.,.)Error variance-covariance matrices
    covfor(.,.)Initial variance-covariance matrix on the state
    covobs(.,.)Error variance-covariance matrices

    D
    D2.4.1 Executing code at the end of each time step
    dEta(.)2.3.3 Running a simulation and using the output
    deta_tef(.)3.9.2 Entering the model equations, with explicit sizes
    dneta2.4.1 Executing code at the end of each time step
    dphi2.4.1 Executing code at the end of each time step
    dt2.2.2 Entering model equation and parameters
    dt
    d_pi_aspha(.,.)4.1.2 Advance matrix sensitivity

    E
    eqn:Model equations
    eta(.)The cell and transfer arrays
    eta(.), explicit sizes3.9.2 Entering the model equations, with explicit sizes
    etafor(.)4.3.3 Executing code after the analysis

    F
    ff(.)The cell and transfer arrays
    ff(.), explicit sizes3.9.2 Entering the model equations, with explicit sizes
    ffl(.)2.4.1 Executing code at the end of each time step
    Free_parameter3.7 Parameters
    fun:Model equations
    f_set3.9.2 Entering the model equations, with explicit sizes
    f_set3.9.2 Entering the model equations, with explicit sizes
    f_set4.2.3 Cost function coding and adjoint modeling
    f_set4.2.3 Cost function coding and adjoint modeling

    H
    H2.4.1 Executing code at the end of each time step

    I
    index_ff_gain4.4.1 Specifying the Borel sweep
    innobs(.)4.3.3 Executing code after the analysis
    istep2.4.1 Executing code at the end of each time step
    istep_B_deb4.4.1 Specifying the Borel sweep
    istep_B_fin4.4.1 Specifying the Borel sweep
    istep_B_inc4.4.1 Specifying the Borel sweep
    itau_max4.4.1 Specifying the Borel sweep

    K
    kgain(.)4.3.3 Executing code after the analysis

    M
    maxstep3.9.1 The explicit size sequence
    mereta(.,.)Observations and error on state matrix
    mobs3.8.1 Observations
    model_file_name2.3.2 Setup a model and compile with make
    modzprint2.2.2 Entering model equation and parameters
    modzprint2.4.2 Controlling the printout and data output
    mpThe cell and transfer arrays
    mp3.9.1 The explicit size sequence
    m_dwn3.3.1 Setting dimensions for 1D gridded model
    m_mult3.3.1 Setting dimensions for 1D gridded model
    m_node3.3.1 Setting dimensions for 1D gridded model
    m_up3.3.1 Setting dimensions for 1D gridded model

    N
    npThe cell and transfer arrays
    np3.9.1 The explicit size sequence
    nstep2.2.2 Entering model equation and parameters
    n_dwn3.3.1 Setting dimensions for 1D gridded model
    n_mult3.3.1 Setting dimensions for 1D gridded model
    n_node3.3.1 Setting dimensions for 1D gridded model
    n_up3.3.1 Setting dimensions for 1D gridded model

    O
    obspha(.,.)4.3.3 Executing code after the analysis

    P
    Phi_tef(.)3.9.2 Entering the model equations, with explicit sizes
    principal3.2.2 Calling the model subroutine

    S
    set_dwn_etaLimiting conditions
    set_dwn_phiLimiting conditions
    set_etaModel equations
    set_node_etaGrid node equations
    set_node_PhiGrid node equations
    set_PhiModel equations
    set_up_etaLimiting conditions
    set_up_phiLimiting conditions

    T
    tau_B_ini4.4.1 Specifying the Borel sweep
    tau_B_mult4.4.1 Specifying the Borel sweep
    time2.2.2 Entering model equation and parameters

    V
    var:Model equations
    vobs(.)3.8.2 Data
    vobs(.)4.3.2.1 Feeding the observations to the model

    Z
    zback4.2.3 Cost function coding and adjoint modeling
    ZBorel4.4.1 Specifying the Borel sweep
    zborel for4.4.1 Specifying the Borel sweep
    zcommand4.2.2 Control laws
    zgetobs3.8.2 Data
    zgetobs4.3.2.1 Feeding the observations to the model
    zkalman4.3.1 Coding the Kalman filter
    zlaw4.2.2 Control laws
    zprint2.4.2 Controlling the printout and data output

    Jump to:   A   B   C   D   E   F   H   I   K   M   N   O   P   S   T   V   Z  

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A. Installation


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.1 Programming environments

    Miniker is not a traditionnal software in that it isn’t a library or an interpreter but rather a set of source and macro file that combines with the user model code and enable to build a binary program corresponding with the model. It requires a build environment with a preprocessor, a compiler and facilities that automate these steps.

    Two different environment are proposed. One use cmz (http://wwwcmz.web.cern.ch/wwwcmz/index.html), while the other is based on make. Other libraries are needed, the CERN Program Library (cernlib) and lapack.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.2 Common requisites

    Whatever method is used a fortran 77 compiler is required. The compilers that have been used so far are g77, gfortran and the sun solaris compiler.

    When usng CMZ, the CERN Program Library, available at http://wwwasd.web.cern.ch/wwwasd/cernlib/, has to be installed. With make, internal source files copied from the cernlib may be used instead but then some examples won’t be available, since they rely on some mathematical functions provided by the CERN library. On windows, in case you want to use the compiler from the GNU compiler collection with cygwin or MINGW/MSYS you can use the binaries provided at http://zyao.home.cern.ch/zyao/cernlib.html. On Mac OS X, the cernlib provided by fink (package cernlib-devel) can be used.

    You should also have LAPACK, available at http://www.netlib.org/lapack/. LAPACK can also be installed as part of the CERN Library or as part of the http://math-atlas.sourceforge.net/ implementation. On most linux distributions a lapack package is available. On Mac OS X, the ATLAS implementation provided by fink or the frameworks from Xcode can be used.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.3 Miniker with cmz

    First of all you have to get the cmz file ‘mini_ker.cmz’ and put it in a directory. In that same directory you should create a directory for each of your models. In the model directory you should copy the file ‘selseq.kumac’ available with Miniker, and create your own cmz file for your model, called for example ‘mymodel.cmz’. You should also have installed the kumac macro files handling mortan compilation, the associated shell scripts and the mortran preprocessor.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.4 Miniker with make


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.4.1 Additional requirements for Miniker with make

    The package has been tested with GNU make and solaris make.

    Suitable preprocessors should also be installed. Two preprocessors are required, one that preprocess the cmz directives, and a mortran preprocessor. A cmz directives processor written in perl, is distributed in the car2txt package available at http://www.environnement.ens.fr/perso/dumas/mini_ker/software.html. A mortran package with a command able to preprocess a mortran file given on the command line with a syntax similar with the cpp command line syntax is also required. Such a mortran is available at http://www.environnement.ens.fr/perso/dumas/mini_ker/software.html.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.4.2 Configuration

    The package is available at http://www.environnement.ens.fr/perso/dumas/mini_ker/software.html. It is available as a compresssed tar archive. On UNIX, with GNU tar it may be unpacked using

     
    $ tar xzvf mini_ker-4.2.tar.gz
    

    The detection of the compiler, the preprocessors (car2txt and mortran), and the libraries are performed by the configure script. This script sets the apropriate variables in makefiles. It can be run with:

     
    $ cd mini_ker-4.2
    $ ./configure
    

    If the output of ./configure doesn’t show any error it means that all the components are here. It is possible to give ./configure switches and also specify environment variables (see also ./configure --help):

    --disable-cernlib

    Use the internal cernlib source files, even if a cernlib is detected.

    --with-static-cernlib

    This command line switch forces a static linking with the cernlib (or a dynamic linking if set to no).

    --with-cernlib

    This command line switch can be used to specify the cernlib location (if not detected or you want to use a specific cernlib).

    --with-blas
    --with-lapack

    With this command switch, you can specify the location of the blas and lapack libraries.

    For example, on mac OS X this can be used to specify the blas and lapack from the Apple frameworks:

     
    ./configure \
    --with-blas=/System/Library/Frameworks/vecLib.framework/versions/A/vecLib \
    --with-lapack=/System/Library/Frameworks/vecLib.framework/versions/A/vecLib
    
    F77
    FC
    FFLAGS
    LDFLAGS

    Classical compiler, compiler flags and linker flags.

    MORTRAN

    This environment variable holds the mortran preprocessor command (default is mortran).

    MTNFLAGS

    This environment variable holds command line arguments for the mortran preprocessor. It is empty in the default case.

    MTN

    This environment variable may be used to specify the mortran executable name and/or path, it should be used by the mortran commmand. (default is empty, which leads to a mortran executable called mtn).

    MTNDEPEND

    This environment variable may be used to specify the mortran dependencies checker executable. It should be used by the mortran commmand. (default is empty, which leads to a mortran dependencies checker called mtndepend).

    After a proper configuration, if make is run then the example models should be build. You have to perform the configuration only once.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.4.3 Installation with make

    Miniker can be installed by running

     
    make install
    

    It should copy the sources and the ‘Makefile.miniker’ file in a ‘mini_ker’ directory in the $(includedir) directory, and copy the templates in ‘$(datadir)/mini_ker’. The default for $(includedir) is ‘/usr/local/include’ and the default for $(datadir) is ‘/usr/local/share’, these defaults may be changed by ./configure switches ‘--prefix’, ‘--includedir’ and ‘--datadir’. See ./configure --help and the ‘INSTALL’ file for more informations. The helper script ‘start_miniker’ should also be installed.

    The installation is not required to use comfortably Miniker. Indeed the only thing that changes with the sources and the ‘Makefile.miniker’ directory location is the miniker_dir variable in a project Makefile.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    B. Cmz directives reference

    The cmz directives are described together with the other features of cmz in the cmz manual at http://wwwcmz.web.cern.ch/wwwcmz/, the important ones are nevertheless recalled here, especially for those that use make and don’t need the whole features of cmz.

    After the description of the generic features, we turn to the cmz directive of interest. There are three kinds of cmz directives that are of use within Miniker: one kind that introduce files, the other for conditionnal compilation and the third for sequence inclusion.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    B.1 Cmz directives general syntax

    The cmz directives always begin with a ‘+’ in the first column, optionnaly followed by any number of ‘_’ that may be used for indentation, then the directive label, case insensitive, followed by the directive arguments separated by ‘,’. The arguments are also case insensitive. Optional spaces may be around directive arguments. An optionnal ‘.’ ends the directive arguments and begin a comment, everything that follows that ‘.’ is ignored.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    B.2 Conditional expressions

    A directive argument common to all the directives is the conditionnal expression. A conditionnal expression may be true or false, it is a combination of select flags. the select flags are combined with logical operators. A select flag itself is true if it was selected. A select flag selflag is selected by using the sel selflag instruction in cmz. It is selected by passing the -D selflag command line switch to the call of the cmz directives preprocessor when using make.

    A ‘-’ negates the expression that follows. Parenthesis ‘(’ and ‘)’ are used for the grouping of subexpressions. ‘|’ and ‘,’ are for the boolean or: an expression with a or is true if the expression on the left or the expression on the right of the or is true. ‘&’ is for the boolean and: an expression with an and is true if the expression on the left and the expression on the right are true.

    The grouping is left to right when there is no parenthesis, with or and ‘&’ having the same precedence. Therefore

     
    a&b|c    ≡    (a&b)|c
    a|b&c    ≡    (a|b)&c
    a|b&c  is not  a|(b&c)
    a&b|c  is not  a&(b|c)
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    B.3 File introduction directives

    A file (or sequence) introduction directive appears at the beginning of the file. There are two different directives, one is DECK for normal files, the other is KEEP for include files (sequences). The first argument is the name of the file. The file name may not be larger than 32 characters and is converted to lower case in the general case. The optionnal following arguments may be of 2 type (and may be mixed, separated by ‘,’):

    conditional

    A conditionnal is introduced by IF= followed by a conditionnal expression described in Conditional expressions. The file is preprocessed if the conditionnal expression is true.

    language specification

    A language specification is introduced by a T=. The most common languages are ‘mtn’ for the mortran, ‘ftn’ for fortran not preprocessed, ‘f77’ for preprocessed fortran, ‘c’ for the c language and ‘txt’ for text files. In general the language of the file determines the name of files the preprocessed file is extracted to, the comment style and the command for inclusions.

    It is a common practice to have wrong language type in KEEP as the language may be determined from the DECK that include them with cmz, or from their file name with make. This is not recommended and considered a bad practice.

    Such a directive will always appear in cmz, as it is built-in. It is recommended to have one when using make too, even though it is not required in most cases. Indeed make uses the file name directly and finds the language and file type by looking at the file extension. make should then pass the language type with a --lang lang command line switch when calling the cmz directives preprocessor. With make, the convention is to have ‘cm’ added before the normal file suffix and after the ‘.’. The table tab:cmfile_suffix shows the matching between suffixes, file type and file language.

    For example, a file beginning with

    +Deck, subroutine_foo, If=monitor&-simple, T=f77. 
    

    is a main preprocessed fortran file that will only be generated if ‘monitor’ is selected and ‘simple’ is not selected. The file to be preprocessed by make should have the ‘.cmF’ suffix, and be called ‘subroutine_foo.cmF’.

    A file beginning with

    +KEEP,inc_common,If=monitor|interface,T=mtn
    

    is an mortran include file that should be processed only if ‘monitor’ or ‘interface’ is selected. The file to be preprocessed by make should have the ‘cmmti’ suffix and be called ‘inc_common.cmmti’. The resulting file when make is used will be called ‘inc_common.mti’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    B.4 Conditional directives

    Conditional directives may be used to conditionnaly skip blocks of code. There are 4 conditional directives: if, elseif, else and endif. +if begins a conditional directives sequence, with argument a conditional expression. If the expression is true the block of code following the +if is output in the resulting file, up to another conditional directive, if it is false the code block is skipped. If the expression is false and the following conditional directive is +elseif, the same procedure is followed with the argument of +elseif which is also a conditionnal expression. More than one +elseif may follow a +if. If a +if or +elseif expression is true the following code block is output and all the following +elseif code blocks are skipped. If all the +if and +elseif expressions are false and the following coditionnal directive is +else then the block following the +else is output. If a previous expression was true the code block following the +else is skipped. The last code block is closed by +endif.

    Conditionnal directives may be nested, a +if begins a deeper conditionnal sequences directives that is ended by the corresponding +endif.

    The simplest example is:

         some code;
    +IF,monitor
         code output only if monitor is true;
    +ENDIF
    

    If ‘monitor’ is selected, the +if block is output, it leads to

         some code;
         code output only if monitor is true;
    

    If ‘monitor’ isn’t selected the +if block is skipped, it leads to

         some code;
    

    An example with +else may be:

    +IF,double
     call dmysub(eta);
    +ELSE
     call smysub(eta);
    +ENDIF
    

    If ‘double’ is selected the code output is call dmysub(eta);, if ‘double’ isn’t selected the code output is call dmysub(eta);.

    Here is a self explanatory example of use of +elseif:

    +IF,monitor
      code used if monitor is selected;
    +ELSEIF,kalman
      code used if kalman is selected and monitor is not;
    +ELSE
      code used if kalman and monitor are not selected;
    +ENDIF
    

    And last an example of nested conditional directives:

    +IF,monitor
      code used if monitor is selected;
    +_IF,kalman. deep if
        code used if monitor and kalman are selected;
    +_ELSE. deep else
        code used if monitor is selected and kalman is not;
    +_ENDIF. end the deep conditionnals sequence
    +ELSE
      code used if monitor is not selected;
    +_IF,kalman
        code used if monitor is not selected but kalman is;
    +_ELSE
        code used if monitor and kalman are not selected;
    +_ENDIF
      other code used if monitor is not selected;
    +ENDIF
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    B.5 File inclusion directive

    The file (sequence) inclusion directive is seq. The argument of seq is an include files ‘,’ separated list. The include files are Keep in cmz. The following optional arguments may be mixed:

    conditional

    A conditionnal is introduced by IF= followed by a conditionnal expression described in Conditional expressions. The directive is ignored if the conditionnal expression is false.

    T=noinclude

    When this argument is present the text of the sequence will always be included in the file where the +seq appears.

    When there is no T=noinclude argument, the +seq directive may be replaced with an inclusion command suitable for the language of the file being processed, if such command has been specified.

    For example if we have the following sequence

    +KEEP,inc,lang=C
    typedef struct incstr {char* msg};
    

    And the following code in the file being processed:

    +DECK,mainf,lang=C
    +SEQ,inc
    int main (int argc, char* argv) { exit(0); }
    

    the processing of ‘mainf’ should lead to the file ‘mainf.c’, containing an include command for ‘inc’:

    #include "inc.h"
    int main (int argc, char* argv) { exit(0); }
    

    In case the +seq has the T=noinclude:

    +DECK,mainf,lang=C
    +SEQ,inc,T=noinclude
    int main (int argc, char* argv) { exit(0); }
    

    The processing of ‘mainf’ should lead to the file ‘mainf.c’ containing the text of ‘inc’:

    typedef struct incstr {char* msg};
    int main (int argc, char* argv) { exit(0); }
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    B.6 The ‘self’ directive

    The self directive is an obsolete directive that may be used for conditionnal skipping of code. For a better approach see Conditional directives. The optionnal argument of +SELF is If= followed by a conditionnal expression. If the conditionnal expression is true the code following the directive is output, if it is false the code is skipped up to any directive (including another +SELF) except +seq.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    C. Copying This Manual


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    C.1 GNU Free Documentation License

    Version 1.1, March 2000

     
    Copyright © 2000 Free Software Foundation, Inc.
    59 Temple Place, Suite 330, Boston, MA  02111-1307, USA
    
    Everyone is permitted to copy and distribute verbatim copies
    of this license document, but changing it is not allowed.
    
    1. PREAMBLE

      The purpose of this License is to make a manual, textbook, or other written document free in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.

      This License is a kind of “copyleft”, which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.

      We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

    2. APPLICABILITY AND DEFINITIONS

      This License applies to any manual or other work that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. The “Document”, below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as “you”.

      A “Modified Version” of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.

      A “Secondary Section” is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document’s overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (For example, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.

      The “Invariant Sections” are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License.

      The “Cover Texts” are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License.

      A “Transparent” copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, whose contents can be viewed and edited directly and straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup has been designed to thwart or discourage subsequent modification by readers is not Transparent. A copy that is not “Transparent” is called “Opaque”.

      Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML designed for human modification. Opaque formats include PostScript, PDF, proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML produced by some word processors for output purposes only.

      The “Title Page” means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, “Title Page” means the text near the most prominent appearance of the work’s title, preceding the beginning of the body of the text.

    3. VERBATIM COPYING

      You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.

      You may also lend copies, under the same conditions stated above, and you may publicly display copies.

    4. COPYING IN QUANTITY

      If you publish printed copies of the Document numbering more than 100, and the Document’s license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.

      If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.

      If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access to download anonymously at no charge using public-standard network protocols. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.

      It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

    5. MODIFICATIONS

      You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

      1. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.
      2. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has less than five).
      3. State on the Title page the name of the publisher of the Modified Version, as the publisher.
      4. Preserve all the copyright notices of the Document.
      5. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
      6. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.
      7. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document’s license notice.
      8. Include an unaltered copy of this License.
      9. Preserve the section entitled “History”, and its title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section entitled “History” in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.
      10. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the “History” section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.
      11. In any section entitled “Acknowledgments” or “Dedications”, preserve the section’s title, and preserve in the section all the substance and tone of each of the contributor acknowledgments and/or dedications given therein.
      12. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.
      13. Delete any section entitled “Endorsements”. Such a section may not be included in the Modified Version.
      14. Do not retitle any existing section as “Endorsements” or to conflict in title with any Invariant Section.

      If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version’s license notice. These titles must be distinct from any other section titles.

      You may add a section entitled “Endorsements”, provided it contains nothing but endorsements of your Modified Version by various parties—for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.

      You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.

      The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.

    6. COMBINING DOCUMENTS

      You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice.

      The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.

      In the combination, you must combine any sections entitled “History” in the various original documents, forming one section entitled “History”; likewise combine any sections entitled “Acknowledgments”, and any sections entitled “Dedications”. You must delete all sections entitled “Endorsements.”

    7. COLLECTIONS OF DOCUMENTS

      You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.

      You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

    8. AGGREGATION WITH INDEPENDENT WORKS

      A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, does not as a whole count as a Modified Version of the Document, provided no compilation copyright is claimed for the compilation. Such a compilation is called an “aggregate”, and this License does not apply to the other self-contained works thus compiled with the Document, on account of their being thus compiled, if they are not themselves derivative works of the Document.

      If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one quarter of the entire aggregate, the Document’s Cover Texts may be placed on covers that surround only the Document within the aggregate. Otherwise they must appear on covers around the whole aggregate.

    9. TRANSLATION

      Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English version will prevail.

    10. TERMINATION

      You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

    11. FUTURE REVISIONS OF THIS LICENSE

      The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.

      Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License “or any later version” applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    C.1.1 ADDENDUM: How to use this License for your documents

    To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:

     
      Copyright (C)  year  your name.
      Permission is granted to copy, distribute and/or modify this document
      under the terms of the GNU Free Documentation License, Version 1.1
      or any later version published by the Free Software Foundation;
      with the Invariant Sections being list their titles, with the
      Front-Cover Texts being list, and with the Back-Cover Texts being list.
      A copy of the license is included in the section entitled ``GNU
      Free Documentation License''.
    

    If you have no Invariant Sections, write “with no Invariant Sections” instead of saying which ones are invariant. If you have no Front-Cover Texts, write “no Front-Cover Texts” instead of “Front-Cover Texts being list”; likewise for Back-Cover Texts.

    If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.


    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)

    In fact the variables names are transformed into fortran array elements by mortran generated macros, so the symbolic names defined in the mortran blocks never appears in the generated fortran code, they are replaced by the fortran arrays.

    (2)

    dres.data’ has another time related variable as second column: dt, the time step that can vary in the course of a simulation.

    (3)

    This naming is a joke for “Inert” Heaviside function.

    (4)

    fun_set, or equivalently f_set, is a general mortran macro associating a symbol with a fortran expression. Here, it is the name of the symbol (eta) that has a particular meaning for the building of the model.

    (5)

    For a short introduction to automatic sensitivity analysis, see the document:
    http://lmd.jussieu.fr/zoom/doc/sensibilite.ps, in French, or ask for the more complete research document to a member of the TEF-ZOOM collaboration

    (6)

    General Tangent Linear System, i.e. the TLS circulating along a trajectory. See the explanation in the document http://www.lmd.jussieu.fr/Zoom/doc/Adjoint.pdf (in French).

    (7)

    For detailed explanation of the adjoint model, see the document in pdf or .ps.gz

    (8)

    More generally, the Borel sweep allows the numerical study of the dependency in $\tau$ of the Borel transform of various coefficients in the system coupling matrix.

    (9)

    Explanation in the research paper about SLTC (Al1 2003) available on request.

    (10)

    cf our research texts about propagator analyses in SLTC, and “les Gains sur champs (Al1 2003-2004)”


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/misc/res/mini_ker_l2h/mini_ker_l2h.tex0000644000175000017500000003124211264347115025367 0ustar flichtenheldflichtenheld% This document was automatically generated by the l2h extenstion of texi2html % DO NOT EDIT !!! \documentclass{article} \usepackage{html} \begin{document} \begin{rawhtml} \end{rawhtml} $$\partial_t \eta (t) = g(\eta(t),\varphi(t))$$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\eta$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\varphi$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $$ \varphi(t) = f(\eta(t),\varphi(t)) $$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $t$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $t + \delta t$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\delta \eta$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\delta \varphi$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $$\pmatrix{A & B\cr -C^+ & I-D\cr} \pmatrix{\delta \eta\cr \delta \varphi\cr} = \pmatrix{\Gamma\cr \Omega\cr}$$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $f$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $g$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\delta t$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $$\eqalign{\partial_t \eta (t) &= g(\eta(t),\varphi(t))\cr \varphi(t) &= f(\eta(t),\varphi(t))\cr }$$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $$\left\{\eqalign{\partial_t \eta _{prey} &= a \eta _{prey} - a \varphi _{meet} \cr \partial_t \eta _{pred} &= -c \eta _{pred} + c \varphi _{meet}\cr}\right.$$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $$\varphi _{meet} = \eta _{prey}\eta _{pred}$$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $a$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $c$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\varphi_{meet}$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\eta_{prey}$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\eta_{pred}$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\delta\eta$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\varphi=f(\eta(t-dt)+d\varphi$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $d\varphi$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\varphi=f(\eta),\varphi)$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $10^{-3}$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $$\partial_{\eta} g(\eta(t),\varphi(t)); $$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $$\partial_{\varphi} g(\eta(t),\varphi(t)); $$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $$\partial_{\eta} f(\eta(t),\varphi(t)); $$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $$\partial_{\varphi} f(\eta(t),\varphi(t)); $$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $(I-D)$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $k$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $$\left\{\eqalign{\partial_t \eta _{k} ^{pos} &= \eta _{k} ^{vel} \cr \partial_t \eta _{k} ^{vel} &= ( \varphi_k ^{spr} -\varphi _{k+1} ^{spr} + \varphi _{k} ^{dmp}-\varphi _{k+1} ^{dmp})\,/m_k \cr}\right.$$ $$\left\{\eqalign{ \varphi_k ^{spr} &= -k_k (\eta _{k} ^{pos}- \eta _{k-1} ^{pos})\cr \varphi_k ^{spr} &= -d_k (\eta _{k} ^{vel}- \eta _{k-1} ^{vel}) \cr}\right.$$ $$\left\{\eqalign{\eta ^{pos}_{0} &= 0\cr \eta ^{vel}_{0} &= 0\cr \varphi ^{spr}_{N+1} &= 0\cr \varphi ^{dmp}_{N+1} &= 0\cr}\right.$$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $m_k$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $r_k$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $d_k$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $N$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $N+1$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $$\eqalign{\partial_x f^g &= g f^{g-1}\partial_x f + f^g \log f\partial_x g\cr &= f^{g-1}(g\partial_x f + f\partial_x g)\cr}$$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $x/\Delta$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\omega$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $h$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $$ \omega = h ( \eta , \varphi) $$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\eta_1(t)$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\eta_1(t=0)$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $t=0$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\phi_{j}(t)$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\eta_i(t=0)$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $h(t)$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $J$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $T$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $$ J = \psi[\eta(T),\varphi(T) ,h(T)] + \int_0 ^T {l[\eta(\tau),\varphi(\tau),h(\tau)]}\, d\tau $$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\psi$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $l$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $$\eqalign{ \partial_t \eta (t) &= g(\eta(t),\varphi(t)) + W(t) \mu\cr \varphi(t) &= f(\eta(t),\varphi(t))\cr \omega(t) &= h ( \eta(t) , \varphi(t)) + \nu\cr }$$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $t=s_i$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\mu$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $Q$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\nu$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $R$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $W$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $$\left\{\eqalign{ \partial_t \eta_1 &= a_{11} \eta_1 + a_{12} \varphi_2 + a_{13} \varphi_3 + W_{11} \mu_1 + W_{12} \mu_2\cr \partial_t \eta_2 &= a_{21} \varphi_1 + a_{22} \eta_2 + a_{23} \varphi_3 + W_{21} \mu_1 + W_{22} \mu_2\cr \partial_t \eta_3 &= a_{31} \varphi_1 + a_{32} \varphi_2 + a_{33} \eta_3 + W_{31} \mu_1 + W_{32} \mu_2 }\right.$$ $$\left\{\eqalign{ \varphi _1 &= \eta _1\cr \varphi _2 &= \eta _2\cr \varphi _3 &= \eta _3 }\right.$$ $$\left\{\eqalign{ \omega _1 &= \varphi _1 + \nu_1\cr \omega _2 &= \eta _2 + \nu_2 \cr \omega _3 &= \eta _3 + \nu_3 }\right.$$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $g(\tau)$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\tau$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $g(\tau;t)$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $2$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $tau$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $0.2$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\sqrt{\sqrt{2}}$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $g(t,\tau)$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $A_{st}$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $A_{st} + A_{st}^\dagger$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $$ U w V^\dagger $$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $U$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $w$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $V$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\Phi(t+\delta t,t)=\exp{A_{st} \delta t}$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\Phi$ \begin{rawhtml} \end{rawhtml} \begin{rawhtml} \end{rawhtml} $\Phi(t,0)$ \begin{rawhtml} \end{rawhtml} \end{document} texi2html-1.82/test/misc/res/mini_ker_l2h/mini_ker-l2h_cache.pm0000644000175000017500000005674211264347115026260 0ustar flichtenheldflichtenheld $l2h_cache_key = q/$A_{st}$/; $l2h_cache{$l2h_cache_key} = q|$A_{st}$|; $l2h_cache_key = q/$g(t,\tau)$/; $l2h_cache{$l2h_cache_key} = q|$g(t,\tau)$|; $l2h_cache_key = q/$$\eqalign{\partial_x f^g &= g f^{g-1}\partial_x f + f^g \log f\partial_x g\cr &= f^{g-1}(g\partial_x f + f\partial_x g)\cr}$$/; $l2h_cache{$l2h_cache_key} = q|

    \begin{displaymath}\eqalign{\partial_x f^g &= g f^{g-1}\partial_x f + f^g \log f\partial_x g\cr
&= f^{g-1}(g\partial_x f + f\partial_x g)\cr}\end{displaymath}

    |; $l2h_cache_key = q/$\delta\eta$/; $l2h_cache{$l2h_cache_key} = q|$\delta \eta$|; $l2h_cache_key = q/$A_{st} + A_{st}^\dagger$/; $l2h_cache{$l2h_cache_key} = q| $A_{st} + A_{st}^\dagger$|; $l2h_cache_key = q/$\tau$/; $l2h_cache{$l2h_cache_key} = q|$\tau$|; $l2h_cache_key = q/$10^{-3}$/; $l2h_cache{$l2h_cache_key} = q|$10^{-3}$|; $l2h_cache_key = q/$$ \varphi(t) = f(\eta(t),\varphi(t)) $$/; $l2h_cache{$l2h_cache_key} = q|

    \begin{displaymath}
\varphi(t) = f(\eta(t),\varphi(t))
\end{displaymath}

    |; $l2h_cache_key = q/$Q$/; $l2h_cache{$l2h_cache_key} = q|$Q$|; $l2h_cache_key = q/$\varphi=f(\eta(t-dt)+d\varphi$/; $l2h_cache{$l2h_cache_key} = q| $\varphi=f(\eta(t-dt)+d\varphi$|; $l2h_cache_key = q/$m_k$/; $l2h_cache{$l2h_cache_key} = q|$m_k$|; $l2h_cache_key = q/$$\pmatrix{A & B\cr -C^+ & I-D\cr} \pmatrix{\delta \eta\cr \delta \varphi\cr} = \pmatrix{\Gamma\cr \Omega\cr}$$/; $l2h_cache{$l2h_cache_key} = q|

    \begin{displaymath}\pmatrix{A & B\cr
-C^+ & I-D\cr} \pmatrix{\delta \eta\cr
\delta \varphi\cr} = \pmatrix{\Gamma\cr
\Omega\cr}\end{displaymath}

    |; $l2h_cache_key = q/$\eta_1(t)$/; $l2h_cache{$l2h_cache_key} = q|$\eta_1(t)$|; $l2h_cache_key = q/$\omega$/; $l2h_cache{$l2h_cache_key} = q|$\omega$|; $l2h_cache_key = q/$\eta_{pred}$/; $l2h_cache{$l2h_cache_key} = q|$\eta_{pred}$|; $l2h_cache_key = q/$h(t)$/; $l2h_cache{$l2h_cache_key} = q|$h(t)$|; $l2h_cache_key = q/$T$/; $l2h_cache{$l2h_cache_key} = q|$T$|; $l2h_cache_key = q/$\varphi$/; $l2h_cache{$l2h_cache_key} = q|$\varphi$|; $l2h_cache_key = q/$c$/; $l2h_cache{$l2h_cache_key} = q|$c$|; $l2h_cache_key = q/$f$/; $l2h_cache{$l2h_cache_key} = q|$f$|; $l2h_cache_key = q/$\Phi(t+\delta t,t)=\exp{A_{st} \delta t}$/; $l2h_cache{$l2h_cache_key} = q| $\Phi(t+\delta t,t)=\exp{A_{st} \delta t}$|; $l2h_cache_key = q/$$\partial_{\varphi} f(\eta(t),\varphi(t)); $$/; $l2h_cache{$l2h_cache_key} = q|

    \begin{displaymath}\partial_{\varphi} f(\eta(t),\varphi(t));
\end{displaymath}

    |; $l2h_cache_key = q/$U$/; $l2h_cache{$l2h_cache_key} = q|$U$|; $l2h_cache_key = q/$W$/; $l2h_cache{$l2h_cache_key} = q|$W$|; $l2h_cache_key = q/$\delta \eta$/; $l2h_cache{$l2h_cache_key} = q|$\delta \eta$|; $l2h_cache_key = q/$$\partial_{\eta} g(\eta(t),\varphi(t)); $$/; $l2h_cache{$l2h_cache_key} = q|

    \begin{displaymath}\partial_{\eta} g(\eta(t),\varphi(t));
\end{displaymath}

    |; $l2h_cache_key = q/$J$/; $l2h_cache{$l2h_cache_key} = q|$J$|; $l2h_cache_key = q/$N$/; $l2h_cache{$l2h_cache_key} = q|$N$|; $l2h_cache_key = q/$r_k$/; $l2h_cache{$l2h_cache_key} = q|$r_k$|; $l2h_cache_key = q/$\mu$/; $l2h_cache{$l2h_cache_key} = q|$\mu$|; $l2h_cache_key = q/$tau$/; $l2h_cache{$l2h_cache_key} = q|$\tau$|; $l2h_cache_key = q/$t + \delta t$/; $l2h_cache{$l2h_cache_key} = q|$t + \delta t$|; $l2h_cache_key = q/$$\partial_t \eta (t) = g(\eta(t),\varphi(t))$$/; $l2h_cache{$l2h_cache_key} = q|

    \begin{displaymath}\partial_t \eta (t) = g(\eta(t),\varphi(t))\end{displaymath}

    |; $l2h_cache_key = q/$\eta_1(t=0)$/; $l2h_cache{$l2h_cache_key} = q|$\eta_1(t=0)$|; $l2h_cache_key = q/$t=0$/; $l2h_cache{$l2h_cache_key} = q|$t=0$|; $l2h_cache_key = q/$R$/; $l2h_cache{$l2h_cache_key} = q|$R$|; $l2h_cache_key = q/$N+1$/; $l2h_cache{$l2h_cache_key} = q|$N+1$|; $l2h_cache_key = q/$\Phi(t,0)$/; $l2h_cache{$l2h_cache_key} = q|$\Phi(t,0)$|; $l2h_cache_key = q/$g(\tau;t)$/; $l2h_cache{$l2h_cache_key} = q|$g(\tau;t)$|; $l2h_cache_key = q/$$\partial_{\varphi} g(\eta(t),\varphi(t)); $$/; $l2h_cache{$l2h_cache_key} = q|

    \begin{displaymath}\partial_{\varphi} g(\eta(t),\varphi(t));
\end{displaymath}

    |; $l2h_cache_key = q/$$\varphi _{meet} = \eta _{prey}\eta _{pred}$$/; $l2h_cache{$l2h_cache_key} = q|

    \begin{displaymath}\varphi _{meet} = \eta _{prey}\eta _{pred}\end{displaymath}

    |; $l2h_cache_key = q/$\Phi$/; $l2h_cache{$l2h_cache_key} = q|$\Phi$|; $l2h_cache_key = q/$V$/; $l2h_cache{$l2h_cache_key} = q|$V$|; $l2h_cache_key = q/$h$/; $l2h_cache{$l2h_cache_key} = q|$h$|; $l2h_cache_key = q/$g$/; $l2h_cache{$l2h_cache_key} = q|$g$|; $l2h_cache_key = q/$\varphi_{meet}$/; $l2h_cache{$l2h_cache_key} = q| $\varphi_{meet}$|; $l2h_cache_key = q/$$ J = \psi[\eta(T),\varphi(T) ,h(T)] + \int_0 ^T {l[\eta(\tau),\varphi(\tau),h(\tau)]}\, d\tau $$/; $l2h_cache{$l2h_cache_key} = q|

    \begin{displaymath}
J = \psi[\eta(T),\varphi(T) ,h(T)] + \int_0 ^T {l[\eta(\tau),\varphi(\tau),h(\tau)]}\, d\tau
\end{displaymath}

    |; $l2h_cache_key = q/$x\/\Delta$/; $l2h_cache{$l2h_cache_key} = q|$x/\Delta$|; $l2h_cache_key = q/$\eta_{prey}$/; $l2h_cache{$l2h_cache_key} = q|$\eta_{prey}$|; $l2h_cache_key = q/$$\eqalign{\partial_t \eta (t) &= g(\eta(t),\varphi(t))\cr \varphi(t) &= f(\eta(t),\varphi(t))\cr }$$/; $l2h_cache{$l2h_cache_key} = q|

    \begin{displaymath}\eqalign{\partial_t \eta (t) &= g(\eta(t),\varphi(t))\cr
\varphi(t) &= f(\eta(t),\varphi(t))\cr
}\end{displaymath}

    |; $l2h_cache_key = q/$$ \omega = h ( \eta , \varphi) $$/; $l2h_cache{$l2h_cache_key} = q|

    \begin{displaymath}
\omega = h ( \eta , \varphi)
\end{displaymath}

    |; $l2h_cache_key = q/$\varphi=f(\eta),\varphi)$/; $l2h_cache{$l2h_cache_key} = q| $\varphi=f(\eta),\varphi)$|; $l2h_cache_key = q/$$\partial_{\eta} f(\eta(t),\varphi(t)); $$/; $l2h_cache{$l2h_cache_key} = q|

    \begin{displaymath}\partial_{\eta} f(\eta(t),\varphi(t));
\end{displaymath}

    |; $l2h_cache_key = q/$(I-D)$/; $l2h_cache{$l2h_cache_key} = q|$(I-D)$|; $l2h_cache_key = q/$\sqrt{\sqrt{2}}$/; $l2h_cache{$l2h_cache_key} = q| $\sqrt{\sqrt{2}}$|; $l2h_cache_key = q/$t=s_i$/; $l2h_cache{$l2h_cache_key} = q|$t=s_i$|; $l2h_cache_key = q/$\delta \varphi$/; $l2h_cache{$l2h_cache_key} = q| $\delta \varphi$|; $l2h_cache_key = q/$0.2$/; $l2h_cache{$l2h_cache_key} = q|$0.2$|; $l2h_cache_key = q/$$\left\{\eqalign{\partial_t \eta _{k} ^{pos} &= \eta _{k} ^{vel} \cr \partial_t \eta _{k} ^{vel} &= ( \varphi_k ^{spr} -\varphi _{k+1} ^{spr} + \varphi _{k} ^{dmp}-\varphi _{k+1} ^{dmp})\,\/m_k \cr}\right.$$ $$\left\{\eqalign{ \varphi_k ^{spr} &= -k_k (\eta _{k} ^{pos}- \eta _{k-1} ^{pos})\cr \varphi_k ^{spr} &= -d_k (\eta _{k} ^{vel}- \eta _{k-1} ^{vel}) \cr}\right.$$ $$\left\{\eqalign{\eta ^{pos}_{0} &= 0\cr \eta ^{vel}_{0} &= 0\cr \varphi ^{spr}_{N+1} &= 0\cr \varphi ^{dmp}_{N+1} &= 0\cr}\right.$$/; $l2h_cache{$l2h_cache_key} = q|

    \begin{displaymath}\left\{\eqalign{\partial_t \eta _{k} ^{pos} &= \eta _{k} ^{ve...
... + \varphi _{k} ^{dmp}-\varphi _{k+1} ^{dmp})\,/m_k \cr}\right.\end{displaymath}


    \begin{displaymath}\left\{\eqalign{
\varphi_k ^{spr} &= -k_k (\eta _{k} ^{pos}- ...
...spr} &= -d_k (\eta _{k} ^{vel}- \eta _{k-1} ^{vel})
\cr}\right.\end{displaymath}


    \begin{displaymath}\left\{\eqalign{\eta ^{pos}_{0} &= 0\cr
\eta ^{vel}_{0} &= 0\...
...arphi ^{spr}_{N+1} &= 0\cr
\varphi ^{dmp}_{N+1} &= 0\cr}\right.\end{displaymath}

    |; $l2h_cache_key = q/$a$/; $l2h_cache{$l2h_cache_key} = q|$a$|; $l2h_cache_key = q/$l$/; $l2h_cache{$l2h_cache_key} = q|$l$|; $l2h_cache_key = q/$\eta$/; $l2h_cache{$l2h_cache_key} = q|$\eta$|; $l2h_cache_key = q/$d\varphi$/; $l2h_cache{$l2h_cache_key} = q|$d\varphi$|; $l2h_cache_key = q/$$\eqalign{ \partial_t \eta (t) &= g(\eta(t),\varphi(t)) + W(t) \mu\cr \varphi(t) &= f(\eta(t),\varphi(t))\cr \omega(t) &= h ( \eta(t) , \varphi(t)) + \nu\cr }$$/; $l2h_cache{$l2h_cache_key} = q|

    \begin{displaymath}\eqalign{
\partial_t \eta (t) &= g(\eta(t),\varphi(t)) + W(t)...
...varphi(t))\cr
\omega(t) &= h ( \eta(t) , \varphi(t)) + \nu\cr
}\end{displaymath}

    |; $l2h_cache_key = q/$$ U w V^\dagger $$/; $l2h_cache{$l2h_cache_key} = q|

    \begin{displaymath}
U w V^\dagger
\end{displaymath}

    |; $l2h_cache_key = q/$\eta_i(t=0)$/; $l2h_cache{$l2h_cache_key} = q|$\eta_i(t=0)$|; $l2h_cache_key = q/$\nu$/; $l2h_cache{$l2h_cache_key} = q|$\nu$|; $l2h_cache_key = q/$k$/; $l2h_cache{$l2h_cache_key} = q|$k$|; $l2h_cache_key = q/$d_k$/; $l2h_cache{$l2h_cache_key} = q|$d_k$|; $l2h_cache_key = q/$$\left\{\eqalign{\partial_t \eta _{prey} &= a \eta _{prey} - a \varphi _{meet} \cr \partial_t \eta _{pred} &= -c \eta _{pred} + c \varphi _{meet}\cr}\right.$$/; $l2h_cache{$l2h_cache_key} = q|

    \begin{displaymath}\left\{\eqalign{\partial_t \eta _{prey} &= a \eta _{prey} - a...
... \eta _{pred} &= -c \eta _{pred} + c \varphi _{meet}\cr}\right.\end{displaymath}

    |; $l2h_cache_key = q/$\delta t$/; $l2h_cache{$l2h_cache_key} = q|$\delta t$|; $l2h_cache_key = q/$g(\tau)$/; $l2h_cache{$l2h_cache_key} = q|$g(\tau)$|; $l2h_cache_key = q/$\psi$/; $l2h_cache{$l2h_cache_key} = q|$\psi$|; $l2h_cache_key = q/$\phi_{j}(t)$/; $l2h_cache{$l2h_cache_key} = q|$\phi_{j}(t)$|; $l2h_cache_key = q/$w$/; $l2h_cache{$l2h_cache_key} = q|$w$|; $l2h_cache_key = q/$$\left\{\eqalign{ \partial_t \eta_1 &= a_{11} \eta_1 + a_{12} \varphi_2 + a_{13} \varphi_3 + W_{11} \mu_1 + W_{12} \mu_2\cr \partial_t \eta_2 &= a_{21} \varphi_1 + a_{22} \eta_2 + a_{23} \varphi_3 + W_{21} \mu_1 + W_{22} \mu_2\cr \partial_t \eta_3 &= a_{31} \varphi_1 + a_{32} \varphi_2 + a_{33} \eta_3 + W_{31} \mu_1 + W_{32} \mu_2 }\right.$$ $$\left\{\eqalign{ \varphi _1 &= \eta _1\cr \varphi _2 &= \eta _2\cr \varphi _3 &= \eta _3 }\right.$$ $$\left\{\eqalign{ \omega _1 &= \varphi _1 + \nu_1\cr \omega _2 &= \eta _2 + \nu_2 \cr \omega _3 &= \eta _3 + \nu_3 }\right.$$/; $l2h_cache{$l2h_cache_key} = q|

    \begin{displaymath}\left\{\eqalign{
\partial_t \eta_1 &= a_{11} \eta_1 + a_{12} ...
...varphi_2 + a_{33} \eta_3 + W_{31} \mu_1 + W_{32} \mu_2
}\right.\end{displaymath}


    \begin{displaymath}\left\{\eqalign{
\varphi _1 &= \eta _1\cr
\varphi _2 &= \eta _2\cr
\varphi _3 &= \eta _3
}\right.\end{displaymath}


    \begin{displaymath}\left\{\eqalign{
\omega _1 &= \varphi _1 + \nu_1\cr
\omega _2 &= \eta _2 + \nu_2 \cr
\omega _3 &= \eta _3 + \nu_3
}\right.\end{displaymath}

    |; $l2h_cache_key = q/$2$/; $l2h_cache{$l2h_cache_key} = q|$2$|; $l2h_cache_key = q/$t$/; $l2h_cache{$l2h_cache_key} = q|$t$|; 1;texi2html-1.82/test/misc/res/mini_ker_l2h/mini_ker.20000644000175000017500000000010211264347115024152 0ustar flichtenheldflichtenheldtexexpand ** no image file for heavyside, (using heavyside.jpg) texi2html-1.82/test/misc/res/mini_ker_l2h/mini_ker_l2h_images.tex0000644000175000017500000004404211264347115026716 0ustar flichtenheldflichtenheld\batchmode \documentclass{article} \RequirePackage{ifthen} \usepackage{html} \usepackage[dvips]{color} \pagecolor[gray]{.7} \usepackage[]{inputenc} \makeatletter \makeatletter \count@=\the\catcode`\_ \catcode`\_=8 \newenvironment{tex2html_wrap}{}{}% \catcode`\<=12\catcode`\_=\count@ \newcommand{\providedcommand}[1]{\expandafter\providecommand\csname #1\endcsname}% \newcommand{\renewedcommand}[1]{\expandafter\providecommand\csname #1\endcsname{}% \expandafter\renewcommand\csname #1\endcsname}% \newcommand{\newedenvironment}[1]{\newenvironment{#1}{}{}\renewenvironment{#1}}% \let\newedcommand\renewedcommand \let\renewedenvironment\newedenvironment \makeatother \let\mathon=$ \let\mathoff=$ \ifx\AtBeginDocument\undefined \newcommand{\AtBeginDocument}[1]{}\fi \newbox\sizebox \setlength{\hoffset}{0pt}\setlength{\voffset}{0pt} \addtolength{\textheight}{\footskip}\setlength{\footskip}{0pt} \addtolength{\textheight}{\topmargin}\setlength{\topmargin}{0pt} \addtolength{\textheight}{\headheight}\setlength{\headheight}{0pt} \addtolength{\textheight}{\headsep}\setlength{\headsep}{0pt} \setlength{\textwidth}{451pt} \setlength{\textheight}{554pt} \newwrite\lthtmlwrite \makeatletter \let\realnormalsize=\normalsize \global\topskip=2sp \def\preveqno{}\let\real@float=\@float \let\realend@float=\end@float \def\@float{\let\@savefreelist\@freelist\real@float} \def\liih@math{\ifmmode$\else\bad@math\fi} \def\end@float{\realend@float\global\let\@freelist\@savefreelist} \let\real@dbflt=\@dbflt \let\end@dblfloat=\end@float \let\@largefloatcheck=\relax \let\if@boxedmulticols=\iftrue \def\@dbflt{\let\@savefreelist\@freelist\real@dbflt} \def\adjustnormalsize{\def\normalsize{\mathsurround=0pt \realnormalsize \parindent=0pt\abovedisplayskip=0pt\belowdisplayskip=0pt}% \def\phantompar{\csname par\endcsname}\normalsize}% \def\lthtmltypeout#1{{\let\protect\string \immediate\write\lthtmlwrite{#1}}}% \newcommand\lthtmlhboxmathA{\adjustnormalsize\setbox\sizebox=\hbox\bgroup\kern.05em }% \newcommand\lthtmlhboxmathB{\adjustnormalsize\setbox\sizebox=\hbox to\hsize\bgroup\hfill }% \newcommand\lthtmlvboxmathA{\adjustnormalsize\setbox\sizebox=\vbox\bgroup % \let\ifinner=\iffalse \let\)\liih@math }% \newcommand\lthtmlboxmathZ{\@next\next\@currlist{}{\def\next{\voidb@x}}% \expandafter\box\next\egroup}% \newcommand\lthtmlmathtype[1]{\gdef\lthtmlmathenv{#1}}% \newcommand\lthtmllogmath{\dimen0\ht\sizebox \advance\dimen0\dp\sizebox \ifdim\dimen0>.95\vsize \lthtmltypeout{% *** image for \lthtmlmathenv\space is too tall at \the\dimen0, reducing to .95 vsize ***}% \ht\sizebox.95\vsize \dp\sizebox\z@ \fi \lthtmltypeout{l2hSize % :\lthtmlmathenv:\the\ht\sizebox::\the\dp\sizebox::\the\wd\sizebox.\preveqno}}% \newcommand\lthtmlfigureA[1]{\let\@savefreelist\@freelist \lthtmlmathtype{#1}\lthtmlvboxmathA}% \newcommand\lthtmlpictureA{\bgroup\catcode`\_=8 \lthtmlpictureB}% \newcommand\lthtmlpictureB[1]{\lthtmlmathtype{#1}\egroup \let\@savefreelist\@freelist \lthtmlhboxmathB}% \newcommand\lthtmlpictureZ[1]{\hfill\lthtmlfigureZ}% \newcommand\lthtmlfigureZ{\lthtmlboxmathZ\lthtmllogmath\copy\sizebox \global\let\@freelist\@savefreelist}% \newcommand\lthtmldisplayA{\bgroup\catcode`\_=8 \lthtmldisplayAi}% \newcommand\lthtmldisplayAi[1]{\lthtmlmathtype{#1}\egroup\lthtmlvboxmathA}% \newcommand\lthtmldisplayB[1]{\edef\preveqno{(\theequation)}% \lthtmldisplayA{#1}\let\@eqnnum\relax}% \newcommand\lthtmldisplayZ{\lthtmlboxmathZ\lthtmllogmath\lthtmlsetmath}% \newcommand\lthtmlinlinemathA{\bgroup\catcode`\_=8 \lthtmlinlinemathB} \newcommand\lthtmlinlinemathB[1]{\lthtmlmathtype{#1}\egroup\lthtmlhboxmathA \vrule height1.5ex width0pt }% \newcommand\lthtmlinlineA{\bgroup\catcode`\_=8 \lthtmlinlineB}% \newcommand\lthtmlinlineB[1]{\lthtmlmathtype{#1}\egroup\lthtmlhboxmathA}% \newcommand\lthtmlinlineZ{\egroup\expandafter\ifdim\dp\sizebox>0pt % \expandafter\centerinlinemath\fi\lthtmllogmath\lthtmlsetinline} \newcommand\lthtmlinlinemathZ{\egroup\expandafter\ifdim\dp\sizebox>0pt % \expandafter\centerinlinemath\fi\lthtmllogmath\lthtmlsetmath} \newcommand\lthtmlindisplaymathZ{\egroup % \centerinlinemath\lthtmllogmath\lthtmlsetmath} \def\lthtmlsetinline{\hbox{\vrule width.1em \vtop{\vbox{% \kern.1em\copy\sizebox}\ifdim\dp\sizebox>0pt\kern.1em\else\kern.3pt\fi \ifdim\hsize>\wd\sizebox \hrule depth1pt\fi}}} \def\lthtmlsetmath{\hbox{\vrule width.1em\kern-.05em\vtop{\vbox{% \kern.1em\kern0.75 pt\hbox{\hglue.17em\copy\sizebox\hglue0.75 pt}}\kern.3pt% \ifdim\dp\sizebox>0pt\kern.1em\fi \kern0.75 pt% \ifdim\hsize>\wd\sizebox \hrule depth1pt\fi}}} \def\centerinlinemath{% \dimen1=\ifdim\ht\sizebox<\dp\sizebox \dp\sizebox\else\ht\sizebox\fi \advance\dimen1by.5pt \vrule width0pt height\dimen1 depth\dimen1 \dp\sizebox=\dimen1\ht\sizebox=\dimen1\relax} \def\lthtmlcheckvsize{\ifdim\ht\sizebox<\vsize \ifdim\wd\sizebox<\hsize\expandafter\hfill\fi \expandafter\vfill \else\expandafter\vss\fi}% \providecommand{\selectlanguage}[1]{}% \makeatletter \tracingstats = 1 \begin{document} \pagestyle{empty}\thispagestyle{empty}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength hsize=\the\hsize}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength vsize=\the\vsize}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength hoffset=\the\hoffset}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength voffset=\the\voffset}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength topmargin=\the\topmargin}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength topskip=\the\topskip}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength headheight=\the\headheight}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength headsep=\the\headsep}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength parskip=\the\parskip}\lthtmltypeout{}% \lthtmltypeout{latex2htmlLength oddsidemargin=\the\oddsidemargin}\lthtmltypeout{}% \makeatletter \if@twoside\lthtmltypeout{latex2htmlLength evensidemargin=\the\evensidemargin}% \else\lthtmltypeout{latex2htmlLength evensidemargin=\the\oddsidemargin}\fi% \lthtmltypeout{}% \makeatother \setcounter{page}{1} \onecolumn % !!! IMAGES START HERE !!! {\newpage\clearpage \lthtmldisplayA{displaymath92}% \begin{displaymath}\partial_t \eta (t) = g(\eta(t),\varphi(t))\end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline94}% $\eta$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline96}% $\varphi$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath98}% \begin{displaymath} \varphi(t) = f(\eta(t),\varphi(t)) \end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline100}% $t$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline102}% $t + \delta t$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline104}% $\delta \eta$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline106}% $\delta \varphi$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath108}% \begin{displaymath}\pmatrix{A & B\cr -C^+ & I-D\cr} \pmatrix{\delta \eta\cr \delta \varphi\cr} = \pmatrix{\Gamma\cr \Omega\cr}\end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline110}% $f$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline112}% $g$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline114}% $\delta t$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath116}% \begin{displaymath}\eqalign{\partial_t \eta (t) &= g(\eta(t),\varphi(t))\cr \varphi(t) &= f(\eta(t),\varphi(t))\cr }\end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath118}% \begin{displaymath}\left\{\eqalign{\partial_t \eta _{prey} &= a \eta _{prey} - a \varphi _{meet} \cr \partial_t \eta _{pred} &= -c \eta _{pred} + c \varphi _{meet}\cr}\right.\end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath120}% \begin{displaymath}\varphi _{meet} = \eta _{prey}\eta _{pred}\end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline122}% $a$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline124}% $c$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline126}% $\varphi_{meet}$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline128}% $\eta_{prey}$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline130}% $\eta_{pred}$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline134}% $\varphi=f(\eta(t-dt)+d\varphi$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline136}% $d\varphi$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline138}% $\varphi=f(\eta),\varphi)$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline140}% $10^{-3}$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath142}% \begin{displaymath}\partial_{\eta} g(\eta(t),\varphi(t)); \end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath144}% \begin{displaymath}\partial_{\varphi} g(\eta(t),\varphi(t)); \end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath146}% \begin{displaymath}\partial_{\eta} f(\eta(t),\varphi(t)); \end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath148}% \begin{displaymath}\partial_{\varphi} f(\eta(t),\varphi(t)); \end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline150}% $(I-D)$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline152}% $k$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath154}% \begin{displaymath}\left\{\eqalign{\partial_t \eta _{k} ^{pos} &= \eta _{k} ^{vel} \cr \partial_t \eta _{k} ^{vel} &= ( \varphi_k ^{spr} -\varphi _{k+1} ^{spr} + \varphi _{k} ^{dmp}-\varphi _{k+1} ^{dmp})\,/m_k \cr}\right.\end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath156}% \begin{displaymath}\left\{\eqalign{ \varphi_k ^{spr} &= -k_k (\eta _{k} ^{pos}- \eta _{k-1} ^{pos})\cr \varphi_k ^{spr} &= -d_k (\eta _{k} ^{vel}- \eta _{k-1} ^{vel}) \cr}\right.\end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath158}% \begin{displaymath}\left\{\eqalign{\eta ^{pos}_{0} &= 0\cr \eta ^{vel}_{0} &= 0\cr \varphi ^{spr}_{N+1} &= 0\cr \varphi ^{dmp}_{N+1} &= 0\cr}\right.\end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline160}% $m_k$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline162}% $r_k$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline164}% $d_k$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline166}% $N$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline168}% $N+1$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath170}% \begin{displaymath}\eqalign{\partial_x f^g &= g f^{g-1}\partial_x f + f^g \log f\partial_x g\cr &= f^{g-1}(g\partial_x f + f\partial_x g)\cr}\end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline172}% $x/\Delta$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline174}% $\omega$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline176}% $h$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath178}% \begin{displaymath} \omega = h ( \eta , \varphi) \end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline180}% $\eta_1(t)$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline182}% $\eta_1(t=0)$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline184}% $t=0$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline186}% $\phi_{j}(t)$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline188}% $\eta_i(t=0)$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline190}% $h(t)$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline192}% $J$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline194}% $T$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath196}% \begin{displaymath} J = \psi[\eta(T),\varphi(T) ,h(T)] + \int_0 ^T {l[\eta(\tau),\varphi(\tau),h(\tau)]}\, d\tau \end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline198}% $\psi$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline200}% $l$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath202}% \begin{displaymath}\eqalign{ \partial_t \eta (t) &= g(\eta(t),\varphi(t)) + W(t) \mu\cr \varphi(t) &= f(\eta(t),\varphi(t))\cr \omega(t) &= h ( \eta(t) , \varphi(t)) + \nu\cr }\end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline204}% $t=s_i$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline206}% $\mu$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline208}% $Q$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline210}% $\nu$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline212}% $R$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline214}% $W$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath216}% \begin{displaymath}\left\{\eqalign{ \partial_t \eta_1 &= a_{11} \eta_1 + a_{12} \varphi_2 + a_{13} \varphi_3 + W_{11} \mu_1 + W_{12} \mu_2\cr \partial_t \eta_2 &= a_{21} \varphi_1 + a_{22} \eta_2 + a_{23} \varphi_3 + W_{21} \mu_1 + W_{22} \mu_2\cr \partial_t \eta_3 &= a_{31} \varphi_1 + a_{32} \varphi_2 + a_{33} \eta_3 + W_{31} \mu_1 + W_{32} \mu_2 }\right.\end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath218}% \begin{displaymath}\left\{\eqalign{ \varphi _1 &= \eta _1\cr \varphi _2 &= \eta _2\cr \varphi _3 &= \eta _3 }\right.\end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath220}% \begin{displaymath}\left\{\eqalign{ \omega _1 &= \varphi _1 + \nu_1\cr \omega _2 &= \eta _2 + \nu_2 \cr \omega _3 &= \eta _3 + \nu_3 }\right.\end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline222}% $g(\tau)$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline224}% $\tau$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline226}% $g(\tau;t)$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline228}% $2$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline232}% $0.2$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline234}% $\sqrt{\sqrt{2}}$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline236}% $g(t,\tau)$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline238}% $A_{st}$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline240}% $A_{st} + A_{st}^\dagger$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmldisplayA{displaymath242}% \begin{displaymath} U w V^\dagger \end{displaymath}% \lthtmldisplayZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline244}% $U$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline246}% $w$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline248}% $V$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline250}% $\Phi(t+\delta t,t)=\exp{A_{st} \delta t}$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline252}% $\Phi$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} {\newpage\clearpage \lthtmlinlinemathA{tex2html_wrap_inline254}% $\Phi(t,0)$% \lthtmlinlinemathZ \lthtmlcheckvsize\clearpage} \end{document} texi2html-1.82/test/misc/res/mini_ker_l2h/mini_ker_l2h.html0000644000175000017500000005617511264347115025547 0ustar flichtenheldflichtenheld mini_ker_l2h

    \begin{displaymath}\partial_t \eta (t) = g(\eta(t),\varphi(t))\end{displaymath}

    $\eta$ $\varphi$

    \begin{displaymath}
\varphi(t) = f(\eta(t),\varphi(t))
\end{displaymath}

    $t$ $t + \delta t$ $\delta \eta$ $\delta \varphi$

    \begin{displaymath}\pmatrix{A & B\cr
-C^+ & I-D\cr} \pmatrix{\delta \eta\cr
\delta \varphi\cr} = \pmatrix{\Gamma\cr
\Omega\cr}\end{displaymath}

    $f$ $g$ $\delta t$

    \begin{displaymath}\eqalign{\partial_t \eta (t) &= g(\eta(t),\varphi(t))\cr
\varphi(t) &= f(\eta(t),\varphi(t))\cr
}\end{displaymath}


    \begin{displaymath}\left\{\eqalign{\partial_t \eta _{prey} &= a \eta _{prey} - a...
... \eta _{pred} &= -c \eta _{pred} + c \varphi _{meet}\cr}\right.\end{displaymath}


    \begin{displaymath}\varphi _{meet} = \eta _{prey}\eta _{pred}\end{displaymath}

    $a$ $c$ $\varphi_{meet}$ $\eta_{prey}$ $\eta_{pred}$ $\delta \eta$ $\varphi=f(\eta(t-dt)+d\varphi$ $d\varphi$ $\varphi=f(\eta),\varphi)$ $10^{-3}$

    \begin{displaymath}\partial_{\eta} g(\eta(t),\varphi(t));
\end{displaymath}


    \begin{displaymath}\partial_{\varphi} g(\eta(t),\varphi(t));
\end{displaymath}


    \begin{displaymath}\partial_{\eta} f(\eta(t),\varphi(t));
\end{displaymath}


    \begin{displaymath}\partial_{\varphi} f(\eta(t),\varphi(t));
\end{displaymath}

    $(I-D)$ $k$

    \begin{displaymath}\left\{\eqalign{\partial_t \eta _{k} ^{pos} &= \eta _{k} ^{ve...
... + \varphi _{k} ^{dmp}-\varphi _{k+1} ^{dmp})\,/m_k \cr}\right.\end{displaymath}


    \begin{displaymath}\left\{\eqalign{
\varphi_k ^{spr} &= -k_k (\eta _{k} ^{pos}- ...
...spr} &= -d_k (\eta _{k} ^{vel}- \eta _{k-1} ^{vel})
\cr}\right.\end{displaymath}


    \begin{displaymath}\left\{\eqalign{\eta ^{pos}_{0} &= 0\cr
\eta ^{vel}_{0} &= 0\...
...arphi ^{spr}_{N+1} &= 0\cr
\varphi ^{dmp}_{N+1} &= 0\cr}\right.\end{displaymath}

    $m_k$ $r_k$ $d_k$ $N$ $N+1$

    \begin{displaymath}\eqalign{\partial_x f^g &= g f^{g-1}\partial_x f + f^g \log f\partial_x g\cr
&= f^{g-1}(g\partial_x f + f\partial_x g)\cr}\end{displaymath}

    $x/\Delta$ $\omega$ $h$

    \begin{displaymath}
\omega = h ( \eta , \varphi)
\end{displaymath}

    $\eta_1(t)$ $\eta_1(t=0)$ $t=0$ $\phi_{j}(t)$ $\eta_i(t=0)$ $h(t)$ $J$ $T$

    \begin{displaymath}
J = \psi[\eta(T),\varphi(T) ,h(T)] + \int_0 ^T {l[\eta(\tau),\varphi(\tau),h(\tau)]}\, d\tau
\end{displaymath}

    $\psi$ $l$

    \begin{displaymath}\eqalign{
\partial_t \eta (t) &= g(\eta(t),\varphi(t)) + W(t)...
...varphi(t))\cr
\omega(t) &= h ( \eta(t) , \varphi(t)) + \nu\cr
}\end{displaymath}

    $t=s_i$ $\mu$ $Q$ $\nu$ $R$ $W$

    \begin{displaymath}\left\{\eqalign{
\partial_t \eta_1 &= a_{11} \eta_1 + a_{12} ...
...varphi_2 + a_{33} \eta_3 + W_{31} \mu_1 + W_{32} \mu_2
}\right.\end{displaymath}


    \begin{displaymath}\left\{\eqalign{
\varphi _1 &= \eta _1\cr
\varphi _2 &= \eta _2\cr
\varphi _3 &= \eta _3
}\right.\end{displaymath}


    \begin{displaymath}\left\{\eqalign{
\omega _1 &= \varphi _1 + \nu_1\cr
\omega _2 &= \eta _2 + \nu_2 \cr
\omega _3 &= \eta _3 + \nu_3
}\right.\end{displaymath}

    $g(\tau)$ $\tau$ $g(\tau;t)$ $2$ $\tau$ $0.2$ $\sqrt{\sqrt{2}}$ $g(t,\tau)$ $A_{st}$ $A_{st} + A_{st}^\dagger$

    \begin{displaymath}
U w V^\dagger
\end{displaymath}

    $U$ $w$ $V$ $\Phi(t+\delta t,t)=\exp{A_{st} \delta t}$ $\Phi$ $\Phi(t,0)$

    texi2html-1.82/test/misc/res/mini_ker_l2h/mini_ker_l2h_images.pl0000644000175000017500000004305211264347115026531 0ustar flichtenheldflichtenheld# LaTeX2HTML # Associate images original text with physical files. $key = q/varphi;MSF=1.5;AAT/; $cached_env_img{$key} = q|$\varphi$|; $key = q/U;MSF=1.5;AAT/; $cached_env_img{$key} = q|$U$|; $key = q/0.2;MSF=1.5;AAT/; $cached_env_img{$key} = q|$0.2$|; $key = q/g;MSF=1.5;AAT/; $cached_env_img{$key} = q|$g$|; $key = q/phi_{j}(t);MSF=1.5;AAT/; $cached_env_img{$key} = q|$\phi_{j}(t)$|; $key = q/t;MSF=1.5;AAT/; $cached_env_img{$key} = q|$t$|; $key = q/{displaymath}left{eqalign{varphi_1&=eta_1crvarphi_2&=eta_2crvarphi_3&=eta_3}right.{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}\left\{\eqalign{
\varphi _1 &= \eta _1\cr
\varphi _2 &= \eta _2\cr
\varphi _3 &= \eta _3
}\right.\end{displaymath}|; $key = q/R;MSF=1.5;AAT/; $cached_env_img{$key} = q|$R$|; $key = q/10^{-3};MSF=1.5;AAT/; $cached_env_img{$key} = q|$10^{-3}$|; $key = q/eta_i(t=0);MSF=1.5;AAT/; $cached_env_img{$key} = q|$\eta_i(t=0)$|; $key = q/{displaymath}partial_{varphi}g(eta(t),varphi(t));{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}\partial_{\varphi} g(\eta(t),\varphi(t));
\end{displaymath}|; $key = q/r_k;MSF=1.5;AAT/; $cached_env_img{$key} = q|$r_k$|; $key = q/2;MSF=1.5;AAT/; $cached_env_img{$key} = q|$2$|; $key = q/{displaymath}eqalign{partial_xf^g&=gf^{g-1}partial_xf+f^glogfpartial_xgcr&=f^{g-1}(gpartial_xf+fpartial_xg)cr}{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}\eqalign{\partial_x f^g &= g f^{g-1}\partial_x f + f^g \log f\partial_x g\cr
&= f^{g-1}(g\partial_x f + f\partial_x g)\cr}\end{displaymath}|; $key = q/k;MSF=1.5;AAT/; $cached_env_img{$key} = q|$k$|; $key = q/eta_{prey};MSF=1.5;AAT/; $cached_env_img{$key} = q|$\eta_{prey}$|; $key = q/eta_{pred};MSF=1.5;AAT/; $cached_env_img{$key} = q|$\eta_{pred}$|; $key = q/xslashDelta;MSF=1.5;AAT/; $cached_env_img{$key} = q|$x/\Delta$|; $key = q/psi;MSF=1.5;AAT/; $cached_env_img{$key} = q|$\psi$|; $key = q/{displaymath}partial_{eta}g(eta(t),varphi(t));{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}\partial_{\eta} g(\eta(t),\varphi(t));
\end{displaymath}|; $key = q/Q;MSF=1.5;AAT/; $cached_env_img{$key} = q|$Q$|; $key = q/{displaymath}left{eqalign{omega_1&=varphi_1+nu_1cromega_2&=eta_2+nu_2cromega_3&=eta_3+nu_3}right.{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}\left\{\eqalign{
\omega _1 &= \varphi _1 + \nu_1\cr
\omega _2 &= \eta _2 + \nu_2 \cr
\omega _3 &= \eta _3 + \nu_3
}\right.\end{displaymath}|; $key = q/{displaymath}left{eqalign{partial_teta_{k}^{pos}&=eta_{k}^{vel}crpartial_teta_{k+varphi_{k}^{dmp}-varphi_{k+1}^{dmp}),slashm_kcr}right.{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}\left\{\eqalign{\partial_t \eta _{k} ^{pos} &= \eta _{k} ^{ve...
... + \varphi _{k} ^{dmp}-\varphi _{k+1} ^{dmp}) /m_k \cr}\right.\end{displaymath}|; $key = q/{displaymath}left{eqalign{varphi_k^{spr}&=-k_k(eta_{k}^{pos}-eta_{k-1}^{pos})crvi_k^{spr}&=-d_k(eta_{k}^{vel}-eta_{k-1}^{vel})cr}right.{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}\left\{\eqalign{
\varphi_k ^{spr} &= -k_k (\eta _{k} ^{pos}- ...
...spr} &= -d_k (\eta _{k} ^{vel}- \eta _{k-1} ^{vel})
\cr}\right.\end{displaymath}|; $key = q/{displaymath}eqalign{partial_teta(t)&=g(eta(t),varphi(t))crvarphi(t)&=f(eta(t),varphi(t))cr}{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}\eqalign{\partial_t \eta (t) &= g(\eta(t),\varphi(t))\cr
\varphi(t) &= f(\eta(t),\varphi(t))\cr
}\end{displaymath}|; $key = q/{displaymath}left{eqalign{partial_teta_{prey}&=aeta_{prey}-avarphi_{meet}crpartial_teta_{pred}&=-ceta_{pred}+cvarphi_{meet}cr}right.{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}\left\{\eqalign{\partial_t \eta _{prey} &= a \eta _{prey} - a...
... \eta _{pred} &= -c \eta _{pred} + c \varphi _{meet}\cr}\right.\end{displaymath}|; $key = q/mu;MSF=1.5;AAT/; $cached_env_img{$key} = q|$\mu$|; $key = q/A_{st}+A_{st}^dagger;MSF=1.5;AAT/; $cached_env_img{$key} = q|$A_{st} + A_{st}^\dagger$|; $key = q/t=s_i;MSF=1.5;AAT/; $cached_env_img{$key} = q|$t=s_i$|; $key = q/l;MSF=1.5;AAT/; $cached_env_img{$key} = q|$l$|; $key = q/{displaymath}varphi(t)=f(eta(t),varphi(t)){displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}
\varphi(t) = f(\eta(t),\varphi(t))
\end{displaymath}|; $key = q/{displaymath}partial_teta(t)=g(eta(t),varphi(t)){displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}\partial_t \eta (t) = g(\eta(t),\varphi(t))\end{displaymath}|; $key = q/varphi=f(eta(t-dt)+dvarphi;MSF=1.5;AAT/; $cached_env_img{$key} = q|$\varphi=f(\eta(t-dt)+d\varphi$|; $key = q/d_k;MSF=1.5;AAT/; $cached_env_img{$key} = q|$d_k$|; $key = q/h(t);MSF=1.5;AAT/; $cached_env_img{$key} = q|$h(t)$|; $key = q/tau;MSF=1.5;AAT/; $cached_env_img{$key} = q|$\tau$|; $key = q/V;MSF=1.5;AAT/; $cached_env_img{$key} = q|$V$|; $key = q/eta_1(t=0);MSF=1.5;AAT/; $cached_env_img{$key} = q|$\eta_1(t=0)$|; $key = q/nu;MSF=1.5;AAT/; $cached_env_img{$key} = q|$\nu$|; $key = q/h;MSF=1.5;AAT/; $cached_env_img{$key} = q|$h$|; $key = q/T;MSF=1.5;AAT/; $cached_env_img{$key} = q|$T$|; $key = q/{displaymath}J=psi[eta(T),varphi(T),h(T)]+int_0^T{l[eta(tau),varphi(tau),h(tau)]},dtau{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}
J = \psi[\eta(T),\varphi(T) ,h(T)] + \int_0 ^T {l[\eta(\tau),\varphi(\tau),h(\tau)]}  d\tau
\end{displaymath}|; $key = q/g(tau;t);MSF=1.5;AAT/; $cached_env_img{$key} = q|$g(\tau;t)$|; $key = q/Phi(t+deltat,t)=exp{A_{st}deltat};MSF=1.5;AAT/; $cached_env_img{$key} = q|$\Phi(t+\delta t,t)=\exp{A_{st} \delta t}$|; $key = q/omega;MSF=1.5;AAT/; $cached_env_img{$key} = q|$\omega$|; $key = q/eta;MSF=1.5;AAT/; $cached_env_img{$key} = q|$\eta$|; $key = q/{displaymath}pmatrix{A&Bcr-C^+&I-Dcr}pmatrix{deltaetacrdeltavarphicr}=pmatrix{GammacrOmegacr}{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}\pmatrix{A & B\cr
-C^+ & I-D\cr} \pmatrix{\delta \eta\cr
\delta \varphi\cr} = \pmatrix{\Gamma\cr
\Omega\cr}\end{displaymath}|; $key = q/g(tau);MSF=1.5;AAT/; $cached_env_img{$key} = q|$g(\tau)$|; $key = q/N+1;MSF=1.5;AAT/; $cached_env_img{$key} = q|$N+1$|; $key = q/g(t,tau);MSF=1.5;AAT/; $cached_env_img{$key} = q|$g(t,\tau)$|; $key = q/{displaymath}left{eqalign{partial_teta_1&=a_{11}eta_1+a_{12}varphi_2+a_{13}varpha_{32}varphi_2+a_{33}eta_3+W_{31}mu_1+W_{32}mu_2}right.{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}\left\{\eqalign{
\partial_t \eta_1 &= a_{11} \eta_1 + a_{12} ...
...varphi_2 + a_{33} \eta_3 + W_{31} \mu_1 + W_{32} \mu_2
}\right.\end{displaymath}|; $key = q/N;MSF=1.5;AAT/; $cached_env_img{$key} = q|$N$|; $key = q/deltavarphi;MSF=1.5;AAT/; $cached_env_img{$key} = q|$\delta \varphi$|; $key = q/t+deltat;MSF=1.5;AAT/; $cached_env_img{$key} = q|$t + \delta t$|; $key = q/J;MSF=1.5;AAT/; $cached_env_img{$key} = q|$J$|; $key = q/W;MSF=1.5;AAT/; $cached_env_img{$key} = q|$W$|; $key = q/Phi(t,0);MSF=1.5;AAT/; $cached_env_img{$key} = q|$\Phi(t,0)$|; $key = q/c;MSF=1.5;AAT/; $cached_env_img{$key} = q|$c$|; $key = q/{displaymath}varphi_{meet}=eta_{prey}eta_{pred}{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}\varphi _{meet} = \eta _{prey}\eta _{pred}\end{displaymath}|; $key = q/{displaymath}left{eqalign{eta^{pos}_{0}&=0creta^{vel}_{0}&=0crvarphi^{spr}_{N+1}&=0crvarphi^{dmp}_{N+1}&=0cr}right.{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}\left\{\eqalign{\eta ^{pos}_{0} &= 0\cr
\eta ^{vel}_{0} &= 0\...
...arphi ^{spr}_{N+1} &= 0\cr
\varphi ^{dmp}_{N+1} &= 0\cr}\right.\end{displaymath}|; $key = q/(I-D);MSF=1.5;AAT/; $cached_env_img{$key} = q|$(I-D)$|; $key = q/w;MSF=1.5;AAT/; $cached_env_img{$key} = q|$w$|; $key = q/a;MSF=1.5;AAT/; $cached_env_img{$key} = q|$a$|; $key = q/{displaymath}UwV^dagger{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}
U w V^\dagger
\end{displaymath}|; $key = q/A_{st};MSF=1.5;AAT/; $cached_env_img{$key} = q|$A_{st}$|; $key = q/deltaeta;MSF=1.5;AAT/; $cached_env_img{$key} = q|$\delta \eta$|; $key = q/dvarphi;MSF=1.5;AAT/; $cached_env_img{$key} = q|$d\varphi$|; $key = q/{displaymath}eqalign{partial_teta(t)&=g(eta(t),varphi(t))+W(t)mucrvarphi(t)&=f(eta(t),varphi(t))cromega(t)&=h(eta(t),varphi(t))+nucr}{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}\eqalign{
\partial_t \eta (t) &= g(\eta(t),\varphi(t)) + W(t)...
...varphi(t))\cr
\omega(t) &= h ( \eta(t) , \varphi(t)) + \nu\cr
}\end{displaymath}|; $key = q/eta_1(t);MSF=1.5;AAT/; $cached_env_img{$key} = q|$\eta_1(t)$|; $key = q/deltat;MSF=1.5;AAT/; $cached_env_img{$key} = q|$\delta t$|; $key = q/t=0;MSF=1.5;AAT/; $cached_env_img{$key} = q|$t=0$|; $key = q/varphi=f(eta),varphi);MSF=1.5;AAT/; $cached_env_img{$key} = q|$\varphi=f(\eta),\varphi)$|; $key = q/sqrt{sqrt{2}};MSF=1.5;AAT/; $cached_env_img{$key} = q|$\sqrt{\sqrt{2}}$|; $key = q/f;MSF=1.5;AAT/; $cached_env_img{$key} = q|$f$|; $key = q/varphi_{meet};MSF=1.5;AAT/; $cached_env_img{$key} = q|$\varphi_{meet}$|; $key = q/{displaymath}omega=h(eta,varphi){displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}
\omega = h ( \eta , \varphi)
\end{displaymath}|; $key = q/{displaymath}partial_{eta}f(eta(t),varphi(t));{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}\partial_{\eta} f(\eta(t),\varphi(t));
\end{displaymath}|; $key = q/m_k;MSF=1.5;AAT/; $cached_env_img{$key} = q|$m_k$|; $key = q/{displaymath}partial_{varphi}f(eta(t),varphi(t));{displaymath};MSF=1.5;AAT/; $cached_env_img{$key} = q|\begin{displaymath}\partial_{\varphi} f(\eta(t),\varphi(t));
\end{displaymath}|; $key = q/Phi;MSF=1.5;AAT/; $cached_env_img{$key} = q|$\Phi$|; 1; texi2html-1.82/test/misc/res/mini_ker_l2h/mini_ker_l2h_labels.pl0000644000175000017500000000021011264347115026513 0ustar flichtenheldflichtenheld# LaTeX2HTML # Associate labels original text with physical files. 1; # LaTeX2HTML # labels from external_latex_labels array. 1; texi2html-1.82/test/misc/res/testkb/0000755000175000017500000000000011264347115021233 5ustar flichtenheldflichtenheldtexi2html-1.82/test/misc/res/testkb/testkb.20000644000175000017500000000000011264347115022600 0ustar flichtenheldflichtenheldtexi2html-1.82/test/misc/res/testkb/testkb.html0000644000175000017500000007650111264347115023426 0ustar flichtenheldflichtenheld Test for @def stuff
    [ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

    1. Test 1

    Hier kann eine Erklärung zum Thema stehen oder auch nicht. Noch mehr erklärungen zu dem Thema.


    [ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

    2. Class

    Here you can read many things I need for this documentation. But more and more of this exploration can be done here.


    [ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

    2.1 Overview

    Das ist ein Test Roman Text in einer Umgebung

    Hier ist normaler Text. Hier sollte keine Einrückung stattfinden. Sondern eher ein normaler umbruch. Somit kann es hier wieder weitergehen. Oder sehe ich da was falsch. Hier ist normaler Text. Hier sollte keine Einrückung stattfinden. Sondern eher ein normaler umbruch. Somit kann es hier wieder weitergehen. Oder sehe ich da was falsch. Hier ist normaler Text. Hier sollte keine Einrückung stattfinden. Sondern eher ein normaler umbruch. Somit kann es hier wieder weitergehen. Oder sehe ich da was falsch. Hier ist normaler Text. Hier sollte keine Einrückung stattfinden. Sondern eher ein normaler umbruch. Somit kann es hier wieder weitergehen. Oder sehe ich da was falsch.

    dcvKat of dcvClass: dcvName

    Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defcv. Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defcv. Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defcv. Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defcv. Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defcv. Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defcv. Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defcv. Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defcv.

    dfnKat: dfnName (dfnArgumente)

    Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deffn. Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deffn. Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deffn. Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deffn.

    • Erstens
    • Zweitens
    • Drittens

    Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deffn. Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deffn.

     
    Das ist ein Beispiel in HTML
    Das ist ein Beispiel in HTML
    Das ist ein Beispiel in HTML
    Das ist ein Beispiel in HTML
    

    Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deffn. Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deffn.

    dfnKat1: dfnName1 (dfnArgumente11)
    dfnKat2: dfnName2 (dfnArgumente12)
    dfnKat3: dfnName3 (dfnArgumente13)

    Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deffn. Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deffn.

    Instance Variable of divClass: divExemplarVar

    Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defivar. Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defivar.

    Macro: dmcName (dmcArgumente)

    Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defmac. Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defmac.

    Method on dmeClass: dmName (dmArguments)

    Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defmethod. Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defmethod.

    dopKat on dopClass: dopName (dopArgumente)

    Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defop. Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defop.

    User Option: dptName

    Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defopt. Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defopt.

    Special Form: dspName (dspArgument)

    Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defspec. Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defspec.

    dtpKat: dtpType (dtpA1 dtpA2)

    Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftp. Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftp.

    PUBLIC: int EditLine (int col, int row)

    Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypefn. Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypefn.

    Function: int FunktionEins (int col, int row)

    Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypefun. Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypefun.

    Method on dtmClass: int dtmName (int col, int row)

    Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypemethod. Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypemethod.

    Variable: DataType VarName

    Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypevar. Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypevar.

    Instance Variable of dtiv: DataType VarName

    Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypeivar. Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypeivar.

    dtv: DataType VarName

    Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypevr. Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypevr.

    Function: FuntionName (Argumente)

    Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defun. Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defun.

    Variable: VariablenName

    Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defvar. Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defvar.

    dvrKat: dvrName

    Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defvr. Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu defvr.

    dtypeopCat on deftypeopClass: deftypeopType deftypeopName deftypeopArgs

    Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypeop. Hier muß in HTML eine Tabelle erzeugt werden. Hier ist das ok. Beschreibung zu deftypeop.


    [ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

    A. Indizes


    [ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

    A.1 Konzept Index


    [ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

    A.2 Funktionen Index

    Springe zu:   D   E   F  
    Indexeintrag Abschnitt

    D
    deftypeopName on deftypeopClass2.1 Overview
    dfnName2.1 Overview
    dfnName12.1 Overview
    dfnName22.1 Overview
    dfnName32.1 Overview
    dmcName2.1 Overview
    dmName on dmeClass2.1 Overview
    dopName on dopClass2.1 Overview
    dspName2.1 Overview
    dtmName on dtmClass2.1 Overview

    E
    EditLine2.1 Overview

    F
    FunktionEins2.1 Overview
    FuntionName2.1 Overview

    Springe zu:   D   E   F  

    [ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

    A.3 Programme Index


    [ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

    A.4 Tasten Index


    [ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

    A.5 Var Index

    Springe zu:   D   V  
    Indexeintrag Abschnitt

    D
    dcvName2.1 Overview
    divExemplarVar2.1 Overview
    dptName2.1 Overview
    dvrName2.1 Overview

    V
    VariablenName2.1 Overview
    VarName2.1 Overview
    VarName2.1 Overview
    VarName of dtiv2.1 Overview

    Springe zu:   D   V  

    [Anfang] [Inhalt] [Index] [ ? ]

    Inhaltsverzeichnis


    [Anfang] [Inhalt] [Index] [ ? ]

    Über dieses Dokument

    Dieses Dokument wurde erzeugt von a tester am a sunny day durch texi2html.

    Die Links in der Navigationsleiste haben die folgende Bedeutung:

    Button Name Gehe zu Von 1.2.3 gehe zu
    [ < ] Zurück Voriger Abschnitt in Lesereihenfolge 1.2.2
    [ > ] Nach vorne Nächster Abschnitt in Lesereihenfolge 1.2.4
    [ << ] FastBack Anfang dieses oder des letzten Kapitels 1
    [ Nach oben ] Nach oben Abschnitt nach oben 1.2
    [ >> ] FastForward Nächstes Kapitel 2
    [Anfang] Anfang Titelseite des Dokuments  
    [Inhalt] Inhalt Inhaltsverzeichnis  
    [Index] Index Index  
    [ ? ] Über Über (Hilfe)  

    wobei das Beispiel annimmt, dass die aktuelle Position bei Unterabschnitt 1-2-3 in einem Dokument mit folgender Struktur liegt:

    • 1. Abschnitt 1
      • 1.1 Unterabschnitt 1-1
        • ...
      • 1.2 Unterabschnitt 1-2
        • 1.2.1 Unterabschnitt 1-2-1
        • 1.2.2 Unterabschnitt 1-2-2
        • 1.2.3 Unterabschnitt 1-2-3     <== Aktuelle Position
        • 1.2.4 Unterabschnitt 1-2-4
      • 1.3 Unterabschnitt 1-3
        • ...
      • 1.4 Unterabschnitt 1-4

    Dieses Dokument wurde erzeugt von a tester am a sunny day durch texi2html.

    texi2html-1.82/test/misc/verbatim_html.texi0000644000175000017500000001357211264347115022706 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top,First node,(dir) @top Tests @menu * First node:: node 1 * description: node @'{a}. node with braces * node: (manual)A node. node in another manual a verbatim in menu comment @verbatim verbatim on same line than @verbatim bidule @end verbatim * node d@'a:: node without braces @end menu Tests for environments not matching @quotation A quotation @end cartouche @deffn {Function Reference} print_navigation $filehandle Text @end deftypefun @table @item item line @end vtable @table @emph @item ref @example example @end display @end table @node First node @chapter first node chapter ref to a non existing node@ref{bidule}. a 2 paragraphs sample @samp{in first paragraph in second}. a 3 paragraphs sample @samp{in first paragraph in second in third}. Unknown macro @unknown{ first paragraph second paragraph} @unknown2{ first paragraph second paragraph third} Unknown thing @thing{} A list with bullet Before itemize, in that case @@bullet isn'right, one needs @@bullet@{@} (in info) @itemize @bullet{} @c segfault <- @item on the same line that itemize @item on the same line than item some text @item more text @end itemize A list with text before first @@item: @itemize @bullet text @item more text @end itemize @ifhtml a verbatim, not first on the line @verbatim text following @verbatim text @@@@ @ text before @end verbatim @end verbatim Text following end verbatim, must be exactly one space between end and verbatim. @@end verbatim doesn't need to begin at beginning of line. @end ifhtml In tex, @@end verbatim must be on its own on a line. A verbatim with begin and end on its own line @verbatim verbatim @samp{item} @end verbatim @ifhtml Now html @html some html @end html bidule ignored @@end html begins the line, and there must be exactly one space between @@end and html and thing following @@end html are ignored in info. Strangely the empty line following @@end html is ignored but spaces are inserted. @end ifhtml Now html valid for @TeX{} @html some html @end html Some text one the line following @@end html And html on it's own line @html an html tt @end html A sc: @sc{ieee}, and another one in example: @example @sc{aeei} @end example @ifhtml ignore @ignore ignored @end ignore bidule ignore @end ifhtml Ignore is the same than @@html. Now ifnothtml on same line @ifnothtml text following ifnothtml text following an empty line text before end ifnothtml @end ifnothtml @@end ifnothtml doesn't need to begin the line, and there can be more than one space between @@end and ifnothtml, but nothing more on the line. Text on the line before ifnothtml with text following, @ifnothtml text following ifnothtml, @end ifnothtml Text on the line following ifnothtml. Text on the line before ifnothtml without text following, @ifnothtml some text on a line between ifnothtml and end ifnothtml, @end ifnothtml Text on the line following ifnothtml. Text on the line before ifnothtml, @ifnothtml @end ifnothtml Text on the line following empty ifnothtml @TeX{} has problems with the ftable. @ifhtml an ftable on same line @ftable @bullet @item fun1 @itemx fun2 fun1 et fun2 @item more fun text on the same line than end @end ftable works like @@ifnothtml @end ifhtml @item outside format. @tab outside format. @multitable {@samp{bidule}} truc before table beginning @item first cell @tab ignored cell @itemx second row @end multitable before bad multitable @multitable 6 7 @item 1-1 @tab 1-2 @item@tab@item 3-1 @tab 3-2 @end multitable right multitable @multitable @columnfractions 6 7 @item 1-1 @tab 1-2 @item@tab@item 3-1 @tab 3-2 @end multitable Columnfraction multitable with an ignored cell @multitable @columnfractions 0.3 0.4 @item 1-1 @tab 1-2 @tab 1-3 (ignored) @end multitable multitable beginning with @@tab @multitable {@samp{@verb{.something.}}} {sec} @tab after first tab @item new line @end multitable A flushright @flushright some text flushed right @end flushright A center @center Centered line And a center after empty line @center centered line after empty line And a center at end of line @center And an empty center @center An empty flushright @flushright @end flushright A verb follows: @verb{' a little very little verb '} another with space as delimiter @verb{ what@@ } @@verb followed by end of line seems incorrect. Now verb delimited with *, with an empty line, a comment and @@samp: @verb{*with verb @c comment and samp @samp{text } *} @node node @'{a}, node d@'a, First node, Top @chapter node 'a with braces In the node with braces A footnote with an empty line within. @footnote{with empty line before before} Now a ref with a footnote within, there aren't 2 paragraphes in the footnote in that case in info. tex doesn't like the paragraph break in the ref @ifhtml @ref{First node, within ref a footnote @footnote{with empty line before before}}. Conversely, a ref in a footnote @footnote{ This is a ref @ref{First node} } A footnote with an example @footnote{ @example An example @end example } @end ifhtml Some @@verbatim, @@verb and @@ignore within an xref, very hard for @TeX{}: @ifhtml @xref{First node, @verbatim some verbatim @@ text within an xref @end verbatim and now verb delimited with * with an empty line a comment and @@samp @verb{*with verb @c comment and samp @samp{text } next line *} last ignored sentence @ignore ignore me causing problems to makeinfo @end ignore }. @end ifhtml @xref{First node, no verb}. @node node d@'a,, node @'{a}, Top @chapter node 'a without braces @menu * node:: node @end menu @node node,,, @section node A node with gggggggg before example @example after example the example before end example @end example after end example Text only after the end @example Example @end example text following end example. @deffn category name args Deffn. @end deffn text following end deffn. @contents @bye texi2html-1.82/test/misc/tests.txt0000644000175000017500000000066511264347115021060 0ustar flichtenheldflichtenheldtexi testkb.texi texi verbatim_html.texi texi viper.texi -ifinfo testkb testkb.texi verbatim_html verbatim_html.texi viper_unsplit viper.texi -ifinfo viper_chapter_split viper.texi -split chapter -ifinfo formatting_html32 ../coverage/formatting.texi -init html32.init mini_ker_l2h ../manuals/mini_ker.texi -l2h -expand tex -init l2h_tmp_dir.init mini_ker_httex ../manuals/mini_ker.texi -init tex4ht.init --iftex templates templates.texi texi2html-1.82/test/misc/templates.texi0000644000175000017500000006445111264347115022051 0ustar flichtenheldflichtenheld\input texinfo @c -*- mode: texinfo; coding: iso-8859-1-unix -*- @c %**start of header @setfilename templates.info @documentencoding iso-8859-1 @documentlanguage en @settitle Emacs template package documentation, version 3.1c @c %**end of header @alias kbdmenu = kbd @alias codetpl = samp @alias codevar = code @copying This is the Emacs template package documentation, version 3.1c Copyright @copyright{} 2008 Christoph Wedler, Vincent Belache. @quotation Permission is granted to ... @end quotation @end copying @dircategory Emacs @direntry * Templates: (templates). Creating templates for files creation. @end direntry @titlepage @title Emacs template package manual @subtitle Details of Package Template @author Christoph Wedler @c The following two commands @c start the copyright page. @page @vskip 0pt plus 1filll @insertcopying Published by ... @end titlepage @ifnottex @node Top,,,(dir)top @top Top node. This is the manual of Emacs template package @end ifnottex @menu * Overview:: Overview. * Installation:: how to install the template package. * Basics:: How to make and use templates. * Advanced:: Templates for advanced users. * Indexes:: Indexes for commands, keyword, and variable. * News:: News for Package Template. * Acknowledgements:: Acknowledgements. @end menu @node Overview,,,Top @chapter Overview When you create a new file with Emacs, package Template supplies an initial buffer content via a template: a file with normal text and expansion forms. There is a menu to easily create such templates. You can also use new commands to decorate comments and update the buffer contents. The main difference between Template and @ref{Related,other similar packages} is that you can define very flexible templates without having to learn Lisp or changing your Emacs init file. This package does not help Lisp programmers to define complex macros. @itemize @item The template mechanism is hooked into the normal find/open file command. There are also new commands for creating a new file using a template and inserting & expanding a template. @item You do not have to enter the file name of the template file. This package uses a sophisticated search to find the most appropritate template (supporting project- and subproject specific template files). You can change the suggestion, of course. @item A template file can be easily created. Most of the file usually contains simple text; only @dfn{expansion forms} which look like @codetpl{(>>>@var{Key}<<<)} will get replaced. @item There are various useful predefined expansions: set point (the cursor position), mark and registers to the current position; insert various parts of the filename, the user/system name, the current date/time in various formats, and some text to be entered by the user. @item Template-specific expansions can be defined at the end of the template file. There are commands to create these definitions; only complex expansions would require some knowledge of Lisp. @end itemize There is a menu to support the creation of template files. Additionally, this package provides the following features: @itemize @item When saving a buffer, some parts of the buffer contents (header and time stamps) are automatically updated if necessary. @item There are commands to decorate comments with dashes and alike. Works for languages with any comment style, even languages having mixed comments like C++ and Java. @end itemize @node Related,,,Overview @section Packages Related to Template There are template packages of two different categories, which are determined by one question: @emph{What do you want to do with templates?} Do you want to use templates when creating new files, or do you want to insert some stuff during editing (but you are not satisfied with the standard macro mechanism)? Well, templates could be seen as both new-file templates and macro-like template, but the main application of templates determines the answers for the following questions: @itemize @item @emph{How do you define a template?} You can define it by one file per template or by customizing some Emacs variables. The first solution (which is used by package Template) avoids Emacs hacking but might not be optimal if you just want to define complex macros or if you want to use templates to program a new Emacs major-mode. @item @emph{How is an appropriate template selected?} If you want to use complex macro during editing, the answer is clear: the user have to provide the name of the template. For new files, the appropriate template should be automatically selected. But of course, you don't want to loose any flexibility and you don't want to customize your Emacs for every project you start. @item @emph{How do you do "clever" things in the template?} The aims are to have many predefined expansions (e.g., the current date) and to define some non-trivial things without learning Lisp. Any functionality here is the overlapping point of both template categories. @end itemize Here is a little list of related files, collected around 1998, some discarded later (no @abbr{URL}s, no active updating, but you can send me a mail): @itemize @item Package @cite{autoinsert.el} uses templates when creating new files. These templates are defined via files or by customizing Emacs. For each new template you want to introduce, you must customize your Emacs, the selection is restricted to one template per major-mode or regexp match. No predefined expansions; clever things are provided by usual Lisp expressions or the macro-like templates of package @cite{skeleton}. @item Package @cite{skeleton.el} is a Lisp language extension for writing statement skeletons, i.e., you get macro-like Lisp commands. @item Package @cite{tempo.el} helps you defining and using named macro-like templates. Its predefined macros are similar to some predefined expansions of package Template. A specific template is used by html-helper-mode when creating a new html file. (This is turned off with the default installation of package Template.) @item Package @cite{hm--html-menus} provides a command to insert templates editing. These templates are defined via files. There are no predefined expansions (except setting point), non-trivial expansions are defined via Lisp. @end itemize @node Installation,,,Top @chapter Installation @section Installation Instructions @enumerate @item Copy file @file{template/lisp/template.el} into your load-path and byte-compile it. @item Insert the following code into your Emacs init file (@file{~/.emacs}): @lisp (require 'template) (template-initialize) @end lisp @item If you want to customize package Template, use @kbd{M-x customize-group @key{RET} template @key{RET}} or the customize entry in menu @kbdmenu{Options}. @item You might want to copy the template files from directory @file{template/templates/} to @file{~/.templates/} and change them according to your preferences. @end enumerate Installation instructions with further explanations can be found in file @file{template/INSTALL} of the distribution. @node Basics,,,Top @chapter Basics Emacs, template, file template, comment decoration, auto-updating, time stamp, details @menu * menus:: Menus and Key-Bindings. * using:: Using a Template. * finding:: Finding a Template. * creating:: Creating a Template. * decorating:: Decorating a Comment. * updating:: Updating a Buffer. @end menu @node menus,,,Basics @section Menus and Key-Bindings @c -------------------------------------------------------------------------------- For Emacs-21.1+ and XEmacs, this package defines the following menu entries and key-bindings: @itemize @item In menu @kbdmenu{File} , there is a new menu item @kbdmenu{New File Using Template...} . The corresponding command is also bound to the key sequence @kbd{C-x t}. @item At the end of menu @kbdmenu{Cmds} (in XEmacs if it exists) or menu @kbdmenu{Edit} , there is a new submenu @kbdmenu{Template Creation}. @item Enter @kbd{C-x C-=} (command @command{template-single-comment}) to insert dashes and alike into the current line and end the comment. @item Enter @kbd{C-x C-;} (command @command{template-single-comment}) to insert dashes and alike around the current comment block. @item At the end of menu @kbdmenu{Edit} , there is a new submenu @kbdmenu{Comment}. It also contains the two commands just mentioned. @end itemize @c -------------------------------------------------------------------------------- @node using,,,Basics @section Using a Template @c -------------------------------------------------------------------------------- Package Template offers various ways how to use template files: In Emacs, the usual way to create a new file is by typing @kbd{C-x C-f}, using the menu or the toolbar (running command @command{find-file} or @command{ffap}) and entering a non-existent file name. In this case, you will be asked whether to use a template for the new file. You can turn off this feature. @itemize @item Here a first undefined xref @xref{EExpansion}. There is a new command @command{template-new-file} @footnote{for the menu entry and its key-binding type @kbd{C-h f template-new-file}, @xref{EExpansion}} to create a new file using a template. Here, you have the chance to edit the name of the template file. This command also supports file name refinement which is useful to create a file in a series of files like @file{exercise2.tex} etc. @item There is also a command (@kbd{M-x template-expand-template}) to insert a template file into the current buffer and expand its expansion forms. @end itemize For more @command{template-new-file} and @codevar{template-auto-insert}, @xref{Expansion}. @c -------------------------------------------------------------------------------- @node finding,,,Basics @section Finding a Template @c -------------------------------------------------------------------------------- The algorithm for finding the most appropriate template can be best explained with a little example: @itemize @item You have a project @file{~/proj/} with subprojects @file{foo/} and @file{bar/} containing @file{.java} files. @item You want to define a general template for the @file{.java} in your project files, although @file{.java} files in subproject @file{foo/} should use their own template. You also want to define a special template for all files @file{proj.java} in the project. @item Since you do not want to clutter the project directory with template files, you first create a directory @file{~/proj/Templates/}. In this directory, you create new files @file{TEMPLATE.java.tpl} and @file{proj.java.tpl}. In directory @file{~/proj/foo/}, you create a new file @file{TEMPLATE.java.tpl}. @end itemize The creation of the template files in the right directory is already enough for packages Template to find the most appropriate template for a new file: @itemize @item If you create a new file @file{~/proj/foo/abc.java}, this package tries to find a template based on the file extension of the new file. The generic base file name for a template is @file{TEMPLATE} and the additional extension is @file{.tpl}, a file @file{TEMPLATE.java.tpl} exists in @file{~/proj/foo/}, so that file is used as the template. @item If you create a new file @file{~/proj/bar/abc.java}, this package again tries to find @file{TEMPLATE.java.tpl}. Since this file doesn't exist in @file{~/proj/bar/}, it first inspects the subdirectory @file{Templates/} which doesn't exist. The search continues with the parent directory @file{~/proj/} and then its subdirectory @file{Templates/}. Thus @file{~/proj/Templates/TEMPLATE.java.tpl} will be used. @item If you create a new file @file{~/proj/foo/proj.java}, this package finds a template file with the same base name: it uses @file{~/proj/Templates/proj.java.tpl}. You might argue that @file{~/proj/foo/TEMPLATE.java.tpl} resides in a more specific directory, but having the same base name is considered to be more important (remember that some file like Makefiles do not have file extensions). @item If you create a new file @file{~/other_proj/foo/proj.java}, i.e., a project where you have defined no template files, this package uses one of the default templates, in this case @file{~/.templates/TEMPLATE.java.tpl}. @end itemize For more on derivation @xref{Derivation}. @c -------------------------------------------------------------------------------- @node creating,,,Basics @section Creating a Template @c -------------------------------------------------------------------------------- There are various predefined expansions which are probably enough for most templates. A corresponding expansion forms can be easily inserted by selecting the appropriate entry in the new submenu @kbdmenu{Template Creation} : @itemize @item Remember positions: use @codetpl{(>>>POINT<<<)} to set point (the cursor position), @codetpl{(>>>MARK<<<)} to set mark (e.g., the opposite position when a region is highlighted), and @codetpl{(>>>1<<<)} to @samp{(>>>0<<<)} to registers to the current position. Remember that @kbd{C-x r j @var{Key}} jumps to the position stored in register @var{Key}. @item Insert parts of the file name, e.g., when creating the new file @file{~/proj/foo/abc1.java}: @codetpl{(>>>DIR<<<)} is replaced by @file{/home/user/proj/foo/}, @codetpl{(>>>FILE<<<)} by @file{abc1.java}, @codetpl{(>>>FILE_SANS<<<)} by @file{abc1} , @samp{(>>>FILE_UPCASE<<<)} by @file{ABC1} , @codetpl{(>>>FILE_RAW<<<)} by @file{abc}, @codetpl{(>>>FILE_NUM<<<)} by @file{1} , and @samp{(>>>FILE_EXT<<<)} by @file{java}. @item Insert the current date/time in two customizable and three fixed formats: use @codetpl{(>>>DATE<<<)} for @samp{20 Feb 2002}, @codetpl{(>>>TIME<<<)} for @samp{20:01:13} , @samp{(>>>YEAR<<<)} for @samp{2002} , @codetpl{(>>>ISO_DATE<<<)} for @samp{2002-02-20} , and @codetpl{(>>>VC_DATE<<<)} for @samp{2002/02/20 19:01:13} @item Insert the user/system name in various formats: use @codetpl{(>>>AUTHOR<<<)} for @email{Christoph Wedler }, @codetpl{(>>>USER_NAME<<<)} for @samp{Christoph Wedler} , @codetpl{(>>>LOGIN_NAME<<<)} for @samp{wedler} , and @codetpl{(>>>HOST_ADDR<<<)} for @samp{fmi.uni-passau.de} . @item Ask the user for some initial comment. If this expansion is used, the buffer for the new file will be marked as modified. For each undefined expansion, the user is also asked. @item Disabling the search for expansion forms: @codetpl{(>>>ZERO_FORM<<<)} can be inserted into a string which will be otherwise regarded as an expansion form, the region between @codetpl{(>>>LITERAL<<<)} and the first @codetpl{(>>>/LITERAL<<<)} after it will be skipped. @end itemize You can define your own expansions in your Emacs init file and at the end of a template file. A corresponding definition can be easily inserted by selecting the appropriate entry in the new submenu @kbdmenu{Template Creation}: @itemize @item @kbdmenu{Define User Input} . Ask the user to insert some text using some specific prompt. Optionally, ask for a text with completion, or for a sequence of user input (exit with empty input). @item @kbdmenu{Define Text Register} . Define a text for register @var{Reg} which can be inserted with @kbd{C-x r i @var{Reg}}. Optionally, provide a comment for it which will be temporarily shown at point. @item @kbdmenu{Define Message} . Define a message which will be temporarily shown at point or before/after the expansion in a special buffer. There is also a computed message in the echo area. @item Execute some Lisp coding defined at the end of the template. By default, you have to confirm it first, since it is insecure to execute unchecked coding. (You do not have menu support to define this kind of expansion.) @end itemize @defopt template-default-expansion-alist @end defopt @defopt template-definition-start @end defopt @c -------------------------------------------------------------------------------- @node decorating,,,Basics @section Decorating a Comment @c -------------------------------------------------------------------------------- There are commands to decorate comments with dashes and alike (@samp{-}, @samp{=} and @samp{#} by default). Both commands are included in the new submenu @kbdmenu{Comments} and bound to keys: @itemize @item Use command @code{template-single-comment} to jump to the end of the current line and insert the dashes and the final comment end-string up-to the fill position. This command works with any comment style, including for languages having mixed comments like C++ and Java. It also works in major modes without a defined comment syntax. @item Use command @code{template-block-comment} to surround the current comment block (i.e., contiguous comment lines) with extra lines containing dashes and alike and to put the correct number of newlines around the block. This command only works with comments which are terminated with the end of the line (like Java's @code{//}@c code class=text comment). @end itemize The comment decoration style is highly customizable and can be controlled by @itemize @item The prefix argument given to the two commands. @item The existing comment decoration style when present. @item Determined by the indentation or the repetition of a single-character comment start (like Emacs-Lisp's @code{;}@c code class=text ). @end itemize For more on comments @xref{Comments}. @c -------------------------------------------------------------------------------- @node updating,,,Basics @section Updating a Buffer @c -------------------------------------------------------------------------------- A buffer is automatically updated according to some rules when saving the file. This updating can be invoked explicitly by selecting the menu entry @kbdmenu{Update Buffer} in the new submenu @kbdmenu{Comments} . @itemize @item Update the file name in the first three lines of the buffer if the file name is indicated by @code{@@(#) @var{FileName}}@c code class=text or @code{;;; @var{FileName} --}@c code class=text where @code{;;;}@c code class=text stands for any comment start (with optional repetition of a single-character comment start). @item Update the date if it is the last text inside the @code{address}@c code class=html element of a HTML buffer. @item Automatic updating is optional, as is user confirmation for it. Automatic updating can be disabled for buffers whose file name matches a regular expression. @item If nothing will be changed by the updating, there will be no user confirmation and the buffer will not be marked as modified. @end itemize @defopt template-update-buffer @end defopt @defopt template-auto-update @end defopt @defopt template-update-buffer-alist @end defopt @defopt template-header-regexp-alist @end defopt @node Advanced,,,Top @chapter Templates for advanced users @menu * Customization:: Templates customization. @end menu @node Customization,,,Advanced @section Templates customization @menu * Expansion:: Customization of keyword expansion rules. * Derivation:: Customization of how templates are derived. * Comments:: Customization of comments. @end menu @node Expansion,,,Customization @subsection Customization of keyword expansion rules @deffn {Interactive Command} template-new-file {file template with-undo} Open a new file @var{file} by using a @var{template}. Using a template for creating a new file consists of, steps 1 to 3 are only executed when called interactively: @enumerate @item Prompt for the name of the new file. @item Template derivation: suggest a reasonable template file to the user see @codevar{template-derivation-alist}. @item File name refinement: e.g., if the given file name is @file{exercise} and there are two files @file{exercise1.tex} and @file{exercise2.tex} in the same directory and if we have a template @file{exercise.tex.tpl}, the file name is refined to @file{exercise3.tex}. This is turned off when @kbd{C-x t} is called with a prefix argument. @item Template insertion: insert the template file into the empty buffer. @item Read per-template expansion definition section starting at @codevar{template-definition-start} and delete it. @item Display: before message in @codevar{template-message-buffer}. @item Execute pre-expansion commands defined in the definition section. @item Set local variables defined in the definition section. @item Expansion: expand the expansion forms (text matched by @codevar{template-expansion-regexp}) They are defined in the definition section, in @codevar{template-expansion-alist}, or provided by default, see @codevar{template-expansion-regexp} and @codevar{template-register-regexp}. @item Execute post-expansion commands defined in the definition section. @item Run @code{normal-mode} and functions in @codevar{find-file-hooks}. @item Update header according to @command{template-update-header} with @c Vincent: What is this if-exists argument ? argument @codevar{if-exists}. @item Display: after message in @codevar{template-message-buffer}. @item Report: display a temporary message at point defined in the definition section and an automatically generated message in the minibuffer area, see @codevar{template-message-timeout}. @end enumerate If optional @var{with-undo} is non-nil, store corresponding changes in @codevar{buffer-undo-list}. If @var{file} is nil, the buffer for @var{file} has already been created and the accessible part will be replaced by the expanded template. If @var{template} is nil (empty input when called interactively), do not use a template. @end deffn @defopt template-auto-insert @end defopt @node Derivation,,,Customization @subsection Customization of how templates are derived @defopt template-derivation-alist @end defopt @node Comments,,,Customization @subsection Customization of comments @defopt template-single-comment @end defopt @deffn {Interactive command} template-block-comment arg It is bound to @kbd{C-x C-;}, and @kbdmenu{ }. Decorate the current block of comment-only lines with dashes and alike. That is, surround the the contiguous comment-only lines around point with extra lines containing dashes and alike and to put the correct number of newlines around the block. Barf if the comment syntax at point has a non-empty @codevar{comment-end} or if point is not in a comment-only line. A block comment consists of all neighboring lines which start with spaces and @codevar{comment-start}. If @codevar{comment-start} is a string of length 1, the number of repetitions of @codevar{comment-start} must be the same or larger than in the line where the command is invoked from, too. Prefix argument @var{arg} and @codevar{template-comment-specification} determines the comment style to use. The length of the separator line is determined by @codevar{template-max-column}. This command can also be used with point in an empty line after a block comment. A second invocation of this command directly after a successful invocation deletes the remaining empty lines from the current line on. @end deffn @defopt template-comment-specification-alist List of specifications for comment functions. Each specification at @var{level}, starting at 1, is a list @code{(@var{separator} @var{before-block} @var{after-block} @var{DELETE-LINES})} @var{separator} is the string which is inserted repeatedly by commands @kbd{C-x C-=} and @kbd{C-x C-;} up to @code{template-max-column}. After that, @kbd{C-x C-;} deletes @var{DELETE-LINES} after the comment block and inserts string @var{after-block} at the end of the block and @var{before-block} at the front of the block. The specification @var{level} to use is determined by: @enumerate @item If the prefix argument is non-nil and its numeric value is > 0, this value is the @var{level}. @item If the prefix argument is nil, and there is an old comment style, use old comment style. @item If @codevar{template-comment-specification-special} is a function or the current major mode has a property with this name and its value is a function, this function returns the specification. @item If @codevar{comment-end} is empty and @codevar{comment-start} is a string of length 1: @var{level} is number of repetitions of @codevar{comment-start} at the beginning of the line. Otherwise, if the correctly indented line starts at the beginning of the line, @var{level}=3, else @var{level}=2. @end enumerate @end defopt @node Indexes,,,Top @chapter Indexes for commands, keyword, and variable @menu * Keyword Index:: Keyword Index. * Command Index:: Command Index. * Variable Index:: Customizable Variable Index. @end menu @node Keyword Index,,,Indexes @section Keyword Index @node Command Index,,,Indexes @section Keyword Index @printindex fn @node Variable Index,,,Indexes @section Variable Index @printindex vr @node News,,,Top @chapter News for Package Template @table @asis @item Latest Version: @strong{3.1c} (21 Aug 2003). @item Requirements: @cite{Emacs-20.2}, @cite{XEmacs-20.2}, or higher. No menu support for Emacs before Version 21.1. @item Licence: @cite{GNU General Public License}. @end table @section Changes with Release 3.1c @itemize @item Bug fix: on XEmacs, initialization would fail without menus "File" and "Edit" in menubar. @item Allow messages to be displayed in a separate buffer "*Template Messages*" instead at point. @item Correct and improve header updating. @item Extend use of @code{M-x template-single-comment}. @item Minor bug fixes. Miscellaneous. @end itemize @section Changes with Release 3.1 @itemize @item Moved to SourceForge.net. Less technical description on web page. @item Remove examples from distribution, they were more confusing than helpful. @item Bug fix: would sometimes indent the current line when using the menubar. @item Menus work with Emacs-21, too. Rename some menu entries. @item Don't search further for remote templates. Nuke this home/base directory stuff, stop search at root. @item Don't rely on command @command{ffap} to always add an entry to @code{command-history} if the filename is read from terminal. Special setup for @code{ffap} and @code{html-helper}. @item Make date/time formats work as names suggest. @item Command to insert & expand a template file. @item Allow user to define a choice in the definition section to be answered via @code{y-or-n-p}. @item Various miscellaneous improvements. Minor bug fixes. @end itemize @node Acknowledgements,,,Top Christoph Wedler @uref{http://sourceforge.net/users/wedler/}, 21 Aug 2003 @bye @c -------------------------------------------------------------------------------- @c Local Variables: @c mode: texinfo @c TeX-master: t @c compile-command: (progn (require 'info) (concat "makeinfo templates.texi \ @c -o " (or (car-safe (last (Info-default-dirs))) "") "templates.info")) @c End: texi2html-1.82/test/misc/Makefile.am0000644000175000017500000000034611264347115021205 0ustar flichtenheldflichtenheldEXTRA_DIST = testkb.texi viper.texi verbatim_html.texi templates.texi \ tests.txt res DISTCLEANFILES = l2h_tmp_dir.init tests.log tests.out distclean-local: rm -rf out diffs dist-hook: rm -rf `find $(distdir)/res -name CVS` texi2html-1.82/test/manuals/0000755000175000017500000000000012076571511017654 5ustar flichtenheldflichtenheldtexi2html-1.82/test/manuals/version-stnd.texi0000644000175000017500000000013311264347121023173 0ustar flichtenheldflichtenheld@set UPDATED 23 March 2002 @set UPDATED-MONTH March 2002 @set EDITION 4.2 @set VERSION 4.2 texi2html-1.82/test/manuals/Makefile.in0000644000175000017500000002070011264347121021714 0ustar flichtenheldflichtenheld# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = test/manuals DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DATE = @PACKAGE_DATE@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ REQUIRE_DATA_DUMPER = @REQUIRE_DATA_DUMPER@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_DATA_DUMPER = @USE_DATA_DUMPER@ USE_UNICODE = @USE_UNICODE@ USE_UNIDECODE = @USE_UNIDECODE@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ am__leading_dot = @am__leading_dot@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = cvs.texi info-stnd.texi texinfo.texi mini_ker.texi \ version-stnd.texi version.texi fdl.texi \ mini_ker_t2h.init cvs.init tests.txt res DISTCLEANFILES = l2h_tmp_dir.init tests.log tests.out all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/manuals/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu test/manuals/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-exec-am: install-html: install-html-am install-info: install-info-am install-man: install-pdf: install-pdf-am install-ps: install-ps-am installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic dist-hook \ distclean distclean-generic distclean-local distdir dvi dvi-am \ html html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am distclean-local: rm -rf out diffs dist-hook: rm -rf `find $(distdir)/res -name CVS` # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: texi2html-1.82/test/manuals/res/0000755000175000017500000000000012076571557020457 5ustar flichtenheldflichtenheldtexi2html-1.82/test/manuals/res/ccvs_mediawiki_nosplit/0000755000175000017500000000000011264347121025172 5ustar flichtenheldflichtenheldtexi2html-1.82/test/manuals/res/ccvs_mediawiki_nosplit/cvs0000644000175000017500000325767511264347121025741 0ustar flichtenheldflichtenheld
    |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    == CVS—Concurrent Versions System v4.2 ==

    This info manual describes how to use and administer CVS version 4.2.


    |[[#Top| < ]]| |[[#What-is-CVS_003f| > ]]|   |[[#Top| << ]]| |[[#Top| Up ]]| |[[#Repository| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    == Overview ==

    This chapter is for people who have never used CVS, and perhaps have never used version control software before.

    If you are already familiar with CVS and are just trying to learn a particular feature or remember a certain command, you can probably skip everything here.


    |[[#Overview| < ]]| |[[#What-is-CVS-not_003f| > ]]|   |[[#Overview| << ]]| |[[#Overview| Up ]]| |[[#Repository| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === What is CVS? ===

    CVS is a version control system. Using it, you can record the history of your source files.

    For example, bugs sometimes creep in when software is modified, and you might not detect the bug until a long time after you make the modification. With CVS, you can easily retrieve old versions to see exactly which change caused the bug. This can sometimes be a big help.

    You could of course save every version of every file you have ever created. This would however waste an enormous amount of disk space. CVS stores all the versions of a file in a single file in a clever way that only stores the differences between versions.

    CVS also helps you if you are part of a group of people working on the same project. It is all too easy to overwrite each others’ changes unless you are extremely careful. Some editors, like GNU Emacs, try to make sure that the same file is never modified by two people at the same time. Unfortunately, if someone is using another editor, that safeguard will not work. CVS solves this problem by insulating the different developers from each other. Every developer works in his own directory, and CVS merges the work when each developer is done.

    CVS started out as a bunch of shell scripts written by Dick Grune, posted to the newsgroup comp.sources.unix in the volume 6 release of July, 1986. While no actual code from these shell scripts is present in the current version of CVS much of the CVS conflict resolution algorithms come from them.

    In April, 1989, Brian Berliner designed and coded CVS. Jeff Polk later helped Brian with the design of the CVS module and vendor branch support.

    You can get CVS in a variety of ways, including free download from the internet. For more information on downloading CVS and other CVS topics, see:

     
    http://www.cvshome.org/
    http://www.loria.fr/~molli/cvs-index.html
    

    There is a mailing list, known as info-cvs, devoted to CVS. To subscribe or unsubscribe write to info-cvs-request@gnu.org. If you prefer a usenet group, the right group is comp.software.config-mgmt which is for CVS discussions (along with other configuration management systems). In the future, it might be possible to create a comp.software.config-mgmt.cvs, but probably only if there is sufficient CVS traffic on comp.software.config-mgmt.

    You can also subscribe to the bug-cvs mailing list, described in more detail in [[#BUGS|Dealing with bugs in CVS or this manual]]. To subscribe send mail to bug-cvs-request@gnu.org.


    |[[#What-is-CVS_003f| < ]]| |[[#A-sample-session| > ]]|   |[[#Overview| << ]]| |[[#Overview| Up ]]| |[[#Repository| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === What is CVS not? ===

    CVS can do a lot of things for you, but it does not try to be everything for everyone.

    CVS is not a build system.

    Though the structure of your repository and modules file interact with your build system (e.g. ‘Makefile’s), they are essentially independent.

    CVS does not dictate how you build anything. It merely stores files for retrieval in a tree structure you devise.

    CVS does not dictate how to use disk space in the checked out working directories. If you write your ‘Makefile’s or scripts in every directory so they have to know the relative positions of everything else, you wind up requiring the entire repository to be checked out.

    If you modularize your work, and construct a build system that will share files (via links, mounts, VPATH in ‘Makefile’s, etc.), you can arrange your disk usage however you like.

    But you have to remember that any such system is a lot of work to construct and maintain. CVS does not address the issues involved.

    Of course, you should place the tools created to support such a build system (scripts, ‘Makefile’s, etc) under CVS.

    Figuring out what files need to be rebuilt when something changes is, again, something to be handled outside the scope of CVS. One traditional approach is to use make for building, and use some automated tool for generating the dependencies which make uses.

    See [[#Builds|How your build system interacts with CVS]], for more information on doing builds in conjunction with CVS.

    CVS is not a substitute for management.

    Your managers and project leaders are expected to talk to you frequently enough to make certain you are aware of schedules, merge points, branch names and release dates. If they don’t, CVS can’t help.

    CVS is an instrument for making sources dance to your tune. But you are the piper and the composer. No instrument plays itself or writes its own music.

    CVS is not a substitute for developer communication.

    When faced with conflicts within a single file, most developers manage to resolve them without too much effort. But a more general definition of “conflict” includes problems too difficult to solve without communication between developers.

    CVS cannot determine when simultaneous changes within a single file, or across a whole collection of files, will logically conflict with one another. Its concept of a conflict is purely textual, arising when two changes to the same base file are near enough to spook the merge (i.e. diff3) command.

    CVS does not claim to help at all in figuring out non-textual or distributed conflicts in program logic.

    For example: Say you change the arguments to function X defined in file ‘A’. At the same time, someone edits file ‘B’, adding new calls to function X using the old arguments. You are outside the realm of CVS’s competence.

    Acquire the habit of reading specs and talking to your peers.

    CVS does not have change control

    Change control refers to a number of things. First of all it can mean bug-tracking, that is being able to keep a database of reported bugs and the status of each one (is it fixed? in what release? has the bug submitter agreed that it is fixed?). For interfacing CVS to an external bug-tracking system, see the ‘rcsinfo’ and ‘verifymsg’ files (see section [[#Administrative-files|Reference manual for Administrative files]]).

    Another aspect of change control is keeping track of the fact that changes to several files were in fact changed together as one logical change. If you check in several files in a single cvs commit operation, CVS then forgets that those files were checked in together, and the fact that they have the same log message is the only thing tying them together. Keeping a GNU style ‘ChangeLog’ can help somewhat.

    Another aspect of change control, in some systems, is the ability to keep track of the status of each change. Some changes have been written by a developer, others have been reviewed by a second developer, and so on. Generally, the way to do this with CVS is to generate a diff (using cvs diff or diff) and email it to someone who can then apply it using the patch utility. This is very flexible, but depends on mechanisms outside CVS to make sure nothing falls through the cracks.

    CVS is not an automated testing program

    It should be possible to enforce mandatory use of a testsuite using the commitinfo file. I haven’t heard a lot about projects trying to do that or whether there are subtle gotchas, however.

    CVS does not have a builtin process model

    Some systems provide ways to ensure that changes or releases go through various steps, with various approvals as needed. Generally, one can accomplish this with CVS but it might be a little more work. In some cases you’ll want to use the ‘commitinfo’, ‘loginfo’, ‘rcsinfo’, or ‘verifymsg’ files, to require that certain steps be performed before cvs will allow a checkin. Also consider whether features such as branches and tags can be used to perform tasks such as doing work in a development tree and then merging certain changes over to a stable tree only once they have been proven.


    |[[#What-is-CVS-not_003f| < ]]| |[[#Getting-the-source| > ]]|   |[[#Overview| << ]]| |[[#Overview| Up ]]| |[[#Repository| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === A sample session ===

    As a way of introducing CVS, we’ll go through a typical work-session using CVS. The first thing to understand is that CVS stores all files in a centralized repository (see section [[#Repository|The Repository]]); this section assumes that a repository is set up.

    Suppose you are working on a simple compiler. The source consists of a handful of C files and a ‘Makefile’. The compiler is called ‘tc’ (Trivial Compiler), and the repository is set up so that there is a module called ‘tc’.


    |[[#A-sample-session| < ]]| |[[#Committing-your-changes| > ]]|   |[[#Overview| << ]]| |[[#A-sample-session| Up ]]| |[[#Repository| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== Getting the source ====

    The first thing you must do is to get your own working copy of the source for ‘tc’. For this, you use the checkout command:

     
    $ cvs checkout tc
    

    This will create a new directory called ‘tc’ and populate it with the source files.

     
    $ cd tc
    $ ls
    CVS         Makefile    backend.c   driver.c    frontend.c  parser.c
    

    The ‘CVS’ directory is used internally by CVS. Normally, you should not modify or remove any of the files in it.

    You start your favorite editor, hack away at ‘backend.c’, and a couple of hours later you have added an optimization pass to the compiler. A note to RCS and SCCS users: There is no need to lock the files that you want to edit. See section [[#Multiple-developers|Multiple developers]], for an explanation.


    |[[#Getting-the-source| < ]]| |[[#Cleaning-up| > ]]|   |[[#Overview| << ]]| |[[#A-sample-session| Up ]]| |[[#Repository| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== Committing your changes ====

    When you have checked that the compiler is still compilable you decide to make a new version of ‘backend.c’. This will store your new ‘backend.c’ in the repository and make it available to anyone else who is using that same repository.

     
    $ cvs commit backend.c
    

    CVS starts an editor, to allow you to enter a log message. You type in “Added an optimization pass.”, save the temporary file, and exit the editor.

    The environment variable $CVSEDITOR determines which editor is started. If $CVSEDITOR is not set, then if the environment variable $EDITOR is set, it will be used. If both $CVSEDITOR and $EDITOR are not set then there is a default which will vary with your operating system, for example vi for unix or notepad for Windows NT/95.

    In addition, CVS checks the $VISUAL environment variable. Opinions vary on whether this behavior is desirable and whether future releases of CVS should check $VISUAL or ignore it. You will be OK either way if you make sure that $VISUAL is either unset or set to the same thing as $EDITOR.

    When CVS starts the editor, it includes a list of files which are modified. For the CVS client, this list is based on comparing the modification time of the file against the modification time that the file had when it was last gotten or updated. Therefore, if a file’s modification time has changed but its contents have not, it will show up as modified. The simplest way to handle this is simply not to worry about it—if you proceed with the commit CVS will detect that the contents are not modified and treat it as an unmodified file. The next update will clue CVS in to the fact that the file is unmodified, and it will reset its stored timestamp so that the file will not show up in future editor sessions.

    If you want to avoid starting an editor you can specify the log message on the command line using the ‘-m’ flag instead, like this:

     
    $ cvs commit -m "Added an optimization pass" backend.c
    

    |[[#Committing-your-changes| < ]]| |[[#Viewing-differences| > ]]|   |[[#Overview| << ]]| |[[#A-sample-session| Up ]]| |[[#Repository| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== Cleaning up ====

    Before you turn to other tasks you decide to remove your working copy of tc. One acceptable way to do that is of course

     
    $ cd ..
    $ rm -r tc
    

    but a better way is to use the release command (see section [[#release|release—Indicate that a Module is no longer in use]]):

     
    $ cd ..
    $ cvs release -d tc
    M driver.c
    ? tc
    You have [1] altered files in this repository.
    Are you sure you want to release (and delete) directory `tc': n
    ** `release' aborted by user choice.
    

    The release command checks that all your modifications have been committed. If history logging is enabled it also makes a note in the history file. See section [[#history-file|The history file]].

    When you use the ‘-d’ flag with release, it also removes your working copy.

    In the example above, the release command wrote a couple of lines of output. ‘? tc’ means that the file ‘tc’ is unknown to CVS. That is nothing to worry about: ‘tc’ is the executable compiler, and it should not be stored in the repository. See section [[#cvsignore|Ignoring files via cvsignore]], for information about how to make that warning go away. See section [[#release-output|release output]], for a complete explanation of all possible output from release.

    M driver.c’ is more serious. It means that the file ‘driver.c’ has been modified since it was checked out.

    The release command always finishes by telling you how many modified files you have in your working copy of the sources, and then asks you for confirmation before deleting any files or making any note in the history file.

    You decide to play it safe and answer n <RET> when release asks for confirmation.


    |[[#Cleaning-up| < ]]| |[[#Repository| > ]]|   |[[#Overview| << ]]| |[[#A-sample-session| Up ]]| |[[#Repository| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== Viewing differences ====

    You do not remember modifying ‘driver.c’, so you want to see what has happened to that file.

     
    $ cd tc
    $ cvs diff driver.c
    

    This command runs diff to compare the version of ‘driver.c’ that you checked out with your working copy. When you see the output you remember that you added a command line option that enabled the optimization pass. You check it in, and release the module.

     
    $ cvs commit -m "Added an optimization pass" driver.c
    Checking in driver.c;
    /usr/local/cvsroot/tc/driver.c,v  <--  driver.c
    new revision: 1.2; previous revision: 1.1
    done
    $ cd ..
    $ cvs release -d tc
    ? tc
    You have [0] altered files in this repository.
    Are you sure you want to release (and delete) directory `tc': y
    

    |[[#Viewing-differences| < ]]| |[[#Specifying-a-repository| > ]]|   |[[#Overview| << ]]| |[[#Top| Up ]]| |[[#Starting-a-new-project| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    == The Repository ==

    The CVS repository stores a complete copy of all the files and directories which are under version control.

    Normally, you never access any of the files in the repository directly. Instead, you use CVS commands to get your own copy of the files into a working directory, and then work on that copy. When you’ve finished a set of changes, you check (or commit) them back into the repository. The repository then contains the changes which you have made, as well as recording exactly what you changed, when you changed it, and other such information. Note that the repository is not a subdirectory of the working directory, or vice versa; they should be in separate locations.

    CVS can access a repository by a variety of means. It might be on the local computer, or it might be on a computer across the room or across the world. To distinguish various ways to access a repository, the repository name can start with an access method. For example, the access method :local: means to access a repository directory, so the repository :local:/usr/local/cvsroot means that the repository is in ‘/usr/local/cvsroot’ on the computer running CVS. For information on other access methods, see [[#Remote-repositories|Remote repositories]].

    If the access method is omitted, then if the repository starts with ‘/’, then :local: is assumed. If it does not start with ‘/’ then either :ext: or :server: is assumed. For example, if you have a local repository in ‘/usr/local/cvsroot’, you can use /usr/local/cvsroot instead of :local:/usr/local/cvsroot. But if (under Windows NT, for example) your local repository is ‘c:\src\cvsroot’, then you must specify the access method, as in :local:c:/src/cvsroot.

    The repository is split in two parts. ‘$CVSROOT/CVSROOT’ contains administrative files for CVS. The other directories contain the actual user-defined modules.


    |[[#Repository| < ]]| |[[#Repository-storage| > ]]|   |[[#Repository| << ]]| |[[#Repository| Up ]]| |[[#Starting-a-new-project| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Telling CVS where your repository is ===

    There are several ways to tell CVS where to find the repository. You can name the repository on the command line explicitly, with the -d (for "directory") option:

     
    cvs -d /usr/local/cvsroot checkout yoyodyne/tc
    

    Or you can set the $CVSROOT environment variable to an absolute path to the root of the repository, ‘/usr/local/cvsroot’ in this example. To set $CVSROOT, csh and tcsh users should have this line in their ‘.cshrc’ or ‘.tcshrc’ files:

     
    setenv CVSROOT /usr/local/cvsroot
    

    sh and bash users should instead have these lines in their ‘.profile’ or ‘.bashrc’:

     
    CVSROOT=/usr/local/cvsroot
    export CVSROOT
    

    A repository specified with -d will override the $CVSROOT environment variable. Once you’ve checked a working copy out from the repository, it will remember where its repository is (the information is recorded in the ‘CVS/Root’ file in the working copy).

    The -d option and the ‘CVS/Root’ file both override the $CVSROOT environment variable. If -d option differs from ‘CVS/Root’, the former is used. Of course, for proper operation they should be two ways of referring to the same repository.


    |[[#Specifying-a-repository| < ]]| |[[#Repository-files| > ]]|   |[[#Repository| << ]]| |[[#Repository| Up ]]| |[[#Starting-a-new-project| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === How data is stored in the repository ===

    For most purposes it isn’t important how CVS stores information in the repository. In fact, the format has changed in the past, and is likely to change in the future. Since in almost all cases one accesses the repository via CVS commands, such changes need not be disruptive.

    However, in some cases it may be necessary to understand how CVS stores data in the repository, for example you might need to track down CVS locks (see section [[#Concurrency|Several developers simultaneously attempting to run CVS]]) or you might need to deal with the file permissions appropriate for the repository.


    |[[#Repository-storage| < ]]| |[[#File-permissions| > ]]|   |[[#Repository| << ]]| |[[#Repository-storage| Up ]]| |[[#Starting-a-new-project| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== Where files are stored within the repository ====

    The overall structure of the repository is a directory tree corresponding to the directories in the working directory. For example, supposing the repository is in

     
    /usr/local/cvsroot
    

    here is a possible directory tree (showing only the directories):

     
    /usr
     |
     +--local
     |   |
     |   +--cvsroot
     |   |    |
     |   |    +--CVSROOT
              |      (administrative files)
              |
              +--gnu
              |   |
              |   +--diff
              |   |   (source code to GNU diff)
              |   |
              |   +--rcs
              |   |   (source code to RCS)
              |   |
              |   +--cvs
              |       (source code to CVS)
              |
              +--yoyodyne
                  |
                  +--tc
                  |    |
                  |    +--man
                  |    |
                  |    +--testing
                  |
                  +--(other Yoyodyne software)
    

    With the directories are history files for each file under version control. The name of the history file is the name of the corresponding file with ‘,v’ appended to the end. Here is what the repository for the ‘yoyodyne/tc’ directory might look like:

     
      $CVSROOT
        |
        +--yoyodyne
        |   |
        |   +--tc
        |   |   |
                +--Makefile,v
                +--backend.c,v
                +--driver.c,v
                +--frontend.c,v
                +--parser.c,v
                +--man
                |    |
                |    +--tc.1,v
                |
                +--testing
                     |
                     +--testpgm.t,v
                     +--test2.t,v
    

    The history files contain, among other things, enough information to recreate any revision of the file, a log of all commit messages and the user-name of the person who committed the revision. The history files are known as RCS files, because the first program to store files in that format was a version control system known as RCS. For a full description of the file format, see the man page rcsfile(5), distributed with RCS, or the file ‘doc/RCSFILES’ in the CVS source distribution. This file format has become very common—many systems other than CVS or RCS can at least import history files in this format.

    The RCS files used in CVS differ in a few ways from the standard format. The biggest difference is magic branches; for more information see [[#Magic-branch-numbers|Magic branch numbers]]. Also in CVS the valid tag names are a subset of what RCS accepts; for CVS’s rules see [[#Tags|Tags–Symbolic revisions]].


    |[[#Repository-files| < ]]| |[[#Windows-permissions| > ]]|   |[[#Repository| << ]]| |[[#Repository-storage| Up ]]| |[[#Starting-a-new-project| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== File permissions ====

    All ‘,v’ files are created read-only, and you should not change the permission of those files. The directories inside the repository should be writable by the persons that have permission to modify the files in each directory. This normally means that you must create a UNIX group (see group(5)) consisting of the persons that are to edit the files in a project, and set up the repository so that it is that group that owns the directory. (On some systems, you also need to set the set-group-ID-on-execution bit on the repository directories (see chmod(1)) so that newly-created files and directories get the group-ID of the parent directory rather than that of the current process.)

    This means that you can only control access to files on a per-directory basis.

    Note that users must also have write access to check out files, because CVS needs to create lock files (see section [[#Concurrency|Several developers simultaneously attempting to run CVS]]). You can use LockDir in CVSROOT/config to put the lock files somewhere other than in the repository if you want to allow read-only access to some directories (see section [[#config|The CVSROOT/config configuration file]]).

    Also note that users must have write access to the ‘CVSROOT/val-tags’ file. CVS uses it to keep track of what tags are valid tag names (it is sometimes updated when tags are used, as well as when they are created).

    Each RCS file will be owned by the user who last checked it in. This has little significance; what really matters is who owns the directories.

    CVS tries to set up reasonable file permissions for new directories that are added inside the tree, but you must fix the permissions manually when a new directory should have different permissions than its parent directory. If you set the CVSUMASK environment variable that will control the file permissions which CVS uses in creating directories and/or files in the repository. CVSUMASK does not affect the file permissions in the working directory; such files have the permissions which are typical for newly created files, except that sometimes CVS creates them read-only (see the sections on watches, [[#Setting-a-watch|Telling CVS to watch certain files]]; -r, [[#Global-options|Global options]]; or CVSREAD, [[#Environment-variables|All environment variables which affect CVS]]).

    Note that using the client/server CVS (see section [[#Remote-repositories|Remote repositories]]), there is no good way to set CVSUMASK; the setting on the client machine has no effect. If you are connecting with rsh, you can set CVSUMASK in ‘.bashrc’ or ‘.cshrc’, as described in the documentation for your operating system. This behavior might change in future versions of CVS; do not rely on the setting of CVSUMASK on the client having no effect.

    Using pserver, you will generally need stricter permissions on the CVSROOT directory and directories above it in the tree; see [[#Password-authentication-security|Security considerations with password authentication]].

    Some operating systems have features which allow a particular program to run with the ability to perform operations which the caller of the program could not. For example, the set user ID (setuid) or set group ID (setgid) features of unix or the installed image feature of VMS. CVS was not written to use such features and therefore attempting to install CVS in this fashion will provide protection against only accidental lapses; anyone who is trying to circumvent the measure will be able to do so, and depending on how you have set it up may gain access to more than just CVS. You may wish to instead consider pserver. It shares some of the same attributes, in terms of possibly providing a false sense of security or opening security holes wider than the ones you are trying to fix, so read the documentation on pserver security carefully if you are considering this option ([[#Password-authentication-security|Security considerations with password authentication]]).


    |[[#File-permissions| < ]]| |[[#Attic| > ]]|   |[[#Repository| << ]]| |[[#Repository-storage| Up ]]| |[[#Starting-a-new-project| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== File Permission issues specific to Windows ====

    Some file permission issues are specific to Windows operating systems (Windows 95, Windows NT, and presumably future operating systems in this family. Some of the following might apply to OS/2 but I’m not sure).

    If you are using local CVS and the repository is on a networked file system which is served by the Samba SMB server, some people have reported problems with permissions. Enabling WRITE=YES in the samba configuration is said to fix/workaround it. Disclaimer: I haven’t investigated enough to know the implications of enabling that option, nor do I know whether there is something which CVS could be doing differently in order to avoid the problem. If you find something out, please let us know as described in [[#BUGS|Dealing with bugs in CVS or this manual]].


    |[[#Windows-permissions| < ]]| |[[#CVS-in-repository| > ]]|   |[[#Repository| << ]]| |[[#Repository-storage| Up ]]| |[[#Starting-a-new-project| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== The attic ====

    You will notice that sometimes CVS stores an RCS file in the Attic. For example, if the CVSROOT is ‘/usr/local/cvsroot’ and we are talking about the file ‘backend.c’ in the directory ‘yoyodyne/tc’, then the file normally would be in

     
    /usr/local/cvsroot/yoyodyne/tc/backend.c,v
    

    but if it goes in the attic, it would be in

     
    /usr/local/cvsroot/yoyodyne/tc/Attic/backend.c,v
    

    instead. It should not matter from a user point of view whether a file is in the attic; CVS keeps track of this and looks in the attic when it needs to. But in case you want to know, the rule is that the RCS file is stored in the attic if and only if the head revision on the trunk has state dead. A dead state means that file has been removed, or never added, for that revision. For example, if you add a file on a branch, it will have a trunk revision in dead state, and a branch revision in a non-dead state.


    |[[#Attic| < ]]| |[[#Locks| > ]]|   |[[#Repository| << ]]| |[[#Repository-storage| Up ]]| |[[#Starting-a-new-project| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== The CVS directory in the repository ====

    The ‘CVS’ directory in each repository directory contains information such as file attributes (in a file called ‘CVS/fileattr’. In the future additional files may be added to this directory, so implementations should silently ignore additional files.

    This behavior is implemented only by CVS 1.7 and later; for details see [[#Watches-Compatibility|Using watches with old versions of CVS]].

    The format of the fileattr file is a series of entries of the following form (where ‘{’ and ‘}’ means the text between the braces can be repeated zero or more times):

    ent-type filename <tab> attrname = attrval {; attrname = attrval} <linefeed>

    ent-type is ‘F’ for a file, in which case the entry specifies the attributes for that file.

    ent-type is ‘D’, and filename empty, to specify default attributes to be used for newly added files.

    Other ent-type are reserved for future expansion. CVS 1.9 and older will delete them any time it writes file attributes. CVS 1.10 and later will preserve them.

    Note that the order of the lines is not significant; a program writing the fileattr file may rearrange them at its convenience.

    There is currently no way of quoting tabs or linefeeds in the filename, ‘=’ in attrname, ‘;’ in attrval, etc. Note: some implementations also don’t handle a NUL character in any of the fields, but implementations are encouraged to allow it.

    By convention, attrname starting with ‘_’ is for an attribute given special meaning by CVS; other attrnames are for user-defined attributes (or will be, once implementations start supporting user-defined attributes).

    Builtin attributes:

    _watched

    Present means the file is watched and should be checked out read-only.

    _watchers

    Users with watches for this file. Value is watcher > type { , watcher > type } where watcher is a username, and type is zero or more of edit,unedit,commit separated by ‘+’ (that is, nothing if none; there is no "none" or "all" keyword).

    _editors

    Users editing this file. Value is editor > val { , editor > val } where editor is a username, and val is time+hostname+pathname, where time is when the cvs edit command (or equivalent) happened, and hostname and pathname are for the working directory.

    Example:

     
    Ffile1 _watched=;_watchers=joe>edit,mary>commit
    Ffile2 _watched=;_editors=sue>8 Jan 1975+workstn1+/home/sue/cvs
    D _watched=
    

    means that the file ‘file1’ should be checked out read-only. Furthermore, joe is watching for edits and mary is watching for commits. The file ‘file2’ should be checked out read-only; sue started editing it on 8 Jan 1975 in the directory ‘/home/sue/cvs’ on the machine workstn1. Future files which are added should be checked out read-only. To represent this example here, we have shown a space after ‘D’, ‘Ffile1’, and ‘Ffile2’, but in fact there must be a single tab character there and no spaces.


    |[[#CVS-in-repository| < ]]| |[[#CVSROOT-storage| > ]]|   |[[#Repository| << ]]| |[[#Repository-storage| Up ]]| |[[#Starting-a-new-project| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== CVS locks in the repository ====

    For an introduction to CVS locks focusing on user-visible behavior, see [[#Concurrency|Several developers simultaneously attempting to run CVS]]. The following section is aimed at people who are writing tools which want to access a CVS repository without interfering with other tools accessing the same repository. If you find yourself confused by concepts described here, like read lock, write lock, and deadlock, you might consult the literature on operating systems or databases.

    Any file in the repository with a name starting with ‘#cvs.rfl.’ is a read lock. Any file in the repository with a name starting with ‘#cvs.wfl’ is a write lock. Old versions of CVS (before CVS 1.5) also created files with names starting with ‘#cvs.tfl’, but they are not discussed here. The directory ‘#cvs.lock’ serves as a master lock. That is, one must obtain this lock first before creating any of the other locks.

    To obtain a readlock, first create the ‘#cvs.lock’ directory. This operation must be atomic (which should be true for creating a directory under most operating systems). If it fails because the directory already existed, wait for a while and try again. After obtaining the ‘#cvs.lock’ lock, create a file whose name is ‘#cvs.rfl.’ followed by information of your choice (for example, hostname and process identification number). Then remove the ‘#cvs.lock’ directory to release the master lock. Then proceed with reading the repository. When you are done, remove the ‘#cvs.rfl’ file to release the read lock.

    To obtain a writelock, first create the ‘#cvs.lock’ directory, as with a readlock. Then check that there are no files whose names start with ‘#cvs.rfl.’. If there are, remove ‘#cvs.lock’, wait for a while, and try again. If there are no readers, then create a file whose name is ‘#cvs.wfl’ followed by information of your choice (for example, hostname and process identification number). Hang on to the ‘#cvs.lock’ lock. Proceed with writing the repository. When you are done, first remove the ‘#cvs.wfl’ file and then the ‘#cvs.lock’ directory. Note that unlike the ‘#cvs.rfl’ file, the ‘#cvs.wfl’ file is just informational; it has no effect on the locking operation beyond what is provided by holding on to the ‘#cvs.lock’ lock itself.

    Note that each lock (writelock or readlock) only locks a single directory in the repository, including ‘Attic’ and ‘CVS’ but not including subdirectories which represent other directories under version control. To lock an entire tree, you need to lock each directory (note that if you fail to obtain any lock you need, you must release the whole tree before waiting and trying again, to avoid deadlocks).

    Note also that CVS expects writelocks to control access to individual ‘foo,v’ files. RCS has a scheme where the ‘,foo,’ file serves as a lock, but CVS does not implement it and so taking out a CVS writelock is recommended. See the comments at rcs_internal_lockfile in the CVS source code for further discussion/rationale.


    |[[#Locks| < ]]| |[[#Working-directory-storage| > ]]|   |[[#Repository| << ]]| |[[#Repository-storage| Up ]]| |[[#Starting-a-new-project| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== How files are stored in the CVSROOT directory ====

    The ‘$CVSROOT/CVSROOT’ directory contains the various administrative files. In some ways this directory is just like any other directory in the repository; it contains RCS files whose names end in ‘,v’, and many of the CVS commands operate on it the same way. However, there are a few differences.

    For each administrative file, in addition to the RCS file, there is also a checked out copy of the file. For example, there is an RCS file ‘loginfo,v’ and a file ‘loginfo’ which contains the latest revision contained in ‘loginfo,v’. When you check in an administrative file, CVS should print

     
    cvs commit: Rebuilding administrative file database
    

    and update the checked out copy in ‘$CVSROOT/CVSROOT’. If it does not, there is something wrong (see section [[#BUGS|Dealing with bugs in CVS or this manual]]). To add your own files to the files to be updated in this fashion, you can add them to the ‘checkoutlist’ administrative file (see section [[#checkoutlist|The checkoutlist file]]).

    By default, the ‘modules’ file behaves as described above. If the modules file is very large, storing it as a flat text file may make looking up modules slow (I’m not sure whether this is as much of a concern now as when CVS first evolved this feature; I haven’t seen benchmarks). Therefore, by making appropriate edits to the CVS source code one can store the modules file in a database which implements the ndbm interface, such as Berkeley db or GDBM. If this option is in use, then the modules database will be stored in the files ‘modules.db’, ‘modules.pag’, and/or ‘modules.dir’.

    For information on the meaning of the various administrative files, see [[#Administrative-files|Reference manual for Administrative files]].


    |[[#CVSROOT-storage| < ]]| |[[#Intro-administrative-files| > ]]|   |[[#Repository| << ]]| |[[#Repository| Up ]]| |[[#Starting-a-new-project| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === How data is stored in the working directory ===

    While we are discussing CVS internals which may become visible from time to time, we might as well talk about what CVS puts in the ‘CVS’ directories in the working directories. As with the repository, CVS handles this information and one can usually access it via CVS commands. But in some cases it may be useful to look at it, and other programs, such as the jCVS graphical user interface or the VC package for emacs, may need to look at it. Such programs should follow the recommendations in this section if they hope to be able to work with other programs which use those files, including future versions of the programs just mentioned and the command-line CVS client.

    The ‘CVS’ directory contains several files. Programs which are reading this directory should silently ignore files which are in the directory but which are not documented here, to allow for future expansion.

    The files are stored according to the text file convention for the system in question. This means that working directories are not portable between systems with differing conventions for storing text files. This is intentional, on the theory that the files being managed by CVS probably will not be portable between such systems either.

    Root

    This file contains the current CVS root, as described in [[#Specifying-a-repository|Telling CVS where your repository is]].

    Repository

    This file contains the directory within the repository which the current directory corresponds with. It can be either an absolute pathname or a relative pathname; CVS has had the ability to read either format since at least version 1.3 or so. The relative pathname is relative to the root, and is the more sensible approach, but the absolute pathname is quite common and implementations should accept either. For example, after the command

     
    cvs -d :local:/usr/local/cvsroot checkout yoyodyne/tc
    

    Root’ will contain

     
    :local:/usr/local/cvsroot
    

    and ‘Repository’ will contain either

     
    /usr/local/cvsroot/yoyodyne/tc
    

    or

     
    yoyodyne/tc
    

    If the particular working directory does not correspond to a directory in the repository, then ‘Repository’ should contain ‘CVSROOT/Emptydir’.

    Entries

    This file lists the files and directories in the working directory. The first character of each line indicates what sort of line it is. If the character is unrecognized, programs reading the file should silently skip that line, to allow for future expansion.

    If the first character is ‘/’, then the format is:

     
    /name/revision/timestamp[+conflict]/options/tagdate
    

    where ‘[’ and ‘]’ are not part of the entry, but instead indicate that the ‘+’ and conflict marker are optional. name is the name of the file within the directory. revision is the revision that the file in the working derives from, or ‘0’ for an added file, or ‘-’ followed by a revision for a removed file. timestamp is the timestamp of the file at the time that CVS created it; if the timestamp differs with the actual modification time of the file it means the file has been modified. It is stored in the format used by the ISO C asctime() function (for example, ‘Sun Apr 7 01:29:26 1996’). One may write a string which is not in that format, for example, ‘Result of merge’, to indicate that the file should always be considered to be modified. This is not a special case; to see whether a file is modified a program should take the timestamp of the file and simply do a string compare with timestamp. If there was a conflict, conflict can be set to the modification time of the file after the file has been written with conflict markers (see section [[#Conflicts-example|Conflicts example]]). Thus if conflict is subsequently the same as the actual modification time of the file it means that the user has obviously not resolved the conflict. options contains sticky options (for example ‘-kb’ for a binary file). tagdate contains ‘T’ followed by a tag name, or ‘D’ for a date, followed by a sticky tag or date. Note that if timestamp contains a pair of timestamps separated by a space, rather than a single timestamp, you are dealing with a version of CVS earlier than CVS 1.5 (not documented here).

    The timezone on the timestamp in CVS/Entries (local or universal) should be the same as the operating system stores for the timestamp of the file itself. For example, on Unix the file’s timestamp is in universal time (UT), so the timestamp in CVS/Entries should be too. On VMS, the file’s timestamp is in local time, so CVS on VMS should use local time. This rule is so that files do not appear to be modified merely because the timezone changed (for example, to or from summer time).

    If the first character of a line in ‘Entries’ is ‘D’, then it indicates a subdirectory. ‘D’ on a line all by itself indicates that the program which wrote the ‘Entries’ file does record subdirectories (therefore, if there is such a line and no other lines beginning with ‘D’, one knows there are no subdirectories). Otherwise, the line looks like:

     
    D/name/filler1/filler2/filler3/filler4
    

    where name is the name of the subdirectory, and all the filler fields should be silently ignored, for future expansion. Programs which modify Entries files should preserve these fields.

    The lines in the ‘Entries’ file can be in any order.

    Entries.Log

    This file does not record any information beyond that in ‘Entries’, but it does provide a way to update the information without having to rewrite the entire ‘Entries’ file, including the ability to preserve the information even if the program writing ‘Entries’ and ‘Entries.Log’ abruptly aborts. Programs which are reading the ‘Entries’ file should also check for ‘Entries.Log’. If the latter exists, they should read ‘Entries’ and then apply the changes mentioned in ‘Entries.Log’. After applying the changes, the recommended practice is to rewrite ‘Entries’ and then delete ‘Entries.Log’. The format of a line in ‘Entries.Log’ is a single character command followed by a space followed by a line in the format specified for a line in ‘Entries’. The single character command is ‘A’ to indicate that the entry is being added, ‘R’ to indicate that the entry is being removed, or any other character to indicate that the entire line in ‘Entries.Log’ should be silently ignored (for future expansion). If the second character of the line in ‘Entries.Log’ is not a space, then it was written by an older version of CVS (not documented here).

    Programs which are writing rather than reading can safely ignore ‘Entries.Log’ if they so choose.

    Entries.Backup

    This is a temporary file. Recommended usage is to write a new entries file to ‘Entries.Backup’, and then to rename it (atomically, where possible) to ‘Entries’.

    Entries.Static

    The only relevant thing about this file is whether it exists or not. If it exists, then it means that only part of a directory was gotten and CVS will not create additional files in that directory. To clear it, use the update command with the ‘-d’ option, which will get the additional files and remove ‘Entries.Static’.

    Tag

    This file contains per-directory sticky tags or dates. The first character is ‘T’ for a branch tag, ‘N’ for a non-branch tag, or ‘D’ for a date, or another character to mean the file should be silently ignored, for future expansion. This character is followed by the tag or date. Note that per-directory sticky tags or dates are used for things like applying to files which are newly added; they might not be the same as the sticky tags or dates on individual files. For general information on sticky tags and dates, see [[#Sticky-tags|Sticky tags]].

    Notify

    This file stores notifications (for example, for edit or unedit) which have not yet been sent to the server. Its format is not yet documented here.

    Notify.tmp

    This file is to ‘Notify’ as ‘Entries.Backup’ is to ‘Entries’. That is, to write ‘Notify’, first write the new contents to ‘Notify.tmp’ and then (atomically where possible), rename it to ‘Notify’.

    Base

    If watches are in use, then an edit command stores the original copy of the file in the ‘Base’ directory. This allows the unedit command to operate even if it is unable to communicate with the server.

    Baserev

    The file lists the revision for each of the files in the ‘Base’ directory. The format is:

     
    Bname/rev/expansion
    

    where expansion should be ignored, to allow for future expansion.

    Baserev.tmp

    This file is to ‘Baserev’ as ‘Entries.Backup’ is to ‘Entries’. That is, to write ‘Baserev’, first write the new contents to ‘Baserev.tmp’ and then (atomically where possible), rename it to ‘Baserev’.

    Template

    This file contains the template specified by the ‘rcsinfo’ file (see section [[#rcsinfo|Rcsinfo]]). It is only used by the client; the non-client/server CVS consults ‘rcsinfo’ directly.


    |[[#Working-directory-storage| < ]]| |[[#Editing-administrative-files| > ]]|   |[[#Repository| << ]]| |[[#Repository| Up ]]| |[[#Starting-a-new-project| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === The administrative files ===

    The directory ‘$CVSROOT/CVSROOT’ contains some administrative files. See section [[#Administrative-files|Reference manual for Administrative files]], for a complete description. You can use CVS without any of these files, but some commands work better when at least the ‘modules’ file is properly set up.

    The most important of these files is the ‘modules’ file. It defines all modules in the repository. This is a sample ‘modules’ file.

     
    CVSROOT         CVSROOT
    modules         CVSROOT modules
    cvs             gnu/cvs
    rcs             gnu/rcs
    diff            gnu/diff
    tc              yoyodyne/tc
    

    The ‘modules’ file is line oriented. In its simplest form each line contains the name of the module, whitespace, and the directory where the module resides. The directory is a path relative to $CVSROOT. The last four lines in the example above are examples of such lines.

    The line that defines the module called ‘modules’ uses features that are not explained here. See section [[#modules|The modules file]], for a full explanation of all the available features.


    |[[#Intro-administrative-files| < ]]| |[[#Multiple-repositories| > ]]|   |[[#Repository| << ]]| |[[#Intro-administrative-files| Up ]]| |[[#Starting-a-new-project| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== Editing administrative files ====

    You edit the administrative files in the same way that you would edit any other module. Use ‘cvs checkout CVSROOT’ to get a working copy, edit it, and commit your changes in the normal way.

    It is possible to commit an erroneous administrative file. You can often fix the error and check in a new revision, but sometimes a particularly bad error in the administrative file makes it impossible to commit new revisions.


    |[[#Editing-administrative-files| < ]]| |[[#Creating-a-repository| > ]]|   |[[#Repository| << ]]| |[[#Repository| Up ]]| |[[#Starting-a-new-project| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Multiple repositories ===

    In some situations it is a good idea to have more than one repository, for instance if you have two development groups that work on separate projects without sharing any code. All you have to do to have several repositories is to specify the appropriate repository, using the CVSROOT environment variable, the ‘-d’ option to CVS, or (once you have checked out a working directory) by simply allowing CVS to use the repository that was used to check out the working directory (see section [[#Specifying-a-repository|Telling CVS where your repository is]]).

    The big advantage of having multiple repositories is that they can reside on different servers. With CVS version 1.10, a single command cannot recurse into directories from different repositories. With development versions of CVS, you can check out code from multiple servers into your working directory. CVS will recurse and handle all the details of making connections to as many server machines as necessary to perform the requested command. Here is an example of how to set up a working directory:

     
    cvs -d server1:/cvs co dir1
    cd dir1
    cvs -d server2:/root co sdir
    cvs update
    

    The cvs co commands set up the working directory, and then the cvs update command will contact server2, to update the dir1/sdir subdirectory, and server1, to update everything else.


    |[[#Multiple-repositories| < ]]| |[[#Backing-up| > ]]|   |[[#Repository| << ]]| |[[#Repository| Up ]]| |[[#Starting-a-new-project| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Creating a repository ===

    To set up a CVS repository, first choose the machine and disk on which you want to store the revision history of the source files. CPU and memory requirements are modest, so most machines should be adequate. For details see [[#Server-requirements|Server requirements]].

    To estimate disk space requirements, if you are importing RCS files from another system, the size of those files is the approximate initial size of your repository, or if you are starting without any version history, a rule of thumb is to allow for the server approximately three times the size of the code to be under CVS for the repository (you will eventually outgrow this, but not for a while). On the machines on which the developers will be working, you’ll want disk space for approximately one working directory for each developer (either the entire tree or a portion of it, depending on what each developer uses).

    The repository should be accessible (directly or via a networked file system) from all machines which want to use CVS in server or local mode; the client machines need not have any access to it other than via the CVS protocol. It is not possible to use CVS to read from a repository which one only has read access to; CVS needs to be able to create lock files (see section [[#Concurrency|Several developers simultaneously attempting to run CVS]]).

    To create a repository, run the cvs init command. It will set up an empty repository in the CVS root specified in the usual way (see section [[#Repository|The Repository]]). For example,

     
    cvs -d /usr/local/cvsroot init
    

    cvs init is careful to never overwrite any existing files in the repository, so no harm is done if you run cvs init on an already set-up repository.

    cvs init will enable history logging; if you don’t want that, remove the history file after running cvs init. See section [[#history-file|The history file]].


    |[[#Creating-a-repository| < ]]| |[[#Moving-a-repository| > ]]|   |[[#Repository| << ]]| |[[#Repository| Up ]]| |[[#Starting-a-new-project| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Backing up a repository ===

    There is nothing particularly magical about the files in the repository; for the most part it is possible to back them up just like any other files. However, there are a few issues to consider.

    The first is that to be paranoid, one should either not use CVS during the backup, or have the backup program lock CVS while doing the backup. To not use CVS, you might forbid logins to machines which can access the repository, turn off your CVS server, or similar mechanisms. The details would depend on your operating system and how you have CVS set up. To lock CVS, you would create ‘#cvs.rfl’ locks in each repository directory. See [[#Concurrency|Several developers simultaneously attempting to run CVS]], for more on CVS locks. Having said all this, if you just back up without any of these precautions, the results are unlikely to be particularly dire. Restoring from backup, the repository might be in an inconsistent state, but this would not be particularly hard to fix manually.

    When you restore a repository from backup, assuming that changes in the repository were made after the time of the backup, working directories which were not affected by the failure may refer to revisions which no longer exist in the repository. Trying to run CVS in such directories will typically produce an error message. One way to get those changes back into the repository is as follows:

    • Get a new working directory.
    • Copy the files from the working directory from before the failure over to the new working directory (do not copy the contents of the ‘CVS’ directories, of course).
    • Working in the new working directory, use commands such as cvs update and cvs diff to figure out what has changed, and then when you are ready, commit the changes into the repository.

    |[[#Backing-up| < ]]| |[[#Remote-repositories| > ]]|   |[[#Repository| << ]]| |[[#Repository| Up ]]| |[[#Starting-a-new-project| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Moving a repository ===

    Just as backing up the files in the repository is pretty much like backing up any other files, if you need to move a repository from one place to another it is also pretty much like just moving any other collection of files.

    The main thing to consider is that working directories point to the repository. The simplest way to deal with a moved repository is to just get a fresh working directory after the move. Of course, you’ll want to make sure that the old working directory had been checked in before the move, or you figured out some other way to make sure that you don’t lose any changes. If you really do want to reuse the existing working directory, it should be possible with manual surgery on the ‘CVS/Repository’ files. You can see [[#Working-directory-storage|How data is stored in the working directory]], for information on the ‘CVS/Repository’ and ‘CVS/Root’ files, but unless you are sure you want to bother, it probably isn’t worth it.


    |[[#Moving-a-repository| < ]]| |[[#Server-requirements| > ]]|   |[[#Repository| << ]]| |[[#Repository| Up ]]| |[[#Starting-a-new-project| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Remote repositories ===

    Your working copy of the sources can be on a different machine than the repository. Using CVS in this manner is known as client/server operation. You run CVS on a machine which can mount your working directory, known as the client, and tell it to communicate to a machine which can mount the repository, known as the server. Generally, using a remote repository is just like using a local one, except that the format of the repository name is:

     
    [:method:][[user][:password]@]hostname[:[port]]/path/to/repository
    

    Specifying a password in the repository name is not recommended during checkout, since this will cause CVS to store a cleartext copy of the password in each created directory. cvs login first instead (see section [[#Password-authentication-client|Using the client with password authentication]]).

    The details of exactly what needs to be set up depend on how you are connecting to the server.

    If method is not specified, and the repository name contains ‘:’, then the default is ext or server, depending on your platform; both are described in [[#Connecting-via-rsh|Connecting with rsh]].


    |[[#Remote-repositories| < ]]| |[[#Connecting-via-rsh| > ]]|   |[[#Repository| << ]]| |[[#Remote-repositories| Up ]]| |[[#Starting-a-new-project| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== Server requirements ====

    The quick answer to what sort of machine is suitable as a server is that requirements are modest—a server with 32M of memory or even less can handle a fairly large source tree with a fair amount of activity.

    The real answer, of course, is more complicated. Estimating the known areas of large memory consumption should be sufficient to estimate memory requirements. There are two such areas documented here; other memory consumption should be small by comparison (if you find that is not the case, let us know, as described in [[#BUGS|Dealing with bugs in CVS or this manual]], so we can update this documentation).

    The first area of big memory consumption is large checkouts, when using the CVS server. The server consists of two processes for each client that it is serving. Memory consumption on the child process should remain fairly small. Memory consumption on the parent process, particularly if the network connection to the client is slow, can be expected to grow to slightly more than the size of the sources in a single directory, or two megabytes, whichever is larger.

    Multiplying the size of each CVS server by the number of servers which you expect to have active at one time should give an idea of memory requirements for the server. For the most part, the memory consumed by the parent process probably can be swap space rather than physical memory.

    The second area of large memory consumption is diff, when checking in large files. This is required even for binary files. The rule of thumb is to allow about ten times the size of the largest file you will want to check in, although five times may be adequate. For example, if you want to check in a file which is 10 megabytes, you should have 100 megabytes of memory on the machine doing the checkin (the server machine for client/server, or the machine running CVS for non-client/server). This can be swap space rather than physical memory. Because the memory is only required briefly, there is no particular need to allow memory for more than one such checkin at a time.

    Resource consumption for the client is even more modest—any machine with enough capacity to run the operating system in question should have little trouble.

    For information on disk space requirements, see [[#Creating-a-repository|Creating a repository]].


    |[[#Server-requirements| < ]]| |[[#Password-authenticated| > ]]|   |[[#Repository| << ]]| |[[#Remote-repositories| Up ]]| |[[#Starting-a-new-project| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== Connecting with rsh ====

    CVS uses the ‘rsh’ protocol to perform these operations, so the remote user host needs to have a ‘.rhosts’ file which grants access to the local user. Note that the program that CVS uses for this purpose may be specified using the ‘--with-rsh’ flag to configure.

    For example, suppose you are the user ‘mozart’ on the local machine ‘toe.example.com’, and the server machine is ‘faun.example.org’. On faun, put the following line into the file ‘.rhosts’ in ‘bach’’s home directory:

     
    toe.example.com  mozart
    

    Then test that ‘rsh’ is working with

     
    rsh -l bach faun.example.org 'echo $PATH'
    

    Next you have to make sure that rsh will be able to find the server. Make sure that the path which rsh printed in the above example includes the directory containing a program named cvs which is the server. You need to set the path in ‘.bashrc’, ‘.cshrc’, etc., not ‘.login’ or ‘.profile’. Alternately, you can set the environment variable CVS_SERVER on the client machine to the filename of the server you want to use, for example ‘/usr/local/bin/cvs-1.6’.

    There is no need to edit ‘inetd.conf’ or start a CVS server daemon.

    There are two access methods that you use in CVSROOT for rsh. :server: specifies an internal rsh client, which is supported only by some CVS ports. :ext: specifies an external rsh program. By default this is rsh (unless otherwise specified by the ‘--with-rsh’ flag to configure) but you may set the CVS_RSH environment variable to invoke another program which can access the remote server (for example, remsh on HP-UX 9 because rsh is something different). It must be a program which can transmit data to and from the server without modifying it; for example the Windows NT rsh is not suitable since it by default translates between CRLF and LF. The OS/2 CVS port has a hack to pass ‘-b’ to rsh to get around this, but since this could potentially cause problems for programs other than the standard rsh, it may change in the future. If you set CVS_RSH to SSH or some other rsh replacement, the instructions in the rest of this section concerning ‘.rhosts’ and so on are likely to be inapplicable; consult the documentation for your rsh replacement.

    Continuing our example, supposing you want to access the module ‘foo’ in the repository ‘/usr/local/cvsroot/’, on machine ‘faun.example.org’, you are ready to go:

     
    cvs -d :ext:bach@faun.example.org:/usr/local/cvsroot checkout foo
    

    (The ‘bach@’ can be omitted if the username is the same on both the local and remote hosts.)


    |[[#Connecting-via-rsh| < ]]| |[[#Password-authentication-server| > ]]|   |[[#Repository| << ]]| |[[#Remote-repositories| Up ]]| |[[#Starting-a-new-project| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== Direct connection with password authentication ====

    The CVS client can also connect to the server using a password protocol. This is particularly useful if using rsh is not feasible (for example, the server is behind a firewall), and Kerberos also is not available.

    To use this method, it is necessary to make some adjustments on both the server and client sides.


    |[[#Password-authenticated| < ]]| |[[#Password-authentication-client| > ]]|   |[[#Repository| << ]]| |[[#Password-authenticated| Up ]]| |[[#Starting-a-new-project| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ===== Setting up the server for password authentication =====

    First of all, you probably want to tighten the permissions on the ‘$CVSROOT’ and ‘$CVSROOT/CVSROOT’ directories. See [[#Password-authentication-security|Security considerations with password authentication]], for more details.

    On the server side, the file ‘/etc/inetd.conf’ needs to be edited so inetd knows to run the command cvs pserver when it receives a connection on the right port. By default, the port number is 2401; it would be different if your client were compiled with CVS_AUTH_PORT defined to something else, though. This can also be specified in the CVSROOT variable (see section [[#Remote-repositories|Remote repositories]]) or overridden with the CVS_CLIENT_PORT environment variable (see section [[#Environment-variables|All environment variables which affect CVS]]).

    If your inetd allows raw port numbers in ‘/etc/inetd.conf’, then the following (all on a single line in ‘inetd.conf’) should be sufficient:

     
    2401  stream  tcp  nowait  root  /usr/local/bin/cvs
    cvs -f --allow-root=/usr/cvsroot pserver
    

    (You could also use the ‘-T’ option to specify a temporary directory.)

    The ‘--allow-root’ option specifies the allowable CVSROOT directory. Clients which attempt to use a different CVSROOT directory will not be allowed to connect. If there is more than one CVSROOT directory which you want to allow, repeat the option. (Unfortunately, many versions of inetd have very small limits on the number of arguments and/or the total length of the command. The usual solution to this problem is to have inetd run a shell script which then invokes CVS with the necessary arguments.)

    If your inetd wants a symbolic service name instead of a raw port number, then put this in ‘/etc/services’:

     
    cvspserver      2401/tcp
    

    and put cvspserver instead of 2401 in ‘inetd.conf’.

    If your system uses xinetd instead of inetd, the procedure is slightly different. Create a file called ‘/etc/xinetd.d/cvspserver’ containing the following:

     
    service cvspserver
    {
       port        = 2401
       socket_type = stream
       protocol    = tcp
       wait        = no
       user        = root
       passenv     = PATH
       server      = /usr/local/bin/cvs
       server_args = -f --allow-root=/usr/cvsroot pserver
    }
    

    (If cvspserver is defined in ‘/etc/services’, you can omit the port line.)

    Once the above is taken care of, restart your inetd, or do whatever is necessary to force it to reread its initialization files.

    If you are having trouble setting this up, see [[#Connection|Trouble making a connection to a CVS server]].

    Because the client stores and transmits passwords in cleartext (almost—see [[#Password-authentication-security|Security considerations with password authentication]], for details), a separate CVS password file is generally used, so people don’t compromise their regular passwords when they access the repository. This file is ‘$CVSROOT/CVSROOT/passwd’ (see section [[#Intro-administrative-files|The administrative files]]). It uses a colon-separated format, similar to ‘/etc/passwd’ on Unix systems, except that it has fewer fields: CVS username, optional password, and an optional system username for CVS to run as if authentication succeeds. Here is an example ‘passwd’ file with five entries:

     
    anonymous:
    bach:ULtgRLXo7NRxs
    spwang:1sOp854gDF3DY
    melissa:tGX1fS8sun6rY:pubcvs
    qproj:XR4EZcEs0szik:pubcvs
    

    (The passwords are encrypted according to the standard Unix crypt() function, so it is possible to paste in passwords directly from regular Unix ‘/etc/passwd’ files.)

    The first line in the example will grant access to any CVS client attempting to authenticate as user anonymous, no matter what password they use, including an empty password. (This is typical for sites granting anonymous read-only access; for information on how to do the "read-only" part, see [[#Read_002donly-access|Read-only repository access]].)

    The second and third lines will grant access to bach and spwang if they supply their respective plaintext passwords.

    The fourth line will grant access to melissa, if she supplies the correct password, but her CVS operations will actually run on the server side under the system user pubcvs. Thus, there need not be any system user named melissa, but there must be one named pubcvs.

    The fifth line shows that system user identities can be shared: any client who successfully authenticates as qproj will actually run as pubcvs, just as melissa does. That way you could create a single, shared system user for each project in your repository, and give each developer their own line in the ‘$CVSROOT/CVSROOT/passwd’ file. The CVS username on each line would be different, but the system username would be the same. The reason to have different CVS usernames is that CVS will log their actions under those names: when melissa commits a change to a project, the checkin is recorded in the project’s history under the name melissa, not pubcvs. And the reason to have them share a system username is so that you can arrange permissions in the relevant area of the repository such that only that account has write-permission there.

    If the system-user field is present, all password-authenticated CVS commands run as that user; if no system user is specified, CVS simply takes the CVS username as the system username and runs commands as that user. In either case, if there is no such user on the system, then the CVS operation will fail (regardless of whether the client supplied a valid password).

    The password and system-user fields can both be omitted (and if the system-user field is omitted, then also omit the colon that would have separated it from the encrypted password). For example, this would be a valid ‘$CVSROOT/CVSROOT/passwd’ file:

     
    anonymous::pubcvs
    fish:rKa5jzULzmhOo:kfogel
    sussman:1sOp854gDF3DY
    

    When the password field is omitted or empty, then the client’s authentication attempt will succeed with any password, including the empty string. However, the colon after the CVS username is always necessary, even if the password is empty.

    CVS can also fall back to use system authentication. When authenticating a password, the server first checks for the user in the ‘$CVSROOT/CVSROOT/passwd’ file. If it finds the user, it will use that entry for authentication as described above. But if it does not find the user, or if the CVSpasswd’ file does not exist, then the server can try to authenticate the username and password using the operating system’s user-lookup routines (this "fallback" behavior can be disabled by setting SystemAuth=no in the CVSconfig’ file, see section [[#config|The CVSROOT/config configuration file]]).

    The default fallback behaviour is to look in ‘/etc/passwd’ for this system password unless your system has PAM (Pluggable Authentication Modules) and your CVS server executable was configured to use it at compile time (using ./configure --enable-pam - see the INSTALL file for more). In this case, PAM will be consulted instead. This means that CVS can be configured to use any password authentication source PAM can be configured to use (possibilities include a simple UNIX password, NIS, LDAP, and others) in its global configuration file (usually ‘/etc/pam.conf’ or possibly ‘/etc/pam.d/cvs’). See your PAM documentation for more details on PAM configuration.

    Note that PAM is an experimental feature in CVS and feedback is encouraged. Please send a mail to one of the CVS mailing lists (info-cvs@gnu.org or bug-cvs@gnu.org) if you use the CVS PAM support.

    WARNING: Using PAM gives the system administrator much more flexibility about how CVS users are authenticated but no more security than other methods. See below for more.

    CVS needs an "auth" and "account" module in the PAM configuration file. A typical PAM configuration would therefore have the following lines in ‘/etc/pam.conf’ to emulate the standard CVS system ‘/etc/passwd’ authentication:

     
    cvs	auth	    required	pam_unix.so
    cvs	account	    required	pam_unix.so
    

    The the equivalent ‘/etc/pam.d/cvs’ would contain

     
    auth	    required	pam_unix.so
    account	    required	pam_unix.so
    

    Some systems require a full path to the module so that ‘pam_unix.so’ (Linux) would become something like ‘/usr/lib/security/$ISA/pam_unix.so.1’ (Sun Solaris). See the ‘contrib/pam’ subdirectory of the CVS source distribution for further example configurations.

    The PAM service name given above as "cvs" is just the service name in the default configuration amd can be set using ./configure --with-hardcoded-pam-service-name=<pam-service-name> before compiling. CVS can also be configured to use whatever name it is invoked as as its PAM service name using ./configure --without-hardcoded-pam-service-name, but this feature should not be used if you may not have control of the name CVS will be invoked as.

    Be aware, also, that falling back to system authentication might be a security risk: CVS operations would then be authenticated with that user’s regular login password, and the password flies across the network in plaintext. See [[#Password-authentication-security|Security considerations with password authentication]] for more on this. This may be more of a problem with PAM authentication because it is likely that the source of the system password is some central authentication service like LDAP which is also used to authenticate other services.

    On the other hand, PAM makes it very easy to change your password regularly. If they are given the option of a one-password system for all of their activities, users are often more willing to change their password on a regular basis.

    In the non-PAM configuration where the password is stored in the ‘CVSROOT/passwd’ file, it is difficult to change passwords on a regular basis since only administrative users (or in some cases processes that act as an administrative user) are typicaly given access to modify this file. Either there needs to be some hand-crafted web page or set-uid program to update the file, or the update needs to be done by submitting a request to an administrator to perform the duty by hand. In the first case, having to remember to update a separate password on a periodic basis can be difficult. In the second case, the manual nature of the change will typically mean that the password will not be changed unless it is absolutely necessary.

    Note that PAM administrators should probably avoid configuring one-time-passwords (OTP) for CVS authentication/authorization. If OTPs are desired, the administrator may wish to encourage the use of one of the other Client/Server access methods. See the section on see section [[#Remote-repositories|Remote repositories]] for a list of other methods.

    Right now, the only way to put a password in the CVSpasswd’ file is to paste it there from somewhere else. Someday, there may be a cvs passwd command.

    Unlike many of the files in ‘$CVSROOT/CVSROOT’, it is normal to edit the ‘passwd’ file in-place, rather than via CVS. This is because of the possible security risks of having the ‘passwd’ file checked out to people’s working copies. If you do want to include the ‘passwd’ file in checkouts of ‘$CVSROOT/CVSROOT’, see [[#checkoutlist|The checkoutlist file]].


    |[[#Password-authentication-server| < ]]| |[[#Password-authentication-security| > ]]|   |[[#Repository| << ]]| |[[#Password-authenticated| Up ]]| |[[#Starting-a-new-project| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ===== Using the client with password authentication =====

    To run a CVS command on a remote repository via the password-authenticating server, one specifies the pserver protocol, optional username, repository host, an optional port number, and path to the repository. For example:

     
    cvs -d :pserver:faun.example.org:/usr/local/cvsroot checkout someproj
    

    or

     
    CVSROOT=:pserver:bach@faun.example.org:2401/usr/local/cvsroot
    cvs checkout someproj
    

    However, unless you’re connecting to a public-access repository (i.e., one where that username doesn’t require a password), you’ll need to supply a password or log in first. Logging in verifies your password with the repository and stores it in a file. It’s done with the login command, which will prompt you interactively for the password if you didn’t supply one as part of $CVSROOT:

     
    cvs -d :pserver:bach@faun.example.org:/usr/local/cvsroot login
    CVS password:
    

    or

     
    cvs -d :pserver:bach:p4ss30rd@faun.example.org:/usr/local/cvsroot login
    

    After you enter the password, CVS verifies it with the server. If the verification succeeds, then that combination of username, host, repository, and password is permanently recorded, so future transactions with that repository won’t require you to run cvs login. (If verification fails, CVS will exit complaining that the password was incorrect, and nothing will be recorded.)

    The records are stored, by default, in the file ‘$HOME/.cvspass’. That file’s format is human-readable, and to a degree human-editable, but note that the passwords are not stored in cleartext—they are trivially encoded to protect them from "innocent" compromise (i.e., inadvertent viewing by a system administrator or other non-malicious person).

    You can change the default location of this file by setting the CVS_PASSFILE environment variable. If you use this variable, make sure you set it before cvs login is run. If you were to set it after running cvs login, then later CVS commands would be unable to look up the password for transmission to the server.

    Once you have logged in, all CVS commands using that remote repository and username will authenticate with the stored password. So, for example

     
    cvs -d :pserver:bach@faun.example.org:/usr/local/cvsroot checkout foo
    

    should just work (unless the password changes on the server side, in which case you’ll have to re-run cvs login).

    Note that if the ‘:pserver:’ were not present in the repository specification, CVS would assume it should use rsh to connect with the server instead (see section [[#Connecting-via-rsh|Connecting with rsh]]).

    Of course, once you have a working copy checked out and are running CVS commands from within it, there is no longer any need to specify the repository explicitly, because CVS can deduce the repository from the working copy’s ‘CVS’ subdirectory.

    The password for a given remote repository can be removed from the CVS_PASSFILE by using the cvs logout command.


    |[[#Password-authentication-client| < ]]| |[[#GSSAPI-authenticated| > ]]|   |[[#Repository| << ]]| |[[#Password-authenticated| Up ]]| |[[#Starting-a-new-project| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ===== Security considerations with password authentication =====

    The passwords are stored on the client side in a trivial encoding of the cleartext, and transmitted in the same encoding. The encoding is done only to prevent inadvertent password compromises (i.e., a system administrator accidentally looking at the file), and will not prevent even a naive attacker from gaining the password.

    The separate CVS password file (see section [[#Password-authentication-server|Setting up the server for password authentication]]) allows people to use a different password for repository access than for login access. On the other hand, once a user has non-read-only access to the repository, she can execute programs on the server system through a variety of means. Thus, repository access implies fairly broad system access as well. It might be possible to modify CVS to prevent that, but no one has done so as of this writing.

    Note that because the ‘$CVSROOT/CVSROOT’ directory contains ‘passwd’ and other files which are used to check security, you must control the permissions on this directory as tightly as the permissions on ‘/etc’. The same applies to the ‘$CVSROOT’ directory itself and any directory above it in the tree. Anyone who has write access to such a directory will have the ability to become any user on the system. Note that these permissions are typically tighter than you would use if you are not using pserver.

    In summary, anyone who gets the password gets repository access (which may imply some measure of general system access as well). The password is available to anyone who can sniff network packets or read a protected (i.e., user read-only) file. If you want real security, get Kerberos.


    |[[#Password-authentication-security| < ]]| |[[#Kerberos-authenticated| > ]]|   |[[#Repository| << ]]| |[[#Remote-repositories| Up ]]| |[[#Starting-a-new-project| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== Direct connection with GSSAPI ====

    GSSAPI is a generic interface to network security systems such as Kerberos 5. If you have a working GSSAPI library, you can have CVS connect via a direct TCP connection, authenticating with GSSAPI.

    To do this, CVS needs to be compiled with GSSAPI support; when configuring CVS it tries to detect whether GSSAPI libraries using kerberos version 5 are present. You can also use the ‘--with-gssapi’ flag to configure.

    The connection is authenticated using GSSAPI, but the message stream is not authenticated by default. You must use the -a global option to request stream authentication.

    The data transmitted is not encrypted by default. Encryption support must be compiled into both the client and the server; use the ‘--enable-encrypt’ configure option to turn it on. You must then use the -x global option to request encryption.

    GSSAPI connections are handled on the server side by the same server which handles the password authentication server; see [[#Password-authentication-server|Setting up the server for password authentication]]. If you are using a GSSAPI mechanism such as Kerberos which provides for strong authentication, you will probably want to disable the ability to authenticate via cleartext passwords. To do so, create an empty ‘CVSROOT/passwd’ password file, and set SystemAuth=no in the config file (see section [[#config|The CVSROOT/config configuration file]]).

    The GSSAPI server uses a principal name of cvs/hostname, where hostname is the canonical name of the server host. You will have to set this up as required by your GSSAPI mechanism.

    To connect using GSSAPI, use ‘:gserver:’. For example,

     
    cvs -d :gserver:faun.example.org:/usr/local/cvsroot checkout foo
    

    |[[#GSSAPI-authenticated| < ]]| |[[#Connecting-via-fork| > ]]|   |[[#Repository| << ]]| |[[#Remote-repositories| Up ]]| |[[#Starting-a-new-project| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== Direct connection with kerberos ====

    The easiest way to use kerberos is to use the kerberos rsh, as described in [[#Connecting-via-rsh|Connecting with rsh]]. The main disadvantage of using rsh is that all the data needs to pass through additional programs, so it may be slower. So if you have kerberos installed you can connect via a direct TCP connection, authenticating with kerberos.

    This section concerns the kerberos network security system, version 4. Kerberos version 5 is supported via the GSSAPI generic network security interface, as described in the previous section.

    To do this, CVS needs to be compiled with kerberos support; when configuring CVS it tries to detect whether kerberos is present or you can use the ‘--with-krb4’ flag to configure.

    The data transmitted is not encrypted by default. Encryption support must be compiled into both the client and server; use the ‘--enable-encryption’ configure option to turn it on. You must then use the -x global option to request encryption.

    You need to edit ‘inetd.conf’ on the server machine to run cvs kserver. The client uses port 1999 by default; if you want to use another port specify it in the CVSROOT (see section [[#Remote-repositories|Remote repositories]]) or the CVS_CLIENT_PORT environment variable (see section [[#Environment-variables|All environment variables which affect CVS]]) on the client.

    When you want to use CVS, get a ticket in the usual way (generally kinit); it must be a ticket which allows you to log into the server machine. Then you are ready to go:

     
    cvs -d :kserver:faun.example.org:/usr/local/cvsroot checkout foo
    

    Previous versions of CVS would fall back to a connection via rsh; this version will not do so.


    |[[#Kerberos-authenticated| < ]]| |[[#Read_002donly-access| > ]]|   |[[#Repository| << ]]| |[[#Remote-repositories| Up ]]| |[[#Starting-a-new-project| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== Connecting with fork ====

    This access method allows you to connect to a repository on your local disk via the remote protocol. In other words it does pretty much the same thing as :local:, but various quirks, bugs and the like are those of the remote CVS rather than the local CVS.

    For day-to-day operations you might prefer either :local: or :fork:, depending on your preferences. Of course :fork: comes in particularly handy in testing or debugging cvs and the remote protocol. Specifically, we avoid all of the network-related setup/configuration, timeouts, and authentication inherent in the other remote access methods but still create a connection which uses the remote protocol.

    To connect using the fork method, use ‘:fork:’ and the pathname to your local repository. For example:

     
    cvs -d :fork:/usr/local/cvsroot checkout foo
    

    As with :ext:, the server is called ‘cvs’ by default, or the value of the CVS_SERVER environment variable.


    |[[#Connecting-via-fork| < ]]| |[[#Server-temporary-directory| > ]]|   |[[#Repository| << ]]| |[[#Repository| Up ]]| |[[#Starting-a-new-project| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Read-only repository access ===

    It is possible to grant read-only repository access to people using the password-authenticated server (see section [[#Password-authenticated|Direct connection with password authentication]]). (The other access methods do not have explicit support for read-only users because those methods all assume login access to the repository machine anyway, and therefore the user can do whatever local file permissions allow her to do.)

    A user who has read-only access can do only those CVS operations which do not modify the repository, except for certain “administrative” files (such as lock files and the history file). It may be desirable to use this feature in conjunction with user-aliasing (see section [[#Password-authentication-server|Setting up the server for password authentication]]).

    Unlike with previous versions of CVS, read-only users should be able merely to read the repository, and not to execute programs on the server or otherwise gain unexpected levels of access. Or to be more accurate, the known holes have been plugged. Because this feature is new and has not received a comprehensive security audit, you should use whatever level of caution seems warranted given your attitude concerning security.

    There are two ways to specify read-only access for a user: by inclusion, and by exclusion.

    "Inclusion" means listing that user specifically in the ‘$CVSROOT/CVSROOT/readers’ file, which is simply a newline-separated list of users. Here is a sample ‘readers’ file:

     
    melissa
    splotnik
    jrandom
    

    (Don’t forget the newline after the last user.)

    "Exclusion" means explicitly listing everyone who has write access—if the file

     
    $CVSROOT/CVSROOT/writers
    

    exists, then only those users listed in it have write access, and everyone else has read-only access (of course, even the read-only users still need to be listed in the CVSpasswd’ file). The ‘writers’ file has the same format as the ‘readers’ file.

    Note: if your CVSpasswd’ file maps cvs users onto system users (see section [[#Password-authentication-server|Setting up the server for password authentication]]), make sure you deny or grant read-only access using the cvs usernames, not the system usernames. That is, the ‘readers’ and ‘writers’ files contain cvs usernames, which may or may not be the same as system usernames.

    Here is a complete description of the server’s behavior in deciding whether to grant read-only or read-write access:

    If ‘readers’ exists, and this user is listed in it, then she gets read-only access. Or if ‘writers’ exists, and this user is NOT listed in it, then she also gets read-only access (this is true even if ‘readers’ exists but she is not listed there). Otherwise, she gets full read-write access.

    Of course there is a conflict if the user is listed in both files. This is resolved in the more conservative way, it being better to protect the repository too much than too little: such a user gets read-only access.


    |[[#Read_002donly-access| < ]]| |[[#Starting-a-new-project| > ]]|   |[[#Repository| << ]]| |[[#Repository| Up ]]| |[[#Starting-a-new-project| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Temporary directories for the server ===

    While running, the CVS server creates temporary directories. They are named

     
    cvs-servpid
    

    where pid is the process identification number of the server. They are located in the directory specified by the ‘-T’ global option (see section [[#Global-options|Global options]]), the TMPDIR environment variable (see section [[#Environment-variables|All environment variables which affect CVS]]), or, failing that, ‘/tmp’.

    In most cases the server will remove the temporary directory when it is done, whether it finishes normally or abnormally. However, there are a few cases in which the server does not or cannot remove the temporary directory, for example:

    • If the server aborts due to an internal server error, it may preserve the directory to aid in debugging
    • If the server is killed in a way that it has no way of cleaning up (most notably, ‘kill -KILL’ on unix).
    • If the system shuts down without an orderly shutdown, which tells the server to clean up.

    In cases such as this, you will need to manually remove the ‘cvs-servpid’ directories. As long as there is no server running with process identification number pid, it is safe to do so.


    |[[#Server-temporary-directory| < ]]| |[[#Setting-up-the-files| > ]]|   |[[#Repository| << ]]| |[[#Top| Up ]]| |[[#Revisions| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    == Starting a project with CVS ==

    Because renaming files and moving them between directories is somewhat inconvenient, the first thing you do when you start a new project should be to think through your file organization. It is not impossible to rename or move files, but it does increase the potential for confusion and CVS does have some quirks particularly in the area of renaming directories. See section [[#Moving-files|Moving and renaming files]].

    What to do next depends on the situation at hand.


    |[[#Starting-a-new-project| < ]]| |[[#From-files| > ]]|   |[[#Starting-a-new-project| << ]]| |[[#Starting-a-new-project| Up ]]| |[[#Revisions| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Setting up the files ===

    The first step is to create the files inside the repository. This can be done in a couple of different ways.


    |[[#Setting-up-the-files| < ]]| |[[#From-other-version-control-systems| > ]]|   |[[#Starting-a-new-project| << ]]| |[[#Setting-up-the-files| Up ]]| |[[#Revisions| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== Creating a directory tree from a number of files ====

    When you begin using CVS, you will probably already have several projects that can be put under CVS control. In these cases the easiest way is to use the import command. An example is probably the easiest way to explain how to use it. If the files you want to install in CVS reside in ‘wdir’, and you want them to appear in the repository as ‘$CVSROOT/yoyodyne/rdir’, you can do this:

     
    $ cd wdir
    $ cvs import -m "Imported sources" yoyodyne/rdir yoyo start
    

    Unless you supply a log message with the ‘-m’ flag, CVS starts an editor and prompts for a message. The string ‘yoyo’ is a vendor tag, and ‘start’ is a release tag. They may fill no purpose in this context, but since CVS requires them they must be present. See section [[#Tracking-sources|Tracking third-party sources]], for more information about them.

    You can now verify that it worked, and remove your original source directory.

     
    $ cd ..
    $ cvs checkout yoyodyne/rdir       # Explanation below
    $ diff -r wdir yoyodyne/rdir
    $ rm -r wdir
    

    Erasing the original sources is a good idea, to make sure that you do not accidentally edit them in wdir, bypassing CVS. Of course, it would be wise to make sure that you have a backup of the sources before you remove them.

    The checkout command can either take a module name as argument (as it has done in all previous examples) or a path name relative to $CVSROOT, as it did in the example above.

    It is a good idea to check that the permissions CVS sets on the directories inside $CVSROOT are reasonable, and that they belong to the proper groups. See section [[#File-permissions|File permissions]].

    If some of the files you want to import are binary, you may want to use the wrappers features to specify which files are binary and which are not. See section [[#Wrappers|The cvswrappers file]].


    |[[#From-files| < ]]| |[[#From-scratch| > ]]|   |[[#Starting-a-new-project| << ]]| |[[#Setting-up-the-files| Up ]]| |[[#Revisions| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== Creating Files From Other Version Control Systems ====

    If you have a project which you are maintaining with another version control system, such as RCS, you may wish to put the files from that project into CVS, and preserve the revision history of the files.

    From RCS

    If you have been using RCS, find the RCS files—usually a file named ‘foo.c’ will have its RCS file in ‘RCS/foo.c,v’ (but it could be other places; consult the RCS documentation for details). Then create the appropriate directories in CVS if they do not already exist. Then copy the files into the appropriate directories in the CVS repository (the name in the repository must be the name of the source file with ‘,v’ added; the files go directly in the appropriate directory of the repository, not in an ‘RCS’ subdirectory). This is one of the few times when it is a good idea to access the CVS repository directly, rather than using CVS commands. Then you are ready to check out a new working directory.

    The RCS file should not be locked when you move it into CVS; if it is, CVS will have trouble letting you operate on it.

    From another version control system

    Many version control systems have the ability to export RCS files in the standard format. If yours does, export the RCS files and then follow the above instructions.

    Failing that, probably your best bet is to write a script that will check out the files one revision at a time using the command line interface to the other system, and then check the revisions into CVS. The ‘sccs2rcs’ script mentioned below may be a useful example to follow.

    From SCCS

    There is a script in the ‘contrib’ directory of the CVS source distribution called ‘sccs2rcs’ which converts SCCS files to RCS files. Note: you must run it on a machine which has both SCCS and RCS installed, and like everything else in contrib it is unsupported (your mileage may vary).

    From PVCS

    There is a script in the ‘contrib’ directory of the CVS source distribution called ‘pvcs_to_rcs’ which converts PVCS archives to RCS files. You must run it on a machine which has both PVCS and RCS installed, and like everything else in contrib it is unsupported (your mileage may vary). See the comments in the script for details.


    |[[#From-other-version-control-systems| < ]]| |[[#Defining-the-module| > ]]|   |[[#Starting-a-new-project| << ]]| |[[#Setting-up-the-files| Up ]]| |[[#Revisions| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== Creating a directory tree from scratch ====

    For a new project, the easiest thing to do is probably to create an empty directory structure, like this:

     
    $ mkdir tc
    $ mkdir tc/man
    $ mkdir tc/testing
    

    After that, you use the import command to create the corresponding (empty) directory structure inside the repository:

     
    $ cd tc
    $ cvs import -m "Created directory structure" yoyodyne/dir yoyo start
    

    Then, use add to add files (and new directories) as they appear.

    Check that the permissions CVS sets on the directories inside $CVSROOT are reasonable.


    |[[#From-scratch| < ]]| |[[#Revisions| > ]]|   |[[#Starting-a-new-project| << ]]| |[[#Starting-a-new-project| Up ]]| |[[#Revisions| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Defining the module ===

    The next step is to define the module in the ‘modules’ file. This is not strictly necessary, but modules can be convenient in grouping together related files and directories.

    In simple cases these steps are sufficient to define a module.

    1. Get a working copy of the modules file.
       
      $ cvs checkout CVSROOT/modules
      $ cd CVSROOT
      
    2. Edit the file and insert a line that defines the module. See section [[#Intro-administrative-files|The administrative files]], for an introduction. See section [[#modules|The modules file]], for a full description of the modules file. You can use the following line to define the module ‘tc’:
       
      tc   yoyodyne/tc
      
    3. Commit your changes to the modules file.
       
      $ cvs commit -m "Added the tc module." modules
      
    4. Release the modules module.
       
      $ cd ..
      $ cvs release -d CVSROOT
      

    |[[#Defining-the-module| < ]]| |[[#Revision-numbers| > ]]|   |[[#Starting-a-new-project| << ]]| |[[#Top| Up ]]| |[[#Branching-and-merging| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    == Revisions ==

    For many uses of CVS, one doesn’t need to worry too much about revision numbers; CVS assigns numbers such as 1.1, 1.2, and so on, and that is all one needs to know. However, some people prefer to have more knowledge and control concerning how CVS assigns revision numbers.

    If one wants to keep track of a set of revisions involving more than one file, such as which revisions went into a particular release, one uses a tag, which is a symbolic revision which can be assigned to a numeric revision in each file.


    |[[#Revisions| < ]]| |[[#Versions-revisions-releases| > ]]|   |[[#Revisions| << ]]| |[[#Revisions| Up ]]| |[[#Branching-and-merging| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Revision numbers ===

    Each version of a file has a unique revision number. Revision numbers look like ‘1.1’, ‘1.2’, ‘1.3.2.2’ or even ‘1.3.2.2.4.5’. A revision number always has an even number of period-separated decimal integers. By default revision 1.1 is the first revision of a file. Each successive revision is given a new number by increasing the rightmost number by one. The following figure displays a few revisions, with newer revisions to the right.

     
           +-----+    +-----+    +-----+    +-----+    +-----+
           ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 !
           +-----+    +-----+    +-----+    +-----+    +-----+
    

    It is also possible to end up with numbers containing more than one period, for example ‘1.3.2.2’. Such revisions represent revisions on branches (see section [[#Branching-and-merging|Branching and merging]]); such revision numbers are explained in detail in [[#Branches-and-revisions|Branches and revisions]].


    |[[#Revision-numbers| < ]]| |[[#Assigning-revisions| > ]]|   |[[#Revisions| << ]]| |[[#Revisions| Up ]]| |[[#Branching-and-merging| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Versions, revisions and releases ===

    A file can have several versions, as described above. Likewise, a software product can have several versions. A software product is often given a version number such as ‘4.1.1’.

    Versions in the first sense are called revisions in this document, and versions in the second sense are called releases. To avoid confusion, the word version is almost never used in this document.


    |[[#Versions-revisions-releases| < ]]| |[[#Tags| > ]]|   |[[#Revisions| << ]]| |[[#Revisions| Up ]]| |[[#Branching-and-merging| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Assigning revisions ===

    By default, CVS will assign numeric revisions by leaving the first number the same and incrementing the second number. For example, 1.1, 1.2, 1.3, etc.

    When adding a new file, the second number will always be one and the first number will equal the highest first number of any file in that directory. For example, the current directory contains files whose highest numbered revisions are 1.7, 3.1, and 4.12, then an added file will be given the numeric revision 4.1.

    Normally there is no reason to care about the revision numbers—it is easier to treat them as internal numbers that CVS maintains, and tags provide a better way to distinguish between things like release 1 versus release 2 of your product (see section [[#Tags|Tags–Symbolic revisions]]). However, if you want to set the numeric revisions, the ‘-r’ option to cvs commit can do that. The ‘-r’ option implies the ‘-f’ option, in the sense that it causes the files to be committed even if they are not modified.

    For example, to bring all your files up to revision 3.0 (including those that haven’t changed), you might invoke:

     
    $ cvs commit -r 3.0
    

    Note that the number you specify with ‘-r’ must be larger than any existing revision number. That is, if revision 3.0 exists, you cannot ‘cvs commit -r 1.3’. If you want to maintain several releases in parallel, you need to use a branch (see section [[#Branching-and-merging|Branching and merging]]).


    |[[#Assigning-revisions| < ]]| |[[#Tagging-the-working-directory| > ]]|   |[[#Revisions| << ]]| |[[#Revisions| Up ]]| |[[#Branching-and-merging| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Tags–Symbolic revisions ===

    The revision numbers live a life of their own. They need not have anything at all to do with the release numbers of your software product. Depending on how you use CVS the revision numbers might change several times between two releases. As an example, some of the source files that make up RCS 5.6 have the following revision numbers:

     
    ci.c            5.21
    co.c            5.9
    ident.c         5.3
    rcs.c           5.12
    rcsbase.h       5.11
    rcsdiff.c       5.10
    rcsedit.c       5.11
    rcsfcmp.c       5.9
    rcsgen.c        5.10
    rcslex.c        5.11
    rcsmap.c        5.2
    rcsutil.c       5.10
    

    You can use the tag command to give a symbolic name to a certain revision of a file. You can use the ‘-v’ flag to the status command to see all tags that a file has, and which revision numbers they represent. Tag names must start with an uppercase or lowercase letter and can contain uppercase and lowercase letters, digits, ‘-’, and ‘_’. The two tag names BASE and HEAD are reserved for use by CVS. It is expected that future names which are special to CVS will be specially named, for example by starting with ‘.’, rather than being named analogously to BASE and HEAD, to avoid conflicts with actual tag names.

    You’ll want to choose some convention for naming tags, based on information such as the name of the program and the version number of the release. For example, one might take the name of the program, immediately followed by the version number with ‘.’ changed to ‘-’, so that CVS 1.9 would be tagged with the name cvs1-9. If you choose a consistent convention, then you won’t constantly be guessing whether a tag is cvs-1-9 or cvs1_9 or what. You might even want to consider enforcing your convention in the taginfo file (see section [[#user_002ddefined-logging|User-defined logging]]).

    The following example shows how you can add a tag to a file. The commands must be issued inside your working directory. That is, you should issue the command in the directory where ‘backend.c’ resides.

     
    $ cvs tag rel-0-4 backend.c
    T backend.c
    $ cvs status -v backend.c
    ===================================================================
    File: backend.c         Status: Up-to-date
    
        Version:            1.4     Tue Dec  1 14:39:01 1992
        RCS Version:        1.4     /u/cvsroot/yoyodyne/tc/backend.c,v
        Sticky Tag:         (none)
        Sticky Date:        (none)
        Sticky Options:     (none)
    
        Existing Tags:
            rel-0-4                     (revision: 1.4)
    
    

    For a complete summary of the syntax of cvs tag, including the various options, see [[#Invoking-CVS|Quick reference to CVS commands]].

    There is seldom reason to tag a file in isolation. A more common use is to tag all the files that constitute a module with the same tag at strategic points in the development life-cycle, such as when a release is made.

     
    $ cvs tag rel-1-0 .
    cvs tag: Tagging .
    T Makefile
    T backend.c
    T driver.c
    T frontend.c
    T parser.c
    

    (When you give CVS a directory as argument, it generally applies the operation to all the files in that directory, and (recursively), to any subdirectories that it may contain. See section [[#Recursive-behavior|Recursive behavior]].)

    The checkout command has a flag, ‘-r’, that lets you check out a certain revision of a module. This flag makes it easy to retrieve the sources that make up release 1.0 of the module ‘tc’ at any time in the future:

     
    $ cvs checkout -r rel-1-0 tc
    

    This is useful, for instance, if someone claims that there is a bug in that release, but you cannot find the bug in the current working copy.

    You can also check out a module as it was at any given date. See section [[#checkout-options|checkout options]]. When specifying ‘-r’ to any of these commands, you will need beware of sticky tags; see [[#Sticky-tags|Sticky tags]].

    When you tag more than one file with the same tag you can think about the tag as "a curve drawn through a matrix of filename vs. revision number." Say we have 5 files with the following revisions:

     
            file1   file2   file3   file4   file5
    
            1.1     1.1     1.1     1.1  /--1.1*      <-*-  TAG
            1.2*-   1.2     1.2    -1.2*-
            1.3  \- 1.3*-   1.3   / 1.3
            1.4          \  1.4  /  1.4
                          \-1.5*-   1.5
                            1.6
    

    At some time in the past, the * versions were tagged. You can think of the tag as a handle attached to the curve drawn through the tagged revisions. When you pull on the handle, you get all the tagged revisions. Another way to look at it is that you "sight" through a set of revisions that is "flat" along the tagged revisions, like this:

     
            file1   file2   file3   file4   file5
    
                            1.1
                            1.2
                    1.1     1.3                       _
            1.1     1.2     1.4     1.1              /
            1.2*----1.3*----1.5*----1.2*----1.1     (--- <--- Look here
            1.3             1.6     1.3              \_
            1.4                     1.4
                                    1.5
    

    |[[#Tags| < ]]| |[[#Tagging-by-date_002ftag| > ]]|   |[[#Revisions| << ]]| |[[#Revisions| Up ]]| |[[#Branching-and-merging| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Specifying what to tag from the working directory ===

    The example in the previous section demonstrates one of the most common ways to choose which revisions to tag. Namely, running the cvs tag command without arguments causes CVS to select the revisions which are checked out in the current working directory. For example, if the copy of ‘backend.c’ in working directory was checked out from revision 1.4, then CVS will tag revision 1.4. Note that the tag is applied immediately to revision 1.4 in the repository; tagging is not like modifying a file, or other operations in which one first modifies the working directory and then runs cvs commit to transfer that modification to the repository.

    One potentially surprising aspect of the fact that cvs tag operates on the repository is that you are tagging the checked-in revisions, which may differ from locally modified files in your working directory. If you want to avoid doing this by mistake, specify the ‘-c’ option to cvs tag. If there are any locally modified files, CVS will abort with an error before it tags any files:

     
    $ cvs tag -c rel-0-4
    cvs tag: backend.c is locally modified
    cvs [tag aborted]: correct the above errors first!
    

    |[[#Tagging-the-working-directory| < ]]| |[[#Modifying-tags| > ]]|   |[[#Revisions| << ]]| |[[#Revisions| Up ]]| |[[#Branching-and-merging| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Specifying what to tag by date or revision ===

    The cvs rtag command tags the repository as of a certain date or time (or can be used to tag the latest revision). rtag works directly on the repository contents (it requires no prior checkout and does not look for a working directory).

    The following options specify which date or revision to tag. See [[#Common-options|Common command options]], for a complete description of them.

    -D date

    Tag the most recent revision no later than date.

    -f

    Only useful with the ‘-D date’ or ‘-r tag’ flags. If no matching revision is found, use the most recent revision (instead of ignoring the file).

    -r tag

    Only tag those files that contain existing tag tag.

    The cvs tag command also allows one to specify files by revision or date, using the same ‘-r’, ‘-D’, and ‘-f’ options. However, this feature is probably not what you want. The reason is that cvs tag chooses which files to tag based on the files that exist in the working directory, rather than the files which existed as of the given tag/date. Therefore, you are generally better off using cvs rtag. The exceptions might be cases like:

     
    cvs tag -r 1.4 stable backend.c
    

    |[[#Tagging-by-date_002ftag| < ]]| |[[#Tagging-add_002fremove| > ]]|   |[[#Revisions| << ]]| |[[#Revisions| Up ]]| |[[#Branching-and-merging| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Deleting, moving, and renaming tags ===

    Normally one does not modify tags. They exist in order to record the history of the repository and so deleting them or changing their meaning would, generally, not be what you want.

    However, there might be cases in which one uses a tag temporarily or accidentally puts one in the wrong place. Therefore, one might delete, move, or rename a tag.

    WARNING: the commands in this section are dangerous; they permanently discard historical information and it can be difficult or impossible to recover from errors. If you are a CVS administrator, you may consider restricting these commands with taginfo (see section [[#user_002ddefined-logging|User-defined logging]]).

    To delete a tag, specify the ‘-d’ option to either cvs tag or cvs rtag. For example:

     
    cvs rtag -d rel-0-4 tc
    

    deletes the non-branch tag rel-0-4 from the module tc. In the event that branch tags are encountered within the repository with the given name, a warning message will be issued and the branch tag will not be deleted. If you are absolutely certain you know what you are doing, the -B option may be specified to allow deletion of branch tags. In that case, any non-branch tags encountered will trigger warnings and will not be deleted.

    WARNING: Moving branch tags is very dangerous! If you think you need the -B option, think again and ask your CVS administrator about it (if that isn’t you). There is almost certainly another way to accomplish what you want to accomplish.

    When we say move a tag, we mean to make the same name point to different revisions. For example, the stable tag may currently point to revision 1.4 of ‘backend.c’ and perhaps we want to make it point to revision 1.6. To move a non-branch tag, specify the ‘-F’ option to either cvs tag or cvs rtag. For example, the task just mentioned might be accomplished as:

     
    cvs tag -r 1.6 -F stable backend.c
    

    If any branch tags are encountered in the repository with the given name, a warning is issued and the branch tag is not disturbed. If you are absolutely certain you wish to move the branch tag, the -B option may be specified. In that case, non-branch tags encountered with the given name are ignored with a warning message.

    WARNING: Moving branch tags is very dangerous! If you think you need the -B option, think again and ask your CVS administrator about it (if that isn’t you). There is almost certainly another way to accomplish what you want to accomplish.

    When we say rename a tag, we mean to make a different name point to the same revisions as the old tag. For example, one may have misspelled the tag name and want to correct it (hopefully before others are relying on the old spelling). To rename a tag, first create a new tag using the ‘-r’ option to cvs rtag, and then delete the old name. (Caution: this method will not work with branch tags.) This leaves the new tag on exactly the same files as the old tag. For example:

     
    cvs rtag -r old-name-0-4 rel-0-4 tc
    cvs rtag -d old-name-0-4 tc
    

    |[[#Modifying-tags| < ]]| |[[#Sticky-tags| > ]]|   |[[#Revisions| << ]]| |[[#Revisions| Up ]]| |[[#Branching-and-merging| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Tagging and adding and removing files ===

    The subject of exactly how tagging interacts with adding and removing files is somewhat obscure; for the most part CVS will keep track of whether files exist or not without too much fussing. By default, tags are applied to only files which have a revision corresponding to what is being tagged. Files which did not exist yet, or which were already removed, simply omit the tag, and CVS knows to treat the absence of a tag as meaning that the file didn’t exist as of that tag.

    However, this can lose a small amount of information. For example, suppose a file was added and then removed. Then, if the tag is missing for that file, there is no way to know whether the tag refers to the time before the file was added, or the time after it was removed. If you specify the ‘-r’ option to cvs rtag, then CVS tags the files which have been removed, and thereby avoids this problem. For example, one might specify -r HEAD to tag the head.

    On the subject of adding and removing files, the cvs rtag command has a ‘-a’ option which means to clear the tag from removed files that would not otherwise be tagged. For example, one might specify this option in conjunction with ‘-F’ when moving a tag. If one moved a tag without ‘-a’, then the tag in the removed files might still refer to the old revision, rather than reflecting the fact that the file had been removed. I don’t think this is necessary if ‘-r’ is specified, as noted above.


    |[[#Tagging-add_002fremove| < ]]| |[[#Branching-and-merging| > ]]|   |[[#Revisions| << ]]| |[[#Revisions| Up ]]| |[[#Branching-and-merging| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Sticky tags ===

    Sometimes a working copy’s revision has extra data associated with it, for example it might be on a branch (see section [[#Branching-and-merging|Branching and merging]]), or restricted to versions prior to a certain date by ‘checkout -D’ or ‘update -D’. Because this data persists – that is, it applies to subsequent commands in the working copy – we refer to it as sticky.

    Most of the time, stickiness is an obscure aspect of CVS that you don’t need to think about. However, even if you don’t want to use the feature, you may need to know something about sticky tags (for example, how to avoid them!).

    You can use the status command to see if any sticky tags or dates are set:

     
    $ cvs status driver.c
    ===================================================================
    File: driver.c          Status: Up-to-date
    
        Version:            1.7.2.1 Sat Dec  5 19:35:03 1992
        RCS Version:        1.7.2.1 /u/cvsroot/yoyodyne/tc/driver.c,v
        Sticky Tag:         rel-1-0-patches (branch: 1.7.2)
        Sticky Date:        (none)
        Sticky Options:     (none)
    
    

    The sticky tags will remain on your working files until you delete them with ‘cvs update -A’. The ‘-A’ option merges local changes into the version of the file from the head of the trunk, removing any sticky tags, dates, or options. See [[#update|update—Bring work tree in sync with repository]] for more on the operation of cvs update.

    The most common use of sticky tags is to identify which branch one is working on, as described in [[#Accessing-branches|Accessing branches]]. However, non-branch sticky tags have uses as well. For example, suppose that you want to avoid updating your working directory, to isolate yourself from possibly destabilizing changes other people are making. You can, of course, just refrain from running cvs update. But if you want to avoid updating only a portion of a larger tree, then sticky tags can help. If you check out a certain revision (such as 1.4) it will become sticky. Subsequent cvs update commands will not retrieve the latest revision until you reset the tag with cvs update -A. Likewise, use of the ‘-D’ option to update or checkout sets a sticky date, which, similarly, causes that date to be used for future retrievals.

    People often want to retrieve an old version of a file without setting a sticky tag. This can be done with the ‘-p’ option to checkout or update, which sends the contents of the file to standard output. For example:

     
    $ cvs update -p -r 1.1 file1 >file1
    ===================================================================
    Checking out file1
    RCS:  /tmp/cvs-sanity/cvsroot/first-dir/Attic/file1,v
    VERS: 1.1
    ***************
    $
    

    However, this isn’t the easiest way, if you are asking how to undo a previous checkin (in this example, put ‘file1’ back to the way it was as of revision 1.1). In that case you are better off using the ‘-j’ option to update; for further discussion see [[#Merging-two-revisions|Merging differences between any two revisions]].


    |[[#Sticky-tags| < ]]| |[[#Branches-motivation| > ]]|   |[[#Revisions| << ]]| |[[#Top| Up ]]| |[[#Recursive-behavior| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    == Branching and merging ==

    CVS allows you to isolate changes onto a separate line of development, known as a branch. When you change files on a branch, those changes do not appear on the main trunk or other branches.

    Later you can move changes from one branch to another branch (or the main trunk) by merging. Merging involves first running cvs update -j, to merge the changes into the working directory. You can then commit that revision, and thus effectively copy the changes onto another branch.


    |[[#Branching-and-merging| < ]]| |[[#Creating-a-branch| > ]]|   |[[#Branching-and-merging| << ]]| |[[#Branching-and-merging| Up ]]| |[[#Recursive-behavior| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === What branches are good for ===

    Suppose that release 1.0 of tc has been made. You are continuing to develop tc, planning to create release 1.1 in a couple of months. After a while your customers start to complain about a fatal bug. You check out release 1.0 (see section [[#Tags|Tags–Symbolic revisions]]) and find the bug (which turns out to have a trivial fix). However, the current revision of the sources are in a state of flux and are not expected to be stable for at least another month. There is no way to make a bugfix release based on the newest sources.

    The thing to do in a situation like this is to create a branch on the revision trees for all the files that make up release 1.0 of tc. You can then make modifications to the branch without disturbing the main trunk. When the modifications are finished you can elect to either incorporate them on the main trunk, or leave them on the branch.


    |[[#Branches-motivation| < ]]| |[[#Accessing-branches| > ]]|   |[[#Branching-and-merging| << ]]| |[[#Branching-and-merging| Up ]]| |[[#Recursive-behavior| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Creating a branch ===

    You can create a branch with tag -b; for example, assuming you’re in a working copy:

     
    $ cvs tag -b rel-1-0-patches
    

    This splits off a branch based on the current revisions in the working copy, assigning that branch the name ‘rel-1-0-patches’.

    It is important to understand that branches get created in the repository, not in the working copy. Creating a branch based on current revisions, as the above example does, will not automatically switch the working copy to be on the new branch. For information on how to do that, see [[#Accessing-branches|Accessing branches]].

    You can also create a branch without reference to any working copy, by using rtag:

     
    $ cvs rtag -b -r rel-1-0 rel-1-0-patches tc
    

    -r rel-1-0’ says that this branch should be rooted at the revision that corresponds to the tag ‘rel-1-0’. It need not be the most recent revision – it’s often useful to split a branch off an old revision (for example, when fixing a bug in a past release otherwise known to be stable).

    As with ‘tag’, the ‘-b’ flag tells rtag to create a branch (rather than just a symbolic revision name). Note that the numeric revision number that matches ‘rel-1-0’ will probably be different from file to file.

    So, the full effect of the command is to create a new branch – named ‘rel-1-0-patches’ – in module ‘tc’, rooted in the revision tree at the point tagged by ‘rel-1-0’.


    |[[#Creating-a-branch| < ]]| |[[#Branches-and-revisions| > ]]|   |[[#Branching-and-merging| << ]]| |[[#Branching-and-merging| Up ]]| |[[#Recursive-behavior| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Accessing branches ===

    You can retrieve a branch in one of two ways: by checking it out fresh from the repository, or by switching an existing working copy over to the branch.

    To check out a branch from the repository, invoke ‘checkout’ with the ‘-r’ flag, followed by the tag name of the branch (see section [[#Creating-a-branch|Creating a branch]]):

     
    $ cvs checkout -r rel-1-0-patches tc
    

    Or, if you already have a working copy, you can switch it to a given branch with ‘update -r’:

     
    $ cvs update -r rel-1-0-patches tc
    

    or equivalently:

     
    $ cd tc
    $ cvs update -r rel-1-0-patches
    

    It does not matter if the working copy was originally on the main trunk or on some other branch – the above command will switch it to the named branch. And similarly to a regular ‘update’ command, ‘update -r’ merges any changes you have made, notifying you of conflicts where they occur.

    Once you have a working copy tied to a particular branch, it remains there until you tell it otherwise. This means that changes checked in from the working copy will add new revisions on that branch, while leaving the main trunk and other branches unaffected.

    To find out what branch a working copy is on, you can use the ‘status’ command. In its output, look for the field named ‘Sticky tag’ (see section [[#Sticky-tags|Sticky tags]]) – that’s CVS’s way of telling you the branch, if any, of the current working files:

     
    $ cvs status -v driver.c backend.c
    ===================================================================
    File: driver.c          Status: Up-to-date
    
        Version:            1.7     Sat Dec  5 18:25:54 1992
        RCS Version:        1.7     /u/cvsroot/yoyodyne/tc/driver.c,v
        Sticky Tag:         rel-1-0-patches (branch: 1.7.2)
        Sticky Date:        (none)
        Sticky Options:     (none)
    
        Existing Tags:
            rel-1-0-patches             (branch: 1.7.2)
            rel-1-0                     (revision: 1.7)
    
    ===================================================================
    File: backend.c         Status: Up-to-date
    
        Version:            1.4     Tue Dec  1 14:39:01 1992
        RCS Version:        1.4     /u/cvsroot/yoyodyne/tc/backend.c,v
        Sticky Tag:         rel-1-0-patches (branch: 1.4.2)
        Sticky Date:        (none)
        Sticky Options:     (none)
    
        Existing Tags:
            rel-1-0-patches             (branch: 1.4.2)
            rel-1-0                     (revision: 1.4)
            rel-0-4                     (revision: 1.4)
    
    

    Don’t be confused by the fact that the branch numbers for each file are different (‘1.7.2’ and ‘1.4.2’ respectively). The branch tag is the same, ‘rel-1-0-patches’, and the files are indeed on the same branch. The numbers simply reflect the point in each file’s revision history at which the branch was made. In the above example, one can deduce that ‘driver.c’ had been through more changes than ‘backend.c’ before this branch was created.

    See [[#Branches-and-revisions|Branches and revisions]] for details about how branch numbers are constructed.


    |[[#Accessing-branches| < ]]| |[[#Magic-branch-numbers| > ]]|   |[[#Branching-and-merging| << ]]| |[[#Branching-and-merging| Up ]]| |[[#Recursive-behavior| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Branches and revisions ===

    Ordinarily, a file’s revision history is a linear series of increments (see section [[#Revision-numbers|Revision numbers]]):

     
           +-----+    +-----+    +-----+    +-----+    +-----+
           ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 !
           +-----+    +-----+    +-----+    +-----+    +-----+
    

    However, CVS is not limited to linear development. The revision tree can be split into branches, where each branch is a self-maintained line of development. Changes made on one branch can easily be moved back to the main trunk.

    Each branch has a branch number, consisting of an odd number of period-separated decimal integers. The branch number is created by appending an integer to the revision number where the corresponding branch forked off. Having branch numbers allows more than one branch to be forked off from a certain revision.

    All revisions on a branch have revision numbers formed by appending an ordinal number to the branch number. The following figure illustrates branching with an example.

     
                                                          +-------------+
                               Branch 1.2.2.3.2 ->        ! 1.2.2.3.2.1 !
                                                        / +-------------+
                                                       /
                                                      /
                     +---------+    +---------+    +---------+
    Branch 1.2.2 -> _! 1.2.2.1 !----! 1.2.2.2 !----! 1.2.2.3 !
                   / +---------+    +---------+    +---------+
                  /
                 /
    +-----+    +-----+    +-----+    +-----+    +-----+
    ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 !  <- The main trunk
    +-----+    +-----+    +-----+    +-----+    +-----+
                    !
                    !
                    !   +---------+    +---------+    +---------+
    Branch 1.2.4 -> +---! 1.2.4.1 !----! 1.2.4.2 !----! 1.2.4.3 !
                        +---------+    +---------+    +---------+
    
    

    The exact details of how the branch number is constructed is not something you normally need to be concerned about, but here is how it works: When CVS creates a branch number it picks the first unused even integer, starting with 2. So when you want to create a branch from revision 6.4 it will be numbered 6.4.2. All branch numbers ending in a zero (such as 6.4.0) are used internally by CVS (see section [[#Magic-branch-numbers|Magic branch numbers]]). The branch 1.1.1 has a special meaning. See section [[#Tracking-sources|Tracking third-party sources]].


    |[[#Branches-and-revisions| < ]]| |[[#Merging-a-branch| > ]]|   |[[#Branching-and-merging| << ]]| |[[#Branching-and-merging| Up ]]| |[[#Recursive-behavior| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Magic branch numbers ===

    This section describes a CVS feature called magic branches. For most purposes, you need not worry about magic branches; CVS handles them for you. However, they are visible to you in certain circumstances, so it may be useful to have some idea of how it works.

    Externally, branch numbers consist of an odd number of dot-separated decimal integers. See section [[#Revision-numbers|Revision numbers]]. That is not the whole truth, however. For efficiency reasons CVS sometimes inserts an extra 0 in the second rightmost position (1.2.4 becomes 1.2.0.4, 8.9.10.11.12 becomes 8.9.10.11.0.12 and so on).

    CVS does a pretty good job at hiding these so called magic branches, but in a few places the hiding is incomplete:

    • The magic branch number appears in the output from cvs log.
    • You cannot specify a symbolic branch name to cvs admin.

    You can use the admin command to reassign a symbolic name to a branch the way RCS expects it to be. If R4patches is assigned to the branch 1.4.2 (magic branch number 1.4.0.2) in file ‘numbers.c’ you can do this:

     
    $ cvs admin -NR4patches:1.4.2 numbers.c
    

    It only works if at least one revision is already committed on the branch. Be very careful so that you do not assign the tag to the wrong number. (There is no way to see how the tag was assigned yesterday).


    |[[#Magic-branch-numbers| < ]]| |[[#Merging-more-than-once| > ]]|   |[[#Branching-and-merging| << ]]| |[[#Branching-and-merging| Up ]]| |[[#Recursive-behavior| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Merging an entire branch ===

    You can merge changes made on a branch into your working copy by giving the ‘-j branchname’ flag to the update subcommand. With one ‘-j branchname’ option it merges the changes made between the greatest common ancestor (GCA) of the branch and the destination revision (in the simple case below the GCA is the point where the branch forked) and the newest revision on that branch into your working copy.

    The ‘-j’ stands for “join”.

    Consider this revision tree:

     
    +-----+    +-----+    +-----+    +-----+
    ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !      <- The main trunk
    +-----+    +-----+    +-----+    +-----+
                    !
                    !
                    !   +---------+    +---------+
    Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 !
                        +---------+    +---------+
    

    The branch 1.2.2 has been given the tag (symbolic name) ‘R1fix’. The following example assumes that the module ‘mod’ contains only one file, ‘m.c’.

     
    $ cvs checkout mod               # Retrieve the latest revision, 1.4
    
    $ cvs update -j R1fix m.c        # Merge all changes made on the branch,
                                     # i.e. the changes between revision 1.2
                                     # and 1.2.2.2, into your working copy
                                     # of the file.
    
    $ cvs commit -m "Included R1fix" # Create revision 1.5.
    

    A conflict can result from a merge operation. If that happens, you should resolve it before committing the new revision. See section [[#Conflicts-example|Conflicts example]].

    If your source files contain keywords (see section [[#Keyword-substitution|Keyword substitution]]), you might be getting more conflicts than strictly necessary. See [[#Merging-and-keywords|Merging and keywords]], for information on how to avoid this.

    The checkout command also supports the ‘-j branchname’ flag. The same effect as above could be achieved with this:

     
    $ cvs checkout -j R1fix mod
    $ cvs commit -m "Included R1fix"
    

    It should be noted that update -j tagname will also work but may not produce the desired result. See section [[#Merging-adds-and-removals|Merging can add or remove files]], for more.


    |[[#Merging-a-branch| < ]]| |[[#Merging-two-revisions| > ]]|   |[[#Branching-and-merging| << ]]| |[[#Branching-and-merging| Up ]]| |[[#Recursive-behavior| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Merging from a branch several times ===

    Continuing our example, the revision tree now looks like this:

     
    +-----+    +-----+    +-----+    +-----+    +-----+
    ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 !   <- The main trunk
    +-----+    +-----+    +-----+    +-----+    +-----+
                    !                           *
                    !                          *
                    !   +---------+    +---------+
    Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 !
                        +---------+    +---------+
    

    where the starred line represents the merge from the ‘R1fix’ branch to the main trunk, as just discussed.

    Now suppose that development continues on the ‘R1fix’ branch:

     
    +-----+    +-----+    +-----+    +-----+    +-----+
    ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 !   <- The main trunk
    +-----+    +-----+    +-----+    +-----+    +-----+
                    !                           *
                    !                          *
                    !   +---------+    +---------+    +---------+
    Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 !----! 1.2.2.3 !
                        +---------+    +---------+    +---------+
    

    and then you want to merge those new changes onto the main trunk. If you just use the cvs update -j R1fix m.c command again, CVS will attempt to merge again the changes which you have already merged, which can have undesirable side effects.

    So instead you need to specify that you only want to merge the changes on the branch which have not yet been merged into the trunk. To do that you specify two ‘-j’ options, and CVS merges the changes from the first revision to the second revision. For example, in this case the simplest way would be

     
    cvs update -j 1.2.2.2 -j R1fix m.c    # Merge changes from 1.2.2.2 to the
                                          # head of the R1fix branch
    

    The problem with this is that you need to specify the 1.2.2.2 revision manually. A slightly better approach might be to use the date the last merge was done:

     
    cvs update -j R1fix:yesterday -j R1fix m.c
    

    Better yet, tag the R1fix branch after every merge into the trunk, and then use that tag for subsequent merges:

     
    cvs update -j merged_from_R1fix_to_trunk -j R1fix m.c
    

    |[[#Merging-more-than-once| < ]]| |[[#Merging-adds-and-removals| > ]]|   |[[#Branching-and-merging| << ]]| |[[#Branching-and-merging| Up ]]| |[[#Recursive-behavior| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Merging differences between any two revisions ===

    With two ‘-j revision’ flags, the update (and checkout) command can merge the differences between any two revisions into your working file.

     
    $ cvs update -j 1.5 -j 1.3 backend.c
    

    will undo all changes made between revision 1.3 and 1.5. Note the order of the revisions!

    If you try to use this option when operating on multiple files, remember that the numeric revisions will probably be very different between the various files. You almost always use symbolic tags rather than revision numbers when operating on multiple files.

    Specifying two ‘-j’ options can also undo file removals or additions. For example, suppose you have a file named ‘file1’ which existed as revision 1.1, and you then removed it (thus adding a dead revision 1.2). Now suppose you want to add it again, with the same contents it had previously. Here is how to do it:

     
    $ cvs update -j 1.2 -j 1.1 file1
    U file1
    $ cvs commit -m test
    Checking in file1;
    /tmp/cvs-sanity/cvsroot/first-dir/file1,v  <--  file1
    new revision: 1.3; previous revision: 1.2
    done
    $
    

    |[[#Merging-two-revisions| < ]]| |[[#Merging-and-keywords| > ]]|   |[[#Branching-and-merging| << ]]| |[[#Branching-and-merging| Up ]]| |[[#Recursive-behavior| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Merging can add or remove files ===

    If the changes which you are merging involve removing or adding some files, update -j will reflect such additions or removals.

    For example:

     
    cvs update -A
    touch a b c
    cvs add a b c ; cvs ci -m "added" a b c
    cvs tag -b branchtag
    cvs update -r branchtag
    touch d ; cvs add d
    rm a ; cvs rm a
    cvs ci -m "added d, removed a"
    cvs update -A
    cvs update -jbranchtag
    

    After these commands are executed and a ‘cvs commit’ is done, file ‘a’ will be removed and file ‘d’ added in the main branch.

    Note that using a single static tag (‘-j tagname’) rather than a dynamic tag (‘-j branchname’) to merge changes from a branch will usually not remove files which were removed on the branch since CVS does not automatically add static tags to dead revisions. The exception to this rule occurs when a static tag has been attached to a dead revision manually. Use the branch tag to merge all changes from the branch or use two static tags as merge endpoints to be sure that all intended changes are propagated in the merge.


    |[[#Merging-adds-and-removals| < ]]| |[[#Recursive-behavior| > ]]|   |[[#Branching-and-merging| << ]]| |[[#Branching-and-merging| Up ]]| |[[#Recursive-behavior| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Merging and keywords ===

    If you merge files containing keywords (see section [[#Keyword-substitution|Keyword substitution]]), you will normally get numerous conflicts during the merge, because the keywords are expanded differently in the revisions which you are merging.

    Therefore, you will often want to specify the ‘-kk’ (see section [[#Substitution-modes|Substitution modes]]) switch to the merge command line. By substituting just the name of the keyword, not the expanded value of that keyword, this option ensures that the revisions which you are merging will be the same as each other, and avoid spurious conflicts.

    For example, suppose you have a file like this:

     
           +---------+
          _! 1.1.2.1 !   <-  br1
         / +---------+
        /
       /
    +-----+    +-----+
    ! 1.1 !----! 1.2 !
    +-----+    +-----+
    

    and your working directory is currently on the trunk (revision 1.2). Then you might get the following results from a merge:

     
    $ cat file1
    key $Revision: 1.2 $
    . . .
    $ cvs update -j br1
    U file1
    RCS file: /cvsroot/first-dir/file1,v
    retrieving revision 1.1
    retrieving revision 1.1.2.1
    Merging differences between 1.1 and 1.1.2.1 into file1
    rcsmerge: warning: conflicts during merge
    $ cat file1
    <<<<<<< file1
    key $Revision: 1.2 $
    =======
    key $Revision: 1.1.2.1 $
    >>>>>>> 1.1.2.1
    . . .
    

    What happened was that the merge tried to merge the differences between 1.1 and 1.1.2.1 into your working directory. So, since the keyword changed from Revision: 1.1 to Revision: 1.1.2.1, CVS tried to merge that change into your working directory, which conflicted with the fact that your working directory had contained Revision: 1.2.

    Here is what happens if you had used ‘-kk’:

     
    $ cat file1
    key $Revision: 1.2 $
    . . .
    $ cvs update -kk -j br1
    U file1
    RCS file: /cvsroot/first-dir/file1,v
    retrieving revision 1.1
    retrieving revision 1.1.2.1
    Merging differences between 1.1 and 1.1.2.1 into file1
    $ cat file1
    key $Revision$
    . . .
    

    What is going on here is that revision 1.1 and 1.1.2.1 both expand as plain Revision, and therefore merging the changes between them into the working directory need not change anything. Therefore, there is no conflict.

    WARNING: In versions of CVS prior to 1.12.2, there was a major problem with using ‘-kk’ on merges. Namely, ‘-kk’ overrode any default keyword expansion mode set in the archive file in the repository. This could, unfortunately for some users, cause data corruption in binary files (with a default keyword expansion mode set to ‘-kb’). Therefore, when a repository contained binary files, conflicts had to be dealt with manually rather than using ‘-kk’ in a merge command.

    In CVS version 1.12.2 and later, the keyword expansion mode provided on the command line to any CVS command no longer overrides the ‘-kb’ keyword expansion mode setting for binary files, though it will still override other default keyword expansion modes. You can now safely merge using ‘-kk’ to avoid spurious conflicts on lines containing RCS keywords, even when your repository contains binary files.


    |[[#Merging-and-keywords| < ]]| |[[#Adding-and-removing| > ]]|   |[[#Branching-and-merging| << ]]| |[[#Top| Up ]]| |[[#Adding-and-removing| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    == Recursive behavior ==

    Almost all of the subcommands of CVS work recursively when you specify a directory as an argument. For instance, consider this directory structure:

     
          $HOME
            |
            +--tc
            |   |
                +--CVS
                |      (internal CVS files)
                +--Makefile
                +--backend.c
                +--driver.c
                +--frontend.c
                +--parser.c
                +--man
                |    |
                |    +--CVS
                |    |  (internal CVS files)
                |    +--tc.1
                |
                +--testing
                     |
                     +--CVS
                     |  (internal CVS files)
                     +--testpgm.t
                     +--test2.t
    

    If ‘tc’ is the current working directory, the following is true:

    • cvs update testing’ is equivalent to
       
      cvs update testing/testpgm.t testing/test2.t
      
    • cvs update testing man’ updates all files in the subdirectories
    • cvs update .’ or just ‘cvs update’ updates all files in the tc directory

    If no arguments are given to update it will update all files in the current working directory and all its subdirectories. In other words, ‘.’ is a default argument to update. This is also true for most of the CVS subcommands, not only the update command.

    The recursive behavior of the CVS subcommands can be turned off with the ‘-l’ option. Conversely, the ‘-R’ option can be used to force recursion if ‘-l’ is specified in ‘~/.cvsrc’ (see section [[#g_t_007e_002f_002ecvsrc|Default options and the ~/.cvsrc file]]).

     
    $ cvs update -l         # Don't update files in subdirectories
    

    |[[#Recursive-behavior| < ]]| |[[#Adding-files| > ]]|   |[[#Recursive-behavior| << ]]| |[[#Top| Up ]]| |[[#History-browsing| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    == Adding, removing, and renaming files and directories ==

    In the course of a project, one will often add new files. Likewise with removing or renaming, or with directories. The general concept to keep in mind in all these cases is that instead of making an irreversible change you want CVS to record the fact that a change has taken place, just as with modifying an existing file. The exact mechanisms to do this in CVS vary depending on the situation.


    |[[#Adding-and-removing| < ]]| |[[#Removing-files| > ]]|   |[[#Adding-and-removing| << ]]| |[[#Adding-and-removing| Up ]]| |[[#History-browsing| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Adding files to a directory ===

    To add a new file to a directory, follow these steps.

    • You must have a working copy of the directory. See section [[#Getting-the-source|Getting the source]].
    • Create the new file inside your working copy of the directory.
    • Use ‘cvs add filename’ to tell CVS that you want to version control the file. If the file contains binary data, specify ‘-kb’ (see section [[#Binary-files|Handling binary files]]).
    • Use ‘cvs commit filename’ to actually check in the file into the repository. Other developers cannot see the file until you perform this step.

    You can also use the add command to add a new directory.

    Unlike most other commands, the add command is not recursive. You cannot even type ‘cvs add foo/bar’! Instead, you have to

     
    $ cd foo
    $ cvs add bar
    
    Command: cvs add [-k kflag] [-m message] files …

    Schedule files to be added to the repository. The files or directories specified with add must already exist in the current directory. To add a whole new directory hierarchy to the source repository (for example, files received from a third-party vendor), use the import command instead. See section [[#import|import—Import sources into CVS, using vendor branches]].

    The added files are not placed in the source repository until you use commit to make the change permanent. Doing an add on a file that was removed with the remove command will undo the effect of the remove, unless a commit command intervened. See section [[#Removing-files|Removing files]], for an example.

    The ‘-k’ option specifies the default way that this file will be checked out; for more information see [[#Substitution-modes|Substitution modes]].

    The ‘-m’ option specifies a description for the file. This description appears in the history log (if it is enabled, see section [[#history-file|The history file]]). It will also be saved in the version history inside the repository when the file is committed. The log command displays this description. The description can be changed using ‘admin -t’. See section [[#admin|admin—Administration]]. If you omit the ‘-m description’ flag, an empty string will be used. You will not be prompted for a description.

    For example, the following commands add the file ‘backend.c’ to the repository:

     
    $ cvs add backend.c
    $ cvs commit -m "Early version. Not yet compilable." backend.c
    

    When you add a file it is added only on the branch which you are working on (see section [[#Branching-and-merging|Branching and merging]]). You can later merge the additions to another branch if you want (see section [[#Merging-adds-and-removals|Merging can add or remove files]]).


    |[[#Adding-files| < ]]| |[[#Removing-directories| > ]]|   |[[#Adding-and-removing| << ]]| |[[#Adding-and-removing| Up ]]| |[[#History-browsing| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Removing files ===

    Directories change. New files are added, and old files disappear. Still, you want to be able to retrieve an exact copy of old releases.

    Here is what you can do to remove a file, but remain able to retrieve old revisions:

    • Make sure that you have not made any uncommitted modifications to the file. See section [[#Viewing-differences|Viewing differences]], for one way to do that. You can also use the status or update command. If you remove the file without committing your changes, you will of course not be able to retrieve the file as it was immediately before you deleted it.
    • Remove the file from your working copy of the directory. You can for instance use rm.
    • Use ‘cvs remove filename’ to tell CVS that you really want to delete the file.
    • Use ‘cvs commit filename’ to actually perform the removal of the file from the repository.

    When you commit the removal of the file, CVS records the fact that the file no longer exists. It is possible for a file to exist on only some branches and not on others, or to re-add another file with the same name later. CVS will correctly create or not create the file, based on the ‘-r’ and ‘-D’ options specified to checkout or update.

    Command: cvs remove [options] files …

    Schedule file(s) to be removed from the repository (files which have not already been removed from the working directory are not processed). This command does not actually remove the file from the repository until you commit the removal. For a full list of options, see [[#Invoking-CVS|Quick reference to CVS commands]].

    Here is an example of removing several files:

     
    $ cd test
    $ rm *.c
    $ cvs remove
    cvs remove: Removing .
    cvs remove: scheduling a.c for removal
    cvs remove: scheduling b.c for removal
    cvs remove: use 'cvs commit' to remove these files permanently
    $ cvs ci -m "Removed unneeded files"
    cvs commit: Examining .
    cvs commit: Committing .
    

    As a convenience you can remove the file and cvs remove it in one step, by specifying the ‘-f’ option. For example, the above example could also be done like this:

     
    $ cd test
    $ cvs remove -f *.c
    cvs remove: scheduling a.c for removal
    cvs remove: scheduling b.c for removal
    cvs remove: use 'cvs commit' to remove these files permanently
    $ cvs ci -m "Removed unneeded files"
    cvs commit: Examining .
    cvs commit: Committing .
    

    If you execute remove for a file, and then change your mind before you commit, you can undo the remove with an add command.

     
    $ ls
    CVS   ja.h  oj.c
    $ rm oj.c
    $ cvs remove oj.c
    cvs remove: scheduling oj.c for removal
    cvs remove: use 'cvs commit' to remove this file permanently
    $ cvs add oj.c
    U oj.c
    cvs add: oj.c, version 1.1.1.1, resurrected
    

    If you realize your mistake before you run the remove command you can use update to resurrect the file:

     
    $ rm oj.c
    $ cvs update oj.c
    cvs update: warning: oj.c was lost
    U oj.c
    

    When you remove a file it is removed only on the branch which you are working on (see section [[#Branching-and-merging|Branching and merging]]). You can later merge the removals to another branch if you want (see section [[#Merging-adds-and-removals|Merging can add or remove files]]).


    |[[#Removing-files| < ]]| |[[#Moving-files| > ]]|   |[[#Adding-and-removing| << ]]| |[[#Adding-and-removing| Up ]]| |[[#History-browsing| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Removing directories ===

    In concept removing directories is somewhat similar to removing files—you want the directory to not exist in your current working directories, but you also want to be able to retrieve old releases in which the directory existed.

    The way that you remove a directory is to remove all the files in it. You don’t remove the directory itself; there is no way to do that. Instead you specify the ‘-P’ option to cvs update or cvs checkout, which will cause CVS to remove empty directories from working directories. (Note that cvs export always removes empty directories.) Probably the best way to do this is to always specify ‘-P’; if you want an empty directory then put a dummy file (for example ‘.keepme’) in it to prevent ‘-P’ from removing it.

    Note that ‘-P’ is implied by the ‘-r’ or ‘-D’ options of checkout. This way CVS will be able to correctly create the directory or not depending on whether the particular version you are checking out contains any files in that directory.


    |[[#Removing-directories| < ]]| |[[#Outside| > ]]|   |[[#Adding-and-removing| << ]]| |[[#Adding-and-removing| Up ]]| |[[#History-browsing| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Moving and renaming files ===

    Moving files to a different directory or renaming them is not difficult, but some of the ways in which this works may be non-obvious. (Moving or renaming a directory is even harder. See section [[#Moving-directories|Moving and renaming directories]].).

    The examples below assume that the file old is renamed to new.


    |[[#Moving-files| < ]]| |[[#Inside| > ]]|   |[[#Adding-and-removing| << ]]| |[[#Moving-files| Up ]]| |[[#History-browsing| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== The Normal way to Rename ====

    The normal way to move a file is to copy old to new, and then issue the normal CVS commands to remove old from the repository, and add new to it.

     
    $ mv old new
    $ cvs remove old
    $ cvs add new
    $ cvs commit -m "Renamed old to new" old new
    

    This is the simplest way to move a file, it is not error-prone, and it preserves the history of what was done. Note that to access the history of the file you must specify the old or the new name, depending on what portion of the history you are accessing. For example, cvs log old will give the log up until the time of the rename.

    When new is committed its revision numbers will start again, usually at 1.1, so if that bothers you, use the ‘-r rev’ option to commit. For more information see [[#Assigning-revisions|Assigning revisions]].


    |[[#Outside| < ]]| |[[#Rename-by-copying| > ]]|   |[[#Adding-and-removing| << ]]| |[[#Moving-files| Up ]]| |[[#History-browsing| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== Moving the history file ====

    This method is more dangerous, since it involves moving files inside the repository. Read this entire section before trying it out!

     
    $ cd $CVSROOT/dir
    $ mv old,v new,v
    

    Advantages:

    • The log of changes is maintained intact.
    • The revision numbers are not affected.

    Disadvantages:

    • Old releases cannot easily be fetched from the repository. (The file will show up as new even in revisions from the time before it was renamed).
    • There is no log information of when the file was renamed.
    • Nasty things might happen if someone accesses the history file while you are moving it. Make sure no one else runs any of the CVS commands while you move it.

    |[[#Inside| < ]]| |[[#Moving-directories| > ]]|   |[[#Adding-and-removing| << ]]| |[[#Moving-files| Up ]]| |[[#History-browsing| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== Copying the history file ====

    This way also involves direct modifications to the repository. It is safe, but not without drawbacks.

     
    # Copy the RCS file inside the repository
    $ cd $CVSROOT/dir
    $ cp old,v new,v
    # Remove the old file
    $ cd ~/dir
    $ rm old
    $ cvs remove old
    $ cvs commit old
    # Remove all tags from new
    $ cvs update new
    $ cvs log new             # Remember the non-branch tag names
    $ cvs tag -d tag1 new
    $ cvs tag -d tag2 new

    By removing the tags you will be able to check out old revisions.

    Advantages:

    • Checking out old revisions works correctly, as long as you use ‘-rtag’ and not ‘-Ddate’ to retrieve the revisions.
    • The log of changes is maintained intact.
    • The revision numbers are not affected.

    Disadvantages:

    • You cannot easily see the history of the file across the rename.

    |[[#Rename-by-copying| < ]]| |[[#History-browsing| > ]]|   |[[#Adding-and-removing| << ]]| |[[#Adding-and-removing| Up ]]| |[[#History-browsing| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Moving and renaming directories ===

    The normal way to rename or move a directory is to rename or move each file within it as described in [[#Outside|The Normal way to Rename]]. Then check out with the ‘-P’ option, as described in [[#Removing-directories|Removing directories]].

    If you really want to hack the repository to rename or delete a directory in the repository, you can do it like this:

    1. Inform everyone who has a checked out copy of the directory that the directory will be renamed. They should commit all their changes, and remove their working copies, before you take the steps below.
    2. Rename the directory inside the repository.
       
      $ cd $CVSROOT/parent-dir
      $ mv old-dir new-dir
      
    3. Fix the CVS administrative files, if necessary (for instance if you renamed an entire module).
    4. Tell everyone that they can check out again and continue working.

    If someone had a working copy the CVS commands will cease to work for him, until he removes the directory that disappeared inside the repository.

    It is almost always better to move the files in the directory instead of moving the directory. If you move the directory you are unlikely to be able to retrieve old releases correctly, since they probably depend on the name of the directories.


    |[[#Moving-directories| < ]]| |[[#log-messages| > ]]|   |[[#Adding-and-removing| << ]]| |[[#Top| Up ]]| |[[#Binary-files| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    == History browsing ==

    Once you have used CVS to store a version control history—what files have changed when, how, and by whom, there are a variety of mechanisms for looking through the history.


    |[[#History-browsing| < ]]| |[[#history-database| > ]]|   |[[#History-browsing| << ]]| |[[#History-browsing| Up ]]| |[[#Binary-files| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Log messages ===

    Whenever you commit a file you specify a log message.

    To look through the log messages which have been specified for every revision which has been committed, use the cvs log command (see section [[#log|log—Print out log information for files]]).


    |[[#log-messages| < ]]| |[[#user_002ddefined-logging| > ]]|   |[[#History-browsing| << ]]| |[[#History-browsing| Up ]]| |[[#Binary-files| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === The history database ===

    You can use the history file (see section [[#history-file|The history file]]) to log various CVS actions. To retrieve the information from the history file, use the cvs history command (see section [[#history|history—Show status of files and users]]).

    Note: you can control what is logged to this file by using the ‘LogHistory’ keyword in the ‘CVSROOT/config’ file (see section [[#config|The CVSROOT/config configuration file]]).


    |[[#history-database| < ]]| |[[#annotate| > ]]|   |[[#History-browsing| << ]]| |[[#History-browsing| Up ]]| |[[#Binary-files| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === User-defined logging ===

    You can customize CVS to log various kinds of actions, in whatever manner you choose. These mechanisms operate by executing a script at various times. The script might append a message to a file listing the information and the programmer who created it, or send mail to a group of developers, or, perhaps, post a message to a particular newsgroup. To log commits, use the ‘loginfo’ file (see section [[#loginfo|Loginfo]]). To log commits, checkouts, exports, and tags, respectively, you can also use the ‘-i’, ‘-o’, ‘-e’, and ‘-t’ options in the modules file. For a more flexible way of giving notifications to various users, which requires less in the way of keeping centralized scripts up to date, use the cvs watch add command (see section [[#Getting-Notified|Telling CVS to notify you]]); this command is useful even if you are not using cvs watch on.

    The ‘taginfo’ file defines programs to execute when someone executes a tag or rtag command. The ‘taginfo’ file has the standard form for administrative files (see section [[#Administrative-files|Reference manual for Administrative files]]), where each line is a regular expression followed by a command to execute. The arguments passed to the command are, in order, the tagname, operation (add for tag, mov for tag -F, and del for tag -d), repository, and any remaining are pairs of filename revision. A non-zero exit of the filter program will cause the tag to be aborted.

    Here is an example of using taginfo to log tag and rtag commands. In the taginfo file put:

     
    ALL /usr/local/cvsroot/CVSROOT/loggit
    

    Where ‘/usr/local/cvsroot/CVSROOT/loggit’ contains the following script:

     
    #!/bin/sh
    echo "$@" >>/home/kingdon/cvsroot/CVSROOT/taglog
    

    |[[#user_002ddefined-logging| < ]]| |[[#Binary-files| > ]]|   |[[#History-browsing| << ]]| |[[#History-browsing| Up ]]| |[[#Binary-files| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Annotate command ===
    Command: cvs annotate [-FflR] [-r rev|-D date] files …

    For each file in files, print the head revision of the trunk, together with information on the last modification for each line. For example:

     
    $ cvs annotate ssfile
    Annotations for ssfile
    ***************
    1.1          (mary     27-Mar-96): ssfile line 1
    1.2          (joe      28-Mar-96): ssfile line 2
    

    The file ‘ssfile’ currently contains two lines. The ssfile line 1 line was checked in by mary on March 27. Then, on March 28, joe added a line ssfile line 2, without modifying the ssfile line 1 line. This report doesn’t tell you anything about lines which have been deleted or replaced; you need to use cvs diff for that (see section [[#diff|diff—Show differences between revisions]]).

    The options to cvs annotate are listed in [[#Invoking-CVS|Quick reference to CVS commands]], and can be used to select the files and revisions to annotate. The options are described in more detail there and in [[#Common-options|Common command options]].


    |[[#annotate| < ]]| |[[#Binary-why| > ]]|   |[[#History-browsing| << ]]| |[[#Top| Up ]]| |[[#Multiple-developers| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    == Handling binary files ==

    The most common use for CVS is to store text files. With text files, CVS can merge revisions, display the differences between revisions in a human-visible fashion, and other such operations. However, if you are willing to give up a few of these abilities, CVS can store binary files. For example, one might store a web site in CVS including both text files and binary images.


    |[[#Binary-files| < ]]| |[[#Binary-howto| > ]]|   |[[#Binary-files| << ]]| |[[#Binary-files| Up ]]| |[[#Multiple-developers| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === The issues with binary files ===

    While the need to manage binary files may seem obvious if the files that you customarily work with are binary, putting them into version control does present some additional issues.

    One basic function of version control is to show the differences between two revisions. For example, if someone else checked in a new version of a file, you may wish to look at what they changed and determine whether their changes are good. For text files, CVS provides this functionality via the cvs diff command. For binary files, it may be possible to extract the two revisions and then compare them with a tool external to CVS (for example, word processing software often has such a feature). If there is no such tool, one must track changes via other mechanisms, such as urging people to write good log messages, and hoping that the changes they actually made were the changes that they intended to make.

    Another ability of a version control system is the ability to merge two revisions. For CVS this happens in two contexts. The first is when users make changes in separate working directories (see section [[#Multiple-developers|Multiple developers]]). The second is when one merges explicitly with the ‘update -j’ command (see section [[#Branching-and-merging|Branching and merging]]).

    In the case of text files, CVS can merge changes made independently, and signal a conflict if the changes conflict. With binary files, the best that CVS can do is present the two different copies of the file, and leave it to the user to resolve the conflict. The user may choose one copy or the other, or may run an external merge tool which knows about that particular file format, if one exists. Note that having the user merge relies primarily on the user to not accidentally omit some changes, and thus is potentially error prone.

    If this process is thought to be undesirable, the best choice may be to avoid merging. To avoid the merges that result from separate working directories, see the discussion of reserved checkouts (file locking) in [[#Multiple-developers|Multiple developers]]. To avoid the merges resulting from branches, restrict use of branches.


    |[[#Binary-why| < ]]| |[[#Multiple-developers| > ]]|   |[[#Binary-files| << ]]| |[[#Binary-files| Up ]]| |[[#Multiple-developers| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === How to store binary files ===

    There are two issues with using CVS to store binary files. The first is that CVS by default converts line endings between the canonical form in which they are stored in the repository (linefeed only), and the form appropriate to the operating system in use on the client (for example, carriage return followed by line feed for Windows NT).

    The second is that a binary file might happen to contain data which looks like a keyword (see section [[#Keyword-substitution|Keyword substitution]]), so keyword expansion must be turned off.

    The ‘-kb’ option available with some CVS commands insures that neither line ending conversion nor keyword expansion will be done.

    Here is an example of how you can create a new file using the ‘-kb’ flag:

     
    $ echo '$Id$' > kotest
    $ cvs add -kb -m"A test file" kotest
    $ cvs ci -m"First checkin; contains a keyword" kotest
    

    If a file accidentally gets added without ‘-kb’, one can use the cvs admin command to recover. For example:

     
    $ echo '$Id$' > kotest
    $ cvs add -m"A test file" kotest
    $ cvs ci -m"First checkin; contains a keyword" kotest
    $ cvs admin -kb kotest
    $ cvs update -A kotest
    # For non-unix systems:
    # Copy in a good copy of the file from outside CVS
    $ cvs commit -m "make it binary" kotest
    

    When you check in the file ‘kotest’ the file is not preserved as a binary file, because you did not check it in as a binary file. The cvs admin -kb command sets the default keyword substitution method for this file, but it does not alter the working copy of the file that you have. If you need to cope with line endings (that is, you are using CVS on a non-unix system), then you need to check in a new copy of the file, as shown by the cvs commit command above. On unix, the cvs update -A command suffices. (Note that you can use cvs log to determine the default keyword substitution method for a file and cvs status to determine the keyword substitution method for a working copy.)

    However, in using cvs admin -k to change the keyword expansion, be aware that the keyword expansion mode is not version controlled. This means that, for example, that if you have a text file in old releases, and a binary file with the same name in new releases, CVS provides no way to check out the file in text or binary mode depending on what version you are checking out. There is no good workaround for this problem.

    You can also set a default for whether cvs add and cvs import treat a file as binary based on its name; for example you could say that files who names end in ‘.exe’ are binary. See section [[#Wrappers|The cvswrappers file]]. There is currently no way to have CVS detect whether a file is binary based on its contents. The main difficulty with designing such a feature is that it is not clear how to distinguish between binary and non-binary files, and the rules to apply would vary considerably with the operating system.


    |[[#Binary-howto| < ]]| |[[#File-status| > ]]|   |[[#Binary-files| << ]]| |[[#Top| Up ]]| |[[#Revision-management| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    == Multiple developers ==

    When more than one person works on a software project things often get complicated. Often, two people try to edit the same file simultaneously. One solution, known as file locking or reserved checkouts, is to allow only one person to edit each file at a time. This is the only solution with some version control systems, including RCS and SCCS. Currently the usual way to get reserved checkouts with CVS is the cvs admin -l command (see section [[#admin-options|admin options]]). This is not as nicely integrated into CVS as the watch features, described below, but it seems that most people with a need for reserved checkouts find it adequate. It also may be possible to use the watches features described below, together with suitable procedures (not enforced by software), to avoid having two people edit at the same time.

    The default model with CVS is known as unreserved checkouts. In this model, developers can edit their own working copy of a file simultaneously. The first person that commits his changes has no automatic way of knowing that another has started to edit it. Others will get an error message when they try to commit the file. They must then use CVS commands to bring their working copy up to date with the repository revision. This process is almost automatic.

    CVS also supports mechanisms which facilitate various kinds of communication, without actually enforcing rules like reserved checkouts do.

    The rest of this chapter describes how these various models work, and some of the issues involved in choosing between them.


    |[[#Multiple-developers| < ]]| |[[#Updating-a-file| > ]]|   |[[#Multiple-developers| << ]]| |[[#Multiple-developers| Up ]]| |[[#Revision-management| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === File status ===

    Based on what operations you have performed on a checked out file, and what operations others have performed to that file in the repository, one can classify a file in a number of states. The states, as reported by the status command, are:

    Up-to-date

    The file is identical with the latest revision in the repository for the branch in use.

    Locally Modified

    You have edited the file, and not yet committed your changes.

    Locally Added

    You have added the file with add, and not yet committed your changes.

    Locally Removed

    You have removed the file with remove, and not yet committed your changes.

    Needs Checkout

    Someone else has committed a newer revision to the repository. The name is slightly misleading; you will ordinarily use update rather than checkout to get that newer revision.

    Needs Patch

    Like Needs Checkout, but the CVS server will send a patch rather than the entire file. Sending a patch or sending an entire file accomplishes the same thing.

    Needs Merge

    Someone else has committed a newer revision to the repository, and you have also made modifications to the file.

    Unresolved Conflict

    A file with the same name as this new file has been added to the repository from a second workspace. This file will need to be moved out of the way to allow an update to complete.

    File had conflicts on merge

    This is like Locally Modified, except that a previous update command gave a conflict. If you have not already done so, you need to resolve the conflict as described in [[#Conflicts-example|Conflicts example]].

    Unknown

    CVS doesn’t know anything about this file. For example, you have created a new file and have not run add.

    To help clarify the file status, status also reports the Working revision which is the revision that the file in the working directory derives from, and the Repository revision which is the latest revision in the repository for the branch in use.

    The options to status are listed in [[#Invoking-CVS|Quick reference to CVS commands]]. For information on its Sticky tag and Sticky date output, see [[#Sticky-tags|Sticky tags]]. For information on its Sticky options output, see the ‘-k’ option in [[#update-options|update options]].

    You can think of the status and update commands as somewhat complementary. You use update to bring your files up to date, and you can use status to give you some idea of what an update would do (of course, the state of the repository might change before you actually run update). In fact, if you want a command to display file status in a more brief format than is displayed by the status command, you can invoke

     
    $ cvs -n -q update
    

    The ‘-n’ option means to not actually do the update, but merely to display statuses; the ‘-q’ option avoids printing the name of each directory. For more information on the update command, and these options, see [[#Invoking-CVS|Quick reference to CVS commands]].


    |[[#File-status| < ]]| |[[#Conflicts-example| > ]]|   |[[#Multiple-developers| << ]]| |[[#Multiple-developers| Up ]]| |[[#Revision-management| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Bringing a file up to date ===

    When you want to update or merge a file, use the update command. For files that are not up to date this is roughly equivalent to a checkout command: the newest revision of the file is extracted from the repository and put in your working directory.

    Your modifications to a file are never lost when you use update. If no newer revision exists, running update has no effect. If you have edited the file, and a newer revision is available, CVS will merge all changes into your working copy.

    For instance, imagine that you checked out revision 1.4 and started editing it. In the meantime someone else committed revision 1.5, and shortly after that revision 1.6. If you run update on the file now, CVS will incorporate all changes between revision 1.4 and 1.6 into your file.

    If any of the changes between 1.4 and 1.6 were made too close to any of the changes you have made, an overlap occurs. In such cases a warning is printed, and the resulting file includes both versions of the lines that overlap, delimited by special markers. See section [[#update|update—Bring work tree in sync with repository]], for a complete description of the update command.


    |[[#Updating-a-file| < ]]| |[[#Informing-others| > ]]|   |[[#Multiple-developers| << ]]| |[[#Multiple-developers| Up ]]| |[[#Revision-management| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Conflicts example ===

    Suppose revision 1.4 of ‘driver.c’ contains this:

     
    #include <stdio.h>
    
    void main()
    {
        parse();
        if (nerr == 0)
            gencode();
        else
            fprintf(stderr, "No code generated.\n");
        exit(nerr == 0 ? 0 : 1);
    }
    

    Revision 1.6 of ‘driver.c’ contains this:

     
    #include <stdio.h>
    
    int main(int argc,
             char **argv)
    {
        parse();
        if (argc != 1)
        {
            fprintf(stderr, "tc: No args expected.\n");
            exit(1);
        }
        if (nerr == 0)
            gencode();
        else
            fprintf(stderr, "No code generated.\n");
        exit(!!nerr);
    }
    

    Your working copy of ‘driver.c’, based on revision 1.4, contains this before you run ‘cvs update’:

     
    #include <stdlib.h>
    #include <stdio.h>
    
    void main()
    {
        init_scanner();
        parse();
        if (nerr == 0)
            gencode();
        else
            fprintf(stderr, "No code generated.\n");
        exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
    }
    

    You run ‘cvs update’:

     
    $ cvs update driver.c
    RCS file: /usr/local/cvsroot/yoyodyne/tc/driver.c,v
    retrieving revision 1.4
    retrieving revision 1.6
    Merging differences between 1.4 and 1.6 into driver.c
    rcsmerge warning: overlaps during merge
    cvs update: conflicts found in driver.c
    C driver.c
    

    CVS tells you that there were some conflicts. Your original working file is saved unmodified in ‘.#driver.c.1.4’. The new version of ‘driver.c’ contains this:

     
    #include <stdlib.h>
    #include <stdio.h>
    
    int main(int argc,
             char **argv)
    {
        init_scanner();
        parse();
        if (argc != 1)
        {
            fprintf(stderr, "tc: No args expected.\n");
            exit(1);
        }
        if (nerr == 0)
            gencode();
        else
            fprintf(stderr, "No code generated.\n");
    <<<<<<< driver.c
        exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
    =======
        exit(!!nerr);
    >>>>>>> 1.6
    }
    

    Note how all non-overlapping modifications are incorporated in your working copy, and that the overlapping section is clearly marked with ‘<<<<<<<’, ‘=======’ and ‘>>>>>>>’.

    You resolve the conflict by editing the file, removing the markers and the erroneous line. Suppose you end up with this file:

     
    #include <stdlib.h>
    #include <stdio.h>
    
    int main(int argc,
             char **argv)
    {
        init_scanner();
        parse();
        if (argc != 1)
        {
            fprintf(stderr, "tc: No args expected.\n");
            exit(1);
        }
        if (nerr == 0)
            gencode();
        else
            fprintf(stderr, "No code generated.\n");
        exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
    }
    

    You can now go ahead and commit this as revision 1.7.

     
    $ cvs commit -m "Initialize scanner. Use symbolic exit values." driver.c
    Checking in driver.c;
    /usr/local/cvsroot/yoyodyne/tc/driver.c,v  <--  driver.c
    new revision: 1.7; previous revision: 1.6
    done
    

    For your protection, CVS will refuse to check in a file if a conflict occurred and you have not resolved the conflict. Currently to resolve a conflict, you must change the timestamp on the file. In previous versions of CVS, you also needed to insure that the file contains no conflict markers. Because your file may legitimately contain conflict markers (that is, occurrences of ‘>>>>>>> ’ at the start of a line that don’t mark a conflict), the current version of CVS will print a warning and proceed to check in the file.

    If you use release 1.04 or later of pcl-cvs (a GNU Emacs front-end for CVS) you can use an Emacs package called emerge to help you resolve conflicts. See the documentation for pcl-cvs.


    |[[#Conflicts-example| < ]]| |[[#Concurrency| > ]]|   |[[#Multiple-developers| << ]]| |[[#Multiple-developers| Up ]]| |[[#Revision-management| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Informing others about commits ===

    It is often useful to inform others when you commit a new revision of a file. The ‘-i’ option of the ‘modules’ file, or the ‘loginfo’ file, can be used to automate this process. See section [[#modules|The modules file]]. See section [[#loginfo|Loginfo]]. You can use these features of CVS to, for instance, instruct CVS to mail a message to all developers, or post a message to a local newsgroup.


    |[[#Informing-others| < ]]| |[[#Watches| > ]]|   |[[#Multiple-developers| << ]]| |[[#Multiple-developers| Up ]]| |[[#Revision-management| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Several developers simultaneously attempting to run CVS ===

    If several developers try to run CVS at the same time, one may get the following message:

     
    [11:43:23] waiting for bach's lock in /usr/local/cvsroot/foo
    

    CVS will try again every 30 seconds, and either continue with the operation or print the message again, if it still needs to wait. If a lock seems to stick around for an undue amount of time, find the person holding the lock and ask them about the cvs command they are running. If they aren’t running a cvs command, look in the repository directory mentioned in the message and remove files which they own whose names start with ‘#cvs.rfl’, ‘#cvs.wfl’, or ‘#cvs.lock’.

    Note that these locks are to protect CVS’s internal data structures and have no relationship to the word lock in the sense used by RCS—which refers to reserved checkouts (see section [[#Multiple-developers|Multiple developers]]).

    Any number of people can be reading from a given repository at a time; only when someone is writing do the locks prevent other people from reading or writing.

    One might hope for the following property:

    If someone commits some changes in one cvs command, then an update by someone else will either get all the changes, or none of them.

    but CVS does not have this property. For example, given the files

     
    a/one.c
    a/two.c
    b/three.c
    b/four.c
    

    if someone runs

     
    cvs ci a/two.c b/three.c
    

    and someone else runs cvs update at the same time, the person running update might get only the change to ‘b/three.c’ and not the change to ‘a/two.c’.


    |[[#Concurrency| < ]]| |[[#Setting-a-watch| > ]]|   |[[#Multiple-developers| << ]]| |[[#Multiple-developers| Up ]]| |[[#Revision-management| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Mechanisms to track who is editing files ===

    For many groups, use of CVS in its default mode is perfectly satisfactory. Users may sometimes go to check in a modification only to find that another modification has intervened, but they deal with it and proceed with their check in. Other groups prefer to be able to know who is editing what files, so that if two people try to edit the same file they can choose to talk about who is doing what when rather than be surprised at check in time. The features in this section allow such coordination, while retaining the ability of two developers to edit the same file at the same time.

    For maximum benefit developers should use cvs edit (not chmod) to make files read-write to edit them, and cvs release (not rm) to discard a working directory which is no longer in use, but CVS is not able to enforce this behavior.


    |[[#Watches| < ]]| |[[#Getting-Notified| > ]]|   |[[#Multiple-developers| << ]]| |[[#Watches| Up ]]| |[[#Revision-management| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== Telling CVS to watch certain files ====

    To enable the watch features, you first specify that certain files are to be watched.

    Command: cvs watch on [-lR] [files]…

    Specify that developers should run cvs edit before editing files. CVS will create working copies of files read-only, to remind developers to run the cvs edit command before working on them.

    If files includes the name of a directory, CVS arranges to watch all files added to the corresponding repository directory, and sets a default for files added in the future; this allows the user to set notification policies on a per-directory basis. The contents of the directory are processed recursively, unless the -l option is given. The -R option can be used to force recursion if the -l option is set in ‘~/.cvsrc’ (see section [[#g_t_007e_002f_002ecvsrc|Default options and the ~/.cvsrc file]]).

    If files is omitted, it defaults to the current directory.

    Command: cvs watch off [-lR] [files]…

    Do not create files read-only on checkout; thus, developers will not be reminded to use cvs edit and cvs unedit.

    The files and options are processed as for cvs watch on.


    |[[#Setting-a-watch| < ]]| |[[#Editing-files| > ]]|   |[[#Multiple-developers| << ]]| |[[#Watches| Up ]]| |[[#Revision-management| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== Telling CVS to notify you ====

    You can tell CVS that you want to receive notifications about various actions taken on a file. You can do this without using cvs watch on for the file, but generally you will want to use cvs watch on, to remind developers to use the cvs edit command.

    Command: cvs watch add [-lR] [-a action]… [files]…

    Add the current user to the list of people to receive notification of work done on files.

    The -a option specifies what kinds of events CVS should notify the user about. action is one of the following:

    edit

    Another user has applied the cvs edit command (described below) to a watched file.

    commit

    Another user has committed changes to one of the named files.

    unedit

    Another user has abandoned editing a file (other than by committing changes). They can do this in several ways, by:

    • applying the cvs unedit command (described below) to the file
    • applying the cvs release command (see section [[#release|release—Indicate that a Module is no longer in use]]) to the file’s parent directory (or recursively to a directory more than one level up)
    • deleting the file and allowing cvs update to recreate it
    all

    All of the above.

    none

    None of the above. (This is useful with cvs edit, described below.)

    The -a option may appear more than once, or not at all. If omitted, the action defaults to all.

    The files and options are processed as for cvs watch on.

    Command: cvs watch remove [-lR] [-a action]… [files]…

    Remove a notification request established using cvs watch add; the arguments are the same. If the -a option is present, only watches for the specified actions are removed.

    When the conditions exist for notification, CVS calls the ‘notify’ administrative file. Edit ‘notify’ as one edits the other administrative files (see section [[#Intro-administrative-files|The administrative files]]). This file follows the usual conventions for administrative files (see section [[#syntax|The common syntax]]), where each line is a regular expression followed by a command to execute. The command should contain a single occurrence of ‘%s’ which will be replaced by the user to notify; the rest of the information regarding the notification will be supplied to the command on standard input. The standard thing to put in the notify file is the single line:

     
    ALL mail %s -s "CVS notification"
    

    This causes users to be notified by electronic mail.

    Note that if you set this up in the straightforward way, users receive notifications on the server machine. One could of course write a ‘notify’ script which directed notifications elsewhere, but to make this easy, CVS allows you to associate a notification address for each user. To do so create a file ‘users’ in ‘CVSROOT’ with a line for each user in the format user:value. Then instead of passing the name of the user to be notified to ‘notify’, CVS will pass the value (normally an email address on some other machine).

    CVS does not notify you for your own changes. Currently this check is done based on whether the user name of the person taking the action which triggers notification matches the user name of the person getting notification. In fact, in general, the watches features only track one edit by each user. It probably would be more useful if watches tracked each working directory separately, so this behavior might be worth changing.


    |[[#Getting-Notified| < ]]| |[[#Watch-information| > ]]|   |[[#Multiple-developers| << ]]| |[[#Watches| Up ]]| |[[#Revision-management| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== How to edit a file which is being watched ====

    Since a file which is being watched is checked out read-only, you cannot simply edit it. To make it read-write, and inform others that you are planning to edit it, use the cvs edit command. Some systems call this a checkout, but CVS uses that term for obtaining a copy of the sources (see section [[#Getting-the-source|Getting the source]]), an operation which those systems call a get or a fetch.

    Command: cvs edit [-lR] [-a action]… [files]…

    Prepare to edit the working files files. CVS makes the files read-write, and notifies users who have requested edit notification for any of files.

    The cvs edit command accepts the same options as the cvs watch add command, and establishes a temporary watch for the user on files; CVS will remove the watch when files are unedited or committed. If the user does not wish to receive notifications, she should specify -a none.

    The files and the options are processed as for the cvs watch commands.

    Normally when you are done with a set of changes, you use the cvs commit command, which checks in your changes and returns the watched files to their usual read-only state. But if you instead decide to abandon your changes, or not to make any changes, you can use the cvs unedit command.

    Command: cvs unedit [-lR] [files]…

    Abandon work on the working files files, and revert them to the repository versions on which they are based. CVS makes those files read-only for which users have requested notification using cvs watch on. CVS notifies users who have requested unedit notification for any of files.

    The files and options are processed as for the cvs watch commands.

    If watches are not in use, the unedit command probably does not work, and the way to revert to the repository version is with the command cvs update -C file (see section [[#update|update—Bring work tree in sync with repository]]). The meaning is not precisely the same; the latter may also bring in some changes which have been made in the repository since the last time you updated.

    When using client/server CVS, you can use the cvs edit and cvs unedit commands even if CVS is unable to successfully communicate with the server; the notifications will be sent upon the next successful CVS command.


    |[[#Editing-files| < ]]| |[[#Watches-Compatibility| > ]]|   |[[#Multiple-developers| << ]]| |[[#Watches| Up ]]| |[[#Revision-management| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== Information about who is watching and editing ====
    Command: cvs watchers [-lR] [files]…

    List the users currently watching changes to files. The report includes the files being watched, and the mail address of each watcher.

    The files and options are processed as for the cvs watch commands.

    Command: cvs editors [-lR] [files]…

    List the users currently working on files. The report includes the mail address of each user, the time when the user began working with the file, and the host and path of the working directory containing the file.

    The files and options are processed as for the cvs watch commands.


    |[[#Watch-information| < ]]| |[[#Choosing-a-model| > ]]|   |[[#Multiple-developers| << ]]| |[[#Watches| Up ]]| |[[#Revision-management| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== Using watches with old versions of CVS ====

    If you use the watch features on a repository, it creates ‘CVS’ directories in the repository and stores the information about watches in that directory. If you attempt to use CVS 1.6 or earlier with the repository, you get an error message such as the following (all on one line):

     
    cvs update: cannot open CVS/Entries for reading:
    No such file or directory
    

    and your operation will likely be aborted. To use the watch features, you must upgrade all copies of CVS which use that repository in local or server mode. If you cannot upgrade, use the watch off and watch remove commands to remove all watches, and that will restore the repository to a state which CVS 1.6 can cope with.


    |[[#Watches-Compatibility| < ]]| |[[#Revision-management| > ]]|   |[[#Multiple-developers| << ]]| |[[#Multiple-developers| Up ]]| |[[#Revision-management| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Choosing between reserved or unreserved checkouts ===

    Reserved and unreserved checkouts each have pros and cons. Let it be said that a lot of this is a matter of opinion or what works given different groups’ working styles, but here is a brief description of some of the issues. There are many ways to organize a team of developers. CVS does not try to enforce a certain organization. It is a tool that can be used in several ways.

    Reserved checkouts can be very counter-productive. If two persons want to edit different parts of a file, there may be no reason to prevent either of them from doing so. Also, it is common for someone to take out a lock on a file, because they are planning to edit it, but then forget to release the lock.

    People, especially people who are familiar with reserved checkouts, often wonder how often conflicts occur if unreserved checkouts are used, and how difficult they are to resolve. The experience with many groups is that they occur rarely and usually are relatively straightforward to resolve.

    The rarity of serious conflicts may be surprising, until one realizes that they occur only when two developers disagree on the proper design for a given section of code; such a disagreement suggests that the team has not been communicating properly in the first place. In order to collaborate under any source management regimen, developers must agree on the general design of the system; given this agreement, overlapping changes are usually straightforward to merge.

    In some cases unreserved checkouts are clearly inappropriate. If no merge tool exists for the kind of file you are managing (for example word processor files or files edited by Computer Aided Design programs), and it is not desirable to change to a program which uses a mergeable data format, then resolving conflicts is going to be unpleasant enough that you generally will be better off to simply avoid the conflicts instead, by using reserved checkouts.

    The watches features described above in [[#Watches|Mechanisms to track who is editing files]] can be considered to be an intermediate model between reserved checkouts and unreserved checkouts. When you go to edit a file, it is possible to find out who else is editing it. And rather than having the system simply forbid both people editing the file, it can tell you what the situation is and let you figure out whether it is a problem in that particular case or not. Therefore, for some groups it can be considered the best of both the reserved checkout and unreserved checkout worlds.


    |[[#Choosing-a-model| < ]]| |[[#When-to-commit| > ]]|   |[[#Multiple-developers| << ]]| |[[#Top| Up ]]| |[[#Keyword-substitution| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    == Revision management ==

    If you have read this far, you probably have a pretty good grasp on what CVS can do for you. This chapter talks a little about things that you still have to decide.

    If you are doing development on your own using CVS you could probably skip this chapter. The questions this chapter takes up become more important when more than one person is working in a repository.


    |[[#Revision-management| < ]]| |[[#Keyword-substitution| > ]]|   |[[#Revision-management| << ]]| |[[#Revision-management| Up ]]| |[[#Keyword-substitution| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === When to commit? ===

    Your group should decide which policy to use regarding commits. Several policies are possible, and as your experience with CVS grows you will probably find out what works for you.

    If you commit files too quickly you might commit files that do not even compile. If your partner updates his working sources to include your buggy file, he will be unable to compile the code. On the other hand, other persons will not be able to benefit from the improvements you make to the code if you commit very seldom, and conflicts will probably be more common.

    It is common to only commit files after making sure that they can be compiled. Some sites require that the files pass a test suite. Policies like this can be enforced using the commitinfo file (see section [[#commitinfo|Commitinfo]]), but you should think twice before you enforce such a convention. By making the development environment too controlled it might become too regimented and thus counter-productive to the real goal, which is to get software written.


    |[[#When-to-commit| < ]]| |[[#Keyword-list| > ]]|   |[[#Revision-management| << ]]| |[[#Top| Up ]]| |[[#Tracking-sources| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    == Keyword substitution ==

    As long as you edit source files inside a working directory you can always find out the state of your files via ‘cvs status’ and ‘cvs log’. But as soon as you export the files from your development environment it becomes harder to identify which revisions they are.

    CVS can use a mechanism known as keyword substitution (or keyword expansion) to help identifying the files. Embedded strings of the form $keyword$ and $keyword:…$ in a file are replaced with strings of the form $keyword:value$ whenever you obtain a new revision of the file.


    |[[#Keyword-substitution| < ]]| |[[#Using-keywords| > ]]|   |[[#Keyword-substitution| << ]]| |[[#Keyword-substitution| Up ]]| |[[#Tracking-sources| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Keyword List ===

    This is a list of the keywords:

    $Author$

    The login name of the user who checked in the revision.

    $CVSHeader

    A standard header (similar to $Header$, but with the CVS root stripped off). It contains the relative pathname of the RCS file to the CVS root, the revision number, the date (UTC), the author, the state, and the locker (if locked). Files will normally never be locked when you use CVS.

    Note that this keyword has only been recently introduced to CVS and may cause problems with existing installations if $CVSHeader$ is already in the files for a different purpose. This keyword may be excluded using the KeywordExpansion=eCVSHeader in the ‘CVSROOT/config’ file. See [[#Configuring-keyword-expansion|Configuring Keyord Expansion]] for more details.

    $Date$

    The date and time (UTC) the revision was checked in.

    $Header$

    A standard header containing the full pathname of the RCS file, the revision number, the date (UTC), the author, the state, and the locker (if locked). Files will normally never be locked when you use CVS.

    $Id$

    Same as $Header$, except that the RCS filename is without a path.

    $Name$

    Tag name used to check out this file. The keyword is expanded only if one checks out with an explicit tag name. For example, when running the command cvs co -r first, the keyword expands to ‘Name: first’.

    $Locker$

    The login name of the user who locked the revision (empty if not locked, which is the normal case unless cvs admin -l is in use).

    $Log$

    The log message supplied during commit, preceded by a header containing the RCS filename, the revision number, the author, and the date (UTC). Existing log messages are not replaced. Instead, the new log message is inserted after $Log:…$. Each new line is prefixed with the same string which precedes the $Log keyword. For example, if the file contains:

     
      /* Here is what people have been up to:
       *
       * $Log: frob.c,v $
       * Revision 1.1  1997/01/03 14:23:51  joe
       * Add the superfrobnicate option
       *
       */
    

    then additional lines which are added when expanding the $Log keyword will be preceded by ‘ * ’. Unlike previous versions of CVS and RCS, the comment leader from the RCS file is not used. The $Log keyword is useful for accumulating a complete change log in a source file, but for several reasons it can be problematic. See section [[#Log-keyword|Problems with the $Log$ keyword.]].

    $RCSfile$

    The name of the RCS file without a path.

    $Revision$

    The revision number assigned to the revision.

    $Source$

    The full pathname of the RCS file.

    $State$

    The state assigned to the revision. States can be assigned with cvs admin -s—see [[#admin-options|admin options]].

    Local keyword

    The LocalKeyword option in the ‘CVSROOT/config’ file may be used to specify a local keyword which is to be used as an alias for one of the other keywords. For example, if the ‘CVSROOT/config’ file contains a line with LocalKeyword=MYBSD=CVSHeader, then a file with the local keyword $MYBSD$ will be expanded as if it were a $CVSHeader$ keyword. If the src/frob.c file contained this keyword, it might look something like this:

     
      /*
       * $MYBSD: src/frob.c,v 1.1 2003/05/04 09:27:45 john Exp $ 
       */
    

    Many repositories make use of a such a “local keyword” feature. An old patch to CVS provided the LocalKeyword feature using a tag= option and called this the “custom tag” or “local tag” feature. It was used in conjunction with the what they called the tagexpand= option. In CVS this other option is known as the KeywordExpand option. See [[#Configuring-keyword-expansion|Configuring Keyord Expansion]] for more details.

    Examples from popular projects include: $FreeBSD$, $NetBSD$, $OpenBSD$, $XFree86$, $Xorg$.

    The advantage of this is that you can include your local version information in a file using this local keyword without disrupting the upstream version information (which may be a different local keyword or a standard keyword). Allowing bug reports and the like to more properly identify the source of the original bug to the third-party and reducing the number of conflicts that arise during an import of a new version.

    All keyword expansion except the local keyword may be disabled using the KeywordExpansion option in the ‘CVSROOT/config’ file—see [[#Configuring-keyword-expansion|Configuring Keyord Expansion]] for more details.


    |[[#Keyword-list| < ]]| |[[#Avoiding-substitution| > ]]|   |[[#Keyword-substitution| << ]]| |[[#Keyword-substitution| Up ]]| |[[#Tracking-sources| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Using keywords ===

    To include a keyword string you simply include the relevant text string, such as $Id$, inside the file, and commit the file. CVS will automatically expand the string as part of the commit operation.

    It is common to embed the $Id$ string in the source files so that it gets passed through to generated files. For example, if you are managing computer program source code, you might include a variable which is initialized to contain that string. Or some C compilers may provide a #pragma ident directive. Or a document management system might provide a way to pass a string through to generated files.

    The ident command (which is part of the RCS package) can be used to extract keywords and their values from a file. This can be handy for text files, but it is even more useful for extracting keywords from binary files.

     
    $ ident samp.c
    samp.c:
         $Id: samp.c,v 1.5 1993/10/19 14:57:32 ceder Exp $
    $ gcc samp.c
    $ ident a.out
    a.out:
         $Id: samp.c,v 1.5 1993/10/19 14:57:32 ceder Exp $
    

    SCCS is another popular revision control system. It has a command, what, which is very similar to ident and used for the same purpose. Many sites without RCS have SCCS. Since what looks for the character sequence @(#) it is easy to include keywords that are detected by either command. Simply prefix the keyword with the magic SCCS phrase, like this:

     
    static char *id="@(#) $Id: ab.c,v 1.5 1993/10/19 14:57:32 ceder Exp $";
    

    |[[#Using-keywords| < ]]| |[[#Substitution-modes| > ]]|   |[[#Keyword-substitution| << ]]| |[[#Keyword-substitution| Up ]]| |[[#Tracking-sources| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Avoiding substitution ===

    Keyword substitution has its disadvantages. Sometimes you might want the literal text string ‘$Author$’ to appear inside a file without CVS interpreting it as a keyword and expanding it into something like ‘$Author: ceder $’.

    There is unfortunately no way to selectively turn off keyword substitution. You can use ‘-ko’ (see section [[#Substitution-modes|Substitution modes]]) to turn off keyword substitution entirely.

    In many cases you can avoid using keywords in the source, even though they appear in the final product. For example, the source for this manual contains ‘$@asis{}Author$’ whenever the text ‘$Author$’ should appear. In nroff and troff you can embed the null-character \& inside the keyword for a similar effect.

    It is also possible to specify an explicit list of keywords to include or exclude using the KeywordExpand option in the ‘CVSROOT/config’ file–see [[#Configuring-keyword-expansion|Configuring Keyord Expansion]] for more details. This feature is intended primarily for use with the LocalKeyword option–see [[#Keyword-list|Keyword List]].


    |[[#Avoiding-substitution| < ]]| |[[#Configuring-keyword-expansion| > ]]|   |[[#Keyword-substitution| << ]]| |[[#Keyword-substitution| Up ]]| |[[#Tracking-sources| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Substitution modes ===

    Each file has a stored default substitution mode, and each working directory copy of a file also has a substitution mode. The former is set by the ‘-k’ option to cvs add and cvs admin; the latter is set by the ‘-k’ or ‘-A’ options to cvs checkout or cvs update. cvs diff also has a ‘-k’ option. For some examples, see [[#Binary-files|Handling binary files]], and [[#Merging-and-keywords|Merging and keywords]].

    The modes available are:

    -kkv

    Generate keyword strings using the default form, e.g. $Revision: 5.7 $ for the Revision keyword.

    -kkvl

    Like ‘-kkv’, except that a locker’s name is always inserted if the given revision is currently locked. The locker’s name is only relevant if cvs admin -l is in use.

    -kk

    Generate only keyword names in keyword strings; omit their values. For example, for the Revision keyword, generate the string $Revision$ instead of $Revision: 5.7 $. This option is useful to ignore differences due to keyword substitution when comparing different revisions of a file (see section [[#Merging-and-keywords|Merging and keywords]]).

    -ko

    Generate the old keyword string, present in the working file just before it was checked in. For example, for the Revision keyword, generate the string $Revision: 1.1 $ instead of $Revision: 5.7 $ if that is how the string appeared when the file was checked in.

    -kb

    Like ‘-ko’, but also inhibit conversion of line endings between the canonical form in which they are stored in the repository (linefeed only), and the form appropriate to the operating system in use on the client. For systems, like unix, which use linefeed only to terminate lines, this is very similar to ‘-ko’. For more information on binary files, see [[#Binary-files|Handling binary files]]. In CVS version 1.12.2 and later ‘-kb’, as set by cvs add, cvs admin, or cvs import may not be overridden by a ‘-k’ option specified on the command line.

    -kv

    Generate only keyword values for keyword strings. For example, for the Revision keyword, generate the string 5.7 instead of $Revision: 5.7 $. This can help generate files in programming languages where it is hard to strip keyword delimiters like $Revision: $ from a string. However, further keyword substitution cannot be performed once the keyword names are removed, so this option should be used with care.

    One often would like to use ‘-kv’ with cvs export—see section [[#export|export—Export sources from CVS, similar to checkout]]. But be aware that doesn’t handle an export containing binary files correctly.


    |[[#Substitution-modes| < ]]| |[[#Log-keyword| > ]]|   |[[#Keyword-substitution| << ]]| |[[#Keyword-substitution| Up ]]| |[[#Tracking-sources| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Configuring Keyord Expansion ===

    In a repository that includes third-party software on vendor branches, it is sometimes helpful to configure CVS to use a local keyword instead of the standard $Id$ or $Header$ keywords. Examples from real projects includ, $Xorg$, $XFree86$, $FreeBSD$, $NetBSD$, $OpenBSD$, and even $dotat$. The advantage of this is that you can include your local version information in a file using this local keyword (sometimes called a “custom tag” or a “local tag”) without disrupting the upstream version information (which may be a different local keyword or a standard keyword). In these cases, it is typically desirable to disable the expansion of all keywords except the configured local keyword.

    The KeywordExpansion option in the ‘CVSROOT/config’ file is intended to allow for the either the explicit exclusion of a keyword or list of keywords, or for the explicit inclusion of a keyword or a list of keywords. This list may include the LocalKeyword that has been configured.

    The KeywordExpansion option is followed by = and the next character may either be i to start an inclusion list or e to start an exclusion list. If the following lines were added to the ‘CVSROOT/config’ file:

     
            # Add a "MyBSD" keyword and restrict keyword
            # expansion
            LocalKeyword=MyBSD=CVSHeader
            KeywordExpand=iMyBSD
    

    then only the $MyBSD$ keyword would be expanded. A list may be used. The this example:

     
            # Add a "MyBSD" keyword and restrict keyword
            # expansion to the MyBSD, Name and Date keywords.
            LocalKeyword=MyBSD=CVSHeader
            KeywordExpand=iMyBSD,Name,Date
    

    would allow $MyBSD$, $Name$, and $Date$ to be expanded.

    It is also possible to configure an exclusion list using the following:

     
            # Do not expand the non-RCS keyword CVSHeader
            KeywordExpand=eCVSHeader
    

    This allows CVS to ignore the recently introduced $CVSHeader$ keyword and retain all of the others. The exclusion entry could also contain the standard RCS keyword list, but this could be confusing to users that expect RCS keywords to be expanded, so ycare should be taken to properly set user expectations for a repository that is configured in that manner.

    If there is a desire to not have any RCS keywords expanded and not use the -ko flags everywhere, an administrator may disable all keyword expansion using the ‘CVSROOT/config’ line:

     
    	# Do not expand any RCS keywords
    	KeywordExpand=i
    

    this could be confusing to users that expect RCS keywords like $Id$ to be expanded properly, so care should be taken to properly set user expectations for a repository so configured.

    It should be noted that a patch to provide both the KeywordExpand and LocalKeyword features has been around a long time. However, that patch implemented these features using tag= and tagexpand= keywords and those keywords are NOT recognized.


    |[[#Configuring-keyword-expansion| < ]]| |[[#Tracking-sources| > ]]|   |[[#Keyword-substitution| << ]]| |[[#Keyword-substitution| Up ]]| |[[#Tracking-sources| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Problems with the $Log$ keyword. ===

    The $Log$ keyword is somewhat controversial. As long as you are working on your development system the information is easily accessible even if you do not use the $Log$ keyword—just do a cvs log. Once you export the file the history information might be useless anyhow.

    A more serious concern is that CVS is not good at handling $Log$ entries when a branch is merged onto the main trunk. Conflicts often result from the merging operation.

    People also tend to "fix" the log entries in the file (correcting spelling mistakes and maybe even factual errors). If that is done the information from cvs log will not be consistent with the information inside the file. This may or may not be a problem in real life.

    It has been suggested that the $Log$ keyword should be inserted last in the file, and not in the files header, if it is to be used at all. That way the long list of change messages will not interfere with everyday source file browsing.


    |[[#Log-keyword| < ]]| |[[#First-import| > ]]|   |[[#Keyword-substitution| << ]]| |[[#Top| Up ]]| |[[#Builds| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    == Tracking third-party sources ==

    If you modify a program to better fit your site, you probably want to include your modifications when the next release of the program arrives. CVS can help you with this task.

    In the terminology used in CVS, the supplier of the program is called a vendor. The unmodified distribution from the vendor is checked in on its own branch, the vendor branch. CVS reserves branch 1.1.1 for this use.

    When you modify the source and commit it, your revision will end up on the main trunk. When a new release is made by the vendor, you commit it on the vendor branch and copy the modifications onto the main trunk.

    Use the import command to create and update the vendor branch. When you import a new file, the vendor branch is made the ‘head’ revision, so anyone that checks out a copy of the file gets that revision. When a local modification is committed it is placed on the main trunk, and made the ‘head’ revision.


    |[[#Tracking-sources| < ]]| |[[#Update-imports| > ]]|   |[[#Tracking-sources| << ]]| |[[#Tracking-sources| Up ]]| |[[#Builds| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Importing for the first time ===

    Use the import command to check in the sources for the first time. When you use the import command to track third-party sources, the vendor tag and release tags are useful. The vendor tag is a symbolic name for the branch (which is always 1.1.1, unless you use the ‘-b branch’ flag—see [[#Multiple-vendor-branches|Multiple vendor branches]].). The release tags are symbolic names for a particular release, such as ‘FSF_0_04’.

    Note that import does not change the directory in which you invoke it. In particular, it does not set up that directory as a CVS working directory; if you want to work with the sources import them first and then check them out into a different directory (see section [[#Getting-the-source|Getting the source]]).

    Suppose you have the sources to a program called wdiff in a directory ‘wdiff-0.04’, and are going to make private modifications that you want to be able to use even when new releases are made in the future. You start by importing the source to your repository:

     
    $ cd wdiff-0.04
    $ cvs import -m "Import of FSF v. 0.04" fsf/wdiff FSF_DIST WDIFF_0_04
    

    The vendor tag is named ‘FSF_DIST’ in the above example, and the only release tag assigned is ‘WDIFF_0_04’.


    |[[#First-import| < ]]| |[[#Reverting-local-changes| > ]]|   |[[#Tracking-sources| << ]]| |[[#Tracking-sources| Up ]]| |[[#Builds| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Updating with the import command ===

    When a new release of the source arrives, you import it into the repository with the same import command that you used to set up the repository in the first place. The only difference is that you specify a different release tag this time:

     
    $ tar xfz wdiff-0.05.tar.gz
    $ cd wdiff-0.05
    $ cvs import -m "Import of FSF v. 0.05" fsf/wdiff FSF_DIST WDIFF_0_05
    

    For files that have not been modified locally, the newly created revision becomes the head revision. If you have made local changes, import will warn you that you must merge the changes into the main trunk, and tell you to use ‘checkout -j’ to do so:

     
    $ cvs checkout -jFSF_DIST:yesterday -jFSF_DIST wdiff
    

    The above command will check out the latest revision of ‘wdiff’, merging the changes made on the vendor branch ‘FSF_DIST’ since yesterday into the working copy. If any conflicts arise during the merge they should be resolved in the normal way (see section [[#Conflicts-example|Conflicts example]]). Then, the modified files may be committed.

    However, it is much better to use the two release tags rather than using a date on the branch as suggested above:

     
    $ cvs checkout -jWDIFF_0_04 -jWDIFF_0_05 wdiff
    

    The reason this is better is that using a date, as suggested above, assumes that you do not import more than one release of a product per day. More importantly, using the release tags allows CVS to detect files that were removed between the two vendor releases and mark them for removal. Since import has no way to detect removed files, you should do a merge like this even if import doesn’t tell you to.


    |[[#Update-imports| < ]]| |[[#Binary-files-in-imports| > ]]|   |[[#Tracking-sources| << ]]| |[[#Tracking-sources| Up ]]| |[[#Builds| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Reverting to the latest vendor release ===

    You can also revert local changes completely and return to the latest vendor release by changing the ‘head’ revision back to the vendor branch on all files. For example, if you have a checked-out copy of the sources in ‘~/work.d/wdiff’, and you want to revert to the vendor’s version for all the files in that directory, you would type:

     
    $ cd ~/work.d/wdiff
    $ cvs admin -bWDIFF .
    

    You must specify the ‘-bWDIFF’ without any space after the ‘-b’. See section [[#admin-options|admin options]].


    |[[#Reverting-local-changes| < ]]| |[[#Keywords-in-imports| > ]]|   |[[#Tracking-sources| << ]]| |[[#Tracking-sources| Up ]]| |[[#Builds| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === How to handle binary files with cvs import ===

    Use the ‘-k’ wrapper option to tell import which files are binary. See section [[#Wrappers|The cvswrappers file]].


    |[[#Binary-files-in-imports| < ]]| |[[#Multiple-vendor-branches| > ]]|   |[[#Tracking-sources| << ]]| |[[#Tracking-sources| Up ]]| |[[#Builds| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === How to handle keyword substitution with cvs import ===

    The sources which you are importing may contain keywords (see section [[#Keyword-substitution|Keyword substitution]]). For example, the vendor may use CVS or some other system which uses similar keyword expansion syntax. If you just import the files in the default fashion, then the keyword expansions supplied by the vendor will be replaced by keyword expansions supplied by your own copy of CVS. It may be more convenient to maintain the expansions supplied by the vendor, so that this information can supply information about the sources that you imported from the vendor.

    To maintain the keyword expansions supplied by the vendor, supply the ‘-ko’ option to cvs import the first time you import the file. This will turn off keyword expansion for that file entirely, so if you want to be more selective you’ll have to think about what you want and use the ‘-k’ option to cvs update or cvs admin as appropriate.


    |[[#Keywords-in-imports| < ]]| |[[#Builds| > ]]|   |[[#Tracking-sources| << ]]| |[[#Tracking-sources| Up ]]| |[[#Builds| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Multiple vendor branches ===

    All the examples so far assume that there is only one vendor from which you are getting sources. In some situations you might get sources from a variety of places. For example, suppose that you are dealing with a project where many different people and teams are modifying the software. There are a variety of ways to handle this, but in some cases you have a bunch of source trees lying around and what you want to do more than anything else is just to all put them in CVS so that you at least have them in one place.

    For handling situations in which there may be more than one vendor, you may specify the ‘-b’ option to cvs import. It takes as an argument the vendor branch to import to. The default is ‘-b 1.1.1’.

    For example, suppose that there are two teams, the red team and the blue team, that are sending you sources. You want to import the red team’s efforts to branch 1.1.1 and use the vendor tag RED. You want to import the blue team’s efforts to branch 1.1.3 and use the vendor tag BLUE. So the commands you might use are:

     
    $ cvs import dir RED RED_1-0
    $ cvs import -b 1.1.3 dir BLUE BLUE_1-5
    

    Note that if your vendor tag does not match your ‘-b’ option, CVS will not detect this case! For example,

     
    $ cvs import -b 1.1.3 dir RED RED_1-0
    

    Be careful; this kind of mismatch is sure to sow confusion or worse. I can’t think of a useful purpose for the ability to specify a mismatch here, but if you discover such a use, don’t. CVS is likely to make this an error in some future release.


    |[[#Multiple-vendor-branches| < ]]| |[[#Special-Files| > ]]|   |[[#Tracking-sources| << ]]| |[[#Top| Up ]]| |[[#Special-Files| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    == How your build system interacts with CVS ==

    As mentioned in the introduction, CVS does not contain software for building your software from source code. This section describes how various aspects of your build system might interact with CVS.

    One common question, especially from people who are accustomed to RCS, is how to make their build get an up to date copy of the sources. The answer to this with CVS is two-fold. First of all, since CVS itself can recurse through directories, there is no need to modify your ‘Makefile’ (or whatever configuration file your build tool uses) to make sure each file is up to date. Instead, just use two commands, first cvs -q update and then make or whatever the command is to invoke your build tool. Secondly, you do not necessarily want to get a copy of a change someone else made until you have finished your own work. One suggested approach is to first update your sources, then implement, build and test the change you were thinking of, and then commit your sources (updating first if necessary). By periodically (in between changes, using the approach just described) updating your entire tree, you ensure that your sources are sufficiently up to date.

    One common need is to record which versions of which source files went into a particular build. This kind of functionality is sometimes called bill of materials or something similar. The best way to do this with CVS is to use the tag command to record which versions went into a given build (see section [[#Tags|Tags–Symbolic revisions]]).

    Using CVS in the most straightforward manner possible, each developer will have a copy of the entire source tree which is used in a particular build. If the source tree is small, or if developers are geographically dispersed, this is the preferred solution. In fact one approach for larger projects is to break a project down into smaller separately-compiled subsystems, and arrange a way of releasing them internally so that each developer need check out only those subsystems which they are actively working on.

    Another approach is to set up a structure which allows developers to have their own copies of some files, and for other files to access source files from a central location. Many people have come up with some such a system using features such as the symbolic link feature found in many operating systems, or the VPATH feature found in many versions of make. One build tool which is designed to help with this kind of thing is Odin (see ftp://ftp.cs.colorado.edu/pub/distribs/odin).


    |[[#Builds| < ]]| |[[#CVS-commands| > ]]|   |[[#Builds| << ]]| |[[#Top| Up ]]| |[[#CVS-commands| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    == Special Files ==

    In normal circumstances, CVS works only with regular files. Every file in a project is assumed to be persistent; it must be possible to open, read and close them; and so on. CVS also ignores file permissions and ownerships, leaving such issues to be resolved by the developer at installation time. In other words, it is not possible to "check in" a device into a repository; if the device file cannot be opened, CVS will refuse to handle it. Files also lose their ownerships and permissions during repository transactions.


    |[[#Special-Files| < ]]| |[[#Structure| > ]]|   |[[#Special-Files| << ]]| |[[#Top| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    == Guide to CVS commands ==

    This appendix describes the overall structure of CVS commands, and describes some commands in detail (others are described elsewhere; for a quick reference to CVS commands, see section [[#Invoking-CVS|Quick reference to CVS commands]]).


    |[[#CVS-commands| < ]]| |[[#Exit-status| > ]]|   |[[#CVS-commands| << ]]| |[[#CVS-commands| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Overall structure of CVS commands ===

    The overall format of all CVS commands is:

     
    cvs [ cvs_options ] cvs_command [ command_options ] [ command_args ]
    
    cvs

    The name of the CVS program.

    cvs_options

    Some options that affect all sub-commands of CVS. These are described below.

    cvs_command

    One of several different sub-commands. Some of the commands have aliases that can be used instead; those aliases are noted in the reference manual for that command. There are only two situations where you may omit ‘cvs_command’: ‘cvs -H’ elicits a list of available commands, and ‘cvs -v’ displays version information on CVS itself.

    command_options

    Options that are specific for the command.

    command_args

    Arguments to the commands.

    There is unfortunately some confusion between cvs_options and command_options. ‘-l’, when given as a cvs_option, only affects some of the commands. When it is given as a command_option is has a different meaning, and is accepted by more commands. In other words, do not take the above categorization too seriously. Look at the documentation instead.


    |[[#Structure| < ]]| |[[#g_t_007e_002f_002ecvsrc| > ]]|   |[[#CVS-commands| << ]]| |[[#CVS-commands| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === CVS’s exit status ===

    CVS can indicate to the calling environment whether it succeeded or failed by setting its exit status. The exact way of testing the exit status will vary from one operating system to another. For example in a unix shell script the ‘$?’ variable will be 0 if the last command returned a successful exit status, or greater than 0 if the exit status indicated failure.

    If CVS is successful, it returns a successful status; if there is an error, it prints an error message and returns a failure status. The one exception to this is the cvs diff command. It will return a successful status if it found no differences, or a failure status if there were differences or if there was an error. Because this behavior provides no good way to detect errors, in the future it is possible that cvs diff will be changed to behave like the other CVS commands.


    |[[#Exit-status| < ]]| |[[#Global-options| > ]]|   |[[#CVS-commands| << ]]| |[[#CVS-commands| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Default options and the ~/.cvsrc file ===

    There are some command_options that are used so often that you might have set up an alias or some other means to make sure you always specify that option. One example (the one that drove the implementation of the ‘.cvsrc’ support, actually) is that many people find the default output of the ‘diff’ command to be very hard to read, and that either context diffs or unidiffs are much easier to understand.

    The ‘~/.cvsrc’ file is a way that you can add default options to cvs_commands within cvs, instead of relying on aliases or other shell scripts.

    The format of the ‘~/.cvsrc’ file is simple. The file is searched for a line that begins with the same name as the cvs_command being executed. If a match is found, then the remainder of the line is split up (at whitespace characters) into separate options and added to the command arguments before any options from the command line.

    If a command has two names (e.g., checkout and co), the official name, not necessarily the one used on the command line, will be used to match against the file. So if this is the contents of the user’s ‘~/.cvsrc’ file:

     
    log -N
    diff -uN
    rdiff -u
    update -Pd
    checkout -P
    release -d
    

    the command ‘cvs checkout foo’ would have the ‘-P’ option added to the arguments, as well as ‘cvs co foo’.

    With the example file above, the output from ‘cvs diff foobar’ will be in unidiff format. ‘cvs diff -c foobar’ will provide context diffs, as usual. Getting "old" format diffs would be slightly more complicated, because diff doesn’t have an option to specify use of the "old" format, so you would need ‘cvs -f diff foobar’.

    In place of the command name you can use cvs to specify global options (see section [[#Global-options|Global options]]). For example the following line in ‘.cvsrc

     
    cvs -z6
    

    causes CVS to use compression level 6.


    |[[#g_t_007e_002f_002ecvsrc| < ]]| |[[#Common-options| > ]]|   |[[#CVS-commands| << ]]| |[[#CVS-commands| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Global options ===

    The available ‘cvs_options’ (that are given to the left of ‘cvs_command’) are:

    --allow-root=rootdir

    Specify legal CVSROOT directory. See [[#Password-authentication-server|Setting up the server for password authentication]].

    -a

    Authenticate all communication between the client and the server. Only has an effect on the CVS client. As of this writing, this is only implemented when using a GSSAPI connection (see section [[#GSSAPI-authenticated|Direct connection with GSSAPI]]). Authentication prevents certain sorts of attacks involving hijacking the active TCP connection. Enabling authentication does not enable encryption.

    -b bindir

    In CVS 1.9.18 and older, this specified that RCS programs are in the bindir directory. Current versions of CVS do not run RCS programs; for compatibility this option is accepted, but it does nothing.

    -T tempdir

    Use tempdir as the directory where temporary files are located. Overrides the setting of the $TMPDIR environment variable and any precompiled directory. This parameter should be specified as an absolute pathname. (When running client/server, ‘-T’ affects only the local process; specifying ‘-T’ for the client has no effect on the server and vice versa.)

    -d cvs_root_directory

    Use cvs_root_directory as the root directory pathname of the repository. Overrides the setting of the $CVSROOT environment variable. See section [[#Repository|The Repository]].

    -e editor

    Use editor to enter revision log information. Overrides the setting of the $CVSEDITOR and $EDITOR environment variables. For more information, see [[#Committing-your-changes|Committing your changes]].

    -f

    Do not read the ‘~/.cvsrc’ file. This option is most often used because of the non-orthogonality of the CVS option set. For example, the ‘cvs log’ option ‘-N’ (turn off display of tag names) does not have a corresponding option to turn the display on. So if you have ‘-N’ in the ‘~/.cvsrc’ entry for ‘log’, you may need to use ‘-f’ to show the tag names.

    -H
    --help

    Display usage information about the specified ‘cvs_command’ (but do not actually execute the command). If you don’t specify a command name, ‘cvs -H’ displays overall help for CVS, including a list of other help options.

    -l

    Do not log the ‘cvs_command’ in the command history (but execute it anyway). See section [[#history|history—Show status of files and users]], for information on command history.

    -R

    Turns on read-only repository mode. This allows one to check out from a read-only repository, such as within an anoncvs server, or from a CDROM repository.

    Same effect as if the CVSREADONLYFS environment variable is set. Using ‘-R’ can also considerably speed up checkout’s over NFS.

    -n

    Do not change any files. Attempt to execute the ‘cvs_command’, but only to issue reports; do not remove, update, or merge any existing files, or create any new files.

    Note that CVS will not necessarily produce exactly the same output as without ‘-n’. In some cases the output will be the same, but in other cases CVS will skip some of the processing that would have been required to produce the exact same output.

    -Q

    Cause the command to be really quiet; the command will only generate output for serious problems.

    -q

    Cause the command to be somewhat quiet; informational messages, such as reports of recursion through subdirectories, are suppressed.

    -r

    Make new working files read-only. Same effect as if the $CVSREAD environment variable is set (see section [[#Environment-variables|All environment variables which affect CVS]]). The default is to make working files writable, unless watches are on (see section [[#Watches|Mechanisms to track who is editing files]]).

    -s variable=value

    Set a user variable (see section [[#Variables|Expansions in administrative files]]).

    -t

    Trace program execution; display messages showing the steps of CVS activity. Particularly useful with ‘-n’ to explore the potential impact of an unfamiliar command.

    -v
    --version

    Display version and copyright information for CVS.

    -w

    Make new working files read-write. Overrides the setting of the $CVSREAD environment variable. Files are created read-write by default, unless $CVSREAD is set or ‘-r’ is given.

    -x

    Encrypt all communication between the client and the server. Only has an effect on the CVS client. As of this writing, this is only implemented when using a GSSAPI connection (see section [[#GSSAPI-authenticated|Direct connection with GSSAPI]]) or a Kerberos connection (see section [[#Kerberos-authenticated|Direct connection with kerberos]]). Enabling encryption implies that message traffic is also authenticated. Encryption support is not available by default; it must be enabled using a special configure option, ‘--enable-encryption’, when you build CVS.

    -z gzip-level

    Set the compression level. Valid levels are 1 (high speed, low compression) to 9 (low speed, high compression), or 0 to disable compression (the default). Only has an effect on the CVS client.


    |[[#Global-options| < ]]| |[[#admin| > ]]|   |[[#CVS-commands| << ]]| |[[#CVS-commands| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Common command options ===

    This section describes the ‘command_options’ that are available across several CVS commands. These options are always given to the right of ‘cvs_command’. Not all commands support all of these options; each option is only supported for commands where it makes sense. However, when a command has one of these options you can almost always count on the same behavior of the option as in other commands. (Other command options, which are listed with the individual commands, may have different behavior from one CVS command to the other).

    Note: the ‘history’ command is an exception; it supports many options that conflict even with these standard options.

    -D date_spec

    Use the most recent revision no later than date_spec. date_spec is a single argument, a date description specifying a date in the past.

    The specification is sticky when you use it to make a private copy of a source file; that is, when you get a working file using ‘-D’, CVS records the date you specified, so that further updates in the same directory will use the same date (for more information on sticky tags/dates, see section [[#Sticky-tags|Sticky tags]]).

    -D’ is available with the annotate, checkout, diff, export, history, rdiff, rtag, tag, and update commands. (The history command uses this option in a slightly different way; see section [[#history-options|history options]]).

    A wide variety of date formats are supported by CVS. The most standard ones are ISO8601 (from the International Standards Organization) and the Internet e-mail standard (specified in RFC822 as amended by RFC1123).

    ISO8601 dates have many variants but a few examples are:

     
    1972-09-24
    1972-09-24 20:05
    

    There are a lot more ISO8601 date formats, and CVS accepts many of them, but you probably don’t want to hear the whole long story :-).

    In addition to the dates allowed in Internet e-mail itself, CVS also allows some of the fields to be omitted. For example:

     
    24 Sep 1972 20:05
    24 Sep
    

    The date is interpreted as being in the local timezone, unless a specific timezone is specified.

    These two date formats are preferred. However, CVS currently accepts a wide variety of other date formats. They are intentionally not documented here in any detail, and future versions of CVS might not accept all of them.

    One such format is month/day/year. This may confuse people who are accustomed to having the month and day in the other order; ‘1/4/96’ is January 4, not April 1.

    Remember to quote the argument to the ‘-D’ flag so that your shell doesn’t interpret spaces as argument separators. A command using the ‘-D’ flag can look like this:

     
    $ cvs diff -D "1 hour ago" cvs.texinfo
    
    -f

    When you specify a particular date or tag to CVS commands, they normally ignore files that do not contain the tag (or did not exist prior to the date) that you specified. Use the ‘-f’ option if you want files retrieved even when there is no match for the tag or date. (The most recent revision of the file will be used).

    Note that even with ‘-f’, a tag that you specify must exist (that is, in some file, not necessary in every file). This is so that CVS will continue to give an error if you mistype a tag name.

    -f’ is available with these commands: annotate, checkout, export, rdiff, rtag, and update.

    WARNING: The commit and remove commands also have a ‘-f’ option, but it has a different behavior for those commands. See [[#commit-options|commit options]], and [[#Removing-files|Removing files]].

    -k kflag

    Override the default processing of RCS keywords other than ‘-kb’. See section [[#Keyword-substitution|Keyword substitution]], for the meaning of kflag. Used with the checkout and update commands, your kflag specification is sticky; that is, when you use this option with a checkout or update command, CVS associates your selected kflag with any files it operates on, and continues to use that kflag with future commands on the same files until you specify otherwise.

    The ‘-k’ option is available with the add, checkout, diff, export, import and update commands.

    WARNING: Prior to CVS version 1.12.2, the ‘-k’ flag overrode the ‘-kb’ indication for a binary file. This could sometimes corrupt binary files. See section [[#Merging-and-keywords|Merging and keywords]], for more.

    -l

    Local; run only in current working directory, rather than recursing through subdirectories.

    Available with the following commands: annotate, checkout, commit, diff, edit, editors, export, log, rdiff, remove, rtag, status, tag, unedit, update, watch, and watchers.

    -m message

    Use message as log information, instead of invoking an editor.

    Available with the following commands: add, commit and import.

    -n

    Do not run any tag program. (A program can be specified to run in the modules database (see section [[#modules|The modules file]]); this option bypasses it).

    Note: this is not the same as the ‘cvs -n’ program option, which you can specify to the left of a cvs command!

    Available with the checkout, commit, export, and rtag commands.

    -P

    Prune empty directories. See [[#Removing-directories|Removing directories]].

    -p

    Pipe the files retrieved from the repository to standard output, rather than writing them in the current directory. Available with the checkout and update commands.

    -R

    Process directories recursively. This is on by default.

    Available with the following commands: annotate, checkout, commit, diff, edit, editors, export, rdiff, remove, rtag, status, tag, unedit, update, watch, and watchers.

    -r tag

    Use the revision specified by the tag argument instead of the default head revision. As well as arbitrary tags defined with the tag or rtag command, two special tags are always available: ‘HEAD’ refers to the most recent version available in the repository, and ‘BASE’ refers to the revision you last checked out into the current working directory.

    The tag specification is sticky when you use this with checkout or update to make your own copy of a file: CVS remembers the tag and continues to use it on future update commands, until you specify otherwise (for more information on sticky tags/dates, see section [[#Sticky-tags|Sticky tags]]).

    The tag can be either a symbolic or numeric tag, as described in [[#Tags|Tags–Symbolic revisions]], or the name of a branch, as described in [[#Branching-and-merging|Branching and merging]].

    Specifying the ‘-q’ global option along with the ‘-r’ command option is often useful, to suppress the warning messages when the RCS file does not contain the specified tag.

    Note: this is not the same as the overall ‘cvs -r’ option, which you can specify to the left of a CVS command!

    -r’ is available with the checkout, commit, diff, history, export, rdiff, rtag, and update commands.

    -W

    Specify file names that should be filtered. You can use this option repeatedly. The spec can be a file name pattern of the same type that you can specify in the ‘.cvswrappers’ file. Available with the following commands: import, and update.


    |[[#Common-options| < ]]| |[[#admin-options| > ]]|   |[[#CVS-commands| << ]]| |[[#CVS-commands| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === admin—Administration ===
    • Requires: repository, working directory.
    • Changes: repository.
    • Synonym: rcs

    This is the CVS interface to assorted administrative facilities. Some of them have questionable usefulness for CVS but exist for historical purposes. Some of the questionable options are likely to disappear in the future. This command does work recursively, so extreme care should be used.

    On unix, if there is a group named cvsadmin, only members of that group can run cvs admin commands, except for those specified using the UserAdminOptions configuration option in the ‘CVSROOT/config’ file. Options specified using UserAdminOptions can be run by any user. See [[#config|The CVSROOT/config configuration file]] for more on UserAdminOptions.

    The cvsadmin group should exist on the server, or any system running the non-client/server CVS. To disallow cvs admin for all users, create a group with no users in it. On NT, the cvsadmin feature does not exist and all users can run cvs admin.


    |[[#admin| < ]]| |[[#checkout| > ]]|   |[[#CVS-commands| << ]]| |[[#admin| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== admin options ====

    Some of these options have questionable usefulness for CVS but exist for historical purposes. Some even make it impossible to use CVS until you undo the effect!

    -Aoldfile

    Might not work together with CVS. Append the access list of oldfile to the access list of the RCS file.

    -alogins

    Might not work together with CVS. Append the login names appearing in the comma-separated list logins to the access list of the RCS file.

    -b[rev]

    Set the default branch to rev. In CVS, you normally do not manipulate default branches; sticky tags (see section [[#Sticky-tags|Sticky tags]]) are a better way to decide which branch you want to work on. There is one reason to run cvs admin -b: to revert to the vendor’s version when using vendor branches (see section [[#Reverting-local-changes|Reverting to the latest vendor release]]). There can be no space between ‘-b’ and its argument.

    -cstring

    Sets the comment leader to string. The comment leader is not used by current versions of CVS or RCS 5.7. Therefore, you can almost surely not worry about it. See section [[#Keyword-substitution|Keyword substitution]].

    -e[logins]

    Might not work together with CVS. Erase the login names appearing in the comma-separated list logins from the access list of the RCS file. If logins is omitted, erase the entire access list. There can be no space between ‘-e’ and its argument.

    -I

    Run interactively, even if the standard input is not a terminal. This option does not work with the client/server CVS and is likely to disappear in a future release of CVS.

    -i

    Useless with CVS. This creates and initializes a new RCS file, without depositing a revision. With CVS, add files with the cvs add command (see section [[#Adding-files|Adding files to a directory]]).

    -ksubst

    Set the default keyword substitution to subst. See section [[#Keyword-substitution|Keyword substitution]]. Giving an explicit ‘-k’ option to cvs update, cvs export, or cvs checkout overrides this default.

    -l[rev]

    Lock the revision with number rev. If a branch is given, lock the latest revision on that branch. If rev is omitted, lock the latest revision on the default branch. There can be no space between ‘-l’ and its argument.

    This can be used in conjunction with the ‘rcslock.pl’ script in the ‘contrib’ directory of the CVS source distribution to provide reserved checkouts (where only one user can be editing a given file at a time). See the comments in that file for details (and see the ‘README’ file in that directory for disclaimers about the unsupported nature of contrib). According to comments in that file, locking must set to strict (which is the default).

    -L

    Set locking to strict. Strict locking means that the owner of an RCS file is not exempt from locking for checkin. For use with CVS, strict locking must be set; see the discussion under the ‘-l’ option above.

    -mrev:msg

    Replace the log message of revision rev with msg.

    -Nname[:[rev]]

    Act like ‘-n’, except override any previous assignment of name. For use with magic branches, see [[#Magic-branch-numbers|Magic branch numbers]].

    -nname[:[rev]]

    Associate the symbolic name name with the branch or revision rev. It is normally better to use ‘cvs tag’ or ‘cvs rtag’ instead. Delete the symbolic name if both ‘:’ and rev are omitted; otherwise, print an error message if name is already associated with another number. If rev is symbolic, it is expanded before association. A rev consisting of a branch number followed by a ‘.’ stands for the current latest revision in the branch. A ‘:’ with an empty rev stands for the current latest revision on the default branch, normally the trunk. For example, ‘cvs admin -nname:’ associates name with the current latest revision of all the RCS files; this contrasts with ‘cvs admin -nname:$’ which associates name with the revision numbers extracted from keyword strings in the corresponding working files.

    -orange

    Deletes (outdates) the revisions given by range.

    Note that this command can be quite dangerous unless you know exactly what you are doing (for example see the warnings below about how the rev1:rev2 syntax is confusing).

    If you are short on disc this option might help you. But think twice before using it—there is no way short of restoring the latest backup to undo this command! If you delete different revisions than you planned, either due to carelessness or (heaven forbid) a CVS bug, there is no opportunity to correct the error before the revisions are deleted. It probably would be a good idea to experiment on a copy of the repository first.

    Specify range in one of the following ways:

    rev1::rev2

    Collapse all revisions between rev1 and rev2, so that CVS only stores the differences associated with going from rev1 to rev2, not intermediate steps. For example, after ‘-o 1.3::1.5’ one can retrieve revision 1.3, revision 1.5, or the differences to get from 1.3 to 1.5, but not the revision 1.4, or the differences between 1.3 and 1.4. Other examples: ‘-o 1.3::1.4’ and ‘-o 1.3::1.3’ have no effect, because there are no intermediate revisions to remove.

    ::rev

    Collapse revisions between the beginning of the branch containing rev and rev itself. The branchpoint and rev are left intact. For example, ‘-o ::1.3.2.6’ deletes revision 1.3.2.1, revision 1.3.2.5, and everything in between, but leaves 1.3 and 1.3.2.6 intact.

    rev::

    Collapse revisions between rev and the end of the branch containing rev. Revision rev is left intact but the head revision is deleted.

    rev

    Delete the revision rev. For example, ‘-o 1.3’ is equivalent to ‘-o 1.2::1.4’.

    rev1:rev2

    Delete the revisions from rev1 to rev2, inclusive, on the same branch. One will not be able to retrieve rev1 or rev2 or any of the revisions in between. For example, the command ‘cvs admin -oR_1_01:R_1_02 .’ is rarely useful. It means to delete revisions up to, and including, the tag R_1_02. But beware! If there are files that have not changed between R_1_02 and R_1_03 the file will have the same numerical revision number assigned to the tags R_1_02 and R_1_03. So not only will it be impossible to retrieve R_1_02; R_1_03 will also have to be restored from the tapes! In most cases you want to specify rev1::rev2 instead.

    :rev

    Delete revisions from the beginning of the branch containing rev up to and including rev.

    rev:

    Delete revisions from revision rev, including rev itself, to the end of the branch containing rev.

    None of the revisions to be deleted may have branches or locks.

    If any of the revisions to be deleted have symbolic names, and one specifies one of the ‘::’ syntaxes, then CVS will give an error and not delete any revisions. If you really want to delete both the symbolic names and the revisions, first delete the symbolic names with cvs tag -d, then run cvs admin -o. If one specifies the non-‘::’ syntaxes, then CVS will delete the revisions but leave the symbolic names pointing to nonexistent revisions. This behavior is preserved for compatibility with previous versions of CVS, but because it isn’t very useful, in the future it may change to be like the ‘::’ case.

    Due to the way CVS handles branches rev cannot be specified symbolically if it is a branch. See section [[#Magic-branch-numbers|Magic branch numbers]], for an explanation.

    Make sure that no-one has checked out a copy of the revision you outdate. Strange things will happen if he starts to edit it and tries to check it back in. For this reason, this option is not a good way to take back a bogus commit; commit a new revision undoing the bogus change instead (see section [[#Merging-two-revisions|Merging differences between any two revisions]]).

    -q

    Run quietly; do not print diagnostics.

    -sstate[:rev]

    Useful with CVS. Set the state attribute of the revision rev to state. If rev is a branch number, assume the latest revision on that branch. If rev is omitted, assume the latest revision on the default branch. Any identifier is acceptable for state. A useful set of states is ‘Exp’ (for experimental), ‘Stab’ (for stable), and ‘Rel’ (for released). By default, the state of a new revision is set to ‘Exp’ when it is created. The state is visible in the output from cvs log (see section [[#log|log—Print out log information for files]]), and in the ‘$Log$’ and ‘$State$’ keywords (see section [[#Keyword-substitution|Keyword substitution]]). Note that CVS uses the dead state for its own purposes; to take a file to or from the dead state use commands like cvs remove and cvs add, not cvs admin -s.

    -t[file]

    Useful with CVS. Write descriptive text from the contents of the named file into the RCS file, deleting the existing text. The file pathname may not begin with ‘-’. The descriptive text can be seen in the output from ‘cvs log’ (see section [[#log|log—Print out log information for files]]). There can be no space between ‘-t’ and its argument.

    If file is omitted, obtain the text from standard input, terminated by end-of-file or by a line containing ‘.’ by itself. Prompt for the text if interaction is possible; see ‘-I’.

    -t-string

    Similar to ‘-tfile’. Write descriptive text from the string into the RCS file, deleting the existing text. There can be no space between ‘-t’ and its argument.

    -U

    Set locking to non-strict. Non-strict locking means that the owner of a file need not lock a revision for checkin. For use with CVS, strict locking must be set; see the discussion under the ‘-l’ option above.

    -u[rev]

    See the option ‘-l’ above, for a discussion of using this option with CVS. Unlock the revision with number rev. If a branch is given, unlock the latest revision on that branch. If rev is omitted, remove the latest lock held by the caller. Normally, only the locker of a revision may unlock it; somebody else unlocking a revision breaks the lock. This causes the original locker to be sent a commit notification (see section [[#Getting-Notified|Telling CVS to notify you]]). There can be no space between ‘-u’ and its argument.

    -Vn

    In previous versions of CVS, this option meant to write an RCS file which would be acceptable to RCS version n, but it is now obsolete and specifying it will produce an error.

    -xsuffixes

    In previous versions of CVS, this was documented as a way of specifying the names of the RCS files. However, CVS has always required that the RCS files used by CVS end in ‘,v’, so this option has never done anything useful.


    |[[#admin-options| < ]]| |[[#checkout-options| > ]]|   |[[#CVS-commands| << ]]| |[[#CVS-commands| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === checkout—Check out sources for editing ===
    • Synopsis: checkout [options] modules…
    • Requires: repository.
    • Changes: working directory.
    • Synonyms: co, get

    Create or update a working directory containing copies of the source files specified by modules. You must execute checkout before using most of the other CVS commands, since most of them operate on your working directory.

    The modules are either symbolic names for some collection of source directories and files, or paths to directories or files in the repository. The symbolic names are defined in the ‘modules’ file. See section [[#modules|The modules file]].

    Depending on the modules you specify, checkout may recursively create directories and populate them with the appropriate source files. You can then edit these source files at any time (regardless of whether other software developers are editing their own copies of the sources); update them to include new changes applied by others to the source repository; or commit your work as a permanent change to the source repository.

    Note that checkout is used to create directories. The top-level directory created is always added to the directory where checkout is invoked, and usually has the same name as the specified module. In the case of a module alias, the created sub-directory may have a different name, but you can be sure that it will be a sub-directory, and that checkout will show the relative path leading to each file as it is extracted into your private work area (unless you specify the ‘-Q’ global option).

    The files created by checkout are created read-write, unless the ‘-r’ option to CVS (see section [[#Global-options|Global options]]) is specified, the CVSREAD environment variable is specified (see section [[#Environment-variables|All environment variables which affect CVS]]), or a watch is in effect for that file (see section [[#Watches|Mechanisms to track who is editing files]]).

    Note that running checkout on a directory that was already built by a prior checkout is also permitted. This is similar to specifying the ‘-d’ option to the update command in the sense that new directories that have been created in the repository will appear in your work area. However, checkout takes a module name whereas update takes a directory name. Also to use checkout this way it must be run from the top level directory (where you originally ran checkout from), so before you run checkout to update an existing directory, don’t forget to change your directory to the top level directory.

    For the output produced by the checkout command see [[#update-output|update output]].


    |[[#checkout| < ]]| |[[#checkout-examples| > ]]|   |[[#CVS-commands| << ]]| |[[#checkout| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== checkout options ====

    These standard options are supported by checkout (see section [[#Common-options|Common command options]], for a complete description of them):

    -D date

    Use the most recent revision no later than date. This option is sticky, and implies ‘-P’. See [[#Sticky-tags|Sticky tags]], for more information on sticky tags/dates.

    -f

    Only useful with the ‘-D date’ or ‘-r tag’ flags. If no matching revision is found, retrieve the most recent revision (instead of ignoring the file).

    -k kflag

    Process keywords according to kflag. See [[#Keyword-substitution|Keyword substitution]]. This option is sticky; future updates of this file in this working directory will use the same kflag. The status command can be viewed to see the sticky options. See [[#Invoking-CVS|Quick reference to CVS commands]], for more information on the status command.

    -l

    Local; run only in current working directory.

    -n

    Do not run any checkout program (as specified with the ‘-o’ option in the modules file; see section [[#modules|The modules file]]).

    -P

    Prune empty directories. See [[#Moving-directories|Moving and renaming directories]].

    -p

    Pipe files to the standard output.

    -R

    Checkout directories recursively. This option is on by default.

    -r tag

    Use revision tag. This option is sticky, and implies ‘-P’. See [[#Sticky-tags|Sticky tags]], for more information on sticky tags/dates.

    In addition to those, you can use these special command options with checkout:

    -A

    Reset any sticky tags, dates, or ‘-k’ options. See [[#Sticky-tags|Sticky tags]], for more information on sticky tags/dates.

    -c

    Copy the module file, sorted, to the standard output, instead of creating or modifying any files or directories in your working directory.

    -d dir

    Create a directory called dir for the working files, instead of using the module name. In general, using this flag is equivalent to using ‘mkdir dir; cd dir’ followed by the checkout command without the ‘-d’ flag.

    There is an important exception, however. It is very convenient when checking out a single item to have the output appear in a directory that doesn’t contain empty intermediate directories. In this case only, CVS tries to “shorten” pathnames to avoid those empty directories.

    For example, given a module ‘foo’ that contains the file ‘bar.c’, the command ‘cvs co -d dir foo’ will create directory ‘dir’ and place ‘bar.c’ inside. Similarly, given a module ‘bar’ which has subdirectory ‘baz’ wherein there is a file ‘quux.c’, the command ‘cvs co -d dir bar/baz’ will create directory ‘dir’ and place ‘quux.c’ inside.

    Using the ‘-N’ flag will defeat this behavior. Given the same module definitions above, ‘cvs co -N -d dir foo’ will create directories ‘dir/foo’ and place ‘bar.c’ inside, while ‘cvs co -N -d dir bar/baz’ will create directories ‘dir/bar/baz’ and place ‘quux.c’ inside.

    -j tag

    With two ‘-j’ options, merge changes from the revision specified with the first ‘-j’ option to the revision specified with the second ‘j’ option, into the working directory.

    With one ‘-j’ option, merge changes from the ancestor revision to the revision specified with the ‘-j’ option, into the working directory. The ancestor revision is the common ancestor of the revision which the working directory is based on, and the revision specified in the ‘-j’ option.

    In addition, each -j option can contain an optional date specification which, when used with branches, can limit the chosen revision to one within a specific date. An optional date is specified by adding a colon (:) to the tag: ‘-jSymbolic_Tag:Date_Specifier’.

    See section [[#Branching-and-merging|Branching and merging]].

    -N

    Only useful together with ‘-d dir’. With this option, CVS will not “shorten” module paths in your working directory when you check out a single module. See the ‘-d’ flag for examples and a discussion.

    -s

    Like ‘-c’, but include the status of all modules, and sort it by the status string. See section [[#modules|The modules file]], for info about the ‘-s’ option that is used inside the modules file to set the module status.


    |[[#checkout-options| < ]]| |[[#commit| > ]]|   |[[#CVS-commands| << ]]| |[[#checkout| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== checkout examples ====

    Get a copy of the module ‘tc’:

     
    $ cvs checkout tc
    

    Get a copy of the module ‘tc’ as it looked one day ago:

     
    $ cvs checkout -D yesterday tc
    

    |[[#checkout-examples| < ]]| |[[#commit-options| > ]]|   |[[#CVS-commands| << ]]| |[[#CVS-commands| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === commit—Check files into the repository ===
    • Synopsis: commit [-lnRf] [-m ’log_message’ | -F file] [-r revision] [files…]
    • Requires: working directory, repository.
    • Changes: repository.
    • Synonym: ci

    Use commit when you want to incorporate changes from your working source files into the source repository.

    If you don’t specify particular files to commit, all of the files in your working current directory are examined. commit is careful to change in the repository only those files that you have really changed. By default (or if you explicitly specify the ‘-R’ option), files in subdirectories are also examined and committed if they have changed; you can use the ‘-l’ option to limit commit to the current directory only.

    commit verifies that the selected files are up to date with the current revisions in the source repository; it will notify you, and exit without committing, if any of the specified files must be made current first with update (see section [[#update|update—Bring work tree in sync with repository]]). commit does not call the update command for you, but rather leaves that for you to do when the time is right.

    When all is well, an editor is invoked to allow you to enter a log message that will be written to one or more logging programs (see section [[#modules|The modules file]], and see section [[#loginfo|Loginfo]]) and placed in the RCS file inside the repository. This log message can be retrieved with the log command; see [[#log|log—Print out log information for files]]. You can specify the log message on the command line with the ‘-m message’ option, and thus avoid the editor invocation, or use the ‘-F file’ option to specify that the argument file contains the log message.


    |[[#commit| < ]]| |[[#commit-examples| > ]]|   |[[#CVS-commands| << ]]| |[[#commit| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== commit options ====

    These standard options are supported by commit (see section [[#Common-options|Common command options]], for a complete description of them):

    -l

    Local; run only in current working directory.

    -R

    Commit directories recursively. This is on by default.

    -r revision

    Commit to revision. revision must be either a branch, or a revision on the main trunk that is higher than any existing revision number (see section [[#Assigning-revisions|Assigning revisions]]). You cannot commit to a specific revision on a branch.

    commit also supports these options:

    -F file

    Read the log message from file, instead of invoking an editor.

    -f

    Note that this is not the standard behavior of the ‘-f’ option as defined in [[#Common-options|Common command options]].

    Force CVS to commit a new revision even if you haven’t made any changes to the file. If the current revision of file is 1.7, then the following two commands are equivalent:

     
    $ cvs commit -f file
    $ cvs commit -r 1.8 file
    

    The ‘-f’ option disables recursion (i.e., it implies ‘-l’). To force CVS to commit a new revision for all files in all subdirectories, you must use ‘-f -R’.

    -m message

    Use message as the log message, instead of invoking an editor.


    |[[#commit-options| < ]]| |[[#Committing-to-a-branch| > ]]|   |[[#CVS-commands| << ]]| |[[#commit| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== commit examples ====
    |[[#commit-examples| < ]]| |[[#Creating-the-branch-after-editing| > ]]|   |[[#CVS-commands| << ]]| |[[#commit-examples| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ===== Committing to a branch =====

    You can commit to a branch revision (one that has an even number of dots) with the ‘-r’ option. To create a branch revision, use the ‘-b’ option of the rtag or tag commands (see section [[#Branching-and-merging|Branching and merging]]). Then, either checkout or update can be used to base your sources on the newly created branch. From that point on, all commit changes made within these working sources will be automatically added to a branch revision, thereby not disturbing main-line development in any way. For example, if you had to create a patch to the 1.2 version of the product, even though the 2.0 version is already under development, you might do:

     
    $ cvs rtag -b -r FCS1_2 FCS1_2_Patch product_module
    $ cvs checkout -r FCS1_2_Patch product_module
    $ cd product_module
    [[ hack away ]]
    $ cvs commit
    

    This works automatically since the ‘-r’ option is sticky.


    |[[#Committing-to-a-branch| < ]]| |[[#diff| > ]]|   |[[#CVS-commands| << ]]| |[[#commit-examples| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ===== Creating the branch after editing =====

    Say you have been working on some extremely experimental software, based on whatever revision you happened to checkout last week. If others in your group would like to work on this software with you, but without disturbing main-line development, you could commit your change to a new branch. Others can then checkout your experimental stuff and utilize the full benefit of CVS conflict resolution. The scenario might look like:

     
    [[ hacked sources are present ]]
    $ cvs tag -b EXPR1
    $ cvs update -r EXPR1
    $ cvs commit
    

    The update command will make the ‘-r EXPR1’ option sticky on all files. Note that your changes to the files will never be removed by the update command. The commit will automatically commit to the correct branch, because the ‘-r’ is sticky. You could also do like this:

     
    [[ hacked sources are present ]]
    $ cvs tag -b EXPR1
    $ cvs commit -r EXPR1
    

    but then, only those files that were changed by you will have the ‘-r EXPR1’ sticky flag. If you hack away, and commit without specifying the ‘-r EXPR1’ flag, some files may accidentally end up on the main trunk.

    To work with you on the experimental change, others would simply do

     
    $ cvs checkout -r EXPR1 whatever_module
    

    |[[#Creating-the-branch-after-editing| < ]]| |[[#diff-options| > ]]|   |[[#CVS-commands| << ]]| |[[#CVS-commands| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === diff—Show differences between revisions ===
    • Synopsis: diff [-lR] [-k kflag] [format_options] [[-r rev1 | -D date1] [-r rev2 | -D date2]] [files…]
    • Requires: working directory, repository.
    • Changes: nothing.

    The diff command is used to compare different revisions of files. The default action is to compare your working files with the revisions they were based on, and report any differences that are found.

    If any file names are given, only those files are compared. If any directories are given, all files under them will be compared.

    The exit status for diff is different than for other CVS commands; for details [[#Exit-status|CVS’s exit status]].


    |[[#diff| < ]]| |[[#Line-group-formats| > ]]|   |[[#CVS-commands| << ]]| |[[#diff| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== diff options ====

    These standard options are supported by diff (see section [[#Common-options|Common command options]], for a complete description of them):

    -D date

    Use the most recent revision no later than date. See ‘-r’ for how this affects the comparison.

    -k kflag

    Process keywords according to kflag. See [[#Keyword-substitution|Keyword substitution]].

    -l

    Local; run only in current working directory.

    -R

    Examine directories recursively. This option is on by default.

    -r tag

    Compare with revision tag. Zero, one or two ‘-r’ options can be present. With no ‘-r’ option, the working file will be compared with the revision it was based on. With one ‘-r’, that revision will be compared to your current working file. With two ‘-r’ options those two revisions will be compared (and your working file will not affect the outcome in any way).

    One or both ‘-r’ options can be replaced by a ‘-D date’ option, described above.

    The following options specify the format of the output. They have the same meaning as in GNU diff. Most options have two equivalent names, one of which is a single letter preceded by ‘-’, and the other of which is a long name preceded by ‘--’.

    -lines

    Show lines (an integer) lines of context. This option does not specify an output format by itself; it has no effect unless it is combined with ‘-c’ or ‘-u’. This option is obsolete. For proper operation, patch typically needs at least two lines of context.

    -a

    Treat all files as text and compare them line-by-line, even if they do not seem to be text.

    -b

    Ignore trailing white space and consider all other sequences of one or more white space characters to be equivalent.

    -B

    Ignore changes that just insert or delete blank lines.

    --binary

    Read and write data in binary mode.

    --brief

    Report only whether the files differ, not the details of the differences.

    -c

    Use the context output format.

    -C lines
    --context[=lines]

    Use the context output format, showing lines (an integer) lines of context, or three if lines is not given. For proper operation, patch typically needs at least two lines of context.

    --changed-group-format=format

    Use format to output a line group containing differing lines from both files in if-then-else format. See section [[#Line-group-formats|Line group formats]].

    -d

    Change the algorithm to perhaps find a smaller set of changes. This makes diff slower (sometimes much slower).

    -e
    --ed

    Make output that is a valid ed script.

    --expand-tabs

    Expand tabs to spaces in the output, to preserve the alignment of tabs in the input files.

    -f

    Make output that looks vaguely like an ed script but has changes in the order they appear in the file.

    -F regexp

    In context and unified format, for each hunk of differences, show some of the last preceding line that matches regexp.

    --forward-ed

    Make output that looks vaguely like an ed script but has changes in the order they appear in the file.

    -H

    Use heuristics to speed handling of large files that have numerous scattered small changes.

    --horizon-lines=lines

    Do not discard the last lines lines of the common prefix and the first lines lines of the common suffix.

    -i

    Ignore changes in case; consider upper- and lower-case letters equivalent.

    -I regexp

    Ignore changes that just insert or delete lines that match regexp.

    --ifdef=name

    Make merged if-then-else output using name.

    --ignore-all-space

    Ignore white space when comparing lines.

    --ignore-blank-lines

    Ignore changes that just insert or delete blank lines.

    --ignore-case

    Ignore changes in case; consider upper- and lower-case to be the same.

    --ignore-matching-lines=regexp

    Ignore changes that just insert or delete lines that match regexp.

    --ignore-space-change

    Ignore trailing white space and consider all other sequences of one or more white space characters to be equivalent.

    --initial-tab

    Output a tab rather than a space before the text of a line in normal or context format. This causes the alignment of tabs in the line to look normal.

    -L label

    Use label instead of the file name in the context format and unified format headers.

    --label=label

    Use label instead of the file name in the context format and unified format headers.

    --left-column

    Print only the left column of two common lines in side by side format.

    --line-format=format

    Use format to output all input lines in if-then-else format. See section [[#Line-formats|Line formats]].

    --minimal

    Change the algorithm to perhaps find a smaller set of changes. This makes diff slower (sometimes much slower).

    -n

    Output RCS-format diffs; like ‘-f’ except that each command specifies the number of lines affected.

    -N
    --new-file

    In directory comparison, if a file is found in only one directory, treat it as present but empty in the other directory.

    --new-group-format=format

    Use format to output a group of lines taken from just the second file in if-then-else format. See section [[#Line-group-formats|Line group formats]].

    --new-line-format=format

    Use format to output a line taken from just the second file in if-then-else format. See section [[#Line-formats|Line formats]].

    --old-group-format=format

    Use format to output a group of lines taken from just the first file in if-then-else format. See section [[#Line-group-formats|Line group formats]].

    --old-line-format=format

    Use format to output a line taken from just the first file in if-then-else format. See section [[#Line-formats|Line formats]].

    -p

    Show which C function each change is in.

    --rcs

    Output RCS-format diffs; like ‘-f’ except that each command specifies the number of lines affected.

    --report-identical-files
    -s

    Report when two files are the same.

    --show-c-function

    Show which C function each change is in.

    --show-function-line=regexp

    In context and unified format, for each hunk of differences, show some of the last preceding line that matches regexp.

    --side-by-side

    Use the side by side output format.

    --speed-large-files

    Use heuristics to speed handling of large files that have numerous scattered small changes.

    --suppress-common-lines

    Do not print common lines in side by side format.

    -t

    Expand tabs to spaces in the output, to preserve the alignment of tabs in the input files.

    -T

    Output a tab rather than a space before the text of a line in normal or context format. This causes the alignment of tabs in the line to look normal.

    --text

    Treat all files as text and compare them line-by-line, even if they do not appear to be text.

    -u

    Use the unified output format.

    --unchanged-group-format=format

    Use format to output a group of common lines taken from both files in if-then-else format. See section [[#Line-group-formats|Line group formats]].

    --unchanged-line-format=format

    Use format to output a line common to both files in if-then-else format. See section [[#Line-formats|Line formats]].

    -U lines
    --unified[=lines]

    Use the unified output format, showing lines (an integer) lines of context, or three if lines is not given. For proper operation, patch typically needs at least two lines of context.

    -w

    Ignore white space when comparing lines.

    -W columns
    --width=columns

    Use an output width of columns in side by side format.

    -y

    Use the side by side output format.


    |[[#diff-options| < ]]| |[[#Line-formats| > ]]|   |[[#CVS-commands| << ]]| |[[#diff-options| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ===== Line group formats =====

    Line group formats let you specify formats suitable for many applications that allow if-then-else input, including programming languages and text formatting languages. A line group format specifies the output format for a contiguous group of similar lines.

    For example, the following command compares the TeX file ‘myfile’ with the original version from the repository, and outputs a merged file in which old regions are surrounded by ‘\begin{em}’-‘\end{em}’ lines, and new regions are surrounded by ‘\begin{bf}’-‘\end{bf}’ lines.

     
    cvs diff \
       --old-group-format='\begin{em}
    %<\end{em}
    ' \
       --new-group-format='\begin{bf}
    %>\end{bf}
    ' \
       myfile
    

    The following command is equivalent to the above example, but it is a little more verbose, because it spells out the default line group formats.

     
    cvs diff \
       --old-group-format='\begin{em}
    %<\end{em}
    ' \
       --new-group-format='\begin{bf}
    %>\end{bf}
    ' \
       --unchanged-group-format='%=' \
       --changed-group-format='\begin{em}
    %<\end{em}
    \begin{bf}
    %>\end{bf}
    ' \
       myfile
    

    Here is a more advanced example, which outputs a diff listing with headers containing line numbers in a “plain English” style.

     
    cvs diff \
       --unchanged-group-format='' \
       --old-group-format='-------- %dn line%(n=1?:s) deleted at %df:
    %<' \
       --new-group-format='-------- %dN line%(N=1?:s) added after %de:
    %>' \
       --changed-group-format='-------- %dn line%(n=1?:s) changed at %df:
    %<-------- to:
    %>' \
       myfile
    

    To specify a line group format, use one of the options listed below. You can specify up to four line group formats, one for each kind of line group. You should quote format, because it typically contains shell metacharacters.

    --old-group-format=format

    These line groups are hunks containing only lines from the first file. The default old group format is the same as the changed group format if it is specified; otherwise it is a format that outputs the line group as-is.

    --new-group-format=format

    These line groups are hunks containing only lines from the second file. The default new group format is same as the changed group format if it is specified; otherwise it is a format that outputs the line group as-is.

    --changed-group-format=format

    These line groups are hunks containing lines from both files. The default changed group format is the concatenation of the old and new group formats.

    --unchanged-group-format=format

    These line groups contain lines common to both files. The default unchanged group format is a format that outputs the line group as-is.

    In a line group format, ordinary characters represent themselves; conversion specifications start with ‘%’ and have one of the following forms.

    %<

    stands for the lines from the first file, including the trailing newline. Each line is formatted according to the old line format (see section [[#Line-formats|Line formats]]).

    %>

    stands for the lines from the second file, including the trailing newline. Each line is formatted according to the new line format.

    %=

    stands for the lines common to both files, including the trailing newline. Each line is formatted according to the unchanged line format.

    %%

    stands for ‘%’.

    %c'C'

    where C is a single character, stands for C. C may not be a backslash or an apostrophe. For example, ‘%c':'’ stands for a colon, even inside the then-part of an if-then-else format, which a colon would normally terminate.

    %c'\O'

    where O is a string of 1, 2, or 3 octal digits, stands for the character with octal code O. For example, ‘%c'\0'’ stands for a null character.

    Fn

    where F is a printf conversion specification and n is one of the following letters, stands for n’s value formatted with F.

    e

    The line number of the line just before the group in the old file.

    f

    The line number of the first line in the group in the old file; equals e + 1.

    l

    The line number of the last line in the group in the old file.

    m

    The line number of the line just after the group in the old file; equals l + 1.

    n

    The number of lines in the group in the old file; equals l - f + 1.

    E, F, L, M, N

    Likewise, for lines in the new file.

    The printf conversion specification can be ‘%d’, ‘%o’, ‘%x’, or ‘%X’, specifying decimal, octal, lower case hexadecimal, or upper case hexadecimal output respectively. After the ‘%’ the following options can appear in sequence: a ‘-’ specifying left-justification; an integer specifying the minimum field width; and a period followed by an optional integer specifying the minimum number of digits. For example, ‘%5dN’ prints the number of new lines in the group in a field of width 5 characters, using the printf format "%5d".

    (A=B?T:E)

    If A equals B then T else E. A and B are each either a decimal constant or a single letter interpreted as above. This format spec is equivalent to T if A’s value equals B’s; otherwise it is equivalent to E.

    For example, ‘%(N=0?no:%dN) line%(N=1?:s)’ is equivalent to ‘no lines’ if N (the number of lines in the group in the new file) is 0, to ‘1 line’ if N is 1, and to ‘%dN lines’ otherwise.


    |[[#Line-group-formats| < ]]| |[[#diff-examples| > ]]|   |[[#CVS-commands| << ]]| |[[#diff-options| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ===== Line formats =====

    Line formats control how each line taken from an input file is output as part of a line group in if-then-else format.

    For example, the following command outputs text with a one-column change indicator to the left of the text. The first column of output is ‘-’ for deleted lines, ‘|’ for added lines, and a space for unchanged lines. The formats contain newline characters where newlines are desired on output.

     
    cvs diff \
       --old-line-format='-%l
    ' \
       --new-line-format='|%l
    ' \
       --unchanged-line-format=' %l
    ' \
       myfile
    

    To specify a line format, use one of the following options. You should quote format, since it often contains shell metacharacters.

    --old-line-format=format

    formats lines just from the first file.

    --new-line-format=format

    formats lines just from the second file.

    --unchanged-line-format=format

    formats lines common to both files.

    --line-format=format

    formats all lines; in effect, it sets all three above options simultaneously.

    In a line format, ordinary characters represent themselves; conversion specifications start with ‘%’ and have one of the following forms.

    %l

    stands for the contents of the line, not counting its trailing newline (if any). This format ignores whether the line is incomplete.

    %L

    stands for the contents of the line, including its trailing newline (if any). If a line is incomplete, this format preserves its incompleteness.

    %%

    stands for ‘%’.

    %c'C'

    where C is a single character, stands for C. C may not be a backslash or an apostrophe. For example, ‘%c':'’ stands for a colon.

    %c'\O'

    where O is a string of 1, 2, or 3 octal digits, stands for the character with octal code O. For example, ‘%c'\0'’ stands for a null character.

    Fn

    where F is a printf conversion specification, stands for the line number formatted with F. For example, ‘%.5dn’ prints the line number using the printf format "%.5d". See section [[#Line-group-formats|Line group formats]], for more about printf conversion specifications.

    The default line format is ‘%l’ followed by a newline character.

    If the input contains tab characters and it is important that they line up on output, you should ensure that ‘%l’ or ‘%L’ in a line format is just after a tab stop (e.g. by preceding ‘%l’ or ‘%L’ with a tab character), or you should use the ‘-t’ or ‘--expand-tabs’ option.

    Taken together, the line and line group formats let you specify many different formats. For example, the following command uses a format similar to diff’s normal format. You can tailor this command to get fine control over diff’s output.

     
    cvs diff \
       --old-line-format='< %l
    ' \
       --new-line-format='> %l
    ' \
       --old-group-format='%df%(f=l?:,%dl)d%dE
    %<' \
       --new-group-format='%dea%dF%(F=L?:,%dL)
    %>' \
       --changed-group-format='%df%(f=l?:,%dl)c%dF%(F=L?:,%dL)
    %<---
    %>' \
       --unchanged-group-format='' \
       myfile
    

    |[[#Line-formats| < ]]| |[[#export| > ]]|   |[[#CVS-commands| << ]]| |[[#diff| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== diff examples ====

    The following line produces a Unidiff (‘-u’ flag) between revision 1.14 and 1.19 of ‘backend.c’. Due to the ‘-kk’ flag no keywords are substituted, so differences that only depend on keyword substitution are ignored.

     
    $ cvs diff -kk -u -r 1.14 -r 1.19 backend.c
    

    Suppose the experimental branch EXPR1 was based on a set of files tagged RELEASE_1_0. To see what has happened on that branch, the following can be used:

     
    $ cvs diff -r RELEASE_1_0 -r EXPR1
    

    A command like this can be used to produce a context diff between two releases:

     
    $ cvs diff -c -r RELEASE_1_0 -r RELEASE_1_1 > diffs
    

    If you are maintaining ChangeLogs, a command like the following just before you commit your changes may help you write the ChangeLog entry. All local modifications that have not yet been committed will be printed.

     
    $ cvs diff -u | less
    

    |[[#diff-examples| < ]]| |[[#export-options| > ]]|   |[[#CVS-commands| << ]]| |[[#CVS-commands| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === export—Export sources from CVS, similar to checkout ===
    • Synopsis: export [-flNnR] [-r rev|-D date] [-k subst] [-d dir] module…
    • Requires: repository.
    • Changes: current directory.

    This command is a variant of checkout; use it when you want a copy of the source for module without the CVS administrative directories. For example, you might use export to prepare source for shipment off-site. This command requires that you specify a date or tag (with ‘-D’ or ‘-r’), so that you can count on reproducing the source you ship to others (and thus it always prunes empty directories).

    One often would like to use ‘-kv’ with cvs export. This causes any keywords to be expanded such that an import done at some other site will not lose the keyword revision information. But be aware that doesn’t handle an export containing binary files correctly. Also be aware that after having used ‘-kv’, one can no longer use the ident command (which is part of the RCS suite—see ident(1)) which looks for keyword strings. If you want to be able to use ident you must not use ‘-kv’.


    |[[#export| < ]]| |[[#history| > ]]|   |[[#CVS-commands| << ]]| |[[#export| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== export options ====

    These standard options are supported by export (see section [[#Common-options|Common command options]], for a complete description of them):

    -D date

    Use the most recent revision no later than date.

    -f

    If no matching revision is found, retrieve the most recent revision (instead of ignoring the file).

    -l

    Local; run only in current working directory.

    -n

    Do not run any checkout program.

    -R

    Export directories recursively. This is on by default.

    -r tag

    Use revision tag.

    In addition, these options (that are common to checkout and export) are also supported:

    -d dir

    Create a directory called dir for the working files, instead of using the module name. See section [[#checkout-options|checkout options]], for complete details on how CVS handles this flag.

    -k subst

    Set keyword expansion mode (see section [[#Substitution-modes|Substitution modes]]).

    -N

    Only useful together with ‘-d dir’. See section [[#checkout-options|checkout options]], for complete details on how CVS handles this flag.


    |[[#export-options| < ]]| |[[#history-options| > ]]|   |[[#CVS-commands| << ]]| |[[#CVS-commands| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === history—Show status of files and users ===
    • Synopsis: history [-report] [-flags] [-options args] [files…]
    • Requires: the file ‘$CVSROOT/CVSROOT/history
    • Changes: nothing.

    CVS can keep a history file that tracks each use of the checkout, commit, rtag, update, and release commands. You can use history to display this information in various formats.

    Logging must be enabled by creating the file ‘$CVSROOT/CVSROOT/history’.

    Note: history uses ‘-f’, ‘-l’, ‘-n’, and ‘-p’ in ways that conflict with the normal use inside CVS (see section [[#Common-options|Common command options]]).


    |[[#history| < ]]| |[[#import| > ]]|   |[[#CVS-commands| << ]]| |[[#history| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== history options ====

    Several options (shown above as ‘-report’) control what kind of report is generated:

    -c

    Report on each time commit was used (i.e., each time the repository was modified).

    -e

    Everything (all record types). Equivalent to specifying ‘-x’ with all record types. Of course, ‘-e’ will also include record types which are added in a future version of CVS; if you are writing a script which can only handle certain record types, you’ll want to specify ‘-x’.

    -m module

    Report on a particular module. (You can meaningfully use ‘-m’ more than once on the command line.)

    -o

    Report on checked-out modules. This is the default report type.

    -T

    Report on all tags.

    -x type

    Extract a particular set of record types type from the CVS history. The types are indicated by single letters, which you may specify in combination.

    Certain commands have a single record type:

    F

    release

    O

    checkout

    E

    export

    T

    rtag

    One of four record types may result from an update:

    C

    A merge was necessary but collisions were detected (requiring manual merging).

    G

    A merge was necessary and it succeeded.

    U

    A working file was copied from the repository.

    W

    The working copy of a file was deleted during update (because it was gone from the repository).

    One of three record types results from commit:

    A

    A file was added for the first time.

    M

    A file was modified.

    R

    A file was removed.

    The options shown as ‘-flags’ constrain or expand the report without requiring option arguments:

    -a

    Show data for all users (the default is to show data only for the user executing history).

    -l

    Show last modification only.

    -w

    Show only the records for modifications done from the same working directory where history is executing.

    The options shown as ‘-options args’ constrain the report based on an argument:

    -b str

    Show data back to a record containing the string str in either the module name, the file name, or the repository path.

    -D date

    Show data since date. This is slightly different from the normal use of ‘-D date’, which selects the newest revision older than date.

    -f file

    Show data for a particular file (you can specify several ‘-f’ options on the same command line). This is equivalent to specifying the file on the command line.

    -n module

    Show data for a particular module (you can specify several ‘-n’ options on the same command line).

    -p repository

    Show data for a particular source repository (you can specify several ‘-p’ options on the same command line).

    -r rev

    Show records referring to revisions since the revision or tag named rev appears in individual RCS files. Each RCS file is searched for the revision or tag.

    -t tag

    Show records since tag tag was last added to the history file. This differs from the ‘-r’ flag above in that it reads only the history file, not the RCS files, and is much faster.

    -u name

    Show records for user name.

    -z timezone

    Show times in the selected records using the specified time zone instead of UTC.


    |[[#history-options| < ]]| |[[#import-options| > ]]|   |[[#CVS-commands| << ]]| |[[#CVS-commands| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === import—Import sources into CVS, using vendor branches ===
    • Synopsis: import [-options] repository vendortag releasetag…
    • Requires: Repository, source distribution directory.
    • Changes: repository.

    Use import to incorporate an entire source distribution from an outside source (e.g., a source vendor) into your source repository directory. You can use this command both for initial creation of a repository, and for wholesale updates to the module from the outside source. See section [[#Tracking-sources|Tracking third-party sources]], for a discussion on this subject.

    The repository argument gives a directory name (or a path to a directory) under the CVS root directory for repositories; if the directory did not exist, import creates it.

    When you use import for updates to source that has been modified in your source repository (since a prior import), it will notify you of any files that conflict in the two branches of development; use ‘checkout -j’ to reconcile the differences, as import instructs you to do.

    If CVS decides a file should be ignored (see section [[#cvsignore|Ignoring files via cvsignore]]), it does not import it and prints ‘I ’ followed by the filename (see section [[#import-output|import output]], for a complete description of the output).

    If the file ‘$CVSROOT/CVSROOT/cvswrappers’ exists, any file whose names match the specifications in that file will be treated as packages and the appropriate filtering will be performed on the file/directory before being imported. See section [[#Wrappers|The cvswrappers file]].

    The outside source is saved in a first-level branch, by default 1.1.1. Updates are leaves of this branch; for example, files from the first imported collection of source will be revision 1.1.1.1, then files from the first imported update will be revision 1.1.1.2, and so on.

    At least three arguments are required. repository is needed to identify the collection of source. vendortag is a tag for the entire branch (e.g., for 1.1.1). You must also specify at least one releasetag to identify the files at the leaves created each time you execute import.

    Note that import does not change the directory in which you invoke it. In particular, it does not set up that directory as a CVS working directory; if you want to work with the sources import them first and then check them out into a different directory (see section [[#Getting-the-source|Getting the source]]).


    |[[#import| < ]]| |[[#import-output| > ]]|   |[[#CVS-commands| << ]]| |[[#import| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== import options ====

    This standard option is supported by import (see section [[#Common-options|Common command options]], for a complete description):

    -m message

    Use message as log information, instead of invoking an editor.

    There are the following additional special options.

    -b branch

    See [[#Multiple-vendor-branches|Multiple vendor branches]].

    -k subst

    Indicate the keyword expansion mode desired. This setting will apply to all files created during the import, but not to any files that previously existed in the repository. See [[#Substitution-modes|Substitution modes]], for a list of valid ‘-k’ settings.

    -I name

    Specify file names that should be ignored during import. You can use this option repeatedly. To avoid ignoring any files at all (even those ignored by default), specify ‘-I !’.

    name can be a file name pattern of the same type that you can specify in the ‘.cvsignore’ file. See section [[#cvsignore|Ignoring files via cvsignore]].

    -W spec

    Specify file names that should be filtered during import. You can use this option repeatedly.

    spec can be a file name pattern of the same type that you can specify in the ‘.cvswrappers’ file. See section [[#Wrappers|The cvswrappers file]].


    |[[#import-options| < ]]| |[[#import-examples| > ]]|   |[[#CVS-commands| << ]]| |[[#import| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== import output ====

    import keeps you informed of its progress by printing a line for each file, preceded by one character indicating the status of the file:

    U file

    The file already exists in the repository and has not been locally modified; a new revision has been created (if necessary).

    N file

    The file is a new file which has been added to the repository.

    C file

    The file already exists in the repository but has been locally modified; you will have to merge the changes.

    I file

    The file is being ignored (see section [[#cvsignore|Ignoring files via cvsignore]]).

    L file

    The file is a symbolic link; cvs import ignores symbolic links. People periodically suggest that this behavior should be changed, but if there is a consensus on what it should be changed to, it is not apparent. (Various options in the ‘modules’ file can be used to recreate symbolic links on checkout, update, etc.; see section [[#modules|The modules file]].)


    |[[#import-output| < ]]| |[[#log| > ]]|   |[[#CVS-commands| << ]]| |[[#import| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== import examples ====

    See [[#Tracking-sources|Tracking third-party sources]], and [[#From-files|Creating a directory tree from a number of files]].


    |[[#import-examples| < ]]| |[[#log-options| > ]]|   |[[#CVS-commands| << ]]| |[[#CVS-commands| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === log—Print out log information for files ===
    • Synopsis: log [options] [files…]
    • Requires: repository, working directory.
    • Changes: nothing.

    Display log information for files. log used to call the RCS utility rlog. Although this is no longer true in the current sources, this history determines the format of the output and the options, which are not quite in the style of the other CVS commands.

    The output includes the location of the RCS file, the head revision (the latest revision on the trunk), all symbolic names (tags) and some other things. For each revision, the revision number, the author, the number of lines added/deleted and the log message are printed. All times are displayed in Coordinated Universal Time (UTC). (Other parts of CVS print times in the local timezone).

    Note: log uses ‘-R’ in a way that conflicts with the normal use inside CVS (see section [[#Common-options|Common command options]]).


    |[[#log| < ]]| |[[#log-examples| > ]]|   |[[#CVS-commands| << ]]| |[[#log| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== log options ====

    By default, log prints all information that is available. All other options restrict the output.

    -b

    Print information about the revisions on the default branch, normally the highest branch on the trunk.

    -d dates

    Print information about revisions with a checkin date/time in the range given by the semicolon-separated list of dates. The date formats accepted are those accepted by the ‘-D’ option to many other CVS commands (see section [[#Common-options|Common command options]]). Dates can be combined into ranges as follows:

    d1<d2
    d2>d1

    Select the revisions that were deposited between d1 and d2.

    <d
    d>

    Select all revisions dated d or earlier.

    d<
    >d

    Select all revisions dated d or later.

    d

    Select the single, latest revision dated d or earlier.

    The ‘>’ or ‘<’ characters may be followed by ‘=’ to indicate an inclusive range rather than an exclusive one.

    Note that the separator is a semicolon (;).

    -h

    Print only the name of the RCS file, name of the file in the working directory, head, default branch, access list, locks, symbolic names, and suffix.

    -l

    Local; run only in current working directory. (Default is to run recursively).

    -N

    Do not print the list of tags for this file. This option can be very useful when your site uses a lot of tags, so rather than "more"’ing over 3 pages of tag information, the log information is presented without tags at all.

    -R

    Print only the name of the RCS file.

    -rrevisions

    Print information about revisions given in the comma-separated list revisions of revisions and ranges. The following table explains the available range formats:

    rev1:rev2

    Revisions rev1 to rev2 (which must be on the same branch).

    rev1::rev2

    The same, but excluding rev1.

    :rev
    ::rev

    Revisions from the beginning of the branch up to and including rev.

    rev:

    Revisions starting with rev to the end of the branch containing rev.

    rev::

    Revisions starting just after rev to the end of the branch containing rev.

    branch

    An argument that is a branch means all revisions on that branch.

    branch1:branch2
    branch1::branch2

    A range of branches means all revisions on the branches in that range.

    branch.

    The latest revision in branch.

    A bare ‘-r’ with no revisions means the latest revision on the default branch, normally the trunk. There can be no space between the ‘-r’ option and its argument.

    -S

    Suppress the header if no revisions are selected.

    -s states

    Print information about revisions whose state attributes match one of the states given in the comma-separated list states.

    -t

    Print the same as ‘-h’, plus the descriptive text.

    -wlogins

    Print information about revisions checked in by users with login names appearing in the comma-separated list logins. If logins is omitted, the user’s login is assumed. There can be no space between the ‘-w’ option and its argument.

    log prints the intersection of the revisions selected with the options ‘-d’, ‘-s’, and ‘-w’, intersected with the union of the revisions selected by ‘-b’ and ‘-r’.


    |[[#log-options| < ]]| |[[#rdiff| > ]]|   |[[#CVS-commands| << ]]| |[[#log| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== log examples ====

    Contributed examples are gratefully accepted.


    |[[#log-examples| < ]]| |[[#rdiff-options| > ]]|   |[[#CVS-commands| << ]]| |[[#CVS-commands| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === rdiff—’patch’ format diffs between releases ===
    • rdiff [-flags] [-V vn] [-r t|-D d [-r t2|-D d2]] modules…
    • Requires: repository.
    • Changes: nothing.
    • Synonym: patch

    Builds a Larry Wall format patch(1) file between two releases, that can be fed directly into the patch program to bring an old release up-to-date with the new release. (This is one of the few CVS commands that operates directly from the repository, and doesn’t require a prior checkout.) The diff output is sent to the standard output device.

    You can specify (using the standard ‘-r’ and ‘-D’ options) any combination of one or two revisions or dates. If only one revision or date is specified, the patch file reflects differences between that revision or date and the current head revisions in the RCS file.

    Note that if the software release affected is contained in more than one directory, then it may be necessary to specify the ‘-p’ option to the patch command when patching the old sources, so that patch is able to find the files that are located in other directories.


    |[[#rdiff| < ]]| |[[#rdiff-examples| > ]]|   |[[#CVS-commands| << ]]| |[[#rdiff| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== rdiff options ====

    These standard options are supported by rdiff (see section [[#Common-options|Common command options]], for a complete description of them):

    -D date

    Use the most recent revision no later than date.

    -f

    If no matching revision is found, retrieve the most recent revision (instead of ignoring the file).

    -l

    Local; don’t descend subdirectories.

    -R

    Examine directories recursively. This option is on by default.

    -r tag

    Use revision tag.

    In addition to the above, these options are available:

    -c

    Use the context diff format. This is the default format.

    -s

    Create a summary change report instead of a patch. The summary includes information about files that were changed or added between the releases. It is sent to the standard output device. This is useful for finding out, for example, which files have changed between two dates or revisions.

    -t

    A diff of the top two revisions is sent to the standard output device. This is most useful for seeing what the last change to a file was.

    -u

    Use the unidiff format for the context diffs. Remember that old versions of the patch program can’t handle the unidiff format, so if you plan to post this patch to the net you should probably not use ‘-u’.

    -V vn

    Expand keywords according to the rules current in RCS version vn (the expansion format changed with RCS version 5). Note that this option is no longer accepted. CVS will always expand keywords the way that RCS version 5 does.


    |[[#rdiff-options| < ]]| |[[#release| > ]]|   |[[#CVS-commands| << ]]| |[[#rdiff| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== rdiff examples ====

    Suppose you receive mail from foo@example.net asking for an update from release 1.2 to 1.4 of the tc compiler. You have no such patches on hand, but with CVS that can easily be fixed with a command such as this:

     
    $ cvs rdiff -c -r FOO1_2 -r FOO1_4 tc | \
    $$ Mail -s 'The patches you asked for' foo@example.net
    

    Suppose you have made release 1.3, and forked a branch called ‘R_1_3fix’ for bugfixes. ‘R_1_3_1’ corresponds to release 1.3.1, which was made some time ago. Now, you want to see how much development has been done on the branch. This command can be used:

     
    $ cvs patch -s -r R_1_3_1 -r R_1_3fix module-name
    cvs rdiff: Diffing module-name
    File ChangeLog,v changed from revision 1.52.2.5 to 1.52.2.6
    File foo.c,v changed from revision 1.52.2.3 to 1.52.2.4
    File bar.h,v changed from revision 1.29.2.1 to 1.2
    

    |[[#rdiff-examples| < ]]| |[[#release-options| > ]]|   |[[#CVS-commands| << ]]| |[[#CVS-commands| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === release—Indicate that a Module is no longer in use ===
    • release [-d] directories…
    • Requires: Working directory.
    • Changes: Working directory, history log.

    This command is meant to safely cancel the effect of ‘cvs checkout’. Since CVS doesn’t lock files, it isn’t strictly necessary to use this command. You can always simply delete your working directory, if you like; but you risk losing changes you may have forgotten, and you leave no trace in the CVS history file (see section [[#history-file|The history file]]) that you’ve abandoned your checkout.

    Use ‘cvs release’ to avoid these problems. This command checks that no uncommitted changes are present; that you are executing it from immediately above a CVS working directory; and that the repository recorded for your files is the same as the repository defined in the module database.

    If all these conditions are true, ‘cvs release’ leaves a record of its execution (attesting to your intentionally abandoning your checkout) in the CVS history log.


    |[[#release| < ]]| |[[#release-output| > ]]|   |[[#CVS-commands| << ]]| |[[#release| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== release options ====

    The release command supports one command option:

    -d

    Delete your working copy of the file if the release succeeds. If this flag is not given your files will remain in your working directory.

    WARNING: The release command deletes all directories and files recursively. This has the very serious side-effect that any directory that you have created inside your checked-out sources, and not added to the repository (using the add command; see section [[#Adding-files|Adding files to a directory]]) will be silently deleted—even if it is non-empty!


    |[[#release-options| < ]]| |[[#release-examples| > ]]|   |[[#CVS-commands| << ]]| |[[#release| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== release output ====

    Before release releases your sources it will print a one-line message for any file that is not up-to-date.

    U file
    P file

    There exists a newer revision of this file in the repository, and you have not modified your local copy of the file (‘U’ and ‘P’ mean the same thing).

    A file

    The file has been added to your private copy of the sources, but has not yet been committed to the repository. If you delete your copy of the sources this file will be lost.

    R file

    The file has been removed from your private copy of the sources, but has not yet been removed from the repository, since you have not yet committed the removal. See section [[#commit|commit—Check files into the repository]].

    M file

    The file is modified in your working directory. There might also be a newer revision inside the repository.

    ? file

    file is in your working directory, but does not correspond to anything in the source repository, and is not in the list of files for CVS to ignore (see the description of the ‘-I’ option, and see section [[#cvsignore|Ignoring files via cvsignore]]). If you remove your working sources, this file will be lost.


    |[[#release-output| < ]]| |[[#update| > ]]|   |[[#CVS-commands| << ]]| |[[#release| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== release examples ====

    Release the ‘tc’ directory, and delete your local working copy of the files.

     
    $ cd ..         # You must stand immediately above the
                    # sources when you issue ‘cvs release’.
    $ cvs release -d tc
    You have [0] altered files in this repository.
    Are you sure you want to release (and delete) directory `tc': y
    $
    

    |[[#release-examples| < ]]| |[[#update-options| > ]]|   |[[#CVS-commands| << ]]| |[[#CVS-commands| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === update—Bring work tree in sync with repository ===
    • update [-ACdflPpR] [-I name] [-j rev [-j rev]] [-k kflag] [-r tag|-D date] [-W spec] files…
    • Requires: repository, working directory.
    • Changes: working directory.

    After you’ve run checkout to create your private copy of source from the common repository, other developers will continue changing the central source. From time to time, when it is convenient in your development process, you can use the update command from within your working directory to reconcile your work with any revisions applied to the source repository since your last checkout or update. Without the -C option, update will also merge any differences between the local copy of files and their base revisions into any destination revisions specified with -r, -D, or -A.


    |[[#update| < ]]| |[[#update-output| > ]]|   |[[#CVS-commands| << ]]| |[[#update| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== update options ====

    These standard options are available with update (see section [[#Common-options|Common command options]], for a complete description of them):

    -D date

    Use the most recent revision no later than date. This option is sticky, and implies ‘-P’. See [[#Sticky-tags|Sticky tags]], for more information on sticky tags/dates.

    -f

    Only useful with the ‘-D date’ or ‘-r tag’ flags. If no matching revision is found, retrieve the most recent revision (instead of ignoring the file).

    -k kflag

    Process keywords according to kflag. See [[#Keyword-substitution|Keyword substitution]]. This option is sticky; future updates of this file in this working directory will use the same kflag. The status command can be viewed to see the sticky options. See [[#Invoking-CVS|Quick reference to CVS commands]], for more information on the status command.

    -l

    Local; run only in current working directory. See section [[#Recursive-behavior|Recursive behavior]].

    -P

    Prune empty directories. See [[#Moving-directories|Moving and renaming directories]].

    -p

    Pipe files to the standard output.

    -R

    Update directories recursively (default). See section [[#Recursive-behavior|Recursive behavior]].

    -r rev

    Retrieve revision/tag rev. This option is sticky, and implies ‘-P’. See [[#Sticky-tags|Sticky tags]], for more information on sticky tags/dates.

    These special options are also available with update.

    -A

    Reset any sticky tags, dates, or ‘-k’ options. See [[#Sticky-tags|Sticky tags]], for more information on sticky tags/dates.

    -C

    Overwrite locally modified files with clean copies from the repository (the modified file is saved in ‘.#file.revision’, however).

    -d

    Create any directories that exist in the repository if they’re missing from the working directory. Normally, update acts only on directories and files that were already enrolled in your working directory.

    This is useful for updating directories that were created in the repository since the initial checkout; but it has an unfortunate side effect. If you deliberately avoided certain directories in the repository when you created your working directory (either through use of a module name or by listing explicitly the files and directories you wanted on the command line), then updating with ‘-d’ will create those directories, which may not be what you want.

    -I name

    Ignore files whose names match name (in your working directory) during the update. You can specify ‘-I’ more than once on the command line to specify several files to ignore. Use ‘-I !’ to avoid ignoring any files at all. See section [[#cvsignore|Ignoring files via cvsignore]], for other ways to make CVS ignore some files.

    -Wspec

    Specify file names that should be filtered during update. You can use this option repeatedly.

    spec can be a file name pattern of the same type that you can specify in the ‘.cvswrappers’ file. See section [[#Wrappers|The cvswrappers file]].

    -jrevision

    With two ‘-j’ options, merge changes from the revision specified with the first ‘-j’ option to the revision specified with the second ‘j’ option, into the working directory.

    With one ‘-j’ option, merge changes from the ancestor revision to the revision specified with the ‘-j’ option, into the working directory. The ancestor revision is the common ancestor of the revision which the working directory is based on, and the revision specified in the ‘-j’ option.

    Note that using a single ‘-j tagname’ option rather than ‘-j branchname’ to merge changes from a branch will often not remove files which were removed on the branch. See section [[#Merging-adds-and-removals|Merging can add or remove files]], for more.

    In addition, each ‘-j’ option can contain an optional date specification which, when used with branches, can limit the chosen revision to one within a specific date. An optional date is specified by adding a colon (:) to the tag: ‘-jSymbolic_Tag:Date_Specifier’.

    See section [[#Branching-and-merging|Branching and merging]].


    |[[#update-options| < ]]| |[[#Invoking-CVS| > ]]|   |[[#CVS-commands| << ]]| |[[#update| Up ]]| |[[#Invoking-CVS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== update output ====

    update and checkout keep you informed of their progress by printing a line for each file, preceded by one character indicating the status of the file:

    U file

    The file was brought up to date with respect to the repository. This is done for any file that exists in the repository but not in your source, and for files that you haven’t changed but are not the most recent versions available in the repository.

    P file

    Like ‘U’, but the CVS server sends a patch instead of an entire file. This accomplishes the same thing as ‘U’ using less bandwidth.

    A file

    The file has been added to your private copy of the sources, and will be added to the source repository when you run commit on the file. This is a reminder to you that the file needs to be committed.

    R file

    The file has been removed from your private copy of the sources, and will be removed from the source repository when you run commit on the file. This is a reminder to you that the file needs to be committed.

    M file

    The file is modified in your working directory.

    M’ can indicate one of two states for a file you’re working on: either there were no modifications to the same file in the repository, so that your file remains as you last saw it; or there were modifications in the repository as well as in your copy, but they were merged successfully, without conflict, in your working directory.

    CVS will print some messages if it merges your work, and a backup copy of your working file (as it looked before you ran update) will be made. The exact name of that file is printed while update runs.

    C file

    A conflict was detected while trying to merge your changes to file with changes from the source repository. file (the copy in your working directory) is now the result of attempting to merge the two revisions; an unmodified copy of your file is also in your working directory, with the name ‘.#file.revision’ where revision is the revision that your modified file started from. Resolve the conflict as described in [[#Conflicts-example|Conflicts example]]. (Note that some systems automatically purge files that begin with ‘.#’ if they have not been accessed for a few days. If you intend to keep a copy of your original file, it is a very good idea to rename it.) Under VMS, the file name starts with ‘__’ rather than ‘.#’.

    ? file

    file is in your working directory, but does not correspond to anything in the source repository, and is not in the list of files for CVS to ignore (see the description of the ‘-I’ option, and see section [[#cvsignore|Ignoring files via cvsignore]]).


    |[[#update-output| < ]]| |[[#Administrative-files| > ]]|   |[[#CVS-commands| << ]]| |[[#Top| Up ]]| |[[#Administrative-files| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    == Quick reference to CVS commands ==

    This appendix describes how to invoke CVS, with references to where each command or feature is described in detail. For other references run the cvs --help command, or see [[#Index|Index]].

    A CVS command looks like:

     
    cvs [ global_options ] command [ command_options ] [ command_args ]
    

    Global options:

    --allow-root=rootdir

    Specify legal CVSROOT directory (server only) (not in CVS 1.9 and older). See [[#Password-authentication-server|Setting up the server for password authentication]].

    -a

    Authenticate all communication (client only) (not in CVS 1.9 and older). See [[#Global-options|Global options]].

    -b

    Specify RCS location (CVS 1.9 and older). See [[#Global-options|Global options]].

    -d root

    Specify the CVSROOT. See [[#Repository|The Repository]].

    -e editor

    Edit messages with editor. See [[#Committing-your-changes|Committing your changes]].

    -f

    Do not read the ‘~/.cvsrc’ file. See [[#Global-options|Global options]].

    -H
    --help

    Print a help message. See [[#Global-options|Global options]].

    -l

    Do not log in ‘$CVSROOT/CVSROOT/history’ file. See [[#Global-options|Global options]].

    -n

    Do not change any files. See [[#Global-options|Global options]].

    -Q

    Be really quiet. See [[#Global-options|Global options]].

    -q

    Be somewhat quiet. See [[#Global-options|Global options]].

    -r

    Make new working files read-only. See [[#Global-options|Global options]].

    -s variable=value

    Set a user variable. See [[#Variables|Expansions in administrative files]].

    -T tempdir

    Put temporary files in tempdir. See [[#Global-options|Global options]].

    -t

    Trace CVS execution. See [[#Global-options|Global options]].

    -v
    --version

    Display version and copyright information for CVS.

    -w

    Make new working files read-write. See [[#Global-options|Global options]].

    -x

    Encrypt all communication (client only). See [[#Global-options|Global options]].

    -z gzip-level

    Set the compression level (client only). See [[#Global-options|Global options]].

    Keyword expansion modes (see section [[#Substitution-modes|Substitution modes]]):

     
    -kkv  $Id: file1,v 1.1 1993/12/09 03:21:13 joe Exp $
    -kkvl $Id: file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $
    -kk   $Id$
    -kv   file1,v 1.1 1993/12/09 03:21:13 joe Exp
    -ko   no expansion
    -kb   no expansion, file is binary
    

    Keywords (see section [[#Keyword-list|Keyword List]]):

     
    $Author: joe $
    $Date: 1993/12/09 03:21:13 $
    $CVSHeader: files/file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $
    $Header: /home/files/file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $
    $Id: file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $
    $Locker: harry $
    $Name: snapshot_1_14 $
    $RCSfile: file1,v $
    $Revision: 1.1 $
    $Source: /home/files/file1,v $
    $State: Exp $
    $Log: file1,v $
    Revision 1.1  1993/12/09 03:30:17  joe
    Initial revision
    
    

    Commands, command options, and command arguments:

    add [options] [files…]

    Add a new file/directory. See [[#Adding-files|Adding files to a directory]].

    -k kflag

    Set keyword expansion.

    -m msg

    Set file description.

    admin [options] [files…]

    Administration of history files in the repository. See [[#admin|admin—Administration]].

    -b[rev]

    Set default branch. See [[#Reverting-local-changes|Reverting to the latest vendor release]].

    -cstring

    Set comment leader.

    -ksubst

    Set keyword substitution. See [[#Keyword-substitution|Keyword substitution]].

    -l[rev]

    Lock revision rev, or latest revision.

    -mrev:msg

    Replace the log message of revision rev with msg.

    -orange

    Delete revisions from the repository. See [[#admin-options|admin options]].

    -q

    Run quietly; do not print diagnostics.

    -sstate[:rev]

    Set the state.

    -t

    Set file description from standard input.

    -tfile

    Set file description from file.

    -t-string

    Set file description to string.

    -u[rev]

    Unlock revision rev, or latest revision.

    annotate [options] [files…]

    Show last revision where each line was modified. See [[#annotate|Annotate command]].

    -D date

    Annotate the most recent revision no later than date. See [[#Common-options|Common command options]].

    -F

    Force annotation of binary files. (Without this option, binary files are skipped with a message.)

    -f

    Use head revision if tag/date not found. See [[#Common-options|Common command options]].

    -l

    Local; run only in current working directory. See section [[#Recursive-behavior|Recursive behavior]].

    -R

    Operate recursively (default). See section [[#Recursive-behavior|Recursive behavior]].

    -r tag

    Annotate revision tag. See [[#Common-options|Common command options]].

    checkout [options] modules

    Get a copy of the sources. See [[#checkout|checkout—Check out sources for editing]].

    -A

    Reset any sticky tags/date/options. See [[#Sticky-tags|Sticky tags]] and [[#Keyword-substitution|Keyword substitution]].

    -c

    Output the module database. See [[#checkout-options|checkout options]].

    -D date

    Check out revisions as of date (is sticky). See [[#Common-options|Common command options]].

    -d dir

    Check out into dir. See [[#checkout-options|checkout options]].

    -f

    Use head revision if tag/date not found. See [[#Common-options|Common command options]].

    -j rev

    Merge in changes. See [[#checkout-options|checkout options]].

    -k kflag

    Use kflag keyword expansion. See [[#Substitution-modes|Substitution modes]].

    -l

    Local; run only in current working directory. See section [[#Recursive-behavior|Recursive behavior]].

    -N

    Don’t “shorten” module paths if -d specified. See [[#checkout-options|checkout options]].

    -n

    Do not run module program (if any). See [[#checkout-options|checkout options]].

    -P

    Prune empty directories. See [[#Moving-directories|Moving and renaming directories]].

    -p

    Check out files to standard output (avoids stickiness). See [[#checkout-options|checkout options]].

    -R

    Operate recursively (default). See section [[#Recursive-behavior|Recursive behavior]].

    -r tag

    Checkout revision tag (is sticky). See [[#Common-options|Common command options]].

    -s

    Like -c, but include module status. See [[#checkout-options|checkout options]].

    commit [options] [files…]

    Check changes into the repository. See [[#commit|commit—Check files into the repository]].

    -F file

    Read log message from file. See [[#commit-options|commit options]].

    -f

    Force the file to be committed; disables recursion. See [[#commit-options|commit options]].

    -l

    Local; run only in current working directory. See [[#Recursive-behavior|Recursive behavior]].

    -m msg

    Use msg as log message. See [[#commit-options|commit options]].

    -n

    Do not run module program (if any). See [[#commit-options|commit options]].

    -R

    Operate recursively (default). See section [[#Recursive-behavior|Recursive behavior]].

    -r rev

    Commit to rev. See [[#commit-options|commit options]].

    diff [options] [files…]

    Show differences between revisions. See [[#diff|diff—Show differences between revisions]]. In addition to the options shown below, accepts a wide variety of options to control output style, for example ‘-c’ for context diffs.

    -D date1

    Diff revision for date against working file. See [[#diff-options|diff options]].

    -D date2

    Diff rev1/date1 against date2. See [[#diff-options|diff options]].

    -l

    Local; run only in current working directory. See [[#Recursive-behavior|Recursive behavior]].

    -N

    Include diffs for added and removed files. See [[#diff-options|diff options]].

    -R

    Operate recursively (default). See section [[#Recursive-behavior|Recursive behavior]].

    -r rev1

    Diff revision for rev1 against working file. See [[#diff-options|diff options]].

    -r rev2

    Diff rev1/date1 against rev2. See [[#diff-options|diff options]].

    edit [options] [files…]

    Get ready to edit a watched file. See [[#Editing-files|How to edit a file which is being watched]].

    -a actions

    Specify actions for temporary watch, where actions is edit, unedit, commit, all, or none. See [[#Editing-files|How to edit a file which is being watched]].

    -l

    Local; run only in current working directory. See [[#Recursive-behavior|Recursive behavior]].

    -R

    Operate recursively (default). See section [[#Recursive-behavior|Recursive behavior]].

    editors [options] [files…]

    See who is editing a watched file. See [[#Watch-information|Information about who is watching and editing]].

    -l

    Local; run only in current working directory. See [[#Recursive-behavior|Recursive behavior]].

    -R

    Operate recursively (default). See section [[#Recursive-behavior|Recursive behavior]].

    export [options] modules

    Export files from CVS. See [[#export|export—Export sources from CVS, similar to checkout]].

    -D date

    Check out revisions as of date. See [[#Common-options|Common command options]].

    -d dir

    Check out into dir. See [[#export-options|export options]].

    -f

    Use head revision if tag/date not found. See [[#Common-options|Common command options]].

    -k kflag

    Use kflag keyword expansion. See [[#Substitution-modes|Substitution modes]].

    -l

    Local; run only in current working directory. See section [[#Recursive-behavior|Recursive behavior]].

    -N

    Don’t “shorten” module paths if -d specified. See [[#export-options|export options]].

    -n

    Do not run module program (if any). See [[#export-options|export options]].

    -R

    Operate recursively (default). See section [[#Recursive-behavior|Recursive behavior]].

    -r tag

    Checkout revision tag. See [[#Common-options|Common command options]].

    history [options] [files…]

    Show repository access history. See [[#history|history—Show status of files and users]].

    -a

    All users (default is self). See [[#history-options|history options]].

    -b str

    Back to record with str in module/file/repos field. See [[#history-options|history options]].

    -c

    Report on committed (modified) files. See [[#history-options|history options]].

    -D date

    Since date. See [[#history-options|history options]].

    -e

    Report on all record types. See [[#history-options|history options]].

    -l

    Last modified (committed or modified report). See [[#history-options|history options]].

    -m module

    Report on module (repeatable). See [[#history-options|history options]].

    -n module

    In module. See [[#history-options|history options]].

    -o

    Report on checked out modules. See [[#history-options|history options]].

    -p repository

    In repository. See [[#history-options|history options]].

    -r rev

    Since revision rev. See [[#history-options|history options]].

    -T

    Produce report on all TAGs. See [[#history-options|history options]].

    -t tag

    Since tag record placed in history file (by anyone). See [[#history-options|history options]].

    -u user

    For user user (repeatable). See [[#history-options|history options]].

    -w

    Working directory must match. See [[#history-options|history options]].

    -x types

    Report on types, one or more of TOEFWUCGMAR. See [[#history-options|history options]].

    -z zone

    Output for time zone zone. See [[#history-options|history options]].

    import [options] repository vendor-tag release-tags

    Import files into CVS, using vendor branches. See [[#import|import—Import sources into CVS, using vendor branches]].

    -b bra

    Import to vendor branch bra. See [[#Multiple-vendor-branches|Multiple vendor branches]].

    -d

    Use the file’s modification time as the time of import. See [[#import-options|import options]].

    -k kflag

    Set default keyword substitution mode. See [[#import-options|import options]].

    -m msg

    Use msg for log message. See [[#import-options|import options]].

    -I ign

    More files to ignore (! to reset). See [[#import-options|import options]].

    -W spec

    More wrappers. See [[#import-options|import options]].

    init

    Create a CVS repository if it doesn’t exist. See [[#Creating-a-repository|Creating a repository]].

    kserver

    Kerberos authenticated server. See [[#Kerberos-authenticated|Direct connection with kerberos]].

    log [options] [files…]

    Print out history information for files. See [[#log|log—Print out log information for files]].

    -b

    Only list revisions on the default branch. See [[#log-options|log options]].

    -d dates

    Specify dates (d1<d2 for range, d for latest before). See [[#log-options|log options]].

    -h

    Only print header. See [[#log-options|log options]].

    -l

    Local; run only in current working directory. See [[#Recursive-behavior|Recursive behavior]].

    -N

    Do not list tags. See [[#log-options|log options]].

    -R

    Only print name of RCS file. See [[#log-options|log options]].

    -rrevs

    Only list revisions revs. See [[#log-options|log options]].

    -s states

    Only list revisions with specified states. See [[#log-options|log options]].

    -t

    Only print header and descriptive text. See [[#log-options|log options]].

    -wlogins

    Only list revisions checked in by specified logins. See [[#log-options|log options]].

    login

    Prompt for password for authenticating server. See [[#Password-authentication-client|Using the client with password authentication]].

    logout

    Remove stored password for authenticating server. See [[#Password-authentication-client|Using the client with password authentication]].

    pserver

    Password authenticated server. See [[#Password-authentication-server|Setting up the server for password authentication]].

    rannotate [options] [modules…]

    Show last revision where each line was modified. See [[#annotate|Annotate command]].

    -D date

    Annotate the most recent revision no later than date. See [[#Common-options|Common command options]].

    -F

    Force annotation of binary files. (Without this option, binary files are skipped with a message.)

    -f

    Use head revision if tag/date not found. See [[#Common-options|Common command options]].

    -l

    Local; run only in current working directory. See section [[#Recursive-behavior|Recursive behavior]].

    -R

    Operate recursively (default). See section [[#Recursive-behavior|Recursive behavior]].

    -r tag

    Annotate revision tag. See [[#Common-options|Common command options]].

    rdiff [options] modules

    Show differences between releases. See [[#rdiff|rdiff—’patch’ format diffs between releases]].

    -c

    Context diff output format (default). See [[#rdiff-options|rdiff options]].

    -D date

    Select revisions based on date. See [[#Common-options|Common command options]].

    -f

    Use head revision if tag/date not found. See [[#Common-options|Common command options]].

    -l

    Local; run only in current working directory. See [[#Recursive-behavior|Recursive behavior]].

    -R

    Operate recursively (default). See section [[#Recursive-behavior|Recursive behavior]].

    -r rev

    Select revisions based on rev. See [[#Common-options|Common command options]].

    -s

    Short patch - one liner per file. See [[#rdiff-options|rdiff options]].

    -t

    Top two diffs - last change made to the file. See [[#diff-options|diff options]].

    -u

    Unidiff output format. See [[#rdiff-options|rdiff options]].

    -V vers

    Use RCS Version vers for keyword expansion (obsolete). See [[#rdiff-options|rdiff options]].

    release [options] directory

    Indicate that a directory is no longer in use. See [[#release|release—Indicate that a Module is no longer in use]].

    -d

    Delete the given directory. See [[#release-options|release options]].

    remove [options] [files…]

    Remove an entry from the repository. See [[#Removing-files|Removing files]].

    -f

    Delete the file before removing it. See [[#Removing-files|Removing files]].

    -l

    Local; run only in current working directory. See [[#Recursive-behavior|Recursive behavior]].

    -R

    Operate recursively (default). See section [[#Recursive-behavior|Recursive behavior]].

    rlog [options] [files…]

    Print out history information for modules. See [[#log|log—Print out log information for files]].

    -b

    Only list revisions on the default branch. See [[#log-options|log options]].

    -d dates

    Specify dates (d1<d2 for range, d for latest before). See [[#log-options|log options]].

    -h

    Only print header. See [[#log-options|log options]].

    -l

    Local; run only in current working directory. See [[#Recursive-behavior|Recursive behavior]].

    -N

    Do not list tags. See [[#log-options|log options]].

    -R

    Only print name of RCS file. See [[#log-options|log options]].

    -rrevs

    Only list revisions revs. See [[#log-options|log options]].

    -s states

    Only list revisions with specified states. See [[#log-options|log options]].

    -t

    Only print header and descriptive text. See [[#log-options|log options]].

    -wlogins

    Only list revisions checked in by specified logins. See [[#log-options|log options]].

    rtag [options] tag modules

    Add a symbolic tag to a module. See [[#Revisions|Revisions]] and [[#Branching-and-merging|Branching and merging]].

    -a

    Clear tag from removed files that would not otherwise be tagged. See [[#Tagging-add_002fremove|Tagging and adding and removing files]].

    -b

    Create a branch named tag. See [[#Branching-and-merging|Branching and merging]].

    -B

    Used in conjunction with -F or -d, enables movement and deletion of branch tags. Use with extreme caution.

    -D date

    Tag revisions as of date. See [[#Tagging-by-date_002ftag|Specifying what to tag by date or revision]].

    -d

    Delete tag. See [[#Modifying-tags|Deleting, moving, and renaming tags]].

    -F

    Move tag if it already exists. See [[#Modifying-tags|Deleting, moving, and renaming tags]].

    -f

    Force a head revision match if tag/date not found. See [[#Tagging-by-date_002ftag|Specifying what to tag by date or revision]].

    -l

    Local; run only in current working directory. See [[#Recursive-behavior|Recursive behavior]].

    -n

    No execution of tag program. See [[#Common-options|Common command options]].

    -R

    Operate recursively (default). See section [[#Recursive-behavior|Recursive behavior]].

    -r rev

    Tag existing tag rev. See [[#Tagging-by-date_002ftag|Specifying what to tag by date or revision]].

    server

    Rsh server. See [[#Connecting-via-rsh|Connecting with rsh]].

    status [options] files

    Display status information in a working directory. See [[#File-status|File status]].

    -l

    Local; run only in current working directory. See [[#Recursive-behavior|Recursive behavior]].

    -R

    Operate recursively (default). See section [[#Recursive-behavior|Recursive behavior]].

    -v

    Include tag information for file. See [[#Tags|Tags–Symbolic revisions]].

    tag [options] tag [files…]

    Add a symbolic tag to checked out version of files. See [[#Revisions|Revisions]] and [[#Branching-and-merging|Branching and merging]].

    -b

    Create a branch named tag. See [[#Branching-and-merging|Branching and merging]].

    -c

    Check that working files are unmodified. See [[#Tagging-the-working-directory|Specifying what to tag from the working directory]].

    -D date

    Tag revisions as of date. See [[#Tagging-by-date_002ftag|Specifying what to tag by date or revision]].

    -d

    Delete tag. See [[#Modifying-tags|Deleting, moving, and renaming tags]].

    -F

    Move tag if it already exists. See [[#Modifying-tags|Deleting, moving, and renaming tags]].

    -f

    Force a head revision match if tag/date not found. See [[#Tagging-by-date_002ftag|Specifying what to tag by date or revision]].

    -l

    Local; run only in current working directory. See [[#Recursive-behavior|Recursive behavior]].

    -R

    Operate recursively (default). See section [[#Recursive-behavior|Recursive behavior]].

    -r rev

    Tag existing tag rev. See [[#Tagging-by-date_002ftag|Specifying what to tag by date or revision]].

    unedit [options] [files…]

    Undo an edit command. See [[#Editing-files|How to edit a file which is being watched]].

    -l

    Local; run only in current working directory. See [[#Recursive-behavior|Recursive behavior]].

    -R

    Operate recursively (default). See section [[#Recursive-behavior|Recursive behavior]].

    update [options] [files…]

    Bring work tree in sync with repository. See [[#update|update—Bring work tree in sync with repository]].

    -A

    Reset any sticky tags/date/options. See [[#Sticky-tags|Sticky tags]] and [[#Keyword-substitution|Keyword substitution]].

    -C

    Overwrite locally modified files with clean copies from the repository (the modified file is saved in ‘.#file.revision’, however).

    -D date

    Check out revisions as of date (is sticky). See [[#Common-options|Common command options]].

    -d

    Create directories. See [[#update-options|update options]].

    -f

    Use head revision if tag/date not found. See [[#Common-options|Common command options]].

    -I ign

    More files to ignore (! to reset). See [[#import-options|import options]].

    -j rev

    Merge in changes. See [[#update-options|update options]].

    -k kflag

    Use kflag keyword expansion. See [[#Substitution-modes|Substitution modes]].

    -l

    Local; run only in current working directory. See section [[#Recursive-behavior|Recursive behavior]].

    -P

    Prune empty directories. See [[#Moving-directories|Moving and renaming directories]].

    -p

    Check out files to standard output (avoids stickiness). See [[#update-options|update options]].

    -R

    Operate recursively (default). See section [[#Recursive-behavior|Recursive behavior]].

    -r tag

    Checkout revision tag (is sticky). See [[#Common-options|Common command options]].

    -W spec

    More wrappers. See [[#import-options|import options]].

    version

    Display the version of CVS being used. If the repository is remote, display both the client and server versions.

    watch [on|off|add|remove] [options] [files…]

    on/off: turn on/off read-only checkouts of files. See [[#Setting-a-watch|Telling CVS to watch certain files]].

    add/remove: add or remove notification on actions. See [[#Getting-Notified|Telling CVS to notify you]].

    -a actions

    Specify actions for temporary watch, where actions is edit, unedit, commit, all, or none. See [[#Editing-files|How to edit a file which is being watched]].

    -l

    Local; run only in current working directory. See [[#Recursive-behavior|Recursive behavior]].

    -R

    Operate recursively (default). See section [[#Recursive-behavior|Recursive behavior]].

    watchers [options] [files…]

    See who is watching a file. See [[#Watch-information|Information about who is watching and editing]].

    -l

    Local; run only in current working directory. See [[#Recursive-behavior|Recursive behavior]].

    -R

    Operate recursively (default). See section [[#Recursive-behavior|Recursive behavior]].


    |[[#Invoking-CVS| < ]]| |[[#modules| > ]]|   |[[#Invoking-CVS| << ]]| |[[#Top| Up ]]| |[[#Environment-variables| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    == Reference manual for Administrative files ==

    Inside the repository, in the directory ‘$CVSROOT/CVSROOT’, there are a number of supportive files for CVS. You can use CVS in a limited fashion without any of them, but if they are set up properly they can help make life easier. For a discussion of how to edit them, see [[#Intro-administrative-files|The administrative files]].

    The most important of these files is the ‘modules’ file, which defines the modules inside the repository.


    |[[#Administrative-files| < ]]| |[[#Alias-modules| > ]]|   |[[#Administrative-files| << ]]| |[[#Administrative-files| Up ]]| |[[#Environment-variables| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === The modules file ===

    The ‘modules’ file records your definitions of names for collections of source code. CVS will use these definitions if you use CVS to update the modules file (use normal commands like add, commit, etc).

    The ‘modules’ file may contain blank lines and comments (lines beginning with ‘#’) as well as module definitions. Long lines can be continued on the next line by specifying a backslash (‘\’) as the last character on the line.

    There are three basic types of modules: alias modules, regular modules, and ampersand modules. The difference between them is the way that they map files in the repository to files in the working directory. In all of the following examples, the top-level repository contains a directory called ‘first-dir’, which contains two files, ‘file1’ and ‘file2’, and a directory ‘sdir’. ‘first-dir/sdir’ contains a file ‘sfile’.


    |[[#modules| < ]]| |[[#Regular-modules| > ]]|   |[[#Administrative-files| << ]]| |[[#modules| Up ]]| |[[#Environment-variables| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== Alias modules ====

    Alias modules are the simplest kind of module:

    mname -a aliases

    This represents the simplest way of defining a module mname. The ‘-a’ flags the definition as a simple alias: CVS will treat any use of mname (as a command argument) as if the list of names aliases had been specified instead. aliases may contain either other module names or paths. When you use paths in aliases, checkout creates all intermediate directories in the working directory, just as if the path had been specified explicitly in the CVS arguments.

    For example, if the modules file contains:

     
    amodule -a first-dir
    

    then the following two commands are equivalent:

     
    $ cvs co amodule
    $ cvs co first-dir
    

    and they each would provide output such as:

     
    cvs checkout: Updating first-dir
    U first-dir/file1
    U first-dir/file2
    cvs checkout: Updating first-dir/sdir
    U first-dir/sdir/sfile
    

    |[[#Alias-modules| < ]]| |[[#Ampersand-modules| > ]]|   |[[#Administrative-files| << ]]| |[[#modules| Up ]]| |[[#Environment-variables| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== Regular modules ====
    mname [ options ] dir [ files… ]

    In the simplest case, this form of module definition reduces to ‘mname dir’. This defines all the files in directory dir as module mname. dir is a relative path (from $CVSROOT) to a directory of source in the source repository. In this case, on checkout, a single directory called mname is created as a working directory; no intermediate directory levels are used by default, even if dir was a path involving several directory levels.

    For example, if a module is defined by:

     
    regmodule first-dir
    

    then regmodule will contain the files from first-dir:

     
    $ cvs co regmodule
    cvs checkout: Updating regmodule
    U regmodule/file1
    U regmodule/file2
    cvs checkout: Updating regmodule/sdir
    U regmodule/sdir/sfile
    $
    

    By explicitly specifying files in the module definition after dir, you can select particular files from directory dir. Here is an example:

     
    regfiles first-dir/sdir sfile
    

    With this definition, getting the regfiles module will create a single working directory ‘regfiles’ containing the file listed, which comes from a directory deeper in the CVS source repository:

     
    $ cvs co regfiles
    U regfiles/sfile
    $
    

    |[[#Regular-modules| < ]]| |[[#Excluding-directories| > ]]|   |[[#Administrative-files| << ]]| |[[#modules| Up ]]| |[[#Environment-variables| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== Ampersand modules ====

    A module definition can refer to other modules by including ‘&module’ in its definition.

     
    mname [ options ] &module

    Then getting the module creates a subdirectory for each such module, in the directory containing the module. For example, if modules contains

     
    ampermod &first-dir
    

    then a checkout will create an ampermod directory which contains a directory called first-dir, which in turns contains all the directories and files which live there. For example, the command

     
    $ cvs co ampermod
    

    will create the following files:

     
    ampermod/first-dir/file1
    ampermod/first-dir/file2
    ampermod/first-dir/sdir/sfile
    

    There is one quirk/bug: the messages that CVS prints omit the ‘ampermod’, and thus do not correctly display the location to which it is checking out the files:

     
    $ cvs co ampermod
    cvs checkout: Updating first-dir
    U first-dir/file1
    U first-dir/file2
    cvs checkout: Updating first-dir/sdir
    U first-dir/sdir/sfile
    $
    

    Do not rely on this buggy behavior; it may get fixed in a future release of CVS.


    |[[#Ampersand-modules| < ]]| |[[#Module-options| > ]]|   |[[#Administrative-files| << ]]| |[[#modules| Up ]]| |[[#Environment-variables| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== Excluding directories ====

    An alias module may exclude particular directories from other modules by using an exclamation mark (‘!’) before the name of each directory to be excluded.

    For example, if the modules file contains:

     
    exmodule -a !first-dir/sdir first-dir
    

    then checking out the module ‘exmodule’ will check out everything in ‘first-dir’ except any files in the subdirectory ‘first-dir/sdir’.


    |[[#Excluding-directories| < ]]| |[[#Module-program-options| > ]]|   |[[#Administrative-files| << ]]| |[[#modules| Up ]]| |[[#Environment-variables| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== Module options ====

    Either regular modules or ampersand modules can contain options, which supply additional information concerning the module.

    -d name

    Name the working directory something other than the module name.

    -e prog

    Specify a program prog to run whenever files in a module are exported. prog runs with a single argument, the module name.

    -o prog

    Specify a program prog to run whenever files in a module are checked out. prog runs with a single argument, the module name. See [[#Module-program-options|How the modules file “program options” programs are run]] for information on how prog is called.

    -s status

    Assign a status to the module. When the module file is printed with ‘cvs checkout -s’ the modules are sorted according to primarily module status, and secondarily according to the module name. This option has no other meaning. You can use this option for several things besides status: for instance, list the person that is responsible for this module.

    -t prog

    Specify a program prog to run whenever files in a module are tagged with rtag. prog runs with two arguments: the module name and the symbolic tag specified to rtag. It is not run when tag is executed. Generally you will find that taginfo is a better solution (see section [[#user_002ddefined-logging|User-defined logging]]).

    You should also see see section [[#Module-program-options|How the modules file “program options” programs are run]] about how the “program options” programs are run.


    |[[#Module-options| < ]]| |[[#Wrappers| > ]]|   |[[#Administrative-files| << ]]| |[[#modules| Up ]]| |[[#Environment-variables| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== How the modules file “program options” programs are run ====

    For checkout, rtag, and export, the program is server-based, and as such the following applies:-

    If using remote access methods (pserver, ext, etc.), CVS will execute this program on the server from a temporary directory. The path is searched for this program.

    If using “local access” (on a local or remote NFS file system, i.e. repository set just to a path), the program will be executed from the newly checked-out tree, if found there, or alternatively searched for in the path if not.

    The programs are all run after the operation has effectively completed.


    |[[#Module-program-options| < ]]| |[[#commit-files| > ]]|   |[[#Administrative-files| << ]]| |[[#Administrative-files| Up ]]| |[[#Environment-variables| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === The cvswrappers file ===

    Wrappers refers to a CVS feature which lets you control certain settings based on the name of the file which is being operated on. The settings are ‘-k’ for binary files, and ‘-m’ for nonmergeable text files.

    The ‘-m’ option specifies the merge methodology that should be used when a non-binary file is updated. MERGE means the usual CVS behavior: try to merge the files. COPY means that cvs update will refuse to merge files, as it also does for files specified as binary with ‘-kb’ (but if the file is specified as binary, there is no need to specify ‘-m 'COPY'’). CVS will provide the user with the two versions of the files, and require the user using mechanisms outside CVS, to insert any necessary changes.

    WARNING: do not use COPY with CVS 1.9 or earlier - such versions of CVS will copy one version of your file over the other, wiping out the previous contents. The ‘-m’ wrapper option only affects behavior when merging is done on update; it does not affect how files are stored. See [[#Binary-files|Handling binary files]], for more on binary files.

    The basic format of the file ‘cvswrappers’ is:

     
    wildcard     [option value][option value]...
    
    where option is one of
    -m           update methodology      value: MERGE or COPY
    -k           keyword expansion       value: expansion mode
    
    and value is a single-quote delimited value.
    

    For example, the following command imports a directory, treating files whose name ends in ‘.exe’ as binary:

     
    cvs import -I ! -W "*.exe -k 'b'" first-dir vendortag reltag
    

    |[[#Wrappers| < ]]| |[[#syntax| > ]]|   |[[#Administrative-files| << ]]| |[[#Administrative-files| Up ]]| |[[#Environment-variables| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === The commit support files ===

    The ‘-i’ flag in the ‘modules’ file can be used to run a certain program whenever files are committed (see section [[#modules|The modules file]]). The files described in this section provide other, more flexible, ways to run programs whenever something is committed.

    There are three kind of programs that can be run on commit. They are specified in files in the repository, as described below. The following table summarizes the file names and the purpose of the corresponding programs.

    commitinfo

    The program is responsible for checking that the commit is allowed. If it exits with a non-zero exit status the commit will be aborted.

    verifymsg

    The specified program is used to evaluate the log message, and possibly verify that it contains all required fields. This is most useful in combination with the ‘rcsinfo’ file, which can hold a log message template (see section [[#rcsinfo|Rcsinfo]]).

    editinfo

    The specified program is used to edit the log message, and possibly verify that it contains all required fields. This is most useful in combination with the ‘rcsinfo’ file, which can hold a log message template (see section [[#rcsinfo|Rcsinfo]]). (obsolete)

    loginfo

    The specified program is called when the commit is complete. It receives the log message and some additional information and can store the log message in a file, or mail it to appropriate persons, or maybe post it to a local newsgroup, or… Your imagination is the limit!


    |[[#commit-files| < ]]| |[[#commitinfo| > ]]|   |[[#Administrative-files| << ]]| |[[#commit-files| Up ]]| |[[#Environment-variables| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== The common syntax ====

    The administrative files such as ‘commitinfo’, ‘loginfo’, ‘rcsinfo’, ‘verifymsg’, etc., all have a common format. The purpose of the files are described later on. The common syntax is described here.

    Each line contains the following:

    • A regular expression. This is a basic regular expression in the syntax used by GNU emacs.
    • A whitespace separator—one or more spaces and/or tabs.
    • A file name or command-line template.

    Blank lines are ignored. Lines that start with the character ‘#’ are treated as comments. Long lines unfortunately can not be broken in two parts in any way.

    The first regular expression that matches the current directory name in the repository is used. The rest of the line is used as a file name or command-line as appropriate.


    |[[#syntax| < ]]| |[[#verifymsg| > ]]|   |[[#Administrative-files| << ]]| |[[#commit-files| Up ]]| |[[#Environment-variables| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== Commitinfo ====

    The ‘commitinfo’ file defines programs to execute whenever ‘cvs commit’ is about to execute. These programs are used for pre-commit checking to verify that the modified, added and removed files are really ready to be committed. This could be used, for instance, to verify that the changed files conform to to your site’s standards for coding practice.

    As mentioned earlier, each line in the ‘commitinfo’ file consists of a regular expression and a command-line template. The template can include a program name and any number of arguments you wish to supply to it. The full path to the current source repository is appended to the template, followed by the file names of any files involved in the commit (added, removed, and modified files).

    The first line with a regular expression matching the directory within the repository will be used. If the command returns a non-zero exit status the commit will be aborted.

    If the repository name does not match any of the regular expressions in this file, the ‘DEFAULT’ line is used, if it is specified.

    All occurrences of the name ‘ALL’ appearing as a regular expression are used in addition to the first matching regular expression or the name ‘DEFAULT’.

    The command will be run in the root of the workspace containing the new versions of any files the user would like to modify (commit), or in a copy of the workspace on the server (see section [[#Remote-repositories|Remote repositories]]). If a file is being removed, there will be no copy of the file under the current directory. If a file is being added, there will be no corresponding archive file in the repository unless the file is being resurrected.

    Note that both the repository directory and the corresponding Attic (see section [[#Attic|The attic]]) directory may need to be checked to locate the archive file corresponding to any given file being committed. Much of the information about the specific commit request being made, including the destination branch, commit message, and command line options specified, is not available to the command.


    |[[#commitinfo| < ]]| |[[#editinfo| > ]]|   |[[#Administrative-files| << ]]| |[[#commit-files| Up ]]| |[[#Environment-variables| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== Verifying log messages ====

    Once you have entered a log message, you can evaluate that message to check for specific content, such as a bug ID. Use the ‘verifymsg’ file to specify a program that is used to verify the log message. This program could be a simple script that checks that the entered message contains the required fields.

    The ‘verifymsg’ file is often most useful together with the ‘rcsinfo’ file, which can be used to specify a log message template.

    Each line in the ‘verifymsg’ file consists of a regular expression and a command-line template. The template must include a program name, and can include any number of arguments. The full path to the current log message template file is appended to the template.

    One thing that should be noted is that the ‘ALL’ keyword is not supported. If more than one matching line is found, the first one is used. This can be useful for specifying a default verification script in a directory, and then overriding it in a subdirectory.

    If the repository name does not match any of the regular expressions in this file, the ‘DEFAULT’ line is used, if it is specified.

    If the verification script exits with a non-zero exit status, the commit is aborted.

    In the default configuration, CVS allows the verification script to change the log message. This is controlled via the RereadLogAfterVerify CVSROOT/config option.

    When ‘RereadLogAfterVerify=always’ or ‘RereadLogAfterVerify=stat’, the log message will either always be reread after the verification script is run or reread only if the log message file status has changed.

    See section [[#config|The CVSROOT/config configuration file]], for more on CVSROOT/config options.

    It is NOT a good idea for a ‘verifymsg’ script to interact directly with the user in the various client/server methods. For the pserver method, there is no protocol support for communicating between ‘verifymsg’ and the client on the remote end. For the ext and server methods, it is possible for CVS to become confused by the characters going along the same channel as the CVS protocol messages. See [[#Remote-repositories|Remote repositories]], for more information on client/server setups. In addition, at the time the ‘verifymsg’ script runs, the CVS server has locks in place in the repository. If control is returned to the user here then other users may be stuck waiting for access to the repository.

    This option can be useful if you find yourself using an rcstemplate that needs to be modified to remove empty elements or to fill in default values. It can also be useful if the rcstemplate has changed in the repository and the CVS/Template was not updated, but is able to be adapted to the new format by the verification script that is run by ‘verifymsg’.

    An example of an update might be to change all occurrences of ’BugId:’ to be ’DefectId:’ (which can be useful if the rcstemplate has recently been changed and there are still checked-out user trees with cached copies in the CVS/Template file of the older version).

    Another example of an update might be to delete a line that contains ’BugID: none’ from the log message after validation of that value as being allowed is made.

    The following is a little silly example of a ‘verifymsg’ file, together with the corresponding ‘rcsinfo’ file, the log message template and an verification script. We begin with the log message template. We want to always record a bug-id number on the first line of the log message. The rest of log message is free text. The following template is found in the file ‘/usr/cvssupport/tc.template’.

     
    BugId:
    

    The script ‘/usr/cvssupport/bugid.verify’ is used to evaluate the log message.

     
    #!/bin/sh
    #
    #       bugid.verify filename
    #
    #  Verify that the log message contains a valid bugid
    #  on the first line.
    #
    if head -1 < $1 | grep '^BugId:[ ]*[0-9][0-9]*$' > /dev/null; then
        exit 0
    elif head -1 < $1 | grep '^BugId:[ ]*none$' > /dev/null; then
        # It is okay to allow commits with 'BugId: none',
        # but do not put that text into the real log message.
        grep -v '^BugId:[ ]*none$' > $1.rewrite
        mv $1.rewrite $1
        exit 0
    else
        echo "No BugId found."
        exit 1
    fi
    

    The ‘verifymsg’ file contains this line:

     
    ^tc     /usr/cvssupport/bugid.verify
    

    The ‘rcsinfo’ file contains this line:

     
    ^tc     /usr/cvssupport/tc.template
    

    The ‘config’ file contains this line:

     
    RereadLogAfterVerify=always
    

    |[[#verifymsg| < ]]| |[[#editinfo-example| > ]]|   |[[#Administrative-files| << ]]| |[[#commit-files| Up ]]| |[[#Environment-variables| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== Editinfo ====

    Note: The ‘editinfo’ feature has been rendered obsolete. To set a default editor for log messages use the CVSEDITOR, EDITOR environment variables (see section [[#Environment-variables|All environment variables which affect CVS]]) or the ‘-e’ global option (see section [[#Global-options|Global options]]). See [[#verifymsg|Verifying log messages]], for information on the use of the ‘verifymsg’ feature for evaluating log messages.

    If you want to make sure that all log messages look the same way, you can use the ‘editinfo’ file to specify a program that is used to edit the log message. This program could be a custom-made editor that always enforces a certain style of the log message, or maybe a simple shell script that calls an editor, and checks that the entered message contains the required fields.

    If no matching line is found in the ‘editinfo’ file, the editor specified in the environment variable $CVSEDITOR is used instead. If that variable is not set, then the environment variable $EDITOR is used instead. If that variable is not set a default will be used. See [[#Committing-your-changes|Committing your changes]].

    The ‘editinfo’ file is often most useful together with the ‘rcsinfo’ file, which can be used to specify a log message template.

    Each line in the ‘editinfo’ file consists of a regular expression and a command-line template. The template must include a program name, and can include any number of arguments. The full path to the current log message template file is appended to the template.

    One thing that should be noted is that the ‘ALL’ keyword is not supported. If more than one matching line is found, the first one is used. This can be useful for specifying a default edit script in a module, and then overriding it in a subdirectory.

    If the repository name does not match any of the regular expressions in this file, the ‘DEFAULT’ line is used, if it is specified.

    If the edit script exits with a non-zero exit status, the commit is aborted.

    Note: when CVS is accessing a remote repository, or when the ‘-m’ or ‘-F’ options to cvs commit are used, ‘editinfo’ will not be consulted. There is no good workaround for this; use ‘verifymsg’ instead.


    |[[#editinfo| < ]]| |[[#loginfo| > ]]|   |[[#Administrative-files| << ]]| |[[#editinfo| Up ]]| |[[#Environment-variables| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ===== Editinfo example =====

    The following is a little silly example of a ‘editinfo’ file, together with the corresponding ‘rcsinfo’ file, the log message template and an editor script. We begin with the log message template. We want to always record a bug-id number on the first line of the log message. The rest of log message is free text. The following template is found in the file ‘/usr/cvssupport/tc.template’.

     
    BugId:
    

    The script ‘/usr/cvssupport/bugid.edit’ is used to edit the log message.

     
    #!/bin/sh
    #
    #       bugid.edit filename
    #
    #  Call $EDITOR on FILENAME, and verify that the
    #  resulting file contains a valid bugid on the first
    #  line.
    if [ "x$EDITOR" = "x" ]; then EDITOR=vi; fi
    if [ "x$CVSEDITOR" = "x" ]; then CVSEDITOR=$EDITOR; fi
    $CVSEDITOR $1
    until head -1|grep '^BugId:[ ]*[0-9][0-9]*$' < $1
    do  echo -n  "No BugId found.  Edit again? ([y]/n)"
        read ans
        case ${ans} in
            n*) exit 1;;
        esac
        $CVSEDITOR $1
    done
    

    The ‘editinfo’ file contains this line:

     
    ^tc     /usr/cvssupport/bugid.edit
    

    The ‘rcsinfo’ file contains this line:

     
    ^tc     /usr/cvssupport/tc.template
    

    |[[#editinfo-example| < ]]| |[[#loginfo-example| > ]]|   |[[#Administrative-files| << ]]| |[[#commit-files| Up ]]| |[[#Environment-variables| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ==== Loginfo ====

    The ‘loginfo’ file is used to control where ‘cvs commit’ log information is sent. The first entry on a line is a regular expression which is tested against the directory that the change is being made to, relative to the $CVSROOT. If a match is found, then the remainder of the line is a filter program that should expect log information on its standard input.

    If the repository name does not match any of the regular expressions in this file, the ‘DEFAULT’ line is used, if it is specified.

    All occurrences of the name ‘ALL’ appearing as a regular expression are used in addition to the first matching regular expression or ‘DEFAULT’.

    The first matching regular expression is used.

    See section [[#commit-files|The commit support files]], for a description of the syntax of the ‘loginfo’ file.

    The user may specify a format string as part of the filter. The string is composed of a ‘%’ followed by a space, or followed by a single format character, or followed by a set of format characters surrounded by ‘{’ and ‘}’ as separators. The format characters are:

    s

    file name

    V

    old version number (pre-checkin)

    v

    new version number (post-checkin)

    All other characters that appear in a format string expand to an empty field (commas separating fields are still provided).

    For example, some valid format strings are ‘%’, ‘%s’, ‘%{s}’, and ‘%{sVv}’.

    The output will be a space separated string of tokens enclosed in quotation marks ("). Any embedded dollar signs ($), backticks (), backslashes (\), or quotation marks will be preceded by a backslash (this allows the shell to correctly parse it as a single string, regardless of the characters it contains). For backwards compatibility, the first token will be the repository subdirectory. The rest of the tokens will be comma-delimited lists of the information requested in the format string. For example, if ‘/u/src/master/yoyodyne/tc’ is the repository, ‘%{sVv}’ is the format string, and three files (ChangeLog, Makefile, foo.c) were modified, the output might be:

     
    "yoyodyne/tc ChangeLog,1.1,1.2 Makefile,1.3,1.4 foo.c,1.12,1.13"
    

    As another example, ‘%{}’ means that only the name of the repository will be generated.

    Note: when CVS is accessing a remote repository, ‘loginfo’ will be run on the remote (i.e., server) side, not the client side (see section [[#Remote-repositories|Remote repositories]]).


    |[[#loginfo| < ]]| |[[#Keeping-a-checked-out-copy| > ]]|   |[[#Administrative-files| << ]]| |[[#loginfo| Up ]]| |[[#Environment-variables| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ===== Loginfo example =====

    The following ‘loginfo’ file, together with the tiny shell-script below, appends all log messages to the file ‘$CVSROOT/CVSROOT/commitlog’, and any commits to the administrative files (inside the ‘CVSROOT’ directory) are also logged in ‘/usr/adm/cvsroot-log’. Commits to the ‘prog1’ directory are mailed to ceder.

     
    ALL             /usr/local/bin/cvs-log $CVSROOT/CVSROOT/commitlog $USER
    ^CVSROOT        /usr/local/bin/cvs-log /usr/adm/cvsroot-log
    ^prog1          Mail -s %s ceder
    

    The shell-script ‘/usr/local/bin/cvs-log’ looks like this:

     
    #!/bin/sh
    (echo "------------------------------------------------------";
     echo -n $2"  ";
     date;
     echo;
     cat) >> $1
    

    |[[#loginfo-example| < ]]| |[[#rcsinfo| > ]]|   |[[#Administrative-files| << ]]| |[[#loginfo| Up ]]| |[[#Environment-variables| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    ===== Keeping a checked out copy =====

    It is often useful to maintain a directory tree which contains files which correspond to the latest version in the repository. For example, other developers might want to refer to the latest sources without having to check them out, or you might be maintaining a web site with CVS and want every checkin to cause the files used by the web server to be updated.

    The way to do this is by having loginfo invoke cvs update. Doing so in the naive way will cause a problem with locks, so the cvs update must be run in the background. Here is an example for unix (this should all be on one line):

     
    ^cyclic-pages		(date; cat; (sleep 2; cd /u/www/local-docs;
     cvs -q update -d) &) >> $CVSROOT/CVSROOT/updatelog 2>&1
    

    This will cause checkins to repository directories starting with cyclic-pages to update the checked out tree in ‘/u/www/local-docs’.


    |[[#Keeping-a-checked-out-copy| < ]]| |[[#cvsignore| > ]]|   |[[#Administrative-files| << ]]| |[[#Administrative-files| Up ]]| |[[#Environment-variables| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Rcsinfo ===

    The ‘rcsinfo’ file can be used to specify a form to edit when filling out the commit log. The ‘rcsinfo’ file has a syntax similar to the ‘verifymsg’, ‘commitinfo’ and ‘loginfo’ files. See section [[#syntax|The common syntax]]. Unlike the other files the second part is not a command-line template. Instead, the part after the regular expression should be a full pathname to a file containing the log message template.

    If the repository name does not match any of the regular expressions in this file, the ‘DEFAULT’ line is used, if it is specified.

    All occurrences of the name ‘ALL’ appearing as a regular expression are used in addition to the first matching regular expression or ‘DEFAULT’.

    The log message template will be used as a default log message. If you specify a log message with ‘cvs commit -m message’ or ‘cvs commit -f file’ that log message will override the template.

    See section [[#verifymsg|Verifying log messages]], for an example ‘rcsinfo’ file.

    When CVS is accessing a remote repository, the contents of ‘rcsinfo’ at the time a directory is first checked out will specify a template. This template will be updated on all ‘cvs update’ commands. It will also be added to new directories added with a ‘cvs add new-directry’ command. In versions of CVS prior to version 1.12, the ‘CVS/Template’ file was not updated. If the CVS server is at version 1.12 or higher an older client may be used and the ‘CVS/Template’ will be updated from the server.


    |[[#rcsinfo| < ]]| |[[#checkoutlist| > ]]|   |[[#Administrative-files| << ]]| |[[#Administrative-files| Up ]]| |[[#Environment-variables| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Ignoring files via cvsignore ===

    There are certain file names that frequently occur inside your working copy, but that you don’t want to put under CVS control. Examples are all the object files that you get while you compile your sources. Normally, when you run ‘cvs update’, it prints a line for each file it encounters that it doesn’t know about (see section [[#update-output|update output]]).

    CVS has a list of files (or sh(1) file name patterns) that it should ignore while running update, import and release. This list is constructed in the following way.

    • The list is initialized to include certain file name patterns: names associated with CVS administration, or with other common source control systems; common names for patch files, object files, archive files, and editor backup files; and other names that are usually artifacts of assorted utilities. Currently, the default list of ignored file name patterns is:
       
          RCS     SCCS    CVS     CVS.adm
          RCSLOG  cvslog.*
          tags    TAGS
          .make.state     .nse_depinfo
          *~      #*      .#*     ,*      _$*     *$
          *.old   *.bak   *.BAK   *.orig  *.rej   .del-*
          *.a     *.olb   *.o     *.obj   *.so    *.exe
          *.Z     *.elc   *.ln
          core
      
    • The per-repository list in ‘$CVSROOT/CVSROOT/cvsignore’ is appended to the list, if that file exists.
    • The per-user list in ‘.cvsignore’ in your home directory is appended to the list, if it exists.
    • Any entries in the environment variable $CVSIGNORE is appended to the list.
    • Any ‘-I’ options given to CVS is appended.
    • As CVS traverses through your directories, the contents of any ‘.cvsignore’ will be appended to the list. The patterns found in ‘.cvsignore’ are only valid for the directory that contains them, not for any sub-directories.

    In any of the 5 places listed above, a single exclamation mark (‘!’) clears the ignore list. This can be used if you want to store any file which normally is ignored by CVS.

    Specifying ‘-I !’ to cvs import will import everything, which is generally what you want to do if you are importing files from a pristine distribution or any other source which is known to not contain any extraneous files. However, looking at the rules above you will see there is a fly in the ointment; if the distribution contains any ‘.cvsignore’ files, then the patterns from those files will be processed even if ‘-I !’ is specified. The only workaround is to remove the ‘.cvsignore’ files in order to do the import. Because this is awkward, in the future ‘-I !’ might be modified to override ‘.cvsignore’ files in each directory.

    Note that the syntax of the ignore files consists of a series of lines, each of which contains a space separated list of filenames. This offers no clean way to specify filenames which contain spaces, but you can use a workaround like ‘foo?bar’ to match a file named ‘foo bar’ (it also matches ‘fooxbar’ and the like). Also note that there is currently no way to specify comments.


    |[[#cvsignore| < ]]| |[[#history-file| > ]]|   |[[#Administrative-files| << ]]| |[[#Administrative-files| Up ]]| |[[#Environment-variables| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === The checkoutlist file ===

    It may be helpful to use CVS to maintain your own files in the ‘CVSROOT’ directory. For example, suppose that you have a script ‘logcommit.pl’ which you run by including the following line in the ‘commitinfo’ administrative file:

     
    ALL   $CVSROOT/CVSROOT/logcommit.pl
    

    To maintain ‘logcommit.pl’ with CVS you would add the following line to the ‘checkoutlist’ administrative file:

     
    logcommit.pl
    

    The format of ‘checkoutlist’ is one line for each file that you want to maintain using CVS, giving the name of the file.

    After setting up ‘checkoutlist’ in this fashion, the files listed there will function just like CVS’s built-in administrative files. For example, when checking in one of the files you should get a message such as:

     
    cvs commit: Rebuilding administrative file database
    

    and the checked out copy in the ‘CVSROOT’ directory should be updated.

    Note that listing ‘passwd’ (see section [[#Password-authentication-server|Setting up the server for password authentication]]) in ‘checkoutlist’ is not recommended for security reasons.

    For information about keeping a checkout out copy in a more general context than the one provided by ‘checkoutlist’, see [[#Keeping-a-checked-out-copy|Keeping a checked out copy]].


    |[[#checkoutlist| < ]]| |[[#Variables| > ]]|   |[[#Administrative-files| << ]]| |[[#Administrative-files| Up ]]| |[[#Environment-variables| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === The history file ===

    The file ‘$CVSROOT/CVSROOT/history’ is used to log information for the history command (see section [[#history|history—Show status of files and users]]). This file must be created to turn on logging. This is done automatically if the cvs init command is used to set up the repository (see section [[#Creating-a-repository|Creating a repository]]).

    The file format of the ‘history’ file is documented only in comments in the CVS source code, but generally programs should use the cvs history command to access it anyway, in case the format changes with future releases of CVS.


    |[[#history-file| < ]]| |[[#config| > ]]|   |[[#Administrative-files| << ]]| |[[#Administrative-files| Up ]]| |[[#Environment-variables| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Expansions in administrative files ===

    Sometimes in writing an administrative file, you might want the file to be able to know various things based on environment CVS is running in. There are several mechanisms to do that.

    To find the home directory of the user running CVS (from the HOME environment variable), use ‘~’ followed by ‘/’ or the end of the line. Likewise for the home directory of user, use ‘~user’. These variables are expanded on the server machine, and don’t get any reasonable expansion if pserver (see section [[#Password-authenticated|Direct connection with password authentication]]) is in use; therefore user variables (see below) may be a better choice to customize behavior based on the user running CVS.

    One may want to know about various pieces of information internal to CVS. A CVS internal variable has the syntax ${variable}, where variable starts with a letter and consists of alphanumeric characters and ‘_’. If the character following variable is a non-alphanumeric character other than ‘_’, the ‘{’ and ‘}’ can be omitted. The CVS internal variables are:

    CVSROOT

    This is the absolute path to the current CVS root directory. See section [[#Repository|The Repository]], for a description of the various ways to specify this, but note that the internal variable contains just the directory and not any of the access method information.

    RCSBIN

    In CVS 1.9.18 and older, this specified the directory where CVS was looking for RCS programs. Because CVS no longer runs RCS programs, specifying this internal variable is now an error.

    CVSEDITOR
    EDITOR
    VISUAL

    These all expand to the same value, which is the editor that CVS is using. See section [[#Global-options|Global options]], for how to specify this.

    USER

    Username of the user running CVS (on the CVS server machine). When using pserver, this is the user specified in the repository specification which need not be the same as the username the server is running as (see section [[#Password-authentication-server|Setting up the server for password authentication]]). Do not confuse this with the environment variable of the same name.

    If you want to pass a value to the administrative files which the user who is running CVS can specify, use a user variable.

    To expand a user variable, the administrative file contains ${=variable}. To set a user variable, specify the global option ‘-s’ to CVS, with argument variable=value. It may be particularly useful to specify this option via ‘.cvsrc’ (see section [[#g_t_007e_002f_002ecvsrc|Default options and the ~/.cvsrc file]]).

    For example, if you want the administrative file to refer to a test directory you might create a user variable TESTDIR. Then if CVS is invoked as

     
    cvs -s TESTDIR=/work/local/tests
    

    and the administrative file contains sh ${=TESTDIR}/runtests, then that string is expanded to sh /work/local/tests/runtests.

    All other strings containing ‘$’ are reserved; there is no way to quote a ‘$’ character so that ‘$’ represents itself.

    Environment variables passed to administrative files are:

    CVS_USER

    The CVS-specific username provided by the user, if it can be provided (currently just for the pserver access method), and to the empty string otherwise. (CVS_USER and USER may differ when ‘$CVSROOT/CVSROOT/passwd’ is used to map CVS usernames to system usernames.)

    LOGNAME

    The username of the system user.

    USER

    Same as LOGNAME. Do not confuse this with the internal variable of the same name.


    |[[#Variables| < ]]| |[[#Environment-variables| > ]]|   |[[#Administrative-files| << ]]| |[[#Administrative-files| Up ]]| |[[#Environment-variables| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === The CVSROOT/config configuration file ===

    The administrative file ‘config’ contains various miscellaneous settings which affect the behavior of CVS. The syntax is slightly different from the other administrative files. Variables are not expanded. Lines which start with ‘#’ are considered comments. Other lines consist of a keyword, ‘=’, and a value. Note that this syntax is very strict. Extraneous spaces or tabs are not permitted.

    Currently defined keywords are:

    RCSBIN=bindir

    For CVS 1.9.12 through 1.9.18, this setting told CVS to look for RCS programs in the bindir directory. Current versions of CVS do not run RCS programs; for compatibility this setting is accepted, but it does nothing.

    SystemAuth=value

    If value is ‘yes’, then pserver should check for users in the system’s user database if not found in ‘CVSROOT/passwd’. If it is ‘no’, then all pserver users must exist in ‘CVSROOT/passwd’. The default is ‘yes’. For more on pserver, see [[#Password-authenticated|Direct connection with password authentication]].

    TopLevelAdmin=value

    Modify the ‘checkout’ command to create a ‘CVS’ directory at the top level of the new working directory, in addition to ‘CVS’ directories created within checked-out directories. The default value is ‘no’.

    This option is useful if you find yourself performing many commands at the top level of your working directory, rather than in one of the checked out subdirectories. The ‘CVS’ directory created there will mean you don’t have to specify CVSROOT for each command. It also provides a place for the ‘CVS/Template’ file (see section [[#Working-directory-storage|How data is stored in the working directory]]).

    LockDir=directory

    Put CVS lock files in directory rather than directly in the repository. This is useful if you want to let users read from the repository while giving them write access only to directory, not to the repository. It can also be used to put the locks on a very fast in-memory file system to speed up locking and unlocking the repository. You need to create directory, but CVS will create subdirectories of directory as it needs them. For information on CVS locks, see [[#Concurrency|Several developers simultaneously attempting to run CVS]].

    Before enabling the LockDir option, make sure that you have tracked down and removed any copies of CVS 1.9 or older. Such versions neither support LockDir, nor will give an error indicating that they don’t support it. The result, if this is allowed to happen, is that some CVS users will put the locks one place, and others will put them another place, and therefore the repository could become corrupted. CVS 1.10 does not support LockDir but it will print a warning if run on a repository with LockDir enabled.

    LogHistory=value

    Control what is logged to the ‘CVSROOT/history’ file (see section [[#history|history—Show status of files and users]]). Default of ‘TOEFWUCGMAR’ (or simply ‘all’) will log all transactions. Any subset of the default is legal. (For example, to only log transactions that modify the ‘*,v’ files, use ‘LogHistory=TMAR’.)

    RereadLogAfterVerify=value

    Modify the ‘commit’ command such that CVS will reread the log message after running the program specified by ‘verifymsg’. value may be one of ‘yes’ or ‘always’, indicating that the log message should always be reread; ‘no’ or ‘never’, indicating that it should never be reread; or value may be ‘stat’, indicating that the file should be checked with the filesystem ‘stat()’ function to see if it has changed (see warning below) before rereading. The default value is ‘always’.

    Note: the ‘stat’ mode can cause CVS to pause for up to one extra second per directory committed. This can be less IO and CPU intensive but is not recommended for use with large repositories

    See section [[#verifymsg|Verifying log messages]], for more information on how verifymsg may be used.

    UserAdminOptions=value

    Control what options will be allowed with the cvs admin command (see section [[#admin|admin—Administration]]) for users not in the cvsadmin group. The value string is a list of single character options which should be allowed. If a user who is not a member of the cvsadmin group tries to execute any cvs admin option which is not listed they will will receive an error message reporting that the option is restricted.

    If no cvsadmin group exists on the server, CVS will ignore the UserAdminOptions keyword (see section [[#admin|admin—Administration]]).

    When not specified, UserAdminOptions defaults to ‘k’. In other words, it defaults to allowing users outside of the cvsadmin group to use the cvs admin command only to change the default keyword expansion mode for files.

    As an example, to restrict users not in the cvsadmin group to using cvs admin to change the default keyword substitution mode, lock revisions, unlock revisions, and replace the log message, use ‘UserAdminOptions=klum’.


    |[[#config| < ]]| |[[#Compatibility| > ]]|   |[[#Administrative-files| << ]]| |[[#Top| Up ]]| |[[#Compatibility| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    == All environment variables which affect CVS ==

    This is a complete list of all environment variables that affect CVS.

    $CVSIGNORE

    A whitespace-separated list of file name patterns that CVS should ignore. See section [[#cvsignore|Ignoring files via cvsignore]].

    $CVSWRAPPERS

    A whitespace-separated list of file name patterns that CVS should treat as wrappers. See section [[#Wrappers|The cvswrappers file]].

    $CVSREAD

    If this is set, checkout and update will try hard to make the files in your working directory read-only. When this is not set, the default behavior is to permit modification of your working files.

    $CVSREADONLYFS

    Turns on read-only repository mode. This allows one to check out from a read-only repository, such as within an anoncvs server, or from a CDROM repository.

    It has the same effect as if the ‘-R’ command-line option is used. This can also allow the use of read-only NFS repositories.

    $CVSUMASK

    Controls permissions of files in the repository. See [[#File-permissions|File permissions]].

    $CVSROOT

    Should contain the full pathname to the root of the CVS source repository (where the RCS files are kept). This information must be available to CVS for most commands to execute; if $CVSROOT is not set, or if you wish to override it for one invocation, you can supply it on the command line: ‘cvs -d cvsroot cvs_command…’ Once you have checked out a working directory, CVS stores the appropriate root (in the file ‘CVS/Root’), so normally you only need to worry about this when initially checking out a working directory.

    $CVSEDITOR
    $EDITOR
    $VISUAL

    Specifies the program to use for recording log messages during commit. $CVSEDITOR overrides $EDITOR, which overrides $VISUAL. See [[#Committing-your-changes|Committing your changes]] for more or [[#Global-options|Global options]] for alternative ways of specifying a log editor.

    $PATH

    If $RCSBIN is not set, and no path is compiled into CVS, it will use $PATH to try to find all programs it uses.

    $HOME
    $HOMEPATH
    $HOMEDRIVE

    Used to locate the directory where the ‘.cvsrc’ file, and other such files, are searched. On Unix, CVS just checks for HOME. On Windows NT, the system will set HOMEDRIVE, for example to ‘d:’ and HOMEPATH, for example to ‘\joe’. On Windows 95, you’ll probably need to set HOMEDRIVE and HOMEPATH yourself.

    $CVS_RSH

    Specifies the external program which CVS connects with, when :ext: access method is specified. see section [[#Connecting-via-rsh|Connecting with rsh]].

    $CVS_SERVER

    Used in client-server mode when accessing a remote repository using RSH. It specifies the name of the program to start on the server side (and any necessary arguments) when accessing a remote repository using the :ext:, :fork:, or :server: access methods. The default value for :ext: and :server: is cvs; the default value for :fork: is the name used to run the client. see section [[#Connecting-via-rsh|Connecting with rsh]]

    $CVS_PASSFILE

    Used in client-server mode when accessing the cvs login server. Default value is ‘$HOME/.cvspass’. see section [[#Password-authentication-client|Using the client with password authentication]]

    $CVS_CLIENT_PORT

    Used in client-server mode to set the port to use when accessing the server via Kerberos, GSSAPI, or CVS’s password authentication protocol if the port is not specified in the CVSROOT. see section [[#Remote-repositories|Remote repositories]]

    $CVS_RCMD_PORT

    Used in client-server mode. If set, specifies the port number to be used when accessing the RCMD demon on the server side. (Currently not used for Unix clients).

    $CVS_CLIENT_LOG

    Used for debugging only in client-server mode. If set, everything sent to the server is logged into ‘$CVS_CLIENT_LOG.in’ and everything sent from the server is logged into ‘$CVS_CLIENT_LOG.out’.

    $CVS_SERVER_SLEEP

    Used only for debugging the server side in client-server mode. If set, delays the start of the server child process the specified amount of seconds so that you can attach to it with a debugger.

    $CVS_IGNORE_REMOTE_ROOT

    For CVS 1.10 and older, setting this variable prevents CVS from overwriting the ‘CVS/Root’ file when the ‘-d’ global option is specified. Later versions of CVS do not rewrite ‘CVS/Root’, so CVS_IGNORE_REMOTE_ROOT has no effect.

    $CVS_LOCAL_BRANCH_NUM

    Setting this variable allows some control over the branch number that is assigned. This is specifically to support the local commit feature of CVSup. If one sets CVS_LOCAL_BRANCH_NUM to (say) 1000 then branches the local repository, the revision numbers will look like 1.66.1000.xx. There is almost a dead-set certainty that there will be no conflicts with version numbers.

    $COMSPEC

    Used under OS/2 only. It specifies the name of the command interpreter and defaults to CMD.EXE.

    $TMPDIR
    $TMP
    $TEMP

    Directory in which temporary files are located. The CVS server uses TMPDIR. See section [[#Global-options|Global options]], for a description of how to specify this. Some parts of CVS will always use ‘/tmp’ (via the tmpnam function provided by the system).

    On Windows NT, TMP is used (via the _tempnam function provided by the system).

    The patch program which is used by the CVS client uses TMPDIR, and if it is not set, uses ‘/tmp’ (at least with GNU patch 2.1). Note that if your server and client are both running CVS 1.9.10 or later, CVS will not invoke an external patch program.

    $CVS_PID

    This is the process identification (aka pid) number of the CVS process. It is often useful in the programs and/or scripts specified by the ‘commitinfo’, ‘verifymsg’, ‘loginfo’ files.


    |[[#Environment-variables| < ]]| |[[#Troubleshooting| > ]]|   |[[#Environment-variables| << ]]| |[[#Top| Up ]]| |[[#Troubleshooting| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    == Compatibility between CVS Versions ==

    The repository format is compatible going back to CVS 1.3. But see [[#Watches-Compatibility|Using watches with old versions of CVS]], if you have copies of CVS 1.6 or older and you want to use the optional developer communication features.

    The working directory format is compatible going back to CVS 1.5. It did change between CVS 1.3 and CVS 1.5. If you run CVS 1.5 or newer on a working directory checked out with CVS 1.3, CVS will convert it, but to go back to CVS 1.3 you need to check out a new working directory with CVS 1.3.

    The remote protocol is interoperable going back to CVS 1.5, but no further (1.5 was the first official release with the remote protocol, but some older versions might still be floating around). In many cases you need to upgrade both the client and the server to take advantage of new features and bugfixes, however.


    |[[#Compatibility| < ]]| |[[#Error-messages| > ]]|   |[[#Compatibility| << ]]| |[[#Top| Up ]]| |[[#Credits| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    == Troubleshooting ==

    If you are having trouble with CVS, this appendix may help. If there is a particular error message which you are seeing, then you can look up the message alphabetically. If not, you can look through the section on other problems to see if your problem is mentioned there.


    |[[#Troubleshooting| < ]]| |[[#Connection| > ]]|   |[[#Troubleshooting| << ]]| |[[#Troubleshooting| Up ]]| |[[#Credits| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Partial list of error messages ===

    Here is a partial list of error messages that you may see from CVS. It is not a complete list—CVS is capable of printing many, many error messages, often with parts of them supplied by the operating system, but the intention is to list the common and/or potentially confusing error messages.

    The messages are alphabetical, but introductory text such as ‘cvs update: ’ is not considered in ordering them.

    In some cases the list includes messages printed by old versions of CVS (partly because users may not be sure which version of CVS they are using at any particular moment).

    file:line: Assertion 'text' failed

    The exact format of this message may vary depending on your system. It indicates a bug in CVS, which can be handled as described in [[#BUGS|Dealing with bugs in CVS or this manual]].

    cvs command: authorization failed: server host rejected access

    This is a generic response when trying to connect to a pserver server which chooses not to provide a specific reason for denying authorization. Check that the username and password specified are correct and that the CVSROOT specified is allowed by ‘--allow-root’ in ‘inetd.conf’. See [[#Password-authenticated|Direct connection with password authentication]].

    cvs command: conflict: removed file was modified by second party

    This message indicates that you removed a file, and someone else modified it. To resolve the conflict, first run ‘cvs add file’. If desired, look at the other party’s modification to decide whether you still want to remove it. If you don’t want to remove it, stop here. If you do want to remove it, proceed with ‘cvs remove file’ and commit your removal.

    cannot change permissions on temporary directory
     
    Operation not permitted
    

    This message has been happening in a non-reproducible, occasional way when we run the client/server testsuite, both on Red Hat Linux 3.0.3 and 4.1. We haven’t been able to figure out what causes it, nor is it known whether it is specific to linux (or even to this particular machine!). If the problem does occur on other unices, ‘Operation not permitted’ would be likely to read ‘Not owner’ or whatever the system in question uses for the unix EPERM error. If you have any information to add, please let us know as described in [[#BUGS|Dealing with bugs in CVS or this manual]]. If you experience this error while using CVS, retrying the operation which produced it should work fine.

    cvs [server aborted]: Cannot check out files into the repository itself

    The obvious cause for this message (especially for non-client/server CVS) is that the CVS root is, for example, ‘/usr/local/cvsroot’ and you try to check out files when you are in a subdirectory, such as ‘/usr/local/cvsroot/test’. However, there is a more subtle cause, which is that the temporary directory on the server is set to a subdirectory of the root (which is also not allowed). If this is the problem, set the temporary directory to somewhere else, for example ‘/var/tmp’; see TMPDIR in [[#Environment-variables|All environment variables which affect CVS]], for how to set the temporary directory.

    cannot commit files as 'root'

    See ‘'root' is not allowed to commit files’.

    cannot open CVS/Entries for reading: No such file or directory

    This generally indicates a CVS internal error, and can be handled as with other CVS bugs (see section [[#BUGS|Dealing with bugs in CVS or this manual]]). Usually there is a workaround—the exact nature of which would depend on the situation but which hopefully could be figured out.

    cvs [init aborted]: cannot open CVS/Root: No such file or directory

    This message is harmless. Provided it is not accompanied by other errors, the operation has completed successfully. This message should not occur with current versions of CVS, but it is documented here for the benefit of CVS 1.9 and older.

    cvs server: cannot open /root/.cvsignore: Permission denied
    cvs [server aborted]: can't chdir(/root): Permission denied

    See [[#Connection|Trouble making a connection to a CVS server]].

    cvs [checkout aborted]: cannot rename file file to CVS/,,file: Invalid argument

    This message has been reported as intermittently happening with CVS 1.9 on Solaris 2.5. The cause is unknown; if you know more about what causes it, let us know as described in [[#BUGS|Dealing with bugs in CVS or this manual]].

    cvs [command aborted]: cannot start server via rcmd

    This, unfortunately, is a rather nonspecific error message which CVS 1.9 will print if you are running the CVS client and it is having trouble connecting to the server. Current versions of CVS should print a much more specific error message. If you get this message when you didn’t mean to run the client at all, you probably forgot to specify :local:, as described in [[#Repository|The Repository]].

    ci: file,v: bad diff output line: Binary files - and /tmp/T2a22651 differ

    CVS 1.9 and older will print this message when trying to check in a binary file if RCS is not correctly installed. Re-read the instructions that came with your RCS distribution and the INSTALL file in the CVS distribution. Alternately, upgrade to a current version of CVS, which checks in files itself rather than via RCS.

    cvs checkout: could not check out file

    With CVS 1.9, this can mean that the co program (part of RCS) returned a failure. It should be preceded by another error message, however it has been observed without another error message and the cause is not well-understood. With the current version of CVS, which does not run co, if this message occurs without another error message, it is definitely a CVS bug (see section [[#BUGS|Dealing with bugs in CVS or this manual]]).

    cvs [login aborted]: could not find out home directory

    This means that you need to set the environment variables that CVS uses to locate your home directory. See the discussion of HOME, HOMEDRIVE, and HOMEPATH in [[#Environment-variables|All environment variables which affect CVS]].

    cvs update: could not merge revision rev of file: No such file or directory

    CVS 1.9 and older will print this message if there was a problem finding the rcsmerge program. Make sure that it is in your PATH, or upgrade to a current version of CVS, which does not require an external rcsmerge program.

    cvs [update aborted]: could not patch file: No such file or directory

    This means that there was a problem finding the patch program. Make sure that it is in your PATH. Note that despite appearances the message is not referring to whether it can find file. If both the client and the server are running a current version of CVS, then there is no need for an external patch program and you should not see this message. But if either client or server is running CVS 1.9, then you need patch.

    cvs update: could not patch file; will refetch

    This means that for whatever reason the client was unable to apply a patch that the server sent. The message is nothing to be concerned about, because inability to apply the patch only slows things down and has no effect on what CVS does.

    dying gasps from server unexpected

    There is a known bug in the server for CVS 1.9.18 and older which can cause this. For me, this was reproducible if I used the ‘-t’ global option. It was fixed by Andy Piper’s 14 Nov 1997 change to src/filesubr.c, if anyone is curious. If you see the message, you probably can just retry the operation which failed, or if you have discovered information concerning its cause, please let us know as described in [[#BUGS|Dealing with bugs in CVS or this manual]].

    end of file from server (consult above messages if any)

    The most common cause for this message is if you are using an external rsh program and it exited with an error. In this case the rsh program should have printed a message, which will appear before the above message. For more information on setting up a CVS client and server, see [[#Remote-repositories|Remote repositories]].

    cvs [update aborted]: EOF in key in RCS file file,v
    cvs [checkout aborted]: EOF while looking for end of string in RCS file file,v

    This means that there is a syntax error in the given RCS file. Note that this might be true even if RCS can read the file OK; CVS does more error checking of errors in the RCS file. That is why you may see this message when upgrading from CVS 1.9 to CVS 1.10. The likely cause for the original corruption is hardware, the operating system, or the like. Of course, if you find a case in which CVS seems to corrupting the file, by all means report it, (see section [[#BUGS|Dealing with bugs in CVS or this manual]]). There are quite a few variations of this error message, depending on exactly where in the RCS file CVS finds the syntax error.

    cvs commit: Executing 'mkmodules'

    This means that your repository is set up for a version of CVS prior to CVS 1.8. When using CVS 1.8 or later, the above message will be preceded by

     
    cvs commit: Rebuilding administrative file database
    

    If you see both messages, the database is being rebuilt twice, which is unnecessary but harmless. If you wish to avoid the duplication, and you have no versions of CVS 1.7 or earlier in use, remove -i mkmodules every place it appears in your modules file. For more information on the modules file, see [[#modules|The modules file]].

    missing author

    Typically this can happen if you created an RCS file with your username set to empty. CVS will, bogusly, create an illegal RCS file with no value for the author field. The solution is to make sure your username is set to a non-empty value and re-create the RCS file.

    cvs [checkout aborted]: no such tag tag

    This message means that CVS isn’t familiar with the tag tag. Usually this means that you have mistyped a tag name; however there are (relatively obscure) cases in which CVS will require you to try a few other CVS commands involving that tag, before you find one which will cause CVS to update the ‘val-tags’ file; see discussion of val-tags in [[#File-permissions|File permissions]]. You only need to worry about this once for a given tag; when a tag is listed in ‘val-tags’, it stays there. Note that using ‘-f’ to not require tag matches does not override this check; see [[#Common-options|Common command options]].

    *PANIC* administration files missing

    This typically means that there is a directory named CVS but it does not contain the administrative files which CVS puts in a CVS directory. If the problem is that you created a CVS directory via some mechanism other than CVS, then the answer is simple, use a name other than CVS. If not, it indicates a CVS bug (see section [[#BUGS|Dealing with bugs in CVS or this manual]]).

    rcs error: Unknown option: -x,v/

    This message will be followed by a usage message for RCS. It means that you have an old version of RCS (probably supplied with your operating system), as well as an old version of CVS. CVS 1.9.18 and earlier only work with RCS version 5 and later; current versions of CVS do not run RCS programs.

    cvs [server aborted]: received broken pipe signal

    This message seems to be caused by a hard-to-track-down bug in CVS or the systems it runs on (we don’t know—we haven’t tracked it down yet!). It seems to happen only after a CVS command has completed, and you should be able to just ignore the message. However, if you have discovered information concerning its cause, please let us know as described in [[#BUGS|Dealing with bugs in CVS or this manual]].

    'root' is not allowed to commit files

    When committing a permanent change, CVS makes a log entry of who committed the change. If you are committing the change logged in as "root" (not under "su" or other root-priv giving program), CVS cannot determine who is actually making the change. As such, by default, CVS disallows changes to be committed by users logged in as "root". (You can disable this option by passing the --enable-rootcommit option to ‘configure’ and recompiling CVS. On some systems this means editing the appropriate ‘config.h’ file before building CVS.)

    Too many arguments!

    This message is typically printed by the ‘log.pl’ script which is in the ‘contrib’ directory in the CVS source distribution. In some versions of CVS, ‘log.pl’ has been part of the default CVS installation. The ‘log.pl’ script gets called from the ‘loginfo’ administrative file. Check that the arguments passed in ‘loginfo’ match what your version of ‘log.pl’ expects. In particular, the ‘log.pl’ from CVS 1.3 and older expects the logfile as an argument whereas the ‘log.pl’ from CVS 1.5 and newer expects the logfile to be specified with a ‘-f’ option. Of course, if you don’t need ‘log.pl’ you can just comment it out of ‘loginfo’.

    cvs [update aborted]: unexpected EOF reading file,v

    See ‘EOF in key in RCS file’.

    cvs [login aborted]: unrecognized auth response from server

    This message typically means that the server is not set up properly. For example, if ‘inetd.conf’ points to a nonexistent cvs executable. To debug it further, find the log file which inetd writes (‘/var/log/messages’ or whatever inetd uses on your system). For details, see [[#Connection|Trouble making a connection to a CVS server]], and [[#Password-authentication-server|Setting up the server for password authentication]].

    cvs commit: Up-to-date check failed for `file'

    This means that someone else has committed a change to that file since the last time that you did a cvs update. So before proceeding with your cvs commit you need to cvs update. CVS will merge the changes that you made and the changes that the other person made. If it does not detect any conflicts it will report ‘M file’ and you are ready to cvs commit. If it detects conflicts it will print a message saying so, will report ‘C file’, and you need to manually resolve the conflict. For more details on this process see [[#Conflicts-example|Conflicts example]].

    Usage: diff3 [-exEX3 [-i | -m] [-L label1 -L label3]] file1 file2 file3
     
    Only one of [exEX3] allowed
    

    This indicates a problem with the installation of diff3 and rcsmerge. Specifically rcsmerge was compiled to look for GNU diff3, but it is finding unix diff3 instead. The exact text of the message will vary depending on the system. The simplest solution is to upgrade to a current version of CVS, which does not rely on external rcsmerge or diff3 programs.

    warning: unrecognized response `text' from cvs server

    If text contains a valid response (such as ‘ok’) followed by an extra carriage return character (on many systems this will cause the second part of the message to overwrite the first part), then it probably means that you are using the ‘:ext:’ access method with a version of rsh, such as most non-unix rsh versions, which does not by default provide a transparent data stream. In such cases you probably want to try ‘:server:’ instead of ‘:ext:’. If text is something else, this may signify a problem with your CVS server. Double-check your installation against the instructions for setting up the CVS server.

    cvs commit: [time] waiting for user's lock in directory

    This is a normal message, not an error. See [[#Concurrency|Several developers simultaneously attempting to run CVS]], for more details.

    cvs commit: warning: editor session failed

    This means that the editor which CVS is using exits with a nonzero exit status. Some versions of vi will do this even when there was not a problem editing the file. If so, point the CVSEDITOR environment variable to a small script such as:

     
    #!/bin/sh
    vi $*
    exit 0
    

    |[[#Error-messages| < ]]| |[[#Other-problems| > ]]|   |[[#Troubleshooting| << ]]| |[[#Troubleshooting| Up ]]| |[[#Credits| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Trouble making a connection to a CVS server ===

    This section concerns what to do if you are having trouble making a connection to a CVS server. If you are running the CVS command line client running on Windows, first upgrade the client to CVS 1.9.12 or later. The error reporting in earlier versions provided much less information about what the problem was. If the client is non-Windows, CVS 1.9 should be fine.

    If the error messages are not sufficient to track down the problem, the next steps depend largely on which access method you are using.

    :ext:

    Try running the rsh program from the command line. For example: "rsh servername cvs -v" should print CVS version information. If this doesn’t work, you need to fix it before you can worry about CVS problems.

    :server:

    You don’t need a command line rsh program to use this access method, but if you have an rsh program around, it may be useful as a debugging tool. Follow the directions given for :ext:.

    :pserver:

    Errors along the lines of "connection refused" typically indicate that inetd isn’t even listening for connections on port 2401 whereas errors like "connection reset by peer", "received broken pipe signal", "recv() from server: EOF", or "end of file from server" typically indicate that inetd is listening for connections but is unable to start CVS (this is frequently caused by having an incorrect path in ‘inetd.conf’ or by firewall software rejecting the connection). "unrecognized auth response" errors are caused by a bad command line in ‘inetd.conf’, typically an invalid option or forgetting to put the ‘pserver’ command at the end of the line. Another less common problem is invisible control characters that your editor "helpfully" added without you noticing.

    One good debugging tool is to "telnet servername 2401". After connecting, send any text (for example "foo" followed by return). If CVS is working correctly, it will respond with

     
    cvs [pserver aborted]: bad auth protocol start: foo
    

    If instead you get:

     
    Usage: cvs [cvs-options] command [command-options-and-arguments]
    ...
    

    then you’re missing the ‘pserver’ command at the end of the line in ‘inetd.conf’; check to make sure that the entire command is on one line and that it’s complete.

    Likewise, if you get something like:

     
    Unknown command: `pserved'
    
    CVS commands are:
            add          Add a new file/directory to the repository
    ...
    

    then you’ve misspelled ‘pserver’ in some way. If it isn’t obvious, check for invisible control characters (particularly carriage returns) in ‘inetd.conf’.

    If it fails to work at all, then make sure inetd is working right. Change the invocation in ‘inetd.conf’ to run the echo program instead of cvs. For example:

     
    2401  stream  tcp  nowait  root /bin/echo echo hello
    

    After making that change and instructing inetd to re-read its configuration file, "telnet servername 2401" should show you the text hello and then the server should close the connection. If this doesn’t work, you need to fix it before you can worry about CVS problems.

    On AIX systems, the system will often have its own program trying to use port 2401. This is AIX’s problem in the sense that port 2401 is registered for use with CVS. I hear that there is an AIX patch available to address this problem.

    Another good debugging tool is the ‘-d’ (debugging) option to inetd. Consult your system documentation for more information.

    If you seem to be connecting but get errors like:

     
    cvs server: cannot open /root/.cvsignore: Permission denied
    cvs [server aborted]: can't chdir(/root): Permission denied
    

    then you probably haven’t specified ‘-f’ in ‘inetd.conf’. (In releases prior to CVS 1.11.1, this problem can be caused by your system setting the $HOME environment variable for programs being run by inetd. In this case, you can either have inetd run a shell script that unsets $HOME and then runs CVS, or you can use env to run CVS with a pristine environment.)

    If you can connect successfully for a while but then can’t, you’ve probably hit inetd’s rate limit. (If inetd receives too many requests for the same service in a short period of time, it assumes that something is wrong and temporarily disables the service.) Check your inetd documentation to find out how to adjust the rate limit (some versions of inetd have a single rate limit, others allow you to set the limit for each service separately.)


    |[[#Connection| < ]]| |[[#Credits| > ]]|   |[[#Troubleshooting| << ]]| |[[#Troubleshooting| Up ]]| |[[#Credits| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    === Other common problems ===

    Here is a list of problems which do not fit into the above categories. They are in no particular order.

    • On Windows, if there is a 30 second or so delay when you run a CVS command, it may mean that you have your home directory set to ‘C:/’, for example (see HOMEDRIVE and HOMEPATH in [[#Environment-variables|All environment variables which affect CVS]]). CVS expects the home directory to not end in a slash, for example ‘C:’ or ‘C:\cvs’.
    • If you are running CVS 1.9.18 or older, and cvs update finds a conflict and tries to merge, as described in [[#Conflicts-example|Conflicts example]], but doesn’t tell you there were conflicts, then you may have an old version of RCS. The easiest solution probably is to upgrade to a current version of CVS, which does not rely on external RCS programs.

    |[[#Other-problems| < ]]| |[[#BUGS| > ]]|   |[[#Troubleshooting| << ]]| |[[#Top| Up ]]| |[[#BUGS| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    == Credits ==

    Roland Pesch, then of Cygnus Support <roland@wrs.com> wrote the manual pages which were distributed with CVS 1.3. Much of their text was copied into this manual. He also read an early draft of this manual and contributed many ideas and corrections.

    The mailing-list info-cvs is sometimes informative. I have included information from postings made by the following persons: David G. Grubbs <dgg@think.com>.

    Some text has been extracted from the man pages for RCS.

    The CVS FAQ by David G. Grubbs has provided useful material. The FAQ is no longer maintained, however, and this manual is about the closest thing there is to a successor (with respect to documenting how to use CVS, at least).

    In addition, the following persons have helped by telling me about mistakes I’ve made:

     
    Roxanne Brunskill <rbrunski@datap.ca>,
    Kathy Dyer <dyer@phoenix.ocf.llnl.gov>,
    Karl Pingle <pingle@acuson.com>,
    Thomas A Peterson <tap@src.honeywell.com>,
    Inge Wallin <ingwa@signum.se>,
    Dirk Koschuetzki <koschuet@fmi.uni-passau.de>
    and Michael Brown <brown@wi.extrel.com>.
    

    The list of contributors here is not comprehensive; for a more complete list of who has contributed to this manual see the file ‘doc/ChangeLog’ in the CVS source distribution.


    |[[#Credits| < ]]| |[[#Index| > ]]|   |[[#Credits| << ]]| |[[#Top| Up ]]| |[[#Index| >> ]]|         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    == Dealing with bugs in CVS or this manual ==

    Neither CVS nor this manual is perfect, and they probably never will be. If you are having trouble using CVS, or think you have found a bug, there are a number of things you can do about it. Note that if the manual is unclear, that can be considered a bug in the manual, so these problems are often worth doing something about as well as problems with CVS itself.

    • If you want someone to help you and fix bugs that you report, there are companies which will do that for a fee. One such company is:
       
      Ximbiot
      319 S. River St.
      Harrisburg, PA  17104-1657
      USA
      Email: info@ximbiot.com
      Phone: (717) 579-6168
      Fax:   (717) 234-3125
      http://ximbiot.com/
      
      
    • If you got CVS through a distributor, such as an operating system vendor or a vendor of freeware CD-ROMs, you may wish to see whether the distributor provides support. Often, they will provide no support or minimal support, but this may vary from distributor to distributor.
    • If you have the skills and time to do so, you may wish to fix the bug yourself. If you wish to submit your fix for inclusion in future releases of CVS, see the file HACKING in the CVS source distribution. It contains much more information on the process of submitting fixes.
    • There may be resources on the net which can help. Two good places to start are:
       
      http://www.cvshome.org
      http://www.loria.fr/~molli/cvs-index.html
      

      If you are so inspired, increasing the information available on the net is likely to be appreciated. For example, before the standard CVS distribution worked on Windows 95, there was a web page with some explanation and patches for running CVS on Windows 95, and various people helped out by mentioning this page on mailing lists or newsgroups when the subject came up.

    • It is also possible to report bugs to bug-cvs. Note that someone may or may not want to do anything with your bug report—if you need a solution consider one of the options mentioned above. People probably do want to hear about bugs which are particularly severe in consequences and/or easy to fix, however. You can also increase your odds by being as clear as possible about the exact nature of the bug and any other relevant information. The way to report bugs is to send email to bug-cvs@gnu.org. Note that submissions to bug-cvs may be distributed under the terms of the GNU Public License, so if you don’t like this, don’t submit them. There is usually no justification for sending mail directly to one of the CVS maintainers rather than to bug-cvs; those maintainers who want to hear about such bug reports read bug-cvs. Also note that sending a bug report to other mailing lists or newsgroups is not a substitute for sending it to bug-cvs. It is fine to discuss CVS bugs on whatever forum you prefer, but there are not necessarily any maintainers reading bug reports sent anywhere except bug-cvs.

    People often ask if there is a list of known bugs or whether a particular bug is a known one. The file BUGS in the CVS source distribution is one list of known bugs, but it doesn’t necessarily try to be comprehensive. Perhaps there will never be a comprehensive, detailed list of known bugs.


    |[[#BUGS| < ]]| [ > ]   |[[#BUGS| << ]]| |[[#Top| Up ]]| [ >> ]         |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    == Index ==
    Jump to: [[#Index-1_cp_symbol-1|!]] [[#Index-1_cp_symbol-2|#]] [[#Index-1_cp_symbol-3|&]] [[#Index-1_cp_symbol-4|-]] [[#Index-1_cp_symbol-5|.]] [[#Index-1_cp_symbol-6|/]] [[#Index-1_cp_symbol-7|:]] [[#Index-1_cp_symbol-8|<]] [[#Index-1_cp_symbol-9|=]] [[#Index-1_cp_symbol-10|>]] [[#Index-1_cp_symbol-11|_]] [[#Index-1_cp_letter-A|A]] [[#Index-1_cp_letter-B|B]] [[#Index-1_cp_letter-C|C]] [[#Index-1_cp_letter-D|D]] [[#Index-1_cp_letter-E|E]] [[#Index-1_cp_letter-F|F]] [[#Index-1_cp_letter-G|G]] [[#Index-1_cp_letter-H|H]] [[#Index-1_cp_letter-I|I]] [[#Index-1_cp_letter-J|J]] [[#Index-1_cp_letter-K|K]] [[#Index-1_cp_letter-L|L]] [[#Index-1_cp_letter-M|M]] [[#Index-1_cp_letter-N|N]] [[#Index-1_cp_letter-O|O]] [[#Index-1_cp_letter-P|P]] [[#Index-1_cp_letter-R|R]] [[#Index-1_cp_letter-S|S]] [[#Index-1_cp_letter-T|T]] [[#Index-1_cp_letter-U|U]] [[#Index-1_cp_letter-V|V]] [[#Index-1_cp_letter-W|W]] [[#Index-1_cp_letter-X|X]] [[#Index-1_cp_letter-Z|Z]]
    Index Entry Section

    !
    [[#index-_0021_002c-in-modules-file|!, in modules file]][[#Excluding-directories|Excluding directories]]

    #
    [[#index-_0023cvs_002elock_002c-removing|#cvs.lock, removing]][[#Concurrency|Several developers simultaneously attempting to run CVS]]
    [[#index-_0023cvs_002elock_002c-technical-details|#cvs.lock, technical details]][[#Locks|CVS locks in the repository]]
    [[#index-_0023cvs_002erfl_002c-and-backups|#cvs.rfl, and backups]][[#Backing-up|Backing up a repository]]
    [[#index-_0023cvs_002erfl_002c-removing|#cvs.rfl, removing]][[#Concurrency|Several developers simultaneously attempting to run CVS]]
    [[#index-_0023cvs_002erfl_002c-technical-details|#cvs.rfl, technical details]][[#Locks|CVS locks in the repository]]
    [[#index-_0023cvs_002etfl|#cvs.tfl]][[#Locks|CVS locks in the repository]]
    [[#index-_0023cvs_002ewfl_002c-removing|#cvs.wfl, removing]][[#Concurrency|Several developers simultaneously attempting to run CVS]]
    [[#index-_0023cvs_002ewfl_002c-technical-details|#cvs.wfl, technical details]][[#Locks|CVS locks in the repository]]

    &
    [[#index-_0026_002c-in-modules-file|&, in modules file]][[#Ampersand-modules|Ampersand modules]]

    -
    [[#index-_002da_002c-in-modules-file|-a, in modules file]][[#Alias-modules|Alias modules]]
    [[#index-_002dd_002c-in-modules-file|-d, in modules file]][[#Module-options|Module options]]
    [[#index-_002de_002c-in-modules-file|-e, in modules file]][[#Module-options|Module options]]
    [[#index-_002de_002c-in-modules-file-1|-e, in modules file]][[#Module-program-options|How the modules file “program options” programs are run]]
    [[#index-_002dj-_0028merging-branches_0029|-j (merging branches)]][[#Merging-a-branch|Merging an entire branch]]
    [[#index-_002dj-_0028merging-branches_0029_002c-and-keyword-substitution|-j (merging branches), and keyword substitution]][[#Merging-and-keywords|Merging and keywords]]
    [[#index-_002dk-_0028keyword-substitution_0029|-k (keyword substitution)]][[#Substitution-modes|Substitution modes]]
    [[#index-_002dkk_002c-to-avoid-conflicts-during-a-merge|-kk, to avoid conflicts during a merge]][[#Merging-and-keywords|Merging and keywords]]
    [[#index-_002do_002c-in-modules-file|-o, in modules file]][[#Module-options|Module options]]
    [[#index-_002do_002c-in-modules-file-1|-o, in modules file]][[#Module-program-options|How the modules file “program options” programs are run]]
    [[#index-_002ds_002c-in-modules-file|-s, in modules file]][[#Module-options|Module options]]
    [[#index-_002dt_002c-in-modules-file|-t, in modules file]][[#Module-options|Module options]]
    [[#index-_002dt_002c-in-modules-file-1|-t, in modules file]][[#Module-program-options|How the modules file “program options” programs are run]]

    .
    [[#index-_002e_0023-files|.# files]][[#update-output|update output]]
    [[#index-_002ebashrc_002c-setting-CVSROOT-in|.bashrc, setting CVSROOT in]][[#Specifying-a-repository|Telling CVS where your repository is]]
    [[#index-_002ecshrc_002c-setting-CVSROOT-in|.cshrc, setting CVSROOT in]][[#Specifying-a-repository|Telling CVS where your repository is]]
    [[#index-_002ecvsrc-file|.cvsrc file]][[#g_t_007e_002f_002ecvsrc|Default options and the ~/.cvsrc file]]
    [[#index-_002eprofile_002c-setting-CVSROOT-in|.profile, setting CVSROOT in]][[#Specifying-a-repository|Telling CVS where your repository is]]
    [[#index-_002etcshrc_002c-setting-CVSROOT-in|.tcshrc, setting CVSROOT in]][[#Specifying-a-repository|Telling CVS where your repository is]]

    /
    [[#index-_002fusr_002flocal_002fcvsroot_002c-as-example-repository|/usr/local/cvsroot, as example repository]][[#Repository|The Repository]]

    :
    [[#index-_003aext_003a_002c-setting-up|:ext:, setting up]][[#Connecting-via-rsh|Connecting with rsh]]
    [[#index-_003aext_003a_002c-troubleshooting|:ext:, troubleshooting]][[#Connection|Trouble making a connection to a CVS server]]
    [[#index-_003afork_003a_002c-setting-up|:fork:, setting up]][[#Connecting-via-fork|Connecting with fork]]
    [[#index-_003agserver_003a_002c-setting-up|:gserver:, setting up]][[#GSSAPI-authenticated|Direct connection with GSSAPI]]
    [[#index-_003akserver_003a_002c-setting-up|:kserver:, setting up]][[#Kerberos-authenticated|Direct connection with kerberos]]
    [[#index-_003alocal_003a_002c-setting-up|:local:, setting up]][[#Repository|The Repository]]
    [[#index-_003apserver_003a_002c-setting-up|:pserver:, setting up]][[#Password-authentication-client|Using the client with password authentication]]
    [[#index-_003apserver_003a_002c-troubleshooting|:pserver:, troubleshooting]][[#Connection|Trouble making a connection to a CVS server]]
    [[#index-_003aserver_003a_002c-setting-up|:server:, setting up]][[#Connecting-via-rsh|Connecting with rsh]]
    [[#index-_003aserver_003a_002c-troubleshooting|:server:, troubleshooting]][[#Connection|Trouble making a connection to a CVS server]]

    <
    [[#index-_003c_003c_003c_003c_003c_003c_003c|<<<<<<<]][[#Conflicts-example|Conflicts example]]

    =
    [[#index-_003d_003d_003d_003d_003d_003d_003d|=======]][[#Conflicts-example|Conflicts example]]

    >
    [[#index-_003e_003e_003e_003e_003e_003e_003e|>>>>>>>]][[#Conflicts-example|Conflicts example]]

    _
    [[#index-_005f_005f-files-_0028VMS_0029|__ files (VMS)]][[#update-output|update output]]

    A
    [[#index-Abandoning-work|Abandoning work]][[#Editing-files|How to edit a file which is being watched]]
    [[#index-Access-a-branch|Access a branch]][[#Accessing-branches|Accessing branches]]
    [[#index-add-_0028subcommand_0029|add (subcommand)]][[#Adding-files|Adding files to a directory]]
    [[#index-Adding-a-tag|Adding a tag]][[#Tags|Tags–Symbolic revisions]]
    [[#index-Adding-files|Adding files]][[#Adding-files|Adding files to a directory]]
    [[#index-Admin-_0028subcommand_0029|Admin (subcommand)]][[#admin|admin—Administration]]
    [[#index-Administrative-files-_0028intro_0029|Administrative files (intro)]][[#Intro-administrative-files|The administrative files]]
    [[#index-Administrative-files-_0028reference_0029|Administrative files (reference)]][[#Administrative-files|Reference manual for Administrative files]]
    [[#index-Administrative-files_002c-editing-them|Administrative files, editing them]][[#Editing-administrative-files|Editing administrative files]]
    [[#index-Alias-modules|Alias modules]][[#Alias-modules|Alias modules]]
    [[#index-ALL-in-commitinfo|ALL in commitinfo]][[#commitinfo|Commitinfo]]
    [[#index-Ampersand-modules|Ampersand modules]][[#Ampersand-modules|Ampersand modules]]
    [[#index-annotate-_0028subcommand_0029|annotate (subcommand)]][[#annotate|Annotate command]]
    [[#index-Atomic-transactions_002c-lack-of|Atomic transactions, lack of]][[#Concurrency|Several developers simultaneously attempting to run CVS]]
    [[#index-Attic|Attic]][[#Attic|The attic]]
    [[#index-Authenticated-client_002c-using|Authenticated client, using]][[#Password-authentication-client|Using the client with password authentication]]
    [[#index-Authenticating-server_002c-setting-up|Authenticating server, setting up]][[#Password-authentication-server|Setting up the server for password authentication]]
    [[#index-Authentication_002c-stream|Authentication, stream]][[#Global-options|Global options]]
    [[#index-Author-keyword|Author keyword]][[#Keyword-list|Keyword List]]
    [[#index-Automatically-ignored-files|Automatically ignored files]][[#cvsignore|Ignoring files via cvsignore]]
    [[#index-Avoiding-editor-invocation|Avoiding editor invocation]][[#Common-options|Common command options]]

    B
    [[#index-Backing-up_002c-repository|Backing up, repository]][[#Backing-up|Backing up a repository]]
    [[#index-Base-directory_002c-in-CVS-directory|Base directory, in CVS directory]][[#Working-directory-storage|How data is stored in the working directory]]
    [[#index-BASE_002c-as-reserved-tag-name|BASE, as reserved tag name]][[#Tags|Tags–Symbolic revisions]]
    [[#index-BASE_002c-special-tag|BASE, special tag]][[#Common-options|Common command options]]
    [[#index-Baserev-file_002c-in-CVS-directory|Baserev file, in CVS directory]][[#Working-directory-storage|How data is stored in the working directory]]
    [[#index-Baserev_002etmp-file_002c-in-CVS-directory|Baserev.tmp file, in CVS directory]][[#Working-directory-storage|How data is stored in the working directory]]
    [[#index-Bill-of-materials|Bill of materials]][[#Builds|How your build system interacts with CVS]]
    [[#index-Binary-files|Binary files]][[#Binary-files|Handling binary files]]
    [[#index-Branch-merge-example|Branch merge example]][[#Merging-a-branch|Merging an entire branch]]
    [[#index-Branch-number|Branch number]][[#Revision-numbers|Revision numbers]]
    [[#index-Branch-number-1|Branch number]][[#Branches-and-revisions|Branches and revisions]]
    [[#index-Branch-tags_002c-deleting|Branch tags, deleting]][[#Modifying-tags|Deleting, moving, and renaming tags]]
    [[#index-Branch-tags_002c-moving|Branch tags, moving]][[#Modifying-tags|Deleting, moving, and renaming tags]]
    [[#index-Branch_002c-accessing|Branch, accessing]][[#Accessing-branches|Accessing branches]]
    [[#index-Branch_002c-check-out|Branch, check out]][[#Accessing-branches|Accessing branches]]
    [[#index-Branch_002c-creating-a|Branch, creating a]][[#Creating-a-branch|Creating a branch]]
    [[#index-Branch_002c-identifying|Branch, identifying]][[#Accessing-branches|Accessing branches]]
    [[#index-Branch_002c-retrieving|Branch, retrieving]][[#Accessing-branches|Accessing branches]]
    [[#index-Branch_002c-vendor_002d|Branch, vendor-]][[#Tracking-sources|Tracking third-party sources]]
    [[#index-Branches-motivation|Branches motivation]][[#Branches-motivation|What branches are good for]]
    [[#index-Branches_002c-copying-changes-between|Branches, copying changes between]][[#Branching-and-merging|Branching and merging]]
    [[#index-Branches_002c-sticky|Branches, sticky]][[#Accessing-branches|Accessing branches]]
    [[#index-Branching|Branching]][[#Branching-and-merging|Branching and merging]]
    [[#index-Bringing-a-file-up-to-date|Bringing a file up to date]][[#Updating-a-file|Bringing a file up to date]]
    [[#index-Bugs-in-this-manual-or-CVS|Bugs in this manual or CVS]][[#BUGS|Dealing with bugs in CVS or this manual]]
    [[#index-Bugs_002c-reporting|Bugs, reporting]][[#BUGS|Dealing with bugs in CVS or this manual]]
    [[#index-Builds|Builds]][[#Builds|How your build system interacts with CVS]]

    C
    [[#index-Changes_002c-copying-between-branches|Changes, copying between branches]][[#Branching-and-merging|Branching and merging]]
    [[#index-Changing-a-log-message|Changing a log message]][[#admin-options|admin options]]
    [[#index-Check-out-a-branch|Check out a branch]][[#Accessing-branches|Accessing branches]]
    [[#index-Checked-out-copy_002c-keeping|Checked out copy, keeping]][[#Keeping-a-checked-out-copy|Keeping a checked out copy]]
    [[#index-Checking-out-source|Checking out source]][[#Getting-the-source|Getting the source]]
    [[#index-checkout-_0028subcommand_0029|checkout (subcommand)]][[#checkout|checkout—Check out sources for editing]]
    [[#index-Checkout-program|Checkout program]][[#Module-options|Module options]]
    [[#index-Checkout_002c-as-term-for-getting-ready-to-edit|Checkout, as term for getting ready to edit]][[#Editing-files|How to edit a file which is being watched]]
    [[#index-Checkout_002c-example|Checkout, example]][[#Getting-the-source|Getting the source]]
    [[#index-checkoutlist|checkoutlist]][[#checkoutlist|The checkoutlist file]]
    [[#index-Choosing_002c-reserved-or-unreserved-checkouts|Choosing, reserved or unreserved checkouts]][[#Choosing-a-model|Choosing between reserved or unreserved checkouts]]
    [[#index-Cleaning-up|Cleaning up]][[#Cleaning-up|Cleaning up]]
    [[#index-Client_002fServer-Operation|Client/Server Operation]][[#Remote-repositories|Remote repositories]]
    [[#index-Client_002fServer-Operation_002c-port-specification|Client/Server Operation, port specification]][[#Remote-repositories|Remote repositories]]
    [[#index-Client_002fServer-Operation_002c-port-specification-1|Client/Server Operation, port specification]][[#Password-authentication-server|Setting up the server for password authentication]]
    [[#index-co-_0028subcommand_0029|co (subcommand)]][[#checkout|checkout—Check out sources for editing]]
    [[#index-Command-reference|Command reference]][[#Invoking-CVS|Quick reference to CVS commands]]
    [[#index-Command-structure|Command structure]][[#Structure|Overall structure of CVS commands]]
    [[#index-Comment-leader|Comment leader]][[#admin-options|admin options]]
    [[#index-commit-_0028subcommand_0029|commit (subcommand)]][[#commit|commit—Check files into the repository]]
    [[#index-commitinfo|‘commitinfo’]][[#commitinfo|Commitinfo]]
    [[#index-commitinfo_002c-command-environment|‘commitinfo’, command environment]][[#commitinfo|Commitinfo]]
    [[#index-commitinfo_002c-working-directory|‘commitinfo’, working directory]][[#commitinfo|Commitinfo]]
    [[#index-Commits_002c-precommit-verification-of|Commits, precommit verification of]][[#commitinfo|Commitinfo]]
    [[#index-Committing-changes-to-files|Committing changes to files]][[#Committing-your-changes|Committing your changes]]
    [[#index-Committing_002c-administrative-support-files|Committing, administrative support files]][[#commit-files|The commit support files]]
    [[#index-Committing_002c-when-to|Committing, when to]][[#When-to-commit|When to commit?]]
    [[#index-Common-options|Common options]][[#Common-options|Common command options]]
    [[#index-Common-syntax-of-info-files|Common syntax of info files]][[#syntax|The common syntax]]
    [[#index-Compatibility_002c-between-CVS-versions|Compatibility, between CVS versions]][[#Compatibility|Compatibility between CVS Versions]]
    [[#index-Compression|Compression]][[#Global-options|Global options]]
    [[#index-Compression-1|Compression]][[#Invoking-CVS|Quick reference to CVS commands]]
    [[#index-COMSPEC_002c-environment-variable|COMSPEC, environment variable]][[#Environment-variables|All environment variables which affect CVS]]
    [[#index-config_002c-in-CVSROOT|config, in CVSROOT]][[#config|The CVSROOT/config configuration file]]
    [[#index-Configuring-keyword-expansion|Configuring keyword expansion]][[#Configuring-keyword-expansion|Configuring Keyord Expansion]]
    [[#index-Conflict-markers|Conflict markers]][[#Conflicts-example|Conflicts example]]
    [[#index-Conflict-resolution|Conflict resolution]][[#Conflicts-example|Conflicts example]]
    [[#index-Conflicts-_0028merge-example_0029|Conflicts (merge example)]][[#Conflicts-example|Conflicts example]]
    [[#index-Contributors-_0028CVS-program_0029|Contributors (CVS program)]][[#What-is-CVS_003f|What is CVS?]]
    [[#index-Contributors-_0028manual_0029|Contributors (manual)]][[#Credits|Credits]]
    [[#index-Copying-a-repository|Copying a repository]][[#Moving-a-repository|Moving a repository]]
    [[#index-Copying-changes|Copying changes]][[#Branching-and-merging|Branching and merging]]
    [[#index-Correcting-a-log-message|Correcting a log message]][[#admin-options|admin options]]
    [[#index-Creating-a-branch|Creating a branch]][[#Creating-a-branch|Creating a branch]]
    [[#index-Creating-a-project|Creating a project]][[#Starting-a-new-project|Starting a project with CVS]]
    [[#index-Creating-a-repository|Creating a repository]][[#Creating-a-repository|Creating a repository]]
    [[#index-Credits-_0028CVS-program_0029|Credits (CVS program)]][[#What-is-CVS_003f|What is CVS?]]
    [[#index-Credits-_0028manual_0029|Credits (manual)]][[#Credits|Credits]]
    [[#index-CVS-1_002e6_002c-and-watches|CVS 1.6, and watches]][[#Watches-Compatibility|Using watches with old versions of CVS]]
    [[#index-CVS-command-structure|CVS command structure]][[#Structure|Overall structure of CVS commands]]
    [[#index-CVS-directory_002c-in-repository|CVS directory, in repository]][[#CVS-in-repository|The CVS directory in the repository]]
    [[#index-CVS-directory_002c-in-working-directory|CVS directory, in working directory]][[#Working-directory-storage|How data is stored in the working directory]]
    [[#index-CVS-passwd-file|CVS passwd file]][[#Password-authentication-server|Setting up the server for password authentication]]
    [[#index-CVS_002c-history-of|CVS, history of]][[#What-is-CVS_003f|What is CVS?]]
    [[#index-CVS_002c-introduction-to|CVS, introduction to]][[#What-is-CVS_003f|What is CVS?]]
    [[#index-CVS_002c-versions-of|CVS, versions of]][[#Compatibility|Compatibility between CVS Versions]]
    [[#index-CVS_002fBase-directory|CVS/Base directory]][[#Working-directory-storage|How data is stored in the working directory]]
    [[#index-CVS_002fBaserev-file|CVS/Baserev file]][[#Working-directory-storage|How data is stored in the working directory]]
    [[#index-CVS_002fBaserev_002etmp-file|CVS/Baserev.tmp file]][[#Working-directory-storage|How data is stored in the working directory]]
    [[#index-CVS_002fEntries-file|CVS/Entries file]][[#Working-directory-storage|How data is stored in the working directory]]
    [[#index-CVS_002fEntries_002eBackup-file|CVS/Entries.Backup file]][[#Working-directory-storage|How data is stored in the working directory]]
    [[#index-CVS_002fEntries_002eLog-file|CVS/Entries.Log file]][[#Working-directory-storage|How data is stored in the working directory]]
    [[#index-CVS_002fEntries_002eStatic-file|CVS/Entries.Static file]][[#Working-directory-storage|How data is stored in the working directory]]
    [[#index-CVS_002fNotify-file|CVS/Notify file]][[#Working-directory-storage|How data is stored in the working directory]]
    [[#index-CVS_002fNotify_002etmp-file|CVS/Notify.tmp file]][[#Working-directory-storage|How data is stored in the working directory]]
    [[#index-CVS_002fRepository-file|CVS/Repository file]][[#Working-directory-storage|How data is stored in the working directory]]
    [[#index-CVS_002fRoot-file|CVS/Root file]][[#Specifying-a-repository|Telling CVS where your repository is]]
    [[#index-CVS_002fTag-file|CVS/Tag file]][[#Working-directory-storage|How data is stored in the working directory]]
    [[#index-CVS_002fTemplate-file|CVS/Template file]][[#Working-directory-storage|How data is stored in the working directory]]
    [[#index-cvsadmin|cvsadmin]][[#admin|admin—Administration]]
    [[#index-CVSEDITOR_002c-environment-variable|CVSEDITOR, environment variable]][[#Committing-your-changes|Committing your changes]]
    [[#index-CVSEDITOR_002c-environment-variable-1|CVSEDITOR, environment variable]][[#Environment-variables|All environment variables which affect CVS]]
    [[#index-CVSEDITOR_002c-internal-variable|CVSEDITOR, internal variable]][[#Variables|Expansions in administrative files]]
    [[#index-CVSHeader-keyword|CVSHeader keyword]][[#Keyword-list|Keyword List]]
    [[#index-cvsignore-_0028admin-file_0029_002c-global|cvsignore (admin file), global]][[#cvsignore|Ignoring files via cvsignore]]
    [[#index-CVSIGNORE_002c-environment-variable|CVSIGNORE, environment variable]][[#Environment-variables|All environment variables which affect CVS]]
    [[#index-CVSREAD_002c-environment-variable|CVSREAD, environment variable]][[#Environment-variables|All environment variables which affect CVS]]
    [[#index-CVSREAD_002c-overriding|CVSREAD, overriding]][[#Global-options|Global options]]
    [[#index-CVSREADONLYFS_002c-environment-variable|CVSREADONLYFS, environment variable]][[#Environment-variables|All environment variables which affect CVS]]
    [[#index-cvsroot|cvsroot]][[#Repository|The Repository]]
    [[#index-CVSROOT-_0028file_0029|CVSROOT (file)]][[#Administrative-files|Reference manual for Administrative files]]
    [[#index-CVSROOT_002c-environment-variable|CVSROOT, environment variable]][[#Specifying-a-repository|Telling CVS where your repository is]]
    [[#index-CVSROOT_002c-internal-variable|CVSROOT, internal variable]][[#Variables|Expansions in administrative files]]
    [[#index-CVSROOT_002c-module-name|CVSROOT, module name]][[#Intro-administrative-files|The administrative files]]
    [[#index-CVSROOT_002c-multiple-repositories|CVSROOT, multiple repositories]][[#Multiple-repositories|Multiple repositories]]
    [[#index-CVSROOT_002c-overriding|CVSROOT, overriding]][[#Global-options|Global options]]
    [[#index-CVSROOT_002c-storage-of-files|CVSROOT, storage of files]][[#CVSROOT-storage|How files are stored in the CVSROOT directory]]
    [[#index-CVSROOT_002fconfig|CVSROOT/config]][[#config|The CVSROOT/config configuration file]]
    [[#index-CVSROOT_002fEmptydir-directory|CVSROOT/Emptydir directory]][[#Working-directory-storage|How data is stored in the working directory]]
    [[#index-CVSUMASK_002c-environment-variable|CVSUMASK, environment variable]][[#File-permissions|File permissions]]
    [[#index-cvswrappers-_0028admin-file_0029|cvswrappers (admin file)]][[#Wrappers|The cvswrappers file]]
    [[#index-CVSWRAPPERS_002c-environment-variable|CVSWRAPPERS, environment variable]][[#Wrappers|The cvswrappers file]]
    [[#index-CVSWRAPPERS_002c-environment-variable-1|CVSWRAPPERS, environment variable]][[#Environment-variables|All environment variables which affect CVS]]
    [[#index-CVS_005fCLIENT_005fLOG_002c-environment-variable|CVS_CLIENT_LOG, environment variable]][[#Environment-variables|All environment variables which affect CVS]]
    [[#index-CVS_005fCLIENT_005fPORT|CVS_CLIENT_PORT]][[#Kerberos-authenticated|Direct connection with kerberos]]
    [[#index-CVS_005fIGNORE_005fREMOTE_005fROOT_002c-environment-variable|CVS_IGNORE_REMOTE_ROOT, environment variable]][[#Environment-variables|All environment variables which affect CVS]]
    [[#index-CVS_005fLOCAL_005fBRANCH_005fNUM_002c-environment-variable|CVS_LOCAL_BRANCH_NUM, environment variable]][[#Environment-variables|All environment variables which affect CVS]]
    [[#index-CVS_005fPASSFILE_002c-environment-variable|CVS_PASSFILE, environment variable]][[#Password-authentication-client|Using the client with password authentication]]
    [[#index-CVS_005fPID_002c-environment-variable|CVS_PID, environment variable]][[#Environment-variables|All environment variables which affect CVS]]
    [[#index-CVS_005fRCMD_005fPORT_002c-environment-variable|CVS_RCMD_PORT, environment variable]][[#Environment-variables|All environment variables which affect CVS]]
    [[#index-CVS_005fRSH_002c-environment-variable|CVS_RSH, environment variable]][[#Environment-variables|All environment variables which affect CVS]]
    [[#index-CVS_005fSERVER_002c-and-_003afork_003a|CVS_SERVER, and :fork:]][[#Connecting-via-fork|Connecting with fork]]
    [[#index-CVS_005fSERVER_002c-environment-variable|CVS_SERVER, environment variable]][[#Connecting-via-rsh|Connecting with rsh]]
    [[#index-CVS_005fSERVER_005fSLEEP_002c-environment-variable|CVS_SERVER_SLEEP, environment variable]][[#Environment-variables|All environment variables which affect CVS]]
    [[#index-CVS_005fUSER_002c-environment-variable|CVS_USER, environment variable]][[#Variables|Expansions in administrative files]]

    D
    [[#index-Date-keyword|Date keyword]][[#Keyword-list|Keyword List]]
    [[#index-Dates|Dates]][[#Common-options|Common command options]]
    [[#index-Dead-state|Dead state]][[#Attic|The attic]]
    [[#index-Decimal-revision-number|Decimal revision number]][[#Revision-numbers|Revision numbers]]
    [[#index-DEFAULT-in-commitinfo|DEFAULT in commitinfo]][[#commitinfo|Commitinfo]]
    [[#index-DEFAULT-in-editinfo|DEFAULT in editinfo]][[#editinfo|Editinfo]]
    [[#index-DEFAULT-in-verifymsg|DEFAULT in ‘verifymsg’]][[#verifymsg|Verifying log messages]]
    [[#index-Defining-a-module|Defining a module]][[#Defining-the-module|Defining the module]]
    [[#index-Defining-modules-_0028intro_0029|Defining modules (intro)]][[#Intro-administrative-files|The administrative files]]
    [[#index-Defining-modules-_0028reference-manual_0029|Defining modules (reference manual)]][[#modules|The modules file]]
    [[#index-Deleting-branch-tags|Deleting branch tags]][[#Modifying-tags|Deleting, moving, and renaming tags]]
    [[#index-Deleting-files|Deleting files]][[#Removing-files|Removing files]]
    [[#index-Deleting-revisions|Deleting revisions]][[#admin-options|admin options]]
    [[#index-Deleting-sticky-tags|Deleting sticky tags]][[#Sticky-tags|Sticky tags]]
    [[#index-Deleting-tags|Deleting tags]][[#Modifying-tags|Deleting, moving, and renaming tags]]
    [[#index-Descending-directories|Descending directories]][[#Recursive-behavior|Recursive behavior]]
    [[#index-Device-nodes|Device nodes]][[#Special-Files|Special Files]]
    [[#index-Diff|Diff]][[#Viewing-differences|Viewing differences]]
    [[#index-diff-_0028subcommand_0029|diff (subcommand)]][[#diff|diff—Show differences between revisions]]
    [[#index-Differences_002c-merging|Differences, merging]][[#Merging-two-revisions|Merging differences between any two revisions]]
    [[#index-Directories_002c-moving|Directories, moving]][[#Moving-directories|Moving and renaming directories]]
    [[#index-Directories_002c-removing|Directories, removing]][[#Removing-directories|Removing directories]]
    [[#index-Directory_002c-descending|Directory, descending]][[#Recursive-behavior|Recursive behavior]]
    [[#index-Disjoint-repositories|Disjoint repositories]][[#Multiple-repositories|Multiple repositories]]
    [[#index-Distributing-log-messages|Distributing log messages]][[#loginfo|Loginfo]]
    [[#index-driver_002ec-_0028merge-example_0029|driver.c (merge example)]][[#Conflicts-example|Conflicts example]]

    E
    [[#index-edit-_0028subcommand_0029|edit (subcommand)]][[#Editing-files|How to edit a file which is being watched]]
    [[#index-editinfo-_0028admin-file_0029|editinfo (admin file)]][[#editinfo|Editinfo]]
    [[#index-Editing-administrative-files|Editing administrative files]][[#Editing-administrative-files|Editing administrative files]]
    [[#index-Editing-the-modules-file|Editing the modules file]][[#Defining-the-module|Defining the module]]
    [[#index-Editor_002c-avoiding-invocation-of|Editor, avoiding invocation of]][[#Common-options|Common command options]]
    [[#index-EDITOR_002c-environment-variable|EDITOR, environment variable]][[#Committing-your-changes|Committing your changes]]
    [[#index-EDITOR_002c-environment-variable-1|EDITOR, environment variable]][[#Environment-variables|All environment variables which affect CVS]]
    [[#index-EDITOR_002c-internal-variable|EDITOR, internal variable]][[#Variables|Expansions in administrative files]]
    [[#index-EDITOR_002c-overriding|EDITOR, overriding]][[#Global-options|Global options]]
    [[#index-Editor_002c-specifying-per-module|Editor, specifying per module]][[#editinfo|Editinfo]]
    [[#index-editors-_0028subcommand_0029|editors (subcommand)]][[#Watch-information|Information about who is watching and editing]]
    [[#index-emerge|emerge]][[#Conflicts-example|Conflicts example]]
    [[#index-Emptydir_002c-in-CVSROOT-directory|Emptydir, in CVSROOT directory]][[#Working-directory-storage|How data is stored in the working directory]]
    [[#index-Encryption|Encryption]][[#Global-options|Global options]]
    [[#index-Entries-file_002c-in-CVS-directory|Entries file, in CVS directory]][[#Working-directory-storage|How data is stored in the working directory]]
    [[#index-Entries_002eBackup-file_002c-in-CVS-directory|Entries.Backup file, in CVS directory]][[#Working-directory-storage|How data is stored in the working directory]]
    [[#index-Entries_002eLog-file_002c-in-CVS-directory|Entries.Log file, in CVS directory]][[#Working-directory-storage|How data is stored in the working directory]]
    [[#index-Entries_002eStatic-file_002c-in-CVS-directory|Entries.Static file, in CVS directory]][[#Working-directory-storage|How data is stored in the working directory]]
    [[#index-Environment-variables|Environment variables]][[#Environment-variables|All environment variables which affect CVS]]
    [[#index-environment-variables_002c-passed-to-administrative-files|environment variables, passed to administrative files]][[#Variables|Expansions in administrative files]]
    [[#index-Errors_002c-reporting|Errors, reporting]][[#BUGS|Dealing with bugs in CVS or this manual]]
    [[#index-Example-of-a-work_002dsession|Example of a work-session]][[#A-sample-session|A sample session]]
    [[#index-Example-of-merge|Example of merge]][[#Conflicts-example|Conflicts example]]
    [[#index-Example_002c-branch-merge|Example, branch merge]][[#Merging-a-branch|Merging an entire branch]]
    [[#index-Excluding-directories_002c-in-modules-file|Excluding directories, in modules file]][[#Excluding-directories|Excluding directories]]
    [[#index-Exit-status_002c-of-commitinfo|Exit status, of commitinfo]][[#commitinfo|Commitinfo]]
    [[#index-Exit-status_002c-of-CVS|Exit status, of CVS]][[#Exit-status|CVS’s exit status]]
    [[#index-Exit-status_002c-of-editor|Exit status, of editor]][[#Error-messages|Partial list of error messages]]
    [[#index-Exit-status_002c-of-taginfo|Exit status, of taginfo]][[#user_002ddefined-logging|User-defined logging]]
    [[#index-Exit-status_002c-of-verifymsg|Exit status, of ‘verifymsg’]][[#verifymsg|Verifying log messages]]
    [[#index-export-_0028subcommand_0029|export (subcommand)]][[#export|export—Export sources from CVS, similar to checkout]]
    [[#index-Export-program|Export program]][[#Module-options|Module options]]

    F
    [[#index-Fetching-source|Fetching source]][[#Getting-the-source|Getting the source]]
    [[#index-File-had-conflicts-on-merge|File had conflicts on merge]][[#File-status|File status]]
    [[#index-File-locking|File locking]][[#Multiple-developers|Multiple developers]]
    [[#index-File-permissions_002c-general|File permissions, general]][[#File-permissions|File permissions]]
    [[#index-File-permissions_002c-Windows_002dspecific|File permissions, Windows-specific]][[#Windows-permissions|File Permission issues specific to Windows]]
    [[#index-File-status|File status]][[#File-status|File status]]
    [[#index-Files_002c-moving|Files, moving]][[#Moving-files|Moving and renaming files]]
    [[#index-Files_002c-reference-manual|Files, reference manual]][[#Administrative-files|Reference manual for Administrative files]]
    [[#index-Fixing-a-log-message|Fixing a log message]][[#admin-options|admin options]]
    [[#index-Forcing-a-tag-match|Forcing a tag match]][[#Common-options|Common command options]]
    [[#index-fork_002c-access-method|fork, access method]][[#Connecting-via-fork|Connecting with fork]]
    [[#index-Form-for-log-message|Form for log message]][[#rcsinfo|Rcsinfo]]
    [[#index-Format-of-CVS-commands|Format of CVS commands]][[#Structure|Overall structure of CVS commands]]

    G
    [[#index-Getting-started|Getting started]][[#A-sample-session|A sample session]]
    [[#index-Getting-the-source|Getting the source]][[#Getting-the-source|Getting the source]]
    [[#index-Global-cvsignore|Global cvsignore]][[#cvsignore|Ignoring files via cvsignore]]
    [[#index-Global-options|Global options]][[#Global-options|Global options]]
    [[#index-Group|Group]][[#File-permissions|File permissions]]
    [[#index-gserver-_0028client_002fserver-connection-method_0029_002c-port-specification|gserver (client/server connection method), port specification]][[#Remote-repositories|Remote repositories]]
    [[#index-gserver-_0028client_002fserver-connection-method_0029_002c-port-specification-1|gserver (client/server connection method), port specification]][[#Password-authentication-server|Setting up the server for password authentication]]
    [[#index-GSSAPI|GSSAPI]][[#GSSAPI-authenticated|Direct connection with GSSAPI]]
    [[#index-Gzip|Gzip]][[#Global-options|Global options]]
    [[#index-Gzip-1|Gzip]][[#Invoking-CVS|Quick reference to CVS commands]]

    H
    [[#index-Hard-links|Hard links]][[#Special-Files|Special Files]]
    [[#index-HEAD_002c-as-reserved-tag-name|HEAD, as reserved tag name]][[#Tags|Tags–Symbolic revisions]]
    [[#index-HEAD_002c-special-tag|HEAD, special tag]][[#Common-options|Common command options]]
    [[#index-Header-keyword|Header keyword]][[#Keyword-list|Keyword List]]
    [[#index-history-_0028subcommand_0029|history (subcommand)]][[#history|history—Show status of files and users]]
    [[#index-History-browsing|History browsing]][[#History-browsing|History browsing]]
    [[#index-History-file|History file]][[#history-file|The history file]]
    [[#index-History-files|History files]][[#Repository-files|Where files are stored within the repository]]
    [[#index-History-of-CVS|History of CVS]][[#What-is-CVS_003f|What is CVS?]]
    [[#index-HOME_002c-environment-variable|HOME, environment variable]][[#Environment-variables|All environment variables which affect CVS]]
    [[#index-HOMEDRIVE_002c-environment-variable|HOMEDRIVE, environment variable]][[#Environment-variables|All environment variables which affect CVS]]
    [[#index-HOMEPATH_002c-environment-variable|HOMEPATH, environment variable]][[#Environment-variables|All environment variables which affect CVS]]

    I
    [[#index-Id-keyword|Id keyword]][[#Keyword-list|Keyword List]]
    [[#index-Ident-_0028shell-command_0029|Ident (shell command)]][[#Using-keywords|Using keywords]]
    [[#index-Identifying-a-branch|Identifying a branch]][[#Accessing-branches|Accessing branches]]
    [[#index-Identifying-files|Identifying files]][[#Keyword-substitution|Keyword substitution]]
    [[#index-Ignored-files|Ignored files]][[#cvsignore|Ignoring files via cvsignore]]
    [[#index-Ignoring-files|Ignoring files]][[#cvsignore|Ignoring files via cvsignore]]
    [[#index-import-_0028subcommand_0029|import (subcommand)]][[#import|import—Import sources into CVS, using vendor branches]]
    [[#index-Importing-files|Importing files]][[#From-files|Creating a directory tree from a number of files]]
    [[#index-Importing-files_002c-from-other-version-control-systems|Importing files, from other version control systems]][[#From-other-version-control-systems|Creating Files From Other Version Control Systems]]
    [[#index-Importing-modules|Importing modules]][[#First-import|Importing for the first time]]
    [[#index-Index|Index]][[#Index|Index]]
    [[#index-inetd_002c-configuring-for-pserver|inetd, configuring for pserver]][[#Password-authentication-server|Setting up the server for password authentication]]
    [[#index-Info-files-_0028syntax_0029|Info files (syntax)]][[#syntax|The common syntax]]
    [[#index-Informing-others|Informing others]][[#Informing-others|Informing others about commits]]
    [[#index-init-_0028subcommand_0029|init (subcommand)]][[#Creating-a-repository|Creating a repository]]
    [[#index-Installed-images-_0028VMS_0029|Installed images (VMS)]][[#File-permissions|File permissions]]
    [[#index-Internal-variables|Internal variables]][[#Variables|Expansions in administrative files]]
    [[#index-Introduction-to-CVS|Introduction to CVS]][[#What-is-CVS_003f|What is CVS?]]
    [[#index-Invoking-CVS|Invoking CVS]][[#Invoking-CVS|Quick reference to CVS commands]]
    [[#index-Isolation|Isolation]][[#History-browsing|History browsing]]

    J
    [[#index-Join|Join]][[#Merging-a-branch|Merging an entire branch]]

    K
    [[#index-Keeping-a-checked-out-copy|Keeping a checked out copy]][[#Keeping-a-checked-out-copy|Keeping a checked out copy]]
    [[#index-Kerberos_002c-using-_003agserver_003a|Kerberos, using :gserver:]][[#GSSAPI-authenticated|Direct connection with GSSAPI]]
    [[#index-Kerberos_002c-using-_003akserver_003a|Kerberos, using :kserver:]][[#Kerberos-authenticated|Direct connection with kerberos]]
    [[#index-Kerberos_002c-using-kerberized-rsh|Kerberos, using kerberized rsh]][[#Connecting-via-rsh|Connecting with rsh]]
    [[#index-Keyword-expansion|Keyword expansion]][[#Keyword-substitution|Keyword substitution]]
    [[#index-Keyword-List|Keyword List]][[#Keyword-list|Keyword List]]
    [[#index-Keyword-substitution|Keyword substitution]][[#Keyword-substitution|Keyword substitution]]
    [[#index-Keyword-substitution_002c-and-merging|Keyword substitution, and merging]][[#Merging-and-keywords|Merging and keywords]]
    [[#index-Keyword-substitution_002c-changing-modes|Keyword substitution, changing modes]][[#Substitution-modes|Substitution modes]]
    [[#index-Kflag|Kflag]][[#Substitution-modes|Substitution modes]]
    [[#index-kinit|kinit]][[#Kerberos-authenticated|Direct connection with kerberos]]
    [[#index-Known-bugs-in-this-manual-or-CVS|Known bugs in this manual or CVS]][[#BUGS|Dealing with bugs in CVS or this manual]]
    [[#index-kserver-_0028client_002fserver-connection-method_0029_002c-port-specification|kserver (client/server connection method), port specification]][[#Remote-repositories|Remote repositories]]
    [[#index-kserver-_0028client_002fserver-connection-method_0029_002c-port-specification-1|kserver (client/server connection method), port specification]][[#Password-authentication-server|Setting up the server for password authentication]]

    L
    [[#index-Layout-of-repository|Layout of repository]][[#Repository|The Repository]]
    [[#index-Left_002dhand-options|Left-hand options]][[#Global-options|Global options]]
    [[#index-Linear-development|Linear development]][[#Revision-numbers|Revision numbers]]
    [[#index-Link_002c-symbolic_002c-importing|Link, symbolic, importing]][[#import-output|import output]]
    [[#index-List_002c-mailing-list|List, mailing list]][[#What-is-CVS_003f|What is CVS?]]
    [[#index-Local-keyword|Local keyword]][[#Keyword-list|Keyword List]]
    [[#index-Locally-Added|Locally Added]][[#File-status|File status]]
    [[#index-Locally-Modified|Locally Modified]][[#File-status|File status]]
    [[#index-Locally-Removed|Locally Removed]][[#File-status|File status]]
    [[#index-LockDir_002c-in-CVSROOT_002fconfig|LockDir, in CVSROOT/config]][[#config|The CVSROOT/config configuration file]]
    [[#index-Locker-keyword|Locker keyword]][[#Keyword-list|Keyword List]]
    [[#index-Locking-files|Locking files]][[#Multiple-developers|Multiple developers]]
    [[#index-Locks_002c-cvs_002c-and-backups|Locks, cvs, and backups]][[#Backing-up|Backing up a repository]]
    [[#index-Locks_002c-cvs_002c-introduction|Locks, cvs, introduction]][[#Concurrency|Several developers simultaneously attempting to run CVS]]
    [[#index-Locks_002c-cvs_002c-technical-details|Locks, cvs, technical details]][[#Locks|CVS locks in the repository]]
    [[#index-log-_0028subcommand_0029|log (subcommand)]][[#log|log—Print out log information for files]]
    [[#index-Log-information_002c-saving|Log information, saving]][[#history-file|The history file]]
    [[#index-Log-keyword|Log keyword]][[#Keyword-list|Keyword List]]
    [[#index-Log-message-entry|Log message entry]][[#Committing-your-changes|Committing your changes]]
    [[#index-Log-message-template|Log message template]][[#rcsinfo|Rcsinfo]]
    [[#index-Log-message_002c-correcting|Log message, correcting]][[#admin-options|admin options]]
    [[#index-Log-message_002c-verifying|Log message, verifying]][[#verifymsg|Verifying log messages]]
    [[#index-Log-messages|Log messages]][[#loginfo|Loginfo]]
    [[#index-Log-messages_002c-editing|Log messages, editing]][[#editinfo|Editinfo]]
    [[#index-LogHistory_002c-in-CVSROOT_002fconfig|LogHistory, in CVSROOT/config]][[#config|The CVSROOT/config configuration file]]
    [[#index-Login-_0028subcommand_0029|Login (subcommand)]][[#Password-authentication-client|Using the client with password authentication]]
    [[#index-loginfo-_0028admin-file_0029|loginfo (admin file)]][[#loginfo|Loginfo]]
    [[#index-LOGNAME_002c-environment-variable|LOGNAME, environment variable]][[#Variables|Expansions in administrative files]]
    [[#index-Logout-_0028subcommand_0029|Logout (subcommand)]][[#Password-authentication-client|Using the client with password authentication]]

    M
    [[#index-Mail_002c-automatic-mail-on-commit|Mail, automatic mail on commit]][[#Informing-others|Informing others about commits]]
    [[#index-Mailing-list|Mailing list]][[#What-is-CVS_003f|What is CVS?]]
    [[#index-Mailing-log-messages|Mailing log messages]][[#loginfo|Loginfo]]
    [[#index-Main-trunk-and-branches|Main trunk and branches]][[#Branching-and-merging|Branching and merging]]
    [[#index-make|make]][[#Builds|How your build system interacts with CVS]]
    [[#index-Many-repositories|Many repositories]][[#Multiple-repositories|Multiple repositories]]
    [[#index-Markers_002c-conflict|Markers, conflict]][[#Conflicts-example|Conflicts example]]
    [[#index-Merge_002c-an-example|Merge, an example]][[#Conflicts-example|Conflicts example]]
    [[#index-Merge_002c-branch-example|Merge, branch example]][[#Merging-a-branch|Merging an entire branch]]
    [[#index-Merging|Merging]][[#Branching-and-merging|Branching and merging]]
    [[#index-Merging-a-branch|Merging a branch]][[#Merging-a-branch|Merging an entire branch]]
    [[#index-Merging-a-file|Merging a file]][[#Updating-a-file|Bringing a file up to date]]
    [[#index-Merging-two-revisions|Merging two revisions]][[#Merging-two-revisions|Merging differences between any two revisions]]
    [[#index-Merging_002c-and-keyword-substitution|Merging, and keyword substitution]][[#Merging-and-keywords|Merging and keywords]]
    [[#index-mkmodules|mkmodules]][[#Error-messages|Partial list of error messages]]
    [[#index-Modifications_002c-copying-between-branches|Modifications, copying between branches]][[#Branching-and-merging|Branching and merging]]
    [[#index-Module-status|Module status]][[#Module-options|Module options]]
    [[#index-Module_002c-defining|Module, defining]][[#Defining-the-module|Defining the module]]
    [[#index-Modules-_0028admin-file_0029|Modules (admin file)]][[#modules|The modules file]]
    [[#index-Modules-file|Modules file]][[#Intro-administrative-files|The administrative files]]
    [[#index-Modules-file-program-options|Modules file program options]][[#Module-program-options|How the modules file “program options” programs are run]]
    [[#index-Modules-file_002c-changing|Modules file, changing]][[#Defining-the-module|Defining the module]]
    [[#index-modules_002edb|modules.db]][[#CVSROOT-storage|How files are stored in the CVSROOT directory]]
    [[#index-modules_002edir|modules.dir]][[#CVSROOT-storage|How files are stored in the CVSROOT directory]]
    [[#index-modules_002epag|modules.pag]][[#CVSROOT-storage|How files are stored in the CVSROOT directory]]
    [[#index-Motivation-for-branches|Motivation for branches]][[#Branches-motivation|What branches are good for]]
    [[#index-Moving-a-repository|Moving a repository]][[#Moving-a-repository|Moving a repository]]
    [[#index-Moving-branch-tags|Moving branch tags]][[#Modifying-tags|Deleting, moving, and renaming tags]]
    [[#index-Moving-directories|Moving directories]][[#Moving-directories|Moving and renaming directories]]
    [[#index-Moving-files|Moving files]][[#Moving-files|Moving and renaming files]]
    [[#index-Moving-tags|Moving tags]][[#Modifying-tags|Deleting, moving, and renaming tags]]
    [[#index-Multiple-developers|Multiple developers]][[#Multiple-developers|Multiple developers]]
    [[#index-Multiple-repositories|Multiple repositories]][[#Multiple-repositories|Multiple repositories]]

    N
    [[#index-Name-keyword|Name keyword]][[#Keyword-list|Keyword List]]
    [[#index-Name_002c-symbolic-_0028tag_0029|Name, symbolic (tag)]][[#Tags|Tags–Symbolic revisions]]
    [[#index-Needs-Checkout|Needs Checkout]][[#File-status|File status]]
    [[#index-Needs-Merge|Needs Merge]][[#File-status|File status]]
    [[#index-Needs-Patch|Needs Patch]][[#File-status|File status]]
    [[#index-Newsgroups|Newsgroups]][[#What-is-CVS_003f|What is CVS?]]
    [[#index-notify-_0028admin-file_0029|notify (admin file)]][[#Getting-Notified|Telling CVS to notify you]]
    [[#index-Notify-file_002c-in-CVS-directory|Notify file, in CVS directory]][[#Working-directory-storage|How data is stored in the working directory]]
    [[#index-Notify_002etmp-file_002c-in-CVS-directory|Notify.tmp file, in CVS directory]][[#Working-directory-storage|How data is stored in the working directory]]
    [[#index-Number_002c-branch|Number, branch]][[#Revision-numbers|Revision numbers]]
    [[#index-Number_002c-branch-1|Number, branch]][[#Branches-and-revisions|Branches and revisions]]
    [[#index-Number_002c-revision_002d|Number, revision-]][[#Revision-numbers|Revision numbers]]

    O
    [[#index-Option-defaults|Option defaults]][[#g_t_007e_002f_002ecvsrc|Default options and the ~/.cvsrc file]]
    [[#index-Options_002c-global|Options, global]][[#Global-options|Global options]]
    [[#index-Options_002c-in-modules-file|Options, in modules file]][[#Module-options|Module options]]
    [[#index-Outdating-revisions|Outdating revisions]][[#admin-options|admin options]]
    [[#index-Overlap|Overlap]][[#Updating-a-file|Bringing a file up to date]]
    [[#index-Overriding-CVSREAD|Overriding CVSREAD]][[#Global-options|Global options]]
    [[#index-Overriding-CVSROOT|Overriding CVSROOT]][[#Global-options|Global options]]
    [[#index-Overriding-EDITOR|Overriding EDITOR]][[#Global-options|Global options]]
    [[#index-Overriding-RCSBIN|Overriding RCSBIN]][[#Global-options|Global options]]
    [[#index-Overriding-TMPDIR|Overriding TMPDIR]][[#Global-options|Global options]]
    [[#index-Overview|Overview]][[#Overview|Overview]]
    [[#index-Ownership_002c-saving-in-CVS|Ownership, saving in CVS]][[#Special-Files|Special Files]]

    P
    [[#index-Parallel-repositories|Parallel repositories]][[#Multiple-repositories|Multiple repositories]]
    [[#index-passwd-_0028admin-file_0029|passwd (admin file)]][[#Password-authentication-server|Setting up the server for password authentication]]
    [[#index-Password-client_002c-using|Password client, using]][[#Password-authentication-client|Using the client with password authentication]]
    [[#index-Password-server_002c-setting-up|Password server, setting up]][[#Password-authentication-server|Setting up the server for password authentication]]
    [[#index-PATH_002c-environment-variable|PATH, environment variable]][[#Environment-variables|All environment variables which affect CVS]]
    [[#index-Per_002ddirectory-sticky-tags_002fdates|Per-directory sticky tags/dates]][[#Working-directory-storage|How data is stored in the working directory]]
    [[#index-Per_002dmodule-editor|Per-module editor]][[#editinfo|Editinfo]]
    [[#index-Permissions_002c-general|Permissions, general]][[#File-permissions|File permissions]]
    [[#index-Permissions_002c-saving-in-CVS|Permissions, saving in CVS]][[#Special-Files|Special Files]]
    [[#index-Permissions_002c-Windows_002dspecific|Permissions, Windows-specific]][[#Windows-permissions|File Permission issues specific to Windows]]
    [[#index-Policy|Policy]][[#When-to-commit|When to commit?]]
    [[#index-port_002c-specifying-for-remote-repositories|port, specifying for remote repositories]][[#Remote-repositories|Remote repositories]]
    [[#index-port_002c-specifying-for-remote-repositories-1|port, specifying for remote repositories]][[#Password-authentication-server|Setting up the server for password authentication]]
    [[#index-Precommit-checking|Precommit checking]][[#commitinfo|Commitinfo]]
    [[#index-pserver-_0028client_002fserver-connection-method_0029_002c-port-specification|pserver (client/server connection method), port specification]][[#Remote-repositories|Remote repositories]]
    [[#index-pserver-_0028client_002fserver-connection-method_0029_002c-port-specification-1|pserver (client/server connection method), port specification]][[#Password-authentication-server|Setting up the server for password authentication]]
    [[#index-pserver-_0028subcommand_0029|pserver (subcommand)]][[#Password-authentication-server|Setting up the server for password authentication]]
    [[#index-PVCS_002c-importing-files-from|PVCS, importing files from]][[#From-other-version-control-systems|Creating Files From Other Version Control Systems]]

    R
    [[#index-RCS-history-files|RCS history files]][[#Repository-files|Where files are stored within the repository]]
    [[#index-RCS-revision-numbers|RCS revision numbers]][[#Tags|Tags–Symbolic revisions]]
    [[#index-RCS_002c-importing-files-from|RCS, importing files from]][[#From-other-version-control-systems|Creating Files From Other Version Control Systems]]
    [[#index-RCS_002dstyle-locking|RCS-style locking]][[#Multiple-developers|Multiple developers]]
    [[#index-RCSBIN_002c-in-CVSROOT_002fconfig|RCSBIN, in CVSROOT/config]][[#config|The CVSROOT/config configuration file]]
    [[#index-RCSBIN_002c-internal-variable|RCSBIN, internal variable]][[#Variables|Expansions in administrative files]]
    [[#index-RCSBIN_002c-overriding|RCSBIN, overriding]][[#Global-options|Global options]]
    [[#index-RCSfile-keyword|RCSfile keyword]][[#Keyword-list|Keyword List]]
    [[#index-rcsinfo-_0028admin-file_0029|rcsinfo (admin file)]][[#rcsinfo|Rcsinfo]]
    [[#index-rdiff-_0028subcommand_0029|rdiff (subcommand)]][[#rdiff|rdiff—’patch’ format diffs between releases]]
    [[#index-Read_002donly-files_002c-and-_002dr|Read-only files, and -r]][[#Global-options|Global options]]
    [[#index-Read_002donly-files_002c-and-CVSREAD|Read-only files, and CVSREAD]][[#Environment-variables|All environment variables which affect CVS]]
    [[#index-Read_002donly-files_002c-and-watches|Read-only files, and watches]][[#Setting-a-watch|Telling CVS to watch certain files]]
    [[#index-Read_002donly-files_002c-in-repository|Read-only files, in repository]][[#File-permissions|File permissions]]
    [[#index-Read_002donly-mode|Read-only mode]][[#Global-options|Global options]]
    [[#index-Read_002donly-repository-access|Read-only repository access]][[#Read_002donly-access|Read-only repository access]]
    [[#index-Read_002donly-repository-mode|Read-only repository mode]][[#Global-options|Global options]]
    [[#index-readers-_0028admin-file_0029|readers (admin file)]][[#Read_002donly-access|Read-only repository access]]
    [[#index-Recursive-_0028directory-descending_0029|Recursive (directory descending)]][[#Recursive-behavior|Recursive behavior]]
    [[#index-Reference-manual-_0028files_0029|Reference manual (files)]][[#Administrative-files|Reference manual for Administrative files]]
    [[#index-Reference-manual-for-variables|Reference manual for variables]][[#Environment-variables|All environment variables which affect CVS]]
    [[#index-Reference_002c-commands|Reference, commands]][[#Invoking-CVS|Quick reference to CVS commands]]
    [[#index-Regular-expression-syntax|Regular expression syntax]][[#syntax|The common syntax]]
    [[#index-Regular-modules|Regular modules]][[#Regular-modules|Regular modules]]
    [[#index-release-_0028subcommand_0029|release (subcommand)]][[#release|release—Indicate that a Module is no longer in use]]
    [[#index-Releases_002c-revisions-and-versions|Releases, revisions and versions]][[#Versions-revisions-releases|Versions, revisions and releases]]
    [[#index-Releasing-your-working-copy|Releasing your working copy]][[#Cleaning-up|Cleaning up]]
    [[#index-Remote-repositories|Remote repositories]][[#Remote-repositories|Remote repositories]]
    [[#index-Remote-repositories_002c-port-specification|Remote repositories, port specification]][[#Remote-repositories|Remote repositories]]
    [[#index-Remote-repositories_002c-port-specification-1|Remote repositories, port specification]][[#Password-authentication-server|Setting up the server for password authentication]]
    [[#index-Remove-_0028subcommand_0029|Remove (subcommand)]][[#Removing-files|Removing files]]
    [[#index-Removing-a-change|Removing a change]][[#Merging-two-revisions|Merging differences between any two revisions]]
    [[#index-Removing-branch-tags|Removing branch tags]][[#Modifying-tags|Deleting, moving, and renaming tags]]
    [[#index-Removing-directories|Removing directories]][[#Removing-directories|Removing directories]]
    [[#index-Removing-files|Removing files]][[#Removing-files|Removing files]]
    [[#index-Removing-tags|Removing tags]][[#Modifying-tags|Deleting, moving, and renaming tags]]
    [[#index-Removing-your-working-copy|Removing your working copy]][[#Cleaning-up|Cleaning up]]
    [[#index-Renaming-directories|Renaming directories]][[#Moving-directories|Moving and renaming directories]]
    [[#index-Renaming-files|Renaming files]][[#Moving-files|Moving and renaming files]]
    [[#index-Renaming-tags|Renaming tags]][[#Modifying-tags|Deleting, moving, and renaming tags]]
    [[#index-Replacing-a-log-message|Replacing a log message]][[#admin-options|admin options]]
    [[#index-Reporting-bugs|Reporting bugs]][[#BUGS|Dealing with bugs in CVS or this manual]]
    [[#index-Repositories_002c-multiple|Repositories, multiple]][[#Multiple-repositories|Multiple repositories]]
    [[#index-Repositories_002c-remote|Repositories, remote]][[#Remote-repositories|Remote repositories]]
    [[#index-Repositories_002c-remote_002c-port-specification|Repositories, remote, port specification]][[#Remote-repositories|Remote repositories]]
    [[#index-Repositories_002c-remote_002c-port-specification-1|Repositories, remote, port specification]][[#Password-authentication-server|Setting up the server for password authentication]]
    [[#index-Repository-_0028intro_0029|Repository (intro)]][[#Repository|The Repository]]
    [[#index-Repository-file_002c-in-CVS-directory|Repository file, in CVS directory]][[#Working-directory-storage|How data is stored in the working directory]]
    [[#index-Repository_002c-backing-up|Repository, backing up]][[#Backing-up|Backing up a repository]]
    [[#index-Repository_002c-example|Repository, example]][[#Repository|The Repository]]
    [[#index-Repository_002c-how-data-is-stored|Repository, how data is stored]][[#Repository-storage|How data is stored in the repository]]
    [[#index-Repository_002c-moving|Repository, moving]][[#Moving-a-repository|Moving a repository]]
    [[#index-Repository_002c-setting-up|Repository, setting up]][[#Creating-a-repository|Creating a repository]]
    [[#index-RereadLogAfterVerify_002c-in-CVSROOT_002fconfig|RereadLogAfterVerify, in CVSROOT/config]][[#config|The CVSROOT/config configuration file]]
    [[#index-Reserved-checkouts|Reserved checkouts]][[#Multiple-developers|Multiple developers]]
    [[#index-Resetting-sticky-tags|Resetting sticky tags]][[#Sticky-tags|Sticky tags]]
    [[#index-Resolving-a-conflict|Resolving a conflict]][[#Conflicts-example|Conflicts example]]
    [[#index-Restoring-old-version-of-removed-file|Restoring old version of removed file]][[#Merging-two-revisions|Merging differences between any two revisions]]
    [[#index-Resurrecting-old-version-of-dead-file|Resurrecting old version of dead file]][[#Merging-two-revisions|Merging differences between any two revisions]]
    [[#index-Retrieve-a-branch|Retrieve a branch]][[#Accessing-branches|Accessing branches]]
    [[#index-Retrieving-an-old-revision-using-tags|Retrieving an old revision using tags]][[#Tags|Tags–Symbolic revisions]]
    [[#index-Reverting-to-repository-version|Reverting to repository version]][[#Editing-files|How to edit a file which is being watched]]
    [[#index-Revision-keyword|Revision keyword]][[#Keyword-list|Keyword List]]
    [[#index-Revision-management|Revision management]][[#Revision-management|Revision management]]
    [[#index-Revision-numbers|Revision numbers]][[#Revision-numbers|Revision numbers]]
    [[#index-Revision-numbers-_0028branches_0029|Revision numbers (branches)]][[#Branches-and-revisions|Branches and revisions]]
    [[#index-Revision-tree|Revision tree]][[#Revision-numbers|Revision numbers]]
    [[#index-Revision-tree_002c-making-branches|Revision tree, making branches]][[#Branching-and-merging|Branching and merging]]
    [[#index-Revisions_002c-merging-differences-between|Revisions, merging differences between]][[#Merging-two-revisions|Merging differences between any two revisions]]
    [[#index-Revisions_002c-versions-and-releases|Revisions, versions and releases]][[#Versions-revisions-releases|Versions, revisions and releases]]
    [[#index-Right_002dhand-options|Right-hand options]][[#Common-options|Common command options]]
    [[#index-Root-file_002c-in-CVS-directory|Root file, in CVS directory]][[#Specifying-a-repository|Telling CVS where your repository is]]
    [[#index-rsh|rsh]][[#Connecting-via-rsh|Connecting with rsh]]
    [[#index-rsh-replacements-_0028Kerberized_002c-SSH_002c-_0026c_0029|rsh replacements (Kerberized, SSH, &c)]][[#Connecting-via-rsh|Connecting with rsh]]
    [[#index-rtag-_0028subcommand_0029|rtag (subcommand)]][[#Tagging-by-date_002ftag|Specifying what to tag by date or revision]]
    [[#index-rtag-_0028subcommand_0029_002c-creating-a-branch-using|rtag (subcommand), creating a branch using]][[#Creating-a-branch|Creating a branch]]

    S
    [[#index-Saving-space|Saving space]][[#admin-options|admin options]]
    [[#index-SCCS_002c-importing-files-from|SCCS, importing files from]][[#From-other-version-control-systems|Creating Files From Other Version Control Systems]]
    [[#index-Security_002c-file-permissions-in-repository|Security, file permissions in repository]][[#File-permissions|File permissions]]
    [[#index-Security_002c-GSSAPI|Security, GSSAPI]][[#GSSAPI-authenticated|Direct connection with GSSAPI]]
    [[#index-Security_002c-kerberos|Security, kerberos]][[#Kerberos-authenticated|Direct connection with kerberos]]
    [[#index-Security_002c-of-pserver|Security, of pserver]][[#Password-authentication-security|Security considerations with password authentication]]
    [[#index-Security_002c-setuid|Security, setuid]][[#File-permissions|File permissions]]
    [[#index-Server_002c-CVS|Server, CVS]][[#Remote-repositories|Remote repositories]]
    [[#index-Server_002c-temporary-directories|Server, temporary directories]][[#Server-temporary-directory|Temporary directories for the server]]
    [[#index-Setgid|Setgid]][[#File-permissions|File permissions]]
    [[#index-Setting-up-a-repository|Setting up a repository]][[#Creating-a-repository|Creating a repository]]
    [[#index-Setuid|Setuid]][[#File-permissions|File permissions]]
    [[#index-Source-keyword|Source keyword]][[#Keyword-list|Keyword List]]
    [[#index-Source_002c-getting-CVS-source|Source, getting CVS source]][[#What-is-CVS_003f|What is CVS?]]
    [[#index-Source_002c-getting-from-CVS|Source, getting from CVS]][[#Getting-the-source|Getting the source]]
    [[#index-Special-files|Special files]][[#Special-Files|Special Files]]
    [[#index-Specifying-dates|Specifying dates]][[#Common-options|Common command options]]
    [[#index-Spreading-information|Spreading information]][[#Informing-others|Informing others about commits]]
    [[#index-SSH-_0028rsh-replacement_0029|SSH (rsh replacement)]][[#Connecting-via-rsh|Connecting with rsh]]
    [[#index-Starting-a-project-with-CVS|Starting a project with CVS]][[#Starting-a-new-project|Starting a project with CVS]]
    [[#index-State-keyword|State keyword]][[#Keyword-list|Keyword List]]
    [[#index-Status-of-a-file|Status of a file]][[#File-status|File status]]
    [[#index-Status-of-a-module|Status of a module]][[#Module-options|Module options]]
    [[#index-Sticky-date|Sticky date]][[#Sticky-tags|Sticky tags]]
    [[#index-Sticky-tags|Sticky tags]][[#Sticky-tags|Sticky tags]]
    [[#index-Sticky-tags_002c-resetting|Sticky tags, resetting]][[#Sticky-tags|Sticky tags]]
    [[#index-Sticky-tags_002fdates_002c-per_002ddirectory|Sticky tags/dates, per-directory]][[#Working-directory-storage|How data is stored in the working directory]]
    [[#index-Storing-log-messages|Storing log messages]][[#loginfo|Loginfo]]
    [[#index-Stream-authentication|Stream authentication]][[#Global-options|Global options]]
    [[#index-Structure|Structure]][[#Structure|Overall structure of CVS commands]]
    [[#index-Subdirectories|Subdirectories]][[#Recursive-behavior|Recursive behavior]]
    [[#index-Support_002c-getting-CVS-support|Support, getting CVS support]][[#BUGS|Dealing with bugs in CVS or this manual]]
    [[#index-Symbolic-link_002c-importing|Symbolic link, importing]][[#import-output|import output]]
    [[#index-Symbolic-links|Symbolic links]][[#Special-Files|Special Files]]
    [[#index-Symbolic-name-_0028tag_0029|Symbolic name (tag)]][[#Tags|Tags–Symbolic revisions]]
    [[#index-Syntax-of-info-files|Syntax of info files]][[#syntax|The common syntax]]
    [[#index-SystemAuth_002c-in-CVSROOT_002fconfig|SystemAuth, in CVSROOT/config]][[#config|The CVSROOT/config configuration file]]

    T
    [[#index-tag-_0028subcommand_0029|tag (subcommand)]][[#Tagging-the-working-directory|Specifying what to tag from the working directory]]
    [[#index-tag-_0028subcommand_0029_002c-creating-a-branch-using|tag (subcommand), creating a branch using]][[#Creating-a-branch|Creating a branch]]
    [[#index-tag-_0028subcommand_0029_002c-introduction|tag (subcommand), introduction]][[#Tags|Tags–Symbolic revisions]]
    [[#index-Tag-file_002c-in-CVS-directory|Tag file, in CVS directory]][[#Working-directory-storage|How data is stored in the working directory]]
    [[#index-Tag-program|Tag program]][[#Module-options|Module options]]
    [[#index-taginfo|taginfo]][[#user_002ddefined-logging|User-defined logging]]
    [[#index-Tags|Tags]][[#Tags|Tags–Symbolic revisions]]
    [[#index-Tags_002c-deleting|Tags, deleting]][[#Modifying-tags|Deleting, moving, and renaming tags]]
    [[#index-Tags_002c-example|Tags, example]][[#Tags|Tags–Symbolic revisions]]
    [[#index-Tags_002c-moving|Tags, moving]][[#Modifying-tags|Deleting, moving, and renaming tags]]
    [[#index-Tags_002c-renaming|Tags, renaming]][[#Modifying-tags|Deleting, moving, and renaming tags]]
    [[#index-Tags_002c-retrieving-old-revisions|Tags, retrieving old revisions]][[#Tags|Tags–Symbolic revisions]]
    [[#index-Tags_002c-sticky|Tags, sticky]][[#Sticky-tags|Sticky tags]]
    [[#index-Tags_002c-symbolic-name|Tags, symbolic name]][[#Tags|Tags–Symbolic revisions]]
    [[#index-tc_002c-Trivial-Compiler-_0028example_0029|tc, Trivial Compiler (example)]][[#A-sample-session|A sample session]]
    [[#index-Team-of-developers|Team of developers]][[#Multiple-developers|Multiple developers]]
    [[#index-TEMP_002c-environment-variable|TEMP, environment variable]][[#Environment-variables|All environment variables which affect CVS]]
    [[#index-Template-file_002c-in-CVS-directory|Template file, in CVS directory]][[#Working-directory-storage|How data is stored in the working directory]]
    [[#index-Template-for-log-message|Template for log message]][[#rcsinfo|Rcsinfo]]
    [[#index-Temporary-directories_002c-and-server|Temporary directories, and server]][[#Server-temporary-directory|Temporary directories for the server]]
    [[#index-Temporary-files_002c-location-of|Temporary files, location of]][[#Environment-variables|All environment variables which affect CVS]]
    [[#index-Third_002dparty-sources|Third-party sources]][[#Tracking-sources|Tracking third-party sources]]
    [[#index-Time|Time]][[#Common-options|Common command options]]
    [[#index-Timezone_002c-in-input|Timezone, in input]][[#Common-options|Common command options]]
    [[#index-Timezone_002c-in-output|Timezone, in output]][[#log|log—Print out log information for files]]
    [[#index-TMP_002c-environment-variable|TMP, environment variable]][[#Environment-variables|All environment variables which affect CVS]]
    [[#index-TMPDIR_002c-environment-variable|TMPDIR, environment variable]][[#Environment-variables|All environment variables which affect CVS]]
    [[#index-TMPDIR_002c-overriding|TMPDIR, overriding]][[#Global-options|Global options]]
    [[#index-TopLevelAdmin_002c-in-CVSROOT_002fconfig|TopLevelAdmin, in CVSROOT/config]][[#config|The CVSROOT/config configuration file]]
    [[#index-Trace|Trace]][[#Global-options|Global options]]
    [[#index-Traceability|Traceability]][[#History-browsing|History browsing]]
    [[#index-Tracking-sources|Tracking sources]][[#Tracking-sources|Tracking third-party sources]]
    [[#index-Transactions_002c-atomic_002c-lack-of|Transactions, atomic, lack of]][[#Concurrency|Several developers simultaneously attempting to run CVS]]
    [[#index-Trivial-Compiler-_0028example_0029|Trivial Compiler (example)]][[#A-sample-session|A sample session]]
    [[#index-Typical-repository|Typical repository]][[#Repository|The Repository]]

    U
    [[#index-Umask_002c-for-repository-files|Umask, for repository files]][[#File-permissions|File permissions]]
    [[#index-Undoing-a-change|Undoing a change]][[#Merging-two-revisions|Merging differences between any two revisions]]
    [[#index-unedit-_0028subcommand_0029|unedit (subcommand)]][[#Editing-files|How to edit a file which is being watched]]
    [[#index-Unknown|Unknown]][[#File-status|File status]]
    [[#index-Unreserved-checkouts|Unreserved checkouts]][[#Multiple-developers|Multiple developers]]
    [[#index-Unresolved-Conflict|Unresolved Conflict]][[#File-status|File status]]
    [[#index-Up_002dto_002ddate|Up-to-date]][[#File-status|File status]]
    [[#index-update-_0028subcommand_0029|update (subcommand)]][[#update|update—Bring work tree in sync with repository]]
    [[#index-Update_002c-introduction|Update, introduction]][[#Updating-a-file|Bringing a file up to date]]
    [[#index-update_002c-to-display-file-status|update, to display file status]][[#File-status|File status]]
    [[#index-Updating-a-file|Updating a file]][[#Updating-a-file|Bringing a file up to date]]
    [[#index-User-aliases|User aliases]][[#Password-authentication-server|Setting up the server for password authentication]]
    [[#index-User-variables|User variables]][[#Variables|Expansions in administrative files]]
    [[#index-USER_002c-environment-variable|USER, environment variable]][[#Variables|Expansions in administrative files]]
    [[#index-USER_002c-internal-variable|USER, internal variable]][[#Variables|Expansions in administrative files]]
    [[#index-UserAdminOptions_002c-in-CVSROOT_002fconfig|UserAdminOptions, in CVSROOT/config]][[#admin|admin—Administration]]
    [[#index-UserAdminOptions_002c-in-CVSROOT_002fconfig-1|UserAdminOptions, in CVSROOT/config]][[#config|The CVSROOT/config configuration file]]
    [[#index-users-_0028admin-file_0029|users (admin file)]][[#Getting-Notified|Telling CVS to notify you]]

    V
    [[#index-Variables|Variables]][[#Variables|Expansions in administrative files]]
    [[#index-Vendor|Vendor]][[#Tracking-sources|Tracking third-party sources]]
    [[#index-Vendor-branch|Vendor branch]][[#Tracking-sources|Tracking third-party sources]]
    [[#index-verifymsg-_0028admin-file_0029|‘verifymsg’ (admin file)]][[#verifymsg|Verifying log messages]]
    [[#index-verifymsg_002c-changing-the-log-message|‘verifymsg’, changing the log message]][[#verifymsg|Verifying log messages]]
    [[#index-verifymsg_002c-changing-the-log-message-1|‘verifymsg’, changing the log message]][[#config|The CVSROOT/config configuration file]]
    [[#index-version-_0028subcommand_0029|version (subcommand)]][[#Invoking-CVS|Quick reference to CVS commands]]
    [[#index-Versions_002c-of-CVS|Versions, of CVS]][[#Compatibility|Compatibility between CVS Versions]]
    [[#index-Versions_002c-revisions-and-releases|Versions, revisions and releases]][[#Versions-revisions-releases|Versions, revisions and releases]]
    [[#index-Viewing-differences|Viewing differences]][[#Viewing-differences|Viewing differences]]
    [[#index-VISUAL_002c-environment-variable|VISUAL, environment variable]][[#Committing-your-changes|Committing your changes]]
    [[#index-VISUAL_002c-environment-variable-1|VISUAL, environment variable]][[#Environment-variables|All environment variables which affect CVS]]
    [[#index-VISUAL_002c-internal-variable|VISUAL, internal variable]][[#Variables|Expansions in administrative files]]

    W
    [[#index-watch-add-_0028subcommand_0029|watch add (subcommand)]][[#Getting-Notified|Telling CVS to notify you]]
    [[#index-watch-off-_0028subcommand_0029|watch off (subcommand)]][[#Setting-a-watch|Telling CVS to watch certain files]]
    [[#index-watch-on-_0028subcommand_0029|watch on (subcommand)]][[#Setting-a-watch|Telling CVS to watch certain files]]
    [[#index-watch-remove-_0028subcommand_0029|watch remove (subcommand)]][[#Getting-Notified|Telling CVS to notify you]]
    [[#index-watchers-_0028subcommand_0029|watchers (subcommand)]][[#Watch-information|Information about who is watching and editing]]
    [[#index-Watches|Watches]][[#Watches|Mechanisms to track who is editing files]]
    [[#index-wdiff-_0028import-example_0029|wdiff (import example)]][[#First-import|Importing for the first time]]
    [[#index-Web-pages_002c-maintaining-with-CVS|Web pages, maintaining with CVS]][[#Keeping-a-checked-out-copy|Keeping a checked out copy]]
    [[#index-What-_0028shell-command_0029|What (shell command)]][[#Using-keywords|Using keywords]]
    [[#index-What-branches-are-good-for|What branches are good for]][[#Branches-motivation|What branches are good for]]
    [[#index-What-is-CVS-not_003f|What is CVS not?]][[#What-is-CVS-not_003f|What is CVS not?]]
    [[#index-What-is-CVS_003f|What is CVS?]][[#What-is-CVS_003f|What is CVS?]]
    [[#index-When-to-commit|When to commit]][[#When-to-commit|When to commit?]]
    [[#index-Windows_002c-and-permissions|Windows, and permissions]][[#Windows-permissions|File Permission issues specific to Windows]]
    [[#index-Work_002dsession_002c-example-of|Work-session, example of]][[#A-sample-session|A sample session]]
    [[#index-Working-copy|Working copy]][[#Multiple-developers|Multiple developers]]
    [[#index-Working-copy_002c-removing|Working copy, removing]][[#Cleaning-up|Cleaning up]]
    [[#index-Wrappers|Wrappers]][[#Wrappers|The cvswrappers file]]
    [[#index-writers-_0028admin-file_0029|writers (admin file)]][[#Read_002donly-access|Read-only repository access]]

    X
    [[#index-Ximbiot|Ximbiot]][[#BUGS|Dealing with bugs in CVS or this manual]]
    [[#index-xinetd_002c-configuring-for-pserver|xinetd, configuring for pserver]][[#Password-authentication-server|Setting up the server for password authentication]]

    Z
    [[#index-Zone_002c-time_002c-in-input|Zone, time, in input]][[#Common-options|Common command options]]
    [[#index-Zone_002c-time_002c-in-output|Zone, time, in output]][[#log|log—Print out log information for files]]


    Jump to: [[#Index-1_cp_symbol-1|!]] [[#Index-1_cp_symbol-2|#]] [[#Index-1_cp_symbol-3|&]] [[#Index-1_cp_symbol-4|-]] [[#Index-1_cp_symbol-5|.]] [[#Index-1_cp_symbol-6|/]] [[#Index-1_cp_symbol-7|:]] [[#Index-1_cp_symbol-8|<]] [[#Index-1_cp_symbol-9|=]] [[#Index-1_cp_symbol-10|>]] [[#Index-1_cp_symbol-11|_]] [[#Index-1_cp_letter-A|A]] [[#Index-1_cp_letter-B|B]] [[#Index-1_cp_letter-C|C]] [[#Index-1_cp_letter-D|D]] [[#Index-1_cp_letter-E|E]] [[#Index-1_cp_letter-F|F]] [[#Index-1_cp_letter-G|G]] [[#Index-1_cp_letter-H|H]] [[#Index-1_cp_letter-I|I]] [[#Index-1_cp_letter-J|J]] [[#Index-1_cp_letter-K|K]] [[#Index-1_cp_letter-L|L]] [[#Index-1_cp_letter-M|M]] [[#Index-1_cp_letter-N|N]] [[#Index-1_cp_letter-O|O]] [[#Index-1_cp_letter-P|P]] [[#Index-1_cp_letter-R|R]] [[#Index-1_cp_letter-S|S]] [[#Index-1_cp_letter-T|T]] [[#Index-1_cp_letter-U|U]] [[#Index-1_cp_letter-V|V]] [[#Index-1_cp_letter-W|W]] [[#Index-1_cp_letter-X|X]] [[#Index-1_cp_letter-Z|Z]]
    |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    == Table of Contents ==
    • [[#Overview|Overview]]
      • [[#What-is-CVS_003f|What is CVS?]]
      • [[#What-is-CVS-not_003f|What is CVS not?]]
      • [[#A-sample-session|A sample session]]
        • [[#Getting-the-source|Getting the source]]
        • [[#Committing-your-changes|Committing your changes]]
        • [[#Cleaning-up|Cleaning up]]
        • [[#Viewing-differences|Viewing differences]]
    • [[#Repository|The Repository]]
      • [[#Specifying-a-repository|Telling CVS where your repository is]]
      • [[#Repository-storage|How data is stored in the repository]]
        • [[#Repository-files|Where files are stored within the repository]]
        • [[#File-permissions|File permissions]]
        • [[#Windows-permissions|File Permission issues specific to Windows]]
        • [[#Attic|The attic]]
        • [[#CVS-in-repository|The CVS directory in the repository]]
        • [[#Locks|CVS locks in the repository]]
        • [[#CVSROOT-storage|How files are stored in the CVSROOT directory]]
      • [[#Working-directory-storage|How data is stored in the working directory]]
      • [[#Intro-administrative-files|The administrative files]]
        • [[#Editing-administrative-files|Editing administrative files]]
      • [[#Multiple-repositories|Multiple repositories]]
      • [[#Creating-a-repository|Creating a repository]]
      • [[#Backing-up|Backing up a repository]]
      • [[#Moving-a-repository|Moving a repository]]
      • [[#Remote-repositories|Remote repositories]]
        • [[#Server-requirements|Server requirements]]
        • [[#Connecting-via-rsh|Connecting with rsh]]
        • [[#Password-authenticated|Direct connection with password authentication]]
          • [[#Password-authentication-server|Setting up the server for password authentication]]
          • [[#Password-authentication-client|Using the client with password authentication]]
          • [[#Password-authentication-security|Security considerations with password authentication]]
        • [[#GSSAPI-authenticated|Direct connection with GSSAPI]]
        • [[#Kerberos-authenticated|Direct connection with kerberos]]
        • [[#Connecting-via-fork|Connecting with fork]]
      • [[#Read_002donly-access|Read-only repository access]]
      • [[#Server-temporary-directory|Temporary directories for the server]]
    • [[#Starting-a-new-project|Starting a project with CVS]]
      • [[#Setting-up-the-files|Setting up the files]]
        • [[#From-files|Creating a directory tree from a number of files]]
        • [[#From-other-version-control-systems|Creating Files From Other Version Control Systems]]
        • [[#From-scratch|Creating a directory tree from scratch]]
      • [[#Defining-the-module|Defining the module]]
    • [[#Revisions|Revisions]]
      • [[#Revision-numbers|Revision numbers]]
      • [[#Versions-revisions-releases|Versions, revisions and releases]]
      • [[#Assigning-revisions|Assigning revisions]]
      • [[#Tags|Tags–Symbolic revisions]]
      • [[#Tagging-the-working-directory|Specifying what to tag from the working directory]]
      • [[#Tagging-by-date_002ftag|Specifying what to tag by date or revision]]
      • [[#Modifying-tags|Deleting, moving, and renaming tags]]
      • [[#Tagging-add_002fremove|Tagging and adding and removing files]]
      • [[#Sticky-tags|Sticky tags]]
    • [[#Branching-and-merging|Branching and merging]]
      • [[#Branches-motivation|What branches are good for]]
      • [[#Creating-a-branch|Creating a branch]]
      • [[#Accessing-branches|Accessing branches]]
      • [[#Branches-and-revisions|Branches and revisions]]
      • [[#Magic-branch-numbers|Magic branch numbers]]
      • [[#Merging-a-branch|Merging an entire branch]]
      • [[#Merging-more-than-once|Merging from a branch several times]]
      • [[#Merging-two-revisions|Merging differences between any two revisions]]
      • [[#Merging-adds-and-removals|Merging can add or remove files]]
      • [[#Merging-and-keywords|Merging and keywords]]
    • [[#Recursive-behavior|Recursive behavior]]
    • [[#Adding-and-removing|Adding, removing, and renaming files and directories]]
      • [[#Adding-files|Adding files to a directory]]
      • [[#Removing-files|Removing files]]
      • [[#Removing-directories|Removing directories]]
      • [[#Moving-files|Moving and renaming files]]
        • [[#Outside|The Normal way to Rename]]
        • [[#Inside|Moving the history file]]
        • [[#Rename-by-copying|Copying the history file]]
      • [[#Moving-directories|Moving and renaming directories]]
    • [[#History-browsing|History browsing]]
      • [[#log-messages|Log messages]]
      • [[#history-database|The history database]]
      • [[#user_002ddefined-logging|User-defined logging]]
      • [[#annotate|Annotate command]]
    • [[#Binary-files|Handling binary files]]
      • [[#Binary-why|The issues with binary files]]
      • [[#Binary-howto|How to store binary files]]
    • [[#Multiple-developers|Multiple developers]]
      • [[#File-status|File status]]
      • [[#Updating-a-file|Bringing a file up to date]]
      • [[#Conflicts-example|Conflicts example]]
      • [[#Informing-others|Informing others about commits]]
      • [[#Concurrency|Several developers simultaneously attempting to run CVS]]
      • [[#Watches|Mechanisms to track who is editing files]]
        • [[#Setting-a-watch|Telling CVS to watch certain files]]
        • [[#Getting-Notified|Telling CVS to notify you]]
        • [[#Editing-files|How to edit a file which is being watched]]
        • [[#Watch-information|Information about who is watching and editing]]
        • [[#Watches-Compatibility|Using watches with old versions of CVS]]
      • [[#Choosing-a-model|Choosing between reserved or unreserved checkouts]]
    • [[#Revision-management|Revision management]]
      • [[#When-to-commit|When to commit?]]
    • [[#Keyword-substitution|Keyword substitution]]
      • [[#Keyword-list|Keyword List]]
      • [[#Using-keywords|Using keywords]]
      • [[#Avoiding-substitution|Avoiding substitution]]
      • [[#Substitution-modes|Substitution modes]]
      • [[#Configuring-keyword-expansion|Configuring Keyord Expansion]]
      • [[#Log-keyword|Problems with the $Log$ keyword.]]
    • [[#Tracking-sources|Tracking third-party sources]]
      • [[#First-import|Importing for the first time]]
      • [[#Update-imports|Updating with the import command]]
      • [[#Reverting-local-changes|Reverting to the latest vendor release]]
      • [[#Binary-files-in-imports|How to handle binary files with cvs import]]
      • [[#Keywords-in-imports|How to handle keyword substitution with cvs import]]
      • [[#Multiple-vendor-branches|Multiple vendor branches]]
    • [[#Builds|How your build system interacts with CVS]]
    • [[#Special-Files|Special Files]]
    • [[#CVS-commands|Guide to CVS commands]]
      • [[#Structure|Overall structure of CVS commands]]
      • [[#Exit-status|CVS’s exit status]]
      • [[#g_t_007e_002f_002ecvsrc|Default options and the ~/.cvsrc file]]
      • [[#Global-options|Global options]]
      • [[#Common-options|Common command options]]
      • [[#admin|admin—Administration]]
        • [[#admin-options|admin options]]
      • [[#checkout|checkout—Check out sources for editing]]
        • [[#checkout-options|checkout options]]
        • [[#checkout-examples|checkout examples]]
      • [[#commit|commit—Check files into the repository]]
        • [[#commit-options|commit options]]
        • [[#commit-examples|commit examples]]
          • [[#Committing-to-a-branch|Committing to a branch]]
          • [[#Creating-the-branch-after-editing|Creating the branch after editing]]
      • [[#diff|diff—Show differences between revisions]]
        • [[#diff-options|diff options]]
          • [[#Line-group-formats|Line group formats]]
          • [[#Line-formats|Line formats]]
        • [[#diff-examples|diff examples]]
      • [[#export|export—Export sources from CVS, similar to checkout]]
        • [[#export-options|export options]]
      • [[#history|history—Show status of files and users]]
        • [[#history-options|history options]]
      • [[#import|import—Import sources into CVS, using vendor branches]]
        • [[#import-options|import options]]
        • [[#import-output|import output]]
        • [[#import-examples|import examples]]
      • [[#log|log—Print out log information for files]]
        • [[#log-options|log options]]
        • [[#log-examples|log examples]]
      • [[#rdiff|rdiff—’patch’ format diffs between releases]]
        • [[#rdiff-options|rdiff options]]
        • [[#rdiff-examples|rdiff examples]]
      • [[#release|release—Indicate that a Module is no longer in use]]
        • [[#release-options|release options]]
        • [[#release-output|release output]]
        • [[#release-examples|release examples]]
      • [[#update|update—Bring work tree in sync with repository]]
        • [[#update-options|update options]]
        • [[#update-output|update output]]
    • [[#Invoking-CVS|Quick reference to CVS commands]]
    • [[#Administrative-files|Reference manual for Administrative files]]
      • [[#modules|The modules file]]
        • [[#Alias-modules|Alias modules]]
        • [[#Regular-modules|Regular modules]]
        • [[#Ampersand-modules|Ampersand modules]]
        • [[#Excluding-directories|Excluding directories]]
        • [[#Module-options|Module options]]
        • [[#Module-program-options|How the modules file “program options” programs are run]]
      • [[#Wrappers|The cvswrappers file]]
      • [[#commit-files|The commit support files]]
        • [[#syntax|The common syntax]]
        • [[#commitinfo|Commitinfo]]
        • [[#verifymsg|Verifying log messages]]
        • [[#editinfo|Editinfo]]
          • [[#editinfo-example|Editinfo example]]
        • [[#loginfo|Loginfo]]
          • [[#loginfo-example|Loginfo example]]
          • [[#Keeping-a-checked-out-copy|Keeping a checked out copy]]
      • [[#rcsinfo|Rcsinfo]]
      • [[#cvsignore|Ignoring files via cvsignore]]
      • [[#checkoutlist|The checkoutlist file]]
      • [[#history-file|The history file]]
      • [[#Variables|Expansions in administrative files]]
      • [[#config|The CVSROOT/config configuration file]]
    • [[#Environment-variables|All environment variables which affect CVS]]
    • [[#Compatibility|Compatibility between CVS Versions]]
    • [[#Troubleshooting|Troubleshooting]]
      • [[#Error-messages|Partial list of error messages]]
      • [[#Connection|Trouble making a connection to a CVS server]]
      • [[#Other-problems|Other common problems]]
    • [[#Credits|Credits]]
    • [[#BUGS|Dealing with bugs in CVS or this manual]]
    • [[#Index|Index]]

    |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    == Short Table of Contents ==
    • [[#Overview|Overview]]
    • [[#Repository|The Repository]]
    • [[#Starting-a-new-project|Starting a project with CVS]]
    • [[#Revisions|Revisions]]
    • [[#Branching-and-merging|Branching and merging]]
    • [[#Recursive-behavior|Recursive behavior]]
    • [[#Adding-and-removing|Adding, removing, and renaming files and directories]]
    • [[#History-browsing|History browsing]]
    • [[#Binary-files|Handling binary files]]
    • [[#Multiple-developers|Multiple developers]]
    • [[#Revision-management|Revision management]]
    • [[#Keyword-substitution|Keyword substitution]]
    • [[#Tracking-sources|Tracking third-party sources]]
    • [[#Builds|How your build system interacts with CVS]]
    • [[#Special-Files|Special Files]]
    • [[#CVS-commands|Guide to CVS commands]]
    • [[#Invoking-CVS|Quick reference to CVS commands]]
    • [[#Administrative-files|Reference manual for Administrative files]]
    • [[#Environment-variables|All environment variables which affect CVS]]
    • [[#Compatibility|Compatibility between CVS Versions]]
    • [[#Troubleshooting|Troubleshooting]]
    • [[#Credits|Credits]]
    • [[#BUGS|Dealing with bugs in CVS or this manual]]
    • [[#Index|Index]]

    |[[#Top|Top]]| |[[#SEC_Contents|Contents]]| |[[#Index|Index]]| |[[#SEC_About| ? ]]|
    == About This Document ==

    This document was generated by a tester on a sunny day using [http://www.nongnu.org/texi2html/ texi2html].

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using [http://www.nongnu.org/texi2html/ texi2html]. texi2html-1.82/test/manuals/res/ccvs_mediawiki_nosplit/cvs.20000644000175000017500000000000011264347121026036 0ustar flichtenheldflichtenheldtexi2html-1.82/test/manuals/res/texi_mini_ker/0000755000175000017500000000000011264347121023267 5ustar flichtenheldflichtenheldtexi2html-1.82/test/manuals/res/texi_mini_ker/mini_ker.passtexi0000644000175000017500000072620511264347121026662 0ustar flichtenheldflichtenheldmini_ker.texi(,12) @setfilename mini_ker.info version.texi(,1) @set UPDATED 28 March 2002 version.texi(,2) @set UPDATED-MONTH March 2002 version.texi(,3) @set EDITION 4.2 version.texi(,4) @set VERSION 4.2 mini_ker.texi(,14) mini_ker.texi(,15) @c @set myversion @value{VERSION} mini_ker.texi(,16) @set myversion 102 mini_ker.texi(,17) mini_ker.texi(,18) @set myurl @url{http://www.environnement.ens.fr/@/perso/@/dumas/@/mini_ker/@/software.html} mini_ker.texi(,19) mini_ker.texi(,23) mini_ker.texi(Minik,24) @settitle mini_ker.texi(Minik,24) Miniker 102 manual mini_ker.texi(,25) mini_ker.texi(,26) @syncodeindex fn vr mini_ker.texi(,27) mini_ker.texi(,28) @dircategory Miscellaneous mini_ker.texi(,32) mini_ker.texi(,33) mini_ker.texi(,34) @copying mini_ker.texi(,35) @noindent Copyright (C) 2004, 2005, 2006, 2007 Alain Lahellec@* mini_ker.texi(,36) Copyright (C) 2004, 2005, 2006, 2007 Patrice Dumas@* mini_ker.texi(,37) Copyright (C) 2004, St@'ephane Hallegatte mini_ker.texi(,38) mini_ker.texi(,39) @quotation mini_ker.texi(,40) Permission is granted to copy, distribute and/or modify this document mini_ker.texi(,41) under the terms of the GNU Free Documentation License, Version 1.1 or mini_ker.texi(,42) any later version published by the Free Software Foundation; with no mini_ker.texi(,43) Invariant Sections, with no Front-Cover text and with no Back-Cover Text. mini_ker.texi(,44) A copy of the license is included in the section entitled ``GNU Free mini_ker.texi(,45) Documentation License.'' mini_ker.texi(,46) @end quotation mini_ker.texi(,47) @end copying mini_ker.texi(,48) mini_ker.texi(,49) @titlepage mini_ker.texi(Minik,50) @title mini_ker.texi(Minik,50) Miniker manual mini_ker.texi(Minik,51) @subtitle for mini_ker.texi(Minik,51) Miniker version 102, 28 March 2002 mini_ker.texi(,52) mini_ker.texi(,53) @author The TEF Collaboration mini_ker.texi(,54) @c @author Alain Lahellec mini_ker.texi(,55) @c @author Patrice Dumas mini_ker.texi(,56) @c @author St@'ephane Hallegatte mini_ker.texi(,57) mini_ker.texi(,58) @page mini_ker.texi(,59) @vskip 0pt plus 1filll mini_ker.texi(,60) @insertcopying mini_ker.texi(,61) @end titlepage mini_ker.texi(,62) mini_ker.texi(,64) @node Top mini_ker.texi(Minik,65) @top mini_ker.texi(Minik,65) Miniker 102 manual mini_ker.texi(,66) mini_ker.texi(,67) mini_ker.texi(,68) @c @insertcopying mini_ker.texi(,70) mini_ker.texi(,72) @node Top mini_ker.texi(Minik,73) @top mini_ker.texi(Minik,73) Miniker 102 manual mini_ker.texi(,74) mini_ker.texi(,75) @strong{By: The TEF Collaboration} mini_ker.texi(,76) mini_ker.texi(,77) @insertcopying mini_ker.texi(,78) mini_ker.texi(,80) mini_ker.texi(,81) @menu mini_ker.texi(,82) * Introduction:: mini_ker.texi(,83) * TEF overview:: mini_ker.texi(Minik,84) * A model with mini_ker.texi(Minik,84) Miniker:: mini_ker.texi(,85) * Advanced programming:: mini_ker.texi(,86) * Dynamic system analysis:: mini_ker.texi(Minik,87) * Advanced use of mini_ker.texi(Minik,87) Miniker with make:: mini_ker.texi(,88) mini_ker.texi(,89) Indices mini_ker.texi(,90) mini_ker.texi(,91) * Concepts index:: mini_ker.texi(,92) * Variables macros and functions index:: mini_ker.texi(,93) mini_ker.texi(,94) Appendices mini_ker.texi(,95) mini_ker.texi(,96) * Installation:: mini_ker.texi(,97) * Cmz directives reference:: mini_ker.texi(,102) * Copying This Manual:: The GNU Free Documentation License. mini_ker.texi(,103) @end menu mini_ker.texi(,104) mini_ker.texi(,105) @contents mini_ker.texi(,106) mini_ker.texi(,107) @node Introduction mini_ker.texi(,108) @unnumbered Introduction mini_ker.texi(,109) mini_ker.texi(,110) @cindex TEF mini_ker.texi(,111) @cindex cells mini_ker.texi(,112) @cindex transfers mini_ker.texi(,113) @cindex ZOOM mini_ker.texi(,114) @cindex mortran mini_ker.texi(,115) mini_ker.texi(Minik,116) mini_ker.texi(Minik,116) Miniker is a modeling tool, built especially in order to implement mini_ker.texi(,117) models written following the @acronym{TEF,Transfer Evolution Formalism} mini_ker.texi(,118) formalism, a mathematical framework for system analysis and mini_ker.texi(Minik,119) simulation. mini_ker.texi(Minik,119) Miniker allows for timewise simulation, system analysis, mini_ker.texi(,120) adjoint computation, Kalman filtering and more. mini_ker.texi(,121) mini_ker.texi(Minik,122) Miniker uses a fortran preprocessor, @command{mortran}, designed in the mini_ker.texi(,123) 1970's, to ease model writing using dedicated specific languages. mini_ker.texi(,124) For example partial derivatives are mini_ker.texi(Minik,125) symbolicaly determined by @command{mortran} macros in mini_ker.texi(Minik,125) Miniker. mini_ker.texi(,126) For the selection of mini_ker.texi(,127) another compile-time features, another set of preprocessor directives, mini_ker.texi(,128) the @dfn{cmz directives}, are used. In most cases the user does not need to mini_ker.texi(,129) know anything about that preprocessing that occurs behind the scene, mini_ker.texi(,130) he simply writes down the equations of his model and he is done. mini_ker.texi(,131) mini_ker.texi(,132) @c All partial derivatives needed to solve the TEF system are automatically mini_ker.texi(,133) @c determined during the pre-compilation stage. mini_ker.texi(,134) @c Once all models written down and initial conditions mini_ker.texi(,135) @c given using a pseudo-Fortran type of language, the model is ready to run. mini_ker.texi(,136) mini_ker.texi(,137) @c The language developed to get automatic symbolic partial derivatives mini_ker.texi(,138) @c uses the Fortran pre-compiler @command{mortran}, designed in the 1970's. mini_ker.texi(,139) mini_ker.texi(,140) A comprehensive description mini_ker.texi(,141) of the @acronym{TEF} formalism in available on mini_ker.texi(,142) @url{http://www.lmd.jussieu.fr/ZOOM/doc/tef-GB-partA5.pdf}). mini_ker.texi(Minik,143) The mini_ker.texi(Minik,143) Miniker software is a reduced version of mini_ker.texi(,144) @uref{http://www.lmd.jussieu.fr@//zoom,@strong{ZOOM}}, mini_ker.texi(,145) that can only handle a hundreds of variables, but is much easier to use. mini_ker.texi(,146) mini_ker.texi(,147) @menu mini_ker.texi(,148) * Intended audience:: mini_ker.texi(,149) * Reading guide:: mini_ker.texi(,150) * Other Manuals and documentation:: mini_ker.texi(,151) @end menu mini_ker.texi(,152) mini_ker.texi(,153) @node Intended audience mini_ker.texi(,154) @unnumberedsec Intended audience mini_ker.texi(,155) mini_ker.texi(,156) The reader should have notions in system dynamics. mini_ker.texi(,157) @c and understand the basis of the TEF. mini_ker.texi(,158) Moreover a minimal knowledge of programmation and fortran is mini_ker.texi(,159) required. What is required is a basic understanding of variable types, mini_ker.texi(,160) affectation and fortran expressions. mini_ker.texi(,161) mini_ker.texi(,162) @node Reading guide mini_ker.texi(,163) @unnumberedsec Reading guide mini_ker.texi(,164) mini_ker.texi(,165) The first chapter is a brief overview of the @acronym{TEF}. mini_ker.texi(Minik,166) The following describes how to write, compile and run a model in mini_ker.texi(Minik,166) Miniker mini_ker.texi(,167) in its basic and comprehensive syntax. mini_ker.texi(,168) @c Reading the sections of this chapter up to the section mini_ker.texi(,169) @c @emph{Symbolic model description} is required to know the mini_ker.texi(,170) @c syntax of model description in @Minik{}. mini_ker.texi(,171) Reading up to the section mini_ker.texi(Minik,172) @emph{Controlling the run} is required to be able to use mini_ker.texi(Minik,172) Miniker. mini_ker.texi(Minik,173) In this section it is assumed that mini_ker.texi(Minik,173) Miniker is properly setup. The mini_ker.texi(,174) installation instructions are in the appendix at mini_ker.texi(,175) @ref{Installation}. mini_ker.texi(,176) mini_ker.texi(,177) @c 2 programming environment to compile the model are available, with cmz mini_ker.texi(,178) @c and make, you can skip the method description you are not interested in. mini_ker.texi(,179) @c A reference for the usefull cmz directives is also in the appendix mini_ker.texi(,180) @c (@pxref{Cmz directives reference}). mini_ker.texi(,181) mini_ker.texi(,182) @c You should also mini_ker.texi(,183) @c read the following section, @emph{Symbolic model description} which presents an mini_ker.texi(,184) @c alternate syntax for model description, such that you can choose what you mini_ker.texi(,185) @c prefer. mini_ker.texi(,186) mini_ker.texi(,187) The next chapter describes advanced features, first a general introduction to mini_ker.texi(,188) features settings and then a description of other model description related mini_ker.texi(,189) features. mini_ker.texi(,190) mini_ker.texi(Minik,191) The next chapter describes system analysis tools available with mini_ker.texi(Minik,191) Miniker. The mini_ker.texi(,192) sections are independant and each describes how to use a specific feature. If mini_ker.texi(,193) you plan on using these features, you should also read mini_ker.texi(,194) @ref{Selecting features, , Overview of feature setting}. mini_ker.texi(,195) mini_ker.texi(,196) A final chapter describes advanced features in a development environment mini_ker.texi(,197) using make, mini_ker.texi(,198) mini_ker.texi(,199) In the appendix the instructions for the installation are described mini_ker.texi(,200) (@pxref{Installation}). mini_ker.texi(,201) mini_ker.texi(,202) @node Other Manuals and documentation mini_ker.texi(,203) @unnumberedsec Other Manuals and documentation mini_ker.texi(,204) mini_ker.texi(,205) A programmers'Manual is available (in French), and can be asked for to mini_ker.texi(,206) any member of the collabration. See additional documents in mini_ker.texi(,207) @url{http://www.lmd.jussieu.fr/Zoom/doc} or ask for Research mini_ker.texi(,208) texts and articles to members. mini_ker.texi(,209) mini_ker.texi(,210) @node TEF overview mini_ker.texi(,211) @chapter An overview of the @acronym{TEF} formalism mini_ker.texi(,212) mini_ker.texi(,213) The @acronym{TEF, Transfer Evolution Formalism} is based on partitionning mini_ker.texi(,214) and recoupling of model subsystems. It allows the study of the coupling mini_ker.texi(,215) between subsystems by the means of linearization and time discretization. mini_ker.texi(,216) mini_ker.texi(,217) @menu mini_ker.texi(,218) * Cell and Transfer:: mini_ker.texi(,219) * Linearization and discretization:: mini_ker.texi(,220) @end menu mini_ker.texi(,221) mini_ker.texi(,222) @node Cell and Transfer mini_ker.texi(,223) @section Cell and Transfer equations mini_ker.texi(,224) mini_ker.texi(,225) In the @acronym{TEF}, a model is mini_ker.texi(,226) mathematically represented by a set of equations corresponding mini_ker.texi(,227) to two kinds objects: mini_ker.texi(,228) mini_ker.texi(,229) @enumerate mini_ker.texi(,230) @item Cells which are elementary models and correspond to evolution equations mini_ker.texi(,231) such as: mini_ker.texi(,245) mini_ker.texi(,246) @noindent @math{d eta(t)/d t = g(eta(t),phi(t))} mini_ker.texi(,247) mini_ker.texi(,250) mini_ker.texi(,251) Vector @math{\eta} represent the state variables of cells and mini_ker.texi(,252) the vector @math{\varphi} represent the dependent mini_ker.texi(,253) boundary conditions, @i{i.e.} the mini_ker.texi(,254) variables considered as boundary conditions by a cell, but depending upon mini_ker.texi(,255) the complete model state. This dependent boundary conditions are mini_ker.texi(,256) required to make the cells correspond to well-posed problems. mini_ker.texi(,257) @c FIXME acceptable? mini_ker.texi(,258) These variables are often called state variables, and prognostic mini_ker.texi(,259) variables in meteorology. mini_ker.texi(,260) mini_ker.texi(,261) mini_ker.texi(,262) @item Transfers which are determined by constraint equations such as: mini_ker.texi(,278) mini_ker.texi(,279) @noindent @math{phi(t) = f(eta(t),phi(t))} mini_ker.texi(,280) mini_ker.texi(,283) These equations are often called algebraic equations, and in meteorology mini_ker.texi(,284) diagnostic equations. mini_ker.texi(,285) @end enumerate mini_ker.texi(,286) mini_ker.texi(,287) @node Linearization and discretization mini_ker.texi(,288) @section Linearization and discretization in the @acronym{TEF} mini_ker.texi(,289) mini_ker.texi(,290) The relations between sub-systems is excessively difficult to exhibit when mini_ker.texi(,291) having to cope with non-linear system. In the @acronym{TEF}, the mini_ker.texi(,292) @acronym{TLS, Tangent Linear System} is constructed along the trajectory. mini_ker.texi(,293) One considers the system over a small portion along the trajectory, say mini_ker.texi(,294) between @math{t} and @math{t + \delta t}. The variation @math{\delta \eta} mini_ker.texi(,295) of @math{\eta} and @math{\delta \varphi} of @math{\varphi} is obtained mini_ker.texi(,296) through a Pad@'e approximation of the state-transition matrix. The final mini_ker.texi(,297) form of the algebraic system is closed to the classical Crank-Nicolson scheme: mini_ker.texi(,298) mini_ker.texi(,299) @c FIXME PAd'e? od Taylor? mini_ker.texi(,300) @c through a Taylor expansion followed by time integration. mini_ker.texi(,301) @c A time scheme is then applied to the @acronym{TLS} (a Crank-Nicholson scheme), mini_ker.texi(,302) @c to obtain an algebraic system describing the relationships between mini_ker.texi(,303) @c variations of transfers and cells variables: mini_ker.texi(,304) mini_ker.texi(,305) mini_ker.texi(,319) mini_ker.texi(,328) mini_ker.texi(,329) The blocks appearing in the Jacobian matrix are constructed with partial derivative mini_ker.texi(,330) of @math{f} and @math{g}, and with @math{\delta t}. From this system the mini_ker.texi(,331) elimination of @math{\delta \eta} leads to another formulation giving mini_ker.texi(,332) the coupling between transfers, and allows for the @math{\delta \varphi} mini_ker.texi(,333) computation. The @math{\delta \varphi} value is then substitued in mini_ker.texi(,334) @math{\delta \eta} to complete the time-step solving process. mini_ker.texi(,335) mini_ker.texi(Minik,336) @node A model with mini_ker.texi(Minik,336) Miniker mini_ker.texi(Minik,337) @chapter mini_ker.texi(Minik,337) Miniker model programming mini_ker.texi(,338) mini_ker.texi(,339) @cindex sequences mini_ker.texi(,340) mini_ker.texi(Minik,341) Miniker works by combining the model specification code given by mini_ker.texi(,342) the user and other source files provided in the package. The code is mini_ker.texi(,343) assembled, preprocessed, compiled, linked and the resulting program mini_ker.texi(,344) can be run to produce the model trajectory and dynamic analysis. mini_ker.texi(,345) mini_ker.texi(,346) The code provided in the package contains a principal program, some usefull mini_ker.texi(,347) subroutines and pieces of code called @dfn{sequences} combined with the mini_ker.texi(,348) different codes. Among these sequences some hold the code describing the model mini_ker.texi(,349) and are to be written by the user (sequences are similar to mini_ker.texi(,350) Fortran include files). mini_ker.texi(,351) mini_ker.texi(,352) @menu mini_ker.texi(,353) * Structure of the code:: mini_ker.texi(,354) * A model description:: mini_ker.texi(,355) * Setting and running a model:: mini_ker.texi(,356) * Controlling the run:: mini_ker.texi(,357) @end menu mini_ker.texi(,358) mini_ker.texi(,359) @node Structure of the code mini_ker.texi(,360) @section General structure of the code mini_ker.texi(,361) mini_ker.texi(,362) @cindex sequence mini_ker.texi(,363) @cindex zinit, general mini_ker.texi(,364) mini_ker.texi(,365) The sequences used to enter model description hold the @c vector dimensions, mini_ker.texi(,366) mathematical formulae for each cell and transfer component, dedicated mini_ker.texi(,367) derived computations, and time-step mini_ker.texi(,368) steering. During the code generation stage, mini_ker.texi(,369) cmz directives are preprocessed, then the user pseudo-Fortran mini_ker.texi(,370) instructions are translated by @command{mortran} using macros designed to mini_ker.texi(,371) generate in particular all Fortran instructions that compute the Jacobian mini_ker.texi(,372) matrices used in @acronym{TEF} modelling. mini_ker.texi(,373) mini_ker.texi(,374) @c A first users' sequence to program is: @file{dimetaphi} where the model mini_ker.texi(,375) @c dimensions are given, for the two vector-array @code{eta(.)} for cells mini_ker.texi(,376) @c and @code{ff(.)} for transfers (@pxref{Model size,,Entering model size}). mini_ker.texi(,377) mini_ker.texi(,378) The sequence @file{zinit} contains the mathematical formulation of the model mini_ker.texi(,379) (@pxref{Model equation and parameters, Entering model equation and parameters}). mini_ker.texi(,380) Another sequence, @file{zsteer}, is merged at mini_ker.texi(,381) the end of the time step advance of the simulation, where the user can mini_ker.texi(,382) monitor the time step values and printing levels, and perform particular mini_ker.texi(,383) computations etc. mini_ker.texi(,384) (@pxref{End of time step, ,Executing code at the end of each time step}). mini_ker.texi(,385) mini_ker.texi(,386) @node A model description mini_ker.texi(Minik,387) @section mini_ker.texi(Minik,387) Miniker programming illustrated mini_ker.texi(,388) mini_ker.texi(,389) @cindex TEF mini_ker.texi(,390) mini_ker.texi(,391) The general @acronym{TEF} system writes: mini_ker.texi(,408) mini_ker.texi(,409) @noindent @math{d eta(t)/d t = g(eta(t),phi(t))@* mini_ker.texi(,410) phi(t) = f(eta(t),phi(t))} mini_ker.texi(,411) mini_ker.texi(,414) mini_ker.texi(Minik,415) To illustrate the model description in mini_ker.texi(Minik,415) Miniker a simple predator-prey mini_ker.texi(,416) model of Lotka-Volterra is used. mini_ker.texi(,417) This model can be written in the following @acronym{TEF} form: mini_ker.texi(,418) mini_ker.texi(,444) @noindent @math{d eta_prey(t)/d t = a * eta_prey - a * phi_meet@* mini_ker.texi(,445) d eta_pred(t)/d t = -c * eta_pred +c * phi_meet} mini_ker.texi(,446) mini_ker.texi(,447) @noindent @math{phi_meet = eta_prey * eta_pred} mini_ker.texi(,450) mini_ker.texi(,451) with two cell equations, @i{i.e}. state evolution of the prey and predator mini_ker.texi(,452) groups, and one transfer accounting for the meeting of individuals of mini_ker.texi(,453) different group. mini_ker.texi(,454) mini_ker.texi(,455) @menu mini_ker.texi(,456) * A note about mortran and cmz directives:: mini_ker.texi(,457) * Model equation and parameters:: mini_ker.texi(,458) @end menu mini_ker.texi(,459) mini_ker.texi(,460) @node A note about mortran and cmz directives mini_ker.texi(,461) @subsection All you need to know about mortran and cmz directives mini_ker.texi(,462) mini_ker.texi(,463) @cindex mortran mini_ker.texi(,464) mini_ker.texi(,465) The first stage of code generation consists in cmz directives preprocessing. mini_ker.texi(,466) Cmz directives are used for conditional selection of features, and sequence mini_ker.texi(,467) inclusion. At that point you don't need to know anything about these mini_ker.texi(,468) directives. They are only usefull if you want to take advantage of advanced mini_ker.texi(,469) features mini_ker.texi(,470) (@pxref{Programming with cmz directives}). mini_ker.texi(,471) mini_ker.texi(,472) The code in sequences is written in Mortran and the second stage of code mini_ker.texi(,473) generation consists in mortran macro expansion. The mortran language is mini_ker.texi(,474) described mini_ker.texi(,475) in its own manual, here we only explain the very basics which is all you need mini_ker.texi(Minik,476) to know to use mini_ker.texi(Minik,476) Miniker. Mortran basic instructions are almost Fortran, mini_ker.texi(,477) the differences are the following: mini_ker.texi(,478) mini_ker.texi(,479) @itemize @bullet mini_ker.texi(,480) @item The code is free-form, and each statement should end with a semi-colon mini_ker.texi(,481) @code{;}. mini_ker.texi(,482) @item Comments may be introduced by an exclamation mark @code{!} at the mini_ker.texi(,483) beginning of a line, or appear within double quotes @code{"} in a single line. mini_ker.texi(,484) @item It is possible to use blocs, for @code{do} or @code{if} statement mini_ker.texi(,485) for example, and they are enclosed within brackets @samp{<} and @samp{>}. mini_ker.texi(,486) To be in the safe side, a semi-colon @code{;} should be added after a mini_ker.texi(,487) closng bracket @code{>}. mini_ker.texi(,488) @end itemize mini_ker.texi(,489) mini_ker.texi(,490) The following fictious code is legal mortran: mini_ker.texi(,491) mini_ker.texi(,492) @example mini_ker.texi(,493) real mini_ker.texi(,494) param; mini_ker.texi(,495) param = 3.; ff(1) = ff(3)**eta(1); "a comment" mini_ker.texi(,496) ! a line comment mini_ker.texi(,497) do inode=1,n_node ; mini_ker.texi(,498) @end example mini_ker.texi(,499) mini_ker.texi(,500) Thanks to mortran the model code is very simply specified, as you'll mini_ker.texi(,501) see next. mini_ker.texi(,502) mini_ker.texi(,503) mini_ker.texi(,504) @node Model equation and parameters mini_ker.texi(,505) @subsection Entering model equation and parameters mini_ker.texi(,506) mini_ker.texi(,507) @cindex @file{zinit} mini_ker.texi(,508) @vindex dt mini_ker.texi(,509) @vindex time mini_ker.texi(,510) @vindex nstep mini_ker.texi(,511) @vindex modzprint mini_ker.texi(,512) mini_ker.texi(Minik,513) The model equation and parameters and some mini_ker.texi(Minik,513) Miniker parameters are entered in mini_ker.texi(,514) the @file{zinit} sequence. The whole layout of the model is given mini_ker.texi(,515) before detailing the keywords. mini_ker.texi(,516) mini_ker.texi(,517) @example mini_ker.texi(,518) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,519) ! Parameters mini_ker.texi(,520) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,521) real apar,bpar; "optional Fortran type declaration" mini_ker.texi(,522) mini_ker.texi(,523) ! required parameters mini_ker.texi(,524) dt=.01; "initial time-step" mini_ker.texi(,525) nstep=10 000; "number of iterations along the trajectory" mini_ker.texi(,526) time=0.; "time initialisation " mini_ker.texi(,527) mini_ker.texi(,528) ! model parameters mini_ker.texi(,529) apar = 1.5; mini_ker.texi(,530) cpar = 0.7; mini_ker.texi(,531) mini_ker.texi(,532) ! misceallaneous parameters mini_ker.texi(,533) modzprint = 1000; "printouts frequency" mini_ker.texi(,534) mini_ker.texi(,535) print*,'***************************************'; mini_ker.texi(,536) print*,'Lotka-Volterra model with parameters as:'; mini_ker.texi(,537) z_pr: apar,bpar; mini_ker.texi(,538) print*,'***************************************'; mini_ker.texi(,539) mini_ker.texi(,540) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,541) ! Transfer definition mini_ker.texi(,542) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,543) ! rencontre (meeting) mini_ker.texi(,544) set_Phi mini_ker.texi(,545) < var: ff_interact, fun: f_interact = eta_prey*eta_pred; mini_ker.texi(,546) >; mini_ker.texi(,547) mini_ker.texi(,548) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,549) ! Cell definition mini_ker.texi(,550) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,551) mini_ker.texi(,552) set_eta mini_ker.texi(,553) < var: eta_prey, fun: deta_prey = apar*eta_prey - apar*ff_interact; mini_ker.texi(,554) var: eta_pred, fun: deta_pred = - cpar*eta_pred + cpar*ff_interact; mini_ker.texi(,555) >; mini_ker.texi(,556) mini_ker.texi(,557) mini_ker.texi(,558) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,559) ! Initial states mini_ker.texi(,560) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,561) eta_prey = 1.; mini_ker.texi(,562) eta_pred = 1.; mini_ker.texi(,563) ; mini_ker.texi(,564) OPEN(50,FILE='title.tex',STATUS='UNKNOWN'); "title file" mini_ker.texi(,565) write(50,5000) apar,cpar; mini_ker.texi(,566) 5000;format('Lotka-Volterra par:',2F4.1); mini_ker.texi(,567) @end example mini_ker.texi(,568) mini_ker.texi(,569) @subsubheading Variables and model parameters mini_ker.texi(,570) mini_ker.texi(,571) The following variables are mandatory: mini_ker.texi(,572) mini_ker.texi(,573) @table @code mini_ker.texi(,574) @item dt mini_ker.texi(,575) The time step. mini_ker.texi(,576) @item time mini_ker.texi(,577) Model time initialisation. mini_ker.texi(,578) @item nstep mini_ker.texi(,579) Number of iterations along the trajectory. mini_ker.texi(,580) @end table mini_ker.texi(,581) mini_ker.texi(,582) There are no other mandatory variables. Some optional variables are used mini_ker.texi(,583) to monitor the printout and ouput of results of the code. mini_ker.texi(,584) As an example, the variable @code{modzprint} is used to set mini_ker.texi(,585) the frequency of the printout of the model matrix and vectors during the mini_ker.texi(,586) run (@pxref{Controlling the printout and data output}). mini_ker.texi(,587) mini_ker.texi(,588) User's defined variable and Fortran or Mortran instructions can always be mini_ker.texi(,589) added for intermediate calculus. To avoid conflict with the variables of the mini_ker.texi(Minik,590) Miniker code, the rule is that a users symbol must not have characters mini_ker.texi(,591) @samp{o} mini_ker.texi(,592) in the first two symbol characters. mini_ker.texi(,593) mini_ker.texi(,594) In the predator-prey example there are two model parameters. The fortran mini_ker.texi(,595) variables are called here @code{apar} for @math{a} and @code{cpar} for @math{c}. mini_ker.texi(,596) If a Fortan type definition is needed, it should be set at the very beginning mini_ker.texi(,597) of @file{zinit}. The predator-prey code variable initializations finally reads mini_ker.texi(,598) mini_ker.texi(,599) @example mini_ker.texi(,600) @group mini_ker.texi(,601) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,602) ! Parameters mini_ker.texi(,603) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,604) real apar,bpar; "optional Fortran type declaration" mini_ker.texi(,605) mini_ker.texi(,606) dt=.01; mini_ker.texi(,607) nstep=10 000; mini_ker.texi(,608) time=0.; mini_ker.texi(,609) mini_ker.texi(,610) ! model parameters mini_ker.texi(,611) apar = 1.5; mini_ker.texi(,612) cpar = 0.7; mini_ker.texi(,613) mini_ker.texi(,614) modzprint = 1000; mini_ker.texi(,615) @end group mini_ker.texi(,616) @end example mini_ker.texi(,617) mini_ker.texi(,618) @subsubheading Model equations mini_ker.texi(,619) @anchor{Model equations} mini_ker.texi(,620) mini_ker.texi(,621) @findex set_Phi mini_ker.texi(,622) @findex set_eta mini_ker.texi(,623) @vindex var: mini_ker.texi(,624) @vindex fun: mini_ker.texi(,625) @vindex eqn: mini_ker.texi(,626) mini_ker.texi(,627) The model equations for cells and model equations for transferts are mini_ker.texi(,628) entered in two mortran blocks, one for the transferts, the other for the mini_ker.texi(,629) cell components. The model equations for cells are entered into a mini_ker.texi(,630) @code{set_eta} block, and the transfer equations are entered into a mini_ker.texi(,631) @code{set_phi} block. mini_ker.texi(,632) mini_ker.texi(,633) In each block the couples variable-function are specified. For mini_ker.texi(,634) transfers the function defines the transfer itself while for cells mini_ker.texi(,635) the function describes the cell evolution. The variable is specified mini_ker.texi(,636) with @code{var:}, the function is defined with @code{fun:}. mini_ker.texi(,637) mini_ker.texi(,638) In the case of the predator-prey model, the transfer variable mini_ker.texi(,639) associated with @math{\varphi_{meet}} could be called @code{ff_interact} mini_ker.texi(,640) and the transfer definition would be given by: mini_ker.texi(,641) @example mini_ker.texi(,642) set_Phi mini_ker.texi(,643) < var: ff_interact, fun: f_interact = eta_prey*eta_pred; mini_ker.texi(,644) >; mini_ker.texi(,645) @end example mini_ker.texi(,646) mini_ker.texi(,647) The two cell equations of the predator-prey model, with name mini_ker.texi(,648) @code{eta_prey} for the prey (@math{\eta_{prey}}) and @code{eta_pred} mini_ker.texi(,649) for the predator (@math{\eta_{pred}}) are: mini_ker.texi(,650) mini_ker.texi(,651) @example mini_ker.texi(,652) set_eta mini_ker.texi(,653) < var: eta_prey, fun: deta_prey = apar*eta_prey - apar*ff_interact; mini_ker.texi(,654) var: eta_pred, fun: deta_pred = - cpar*eta_pred + cpar*ff_interact; mini_ker.texi(,655) >; mini_ker.texi(,656) @end example mini_ker.texi(,657) mini_ker.texi(,658) The @samp{;} at the end of the mortran block is important. mini_ker.texi(,659) mini_ker.texi(,660) @page mini_ker.texi(,661) The whole model equations are setup with: mini_ker.texi(,662) mini_ker.texi(,663) @example mini_ker.texi(,664) @group mini_ker.texi(,665) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,666) ! Transfer definition mini_ker.texi(,667) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,668) ! rencontre (meeting) mini_ker.texi(,669) set_Phi mini_ker.texi(,670) < var: ff_interact, fun: f_interact = eta_prey*eta_pred; mini_ker.texi(,671) >; mini_ker.texi(,672) mini_ker.texi(,673) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,674) ! Cell definition mini_ker.texi(,675) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,676) mini_ker.texi(,677) set_eta mini_ker.texi(,678) < var: eta_prey, fun: deta_prey = apar*eta_prey - apar*ff_interact; mini_ker.texi(,679) var: eta_pred, fun: deta_pred = - cpar*eta_pred + cpar*ff_interact; mini_ker.texi(,680) >; mini_ker.texi(,681) @end group mini_ker.texi(,682) @end example mini_ker.texi(,683) mini_ker.texi(,684) Whenever the user is not concerned with giving a specific name to a mini_ker.texi(,685) function, it is possible to specify the equation only with mini_ker.texi(,686) @code{eqn:}. Therefore the user may replace an instruction as: mini_ker.texi(,687) @example mini_ker.texi(,688) var: ff_dump, mini_ker.texi(,689) fun: f_dump = - rd*(eta_speed - eta_speed_limiting); mini_ker.texi(,690) @end example mini_ker.texi(,691) with: mini_ker.texi(,692) @example mini_ker.texi(,693) eqn: ff_dump = - rd*(eta_speed - eta_speed_limiting); mini_ker.texi(,694) @end example mini_ker.texi(,695) mini_ker.texi(,696) In that case, the unnamed function will take the name of the defined mini_ker.texi(,697) variable preceded by the @samp{$} sign: @code{$ff_dump}. mini_ker.texi(,698) mini_ker.texi(,699) @subsubheading Starting points mini_ker.texi(,700) mini_ker.texi(,701) @cindex starting point mini_ker.texi(,702) mini_ker.texi(,703) The cells equations require state initial conditions. In some case, the mini_ker.texi(,704) transfers may also need starting points although they are determined from mini_ker.texi(,705) the cell values. mini_ker.texi(,706) mini_ker.texi(,707) In the predator-prey model the starting points for cells are: mini_ker.texi(,708) @example mini_ker.texi(,709) ! initial state mini_ker.texi(,710) ! ------------- mini_ker.texi(,711) eta_prey = 1.; mini_ker.texi(,712) eta_pred = 1.; mini_ker.texi(,713) @end example mini_ker.texi(,714) mini_ker.texi(,715) When there is a non trivial implicit relationship between the transfers mini_ker.texi(,716) in the model, it may be usefull or even necessary to set some mini_ker.texi(,717) transfers to non-zero values. This difficulty is only relevant for the very mini_ker.texi(,718) first step of the simulation and will be used as a mini_ker.texi(,719) first guess of @math{\varphi}. The uninitialized transfers having mini_ker.texi(,720) a default compiler-dependant (often zero) value, an initialization mini_ker.texi(,721) to another value may help avoiding singular functions or matrix and mini_ker.texi(,722) ensure convergence in the Newton algorithm used to solve the transfer implicit mini_ker.texi(,723) equation. mini_ker.texi(,724) mini_ker.texi(,753) mini_ker.texi(,754) @subsubheading The cell and transfer arrays mini_ker.texi(,755) mini_ker.texi(,756) @vindex eta(.) mini_ker.texi(,757) @vindex ff(.) mini_ker.texi(,758) @vindex mp mini_ker.texi(,759) @vindex np mini_ker.texi(,760) mini_ker.texi(,761) Sometime it is easier to iterate over an array than to use the mini_ker.texi(,762) cell or transfer variable name. This is possible because there is a mini_ker.texi(,763) correspondence between the variable names mini_ker.texi(,764) and the fortran array @code{eta(.)} for the cell variables and mini_ker.texi(,765) the fortran array @code{ff(.)} for the transfer variables@footnote{In fact mini_ker.texi(,766) the variables names are transformed into fortran array elements mini_ker.texi(,767) by mortran generated macros, so the symbolic names defined in the mini_ker.texi(,768) mortran blocks never appears in the generated fortran code, they are mini_ker.texi(,769) replaced by the fortran arrays.}. mini_ker.texi(,770) mini_ker.texi(,771) The index of the variable is determined by the order of appearance in mini_ker.texi(,772) the variable definition blocks. It is reminded in the output, as mini_ker.texi(,773) explained later (@pxref{Simulation and output}). mini_ker.texi(,774) mini_ker.texi(,775) The number of cells is in the integer @code{np} variable, and the mini_ker.texi(,776) number of transfer is in the integer @code{mp} variable. mini_ker.texi(,777) mini_ker.texi(,778) @subsubheading title file mini_ker.texi(,779) mini_ker.texi(,780) @anchor{Title file} mini_ker.texi(,781) @cindex title file mini_ker.texi(,782) @cindex @file{title.tex} mini_ker.texi(,783) mini_ker.texi(,784) For some graphics generation, a file with name @file{title.tex} is required mini_ker.texi(,785) which sets the title. The following instructions take care of that: mini_ker.texi(,786) mini_ker.texi(,787) @example mini_ker.texi(,788) OPEN(50,FILE='title.tex',STATUS='UNKNOWN'); mini_ker.texi(,789) write(50,5000) apar,cpar; mini_ker.texi(,790) 5000;format('Lotka-Volterra par:',2F4.1); mini_ker.texi(,791) mini_ker.texi(,792) close(50); mini_ker.texi(,793) @end example mini_ker.texi(,794) mini_ker.texi(,795) In that case the parameter values are written down, to differenciate between mini_ker.texi(,796) different runs. This step is in general not needed. mini_ker.texi(,797) mini_ker.texi(,798) @c The correspondence with basic components are printed out at execution mini_ker.texi(,799) @c time as explained in @ref{Simulation and output,, mini_ker.texi(,800) @c Running a simulation and using the output}. Also, a @file{Model.hlp} is mini_ker.texi(,801) @c generated that recalls the basic names and equations of the model. mini_ker.texi(,802) @c It may be noted that whenever mini_ker.texi(,803) @c the order of variable-functions is the same between indexed declaration and mini_ker.texi(,804) @c symbolic, the two generated Fortran code are almost identical. mini_ker.texi(,805) mini_ker.texi(,806) @node Setting and running a model mini_ker.texi(,807) @section Setting and running a model mini_ker.texi(,808) mini_ker.texi(,809) In this section it is assumed that a programming environment has been mini_ker.texi(,810) properly setup. This environment may use either cmz or make to drive mini_ker.texi(,811) the preprocessing and compilation. mini_ker.texi(,812) You can skip the part related with the environment you don't intend to use. mini_ker.texi(,813) mini_ker.texi(,814) For instructions regarding the mini_ker.texi(,815) installation, see @ref{Installation}. mini_ker.texi(,816) mini_ker.texi(,817) mini_ker.texi(,818) @menu mini_ker.texi(,819) * Setting up a model with cmz:: mini_ker.texi(,820) * Setting up a model with make:: mini_ker.texi(,821) * Simulation and output:: mini_ker.texi(,822) * Graphics:: mini_ker.texi(,823) @end menu mini_ker.texi(,824) mini_ker.texi(,825) @node Setting up a model with cmz mini_ker.texi(,826) @subsection Setup a model and compile with cmz mini_ker.texi(,827) mini_ker.texi(,828) @cindex @command{mod} mini_ker.texi(,829) @cindex @file{$zinit} mini_ker.texi(,830) @cindex @file{$dimetaphi} mini_ker.texi(,831) mini_ker.texi(,832) The user defined sequences are @samp{KEEP} in the mini_ker.texi(,833) cmz world. The most common organization is to have a cmz file in a mini_ker.texi(,834) subdirectory of the directory containing the @file{mini_ker.cmz} mini_ker.texi(,835) cmz file. In this mini_ker.texi(,836) cmz file there should be a @samp{PATCH} called @samp{zinproc} mini_ker.texi(,837) with the KEEPs within the patch. The KEEP must be called @file{$zinit}. mini_ker.texi(,838) @c and @file{$dimetaphi}. mini_ker.texi(,839) mini_ker.texi(,840) From within cmz in the directory of your model the source extraction, mini_ker.texi(,841) compilation and linking will be triggered by a @command{mod} command. This macro mini_ker.texi(,842) uses the @file{selseq.kumac} information to find the @file{mini_ker.cmz} mini_ker.texi(,843) cmz file. mini_ker.texi(,844) @command{mod} mini_ker.texi(,845) shall create a directory with the same name than the cmz file, mini_ker.texi(,846) @file{mymodel/} in our example. In this directory there is another mini_ker.texi(,847) directory @file{cfs/} containing the sources extracted from the cmz file. mini_ker.texi(,848) mini_ker.texi(,849) The file @file{mymodel_o.tmp} contains all the mortran code generated mini_ker.texi(,850) by cmz with the sequences substituted, including the @file{$zinit}. @c and mini_ker.texi(,851) @c @file{$dimetaphi} sequences (assembled code). mini_ker.texi(,852) The fortran produced by the preprocessing and mini_ker.texi(,853) splitting of this file is in files with the traditional @samp{.f} suffix. mini_ker.texi(,854) The principal program is in @file{principal.f}. An efficient way of getting mini_ker.texi(,855) familiar with mini_ker methods is looking at the @file{mymodel_o.tmp} where mini_ker.texi(,856) all sequences and main Mortran instructions are gathered. Symbolic derivation mini_ker.texi(,857) @c FIXME pas ici la symbolic derivation mini_ker.texi(,858) is noted as @code{F_D(expression)(/variable)}, and the resulting Fortran code mini_ker.texi(,859) is in @file{principal.f}. mini_ker.texi(,860) mini_ker.texi(,861) @command{mod} also triggers compilation and linking. The object files are in mini_ker.texi(,862) the same @file{cfs/} directory and the executable is in the @file{mymodel/} mini_ker.texi(,863) directory, with name @file{mymodel.exe}. mini_ker.texi(,864) mini_ker.texi(,865) @node Setting up a model with make mini_ker.texi(,866) @subsection Setup a model and compile with make mini_ker.texi(,867) mini_ker.texi(,868) @cindex compilation mini_ker.texi(,869) @c @cindex @file{dimetaphi.mti} mini_ker.texi(,870) @cindex @file{zinit.mti} mini_ker.texi(,871) @vindex model_file_name mini_ker.texi(,872) mini_ker.texi(,873) With make, the sequences are files ending with @samp{.mti} (for mini_ker.texi(,874) mortran include files), mini_ker.texi(,875) called, for example, @file{zinit.mti}. mini_ker.texi(,876) @c and @file{dimetaphi.mti}. mini_ker.texi(,877) They are included by mini_ker.texi(,878) @command{mortran} in other source files. You also need a @file{Makefile} mini_ker.texi(,879) to drive the compilation of the model. mini_ker.texi(,880) mini_ker.texi(,881) If you don't need additional code or libraries to be linked with your mini_ker.texi(,882) model you have two alternatives. mini_ker.texi(,883) mini_ker.texi(,884) @enumerate mini_ker.texi(,885) @item mini_ker.texi(,886) The simplest alternative is to run mini_ker.texi(,887) the @command{start_miniker} script with the model file name as argument. mini_ker.texi(,888) It should copy a @file{zinit.mti} file mini_ker.texi(,889) ready to be edited and a Makefile ready to compile the model. For mini_ker.texi(,890) the predator prey model, for example, you could run mini_ker.texi(,891) mini_ker.texi(,892) @example mini_ker.texi(,893) $ start_miniker predator mini_ker.texi(,894) @end example mini_ker.texi(,895) mini_ker.texi(,896) @item mini_ker.texi(,897) Otherwise you can copy the Makefile from @file{template/Makefile} mini_ker.texi(,898) in the directory containing the sequences. You should then change the compiled mini_ker.texi(,899) model file name, by changing the value of the mini_ker.texi(,900) @code{model_file_name} variable to the name of your choice mini_ker.texi(,901) in the Makefile. It is set to @file{mymodel} in the template. For the mini_ker.texi(,902) predator-prey model, it could be set like mini_ker.texi(,903) mini_ker.texi(,904) @example mini_ker.texi(,905) model_file_name = predator mini_ker.texi(,906) @end example mini_ker.texi(,907) mini_ker.texi(,908) If you want the executable model file to be built in another directory, you could mini_ker.texi(,909) set mini_ker.texi(,910) mini_ker.texi(,911) @example mini_ker.texi(,912) model_file_name = some_dir/predator mini_ker.texi(,913) @end example mini_ker.texi(,914) mini_ker.texi(,915) The other items set in the default Makefile should be right. mini_ker.texi(,916) @end enumerate mini_ker.texi(,917) mini_ker.texi(,918) The preprocessing and the compilation are launched with mini_ker.texi(,919) mini_ker.texi(,920) @example mini_ker.texi(,921) make all mini_ker.texi(,922) @end example mini_ker.texi(,923) mini_ker.texi(,924) The mortran files are generated by the cmz directive preprocessor mini_ker.texi(,925) from files found in the package source directories. The mortran files mini_ker.texi(,926) end with @samp{.mtn} for the main files and @samp{.mti} for mini_ker.texi(,927) include files. They are output in the current directory. mini_ker.texi(,928) The mortran preprocessor then preprocess these mortran files and includes mini_ker.texi(,929) the sequences. The resulting fortran code is also in the current directory, mini_ker.texi(,930) in files with a @samp{.f} suffix. mini_ker.texi(,931) Some fortran files ending with @samp{.F} may also be mini_ker.texi(,932) created by the cmz directive preprocessor. mini_ker.texi(,933) The object files resulting from the compilation of all the mini_ker.texi(,934) fortran files (generated from mortran or directly from fortran files) are mini_ker.texi(,935) there too. mini_ker.texi(,936) mini_ker.texi(,937) In case you want to override the default sequences or a subroutine file mini_ker.texi(,938) you just have to create it in your working directory along with the mini_ker.texi(,939) @file{zinit.mti}. @c and @file{dimetaphi.mti}. mini_ker.texi(,940) For example you could want to mini_ker.texi(,941) create or modify a @file{zsteer.mti} file (@pxref{End of time step,, mini_ker.texi(,942) Executing code at the end of each time step}), a @file{zcmd_law.mti} file mini_ker.texi(,943) (@pxref{Control laws}), a @file{monitor.f} file mini_ker.texi(,944) (@pxref{Turning the model into a subroutine}) to take advantage of mini_ker.texi(,945) features presented later in this manual. mini_ker.texi(,946) mini_ker.texi(Minik,947) More in-depth discussion of using make to run mini_ker.texi(Minik,947) Miniker is covered in mini_ker.texi(Minik,948) @ref{Advanced use of Miniker with make}. mini_ker.texi(,949) For example it is also possible to create files that are to be mini_ker.texi(,950) preprocessed by the cmz directive mini_ker.texi(,951) preprocessor and separate source files and generated files. mini_ker.texi(,952) This advanced use is more precisely covered in mini_ker.texi(,953) @ref{Programming with cmz directives}. mini_ker.texi(,954) mini_ker.texi(,955) @page mini_ker.texi(,956) @node Simulation and output mini_ker.texi(,957) @subsection Running a simulation and using the output mini_ker.texi(,958) mini_ker.texi(,959) @cindex running model mini_ker.texi(,960) mini_ker.texi(,961) Once compiled the model is ready to run, it only has to be executed. On mini_ker.texi(,962) standard output informations about the states, transfers, tangent linear mini_ker.texi(,963) system and other jacobian matrices are printed. mini_ker.texi(,964) For example the predator-prey model could be executed with: mini_ker.texi(,965) mini_ker.texi(,966) @example mini_ker.texi(,967) ./predator > result.lis mini_ker.texi(,968) @end example mini_ker.texi(,969) mini_ker.texi(,970) @cindex output file mini_ker.texi(,971) @vindex dEta(.) mini_ker.texi(,972) @cindex @file{res.data} mini_ker.texi(,973) @cindex @file{dres.data} mini_ker.texi(,974) @cindex @file{tr.data} mini_ker.texi(,975) @cindex @file{aspha.data} mini_ker.texi(,976) @cindex @file{Model.hlp} mini_ker.texi(,977) mini_ker.texi(,978) @c In case of a model entered symbolically mini_ker.texi(,979) @c (@pxref{Symbolic model description}) mini_ker.texi(,980) The correspondance mini_ker.texi(,981) between the symbolic variables and the basic vectors and functions mini_ker.texi(,982) are printed at run time: mini_ker.texi(,983) mini_ker.texi(,984) @example mini_ker.texi(,985) ---------------- Informing on Phi definition ----------------- mini_ker.texi(,986) Var-name, Function-name, index in ff vector mini_ker.texi(,987) ff_interact f_interact 1 mini_ker.texi(,988) ---------------------------------------------------- mini_ker.texi(,989) mini_ker.texi(,990) --------------- Informing on Eta definition ------------------ mini_ker.texi(,991) Var-name, Function-name, index in eta vector mini_ker.texi(,992) eta_prey deta_prey 1 mini_ker.texi(,993) eta_pred deta_pred 2 mini_ker.texi(,994) @end example mini_ker.texi(,995) mini_ker.texi(,996) A summary of the model equations are in @file{Model.hlp} file. For mini_ker.texi(,997) the same example: mini_ker.texi(,998) mini_ker.texi(,999) @example mini_ker.texi(,1000) ======================= set_Phi mini_ker.texi(,1001) mini_ker.texi(,1002) 1 ff_interact f_interact eta_pray*eta_pred mini_ker.texi(,1003) ======================= set_Eta mini_ker.texi(,1004) mini_ker.texi(,1005) 1 eta_pray deta_pray apar*eta_pray-apar*ff_interact mini_ker.texi(,1006) 2 eta_pred deta_pred -cpar*eta_pred+cpar*ff_interact mini_ker.texi(,1007) @end example mini_ker.texi(,1008) @c FIXME never talked about that. Certainly not here mini_ker.texi(,1009) when other general functions are specified with @code{f_set}, it can appear mini_ker.texi(,1010) also in the same help file when replaced by @code{fun_set}. mini_ker.texi(,1011) mini_ker.texi(,1012) As far as possible, all data printed in the listing are associated mini_ker.texi(,1013) with a name related to a variable. Here is an extract: mini_ker.texi(,1014) mini_ker.texi(,1015) @example mini_ker.texi(,1016) Gamma :-8.19100E-02-1.42151E-01 3.87150E-02 mini_ker.texi(,1017) eta_courant eta_T_czcx eta_T_sz mini_ker.texi(,1018) ------------------------------------------------ mini_ker.texi(,1019) Omega : 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 mini_ker.texi(,1020) courant_L T_czcx Psi_Tczc Psi_Tsz mini_ker.texi(,1021) ------------------------------------------------ mini_ker.texi(,1022) @end example mini_ker.texi(,1023) for the two known vectors of the system, and: mini_ker.texi(,1024) @example mini_ker.texi(,1025) >ker : Matrice de couplage 4 4 4 4 mini_ker.texi(,1026) courant_L Raw(1,j=1,4): 1.000 -9.9010E-03 0.000 0.000 mini_ker.texi(,1027) T_czcx Raw(2,j=1,4): -2.7972E-02 1.000 0.000 9.9900E-04 mini_ker.texi(,1028) Psi_Tczcx Raw(3,j=1,4): 0.1605 9.7359E-02 1.000 -5.7321E-03 mini_ker.texi(,1029) Psi_Tsz Raw(4,j=1,4): 0.000 -0.1376 5.7225E-03 1.000 mini_ker.texi(,1030) Var-Name courant_L T_czcx Psi_Tczc Psi_Tsz mini_ker.texi(,1031) ---------------------------------------------------------- mini_ker.texi(,1032) @end example mini_ker.texi(,1033) mini_ker.texi(,1034) where the @code{couplage} (coupling matrix) is given that corresponds mini_ker.texi(,1035) to the matrix coupling the four transfer components after @math{\delta\eta} mini_ker.texi(,1036) has been eliminated from system. It is computed in the subprogram mini_ker.texi(,1037) @file{oker} (for kernel) which solves the system. mini_ker.texi(,1038) mini_ker.texi(,1039) Basic results are output in a set of @samp{.data} files. mini_ker.texi(,1040) The first line (or two lines) describes the column with a @samp{#} mini_ker.texi(,1041) character used to mark the lines as comments (for @command{gnuplot} mini_ker.texi(,1042) for example). mini_ker.texi(,1043) In the @samp{.data} files, the data are simply separated with spaces. mini_ker.texi(,1044) Each data file has the @code{time} variable values as first column. mini_ker.texi(,1045) @footnote{@file{dres.data} has another time related variable as second column: mini_ker.texi(,1046) @cindex @file{dres.data} mini_ker.texi(,1047) @vindex dt mini_ker.texi(,1048) @code{dt}, the time step that can vary in the course of a simulation.}. mini_ker.texi(,1049) Following columns give the values of @code{eta(.)} in @file{res.data}, mini_ker.texi(,1050) @code{dEta(.)} in @file{dres.data} -- the step by step variation of mini_ker.texi(,1051) @code{eta(.)} -- and @code{ff(.)} in @file{tr.data}. mini_ker.texi(,1052) mini_ker.texi(,1053) Along the simulation the @acronym{TEF} Jacobian matrices are computed. mini_ker.texi(,1054) A transfer variables elimination process also leads to the definition mini_ker.texi(,1055) of the classical state advance matrix of the system mini_ker.texi(,1056) (the corresponding array is @code{aspha(.,.)} in the code). mini_ker.texi(,1057) This matrix is output in the file @file{aspha.data} that is used to mini_ker.texi(,1058) post-run dynamics analyses. The matrix columns are written column wise on each mini_ker.texi(,1059) record. mini_ker.texi(,1060) @xref{Stability of fastest modes,,Stability analysis of fastest modes}. mini_ker.texi(,1061) @xref{Generalized TLS,,Generalized mini_ker.texi(,1062) tangent linear system analysis}. It is not used in the solving process. mini_ker.texi(,1063) mini_ker.texi(,1064) Other @samp{.data} files will be described later. mini_ker.texi(,1065) mini_ker.texi(,1066) @c FIXME already said mini_ker.texi(,1067) @c At the begining of a run, the help file @file{Model.hlp} is generated for mini_ker.texi(,1068) @c global checkiing of the model. In the example, it is: mini_ker.texi(,1069) mini_ker.texi(,1070) @c @example mini_ker.texi(,1071) @c ======================= set_Phi mini_ker.texi(,1072) @c 1 ff_interact f_interact eta_pray*eta_pred mini_ker.texi(,1073) @c ======================= set_Eta mini_ker.texi(,1074) @c 1 eta_pray deta_pray apar*eta_pray-apar*ff_interact mini_ker.texi(,1075) @c 2 eta_pred deta_pred -cpar*eta_pred+cpar*ff_interact mini_ker.texi(,1076) @c @end example mini_ker.texi(,1077) mini_ker.texi(,1078) mini_ker.texi(,1079) @node Graphics mini_ker.texi(,1080) @subsection Doing graphics mini_ker.texi(,1081) mini_ker.texi(,1082) @cindex graphics mini_ker.texi(,1083) @cindex graphics with @command{gnuplot} mini_ker.texi(,1084) @cindex graphics with @command{PAW} mini_ker.texi(,1085) mini_ker.texi(,1086) @c The format of the @samp{.data} files are coherent with GNU graphics, that is mini_ker.texi(,1087) @c the data are simply separated with spaces. mini_ker.texi(,1088) Since the data are simply separated with spaces, and comment lines mini_ker.texi(,1089) begin with @samp{#}, the mini_ker.texi(,1090) files can be vizualised with many programs. mini_ker.texi(,1091) With @command{gnuplot}, for example, to plot @code{eta(@var{n})}, mini_ker.texi(,1092) the @command{gnuplot} statement could be: mini_ker.texi(,1093) mini_ker.texi(,1094) @example mini_ker.texi(,1095) plot "res.data" using 1:(@var{n}+1) mini_ker.texi(,1096) @end example mini_ker.texi(,1097) mini_ker.texi(,1098) The similar one for @code{ff(@var{n})}: mini_ker.texi(,1099) @example mini_ker.texi(,1100) plot "tr.data" using 1:(@var{n}+1) mini_ker.texi(,1101) @end example mini_ker.texi(,1102) mini_ker.texi(,1103) For people using @command{PAW}, the CERN graphical computer code, mini_ker.texi(Minik,1104) Miniker prepares mini_ker.texi(,1105) kumacs that allow to read process the @samp{.data} files in the form of mini_ker.texi(,1106) @emph{n-tuples} (see the @cite{PAW manual} for more information). mini_ker.texi(,1107) In that cas, the flag @code{sel paw} has to be gievn in the @file{selsequ.kumac}. mini_ker.texi(,1108) The generated n-tuples are ready to use only mini_ker.texi(,1109) for vector dimension of at most 10 (including the variable @code{time}). mini_ker.texi(,1110) These kumacs are overwritten each time the model is run. Usaually, gnuplot has mini_ker.texi(,1111) to be preferred, but when using surfaces and histograms, PAW is better. mini_ker.texi(,1112) The @file{gains.f} (and @file{go.xqt} is provided as an example in the mini_ker.texi(Minik,1113) Miniker files. mini_ker.texi(,1114) mini_ker.texi(,1115) @node Controlling the run mini_ker.texi(,1116) @section Controlling the run mini_ker.texi(,1117) mini_ker.texi(,1118) @cindex controlling the run mini_ker.texi(,1119) mini_ker.texi(,1120) It is possible to add code that will be executed at the end of each time mini_ker.texi(,1121) step. It is also possible to specify which time step leads to a printout on mini_ker.texi(,1122) standard output. For maximal control, the code running te model may be mini_ker.texi(,1123) turned into a subroutine to be called from another fortran (or C) mini_ker.texi(,1124) program, this possibility is covered in @ref{Calling the model code}. mini_ker.texi(,1125) mini_ker.texi(,1126) @menu mini_ker.texi(,1127) * End of time step:: mini_ker.texi(,1128) * Controlling the printout and data output:: mini_ker.texi(,1129) @end menu mini_ker.texi(,1130) mini_ker.texi(,1131) @node End of time step mini_ker.texi(,1132) @subsection Executing code at the end of each time step mini_ker.texi(,1133) mini_ker.texi(,1134) @cindex @file{zsteer} mini_ker.texi(,1135) @cindex @file{zsteer.inc} mini_ker.texi(,1136) mini_ker.texi(,1137) The code in the sequence @file{zsteer} is executed at the end of each time mini_ker.texi(,1138) step. It is possible to change the time step length (variable @code{dt}) mini_ker.texi(,1139) verify that the non linearity are not too big, or perform mini_ker.texi(,1140) discontinuous modifications of the states. One available variable @code{res} mini_ker.texi(,1141) might be usefull for time step monitoring. At the end of the time step, mini_ker.texi(,1142) as soon as @math{\varphi} has been computed, a numerical test is applied mini_ker.texi(,1143) on a pseudo relative quadratic residual between mini_ker.texi(,1144) @math{\varphi=f(\eta(t-dt)+d\varphi} (@code{ ffl}), where @math{d\varphi} mini_ker.texi(,1145) is given by the system resolution in @code{ker},and mini_ker.texi(,1146) @math{\varphi=f(\eta),\varphi)}, Fortran variable (@code{ff}): mini_ker.texi(,1147) mini_ker.texi(,1148) @verbatim mini_ker.texi(,1149) ! ======================================================== mini_ker.texi(,1150) ! test linearite ffl - ff mini_ker.texi(,1151) ! ======================================================== mini_ker.texi(,1152) if (istep.gt.1) mini_ker.texi(,1153) < res=0.; ; mini_ker.texi(,1154) if (res .gt. TOL_FFL) mini_ker.texi(,1155) < print*,'*** pb linearite : res > TOL_FFL a istep',istep,res,' > ',TOL_FFL; mini_ker.texi(,1156) do io=1,m < z_pr: io,ff(io),ff(io)-ffl(io); >; mini_ker.texi(,1157) >; mini_ker.texi(,1158) >; mini_ker.texi(,1159) @end verbatim mini_ker.texi(,1160) mini_ker.texi(,1161) This test hence applies only for non linearities in tranfer models. Nevertheless, mini_ker.texi(,1162) @code{res} might be usefull to monitor the time step @code{dt} in @code{ZSTEER} mini_ker.texi(,1163) and eventually go backward one step (@code{goto :ReDoStep:}). mini_ker.texi(,1164) This can more appropriatly be coded in the (empty in default case) mini_ker.texi(,1165) sequence @code{zstep}, inserted just before time-advancing mini_ker.texi(,1166) states and @code{time} variables in @file{principal}. mini_ker.texi(,1167) @vindex ffl(.) mini_ker.texi(,1168) @cindex @code{ffl} (linearity test) mini_ker.texi(,1169) @cindex linearity test mini_ker.texi(,1170) mini_ker.texi(,1171) It is also possible to fix the value of the criterium @code{TOL_FFL} in mini_ker.texi(,1172) @file{zinit} different from its default value of @math{10^{-3}} -- mini_ker.texi(,1173) independent of the Fortran precision. mini_ker.texi(,1174) mini_ker.texi(,1175) mini_ker.texi(,1176) Many other variables are available, including mini_ker.texi(,1177) @vtable @code mini_ker.texi(,1178) @item istep mini_ker.texi(,1179) The step number; mini_ker.texi(,1180) @item couplage(.) mini_ker.texi(,1181) The @acronym{TEF} coupling matrix between transfers; mini_ker.texi(,1182) @item H mini_ker.texi(,1183) The Jacobian matrix corresponding with: mini_ker.texi(,1184) @c \varphi(t) &= f(\eta(t),\varphi(t))\cr mini_ker.texi(,1185) @c \frac{\partial g(\eta(t),\varphi(t))}{\partial \eta(t)} mini_ker.texi(,1191) g_1(eta,phi); mini_ker.texi(,1193) @item Bb mini_ker.texi(,1194) The Jacobian matrix corresponding with: mini_ker.texi(,1200) g_2(eta,phi); mini_ker.texi(,1202) @item Bt mini_ker.texi(,1203) The Jacobian matrix corresponding with: mini_ker.texi(,1209) f_1(eta,phi); mini_ker.texi(,1211) @item D mini_ker.texi(,1212) The Jacobian matrix corresponding with: mini_ker.texi(,1218) f_2(eta,phi); mini_ker.texi(,1220) mini_ker.texi(,1221) @item aspha mini_ker.texi(,1222) The state advance matrix; mini_ker.texi(,1223) @item dneta mini_ker.texi(,1224) @itemx dphi mini_ker.texi(,1225) the variable increments; mini_ker.texi(,1226) @end vtable mini_ker.texi(,1227) One should be aware of that the linearity test concerns the preceding step. mini_ker.texi(,1228) We have yet no example of managing the time-step. mini_ker.texi(,1229) mini_ker.texi(,1230) @page mini_ker.texi(,1231) @node Controlling the printout and data output mini_ker.texi(,1232) @subsection Controlling the printout and data output mini_ker.texi(,1233) mini_ker.texi(,1234) @cindex printing mini_ker.texi(,1235) @vindex zprint mini_ker.texi(,1236) @vindex modzprint mini_ker.texi(,1237) mini_ker.texi(,1238) The printout on standard output is performed if the variable @code{zprint} mini_ker.texi(,1239) of type @code{logical} is true. Therefore it is possible to control this mini_ker.texi(,1240) printout by setting @code{zprint} false or true. For example the following mini_ker.texi(,1241) code, in sequence @file{zsteer}, triggers printing for every mini_ker.texi(,1242) @code{modzprint} time step and the two following time steps: mini_ker.texi(,1243) mini_ker.texi(,1244) @example mini_ker.texi(,1245) ZPRINT = mod(istep+1,modzprint).eq.0; mini_ker.texi(,1246) Zprint = zprint .or. mod(istep+1,modzprint).eq.1; mini_ker.texi(,1247) Zprint = zprint .or. mod(istep+1,modzprint).eq.2; mini_ker.texi(,1248) @end example mini_ker.texi(,1249) mini_ker.texi(,1250) The data output to @file{.data} files described in @ref{Simulation and output,, mini_ker.texi(,1251) Running a simulation and using the output} is performed if the mini_ker.texi(,1252) @code{logical} variable @code{zout} is true. For example the following mini_ker.texi(,1253) code, in @file{zsteer}, triggers output to @file{.data} files every mini_ker.texi(,1254) @code{modzout} step. mini_ker.texi(,1255) mini_ker.texi(,1256) @example mini_ker.texi(,1257) Zout = mod(istep,modzout).eq.0; mini_ker.texi(,1258) @end example mini_ker.texi(,1259) mini_ker.texi(,1260) @node Advanced programming mini_ker.texi(Minik,1261) @chapter Advanced mini_ker.texi(Minik,1261) Miniker programming mini_ker.texi(,1262) mini_ker.texi(,1263) @menu mini_ker.texi(,1264) * Selecting features:: mini_ker.texi(,1265) * Calling the model code:: mini_ker.texi(,1266) * 1D gridded model:: mini_ker.texi(,1267) * Double precision:: mini_ker.texi(,1268) * Partial Derivatives:: mini_ker.texi(,1269) * Rule of programming non continuous models:: mini_ker.texi(,1270) * Parameters:: mini_ker.texi(,1271) * Observations and data:: mini_ker.texi(,1272) * Explicit model size:: mini_ker.texi(,1273) * Programming with cmz directives:: mini_ker.texi(,1274) @end menu mini_ker.texi(,1275) mini_ker.texi(,1276) @node Selecting features mini_ker.texi(,1277) @section Overview of additional features setting mini_ker.texi(,1278) mini_ker.texi(,1279) @cindex feature setting mini_ker.texi(,1280) @cindex select flag mini_ker.texi(,1281) @cindex logical flags mini_ker.texi(,1282) @cindex @file{selseq.kumac} mini_ker.texi(,1283) mini_ker.texi(,1284) It is possible to enable some features by selecting which code should mini_ker.texi(,1285) be part of the principal program. Each of these optionnal features are mini_ker.texi(,1286) associated with a @dfn{select flag}. mini_ker.texi(,1287) For example mini_ker.texi(,1288) @c the optimisation with minuit is associated with the select mini_ker.texi(,1289) @c flag @samp{minuik}, mini_ker.texi(,1290) double precision is used instead of simple precision with mini_ker.texi(,1291) the @samp{double} select flag, mini_ker.texi(,1292) the model is a subroutine with the select flag @samp{monitor}, mini_ker.texi(,1293) the Kalman filter code is set with @samp{kalman} and the 1D gridded mini_ker.texi(,1294) model capabilities are associated with @samp{grid1d}. mini_ker.texi(,1295) @c Currently it is only possible mini_ker.texi(,1296) @c to select features in cmz. mini_ker.texi(,1297) To select a given feature the cmz statement @code{sel @var{select_flag}} should mini_ker.texi(,1298) be written down in the @file{selseq.kumac} found in the model directory. mini_ker.texi(,1299) With make either the corresponding variable should be set to 1 or it mini_ker.texi(,1300) should be added to the @code{SEL} make variable, depending on the feature. mini_ker.texi(,1301) mini_ker.texi(,1302) Other features don't need different or additional code to be used. mini_ker.texi(,1303) Most of the features are enabled by setting specific logical variables to mini_ker.texi(,1304) @samp{.true.}. This is the case for mini_ker.texi(,1305) @code{zback} for the adjoint model, @code{zcommand} if the command is in a file mini_ker.texi(,1306) and @code{zlaw} if it is a function and @code{zkalman} for the Kalman filter. mini_ker.texi(,1307) These select and logical flags are described in the corresponding sections. mini_ker.texi(,1308) mini_ker.texi(,1309) In cmz an alternative of writing select flags to @file{selseq.kumac} is to mini_ker.texi(,1310) drive the compilation with @code{smod @var{sel_flag}}. In that case the mini_ker.texi(,1311) @var{sel_flag} is selected and the files and executable goes to a directory mini_ker.texi(,1312) named @file{sel_flag}. mini_ker.texi(,1313) mini_ker.texi(,1314) The select flags are taken into account during cmz directives preprocessing. mini_ker.texi(,1315) Therefore you have the possibility to use these flags to conditionnaly mini_ker.texi(,1316) include pieces of code. In most cases you don't need to include code conditionally mini_ker.texi(,1317) yourself though, but if you want to, this is covered in mini_ker.texi(,1318) @ref{Programming with cmz directives}. mini_ker.texi(,1319) mini_ker.texi(,1320) @node Calling the model code mini_ker.texi(,1321) @section Calling the model code mini_ker.texi(,1322) mini_ker.texi(,1323) When the model code is a subroutine, it can be called from another fortran mini_ker.texi(,1324) program unit (or another program), and the model will be mini_ker.texi(,1325) run each time the subroutine is called. mini_ker.texi(,1326) This technique could be used, for example to perform optimization mini_ker.texi(,1327) (@pxref{Adjoint model and optimisation,,Adjoint model and optimisation mini_ker.texi(Minik,1328) with Miniker}), or to run the model with different parameters. mini_ker.texi(,1329) mini_ker.texi(,1330) @menu mini_ker.texi(,1331) * Turning the model into a subroutine:: mini_ker.texi(,1332) * The model subroutine:: mini_ker.texi(,1333) @end menu mini_ker.texi(,1334) mini_ker.texi(,1335) @node Turning the model into a subroutine mini_ker.texi(,1336) @subsection Turning the model into a subroutine mini_ker.texi(,1337) mini_ker.texi(,1338) @c This feature is allready enabled with @command{make}, and to mini_ker.texi(,1339) @c override the default program a file called @file{monitor.f} has to be created mini_ker.texi(,1340) @c in the working directory. The default program simple calls the model mini_ker.texi(,1341) @c subroutine. mini_ker.texi(,1342) mini_ker.texi(,1343) With cmz, one has to do a mini_ker.texi(,1344) @example mini_ker.texi(,1345) sel monitor mini_ker.texi(,1346) @end example mini_ker.texi(,1347) in the @file{selseq.kumac} file and create the KEEP that call the mini_ker.texi(,1348) model code. @xref{Selecting features, Overview of additional features mini_ker.texi(,1349) setting}. mini_ker.texi(,1350) mini_ker.texi(,1351) With make @samp{monitor} should be added to the @code{SEL} variable in mini_ker.texi(,1352) the @file{Makefile}, for example: mini_ker.texi(,1353) mini_ker.texi(,1354) @example mini_ker.texi(,1355) SEL = monitor mini_ker.texi(,1356) @end example mini_ker.texi(,1357) mini_ker.texi(,1358) A file that call the principal subroutine should also be written, using mini_ker.texi(,1359) the prefered language of the user. The additional object files should mini_ker.texi(Minik,1360) then be linked with the mini_ker.texi(Minik,1360) Miniker objects. To that aim they may be added mini_ker.texi(,1361) to the @code{miniker_user_objects} variable. mini_ker.texi(,1362) mini_ker.texi(,1363) @node The model subroutine mini_ker.texi(,1364) @subsection Calling the model subroutine mini_ker.texi(,1365) mini_ker.texi(,1366) The model subroutine is called @samp{principal} and is called with the mini_ker.texi(,1367) following arguments: mini_ker.texi(,1368) mini_ker.texi(,1369) @deffn Subroutine principal (Cost, ncall, integer_flag, file_suffix, info, idxerror) mini_ker.texi(,1370) Where @var{Cost} is a real number, @code{real} or @code{double precision}, mini_ker.texi(,1371) and is set by the @code{principal} mini_ker.texi(,1372) subroutine. It holds the value of the cost function if such function has been mini_ker.texi(,1373) defined (the use and setting of a cost function is covered later, mini_ker.texi(,1374) see @ref{Cost function coding and adjoint modeling}). mini_ker.texi(,1375) @var{ncall} is an integer which corresponds with the number of mini_ker.texi(,1376) call to @code{principal} done so far, it should be initialized to 0 and mini_ker.texi(,1377) its value should not be changed, as it is changed in the @code{principal} mini_ker.texi(,1378) subroutine. mini_ker.texi(,1379) @var{integer_flag} is an integer that can be set by the user to be accessed mini_ker.texi(,1380) in the @code{principal} subroutine. For example its value could be used to mini_ker.texi(,1381) set some flags in the @file{zinit} sequence. mini_ker.texi(,1382) @var{file_suffix} is a character string, that is suffixed to the output files mini_ker.texi(,1383) names instead of @samp{.data}. If the first character is the null character mini_ker.texi(,1384) @samp{char(0)}, the default suffix, @samp{.data} is appended. mini_ker.texi(,1385) @var{info} and @var{idxerror} are integer used for error reporting. mini_ker.texi(,1386) @var{idxerror} value is 0 if there was no error. It is negative for mini_ker.texi(,1387) an alert, positive for a very serious error. The precise value determines mini_ker.texi(,1388) where the error occured. mini_ker.texi(,1389) @var{info} is an integer holding more precise information about the mini_ker.texi(,1390) error. It is usually the information value from lapack. mini_ker.texi(,1391) The precise meaning of these error codes is in @ref{tab:error_codes}. mini_ker.texi(,1392) @end deffn mini_ker.texi(,1393) mini_ker.texi(,1394) @float table, tab:error_codes mini_ker.texi(,1395) @multitable {kalman analysis state matrix advance in phase space, @math{(I-D)} inversion} {inversion} {@code{idxerror}} mini_ker.texi(,1396) @headitem Source of error or warning @tab @code{info} @tab @code{idxerror} mini_ker.texi(,1397) @c @item @code{} @tab @file{.data} @tab @tab mini_ker.texi(,1398) @item state matrix inversion in ker @tab inversion @tab 1 mini_ker.texi(,1399) @item time advance system resolution in ker @tab system @tab 2 mini_ker.texi(,1400) @item transfer propagator, @math{(I-D)} inversion @tab inversion @tab 3 mini_ker.texi(,1401) @item kalman analysis state matrix advance in phase space, @math{(I-D)} inversion @tab inversion @tab 21 mini_ker.texi(,1402) @item kalman analysis variance covariance matrix non positive @tab Choleski @tab 22 mini_ker.texi(,1403) @item kalman analysis error matrix inversion @tab inversion @tab 23 mini_ker.texi(,1404) @item kalman error matrix advance @tab system @tab 24 mini_ker.texi(,1405) @item transfers determination linearity problem for transfers @tab @tab -1 mini_ker.texi(,1406) @item transerts determination Newton D_loop does not converge @tab @tab -2 mini_ker.texi(,1407) @end multitable mini_ker.texi(,1408) @caption{Meaning of error codes returned by principal.} mini_ker.texi(,1409) @end float mini_ker.texi(,1410) mini_ker.texi(,1411) In general more information than the provided arguments has to be passed mini_ker.texi(,1412) to the @code{principal} subroutine, in that case a @code{common} block, mini_ker.texi(,1413) to be written in the @file{zinit} sequence can be used. mini_ker.texi(,1414) mini_ker.texi(,1415) @page mini_ker.texi(,1416) @node 1D gridded model mini_ker.texi(,1417) @section Describing 1D gridded model mini_ker.texi(,1418) mini_ker.texi(,1419) Specific macros have been built that allow generic description of 1D gridded models. mini_ker.texi(,1420) Because of the necessity of defining left and right limiting conditions, the models mini_ker.texi(,1421) are partitionned in three groups for cell and transfer components. In the following example, mini_ker.texi(,1422) a chain of masselottes linked by springs and dumps is bounded to a wall on the left, mini_ker.texi(,1423) and open at right. The @acronym{TEF} formulation of the problem is written in the phase space (position-shift, velocity) mini_ker.texi(,1424) for node @math{k}, with bounding conditions: mini_ker.texi(,1470) mini_ker.texi(,1471) States:@* mini_ker.texi(,1472) @noindent @math{d position(t,k)/d t = velocity(t,k)@* mini_ker.texi(,1473) d velocity (t,k)/d t =(spring(t,k) - spring(t,k+1)+ dump(t,k)- dump(t,k+1))/m_k} mini_ker.texi(,1474) mini_ker.texi(,1475) Transfers:@* mini_ker.texi(,1476) @noindent @math{spring(t,k) = -k_k (position(t,k)- position(t,k-1))@* mini_ker.texi(,1477) dump(k,t) &= -d_k (velocity(t,k)- velocity(t,k-1))} mini_ker.texi(,1478) mini_ker.texi(,1479) Bounding conditions:@* mini_ker.texi(,1480) @noindent @math{position(t,0) = 0@* mini_ker.texi(,1481) velocity(t,0) = 0@* mini_ker.texi(,1482) spring(t,N+1) = 0@* mini_ker.texi(,1483) dump(t,N+1) =0} mini_ker.texi(,1484) mini_ker.texi(,1487) mini_ker.texi(,1488) @cindex down node mini_ker.texi(,1489) @cindex up node mini_ker.texi(,1490) mini_ker.texi(,1491) where @math{m_k} is the mass of node @math{k}, @math{r_k} and @math{d_k} mini_ker.texi(,1492) the rigidity of springs and dumping coefficients. There are @math{N} nodes mini_ker.texi(,1493) in the grid, from 1 to @math{N}, and two nodes outside of the grid, mini_ker.texi(,1494) a limiting node 0, and a limiting node @math{N+1}. The limiting node mini_ker.texi(,1495) corresponding with node 0 is called the @dfn{down} node, while the limiting mini_ker.texi(,1496) node corresponding with node @math{N+1} is called the @dfn{up} node. mini_ker.texi(,1497) Other models not part of the 1D grid may be added if any. mini_ker.texi(,1498) mini_ker.texi(,1499) To enable 1D gridded models, one should set the select flag @samp{grid1d}. mini_ker.texi(,1500) In cmz it is achieved setting the select flag in mini_ker.texi(,1501) @file{selseq.kumac}, like mini_ker.texi(,1502) mini_ker.texi(,1503) @example mini_ker.texi(,1504) sel grid1d mini_ker.texi(,1505) @end example mini_ker.texi(,1506) mini_ker.texi(,1507) With make, the @code{SEL} variable should contain @code{grid1d}. For example mini_ker.texi(,1508) to select @code{grid1d} and @code{monitor}, it could be mini_ker.texi(,1509) @example mini_ker.texi(,1510) SEL = grid1d,monitor mini_ker.texi(,1511) @end example mini_ker.texi(,1512) mini_ker.texi(,1513) mini_ker.texi(,1514) @menu mini_ker.texi(,1515) * 1D gridded Model size:: mini_ker.texi(,1516) * 1D gridded model code:: mini_ker.texi(,1517) @end menu mini_ker.texi(,1518) mini_ker.texi(,1519) @node 1D gridded Model size mini_ker.texi(,1520) @subsection Setting dimensions for 1D gridded model mini_ker.texi(,1521) mini_ker.texi(,1522) @c FIXME grid1d sans dimetaphi? mini_ker.texi(,1523) In that case the number of nodes, the number of states and tranferts mini_ker.texi(,1524) per node, and the number of limiting transfers and states are required. mini_ker.texi(,1525) These dimensions has to be entered in the mini_ker.texi(,1526) @file{DimEtaPhi} sequence. The parameters for cells are mini_ker.texi(,1527) @vtable @code mini_ker.texi(,1528) @item n_node mini_ker.texi(,1529) Number of cell nodes in the 1D grid. mini_ker.texi(,1530) @item n_dwn mini_ker.texi(,1531) Number of limiting cells with index -1, @i{i.e.} number of cells in the mini_ker.texi(,1532) limiting down node. mini_ker.texi(,1533) @item n_up mini_ker.texi(,1534) Number of limiting cells with index +1, @i{i.e.} number of cells in the mini_ker.texi(,1535) limiting up node. mini_ker.texi(,1536) @item n_mult mini_ker.texi(,1537) Number of cells in each node (multiplicity). mini_ker.texi(,1538) @end vtable mini_ker.texi(,1539) mini_ker.texi(,1540) @vindex m_node mini_ker.texi(,1541) @vindex m_dwn mini_ker.texi(,1542) @vindex m_up mini_ker.texi(,1543) @vindex m_mult mini_ker.texi(,1544) The parameters for transfers, are similarly mini_ker.texi(,1545) @code{m_node}, @code{m_dwn}, @code{m_up}, @code{m_mult}. mini_ker.texi(,1546) The layout of their declaration should be respected as mini_ker.texi(,1547) the precompiler matches the line. Also this procedure is tedious, it mini_ker.texi(,1548) should be selected for debuging processes (use the flag @code{sel dimetaphi} mini_ker.texi(,1549) in ``selsequ.kumac''. Otherwise, the dimensioning sequence will be automaticaly mini_ker.texi(,1550) generated, which is smart but can lead to diffculty in interpreting syntax errors. mini_ker.texi(,1551) Once a model is correctly entred, turn off the sel flag and further modifications mini_ker.texi(,1552) will automatically generate the proper dimensions. The correctness of dimensionning mini_ker.texi(,1553) should nevertheless always be checked in @code{principal.f}, where you can also mini_ker.texi(,1554) check that null valued parameters as @code{lp, mobs, nxp} will suppress parts mini_ker.texi(,1555) of the code - this is signaled as Fortran comment cards. mini_ker.texi(,1556) mini_ker.texi(,1557) In our example, there are three grids of cell and mini_ker.texi(,1558) transfer variables (@code{n_node=m_node=3}). mini_ker.texi(,1559) There are two cells and two transfers in each node mini_ker.texi(,1560) (@code{n_mult=2} and @code{m_mult=2}). There is no limiting condition mini_ker.texi(,1561) for the states in the down node therefore @code{n_up=0}. mini_ker.texi(,1562) There is no transfer for the first limiting node, and mini_ker.texi(,1563) therefore @code{m_dwn=0}. mini_ker.texi(,1564) There are two states in the limiting node 0, the down node, mini_ker.texi(,1565) @code{n_dwn=2}, and two transfers in the limiting last node the node up, mini_ker.texi(,1566) and @code{m_up=2}: mini_ker.texi(,1567) mini_ker.texi(,1568) @example mini_ker.texi(,1569) ! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ mini_ker.texi(,1570) ! nodes parameters, and Limiting Conditions (Low and High) mini_ker.texi(,1571) ! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ mini_ker.texi(,1572) parameter (n_node=3,n_dwn=2,n_up=0,n_mult=2); mini_ker.texi(,1573) parameter (m_node=3,m_dwn=0,m_up=2,m_mult=2); mini_ker.texi(,1574) ! ________________________________________________________ mini_ker.texi(,1575) @end example mini_ker.texi(,1576) mini_ker.texi(,1587) mini_ker.texi(,1588) @node 1D gridded model code mini_ker.texi(,1589) @subsection 1D gridded Model coding mini_ker.texi(,1590) mini_ker.texi(,1591) The model code and parameters go in the @file{zinit} sequence. mini_ker.texi(,1592) mini_ker.texi(,1593) @subsubheading Parameters mini_ker.texi(,1594) mini_ker.texi(Minik,1595) A value for the mini_ker.texi(Minik,1595) Miniker parameters and the model parameters should be given in mini_ker.texi(,1596) @file{zinit}, in our example we have mini_ker.texi(,1597) mini_ker.texi(,1598) @example mini_ker.texi(,1599) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,1600) ! Parameters mini_ker.texi(,1601) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,1602) real rk(n_node),rd(n_node),rmassm1(n_node); mini_ker.texi(,1603) mini_ker.texi(,1604) data rk/n_node*1./; mini_ker.texi(,1605) data rd/n_node*0.1/; mini_ker.texi(,1606) data rmassm1/n_node*1./; mini_ker.texi(,1607) dt=.01; mini_ker.texi(,1608) nstep=5 000; mini_ker.texi(,1609) modzprint = 1000; mini_ker.texi(,1610) time=0.; mini_ker.texi(,1611) @end example mini_ker.texi(,1612) mini_ker.texi(,1613) @subsubheading Limiting conditions mini_ker.texi(,1614) mini_ker.texi(,1615) @cindex limiting conditions mini_ker.texi(,1616) mini_ker.texi(,1617) @c The limiting states and transfer variables and the corresponding equations are mini_ker.texi(,1618) @c declared using mini_ker.texi(,1619) @c the symbolic model description mini_ker.texi(,1620) @c (@pxref{Symbolic model description}). mini_ker.texi(,1621) There are four mortran blocks for @code{node} and @code{up} and @code{down}, both mini_ker.texi(,1622) for states and transfers: mini_ker.texi(,1623) mini_ker.texi(,1624) @findex set_dwn_eta mini_ker.texi(,1625) @findex set_dwn_phi mini_ker.texi(,1626) @findex set_up_eta mini_ker.texi(,1627) @findex set_up_phi mini_ker.texi(,1628) mini_ker.texi(,1629) @table @code mini_ker.texi(,1630) @item set_dwn_eta mini_ker.texi(,1631) down node cells mini_ker.texi(,1632) @item set_up_eta mini_ker.texi(,1633) up node cells mini_ker.texi(,1634) @item set_dwn_phi mini_ker.texi(,1635) down node transfers mini_ker.texi(,1636) @item set_up_phi mini_ker.texi(,1637) up node transfers mini_ker.texi(,1638) @end table mini_ker.texi(,1639) mini_ker.texi(,1640) The following scheme illustrates the example: mini_ker.texi(,1641) @smallexample mini_ker.texi(,1642) !%%%%%%%%%%%%%%%%%%%%%%%%%%================================================ mini_ker.texi(,1643) ! Maillage convention inode mini_ker.texi(,1644) !%%%%%%%%%%%%%%%%%%%%%%%%%% Open ended mini_ker.texi(,1645) !(2 Down Phi Eta (n_node) mini_ker.texi(,1646) ! Eta) \| .-----. .-----. .-----. / mini_ker.texi(,1647) ! wall \|-\/\/\-| |-\/\/\-| | . . . -| |-\/\/\- |dummy mini_ker.texi(,1648) ! pos \|--***--| 1 |--***--| 2 | . . . -| n |--***-- |Phis mini_ker.texi(,1649) ! speed \| 1 |_____| 2 |_____| n |_____| n+1 \(2 Up Phi) mini_ker.texi(,1650) ! mini_ker.texi(,1651) @end smallexample mini_ker.texi(,1652) mini_ker.texi(,1653) Two states are associated with the down node, they correspond to the position mini_ker.texi(,1654) and speed of the wall. As the wall don't move these states are initialized to mini_ker.texi(,1655) be 0, and the cells are stationnary cells, therefore these values remain 0. mini_ker.texi(,1656) mini_ker.texi(,1657) @example mini_ker.texi(,1658) ! Down cells (wall) mini_ker.texi(,1659) ! ----------------- mini_ker.texi(,1660) eta_pos_wall = 0; eta_speed_wall = 0.; mini_ker.texi(,1661) mini_ker.texi(,1662) set_dwn_eta mini_ker.texi(,1663) < var: eta_pos_wall, fun: deta_pos_wall = 0.; mini_ker.texi(,1664) var: eta_speed_wall, fun: deta_speed_wall= 0.; mini_ker.texi(,1665) >; mini_ker.texi(,1666) @end example mini_ker.texi(,1667) mini_ker.texi(,1668) There are 2 limiting transfers in the up node. They correspond with an open mini_ker.texi(,1669) end and are therefore set to 0. mini_ker.texi(,1670) mini_ker.texi(,1671) @example mini_ker.texi(,1672) ! limiting Transfers : dummy ones mini_ker.texi(,1673) ! ------------------------------- mini_ker.texi(,1674) set_Up_Phi mini_ker.texi(,1675) < var:ff_dummy_1, fun: f_dummy_1=0.; mini_ker.texi(,1676) var:ff_dummy_2, fun: f_dummy_2=0.; mini_ker.texi(,1677) >; mini_ker.texi(,1678) @end example mini_ker.texi(,1679) mini_ker.texi(,1680) @subsubheading Starting points mini_ker.texi(,1681) mini_ker.texi(,1682) The cell node state values are initialized. They are in an array mini_ker.texi(,1683) indexed by the @code{inode} variable. In the example the variable mini_ker.texi(,1684) corresponding with position is @code{eta_move} and the variable corresponding mini_ker.texi(,1685) with speed is @code{eta_speed}. Their initial values are set with the mini_ker.texi(,1686) following mortran code mini_ker.texi(,1687) mini_ker.texi(,1688) @example mini_ker.texi(,1689) !--------------- mini_ker.texi(,1690) ! Initialisation mini_ker.texi(,1691) !--------------- mini_ker.texi(,1692) ; mini_ker.texi(,1693) do inode=1,n_node ; mini_ker.texi(,1694) @end example mini_ker.texi(,1695) mini_ker.texi(,1696) If any transfer needs to be given a first-guess value, this is also done mini_ker.texi(,1697) using @code{inode} as the node index. mini_ker.texi(,1698) mini_ker.texi(,1699) @subsubheading Grid node equations mini_ker.texi(,1700) mini_ker.texi(,1701) @findex set_node_Phi mini_ker.texi(,1702) @findex set_node_eta mini_ker.texi(,1703) @cindex equations, grid mini_ker.texi(,1704) mini_ker.texi(,1705) Each node is associated with an index @code{inode}. It allows to refer to the mini_ker.texi(,1706) preceding node, with @code{inode-1} and the following node @code{inode+1}. mini_ker.texi(,1707) The node states are declared in @code{set_node_Eta} block and the transfers are mini_ker.texi(,1708) in @code{set_node_Phi} blocks. mini_ker.texi(,1709) mini_ker.texi(,1710) In the example, the cells are declared with mini_ker.texi(,1711) mini_ker.texi(,1712) @example mini_ker.texi(,1713) ! node cells mini_ker.texi(,1714) ! ---------- mini_ker.texi(,1715) ; mini_ker.texi(,1716) set_node_Eta mini_ker.texi(,1717) < var: eta_move(inode), fun: deta_move(inode) = eta_speed(inode); mini_ker.texi(,1718) var: eta_speed(inode), mini_ker.texi(,1719) fun: deta_speed(inode) = rmassm1(inode) mini_ker.texi(,1720) *( - ff_spring(inode+1) + ff_spring(inode) mini_ker.texi(,1721) - ff_dump(inode+1) + ff_dump(inode) mini_ker.texi(,1722) ); mini_ker.texi(,1723) >; mini_ker.texi(,1724) @end example mini_ker.texi(,1725) Note that the @code{inode} is dummy in the @code{var:} definition and can as mini_ker.texi(,1726) well be written as: @code{var: eta_move(.)}. mini_ker.texi(,1727) mini_ker.texi(,1728) mini_ker.texi(,1729) The transfers are (@code{ff_spring} corresponds with springs and mini_ker.texi(,1730) @code{ff_dump} with dumps): mini_ker.texi(,1731) mini_ker.texi(,1732) @example mini_ker.texi(,1733) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,1734) ! Transfer definition mini_ker.texi(,1735) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,1736) ! node transfers mini_ker.texi(,1737) ! -------------- mini_ker.texi(,1738) ! convention de signe spring : comprime:= + mini_ker.texi(,1739) set_node_Phi mini_ker.texi(,1740) < var: ff_spring(.), mini_ker.texi(,1741) fun: mini_ker.texi(,1742) f_spring(inode)= -rk(inode)*(eta_move(inode) - eta_move(inode-1)); mini_ker.texi(,1743) var: ff_dump(.), mini_ker.texi(,1744) fun: mini_ker.texi(,1745) f_dump(inode) = -rd(inode)*(eta_speed(inode) - eta_speed(inode-1)); mini_ker.texi(,1746) >; mini_ker.texi(,1747) @end example mini_ker.texi(,1748) mini_ker.texi(,1749) The limiting states and transfers are associated with the states or transfers mini_ker.texi(,1750) with index @code{inode+1} or @code{inode-1} appearing in node cell and mini_ker.texi(,1751) transfer equations (@code{inode-1} for down limiting conditions and mini_ker.texi(,1752) @code{inode+1} for up limiting conditions) in their order of appearance. mini_ker.texi(,1753) In our example, in the @code{eta_speed} state node equation mini_ker.texi(,1754) @code{ff_spring(inode+1)} appears before @code{ff_dump(inode+1)} and is mini_ker.texi(,1755) therefore associated with @code{ff_dummy_1} while @code{ff_dump(inode+1)} is mini_ker.texi(,1756) associated with the @code{ff_dummy_2} limiting transfer, as @code{ff_dummy_1} mini_ker.texi(,1757) appears before @code{ff_dummy_2} in the limiting up transfers definitions. mini_ker.texi(,1758) Verification of the grid index coherence should be eased with the following mini_ker.texi(,1759) help printed in the listing header: mini_ker.texi(,1760) mini_ker.texi(,1761) @example mini_ker.texi(,1762) mini_ker.texi(,1763) mini_ker.texi(,1764) mini_ker.texi(,1765) mini_ker.texi(,1766) --------------- Informing on Dwn Eta definition --------------- mini_ker.texi(,1767) Var-name, Function-name, index in eta vector mini_ker.texi(,1768) eta_pos_wall deta_pos_wall 1 [ mini_ker.texi(,1769) eta_speed_wall deta_speed_wall 2 [ mini_ker.texi(,1770) mini_ker.texi(,1771) -------------- Informing on Eta Nodes definition -------------- mini_ker.texi(,1772) Var-name, Function, k2index of (inode: 0 [ 1,...n_node ] n_node+1) mini_ker.texi(,1773) eta_move deta_move 1 [ 3 ... 7 ] 9 mini_ker.texi(,1774) eta_speed deta_speed 2 [ 4 ... 8 ] 10 mini_ker.texi(,1775) mini_ker.texi(,1776) ---------------- Informing on Up Phi definition ------------- mini_ker.texi(,1777) Var-name, Function-name, index in ff vector mini_ker.texi(,1778) ff_dummy_1 f_dummy_1 ] 7 mini_ker.texi(,1779) ff_dummy_2 f_dummy_2 ] 8 mini_ker.texi(,1780) ff_move_sum f_move_sum ] 9 mini_ker.texi(,1781) ff_speed_sum f_speed_sum ] 10 mini_ker.texi(,1782) ---------------------------------------------------- mini_ker.texi(,1783) mini_ker.texi(,1784) -------------- Informing on Phi Nodes definition --------------- mini_ker.texi(,1785) Var-name, Function, k2index of (inode: 0 [ 1,...m_node ] m_node+1) mini_ker.texi(,1786) ff_spring f_spring -1 [ 1 ... 5 ] 7 mini_ker.texi(,1787) ff_dump f_dump 0 [ 2 ... 6 ] 8 mini_ker.texi(,1788) ---------------------------------------------------- mini_ker.texi(,1789) @end example mini_ker.texi(,1790) mini_ker.texi(,1791) All variable names and functions are free but has to be mini_ker.texi(,1792) different. mini_ker.texi(,1793) Any particular node-attached variable @math{k} is referred to as: @samp{(inode:k)}, mini_ker.texi(,1794) where @math{k} has to be a Fortran expression allowed in arguments. The symbol mini_ker.texi(,1795) @samp{inode} is mini_ker.texi(,1796) reserved. As usual other Fortran instructions can be written within the mini_ker.texi(,1797) Mortran block @samp{< >} of each @code{set_} block. mini_ker.texi(,1798) mini_ker.texi(,1799) @node Double precision mini_ker.texi(,1800) @section Double precision mini_ker.texi(,1801) mini_ker.texi(,1802) The default for real variables is the @code{real} Fortran type. It is possible to mini_ker.texi(,1803) use double precision instead. In that case all the occurences of @samp{real@ } mini_ker.texi(,1804) in mortran code is substituted with @samp{double precision@ } at mini_ker.texi(,1805) precompilation stage, mini_ker.texi(,1806) and the Lapack subroutine names are replaced by the double precision names. mini_ker.texi(,1807) Eventual users'declaration of @code{complex@ } Fortran variables is also mini_ker.texi(,1808) changed to @code{double complex@ }. mini_ker.texi(,1809) mini_ker.texi(,1810) This feature is turned on by @code{sel double} in @file{selseq.kumac} with cmz mini_ker.texi(,1811) and @code{double = 1} in the @file{Makefile} with make. mini_ker.texi(,1812) mini_ker.texi(,1813) In order for the model to run as well in double as in simple precision, mini_ker.texi(,1814) some care should be taken to use the generic intrinsic functions, like mini_ker.texi(,1815) @code{sin} and not @code{dsin}. No numerical constant should be passed directly mini_ker.texi(,1816) to subroutines or functions, but instead a variable with the right type should mini_ker.texi(,1817) be used to hold the constant value, taking advantage of the implicit casts mini_ker.texi(,1818) to the variable type. mini_ker.texi(,1819) mini_ker.texi(,1820) @node Partial Derivatives mini_ker.texi(,1821) @section Partial Derivatives mini_ker.texi(,1822) mini_ker.texi(,1823) The partial derivative rules are included in a @code{Mortran} macro series mini_ker.texi(Minik,1824) in @file{Derive_mac} of mini_ker.texi(Minik,1824) Miniker files. When using an anusual function, mini_ker.texi(,1825) one should verify that the corersponding rules are in that file. mini_ker.texi(,1826) It is easy to understand and add new rules in analogy with the already existing ones. mini_ker.texi(,1827) mini_ker.texi(,1828) For instance, suppose one wants to use the intrinsic Fortran function @code{ abs()}. mini_ker.texi(,1829) Its derivatives uses the other function @code{sign()} this way: mini_ker.texi(,1830) mini_ker.texi(,1831) @example mini_ker.texi(,1832) &'(ABS(#))(/#)' = '((#1)(/#2)*SIGN(1.,#1))' mini_ker.texi(,1833) @end example mini_ker.texi(,1834) mini_ker.texi(,1835) In such cases when one is adding a new rule, it is important to use the generic function names mini_ker.texi(Minik,1836) only (i.e. @code{sin} not @code{dsin}), because when compilating mini_ker.texi(Minik,1836) Miniker in the double precision mini_ker.texi(,1837) version, or complex version, the generic names will correctly handle the different variable mini_ker.texi(,1838) types - which is not the case when coding with specific function names. mini_ker.texi(,1839) mini_ker.texi(,1840) @menu mini_ker.texi(,1841) * Derivating a power function:: mini_ker.texi(,1842) @end menu mini_ker.texi(,1843) mini_ker.texi(,1844) @node Derivating a power function mini_ker.texi(,1845) @subsection Derivating a power function mini_ker.texi(,1846) mini_ker.texi(,1847) Partial derivative of a function in exponent is not secure in its Fortran form mini_ker.texi(,1848) @code{g(x,y)**(f(y))}. It should be replaced by @code{power(g,f)} of mini_ker.texi(Minik,1849) the mini_ker.texi(Minik,1849) Miniker @file{mathlib}, mini_ker.texi(,1850) or by the explicit form @code{exp(f(y)*log(g(x,y)))}. mini_ker.texi(,1851) mini_ker.texi(,1852) Its derivative will have the following form: mini_ker.texi(,1853) mini_ker.texi(,1854) mini_ker.texi(,1868) mini_ker.texi(,1869) and is in the macros list already defined in: @file{DERIVE_MAC}. mini_ker.texi(,1870) mini_ker.texi(,1871) @node Rule of programming non continuous models mini_ker.texi(,1872) @section Rule of programming non continuous models mini_ker.texi(,1873) mini_ker.texi(,1874) Some models may originally be non continuous, as the ones using a Fortran instruction @code{IF}. mini_ker.texi(,1875) Some may use implicitly a step function on a variable. In such cases, the model has to be mini_ker.texi(,1876) set in a derivable form, and use a ``smooth step'' instead. mini_ker.texi(,1877) One should be aware of that this apparently mathematical treatment currently mini_ker.texi(,1878) indeed leads to a physical question about the macroscopic form of a physical law. mini_ker.texi(,1879) At a macroscipic level, a step function is usually a nonsense. mini_ker.texi(,1880) @cindex Heaviside function mini_ker.texi(,1881) Taking mini_ker.texi(,1882) the example of phase-change, a fluid volume does not change phase at once, and a ``smooth mini_ker.texi(,1883) change of state'' is a correct macroscopic model. mini_ker.texi(,1884) mini_ker.texi(Minik,1885) Miniker provides with the smooth step function mini_ker.texi(,1886) @emph{Heavyside}@footnote{This naming is a joke mini_ker.texi(Minik,1887) for ``Inert'' Heaviside function.} in the mini_ker.texi(Minik,1887) Miniker @file{mathlib}: mini_ker.texi(,1888) mini_ker.texi(,1889) @example mini_ker.texi(,1890) Delta = -1."K"; mini_ker.texi(,1891) A_Ice = heavyside("in:" (T_K-Tf), Delta, "out:" dAIce_dT); mini_ker.texi(,1892) @end example mini_ker.texi(,1893) mini_ker.texi(,1894) in this example, @code{Tf} is the ice fusion-temperature, @code{A_ice} mini_ker.texi(,1895) gives the ice-fraction mini_ker.texi(,1896) of the mesh-volume of water at temperature @code{T_k}. mini_ker.texi(,1897) The smooth-step function is a quasi mini_ker.texi(,1898) hyperbolic tangent function of @math{x/\Delta}, mini_ker.texi(,1899) normalised from 0 to 1, with a maximum slope mini_ker.texi(,1900) of 2.5, see figure @ref{heavy}. mini_ker.texi(,1901) mini_ker.texi(,1902) @float Figure, heavy mini_ker.texi(,1903) @image{heavyside} mini_ker.texi(,1904) @caption{Heaviside function and derivative} mini_ker.texi(,1905) @end float mini_ker.texi(,1916) mini_ker.texi(,1917) For @code{Mortran} to be able to symbolicaly compute the partial derivarives, the rule mini_ker.texi(,1918) is in the table of macros as: mini_ker.texi(,1919) mini_ker.texi(,1920) @example mini_ker.texi(,1921) &'(HEAVYSIDE(#,#,#))(/#)' = '((#1)(/#4)*HEAVYDELTA(#1,#2,#3))' mini_ker.texi(,1922) @end example mini_ker.texi(,1923) mini_ker.texi(,1924) which uses the Foratn entry point @code{HeavyDelta} in the Fortrsan function @code{heavyside}. mini_ker.texi(,1925) mini_ker.texi(,1926) Another type of problem arises when coding a mini_ker.texi(,1927) @code{var=min(f(x),g(x))} Fortran instruction. mini_ker.texi(,1928) In such a case one does not want a derivative and one will code: mini_ker.texi(,1929) mini_ker.texi(,1930) @example mini_ker.texi(,1931) var = HeavySide(f(x)-g(x),Delta,dum)*g(x) + (1.-HeavySide(f(x)-g(x),Delta,dum)*f(x); mini_ker.texi(,1932) @end example mini_ker.texi(,1933) mini_ker.texi(,1934) or equivalently: mini_ker.texi(,1935) mini_ker.texi(,1936) @example mini_ker.texi(,1937) var = HeavySide(f(x)-g(x),Delta,dum)*g(x) + HeavySide(g(x)-f(x),-Delta,dum)*f(x); mini_ker.texi(,1938) @end example mini_ker.texi(,1939) mini_ker.texi(,1940) @strong{Warning}: the value of the argument @var{Delta} is important because mini_ker.texi(,1941) it will fix the maximum mini_ker.texi(,1942) slope of the function that will appear as a coefficient in the mini_ker.texi(,1943) Jacbian matrices. mini_ker.texi(,1944) mini_ker.texi(,1945) @node Parameters mini_ker.texi(,1946) @section Parameters mini_ker.texi(,1947) mini_ker.texi(,1948) It is possible to specify some Fortran variables as specific model parameters. mini_ker.texi(,1949) Model parameters mini_ker.texi(,1950) may be used in sensitivity studies (@pxref{Sensitivity to a parameter}) mini_ker.texi(,1951) and in the adjoint model (@pxref{Sensitivity of cost function to parameters}). mini_ker.texi(,1952) Nothing special is done with parameters with Kalman filtering. mini_ker.texi(,1953) mini_ker.texi(,1954) mini_ker.texi(,1955) @findex Free_parameter mini_ker.texi(,1956) mini_ker.texi(,1957) The parameters are fortran variables that should be initialized somewhere mini_ker.texi(,1958) in @file{zinit}. For a variable to be considered as a parameter, it should mini_ker.texi(,1959) be passed as an mini_ker.texi(,1960) argument to the @code{Free_parameters} macro. For example if mini_ker.texi(,1961) @code{apar} and @code{cpar} (from the predator example) are to be considered mini_ker.texi(,1962) as parameters, @code{Free_parameters} should be called with: mini_ker.texi(,1963) mini_ker.texi(,1964) @example mini_ker.texi(,1965) Free_parameter: apar, cpar; mini_ker.texi(,1966) @end example mini_ker.texi(,1967) mini_ker.texi(,1968) @c Forward sensitivities are explained later (@pxref{Sensitivity to a parameter}), mini_ker.texi(,1969) @c the syntax only is described here. mini_ker.texi(,1970) mini_ker.texi(,1971) mini_ker.texi(,1972) When used with grid1d models (@pxref{1D gridded model,, mini_ker.texi(,1973) Describing 1D gridded model}) the @code{inode} number may appear in mini_ker.texi(,1974) parenthesis: mini_ker.texi(,1975) mini_ker.texi(,1976) @example mini_ker.texi(,1977) Free_parameter: rd(1), rk(2); mini_ker.texi(,1978) @end example mini_ker.texi(,1979) mini_ker.texi(,1980) @node Observations and data mini_ker.texi(,1981) @section Observations and data mini_ker.texi(,1982) mini_ker.texi(,1983) Some support for observations and interactions with data is available. mini_ker.texi(,1984) The observations are functions of the model variables. They don't have mini_ker.texi(,1985) any action on the model result, but they may (in theory) be observed mini_ker.texi(,1986) and measured. The natural use of these observations is to be compared mini_ker.texi(,1987) with data that correspond with the values from real measurements. mini_ker.texi(,1988) They are used in the Kalman filter (@pxref{Kalman filter}). mini_ker.texi(,1989) mini_ker.texi(,1990) The (model) observation vector is noted @math{\omega} mini_ker.texi(,1991) @c FIXME is seems untrue? mini_ker.texi(,1992) @c in this section ($\mu$ elsewhere, mini_ker.texi(,1993) and the observation function is noted @math{h}: mini_ker.texi(,1994) mini_ker.texi(,2001) mini_ker.texi(,2002) @noindent @math{omega(t) = h(eta(t), phi(t))} mini_ker.texi(,2003) mini_ker.texi(,2005) mini_ker.texi(,2006) @menu mini_ker.texi(,2007) * Observations:: mini_ker.texi(,2008) * Data:: mini_ker.texi(,2009) @end menu mini_ker.texi(,2010) mini_ker.texi(,2011) @node Observations mini_ker.texi(,2012) @subsection Observations mini_ker.texi(,2013) mini_ker.texi(,2014) @vindex mobs mini_ker.texi(,2015) mini_ker.texi(,2016) The observation functions are set in a @code{set_probe} block in mini_ker.texi(,2017) the @file{zinit} sequence. mini_ker.texi(,2018) mini_ker.texi(,2019) @cindex observation function mini_ker.texi(,2020) mini_ker.texi(,2021) @c FIXME doesn't exist anymore mini_ker.texi(,2022) @c @defmac eqn: Obs_tef(@var{i}) = f(eta(.),ff(.)) mini_ker.texi(,2023) @c This macro defines the observation equation as usual in a @code{set_block<}. mini_ker.texi(,2024) @c @code{f} is a fortran mini_ker.texi(,2025) @c expression which may be function of cell state variables, mini_ker.texi(,2026) @c @samp{eta(1)}@dots{}@samp{eta(np)} and transfers mini_ker.texi(,2027) @c @samp{ff(1)}@dots{}@samp{ff(mp)}, or of course their symbolic names. mini_ker.texi(,2028) @c @end defmac mini_ker.texi(,2029) mini_ker.texi(,2030) For example suppose that, in the predator-prey model, we only mini_ker.texi(,2031) have access to the total population of preys and predators, we would have: mini_ker.texi(,2032) mini_ker.texi(,2033) @example mini_ker.texi(,2034) set_probe mini_ker.texi(,2035) < eqn: pop = eta_pred + eta_pray; mini_ker.texi(,2036) >; mini_ker.texi(,2037) @end example mini_ker.texi(,2038) mini_ker.texi(,2039) @c it is always turned on, now mini_ker.texi(,2040) @c The corresponding code is used with @code{sel obs} in @file{selseq.kumac} mini_ker.texi(,2041) @c with cmz and @code{obs = 1} in @file{Makefile} with make. And the feature mini_ker.texi(,2042) @c is turned on and off at run time with the logical flag @code{zobs} corresponding mini_ker.texi(,2043) @c to an available data from measurement mini_ker.texi(,2044) mini_ker.texi(,2045) @c @vindex etaobs(.) mini_ker.texi(,2046) @cindex @file{obs.data} mini_ker.texi(,2047) mini_ker.texi(,2048) The number of observations is put in the integer variable @code{mobs}. mini_ker.texi(,2049) The observation vector corresponds with the part of the @code{ff(.)} mini_ker.texi(,2050) array situated past the regular transferts, @code{ff(mp+.)}, and is output mini_ker.texi(,2051) in the file @file{obs.data}. mini_ker.texi(,2052) mini_ker.texi(,2053) @c @vindex obetad(.,.) mini_ker.texi(,2054) @c @vindex obephid(.,.) mini_ker.texi(,2055) @c @vindex obspha(.,.) mini_ker.texi(,2056) mini_ker.texi(,2057) @node Data mini_ker.texi(,2058) @subsection Data mini_ker.texi(,2059) mini_ker.texi(,2060) @vindex zgetobs mini_ker.texi(,2061) @vindex vobs(.) mini_ker.texi(,2062) @cindex @file{data.data} mini_ker.texi(,2063) mini_ker.texi(,2064) Currently this code is only used if the Kalman code is activated. This mini_ker.texi(,2065) may be changed in the future. mini_ker.texi(,2066) mini_ker.texi(,2067) The convention for data is that whenever some data are available, the mini_ker.texi(,2068) logical variable @code{zgetobs} should be set to @samp{.true.}. And the mini_ker.texi(,2069) @code{vobs(.)} vector should be filled with the data values. This mini_ker.texi(,2070) vector has the same dimension than the observation mini_ker.texi(,2071) vector and each coordinate is meant to correspond with one mini_ker.texi(,2072) coordinate of the observation vector. mini_ker.texi(,2073) mini_ker.texi(,2074) This feature is turned on by setting the logical variable @code{zdata} mini_ker.texi(,2075) to @samp{.true.}, and the @code{zgetobs} flag is typically set in the mini_ker.texi(,2076) @file{zsteer} sequence (@pxref{End of time step,,Executing code at mini_ker.texi(,2077) the end of each time step}). mini_ker.texi(,2078) Every instant data are available (@code{zgetobs} is true) the observations mini_ker.texi(,2079) are written to the file @file{data.data}. With the Kalman filter more mini_ker.texi(,2080) informations are output to the @file{data.data} file, mini_ker.texi(,2081) see @ref{Kalman filter results}. mini_ker.texi(,2082) mini_ker.texi(,2083) mini_ker.texi(,2084) @node Explicit model size mini_ker.texi(,2085) @section Entering model size explicitely mini_ker.texi(,2086) mini_ker.texi(,2087) It is possible to enter the model dimensions explicitely, instead of mini_ker.texi(,2088) generating them automatically, as it was done previously. mini_ker.texi(,2089) This feature is turned on by @code{sel dimetaphi} mini_ker.texi(,2090) in @file{selseq.kumac} with cmz mini_ker.texi(,2091) and @code{dimetaphi} added to the @code{SEL} variable in mini_ker.texi(,2092) the @file{Makefile} with make. mini_ker.texi(,2093) mini_ker.texi(,2094) @menu mini_ker.texi(,2095) * Size sequence:: mini_ker.texi(,2096) * Model with explicit size:: mini_ker.texi(,2097) @end menu mini_ker.texi(,2098) mini_ker.texi(,2099) @node Size sequence mini_ker.texi(,2100) @subsection The explicit size sequence mini_ker.texi(,2101) mini_ker.texi(,2102) @cindex dimetaphi mini_ker.texi(,2103) @cindex model size mini_ker.texi(,2104) @vindex np mini_ker.texi(,2105) @vindex mp mini_ker.texi(,2106) @vindex maxstep mini_ker.texi(,2107) @cindex @file{dimetaphi} mini_ker.texi(,2108) mini_ker.texi(,2109) The dimension of the model is entered in the sequence @file{dimetaphi}, mini_ker.texi(,2110) using the fortran @code{parameter np} for @code{eta(.)} and mini_ker.texi(,2111) @code{mp} for @code{ff(.)}. mini_ker.texi(,2112) For the Lotka-Volterra model, we have two cell components and only one transfer. mini_ker.texi(,2113) mini_ker.texi(,2114) @example mini_ker.texi(,2115) parameter (np=2,mp=1); mini_ker.texi(,2116) @end example mini_ker.texi(,2117) mini_ker.texi(,2118) You should not change the layout of the parameter statement as the mini_ker.texi(,2119) mortran preprocessor matches the line. mini_ker.texi(,2120) mini_ker.texi(,2121) You also have to provide other parameters even if you don't have any mini_ker.texi(,2122) use for them. If you don't it will trigger fortran errors. mini_ker.texi(,2123) It includes the @code{maxstep} parameter that can have any value but 0, mini_ker.texi(,2124) @code{lp} and @code{mobs} that should be 0 in the example, and @code{nxp}, mini_ker.texi(,2125) @code{nyp} and @code{nzp} that should also be 0. mini_ker.texi(,2126) The layout is the following: mini_ker.texi(,2127) mini_ker.texi(,2128) @example mini_ker.texi(,2129) parameter (np=2,mp=1); mini_ker.texi(,2130) parameter (mobs=0); mini_ker.texi(,2131) mini_ker.texi(,2132) parameter (nxp=0,nyp=0,nzp=0); mini_ker.texi(,2133) parameter (lp=0); mini_ker.texi(,2134) parameter (maxstep=1); mini_ker.texi(,2135) @end example mini_ker.texi(,2136) mini_ker.texi(,2137) If there are observations, (@pxref{Observations}), the mini_ker.texi(,2138) size of the observation vector is set in the @file{dimetaphi} sequence mini_ker.texi(,2139) by the @code{mobs} parameter. For example if there is one observation: mini_ker.texi(,2140) mini_ker.texi(,2141) @example mini_ker.texi(,2142) parameter (mobs=1); mini_ker.texi(,2143) @end example mini_ker.texi(,2144) mini_ker.texi(,2145) To specify parameters (@pxref{Parameters}), the number of such parameters mini_ker.texi(,2146) has to be declared in @file{dimetaphi} with the parameter @code{lp}. mini_ker.texi(,2147) Then, if there are two parameters, they are first declared with mini_ker.texi(,2148) mini_ker.texi(,2149) @example mini_ker.texi(,2150) parameter (lp=2); mini_ker.texi(,2151) @end example mini_ker.texi(,2152) mini_ker.texi(,2153) @node Model with explicit size mini_ker.texi(,2154) @subsection Entering the model equations, with explicit sizes mini_ker.texi(,2155) mini_ker.texi(,2156) @cindex model equations mini_ker.texi(,2157) @findex Phi_tef(.) mini_ker.texi(,2158) @findex deta_tef(.) mini_ker.texi(,2159) @vindex eta(.), explicit sizes mini_ker.texi(,2160) @vindex ff(.), explicit sizes mini_ker.texi(,2161) mini_ker.texi(,2162) When sizes are explicit, another possibility exists for entering mini_ker.texi(,2163) the model equations. The use of symbolic names, as described in mini_ker.texi(,2164) @ref{Model equations} is still possible, and it also becomes possible to mini_ker.texi(,2165) set directly the equations associated with the @code{eta(.)} mini_ker.texi(,2166) and @code{ff(.)} vectors. mini_ker.texi(,2167) mini_ker.texi(,2168) In case the symbolic names are not used, mini_ker.texi(,2169) the model equations for cells and transfers are entered using a mortran macro, mini_ker.texi(,2170) @code{f_set}@footnote{@code{fun_set}, or equivalently @code{f_set}, is a mini_ker.texi(,2171) general mortran macro associating a symbol with a fortran expression. mini_ker.texi(,2172) Here, it is the name of the symbol (@code{eta}) that has a particular meaning mini_ker.texi(,2173) for the building of the model.}, setting the @code{eta(.)} evolution with mini_ker.texi(,2174) @code{deta_tef(.)} mini_ker.texi(,2175) and the transfer definitions @code{ff(.)} with @code{Phi_tef(.)}. mini_ker.texi(,2176) mini_ker.texi(,2177) @defmac f_set Phi_tef(@var{i}) = f(eta(.),ff(.)) mini_ker.texi(,2178) This macro defines the transfer @var{i} static equation. mini_ker.texi(,2179) @code{f} is a fortran mini_ker.texi(,2180) expression which may be function of cell state variables, mini_ker.texi(,2181) @samp{eta(1)}@dots{}@samp{eta(np)} and transfers mini_ker.texi(,2182) @samp{ff(1)}@dots{}@samp{ff(mp)}. mini_ker.texi(,2183) @end defmac mini_ker.texi(,2184) mini_ker.texi(,2185) In the case of the predator-prey model, the transfer definition for mini_ker.texi(,2186) @math{\varphi_{meet}} is: mini_ker.texi(,2187) @example mini_ker.texi(,2188) f_set Phi_tef(1) = eta(1)*eta(2); mini_ker.texi(,2189) @end example mini_ker.texi(,2190) mini_ker.texi(,2191) @defmac f_set deta_tef(@var{i}) = g(eta(@var{i}),ff(.)) mini_ker.texi(,2192) This macro defines the cell state component @var{i} time evolution model. mini_ker.texi(,2193) @code{g} is a expression which may be function of cell state variables, mini_ker.texi(,2194) @samp{eta(1)}@dots{}@samp{eta(np)} and transfers mini_ker.texi(,2195) @samp{ff(1)}@dots{}@samp{ff(mp)}. mini_ker.texi(,2196) @end defmac mini_ker.texi(,2197) mini_ker.texi(,2198) The two cell equations of the predator-prey model are, with index 1 for the mini_ker.texi(,2199) prey (@math{\eta_{prey}}) and index 2 for the predator (@math{\eta_{pred}}): mini_ker.texi(,2200) mini_ker.texi(,2201) @example mini_ker.texi(,2202) f_set deta_tef(1) = apar*eta(1)-apar*ff(1); mini_ker.texi(,2203) f_set deta_tef(2) = - cpar*eta(2) + cpar*ff(1); mini_ker.texi(,2204) @end example mini_ker.texi(,2205) mini_ker.texi(,2206) The whole model is: mini_ker.texi(,2207) mini_ker.texi(,2208) @example mini_ker.texi(,2209) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,2210) ! Transfer definition mini_ker.texi(,2211) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,2212) ! rencontres (meeting) mini_ker.texi(,2213) f_set Phi_tef(1) = eta(1)*eta(2); mini_ker.texi(,2214) mini_ker.texi(,2215) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,2216) ! Cell definition mini_ker.texi(,2217) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,2218) ! eta(1) : prey mini_ker.texi(,2219) ! eta(2) : predator mini_ker.texi(,2220) mini_ker.texi(,2221) f_set deta_tef(1) = apar*eta(1)-apar*ff(1); mini_ker.texi(,2222) f_set deta_tef(2) = - cpar*eta(2) + cpar*ff(1); mini_ker.texi(,2223) @end example mini_ker.texi(,2224) mini_ker.texi(,2225) The starting points for cells are entered like: mini_ker.texi(,2226) @example mini_ker.texi(,2227) ! initial state mini_ker.texi(,2228) ! ------------- mini_ker.texi(,2229) eta(1) = 1.; mini_ker.texi(,2230) eta(2) = 1.; mini_ker.texi(,2231) @end example mini_ker.texi(,2232) mini_ker.texi(,2233) If there are observations, they are entered as special transferts with mini_ker.texi(,2234) index above @code{mp}, for example: mini_ker.texi(,2235) mini_ker.texi(,2236) @example mini_ker.texi(,2237) f_set Phi_tef(mp+1) = ff(1) ; mini_ker.texi(,2238) @end example mini_ker.texi(,2239) mini_ker.texi(,2240) @node Programming with cmz directives mini_ker.texi(,2241) @section Programming with cmz directives mini_ker.texi(,2242) mini_ker.texi(,2243) @menu mini_ker.texi(Minik,2244) * Cmz directives used with mini_ker.texi(Minik,2244) Miniker:: mini_ker.texi(Minik,2245) * Using cmz directives in mini_ker.texi(Minik,2245) Miniker:: mini_ker.texi(,2246) @end menu mini_ker.texi(,2247) mini_ker.texi(Minik,2248) @node Cmz directives used with mini_ker.texi(Minik,2248) Miniker mini_ker.texi(Minik,2249) @subsection Cmz directives used with mini_ker.texi(Minik,2249) Miniker mini_ker.texi(,2250) mini_ker.texi(,2251) The main feature of cmz directive is to use code conditionnaly for a given mini_ker.texi(,2252) select flag. For example when the double precision is selected mini_ker.texi(,2253) (@pxref{Double precision}) the use of the conditionnal mini_ker.texi(,2254) @code{double} flag may be required in case there is a different subroutine mini_ker.texi(,2255) name for different types. If, for example, the user use the subroutine mini_ker.texi(,2256) @code{smysub} for simple precision and @code{dmysub} for double mini_ker.texi(,2257) precision the following code is an example of what could appear in the mini_ker.texi(,2258) user code: mini_ker.texi(,2259) mini_ker.texi(,2260) @verbatim mini_ker.texi(,2261) +IF,double mini_ker.texi(,2262) call dmysub(eta); mini_ker.texi(,2263) +ELSE mini_ker.texi(,2264) call smysub(eta); mini_ker.texi(,2265) +ENDIF mini_ker.texi(,2266) @end verbatim mini_ker.texi(,2267) mini_ker.texi(,2268) For a complete reference on cmz directives see the appendix mini_ker.texi(,2269) @ref{Cmz directives reference}. mini_ker.texi(,2270) mini_ker.texi(Minik,2271) @node Using cmz directives in mini_ker.texi(Minik,2271) Miniker mini_ker.texi(Minik,2272) @subsection Using cmz directives in mini_ker.texi(Minik,2272) Miniker mini_ker.texi(,2273) mini_ker.texi(,2274) In cmz the KEEP and DECK have their cmz directives preprocessed as part mini_ker.texi(,2275) of the source files extraction. And the +KEEP and +DECK mini_ker.texi(,2276) directives are automatically mini_ker.texi(,2277) set when creating the KEEP or DECK. With make, files with these directives mini_ker.texi(,2278) has to be created within the files that are to be preprocessed by the mini_ker.texi(,2279) cmz directives preprocessor. mini_ker.texi(,2280) mini_ker.texi(,2281) To be processed by make, a file that contains cmz directives mini_ker.texi(,2282) should have a file suffix corresponding mini_ker.texi(,2283) with the language of the resulting file and with the normal file suffix of mini_ker.texi(,2284) that language. More precisely @samp{cm} should be added before the normal mini_ker.texi(,2285) file suffix and after the @samp{.}. Therefore if the resulting file language mini_ker.texi(,2286) is associated with a suffix @samp{.@var{suf}}, the file with cmz directives mini_ker.texi(,2287) should have a @samp{.cm@var{suf}} suffix. The tradition is to have mini_ker.texi(,2288) a different suffix for main files and include files. mini_ker.texi(,2289) To add directories searched for @dfn{cmfiles} (files with cmz directives) mini_ker.texi(,2290) they should be added to the @code{CMFDIRS} makefile variable, separated mini_ker.texi(,2291) by @samp{:}. mini_ker.texi(,2292) mini_ker.texi(,2293) Rules for preprocessing of the files are defined in the file mini_ker.texi(,2294) @file{Makefile.miniker} for the file types described in mini_ker.texi(,2295) @ref{tab:cmfile_suffix}: mini_ker.texi(,2296) mini_ker.texi(,2297) @float table, tab:cmfile_suffix mini_ker.texi(,2298) @multitable {fortran preprocessed} {include/keep} {cmfile suffix} {suffix} {language} mini_ker.texi(,2299) @headitem language @tab file type @tab cmfile suffix @tab suffix @tab language mini_ker.texi(,2300) @item fortran @tab main/deck @tab .cmf @tab .f @tab ftn mini_ker.texi(,2301) @item fortran preprocessed @tab main/deck @tab .cmF @tab .F @tab f77 mini_ker.texi(,2302) @item fortran preprocessed @tab include/keep @tab .cminc @tab .inc @tab f77 mini_ker.texi(,2303) @item mortran @tab main/deck @tab .cmmtn @tab .mtn @tab mtn mini_ker.texi(,2304) @item mortran @tab include/keep @tab .cmmti @tab .mti @tab mtn mini_ker.texi(,2305) @end multitable mini_ker.texi(,2306) @caption{Association between file language, file type, file suffixes and mini_ker.texi(,2307) language identifier in cmz directives. A main file is called a @dfn{deck} mini_ker.texi(,2308) in cmz and an include file is called a @dfn{keep}.} mini_ker.texi(,2309) @end float mini_ker.texi(,2310) mini_ker.texi(,2311) @node Dynamic system analysis mini_ker.texi(Minik,2312) @chapter Dynamic analysis of systems in mini_ker.texi(Minik,2312) Miniker mini_ker.texi(,2313) mini_ker.texi(,2314) @menu mini_ker.texi(,2315) * Sensitivities:: mini_ker.texi(,2316) * Adjoint model and optimisation:: mini_ker.texi(,2317) * Kalman filter:: mini_ker.texi(,2318) * Feedback gain:: mini_ker.texi(,2319) * Stability of fastest modes:: mini_ker.texi(,2320) * Generalized TLS:: mini_ker.texi(,2321) @end menu mini_ker.texi(,2322) mini_ker.texi(,2323) @node Sensitivities mini_ker.texi(,2324) @section Automatic sensitivity computation mini_ker.texi(,2325) mini_ker.texi(,2326) @cindex sensitivities mini_ker.texi(,2327) mini_ker.texi(,2328) An obvious advantage of having acces to the Jacobian matrices along the mini_ker.texi(,2329) system trajectory concerns automatic sensitivity analyses, as either: mini_ker.texi(,2330) @itemize @bullet mini_ker.texi(,2331) @item the sensitivity of all variables to perturbation in the initial condition mini_ker.texi(,2332) of one state variable; mini_ker.texi(,2333) @item the same sensitivities to an initial pulse (or step) on a transfer; mini_ker.texi(,2334) @item the same sensitivities to a series of pulses (or steps) on a transfer; mini_ker.texi(,2335) @item the same for a change in a parameter, eventually during the run; mini_ker.texi(,2336) @item the sensitivity of the matrix of advance in state space to a change mini_ker.texi(,2337) in a parameter. mini_ker.texi(,2338) @end itemize mini_ker.texi(,2339) mini_ker.texi(,2340) This is declared in Zinit as: mini_ker.texi(,2341) mini_ker.texi(,2342) @example mini_ker.texi(,2343) ! ------------- mini_ker.texi(,2344) ! Sensitivities mini_ker.texi(,2345) ! ------------- mini_ker.texi(,2346) Sensy_to_var mini_ker.texi(,2347) < var: eta_pray, pert: INIT; mini_ker.texi(,2348) var: eta_pred, pert: INIT; mini_ker.texi(,2349) >; mini_ker.texi(,2350) @end example mini_ker.texi(,2351) mini_ker.texi(,2352) Each variable at origin of a perturbation is declared as @code{var:}, mini_ker.texi(,2353) and the type of perturbation in @code{pert:}. Here, INIT conditions are mini_ker.texi(,2354) only allowed because the two variables are states variables. For transfers, mini_ker.texi(,2355) @code{pert: pulse} corresponds to an initial pulse, @code{pert: step_resp} mini_ker.texi(,2356) and @code{pert: step_eff} to initial steps, the difference between mini_ker.texi(,2357) @code{_resp} (response form) mini_ker.texi(,2358) and @code{_eff} (effect form) concerns the mini_ker.texi(,2359) diagonal only of the sensitivity matrix mini_ker.texi(,2360) (see Feedback gains in non-linear models). mini_ker.texi(,2361) mini_ker.texi(,2362) Non initial perturbation can also be asked for: mini_ker.texi(,2363) mini_ker.texi(,2364) @example mini_ker.texi(,2365) Sensy_to_var mini_ker.texi(,2366) < mini_ker.texi(,2367) !* var: eta_courant_L, pert: init at 100; mini_ker.texi(,2368) !* var: ff_T_czcx, pert: pulse at 100 every 20; mini_ker.texi(,2369) !* var: ff_Psi_Tczcx, pert: step_eff; mini_ker.texi(,2370) !* var: ff_Psi_Tczcx, pert: step_Resp at 10 every 100; mini_ker.texi(,2371) ! *** premiers tests identiques a lorhcl.ref mini_ker.texi(,2372) var: ff_courant_L , pert: step_eff; mini_ker.texi(,2373) var: ff_T_czcx , pert: step_eff; mini_ker.texi(,2374) var: ff_Psi_Tczcx , pert: step_eff; mini_ker.texi(,2375) var: ff_Psi_Tsz , pert: pulse at 100 every 50; mini_ker.texi(,2376) >; mini_ker.texi(,2377) @end example mini_ker.texi(,2378) mini_ker.texi(,2379) In this example taken from @file{lorhcl}, a sensitivity can increase so as to mini_ker.texi(,2380) trespass the Fortran capacity, so that each sensitivity vector (matrix column) mini_ker.texi(,2381) can be reset at some time-increment @code{at III every JJJ;} mini_ker.texi(,2382) mini_ker.texi(,2383) It is noteworthy that these sensitivity analyses are not based mini_ker.texi(,2384) on difference between two runs with different initial states or mini_ker.texi(,2385) parameter values, but on the formal derivatives of the model. This method mini_ker.texi(,2386) is not only numerically robust, but is also rigorously funded as based on mini_ker.texi(,2387) the TLS of the model@footnote{For a short introduction to automatic mini_ker.texi(,2388) sensitivity analysis, see the document:@* mini_ker.texi(,2389) @url{http://lmd.jussieu.fr/zoom/doc/sensibilite.ps}, in French, mini_ker.texi(,2390) or ask for the more complete research document to a member of the TEF-ZOOM mini_ker.texi(,2391) collaboration}. mini_ker.texi(,2392) mini_ker.texi(,2393) If the @code{dimetaphi} sequence is built by the users, he should declare mini_ker.texi(,2394) the number of perturbing variables as @code{nxp=}: mini_ker.texi(,2395) mini_ker.texi(,2396) @example mini_ker.texi(,2397) parameter (nxp=np,nyp=0,nzp=0); mini_ker.texi(,2398) @end example mini_ker.texi(,2399) here, all state variables are considered as perturbing variables. mini_ker.texi(,2400) mini_ker.texi(,2401) @cindex sensitivity, output mini_ker.texi(,2402) @cindex output, sensitivity mini_ker.texi(,2403) @cindex @file{sens.data} mini_ker.texi(,2404) @cindex @file{sigma.data} mini_ker.texi(,2405) mini_ker.texi(,2406) The sensitivity vectors are output in the result files @file{sens.data} for mini_ker.texi(,2407) cells and @file{sigma.data} for transfers. In those files the first column mini_ker.texi(,2408) corresponds again with time, and the other columns are relative sensitivities of the cell mini_ker.texi(,2409) states (in @file{sens.data}) and transfers (in @file{sigma.data}) mini_ker.texi(,2410) with respect to the initial value of the perturbed state. mini_ker.texi(,2411) mini_ker.texi(,2412) In our predator-prey example, the second column of @file{sens.data} will contain mini_ker.texi(,2413) the derivative of @math{\eta_1(t)} with respect to @math{\eta_1(t=0)}. mini_ker.texi(,2414) Drawing the mini_ker.texi(,2415) second column of @file{sens.data} against the first one mini_ker.texi(,2416) gives the time evolution of the sensitivity of @code{eta-pred} mini_ker.texi(,2417) to a change in the initial value of @code{eta-pray}. One can check mini_ker.texi(,2418) in that it is set to 1 at @math{t=0}: mini_ker.texi(,2419) mini_ker.texi(,2420) @example mini_ker.texi(,2421) # Sensy_to: eta_pray 3 eta_pred 5 mini_ker.texi(,2422) # time \\ of: eta_pray eta_pred eta_pray eta_pred mini_ker.texi(,2423) 0.00000E+00 1.00000E+00 0.00000E+00 0.00000E+00 1.00000E+00 mini_ker.texi(,2424) 1.00000E-02 9.90868E-01 1.11905E-02 -1.26414E-02 9.98859E-01 mini_ker.texi(,2425) @end example mini_ker.texi(,2426) The two last columns are the state sensitivity to a change in initial conditions mini_ker.texi(,2427) of the number of predators. mini_ker.texi(,2428) mini_ker.texi(,2429) In the same way, the @var{j+1}th column of @file{sigma.data} will be the mini_ker.texi(,2430) derivative of @math{\phi_{j}(t)} with respect to @math{\eta_i(t=0)}. Here: mini_ker.texi(,2431) @example mini_ker.texi(,2432) # Sensy_to: eta_pray eta_pred mini_ker.texi(,2433) # time \\ of: ff_interact ff_interact mini_ker.texi(,2434) 0.00000E+00 1.60683E+00 8.47076E-01 mini_ker.texi(,2435) 1.00000E-02 1.59980E+00 8.18164E-01 mini_ker.texi(,2436) @end example mini_ker.texi(,2437) mini_ker.texi(,2438) the unique transfer variable gives rise to two sensitivity columns. mini_ker.texi(,2439) mini_ker.texi(,2440) Sensitivity studies are usefull to assess the mini_ker.texi(,2441) predictability properties of the corresponding system. mini_ker.texi(,2442) mini_ker.texi(,2443) @menu mini_ker.texi(,2444) @c * Initial state sensitivity:: mini_ker.texi(,2445) @c * Sensitivity to a pulse or a step on transfer:: mini_ker.texi(,2446) @c * Extended Sensitivity studies:: mini_ker.texi(,2447) * Sensitivity to a parameter:: mini_ker.texi(,2448) * Advance matrix sensitivity:: mini_ker.texi(,2449) @end menu mini_ker.texi(,2450) mini_ker.texi(,2451) mini_ker.texi(,2452) mini_ker.texi(,2453) @node Sensitivity to a parameter mini_ker.texi(,2454) @subsection Sensitivity to a parameter mini_ker.texi(,2455) mini_ker.texi(,2456) A forward sensitivity to a parameter will be computed when specified as mini_ker.texi(,2457) described in @ref{Parameters}. For example, suppose that mini_ker.texi(,2458) the sensitivity to an initial change in the @code{apar} parameter of mini_ker.texi(,2459) the predator model is of interest. mini_ker.texi(,2460) @c In that case the number of mini_ker.texi(,2461) @c parameters should be set to 1 in @file{dimetaphi}: mini_ker.texi(,2462) @c mini_ker.texi(,2463) @c @example mini_ker.texi(,2464) @c parameter (lp=2); mini_ker.texi(,2465) @c @end example mini_ker.texi(,2466) mini_ker.texi(,2467) The sensitivity calculs is turned on as a forward mini_ker.texi(,2468) parameter specified on the @code{Free_parameter} list: mini_ker.texi(,2469) mini_ker.texi(,2470) @example mini_ker.texi(,2471) Free_parameter: [fwd: apar, cpar]; mini_ker.texi(,2472) @end example mini_ker.texi(,2473) mini_ker.texi(,2474) The result are in @file{sensp.data} for cells and @file{sigmap.data} mini_ker.texi(,2475) for transfers. mini_ker.texi(,2476) mini_ker.texi(,2477) @example mini_ker.texi(,2478) # Sensy_to: pi_prandtl 3 4 pi_rayleigh_ 6 mini_ker.texi(,2479) # time \\ of: eta_courant_ eta_T_czcx eta_T_sz eta_courant_ eta_T mini_ker.texi(,2480) 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.000 mini_ker.texi(,2481) 2.00000E-03 -4.77172E-03 -3.99170E-05 3.55971E-05 -9.94770E-05 -1.004 mini_ker.texi(,2482) @end example mini_ker.texi(,2483) In the above example from @file{lorhcl} sensitivity of the three states with respect mini_ker.texi(,2484) to an initial change in two parameters are independantly given (first line also numbers mini_ker.texi(,2485) the column to easy gnuplot using). mini_ker.texi(,2486) mini_ker.texi(,2487) @node Advance matrix sensitivity mini_ker.texi(,2488) @subsection Advance matrix sensitivity mini_ker.texi(,2489) mini_ker.texi(,2490) mini_ker.texi(,2491) It is possible to look at the sensitivity of the matrix of advance in mini_ker.texi(,2492) states space (the matrix @code{aspha}) with regard to a parameter. mini_ker.texi(,2493) The parameter must be accounted for in the parameter number and be in the mini_ker.texi(,2494) parameter list, flagged as the matrix @code{mx} parameter, like in mini_ker.texi(,2495) @example mini_ker.texi(,2496) Free_parameter: [mx: apar], cpar; mini_ker.texi(,2497) @end example mini_ker.texi(,2498) mini_ker.texi(,2499) @vindex d_pi_aspha(.,.) mini_ker.texi(,2500) mini_ker.texi(,2501) This feature is associated with a selecting flag, @samp{dPi_aspha}. One gets mini_ker.texi(,2502) the result in the matrix @code{d_pi_aspha(.,.)} of dimension mini_ker.texi(,2503) (@code{np},@code{np}). mini_ker.texi(,2504) mini_ker.texi(,2505) This matrix may be used to compute other quantities, for example mini_ker.texi(,2506) it may be used to compute the sensitivity of the eigenvalues of mini_ker.texi(,2507) the state-advance matrix with regard to the @code{[fwd]} parameter. mini_ker.texi(,2508) These additional computations have to be programmed by the user in mini_ker.texi(,2509) @file{zsteer} with matrices declared and initialized in mini_ker.texi(,2510) @file{zinit}. An example is given in the example @file{lorhcl} mini_ker.texi(Minik,2511) provided with the mini_ker.texi(Minik,2511) Miniker installation files, following a method proposed mini_ker.texi(,2512) by Stephane Blanco. mini_ker.texi(,2513) mini_ker.texi(,2514) @node Adjoint model and optimisation mini_ker.texi(Minik,2515) @section Adjoint model and optimisation with mini_ker.texi(Minik,2515) Miniker mini_ker.texi(,2516) mini_ker.texi(Minik,2517) In the following a possible use of mini_ker.texi(Minik,2517) Miniker for optimisation is discussed. mini_ker.texi(Minik,2518) More precisely the use of adjoint and control laws in mini_ker.texi(Minik,2518) Miniker are presented. mini_ker.texi(,2519) Optimisation isn't the only application of these tools, but it is the most mini_ker.texi(,2520) common one. In that case the adjoint may be used to determine the gradient of a mini_ker.texi(,2521) functional to perturbations in the control laws, and an optimisation process mini_ker.texi(,2522) can use this mini_ker.texi(,2523) information to search for the optimum. mini_ker.texi(,2524) Another application of the adjoint is to compute the sensitivity of a mini_ker.texi(,2525) cost function to parameters (the ones declared in the @code{free_parameters:}' list. mini_ker.texi(,2526) Note that the cost function can be sensitive to probe's variables, even if these are mini_ker.texi(,2527) uncoupled with standard variables in the forward calculations; this is the case mini_ker.texi(,2528) when minimizing a quadratic distance function between probes (from the model) mini_ker.texi(,2529) and the corresponding measurements. mini_ker.texi(,2530) mini_ker.texi(,2531) The code is close transcription of the mathematical calculus described mini_ker.texi(,2532) in@* @url{http://www.lmd.jussieu.fr/ZOOM/doc/Adjoint.pdf} . It essentialy reverse time and mini_ker.texi(,2533) transpose the four Jacobian matrices: states and transfers are saved in array dimensionned mini_ker.texi(,2534) with @code{maxstep} Fortran parameter. mini_ker.texi(,2535) @menu mini_ker.texi(Minik,2536) * Overview of optimisation with mini_ker.texi(Minik,2536) Miniker:: mini_ker.texi(,2537) * Control laws:: mini_ker.texi(,2538) * Cost function coding and adjoint modeling:: mini_ker.texi(,2539) * Sensitivity of cost function to parameters:: mini_ker.texi(,2540) @end menu mini_ker.texi(,2541) mini_ker.texi(Minik,2542) @node Overview of optimisation with mini_ker.texi(Minik,2542) Miniker mini_ker.texi(Minik,2543) @subsection Overview of optimisation with mini_ker.texi(Minik,2543) Miniker mini_ker.texi(,2544) mini_ker.texi(,2545) @cindex adjoint mini_ker.texi(,2546) @cindex optimisation mini_ker.texi(,2547) mini_ker.texi(Minik,2548) In the proposed method, mini_ker.texi(Minik,2548) Miniker is run twice, one time forward and then mini_ker.texi(,2549) backward to determine the trajectory and the adjoint model. After that the mini_ker.texi(Minik,2550) control laws are modified by a program external to mini_ker.texi(Minik,2550) Miniker. The same steps mini_ker.texi(,2551) are repeated until convergence. More pecisely, mini_ker.texi(,2552) mini_ker.texi(,2553) @table @strong mini_ker.texi(,2554) @item forward mini_ker.texi(,2555) The command law @math{h(t)} is given (by an explicit law or taken from a file). mini_ker.texi(,2556) The trajectory is computed in a classical way, with the additionnal computation mini_ker.texi(,2557) of the functional to be optimised, @math{J}, prescribed with specific mini_ker.texi(,2558) @code{f_set} macros. The states, transfers and control laws are stored. mini_ker.texi(,2559) @item backward mini_ker.texi(,2560) The adjoint variable is computed from the last time @math{T} backward. The mini_ker.texi(,2561) time increment is re-read as it could have changed during the forward mini_ker.texi(,2562) simulation. The system is solved by using the same technics as in the forward mini_ker.texi(,2563) simulation, but with a negative time step. mini_ker.texi(,2564) @item external phase mini_ker.texi(,2565) Now the command should be corrected. This step isn't covered here, but, for mini_ker.texi(,2566) example, minuit the optimisation tool from the CERN could be used. mini_ker.texi(Minik,2567) In order to ease such a use of mini_ker.texi(Minik,2567) Miniker, the principal program has to be mini_ker.texi(,2568) compiled as a subroutine to be driven by an external program mini_ker.texi(,2569) (@pxref{Calling the model code}). mini_ker.texi(,2570) @end table mini_ker.texi(,2571) mini_ker.texi(,2572) The functionnal @math{J} to be optimised is defined as mini_ker.texi(,2573) mini_ker.texi(,2588) @noindent @math{J = psi(eta(T),phi(T),h(T)) + int_0^T l(eta(tau),phi(tau),h(tau)) d tau} mini_ker.texi(,2591) mini_ker.texi(,2592) @cindex final cost mini_ker.texi(,2593) @cindex integrand cost mini_ker.texi(,2594) mini_ker.texi(,2595) Where @math{\psi} is the final cost function, @math{l} is the integrand mini_ker.texi(,2596) cost function and @math{h} represents the control laws variations. mini_ker.texi(,2597) mini_ker.texi(,2598) The general use of the adjoint model of a system is the determination of the mini_ker.texi(,2599) gradient of this @math{J} functional to be optimised, with respect to perturbations mini_ker.texi(,2600) of the original conditions of the reference trajectory, that is, along its mini_ker.texi(,2601) GTLS@footnote{General Tangent Linear System, i.e. the TLS circulating along a trajectory. mini_ker.texi(,2602) See the explanation in the document mini_ker.texi(,2603) @url{http://www.lmd.jussieu.fr/Zoom/doc/Adjoint.pdf} (in French).}. mini_ker.texi(,2604) mini_ker.texi(,2605) @node Control laws mini_ker.texi(,2606) @subsection Control laws mini_ker.texi(,2607) mini_ker.texi(,2608) @vindex zcommand mini_ker.texi(,2609) @cindex command law mini_ker.texi(,2610) mini_ker.texi(,2611) Each control law is associated with one cell or transfer equation, meaning that a command mini_ker.texi(,2612) associated with an equation does not appear in any other equation. mini_ker.texi(,2613) It is still possible mini_ker.texi(,2614) to add commands acting anywhere by defining a transfer equal to that command. mini_ker.texi(,2615) mini_ker.texi(,2616) mini_ker.texi(,2617) The control laws associated with states are in the @code{ux_com(.)} array, mini_ker.texi(,2618) control laws associated with transfers are in the @code{uy_com(.)} array. mini_ker.texi(,2619) The control laws may be prescribed even when there is no adjoint computed, mini_ker.texi(,2620) nor any optimisation, and they are used during simulation, in which case they will mini_ker.texi(,2621) act as external sources. To enable mini_ker.texi(,2622) the use of commands, the logical flag @code{Zcommand} should be @code{.true.}. mini_ker.texi(,2623) mini_ker.texi(,2624) @cindex @file{uxcom.data} mini_ker.texi(,2625) @cindex @file{uycom.data} mini_ker.texi(,2626) mini_ker.texi(,2627) The command can be given either as: mini_ker.texi(,2628) @enumerate mini_ker.texi(,2629) @item a table of numerical mini_ker.texi(,2630) values in the files @file{uxcom.data} and @file{uycom.data}. mini_ker.texi(,2631) @item a function mini_ker.texi(,2632) @vindex zlaw mini_ker.texi(,2633) @cindex @file{zcmd_law} mini_ker.texi(,2634) @cindex @file{zcmd_law.inc} mini_ker.texi(,2635) of the problem variables. To turn that feature on the logical flag mini_ker.texi(,2636) @code{Zlaw} should be set to @code{.true.} in @file{zinit}. The sequence mini_ker.texi(,2637) @file{zcmd_law} should hold mini_ker.texi(,2638) the code filling the @code{ux_com(.)} and @code{uy_com(.)} arrays, as the code mini_ker.texi(,2639) from that sequence is used whenever the control laws are needed. mini_ker.texi(,2640) In that case the files @file{uxcom.data} and @file{uycom.data} will mini_ker.texi(,2641) be filled by the command values generated by the function along the trajectory. mini_ker.texi(,2642) @end enumerate mini_ker.texi(,2643) mini_ker.texi(,2644) For example in the Lotka-Volterra model, the parameter @code{apar} could mini_ker.texi(,2645) be a control variable. mini_ker.texi(,2646) In that case, @code{apar} would be defined as the variable @code{ux_com(1)}, mini_ker.texi(,2647) and either entered as a law mini_ker.texi(,2648) in the sequence @file{zcmd_law} , either written in the file @file{uxcom.data} mini_ker.texi(,2649) step by step. In that case, there must be a perfect corresponodence between time mini_ker.texi(,2650) of the commands and time of the run. mini_ker.texi(,2651) mini_ker.texi(,2652) @node Cost function coding and adjoint modeling mini_ker.texi(,2653) @subsection Cost function coding and adjoint modeling mini_ker.texi(,2654) mini_ker.texi(,2655) @vindex zback mini_ker.texi(,2656) @findex cout_Psi mini_ker.texi(,2657) @findex cout_l mini_ker.texi(,2658) mini_ker.texi(,2659) First of all the flag @code{zback} should be set to @code{.true.} in order to mini_ker.texi(,2660) allow adjoint model computation: mini_ker.texi(,2661) mini_ker.texi(,2662) @example mini_ker.texi(,2663) Zback=.true.; mini_ker.texi(,2664) @end example mini_ker.texi(,2665) mini_ker.texi(,2666) The two functions @code{cout_Psi} corresponding with the final cost and mini_ker.texi(,2667) @code{cout_l} corresponding with the integrand cost are set up with the mini_ker.texi(,2668) @code{f_set} macros. mini_ker.texi(,2669) mini_ker.texi(,2670) @defmac f_set cout_Psi = f(eta(.),ff(.),ux_com(.),uy_com(.)) mini_ker.texi(,2671) This macro defines the final cost function. mini_ker.texi(,2672) @code{f} is a fortran mini_ker.texi(,2673) expression which may be function of cell state variables, mini_ker.texi(,2674) @samp{eta(1)}@dots{}@samp{eta(np)}, transfers mini_ker.texi(,2675) @samp{ff(1)}@dots{}@samp{ff(mp)}, mini_ker.texi(,2676) state control laws mini_ker.texi(,2677) @samp{ux_com(1)}@dots{}@samp{ux_com(np)}, and transfer control laws mini_ker.texi(,2678) @samp{uy_com(1)}@dots{}@samp{uy_com(mp)}. mini_ker.texi(,2679) @end defmac mini_ker.texi(,2680) mini_ker.texi(,2681) @defmac f_set cout_l = f(eta(.),ff(.),ux_com(.),uy_com(.)) mini_ker.texi(,2682) This macro defines the integrand cost function. mini_ker.texi(,2683) @code{f} is a fortran mini_ker.texi(,2684) expression which may be function of cell state variables, mini_ker.texi(,2685) @samp{eta(1)}@dots{}@samp{eta(np)}, transfers mini_ker.texi(,2686) @samp{ff(1)}@dots{}@samp{ff(mp)}, mini_ker.texi(,2687) state control laws mini_ker.texi(,2688) @samp{ux_com(1)}@dots{}@samp{ux_com(np)}, and transfer control laws mini_ker.texi(,2689) @samp{uy_com(1)}@dots{}@samp{uy_com(mp)}. mini_ker.texi(,2690) @end defmac mini_ker.texi(,2691) mini_ker.texi(,2692) For example, the following code sets a cost function for the masselottes mini_ker.texi(,2693) model: mini_ker.texi(,2694) mini_ker.texi(,2695) @example mini_ker.texi(,2696) ! Initialisation mini_ker.texi(,2697) F_set cout_Psi = eta_move(inode:1); mini_ker.texi(,2698) !and f_set cout_l integrand in the functionnal mini_ker.texi(,2699) F_set cout_l = 0.; mini_ker.texi(,2700) @end example mini_ker.texi(,2701) mini_ker.texi(,2702) In that example the functional is reduced to the final value mini_ker.texi(,2703) of the first state component. mini_ker.texi(,2704) Here, the adjoint vector will correspond to the final sensitivity mini_ker.texi(,2705) (at @math{t=0}) of mini_ker.texi(,2706) that component (here the first masselotte position) to a perturbation in mini_ker.texi(,2707) all initial conditions@footnote{For detailed explanation of the adjoint model, mini_ker.texi(,2708) see the document in mini_ker.texi(,2709) @uref{http://www.lmd.jussieu.fr/@/ZOOM/doc/Adjoint.pdf,pdf} mini_ker.texi(,2710) or @uref{http://www.lmd.jussieu.fr/@/ZOOM/doc/Adjoint.pdf,.ps.gz}}. mini_ker.texi(,2711) mini_ker.texi(,2712) @c In the code, the variables @code{v_adj(.)} and @code{w_adj(.)} mini_ker.texi(,2713) @c are respectively adjoint to @code{eta(.)} and @code{ff(.)}. They are written in the mini_ker.texi(,2714) @c two files: @file{vadj.data} and @file{wadj.data}. mini_ker.texi(,2715) The following variables are set during the backward phase, and output mini_ker.texi(,2716) in the associated files: mini_ker.texi(,2717) mini_ker.texi(,2718) mini_ker.texi(,2719) @multitable {@code{gradufj(.)}} {@file{hamilton.data}} {time increment, hamiltonian, cost function increment} mini_ker.texi(,2720) @headitem var @tab file @tab explanation mini_ker.texi(,2721) @c @item @code{} @tab @file{.data} @tab @tab mini_ker.texi(,2722) @item @code{v_adj(.)} @tab @file{vadj.data} @tab adjoint to @code{eta(.)} mini_ker.texi(,2723) @item @code{w_adj(.)} @tab @file{wadj.data} @tab adjoint to @code{ff(.)} mini_ker.texi(,2724) @item @code{wadj(mp+.)} @tab @file{gradmuj.data} @tab adjoint to @code{ff(mp+.)} mini_ker.texi(,2725) @item @code{graduej(.)} @tab @file{gradxj.data} @tab adjoint to @code{ux_com(.)} mini_ker.texi(,2726) @item @code{gradufj(.)} @tab @file{gradyj.data} @tab adjoint to @code{uy_com(.)} mini_ker.texi(,2727) @item @code{hamilton} @tab @file{hamilton.data} @tab time increment, hamiltonian, cost function increment mini_ker.texi(,2728) @end multitable mini_ker.texi(,2729) mini_ker.texi(,2730) @node Sensitivity of cost function to parameters mini_ker.texi(,2731) @subsection Sensitivity of cost function to parameters mini_ker.texi(,2732) mini_ker.texi(,2733) @cindex @file{gradpj.data} mini_ker.texi(,2734) mini_ker.texi(,2735) The sensitivity of the cost function to all the parameters given as mini_ker.texi(,2736) arguments of @code{Free_parameters} is computed. For the mini_ker.texi(,2737) predator model the sensitivity of a cost function consisting in mini_ker.texi(,2738) the integral of the predator population with respect with mini_ker.texi(,2739) @code{apar} an @code{cpar} is obtained with a number of parameters mini_ker.texi(,2740) set to 2 in @file{dimetaphi}: mini_ker.texi(,2741) mini_ker.texi(,2742) @example mini_ker.texi(,2743) parameter (lp=2); mini_ker.texi(,2744) @end example mini_ker.texi(,2745) mini_ker.texi(,2746) And the cost function and @code{Free_parameters} list in @file{zinit}: mini_ker.texi(,2747) mini_ker.texi(,2748) @example mini_ker.texi(,2749) f_set cout_Psi = eta(2); mini_ker.texi(,2750) f_set cout_l = eta(2); mini_ker.texi(,2751) Free_parameters: apar,cpar; mini_ker.texi(,2752) @end example mini_ker.texi(,2753) mini_ker.texi(,2754) @code{apar} and @code{cpar} also have to be given a value. mini_ker.texi(,2755) The result is output in @file{gradpj.data}. mini_ker.texi(,2756) mini_ker.texi(,2757) @node Kalman filter mini_ker.texi(,2758) @section Kalman filter mini_ker.texi(,2759) mini_ker.texi(,2760) @cindex Kalman filter mini_ker.texi(,2761) @cindex variance-covariance matrices, general mini_ker.texi(,2762) @cindex observations, general mini_ker.texi(,2763) mini_ker.texi(,2764) The Kalman filter allows for data assimilation along the model run. In mini_ker.texi(,2765) that case it is assumed that there is a real-world model with stochastic mini_ker.texi(,2766) perturbations on the states, and that noisy observations are available. mini_ker.texi(Minik,2767) The situation implemented in mini_ker.texi(Minik,2767) Miniker corresponds to a continuous mini_ker.texi(,2768) stochastic perturbation on the state, and discrete noisy observations. mini_ker.texi(,2769) In the @acronym{TEF} this leads to: mini_ker.texi(,2770) mini_ker.texi(,2789) mini_ker.texi(,2790) @noindent @math{d eta(t)/d t = g(eta(t),phi(t)) + W(t) mu@* mini_ker.texi(,2791) phi(i) = f(eta(t),phi(t))@* mini_ker.texi(,2792) omega(t) = h(eta(t), phi(t)) + nu } mini_ker.texi(,2793) mini_ker.texi(,2796) mini_ker.texi(,2797) @c FIXME partout omega mini_ker.texi(,2798) @c (notice that in this paragraph, $\omega$ stands for the probe vector $\mu$ elsewhere, mini_ker.texi(,2799) @c and $\mu$ is here a noise source. mini_ker.texi(,2800) mini_ker.texi(,2801) The observations @math{\omega} are available at discrete time steps @math{t=s_i}. The mini_ker.texi(,2802) stochastic perturbation on state, @math{\mu} is characterized by a mini_ker.texi(,2803) variance-covariance matrix @math{Q} and the noise on the observation, mini_ker.texi(,2804) @math{\nu} has a variance-covariance matrix @math{R}. @math{W} relates states mini_ker.texi(,2805) with stochastic perturbations. At each time step the Kalman filter recomputes mini_ker.texi(,2806) an estimation of the state and the variance-covariance matrix of the state. mini_ker.texi(,2807) mini_ker.texi(,2808) In the following we use the example of a linear model with perturbation mini_ker.texi(,2809) on state and observation of state. The model has 3 states and 3 corresponding mini_ker.texi(,2810) transfers (equal to the states), but the error on the state is of dimension mini_ker.texi(,2811) 2. The 3 states are observed. The corresponding equations read: mini_ker.texi(,2812) mini_ker.texi(,2862) mini_ker.texi(,2864) mini_ker.texi(,2865) Cells:@* mini_ker.texi(,2866) @noindent @math{d eta_1/dt = a_11 eta_1 + a_12 phi_2 + a_13 phi_3 + W_11 mu_1 + W_12 mu_2@* mini_ker.texi(,2867) d eta_2/dt = a_21 phi_1 + a_22 eta_2 + a_23 phi_3 + W_21 mu_1 + W_22 mu_2@* mini_ker.texi(,2868) d eta_3/dt = a_31 phi_1 + a_32 phi_2 + a_33 eta_3 + W_31 mu_1 + W_32 mu_2} mini_ker.texi(,2869) mini_ker.texi(,2870) Transfers:@* mini_ker.texi(,2871) @noindent @math{phi_1 = eta_1@* mini_ker.texi(,2872) phi_2 = eta_2@* mini_ker.texi(,2873) phi_3 = eta_3} mini_ker.texi(,2874) mini_ker.texi(,2875) Observations:@* mini_ker.texi(,2876) @noindent @math{omega_1 = phi_1 + nu_1@* mini_ker.texi(,2877) omega_2 = eta_2 + nu_2@* mini_ker.texi(,2878) omega_3 = eta_3 + nu_3} mini_ker.texi(,2879) mini_ker.texi(,2882) mini_ker.texi(,2883) @menu mini_ker.texi(,2884) * Coding the Kalman filter:: mini_ker.texi(,2885) * Kalman filter run and output:: mini_ker.texi(,2886) * Executing code after the analysis:: mini_ker.texi(,2887) @end menu mini_ker.texi(,2888) mini_ker.texi(,2889) @node Coding the Kalman filter mini_ker.texi(,2890) @subsection Coding the Kalman filter mini_ker.texi(,2891) mini_ker.texi(,2892) @vindex zkalman mini_ker.texi(,2893) mini_ker.texi(,2894) First of all the Kalman filter code should be activated. The observations mini_ker.texi(,2895) code is also required (@pxref{Observations}). mini_ker.texi(,2896) If cmz is used the code mini_ker.texi(,2897) should be selected with the select flag kalman mini_ker.texi(,2898) in the @file{selseq.kumac}: mini_ker.texi(,2899) mini_ker.texi(,2900) @example mini_ker.texi(,2901) sel kalman mini_ker.texi(,2902) @end example mini_ker.texi(,2903) mini_ker.texi(,2904) With make the @code{kalman} variable should be set to 1: mini_ker.texi(,2905) mini_ker.texi(,2906) @example mini_ker.texi(,2907) kalman = 1 mini_ker.texi(,2908) @end example mini_ker.texi(,2909) mini_ker.texi(,2910) The kalman code is actually used by setting the flag mini_ker.texi(,2911) @code{zkalman} to @code{.true.}, for example in the @file{zinit}: mini_ker.texi(,2912) mini_ker.texi(,2913) @example mini_ker.texi(,2914) zkalman = .True.; mini_ker.texi(,2915) @end example mini_ker.texi(,2916) mini_ker.texi(,2917) @c This will set the @code{zobs} and @code{zdata} flags to @code{.true.} mini_ker.texi(,2918) @c (@pxref{Observations and data}). mini_ker.texi(,2919) mini_ker.texi(,2920) With the Kalman filter the dimension of estimated states, of the error mini_ker.texi(,2921) on the state and of the mini_ker.texi(,2922) observation, the @math{W} matrix, the observation function, mini_ker.texi(,2923) the initial mini_ker.texi(,2924) variance-covariance matrices on the state and the variance-covariance matrices mini_ker.texi(,2925) of errors have to be given. mini_ker.texi(,2926) mini_ker.texi(,2927) @menu mini_ker.texi(,2928) * Kalman filter vectors dimensions:: mini_ker.texi(,2929) * Error and observation matrices:: mini_ker.texi(,2930) @end menu mini_ker.texi(,2931) mini_ker.texi(,2932) @node Kalman filter vectors dimensions mini_ker.texi(,2933) @subsubsection Kalman filter vectors dimensions mini_ker.texi(,2934) mini_ker.texi(,2935) @cindex error vector dimension mini_ker.texi(,2936) @cindex @file{dimetaphi}, Kalman filter mini_ker.texi(,2937) mini_ker.texi(,2938) These dimensions should be set in the @file{zinit} sequence. mini_ker.texi(,2939) The size of the estimated states is given by the parameter @code{nkp}. mini_ker.texi(,2940) You can set this to @code{np} if all the states are estimated, but in case mini_ker.texi(,2941) there are some deterministic state variables, @code{nkp} may be less than mini_ker.texi(,2942) @code{np}. In that case the first @code{nkp} elements of @code{eta(.)} mini_ker.texi(,2943) will be estimated using the Kalman filter. mini_ker.texi(,2944) mini_ker.texi(,2945) The error on state dimension is associated with the parameter @code{nerrp} mini_ker.texi(,2946) and the size of the observations vector is @code{mobs} mini_ker.texi(,2947) (@pxref{Observations}). In our example the dimensions are set with: mini_ker.texi(,2948) mini_ker.texi(,2949) @example mini_ker.texi(,2950) parameter (nkp=np); mini_ker.texi(,2951) parameter (mobs=3); mini_ker.texi(,2952) parameter (nerrp=2); mini_ker.texi(,2953) @end example mini_ker.texi(,2954) mini_ker.texi(,2955) All the states are estimated, mini_ker.texi(,2956) there are 3 observation functions and the error on the state vector is of mini_ker.texi(,2957) dimension 2. mini_ker.texi(,2958) mini_ker.texi(,2959) If the sizes are set explicitely, the parameters should be set in mini_ker.texi(,2960) @file{dimetaphi}. mini_ker.texi(,2961) mini_ker.texi(,2962) @node Error and observation matrices mini_ker.texi(,2963) @subsubsection Error and observation matrices mini_ker.texi(,2964) mini_ker.texi(,2965) @cindex variance-covariance matrices mini_ker.texi(,2966) @cindex observations mini_ker.texi(,2967) @cindex @file{zinit}, Kalman filter mini_ker.texi(,2968) mini_ker.texi(,2969) @subsubheading Initial variance-covariance matrix on the state mini_ker.texi(,2970) mini_ker.texi(,2971) @cindex initial variance-covariance on states mini_ker.texi(,2972) @vindex covfor(.,.) mini_ker.texi(,2973) mini_ker.texi(,2974) The variance-covariance on the state matrix is @code{covfor(.,.)}. The initial mini_ker.texi(,2975) values have to be given for this matrix, as in our example: mini_ker.texi(,2976) mini_ker.texi(,2977) @example mini_ker.texi(,2978) covfor(1,1) = 1000.; covfor(1,2) = 10.; covfor(1,3) = 10.; mini_ker.texi(,2979) covfor(2,1) = 10.; covfor(2,2) = 5000.; covfor(2,3) = 5.; mini_ker.texi(,2980) covfor(3,1) = 10.; covfor(3,2) = 5.; covfor(3,3) = 2000.; mini_ker.texi(,2981) @end example mini_ker.texi(,2982) mini_ker.texi(,2983) This matrix is updated by the filter at each time step because the states mini_ker.texi(,2984) are pertubated by some noise, and when assimilation takes place as new mini_ker.texi(,2985) information reduce the error. mini_ker.texi(,2986) mini_ker.texi(,2987) @subsubheading Observations and error on state matrix mini_ker.texi(,2988) mini_ker.texi(,2989) @cindex variance-covariance matrix on state mini_ker.texi(,2990) @vindex mereta(.,.) mini_ker.texi(,2991) mini_ker.texi(,2992) The matrix that relates errors on states vector components to states, mini_ker.texi(,2993) corresponding with @math{W} is @code{mereta(.,.)}. In our example it is mini_ker.texi(,2994) set by: mini_ker.texi(,2995) mini_ker.texi(,2996) @example mini_ker.texi(,2997) mereta(1,1) = 1.; mereta(1,2) = 0.; mini_ker.texi(,2998) mereta(2,1) = 0.; mereta(2,2) = 1.; mini_ker.texi(,2999) mereta(3,1) = 0.5; mereta(3,2) = 0.5; mini_ker.texi(,3000) @end example mini_ker.texi(,3001) mini_ker.texi(,3002) The observation functions are set by a @code{f_set} macro with mini_ker.texi(,3003) @code{Obs_tef(.)} as described in @ref{Observations}. mini_ker.texi(,3004) In our example the observation functions are set by: mini_ker.texi(,3005) mini_ker.texi(,3006) @example mini_ker.texi(,3007) f_set Obs_tef(1) = ff(1) ; mini_ker.texi(,3008) f_set Obs_tef(2) = eta(2); mini_ker.texi(,3009) f_set Obs_tef(3) = eta(3); mini_ker.texi(,3010) @end example mini_ker.texi(,3011) mini_ker.texi(,3012) @subsubheading Error variance-covariance matrices mini_ker.texi(,3013) mini_ker.texi(,3014) @cindex variance-covariance error mini_ker.texi(,3015) @vindex covobs(.,.) mini_ker.texi(,3016) mini_ker.texi(,3017) The variance-covariance matrix on observation noise is @code{covobs(.,.)} mini_ker.texi(,3018) set, in our example, by: mini_ker.texi(,3019) mini_ker.texi(,3020) @example mini_ker.texi(,3021) covobs(1,1) = 0.3; covobs(1,2) = 0.; covobs(1,3) = 0.; mini_ker.texi(,3022) covobs(2,1) = 0.; covobs(2,2) = 0.1; covobs(2,3) = 0.; mini_ker.texi(,3023) covobs(3,1) = 0.; covobs(3,2) = 0.; covobs(3,3) = 0.2; mini_ker.texi(,3024) @end example mini_ker.texi(,3025) mini_ker.texi(,3026) @vindex coveta(.,.) mini_ker.texi(,3027) The variance-covariance matrix on state noise is @code{coveta(.,.)} mini_ker.texi(,3028) set, in our example, by: mini_ker.texi(,3029) mini_ker.texi(,3030) @example mini_ker.texi(,3031) coveta(1,1) = 0.2; coveta(1,2) = 0.001; mini_ker.texi(,3032) coveta(2,1) = 0.001; coveta(2,2) = 0.1; mini_ker.texi(,3033) @end example mini_ker.texi(,3034) mini_ker.texi(,3035) These matrices are not changed during the run of the model as part mini_ker.texi(,3036) of the filtering process. They may be changed by the user in @file{zsteer}. mini_ker.texi(,3037) mini_ker.texi(,3038) @node Kalman filter run and output mini_ker.texi(,3039) @subsection Kalman filter run and output mini_ker.texi(,3040) mini_ker.texi(,3041) @menu mini_ker.texi(,3042) * Feeding the observations:: mini_ker.texi(,3043) * Kalman filter results:: mini_ker.texi(,3044) @end menu mini_ker.texi(,3045) mini_ker.texi(,3046) @node Feeding the observations mini_ker.texi(,3047) @subsubsection Feeding the observations to the model mini_ker.texi(,3048) mini_ker.texi(,3049) @vindex vobs(.) mini_ker.texi(,3050) @vindex zgetobs mini_ker.texi(,3051) @cindex @file{zsteer}, Kalman filter mini_ker.texi(,3052) mini_ker.texi(,3053) The observations must be made available to the model during the run. These mini_ker.texi(,3054) observations are set in the @code{vobs(.)} array, and the assimilation mini_ker.texi(,3055) (also called the analysis step of the filter) takes mini_ker.texi(,3056) place if the logical variable @code{zgetobs} is @code{.true.} mini_ker.texi(,3057) (@pxref{Data}). mini_ker.texi(,3058) mini_ker.texi(,3059) These steps are mini_ker.texi(,3060) typically performed in the @file{zsteer} sequence. In this sequence there should mini_ker.texi(,3061) be some code such that when there are data ready to mini_ker.texi(,3062) be assimilated, @code{zgetobs} is set to @code{.true.} and the data is mini_ker.texi(,3063) stored in @code{vobs(.)}, ready for the next step processing. mini_ker.texi(,3064) mini_ker.texi(,3065) @node Kalman filter results mini_ker.texi(,3066) @subsubsection Kalman filter results mini_ker.texi(,3067) mini_ker.texi(,3068) @cindex results, Kalman filter mini_ker.texi(,3069) @cindex Kalman filter results mini_ker.texi(,3070) @cindex output, Kalman filter mini_ker.texi(,3071) @cindex Kalman filter output mini_ker.texi(,3072) @cindex @file{data.data} mini_ker.texi(,3073) mini_ker.texi(,3074) The estimated states and transfers are still in the same @samp{.data} files, mini_ker.texi(,3075) @file{res.data} and @file{tr.data} and there is the additional file with mini_ker.texi(,3076) observations, called @file{obs.data} (@pxref{Observations}). mini_ker.texi(,3077) Each time @code{zgetobs} is @code{.true.} the data, and the optimally mini_ker.texi(,3078) weighted innovations are output mini_ker.texi(,3079) in the file associated with data, @file{data.data} (@pxref{Data}). mini_ker.texi(,3080) mini_ker.texi(,3081) @node Executing code after the analysis mini_ker.texi(,3082) @subsection Executing code after the analysis mini_ker.texi(,3083) mini_ker.texi(,3084) The analysis takes place before the time step advance when @code{zgetobs} mini_ker.texi(,3085) is @code{.true.}. It may be usefull to add some code after the analysis mini_ker.texi(,3086) and before the time step advance. For example the analysis may lead to mini_ker.texi(,3087) absurd values for some states or parameters, it could be usefull to correct mini_ker.texi(,3088) them in that case. The sequence included after the analysis is called mini_ker.texi(,3089) @file{kalsteer}. At this point, in addition to the usual variables mini_ker.texi(,3090) the following variables could be usefull: mini_ker.texi(,3091) mini_ker.texi(,3092) @vtable @code mini_ker.texi(,3093) @item etafor(.) mini_ker.texi(,3094) The state before the analysis. mini_ker.texi(,3095) @item kgain(.) mini_ker.texi(,3096) The Kalman gain. mini_ker.texi(,3097) @item innobs(.) mini_ker.texi(,3098) The innovation vector (observations coherent with the states minus data mini_ker.texi(,3099) values). mini_ker.texi(,3100) @item covana(.,.) mini_ker.texi(,3101) The variance-covariance error matrix after the analysis. mini_ker.texi(,3102) @end vtable mini_ker.texi(,3103) mini_ker.texi(,3104) At each time step the derivative of the observation function with respect mini_ker.texi(,3105) to transfer and cells variables are recomputed. The elimination of mini_ker.texi(,3106) transfers is also performed to get the partial derivative of the observation mini_ker.texi(,3107) function of the equivalent model, with states only, with respect to the mini_ker.texi(,3108) states. In other words, the Kalman filter does not follow the TEF formalism, because mini_ker.texi(,3109) the advance of the var-covar matrix could not yet be set in the TEF form. mini_ker.texi(,3110) @c There is a corresponding additional matrix: mini_ker.texi(,3111) mini_ker.texi(,3112) @vtable @code mini_ker.texi(,3113) @c @item obetad(.,.) mini_ker.texi(,3114) @c derivative of observation function with respect to transfers. mini_ker.texi(,3115) @c @item obphid(.,.) mini_ker.texi(,3116) @c derivative of observation function with respect to cell variables. mini_ker.texi(,3117) @item obspha(.,.) mini_ker.texi(,3118) derivative of observation function in state space with respect to mini_ker.texi(,3119) cell variables. mini_ker.texi(,3120) @end vtable mini_ker.texi(,3121) mini_ker.texi(,3122) mini_ker.texi(,3123) @node Feedback gain mini_ker.texi(,3124) @section Feedback gain mini_ker.texi(,3125) mini_ker.texi(,3126) mini_ker.texi(,3127) @cindex Borel sweep mini_ker.texi(,3128) @cindex Feedback gain mini_ker.texi(,3129) mini_ker.texi(,3130) The feedback dynamic gain associated with a feedback loop mini_ker.texi(,3131) can be expressed as the inverse Borel mini_ker.texi(,3132) transform of the coefficient of the reduced scalar mini_ker.texi(,3133) coupling matrix, @math{g(\tau)}, mini_ker.texi(,3134) associated with a transfer. mini_ker.texi(,3135) A Borel sweep provides this @math{g(\tau)}. Therefore it is mini_ker.texi(,3136) an interesting tool for the characterization of the feedback loop@footnote{ mini_ker.texi(,3137) More generally, the Borel sweep allows mini_ker.texi(,3138) the numerical study of the dependency in @math{\tau} of the Borel transform mini_ker.texi(,3139) of various coefficients in the system coupling matrix.}. mini_ker.texi(,3140) mini_ker.texi(,3141) As explained in the mini_ker.texi(,3142) ZOOM web page document mini_ker.texi(,3143) @url{http://www.lmd.jussieu.fr/@/ZOOM/doc/@/Feedback_Gain.pdf}, mini_ker.texi(,3144) this allows for the calculation of the mini_ker.texi(,3145) dynamic gain and factor of any feedback that goes through a unique mini_ker.texi(,3146) transfer variable. An example of the conclusions that can be drawn from such mini_ker.texi(,3147) an analysis is provided in the same document. mini_ker.texi(,3148) mini_ker.texi(,3156) mini_ker.texi(,3157) mini_ker.texi(,3158) For linear systems -- whose GTLS are autonomous along the whole trajectory -- mini_ker.texi(,3159) the @math{\tau} function of the mini_ker.texi(,3160) feedback gain is independent of the position on the system trajectory. mini_ker.texi(,3161) But in general it is dependant, and one can analyse the function mini_ker.texi(,3162) @math{g(\tau;t)} defined on a segment @math{t} of the trajectory. mini_ker.texi(,3163) mini_ker.texi(,3164) The document introducing the TEF-ZOOM technique explains how a Crank-Nicolson mini_ker.texi(,3165) scheme for the time discretisation mini_ker.texi(,3166) symbolically gives the solution of the Borel transform of the system. One can mini_ker.texi(,3167) identify the @code{dt} variable with the Borel @math{\tau} within a mini_ker.texi(,3168) factor @math{2}. Hence, to numerically study the @math{\tau} dependency of mini_ker.texi(,3169) the transform of various coefficients in the system coupling matrix at one mini_ker.texi(,3170) point in time, one can calculate the Borel transform of the TLS solutions mini_ker.texi(,3171) by making a time-step sweep. mini_ker.texi(,3172) mini_ker.texi(,3173) The function @math{g(\tau;t)} is simply output for the feedback gain mini_ker.texi(,3174) attached to a unique @code{ff(k)} transfer variable. mini_ker.texi(,3175) All the relevant informations should be entered in the @file{zinit} sequence. mini_ker.texi(,3176) mini_ker.texi(,3177) @menu mini_ker.texi(,3178) * Specifying the Borel sweep:: mini_ker.texi(,3179) * Borel sweep results:: mini_ker.texi(,3180) @end menu mini_ker.texi(,3181) mini_ker.texi(,3182) @node Specifying the Borel sweep mini_ker.texi(,3183) @subsection Specifying the Borel sweep mini_ker.texi(,3184) mini_ker.texi(,3185) @vindex ZBorel mini_ker.texi(,3186) mini_ker.texi(,3187) First of all the logical flag @code{ZBorel} should be raised: mini_ker.texi(,3188) mini_ker.texi(,3189) @example mini_ker.texi(,3190) ZBorel=.true.; mini_ker.texi(,3191) @end example mini_ker.texi(,3192) mini_ker.texi(,3193) @vindex index_ff_gain mini_ker.texi(,3194) The index of the studied transfer is given in the @code{index_ff_gain} mini_ker.texi(,3195) variable mini_ker.texi(,3196) @example mini_ker.texi(,3197) index_ff_gain=7; mini_ker.texi(,3198) @end example mini_ker.texi(,3199) mini_ker.texi(,3200) At each time step a Borel sweep may be performed. The time steps of interest mini_ker.texi(,3201) are mini_ker.texi(,3202) specified with three variables, one for the first step, one for the last step mini_ker.texi(,3203) and one for the number of steps between two Borel sweeps: mini_ker.texi(,3204) mini_ker.texi(,3205) @vtable @code mini_ker.texi(,3206) @item istep_B_deb mini_ker.texi(,3207) First time step for the Borel sweep. mini_ker.texi(,3208) @item istep_B_fin mini_ker.texi(,3209) Last time step for the Borel sweep. mini_ker.texi(,3210) @item istep_B_inc mini_ker.texi(,3211) Number of time steps between Borel sweeps. mini_ker.texi(,3212) @end vtable mini_ker.texi(,3213) mini_ker.texi(,3214) In the following examples Borel sweeps are performed from the mini_ker.texi(,3215) time step 1000 up to the time step 1200, with a sweep at each time step: mini_ker.texi(,3216) @example mini_ker.texi(,3217) istep_B_deb=1000; mini_ker.texi(,3218) istep_B_fin=1200; mini_ker.texi(,3219) istep_B_inc=1; mini_ker.texi(,3220) @end example mini_ker.texi(,3221) mini_ker.texi(,3222) mini_ker.texi(,3223) For each Borel sweep, the range of the @math{\tau} variable should be mini_ker.texi(,3224) set. As this is a multiplicative variable the initial value, a multiplicative mini_ker.texi(,3225) factor and the number of values are to be given. mini_ker.texi(,3226) mini_ker.texi(,3227) @vtable @code mini_ker.texi(,3228) @item tau_B_ini mini_ker.texi(,3229) Initial value for @math{\tau}. mini_ker.texi(,3230) @item tau_B_mult mini_ker.texi(,3231) Multiplicative factor for sweep in @math{tau}. mini_ker.texi(,3232) @item itau_max mini_ker.texi(,3233) Number of @math{\tau} values. mini_ker.texi(,3234) @end vtable mini_ker.texi(,3235) mini_ker.texi(,3236) For example, in the following, at each time step, the Borel mini_ker.texi(,3237) transform will be computed for @math{\tau} values mini_ker.texi(,3238) starting at @math{0.2} and then multiplied a hundred times by @math{\sqrt{\sqrt{2}}} mini_ker.texi(,3239) mini_ker.texi(,3240) @example mini_ker.texi(,3241) tau_B_ini=0.2; mini_ker.texi(,3242) tau_B_mult=sqrt(sqrt(2.)); mini_ker.texi(,3243) itau_max=100; mini_ker.texi(,3244) @end example mini_ker.texi(,3245) mini_ker.texi(,3246) When the initial value of @math{\tau} is set to a negative value mini_ker.texi(,3247) (@i{i.e.} @code{tau_B_ini=-0.2;}), mini_ker.texi(,3248) the Borel sweep will first be applied with @code{itau_max} negative values mini_ker.texi(,3249) for @code{-0.2}, @code{tau_B_mult*(-0.2)},..., then for the zero value, mini_ker.texi(,3250) and finally for the symetric positive values, resulting in @code{2*itau_max+1} mini_ker.texi(,3251) values for @math{\tau}. mini_ker.texi(,3252) mini_ker.texi(,3253) The whole example reads mini_ker.texi(,3254) mini_ker.texi(,3255) @example mini_ker.texi(,3256) ! ------------------- mini_ker.texi(,3257) ! Feedback gain mini_ker.texi(,3258) ! Borel mini_ker.texi(,3259) ! ------------------- mini_ker.texi(,3260) ZBorel=.true.; mini_ker.texi(,3261) if ZBorel mini_ker.texi(,3262) < istep_B_deb=1000; mini_ker.texi(,3263) istep_B_fin=1200; mini_ker.texi(,3264) istep_B_inc=1; mini_ker.texi(,3265) ; mini_ker.texi(,3266) index_ff_gain=7; mini_ker.texi(,3267) tau_B_ini=0.2; mini_ker.texi(,3268) tau_B_mult=sqrt(sqrt(2.)); mini_ker.texi(,3269) itau_max=100; mini_ker.texi(,3270) z_pr/Borel/:tau_B_mult,tau_B_ini*(tau_B_mult)**itau_max; mini_ker.texi(,3271) >; mini_ker.texi(,3272) @end example mini_ker.texi(,3273) mini_ker.texi(,3274) @findex zborel for mini_ker.texi(,3275) mini_ker.texi(,3276) Instead of using the index of the transfer in @code{index_ff_gain} it is mini_ker.texi(,3277) possible to specify the name of the transfer.@c , whenever mini_ker.texi(,3278) @c the symbolic model description is used (@pxref{Symbolic model description}). mini_ker.texi(,3279) In that case the transfer is specified mini_ker.texi(,3280) by the @code{zborel for} macro. For example if the transfer selected for the mini_ker.texi(,3281) feedback gain computation is @var{b_transfer}, it can be selected mini_ker.texi(,3282) with: mini_ker.texi(,3283) mini_ker.texi(,3284) @example mini_ker.texi(,3285) zborel for: @var{b_transfer}; mini_ker.texi(,3286) @end example mini_ker.texi(,3287) mini_ker.texi(,3288) @node Borel sweep results mini_ker.texi(,3289) @subsection Borel sweep results mini_ker.texi(,3290) mini_ker.texi(,3291) @cindex Borel sweep results mini_ker.texi(,3292) @cindex results, Borel sweep mini_ker.texi(,3293) @cindex Borel sweep graphics mini_ker.texi(,3294) @cindex graphics, Borel sweep mini_ker.texi(,3295) mini_ker.texi(,3296) The file @file{tau_Borel.data} gives the @math{\tau} values of the @var{tau} sweep, mini_ker.texi(,3297) and the file @file{gains.data} records the feedback gain function values of mini_ker.texi(,3298) @math{g(\tau)}, with mini_ker.texi(,3299) one line for each sweep along the trajectory. In the 1.01 version, a new mini_ker.texi(,3300) feature is also provided giving the poles and residuals of the Borel mini_ker.texi(,3301) transform in the file @file{vpgains.data}. Consult the subroutine mini_ker.texi(,3302) @code{Boreleig} mini_ker.texi(,3303) for (not definitive) output description. mini_ker.texi(,3304) mini_ker.texi(,3305) One can easily obtain the surface contours of @math{g(t,\tau)} using mini_ker.texi(,3306) the Fortran program provided as @file{gains.f} and its compilation shell mini_ker.texi(,3307) @file{gains.xqt}, mini_ker.texi(,3308) that builds 2D histograms for PAW, in which one uses the mini_ker.texi(,3309) @file{borels.kumac} provided kumac. mini_ker.texi(,3310) mini_ker.texi(,3311) @node Stability of fastest modes mini_ker.texi(,3312) @section Stability analysis of fastest modes mini_ker.texi(,3313) mini_ker.texi(,3314) @cindex SVD mini_ker.texi(,3315) @cindex Singular Value Decomposition mini_ker.texi(,3316) @cindex state matrix mini_ker.texi(,3317) @cindex @file{sltc.exe} mini_ker.texi(,3318) mini_ker.texi(,3319) The preceding analyses are done along with a simulation. One has also the mini_ker.texi(,3320) possibility of using in a more classical fashion the state advance matrix mini_ker.texi(,3321) @math{A_{st}}, after the end of the simulation. Code to perform the mini_ker.texi(,3322) @acronym{SVD, Singular Value Decomposition} of the state matrix @math{A_{st}} mini_ker.texi(Minik,3323) and also of @math{A_{st} + A_{st}^\dagger} is provided with mini_ker.texi(Minik,3323) Miniker. mini_ker.texi(,3324) The singular elements of these two matrices correspond to the most mini_ker.texi(,3325) rapid modes of instability of the perturbed system. mini_ker.texi(,3326) mini_ker.texi(,3327) The Singular value decomposition of a matrix is noted mini_ker.texi(,3328) mini_ker.texi(,3335) mini_ker.texi(,3336) @noindent @math{U w V^t} mini_ker.texi(,3337) mini_ker.texi(,3339) mini_ker.texi(,3340) An executable file, @file{sltc.exe} is generated and running this file will mini_ker.texi(,3341) produce the corresponding results. mini_ker.texi(,3342) mini_ker.texi(,3343) @menu mini_ker.texi(,3344) * SVD with cmz:: mini_ker.texi(,3345) * SVD with make:: mini_ker.texi(,3346) * SVD run and output:: mini_ker.texi(,3347) @end menu mini_ker.texi(,3348) mini_ker.texi(,3349) @node SVD with cmz mini_ker.texi(,3350) @subsection Singular Value Decomposition with cmz mini_ker.texi(,3351) mini_ker.texi(,3352) @cindex @command{smod} mini_ker.texi(,3353) mini_ker.texi(,3354) The cmz macro @code{smod SLTC} prepares a main program mini_ker.texi(,3355) (@file{circul} of +PATCH SLTC), provided as a base for user's own analysis, mini_ker.texi(,3356) in the directory @file{sltc/}. mini_ker.texi(,3357) mini_ker.texi(,3358) @node SVD with make mini_ker.texi(,3359) @subsection Singular Value Decomposition with make mini_ker.texi(,3360) mini_ker.texi(,3361) @cindex @file{Makefile.sltc} mini_ker.texi(,3362) mini_ker.texi(,3363) To compile the singular value decomposition executable with @command{make} you mini_ker.texi(,3364) can do mini_ker.texi(,3365) @example mini_ker.texi(,3366) make sltc.exe mini_ker.texi(,3367) @end example mini_ker.texi(,3368) mini_ker.texi(,3369) If you want to have a separate directory for the SVD, you should copy mini_ker.texi(,3370) the sequence @file{dimetaphi.inc} (or make a link to that file) to the mini_ker.texi(,3371) directory. You should also copy the file @file{Makefile.sltc} from the mini_ker.texi(,3372) @file{template/} directory in this directory, rename it @file{Makefile} mini_ker.texi(Minik,3373) and set the mini_ker.texi(Minik,3373) Miniker directory path in the mini_ker.texi(,3374) @code{miniker_dir} variable. For mini_ker.texi(Minik,3375) example, if the mini_ker.texi(Minik,3375) Miniker directory is in @file{/u/src/mini_ker}: mini_ker.texi(,3376) mini_ker.texi(,3377) @example mini_ker.texi(,3378) miniker_dir = /u/src/mini_ker mini_ker.texi(,3379) @end example mini_ker.texi(,3380) mini_ker.texi(,3381) @node SVD run and output mini_ker.texi(,3382) @subsection Singular Value Decomposition run and output mini_ker.texi(,3383) mini_ker.texi(,3384) @cindex SVD run mini_ker.texi(,3385) @cindex run, SVD mini_ker.texi(,3386) @cindex SVD output mini_ker.texi(,3387) @cindex output, SVD mini_ker.texi(,3388) @cindex @file{sltc.exe} mini_ker.texi(,3389) @cindex @file{title.tex}, SVD mini_ker.texi(,3390) @cindex @file{aspha.data}, SVD mini_ker.texi(,3391) mini_ker.texi(,3392) As it is, the @file{sltc.exe} executable generated by the compilation mini_ker.texi(,3393) determines the SVD. This program requires @file{title.tex} (@pxref{Title file}) to mini_ker.texi(,3394) transmit a title for output and graphics, and @file{aspha.data} mini_ker.texi(,3395) (@pxref{Simulation and output,,Running a simulation and using the output}) mini_ker.texi(,3396) to access the mini_ker.texi(,3397) state matrix. To get access to these files (in case they are not in the current mini_ker.texi(,3398) directory) it is possible to make a link to mini_ker.texi(,3399) the corresponding files in the model directory. Once it is done mini_ker.texi(,3400) the program may be run: mini_ker.texi(,3401) mini_ker.texi(,3402) @example mini_ker.texi(,3403) ./sltc.exe mini_ker.texi(,3404) @end example mini_ker.texi(,3405) mini_ker.texi(,3406) The files @file{u.data}, @file{w.data}, and @file{v.data} holds the singular elements mini_ker.texi(,3407) for @math{A_{st}} (@math{U}, @math{w} and @math{V}), mini_ker.texi(,3408) and @file{us.data}, @file{ws.data}, and @file{vs.data} mini_ker.texi(,3409) holds the singular elements of @math{A_{st} + A_{st}^\dagger}. mini_ker.texi(,3410) The corresponding macros @samp{.kumac} for PAW@footnote{Explanation in mini_ker.texi(,3411) the research paper about SLTC (Al1 2003) available on request.} mini_ker.texi(,3412) are also generated. mini_ker.texi(,3413) mini_ker.texi(,3414) @node Generalized TLS mini_ker.texi(,3415) @section Generalized linear tangent system analysis mini_ker.texi(,3416) mini_ker.texi(,3417) @cindex Generalized linear tangent system mini_ker.texi(,3418) @cindex GTLS mini_ker.texi(,3419) @cindex propagator mini_ker.texi(,3420) @cindex Lyapunov exponents mini_ker.texi(,3421) @cindex @file{sltcirc.exe} mini_ker.texi(,3422) mini_ker.texi(,3423) The state matrix @math{A_{st}} may also be used to compute the mini_ker.texi(,3424) GTLS propagator (or state transition matrix applied to perturbation), after the simulation. mini_ker.texi(,3425) The algorithm is a finite product of mini_ker.texi(,3426) 5th order development of mini_ker.texi(,3427) @math{\Phi(t+\delta t,t)=\exp{A_{st} \delta t}}. mini_ker.texi(,3428) Numerous element of analysis are given, in particular the determination mini_ker.texi(,3429) of the Lyapunov exponents of the system. mini_ker.texi(,3430) mini_ker.texi(,3431) An executable file, @file{sltcirc.exe} is generated and running this file will mini_ker.texi(,3432) produce the corresponding results. mini_ker.texi(,3433) mini_ker.texi(,3434) @menu mini_ker.texi(,3435) * GTLS with cmz:: mini_ker.texi(,3436) * GTLS with make:: mini_ker.texi(,3437) * GTLS run and output:: mini_ker.texi(,3438) @end menu mini_ker.texi(,3439) mini_ker.texi(,3440) @node GTLS with cmz mini_ker.texi(,3441) @subsection Generalized tangent linear system with cmz mini_ker.texi(,3442) mini_ker.texi(,3443) @cindex @command{smod} mini_ker.texi(,3444) mini_ker.texi(,3445) The cmz macro @code{smod SLTCIRC} prepares a main program mini_ker.texi(,3446) (@file{circule} of +PATCH SLTCIRC), in the directory @file{sltcirc/}. mini_ker.texi(,3447) mini_ker.texi(,3448) @node GTLS with make mini_ker.texi(,3449) @subsection Generalized tangent linear system with make mini_ker.texi(,3450) mini_ker.texi(,3451) @cindex @file{Makefile.sltcirc} mini_ker.texi(,3452) mini_ker.texi(,3453) To compile the GTLS analysis executable with @command{make} you mini_ker.texi(,3454) can do mini_ker.texi(,3455) @example mini_ker.texi(,3456) make sltcirc.exe mini_ker.texi(,3457) @end example mini_ker.texi(,3458) mini_ker.texi(,3459) If you want to have a separate directory for the GTLS analysis, you should copy mini_ker.texi(,3460) the sequence @file{dimetaphi.inc} (or make a link to that file) to the mini_ker.texi(,3461) directory. You should also copy the file @file{Makefile.sltcirc} from the mini_ker.texi(,3462) @file{template/} directory in this directory and rename it @file{Makefile} mini_ker.texi(Minik,3463) and set the mini_ker.texi(Minik,3463) Miniker directory path in the @code{miniker_dir} variable. mini_ker.texi(,3464) mini_ker.texi(,3465) @node GTLS run and output mini_ker.texi(,3466) @subsection Generalized tangent linear system analysis run and output mini_ker.texi(,3467) mini_ker.texi(,3468) @cindex GTLS run mini_ker.texi(,3469) @cindex run, GTLS mini_ker.texi(,3470) @cindex GTLS output mini_ker.texi(,3471) @cindex output, GTLS mini_ker.texi(,3472) @cindex @file{sltcirc.exe} mini_ker.texi(,3473) @cindex @file{title.tex}, GTLS mini_ker.texi(,3474) @cindex @file{dres.data}, GTLS mini_ker.texi(,3475) @cindex @file{aspha.data}, GTLS mini_ker.texi(,3476) mini_ker.texi(,3477) The @file{sltcirc.exe} executable generated by the compilation mini_ker.texi(,3478) computes the elements of analysis of the system. This program requires mini_ker.texi(,3479) @file{title.tex} to mini_ker.texi(,3480) transmit a title for output and graphics (@pxref{Title file}), mini_ker.texi(,3481) @file{aspha.data} to access the mini_ker.texi(,3482) state matrix and @file{dres.data}, because time-step can be changed along the mini_ker.texi(,3483) simulation mini_ker.texi(,3484) (@pxref{Simulation and output,,Running a simulation and using the output}) mini_ker.texi(,3485) @footnote{cf our research texts about propagator analyses in mini_ker.texi(,3486) SLTC, and ``les Gains sur champs (Al1 2003-2004)''}. To get access to these files mini_ker.texi(,3487) (in case they are not in the current mini_ker.texi(,3488) directory) it is possible to make a link to mini_ker.texi(,3489) the corresponding files in the model directory. Once it is done mini_ker.texi(,3490) the program may be run: mini_ker.texi(,3491) mini_ker.texi(,3492) @example mini_ker.texi(,3493) ./sltcirc.exe mini_ker.texi(,3494) @end example mini_ker.texi(,3495) mini_ker.texi(,3496) The following table gives the correspondence between variable name, mini_ker.texi(,3497) result file and ntuple number, with a short explanation: mini_ker.texi(,3498) mini_ker.texi(,3499) @multitable {@code{lwr(.,.)}} {@file{wlphit.data}} {ntuple} {eigen factors of @math{w} in the SVD of @math{\Phi}} mini_ker.texi(,3500) @headitem var @tab file @tab ntuple @tab explanation mini_ker.texi(,3501) @item @code{p(.,.)} @tab @file{phit.data} @tab 55 @tab propagator from 0 to @math{t}, @math{\Phi(t,0)} mini_ker.texi(,3502) @item @code{up(.,.)} @tab @file{uphit.data} @tab 50 @tab Left singular vectors @math{U} in the SVD of @math{\Phi} mini_ker.texi(,3503) @item @code{wp(.)} @tab @file{wphit.data} @tab 51 @tab singulat values @math{w} in the SVD of @math{\Phi} mini_ker.texi(,3504) @item @code{vp(.,.)} @tab @file{vphit.data} @tab 52 @tab Right Singular Vectors @math{V} in the SVD of @math{\Phi} mini_ker.texi(,3505) @item @code{wr(.)} @tab @file{wr.data} @tab 53 @tab real part of eigen values of @math{\Phi(t,0)} mini_ker.texi(,3506) @item @code{wi(.)} @tab @file{wi.data} @tab 54 @tab imaginary part of eigen values of @math{\Phi(t,0)} mini_ker.texi(,3507) @item @code{lwp(.)} @tab @file{lwphit.data} @tab 67 @tab Lyapunov exponents mini_ker.texi(,3508) @c @item @code{lwr(.,.)} @tab @file{lwr.data} @tab 68 @tab mini_ker.texi(,3509) @c @item @code{lwi(.,.)} @tab @file{lwi.data} @tab 69 @tab mini_ker.texi(,3510) @c @item @code{} @tab @file{.data} @tab @tab mini_ker.texi(,3511) @end multitable mini_ker.texi(,3512) mini_ker.texi(,3541) mini_ker.texi(Minik,3542) @node Advanced use of mini_ker.texi(Minik,3542) Miniker with make mini_ker.texi(Minik,3543) @chapter Advanced use of mini_ker.texi(Minik,3543) Miniker with make mini_ker.texi(,3544) mini_ker.texi(,3545) @menu mini_ker.texi(,3546) * Make variables:: mini_ker.texi(,3547) * Rules:: mini_ker.texi(,3548) * Linking rule:: mini_ker.texi(,3549) @end menu mini_ker.texi(,3550) mini_ker.texi(,3551) @node Make variables mini_ker.texi(,3552) @section Make variables mini_ker.texi(,3553) mini_ker.texi(,3554) @cindex @file{Makefile.miniker} mini_ker.texi(,3555) mini_ker.texi(,3556) The @file{Makefile.miniker} Makefile provided in the mini_ker.texi(,3557) distribution should be included as it defines a lot of important mini_ker.texi(,3558) variables and rules. mini_ker.texi(,3559) mini_ker.texi(,3560) The following make variables can be set by the user: mini_ker.texi(,3561) mini_ker.texi(,3562) @table @code mini_ker.texi(,3563) @item miniker_dir mini_ker.texi(Minik,3564) that variable should hold the mini_ker.texi(Minik,3564) Miniker sources directory. If you installed mini_ker.texi(Minik,3565) Miniker that variable should be set to @file{$(includedir)/mini_ker}. mini_ker.texi(,3566) If you use the sources right from the sources directory it should be set to mini_ker.texi(,3567) the sources package directory. mini_ker.texi(,3568) @item MTNDIRS mini_ker.texi(,3569) This variable can hold a @samp{:} delimited list of directories that will mini_ker.texi(,3570) be searched for mortran include files. mini_ker.texi(,3571) @item CMFDIRS mini_ker.texi(,3572) This variable can hold a @samp{:} delimited list of directories that will mini_ker.texi(,3573) be searched for cmz directive include files. mini_ker.texi(,3574) @item SEL mini_ker.texi(,3575) This variable holds a @samp{,} delimited list of select flags, for example mini_ker.texi(,3576) @code{monitor}, @code{grid1d}, @code{debug}. mini_ker.texi(,3577) @item LDADD mini_ker.texi(,3578) This variable can be used to add libraries flags and files. It is used in mini_ker.texi(,3579) the default linking command/rule. mini_ker.texi(,3580) @item miniker_user_objects mini_ker.texi(,3581) This variable should hold a space separated list of additional object files mini_ker.texi(,3582) to be linked with the model and helper object files. mini_ker.texi(,3583) @item CAR2TXTFLAGS mini_ker.texi(,3584) cmz directives preprocessor flag. mini_ker.texi(,3585) @item kalman mini_ker.texi(,3586) This variable should be set to 1 if you want to use the kalman filter mini_ker.texi(,3587) (@pxref{Kalman filter}). mini_ker.texi(,3588) @item double mini_ker.texi(,3589) This variable should be set to 1 if you want to have a double precision mini_ker.texi(,3590) code (@pxref{Double precision}). mini_ker.texi(,3591) @end table mini_ker.texi(,3592) mini_ker.texi(,3593) The following variables are allready set and may be used mini_ker.texi(,3594) (some are set by ./configure see @ref{Configuration}): mini_ker.texi(,3595) mini_ker.texi(,3596) @table @code mini_ker.texi(,3597) @item miniker_principal_objects mini_ker.texi(,3598) The list of object files needed for the model build, together with some mini_ker.texi(,3599) helper object files often used but not strictly required for the linking. mini_ker.texi(,3600) @item DEPDIR mini_ker.texi(,3601) The name of a hidden directory containing the dependencies computed mini_ker.texi(,3602) for the main mortran files. mini_ker.texi(,3603) @itemx F77 mini_ker.texi(,3604) @itemx FC mini_ker.texi(,3605) @itemx FFLAGS mini_ker.texi(,3606) @item LDFLAGS mini_ker.texi(,3607) Compiler and linker related variables set by ./configure. mini_ker.texi(,3608) @item LIBS mini_ker.texi(,3609) This variable should hold the link flags and files required to build mini_ker.texi(Minik,3610) Miniker, set by ./configure. mini_ker.texi(,3611) @item CAR2TXT mini_ker.texi(,3612) @itemx MORTRAN mini_ker.texi(,3613) @itemx MTNFLAGS mini_ker.texi(,3614) @itemx MTNDEPEND mini_ker.texi(,3615) Preprocessor and preprocessor flags, set by ./configure. mini_ker.texi(,3616) @end table mini_ker.texi(,3617) mini_ker.texi(,3618) @node Rules mini_ker.texi(,3619) @section Rules mini_ker.texi(,3620) mini_ker.texi(,3621) The following rules are defined in the @file{Makefile.miniker} file. mini_ker.texi(,3622) @table @code mini_ker.texi(,3623) @item miniker-clean mini_ker.texi(,3624) remove the fortran files generated from the mortran files. Remove mini_ker.texi(,3625) the object files. mini_ker.texi(,3626) @item miniker-mtn-clean mini_ker.texi(,3627) remove the mortran files generated from the files with cmz directives. mini_ker.texi(,3628) @item mini_ker.texi(,3629) Various rules to preprocess files with cmz directives and mortran files and mini_ker.texi(,3630) to compile fortran files. mini_ker.texi(,3631) @end table mini_ker.texi(,3632) mini_ker.texi(,3633) If the user needs a mortran main file, he may take advantage of the rule mini_ker.texi(,3634) used to compute the dependencies of a mortran file. If the file is called, mini_ker.texi(,3635) say, @file{mtnfile.mtn} leading to @file{mtnfile.f}, the following include mini_ker.texi(,3636) should lead to the automatic creation, updating and inclusion of a mini_ker.texi(,3637) file describing the dependencies of @file{mtnfile.mtn} in the mini_ker.texi(,3638) @file{Makefile}: mini_ker.texi(,3639) mini_ker.texi(,3640) @example mini_ker.texi(,3641) include $(DEPDIR)/mtnfile.Pf mini_ker.texi(,3642) @end example mini_ker.texi(,3643) mini_ker.texi(,3644) @node Linking rule mini_ker.texi(,3645) @section Linking rule mini_ker.texi(,3646) mini_ker.texi(,3647) The rule used for the linking of the model file is not in the mini_ker.texi(,3648) @file{Makefile.miniker} file but mini_ker.texi(,3649) should be provided in the user @file{Makefile} for more flexibility. mini_ker.texi(,3650) The default rule mini_ker.texi(,3651) uses the variables @code{miniker_user_objects} for additional object files mini_ker.texi(,3652) and @code{LDADD} for additionnal linking flags and files, those mini_ker.texi(,3653) variables are there to be changed by the user. mini_ker.texi(,3654) mini_ker.texi(Minik,3655) The object files required by the mini_ker.texi(Minik,3655) Miniker code are in the make variable mini_ker.texi(,3656) @code{miniker_principal_objects}, this variable is also used. mini_ker.texi(,3657) The value of the variables @code{FC} mini_ker.texi(,3658) for the Fortran compiler, @code{FFLAGS} for the Fortran compiler mini_ker.texi(,3659) flags and @code{LDFLAGS} for the linker flags should be set to right mini_ker.texi(,3660) values; @code{LIBS} should also be right and hold the link flags and link mini_ker.texi(Minik,3661) files required to compile the mini_ker.texi(Minik,3661) Miniker model. These variables are mini_ker.texi(,3662) set by by @command{./configure} during configuration (@pxref{Configuration}) mini_ker.texi(,3663) and used in the default rule: mini_ker.texi(,3664) mini_ker.texi(,3665) @verbatim mini_ker.texi(,3666) $(model_file): $(miniker_user_objects) $(miniker_principal_objects) mini_ker.texi(,3667) $(FC) $(FFLAGS) $(LDFLAGS) $^ $(LDADD) $(LIBS) -o $@ mini_ker.texi(,3668) @end verbatim mini_ker.texi(,3669) mini_ker.texi(,3670) In case this isn't right it may be freely changed. You should certainly mini_ker.texi(,3671) refer to the @ref{Top,,Top,make,GNU Make Manual} manual to understand what mini_ker.texi(,3672) that rule exactly means and make your own. mini_ker.texi(,3673) mini_ker.texi(,3674) mini_ker.texi(,3675) @node Concepts index mini_ker.texi(,3676) @unnumbered Concepts index mini_ker.texi(,3677) mini_ker.texi(,3678) @printindex cp mini_ker.texi(,3679) mini_ker.texi(,3680) @node Variables macros and functions index mini_ker.texi(,3681) @unnumbered Variables, macros and functions index mini_ker.texi(,3682) mini_ker.texi(,3683) @printindex vr mini_ker.texi(,3684) mini_ker.texi(,3685) @node Installation mini_ker.texi(,3686) @appendix Installation mini_ker.texi(,3687) mini_ker.texi(,3688) @menu mini_ker.texi(,3689) * Programming environments:: mini_ker.texi(,3690) * Common requisites:: mini_ker.texi(Minik,3691) * mini_ker.texi(Minik,3691) Miniker with cmz:: mini_ker.texi(Minik,3692) * mini_ker.texi(Minik,3692) Miniker with make:: mini_ker.texi(,3693) @end menu mini_ker.texi(,3694) mini_ker.texi(,3695) @node Programming environments mini_ker.texi(,3696) @appendixsec Programming environments mini_ker.texi(,3697) @cindex Programming environments mini_ker.texi(,3698) mini_ker.texi(Minik,3699) Miniker is not a traditionnal software in that it isn't a library mini_ker.texi(,3700) or an interpreter but rather a set of source and macro file that mini_ker.texi(,3701) combines with the user model code and enable mini_ker.texi(,3702) to build a binary program corresponding with the model. It mini_ker.texi(,3703) requires a build environment with a preprocessor, a compiler mini_ker.texi(,3704) and facilities that automate these steps. mini_ker.texi(,3705) mini_ker.texi(,3706) Two different environment are proposed. One use mini_ker.texi(,3707) @command{cmz} (@url{http://wwwcmz.web.cern.ch/@/wwwcmz/index.html}), mini_ker.texi(,3708) while the other is based on @command{make}. Other libraries mini_ker.texi(,3709) are needed, the CERN Program Library (cernlib) and lapack. mini_ker.texi(,3710) mini_ker.texi(,3711) @node Common requisites mini_ker.texi(,3712) @appendixsec Common requisites mini_ker.texi(,3713) mini_ker.texi(,3714) @cindex cernlib mini_ker.texi(,3715) @cindex lapack mini_ker.texi(,3716) mini_ker.texi(,3717) Whatever method is used a fortran 77 compiler is required. The compilers mini_ker.texi(,3718) that have been used so far are g77, gfortran and the sun solaris compiler. mini_ker.texi(,3719) mini_ker.texi(,3720) When usng CMZ, the CERN Program Library, available at mini_ker.texi(,3721) @url{http://wwwasd.web.cern.ch/@/wwwasd/cernlib/}, has to be installed. mini_ker.texi(,3722) With make, internal source files copied from the cernlib may be used instead mini_ker.texi(,3723) but then some examples won't be available, since they rely on some mini_ker.texi(,3724) mathematical functions provided by the CERN library. mini_ker.texi(,3725) On windows, in case you want to use the compiler from the GNU compiler mini_ker.texi(,3726) collection with cygwin or MINGW/MSYS you can use the binaries provided at mini_ker.texi(,3727) @url{http://zyao.home.cern.ch/@/zyao/cernlib.html}. mini_ker.texi(,3728) On Mac OS X, the cernlib provided by fink (package @code{cernlib-devel}) mini_ker.texi(,3729) can be used. mini_ker.texi(,3730) mini_ker.texi(,3731) You should also have LAPACK, available at @url{http://www.netlib.org/@/lapack/}. mini_ker.texi(,3732) LAPACK can also be installed as part of the CERN Library or as part of mini_ker.texi(,3733) the @uref{ATLAS,http://math-atlas.sourceforge.net/} implementation. mini_ker.texi(,3734) On most linux distributions a lapack package is available. mini_ker.texi(,3735) On Mac OS X, the ATLAS implementation provided by fink or the frameworks mini_ker.texi(,3736) from Xcode can be used. mini_ker.texi(,3737) mini_ker.texi(,3738) mini_ker.texi(Minik,3739) @node mini_ker.texi(Minik,3739) Miniker with cmz mini_ker.texi(Minik,3740) @appendixsec mini_ker.texi(Minik,3740) Miniker with cmz mini_ker.texi(,3741) mini_ker.texi(,3742) @cindex @file{mini_ker.cmz} mini_ker.texi(,3743) @cindex @file{selseq.kumac} mini_ker.texi(,3744) mini_ker.texi(,3745) First of all you have to get the cmz file @file{mini_ker.cmz} and put it mini_ker.texi(,3746) in a directory. In that same directory you should create a directory for mini_ker.texi(,3747) each of your models. In the model directory you should copy the file mini_ker.texi(Minik,3748) @file{selseq.kumac} available with mini_ker.texi(Minik,3748) Miniker, and create your own cmz mini_ker.texi(,3749) file for your model, called for example @file{mymodel.cmz}. You should also mini_ker.texi(,3750) have installed the kumac macro files mini_ker.texi(,3751) handling mortan compilation, the associated shell scripts and the mortran mini_ker.texi(,3752) preprocessor. mini_ker.texi(,3753) mini_ker.texi(Minik,3754) @node mini_ker.texi(Minik,3754) Miniker with make mini_ker.texi(Minik,3755) @appendixsec mini_ker.texi(Minik,3755) Miniker with make mini_ker.texi(,3756) mini_ker.texi(,3757) @menu mini_ker.texi(,3758) * Additional requirements:: mini_ker.texi(,3759) * Configuration:: mini_ker.texi(,3760) * Installation with make:: mini_ker.texi(,3761) @end menu mini_ker.texi(,3762) mini_ker.texi(,3763) @node Additional requirements mini_ker.texi(Minik,3764) @appendixsubsec Additional requirements for mini_ker.texi(Minik,3764) Miniker with make mini_ker.texi(,3765) mini_ker.texi(,3766) @cindex @command{mortran}, with make mini_ker.texi(,3767) @cindex requirements, with make mini_ker.texi(,3768) mini_ker.texi(,3769) The package has been tested with GNU @command{make} and solaris mini_ker.texi(,3770) @command{make}. mini_ker.texi(,3771) mini_ker.texi(,3772) Suitable preprocessors should also be installed. Two preprocessors are mini_ker.texi(,3773) required, one that preprocess the cmz directives, and a mortran mini_ker.texi(,3774) preprocessor. A cmz directives processor written in @command{perl}, mini_ker.texi(,3775) is distributed in the @command{car2txt} package available at mini_ker.texi(,3776) @url{http://www.environnement.ens.fr/@/perso/@/dumas/@/mini_ker/@/software.html}. A @command{mortran} mini_ker.texi(,3777) package with a command able to preprocess a mortran file given on mini_ker.texi(,3778) the command line with a syntax similar with the @command{cpp} command line mini_ker.texi(,3779) syntax is also required. mini_ker.texi(,3780) Such a mortran is available at @url{http://www.environnement.ens.fr/@/perso/@/dumas/@/mini_ker/@/software.html}. mini_ker.texi(,3781) mini_ker.texi(,3782) @c All the @command{make} commands are not suitable, for example the distribution mini_ker.texi(,3783) @c doesn't work with solaris @command{make}. GNU @command{make} works, however, mini_ker.texi(,3784) @c and should be available on most platforms, often called @command{gmake}. mini_ker.texi(,3785) mini_ker.texi(,3786) mini_ker.texi(,3787) @node Configuration mini_ker.texi(,3788) @appendixsubsec Configuration mini_ker.texi(,3789) mini_ker.texi(,3790) @cindex configuration of source mini_ker.texi(,3791) mini_ker.texi(,3792) The package is available at @url{http://www.environnement.ens.fr/@/perso/@/dumas/@/mini_ker/@/software.html}. It is mini_ker.texi(,3793) available as a compresssed tar archive. On UNIX, with GNU @command{tar} it mini_ker.texi(,3794) may be unpacked using mini_ker.texi(,3795) mini_ker.texi(,3796) @example mini_ker.texi(,3797) $ tar xzvf mini_ker-4.2.tar.gz mini_ker.texi(,3798) @end example mini_ker.texi(,3799) mini_ker.texi(,3800) The detection of the compiler, the preprocessors (car2txt and mortran), mini_ker.texi(,3801) and the libraries are performed by the configure script. This script mini_ker.texi(,3802) sets the mini_ker.texi(,3803) apropriate variables in makefiles. It can be run with: mini_ker.texi(,3804) mini_ker.texi(,3805) @example mini_ker.texi(,3806) $ cd mini_ker-4.2 mini_ker.texi(,3807) $ ./configure mini_ker.texi(,3808) @end example mini_ker.texi(,3809) mini_ker.texi(,3810) If the output of @command{./configure} doesn't show any error it means that mini_ker.texi(,3811) all the components are here. It is possible to give @command{./configure} mini_ker.texi(,3812) switches and also specify environment variables (see also mini_ker.texi(,3813) @command{./configure --help}): mini_ker.texi(,3814) mini_ker.texi(,3815) @table @code mini_ker.texi(,3816) @item --disable-cernlib mini_ker.texi(,3817) Use the internal cernlib source files, even if a cernlib is detected. mini_ker.texi(,3818) @item --with-static-cernlib mini_ker.texi(,3819) This command line switch forces a static linking with the cernlib (or a dynamic linking mini_ker.texi(,3820) if set to no). mini_ker.texi(,3821) @item --with-cernlib mini_ker.texi(,3822) This command line switch can be used to specify the cernlib location mini_ker.texi(,3823) (if not detected or you want to use a specific cernlib). mini_ker.texi(,3824) @item --with-blas mini_ker.texi(,3825) @itemx --with-lapack mini_ker.texi(,3826) With this command switch, you can specify the location of the blas and lapack mini_ker.texi(,3827) libraries. mini_ker.texi(,3828) mini_ker.texi(,3829) For example, on mac OS X this can be used to specify the blas and lapack from mini_ker.texi(,3830) the Apple frameworks: mini_ker.texi(,3831) mini_ker.texi(,3832) @example mini_ker.texi(,3833) ./configure \ mini_ker.texi(,3834) --with-blas=/System/Library/Frameworks/vecLib.framework/versions/A/vecLib \ mini_ker.texi(,3835) --with-lapack=/System/Library/Frameworks/vecLib.framework/versions/A/vecLib mini_ker.texi(,3836) @end example mini_ker.texi(,3837) mini_ker.texi(,3838) @item F77 mini_ker.texi(,3839) @itemx FC mini_ker.texi(,3840) @itemx FFLAGS mini_ker.texi(,3841) @itemx LDFLAGS mini_ker.texi(,3842) Classical compiler, compiler flags and linker flags. mini_ker.texi(,3843) @item MORTRAN mini_ker.texi(,3844) This environment variable holds the mortran preprocessor command mini_ker.texi(,3845) (default is @command{mortran}). mini_ker.texi(,3846) @item MTNFLAGS mini_ker.texi(,3847) This environment variable holds command line arguments for the mortran mini_ker.texi(,3848) preprocessor. It is empty in the default case. mini_ker.texi(,3849) @item MTN mini_ker.texi(,3850) This environment variable may be used to specify the mortran executable mini_ker.texi(,3851) name and/or path, it should be used by the @command{mortran} commmand. mini_ker.texi(,3852) (default is empty, which leads to a mortran executable called @command{mtn}). mini_ker.texi(,3853) @item MTNDEPEND mini_ker.texi(,3854) This environment variable may be used to specify the mortran dependencies mini_ker.texi(,3855) checker executable. It should be used by the @command{mortran} commmand. mini_ker.texi(,3856) (default is empty, which leads to a mortran dependencies checker mini_ker.texi(,3857) called @command{mtndepend}). mini_ker.texi(,3858) @end table mini_ker.texi(,3859) mini_ker.texi(,3860) After a proper configuration, if @command{make} is run then the example mini_ker.texi(,3861) models should be build. You have to perform the configuration only once. mini_ker.texi(,3862) mini_ker.texi(,3863) @node Installation with make mini_ker.texi(,3864) @appendixsubsec Installation with make mini_ker.texi(,3865) @cindex installation with make mini_ker.texi(,3866) mini_ker.texi(Minik,3867) Miniker can be installed by running mini_ker.texi(,3868) @example mini_ker.texi(,3869) make install mini_ker.texi(,3870) @end example mini_ker.texi(,3871) mini_ker.texi(,3872) mini_ker.texi(,3873) It should copy the sources mini_ker.texi(,3874) and the @file{Makefile.miniker} file in mini_ker.texi(,3875) a @file{mini_ker} directory in the @code{$(includedir)} directory, and mini_ker.texi(,3876) copy the templates in @file{$(datadir)/mini_ker}. The default for mini_ker.texi(,3877) @code{$(includedir)} is @file{/usr/local/include} and the default for mini_ker.texi(,3878) @code{$(datadir)} is @file{/usr/local/share}, these defaults may be mini_ker.texi(,3879) changed by @command{./configure} switches @samp{--prefix}, mini_ker.texi(,3880) @samp{--includedir} and @samp{--datadir}. See @command{./configure --help} mini_ker.texi(,3881) and the @file{INSTALL} file for more informations. The helper script mini_ker.texi(,3882) @file{start_miniker} should also be installed. mini_ker.texi(,3883) mini_ker.texi(,3884) mini_ker.texi(,3885) mini_ker.texi(Minik,3886) The installation is not required to use comfortably mini_ker.texi(Minik,3886) Miniker. Indeed mini_ker.texi(,3887) the only thing that changes with the sources and the @file{Makefile.miniker} mini_ker.texi(,3888) directory location is the @code{miniker_dir} variable in a mini_ker.texi(,3889) project @code{Makefile}. mini_ker.texi(,3890) mini_ker.texi(,3891) mini_ker.texi(,3892) @node Cmz directives reference mini_ker.texi(,3893) @appendix Cmz directives reference mini_ker.texi(,3894) mini_ker.texi(,3895) The cmz directives are described together with the other mini_ker.texi(,3896) features of cmz in the cmz manual at mini_ker.texi(,3897) @url{http://wwwcmz.web.cern.ch/wwwcmz/}, the important ones are mini_ker.texi(,3898) nevertheless recalled here, mini_ker.texi(,3899) especially for those that use make and don't need the whole mini_ker.texi(,3900) features of cmz. mini_ker.texi(,3901) mini_ker.texi(,3902) After the description of the generic features, we turn mini_ker.texi(,3903) to the cmz directive of interest. mini_ker.texi(,3904) There are three kinds of cmz directives that are of use mini_ker.texi(Minik,3905) within mini_ker.texi(Minik,3905) Miniker: one kind mini_ker.texi(,3906) that introduce files, the other for conditionnal compilation and mini_ker.texi(,3907) the third for sequence inclusion. mini_ker.texi(,3908) mini_ker.texi(,3909) mini_ker.texi(,3910) @menu mini_ker.texi(,3911) * Cmz directives general syntax:: mini_ker.texi(,3912) * Conditional expressions:: mini_ker.texi(,3913) * File introduction directives:: mini_ker.texi(,3914) * Conditional directives:: mini_ker.texi(,3915) * File inclusion directive:: mini_ker.texi(,3916) * The self directive:: mini_ker.texi(,3917) @end menu mini_ker.texi(,3918) mini_ker.texi(,3919) @node Cmz directives general syntax mini_ker.texi(,3920) @appendixsec Cmz directives general syntax mini_ker.texi(,3921) mini_ker.texi(,3922) The cmz directives always begin with a @samp{+} in the first column, mini_ker.texi(,3923) optionnaly followed by any number of @samp{_} that may be used for mini_ker.texi(,3924) indentation, then the directive label, case insensitive, followed mini_ker.texi(,3925) by the directive arguments separated by @samp{,}. The arguments mini_ker.texi(,3926) are also case insensitive. mini_ker.texi(,3927) Optional spaces may be around directive arguments. mini_ker.texi(,3928) An optionnal @samp{.} ends the directive mini_ker.texi(,3929) arguments and begin a comment, everything that follows that @samp{.} is mini_ker.texi(,3930) ignored. mini_ker.texi(,3931) mini_ker.texi(,3932) @node Conditional expressions mini_ker.texi(,3933) @appendixsec Conditional expressions mini_ker.texi(,3934) mini_ker.texi(,3935) A directive argument common to all the directives is the conditionnal mini_ker.texi(,3936) expression. A conditionnal expression may be true or false, it is a mini_ker.texi(,3937) combination of select flags. the select flags are combined with mini_ker.texi(,3938) logical operators. A mini_ker.texi(,3939) select flag itself is true if it was selected. A select flag @var{selflag} mini_ker.texi(,3940) is selected by using the @code{sel @var{selflag}} instruction in cmz. It is mini_ker.texi(,3941) selected by passing the @code{-D @var{selflag}} command line switch to mini_ker.texi(,3942) the call of the cmz directives preprocessor when using make. mini_ker.texi(,3943) mini_ker.texi(,3944) mini_ker.texi(,3945) A @samp{-} negates mini_ker.texi(,3946) the expression that follows. Parenthesis @samp{(} and @samp{)} are used mini_ker.texi(,3947) for the grouping of subexpressions. @samp{|} and @samp{,} are for the mini_ker.texi(,3948) boolean or: an expression with a or is true mini_ker.texi(,3949) if the expression on the left or the expression on the right of the or mini_ker.texi(,3950) is true. mini_ker.texi(,3951) @samp{&} is for the boolean and: an expression with an and is true if mini_ker.texi(,3952) the expression on the left and the expression on the right are true. mini_ker.texi(,3953) mini_ker.texi(,3954) The grouping is left to right when there is no parenthesis, with or and mini_ker.texi(,3955) @samp{&} having the same precedence. Therefore mini_ker.texi(,3956) mini_ker.texi(,3957) @example mini_ker.texi(,3958) a&b|c @equiv{} (a&b)|c mini_ker.texi(,3959) a|b&c @equiv{} (a|b)&c mini_ker.texi(,3960) a|b&c is not a|(b&c) mini_ker.texi(,3961) a&b|c is not a&(b|c) mini_ker.texi(,3962) @end example mini_ker.texi(,3963) mini_ker.texi(,3964) @node File introduction directives mini_ker.texi(,3965) @appendixsec File introduction directives mini_ker.texi(,3966) mini_ker.texi(,3967) A file (or sequence) introduction directive appears at the beginning mini_ker.texi(,3968) of the file. There are two different directives, one is @code{DECK} mini_ker.texi(,3969) for normal files, the other is @code{KEEP} for include files (sequences). mini_ker.texi(,3970) The first argument is the name of the file. The file name may not be larger mini_ker.texi(,3971) than 32 characters and is converted to lower case in the general case. mini_ker.texi(,3972) The optionnal following arguments may be mini_ker.texi(,3973) of 2 type (and may be mixed, separated by @samp{,}): mini_ker.texi(,3974) mini_ker.texi(,3975) @table @asis mini_ker.texi(,3976) @item conditional mini_ker.texi(,3977) A conditionnal is introduced by @code{IF=} followed by a conditionnal mini_ker.texi(,3978) expression described in mini_ker.texi(,3979) @ref{Conditional expressions}. The mini_ker.texi(,3980) file is preprocessed if the conditionnal expression is true. mini_ker.texi(,3981) @item language specification mini_ker.texi(,3982) A language specification is introduced by a @code{T=}. The most mini_ker.texi(,3983) common languages are @samp{mtn} for the mortran, @samp{ftn} for mini_ker.texi(,3984) fortran not preprocessed, @samp{f77} for preprocessed fortran, mini_ker.texi(,3985) @samp{c} for the c language and @samp{txt} for text files. mini_ker.texi(,3986) In general the language of the file determines the name of files mini_ker.texi(,3987) the preprocessed file is extracted to, the comment style and mini_ker.texi(,3988) the command for inclusions. mini_ker.texi(,3989) @end table mini_ker.texi(,3990) mini_ker.texi(,3991) It is a common practice to have wrong language type in @code{KEEP} mini_ker.texi(,3992) as the language may be determined from the @code{DECK} that include mini_ker.texi(,3993) them with cmz, or from their file name with make. This is not recommended mini_ker.texi(,3994) and considered a bad practice. mini_ker.texi(,3995) mini_ker.texi(,3996) Such a directive will always appear in cmz, as it is built-in. It mini_ker.texi(,3997) is recommended to have one when using make too, even though it is not mini_ker.texi(,3998) required in most cases. Indeed make uses the file name directly mini_ker.texi(,3999) and finds the language and file type by looking at the file extension. mini_ker.texi(,4000) make should then pass the language type with a mini_ker.texi(,4001) @code{--lang @var{lang}} command mini_ker.texi(,4002) line switch when calling the cmz directives preprocessor. mini_ker.texi(,4003) With make, the convention is to have @samp{cm} added before the normal mini_ker.texi(,4004) file suffix and after the @samp{.}. The table @ref{tab:cmfile_suffix} mini_ker.texi(,4005) shows the matching between suffixes, file type and file language. mini_ker.texi(,4006) mini_ker.texi(,4007) For example, a file beginning with mini_ker.texi(,4008) mini_ker.texi(,4009) @verbatim mini_ker.texi(,4010) +Deck, subroutine_foo, If=monitor&-simple, T=f77. mini_ker.texi(,4011) @end verbatim mini_ker.texi(,4012) mini_ker.texi(,4013) is a main preprocessed fortran file that will only be generated if mini_ker.texi(,4014) @samp{monitor} is selected and @samp{simple} is not selected. The mini_ker.texi(,4015) file to be preprocessed by make should have the @samp{.cmF} suffix, mini_ker.texi(,4016) and be called @file{subroutine_foo.cmF}. mini_ker.texi(,4017) mini_ker.texi(,4018) A file beginning with mini_ker.texi(,4019) mini_ker.texi(,4020) @verbatim mini_ker.texi(,4021) +KEEP,inc_common,If=monitor|interface,T=mtn mini_ker.texi(,4022) @end verbatim mini_ker.texi(,4023) mini_ker.texi(,4024) is an mortran include file that should be processed only if @samp{monitor} mini_ker.texi(,4025) or @samp{interface} is selected. The file to be preprocessed by make mini_ker.texi(,4026) should have the @samp{cmmti} suffix and be called @file{inc_common.cmmti}. mini_ker.texi(,4027) The resulting file when make is used will be called @file{inc_common.mti}. mini_ker.texi(,4028) mini_ker.texi(,4029) @node Conditional directives mini_ker.texi(,4030) @appendixsec Conditional directives mini_ker.texi(,4031) mini_ker.texi(,4032) Conditional directives may be used to conditionnaly skip blocks of mini_ker.texi(,4033) code. There are 4 conditional directives: @code{if}, @code{elseif}, mini_ker.texi(,4034) @code{else} and @code{endif}. @code{+if} begins a conditional directives mini_ker.texi(,4035) sequence, with argument a conditional expression. If the expression is mini_ker.texi(,4036) true the block of code following the @code{+if} is output in the mini_ker.texi(,4037) resulting file, up to another conditional directive, if it is false mini_ker.texi(,4038) the code block is skipped. If the mini_ker.texi(,4039) expression is false and the following conditional directive is mini_ker.texi(,4040) @code{+elseif}, the same procedure is followed with the argument of mini_ker.texi(,4041) @code{+elseif} mini_ker.texi(,4042) which is also a conditionnal expression. More than one @code{+elseif} mini_ker.texi(,4043) may follow a @code{+if}. If a @code{+if} or @code{+elseif} expression mini_ker.texi(,4044) is true the following mini_ker.texi(,4045) code block is output and all mini_ker.texi(,4046) the following @code{+elseif} code blocks are skipped. If all the @code{+if} mini_ker.texi(,4047) and @code{+elseif} expressions are false and mini_ker.texi(,4048) the following coditionnal mini_ker.texi(,4049) directive is @code{+else} then the block following the mini_ker.texi(,4050) @code{+else} is output. If a previous expression was true the mini_ker.texi(,4051) code block following the @code{+else} is skipped. The last code block mini_ker.texi(,4052) is closed by @code{+endif}. mini_ker.texi(,4053) mini_ker.texi(,4054) Conditionnal directives may be nested, a @code{+if} begins a deeper mini_ker.texi(,4055) conditionnal sequences directives that is ended by the corresponding mini_ker.texi(,4056) @code{+endif}. mini_ker.texi(,4057) mini_ker.texi(,4058) The simplest example is: mini_ker.texi(,4059) mini_ker.texi(,4060) @verbatim mini_ker.texi(,4061) some code; mini_ker.texi(,4062) +IF,monitor mini_ker.texi(,4063) code output only if monitor is true; mini_ker.texi(,4064) +ENDIF mini_ker.texi(,4065) @end verbatim mini_ker.texi(,4066) mini_ker.texi(,4067) If @samp{monitor} is selected, the @code{+if} block is output, it leads to mini_ker.texi(,4068) mini_ker.texi(,4069) @verbatim mini_ker.texi(,4070) some code; mini_ker.texi(,4071) code output only if monitor is true; mini_ker.texi(,4072) @end verbatim mini_ker.texi(,4073) mini_ker.texi(,4074) If @samp{monitor} isn't selected the @code{+if} block is skipped, it leads to mini_ker.texi(,4075) mini_ker.texi(,4076) @verbatim mini_ker.texi(,4077) some code; mini_ker.texi(,4078) @end verbatim mini_ker.texi(,4079) mini_ker.texi(,4080) An example with @code{+else} may be: mini_ker.texi(,4081) mini_ker.texi(,4082) @verbatim mini_ker.texi(,4083) +IF,double mini_ker.texi(,4084) call dmysub(eta); mini_ker.texi(,4085) +ELSE mini_ker.texi(,4086) call smysub(eta); mini_ker.texi(,4087) +ENDIF mini_ker.texi(,4088) @end verbatim mini_ker.texi(,4089) mini_ker.texi(,4090) If @samp{double} is selected the code output is @code{call dmysub(eta);}, mini_ker.texi(,4091) if @samp{double} isn't selected the code output is @code{call dmysub(eta);}. mini_ker.texi(,4092) mini_ker.texi(,4093) Here is a self explanatory example of use of @code{+elseif}: mini_ker.texi(,4094) mini_ker.texi(,4095) @verbatim mini_ker.texi(,4096) +IF,monitor mini_ker.texi(,4097) code used if monitor is selected; mini_ker.texi(,4098) +ELSEIF,kalman mini_ker.texi(,4099) code used if kalman is selected and monitor is not; mini_ker.texi(,4100) +ELSE mini_ker.texi(,4101) code used if kalman and monitor are not selected; mini_ker.texi(,4102) +ENDIF mini_ker.texi(,4103) @end verbatim mini_ker.texi(,4104) mini_ker.texi(,4105) And last an example of nested conditional directives: mini_ker.texi(,4106) mini_ker.texi(,4107) @verbatim mini_ker.texi(,4108) +IF,monitor mini_ker.texi(,4109) code used if monitor is selected; mini_ker.texi(,4110) +_IF,kalman. deep if mini_ker.texi(,4111) code used if monitor and kalman are selected; mini_ker.texi(,4112) +_ELSE. deep else mini_ker.texi(,4113) code used if monitor is selected and kalman is not; mini_ker.texi(,4114) +_ENDIF. end the deep conditionnals sequence mini_ker.texi(,4115) +ELSE mini_ker.texi(,4116) code used if monitor is not selected; mini_ker.texi(,4117) +_IF,kalman mini_ker.texi(,4118) code used if monitor is not selected but kalman is; mini_ker.texi(,4119) +_ELSE mini_ker.texi(,4120) code used if monitor and kalman are not selected; mini_ker.texi(,4121) +_ENDIF mini_ker.texi(,4122) other code used if monitor is not selected; mini_ker.texi(,4123) +ENDIF mini_ker.texi(,4124) @end verbatim mini_ker.texi(,4125) mini_ker.texi(,4126) @node File inclusion directive mini_ker.texi(,4127) @appendixsec File inclusion directive mini_ker.texi(,4128) mini_ker.texi(,4129) The file (sequence) inclusion directive is @code{seq}. The argument of mini_ker.texi(,4130) @code{seq} is an include files @samp{,} separated list. The include mini_ker.texi(,4131) files are @code{Keep} in cmz. The following optional arguments may be mini_ker.texi(,4132) mixed: mini_ker.texi(,4133) mini_ker.texi(,4134) @table @asis mini_ker.texi(,4135) @item conditional mini_ker.texi(,4136) A conditionnal is introduced by @code{IF=} followed by a conditionnal mini_ker.texi(,4137) expression described in mini_ker.texi(,4138) @ref{Conditional expressions}. The mini_ker.texi(,4139) directive is ignored if the conditionnal expression is false. mini_ker.texi(,4140) @item T=noinclude mini_ker.texi(,4141) When this argument is present the text of the sequence will mini_ker.texi(,4142) always be included in the file where the @code{+seq} appears. mini_ker.texi(,4143) @end table mini_ker.texi(,4144) mini_ker.texi(,4145) When there is no @code{T=noinclude} argument, the @code{+seq} mini_ker.texi(,4146) directive may be replaced with an inclusion command suitable mini_ker.texi(,4147) for the language of the file being processed, if such mini_ker.texi(,4148) command has been specified. mini_ker.texi(,4149) mini_ker.texi(,4150) For example if we have the following sequence mini_ker.texi(,4151) @verbatim mini_ker.texi(,4152) +KEEP,inc,lang=C mini_ker.texi(,4153) typedef struct incstr {char* msg}; mini_ker.texi(,4154) @end verbatim mini_ker.texi(,4155) mini_ker.texi(,4156) And the following code in the file being processed: mini_ker.texi(,4157) mini_ker.texi(,4158) @verbatim mini_ker.texi(,4159) +DECK,mainf,lang=C mini_ker.texi(,4160) +SEQ,inc mini_ker.texi(,4161) int main (int argc, char* argv) { exit(0); } mini_ker.texi(,4162) @end verbatim mini_ker.texi(,4163) mini_ker.texi(,4164) the processing of @file{mainf} should lead to the file mini_ker.texi(,4165) @file{mainf.c}, containing mini_ker.texi(,4166) an include command for @file{inc}: mini_ker.texi(,4167) mini_ker.texi(,4168) @verbatim mini_ker.texi(,4169) #include "inc.h" mini_ker.texi(,4170) int main (int argc, char* argv) { exit(0); } mini_ker.texi(,4171) @end verbatim mini_ker.texi(,4172) mini_ker.texi(,4173) In case the @code{+seq} has the @code{T=noinclude}: mini_ker.texi(,4174) mini_ker.texi(,4175) @verbatim mini_ker.texi(,4176) +DECK,mainf,lang=C mini_ker.texi(,4177) +SEQ,inc,T=noinclude mini_ker.texi(,4178) int main (int argc, char* argv) { exit(0); } mini_ker.texi(,4179) @end verbatim mini_ker.texi(,4180) mini_ker.texi(,4181) The processing of @file{mainf} should lead to the file @file{mainf.c} mini_ker.texi(,4182) containing the text of @file{inc}: mini_ker.texi(,4183) mini_ker.texi(,4184) @verbatim mini_ker.texi(,4185) typedef struct incstr {char* msg}; mini_ker.texi(,4186) int main (int argc, char* argv) { exit(0); } mini_ker.texi(,4187) @end verbatim mini_ker.texi(,4188) mini_ker.texi(,4189) @node The self directive mini_ker.texi(,4190) @appendixsec The @samp{self} directive mini_ker.texi(,4191) mini_ker.texi(,4192) The @code{self} directive is an obsolete directive that may be used for mini_ker.texi(,4193) conditionnal skipping of code. For a better approach see mini_ker.texi(,4194) @ref{Conditional directives}. mini_ker.texi(,4195) The optionnal argument of @code{+SELF} is @code{If=} followed by mini_ker.texi(,4196) a conditionnal expression. If the conditionnal expression is true the mini_ker.texi(,4197) code following the directive is output, if it is false the code mini_ker.texi(,4198) is skipped up to any directive (including another @code{+SELF}) mini_ker.texi(,4199) except @code{+seq}. mini_ker.texi(,4200) mini_ker.texi(,4208) mini_ker.texi(,4209) @node Copying This Manual mini_ker.texi(,4210) @appendix Copying This Manual mini_ker.texi(,4211) mini_ker.texi(,4212) @menu mini_ker.texi(,4213) * GNU Free Documentation License:: License for copying this manual. mini_ker.texi(,4214) @end menu mini_ker.texi(,4215) fdl.texi(,1) fdl.texi(,2) @node GNU Free Documentation License fdl.texi(,3) @appendixsec GNU Free Documentation License fdl.texi(,4) fdl.texi(,5) @cindex FDL, GNU Free Documentation License fdl.texi(,6) @center Version 1.1, March 2000 fdl.texi(,7) fdl.texi(,8) @display fdl.texi(,9) Copyright @copyright{} 2000 Free Software Foundation, Inc. fdl.texi(,10) 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA fdl.texi(,11) fdl.texi(,12) Everyone is permitted to copy and distribute verbatim copies fdl.texi(,13) of this license document, but changing it is not allowed. fdl.texi(,14) @end display fdl.texi(,15) fdl.texi(,16) @enumerate 0 fdl.texi(,17) @item fdl.texi(,18) PREAMBLE fdl.texi(,19) fdl.texi(,20) The purpose of this License is to make a manual, textbook, or other fdl.texi(,21) written document @dfn{free} in the sense of freedom: to assure everyone fdl.texi(,22) the effective freedom to copy and redistribute it, with or without fdl.texi(,23) modifying it, either commercially or noncommercially. Secondarily, fdl.texi(,24) this License preserves for the author and publisher a way to get fdl.texi(,25) credit for their work, while not being considered responsible for fdl.texi(,26) modifications made by others. fdl.texi(,27) fdl.texi(,28) This License is a kind of ``copyleft'', which means that derivative fdl.texi(,29) works of the document must themselves be free in the same sense. It fdl.texi(,30) complements the GNU General Public License, which is a copyleft fdl.texi(,31) license designed for free software. fdl.texi(,32) fdl.texi(,33) We have designed this License in order to use it for manuals for free fdl.texi(,34) software, because free software needs free documentation: a free fdl.texi(,35) program should come with manuals providing the same freedoms that the fdl.texi(,36) software does. But this License is not limited to software manuals; fdl.texi(,37) it can be used for any textual work, regardless of subject matter or fdl.texi(,38) whether it is published as a printed book. We recommend this License fdl.texi(,39) principally for works whose purpose is instruction or reference. fdl.texi(,40) fdl.texi(,41) @item fdl.texi(,42) APPLICABILITY AND DEFINITIONS fdl.texi(,43) fdl.texi(,44) This License applies to any manual or other work that contains a fdl.texi(,45) notice placed by the copyright holder saying it can be distributed fdl.texi(,46) under the terms of this License. The ``Document'', below, refers to any fdl.texi(,47) such manual or work. Any member of the public is a licensee, and is fdl.texi(,48) addressed as ``you''. fdl.texi(,49) fdl.texi(,50) A ``Modified Version'' of the Document means any work containing the fdl.texi(,51) Document or a portion of it, either copied verbatim, or with fdl.texi(,52) modifications and/or translated into another language. fdl.texi(,53) fdl.texi(,54) A ``Secondary Section'' is a named appendix or a front-matter section of fdl.texi(,55) the Document that deals exclusively with the relationship of the fdl.texi(,56) publishers or authors of the Document to the Document's overall subject fdl.texi(,57) (or to related matters) and contains nothing that could fall directly fdl.texi(,58) within that overall subject. (For example, if the Document is in part a fdl.texi(,59) textbook of mathematics, a Secondary Section may not explain any fdl.texi(,60) mathematics.) The relationship could be a matter of historical fdl.texi(,61) connection with the subject or with related matters, or of legal, fdl.texi(,62) commercial, philosophical, ethical or political position regarding fdl.texi(,63) them. fdl.texi(,64) fdl.texi(,65) The ``Invariant Sections'' are certain Secondary Sections whose titles fdl.texi(,66) are designated, as being those of Invariant Sections, in the notice fdl.texi(,67) that says that the Document is released under this License. fdl.texi(,68) fdl.texi(,69) The ``Cover Texts'' are certain short passages of text that are listed, fdl.texi(,70) as Front-Cover Texts or Back-Cover Texts, in the notice that says that fdl.texi(,71) the Document is released under this License. fdl.texi(,72) fdl.texi(,73) A ``Transparent'' copy of the Document means a machine-readable copy, fdl.texi(,74) represented in a format whose specification is available to the fdl.texi(,75) general public, whose contents can be viewed and edited directly and fdl.texi(,76) straightforwardly with generic text editors or (for images composed of fdl.texi(,77) pixels) generic paint programs or (for drawings) some widely available fdl.texi(,78) drawing editor, and that is suitable for input to text formatters or fdl.texi(,79) for automatic translation to a variety of formats suitable for input fdl.texi(,80) to text formatters. A copy made in an otherwise Transparent file fdl.texi(,81) format whose markup has been designed to thwart or discourage fdl.texi(,82) subsequent modification by readers is not Transparent. A copy that is fdl.texi(,83) not ``Transparent'' is called ``Opaque''. fdl.texi(,84) fdl.texi(,85) Examples of suitable formats for Transparent copies include plain fdl.texi(,86) @sc{ascii} without markup, Texinfo input format, La@TeX{} input format, fdl.texi(,87) @acronym{SGML} or @acronym{XML} using a publicly available fdl.texi(,88) @acronym{DTD}, and standard-conforming simple @acronym{HTML} designed fdl.texi(,89) for human modification. Opaque formats include PostScript, fdl.texi(,90) @acronym{PDF}, proprietary formats that can be read and edited only by fdl.texi(,91) proprietary word processors, @acronym{SGML} or @acronym{XML} for which fdl.texi(,92) the @acronym{DTD} and/or processing tools are not generally available, fdl.texi(,93) and the machine-generated @acronym{HTML} produced by some word fdl.texi(,94) processors for output purposes only. fdl.texi(,95) fdl.texi(,96) The ``Title Page'' means, for a printed book, the title page itself, fdl.texi(,97) plus such following pages as are needed to hold, legibly, the material fdl.texi(,98) this License requires to appear in the title page. For works in fdl.texi(,99) formats which do not have any title page as such, ``Title Page'' means fdl.texi(,100) the text near the most prominent appearance of the work's title, fdl.texi(,101) preceding the beginning of the body of the text. fdl.texi(,102) fdl.texi(,103) @item fdl.texi(,104) VERBATIM COPYING fdl.texi(,105) fdl.texi(,106) You may copy and distribute the Document in any medium, either fdl.texi(,107) commercially or noncommercially, provided that this License, the fdl.texi(,108) copyright notices, and the license notice saying this License applies fdl.texi(,109) to the Document are reproduced in all copies, and that you add no other fdl.texi(,110) conditions whatsoever to those of this License. You may not use fdl.texi(,111) technical measures to obstruct or control the reading or further fdl.texi(,112) copying of the copies you make or distribute. However, you may accept fdl.texi(,113) compensation in exchange for copies. If you distribute a large enough fdl.texi(,114) number of copies you must also follow the conditions in section 3. fdl.texi(,115) fdl.texi(,116) You may also lend copies, under the same conditions stated above, and fdl.texi(,117) you may publicly display copies. fdl.texi(,118) fdl.texi(,119) @item fdl.texi(,120) COPYING IN QUANTITY fdl.texi(,121) fdl.texi(,122) If you publish printed copies of the Document numbering more than 100, fdl.texi(,123) and the Document's license notice requires Cover Texts, you must enclose fdl.texi(,124) the copies in covers that carry, clearly and legibly, all these Cover fdl.texi(,125) Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on fdl.texi(,126) the back cover. Both covers must also clearly and legibly identify fdl.texi(,127) you as the publisher of these copies. The front cover must present fdl.texi(,128) the full title with all words of the title equally prominent and fdl.texi(,129) visible. You may add other material on the covers in addition. fdl.texi(,130) Copying with changes limited to the covers, as long as they preserve fdl.texi(,131) the title of the Document and satisfy these conditions, can be treated fdl.texi(,132) as verbatim copying in other respects. fdl.texi(,133) fdl.texi(,134) If the required texts for either cover are too voluminous to fit fdl.texi(,135) legibly, you should put the first ones listed (as many as fit fdl.texi(,136) reasonably) on the actual cover, and continue the rest onto adjacent fdl.texi(,137) pages. fdl.texi(,138) fdl.texi(,139) If you publish or distribute Opaque copies of the Document numbering fdl.texi(,140) more than 100, you must either include a machine-readable Transparent fdl.texi(,141) copy along with each Opaque copy, or state in or with each Opaque copy fdl.texi(,142) a publicly-accessible computer-network location containing a complete fdl.texi(,143) Transparent copy of the Document, free of added material, which the fdl.texi(,144) general network-using public has access to download anonymously at no fdl.texi(,145) charge using public-standard network protocols. If you use the latter fdl.texi(,146) option, you must take reasonably prudent steps, when you begin fdl.texi(,147) distribution of Opaque copies in quantity, to ensure that this fdl.texi(,148) Transparent copy will remain thus accessible at the stated location fdl.texi(,149) until at least one year after the last time you distribute an Opaque fdl.texi(,150) copy (directly or through your agents or retailers) of that edition to fdl.texi(,151) the public. fdl.texi(,152) fdl.texi(,153) It is requested, but not required, that you contact the authors of the fdl.texi(,154) Document well before redistributing any large number of copies, to give fdl.texi(,155) them a chance to provide you with an updated version of the Document. fdl.texi(,156) fdl.texi(,157) @item fdl.texi(,158) MODIFICATIONS fdl.texi(,159) fdl.texi(,160) You may copy and distribute a Modified Version of the Document under fdl.texi(,161) the conditions of sections 2 and 3 above, provided that you release fdl.texi(,162) the Modified Version under precisely this License, with the Modified fdl.texi(,163) Version filling the role of the Document, thus licensing distribution fdl.texi(,164) and modification of the Modified Version to whoever possesses a copy fdl.texi(,165) of it. In addition, you must do these things in the Modified Version: fdl.texi(,166) fdl.texi(,167) @enumerate A fdl.texi(,168) @item fdl.texi(,169) Use in the Title Page (and on the covers, if any) a title distinct fdl.texi(,170) from that of the Document, and from those of previous versions fdl.texi(,171) (which should, if there were any, be listed in the History section fdl.texi(,172) of the Document). You may use the same title as a previous version fdl.texi(,173) if the original publisher of that version gives permission. fdl.texi(,174) fdl.texi(,175) @item fdl.texi(,176) List on the Title Page, as authors, one or more persons or entities fdl.texi(,177) responsible for authorship of the modifications in the Modified fdl.texi(,178) Version, together with at least five of the principal authors of the fdl.texi(,179) Document (all of its principal authors, if it has less than five). fdl.texi(,180) fdl.texi(,181) @item fdl.texi(,182) State on the Title page the name of the publisher of the fdl.texi(,183) Modified Version, as the publisher. fdl.texi(,184) fdl.texi(,185) @item fdl.texi(,186) Preserve all the copyright notices of the Document. fdl.texi(,187) fdl.texi(,188) @item fdl.texi(,189) Add an appropriate copyright notice for your modifications fdl.texi(,190) adjacent to the other copyright notices. fdl.texi(,191) fdl.texi(,192) @item fdl.texi(,193) Include, immediately after the copyright notices, a license notice fdl.texi(,194) giving the public permission to use the Modified Version under the fdl.texi(,195) terms of this License, in the form shown in the Addendum below. fdl.texi(,196) fdl.texi(,197) @item fdl.texi(,198) Preserve in that license notice the full lists of Invariant Sections fdl.texi(,199) and required Cover Texts given in the Document's license notice. fdl.texi(,200) fdl.texi(,201) @item fdl.texi(,202) Include an unaltered copy of this License. fdl.texi(,203) fdl.texi(,204) @item fdl.texi(,205) Preserve the section entitled ``History'', and its title, and add to fdl.texi(,206) it an item stating at least the title, year, new authors, and fdl.texi(,207) publisher of the Modified Version as given on the Title Page. If fdl.texi(,208) there is no section entitled ``History'' in the Document, create one fdl.texi(,209) stating the title, year, authors, and publisher of the Document as fdl.texi(,210) given on its Title Page, then add an item describing the Modified fdl.texi(,211) Version as stated in the previous sentence. fdl.texi(,212) fdl.texi(,213) @item fdl.texi(,214) Preserve the network location, if any, given in the Document for fdl.texi(,215) public access to a Transparent copy of the Document, and likewise fdl.texi(,216) the network locations given in the Document for previous versions fdl.texi(,217) it was based on. These may be placed in the ``History'' section. fdl.texi(,218) You may omit a network location for a work that was published at fdl.texi(,219) least four years before the Document itself, or if the original fdl.texi(,220) publisher of the version it refers to gives permission. fdl.texi(,221) fdl.texi(,222) @item fdl.texi(,223) In any section entitled ``Acknowledgments'' or ``Dedications'', fdl.texi(,224) preserve the section's title, and preserve in the section all the fdl.texi(,225) substance and tone of each of the contributor acknowledgments fdl.texi(,226) and/or dedications given therein. fdl.texi(,227) fdl.texi(,228) @item fdl.texi(,229) Preserve all the Invariant Sections of the Document, fdl.texi(,230) unaltered in their text and in their titles. Section numbers fdl.texi(,231) or the equivalent are not considered part of the section titles. fdl.texi(,232) fdl.texi(,233) @item fdl.texi(,234) Delete any section entitled ``Endorsements''. Such a section fdl.texi(,235) may not be included in the Modified Version. fdl.texi(,236) fdl.texi(,237) @item fdl.texi(,238) Do not retitle any existing section as ``Endorsements'' fdl.texi(,239) or to conflict in title with any Invariant Section. fdl.texi(,240) @end enumerate fdl.texi(,241) fdl.texi(,242) If the Modified Version includes new front-matter sections or fdl.texi(,243) appendices that qualify as Secondary Sections and contain no material fdl.texi(,244) copied from the Document, you may at your option designate some or all fdl.texi(,245) of these sections as invariant. To do this, add their titles to the fdl.texi(,246) list of Invariant Sections in the Modified Version's license notice. fdl.texi(,247) These titles must be distinct from any other section titles. fdl.texi(,248) fdl.texi(,249) You may add a section entitled ``Endorsements'', provided it contains fdl.texi(,250) nothing but endorsements of your Modified Version by various fdl.texi(,251) parties---for example, statements of peer review or that the text has fdl.texi(,252) been approved by an organization as the authoritative definition of a fdl.texi(,253) standard. fdl.texi(,254) fdl.texi(,255) You may add a passage of up to five words as a Front-Cover Text, and a fdl.texi(,256) passage of up to 25 words as a Back-Cover Text, to the end of the list fdl.texi(,257) of Cover Texts in the Modified Version. Only one passage of fdl.texi(,258) Front-Cover Text and one of Back-Cover Text may be added by (or fdl.texi(,259) through arrangements made by) any one entity. If the Document already fdl.texi(,260) includes a cover text for the same cover, previously added by you or fdl.texi(,261) by arrangement made by the same entity you are acting on behalf of, fdl.texi(,262) you may not add another; but you may replace the old one, on explicit fdl.texi(,263) permission from the previous publisher that added the old one. fdl.texi(,264) fdl.texi(,265) The author(s) and publisher(s) of the Document do not by this License fdl.texi(,266) give permission to use their names for publicity for or to assert or fdl.texi(,267) imply endorsement of any Modified Version. fdl.texi(,268) fdl.texi(,269) @item fdl.texi(,270) COMBINING DOCUMENTS fdl.texi(,271) fdl.texi(,272) You may combine the Document with other documents released under this fdl.texi(,273) License, under the terms defined in section 4 above for modified fdl.texi(,274) versions, provided that you include in the combination all of the fdl.texi(,275) Invariant Sections of all of the original documents, unmodified, and fdl.texi(,276) list them all as Invariant Sections of your combined work in its fdl.texi(,277) license notice. fdl.texi(,278) fdl.texi(,279) The combined work need only contain one copy of this License, and fdl.texi(,280) multiple identical Invariant Sections may be replaced with a single fdl.texi(,281) copy. If there are multiple Invariant Sections with the same name but fdl.texi(,282) different contents, make the title of each such section unique by fdl.texi(,283) adding at the end of it, in parentheses, the name of the original fdl.texi(,284) author or publisher of that section if known, or else a unique number. fdl.texi(,285) Make the same adjustment to the section titles in the list of fdl.texi(,286) Invariant Sections in the license notice of the combined work. fdl.texi(,287) fdl.texi(,288) In the combination, you must combine any sections entitled ``History'' fdl.texi(,289) in the various original documents, forming one section entitled fdl.texi(,290) ``History''; likewise combine any sections entitled ``Acknowledgments'', fdl.texi(,291) and any sections entitled ``Dedications''. You must delete all sections fdl.texi(,292) entitled ``Endorsements.'' fdl.texi(,293) fdl.texi(,294) @item fdl.texi(,295) COLLECTIONS OF DOCUMENTS fdl.texi(,296) fdl.texi(,297) You may make a collection consisting of the Document and other documents fdl.texi(,298) released under this License, and replace the individual copies of this fdl.texi(,299) License in the various documents with a single copy that is included in fdl.texi(,300) the collection, provided that you follow the rules of this License for fdl.texi(,301) verbatim copying of each of the documents in all other respects. fdl.texi(,302) fdl.texi(,303) You may extract a single document from such a collection, and distribute fdl.texi(,304) it individually under this License, provided you insert a copy of this fdl.texi(,305) License into the extracted document, and follow this License in all fdl.texi(,306) other respects regarding verbatim copying of that document. fdl.texi(,307) fdl.texi(,308) @item fdl.texi(,309) AGGREGATION WITH INDEPENDENT WORKS fdl.texi(,310) fdl.texi(,311) A compilation of the Document or its derivatives with other separate fdl.texi(,312) and independent documents or works, in or on a volume of a storage or fdl.texi(,313) distribution medium, does not as a whole count as a Modified Version fdl.texi(,314) of the Document, provided no compilation copyright is claimed for the fdl.texi(,315) compilation. Such a compilation is called an ``aggregate'', and this fdl.texi(,316) License does not apply to the other self-contained works thus compiled fdl.texi(,317) with the Document, on account of their being thus compiled, if they fdl.texi(,318) are not themselves derivative works of the Document. fdl.texi(,319) fdl.texi(,320) If the Cover Text requirement of section 3 is applicable to these fdl.texi(,321) copies of the Document, then if the Document is less than one quarter fdl.texi(,322) of the entire aggregate, the Document's Cover Texts may be placed on fdl.texi(,323) covers that surround only the Document within the aggregate. fdl.texi(,324) Otherwise they must appear on covers around the whole aggregate. fdl.texi(,325) fdl.texi(,326) @item fdl.texi(,327) TRANSLATION fdl.texi(,328) fdl.texi(,329) Translation is considered a kind of modification, so you may fdl.texi(,330) distribute translations of the Document under the terms of section 4. fdl.texi(,331) Replacing Invariant Sections with translations requires special fdl.texi(,332) permission from their copyright holders, but you may include fdl.texi(,333) translations of some or all Invariant Sections in addition to the fdl.texi(,334) original versions of these Invariant Sections. You may include a fdl.texi(,335) translation of this License provided that you also include the fdl.texi(,336) original English version of this License. In case of a disagreement fdl.texi(,337) between the translation and the original English version of this fdl.texi(,338) License, the original English version will prevail. fdl.texi(,339) fdl.texi(,340) @item fdl.texi(,341) TERMINATION fdl.texi(,342) fdl.texi(,343) You may not copy, modify, sublicense, or distribute the Document except fdl.texi(,344) as expressly provided for under this License. Any other attempt to fdl.texi(,345) copy, modify, sublicense or distribute the Document is void, and will fdl.texi(,346) automatically terminate your rights under this License. However, fdl.texi(,347) parties who have received copies, or rights, from you under this fdl.texi(,348) License will not have their licenses terminated so long as such fdl.texi(,349) parties remain in full compliance. fdl.texi(,350) fdl.texi(,351) @item fdl.texi(,352) FUTURE REVISIONS OF THIS LICENSE fdl.texi(,353) fdl.texi(,354) The Free Software Foundation may publish new, revised versions fdl.texi(,355) of the GNU Free Documentation License from time to time. Such new fdl.texi(,356) versions will be similar in spirit to the present version, but may fdl.texi(,357) differ in detail to address new problems or concerns. See fdl.texi(,358) @uref{http://www.gnu.org/copyleft/}. fdl.texi(,359) fdl.texi(,360) Each version of the License is given a distinguishing version number. fdl.texi(,361) If the Document specifies that a particular numbered version of this fdl.texi(,362) License ``or any later version'' applies to it, you have the option of fdl.texi(,363) following the terms and conditions either of that specified version or fdl.texi(,364) of any later version that has been published (not as a draft) by the fdl.texi(,365) Free Software Foundation. If the Document does not specify a version fdl.texi(,366) number of this License, you may choose any version ever published (not fdl.texi(,367) as a draft) by the Free Software Foundation. fdl.texi(,368) @end enumerate fdl.texi(,369) fdl.texi(,370) @page fdl.texi(,371) @appendixsubsec ADDENDUM: How to use this License for your documents fdl.texi(,372) fdl.texi(,373) To use this License in a document you have written, include a copy of fdl.texi(,374) the License in the document and put the following copyright and fdl.texi(,375) license notices just after the title page: fdl.texi(,376) fdl.texi(,377) @smallexample fdl.texi(,378) @group fdl.texi(,379) Copyright (C) @var{year} @var{your name}. fdl.texi(,380) Permission is granted to copy, distribute and/or modify this document fdl.texi(,381) under the terms of the GNU Free Documentation License, Version 1.1 fdl.texi(,382) or any later version published by the Free Software Foundation; fdl.texi(,383) with the Invariant Sections being @var{list their titles}, with the fdl.texi(,384) Front-Cover Texts being @var{list}, and with the Back-Cover Texts being @var{list}. fdl.texi(,385) A copy of the license is included in the section entitled ``GNU fdl.texi(,386) Free Documentation License''. fdl.texi(,387) @end group fdl.texi(,388) @end smallexample fdl.texi(,389) fdl.texi(,390) If you have no Invariant Sections, write ``with no Invariant Sections'' fdl.texi(,391) instead of saying which ones are invariant. If you have no fdl.texi(,392) Front-Cover Texts, write ``no Front-Cover Texts'' instead of fdl.texi(,393) ``Front-Cover Texts being @var{list}''; likewise for Back-Cover Texts. fdl.texi(,394) fdl.texi(,395) If your document contains nontrivial examples of program code, we fdl.texi(,396) recommend releasing these examples in parallel under your choice of fdl.texi(,397) free software license, such as the GNU General Public License, fdl.texi(,398) to permit their use in free software. fdl.texi(,399) fdl.texi(,400) @c Local Variables: fdl.texi(,401) @c ispell-local-pdict: "ispell-dict" fdl.texi(,402) @c End: fdl.texi(,403) mini_ker.texi(,4217) mini_ker.texi(,4218) @bye texi2html-1.82/test/manuals/res/texi_mini_ker/mini_ker.20000644000175000017500000000011411264347121025143 0ustar flichtenheldflichtenheld*** Duplicate node found: Top (l. 72) *** Duplicate node found: Top (l. 72) texi2html-1.82/test/manuals/res/texi_mini_ker/mini_ker.passfirst0000644000175000017500000072017111264347121027034 0ustar flichtenheldflichtenheldmini_ker.texi(,12) @setfilename mini_ker.info version.texi(,1) @set UPDATED 28 March 2002 version.texi(,2) @set UPDATED-MONTH March 2002 version.texi(,3) @set EDITION 4.2 version.texi(,4) @set VERSION 4.2 mini_ker.texi(,14) mini_ker.texi(,15) @c @set myversion @value{VERSION} mini_ker.texi(,16) @set myversion 102 mini_ker.texi(,17) mini_ker.texi(,18) @set myurl @url{http://www.environnement.ens.fr/@/perso/@/dumas/@/mini_ker/@/software.html} mini_ker.texi(,19) mini_ker.texi(,23) mini_ker.texi(Minik,24) @settitle Miniker 102 manual mini_ker.texi(,25) mini_ker.texi(,26) @syncodeindex fn vr mini_ker.texi(,27) mini_ker.texi(,28) @dircategory Miscellaneous mini_ker.texi(,32) mini_ker.texi(,33) mini_ker.texi(,48) mini_ker.texi(,62) mini_ker.texi(,64) @node Top mini_ker.texi(Minik,65) @top Miniker 102 manual mini_ker.texi(,66) mini_ker.texi(,67) mini_ker.texi(,68) @c @insertcopying mini_ker.texi(,70) mini_ker.texi(Minik,73) @top Miniker 102 manual mini_ker.texi(,74) mini_ker.texi(,75) @strong{By: The TEF Collaboration} mini_ker.texi(,76) mini_ker.texi(,77) @insertcopying mini_ker.texi(,78) mini_ker.texi(,80) mini_ker.texi(,81) @menu mini_ker.texi(,82) * Introduction:: mini_ker.texi(,83) * TEF overview:: mini_ker.texi(Minik,84) * A model with Miniker:: mini_ker.texi(,85) * Advanced programming:: mini_ker.texi(,86) * Dynamic system analysis:: mini_ker.texi(Minik,87) * Advanced use of Miniker with make:: mini_ker.texi(,88) mini_ker.texi(,89) Indices mini_ker.texi(,90) mini_ker.texi(,91) * Concepts index:: mini_ker.texi(,92) * Variables macros and functions index:: mini_ker.texi(,93) mini_ker.texi(,94) Appendices mini_ker.texi(,95) mini_ker.texi(,96) * Installation:: mini_ker.texi(,97) * Cmz directives reference:: mini_ker.texi(,102) * Copying This Manual:: The GNU Free Documentation License. mini_ker.texi(,103) @end menu mini_ker.texi(,104) mini_ker.texi(,105) @contents mini_ker.texi(,106) mini_ker.texi(,107) @node Introduction mini_ker.texi(,108) @unnumbered Introduction mini_ker.texi(,109) mini_ker.texi(,110) @cindex TEF mini_ker.texi(,111) @cindex cells mini_ker.texi(,112) @cindex transfers mini_ker.texi(,113) @cindex ZOOM mini_ker.texi(,114) @cindex mortran mini_ker.texi(,115) mini_ker.texi(Minik,116) Miniker is a modeling tool, built especially in order to implement mini_ker.texi(,117) models written following the @acronym{TEF,Transfer Evolution Formalism} mini_ker.texi(,118) formalism, a mathematical framework for system analysis and mini_ker.texi(Minik,119) simulation. Miniker allows for timewise simulation, system analysis, mini_ker.texi(,120) adjoint computation, Kalman filtering and more. mini_ker.texi(,121) mini_ker.texi(Minik,122) Miniker uses a fortran preprocessor, @command{mortran}, designed in the mini_ker.texi(,123) 1970's, to ease model writing using dedicated specific languages. mini_ker.texi(,124) For example partial derivatives are mini_ker.texi(Minik,125) symbolicaly determined by @command{mortran} macros in Miniker. mini_ker.texi(,126) For the selection of mini_ker.texi(,127) another compile-time features, another set of preprocessor directives, mini_ker.texi(,128) the @dfn{cmz directives}, are used. In most cases the user does not need to mini_ker.texi(,129) know anything about that preprocessing that occurs behind the scene, mini_ker.texi(,130) he simply writes down the equations of his model and he is done. mini_ker.texi(,131) mini_ker.texi(,132) @c All partial derivatives needed to solve the TEF system are automatically mini_ker.texi(,133) @c determined during the pre-compilation stage. mini_ker.texi(,134) @c Once all models written down and initial conditions mini_ker.texi(,135) @c given using a pseudo-Fortran type of language, the model is ready to run. mini_ker.texi(,136) mini_ker.texi(,137) @c The language developed to get automatic symbolic partial derivatives mini_ker.texi(,138) @c uses the Fortran pre-compiler @command{mortran}, designed in the 1970's. mini_ker.texi(,139) mini_ker.texi(,140) A comprehensive description mini_ker.texi(,141) of the @acronym{TEF} formalism in available on mini_ker.texi(,142) @url{http://www.lmd.jussieu.fr/ZOOM/doc/tef-GB-partA5.pdf}). mini_ker.texi(Minik,143) The Miniker software is a reduced version of mini_ker.texi(,144) @uref{http://www.lmd.jussieu.fr@//zoom,@strong{ZOOM}}, mini_ker.texi(,145) that can only handle a hundreds of variables, but is much easier to use. mini_ker.texi(,146) mini_ker.texi(,147) @menu mini_ker.texi(,148) * Intended audience:: mini_ker.texi(,149) * Reading guide:: mini_ker.texi(,150) * Other Manuals and documentation:: mini_ker.texi(,151) @end menu mini_ker.texi(,152) mini_ker.texi(,153) @node Intended audience mini_ker.texi(,154) @unnumberedsec Intended audience mini_ker.texi(,155) mini_ker.texi(,156) The reader should have notions in system dynamics. mini_ker.texi(,157) @c and understand the basis of the TEF. mini_ker.texi(,158) Moreover a minimal knowledge of programmation and fortran is mini_ker.texi(,159) required. What is required is a basic understanding of variable types, mini_ker.texi(,160) affectation and fortran expressions. mini_ker.texi(,161) mini_ker.texi(,162) @node Reading guide mini_ker.texi(,163) @unnumberedsec Reading guide mini_ker.texi(,164) mini_ker.texi(,165) The first chapter is a brief overview of the @acronym{TEF}. mini_ker.texi(Minik,166) The following describes how to write, compile and run a model in Miniker mini_ker.texi(,167) in its basic and comprehensive syntax. mini_ker.texi(,168) @c Reading the sections of this chapter up to the section mini_ker.texi(,169) @c @emph{Symbolic model description} is required to know the mini_ker.texi(,170) @c syntax of model description in @Minik{}. mini_ker.texi(,171) Reading up to the section mini_ker.texi(Minik,172) @emph{Controlling the run} is required to be able to use Miniker. mini_ker.texi(Minik,173) In this section it is assumed that Miniker is properly setup. The mini_ker.texi(,174) installation instructions are in the appendix at mini_ker.texi(,175) @ref{Installation}. mini_ker.texi(,176) mini_ker.texi(,177) @c 2 programming environment to compile the model are available, with cmz mini_ker.texi(,178) @c and make, you can skip the method description you are not interested in. mini_ker.texi(,179) @c A reference for the usefull cmz directives is also in the appendix mini_ker.texi(,180) @c (@pxref{Cmz directives reference}). mini_ker.texi(,181) mini_ker.texi(,182) @c You should also mini_ker.texi(,183) @c read the following section, @emph{Symbolic model description} which presents an mini_ker.texi(,184) @c alternate syntax for model description, such that you can choose what you mini_ker.texi(,185) @c prefer. mini_ker.texi(,186) mini_ker.texi(,187) The next chapter describes advanced features, first a general introduction to mini_ker.texi(,188) features settings and then a description of other model description related mini_ker.texi(,189) features. mini_ker.texi(,190) mini_ker.texi(Minik,191) The next chapter describes system analysis tools available with Miniker. The mini_ker.texi(,192) sections are independant and each describes how to use a specific feature. If mini_ker.texi(,193) you plan on using these features, you should also read mini_ker.texi(,194) @ref{Selecting features, , Overview of feature setting}. mini_ker.texi(,195) mini_ker.texi(,196) A final chapter describes advanced features in a development environment mini_ker.texi(,197) using make, mini_ker.texi(,198) mini_ker.texi(,199) In the appendix the instructions for the installation are described mini_ker.texi(,200) (@pxref{Installation}). mini_ker.texi(,201) mini_ker.texi(,202) @node Other Manuals and documentation mini_ker.texi(,203) @unnumberedsec Other Manuals and documentation mini_ker.texi(,204) mini_ker.texi(,205) A programmers'Manual is available (in French), and can be asked for to mini_ker.texi(,206) any member of the collabration. See additional documents in mini_ker.texi(,207) @url{http://www.lmd.jussieu.fr/Zoom/doc} or ask for Research mini_ker.texi(,208) texts and articles to members. mini_ker.texi(,209) mini_ker.texi(,210) @node TEF overview mini_ker.texi(,211) @chapter An overview of the @acronym{TEF} formalism mini_ker.texi(,212) mini_ker.texi(,213) The @acronym{TEF, Transfer Evolution Formalism} is based on partitionning mini_ker.texi(,214) and recoupling of model subsystems. It allows the study of the coupling mini_ker.texi(,215) between subsystems by the means of linearization and time discretization. mini_ker.texi(,216) mini_ker.texi(,217) @menu mini_ker.texi(,218) * Cell and Transfer:: mini_ker.texi(,219) * Linearization and discretization:: mini_ker.texi(,220) @end menu mini_ker.texi(,221) mini_ker.texi(,222) @node Cell and Transfer mini_ker.texi(,223) @section Cell and Transfer equations mini_ker.texi(,224) mini_ker.texi(,225) In the @acronym{TEF}, a model is mini_ker.texi(,226) mathematically represented by a set of equations corresponding mini_ker.texi(,227) to two kinds objects: mini_ker.texi(,228) mini_ker.texi(,229) @enumerate mini_ker.texi(,230) @item Cells which are elementary models and correspond to evolution equations mini_ker.texi(,231) such as: mini_ker.texi(,245) mini_ker.texi(,246) @noindent @math{d eta(t)/d t = g(eta(t),phi(t))} mini_ker.texi(,247) mini_ker.texi(,250) mini_ker.texi(,251) Vector @math{\eta} represent the state variables of cells and mini_ker.texi(,252) the vector @math{\varphi} represent the dependent mini_ker.texi(,253) boundary conditions, @i{i.e.} the mini_ker.texi(,254) variables considered as boundary conditions by a cell, but depending upon mini_ker.texi(,255) the complete model state. This dependent boundary conditions are mini_ker.texi(,256) required to make the cells correspond to well-posed problems. mini_ker.texi(,257) @c FIXME acceptable? mini_ker.texi(,258) These variables are often called state variables, and prognostic mini_ker.texi(,259) variables in meteorology. mini_ker.texi(,260) mini_ker.texi(,261) mini_ker.texi(,262) @item Transfers which are determined by constraint equations such as: mini_ker.texi(,278) mini_ker.texi(,279) @noindent @math{phi(t) = f(eta(t),phi(t))} mini_ker.texi(,280) mini_ker.texi(,283) These equations are often called algebraic equations, and in meteorology mini_ker.texi(,284) diagnostic equations. mini_ker.texi(,285) @end enumerate mini_ker.texi(,286) mini_ker.texi(,287) @node Linearization and discretization mini_ker.texi(,288) @section Linearization and discretization in the @acronym{TEF} mini_ker.texi(,289) mini_ker.texi(,290) The relations between sub-systems is excessively difficult to exhibit when mini_ker.texi(,291) having to cope with non-linear system. In the @acronym{TEF}, the mini_ker.texi(,292) @acronym{TLS, Tangent Linear System} is constructed along the trajectory. mini_ker.texi(,293) One considers the system over a small portion along the trajectory, say mini_ker.texi(,294) between @math{t} and @math{t + \delta t}. The variation @math{\delta \eta} mini_ker.texi(,295) of @math{\eta} and @math{\delta \varphi} of @math{\varphi} is obtained mini_ker.texi(,296) through a Pad@'e approximation of the state-transition matrix. The final mini_ker.texi(,297) form of the algebraic system is closed to the classical Crank-Nicolson scheme: mini_ker.texi(,298) mini_ker.texi(,299) @c FIXME PAd'e? od Taylor? mini_ker.texi(,300) @c through a Taylor expansion followed by time integration. mini_ker.texi(,301) @c A time scheme is then applied to the @acronym{TLS} (a Crank-Nicholson scheme), mini_ker.texi(,302) @c to obtain an algebraic system describing the relationships between mini_ker.texi(,303) @c variations of transfers and cells variables: mini_ker.texi(,304) mini_ker.texi(,305) mini_ker.texi(,319) mini_ker.texi(,328) mini_ker.texi(,329) The blocks appearing in the Jacobian matrix are constructed with partial derivative mini_ker.texi(,330) of @math{f} and @math{g}, and with @math{\delta t}. From this system the mini_ker.texi(,331) elimination of @math{\delta \eta} leads to another formulation giving mini_ker.texi(,332) the coupling between transfers, and allows for the @math{\delta \varphi} mini_ker.texi(,333) computation. The @math{\delta \varphi} value is then substitued in mini_ker.texi(,334) @math{\delta \eta} to complete the time-step solving process. mini_ker.texi(,335) mini_ker.texi(Minik,336) @node A model with Miniker mini_ker.texi(Minik,337) @chapter Miniker model programming mini_ker.texi(,338) mini_ker.texi(,339) @cindex sequences mini_ker.texi(,340) mini_ker.texi(Minik,341) Miniker works by combining the model specification code given by mini_ker.texi(,342) the user and other source files provided in the package. The code is mini_ker.texi(,343) assembled, preprocessed, compiled, linked and the resulting program mini_ker.texi(,344) can be run to produce the model trajectory and dynamic analysis. mini_ker.texi(,345) mini_ker.texi(,346) The code provided in the package contains a principal program, some usefull mini_ker.texi(,347) subroutines and pieces of code called @dfn{sequences} combined with the mini_ker.texi(,348) different codes. Among these sequences some hold the code describing the model mini_ker.texi(,349) and are to be written by the user (sequences are similar to mini_ker.texi(,350) Fortran include files). mini_ker.texi(,351) mini_ker.texi(,352) @menu mini_ker.texi(,353) * Structure of the code:: mini_ker.texi(,354) * A model description:: mini_ker.texi(,355) * Setting and running a model:: mini_ker.texi(,356) * Controlling the run:: mini_ker.texi(,357) @end menu mini_ker.texi(,358) mini_ker.texi(,359) @node Structure of the code mini_ker.texi(,360) @section General structure of the code mini_ker.texi(,361) mini_ker.texi(,362) @cindex sequence mini_ker.texi(,363) @cindex zinit, general mini_ker.texi(,364) mini_ker.texi(,365) The sequences used to enter model description hold the @c vector dimensions, mini_ker.texi(,366) mathematical formulae for each cell and transfer component, dedicated mini_ker.texi(,367) derived computations, and time-step mini_ker.texi(,368) steering. During the code generation stage, mini_ker.texi(,369) cmz directives are preprocessed, then the user pseudo-Fortran mini_ker.texi(,370) instructions are translated by @command{mortran} using macros designed to mini_ker.texi(,371) generate in particular all Fortran instructions that compute the Jacobian mini_ker.texi(,372) matrices used in @acronym{TEF} modelling. mini_ker.texi(,373) mini_ker.texi(,374) @c A first users' sequence to program is: @file{dimetaphi} where the model mini_ker.texi(,375) @c dimensions are given, for the two vector-array @code{eta(.)} for cells mini_ker.texi(,376) @c and @code{ff(.)} for transfers (@pxref{Model size,,Entering model size}). mini_ker.texi(,377) mini_ker.texi(,378) The sequence @file{zinit} contains the mathematical formulation of the model mini_ker.texi(,379) (@pxref{Model equation and parameters, Entering model equation and parameters}). mini_ker.texi(,380) Another sequence, @file{zsteer}, is merged at mini_ker.texi(,381) the end of the time step advance of the simulation, where the user can mini_ker.texi(,382) monitor the time step values and printing levels, and perform particular mini_ker.texi(,383) computations etc. mini_ker.texi(,384) (@pxref{End of time step, ,Executing code at the end of each time step}). mini_ker.texi(,385) mini_ker.texi(,386) @node A model description mini_ker.texi(Minik,387) @section Miniker programming illustrated mini_ker.texi(,388) mini_ker.texi(,389) @cindex TEF mini_ker.texi(,390) mini_ker.texi(,391) The general @acronym{TEF} system writes: mini_ker.texi(,408) mini_ker.texi(,409) @noindent @math{d eta(t)/d t = g(eta(t),phi(t))@* mini_ker.texi(,410) phi(t) = f(eta(t),phi(t))} mini_ker.texi(,411) mini_ker.texi(,414) mini_ker.texi(Minik,415) To illustrate the model description in Miniker a simple predator-prey mini_ker.texi(,416) model of Lotka-Volterra is used. mini_ker.texi(,417) This model can be written in the following @acronym{TEF} form: mini_ker.texi(,418) mini_ker.texi(,444) @noindent @math{d eta_prey(t)/d t = a * eta_prey - a * phi_meet@* mini_ker.texi(,445) d eta_pred(t)/d t = -c * eta_pred +c * phi_meet} mini_ker.texi(,446) mini_ker.texi(,447) @noindent @math{phi_meet = eta_prey * eta_pred} mini_ker.texi(,450) mini_ker.texi(,451) with two cell equations, @i{i.e}. state evolution of the prey and predator mini_ker.texi(,452) groups, and one transfer accounting for the meeting of individuals of mini_ker.texi(,453) different group. mini_ker.texi(,454) mini_ker.texi(,455) @menu mini_ker.texi(,456) * A note about mortran and cmz directives:: mini_ker.texi(,457) * Model equation and parameters:: mini_ker.texi(,458) @end menu mini_ker.texi(,459) mini_ker.texi(,460) @node A note about mortran and cmz directives mini_ker.texi(,461) @subsection All you need to know about mortran and cmz directives mini_ker.texi(,462) mini_ker.texi(,463) @cindex mortran mini_ker.texi(,464) mini_ker.texi(,465) The first stage of code generation consists in cmz directives preprocessing. mini_ker.texi(,466) Cmz directives are used for conditional selection of features, and sequence mini_ker.texi(,467) inclusion. At that point you don't need to know anything about these mini_ker.texi(,468) directives. They are only usefull if you want to take advantage of advanced mini_ker.texi(,469) features mini_ker.texi(,470) (@pxref{Programming with cmz directives}). mini_ker.texi(,471) mini_ker.texi(,472) The code in sequences is written in Mortran and the second stage of code mini_ker.texi(,473) generation consists in mortran macro expansion. The mortran language is mini_ker.texi(,474) described mini_ker.texi(,475) in its own manual, here we only explain the very basics which is all you need mini_ker.texi(Minik,476) to know to use Miniker. Mortran basic instructions are almost Fortran, mini_ker.texi(,477) the differences are the following: mini_ker.texi(,478) mini_ker.texi(,479) @itemize @bullet mini_ker.texi(,480) @item The code is free-form, and each statement should end with a semi-colon mini_ker.texi(,481) @code{;}. mini_ker.texi(,482) @item Comments may be introduced by an exclamation mark @code{!} at the mini_ker.texi(,483) beginning of a line, or appear within double quotes @code{"} in a single line. mini_ker.texi(,484) @item It is possible to use blocs, for @code{do} or @code{if} statement mini_ker.texi(,485) for example, and they are enclosed within brackets @samp{<} and @samp{>}. mini_ker.texi(,486) To be in the safe side, a semi-colon @code{;} should be added after a mini_ker.texi(,487) closng bracket @code{>}. mini_ker.texi(,488) @end itemize mini_ker.texi(,489) mini_ker.texi(,490) The following fictious code is legal mortran: mini_ker.texi(,491) mini_ker.texi(,492) @example mini_ker.texi(,493) real mini_ker.texi(,494) param; mini_ker.texi(,495) param = 3.; ff(1) = ff(3)**eta(1); "a comment" mini_ker.texi(,496) ! a line comment mini_ker.texi(,497) do inode=1,n_node ; mini_ker.texi(,498) @end example mini_ker.texi(,499) mini_ker.texi(,500) Thanks to mortran the model code is very simply specified, as you'll mini_ker.texi(,501) see next. mini_ker.texi(,502) mini_ker.texi(,503) mini_ker.texi(,504) @node Model equation and parameters mini_ker.texi(,505) @subsection Entering model equation and parameters mini_ker.texi(,506) mini_ker.texi(,507) @cindex @file{zinit} mini_ker.texi(,508) @vindex dt mini_ker.texi(,509) @vindex time mini_ker.texi(,510) @vindex nstep mini_ker.texi(,511) @vindex modzprint mini_ker.texi(,512) mini_ker.texi(Minik,513) The model equation and parameters and some Miniker parameters are entered in mini_ker.texi(,514) the @file{zinit} sequence. The whole layout of the model is given mini_ker.texi(,515) before detailing the keywords. mini_ker.texi(,516) mini_ker.texi(,517) @example mini_ker.texi(,518) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,519) ! Parameters mini_ker.texi(,520) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,521) real apar,bpar; "optional Fortran type declaration" mini_ker.texi(,522) mini_ker.texi(,523) ! required parameters mini_ker.texi(,524) dt=.01; "initial time-step" mini_ker.texi(,525) nstep=10 000; "number of iterations along the trajectory" mini_ker.texi(,526) time=0.; "time initialisation " mini_ker.texi(,527) mini_ker.texi(,528) ! model parameters mini_ker.texi(,529) apar = 1.5; mini_ker.texi(,530) cpar = 0.7; mini_ker.texi(,531) mini_ker.texi(,532) ! misceallaneous parameters mini_ker.texi(,533) modzprint = 1000; "printouts frequency" mini_ker.texi(,534) mini_ker.texi(,535) print*,'***************************************'; mini_ker.texi(,536) print*,'Lotka-Volterra model with parameters as:'; mini_ker.texi(,537) z_pr: apar,bpar; mini_ker.texi(,538) print*,'***************************************'; mini_ker.texi(,539) mini_ker.texi(,540) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,541) ! Transfer definition mini_ker.texi(,542) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,543) ! rencontre (meeting) mini_ker.texi(,544) set_Phi mini_ker.texi(,545) < var: ff_interact, fun: f_interact = eta_prey*eta_pred; mini_ker.texi(,546) >; mini_ker.texi(,547) mini_ker.texi(,548) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,549) ! Cell definition mini_ker.texi(,550) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,551) mini_ker.texi(,552) set_eta mini_ker.texi(,553) < var: eta_prey, fun: deta_prey = apar*eta_prey - apar*ff_interact; mini_ker.texi(,554) var: eta_pred, fun: deta_pred = - cpar*eta_pred + cpar*ff_interact; mini_ker.texi(,555) >; mini_ker.texi(,556) mini_ker.texi(,557) mini_ker.texi(,558) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,559) ! Initial states mini_ker.texi(,560) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,561) eta_prey = 1.; mini_ker.texi(,562) eta_pred = 1.; mini_ker.texi(,563) ; mini_ker.texi(,564) OPEN(50,FILE='title.tex',STATUS='UNKNOWN'); "title file" mini_ker.texi(,565) write(50,5000) apar,cpar; mini_ker.texi(,566) 5000;format('Lotka-Volterra par:',2F4.1); mini_ker.texi(,567) @end example mini_ker.texi(,568) mini_ker.texi(,569) @subsubheading Variables and model parameters mini_ker.texi(,570) mini_ker.texi(,571) The following variables are mandatory: mini_ker.texi(,572) mini_ker.texi(,573) @table @code mini_ker.texi(,574) @item dt mini_ker.texi(,575) The time step. mini_ker.texi(,576) @item time mini_ker.texi(,577) Model time initialisation. mini_ker.texi(,578) @item nstep mini_ker.texi(,579) Number of iterations along the trajectory. mini_ker.texi(,580) @end table mini_ker.texi(,581) mini_ker.texi(,582) There are no other mandatory variables. Some optional variables are used mini_ker.texi(,583) to monitor the printout and ouput of results of the code. mini_ker.texi(,584) As an example, the variable @code{modzprint} is used to set mini_ker.texi(,585) the frequency of the printout of the model matrix and vectors during the mini_ker.texi(,586) run (@pxref{Controlling the printout and data output}). mini_ker.texi(,587) mini_ker.texi(,588) User's defined variable and Fortran or Mortran instructions can always be mini_ker.texi(,589) added for intermediate calculus. To avoid conflict with the variables of the mini_ker.texi(Minik,590) Miniker code, the rule is that a users symbol must not have characters mini_ker.texi(,591) @samp{o} mini_ker.texi(,592) in the first two symbol characters. mini_ker.texi(,593) mini_ker.texi(,594) In the predator-prey example there are two model parameters. The fortran mini_ker.texi(,595) variables are called here @code{apar} for @math{a} and @code{cpar} for @math{c}. mini_ker.texi(,596) If a Fortan type definition is needed, it should be set at the very beginning mini_ker.texi(,597) of @file{zinit}. The predator-prey code variable initializations finally reads mini_ker.texi(,598) mini_ker.texi(,599) @example mini_ker.texi(,600) @group mini_ker.texi(,601) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,602) ! Parameters mini_ker.texi(,603) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,604) real apar,bpar; "optional Fortran type declaration" mini_ker.texi(,605) mini_ker.texi(,606) dt=.01; mini_ker.texi(,607) nstep=10 000; mini_ker.texi(,608) time=0.; mini_ker.texi(,609) mini_ker.texi(,610) ! model parameters mini_ker.texi(,611) apar = 1.5; mini_ker.texi(,612) cpar = 0.7; mini_ker.texi(,613) mini_ker.texi(,614) modzprint = 1000; mini_ker.texi(,615) @end group mini_ker.texi(,616) @end example mini_ker.texi(,617) mini_ker.texi(,618) @subsubheading Model equations mini_ker.texi(,619) @anchor{Model equations} mini_ker.texi(,620) mini_ker.texi(,621) @findex set_Phi mini_ker.texi(,622) @findex set_eta mini_ker.texi(,623) @vindex var: mini_ker.texi(,624) @vindex fun: mini_ker.texi(,625) @vindex eqn: mini_ker.texi(,626) mini_ker.texi(,627) The model equations for cells and model equations for transferts are mini_ker.texi(,628) entered in two mortran blocks, one for the transferts, the other for the mini_ker.texi(,629) cell components. The model equations for cells are entered into a mini_ker.texi(,630) @code{set_eta} block, and the transfer equations are entered into a mini_ker.texi(,631) @code{set_phi} block. mini_ker.texi(,632) mini_ker.texi(,633) In each block the couples variable-function are specified. For mini_ker.texi(,634) transfers the function defines the transfer itself while for cells mini_ker.texi(,635) the function describes the cell evolution. The variable is specified mini_ker.texi(,636) with @code{var:}, the function is defined with @code{fun:}. mini_ker.texi(,637) mini_ker.texi(,638) In the case of the predator-prey model, the transfer variable mini_ker.texi(,639) associated with @math{\varphi_{meet}} could be called @code{ff_interact} mini_ker.texi(,640) and the transfer definition would be given by: mini_ker.texi(,641) @example mini_ker.texi(,642) set_Phi mini_ker.texi(,643) < var: ff_interact, fun: f_interact = eta_prey*eta_pred; mini_ker.texi(,644) >; mini_ker.texi(,645) @end example mini_ker.texi(,646) mini_ker.texi(,647) The two cell equations of the predator-prey model, with name mini_ker.texi(,648) @code{eta_prey} for the prey (@math{\eta_{prey}}) and @code{eta_pred} mini_ker.texi(,649) for the predator (@math{\eta_{pred}}) are: mini_ker.texi(,650) mini_ker.texi(,651) @example mini_ker.texi(,652) set_eta mini_ker.texi(,653) < var: eta_prey, fun: deta_prey = apar*eta_prey - apar*ff_interact; mini_ker.texi(,654) var: eta_pred, fun: deta_pred = - cpar*eta_pred + cpar*ff_interact; mini_ker.texi(,655) >; mini_ker.texi(,656) @end example mini_ker.texi(,657) mini_ker.texi(,658) The @samp{;} at the end of the mortran block is important. mini_ker.texi(,659) mini_ker.texi(,660) @page mini_ker.texi(,661) The whole model equations are setup with: mini_ker.texi(,662) mini_ker.texi(,663) @example mini_ker.texi(,664) @group mini_ker.texi(,665) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,666) ! Transfer definition mini_ker.texi(,667) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,668) ! rencontre (meeting) mini_ker.texi(,669) set_Phi mini_ker.texi(,670) < var: ff_interact, fun: f_interact = eta_prey*eta_pred; mini_ker.texi(,671) >; mini_ker.texi(,672) mini_ker.texi(,673) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,674) ! Cell definition mini_ker.texi(,675) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,676) mini_ker.texi(,677) set_eta mini_ker.texi(,678) < var: eta_prey, fun: deta_prey = apar*eta_prey - apar*ff_interact; mini_ker.texi(,679) var: eta_pred, fun: deta_pred = - cpar*eta_pred + cpar*ff_interact; mini_ker.texi(,680) >; mini_ker.texi(,681) @end group mini_ker.texi(,682) @end example mini_ker.texi(,683) mini_ker.texi(,684) Whenever the user is not concerned with giving a specific name to a mini_ker.texi(,685) function, it is possible to specify the equation only with mini_ker.texi(,686) @code{eqn:}. Therefore the user may replace an instruction as: mini_ker.texi(,687) @example mini_ker.texi(,688) var: ff_dump, mini_ker.texi(,689) fun: f_dump = - rd*(eta_speed - eta_speed_limiting); mini_ker.texi(,690) @end example mini_ker.texi(,691) with: mini_ker.texi(,692) @example mini_ker.texi(,693) eqn: ff_dump = - rd*(eta_speed - eta_speed_limiting); mini_ker.texi(,694) @end example mini_ker.texi(,695) mini_ker.texi(,696) In that case, the unnamed function will take the name of the defined mini_ker.texi(,697) variable preceded by the @samp{$} sign: @code{$ff_dump}. mini_ker.texi(,698) mini_ker.texi(,699) @subsubheading Starting points mini_ker.texi(,700) mini_ker.texi(,701) @cindex starting point mini_ker.texi(,702) mini_ker.texi(,703) The cells equations require state initial conditions. In some case, the mini_ker.texi(,704) transfers may also need starting points although they are determined from mini_ker.texi(,705) the cell values. mini_ker.texi(,706) mini_ker.texi(,707) In the predator-prey model the starting points for cells are: mini_ker.texi(,708) @example mini_ker.texi(,709) ! initial state mini_ker.texi(,710) ! ------------- mini_ker.texi(,711) eta_prey = 1.; mini_ker.texi(,712) eta_pred = 1.; mini_ker.texi(,713) @end example mini_ker.texi(,714) mini_ker.texi(,715) When there is a non trivial implicit relationship between the transfers mini_ker.texi(,716) in the model, it may be usefull or even necessary to set some mini_ker.texi(,717) transfers to non-zero values. This difficulty is only relevant for the very mini_ker.texi(,718) first step of the simulation and will be used as a mini_ker.texi(,719) first guess of @math{\varphi}. The uninitialized transfers having mini_ker.texi(,720) a default compiler-dependant (often zero) value, an initialization mini_ker.texi(,721) to another value may help avoiding singular functions or matrix and mini_ker.texi(,722) ensure convergence in the Newton algorithm used to solve the transfer implicit mini_ker.texi(,723) equation. mini_ker.texi(,724) mini_ker.texi(,753) mini_ker.texi(,754) @subsubheading The cell and transfer arrays mini_ker.texi(,755) mini_ker.texi(,756) @vindex eta(.) mini_ker.texi(,757) @vindex ff(.) mini_ker.texi(,758) @vindex mp mini_ker.texi(,759) @vindex np mini_ker.texi(,760) mini_ker.texi(,761) Sometime it is easier to iterate over an array than to use the mini_ker.texi(,762) cell or transfer variable name. This is possible because there is a mini_ker.texi(,763) correspondence between the variable names mini_ker.texi(,764) and the fortran array @code{eta(.)} for the cell variables and mini_ker.texi(,765) the fortran array @code{ff(.)} for the transfer variables@footnote{In fact mini_ker.texi(,766) the variables names are transformed into fortran array elements mini_ker.texi(,767) by mortran generated macros, so the symbolic names defined in the mini_ker.texi(,768) mortran blocks never appears in the generated fortran code, they are mini_ker.texi(,769) replaced by the fortran arrays.}. mini_ker.texi(,770) mini_ker.texi(,771) The index of the variable is determined by the order of appearance in mini_ker.texi(,772) the variable definition blocks. It is reminded in the output, as mini_ker.texi(,773) explained later (@pxref{Simulation and output}). mini_ker.texi(,774) mini_ker.texi(,775) The number of cells is in the integer @code{np} variable, and the mini_ker.texi(,776) number of transfer is in the integer @code{mp} variable. mini_ker.texi(,777) mini_ker.texi(,778) @subsubheading title file mini_ker.texi(,779) mini_ker.texi(,780) @anchor{Title file} mini_ker.texi(,781) @cindex title file mini_ker.texi(,782) @cindex @file{title.tex} mini_ker.texi(,783) mini_ker.texi(,784) For some graphics generation, a file with name @file{title.tex} is required mini_ker.texi(,785) which sets the title. The following instructions take care of that: mini_ker.texi(,786) mini_ker.texi(,787) @example mini_ker.texi(,788) OPEN(50,FILE='title.tex',STATUS='UNKNOWN'); mini_ker.texi(,789) write(50,5000) apar,cpar; mini_ker.texi(,790) 5000;format('Lotka-Volterra par:',2F4.1); mini_ker.texi(,791) mini_ker.texi(,792) close(50); mini_ker.texi(,793) @end example mini_ker.texi(,794) mini_ker.texi(,795) In that case the parameter values are written down, to differenciate between mini_ker.texi(,796) different runs. This step is in general not needed. mini_ker.texi(,797) mini_ker.texi(,798) @c The correspondence with basic components are printed out at execution mini_ker.texi(,799) @c time as explained in @ref{Simulation and output,, mini_ker.texi(,800) @c Running a simulation and using the output}. Also, a @file{Model.hlp} is mini_ker.texi(,801) @c generated that recalls the basic names and equations of the model. mini_ker.texi(,802) @c It may be noted that whenever mini_ker.texi(,803) @c the order of variable-functions is the same between indexed declaration and mini_ker.texi(,804) @c symbolic, the two generated Fortran code are almost identical. mini_ker.texi(,805) mini_ker.texi(,806) @node Setting and running a model mini_ker.texi(,807) @section Setting and running a model mini_ker.texi(,808) mini_ker.texi(,809) In this section it is assumed that a programming environment has been mini_ker.texi(,810) properly setup. This environment may use either cmz or make to drive mini_ker.texi(,811) the preprocessing and compilation. mini_ker.texi(,812) You can skip the part related with the environment you don't intend to use. mini_ker.texi(,813) mini_ker.texi(,814) For instructions regarding the mini_ker.texi(,815) installation, see @ref{Installation}. mini_ker.texi(,816) mini_ker.texi(,817) mini_ker.texi(,818) @menu mini_ker.texi(,819) * Setting up a model with cmz:: mini_ker.texi(,820) * Setting up a model with make:: mini_ker.texi(,821) * Simulation and output:: mini_ker.texi(,822) * Graphics:: mini_ker.texi(,823) @end menu mini_ker.texi(,824) mini_ker.texi(,825) @node Setting up a model with cmz mini_ker.texi(,826) @subsection Setup a model and compile with cmz mini_ker.texi(,827) mini_ker.texi(,828) @cindex @command{mod} mini_ker.texi(,829) @cindex @file{$zinit} mini_ker.texi(,830) @cindex @file{$dimetaphi} mini_ker.texi(,831) mini_ker.texi(,832) The user defined sequences are @samp{KEEP} in the mini_ker.texi(,833) cmz world. The most common organization is to have a cmz file in a mini_ker.texi(,834) subdirectory of the directory containing the @file{mini_ker.cmz} mini_ker.texi(,835) cmz file. In this mini_ker.texi(,836) cmz file there should be a @samp{PATCH} called @samp{zinproc} mini_ker.texi(,837) with the KEEPs within the patch. The KEEP must be called @file{$zinit}. mini_ker.texi(,838) @c and @file{$dimetaphi}. mini_ker.texi(,839) mini_ker.texi(,840) From within cmz in the directory of your model the source extraction, mini_ker.texi(,841) compilation and linking will be triggered by a @command{mod} command. This macro mini_ker.texi(,842) uses the @file{selseq.kumac} information to find the @file{mini_ker.cmz} mini_ker.texi(,843) cmz file. mini_ker.texi(,844) @command{mod} mini_ker.texi(,845) shall create a directory with the same name than the cmz file, mini_ker.texi(,846) @file{mymodel/} in our example. In this directory there is another mini_ker.texi(,847) directory @file{cfs/} containing the sources extracted from the cmz file. mini_ker.texi(,848) mini_ker.texi(,849) The file @file{mymodel_o.tmp} contains all the mortran code generated mini_ker.texi(,850) by cmz with the sequences substituted, including the @file{$zinit}. @c and mini_ker.texi(,851) @c @file{$dimetaphi} sequences (assembled code). mini_ker.texi(,852) The fortran produced by the preprocessing and mini_ker.texi(,853) splitting of this file is in files with the traditional @samp{.f} suffix. mini_ker.texi(,854) The principal program is in @file{principal.f}. An efficient way of getting mini_ker.texi(,855) familiar with mini_ker methods is looking at the @file{mymodel_o.tmp} where mini_ker.texi(,856) all sequences and main Mortran instructions are gathered. Symbolic derivation mini_ker.texi(,857) @c FIXME pas ici la symbolic derivation mini_ker.texi(,858) is noted as @code{F_D(expression)(/variable)}, and the resulting Fortran code mini_ker.texi(,859) is in @file{principal.f}. mini_ker.texi(,860) mini_ker.texi(,861) @command{mod} also triggers compilation and linking. The object files are in mini_ker.texi(,862) the same @file{cfs/} directory and the executable is in the @file{mymodel/} mini_ker.texi(,863) directory, with name @file{mymodel.exe}. mini_ker.texi(,864) mini_ker.texi(,865) @node Setting up a model with make mini_ker.texi(,866) @subsection Setup a model and compile with make mini_ker.texi(,867) mini_ker.texi(,868) @cindex compilation mini_ker.texi(,869) @c @cindex @file{dimetaphi.mti} mini_ker.texi(,870) @cindex @file{zinit.mti} mini_ker.texi(,871) @vindex model_file_name mini_ker.texi(,872) mini_ker.texi(,873) With make, the sequences are files ending with @samp{.mti} (for mini_ker.texi(,874) mortran include files), mini_ker.texi(,875) called, for example, @file{zinit.mti}. mini_ker.texi(,876) @c and @file{dimetaphi.mti}. mini_ker.texi(,877) They are included by mini_ker.texi(,878) @command{mortran} in other source files. You also need a @file{Makefile} mini_ker.texi(,879) to drive the compilation of the model. mini_ker.texi(,880) mini_ker.texi(,881) If you don't need additional code or libraries to be linked with your mini_ker.texi(,882) model you have two alternatives. mini_ker.texi(,883) mini_ker.texi(,884) @enumerate mini_ker.texi(,885) @item mini_ker.texi(,886) The simplest alternative is to run mini_ker.texi(,887) the @command{start_miniker} script with the model file name as argument. mini_ker.texi(,888) It should copy a @file{zinit.mti} file mini_ker.texi(,889) ready to be edited and a Makefile ready to compile the model. For mini_ker.texi(,890) the predator prey model, for example, you could run mini_ker.texi(,891) mini_ker.texi(,892) @example mini_ker.texi(,893) $ start_miniker predator mini_ker.texi(,894) @end example mini_ker.texi(,895) mini_ker.texi(,896) @item mini_ker.texi(,897) Otherwise you can copy the Makefile from @file{template/Makefile} mini_ker.texi(,898) in the directory containing the sequences. You should then change the compiled mini_ker.texi(,899) model file name, by changing the value of the mini_ker.texi(,900) @code{model_file_name} variable to the name of your choice mini_ker.texi(,901) in the Makefile. It is set to @file{mymodel} in the template. For the mini_ker.texi(,902) predator-prey model, it could be set like mini_ker.texi(,903) mini_ker.texi(,904) @example mini_ker.texi(,905) model_file_name = predator mini_ker.texi(,906) @end example mini_ker.texi(,907) mini_ker.texi(,908) If you want the executable model file to be built in another directory, you could mini_ker.texi(,909) set mini_ker.texi(,910) mini_ker.texi(,911) @example mini_ker.texi(,912) model_file_name = some_dir/predator mini_ker.texi(,913) @end example mini_ker.texi(,914) mini_ker.texi(,915) The other items set in the default Makefile should be right. mini_ker.texi(,916) @end enumerate mini_ker.texi(,917) mini_ker.texi(,918) The preprocessing and the compilation are launched with mini_ker.texi(,919) mini_ker.texi(,920) @example mini_ker.texi(,921) make all mini_ker.texi(,922) @end example mini_ker.texi(,923) mini_ker.texi(,924) The mortran files are generated by the cmz directive preprocessor mini_ker.texi(,925) from files found in the package source directories. The mortran files mini_ker.texi(,926) end with @samp{.mtn} for the main files and @samp{.mti} for mini_ker.texi(,927) include files. They are output in the current directory. mini_ker.texi(,928) The mortran preprocessor then preprocess these mortran files and includes mini_ker.texi(,929) the sequences. The resulting fortran code is also in the current directory, mini_ker.texi(,930) in files with a @samp{.f} suffix. mini_ker.texi(,931) Some fortran files ending with @samp{.F} may also be mini_ker.texi(,932) created by the cmz directive preprocessor. mini_ker.texi(,933) The object files resulting from the compilation of all the mini_ker.texi(,934) fortran files (generated from mortran or directly from fortran files) are mini_ker.texi(,935) there too. mini_ker.texi(,936) mini_ker.texi(,937) In case you want to override the default sequences or a subroutine file mini_ker.texi(,938) you just have to create it in your working directory along with the mini_ker.texi(,939) @file{zinit.mti}. @c and @file{dimetaphi.mti}. mini_ker.texi(,940) For example you could want to mini_ker.texi(,941) create or modify a @file{zsteer.mti} file (@pxref{End of time step,, mini_ker.texi(,942) Executing code at the end of each time step}), a @file{zcmd_law.mti} file mini_ker.texi(,943) (@pxref{Control laws}), a @file{monitor.f} file mini_ker.texi(,944) (@pxref{Turning the model into a subroutine}) to take advantage of mini_ker.texi(,945) features presented later in this manual. mini_ker.texi(,946) mini_ker.texi(Minik,947) More in-depth discussion of using make to run Miniker is covered in mini_ker.texi(Minik,948) @ref{Advanced use of Miniker with make}. mini_ker.texi(,949) For example it is also possible to create files that are to be mini_ker.texi(,950) preprocessed by the cmz directive mini_ker.texi(,951) preprocessor and separate source files and generated files. mini_ker.texi(,952) This advanced use is more precisely covered in mini_ker.texi(,953) @ref{Programming with cmz directives}. mini_ker.texi(,954) mini_ker.texi(,955) @page mini_ker.texi(,956) @node Simulation and output mini_ker.texi(,957) @subsection Running a simulation and using the output mini_ker.texi(,958) mini_ker.texi(,959) @cindex running model mini_ker.texi(,960) mini_ker.texi(,961) Once compiled the model is ready to run, it only has to be executed. On mini_ker.texi(,962) standard output informations about the states, transfers, tangent linear mini_ker.texi(,963) system and other jacobian matrices are printed. mini_ker.texi(,964) For example the predator-prey model could be executed with: mini_ker.texi(,965) mini_ker.texi(,966) @example mini_ker.texi(,967) ./predator > result.lis mini_ker.texi(,968) @end example mini_ker.texi(,969) mini_ker.texi(,970) @cindex output file mini_ker.texi(,971) @vindex dEta(.) mini_ker.texi(,972) @cindex @file{res.data} mini_ker.texi(,973) @cindex @file{dres.data} mini_ker.texi(,974) @cindex @file{tr.data} mini_ker.texi(,975) @cindex @file{aspha.data} mini_ker.texi(,976) @cindex @file{Model.hlp} mini_ker.texi(,977) mini_ker.texi(,978) @c In case of a model entered symbolically mini_ker.texi(,979) @c (@pxref{Symbolic model description}) mini_ker.texi(,980) The correspondance mini_ker.texi(,981) between the symbolic variables and the basic vectors and functions mini_ker.texi(,982) are printed at run time: mini_ker.texi(,983) mini_ker.texi(,984) @example mini_ker.texi(,985) ---------------- Informing on Phi definition ----------------- mini_ker.texi(,986) Var-name, Function-name, index in ff vector mini_ker.texi(,987) ff_interact f_interact 1 mini_ker.texi(,988) ---------------------------------------------------- mini_ker.texi(,989) mini_ker.texi(,990) --------------- Informing on Eta definition ------------------ mini_ker.texi(,991) Var-name, Function-name, index in eta vector mini_ker.texi(,992) eta_prey deta_prey 1 mini_ker.texi(,993) eta_pred deta_pred 2 mini_ker.texi(,994) @end example mini_ker.texi(,995) mini_ker.texi(,996) A summary of the model equations are in @file{Model.hlp} file. For mini_ker.texi(,997) the same example: mini_ker.texi(,998) mini_ker.texi(,999) @example mini_ker.texi(,1000) ======================= set_Phi mini_ker.texi(,1001) mini_ker.texi(,1002) 1 ff_interact f_interact eta_pray*eta_pred mini_ker.texi(,1003) ======================= set_Eta mini_ker.texi(,1004) mini_ker.texi(,1005) 1 eta_pray deta_pray apar*eta_pray-apar*ff_interact mini_ker.texi(,1006) 2 eta_pred deta_pred -cpar*eta_pred+cpar*ff_interact mini_ker.texi(,1007) @end example mini_ker.texi(,1008) @c FIXME never talked about that. Certainly not here mini_ker.texi(,1009) when other general functions are specified with @code{f_set}, it can appear mini_ker.texi(,1010) also in the same help file when replaced by @code{fun_set}. mini_ker.texi(,1011) mini_ker.texi(,1012) As far as possible, all data printed in the listing are associated mini_ker.texi(,1013) with a name related to a variable. Here is an extract: mini_ker.texi(,1014) mini_ker.texi(,1015) @example mini_ker.texi(,1016) Gamma :-8.19100E-02-1.42151E-01 3.87150E-02 mini_ker.texi(,1017) eta_courant eta_T_czcx eta_T_sz mini_ker.texi(,1018) ------------------------------------------------ mini_ker.texi(,1019) Omega : 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 mini_ker.texi(,1020) courant_L T_czcx Psi_Tczc Psi_Tsz mini_ker.texi(,1021) ------------------------------------------------ mini_ker.texi(,1022) @end example mini_ker.texi(,1023) for the two known vectors of the system, and: mini_ker.texi(,1024) @example mini_ker.texi(,1025) >ker : Matrice de couplage 4 4 4 4 mini_ker.texi(,1026) courant_L Raw(1,j=1,4): 1.000 -9.9010E-03 0.000 0.000 mini_ker.texi(,1027) T_czcx Raw(2,j=1,4): -2.7972E-02 1.000 0.000 9.9900E-04 mini_ker.texi(,1028) Psi_Tczcx Raw(3,j=1,4): 0.1605 9.7359E-02 1.000 -5.7321E-03 mini_ker.texi(,1029) Psi_Tsz Raw(4,j=1,4): 0.000 -0.1376 5.7225E-03 1.000 mini_ker.texi(,1030) Var-Name courant_L T_czcx Psi_Tczc Psi_Tsz mini_ker.texi(,1031) ---------------------------------------------------------- mini_ker.texi(,1032) @end example mini_ker.texi(,1033) mini_ker.texi(,1034) where the @code{couplage} (coupling matrix) is given that corresponds mini_ker.texi(,1035) to the matrix coupling the four transfer components after @math{\delta\eta} mini_ker.texi(,1036) has been eliminated from system. It is computed in the subprogram mini_ker.texi(,1037) @file{oker} (for kernel) which solves the system. mini_ker.texi(,1038) mini_ker.texi(,1039) Basic results are output in a set of @samp{.data} files. mini_ker.texi(,1040) The first line (or two lines) describes the column with a @samp{#} mini_ker.texi(,1041) character used to mark the lines as comments (for @command{gnuplot} mini_ker.texi(,1042) for example). mini_ker.texi(,1043) In the @samp{.data} files, the data are simply separated with spaces. mini_ker.texi(,1044) Each data file has the @code{time} variable values as first column. mini_ker.texi(,1045) @footnote{@file{dres.data} has another time related variable as second column: mini_ker.texi(,1046) @cindex @file{dres.data} mini_ker.texi(,1047) @vindex dt mini_ker.texi(,1048) @code{dt}, the time step that can vary in the course of a simulation.}. mini_ker.texi(,1049) Following columns give the values of @code{eta(.)} in @file{res.data}, mini_ker.texi(,1050) @code{dEta(.)} in @file{dres.data} -- the step by step variation of mini_ker.texi(,1051) @code{eta(.)} -- and @code{ff(.)} in @file{tr.data}. mini_ker.texi(,1052) mini_ker.texi(,1053) Along the simulation the @acronym{TEF} Jacobian matrices are computed. mini_ker.texi(,1054) A transfer variables elimination process also leads to the definition mini_ker.texi(,1055) of the classical state advance matrix of the system mini_ker.texi(,1056) (the corresponding array is @code{aspha(.,.)} in the code). mini_ker.texi(,1057) This matrix is output in the file @file{aspha.data} that is used to mini_ker.texi(,1058) post-run dynamics analyses. The matrix columns are written column wise on each mini_ker.texi(,1059) record. mini_ker.texi(,1060) @xref{Stability of fastest modes,,Stability analysis of fastest modes}. mini_ker.texi(,1061) @xref{Generalized TLS,,Generalized mini_ker.texi(,1062) tangent linear system analysis}. It is not used in the solving process. mini_ker.texi(,1063) mini_ker.texi(,1064) Other @samp{.data} files will be described later. mini_ker.texi(,1065) mini_ker.texi(,1066) @c FIXME already said mini_ker.texi(,1067) @c At the begining of a run, the help file @file{Model.hlp} is generated for mini_ker.texi(,1068) @c global checkiing of the model. In the example, it is: mini_ker.texi(,1069) mini_ker.texi(,1070) @c @example mini_ker.texi(,1071) @c ======================= set_Phi mini_ker.texi(,1072) @c 1 ff_interact f_interact eta_pray*eta_pred mini_ker.texi(,1073) @c ======================= set_Eta mini_ker.texi(,1074) @c 1 eta_pray deta_pray apar*eta_pray-apar*ff_interact mini_ker.texi(,1075) @c 2 eta_pred deta_pred -cpar*eta_pred+cpar*ff_interact mini_ker.texi(,1076) @c @end example mini_ker.texi(,1077) mini_ker.texi(,1078) mini_ker.texi(,1079) @node Graphics mini_ker.texi(,1080) @subsection Doing graphics mini_ker.texi(,1081) mini_ker.texi(,1082) @cindex graphics mini_ker.texi(,1083) @cindex graphics with @command{gnuplot} mini_ker.texi(,1084) @cindex graphics with @command{PAW} mini_ker.texi(,1085) mini_ker.texi(,1086) @c The format of the @samp{.data} files are coherent with GNU graphics, that is mini_ker.texi(,1087) @c the data are simply separated with spaces. mini_ker.texi(,1088) Since the data are simply separated with spaces, and comment lines mini_ker.texi(,1089) begin with @samp{#}, the mini_ker.texi(,1090) files can be vizualised with many programs. mini_ker.texi(,1091) With @command{gnuplot}, for example, to plot @code{eta(@var{n})}, mini_ker.texi(,1092) the @command{gnuplot} statement could be: mini_ker.texi(,1093) mini_ker.texi(,1094) @example mini_ker.texi(,1095) plot "res.data" using 1:(@var{n}+1) mini_ker.texi(,1096) @end example mini_ker.texi(,1097) mini_ker.texi(,1098) The similar one for @code{ff(@var{n})}: mini_ker.texi(,1099) @example mini_ker.texi(,1100) plot "tr.data" using 1:(@var{n}+1) mini_ker.texi(,1101) @end example mini_ker.texi(,1102) mini_ker.texi(,1103) For people using @command{PAW}, the CERN graphical computer code, mini_ker.texi(Minik,1104) Miniker prepares mini_ker.texi(,1105) kumacs that allow to read process the @samp{.data} files in the form of mini_ker.texi(,1106) @emph{n-tuples} (see the @cite{PAW manual} for more information). mini_ker.texi(,1107) In that cas, the flag @code{sel paw} has to be gievn in the @file{selsequ.kumac}. mini_ker.texi(,1108) The generated n-tuples are ready to use only mini_ker.texi(,1109) for vector dimension of at most 10 (including the variable @code{time}). mini_ker.texi(,1110) These kumacs are overwritten each time the model is run. Usaually, gnuplot has mini_ker.texi(,1111) to be preferred, but when using surfaces and histograms, PAW is better. mini_ker.texi(,1112) The @file{gains.f} (and @file{go.xqt} is provided as an example in the mini_ker.texi(Minik,1113) Miniker files. mini_ker.texi(,1114) mini_ker.texi(,1115) @node Controlling the run mini_ker.texi(,1116) @section Controlling the run mini_ker.texi(,1117) mini_ker.texi(,1118) @cindex controlling the run mini_ker.texi(,1119) mini_ker.texi(,1120) It is possible to add code that will be executed at the end of each time mini_ker.texi(,1121) step. It is also possible to specify which time step leads to a printout on mini_ker.texi(,1122) standard output. For maximal control, the code running te model may be mini_ker.texi(,1123) turned into a subroutine to be called from another fortran (or C) mini_ker.texi(,1124) program, this possibility is covered in @ref{Calling the model code}. mini_ker.texi(,1125) mini_ker.texi(,1126) @menu mini_ker.texi(,1127) * End of time step:: mini_ker.texi(,1128) * Controlling the printout and data output:: mini_ker.texi(,1129) @end menu mini_ker.texi(,1130) mini_ker.texi(,1131) @node End of time step mini_ker.texi(,1132) @subsection Executing code at the end of each time step mini_ker.texi(,1133) mini_ker.texi(,1134) @cindex @file{zsteer} mini_ker.texi(,1135) @cindex @file{zsteer.inc} mini_ker.texi(,1136) mini_ker.texi(,1137) The code in the sequence @file{zsteer} is executed at the end of each time mini_ker.texi(,1138) step. It is possible to change the time step length (variable @code{dt}) mini_ker.texi(,1139) verify that the non linearity are not too big, or perform mini_ker.texi(,1140) discontinuous modifications of the states. One available variable @code{res} mini_ker.texi(,1141) might be usefull for time step monitoring. At the end of the time step, mini_ker.texi(,1142) as soon as @math{\varphi} has been computed, a numerical test is applied mini_ker.texi(,1143) on a pseudo relative quadratic residual between mini_ker.texi(,1144) @math{\varphi=f(\eta(t-dt)+d\varphi} (@code{ ffl}), where @math{d\varphi} mini_ker.texi(,1145) is given by the system resolution in @code{ker},and mini_ker.texi(,1146) @math{\varphi=f(\eta),\varphi)}, Fortran variable (@code{ff}): mini_ker.texi(,1147) mini_ker.texi(,1148) @verbatim mini_ker.texi(,1149) ! ======================================================== mini_ker.texi(,1150) ! test linearite ffl - ff mini_ker.texi(,1151) ! ======================================================== mini_ker.texi(,1152) if (istep.gt.1) mini_ker.texi(,1153) < res=0.; ; mini_ker.texi(,1154) if (res .gt. TOL_FFL) mini_ker.texi(,1155) < print*,'*** pb linearite : res > TOL_FFL a istep',istep,res,' > ',TOL_FFL; mini_ker.texi(,1156) do io=1,m < z_pr: io,ff(io),ff(io)-ffl(io); >; mini_ker.texi(,1157) >; mini_ker.texi(,1158) >; mini_ker.texi(,1159) @end verbatim mini_ker.texi(,1160) mini_ker.texi(,1161) This test hence applies only for non linearities in tranfer models. Nevertheless, mini_ker.texi(,1162) @code{res} might be usefull to monitor the time step @code{dt} in @code{ZSTEER} mini_ker.texi(,1163) and eventually go backward one step (@code{goto :ReDoStep:}). mini_ker.texi(,1164) This can more appropriatly be coded in the (empty in default case) mini_ker.texi(,1165) sequence @code{zstep}, inserted just before time-advancing mini_ker.texi(,1166) states and @code{time} variables in @file{principal}. mini_ker.texi(,1167) @vindex ffl(.) mini_ker.texi(,1168) @cindex @code{ffl} (linearity test) mini_ker.texi(,1169) @cindex linearity test mini_ker.texi(,1170) mini_ker.texi(,1171) It is also possible to fix the value of the criterium @code{TOL_FFL} in mini_ker.texi(,1172) @file{zinit} different from its default value of @math{10^{-3}} -- mini_ker.texi(,1173) independent of the Fortran precision. mini_ker.texi(,1174) mini_ker.texi(,1175) mini_ker.texi(,1176) Many other variables are available, including mini_ker.texi(,1177) @vtable @code mini_ker.texi(,1178) @item istep mini_ker.texi(,1179) The step number; mini_ker.texi(,1180) @item couplage(.) mini_ker.texi(,1181) The @acronym{TEF} coupling matrix between transfers; mini_ker.texi(,1182) @item H mini_ker.texi(,1183) The Jacobian matrix corresponding with: mini_ker.texi(,1184) @c \varphi(t) &= f(\eta(t),\varphi(t))\cr mini_ker.texi(,1185) @c \frac{\partial g(\eta(t),\varphi(t))}{\partial \eta(t)} mini_ker.texi(,1191) g_1(eta,phi); mini_ker.texi(,1193) @item Bb mini_ker.texi(,1194) The Jacobian matrix corresponding with: mini_ker.texi(,1200) g_2(eta,phi); mini_ker.texi(,1202) @item Bt mini_ker.texi(,1203) The Jacobian matrix corresponding with: mini_ker.texi(,1209) f_1(eta,phi); mini_ker.texi(,1211) @item D mini_ker.texi(,1212) The Jacobian matrix corresponding with: mini_ker.texi(,1218) f_2(eta,phi); mini_ker.texi(,1220) mini_ker.texi(,1221) @item aspha mini_ker.texi(,1222) The state advance matrix; mini_ker.texi(,1223) @item dneta mini_ker.texi(,1224) @itemx dphi mini_ker.texi(,1225) the variable increments; mini_ker.texi(,1226) @end vtable mini_ker.texi(,1227) One should be aware of that the linearity test concerns the preceding step. mini_ker.texi(,1228) We have yet no example of managing the time-step. mini_ker.texi(,1229) mini_ker.texi(,1230) @page mini_ker.texi(,1231) @node Controlling the printout and data output mini_ker.texi(,1232) @subsection Controlling the printout and data output mini_ker.texi(,1233) mini_ker.texi(,1234) @cindex printing mini_ker.texi(,1235) @vindex zprint mini_ker.texi(,1236) @vindex modzprint mini_ker.texi(,1237) mini_ker.texi(,1238) The printout on standard output is performed if the variable @code{zprint} mini_ker.texi(,1239) of type @code{logical} is true. Therefore it is possible to control this mini_ker.texi(,1240) printout by setting @code{zprint} false or true. For example the following mini_ker.texi(,1241) code, in sequence @file{zsteer}, triggers printing for every mini_ker.texi(,1242) @code{modzprint} time step and the two following time steps: mini_ker.texi(,1243) mini_ker.texi(,1244) @example mini_ker.texi(,1245) ZPRINT = mod(istep+1,modzprint).eq.0; mini_ker.texi(,1246) Zprint = zprint .or. mod(istep+1,modzprint).eq.1; mini_ker.texi(,1247) Zprint = zprint .or. mod(istep+1,modzprint).eq.2; mini_ker.texi(,1248) @end example mini_ker.texi(,1249) mini_ker.texi(,1250) The data output to @file{.data} files described in @ref{Simulation and output,, mini_ker.texi(,1251) Running a simulation and using the output} is performed if the mini_ker.texi(,1252) @code{logical} variable @code{zout} is true. For example the following mini_ker.texi(,1253) code, in @file{zsteer}, triggers output to @file{.data} files every mini_ker.texi(,1254) @code{modzout} step. mini_ker.texi(,1255) mini_ker.texi(,1256) @example mini_ker.texi(,1257) Zout = mod(istep,modzout).eq.0; mini_ker.texi(,1258) @end example mini_ker.texi(,1259) mini_ker.texi(,1260) @node Advanced programming mini_ker.texi(Minik,1261) @chapter Advanced Miniker programming mini_ker.texi(,1262) mini_ker.texi(,1263) @menu mini_ker.texi(,1264) * Selecting features:: mini_ker.texi(,1265) * Calling the model code:: mini_ker.texi(,1266) * 1D gridded model:: mini_ker.texi(,1267) * Double precision:: mini_ker.texi(,1268) * Partial Derivatives:: mini_ker.texi(,1269) * Rule of programming non continuous models:: mini_ker.texi(,1270) * Parameters:: mini_ker.texi(,1271) * Observations and data:: mini_ker.texi(,1272) * Explicit model size:: mini_ker.texi(,1273) * Programming with cmz directives:: mini_ker.texi(,1274) @end menu mini_ker.texi(,1275) mini_ker.texi(,1276) @node Selecting features mini_ker.texi(,1277) @section Overview of additional features setting mini_ker.texi(,1278) mini_ker.texi(,1279) @cindex feature setting mini_ker.texi(,1280) @cindex select flag mini_ker.texi(,1281) @cindex logical flags mini_ker.texi(,1282) @cindex @file{selseq.kumac} mini_ker.texi(,1283) mini_ker.texi(,1284) It is possible to enable some features by selecting which code should mini_ker.texi(,1285) be part of the principal program. Each of these optionnal features are mini_ker.texi(,1286) associated with a @dfn{select flag}. mini_ker.texi(,1287) For example mini_ker.texi(,1288) @c the optimisation with minuit is associated with the select mini_ker.texi(,1289) @c flag @samp{minuik}, mini_ker.texi(,1290) double precision is used instead of simple precision with mini_ker.texi(,1291) the @samp{double} select flag, mini_ker.texi(,1292) the model is a subroutine with the select flag @samp{monitor}, mini_ker.texi(,1293) the Kalman filter code is set with @samp{kalman} and the 1D gridded mini_ker.texi(,1294) model capabilities are associated with @samp{grid1d}. mini_ker.texi(,1295) @c Currently it is only possible mini_ker.texi(,1296) @c to select features in cmz. mini_ker.texi(,1297) To select a given feature the cmz statement @code{sel @var{select_flag}} should mini_ker.texi(,1298) be written down in the @file{selseq.kumac} found in the model directory. mini_ker.texi(,1299) With make either the corresponding variable should be set to 1 or it mini_ker.texi(,1300) should be added to the @code{SEL} make variable, depending on the feature. mini_ker.texi(,1301) mini_ker.texi(,1302) Other features don't need different or additional code to be used. mini_ker.texi(,1303) Most of the features are enabled by setting specific logical variables to mini_ker.texi(,1304) @samp{.true.}. This is the case for mini_ker.texi(,1305) @code{zback} for the adjoint model, @code{zcommand} if the command is in a file mini_ker.texi(,1306) and @code{zlaw} if it is a function and @code{zkalman} for the Kalman filter. mini_ker.texi(,1307) These select and logical flags are described in the corresponding sections. mini_ker.texi(,1308) mini_ker.texi(,1309) In cmz an alternative of writing select flags to @file{selseq.kumac} is to mini_ker.texi(,1310) drive the compilation with @code{smod @var{sel_flag}}. In that case the mini_ker.texi(,1311) @var{sel_flag} is selected and the files and executable goes to a directory mini_ker.texi(,1312) named @file{sel_flag}. mini_ker.texi(,1313) mini_ker.texi(,1314) The select flags are taken into account during cmz directives preprocessing. mini_ker.texi(,1315) Therefore you have the possibility to use these flags to conditionnaly mini_ker.texi(,1316) include pieces of code. In most cases you don't need to include code conditionally mini_ker.texi(,1317) yourself though, but if you want to, this is covered in mini_ker.texi(,1318) @ref{Programming with cmz directives}. mini_ker.texi(,1319) mini_ker.texi(,1320) @node Calling the model code mini_ker.texi(,1321) @section Calling the model code mini_ker.texi(,1322) mini_ker.texi(,1323) When the model code is a subroutine, it can be called from another fortran mini_ker.texi(,1324) program unit (or another program), and the model will be mini_ker.texi(,1325) run each time the subroutine is called. mini_ker.texi(,1326) This technique could be used, for example to perform optimization mini_ker.texi(,1327) (@pxref{Adjoint model and optimisation,,Adjoint model and optimisation mini_ker.texi(Minik,1328) with Miniker}), or to run the model with different parameters. mini_ker.texi(,1329) mini_ker.texi(,1330) @menu mini_ker.texi(,1331) * Turning the model into a subroutine:: mini_ker.texi(,1332) * The model subroutine:: mini_ker.texi(,1333) @end menu mini_ker.texi(,1334) mini_ker.texi(,1335) @node Turning the model into a subroutine mini_ker.texi(,1336) @subsection Turning the model into a subroutine mini_ker.texi(,1337) mini_ker.texi(,1338) @c This feature is allready enabled with @command{make}, and to mini_ker.texi(,1339) @c override the default program a file called @file{monitor.f} has to be created mini_ker.texi(,1340) @c in the working directory. The default program simple calls the model mini_ker.texi(,1341) @c subroutine. mini_ker.texi(,1342) mini_ker.texi(,1343) With cmz, one has to do a mini_ker.texi(,1344) @example mini_ker.texi(,1345) sel monitor mini_ker.texi(,1346) @end example mini_ker.texi(,1347) in the @file{selseq.kumac} file and create the KEEP that call the mini_ker.texi(,1348) model code. @xref{Selecting features, Overview of additional features mini_ker.texi(,1349) setting}. mini_ker.texi(,1350) mini_ker.texi(,1351) With make @samp{monitor} should be added to the @code{SEL} variable in mini_ker.texi(,1352) the @file{Makefile}, for example: mini_ker.texi(,1353) mini_ker.texi(,1354) @example mini_ker.texi(,1355) SEL = monitor mini_ker.texi(,1356) @end example mini_ker.texi(,1357) mini_ker.texi(,1358) A file that call the principal subroutine should also be written, using mini_ker.texi(,1359) the prefered language of the user. The additional object files should mini_ker.texi(Minik,1360) then be linked with the Miniker objects. To that aim they may be added mini_ker.texi(,1361) to the @code{miniker_user_objects} variable. mini_ker.texi(,1362) mini_ker.texi(,1363) @node The model subroutine mini_ker.texi(,1364) @subsection Calling the model subroutine mini_ker.texi(,1365) mini_ker.texi(,1366) The model subroutine is called @samp{principal} and is called with the mini_ker.texi(,1367) following arguments: mini_ker.texi(,1368) mini_ker.texi(,1369) @deffn Subroutine principal (Cost, ncall, integer_flag, file_suffix, info, idxerror) mini_ker.texi(,1370) Where @var{Cost} is a real number, @code{real} or @code{double precision}, mini_ker.texi(,1371) and is set by the @code{principal} mini_ker.texi(,1372) subroutine. It holds the value of the cost function if such function has been mini_ker.texi(,1373) defined (the use and setting of a cost function is covered later, mini_ker.texi(,1374) see @ref{Cost function coding and adjoint modeling}). mini_ker.texi(,1375) @var{ncall} is an integer which corresponds with the number of mini_ker.texi(,1376) call to @code{principal} done so far, it should be initialized to 0 and mini_ker.texi(,1377) its value should not be changed, as it is changed in the @code{principal} mini_ker.texi(,1378) subroutine. mini_ker.texi(,1379) @var{integer_flag} is an integer that can be set by the user to be accessed mini_ker.texi(,1380) in the @code{principal} subroutine. For example its value could be used to mini_ker.texi(,1381) set some flags in the @file{zinit} sequence. mini_ker.texi(,1382) @var{file_suffix} is a character string, that is suffixed to the output files mini_ker.texi(,1383) names instead of @samp{.data}. If the first character is the null character mini_ker.texi(,1384) @samp{char(0)}, the default suffix, @samp{.data} is appended. mini_ker.texi(,1385) @var{info} and @var{idxerror} are integer used for error reporting. mini_ker.texi(,1386) @var{idxerror} value is 0 if there was no error. It is negative for mini_ker.texi(,1387) an alert, positive for a very serious error. The precise value determines mini_ker.texi(,1388) where the error occured. mini_ker.texi(,1389) @var{info} is an integer holding more precise information about the mini_ker.texi(,1390) error. It is usually the information value from lapack. mini_ker.texi(,1391) The precise meaning of these error codes is in @ref{tab:error_codes}. mini_ker.texi(,1392) @end deffn mini_ker.texi(,1393) mini_ker.texi(,1394) @float table, tab:error_codes mini_ker.texi(,1395) @multitable {kalman analysis state matrix advance in phase space, @math{(I-D)} inversion} {inversion} {@code{idxerror}} mini_ker.texi(,1396) @headitem Source of error or warning @tab @code{info} @tab @code{idxerror} mini_ker.texi(,1397) @c @item @code{} @tab @file{.data} @tab @tab mini_ker.texi(,1398) @item state matrix inversion in ker @tab inversion @tab 1 mini_ker.texi(,1399) @item time advance system resolution in ker @tab system @tab 2 mini_ker.texi(,1400) @item transfer propagator, @math{(I-D)} inversion @tab inversion @tab 3 mini_ker.texi(,1401) @item kalman analysis state matrix advance in phase space, @math{(I-D)} inversion @tab inversion @tab 21 mini_ker.texi(,1402) @item kalman analysis variance covariance matrix non positive @tab Choleski @tab 22 mini_ker.texi(,1403) @item kalman analysis error matrix inversion @tab inversion @tab 23 mini_ker.texi(,1404) @item kalman error matrix advance @tab system @tab 24 mini_ker.texi(,1405) @item transfers determination linearity problem for transfers @tab @tab -1 mini_ker.texi(,1406) @item transerts determination Newton D_loop does not converge @tab @tab -2 mini_ker.texi(,1407) @end multitable mini_ker.texi(,1408) @caption{Meaning of error codes returned by principal.} mini_ker.texi(,1409) @end float mini_ker.texi(,1410) mini_ker.texi(,1411) In general more information than the provided arguments has to be passed mini_ker.texi(,1412) to the @code{principal} subroutine, in that case a @code{common} block, mini_ker.texi(,1413) to be written in the @file{zinit} sequence can be used. mini_ker.texi(,1414) mini_ker.texi(,1415) @page mini_ker.texi(,1416) @node 1D gridded model mini_ker.texi(,1417) @section Describing 1D gridded model mini_ker.texi(,1418) mini_ker.texi(,1419) Specific macros have been built that allow generic description of 1D gridded models. mini_ker.texi(,1420) Because of the necessity of defining left and right limiting conditions, the models mini_ker.texi(,1421) are partitionned in three groups for cell and transfer components. In the following example, mini_ker.texi(,1422) a chain of masselottes linked by springs and dumps is bounded to a wall on the left, mini_ker.texi(,1423) and open at right. The @acronym{TEF} formulation of the problem is written in the phase space (position-shift, velocity) mini_ker.texi(,1424) for node @math{k}, with bounding conditions: mini_ker.texi(,1470) mini_ker.texi(,1471) States:@* mini_ker.texi(,1472) @noindent @math{d position(t,k)/d t = velocity(t,k)@* mini_ker.texi(,1473) d velocity (t,k)/d t =(spring(t,k) - spring(t,k+1)+ dump(t,k)- dump(t,k+1))/m_k} mini_ker.texi(,1474) mini_ker.texi(,1475) Transfers:@* mini_ker.texi(,1476) @noindent @math{spring(t,k) = -k_k (position(t,k)- position(t,k-1))@* mini_ker.texi(,1477) dump(k,t) &= -d_k (velocity(t,k)- velocity(t,k-1))} mini_ker.texi(,1478) mini_ker.texi(,1479) Bounding conditions:@* mini_ker.texi(,1480) @noindent @math{position(t,0) = 0@* mini_ker.texi(,1481) velocity(t,0) = 0@* mini_ker.texi(,1482) spring(t,N+1) = 0@* mini_ker.texi(,1483) dump(t,N+1) =0} mini_ker.texi(,1484) mini_ker.texi(,1487) mini_ker.texi(,1488) @cindex down node mini_ker.texi(,1489) @cindex up node mini_ker.texi(,1490) mini_ker.texi(,1491) where @math{m_k} is the mass of node @math{k}, @math{r_k} and @math{d_k} mini_ker.texi(,1492) the rigidity of springs and dumping coefficients. There are @math{N} nodes mini_ker.texi(,1493) in the grid, from 1 to @math{N}, and two nodes outside of the grid, mini_ker.texi(,1494) a limiting node 0, and a limiting node @math{N+1}. The limiting node mini_ker.texi(,1495) corresponding with node 0 is called the @dfn{down} node, while the limiting mini_ker.texi(,1496) node corresponding with node @math{N+1} is called the @dfn{up} node. mini_ker.texi(,1497) Other models not part of the 1D grid may be added if any. mini_ker.texi(,1498) mini_ker.texi(,1499) To enable 1D gridded models, one should set the select flag @samp{grid1d}. mini_ker.texi(,1500) In cmz it is achieved setting the select flag in mini_ker.texi(,1501) @file{selseq.kumac}, like mini_ker.texi(,1502) mini_ker.texi(,1503) @example mini_ker.texi(,1504) sel grid1d mini_ker.texi(,1505) @end example mini_ker.texi(,1506) mini_ker.texi(,1507) With make, the @code{SEL} variable should contain @code{grid1d}. For example mini_ker.texi(,1508) to select @code{grid1d} and @code{monitor}, it could be mini_ker.texi(,1509) @example mini_ker.texi(,1510) SEL = grid1d,monitor mini_ker.texi(,1511) @end example mini_ker.texi(,1512) mini_ker.texi(,1513) mini_ker.texi(,1514) @menu mini_ker.texi(,1515) * 1D gridded Model size:: mini_ker.texi(,1516) * 1D gridded model code:: mini_ker.texi(,1517) @end menu mini_ker.texi(,1518) mini_ker.texi(,1519) @node 1D gridded Model size mini_ker.texi(,1520) @subsection Setting dimensions for 1D gridded model mini_ker.texi(,1521) mini_ker.texi(,1522) @c FIXME grid1d sans dimetaphi? mini_ker.texi(,1523) In that case the number of nodes, the number of states and tranferts mini_ker.texi(,1524) per node, and the number of limiting transfers and states are required. mini_ker.texi(,1525) These dimensions has to be entered in the mini_ker.texi(,1526) @file{DimEtaPhi} sequence. The parameters for cells are mini_ker.texi(,1527) @vtable @code mini_ker.texi(,1528) @item n_node mini_ker.texi(,1529) Number of cell nodes in the 1D grid. mini_ker.texi(,1530) @item n_dwn mini_ker.texi(,1531) Number of limiting cells with index -1, @i{i.e.} number of cells in the mini_ker.texi(,1532) limiting down node. mini_ker.texi(,1533) @item n_up mini_ker.texi(,1534) Number of limiting cells with index +1, @i{i.e.} number of cells in the mini_ker.texi(,1535) limiting up node. mini_ker.texi(,1536) @item n_mult mini_ker.texi(,1537) Number of cells in each node (multiplicity). mini_ker.texi(,1538) @end vtable mini_ker.texi(,1539) mini_ker.texi(,1540) @vindex m_node mini_ker.texi(,1541) @vindex m_dwn mini_ker.texi(,1542) @vindex m_up mini_ker.texi(,1543) @vindex m_mult mini_ker.texi(,1544) The parameters for transfers, are similarly mini_ker.texi(,1545) @code{m_node}, @code{m_dwn}, @code{m_up}, @code{m_mult}. mini_ker.texi(,1546) The layout of their declaration should be respected as mini_ker.texi(,1547) the precompiler matches the line. Also this procedure is tedious, it mini_ker.texi(,1548) should be selected for debuging processes (use the flag @code{sel dimetaphi} mini_ker.texi(,1549) in ``selsequ.kumac''. Otherwise, the dimensioning sequence will be automaticaly mini_ker.texi(,1550) generated, which is smart but can lead to diffculty in interpreting syntax errors. mini_ker.texi(,1551) Once a model is correctly entred, turn off the sel flag and further modifications mini_ker.texi(,1552) will automatically generate the proper dimensions. The correctness of dimensionning mini_ker.texi(,1553) should nevertheless always be checked in @code{principal.f}, where you can also mini_ker.texi(,1554) check that null valued parameters as @code{lp, mobs, nxp} will suppress parts mini_ker.texi(,1555) of the code - this is signaled as Fortran comment cards. mini_ker.texi(,1556) mini_ker.texi(,1557) In our example, there are three grids of cell and mini_ker.texi(,1558) transfer variables (@code{n_node=m_node=3}). mini_ker.texi(,1559) There are two cells and two transfers in each node mini_ker.texi(,1560) (@code{n_mult=2} and @code{m_mult=2}). There is no limiting condition mini_ker.texi(,1561) for the states in the down node therefore @code{n_up=0}. mini_ker.texi(,1562) There is no transfer for the first limiting node, and mini_ker.texi(,1563) therefore @code{m_dwn=0}. mini_ker.texi(,1564) There are two states in the limiting node 0, the down node, mini_ker.texi(,1565) @code{n_dwn=2}, and two transfers in the limiting last node the node up, mini_ker.texi(,1566) and @code{m_up=2}: mini_ker.texi(,1567) mini_ker.texi(,1568) @example mini_ker.texi(,1569) ! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ mini_ker.texi(,1570) ! nodes parameters, and Limiting Conditions (Low and High) mini_ker.texi(,1571) ! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ mini_ker.texi(,1572) parameter (n_node=3,n_dwn=2,n_up=0,n_mult=2); mini_ker.texi(,1573) parameter (m_node=3,m_dwn=0,m_up=2,m_mult=2); mini_ker.texi(,1574) ! ________________________________________________________ mini_ker.texi(,1575) @end example mini_ker.texi(,1576) mini_ker.texi(,1587) mini_ker.texi(,1588) @node 1D gridded model code mini_ker.texi(,1589) @subsection 1D gridded Model coding mini_ker.texi(,1590) mini_ker.texi(,1591) The model code and parameters go in the @file{zinit} sequence. mini_ker.texi(,1592) mini_ker.texi(,1593) @subsubheading Parameters mini_ker.texi(,1594) mini_ker.texi(Minik,1595) A value for the Miniker parameters and the model parameters should be given in mini_ker.texi(,1596) @file{zinit}, in our example we have mini_ker.texi(,1597) mini_ker.texi(,1598) @example mini_ker.texi(,1599) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,1600) ! Parameters mini_ker.texi(,1601) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,1602) real rk(n_node),rd(n_node),rmassm1(n_node); mini_ker.texi(,1603) mini_ker.texi(,1604) data rk/n_node*1./; mini_ker.texi(,1605) data rd/n_node*0.1/; mini_ker.texi(,1606) data rmassm1/n_node*1./; mini_ker.texi(,1607) dt=.01; mini_ker.texi(,1608) nstep=5 000; mini_ker.texi(,1609) modzprint = 1000; mini_ker.texi(,1610) time=0.; mini_ker.texi(,1611) @end example mini_ker.texi(,1612) mini_ker.texi(,1613) @subsubheading Limiting conditions mini_ker.texi(,1614) mini_ker.texi(,1615) @cindex limiting conditions mini_ker.texi(,1616) mini_ker.texi(,1617) @c The limiting states and transfer variables and the corresponding equations are mini_ker.texi(,1618) @c declared using mini_ker.texi(,1619) @c the symbolic model description mini_ker.texi(,1620) @c (@pxref{Symbolic model description}). mini_ker.texi(,1621) There are four mortran blocks for @code{node} and @code{up} and @code{down}, both mini_ker.texi(,1622) for states and transfers: mini_ker.texi(,1623) mini_ker.texi(,1624) @findex set_dwn_eta mini_ker.texi(,1625) @findex set_dwn_phi mini_ker.texi(,1626) @findex set_up_eta mini_ker.texi(,1627) @findex set_up_phi mini_ker.texi(,1628) mini_ker.texi(,1629) @table @code mini_ker.texi(,1630) @item set_dwn_eta mini_ker.texi(,1631) down node cells mini_ker.texi(,1632) @item set_up_eta mini_ker.texi(,1633) up node cells mini_ker.texi(,1634) @item set_dwn_phi mini_ker.texi(,1635) down node transfers mini_ker.texi(,1636) @item set_up_phi mini_ker.texi(,1637) up node transfers mini_ker.texi(,1638) @end table mini_ker.texi(,1639) mini_ker.texi(,1640) The following scheme illustrates the example: mini_ker.texi(,1641) @smallexample mini_ker.texi(,1642) !%%%%%%%%%%%%%%%%%%%%%%%%%%================================================ mini_ker.texi(,1643) ! Maillage convention inode mini_ker.texi(,1644) !%%%%%%%%%%%%%%%%%%%%%%%%%% Open ended mini_ker.texi(,1645) !(2 Down Phi Eta (n_node) mini_ker.texi(,1646) ! Eta) \| .-----. .-----. .-----. / mini_ker.texi(,1647) ! wall \|-\/\/\-| |-\/\/\-| | . . . -| |-\/\/\- |dummy mini_ker.texi(,1648) ! pos \|--***--| 1 |--***--| 2 | . . . -| n |--***-- |Phis mini_ker.texi(,1649) ! speed \| 1 |_____| 2 |_____| n |_____| n+1 \(2 Up Phi) mini_ker.texi(,1650) ! mini_ker.texi(,1651) @end smallexample mini_ker.texi(,1652) mini_ker.texi(,1653) Two states are associated with the down node, they correspond to the position mini_ker.texi(,1654) and speed of the wall. As the wall don't move these states are initialized to mini_ker.texi(,1655) be 0, and the cells are stationnary cells, therefore these values remain 0. mini_ker.texi(,1656) mini_ker.texi(,1657) @example mini_ker.texi(,1658) ! Down cells (wall) mini_ker.texi(,1659) ! ----------------- mini_ker.texi(,1660) eta_pos_wall = 0; eta_speed_wall = 0.; mini_ker.texi(,1661) mini_ker.texi(,1662) set_dwn_eta mini_ker.texi(,1663) < var: eta_pos_wall, fun: deta_pos_wall = 0.; mini_ker.texi(,1664) var: eta_speed_wall, fun: deta_speed_wall= 0.; mini_ker.texi(,1665) >; mini_ker.texi(,1666) @end example mini_ker.texi(,1667) mini_ker.texi(,1668) There are 2 limiting transfers in the up node. They correspond with an open mini_ker.texi(,1669) end and are therefore set to 0. mini_ker.texi(,1670) mini_ker.texi(,1671) @example mini_ker.texi(,1672) ! limiting Transfers : dummy ones mini_ker.texi(,1673) ! ------------------------------- mini_ker.texi(,1674) set_Up_Phi mini_ker.texi(,1675) < var:ff_dummy_1, fun: f_dummy_1=0.; mini_ker.texi(,1676) var:ff_dummy_2, fun: f_dummy_2=0.; mini_ker.texi(,1677) >; mini_ker.texi(,1678) @end example mini_ker.texi(,1679) mini_ker.texi(,1680) @subsubheading Starting points mini_ker.texi(,1681) mini_ker.texi(,1682) The cell node state values are initialized. They are in an array mini_ker.texi(,1683) indexed by the @code{inode} variable. In the example the variable mini_ker.texi(,1684) corresponding with position is @code{eta_move} and the variable corresponding mini_ker.texi(,1685) with speed is @code{eta_speed}. Their initial values are set with the mini_ker.texi(,1686) following mortran code mini_ker.texi(,1687) mini_ker.texi(,1688) @example mini_ker.texi(,1689) !--------------- mini_ker.texi(,1690) ! Initialisation mini_ker.texi(,1691) !--------------- mini_ker.texi(,1692) ; mini_ker.texi(,1693) do inode=1,n_node ; mini_ker.texi(,1694) @end example mini_ker.texi(,1695) mini_ker.texi(,1696) If any transfer needs to be given a first-guess value, this is also done mini_ker.texi(,1697) using @code{inode} as the node index. mini_ker.texi(,1698) mini_ker.texi(,1699) @subsubheading Grid node equations mini_ker.texi(,1700) mini_ker.texi(,1701) @findex set_node_Phi mini_ker.texi(,1702) @findex set_node_eta mini_ker.texi(,1703) @cindex equations, grid mini_ker.texi(,1704) mini_ker.texi(,1705) Each node is associated with an index @code{inode}. It allows to refer to the mini_ker.texi(,1706) preceding node, with @code{inode-1} and the following node @code{inode+1}. mini_ker.texi(,1707) The node states are declared in @code{set_node_Eta} block and the transfers are mini_ker.texi(,1708) in @code{set_node_Phi} blocks. mini_ker.texi(,1709) mini_ker.texi(,1710) In the example, the cells are declared with mini_ker.texi(,1711) mini_ker.texi(,1712) @example mini_ker.texi(,1713) ! node cells mini_ker.texi(,1714) ! ---------- mini_ker.texi(,1715) ; mini_ker.texi(,1716) set_node_Eta mini_ker.texi(,1717) < var: eta_move(inode), fun: deta_move(inode) = eta_speed(inode); mini_ker.texi(,1718) var: eta_speed(inode), mini_ker.texi(,1719) fun: deta_speed(inode) = rmassm1(inode) mini_ker.texi(,1720) *( - ff_spring(inode+1) + ff_spring(inode) mini_ker.texi(,1721) - ff_dump(inode+1) + ff_dump(inode) mini_ker.texi(,1722) ); mini_ker.texi(,1723) >; mini_ker.texi(,1724) @end example mini_ker.texi(,1725) Note that the @code{inode} is dummy in the @code{var:} definition and can as mini_ker.texi(,1726) well be written as: @code{var: eta_move(.)}. mini_ker.texi(,1727) mini_ker.texi(,1728) mini_ker.texi(,1729) The transfers are (@code{ff_spring} corresponds with springs and mini_ker.texi(,1730) @code{ff_dump} with dumps): mini_ker.texi(,1731) mini_ker.texi(,1732) @example mini_ker.texi(,1733) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,1734) ! Transfer definition mini_ker.texi(,1735) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,1736) ! node transfers mini_ker.texi(,1737) ! -------------- mini_ker.texi(,1738) ! convention de signe spring : comprime:= + mini_ker.texi(,1739) set_node_Phi mini_ker.texi(,1740) < var: ff_spring(.), mini_ker.texi(,1741) fun: mini_ker.texi(,1742) f_spring(inode)= -rk(inode)*(eta_move(inode) - eta_move(inode-1)); mini_ker.texi(,1743) var: ff_dump(.), mini_ker.texi(,1744) fun: mini_ker.texi(,1745) f_dump(inode) = -rd(inode)*(eta_speed(inode) - eta_speed(inode-1)); mini_ker.texi(,1746) >; mini_ker.texi(,1747) @end example mini_ker.texi(,1748) mini_ker.texi(,1749) The limiting states and transfers are associated with the states or transfers mini_ker.texi(,1750) with index @code{inode+1} or @code{inode-1} appearing in node cell and mini_ker.texi(,1751) transfer equations (@code{inode-1} for down limiting conditions and mini_ker.texi(,1752) @code{inode+1} for up limiting conditions) in their order of appearance. mini_ker.texi(,1753) In our example, in the @code{eta_speed} state node equation mini_ker.texi(,1754) @code{ff_spring(inode+1)} appears before @code{ff_dump(inode+1)} and is mini_ker.texi(,1755) therefore associated with @code{ff_dummy_1} while @code{ff_dump(inode+1)} is mini_ker.texi(,1756) associated with the @code{ff_dummy_2} limiting transfer, as @code{ff_dummy_1} mini_ker.texi(,1757) appears before @code{ff_dummy_2} in the limiting up transfers definitions. mini_ker.texi(,1758) Verification of the grid index coherence should be eased with the following mini_ker.texi(,1759) help printed in the listing header: mini_ker.texi(,1760) mini_ker.texi(,1761) @example mini_ker.texi(,1762) mini_ker.texi(,1763) mini_ker.texi(,1764) mini_ker.texi(,1765) mini_ker.texi(,1766) --------------- Informing on Dwn Eta definition --------------- mini_ker.texi(,1767) Var-name, Function-name, index in eta vector mini_ker.texi(,1768) eta_pos_wall deta_pos_wall 1 [ mini_ker.texi(,1769) eta_speed_wall deta_speed_wall 2 [ mini_ker.texi(,1770) mini_ker.texi(,1771) -------------- Informing on Eta Nodes definition -------------- mini_ker.texi(,1772) Var-name, Function, k2index of (inode: 0 [ 1,...n_node ] n_node+1) mini_ker.texi(,1773) eta_move deta_move 1 [ 3 ... 7 ] 9 mini_ker.texi(,1774) eta_speed deta_speed 2 [ 4 ... 8 ] 10 mini_ker.texi(,1775) mini_ker.texi(,1776) ---------------- Informing on Up Phi definition ------------- mini_ker.texi(,1777) Var-name, Function-name, index in ff vector mini_ker.texi(,1778) ff_dummy_1 f_dummy_1 ] 7 mini_ker.texi(,1779) ff_dummy_2 f_dummy_2 ] 8 mini_ker.texi(,1780) ff_move_sum f_move_sum ] 9 mini_ker.texi(,1781) ff_speed_sum f_speed_sum ] 10 mini_ker.texi(,1782) ---------------------------------------------------- mini_ker.texi(,1783) mini_ker.texi(,1784) -------------- Informing on Phi Nodes definition --------------- mini_ker.texi(,1785) Var-name, Function, k2index of (inode: 0 [ 1,...m_node ] m_node+1) mini_ker.texi(,1786) ff_spring f_spring -1 [ 1 ... 5 ] 7 mini_ker.texi(,1787) ff_dump f_dump 0 [ 2 ... 6 ] 8 mini_ker.texi(,1788) ---------------------------------------------------- mini_ker.texi(,1789) @end example mini_ker.texi(,1790) mini_ker.texi(,1791) All variable names and functions are free but has to be mini_ker.texi(,1792) different. mini_ker.texi(,1793) Any particular node-attached variable @math{k} is referred to as: @samp{(inode:k)}, mini_ker.texi(,1794) where @math{k} has to be a Fortran expression allowed in arguments. The symbol mini_ker.texi(,1795) @samp{inode} is mini_ker.texi(,1796) reserved. As usual other Fortran instructions can be written within the mini_ker.texi(,1797) Mortran block @samp{< >} of each @code{set_} block. mini_ker.texi(,1798) mini_ker.texi(,1799) @node Double precision mini_ker.texi(,1800) @section Double precision mini_ker.texi(,1801) mini_ker.texi(,1802) The default for real variables is the @code{real} Fortran type. It is possible to mini_ker.texi(,1803) use double precision instead. In that case all the occurences of @samp{real@ } mini_ker.texi(,1804) in mortran code is substituted with @samp{double precision@ } at mini_ker.texi(,1805) precompilation stage, mini_ker.texi(,1806) and the Lapack subroutine names are replaced by the double precision names. mini_ker.texi(,1807) Eventual users'declaration of @code{complex@ } Fortran variables is also mini_ker.texi(,1808) changed to @code{double complex@ }. mini_ker.texi(,1809) mini_ker.texi(,1810) This feature is turned on by @code{sel double} in @file{selseq.kumac} with cmz mini_ker.texi(,1811) and @code{double = 1} in the @file{Makefile} with make. mini_ker.texi(,1812) mini_ker.texi(,1813) In order for the model to run as well in double as in simple precision, mini_ker.texi(,1814) some care should be taken to use the generic intrinsic functions, like mini_ker.texi(,1815) @code{sin} and not @code{dsin}. No numerical constant should be passed directly mini_ker.texi(,1816) to subroutines or functions, but instead a variable with the right type should mini_ker.texi(,1817) be used to hold the constant value, taking advantage of the implicit casts mini_ker.texi(,1818) to the variable type. mini_ker.texi(,1819) mini_ker.texi(,1820) @node Partial Derivatives mini_ker.texi(,1821) @section Partial Derivatives mini_ker.texi(,1822) mini_ker.texi(,1823) The partial derivative rules are included in a @code{Mortran} macro series mini_ker.texi(Minik,1824) in @file{Derive_mac} of Miniker files. When using an anusual function, mini_ker.texi(,1825) one should verify that the corersponding rules are in that file. mini_ker.texi(,1826) It is easy to understand and add new rules in analogy with the already existing ones. mini_ker.texi(,1827) mini_ker.texi(,1828) For instance, suppose one wants to use the intrinsic Fortran function @code{ abs()}. mini_ker.texi(,1829) Its derivatives uses the other function @code{sign()} this way: mini_ker.texi(,1830) mini_ker.texi(,1831) @example mini_ker.texi(,1832) &'(ABS(#))(/#)' = '((#1)(/#2)*SIGN(1.,#1))' mini_ker.texi(,1833) @end example mini_ker.texi(,1834) mini_ker.texi(,1835) In such cases when one is adding a new rule, it is important to use the generic function names mini_ker.texi(Minik,1836) only (i.e. @code{sin} not @code{dsin}), because when compilating Miniker in the double precision mini_ker.texi(,1837) version, or complex version, the generic names will correctly handle the different variable mini_ker.texi(,1838) types - which is not the case when coding with specific function names. mini_ker.texi(,1839) mini_ker.texi(,1840) @menu mini_ker.texi(,1841) * Derivating a power function:: mini_ker.texi(,1842) @end menu mini_ker.texi(,1843) mini_ker.texi(,1844) @node Derivating a power function mini_ker.texi(,1845) @subsection Derivating a power function mini_ker.texi(,1846) mini_ker.texi(,1847) Partial derivative of a function in exponent is not secure in its Fortran form mini_ker.texi(,1848) @code{g(x,y)**(f(y))}. It should be replaced by @code{power(g,f)} of mini_ker.texi(Minik,1849) the Miniker @file{mathlib}, mini_ker.texi(,1850) or by the explicit form @code{exp(f(y)*log(g(x,y)))}. mini_ker.texi(,1851) mini_ker.texi(,1852) Its derivative will have the following form: mini_ker.texi(,1853) mini_ker.texi(,1854) mini_ker.texi(,1868) mini_ker.texi(,1869) and is in the macros list already defined in: @file{DERIVE_MAC}. mini_ker.texi(,1870) mini_ker.texi(,1871) @node Rule of programming non continuous models mini_ker.texi(,1872) @section Rule of programming non continuous models mini_ker.texi(,1873) mini_ker.texi(,1874) Some models may originally be non continuous, as the ones using a Fortran instruction @code{IF}. mini_ker.texi(,1875) Some may use implicitly a step function on a variable. In such cases, the model has to be mini_ker.texi(,1876) set in a derivable form, and use a ``smooth step'' instead. mini_ker.texi(,1877) One should be aware of that this apparently mathematical treatment currently mini_ker.texi(,1878) indeed leads to a physical question about the macroscopic form of a physical law. mini_ker.texi(,1879) At a macroscipic level, a step function is usually a nonsense. mini_ker.texi(,1880) @cindex Heaviside function mini_ker.texi(,1881) Taking mini_ker.texi(,1882) the example of phase-change, a fluid volume does not change phase at once, and a ``smooth mini_ker.texi(,1883) change of state'' is a correct macroscopic model. mini_ker.texi(,1884) mini_ker.texi(Minik,1885) Miniker provides with the smooth step function mini_ker.texi(,1886) @emph{Heavyside}@footnote{This naming is a joke mini_ker.texi(Minik,1887) for ``Inert'' Heaviside function.} in the Miniker @file{mathlib}: mini_ker.texi(,1888) mini_ker.texi(,1889) @example mini_ker.texi(,1890) Delta = -1."K"; mini_ker.texi(,1891) A_Ice = heavyside("in:" (T_K-Tf), Delta, "out:" dAIce_dT); mini_ker.texi(,1892) @end example mini_ker.texi(,1893) mini_ker.texi(,1894) in this example, @code{Tf} is the ice fusion-temperature, @code{A_ice} mini_ker.texi(,1895) gives the ice-fraction mini_ker.texi(,1896) of the mesh-volume of water at temperature @code{T_k}. mini_ker.texi(,1897) The smooth-step function is a quasi mini_ker.texi(,1898) hyperbolic tangent function of @math{x/\Delta}, mini_ker.texi(,1899) normalised from 0 to 1, with a maximum slope mini_ker.texi(,1900) of 2.5, see figure @ref{heavy}. mini_ker.texi(,1901) mini_ker.texi(,1902) @float Figure, heavy mini_ker.texi(,1903) @image{heavyside} mini_ker.texi(,1904) @caption{Heaviside function and derivative} mini_ker.texi(,1905) @end float mini_ker.texi(,1916) mini_ker.texi(,1917) For @code{Mortran} to be able to symbolicaly compute the partial derivarives, the rule mini_ker.texi(,1918) is in the table of macros as: mini_ker.texi(,1919) mini_ker.texi(,1920) @example mini_ker.texi(,1921) &'(HEAVYSIDE(#,#,#))(/#)' = '((#1)(/#4)*HEAVYDELTA(#1,#2,#3))' mini_ker.texi(,1922) @end example mini_ker.texi(,1923) mini_ker.texi(,1924) which uses the Foratn entry point @code{HeavyDelta} in the Fortrsan function @code{heavyside}. mini_ker.texi(,1925) mini_ker.texi(,1926) Another type of problem arises when coding a mini_ker.texi(,1927) @code{var=min(f(x),g(x))} Fortran instruction. mini_ker.texi(,1928) In such a case one does not want a derivative and one will code: mini_ker.texi(,1929) mini_ker.texi(,1930) @example mini_ker.texi(,1931) var = HeavySide(f(x)-g(x),Delta,dum)*g(x) + (1.-HeavySide(f(x)-g(x),Delta,dum)*f(x); mini_ker.texi(,1932) @end example mini_ker.texi(,1933) mini_ker.texi(,1934) or equivalently: mini_ker.texi(,1935) mini_ker.texi(,1936) @example mini_ker.texi(,1937) var = HeavySide(f(x)-g(x),Delta,dum)*g(x) + HeavySide(g(x)-f(x),-Delta,dum)*f(x); mini_ker.texi(,1938) @end example mini_ker.texi(,1939) mini_ker.texi(,1940) @strong{Warning}: the value of the argument @var{Delta} is important because mini_ker.texi(,1941) it will fix the maximum mini_ker.texi(,1942) slope of the function that will appear as a coefficient in the mini_ker.texi(,1943) Jacbian matrices. mini_ker.texi(,1944) mini_ker.texi(,1945) @node Parameters mini_ker.texi(,1946) @section Parameters mini_ker.texi(,1947) mini_ker.texi(,1948) It is possible to specify some Fortran variables as specific model parameters. mini_ker.texi(,1949) Model parameters mini_ker.texi(,1950) may be used in sensitivity studies (@pxref{Sensitivity to a parameter}) mini_ker.texi(,1951) and in the adjoint model (@pxref{Sensitivity of cost function to parameters}). mini_ker.texi(,1952) Nothing special is done with parameters with Kalman filtering. mini_ker.texi(,1953) mini_ker.texi(,1954) mini_ker.texi(,1955) @findex Free_parameter mini_ker.texi(,1956) mini_ker.texi(,1957) The parameters are fortran variables that should be initialized somewhere mini_ker.texi(,1958) in @file{zinit}. For a variable to be considered as a parameter, it should mini_ker.texi(,1959) be passed as an mini_ker.texi(,1960) argument to the @code{Free_parameters} macro. For example if mini_ker.texi(,1961) @code{apar} and @code{cpar} (from the predator example) are to be considered mini_ker.texi(,1962) as parameters, @code{Free_parameters} should be called with: mini_ker.texi(,1963) mini_ker.texi(,1964) @example mini_ker.texi(,1965) Free_parameter: apar, cpar; mini_ker.texi(,1966) @end example mini_ker.texi(,1967) mini_ker.texi(,1968) @c Forward sensitivities are explained later (@pxref{Sensitivity to a parameter}), mini_ker.texi(,1969) @c the syntax only is described here. mini_ker.texi(,1970) mini_ker.texi(,1971) mini_ker.texi(,1972) When used with grid1d models (@pxref{1D gridded model,, mini_ker.texi(,1973) Describing 1D gridded model}) the @code{inode} number may appear in mini_ker.texi(,1974) parenthesis: mini_ker.texi(,1975) mini_ker.texi(,1976) @example mini_ker.texi(,1977) Free_parameter: rd(1), rk(2); mini_ker.texi(,1978) @end example mini_ker.texi(,1979) mini_ker.texi(,1980) @node Observations and data mini_ker.texi(,1981) @section Observations and data mini_ker.texi(,1982) mini_ker.texi(,1983) Some support for observations and interactions with data is available. mini_ker.texi(,1984) The observations are functions of the model variables. They don't have mini_ker.texi(,1985) any action on the model result, but they may (in theory) be observed mini_ker.texi(,1986) and measured. The natural use of these observations is to be compared mini_ker.texi(,1987) with data that correspond with the values from real measurements. mini_ker.texi(,1988) They are used in the Kalman filter (@pxref{Kalman filter}). mini_ker.texi(,1989) mini_ker.texi(,1990) The (model) observation vector is noted @math{\omega} mini_ker.texi(,1991) @c FIXME is seems untrue? mini_ker.texi(,1992) @c in this section ($\mu$ elsewhere, mini_ker.texi(,1993) and the observation function is noted @math{h}: mini_ker.texi(,1994) mini_ker.texi(,2001) mini_ker.texi(,2002) @noindent @math{omega(t) = h(eta(t), phi(t))} mini_ker.texi(,2003) mini_ker.texi(,2005) mini_ker.texi(,2006) @menu mini_ker.texi(,2007) * Observations:: mini_ker.texi(,2008) * Data:: mini_ker.texi(,2009) @end menu mini_ker.texi(,2010) mini_ker.texi(,2011) @node Observations mini_ker.texi(,2012) @subsection Observations mini_ker.texi(,2013) mini_ker.texi(,2014) @vindex mobs mini_ker.texi(,2015) mini_ker.texi(,2016) The observation functions are set in a @code{set_probe} block in mini_ker.texi(,2017) the @file{zinit} sequence. mini_ker.texi(,2018) mini_ker.texi(,2019) @cindex observation function mini_ker.texi(,2020) mini_ker.texi(,2021) @c FIXME doesn't exist anymore mini_ker.texi(,2022) @c @defmac eqn: Obs_tef(@var{i}) = f(eta(.),ff(.)) mini_ker.texi(,2023) @c This macro defines the observation equation as usual in a @code{set_block<}. mini_ker.texi(,2024) @c @code{f} is a fortran mini_ker.texi(,2025) @c expression which may be function of cell state variables, mini_ker.texi(,2026) @c @samp{eta(1)}@dots{}@samp{eta(np)} and transfers mini_ker.texi(,2027) @c @samp{ff(1)}@dots{}@samp{ff(mp)}, or of course their symbolic names. mini_ker.texi(,2028) @c @end defmac mini_ker.texi(,2029) mini_ker.texi(,2030) For example suppose that, in the predator-prey model, we only mini_ker.texi(,2031) have access to the total population of preys and predators, we would have: mini_ker.texi(,2032) mini_ker.texi(,2033) @example mini_ker.texi(,2034) set_probe mini_ker.texi(,2035) < eqn: pop = eta_pred + eta_pray; mini_ker.texi(,2036) >; mini_ker.texi(,2037) @end example mini_ker.texi(,2038) mini_ker.texi(,2039) @c it is always turned on, now mini_ker.texi(,2040) @c The corresponding code is used with @code{sel obs} in @file{selseq.kumac} mini_ker.texi(,2041) @c with cmz and @code{obs = 1} in @file{Makefile} with make. And the feature mini_ker.texi(,2042) @c is turned on and off at run time with the logical flag @code{zobs} corresponding mini_ker.texi(,2043) @c to an available data from measurement mini_ker.texi(,2044) mini_ker.texi(,2045) @c @vindex etaobs(.) mini_ker.texi(,2046) @cindex @file{obs.data} mini_ker.texi(,2047) mini_ker.texi(,2048) The number of observations is put in the integer variable @code{mobs}. mini_ker.texi(,2049) The observation vector corresponds with the part of the @code{ff(.)} mini_ker.texi(,2050) array situated past the regular transferts, @code{ff(mp+.)}, and is output mini_ker.texi(,2051) in the file @file{obs.data}. mini_ker.texi(,2052) mini_ker.texi(,2053) @c @vindex obetad(.,.) mini_ker.texi(,2054) @c @vindex obephid(.,.) mini_ker.texi(,2055) @c @vindex obspha(.,.) mini_ker.texi(,2056) mini_ker.texi(,2057) @node Data mini_ker.texi(,2058) @subsection Data mini_ker.texi(,2059) mini_ker.texi(,2060) @vindex zgetobs mini_ker.texi(,2061) @vindex vobs(.) mini_ker.texi(,2062) @cindex @file{data.data} mini_ker.texi(,2063) mini_ker.texi(,2064) Currently this code is only used if the Kalman code is activated. This mini_ker.texi(,2065) may be changed in the future. mini_ker.texi(,2066) mini_ker.texi(,2067) The convention for data is that whenever some data are available, the mini_ker.texi(,2068) logical variable @code{zgetobs} should be set to @samp{.true.}. And the mini_ker.texi(,2069) @code{vobs(.)} vector should be filled with the data values. This mini_ker.texi(,2070) vector has the same dimension than the observation mini_ker.texi(,2071) vector and each coordinate is meant to correspond with one mini_ker.texi(,2072) coordinate of the observation vector. mini_ker.texi(,2073) mini_ker.texi(,2074) This feature is turned on by setting the logical variable @code{zdata} mini_ker.texi(,2075) to @samp{.true.}, and the @code{zgetobs} flag is typically set in the mini_ker.texi(,2076) @file{zsteer} sequence (@pxref{End of time step,,Executing code at mini_ker.texi(,2077) the end of each time step}). mini_ker.texi(,2078) Every instant data are available (@code{zgetobs} is true) the observations mini_ker.texi(,2079) are written to the file @file{data.data}. With the Kalman filter more mini_ker.texi(,2080) informations are output to the @file{data.data} file, mini_ker.texi(,2081) see @ref{Kalman filter results}. mini_ker.texi(,2082) mini_ker.texi(,2083) mini_ker.texi(,2084) @node Explicit model size mini_ker.texi(,2085) @section Entering model size explicitely mini_ker.texi(,2086) mini_ker.texi(,2087) It is possible to enter the model dimensions explicitely, instead of mini_ker.texi(,2088) generating them automatically, as it was done previously. mini_ker.texi(,2089) This feature is turned on by @code{sel dimetaphi} mini_ker.texi(,2090) in @file{selseq.kumac} with cmz mini_ker.texi(,2091) and @code{dimetaphi} added to the @code{SEL} variable in mini_ker.texi(,2092) the @file{Makefile} with make. mini_ker.texi(,2093) mini_ker.texi(,2094) @menu mini_ker.texi(,2095) * Size sequence:: mini_ker.texi(,2096) * Model with explicit size:: mini_ker.texi(,2097) @end menu mini_ker.texi(,2098) mini_ker.texi(,2099) @node Size sequence mini_ker.texi(,2100) @subsection The explicit size sequence mini_ker.texi(,2101) mini_ker.texi(,2102) @cindex dimetaphi mini_ker.texi(,2103) @cindex model size mini_ker.texi(,2104) @vindex np mini_ker.texi(,2105) @vindex mp mini_ker.texi(,2106) @vindex maxstep mini_ker.texi(,2107) @cindex @file{dimetaphi} mini_ker.texi(,2108) mini_ker.texi(,2109) The dimension of the model is entered in the sequence @file{dimetaphi}, mini_ker.texi(,2110) using the fortran @code{parameter np} for @code{eta(.)} and mini_ker.texi(,2111) @code{mp} for @code{ff(.)}. mini_ker.texi(,2112) For the Lotka-Volterra model, we have two cell components and only one transfer. mini_ker.texi(,2113) mini_ker.texi(,2114) @example mini_ker.texi(,2115) parameter (np=2,mp=1); mini_ker.texi(,2116) @end example mini_ker.texi(,2117) mini_ker.texi(,2118) You should not change the layout of the parameter statement as the mini_ker.texi(,2119) mortran preprocessor matches the line. mini_ker.texi(,2120) mini_ker.texi(,2121) You also have to provide other parameters even if you don't have any mini_ker.texi(,2122) use for them. If you don't it will trigger fortran errors. mini_ker.texi(,2123) It includes the @code{maxstep} parameter that can have any value but 0, mini_ker.texi(,2124) @code{lp} and @code{mobs} that should be 0 in the example, and @code{nxp}, mini_ker.texi(,2125) @code{nyp} and @code{nzp} that should also be 0. mini_ker.texi(,2126) The layout is the following: mini_ker.texi(,2127) mini_ker.texi(,2128) @example mini_ker.texi(,2129) parameter (np=2,mp=1); mini_ker.texi(,2130) parameter (mobs=0); mini_ker.texi(,2131) mini_ker.texi(,2132) parameter (nxp=0,nyp=0,nzp=0); mini_ker.texi(,2133) parameter (lp=0); mini_ker.texi(,2134) parameter (maxstep=1); mini_ker.texi(,2135) @end example mini_ker.texi(,2136) mini_ker.texi(,2137) If there are observations, (@pxref{Observations}), the mini_ker.texi(,2138) size of the observation vector is set in the @file{dimetaphi} sequence mini_ker.texi(,2139) by the @code{mobs} parameter. For example if there is one observation: mini_ker.texi(,2140) mini_ker.texi(,2141) @example mini_ker.texi(,2142) parameter (mobs=1); mini_ker.texi(,2143) @end example mini_ker.texi(,2144) mini_ker.texi(,2145) To specify parameters (@pxref{Parameters}), the number of such parameters mini_ker.texi(,2146) has to be declared in @file{dimetaphi} with the parameter @code{lp}. mini_ker.texi(,2147) Then, if there are two parameters, they are first declared with mini_ker.texi(,2148) mini_ker.texi(,2149) @example mini_ker.texi(,2150) parameter (lp=2); mini_ker.texi(,2151) @end example mini_ker.texi(,2152) mini_ker.texi(,2153) @node Model with explicit size mini_ker.texi(,2154) @subsection Entering the model equations, with explicit sizes mini_ker.texi(,2155) mini_ker.texi(,2156) @cindex model equations mini_ker.texi(,2157) @findex Phi_tef(.) mini_ker.texi(,2158) @findex deta_tef(.) mini_ker.texi(,2159) @vindex eta(.), explicit sizes mini_ker.texi(,2160) @vindex ff(.), explicit sizes mini_ker.texi(,2161) mini_ker.texi(,2162) When sizes are explicit, another possibility exists for entering mini_ker.texi(,2163) the model equations. The use of symbolic names, as described in mini_ker.texi(,2164) @ref{Model equations} is still possible, and it also becomes possible to mini_ker.texi(,2165) set directly the equations associated with the @code{eta(.)} mini_ker.texi(,2166) and @code{ff(.)} vectors. mini_ker.texi(,2167) mini_ker.texi(,2168) In case the symbolic names are not used, mini_ker.texi(,2169) the model equations for cells and transfers are entered using a mortran macro, mini_ker.texi(,2170) @code{f_set}@footnote{@code{fun_set}, or equivalently @code{f_set}, is a mini_ker.texi(,2171) general mortran macro associating a symbol with a fortran expression. mini_ker.texi(,2172) Here, it is the name of the symbol (@code{eta}) that has a particular meaning mini_ker.texi(,2173) for the building of the model.}, setting the @code{eta(.)} evolution with mini_ker.texi(,2174) @code{deta_tef(.)} mini_ker.texi(,2175) and the transfer definitions @code{ff(.)} with @code{Phi_tef(.)}. mini_ker.texi(,2176) mini_ker.texi(,2177) @defmac f_set Phi_tef(@var{i}) = f(eta(.),ff(.)) mini_ker.texi(,2178) This macro defines the transfer @var{i} static equation. mini_ker.texi(,2179) @code{f} is a fortran mini_ker.texi(,2180) expression which may be function of cell state variables, mini_ker.texi(,2181) @samp{eta(1)}@dots{}@samp{eta(np)} and transfers mini_ker.texi(,2182) @samp{ff(1)}@dots{}@samp{ff(mp)}. mini_ker.texi(,2183) @end defmac mini_ker.texi(,2184) mini_ker.texi(,2185) In the case of the predator-prey model, the transfer definition for mini_ker.texi(,2186) @math{\varphi_{meet}} is: mini_ker.texi(,2187) @example mini_ker.texi(,2188) f_set Phi_tef(1) = eta(1)*eta(2); mini_ker.texi(,2189) @end example mini_ker.texi(,2190) mini_ker.texi(,2191) @defmac f_set deta_tef(@var{i}) = g(eta(@var{i}),ff(.)) mini_ker.texi(,2192) This macro defines the cell state component @var{i} time evolution model. mini_ker.texi(,2193) @code{g} is a expression which may be function of cell state variables, mini_ker.texi(,2194) @samp{eta(1)}@dots{}@samp{eta(np)} and transfers mini_ker.texi(,2195) @samp{ff(1)}@dots{}@samp{ff(mp)}. mini_ker.texi(,2196) @end defmac mini_ker.texi(,2197) mini_ker.texi(,2198) The two cell equations of the predator-prey model are, with index 1 for the mini_ker.texi(,2199) prey (@math{\eta_{prey}}) and index 2 for the predator (@math{\eta_{pred}}): mini_ker.texi(,2200) mini_ker.texi(,2201) @example mini_ker.texi(,2202) f_set deta_tef(1) = apar*eta(1)-apar*ff(1); mini_ker.texi(,2203) f_set deta_tef(2) = - cpar*eta(2) + cpar*ff(1); mini_ker.texi(,2204) @end example mini_ker.texi(,2205) mini_ker.texi(,2206) The whole model is: mini_ker.texi(,2207) mini_ker.texi(,2208) @example mini_ker.texi(,2209) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,2210) ! Transfer definition mini_ker.texi(,2211) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,2212) ! rencontres (meeting) mini_ker.texi(,2213) f_set Phi_tef(1) = eta(1)*eta(2); mini_ker.texi(,2214) mini_ker.texi(,2215) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,2216) ! Cell definition mini_ker.texi(,2217) !%%%%%%%%%%%%%%%%%%%%%% mini_ker.texi(,2218) ! eta(1) : prey mini_ker.texi(,2219) ! eta(2) : predator mini_ker.texi(,2220) mini_ker.texi(,2221) f_set deta_tef(1) = apar*eta(1)-apar*ff(1); mini_ker.texi(,2222) f_set deta_tef(2) = - cpar*eta(2) + cpar*ff(1); mini_ker.texi(,2223) @end example mini_ker.texi(,2224) mini_ker.texi(,2225) The starting points for cells are entered like: mini_ker.texi(,2226) @example mini_ker.texi(,2227) ! initial state mini_ker.texi(,2228) ! ------------- mini_ker.texi(,2229) eta(1) = 1.; mini_ker.texi(,2230) eta(2) = 1.; mini_ker.texi(,2231) @end example mini_ker.texi(,2232) mini_ker.texi(,2233) If there are observations, they are entered as special transferts with mini_ker.texi(,2234) index above @code{mp}, for example: mini_ker.texi(,2235) mini_ker.texi(,2236) @example mini_ker.texi(,2237) f_set Phi_tef(mp+1) = ff(1) ; mini_ker.texi(,2238) @end example mini_ker.texi(,2239) mini_ker.texi(,2240) @node Programming with cmz directives mini_ker.texi(,2241) @section Programming with cmz directives mini_ker.texi(,2242) mini_ker.texi(,2243) @menu mini_ker.texi(Minik,2244) * Cmz directives used with Miniker:: mini_ker.texi(Minik,2245) * Using cmz directives in Miniker:: mini_ker.texi(,2246) @end menu mini_ker.texi(,2247) mini_ker.texi(Minik,2248) @node Cmz directives used with Miniker mini_ker.texi(Minik,2249) @subsection Cmz directives used with Miniker mini_ker.texi(,2250) mini_ker.texi(,2251) The main feature of cmz directive is to use code conditionnaly for a given mini_ker.texi(,2252) select flag. For example when the double precision is selected mini_ker.texi(,2253) (@pxref{Double precision}) the use of the conditionnal mini_ker.texi(,2254) @code{double} flag may be required in case there is a different subroutine mini_ker.texi(,2255) name for different types. If, for example, the user use the subroutine mini_ker.texi(,2256) @code{smysub} for simple precision and @code{dmysub} for double mini_ker.texi(,2257) precision the following code is an example of what could appear in the mini_ker.texi(,2258) user code: mini_ker.texi(,2259) mini_ker.texi(,2260) @verbatim mini_ker.texi(,2261) +IF,double mini_ker.texi(,2262) call dmysub(eta); mini_ker.texi(,2263) +ELSE mini_ker.texi(,2264) call smysub(eta); mini_ker.texi(,2265) +ENDIF mini_ker.texi(,2266) @end verbatim mini_ker.texi(,2267) mini_ker.texi(,2268) For a complete reference on cmz directives see the appendix mini_ker.texi(,2269) @ref{Cmz directives reference}. mini_ker.texi(,2270) mini_ker.texi(Minik,2271) @node Using cmz directives in Miniker mini_ker.texi(Minik,2272) @subsection Using cmz directives in Miniker mini_ker.texi(,2273) mini_ker.texi(,2274) In cmz the KEEP and DECK have their cmz directives preprocessed as part mini_ker.texi(,2275) of the source files extraction. And the +KEEP and +DECK mini_ker.texi(,2276) directives are automatically mini_ker.texi(,2277) set when creating the KEEP or DECK. With make, files with these directives mini_ker.texi(,2278) has to be created within the files that are to be preprocessed by the mini_ker.texi(,2279) cmz directives preprocessor. mini_ker.texi(,2280) mini_ker.texi(,2281) To be processed by make, a file that contains cmz directives mini_ker.texi(,2282) should have a file suffix corresponding mini_ker.texi(,2283) with the language of the resulting file and with the normal file suffix of mini_ker.texi(,2284) that language. More precisely @samp{cm} should be added before the normal mini_ker.texi(,2285) file suffix and after the @samp{.}. Therefore if the resulting file language mini_ker.texi(,2286) is associated with a suffix @samp{.@var{suf}}, the file with cmz directives mini_ker.texi(,2287) should have a @samp{.cm@var{suf}} suffix. The tradition is to have mini_ker.texi(,2288) a different suffix for main files and include files. mini_ker.texi(,2289) To add directories searched for @dfn{cmfiles} (files with cmz directives) mini_ker.texi(,2290) they should be added to the @code{CMFDIRS} makefile variable, separated mini_ker.texi(,2291) by @samp{:}. mini_ker.texi(,2292) mini_ker.texi(,2293) Rules for preprocessing of the files are defined in the file mini_ker.texi(,2294) @file{Makefile.miniker} for the file types described in mini_ker.texi(,2295) @ref{tab:cmfile_suffix}: mini_ker.texi(,2296) mini_ker.texi(,2297) @float table, tab:cmfile_suffix mini_ker.texi(,2298) @multitable {fortran preprocessed} {include/keep} {cmfile suffix} {suffix} {language} mini_ker.texi(,2299) @headitem language @tab file type @tab cmfile suffix @tab suffix @tab language mini_ker.texi(,2300) @item fortran @tab main/deck @tab .cmf @tab .f @tab ftn mini_ker.texi(,2301) @item fortran preprocessed @tab main/deck @tab .cmF @tab .F @tab f77 mini_ker.texi(,2302) @item fortran preprocessed @tab include/keep @tab .cminc @tab .inc @tab f77 mini_ker.texi(,2303) @item mortran @tab main/deck @tab .cmmtn @tab .mtn @tab mtn mini_ker.texi(,2304) @item mortran @tab include/keep @tab .cmmti @tab .mti @tab mtn mini_ker.texi(,2305) @end multitable mini_ker.texi(,2306) @caption{Association between file language, file type, file suffixes and mini_ker.texi(,2307) language identifier in cmz directives. A main file is called a @dfn{deck} mini_ker.texi(,2308) in cmz and an include file is called a @dfn{keep}.} mini_ker.texi(,2309) @end float mini_ker.texi(,2310) mini_ker.texi(,2311) @node Dynamic system analysis mini_ker.texi(Minik,2312) @chapter Dynamic analysis of systems in Miniker mini_ker.texi(,2313) mini_ker.texi(,2314) @menu mini_ker.texi(,2315) * Sensitivities:: mini_ker.texi(,2316) * Adjoint model and optimisation:: mini_ker.texi(,2317) * Kalman filter:: mini_ker.texi(,2318) * Feedback gain:: mini_ker.texi(,2319) * Stability of fastest modes:: mini_ker.texi(,2320) * Generalized TLS:: mini_ker.texi(,2321) @end menu mini_ker.texi(,2322) mini_ker.texi(,2323) @node Sensitivities mini_ker.texi(,2324) @section Automatic sensitivity computation mini_ker.texi(,2325) mini_ker.texi(,2326) @cindex sensitivities mini_ker.texi(,2327) mini_ker.texi(,2328) An obvious advantage of having acces to the Jacobian matrices along the mini_ker.texi(,2329) system trajectory concerns automatic sensitivity analyses, as either: mini_ker.texi(,2330) @itemize @bullet mini_ker.texi(,2331) @item the sensitivity of all variables to perturbation in the initial condition mini_ker.texi(,2332) of one state variable; mini_ker.texi(,2333) @item the same sensitivities to an initial pulse (or step) on a transfer; mini_ker.texi(,2334) @item the same sensitivities to a series of pulses (or steps) on a transfer; mini_ker.texi(,2335) @item the same for a change in a parameter, eventually during the run; mini_ker.texi(,2336) @item the sensitivity of the matrix of advance in state space to a change mini_ker.texi(,2337) in a parameter. mini_ker.texi(,2338) @end itemize mini_ker.texi(,2339) mini_ker.texi(,2340) This is declared in Zinit as: mini_ker.texi(,2341) mini_ker.texi(,2342) @example mini_ker.texi(,2343) ! ------------- mini_ker.texi(,2344) ! Sensitivities mini_ker.texi(,2345) ! ------------- mini_ker.texi(,2346) Sensy_to_var mini_ker.texi(,2347) < var: eta_pray, pert: INIT; mini_ker.texi(,2348) var: eta_pred, pert: INIT; mini_ker.texi(,2349) >; mini_ker.texi(,2350) @end example mini_ker.texi(,2351) mini_ker.texi(,2352) Each variable at origin of a perturbation is declared as @code{var:}, mini_ker.texi(,2353) and the type of perturbation in @code{pert:}. Here, INIT conditions are mini_ker.texi(,2354) only allowed because the two variables are states variables. For transfers, mini_ker.texi(,2355) @code{pert: pulse} corresponds to an initial pulse, @code{pert: step_resp} mini_ker.texi(,2356) and @code{pert: step_eff} to initial steps, the difference between mini_ker.texi(,2357) @code{_resp} (response form) mini_ker.texi(,2358) and @code{_eff} (effect form) concerns the mini_ker.texi(,2359) diagonal only of the sensitivity matrix mini_ker.texi(,2360) (see Feedback gains in non-linear models). mini_ker.texi(,2361) mini_ker.texi(,2362) Non initial perturbation can also be asked for: mini_ker.texi(,2363) mini_ker.texi(,2364) @example mini_ker.texi(,2365) Sensy_to_var mini_ker.texi(,2366) < mini_ker.texi(,2367) !* var: eta_courant_L, pert: init at 100; mini_ker.texi(,2368) !* var: ff_T_czcx, pert: pulse at 100 every 20; mini_ker.texi(,2369) !* var: ff_Psi_Tczcx, pert: step_eff; mini_ker.texi(,2370) !* var: ff_Psi_Tczcx, pert: step_Resp at 10 every 100; mini_ker.texi(,2371) ! *** premiers tests identiques a lorhcl.ref mini_ker.texi(,2372) var: ff_courant_L , pert: step_eff; mini_ker.texi(,2373) var: ff_T_czcx , pert: step_eff; mini_ker.texi(,2374) var: ff_Psi_Tczcx , pert: step_eff; mini_ker.texi(,2375) var: ff_Psi_Tsz , pert: pulse at 100 every 50; mini_ker.texi(,2376) >; mini_ker.texi(,2377) @end example mini_ker.texi(,2378) mini_ker.texi(,2379) In this example taken from @file{lorhcl}, a sensitivity can increase so as to mini_ker.texi(,2380) trespass the Fortran capacity, so that each sensitivity vector (matrix column) mini_ker.texi(,2381) can be reset at some time-increment @code{at III every JJJ;} mini_ker.texi(,2382) mini_ker.texi(,2383) It is noteworthy that these sensitivity analyses are not based mini_ker.texi(,2384) on difference between two runs with different initial states or mini_ker.texi(,2385) parameter values, but on the formal derivatives of the model. This method mini_ker.texi(,2386) is not only numerically robust, but is also rigorously funded as based on mini_ker.texi(,2387) the TLS of the model@footnote{For a short introduction to automatic mini_ker.texi(,2388) sensitivity analysis, see the document:@* mini_ker.texi(,2389) @url{http://lmd.jussieu.fr/zoom/doc/sensibilite.ps}, in French, mini_ker.texi(,2390) or ask for the more complete research document to a member of the TEF-ZOOM mini_ker.texi(,2391) collaboration}. mini_ker.texi(,2392) mini_ker.texi(,2393) If the @code{dimetaphi} sequence is built by the users, he should declare mini_ker.texi(,2394) the number of perturbing variables as @code{nxp=}: mini_ker.texi(,2395) mini_ker.texi(,2396) @example mini_ker.texi(,2397) parameter (nxp=np,nyp=0,nzp=0); mini_ker.texi(,2398) @end example mini_ker.texi(,2399) here, all state variables are considered as perturbing variables. mini_ker.texi(,2400) mini_ker.texi(,2401) @cindex sensitivity, output mini_ker.texi(,2402) @cindex output, sensitivity mini_ker.texi(,2403) @cindex @file{sens.data} mini_ker.texi(,2404) @cindex @file{sigma.data} mini_ker.texi(,2405) mini_ker.texi(,2406) The sensitivity vectors are output in the result files @file{sens.data} for mini_ker.texi(,2407) cells and @file{sigma.data} for transfers. In those files the first column mini_ker.texi(,2408) corresponds again with time, and the other columns are relative sensitivities of the cell mini_ker.texi(,2409) states (in @file{sens.data}) and transfers (in @file{sigma.data}) mini_ker.texi(,2410) with respect to the initial value of the perturbed state. mini_ker.texi(,2411) mini_ker.texi(,2412) In our predator-prey example, the second column of @file{sens.data} will contain mini_ker.texi(,2413) the derivative of @math{\eta_1(t)} with respect to @math{\eta_1(t=0)}. mini_ker.texi(,2414) Drawing the mini_ker.texi(,2415) second column of @file{sens.data} against the first one mini_ker.texi(,2416) gives the time evolution of the sensitivity of @code{eta-pred} mini_ker.texi(,2417) to a change in the initial value of @code{eta-pray}. One can check mini_ker.texi(,2418) in that it is set to 1 at @math{t=0}: mini_ker.texi(,2419) mini_ker.texi(,2420) @example mini_ker.texi(,2421) # Sensy_to: eta_pray 3 eta_pred 5 mini_ker.texi(,2422) # time \\ of: eta_pray eta_pred eta_pray eta_pred mini_ker.texi(,2423) 0.00000E+00 1.00000E+00 0.00000E+00 0.00000E+00 1.00000E+00 mini_ker.texi(,2424) 1.00000E-02 9.90868E-01 1.11905E-02 -1.26414E-02 9.98859E-01 mini_ker.texi(,2425) @end example mini_ker.texi(,2426) The two last columns are the state sensitivity to a change in initial conditions mini_ker.texi(,2427) of the number of predators. mini_ker.texi(,2428) mini_ker.texi(,2429) In the same way, the @var{j+1}th column of @file{sigma.data} will be the mini_ker.texi(,2430) derivative of @math{\phi_{j}(t)} with respect to @math{\eta_i(t=0)}. Here: mini_ker.texi(,2431) @example mini_ker.texi(,2432) # Sensy_to: eta_pray eta_pred mini_ker.texi(,2433) # time \\ of: ff_interact ff_interact mini_ker.texi(,2434) 0.00000E+00 1.60683E+00 8.47076E-01 mini_ker.texi(,2435) 1.00000E-02 1.59980E+00 8.18164E-01 mini_ker.texi(,2436) @end example mini_ker.texi(,2437) mini_ker.texi(,2438) the unique transfer variable gives rise to two sensitivity columns. mini_ker.texi(,2439) mini_ker.texi(,2440) Sensitivity studies are usefull to assess the mini_ker.texi(,2441) predictability properties of the corresponding system. mini_ker.texi(,2442) mini_ker.texi(,2443) @menu mini_ker.texi(,2444) @c * Initial state sensitivity:: mini_ker.texi(,2445) @c * Sensitivity to a pulse or a step on transfer:: mini_ker.texi(,2446) @c * Extended Sensitivity studies:: mini_ker.texi(,2447) * Sensitivity to a parameter:: mini_ker.texi(,2448) * Advance matrix sensitivity:: mini_ker.texi(,2449) @end menu mini_ker.texi(,2450) mini_ker.texi(,2451) mini_ker.texi(,2452) mini_ker.texi(,2453) @node Sensitivity to a parameter mini_ker.texi(,2454) @subsection Sensitivity to a parameter mini_ker.texi(,2455) mini_ker.texi(,2456) A forward sensitivity to a parameter will be computed when specified as mini_ker.texi(,2457) described in @ref{Parameters}. For example, suppose that mini_ker.texi(,2458) the sensitivity to an initial change in the @code{apar} parameter of mini_ker.texi(,2459) the predator model is of interest. mini_ker.texi(,2460) @c In that case the number of mini_ker.texi(,2461) @c parameters should be set to 1 in @file{dimetaphi}: mini_ker.texi(,2462) @c mini_ker.texi(,2463) @c @example mini_ker.texi(,2464) @c parameter (lp=2); mini_ker.texi(,2465) @c @end example mini_ker.texi(,2466) mini_ker.texi(,2467) The sensitivity calculs is turned on as a forward mini_ker.texi(,2468) parameter specified on the @code{Free_parameter} list: mini_ker.texi(,2469) mini_ker.texi(,2470) @example mini_ker.texi(,2471) Free_parameter: [fwd: apar, cpar]; mini_ker.texi(,2472) @end example mini_ker.texi(,2473) mini_ker.texi(,2474) The result are in @file{sensp.data} for cells and @file{sigmap.data} mini_ker.texi(,2475) for transfers. mini_ker.texi(,2476) mini_ker.texi(,2477) @example mini_ker.texi(,2478) # Sensy_to: pi_prandtl 3 4 pi_rayleigh_ 6 mini_ker.texi(,2479) # time \\ of: eta_courant_ eta_T_czcx eta_T_sz eta_courant_ eta_T mini_ker.texi(,2480) 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.000 mini_ker.texi(,2481) 2.00000E-03 -4.77172E-03 -3.99170E-05 3.55971E-05 -9.94770E-05 -1.004 mini_ker.texi(,2482) @end example mini_ker.texi(,2483) In the above example from @file{lorhcl} sensitivity of the three states with respect mini_ker.texi(,2484) to an initial change in two parameters are independantly given (first line also numbers mini_ker.texi(,2485) the column to easy gnuplot using). mini_ker.texi(,2486) mini_ker.texi(,2487) @node Advance matrix sensitivity mini_ker.texi(,2488) @subsection Advance matrix sensitivity mini_ker.texi(,2489) mini_ker.texi(,2490) mini_ker.texi(,2491) It is possible to look at the sensitivity of the matrix of advance in mini_ker.texi(,2492) states space (the matrix @code{aspha}) with regard to a parameter. mini_ker.texi(,2493) The parameter must be accounted for in the parameter number and be in the mini_ker.texi(,2494) parameter list, flagged as the matrix @code{mx} parameter, like in mini_ker.texi(,2495) @example mini_ker.texi(,2496) Free_parameter: [mx: apar], cpar; mini_ker.texi(,2497) @end example mini_ker.texi(,2498) mini_ker.texi(,2499) @vindex d_pi_aspha(.,.) mini_ker.texi(,2500) mini_ker.texi(,2501) This feature is associated with a selecting flag, @samp{dPi_aspha}. One gets mini_ker.texi(,2502) the result in the matrix @code{d_pi_aspha(.,.)} of dimension mini_ker.texi(,2503) (@code{np},@code{np}). mini_ker.texi(,2504) mini_ker.texi(,2505) This matrix may be used to compute other quantities, for example mini_ker.texi(,2506) it may be used to compute the sensitivity of the eigenvalues of mini_ker.texi(,2507) the state-advance matrix with regard to the @code{[fwd]} parameter. mini_ker.texi(,2508) These additional computations have to be programmed by the user in mini_ker.texi(,2509) @file{zsteer} with matrices declared and initialized in mini_ker.texi(,2510) @file{zinit}. An example is given in the example @file{lorhcl} mini_ker.texi(Minik,2511) provided with the Miniker installation files, following a method proposed mini_ker.texi(,2512) by Stephane Blanco. mini_ker.texi(,2513) mini_ker.texi(,2514) @node Adjoint model and optimisation mini_ker.texi(Minik,2515) @section Adjoint model and optimisation with Miniker mini_ker.texi(,2516) mini_ker.texi(Minik,2517) In the following a possible use of Miniker for optimisation is discussed. mini_ker.texi(Minik,2518) More precisely the use of adjoint and control laws in Miniker are presented. mini_ker.texi(,2519) Optimisation isn't the only application of these tools, but it is the most mini_ker.texi(,2520) common one. In that case the adjoint may be used to determine the gradient of a mini_ker.texi(,2521) functional to perturbations in the control laws, and an optimisation process mini_ker.texi(,2522) can use this mini_ker.texi(,2523) information to search for the optimum. mini_ker.texi(,2524) Another application of the adjoint is to compute the sensitivity of a mini_ker.texi(,2525) cost function to parameters (the ones declared in the @code{free_parameters:}' list. mini_ker.texi(,2526) Note that the cost function can be sensitive to probe's variables, even if these are mini_ker.texi(,2527) uncoupled with standard variables in the forward calculations; this is the case mini_ker.texi(,2528) when minimizing a quadratic distance function between probes (from the model) mini_ker.texi(,2529) and the corresponding measurements. mini_ker.texi(,2530) mini_ker.texi(,2531) The code is close transcription of the mathematical calculus described mini_ker.texi(,2532) in@* @url{http://www.lmd.jussieu.fr/ZOOM/doc/Adjoint.pdf} . It essentialy reverse time and mini_ker.texi(,2533) transpose the four Jacobian matrices: states and transfers are saved in array dimensionned mini_ker.texi(,2534) with @code{maxstep} Fortran parameter. mini_ker.texi(,2535) @menu mini_ker.texi(Minik,2536) * Overview of optimisation with Miniker:: mini_ker.texi(,2537) * Control laws:: mini_ker.texi(,2538) * Cost function coding and adjoint modeling:: mini_ker.texi(,2539) * Sensitivity of cost function to parameters:: mini_ker.texi(,2540) @end menu mini_ker.texi(,2541) mini_ker.texi(Minik,2542) @node Overview of optimisation with Miniker mini_ker.texi(Minik,2543) @subsection Overview of optimisation with Miniker mini_ker.texi(,2544) mini_ker.texi(,2545) @cindex adjoint mini_ker.texi(,2546) @cindex optimisation mini_ker.texi(,2547) mini_ker.texi(Minik,2548) In the proposed method, Miniker is run twice, one time forward and then mini_ker.texi(,2549) backward to determine the trajectory and the adjoint model. After that the mini_ker.texi(Minik,2550) control laws are modified by a program external to Miniker. The same steps mini_ker.texi(,2551) are repeated until convergence. More pecisely, mini_ker.texi(,2552) mini_ker.texi(,2553) @table @strong mini_ker.texi(,2554) @item forward mini_ker.texi(,2555) The command law @math{h(t)} is given (by an explicit law or taken from a file). mini_ker.texi(,2556) The trajectory is computed in a classical way, with the additionnal computation mini_ker.texi(,2557) of the functional to be optimised, @math{J}, prescribed with specific mini_ker.texi(,2558) @code{f_set} macros. The states, transfers and control laws are stored. mini_ker.texi(,2559) @item backward mini_ker.texi(,2560) The adjoint variable is computed from the last time @math{T} backward. The mini_ker.texi(,2561) time increment is re-read as it could have changed during the forward mini_ker.texi(,2562) simulation. The system is solved by using the same technics as in the forward mini_ker.texi(,2563) simulation, but with a negative time step. mini_ker.texi(,2564) @item external phase mini_ker.texi(,2565) Now the command should be corrected. This step isn't covered here, but, for mini_ker.texi(,2566) example, minuit the optimisation tool from the CERN could be used. mini_ker.texi(Minik,2567) In order to ease such a use of Miniker, the principal program has to be mini_ker.texi(,2568) compiled as a subroutine to be driven by an external program mini_ker.texi(,2569) (@pxref{Calling the model code}). mini_ker.texi(,2570) @end table mini_ker.texi(,2571) mini_ker.texi(,2572) The functionnal @math{J} to be optimised is defined as mini_ker.texi(,2573) mini_ker.texi(,2588) @noindent @math{J = psi(eta(T),phi(T),h(T)) + int_0^T l(eta(tau),phi(tau),h(tau)) d tau} mini_ker.texi(,2591) mini_ker.texi(,2592) @cindex final cost mini_ker.texi(,2593) @cindex integrand cost mini_ker.texi(,2594) mini_ker.texi(,2595) Where @math{\psi} is the final cost function, @math{l} is the integrand mini_ker.texi(,2596) cost function and @math{h} represents the control laws variations. mini_ker.texi(,2597) mini_ker.texi(,2598) The general use of the adjoint model of a system is the determination of the mini_ker.texi(,2599) gradient of this @math{J} functional to be optimised, with respect to perturbations mini_ker.texi(,2600) of the original conditions of the reference trajectory, that is, along its mini_ker.texi(,2601) GTLS@footnote{General Tangent Linear System, i.e. the TLS circulating along a trajectory. mini_ker.texi(,2602) See the explanation in the document mini_ker.texi(,2603) @url{http://www.lmd.jussieu.fr/Zoom/doc/Adjoint.pdf} (in French).}. mini_ker.texi(,2604) mini_ker.texi(,2605) @node Control laws mini_ker.texi(,2606) @subsection Control laws mini_ker.texi(,2607) mini_ker.texi(,2608) @vindex zcommand mini_ker.texi(,2609) @cindex command law mini_ker.texi(,2610) mini_ker.texi(,2611) Each control law is associated with one cell or transfer equation, meaning that a command mini_ker.texi(,2612) associated with an equation does not appear in any other equation. mini_ker.texi(,2613) It is still possible mini_ker.texi(,2614) to add commands acting anywhere by defining a transfer equal to that command. mini_ker.texi(,2615) mini_ker.texi(,2616) mini_ker.texi(,2617) The control laws associated with states are in the @code{ux_com(.)} array, mini_ker.texi(,2618) control laws associated with transfers are in the @code{uy_com(.)} array. mini_ker.texi(,2619) The control laws may be prescribed even when there is no adjoint computed, mini_ker.texi(,2620) nor any optimisation, and they are used during simulation, in which case they will mini_ker.texi(,2621) act as external sources. To enable mini_ker.texi(,2622) the use of commands, the logical flag @code{Zcommand} should be @code{.true.}. mini_ker.texi(,2623) mini_ker.texi(,2624) @cindex @file{uxcom.data} mini_ker.texi(,2625) @cindex @file{uycom.data} mini_ker.texi(,2626) mini_ker.texi(,2627) The command can be given either as: mini_ker.texi(,2628) @enumerate mini_ker.texi(,2629) @item a table of numerical mini_ker.texi(,2630) values in the files @file{uxcom.data} and @file{uycom.data}. mini_ker.texi(,2631) @item a function mini_ker.texi(,2632) @vindex zlaw mini_ker.texi(,2633) @cindex @file{zcmd_law} mini_ker.texi(,2634) @cindex @file{zcmd_law.inc} mini_ker.texi(,2635) of the problem variables. To turn that feature on the logical flag mini_ker.texi(,2636) @code{Zlaw} should be set to @code{.true.} in @file{zinit}. The sequence mini_ker.texi(,2637) @file{zcmd_law} should hold mini_ker.texi(,2638) the code filling the @code{ux_com(.)} and @code{uy_com(.)} arrays, as the code mini_ker.texi(,2639) from that sequence is used whenever the control laws are needed. mini_ker.texi(,2640) In that case the files @file{uxcom.data} and @file{uycom.data} will mini_ker.texi(,2641) be filled by the command values generated by the function along the trajectory. mini_ker.texi(,2642) @end enumerate mini_ker.texi(,2643) mini_ker.texi(,2644) For example in the Lotka-Volterra model, the parameter @code{apar} could mini_ker.texi(,2645) be a control variable. mini_ker.texi(,2646) In that case, @code{apar} would be defined as the variable @code{ux_com(1)}, mini_ker.texi(,2647) and either entered as a law mini_ker.texi(,2648) in the sequence @file{zcmd_law} , either written in the file @file{uxcom.data} mini_ker.texi(,2649) step by step. In that case, there must be a perfect corresponodence between time mini_ker.texi(,2650) of the commands and time of the run. mini_ker.texi(,2651) mini_ker.texi(,2652) @node Cost function coding and adjoint modeling mini_ker.texi(,2653) @subsection Cost function coding and adjoint modeling mini_ker.texi(,2654) mini_ker.texi(,2655) @vindex zback mini_ker.texi(,2656) @findex cout_Psi mini_ker.texi(,2657) @findex cout_l mini_ker.texi(,2658) mini_ker.texi(,2659) First of all the flag @code{zback} should be set to @code{.true.} in order to mini_ker.texi(,2660) allow adjoint model computation: mini_ker.texi(,2661) mini_ker.texi(,2662) @example mini_ker.texi(,2663) Zback=.true.; mini_ker.texi(,2664) @end example mini_ker.texi(,2665) mini_ker.texi(,2666) The two functions @code{cout_Psi} corresponding with the final cost and mini_ker.texi(,2667) @code{cout_l} corresponding with the integrand cost are set up with the mini_ker.texi(,2668) @code{f_set} macros. mini_ker.texi(,2669) mini_ker.texi(,2670) @defmac f_set cout_Psi = f(eta(.),ff(.),ux_com(.),uy_com(.)) mini_ker.texi(,2671) This macro defines the final cost function. mini_ker.texi(,2672) @code{f} is a fortran mini_ker.texi(,2673) expression which may be function of cell state variables, mini_ker.texi(,2674) @samp{eta(1)}@dots{}@samp{eta(np)}, transfers mini_ker.texi(,2675) @samp{ff(1)}@dots{}@samp{ff(mp)}, mini_ker.texi(,2676) state control laws mini_ker.texi(,2677) @samp{ux_com(1)}@dots{}@samp{ux_com(np)}, and transfer control laws mini_ker.texi(,2678) @samp{uy_com(1)}@dots{}@samp{uy_com(mp)}. mini_ker.texi(,2679) @end defmac mini_ker.texi(,2680) mini_ker.texi(,2681) @defmac f_set cout_l = f(eta(.),ff(.),ux_com(.),uy_com(.)) mini_ker.texi(,2682) This macro defines the integrand cost function. mini_ker.texi(,2683) @code{f} is a fortran mini_ker.texi(,2684) expression which may be function of cell state variables, mini_ker.texi(,2685) @samp{eta(1)}@dots{}@samp{eta(np)}, transfers mini_ker.texi(,2686) @samp{ff(1)}@dots{}@samp{ff(mp)}, mini_ker.texi(,2687) state control laws mini_ker.texi(,2688) @samp{ux_com(1)}@dots{}@samp{ux_com(np)}, and transfer control laws mini_ker.texi(,2689) @samp{uy_com(1)}@dots{}@samp{uy_com(mp)}. mini_ker.texi(,2690) @end defmac mini_ker.texi(,2691) mini_ker.texi(,2692) For example, the following code sets a cost function for the masselottes mini_ker.texi(,2693) model: mini_ker.texi(,2694) mini_ker.texi(,2695) @example mini_ker.texi(,2696) ! Initialisation mini_ker.texi(,2697) F_set cout_Psi = eta_move(inode:1); mini_ker.texi(,2698) !and f_set cout_l integrand in the functionnal mini_ker.texi(,2699) F_set cout_l = 0.; mini_ker.texi(,2700) @end example mini_ker.texi(,2701) mini_ker.texi(,2702) In that example the functional is reduced to the final value mini_ker.texi(,2703) of the first state component. mini_ker.texi(,2704) Here, the adjoint vector will correspond to the final sensitivity mini_ker.texi(,2705) (at @math{t=0}) of mini_ker.texi(,2706) that component (here the first masselotte position) to a perturbation in mini_ker.texi(,2707) all initial conditions@footnote{For detailed explanation of the adjoint model, mini_ker.texi(,2708) see the document in mini_ker.texi(,2709) @uref{http://www.lmd.jussieu.fr/@/ZOOM/doc/Adjoint.pdf,pdf} mini_ker.texi(,2710) or @uref{http://www.lmd.jussieu.fr/@/ZOOM/doc/Adjoint.pdf,.ps.gz}}. mini_ker.texi(,2711) mini_ker.texi(,2712) @c In the code, the variables @code{v_adj(.)} and @code{w_adj(.)} mini_ker.texi(,2713) @c are respectively adjoint to @code{eta(.)} and @code{ff(.)}. They are written in the mini_ker.texi(,2714) @c two files: @file{vadj.data} and @file{wadj.data}. mini_ker.texi(,2715) The following variables are set during the backward phase, and output mini_ker.texi(,2716) in the associated files: mini_ker.texi(,2717) mini_ker.texi(,2718) mini_ker.texi(,2719) @multitable {@code{gradufj(.)}} {@file{hamilton.data}} {time increment, hamiltonian, cost function increment} mini_ker.texi(,2720) @headitem var @tab file @tab explanation mini_ker.texi(,2721) @c @item @code{} @tab @file{.data} @tab @tab mini_ker.texi(,2722) @item @code{v_adj(.)} @tab @file{vadj.data} @tab adjoint to @code{eta(.)} mini_ker.texi(,2723) @item @code{w_adj(.)} @tab @file{wadj.data} @tab adjoint to @code{ff(.)} mini_ker.texi(,2724) @item @code{wadj(mp+.)} @tab @file{gradmuj.data} @tab adjoint to @code{ff(mp+.)} mini_ker.texi(,2725) @item @code{graduej(.)} @tab @file{gradxj.data} @tab adjoint to @code{ux_com(.)} mini_ker.texi(,2726) @item @code{gradufj(.)} @tab @file{gradyj.data} @tab adjoint to @code{uy_com(.)} mini_ker.texi(,2727) @item @code{hamilton} @tab @file{hamilton.data} @tab time increment, hamiltonian, cost function increment mini_ker.texi(,2728) @end multitable mini_ker.texi(,2729) mini_ker.texi(,2730) @node Sensitivity of cost function to parameters mini_ker.texi(,2731) @subsection Sensitivity of cost function to parameters mini_ker.texi(,2732) mini_ker.texi(,2733) @cindex @file{gradpj.data} mini_ker.texi(,2734) mini_ker.texi(,2735) The sensitivity of the cost function to all the parameters given as mini_ker.texi(,2736) arguments of @code{Free_parameters} is computed. For the mini_ker.texi(,2737) predator model the sensitivity of a cost function consisting in mini_ker.texi(,2738) the integral of the predator population with respect with mini_ker.texi(,2739) @code{apar} an @code{cpar} is obtained with a number of parameters mini_ker.texi(,2740) set to 2 in @file{dimetaphi}: mini_ker.texi(,2741) mini_ker.texi(,2742) @example mini_ker.texi(,2743) parameter (lp=2); mini_ker.texi(,2744) @end example mini_ker.texi(,2745) mini_ker.texi(,2746) And the cost function and @code{Free_parameters} list in @file{zinit}: mini_ker.texi(,2747) mini_ker.texi(,2748) @example mini_ker.texi(,2749) f_set cout_Psi = eta(2); mini_ker.texi(,2750) f_set cout_l = eta(2); mini_ker.texi(,2751) Free_parameters: apar,cpar; mini_ker.texi(,2752) @end example mini_ker.texi(,2753) mini_ker.texi(,2754) @code{apar} and @code{cpar} also have to be given a value. mini_ker.texi(,2755) The result is output in @file{gradpj.data}. mini_ker.texi(,2756) mini_ker.texi(,2757) @node Kalman filter mini_ker.texi(,2758) @section Kalman filter mini_ker.texi(,2759) mini_ker.texi(,2760) @cindex Kalman filter mini_ker.texi(,2761) @cindex variance-covariance matrices, general mini_ker.texi(,2762) @cindex observations, general mini_ker.texi(,2763) mini_ker.texi(,2764) The Kalman filter allows for data assimilation along the model run. In mini_ker.texi(,2765) that case it is assumed that there is a real-world model with stochastic mini_ker.texi(,2766) perturbations on the states, and that noisy observations are available. mini_ker.texi(Minik,2767) The situation implemented in Miniker corresponds to a continuous mini_ker.texi(,2768) stochastic perturbation on the state, and discrete noisy observations. mini_ker.texi(,2769) In the @acronym{TEF} this leads to: mini_ker.texi(,2770) mini_ker.texi(,2789) mini_ker.texi(,2790) @noindent @math{d eta(t)/d t = g(eta(t),phi(t)) + W(t) mu@* mini_ker.texi(,2791) phi(i) = f(eta(t),phi(t))@* mini_ker.texi(,2792) omega(t) = h(eta(t), phi(t)) + nu } mini_ker.texi(,2793) mini_ker.texi(,2796) mini_ker.texi(,2797) @c FIXME partout omega mini_ker.texi(,2798) @c (notice that in this paragraph, $\omega$ stands for the probe vector $\mu$ elsewhere, mini_ker.texi(,2799) @c and $\mu$ is here a noise source. mini_ker.texi(,2800) mini_ker.texi(,2801) The observations @math{\omega} are available at discrete time steps @math{t=s_i}. The mini_ker.texi(,2802) stochastic perturbation on state, @math{\mu} is characterized by a mini_ker.texi(,2803) variance-covariance matrix @math{Q} and the noise on the observation, mini_ker.texi(,2804) @math{\nu} has a variance-covariance matrix @math{R}. @math{W} relates states mini_ker.texi(,2805) with stochastic perturbations. At each time step the Kalman filter recomputes mini_ker.texi(,2806) an estimation of the state and the variance-covariance matrix of the state. mini_ker.texi(,2807) mini_ker.texi(,2808) In the following we use the example of a linear model with perturbation mini_ker.texi(,2809) on state and observation of state. The model has 3 states and 3 corresponding mini_ker.texi(,2810) transfers (equal to the states), but the error on the state is of dimension mini_ker.texi(,2811) 2. The 3 states are observed. The corresponding equations read: mini_ker.texi(,2812) mini_ker.texi(,2862) mini_ker.texi(,2864) mini_ker.texi(,2865) Cells:@* mini_ker.texi(,2866) @noindent @math{d eta_1/dt = a_11 eta_1 + a_12 phi_2 + a_13 phi_3 + W_11 mu_1 + W_12 mu_2@* mini_ker.texi(,2867) d eta_2/dt = a_21 phi_1 + a_22 eta_2 + a_23 phi_3 + W_21 mu_1 + W_22 mu_2@* mini_ker.texi(,2868) d eta_3/dt = a_31 phi_1 + a_32 phi_2 + a_33 eta_3 + W_31 mu_1 + W_32 mu_2} mini_ker.texi(,2869) mini_ker.texi(,2870) Transfers:@* mini_ker.texi(,2871) @noindent @math{phi_1 = eta_1@* mini_ker.texi(,2872) phi_2 = eta_2@* mini_ker.texi(,2873) phi_3 = eta_3} mini_ker.texi(,2874) mini_ker.texi(,2875) Observations:@* mini_ker.texi(,2876) @noindent @math{omega_1 = phi_1 + nu_1@* mini_ker.texi(,2877) omega_2 = eta_2 + nu_2@* mini_ker.texi(,2878) omega_3 = eta_3 + nu_3} mini_ker.texi(,2879) mini_ker.texi(,2882) mini_ker.texi(,2883) @menu mini_ker.texi(,2884) * Coding the Kalman filter:: mini_ker.texi(,2885) * Kalman filter run and output:: mini_ker.texi(,2886) * Executing code after the analysis:: mini_ker.texi(,2887) @end menu mini_ker.texi(,2888) mini_ker.texi(,2889) @node Coding the Kalman filter mini_ker.texi(,2890) @subsection Coding the Kalman filter mini_ker.texi(,2891) mini_ker.texi(,2892) @vindex zkalman mini_ker.texi(,2893) mini_ker.texi(,2894) First of all the Kalman filter code should be activated. The observations mini_ker.texi(,2895) code is also required (@pxref{Observations}). mini_ker.texi(,2896) If cmz is used the code mini_ker.texi(,2897) should be selected with the select flag kalman mini_ker.texi(,2898) in the @file{selseq.kumac}: mini_ker.texi(,2899) mini_ker.texi(,2900) @example mini_ker.texi(,2901) sel kalman mini_ker.texi(,2902) @end example mini_ker.texi(,2903) mini_ker.texi(,2904) With make the @code{kalman} variable should be set to 1: mini_ker.texi(,2905) mini_ker.texi(,2906) @example mini_ker.texi(,2907) kalman = 1 mini_ker.texi(,2908) @end example mini_ker.texi(,2909) mini_ker.texi(,2910) The kalman code is actually used by setting the flag mini_ker.texi(,2911) @code{zkalman} to @code{.true.}, for example in the @file{zinit}: mini_ker.texi(,2912) mini_ker.texi(,2913) @example mini_ker.texi(,2914) zkalman = .True.; mini_ker.texi(,2915) @end example mini_ker.texi(,2916) mini_ker.texi(,2917) @c This will set the @code{zobs} and @code{zdata} flags to @code{.true.} mini_ker.texi(,2918) @c (@pxref{Observations and data}). mini_ker.texi(,2919) mini_ker.texi(,2920) With the Kalman filter the dimension of estimated states, of the error mini_ker.texi(,2921) on the state and of the mini_ker.texi(,2922) observation, the @math{W} matrix, the observation function, mini_ker.texi(,2923) the initial mini_ker.texi(,2924) variance-covariance matrices on the state and the variance-covariance matrices mini_ker.texi(,2925) of errors have to be given. mini_ker.texi(,2926) mini_ker.texi(,2927) @menu mini_ker.texi(,2928) * Kalman filter vectors dimensions:: mini_ker.texi(,2929) * Error and observation matrices:: mini_ker.texi(,2930) @end menu mini_ker.texi(,2931) mini_ker.texi(,2932) @node Kalman filter vectors dimensions mini_ker.texi(,2933) @subsubsection Kalman filter vectors dimensions mini_ker.texi(,2934) mini_ker.texi(,2935) @cindex error vector dimension mini_ker.texi(,2936) @cindex @file{dimetaphi}, Kalman filter mini_ker.texi(,2937) mini_ker.texi(,2938) These dimensions should be set in the @file{zinit} sequence. mini_ker.texi(,2939) The size of the estimated states is given by the parameter @code{nkp}. mini_ker.texi(,2940) You can set this to @code{np} if all the states are estimated, but in case mini_ker.texi(,2941) there are some deterministic state variables, @code{nkp} may be less than mini_ker.texi(,2942) @code{np}. In that case the first @code{nkp} elements of @code{eta(.)} mini_ker.texi(,2943) will be estimated using the Kalman filter. mini_ker.texi(,2944) mini_ker.texi(,2945) The error on state dimension is associated with the parameter @code{nerrp} mini_ker.texi(,2946) and the size of the observations vector is @code{mobs} mini_ker.texi(,2947) (@pxref{Observations}). In our example the dimensions are set with: mini_ker.texi(,2948) mini_ker.texi(,2949) @example mini_ker.texi(,2950) parameter (nkp=np); mini_ker.texi(,2951) parameter (mobs=3); mini_ker.texi(,2952) parameter (nerrp=2); mini_ker.texi(,2953) @end example mini_ker.texi(,2954) mini_ker.texi(,2955) All the states are estimated, mini_ker.texi(,2956) there are 3 observation functions and the error on the state vector is of mini_ker.texi(,2957) dimension 2. mini_ker.texi(,2958) mini_ker.texi(,2959) If the sizes are set explicitely, the parameters should be set in mini_ker.texi(,2960) @file{dimetaphi}. mini_ker.texi(,2961) mini_ker.texi(,2962) @node Error and observation matrices mini_ker.texi(,2963) @subsubsection Error and observation matrices mini_ker.texi(,2964) mini_ker.texi(,2965) @cindex variance-covariance matrices mini_ker.texi(,2966) @cindex observations mini_ker.texi(,2967) @cindex @file{zinit}, Kalman filter mini_ker.texi(,2968) mini_ker.texi(,2969) @subsubheading Initial variance-covariance matrix on the state mini_ker.texi(,2970) mini_ker.texi(,2971) @cindex initial variance-covariance on states mini_ker.texi(,2972) @vindex covfor(.,.) mini_ker.texi(,2973) mini_ker.texi(,2974) The variance-covariance on the state matrix is @code{covfor(.,.)}. The initial mini_ker.texi(,2975) values have to be given for this matrix, as in our example: mini_ker.texi(,2976) mini_ker.texi(,2977) @example mini_ker.texi(,2978) covfor(1,1) = 1000.; covfor(1,2) = 10.; covfor(1,3) = 10.; mini_ker.texi(,2979) covfor(2,1) = 10.; covfor(2,2) = 5000.; covfor(2,3) = 5.; mini_ker.texi(,2980) covfor(3,1) = 10.; covfor(3,2) = 5.; covfor(3,3) = 2000.; mini_ker.texi(,2981) @end example mini_ker.texi(,2982) mini_ker.texi(,2983) This matrix is updated by the filter at each time step because the states mini_ker.texi(,2984) are pertubated by some noise, and when assimilation takes place as new mini_ker.texi(,2985) information reduce the error. mini_ker.texi(,2986) mini_ker.texi(,2987) @subsubheading Observations and error on state matrix mini_ker.texi(,2988) mini_ker.texi(,2989) @cindex variance-covariance matrix on state mini_ker.texi(,2990) @vindex mereta(.,.) mini_ker.texi(,2991) mini_ker.texi(,2992) The matrix that relates errors on states vector components to states, mini_ker.texi(,2993) corresponding with @math{W} is @code{mereta(.,.)}. In our example it is mini_ker.texi(,2994) set by: mini_ker.texi(,2995) mini_ker.texi(,2996) @example mini_ker.texi(,2997) mereta(1,1) = 1.; mereta(1,2) = 0.; mini_ker.texi(,2998) mereta(2,1) = 0.; mereta(2,2) = 1.; mini_ker.texi(,2999) mereta(3,1) = 0.5; mereta(3,2) = 0.5; mini_ker.texi(,3000) @end example mini_ker.texi(,3001) mini_ker.texi(,3002) The observation functions are set by a @code{f_set} macro with mini_ker.texi(,3003) @code{Obs_tef(.)} as described in @ref{Observations}. mini_ker.texi(,3004) In our example the observation functions are set by: mini_ker.texi(,3005) mini_ker.texi(,3006) @example mini_ker.texi(,3007) f_set Obs_tef(1) = ff(1) ; mini_ker.texi(,3008) f_set Obs_tef(2) = eta(2); mini_ker.texi(,3009) f_set Obs_tef(3) = eta(3); mini_ker.texi(,3010) @end example mini_ker.texi(,3011) mini_ker.texi(,3012) @subsubheading Error variance-covariance matrices mini_ker.texi(,3013) mini_ker.texi(,3014) @cindex variance-covariance error mini_ker.texi(,3015) @vindex covobs(.,.) mini_ker.texi(,3016) mini_ker.texi(,3017) The variance-covariance matrix on observation noise is @code{covobs(.,.)} mini_ker.texi(,3018) set, in our example, by: mini_ker.texi(,3019) mini_ker.texi(,3020) @example mini_ker.texi(,3021) covobs(1,1) = 0.3; covobs(1,2) = 0.; covobs(1,3) = 0.; mini_ker.texi(,3022) covobs(2,1) = 0.; covobs(2,2) = 0.1; covobs(2,3) = 0.; mini_ker.texi(,3023) covobs(3,1) = 0.; covobs(3,2) = 0.; covobs(3,3) = 0.2; mini_ker.texi(,3024) @end example mini_ker.texi(,3025) mini_ker.texi(,3026) @vindex coveta(.,.) mini_ker.texi(,3027) The variance-covariance matrix on state noise is @code{coveta(.,.)} mini_ker.texi(,3028) set, in our example, by: mini_ker.texi(,3029) mini_ker.texi(,3030) @example mini_ker.texi(,3031) coveta(1,1) = 0.2; coveta(1,2) = 0.001; mini_ker.texi(,3032) coveta(2,1) = 0.001; coveta(2,2) = 0.1; mini_ker.texi(,3033) @end example mini_ker.texi(,3034) mini_ker.texi(,3035) These matrices are not changed during the run of the model as part mini_ker.texi(,3036) of the filtering process. They may be changed by the user in @file{zsteer}. mini_ker.texi(,3037) mini_ker.texi(,3038) @node Kalman filter run and output mini_ker.texi(,3039) @subsection Kalman filter run and output mini_ker.texi(,3040) mini_ker.texi(,3041) @menu mini_ker.texi(,3042) * Feeding the observations:: mini_ker.texi(,3043) * Kalman filter results:: mini_ker.texi(,3044) @end menu mini_ker.texi(,3045) mini_ker.texi(,3046) @node Feeding the observations mini_ker.texi(,3047) @subsubsection Feeding the observations to the model mini_ker.texi(,3048) mini_ker.texi(,3049) @vindex vobs(.) mini_ker.texi(,3050) @vindex zgetobs mini_ker.texi(,3051) @cindex @file{zsteer}, Kalman filter mini_ker.texi(,3052) mini_ker.texi(,3053) The observations must be made available to the model during the run. These mini_ker.texi(,3054) observations are set in the @code{vobs(.)} array, and the assimilation mini_ker.texi(,3055) (also called the analysis step of the filter) takes mini_ker.texi(,3056) place if the logical variable @code{zgetobs} is @code{.true.} mini_ker.texi(,3057) (@pxref{Data}). mini_ker.texi(,3058) mini_ker.texi(,3059) These steps are mini_ker.texi(,3060) typically performed in the @file{zsteer} sequence. In this sequence there should mini_ker.texi(,3061) be some code such that when there are data ready to mini_ker.texi(,3062) be assimilated, @code{zgetobs} is set to @code{.true.} and the data is mini_ker.texi(,3063) stored in @code{vobs(.)}, ready for the next step processing. mini_ker.texi(,3064) mini_ker.texi(,3065) @node Kalman filter results mini_ker.texi(,3066) @subsubsection Kalman filter results mini_ker.texi(,3067) mini_ker.texi(,3068) @cindex results, Kalman filter mini_ker.texi(,3069) @cindex Kalman filter results mini_ker.texi(,3070) @cindex output, Kalman filter mini_ker.texi(,3071) @cindex Kalman filter output mini_ker.texi(,3072) @cindex @file{data.data} mini_ker.texi(,3073) mini_ker.texi(,3074) The estimated states and transfers are still in the same @samp{.data} files, mini_ker.texi(,3075) @file{res.data} and @file{tr.data} and there is the additional file with mini_ker.texi(,3076) observations, called @file{obs.data} (@pxref{Observations}). mini_ker.texi(,3077) Each time @code{zgetobs} is @code{.true.} the data, and the optimally mini_ker.texi(,3078) weighted innovations are output mini_ker.texi(,3079) in the file associated with data, @file{data.data} (@pxref{Data}). mini_ker.texi(,3080) mini_ker.texi(,3081) @node Executing code after the analysis mini_ker.texi(,3082) @subsection Executing code after the analysis mini_ker.texi(,3083) mini_ker.texi(,3084) The analysis takes place before the time step advance when @code{zgetobs} mini_ker.texi(,3085) is @code{.true.}. It may be usefull to add some code after the analysis mini_ker.texi(,3086) and before the time step advance. For example the analysis may lead to mini_ker.texi(,3087) absurd values for some states or parameters, it could be usefull to correct mini_ker.texi(,3088) them in that case. The sequence included after the analysis is called mini_ker.texi(,3089) @file{kalsteer}. At this point, in addition to the usual variables mini_ker.texi(,3090) the following variables could be usefull: mini_ker.texi(,3091) mini_ker.texi(,3092) @vtable @code mini_ker.texi(,3093) @item etafor(.) mini_ker.texi(,3094) The state before the analysis. mini_ker.texi(,3095) @item kgain(.) mini_ker.texi(,3096) The Kalman gain. mini_ker.texi(,3097) @item innobs(.) mini_ker.texi(,3098) The innovation vector (observations coherent with the states minus data mini_ker.texi(,3099) values). mini_ker.texi(,3100) @item covana(.,.) mini_ker.texi(,3101) The variance-covariance error matrix after the analysis. mini_ker.texi(,3102) @end vtable mini_ker.texi(,3103) mini_ker.texi(,3104) At each time step the derivative of the observation function with respect mini_ker.texi(,3105) to transfer and cells variables are recomputed. The elimination of mini_ker.texi(,3106) transfers is also performed to get the partial derivative of the observation mini_ker.texi(,3107) function of the equivalent model, with states only, with respect to the mini_ker.texi(,3108) states. In other words, the Kalman filter does not follow the TEF formalism, because mini_ker.texi(,3109) the advance of the var-covar matrix could not yet be set in the TEF form. mini_ker.texi(,3110) @c There is a corresponding additional matrix: mini_ker.texi(,3111) mini_ker.texi(,3112) @vtable @code mini_ker.texi(,3113) @c @item obetad(.,.) mini_ker.texi(,3114) @c derivative of observation function with respect to transfers. mini_ker.texi(,3115) @c @item obphid(.,.) mini_ker.texi(,3116) @c derivative of observation function with respect to cell variables. mini_ker.texi(,3117) @item obspha(.,.) mini_ker.texi(,3118) derivative of observation function in state space with respect to mini_ker.texi(,3119) cell variables. mini_ker.texi(,3120) @end vtable mini_ker.texi(,3121) mini_ker.texi(,3122) mini_ker.texi(,3123) @node Feedback gain mini_ker.texi(,3124) @section Feedback gain mini_ker.texi(,3125) mini_ker.texi(,3126) mini_ker.texi(,3127) @cindex Borel sweep mini_ker.texi(,3128) @cindex Feedback gain mini_ker.texi(,3129) mini_ker.texi(,3130) The feedback dynamic gain associated with a feedback loop mini_ker.texi(,3131) can be expressed as the inverse Borel mini_ker.texi(,3132) transform of the coefficient of the reduced scalar mini_ker.texi(,3133) coupling matrix, @math{g(\tau)}, mini_ker.texi(,3134) associated with a transfer. mini_ker.texi(,3135) A Borel sweep provides this @math{g(\tau)}. Therefore it is mini_ker.texi(,3136) an interesting tool for the characterization of the feedback loop@footnote{ mini_ker.texi(,3137) More generally, the Borel sweep allows mini_ker.texi(,3138) the numerical study of the dependency in @math{\tau} of the Borel transform mini_ker.texi(,3139) of various coefficients in the system coupling matrix.}. mini_ker.texi(,3140) mini_ker.texi(,3141) As explained in the mini_ker.texi(,3142) ZOOM web page document mini_ker.texi(,3143) @url{http://www.lmd.jussieu.fr/@/ZOOM/doc/@/Feedback_Gain.pdf}, mini_ker.texi(,3144) this allows for the calculation of the mini_ker.texi(,3145) dynamic gain and factor of any feedback that goes through a unique mini_ker.texi(,3146) transfer variable. An example of the conclusions that can be drawn from such mini_ker.texi(,3147) an analysis is provided in the same document. mini_ker.texi(,3148) mini_ker.texi(,3156) mini_ker.texi(,3157) mini_ker.texi(,3158) For linear systems -- whose GTLS are autonomous along the whole trajectory -- mini_ker.texi(,3159) the @math{\tau} function of the mini_ker.texi(,3160) feedback gain is independent of the position on the system trajectory. mini_ker.texi(,3161) But in general it is dependant, and one can analyse the function mini_ker.texi(,3162) @math{g(\tau;t)} defined on a segment @math{t} of the trajectory. mini_ker.texi(,3163) mini_ker.texi(,3164) The document introducing the TEF-ZOOM technique explains how a Crank-Nicolson mini_ker.texi(,3165) scheme for the time discretisation mini_ker.texi(,3166) symbolically gives the solution of the Borel transform of the system. One can mini_ker.texi(,3167) identify the @code{dt} variable with the Borel @math{\tau} within a mini_ker.texi(,3168) factor @math{2}. Hence, to numerically study the @math{\tau} dependency of mini_ker.texi(,3169) the transform of various coefficients in the system coupling matrix at one mini_ker.texi(,3170) point in time, one can calculate the Borel transform of the TLS solutions mini_ker.texi(,3171) by making a time-step sweep. mini_ker.texi(,3172) mini_ker.texi(,3173) The function @math{g(\tau;t)} is simply output for the feedback gain mini_ker.texi(,3174) attached to a unique @code{ff(k)} transfer variable. mini_ker.texi(,3175) All the relevant informations should be entered in the @file{zinit} sequence. mini_ker.texi(,3176) mini_ker.texi(,3177) @menu mini_ker.texi(,3178) * Specifying the Borel sweep:: mini_ker.texi(,3179) * Borel sweep results:: mini_ker.texi(,3180) @end menu mini_ker.texi(,3181) mini_ker.texi(,3182) @node Specifying the Borel sweep mini_ker.texi(,3183) @subsection Specifying the Borel sweep mini_ker.texi(,3184) mini_ker.texi(,3185) @vindex ZBorel mini_ker.texi(,3186) mini_ker.texi(,3187) First of all the logical flag @code{ZBorel} should be raised: mini_ker.texi(,3188) mini_ker.texi(,3189) @example mini_ker.texi(,3190) ZBorel=.true.; mini_ker.texi(,3191) @end example mini_ker.texi(,3192) mini_ker.texi(,3193) @vindex index_ff_gain mini_ker.texi(,3194) The index of the studied transfer is given in the @code{index_ff_gain} mini_ker.texi(,3195) variable mini_ker.texi(,3196) @example mini_ker.texi(,3197) index_ff_gain=7; mini_ker.texi(,3198) @end example mini_ker.texi(,3199) mini_ker.texi(,3200) At each time step a Borel sweep may be performed. The time steps of interest mini_ker.texi(,3201) are mini_ker.texi(,3202) specified with three variables, one for the first step, one for the last step mini_ker.texi(,3203) and one for the number of steps between two Borel sweeps: mini_ker.texi(,3204) mini_ker.texi(,3205) @vtable @code mini_ker.texi(,3206) @item istep_B_deb mini_ker.texi(,3207) First time step for the Borel sweep. mini_ker.texi(,3208) @item istep_B_fin mini_ker.texi(,3209) Last time step for the Borel sweep. mini_ker.texi(,3210) @item istep_B_inc mini_ker.texi(,3211) Number of time steps between Borel sweeps. mini_ker.texi(,3212) @end vtable mini_ker.texi(,3213) mini_ker.texi(,3214) In the following examples Borel sweeps are performed from the mini_ker.texi(,3215) time step 1000 up to the time step 1200, with a sweep at each time step: mini_ker.texi(,3216) @example mini_ker.texi(,3217) istep_B_deb=1000; mini_ker.texi(,3218) istep_B_fin=1200; mini_ker.texi(,3219) istep_B_inc=1; mini_ker.texi(,3220) @end example mini_ker.texi(,3221) mini_ker.texi(,3222) mini_ker.texi(,3223) For each Borel sweep, the range of the @math{\tau} variable should be mini_ker.texi(,3224) set. As this is a multiplicative variable the initial value, a multiplicative mini_ker.texi(,3225) factor and the number of values are to be given. mini_ker.texi(,3226) mini_ker.texi(,3227) @vtable @code mini_ker.texi(,3228) @item tau_B_ini mini_ker.texi(,3229) Initial value for @math{\tau}. mini_ker.texi(,3230) @item tau_B_mult mini_ker.texi(,3231) Multiplicative factor for sweep in @math{tau}. mini_ker.texi(,3232) @item itau_max mini_ker.texi(,3233) Number of @math{\tau} values. mini_ker.texi(,3234) @end vtable mini_ker.texi(,3235) mini_ker.texi(,3236) For example, in the following, at each time step, the Borel mini_ker.texi(,3237) transform will be computed for @math{\tau} values mini_ker.texi(,3238) starting at @math{0.2} and then multiplied a hundred times by @math{\sqrt{\sqrt{2}}} mini_ker.texi(,3239) mini_ker.texi(,3240) @example mini_ker.texi(,3241) tau_B_ini=0.2; mini_ker.texi(,3242) tau_B_mult=sqrt(sqrt(2.)); mini_ker.texi(,3243) itau_max=100; mini_ker.texi(,3244) @end example mini_ker.texi(,3245) mini_ker.texi(,3246) When the initial value of @math{\tau} is set to a negative value mini_ker.texi(,3247) (@i{i.e.} @code{tau_B_ini=-0.2;}), mini_ker.texi(,3248) the Borel sweep will first be applied with @code{itau_max} negative values mini_ker.texi(,3249) for @code{-0.2}, @code{tau_B_mult*(-0.2)},..., then for the zero value, mini_ker.texi(,3250) and finally for the symetric positive values, resulting in @code{2*itau_max+1} mini_ker.texi(,3251) values for @math{\tau}. mini_ker.texi(,3252) mini_ker.texi(,3253) The whole example reads mini_ker.texi(,3254) mini_ker.texi(,3255) @example mini_ker.texi(,3256) ! ------------------- mini_ker.texi(,3257) ! Feedback gain mini_ker.texi(,3258) ! Borel mini_ker.texi(,3259) ! ------------------- mini_ker.texi(,3260) ZBorel=.true.; mini_ker.texi(,3261) if ZBorel mini_ker.texi(,3262) < istep_B_deb=1000; mini_ker.texi(,3263) istep_B_fin=1200; mini_ker.texi(,3264) istep_B_inc=1; mini_ker.texi(,3265) ; mini_ker.texi(,3266) index_ff_gain=7; mini_ker.texi(,3267) tau_B_ini=0.2; mini_ker.texi(,3268) tau_B_mult=sqrt(sqrt(2.)); mini_ker.texi(,3269) itau_max=100; mini_ker.texi(,3270) z_pr/Borel/:tau_B_mult,tau_B_ini*(tau_B_mult)**itau_max; mini_ker.texi(,3271) >; mini_ker.texi(,3272) @end example mini_ker.texi(,3273) mini_ker.texi(,3274) @findex zborel for mini_ker.texi(,3275) mini_ker.texi(,3276) Instead of using the index of the transfer in @code{index_ff_gain} it is mini_ker.texi(,3277) possible to specify the name of the transfer.@c , whenever mini_ker.texi(,3278) @c the symbolic model description is used (@pxref{Symbolic model description}). mini_ker.texi(,3279) In that case the transfer is specified mini_ker.texi(,3280) by the @code{zborel for} macro. For example if the transfer selected for the mini_ker.texi(,3281) feedback gain computation is @var{b_transfer}, it can be selected mini_ker.texi(,3282) with: mini_ker.texi(,3283) mini_ker.texi(,3284) @example mini_ker.texi(,3285) zborel for: @var{b_transfer}; mini_ker.texi(,3286) @end example mini_ker.texi(,3287) mini_ker.texi(,3288) @node Borel sweep results mini_ker.texi(,3289) @subsection Borel sweep results mini_ker.texi(,3290) mini_ker.texi(,3291) @cindex Borel sweep results mini_ker.texi(,3292) @cindex results, Borel sweep mini_ker.texi(,3293) @cindex Borel sweep graphics mini_ker.texi(,3294) @cindex graphics, Borel sweep mini_ker.texi(,3295) mini_ker.texi(,3296) The file @file{tau_Borel.data} gives the @math{\tau} values of the @var{tau} sweep, mini_ker.texi(,3297) and the file @file{gains.data} records the feedback gain function values of mini_ker.texi(,3298) @math{g(\tau)}, with mini_ker.texi(,3299) one line for each sweep along the trajectory. In the 1.01 version, a new mini_ker.texi(,3300) feature is also provided giving the poles and residuals of the Borel mini_ker.texi(,3301) transform in the file @file{vpgains.data}. Consult the subroutine mini_ker.texi(,3302) @code{Boreleig} mini_ker.texi(,3303) for (not definitive) output description. mini_ker.texi(,3304) mini_ker.texi(,3305) One can easily obtain the surface contours of @math{g(t,\tau)} using mini_ker.texi(,3306) the Fortran program provided as @file{gains.f} and its compilation shell mini_ker.texi(,3307) @file{gains.xqt}, mini_ker.texi(,3308) that builds 2D histograms for PAW, in which one uses the mini_ker.texi(,3309) @file{borels.kumac} provided kumac. mini_ker.texi(,3310) mini_ker.texi(,3311) @node Stability of fastest modes mini_ker.texi(,3312) @section Stability analysis of fastest modes mini_ker.texi(,3313) mini_ker.texi(,3314) @cindex SVD mini_ker.texi(,3315) @cindex Singular Value Decomposition mini_ker.texi(,3316) @cindex state matrix mini_ker.texi(,3317) @cindex @file{sltc.exe} mini_ker.texi(,3318) mini_ker.texi(,3319) The preceding analyses are done along with a simulation. One has also the mini_ker.texi(,3320) possibility of using in a more classical fashion the state advance matrix mini_ker.texi(,3321) @math{A_{st}}, after the end of the simulation. Code to perform the mini_ker.texi(,3322) @acronym{SVD, Singular Value Decomposition} of the state matrix @math{A_{st}} mini_ker.texi(Minik,3323) and also of @math{A_{st} + A_{st}^\dagger} is provided with Miniker. mini_ker.texi(,3324) The singular elements of these two matrices correspond to the most mini_ker.texi(,3325) rapid modes of instability of the perturbed system. mini_ker.texi(,3326) mini_ker.texi(,3327) The Singular value decomposition of a matrix is noted mini_ker.texi(,3328) mini_ker.texi(,3335) mini_ker.texi(,3336) @noindent @math{U w V^t} mini_ker.texi(,3337) mini_ker.texi(,3339) mini_ker.texi(,3340) An executable file, @file{sltc.exe} is generated and running this file will mini_ker.texi(,3341) produce the corresponding results. mini_ker.texi(,3342) mini_ker.texi(,3343) @menu mini_ker.texi(,3344) * SVD with cmz:: mini_ker.texi(,3345) * SVD with make:: mini_ker.texi(,3346) * SVD run and output:: mini_ker.texi(,3347) @end menu mini_ker.texi(,3348) mini_ker.texi(,3349) @node SVD with cmz mini_ker.texi(,3350) @subsection Singular Value Decomposition with cmz mini_ker.texi(,3351) mini_ker.texi(,3352) @cindex @command{smod} mini_ker.texi(,3353) mini_ker.texi(,3354) The cmz macro @code{smod SLTC} prepares a main program mini_ker.texi(,3355) (@file{circul} of +PATCH SLTC), provided as a base for user's own analysis, mini_ker.texi(,3356) in the directory @file{sltc/}. mini_ker.texi(,3357) mini_ker.texi(,3358) @node SVD with make mini_ker.texi(,3359) @subsection Singular Value Decomposition with make mini_ker.texi(,3360) mini_ker.texi(,3361) @cindex @file{Makefile.sltc} mini_ker.texi(,3362) mini_ker.texi(,3363) To compile the singular value decomposition executable with @command{make} you mini_ker.texi(,3364) can do mini_ker.texi(,3365) @example mini_ker.texi(,3366) make sltc.exe mini_ker.texi(,3367) @end example mini_ker.texi(,3368) mini_ker.texi(,3369) If you want to have a separate directory for the SVD, you should copy mini_ker.texi(,3370) the sequence @file{dimetaphi.inc} (or make a link to that file) to the mini_ker.texi(,3371) directory. You should also copy the file @file{Makefile.sltc} from the mini_ker.texi(,3372) @file{template/} directory in this directory, rename it @file{Makefile} mini_ker.texi(Minik,3373) and set the Miniker directory path in the mini_ker.texi(,3374) @code{miniker_dir} variable. For mini_ker.texi(Minik,3375) example, if the Miniker directory is in @file{/u/src/mini_ker}: mini_ker.texi(,3376) mini_ker.texi(,3377) @example mini_ker.texi(,3378) miniker_dir = /u/src/mini_ker mini_ker.texi(,3379) @end example mini_ker.texi(,3380) mini_ker.texi(,3381) @node SVD run and output mini_ker.texi(,3382) @subsection Singular Value Decomposition run and output mini_ker.texi(,3383) mini_ker.texi(,3384) @cindex SVD run mini_ker.texi(,3385) @cindex run, SVD mini_ker.texi(,3386) @cindex SVD output mini_ker.texi(,3387) @cindex output, SVD mini_ker.texi(,3388) @cindex @file{sltc.exe} mini_ker.texi(,3389) @cindex @file{title.tex}, SVD mini_ker.texi(,3390) @cindex @file{aspha.data}, SVD mini_ker.texi(,3391) mini_ker.texi(,3392) As it is, the @file{sltc.exe} executable generated by the compilation mini_ker.texi(,3393) determines the SVD. This program requires @file{title.tex} (@pxref{Title file}) to mini_ker.texi(,3394) transmit a title for output and graphics, and @file{aspha.data} mini_ker.texi(,3395) (@pxref{Simulation and output,,Running a simulation and using the output}) mini_ker.texi(,3396) to access the mini_ker.texi(,3397) state matrix. To get access to these files (in case they are not in the current mini_ker.texi(,3398) directory) it is possible to make a link to mini_ker.texi(,3399) the corresponding files in the model directory. Once it is done mini_ker.texi(,3400) the program may be run: mini_ker.texi(,3401) mini_ker.texi(,3402) @example mini_ker.texi(,3403) ./sltc.exe mini_ker.texi(,3404) @end example mini_ker.texi(,3405) mini_ker.texi(,3406) The files @file{u.data}, @file{w.data}, and @file{v.data} holds the singular elements mini_ker.texi(,3407) for @math{A_{st}} (@math{U}, @math{w} and @math{V}), mini_ker.texi(,3408) and @file{us.data}, @file{ws.data}, and @file{vs.data} mini_ker.texi(,3409) holds the singular elements of @math{A_{st} + A_{st}^\dagger}. mini_ker.texi(,3410) The corresponding macros @samp{.kumac} for PAW@footnote{Explanation in mini_ker.texi(,3411) the research paper about SLTC (Al1 2003) available on request.} mini_ker.texi(,3412) are also generated. mini_ker.texi(,3413) mini_ker.texi(,3414) @node Generalized TLS mini_ker.texi(,3415) @section Generalized linear tangent system analysis mini_ker.texi(,3416) mini_ker.texi(,3417) @cindex Generalized linear tangent system mini_ker.texi(,3418) @cindex GTLS mini_ker.texi(,3419) @cindex propagator mini_ker.texi(,3420) @cindex Lyapunov exponents mini_ker.texi(,3421) @cindex @file{sltcirc.exe} mini_ker.texi(,3422) mini_ker.texi(,3423) The state matrix @math{A_{st}} may also be used to compute the mini_ker.texi(,3424) GTLS propagator (or state transition matrix applied to perturbation), after the simulation. mini_ker.texi(,3425) The algorithm is a finite product of mini_ker.texi(,3426) 5th order development of mini_ker.texi(,3427) @math{\Phi(t+\delta t,t)=\exp{A_{st} \delta t}}. mini_ker.texi(,3428) Numerous element of analysis are given, in particular the determination mini_ker.texi(,3429) of the Lyapunov exponents of the system. mini_ker.texi(,3430) mini_ker.texi(,3431) An executable file, @file{sltcirc.exe} is generated and running this file will mini_ker.texi(,3432) produce the corresponding results. mini_ker.texi(,3433) mini_ker.texi(,3434) @menu mini_ker.texi(,3435) * GTLS with cmz:: mini_ker.texi(,3436) * GTLS with make:: mini_ker.texi(,3437) * GTLS run and output:: mini_ker.texi(,3438) @end menu mini_ker.texi(,3439) mini_ker.texi(,3440) @node GTLS with cmz mini_ker.texi(,3441) @subsection Generalized tangent linear system with cmz mini_ker.texi(,3442) mini_ker.texi(,3443) @cindex @command{smod} mini_ker.texi(,3444) mini_ker.texi(,3445) The cmz macro @code{smod SLTCIRC} prepares a main program mini_ker.texi(,3446) (@file{circule} of +PATCH SLTCIRC), in the directory @file{sltcirc/}. mini_ker.texi(,3447) mini_ker.texi(,3448) @node GTLS with make mini_ker.texi(,3449) @subsection Generalized tangent linear system with make mini_ker.texi(,3450) mini_ker.texi(,3451) @cindex @file{Makefile.sltcirc} mini_ker.texi(,3452) mini_ker.texi(,3453) To compile the GTLS analysis executable with @command{make} you mini_ker.texi(,3454) can do mini_ker.texi(,3455) @example mini_ker.texi(,3456) make sltcirc.exe mini_ker.texi(,3457) @end example mini_ker.texi(,3458) mini_ker.texi(,3459) If you want to have a separate directory for the GTLS analysis, you should copy mini_ker.texi(,3460) the sequence @file{dimetaphi.inc} (or make a link to that file) to the mini_ker.texi(,3461) directory. You should also copy the file @file{Makefile.sltcirc} from the mini_ker.texi(,3462) @file{template/} directory in this directory and rename it @file{Makefile} mini_ker.texi(Minik,3463) and set the Miniker directory path in the @code{miniker_dir} variable. mini_ker.texi(,3464) mini_ker.texi(,3465) @node GTLS run and output mini_ker.texi(,3466) @subsection Generalized tangent linear system analysis run and output mini_ker.texi(,3467) mini_ker.texi(,3468) @cindex GTLS run mini_ker.texi(,3469) @cindex run, GTLS mini_ker.texi(,3470) @cindex GTLS output mini_ker.texi(,3471) @cindex output, GTLS mini_ker.texi(,3472) @cindex @file{sltcirc.exe} mini_ker.texi(,3473) @cindex @file{title.tex}, GTLS mini_ker.texi(,3474) @cindex @file{dres.data}, GTLS mini_ker.texi(,3475) @cindex @file{aspha.data}, GTLS mini_ker.texi(,3476) mini_ker.texi(,3477) The @file{sltcirc.exe} executable generated by the compilation mini_ker.texi(,3478) computes the elements of analysis of the system. This program requires mini_ker.texi(,3479) @file{title.tex} to mini_ker.texi(,3480) transmit a title for output and graphics (@pxref{Title file}), mini_ker.texi(,3481) @file{aspha.data} to access the mini_ker.texi(,3482) state matrix and @file{dres.data}, because time-step can be changed along the mini_ker.texi(,3483) simulation mini_ker.texi(,3484) (@pxref{Simulation and output,,Running a simulation and using the output}) mini_ker.texi(,3485) @footnote{cf our research texts about propagator analyses in mini_ker.texi(,3486) SLTC, and ``les Gains sur champs (Al1 2003-2004)''}. To get access to these files mini_ker.texi(,3487) (in case they are not in the current mini_ker.texi(,3488) directory) it is possible to make a link to mini_ker.texi(,3489) the corresponding files in the model directory. Once it is done mini_ker.texi(,3490) the program may be run: mini_ker.texi(,3491) mini_ker.texi(,3492) @example mini_ker.texi(,3493) ./sltcirc.exe mini_ker.texi(,3494) @end example mini_ker.texi(,3495) mini_ker.texi(,3496) The following table gives the correspondence between variable name, mini_ker.texi(,3497) result file and ntuple number, with a short explanation: mini_ker.texi(,3498) mini_ker.texi(,3499) @multitable {@code{lwr(.,.)}} {@file{wlphit.data}} {ntuple} {eigen factors of @math{w} in the SVD of @math{\Phi}} mini_ker.texi(,3500) @headitem var @tab file @tab ntuple @tab explanation mini_ker.texi(,3501) @item @code{p(.,.)} @tab @file{phit.data} @tab 55 @tab propagator from 0 to @math{t}, @math{\Phi(t,0)} mini_ker.texi(,3502) @item @code{up(.,.)} @tab @file{uphit.data} @tab 50 @tab Left singular vectors @math{U} in the SVD of @math{\Phi} mini_ker.texi(,3503) @item @code{wp(.)} @tab @file{wphit.data} @tab 51 @tab singulat values @math{w} in the SVD of @math{\Phi} mini_ker.texi(,3504) @item @code{vp(.,.)} @tab @file{vphit.data} @tab 52 @tab Right Singular Vectors @math{V} in the SVD of @math{\Phi} mini_ker.texi(,3505) @item @code{wr(.)} @tab @file{wr.data} @tab 53 @tab real part of eigen values of @math{\Phi(t,0)} mini_ker.texi(,3506) @item @code{wi(.)} @tab @file{wi.data} @tab 54 @tab imaginary part of eigen values of @math{\Phi(t,0)} mini_ker.texi(,3507) @item @code{lwp(.)} @tab @file{lwphit.data} @tab 67 @tab Lyapunov exponents mini_ker.texi(,3508) @c @item @code{lwr(.,.)} @tab @file{lwr.data} @tab 68 @tab mini_ker.texi(,3509) @c @item @code{lwi(.,.)} @tab @file{lwi.data} @tab 69 @tab mini_ker.texi(,3510) @c @item @code{} @tab @file{.data} @tab @tab mini_ker.texi(,3511) @end multitable mini_ker.texi(,3512) mini_ker.texi(,3541) mini_ker.texi(Minik,3542) @node Advanced use of Miniker with make mini_ker.texi(Minik,3543) @chapter Advanced use of Miniker with make mini_ker.texi(,3544) mini_ker.texi(,3545) @menu mini_ker.texi(,3546) * Make variables:: mini_ker.texi(,3547) * Rules:: mini_ker.texi(,3548) * Linking rule:: mini_ker.texi(,3549) @end menu mini_ker.texi(,3550) mini_ker.texi(,3551) @node Make variables mini_ker.texi(,3552) @section Make variables mini_ker.texi(,3553) mini_ker.texi(,3554) @cindex @file{Makefile.miniker} mini_ker.texi(,3555) mini_ker.texi(,3556) The @file{Makefile.miniker} Makefile provided in the mini_ker.texi(,3557) distribution should be included as it defines a lot of important mini_ker.texi(,3558) variables and rules. mini_ker.texi(,3559) mini_ker.texi(,3560) The following make variables can be set by the user: mini_ker.texi(,3561) mini_ker.texi(,3562) @table @code mini_ker.texi(,3563) @item miniker_dir mini_ker.texi(Minik,3564) that variable should hold the Miniker sources directory. If you installed mini_ker.texi(Minik,3565) Miniker that variable should be set to @file{$(includedir)/mini_ker}. mini_ker.texi(,3566) If you use the sources right from the sources directory it should be set to mini_ker.texi(,3567) the sources package directory. mini_ker.texi(,3568) @item MTNDIRS mini_ker.texi(,3569) This variable can hold a @samp{:} delimited list of directories that will mini_ker.texi(,3570) be searched for mortran include files. mini_ker.texi(,3571) @item CMFDIRS mini_ker.texi(,3572) This variable can hold a @samp{:} delimited list of directories that will mini_ker.texi(,3573) be searched for cmz directive include files. mini_ker.texi(,3574) @item SEL mini_ker.texi(,3575) This variable holds a @samp{,} delimited list of select flags, for example mini_ker.texi(,3576) @code{monitor}, @code{grid1d}, @code{debug}. mini_ker.texi(,3577) @item LDADD mini_ker.texi(,3578) This variable can be used to add libraries flags and files. It is used in mini_ker.texi(,3579) the default linking command/rule. mini_ker.texi(,3580) @item miniker_user_objects mini_ker.texi(,3581) This variable should hold a space separated list of additional object files mini_ker.texi(,3582) to be linked with the model and helper object files. mini_ker.texi(,3583) @item CAR2TXTFLAGS mini_ker.texi(,3584) cmz directives preprocessor flag. mini_ker.texi(,3585) @item kalman mini_ker.texi(,3586) This variable should be set to 1 if you want to use the kalman filter mini_ker.texi(,3587) (@pxref{Kalman filter}). mini_ker.texi(,3588) @item double mini_ker.texi(,3589) This variable should be set to 1 if you want to have a double precision mini_ker.texi(,3590) code (@pxref{Double precision}). mini_ker.texi(,3591) @end table mini_ker.texi(,3592) mini_ker.texi(,3593) The following variables are allready set and may be used mini_ker.texi(,3594) (some are set by ./configure see @ref{Configuration}): mini_ker.texi(,3595) mini_ker.texi(,3596) @table @code mini_ker.texi(,3597) @item miniker_principal_objects mini_ker.texi(,3598) The list of object files needed for the model build, together with some mini_ker.texi(,3599) helper object files often used but not strictly required for the linking. mini_ker.texi(,3600) @item DEPDIR mini_ker.texi(,3601) The name of a hidden directory containing the dependencies computed mini_ker.texi(,3602) for the main mortran files. mini_ker.texi(,3603) @itemx F77 mini_ker.texi(,3604) @itemx FC mini_ker.texi(,3605) @itemx FFLAGS mini_ker.texi(,3606) @item LDFLAGS mini_ker.texi(,3607) Compiler and linker related variables set by ./configure. mini_ker.texi(,3608) @item LIBS mini_ker.texi(,3609) This variable should hold the link flags and files required to build mini_ker.texi(Minik,3610) Miniker, set by ./configure. mini_ker.texi(,3611) @item CAR2TXT mini_ker.texi(,3612) @itemx MORTRAN mini_ker.texi(,3613) @itemx MTNFLAGS mini_ker.texi(,3614) @itemx MTNDEPEND mini_ker.texi(,3615) Preprocessor and preprocessor flags, set by ./configure. mini_ker.texi(,3616) @end table mini_ker.texi(,3617) mini_ker.texi(,3618) @node Rules mini_ker.texi(,3619) @section Rules mini_ker.texi(,3620) mini_ker.texi(,3621) The following rules are defined in the @file{Makefile.miniker} file. mini_ker.texi(,3622) @table @code mini_ker.texi(,3623) @item miniker-clean mini_ker.texi(,3624) remove the fortran files generated from the mortran files. Remove mini_ker.texi(,3625) the object files. mini_ker.texi(,3626) @item miniker-mtn-clean mini_ker.texi(,3627) remove the mortran files generated from the files with cmz directives. mini_ker.texi(,3628) @item mini_ker.texi(,3629) Various rules to preprocess files with cmz directives and mortran files and mini_ker.texi(,3630) to compile fortran files. mini_ker.texi(,3631) @end table mini_ker.texi(,3632) mini_ker.texi(,3633) If the user needs a mortran main file, he may take advantage of the rule mini_ker.texi(,3634) used to compute the dependencies of a mortran file. If the file is called, mini_ker.texi(,3635) say, @file{mtnfile.mtn} leading to @file{mtnfile.f}, the following include mini_ker.texi(,3636) should lead to the automatic creation, updating and inclusion of a mini_ker.texi(,3637) file describing the dependencies of @file{mtnfile.mtn} in the mini_ker.texi(,3638) @file{Makefile}: mini_ker.texi(,3639) mini_ker.texi(,3640) @example mini_ker.texi(,3641) include $(DEPDIR)/mtnfile.Pf mini_ker.texi(,3642) @end example mini_ker.texi(,3643) mini_ker.texi(,3644) @node Linking rule mini_ker.texi(,3645) @section Linking rule mini_ker.texi(,3646) mini_ker.texi(,3647) The rule used for the linking of the model file is not in the mini_ker.texi(,3648) @file{Makefile.miniker} file but mini_ker.texi(,3649) should be provided in the user @file{Makefile} for more flexibility. mini_ker.texi(,3650) The default rule mini_ker.texi(,3651) uses the variables @code{miniker_user_objects} for additional object files mini_ker.texi(,3652) and @code{LDADD} for additionnal linking flags and files, those mini_ker.texi(,3653) variables are there to be changed by the user. mini_ker.texi(,3654) mini_ker.texi(Minik,3655) The object files required by the Miniker code are in the make variable mini_ker.texi(,3656) @code{miniker_principal_objects}, this variable is also used. mini_ker.texi(,3657) The value of the variables @code{FC} mini_ker.texi(,3658) for the Fortran compiler, @code{FFLAGS} for the Fortran compiler mini_ker.texi(,3659) flags and @code{LDFLAGS} for the linker flags should be set to right mini_ker.texi(,3660) values; @code{LIBS} should also be right and hold the link flags and link mini_ker.texi(Minik,3661) files required to compile the Miniker model. These variables are mini_ker.texi(,3662) set by by @command{./configure} during configuration (@pxref{Configuration}) mini_ker.texi(,3663) and used in the default rule: mini_ker.texi(,3664) mini_ker.texi(,3665) @verbatim mini_ker.texi(,3666) $(model_file): $(miniker_user_objects) $(miniker_principal_objects) mini_ker.texi(,3667) $(FC) $(FFLAGS) $(LDFLAGS) $^ $(LDADD) $(LIBS) -o $@ mini_ker.texi(,3668) @end verbatim mini_ker.texi(,3669) mini_ker.texi(,3670) In case this isn't right it may be freely changed. You should certainly mini_ker.texi(,3671) refer to the @ref{Top,,Top,make,GNU Make Manual} manual to understand what mini_ker.texi(,3672) that rule exactly means and make your own. mini_ker.texi(,3673) mini_ker.texi(,3674) mini_ker.texi(,3675) @node Concepts index mini_ker.texi(,3676) @unnumbered Concepts index mini_ker.texi(,3677) mini_ker.texi(,3678) @printindex cp mini_ker.texi(,3679) mini_ker.texi(,3680) @node Variables macros and functions index mini_ker.texi(,3681) @unnumbered Variables, macros and functions index mini_ker.texi(,3682) mini_ker.texi(,3683) @printindex vr mini_ker.texi(,3684) mini_ker.texi(,3685) @node Installation mini_ker.texi(,3686) @appendix Installation mini_ker.texi(,3687) mini_ker.texi(,3688) @menu mini_ker.texi(,3689) * Programming environments:: mini_ker.texi(,3690) * Common requisites:: mini_ker.texi(Minik,3691) * Miniker with cmz:: mini_ker.texi(Minik,3692) * Miniker with make:: mini_ker.texi(,3693) @end menu mini_ker.texi(,3694) mini_ker.texi(,3695) @node Programming environments mini_ker.texi(,3696) @appendixsec Programming environments mini_ker.texi(,3697) @cindex Programming environments mini_ker.texi(,3698) mini_ker.texi(Minik,3699) Miniker is not a traditionnal software in that it isn't a library mini_ker.texi(,3700) or an interpreter but rather a set of source and macro file that mini_ker.texi(,3701) combines with the user model code and enable mini_ker.texi(,3702) to build a binary program corresponding with the model. It mini_ker.texi(,3703) requires a build environment with a preprocessor, a compiler mini_ker.texi(,3704) and facilities that automate these steps. mini_ker.texi(,3705) mini_ker.texi(,3706) Two different environment are proposed. One use mini_ker.texi(,3707) @command{cmz} (@url{http://wwwcmz.web.cern.ch/@/wwwcmz/index.html}), mini_ker.texi(,3708) while the other is based on @command{make}. Other libraries mini_ker.texi(,3709) are needed, the CERN Program Library (cernlib) and lapack. mini_ker.texi(,3710) mini_ker.texi(,3711) @node Common requisites mini_ker.texi(,3712) @appendixsec Common requisites mini_ker.texi(,3713) mini_ker.texi(,3714) @cindex cernlib mini_ker.texi(,3715) @cindex lapack mini_ker.texi(,3716) mini_ker.texi(,3717) Whatever method is used a fortran 77 compiler is required. The compilers mini_ker.texi(,3718) that have been used so far are g77, gfortran and the sun solaris compiler. mini_ker.texi(,3719) mini_ker.texi(,3720) When usng CMZ, the CERN Program Library, available at mini_ker.texi(,3721) @url{http://wwwasd.web.cern.ch/@/wwwasd/cernlib/}, has to be installed. mini_ker.texi(,3722) With make, internal source files copied from the cernlib may be used instead mini_ker.texi(,3723) but then some examples won't be available, since they rely on some mini_ker.texi(,3724) mathematical functions provided by the CERN library. mini_ker.texi(,3725) On windows, in case you want to use the compiler from the GNU compiler mini_ker.texi(,3726) collection with cygwin or MINGW/MSYS you can use the binaries provided at mini_ker.texi(,3727) @url{http://zyao.home.cern.ch/@/zyao/cernlib.html}. mini_ker.texi(,3728) On Mac OS X, the cernlib provided by fink (package @code{cernlib-devel}) mini_ker.texi(,3729) can be used. mini_ker.texi(,3730) mini_ker.texi(,3731) You should also have LAPACK, available at @url{http://www.netlib.org/@/lapack/}. mini_ker.texi(,3732) LAPACK can also be installed as part of the CERN Library or as part of mini_ker.texi(,3733) the @uref{ATLAS,http://math-atlas.sourceforge.net/} implementation. mini_ker.texi(,3734) On most linux distributions a lapack package is available. mini_ker.texi(,3735) On Mac OS X, the ATLAS implementation provided by fink or the frameworks mini_ker.texi(,3736) from Xcode can be used. mini_ker.texi(,3737) mini_ker.texi(,3738) mini_ker.texi(Minik,3739) @node Miniker with cmz mini_ker.texi(Minik,3740) @appendixsec Miniker with cmz mini_ker.texi(,3741) mini_ker.texi(,3742) @cindex @file{mini_ker.cmz} mini_ker.texi(,3743) @cindex @file{selseq.kumac} mini_ker.texi(,3744) mini_ker.texi(,3745) First of all you have to get the cmz file @file{mini_ker.cmz} and put it mini_ker.texi(,3746) in a directory. In that same directory you should create a directory for mini_ker.texi(,3747) each of your models. In the model directory you should copy the file mini_ker.texi(Minik,3748) @file{selseq.kumac} available with Miniker, and create your own cmz mini_ker.texi(,3749) file for your model, called for example @file{mymodel.cmz}. You should also mini_ker.texi(,3750) have installed the kumac macro files mini_ker.texi(,3751) handling mortan compilation, the associated shell scripts and the mortran mini_ker.texi(,3752) preprocessor. mini_ker.texi(,3753) mini_ker.texi(Minik,3754) @node Miniker with make mini_ker.texi(Minik,3755) @appendixsec Miniker with make mini_ker.texi(,3756) mini_ker.texi(,3757) @menu mini_ker.texi(,3758) * Additional requirements:: mini_ker.texi(,3759) * Configuration:: mini_ker.texi(,3760) * Installation with make:: mini_ker.texi(,3761) @end menu mini_ker.texi(,3762) mini_ker.texi(,3763) @node Additional requirements mini_ker.texi(Minik,3764) @appendixsubsec Additional requirements for Miniker with make mini_ker.texi(,3765) mini_ker.texi(,3766) @cindex @command{mortran}, with make mini_ker.texi(,3767) @cindex requirements, with make mini_ker.texi(,3768) mini_ker.texi(,3769) The package has been tested with GNU @command{make} and solaris mini_ker.texi(,3770) @command{make}. mini_ker.texi(,3771) mini_ker.texi(,3772) Suitable preprocessors should also be installed. Two preprocessors are mini_ker.texi(,3773) required, one that preprocess the cmz directives, and a mortran mini_ker.texi(,3774) preprocessor. A cmz directives processor written in @command{perl}, mini_ker.texi(,3775) is distributed in the @command{car2txt} package available at mini_ker.texi(,3776) @url{http://www.environnement.ens.fr/@/perso/@/dumas/@/mini_ker/@/software.html}. A @command{mortran} mini_ker.texi(,3777) package with a command able to preprocess a mortran file given on mini_ker.texi(,3778) the command line with a syntax similar with the @command{cpp} command line mini_ker.texi(,3779) syntax is also required. mini_ker.texi(,3780) Such a mortran is available at @url{http://www.environnement.ens.fr/@/perso/@/dumas/@/mini_ker/@/software.html}. mini_ker.texi(,3781) mini_ker.texi(,3782) @c All the @command{make} commands are not suitable, for example the distribution mini_ker.texi(,3783) @c doesn't work with solaris @command{make}. GNU @command{make} works, however, mini_ker.texi(,3784) @c and should be available on most platforms, often called @command{gmake}. mini_ker.texi(,3785) mini_ker.texi(,3786) mini_ker.texi(,3787) @node Configuration mini_ker.texi(,3788) @appendixsubsec Configuration mini_ker.texi(,3789) mini_ker.texi(,3790) @cindex configuration of source mini_ker.texi(,3791) mini_ker.texi(,3792) The package is available at @url{http://www.environnement.ens.fr/@/perso/@/dumas/@/mini_ker/@/software.html}. It is mini_ker.texi(,3793) available as a compresssed tar archive. On UNIX, with GNU @command{tar} it mini_ker.texi(,3794) may be unpacked using mini_ker.texi(,3795) mini_ker.texi(,3796) @example mini_ker.texi(,3797) $ tar xzvf mini_ker-4.2.tar.gz mini_ker.texi(,3798) @end example mini_ker.texi(,3799) mini_ker.texi(,3800) The detection of the compiler, the preprocessors (car2txt and mortran), mini_ker.texi(,3801) and the libraries are performed by the configure script. This script mini_ker.texi(,3802) sets the mini_ker.texi(,3803) apropriate variables in makefiles. It can be run with: mini_ker.texi(,3804) mini_ker.texi(,3805) @example mini_ker.texi(,3806) $ cd mini_ker-4.2 mini_ker.texi(,3807) $ ./configure mini_ker.texi(,3808) @end example mini_ker.texi(,3809) mini_ker.texi(,3810) If the output of @command{./configure} doesn't show any error it means that mini_ker.texi(,3811) all the components are here. It is possible to give @command{./configure} mini_ker.texi(,3812) switches and also specify environment variables (see also mini_ker.texi(,3813) @command{./configure --help}): mini_ker.texi(,3814) mini_ker.texi(,3815) @table @code mini_ker.texi(,3816) @item --disable-cernlib mini_ker.texi(,3817) Use the internal cernlib source files, even if a cernlib is detected. mini_ker.texi(,3818) @item --with-static-cernlib mini_ker.texi(,3819) This command line switch forces a static linking with the cernlib (or a dynamic linking mini_ker.texi(,3820) if set to no). mini_ker.texi(,3821) @item --with-cernlib mini_ker.texi(,3822) This command line switch can be used to specify the cernlib location mini_ker.texi(,3823) (if not detected or you want to use a specific cernlib). mini_ker.texi(,3824) @item --with-blas mini_ker.texi(,3825) @itemx --with-lapack mini_ker.texi(,3826) With this command switch, you can specify the location of the blas and lapack mini_ker.texi(,3827) libraries. mini_ker.texi(,3828) mini_ker.texi(,3829) For example, on mac OS X this can be used to specify the blas and lapack from mini_ker.texi(,3830) the Apple frameworks: mini_ker.texi(,3831) mini_ker.texi(,3832) @example mini_ker.texi(,3833) ./configure \ mini_ker.texi(,3834) --with-blas=/System/Library/Frameworks/vecLib.framework/versions/A/vecLib \ mini_ker.texi(,3835) --with-lapack=/System/Library/Frameworks/vecLib.framework/versions/A/vecLib mini_ker.texi(,3836) @end example mini_ker.texi(,3837) mini_ker.texi(,3838) @item F77 mini_ker.texi(,3839) @itemx FC mini_ker.texi(,3840) @itemx FFLAGS mini_ker.texi(,3841) @itemx LDFLAGS mini_ker.texi(,3842) Classical compiler, compiler flags and linker flags. mini_ker.texi(,3843) @item MORTRAN mini_ker.texi(,3844) This environment variable holds the mortran preprocessor command mini_ker.texi(,3845) (default is @command{mortran}). mini_ker.texi(,3846) @item MTNFLAGS mini_ker.texi(,3847) This environment variable holds command line arguments for the mortran mini_ker.texi(,3848) preprocessor. It is empty in the default case. mini_ker.texi(,3849) @item MTN mini_ker.texi(,3850) This environment variable may be used to specify the mortran executable mini_ker.texi(,3851) name and/or path, it should be used by the @command{mortran} commmand. mini_ker.texi(,3852) (default is empty, which leads to a mortran executable called @command{mtn}). mini_ker.texi(,3853) @item MTNDEPEND mini_ker.texi(,3854) This environment variable may be used to specify the mortran dependencies mini_ker.texi(,3855) checker executable. It should be used by the @command{mortran} commmand. mini_ker.texi(,3856) (default is empty, which leads to a mortran dependencies checker mini_ker.texi(,3857) called @command{mtndepend}). mini_ker.texi(,3858) @end table mini_ker.texi(,3859) mini_ker.texi(,3860) After a proper configuration, if @command{make} is run then the example mini_ker.texi(,3861) models should be build. You have to perform the configuration only once. mini_ker.texi(,3862) mini_ker.texi(,3863) @node Installation with make mini_ker.texi(,3864) @appendixsubsec Installation with make mini_ker.texi(,3865) @cindex installation with make mini_ker.texi(,3866) mini_ker.texi(Minik,3867) Miniker can be installed by running mini_ker.texi(,3868) @example mini_ker.texi(,3869) make install mini_ker.texi(,3870) @end example mini_ker.texi(,3871) mini_ker.texi(,3872) mini_ker.texi(,3873) It should copy the sources mini_ker.texi(,3874) and the @file{Makefile.miniker} file in mini_ker.texi(,3875) a @file{mini_ker} directory in the @code{$(includedir)} directory, and mini_ker.texi(,3876) copy the templates in @file{$(datadir)/mini_ker}. The default for mini_ker.texi(,3877) @code{$(includedir)} is @file{/usr/local/include} and the default for mini_ker.texi(,3878) @code{$(datadir)} is @file{/usr/local/share}, these defaults may be mini_ker.texi(,3879) changed by @command{./configure} switches @samp{--prefix}, mini_ker.texi(,3880) @samp{--includedir} and @samp{--datadir}. See @command{./configure --help} mini_ker.texi(,3881) and the @file{INSTALL} file for more informations. The helper script mini_ker.texi(,3882) @file{start_miniker} should also be installed. mini_ker.texi(,3883) mini_ker.texi(,3884) mini_ker.texi(,3885) mini_ker.texi(Minik,3886) The installation is not required to use comfortably Miniker. Indeed mini_ker.texi(,3887) the only thing that changes with the sources and the @file{Makefile.miniker} mini_ker.texi(,3888) directory location is the @code{miniker_dir} variable in a mini_ker.texi(,3889) project @code{Makefile}. mini_ker.texi(,3890) mini_ker.texi(,3891) mini_ker.texi(,3892) @node Cmz directives reference mini_ker.texi(,3893) @appendix Cmz directives reference mini_ker.texi(,3894) mini_ker.texi(,3895) The cmz directives are described together with the other mini_ker.texi(,3896) features of cmz in the cmz manual at mini_ker.texi(,3897) @url{http://wwwcmz.web.cern.ch/wwwcmz/}, the important ones are mini_ker.texi(,3898) nevertheless recalled here, mini_ker.texi(,3899) especially for those that use make and don't need the whole mini_ker.texi(,3900) features of cmz. mini_ker.texi(,3901) mini_ker.texi(,3902) After the description of the generic features, we turn mini_ker.texi(,3903) to the cmz directive of interest. mini_ker.texi(,3904) There are three kinds of cmz directives that are of use mini_ker.texi(Minik,3905) within Miniker: one kind mini_ker.texi(,3906) that introduce files, the other for conditionnal compilation and mini_ker.texi(,3907) the third for sequence inclusion. mini_ker.texi(,3908) mini_ker.texi(,3909) mini_ker.texi(,3910) @menu mini_ker.texi(,3911) * Cmz directives general syntax:: mini_ker.texi(,3912) * Conditional expressions:: mini_ker.texi(,3913) * File introduction directives:: mini_ker.texi(,3914) * Conditional directives:: mini_ker.texi(,3915) * File inclusion directive:: mini_ker.texi(,3916) * The self directive:: mini_ker.texi(,3917) @end menu mini_ker.texi(,3918) mini_ker.texi(,3919) @node Cmz directives general syntax mini_ker.texi(,3920) @appendixsec Cmz directives general syntax mini_ker.texi(,3921) mini_ker.texi(,3922) The cmz directives always begin with a @samp{+} in the first column, mini_ker.texi(,3923) optionnaly followed by any number of @samp{_} that may be used for mini_ker.texi(,3924) indentation, then the directive label, case insensitive, followed mini_ker.texi(,3925) by the directive arguments separated by @samp{,}. The arguments mini_ker.texi(,3926) are also case insensitive. mini_ker.texi(,3927) Optional spaces may be around directive arguments. mini_ker.texi(,3928) An optionnal @samp{.} ends the directive mini_ker.texi(,3929) arguments and begin a comment, everything that follows that @samp{.} is mini_ker.texi(,3930) ignored. mini_ker.texi(,3931) mini_ker.texi(,3932) @node Conditional expressions mini_ker.texi(,3933) @appendixsec Conditional expressions mini_ker.texi(,3934) mini_ker.texi(,3935) A directive argument common to all the directives is the conditionnal mini_ker.texi(,3936) expression. A conditionnal expression may be true or false, it is a mini_ker.texi(,3937) combination of select flags. the select flags are combined with mini_ker.texi(,3938) logical operators. A mini_ker.texi(,3939) select flag itself is true if it was selected. A select flag @var{selflag} mini_ker.texi(,3940) is selected by using the @code{sel @var{selflag}} instruction in cmz. It is mini_ker.texi(,3941) selected by passing the @code{-D @var{selflag}} command line switch to mini_ker.texi(,3942) the call of the cmz directives preprocessor when using make. mini_ker.texi(,3943) mini_ker.texi(,3944) mini_ker.texi(,3945) A @samp{-} negates mini_ker.texi(,3946) the expression that follows. Parenthesis @samp{(} and @samp{)} are used mini_ker.texi(,3947) for the grouping of subexpressions. @samp{|} and @samp{,} are for the mini_ker.texi(,3948) boolean or: an expression with a or is true mini_ker.texi(,3949) if the expression on the left or the expression on the right of the or mini_ker.texi(,3950) is true. mini_ker.texi(,3951) @samp{&} is for the boolean and: an expression with an and is true if mini_ker.texi(,3952) the expression on the left and the expression on the right are true. mini_ker.texi(,3953) mini_ker.texi(,3954) The grouping is left to right when there is no parenthesis, with or and mini_ker.texi(,3955) @samp{&} having the same precedence. Therefore mini_ker.texi(,3956) mini_ker.texi(,3957) @example mini_ker.texi(,3958) a&b|c @equiv{} (a&b)|c mini_ker.texi(,3959) a|b&c @equiv{} (a|b)&c mini_ker.texi(,3960) a|b&c is not a|(b&c) mini_ker.texi(,3961) a&b|c is not a&(b|c) mini_ker.texi(,3962) @end example mini_ker.texi(,3963) mini_ker.texi(,3964) @node File introduction directives mini_ker.texi(,3965) @appendixsec File introduction directives mini_ker.texi(,3966) mini_ker.texi(,3967) A file (or sequence) introduction directive appears at the beginning mini_ker.texi(,3968) of the file. There are two different directives, one is @code{DECK} mini_ker.texi(,3969) for normal files, the other is @code{KEEP} for include files (sequences). mini_ker.texi(,3970) The first argument is the name of the file. The file name may not be larger mini_ker.texi(,3971) than 32 characters and is converted to lower case in the general case. mini_ker.texi(,3972) The optionnal following arguments may be mini_ker.texi(,3973) of 2 type (and may be mixed, separated by @samp{,}): mini_ker.texi(,3974) mini_ker.texi(,3975) @table @asis mini_ker.texi(,3976) @item conditional mini_ker.texi(,3977) A conditionnal is introduced by @code{IF=} followed by a conditionnal mini_ker.texi(,3978) expression described in mini_ker.texi(,3979) @ref{Conditional expressions}. The mini_ker.texi(,3980) file is preprocessed if the conditionnal expression is true. mini_ker.texi(,3981) @item language specification mini_ker.texi(,3982) A language specification is introduced by a @code{T=}. The most mini_ker.texi(,3983) common languages are @samp{mtn} for the mortran, @samp{ftn} for mini_ker.texi(,3984) fortran not preprocessed, @samp{f77} for preprocessed fortran, mini_ker.texi(,3985) @samp{c} for the c language and @samp{txt} for text files. mini_ker.texi(,3986) In general the language of the file determines the name of files mini_ker.texi(,3987) the preprocessed file is extracted to, the comment style and mini_ker.texi(,3988) the command for inclusions. mini_ker.texi(,3989) @end table mini_ker.texi(,3990) mini_ker.texi(,3991) It is a common practice to have wrong language type in @code{KEEP} mini_ker.texi(,3992) as the language may be determined from the @code{DECK} that include mini_ker.texi(,3993) them with cmz, or from their file name with make. This is not recommended mini_ker.texi(,3994) and considered a bad practice. mini_ker.texi(,3995) mini_ker.texi(,3996) Such a directive will always appear in cmz, as it is built-in. It mini_ker.texi(,3997) is recommended to have one when using make too, even though it is not mini_ker.texi(,3998) required in most cases. Indeed make uses the file name directly mini_ker.texi(,3999) and finds the language and file type by looking at the file extension. mini_ker.texi(,4000) make should then pass the language type with a mini_ker.texi(,4001) @code{--lang @var{lang}} command mini_ker.texi(,4002) line switch when calling the cmz directives preprocessor. mini_ker.texi(,4003) With make, the convention is to have @samp{cm} added before the normal mini_ker.texi(,4004) file suffix and after the @samp{.}. The table @ref{tab:cmfile_suffix} mini_ker.texi(,4005) shows the matching between suffixes, file type and file language. mini_ker.texi(,4006) mini_ker.texi(,4007) For example, a file beginning with mini_ker.texi(,4008) mini_ker.texi(,4009) @verbatim mini_ker.texi(,4010) +Deck, subroutine_foo, If=monitor&-simple, T=f77. mini_ker.texi(,4011) @end verbatim mini_ker.texi(,4012) mini_ker.texi(,4013) is a main preprocessed fortran file that will only be generated if mini_ker.texi(,4014) @samp{monitor} is selected and @samp{simple} is not selected. The mini_ker.texi(,4015) file to be preprocessed by make should have the @samp{.cmF} suffix, mini_ker.texi(,4016) and be called @file{subroutine_foo.cmF}. mini_ker.texi(,4017) mini_ker.texi(,4018) A file beginning with mini_ker.texi(,4019) mini_ker.texi(,4020) @verbatim mini_ker.texi(,4021) +KEEP,inc_common,If=monitor|interface,T=mtn mini_ker.texi(,4022) @end verbatim mini_ker.texi(,4023) mini_ker.texi(,4024) is an mortran include file that should be processed only if @samp{monitor} mini_ker.texi(,4025) or @samp{interface} is selected. The file to be preprocessed by make mini_ker.texi(,4026) should have the @samp{cmmti} suffix and be called @file{inc_common.cmmti}. mini_ker.texi(,4027) The resulting file when make is used will be called @file{inc_common.mti}. mini_ker.texi(,4028) mini_ker.texi(,4029) @node Conditional directives mini_ker.texi(,4030) @appendixsec Conditional directives mini_ker.texi(,4031) mini_ker.texi(,4032) Conditional directives may be used to conditionnaly skip blocks of mini_ker.texi(,4033) code. There are 4 conditional directives: @code{if}, @code{elseif}, mini_ker.texi(,4034) @code{else} and @code{endif}. @code{+if} begins a conditional directives mini_ker.texi(,4035) sequence, with argument a conditional expression. If the expression is mini_ker.texi(,4036) true the block of code following the @code{+if} is output in the mini_ker.texi(,4037) resulting file, up to another conditional directive, if it is false mini_ker.texi(,4038) the code block is skipped. If the mini_ker.texi(,4039) expression is false and the following conditional directive is mini_ker.texi(,4040) @code{+elseif}, the same procedure is followed with the argument of mini_ker.texi(,4041) @code{+elseif} mini_ker.texi(,4042) which is also a conditionnal expression. More than one @code{+elseif} mini_ker.texi(,4043) may follow a @code{+if}. If a @code{+if} or @code{+elseif} expression mini_ker.texi(,4044) is true the following mini_ker.texi(,4045) code block is output and all mini_ker.texi(,4046) the following @code{+elseif} code blocks are skipped. If all the @code{+if} mini_ker.texi(,4047) and @code{+elseif} expressions are false and mini_ker.texi(,4048) the following coditionnal mini_ker.texi(,4049) directive is @code{+else} then the block following the mini_ker.texi(,4050) @code{+else} is output. If a previous expression was true the mini_ker.texi(,4051) code block following the @code{+else} is skipped. The last code block mini_ker.texi(,4052) is closed by @code{+endif}. mini_ker.texi(,4053) mini_ker.texi(,4054) Conditionnal directives may be nested, a @code{+if} begins a deeper mini_ker.texi(,4055) conditionnal sequences directives that is ended by the corresponding mini_ker.texi(,4056) @code{+endif}. mini_ker.texi(,4057) mini_ker.texi(,4058) The simplest example is: mini_ker.texi(,4059) mini_ker.texi(,4060) @verbatim mini_ker.texi(,4061) some code; mini_ker.texi(,4062) +IF,monitor mini_ker.texi(,4063) code output only if monitor is true; mini_ker.texi(,4064) +ENDIF mini_ker.texi(,4065) @end verbatim mini_ker.texi(,4066) mini_ker.texi(,4067) If @samp{monitor} is selected, the @code{+if} block is output, it leads to mini_ker.texi(,4068) mini_ker.texi(,4069) @verbatim mini_ker.texi(,4070) some code; mini_ker.texi(,4071) code output only if monitor is true; mini_ker.texi(,4072) @end verbatim mini_ker.texi(,4073) mini_ker.texi(,4074) If @samp{monitor} isn't selected the @code{+if} block is skipped, it leads to mini_ker.texi(,4075) mini_ker.texi(,4076) @verbatim mini_ker.texi(,4077) some code; mini_ker.texi(,4078) @end verbatim mini_ker.texi(,4079) mini_ker.texi(,4080) An example with @code{+else} may be: mini_ker.texi(,4081) mini_ker.texi(,4082) @verbatim mini_ker.texi(,4083) +IF,double mini_ker.texi(,4084) call dmysub(eta); mini_ker.texi(,4085) +ELSE mini_ker.texi(,4086) call smysub(eta); mini_ker.texi(,4087) +ENDIF mini_ker.texi(,4088) @end verbatim mini_ker.texi(,4089) mini_ker.texi(,4090) If @samp{double} is selected the code output is @code{call dmysub(eta);}, mini_ker.texi(,4091) if @samp{double} isn't selected the code output is @code{call dmysub(eta);}. mini_ker.texi(,4092) mini_ker.texi(,4093) Here is a self explanatory example of use of @code{+elseif}: mini_ker.texi(,4094) mini_ker.texi(,4095) @verbatim mini_ker.texi(,4096) +IF,monitor mini_ker.texi(,4097) code used if monitor is selected; mini_ker.texi(,4098) +ELSEIF,kalman mini_ker.texi(,4099) code used if kalman is selected and monitor is not; mini_ker.texi(,4100) +ELSE mini_ker.texi(,4101) code used if kalman and monitor are not selected; mini_ker.texi(,4102) +ENDIF mini_ker.texi(,4103) @end verbatim mini_ker.texi(,4104) mini_ker.texi(,4105) And last an example of nested conditional directives: mini_ker.texi(,4106) mini_ker.texi(,4107) @verbatim mini_ker.texi(,4108) +IF,monitor mini_ker.texi(,4109) code used if monitor is selected; mini_ker.texi(,4110) +_IF,kalman. deep if mini_ker.texi(,4111) code used if monitor and kalman are selected; mini_ker.texi(,4112) +_ELSE. deep else mini_ker.texi(,4113) code used if monitor is selected and kalman is not; mini_ker.texi(,4114) +_ENDIF. end the deep conditionnals sequence mini_ker.texi(,4115) +ELSE mini_ker.texi(,4116) code used if monitor is not selected; mini_ker.texi(,4117) +_IF,kalman mini_ker.texi(,4118) code used if monitor is not selected but kalman is; mini_ker.texi(,4119) +_ELSE mini_ker.texi(,4120) code used if monitor and kalman are not selected; mini_ker.texi(,4121) +_ENDIF mini_ker.texi(,4122) other code used if monitor is not selected; mini_ker.texi(,4123) +ENDIF mini_ker.texi(,4124) @end verbatim mini_ker.texi(,4125) mini_ker.texi(,4126) @node File inclusion directive mini_ker.texi(,4127) @appendixsec File inclusion directive mini_ker.texi(,4128) mini_ker.texi(,4129) The file (sequence) inclusion directive is @code{seq}. The argument of mini_ker.texi(,4130) @code{seq} is an include files @samp{,} separated list. The include mini_ker.texi(,4131) files are @code{Keep} in cmz. The following optional arguments may be mini_ker.texi(,4132) mixed: mini_ker.texi(,4133) mini_ker.texi(,4134) @table @asis mini_ker.texi(,4135) @item conditional mini_ker.texi(,4136) A conditionnal is introduced by @code{IF=} followed by a conditionnal mini_ker.texi(,4137) expression described in mini_ker.texi(,4138) @ref{Conditional expressions}. The mini_ker.texi(,4139) directive is ignored if the conditionnal expression is false. mini_ker.texi(,4140) @item T=noinclude mini_ker.texi(,4141) When this argument is present the text of the sequence will mini_ker.texi(,4142) always be included in the file where the @code{+seq} appears. mini_ker.texi(,4143) @end table mini_ker.texi(,4144) mini_ker.texi(,4145) When there is no @code{T=noinclude} argument, the @code{+seq} mini_ker.texi(,4146) directive may be replaced with an inclusion command suitable mini_ker.texi(,4147) for the language of the file being processed, if such mini_ker.texi(,4148) command has been specified. mini_ker.texi(,4149) mini_ker.texi(,4150) For example if we have the following sequence mini_ker.texi(,4151) @verbatim mini_ker.texi(,4152) +KEEP,inc,lang=C mini_ker.texi(,4153) typedef struct incstr {char* msg}; mini_ker.texi(,4154) @end verbatim mini_ker.texi(,4155) mini_ker.texi(,4156) And the following code in the file being processed: mini_ker.texi(,4157) mini_ker.texi(,4158) @verbatim mini_ker.texi(,4159) +DECK,mainf,lang=C mini_ker.texi(,4160) +SEQ,inc mini_ker.texi(,4161) int main (int argc, char* argv) { exit(0); } mini_ker.texi(,4162) @end verbatim mini_ker.texi(,4163) mini_ker.texi(,4164) the processing of @file{mainf} should lead to the file mini_ker.texi(,4165) @file{mainf.c}, containing mini_ker.texi(,4166) an include command for @file{inc}: mini_ker.texi(,4167) mini_ker.texi(,4168) @verbatim mini_ker.texi(,4169) #include "inc.h" mini_ker.texi(,4170) int main (int argc, char* argv) { exit(0); } mini_ker.texi(,4171) @end verbatim mini_ker.texi(,4172) mini_ker.texi(,4173) In case the @code{+seq} has the @code{T=noinclude}: mini_ker.texi(,4174) mini_ker.texi(,4175) @verbatim mini_ker.texi(,4176) +DECK,mainf,lang=C mini_ker.texi(,4177) +SEQ,inc,T=noinclude mini_ker.texi(,4178) int main (int argc, char* argv) { exit(0); } mini_ker.texi(,4179) @end verbatim mini_ker.texi(,4180) mini_ker.texi(,4181) The processing of @file{mainf} should lead to the file @file{mainf.c} mini_ker.texi(,4182) containing the text of @file{inc}: mini_ker.texi(,4183) mini_ker.texi(,4184) @verbatim mini_ker.texi(,4185) typedef struct incstr {char* msg}; mini_ker.texi(,4186) int main (int argc, char* argv) { exit(0); } mini_ker.texi(,4187) @end verbatim mini_ker.texi(,4188) mini_ker.texi(,4189) @node The self directive mini_ker.texi(,4190) @appendixsec The @samp{self} directive mini_ker.texi(,4191) mini_ker.texi(,4192) The @code{self} directive is an obsolete directive that may be used for mini_ker.texi(,4193) conditionnal skipping of code. For a better approach see mini_ker.texi(,4194) @ref{Conditional directives}. mini_ker.texi(,4195) The optionnal argument of @code{+SELF} is @code{If=} followed by mini_ker.texi(,4196) a conditionnal expression. If the conditionnal expression is true the mini_ker.texi(,4197) code following the directive is output, if it is false the code mini_ker.texi(,4198) is skipped up to any directive (including another @code{+SELF}) mini_ker.texi(,4199) except @code{+seq}. mini_ker.texi(,4200) mini_ker.texi(,4208) mini_ker.texi(,4209) @node Copying This Manual mini_ker.texi(,4210) @appendix Copying This Manual mini_ker.texi(,4211) mini_ker.texi(,4212) @menu mini_ker.texi(,4213) * GNU Free Documentation License:: License for copying this manual. mini_ker.texi(,4214) @end menu mini_ker.texi(,4215) fdl.texi(,1) fdl.texi(,2) @node GNU Free Documentation License fdl.texi(,3) @appendixsec GNU Free Documentation License fdl.texi(,4) fdl.texi(,5) @cindex FDL, GNU Free Documentation License fdl.texi(,6) @center Version 1.1, March 2000 fdl.texi(,7) fdl.texi(,8) @display fdl.texi(,9) Copyright @copyright{} 2000 Free Software Foundation, Inc. fdl.texi(,10) 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA fdl.texi(,11) fdl.texi(,12) Everyone is permitted to copy and distribute verbatim copies fdl.texi(,13) of this license document, but changing it is not allowed. fdl.texi(,14) @end display fdl.texi(,15) fdl.texi(,16) @enumerate 0 fdl.texi(,17) @item fdl.texi(,18) PREAMBLE fdl.texi(,19) fdl.texi(,20) The purpose of this License is to make a manual, textbook, or other fdl.texi(,21) written document @dfn{free} in the sense of freedom: to assure everyone fdl.texi(,22) the effective freedom to copy and redistribute it, with or without fdl.texi(,23) modifying it, either commercially or noncommercially. Secondarily, fdl.texi(,24) this License preserves for the author and publisher a way to get fdl.texi(,25) credit for their work, while not being considered responsible for fdl.texi(,26) modifications made by others. fdl.texi(,27) fdl.texi(,28) This License is a kind of ``copyleft'', which means that derivative fdl.texi(,29) works of the document must themselves be free in the same sense. It fdl.texi(,30) complements the GNU General Public License, which is a copyleft fdl.texi(,31) license designed for free software. fdl.texi(,32) fdl.texi(,33) We have designed this License in order to use it for manuals for free fdl.texi(,34) software, because free software needs free documentation: a free fdl.texi(,35) program should come with manuals providing the same freedoms that the fdl.texi(,36) software does. But this License is not limited to software manuals; fdl.texi(,37) it can be used for any textual work, regardless of subject matter or fdl.texi(,38) whether it is published as a printed book. We recommend this License fdl.texi(,39) principally for works whose purpose is instruction or reference. fdl.texi(,40) fdl.texi(,41) @item fdl.texi(,42) APPLICABILITY AND DEFINITIONS fdl.texi(,43) fdl.texi(,44) This License applies to any manual or other work that contains a fdl.texi(,45) notice placed by the copyright holder saying it can be distributed fdl.texi(,46) under the terms of this License. The ``Document'', below, refers to any fdl.texi(,47) such manual or work. Any member of the public is a licensee, and is fdl.texi(,48) addressed as ``you''. fdl.texi(,49) fdl.texi(,50) A ``Modified Version'' of the Document means any work containing the fdl.texi(,51) Document or a portion of it, either copied verbatim, or with fdl.texi(,52) modifications and/or translated into another language. fdl.texi(,53) fdl.texi(,54) A ``Secondary Section'' is a named appendix or a front-matter section of fdl.texi(,55) the Document that deals exclusively with the relationship of the fdl.texi(,56) publishers or authors of the Document to the Document's overall subject fdl.texi(,57) (or to related matters) and contains nothing that could fall directly fdl.texi(,58) within that overall subject. (For example, if the Document is in part a fdl.texi(,59) textbook of mathematics, a Secondary Section may not explain any fdl.texi(,60) mathematics.) The relationship could be a matter of historical fdl.texi(,61) connection with the subject or with related matters, or of legal, fdl.texi(,62) commercial, philosophical, ethical or political position regarding fdl.texi(,63) them. fdl.texi(,64) fdl.texi(,65) The ``Invariant Sections'' are certain Secondary Sections whose titles fdl.texi(,66) are designated, as being those of Invariant Sections, in the notice fdl.texi(,67) that says that the Document is released under this License. fdl.texi(,68) fdl.texi(,69) The ``Cover Texts'' are certain short passages of text that are listed, fdl.texi(,70) as Front-Cover Texts or Back-Cover Texts, in the notice that says that fdl.texi(,71) the Document is released under this License. fdl.texi(,72) fdl.texi(,73) A ``Transparent'' copy of the Document means a machine-readable copy, fdl.texi(,74) represented in a format whose specification is available to the fdl.texi(,75) general public, whose contents can be viewed and edited directly and fdl.texi(,76) straightforwardly with generic text editors or (for images composed of fdl.texi(,77) pixels) generic paint programs or (for drawings) some widely available fdl.texi(,78) drawing editor, and that is suitable for input to text formatters or fdl.texi(,79) for automatic translation to a variety of formats suitable for input fdl.texi(,80) to text formatters. A copy made in an otherwise Transparent file fdl.texi(,81) format whose markup has been designed to thwart or discourage fdl.texi(,82) subsequent modification by readers is not Transparent. A copy that is fdl.texi(,83) not ``Transparent'' is called ``Opaque''. fdl.texi(,84) fdl.texi(,85) Examples of suitable formats for Transparent copies include plain fdl.texi(,86) @sc{ascii} without markup, Texinfo input format, La@TeX{} input format, fdl.texi(,87) @acronym{SGML} or @acronym{XML} using a publicly available fdl.texi(,88) @acronym{DTD}, and standard-conforming simple @acronym{HTML} designed fdl.texi(,89) for human modification. Opaque formats include PostScript, fdl.texi(,90) @acronym{PDF}, proprietary formats that can be read and edited only by fdl.texi(,91) proprietary word processors, @acronym{SGML} or @acronym{XML} for which fdl.texi(,92) the @acronym{DTD} and/or processing tools are not generally available, fdl.texi(,93) and the machine-generated @acronym{HTML} produced by some word fdl.texi(,94) processors for output purposes only. fdl.texi(,95) fdl.texi(,96) The ``Title Page'' means, for a printed book, the title page itself, fdl.texi(,97) plus such following pages as are needed to hold, legibly, the material fdl.texi(,98) this License requires to appear in the title page. For works in fdl.texi(,99) formats which do not have any title page as such, ``Title Page'' means fdl.texi(,100) the text near the most prominent appearance of the work's title, fdl.texi(,101) preceding the beginning of the body of the text. fdl.texi(,102) fdl.texi(,103) @item fdl.texi(,104) VERBATIM COPYING fdl.texi(,105) fdl.texi(,106) You may copy and distribute the Document in any medium, either fdl.texi(,107) commercially or noncommercially, provided that this License, the fdl.texi(,108) copyright notices, and the license notice saying this License applies fdl.texi(,109) to the Document are reproduced in all copies, and that you add no other fdl.texi(,110) conditions whatsoever to those of this License. You may not use fdl.texi(,111) technical measures to obstruct or control the reading or further fdl.texi(,112) copying of the copies you make or distribute. However, you may accept fdl.texi(,113) compensation in exchange for copies. If you distribute a large enough fdl.texi(,114) number of copies you must also follow the conditions in section 3. fdl.texi(,115) fdl.texi(,116) You may also lend copies, under the same conditions stated above, and fdl.texi(,117) you may publicly display copies. fdl.texi(,118) fdl.texi(,119) @item fdl.texi(,120) COPYING IN QUANTITY fdl.texi(,121) fdl.texi(,122) If you publish printed copies of the Document numbering more than 100, fdl.texi(,123) and the Document's license notice requires Cover Texts, you must enclose fdl.texi(,124) the copies in covers that carry, clearly and legibly, all these Cover fdl.texi(,125) Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on fdl.texi(,126) the back cover. Both covers must also clearly and legibly identify fdl.texi(,127) you as the publisher of these copies. The front cover must present fdl.texi(,128) the full title with all words of the title equally prominent and fdl.texi(,129) visible. You may add other material on the covers in addition. fdl.texi(,130) Copying with changes limited to the covers, as long as they preserve fdl.texi(,131) the title of the Document and satisfy these conditions, can be treated fdl.texi(,132) as verbatim copying in other respects. fdl.texi(,133) fdl.texi(,134) If the required texts for either cover are too voluminous to fit fdl.texi(,135) legibly, you should put the first ones listed (as many as fit fdl.texi(,136) reasonably) on the actual cover, and continue the rest onto adjacent fdl.texi(,137) pages. fdl.texi(,138) fdl.texi(,139) If you publish or distribute Opaque copies of the Document numbering fdl.texi(,140) more than 100, you must either include a machine-readable Transparent fdl.texi(,141) copy along with each Opaque copy, or state in or with each Opaque copy fdl.texi(,142) a publicly-accessible computer-network location containing a complete fdl.texi(,143) Transparent copy of the Document, free of added material, which the fdl.texi(,144) general network-using public has access to download anonymously at no fdl.texi(,145) charge using public-standard network protocols. If you use the latter fdl.texi(,146) option, you must take reasonably prudent steps, when you begin fdl.texi(,147) distribution of Opaque copies in quantity, to ensure that this fdl.texi(,148) Transparent copy will remain thus accessible at the stated location fdl.texi(,149) until at least one year after the last time you distribute an Opaque fdl.texi(,150) copy (directly or through your agents or retailers) of that edition to fdl.texi(,151) the public. fdl.texi(,152) fdl.texi(,153) It is requested, but not required, that you contact the authors of the fdl.texi(,154) Document well before redistributing any large number of copies, to give fdl.texi(,155) them a chance to provide you with an updated version of the Document. fdl.texi(,156) fdl.texi(,157) @item fdl.texi(,158) MODIFICATIONS fdl.texi(,159) fdl.texi(,160) You may copy and distribute a Modified Version of the Document under fdl.texi(,161) the conditions of sections 2 and 3 above, provided that you release fdl.texi(,162) the Modified Version under precisely this License, with the Modified fdl.texi(,163) Version filling the role of the Document, thus licensing distribution fdl.texi(,164) and modification of the Modified Version to whoever possesses a copy fdl.texi(,165) of it. In addition, you must do these things in the Modified Version: fdl.texi(,166) fdl.texi(,167) @enumerate A fdl.texi(,168) @item fdl.texi(,169) Use in the Title Page (and on the covers, if any) a title distinct fdl.texi(,170) from that of the Document, and from those of previous versions fdl.texi(,171) (which should, if there were any, be listed in the History section fdl.texi(,172) of the Document). You may use the same title as a previous version fdl.texi(,173) if the original publisher of that version gives permission. fdl.texi(,174) fdl.texi(,175) @item fdl.texi(,176) List on the Title Page, as authors, one or more persons or entities fdl.texi(,177) responsible for authorship of the modifications in the Modified fdl.texi(,178) Version, together with at least five of the principal authors of the fdl.texi(,179) Document (all of its principal authors, if it has less than five). fdl.texi(,180) fdl.texi(,181) @item fdl.texi(,182) State on the Title page the name of the publisher of the fdl.texi(,183) Modified Version, as the publisher. fdl.texi(,184) fdl.texi(,185) @item fdl.texi(,186) Preserve all the copyright notices of the Document. fdl.texi(,187) fdl.texi(,188) @item fdl.texi(,189) Add an appropriate copyright notice for your modifications fdl.texi(,190) adjacent to the other copyright notices. fdl.texi(,191) fdl.texi(,192) @item fdl.texi(,193) Include, immediately after the copyright notices, a license notice fdl.texi(,194) giving the public permission to use the Modified Version under the fdl.texi(,195) terms of this License, in the form shown in the Addendum below. fdl.texi(,196) fdl.texi(,197) @item fdl.texi(,198) Preserve in that license notice the full lists of Invariant Sections fdl.texi(,199) and required Cover Texts given in the Document's license notice. fdl.texi(,200) fdl.texi(,201) @item fdl.texi(,202) Include an unaltered copy of this License. fdl.texi(,203) fdl.texi(,204) @item fdl.texi(,205) Preserve the section entitled ``History'', and its title, and add to fdl.texi(,206) it an item stating at least the title, year, new authors, and fdl.texi(,207) publisher of the Modified Version as given on the Title Page. If fdl.texi(,208) there is no section entitled ``History'' in the Document, create one fdl.texi(,209) stating the title, year, authors, and publisher of the Document as fdl.texi(,210) given on its Title Page, then add an item describing the Modified fdl.texi(,211) Version as stated in the previous sentence. fdl.texi(,212) fdl.texi(,213) @item fdl.texi(,214) Preserve the network location, if any, given in the Document for fdl.texi(,215) public access to a Transparent copy of the Document, and likewise fdl.texi(,216) the network locations given in the Document for previous versions fdl.texi(,217) it was based on. These may be placed in the ``History'' section. fdl.texi(,218) You may omit a network location for a work that was published at fdl.texi(,219) least four years before the Document itself, or if the original fdl.texi(,220) publisher of the version it refers to gives permission. fdl.texi(,221) fdl.texi(,222) @item fdl.texi(,223) In any section entitled ``Acknowledgments'' or ``Dedications'', fdl.texi(,224) preserve the section's title, and preserve in the section all the fdl.texi(,225) substance and tone of each of the contributor acknowledgments fdl.texi(,226) and/or dedications given therein. fdl.texi(,227) fdl.texi(,228) @item fdl.texi(,229) Preserve all the Invariant Sections of the Document, fdl.texi(,230) unaltered in their text and in their titles. Section numbers fdl.texi(,231) or the equivalent are not considered part of the section titles. fdl.texi(,232) fdl.texi(,233) @item fdl.texi(,234) Delete any section entitled ``Endorsements''. Such a section fdl.texi(,235) may not be included in the Modified Version. fdl.texi(,236) fdl.texi(,237) @item fdl.texi(,238) Do not retitle any existing section as ``Endorsements'' fdl.texi(,239) or to conflict in title with any Invariant Section. fdl.texi(,240) @end enumerate fdl.texi(,241) fdl.texi(,242) If the Modified Version includes new front-matter sections or fdl.texi(,243) appendices that qualify as Secondary Sections and contain no material fdl.texi(,244) copied from the Document, you may at your option designate some or all fdl.texi(,245) of these sections as invariant. To do this, add their titles to the fdl.texi(,246) list of Invariant Sections in the Modified Version's license notice. fdl.texi(,247) These titles must be distinct from any other section titles. fdl.texi(,248) fdl.texi(,249) You may add a section entitled ``Endorsements'', provided it contains fdl.texi(,250) nothing but endorsements of your Modified Version by various fdl.texi(,251) parties---for example, statements of peer review or that the text has fdl.texi(,252) been approved by an organization as the authoritative definition of a fdl.texi(,253) standard. fdl.texi(,254) fdl.texi(,255) You may add a passage of up to five words as a Front-Cover Text, and a fdl.texi(,256) passage of up to 25 words as a Back-Cover Text, to the end of the list fdl.texi(,257) of Cover Texts in the Modified Version. Only one passage of fdl.texi(,258) Front-Cover Text and one of Back-Cover Text may be added by (or fdl.texi(,259) through arrangements made by) any one entity. If the Document already fdl.texi(,260) includes a cover text for the same cover, previously added by you or fdl.texi(,261) by arrangement made by the same entity you are acting on behalf of, fdl.texi(,262) you may not add another; but you may replace the old one, on explicit fdl.texi(,263) permission from the previous publisher that added the old one. fdl.texi(,264) fdl.texi(,265) The author(s) and publisher(s) of the Document do not by this License fdl.texi(,266) give permission to use their names for publicity for or to assert or fdl.texi(,267) imply endorsement of any Modified Version. fdl.texi(,268) fdl.texi(,269) @item fdl.texi(,270) COMBINING DOCUMENTS fdl.texi(,271) fdl.texi(,272) You may combine the Document with other documents released under this fdl.texi(,273) License, under the terms defined in section 4 above for modified fdl.texi(,274) versions, provided that you include in the combination all of the fdl.texi(,275) Invariant Sections of all of the original documents, unmodified, and fdl.texi(,276) list them all as Invariant Sections of your combined work in its fdl.texi(,277) license notice. fdl.texi(,278) fdl.texi(,279) The combined work need only contain one copy of this License, and fdl.texi(,280) multiple identical Invariant Sections may be replaced with a single fdl.texi(,281) copy. If there are multiple Invariant Sections with the same name but fdl.texi(,282) different contents, make the title of each such section unique by fdl.texi(,283) adding at the end of it, in parentheses, the name of the original fdl.texi(,284) author or publisher of that section if known, or else a unique number. fdl.texi(,285) Make the same adjustment to the section titles in the list of fdl.texi(,286) Invariant Sections in the license notice of the combined work. fdl.texi(,287) fdl.texi(,288) In the combination, you must combine any sections entitled ``History'' fdl.texi(,289) in the various original documents, forming one section entitled fdl.texi(,290) ``History''; likewise combine any sections entitled ``Acknowledgments'', fdl.texi(,291) and any sections entitled ``Dedications''. You must delete all sections fdl.texi(,292) entitled ``Endorsements.'' fdl.texi(,293) fdl.texi(,294) @item fdl.texi(,295) COLLECTIONS OF DOCUMENTS fdl.texi(,296) fdl.texi(,297) You may make a collection consisting of the Document and other documents fdl.texi(,298) released under this License, and replace the individual copies of this fdl.texi(,299) License in the various documents with a single copy that is included in fdl.texi(,300) the collection, provided that you follow the rules of this License for fdl.texi(,301) verbatim copying of each of the documents in all other respects. fdl.texi(,302) fdl.texi(,303) You may extract a single document from such a collection, and distribute fdl.texi(,304) it individually under this License, provided you insert a copy of this fdl.texi(,305) License into the extracted document, and follow this License in all fdl.texi(,306) other respects regarding verbatim copying of that document. fdl.texi(,307) fdl.texi(,308) @item fdl.texi(,309) AGGREGATION WITH INDEPENDENT WORKS fdl.texi(,310) fdl.texi(,311) A compilation of the Document or its derivatives with other separate fdl.texi(,312) and independent documents or works, in or on a volume of a storage or fdl.texi(,313) distribution medium, does not as a whole count as a Modified Version fdl.texi(,314) of the Document, provided no compilation copyright is claimed for the fdl.texi(,315) compilation. Such a compilation is called an ``aggregate'', and this fdl.texi(,316) License does not apply to the other self-contained works thus compiled fdl.texi(,317) with the Document, on account of their being thus compiled, if they fdl.texi(,318) are not themselves derivative works of the Document. fdl.texi(,319) fdl.texi(,320) If the Cover Text requirement of section 3 is applicable to these fdl.texi(,321) copies of the Document, then if the Document is less than one quarter fdl.texi(,322) of the entire aggregate, the Document's Cover Texts may be placed on fdl.texi(,323) covers that surround only the Document within the aggregate. fdl.texi(,324) Otherwise they must appear on covers around the whole aggregate. fdl.texi(,325) fdl.texi(,326) @item fdl.texi(,327) TRANSLATION fdl.texi(,328) fdl.texi(,329) Translation is considered a kind of modification, so you may fdl.texi(,330) distribute translations of the Document under the terms of section 4. fdl.texi(,331) Replacing Invariant Sections with translations requires special fdl.texi(,332) permission from their copyright holders, but you may include fdl.texi(,333) translations of some or all Invariant Sections in addition to the fdl.texi(,334) original versions of these Invariant Sections. You may include a fdl.texi(,335) translation of this License provided that you also include the fdl.texi(,336) original English version of this License. In case of a disagreement fdl.texi(,337) between the translation and the original English version of this fdl.texi(,338) License, the original English version will prevail. fdl.texi(,339) fdl.texi(,340) @item fdl.texi(,341) TERMINATION fdl.texi(,342) fdl.texi(,343) You may not copy, modify, sublicense, or distribute the Document except fdl.texi(,344) as expressly provided for under this License. Any other attempt to fdl.texi(,345) copy, modify, sublicense or distribute the Document is void, and will fdl.texi(,346) automatically terminate your rights under this License. However, fdl.texi(,347) parties who have received copies, or rights, from you under this fdl.texi(,348) License will not have their licenses terminated so long as such fdl.texi(,349) parties remain in full compliance. fdl.texi(,350) fdl.texi(,351) @item fdl.texi(,352) FUTURE REVISIONS OF THIS LICENSE fdl.texi(,353) fdl.texi(,354) The Free Software Foundation may publish new, revised versions fdl.texi(,355) of the GNU Free Documentation License from time to time. Such new fdl.texi(,356) versions will be similar in spirit to the present version, but may fdl.texi(,357) differ in detail to address new problems or concerns. See fdl.texi(,358) @uref{http://www.gnu.org/copyleft/}. fdl.texi(,359) fdl.texi(,360) Each version of the License is given a distinguishing version number. fdl.texi(,361) If the Document specifies that a particular numbered version of this fdl.texi(,362) License ``or any later version'' applies to it, you have the option of fdl.texi(,363) following the terms and conditions either of that specified version or fdl.texi(,364) of any later version that has been published (not as a draft) by the fdl.texi(,365) Free Software Foundation. If the Document does not specify a version fdl.texi(,366) number of this License, you may choose any version ever published (not fdl.texi(,367) as a draft) by the Free Software Foundation. fdl.texi(,368) @end enumerate fdl.texi(,369) fdl.texi(,370) @page fdl.texi(,371) @appendixsubsec ADDENDUM: How to use this License for your documents fdl.texi(,372) fdl.texi(,373) To use this License in a document you have written, include a copy of fdl.texi(,374) the License in the document and put the following copyright and fdl.texi(,375) license notices just after the title page: fdl.texi(,376) fdl.texi(,377) @smallexample fdl.texi(,378) @group fdl.texi(,379) Copyright (C) @var{year} @var{your name}. fdl.texi(,380) Permission is granted to copy, distribute and/or modify this document fdl.texi(,381) under the terms of the GNU Free Documentation License, Version 1.1 fdl.texi(,382) or any later version published by the Free Software Foundation; fdl.texi(,383) with the Invariant Sections being @var{list their titles}, with the fdl.texi(,384) Front-Cover Texts being @var{list}, and with the Back-Cover Texts being @var{list}. fdl.texi(,385) A copy of the license is included in the section entitled ``GNU fdl.texi(,386) Free Documentation License''. fdl.texi(,387) @end group fdl.texi(,388) @end smallexample fdl.texi(,389) fdl.texi(,390) If you have no Invariant Sections, write ``with no Invariant Sections'' fdl.texi(,391) instead of saying which ones are invariant. If you have no fdl.texi(,392) Front-Cover Texts, write ``no Front-Cover Texts'' instead of fdl.texi(,393) ``Front-Cover Texts being @var{list}''; likewise for Back-Cover Texts. fdl.texi(,394) fdl.texi(,395) If your document contains nontrivial examples of program code, we fdl.texi(,396) recommend releasing these examples in parallel under your choice of fdl.texi(,397) free software license, such as the GNU General Public License, fdl.texi(,398) to permit their use in free software. fdl.texi(,399) fdl.texi(,400) @c Local Variables: fdl.texi(,401) @c ispell-local-pdict: "ispell-dict" fdl.texi(,402) @c End: fdl.texi(,403) mini_ker.texi(,4217) mini_ker.texi(,4218) @bye texi2html-1.82/test/manuals/res/texi_mini_ker/mini_ker.texi0000644000175000017500000045362011264347121025771 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename mini_ker.info @set UPDATED 28 March 2002 @set UPDATED-MONTH March 2002 @set EDITION 4.2 @set VERSION 4.2 @c @set myversion @value{VERSION} @set myversion 102 @set myurl @url{http://www.environnement.ens.fr/@/perso/@/dumas/@/mini_ker/@/software.html} @settitle Miniker 102 manual @syncodeindex fn vr @dircategory Miscellaneous @copying @noindent Copyright (C) 2004, 2005, 2006, 2007 Alain Lahellec@* Copyright (C) 2004, 2005, 2006, 2007 Patrice Dumas@* Copyright (C) 2004, St@'ephane Hallegatte @quotation Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover text and with no Back-Cover Text. A copy of the license is included in the section entitled ``GNU Free Documentation License.'' @end quotation @end copying @titlepage @title Miniker manual @subtitle for Miniker version 102, 28 March 2002 @author The TEF Collaboration @c @author Alain Lahellec @c @author Patrice Dumas @c @author St@'ephane Hallegatte @page @vskip 0pt plus 1filll @insertcopying @end titlepage @node Top @top Miniker 102 manual @c @insertcopying @node Top @top Miniker 102 manual @strong{By: The TEF Collaboration} @insertcopying @menu * Introduction:: * TEF overview:: * A model with Miniker:: * Advanced programming:: * Dynamic system analysis:: * Advanced use of Miniker with make:: Indices * Concepts index:: * Variables macros and functions index:: Appendices * Installation:: * Cmz directives reference:: * Copying This Manual:: The GNU Free Documentation License. @end menu @contents @node Introduction @unnumbered Introduction @cindex TEF @cindex cells @cindex transfers @cindex ZOOM @cindex mortran Miniker is a modeling tool, built especially in order to implement models written following the @acronym{TEF,Transfer Evolution Formalism} formalism, a mathematical framework for system analysis and simulation. Miniker allows for timewise simulation, system analysis, adjoint computation, Kalman filtering and more. Miniker uses a fortran preprocessor, @command{mortran}, designed in the 1970's, to ease model writing using dedicated specific languages. For example partial derivatives are symbolicaly determined by @command{mortran} macros in Miniker. For the selection of another compile-time features, another set of preprocessor directives, the @dfn{cmz directives}, are used. In most cases the user does not need to know anything about that preprocessing that occurs behind the scene, he simply writes down the equations of his model and he is done. @c All partial derivatives needed to solve the TEF system are automatically @c determined during the pre-compilation stage. @c Once all models written down and initial conditions @c given using a pseudo-Fortran type of language, the model is ready to run. @c The language developed to get automatic symbolic partial derivatives @c uses the Fortran pre-compiler @command{mortran}, designed in the 1970's. A comprehensive description of the @acronym{TEF} formalism in available on @url{http://www.lmd.jussieu.fr/ZOOM/doc/tef-GB-partA5.pdf}). The Miniker software is a reduced version of @uref{http://www.lmd.jussieu.fr@//zoom,@strong{ZOOM}}, that can only handle a hundreds of variables, but is much easier to use. @menu * Intended audience:: * Reading guide:: * Other Manuals and documentation:: @end menu @node Intended audience @unnumberedsec Intended audience The reader should have notions in system dynamics. @c and understand the basis of the TEF. Moreover a minimal knowledge of programmation and fortran is required. What is required is a basic understanding of variable types, affectation and fortran expressions. @node Reading guide @unnumberedsec Reading guide The first chapter is a brief overview of the @acronym{TEF}. The following describes how to write, compile and run a model in Miniker in its basic and comprehensive syntax. @c Reading the sections of this chapter up to the section @c @emph{Symbolic model description} is required to know the @c syntax of model description in @Minik{}. Reading up to the section @emph{Controlling the run} is required to be able to use Miniker. In this section it is assumed that Miniker is properly setup. The installation instructions are in the appendix at @ref{Installation}. @c 2 programming environment to compile the model are available, with cmz @c and make, you can skip the method description you are not interested in. @c A reference for the usefull cmz directives is also in the appendix @c (@pxref{Cmz directives reference}). @c You should also @c read the following section, @emph{Symbolic model description} which presents an @c alternate syntax for model description, such that you can choose what you @c prefer. The next chapter describes advanced features, first a general introduction to features settings and then a description of other model description related features. The next chapter describes system analysis tools available with Miniker. The sections are independant and each describes how to use a specific feature. If you plan on using these features, you should also read @ref{Selecting features, , Overview of feature setting}. A final chapter describes advanced features in a development environment using make, In the appendix the instructions for the installation are described (@pxref{Installation}). @node Other Manuals and documentation @unnumberedsec Other Manuals and documentation A programmers'Manual is available (in French), and can be asked for to any member of the collabration. See additional documents in @url{http://www.lmd.jussieu.fr/Zoom/doc} or ask for Research texts and articles to members. @node TEF overview @chapter An overview of the @acronym{TEF} formalism The @acronym{TEF, Transfer Evolution Formalism} is based on partitionning and recoupling of model subsystems. It allows the study of the coupling between subsystems by the means of linearization and time discretization. @menu * Cell and Transfer:: * Linearization and discretization:: @end menu @node Cell and Transfer @section Cell and Transfer equations In the @acronym{TEF}, a model is mathematically represented by a set of equations corresponding to two kinds objects: @enumerate @item Cells which are elementary models and correspond to evolution equations such as: @noindent @math{d eta(t)/d t = g(eta(t),phi(t))} Vector @math{\eta} represent the state variables of cells and the vector @math{\varphi} represent the dependent boundary conditions, @i{i.e.} the variables considered as boundary conditions by a cell, but depending upon the complete model state. This dependent boundary conditions are required to make the cells correspond to well-posed problems. @c FIXME acceptable? These variables are often called state variables, and prognostic variables in meteorology. @item Transfers which are determined by constraint equations such as: @noindent @math{phi(t) = f(eta(t),phi(t))} These equations are often called algebraic equations, and in meteorology diagnostic equations. @end enumerate @node Linearization and discretization @section Linearization and discretization in the @acronym{TEF} The relations between sub-systems is excessively difficult to exhibit when having to cope with non-linear system. In the @acronym{TEF}, the @acronym{TLS, Tangent Linear System} is constructed along the trajectory. One considers the system over a small portion along the trajectory, say between @math{t} and @math{t + \delta t}. The variation @math{\delta \eta} of @math{\eta} and @math{\delta \varphi} of @math{\varphi} is obtained through a Pad@'e approximation of the state-transition matrix. The final form of the algebraic system is closed to the classical Crank-Nicolson scheme: @c FIXME PAd'e? od Taylor? @c through a Taylor expansion followed by time integration. @c A time scheme is then applied to the @acronym{TLS} (a Crank-Nicholson scheme), @c to obtain an algebraic system describing the relationships between @c variations of transfers and cells variables: The blocks appearing in the Jacobian matrix are constructed with partial derivative of @math{f} and @math{g}, and with @math{\delta t}. From this system the elimination of @math{\delta \eta} leads to another formulation giving the coupling between transfers, and allows for the @math{\delta \varphi} computation. The @math{\delta \varphi} value is then substitued in @math{\delta \eta} to complete the time-step solving process. @node A model with Miniker @chapter Miniker model programming @cindex sequences Miniker works by combining the model specification code given by the user and other source files provided in the package. The code is assembled, preprocessed, compiled, linked and the resulting program can be run to produce the model trajectory and dynamic analysis. The code provided in the package contains a principal program, some usefull subroutines and pieces of code called @dfn{sequences} combined with the different codes. Among these sequences some hold the code describing the model and are to be written by the user (sequences are similar to Fortran include files). @menu * Structure of the code:: * A model description:: * Setting and running a model:: * Controlling the run:: @end menu @node Structure of the code @section General structure of the code @cindex sequence @cindex zinit, general The sequences used to enter model description hold the @c vector dimensions, mathematical formulae for each cell and transfer component, dedicated derived computations, and time-step steering. During the code generation stage, cmz directives are preprocessed, then the user pseudo-Fortran instructions are translated by @command{mortran} using macros designed to generate in particular all Fortran instructions that compute the Jacobian matrices used in @acronym{TEF} modelling. @c A first users' sequence to program is: @file{dimetaphi} where the model @c dimensions are given, for the two vector-array @code{eta(.)} for cells @c and @code{ff(.)} for transfers (@pxref{Model size,,Entering model size}). The sequence @file{zinit} contains the mathematical formulation of the model (@pxref{Model equation and parameters, Entering model equation and parameters}). Another sequence, @file{zsteer}, is merged at the end of the time step advance of the simulation, where the user can monitor the time step values and printing levels, and perform particular computations etc. (@pxref{End of time step, ,Executing code at the end of each time step}). @node A model description @section Miniker programming illustrated @cindex TEF The general @acronym{TEF} system writes: @noindent @math{d eta(t)/d t = g(eta(t),phi(t))@* phi(t) = f(eta(t),phi(t))} To illustrate the model description in Miniker a simple predator-prey model of Lotka-Volterra is used. This model can be written in the following @acronym{TEF} form: @noindent @math{d eta_prey(t)/d t = a * eta_prey - a * phi_meet@* d eta_pred(t)/d t = -c * eta_pred +c * phi_meet} @noindent @math{phi_meet = eta_prey * eta_pred} with two cell equations, @i{i.e}. state evolution of the prey and predator groups, and one transfer accounting for the meeting of individuals of different group. @menu * A note about mortran and cmz directives:: * Model equation and parameters:: @end menu @node A note about mortran and cmz directives @subsection All you need to know about mortran and cmz directives @cindex mortran The first stage of code generation consists in cmz directives preprocessing. Cmz directives are used for conditional selection of features, and sequence inclusion. At that point you don't need to know anything about these directives. They are only usefull if you want to take advantage of advanced features (@pxref{Programming with cmz directives}). The code in sequences is written in Mortran and the second stage of code generation consists in mortran macro expansion. The mortran language is described in its own manual, here we only explain the very basics which is all you need to know to use Miniker. Mortran basic instructions are almost Fortran, the differences are the following: @itemize @bullet @item The code is free-form, and each statement should end with a semi-colon @code{;}. @item Comments may be introduced by an exclamation mark @code{!} at the beginning of a line, or appear within double quotes @code{"} in a single line. @item It is possible to use blocs, for @code{do} or @code{if} statement for example, and they are enclosed within brackets @samp{<} and @samp{>}. To be in the safe side, a semi-colon @code{;} should be added after a closng bracket @code{>}. @end itemize The following fictious code is legal mortran: @example real param; param = 3.; ff(1) = ff(3)**eta(1); "a comment" ! a line comment do inode=1,n_node ; @end example Thanks to mortran the model code is very simply specified, as you'll see next. @node Model equation and parameters @subsection Entering model equation and parameters @cindex @file{zinit} @vindex dt @vindex time @vindex nstep @vindex modzprint The model equation and parameters and some Miniker parameters are entered in the @file{zinit} sequence. The whole layout of the model is given before detailing the keywords. @example !%%%%%%%%%%%%%%%%%%%%%% ! Parameters !%%%%%%%%%%%%%%%%%%%%%% real apar,bpar; "optional Fortran type declaration" ! required parameters dt=.01; "initial time-step" nstep=10 000; "number of iterations along the trajectory" time=0.; "time initialisation " ! model parameters apar = 1.5; cpar = 0.7; ! misceallaneous parameters modzprint = 1000; "printouts frequency" print*,'***************************************'; print*,'Lotka-Volterra model with parameters as:'; z_pr: apar,bpar; print*,'***************************************'; !%%%%%%%%%%%%%%%%%%%%%% ! Transfer definition !%%%%%%%%%%%%%%%%%%%%%% ! rencontre (meeting) set_Phi < var: ff_interact, fun: f_interact = eta_prey*eta_pred; >; !%%%%%%%%%%%%%%%%%%%%%% ! Cell definition !%%%%%%%%%%%%%%%%%%%%%% set_eta < var: eta_prey, fun: deta_prey = apar*eta_prey - apar*ff_interact; var: eta_pred, fun: deta_pred = - cpar*eta_pred + cpar*ff_interact; >; !%%%%%%%%%%%%%%%%%%%%%% ! Initial states !%%%%%%%%%%%%%%%%%%%%%% eta_prey = 1.; eta_pred = 1.; ; OPEN(50,FILE='title.tex',STATUS='UNKNOWN'); "title file" write(50,5000) apar,cpar; 5000;format('Lotka-Volterra par:',2F4.1); @end example @subsubheading Variables and model parameters The following variables are mandatory: @table @code @item dt The time step. @item time Model time initialisation. @item nstep Number of iterations along the trajectory. @end table There are no other mandatory variables. Some optional variables are used to monitor the printout and ouput of results of the code. As an example, the variable @code{modzprint} is used to set the frequency of the printout of the model matrix and vectors during the run (@pxref{Controlling the printout and data output}). User's defined variable and Fortran or Mortran instructions can always be added for intermediate calculus. To avoid conflict with the variables of the Miniker code, the rule is that a users symbol must not have characters @samp{o} in the first two symbol characters. In the predator-prey example there are two model parameters. The fortran variables are called here @code{apar} for @math{a} and @code{cpar} for @math{c}. If a Fortan type definition is needed, it should be set at the very beginning of @file{zinit}. The predator-prey code variable initializations finally reads @example @group !%%%%%%%%%%%%%%%%%%%%%% ! Parameters !%%%%%%%%%%%%%%%%%%%%%% real apar,bpar; "optional Fortran type declaration" dt=.01; nstep=10 000; time=0.; ! model parameters apar = 1.5; cpar = 0.7; modzprint = 1000; @end group @end example @subsubheading Model equations @anchor{Model equations} @findex set_Phi @findex set_eta @vindex var: @vindex fun: @vindex eqn: The model equations for cells and model equations for transferts are entered in two mortran blocks, one for the transferts, the other for the cell components. The model equations for cells are entered into a @code{set_eta} block, and the transfer equations are entered into a @code{set_phi} block. In each block the couples variable-function are specified. For transfers the function defines the transfer itself while for cells the function describes the cell evolution. The variable is specified with @code{var:}, the function is defined with @code{fun:}. In the case of the predator-prey model, the transfer variable associated with @math{\varphi_{meet}} could be called @code{ff_interact} and the transfer definition would be given by: @example set_Phi < var: ff_interact, fun: f_interact = eta_prey*eta_pred; >; @end example The two cell equations of the predator-prey model, with name @code{eta_prey} for the prey (@math{\eta_{prey}}) and @code{eta_pred} for the predator (@math{\eta_{pred}}) are: @example set_eta < var: eta_prey, fun: deta_prey = apar*eta_prey - apar*ff_interact; var: eta_pred, fun: deta_pred = - cpar*eta_pred + cpar*ff_interact; >; @end example The @samp{;} at the end of the mortran block is important. @page The whole model equations are setup with: @example @group !%%%%%%%%%%%%%%%%%%%%%% ! Transfer definition !%%%%%%%%%%%%%%%%%%%%%% ! rencontre (meeting) set_Phi < var: ff_interact, fun: f_interact = eta_prey*eta_pred; >; !%%%%%%%%%%%%%%%%%%%%%% ! Cell definition !%%%%%%%%%%%%%%%%%%%%%% set_eta < var: eta_prey, fun: deta_prey = apar*eta_prey - apar*ff_interact; var: eta_pred, fun: deta_pred = - cpar*eta_pred + cpar*ff_interact; >; @end group @end example Whenever the user is not concerned with giving a specific name to a function, it is possible to specify the equation only with @code{eqn:}. Therefore the user may replace an instruction as: @example var: ff_dump, fun: f_dump = - rd*(eta_speed - eta_speed_limiting); @end example with: @example eqn: ff_dump = - rd*(eta_speed - eta_speed_limiting); @end example In that case, the unnamed function will take the name of the defined variable preceded by the @samp{$} sign: @code{$ff_dump}. @subsubheading Starting points @cindex starting point The cells equations require state initial conditions. In some case, the transfers may also need starting points although they are determined from the cell values. In the predator-prey model the starting points for cells are: @example ! initial state ! ------------- eta_prey = 1.; eta_pred = 1.; @end example When there is a non trivial implicit relationship between the transfers in the model, it may be usefull or even necessary to set some transfers to non-zero values. This difficulty is only relevant for the very first step of the simulation and will be used as a first guess of @math{\varphi}. The uninitialized transfers having a default compiler-dependant (often zero) value, an initialization to another value may help avoiding singular functions or matrix and ensure convergence in the Newton algorithm used to solve the transfer implicit equation. @subsubheading The cell and transfer arrays @vindex eta(.) @vindex ff(.) @vindex mp @vindex np Sometime it is easier to iterate over an array than to use the cell or transfer variable name. This is possible because there is a correspondence between the variable names and the fortran array @code{eta(.)} for the cell variables and the fortran array @code{ff(.)} for the transfer variables@footnote{In fact the variables names are transformed into fortran array elements by mortran generated macros, so the symbolic names defined in the mortran blocks never appears in the generated fortran code, they are replaced by the fortran arrays.}. The index of the variable is determined by the order of appearance in the variable definition blocks. It is reminded in the output, as explained later (@pxref{Simulation and output}). The number of cells is in the integer @code{np} variable, and the number of transfer is in the integer @code{mp} variable. @subsubheading title file @anchor{Title file} @cindex title file @cindex @file{title.tex} For some graphics generation, a file with name @file{title.tex} is required which sets the title. The following instructions take care of that: @example OPEN(50,FILE='title.tex',STATUS='UNKNOWN'); write(50,5000) apar,cpar; 5000;format('Lotka-Volterra par:',2F4.1); close(50); @end example In that case the parameter values are written down, to differenciate between different runs. This step is in general not needed. @c The correspondence with basic components are printed out at execution @c time as explained in @ref{Simulation and output,, @c Running a simulation and using the output}. Also, a @file{Model.hlp} is @c generated that recalls the basic names and equations of the model. @c It may be noted that whenever @c the order of variable-functions is the same between indexed declaration and @c symbolic, the two generated Fortran code are almost identical. @node Setting and running a model @section Setting and running a model In this section it is assumed that a programming environment has been properly setup. This environment may use either cmz or make to drive the preprocessing and compilation. You can skip the part related with the environment you don't intend to use. For instructions regarding the installation, see @ref{Installation}. @menu * Setting up a model with cmz:: * Setting up a model with make:: * Simulation and output:: * Graphics:: @end menu @node Setting up a model with cmz @subsection Setup a model and compile with cmz @cindex @command{mod} @cindex @file{$zinit} @cindex @file{$dimetaphi} The user defined sequences are @samp{KEEP} in the cmz world. The most common organization is to have a cmz file in a subdirectory of the directory containing the @file{mini_ker.cmz} cmz file. In this cmz file there should be a @samp{PATCH} called @samp{zinproc} with the KEEPs within the patch. The KEEP must be called @file{$zinit}. @c and @file{$dimetaphi}. From within cmz in the directory of your model the source extraction, compilation and linking will be triggered by a @command{mod} command. This macro uses the @file{selseq.kumac} information to find the @file{mini_ker.cmz} cmz file. @command{mod} shall create a directory with the same name than the cmz file, @file{mymodel/} in our example. In this directory there is another directory @file{cfs/} containing the sources extracted from the cmz file. The file @file{mymodel_o.tmp} contains all the mortran code generated by cmz with the sequences substituted, including the @file{$zinit}. @c and @c @file{$dimetaphi} sequences (assembled code). The fortran produced by the preprocessing and splitting of this file is in files with the traditional @samp{.f} suffix. The principal program is in @file{principal.f}. An efficient way of getting familiar with mini_ker methods is looking at the @file{mymodel_o.tmp} where all sequences and main Mortran instructions are gathered. Symbolic derivation @c FIXME pas ici la symbolic derivation is noted as @code{F_D(expression)(/variable)}, and the resulting Fortran code is in @file{principal.f}. @command{mod} also triggers compilation and linking. The object files are in the same @file{cfs/} directory and the executable is in the @file{mymodel/} directory, with name @file{mymodel.exe}. @node Setting up a model with make @subsection Setup a model and compile with make @cindex compilation @c @cindex @file{dimetaphi.mti} @cindex @file{zinit.mti} @vindex model_file_name With make, the sequences are files ending with @samp{.mti} (for mortran include files), called, for example, @file{zinit.mti}. @c and @file{dimetaphi.mti}. They are included by @command{mortran} in other source files. You also need a @file{Makefile} to drive the compilation of the model. If you don't need additional code or libraries to be linked with your model you have two alternatives. @enumerate @item The simplest alternative is to run the @command{start_miniker} script with the model file name as argument. It should copy a @file{zinit.mti} file ready to be edited and a Makefile ready to compile the model. For the predator prey model, for example, you could run @example $ start_miniker predator @end example @item Otherwise you can copy the Makefile from @file{template/Makefile} in the directory containing the sequences. You should then change the compiled model file name, by changing the value of the @code{model_file_name} variable to the name of your choice in the Makefile. It is set to @file{mymodel} in the template. For the predator-prey model, it could be set like @example model_file_name = predator @end example If you want the executable model file to be built in another directory, you could set @example model_file_name = some_dir/predator @end example The other items set in the default Makefile should be right. @end enumerate The preprocessing and the compilation are launched with @example make all @end example The mortran files are generated by the cmz directive preprocessor from files found in the package source directories. The mortran files end with @samp{.mtn} for the main files and @samp{.mti} for include files. They are output in the current directory. The mortran preprocessor then preprocess these mortran files and includes the sequences. The resulting fortran code is also in the current directory, in files with a @samp{.f} suffix. Some fortran files ending with @samp{.F} may also be created by the cmz directive preprocessor. The object files resulting from the compilation of all the fortran files (generated from mortran or directly from fortran files) are there too. In case you want to override the default sequences or a subroutine file you just have to create it in your working directory along with the @file{zinit.mti}. @c and @file{dimetaphi.mti}. For example you could want to create or modify a @file{zsteer.mti} file (@pxref{End of time step,, Executing code at the end of each time step}), a @file{zcmd_law.mti} file (@pxref{Control laws}), a @file{monitor.f} file (@pxref{Turning the model into a subroutine}) to take advantage of features presented later in this manual. More in-depth discussion of using make to run Miniker is covered in @ref{Advanced use of Miniker with make}. For example it is also possible to create files that are to be preprocessed by the cmz directive preprocessor and separate source files and generated files. This advanced use is more precisely covered in @ref{Programming with cmz directives}. @page @node Simulation and output @subsection Running a simulation and using the output @cindex running model Once compiled the model is ready to run, it only has to be executed. On standard output informations about the states, transfers, tangent linear system and other jacobian matrices are printed. For example the predator-prey model could be executed with: @example ./predator > result.lis @end example @cindex output file @vindex dEta(.) @cindex @file{res.data} @cindex @file{dres.data} @cindex @file{tr.data} @cindex @file{aspha.data} @cindex @file{Model.hlp} @c In case of a model entered symbolically @c (@pxref{Symbolic model description}) The correspondance between the symbolic variables and the basic vectors and functions are printed at run time: @example ---------------- Informing on Phi definition ----------------- Var-name, Function-name, index in ff vector ff_interact f_interact 1 ---------------------------------------------------- --------------- Informing on Eta definition ------------------ Var-name, Function-name, index in eta vector eta_prey deta_prey 1 eta_pred deta_pred 2 @end example A summary of the model equations are in @file{Model.hlp} file. For the same example: @example ======================= set_Phi 1 ff_interact f_interact eta_pray*eta_pred ======================= set_Eta 1 eta_pray deta_pray apar*eta_pray-apar*ff_interact 2 eta_pred deta_pred -cpar*eta_pred+cpar*ff_interact @end example @c FIXME never talked about that. Certainly not here when other general functions are specified with @code{f_set}, it can appear also in the same help file when replaced by @code{fun_set}. As far as possible, all data printed in the listing are associated with a name related to a variable. Here is an extract: @example Gamma :-8.19100E-02-1.42151E-01 3.87150E-02 eta_courant eta_T_czcx eta_T_sz ------------------------------------------------ Omega : 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 courant_L T_czcx Psi_Tczc Psi_Tsz ------------------------------------------------ @end example for the two known vectors of the system, and: @example >ker : Matrice de couplage 4 4 4 4 courant_L Raw(1,j=1,4): 1.000 -9.9010E-03 0.000 0.000 T_czcx Raw(2,j=1,4): -2.7972E-02 1.000 0.000 9.9900E-04 Psi_Tczcx Raw(3,j=1,4): 0.1605 9.7359E-02 1.000 -5.7321E-03 Psi_Tsz Raw(4,j=1,4): 0.000 -0.1376 5.7225E-03 1.000 Var-Name courant_L T_czcx Psi_Tczc Psi_Tsz ---------------------------------------------------------- @end example where the @code{couplage} (coupling matrix) is given that corresponds to the matrix coupling the four transfer components after @math{\delta\eta} has been eliminated from system. It is computed in the subprogram @file{oker} (for kernel) which solves the system. Basic results are output in a set of @samp{.data} files. The first line (or two lines) describes the column with a @samp{#} character used to mark the lines as comments (for @command{gnuplot} for example). In the @samp{.data} files, the data are simply separated with spaces. Each data file has the @code{time} variable values as first column. @footnote{@file{dres.data} has another time related variable as second column: @cindex @file{dres.data} @vindex dt @code{dt}, the time step that can vary in the course of a simulation.}. Following columns give the values of @code{eta(.)} in @file{res.data}, @code{dEta(.)} in @file{dres.data} -- the step by step variation of @code{eta(.)} -- and @code{ff(.)} in @file{tr.data}. Along the simulation the @acronym{TEF} Jacobian matrices are computed. A transfer variables elimination process also leads to the definition of the classical state advance matrix of the system (the corresponding array is @code{aspha(.,.)} in the code). This matrix is output in the file @file{aspha.data} that is used to post-run dynamics analyses. The matrix columns are written column wise on each record. @xref{Stability of fastest modes,,Stability analysis of fastest modes}. @xref{Generalized TLS,,Generalized tangent linear system analysis}. It is not used in the solving process. Other @samp{.data} files will be described later. @c FIXME already said @c At the begining of a run, the help file @file{Model.hlp} is generated for @c global checkiing of the model. In the example, it is: @c @example @c ======================= set_Phi @c 1 ff_interact f_interact eta_pray*eta_pred @c ======================= set_Eta @c 1 eta_pray deta_pray apar*eta_pray-apar*ff_interact @c 2 eta_pred deta_pred -cpar*eta_pred+cpar*ff_interact @c @end example @node Graphics @subsection Doing graphics @cindex graphics @cindex graphics with @command{gnuplot} @cindex graphics with @command{PAW} @c The format of the @samp{.data} files are coherent with GNU graphics, that is @c the data are simply separated with spaces. Since the data are simply separated with spaces, and comment lines begin with @samp{#}, the files can be vizualised with many programs. With @command{gnuplot}, for example, to plot @code{eta(@var{n})}, the @command{gnuplot} statement could be: @example plot "res.data" using 1:(@var{n}+1) @end example The similar one for @code{ff(@var{n})}: @example plot "tr.data" using 1:(@var{n}+1) @end example For people using @command{PAW}, the CERN graphical computer code, Miniker prepares kumacs that allow to read process the @samp{.data} files in the form of @emph{n-tuples} (see the @cite{PAW manual} for more information). In that cas, the flag @code{sel paw} has to be gievn in the @file{selsequ.kumac}. The generated n-tuples are ready to use only for vector dimension of at most 10 (including the variable @code{time}). These kumacs are overwritten each time the model is run. Usaually, gnuplot has to be preferred, but when using surfaces and histograms, PAW is better. The @file{gains.f} (and @file{go.xqt} is provided as an example in the Miniker files. @node Controlling the run @section Controlling the run @cindex controlling the run It is possible to add code that will be executed at the end of each time step. It is also possible to specify which time step leads to a printout on standard output. For maximal control, the code running te model may be turned into a subroutine to be called from another fortran (or C) program, this possibility is covered in @ref{Calling the model code}. @menu * End of time step:: * Controlling the printout and data output:: @end menu @node End of time step @subsection Executing code at the end of each time step @cindex @file{zsteer} @cindex @file{zsteer.inc} The code in the sequence @file{zsteer} is executed at the end of each time step. It is possible to change the time step length (variable @code{dt}) verify that the non linearity are not too big, or perform discontinuous modifications of the states. One available variable @code{res} might be usefull for time step monitoring. At the end of the time step, as soon as @math{\varphi} has been computed, a numerical test is applied on a pseudo relative quadratic residual between @math{\varphi=f(\eta(t-dt)+d\varphi} (@code{ ffl}), where @math{d\varphi} is given by the system resolution in @code{ker},and @math{\varphi=f(\eta),\varphi)}, Fortran variable (@code{ff}): @verbatim ! ======================================================== ! test linearite ffl - ff ! ======================================================== if (istep.gt.1) < res=0.; ; if (res .gt. TOL_FFL) < print*,'*** pb linearite : res > TOL_FFL a istep',istep,res,' > ',TOL_FFL; do io=1,m < z_pr: io,ff(io),ff(io)-ffl(io); >; >; >; @end verbatim This test hence applies only for non linearities in tranfer models. Nevertheless, @code{res} might be usefull to monitor the time step @code{dt} in @code{ZSTEER} and eventually go backward one step (@code{goto :ReDoStep:}). This can more appropriatly be coded in the (empty in default case) sequence @code{zstep}, inserted just before time-advancing states and @code{time} variables in @file{principal}. @vindex ffl(.) @cindex @code{ffl} (linearity test) @cindex linearity test It is also possible to fix the value of the criterium @code{TOL_FFL} in @file{zinit} different from its default value of @math{10^{-3}} -- independent of the Fortran precision. Many other variables are available, including @vtable @code @item istep The step number; @item couplage(.) The @acronym{TEF} coupling matrix between transfers; @item H The Jacobian matrix corresponding with: @c \varphi(t) &= f(\eta(t),\varphi(t))\cr @c \frac{\partial g(\eta(t),\varphi(t))}{\partial \eta(t)} g_1(eta,phi); @item Bb The Jacobian matrix corresponding with: g_2(eta,phi); @item Bt The Jacobian matrix corresponding with: f_1(eta,phi); @item D The Jacobian matrix corresponding with: f_2(eta,phi); @item aspha The state advance matrix; @item dneta @itemx dphi the variable increments; @end vtable One should be aware of that the linearity test concerns the preceding step. We have yet no example of managing the time-step. @page @node Controlling the printout and data output @subsection Controlling the printout and data output @cindex printing @vindex zprint @vindex modzprint The printout on standard output is performed if the variable @code{zprint} of type @code{logical} is true. Therefore it is possible to control this printout by setting @code{zprint} false or true. For example the following code, in sequence @file{zsteer}, triggers printing for every @code{modzprint} time step and the two following time steps: @example ZPRINT = mod(istep+1,modzprint).eq.0; Zprint = zprint .or. mod(istep+1,modzprint).eq.1; Zprint = zprint .or. mod(istep+1,modzprint).eq.2; @end example The data output to @file{.data} files described in @ref{Simulation and output,, Running a simulation and using the output} is performed if the @code{logical} variable @code{zout} is true. For example the following code, in @file{zsteer}, triggers output to @file{.data} files every @code{modzout} step. @example Zout = mod(istep,modzout).eq.0; @end example @node Advanced programming @chapter Advanced Miniker programming @menu * Selecting features:: * Calling the model code:: * 1D gridded model:: * Double precision:: * Partial Derivatives:: * Rule of programming non continuous models:: * Parameters:: * Observations and data:: * Explicit model size:: * Programming with cmz directives:: @end menu @node Selecting features @section Overview of additional features setting @cindex feature setting @cindex select flag @cindex logical flags @cindex @file{selseq.kumac} It is possible to enable some features by selecting which code should be part of the principal program. Each of these optionnal features are associated with a @dfn{select flag}. For example @c the optimisation with minuit is associated with the select @c flag @samp{minuik}, double precision is used instead of simple precision with the @samp{double} select flag, the model is a subroutine with the select flag @samp{monitor}, the Kalman filter code is set with @samp{kalman} and the 1D gridded model capabilities are associated with @samp{grid1d}. @c Currently it is only possible @c to select features in cmz. To select a given feature the cmz statement @code{sel @var{select_flag}} should be written down in the @file{selseq.kumac} found in the model directory. With make either the corresponding variable should be set to 1 or it should be added to the @code{SEL} make variable, depending on the feature. Other features don't need different or additional code to be used. Most of the features are enabled by setting specific logical variables to @samp{.true.}. This is the case for @code{zback} for the adjoint model, @code{zcommand} if the command is in a file and @code{zlaw} if it is a function and @code{zkalman} for the Kalman filter. These select and logical flags are described in the corresponding sections. In cmz an alternative of writing select flags to @file{selseq.kumac} is to drive the compilation with @code{smod @var{sel_flag}}. In that case the @var{sel_flag} is selected and the files and executable goes to a directory named @file{sel_flag}. The select flags are taken into account during cmz directives preprocessing. Therefore you have the possibility to use these flags to conditionnaly include pieces of code. In most cases you don't need to include code conditionally yourself though, but if you want to, this is covered in @ref{Programming with cmz directives}. @node Calling the model code @section Calling the model code When the model code is a subroutine, it can be called from another fortran program unit (or another program), and the model will be run each time the subroutine is called. This technique could be used, for example to perform optimization (@pxref{Adjoint model and optimisation,,Adjoint model and optimisation with Miniker}), or to run the model with different parameters. @menu * Turning the model into a subroutine:: * The model subroutine:: @end menu @node Turning the model into a subroutine @subsection Turning the model into a subroutine @c This feature is allready enabled with @command{make}, and to @c override the default program a file called @file{monitor.f} has to be created @c in the working directory. The default program simple calls the model @c subroutine. With cmz, one has to do a @example sel monitor @end example in the @file{selseq.kumac} file and create the KEEP that call the model code. @xref{Selecting features, Overview of additional features setting}. With make @samp{monitor} should be added to the @code{SEL} variable in the @file{Makefile}, for example: @example SEL = monitor @end example A file that call the principal subroutine should also be written, using the prefered language of the user. The additional object files should then be linked with the Miniker objects. To that aim they may be added to the @code{miniker_user_objects} variable. @node The model subroutine @subsection Calling the model subroutine The model subroutine is called @samp{principal} and is called with the following arguments: @deffn Subroutine principal (Cost, ncall, integer_flag, file_suffix, info, idxerror) Where @var{Cost} is a real number, @code{real} or @code{double precision}, and is set by the @code{principal} subroutine. It holds the value of the cost function if such function has been defined (the use and setting of a cost function is covered later, see @ref{Cost function coding and adjoint modeling}). @var{ncall} is an integer which corresponds with the number of call to @code{principal} done so far, it should be initialized to 0 and its value should not be changed, as it is changed in the @code{principal} subroutine. @var{integer_flag} is an integer that can be set by the user to be accessed in the @code{principal} subroutine. For example its value could be used to set some flags in the @file{zinit} sequence. @var{file_suffix} is a character string, that is suffixed to the output files names instead of @samp{.data}. If the first character is the null character @samp{char(0)}, the default suffix, @samp{.data} is appended. @var{info} and @var{idxerror} are integer used for error reporting. @var{idxerror} value is 0 if there was no error. It is negative for an alert, positive for a very serious error. The precise value determines where the error occured. @var{info} is an integer holding more precise information about the error. It is usually the information value from lapack. The precise meaning of these error codes is in @ref{tab:error_codes}. @end deffn @float table, tab:error_codes @multitable {kalman analysis state matrix advance in phase space, @math{(I-D)} inversion} {inversion} {@code{idxerror}} @headitem Source of error or warning @tab @code{info} @tab @code{idxerror} @c @item @code{} @tab @file{.data} @tab @tab @item state matrix inversion in ker @tab inversion @tab 1 @item time advance system resolution in ker @tab system @tab 2 @item transfer propagator, @math{(I-D)} inversion @tab inversion @tab 3 @item kalman analysis state matrix advance in phase space, @math{(I-D)} inversion @tab inversion @tab 21 @item kalman analysis variance covariance matrix non positive @tab Choleski @tab 22 @item kalman analysis error matrix inversion @tab inversion @tab 23 @item kalman error matrix advance @tab system @tab 24 @item transfers determination linearity problem for transfers @tab @tab -1 @item transerts determination Newton D_loop does not converge @tab @tab -2 @end multitable @caption{Meaning of error codes returned by principal.} @end float In general more information than the provided arguments has to be passed to the @code{principal} subroutine, in that case a @code{common} block, to be written in the @file{zinit} sequence can be used. @page @node 1D gridded model @section Describing 1D gridded model Specific macros have been built that allow generic description of 1D gridded models. Because of the necessity of defining left and right limiting conditions, the models are partitionned in three groups for cell and transfer components. In the following example, a chain of masselottes linked by springs and dumps is bounded to a wall on the left, and open at right. The @acronym{TEF} formulation of the problem is written in the phase space (position-shift, velocity) for node @math{k}, with bounding conditions: States:@* @noindent @math{d position(t,k)/d t = velocity(t,k)@* d velocity (t,k)/d t =(spring(t,k) - spring(t,k+1)+ dump(t,k)- dump(t,k+1))/m_k} Transfers:@* @noindent @math{spring(t,k) = -k_k (position(t,k)- position(t,k-1))@* dump(k,t) &= -d_k (velocity(t,k)- velocity(t,k-1))} Bounding conditions:@* @noindent @math{position(t,0) = 0@* velocity(t,0) = 0@* spring(t,N+1) = 0@* dump(t,N+1) =0} @cindex down node @cindex up node where @math{m_k} is the mass of node @math{k}, @math{r_k} and @math{d_k} the rigidity of springs and dumping coefficients. There are @math{N} nodes in the grid, from 1 to @math{N}, and two nodes outside of the grid, a limiting node 0, and a limiting node @math{N+1}. The limiting node corresponding with node 0 is called the @dfn{down} node, while the limiting node corresponding with node @math{N+1} is called the @dfn{up} node. Other models not part of the 1D grid may be added if any. To enable 1D gridded models, one should set the select flag @samp{grid1d}. In cmz it is achieved setting the select flag in @file{selseq.kumac}, like @example sel grid1d @end example With make, the @code{SEL} variable should contain @code{grid1d}. For example to select @code{grid1d} and @code{monitor}, it could be @example SEL = grid1d,monitor @end example @menu * 1D gridded Model size:: * 1D gridded model code:: @end menu @node 1D gridded Model size @subsection Setting dimensions for 1D gridded model @c FIXME grid1d sans dimetaphi? In that case the number of nodes, the number of states and tranferts per node, and the number of limiting transfers and states are required. These dimensions has to be entered in the @file{DimEtaPhi} sequence. The parameters for cells are @vtable @code @item n_node Number of cell nodes in the 1D grid. @item n_dwn Number of limiting cells with index -1, @i{i.e.} number of cells in the limiting down node. @item n_up Number of limiting cells with index +1, @i{i.e.} number of cells in the limiting up node. @item n_mult Number of cells in each node (multiplicity). @end vtable @vindex m_node @vindex m_dwn @vindex m_up @vindex m_mult The parameters for transfers, are similarly @code{m_node}, @code{m_dwn}, @code{m_up}, @code{m_mult}. The layout of their declaration should be respected as the precompiler matches the line. Also this procedure is tedious, it should be selected for debuging processes (use the flag @code{sel dimetaphi} in ``selsequ.kumac''. Otherwise, the dimensioning sequence will be automaticaly generated, which is smart but can lead to diffculty in interpreting syntax errors. Once a model is correctly entred, turn off the sel flag and further modifications will automatically generate the proper dimensions. The correctness of dimensionning should nevertheless always be checked in @code{principal.f}, where you can also check that null valued parameters as @code{lp, mobs, nxp} will suppress parts of the code - this is signaled as Fortran comment cards. In our example, there are three grids of cell and transfer variables (@code{n_node=m_node=3}). There are two cells and two transfers in each node (@code{n_mult=2} and @code{m_mult=2}). There is no limiting condition for the states in the down node therefore @code{n_up=0}. There is no transfer for the first limiting node, and therefore @code{m_dwn=0}. There are two states in the limiting node 0, the down node, @code{n_dwn=2}, and two transfers in the limiting last node the node up, and @code{m_up=2}: @example ! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ! nodes parameters, and Limiting Conditions (Low and High) ! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ parameter (n_node=3,n_dwn=2,n_up=0,n_mult=2); parameter (m_node=3,m_dwn=0,m_up=2,m_mult=2); ! ________________________________________________________ @end example @node 1D gridded model code @subsection 1D gridded Model coding The model code and parameters go in the @file{zinit} sequence. @subsubheading Parameters A value for the Miniker parameters and the model parameters should be given in @file{zinit}, in our example we have @example !%%%%%%%%%%%%%%%%%%%%%% ! Parameters !%%%%%%%%%%%%%%%%%%%%%% real rk(n_node),rd(n_node),rmassm1(n_node); data rk/n_node*1./; data rd/n_node*0.1/; data rmassm1/n_node*1./; dt=.01; nstep=5 000; modzprint = 1000; time=0.; @end example @subsubheading Limiting conditions @cindex limiting conditions @c The limiting states and transfer variables and the corresponding equations are @c declared using @c the symbolic model description @c (@pxref{Symbolic model description}). There are four mortran blocks for @code{node} and @code{up} and @code{down}, both for states and transfers: @findex set_dwn_eta @findex set_dwn_phi @findex set_up_eta @findex set_up_phi @table @code @item set_dwn_eta down node cells @item set_up_eta up node cells @item set_dwn_phi down node transfers @item set_up_phi up node transfers @end table The following scheme illustrates the example: @smallexample !%%%%%%%%%%%%%%%%%%%%%%%%%%================================================ ! Maillage convention inode !%%%%%%%%%%%%%%%%%%%%%%%%%% Open ended !(2 Down Phi Eta (n_node) ! Eta) \| .-----. .-----. .-----. / ! wall \|-\/\/\-| |-\/\/\-| | . . . -| |-\/\/\- |dummy ! pos \|--***--| 1 |--***--| 2 | . . . -| n |--***-- |Phis ! speed \| 1 |_____| 2 |_____| n |_____| n+1 \(2 Up Phi) ! @end smallexample Two states are associated with the down node, they correspond to the position and speed of the wall. As the wall don't move these states are initialized to be 0, and the cells are stationnary cells, therefore these values remain 0. @example ! Down cells (wall) ! ----------------- eta_pos_wall = 0; eta_speed_wall = 0.; set_dwn_eta < var: eta_pos_wall, fun: deta_pos_wall = 0.; var: eta_speed_wall, fun: deta_speed_wall= 0.; >; @end example There are 2 limiting transfers in the up node. They correspond with an open end and are therefore set to 0. @example ! limiting Transfers : dummy ones ! ------------------------------- set_Up_Phi < var:ff_dummy_1, fun: f_dummy_1=0.; var:ff_dummy_2, fun: f_dummy_2=0.; >; @end example @subsubheading Starting points The cell node state values are initialized. They are in an array indexed by the @code{inode} variable. In the example the variable corresponding with position is @code{eta_move} and the variable corresponding with speed is @code{eta_speed}. Their initial values are set with the following mortran code @example !--------------- ! Initialisation !--------------- ; do inode=1,n_node ; @end example If any transfer needs to be given a first-guess value, this is also done using @code{inode} as the node index. @subsubheading Grid node equations @findex set_node_Phi @findex set_node_eta @cindex equations, grid Each node is associated with an index @code{inode}. It allows to refer to the preceding node, with @code{inode-1} and the following node @code{inode+1}. The node states are declared in @code{set_node_Eta} block and the transfers are in @code{set_node_Phi} blocks. In the example, the cells are declared with @example ! node cells ! ---------- ; set_node_Eta < var: eta_move(inode), fun: deta_move(inode) = eta_speed(inode); var: eta_speed(inode), fun: deta_speed(inode) = rmassm1(inode) *( - ff_spring(inode+1) + ff_spring(inode) - ff_dump(inode+1) + ff_dump(inode) ); >; @end example Note that the @code{inode} is dummy in the @code{var:} definition and can as well be written as: @code{var: eta_move(.)}. The transfers are (@code{ff_spring} corresponds with springs and @code{ff_dump} with dumps): @example !%%%%%%%%%%%%%%%%%%%%%% ! Transfer definition !%%%%%%%%%%%%%%%%%%%%%% ! node transfers ! -------------- ! convention de signe spring : comprime:= + set_node_Phi < var: ff_spring(.), fun: f_spring(inode)= -rk(inode)*(eta_move(inode) - eta_move(inode-1)); var: ff_dump(.), fun: f_dump(inode) = -rd(inode)*(eta_speed(inode) - eta_speed(inode-1)); >; @end example The limiting states and transfers are associated with the states or transfers with index @code{inode+1} or @code{inode-1} appearing in node cell and transfer equations (@code{inode-1} for down limiting conditions and @code{inode+1} for up limiting conditions) in their order of appearance. In our example, in the @code{eta_speed} state node equation @code{ff_spring(inode+1)} appears before @code{ff_dump(inode+1)} and is therefore associated with @code{ff_dummy_1} while @code{ff_dump(inode+1)} is associated with the @code{ff_dummy_2} limiting transfer, as @code{ff_dummy_1} appears before @code{ff_dummy_2} in the limiting up transfers definitions. Verification of the grid index coherence should be eased with the following help printed in the listing header: @example --------------- Informing on Dwn Eta definition --------------- Var-name, Function-name, index in eta vector eta_pos_wall deta_pos_wall 1 [ eta_speed_wall deta_speed_wall 2 [ -------------- Informing on Eta Nodes definition -------------- Var-name, Function, k2index of (inode: 0 [ 1,...n_node ] n_node+1) eta_move deta_move 1 [ 3 ... 7 ] 9 eta_speed deta_speed 2 [ 4 ... 8 ] 10 ---------------- Informing on Up Phi definition ------------- Var-name, Function-name, index in ff vector ff_dummy_1 f_dummy_1 ] 7 ff_dummy_2 f_dummy_2 ] 8 ff_move_sum f_move_sum ] 9 ff_speed_sum f_speed_sum ] 10 ---------------------------------------------------- -------------- Informing on Phi Nodes definition --------------- Var-name, Function, k2index of (inode: 0 [ 1,...m_node ] m_node+1) ff_spring f_spring -1 [ 1 ... 5 ] 7 ff_dump f_dump 0 [ 2 ... 6 ] 8 ---------------------------------------------------- @end example All variable names and functions are free but has to be different. Any particular node-attached variable @math{k} is referred to as: @samp{(inode:k)}, where @math{k} has to be a Fortran expression allowed in arguments. The symbol @samp{inode} is reserved. As usual other Fortran instructions can be written within the Mortran block @samp{< >} of each @code{set_} block. @node Double precision @section Double precision The default for real variables is the @code{real} Fortran type. It is possible to use double precision instead. In that case all the occurences of @samp{real@ } in mortran code is substituted with @samp{double precision@ } at precompilation stage, and the Lapack subroutine names are replaced by the double precision names. Eventual users'declaration of @code{complex@ } Fortran variables is also changed to @code{double complex@ }. This feature is turned on by @code{sel double} in @file{selseq.kumac} with cmz and @code{double = 1} in the @file{Makefile} with make. In order for the model to run as well in double as in simple precision, some care should be taken to use the generic intrinsic functions, like @code{sin} and not @code{dsin}. No numerical constant should be passed directly to subroutines or functions, but instead a variable with the right type should be used to hold the constant value, taking advantage of the implicit casts to the variable type. @node Partial Derivatives @section Partial Derivatives The partial derivative rules are included in a @code{Mortran} macro series in @file{Derive_mac} of Miniker files. When using an anusual function, one should verify that the corersponding rules are in that file. It is easy to understand and add new rules in analogy with the already existing ones. For instance, suppose one wants to use the intrinsic Fortran function @code{ abs()}. Its derivatives uses the other function @code{sign()} this way: @example &'(ABS(#))(/#)' = '((#1)(/#2)*SIGN(1.,#1))' @end example In such cases when one is adding a new rule, it is important to use the generic function names only (i.e. @code{sin} not @code{dsin}), because when compilating Miniker in the double precision version, or complex version, the generic names will correctly handle the different variable types - which is not the case when coding with specific function names. @menu * Derivating a power function:: @end menu @node Derivating a power function @subsection Derivating a power function Partial derivative of a function in exponent is not secure in its Fortran form @code{g(x,y)**(f(y))}. It should be replaced by @code{power(g,f)} of the Miniker @file{mathlib}, or by the explicit form @code{exp(f(y)*log(g(x,y)))}. Its derivative will have the following form: and is in the macros list already defined in: @file{DERIVE_MAC}. @node Rule of programming non continuous models @section Rule of programming non continuous models Some models may originally be non continuous, as the ones using a Fortran instruction @code{IF}. Some may use implicitly a step function on a variable. In such cases, the model has to be set in a derivable form, and use a ``smooth step'' instead. One should be aware of that this apparently mathematical treatment currently indeed leads to a physical question about the macroscopic form of a physical law. At a macroscipic level, a step function is usually a nonsense. @cindex Heaviside function Taking the example of phase-change, a fluid volume does not change phase at once, and a ``smooth change of state'' is a correct macroscopic model. Miniker provides with the smooth step function @emph{Heavyside}@footnote{This naming is a joke for ``Inert'' Heaviside function.} in the Miniker @file{mathlib}: @example Delta = -1."K"; A_Ice = heavyside("in:" (T_K-Tf), Delta, "out:" dAIce_dT); @end example in this example, @code{Tf} is the ice fusion-temperature, @code{A_ice} gives the ice-fraction of the mesh-volume of water at temperature @code{T_k}. The smooth-step function is a quasi hyperbolic tangent function of @math{x/\Delta}, normalised from 0 to 1, with a maximum slope of 2.5, see figure @ref{heavy}. @float Figure, heavy @image{heavyside} @caption{Heaviside function and derivative} @end float For @code{Mortran} to be able to symbolicaly compute the partial derivarives, the rule is in the table of macros as: @example &'(HEAVYSIDE(#,#,#))(/#)' = '((#1)(/#4)*HEAVYDELTA(#1,#2,#3))' @end example which uses the Foratn entry point @code{HeavyDelta} in the Fortrsan function @code{heavyside}. Another type of problem arises when coding a @code{var=min(f(x),g(x))} Fortran instruction. In such a case one does not want a derivative and one will code: @example var = HeavySide(f(x)-g(x),Delta,dum)*g(x) + (1.-HeavySide(f(x)-g(x),Delta,dum)*f(x); @end example or equivalently: @example var = HeavySide(f(x)-g(x),Delta,dum)*g(x) + HeavySide(g(x)-f(x),-Delta,dum)*f(x); @end example @strong{Warning}: the value of the argument @var{Delta} is important because it will fix the maximum slope of the function that will appear as a coefficient in the Jacbian matrices. @node Parameters @section Parameters It is possible to specify some Fortran variables as specific model parameters. Model parameters may be used in sensitivity studies (@pxref{Sensitivity to a parameter}) and in the adjoint model (@pxref{Sensitivity of cost function to parameters}). Nothing special is done with parameters with Kalman filtering. @findex Free_parameter The parameters are fortran variables that should be initialized somewhere in @file{zinit}. For a variable to be considered as a parameter, it should be passed as an argument to the @code{Free_parameters} macro. For example if @code{apar} and @code{cpar} (from the predator example) are to be considered as parameters, @code{Free_parameters} should be called with: @example Free_parameter: apar, cpar; @end example @c Forward sensitivities are explained later (@pxref{Sensitivity to a parameter}), @c the syntax only is described here. When used with grid1d models (@pxref{1D gridded model,, Describing 1D gridded model}) the @code{inode} number may appear in parenthesis: @example Free_parameter: rd(1), rk(2); @end example @node Observations and data @section Observations and data Some support for observations and interactions with data is available. The observations are functions of the model variables. They don't have any action on the model result, but they may (in theory) be observed and measured. The natural use of these observations is to be compared with data that correspond with the values from real measurements. They are used in the Kalman filter (@pxref{Kalman filter}). The (model) observation vector is noted @math{\omega} @c FIXME is seems untrue? @c in this section ($\mu$ elsewhere, and the observation function is noted @math{h}: @noindent @math{omega(t) = h(eta(t), phi(t))} @menu * Observations:: * Data:: @end menu @node Observations @subsection Observations @vindex mobs The observation functions are set in a @code{set_probe} block in the @file{zinit} sequence. @cindex observation function @c FIXME doesn't exist anymore @c @defmac eqn: Obs_tef(@var{i}) = f(eta(.),ff(.)) @c This macro defines the observation equation as usual in a @code{set_block<}. @c @code{f} is a fortran @c expression which may be function of cell state variables, @c @samp{eta(1)}@dots{}@samp{eta(np)} and transfers @c @samp{ff(1)}@dots{}@samp{ff(mp)}, or of course their symbolic names. @c @end defmac For example suppose that, in the predator-prey model, we only have access to the total population of preys and predators, we would have: @example set_probe < eqn: pop = eta_pred + eta_pray; >; @end example @c it is always turned on, now @c The corresponding code is used with @code{sel obs} in @file{selseq.kumac} @c with cmz and @code{obs = 1} in @file{Makefile} with make. And the feature @c is turned on and off at run time with the logical flag @code{zobs} corresponding @c to an available data from measurement @c @vindex etaobs(.) @cindex @file{obs.data} The number of observations is put in the integer variable @code{mobs}. The observation vector corresponds with the part of the @code{ff(.)} array situated past the regular transferts, @code{ff(mp+.)}, and is output in the file @file{obs.data}. @c @vindex obetad(.,.) @c @vindex obephid(.,.) @c @vindex obspha(.,.) @node Data @subsection Data @vindex zgetobs @vindex vobs(.) @cindex @file{data.data} Currently this code is only used if the Kalman code is activated. This may be changed in the future. The convention for data is that whenever some data are available, the logical variable @code{zgetobs} should be set to @samp{.true.}. And the @code{vobs(.)} vector should be filled with the data values. This vector has the same dimension than the observation vector and each coordinate is meant to correspond with one coordinate of the observation vector. This feature is turned on by setting the logical variable @code{zdata} to @samp{.true.}, and the @code{zgetobs} flag is typically set in the @file{zsteer} sequence (@pxref{End of time step,,Executing code at the end of each time step}). Every instant data are available (@code{zgetobs} is true) the observations are written to the file @file{data.data}. With the Kalman filter more informations are output to the @file{data.data} file, see @ref{Kalman filter results}. @node Explicit model size @section Entering model size explicitely It is possible to enter the model dimensions explicitely, instead of generating them automatically, as it was done previously. This feature is turned on by @code{sel dimetaphi} in @file{selseq.kumac} with cmz and @code{dimetaphi} added to the @code{SEL} variable in the @file{Makefile} with make. @menu * Size sequence:: * Model with explicit size:: @end menu @node Size sequence @subsection The explicit size sequence @cindex dimetaphi @cindex model size @vindex np @vindex mp @vindex maxstep @cindex @file{dimetaphi} The dimension of the model is entered in the sequence @file{dimetaphi}, using the fortran @code{parameter np} for @code{eta(.)} and @code{mp} for @code{ff(.)}. For the Lotka-Volterra model, we have two cell components and only one transfer. @example parameter (np=2,mp=1); @end example You should not change the layout of the parameter statement as the mortran preprocessor matches the line. You also have to provide other parameters even if you don't have any use for them. If you don't it will trigger fortran errors. It includes the @code{maxstep} parameter that can have any value but 0, @code{lp} and @code{mobs} that should be 0 in the example, and @code{nxp}, @code{nyp} and @code{nzp} that should also be 0. The layout is the following: @example parameter (np=2,mp=1); parameter (mobs=0); parameter (nxp=0,nyp=0,nzp=0); parameter (lp=0); parameter (maxstep=1); @end example If there are observations, (@pxref{Observations}), the size of the observation vector is set in the @file{dimetaphi} sequence by the @code{mobs} parameter. For example if there is one observation: @example parameter (mobs=1); @end example To specify parameters (@pxref{Parameters}), the number of such parameters has to be declared in @file{dimetaphi} with the parameter @code{lp}. Then, if there are two parameters, they are first declared with @example parameter (lp=2); @end example @node Model with explicit size @subsection Entering the model equations, with explicit sizes @cindex model equations @findex Phi_tef(.) @findex deta_tef(.) @vindex eta(.), explicit sizes @vindex ff(.), explicit sizes When sizes are explicit, another possibility exists for entering the model equations. The use of symbolic names, as described in @ref{Model equations} is still possible, and it also becomes possible to set directly the equations associated with the @code{eta(.)} and @code{ff(.)} vectors. In case the symbolic names are not used, the model equations for cells and transfers are entered using a mortran macro, @code{f_set}@footnote{@code{fun_set}, or equivalently @code{f_set}, is a general mortran macro associating a symbol with a fortran expression. Here, it is the name of the symbol (@code{eta}) that has a particular meaning for the building of the model.}, setting the @code{eta(.)} evolution with @code{deta_tef(.)} and the transfer definitions @code{ff(.)} with @code{Phi_tef(.)}. @defmac f_set Phi_tef(@var{i}) = f(eta(.),ff(.)) This macro defines the transfer @var{i} static equation. @code{f} is a fortran expression which may be function of cell state variables, @samp{eta(1)}@dots{}@samp{eta(np)} and transfers @samp{ff(1)}@dots{}@samp{ff(mp)}. @end defmac In the case of the predator-prey model, the transfer definition for @math{\varphi_{meet}} is: @example f_set Phi_tef(1) = eta(1)*eta(2); @end example @defmac f_set deta_tef(@var{i}) = g(eta(@var{i}),ff(.)) This macro defines the cell state component @var{i} time evolution model. @code{g} is a expression which may be function of cell state variables, @samp{eta(1)}@dots{}@samp{eta(np)} and transfers @samp{ff(1)}@dots{}@samp{ff(mp)}. @end defmac The two cell equations of the predator-prey model are, with index 1 for the prey (@math{\eta_{prey}}) and index 2 for the predator (@math{\eta_{pred}}): @example f_set deta_tef(1) = apar*eta(1)-apar*ff(1); f_set deta_tef(2) = - cpar*eta(2) + cpar*ff(1); @end example The whole model is: @example !%%%%%%%%%%%%%%%%%%%%%% ! Transfer definition !%%%%%%%%%%%%%%%%%%%%%% ! rencontres (meeting) f_set Phi_tef(1) = eta(1)*eta(2); !%%%%%%%%%%%%%%%%%%%%%% ! Cell definition !%%%%%%%%%%%%%%%%%%%%%% ! eta(1) : prey ! eta(2) : predator f_set deta_tef(1) = apar*eta(1)-apar*ff(1); f_set deta_tef(2) = - cpar*eta(2) + cpar*ff(1); @end example The starting points for cells are entered like: @example ! initial state ! ------------- eta(1) = 1.; eta(2) = 1.; @end example If there are observations, they are entered as special transferts with index above @code{mp}, for example: @example f_set Phi_tef(mp+1) = ff(1) ; @end example @node Programming with cmz directives @section Programming with cmz directives @menu * Cmz directives used with Miniker:: * Using cmz directives in Miniker:: @end menu @node Cmz directives used with Miniker @subsection Cmz directives used with Miniker The main feature of cmz directive is to use code conditionnaly for a given select flag. For example when the double precision is selected (@pxref{Double precision}) the use of the conditionnal @code{double} flag may be required in case there is a different subroutine name for different types. If, for example, the user use the subroutine @code{smysub} for simple precision and @code{dmysub} for double precision the following code is an example of what could appear in the user code: @verbatim +IF,double call dmysub(eta); +ELSE call smysub(eta); +ENDIF @end verbatim For a complete reference on cmz directives see the appendix @ref{Cmz directives reference}. @node Using cmz directives in Miniker @subsection Using cmz directives in Miniker In cmz the KEEP and DECK have their cmz directives preprocessed as part of the source files extraction. And the +KEEP and +DECK directives are automatically set when creating the KEEP or DECK. With make, files with these directives has to be created within the files that are to be preprocessed by the cmz directives preprocessor. To be processed by make, a file that contains cmz directives should have a file suffix corresponding with the language of the resulting file and with the normal file suffix of that language. More precisely @samp{cm} should be added before the normal file suffix and after the @samp{.}. Therefore if the resulting file language is associated with a suffix @samp{.@var{suf}}, the file with cmz directives should have a @samp{.cm@var{suf}} suffix. The tradition is to have a different suffix for main files and include files. To add directories searched for @dfn{cmfiles} (files with cmz directives) they should be added to the @code{CMFDIRS} makefile variable, separated by @samp{:}. Rules for preprocessing of the files are defined in the file @file{Makefile.miniker} for the file types described in @ref{tab:cmfile_suffix}: @float table, tab:cmfile_suffix @multitable {fortran preprocessed} {include/keep} {cmfile suffix} {suffix} {language} @headitem language @tab file type @tab cmfile suffix @tab suffix @tab language @item fortran @tab main/deck @tab .cmf @tab .f @tab ftn @item fortran preprocessed @tab main/deck @tab .cmF @tab .F @tab f77 @item fortran preprocessed @tab include/keep @tab .cminc @tab .inc @tab f77 @item mortran @tab main/deck @tab .cmmtn @tab .mtn @tab mtn @item mortran @tab include/keep @tab .cmmti @tab .mti @tab mtn @end multitable @caption{Association between file language, file type, file suffixes and language identifier in cmz directives. A main file is called a @dfn{deck} in cmz and an include file is called a @dfn{keep}.} @end float @node Dynamic system analysis @chapter Dynamic analysis of systems in Miniker @menu * Sensitivities:: * Adjoint model and optimisation:: * Kalman filter:: * Feedback gain:: * Stability of fastest modes:: * Generalized TLS:: @end menu @node Sensitivities @section Automatic sensitivity computation @cindex sensitivities An obvious advantage of having acces to the Jacobian matrices along the system trajectory concerns automatic sensitivity analyses, as either: @itemize @bullet @item the sensitivity of all variables to perturbation in the initial condition of one state variable; @item the same sensitivities to an initial pulse (or step) on a transfer; @item the same sensitivities to a series of pulses (or steps) on a transfer; @item the same for a change in a parameter, eventually during the run; @item the sensitivity of the matrix of advance in state space to a change in a parameter. @end itemize This is declared in Zinit as: @example ! ------------- ! Sensitivities ! ------------- Sensy_to_var < var: eta_pray, pert: INIT; var: eta_pred, pert: INIT; >; @end example Each variable at origin of a perturbation is declared as @code{var:}, and the type of perturbation in @code{pert:}. Here, INIT conditions are only allowed because the two variables are states variables. For transfers, @code{pert: pulse} corresponds to an initial pulse, @code{pert: step_resp} and @code{pert: step_eff} to initial steps, the difference between @code{_resp} (response form) and @code{_eff} (effect form) concerns the diagonal only of the sensitivity matrix (see Feedback gains in non-linear models). Non initial perturbation can also be asked for: @example Sensy_to_var < !* var: eta_courant_L, pert: init at 100; !* var: ff_T_czcx, pert: pulse at 100 every 20; !* var: ff_Psi_Tczcx, pert: step_eff; !* var: ff_Psi_Tczcx, pert: step_Resp at 10 every 100; ! *** premiers tests identiques a lorhcl.ref var: ff_courant_L , pert: step_eff; var: ff_T_czcx , pert: step_eff; var: ff_Psi_Tczcx , pert: step_eff; var: ff_Psi_Tsz , pert: pulse at 100 every 50; >; @end example In this example taken from @file{lorhcl}, a sensitivity can increase so as to trespass the Fortran capacity, so that each sensitivity vector (matrix column) can be reset at some time-increment @code{at III every JJJ;} It is noteworthy that these sensitivity analyses are not based on difference between two runs with different initial states or parameter values, but on the formal derivatives of the model. This method is not only numerically robust, but is also rigorously funded as based on the TLS of the model@footnote{For a short introduction to automatic sensitivity analysis, see the document:@* @url{http://lmd.jussieu.fr/zoom/doc/sensibilite.ps}, in French, or ask for the more complete research document to a member of the TEF-ZOOM collaboration}. If the @code{dimetaphi} sequence is built by the users, he should declare the number of perturbing variables as @code{nxp=}: @example parameter (nxp=np,nyp=0,nzp=0); @end example here, all state variables are considered as perturbing variables. @cindex sensitivity, output @cindex output, sensitivity @cindex @file{sens.data} @cindex @file{sigma.data} The sensitivity vectors are output in the result files @file{sens.data} for cells and @file{sigma.data} for transfers. In those files the first column corresponds again with time, and the other columns are relative sensitivities of the cell states (in @file{sens.data}) and transfers (in @file{sigma.data}) with respect to the initial value of the perturbed state. In our predator-prey example, the second column of @file{sens.data} will contain the derivative of @math{\eta_1(t)} with respect to @math{\eta_1(t=0)}. Drawing the second column of @file{sens.data} against the first one gives the time evolution of the sensitivity of @code{eta-pred} to a change in the initial value of @code{eta-pray}. One can check in that it is set to 1 at @math{t=0}: @example # Sensy_to: eta_pray 3 eta_pred 5 # time \\ of: eta_pray eta_pred eta_pray eta_pred 0.00000E+00 1.00000E+00 0.00000E+00 0.00000E+00 1.00000E+00 1.00000E-02 9.90868E-01 1.11905E-02 -1.26414E-02 9.98859E-01 @end example The two last columns are the state sensitivity to a change in initial conditions of the number of predators. In the same way, the @var{j+1}th column of @file{sigma.data} will be the derivative of @math{\phi_{j}(t)} with respect to @math{\eta_i(t=0)}. Here: @example # Sensy_to: eta_pray eta_pred # time \\ of: ff_interact ff_interact 0.00000E+00 1.60683E+00 8.47076E-01 1.00000E-02 1.59980E+00 8.18164E-01 @end example the unique transfer variable gives rise to two sensitivity columns. Sensitivity studies are usefull to assess the predictability properties of the corresponding system. @menu @c * Initial state sensitivity:: @c * Sensitivity to a pulse or a step on transfer:: @c * Extended Sensitivity studies:: * Sensitivity to a parameter:: * Advance matrix sensitivity:: @end menu @node Sensitivity to a parameter @subsection Sensitivity to a parameter A forward sensitivity to a parameter will be computed when specified as described in @ref{Parameters}. For example, suppose that the sensitivity to an initial change in the @code{apar} parameter of the predator model is of interest. @c In that case the number of @c parameters should be set to 1 in @file{dimetaphi}: @c @c @example @c parameter (lp=2); @c @end example The sensitivity calculs is turned on as a forward parameter specified on the @code{Free_parameter} list: @example Free_parameter: [fwd: apar, cpar]; @end example The result are in @file{sensp.data} for cells and @file{sigmap.data} for transfers. @example # Sensy_to: pi_prandtl 3 4 pi_rayleigh_ 6 # time \\ of: eta_courant_ eta_T_czcx eta_T_sz eta_courant_ eta_T 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.000 2.00000E-03 -4.77172E-03 -3.99170E-05 3.55971E-05 -9.94770E-05 -1.004 @end example In the above example from @file{lorhcl} sensitivity of the three states with respect to an initial change in two parameters are independantly given (first line also numbers the column to easy gnuplot using). @node Advance matrix sensitivity @subsection Advance matrix sensitivity It is possible to look at the sensitivity of the matrix of advance in states space (the matrix @code{aspha}) with regard to a parameter. The parameter must be accounted for in the parameter number and be in the parameter list, flagged as the matrix @code{mx} parameter, like in @example Free_parameter: [mx: apar], cpar; @end example @vindex d_pi_aspha(.,.) This feature is associated with a selecting flag, @samp{dPi_aspha}. One gets the result in the matrix @code{d_pi_aspha(.,.)} of dimension (@code{np},@code{np}). This matrix may be used to compute other quantities, for example it may be used to compute the sensitivity of the eigenvalues of the state-advance matrix with regard to the @code{[fwd]} parameter. These additional computations have to be programmed by the user in @file{zsteer} with matrices declared and initialized in @file{zinit}. An example is given in the example @file{lorhcl} provided with the Miniker installation files, following a method proposed by Stephane Blanco. @node Adjoint model and optimisation @section Adjoint model and optimisation with Miniker In the following a possible use of Miniker for optimisation is discussed. More precisely the use of adjoint and control laws in Miniker are presented. Optimisation isn't the only application of these tools, but it is the most common one. In that case the adjoint may be used to determine the gradient of a functional to perturbations in the control laws, and an optimisation process can use this information to search for the optimum. Another application of the adjoint is to compute the sensitivity of a cost function to parameters (the ones declared in the @code{free_parameters:}' list. Note that the cost function can be sensitive to probe's variables, even if these are uncoupled with standard variables in the forward calculations; this is the case when minimizing a quadratic distance function between probes (from the model) and the corresponding measurements. The code is close transcription of the mathematical calculus described in@* @url{http://www.lmd.jussieu.fr/ZOOM/doc/Adjoint.pdf} . It essentialy reverse time and transpose the four Jacobian matrices: states and transfers are saved in array dimensionned with @code{maxstep} Fortran parameter. @menu * Overview of optimisation with Miniker:: * Control laws:: * Cost function coding and adjoint modeling:: * Sensitivity of cost function to parameters:: @end menu @node Overview of optimisation with Miniker @subsection Overview of optimisation with Miniker @cindex adjoint @cindex optimisation In the proposed method, Miniker is run twice, one time forward and then backward to determine the trajectory and the adjoint model. After that the control laws are modified by a program external to Miniker. The same steps are repeated until convergence. More pecisely, @table @strong @item forward The command law @math{h(t)} is given (by an explicit law or taken from a file). The trajectory is computed in a classical way, with the additionnal computation of the functional to be optimised, @math{J}, prescribed with specific @code{f_set} macros. The states, transfers and control laws are stored. @item backward The adjoint variable is computed from the last time @math{T} backward. The time increment is re-read as it could have changed during the forward simulation. The system is solved by using the same technics as in the forward simulation, but with a negative time step. @item external phase Now the command should be corrected. This step isn't covered here, but, for example, minuit the optimisation tool from the CERN could be used. In order to ease such a use of Miniker, the principal program has to be compiled as a subroutine to be driven by an external program (@pxref{Calling the model code}). @end table The functionnal @math{J} to be optimised is defined as @noindent @math{J = psi(eta(T),phi(T),h(T)) + int_0^T l(eta(tau),phi(tau),h(tau)) d tau} @cindex final cost @cindex integrand cost Where @math{\psi} is the final cost function, @math{l} is the integrand cost function and @math{h} represents the control laws variations. The general use of the adjoint model of a system is the determination of the gradient of this @math{J} functional to be optimised, with respect to perturbations of the original conditions of the reference trajectory, that is, along its GTLS@footnote{General Tangent Linear System, i.e. the TLS circulating along a trajectory. See the explanation in the document @url{http://www.lmd.jussieu.fr/Zoom/doc/Adjoint.pdf} (in French).}. @node Control laws @subsection Control laws @vindex zcommand @cindex command law Each control law is associated with one cell or transfer equation, meaning that a command associated with an equation does not appear in any other equation. It is still possible to add commands acting anywhere by defining a transfer equal to that command. The control laws associated with states are in the @code{ux_com(.)} array, control laws associated with transfers are in the @code{uy_com(.)} array. The control laws may be prescribed even when there is no adjoint computed, nor any optimisation, and they are used during simulation, in which case they will act as external sources. To enable the use of commands, the logical flag @code{Zcommand} should be @code{.true.}. @cindex @file{uxcom.data} @cindex @file{uycom.data} The command can be given either as: @enumerate @item a table of numerical values in the files @file{uxcom.data} and @file{uycom.data}. @item a function @vindex zlaw @cindex @file{zcmd_law} @cindex @file{zcmd_law.inc} of the problem variables. To turn that feature on the logical flag @code{Zlaw} should be set to @code{.true.} in @file{zinit}. The sequence @file{zcmd_law} should hold the code filling the @code{ux_com(.)} and @code{uy_com(.)} arrays, as the code from that sequence is used whenever the control laws are needed. In that case the files @file{uxcom.data} and @file{uycom.data} will be filled by the command values generated by the function along the trajectory. @end enumerate For example in the Lotka-Volterra model, the parameter @code{apar} could be a control variable. In that case, @code{apar} would be defined as the variable @code{ux_com(1)}, and either entered as a law in the sequence @file{zcmd_law} , either written in the file @file{uxcom.data} step by step. In that case, there must be a perfect corresponodence between time of the commands and time of the run. @node Cost function coding and adjoint modeling @subsection Cost function coding and adjoint modeling @vindex zback @findex cout_Psi @findex cout_l First of all the flag @code{zback} should be set to @code{.true.} in order to allow adjoint model computation: @example Zback=.true.; @end example The two functions @code{cout_Psi} corresponding with the final cost and @code{cout_l} corresponding with the integrand cost are set up with the @code{f_set} macros. @defmac f_set cout_Psi = f(eta(.),ff(.),ux_com(.),uy_com(.)) This macro defines the final cost function. @code{f} is a fortran expression which may be function of cell state variables, @samp{eta(1)}@dots{}@samp{eta(np)}, transfers @samp{ff(1)}@dots{}@samp{ff(mp)}, state control laws @samp{ux_com(1)}@dots{}@samp{ux_com(np)}, and transfer control laws @samp{uy_com(1)}@dots{}@samp{uy_com(mp)}. @end defmac @defmac f_set cout_l = f(eta(.),ff(.),ux_com(.),uy_com(.)) This macro defines the integrand cost function. @code{f} is a fortran expression which may be function of cell state variables, @samp{eta(1)}@dots{}@samp{eta(np)}, transfers @samp{ff(1)}@dots{}@samp{ff(mp)}, state control laws @samp{ux_com(1)}@dots{}@samp{ux_com(np)}, and transfer control laws @samp{uy_com(1)}@dots{}@samp{uy_com(mp)}. @end defmac For example, the following code sets a cost function for the masselottes model: @example ! Initialisation F_set cout_Psi = eta_move(inode:1); !and f_set cout_l integrand in the functionnal F_set cout_l = 0.; @end example In that example the functional is reduced to the final value of the first state component. Here, the adjoint vector will correspond to the final sensitivity (at @math{t=0}) of that component (here the first masselotte position) to a perturbation in all initial conditions@footnote{For detailed explanation of the adjoint model, see the document in @uref{http://www.lmd.jussieu.fr/@/ZOOM/doc/Adjoint.pdf,pdf} or @uref{http://www.lmd.jussieu.fr/@/ZOOM/doc/Adjoint.pdf,.ps.gz}}. @c In the code, the variables @code{v_adj(.)} and @code{w_adj(.)} @c are respectively adjoint to @code{eta(.)} and @code{ff(.)}. They are written in the @c two files: @file{vadj.data} and @file{wadj.data}. The following variables are set during the backward phase, and output in the associated files: @multitable {@code{gradufj(.)}} {@file{hamilton.data}} {time increment, hamiltonian, cost function increment} @headitem var @tab file @tab explanation @c @item @code{} @tab @file{.data} @tab @tab @item @code{v_adj(.)} @tab @file{vadj.data} @tab adjoint to @code{eta(.)} @item @code{w_adj(.)} @tab @file{wadj.data} @tab adjoint to @code{ff(.)} @item @code{wadj(mp+.)} @tab @file{gradmuj.data} @tab adjoint to @code{ff(mp+.)} @item @code{graduej(.)} @tab @file{gradxj.data} @tab adjoint to @code{ux_com(.)} @item @code{gradufj(.)} @tab @file{gradyj.data} @tab adjoint to @code{uy_com(.)} @item @code{hamilton} @tab @file{hamilton.data} @tab time increment, hamiltonian, cost function increment @end multitable @node Sensitivity of cost function to parameters @subsection Sensitivity of cost function to parameters @cindex @file{gradpj.data} The sensitivity of the cost function to all the parameters given as arguments of @code{Free_parameters} is computed. For the predator model the sensitivity of a cost function consisting in the integral of the predator population with respect with @code{apar} an @code{cpar} is obtained with a number of parameters set to 2 in @file{dimetaphi}: @example parameter (lp=2); @end example And the cost function and @code{Free_parameters} list in @file{zinit}: @example f_set cout_Psi = eta(2); f_set cout_l = eta(2); Free_parameters: apar,cpar; @end example @code{apar} and @code{cpar} also have to be given a value. The result is output in @file{gradpj.data}. @node Kalman filter @section Kalman filter @cindex Kalman filter @cindex variance-covariance matrices, general @cindex observations, general The Kalman filter allows for data assimilation along the model run. In that case it is assumed that there is a real-world model with stochastic perturbations on the states, and that noisy observations are available. The situation implemented in Miniker corresponds to a continuous stochastic perturbation on the state, and discrete noisy observations. In the @acronym{TEF} this leads to: @noindent @math{d eta(t)/d t = g(eta(t),phi(t)) + W(t) mu@* phi(i) = f(eta(t),phi(t))@* omega(t) = h(eta(t), phi(t)) + nu } @c FIXME partout omega @c (notice that in this paragraph, $\omega$ stands for the probe vector $\mu$ elsewhere, @c and $\mu$ is here a noise source. The observations @math{\omega} are available at discrete time steps @math{t=s_i}. The stochastic perturbation on state, @math{\mu} is characterized by a variance-covariance matrix @math{Q} and the noise on the observation, @math{\nu} has a variance-covariance matrix @math{R}. @math{W} relates states with stochastic perturbations. At each time step the Kalman filter recomputes an estimation of the state and the variance-covariance matrix of the state. In the following we use the example of a linear model with perturbation on state and observation of state. The model has 3 states and 3 corresponding transfers (equal to the states), but the error on the state is of dimension 2. The 3 states are observed. The corresponding equations read: Cells:@* @noindent @math{d eta_1/dt = a_11 eta_1 + a_12 phi_2 + a_13 phi_3 + W_11 mu_1 + W_12 mu_2@* d eta_2/dt = a_21 phi_1 + a_22 eta_2 + a_23 phi_3 + W_21 mu_1 + W_22 mu_2@* d eta_3/dt = a_31 phi_1 + a_32 phi_2 + a_33 eta_3 + W_31 mu_1 + W_32 mu_2} Transfers:@* @noindent @math{phi_1 = eta_1@* phi_2 = eta_2@* phi_3 = eta_3} Observations:@* @noindent @math{omega_1 = phi_1 + nu_1@* omega_2 = eta_2 + nu_2@* omega_3 = eta_3 + nu_3} @menu * Coding the Kalman filter:: * Kalman filter run and output:: * Executing code after the analysis:: @end menu @node Coding the Kalman filter @subsection Coding the Kalman filter @vindex zkalman First of all the Kalman filter code should be activated. The observations code is also required (@pxref{Observations}). If cmz is used the code should be selected with the select flag kalman in the @file{selseq.kumac}: @example sel kalman @end example With make the @code{kalman} variable should be set to 1: @example kalman = 1 @end example The kalman code is actually used by setting the flag @code{zkalman} to @code{.true.}, for example in the @file{zinit}: @example zkalman = .True.; @end example @c This will set the @code{zobs} and @code{zdata} flags to @code{.true.} @c (@pxref{Observations and data}). With the Kalman filter the dimension of estimated states, of the error on the state and of the observation, the @math{W} matrix, the observation function, the initial variance-covariance matrices on the state and the variance-covariance matrices of errors have to be given. @menu * Kalman filter vectors dimensions:: * Error and observation matrices:: @end menu @node Kalman filter vectors dimensions @subsubsection Kalman filter vectors dimensions @cindex error vector dimension @cindex @file{dimetaphi}, Kalman filter These dimensions should be set in the @file{zinit} sequence. The size of the estimated states is given by the parameter @code{nkp}. You can set this to @code{np} if all the states are estimated, but in case there are some deterministic state variables, @code{nkp} may be less than @code{np}. In that case the first @code{nkp} elements of @code{eta(.)} will be estimated using the Kalman filter. The error on state dimension is associated with the parameter @code{nerrp} and the size of the observations vector is @code{mobs} (@pxref{Observations}). In our example the dimensions are set with: @example parameter (nkp=np); parameter (mobs=3); parameter (nerrp=2); @end example All the states are estimated, there are 3 observation functions and the error on the state vector is of dimension 2. If the sizes are set explicitely, the parameters should be set in @file{dimetaphi}. @node Error and observation matrices @subsubsection Error and observation matrices @cindex variance-covariance matrices @cindex observations @cindex @file{zinit}, Kalman filter @subsubheading Initial variance-covariance matrix on the state @cindex initial variance-covariance on states @vindex covfor(.,.) The variance-covariance on the state matrix is @code{covfor(.,.)}. The initial values have to be given for this matrix, as in our example: @example covfor(1,1) = 1000.; covfor(1,2) = 10.; covfor(1,3) = 10.; covfor(2,1) = 10.; covfor(2,2) = 5000.; covfor(2,3) = 5.; covfor(3,1) = 10.; covfor(3,2) = 5.; covfor(3,3) = 2000.; @end example This matrix is updated by the filter at each time step because the states are pertubated by some noise, and when assimilation takes place as new information reduce the error. @subsubheading Observations and error on state matrix @cindex variance-covariance matrix on state @vindex mereta(.,.) The matrix that relates errors on states vector components to states, corresponding with @math{W} is @code{mereta(.,.)}. In our example it is set by: @example mereta(1,1) = 1.; mereta(1,2) = 0.; mereta(2,1) = 0.; mereta(2,2) = 1.; mereta(3,1) = 0.5; mereta(3,2) = 0.5; @end example The observation functions are set by a @code{f_set} macro with @code{Obs_tef(.)} as described in @ref{Observations}. In our example the observation functions are set by: @example f_set Obs_tef(1) = ff(1) ; f_set Obs_tef(2) = eta(2); f_set Obs_tef(3) = eta(3); @end example @subsubheading Error variance-covariance matrices @cindex variance-covariance error @vindex covobs(.,.) The variance-covariance matrix on observation noise is @code{covobs(.,.)} set, in our example, by: @example covobs(1,1) = 0.3; covobs(1,2) = 0.; covobs(1,3) = 0.; covobs(2,1) = 0.; covobs(2,2) = 0.1; covobs(2,3) = 0.; covobs(3,1) = 0.; covobs(3,2) = 0.; covobs(3,3) = 0.2; @end example @vindex coveta(.,.) The variance-covariance matrix on state noise is @code{coveta(.,.)} set, in our example, by: @example coveta(1,1) = 0.2; coveta(1,2) = 0.001; coveta(2,1) = 0.001; coveta(2,2) = 0.1; @end example These matrices are not changed during the run of the model as part of the filtering process. They may be changed by the user in @file{zsteer}. @node Kalman filter run and output @subsection Kalman filter run and output @menu * Feeding the observations:: * Kalman filter results:: @end menu @node Feeding the observations @subsubsection Feeding the observations to the model @vindex vobs(.) @vindex zgetobs @cindex @file{zsteer}, Kalman filter The observations must be made available to the model during the run. These observations are set in the @code{vobs(.)} array, and the assimilation (also called the analysis step of the filter) takes place if the logical variable @code{zgetobs} is @code{.true.} (@pxref{Data}). These steps are typically performed in the @file{zsteer} sequence. In this sequence there should be some code such that when there are data ready to be assimilated, @code{zgetobs} is set to @code{.true.} and the data is stored in @code{vobs(.)}, ready for the next step processing. @node Kalman filter results @subsubsection Kalman filter results @cindex results, Kalman filter @cindex Kalman filter results @cindex output, Kalman filter @cindex Kalman filter output @cindex @file{data.data} The estimated states and transfers are still in the same @samp{.data} files, @file{res.data} and @file{tr.data} and there is the additional file with observations, called @file{obs.data} (@pxref{Observations}). Each time @code{zgetobs} is @code{.true.} the data, and the optimally weighted innovations are output in the file associated with data, @file{data.data} (@pxref{Data}). @node Executing code after the analysis @subsection Executing code after the analysis The analysis takes place before the time step advance when @code{zgetobs} is @code{.true.}. It may be usefull to add some code after the analysis and before the time step advance. For example the analysis may lead to absurd values for some states or parameters, it could be usefull to correct them in that case. The sequence included after the analysis is called @file{kalsteer}. At this point, in addition to the usual variables the following variables could be usefull: @vtable @code @item etafor(.) The state before the analysis. @item kgain(.) The Kalman gain. @item innobs(.) The innovation vector (observations coherent with the states minus data values). @item covana(.,.) The variance-covariance error matrix after the analysis. @end vtable At each time step the derivative of the observation function with respect to transfer and cells variables are recomputed. The elimination of transfers is also performed to get the partial derivative of the observation function of the equivalent model, with states only, with respect to the states. In other words, the Kalman filter does not follow the TEF formalism, because the advance of the var-covar matrix could not yet be set in the TEF form. @c There is a corresponding additional matrix: @vtable @code @c @item obetad(.,.) @c derivative of observation function with respect to transfers. @c @item obphid(.,.) @c derivative of observation function with respect to cell variables. @item obspha(.,.) derivative of observation function in state space with respect to cell variables. @end vtable @node Feedback gain @section Feedback gain @cindex Borel sweep @cindex Feedback gain The feedback dynamic gain associated with a feedback loop can be expressed as the inverse Borel transform of the coefficient of the reduced scalar coupling matrix, @math{g(\tau)}, associated with a transfer. A Borel sweep provides this @math{g(\tau)}. Therefore it is an interesting tool for the characterization of the feedback loop@footnote{ More generally, the Borel sweep allows the numerical study of the dependency in @math{\tau} of the Borel transform of various coefficients in the system coupling matrix.}. As explained in the ZOOM web page document @url{http://www.lmd.jussieu.fr/@/ZOOM/doc/@/Feedback_Gain.pdf}, this allows for the calculation of the dynamic gain and factor of any feedback that goes through a unique transfer variable. An example of the conclusions that can be drawn from such an analysis is provided in the same document. For linear systems -- whose GTLS are autonomous along the whole trajectory -- the @math{\tau} function of the feedback gain is independent of the position on the system trajectory. But in general it is dependant, and one can analyse the function @math{g(\tau;t)} defined on a segment @math{t} of the trajectory. The document introducing the TEF-ZOOM technique explains how a Crank-Nicolson scheme for the time discretisation symbolically gives the solution of the Borel transform of the system. One can identify the @code{dt} variable with the Borel @math{\tau} within a factor @math{2}. Hence, to numerically study the @math{\tau} dependency of the transform of various coefficients in the system coupling matrix at one point in time, one can calculate the Borel transform of the TLS solutions by making a time-step sweep. The function @math{g(\tau;t)} is simply output for the feedback gain attached to a unique @code{ff(k)} transfer variable. All the relevant informations should be entered in the @file{zinit} sequence. @menu * Specifying the Borel sweep:: * Borel sweep results:: @end menu @node Specifying the Borel sweep @subsection Specifying the Borel sweep @vindex ZBorel First of all the logical flag @code{ZBorel} should be raised: @example ZBorel=.true.; @end example @vindex index_ff_gain The index of the studied transfer is given in the @code{index_ff_gain} variable @example index_ff_gain=7; @end example At each time step a Borel sweep may be performed. The time steps of interest are specified with three variables, one for the first step, one for the last step and one for the number of steps between two Borel sweeps: @vtable @code @item istep_B_deb First time step for the Borel sweep. @item istep_B_fin Last time step for the Borel sweep. @item istep_B_inc Number of time steps between Borel sweeps. @end vtable In the following examples Borel sweeps are performed from the time step 1000 up to the time step 1200, with a sweep at each time step: @example istep_B_deb=1000; istep_B_fin=1200; istep_B_inc=1; @end example For each Borel sweep, the range of the @math{\tau} variable should be set. As this is a multiplicative variable the initial value, a multiplicative factor and the number of values are to be given. @vtable @code @item tau_B_ini Initial value for @math{\tau}. @item tau_B_mult Multiplicative factor for sweep in @math{tau}. @item itau_max Number of @math{\tau} values. @end vtable For example, in the following, at each time step, the Borel transform will be computed for @math{\tau} values starting at @math{0.2} and then multiplied a hundred times by @math{\sqrt{\sqrt{2}}} @example tau_B_ini=0.2; tau_B_mult=sqrt(sqrt(2.)); itau_max=100; @end example When the initial value of @math{\tau} is set to a negative value (@i{i.e.} @code{tau_B_ini=-0.2;}), the Borel sweep will first be applied with @code{itau_max} negative values for @code{-0.2}, @code{tau_B_mult*(-0.2)},..., then for the zero value, and finally for the symetric positive values, resulting in @code{2*itau_max+1} values for @math{\tau}. The whole example reads @example ! ------------------- ! Feedback gain ! Borel ! ------------------- ZBorel=.true.; if ZBorel < istep_B_deb=1000; istep_B_fin=1200; istep_B_inc=1; ; index_ff_gain=7; tau_B_ini=0.2; tau_B_mult=sqrt(sqrt(2.)); itau_max=100; z_pr/Borel/:tau_B_mult,tau_B_ini*(tau_B_mult)**itau_max; >; @end example @findex zborel for Instead of using the index of the transfer in @code{index_ff_gain} it is possible to specify the name of the transfer.@c , whenever @c the symbolic model description is used (@pxref{Symbolic model description}). In that case the transfer is specified by the @code{zborel for} macro. For example if the transfer selected for the feedback gain computation is @var{b_transfer}, it can be selected with: @example zborel for: @var{b_transfer}; @end example @node Borel sweep results @subsection Borel sweep results @cindex Borel sweep results @cindex results, Borel sweep @cindex Borel sweep graphics @cindex graphics, Borel sweep The file @file{tau_Borel.data} gives the @math{\tau} values of the @var{tau} sweep, and the file @file{gains.data} records the feedback gain function values of @math{g(\tau)}, with one line for each sweep along the trajectory. In the 1.01 version, a new feature is also provided giving the poles and residuals of the Borel transform in the file @file{vpgains.data}. Consult the subroutine @code{Boreleig} for (not definitive) output description. One can easily obtain the surface contours of @math{g(t,\tau)} using the Fortran program provided as @file{gains.f} and its compilation shell @file{gains.xqt}, that builds 2D histograms for PAW, in which one uses the @file{borels.kumac} provided kumac. @node Stability of fastest modes @section Stability analysis of fastest modes @cindex SVD @cindex Singular Value Decomposition @cindex state matrix @cindex @file{sltc.exe} The preceding analyses are done along with a simulation. One has also the possibility of using in a more classical fashion the state advance matrix @math{A_{st}}, after the end of the simulation. Code to perform the @acronym{SVD, Singular Value Decomposition} of the state matrix @math{A_{st}} and also of @math{A_{st} + A_{st}^\dagger} is provided with Miniker. The singular elements of these two matrices correspond to the most rapid modes of instability of the perturbed system. The Singular value decomposition of a matrix is noted @noindent @math{U w V^t} An executable file, @file{sltc.exe} is generated and running this file will produce the corresponding results. @menu * SVD with cmz:: * SVD with make:: * SVD run and output:: @end menu @node SVD with cmz @subsection Singular Value Decomposition with cmz @cindex @command{smod} The cmz macro @code{smod SLTC} prepares a main program (@file{circul} of +PATCH SLTC), provided as a base for user's own analysis, in the directory @file{sltc/}. @node SVD with make @subsection Singular Value Decomposition with make @cindex @file{Makefile.sltc} To compile the singular value decomposition executable with @command{make} you can do @example make sltc.exe @end example If you want to have a separate directory for the SVD, you should copy the sequence @file{dimetaphi.inc} (or make a link to that file) to the directory. You should also copy the file @file{Makefile.sltc} from the @file{template/} directory in this directory, rename it @file{Makefile} and set the Miniker directory path in the @code{miniker_dir} variable. For example, if the Miniker directory is in @file{/u/src/mini_ker}: @example miniker_dir = /u/src/mini_ker @end example @node SVD run and output @subsection Singular Value Decomposition run and output @cindex SVD run @cindex run, SVD @cindex SVD output @cindex output, SVD @cindex @file{sltc.exe} @cindex @file{title.tex}, SVD @cindex @file{aspha.data}, SVD As it is, the @file{sltc.exe} executable generated by the compilation determines the SVD. This program requires @file{title.tex} (@pxref{Title file}) to transmit a title for output and graphics, and @file{aspha.data} (@pxref{Simulation and output,,Running a simulation and using the output}) to access the state matrix. To get access to these files (in case they are not in the current directory) it is possible to make a link to the corresponding files in the model directory. Once it is done the program may be run: @example ./sltc.exe @end example The files @file{u.data}, @file{w.data}, and @file{v.data} holds the singular elements for @math{A_{st}} (@math{U}, @math{w} and @math{V}), and @file{us.data}, @file{ws.data}, and @file{vs.data} holds the singular elements of @math{A_{st} + A_{st}^\dagger}. The corresponding macros @samp{.kumac} for PAW@footnote{Explanation in the research paper about SLTC (Al1 2003) available on request.} are also generated. @node Generalized TLS @section Generalized linear tangent system analysis @cindex Generalized linear tangent system @cindex GTLS @cindex propagator @cindex Lyapunov exponents @cindex @file{sltcirc.exe} The state matrix @math{A_{st}} may also be used to compute the GTLS propagator (or state transition matrix applied to perturbation), after the simulation. The algorithm is a finite product of 5th order development of @math{\Phi(t+\delta t,t)=\exp{A_{st} \delta t}}. Numerous element of analysis are given, in particular the determination of the Lyapunov exponents of the system. An executable file, @file{sltcirc.exe} is generated and running this file will produce the corresponding results. @menu * GTLS with cmz:: * GTLS with make:: * GTLS run and output:: @end menu @node GTLS with cmz @subsection Generalized tangent linear system with cmz @cindex @command{smod} The cmz macro @code{smod SLTCIRC} prepares a main program (@file{circule} of +PATCH SLTCIRC), in the directory @file{sltcirc/}. @node GTLS with make @subsection Generalized tangent linear system with make @cindex @file{Makefile.sltcirc} To compile the GTLS analysis executable with @command{make} you can do @example make sltcirc.exe @end example If you want to have a separate directory for the GTLS analysis, you should copy the sequence @file{dimetaphi.inc} (or make a link to that file) to the directory. You should also copy the file @file{Makefile.sltcirc} from the @file{template/} directory in this directory and rename it @file{Makefile} and set the Miniker directory path in the @code{miniker_dir} variable. @node GTLS run and output @subsection Generalized tangent linear system analysis run and output @cindex GTLS run @cindex run, GTLS @cindex GTLS output @cindex output, GTLS @cindex @file{sltcirc.exe} @cindex @file{title.tex}, GTLS @cindex @file{dres.data}, GTLS @cindex @file{aspha.data}, GTLS The @file{sltcirc.exe} executable generated by the compilation computes the elements of analysis of the system. This program requires @file{title.tex} to transmit a title for output and graphics (@pxref{Title file}), @file{aspha.data} to access the state matrix and @file{dres.data}, because time-step can be changed along the simulation (@pxref{Simulation and output,,Running a simulation and using the output}) @footnote{cf our research texts about propagator analyses in SLTC, and ``les Gains sur champs (Al1 2003-2004)''}. To get access to these files (in case they are not in the current directory) it is possible to make a link to the corresponding files in the model directory. Once it is done the program may be run: @example ./sltcirc.exe @end example The following table gives the correspondence between variable name, result file and ntuple number, with a short explanation: @multitable {@code{lwr(.,.)}} {@file{wlphit.data}} {ntuple} {eigen factors of @math{w} in the SVD of @math{\Phi}} @headitem var @tab file @tab ntuple @tab explanation @item @code{p(.,.)} @tab @file{phit.data} @tab 55 @tab propagator from 0 to @math{t}, @math{\Phi(t,0)} @item @code{up(.,.)} @tab @file{uphit.data} @tab 50 @tab Left singular vectors @math{U} in the SVD of @math{\Phi} @item @code{wp(.)} @tab @file{wphit.data} @tab 51 @tab singulat values @math{w} in the SVD of @math{\Phi} @item @code{vp(.,.)} @tab @file{vphit.data} @tab 52 @tab Right Singular Vectors @math{V} in the SVD of @math{\Phi} @item @code{wr(.)} @tab @file{wr.data} @tab 53 @tab real part of eigen values of @math{\Phi(t,0)} @item @code{wi(.)} @tab @file{wi.data} @tab 54 @tab imaginary part of eigen values of @math{\Phi(t,0)} @item @code{lwp(.)} @tab @file{lwphit.data} @tab 67 @tab Lyapunov exponents @c @item @code{lwr(.,.)} @tab @file{lwr.data} @tab 68 @tab @c @item @code{lwi(.,.)} @tab @file{lwi.data} @tab 69 @tab @c @item @code{} @tab @file{.data} @tab @tab @end multitable @node Advanced use of Miniker with make @chapter Advanced use of Miniker with make @menu * Make variables:: * Rules:: * Linking rule:: @end menu @node Make variables @section Make variables @cindex @file{Makefile.miniker} The @file{Makefile.miniker} Makefile provided in the distribution should be included as it defines a lot of important variables and rules. The following make variables can be set by the user: @table @code @item miniker_dir that variable should hold the Miniker sources directory. If you installed Miniker that variable should be set to @file{$(includedir)/mini_ker}. If you use the sources right from the sources directory it should be set to the sources package directory. @item MTNDIRS This variable can hold a @samp{:} delimited list of directories that will be searched for mortran include files. @item CMFDIRS This variable can hold a @samp{:} delimited list of directories that will be searched for cmz directive include files. @item SEL This variable holds a @samp{,} delimited list of select flags, for example @code{monitor}, @code{grid1d}, @code{debug}. @item LDADD This variable can be used to add libraries flags and files. It is used in the default linking command/rule. @item miniker_user_objects This variable should hold a space separated list of additional object files to be linked with the model and helper object files. @item CAR2TXTFLAGS cmz directives preprocessor flag. @item kalman This variable should be set to 1 if you want to use the kalman filter (@pxref{Kalman filter}). @item double This variable should be set to 1 if you want to have a double precision code (@pxref{Double precision}). @end table The following variables are allready set and may be used (some are set by ./configure see @ref{Configuration}): @table @code @item miniker_principal_objects The list of object files needed for the model build, together with some helper object files often used but not strictly required for the linking. @item DEPDIR The name of a hidden directory containing the dependencies computed for the main mortran files. @itemx F77 @itemx FC @itemx FFLAGS @item LDFLAGS Compiler and linker related variables set by ./configure. @item LIBS This variable should hold the link flags and files required to build Miniker, set by ./configure. @item CAR2TXT @itemx MORTRAN @itemx MTNFLAGS @itemx MTNDEPEND Preprocessor and preprocessor flags, set by ./configure. @end table @node Rules @section Rules The following rules are defined in the @file{Makefile.miniker} file. @table @code @item miniker-clean remove the fortran files generated from the mortran files. Remove the object files. @item miniker-mtn-clean remove the mortran files generated from the files with cmz directives. @item Various rules to preprocess files with cmz directives and mortran files and to compile fortran files. @end table If the user needs a mortran main file, he may take advantage of the rule used to compute the dependencies of a mortran file. If the file is called, say, @file{mtnfile.mtn} leading to @file{mtnfile.f}, the following include should lead to the automatic creation, updating and inclusion of a file describing the dependencies of @file{mtnfile.mtn} in the @file{Makefile}: @example include $(DEPDIR)/mtnfile.Pf @end example @node Linking rule @section Linking rule The rule used for the linking of the model file is not in the @file{Makefile.miniker} file but should be provided in the user @file{Makefile} for more flexibility. The default rule uses the variables @code{miniker_user_objects} for additional object files and @code{LDADD} for additionnal linking flags and files, those variables are there to be changed by the user. The object files required by the Miniker code are in the make variable @code{miniker_principal_objects}, this variable is also used. The value of the variables @code{FC} for the Fortran compiler, @code{FFLAGS} for the Fortran compiler flags and @code{LDFLAGS} for the linker flags should be set to right values; @code{LIBS} should also be right and hold the link flags and link files required to compile the Miniker model. These variables are set by by @command{./configure} during configuration (@pxref{Configuration}) and used in the default rule: @verbatim $(model_file): $(miniker_user_objects) $(miniker_principal_objects) $(FC) $(FFLAGS) $(LDFLAGS) $^ $(LDADD) $(LIBS) -o $@ @end verbatim In case this isn't right it may be freely changed. You should certainly refer to the @ref{Top,,Top,make,GNU Make Manual} manual to understand what that rule exactly means and make your own. @node Concepts index @unnumbered Concepts index @printindex cp @node Variables macros and functions index @unnumbered Variables, macros and functions index @printindex vr @node Installation @appendix Installation @menu * Programming environments:: * Common requisites:: * Miniker with cmz:: * Miniker with make:: @end menu @node Programming environments @appendixsec Programming environments @cindex Programming environments Miniker is not a traditionnal software in that it isn't a library or an interpreter but rather a set of source and macro file that combines with the user model code and enable to build a binary program corresponding with the model. It requires a build environment with a preprocessor, a compiler and facilities that automate these steps. Two different environment are proposed. One use @command{cmz} (@url{http://wwwcmz.web.cern.ch/@/wwwcmz/index.html}), while the other is based on @command{make}. Other libraries are needed, the CERN Program Library (cernlib) and lapack. @node Common requisites @appendixsec Common requisites @cindex cernlib @cindex lapack Whatever method is used a fortran 77 compiler is required. The compilers that have been used so far are g77, gfortran and the sun solaris compiler. When usng CMZ, the CERN Program Library, available at @url{http://wwwasd.web.cern.ch/@/wwwasd/cernlib/}, has to be installed. With make, internal source files copied from the cernlib may be used instead but then some examples won't be available, since they rely on some mathematical functions provided by the CERN library. On windows, in case you want to use the compiler from the GNU compiler collection with cygwin or MINGW/MSYS you can use the binaries provided at @url{http://zyao.home.cern.ch/@/zyao/cernlib.html}. On Mac OS X, the cernlib provided by fink (package @code{cernlib-devel}) can be used. You should also have LAPACK, available at @url{http://www.netlib.org/@/lapack/}. LAPACK can also be installed as part of the CERN Library or as part of the @uref{ATLAS,http://math-atlas.sourceforge.net/} implementation. On most linux distributions a lapack package is available. On Mac OS X, the ATLAS implementation provided by fink or the frameworks from Xcode can be used. @node Miniker with cmz @appendixsec Miniker with cmz @cindex @file{mini_ker.cmz} @cindex @file{selseq.kumac} First of all you have to get the cmz file @file{mini_ker.cmz} and put it in a directory. In that same directory you should create a directory for each of your models. In the model directory you should copy the file @file{selseq.kumac} available with Miniker, and create your own cmz file for your model, called for example @file{mymodel.cmz}. You should also have installed the kumac macro files handling mortan compilation, the associated shell scripts and the mortran preprocessor. @node Miniker with make @appendixsec Miniker with make @menu * Additional requirements:: * Configuration:: * Installation with make:: @end menu @node Additional requirements @appendixsubsec Additional requirements for Miniker with make @cindex @command{mortran}, with make @cindex requirements, with make The package has been tested with GNU @command{make} and solaris @command{make}. Suitable preprocessors should also be installed. Two preprocessors are required, one that preprocess the cmz directives, and a mortran preprocessor. A cmz directives processor written in @command{perl}, is distributed in the @command{car2txt} package available at @url{http://www.environnement.ens.fr/@/perso/@/dumas/@/mini_ker/@/software.html}. A @command{mortran} package with a command able to preprocess a mortran file given on the command line with a syntax similar with the @command{cpp} command line syntax is also required. Such a mortran is available at @url{http://www.environnement.ens.fr/@/perso/@/dumas/@/mini_ker/@/software.html}. @c All the @command{make} commands are not suitable, for example the distribution @c doesn't work with solaris @command{make}. GNU @command{make} works, however, @c and should be available on most platforms, often called @command{gmake}. @node Configuration @appendixsubsec Configuration @cindex configuration of source The package is available at @url{http://www.environnement.ens.fr/@/perso/@/dumas/@/mini_ker/@/software.html}. It is available as a compresssed tar archive. On UNIX, with GNU @command{tar} it may be unpacked using @example $ tar xzvf mini_ker-4.2.tar.gz @end example The detection of the compiler, the preprocessors (car2txt and mortran), and the libraries are performed by the configure script. This script sets the apropriate variables in makefiles. It can be run with: @example $ cd mini_ker-4.2 $ ./configure @end example If the output of @command{./configure} doesn't show any error it means that all the components are here. It is possible to give @command{./configure} switches and also specify environment variables (see also @command{./configure --help}): @table @code @item --disable-cernlib Use the internal cernlib source files, even if a cernlib is detected. @item --with-static-cernlib This command line switch forces a static linking with the cernlib (or a dynamic linking if set to no). @item --with-cernlib This command line switch can be used to specify the cernlib location (if not detected or you want to use a specific cernlib). @item --with-blas @itemx --with-lapack With this command switch, you can specify the location of the blas and lapack libraries. For example, on mac OS X this can be used to specify the blas and lapack from the Apple frameworks: @example ./configure \ --with-blas=/System/Library/Frameworks/vecLib.framework/versions/A/vecLib \ --with-lapack=/System/Library/Frameworks/vecLib.framework/versions/A/vecLib @end example @item F77 @itemx FC @itemx FFLAGS @itemx LDFLAGS Classical compiler, compiler flags and linker flags. @item MORTRAN This environment variable holds the mortran preprocessor command (default is @command{mortran}). @item MTNFLAGS This environment variable holds command line arguments for the mortran preprocessor. It is empty in the default case. @item MTN This environment variable may be used to specify the mortran executable name and/or path, it should be used by the @command{mortran} commmand. (default is empty, which leads to a mortran executable called @command{mtn}). @item MTNDEPEND This environment variable may be used to specify the mortran dependencies checker executable. It should be used by the @command{mortran} commmand. (default is empty, which leads to a mortran dependencies checker called @command{mtndepend}). @end table After a proper configuration, if @command{make} is run then the example models should be build. You have to perform the configuration only once. @node Installation with make @appendixsubsec Installation with make @cindex installation with make Miniker can be installed by running @example make install @end example It should copy the sources and the @file{Makefile.miniker} file in a @file{mini_ker} directory in the @code{$(includedir)} directory, and copy the templates in @file{$(datadir)/mini_ker}. The default for @code{$(includedir)} is @file{/usr/local/include} and the default for @code{$(datadir)} is @file{/usr/local/share}, these defaults may be changed by @command{./configure} switches @samp{--prefix}, @samp{--includedir} and @samp{--datadir}. See @command{./configure --help} and the @file{INSTALL} file for more informations. The helper script @file{start_miniker} should also be installed. The installation is not required to use comfortably Miniker. Indeed the only thing that changes with the sources and the @file{Makefile.miniker} directory location is the @code{miniker_dir} variable in a project @code{Makefile}. @node Cmz directives reference @appendix Cmz directives reference The cmz directives are described together with the other features of cmz in the cmz manual at @url{http://wwwcmz.web.cern.ch/wwwcmz/}, the important ones are nevertheless recalled here, especially for those that use make and don't need the whole features of cmz. After the description of the generic features, we turn to the cmz directive of interest. There are three kinds of cmz directives that are of use within Miniker: one kind that introduce files, the other for conditionnal compilation and the third for sequence inclusion. @menu * Cmz directives general syntax:: * Conditional expressions:: * File introduction directives:: * Conditional directives:: * File inclusion directive:: * The self directive:: @end menu @node Cmz directives general syntax @appendixsec Cmz directives general syntax The cmz directives always begin with a @samp{+} in the first column, optionnaly followed by any number of @samp{_} that may be used for indentation, then the directive label, case insensitive, followed by the directive arguments separated by @samp{,}. The arguments are also case insensitive. Optional spaces may be around directive arguments. An optionnal @samp{.} ends the directive arguments and begin a comment, everything that follows that @samp{.} is ignored. @node Conditional expressions @appendixsec Conditional expressions A directive argument common to all the directives is the conditionnal expression. A conditionnal expression may be true or false, it is a combination of select flags. the select flags are combined with logical operators. A select flag itself is true if it was selected. A select flag @var{selflag} is selected by using the @code{sel @var{selflag}} instruction in cmz. It is selected by passing the @code{-D @var{selflag}} command line switch to the call of the cmz directives preprocessor when using make. A @samp{-} negates the expression that follows. Parenthesis @samp{(} and @samp{)} are used for the grouping of subexpressions. @samp{|} and @samp{,} are for the boolean or: an expression with a or is true if the expression on the left or the expression on the right of the or is true. @samp{&} is for the boolean and: an expression with an and is true if the expression on the left and the expression on the right are true. The grouping is left to right when there is no parenthesis, with or and @samp{&} having the same precedence. Therefore @example a&b|c @equiv{} (a&b)|c a|b&c @equiv{} (a|b)&c a|b&c is not a|(b&c) a&b|c is not a&(b|c) @end example @node File introduction directives @appendixsec File introduction directives A file (or sequence) introduction directive appears at the beginning of the file. There are two different directives, one is @code{DECK} for normal files, the other is @code{KEEP} for include files (sequences). The first argument is the name of the file. The file name may not be larger than 32 characters and is converted to lower case in the general case. The optionnal following arguments may be of 2 type (and may be mixed, separated by @samp{,}): @table @asis @item conditional A conditionnal is introduced by @code{IF=} followed by a conditionnal expression described in @ref{Conditional expressions}. The file is preprocessed if the conditionnal expression is true. @item language specification A language specification is introduced by a @code{T=}. The most common languages are @samp{mtn} for the mortran, @samp{ftn} for fortran not preprocessed, @samp{f77} for preprocessed fortran, @samp{c} for the c language and @samp{txt} for text files. In general the language of the file determines the name of files the preprocessed file is extracted to, the comment style and the command for inclusions. @end table It is a common practice to have wrong language type in @code{KEEP} as the language may be determined from the @code{DECK} that include them with cmz, or from their file name with make. This is not recommended and considered a bad practice. Such a directive will always appear in cmz, as it is built-in. It is recommended to have one when using make too, even though it is not required in most cases. Indeed make uses the file name directly and finds the language and file type by looking at the file extension. make should then pass the language type with a @code{--lang @var{lang}} command line switch when calling the cmz directives preprocessor. With make, the convention is to have @samp{cm} added before the normal file suffix and after the @samp{.}. The table @ref{tab:cmfile_suffix} shows the matching between suffixes, file type and file language. For example, a file beginning with @verbatim +Deck, subroutine_foo, If=monitor&-simple, T=f77. @end verbatim is a main preprocessed fortran file that will only be generated if @samp{monitor} is selected and @samp{simple} is not selected. The file to be preprocessed by make should have the @samp{.cmF} suffix, and be called @file{subroutine_foo.cmF}. A file beginning with @verbatim +KEEP,inc_common,If=monitor|interface,T=mtn @end verbatim is an mortran include file that should be processed only if @samp{monitor} or @samp{interface} is selected. The file to be preprocessed by make should have the @samp{cmmti} suffix and be called @file{inc_common.cmmti}. The resulting file when make is used will be called @file{inc_common.mti}. @node Conditional directives @appendixsec Conditional directives Conditional directives may be used to conditionnaly skip blocks of code. There are 4 conditional directives: @code{if}, @code{elseif}, @code{else} and @code{endif}. @code{+if} begins a conditional directives sequence, with argument a conditional expression. If the expression is true the block of code following the @code{+if} is output in the resulting file, up to another conditional directive, if it is false the code block is skipped. If the expression is false and the following conditional directive is @code{+elseif}, the same procedure is followed with the argument of @code{+elseif} which is also a conditionnal expression. More than one @code{+elseif} may follow a @code{+if}. If a @code{+if} or @code{+elseif} expression is true the following code block is output and all the following @code{+elseif} code blocks are skipped. If all the @code{+if} and @code{+elseif} expressions are false and the following coditionnal directive is @code{+else} then the block following the @code{+else} is output. If a previous expression was true the code block following the @code{+else} is skipped. The last code block is closed by @code{+endif}. Conditionnal directives may be nested, a @code{+if} begins a deeper conditionnal sequences directives that is ended by the corresponding @code{+endif}. The simplest example is: @verbatim some code; +IF,monitor code output only if monitor is true; +ENDIF @end verbatim If @samp{monitor} is selected, the @code{+if} block is output, it leads to @verbatim some code; code output only if monitor is true; @end verbatim If @samp{monitor} isn't selected the @code{+if} block is skipped, it leads to @verbatim some code; @end verbatim An example with @code{+else} may be: @verbatim +IF,double call dmysub(eta); +ELSE call smysub(eta); +ENDIF @end verbatim If @samp{double} is selected the code output is @code{call dmysub(eta);}, if @samp{double} isn't selected the code output is @code{call dmysub(eta);}. Here is a self explanatory example of use of @code{+elseif}: @verbatim +IF,monitor code used if monitor is selected; +ELSEIF,kalman code used if kalman is selected and monitor is not; +ELSE code used if kalman and monitor are not selected; +ENDIF @end verbatim And last an example of nested conditional directives: @verbatim +IF,monitor code used if monitor is selected; +_IF,kalman. deep if code used if monitor and kalman are selected; +_ELSE. deep else code used if monitor is selected and kalman is not; +_ENDIF. end the deep conditionnals sequence +ELSE code used if monitor is not selected; +_IF,kalman code used if monitor is not selected but kalman is; +_ELSE code used if monitor and kalman are not selected; +_ENDIF other code used if monitor is not selected; +ENDIF @end verbatim @node File inclusion directive @appendixsec File inclusion directive The file (sequence) inclusion directive is @code{seq}. The argument of @code{seq} is an include files @samp{,} separated list. The include files are @code{Keep} in cmz. The following optional arguments may be mixed: @table @asis @item conditional A conditionnal is introduced by @code{IF=} followed by a conditionnal expression described in @ref{Conditional expressions}. The directive is ignored if the conditionnal expression is false. @item T=noinclude When this argument is present the text of the sequence will always be included in the file where the @code{+seq} appears. @end table When there is no @code{T=noinclude} argument, the @code{+seq} directive may be replaced with an inclusion command suitable for the language of the file being processed, if such command has been specified. For example if we have the following sequence @verbatim +KEEP,inc,lang=C typedef struct incstr {char* msg}; @end verbatim And the following code in the file being processed: @verbatim +DECK,mainf,lang=C +SEQ,inc int main (int argc, char* argv) { exit(0); } @end verbatim the processing of @file{mainf} should lead to the file @file{mainf.c}, containing an include command for @file{inc}: @verbatim #include "inc.h" int main (int argc, char* argv) { exit(0); } @end verbatim In case the @code{+seq} has the @code{T=noinclude}: @verbatim +DECK,mainf,lang=C +SEQ,inc,T=noinclude int main (int argc, char* argv) { exit(0); } @end verbatim The processing of @file{mainf} should lead to the file @file{mainf.c} containing the text of @file{inc}: @verbatim typedef struct incstr {char* msg}; int main (int argc, char* argv) { exit(0); } @end verbatim @node The self directive @appendixsec The @samp{self} directive The @code{self} directive is an obsolete directive that may be used for conditionnal skipping of code. For a better approach see @ref{Conditional directives}. The optionnal argument of @code{+SELF} is @code{If=} followed by a conditionnal expression. If the conditionnal expression is true the code following the directive is output, if it is false the code is skipped up to any directive (including another @code{+SELF}) except @code{+seq}. @node Copying This Manual @appendix Copying This Manual @menu * GNU Free Documentation License:: License for copying this manual. @end menu @node GNU Free Documentation License @appendixsec GNU Free Documentation License @cindex FDL, GNU Free Documentation License @center Version 1.1, March 2000 @display Copyright @copyright{} 2000 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @end display @enumerate 0 @item PREAMBLE The purpose of this License is to make a manual, textbook, or other written document @dfn{free} in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of ``copyleft'', which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. @item APPLICABILITY AND DEFINITIONS This License applies to any manual or other work that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. The ``Document'', below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as ``you''. A ``Modified Version'' of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A ``Secondary Section'' is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (For example, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The ``Invariant Sections'' are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. The ``Cover Texts'' are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A ``Transparent'' copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, whose contents can be viewed and edited directly and straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup has been designed to thwart or discourage subsequent modification by readers is not Transparent. A copy that is not ``Transparent'' is called ``Opaque''. Examples of suitable formats for Transparent copies include plain @sc{ascii} without markup, Texinfo input format, La@TeX{} input format, @acronym{SGML} or @acronym{XML} using a publicly available @acronym{DTD}, and standard-conforming simple @acronym{HTML} designed for human modification. Opaque formats include PostScript, @acronym{PDF}, proprietary formats that can be read and edited only by proprietary word processors, @acronym{SGML} or @acronym{XML} for which the @acronym{DTD} and/or processing tools are not generally available, and the machine-generated @acronym{HTML} produced by some word processors for output purposes only. The ``Title Page'' means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, ``Title Page'' means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. @item VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. @item COPYING IN QUANTITY If you publish printed copies of the Document numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access to download anonymously at no charge using public-standard network protocols. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. @item MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: @enumerate A @item Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. @item List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has less than five). @item State on the Title page the name of the publisher of the Modified Version, as the publisher. @item Preserve all the copyright notices of the Document. @item Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. @item Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. @item Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. @item Include an unaltered copy of this License. @item Preserve the section entitled ``History'', and its title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section entitled ``History'' in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. @item Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the ``History'' section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. @item In any section entitled ``Acknowledgments'' or ``Dedications'', preserve the section's title, and preserve in the section all the substance and tone of each of the contributor acknowledgments and/or dedications given therein. @item Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. @item Delete any section entitled ``Endorsements''. Such a section may not be included in the Modified Version. @item Do not retitle any existing section as ``Endorsements'' or to conflict in title with any Invariant Section. @end enumerate If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section entitled ``Endorsements'', provided it contains nothing but endorsements of your Modified Version by various parties---for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. @item COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections entitled ``History'' in the various original documents, forming one section entitled ``History''; likewise combine any sections entitled ``Acknowledgments'', and any sections entitled ``Dedications''. You must delete all sections entitled ``Endorsements.'' @item COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. @item AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, does not as a whole count as a Modified Version of the Document, provided no compilation copyright is claimed for the compilation. Such a compilation is called an ``aggregate'', and this License does not apply to the other self-contained works thus compiled with the Document, on account of their being thus compiled, if they are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one quarter of the entire aggregate, the Document's Cover Texts may be placed on covers that surround only the Document within the aggregate. Otherwise they must appear on covers around the whole aggregate. @item TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English version will prevail. @item TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. @item FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See @uref{http://www.gnu.org/copyleft/}. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License ``or any later version'' applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. @end enumerate @page @appendixsubsec ADDENDUM: How to use this License for your documents To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: @smallexample @group Copyright (C) @var{year} @var{your name}. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being @var{list their titles}, with the Front-Cover Texts being @var{list}, and with the Back-Cover Texts being @var{list}. A copy of the license is included in the section entitled ``GNU Free Documentation License''. @end group @end smallexample If you have no Invariant Sections, write ``with no Invariant Sections'' instead of saying which ones are invariant. If you have no Front-Cover Texts, write ``no Front-Cover Texts'' instead of ``Front-Cover Texts being @var{list}''; likewise for Back-Cover Texts. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. @c Local Variables: @c ispell-local-pdict: "ispell-dict" @c End: @bye texi2html-1.82/test/manuals/res/ccvs/0000755000175000017500000000000011264347121021377 5ustar flichtenheldflichtenheldtexi2html-1.82/test/manuals/res/ccvs/cvs_2.html0000644000175000017500000042670211264347121023314 0ustar flichtenheldflichtenheld CVS—Concurrent Versions System v4.2: 2. The Repository
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. The Repository

    The CVS repository stores a complete copy of all the files and directories which are under version control.

    Normally, you never access any of the files in the repository directly. Instead, you use CVS commands to get your own copy of the files into a working directory, and then work on that copy. When you’ve finished a set of changes, you check (or commit) them back into the repository. The repository then contains the changes which you have made, as well as recording exactly what you changed, when you changed it, and other such information. Note that the repository is not a subdirectory of the working directory, or vice versa; they should be in separate locations.

    CVS can access a repository by a variety of means. It might be on the local computer, or it might be on a computer across the room or across the world. To distinguish various ways to access a repository, the repository name can start with an access method. For example, the access method :local: means to access a repository directory, so the repository :local:/usr/local/cvsroot means that the repository is in ‘/usr/local/cvsroot’ on the computer running CVS. For information on other access methods, see Remote repositories.

    If the access method is omitted, then if the repository starts with ‘/’, then :local: is assumed. If it does not start with ‘/’ then either :ext: or :server: is assumed. For example, if you have a local repository in ‘/usr/local/cvsroot’, you can use /usr/local/cvsroot instead of :local:/usr/local/cvsroot. But if (under Windows NT, for example) your local repository is ‘c:\src\cvsroot’, then you must specify the access method, as in :local:c:/src/cvsroot.

    The repository is split in two parts. ‘$CVSROOT/CVSROOT’ contains administrative files for CVS. The other directories contain the actual user-defined modules.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.1 Telling CVS where your repository is

    There are several ways to tell CVS where to find the repository. You can name the repository on the command line explicitly, with the -d (for "directory") option:

     
    cvs -d /usr/local/cvsroot checkout yoyodyne/tc
    

    Or you can set the $CVSROOT environment variable to an absolute path to the root of the repository, ‘/usr/local/cvsroot’ in this example. To set $CVSROOT, csh and tcsh users should have this line in their ‘.cshrc’ or ‘.tcshrc’ files:

     
    setenv CVSROOT /usr/local/cvsroot
    

    sh and bash users should instead have these lines in their ‘.profile’ or ‘.bashrc’:

     
    CVSROOT=/usr/local/cvsroot
    export CVSROOT
    

    A repository specified with -d will override the $CVSROOT environment variable. Once you’ve checked a working copy out from the repository, it will remember where its repository is (the information is recorded in the ‘CVS/Root’ file in the working copy).

    The -d option and the ‘CVS/Root’ file both override the $CVSROOT environment variable. If -d option differs from ‘CVS/Root’, the former is used. Of course, for proper operation they should be two ways of referring to the same repository.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2 How data is stored in the repository

    For most purposes it isn’t important how CVS stores information in the repository. In fact, the format has changed in the past, and is likely to change in the future. Since in almost all cases one accesses the repository via CVS commands, such changes need not be disruptive.

    However, in some cases it may be necessary to understand how CVS stores data in the repository, for example you might need to track down CVS locks (see section Several developers simultaneously attempting to run CVS) or you might need to deal with the file permissions appropriate for the repository.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2.1 Where files are stored within the repository

    The overall structure of the repository is a directory tree corresponding to the directories in the working directory. For example, supposing the repository is in

     
    /usr/local/cvsroot
    

    here is a possible directory tree (showing only the directories):

     
    /usr
     |
     +--local
     |   |
     |   +--cvsroot
     |   |    |
     |   |    +--CVSROOT
              |      (administrative files)
              |
              +--gnu
              |   |
              |   +--diff
              |   |   (source code to GNU diff)
              |   |
              |   +--rcs
              |   |   (source code to RCS)
              |   |
              |   +--cvs
              |       (source code to CVS)
              |
              +--yoyodyne
                  |
                  +--tc
                  |    |
                  |    +--man
                  |    |
                  |    +--testing
                  |
                  +--(other Yoyodyne software)
    

    With the directories are history files for each file under version control. The name of the history file is the name of the corresponding file with ‘,v’ appended to the end. Here is what the repository for the ‘yoyodyne/tc’ directory might look like:

     
      $CVSROOT
        |
        +--yoyodyne
        |   |
        |   +--tc
        |   |   |
                +--Makefile,v
                +--backend.c,v
                +--driver.c,v
                +--frontend.c,v
                +--parser.c,v
                +--man
                |    |
                |    +--tc.1,v
                |
                +--testing
                     |
                     +--testpgm.t,v
                     +--test2.t,v
    

    The history files contain, among other things, enough information to recreate any revision of the file, a log of all commit messages and the user-name of the person who committed the revision. The history files are known as RCS files, because the first program to store files in that format was a version control system known as RCS. For a full description of the file format, see the man page rcsfile(5), distributed with RCS, or the file ‘doc/RCSFILES’ in the CVS source distribution. This file format has become very common—many systems other than CVS or RCS can at least import history files in this format.

    The RCS files used in CVS differ in a few ways from the standard format. The biggest difference is magic branches; for more information see Magic branch numbers. Also in CVS the valid tag names are a subset of what RCS accepts; for CVS’s rules see Tags–Symbolic revisions.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2.2 File permissions

    All ‘,v’ files are created read-only, and you should not change the permission of those files. The directories inside the repository should be writable by the persons that have permission to modify the files in each directory. This normally means that you must create a UNIX group (see group(5)) consisting of the persons that are to edit the files in a project, and set up the repository so that it is that group that owns the directory. (On some systems, you also need to set the set-group-ID-on-execution bit on the repository directories (see chmod(1)) so that newly-created files and directories get the group-ID of the parent directory rather than that of the current process.)

    This means that you can only control access to files on a per-directory basis.

    Note that users must also have write access to check out files, because CVS needs to create lock files (see section Several developers simultaneously attempting to run CVS). You can use LockDir in CVSROOT/config to put the lock files somewhere other than in the repository if you want to allow read-only access to some directories (see section The CVSROOT/config configuration file).

    Also note that users must have write access to the ‘CVSROOT/val-tags’ file. CVS uses it to keep track of what tags are valid tag names (it is sometimes updated when tags are used, as well as when they are created).

    Each RCS file will be owned by the user who last checked it in. This has little significance; what really matters is who owns the directories.

    CVS tries to set up reasonable file permissions for new directories that are added inside the tree, but you must fix the permissions manually when a new directory should have different permissions than its parent directory. If you set the CVSUMASK environment variable that will control the file permissions which CVS uses in creating directories and/or files in the repository. CVSUMASK does not affect the file permissions in the working directory; such files have the permissions which are typical for newly created files, except that sometimes CVS creates them read-only (see the sections on watches, Telling CVS to watch certain files; -r, Global options; or CVSREAD, All environment variables which affect CVS).

    Note that using the client/server CVS (see section Remote repositories), there is no good way to set CVSUMASK; the setting on the client machine has no effect. If you are connecting with rsh, you can set CVSUMASK in ‘.bashrc’ or ‘.cshrc’, as described in the documentation for your operating system. This behavior might change in future versions of CVS; do not rely on the setting of CVSUMASK on the client having no effect.

    Using pserver, you will generally need stricter permissions on the CVSROOT directory and directories above it in the tree; see Security considerations with password authentication.

    Some operating systems have features which allow a particular program to run with the ability to perform operations which the caller of the program could not. For example, the set user ID (setuid) or set group ID (setgid) features of unix or the installed image feature of VMS. CVS was not written to use such features and therefore attempting to install CVS in this fashion will provide protection against only accidental lapses; anyone who is trying to circumvent the measure will be able to do so, and depending on how you have set it up may gain access to more than just CVS. You may wish to instead consider pserver. It shares some of the same attributes, in terms of possibly providing a false sense of security or opening security holes wider than the ones you are trying to fix, so read the documentation on pserver security carefully if you are considering this option (Security considerations with password authentication).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2.3 File Permission issues specific to Windows

    Some file permission issues are specific to Windows operating systems (Windows 95, Windows NT, and presumably future operating systems in this family. Some of the following might apply to OS/2 but I’m not sure).

    If you are using local CVS and the repository is on a networked file system which is served by the Samba SMB server, some people have reported problems with permissions. Enabling WRITE=YES in the samba configuration is said to fix/workaround it. Disclaimer: I haven’t investigated enough to know the implications of enabling that option, nor do I know whether there is something which CVS could be doing differently in order to avoid the problem. If you find something out, please let us know as described in Dealing with bugs in CVS or this manual.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2.4 The attic

    You will notice that sometimes CVS stores an RCS file in the Attic. For example, if the CVSROOT is ‘/usr/local/cvsroot’ and we are talking about the file ‘backend.c’ in the directory ‘yoyodyne/tc’, then the file normally would be in

     
    /usr/local/cvsroot/yoyodyne/tc/backend.c,v
    

    but if it goes in the attic, it would be in

     
    /usr/local/cvsroot/yoyodyne/tc/Attic/backend.c,v
    

    instead. It should not matter from a user point of view whether a file is in the attic; CVS keeps track of this and looks in the attic when it needs to. But in case you want to know, the rule is that the RCS file is stored in the attic if and only if the head revision on the trunk has state dead. A dead state means that file has been removed, or never added, for that revision. For example, if you add a file on a branch, it will have a trunk revision in dead state, and a branch revision in a non-dead state.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2.5 The CVS directory in the repository

    The ‘CVS’ directory in each repository directory contains information such as file attributes (in a file called ‘CVS/fileattr’. In the future additional files may be added to this directory, so implementations should silently ignore additional files.

    This behavior is implemented only by CVS 1.7 and later; for details see Using watches with old versions of CVS.

    The format of the fileattr file is a series of entries of the following form (where ‘{’ and ‘}’ means the text between the braces can be repeated zero or more times):

    ent-type filename <tab> attrname = attrval {; attrname = attrval} <linefeed>

    ent-type is ‘F’ for a file, in which case the entry specifies the attributes for that file.

    ent-type is ‘D’, and filename empty, to specify default attributes to be used for newly added files.

    Other ent-type are reserved for future expansion. CVS 1.9 and older will delete them any time it writes file attributes. CVS 1.10 and later will preserve them.

    Note that the order of the lines is not significant; a program writing the fileattr file may rearrange them at its convenience.

    There is currently no way of quoting tabs or linefeeds in the filename, ‘=’ in attrname, ‘;’ in attrval, etc. Note: some implementations also don’t handle a NUL character in any of the fields, but implementations are encouraged to allow it.

    By convention, attrname starting with ‘_’ is for an attribute given special meaning by CVS; other attrnames are for user-defined attributes (or will be, once implementations start supporting user-defined attributes).

    Builtin attributes:

    _watched

    Present means the file is watched and should be checked out read-only.

    _watchers

    Users with watches for this file. Value is watcher > type { , watcher > type } where watcher is a username, and type is zero or more of edit,unedit,commit separated by ‘+’ (that is, nothing if none; there is no "none" or "all" keyword).

    _editors

    Users editing this file. Value is editor > val { , editor > val } where editor is a username, and val is time+hostname+pathname, where time is when the cvs edit command (or equivalent) happened, and hostname and pathname are for the working directory.

    Example:

     
    Ffile1 _watched=;_watchers=joe>edit,mary>commit
    Ffile2 _watched=;_editors=sue>8 Jan 1975+workstn1+/home/sue/cvs
    D _watched=
    

    means that the file ‘file1’ should be checked out read-only. Furthermore, joe is watching for edits and mary is watching for commits. The file ‘file2’ should be checked out read-only; sue started editing it on 8 Jan 1975 in the directory ‘/home/sue/cvs’ on the machine workstn1. Future files which are added should be checked out read-only. To represent this example here, we have shown a space after ‘D’, ‘Ffile1’, and ‘Ffile2’, but in fact there must be a single tab character there and no spaces.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2.6 CVS locks in the repository

    For an introduction to CVS locks focusing on user-visible behavior, see Several developers simultaneously attempting to run CVS. The following section is aimed at people who are writing tools which want to access a CVS repository without interfering with other tools accessing the same repository. If you find yourself confused by concepts described here, like read lock, write lock, and deadlock, you might consult the literature on operating systems or databases.

    Any file in the repository with a name starting with ‘#cvs.rfl.’ is a read lock. Any file in the repository with a name starting with ‘#cvs.wfl’ is a write lock. Old versions of CVS (before CVS 1.5) also created files with names starting with ‘#cvs.tfl’, but they are not discussed here. The directory ‘#cvs.lock’ serves as a master lock. That is, one must obtain this lock first before creating any of the other locks.

    To obtain a readlock, first create the ‘#cvs.lock’ directory. This operation must be atomic (which should be true for creating a directory under most operating systems). If it fails because the directory already existed, wait for a while and try again. After obtaining the ‘#cvs.lock’ lock, create a file whose name is ‘#cvs.rfl.’ followed by information of your choice (for example, hostname and process identification number). Then remove the ‘#cvs.lock’ directory to release the master lock. Then proceed with reading the repository. When you are done, remove the ‘#cvs.rfl’ file to release the read lock.

    To obtain a writelock, first create the ‘#cvs.lock’ directory, as with a readlock. Then check that there are no files whose names start with ‘#cvs.rfl.’. If there are, remove ‘#cvs.lock’, wait for a while, and try again. If there are no readers, then create a file whose name is ‘#cvs.wfl’ followed by information of your choice (for example, hostname and process identification number). Hang on to the ‘#cvs.lock’ lock. Proceed with writing the repository. When you are done, first remove the ‘#cvs.wfl’ file and then the ‘#cvs.lock’ directory. Note that unlike the ‘#cvs.rfl’ file, the ‘#cvs.wfl’ file is just informational; it has no effect on the locking operation beyond what is provided by holding on to the ‘#cvs.lock’ lock itself.

    Note that each lock (writelock or readlock) only locks a single directory in the repository, including ‘Attic’ and ‘CVS’ but not including subdirectories which represent other directories under version control. To lock an entire tree, you need to lock each directory (note that if you fail to obtain any lock you need, you must release the whole tree before waiting and trying again, to avoid deadlocks).

    Note also that CVS expects writelocks to control access to individual ‘foo,v’ files. RCS has a scheme where the ‘,foo,’ file serves as a lock, but CVS does not implement it and so taking out a CVS writelock is recommended. See the comments at rcs_internal_lockfile in the CVS source code for further discussion/rationale.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2.7 How files are stored in the CVSROOT directory

    The ‘$CVSROOT/CVSROOT’ directory contains the various administrative files. In some ways this directory is just like any other directory in the repository; it contains RCS files whose names end in ‘,v’, and many of the CVS commands operate on it the same way. However, there are a few differences.

    For each administrative file, in addition to the RCS file, there is also a checked out copy of the file. For example, there is an RCS file ‘loginfo,v’ and a file ‘loginfo’ which contains the latest revision contained in ‘loginfo,v’. When you check in an administrative file, CVS should print

     
    cvs commit: Rebuilding administrative file database
    

    and update the checked out copy in ‘$CVSROOT/CVSROOT’. If it does not, there is something wrong (see section Dealing with bugs in CVS or this manual). To add your own files to the files to be updated in this fashion, you can add them to the ‘checkoutlist’ administrative file (see section The checkoutlist file).

    By default, the ‘modules’ file behaves as described above. If the modules file is very large, storing it as a flat text file may make looking up modules slow (I’m not sure whether this is as much of a concern now as when CVS first evolved this feature; I haven’t seen benchmarks). Therefore, by making appropriate edits to the CVS source code one can store the modules file in a database which implements the ndbm interface, such as Berkeley db or GDBM. If this option is in use, then the modules database will be stored in the files ‘modules.db’, ‘modules.pag’, and/or ‘modules.dir’.

    For information on the meaning of the various administrative files, see Reference manual for Administrative files.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3 How data is stored in the working directory

    While we are discussing CVS internals which may become visible from time to time, we might as well talk about what CVS puts in the ‘CVS’ directories in the working directories. As with the repository, CVS handles this information and one can usually access it via CVS commands. But in some cases it may be useful to look at it, and other programs, such as the jCVS graphical user interface or the VC package for emacs, may need to look at it. Such programs should follow the recommendations in this section if they hope to be able to work with other programs which use those files, including future versions of the programs just mentioned and the command-line CVS client.

    The ‘CVS’ directory contains several files. Programs which are reading this directory should silently ignore files which are in the directory but which are not documented here, to allow for future expansion.

    The files are stored according to the text file convention for the system in question. This means that working directories are not portable between systems with differing conventions for storing text files. This is intentional, on the theory that the files being managed by CVS probably will not be portable between such systems either.

    Root

    This file contains the current CVS root, as described in Telling CVS where your repository is.

    Repository

    This file contains the directory within the repository which the current directory corresponds with. It can be either an absolute pathname or a relative pathname; CVS has had the ability to read either format since at least version 1.3 or so. The relative pathname is relative to the root, and is the more sensible approach, but the absolute pathname is quite common and implementations should accept either. For example, after the command

     
    cvs -d :local:/usr/local/cvsroot checkout yoyodyne/tc
    

    Root’ will contain

     
    :local:/usr/local/cvsroot
    

    and ‘Repository’ will contain either

     
    /usr/local/cvsroot/yoyodyne/tc
    

    or

     
    yoyodyne/tc
    

    If the particular working directory does not correspond to a directory in the repository, then ‘Repository’ should contain ‘CVSROOT/Emptydir’.

    Entries

    This file lists the files and directories in the working directory. The first character of each line indicates what sort of line it is. If the character is unrecognized, programs reading the file should silently skip that line, to allow for future expansion.

    If the first character is ‘/’, then the format is:

     
    /name/revision/timestamp[+conflict]/options/tagdate
    

    where ‘[’ and ‘]’ are not part of the entry, but instead indicate that the ‘+’ and conflict marker are optional. name is the name of the file within the directory. revision is the revision that the file in the working derives from, or ‘0’ for an added file, or ‘-’ followed by a revision for a removed file. timestamp is the timestamp of the file at the time that CVS created it; if the timestamp differs with the actual modification time of the file it means the file has been modified. It is stored in the format used by the ISO C asctime() function (for example, ‘Sun Apr 7 01:29:26 1996’). One may write a string which is not in that format, for example, ‘Result of merge’, to indicate that the file should always be considered to be modified. This is not a special case; to see whether a file is modified a program should take the timestamp of the file and simply do a string compare with timestamp. If there was a conflict, conflict can be set to the modification time of the file after the file has been written with conflict markers (see section Conflicts example). Thus if conflict is subsequently the same as the actual modification time of the file it means that the user has obviously not resolved the conflict. options contains sticky options (for example ‘-kb’ for a binary file). tagdate contains ‘T’ followed by a tag name, or ‘D’ for a date, followed by a sticky tag or date. Note that if timestamp contains a pair of timestamps separated by a space, rather than a single timestamp, you are dealing with a version of CVS earlier than CVS 1.5 (not documented here).

    The timezone on the timestamp in CVS/Entries (local or universal) should be the same as the operating system stores for the timestamp of the file itself. For example, on Unix the file’s timestamp is in universal time (UT), so the timestamp in CVS/Entries should be too. On VMS, the file’s timestamp is in local time, so CVS on VMS should use local time. This rule is so that files do not appear to be modified merely because the timezone changed (for example, to or from summer time).

    If the first character of a line in ‘Entries’ is ‘D’, then it indicates a subdirectory. ‘D’ on a line all by itself indicates that the program which wrote the ‘Entries’ file does record subdirectories (therefore, if there is such a line and no other lines beginning with ‘D’, one knows there are no subdirectories). Otherwise, the line looks like:

     
    D/name/filler1/filler2/filler3/filler4
    

    where name is the name of the subdirectory, and all the filler fields should be silently ignored, for future expansion. Programs which modify Entries files should preserve these fields.

    The lines in the ‘Entries’ file can be in any order.

    Entries.Log

    This file does not record any information beyond that in ‘Entries’, but it does provide a way to update the information without having to rewrite the entire ‘Entries’ file, including the ability to preserve the information even if the program writing ‘Entries’ and ‘Entries.Log’ abruptly aborts. Programs which are reading the ‘Entries’ file should also check for ‘Entries.Log’. If the latter exists, they should read ‘Entries’ and then apply the changes mentioned in ‘Entries.Log’. After applying the changes, the recommended practice is to rewrite ‘Entries’ and then delete ‘Entries.Log’. The format of a line in ‘Entries.Log’ is a single character command followed by a space followed by a line in the format specified for a line in ‘Entries’. The single character command is ‘A’ to indicate that the entry is being added, ‘R’ to indicate that the entry is being removed, or any other character to indicate that the entire line in ‘Entries.Log’ should be silently ignored (for future expansion). If the second character of the line in ‘Entries.Log’ is not a space, then it was written by an older version of CVS (not documented here).

    Programs which are writing rather than reading can safely ignore ‘Entries.Log’ if they so choose.

    Entries.Backup

    This is a temporary file. Recommended usage is to write a new entries file to ‘Entries.Backup’, and then to rename it (atomically, where possible) to ‘Entries’.

    Entries.Static

    The only relevant thing about this file is whether it exists or not. If it exists, then it means that only part of a directory was gotten and CVS will not create additional files in that directory. To clear it, use the update command with the ‘-d’ option, which will get the additional files and remove ‘Entries.Static’.

    Tag

    This file contains per-directory sticky tags or dates. The first character is ‘T’ for a branch tag, ‘N’ for a non-branch tag, or ‘D’ for a date, or another character to mean the file should be silently ignored, for future expansion. This character is followed by the tag or date. Note that per-directory sticky tags or dates are used for things like applying to files which are newly added; they might not be the same as the sticky tags or dates on individual files. For general information on sticky tags and dates, see Sticky tags.

    Notify

    This file stores notifications (for example, for edit or unedit) which have not yet been sent to the server. Its format is not yet documented here.

    Notify.tmp

    This file is to ‘Notify’ as ‘Entries.Backup’ is to ‘Entries’. That is, to write ‘Notify’, first write the new contents to ‘Notify.tmp’ and then (atomically where possible), rename it to ‘Notify’.

    Base

    If watches are in use, then an edit command stores the original copy of the file in the ‘Base’ directory. This allows the unedit command to operate even if it is unable to communicate with the server.

    Baserev

    The file lists the revision for each of the files in the ‘Base’ directory. The format is:

     
    Bname/rev/expansion
    

    where expansion should be ignored, to allow for future expansion.

    Baserev.tmp

    This file is to ‘Baserev’ as ‘Entries.Backup’ is to ‘Entries’. That is, to write ‘Baserev’, first write the new contents to ‘Baserev.tmp’ and then (atomically where possible), rename it to ‘Baserev’.

    Template

    This file contains the template specified by the ‘rcsinfo’ file (see section Rcsinfo). It is only used by the client; the non-client/server CVS consults ‘rcsinfo’ directly.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4 The administrative files

    The directory ‘$CVSROOT/CVSROOT’ contains some administrative files. See section Reference manual for Administrative files, for a complete description. You can use CVS without any of these files, but some commands work better when at least the ‘modules’ file is properly set up.

    The most important of these files is the ‘modules’ file. It defines all modules in the repository. This is a sample ‘modules’ file.

     
    CVSROOT         CVSROOT
    modules         CVSROOT modules
    cvs             gnu/cvs
    rcs             gnu/rcs
    diff            gnu/diff
    tc              yoyodyne/tc
    

    The ‘modules’ file is line oriented. In its simplest form each line contains the name of the module, whitespace, and the directory where the module resides. The directory is a path relative to $CVSROOT. The last four lines in the example above are examples of such lines.

    The line that defines the module called ‘modules’ uses features that are not explained here. See section The modules file, for a full explanation of all the available features.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4.1 Editing administrative files

    You edit the administrative files in the same way that you would edit any other module. Use ‘cvs checkout CVSROOT’ to get a working copy, edit it, and commit your changes in the normal way.

    It is possible to commit an erroneous administrative file. You can often fix the error and check in a new revision, but sometimes a particularly bad error in the administrative file makes it impossible to commit new revisions.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.5 Multiple repositories

    In some situations it is a good idea to have more than one repository, for instance if you have two development groups that work on separate projects without sharing any code. All you have to do to have several repositories is to specify the appropriate repository, using the CVSROOT environment variable, the ‘-d’ option to CVS, or (once you have checked out a working directory) by simply allowing CVS to use the repository that was used to check out the working directory (see section Telling CVS where your repository is).

    The big advantage of having multiple repositories is that they can reside on different servers. With CVS version 1.10, a single command cannot recurse into directories from different repositories. With development versions of CVS, you can check out code from multiple servers into your working directory. CVS will recurse and handle all the details of making connections to as many server machines as necessary to perform the requested command. Here is an example of how to set up a working directory:

     
    cvs -d server1:/cvs co dir1
    cd dir1
    cvs -d server2:/root co sdir
    cvs update
    

    The cvs co commands set up the working directory, and then the cvs update command will contact server2, to update the dir1/sdir subdirectory, and server1, to update everything else.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.6 Creating a repository

    To set up a CVS repository, first choose the machine and disk on which you want to store the revision history of the source files. CPU and memory requirements are modest, so most machines should be adequate. For details see Server requirements.

    To estimate disk space requirements, if you are importing RCS files from another system, the size of those files is the approximate initial size of your repository, or if you are starting without any version history, a rule of thumb is to allow for the server approximately three times the size of the code to be under CVS for the repository (you will eventually outgrow this, but not for a while). On the machines on which the developers will be working, you’ll want disk space for approximately one working directory for each developer (either the entire tree or a portion of it, depending on what each developer uses).

    The repository should be accessible (directly or via a networked file system) from all machines which want to use CVS in server or local mode; the client machines need not have any access to it other than via the CVS protocol. It is not possible to use CVS to read from a repository which one only has read access to; CVS needs to be able to create lock files (see section Several developers simultaneously attempting to run CVS).

    To create a repository, run the cvs init command. It will set up an empty repository in the CVS root specified in the usual way (see section The Repository). For example,

     
    cvs -d /usr/local/cvsroot init
    

    cvs init is careful to never overwrite any existing files in the repository, so no harm is done if you run cvs init on an already set-up repository.

    cvs init will enable history logging; if you don’t want that, remove the history file after running cvs init. See section The history file.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.7 Backing up a repository

    There is nothing particularly magical about the files in the repository; for the most part it is possible to back them up just like any other files. However, there are a few issues to consider.

    The first is that to be paranoid, one should either not use CVS during the backup, or have the backup program lock CVS while doing the backup. To not use CVS, you might forbid logins to machines which can access the repository, turn off your CVS server, or similar mechanisms. The details would depend on your operating system and how you have CVS set up. To lock CVS, you would create ‘#cvs.rfl’ locks in each repository directory. See Several developers simultaneously attempting to run CVS, for more on CVS locks. Having said all this, if you just back up without any of these precautions, the results are unlikely to be particularly dire. Restoring from backup, the repository might be in an inconsistent state, but this would not be particularly hard to fix manually.

    When you restore a repository from backup, assuming that changes in the repository were made after the time of the backup, working directories which were not affected by the failure may refer to revisions which no longer exist in the repository. Trying to run CVS in such directories will typically produce an error message. One way to get those changes back into the repository is as follows:

    • Get a new working directory.
    • Copy the files from the working directory from before the failure over to the new working directory (do not copy the contents of the ‘CVS’ directories, of course).
    • Working in the new working directory, use commands such as cvs update and cvs diff to figure out what has changed, and then when you are ready, commit the changes into the repository.

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.8 Moving a repository

    Just as backing up the files in the repository is pretty much like backing up any other files, if you need to move a repository from one place to another it is also pretty much like just moving any other collection of files.

    The main thing to consider is that working directories point to the repository. The simplest way to deal with a moved repository is to just get a fresh working directory after the move. Of course, you’ll want to make sure that the old working directory had been checked in before the move, or you figured out some other way to make sure that you don’t lose any changes. If you really do want to reuse the existing working directory, it should be possible with manual surgery on the ‘CVS/Repository’ files. You can see How data is stored in the working directory, for information on the ‘CVS/Repository’ and ‘CVS/Root’ files, but unless you are sure you want to bother, it probably isn’t worth it.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.9 Remote repositories

    Your working copy of the sources can be on a different machine than the repository. Using CVS in this manner is known as client/server operation. You run CVS on a machine which can mount your working directory, known as the client, and tell it to communicate to a machine which can mount the repository, known as the server. Generally, using a remote repository is just like using a local one, except that the format of the repository name is:

     
    [:method:][[user][:password]@]hostname[:[port]]/path/to/repository
    

    Specifying a password in the repository name is not recommended during checkout, since this will cause CVS to store a cleartext copy of the password in each created directory. cvs login first instead (see section Using the client with password authentication).

    The details of exactly what needs to be set up depend on how you are connecting to the server.

    If method is not specified, and the repository name contains ‘:’, then the default is ext or server, depending on your platform; both are described in Connecting with rsh.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.9.1 Server requirements

    The quick answer to what sort of machine is suitable as a server is that requirements are modest—a server with 32M of memory or even less can handle a fairly large source tree with a fair amount of activity.

    The real answer, of course, is more complicated. Estimating the known areas of large memory consumption should be sufficient to estimate memory requirements. There are two such areas documented here; other memory consumption should be small by comparison (if you find that is not the case, let us know, as described in Dealing with bugs in CVS or this manual, so we can update this documentation).

    The first area of big memory consumption is large checkouts, when using the CVS server. The server consists of two processes for each client that it is serving. Memory consumption on the child process should remain fairly small. Memory consumption on the parent process, particularly if the network connection to the client is slow, can be expected to grow to slightly more than the size of the sources in a single directory, or two megabytes, whichever is larger.

    Multiplying the size of each CVS server by the number of servers which you expect to have active at one time should give an idea of memory requirements for the server. For the most part, the memory consumed by the parent process probably can be swap space rather than physical memory.

    The second area of large memory consumption is diff, when checking in large files. This is required even for binary files. The rule of thumb is to allow about ten times the size of the largest file you will want to check in, although five times may be adequate. For example, if you want to check in a file which is 10 megabytes, you should have 100 megabytes of memory on the machine doing the checkin (the server machine for client/server, or the machine running CVS for non-client/server). This can be swap space rather than physical memory. Because the memory is only required briefly, there is no particular need to allow memory for more than one such checkin at a time.

    Resource consumption for the client is even more modest—any machine with enough capacity to run the operating system in question should have little trouble.

    For information on disk space requirements, see Creating a repository.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.9.2 Connecting with rsh

    CVS uses the ‘rsh’ protocol to perform these operations, so the remote user host needs to have a ‘.rhosts’ file which grants access to the local user. Note that the program that CVS uses for this purpose may be specified using the ‘--with-rsh’ flag to configure.

    For example, suppose you are the user ‘mozart’ on the local machine ‘toe.example.com’, and the server machine is ‘faun.example.org’. On faun, put the following line into the file ‘.rhosts’ in ‘bach’’s home directory:

     
    toe.example.com  mozart
    

    Then test that ‘rsh’ is working with

     
    rsh -l bach faun.example.org 'echo $PATH'
    

    Next you have to make sure that rsh will be able to find the server. Make sure that the path which rsh printed in the above example includes the directory containing a program named cvs which is the server. You need to set the path in ‘.bashrc’, ‘.cshrc’, etc., not ‘.login’ or ‘.profile’. Alternately, you can set the environment variable CVS_SERVER on the client machine to the filename of the server you want to use, for example ‘/usr/local/bin/cvs-1.6’.

    There is no need to edit ‘inetd.conf’ or start a CVS server daemon.

    There are two access methods that you use in CVSROOT for rsh. :server: specifies an internal rsh client, which is supported only by some CVS ports. :ext: specifies an external rsh program. By default this is rsh (unless otherwise specified by the ‘--with-rsh’ flag to configure) but you may set the CVS_RSH environment variable to invoke another program which can access the remote server (for example, remsh on HP-UX 9 because rsh is something different). It must be a program which can transmit data to and from the server without modifying it; for example the Windows NT rsh is not suitable since it by default translates between CRLF and LF. The OS/2 CVS port has a hack to pass ‘-b’ to rsh to get around this, but since this could potentially cause problems for programs other than the standard rsh, it may change in the future. If you set CVS_RSH to SSH or some other rsh replacement, the instructions in the rest of this section concerning ‘.rhosts’ and so on are likely to be inapplicable; consult the documentation for your rsh replacement.

    Continuing our example, supposing you want to access the module ‘foo’ in the repository ‘/usr/local/cvsroot/’, on machine ‘faun.example.org’, you are ready to go:

     
    cvs -d :ext:bach@faun.example.org:/usr/local/cvsroot checkout foo
    

    (The ‘bach@’ can be omitted if the username is the same on both the local and remote hosts.)


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.9.3 Direct connection with password authentication

    The CVS client can also connect to the server using a password protocol. This is particularly useful if using rsh is not feasible (for example, the server is behind a firewall), and Kerberos also is not available.

    To use this method, it is necessary to make some adjustments on both the server and client sides.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.9.3.1 Setting up the server for password authentication

    First of all, you probably want to tighten the permissions on the ‘$CVSROOT’ and ‘$CVSROOT/CVSROOT’ directories. See Security considerations with password authentication, for more details.

    On the server side, the file ‘/etc/inetd.conf’ needs to be edited so inetd knows to run the command cvs pserver when it receives a connection on the right port. By default, the port number is 2401; it would be different if your client were compiled with CVS_AUTH_PORT defined to something else, though. This can also be specified in the CVSROOT variable (see section Remote repositories) or overridden with the CVS_CLIENT_PORT environment variable (see section All environment variables which affect CVS).

    If your inetd allows raw port numbers in ‘/etc/inetd.conf’, then the following (all on a single line in ‘inetd.conf’) should be sufficient:

     
    2401  stream  tcp  nowait  root  /usr/local/bin/cvs
    cvs -f --allow-root=/usr/cvsroot pserver
    

    (You could also use the ‘-T’ option to specify a temporary directory.)

    The ‘--allow-root’ option specifies the allowable CVSROOT directory. Clients which attempt to use a different CVSROOT directory will not be allowed to connect. If there is more than one CVSROOT directory which you want to allow, repeat the option. (Unfortunately, many versions of inetd have very small limits on the number of arguments and/or the total length of the command. The usual solution to this problem is to have inetd run a shell script which then invokes CVS with the necessary arguments.)

    If your inetd wants a symbolic service name instead of a raw port number, then put this in ‘/etc/services’:

     
    cvspserver      2401/tcp
    

    and put cvspserver instead of 2401 in ‘inetd.conf’.

    If your system uses xinetd instead of inetd, the procedure is slightly different. Create a file called ‘/etc/xinetd.d/cvspserver’ containing the following:

     
    service cvspserver
    {
       port        = 2401
       socket_type = stream
       protocol    = tcp
       wait        = no
       user        = root
       passenv     = PATH
       server      = /usr/local/bin/cvs
       server_args = -f --allow-root=/usr/cvsroot pserver
    }
    

    (If cvspserver is defined in ‘/etc/services’, you can omit the port line.)

    Once the above is taken care of, restart your inetd, or do whatever is necessary to force it to reread its initialization files.

    If you are having trouble setting this up, see Trouble making a connection to a CVS server.

    Because the client stores and transmits passwords in cleartext (almost—see Security considerations with password authentication, for details), a separate CVS password file is generally used, so people don’t compromise their regular passwords when they access the repository. This file is ‘$CVSROOT/CVSROOT/passwd’ (see section The administrative files). It uses a colon-separated format, similar to ‘/etc/passwd’ on Unix systems, except that it has fewer fields: CVS username, optional password, and an optional system username for CVS to run as if authentication succeeds. Here is an example ‘passwd’ file with five entries:

     
    anonymous:
    bach:ULtgRLXo7NRxs
    spwang:1sOp854gDF3DY
    melissa:tGX1fS8sun6rY:pubcvs
    qproj:XR4EZcEs0szik:pubcvs
    

    (The passwords are encrypted according to the standard Unix crypt() function, so it is possible to paste in passwords directly from regular Unix ‘/etc/passwd’ files.)

    The first line in the example will grant access to any CVS client attempting to authenticate as user anonymous, no matter what password they use, including an empty password. (This is typical for sites granting anonymous read-only access; for information on how to do the "read-only" part, see Read-only repository access.)

    The second and third lines will grant access to bach and spwang if they supply their respective plaintext passwords.

    The fourth line will grant access to melissa, if she supplies the correct password, but her CVS operations will actually run on the server side under the system user pubcvs. Thus, there need not be any system user named melissa, but there must be one named pubcvs.

    The fifth line shows that system user identities can be shared: any client who successfully authenticates as qproj will actually run as pubcvs, just as melissa does. That way you could create a single, shared system user for each project in your repository, and give each developer their own line in the ‘$CVSROOT/CVSROOT/passwd’ file. The CVS username on each line would be different, but the system username would be the same. The reason to have different CVS usernames is that CVS will log their actions under those names: when melissa commits a change to a project, the checkin is recorded in the project’s history under the name melissa, not pubcvs. And the reason to have them share a system username is so that you can arrange permissions in the relevant area of the repository such that only that account has write-permission there.

    If the system-user field is present, all password-authenticated CVS commands run as that user; if no system user is specified, CVS simply takes the CVS username as the system username and runs commands as that user. In either case, if there is no such user on the system, then the CVS operation will fail (regardless of whether the client supplied a valid password).

    The password and system-user fields can both be omitted (and if the system-user field is omitted, then also omit the colon that would have separated it from the encrypted password). For example, this would be a valid ‘$CVSROOT/CVSROOT/passwd’ file:

     
    anonymous::pubcvs
    fish:rKa5jzULzmhOo:kfogel
    sussman:1sOp854gDF3DY
    

    When the password field is omitted or empty, then the client’s authentication attempt will succeed with any password, including the empty string. However, the colon after the CVS username is always necessary, even if the password is empty.

    CVS can also fall back to use system authentication. When authenticating a password, the server first checks for the user in the ‘$CVSROOT/CVSROOT/passwd’ file. If it finds the user, it will use that entry for authentication as described above. But if it does not find the user, or if the CVSpasswd’ file does not exist, then the server can try to authenticate the username and password using the operating system’s user-lookup routines (this "fallback" behavior can be disabled by setting SystemAuth=no in the CVSconfig’ file, see section The CVSROOT/config configuration file).

    The default fallback behaviour is to look in ‘/etc/passwd’ for this system password unless your system has PAM (Pluggable Authentication Modules) and your CVS server executable was configured to use it at compile time (using ./configure --enable-pam - see the INSTALL file for more). In this case, PAM will be consulted instead. This means that CVS can be configured to use any password authentication source PAM can be configured to use (possibilities include a simple UNIX password, NIS, LDAP, and others) in its global configuration file (usually ‘/etc/pam.conf’ or possibly ‘/etc/pam.d/cvs’). See your PAM documentation for more details on PAM configuration.

    Note that PAM is an experimental feature in CVS and feedback is encouraged. Please send a mail to one of the CVS mailing lists (info-cvs@gnu.org or bug-cvs@gnu.org) if you use the CVS PAM support.

    WARNING: Using PAM gives the system administrator much more flexibility about how CVS users are authenticated but no more security than other methods. See below for more.

    CVS needs an "auth" and "account" module in the PAM configuration file. A typical PAM configuration would therefore have the following lines in ‘/etc/pam.conf’ to emulate the standard CVS system ‘/etc/passwd’ authentication:

     
    cvs	auth	    required	pam_unix.so
    cvs	account	    required	pam_unix.so
    

    The the equivalent ‘/etc/pam.d/cvs’ would contain

     
    auth	    required	pam_unix.so
    account	    required	pam_unix.so
    

    Some systems require a full path to the module so that ‘pam_unix.so’ (Linux) would become something like ‘/usr/lib/security/$ISA/pam_unix.so.1’ (Sun Solaris). See the ‘contrib/pam’ subdirectory of the CVS source distribution for further example configurations.

    The PAM service name given above as "cvs" is just the service name in the default configuration amd can be set using ./configure --with-hardcoded-pam-service-name=<pam-service-name> before compiling. CVS can also be configured to use whatever name it is invoked as as its PAM service name using ./configure --without-hardcoded-pam-service-name, but this feature should not be used if you may not have control of the name CVS will be invoked as.

    Be aware, also, that falling back to system authentication might be a security risk: CVS operations would then be authenticated with that user’s regular login password, and the password flies across the network in plaintext. See Security considerations with password authentication for more on this. This may be more of a problem with PAM authentication because it is likely that the source of the system password is some central authentication service like LDAP which is also used to authenticate other services.

    On the other hand, PAM makes it very easy to change your password regularly. If they are given the option of a one-password system for all of their activities, users are often more willing to change their password on a regular basis.

    In the non-PAM configuration where the password is stored in the ‘CVSROOT/passwd’ file, it is difficult to change passwords on a regular basis since only administrative users (or in some cases processes that act as an administrative user) are typicaly given access to modify this file. Either there needs to be some hand-crafted web page or set-uid program to update the file, or the update needs to be done by submitting a request to an administrator to perform the duty by hand. In the first case, having to remember to update a separate password on a periodic basis can be difficult. In the second case, the manual nature of the change will typically mean that the password will not be changed unless it is absolutely necessary.

    Note that PAM administrators should probably avoid configuring one-time-passwords (OTP) for CVS authentication/authorization. If OTPs are desired, the administrator may wish to encourage the use of one of the other Client/Server access methods. See the section on see section Remote repositories for a list of other methods.

    Right now, the only way to put a password in the CVSpasswd’ file is to paste it there from somewhere else. Someday, there may be a cvs passwd command.

    Unlike many of the files in ‘$CVSROOT/CVSROOT’, it is normal to edit the ‘passwd’ file in-place, rather than via CVS. This is because of the possible security risks of having the ‘passwd’ file checked out to people’s working copies. If you do want to include the ‘passwd’ file in checkouts of ‘$CVSROOT/CVSROOT’, see The checkoutlist file.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.9.3.2 Using the client with password authentication

    To run a CVS command on a remote repository via the password-authenticating server, one specifies the pserver protocol, optional username, repository host, an optional port number, and path to the repository. For example:

     
    cvs -d :pserver:faun.example.org:/usr/local/cvsroot checkout someproj
    

    or

     
    CVSROOT=:pserver:bach@faun.example.org:2401/usr/local/cvsroot
    cvs checkout someproj
    

    However, unless you’re connecting to a public-access repository (i.e., one where that username doesn’t require a password), you’ll need to supply a password or log in first. Logging in verifies your password with the repository and stores it in a file. It’s done with the login command, which will prompt you interactively for the password if you didn’t supply one as part of $CVSROOT:

     
    cvs -d :pserver:bach@faun.example.org:/usr/local/cvsroot login
    CVS password:
    

    or

     
    cvs -d :pserver:bach:p4ss30rd@faun.example.org:/usr/local/cvsroot login
    

    After you enter the password, CVS verifies it with the server. If the verification succeeds, then that combination of username, host, repository, and password is permanently recorded, so future transactions with that repository won’t require you to run cvs login. (If verification fails, CVS will exit complaining that the password was incorrect, and nothing will be recorded.)

    The records are stored, by default, in the file ‘$HOME/.cvspass’. That file’s format is human-readable, and to a degree human-editable, but note that the passwords are not stored in cleartext—they are trivially encoded to protect them from "innocent" compromise (i.e., inadvertent viewing by a system administrator or other non-malicious person).

    You can change the default location of this file by setting the CVS_PASSFILE environment variable. If you use this variable, make sure you set it before cvs login is run. If you were to set it after running cvs login, then later CVS commands would be unable to look up the password for transmission to the server.

    Once you have logged in, all CVS commands using that remote repository and username will authenticate with the stored password. So, for example

     
    cvs -d :pserver:bach@faun.example.org:/usr/local/cvsroot checkout foo
    

    should just work (unless the password changes on the server side, in which case you’ll have to re-run cvs login).

    Note that if the ‘:pserver:’ were not present in the repository specification, CVS would assume it should use rsh to connect with the server instead (see section Connecting with rsh).

    Of course, once you have a working copy checked out and are running CVS commands from within it, there is no longer any need to specify the repository explicitly, because CVS can deduce the repository from the working copy’s ‘CVS’ subdirectory.

    The password for a given remote repository can be removed from the CVS_PASSFILE by using the cvs logout command.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.9.3.3 Security considerations with password authentication

    The passwords are stored on the client side in a trivial encoding of the cleartext, and transmitted in the same encoding. The encoding is done only to prevent inadvertent password compromises (i.e., a system administrator accidentally looking at the file), and will not prevent even a naive attacker from gaining the password.

    The separate CVS password file (see section Setting up the server for password authentication) allows people to use a different password for repository access than for login access. On the other hand, once a user has non-read-only access to the repository, she can execute programs on the server system through a variety of means. Thus, repository access implies fairly broad system access as well. It might be possible to modify CVS to prevent that, but no one has done so as of this writing.

    Note that because the ‘$CVSROOT/CVSROOT’ directory contains ‘passwd’ and other files which are used to check security, you must control the permissions on this directory as tightly as the permissions on ‘/etc’. The same applies to the ‘$CVSROOT’ directory itself and any directory above it in the tree. Anyone who has write access to such a directory will have the ability to become any user on the system. Note that these permissions are typically tighter than you would use if you are not using pserver.

    In summary, anyone who gets the password gets repository access (which may imply some measure of general system access as well). The password is available to anyone who can sniff network packets or read a protected (i.e., user read-only) file. If you want real security, get Kerberos.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.9.4 Direct connection with GSSAPI

    GSSAPI is a generic interface to network security systems such as Kerberos 5. If you have a working GSSAPI library, you can have CVS connect via a direct TCP connection, authenticating with GSSAPI.

    To do this, CVS needs to be compiled with GSSAPI support; when configuring CVS it tries to detect whether GSSAPI libraries using kerberos version 5 are present. You can also use the ‘--with-gssapi’ flag to configure.

    The connection is authenticated using GSSAPI, but the message stream is not authenticated by default. You must use the -a global option to request stream authentication.

    The data transmitted is not encrypted by default. Encryption support must be compiled into both the client and the server; use the ‘--enable-encrypt’ configure option to turn it on. You must then use the -x global option to request encryption.

    GSSAPI connections are handled on the server side by the same server which handles the password authentication server; see Setting up the server for password authentication. If you are using a GSSAPI mechanism such as Kerberos which provides for strong authentication, you will probably want to disable the ability to authenticate via cleartext passwords. To do so, create an empty ‘CVSROOT/passwd’ password file, and set SystemAuth=no in the config file (see section The CVSROOT/config configuration file).

    The GSSAPI server uses a principal name of cvs/hostname, where hostname is the canonical name of the server host. You will have to set this up as required by your GSSAPI mechanism.

    To connect using GSSAPI, use ‘:gserver:’. For example,

     
    cvs -d :gserver:faun.example.org:/usr/local/cvsroot checkout foo
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.9.5 Direct connection with kerberos

    The easiest way to use kerberos is to use the kerberos rsh, as described in Connecting with rsh. The main disadvantage of using rsh is that all the data needs to pass through additional programs, so it may be slower. So if you have kerberos installed you can connect via a direct TCP connection, authenticating with kerberos.

    This section concerns the kerberos network security system, version 4. Kerberos version 5 is supported via the GSSAPI generic network security interface, as described in the previous section.

    To do this, CVS needs to be compiled with kerberos support; when configuring CVS it tries to detect whether kerberos is present or you can use the ‘--with-krb4’ flag to configure.

    The data transmitted is not encrypted by default. Encryption support must be compiled into both the client and server; use the ‘--enable-encryption’ configure option to turn it on. You must then use the -x global option to request encryption.

    You need to edit ‘inetd.conf’ on the server machine to run cvs kserver. The client uses port 1999 by default; if you want to use another port specify it in the CVSROOT (see section Remote repositories) or the CVS_CLIENT_PORT environment variable (see section All environment variables which affect CVS) on the client.

    When you want to use CVS, get a ticket in the usual way (generally kinit); it must be a ticket which allows you to log into the server machine. Then you are ready to go:

     
    cvs -d :kserver:faun.example.org:/usr/local/cvsroot checkout foo
    

    Previous versions of CVS would fall back to a connection via rsh; this version will not do so.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.9.6 Connecting with fork

    This access method allows you to connect to a repository on your local disk via the remote protocol. In other words it does pretty much the same thing as :local:, but various quirks, bugs and the like are those of the remote CVS rather than the local CVS.

    For day-to-day operations you might prefer either :local: or :fork:, depending on your preferences. Of course :fork: comes in particularly handy in testing or debugging cvs and the remote protocol. Specifically, we avoid all of the network-related setup/configuration, timeouts, and authentication inherent in the other remote access methods but still create a connection which uses the remote protocol.

    To connect using the fork method, use ‘:fork:’ and the pathname to your local repository. For example:

     
    cvs -d :fork:/usr/local/cvsroot checkout foo
    

    As with :ext:, the server is called ‘cvs’ by default, or the value of the CVS_SERVER environment variable.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.10 Read-only repository access

    It is possible to grant read-only repository access to people using the password-authenticated server (see section Direct connection with password authentication). (The other access methods do not have explicit support for read-only users because those methods all assume login access to the repository machine anyway, and therefore the user can do whatever local file permissions allow her to do.)

    A user who has read-only access can do only those CVS operations which do not modify the repository, except for certain “administrative” files (such as lock files and the history file). It may be desirable to use this feature in conjunction with user-aliasing (see section Setting up the server for password authentication).

    Unlike with previous versions of CVS, read-only users should be able merely to read the repository, and not to execute programs on the server or otherwise gain unexpected levels of access. Or to be more accurate, the known holes have been plugged. Because this feature is new and has not received a comprehensive security audit, you should use whatever level of caution seems warranted given your attitude concerning security.

    There are two ways to specify read-only access for a user: by inclusion, and by exclusion.

    "Inclusion" means listing that user specifically in the ‘$CVSROOT/CVSROOT/readers’ file, which is simply a newline-separated list of users. Here is a sample ‘readers’ file:

     
    melissa
    splotnik
    jrandom
    

    (Don’t forget the newline after the last user.)

    "Exclusion" means explicitly listing everyone who has write access—if the file

     
    $CVSROOT/CVSROOT/writers
    

    exists, then only those users listed in it have write access, and everyone else has read-only access (of course, even the read-only users still need to be listed in the CVSpasswd’ file). The ‘writers’ file has the same format as the ‘readers’ file.

    Note: if your CVSpasswd’ file maps cvs users onto system users (see section Setting up the server for password authentication), make sure you deny or grant read-only access using the cvs usernames, not the system usernames. That is, the ‘readers’ and ‘writers’ files contain cvs usernames, which may or may not be the same as system usernames.

    Here is a complete description of the server’s behavior in deciding whether to grant read-only or read-write access:

    If ‘readers’ exists, and this user is listed in it, then she gets read-only access. Or if ‘writers’ exists, and this user is NOT listed in it, then she also gets read-only access (this is true even if ‘readers’ exists but she is not listed there). Otherwise, she gets full read-write access.

    Of course there is a conflict if the user is listed in both files. This is resolved in the more conservative way, it being better to protect the repository too much than too little: such a user gets read-only access.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.11 Temporary directories for the server

    While running, the CVS server creates temporary directories. They are named

     
    cvs-servpid
    

    where pid is the process identification number of the server. They are located in the directory specified by the ‘-T’ global option (see section Global options), the TMPDIR environment variable (see section All environment variables which affect CVS), or, failing that, ‘/tmp’.

    In most cases the server will remove the temporary directory when it is done, whether it finishes normally or abnormally. However, there are a few cases in which the server does not or cannot remove the temporary directory, for example:

    • If the server aborts due to an internal server error, it may preserve the directory to aid in debugging
    • If the server is killed in a way that it has no way of cleaning up (most notably, ‘kill -KILL’ on unix).
    • If the system shuts down without an orderly shutdown, which tells the server to clean up.

    In cases such as this, you will need to manually remove the ‘cvs-servpid’ directories. As long as there is no server running with process identification number pid, it is safe to do so.


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/ccvs/cvs_3.html0000644000175000017500000005225711264347121023315 0ustar flichtenheldflichtenheld CVS—Concurrent Versions System v4.2: 3. Starting a project with CVS
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. Starting a project with CVS

    Because renaming files and moving them between directories is somewhat inconvenient, the first thing you do when you start a new project should be to think through your file organization. It is not impossible to rename or move files, but it does increase the potential for confusion and CVS does have some quirks particularly in the area of renaming directories. See section Moving and renaming files.

    What to do next depends on the situation at hand.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.1 Setting up the files

    The first step is to create the files inside the repository. This can be done in a couple of different ways.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.1.1 Creating a directory tree from a number of files

    When you begin using CVS, you will probably already have several projects that can be put under CVS control. In these cases the easiest way is to use the import command. An example is probably the easiest way to explain how to use it. If the files you want to install in CVS reside in ‘wdir’, and you want them to appear in the repository as ‘$CVSROOT/yoyodyne/rdir’, you can do this:

     
    $ cd wdir
    $ cvs import -m "Imported sources" yoyodyne/rdir yoyo start
    

    Unless you supply a log message with the ‘-m’ flag, CVS starts an editor and prompts for a message. The string ‘yoyo’ is a vendor tag, and ‘start’ is a release tag. They may fill no purpose in this context, but since CVS requires them they must be present. See section Tracking third-party sources, for more information about them.

    You can now verify that it worked, and remove your original source directory.

     
    $ cd ..
    $ cvs checkout yoyodyne/rdir       # Explanation below
    $ diff -r wdir yoyodyne/rdir
    $ rm -r wdir
    

    Erasing the original sources is a good idea, to make sure that you do not accidentally edit them in wdir, bypassing CVS. Of course, it would be wise to make sure that you have a backup of the sources before you remove them.

    The checkout command can either take a module name as argument (as it has done in all previous examples) or a path name relative to $CVSROOT, as it did in the example above.

    It is a good idea to check that the permissions CVS sets on the directories inside $CVSROOT are reasonable, and that they belong to the proper groups. See section File permissions.

    If some of the files you want to import are binary, you may want to use the wrappers features to specify which files are binary and which are not. See section The cvswrappers file.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.1.2 Creating Files From Other Version Control Systems

    If you have a project which you are maintaining with another version control system, such as RCS, you may wish to put the files from that project into CVS, and preserve the revision history of the files.

    From RCS

    If you have been using RCS, find the RCS files—usually a file named ‘foo.c’ will have its RCS file in ‘RCS/foo.c,v’ (but it could be other places; consult the RCS documentation for details). Then create the appropriate directories in CVS if they do not already exist. Then copy the files into the appropriate directories in the CVS repository (the name in the repository must be the name of the source file with ‘,v’ added; the files go directly in the appropriate directory of the repository, not in an ‘RCS’ subdirectory). This is one of the few times when it is a good idea to access the CVS repository directly, rather than using CVS commands. Then you are ready to check out a new working directory.

    The RCS file should not be locked when you move it into CVS; if it is, CVS will have trouble letting you operate on it.

    From another version control system

    Many version control systems have the ability to export RCS files in the standard format. If yours does, export the RCS files and then follow the above instructions.

    Failing that, probably your best bet is to write a script that will check out the files one revision at a time using the command line interface to the other system, and then check the revisions into CVS. The ‘sccs2rcs’ script mentioned below may be a useful example to follow.

    From SCCS

    There is a script in the ‘contrib’ directory of the CVS source distribution called ‘sccs2rcs’ which converts SCCS files to RCS files. Note: you must run it on a machine which has both SCCS and RCS installed, and like everything else in contrib it is unsupported (your mileage may vary).

    From PVCS

    There is a script in the ‘contrib’ directory of the CVS source distribution called ‘pvcs_to_rcs’ which converts PVCS archives to RCS files. You must run it on a machine which has both PVCS and RCS installed, and like everything else in contrib it is unsupported (your mileage may vary). See the comments in the script for details.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.1.3 Creating a directory tree from scratch

    For a new project, the easiest thing to do is probably to create an empty directory structure, like this:

     
    $ mkdir tc
    $ mkdir tc/man
    $ mkdir tc/testing
    

    After that, you use the import command to create the corresponding (empty) directory structure inside the repository:

     
    $ cd tc
    $ cvs import -m "Created directory structure" yoyodyne/dir yoyo start
    

    Then, use add to add files (and new directories) as they appear.

    Check that the permissions CVS sets on the directories inside $CVSROOT are reasonable.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.2 Defining the module

    The next step is to define the module in the ‘modules’ file. This is not strictly necessary, but modules can be convenient in grouping together related files and directories.

    In simple cases these steps are sufficient to define a module.

    1. Get a working copy of the modules file.
       
      $ cvs checkout CVSROOT/modules
      $ cd CVSROOT
      
    2. Edit the file and insert a line that defines the module. See section The administrative files, for an introduction. See section The modules file, for a full description of the modules file. You can use the following line to define the module ‘tc’:
       
      tc   yoyodyne/tc
      
    3. Commit your changes to the modules file.
       
      $ cvs commit -m "Added the tc module." modules
      
    4. Release the modules module.
       
      $ cd ..
      $ cvs release -d CVSROOT
      

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/ccvs/cvs_5.html0000644000175000017500000013321311264347121023307 0ustar flichtenheldflichtenheld CVS—Concurrent Versions System v4.2: 5. Branching and merging
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5. Branching and merging

    CVS allows you to isolate changes onto a separate line of development, known as a branch. When you change files on a branch, those changes do not appear on the main trunk or other branches.

    Later you can move changes from one branch to another branch (or the main trunk) by merging. Merging involves first running cvs update -j, to merge the changes into the working directory. You can then commit that revision, and thus effectively copy the changes onto another branch.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.1 What branches are good for

    Suppose that release 1.0 of tc has been made. You are continuing to develop tc, planning to create release 1.1 in a couple of months. After a while your customers start to complain about a fatal bug. You check out release 1.0 (see section Tags–Symbolic revisions) and find the bug (which turns out to have a trivial fix). However, the current revision of the sources are in a state of flux and are not expected to be stable for at least another month. There is no way to make a bugfix release based on the newest sources.

    The thing to do in a situation like this is to create a branch on the revision trees for all the files that make up release 1.0 of tc. You can then make modifications to the branch without disturbing the main trunk. When the modifications are finished you can elect to either incorporate them on the main trunk, or leave them on the branch.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.2 Creating a branch

    You can create a branch with tag -b; for example, assuming you’re in a working copy:

     
    $ cvs tag -b rel-1-0-patches
    

    This splits off a branch based on the current revisions in the working copy, assigning that branch the name ‘rel-1-0-patches’.

    It is important to understand that branches get created in the repository, not in the working copy. Creating a branch based on current revisions, as the above example does, will not automatically switch the working copy to be on the new branch. For information on how to do that, see Accessing branches.

    You can also create a branch without reference to any working copy, by using rtag:

     
    $ cvs rtag -b -r rel-1-0 rel-1-0-patches tc
    

    -r rel-1-0’ says that this branch should be rooted at the revision that corresponds to the tag ‘rel-1-0’. It need not be the most recent revision – it’s often useful to split a branch off an old revision (for example, when fixing a bug in a past release otherwise known to be stable).

    As with ‘tag’, the ‘-b’ flag tells rtag to create a branch (rather than just a symbolic revision name). Note that the numeric revision number that matches ‘rel-1-0’ will probably be different from file to file.

    So, the full effect of the command is to create a new branch – named ‘rel-1-0-patches’ – in module ‘tc’, rooted in the revision tree at the point tagged by ‘rel-1-0’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.3 Accessing branches

    You can retrieve a branch in one of two ways: by checking it out fresh from the repository, or by switching an existing working copy over to the branch.

    To check out a branch from the repository, invoke ‘checkout’ with the ‘-r’ flag, followed by the tag name of the branch (see section Creating a branch):

     
    $ cvs checkout -r rel-1-0-patches tc
    

    Or, if you already have a working copy, you can switch it to a given branch with ‘update -r’:

     
    $ cvs update -r rel-1-0-patches tc
    

    or equivalently:

     
    $ cd tc
    $ cvs update -r rel-1-0-patches
    

    It does not matter if the working copy was originally on the main trunk or on some other branch – the above command will switch it to the named branch. And similarly to a regular ‘update’ command, ‘update -r’ merges any changes you have made, notifying you of conflicts where they occur.

    Once you have a working copy tied to a particular branch, it remains there until you tell it otherwise. This means that changes checked in from the working copy will add new revisions on that branch, while leaving the main trunk and other branches unaffected.

    To find out what branch a working copy is on, you can use the ‘status’ command. In its output, look for the field named ‘Sticky tag’ (see section Sticky tags) – that’s CVS’s way of telling you the branch, if any, of the current working files:

     
    $ cvs status -v driver.c backend.c
    ===================================================================
    File: driver.c          Status: Up-to-date
    
        Version:            1.7     Sat Dec  5 18:25:54 1992
        RCS Version:        1.7     /u/cvsroot/yoyodyne/tc/driver.c,v
        Sticky Tag:         rel-1-0-patches (branch: 1.7.2)
        Sticky Date:        (none)
        Sticky Options:     (none)
    
        Existing Tags:
            rel-1-0-patches             (branch: 1.7.2)
            rel-1-0                     (revision: 1.7)
    
    ===================================================================
    File: backend.c         Status: Up-to-date
    
        Version:            1.4     Tue Dec  1 14:39:01 1992
        RCS Version:        1.4     /u/cvsroot/yoyodyne/tc/backend.c,v
        Sticky Tag:         rel-1-0-patches (branch: 1.4.2)
        Sticky Date:        (none)
        Sticky Options:     (none)
    
        Existing Tags:
            rel-1-0-patches             (branch: 1.4.2)
            rel-1-0                     (revision: 1.4)
            rel-0-4                     (revision: 1.4)
    
    

    Don’t be confused by the fact that the branch numbers for each file are different (‘1.7.2’ and ‘1.4.2’ respectively). The branch tag is the same, ‘rel-1-0-patches’, and the files are indeed on the same branch. The numbers simply reflect the point in each file’s revision history at which the branch was made. In the above example, one can deduce that ‘driver.c’ had been through more changes than ‘backend.c’ before this branch was created.

    See Branches and revisions for details about how branch numbers are constructed.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.4 Branches and revisions

    Ordinarily, a file’s revision history is a linear series of increments (see section Revision numbers):

     
           +-----+    +-----+    +-----+    +-----+    +-----+
           ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 !
           +-----+    +-----+    +-----+    +-----+    +-----+
    

    However, CVS is not limited to linear development. The revision tree can be split into branches, where each branch is a self-maintained line of development. Changes made on one branch can easily be moved back to the main trunk.

    Each branch has a branch number, consisting of an odd number of period-separated decimal integers. The branch number is created by appending an integer to the revision number where the corresponding branch forked off. Having branch numbers allows more than one branch to be forked off from a certain revision.

    All revisions on a branch have revision numbers formed by appending an ordinal number to the branch number. The following figure illustrates branching with an example.

     
                                                          +-------------+
                               Branch 1.2.2.3.2 ->        ! 1.2.2.3.2.1 !
                                                        / +-------------+
                                                       /
                                                      /
                     +---------+    +---------+    +---------+
    Branch 1.2.2 -> _! 1.2.2.1 !----! 1.2.2.2 !----! 1.2.2.3 !
                   / +---------+    +---------+    +---------+
                  /
                 /
    +-----+    +-----+    +-----+    +-----+    +-----+
    ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 !  <- The main trunk
    +-----+    +-----+    +-----+    +-----+    +-----+
                    !
                    !
                    !   +---------+    +---------+    +---------+
    Branch 1.2.4 -> +---! 1.2.4.1 !----! 1.2.4.2 !----! 1.2.4.3 !
                        +---------+    +---------+    +---------+
    
    

    The exact details of how the branch number is constructed is not something you normally need to be concerned about, but here is how it works: When CVS creates a branch number it picks the first unused even integer, starting with 2. So when you want to create a branch from revision 6.4 it will be numbered 6.4.2. All branch numbers ending in a zero (such as 6.4.0) are used internally by CVS (see section Magic branch numbers). The branch 1.1.1 has a special meaning. See section Tracking third-party sources.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.5 Magic branch numbers

    This section describes a CVS feature called magic branches. For most purposes, you need not worry about magic branches; CVS handles them for you. However, they are visible to you in certain circumstances, so it may be useful to have some idea of how it works.

    Externally, branch numbers consist of an odd number of dot-separated decimal integers. See section Revision numbers. That is not the whole truth, however. For efficiency reasons CVS sometimes inserts an extra 0 in the second rightmost position (1.2.4 becomes 1.2.0.4, 8.9.10.11.12 becomes 8.9.10.11.0.12 and so on).

    CVS does a pretty good job at hiding these so called magic branches, but in a few places the hiding is incomplete:

    • The magic branch number appears in the output from cvs log.
    • You cannot specify a symbolic branch name to cvs admin.

    You can use the admin command to reassign a symbolic name to a branch the way RCS expects it to be. If R4patches is assigned to the branch 1.4.2 (magic branch number 1.4.0.2) in file ‘numbers.c’ you can do this:

     
    $ cvs admin -NR4patches:1.4.2 numbers.c
    

    It only works if at least one revision is already committed on the branch. Be very careful so that you do not assign the tag to the wrong number. (There is no way to see how the tag was assigned yesterday).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.6 Merging an entire branch

    You can merge changes made on a branch into your working copy by giving the ‘-j branchname’ flag to the update subcommand. With one ‘-j branchname’ option it merges the changes made between the greatest common ancestor (GCA) of the branch and the destination revision (in the simple case below the GCA is the point where the branch forked) and the newest revision on that branch into your working copy.

    The ‘-j’ stands for “join”.

    Consider this revision tree:

     
    +-----+    +-----+    +-----+    +-----+
    ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !      <- The main trunk
    +-----+    +-----+    +-----+    +-----+
                    !
                    !
                    !   +---------+    +---------+
    Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 !
                        +---------+    +---------+
    

    The branch 1.2.2 has been given the tag (symbolic name) ‘R1fix’. The following example assumes that the module ‘mod’ contains only one file, ‘m.c’.

     
    $ cvs checkout mod               # Retrieve the latest revision, 1.4
    
    $ cvs update -j R1fix m.c        # Merge all changes made on the branch,
                                     # i.e. the changes between revision 1.2
                                     # and 1.2.2.2, into your working copy
                                     # of the file.
    
    $ cvs commit -m "Included R1fix" # Create revision 1.5.
    

    A conflict can result from a merge operation. If that happens, you should resolve it before committing the new revision. See section Conflicts example.

    If your source files contain keywords (see section Keyword substitution), you might be getting more conflicts than strictly necessary. See Merging and keywords, for information on how to avoid this.

    The checkout command also supports the ‘-j branchname’ flag. The same effect as above could be achieved with this:

     
    $ cvs checkout -j R1fix mod
    $ cvs commit -m "Included R1fix"
    

    It should be noted that update -j tagname will also work but may not produce the desired result. See section Merging can add or remove files, for more.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.7 Merging from a branch several times

    Continuing our example, the revision tree now looks like this:

     
    +-----+    +-----+    +-----+    +-----+    +-----+
    ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 !   <- The main trunk
    +-----+    +-----+    +-----+    +-----+    +-----+
                    !                           *
                    !                          *
                    !   +---------+    +---------+
    Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 !
                        +---------+    +---------+
    

    where the starred line represents the merge from the ‘R1fix’ branch to the main trunk, as just discussed.

    Now suppose that development continues on the ‘R1fix’ branch:

     
    +-----+    +-----+    +-----+    +-----+    +-----+
    ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 !   <- The main trunk
    +-----+    +-----+    +-----+    +-----+    +-----+
                    !                           *
                    !                          *
                    !   +---------+    +---------+    +---------+
    Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 !----! 1.2.2.3 !
                        +---------+    +---------+    +---------+
    

    and then you want to merge those new changes onto the main trunk. If you just use the cvs update -j R1fix m.c command again, CVS will attempt to merge again the changes which you have already merged, which can have undesirable side effects.

    So instead you need to specify that you only want to merge the changes on the branch which have not yet been merged into the trunk. To do that you specify two ‘-j’ options, and CVS merges the changes from the first revision to the second revision. For example, in this case the simplest way would be

     
    cvs update -j 1.2.2.2 -j R1fix m.c    # Merge changes from 1.2.2.2 to the
                                          # head of the R1fix branch
    

    The problem with this is that you need to specify the 1.2.2.2 revision manually. A slightly better approach might be to use the date the last merge was done:

     
    cvs update -j R1fix:yesterday -j R1fix m.c
    

    Better yet, tag the R1fix branch after every merge into the trunk, and then use that tag for subsequent merges:

     
    cvs update -j merged_from_R1fix_to_trunk -j R1fix m.c
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.8 Merging differences between any two revisions

    With two ‘-j revision’ flags, the update (and checkout) command can merge the differences between any two revisions into your working file.

     
    $ cvs update -j 1.5 -j 1.3 backend.c
    

    will undo all changes made between revision 1.3 and 1.5. Note the order of the revisions!

    If you try to use this option when operating on multiple files, remember that the numeric revisions will probably be very different between the various files. You almost always use symbolic tags rather than revision numbers when operating on multiple files.

    Specifying two ‘-j’ options can also undo file removals or additions. For example, suppose you have a file named ‘file1’ which existed as revision 1.1, and you then removed it (thus adding a dead revision 1.2). Now suppose you want to add it again, with the same contents it had previously. Here is how to do it:

     
    $ cvs update -j 1.2 -j 1.1 file1
    U file1
    $ cvs commit -m test
    Checking in file1;
    /tmp/cvs-sanity/cvsroot/first-dir/file1,v  <--  file1
    new revision: 1.3; previous revision: 1.2
    done
    $
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.9 Merging can add or remove files

    If the changes which you are merging involve removing or adding some files, update -j will reflect such additions or removals.

    For example:

     
    cvs update -A
    touch a b c
    cvs add a b c ; cvs ci -m "added" a b c
    cvs tag -b branchtag
    cvs update -r branchtag
    touch d ; cvs add d
    rm a ; cvs rm a
    cvs ci -m "added d, removed a"
    cvs update -A
    cvs update -jbranchtag
    

    After these commands are executed and a ‘cvs commit’ is done, file ‘a’ will be removed and file ‘d’ added in the main branch.

    Note that using a single static tag (‘-j tagname’) rather than a dynamic tag (‘-j branchname’) to merge changes from a branch will usually not remove files which were removed on the branch since CVS does not automatically add static tags to dead revisions. The exception to this rule occurs when a static tag has been attached to a dead revision manually. Use the branch tag to merge all changes from the branch or use two static tags as merge endpoints to be sure that all intended changes are propagated in the merge.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    5.10 Merging and keywords

    If you merge files containing keywords (see section Keyword substitution), you will normally get numerous conflicts during the merge, because the keywords are expanded differently in the revisions which you are merging.

    Therefore, you will often want to specify the ‘-kk’ (see section Substitution modes) switch to the merge command line. By substituting just the name of the keyword, not the expanded value of that keyword, this option ensures that the revisions which you are merging will be the same as each other, and avoid spurious conflicts.

    For example, suppose you have a file like this:

     
           +---------+
          _! 1.1.2.1 !   <-  br1
         / +---------+
        /
       /
    +-----+    +-----+
    ! 1.1 !----! 1.2 !
    +-----+    +-----+
    

    and your working directory is currently on the trunk (revision 1.2). Then you might get the following results from a merge:

     
    $ cat file1
    key $Revision: 1.2 $
    . . .
    $ cvs update -j br1
    U file1
    RCS file: /cvsroot/first-dir/file1,v
    retrieving revision 1.1
    retrieving revision 1.1.2.1
    Merging differences between 1.1 and 1.1.2.1 into file1
    rcsmerge: warning: conflicts during merge
    $ cat file1
    <<<<<<< file1
    key $Revision: 1.2 $
    =======
    key $Revision: 1.1.2.1 $
    >>>>>>> 1.1.2.1
    . . .
    

    What happened was that the merge tried to merge the differences between 1.1 and 1.1.2.1 into your working directory. So, since the keyword changed from Revision: 1.1 to Revision: 1.1.2.1, CVS tried to merge that change into your working directory, which conflicted with the fact that your working directory had contained Revision: 1.2.

    Here is what happens if you had used ‘-kk’:

     
    $ cat file1
    key $Revision: 1.2 $
    . . .
    $ cvs update -kk -j br1
    U file1
    RCS file: /cvsroot/first-dir/file1,v
    retrieving revision 1.1
    retrieving revision 1.1.2.1
    Merging differences between 1.1 and 1.1.2.1 into file1
    $ cat file1
    key $Revision$
    . . .
    

    What is going on here is that revision 1.1 and 1.1.2.1 both expand as plain Revision, and therefore merging the changes between them into the working directory need not change anything. Therefore, there is no conflict.

    WARNING: In versions of CVS prior to 1.12.2, there was a major problem with using ‘-kk’ on merges. Namely, ‘-kk’ overrode any default keyword expansion mode set in the archive file in the repository. This could, unfortunately for some users, cause data corruption in binary files (with a default keyword expansion mode set to ‘-kb’). Therefore, when a repository contained binary files, conflicts had to be dealt with manually rather than using ‘-kk’ in a merge command.

    In CVS version 1.12.2 and later, the keyword expansion mode provided on the command line to any CVS command no longer overrides the ‘-kb’ keyword expansion mode setting for binary files, though it will still override other default keyword expansion modes. You can now safely merge using ‘-kk’ to avoid spurious conflicts on lines containing RCS keywords, even when your repository contains binary files.


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/ccvs/cvs_ovr.html0000644000175000017500000001316011264347121023747 0ustar flichtenheldflichtenheld CVS—Concurrent Versions System v4.2: Short Table of Contents
    [Top] [Contents] [Index] [ ? ]

    Short Table of Contents


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/ccvs/cvs_10.html0000644000175000017500000015523411264347121023372 0ustar flichtenheldflichtenheld CVS—Concurrent Versions System v4.2: 10. Multiple developers
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    10. Multiple developers

    When more than one person works on a software project things often get complicated. Often, two people try to edit the same file simultaneously. One solution, known as file locking or reserved checkouts, is to allow only one person to edit each file at a time. This is the only solution with some version control systems, including RCS and SCCS. Currently the usual way to get reserved checkouts with CVS is the cvs admin -l command (see section admin options). This is not as nicely integrated into CVS as the watch features, described below, but it seems that most people with a need for reserved checkouts find it adequate. It also may be possible to use the watches features described below, together with suitable procedures (not enforced by software), to avoid having two people edit at the same time.

    The default model with CVS is known as unreserved checkouts. In this model, developers can edit their own working copy of a file simultaneously. The first person that commits his changes has no automatic way of knowing that another has started to edit it. Others will get an error message when they try to commit the file. They must then use CVS commands to bring their working copy up to date with the repository revision. This process is almost automatic.

    CVS also supports mechanisms which facilitate various kinds of communication, without actually enforcing rules like reserved checkouts do.

    The rest of this chapter describes how these various models work, and some of the issues involved in choosing between them.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    10.1 File status

    Based on what operations you have performed on a checked out file, and what operations others have performed to that file in the repository, one can classify a file in a number of states. The states, as reported by the status command, are:

    Up-to-date

    The file is identical with the latest revision in the repository for the branch in use.

    Locally Modified

    You have edited the file, and not yet committed your changes.

    Locally Added

    You have added the file with add, and not yet committed your changes.

    Locally Removed

    You have removed the file with remove, and not yet committed your changes.

    Needs Checkout

    Someone else has committed a newer revision to the repository. The name is slightly misleading; you will ordinarily use update rather than checkout to get that newer revision.

    Needs Patch

    Like Needs Checkout, but the CVS server will send a patch rather than the entire file. Sending a patch or sending an entire file accomplishes the same thing.

    Needs Merge

    Someone else has committed a newer revision to the repository, and you have also made modifications to the file.

    Unresolved Conflict

    A file with the same name as this new file has been added to the repository from a second workspace. This file will need to be moved out of the way to allow an update to complete.

    File had conflicts on merge

    This is like Locally Modified, except that a previous update command gave a conflict. If you have not already done so, you need to resolve the conflict as described in Conflicts example.

    Unknown

    CVS doesn’t know anything about this file. For example, you have created a new file and have not run add.

    To help clarify the file status, status also reports the Working revision which is the revision that the file in the working directory derives from, and the Repository revision which is the latest revision in the repository for the branch in use.

    The options to status are listed in Quick reference to CVS commands. For information on its Sticky tag and Sticky date output, see Sticky tags. For information on its Sticky options output, see the ‘-k’ option in update options.

    You can think of the status and update commands as somewhat complementary. You use update to bring your files up to date, and you can use status to give you some idea of what an update would do (of course, the state of the repository might change before you actually run update). In fact, if you want a command to display file status in a more brief format than is displayed by the status command, you can invoke

     
    $ cvs -n -q update
    

    The ‘-n’ option means to not actually do the update, but merely to display statuses; the ‘-q’ option avoids printing the name of each directory. For more information on the update command, and these options, see Quick reference to CVS commands.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    10.2 Bringing a file up to date

    When you want to update or merge a file, use the update command. For files that are not up to date this is roughly equivalent to a checkout command: the newest revision of the file is extracted from the repository and put in your working directory.

    Your modifications to a file are never lost when you use update. If no newer revision exists, running update has no effect. If you have edited the file, and a newer revision is available, CVS will merge all changes into your working copy.

    For instance, imagine that you checked out revision 1.4 and started editing it. In the meantime someone else committed revision 1.5, and shortly after that revision 1.6. If you run update on the file now, CVS will incorporate all changes between revision 1.4 and 1.6 into your file.

    If any of the changes between 1.4 and 1.6 were made too close to any of the changes you have made, an overlap occurs. In such cases a warning is printed, and the resulting file includes both versions of the lines that overlap, delimited by special markers. See section update—Bring work tree in sync with repository, for a complete description of the update command.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    10.3 Conflicts example

    Suppose revision 1.4 of ‘driver.c’ contains this:

     
    #include <stdio.h>
    
    void main()
    {
        parse();
        if (nerr == 0)
            gencode();
        else
            fprintf(stderr, "No code generated.\n");
        exit(nerr == 0 ? 0 : 1);
    }
    

    Revision 1.6 of ‘driver.c’ contains this:

     
    #include <stdio.h>
    
    int main(int argc,
             char **argv)
    {
        parse();
        if (argc != 1)
        {
            fprintf(stderr, "tc: No args expected.\n");
            exit(1);
        }
        if (nerr == 0)
            gencode();
        else
            fprintf(stderr, "No code generated.\n");
        exit(!!nerr);
    }
    

    Your working copy of ‘driver.c’, based on revision 1.4, contains this before you run ‘cvs update’:

     
    #include <stdlib.h>
    #include <stdio.h>
    
    void main()
    {
        init_scanner();
        parse();
        if (nerr == 0)
            gencode();
        else
            fprintf(stderr, "No code generated.\n");
        exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
    }
    

    You run ‘cvs update’:

     
    $ cvs update driver.c
    RCS file: /usr/local/cvsroot/yoyodyne/tc/driver.c,v
    retrieving revision 1.4
    retrieving revision 1.6
    Merging differences between 1.4 and 1.6 into driver.c
    rcsmerge warning: overlaps during merge
    cvs update: conflicts found in driver.c
    C driver.c
    

    CVS tells you that there were some conflicts. Your original working file is saved unmodified in ‘.#driver.c.1.4’. The new version of ‘driver.c’ contains this:

     
    #include <stdlib.h>
    #include <stdio.h>
    
    int main(int argc,
             char **argv)
    {
        init_scanner();
        parse();
        if (argc != 1)
        {
            fprintf(stderr, "tc: No args expected.\n");
            exit(1);
        }
        if (nerr == 0)
            gencode();
        else
            fprintf(stderr, "No code generated.\n");
    <<<<<<< driver.c
        exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
    =======
        exit(!!nerr);
    >>>>>>> 1.6
    }
    

    Note how all non-overlapping modifications are incorporated in your working copy, and that the overlapping section is clearly marked with ‘<<<<<<<’, ‘=======’ and ‘>>>>>>>’.

    You resolve the conflict by editing the file, removing the markers and the erroneous line. Suppose you end up with this file:

     
    #include <stdlib.h>
    #include <stdio.h>
    
    int main(int argc,
             char **argv)
    {
        init_scanner();
        parse();
        if (argc != 1)
        {
            fprintf(stderr, "tc: No args expected.\n");
            exit(1);
        }
        if (nerr == 0)
            gencode();
        else
            fprintf(stderr, "No code generated.\n");
        exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
    }
    

    You can now go ahead and commit this as revision 1.7.

     
    $ cvs commit -m "Initialize scanner. Use symbolic exit values." driver.c
    Checking in driver.c;
    /usr/local/cvsroot/yoyodyne/tc/driver.c,v  <--  driver.c
    new revision: 1.7; previous revision: 1.6
    done
    

    For your protection, CVS will refuse to check in a file if a conflict occurred and you have not resolved the conflict. Currently to resolve a conflict, you must change the timestamp on the file. In previous versions of CVS, you also needed to insure that the file contains no conflict markers. Because your file may legitimately contain conflict markers (that is, occurrences of ‘>>>>>>> ’ at the start of a line that don’t mark a conflict), the current version of CVS will print a warning and proceed to check in the file.

    If you use release 1.04 or later of pcl-cvs (a GNU Emacs front-end for CVS) you can use an Emacs package called emerge to help you resolve conflicts. See the documentation for pcl-cvs.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    10.4 Informing others about commits

    It is often useful to inform others when you commit a new revision of a file. The ‘-i’ option of the ‘modules’ file, or the ‘loginfo’ file, can be used to automate this process. See section The modules file. See section Loginfo. You can use these features of CVS to, for instance, instruct CVS to mail a message to all developers, or post a message to a local newsgroup.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    10.5 Several developers simultaneously attempting to run CVS

    If several developers try to run CVS at the same time, one may get the following message:

     
    [11:43:23] waiting for bach's lock in /usr/local/cvsroot/foo
    

    CVS will try again every 30 seconds, and either continue with the operation or print the message again, if it still needs to wait. If a lock seems to stick around for an undue amount of time, find the person holding the lock and ask them about the cvs command they are running. If they aren’t running a cvs command, look in the repository directory mentioned in the message and remove files which they own whose names start with ‘#cvs.rfl’, ‘#cvs.wfl’, or ‘#cvs.lock’.

    Note that these locks are to protect CVS’s internal data structures and have no relationship to the word lock in the sense used by RCS—which refers to reserved checkouts (see section Multiple developers).

    Any number of people can be reading from a given repository at a time; only when someone is writing do the locks prevent other people from reading or writing.

    One might hope for the following property:

    If someone commits some changes in one cvs command, then an update by someone else will either get all the changes, or none of them.

    but CVS does not have this property. For example, given the files

     
    a/one.c
    a/two.c
    b/three.c
    b/four.c
    

    if someone runs

     
    cvs ci a/two.c b/three.c
    

    and someone else runs cvs update at the same time, the person running update might get only the change to ‘b/three.c’ and not the change to ‘a/two.c’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    10.6 Mechanisms to track who is editing files

    For many groups, use of CVS in its default mode is perfectly satisfactory. Users may sometimes go to check in a modification only to find that another modification has intervened, but they deal with it and proceed with their check in. Other groups prefer to be able to know who is editing what files, so that if two people try to edit the same file they can choose to talk about who is doing what when rather than be surprised at check in time. The features in this section allow such coordination, while retaining the ability of two developers to edit the same file at the same time.

    For maximum benefit developers should use cvs edit (not chmod) to make files read-write to edit them, and cvs release (not rm) to discard a working directory which is no longer in use, but CVS is not able to enforce this behavior.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    10.6.1 Telling CVS to watch certain files

    To enable the watch features, you first specify that certain files are to be watched.

    Command: cvs watch on [-lR] [files]…

    Specify that developers should run cvs edit before editing files. CVS will create working copies of files read-only, to remind developers to run the cvs edit command before working on them.

    If files includes the name of a directory, CVS arranges to watch all files added to the corresponding repository directory, and sets a default for files added in the future; this allows the user to set notification policies on a per-directory basis. The contents of the directory are processed recursively, unless the -l option is given. The -R option can be used to force recursion if the -l option is set in ‘~/.cvsrc’ (see section Default options and the ~/.cvsrc file).

    If files is omitted, it defaults to the current directory.

    Command: cvs watch off [-lR] [files]…

    Do not create files read-only on checkout; thus, developers will not be reminded to use cvs edit and cvs unedit.

    The files and options are processed as for cvs watch on.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    10.6.2 Telling CVS to notify you

    You can tell CVS that you want to receive notifications about various actions taken on a file. You can do this without using cvs watch on for the file, but generally you will want to use cvs watch on, to remind developers to use the cvs edit command.

    Command: cvs watch add [-lR] [-a action]… [files]…

    Add the current user to the list of people to receive notification of work done on files.

    The -a option specifies what kinds of events CVS should notify the user about. action is one of the following:

    edit

    Another user has applied the cvs edit command (described below) to a watched file.

    commit

    Another user has committed changes to one of the named files.

    unedit

    Another user has abandoned editing a file (other than by committing changes). They can do this in several ways, by:

    • applying the cvs unedit command (described below) to the file
    • applying the cvs release command (see section release—Indicate that a Module is no longer in use) to the file’s parent directory (or recursively to a directory more than one level up)
    • deleting the file and allowing cvs update to recreate it
    all

    All of the above.

    none

    None of the above. (This is useful with cvs edit, described below.)

    The -a option may appear more than once, or not at all. If omitted, the action defaults to all.

    The files and options are processed as for cvs watch on.

    Command: cvs watch remove [-lR] [-a action]… [files]…

    Remove a notification request established using cvs watch add; the arguments are the same. If the -a option is present, only watches for the specified actions are removed.

    When the conditions exist for notification, CVS calls the ‘notify’ administrative file. Edit ‘notify’ as one edits the other administrative files (see section The administrative files). This file follows the usual conventions for administrative files (see section The common syntax), where each line is a regular expression followed by a command to execute. The command should contain a single occurrence of ‘%s’ which will be replaced by the user to notify; the rest of the information regarding the notification will be supplied to the command on standard input. The standard thing to put in the notify file is the single line:

     
    ALL mail %s -s "CVS notification"
    

    This causes users to be notified by electronic mail.

    Note that if you set this up in the straightforward way, users receive notifications on the server machine. One could of course write a ‘notify’ script which directed notifications elsewhere, but to make this easy, CVS allows you to associate a notification address for each user. To do so create a file ‘users’ in ‘CVSROOT’ with a line for each user in the format user:value. Then instead of passing the name of the user to be notified to ‘notify’, CVS will pass the value (normally an email address on some other machine).

    CVS does not notify you for your own changes. Currently this check is done based on whether the user name of the person taking the action which triggers notification matches the user name of the person getting notification. In fact, in general, the watches features only track one edit by each user. It probably would be more useful if watches tracked each working directory separately, so this behavior might be worth changing.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    10.6.3 How to edit a file which is being watched

    Since a file which is being watched is checked out read-only, you cannot simply edit it. To make it read-write, and inform others that you are planning to edit it, use the cvs edit command. Some systems call this a checkout, but CVS uses that term for obtaining a copy of the sources (see section Getting the source), an operation which those systems call a get or a fetch.

    Command: cvs edit [-lR] [-a action]… [files]…

    Prepare to edit the working files files. CVS makes the files read-write, and notifies users who have requested edit notification for any of files.

    The cvs edit command accepts the same options as the cvs watch add command, and establishes a temporary watch for the user on files; CVS will remove the watch when files are unedited or committed. If the user does not wish to receive notifications, she should specify -a none.

    The files and the options are processed as for the cvs watch commands.

    Normally when you are done with a set of changes, you use the cvs commit command, which checks in your changes and returns the watched files to their usual read-only state. But if you instead decide to abandon your changes, or not to make any changes, you can use the cvs unedit command.

    Command: cvs unedit [-lR] [files]…

    Abandon work on the working files files, and revert them to the repository versions on which they are based. CVS makes those files read-only for which users have requested notification using cvs watch on. CVS notifies users who have requested unedit notification for any of files.

    The files and options are processed as for the cvs watch commands.

    If watches are not in use, the unedit command probably does not work, and the way to revert to the repository version is with the command cvs update -C file (see section update—Bring work tree in sync with repository). The meaning is not precisely the same; the latter may also bring in some changes which have been made in the repository since the last time you updated.

    When using client/server CVS, you can use the cvs edit and cvs unedit commands even if CVS is unable to successfully communicate with the server; the notifications will be sent upon the next successful CVS command.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    10.6.4 Information about who is watching and editing

    Command: cvs watchers [-lR] [files]…

    List the users currently watching changes to files. The report includes the files being watched, and the mail address of each watcher.

    The files and options are processed as for the cvs watch commands.

    Command: cvs editors [-lR] [files]…

    List the users currently working on files. The report includes the mail address of each user, the time when the user began working with the file, and the host and path of the working directory containing the file.

    The files and options are processed as for the cvs watch commands.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    10.6.5 Using watches with old versions of CVS

    If you use the watch features on a repository, it creates ‘CVS’ directories in the repository and stores the information about watches in that directory. If you attempt to use CVS 1.6 or earlier with the repository, you get an error message such as the following (all on one line):

     
    cvs update: cannot open CVS/Entries for reading:
    No such file or directory
    

    and your operation will likely be aborted. To use the watch features, you must upgrade all copies of CVS which use that repository in local or server mode. If you cannot upgrade, use the watch off and watch remove commands to remove all watches, and that will restore the repository to a state which CVS 1.6 can cope with.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    10.7 Choosing between reserved or unreserved checkouts

    Reserved and unreserved checkouts each have pros and cons. Let it be said that a lot of this is a matter of opinion or what works given different groups’ working styles, but here is a brief description of some of the issues. There are many ways to organize a team of developers. CVS does not try to enforce a certain organization. It is a tool that can be used in several ways.

    Reserved checkouts can be very counter-productive. If two persons want to edit different parts of a file, there may be no reason to prevent either of them from doing so. Also, it is common for someone to take out a lock on a file, because they are planning to edit it, but then forget to release the lock.

    People, especially people who are familiar with reserved checkouts, often wonder how often conflicts occur if unreserved checkouts are used, and how difficult they are to resolve. The experience with many groups is that they occur rarely and usually are relatively straightforward to resolve.

    The rarity of serious conflicts may be surprising, until one realizes that they occur only when two developers disagree on the proper design for a given section of code; such a disagreement suggests that the team has not been communicating properly in the first place. In order to collaborate under any source management regimen, developers must agree on the general design of the system; given this agreement, overlapping changes are usually straightforward to merge.

    In some cases unreserved checkouts are clearly inappropriate. If no merge tool exists for the kind of file you are managing (for example word processor files or files edited by Computer Aided Design programs), and it is not desirable to change to a program which uses a mergeable data format, then resolving conflicts is going to be unpleasant enough that you generally will be better off to simply avoid the conflicts instead, by using reserved checkouts.

    The watches features described above in Mechanisms to track who is editing files can be considered to be an intermediate model between reserved checkouts and unreserved checkouts. When you go to edit a file, it is possible to find out who else is editing it. And rather than having the system simply forbid both people editing the file, it can tell you what the situation is and let you figure out whether it is a problem in that particular case or not. Therefore, for some groups it can be considered the best of both the reserved checkout and unreserved checkout worlds.


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/ccvs/cvs_19.html0000644000175000017500000003317211264347121023377 0ustar flichtenheldflichtenheld CVS—Concurrent Versions System v4.2: D. All environment variables which affect CVS
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    D. All environment variables which affect CVS

    This is a complete list of all environment variables that affect CVS.

    $CVSIGNORE

    A whitespace-separated list of file name patterns that CVS should ignore. See section Ignoring files via cvsignore.

    $CVSWRAPPERS

    A whitespace-separated list of file name patterns that CVS should treat as wrappers. See section The cvswrappers file.

    $CVSREAD

    If this is set, checkout and update will try hard to make the files in your working directory read-only. When this is not set, the default behavior is to permit modification of your working files.

    $CVSREADONLYFS

    Turns on read-only repository mode. This allows one to check out from a read-only repository, such as within an anoncvs server, or from a CDROM repository.

    It has the same effect as if the ‘-R’ command-line option is used. This can also allow the use of read-only NFS repositories.

    $CVSUMASK

    Controls permissions of files in the repository. See File permissions.

    $CVSROOT

    Should contain the full pathname to the root of the CVS source repository (where the RCS files are kept). This information must be available to CVS for most commands to execute; if $CVSROOT is not set, or if you wish to override it for one invocation, you can supply it on the command line: ‘cvs -d cvsroot cvs_command…’ Once you have checked out a working directory, CVS stores the appropriate root (in the file ‘CVS/Root’), so normally you only need to worry about this when initially checking out a working directory.

    $CVSEDITOR
    $EDITOR
    $VISUAL

    Specifies the program to use for recording log messages during commit. $CVSEDITOR overrides $EDITOR, which overrides $VISUAL. See Committing your changes for more or Global options for alternative ways of specifying a log editor.

    $PATH

    If $RCSBIN is not set, and no path is compiled into CVS, it will use $PATH to try to find all programs it uses.

    $HOME
    $HOMEPATH
    $HOMEDRIVE

    Used to locate the directory where the ‘.cvsrc’ file, and other such files, are searched. On Unix, CVS just checks for HOME. On Windows NT, the system will set HOMEDRIVE, for example to ‘d:’ and HOMEPATH, for example to ‘\joe’. On Windows 95, you’ll probably need to set HOMEDRIVE and HOMEPATH yourself.

    $CVS_RSH

    Specifies the external program which CVS connects with, when :ext: access method is specified. see section Connecting with rsh.

    $CVS_SERVER

    Used in client-server mode when accessing a remote repository using RSH. It specifies the name of the program to start on the server side (and any necessary arguments) when accessing a remote repository using the :ext:, :fork:, or :server: access methods. The default value for :ext: and :server: is cvs; the default value for :fork: is the name used to run the client. see section Connecting with rsh

    $CVS_PASSFILE

    Used in client-server mode when accessing the cvs login server. Default value is ‘$HOME/.cvspass’. see section Using the client with password authentication

    $CVS_CLIENT_PORT

    Used in client-server mode to set the port to use when accessing the server via Kerberos, GSSAPI, or CVS’s password authentication protocol if the port is not specified in the CVSROOT. see section Remote repositories

    $CVS_RCMD_PORT

    Used in client-server mode. If set, specifies the port number to be used when accessing the RCMD demon on the server side. (Currently not used for Unix clients).

    $CVS_CLIENT_LOG

    Used for debugging only in client-server mode. If set, everything sent to the server is logged into ‘$CVS_CLIENT_LOG.in’ and everything sent from the server is logged into ‘$CVS_CLIENT_LOG.out’.

    $CVS_SERVER_SLEEP

    Used only for debugging the server side in client-server mode. If set, delays the start of the server child process the specified amount of seconds so that you can attach to it with a debugger.

    $CVS_IGNORE_REMOTE_ROOT

    For CVS 1.10 and older, setting this variable prevents CVS from overwriting the ‘CVS/Root’ file when the ‘-d’ global option is specified. Later versions of CVS do not rewrite ‘CVS/Root’, so CVS_IGNORE_REMOTE_ROOT has no effect.

    $CVS_LOCAL_BRANCH_NUM

    Setting this variable allows some control over the branch number that is assigned. This is specifically to support the local commit feature of CVSup. If one sets CVS_LOCAL_BRANCH_NUM to (say) 1000 then branches the local repository, the revision numbers will look like 1.66.1000.xx. There is almost a dead-set certainty that there will be no conflicts with version numbers.

    $COMSPEC

    Used under OS/2 only. It specifies the name of the command interpreter and defaults to CMD.EXE.

    $TMPDIR
    $TMP
    $TEMP

    Directory in which temporary files are located. The CVS server uses TMPDIR. See section Global options, for a description of how to specify this. Some parts of CVS will always use ‘/tmp’ (via the tmpnam function provided by the system).

    On Windows NT, TMP is used (via the _tempnam function provided by the system).

    The patch program which is used by the CVS client uses TMPDIR, and if it is not set, uses ‘/tmp’ (at least with GNU patch 2.1). Note that if your server and client are both running CVS 1.9.10 or later, CVS will not invoke an external patch program.

    $CVS_PID

    This is the process identification (aka pid) number of the CVS process. It is often useful in the programs and/or scripts specified by the ‘commitinfo’, ‘verifymsg’, ‘loginfo’ files.


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/ccvs/cvs_1.html0000644000175000017500000010236011264347121023302 0ustar flichtenheldflichtenheld CVS—Concurrent Versions System v4.2: 1. Overview
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Overview

    This chapter is for people who have never used CVS, and perhaps have never used version control software before.

    If you are already familiar with CVS and are just trying to learn a particular feature or remember a certain command, you can probably skip everything here.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 What is CVS?

    CVS is a version control system. Using it, you can record the history of your source files.

    For example, bugs sometimes creep in when software is modified, and you might not detect the bug until a long time after you make the modification. With CVS, you can easily retrieve old versions to see exactly which change caused the bug. This can sometimes be a big help.

    You could of course save every version of every file you have ever created. This would however waste an enormous amount of disk space. CVS stores all the versions of a file in a single file in a clever way that only stores the differences between versions.

    CVS also helps you if you are part of a group of people working on the same project. It is all too easy to overwrite each others’ changes unless you are extremely careful. Some editors, like GNU Emacs, try to make sure that the same file is never modified by two people at the same time. Unfortunately, if someone is using another editor, that safeguard will not work. CVS solves this problem by insulating the different developers from each other. Every developer works in his own directory, and CVS merges the work when each developer is done.

    CVS started out as a bunch of shell scripts written by Dick Grune, posted to the newsgroup comp.sources.unix in the volume 6 release of July, 1986. While no actual code from these shell scripts is present in the current version of CVS much of the CVS conflict resolution algorithms come from them.

    In April, 1989, Brian Berliner designed and coded CVS. Jeff Polk later helped Brian with the design of the CVS module and vendor branch support.

    You can get CVS in a variety of ways, including free download from the internet. For more information on downloading CVS and other CVS topics, see:

     
    http://www.cvshome.org/
    http://www.loria.fr/~molli/cvs-index.html
    

    There is a mailing list, known as info-cvs, devoted to CVS. To subscribe or unsubscribe write to info-cvs-request@gnu.org. If you prefer a usenet group, the right group is comp.software.config-mgmt which is for CVS discussions (along with other configuration management systems). In the future, it might be possible to create a comp.software.config-mgmt.cvs, but probably only if there is sufficient CVS traffic on comp.software.config-mgmt.

    You can also subscribe to the bug-cvs mailing list, described in more detail in Dealing with bugs in CVS or this manual. To subscribe send mail to bug-cvs-request@gnu.org.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2 What is CVS not?

    CVS can do a lot of things for you, but it does not try to be everything for everyone.

    CVS is not a build system.

    Though the structure of your repository and modules file interact with your build system (e.g. ‘Makefile’s), they are essentially independent.

    CVS does not dictate how you build anything. It merely stores files for retrieval in a tree structure you devise.

    CVS does not dictate how to use disk space in the checked out working directories. If you write your ‘Makefile’s or scripts in every directory so they have to know the relative positions of everything else, you wind up requiring the entire repository to be checked out.

    If you modularize your work, and construct a build system that will share files (via links, mounts, VPATH in ‘Makefile’s, etc.), you can arrange your disk usage however you like.

    But you have to remember that any such system is a lot of work to construct and maintain. CVS does not address the issues involved.

    Of course, you should place the tools created to support such a build system (scripts, ‘Makefile’s, etc) under CVS.

    Figuring out what files need to be rebuilt when something changes is, again, something to be handled outside the scope of CVS. One traditional approach is to use make for building, and use some automated tool for generating the dependencies which make uses.

    See How your build system interacts with CVS, for more information on doing builds in conjunction with CVS.

    CVS is not a substitute for management.

    Your managers and project leaders are expected to talk to you frequently enough to make certain you are aware of schedules, merge points, branch names and release dates. If they don’t, CVS can’t help.

    CVS is an instrument for making sources dance to your tune. But you are the piper and the composer. No instrument plays itself or writes its own music.

    CVS is not a substitute for developer communication.

    When faced with conflicts within a single file, most developers manage to resolve them without too much effort. But a more general definition of “conflict” includes problems too difficult to solve without communication between developers.

    CVS cannot determine when simultaneous changes within a single file, or across a whole collection of files, will logically conflict with one another. Its concept of a conflict is purely textual, arising when two changes to the same base file are near enough to spook the merge (i.e. diff3) command.

    CVS does not claim to help at all in figuring out non-textual or distributed conflicts in program logic.

    For example: Say you change the arguments to function X defined in file ‘A’. At the same time, someone edits file ‘B’, adding new calls to function X using the old arguments. You are outside the realm of CVS’s competence.

    Acquire the habit of reading specs and talking to your peers.

    CVS does not have change control

    Change control refers to a number of things. First of all it can mean bug-tracking, that is being able to keep a database of reported bugs and the status of each one (is it fixed? in what release? has the bug submitter agreed that it is fixed?). For interfacing CVS to an external bug-tracking system, see the ‘rcsinfo’ and ‘verifymsg’ files (see section Reference manual for Administrative files).

    Another aspect of change control is keeping track of the fact that changes to several files were in fact changed together as one logical change. If you check in several files in a single cvs commit operation, CVS then forgets that those files were checked in together, and the fact that they have the same log message is the only thing tying them together. Keeping a GNU style ‘ChangeLog’ can help somewhat.

    Another aspect of change control, in some systems, is the ability to keep track of the status of each change. Some changes have been written by a developer, others have been reviewed by a second developer, and so on. Generally, the way to do this with CVS is to generate a diff (using cvs diff or diff) and email it to someone who can then apply it using the patch utility. This is very flexible, but depends on mechanisms outside CVS to make sure nothing falls through the cracks.

    CVS is not an automated testing program

    It should be possible to enforce mandatory use of a testsuite using the commitinfo file. I haven’t heard a lot about projects trying to do that or whether there are subtle gotchas, however.

    CVS does not have a builtin process model

    Some systems provide ways to ensure that changes or releases go through various steps, with various approvals as needed. Generally, one can accomplish this with CVS but it might be a little more work. In some cases you’ll want to use the ‘commitinfo’, ‘loginfo’, ‘rcsinfo’, or ‘verifymsg’ files, to require that certain steps be performed before cvs will allow a checkin. Also consider whether features such as branches and tags can be used to perform tasks such as doing work in a development tree and then merging certain changes over to a stable tree only once they have been proven.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.3 A sample session

    As a way of introducing CVS, we’ll go through a typical work-session using CVS. The first thing to understand is that CVS stores all files in a centralized repository (see section The Repository); this section assumes that a repository is set up.

    Suppose you are working on a simple compiler. The source consists of a handful of C files and a ‘Makefile’. The compiler is called ‘tc’ (Trivial Compiler), and the repository is set up so that there is a module called ‘tc’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.3.1 Getting the source

    The first thing you must do is to get your own working copy of the source for ‘tc’. For this, you use the checkout command:

     
    $ cvs checkout tc
    

    This will create a new directory called ‘tc’ and populate it with the source files.

     
    $ cd tc
    $ ls
    CVS         Makefile    backend.c   driver.c    frontend.c  parser.c
    

    The ‘CVS’ directory is used internally by CVS. Normally, you should not modify or remove any of the files in it.

    You start your favorite editor, hack away at ‘backend.c’, and a couple of hours later you have added an optimization pass to the compiler. A note to RCS and SCCS users: There is no need to lock the files that you want to edit. See section Multiple developers, for an explanation.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.3.2 Committing your changes

    When you have checked that the compiler is still compilable you decide to make a new version of ‘backend.c’. This will store your new ‘backend.c’ in the repository and make it available to anyone else who is using that same repository.

     
    $ cvs commit backend.c
    

    CVS starts an editor, to allow you to enter a log message. You type in “Added an optimization pass.”, save the temporary file, and exit the editor.

    The environment variable $CVSEDITOR determines which editor is started. If $CVSEDITOR is not set, then if the environment variable $EDITOR is set, it will be used. If both $CVSEDITOR and $EDITOR are not set then there is a default which will vary with your operating system, for example vi for unix or notepad for Windows NT/95.

    In addition, CVS checks the $VISUAL environment variable. Opinions vary on whether this behavior is desirable and whether future releases of CVS should check $VISUAL or ignore it. You will be OK either way if you make sure that $VISUAL is either unset or set to the same thing as $EDITOR.

    When CVS starts the editor, it includes a list of files which are modified. For the CVS client, this list is based on comparing the modification time of the file against the modification time that the file had when it was last gotten or updated. Therefore, if a file’s modification time has changed but its contents have not, it will show up as modified. The simplest way to handle this is simply not to worry about it—if you proceed with the commit CVS will detect that the contents are not modified and treat it as an unmodified file. The next update will clue CVS in to the fact that the file is unmodified, and it will reset its stored timestamp so that the file will not show up in future editor sessions.

    If you want to avoid starting an editor you can specify the log message on the command line using the ‘-m’ flag instead, like this:

     
    $ cvs commit -m "Added an optimization pass" backend.c
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.3.3 Cleaning up

    Before you turn to other tasks you decide to remove your working copy of tc. One acceptable way to do that is of course

     
    $ cd ..
    $ rm -r tc
    

    but a better way is to use the release command (see section release—Indicate that a Module is no longer in use):

     
    $ cd ..
    $ cvs release -d tc
    M driver.c
    ? tc
    You have [1] altered files in this repository.
    Are you sure you want to release (and delete) directory `tc': n
    ** `release' aborted by user choice.
    

    The release command checks that all your modifications have been committed. If history logging is enabled it also makes a note in the history file. See section The history file.

    When you use the ‘-d’ flag with release, it also removes your working copy.

    In the example above, the release command wrote a couple of lines of output. ‘? tc’ means that the file ‘tc’ is unknown to CVS. That is nothing to worry about: ‘tc’ is the executable compiler, and it should not be stored in the repository. See section Ignoring files via cvsignore, for information about how to make that warning go away. See section release output, for a complete explanation of all possible output from release.

    M driver.c’ is more serious. It means that the file ‘driver.c’ has been modified since it was checked out.

    The release command always finishes by telling you how many modified files you have in your working copy of the sources, and then asks you for confirmation before deleting any files or making any note in the history file.

    You decide to play it safe and answer n <RET> when release asks for confirmation.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.3.4 Viewing differences

    You do not remember modifying ‘driver.c’, so you want to see what has happened to that file.

     
    $ cd tc
    $ cvs diff driver.c
    

    This command runs diff to compare the version of ‘driver.c’ that you checked out with your working copy. When you see the output you remember that you added a command line option that enabled the optimization pass. You check it in, and release the module.

     
    $ cvs commit -m "Added an optimization pass" driver.c
    Checking in driver.c;
    /usr/local/cvsroot/tc/driver.c,v  <--  driver.c
    new revision: 1.2; previous revision: 1.1
    done
    $ cd ..
    $ cvs release -d tc
    ? tc
    You have [0] altered files in this repository.
    Are you sure you want to release (and delete) directory `tc': y
    

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/ccvs/cvs_abt.html0000644000175000017500000001235611264347121023715 0ustar flichtenheldflichtenheld CVS—Concurrent Versions System v4.2: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/ccvs/cvs_28.html0000644000175000017500000007334311264347121023403 0ustar flichtenheldflichtenheld CVS—Concurrent Versions System v4.2: Index: T – Z
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Index: T – Z

    Jump to:   !   #   &   -   .   /   :   <   =   >   _  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   R   S   T   U   V   W   X   Z  
    Index Entry Section

    T
    tag (subcommand)4.5 Specifying what to tag from the working directory
    tag (subcommand), creating a branch using5.2 Creating a branch
    tag (subcommand), introduction4.4 Tags–Symbolic revisions
    Tag file, in CVS directory2.3 How data is stored in the working directory
    Tag programC.1.5 Module options
    taginfo8.3 User-defined logging
    Tags4.4 Tags–Symbolic revisions
    Tags, deleting4.7 Deleting, moving, and renaming tags
    Tags, example4.4 Tags–Symbolic revisions
    Tags, moving4.7 Deleting, moving, and renaming tags
    Tags, renaming4.7 Deleting, moving, and renaming tags
    Tags, retrieving old revisions4.4 Tags–Symbolic revisions
    Tags, sticky4.9 Sticky tags
    Tags, symbolic name4.4 Tags–Symbolic revisions
    tc, Trivial Compiler (example)1.3 A sample session
    Team of developers10. Multiple developers
    TEMP, environment variableD. All environment variables which affect CVS
    Template file, in CVS directory2.3 How data is stored in the working directory
    Template for log messageC.4 Rcsinfo
    Temporary directories, and server2.11 Temporary directories for the server
    Temporary files, location ofD. All environment variables which affect CVS
    Third-party sources13. Tracking third-party sources
    TimeA.5 Common command options
    Timezone, in inputA.5 Common command options
    Timezone, in outputA.13 log—Print out log information for files
    TMP, environment variableD. All environment variables which affect CVS
    TMPDIR, environment variableD. All environment variables which affect CVS
    TMPDIR, overridingA.4 Global options
    TopLevelAdmin, in CVSROOT/configC.9 The CVSROOT/config configuration file
    TraceA.4 Global options
    Traceability8. History browsing
    Tracking sources13. Tracking third-party sources
    Transactions, atomic, lack of10.5 Several developers simultaneously attempting to run CVS
    Trivial Compiler (example)1.3 A sample session
    Typical repository2. The Repository

    U
    Umask, for repository files2.2.2 File permissions
    Undoing a change5.8 Merging differences between any two revisions
    unedit (subcommand)10.6.3 How to edit a file which is being watched
    Unknown10.1 File status
    Unreserved checkouts10. Multiple developers
    Unresolved Conflict10.1 File status
    Up-to-date10.1 File status
    update (subcommand)A.16 update—Bring work tree in sync with repository
    Update, introduction10.2 Bringing a file up to date
    update, to display file status10.1 File status
    Updating a file10.2 Bringing a file up to date
    User aliases2.9.3.1 Setting up the server for password authentication
    User variablesC.8 Expansions in administrative files
    USER, environment variableC.8 Expansions in administrative files
    USER, internal variableC.8 Expansions in administrative files
    UserAdminOptions, in CVSROOT/configA.6 admin—Administration
    UserAdminOptions, in CVSROOT/configC.9 The CVSROOT/config configuration file
    users (admin file)10.6.2 Telling CVS to notify you

    V
    VariablesC.8 Expansions in administrative files
    Vendor13. Tracking third-party sources
    Vendor branch13. Tracking third-party sources
    verifymsg’ (admin file)C.3.3 Verifying log messages
    verifymsg’, changing the log messageC.3.3 Verifying log messages
    verifymsg’, changing the log messageC.9 The CVSROOT/config configuration file
    version (subcommand)B. Quick reference to CVS commands
    Versions, of CVSE. Compatibility between CVS Versions
    Versions, revisions and releases4.2 Versions, revisions and releases
    Viewing differences1.3.4 Viewing differences
    VISUAL, environment variable1.3.2 Committing your changes
    VISUAL, environment variableD. All environment variables which affect CVS
    VISUAL, internal variableC.8 Expansions in administrative files

    W
    watch add (subcommand)10.6.2 Telling CVS to notify you
    watch off (subcommand)10.6.1 Telling CVS to watch certain files
    watch on (subcommand)10.6.1 Telling CVS to watch certain files
    watch remove (subcommand)10.6.2 Telling CVS to notify you
    watchers (subcommand)10.6.4 Information about who is watching and editing
    Watches10.6 Mechanisms to track who is editing files
    wdiff (import example)13.1 Importing for the first time
    Web pages, maintaining with CVSC.3.5.2 Keeping a checked out copy
    What (shell command)12.2 Using keywords
    What branches are good for5.1 What branches are good for
    What is CVS not?1.2 What is CVS not?
    What is CVS?1.1 What is CVS?
    When to commit11.1 When to commit?
    Windows, and permissions2.2.3 File Permission issues specific to Windows
    Work-session, example of1.3 A sample session
    Working copy10. Multiple developers
    Working copy, removing1.3.3 Cleaning up
    WrappersC.2 The cvswrappers file
    writers (admin file)2.10 Read-only repository access

    X
    XimbiotH. Dealing with bugs in CVS or this manual
    xinetd, configuring for pserver2.9.3.1 Setting up the server for password authentication

    Z
    Zone, time, in inputA.5 Common command options
    Zone, time, in outputA.13 log—Print out log information for files

    Jump to:   !   #   &   -   .   /   :   <   =   >   _  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   R   S   T   U   V   W   X   Z  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/ccvs/cvs_27.html0000644000175000017500000011556211264347121023402 0ustar flichtenheldflichtenheld CVS—Concurrent Versions System v4.2: Index: P – S
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Index: P – S

    Jump to:   !   #   &   -   .   /   :   <   =   >   _  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   R   S   T   U   V   W   X   Z  
    Index Entry Section

    P
    Parallel repositories2.5 Multiple repositories
    passwd (admin file)2.9.3.1 Setting up the server for password authentication
    Password client, using2.9.3.2 Using the client with password authentication
    Password server, setting up2.9.3.1 Setting up the server for password authentication
    PATH, environment variableD. All environment variables which affect CVS
    Per-directory sticky tags/dates2.3 How data is stored in the working directory
    Per-module editorC.3.4 Editinfo
    Permissions, general2.2.2 File permissions
    Permissions, saving in CVS15. Special Files
    Permissions, Windows-specific2.2.3 File Permission issues specific to Windows
    Policy11.1 When to commit?
    port, specifying for remote repositories2.9 Remote repositories
    port, specifying for remote repositories2.9.3.1 Setting up the server for password authentication
    Precommit checkingC.3.2 Commitinfo
    pserver (client/server connection method), port specification2.9 Remote repositories
    pserver (client/server connection method), port specification2.9.3.1 Setting up the server for password authentication
    pserver (subcommand)2.9.3.1 Setting up the server for password authentication
    PVCS, importing files from3.1.2 Creating Files From Other Version Control Systems

    R
    RCS history files2.2.1 Where files are stored within the repository
    RCS revision numbers4.4 Tags–Symbolic revisions
    RCS, importing files from3.1.2 Creating Files From Other Version Control Systems
    RCS-style locking10. Multiple developers
    RCSBIN, in CVSROOT/configC.9 The CVSROOT/config configuration file
    RCSBIN, internal variableC.8 Expansions in administrative files
    RCSBIN, overridingA.4 Global options
    RCSfile keyword12.1 Keyword List
    rcsinfo (admin file)C.4 Rcsinfo
    rdiff (subcommand)A.14 rdiff—’patch’ format diffs between releases
    Read-only files, and -rA.4 Global options
    Read-only files, and CVSREADD. All environment variables which affect CVS
    Read-only files, and watches10.6.1 Telling CVS to watch certain files
    Read-only files, in repository2.2.2 File permissions
    Read-only modeA.4 Global options
    Read-only repository access2.10 Read-only repository access
    Read-only repository modeA.4 Global options
    readers (admin file)2.10 Read-only repository access
    Recursive (directory descending)6. Recursive behavior
    Reference manual (files)C. Reference manual for Administrative files
    Reference manual for variablesD. All environment variables which affect CVS
    Reference, commandsB. Quick reference to CVS commands
    Regular expression syntaxC.3.1 The common syntax
    Regular modulesC.1.2 Regular modules
    release (subcommand)A.15 release—Indicate that a Module is no longer in use
    Releases, revisions and versions4.2 Versions, revisions and releases
    Releasing your working copy1.3.3 Cleaning up
    Remote repositories2.9 Remote repositories
    Remote repositories, port specification2.9 Remote repositories
    Remote repositories, port specification2.9.3.1 Setting up the server for password authentication
    Remove (subcommand)7.2 Removing files
    Removing a change5.8 Merging differences between any two revisions
    Removing branch tags4.7 Deleting, moving, and renaming tags
    Removing directories7.3 Removing directories
    Removing files7.2 Removing files
    Removing tags4.7 Deleting, moving, and renaming tags
    Removing your working copy1.3.3 Cleaning up
    Renaming directories7.5 Moving and renaming directories
    Renaming files7.4 Moving and renaming files
    Renaming tags4.7 Deleting, moving, and renaming tags
    Replacing a log messageA.6.1 admin options
    Reporting bugsH. Dealing with bugs in CVS or this manual
    Repositories, multiple2.5 Multiple repositories
    Repositories, remote2.9 Remote repositories
    Repositories, remote, port specification2.9 Remote repositories
    Repositories, remote, port specification2.9.3.1 Setting up the server for password authentication
    Repository (intro)2. The Repository
    Repository file, in CVS directory2.3 How data is stored in the working directory
    Repository, backing up2.7 Backing up a repository
    Repository, example2. The Repository
    Repository, how data is stored2.2 How data is stored in the repository
    Repository, moving2.8 Moving a repository
    Repository, setting up2.6 Creating a repository
    RereadLogAfterVerify, in CVSROOT/configC.9 The CVSROOT/config configuration file
    Reserved checkouts10. Multiple developers
    Resetting sticky tags4.9 Sticky tags
    Resolving a conflict10.3 Conflicts example
    Restoring old version of removed file5.8 Merging differences between any two revisions
    Resurrecting old version of dead file5.8 Merging differences between any two revisions
    Retrieve a branch5.3 Accessing branches
    Retrieving an old revision using tags4.4 Tags–Symbolic revisions
    Reverting to repository version10.6.3 How to edit a file which is being watched
    Revision keyword12.1 Keyword List
    Revision management11. Revision management
    Revision numbers4.1 Revision numbers
    Revision numbers (branches)5.4 Branches and revisions
    Revision tree4.1 Revision numbers
    Revision tree, making branches5. Branching and merging
    Revisions, merging differences between5.8 Merging differences between any two revisions
    Revisions, versions and releases4.2 Versions, revisions and releases
    Right-hand optionsA.5 Common command options
    Root file, in CVS directory2.1 Telling CVS where your repository is
    rsh2.9.2 Connecting with rsh
    rsh replacements (Kerberized, SSH, &c)2.9.2 Connecting with rsh
    rtag (subcommand)4.6 Specifying what to tag by date or revision
    rtag (subcommand), creating a branch using5.2 Creating a branch

    S
    Saving spaceA.6.1 admin options
    SCCS, importing files from3.1.2 Creating Files From Other Version Control Systems
    Security, file permissions in repository2.2.2 File permissions
    Security, GSSAPI2.9.4 Direct connection with GSSAPI
    Security, kerberos2.9.5 Direct connection with kerberos
    Security, of pserver2.9.3.3 Security considerations with password authentication
    Security, setuid2.2.2 File permissions
    Server, CVS2.9 Remote repositories
    Server, temporary directories2.11 Temporary directories for the server
    Setgid2.2.2 File permissions
    Setting up a repository2.6 Creating a repository
    Setuid2.2.2 File permissions
    Source keyword12.1 Keyword List
    Source, getting CVS source1.1 What is CVS?
    Source, getting from CVS1.3.1 Getting the source
    Special files15. Special Files
    Specifying datesA.5 Common command options
    Spreading information10.4 Informing others about commits
    SSH (rsh replacement)2.9.2 Connecting with rsh
    Starting a project with CVS3. Starting a project with CVS
    State keyword12.1 Keyword List
    Status of a file10.1 File status
    Status of a moduleC.1.5 Module options
    Sticky date4.9 Sticky tags
    Sticky tags4.9 Sticky tags
    Sticky tags, resetting4.9 Sticky tags
    Sticky tags/dates, per-directory2.3 How data is stored in the working directory
    Storing log messagesC.3.5 Loginfo
    Stream authenticationA.4 Global options
    StructureA.1 Overall structure of CVS commands
    Subdirectories6. Recursive behavior
    Support, getting CVS supportH. Dealing with bugs in CVS or this manual
    Symbolic link, importingA.12.2 import output
    Symbolic links15. Special Files
    Symbolic name (tag)4.4 Tags–Symbolic revisions
    Syntax of info filesC.3.1 The common syntax
    SystemAuth, in CVSROOT/configC.9 The CVSROOT/config configuration file

    Jump to:   !   #   &   -   .   /   :   <   =   >   _  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   R   S   T   U   V   W   X   Z  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/ccvs/cvs_11.html0000644000175000017500000001677511264347121023401 0ustar flichtenheldflichtenheld CVS—Concurrent Versions System v4.2: 11. Revision management
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    11. Revision management

    If you have read this far, you probably have a pretty good grasp on what CVS can do for you. This chapter talks a little about things that you still have to decide.

    If you are doing development on your own using CVS you could probably skip this chapter. The questions this chapter takes up become more important when more than one person is working in a repository.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    11.1 When to commit?

    Your group should decide which policy to use regarding commits. Several policies are possible, and as your experience with CVS grows you will probably find out what works for you.

    If you commit files too quickly you might commit files that do not even compile. If your partner updates his working sources to include your buggy file, he will be unable to compile the code. On the other hand, other persons will not be able to benefit from the improvements you make to the code if you commit very seldom, and conflicts will probably be more common.

    It is common to only commit files after making sure that they can be compiled. Some sites require that the files pass a test suite. Policies like this can be enforced using the commitinfo file (see section Commitinfo), but you should think twice before you enforce such a convention. By making the development environment too controlled it might become too regimented and thus counter-productive to the real goal, which is to get software written.


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/ccvs/cvs_4.html0000644000175000017500000012456111264347121023314 0ustar flichtenheldflichtenheld CVS—Concurrent Versions System v4.2: 4. Revisions
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4. Revisions

    For many uses of CVS, one doesn’t need to worry too much about revision numbers; CVS assigns numbers such as 1.1, 1.2, and so on, and that is all one needs to know. However, some people prefer to have more knowledge and control concerning how CVS assigns revision numbers.

    If one wants to keep track of a set of revisions involving more than one file, such as which revisions went into a particular release, one uses a tag, which is a symbolic revision which can be assigned to a numeric revision in each file.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.1 Revision numbers

    Each version of a file has a unique revision number. Revision numbers look like ‘1.1’, ‘1.2’, ‘1.3.2.2’ or even ‘1.3.2.2.4.5’. A revision number always has an even number of period-separated decimal integers. By default revision 1.1 is the first revision of a file. Each successive revision is given a new number by increasing the rightmost number by one. The following figure displays a few revisions, with newer revisions to the right.

     
           +-----+    +-----+    +-----+    +-----+    +-----+
           ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 !
           +-----+    +-----+    +-----+    +-----+    +-----+
    

    It is also possible to end up with numbers containing more than one period, for example ‘1.3.2.2’. Such revisions represent revisions on branches (see section Branching and merging); such revision numbers are explained in detail in Branches and revisions.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.2 Versions, revisions and releases

    A file can have several versions, as described above. Likewise, a software product can have several versions. A software product is often given a version number such as ‘4.1.1’.

    Versions in the first sense are called revisions in this document, and versions in the second sense are called releases. To avoid confusion, the word version is almost never used in this document.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.3 Assigning revisions

    By default, CVS will assign numeric revisions by leaving the first number the same and incrementing the second number. For example, 1.1, 1.2, 1.3, etc.

    When adding a new file, the second number will always be one and the first number will equal the highest first number of any file in that directory. For example, the current directory contains files whose highest numbered revisions are 1.7, 3.1, and 4.12, then an added file will be given the numeric revision 4.1.

    Normally there is no reason to care about the revision numbers—it is easier to treat them as internal numbers that CVS maintains, and tags provide a better way to distinguish between things like release 1 versus release 2 of your product (see section Tags–Symbolic revisions). However, if you want to set the numeric revisions, the ‘-r’ option to cvs commit can do that. The ‘-r’ option implies the ‘-f’ option, in the sense that it causes the files to be committed even if they are not modified.

    For example, to bring all your files up to revision 3.0 (including those that haven’t changed), you might invoke:

     
    $ cvs commit -r 3.0
    

    Note that the number you specify with ‘-r’ must be larger than any existing revision number. That is, if revision 3.0 exists, you cannot ‘cvs commit -r 1.3’. If you want to maintain several releases in parallel, you need to use a branch (see section Branching and merging).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.4 Tags–Symbolic revisions

    The revision numbers live a life of their own. They need not have anything at all to do with the release numbers of your software product. Depending on how you use CVS the revision numbers might change several times between two releases. As an example, some of the source files that make up RCS 5.6 have the following revision numbers:

     
    ci.c            5.21
    co.c            5.9
    ident.c         5.3
    rcs.c           5.12
    rcsbase.h       5.11
    rcsdiff.c       5.10
    rcsedit.c       5.11
    rcsfcmp.c       5.9
    rcsgen.c        5.10
    rcslex.c        5.11
    rcsmap.c        5.2
    rcsutil.c       5.10
    

    You can use the tag command to give a symbolic name to a certain revision of a file. You can use the ‘-v’ flag to the status command to see all tags that a file has, and which revision numbers they represent. Tag names must start with an uppercase or lowercase letter and can contain uppercase and lowercase letters, digits, ‘-’, and ‘_’. The two tag names BASE and HEAD are reserved for use by CVS. It is expected that future names which are special to CVS will be specially named, for example by starting with ‘.’, rather than being named analogously to BASE and HEAD, to avoid conflicts with actual tag names.

    You’ll want to choose some convention for naming tags, based on information such as the name of the program and the version number of the release. For example, one might take the name of the program, immediately followed by the version number with ‘.’ changed to ‘-’, so that CVS 1.9 would be tagged with the name cvs1-9. If you choose a consistent convention, then you won’t constantly be guessing whether a tag is cvs-1-9 or cvs1_9 or what. You might even want to consider enforcing your convention in the taginfo file (see section User-defined logging).

    The following example shows how you can add a tag to a file. The commands must be issued inside your working directory. That is, you should issue the command in the directory where ‘backend.c’ resides.

     
    $ cvs tag rel-0-4 backend.c
    T backend.c
    $ cvs status -v backend.c
    ===================================================================
    File: backend.c         Status: Up-to-date
    
        Version:            1.4     Tue Dec  1 14:39:01 1992
        RCS Version:        1.4     /u/cvsroot/yoyodyne/tc/backend.c,v
        Sticky Tag:         (none)
        Sticky Date:        (none)
        Sticky Options:     (none)
    
        Existing Tags:
            rel-0-4                     (revision: 1.4)
    
    

    For a complete summary of the syntax of cvs tag, including the various options, see Quick reference to CVS commands.

    There is seldom reason to tag a file in isolation. A more common use is to tag all the files that constitute a module with the same tag at strategic points in the development life-cycle, such as when a release is made.

     
    $ cvs tag rel-1-0 .
    cvs tag: Tagging .
    T Makefile
    T backend.c
    T driver.c
    T frontend.c
    T parser.c
    

    (When you give CVS a directory as argument, it generally applies the operation to all the files in that directory, and (recursively), to any subdirectories that it may contain. See section Recursive behavior.)

    The checkout command has a flag, ‘-r’, that lets you check out a certain revision of a module. This flag makes it easy to retrieve the sources that make up release 1.0 of the module ‘tc’ at any time in the future:

     
    $ cvs checkout -r rel-1-0 tc
    

    This is useful, for instance, if someone claims that there is a bug in that release, but you cannot find the bug in the current working copy.

    You can also check out a module as it was at any given date. See section checkout options. When specifying ‘-r’ to any of these commands, you will need beware of sticky tags; see Sticky tags.

    When you tag more than one file with the same tag you can think about the tag as "a curve drawn through a matrix of filename vs. revision number." Say we have 5 files with the following revisions:

     
            file1   file2   file3   file4   file5
    
            1.1     1.1     1.1     1.1  /--1.1*      <-*-  TAG
            1.2*-   1.2     1.2    -1.2*-
            1.3  \- 1.3*-   1.3   / 1.3
            1.4          \  1.4  /  1.4
                          \-1.5*-   1.5
                            1.6
    

    At some time in the past, the * versions were tagged. You can think of the tag as a handle attached to the curve drawn through the tagged revisions. When you pull on the handle, you get all the tagged revisions. Another way to look at it is that you "sight" through a set of revisions that is "flat" along the tagged revisions, like this:

     
            file1   file2   file3   file4   file5
    
                            1.1
                            1.2
                    1.1     1.3                       _
            1.1     1.2     1.4     1.1              /
            1.2*----1.3*----1.5*----1.2*----1.1     (--- <--- Look here
            1.3             1.6     1.3              \_
            1.4                     1.4
                                    1.5
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.5 Specifying what to tag from the working directory

    The example in the previous section demonstrates one of the most common ways to choose which revisions to tag. Namely, running the cvs tag command without arguments causes CVS to select the revisions which are checked out in the current working directory. For example, if the copy of ‘backend.c’ in working directory was checked out from revision 1.4, then CVS will tag revision 1.4. Note that the tag is applied immediately to revision 1.4 in the repository; tagging is not like modifying a file, or other operations in which one first modifies the working directory and then runs cvs commit to transfer that modification to the repository.

    One potentially surprising aspect of the fact that cvs tag operates on the repository is that you are tagging the checked-in revisions, which may differ from locally modified files in your working directory. If you want to avoid doing this by mistake, specify the ‘-c’ option to cvs tag. If there are any locally modified files, CVS will abort with an error before it tags any files:

     
    $ cvs tag -c rel-0-4
    cvs tag: backend.c is locally modified
    cvs [tag aborted]: correct the above errors first!
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.6 Specifying what to tag by date or revision

    The cvs rtag command tags the repository as of a certain date or time (or can be used to tag the latest revision). rtag works directly on the repository contents (it requires no prior checkout and does not look for a working directory).

    The following options specify which date or revision to tag. See Common command options, for a complete description of them.

    -D date

    Tag the most recent revision no later than date.

    -f

    Only useful with the ‘-D date’ or ‘-r tag’ flags. If no matching revision is found, use the most recent revision (instead of ignoring the file).

    -r tag

    Only tag those files that contain existing tag tag.

    The cvs tag command also allows one to specify files by revision or date, using the same ‘-r’, ‘-D’, and ‘-f’ options. However, this feature is probably not what you want. The reason is that cvs tag chooses which files to tag based on the files that exist in the working directory, rather than the files which existed as of the given tag/date. Therefore, you are generally better off using cvs rtag. The exceptions might be cases like:

     
    cvs tag -r 1.4 stable backend.c
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.7 Deleting, moving, and renaming tags

    Normally one does not modify tags. They exist in order to record the history of the repository and so deleting them or changing their meaning would, generally, not be what you want.

    However, there might be cases in which one uses a tag temporarily or accidentally puts one in the wrong place. Therefore, one might delete, move, or rename a tag.

    WARNING: the commands in this section are dangerous; they permanently discard historical information and it can be difficult or impossible to recover from errors. If you are a CVS administrator, you may consider restricting these commands with taginfo (see section User-defined logging).

    To delete a tag, specify the ‘-d’ option to either cvs tag or cvs rtag. For example:

     
    cvs rtag -d rel-0-4 tc
    

    deletes the non-branch tag rel-0-4 from the module tc. In the event that branch tags are encountered within the repository with the given name, a warning message will be issued and the branch tag will not be deleted. If you are absolutely certain you know what you are doing, the -B option may be specified to allow deletion of branch tags. In that case, any non-branch tags encountered will trigger warnings and will not be deleted.

    WARNING: Moving branch tags is very dangerous! If you think you need the -B option, think again and ask your CVS administrator about it (if that isn’t you). There is almost certainly another way to accomplish what you want to accomplish.

    When we say move a tag, we mean to make the same name point to different revisions. For example, the stable tag may currently point to revision 1.4 of ‘backend.c’ and perhaps we want to make it point to revision 1.6. To move a non-branch tag, specify the ‘-F’ option to either cvs tag or cvs rtag. For example, the task just mentioned might be accomplished as:

     
    cvs tag -r 1.6 -F stable backend.c
    

    If any branch tags are encountered in the repository with the given name, a warning is issued and the branch tag is not disturbed. If you are absolutely certain you wish to move the branch tag, the -B option may be specified. In that case, non-branch tags encountered with the given name are ignored with a warning message.

    WARNING: Moving branch tags is very dangerous! If you think you need the -B option, think again and ask your CVS administrator about it (if that isn’t you). There is almost certainly another way to accomplish what you want to accomplish.

    When we say rename a tag, we mean to make a different name point to the same revisions as the old tag. For example, one may have misspelled the tag name and want to correct it (hopefully before others are relying on the old spelling). To rename a tag, first create a new tag using the ‘-r’ option to cvs rtag, and then delete the old name. (Caution: this method will not work with branch tags.) This leaves the new tag on exactly the same files as the old tag. For example:

     
    cvs rtag -r old-name-0-4 rel-0-4 tc
    cvs rtag -d old-name-0-4 tc
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.8 Tagging and adding and removing files

    The subject of exactly how tagging interacts with adding and removing files is somewhat obscure; for the most part CVS will keep track of whether files exist or not without too much fussing. By default, tags are applied to only files which have a revision corresponding to what is being tagged. Files which did not exist yet, or which were already removed, simply omit the tag, and CVS knows to treat the absence of a tag as meaning that the file didn’t exist as of that tag.

    However, this can lose a small amount of information. For example, suppose a file was added and then removed. Then, if the tag is missing for that file, there is no way to know whether the tag refers to the time before the file was added, or the time after it was removed. If you specify the ‘-r’ option to cvs rtag, then CVS tags the files which have been removed, and thereby avoids this problem. For example, one might specify -r HEAD to tag the head.

    On the subject of adding and removing files, the cvs rtag command has a ‘-a’ option which means to clear the tag from removed files that would not otherwise be tagged. For example, one might specify this option in conjunction with ‘-F’ when moving a tag. If one moved a tag without ‘-a’, then the tag in the removed files might still refer to the old revision, rather than reflecting the fact that the file had been removed. I don’t think this is necessary if ‘-r’ is specified, as noted above.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    4.9 Sticky tags

    Sometimes a working copy’s revision has extra data associated with it, for example it might be on a branch (see section Branching and merging), or restricted to versions prior to a certain date by ‘checkout -D’ or ‘update -D’. Because this data persists – that is, it applies to subsequent commands in the working copy – we refer to it as sticky.

    Most of the time, stickiness is an obscure aspect of CVS that you don’t need to think about. However, even if you don’t want to use the feature, you may need to know something about sticky tags (for example, how to avoid them!).

    You can use the status command to see if any sticky tags or dates are set:

     
    $ cvs status driver.c
    ===================================================================
    File: driver.c          Status: Up-to-date
    
        Version:            1.7.2.1 Sat Dec  5 19:35:03 1992
        RCS Version:        1.7.2.1 /u/cvsroot/yoyodyne/tc/driver.c,v
        Sticky Tag:         rel-1-0-patches (branch: 1.7.2)
        Sticky Date:        (none)
        Sticky Options:     (none)
    
    

    The sticky tags will remain on your working files until you delete them with ‘cvs update -A’. The ‘-A’ option merges local changes into the version of the file from the head of the trunk, removing any sticky tags, dates, or options. See update—Bring work tree in sync with repository for more on the operation of cvs update.

    The most common use of sticky tags is to identify which branch one is working on, as described in Accessing branches. However, non-branch sticky tags have uses as well. For example, suppose that you want to avoid updating your working directory, to isolate yourself from possibly destabilizing changes other people are making. You can, of course, just refrain from running cvs update. But if you want to avoid updating only a portion of a larger tree, then sticky tags can help. If you check out a certain revision (such as 1.4) it will become sticky. Subsequent cvs update commands will not retrieve the latest revision until you reset the tag with cvs update -A. Likewise, use of the ‘-D’ option to update or checkout sets a sticky date, which, similarly, causes that date to be used for future retrievals.

    People often want to retrieve an old version of a file without setting a sticky tag. This can be done with the ‘-p’ option to checkout or update, which sends the contents of the file to standard output. For example:

     
    $ cvs update -p -r 1.1 file1 >file1
    ===================================================================
    Checking out file1
    RCS:  /tmp/cvs-sanity/cvsroot/first-dir/Attic/file1,v
    VERS: 1.1
    ***************
    $
    

    However, this isn’t the easiest way, if you are asking how to undo a previous checkin (in this example, put ‘file1’ back to the way it was as of revision 1.1). In that case you are better off using the ‘-j’ option to update; for further discussion see Merging differences between any two revisions.


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/ccvs/cvs_22.html0000644000175000017500000001347711264347121023377 0ustar flichtenheldflichtenheld CVS—Concurrent Versions System v4.2: G. Credits
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    G. Credits

    Roland Pesch, then of Cygnus Support <roland@wrs.com> wrote the manual pages which were distributed with CVS 1.3. Much of their text was copied into this manual. He also read an early draft of this manual and contributed many ideas and corrections.

    The mailing-list info-cvs is sometimes informative. I have included information from postings made by the following persons: David G. Grubbs <dgg@think.com>.

    Some text has been extracted from the man pages for RCS.

    The CVS FAQ by David G. Grubbs has provided useful material. The FAQ is no longer maintained, however, and this manual is about the closest thing there is to a successor (with respect to documenting how to use CVS, at least).

    In addition, the following persons have helped by telling me about mistakes I’ve made:

     
    Roxanne Brunskill <rbrunski@datap.ca>,
    Kathy Dyer <dyer@phoenix.ocf.llnl.gov>,
    Karl Pingle <pingle@acuson.com>,
    Thomas A Peterson <tap@src.honeywell.com>,
    Inge Wallin <ingwa@signum.se>,
    Dirk Koschuetzki <koschuet@fmi.uni-passau.de>
    and Michael Brown <brown@wi.extrel.com>.
    

    The list of contributors here is not comprehensive; for a more complete list of who has contributed to this manual see the file ‘doc/ChangeLog’ in the CVS source distribution.


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/ccvs/cvs_toc.html0000644000175000017500000006704711264347121023743 0ustar flichtenheldflichtenheld CVS—Concurrent Versions System v4.2: Table of Contents
    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/ccvs/cvs_15.html0000644000175000017500000001174011264347121023370 0ustar flichtenheldflichtenheld CVS—Concurrent Versions System v4.2: 15. Special Files
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    15. Special Files

    In normal circumstances, CVS works only with regular files. Every file in a project is assumed to be persistent; it must be possible to open, read and close them; and so on. CVS also ignores file permissions and ownerships, leaving such issues to be resolved by the developer at installation time. In other words, it is not possible to "check in" a device into a repository; if the device file cannot be opened, CVS will refuse to handle it. Files also lose their ownerships and permissions during repository transactions.


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/ccvs/cvs_25.html0000644000175000017500000010456311264347121023377 0ustar flichtenheldflichtenheld CVS—Concurrent Versions System v4.2: Index: D – I
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Index: D – I

    Jump to:   !   #   &   -   .   /   :   <   =   >   _  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   R   S   T   U   V   W   X   Z  
    Index Entry Section

    D
    Date keyword12.1 Keyword List
    DatesA.5 Common command options
    Dead state2.2.4 The attic
    Decimal revision number4.1 Revision numbers
    DEFAULT in commitinfoC.3.2 Commitinfo
    DEFAULT in editinfoC.3.4 Editinfo
    DEFAULT in ‘verifymsgC.3.3 Verifying log messages
    Defining a module3.2 Defining the module
    Defining modules (intro)2.4 The administrative files
    Defining modules (reference manual)C.1 The modules file
    Deleting branch tags4.7 Deleting, moving, and renaming tags
    Deleting files7.2 Removing files
    Deleting revisionsA.6.1 admin options
    Deleting sticky tags4.9 Sticky tags
    Deleting tags4.7 Deleting, moving, and renaming tags
    Descending directories6. Recursive behavior
    Device nodes15. Special Files
    Diff1.3.4 Viewing differences
    diff (subcommand)A.9 diff—Show differences between revisions
    Differences, merging5.8 Merging differences between any two revisions
    Directories, moving7.5 Moving and renaming directories
    Directories, removing7.3 Removing directories
    Directory, descending6. Recursive behavior
    Disjoint repositories2.5 Multiple repositories
    Distributing log messagesC.3.5 Loginfo
    driver.c (merge example)10.3 Conflicts example

    E
    edit (subcommand)10.6.3 How to edit a file which is being watched
    editinfo (admin file)C.3.4 Editinfo
    Editing administrative files2.4.1 Editing administrative files
    Editing the modules file3.2 Defining the module
    Editor, avoiding invocation ofA.5 Common command options
    EDITOR, environment variable1.3.2 Committing your changes
    EDITOR, environment variableD. All environment variables which affect CVS
    EDITOR, internal variableC.8 Expansions in administrative files
    EDITOR, overridingA.4 Global options
    Editor, specifying per moduleC.3.4 Editinfo
    editors (subcommand)10.6.4 Information about who is watching and editing
    emerge10.3 Conflicts example
    Emptydir, in CVSROOT directory2.3 How data is stored in the working directory
    EncryptionA.4 Global options
    Entries file, in CVS directory2.3 How data is stored in the working directory
    Entries.Backup file, in CVS directory2.3 How data is stored in the working directory
    Entries.Log file, in CVS directory2.3 How data is stored in the working directory
    Entries.Static file, in CVS directory2.3 How data is stored in the working directory
    Environment variablesD. All environment variables which affect CVS
    environment variables, passed to administrative filesC.8 Expansions in administrative files
    Errors, reportingH. Dealing with bugs in CVS or this manual
    Example of a work-session1.3 A sample session
    Example of merge10.3 Conflicts example
    Example, branch merge5.6 Merging an entire branch
    Excluding directories, in modules fileC.1.4 Excluding directories
    Exit status, of commitinfoC.3.2 Commitinfo
    Exit status, of CVSA.2 CVS’s exit status
    Exit status, of editorF.1 Partial list of error messages
    Exit status, of taginfo8.3 User-defined logging
    Exit status, of ‘verifymsgC.3.3 Verifying log messages
    export (subcommand)A.10 export—Export sources from CVS, similar to checkout
    Export programC.1.5 Module options

    F
    Fetching source1.3.1 Getting the source
    File had conflicts on merge10.1 File status
    File locking10. Multiple developers
    File permissions, general2.2.2 File permissions
    File permissions, Windows-specific2.2.3 File Permission issues specific to Windows
    File status10.1 File status
    Files, moving7.4 Moving and renaming files
    Files, reference manualC. Reference manual for Administrative files
    Fixing a log messageA.6.1 admin options
    Forcing a tag matchA.5 Common command options
    fork, access method2.9.6 Connecting with fork
    Form for log messageC.4 Rcsinfo
    Format of CVS commandsA.1 Overall structure of CVS commands

    G
    Getting started1.3 A sample session
    Getting the source1.3.1 Getting the source
    Global cvsignoreC.5 Ignoring files via cvsignore
    Global optionsA.4 Global options
    Group2.2.2 File permissions
    gserver (client/server connection method), port specification2.9 Remote repositories
    gserver (client/server connection method), port specification2.9.3.1 Setting up the server for password authentication
    GSSAPI2.9.4 Direct connection with GSSAPI
    GzipA.4 Global options
    GzipB. Quick reference to CVS commands

    H
    Hard links15. Special Files
    HEAD, as reserved tag name4.4 Tags–Symbolic revisions
    HEAD, special tagA.5 Common command options
    Header keyword12.1 Keyword List
    history (subcommand)A.11 history—Show status of files and users
    History browsing8. History browsing
    History fileC.7 The history file
    History files2.2.1 Where files are stored within the repository
    History of CVS1.1 What is CVS?
    HOME, environment variableD. All environment variables which affect CVS
    HOMEDRIVE, environment variableD. All environment variables which affect CVS
    HOMEPATH, environment variableD. All environment variables which affect CVS

    I
    Id keyword12.1 Keyword List
    Ident (shell command)12.2 Using keywords
    Identifying a branch5.3 Accessing branches
    Identifying files12. Keyword substitution
    Ignored filesC.5 Ignoring files via cvsignore
    Ignoring filesC.5 Ignoring files via cvsignore
    import (subcommand)A.12 import—Import sources into CVS, using vendor branches
    Importing files3.1.1 Creating a directory tree from a number of files
    Importing files, from other version control systems3.1.2 Creating Files From Other Version Control Systems
    Importing modules13.1 Importing for the first time
    IndexIndex
    inetd, configuring for pserver2.9.3.1 Setting up the server for password authentication
    Info files (syntax)C.3.1 The common syntax
    Informing others10.4 Informing others about commits
    init (subcommand)2.6 Creating a repository
    Installed images (VMS)2.2.2 File permissions
    Internal variablesC.8 Expansions in administrative files
    Introduction to CVS1.1 What is CVS?
    Invoking CVSB. Quick reference to CVS commands
    Isolation8. History browsing

    Jump to:   !   #   &   -   .   /   :   <   =   >   _  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   R   S   T   U   V   W   X   Z  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/ccvs/cvs_13.html0000644000175000017500000005514311264347121023373 0ustar flichtenheldflichtenheld CVS—Concurrent Versions System v4.2: 13. Tracking third-party sources
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    13. Tracking third-party sources

    If you modify a program to better fit your site, you probably want to include your modifications when the next release of the program arrives. CVS can help you with this task.

    In the terminology used in CVS, the supplier of the program is called a vendor. The unmodified distribution from the vendor is checked in on its own branch, the vendor branch. CVS reserves branch 1.1.1 for this use.

    When you modify the source and commit it, your revision will end up on the main trunk. When a new release is made by the vendor, you commit it on the vendor branch and copy the modifications onto the main trunk.

    Use the import command to create and update the vendor branch. When you import a new file, the vendor branch is made the ‘head’ revision, so anyone that checks out a copy of the file gets that revision. When a local modification is committed it is placed on the main trunk, and made the ‘head’ revision.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    13.1 Importing for the first time

    Use the import command to check in the sources for the first time. When you use the import command to track third-party sources, the vendor tag and release tags are useful. The vendor tag is a symbolic name for the branch (which is always 1.1.1, unless you use the ‘-b branch’ flag—see Multiple vendor branches.). The release tags are symbolic names for a particular release, such as ‘FSF_0_04’.

    Note that import does not change the directory in which you invoke it. In particular, it does not set up that directory as a CVS working directory; if you want to work with the sources import them first and then check them out into a different directory (see section Getting the source).

    Suppose you have the sources to a program called wdiff in a directory ‘wdiff-0.04’, and are going to make private modifications that you want to be able to use even when new releases are made in the future. You start by importing the source to your repository:

     
    $ cd wdiff-0.04
    $ cvs import -m "Import of FSF v. 0.04" fsf/wdiff FSF_DIST WDIFF_0_04
    

    The vendor tag is named ‘FSF_DIST’ in the above example, and the only release tag assigned is ‘WDIFF_0_04’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    13.2 Updating with the import command

    When a new release of the source arrives, you import it into the repository with the same import command that you used to set up the repository in the first place. The only difference is that you specify a different release tag this time:

     
    $ tar xfz wdiff-0.05.tar.gz
    $ cd wdiff-0.05
    $ cvs import -m "Import of FSF v. 0.05" fsf/wdiff FSF_DIST WDIFF_0_05
    

    For files that have not been modified locally, the newly created revision becomes the head revision. If you have made local changes, import will warn you that you must merge the changes into the main trunk, and tell you to use ‘checkout -j’ to do so:

     
    $ cvs checkout -jFSF_DIST:yesterday -jFSF_DIST wdiff
    

    The above command will check out the latest revision of ‘wdiff’, merging the changes made on the vendor branch ‘FSF_DIST’ since yesterday into the working copy. If any conflicts arise during the merge they should be resolved in the normal way (see section Conflicts example). Then, the modified files may be committed.

    However, it is much better to use the two release tags rather than using a date on the branch as suggested above:

     
    $ cvs checkout -jWDIFF_0_04 -jWDIFF_0_05 wdiff
    

    The reason this is better is that using a date, as suggested above, assumes that you do not import more than one release of a product per day. More importantly, using the release tags allows CVS to detect files that were removed between the two vendor releases and mark them for removal. Since import has no way to detect removed files, you should do a merge like this even if import doesn’t tell you to.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    13.3 Reverting to the latest vendor release

    You can also revert local changes completely and return to the latest vendor release by changing the ‘head’ revision back to the vendor branch on all files. For example, if you have a checked-out copy of the sources in ‘~/work.d/wdiff’, and you want to revert to the vendor’s version for all the files in that directory, you would type:

     
    $ cd ~/work.d/wdiff
    $ cvs admin -bWDIFF .
    

    You must specify the ‘-bWDIFF’ without any space after the ‘-b’. See section admin options.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    13.4 How to handle binary files with cvs import

    Use the ‘-k’ wrapper option to tell import which files are binary. See section The cvswrappers file.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    13.5 How to handle keyword substitution with cvs import

    The sources which you are importing may contain keywords (see section Keyword substitution). For example, the vendor may use CVS or some other system which uses similar keyword expansion syntax. If you just import the files in the default fashion, then the keyword expansions supplied by the vendor will be replaced by keyword expansions supplied by your own copy of CVS. It may be more convenient to maintain the expansions supplied by the vendor, so that this information can supply information about the sources that you imported from the vendor.

    To maintain the keyword expansions supplied by the vendor, supply the ‘-ko’ option to cvs import the first time you import the file. This will turn off keyword expansion for that file entirely, so if you want to be more selective you’ll have to think about what you want and use the ‘-k’ option to cvs update or cvs admin as appropriate.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    13.6 Multiple vendor branches

    All the examples so far assume that there is only one vendor from which you are getting sources. In some situations you might get sources from a variety of places. For example, suppose that you are dealing with a project where many different people and teams are modifying the software. There are a variety of ways to handle this, but in some cases you have a bunch of source trees lying around and what you want to do more than anything else is just to all put them in CVS so that you at least have them in one place.

    For handling situations in which there may be more than one vendor, you may specify the ‘-b’ option to cvs import. It takes as an argument the vendor branch to import to. The default is ‘-b 1.1.1’.

    For example, suppose that there are two teams, the red team and the blue team, that are sending you sources. You want to import the red team’s efforts to branch 1.1.1 and use the vendor tag RED. You want to import the blue team’s efforts to branch 1.1.3 and use the vendor tag BLUE. So the commands you might use are:

     
    $ cvs import dir RED RED_1-0
    $ cvs import -b 1.1.3 dir BLUE BLUE_1-5
    

    Note that if your vendor tag does not match your ‘-b’ option, CVS will not detect this case! For example,

     
    $ cvs import -b 1.1.3 dir RED RED_1-0
    

    Be careful; this kind of mismatch is sure to sow confusion or worse. I can’t think of a useful purpose for the ability to specify a mismatch here, but if you discover such a use, don’t. CVS is likely to make this an error in some future release.


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/ccvs/cvs_8.html0000644000175000017500000003672211264347121023321 0ustar flichtenheldflichtenheld CVS—Concurrent Versions System v4.2: 8. History browsing
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    8. History browsing

    Once you have used CVS to store a version control history—what files have changed when, how, and by whom, there are a variety of mechanisms for looking through the history.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    8.1 Log messages

    Whenever you commit a file you specify a log message.

    To look through the log messages which have been specified for every revision which has been committed, use the cvs log command (see section log—Print out log information for files).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    8.2 The history database

    You can use the history file (see section The history file) to log various CVS actions. To retrieve the information from the history file, use the cvs history command (see section history—Show status of files and users).

    Note: you can control what is logged to this file by using the ‘LogHistory’ keyword in the ‘CVSROOT/config’ file (see section The CVSROOT/config configuration file).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    8.3 User-defined logging

    You can customize CVS to log various kinds of actions, in whatever manner you choose. These mechanisms operate by executing a script at various times. The script might append a message to a file listing the information and the programmer who created it, or send mail to a group of developers, or, perhaps, post a message to a particular newsgroup. To log commits, use the ‘loginfo’ file (see section Loginfo). To log commits, checkouts, exports, and tags, respectively, you can also use the ‘-i’, ‘-o’, ‘-e’, and ‘-t’ options in the modules file. For a more flexible way of giving notifications to various users, which requires less in the way of keeping centralized scripts up to date, use the cvs watch add command (see section Telling CVS to notify you); this command is useful even if you are not using cvs watch on.

    The ‘taginfo’ file defines programs to execute when someone executes a tag or rtag command. The ‘taginfo’ file has the standard form for administrative files (see section Reference manual for Administrative files), where each line is a regular expression followed by a command to execute. The arguments passed to the command are, in order, the tagname, operation (add for tag, mov for tag -F, and del for tag -d), repository, and any remaining are pairs of filename revision. A non-zero exit of the filter program will cause the tag to be aborted.

    Here is an example of using taginfo to log tag and rtag commands. In the taginfo file put:

     
    ALL /usr/local/cvsroot/CVSROOT/loggit
    

    Where ‘/usr/local/cvsroot/CVSROOT/loggit’ contains the following script:

     
    #!/bin/sh
    echo "$@" >>/home/kingdon/cvsroot/CVSROOT/taglog
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    8.4 Annotate command

    Command: cvs annotate [-FflR] [-r rev|-D date] files …

    For each file in files, print the head revision of the trunk, together with information on the last modification for each line. For example:

     
    $ cvs annotate ssfile
    Annotations for ssfile
    ***************
    1.1          (mary     27-Mar-96): ssfile line 1
    1.2          (joe      28-Mar-96): ssfile line 2
    

    The file ‘ssfile’ currently contains two lines. The ssfile line 1 line was checked in by mary on March 27. Then, on March 28, joe added a line ssfile line 2, without modifying the ssfile line 1 line. This report doesn’t tell you anything about lines which have been deleted or replaced; you need to use cvs diff for that (see section diff—Show differences between revisions).

    The options to cvs annotate are listed in Quick reference to CVS commands, and can be used to select the files and revisions to annotate. The options are described in more detail there and in Common command options.


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/ccvs/cvs_16.html0000644000175000017500000057246511264347121023411 0ustar flichtenheldflichtenheld CVS—Concurrent Versions System v4.2: A. Guide to CVS commands
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A. Guide to CVS commands

    This appendix describes the overall structure of CVS commands, and describes some commands in detail (others are described elsewhere; for a quick reference to CVS commands, see section Quick reference to CVS commands).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.1 Overall structure of CVS commands

    The overall format of all CVS commands is:

     
    cvs [ cvs_options ] cvs_command [ command_options ] [ command_args ]
    
    cvs

    The name of the CVS program.

    cvs_options

    Some options that affect all sub-commands of CVS. These are described below.

    cvs_command

    One of several different sub-commands. Some of the commands have aliases that can be used instead; those aliases are noted in the reference manual for that command. There are only two situations where you may omit ‘cvs_command’: ‘cvs -H’ elicits a list of available commands, and ‘cvs -v’ displays version information on CVS itself.

    command_options

    Options that are specific for the command.

    command_args

    Arguments to the commands.

    There is unfortunately some confusion between cvs_options and command_options. ‘-l’, when given as a cvs_option, only affects some of the commands. When it is given as a command_option is has a different meaning, and is accepted by more commands. In other words, do not take the above categorization too seriously. Look at the documentation instead.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.2 CVS’s exit status

    CVS can indicate to the calling environment whether it succeeded or failed by setting its exit status. The exact way of testing the exit status will vary from one operating system to another. For example in a unix shell script the ‘$?’ variable will be 0 if the last command returned a successful exit status, or greater than 0 if the exit status indicated failure.

    If CVS is successful, it returns a successful status; if there is an error, it prints an error message and returns a failure status. The one exception to this is the cvs diff command. It will return a successful status if it found no differences, or a failure status if there were differences or if there was an error. Because this behavior provides no good way to detect errors, in the future it is possible that cvs diff will be changed to behave like the other CVS commands.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.3 Default options and the ~/.cvsrc file

    There are some command_options that are used so often that you might have set up an alias or some other means to make sure you always specify that option. One example (the one that drove the implementation of the ‘.cvsrc’ support, actually) is that many people find the default output of the ‘diff’ command to be very hard to read, and that either context diffs or unidiffs are much easier to understand.

    The ‘~/.cvsrc’ file is a way that you can add default options to cvs_commands within cvs, instead of relying on aliases or other shell scripts.

    The format of the ‘~/.cvsrc’ file is simple. The file is searched for a line that begins with the same name as the cvs_command being executed. If a match is found, then the remainder of the line is split up (at whitespace characters) into separate options and added to the command arguments before any options from the command line.

    If a command has two names (e.g., checkout and co), the official name, not necessarily the one used on the command line, will be used to match against the file. So if this is the contents of the user’s ‘~/.cvsrc’ file:

     
    log -N
    diff -uN
    rdiff -u
    update -Pd
    checkout -P
    release -d
    

    the command ‘cvs checkout foo’ would have the ‘-P’ option added to the arguments, as well as ‘cvs co foo’.

    With the example file above, the output from ‘cvs diff foobar’ will be in unidiff format. ‘cvs diff -c foobar’ will provide context diffs, as usual. Getting "old" format diffs would be slightly more complicated, because diff doesn’t have an option to specify use of the "old" format, so you would need ‘cvs -f diff foobar’.

    In place of the command name you can use cvs to specify global options (see section Global options). For example the following line in ‘.cvsrc

     
    cvs -z6
    

    causes CVS to use compression level 6.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.4 Global options

    The available ‘cvs_options’ (that are given to the left of ‘cvs_command’) are:

    --allow-root=rootdir

    Specify legal CVSROOT directory. See Setting up the server for password authentication.

    -a

    Authenticate all communication between the client and the server. Only has an effect on the CVS client. As of this writing, this is only implemented when using a GSSAPI connection (see section Direct connection with GSSAPI). Authentication prevents certain sorts of attacks involving hijacking the active TCP connection. Enabling authentication does not enable encryption.

    -b bindir

    In CVS 1.9.18 and older, this specified that RCS programs are in the bindir directory. Current versions of CVS do not run RCS programs; for compatibility this option is accepted, but it does nothing.

    -T tempdir

    Use tempdir as the directory where temporary files are located. Overrides the setting of the $TMPDIR environment variable and any precompiled directory. This parameter should be specified as an absolute pathname. (When running client/server, ‘-T’ affects only the local process; specifying ‘-T’ for the client has no effect on the server and vice versa.)

    -d cvs_root_directory

    Use cvs_root_directory as the root directory pathname of the repository. Overrides the setting of the $CVSROOT environment variable. See section The Repository.

    -e editor

    Use editor to enter revision log information. Overrides the setting of the $CVSEDITOR and $EDITOR environment variables. For more information, see Committing your changes.

    -f

    Do not read the ‘~/.cvsrc’ file. This option is most often used because of the non-orthogonality of the CVS option set. For example, the ‘cvs log’ option ‘-N’ (turn off display of tag names) does not have a corresponding option to turn the display on. So if you have ‘-N’ in the ‘~/.cvsrc’ entry for ‘log’, you may need to use ‘-f’ to show the tag names.

    -H
    --help

    Display usage information about the specified ‘cvs_command’ (but do not actually execute the command). If you don’t specify a command name, ‘cvs -H’ displays overall help for CVS, including a list of other help options.

    -l

    Do not log the ‘cvs_command’ in the command history (but execute it anyway). See section history—Show status of files and users, for information on command history.

    -R

    Turns on read-only repository mode. This allows one to check out from a read-only repository, such as within an anoncvs server, or from a CDROM repository.

    Same effect as if the CVSREADONLYFS environment variable is set. Using ‘-R’ can also considerably speed up checkout’s over NFS.

    -n

    Do not change any files. Attempt to execute the ‘cvs_command’, but only to issue reports; do not remove, update, or merge any existing files, or create any new files.

    Note that CVS will not necessarily produce exactly the same output as without ‘-n’. In some cases the output will be the same, but in other cases CVS will skip some of the processing that would have been required to produce the exact same output.

    -Q

    Cause the command to be really quiet; the command will only generate output for serious problems.

    -q

    Cause the command to be somewhat quiet; informational messages, such as reports of recursion through subdirectories, are suppressed.

    -r

    Make new working files read-only. Same effect as if the $CVSREAD environment variable is set (see section All environment variables which affect CVS). The default is to make working files writable, unless watches are on (see section Mechanisms to track who is editing files).

    -s variable=value

    Set a user variable (see section Expansions in administrative files).

    -t

    Trace program execution; display messages showing the steps of CVS activity. Particularly useful with ‘-n’ to explore the potential impact of an unfamiliar command.

    -v
    --version

    Display version and copyright information for CVS.

    -w

    Make new working files read-write. Overrides the setting of the $CVSREAD environment variable. Files are created read-write by default, unless $CVSREAD is set or ‘-r’ is given.

    -x

    Encrypt all communication between the client and the server. Only has an effect on the CVS client. As of this writing, this is only implemented when using a GSSAPI connection (see section Direct connection with GSSAPI) or a Kerberos connection (see section Direct connection with kerberos). Enabling encryption implies that message traffic is also authenticated. Encryption support is not available by default; it must be enabled using a special configure option, ‘--enable-encryption’, when you build CVS.

    -z gzip-level

    Set the compression level. Valid levels are 1 (high speed, low compression) to 9 (low speed, high compression), or 0 to disable compression (the default). Only has an effect on the CVS client.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.5 Common command options

    This section describes the ‘command_options’ that are available across several CVS commands. These options are always given to the right of ‘cvs_command’. Not all commands support all of these options; each option is only supported for commands where it makes sense. However, when a command has one of these options you can almost always count on the same behavior of the option as in other commands. (Other command options, which are listed with the individual commands, may have different behavior from one CVS command to the other).

    Note: the ‘history’ command is an exception; it supports many options that conflict even with these standard options.

    -D date_spec

    Use the most recent revision no later than date_spec. date_spec is a single argument, a date description specifying a date in the past.

    The specification is sticky when you use it to make a private copy of a source file; that is, when you get a working file using ‘-D’, CVS records the date you specified, so that further updates in the same directory will use the same date (for more information on sticky tags/dates, see section Sticky tags).

    -D’ is available with the annotate, checkout, diff, export, history, rdiff, rtag, tag, and update commands. (The history command uses this option in a slightly different way; see section history options).

    A wide variety of date formats are supported by CVS. The most standard ones are ISO8601 (from the International Standards Organization) and the Internet e-mail standard (specified in RFC822 as amended by RFC1123).

    ISO8601 dates have many variants but a few examples are:

     
    1972-09-24
    1972-09-24 20:05
    

    There are a lot more ISO8601 date formats, and CVS accepts many of them, but you probably don’t want to hear the whole long story :-).

    In addition to the dates allowed in Internet e-mail itself, CVS also allows some of the fields to be omitted. For example:

     
    24 Sep 1972 20:05
    24 Sep
    

    The date is interpreted as being in the local timezone, unless a specific timezone is specified.

    These two date formats are preferred. However, CVS currently accepts a wide variety of other date formats. They are intentionally not documented here in any detail, and future versions of CVS might not accept all of them.

    One such format is month/day/year. This may confuse people who are accustomed to having the month and day in the other order; ‘1/4/96’ is January 4, not April 1.

    Remember to quote the argument to the ‘-D’ flag so that your shell doesn’t interpret spaces as argument separators. A command using the ‘-D’ flag can look like this:

     
    $ cvs diff -D "1 hour ago" cvs.texinfo
    
    -f

    When you specify a particular date or tag to CVS commands, they normally ignore files that do not contain the tag (or did not exist prior to the date) that you specified. Use the ‘-f’ option if you want files retrieved even when there is no match for the tag or date. (The most recent revision of the file will be used).

    Note that even with ‘-f’, a tag that you specify must exist (that is, in some file, not necessary in every file). This is so that CVS will continue to give an error if you mistype a tag name.

    -f’ is available with these commands: annotate, checkout, export, rdiff, rtag, and update.

    WARNING: The commit and remove commands also have a ‘-f’ option, but it has a different behavior for those commands. See commit options, and Removing files.

    -k kflag

    Override the default processing of RCS keywords other than ‘-kb’. See section Keyword substitution, for the meaning of kflag. Used with the checkout and update commands, your kflag specification is sticky; that is, when you use this option with a checkout or update command, CVS associates your selected kflag with any files it operates on, and continues to use that kflag with future commands on the same files until you specify otherwise.

    The ‘-k’ option is available with the add, checkout, diff, export, import and update commands.

    WARNING: Prior to CVS version 1.12.2, the ‘-k’ flag overrode the ‘-kb’ indication for a binary file. This could sometimes corrupt binary files. See section Merging and keywords, for more.

    -l

    Local; run only in current working directory, rather than recursing through subdirectories.

    Available with the following commands: annotate, checkout, commit, diff, edit, editors, export, log, rdiff, remove, rtag, status, tag, unedit, update, watch, and watchers.

    -m message

    Use message as log information, instead of invoking an editor.

    Available with the following commands: add, commit and import.

    -n

    Do not run any tag program. (A program can be specified to run in the modules database (see section The modules file); this option bypasses it).

    Note: this is not the same as the ‘cvs -n’ program option, which you can specify to the left of a cvs command!

    Available with the checkout, commit, export, and rtag commands.

    -P

    Prune empty directories. See Removing directories.

    -p

    Pipe the files retrieved from the repository to standard output, rather than writing them in the current directory. Available with the checkout and update commands.

    -R

    Process directories recursively. This is on by default.

    Available with the following commands: annotate, checkout, commit, diff, edit, editors, export, rdiff, remove, rtag, status, tag, unedit, update, watch, and watchers.

    -r tag

    Use the revision specified by the tag argument instead of the default head revision. As well as arbitrary tags defined with the tag or rtag command, two special tags are always available: ‘HEAD’ refers to the most recent version available in the repository, and ‘BASE’ refers to the revision you last checked out into the current working directory.

    The tag specification is sticky when you use this with checkout or update to make your own copy of a file: CVS remembers the tag and continues to use it on future update commands, until you specify otherwise (for more information on sticky tags/dates, see section Sticky tags).

    The tag can be either a symbolic or numeric tag, as described in Tags–Symbolic revisions, or the name of a branch, as described in Branching and merging.

    Specifying the ‘-q’ global option along with the ‘-r’ command option is often useful, to suppress the warning messages when the RCS file does not contain the specified tag.

    Note: this is not the same as the overall ‘cvs -r’ option, which you can specify to the left of a CVS command!

    -r’ is available with the checkout, commit, diff, history, export, rdiff, rtag, and update commands.

    -W

    Specify file names that should be filtered. You can use this option repeatedly. The spec can be a file name pattern of the same type that you can specify in the ‘.cvswrappers’ file. Available with the following commands: import, and update.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.6 admin—Administration

    • Requires: repository, working directory.
    • Changes: repository.
    • Synonym: rcs

    This is the CVS interface to assorted administrative facilities. Some of them have questionable usefulness for CVS but exist for historical purposes. Some of the questionable options are likely to disappear in the future. This command does work recursively, so extreme care should be used.

    On unix, if there is a group named cvsadmin, only members of that group can run cvs admin commands, except for those specified using the UserAdminOptions configuration option in the ‘CVSROOT/config’ file. Options specified using UserAdminOptions can be run by any user. See The CVSROOT/config configuration file for more on UserAdminOptions.

    The cvsadmin group should exist on the server, or any system running the non-client/server CVS. To disallow cvs admin for all users, create a group with no users in it. On NT, the cvsadmin feature does not exist and all users can run cvs admin.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.6.1 admin options

    Some of these options have questionable usefulness for CVS but exist for historical purposes. Some even make it impossible to use CVS until you undo the effect!

    -Aoldfile

    Might not work together with CVS. Append the access list of oldfile to the access list of the RCS file.

    -alogins

    Might not work together with CVS. Append the login names appearing in the comma-separated list logins to the access list of the RCS file.

    -b[rev]

    Set the default branch to rev. In CVS, you normally do not manipulate default branches; sticky tags (see section Sticky tags) are a better way to decide which branch you want to work on. There is one reason to run cvs admin -b: to revert to the vendor’s version when using vendor branches (see section Reverting to the latest vendor release). There can be no space between ‘-b’ and its argument.

    -cstring

    Sets the comment leader to string. The comment leader is not used by current versions of CVS or RCS 5.7. Therefore, you can almost surely not worry about it. See section Keyword substitution.

    -e[logins]

    Might not work together with CVS. Erase the login names appearing in the comma-separated list logins from the access list of the RCS file. If logins is omitted, erase the entire access list. There can be no space between ‘-e’ and its argument.

    -I

    Run interactively, even if the standard input is not a terminal. This option does not work with the client/server CVS and is likely to disappear in a future release of CVS.

    -i

    Useless with CVS. This creates and initializes a new RCS file, without depositing a revision. With CVS, add files with the cvs add command (see section Adding files to a directory).

    -ksubst

    Set the default keyword substitution to subst. See section Keyword substitution. Giving an explicit ‘-k’ option to cvs update, cvs export, or cvs checkout overrides this default.

    -l[rev]

    Lock the revision with number rev. If a branch is given, lock the latest revision on that branch. If rev is omitted, lock the latest revision on the default branch. There can be no space between ‘-l’ and its argument.

    This can be used in conjunction with the ‘rcslock.pl’ script in the ‘contrib’ directory of the CVS source distribution to provide reserved checkouts (where only one user can be editing a given file at a time). See the comments in that file for details (and see the ‘README’ file in that directory for disclaimers about the unsupported nature of contrib). According to comments in that file, locking must set to strict (which is the default).

    -L

    Set locking to strict. Strict locking means that the owner of an RCS file is not exempt from locking for checkin. For use with CVS, strict locking must be set; see the discussion under the ‘-l’ option above.

    -mrev:msg

    Replace the log message of revision rev with msg.

    -Nname[:[rev]]

    Act like ‘-n’, except override any previous assignment of name. For use with magic branches, see Magic branch numbers.

    -nname[:[rev]]

    Associate the symbolic name name with the branch or revision rev. It is normally better to use ‘cvs tag’ or ‘cvs rtag’ instead. Delete the symbolic name if both ‘:’ and rev are omitted; otherwise, print an error message if name is already associated with another number. If rev is symbolic, it is expanded before association. A rev consisting of a branch number followed by a ‘.’ stands for the current latest revision in the branch. A ‘:’ with an empty rev stands for the current latest revision on the default branch, normally the trunk. For example, ‘cvs admin -nname:’ associates name with the current latest revision of all the RCS files; this contrasts with ‘cvs admin -nname:$’ which associates name with the revision numbers extracted from keyword strings in the corresponding working files.

    -orange

    Deletes (outdates) the revisions given by range.

    Note that this command can be quite dangerous unless you know exactly what you are doing (for example see the warnings below about how the rev1:rev2 syntax is confusing).

    If you are short on disc this option might help you. But think twice before using it—there is no way short of restoring the latest backup to undo this command! If you delete different revisions than you planned, either due to carelessness or (heaven forbid) a CVS bug, there is no opportunity to correct the error before the revisions are deleted. It probably would be a good idea to experiment on a copy of the repository first.

    Specify range in one of the following ways:

    rev1::rev2

    Collapse all revisions between rev1 and rev2, so that CVS only stores the differences associated with going from rev1 to rev2, not intermediate steps. For example, after ‘-o 1.3::1.5’ one can retrieve revision 1.3, revision 1.5, or the differences to get from 1.3 to 1.5, but not the revision 1.4, or the differences between 1.3 and 1.4. Other examples: ‘-o 1.3::1.4’ and ‘-o 1.3::1.3’ have no effect, because there are no intermediate revisions to remove.

    ::rev

    Collapse revisions between the beginning of the branch containing rev and rev itself. The branchpoint and rev are left intact. For example, ‘-o ::1.3.2.6’ deletes revision 1.3.2.1, revision 1.3.2.5, and everything in between, but leaves 1.3 and 1.3.2.6 intact.

    rev::

    Collapse revisions between rev and the end of the branch containing rev. Revision rev is left intact but the head revision is deleted.

    rev

    Delete the revision rev. For example, ‘-o 1.3’ is equivalent to ‘-o 1.2::1.4’.

    rev1:rev2

    Delete the revisions from rev1 to rev2, inclusive, on the same branch. One will not be able to retrieve rev1 or rev2 or any of the revisions in between. For example, the command ‘cvs admin -oR_1_01:R_1_02 .’ is rarely useful. It means to delete revisions up to, and including, the tag R_1_02. But beware! If there are files that have not changed between R_1_02 and R_1_03 the file will have the same numerical revision number assigned to the tags R_1_02 and R_1_03. So not only will it be impossible to retrieve R_1_02; R_1_03 will also have to be restored from the tapes! In most cases you want to specify rev1::rev2 instead.

    :rev

    Delete revisions from the beginning of the branch containing rev up to and including rev.

    rev:

    Delete revisions from revision rev, including rev itself, to the end of the branch containing rev.

    None of the revisions to be deleted may have branches or locks.

    If any of the revisions to be deleted have symbolic names, and one specifies one of the ‘::’ syntaxes, then CVS will give an error and not delete any revisions. If you really want to delete both the symbolic names and the revisions, first delete the symbolic names with cvs tag -d, then run cvs admin -o. If one specifies the non-‘::’ syntaxes, then CVS will delete the revisions but leave the symbolic names pointing to nonexistent revisions. This behavior is preserved for compatibility with previous versions of CVS, but because it isn’t very useful, in the future it may change to be like the ‘::’ case.

    Due to the way CVS handles branches rev cannot be specified symbolically if it is a branch. See section Magic branch numbers, for an explanation.

    Make sure that no-one has checked out a copy of the revision you outdate. Strange things will happen if he starts to edit it and tries to check it back in. For this reason, this option is not a good way to take back a bogus commit; commit a new revision undoing the bogus change instead (see section Merging differences between any two revisions).

    -q

    Run quietly; do not print diagnostics.

    -sstate[:rev]

    Useful with CVS. Set the state attribute of the revision rev to state. If rev is a branch number, assume the latest revision on that branch. If rev is omitted, assume the latest revision on the default branch. Any identifier is acceptable for state. A useful set of states is ‘Exp’ (for experimental), ‘Stab’ (for stable), and ‘Rel’ (for released). By default, the state of a new revision is set to ‘Exp’ when it is created. The state is visible in the output from cvs log (see section log—Print out log information for files), and in the ‘$Log$’ and ‘$State$’ keywords (see section Keyword substitution). Note that CVS uses the dead state for its own purposes; to take a file to or from the dead state use commands like cvs remove and cvs add, not cvs admin -s.

    -t[file]

    Useful with CVS. Write descriptive text from the contents of the named file into the RCS file, deleting the existing text. The file pathname may not begin with ‘-’. The descriptive text can be seen in the output from ‘cvs log’ (see section log—Print out log information for files). There can be no space between ‘-t’ and its argument.

    If file is omitted, obtain the text from standard input, terminated by end-of-file or by a line containing ‘.’ by itself. Prompt for the text if interaction is possible; see ‘-I’.

    -t-string

    Similar to ‘-tfile’. Write descriptive text from the string into the RCS file, deleting the existing text. There can be no space between ‘-t’ and its argument.

    -U

    Set locking to non-strict. Non-strict locking means that the owner of a file need not lock a revision for checkin. For use with CVS, strict locking must be set; see the discussion under the ‘-l’ option above.

    -u[rev]

    See the option ‘-l’ above, for a discussion of using this option with CVS. Unlock the revision with number rev. If a branch is given, unlock the latest revision on that branch. If rev is omitted, remove the latest lock held by the caller. Normally, only the locker of a revision may unlock it; somebody else unlocking a revision breaks the lock. This causes the original locker to be sent a commit notification (see section Telling CVS to notify you). There can be no space between ‘-u’ and its argument.

    -Vn

    In previous versions of CVS, this option meant to write an RCS file which would be acceptable to RCS version n, but it is now obsolete and specifying it will produce an error.

    -xsuffixes

    In previous versions of CVS, this was documented as a way of specifying the names of the RCS files. However, CVS has always required that the RCS files used by CVS end in ‘,v’, so this option has never done anything useful.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.7 checkout—Check out sources for editing

    • Synopsis: checkout [options] modules…
    • Requires: repository.
    • Changes: working directory.
    • Synonyms: co, get

    Create or update a working directory containing copies of the source files specified by modules. You must execute checkout before using most of the other CVS commands, since most of them operate on your working directory.

    The modules are either symbolic names for some collection of source directories and files, or paths to directories or files in the repository. The symbolic names are defined in the ‘modules’ file. See section The modules file.

    Depending on the modules you specify, checkout may recursively create directories and populate them with the appropriate source files. You can then edit these source files at any time (regardless of whether other software developers are editing their own copies of the sources); update them to include new changes applied by others to the source repository; or commit your work as a permanent change to the source repository.

    Note that checkout is used to create directories. The top-level directory created is always added to the directory where checkout is invoked, and usually has the same name as the specified module. In the case of a module alias, the created sub-directory may have a different name, but you can be sure that it will be a sub-directory, and that checkout will show the relative path leading to each file as it is extracted into your private work area (unless you specify the ‘-Q’ global option).

    The files created by checkout are created read-write, unless the ‘-r’ option to CVS (see section Global options) is specified, the CVSREAD environment variable is specified (see section All environment variables which affect CVS), or a watch is in effect for that file (see section Mechanisms to track who is editing files).

    Note that running checkout on a directory that was already built by a prior checkout is also permitted. This is similar to specifying the ‘-d’ option to the update command in the sense that new directories that have been created in the repository will appear in your work area. However, checkout takes a module name whereas update takes a directory name. Also to use checkout this way it must be run from the top level directory (where you originally ran checkout from), so before you run checkout to update an existing directory, don’t forget to change your directory to the top level directory.

    For the output produced by the checkout command see update output.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.7.1 checkout options

    These standard options are supported by checkout (see section Common command options, for a complete description of them):

    -D date

    Use the most recent revision no later than date. This option is sticky, and implies ‘-P’. See Sticky tags, for more information on sticky tags/dates.

    -f

    Only useful with the ‘-D date’ or ‘-r tag’ flags. If no matching revision is found, retrieve the most recent revision (instead of ignoring the file).

    -k kflag

    Process keywords according to kflag. See Keyword substitution. This option is sticky; future updates of this file in this working directory will use the same kflag. The status command can be viewed to see the sticky options. See Quick reference to CVS commands, for more information on the status command.

    -l

    Local; run only in current working directory.

    -n

    Do not run any checkout program (as specified with the ‘-o’ option in the modules file; see section The modules file).

    -P

    Prune empty directories. See Moving and renaming directories.

    -p

    Pipe files to the standard output.

    -R

    Checkout directories recursively. This option is on by default.

    -r tag

    Use revision tag. This option is sticky, and implies ‘-P’. See Sticky tags, for more information on sticky tags/dates.

    In addition to those, you can use these special command options with checkout:

    -A

    Reset any sticky tags, dates, or ‘-k’ options. See Sticky tags, for more information on sticky tags/dates.

    -c

    Copy the module file, sorted, to the standard output, instead of creating or modifying any files or directories in your working directory.

    -d dir

    Create a directory called dir for the working files, instead of using the module name. In general, using this flag is equivalent to using ‘mkdir dir; cd dir’ followed by the checkout command without the ‘-d’ flag.

    There is an important exception, however. It is very convenient when checking out a single item to have the output appear in a directory that doesn’t contain empty intermediate directories. In this case only, CVS tries to “shorten” pathnames to avoid those empty directories.

    For example, given a module ‘foo’ that contains the file ‘bar.c’, the command ‘cvs co -d dir foo’ will create directory ‘dir’ and place ‘bar.c’ inside. Similarly, given a module ‘bar’ which has subdirectory ‘baz’ wherein there is a file ‘quux.c’, the command ‘cvs co -d dir bar/baz’ will create directory ‘dir’ and place ‘quux.c’ inside.

    Using the ‘-N’ flag will defeat this behavior. Given the same module definitions above, ‘cvs co -N -d dir foo’ will create directories ‘dir/foo’ and place ‘bar.c’ inside, while ‘cvs co -N -d dir bar/baz’ will create directories ‘dir/bar/baz’ and place ‘quux.c’ inside.

    -j tag

    With two ‘-j’ options, merge changes from the revision specified with the first ‘-j’ option to the revision specified with the second ‘j’ option, into the working directory.

    With one ‘-j’ option, merge changes from the ancestor revision to the revision specified with the ‘-j’ option, into the working directory. The ancestor revision is the common ancestor of the revision which the working directory is based on, and the revision specified in the ‘-j’ option.

    In addition, each -j option can contain an optional date specification which, when used with branches, can limit the chosen revision to one within a specific date. An optional date is specified by adding a colon (:) to the tag: ‘-jSymbolic_Tag:Date_Specifier’.

    See section Branching and merging.

    -N

    Only useful together with ‘-d dir’. With this option, CVS will not “shorten” module paths in your working directory when you check out a single module. See the ‘-d’ flag for examples and a discussion.

    -s

    Like ‘-c’, but include the status of all modules, and sort it by the status string. See section The modules file, for info about the ‘-s’ option that is used inside the modules file to set the module status.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.7.2 checkout examples

    Get a copy of the module ‘tc’:

     
    $ cvs checkout tc
    

    Get a copy of the module ‘tc’ as it looked one day ago:

     
    $ cvs checkout -D yesterday tc
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.8 commit—Check files into the repository

    • Synopsis: commit [-lnRf] [-m ’log_message’ | -F file] [-r revision] [files…]
    • Requires: working directory, repository.
    • Changes: repository.
    • Synonym: ci

    Use commit when you want to incorporate changes from your working source files into the source repository.

    If you don’t specify particular files to commit, all of the files in your working current directory are examined. commit is careful to change in the repository only those files that you have really changed. By default (or if you explicitly specify the ‘-R’ option), files in subdirectories are also examined and committed if they have changed; you can use the ‘-l’ option to limit commit to the current directory only.

    commit verifies that the selected files are up to date with the current revisions in the source repository; it will notify you, and exit without committing, if any of the specified files must be made current first with update (see section update—Bring work tree in sync with repository). commit does not call the update command for you, but rather leaves that for you to do when the time is right.

    When all is well, an editor is invoked to allow you to enter a log message that will be written to one or more logging programs (see section The modules file, and see section Loginfo) and placed in the RCS file inside the repository. This log message can be retrieved with the log command; see log—Print out log information for files. You can specify the log message on the command line with the ‘-m message’ option, and thus avoid the editor invocation, or use the ‘-F file’ option to specify that the argument file contains the log message.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.8.1 commit options

    These standard options are supported by commit (see section Common command options, for a complete description of them):

    -l

    Local; run only in current working directory.

    -R

    Commit directories recursively. This is on by default.

    -r revision

    Commit to revision. revision must be either a branch, or a revision on the main trunk that is higher than any existing revision number (see section Assigning revisions). You cannot commit to a specific revision on a branch.

    commit also supports these options:

    -F file

    Read the log message from file, instead of invoking an editor.

    -f

    Note that this is not the standard behavior of the ‘-f’ option as defined in Common command options.

    Force CVS to commit a new revision even if you haven’t made any changes to the file. If the current revision of file is 1.7, then the following two commands are equivalent:

     
    $ cvs commit -f file
    $ cvs commit -r 1.8 file
    

    The ‘-f’ option disables recursion (i.e., it implies ‘-l’). To force CVS to commit a new revision for all files in all subdirectories, you must use ‘-f -R’.

    -m message

    Use message as the log message, instead of invoking an editor.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.8.2 commit examples


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.8.2.1 Committing to a branch

    You can commit to a branch revision (one that has an even number of dots) with the ‘-r’ option. To create a branch revision, use the ‘-b’ option of the rtag or tag commands (see section Branching and merging). Then, either checkout or update can be used to base your sources on the newly created branch. From that point on, all commit changes made within these working sources will be automatically added to a branch revision, thereby not disturbing main-line development in any way. For example, if you had to create a patch to the 1.2 version of the product, even though the 2.0 version is already under development, you might do:

     
    $ cvs rtag -b -r FCS1_2 FCS1_2_Patch product_module
    $ cvs checkout -r FCS1_2_Patch product_module
    $ cd product_module
    [[ hack away ]]
    $ cvs commit
    

    This works automatically since the ‘-r’ option is sticky.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.8.2.2 Creating the branch after editing

    Say you have been working on some extremely experimental software, based on whatever revision you happened to checkout last week. If others in your group would like to work on this software with you, but without disturbing main-line development, you could commit your change to a new branch. Others can then checkout your experimental stuff and utilize the full benefit of CVS conflict resolution. The scenario might look like:

     
    [[ hacked sources are present ]]
    $ cvs tag -b EXPR1
    $ cvs update -r EXPR1
    $ cvs commit
    

    The update command will make the ‘-r EXPR1’ option sticky on all files. Note that your changes to the files will never be removed by the update command. The commit will automatically commit to the correct branch, because the ‘-r’ is sticky. You could also do like this:

     
    [[ hacked sources are present ]]
    $ cvs tag -b EXPR1
    $ cvs commit -r EXPR1
    

    but then, only those files that were changed by you will have the ‘-r EXPR1’ sticky flag. If you hack away, and commit without specifying the ‘-r EXPR1’ flag, some files may accidentally end up on the main trunk.

    To work with you on the experimental change, others would simply do

     
    $ cvs checkout -r EXPR1 whatever_module
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.9 diff—Show differences between revisions

    • Synopsis: diff [-lR] [-k kflag] [format_options] [[-r rev1 | -D date1] [-r rev2 | -D date2]] [files…]
    • Requires: working directory, repository.
    • Changes: nothing.

    The diff command is used to compare different revisions of files. The default action is to compare your working files with the revisions they were based on, and report any differences that are found.

    If any file names are given, only those files are compared. If any directories are given, all files under them will be compared.

    The exit status for diff is different than for other CVS commands; for details CVS’s exit status.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.9.1 diff options

    These standard options are supported by diff (see section Common command options, for a complete description of them):

    -D date

    Use the most recent revision no later than date. See ‘-r’ for how this affects the comparison.

    -k kflag

    Process keywords according to kflag. See Keyword substitution.

    -l

    Local; run only in current working directory.

    -R

    Examine directories recursively. This option is on by default.

    -r tag

    Compare with revision tag. Zero, one or two ‘-r’ options can be present. With no ‘-r’ option, the working file will be compared with the revision it was based on. With one ‘-r’, that revision will be compared to your current working file. With two ‘-r’ options those two revisions will be compared (and your working file will not affect the outcome in any way).

    One or both ‘-r’ options can be replaced by a ‘-D date’ option, described above.

    The following options specify the format of the output. They have the same meaning as in GNU diff. Most options have two equivalent names, one of which is a single letter preceded by ‘-’, and the other of which is a long name preceded by ‘--’.

    -lines

    Show lines (an integer) lines of context. This option does not specify an output format by itself; it has no effect unless it is combined with ‘-c’ or ‘-u’. This option is obsolete. For proper operation, patch typically needs at least two lines of context.

    -a

    Treat all files as text and compare them line-by-line, even if they do not seem to be text.

    -b

    Ignore trailing white space and consider all other sequences of one or more white space characters to be equivalent.

    -B

    Ignore changes that just insert or delete blank lines.

    --binary

    Read and write data in binary mode.

    --brief

    Report only whether the files differ, not the details of the differences.

    -c

    Use the context output format.

    -C lines
    --context[=lines]

    Use the context output format, showing lines (an integer) lines of context, or three if lines is not given. For proper operation, patch typically needs at least two lines of context.

    --changed-group-format=format

    Use format to output a line group containing differing lines from both files in if-then-else format. See section Line group formats.

    -d

    Change the algorithm to perhaps find a smaller set of changes. This makes diff slower (sometimes much slower).

    -e
    --ed

    Make output that is a valid ed script.

    --expand-tabs

    Expand tabs to spaces in the output, to preserve the alignment of tabs in the input files.

    -f

    Make output that looks vaguely like an ed script but has changes in the order they appear in the file.

    -F regexp

    In context and unified format, for each hunk of differences, show some of the last preceding line that matches regexp.

    --forward-ed

    Make output that looks vaguely like an ed script but has changes in the order they appear in the file.

    -H

    Use heuristics to speed handling of large files that have numerous scattered small changes.

    --horizon-lines=lines

    Do not discard the last lines lines of the common prefix and the first lines lines of the common suffix.

    -i

    Ignore changes in case; consider upper- and lower-case letters equivalent.

    -I regexp

    Ignore changes that just insert or delete lines that match regexp.

    --ifdef=name

    Make merged if-then-else output using name.

    --ignore-all-space

    Ignore white space when comparing lines.

    --ignore-blank-lines

    Ignore changes that just insert or delete blank lines.

    --ignore-case

    Ignore changes in case; consider upper- and lower-case to be the same.

    --ignore-matching-lines=regexp

    Ignore changes that just insert or delete lines that match regexp.

    --ignore-space-change

    Ignore trailing white space and consider all other sequences of one or more white space characters to be equivalent.

    --initial-tab

    Output a tab rather than a space before the text of a line in normal or context format. This causes the alignment of tabs in the line to look normal.

    -L label

    Use label instead of the file name in the context format and unified format headers.

    --label=label

    Use label instead of the file name in the context format and unified format headers.

    --left-column

    Print only the left column of two common lines in side by side format.

    --line-format=format

    Use format to output all input lines in if-then-else format. See section Line formats.

    --minimal

    Change the algorithm to perhaps find a smaller set of changes. This makes diff slower (sometimes much slower).

    -n

    Output RCS-format diffs; like ‘-f’ except that each command specifies the number of lines affected.

    -N
    --new-file

    In directory comparison, if a file is found in only one directory, treat it as present but empty in the other directory.

    --new-group-format=format

    Use format to output a group of lines taken from just the second file in if-then-else format. See section Line group formats.

    --new-line-format=format

    Use format to output a line taken from just the second file in if-then-else format. See section Line formats.

    --old-group-format=format

    Use format to output a group of lines taken from just the first file in if-then-else format. See section Line group formats.

    --old-line-format=format

    Use format to output a line taken from just the first file in if-then-else format. See section Line formats.

    -p

    Show which C function each change is in.

    --rcs

    Output RCS-format diffs; like ‘-f’ except that each command specifies the number of lines affected.

    --report-identical-files
    -s

    Report when two files are the same.

    --show-c-function

    Show which C function each change is in.

    --show-function-line=regexp

    In context and unified format, for each hunk of differences, show some of the last preceding line that matches regexp.

    --side-by-side

    Use the side by side output format.

    --speed-large-files

    Use heuristics to speed handling of large files that have numerous scattered small changes.

    --suppress-common-lines

    Do not print common lines in side by side format.

    -t

    Expand tabs to spaces in the output, to preserve the alignment of tabs in the input files.

    -T

    Output a tab rather than a space before the text of a line in normal or context format. This causes the alignment of tabs in the line to look normal.

    --text

    Treat all files as text and compare them line-by-line, even if they do not appear to be text.

    -u

    Use the unified output format.

    --unchanged-group-format=format

    Use format to output a group of common lines taken from both files in if-then-else format. See section Line group formats.

    --unchanged-line-format=format

    Use format to output a line common to both files in if-then-else format. See section Line formats.

    -U lines
    --unified[=lines]

    Use the unified output format, showing lines (an integer) lines of context, or three if lines is not given. For proper operation, patch typically needs at least two lines of context.

    -w

    Ignore white space when comparing lines.

    -W columns
    --width=columns

    Use an output width of columns in side by side format.

    -y

    Use the side by side output format.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.9.1.1 Line group formats

    Line group formats let you specify formats suitable for many applications that allow if-then-else input, including programming languages and text formatting languages. A line group format specifies the output format for a contiguous group of similar lines.

    For example, the following command compares the TeX file ‘myfile’ with the original version from the repository, and outputs a merged file in which old regions are surrounded by ‘\begin{em}’-‘\end{em}’ lines, and new regions are surrounded by ‘\begin{bf}’-‘\end{bf}’ lines.

     
    cvs diff \
       --old-group-format='\begin{em}
    %<\end{em}
    ' \
       --new-group-format='\begin{bf}
    %>\end{bf}
    ' \
       myfile
    

    The following command is equivalent to the above example, but it is a little more verbose, because it spells out the default line group formats.

     
    cvs diff \
       --old-group-format='\begin{em}
    %<\end{em}
    ' \
       --new-group-format='\begin{bf}
    %>\end{bf}
    ' \
       --unchanged-group-format='%=' \
       --changed-group-format='\begin{em}
    %<\end{em}
    \begin{bf}
    %>\end{bf}
    ' \
       myfile
    

    Here is a more advanced example, which outputs a diff listing with headers containing line numbers in a “plain English” style.

     
    cvs diff \
       --unchanged-group-format='' \
       --old-group-format='-------- %dn line%(n=1?:s) deleted at %df:
    %<' \
       --new-group-format='-------- %dN line%(N=1?:s) added after %de:
    %>' \
       --changed-group-format='-------- %dn line%(n=1?:s) changed at %df:
    %<-------- to:
    %>' \
       myfile
    

    To specify a line group format, use one of the options listed below. You can specify up to four line group formats, one for each kind of line group. You should quote format, because it typically contains shell metacharacters.

    --old-group-format=format

    These line groups are hunks containing only lines from the first file. The default old group format is the same as the changed group format if it is specified; otherwise it is a format that outputs the line group as-is.

    --new-group-format=format

    These line groups are hunks containing only lines from the second file. The default new group format is same as the changed group format if it is specified; otherwise it is a format that outputs the line group as-is.

    --changed-group-format=format

    These line groups are hunks containing lines from both files. The default changed group format is the concatenation of the old and new group formats.

    --unchanged-group-format=format

    These line groups contain lines common to both files. The default unchanged group format is a format that outputs the line group as-is.

    In a line group format, ordinary characters represent themselves; conversion specifications start with ‘%’ and have one of the following forms.

    %<

    stands for the lines from the first file, including the trailing newline. Each line is formatted according to the old line format (see section Line formats).

    %>

    stands for the lines from the second file, including the trailing newline. Each line is formatted according to the new line format.

    %=

    stands for the lines common to both files, including the trailing newline. Each line is formatted according to the unchanged line format.

    %%

    stands for ‘%’.

    %c'C'

    where C is a single character, stands for C. C may not be a backslash or an apostrophe. For example, ‘%c':'’ stands for a colon, even inside the then-part of an if-then-else format, which a colon would normally terminate.

    %c'\O'

    where O is a string of 1, 2, or 3 octal digits, stands for the character with octal code O. For example, ‘%c'\0'’ stands for a null character.

    Fn

    where F is a printf conversion specification and n is one of the following letters, stands for n’s value formatted with F.

    e

    The line number of the line just before the group in the old file.

    f

    The line number of the first line in the group in the old file; equals e + 1.

    l

    The line number of the last line in the group in the old file.

    m

    The line number of the line just after the group in the old file; equals l + 1.

    n

    The number of lines in the group in the old file; equals l - f + 1.

    E, F, L, M, N

    Likewise, for lines in the new file.

    The printf conversion specification can be ‘%d’, ‘%o’, ‘%x’, or ‘%X’, specifying decimal, octal, lower case hexadecimal, or upper case hexadecimal output respectively. After the ‘%’ the following options can appear in sequence: a ‘-’ specifying left-justification; an integer specifying the minimum field width; and a period followed by an optional integer specifying the minimum number of digits. For example, ‘%5dN’ prints the number of new lines in the group in a field of width 5 characters, using the printf format "%5d".

    (A=B?T:E)

    If A equals B then T else E. A and B are each either a decimal constant or a single letter interpreted as above. This format spec is equivalent to T if A’s value equals B’s; otherwise it is equivalent to E.

    For example, ‘%(N=0?no:%dN) line%(N=1?:s)’ is equivalent to ‘no lines’ if N (the number of lines in the group in the new file) is 0, to ‘1 line’ if N is 1, and to ‘%dN lines’ otherwise.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.9.1.2 Line formats

    Line formats control how each line taken from an input file is output as part of a line group in if-then-else format.

    For example, the following command outputs text with a one-column change indicator to the left of the text. The first column of output is ‘-’ for deleted lines, ‘|’ for added lines, and a space for unchanged lines. The formats contain newline characters where newlines are desired on output.

     
    cvs diff \
       --old-line-format='-%l
    ' \
       --new-line-format='|%l
    ' \
       --unchanged-line-format=' %l
    ' \
       myfile
    

    To specify a line format, use one of the following options. You should quote format, since it often contains shell metacharacters.

    --old-line-format=format

    formats lines just from the first file.

    --new-line-format=format

    formats lines just from the second file.

    --unchanged-line-format=format

    formats lines common to both files.

    --line-format=format

    formats all lines; in effect, it sets all three above options simultaneously.

    In a line format, ordinary characters represent themselves; conversion specifications start with ‘%’ and have one of the following forms.

    %l

    stands for the contents of the line, not counting its trailing newline (if any). This format ignores whether the line is incomplete.

    %L

    stands for the contents of the line, including its trailing newline (if any). If a line is incomplete, this format preserves its incompleteness.

    %%

    stands for ‘%’.

    %c'C'

    where C is a single character, stands for C. C may not be a backslash or an apostrophe. For example, ‘%c':'’ stands for a colon.

    %c'\O'

    where O is a string of 1, 2, or 3 octal digits, stands for the character with octal code O. For example, ‘%c'\0'’ stands for a null character.

    Fn

    where F is a printf conversion specification, stands for the line number formatted with F. For example, ‘%.5dn’ prints the line number using the printf format "%.5d". See section Line group formats, for more about printf conversion specifications.

    The default line format is ‘%l’ followed by a newline character.

    If the input contains tab characters and it is important that they line up on output, you should ensure that ‘%l’ or ‘%L’ in a line format is just after a tab stop (e.g. by preceding ‘%l’ or ‘%L’ with a tab character), or you should use the ‘-t’ or ‘--expand-tabs’ option.

    Taken together, the line and line group formats let you specify many different formats. For example, the following command uses a format similar to diff’s normal format. You can tailor this command to get fine control over diff’s output.

     
    cvs diff \
       --old-line-format='< %l
    ' \
       --new-line-format='> %l
    ' \
       --old-group-format='%df%(f=l?:,%dl)d%dE
    %<' \
       --new-group-format='%dea%dF%(F=L?:,%dL)
    %>' \
       --changed-group-format='%df%(f=l?:,%dl)c%dF%(F=L?:,%dL)
    %<---
    %>' \
       --unchanged-group-format='' \
       myfile
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.9.2 diff examples

    The following line produces a Unidiff (‘-u’ flag) between revision 1.14 and 1.19 of ‘backend.c’. Due to the ‘-kk’ flag no keywords are substituted, so differences that only depend on keyword substitution are ignored.

     
    $ cvs diff -kk -u -r 1.14 -r 1.19 backend.c
    

    Suppose the experimental branch EXPR1 was based on a set of files tagged RELEASE_1_0. To see what has happened on that branch, the following can be used:

     
    $ cvs diff -r RELEASE_1_0 -r EXPR1
    

    A command like this can be used to produce a context diff between two releases:

     
    $ cvs diff -c -r RELEASE_1_0 -r RELEASE_1_1 > diffs
    

    If you are maintaining ChangeLogs, a command like the following just before you commit your changes may help you write the ChangeLog entry. All local modifications that have not yet been committed will be printed.

     
    $ cvs diff -u | less
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.10 export—Export sources from CVS, similar to checkout

    • Synopsis: export [-flNnR] [-r rev|-D date] [-k subst] [-d dir] module…
    • Requires: repository.
    • Changes: current directory.

    This command is a variant of checkout; use it when you want a copy of the source for module without the CVS administrative directories. For example, you might use export to prepare source for shipment off-site. This command requires that you specify a date or tag (with ‘-D’ or ‘-r’), so that you can count on reproducing the source you ship to others (and thus it always prunes empty directories).

    One often would like to use ‘-kv’ with cvs export. This causes any keywords to be expanded such that an import done at some other site will not lose the keyword revision information. But be aware that doesn’t handle an export containing binary files correctly. Also be aware that after having used ‘-kv’, one can no longer use the ident command (which is part of the RCS suite—see ident(1)) which looks for keyword strings. If you want to be able to use ident you must not use ‘-kv’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.10.1 export options

    These standard options are supported by export (see section Common command options, for a complete description of them):

    -D date

    Use the most recent revision no later than date.

    -f

    If no matching revision is found, retrieve the most recent revision (instead of ignoring the file).

    -l

    Local; run only in current working directory.

    -n

    Do not run any checkout program.

    -R

    Export directories recursively. This is on by default.

    -r tag

    Use revision tag.

    In addition, these options (that are common to checkout and export) are also supported:

    -d dir

    Create a directory called dir for the working files, instead of using the module name. See section checkout options, for complete details on how CVS handles this flag.

    -k subst

    Set keyword expansion mode (see section Substitution modes).

    -N

    Only useful together with ‘-d dir’. See section checkout options, for complete details on how CVS handles this flag.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.11 history—Show status of files and users

    • Synopsis: history [-report] [-flags] [-options args] [files…]
    • Requires: the file ‘$CVSROOT/CVSROOT/history
    • Changes: nothing.

    CVS can keep a history file that tracks each use of the checkout, commit, rtag, update, and release commands. You can use history to display this information in various formats.

    Logging must be enabled by creating the file ‘$CVSROOT/CVSROOT/history’.

    Note: history uses ‘-f’, ‘-l’, ‘-n’, and ‘-p’ in ways that conflict with the normal use inside CVS (see section Common command options).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.11.1 history options

    Several options (shown above as ‘-report’) control what kind of report is generated:

    -c

    Report on each time commit was used (i.e., each time the repository was modified).

    -e

    Everything (all record types). Equivalent to specifying ‘-x’ with all record types. Of course, ‘-e’ will also include record types which are added in a future version of CVS; if you are writing a script which can only handle certain record types, you’ll want to specify ‘-x’.

    -m module

    Report on a particular module. (You can meaningfully use ‘-m’ more than once on the command line.)

    -o

    Report on checked-out modules. This is the default report type.

    -T

    Report on all tags.

    -x type

    Extract a particular set of record types type from the CVS history. The types are indicated by single letters, which you may specify in combination.

    Certain commands have a single record type:

    F

    release

    O

    checkout

    E

    export

    T

    rtag

    One of four record types may result from an update:

    C

    A merge was necessary but collisions were detected (requiring manual merging).

    G

    A merge was necessary and it succeeded.

    U

    A working file was copied from the repository.

    W

    The working copy of a file was deleted during update (because it was gone from the repository).

    One of three record types results from commit:

    A

    A file was added for the first time.

    M

    A file was modified.

    R

    A file was removed.

    The options shown as ‘-flags’ constrain or expand the report without requiring option arguments:

    -a

    Show data for all users (the default is to show data only for the user executing history).

    -l

    Show last modification only.

    -w

    Show only the records for modifications done from the same working directory where history is executing.

    The options shown as ‘-options args’ constrain the report based on an argument:

    -b str

    Show data back to a record containing the string str in either the module name, the file name, or the repository path.

    -D date

    Show data since date. This is slightly different from the normal use of ‘-D date’, which selects the newest revision older than date.

    -f file

    Show data for a particular file (you can specify several ‘-f’ options on the same command line). This is equivalent to specifying the file on the command line.

    -n module

    Show data for a particular module (you can specify several ‘-n’ options on the same command line).

    -p repository

    Show data for a particular source repository (you can specify several ‘-p’ options on the same command line).

    -r rev

    Show records referring to revisions since the revision or tag named rev appears in individual RCS files. Each RCS file is searched for the revision or tag.

    -t tag

    Show records since tag tag was last added to the history file. This differs from the ‘-r’ flag above in that it reads only the history file, not the RCS files, and is much faster.

    -u name

    Show records for user name.

    -z timezone

    Show times in the selected records using the specified time zone instead of UTC.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.12 import—Import sources into CVS, using vendor branches

    • Synopsis: import [-options] repository vendortag releasetag…
    • Requires: Repository, source distribution directory.
    • Changes: repository.

    Use import to incorporate an entire source distribution from an outside source (e.g., a source vendor) into your source repository directory. You can use this command both for initial creation of a repository, and for wholesale updates to the module from the outside source. See section Tracking third-party sources, for a discussion on this subject.

    The repository argument gives a directory name (or a path to a directory) under the CVS root directory for repositories; if the directory did not exist, import creates it.

    When you use import for updates to source that has been modified in your source repository (since a prior import), it will notify you of any files that conflict in the two branches of development; use ‘checkout -j’ to reconcile the differences, as import instructs you to do.

    If CVS decides a file should be ignored (see section Ignoring files via cvsignore), it does not import it and prints ‘I ’ followed by the filename (see section import output, for a complete description of the output).

    If the file ‘$CVSROOT/CVSROOT/cvswrappers’ exists, any file whose names match the specifications in that file will be treated as packages and the appropriate filtering will be performed on the file/directory before being imported. See section The cvswrappers file.

    The outside source is saved in a first-level branch, by default 1.1.1. Updates are leaves of this branch; for example, files from the first imported collection of source will be revision 1.1.1.1, then files from the first imported update will be revision 1.1.1.2, and so on.

    At least three arguments are required. repository is needed to identify the collection of source. vendortag is a tag for the entire branch (e.g., for 1.1.1). You must also specify at least one releasetag to identify the files at the leaves created each time you execute import.

    Note that import does not change the directory in which you invoke it. In particular, it does not set up that directory as a CVS working directory; if you want to work with the sources import them first and then check them out into a different directory (see section Getting the source).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.12.1 import options

    This standard option is supported by import (see section Common command options, for a complete description):

    -m message

    Use message as log information, instead of invoking an editor.

    There are the following additional special options.

    -b branch

    See Multiple vendor branches.

    -k subst

    Indicate the keyword expansion mode desired. This setting will apply to all files created during the import, but not to any files that previously existed in the repository. See Substitution modes, for a list of valid ‘-k’ settings.

    -I name

    Specify file names that should be ignored during import. You can use this option repeatedly. To avoid ignoring any files at all (even those ignored by default), specify ‘-I !’.

    name can be a file name pattern of the same type that you can specify in the ‘.cvsignore’ file. See section Ignoring files via cvsignore.

    -W spec

    Specify file names that should be filtered during import. You can use this option repeatedly.

    spec can be a file name pattern of the same type that you can specify in the ‘.cvswrappers’ file. See section The cvswrappers file.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.12.2 import output

    import keeps you informed of its progress by printing a line for each file, preceded by one character indicating the status of the file:

    U file

    The file already exists in the repository and has not been locally modified; a new revision has been created (if necessary).

    N file

    The file is a new file which has been added to the repository.

    C file

    The file already exists in the repository but has been locally modified; you will have to merge the changes.

    I file

    The file is being ignored (see section Ignoring files via cvsignore).

    L file

    The file is a symbolic link; cvs import ignores symbolic links. People periodically suggest that this behavior should be changed, but if there is a consensus on what it should be changed to, it is not apparent. (Various options in the ‘modules’ file can be used to recreate symbolic links on checkout, update, etc.; see section The modules file.)


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.12.3 import examples

    See Tracking third-party sources, and Creating a directory tree from a number of files.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.13 log—Print out log information for files

    • Synopsis: log [options] [files…]
    • Requires: repository, working directory.
    • Changes: nothing.

    Display log information for files. log used to call the RCS utility rlog. Although this is no longer true in the current sources, this history determines the format of the output and the options, which are not quite in the style of the other CVS commands.

    The output includes the location of the RCS file, the head revision (the latest revision on the trunk), all symbolic names (tags) and some other things. For each revision, the revision number, the author, the number of lines added/deleted and the log message are printed. All times are displayed in Coordinated Universal Time (UTC). (Other parts of CVS print times in the local timezone).

    Note: log uses ‘-R’ in a way that conflicts with the normal use inside CVS (see section Common command options).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.13.1 log options

    By default, log prints all information that is available. All other options restrict the output.

    -b

    Print information about the revisions on the default branch, normally the highest branch on the trunk.

    -d dates

    Print information about revisions with a checkin date/time in the range given by the semicolon-separated list of dates. The date formats accepted are those accepted by the ‘-D’ option to many other CVS commands (see section Common command options). Dates can be combined into ranges as follows:

    d1<d2
    d2>d1

    Select the revisions that were deposited between d1 and d2.

    <d
    d>

    Select all revisions dated d or earlier.

    d<
    >d

    Select all revisions dated d or later.

    d

    Select the single, latest revision dated d or earlier.

    The ‘>’ or ‘<’ characters may be followed by ‘=’ to indicate an inclusive range rather than an exclusive one.

    Note that the separator is a semicolon (;).

    -h

    Print only the name of the RCS file, name of the file in the working directory, head, default branch, access list, locks, symbolic names, and suffix.

    -l

    Local; run only in current working directory. (Default is to run recursively).

    -N

    Do not print the list of tags for this file. This option can be very useful when your site uses a lot of tags, so rather than "more"’ing over 3 pages of tag information, the log information is presented without tags at all.

    -R

    Print only the name of the RCS file.

    -rrevisions

    Print information about revisions given in the comma-separated list revisions of revisions and ranges. The following table explains the available range formats:

    rev1:rev2

    Revisions rev1 to rev2 (which must be on the same branch).

    rev1::rev2

    The same, but excluding rev1.

    :rev
    ::rev

    Revisions from the beginning of the branch up to and including rev.

    rev:

    Revisions starting with rev to the end of the branch containing rev.

    rev::

    Revisions starting just after rev to the end of the branch containing rev.

    branch

    An argument that is a branch means all revisions on that branch.

    branch1:branch2
    branch1::branch2

    A range of branches means all revisions on the branches in that range.

    branch.

    The latest revision in branch.

    A bare ‘-r’ with no revisions means the latest revision on the default branch, normally the trunk. There can be no space between the ‘-r’ option and its argument.

    -S

    Suppress the header if no revisions are selected.

    -s states

    Print information about revisions whose state attributes match one of the states given in the comma-separated list states.

    -t

    Print the same as ‘-h’, plus the descriptive text.

    -wlogins

    Print information about revisions checked in by users with login names appearing in the comma-separated list logins. If logins is omitted, the user’s login is assumed. There can be no space between the ‘-w’ option and its argument.

    log prints the intersection of the revisions selected with the options ‘-d’, ‘-s’, and ‘-w’, intersected with the union of the revisions selected by ‘-b’ and ‘-r’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.13.2 log examples

    Contributed examples are gratefully accepted.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.14 rdiff—’patch’ format diffs between releases

    • rdiff [-flags] [-V vn] [-r t|-D d [-r t2|-D d2]] modules…
    • Requires: repository.
    • Changes: nothing.
    • Synonym: patch

    Builds a Larry Wall format patch(1) file between two releases, that can be fed directly into the patch program to bring an old release up-to-date with the new release. (This is one of the few CVS commands that operates directly from the repository, and doesn’t require a prior checkout.) The diff output is sent to the standard output device.

    You can specify (using the standard ‘-r’ and ‘-D’ options) any combination of one or two revisions or dates. If only one revision or date is specified, the patch file reflects differences between that revision or date and the current head revisions in the RCS file.

    Note that if the software release affected is contained in more than one directory, then it may be necessary to specify the ‘-p’ option to the patch command when patching the old sources, so that patch is able to find the files that are located in other directories.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.14.1 rdiff options

    These standard options are supported by rdiff (see section Common command options, for a complete description of them):

    -D date

    Use the most recent revision no later than date.

    -f

    If no matching revision is found, retrieve the most recent revision (instead of ignoring the file).

    -l

    Local; don’t descend subdirectories.

    -R

    Examine directories recursively. This option is on by default.

    -r tag

    Use revision tag.

    In addition to the above, these options are available:

    -c

    Use the context diff format. This is the default format.

    -s

    Create a summary change report instead of a patch. The summary includes information about files that were changed or added between the releases. It is sent to the standard output device. This is useful for finding out, for example, which files have changed between two dates or revisions.

    -t

    A diff of the top two revisions is sent to the standard output device. This is most useful for seeing what the last change to a file was.

    -u

    Use the unidiff format for the context diffs. Remember that old versions of the patch program can’t handle the unidiff format, so if you plan to post this patch to the net you should probably not use ‘-u’.

    -V vn

    Expand keywords according to the rules current in RCS version vn (the expansion format changed with RCS version 5). Note that this option is no longer accepted. CVS will always expand keywords the way that RCS version 5 does.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.14.2 rdiff examples

    Suppose you receive mail from foo@example.net asking for an update from release 1.2 to 1.4 of the tc compiler. You have no such patches on hand, but with CVS that can easily be fixed with a command such as this:

     
    $ cvs rdiff -c -r FOO1_2 -r FOO1_4 tc | \
    $$ Mail -s 'The patches you asked for' foo@example.net
    

    Suppose you have made release 1.3, and forked a branch called ‘R_1_3fix’ for bugfixes. ‘R_1_3_1’ corresponds to release 1.3.1, which was made some time ago. Now, you want to see how much development has been done on the branch. This command can be used:

     
    $ cvs patch -s -r R_1_3_1 -r R_1_3fix module-name
    cvs rdiff: Diffing module-name
    File ChangeLog,v changed from revision 1.52.2.5 to 1.52.2.6
    File foo.c,v changed from revision 1.52.2.3 to 1.52.2.4
    File bar.h,v changed from revision 1.29.2.1 to 1.2
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.15 release—Indicate that a Module is no longer in use

    • release [-d] directories…
    • Requires: Working directory.
    • Changes: Working directory, history log.

    This command is meant to safely cancel the effect of ‘cvs checkout’. Since CVS doesn’t lock files, it isn’t strictly necessary to use this command. You can always simply delete your working directory, if you like; but you risk losing changes you may have forgotten, and you leave no trace in the CVS history file (see section The history file) that you’ve abandoned your checkout.

    Use ‘cvs release’ to avoid these problems. This command checks that no uncommitted changes are present; that you are executing it from immediately above a CVS working directory; and that the repository recorded for your files is the same as the repository defined in the module database.

    If all these conditions are true, ‘cvs release’ leaves a record of its execution (attesting to your intentionally abandoning your checkout) in the CVS history log.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.15.1 release options

    The release command supports one command option:

    -d

    Delete your working copy of the file if the release succeeds. If this flag is not given your files will remain in your working directory.

    WARNING: The release command deletes all directories and files recursively. This has the very serious side-effect that any directory that you have created inside your checked-out sources, and not added to the repository (using the add command; see section Adding files to a directory) will be silently deleted—even if it is non-empty!


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.15.2 release output

    Before release releases your sources it will print a one-line message for any file that is not up-to-date.

    U file
    P file

    There exists a newer revision of this file in the repository, and you have not modified your local copy of the file (‘U’ and ‘P’ mean the same thing).

    A file

    The file has been added to your private copy of the sources, but has not yet been committed to the repository. If you delete your copy of the sources this file will be lost.

    R file

    The file has been removed from your private copy of the sources, but has not yet been removed from the repository, since you have not yet committed the removal. See section commit—Check files into the repository.

    M file

    The file is modified in your working directory. There might also be a newer revision inside the repository.

    ? file

    file is in your working directory, but does not correspond to anything in the source repository, and is not in the list of files for CVS to ignore (see the description of the ‘-I’ option, and see section Ignoring files via cvsignore). If you remove your working sources, this file will be lost.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.15.3 release examples

    Release the ‘tc’ directory, and delete your local working copy of the files.

     
    $ cd ..         # You must stand immediately above the
                    # sources when you issue ‘cvs release’.
    $ cvs release -d tc
    You have [0] altered files in this repository.
    Are you sure you want to release (and delete) directory `tc': y
    $
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.16 update—Bring work tree in sync with repository

    • update [-ACdflPpR] [-I name] [-j rev [-j rev]] [-k kflag] [-r tag|-D date] [-W spec] files…
    • Requires: repository, working directory.
    • Changes: working directory.

    After you’ve run checkout to create your private copy of source from the common repository, other developers will continue changing the central source. From time to time, when it is convenient in your development process, you can use the update command from within your working directory to reconcile your work with any revisions applied to the source repository since your last checkout or update. Without the -C option, update will also merge any differences between the local copy of files and their base revisions into any destination revisions specified with -r, -D, or -A.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.16.1 update options

    These standard options are available with update (see section Common command options, for a complete description of them):

    -D date

    Use the most recent revision no later than date. This option is sticky, and implies ‘-P’. See Sticky tags, for more information on sticky tags/dates.

    -f

    Only useful with the ‘-D date’ or ‘-r tag’ flags. If no matching revision is found, retrieve the most recent revision (instead of ignoring the file).

    -k kflag

    Process keywords according to kflag. See Keyword substitution. This option is sticky; future updates of this file in this working directory will use the same kflag. The status command can be viewed to see the sticky options. See Quick reference to CVS commands, for more information on the status command.

    -l

    Local; run only in current working directory. See section Recursive behavior.

    -P

    Prune empty directories. See Moving and renaming directories.

    -p

    Pipe files to the standard output.

    -R

    Update directories recursively (default). See section Recursive behavior.

    -r rev

    Retrieve revision/tag rev. This option is sticky, and implies ‘-P’. See Sticky tags, for more information on sticky tags/dates.

    These special options are also available with update.

    -A

    Reset any sticky tags, dates, or ‘-k’ options. See Sticky tags, for more information on sticky tags/dates.

    -C

    Overwrite locally modified files with clean copies from the repository (the modified file is saved in ‘.#file.revision’, however).

    -d

    Create any directories that exist in the repository if they’re missing from the working directory. Normally, update acts only on directories and files that were already enrolled in your working directory.

    This is useful for updating directories that were created in the repository since the initial checkout; but it has an unfortunate side effect. If you deliberately avoided certain directories in the repository when you created your working directory (either through use of a module name or by listing explicitly the files and directories you wanted on the command line), then updating with ‘-d’ will create those directories, which may not be what you want.

    -I name

    Ignore files whose names match name (in your working directory) during the update. You can specify ‘-I’ more than once on the command line to specify several files to ignore. Use ‘-I !’ to avoid ignoring any files at all. See section Ignoring files via cvsignore, for other ways to make CVS ignore some files.

    -Wspec

    Specify file names that should be filtered during update. You can use this option repeatedly.

    spec can be a file name pattern of the same type that you can specify in the ‘.cvswrappers’ file. See section The cvswrappers file.

    -jrevision

    With two ‘-j’ options, merge changes from the revision specified with the first ‘-j’ option to the revision specified with the second ‘j’ option, into the working directory.

    With one ‘-j’ option, merge changes from the ancestor revision to the revision specified with the ‘-j’ option, into the working directory. The ancestor revision is the common ancestor of the revision which the working directory is based on, and the revision specified in the ‘-j’ option.

    Note that using a single ‘-j tagname’ option rather than ‘-j branchname’ to merge changes from a branch will often not remove files which were removed on the branch. See section Merging can add or remove files, for more.

    In addition, each ‘-j’ option can contain an optional date specification which, when used with branches, can limit the chosen revision to one within a specific date. An optional date is specified by adding a colon (:) to the tag: ‘-jSymbolic_Tag:Date_Specifier’.

    See section Branching and merging.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A.16.2 update output

    update and checkout keep you informed of their progress by printing a line for each file, preceded by one character indicating the status of the file:

    U file

    The file was brought up to date with respect to the repository. This is done for any file that exists in the repository but not in your source, and for files that you haven’t changed but are not the most recent versions available in the repository.

    P file

    Like ‘U’, but the CVS server sends a patch instead of an entire file. This accomplishes the same thing as ‘U’ using less bandwidth.

    A file

    The file has been added to your private copy of the sources, and will be added to the source repository when you run commit on the file. This is a reminder to you that the file needs to be committed.

    R file

    The file has been removed from your private copy of the sources, and will be removed from the source repository when you run commit on the file. This is a reminder to you that the file needs to be committed.

    M file

    The file is modified in your working directory.

    M’ can indicate one of two states for a file you’re working on: either there were no modifications to the same file in the repository, so that your file remains as you last saw it; or there were modifications in the repository as well as in your copy, but they were merged successfully, without conflict, in your working directory.

    CVS will print some messages if it merges your work, and a backup copy of your working file (as it looked before you ran update) will be made. The exact name of that file is printed while update runs.

    C file

    A conflict was detected while trying to merge your changes to file with changes from the source repository. file (the copy in your working directory) is now the result of attempting to merge the two revisions; an unmodified copy of your file is also in your working directory, with the name ‘.#file.revision’ where revision is the revision that your modified file started from. Resolve the conflict as described in Conflicts example. (Note that some systems automatically purge files that begin with ‘.#’ if they have not been accessed for a few days. If you intend to keep a copy of your original file, it is a very good idea to rename it.) Under VMS, the file name starts with ‘__’ rather than ‘.#’.

    ? file

    file is in your working directory, but does not correspond to anything in the source repository, and is not in the list of files for CVS to ignore (see the description of the ‘-I’ option, and see section Ignoring files via cvsignore).


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/ccvs/cvs_17.html0000644000175000017500000012544011264347121023375 0ustar flichtenheldflichtenheld CVS—Concurrent Versions System v4.2: B. Quick reference to CVS commands
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    B. Quick reference to CVS commands

    This appendix describes how to invoke CVS, with references to where each command or feature is described in detail. For other references run the cvs --help command, or see Index.

    A CVS command looks like:

     
    cvs [ global_options ] command [ command_options ] [ command_args ]
    

    Global options:

    --allow-root=rootdir

    Specify legal CVSROOT directory (server only) (not in CVS 1.9 and older). See Setting up the server for password authentication.

    -a

    Authenticate all communication (client only) (not in CVS 1.9 and older). See Global options.

    -b

    Specify RCS location (CVS 1.9 and older). See Global options.

    -d root

    Specify the CVSROOT. See The Repository.

    -e editor

    Edit messages with editor. See Committing your changes.

    -f

    Do not read the ‘~/.cvsrc’ file. See Global options.

    -H
    --help

    Print a help message. See Global options.

    -l

    Do not log in ‘$CVSROOT/CVSROOT/history’ file. See Global options.

    -n

    Do not change any files. See Global options.

    -Q

    Be really quiet. See Global options.

    -q

    Be somewhat quiet. See Global options.

    -r

    Make new working files read-only. See Global options.

    -s variable=value

    Set a user variable. See Expansions in administrative files.

    -T tempdir

    Put temporary files in tempdir. See Global options.

    -t

    Trace CVS execution. See Global options.

    -v
    --version

    Display version and copyright information for CVS.

    -w

    Make new working files read-write. See Global options.

    -x

    Encrypt all communication (client only). See Global options.

    -z gzip-level

    Set the compression level (client only). See Global options.

    Keyword expansion modes (see section Substitution modes):

     
    -kkv  $Id: file1,v 1.1 1993/12/09 03:21:13 joe Exp $
    -kkvl $Id: file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $
    -kk   $Id$
    -kv   file1,v 1.1 1993/12/09 03:21:13 joe Exp
    -ko   no expansion
    -kb   no expansion, file is binary
    

    Keywords (see section Keyword List):

     
    $Author: joe $
    $Date: 1993/12/09 03:21:13 $
    $CVSHeader: files/file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $
    $Header: /home/files/file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $
    $Id: file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $
    $Locker: harry $
    $Name: snapshot_1_14 $
    $RCSfile: file1,v $
    $Revision: 1.1 $
    $Source: /home/files/file1,v $
    $State: Exp $
    $Log: file1,v $
    Revision 1.1  1993/12/09 03:30:17  joe
    Initial revision
    
    

    Commands, command options, and command arguments:

    add [options] [files…]

    Add a new file/directory. See Adding files to a directory.

    -k kflag

    Set keyword expansion.

    -m msg

    Set file description.

    admin [options] [files…]

    Administration of history files in the repository. See admin—Administration.

    -b[rev]

    Set default branch. See Reverting to the latest vendor release.

    -cstring

    Set comment leader.

    -ksubst

    Set keyword substitution. See Keyword substitution.

    -l[rev]

    Lock revision rev, or latest revision.

    -mrev:msg

    Replace the log message of revision rev with msg.

    -orange

    Delete revisions from the repository. See admin options.

    -q

    Run quietly; do not print diagnostics.

    -sstate[:rev]

    Set the state.

    -t

    Set file description from standard input.

    -tfile

    Set file description from file.

    -t-string

    Set file description to string.

    -u[rev]

    Unlock revision rev, or latest revision.

    annotate [options] [files…]

    Show last revision where each line was modified. See Annotate command.

    -D date

    Annotate the most recent revision no later than date. See Common command options.

    -F

    Force annotation of binary files. (Without this option, binary files are skipped with a message.)

    -f

    Use head revision if tag/date not found. See Common command options.

    -l

    Local; run only in current working directory. See section Recursive behavior.

    -R

    Operate recursively (default). See section Recursive behavior.

    -r tag

    Annotate revision tag. See Common command options.

    checkout [options] modules

    Get a copy of the sources. See checkout—Check out sources for editing.

    -A

    Reset any sticky tags/date/options. See Sticky tags and Keyword substitution.

    -c

    Output the module database. See checkout options.

    -D date

    Check out revisions as of date (is sticky). See Common command options.

    -d dir

    Check out into dir. See checkout options.

    -f

    Use head revision if tag/date not found. See Common command options.

    -j rev

    Merge in changes. See checkout options.

    -k kflag

    Use kflag keyword expansion. See Substitution modes.

    -l

    Local; run only in current working directory. See section Recursive behavior.

    -N

    Don’t “shorten” module paths if -d specified. See checkout options.

    -n

    Do not run module program (if any). See checkout options.

    -P

    Prune empty directories. See Moving and renaming directories.

    -p

    Check out files to standard output (avoids stickiness). See checkout options.

    -R

    Operate recursively (default). See section Recursive behavior.

    -r tag

    Checkout revision tag (is sticky). See Common command options.

    -s

    Like -c, but include module status. See checkout options.

    commit [options] [files…]

    Check changes into the repository. See commit—Check files into the repository.

    -F file

    Read log message from file. See commit options.

    -f

    Force the file to be committed; disables recursion. See commit options.

    -l

    Local; run only in current working directory. See Recursive behavior.

    -m msg

    Use msg as log message. See commit options.

    -n

    Do not run module program (if any). See commit options.

    -R

    Operate recursively (default). See section Recursive behavior.

    -r rev

    Commit to rev. See commit options.

    diff [options] [files…]

    Show differences between revisions. See diff—Show differences between revisions. In addition to the options shown below, accepts a wide variety of options to control output style, for example ‘-c’ for context diffs.

    -D date1

    Diff revision for date against working file. See diff options.

    -D date2

    Diff rev1/date1 against date2. See diff options.

    -l

    Local; run only in current working directory. See Recursive behavior.

    -N

    Include diffs for added and removed files. See diff options.

    -R

    Operate recursively (default). See section Recursive behavior.

    -r rev1

    Diff revision for rev1 against working file. See diff options.

    -r rev2

    Diff rev1/date1 against rev2. See diff options.

    edit [options] [files…]

    Get ready to edit a watched file. See How to edit a file which is being watched.

    -a actions

    Specify actions for temporary watch, where actions is edit, unedit, commit, all, or none. See How to edit a file which is being watched.

    -l

    Local; run only in current working directory. See Recursive behavior.

    -R

    Operate recursively (default). See section Recursive behavior.

    editors [options] [files…]

    See who is editing a watched file. See Information about who is watching and editing.

    -l

    Local; run only in current working directory. See Recursive behavior.

    -R

    Operate recursively (default). See section Recursive behavior.

    export [options] modules

    Export files from CVS. See export—Export sources from CVS, similar to checkout.

    -D date

    Check out revisions as of date. See Common command options.

    -d dir

    Check out into dir. See export options.

    -f

    Use head revision if tag/date not found. See Common command options.

    -k kflag

    Use kflag keyword expansion. See Substitution modes.

    -l

    Local; run only in current working directory. See section Recursive behavior.

    -N

    Don’t “shorten” module paths if -d specified. See export options.

    -n

    Do not run module program (if any). See export options.

    -R

    Operate recursively (default). See section Recursive behavior.

    -r tag

    Checkout revision tag. See Common command options.

    history [options] [files…]

    Show repository access history. See history—Show status of files and users.

    -a

    All users (default is self). See history options.

    -b str

    Back to record with str in module/file/repos field. See history options.

    -c

    Report on committed (modified) files. See history options.

    -D date

    Since date. See history options.

    -e

    Report on all record types. See history options.

    -l

    Last modified (committed or modified report). See history options.

    -m module

    Report on module (repeatable). See history options.

    -n module

    In module. See history options.

    -o

    Report on checked out modules. See history options.

    -p repository

    In repository. See history options.

    -r rev

    Since revision rev. See history options.

    -T

    Produce report on all TAGs. See history options.

    -t tag

    Since tag record placed in history file (by anyone). See history options.

    -u user

    For user user (repeatable). See history options.

    -w

    Working directory must match. See history options.

    -x types

    Report on types, one or more of TOEFWUCGMAR. See history options.

    -z zone

    Output for time zone zone. See history options.

    import [options] repository vendor-tag release-tags

    Import files into CVS, using vendor branches. See import—Import sources into CVS, using vendor branches.

    -b bra

    Import to vendor branch bra. See Multiple vendor branches.

    -d

    Use the file’s modification time as the time of import. See import options.

    -k kflag

    Set default keyword substitution mode. See import options.

    -m msg

    Use msg for log message. See import options.

    -I ign

    More files to ignore (! to reset). See import options.

    -W spec

    More wrappers. See import options.

    init

    Create a CVS repository if it doesn’t exist. See Creating a repository.

    kserver

    Kerberos authenticated server. See Direct connection with kerberos.

    log [options] [files…]

    Print out history information for files. See log—Print out log information for files.

    -b

    Only list revisions on the default branch. See log options.

    -d dates

    Specify dates (d1<d2 for range, d for latest before). See log options.

    -h

    Only print header. See log options.

    -l

    Local; run only in current working directory. See Recursive behavior.

    -N

    Do not list tags. See log options.

    -R

    Only print name of RCS file. See log options.

    -rrevs

    Only list revisions revs. See log options.

    -s states

    Only list revisions with specified states. See log options.

    -t

    Only print header and descriptive text. See log options.

    -wlogins

    Only list revisions checked in by specified logins. See log options.

    login

    Prompt for password for authenticating server. See Using the client with password authentication.

    logout

    Remove stored password for authenticating server. See Using the client with password authentication.

    pserver

    Password authenticated server. See Setting up the server for password authentication.

    rannotate [options] [modules…]

    Show last revision where each line was modified. See Annotate command.

    -D date

    Annotate the most recent revision no later than date. See Common command options.

    -F

    Force annotation of binary files. (Without this option, binary files are skipped with a message.)

    -f

    Use head revision if tag/date not found. See Common command options.

    -l

    Local; run only in current working directory. See section Recursive behavior.

    -R

    Operate recursively (default). See section Recursive behavior.

    -r tag

    Annotate revision tag. See Common command options.

    rdiff [options] modules

    Show differences between releases. See rdiff—’patch’ format diffs between releases.

    -c

    Context diff output format (default). See rdiff options.

    -D date

    Select revisions based on date. See Common command options.

    -f

    Use head revision if tag/date not found. See Common command options.

    -l

    Local; run only in current working directory. See Recursive behavior.

    -R

    Operate recursively (default). See section Recursive behavior.

    -r rev

    Select revisions based on rev. See Common command options.

    -s

    Short patch - one liner per file. See rdiff options.

    -t

    Top two diffs - last change made to the file. See diff options.

    -u

    Unidiff output format. See rdiff options.

    -V vers

    Use RCS Version vers for keyword expansion (obsolete). See rdiff options.

    release [options] directory

    Indicate that a directory is no longer in use. See release—Indicate that a Module is no longer in use.

    -d

    Delete the given directory. See release options.

    remove [options] [files…]

    Remove an entry from the repository. See Removing files.

    -f

    Delete the file before removing it. See Removing files.

    -l

    Local; run only in current working directory. See Recursive behavior.

    -R

    Operate recursively (default). See section Recursive behavior.

    rlog [options] [files…]

    Print out history information for modules. See log—Print out log information for files.

    -b

    Only list revisions on the default branch. See log options.

    -d dates

    Specify dates (d1<d2 for range, d for latest before). See log options.

    -h

    Only print header. See log options.

    -l

    Local; run only in current working directory. See Recursive behavior.

    -N

    Do not list tags. See log options.

    -R

    Only print name of RCS file. See log options.

    -rrevs

    Only list revisions revs. See log options.

    -s states

    Only list revisions with specified states. See log options.

    -t

    Only print header and descriptive text. See log options.

    -wlogins

    Only list revisions checked in by specified logins. See log options.

    rtag [options] tag modules

    Add a symbolic tag to a module. See Revisions and Branching and merging.

    -a

    Clear tag from removed files that would not otherwise be tagged. See Tagging and adding and removing files.

    -b

    Create a branch named tag. See Branching and merging.

    -B

    Used in conjunction with -F or -d, enables movement and deletion of branch tags. Use with extreme caution.

    -D date

    Tag revisions as of date. See Specifying what to tag by date or revision.

    -d

    Delete tag. See Deleting, moving, and renaming tags.

    -F

    Move tag if it already exists. See Deleting, moving, and renaming tags.

    -f

    Force a head revision match if tag/date not found. See Specifying what to tag by date or revision.

    -l

    Local; run only in current working directory. See Recursive behavior.

    -n

    No execution of tag program. See Common command options.

    -R

    Operate recursively (default). See section Recursive behavior.

    -r rev

    Tag existing tag rev. See Specifying what to tag by date or revision.

    server

    Rsh server. See Connecting with rsh.

    status [options] files

    Display status information in a working directory. See File status.

    -l

    Local; run only in current working directory. See Recursive behavior.

    -R

    Operate recursively (default). See section Recursive behavior.

    -v

    Include tag information for file. See Tags–Symbolic revisions.

    tag [options] tag [files…]

    Add a symbolic tag to checked out version of files. See Revisions and Branching and merging.

    -b

    Create a branch named tag. See Branching and merging.

    -c

    Check that working files are unmodified. See Specifying what to tag from the working directory.

    -D date

    Tag revisions as of date. See Specifying what to tag by date or revision.

    -d

    Delete tag. See Deleting, moving, and renaming tags.

    -F

    Move tag if it already exists. See Deleting, moving, and renaming tags.

    -f

    Force a head revision match if tag/date not found. See Specifying what to tag by date or revision.

    -l

    Local; run only in current working directory. See Recursive behavior.

    -R

    Operate recursively (default). See section Recursive behavior.

    -r rev

    Tag existing tag rev. See Specifying what to tag by date or revision.

    unedit [options] [files…]

    Undo an edit command. See How to edit a file which is being watched.

    -l

    Local; run only in current working directory. See Recursive behavior.

    -R

    Operate recursively (default). See section Recursive behavior.

    update [options] [files…]

    Bring work tree in sync with repository. See update—Bring work tree in sync with repository.

    -A

    Reset any sticky tags/date/options. See Sticky tags and Keyword substitution.

    -C

    Overwrite locally modified files with clean copies from the repository (the modified file is saved in ‘.#file.revision’, however).

    -D date

    Check out revisions as of date (is sticky). See Common command options.

    -d

    Create directories. See update options.

    -f

    Use head revision if tag/date not found. See Common command options.

    -I ign

    More files to ignore (! to reset). See import options.

    -j rev

    Merge in changes. See update options.

    -k kflag

    Use kflag keyword expansion. See Substitution modes.

    -l

    Local; run only in current working directory. See section Recursive behavior.

    -P

    Prune empty directories. See Moving and renaming directories.

    -p

    Check out files to standard output (avoids stickiness). See update options.

    -R

    Operate recursively (default). See section Recursive behavior.

    -r tag

    Checkout revision tag (is sticky). See Common command options.

    -W spec

    More wrappers. See import options.

    version

    Display the version of CVS being used. If the repository is remote, display both the client and server versions.

    watch [on|off|add|remove] [options] [files…]

    on/off: turn on/off read-only checkouts of files. See Telling CVS to watch certain files.

    add/remove: add or remove notification on actions. See Telling CVS to notify you.

    -a actions

    Specify actions for temporary watch, where actions is edit, unedit, commit, all, or none. See How to edit a file which is being watched.

    -l

    Local; run only in current working directory. See Recursive behavior.

    -R

    Operate recursively (default). See section Recursive behavior.

    watchers [options] [files…]

    See who is watching a file. See Information about who is watching and editing.

    -l

    Local; run only in current working directory. See Recursive behavior.

    -R

    Operate recursively (default). See section Recursive behavior.


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/ccvs/cvs_7.html0000644000175000017500000007743511264347121023326 0ustar flichtenheldflichtenheld CVS—Concurrent Versions System v4.2: 7. Adding, removing, and renaming files and directories
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7. Adding, removing, and renaming files and directories

    In the course of a project, one will often add new files. Likewise with removing or renaming, or with directories. The general concept to keep in mind in all these cases is that instead of making an irreversible change you want CVS to record the fact that a change has taken place, just as with modifying an existing file. The exact mechanisms to do this in CVS vary depending on the situation.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.1 Adding files to a directory

    To add a new file to a directory, follow these steps.

    • You must have a working copy of the directory. See section Getting the source.
    • Create the new file inside your working copy of the directory.
    • Use ‘cvs add filename’ to tell CVS that you want to version control the file. If the file contains binary data, specify ‘-kb’ (see section Handling binary files).
    • Use ‘cvs commit filename’ to actually check in the file into the repository. Other developers cannot see the file until you perform this step.

    You can also use the add command to add a new directory.

    Unlike most other commands, the add command is not recursive. You cannot even type ‘cvs add foo/bar’! Instead, you have to

     
    $ cd foo
    $ cvs add bar
    
    Command: cvs add [-k kflag] [-m message] files …

    Schedule files to be added to the repository. The files or directories specified with add must already exist in the current directory. To add a whole new directory hierarchy to the source repository (for example, files received from a third-party vendor), use the import command instead. See section import—Import sources into CVS, using vendor branches.

    The added files are not placed in the source repository until you use commit to make the change permanent. Doing an add on a file that was removed with the remove command will undo the effect of the remove, unless a commit command intervened. See section Removing files, for an example.

    The ‘-k’ option specifies the default way that this file will be checked out; for more information see Substitution modes.

    The ‘-m’ option specifies a description for the file. This description appears in the history log (if it is enabled, see section The history file). It will also be saved in the version history inside the repository when the file is committed. The log command displays this description. The description can be changed using ‘admin -t’. See section admin—Administration. If you omit the ‘-m description’ flag, an empty string will be used. You will not be prompted for a description.

    For example, the following commands add the file ‘backend.c’ to the repository:

     
    $ cvs add backend.c
    $ cvs commit -m "Early version. Not yet compilable." backend.c
    

    When you add a file it is added only on the branch which you are working on (see section Branching and merging). You can later merge the additions to another branch if you want (see section Merging can add or remove files).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.2 Removing files

    Directories change. New files are added, and old files disappear. Still, you want to be able to retrieve an exact copy of old releases.

    Here is what you can do to remove a file, but remain able to retrieve old revisions:

    • Make sure that you have not made any uncommitted modifications to the file. See section Viewing differences, for one way to do that. You can also use the status or update command. If you remove the file without committing your changes, you will of course not be able to retrieve the file as it was immediately before you deleted it.
    • Remove the file from your working copy of the directory. You can for instance use rm.
    • Use ‘cvs remove filename’ to tell CVS that you really want to delete the file.
    • Use ‘cvs commit filename’ to actually perform the removal of the file from the repository.

    When you commit the removal of the file, CVS records the fact that the file no longer exists. It is possible for a file to exist on only some branches and not on others, or to re-add another file with the same name later. CVS will correctly create or not create the file, based on the ‘-r’ and ‘-D’ options specified to checkout or update.

    Command: cvs remove [options] files …

    Schedule file(s) to be removed from the repository (files which have not already been removed from the working directory are not processed). This command does not actually remove the file from the repository until you commit the removal. For a full list of options, see Quick reference to CVS commands.

    Here is an example of removing several files:

     
    $ cd test
    $ rm *.c
    $ cvs remove
    cvs remove: Removing .
    cvs remove: scheduling a.c for removal
    cvs remove: scheduling b.c for removal
    cvs remove: use 'cvs commit' to remove these files permanently
    $ cvs ci -m "Removed unneeded files"
    cvs commit: Examining .
    cvs commit: Committing .
    

    As a convenience you can remove the file and cvs remove it in one step, by specifying the ‘-f’ option. For example, the above example could also be done like this:

     
    $ cd test
    $ cvs remove -f *.c
    cvs remove: scheduling a.c for removal
    cvs remove: scheduling b.c for removal
    cvs remove: use 'cvs commit' to remove these files permanently
    $ cvs ci -m "Removed unneeded files"
    cvs commit: Examining .
    cvs commit: Committing .
    

    If you execute remove for a file, and then change your mind before you commit, you can undo the remove with an add command.

     
    $ ls
    CVS   ja.h  oj.c
    $ rm oj.c
    $ cvs remove oj.c
    cvs remove: scheduling oj.c for removal
    cvs remove: use 'cvs commit' to remove this file permanently
    $ cvs add oj.c
    U oj.c
    cvs add: oj.c, version 1.1.1.1, resurrected
    

    If you realize your mistake before you run the remove command you can use update to resurrect the file:

     
    $ rm oj.c
    $ cvs update oj.c
    cvs update: warning: oj.c was lost
    U oj.c
    

    When you remove a file it is removed only on the branch which you are working on (see section Branching and merging). You can later merge the removals to another branch if you want (see section Merging can add or remove files).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.3 Removing directories

    In concept removing directories is somewhat similar to removing files—you want the directory to not exist in your current working directories, but you also want to be able to retrieve old releases in which the directory existed.

    The way that you remove a directory is to remove all the files in it. You don’t remove the directory itself; there is no way to do that. Instead you specify the ‘-P’ option to cvs update or cvs checkout, which will cause CVS to remove empty directories from working directories. (Note that cvs export always removes empty directories.) Probably the best way to do this is to always specify ‘-P’; if you want an empty directory then put a dummy file (for example ‘.keepme’) in it to prevent ‘-P’ from removing it.

    Note that ‘-P’ is implied by the ‘-r’ or ‘-D’ options of checkout. This way CVS will be able to correctly create the directory or not depending on whether the particular version you are checking out contains any files in that directory.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.4 Moving and renaming files

    Moving files to a different directory or renaming them is not difficult, but some of the ways in which this works may be non-obvious. (Moving or renaming a directory is even harder. See section Moving and renaming directories.).

    The examples below assume that the file old is renamed to new.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.4.1 The Normal way to Rename

    The normal way to move a file is to copy old to new, and then issue the normal CVS commands to remove old from the repository, and add new to it.

     
    $ mv old new
    $ cvs remove old
    $ cvs add new
    $ cvs commit -m "Renamed old to new" old new
    

    This is the simplest way to move a file, it is not error-prone, and it preserves the history of what was done. Note that to access the history of the file you must specify the old or the new name, depending on what portion of the history you are accessing. For example, cvs log old will give the log up until the time of the rename.

    When new is committed its revision numbers will start again, usually at 1.1, so if that bothers you, use the ‘-r rev’ option to commit. For more information see Assigning revisions.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.4.2 Moving the history file

    This method is more dangerous, since it involves moving files inside the repository. Read this entire section before trying it out!

     
    $ cd $CVSROOT/dir
    $ mv old,v new,v
    

    Advantages:

    • The log of changes is maintained intact.
    • The revision numbers are not affected.

    Disadvantages:

    • Old releases cannot easily be fetched from the repository. (The file will show up as new even in revisions from the time before it was renamed).
    • There is no log information of when the file was renamed.
    • Nasty things might happen if someone accesses the history file while you are moving it. Make sure no one else runs any of the CVS commands while you move it.

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.4.3 Copying the history file

    This way also involves direct modifications to the repository. It is safe, but not without drawbacks.

     
    # Copy the RCS file inside the repository
    $ cd $CVSROOT/dir
    $ cp old,v new,v
    # Remove the old file
    $ cd ~/dir
    $ rm old
    $ cvs remove old
    $ cvs commit old
    # Remove all tags from new
    $ cvs update new
    $ cvs log new             # Remember the non-branch tag names
    $ cvs tag -d tag1 new
    $ cvs tag -d tag2 new

    By removing the tags you will be able to check out old revisions.

    Advantages:

    • Checking out old revisions works correctly, as long as you use ‘-rtag’ and not ‘-Ddate’ to retrieve the revisions.
    • The log of changes is maintained intact.
    • The revision numbers are not affected.

    Disadvantages:

    • You cannot easily see the history of the file across the rename.

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    7.5 Moving and renaming directories

    The normal way to rename or move a directory is to rename or move each file within it as described in The Normal way to Rename. Then check out with the ‘-P’ option, as described in Removing directories.

    If you really want to hack the repository to rename or delete a directory in the repository, you can do it like this:

    1. Inform everyone who has a checked out copy of the directory that the directory will be renamed. They should commit all their changes, and remove their working copies, before you take the steps below.
    2. Rename the directory inside the repository.
       
      $ cd $CVSROOT/parent-dir
      $ mv old-dir new-dir
      
    3. Fix the CVS administrative files, if necessary (for instance if you renamed an entire module).
    4. Tell everyone that they can check out again and continue working.

    If someone had a working copy the CVS commands will cease to work for him, until he removes the directory that disappeared inside the repository.

    It is almost always better to move the files in the directory instead of moving the directory. If you move the directory you are unlikely to be able to retrieve old releases correctly, since they probably depend on the name of the directories.


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/ccvs/cvs_14.html0000644000175000017500000001621311264347121023367 0ustar flichtenheldflichtenheld CVS—Concurrent Versions System v4.2: 14. How your build system interacts with CVS
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    14. How your build system interacts with CVS

    As mentioned in the introduction, CVS does not contain software for building your software from source code. This section describes how various aspects of your build system might interact with CVS.

    One common question, especially from people who are accustomed to RCS, is how to make their build get an up to date copy of the sources. The answer to this with CVS is two-fold. First of all, since CVS itself can recurse through directories, there is no need to modify your ‘Makefile’ (or whatever configuration file your build tool uses) to make sure each file is up to date. Instead, just use two commands, first cvs -q update and then make or whatever the command is to invoke your build tool. Secondly, you do not necessarily want to get a copy of a change someone else made until you have finished your own work. One suggested approach is to first update your sources, then implement, build and test the change you were thinking of, and then commit your sources (updating first if necessary). By periodically (in between changes, using the approach just described) updating your entire tree, you ensure that your sources are sufficiently up to date.

    One common need is to record which versions of which source files went into a particular build. This kind of functionality is sometimes called bill of materials or something similar. The best way to do this with CVS is to use the tag command to record which versions went into a given build (see section Tags–Symbolic revisions).

    Using CVS in the most straightforward manner possible, each developer will have a copy of the entire source tree which is used in a particular build. If the source tree is small, or if developers are geographically dispersed, this is the preferred solution. In fact one approach for larger projects is to break a project down into smaller separately-compiled subsystems, and arrange a way of releasing them internally so that each developer need check out only those subsystems which they are actively working on.

    Another approach is to set up a structure which allows developers to have their own copies of some files, and for other files to access source files from a central location. Many people have come up with some such a system using features such as the symbolic link feature found in many operating systems, or the VPATH feature found in many versions of make. One build tool which is designed to help with this kind of thing is Odin (see ftp://ftp.cs.colorado.edu/pub/distribs/odin).


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/ccvs/cvs_18.html0000644000175000017500000030056211264347121023376 0ustar flichtenheldflichtenheld CVS—Concurrent Versions System v4.2: C. Reference manual for Administrative files
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    C. Reference manual for Administrative files

    Inside the repository, in the directory ‘$CVSROOT/CVSROOT’, there are a number of supportive files for CVS. You can use CVS in a limited fashion without any of them, but if they are set up properly they can help make life easier. For a discussion of how to edit them, see The administrative files.

    The most important of these files is the ‘modules’ file, which defines the modules inside the repository.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    C.1 The modules file

    The ‘modules’ file records your definitions of names for collections of source code. CVS will use these definitions if you use CVS to update the modules file (use normal commands like add, commit, etc).

    The ‘modules’ file may contain blank lines and comments (lines beginning with ‘#’) as well as module definitions. Long lines can be continued on the next line by specifying a backslash (‘\’) as the last character on the line.

    There are three basic types of modules: alias modules, regular modules, and ampersand modules. The difference between them is the way that they map files in the repository to files in the working directory. In all of the following examples, the top-level repository contains a directory called ‘first-dir’, which contains two files, ‘file1’ and ‘file2’, and a directory ‘sdir’. ‘first-dir/sdir’ contains a file ‘sfile’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    C.1.1 Alias modules

    Alias modules are the simplest kind of module:

    mname -a aliases

    This represents the simplest way of defining a module mname. The ‘-a’ flags the definition as a simple alias: CVS will treat any use of mname (as a command argument) as if the list of names aliases had been specified instead. aliases may contain either other module names or paths. When you use paths in aliases, checkout creates all intermediate directories in the working directory, just as if the path had been specified explicitly in the CVS arguments.

    For example, if the modules file contains:

     
    amodule -a first-dir
    

    then the following two commands are equivalent:

     
    $ cvs co amodule
    $ cvs co first-dir
    

    and they each would provide output such as:

     
    cvs checkout: Updating first-dir
    U first-dir/file1
    U first-dir/file2
    cvs checkout: Updating first-dir/sdir
    U first-dir/sdir/sfile
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    C.1.2 Regular modules

    mname [ options ] dir [ files… ]

    In the simplest case, this form of module definition reduces to ‘mname dir’. This defines all the files in directory dir as module mname. dir is a relative path (from $CVSROOT) to a directory of source in the source repository. In this case, on checkout, a single directory called mname is created as a working directory; no intermediate directory levels are used by default, even if dir was a path involving several directory levels.

    For example, if a module is defined by:

     
    regmodule first-dir
    

    then regmodule will contain the files from first-dir:

     
    $ cvs co regmodule
    cvs checkout: Updating regmodule
    U regmodule/file1
    U regmodule/file2
    cvs checkout: Updating regmodule/sdir
    U regmodule/sdir/sfile
    $
    

    By explicitly specifying files in the module definition after dir, you can select particular files from directory dir. Here is an example:

     
    regfiles first-dir/sdir sfile
    

    With this definition, getting the regfiles module will create a single working directory ‘regfiles’ containing the file listed, which comes from a directory deeper in the CVS source repository:

     
    $ cvs co regfiles
    U regfiles/sfile
    $
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    C.1.3 Ampersand modules

    A module definition can refer to other modules by including ‘&module’ in its definition.

     
    mname [ options ] &module

    Then getting the module creates a subdirectory for each such module, in the directory containing the module. For example, if modules contains

     
    ampermod &first-dir
    

    then a checkout will create an ampermod directory which contains a directory called first-dir, which in turns contains all the directories and files which live there. For example, the command

     
    $ cvs co ampermod
    

    will create the following files:

     
    ampermod/first-dir/file1
    ampermod/first-dir/file2
    ampermod/first-dir/sdir/sfile
    

    There is one quirk/bug: the messages that CVS prints omit the ‘ampermod’, and thus do not correctly display the location to which it is checking out the files:

     
    $ cvs co ampermod
    cvs checkout: Updating first-dir
    U first-dir/file1
    U first-dir/file2
    cvs checkout: Updating first-dir/sdir
    U first-dir/sdir/sfile
    $
    

    Do not rely on this buggy behavior; it may get fixed in a future release of CVS.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    C.1.4 Excluding directories

    An alias module may exclude particular directories from other modules by using an exclamation mark (‘!’) before the name of each directory to be excluded.

    For example, if the modules file contains:

     
    exmodule -a !first-dir/sdir first-dir
    

    then checking out the module ‘exmodule’ will check out everything in ‘first-dir’ except any files in the subdirectory ‘first-dir/sdir’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    C.1.5 Module options

    Either regular modules or ampersand modules can contain options, which supply additional information concerning the module.

    -d name

    Name the working directory something other than the module name.

    -e prog

    Specify a program prog to run whenever files in a module are exported. prog runs with a single argument, the module name.

    -o prog

    Specify a program prog to run whenever files in a module are checked out. prog runs with a single argument, the module name. See How the modules file “program options” programs are run for information on how prog is called.

    -s status

    Assign a status to the module. When the module file is printed with ‘cvs checkout -s’ the modules are sorted according to primarily module status, and secondarily according to the module name. This option has no other meaning. You can use this option for several things besides status: for instance, list the person that is responsible for this module.

    -t prog

    Specify a program prog to run whenever files in a module are tagged with rtag. prog runs with two arguments: the module name and the symbolic tag specified to rtag. It is not run when tag is executed. Generally you will find that taginfo is a better solution (see section User-defined logging).

    You should also see see section How the modules file “program options” programs are run about how the “program options” programs are run.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    C.1.6 How the modules file “program options” programs are run

    For checkout, rtag, and export, the program is server-based, and as such the following applies:-

    If using remote access methods (pserver, ext, etc.), CVS will execute this program on the server from a temporary directory. The path is searched for this program.

    If using “local access” (on a local or remote NFS file system, i.e. repository set just to a path), the program will be executed from the newly checked-out tree, if found there, or alternatively searched for in the path if not.

    The programs are all run after the operation has effectively completed.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    C.2 The cvswrappers file

    Wrappers refers to a CVS feature which lets you control certain settings based on the name of the file which is being operated on. The settings are ‘-k’ for binary files, and ‘-m’ for nonmergeable text files.

    The ‘-m’ option specifies the merge methodology that should be used when a non-binary file is updated. MERGE means the usual CVS behavior: try to merge the files. COPY means that cvs update will refuse to merge files, as it also does for files specified as binary with ‘-kb’ (but if the file is specified as binary, there is no need to specify ‘-m 'COPY'’). CVS will provide the user with the two versions of the files, and require the user using mechanisms outside CVS, to insert any necessary changes.

    WARNING: do not use COPY with CVS 1.9 or earlier - such versions of CVS will copy one version of your file over the other, wiping out the previous contents. The ‘-m’ wrapper option only affects behavior when merging is done on update; it does not affect how files are stored. See Handling binary files, for more on binary files.

    The basic format of the file ‘cvswrappers’ is:

     
    wildcard     [option value][option value]...
    
    where option is one of
    -m           update methodology      value: MERGE or COPY
    -k           keyword expansion       value: expansion mode
    
    and value is a single-quote delimited value.
    

    For example, the following command imports a directory, treating files whose name ends in ‘.exe’ as binary:

     
    cvs import -I ! -W "*.exe -k 'b'" first-dir vendortag reltag
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    C.3 The commit support files

    The ‘-i’ flag in the ‘modules’ file can be used to run a certain program whenever files are committed (see section The modules file). The files described in this section provide other, more flexible, ways to run programs whenever something is committed.

    There are three kind of programs that can be run on commit. They are specified in files in the repository, as described below. The following table summarizes the file names and the purpose of the corresponding programs.

    commitinfo

    The program is responsible for checking that the commit is allowed. If it exits with a non-zero exit status the commit will be aborted.

    verifymsg

    The specified program is used to evaluate the log message, and possibly verify that it contains all required fields. This is most useful in combination with the ‘rcsinfo’ file, which can hold a log message template (see section Rcsinfo).

    editinfo

    The specified program is used to edit the log message, and possibly verify that it contains all required fields. This is most useful in combination with the ‘rcsinfo’ file, which can hold a log message template (see section Rcsinfo). (obsolete)

    loginfo

    The specified program is called when the commit is complete. It receives the log message and some additional information and can store the log message in a file, or mail it to appropriate persons, or maybe post it to a local newsgroup, or… Your imagination is the limit!


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    C.3.1 The common syntax

    The administrative files such as ‘commitinfo’, ‘loginfo’, ‘rcsinfo’, ‘verifymsg’, etc., all have a common format. The purpose of the files are described later on. The common syntax is described here.

    Each line contains the following:

    • A regular expression. This is a basic regular expression in the syntax used by GNU emacs.
    • A whitespace separator—one or more spaces and/or tabs.
    • A file name or command-line template.

    Blank lines are ignored. Lines that start with the character ‘#’ are treated as comments. Long lines unfortunately can not be broken in two parts in any way.

    The first regular expression that matches the current directory name in the repository is used. The rest of the line is used as a file name or command-line as appropriate.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    C.3.2 Commitinfo

    The ‘commitinfo’ file defines programs to execute whenever ‘cvs commit’ is about to execute. These programs are used for pre-commit checking to verify that the modified, added and removed files are really ready to be committed. This could be used, for instance, to verify that the changed files conform to to your site’s standards for coding practice.

    As mentioned earlier, each line in the ‘commitinfo’ file consists of a regular expression and a command-line template. The template can include a program name and any number of arguments you wish to supply to it. The full path to the current source repository is appended to the template, followed by the file names of any files involved in the commit (added, removed, and modified files).

    The first line with a regular expression matching the directory within the repository will be used. If the command returns a non-zero exit status the commit will be aborted.

    If the repository name does not match any of the regular expressions in this file, the ‘DEFAULT’ line is used, if it is specified.

    All occurrences of the name ‘ALL’ appearing as a regular expression are used in addition to the first matching regular expression or the name ‘DEFAULT’.

    The command will be run in the root of the workspace containing the new versions of any files the user would like to modify (commit), or in a copy of the workspace on the server (see section Remote repositories). If a file is being removed, there will be no copy of the file under the current directory. If a file is being added, there will be no corresponding archive file in the repository unless the file is being resurrected.

    Note that both the repository directory and the corresponding Attic (see section The attic) directory may need to be checked to locate the archive file corresponding to any given file being committed. Much of the information about the specific commit request being made, including the destination branch, commit message, and command line options specified, is not available to the command.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    C.3.3 Verifying log messages

    Once you have entered a log message, you can evaluate that message to check for specific content, such as a bug ID. Use the ‘verifymsg’ file to specify a program that is used to verify the log message. This program could be a simple script that checks that the entered message contains the required fields.

    The ‘verifymsg’ file is often most useful together with the ‘rcsinfo’ file, which can be used to specify a log message template.

    Each line in the ‘verifymsg’ file consists of a regular expression and a command-line template. The template must include a program name, and can include any number of arguments. The full path to the current log message template file is appended to the template.

    One thing that should be noted is that the ‘ALL’ keyword is not supported. If more than one matching line is found, the first one is used. This can be useful for specifying a default verification script in a directory, and then overriding it in a subdirectory.

    If the repository name does not match any of the regular expressions in this file, the ‘DEFAULT’ line is used, if it is specified.

    If the verification script exits with a non-zero exit status, the commit is aborted.

    In the default configuration, CVS allows the verification script to change the log message. This is controlled via the RereadLogAfterVerify CVSROOT/config option.

    When ‘RereadLogAfterVerify=always’ or ‘RereadLogAfterVerify=stat’, the log message will either always be reread after the verification script is run or reread only if the log message file status has changed.

    See section The CVSROOT/config configuration file, for more on CVSROOT/config options.

    It is NOT a good idea for a ‘verifymsg’ script to interact directly with the user in the various client/server methods. For the pserver method, there is no protocol support for communicating between ‘verifymsg’ and the client on the remote end. For the ext and server methods, it is possible for CVS to become confused by the characters going along the same channel as the CVS protocol messages. See Remote repositories, for more information on client/server setups. In addition, at the time the ‘verifymsg’ script runs, the CVS server has locks in place in the repository. If control is returned to the user here then other users may be stuck waiting for access to the repository.

    This option can be useful if you find yourself using an rcstemplate that needs to be modified to remove empty elements or to fill in default values. It can also be useful if the rcstemplate has changed in the repository and the CVS/Template was not updated, but is able to be adapted to the new format by the verification script that is run by ‘verifymsg’.

    An example of an update might be to change all occurrences of ’BugId:’ to be ’DefectId:’ (which can be useful if the rcstemplate has recently been changed and there are still checked-out user trees with cached copies in the CVS/Template file of the older version).

    Another example of an update might be to delete a line that contains ’BugID: none’ from the log message after validation of that value as being allowed is made.

    The following is a little silly example of a ‘verifymsg’ file, together with the corresponding ‘rcsinfo’ file, the log message template and an verification script. We begin with the log message template. We want to always record a bug-id number on the first line of the log message. The rest of log message is free text. The following template is found in the file ‘/usr/cvssupport/tc.template’.

     
    BugId:
    

    The script ‘/usr/cvssupport/bugid.verify’ is used to evaluate the log message.

     
    #!/bin/sh
    #
    #       bugid.verify filename
    #
    #  Verify that the log message contains a valid bugid
    #  on the first line.
    #
    if head -1 < $1 | grep '^BugId:[ ]*[0-9][0-9]*$' > /dev/null; then
        exit 0
    elif head -1 < $1 | grep '^BugId:[ ]*none$' > /dev/null; then
        # It is okay to allow commits with 'BugId: none',
        # but do not put that text into the real log message.
        grep -v '^BugId:[ ]*none$' > $1.rewrite
        mv $1.rewrite $1
        exit 0
    else
        echo "No BugId found."
        exit 1
    fi
    

    The ‘verifymsg’ file contains this line:

     
    ^tc     /usr/cvssupport/bugid.verify
    

    The ‘rcsinfo’ file contains this line:

     
    ^tc     /usr/cvssupport/tc.template
    

    The ‘config’ file contains this line:

     
    RereadLogAfterVerify=always
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    C.3.4 Editinfo

    Note: The ‘editinfo’ feature has been rendered obsolete. To set a default editor for log messages use the CVSEDITOR, EDITOR environment variables (see section All environment variables which affect CVS) or the ‘-e’ global option (see section Global options). See Verifying log messages, for information on the use of the ‘verifymsg’ feature for evaluating log messages.

    If you want to make sure that all log messages look the same way, you can use the ‘editinfo’ file to specify a program that is used to edit the log message. This program could be a custom-made editor that always enforces a certain style of the log message, or maybe a simple shell script that calls an editor, and checks that the entered message contains the required fields.

    If no matching line is found in the ‘editinfo’ file, the editor specified in the environment variable $CVSEDITOR is used instead. If that variable is not set, then the environment variable $EDITOR is used instead. If that variable is not set a default will be used. See Committing your changes.

    The ‘editinfo’ file is often most useful together with the ‘rcsinfo’ file, which can be used to specify a log message template.

    Each line in the ‘editinfo’ file consists of a regular expression and a command-line template. The template must include a program name, and can include any number of arguments. The full path to the current log message template file is appended to the template.

    One thing that should be noted is that the ‘ALL’ keyword is not supported. If more than one matching line is found, the first one is used. This can be useful for specifying a default edit script in a module, and then overriding it in a subdirectory.

    If the repository name does not match any of the regular expressions in this file, the ‘DEFAULT’ line is used, if it is specified.

    If the edit script exits with a non-zero exit status, the commit is aborted.

    Note: when CVS is accessing a remote repository, or when the ‘-m’ or ‘-F’ options to cvs commit are used, ‘editinfo’ will not be consulted. There is no good workaround for this; use ‘verifymsg’ instead.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    C.3.4.1 Editinfo example

    The following is a little silly example of a ‘editinfo’ file, together with the corresponding ‘rcsinfo’ file, the log message template and an editor script. We begin with the log message template. We want to always record a bug-id number on the first line of the log message. The rest of log message is free text. The following template is found in the file ‘/usr/cvssupport/tc.template’.

     
    BugId:
    

    The script ‘/usr/cvssupport/bugid.edit’ is used to edit the log message.

     
    #!/bin/sh
    #
    #       bugid.edit filename
    #
    #  Call $EDITOR on FILENAME, and verify that the
    #  resulting file contains a valid bugid on the first
    #  line.
    if [ "x$EDITOR" = "x" ]; then EDITOR=vi; fi
    if [ "x$CVSEDITOR" = "x" ]; then CVSEDITOR=$EDITOR; fi
    $CVSEDITOR $1
    until head -1|grep '^BugId:[ ]*[0-9][0-9]*$' < $1
    do  echo -n  "No BugId found.  Edit again? ([y]/n)"
        read ans
        case ${ans} in
            n*) exit 1;;
        esac
        $CVSEDITOR $1
    done
    

    The ‘editinfo’ file contains this line:

     
    ^tc     /usr/cvssupport/bugid.edit
    

    The ‘rcsinfo’ file contains this line:

     
    ^tc     /usr/cvssupport/tc.template
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    C.3.5 Loginfo

    The ‘loginfo’ file is used to control where ‘cvs commit’ log information is sent. The first entry on a line is a regular expression which is tested against the directory that the change is being made to, relative to the $CVSROOT. If a match is found, then the remainder of the line is a filter program that should expect log information on its standard input.

    If the repository name does not match any of the regular expressions in this file, the ‘DEFAULT’ line is used, if it is specified.

    All occurrences of the name ‘ALL’ appearing as a regular expression are used in addition to the first matching regular expression or ‘DEFAULT’.

    The first matching regular expression is used.

    See section The commit support files, for a description of the syntax of the ‘loginfo’ file.

    The user may specify a format string as part of the filter. The string is composed of a ‘%’ followed by a space, or followed by a single format character, or followed by a set of format characters surrounded by ‘{’ and ‘}’ as separators. The format characters are:

    s

    file name

    V

    old version number (pre-checkin)

    v

    new version number (post-checkin)

    All other characters that appear in a format string expand to an empty field (commas separating fields are still provided).

    For example, some valid format strings are ‘%’, ‘%s’, ‘%{s}’, and ‘%{sVv}’.

    The output will be a space separated string of tokens enclosed in quotation marks ("). Any embedded dollar signs ($), backticks (), backslashes (\), or quotation marks will be preceded by a backslash (this allows the shell to correctly parse it as a single string, regardless of the characters it contains). For backwards compatibility, the first token will be the repository subdirectory. The rest of the tokens will be comma-delimited lists of the information requested in the format string. For example, if ‘/u/src/master/yoyodyne/tc’ is the repository, ‘%{sVv}’ is the format string, and three files (ChangeLog, Makefile, foo.c) were modified, the output might be:

     
    "yoyodyne/tc ChangeLog,1.1,1.2 Makefile,1.3,1.4 foo.c,1.12,1.13"
    

    As another example, ‘%{}’ means that only the name of the repository will be generated.

    Note: when CVS is accessing a remote repository, ‘loginfo’ will be run on the remote (i.e., server) side, not the client side (see section Remote repositories).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    C.3.5.1 Loginfo example

    The following ‘loginfo’ file, together with the tiny shell-script below, appends all log messages to the file ‘$CVSROOT/CVSROOT/commitlog’, and any commits to the administrative files (inside the ‘CVSROOT’ directory) are also logged in ‘/usr/adm/cvsroot-log’. Commits to the ‘prog1’ directory are mailed to ceder.

     
    ALL             /usr/local/bin/cvs-log $CVSROOT/CVSROOT/commitlog $USER
    ^CVSROOT        /usr/local/bin/cvs-log /usr/adm/cvsroot-log
    ^prog1          Mail -s %s ceder
    

    The shell-script ‘/usr/local/bin/cvs-log’ looks like this:

     
    #!/bin/sh
    (echo "------------------------------------------------------";
     echo -n $2"  ";
     date;
     echo;
     cat) >> $1
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    C.3.5.2 Keeping a checked out copy

    It is often useful to maintain a directory tree which contains files which correspond to the latest version in the repository. For example, other developers might want to refer to the latest sources without having to check them out, or you might be maintaining a web site with CVS and want every checkin to cause the files used by the web server to be updated.

    The way to do this is by having loginfo invoke cvs update. Doing so in the naive way will cause a problem with locks, so the cvs update must be run in the background. Here is an example for unix (this should all be on one line):

     
    ^cyclic-pages		(date; cat; (sleep 2; cd /u/www/local-docs;
     cvs -q update -d) &) >> $CVSROOT/CVSROOT/updatelog 2>&1
    

    This will cause checkins to repository directories starting with cyclic-pages to update the checked out tree in ‘/u/www/local-docs’.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    C.4 Rcsinfo

    The ‘rcsinfo’ file can be used to specify a form to edit when filling out the commit log. The ‘rcsinfo’ file has a syntax similar to the ‘verifymsg’, ‘commitinfo’ and ‘loginfo’ files. See section The common syntax. Unlike the other files the second part is not a command-line template. Instead, the part after the regular expression should be a full pathname to a file containing the log message template.

    If the repository name does not match any of the regular expressions in this file, the ‘DEFAULT’ line is used, if it is specified.

    All occurrences of the name ‘ALL’ appearing as a regular expression are used in addition to the first matching regular expression or ‘DEFAULT’.

    The log message template will be used as a default log message. If you specify a log message with ‘cvs commit -m message’ or ‘cvs commit -f file’ that log message will override the template.

    See section Verifying log messages, for an example ‘rcsinfo’ file.

    When CVS is accessing a remote repository, the contents of ‘rcsinfo’ at the time a directory is first checked out will specify a template. This template will be updated on all ‘cvs update’ commands. It will also be added to new directories added with a ‘cvs add new-directry’ command. In versions of CVS prior to version 1.12, the ‘CVS/Template’ file was not updated. If the CVS server is at version 1.12 or higher an older client may be used and the ‘CVS/Template’ will be updated from the server.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    C.5 Ignoring files via cvsignore

    There are certain file names that frequently occur inside your working copy, but that you don’t want to put under CVS control. Examples are all the object files that you get while you compile your sources. Normally, when you run ‘cvs update’, it prints a line for each file it encounters that it doesn’t know about (see section update output).

    CVS has a list of files (or sh(1) file name patterns) that it should ignore while running update, import and release. This list is constructed in the following way.

    • The list is initialized to include certain file name patterns: names associated with CVS administration, or with other common source control systems; common names for patch files, object files, archive files, and editor backup files; and other names that are usually artifacts of assorted utilities. Currently, the default list of ignored file name patterns is:
       
          RCS     SCCS    CVS     CVS.adm
          RCSLOG  cvslog.*
          tags    TAGS
          .make.state     .nse_depinfo
          *~      #*      .#*     ,*      _$*     *$
          *.old   *.bak   *.BAK   *.orig  *.rej   .del-*
          *.a     *.olb   *.o     *.obj   *.so    *.exe
          *.Z     *.elc   *.ln
          core
      
    • The per-repository list in ‘$CVSROOT/CVSROOT/cvsignore’ is appended to the list, if that file exists.
    • The per-user list in ‘.cvsignore’ in your home directory is appended to the list, if it exists.
    • Any entries in the environment variable $CVSIGNORE is appended to the list.
    • Any ‘-I’ options given to CVS is appended.
    • As CVS traverses through your directories, the contents of any ‘.cvsignore’ will be appended to the list. The patterns found in ‘.cvsignore’ are only valid for the directory that contains them, not for any sub-directories.

    In any of the 5 places listed above, a single exclamation mark (‘!’) clears the ignore list. This can be used if you want to store any file which normally is ignored by CVS.

    Specifying ‘-I !’ to cvs import will import everything, which is generally what you want to do if you are importing files from a pristine distribution or any other source which is known to not contain any extraneous files. However, looking at the rules above you will see there is a fly in the ointment; if the distribution contains any ‘.cvsignore’ files, then the patterns from those files will be processed even if ‘-I !’ is specified. The only workaround is to remove the ‘.cvsignore’ files in order to do the import. Because this is awkward, in the future ‘-I !’ might be modified to override ‘.cvsignore’ files in each directory.

    Note that the syntax of the ignore files consists of a series of lines, each of which contains a space separated list of filenames. This offers no clean way to specify filenames which contain spaces, but you can use a workaround like ‘foo?bar’ to match a file named ‘foo bar’ (it also matches ‘fooxbar’ and the like). Also note that there is currently no way to specify comments.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    C.6 The checkoutlist file

    It may be helpful to use CVS to maintain your own files in the ‘CVSROOT’ directory. For example, suppose that you have a script ‘logcommit.pl’ which you run by including the following line in the ‘commitinfo’ administrative file:

     
    ALL   $CVSROOT/CVSROOT/logcommit.pl
    

    To maintain ‘logcommit.pl’ with CVS you would add the following line to the ‘checkoutlist’ administrative file:

     
    logcommit.pl
    

    The format of ‘checkoutlist’ is one line for each file that you want to maintain using CVS, giving the name of the file.

    After setting up ‘checkoutlist’ in this fashion, the files listed there will function just like CVS’s built-in administrative files. For example, when checking in one of the files you should get a message such as:

     
    cvs commit: Rebuilding administrative file database
    

    and the checked out copy in the ‘CVSROOT’ directory should be updated.

    Note that listing ‘passwd’ (see section Setting up the server for password authentication) in ‘checkoutlist’ is not recommended for security reasons.

    For information about keeping a checkout out copy in a more general context than the one provided by ‘checkoutlist’, see Keeping a checked out copy.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    C.7 The history file

    The file ‘$CVSROOT/CVSROOT/history’ is used to log information for the history command (see section history—Show status of files and users). This file must be created to turn on logging. This is done automatically if the cvs init command is used to set up the repository (see section Creating a repository).

    The file format of the ‘history’ file is documented only in comments in the CVS source code, but generally programs should use the cvs history command to access it anyway, in case the format changes with future releases of CVS.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    C.8 Expansions in administrative files

    Sometimes in writing an administrative file, you might want the file to be able to know various things based on environment CVS is running in. There are several mechanisms to do that.

    To find the home directory of the user running CVS (from the HOME environment variable), use ‘~’ followed by ‘/’ or the end of the line. Likewise for the home directory of user, use ‘~user’. These variables are expanded on the server machine, and don’t get any reasonable expansion if pserver (see section Direct connection with password authentication) is in use; therefore user variables (see below) may be a better choice to customize behavior based on the user running CVS.

    One may want to know about various pieces of information internal to CVS. A CVS internal variable has the syntax ${variable}, where variable starts with a letter and consists of alphanumeric characters and ‘_’. If the character following variable is a non-alphanumeric character other than ‘_’, the ‘{’ and ‘}’ can be omitted. The CVS internal variables are:

    CVSROOT

    This is the absolute path to the current CVS root directory. See section The Repository, for a description of the various ways to specify this, but note that the internal variable contains just the directory and not any of the access method information.

    RCSBIN

    In CVS 1.9.18 and older, this specified the directory where CVS was looking for RCS programs. Because CVS no longer runs RCS programs, specifying this internal variable is now an error.

    CVSEDITOR
    EDITOR
    VISUAL

    These all expand to the same value, which is the editor that CVS is using. See section Global options, for how to specify this.

    USER

    Username of the user running CVS (on the CVS server machine). When using pserver, this is the user specified in the repository specification which need not be the same as the username the server is running as (see section Setting up the server for password authentication). Do not confuse this with the environment variable of the same name.

    If you want to pass a value to the administrative files which the user who is running CVS can specify, use a user variable. To expand a user variable, the administrative file contains ${=variable}. To set a user variable, specify the global option ‘-s’ to CVS, with argument variable=value. It may be particularly useful to specify this option via ‘.cvsrc’ (see section Default options and the ~/.cvsrc file).

    For example, if you want the administrative file to refer to a test directory you might create a user variable TESTDIR. Then if CVS is invoked as

     
    cvs -s TESTDIR=/work/local/tests
    

    and the administrative file contains sh ${=TESTDIR}/runtests, then that string is expanded to sh /work/local/tests/runtests.

    All other strings containing ‘$’ are reserved; there is no way to quote a ‘$’ character so that ‘$’ represents itself.

    Environment variables passed to administrative files are:

    CVS_USER

    The CVS-specific username provided by the user, if it can be provided (currently just for the pserver access method), and to the empty string otherwise. (CVS_USER and USER may differ when ‘$CVSROOT/CVSROOT/passwd’ is used to map CVS usernames to system usernames.)

    LOGNAME

    The username of the system user.

    USER

    Same as LOGNAME. Do not confuse this with the internal variable of the same name.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    C.9 The CVSROOT/config configuration file

    The administrative file ‘config’ contains various miscellaneous settings which affect the behavior of CVS. The syntax is slightly different from the other administrative files. Variables are not expanded. Lines which start with ‘#’ are considered comments. Other lines consist of a keyword, ‘=’, and a value. Note that this syntax is very strict. Extraneous spaces or tabs are not permitted.

    Currently defined keywords are:

    RCSBIN=bindir

    For CVS 1.9.12 through 1.9.18, this setting told CVS to look for RCS programs in the bindir directory. Current versions of CVS do not run RCS programs; for compatibility this setting is accepted, but it does nothing.

    SystemAuth=value

    If value is ‘yes’, then pserver should check for users in the system’s user database if not found in ‘CVSROOT/passwd’. If it is ‘no’, then all pserver users must exist in ‘CVSROOT/passwd’. The default is ‘yes’. For more on pserver, see Direct connection with password authentication.

    TopLevelAdmin=value

    Modify the ‘checkout’ command to create a ‘CVS’ directory at the top level of the new working directory, in addition to ‘CVS’ directories created within checked-out directories. The default value is ‘no’.

    This option is useful if you find yourself performing many commands at the top level of your working directory, rather than in one of the checked out subdirectories. The ‘CVS’ directory created there will mean you don’t have to specify CVSROOT for each command. It also provides a place for the ‘CVS/Template’ file (see section How data is stored in the working directory).

    LockDir=directory

    Put CVS lock files in directory rather than directly in the repository. This is useful if you want to let users read from the repository while giving them write access only to directory, not to the repository. It can also be used to put the locks on a very fast in-memory file system to speed up locking and unlocking the repository. You need to create directory, but CVS will create subdirectories of directory as it needs them. For information on CVS locks, see Several developers simultaneously attempting to run CVS.

    Before enabling the LockDir option, make sure that you have tracked down and removed any copies of CVS 1.9 or older. Such versions neither support LockDir, nor will give an error indicating that they don’t support it. The result, if this is allowed to happen, is that some CVS users will put the locks one place, and others will put them another place, and therefore the repository could become corrupted. CVS 1.10 does not support LockDir but it will print a warning if run on a repository with LockDir enabled.

    LogHistory=value

    Control what is logged to the ‘CVSROOT/history’ file (see section history—Show status of files and users). Default of ‘TOEFWUCGMAR’ (or simply ‘all’) will log all transactions. Any subset of the default is legal. (For example, to only log transactions that modify the ‘*,v’ files, use ‘LogHistory=TMAR’.)

    RereadLogAfterVerify=value

    Modify the ‘commit’ command such that CVS will reread the log message after running the program specified by ‘verifymsg’. value may be one of ‘yes’ or ‘always’, indicating that the log message should always be reread; ‘no’ or ‘never’, indicating that it should never be reread; or value may be ‘stat’, indicating that the file should be checked with the filesystem ‘stat()’ function to see if it has changed (see warning below) before rereading. The default value is ‘always’.

    Note: the ‘stat’ mode can cause CVS to pause for up to one extra second per directory committed. This can be less IO and CPU intensive but is not recommended for use with large repositories

    See section Verifying log messages, for more information on how verifymsg may be used.

    UserAdminOptions=value

    Control what options will be allowed with the cvs admin command (see section admin—Administration) for users not in the cvsadmin group. The value string is a list of single character options which should be allowed. If a user who is not a member of the cvsadmin group tries to execute any cvs admin option which is not listed they will will receive an error message reporting that the option is restricted.

    If no cvsadmin group exists on the server, CVS will ignore the UserAdminOptions keyword (see section admin—Administration).

    When not specified, UserAdminOptions defaults to ‘k’. In other words, it defaults to allowing users outside of the cvsadmin group to use the cvs admin command only to change the default keyword expansion mode for files.

    As an example, to restrict users not in the cvsadmin group to using cvs admin to change the default keyword substitution mode, lock revisions, unlock revisions, and replace the log message, use ‘UserAdminOptions=klum’.


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/ccvs/cvs.html0000644000175000017500000002001711264347121023060 0ustar flichtenheldflichtenheld CVS—Concurrent Versions System v4.2
    [Top] [Contents] [Index] [ ? ]

    CVS—Concurrent Versions System v4.2

    This info manual describes how to use and administer CVS version 4.2.


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/ccvs/cvs_9.html0000644000175000017500000003332511264347121023316 0ustar flichtenheldflichtenheld CVS—Concurrent Versions System v4.2: 9. Handling binary files
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    9. Handling binary files

    The most common use for CVS is to store text files. With text files, CVS can merge revisions, display the differences between revisions in a human-visible fashion, and other such operations. However, if you are willing to give up a few of these abilities, CVS can store binary files. For example, one might store a web site in CVS including both text files and binary images.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    9.1 The issues with binary files

    While the need to manage binary files may seem obvious if the files that you customarily work with are binary, putting them into version control does present some additional issues.

    One basic function of version control is to show the differences between two revisions. For example, if someone else checked in a new version of a file, you may wish to look at what they changed and determine whether their changes are good. For text files, CVS provides this functionality via the cvs diff command. For binary files, it may be possible to extract the two revisions and then compare them with a tool external to CVS (for example, word processing software often has such a feature). If there is no such tool, one must track changes via other mechanisms, such as urging people to write good log messages, and hoping that the changes they actually made were the changes that they intended to make.

    Another ability of a version control system is the ability to merge two revisions. For CVS this happens in two contexts. The first is when users make changes in separate working directories (see section Multiple developers). The second is when one merges explicitly with the ‘update -j’ command (see section Branching and merging).

    In the case of text files, CVS can merge changes made independently, and signal a conflict if the changes conflict. With binary files, the best that CVS can do is present the two different copies of the file, and leave it to the user to resolve the conflict. The user may choose one copy or the other, or may run an external merge tool which knows about that particular file format, if one exists. Note that having the user merge relies primarily on the user to not accidentally omit some changes, and thus is potentially error prone.

    If this process is thought to be undesirable, the best choice may be to avoid merging. To avoid the merges that result from separate working directories, see the discussion of reserved checkouts (file locking) in Multiple developers. To avoid the merges resulting from branches, restrict use of branches.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    9.2 How to store binary files

    There are two issues with using CVS to store binary files. The first is that CVS by default converts line endings between the canonical form in which they are stored in the repository (linefeed only), and the form appropriate to the operating system in use on the client (for example, carriage return followed by line feed for Windows NT).

    The second is that a binary file might happen to contain data which looks like a keyword (see section Keyword substitution), so keyword expansion must be turned off.

    The ‘-kb’ option available with some CVS commands insures that neither line ending conversion nor keyword expansion will be done.

    Here is an example of how you can create a new file using the ‘-kb’ flag:

     
    $ echo '$Id$' > kotest
    $ cvs add -kb -m"A test file" kotest
    $ cvs ci -m"First checkin; contains a keyword" kotest
    

    If a file accidentally gets added without ‘-kb’, one can use the cvs admin command to recover. For example:

     
    $ echo '$Id$' > kotest
    $ cvs add -m"A test file" kotest
    $ cvs ci -m"First checkin; contains a keyword" kotest
    $ cvs admin -kb kotest
    $ cvs update -A kotest
    # For non-unix systems:
    # Copy in a good copy of the file from outside CVS
    $ cvs commit -m "make it binary" kotest
    

    When you check in the file ‘kotest’ the file is not preserved as a binary file, because you did not check it in as a binary file. The cvs admin -kb command sets the default keyword substitution method for this file, but it does not alter the working copy of the file that you have. If you need to cope with line endings (that is, you are using CVS on a non-unix system), then you need to check in a new copy of the file, as shown by the cvs commit command above. On unix, the cvs update -A command suffices. (Note that you can use cvs log to determine the default keyword substitution method for a file and cvs status to determine the keyword substitution method for a working copy.)

    However, in using cvs admin -k to change the keyword expansion, be aware that the keyword expansion mode is not version controlled. This means that, for example, that if you have a text file in old releases, and a binary file with the same name in new releases, CVS provides no way to check out the file in text or binary mode depending on what version you are checking out. There is no good workaround for this problem.

    You can also set a default for whether cvs add and cvs import treat a file as binary based on its name; for example you could say that files who names end in ‘.exe’ are binary. See section The cvswrappers file. There is currently no way to have CVS detect whether a file is binary based on its contents. The main difficulty with designing such a feature is that it is not clear how to distinguish between binary and non-binary files, and the rules to apply would vary considerably with the operating system.


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/ccvs/cvs_23.html0000644000175000017500000002026411264347121023370 0ustar flichtenheldflichtenheld CVS—Concurrent Versions System v4.2: H. Dealing with bugs in CVS or this manual
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    H. Dealing with bugs in CVS or this manual

    Neither CVS nor this manual is perfect, and they probably never will be. If you are having trouble using CVS, or think you have found a bug, there are a number of things you can do about it. Note that if the manual is unclear, that can be considered a bug in the manual, so these problems are often worth doing something about as well as problems with CVS itself.

    • If you want someone to help you and fix bugs that you report, there are companies which will do that for a fee. One such company is:
       
      Ximbiot
      319 S. River St.
      Harrisburg, PA  17104-1657
      USA
      Email: info@ximbiot.com
      Phone: (717) 579-6168
      Fax:   (717) 234-3125
      http://ximbiot.com/
      
      
    • If you got CVS through a distributor, such as an operating system vendor or a vendor of freeware CD-ROMs, you may wish to see whether the distributor provides support. Often, they will provide no support or minimal support, but this may vary from distributor to distributor.
    • If you have the skills and time to do so, you may wish to fix the bug yourself. If you wish to submit your fix for inclusion in future releases of CVS, see the file HACKING in the CVS source distribution. It contains much more information on the process of submitting fixes.
    • There may be resources on the net which can help. Two good places to start are:
       
      http://www.cvshome.org
      http://www.loria.fr/~molli/cvs-index.html
      

      If you are so inspired, increasing the information available on the net is likely to be appreciated. For example, before the standard CVS distribution worked on Windows 95, there was a web page with some explanation and patches for running CVS on Windows 95, and various people helped out by mentioning this page on mailing lists or newsgroups when the subject came up.

    • It is also possible to report bugs to bug-cvs. Note that someone may or may not want to do anything with your bug report—if you need a solution consider one of the options mentioned above. People probably do want to hear about bugs which are particularly severe in consequences and/or easy to fix, however. You can also increase your odds by being as clear as possible about the exact nature of the bug and any other relevant information. The way to report bugs is to send email to bug-cvs@gnu.org. Note that submissions to bug-cvs may be distributed under the terms of the GNU Public License, so if you don’t like this, don’t submit them. There is usually no justification for sending mail directly to one of the CVS maintainers rather than to bug-cvs; those maintainers who want to hear about such bug reports read bug-cvs. Also note that sending a bug report to other mailing lists or newsgroups is not a substitute for sending it to bug-cvs. It is fine to discuss CVS bugs on whatever forum you prefer, but there are not necessarily any maintainers reading bug reports sent anywhere except bug-cvs.

    People often ask if there is a list of known bugs or whether a particular bug is a known one. The file BUGS in the CVS source distribution is one list of known bugs, but it doesn’t necessarily try to be comprehensive. Perhaps there will never be a comprehensive, detailed list of known bugs.


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/ccvs/cvs.20000644000175000017500000000000011264347121022243 0ustar flichtenheldflichtenheldtexi2html-1.82/test/manuals/res/ccvs/cvs_12.html0000644000175000017500000010100711264347121023361 0ustar flichtenheldflichtenheld CVS—Concurrent Versions System v4.2: 12. Keyword substitution
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    12. Keyword substitution

    As long as you edit source files inside a working directory you can always find out the state of your files via ‘cvs status’ and ‘cvs log’. But as soon as you export the files from your development environment it becomes harder to identify which revisions they are.

    CVS can use a mechanism known as keyword substitution (or keyword expansion) to help identifying the files. Embedded strings of the form $keyword$ and $keyword:…$ in a file are replaced with strings of the form $keyword:value$ whenever you obtain a new revision of the file.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    12.1 Keyword List

    This is a list of the keywords:

    $Author$

    The login name of the user who checked in the revision.

    $CVSHeader

    A standard header (similar to $Header$, but with the CVS root stripped off). It contains the relative pathname of the RCS file to the CVS root, the revision number, the date (UTC), the author, the state, and the locker (if locked). Files will normally never be locked when you use CVS.

    Note that this keyword has only been recently introduced to CVS and may cause problems with existing installations if $CVSHeader$ is already in the files for a different purpose. This keyword may be excluded using the KeywordExpansion=eCVSHeader in the ‘CVSROOT/config’ file. See Configuring Keyord Expansion for more details.

    $Date$

    The date and time (UTC) the revision was checked in.

    $Header$

    A standard header containing the full pathname of the RCS file, the revision number, the date (UTC), the author, the state, and the locker (if locked). Files will normally never be locked when you use CVS.

    $Id$

    Same as $Header$, except that the RCS filename is without a path.

    $Name$

    Tag name used to check out this file. The keyword is expanded only if one checks out with an explicit tag name. For example, when running the command cvs co -r first, the keyword expands to ‘Name: first’.

    $Locker$

    The login name of the user who locked the revision (empty if not locked, which is the normal case unless cvs admin -l is in use).

    $Log$

    The log message supplied during commit, preceded by a header containing the RCS filename, the revision number, the author, and the date (UTC). Existing log messages are not replaced. Instead, the new log message is inserted after $Log:…$. Each new line is prefixed with the same string which precedes the $Log keyword. For example, if the file contains:

     
      /* Here is what people have been up to:
       *
       * $Log: frob.c,v $
       * Revision 1.1  1997/01/03 14:23:51  joe
       * Add the superfrobnicate option
       *
       */
    

    then additional lines which are added when expanding the $Log keyword will be preceded by ‘ * ’. Unlike previous versions of CVS and RCS, the comment leader from the RCS file is not used. The $Log keyword is useful for accumulating a complete change log in a source file, but for several reasons it can be problematic. See section Problems with the $Log$ keyword..

    $RCSfile$

    The name of the RCS file without a path.

    $Revision$

    The revision number assigned to the revision.

    $Source$

    The full pathname of the RCS file.

    $State$

    The state assigned to the revision. States can be assigned with cvs admin -s—see admin options.

    Local keyword

    The LocalKeyword option in the ‘CVSROOT/config’ file may be used to specify a local keyword which is to be used as an alias for one of the other keywords. For example, if the ‘CVSROOT/config’ file contains a line with LocalKeyword=MYBSD=CVSHeader, then a file with the local keyword $MYBSD$ will be expanded as if it were a $CVSHeader$ keyword. If the src/frob.c file contained this keyword, it might look something like this:

     
      /*
       * $MYBSD: src/frob.c,v 1.1 2003/05/04 09:27:45 john Exp $ 
       */
    

    Many repositories make use of a such a “local keyword” feature. An old patch to CVS provided the LocalKeyword feature using a tag= option and called this the “custom tag” or “local tag” feature. It was used in conjunction with the what they called the tagexpand= option. In CVS this other option is known as the KeywordExpand option. See Configuring Keyord Expansion for more details.

    Examples from popular projects include: $FreeBSD$, $NetBSD$, $OpenBSD$, $XFree86$, $Xorg$.

    The advantage of this is that you can include your local version information in a file using this local keyword without disrupting the upstream version information (which may be a different local keyword or a standard keyword). Allowing bug reports and the like to more properly identify the source of the original bug to the third-party and reducing the number of conflicts that arise during an import of a new version.

    All keyword expansion except the local keyword may be disabled using the KeywordExpansion option in the ‘CVSROOT/config’ file—see Configuring Keyord Expansion for more details.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    12.2 Using keywords

    To include a keyword string you simply include the relevant text string, such as $Id$, inside the file, and commit the file. CVS will automatically expand the string as part of the commit operation.

    It is common to embed the $Id$ string in the source files so that it gets passed through to generated files. For example, if you are managing computer program source code, you might include a variable which is initialized to contain that string. Or some C compilers may provide a #pragma ident directive. Or a document management system might provide a way to pass a string through to generated files.

    The ident command (which is part of the RCS package) can be used to extract keywords and their values from a file. This can be handy for text files, but it is even more useful for extracting keywords from binary files.

     
    $ ident samp.c
    samp.c:
         $Id: samp.c,v 1.5 1993/10/19 14:57:32 ceder Exp $
    $ gcc samp.c
    $ ident a.out
    a.out:
         $Id: samp.c,v 1.5 1993/10/19 14:57:32 ceder Exp $
    

    SCCS is another popular revision control system. It has a command, what, which is very similar to ident and used for the same purpose. Many sites without RCS have SCCS. Since what looks for the character sequence @(#) it is easy to include keywords that are detected by either command. Simply prefix the keyword with the magic SCCS phrase, like this:

     
    static char *id="@(#) $Id: ab.c,v 1.5 1993/10/19 14:57:32 ceder Exp $";
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    12.3 Avoiding substitution

    Keyword substitution has its disadvantages. Sometimes you might want the literal text string ‘$Author$’ to appear inside a file without CVS interpreting it as a keyword and expanding it into something like ‘$Author: ceder $’.

    There is unfortunately no way to selectively turn off keyword substitution. You can use ‘-ko’ (see section Substitution modes) to turn off keyword substitution entirely.

    In many cases you can avoid using keywords in the source, even though they appear in the final product. For example, the source for this manual contains ‘$@asis{}Author$’ whenever the text ‘$Author$’ should appear. In nroff and troff you can embed the null-character \& inside the keyword for a similar effect.

    It is also possible to specify an explicit list of keywords to include or exclude using the KeywordExpand option in the ‘CVSROOT/config’ file–see Configuring Keyord Expansion for more details. This feature is intended primarily for use with the LocalKeyword option–see Keyword List.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    12.4 Substitution modes

    Each file has a stored default substitution mode, and each working directory copy of a file also has a substitution mode. The former is set by the ‘-k’ option to cvs add and cvs admin; the latter is set by the ‘-k’ or ‘-A’ options to cvs checkout or cvs update. cvs diff also has a ‘-k’ option. For some examples, see Handling binary files, and Merging and keywords.

    The modes available are:

    -kkv

    Generate keyword strings using the default form, e.g. $Revision: 5.7 $ for the Revision keyword.

    -kkvl

    Like ‘-kkv’, except that a locker’s name is always inserted if the given revision is currently locked. The locker’s name is only relevant if cvs admin -l is in use.

    -kk

    Generate only keyword names in keyword strings; omit their values. For example, for the Revision keyword, generate the string $Revision$ instead of $Revision: 5.7 $. This option is useful to ignore differences due to keyword substitution when comparing different revisions of a file (see section Merging and keywords).

    -ko

    Generate the old keyword string, present in the working file just before it was checked in. For example, for the Revision keyword, generate the string $Revision: 1.1 $ instead of $Revision: 5.7 $ if that is how the string appeared when the file was checked in.

    -kb

    Like ‘-ko’, but also inhibit conversion of line endings between the canonical form in which they are stored in the repository (linefeed only), and the form appropriate to the operating system in use on the client. For systems, like unix, which use linefeed only to terminate lines, this is very similar to ‘-ko’. For more information on binary files, see Handling binary files. In CVS version 1.12.2 and later ‘-kb’, as set by cvs add, cvs admin, or cvs import may not be overridden by a ‘-k’ option specified on the command line.

    -kv

    Generate only keyword values for keyword strings. For example, for the Revision keyword, generate the string 5.7 instead of $Revision: 5.7 $. This can help generate files in programming languages where it is hard to strip keyword delimiters like $Revision: $ from a string. However, further keyword substitution cannot be performed once the keyword names are removed, so this option should be used with care.

    One often would like to use ‘-kv’ with cvs export—see section export—Export sources from CVS, similar to checkout. But be aware that doesn’t handle an export containing binary files correctly.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    12.5 Configuring Keyord Expansion

    In a repository that includes third-party software on vendor branches, it is sometimes helpful to configure CVS to use a local keyword instead of the standard $Id$ or $Header$ keywords. Examples from real projects includ, $Xorg$, $XFree86$, $FreeBSD$, $NetBSD$, $OpenBSD$, and even $dotat$. The advantage of this is that you can include your local version information in a file using this local keyword (sometimes called a “custom tag” or a “local tag”) without disrupting the upstream version information (which may be a different local keyword or a standard keyword). In these cases, it is typically desirable to disable the expansion of all keywords except the configured local keyword.

    The KeywordExpansion option in the ‘CVSROOT/config’ file is intended to allow for the either the explicit exclusion of a keyword or list of keywords, or for the explicit inclusion of a keyword or a list of keywords. This list may include the LocalKeyword that has been configured.

    The KeywordExpansion option is followed by = and the next character may either be i to start an inclusion list or e to start an exclusion list. If the following lines were added to the ‘CVSROOT/config’ file:

     
            # Add a "MyBSD" keyword and restrict keyword
            # expansion
            LocalKeyword=MyBSD=CVSHeader
            KeywordExpand=iMyBSD
    

    then only the $MyBSD$ keyword would be expanded. A list may be used. The this example:

     
            # Add a "MyBSD" keyword and restrict keyword
            # expansion to the MyBSD, Name and Date keywords.
            LocalKeyword=MyBSD=CVSHeader
            KeywordExpand=iMyBSD,Name,Date
    

    would allow $MyBSD$, $Name$, and $Date$ to be expanded.

    It is also possible to configure an exclusion list using the following:

     
            # Do not expand the non-RCS keyword CVSHeader
            KeywordExpand=eCVSHeader
    

    This allows CVS to ignore the recently introduced $CVSHeader$ keyword and retain all of the others. The exclusion entry could also contain the standard RCS keyword list, but this could be confusing to users that expect RCS keywords to be expanded, so ycare should be taken to properly set user expectations for a repository that is configured in that manner.

    If there is a desire to not have any RCS keywords expanded and not use the -ko flags everywhere, an administrator may disable all keyword expansion using the ‘CVSROOT/config’ line:

     
    	# Do not expand any RCS keywords
    	KeywordExpand=i
    

    this could be confusing to users that expect RCS keywords like $Id$ to be expanded properly, so care should be taken to properly set user expectations for a repository so configured.

    It should be noted that a patch to provide both the KeywordExpand and LocalKeyword features has been around a long time. However, that patch implemented these features using tag= and tagexpand= keywords and those keywords are NOT recognized.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    12.6 Problems with the $Log$ keyword.

    The $Log$ keyword is somewhat controversial. As long as you are working on your development system the information is easily accessible even if you do not use the $Log$ keyword—just do a cvs log. Once you export the file the history information might be useless anyhow.

    A more serious concern is that CVS is not good at handling $Log$ entries when a branch is merged onto the main trunk. Conflicts often result from the merging operation.

    People also tend to "fix" the log entries in the file (correcting spelling mistakes and maybe even factual errors). If that is done the information from cvs log will not be consistent with the information inside the file. This may or may not be a problem in real life.

    It has been suggested that the $Log$ keyword should be inserted last in the file, and not in the files header, if it is to be used at all. That way the long list of change messages will not interfere with everyday source file browsing.


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/ccvs/cvs_6.html0000644000175000017500000001540511264347121023312 0ustar flichtenheldflichtenheld CVS—Concurrent Versions System v4.2: 6. Recursive behavior
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    6. Recursive behavior

    Almost all of the subcommands of CVS work recursively when you specify a directory as an argument. For instance, consider this directory structure:

     
          $HOME
            |
            +--tc
            |   |
                +--CVS
                |      (internal CVS files)
                +--Makefile
                +--backend.c
                +--driver.c
                +--frontend.c
                +--parser.c
                +--man
                |    |
                |    +--CVS
                |    |  (internal CVS files)
                |    +--tc.1
                |
                +--testing
                     |
                     +--CVS
                     |  (internal CVS files)
                     +--testpgm.t
                     +--test2.t
    

    If ‘tc’ is the current working directory, the following is true:

    • cvs update testing’ is equivalent to
       
      cvs update testing/testpgm.t testing/test2.t
      
    • cvs update testing man’ updates all files in the subdirectories
    • cvs update .’ or just ‘cvs update’ updates all files in the tc directory

    If no arguments are given to update it will update all files in the current working directory and all its subdirectories. In other words, ‘.’ is a default argument to update. This is also true for most of the CVS subcommands, not only the update command.

    The recursive behavior of the CVS subcommands can be turned off with the ‘-l’ option. Conversely, the ‘-R’ option can be used to force recursion if ‘-l’ is specified in ‘~/.cvsrc’ (see section Default options and the ~/.cvsrc file).

     
    $ cvs update -l         # Don't update files in subdirectories
    

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/ccvs/cvs_20.html0000644000175000017500000001276411264347121023373 0ustar flichtenheldflichtenheld CVS—Concurrent Versions System v4.2: E. Compatibility between CVS Versions
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    E. Compatibility between CVS Versions

    The repository format is compatible going back to CVS 1.3. But see Using watches with old versions of CVS, if you have copies of CVS 1.6 or older and you want to use the optional developer communication features.

    The working directory format is compatible going back to CVS 1.5. It did change between CVS 1.3 and CVS 1.5. If you run CVS 1.5 or newer on a working directory checked out with CVS 1.3, CVS will convert it, but to go back to CVS 1.3 you need to check out a new working directory with CVS 1.3.

    The remote protocol is interoperable going back to CVS 1.5, but no further (1.5 was the first official release with the remote protocol, but some older versions might still be floating around). In many cases you need to upgrade both the client and the server to take advantage of new features and bugfixes, however.


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/ccvs/cvs_24.html0000644000175000017500000015463311264347121023401 0ustar flichtenheldflichtenheld CVS—Concurrent Versions System v4.2: Index
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Index

    Jump to:   !   #   &   -   .   /   :   <   =   >   _  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   R   S   T   U   V   W   X   Z  
    Index Entry Section

    !
    !, in modules fileC.1.4 Excluding directories

    #
    #cvs.lock, removing10.5 Several developers simultaneously attempting to run CVS
    #cvs.lock, technical details2.2.6 CVS locks in the repository
    #cvs.rfl, and backups2.7 Backing up a repository
    #cvs.rfl, removing10.5 Several developers simultaneously attempting to run CVS
    #cvs.rfl, technical details2.2.6 CVS locks in the repository
    #cvs.tfl2.2.6 CVS locks in the repository
    #cvs.wfl, removing10.5 Several developers simultaneously attempting to run CVS
    #cvs.wfl, technical details2.2.6 CVS locks in the repository

    &
    &, in modules fileC.1.3 Ampersand modules

    -
    -a, in modules fileC.1.1 Alias modules
    -d, in modules fileC.1.5 Module options
    -e, in modules fileC.1.5 Module options
    -e, in modules fileC.1.6 How the modules file “program options” programs are run
    -j (merging branches)5.6 Merging an entire branch
    -j (merging branches), and keyword substitution5.10 Merging and keywords
    -k (keyword substitution)12.4 Substitution modes
    -kk, to avoid conflicts during a merge5.10 Merging and keywords
    -o, in modules fileC.1.5 Module options
    -o, in modules fileC.1.6 How the modules file “program options” programs are run
    -s, in modules fileC.1.5 Module options
    -t, in modules fileC.1.5 Module options
    -t, in modules fileC.1.6 How the modules file “program options” programs are run

    .
    .# filesA.16.2 update output
    .bashrc, setting CVSROOT in2.1 Telling CVS where your repository is
    .cshrc, setting CVSROOT in2.1 Telling CVS where your repository is
    .cvsrc fileA.3 Default options and the ~/.cvsrc file
    .profile, setting CVSROOT in2.1 Telling CVS where your repository is
    .tcshrc, setting CVSROOT in2.1 Telling CVS where your repository is

    /
    /usr/local/cvsroot, as example repository2. The Repository

    :
    :ext:, setting up2.9.2 Connecting with rsh
    :ext:, troubleshootingF.2 Trouble making a connection to a CVS server
    :fork:, setting up2.9.6 Connecting with fork
    :gserver:, setting up2.9.4 Direct connection with GSSAPI
    :kserver:, setting up2.9.5 Direct connection with kerberos
    :local:, setting up2. The Repository
    :pserver:, setting up2.9.3.2 Using the client with password authentication
    :pserver:, troubleshootingF.2 Trouble making a connection to a CVS server
    :server:, setting up2.9.2 Connecting with rsh
    :server:, troubleshootingF.2 Trouble making a connection to a CVS server

    <
    <<<<<<<10.3 Conflicts example

    =
    =======10.3 Conflicts example

    >
    >>>>>>>10.3 Conflicts example

    _
    __ files (VMS)A.16.2 update output

    A
    Abandoning work10.6.3 How to edit a file which is being watched
    Access a branch5.3 Accessing branches
    add (subcommand)7.1 Adding files to a directory
    Adding a tag4.4 Tags–Symbolic revisions
    Adding files7.1 Adding files to a directory
    Admin (subcommand)A.6 admin—Administration
    Administrative files (intro)2.4 The administrative files
    Administrative files (reference)C. Reference manual for Administrative files
    Administrative files, editing them2.4.1 Editing administrative files
    Alias modulesC.1.1 Alias modules
    ALL in commitinfoC.3.2 Commitinfo
    Ampersand modulesC.1.3 Ampersand modules
    annotate (subcommand)8.4 Annotate command
    Atomic transactions, lack of10.5 Several developers simultaneously attempting to run CVS
    Attic2.2.4 The attic
    Authenticated client, using2.9.3.2 Using the client with password authentication
    Authenticating server, setting up2.9.3.1 Setting up the server for password authentication
    Authentication, streamA.4 Global options
    Author keyword12.1 Keyword List
    Automatically ignored filesC.5 Ignoring files via cvsignore
    Avoiding editor invocationA.5 Common command options

    B
    Backing up, repository2.7 Backing up a repository
    Base directory, in CVS directory2.3 How data is stored in the working directory
    BASE, as reserved tag name4.4 Tags–Symbolic revisions
    BASE, special tagA.5 Common command options
    Baserev file, in CVS directory2.3 How data is stored in the working directory
    Baserev.tmp file, in CVS directory2.3 How data is stored in the working directory
    Bill of materials14. How your build system interacts with CVS
    Binary files9. Handling binary files
    Branch merge example5.6 Merging an entire branch
    Branch number4.1 Revision numbers
    Branch number5.4 Branches and revisions
    Branch tags, deleting4.7 Deleting, moving, and renaming tags
    Branch tags, moving4.7 Deleting, moving, and renaming tags
    Branch, accessing5.3 Accessing branches
    Branch, check out5.3 Accessing branches
    Branch, creating a5.2 Creating a branch
    Branch, identifying5.3 Accessing branches
    Branch, retrieving5.3 Accessing branches
    Branch, vendor-13. Tracking third-party sources
    Branches motivation5.1 What branches are good for
    Branches, copying changes between5. Branching and merging
    Branches, sticky5.3 Accessing branches
    Branching5. Branching and merging
    Bringing a file up to date10.2 Bringing a file up to date
    Bugs in this manual or CVSH. Dealing with bugs in CVS or this manual
    Bugs, reportingH. Dealing with bugs in CVS or this manual
    Builds14. How your build system interacts with CVS

    C
    Changes, copying between branches5. Branching and merging
    Changing a log messageA.6.1 admin options
    Check out a branch5.3 Accessing branches
    Checked out copy, keepingC.3.5.2 Keeping a checked out copy
    Checking out source1.3.1 Getting the source
    checkout (subcommand)A.7 checkout—Check out sources for editing
    Checkout programC.1.5 Module options
    Checkout, as term for getting ready to edit10.6.3 How to edit a file which is being watched
    Checkout, example1.3.1 Getting the source
    checkoutlistC.6 The checkoutlist file
    Choosing, reserved or unreserved checkouts10.7 Choosing between reserved or unreserved checkouts
    Cleaning up1.3.3 Cleaning up
    Client/Server Operation2.9 Remote repositories
    Client/Server Operation, port specification2.9 Remote repositories
    Client/Server Operation, port specification2.9.3.1 Setting up the server for password authentication
    co (subcommand)A.7 checkout—Check out sources for editing
    Command referenceB. Quick reference to CVS commands
    Command structureA.1 Overall structure of CVS commands
    Comment leaderA.6.1 admin options
    commit (subcommand)A.8 commit—Check files into the repository
    commitinfoC.3.2 Commitinfo
    commitinfo’, command environmentC.3.2 Commitinfo
    commitinfo’, working directoryC.3.2 Commitinfo
    Commits, precommit verification ofC.3.2 Commitinfo
    Committing changes to files1.3.2 Committing your changes
    Committing, administrative support filesC.3 The commit support files
    Committing, when to11.1 When to commit?
    Common optionsA.5 Common command options
    Common syntax of info filesC.3.1 The common syntax
    Compatibility, between CVS versionsE. Compatibility between CVS Versions
    CompressionA.4 Global options
    CompressionB. Quick reference to CVS commands
    COMSPEC, environment variableD. All environment variables which affect CVS
    config, in CVSROOTC.9 The CVSROOT/config configuration file
    Configuring keyword expansion12.5 Configuring Keyord Expansion
    Conflict markers10.3 Conflicts example
    Conflict resolution10.3 Conflicts example
    Conflicts (merge example)10.3 Conflicts example
    Contributors (CVS program)1.1 What is CVS?
    Contributors (manual)G. Credits
    Copying a repository2.8 Moving a repository
    Copying changes5. Branching and merging
    Correcting a log messageA.6.1 admin options
    Creating a branch5.2 Creating a branch
    Creating a project3. Starting a project with CVS
    Creating a repository2.6 Creating a repository
    Credits (CVS program)1.1 What is CVS?
    Credits (manual)G. Credits
    CVS 1.6, and watches10.6.5 Using watches with old versions of CVS
    CVS command structureA.1 Overall structure of CVS commands
    CVS directory, in repository2.2.5 The CVS directory in the repository
    CVS directory, in working directory2.3 How data is stored in the working directory
    CVS passwd file2.9.3.1 Setting up the server for password authentication
    CVS, history of1.1 What is CVS?
    CVS, introduction to1.1 What is CVS?
    CVS, versions ofE. Compatibility between CVS Versions
    CVS/Base directory2.3 How data is stored in the working directory
    CVS/Baserev file2.3 How data is stored in the working directory
    CVS/Baserev.tmp file2.3 How data is stored in the working directory
    CVS/Entries file2.3 How data is stored in the working directory
    CVS/Entries.Backup file2.3 How data is stored in the working directory
    CVS/Entries.Log file2.3 How data is stored in the working directory
    CVS/Entries.Static file2.3 How data is stored in the working directory
    CVS/Notify file2.3 How data is stored in the working directory
    CVS/Notify.tmp file2.3 How data is stored in the working directory
    CVS/Repository file2.3 How data is stored in the working directory
    CVS/Root file2.1 Telling CVS where your repository is
    CVS/Tag file2.3 How data is stored in the working directory
    CVS/Template file2.3 How data is stored in the working directory
    cvsadminA.6 admin—Administration
    CVSEDITOR, environment variable1.3.2 Committing your changes
    CVSEDITOR, environment variableD. All environment variables which affect CVS
    CVSEDITOR, internal variableC.8 Expansions in administrative files
    CVSHeader keyword12.1 Keyword List
    cvsignore (admin file), globalC.5 Ignoring files via cvsignore
    CVSIGNORE, environment variableD. All environment variables which affect CVS
    CVSREAD, environment variableD. All environment variables which affect CVS
    CVSREAD, overridingA.4 Global options
    CVSREADONLYFS, environment variableD. All environment variables which affect CVS
    cvsroot2. The Repository
    CVSROOT (file)C. Reference manual for Administrative files
    CVSROOT, environment variable2.1 Telling CVS where your repository is
    CVSROOT, internal variableC.8 Expansions in administrative files
    CVSROOT, module name2.4 The administrative files
    CVSROOT, multiple repositories2.5 Multiple repositories
    CVSROOT, overridingA.4 Global options
    CVSROOT, storage of files2.2.7 How files are stored in the CVSROOT directory
    CVSROOT/configC.9 The CVSROOT/config configuration file
    CVSROOT/Emptydir directory2.3 How data is stored in the working directory
    CVSUMASK, environment variable2.2.2 File permissions
    cvswrappers (admin file)C.2 The cvswrappers file
    CVSWRAPPERS, environment variableC.2 The cvswrappers file
    CVSWRAPPERS, environment variableD. All environment variables which affect CVS
    CVS_CLIENT_LOG, environment variableD. All environment variables which affect CVS
    CVS_CLIENT_PORT2.9.5 Direct connection with kerberos
    CVS_IGNORE_REMOTE_ROOT, environment variableD. All environment variables which affect CVS
    CVS_LOCAL_BRANCH_NUM, environment variableD. All environment variables which affect CVS
    CVS_PASSFILE, environment variable2.9.3.2 Using the client with password authentication
    CVS_PID, environment variableD. All environment variables which affect CVS
    CVS_RCMD_PORT, environment variableD. All environment variables which affect CVS
    CVS_RSH, environment variableD. All environment variables which affect CVS
    CVS_SERVER, and :fork:2.9.6 Connecting with fork
    CVS_SERVER, environment variable2.9.2 Connecting with rsh
    CVS_SERVER_SLEEP, environment variableD. All environment variables which affect CVS
    CVS_USER, environment variableC.8 Expansions in administrative files

    Jump to:   !   #   &   -   .   /   :   <   =   >   _  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   R   S   T   U   V   W   X   Z  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/ccvs/cvs_21.html0000644000175000017500000011051111264347121023361 0ustar flichtenheldflichtenheld CVS—Concurrent Versions System v4.2: F. Troubleshooting
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    F. Troubleshooting

    If you are having trouble with CVS, this appendix may help. If there is a particular error message which you are seeing, then you can look up the message alphabetically. If not, you can look through the section on other problems to see if your problem is mentioned there.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    F.1 Partial list of error messages

    Here is a partial list of error messages that you may see from CVS. It is not a complete list—CVS is capable of printing many, many error messages, often with parts of them supplied by the operating system, but the intention is to list the common and/or potentially confusing error messages.

    The messages are alphabetical, but introductory text such as ‘cvs update: ’ is not considered in ordering them.

    In some cases the list includes messages printed by old versions of CVS (partly because users may not be sure which version of CVS they are using at any particular moment).

    file:line: Assertion 'text' failed

    The exact format of this message may vary depending on your system. It indicates a bug in CVS, which can be handled as described in Dealing with bugs in CVS or this manual.

    cvs command: authorization failed: server host rejected access

    This is a generic response when trying to connect to a pserver server which chooses not to provide a specific reason for denying authorization. Check that the username and password specified are correct and that the CVSROOT specified is allowed by ‘--allow-root’ in ‘inetd.conf’. See Direct connection with password authentication.

    cvs command: conflict: removed file was modified by second party

    This message indicates that you removed a file, and someone else modified it. To resolve the conflict, first run ‘cvs add file’. If desired, look at the other party’s modification to decide whether you still want to remove it. If you don’t want to remove it, stop here. If you do want to remove it, proceed with ‘cvs remove file’ and commit your removal.

    cannot change permissions on temporary directory
     
    Operation not permitted
    

    This message has been happening in a non-reproducible, occasional way when we run the client/server testsuite, both on Red Hat Linux 3.0.3 and 4.1. We haven’t been able to figure out what causes it, nor is it known whether it is specific to linux (or even to this particular machine!). If the problem does occur on other unices, ‘Operation not permitted’ would be likely to read ‘Not owner’ or whatever the system in question uses for the unix EPERM error. If you have any information to add, please let us know as described in Dealing with bugs in CVS or this manual. If you experience this error while using CVS, retrying the operation which produced it should work fine.

    cvs [server aborted]: Cannot check out files into the repository itself

    The obvious cause for this message (especially for non-client/server CVS) is that the CVS root is, for example, ‘/usr/local/cvsroot’ and you try to check out files when you are in a subdirectory, such as ‘/usr/local/cvsroot/test’. However, there is a more subtle cause, which is that the temporary directory on the server is set to a subdirectory of the root (which is also not allowed). If this is the problem, set the temporary directory to somewhere else, for example ‘/var/tmp’; see TMPDIR in All environment variables which affect CVS, for how to set the temporary directory.

    cannot commit files as 'root'

    See ‘'root' is not allowed to commit files’.

    cannot open CVS/Entries for reading: No such file or directory

    This generally indicates a CVS internal error, and can be handled as with other CVS bugs (see section Dealing with bugs in CVS or this manual). Usually there is a workaround—the exact nature of which would depend on the situation but which hopefully could be figured out.

    cvs [init aborted]: cannot open CVS/Root: No such file or directory

    This message is harmless. Provided it is not accompanied by other errors, the operation has completed successfully. This message should not occur with current versions of CVS, but it is documented here for the benefit of CVS 1.9 and older.

    cvs server: cannot open /root/.cvsignore: Permission denied
    cvs [server aborted]: can't chdir(/root): Permission denied

    See Trouble making a connection to a CVS server.

    cvs [checkout aborted]: cannot rename file file to CVS/,,file: Invalid argument

    This message has been reported as intermittently happening with CVS 1.9 on Solaris 2.5. The cause is unknown; if you know more about what causes it, let us know as described in Dealing with bugs in CVS or this manual.

    cvs [command aborted]: cannot start server via rcmd

    This, unfortunately, is a rather nonspecific error message which CVS 1.9 will print if you are running the CVS client and it is having trouble connecting to the server. Current versions of CVS should print a much more specific error message. If you get this message when you didn’t mean to run the client at all, you probably forgot to specify :local:, as described in The Repository.

    ci: file,v: bad diff output line: Binary files - and /tmp/T2a22651 differ

    CVS 1.9 and older will print this message when trying to check in a binary file if RCS is not correctly installed. Re-read the instructions that came with your RCS distribution and the INSTALL file in the CVS distribution. Alternately, upgrade to a current version of CVS, which checks in files itself rather than via RCS.

    cvs checkout: could not check out file

    With CVS 1.9, this can mean that the co program (part of RCS) returned a failure. It should be preceded by another error message, however it has been observed without another error message and the cause is not well-understood. With the current version of CVS, which does not run co, if this message occurs without another error message, it is definitely a CVS bug (see section Dealing with bugs in CVS or this manual).

    cvs [login aborted]: could not find out home directory

    This means that you need to set the environment variables that CVS uses to locate your home directory. See the discussion of HOME, HOMEDRIVE, and HOMEPATH in All environment variables which affect CVS.

    cvs update: could not merge revision rev of file: No such file or directory

    CVS 1.9 and older will print this message if there was a problem finding the rcsmerge program. Make sure that it is in your PATH, or upgrade to a current version of CVS, which does not require an external rcsmerge program.

    cvs [update aborted]: could not patch file: No such file or directory

    This means that there was a problem finding the patch program. Make sure that it is in your PATH. Note that despite appearances the message is not referring to whether it can find file. If both the client and the server are running a current version of CVS, then there is no need for an external patch program and you should not see this message. But if either client or server is running CVS 1.9, then you need patch.

    cvs update: could not patch file; will refetch

    This means that for whatever reason the client was unable to apply a patch that the server sent. The message is nothing to be concerned about, because inability to apply the patch only slows things down and has no effect on what CVS does.

    dying gasps from server unexpected

    There is a known bug in the server for CVS 1.9.18 and older which can cause this. For me, this was reproducible if I used the ‘-t’ global option. It was fixed by Andy Piper’s 14 Nov 1997 change to src/filesubr.c, if anyone is curious. If you see the message, you probably can just retry the operation which failed, or if you have discovered information concerning its cause, please let us know as described in Dealing with bugs in CVS or this manual.

    end of file from server (consult above messages if any)

    The most common cause for this message is if you are using an external rsh program and it exited with an error. In this case the rsh program should have printed a message, which will appear before the above message. For more information on setting up a CVS client and server, see Remote repositories.

    cvs [update aborted]: EOF in key in RCS file file,v
    cvs [checkout aborted]: EOF while looking for end of string in RCS file file,v

    This means that there is a syntax error in the given RCS file. Note that this might be true even if RCS can read the file OK; CVS does more error checking of errors in the RCS file. That is why you may see this message when upgrading from CVS 1.9 to CVS 1.10. The likely cause for the original corruption is hardware, the operating system, or the like. Of course, if you find a case in which CVS seems to corrupting the file, by all means report it, (see section Dealing with bugs in CVS or this manual). There are quite a few variations of this error message, depending on exactly where in the RCS file CVS finds the syntax error.

    cvs commit: Executing 'mkmodules'

    This means that your repository is set up for a version of CVS prior to CVS 1.8. When using CVS 1.8 or later, the above message will be preceded by

     
    cvs commit: Rebuilding administrative file database
    

    If you see both messages, the database is being rebuilt twice, which is unnecessary but harmless. If you wish to avoid the duplication, and you have no versions of CVS 1.7 or earlier in use, remove -i mkmodules every place it appears in your modules file. For more information on the modules file, see The modules file.

    missing author

    Typically this can happen if you created an RCS file with your username set to empty. CVS will, bogusly, create an illegal RCS file with no value for the author field. The solution is to make sure your username is set to a non-empty value and re-create the RCS file.

    cvs [checkout aborted]: no such tag tag

    This message means that CVS isn’t familiar with the tag tag. Usually this means that you have mistyped a tag name; however there are (relatively obscure) cases in which CVS will require you to try a few other CVS commands involving that tag, before you find one which will cause CVS to update the ‘val-tags’ file; see discussion of val-tags in File permissions. You only need to worry about this once for a given tag; when a tag is listed in ‘val-tags’, it stays there. Note that using ‘-f’ to not require tag matches does not override this check; see Common command options.

    *PANIC* administration files missing

    This typically means that there is a directory named CVS but it does not contain the administrative files which CVS puts in a CVS directory. If the problem is that you created a CVS directory via some mechanism other than CVS, then the answer is simple, use a name other than CVS. If not, it indicates a CVS bug (see section Dealing with bugs in CVS or this manual).

    rcs error: Unknown option: -x,v/

    This message will be followed by a usage message for RCS. It means that you have an old version of RCS (probably supplied with your operating system), as well as an old version of CVS. CVS 1.9.18 and earlier only work with RCS version 5 and later; current versions of CVS do not run RCS programs.

    cvs [server aborted]: received broken pipe signal

    This message seems to be caused by a hard-to-track-down bug in CVS or the systems it runs on (we don’t know—we haven’t tracked it down yet!). It seems to happen only after a CVS command has completed, and you should be able to just ignore the message. However, if you have discovered information concerning its cause, please let us know as described in Dealing with bugs in CVS or this manual.

    'root' is not allowed to commit files

    When committing a permanent change, CVS makes a log entry of who committed the change. If you are committing the change logged in as "root" (not under "su" or other root-priv giving program), CVS cannot determine who is actually making the change. As such, by default, CVS disallows changes to be committed by users logged in as "root". (You can disable this option by passing the --enable-rootcommit option to ‘configure’ and recompiling CVS. On some systems this means editing the appropriate ‘config.h’ file before building CVS.)

    Too many arguments!

    This message is typically printed by the ‘log.pl’ script which is in the ‘contrib’ directory in the CVS source distribution. In some versions of CVS, ‘log.pl’ has been part of the default CVS installation. The ‘log.pl’ script gets called from the ‘loginfo’ administrative file. Check that the arguments passed in ‘loginfo’ match what your version of ‘log.pl’ expects. In particular, the ‘log.pl’ from CVS 1.3 and older expects the logfile as an argument whereas the ‘log.pl’ from CVS 1.5 and newer expects the logfile to be specified with a ‘-f’ option. Of course, if you don’t need ‘log.pl’ you can just comment it out of ‘loginfo’.

    cvs [update aborted]: unexpected EOF reading file,v

    See ‘EOF in key in RCS file’.

    cvs [login aborted]: unrecognized auth response from server

    This message typically means that the server is not set up properly. For example, if ‘inetd.conf’ points to a nonexistent cvs executable. To debug it further, find the log file which inetd writes (‘/var/log/messages’ or whatever inetd uses on your system). For details, see Trouble making a connection to a CVS server, and Setting up the server for password authentication.

    cvs commit: Up-to-date check failed for `file'

    This means that someone else has committed a change to that file since the last time that you did a cvs update. So before proceeding with your cvs commit you need to cvs update. CVS will merge the changes that you made and the changes that the other person made. If it does not detect any conflicts it will report ‘M file’ and you are ready to cvs commit. If it detects conflicts it will print a message saying so, will report ‘C file’, and you need to manually resolve the conflict. For more details on this process see Conflicts example.

    Usage: diff3 [-exEX3 [-i | -m] [-L label1 -L label3]] file1 file2 file3
     
    Only one of [exEX3] allowed
    

    This indicates a problem with the installation of diff3 and rcsmerge. Specifically rcsmerge was compiled to look for GNU diff3, but it is finding unix diff3 instead. The exact text of the message will vary depending on the system. The simplest solution is to upgrade to a current version of CVS, which does not rely on external rcsmerge or diff3 programs.

    warning: unrecognized response `text' from cvs server

    If text contains a valid response (such as ‘ok’) followed by an extra carriage return character (on many systems this will cause the second part of the message to overwrite the first part), then it probably means that you are using the ‘:ext:’ access method with a version of rsh, such as most non-unix rsh versions, which does not by default provide a transparent data stream. In such cases you probably want to try ‘:server:’ instead of ‘:ext:’. If text is something else, this may signify a problem with your CVS server. Double-check your installation against the instructions for setting up the CVS server.

    cvs commit: [time] waiting for user's lock in directory

    This is a normal message, not an error. See Several developers simultaneously attempting to run CVS, for more details.

    cvs commit: warning: editor session failed

    This means that the editor which CVS is using exits with a nonzero exit status. Some versions of vi will do this even when there was not a problem editing the file. If so, point the CVSEDITOR environment variable to a small script such as:

     
    #!/bin/sh
    vi $*
    exit 0
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    F.2 Trouble making a connection to a CVS server

    This section concerns what to do if you are having trouble making a connection to a CVS server. If you are running the CVS command line client running on Windows, first upgrade the client to CVS 1.9.12 or later. The error reporting in earlier versions provided much less information about what the problem was. If the client is non-Windows, CVS 1.9 should be fine.

    If the error messages are not sufficient to track down the problem, the next steps depend largely on which access method you are using.

    :ext:

    Try running the rsh program from the command line. For example: "rsh servername cvs -v" should print CVS version information. If this doesn’t work, you need to fix it before you can worry about CVS problems.

    :server:

    You don’t need a command line rsh program to use this access method, but if you have an rsh program around, it may be useful as a debugging tool. Follow the directions given for :ext:.

    :pserver:

    Errors along the lines of "connection refused" typically indicate that inetd isn’t even listening for connections on port 2401 whereas errors like "connection reset by peer", "received broken pipe signal", "recv() from server: EOF", or "end of file from server" typically indicate that inetd is listening for connections but is unable to start CVS (this is frequently caused by having an incorrect path in ‘inetd.conf’ or by firewall software rejecting the connection). "unrecognized auth response" errors are caused by a bad command line in ‘inetd.conf’, typically an invalid option or forgetting to put the ‘pserver’ command at the end of the line. Another less common problem is invisible control characters that your editor "helpfully" added without you noticing.

    One good debugging tool is to "telnet servername 2401". After connecting, send any text (for example "foo" followed by return). If CVS is working correctly, it will respond with

     
    cvs [pserver aborted]: bad auth protocol start: foo
    

    If instead you get:

     
    Usage: cvs [cvs-options] command [command-options-and-arguments]
    ...
    

    then you’re missing the ‘pserver’ command at the end of the line in ‘inetd.conf’; check to make sure that the entire command is on one line and that it’s complete.

    Likewise, if you get something like:

     
    Unknown command: `pserved'
    
    CVS commands are:
            add          Add a new file/directory to the repository
    ...
    

    then you’ve misspelled ‘pserver’ in some way. If it isn’t obvious, check for invisible control characters (particularly carriage returns) in ‘inetd.conf’.

    If it fails to work at all, then make sure inetd is working right. Change the invocation in ‘inetd.conf’ to run the echo program instead of cvs. For example:

     
    2401  stream  tcp  nowait  root /bin/echo echo hello
    

    After making that change and instructing inetd to re-read its configuration file, "telnet servername 2401" should show you the text hello and then the server should close the connection. If this doesn’t work, you need to fix it before you can worry about CVS problems.

    On AIX systems, the system will often have its own program trying to use port 2401. This is AIX’s problem in the sense that port 2401 is registered for use with CVS. I hear that there is an AIX patch available to address this problem.

    Another good debugging tool is the ‘-d’ (debugging) option to inetd. Consult your system documentation for more information.

    If you seem to be connecting but get errors like:

     
    cvs server: cannot open /root/.cvsignore: Permission denied
    cvs [server aborted]: can't chdir(/root): Permission denied
    

    then you probably haven’t specified ‘-f’ in ‘inetd.conf’. (In releases prior to CVS 1.11.1, this problem can be caused by your system setting the $HOME environment variable for programs being run by inetd. In this case, you can either have inetd run a shell script that unsets $HOME and then runs CVS, or you can use env to run CVS with a pristine environment.)

    If you can connect successfully for a while but then can’t, you’ve probably hit inetd’s rate limit. (If inetd receives too many requests for the same service in a short period of time, it assumes that something is wrong and temporarily disables the service.) Check your inetd documentation to find out how to adjust the rate limit (some versions of inetd have a single rate limit, others allow you to set the limit for each service separately.)


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    F.3 Other common problems

    Here is a list of problems which do not fit into the above categories. They are in no particular order.

    • On Windows, if there is a 30 second or so delay when you run a CVS command, it may mean that you have your home directory set to ‘C:/’, for example (see HOMEDRIVE and HOMEPATH in All environment variables which affect CVS). CVS expects the home directory to not end in a slash, for example ‘C:’ or ‘C:\cvs’.
    • If you are running CVS 1.9.18 or older, and cvs update finds a conflict and tries to merge, as described in Conflicts example, but doesn’t tell you there were conflicts, then you may have an old version of RCS. The easiest solution probably is to upgrade to a current version of CVS, which does not rely on external RCS programs.

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/ccvs/cvs_26.html0000644000175000017500000007670411264347121023405 0ustar flichtenheldflichtenheld CVS—Concurrent Versions System v4.2: Index: J – O
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Index: J – O

    Jump to:   !   #   &   -   .   /   :   <   =   >   _  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   R   S   T   U   V   W   X   Z  
    Index Entry Section

    J
    Join5.6 Merging an entire branch

    K
    Keeping a checked out copyC.3.5.2 Keeping a checked out copy
    Kerberos, using :gserver:2.9.4 Direct connection with GSSAPI
    Kerberos, using :kserver:2.9.5 Direct connection with kerberos
    Kerberos, using kerberized rsh2.9.2 Connecting with rsh
    Keyword expansion12. Keyword substitution
    Keyword List12.1 Keyword List
    Keyword substitution12. Keyword substitution
    Keyword substitution, and merging5.10 Merging and keywords
    Keyword substitution, changing modes12.4 Substitution modes
    Kflag12.4 Substitution modes
    kinit2.9.5 Direct connection with kerberos
    Known bugs in this manual or CVSH. Dealing with bugs in CVS or this manual
    kserver (client/server connection method), port specification2.9 Remote repositories
    kserver (client/server connection method), port specification2.9.3.1 Setting up the server for password authentication

    L
    Layout of repository2. The Repository
    Left-hand optionsA.4 Global options
    Linear development4.1 Revision numbers
    Link, symbolic, importingA.12.2 import output
    List, mailing list1.1 What is CVS?
    Local keyword12.1 Keyword List
    Locally Added10.1 File status
    Locally Modified10.1 File status
    Locally Removed10.1 File status
    LockDir, in CVSROOT/configC.9 The CVSROOT/config configuration file
    Locker keyword12.1 Keyword List
    Locking files10. Multiple developers
    Locks, cvs, and backups2.7 Backing up a repository
    Locks, cvs, introduction10.5 Several developers simultaneously attempting to run CVS
    Locks, cvs, technical details2.2.6 CVS locks in the repository
    log (subcommand)A.13 log—Print out log information for files
    Log information, savingC.7 The history file
    Log keyword12.1 Keyword List
    Log message entry1.3.2 Committing your changes
    Log message templateC.4 Rcsinfo
    Log message, correctingA.6.1 admin options
    Log message, verifyingC.3.3 Verifying log messages
    Log messagesC.3.5 Loginfo
    Log messages, editingC.3.4 Editinfo
    LogHistory, in CVSROOT/configC.9 The CVSROOT/config configuration file
    Login (subcommand)2.9.3.2 Using the client with password authentication
    loginfo (admin file)C.3.5 Loginfo
    LOGNAME, environment variableC.8 Expansions in administrative files
    Logout (subcommand)2.9.3.2 Using the client with password authentication

    M
    Mail, automatic mail on commit10.4 Informing others about commits
    Mailing list1.1 What is CVS?
    Mailing log messagesC.3.5 Loginfo
    Main trunk and branches5. Branching and merging
    make14. How your build system interacts with CVS
    Many repositories2.5 Multiple repositories
    Markers, conflict10.3 Conflicts example
    Merge, an example10.3 Conflicts example
    Merge, branch example5.6 Merging an entire branch
    Merging5. Branching and merging
    Merging a branch5.6 Merging an entire branch
    Merging a file10.2 Bringing a file up to date
    Merging two revisions5.8 Merging differences between any two revisions
    Merging, and keyword substitution5.10 Merging and keywords
    mkmodulesF.1 Partial list of error messages
    Modifications, copying between branches5. Branching and merging
    Module statusC.1.5 Module options
    Module, defining3.2 Defining the module
    Modules (admin file)C.1 The modules file
    Modules file2.4 The administrative files
    Modules file program optionsC.1.6 How the modules file “program options” programs are run
    Modules file, changing3.2 Defining the module
    modules.db2.2.7 How files are stored in the CVSROOT directory
    modules.dir2.2.7 How files are stored in the CVSROOT directory
    modules.pag2.2.7 How files are stored in the CVSROOT directory
    Motivation for branches5.1 What branches are good for
    Moving a repository2.8 Moving a repository
    Moving branch tags4.7 Deleting, moving, and renaming tags
    Moving directories7.5 Moving and renaming directories
    Moving files7.4 Moving and renaming files
    Moving tags4.7 Deleting, moving, and renaming tags
    Multiple developers10. Multiple developers
    Multiple repositories2.5 Multiple repositories

    N
    Name keyword12.1 Keyword List
    Name, symbolic (tag)4.4 Tags–Symbolic revisions
    Needs Checkout10.1 File status
    Needs Merge10.1 File status
    Needs Patch10.1 File status
    Newsgroups1.1 What is CVS?
    notify (admin file)10.6.2 Telling CVS to notify you
    Notify file, in CVS directory2.3 How data is stored in the working directory
    Notify.tmp file, in CVS directory2.3 How data is stored in the working directory
    Number, branch4.1 Revision numbers
    Number, branch5.4 Branches and revisions
    Number, revision-4.1 Revision numbers

    O
    Option defaultsA.3 Default options and the ~/.cvsrc file
    Options, globalA.4 Global options
    Options, in modules fileC.1.5 Module options
    Outdating revisionsA.6.1 admin options
    Overlap10.2 Bringing a file up to date
    Overriding CVSREADA.4 Global options
    Overriding CVSROOTA.4 Global options
    Overriding EDITORA.4 Global options
    Overriding RCSBINA.4 Global options
    Overriding TMPDIRA.4 Global options
    Overview1. Overview
    Ownership, saving in CVS15. Special Files

    Jump to:   !   #   &   -   .   /   :   <   =   >   _  
    A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   R   S   T   U   V   W   X   Z  

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/0000755000175000017500000000000011264347121022236 5ustar flichtenheldflichtenheldtexi2html-1.82/test/manuals/res/mini_ker/Generalized-TLS.html0000644000175000017500000002557011264347121026026 0ustar flichtenheldflichtenheld Miniker 102 manual: 4.6 Generalized linear tangent system analysis
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    4.6 Generalized linear tangent system analysis

    The state matrix Ast may also be used to compute the GTLS propagator (or state transition matrix applied to perturbation), after the simulation. The algorithm is a finite product of 5th order development of Φ(t + δt,t) = expAstδt. Numerous element of analysis are given, in particular the determination of the Lyapunov exponents of the system.

    An executable file, ‘sltcirc.exe’ is generated and running this file will produce the corresponding results.


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    4.6.1 Generalized tangent linear system with cmz

    The cmz macro smod SLTCIRC prepares a main program (‘circule’ of +PATCH SLTCIRC), in the directory ‘sltcirc/’.


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    4.6.2 Generalized tangent linear system with make

    To compile the GTLS analysis executable with make you can do

     
    make sltcirc.exe
    

    If you want to have a separate directory for the GTLS analysis, you should copy the sequence ‘dimetaphi.inc’ (or make a link to that file) to the directory. You should also copy the file ‘Makefile.sltcirc’ from the ‘template/’ directory in this directory and rename it ‘Makefile’ and set the Miniker directory path in the miniker_dir variable.


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    4.6.3 Generalized tangent linear system analysis run and output

    The ‘sltcirc.exe’ executable generated by the compilation computes the elements of analysis of the system. This program requires ‘title.tex’ to transmit a title for output and graphics (see Title file), ‘aspha.data’ to access the state matrix and ‘dres.data’, because time-step can be changed along the simulation (see Running a simulation and using the output) (10). To get access to these files (in case they are not in the current directory) it is possible to make a link to the corresponding files in the model directory. Once it is done the program may be run:

     
    ./sltcirc.exe
    

    The following table gives the correspondence between variable name, result file and ntuple number, with a short explanation:

    varfilentupleexplanation
    p(.,.)phit.data55propagator from 0 to t, Φ(t,0)
    up(.,.)uphit.data50Left singular vectors U in the SVD of Φ
    wp(.)wphit.data51singulat values w in the SVD of Φ
    vp(.,.)vphit.data52Right Singular Vectors V in the SVD of Φ
    wr(.)wr.data53real part of eigen values of Φ(t,0)
    wi(.)wi.data54imaginary part of eigen values of Φ(t,0)
    lwp(.)lwphit.data67Lyapunov exponents

    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/Setting-up-a-model-with-cmz.html0000644000175000017500000000366011264347121030244 0ustar flichtenheldflichtenheld Miniker 102 manual: Setting up a model with cmz

    The node you are looking for is at Setting up a model with cmz.

    texi2html-1.82/test/manuals/res/mini_ker/Model-equation-and-parameters.html0000644000175000017500000000365411264347121030720 0ustar flichtenheldflichtenheld Miniker 102 manual: Model equation and parameters

    The node you are looking for is at Model equation and parameters.

    texi2html-1.82/test/manuals/res/mini_ker/GTLS-run-and-output.html0000644000175000017500000000355011264347121026600 0ustar flichtenheldflichtenheld Miniker 102 manual: GTLS run and output

    The node you are looking for is at GTLS run and output.

    texi2html-1.82/test/manuals/res/mini_ker/Derivating-a-power-function.html0000644000175000017500000000364011264347121030416 0ustar flichtenheldflichtenheld Miniker 102 manual: Derivating a power function

    The node you are looking for is at Derivating a power function.

    texi2html-1.82/test/manuals/res/mini_ker/mini_ker_tex4ht_math.texi0000644000175000017500000004422411264347121027245 0ustar flichtenheldflichtenheld\input texinfo @setfilename mini_ker_tex4ht_math.info @c Automatically generated @verbatim @end verbatim @math{\eta} @verbatim @end verbatim @verbatim @end verbatim @math{\varphi} @verbatim @end verbatim @verbatim @end verbatim @math{t} @verbatim @end verbatim @verbatim @end verbatim @math{t + \delta t} @verbatim @end verbatim @verbatim @end verbatim @math{\delta \eta} @verbatim @end verbatim @verbatim @end verbatim @math{\eta} @verbatim @end verbatim @verbatim @end verbatim @math{\delta \varphi} @verbatim @end verbatim @verbatim @end verbatim @math{\varphi} @verbatim @end verbatim @verbatim @end verbatim @math{f} @verbatim @end verbatim @verbatim @end verbatim @math{g} @verbatim @end verbatim @verbatim @end verbatim @math{\delta t} @verbatim @end verbatim @verbatim @end verbatim @math{\delta \eta} @verbatim @end verbatim @verbatim @end verbatim @math{\delta \varphi} @verbatim @end verbatim @verbatim @end verbatim @math{\delta \varphi} @verbatim @end verbatim @verbatim @end verbatim @math{\delta \eta} @verbatim @end verbatim @verbatim @end verbatim @math{a} @verbatim @end verbatim @verbatim @end verbatim @math{c} @verbatim @end verbatim @verbatim @end verbatim @math{\varphi_{meet}} @verbatim @end verbatim @verbatim @end verbatim @math{\eta_{prey}} @verbatim @end verbatim @verbatim @end verbatim @math{\eta_{pred}} @verbatim @end verbatim @verbatim @end verbatim @math{\varphi} @verbatim @end verbatim @verbatim @end verbatim @math{\delta\eta} @verbatim @end verbatim @verbatim @end verbatim @math{\varphi} @verbatim @end verbatim @verbatim @end verbatim @math{\varphi=f(\eta(t-dt)+d\varphi} @verbatim @end verbatim @verbatim @end verbatim @math{d\varphi} @verbatim @end verbatim @verbatim @end verbatim @math{\varphi=f(\eta),\varphi)} @verbatim @end verbatim @verbatim @end verbatim @math{10^{-3}} @verbatim @end verbatim @verbatim @end verbatim @math{(I-D)} @verbatim @end verbatim @verbatim @end verbatim @math{(I-D)} @verbatim @end verbatim @verbatim @end verbatim @math{(I-D)} @verbatim @end verbatim @verbatim @end verbatim @math{k} @verbatim @end verbatim @verbatim @end verbatim @math{m_k} @verbatim @end verbatim @verbatim @end verbatim @math{k} @verbatim @end verbatim @verbatim @end verbatim @math{r_k} @verbatim @end verbatim @verbatim @end verbatim @math{d_k} @verbatim @end verbatim @verbatim @end verbatim @math{N} @verbatim @end verbatim @verbatim @end verbatim @math{N} @verbatim @end verbatim @verbatim @end verbatim @math{N+1} @verbatim @end verbatim @verbatim @end verbatim @math{N+1} @verbatim @end verbatim @verbatim @end verbatim @math{k} @verbatim @end verbatim @verbatim @end verbatim @math{k} @verbatim @end verbatim @verbatim @end verbatim @math{x/\Delta} @verbatim @end verbatim @verbatim @end verbatim @math{\omega} @verbatim @end verbatim @verbatim @end verbatim @math{h} @verbatim @end verbatim @verbatim @end verbatim @math{\varphi_{meet}} @verbatim @end verbatim @verbatim @end verbatim @math{\eta_{prey}} @verbatim @end verbatim @verbatim @end verbatim @math{\eta_{pred}} @verbatim @end verbatim @verbatim @end verbatim @math{\eta_1(t)} @verbatim @end verbatim @verbatim @end verbatim @math{\eta_1(t=0)} @verbatim @end verbatim @verbatim @end verbatim @math{t=0} @verbatim @end verbatim @verbatim @end verbatim @math{\phi_{j}(t)} @verbatim @end verbatim @verbatim @end verbatim @math{\eta_i(t=0)} @verbatim @end verbatim @verbatim @end verbatim @math{h(t)} @verbatim @end verbatim @verbatim @end verbatim @math{J} @verbatim @end verbatim @verbatim @end verbatim @math{T} @verbatim @end verbatim @verbatim @end verbatim @math{J} @verbatim @end verbatim @verbatim @end verbatim @math{\psi} @verbatim @end verbatim @verbatim @end verbatim @math{l} @verbatim @end verbatim @verbatim @end verbatim @math{h} @verbatim @end verbatim @verbatim @end verbatim @math{J} @verbatim @end verbatim @verbatim @end verbatim @math{t=0} @verbatim @end verbatim @verbatim @end verbatim @math{\omega} @verbatim @end verbatim @verbatim @end verbatim @math{t=s_i} @verbatim @end verbatim @verbatim @end verbatim @math{\mu} @verbatim @end verbatim @verbatim @end verbatim @math{Q} @verbatim @end verbatim @verbatim @end verbatim @math{\nu} @verbatim @end verbatim @verbatim @end verbatim @math{R} @verbatim @end verbatim @verbatim @end verbatim @math{W} @verbatim @end verbatim @verbatim @end verbatim @math{W} @verbatim @end verbatim @verbatim @end verbatim @math{W} @verbatim @end verbatim @verbatim @end verbatim @math{g(\tau)} @verbatim @end verbatim @verbatim @end verbatim @math{g(\tau)} @verbatim @end verbatim @verbatim @end verbatim @math{\tau} @verbatim @end verbatim @verbatim @end verbatim @math{\tau} @verbatim @end verbatim @verbatim @end verbatim @math{g(\tau;t)} @verbatim @end verbatim @verbatim @end verbatim @math{t} @verbatim @end verbatim @verbatim @end verbatim @math{\tau} @verbatim @end verbatim @verbatim @end verbatim @math{2} @verbatim @end verbatim @verbatim @end verbatim @math{\tau} @verbatim @end verbatim @verbatim @end verbatim @math{g(\tau;t)} @verbatim @end verbatim @verbatim @end verbatim @math{\tau} @verbatim @end verbatim @verbatim @end verbatim @math{\tau} @verbatim @end verbatim @verbatim @end verbatim @math{tau} @verbatim @end verbatim @verbatim @end verbatim @math{\tau} @verbatim @end verbatim @verbatim @end verbatim @math{\tau} @verbatim @end verbatim @verbatim @end verbatim @math{0.2} @verbatim @end verbatim @verbatim @end verbatim @math{\sqrt{\sqrt{2}}} @verbatim @end verbatim @verbatim @end verbatim @math{\tau} @verbatim @end verbatim @verbatim @end verbatim @math{\tau} @verbatim @end verbatim @verbatim @end verbatim @math{\tau} @verbatim @end verbatim @verbatim @end verbatim @math{g(\tau)} @verbatim @end verbatim @verbatim @end verbatim @math{g(t,\tau)} @verbatim @end verbatim @verbatim @end verbatim @math{A_{st}} @verbatim @end verbatim @verbatim @end verbatim @math{A_{st}} @verbatim @end verbatim @verbatim @end verbatim @math{A_{st} + A_{st}^\dagger} @verbatim @end verbatim @verbatim @end verbatim @math{A_{st}} @verbatim @end verbatim @verbatim @end verbatim @math{U} @verbatim @end verbatim @verbatim @end verbatim @math{w} @verbatim @end verbatim @verbatim @end verbatim @math{V} @verbatim @end verbatim @verbatim @end verbatim @math{A_{st} + A_{st}^\dagger} @verbatim @end verbatim @verbatim @end verbatim @math{A_{st}} @verbatim @end verbatim @verbatim @end verbatim @math{\Phi(t+\delta t,t)=\exp{A_{st} \delta t}} @verbatim @end verbatim @verbatim @end verbatim @math{w} @verbatim @end verbatim @verbatim @end verbatim @math{\Phi} @verbatim @end verbatim @verbatim @end verbatim @math{t} @verbatim @end verbatim @verbatim @end verbatim @math{\Phi(t,0)} @verbatim @end verbatim @verbatim @end verbatim @math{U} @verbatim @end verbatim @verbatim @end verbatim @math{\Phi} @verbatim @end verbatim @verbatim @end verbatim @math{w} @verbatim @end verbatim @verbatim @end verbatim @math{\Phi} @verbatim @end verbatim @verbatim @end verbatim @math{V} @verbatim @end verbatim @verbatim @end verbatim @math{\Phi} @verbatim @end verbatim @verbatim @end verbatim @math{\Phi(t,0)} @verbatim @end verbatim @verbatim @end verbatim @math{\Phi(t,0)} @verbatim @end verbatim @bye texi2html-1.82/test/manuals/res/mini_ker/Miniker-with-make.html0000644000175000017500000002773211264347121026421 0ustar flichtenheldflichtenheld Miniker 102 manual: A.4 Miniker with make
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    A.4 Miniker with make


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    A.4.1 Additional requirements for Miniker with make

    The package has been tested with GNU make and solaris make.

    Suitable preprocessors should also be installed. Two preprocessors are required, one that preprocess the cmz directives, and a mortran preprocessor. A cmz directives processor written in perl, is distributed in the car2txt package available at http://www.environnement.ens.fr/perso/dumas/mini_ker/software.html. A mortran package with a command able to preprocess a mortran file given on the command line with a syntax similar with the cpp command line syntax is also required. Such a mortran is available at http://www.environnement.ens.fr/perso/dumas/mini_ker/software.html.


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    A.4.2 Configuration

    The package is available at http://www.environnement.ens.fr/perso/dumas/mini_ker/software.html. It is available as a compresssed tar archive. On UNIX, with GNU tar it may be unpacked using

     
    $ tar xzvf mini_ker-4.2.tar.gz
    

    The detection of the compiler, the preprocessors (car2txt and mortran), and the libraries are performed by the configure script. This script sets the apropriate variables in makefiles. It can be run with:

     
    $ cd mini_ker-4.2
    $ ./configure
    

    If the output of ./configure doesn’t show any error it means that all the components are here. It is possible to give ./configure switches and also specify environment variables (see also ./configure --help):

    --disable-cernlib

    Use the internal cernlib source files, even if a cernlib is detected.

    --with-static-cernlib

    This command line switch forces a static linking with the cernlib (or a dynamic linking if set to no).

    --with-cernlib

    This command line switch can be used to specify the cernlib location (if not detected or you want to use a specific cernlib).

    --with-blas
    --with-lapack

    With this command switch, you can specify the location of the blas and lapack libraries.

    For example, on mac OS X this can be used to specify the blas and lapack from the Apple frameworks:

     
    ./configure \
    --with-blas=/System/Library/Frameworks/vecLib.framework/versions/A/vecLib \
    --with-lapack=/System/Library/Frameworks/vecLib.framework/versions/A/vecLib
    
    F77
    FC
    FFLAGS
    LDFLAGS

    Classical compiler, compiler flags and linker flags.

    MORTRAN

    This environment variable holds the mortran preprocessor command (default is mortran).

    MTNFLAGS

    This environment variable holds command line arguments for the mortran preprocessor. It is empty in the default case.

    MTN

    This environment variable may be used to specify the mortran executable name and/or path, it should be used by the mortran commmand. (default is empty, which leads to a mortran executable called mtn).

    MTNDEPEND

    This environment variable may be used to specify the mortran dependencies checker executable. It should be used by the mortran commmand. (default is empty, which leads to a mortran dependencies checker called mtndepend).

    After a proper configuration, if make is run then the example models should be build. You have to perform the configuration only once.


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    A.4.3 Installation with make

    Miniker can be installed by running

     
    make install
    

    It should copy the sources and the ‘Makefile.miniker’ file in a ‘mini_ker’ directory in the $(includedir) directory, and copy the templates in ‘$(datadir)/mini_ker’. The default for $(includedir) is ‘/usr/local/include’ and the default for $(datadir) is ‘/usr/local/share’, these defaults may be changed by ./configure switches ‘--prefix’, ‘--includedir’ and ‘--datadir’. See ./configure --help and the ‘INSTALL’ file for more informations. The helper script ‘start_miniker’ should also be installed.

    The installation is not required to use comfortably Miniker. Indeed the only thing that changes with the sources and the ‘Makefile.miniker’ directory location is the miniker_dir variable in a project Makefile.


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/Cell-and-Transfer.html0000644000175000017500000001212711264347121026330 0ustar flichtenheldflichtenheld Miniker 102 manual: 1.1 Cell and Transfer equations
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    1.1 Cell and Transfer equations

    In the TEF, a model is mathematically represented by a set of equations corresponding to two kinds objects:

    1. Cells which are elementary models and correspond to evolution equations such as:
      ∂ η(t) = g(η(t),φ(t))
 t

      Vector η represent the state variables of cells and the vector φ represent the dependent boundary conditions, i.e. the variables considered as boundary conditions by a cell, but depending upon the complete model state. This dependent boundary conditions are required to make the cells correspond to well-posed problems. These variables are often called state variables, and prognostic variables in meteorology.

    2. Transfers which are determined by constraint equations such as:
      φ(t) = f (η(t),φ (t))
      These equations are often called algebraic equations, and in meteorology diagnostic equations.

    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/Adjoint-model-and-optimisation.html0000644000175000017500000004346211264347121031100 0ustar flichtenheldflichtenheld Miniker 102 manual: 4.2 Adjoint model and optimisation with Miniker
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    4.2 Adjoint model and optimisation with Miniker

    In the following a possible use of Miniker for optimisation is discussed. More precisely the use of adjoint and control laws in Miniker are presented. Optimisation isn’t the only application of these tools, but it is the most common one. In that case the adjoint may be used to determine the gradient of a functional to perturbations in the control laws, and an optimisation process can use this information to search for the optimum. Another application of the adjoint is to compute the sensitivity of a cost function to parameters (the ones declared in the free_parameters:’ list. Note that the cost function can be sensitive to probe’s variables, even if these are uncoupled with standard variables in the forward calculations; this is the case when minimizing a quadratic distance function between probes (from the model) and the corresponding measurements.

    The code is close transcription of the mathematical calculus described in
    http://www.lmd.jussieu.fr/ZOOM/doc/Adjoint.pdf . It essentialy reverse time and transpose the four Jacobian matrices: states and transfers are saved in array dimensionned with maxstep Fortran parameter.


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    4.2.1 Overview of optimisation with Miniker

    In the proposed method, Miniker is run twice, one time forward and then backward to determine the trajectory and the adjoint model. After that the control laws are modified by a program external to Miniker. The same steps are repeated until convergence. More pecisely,

    forward

    The command law h(t) is given (by an explicit law or taken from a file). The trajectory is computed in a classical way, with the additionnal computation of the functional to be optimised, J, prescribed with specific f_set macros. The states, transfers and control laws are stored.

    backward

    The adjoint variable is computed from the last time T backward. The time increment is re-read as it could have changed during the forward simulation. The system is solved by using the same technics as in the forward simulation, but with a negative time step.

    external phase

    Now the command should be corrected. This step isn’t covered here, but, for example, minuit the optimisation tool from the CERN could be used. In order to ease such a use of Miniker, the principal program has to be compiled as a subroutine to be driven by an external program (see Calling the model code).

    The functionnal J to be optimised is defined as

                           ∫ T
J = ψ [η(T),φ(T),h(T)]+    l[η(τ),φ (τ ),h(τ)]dτ
                        0

    Where ψ is the final cost function, l is the integrand cost function and h represents the control laws variations.

    The general use of the adjoint model of a system is the determination of the gradient of this J functional to be optimised, with respect to perturbations of the original conditions of the reference trajectory, that is, along its GTLS(6).


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    4.2.2 Control laws

    Each control law is associated with one cell or transfer equation, meaning that a command associated with an equation does not appear in any other equation. It is still possible to add commands acting anywhere by defining a transfer equal to that command.

    The control laws associated with states are in the ux_com(.) array, control laws associated with transfers are in the uy_com(.) array. The control laws may be prescribed even when there is no adjoint computed, nor any optimisation, and they are used during simulation, in which case they will act as external sources. To enable the use of commands, the logical flag Zcommand should be .true..

    The command can be given either as:

    1. a table of numerical values in the files ‘uxcom.data’ and ‘uycom.data’.
    2. a function of the problem variables. To turn that feature on the logical flag Zlaw should be set to .true. in ‘zinit’. The sequence ‘zcmd_law’ should hold the code filling the ux_com(.) and uy_com(.) arrays, as the code from that sequence is used whenever the control laws are needed. In that case the files ‘uxcom.data’ and ‘uycom.data’ will be filled by the command values generated by the function along the trajectory.

    For example in the Lotka-Volterra model, the parameter apar could be a control variable. In that case, apar would be defined as the variable ux_com(1), and either entered as a law in the sequence ‘zcmd_law’ , either written in the file ‘uxcom.data’ step by step. In that case, there must be a perfect corresponodence between time of the commands and time of the run.


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    4.2.3 Cost function coding and adjoint modeling

    First of all the flag zback should be set to .true. in order to allow adjoint model computation:

     
    Zback=.true.;
    

    The two functions cout_Psi corresponding with the final cost and cout_l corresponding with the integrand cost are set up with the f_set macros.

    Macro: f_set cout_Psi = f(eta(.),ff(.),ux_com(.),uy_com(.))

    This macro defines the final cost function. f is a fortran expression which may be function of cell state variables, ‘eta(1)’…‘eta(np)’, transfers ‘ff(1)’…‘ff(mp)’, state control laws ‘ux_com(1)’…‘ux_com(np)’, and transfer control laws ‘uy_com(1)’…‘uy_com(mp)’.

    Macro: f_set cout_l = f(eta(.),ff(.),ux_com(.),uy_com(.))

    This macro defines the integrand cost function. f is a fortran expression which may be function of cell state variables, ‘eta(1)’…‘eta(np)’, transfers ‘ff(1)’…‘ff(mp)’, state control laws ‘ux_com(1)’…‘ux_com(np)’, and transfer control laws ‘uy_com(1)’…‘uy_com(mp)’.

    For example, the following code sets a cost function for the masselottes model:

     
    ! Initialisation 
      F_set cout_Psi = eta_move(inode:1);
    !and f_set cout_l integrand in the functionnal    
      F_set cout_l = 0.;
    

    In that example the functional is reduced to the final value of the first state component. Here, the adjoint vector will correspond to the final sensitivity (at t = 0) of that component (here the first masselotte position) to a perturbation in all initial conditions(7).

    The following variables are set during the backward phase, and output in the associated files:

    varfileexplanation
    v_adj(.)vadj.dataadjoint to eta(.)
    w_adj(.)wadj.dataadjoint to ff(.)
    wadj(mp+.)gradmuj.dataadjoint to ff(mp+.)
    graduej(.)gradxj.dataadjoint to ux_com(.)
    gradufj(.)gradyj.dataadjoint to uy_com(.)
    hamiltonhamilton.datatime increment, hamiltonian, cost function increment

    [ < ] [ > ]   [Contents] [Index] [ ? ]

    4.2.4 Sensitivity of cost function to parameters

    The sensitivity of the cost function to all the parameters given as arguments of Free_parameters is computed. For the predator model the sensitivity of a cost function consisting in the integral of the predator population with respect with apar an cpar is obtained with a number of parameters set to 2 in ‘dimetaphi’:

     
    parameter (lp=2);
    

    And the cost function and Free_parameters list in ‘zinit’:

     
    f_set cout_Psi = eta(2);
    f_set cout_l = eta(2);
    Free_parameters: apar,cpar;
    

    apar and cpar also have to be given a value. The result is output in ‘gradpj.data’.


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/Turning-the-model-into-a-subroutine.html0000644000175000017500000000372611264347121032020 0ustar flichtenheldflichtenheld Miniker 102 manual: Turning the model into a subroutine

    The node you are looking for is at Turning the model into a subroutine.

    texi2html-1.82/test/manuals/res/mini_ker/Installation-with-make.html0000644000175000017500000000357611264347121027464 0ustar flichtenheldflichtenheld Miniker 102 manual: Installation with make

    The node you are looking for is at Installation with make.

    texi2html-1.82/test/manuals/res/mini_ker/Setting-up-a-model-with-make.html0000644000175000017500000000366611264347121030376 0ustar flichtenheldflichtenheld Miniker 102 manual: Setting up a model with make

    The node you are looking for is at Setting up a model with make.

    texi2html-1.82/test/manuals/res/mini_ker/Sensitivity-to-a-parameter.html0000644000175000017500000000361611264347121030300 0ustar flichtenheldflichtenheld Miniker 102 manual: Sensitivity to a parameter

    The node you are looking for is at Sensitivity to a parameter.

    texi2html-1.82/test/manuals/res/mini_ker/Cost-function-coding-and-adjoint-modeling.html0000644000175000017500000000401211264347121033077 0ustar flichtenheldflichtenheld Miniker 102 manual: Cost function coding and adjoint modeling

    The node you are looking for is at Cost function coding and adjoint modeling.

    texi2html-1.82/test/manuals/res/mini_ker/mini_ker.html0000644000175000017500000001273011264347121024724 0ustar flichtenheldflichtenheld Miniker 102 manual: Miniker 102 manual
    [Contents] [Index] [ ? ]

    Miniker manual

    for Miniker version 102, 28 March 2002

    The TEF Collaboration

    Copyright (C) 2004, 2005, 2006, 2007 Alain Lahellec
    Copyright (C) 2004, 2005, 2006, 2007 Patrice Dumas
    Copyright (C) 2004, Stéphane Hallegatte

    Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover text and with no Back-Cover Text. A copy of the license is included in the section entitled “GNU Free Documentation License.”

    Overview:


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/heavy.html0000644000175000017500000000351011264347121024237 0ustar flichtenheldflichtenheld Miniker 102 manual: heavy

    The node you are looking for is at heavy.

    texi2html-1.82/test/manuals/res/mini_ker/GTLS-with-cmz.html0000644000175000017500000000350411264347121025437 0ustar flichtenheldflichtenheld Miniker 102 manual: GTLS with cmz

    The node you are looking for is at GTLS with cmz.

    texi2html-1.82/test/manuals/res/mini_ker/mini_ker_tex4ht_tex.tmp0000644000175000017500000000001711264347121026733 0ustar flichtenheldflichtenheld /* css.sty */texi2html-1.82/test/manuals/res/mini_ker/SVD-with-make.html0000644000175000017500000000353211264347121025447 0ustar flichtenheldflichtenheld Miniker 102 manual: SVD with make

    The node you are looking for is at SVD with make.

    texi2html-1.82/test/manuals/res/mini_ker/Rules.html0000644000175000017500000001150211264347121024215 0ustar flichtenheldflichtenheld Miniker 102 manual: 5.2 Rules
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    5.2 Rules

    The following rules are defined in the ‘Makefile.miniker’ file.

    miniker-clean

    remove the fortran files generated from the mortran files. Remove the object files.

    miniker-mtn-clean

    remove the mortran files generated from the files with cmz directives.

    Various rules to preprocess files with cmz directives and mortran files and to compile fortran files.

    If the user needs a mortran main file, he may take advantage of the rule used to compute the dependencies of a mortran file. If the file is called, say, ‘mtnfile.mtn’ leading to ‘mtnfile.f’, the following include should lead to the automatic creation, updating and inclusion of a file describing the dependencies of ‘mtnfile.mtn’ in the ‘Makefile’:

     
    include $(DEPDIR)/mtnfile.Pf
    

    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/mini_ker_36.html0000644000175000017500000003466511264347121025247 0ustar flichtenheldflichtenheld Miniker 102 manual: Concepts index: T – Z
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    Concepts index: T – Z

    Jump to:   $  
    A   B   C   D   E   F   G   H   I   K   L   M   O   P   R   S   T   U   V   Z  
    Index Entry Section

    T
    TEFIntroduction
    TEF2.2 Miniker programming illustrated
    title filetitle file
    title.textitle file
    title.tex’, GTLS4.6.3 Generalized tangent linear system analysis run and output
    title.tex’, SVD4.5.3 Singular Value Decomposition run and output
    tr.data2.3.3 Running a simulation and using the output
    transfersIntroduction

    U
    up node3.3 Describing 1D gridded model
    uxcom.data4.2.2 Control laws
    uycom.data4.2.2 Control laws

    V
    variance-covariance errorError variance-covariance matrices
    variance-covariance matrices4.3.1.2 Error and observation matrices
    variance-covariance matrices, general4.3 Kalman filter
    variance-covariance matrix on stateObservations and error on state matrix

    Z
    zcmd_law4.2.2 Control laws
    zcmd_law.inc4.2.2 Control laws
    zinit2.2.2 Entering model equation and parameters
    zinit, general2.1 General structure of the code
    zinit’, Kalman filter4.3.1.2 Error and observation matrices
    zinit.mti2.3.2 Setup a model and compile with make
    ZOOMIntroduction
    zsteer2.4.1 Executing code at the end of each time step
    zsteer’, Kalman filter4.3.2.1 Feeding the observations to the model
    zsteer.inc2.4.1 Executing code at the end of each time step

    Jump to:   $  
    A   B   C   D   E   F   G   H   I   K   L   M   O   P   R   S   T   U   V   Z  

    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/Additional-requirements.html0000644000175000017500000000360411264347121027720 0ustar flichtenheldflichtenheld Miniker 102 manual: Additional requirements

    The node you are looking for is at Additional requirements.

    texi2html-1.82/test/manuals/res/mini_ker/mini_ker_tex4ht_math.cp0000644000175000017500000000000011264347121026656 0ustar flichtenheldflichtenheldtexi2html-1.82/test/manuals/res/mini_ker/GTLS-with-make.html0000644000175000017500000000351211264347121025562 0ustar flichtenheldflichtenheld Miniker 102 manual: GTLS with make

    The node you are looking for is at GTLS with make.

    texi2html-1.82/test/manuals/res/mini_ker/Observations.html0000644000175000017500000000351211264347121025603 0ustar flichtenheldflichtenheld Miniker 102 manual: Observations

    The node you are looking for is at Observations.

    texi2html-1.82/test/manuals/res/mini_ker/Concepts-index.html0000644000175000017500000010417411264347121026016 0ustar flichtenheldflichtenheld Miniker 102 manual: Concepts index
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    Concepts index

    Jump to:   $  
    A   B   C   D   E   F   G   H   I   K   L   M   O   P   R   S   T   U   V   Z  
    Index Entry Section

    $
    $dimetaphi2.3.1 Setup a model and compile with cmz
    $zinit2.3.1 Setup a model and compile with cmz

    A
    adjoint4.2.1 Overview of optimisation with Miniker
    aspha.data2.3.3 Running a simulation and using the output
    aspha.data’, GTLS4.6.3 Generalized tangent linear system analysis run and output
    aspha.data’, SVD4.5.3 Singular Value Decomposition run and output

    B
    Borel sweep4.4 Feedback gain
    Borel sweep graphics4.4.2 Borel sweep results
    Borel sweep results4.4.2 Borel sweep results

    C
    cellsIntroduction
    cernlibA.2 Common requisites
    command law4.2.2 Control laws
    compilation2.3.2 Setup a model and compile with make
    configuration of sourceA.4.2 Configuration
    controlling the run2.4 Controlling the run

    D
    data.data3.8.2 Data
    data.data4.3.2.2 Kalman filter results
    dimetaphi3.9.1 The explicit size sequence
    dimetaphi3.9.1 The explicit size sequence
    dimetaphi’, Kalman filter4.3.1.1 Kalman filter vectors dimensions
    down node3.3 Describing 1D gridded model
    dres.data2.3.3 Running a simulation and using the output
    dres.data
    dres.data’, GTLS4.6.3 Generalized tangent linear system analysis run and output

    E
    equations, gridGrid node equations
    error vector dimension4.3.1.1 Kalman filter vectors dimensions

    F
    FDL, GNU Free Documentation LicenseC.1 GNU Free Documentation License
    feature setting3.1 Overview of additional features setting
    Feedback gain4.4 Feedback gain
    ffl (linearity test)2.4.1 Executing code at the end of each time step
    final cost4.2.1 Overview of optimisation with Miniker

    G
    Generalized linear tangent system4.6 Generalized linear tangent system analysis
    gradpj.data4.2.4 Sensitivity of cost function to parameters
    graphics2.3.4 Doing graphics
    graphics with gnuplot2.3.4 Doing graphics
    graphics with PAW2.3.4 Doing graphics
    graphics, Borel sweep4.4.2 Borel sweep results
    GTLS4.6 Generalized linear tangent system analysis
    GTLS output4.6.3 Generalized tangent linear system analysis run and output
    GTLS run4.6.3 Generalized tangent linear system analysis run and output

    H
    Heaviside function3.6 Rule of programming non continuous models

    I
    initial variance-covariance on statesInitial variance-covariance matrix on the state
    installation with makeA.4.3 Installation with make
    integrand cost4.2.1 Overview of optimisation with Miniker

    K
    Kalman filter4.3 Kalman filter
    Kalman filter output4.3.2.2 Kalman filter results
    Kalman filter results4.3.2.2 Kalman filter results

    L
    lapackA.2 Common requisites
    limiting conditionsLimiting conditions
    linearity test2.4.1 Executing code at the end of each time step
    logical flags3.1 Overview of additional features setting
    Lyapunov exponents4.6 Generalized linear tangent system analysis

    M
    Makefile.miniker5.1 Make variables
    Makefile.sltc4.5.2 Singular Value Decomposition with make
    Makefile.sltcirc4.6.2 Generalized tangent linear system with make
    mini_ker.cmzA.3 Miniker with cmz
    mod2.3.1 Setup a model and compile with cmz
    model equations3.9.2 Entering the model equations, with explicit sizes
    model size3.9.1 The explicit size sequence
    Model.hlp2.3.3 Running a simulation and using the output
    mortranIntroduction
    mortran2.2.1 All you need to know about mortran and cmz directives
    mortran, with makeA.4.1 Additional requirements for Miniker with make

    O
    obs.data3.8.1 Observations
    observation function3.8.1 Observations
    observations4.3.1.2 Error and observation matrices
    observations, general4.3 Kalman filter
    optimisation4.2.1 Overview of optimisation with Miniker
    output file2.3.3 Running a simulation and using the output
    output, GTLS4.6.3 Generalized tangent linear system analysis run and output
    output, Kalman filter4.3.2.2 Kalman filter results
    output, sensitivity4.1 Automatic sensitivity computation
    output, SVD4.5.3 Singular Value Decomposition run and output

    P
    printing2.4.2 Controlling the printout and data output
    Programming environmentsA.1 Programming environments
    propagator4.6 Generalized linear tangent system analysis

    R
    requirements, with makeA.4.1 Additional requirements for Miniker with make
    res.data2.3.3 Running a simulation and using the output
    results, Borel sweep4.4.2 Borel sweep results
    results, Kalman filter4.3.2.2 Kalman filter results
    run, GTLS4.6.3 Generalized tangent linear system analysis run and output
    run, SVD4.5.3 Singular Value Decomposition run and output
    running model2.3.3 Running a simulation and using the output

    S
    select flag3.1 Overview of additional features setting
    selseq.kumac3.1 Overview of additional features setting
    selseq.kumacA.3 Miniker with cmz
    sens.data4.1 Automatic sensitivity computation
    sensitivities4.1 Automatic sensitivity computation
    sensitivity, output4.1 Automatic sensitivity computation
    sequence2.1 General structure of the code
    sequences2. Miniker model programming
    sigma.data4.1 Automatic sensitivity computation
    Singular Value Decomposition4.5 Stability analysis of fastest modes
    sltc.exe4.5 Stability analysis of fastest modes
    sltc.exe4.5.3 Singular Value Decomposition run and output
    sltcirc.exe4.6 Generalized linear tangent system analysis
    sltcirc.exe4.6.3 Generalized tangent linear system analysis run and output
    smod4.5.1 Singular Value Decomposition with cmz
    smod4.6.1 Generalized tangent linear system with cmz
    starting pointStarting points
    state matrix4.5 Stability analysis of fastest modes
    SVD4.5 Stability analysis of fastest modes
    SVD output4.5.3 Singular Value Decomposition run and output
    SVD run4.5.3 Singular Value Decomposition run and output

    Jump to:   $  
    A   B   C   D   E   F   G   H   I   K   L   M   O   P   R   S   T   U   V   Z  

    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/Control-laws.html0000644000175000017500000000353411264347121025515 0ustar flichtenheldflichtenheld Miniker 102 manual: Control laws

    The node you are looking for is at Control laws.

    texi2html-1.82/test/manuals/res/mini_ker/1D-gridded-model.html0000644000175000017500000004516311264347121026077 0ustar flichtenheldflichtenheld Miniker 102 manual: 3.3 Describing 1D gridded model
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    3.3 Describing 1D gridded model

    Specific macros have been built that allow generic description of 1D gridded models. Because of the necessity of defining left and right limiting conditions, the models are partitionned in three groups for cell and transfer components. In the following example, a chain of masselottes linked by springs and dumps is bounded to a wall on the left, and open at right. The TEF formulation of the problem is written in the phase space (position-shift, velocity) for node k, with bounding conditions:

    {    pos    vel
  ∂tηk  = ηk
  ∂tηvkel= (φspkr- φspk+r1 + φdkmp- φdmk+p1 )∕mk
    {  spr       pos   pos
  φk  = - kk(ηk  - ηk-1)
  φskpr= - dk(ηvkel- ηvek-l1)
    (   pos
||||  η0  = 0
{   ηv0el= 0
|| φsNp+r1 = 0
||(  dmp
  φN+1 = 0

    where mk is the mass of node k, rk and dk the rigidity of springs and dumping coefficients. There are N nodes in the grid, from 1 to N, and two nodes outside of the grid, a limiting node 0, and a limiting node N + 1. The limiting node corresponding with node 0 is called the down node, while the limiting node corresponding with node N + 1 is called the up node. Other models not part of the 1D grid may be added if any.

    To enable 1D gridded models, one should set the select flag ‘grid1d’. In cmz it is achieved setting the select flag in ‘selseq.kumac’, like

     
    sel grid1d
    

    With make, the SEL variable should contain grid1d. For example to select grid1d and monitor, it could be

     
    SEL = grid1d,monitor
    

    [ < ] [ > ]   [Contents] [Index] [ ? ]

    3.3.1 Setting dimensions for 1D gridded model

    In that case the number of nodes, the number of states and tranferts per node, and the number of limiting transfers and states are required. These dimensions has to be entered in the ‘DimEtaPhi’ sequence. The parameters for cells are

    n_node

    Number of cell nodes in the 1D grid.

    n_dwn

    Number of limiting cells with index -1, i.e. number of cells in the limiting down node.

    n_up

    Number of limiting cells with index +1, i.e. number of cells in the limiting up node.

    n_mult

    Number of cells in each node (multiplicity).

    The parameters for transfers, are similarly m_node, m_dwn, m_up, m_mult. The layout of their declaration should be respected as the precompiler matches the line. Also this procedure is tedious, it should be selected for debuging processes (use the flag sel dimetaphi in “selsequ.kumac”. Otherwise, the dimensioning sequence will be automaticaly generated, which is smart but can lead to diffculty in interpreting syntax errors. Once a model is correctly entred, turn off the sel flag and further modifications will automatically generate the proper dimensions. The correctness of dimensionning should nevertheless always be checked in principal.f, where you can also check that null valued parameters as lp, mobs, nxp will suppress parts of the code - this is signaled as Fortran comment cards.

    In our example, there are three grids of cell and transfer variables (n_node=m_node=3). There are two cells and two transfers in each node (n_mult=2 and m_mult=2). There is no limiting condition for the states in the down node therefore n_up=0. There is no transfer for the first limiting node, and therefore m_dwn=0. There are two states in the limiting node 0, the down node, n_dwn=2, and two transfers in the limiting last node the node up, and m_up=2:

     
    ! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    ! nodes parameters, and Limiting Conditions (Low and High)
    ! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
          parameter (n_node=3,n_dwn=2,n_up=0,n_mult=2);
          parameter (m_node=3,m_dwn=0,m_up=2,m_mult=2);
    ! ________________________________________________________
    

    [ < ] [ > ]   [Contents] [Index] [ ? ]

    3.3.2 1D gridded Model coding

    The model code and parameters go in the ‘zinit’ sequence.

    Parameters

    A value for the Miniker parameters and the model parameters should be given in ‘zinit’, in our example we have

     
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Parameters
    !%%%%%%%%%%%%%%%%%%%%%%
    real rk(n_node),rd(n_node),rmassm1(n_node);
    
    data rk/n_node*1./;
    data rd/n_node*0.1/;
    data rmassm1/n_node*1./;
         dt=.01;
         nstep=5 000;
         modzprint = 1000;
         time=0.;
    

    Limiting conditions

    There are four mortran blocks for node and up and down, both for states and transfers:

    set_dwn_eta

    down node cells

    set_up_eta

    up node cells

    set_dwn_phi

    down node transfers

    set_up_phi

    up node transfers

    The following scheme illustrates the example:

     
    !%%%%%%%%%%%%%%%%%%%%%%%%%%================================================
    ! Maillage convention inode
    !%%%%%%%%%%%%%%%%%%%%%%%%%%                                 Open ended
    !(2 Down    Phi    Eta                         (n_node)
    ! Eta)  \|       .-----.       .-----.          .-----.        /
    ! wall  \|-\/\/\-|     |-\/\/\-|     |  . . .  -|     |-\/\/\- |dummy
    !  pos  \|--***--|  1  |--***--|  2  |  . . .  -|  n  |--***-- |Phis
    ! speed \|   1   |_____|   2   |_____|      n   |_____|  n+1   \(2 Up Phi)
    !
    

    Two states are associated with the down node, they correspond to the position and speed of the wall. As the wall don’t move these states are initialized to be 0, and the cells are stationnary cells, therefore these values remain 0.

     
    ! Down cells (wall)
    ! -----------------
    eta_pos_wall = 0; eta_speed_wall = 0.;
    
    set_dwn_eta
    < var: eta_pos_wall,  fun: deta_pos_wall  = 0.;
      var: eta_speed_wall, fun: deta_speed_wall= 0.;
    >;
    

    There are 2 limiting transfers in the up node. They correspond with an open end and are therefore set to 0.

     
    ! limiting Transfers : dummy ones
    ! -------------------------------
    set_Up_Phi
    < var:ff_dummy_1, fun: f_dummy_1=0.;
      var:ff_dummy_2, fun: f_dummy_2=0.;
    >;
    

    Starting points

    The cell node state values are initialized. They are in an array indexed by the inode variable. In the example the variable corresponding with position is eta_move and the variable corresponding with speed is eta_speed. Their initial values are set with the following mortran code

     
    !---------------
    ! Initialisation
    !---------------
    ;
    do inode=1,n_node <eta_move(inode)=0.01; eta_speed(inode)=0.0;>;
    

    If any transfer needs to be given a first-guess value, this is also done using inode as the node index.

    Grid node equations

    Each node is associated with an index inode. It allows to refer to the preceding node, with inode-1 and the following node inode+1. The node states are declared in set_node_Eta block and the transfers are in set_node_Phi blocks.

    In the example, the cells are declared with

     
    ! node cells
    ! ----------
    ;
    set_node_Eta
    < var: eta_move(inode),  fun: deta_move(inode) = eta_speed(inode);
      var: eta_speed(inode),
      fun: deta_speed(inode) = rmassm1(inode)
                                 *( - ff_spring(inode+1) + ff_spring(inode)
                                   - ff_dump(inode+1)  + ff_dump(inode)
                                  );
    >;
    

    Note that the inode is dummy in the var: definition and can as well be written as: var: eta_move(.).

    The transfers are (ff_spring corresponds with springs and ff_dump with dumps):

     
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Transfer definition
    !%%%%%%%%%%%%%%%%%%%%%%
    ! node transfers
    ! --------------
    ! convention de signe spring : comprime:= +
    set_node_Phi
    < var: ff_spring(.),
      fun:
       f_spring(inode)= -rk(inode)*(eta_move(inode) - eta_move(inode-1));
      var: ff_dump(.),
      fun:
       f_dump(inode)  = -rd(inode)*(eta_speed(inode) - eta_speed(inode-1));
    >;
    

    The limiting states and transfers are associated with the states or transfers with index inode+1 or inode-1 appearing in node cell and transfer equations (inode-1 for down limiting conditions and inode+1 for up limiting conditions) in their order of appearance. In our example, in the eta_speed state node equation ff_spring(inode+1) appears before ff_dump(inode+1) and is therefore associated with ff_dummy_1 while ff_dump(inode+1) is associated with the ff_dummy_2 limiting transfer, as ff_dummy_1 appears before ff_dummy_2 in the limiting up transfers definitions. Verification of the grid index coherence should be eased with the following help printed in the listing header:

     
    
    
    
      --------------- Informing on Dwn Eta definition ---------------
     Var-name,            Function-name, index in eta vector
             eta_pos_wall        deta_pos_wall  1 [
           eta_speed_wall      deta_speed_wall  2 [
    
      -------------- Informing on Eta Nodes definition --------------
     Var-name,     Function, k2index of (inode: 0 [ 1,...n_node ] n_node+1)
                eta_move           deta_move    1 [   3 ...   7 ]   9
               eta_speed          deta_speed    2 [   4 ...   8 ]  10
    
      ---------------- Informing on Up  Phi  definition -------------
     Var-name,             Function-name, index in ff vector
              ff_dummy_1           f_dummy_1 ]    7
              ff_dummy_2           f_dummy_2 ]    8
             ff_move_sum          f_move_sum ]    9
            ff_speed_sum         f_speed_sum ]   10
      ----------------------------------------------------
    
     -------------- Informing on Phi Nodes definition ---------------
     Var-name,     Function, k2index of (inode: 0 [ 1,...m_node ] m_node+1)
               ff_spring            f_spring   -1 [   1 ...   5 ]   7
                 ff_dump              f_dump    0 [   2 ...   6 ]   8
      ----------------------------------------------------
    

    All variable names and functions are free but has to be different. Any particular node-attached variable k is referred to as: ‘(inode:k)’, where k has to be a Fortran expression allowed in arguments. The symbol ‘inode’ is reserved. As usual other Fortran instructions can be written within the Mortran block ‘< >’ of each set_ block.


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/File-introduction-directives.html0000644000175000017500000001625711264347121030674 0ustar flichtenheldflichtenheld Miniker 102 manual: B.3 File introduction directives
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    B.3 File introduction directives

    A file (or sequence) introduction directive appears at the beginning of the file. There are two different directives, one is DECK for normal files, the other is KEEP for include files (sequences). The first argument is the name of the file. The file name may not be larger than 32 characters and is converted to lower case in the general case. The optionnal following arguments may be of 2 type (and may be mixed, separated by ‘,’):

    conditional

    A conditionnal is introduced by IF= followed by a conditionnal expression described in Conditional expressions. The file is preprocessed if the conditionnal expression is true.

    language specification

    A language specification is introduced by a T=. The most common languages are ‘mtn’ for the mortran, ‘ftn’ for fortran not preprocessed, ‘f77’ for preprocessed fortran, ‘c’ for the c language and ‘txt’ for text files. In general the language of the file determines the name of files the preprocessed file is extracted to, the comment style and the command for inclusions.

    It is a common practice to have wrong language type in KEEP as the language may be determined from the DECK that include them with cmz, or from their file name with make. This is not recommended and considered a bad practice.

    Such a directive will always appear in cmz, as it is built-in. It is recommended to have one when using make too, even though it is not required in most cases. Indeed make uses the file name directly and finds the language and file type by looking at the file extension. make should then pass the language type with a --lang lang command line switch when calling the cmz directives preprocessor. With make, the convention is to have ‘cm’ added before the normal file suffix and after the ‘.’. The table tab:cmfile_suffix shows the matching between suffixes, file type and file language.

    For example, a file beginning with

    +Deck, subroutine_foo, If=monitor&-simple, T=f77. 
    

    is a main preprocessed fortran file that will only be generated if ‘monitor’ is selected and ‘simple’ is not selected. The file to be preprocessed by make should have the ‘.cmF’ suffix, and be called ‘subroutine_foo.cmF’.

    A file beginning with

    +KEEP,inc_common,If=monitor|interface,T=mtn
    

    is an mortran include file that should be processed only if ‘monitor’ or ‘interface’ is selected. The file to be preprocessed by make should have the ‘cmmti’ suffix and be called ‘inc_common.cmmti’. The resulting file when make is used will be called ‘inc_common.mti’.


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/Kalman-filter-results.html0000644000175000017500000000356011264347121027315 0ustar flichtenheldflichtenheld Miniker 102 manual: Kalman filter results

    The node you are looking for is at Kalman filter results.

    texi2html-1.82/test/manuals/res/mini_ker/mini_ker_tex4ht_tex.4tc0000644000175000017500000000011411264347121026623 0ustar flichtenheldflichtenheld\expandafter\ifx\csname doTocEntry\endcsname\relax \expandafter\endinput\fi texi2html-1.82/test/manuals/res/mini_ker/mini_ker_tex4ht_tex.css0000644000175000017500000000342211264347121026726 0ustar flichtenheldflichtenheld /* start css.sty */ .cmr-7{font-size:70%;} .cmmi-10{font-style: italic;} .cmmi-7{font-size:70%;font-style: italic;} .cmsy-7{font-size:70%;} p.noindent { text-indent: 0em } td p.noindent { text-indent: 0em; margin-top:0em; } p.nopar { text-indent: 0em; } p.indent{ text-indent: 1.5em } @media print {div.crosslinks {visibility:hidden;}} a img { border-top: 0; border-left: 0; border-right: 0; } center { margin-top:1em; margin-bottom:1em; } td center { margin-top:0em; margin-bottom:0em; } .Canvas { position:relative; } img.math{vertical-align:middle;} .obeylines-h,.obeylines-v {white-space: nowrap; } div.obeylines-v p { margin-top:0; margin-bottom:0; } .overline{ text-decoration:overline; } .overline img{ border-top: 1px solid black; } td.displaylines {text-align:center; white-space:nowrap;} .centerline {text-align:center;} .rightline {text-align:right;} span.TEX {letter-spacing: -0.125em; } span.TEX span.E{ position:relative;top:0.5ex;left:-0.0417em;} a span.TEX span.E {text-decoration: none; } .underline{ text-decoration:underline; } .underline img{ border-bottom: 1px solid black; margin-bottom:1pt; } div.proclaim { margin-top: 1em; margin-bottom: 1em; } p.item {text-indent:-2em; margin-left:2em;} p.itemitem {text-indent:-2em; margin-left:4em;} span.item, span.itemitem {width:2em; margin-right:0.4em;} td.eqalign3 { text-align:right; margin-left:10em;} .eqalign td { white-space: nowrap; } div.eqalign {text-align:center;} td.eqalignno3, td.leqalignno3 { text-align:right; margin-left:10em;} .leqalignno td, .eqalignno td { white-space: nowrap; } .leqalignno td.noalign, .eqalignno td.noalign { width:5%; white-space: normal; } table.leqalignno, table.eqalignno {width:100%;} img.cdots{vertical-align:middle;} div.pmatrix {text-align:center;} table.pmatrix {width:100%;} /* end css.sty */ texi2html-1.82/test/manuals/res/mini_ker/TEF-overview.html0000644000175000017500000001053311264347121025410 0ustar flichtenheldflichtenheld Miniker 102 manual: 1. An overview of the TEF formalism
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    1. An overview of the TEF formalism

    The TEF (Transfer Evolution Formalism) is based on partitionning and recoupling of model subsystems. It allows the study of the coupling between subsystems by the means of linearization and time discretization.


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/Explicit-model-size.html0000644000175000017500000002660711264347121026766 0ustar flichtenheldflichtenheld Miniker 102 manual: 3.9 Entering model size explicitely
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    3.9 Entering model size explicitely

    It is possible to enter the model dimensions explicitely, instead of generating them automatically, as it was done previously. This feature is turned on by sel dimetaphi in ‘selseq.kumac’ with cmz and dimetaphi added to the SEL variable in the ‘Makefile’ with make.


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    3.9.1 The explicit size sequence

    The dimension of the model is entered in the sequence ‘dimetaphi’, using the fortran parameter np for eta(.) and mp for ff(.). For the Lotka-Volterra model, we have two cell components and only one transfer.

     
    parameter (np=2,mp=1);
    

    You should not change the layout of the parameter statement as the mortran preprocessor matches the line.

    You also have to provide other parameters even if you don’t have any use for them. If you don’t it will trigger fortran errors. It includes the maxstep parameter that can have any value but 0, lp and mobs that should be 0 in the example, and nxp, nyp and nzp that should also be 0. The layout is the following:

     
    parameter (np=2,mp=1);
    parameter (mobs=0);
    
    parameter (nxp=0,nyp=0,nzp=0);
    parameter (lp=0);
    parameter (maxstep=1);
    

    If there are observations, (see Observations), the size of the observation vector is set in the ‘dimetaphi’ sequence by the mobs parameter. For example if there is one observation:

     
    parameter (mobs=1);
    

    To specify parameters (see Parameters), the number of such parameters has to be declared in ‘dimetaphi’ with the parameter lp. Then, if there are two parameters, they are first declared with

     
    parameter (lp=2);
    

    [ < ] [ > ]   [Contents] [Index] [ ? ]

    3.9.2 Entering the model equations, with explicit sizes

    When sizes are explicit, another possibility exists for entering the model equations. The use of symbolic names, as described in Model equations is still possible, and it also becomes possible to set directly the equations associated with the eta(.) and ff(.) vectors.

    In case the symbolic names are not used, the model equations for cells and transfers are entered using a mortran macro, f_set(4), setting the eta(.) evolution with deta_tef(.) and the transfer definitions ff(.) with Phi_tef(.).

    Macro: f_set Phi_tef(i) = f(eta(.),ff(.))

    This macro defines the transfer i static equation. f is a fortran expression which may be function of cell state variables, ‘eta(1)’…‘eta(np)’ and transfers ‘ff(1)’…‘ff(mp)’.

    In the case of the predator-prey model, the transfer definition for φmeet is:

     
    f_set Phi_tef(1) = eta(1)*eta(2);  
    
    Macro: f_set deta_tef(i) = g(eta(i),ff(.))

    This macro defines the cell state component i time evolution model. g is a expression which may be function of cell state variables, ‘eta(1)’…‘eta(np)’ and transfers ‘ff(1)’…‘ff(mp)’.

    The two cell equations of the predator-prey model are, with index 1 for the prey ( ηprey) and index 2 for the predator ( ηpred):

     
    f_set  deta_tef(1) = apar*eta(1)-apar*ff(1);
    f_set  deta_tef(2) = - cpar*eta(2) + cpar*ff(1);
    

    The whole model is:

     
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Transfer definition
    !%%%%%%%%%%%%%%%%%%%%%%
    ! rencontres (meeting)
        f_set Phi_tef(1) = eta(1)*eta(2); 
    
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Cell definition
    !%%%%%%%%%%%%%%%%%%%%%%
    ! eta(1) : prey
    ! eta(2) : predator      
    
        f_set  deta_tef(1) = apar*eta(1)-apar*ff(1);
        f_set  deta_tef(2) = - cpar*eta(2) + cpar*ff(1);
    

    The starting points for cells are entered like:

     
    !     initial state
    !     -------------
         eta(1) = 1.;
         eta(2) = 1.;
    

    If there are observations, they are entered as special transferts with index above mp, for example:

     
    f_set Phi_tef(mp+1) = ff(1) ;
    

    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/Conditional-expressions.html0000644000175000017500000001252611264347121027755 0ustar flichtenheldflichtenheld Miniker 102 manual: B.2 Conditional expressions
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    B.2 Conditional expressions

    A directive argument common to all the directives is the conditionnal expression. A conditionnal expression may be true or false, it is a combination of select flags. the select flags are combined with logical operators. A select flag itself is true if it was selected. A select flag selflag is selected by using the sel selflag instruction in cmz. It is selected by passing the -D selflag command line switch to the call of the cmz directives preprocessor when using make.

    A ‘-’ negates the expression that follows. Parenthesis ‘(’ and ‘)’ are used for the grouping of subexpressions. ‘|’ and ‘,’ are for the boolean or: an expression with a or is true if the expression on the left or the expression on the right of the or is true. ‘&’ is for the boolean and: an expression with an and is true if the expression on the left and the expression on the right are true.

    The grouping is left to right when there is no parenthesis, with or and ‘&’ having the same precedence. Therefore

     
    a&b|c    ≡    (a&b)|c
    a|b&c    ≡    (a|b)&c
    a|b&c  is not  a|(b&c)
    a&b|c  is not  a&(b|c)
    

    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/Intended-audience.html0000644000175000017500000000775011264347121026442 0ustar flichtenheldflichtenheld Miniker 102 manual: Intended audience
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    Intended audience

    The reader should have notions in system dynamics. Moreover a minimal knowledge of programmation and fortran is required. What is required is a basic understanding of variable types, affectation and fortran expressions.


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/A-note-about-mortran-and-cmz-directives.html0000644000175000017500000000375011264347121032532 0ustar flichtenheldflichtenheld Miniker 102 manual: A note about mortran and cmz directives

    The node you are looking for is at A note about mortran and cmz directives.

    texi2html-1.82/test/manuals/res/mini_ker/SVD-run-and-output.html0000644000175000017500000000357011264347121026465 0ustar flichtenheldflichtenheld Miniker 102 manual: SVD run and output

    The node you are looking for is at SVD run and output.

    texi2html-1.82/test/manuals/res/mini_ker/mini_ker.20000644000175000017500000000274011264347121024121 0ustar flichtenheldflichtenhelddvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) dvipng warning: DVI magnification of 1000 over-ridden by user (1400) ** no image file for heavyside, (using heavyside.jpg) texi2html-1.82/test/manuals/res/mini_ker/Partial-Derivatives.html0000644000175000017500000001467111264347121027014 0ustar flichtenheldflichtenheld Miniker 102 manual: 3.5 Partial Derivatives
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    3.5 Partial Derivatives

    The partial derivative rules are included in a Mortran macro series in ‘Derive_mac’ of Miniker files. When using an anusual function, one should verify that the corersponding rules are in that file. It is easy to understand and add new rules in analogy with the already existing ones.

    For instance, suppose one wants to use the intrinsic Fortran function abs(). Its derivatives uses the other function sign() this way:

     
     &'(ABS(#))(/#)' = '((#1)(/#2)*SIGN(1.,#1))'
    

    In such cases when one is adding a new rule, it is important to use the generic function names only (i.e. sin not dsin), because when compilating Miniker in the double precision version, or complex version, the generic names will correctly handle the different variable types - which is not the case when coding with specific function names.


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    3.5.1 Derivating a power function

    Partial derivative of a function in exponent is not secure in its Fortran form g(x,y)**(f(y)). It should be replaced by power(g,f) of the Miniker ‘mathlib’, or by the explicit form exp(f(y)*log(g(x,y))).

    Its derivative will have the following form:

    ∂xf g = gfg-1∂xf + f glogf ∂xg
        g-1
     = f   (g∂xf + f∂xg)

    and is in the macros list already defined in: ‘DERIVE_MAC’.


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/Advanced-programming.html0000644000175000017500000001430711264347121027156 0ustar flichtenheldflichtenheld Miniker 102 manual: 3. Advanced Miniker programming
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    3. Advanced Miniker programming


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/mini_ker_tex4ht_math.html0000644000175000017500000004114111264347121027233 0ustar flichtenheldflichtenheld<!-- tex4ht_begin mini_ker_tex4ht_math math 1 --> η <!-- tex4ht_end mini_ker_tex4ht_math math 1 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 2 --> φ <!-- tex4ht_end mini_ker_tex4ht_math math 2 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 3 --> t <!-- tex4ht_end mini_ker_tex4ht_math math 3 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 4 --> t + δt <!-- tex4ht_end mini_ker_tex4ht_math math 4 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 5 --> δη <!-- tex4ht_end mini_ker_tex4ht_math math 5 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 6 --> η <!-- tex4ht_end mini_ker_tex4ht_math math 6 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 7 --> δφ <!-- tex4ht_end mini_ker_tex4ht_math math 7 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 8 --> φ <!-- tex4ht_end mini_ker_tex4ht_math math 8 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 9 --> f <!-- tex4ht_end mini_ker_tex4ht_math math 9 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 10 --> g <!-- tex4ht_end mini_ker_tex4ht_math math 10 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 11 --> δt <!-- tex4ht_end mini_ker_tex4ht_math math 11 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 12 --> δη <!-- tex4ht_end mini_ker_tex4ht_math math 12 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 13 --> δφ <!-- tex4ht_end mini_ker_tex4ht_math math 13 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 14 --> δφ <!-- tex4ht_end mini_ker_tex4ht_math math 14 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 15 --> δη <!-- tex4ht_end mini_ker_tex4ht_math math 15 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 16 --> a <!-- tex4ht_end mini_ker_tex4ht_math math 16 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 17 --> c <!-- tex4ht_end mini_ker_tex4ht_math math 17 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 18 --> φmeet <!-- tex4ht_end mini_ker_tex4ht_math math 18 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 19 --> ηprey <!-- tex4ht_end mini_ker_tex4ht_math math 19 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 20 --> ηpred <!-- tex4ht_end mini_ker_tex4ht_math math 20 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 21 --> φ <!-- tex4ht_end mini_ker_tex4ht_math math 21 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 22 --> δη <!-- tex4ht_end mini_ker_tex4ht_math math 22 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 23 --> φ <!-- tex4ht_end mini_ker_tex4ht_math math 23 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 24 --> φ = f(η(t - dt) + dφ <!-- tex4ht_end mini_ker_tex4ht_math math 24 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 25 --> dφ <!-- tex4ht_end mini_ker_tex4ht_math math 25 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 26 --> φ = f(η),φ) <!-- tex4ht_end mini_ker_tex4ht_math math 26 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 27 --> 10-3 <!-- tex4ht_end mini_ker_tex4ht_math math 27 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 28 --> (I - D) <!-- tex4ht_end mini_ker_tex4ht_math math 28 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 29 --> (I - D) <!-- tex4ht_end mini_ker_tex4ht_math math 29 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 30 --> (I - D) <!-- tex4ht_end mini_ker_tex4ht_math math 30 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 31 --> k <!-- tex4ht_end mini_ker_tex4ht_math math 31 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 32 --> mk <!-- tex4ht_end mini_ker_tex4ht_math math 32 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 33 --> k <!-- tex4ht_end mini_ker_tex4ht_math math 33 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 34 --> rk <!-- tex4ht_end mini_ker_tex4ht_math math 34 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 35 --> dk <!-- tex4ht_end mini_ker_tex4ht_math math 35 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 36 --> N <!-- tex4ht_end mini_ker_tex4ht_math math 36 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 37 --> N <!-- tex4ht_end mini_ker_tex4ht_math math 37 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 38 --> N + 1 <!-- tex4ht_end mini_ker_tex4ht_math math 38 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 39 --> N + 1 <!-- tex4ht_end mini_ker_tex4ht_math math 39 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 40 --> k <!-- tex4ht_end mini_ker_tex4ht_math math 40 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 41 --> k <!-- tex4ht_end mini_ker_tex4ht_math math 41 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 42 --> x∕Δ <!-- tex4ht_end mini_ker_tex4ht_math math 42 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 43 --> ω <!-- tex4ht_end mini_ker_tex4ht_math math 43 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 44 --> h <!-- tex4ht_end mini_ker_tex4ht_math math 44 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 45 --> φmeet <!-- tex4ht_end mini_ker_tex4ht_math math 45 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 46 --> ηprey <!-- tex4ht_end mini_ker_tex4ht_math math 46 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 47 --> ηpred <!-- tex4ht_end mini_ker_tex4ht_math math 47 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 48 --> η1(t) <!-- tex4ht_end mini_ker_tex4ht_math math 48 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 49 --> η1(t = 0) <!-- tex4ht_end mini_ker_tex4ht_math math 49 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 50 --> t = 0 <!-- tex4ht_end mini_ker_tex4ht_math math 50 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 51 --> ϕj(t) <!-- tex4ht_end mini_ker_tex4ht_math math 51 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 52 --> ηi(t = 0) <!-- tex4ht_end mini_ker_tex4ht_math math 52 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 53 --> h(t) <!-- tex4ht_end mini_ker_tex4ht_math math 53 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 54 --> J <!-- tex4ht_end mini_ker_tex4ht_math math 54 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 55 --> T <!-- tex4ht_end mini_ker_tex4ht_math math 55 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 56 --> J <!-- tex4ht_end mini_ker_tex4ht_math math 56 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 57 --> ψ <!-- tex4ht_end mini_ker_tex4ht_math math 57 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 58 --> l <!-- tex4ht_end mini_ker_tex4ht_math math 58 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 59 --> h <!-- tex4ht_end mini_ker_tex4ht_math math 59 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 60 --> J <!-- tex4ht_end mini_ker_tex4ht_math math 60 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 61 --> t = 0 <!-- tex4ht_end mini_ker_tex4ht_math math 61 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 62 --> ω <!-- tex4ht_end mini_ker_tex4ht_math math 62 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 63 --> t = si <!-- tex4ht_end mini_ker_tex4ht_math math 63 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 64 --> μ <!-- tex4ht_end mini_ker_tex4ht_math math 64 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 65 --> Q <!-- tex4ht_end mini_ker_tex4ht_math math 65 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 66 --> ν <!-- tex4ht_end mini_ker_tex4ht_math math 66 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 67 --> R <!-- tex4ht_end mini_ker_tex4ht_math math 67 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 68 --> W <!-- tex4ht_end mini_ker_tex4ht_math math 68 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 69 --> W <!-- tex4ht_end mini_ker_tex4ht_math math 69 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 70 --> W <!-- tex4ht_end mini_ker_tex4ht_math math 70 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 71 --> g(τ) <!-- tex4ht_end mini_ker_tex4ht_math math 71 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 72 --> g(τ) <!-- tex4ht_end mini_ker_tex4ht_math math 72 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 73 --> τ <!-- tex4ht_end mini_ker_tex4ht_math math 73 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 74 --> τ <!-- tex4ht_end mini_ker_tex4ht_math math 74 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 75 --> g(τ;t) <!-- tex4ht_end mini_ker_tex4ht_math math 75 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 76 --> t <!-- tex4ht_end mini_ker_tex4ht_math math 76 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 77 --> τ <!-- tex4ht_end mini_ker_tex4ht_math math 77 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 78 --> 2 <!-- tex4ht_end mini_ker_tex4ht_math math 78 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 79 --> τ <!-- tex4ht_end mini_ker_tex4ht_math math 79 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 80 --> g(τ;t) <!-- tex4ht_end mini_ker_tex4ht_math math 80 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 81 --> τ <!-- tex4ht_end mini_ker_tex4ht_math math 81 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 82 --> τ <!-- tex4ht_end mini_ker_tex4ht_math math 82 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 83 --> tau <!-- tex4ht_end mini_ker_tex4ht_math math 83 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 84 --> τ <!-- tex4ht_end mini_ker_tex4ht_math math 84 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 85 --> τ <!-- tex4ht_end mini_ker_tex4ht_math math 85 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 86 --> 0.2 <!-- tex4ht_end mini_ker_tex4ht_math math 86 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 87 --> ∘ __√ _2 <!-- tex4ht_end mini_ker_tex4ht_math math 87 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 88 --> τ <!-- tex4ht_end mini_ker_tex4ht_math math 88 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 89 --> τ <!-- tex4ht_end mini_ker_tex4ht_math math 89 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 90 --> τ <!-- tex4ht_end mini_ker_tex4ht_math math 90 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 91 --> g(τ) <!-- tex4ht_end mini_ker_tex4ht_math math 91 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 92 --> g(t,τ) <!-- tex4ht_end mini_ker_tex4ht_math math 92 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 93 --> Ast <!-- tex4ht_end mini_ker_tex4ht_math math 93 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 94 --> Ast <!-- tex4ht_end mini_ker_tex4ht_math math 94 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 95 --> Ast + A† st <!-- tex4ht_end mini_ker_tex4ht_math math 95 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 96 --> Ast <!-- tex4ht_end mini_ker_tex4ht_math math 96 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 97 --> U <!-- tex4ht_end mini_ker_tex4ht_math math 97 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 98 --> w <!-- tex4ht_end mini_ker_tex4ht_math math 98 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 99 --> V <!-- tex4ht_end mini_ker_tex4ht_math math 99 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 100 --> Ast + A† st <!-- tex4ht_end mini_ker_tex4ht_math math 100 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 101 --> Ast <!-- tex4ht_end mini_ker_tex4ht_math math 101 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 102 --> Φ(t + δt,t) = expAstδt <!-- tex4ht_end mini_ker_tex4ht_math math 102 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 103 --> w <!-- tex4ht_end mini_ker_tex4ht_math math 103 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 104 --> Φ <!-- tex4ht_end mini_ker_tex4ht_math math 104 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 105 --> t <!-- tex4ht_end mini_ker_tex4ht_math math 105 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 106 --> Φ(t,0) <!-- tex4ht_end mini_ker_tex4ht_math math 106 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 107 --> U <!-- tex4ht_end mini_ker_tex4ht_math math 107 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 108 --> Φ <!-- tex4ht_end mini_ker_tex4ht_math math 108 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 109 --> w <!-- tex4ht_end mini_ker_tex4ht_math math 109 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 110 --> Φ <!-- tex4ht_end mini_ker_tex4ht_math math 110 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 111 --> V <!-- tex4ht_end mini_ker_tex4ht_math math 111 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 112 --> Φ <!-- tex4ht_end mini_ker_tex4ht_math math 112 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 113 --> Φ(t,0) <!-- tex4ht_end mini_ker_tex4ht_math math 113 --> <!-- tex4ht_begin mini_ker_tex4ht_math math 114 --> Φ(t,0) <!-- tex4ht_end mini_ker_tex4ht_math math 114 --> texi2html-1.82/test/manuals/res/mini_ker/Conditional-directives.html0000644000175000017500000001574111264347121027536 0ustar flichtenheldflichtenheld Miniker 102 manual: B.4 Conditional directives
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    B.4 Conditional directives

    Conditional directives may be used to conditionnaly skip blocks of code. There are 4 conditional directives: if, elseif, else and endif. +if begins a conditional directives sequence, with argument a conditional expression. If the expression is true the block of code following the +if is output in the resulting file, up to another conditional directive, if it is false the code block is skipped. If the expression is false and the following conditional directive is +elseif, the same procedure is followed with the argument of +elseif which is also a conditionnal expression. More than one +elseif may follow a +if. If a +if or +elseif expression is true the following code block is output and all the following +elseif code blocks are skipped. If all the +if and +elseif expressions are false and the following coditionnal directive is +else then the block following the +else is output. If a previous expression was true the code block following the +else is skipped. The last code block is closed by +endif.

    Conditionnal directives may be nested, a +if begins a deeper conditionnal sequences directives that is ended by the corresponding +endif.

    The simplest example is:

         some code;
    +IF,monitor
         code output only if monitor is true;
    +ENDIF
    

    If ‘monitor’ is selected, the +if block is output, it leads to

         some code;
         code output only if monitor is true;
    

    If ‘monitor’ isn’t selected the +if block is skipped, it leads to

         some code;
    

    An example with +else may be:

    +IF,double
     call dmysub(eta);
    +ELSE
     call smysub(eta);
    +ENDIF
    

    If ‘double’ is selected the code output is call dmysub(eta);, if ‘double’ isn’t selected the code output is call dmysub(eta);.

    Here is a self explanatory example of use of +elseif:

    +IF,monitor
      code used if monitor is selected;
    +ELSEIF,kalman
      code used if kalman is selected and monitor is not;
    +ELSE
      code used if kalman and monitor are not selected;
    +ENDIF
    

    And last an example of nested conditional directives:

    +IF,monitor
      code used if monitor is selected;
    +_IF,kalman. deep if
        code used if monitor and kalman are selected;
    +_ELSE. deep else
        code used if monitor is selected and kalman is not;
    +_ENDIF. end the deep conditionnals sequence
    +ELSE
      code used if monitor is not selected;
    +_IF,kalman
        code used if monitor is not selected but kalman is;
    +_ELSE
        code used if monitor and kalman are not selected;
    +_ENDIF
      other code used if monitor is not selected;
    +ENDIF
    

    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/Overview-of-optimisation-with-Miniker.html0000644000175000017500000000376211264347121032426 0ustar flichtenheldflichtenheld Miniker 102 manual: Overview of optimisation with Miniker

    The node you are looking for is at Overview of optimisation with Miniker.

    texi2html-1.82/test/manuals/res/mini_ker/Executing-code-after-the-analysis.html0000644000175000017500000000367011264347121031473 0ustar flichtenheldflichtenheld Miniker 102 manual: Executing code after the analysis

    The node you are looking for is at Executing code after the analysis.

    texi2html-1.82/test/manuals/res/mini_ker/A-model-description.html0000644000175000017500000004412511264347121026731 0ustar flichtenheldflichtenheld Miniker 102 manual: 2.2 Miniker programming illustrated
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    2.2 Miniker programming illustrated

    The general TEF system writes:

    ∂η(t) = g(η(t),φ(t))
 t
 φ(t) = f(η(t),φ(t))

    To illustrate the model description in Miniker a simple predator-prey model of Lotka-Volterra is used. This model can be written in the following TEF form:

    {
  ∂tηprey = aηprey - aφmeet

  ∂tηpred = - cηpred + cφmeet
    φmeet = ηpreyηpred

    with two cell equations, i.e. state evolution of the prey and predator groups, and one transfer accounting for the meeting of individuals of different group.


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    2.2.1 All you need to know about mortran and cmz directives

    The first stage of code generation consists in cmz directives preprocessing. Cmz directives are used for conditional selection of features, and sequence inclusion. At that point you don’t need to know anything about these directives. They are only usefull if you want to take advantage of advanced features (see Programming with cmz directives).

    The code in sequences is written in Mortran and the second stage of code generation consists in mortran macro expansion. The mortran language is described in its own manual, here we only explain the very basics which is all you need to know to use Miniker. Mortran basic instructions are almost Fortran, the differences are the following:

    • The code is free-form, and each statement should end with a semi-colon ;.
    • Comments may be introduced by an exclamation mark ! at the beginning of a line, or appear within double quotes " in a single line.
    • It is possible to use blocs, for do or if statement for example, and they are enclosed within brackets ‘<’ and ‘>’. To be in the safe side, a semi-colon ; should be added after a closng bracket >.

    The following fictious code is legal mortran:

     
    real 
      param;
    param = 3.; ff(1) = ff(3)**eta(1);       "a comment"                 
    ! a line comment
    do inode=1,n_node <eta_move(inode)=0.01; eta_speed(inode)=0.0;>;
    

    Thanks to mortran the model code is very simply specified, as you’ll see next.


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    2.2.2 Entering model equation and parameters

    The model equation and parameters and some Miniker parameters are entered in the ‘zinit’ sequence. The whole layout of the model is given before detailing the keywords.

     
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Parameters           
    !%%%%%%%%%%%%%%%%%%%%%%
      real apar,bpar;        "optional Fortran type declaration"
    
    ! required parameters
         dt=.01;             "initial time-step"
         nstep=10 000;       "number of iterations along the trajectory"
         time=0.;            "time initialisation "
    
    ! model parameters            
         apar = 1.5;             
         cpar = 0.7;          
                                                      
    ! misceallaneous parameters
         modzprint = 1000;    "printouts frequency" 
    
    print*,'***************************************';
    print*,'Lotka-Volterra model with parameters as:';
    z_pr: apar,bpar;
    print*,'***************************************';
    
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Transfer definition
    !%%%%%%%%%%%%%%%%%%%%%%
    ! rencontre (meeting)
    set_Phi
    < var: ff_interact, fun: f_interact = eta_prey*eta_pred;
    >;
    
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Cell definition
    !%%%%%%%%%%%%%%%%%%%%%%
    
    set_eta
    < var: eta_prey, fun: deta_prey =   apar*eta_prey - apar*ff_interact;
      var: eta_pred, fun: deta_pred = - cpar*eta_pred + cpar*ff_interact;
    >;
    
    
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Initial states
    !%%%%%%%%%%%%%%%%%%%%%%
         eta_prey = 1.;
         eta_pred = 1.;
    ;
        OPEN(50,FILE='title.tex',STATUS='UNKNOWN');   "title file"
        write(50,5000) apar,cpar;                     
    5000;format('Lotka-Volterra par:',2F4.1);
    

    Variables and model parameters

    The following variables are mandatory:

    dt

    The time step.

    time

    Model time initialisation.

    nstep

    Number of iterations along the trajectory.

    There are no other mandatory variables. Some optional variables are used to monitor the printout and ouput of results of the code. As an example, the variable modzprint is used to set the frequency of the printout of the model matrix and vectors during the run (see Controlling the printout and data output).

    User’s defined variable and Fortran or Mortran instructions can always be added for intermediate calculus. To avoid conflict with the variables of the Miniker code, the rule is that a users symbol must not have characters ‘o’ in the first two symbol characters.

    In the predator-prey example there are two model parameters. The fortran variables are called here apar for a and cpar for c. If a Fortan type definition is needed, it should be set at the very beginning of ‘zinit’. The predator-prey code variable initializations finally reads

     
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Parameters         
    !%%%%%%%%%%%%%%%%%%%%%%
      real apar,bpar;        "optional Fortran type declaration"
    
         dt=.01;           
         nstep=10 000;    
         time=0.;            
    
    ! model parameters
         apar = 1.5;           
         cpar = 0.7;                                                            
    
         modzprint = 1000;  
    

    Model equations

    The model equations for cells and model equations for transferts are entered in two mortran blocks, one for the transferts, the other for the cell components. The model equations for cells are entered into a set_eta block, and the transfer equations are entered into a set_phi block.

    In each block the couples variable-function are specified. For transfers the function defines the transfer itself while for cells the function describes the cell evolution. The variable is specified with var:, the function is defined with fun:.

    In the case of the predator-prey model, the transfer variable associated with φmeet could be called ff_interact and the transfer definition would be given by:

     
    set_Phi
    < var: ff_interact, fun: f_interact = eta_prey*eta_pred;
    >;
    

    The two cell equations of the predator-prey model, with name eta_prey for the prey ( ηprey) and eta_pred for the predator ( ηpred) are:

     
    set_eta
    < var: eta_prey, fun: deta_prey =   apar*eta_prey - apar*ff_interact;
      var: eta_pred, fun: deta_pred = - cpar*eta_pred + cpar*ff_interact;
    >;
    

    The ‘;’ at the end of the mortran block is important.

    The whole model equations are setup with:

     
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Transfer definition
    !%%%%%%%%%%%%%%%%%%%%%%
    ! rencontre (meeting)
    set_Phi
    < var: ff_interact, fun: f_interact = eta_prey*eta_pred;
    >;
    
    !%%%%%%%%%%%%%%%%%%%%%%
    ! Cell definition
    !%%%%%%%%%%%%%%%%%%%%%%
    
    set_eta
    < var: eta_prey, fun: deta_prey =   apar*eta_prey - apar*ff_interact;
      var: eta_pred, fun: deta_pred = - cpar*eta_pred + cpar*ff_interact;
    >;
    

    Whenever the user is not concerned with giving a specific name to a function, it is possible to specify the equation only with eqn:. Therefore the user may replace an instruction as:

     
      var: ff_dump,
      fun: f_dump  = - rd*(eta_speed - eta_speed_limiting);
    

    with:

     
       eqn: ff_dump = - rd*(eta_speed - eta_speed_limiting);
    

    In that case, the unnamed function will take the name of the defined variable preceded by the ‘$’ sign: $ff_dump.

    Starting points

    The cells equations require state initial conditions. In some case, the transfers may also need starting points although they are determined from the cell values.

    In the predator-prey model the starting points for cells are:

     
    !     initial state
    !     -------------
         eta_prey = 1.;
         eta_pred = 1.;
    

    When there is a non trivial implicit relationship between the transfers in the model, it may be usefull or even necessary to set some transfers to non-zero values. This difficulty is only relevant for the very first step of the simulation and will be used as a first guess of φ. The uninitialized transfers having a default compiler-dependant (often zero) value, an initialization to another value may help avoiding singular functions or matrix and ensure convergence in the Newton algorithm used to solve the transfer implicit equation.

    The cell and transfer arrays

    Sometime it is easier to iterate over an array than to use the cell or transfer variable name. This is possible because there is a correspondence between the variable names and the fortran array eta(.) for the cell variables and the fortran array ff(.) for the transfer variables(1).

    The index of the variable is determined by the order of appearance in the variable definition blocks. It is reminded in the output, as explained later (see Simulation and output).

    The number of cells is in the integer np variable, and the number of transfer is in the integer mp variable.

    title file

    For some graphics generation, a file with name ‘title.tex’ is required which sets the title. The following instructions take care of that:

     
        OPEN(50,FILE='title.tex',STATUS='UNKNOWN');
        write(50,5000) apar,cpar;                 
    5000;format('Lotka-Volterra par:',2F4.1);
    
        close(50);
    

    In that case the parameter values are written down, to differenciate between different runs. This step is in general not needed.


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/Programming-environments.html0000644000175000017500000001100011264347121030123 0ustar flichtenheldflichtenheld Miniker 102 manual: A.1 Programming environments
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    A.1 Programming environments

    Miniker is not a traditionnal software in that it isn’t a library or an interpreter but rather a set of source and macro file that combines with the user model code and enable to build a binary program corresponding with the model. It requires a build environment with a preprocessor, a compiler and facilities that automate these steps.

    Two different environment are proposed. One use cmz (http://wwwcmz.web.cern.ch/wwwcmz/index.html), while the other is based on make. Other libraries are needed, the CERN Program Library (cernlib) and lapack.


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/Using-cmz-directives-in-Miniker.html0000644000175000017500000000372011264347121031141 0ustar flichtenheldflichtenheld Miniker 102 manual: Using cmz directives in Miniker

    The node you are looking for is at Using cmz directives in Miniker.

    texi2html-1.82/test/manuals/res/mini_ker/mini_ker_tex4ht_math.lg0000644000175000017500000000061611264347121026673 0ustar flichtenheldflichtenheldhtfcss: cmmi font-style: italic; htfcss: cmmib font-style: italic; font-weight: bold; htfcss: cmtt font-family: monospace; File: mini_ker_tex4ht_math.html --- characters --- Font("cmr","7","7","100") Font("cmmi","7","7","100") Font("cmsy","7","7","100") Font("cmex","10","10","100") Font("cmr","10","10","109") Font("cmtt","10","10","109") Font("cmmi","10","10","109") Font("cmsy","10","10","109") texi2html-1.82/test/manuals/res/mini_ker/Stability-of-fastest-modes.html0000644000175000017500000002437111264347121030255 0ustar flichtenheldflichtenheld Miniker 102 manual: 4.5 Stability analysis of fastest modes
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    4.5 Stability analysis of fastest modes

    The preceding analyses are done along with a simulation. One has also the possibility of using in a more classical fashion the state advance matrix Ast, after the end of the simulation. Code to perform the SVD (Singular Value Decomposition) of the state matrix Ast and also of Ast + A† st is provided with Miniker. The singular elements of these two matrices correspond to the most rapid modes of instability of the perturbed system.

    The Singular value decomposition of a matrix is noted

        †
UwV

    An executable file, ‘sltc.exe’ is generated and running this file will produce the corresponding results.


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    4.5.1 Singular Value Decomposition with cmz

    The cmz macro smod SLTC prepares a main program (‘circul’ of +PATCH SLTC), provided as a base for user’s own analysis, in the directory ‘sltc/’.


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    4.5.2 Singular Value Decomposition with make

    To compile the singular value decomposition executable with make you can do

     
    make sltc.exe
    

    If you want to have a separate directory for the SVD, you should copy the sequence ‘dimetaphi.inc’ (or make a link to that file) to the directory. You should also copy the file ‘Makefile.sltc’ from the ‘template/’ directory in this directory, rename it ‘Makefile’ and set the Miniker directory path in the miniker_dir variable. For example, if the Miniker directory is in ‘/u/src/mini_ker’:

     
    miniker_dir = /u/src/mini_ker
    

    [ < ] [ > ]   [Contents] [Index] [ ? ]

    4.5.3 Singular Value Decomposition run and output

    As it is, the ‘sltc.exe’ executable generated by the compilation determines the SVD. This program requires ‘title.tex’ (see Title file) to transmit a title for output and graphics, and ‘aspha.data’ (see Running a simulation and using the output) to access the state matrix. To get access to these files (in case they are not in the current directory) it is possible to make a link to the corresponding files in the model directory. Once it is done the program may be run:

     
    ./sltc.exe
    

    The files ‘u.data’, ‘w.data’, and ‘v.data’ holds the singular elements for Ast ( U, w and V), and ‘us.data’, ‘ws.data’, and ‘vs.data’ holds the singular elements of Ast + A† st. The corresponding macros ‘.kumac’ for PAW(9) are also generated.


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/mini_ker_tex4ht_math.vr0000644000175000017500000000000011264347121026703 0ustar flichtenheldflichtenheldtexi2html-1.82/test/manuals/res/mini_ker/Parameters.html0000644000175000017500000001216711264347121025236 0ustar flichtenheldflichtenheld Miniker 102 manual: 3.7 Parameters
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    3.7 Parameters

    It is possible to specify some Fortran variables as specific model parameters. Model parameters may be used in sensitivity studies (see Sensitivity to a parameter) and in the adjoint model (see Sensitivity of cost function to parameters). Nothing special is done with parameters with Kalman filtering.

    The parameters are fortran variables that should be initialized somewhere in ‘zinit’. For a variable to be considered as a parameter, it should be passed as an argument to the Free_parameters macro. For example if apar and cpar (from the predator example) are to be considered as parameters, Free_parameters should be called with:

     
    Free_parameter: apar, cpar;
    

    When used with grid1d models (see Describing 1D gridded model) the inode number may appear in parenthesis:

     
    Free_parameter: rd(1), rk(2);
    

    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/Advanced-use-of-Miniker-with-make.html0000644000175000017500000000776511264347121031324 0ustar flichtenheldflichtenheld Miniker 102 manual: 5. Advanced use of Miniker with make
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    5. Advanced use of Miniker with make


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/Cmz-directives-reference.html0000644000175000017500000001203011264347121027744 0ustar flichtenheldflichtenheld Miniker 102 manual: B. Cmz directives reference
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    B. Cmz directives reference

    The cmz directives are described together with the other features of cmz in the cmz manual at http://wwwcmz.web.cern.ch/wwwcmz/, the important ones are nevertheless recalled here, especially for those that use make and don’t need the whole features of cmz.

    After the description of the generic features, we turn to the cmz directive of interest. There are three kinds of cmz directives that are of use within Miniker: one kind that introduce files, the other for conditionnal compilation and the third for sequence inclusion.


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/index.html0000644000175000017500000000337211264347121024240 0ustar flichtenheldflichtenheld Miniker 102 manual: Top

    The node you are looking for is at Top.

    texi2html-1.82/test/manuals/res/mini_ker/mini_ker_tex4ht_tex.4ct0000644000175000017500000000012311264347121026623 0ustar flichtenheldflichtenheld\expandafter\ifx\csname doTocEntry\endcsname\relax \expandafter\endinput\fi \par texi2html-1.82/test/manuals/res/mini_ker/mini_ker_tex4ht_tex.tex0000644000175000017500000001132011264347121026732 0ustar flichtenheldflichtenheld% Automatically generated \csname tex4ht\endcsname \HCode{\Hnewline \Hnewline} $$\partial_t \eta (t) = g(\eta(t),\varphi(t))$$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$ \varphi(t) = f(\eta(t),\varphi(t)) $$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$\pmatrix{A & B\cr -C^+ & I-D\cr} \pmatrix{\delta \eta\cr \delta \varphi\cr} = \pmatrix{\Gamma\cr \Omega\cr}$$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$\eqalign{\partial_t \eta (t) &= g(\eta(t),\varphi(t))\cr \varphi(t) &= f(\eta(t),\varphi(t))\cr }$$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$\left\{\eqalign{\partial_t \eta _{prey} &= a \eta _{prey} - a \varphi _{meet} \cr \partial_t \eta _{pred} &= -c \eta _{pred} + c \varphi _{meet}\cr}\right.$$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$\varphi _{meet} = \eta _{prey}\eta _{pred}$$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$\partial_{\eta} g(\eta(t),\varphi(t)); $$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$\partial_{\varphi} g(\eta(t),\varphi(t)); $$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$\partial_{\eta} f(\eta(t),\varphi(t)); $$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$\partial_{\varphi} f(\eta(t),\varphi(t)); $$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$\left\{\eqalign{\partial_t \eta _{k} ^{pos} &= \eta _{k} ^{vel} \cr \partial_t \eta _{k} ^{vel} &= ( \varphi_k ^{spr} -\varphi _{k+1} ^{spr} + \varphi _{k} ^{dmp}-\varphi _{k+1} ^{dmp})\,/m_k \cr}\right.$$ $$\left\{\eqalign{ \varphi_k ^{spr} &= -k_k (\eta _{k} ^{pos}- \eta _{k-1} ^{pos})\cr \varphi_k ^{spr} &= -d_k (\eta _{k} ^{vel}- \eta _{k-1} ^{vel}) \cr}\right.$$ $$\left\{\eqalign{\eta ^{pos}_{0} &= 0\cr \eta ^{vel}_{0} &= 0\cr \varphi ^{spr}_{N+1} &= 0\cr \varphi ^{dmp}_{N+1} &= 0\cr}\right.$$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$\eqalign{\partial_x f^g &= g f^{g-1}\partial_x f + f^g \log f\partial_x g\cr &= f^{g-1}(g\partial_x f + f\partial_x g)\cr}$$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$ \omega = h ( \eta , \varphi) $$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$ J = \psi[\eta(T),\varphi(T) ,h(T)] + \int_0 ^T {l[\eta(\tau),\varphi(\tau),h(\tau)]}\, d\tau $$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$\eqalign{ \partial_t \eta (t) &= g(\eta(t),\varphi(t)) + W(t) \mu\cr \varphi(t) &= f(\eta(t),\varphi(t))\cr \omega(t) &= h ( \eta(t) , \varphi(t)) + \nu\cr }$$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$\left\{\eqalign{ \partial_t \eta_1 &= a_{11} \eta_1 + a_{12} \varphi_2 + a_{13} \varphi_3 + W_{11} \mu_1 + W_{12} \mu_2\cr \partial_t \eta_2 &= a_{21} \varphi_1 + a_{22} \eta_2 + a_{23} \varphi_3 + W_{21} \mu_1 + W_{22} \mu_2\cr \partial_t \eta_3 &= a_{31} \varphi_1 + a_{32} \varphi_2 + a_{33} \eta_3 + W_{31} \mu_1 + W_{32} \mu_2 }\right.$$ $$\left\{\eqalign{ \varphi _1 &= \eta _1\cr \varphi _2 &= \eta _2\cr \varphi _3 &= \eta _3 }\right.$$ $$\left\{\eqalign{ \omega _1 &= \varphi _1 + \nu_1\cr \omega _2 &= \eta _2 + \nu_2 \cr \omega _3 &= \eta _3 + \nu_3 }\right.$$ \HCode{\Hnewline \Hnewline} \HCode{\Hnewline \Hnewline} $$ U w V^\dagger $$ \HCode{\Hnewline \Hnewline} \bye texi2html-1.82/test/manuals/res/mini_ker/Other-Manuals-and-documentation.html0000644000175000017500000001016211264347121031212 0ustar flichtenheldflichtenheld Miniker 102 manual: Other Manuals and documentation
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    Other Manuals and documentation

    A programmers’Manual is available (in French), and can be asked for to any member of the collabration. See additional documents in http://www.lmd.jussieu.fr/Zoom/doc or ask for Research texts and articles to members.


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/Installation.html0000644000175000017500000001065211264347121025571 0ustar flichtenheldflichtenheld Miniker 102 manual: A. Installation
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    A. Installation


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/Setting-and-running-a-model.html0000644000175000017500000005060411264347121030300 0ustar flichtenheldflichtenheld Miniker 102 manual: 2.3 Setting and running a model
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    2.3 Setting and running a model

    In this section it is assumed that a programming environment has been properly setup. This environment may use either cmz or make to drive the preprocessing and compilation. You can skip the part related with the environment you don’t intend to use.

    For instructions regarding the installation, see Installation.


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    2.3.1 Setup a model and compile with cmz

    The user defined sequences are ‘KEEP’ in the cmz world. The most common organization is to have a cmz file in a subdirectory of the directory containing the ‘mini_ker.cmz’ cmz file. In this cmz file there should be a ‘PATCH’ called ‘zinproc’ with the KEEPs within the patch. The KEEP must be called ‘$zinit’.

    From within cmz in the directory of your model the source extraction, compilation and linking will be triggered by a mod command. This macro uses the ‘selseq.kumac’ information to find the ‘mini_ker.cmz’ cmz file. mod shall create a directory with the same name than the cmz file, ‘mymodel/’ in our example. In this directory there is another directory ‘cfs/’ containing the sources extracted from the cmz file.

    The file ‘mymodel_o.tmp’ contains all the mortran code generated by cmz with the sequences substituted, including the ‘$zinit’. The fortran produced by the preprocessing and splitting of this file is in files with the traditional ‘.f’ suffix. The principal program is in ‘principal.f’. An efficient way of getting familiar with mini_ker methods is looking at the ‘mymodel_o.tmp’ where all sequences and main Mortran instructions are gathered. Symbolic derivation is noted as F_D(expression)(/variable), and the resulting Fortran code is in ‘principal.f’.

    mod also triggers compilation and linking. The object files are in the same ‘cfs/’ directory and the executable is in the ‘mymodel/’ directory, with name ‘mymodel.exe’.


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    2.3.2 Setup a model and compile with make

    With make, the sequences are files ending with ‘.mti’ (for mortran include files), called, for example, ‘zinit.mti’. They are included by mortran in other source files. You also need a ‘Makefile’ to drive the compilation of the model.

    If you don’t need additional code or libraries to be linked with your model you have two alternatives.

    1. The simplest alternative is to run the start_miniker script with the model file name as argument. It should copy a ‘zinit.mti’ file ready to be edited and a Makefile ready to compile the model. For the predator prey model, for example, you could run
       
      $ start_miniker predator
      
    2. Otherwise you can copy the Makefile from ‘template/Makefile’ in the directory containing the sequences. You should then change the compiled model file name, by changing the value of the model_file_name variable to the name of your choice in the Makefile. It is set to ‘mymodel’ in the template. For the predator-prey model, it could be set like
       
      model_file_name = predator
      

      If you want the executable model file to be built in another directory, you could set

       
      model_file_name = some_dir/predator
      

      The other items set in the default Makefile should be right.

    The preprocessing and the compilation are launched with

     
    make all
    

    The mortran files are generated by the cmz directive preprocessor from files found in the package source directories. The mortran files end with ‘.mtn’ for the main files and ‘.mti’ for include files. They are output in the current directory. The mortran preprocessor then preprocess these mortran files and includes the sequences. The resulting fortran code is also in the current directory, in files with a ‘.f’ suffix. Some fortran files ending with ‘.F’ may also be created by the cmz directive preprocessor. The object files resulting from the compilation of all the fortran files (generated from mortran or directly from fortran files) are there too.

    In case you want to override the default sequences or a subroutine file you just have to create it in your working directory along with the ‘zinit.mti’. For example you could want to create or modify a ‘zsteer.mti’ file (see Executing code at the end of each time step), a ‘zcmd_law.mti’ file (see Control laws), a ‘monitor.f’ file (see Turning the model into a subroutine) to take advantage of features presented later in this manual.

    More in-depth discussion of using make to run Miniker is covered in Advanced use of Miniker with make. For example it is also possible to create files that are to be preprocessed by the cmz directive preprocessor and separate source files and generated files. This advanced use is more precisely covered in Programming with cmz directives.


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    2.3.3 Running a simulation and using the output

    Once compiled the model is ready to run, it only has to be executed. On standard output informations about the states, transfers, tangent linear system and other jacobian matrices are printed. For example the predator-prey model could be executed with:

     
    ./predator > result.lis
    

    The correspondance between the symbolic variables and the basic vectors and functions are printed at run time:

     
      ---------------- Informing on Phi definition -----------------
        Var-name,           Function-name,       index in ff vector
                 ff_interact              f_interact  1
      ----------------------------------------------------
    
      --------------- Informing on Eta definition ------------------
       Var-name,           Function-name,       index in eta vector
                    eta_prey               deta_prey  1
                    eta_pred               deta_pred  2
    

    A summary of the model equations are in ‘Model.hlp’ file. For the same example:

     
    ======================= set_Phi                                                                
                                                                                             
        1 ff_interact f_interact           eta_pray*eta_pred
    ======================= set_Eta                                                                
                                                                                             
        1 eta_pray    deta_pray            apar*eta_pray-apar*ff_interact
        2 eta_pred    deta_pred            -cpar*eta_pred+cpar*ff_interact
    

    when other general functions are specified with f_set, it can appear also in the same help file when replaced by fun_set.

    As far as possible, all data printed in the listing are associated with a name related to a variable. Here is an extract:

     
     Gamma :-8.19100E-02-1.42151E-01 3.87150E-02
             eta_courant eta_T_czcx  eta_T_sz   
           ------------------------------------------------
     Omega : 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00
             courant_L   T_czcx      Psi_Tczc    Psi_Tsz 
           ------------------------------------------------
    

    for the two known vectors of the system, and:

     
     >ker : Matrice de couplage       4 4 4 4
    courant_L Raw(1,j=1,4):   1.000     -9.9010E-03  0.000       0.000    
    T_czcx    Raw(2,j=1,4): -2.7972E-02   1.000      0.000      9.9900E-04
    Psi_Tczcx Raw(3,j=1,4):  0.1605      9.7359E-02  1.000     -5.7321E-03
    Psi_Tsz   Raw(4,j=1,4):   0.000     -0.1376     5.7225E-03   1.000    
              Var-Name      courant_L   T_czcx      Psi_Tczc    Psi_Tsz 
              ----------------------------------------------------------
    

    where the couplage (coupling matrix) is given that corresponds to the matrix coupling the four transfer components after δη has been eliminated from system. It is computed in the subprogram ‘oker’ (for kernel) which solves the system.

    Basic results are output in a set of ‘.data’ files. The first line (or two lines) describes the column with a ‘#’ character used to mark the lines as comments (for gnuplot for example). In the ‘.data’ files, the data are simply separated with spaces. Each data file has the time variable values as first column. (2). Following columns give the values of eta(.) in ‘res.data’, dEta(.) in ‘dres.data’ – the step by step variation of eta(.) – and ff(.) in ‘tr.data’.

    Along the simulation the TEF Jacobian matrices are computed. A transfer variables elimination process also leads to the definition of the classical state advance matrix of the system (the corresponding array is aspha(.,.) in the code). This matrix is output in the file ‘aspha.data’ that is used to post-run dynamics analyses. The matrix columns are written column wise on each record. See Stability analysis of fastest modes. See Generalized tangent linear system analysis. It is not used in the solving process.

    Other ‘.data’ files will be described later.


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    2.3.4 Doing graphics

    Since the data are simply separated with spaces, and comment lines begin with ‘#’, the files can be vizualised with many programs. With gnuplot, for example, to plot eta(n), the gnuplot statement could be:

     
    plot "res.data" using 1:(n+1)
    

    The similar one for ff(n):

     
    plot "tr.data" using 1:(n+1)
    

    For people using PAW, the CERN graphical computer code, Miniker prepares kumacs that allow to read process the ‘.data’ files in the form of n-tuples (see the PAW manual for more information). In that cas, the flag sel paw has to be gievn in the ‘selsequ.kumac’. The generated n-tuples are ready to use only for vector dimension of at most 10 (including the variable time). These kumacs are overwritten each time the model is run. Usaually, gnuplot has to be preferred, but when using surfaces and histograms, PAW is better. The ‘gains.f’ (and ‘go.xqt’ is provided as an example in the Miniker files.


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/Reading-guide.html0000644000175000017500000001172211264347121025573 0ustar flichtenheldflichtenheld Miniker 102 manual: Reading guide
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    Reading guide

    The first chapter is a brief overview of the TEF. The following describes how to write, compile and run a model in Miniker in its basic and comprehensive syntax. Reading up to the section Controlling the run is required to be able to use Miniker. In this section it is assumed that Miniker is properly setup. The installation instructions are in the appendix at Installation.

    The next chapter describes advanced features, first a general introduction to features settings and then a description of other model description related features.

    The next chapter describes system analysis tools available with Miniker. The sections are independant and each describes how to use a specific feature. If you plan on using these features, you should also read Overview of feature setting.

    A final chapter describes advanced features in a development environment using make,

    In the appendix the instructions for the installation are described (see Installation).


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/Sensitivities.html0000644000175000017500000003231411264347121025771 0ustar flichtenheldflichtenheld Miniker 102 manual: 4.1 Automatic sensitivity computation
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    4.1 Automatic sensitivity computation

    An obvious advantage of having acces to the Jacobian matrices along the system trajectory concerns automatic sensitivity analyses, as either:

    • the sensitivity of all variables to perturbation in the initial condition of one state variable;
    • the same sensitivities to an initial pulse (or step) on a transfer;
    • the same sensitivities to a series of pulses (or steps) on a transfer;
    • the same for a change in a parameter, eventually during the run;
    • the sensitivity of the matrix of advance in state space to a change in a parameter.

    This is declared in Zinit as:

     
    ! -------------
    ! Sensitivities
    ! -------------
    Sensy_to_var
    < var: eta_pray, pert: INIT;
      var: eta_pred, pert: INIT;
    >;
    

    Each variable at origin of a perturbation is declared as var:, and the type of perturbation in pert:. Here, INIT conditions are only allowed because the two variables are states variables. For transfers, pert: pulse corresponds to an initial pulse, pert: step_resp and pert: step_eff to initial steps, the difference between _resp (response form) and _eff (effect form) concerns the diagonal only of the sensitivity matrix (see Feedback gains in non-linear models).

    Non initial perturbation can also be asked for:

     
      Sensy_to_var
      <
    !*     var: eta_courant_L, pert: init at 100;
    !*     var: ff_T_czcx,     pert: pulse at 100 every 20;
    !*     var: ff_Psi_Tczcx,  pert: step_eff;
    !*     var: ff_Psi_Tczcx,  pert: step_Resp at 10 every 100;
    ! *** premiers tests identiques a lorhcl.ref
        var: ff_courant_L , pert: step_eff;
        var: ff_T_czcx    , pert: step_eff;
        var: ff_Psi_Tczcx , pert: step_eff;
        var: ff_Psi_Tsz   , pert: pulse at 100 every 50;
      >;
    

    In this example taken from ‘lorhcl’, a sensitivity can increase so as to trespass the Fortran capacity, so that each sensitivity vector (matrix column) can be reset at some time-increment at III every JJJ;

    It is noteworthy that these sensitivity analyses are not based on difference between two runs with different initial states or parameter values, but on the formal derivatives of the model. This method is not only numerically robust, but is also rigorously funded as based on the TLS of the model(5).

    If the dimetaphi sequence is built by the users, he should declare the number of perturbing variables as nxp=:

     
          parameter (nxp=np,nyp=0,nzp=0);
    

    here, all state variables are considered as perturbing variables.

    The sensitivity vectors are output in the result files ‘sens.data’ for cells and ‘sigma.data’ for transfers. In those files the first column corresponds again with time, and the other columns are relative sensitivities of the cell states (in ‘sens.data’) and transfers (in ‘sigma.data’) with respect to the initial value of the perturbed state.

    In our predator-prey example, the second column of ‘sens.data’ will contain the derivative of η1(t) with respect to η1(t = 0). Drawing the second column of ‘sens.data’ against the first one gives the time evolution of the sensitivity of eta-pred to a change in the initial value of eta-pray. One can check in that it is set to 1 at t = 0:

     
    #    Sensy_to: eta_pray         3        eta_pred         5       
    # time \\  of: eta_pray     eta_pred     eta_pray     eta_pred    
      0.00000E+00  1.00000E+00  0.00000E+00  0.00000E+00  1.00000E+00
      1.00000E-02  9.90868E-01  1.11905E-02 -1.26414E-02  9.98859E-01
    

    The two last columns are the state sensitivity to a change in initial conditions of the number of predators.

    In the same way, the j+1th column of ‘sigma.data’ will be the derivative of ϕj(t) with respect to ηi(t = 0) . Here:

     
    #    Sensy_to: eta_pray     eta_pred    
    # time \\  of: ff_interact  ff_interact 
      0.00000E+00  1.60683E+00  8.47076E-01
      1.00000E-02  1.59980E+00  8.18164E-01
    

    the unique transfer variable gives rise to two sensitivity columns.

    Sensitivity studies are usefull to assess the predictability properties of the corresponding system.


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    4.1.1 Sensitivity to a parameter

    A forward sensitivity to a parameter will be computed when specified as described in Parameters. For example, suppose that the sensitivity to an initial change in the apar parameter of the predator model is of interest.

    The sensitivity calculs is turned on as a forward parameter specified on the Free_parameter list:

     
    Free_parameter: [fwd: apar, cpar];
    

    The result are in ‘sensp.data’ for cells and ‘sigmap.data’ for transfers.

     
    #    Sensy_to: pi_prandtl       3            4        pi_rayleigh_     6
    # time \\  of: eta_courant_ eta_T_czcx   eta_T_sz     eta_courant_ eta_T
      0.00000E+00  0.00000E+00  0.00000E+00  0.00000E+00  0.00000E+00  0.000
      2.00000E-03 -4.77172E-03 -3.99170E-05  3.55971E-05 -9.94770E-05 -1.004
    

    In the above example from ‘lorhcl’ sensitivity of the three states with respect to an initial change in two parameters are independantly given (first line also numbers the column to easy gnuplot using).


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    4.1.2 Advance matrix sensitivity

    It is possible to look at the sensitivity of the matrix of advance in states space (the matrix aspha) with regard to a parameter. The parameter must be accounted for in the parameter number and be in the parameter list, flagged as the matrix mx parameter, like in

     
    Free_parameter: [mx: apar], cpar;
    

    This feature is associated with a selecting flag, ‘dPi_aspha’. One gets the result in the matrix d_pi_aspha(.,.) of dimension (np,np).

    This matrix may be used to compute other quantities, for example it may be used to compute the sensitivity of the eigenvalues of the state-advance matrix with regard to the [fwd] parameter. These additional computations have to be programmed by the user in ‘zsteer’ with matrices declared and initialized in ‘zinit’. An example is given in the example ‘lorhcl’ provided with the Miniker installation files, following a method proposed by Stephane Blanco.


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/Variables-macros-and-functions-index.html0000644000175000017500000007416711264347121032210 0ustar flichtenheldflichtenheld Miniker 102 manual: Variables, macros and functions index
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    Variables, macros and functions index

    Jump to:   A   B   C   D   E   F   H   I   K   M   N   O   P   S   T   V   Z  
    Index Entry Section

    A
    aspha2.4.1 Executing code at the end of each time step

    B
    Bb2.4.1 Executing code at the end of each time step
    Bt2.4.1 Executing code at the end of each time step

    C
    couplage(.)2.4.1 Executing code at the end of each time step
    cout_l4.2.3 Cost function coding and adjoint modeling
    cout_Psi4.2.3 Cost function coding and adjoint modeling
    covana(.,.)4.3.3 Executing code after the analysis
    coveta(.,.)Error variance-covariance matrices
    covfor(.,.)Initial variance-covariance matrix on the state
    covobs(.,.)Error variance-covariance matrices

    D
    D2.4.1 Executing code at the end of each time step
    dEta(.)2.3.3 Running a simulation and using the output
    deta_tef(.)3.9.2 Entering the model equations, with explicit sizes
    dneta2.4.1 Executing code at the end of each time step
    dphi2.4.1 Executing code at the end of each time step
    dt2.2.2 Entering model equation and parameters
    dt
    d_pi_aspha(.,.)4.1.2 Advance matrix sensitivity

    E
    eqn:Model equations
    eta(.)The cell and transfer arrays
    eta(.), explicit sizes3.9.2 Entering the model equations, with explicit sizes
    etafor(.)4.3.3 Executing code after the analysis

    F
    ff(.)The cell and transfer arrays
    ff(.), explicit sizes3.9.2 Entering the model equations, with explicit sizes
    ffl(.)2.4.1 Executing code at the end of each time step
    Free_parameter3.7 Parameters
    fun:Model equations
    f_set3.9.2 Entering the model equations, with explicit sizes
    f_set3.9.2 Entering the model equations, with explicit sizes
    f_set4.2.3 Cost function coding and adjoint modeling
    f_set4.2.3 Cost function coding and adjoint modeling

    H
    H2.4.1 Executing code at the end of each time step

    I
    index_ff_gain4.4.1 Specifying the Borel sweep
    innobs(.)4.3.3 Executing code after the analysis
    istep2.4.1 Executing code at the end of each time step
    istep_B_deb4.4.1 Specifying the Borel sweep
    istep_B_fin4.4.1 Specifying the Borel sweep
    istep_B_inc4.4.1 Specifying the Borel sweep
    itau_max4.4.1 Specifying the Borel sweep

    K
    kgain(.)4.3.3 Executing code after the analysis

    M
    maxstep3.9.1 The explicit size sequence
    mereta(.,.)Observations and error on state matrix
    mobs3.8.1 Observations
    model_file_name2.3.2 Setup a model and compile with make
    modzprint2.2.2 Entering model equation and parameters
    modzprint2.4.2 Controlling the printout and data output
    mpThe cell and transfer arrays
    mp3.9.1 The explicit size sequence
    m_dwn3.3.1 Setting dimensions for 1D gridded model
    m_mult3.3.1 Setting dimensions for 1D gridded model
    m_node3.3.1 Setting dimensions for 1D gridded model
    m_up3.3.1 Setting dimensions for 1D gridded model

    N
    npThe cell and transfer arrays
    np3.9.1 The explicit size sequence
    nstep2.2.2 Entering model equation and parameters
    n_dwn3.3.1 Setting dimensions for 1D gridded model
    n_mult3.3.1 Setting dimensions for 1D gridded model
    n_node3.3.1 Setting dimensions for 1D gridded model
    n_up3.3.1 Setting dimensions for 1D gridded model

    O
    obspha(.,.)4.3.3 Executing code after the analysis

    P
    Phi_tef(.)3.9.2 Entering the model equations, with explicit sizes
    principal3.2.2 Calling the model subroutine

    S
    set_dwn_etaLimiting conditions
    set_dwn_phiLimiting conditions
    set_etaModel equations
    set_node_etaGrid node equations
    set_node_PhiGrid node equations
    set_PhiModel equations
    set_up_etaLimiting conditions
    set_up_phiLimiting conditions

    T
    tau_B_ini4.4.1 Specifying the Borel sweep
    tau_B_mult4.4.1 Specifying the Borel sweep
    time2.2.2 Entering model equation and parameters

    V
    var:Model equations
    vobs(.)3.8.2 Data
    vobs(.)4.3.2.1 Feeding the observations to the model

    Z
    zback4.2.3 Cost function coding and adjoint modeling
    ZBorel4.4.1 Specifying the Borel sweep
    zborel for4.4.1 Specifying the Borel sweep
    zcommand4.2.2 Control laws
    zgetobs3.8.2 Data
    zgetobs4.3.2.1 Feeding the observations to the model
    zkalman4.3.1 Coding the Kalman filter
    zlaw4.2.2 Control laws
    zprint2.4.2 Controlling the printout and data output

    Jump to:   A   B   C   D   E   F   H   I   K   M   N   O   P   S   T   V   Z  

    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/Simulation-and-output.html0000644000175000017500000000361411264347121027352 0ustar flichtenheldflichtenheld Miniker 102 manual: Simulation and output

    The node you are looking for is at Simulation and output.

    texi2html-1.82/test/manuals/res/mini_ker/Specifying-the-Borel-sweep.html0000644000175000017500000000361611264347121030172 0ustar flichtenheldflichtenheld Miniker 102 manual: Specifying the Borel sweep

    The node you are looking for is at Specifying the Borel sweep.

    texi2html-1.82/test/manuals/res/mini_ker/Linking-rule.html0000644000175000017500000001237011264347121025467 0ustar flichtenheldflichtenheld Miniker 102 manual: 5.3 Linking rule
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    5.3 Linking rule

    The rule used for the linking of the model file is not in the ‘Makefile.miniker’ file but should be provided in the user ‘Makefile’ for more flexibility. The default rule uses the variables miniker_user_objects for additional object files and LDADD for additionnal linking flags and files, those variables are there to be changed by the user.

    The object files required by the Miniker code are in the make variable miniker_principal_objects, this variable is also used. The value of the variables FC for the Fortran compiler, FFLAGS for the Fortran compiler flags and LDFLAGS for the linker flags should be set to right values; LIBS should also be right and hold the link flags and link files required to compile the Miniker model. These variables are set by by ./configure during configuration (see Configuration) and used in the default rule:

    $(model_file): $(miniker_user_objects) $(miniker_principal_objects)
    	$(FC) $(FFLAGS) $(LDFLAGS) $^ $(LDADD) $(LIBS) -o $@
    

    In case this isn’t right it may be freely changed. You should certainly refer to the (make)Top section ‘Top’ in GNU Make Manual manual to understand what that rule exactly means and make your own.


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/Copying-This-Manual.html0000644000175000017500000001011111264347121026646 0ustar flichtenheldflichtenheld Miniker 102 manual: C. Copying This Manual
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    C. Copying This Manual


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/Sensitivity-of-cost-function-to-parameters.html0000644000175000017500000000402011264347121033426 0ustar flichtenheldflichtenheld Miniker 102 manual: Sensitivity of cost function to parameters

    The node you are looking for is at Sensitivity of cost function to parameters.

    texi2html-1.82/test/manuals/res/mini_ker/Double-precision.html0000644000175000017500000001166211264347121026335 0ustar flichtenheldflichtenheld Miniker 102 manual: 3.4 Double precision
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    3.4 Double precision

    The default for real variables is the real Fortran type. It is possible to use double precision instead. In that case all the occurences of ‘real ’ in mortran code is substituted with ‘double precision ’ at precompilation stage, and the Lapack subroutine names are replaced by the double precision names. Eventual users’declaration of complex  Fortran variables is also changed to double complex .

    This feature is turned on by sel double in ‘selseq.kumac’ with cmz and double = 1 in the ‘Makefile’ with make.

    In order for the model to run as well in double as in simple precision, some care should be taken to use the generic intrinsic functions, like sin and not dsin. No numerical constant should be passed directly to subroutines or functions, but instead a variable with the right type should be used to hold the constant value, taking advantage of the implicit casts to the variable type.


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/mini_ker_tex4ht_math.aux0000644000175000017500000000000011264347121027051 0ustar flichtenheldflichtenheldtexi2html-1.82/test/manuals/res/mini_ker/Size-sequence.html0000644000175000017500000000351411264347121025647 0ustar flichtenheldflichtenheld Miniker 102 manual: Size sequence

    The node you are looking for is at Size sequence.

    texi2html-1.82/test/manuals/res/mini_ker/mini_ker_abt.html0000644000175000017500000001204111264347121025545 0ustar flichtenheldflichtenheld Miniker 102 manual: About This Document
    [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/Programming-with-cmz-directives.html0000644000175000017500000002156711264347121031320 0ustar flichtenheldflichtenheld Miniker 102 manual: 3.10 Programming with cmz directives
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    3.10 Programming with cmz directives


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    3.10.1 Cmz directives used with Miniker

    The main feature of cmz directive is to use code conditionnaly for a given select flag. For example when the double precision is selected (see Double precision) the use of the conditionnal double flag may be required in case there is a different subroutine name for different types. If, for example, the user use the subroutine smysub for simple precision and dmysub for double precision the following code is an example of what could appear in the user code:

    +IF,double
     call dmysub(eta);
    +ELSE
     call smysub(eta);
    +ENDIF
    

    For a complete reference on cmz directives see the appendix Cmz directives reference.


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    3.10.2 Using cmz directives in Miniker

    In cmz the KEEP and DECK have their cmz directives preprocessed as part of the source files extraction. And the +KEEP and +DECK directives are automatically set when creating the KEEP or DECK. With make, files with these directives has to be created within the files that are to be preprocessed by the cmz directives preprocessor.

    To be processed by make, a file that contains cmz directives should have a file suffix corresponding with the language of the resulting file and with the normal file suffix of that language. More precisely ‘cm’ should be added before the normal file suffix and after the ‘.’. Therefore if the resulting file language is associated with a suffix ‘.suf’, the file with cmz directives should have a ‘.cmsuf’ suffix. The tradition is to have a different suffix for main files and include files. To add directories searched for cmfiles (files with cmz directives) they should be added to the CMFDIRS makefile variable, separated by ‘:’.

    Rules for preprocessing of the files are defined in the file ‘Makefile.miniker’ for the file types described in tab:cmfile_suffix:

    languagefile typecmfile suffixsuffixlanguage
    fortranmain/deck.cmf.fftn
    fortran preprocessedmain/deck.cmF.Ff77
    fortran preprocessedinclude/keep.cminc.incf77
    mortranmain/deck.cmmtn.mtnmtn
    mortraninclude/keep.cmmti.mtimtn

    table 3.2: Association between file language, file type, file suffixes and language identifier in cmz directives. A main file is called a deck in cmz and an include file is called a keep.


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/Common-requisites.html0000644000175000017500000001220711264347121026551 0ustar flichtenheldflichtenheld Miniker 102 manual: A.2 Common requisites
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    A.2 Common requisites

    Whatever method is used a fortran 77 compiler is required. The compilers that have been used so far are g77, gfortran and the sun solaris compiler.

    When usng CMZ, the CERN Program Library, available at http://wwwasd.web.cern.ch/wwwasd/cernlib/, has to be installed. With make, internal source files copied from the cernlib may be used instead but then some examples won’t be available, since they rely on some mathematical functions provided by the CERN library. On windows, in case you want to use the compiler from the GNU compiler collection with cygwin or MINGW/MSYS you can use the binaries provided at http://zyao.home.cern.ch/zyao/cernlib.html. On Mac OS X, the cernlib provided by fink (package cernlib-devel) can be used.

    You should also have LAPACK, available at http://www.netlib.org/lapack/. LAPACK can also be installed as part of the CERN Library or as part of the http://math-atlas.sourceforge.net/ implementation. On most linux distributions a lapack package is available. On Mac OS X, the ATLAS implementation provided by fink or the frameworks from Xcode can be used.


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/Dynamic-system-analysis.html0000644000175000017500000001605611264347121027663 0ustar flichtenheldflichtenheld Miniker 102 manual: 4. Dynamic analysis of systems in Miniker
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    4. Dynamic analysis of systems in Miniker


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/The-self-directive.html0000644000175000017500000001063411264347121026553 0ustar flichtenheldflichtenheld Miniker 102 manual: B.6 The self directive
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    B.6 The ‘self’ directive

    The self directive is an obsolete directive that may be used for conditionnal skipping of code. For a better approach see Conditional directives. The optionnal argument of +SELF is If= followed by a conditionnal expression. If the conditionnal expression is true the code following the directive is output, if it is false the code is skipped up to any directive (including another +SELF) except +seq.


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/mini_ker_tex4ht_math.tp0000644000175000017500000000000011264347121026677 0ustar flichtenheldflichtenheldtexi2html-1.82/test/manuals/res/mini_ker/mini_ker_tex4ht_tex.lg0000644000175000017500000001011511264347121026535 0ustar flichtenheldflichtenheldhtfcss: cmmi font-style: italic; htfcss: cmmib font-style: italic; font-weight: bold; File: mini_ker_tex4ht_tex.html File: mini_ker_tex4ht_tex.css File: mini_ker_tex4ht_tex.tmp Css: p.noindent { text-indent: 0em } Css: td p.noindent { text-indent: 0em; margin-top:0em; } Css: p.nopar { text-indent: 0em; } Css: p.indent{ text-indent: 1.5em } Css: @media print {div.crosslinks {visibility:hidden;}} Css: a img { border-top: 0; border-left: 0; border-right: 0; } Font_Css("4"): .small-caps{font-variant: small-caps; } Font_Css("10"): .htf-cmbx {font-weight: bold; font-style:normal;} Font_Css("12"): .htf-calligraphy {font-family:cursive} Font_Css("14"): .htf-italic {font-style: italic;} Font_Css("16"): .htf-bold {font-weight: bold;} Font_Css("12"): .htf-calligraphy-bold {font-family:cursive ; font-weight: bold; } Css: center { margin-top:1em; margin-bottom:1em; } Css: td center { margin-top:0em; margin-bottom:0em; } Css: .Canvas { position:relative; } Css: img.math{vertical-align:middle;} Css: .obeylines-h,.obeylines-v {white-space: nowrap; } Css: div.obeylines-v p { margin-top:0; margin-bottom:0; } Css: .overline{ text-decoration:overline; } Css: .overline img{ border-top: 1px solid black; } Css: td.displaylines {text-align:center; white-space:nowrap;} Css: .centerline {text-align:center;} Css: .rightline {text-align:right;} Css: span.TEX {letter-spacing: -0.125em; } Css: span.TEX span.E{ position:relative;top:0.5ex;left:-0.0417em;} Css: a span.TEX span.E {text-decoration: none; } Css: .underline{ text-decoration:underline; } Css: .underline img{ border-bottom: 1px solid black; margin-bottom:1pt; } Css: div.proclaim { margin-top: 1em; margin-bottom: 1em; } Css: p.item {text-indent:-2em; margin-left:2em;} Css: p.itemitem {text-indent:-2em; margin-left:4em;} Css: span.item, span.itemitem {width:2em; margin-right:0.4em;} Css: td.eqalign3 { text-align:right; margin-left:10em;} Css: .eqalign td { white-space: nowrap; } Css: div.eqalign {text-align:center;} Css: td.eqalignno3, td.leqalignno3 { text-align:right; margin-left:10em;} Css: .leqalignno td, .eqalignno td { white-space: nowrap; } Css: .leqalignno td.noalign, .eqalignno td.noalign { width:5%; white-space: normal; } Css: table.leqalignno, table.eqalignno {width:100%;} Css: img.cdots{vertical-align:middle;} Css: div.pmatrix {text-align:center;} Css: table.pmatrix {width:100%;} --- needs --- mini_ker_tex4ht_tex.idv[1] ==> mini_ker_tex4ht_tex0x.png --- --- needs --- mini_ker_tex4ht_tex.idv[2] ==> mini_ker_tex4ht_tex1x.png --- --- needs --- mini_ker_tex4ht_tex.idv[3] ==> mini_ker_tex4ht_tex2x.png --- --- needs --- mini_ker_tex4ht_tex.idv[4] ==> mini_ker_tex4ht_tex3x.png --- --- needs --- mini_ker_tex4ht_tex.idv[5] ==> mini_ker_tex4ht_tex4x.png --- --- needs --- mini_ker_tex4ht_tex.idv[6] ==> mini_ker_tex4ht_tex5x.png --- --- needs --- mini_ker_tex4ht_tex.idv[7] ==> mini_ker_tex4ht_tex6x.png --- --- needs --- mini_ker_tex4ht_tex.idv[8] ==> mini_ker_tex4ht_tex7x.png --- --- needs --- mini_ker_tex4ht_tex.idv[9] ==> mini_ker_tex4ht_tex8x.png --- --- needs --- mini_ker_tex4ht_tex.idv[10] ==> mini_ker_tex4ht_tex9x.png --- --- needs --- mini_ker_tex4ht_tex.idv[11] ==> mini_ker_tex4ht_tex10x.png --- --- needs --- mini_ker_tex4ht_tex.idv[12] ==> mini_ker_tex4ht_tex11x.png --- --- needs --- mini_ker_tex4ht_tex.idv[13] ==> mini_ker_tex4ht_tex12x.png --- --- needs --- mini_ker_tex4ht_tex.idv[14] ==> mini_ker_tex4ht_tex13x.png --- --- needs --- mini_ker_tex4ht_tex.idv[15] ==> mini_ker_tex4ht_tex14x.png --- --- needs --- mini_ker_tex4ht_tex.idv[16] ==> mini_ker_tex4ht_tex15x.png --- --- needs --- mini_ker_tex4ht_tex.idv[17] ==> mini_ker_tex4ht_tex16x.png --- --- needs --- mini_ker_tex4ht_tex.idv[18] ==> mini_ker_tex4ht_tex17x.png --- --- needs --- mini_ker_tex4ht_tex.idv[19] ==> mini_ker_tex4ht_tex18x.png --- --- needs --- mini_ker_tex4ht_tex.idv[20] ==> mini_ker_tex4ht_tex19x.png --- --- needs --- mini_ker_tex4ht_tex.idv[21] ==> mini_ker_tex4ht_tex20x.png --- --- characters --- Font("cmr","10","10","100") Font("cmr","7","7","100") Font("cmmi","10","10","100") Font("cmmi","7","7","100") Font("cmsy","10","10","100") Font("cmsy","7","7","100") Font("cmex","10","10","100") texi2html-1.82/test/manuals/res/mini_ker/Miniker-with-cmz.html0000644000175000017500000001062111264347121026262 0ustar flichtenheldflichtenheld Miniker 102 manual: A.3 Miniker with cmz
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    A.3 Miniker with cmz

    First of all you have to get the cmz file ‘mini_ker.cmz’ and put it in a directory. In that same directory you should create a directory for each of your models. In the model directory you should copy the file ‘selseq.kumac’ available with Miniker, and create your own cmz file for your model, called for example ‘mymodel.cmz’. You should also have installed the kumac macro files handling mortan compilation, the associated shell scripts and the mortran preprocessor.


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/1D-gridded-model-code.html0000644000175000017500000000357411264347121027007 0ustar flichtenheldflichtenheld Miniker 102 manual: 1D gridded model code

    The node you are looking for is at 1D gridded model code.

    texi2html-1.82/test/manuals/res/mini_ker/Data.html0000644000175000017500000000343211264347121023777 0ustar flichtenheldflichtenheld Miniker 102 manual: Data

    The node you are looking for is at Data.

    texi2html-1.82/test/manuals/res/mini_ker/Borel-sweep-results.html0000644000175000017500000000354411264347121027015 0ustar flichtenheldflichtenheld Miniker 102 manual: Borel sweep results

    The node you are looking for is at Borel sweep results.

    texi2html-1.82/test/manuals/res/mini_ker/Advance-matrix-sensitivity.html0000644000175000017500000000361611264347121030365 0ustar flichtenheldflichtenheld Miniker 102 manual: Advance matrix sensitivity

    The node you are looking for is at Advance matrix sensitivity.

    texi2html-1.82/test/manuals/res/mini_ker/mini_ker_fot.html0000644000175000017500000001347111264347121025577 0ustar flichtenheldflichtenheld Miniker 102 manual: Footnotes
    [Contents] [Index] [ ? ]

    Footnotes

    (1)

    In fact the variables names are transformed into fortran array elements by mortran generated macros, so the symbolic names defined in the mortran blocks never appears in the generated fortran code, they are replaced by the fortran arrays.

    (2)

    dres.data’ has another time related variable as second column: dt, the time step that can vary in the course of a simulation.

    (3)

    This naming is a joke for “Inert” Heaviside function.

    (4)

    fun_set, or equivalently f_set, is a general mortran macro associating a symbol with a fortran expression. Here, it is the name of the symbol (eta) that has a particular meaning for the building of the model.

    (5)

    For a short introduction to automatic sensitivity analysis, see the document:
    http://lmd.jussieu.fr/zoom/doc/sensibilite.ps, in French, or ask for the more complete research document to a member of the TEF-ZOOM collaboration

    (6)

    General Tangent Linear System, i.e. the TLS circulating along a trajectory. See the explanation in the document http://www.lmd.jussieu.fr/Zoom/doc/Adjoint.pdf (in French).

    (7)

    For detailed explanation of the adjoint model, see the document in pdf or .ps.gz

    (8)

    More generally, the Borel sweep allows the numerical study of the dependency in τ of the Borel transform of various coefficients in the system coupling matrix.

    (9)

    Explanation in the research paper about SLTC (Al1 2003) available on request.

    (10)

    cf our research texts about propagator analyses in SLTC, and “les Gains sur champs (Al1 2003-2004)”


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/A-model-with-Miniker.html0000644000175000017500000001361111264347121026751 0ustar flichtenheldflichtenheld Miniker 102 manual: 2. Miniker model programming
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    2. Miniker model programming

    Miniker works by combining the model specification code given by the user and other source files provided in the package. The code is assembled, preprocessed, compiled, linked and the resulting program can be run to produce the model trajectory and dynamic analysis.

    The code provided in the package contains a principal program, some usefull subroutines and pieces of code called sequences combined with the different codes. Among these sequences some hold the code describing the model and are to be written by the user (sequences are similar to Fortran include files).


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/Configuration.html0000644000175000017500000000351011264347121025732 0ustar flichtenheldflichtenheld Miniker 102 manual: Configuration

    The node you are looking for is at Configuration.

    texi2html-1.82/test/manuals/res/mini_ker/Graphics.html0000644000175000017500000000347611264347121024676 0ustar flichtenheldflichtenheld Miniker 102 manual: Graphics

    The node you are looking for is at Graphics.

    texi2html-1.82/test/manuals/res/mini_ker/Structure-of-the-code.html0000644000175000017500000001177311264347121027225 0ustar flichtenheldflichtenheld Miniker 102 manual: 2.1 General structure of the code
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    2.1 General structure of the code

    The sequences used to enter model description hold the mathematical formulae for each cell and transfer component, dedicated derived computations, and time-step steering. During the code generation stage, cmz directives are preprocessed, then the user pseudo-Fortran instructions are translated by mortran using macros designed to generate in particular all Fortran instructions that compute the Jacobian matrices used in TEF modelling.

    The sequence ‘zinit’ contains the mathematical formulation of the model (see Entering model equation and parameters). Another sequence, ‘zsteer’, is merged at the end of the time step advance of the simulation, where the user can monitor the time step values and printing levels, and perform particular computations etc. (see Executing code at the end of each time step).


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/1D-gridded-Model-size.html0000644000175000017500000000357411264347121027007 0ustar flichtenheldflichtenheld Miniker 102 manual: 1D gridded Model size

    The node you are looking for is at 1D gridded Model size.

    texi2html-1.82/test/manuals/res/mini_ker/Selecting-features.html0000644000175000017500000001416211264347121026661 0ustar flichtenheldflichtenheld Miniker 102 manual: 3.1 Overview of additional features setting
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    3.1 Overview of additional features setting

    It is possible to enable some features by selecting which code should be part of the principal program. Each of these optionnal features are associated with a select flag. For example double precision is used instead of simple precision with the ‘double’ select flag, the model is a subroutine with the select flag ‘monitor’, the Kalman filter code is set with ‘kalman’ and the 1D gridded model capabilities are associated with ‘grid1d’. To select a given feature the cmz statement sel select_flag should be written down in the ‘selseq.kumac’ found in the model directory. With make either the corresponding variable should be set to 1 or it should be added to the SEL make variable, depending on the feature.

    Other features don’t need different or additional code to be used. Most of the features are enabled by setting specific logical variables to ‘.true.’. This is the case for zback for the adjoint model, zcommand if the command is in a file and zlaw if it is a function and zkalman for the Kalman filter. These select and logical flags are described in the corresponding sections.

    In cmz an alternative of writing select flags to ‘selseq.kumac’ is to drive the compilation with smod sel_flag. In that case the sel_flag is selected and the files and executable goes to a directory named ‘sel_flag’.

    The select flags are taken into account during cmz directives preprocessing. Therefore you have the possibility to use these flags to conditionnaly include pieces of code. In most cases you don’t need to include code conditionally yourself though, but if you want to, this is covered in Programming with cmz directives.


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/Kalman-filter.html0000644000175000017500000005371711264347121025627 0ustar flichtenheldflichtenheld Miniker 102 manual: 4.3 Kalman filter
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    4.3 Kalman filter

    The Kalman filter allows for data assimilation along the model run. In that case it is assumed that there is a real-world model with stochastic perturbations on the states, and that noisy observations are available. The situation implemented in Miniker corresponds to a continuous stochastic perturbation on the state, and discrete noisy observations. In the TEF this leads to:

    ∂tη(t) = g(η(t),φ(t))+ W (t)μ
 φ (t) = f (η(t),φ (t))

 ω (t) = h (η(t),φ (t))+ ν

    The observations ω are available at discrete time steps t = si. The stochastic perturbation on state, μ is characterized by a variance-covariance matrix Q and the noise on the observation, ν has a variance-covariance matrix R. W relates states with stochastic perturbations. At each time step the Kalman filter recomputes an estimation of the state and the variance-covariance matrix of the state.

    In the following we use the example of a linear model with perturbation on state and observation of state. The model has 3 states and 3 corresponding transfers (equal to the states), but the error on the state is of dimension 2. The 3 states are observed. The corresponding equations read:

    (
|{ ∂tη1 = a11η1 + a12φ2 + a13φ3 + W11 μ1 + W12μ2
| ∂tη2 = a21φ1 + a22η2 + a23φ3 + W21 μ1 + W22μ2
( ∂tη3 = a31φ1 + a32φ2 + a33η3 + W31 μ1 + W32μ2
    (
|{ φ1 = η1
  φ2 = η2
|( φ  = η
   3    3
    (
|{ ω1 = φ1 + ν1
  ω = η  + ν
|(  2   2   2
  ω3 = η3 + ν3


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    4.3.1 Coding the Kalman filter

    First of all the Kalman filter code should be activated. The observations code is also required (see Observations). If cmz is used the code should be selected with the select flag kalman in the ‘selseq.kumac’:

     
    sel kalman
    

    With make the kalman variable should be set to 1:

     
    kalman = 1
    

    The kalman code is actually used by setting the flag zkalman to .true., for example in the ‘zinit’:

     
    zkalman = .True.;
    

    With the Kalman filter the dimension of estimated states, of the error on the state and of the observation, the W matrix, the observation function, the initial variance-covariance matrices on the state and the variance-covariance matrices of errors have to be given.


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    4.3.1.1 Kalman filter vectors dimensions

    These dimensions should be set in the ‘zinit’ sequence. The size of the estimated states is given by the parameter nkp. You can set this to np if all the states are estimated, but in case there are some deterministic state variables, nkp may be less than np. In that case the first nkp elements of eta(.) will be estimated using the Kalman filter.

    The error on state dimension is associated with the parameter nerrp and the size of the observations vector is mobs (see Observations). In our example the dimensions are set with:

     
    parameter (nkp=np);
    parameter (mobs=3);
    parameter (nerrp=2);
    

    All the states are estimated, there are 3 observation functions and the error on the state vector is of dimension 2.

    If the sizes are set explicitely, the parameters should be set in ‘dimetaphi’.


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    4.3.1.2 Error and observation matrices

    Initial variance-covariance matrix on the state

    The variance-covariance on the state matrix is covfor(.,.). The initial values have to be given for this matrix, as in our example:

     
    covfor(1,1) = 1000.; covfor(1,2) = 10.; covfor(1,3) = 10.;
    covfor(2,1) = 10.; covfor(2,2) = 5000.; covfor(2,3) = 5.;
    covfor(3,1) = 10.; covfor(3,2) = 5.; covfor(3,3) = 2000.;
    

    This matrix is updated by the filter at each time step because the states are pertubated by some noise, and when assimilation takes place as new information reduce the error.

    Observations and error on state matrix

    The matrix that relates errors on states vector components to states, corresponding with W is mereta(.,.). In our example it is set by:

     
    mereta(1,1) = 1.;  mereta(1,2) = 0.;
    mereta(2,1) = 0.;  mereta(2,2) = 1.;
    mereta(3,1) = 0.5;  mereta(3,2) = 0.5;
    

    The observation functions are set by a f_set macro with Obs_tef(.) as described in Observations. In our example the observation functions are set by:

     
    f_set Obs_tef(1) = ff(1) ;
    f_set Obs_tef(2) = eta(2);
    f_set Obs_tef(3) = eta(3);
    

    Error variance-covariance matrices

    The variance-covariance matrix on observation noise is covobs(.,.) set, in our example, by:

     
    covobs(1,1) = 0.3; covobs(1,2) = 0.; covobs(1,3) = 0.;
    covobs(2,1) = 0.; covobs(2,2) = 0.1; covobs(2,3) = 0.;
    covobs(3,1) = 0.; covobs(3,2) = 0.; covobs(3,3) = 0.2;
    

    The variance-covariance matrix on state noise is coveta(.,.) set, in our example, by:

     
    coveta(1,1) = 0.2; coveta(1,2) = 0.001;
    coveta(2,1) = 0.001; coveta(2,2) = 0.1;
    

    These matrices are not changed during the run of the model as part of the filtering process. They may be changed by the user in ‘zsteer’.


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    4.3.2 Kalman filter run and output


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    4.3.2.1 Feeding the observations to the model

    The observations must be made available to the model during the run. These observations are set in the vobs(.) array, and the assimilation (also called the analysis step of the filter) takes place if the logical variable zgetobs is .true. (see Data).

    These steps are typically performed in the ‘zsteer’ sequence. In this sequence there should be some code such that when there are data ready to be assimilated, zgetobs is set to .true. and the data is stored in vobs(.), ready for the next step processing.


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    4.3.2.2 Kalman filter results

    The estimated states and transfers are still in the same ‘.data’ files, ‘res.data’ and ‘tr.data’ and there is the additional file with observations, called ‘obs.data’ (see Observations). Each time zgetobs is .true. the data, and the optimally weighted innovations are output in the file associated with data, ‘data.data’ (see Data).


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    4.3.3 Executing code after the analysis

    The analysis takes place before the time step advance when zgetobs is .true.. It may be usefull to add some code after the analysis and before the time step advance. For example the analysis may lead to absurd values for some states or parameters, it could be usefull to correct them in that case. The sequence included after the analysis is called ‘kalsteer’. At this point, in addition to the usual variables the following variables could be usefull:

    etafor(.)

    The state before the analysis.

    kgain(.)

    The Kalman gain.

    innobs(.)

    The innovation vector (observations coherent with the states minus data values).

    covana(.,.)

    The variance-covariance error matrix after the analysis.

    At each time step the derivative of the observation function with respect to transfer and cells variables are recomputed. The elimination of transfers is also performed to get the partial derivative of the observation function of the equivalent model, with states only, with respect to the states. In other words, the Kalman filter does not follow the TEF formalism, because the advance of the var-covar matrix could not yet be set in the TEF form.

    obspha(.,.)

    derivative of observation function in state space with respect to cell variables.


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/Cmz-directives-used-with-Miniker.html0000644000175000017500000000372611264347121031327 0ustar flichtenheldflichtenheld Miniker 102 manual: Cmz directives used with Miniker

    The node you are looking for is at Cmz directives used with Miniker.

    texi2html-1.82/test/manuals/res/mini_ker/Model-with-explicit-size.html0000644000175000017500000000361611264347121027732 0ustar flichtenheldflichtenheld Miniker 102 manual: Model with explicit size

    The node you are looking for is at Model with explicit size.

    texi2html-1.82/test/manuals/res/mini_ker/Calling-the-model-code.html0000644000175000017500000002434411264347121027270 0ustar flichtenheldflichtenheld Miniker 102 manual: 3.2 Calling the model code
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    3.2 Calling the model code

    When the model code is a subroutine, it can be called from another fortran program unit (or another program), and the model will be run each time the subroutine is called. This technique could be used, for example to perform optimization (see Adjoint model and optimisation with Miniker), or to run the model with different parameters.


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    3.2.1 Turning the model into a subroutine

    With cmz, one has to do a

     
    sel monitor
    

    in the ‘selseq.kumac’ file and create the KEEP that call the model code. See Overview of additional features setting.

    With make ‘monitor’ should be added to the SEL variable in the ‘Makefile’, for example:

     
    SEL = monitor
    

    A file that call the principal subroutine should also be written, using the prefered language of the user. The additional object files should then be linked with the Miniker objects. To that aim they may be added to the miniker_user_objects variable.


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    3.2.2 Calling the model subroutine

    The model subroutine is called ‘principal’ and is called with the following arguments:

    Subroutine: principal (Cost, ncall, integer_flag, file_suffix, info, idxerror)

    Where Cost is a real number, real or double precision, and is set by the principal subroutine. It holds the value of the cost function if such function has been defined (the use and setting of a cost function is covered later, see Cost function coding and adjoint modeling). ncall is an integer which corresponds with the number of call to principal done so far, it should be initialized to 0 and its value should not be changed, as it is changed in the principal subroutine. integer_flag is an integer that can be set by the user to be accessed in the principal subroutine. For example its value could be used to set some flags in the ‘zinit’ sequence. file_suffix is a character string, that is suffixed to the output files names instead of ‘.data’. If the first character is the null character ‘char(0)’, the default suffix, ‘.data’ is appended. info and idxerror are integer used for error reporting. idxerror value is 0 if there was no error. It is negative for an alert, positive for a very serious error. The precise value determines where the error occured. info is an integer holding more precise information about the error. It is usually the information value from lapack. The precise meaning of these error codes is in tab:error_codes.

    Source of error or warninginfoidxerror
    state matrix inversion in kerinversion1
    time advance system resolution in kersystem2
    transfer propagator, (I - D) inversioninversion3
    kalman analysis state matrix advance in phase space, (I - D) inversioninversion21
    kalman analysis variance covariance matrix non positiveCholeski22
    kalman analysis error matrix inversioninversion23
    kalman error matrix advancesystem24
    transfers determination linearity problem for transfers-1
    transerts determination Newton D_loop does not converge-2

    table 3.1: Meaning of error codes returned by principal.

    In general more information than the provided arguments has to be passed to the principal subroutine, in that case a common block, to be written in the ‘zinit’ sequence can be used.


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/tab_003aerror_005fcodes.html0000644000175000017500000000355611264347121027250 0ustar flichtenheldflichtenheld Miniker 102 manual: tab:error_codes

    The node you are looking for is at tab:error_codes.

    texi2html-1.82/test/manuals/res/mini_ker/Controlling-the-printout-and-data-output.html0000644000175000017500000000375611264347121033076 0ustar flichtenheldflichtenheld Miniker 102 manual: Controlling the printout and data output

    The node you are looking for is at Controlling the printout and data output.

    texi2html-1.82/test/manuals/res/mini_ker/Rule-of-programming-non-continuous-models.html0000644000175000017500000001513611264347121033240 0ustar flichtenheldflichtenheld Miniker 102 manual: 3.6 Rule of programming non continuous models
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    3.6 Rule of programming non continuous models

    Some models may originally be non continuous, as the ones using a Fortran instruction IF. Some may use implicitly a step function on a variable. In such cases, the model has to be set in a derivable form, and use a “smooth step” instead. One should be aware of that this apparently mathematical treatment currently indeed leads to a physical question about the macroscopic form of a physical law. At a macroscipic level, a step function is usually a nonsense. Taking the example of phase-change, a fluid volume does not change phase at once, and a “smooth change of state” is a correct macroscopic model.

    Miniker provides with the smooth step function Heavyside(3) in the Miniker ‘mathlib’:

     
            Delta = -1."K";
            A_Ice =  heavyside("in:" (T_K-Tf), Delta, "out:" dAIce_dT);
    

    in this example, Tf is the ice fusion-temperature, A_ice gives the ice-fraction of the mesh-volume of water at temperature T_k. The smooth-step function is a quasi hyperbolic tangent function of x∕Δ, normalised from 0 to 1, with a maximum slope of 2.5, see figure heavy.

    heavyside

    Figure 3.1: Heaviside function and derivative

    For Mortran to be able to symbolicaly compute the partial derivarives, the rule is in the table of macros as:

     
    &'(HEAVYSIDE(#,#,#))(/#)' = '((#1)(/#4)*HEAVYDELTA(#1,#2,#3))'
    

    which uses the Foratn entry point HeavyDelta in the Fortrsan function heavyside.

    Another type of problem arises when coding a var=min(f(x),g(x)) Fortran instruction. In such a case one does not want a derivative and one will code:

     
    var = HeavySide(f(x)-g(x),Delta,dum)*g(x) + (1.-HeavySide(f(x)-g(x),Delta,dum)*f(x);
    

    or equivalently:

     
    var = HeavySide(f(x)-g(x),Delta,dum)*g(x) + HeavySide(g(x)-f(x),-Delta,dum)*f(x);
    

    Warning: the value of the argument Delta is important because it will fix the maximum slope of the function that will appear as a coefficient in the Jacbian matrices.


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/Feedback-gain.html0000644000175000017500000003032011264347121025522 0ustar flichtenheldflichtenheld Miniker 102 manual: 4.4 Feedback gain
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    4.4 Feedback gain

    The feedback dynamic gain associated with a feedback loop can be expressed as the inverse Borel transform of the coefficient of the reduced scalar coupling matrix, g(τ), associated with a transfer. A Borel sweep provides this g(τ). Therefore it is an interesting tool for the characterization of the feedback loop(8).

    As explained in the ZOOM web page document http://www.lmd.jussieu.fr/ZOOM/doc/Feedback_Gain.pdf, this allows for the calculation of the dynamic gain and factor of any feedback that goes through a unique transfer variable. An example of the conclusions that can be drawn from such an analysis is provided in the same document.

    For linear systems – whose GTLS are autonomous along the whole trajectory – the τ function of the feedback gain is independent of the position on the system trajectory. But in general it is dependant, and one can analyse the function g(τ;t) defined on a segment t of the trajectory.

    The document introducing the TEF-ZOOM technique explains how a Crank-Nicolson scheme for the time discretisation symbolically gives the solution of the Borel transform of the system. One can identify the dt variable with the Borel τ within a factor 2 . Hence, to numerically study the τ dependency of the transform of various coefficients in the system coupling matrix at one point in time, one can calculate the Borel transform of the TLS solutions by making a time-step sweep.

    The function g(τ;t) is simply output for the feedback gain attached to a unique ff(k) transfer variable. All the relevant informations should be entered in the ‘zinit’ sequence.


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    4.4.1 Specifying the Borel sweep

    First of all the logical flag ZBorel should be raised:

     
    ZBorel=.true.;
    

    The index of the studied transfer is given in the index_ff_gain variable

     
    index_ff_gain=7;
    

    At each time step a Borel sweep may be performed. The time steps of interest are specified with three variables, one for the first step, one for the last step and one for the number of steps between two Borel sweeps:

    istep_B_deb

    First time step for the Borel sweep.

    istep_B_fin

    Last time step for the Borel sweep.

    istep_B_inc

    Number of time steps between Borel sweeps.

    In the following examples Borel sweeps are performed from the time step 1000 up to the time step 1200, with a sweep at each time step:

     
    istep_B_deb=1000;   
    istep_B_fin=1200;  
    istep_B_inc=1;      
    

    For each Borel sweep, the range of the τ variable should be set. As this is a multiplicative variable the initial value, a multiplicative factor and the number of values are to be given.

    tau_B_ini

    Initial value for τ.

    tau_B_mult

    Multiplicative factor for sweep in tau.

    itau_max

    Number of τ values.

    For example, in the following, at each time step, the Borel transform will be computed for τ values starting at 0.2 and then multiplied a hundred times by ∘ __√ _2

     
    tau_B_ini=0.2;    
    tau_B_mult=sqrt(sqrt(2.)); 
    itau_max=100;             
    

    When the initial value of τ is set to a negative value (i.e. tau_B_ini=-0.2;), the Borel sweep will first be applied with itau_max negative values for -0.2, tau_B_mult*(-0.2),..., then for the zero value, and finally for the symetric positive values, resulting in 2*itau_max+1 values for τ.

    The whole example reads

     
    ! -------------------
    ! Feedback gain
    ! Borel
    ! -------------------
    ZBorel=.true.;
    if ZBorel           
    <  istep_B_deb=1000; 
       istep_B_fin=1200;
       istep_B_inc=1;  
    ;
       index_ff_gain=7; 
       tau_B_ini=0.2;    
       tau_B_mult=sqrt(sqrt(2.)); 
       itau_max=100;             
       z_pr/Borel/:tau_B_mult,tau_B_ini*(tau_B_mult)**itau_max;
    >;
    

    Instead of using the index of the transfer in index_ff_gain it is possible to specify the name of the transfer.In that case the transfer is specified by the zborel for macro. For example if the transfer selected for the feedback gain computation is b_transfer, it can be selected with:

     
    zborel for: b_transfer;
    

    [ < ] [ > ]   [Contents] [Index] [ ? ]

    4.4.2 Borel sweep results

    The file ‘tau_Borel.data’ gives the τ values of the tau sweep, and the file ‘gains.data’ records the feedback gain function values of g(τ), with one line for each sweep along the trajectory. In the 1.01 version, a new feature is also provided giving the poles and residuals of the Borel transform in the file ‘vpgains.data’. Consult the subroutine Boreleig for (not definitive) output description.

    One can easily obtain the surface contours of g(t,τ) using the Fortran program provided as ‘gains.f’ and its compilation shell ‘gains.xqt’, that builds 2D histograms for PAW, in which one uses the ‘borels.kumac’ provided kumac.


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/Feeding-the-observations.html0000644000175000017500000000360211264347121027760 0ustar flichtenheldflichtenheld Miniker 102 manual: Feeding the observations

    The node you are looking for is at Feeding the observations.

    texi2html-1.82/test/manuals/res/mini_ker/mini_ker_tex4ht_tex.xref0000644000175000017500000000006111264347121027076 0ustar flichtenheldflichtenheld\:CrossWord{)F1F-}{mini_ker_tex4ht_tex.html}{1}% texi2html-1.82/test/manuals/res/mini_ker/GNU-Free-Documentation-License.html0000644000175000017500000005730511264347121030635 0ustar flichtenheldflichtenheld Miniker 102 manual: C.1 GNU Free Documentation License
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    C.1 GNU Free Documentation License

    Version 1.1, March 2000

     
    Copyright © 2000 Free Software Foundation, Inc.
    59 Temple Place, Suite 330, Boston, MA  02111-1307, USA
    
    Everyone is permitted to copy and distribute verbatim copies
    of this license document, but changing it is not allowed.
    
    1. PREAMBLE

      The purpose of this License is to make a manual, textbook, or other written document free in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.

      This License is a kind of “copyleft”, which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.

      We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

    2. APPLICABILITY AND DEFINITIONS

      This License applies to any manual or other work that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. The “Document”, below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as “you”.

      A “Modified Version” of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.

      A “Secondary Section” is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document’s overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (For example, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.

      The “Invariant Sections” are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License.

      The “Cover Texts” are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License.

      A “Transparent” copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, whose contents can be viewed and edited directly and straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup has been designed to thwart or discourage subsequent modification by readers is not Transparent. A copy that is not “Transparent” is called “Opaque”.

      Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML designed for human modification. Opaque formats include PostScript, PDF, proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML produced by some word processors for output purposes only.

      The “Title Page” means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, “Title Page” means the text near the most prominent appearance of the work’s title, preceding the beginning of the body of the text.

    3. VERBATIM COPYING

      You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.

      You may also lend copies, under the same conditions stated above, and you may publicly display copies.

    4. COPYING IN QUANTITY

      If you publish printed copies of the Document numbering more than 100, and the Document’s license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.

      If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.

      If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access to download anonymously at no charge using public-standard network protocols. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.

      It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

    5. MODIFICATIONS

      You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

      1. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.
      2. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has less than five).
      3. State on the Title page the name of the publisher of the Modified Version, as the publisher.
      4. Preserve all the copyright notices of the Document.
      5. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
      6. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.
      7. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document’s license notice.
      8. Include an unaltered copy of this License.
      9. Preserve the section entitled “History”, and its title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section entitled “History” in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.
      10. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the “History” section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.
      11. In any section entitled “Acknowledgments” or “Dedications”, preserve the section’s title, and preserve in the section all the substance and tone of each of the contributor acknowledgments and/or dedications given therein.
      12. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.
      13. Delete any section entitled “Endorsements”. Such a section may not be included in the Modified Version.
      14. Do not retitle any existing section as “Endorsements” or to conflict in title with any Invariant Section.

      If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version’s license notice. These titles must be distinct from any other section titles.

      You may add a section entitled “Endorsements”, provided it contains nothing but endorsements of your Modified Version by various parties—for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.

      You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.

      The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.

    6. COMBINING DOCUMENTS

      You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice.

      The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.

      In the combination, you must combine any sections entitled “History” in the various original documents, forming one section entitled “History”; likewise combine any sections entitled “Acknowledgments”, and any sections entitled “Dedications”. You must delete all sections entitled “Endorsements.”

    7. COLLECTIONS OF DOCUMENTS

      You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.

      You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

    8. AGGREGATION WITH INDEPENDENT WORKS

      A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, does not as a whole count as a Modified Version of the Document, provided no compilation copyright is claimed for the compilation. Such a compilation is called an “aggregate”, and this License does not apply to the other self-contained works thus compiled with the Document, on account of their being thus compiled, if they are not themselves derivative works of the Document.

      If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one quarter of the entire aggregate, the Document’s Cover Texts may be placed on covers that surround only the Document within the aggregate. Otherwise they must appear on covers around the whole aggregate.

    9. TRANSLATION

      Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English version will prevail.

    10. TERMINATION

      You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

    11. FUTURE REVISIONS OF THIS LICENSE

      The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.

      Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License “or any later version” applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    C.1.1 ADDENDUM: How to use this License for your documents

    To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:

     
      Copyright (C)  year  your name.
      Permission is granted to copy, distribute and/or modify this document
      under the terms of the GNU Free Documentation License, Version 1.1
      or any later version published by the Free Software Foundation;
      with the Invariant Sections being list their titles, with the
      Front-Cover Texts being list, and with the Back-Cover Texts being list.
      A copy of the license is included in the section entitled ``GNU
      Free Documentation License''.
    

    If you have no Invariant Sections, write “with no Invariant Sections” instead of saying which ones are invariant. If you have no Front-Cover Texts, write “no Front-Cover Texts” instead of “Front-Cover Texts being list”; likewise for Back-Cover Texts.

    If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/The-model-subroutine.html0000644000175000017500000000357411264347121027150 0ustar flichtenheldflichtenheld Miniker 102 manual: The model subroutine

    The node you are looking for is at The model subroutine.

    texi2html-1.82/test/manuals/res/mini_ker/Introduction.html0000644000175000017500000001263511264347121025614 0ustar flichtenheldflichtenheld Miniker 102 manual: Introduction
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    Introduction

    Miniker is a modeling tool, built especially in order to implement models written following the TEF (Transfer Evolution Formalism) formalism, a mathematical framework for system analysis and simulation. Miniker allows for timewise simulation, system analysis, adjoint computation, Kalman filtering and more.

    Miniker uses a fortran preprocessor, mortran, designed in the 1970’s, to ease model writing using dedicated specific languages. For example partial derivatives are symbolicaly determined by mortran macros in Miniker. For the selection of another compile-time features, another set of preprocessor directives, the cmz directives, are used. In most cases the user does not need to know anything about that preprocessing that occurs behind the scene, he simply writes down the equations of his model and he is done.

    A comprehensive description of the TEF formalism in available on http://www.lmd.jussieu.fr/ZOOM/doc/tef-GB-partA5.pdf). The Miniker software is a reduced version of ZOOM, that can only handle a hundreds of variables, but is much easier to use.


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/Kalman-filter-vectors-dimensions.html0000644000175000017500000000366211264347121031452 0ustar flichtenheldflichtenheld Miniker 102 manual: Kalman filter vectors dimensions

    The node you are looking for is at Kalman filter vectors dimensions.

    texi2html-1.82/test/manuals/res/mini_ker/Make-variables.html0000644000175000017500000001555311264347121025760 0ustar flichtenheldflichtenheld Miniker 102 manual: 5.1 Make variables
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    5.1 Make variables

    The ‘Makefile.miniker’ Makefile provided in the distribution should be included as it defines a lot of important variables and rules.

    The following make variables can be set by the user:

    miniker_dir

    that variable should hold the Miniker sources directory. If you installed Miniker that variable should be set to ‘$(includedir)/mini_ker’. If you use the sources right from the sources directory it should be set to the sources package directory.

    MTNDIRS

    This variable can hold a ‘:’ delimited list of directories that will be searched for mortran include files.

    CMFDIRS

    This variable can hold a ‘:’ delimited list of directories that will be searched for cmz directive include files.

    SEL

    This variable holds a ‘,’ delimited list of select flags, for example monitor, grid1d, debug.

    LDADD

    This variable can be used to add libraries flags and files. It is used in the default linking command/rule.

    miniker_user_objects

    This variable should hold a space separated list of additional object files to be linked with the model and helper object files.

    CAR2TXTFLAGS

    cmz directives preprocessor flag.

    kalman

    This variable should be set to 1 if you want to use the kalman filter (see Kalman filter).

    double

    This variable should be set to 1 if you want to have a double precision code (see Double precision).

    The following variables are allready set and may be used (some are set by ./configure see Configuration):

    miniker_principal_objects

    The list of object files needed for the model build, together with some helper object files often used but not strictly required for the linking.

    DEPDIR

    The name of a hidden directory containing the dependencies computed for the main mortran files.

    F77
    FC
    FFLAGS
    LDFLAGS

    Compiler and linker related variables set by ./configure.

    LIBS

    This variable should hold the link flags and files required to build Miniker, set by ./configure.

    CAR2TXT
    MORTRAN
    MTNFLAGS
    MTNDEPEND

    Preprocessor and preprocessor flags, set by ./configure.


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/Title-file.html0000644000175000017500000000347211264347121025130 0ustar flichtenheldflichtenheld Miniker 102 manual: Title file

    The node you are looking for is at Title file.

    texi2html-1.82/test/manuals/res/mini_ker/Coding-the-Kalman-filter.html0000644000175000017500000000360211264347121027572 0ustar flichtenheldflichtenheld Miniker 102 manual: Coding the Kalman filter

    The node you are looking for is at Coding the Kalman filter.

    texi2html-1.82/test/manuals/res/mini_ker/mini_ker_tex4ht_math.pg0000644000175000017500000000000011264347121026662 0ustar flichtenheldflichtenheldtexi2html-1.82/test/manuals/res/mini_ker/Error-and-observation-matrices.html0000644000175000017500000000364611264347121031124 0ustar flichtenheldflichtenheld Miniker 102 manual: Error and observation matrices

    The node you are looking for is at Error and observation matrices.

    texi2html-1.82/test/manuals/res/mini_ker/mini_ker_tex4ht_math.ky0000644000175000017500000000000011264347121026677 0ustar flichtenheldflichtenheldtexi2html-1.82/test/manuals/res/mini_ker/Observations-and-data.html0000644000175000017500000002033211264347121027251 0ustar flichtenheldflichtenheld Miniker 102 manual: 3.8 Observations and data
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    3.8 Observations and data

    Some support for observations and interactions with data is available. The observations are functions of the model variables. They don’t have any action on the model result, but they may (in theory) be observed and measured. The natural use of these observations is to be compared with data that correspond with the values from real measurements. They are used in the Kalman filter (see Kalman filter).

    The (model) observation vector is noted ω and the observation function is noted h:

    ω = h(η,φ )


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    3.8.1 Observations

    The observation functions are set in a set_probe block in the ‘zinit’ sequence.

    For example suppose that, in the predator-prey model, we only have access to the total population of preys and predators, we would have:

     
    set_probe
    < eqn: pop = eta_pred + eta_pray;
    >;
    

    The number of observations is put in the integer variable mobs. The observation vector corresponds with the part of the ff(.) array situated past the regular transferts, ff(mp+.), and is output in the file ‘obs.data’.


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    3.8.2 Data

    Currently this code is only used if the Kalman code is activated. This may be changed in the future.

    The convention for data is that whenever some data are available, the logical variable zgetobs should be set to ‘.true.’. And the vobs(.) vector should be filled with the data values. This vector has the same dimension than the observation vector and each coordinate is meant to correspond with one coordinate of the observation vector.

    This feature is turned on by setting the logical variable zdata to ‘.true.’, and the zgetobs flag is typically set in the ‘zsteer’ sequence (see Executing code at the end of each time step). Every instant data are available (zgetobs is true) the observations are written to the file ‘data.data’. With the Kalman filter more informations are output to the ‘data.data’ file, see Kalman filter results.


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/SVD-with-cmz.html0000644000175000017500000000352411264347121025324 0ustar flichtenheldflichtenheld Miniker 102 manual: SVD with cmz

    The node you are looking for is at SVD with cmz.

    texi2html-1.82/test/manuals/res/mini_ker/Linearization-and-discretization.html0000644000175000017500000001253211264347121031530 0ustar flichtenheldflichtenheld Miniker 102 manual: 1.2 Linearization and discretization in the TEF
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    1.2 Linearization and discretization in the TEF

    The relations between sub-systems is excessively difficult to exhibit when having to cope with non-linear system. In the TEF, the TLS (Tangent Linear System) is constructed along the trajectory. One considers the system over a small portion along the trajectory, say between t and t + δt. The variation δη of η and δφ of φ is obtained through a Padé approximation of the state-transition matrix. The final form of the algebraic system is closed to the classical Crank-Nicolson scheme:

    (            )(    )   (  )
   A     B      δη      Γ
 - C+  I - D    δφ   =  Ω

    The blocks appearing in the Jacobian matrix are constructed with partial derivative of f and g, and with δt. From this system the elimination of δη leads to another formulation giving the coupling between transfers, and allows for the δφ computation. The δφ value is then substitued in δη to complete the time-step solving process.


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/mini_ker_tex4ht_math.fn0000644000175000017500000000000011264347121026657 0ustar flichtenheldflichtenheldtexi2html-1.82/test/manuals/res/mini_ker/End-of-time-step.html0000644000175000017500000000353611264347121026150 0ustar flichtenheldflichtenheld Miniker 102 manual: End of time step

    The node you are looking for is at End of time step.

    texi2html-1.82/test/manuals/res/mini_ker/tab_003acmfile_005fsuffix.html0000644000175000017500000000361411264347121027560 0ustar flichtenheldflichtenheld Miniker 102 manual: tab:cmfile_suffix

    The node you are looking for is at tab:cmfile_suffix.

    texi2html-1.82/test/manuals/res/mini_ker/File-inclusion-directive.html0000644000175000017500000001354011264347121027763 0ustar flichtenheldflichtenheld Miniker 102 manual: B.5 File inclusion directive
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    B.5 File inclusion directive

    The file (sequence) inclusion directive is seq. The argument of seq is an include files ‘,’ separated list. The include files are Keep in cmz. The following optional arguments may be mixed:

    conditional

    A conditionnal is introduced by IF= followed by a conditionnal expression described in Conditional expressions. The directive is ignored if the conditionnal expression is false.

    T=noinclude

    When this argument is present the text of the sequence will always be included in the file where the +seq appears.

    When there is no T=noinclude argument, the +seq directive may be replaced with an inclusion command suitable for the language of the file being processed, if such command has been specified.

    For example if we have the following sequence

    +KEEP,inc,lang=C
    typedef struct incstr {char* msg};
    

    And the following code in the file being processed:

    +DECK,mainf,lang=C
    +SEQ,inc
    int main (int argc, char* argv) { exit(0); }
    

    the processing of ‘mainf’ should lead to the file ‘mainf.c’, containing an include command for ‘inc’:

    #include "inc.h"
    int main (int argc, char* argv) { exit(0); }
    

    In case the +seq has the T=noinclude:

    +DECK,mainf,lang=C
    +SEQ,inc,T=noinclude
    int main (int argc, char* argv) { exit(0); }
    

    The processing of ‘mainf’ should lead to the file ‘mainf.c’ containing the text of ‘inc’:

    typedef struct incstr {char* msg};
    int main (int argc, char* argv) { exit(0); }
    

    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/Cmz-directives-general-syntax.html0000644000175000017500000001075411264347121030762 0ustar flichtenheldflichtenheld Miniker 102 manual: B.1 Cmz directives general syntax
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    B.1 Cmz directives general syntax

    The cmz directives always begin with a ‘+’ in the first column, optionnaly followed by any number of ‘_’ that may be used for indentation, then the directive label, case insensitive, followed by the directive arguments separated by ‘,’. The arguments are also case insensitive. Optional spaces may be around directive arguments. An optionnal ‘.’ ends the directive arguments and begin a comment, everything that follows that ‘.’ is ignored.


    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/Controlling-the-run.html0000644000175000017500000002641511264347121027006 0ustar flichtenheldflichtenheld Miniker 102 manual: 2.4 Controlling the run
    [ < ] [ > ]   [Contents] [Index] [ ? ]

    2.4 Controlling the run

    It is possible to add code that will be executed at the end of each time step. It is also possible to specify which time step leads to a printout on standard output. For maximal control, the code running te model may be turned into a subroutine to be called from another fortran (or C) program, this possibility is covered in Calling the model code.


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    2.4.1 Executing code at the end of each time step

    The code in the sequence ‘zsteer’ is executed at the end of each time step. It is possible to change the time step length (variable dt) verify that the non linearity are not too big, or perform discontinuous modifications of the states. One available variable res might be usefull for time step monitoring. At the end of the time step, as soon as φ has been computed, a numerical test is applied on a pseudo relative quadratic residual between φ = f(η(t - dt) + dφ ( ffl), where dφ is given by the system resolution in ker,and φ = f(η),φ) , Fortran variable (ff):

    ! ========================================================
    ! test linearite ffl - ff
    ! ========================================================
    if (istep.gt.1)
    < res=0.; <io=1,m; res = res +(ffl(io)-ff(io))**2/max(one,ff(io)*ff(io)); >;
      if (res .gt. TOL_FFL)
      < print*,'*** pb linearite : res > TOL_FFL a istep',istep,res,' > ',TOL_FFL;
        do io=1,m < z_pr: io,ff(io),ff(io)-ffl(io); >;
      >;
    >;
    

    This test hence applies only for non linearities in tranfer models. Nevertheless, res might be usefull to monitor the time step dt in ZSTEER and eventually go backward one step (goto :ReDoStep:). This can more appropriatly be coded in the (empty in default case) sequence zstep, inserted just before time-advancing states and time variables in ‘principal’.

    It is also possible to fix the value of the criterium TOL_FFL in ‘zinit’ different from its default value of 10-3 – independent of the Fortran precision.

    Many other variables are available, including

    istep

    The step number;

    couplage(.)

    The TEF coupling matrix between transfers;

    H

    The Jacobian matrix corresponding with:

    ∂ηg(η(t),φ(t));

    Bb

    The Jacobian matrix corresponding with:

    ∂φg(η(t),φ(t));

    Bt

    The Jacobian matrix corresponding with:

    ∂ηf(η(t),φ(t));

    D

    The Jacobian matrix corresponding with:

    ∂φf(η(t),φ(t));

    aspha

    The state advance matrix;

    dneta
    dphi

    the variable increments;

    One should be aware of that the linearity test concerns the preceding step. We have yet no example of managing the time-step.


    [ < ] [ > ]   [Contents] [Index] [ ? ]

    2.4.2 Controlling the printout and data output

    The printout on standard output is performed if the variable zprint of type logical is true. Therefore it is possible to control this printout by setting zprint false or true. For example the following code, in sequence ‘zsteer’, triggers printing for every modzprint time step and the two following time steps:

     
    ZPRINT = mod(istep+1,modzprint).eq.0;
    Zprint = zprint .or. mod(istep+1,modzprint).eq.1;
    Zprint = zprint .or. mod(istep+1,modzprint).eq.2;
    

    The data output to ‘.data’ files described in Running a simulation and using the output is performed if the logical variable zout is true. For example the following code, in ‘zsteer’, triggers output to ‘.data’ files every modzout step.

     
    Zout = mod(istep,modzout).eq.0;
    

    [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/manuals/res/mini_ker/Kalman-filter-run-and-output.html0000644000175000017500000000363211264347121030516 0ustar flichtenheldflichtenheld Miniker 102 manual: Kalman filter run and output

    The node you are looking for is at Kalman filter run and output.

    texi2html-1.82/test/manuals/res/mini_ker/Model-equations.html0000644000175000017500000000353011264347121026173 0ustar flichtenheldflichtenheld Miniker 102 manual: Model equations

    The node you are looking for is at Model equations.

    texi2html-1.82/test/manuals/res/ccvs_mediawiki/0000755000175000017500000000000011264347121023422 5ustar flichtenheldflichtenheldtexi2html-1.82/test/manuals/res/ccvs_mediawiki/cvs: Index0000644000175000017500000044247111264347121025276 0ustar flichtenheldflichtenheld
    |[cvs: Dealing with bugs in CVS or this manual#BUGS < ]| [ > ]   |[cvs: Dealing with bugs in CVS or this manual#BUGS << ]| |[[cvs#Top| Up ]]| [ >> ]         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[[#Index|Index]]| |[cvs: About this Manual#SEC_About ? ]|
    == Index ==
    Jump to: [[#Index-1_cp_symbol-1|!]] [[#Index-1_cp_symbol-2|#]] [[#Index-1_cp_symbol-3|&]] [[#Index-1_cp_symbol-4|-]] [[#Index-1_cp_symbol-5|.]] [[#Index-1_cp_symbol-6|/]] [[#Index-1_cp_symbol-7|:]] [[#Index-1_cp_symbol-8|<]] [[#Index-1_cp_symbol-9|=]] [[#Index-1_cp_symbol-10|>]] [[#Index-1_cp_symbol-11|_]] [[#Index-1_cp_letter-A|A]] [[#Index-1_cp_letter-B|B]] [[#Index-1_cp_letter-C|C]] [[#Index-1_cp_letter-D|D]] [[#Index-1_cp_letter-E|E]] [[#Index-1_cp_letter-F|F]] [[#Index-1_cp_letter-G|G]] [[#Index-1_cp_letter-H|H]] [[#Index-1_cp_letter-I|I]] [[#Index-1_cp_letter-J|J]] [[#Index-1_cp_letter-K|K]] [[#Index-1_cp_letter-L|L]] [[#Index-1_cp_letter-M|M]] [[#Index-1_cp_letter-N|N]] [[#Index-1_cp_letter-O|O]] [[#Index-1_cp_letter-P|P]] [[#Index-1_cp_letter-R|R]] [[#Index-1_cp_letter-S|S]] [[#Index-1_cp_letter-T|T]] [[#Index-1_cp_letter-U|U]] [[#Index-1_cp_letter-V|V]] [[#Index-1_cp_letter-W|W]] [[#Index-1_cp_letter-X|X]] [[#Index-1_cp_letter-Z|Z]]
    Index Entry Section

    !
    [cvs: Reference manual for Administrative files#index-_0021_002c-in-modules-file !, in modules file][cvs: Reference manual for Administrative files#Excluding-directories Excluding directories]

    #
    [cvs: Multiple developers#index-_0023cvs_002elock_002c-removing #cvs.lock, removing][cvs: Multiple developers#Concurrency Several developers simultaneously attempting to run CVS]
    [cvs: The Repository#index-_0023cvs_002elock_002c-technical-details #cvs.lock, technical details][cvs: The Repository#Locks CVS locks in the repository]
    [cvs: The Repository#index-_0023cvs_002erfl_002c-and-backups #cvs.rfl, and backups][cvs: The Repository#Backing-up Backing up a repository]
    [cvs: Multiple developers#index-_0023cvs_002erfl_002c-removing #cvs.rfl, removing][cvs: Multiple developers#Concurrency Several developers simultaneously attempting to run CVS]
    [cvs: The Repository#index-_0023cvs_002erfl_002c-technical-details #cvs.rfl, technical details][cvs: The Repository#Locks CVS locks in the repository]
    [cvs: The Repository#index-_0023cvs_002etfl #cvs.tfl][cvs: The Repository#Locks CVS locks in the repository]
    [cvs: Multiple developers#index-_0023cvs_002ewfl_002c-removing #cvs.wfl, removing][cvs: Multiple developers#Concurrency Several developers simultaneously attempting to run CVS]
    [cvs: The Repository#index-_0023cvs_002ewfl_002c-technical-details #cvs.wfl, technical details][cvs: The Repository#Locks CVS locks in the repository]

    &
    [cvs: Reference manual for Administrative files#index-_0026_002c-in-modules-file &, in modules file][cvs: Reference manual for Administrative files#Ampersand-modules Ampersand modules]

    -
    [cvs: Reference manual for Administrative files#index-_002da_002c-in-modules-file -a, in modules file][cvs: Reference manual for Administrative files#Alias-modules Alias modules]
    [cvs: Reference manual for Administrative files#index-_002dd_002c-in-modules-file -d, in modules file][cvs: Reference manual for Administrative files#Module-options Module options]
    [cvs: Reference manual for Administrative files#index-_002de_002c-in-modules-file -e, in modules file][cvs: Reference manual for Administrative files#Module-options Module options]
    [cvs: Reference manual for Administrative files#index-_002de_002c-in-modules-file-1 -e, in modules file][cvs: Reference manual for Administrative files#Module-program-options How the modules file “program options” programs are run]
    [cvs: Branching and merging#index-_002dj-_0028merging-branches_0029 -j (merging branches)][cvs: Branching and merging#Merging-a-branch Merging an entire branch]
    [cvs: Branching and merging#index-_002dj-_0028merging-branches_0029_002c-and-keyword-substitution -j (merging branches), and keyword substitution][cvs: Branching and merging#Merging-and-keywords Merging and keywords]
    [cvs: Keyword substitution#index-_002dk-_0028keyword-substitution_0029 -k (keyword substitution)][cvs: Keyword substitution#Substitution-modes Substitution modes]
    [cvs: Branching and merging#index-_002dkk_002c-to-avoid-conflicts-during-a-merge -kk, to avoid conflicts during a merge][cvs: Branching and merging#Merging-and-keywords Merging and keywords]
    [cvs: Reference manual for Administrative files#index-_002do_002c-in-modules-file -o, in modules file][cvs: Reference manual for Administrative files#Module-options Module options]
    [cvs: Reference manual for Administrative files#index-_002do_002c-in-modules-file-1 -o, in modules file][cvs: Reference manual for Administrative files#Module-program-options How the modules file “program options” programs are run]
    [cvs: Reference manual for Administrative files#index-_002ds_002c-in-modules-file -s, in modules file][cvs: Reference manual for Administrative files#Module-options Module options]
    [cvs: Reference manual for Administrative files#index-_002dt_002c-in-modules-file -t, in modules file][cvs: Reference manual for Administrative files#Module-options Module options]
    [cvs: Reference manual for Administrative files#index-_002dt_002c-in-modules-file-1 -t, in modules file][cvs: Reference manual for Administrative files#Module-program-options How the modules file “program options” programs are run]

    .
    [cvs: Guide to CVS commands#index-_002e_0023-files .# files][cvs: Guide to CVS commands#update-output update output]
    [cvs: The Repository#index-_002ebashrc_002c-setting-CVSROOT-in .bashrc, setting CVSROOT in][cvs: The Repository#Specifying-a-repository Telling CVS where your repository is]
    [cvs: The Repository#index-_002ecshrc_002c-setting-CVSROOT-in .cshrc, setting CVSROOT in][cvs: The Repository#Specifying-a-repository Telling CVS where your repository is]
    [cvs: Guide to CVS commands#index-_002ecvsrc-file .cvsrc file][cvs: Guide to CVS commands#g_t_007e_002f_002ecvsrc Default options and the ~/.cvsrc file]
    [cvs: The Repository#index-_002eprofile_002c-setting-CVSROOT-in .profile, setting CVSROOT in][cvs: The Repository#Specifying-a-repository Telling CVS where your repository is]
    [cvs: The Repository#index-_002etcshrc_002c-setting-CVSROOT-in .tcshrc, setting CVSROOT in][cvs: The Repository#Specifying-a-repository Telling CVS where your repository is]

    /
    [cvs: The Repository#index-_002fusr_002flocal_002fcvsroot_002c-as-example-repository /usr/local/cvsroot, as example repository][cvs: The Repository#Repository The Repository]

    :
    [cvs: The Repository#index-_003aext_003a_002c-setting-up :ext:, setting up][cvs: The Repository#Connecting-via-rsh Connecting with rsh]
    [cvs: Troubleshooting#index-_003aext_003a_002c-troubleshooting :ext:, troubleshooting][cvs: Troubleshooting#Connection Trouble making a connection to a CVS server]
    [cvs: The Repository#index-_003afork_003a_002c-setting-up :fork:, setting up][cvs: The Repository#Connecting-via-fork Connecting with fork]
    [cvs: The Repository#index-_003agserver_003a_002c-setting-up :gserver:, setting up][cvs: The Repository#GSSAPI-authenticated Direct connection with GSSAPI]
    [cvs: The Repository#index-_003akserver_003a_002c-setting-up :kserver:, setting up][cvs: The Repository#Kerberos-authenticated Direct connection with kerberos]
    [cvs: The Repository#index-_003alocal_003a_002c-setting-up :local:, setting up][cvs: The Repository#Repository The Repository]
    [cvs: The Repository#index-_003apserver_003a_002c-setting-up :pserver:, setting up][cvs: The Repository#Password-authentication-client Using the client with password authentication]
    [cvs: Troubleshooting#index-_003apserver_003a_002c-troubleshooting :pserver:, troubleshooting][cvs: Troubleshooting#Connection Trouble making a connection to a CVS server]
    [cvs: The Repository#index-_003aserver_003a_002c-setting-up :server:, setting up][cvs: The Repository#Connecting-via-rsh Connecting with rsh]
    [cvs: Troubleshooting#index-_003aserver_003a_002c-troubleshooting :server:, troubleshooting][cvs: Troubleshooting#Connection Trouble making a connection to a CVS server]

    <
    [cvs: Multiple developers#index-_003c_003c_003c_003c_003c_003c_003c <<<<<<<][cvs: Multiple developers#Conflicts-example Conflicts example]

    =
    [cvs: Multiple developers#index-_003d_003d_003d_003d_003d_003d_003d =======][cvs: Multiple developers#Conflicts-example Conflicts example]

    >
    [cvs: Multiple developers#index-_003e_003e_003e_003e_003e_003e_003e >>>>>>>][cvs: Multiple developers#Conflicts-example Conflicts example]

    _
    [cvs: Guide to CVS commands#index-_005f_005f-files-_0028VMS_0029 __ files (VMS)][cvs: Guide to CVS commands#update-output update output]

    A
    [cvs: Multiple developers#index-Abandoning-work Abandoning work][cvs: Multiple developers#Editing-files How to edit a file which is being watched]
    [cvs: Branching and merging#index-Access-a-branch Access a branch][cvs: Branching and merging#Accessing-branches Accessing branches]
    [cvs: Adding, removing, and renaming files and directories#index-add-_0028subcommand_0029 add (subcommand)][cvs: Adding, removing, and renaming files and directories#Adding-files Adding files to a directory]
    [cvs: Revisions#index-Adding-a-tag Adding a tag][cvs: Revisions#Tags Tags–Symbolic revisions]
    [cvs: Adding, removing, and renaming files and directories#index-Adding-files Adding files][cvs: Adding, removing, and renaming files and directories#Adding-files Adding files to a directory]
    [cvs: Guide to CVS commands#index-Admin-_0028subcommand_0029 Admin (subcommand)][cvs: Guide to CVS commands#admin admin—Administration]
    [cvs: The Repository#index-Administrative-files-_0028intro_0029 Administrative files (intro)][cvs: The Repository#Intro-administrative-files The administrative files]
    [cvs: Reference manual for Administrative files#index-Administrative-files-_0028reference_0029 Administrative files (reference)][cvs: Reference manual for Administrative files#Administrative-files Reference manual for Administrative files]
    [cvs: The Repository#index-Administrative-files_002c-editing-them Administrative files, editing them][cvs: The Repository#Editing-administrative-files Editing administrative files]
    [cvs: Reference manual for Administrative files#index-Alias-modules Alias modules][cvs: Reference manual for Administrative files#Alias-modules Alias modules]
    [cvs: Reference manual for Administrative files#index-ALL-in-commitinfo ALL in commitinfo][cvs: Reference manual for Administrative files#commitinfo Commitinfo]
    [cvs: Reference manual for Administrative files#index-Ampersand-modules Ampersand modules][cvs: Reference manual for Administrative files#Ampersand-modules Ampersand modules]
    [cvs: History browsing#index-annotate-_0028subcommand_0029 annotate (subcommand)][cvs: History browsing#annotate Annotate command]
    [cvs: Multiple developers#index-Atomic-transactions_002c-lack-of Atomic transactions, lack of][cvs: Multiple developers#Concurrency Several developers simultaneously attempting to run CVS]
    [cvs: The Repository#index-Attic Attic][cvs: The Repository#Attic The attic]
    [cvs: The Repository#index-Authenticated-client_002c-using Authenticated client, using][cvs: The Repository#Password-authentication-client Using the client with password authentication]
    [cvs: The Repository#index-Authenticating-server_002c-setting-up Authenticating server, setting up][cvs: The Repository#Password-authentication-server Setting up the server for password authentication]
    [cvs: Guide to CVS commands#index-Authentication_002c-stream Authentication, stream][cvs: Guide to CVS commands#Global-options Global options]
    [cvs: Keyword substitution#index-Author-keyword Author keyword][cvs: Keyword substitution#Keyword-list Keyword List]
    [cvs: Reference manual for Administrative files#index-Automatically-ignored-files Automatically ignored files][cvs: Reference manual for Administrative files#cvsignore Ignoring files via cvsignore]
    [cvs: Guide to CVS commands#index-Avoiding-editor-invocation Avoiding editor invocation][cvs: Guide to CVS commands#Common-options Common command options]

    B
    [cvs: The Repository#index-Backing-up_002c-repository Backing up, repository][cvs: The Repository#Backing-up Backing up a repository]
    [cvs: The Repository#index-Base-directory_002c-in-CVS-directory Base directory, in CVS directory][cvs: The Repository#Working-directory-storage How data is stored in the working directory]
    [cvs: Revisions#index-BASE_002c-as-reserved-tag-name BASE, as reserved tag name][cvs: Revisions#Tags Tags–Symbolic revisions]
    [cvs: Guide to CVS commands#index-BASE_002c-special-tag BASE, special tag][cvs: Guide to CVS commands#Common-options Common command options]
    [cvs: The Repository#index-Baserev-file_002c-in-CVS-directory Baserev file, in CVS directory][cvs: The Repository#Working-directory-storage How data is stored in the working directory]
    [cvs: The Repository#index-Baserev_002etmp-file_002c-in-CVS-directory Baserev.tmp file, in CVS directory][cvs: The Repository#Working-directory-storage How data is stored in the working directory]
    [cvs: How your build system interacts with CVS#index-Bill-of-materials Bill of materials][cvs: How your build system interacts with CVS#Builds How your build system interacts with CVS]
    [cvs: Handling binary files#index-Binary-files Binary files][cvs: Handling binary files#Binary-files Handling binary files]
    [cvs: Branching and merging#index-Branch-merge-example Branch merge example][cvs: Branching and merging#Merging-a-branch Merging an entire branch]
    [cvs: Revisions#index-Branch-number Branch number][cvs: Revisions#Revision-numbers Revision numbers]
    [cvs: Branching and merging#index-Branch-number-1 Branch number][cvs: Branching and merging#Branches-and-revisions Branches and revisions]
    [cvs: Revisions#index-Branch-tags_002c-deleting Branch tags, deleting][cvs: Revisions#Modifying-tags Deleting, moving, and renaming tags]
    [cvs: Revisions#index-Branch-tags_002c-moving Branch tags, moving][cvs: Revisions#Modifying-tags Deleting, moving, and renaming tags]
    [cvs: Branching and merging#index-Branch_002c-accessing Branch, accessing][cvs: Branching and merging#Accessing-branches Accessing branches]
    [cvs: Branching and merging#index-Branch_002c-check-out Branch, check out][cvs: Branching and merging#Accessing-branches Accessing branches]
    [cvs: Branching and merging#index-Branch_002c-creating-a Branch, creating a][cvs: Branching and merging#Creating-a-branch Creating a branch]
    [cvs: Branching and merging#index-Branch_002c-identifying Branch, identifying][cvs: Branching and merging#Accessing-branches Accessing branches]
    [cvs: Branching and merging#index-Branch_002c-retrieving Branch, retrieving][cvs: Branching and merging#Accessing-branches Accessing branches]
    [cvs: Tracking third-party sources#index-Branch_002c-vendor_002d Branch, vendor-][cvs: Tracking third-party sources#Tracking-sources Tracking third-party sources]
    [cvs: Branching and merging#index-Branches-motivation Branches motivation][cvs: Branching and merging#Branches-motivation What branches are good for]
    [cvs: Branching and merging#index-Branches_002c-copying-changes-between Branches, copying changes between][cvs: Branching and merging#Branching-and-merging Branching and merging]
    [cvs: Branching and merging#index-Branches_002c-sticky Branches, sticky][cvs: Branching and merging#Accessing-branches Accessing branches]
    [cvs: Branching and merging#index-Branching Branching][cvs: Branching and merging#Branching-and-merging Branching and merging]
    [cvs: Multiple developers#index-Bringing-a-file-up-to-date Bringing a file up to date][cvs: Multiple developers#Updating-a-file Bringing a file up to date]
    [cvs: Dealing with bugs in CVS or this manual#index-Bugs-in-this-manual-or-CVS Bugs in this manual or CVS][cvs: Dealing with bugs in CVS or this manual#BUGS Dealing with bugs in CVS or this manual]
    [cvs: Dealing with bugs in CVS or this manual#index-Bugs_002c-reporting Bugs, reporting][cvs: Dealing with bugs in CVS or this manual#BUGS Dealing with bugs in CVS or this manual]
    [cvs: How your build system interacts with CVS#index-Builds Builds][cvs: How your build system interacts with CVS#Builds How your build system interacts with CVS]

    C
    [cvs: Branching and merging#index-Changes_002c-copying-between-branches Changes, copying between branches][cvs: Branching and merging#Branching-and-merging Branching and merging]
    [cvs: Guide to CVS commands#index-Changing-a-log-message Changing a log message][cvs: Guide to CVS commands#admin-options admin options]
    [cvs: Branching and merging#index-Check-out-a-branch Check out a branch][cvs: Branching and merging#Accessing-branches Accessing branches]
    [cvs: Reference manual for Administrative files#index-Checked-out-copy_002c-keeping Checked out copy, keeping][cvs: Reference manual for Administrative files#Keeping-a-checked-out-copy Keeping a checked out copy]
    [cvs: Overview#index-Checking-out-source Checking out source][cvs: Overview#Getting-the-source Getting the source]
    [cvs: Guide to CVS commands#index-checkout-_0028subcommand_0029 checkout (subcommand)][cvs: Guide to CVS commands#checkout checkout—Check out sources for editing]
    [cvs: Reference manual for Administrative files#index-Checkout-program Checkout program][cvs: Reference manual for Administrative files#Module-options Module options]
    [cvs: Multiple developers#index-Checkout_002c-as-term-for-getting-ready-to-edit Checkout, as term for getting ready to edit][cvs: Multiple developers#Editing-files How to edit a file which is being watched]
    [cvs: Overview#index-Checkout_002c-example Checkout, example][cvs: Overview#Getting-the-source Getting the source]
    [cvs: Reference manual for Administrative files#index-checkoutlist checkoutlist][cvs: Reference manual for Administrative files#checkoutlist The checkoutlist file]
    [cvs: Multiple developers#index-Choosing_002c-reserved-or-unreserved-checkouts Choosing, reserved or unreserved checkouts][cvs: Multiple developers#Choosing-a-model Choosing between reserved or unreserved checkouts]
    [cvs: Overview#index-Cleaning-up Cleaning up][cvs: Overview#Cleaning-up Cleaning up]
    [cvs: The Repository#index-Client_002fServer-Operation Client/Server Operation][cvs: The Repository#Remote-repositories Remote repositories]
    [cvs: The Repository#index-Client_002fServer-Operation_002c-port-specification Client/Server Operation, port specification][cvs: The Repository#Remote-repositories Remote repositories]
    [cvs: The Repository#index-Client_002fServer-Operation_002c-port-specification-1 Client/Server Operation, port specification][cvs: The Repository#Password-authentication-server Setting up the server for password authentication]
    [cvs: Guide to CVS commands#index-co-_0028subcommand_0029 co (subcommand)][cvs: Guide to CVS commands#checkout checkout—Check out sources for editing]
    [cvs: Quick reference to CVS commands#index-Command-reference Command reference][cvs: Quick reference to CVS commands#Invoking-CVS Quick reference to CVS commands]
    [cvs: Guide to CVS commands#index-Command-structure Command structure][cvs: Guide to CVS commands#Structure Overall structure of CVS commands]
    [cvs: Guide to CVS commands#index-Comment-leader Comment leader][cvs: Guide to CVS commands#admin-options admin options]
    [cvs: Guide to CVS commands#index-commit-_0028subcommand_0029 commit (subcommand)][cvs: Guide to CVS commands#commit commit—Check files into the repository]
    [cvs: Reference manual for Administrative files#index-commitinfo ‘commitinfo’][cvs: Reference manual for Administrative files#commitinfo Commitinfo]
    [cvs: Reference manual for Administrative files#index-commitinfo_002c-command-environment ‘commitinfo’, command environment][cvs: Reference manual for Administrative files#commitinfo Commitinfo]
    [cvs: Reference manual for Administrative files#index-commitinfo_002c-working-directory ‘commitinfo’, working directory][cvs: Reference manual for Administrative files#commitinfo Commitinfo]
    [cvs: Reference manual for Administrative files#index-Commits_002c-precommit-verification-of Commits, precommit verification of][cvs: Reference manual for Administrative files#commitinfo Commitinfo]
    [cvs: Overview#index-Committing-changes-to-files Committing changes to files][cvs: Overview#Committing-your-changes Committing your changes]
    [cvs: Reference manual for Administrative files#index-Committing_002c-administrative-support-files Committing, administrative support files][cvs: Reference manual for Administrative files#commit-files The commit support files]
    [cvs: Revision management#index-Committing_002c-when-to Committing, when to][cvs: Revision management#When-to-commit When to commit?]
    [cvs: Guide to CVS commands#index-Common-options Common options][cvs: Guide to CVS commands#Common-options Common command options]
    [cvs: Reference manual for Administrative files#index-Common-syntax-of-info-files Common syntax of info files][cvs: Reference manual for Administrative files#syntax The common syntax]
    [cvs: Compatibility between CVS Versions#index-Compatibility_002c-between-CVS-versions Compatibility, between CVS versions][cvs: Compatibility between CVS Versions#Compatibility Compatibility between CVS Versions]
    [cvs: Guide to CVS commands#index-Compression Compression][cvs: Guide to CVS commands#Global-options Global options]
    [cvs: Quick reference to CVS commands#index-Compression-1 Compression][cvs: Quick reference to CVS commands#Invoking-CVS Quick reference to CVS commands]
    [cvs: All environment variables which affect CVS#index-COMSPEC_002c-environment-variable COMSPEC, environment variable][cvs: All environment variables which affect CVS#Environment-variables All environment variables which affect CVS]
    [cvs: Reference manual for Administrative files#index-config_002c-in-CVSROOT config, in CVSROOT][cvs: Reference manual for Administrative files#config The CVSROOT/config configuration file]
    [cvs: Keyword substitution#index-Configuring-keyword-expansion Configuring keyword expansion][cvs: Keyword substitution#Configuring-keyword-expansion Configuring Keyord Expansion]
    [cvs: Multiple developers#index-Conflict-markers Conflict markers][cvs: Multiple developers#Conflicts-example Conflicts example]
    [cvs: Multiple developers#index-Conflict-resolution Conflict resolution][cvs: Multiple developers#Conflicts-example Conflicts example]
    [cvs: Multiple developers#index-Conflicts-_0028merge-example_0029 Conflicts (merge example)][cvs: Multiple developers#Conflicts-example Conflicts example]
    [cvs: Overview#index-Contributors-_0028CVS-program_0029 Contributors (CVS program)][cvs: Overview#What-is-CVS_003f What is CVS?]
    [cvs: Credits#index-Contributors-_0028manual_0029 Contributors (manual)][cvs: Credits#Credits Credits]
    [cvs: The Repository#index-Copying-a-repository Copying a repository][cvs: The Repository#Moving-a-repository Moving a repository]
    [cvs: Branching and merging#index-Copying-changes Copying changes][cvs: Branching and merging#Branching-and-merging Branching and merging]
    [cvs: Guide to CVS commands#index-Correcting-a-log-message Correcting a log message][cvs: Guide to CVS commands#admin-options admin options]
    [cvs: Branching and merging#index-Creating-a-branch Creating a branch][cvs: Branching and merging#Creating-a-branch Creating a branch]
    [cvs: Starting a project with CVS#index-Creating-a-project Creating a project][cvs: Starting a project with CVS#Starting-a-new-project Starting a project with CVS]
    [cvs: The Repository#index-Creating-a-repository Creating a repository][cvs: The Repository#Creating-a-repository Creating a repository]
    [cvs: Overview#index-Credits-_0028CVS-program_0029 Credits (CVS program)][cvs: Overview#What-is-CVS_003f What is CVS?]
    [cvs: Credits#index-Credits-_0028manual_0029 Credits (manual)][cvs: Credits#Credits Credits]
    [cvs: Multiple developers#index-CVS-1_002e6_002c-and-watches CVS 1.6, and watches][cvs: Multiple developers#Watches-Compatibility Using watches with old versions of CVS]
    [cvs: Guide to CVS commands#index-CVS-command-structure CVS command structure][cvs: Guide to CVS commands#Structure Overall structure of CVS commands]
    [cvs: The Repository#index-CVS-directory_002c-in-repository CVS directory, in repository][cvs: The Repository#CVS-in-repository The CVS directory in the repository]
    [cvs: The Repository#index-CVS-directory_002c-in-working-directory CVS directory, in working directory][cvs: The Repository#Working-directory-storage How data is stored in the working directory]
    [cvs: The Repository#index-CVS-passwd-file CVS passwd file][cvs: The Repository#Password-authentication-server Setting up the server for password authentication]
    [cvs: Overview#index-CVS_002c-history-of CVS, history of][cvs: Overview#What-is-CVS_003f What is CVS?]
    [cvs: Overview#index-CVS_002c-introduction-to CVS, introduction to][cvs: Overview#What-is-CVS_003f What is CVS?]
    [cvs: Compatibility between CVS Versions#index-CVS_002c-versions-of CVS, versions of][cvs: Compatibility between CVS Versions#Compatibility Compatibility between CVS Versions]
    [cvs: The Repository#index-CVS_002fBase-directory CVS/Base directory][cvs: The Repository#Working-directory-storage How data is stored in the working directory]
    [cvs: The Repository#index-CVS_002fBaserev-file CVS/Baserev file][cvs: The Repository#Working-directory-storage How data is stored in the working directory]
    [cvs: The Repository#index-CVS_002fBaserev_002etmp-file CVS/Baserev.tmp file][cvs: The Repository#Working-directory-storage How data is stored in the working directory]
    [cvs: The Repository#index-CVS_002fEntries-file CVS/Entries file][cvs: The Repository#Working-directory-storage How data is stored in the working directory]
    [cvs: The Repository#index-CVS_002fEntries_002eBackup-file CVS/Entries.Backup file][cvs: The Repository#Working-directory-storage How data is stored in the working directory]
    [cvs: The Repository#index-CVS_002fEntries_002eLog-file CVS/Entries.Log file][cvs: The Repository#Working-directory-storage How data is stored in the working directory]
    [cvs: The Repository#index-CVS_002fEntries_002eStatic-file CVS/Entries.Static file][cvs: The Repository#Working-directory-storage How data is stored in the working directory]
    [cvs: The Repository#index-CVS_002fNotify-file CVS/Notify file][cvs: The Repository#Working-directory-storage How data is stored in the working directory]
    [cvs: The Repository#index-CVS_002fNotify_002etmp-file CVS/Notify.tmp file][cvs: The Repository#Working-directory-storage How data is stored in the working directory]
    [cvs: The Repository#index-CVS_002fRepository-file CVS/Repository file][cvs: The Repository#Working-directory-storage How data is stored in the working directory]
    [cvs: The Repository#index-CVS_002fRoot-file CVS/Root file][cvs: The Repository#Specifying-a-repository Telling CVS where your repository is]
    [cvs: The Repository#index-CVS_002fTag-file CVS/Tag file][cvs: The Repository#Working-directory-storage How data is stored in the working directory]
    [cvs: The Repository#index-CVS_002fTemplate-file CVS/Template file][cvs: The Repository#Working-directory-storage How data is stored in the working directory]
    [cvs: Guide to CVS commands#index-cvsadmin cvsadmin][cvs: Guide to CVS commands#admin admin—Administration]
    [cvs: Overview#index-CVSEDITOR_002c-environment-variable CVSEDITOR, environment variable][cvs: Overview#Committing-your-changes Committing your changes]
    [cvs: All environment variables which affect CVS#index-CVSEDITOR_002c-environment-variable-1 CVSEDITOR, environment variable][cvs: All environment variables which affect CVS#Environment-variables All environment variables which affect CVS]
    [cvs: Reference manual for Administrative files#index-CVSEDITOR_002c-internal-variable CVSEDITOR, internal variable][cvs: Reference manual for Administrative files#Variables Expansions in administrative files]
    [cvs: Keyword substitution#index-CVSHeader-keyword CVSHeader keyword][cvs: Keyword substitution#Keyword-list Keyword List]
    [cvs: Reference manual for Administrative files#index-cvsignore-_0028admin-file_0029_002c-global cvsignore (admin file), global][cvs: Reference manual for Administrative files#cvsignore Ignoring files via cvsignore]
    [cvs: All environment variables which affect CVS#index-CVSIGNORE_002c-environment-variable CVSIGNORE, environment variable][cvs: All environment variables which affect CVS#Environment-variables All environment variables which affect CVS]
    [cvs: All environment variables which affect CVS#index-CVSREAD_002c-environment-variable CVSREAD, environment variable][cvs: All environment variables which affect CVS#Environment-variables All environment variables which affect CVS]
    [cvs: Guide to CVS commands#index-CVSREAD_002c-overriding CVSREAD, overriding][cvs: Guide to CVS commands#Global-options Global options]
    [cvs: All environment variables which affect CVS#index-CVSREADONLYFS_002c-environment-variable CVSREADONLYFS, environment variable][cvs: All environment variables which affect CVS#Environment-variables All environment variables which affect CVS]
    [cvs: The Repository#index-cvsroot cvsroot][cvs: The Repository#Repository The Repository]
    [cvs: Reference manual for Administrative files#index-CVSROOT-_0028file_0029 CVSROOT (file)][cvs: Reference manual for Administrative files#Administrative-files Reference manual for Administrative files]
    [cvs: The Repository#index-CVSROOT_002c-environment-variable CVSROOT, environment variable][cvs: The Repository#Specifying-a-repository Telling CVS where your repository is]
    [cvs: Reference manual for Administrative files#index-CVSROOT_002c-internal-variable CVSROOT, internal variable][cvs: Reference manual for Administrative files#Variables Expansions in administrative files]
    [cvs: The Repository#index-CVSROOT_002c-module-name CVSROOT, module name][cvs: The Repository#Intro-administrative-files The administrative files]
    [cvs: The Repository#index-CVSROOT_002c-multiple-repositories CVSROOT, multiple repositories][cvs: The Repository#Multiple-repositories Multiple repositories]
    [cvs: Guide to CVS commands#index-CVSROOT_002c-overriding CVSROOT, overriding][cvs: Guide to CVS commands#Global-options Global options]
    [cvs: The Repository#index-CVSROOT_002c-storage-of-files CVSROOT, storage of files][cvs: The Repository#CVSROOT-storage How files are stored in the CVSROOT directory]
    [cvs: Reference manual for Administrative files#index-CVSROOT_002fconfig CVSROOT/config][cvs: Reference manual for Administrative files#config The CVSROOT/config configuration file]
    [cvs: The Repository#index-CVSROOT_002fEmptydir-directory CVSROOT/Emptydir directory][cvs: The Repository#Working-directory-storage How data is stored in the working directory]
    [cvs: The Repository#index-CVSUMASK_002c-environment-variable CVSUMASK, environment variable][cvs: The Repository#File-permissions File permissions]
    [cvs: Reference manual for Administrative files#index-cvswrappers-_0028admin-file_0029 cvswrappers (admin file)][cvs: Reference manual for Administrative files#Wrappers The cvswrappers file]
    [cvs: Reference manual for Administrative files#index-CVSWRAPPERS_002c-environment-variable CVSWRAPPERS, environment variable][cvs: Reference manual for Administrative files#Wrappers The cvswrappers file]
    [cvs: All environment variables which affect CVS#index-CVSWRAPPERS_002c-environment-variable-1 CVSWRAPPERS, environment variable][cvs: All environment variables which affect CVS#Environment-variables All environment variables which affect CVS]
    [cvs: All environment variables which affect CVS#index-CVS_005fCLIENT_005fLOG_002c-environment-variable CVS_CLIENT_LOG, environment variable][cvs: All environment variables which affect CVS#Environment-variables All environment variables which affect CVS]
    [cvs: The Repository#index-CVS_005fCLIENT_005fPORT CVS_CLIENT_PORT][cvs: The Repository#Kerberos-authenticated Direct connection with kerberos]
    [cvs: All environment variables which affect CVS#index-CVS_005fIGNORE_005fREMOTE_005fROOT_002c-environment-variable CVS_IGNORE_REMOTE_ROOT, environment variable][cvs: All environment variables which affect CVS#Environment-variables All environment variables which affect CVS]
    [cvs: All environment variables which affect CVS#index-CVS_005fLOCAL_005fBRANCH_005fNUM_002c-environment-variable CVS_LOCAL_BRANCH_NUM, environment variable][cvs: All environment variables which affect CVS#Environment-variables All environment variables which affect CVS]
    [cvs: The Repository#index-CVS_005fPASSFILE_002c-environment-variable CVS_PASSFILE, environment variable][cvs: The Repository#Password-authentication-client Using the client with password authentication]
    [cvs: All environment variables which affect CVS#index-CVS_005fPID_002c-environment-variable CVS_PID, environment variable][cvs: All environment variables which affect CVS#Environment-variables All environment variables which affect CVS]
    [cvs: All environment variables which affect CVS#index-CVS_005fRCMD_005fPORT_002c-environment-variable CVS_RCMD_PORT, environment variable][cvs: All environment variables which affect CVS#Environment-variables All environment variables which affect CVS]
    [cvs: All environment variables which affect CVS#index-CVS_005fRSH_002c-environment-variable CVS_RSH, environment variable][cvs: All environment variables which affect CVS#Environment-variables All environment variables which affect CVS]
    [cvs: The Repository#index-CVS_005fSERVER_002c-and-_003afork_003a CVS_SERVER, and :fork:][cvs: The Repository#Connecting-via-fork Connecting with fork]
    [cvs: The Repository#index-CVS_005fSERVER_002c-environment-variable CVS_SERVER, environment variable][cvs: The Repository#Connecting-via-rsh Connecting with rsh]
    [cvs: All environment variables which affect CVS#index-CVS_005fSERVER_005fSLEEP_002c-environment-variable CVS_SERVER_SLEEP, environment variable][cvs: All environment variables which affect CVS#Environment-variables All environment variables which affect CVS]
    [cvs: Reference manual for Administrative files#index-CVS_005fUSER_002c-environment-variable CVS_USER, environment variable][cvs: Reference manual for Administrative files#Variables Expansions in administrative files]

    D
    [cvs: Keyword substitution#index-Date-keyword Date keyword][cvs: Keyword substitution#Keyword-list Keyword List]
    [cvs: Guide to CVS commands#index-Dates Dates][cvs: Guide to CVS commands#Common-options Common command options]
    [cvs: The Repository#index-Dead-state Dead state][cvs: The Repository#Attic The attic]
    [cvs: Revisions#index-Decimal-revision-number Decimal revision number][cvs: Revisions#Revision-numbers Revision numbers]
    [cvs: Reference manual for Administrative files#index-DEFAULT-in-commitinfo DEFAULT in commitinfo][cvs: Reference manual for Administrative files#commitinfo Commitinfo]
    [cvs: Reference manual for Administrative files#index-DEFAULT-in-editinfo DEFAULT in editinfo][cvs: Reference manual for Administrative files#editinfo Editinfo]
    [cvs: Reference manual for Administrative files#index-DEFAULT-in-verifymsg DEFAULT in ‘verifymsg’][cvs: Reference manual for Administrative files#verifymsg Verifying log messages]
    [cvs: Starting a project with CVS#index-Defining-a-module Defining a module][cvs: Starting a project with CVS#Defining-the-module Defining the module]
    [cvs: The Repository#index-Defining-modules-_0028intro_0029 Defining modules (intro)][cvs: The Repository#Intro-administrative-files The administrative files]
    [cvs: Reference manual for Administrative files#index-Defining-modules-_0028reference-manual_0029 Defining modules (reference manual)][cvs: Reference manual for Administrative files#modules The modules file]
    [cvs: Revisions#index-Deleting-branch-tags Deleting branch tags][cvs: Revisions#Modifying-tags Deleting, moving, and renaming tags]
    [cvs: Adding, removing, and renaming files and directories#index-Deleting-files Deleting files][cvs: Adding, removing, and renaming files and directories#Removing-files Removing files]
    [cvs: Guide to CVS commands#index-Deleting-revisions Deleting revisions][cvs: Guide to CVS commands#admin-options admin options]
    [cvs: Revisions#index-Deleting-sticky-tags Deleting sticky tags][cvs: Revisions#Sticky-tags Sticky tags]
    [cvs: Revisions#index-Deleting-tags Deleting tags][cvs: Revisions#Modifying-tags Deleting, moving, and renaming tags]
    [cvs: Recursive behavior#index-Descending-directories Descending directories][cvs: Recursive behavior#Recursive-behavior Recursive behavior]
    [cvs: Special Files#index-Device-nodes Device nodes][cvs: Special Files#Special-Files Special Files]
    [cvs: Overview#index-Diff Diff][cvs: Overview#Viewing-differences Viewing differences]
    [cvs: Guide to CVS commands#index-diff-_0028subcommand_0029 diff (subcommand)][cvs: Guide to CVS commands#diff diff—Show differences between revisions]
    [cvs: Branching and merging#index-Differences_002c-merging Differences, merging][cvs: Branching and merging#Merging-two-revisions Merging differences between any two revisions]
    [cvs: Adding, removing, and renaming files and directories#index-Directories_002c-moving Directories, moving][cvs: Adding, removing, and renaming files and directories#Moving-directories Moving and renaming directories]
    [cvs: Adding, removing, and renaming files and directories#index-Directories_002c-removing Directories, removing][cvs: Adding, removing, and renaming files and directories#Removing-directories Removing directories]
    [cvs: Recursive behavior#index-Directory_002c-descending Directory, descending][cvs: Recursive behavior#Recursive-behavior Recursive behavior]
    [cvs: The Repository#index-Disjoint-repositories Disjoint repositories][cvs: The Repository#Multiple-repositories Multiple repositories]
    [cvs: Reference manual for Administrative files#index-Distributing-log-messages Distributing log messages][cvs: Reference manual for Administrative files#loginfo Loginfo]
    [cvs: Multiple developers#index-driver_002ec-_0028merge-example_0029 driver.c (merge example)][cvs: Multiple developers#Conflicts-example Conflicts example]

    E
    [cvs: Multiple developers#index-edit-_0028subcommand_0029 edit (subcommand)][cvs: Multiple developers#Editing-files How to edit a file which is being watched]
    [cvs: Reference manual for Administrative files#index-editinfo-_0028admin-file_0029 editinfo (admin file)][cvs: Reference manual for Administrative files#editinfo Editinfo]
    [cvs: The Repository#index-Editing-administrative-files Editing administrative files][cvs: The Repository#Editing-administrative-files Editing administrative files]
    [cvs: Starting a project with CVS#index-Editing-the-modules-file Editing the modules file][cvs: Starting a project with CVS#Defining-the-module Defining the module]
    [cvs: Guide to CVS commands#index-Editor_002c-avoiding-invocation-of Editor, avoiding invocation of][cvs: Guide to CVS commands#Common-options Common command options]
    [cvs: Overview#index-EDITOR_002c-environment-variable EDITOR, environment variable][cvs: Overview#Committing-your-changes Committing your changes]
    [cvs: All environment variables which affect CVS#index-EDITOR_002c-environment-variable-1 EDITOR, environment variable][cvs: All environment variables which affect CVS#Environment-variables All environment variables which affect CVS]
    [cvs: Reference manual for Administrative files#index-EDITOR_002c-internal-variable EDITOR, internal variable][cvs: Reference manual for Administrative files#Variables Expansions in administrative files]
    [cvs: Guide to CVS commands#index-EDITOR_002c-overriding EDITOR, overriding][cvs: Guide to CVS commands#Global-options Global options]
    [cvs: Reference manual for Administrative files#index-Editor_002c-specifying-per-module Editor, specifying per module][cvs: Reference manual for Administrative files#editinfo Editinfo]
    [cvs: Multiple developers#index-editors-_0028subcommand_0029 editors (subcommand)][cvs: Multiple developers#Watch-information Information about who is watching and editing]
    [cvs: Multiple developers#index-emerge emerge][cvs: Multiple developers#Conflicts-example Conflicts example]
    [cvs: The Repository#index-Emptydir_002c-in-CVSROOT-directory Emptydir, in CVSROOT directory][cvs: The Repository#Working-directory-storage How data is stored in the working directory]
    [cvs: Guide to CVS commands#index-Encryption Encryption][cvs: Guide to CVS commands#Global-options Global options]
    [cvs: The Repository#index-Entries-file_002c-in-CVS-directory Entries file, in CVS directory][cvs: The Repository#Working-directory-storage How data is stored in the working directory]
    [cvs: The Repository#index-Entries_002eBackup-file_002c-in-CVS-directory Entries.Backup file, in CVS directory][cvs: The Repository#Working-directory-storage How data is stored in the working directory]
    [cvs: The Repository#index-Entries_002eLog-file_002c-in-CVS-directory Entries.Log file, in CVS directory][cvs: The Repository#Working-directory-storage How data is stored in the working directory]
    [cvs: The Repository#index-Entries_002eStatic-file_002c-in-CVS-directory Entries.Static file, in CVS directory][cvs: The Repository#Working-directory-storage How data is stored in the working directory]
    [cvs: All environment variables which affect CVS#index-Environment-variables Environment variables][cvs: All environment variables which affect CVS#Environment-variables All environment variables which affect CVS]
    [cvs: Reference manual for Administrative files#index-environment-variables_002c-passed-to-administrative-files environment variables, passed to administrative files][cvs: Reference manual for Administrative files#Variables Expansions in administrative files]
    [cvs: Dealing with bugs in CVS or this manual#index-Errors_002c-reporting Errors, reporting][cvs: Dealing with bugs in CVS or this manual#BUGS Dealing with bugs in CVS or this manual]
    [cvs: Overview#index-Example-of-a-work_002dsession Example of a work-session][cvs: Overview#A-sample-session A sample session]
    [cvs: Multiple developers#index-Example-of-merge Example of merge][cvs: Multiple developers#Conflicts-example Conflicts example]
    [cvs: Branching and merging#index-Example_002c-branch-merge Example, branch merge][cvs: Branching and merging#Merging-a-branch Merging an entire branch]
    [cvs: Reference manual for Administrative files#index-Excluding-directories_002c-in-modules-file Excluding directories, in modules file][cvs: Reference manual for Administrative files#Excluding-directories Excluding directories]
    [cvs: Reference manual for Administrative files#index-Exit-status_002c-of-commitinfo Exit status, of commitinfo][cvs: Reference manual for Administrative files#commitinfo Commitinfo]
    [cvs: Guide to CVS commands#index-Exit-status_002c-of-CVS Exit status, of CVS][cvs: Guide to CVS commands#Exit-status CVS’s exit status]
    [cvs: Troubleshooting#index-Exit-status_002c-of-editor Exit status, of editor][cvs: Troubleshooting#Error-messages Partial list of error messages]
    [cvs: History browsing#index-Exit-status_002c-of-taginfo Exit status, of taginfo][cvs: History browsing#user_002ddefined-logging User-defined logging]
    [cvs: Reference manual for Administrative files#index-Exit-status_002c-of-verifymsg Exit status, of ‘verifymsg’][cvs: Reference manual for Administrative files#verifymsg Verifying log messages]
    [cvs: Guide to CVS commands#index-export-_0028subcommand_0029 export (subcommand)][cvs: Guide to CVS commands#export export—Export sources from CVS, similar to checkout]
    [cvs: Reference manual for Administrative files#index-Export-program Export program][cvs: Reference manual for Administrative files#Module-options Module options]

    F
    [cvs: Overview#index-Fetching-source Fetching source][cvs: Overview#Getting-the-source Getting the source]
    [cvs: Multiple developers#index-File-had-conflicts-on-merge File had conflicts on merge][cvs: Multiple developers#File-status File status]
    [cvs: Multiple developers#index-File-locking File locking][cvs: Multiple developers#Multiple-developers Multiple developers]
    [cvs: The Repository#index-File-permissions_002c-general File permissions, general][cvs: The Repository#File-permissions File permissions]
    [cvs: The Repository#index-File-permissions_002c-Windows_002dspecific File permissions, Windows-specific][cvs: The Repository#Windows-permissions File Permission issues specific to Windows]
    [cvs: Multiple developers#index-File-status File status][cvs: Multiple developers#File-status File status]
    [cvs: Adding, removing, and renaming files and directories#index-Files_002c-moving Files, moving][cvs: Adding, removing, and renaming files and directories#Moving-files Moving and renaming files]
    [cvs: Reference manual for Administrative files#index-Files_002c-reference-manual Files, reference manual][cvs: Reference manual for Administrative files#Administrative-files Reference manual for Administrative files]
    [cvs: Guide to CVS commands#index-Fixing-a-log-message Fixing a log message][cvs: Guide to CVS commands#admin-options admin options]
    [cvs: Guide to CVS commands#index-Forcing-a-tag-match Forcing a tag match][cvs: Guide to CVS commands#Common-options Common command options]
    [cvs: The Repository#index-fork_002c-access-method fork, access method][cvs: The Repository#Connecting-via-fork Connecting with fork]
    [cvs: Reference manual for Administrative files#index-Form-for-log-message Form for log message][cvs: Reference manual for Administrative files#rcsinfo Rcsinfo]
    [cvs: Guide to CVS commands#index-Format-of-CVS-commands Format of CVS commands][cvs: Guide to CVS commands#Structure Overall structure of CVS commands]

    G
    [cvs: Overview#index-Getting-started Getting started][cvs: Overview#A-sample-session A sample session]
    [cvs: Overview#index-Getting-the-source Getting the source][cvs: Overview#Getting-the-source Getting the source]
    [cvs: Reference manual for Administrative files#index-Global-cvsignore Global cvsignore][cvs: Reference manual for Administrative files#cvsignore Ignoring files via cvsignore]
    [cvs: Guide to CVS commands#index-Global-options Global options][cvs: Guide to CVS commands#Global-options Global options]
    [cvs: The Repository#index-Group Group][cvs: The Repository#File-permissions File permissions]
    [cvs: The Repository#index-gserver-_0028client_002fserver-connection-method_0029_002c-port-specification gserver (client/server connection method), port specification][cvs: The Repository#Remote-repositories Remote repositories]
    [cvs: The Repository#index-gserver-_0028client_002fserver-connection-method_0029_002c-port-specification-1 gserver (client/server connection method), port specification][cvs: The Repository#Password-authentication-server Setting up the server for password authentication]
    [cvs: The Repository#index-GSSAPI GSSAPI][cvs: The Repository#GSSAPI-authenticated Direct connection with GSSAPI]
    [cvs: Guide to CVS commands#index-Gzip Gzip][cvs: Guide to CVS commands#Global-options Global options]
    [cvs: Quick reference to CVS commands#index-Gzip-1 Gzip][cvs: Quick reference to CVS commands#Invoking-CVS Quick reference to CVS commands]

    H
    [cvs: Special Files#index-Hard-links Hard links][cvs: Special Files#Special-Files Special Files]
    [cvs: Revisions#index-HEAD_002c-as-reserved-tag-name HEAD, as reserved tag name][cvs: Revisions#Tags Tags–Symbolic revisions]
    [cvs: Guide to CVS commands#index-HEAD_002c-special-tag HEAD, special tag][cvs: Guide to CVS commands#Common-options Common command options]
    [cvs: Keyword substitution#index-Header-keyword Header keyword][cvs: Keyword substitution#Keyword-list Keyword List]
    [cvs: Guide to CVS commands#index-history-_0028subcommand_0029 history (subcommand)][cvs: Guide to CVS commands#history history—Show status of files and users]
    [cvs: History browsing#index-History-browsing History browsing][cvs: History browsing#History-browsing History browsing]
    [cvs: Reference manual for Administrative files#index-History-file History file][cvs: Reference manual for Administrative files#history-file The history file]
    [cvs: The Repository#index-History-files History files][cvs: The Repository#Repository-files Where files are stored within the repository]
    [cvs: Overview#index-History-of-CVS History of CVS][cvs: Overview#What-is-CVS_003f What is CVS?]
    [cvs: All environment variables which affect CVS#index-HOME_002c-environment-variable HOME, environment variable][cvs: All environment variables which affect CVS#Environment-variables All environment variables which affect CVS]
    [cvs: All environment variables which affect CVS#index-HOMEDRIVE_002c-environment-variable HOMEDRIVE, environment variable][cvs: All environment variables which affect CVS#Environment-variables All environment variables which affect CVS]
    [cvs: All environment variables which affect CVS#index-HOMEPATH_002c-environment-variable HOMEPATH, environment variable][cvs: All environment variables which affect CVS#Environment-variables All environment variables which affect CVS]

    I
    [cvs: Keyword substitution#index-Id-keyword Id keyword][cvs: Keyword substitution#Keyword-list Keyword List]
    [cvs: Keyword substitution#index-Ident-_0028shell-command_0029 Ident (shell command)][cvs: Keyword substitution#Using-keywords Using keywords]
    [cvs: Branching and merging#index-Identifying-a-branch Identifying a branch][cvs: Branching and merging#Accessing-branches Accessing branches]
    [cvs: Keyword substitution#index-Identifying-files Identifying files][cvs: Keyword substitution#Keyword-substitution Keyword substitution]
    [cvs: Reference manual for Administrative files#index-Ignored-files Ignored files][cvs: Reference manual for Administrative files#cvsignore Ignoring files via cvsignore]
    [cvs: Reference manual for Administrative files#index-Ignoring-files Ignoring files][cvs: Reference manual for Administrative files#cvsignore Ignoring files via cvsignore]
    [cvs: Guide to CVS commands#index-import-_0028subcommand_0029 import (subcommand)][cvs: Guide to CVS commands#import import—Import sources into CVS, using vendor branches]
    [cvs: Starting a project with CVS#index-Importing-files Importing files][cvs: Starting a project with CVS#From-files Creating a directory tree from a number of files]
    [cvs: Starting a project with CVS#index-Importing-files_002c-from-other-version-control-systems Importing files, from other version control systems][cvs: Starting a project with CVS#From-other-version-control-systems Creating Files From Other Version Control Systems]
    [cvs: Tracking third-party sources#index-Importing-modules Importing modules][cvs: Tracking third-party sources#First-import Importing for the first time]
    [[#index-Index|Index]][[#Index|Index]]
    [cvs: The Repository#index-inetd_002c-configuring-for-pserver inetd, configuring for pserver][cvs: The Repository#Password-authentication-server Setting up the server for password authentication]
    [cvs: Reference manual for Administrative files#index-Info-files-_0028syntax_0029 Info files (syntax)][cvs: Reference manual for Administrative files#syntax The common syntax]
    [cvs: Multiple developers#index-Informing-others Informing others][cvs: Multiple developers#Informing-others Informing others about commits]
    [cvs: The Repository#index-init-_0028subcommand_0029 init (subcommand)][cvs: The Repository#Creating-a-repository Creating a repository]
    [cvs: The Repository#index-Installed-images-_0028VMS_0029 Installed images (VMS)][cvs: The Repository#File-permissions File permissions]
    [cvs: Reference manual for Administrative files#index-Internal-variables Internal variables][cvs: Reference manual for Administrative files#Variables Expansions in administrative files]
    [cvs: Overview#index-Introduction-to-CVS Introduction to CVS][cvs: Overview#What-is-CVS_003f What is CVS?]
    [cvs: Quick reference to CVS commands#index-Invoking-CVS Invoking CVS][cvs: Quick reference to CVS commands#Invoking-CVS Quick reference to CVS commands]
    [cvs: History browsing#index-Isolation Isolation][cvs: History browsing#History-browsing History browsing]

    J
    [cvs: Branching and merging#index-Join Join][cvs: Branching and merging#Merging-a-branch Merging an entire branch]

    K
    [cvs: Reference manual for Administrative files#index-Keeping-a-checked-out-copy Keeping a checked out copy][cvs: Reference manual for Administrative files#Keeping-a-checked-out-copy Keeping a checked out copy]
    [cvs: The Repository#index-Kerberos_002c-using-_003agserver_003a Kerberos, using :gserver:][cvs: The Repository#GSSAPI-authenticated Direct connection with GSSAPI]
    [cvs: The Repository#index-Kerberos_002c-using-_003akserver_003a Kerberos, using :kserver:][cvs: The Repository#Kerberos-authenticated Direct connection with kerberos]
    [cvs: The Repository#index-Kerberos_002c-using-kerberized-rsh Kerberos, using kerberized rsh][cvs: The Repository#Connecting-via-rsh Connecting with rsh]
    [cvs: Keyword substitution#index-Keyword-expansion Keyword expansion][cvs: Keyword substitution#Keyword-substitution Keyword substitution]
    [cvs: Keyword substitution#index-Keyword-List Keyword List][cvs: Keyword substitution#Keyword-list Keyword List]
    [cvs: Keyword substitution#index-Keyword-substitution Keyword substitution][cvs: Keyword substitution#Keyword-substitution Keyword substitution]
    [cvs: Branching and merging#index-Keyword-substitution_002c-and-merging Keyword substitution, and merging][cvs: Branching and merging#Merging-and-keywords Merging and keywords]
    [cvs: Keyword substitution#index-Keyword-substitution_002c-changing-modes Keyword substitution, changing modes][cvs: Keyword substitution#Substitution-modes Substitution modes]
    [cvs: Keyword substitution#index-Kflag Kflag][cvs: Keyword substitution#Substitution-modes Substitution modes]
    [cvs: The Repository#index-kinit kinit][cvs: The Repository#Kerberos-authenticated Direct connection with kerberos]
    [cvs: Dealing with bugs in CVS or this manual#index-Known-bugs-in-this-manual-or-CVS Known bugs in this manual or CVS][cvs: Dealing with bugs in CVS or this manual#BUGS Dealing with bugs in CVS or this manual]
    [cvs: The Repository#index-kserver-_0028client_002fserver-connection-method_0029_002c-port-specification kserver (client/server connection method), port specification][cvs: The Repository#Remote-repositories Remote repositories]
    [cvs: The Repository#index-kserver-_0028client_002fserver-connection-method_0029_002c-port-specification-1 kserver (client/server connection method), port specification][cvs: The Repository#Password-authentication-server Setting up the server for password authentication]

    L
    [cvs: The Repository#index-Layout-of-repository Layout of repository][cvs: The Repository#Repository The Repository]
    [cvs: Guide to CVS commands#index-Left_002dhand-options Left-hand options][cvs: Guide to CVS commands#Global-options Global options]
    [cvs: Revisions#index-Linear-development Linear development][cvs: Revisions#Revision-numbers Revision numbers]
    [cvs: Guide to CVS commands#index-Link_002c-symbolic_002c-importing Link, symbolic, importing][cvs: Guide to CVS commands#import-output import output]
    [cvs: Overview#index-List_002c-mailing-list List, mailing list][cvs: Overview#What-is-CVS_003f What is CVS?]
    [cvs: Keyword substitution#index-Local-keyword Local keyword][cvs: Keyword substitution#Keyword-list Keyword List]
    [cvs: Multiple developers#index-Locally-Added Locally Added][cvs: Multiple developers#File-status File status]
    [cvs: Multiple developers#index-Locally-Modified Locally Modified][cvs: Multiple developers#File-status File status]
    [cvs: Multiple developers#index-Locally-Removed Locally Removed][cvs: Multiple developers#File-status File status]
    [cvs: Reference manual for Administrative files#index-LockDir_002c-in-CVSROOT_002fconfig LockDir, in CVSROOT/config][cvs: Reference manual for Administrative files#config The CVSROOT/config configuration file]
    [cvs: Keyword substitution#index-Locker-keyword Locker keyword][cvs: Keyword substitution#Keyword-list Keyword List]
    [cvs: Multiple developers#index-Locking-files Locking files][cvs: Multiple developers#Multiple-developers Multiple developers]
    [cvs: The Repository#index-Locks_002c-cvs_002c-and-backups Locks, cvs, and backups][cvs: The Repository#Backing-up Backing up a repository]
    [cvs: Multiple developers#index-Locks_002c-cvs_002c-introduction Locks, cvs, introduction][cvs: Multiple developers#Concurrency Several developers simultaneously attempting to run CVS]
    [cvs: The Repository#index-Locks_002c-cvs_002c-technical-details Locks, cvs, technical details][cvs: The Repository#Locks CVS locks in the repository]
    [cvs: Guide to CVS commands#index-log-_0028subcommand_0029 log (subcommand)][cvs: Guide to CVS commands#log log—Print out log information for files]
    [cvs: Reference manual for Administrative files#index-Log-information_002c-saving Log information, saving][cvs: Reference manual for Administrative files#history-file The history file]
    [cvs: Keyword substitution#index-Log-keyword Log keyword][cvs: Keyword substitution#Keyword-list Keyword List]
    [cvs: Overview#index-Log-message-entry Log message entry][cvs: Overview#Committing-your-changes Committing your changes]
    [cvs: Reference manual for Administrative files#index-Log-message-template Log message template][cvs: Reference manual for Administrative files#rcsinfo Rcsinfo]
    [cvs: Guide to CVS commands#index-Log-message_002c-correcting Log message, correcting][cvs: Guide to CVS commands#admin-options admin options]
    [cvs: Reference manual for Administrative files#index-Log-message_002c-verifying Log message, verifying][cvs: Reference manual for Administrative files#verifymsg Verifying log messages]
    [cvs: Reference manual for Administrative files#index-Log-messages Log messages][cvs: Reference manual for Administrative files#loginfo Loginfo]
    [cvs: Reference manual for Administrative files#index-Log-messages_002c-editing Log messages, editing][cvs: Reference manual for Administrative files#editinfo Editinfo]
    [cvs: Reference manual for Administrative files#index-LogHistory_002c-in-CVSROOT_002fconfig LogHistory, in CVSROOT/config][cvs: Reference manual for Administrative files#config The CVSROOT/config configuration file]
    [cvs: The Repository#index-Login-_0028subcommand_0029 Login (subcommand)][cvs: The Repository#Password-authentication-client Using the client with password authentication]
    [cvs: Reference manual for Administrative files#index-loginfo-_0028admin-file_0029 loginfo (admin file)][cvs: Reference manual for Administrative files#loginfo Loginfo]
    [cvs: Reference manual for Administrative files#index-LOGNAME_002c-environment-variable LOGNAME, environment variable][cvs: Reference manual for Administrative files#Variables Expansions in administrative files]
    [cvs: The Repository#index-Logout-_0028subcommand_0029 Logout (subcommand)][cvs: The Repository#Password-authentication-client Using the client with password authentication]

    M
    [cvs: Multiple developers#index-Mail_002c-automatic-mail-on-commit Mail, automatic mail on commit][cvs: Multiple developers#Informing-others Informing others about commits]
    [cvs: Overview#index-Mailing-list Mailing list][cvs: Overview#What-is-CVS_003f What is CVS?]
    [cvs: Reference manual for Administrative files#index-Mailing-log-messages Mailing log messages][cvs: Reference manual for Administrative files#loginfo Loginfo]
    [cvs: Branching and merging#index-Main-trunk-and-branches Main trunk and branches][cvs: Branching and merging#Branching-and-merging Branching and merging]
    [cvs: How your build system interacts with CVS#index-make make][cvs: How your build system interacts with CVS#Builds How your build system interacts with CVS]
    [cvs: The Repository#index-Many-repositories Many repositories][cvs: The Repository#Multiple-repositories Multiple repositories]
    [cvs: Multiple developers#index-Markers_002c-conflict Markers, conflict][cvs: Multiple developers#Conflicts-example Conflicts example]
    [cvs: Multiple developers#index-Merge_002c-an-example Merge, an example][cvs: Multiple developers#Conflicts-example Conflicts example]
    [cvs: Branching and merging#index-Merge_002c-branch-example Merge, branch example][cvs: Branching and merging#Merging-a-branch Merging an entire branch]
    [cvs: Branching and merging#index-Merging Merging][cvs: Branching and merging#Branching-and-merging Branching and merging]
    [cvs: Branching and merging#index-Merging-a-branch Merging a branch][cvs: Branching and merging#Merging-a-branch Merging an entire branch]
    [cvs: Multiple developers#index-Merging-a-file Merging a file][cvs: Multiple developers#Updating-a-file Bringing a file up to date]
    [cvs: Branching and merging#index-Merging-two-revisions Merging two revisions][cvs: Branching and merging#Merging-two-revisions Merging differences between any two revisions]
    [cvs: Branching and merging#index-Merging_002c-and-keyword-substitution Merging, and keyword substitution][cvs: Branching and merging#Merging-and-keywords Merging and keywords]
    [cvs: Troubleshooting#index-mkmodules mkmodules][cvs: Troubleshooting#Error-messages Partial list of error messages]
    [cvs: Branching and merging#index-Modifications_002c-copying-between-branches Modifications, copying between branches][cvs: Branching and merging#Branching-and-merging Branching and merging]
    [cvs: Reference manual for Administrative files#index-Module-status Module status][cvs: Reference manual for Administrative files#Module-options Module options]
    [cvs: Starting a project with CVS#index-Module_002c-defining Module, defining][cvs: Starting a project with CVS#Defining-the-module Defining the module]
    [cvs: Reference manual for Administrative files#index-Modules-_0028admin-file_0029 Modules (admin file)][cvs: Reference manual for Administrative files#modules The modules file]
    [cvs: The Repository#index-Modules-file Modules file][cvs: The Repository#Intro-administrative-files The administrative files]
    [cvs: Reference manual for Administrative files#index-Modules-file-program-options Modules file program options][cvs: Reference manual for Administrative files#Module-program-options How the modules file “program options” programs are run]
    [cvs: Starting a project with CVS#index-Modules-file_002c-changing Modules file, changing][cvs: Starting a project with CVS#Defining-the-module Defining the module]
    [cvs: The Repository#index-modules_002edb modules.db][cvs: The Repository#CVSROOT-storage How files are stored in the CVSROOT directory]
    [cvs: The Repository#index-modules_002edir modules.dir][cvs: The Repository#CVSROOT-storage How files are stored in the CVSROOT directory]
    [cvs: The Repository#index-modules_002epag modules.pag][cvs: The Repository#CVSROOT-storage How files are stored in the CVSROOT directory]
    [cvs: Branching and merging#index-Motivation-for-branches Motivation for branches][cvs: Branching and merging#Branches-motivation What branches are good for]
    [cvs: The Repository#index-Moving-a-repository Moving a repository][cvs: The Repository#Moving-a-repository Moving a repository]
    [cvs: Revisions#index-Moving-branch-tags Moving branch tags][cvs: Revisions#Modifying-tags Deleting, moving, and renaming tags]
    [cvs: Adding, removing, and renaming files and directories#index-Moving-directories Moving directories][cvs: Adding, removing, and renaming files and directories#Moving-directories Moving and renaming directories]
    [cvs: Adding, removing, and renaming files and directories#index-Moving-files Moving files][cvs: Adding, removing, and renaming files and directories#Moving-files Moving and renaming files]
    [cvs: Revisions#index-Moving-tags Moving tags][cvs: Revisions#Modifying-tags Deleting, moving, and renaming tags]
    [cvs: Multiple developers#index-Multiple-developers Multiple developers][cvs: Multiple developers#Multiple-developers Multiple developers]
    [cvs: The Repository#index-Multiple-repositories Multiple repositories][cvs: The Repository#Multiple-repositories Multiple repositories]

    N
    [cvs: Keyword substitution#index-Name-keyword Name keyword][cvs: Keyword substitution#Keyword-list Keyword List]
    [cvs: Revisions#index-Name_002c-symbolic-_0028tag_0029 Name, symbolic (tag)][cvs: Revisions#Tags Tags–Symbolic revisions]
    [cvs: Multiple developers#index-Needs-Checkout Needs Checkout][cvs: Multiple developers#File-status File status]
    [cvs: Multiple developers#index-Needs-Merge Needs Merge][cvs: Multiple developers#File-status File status]
    [cvs: Multiple developers#index-Needs-Patch Needs Patch][cvs: Multiple developers#File-status File status]
    [cvs: Overview#index-Newsgroups Newsgroups][cvs: Overview#What-is-CVS_003f What is CVS?]
    [cvs: Multiple developers#index-notify-_0028admin-file_0029 notify (admin file)][cvs: Multiple developers#Getting-Notified Telling CVS to notify you]
    [cvs: The Repository#index-Notify-file_002c-in-CVS-directory Notify file, in CVS directory][cvs: The Repository#Working-directory-storage How data is stored in the working directory]
    [cvs: The Repository#index-Notify_002etmp-file_002c-in-CVS-directory Notify.tmp file, in CVS directory][cvs: The Repository#Working-directory-storage How data is stored in the working directory]
    [cvs: Revisions#index-Number_002c-branch Number, branch][cvs: Revisions#Revision-numbers Revision numbers]
    [cvs: Branching and merging#index-Number_002c-branch-1 Number, branch][cvs: Branching and merging#Branches-and-revisions Branches and revisions]
    [cvs: Revisions#index-Number_002c-revision_002d Number, revision-][cvs: Revisions#Revision-numbers Revision numbers]

    O
    [cvs: Guide to CVS commands#index-Option-defaults Option defaults][cvs: Guide to CVS commands#g_t_007e_002f_002ecvsrc Default options and the ~/.cvsrc file]
    [cvs: Guide to CVS commands#index-Options_002c-global Options, global][cvs: Guide to CVS commands#Global-options Global options]
    [cvs: Reference manual for Administrative files#index-Options_002c-in-modules-file Options, in modules file][cvs: Reference manual for Administrative files#Module-options Module options]
    [cvs: Guide to CVS commands#index-Outdating-revisions Outdating revisions][cvs: Guide to CVS commands#admin-options admin options]
    [cvs: Multiple developers#index-Overlap Overlap][cvs: Multiple developers#Updating-a-file Bringing a file up to date]
    [cvs: Guide to CVS commands#index-Overriding-CVSREAD Overriding CVSREAD][cvs: Guide to CVS commands#Global-options Global options]
    [cvs: Guide to CVS commands#index-Overriding-CVSROOT Overriding CVSROOT][cvs: Guide to CVS commands#Global-options Global options]
    [cvs: Guide to CVS commands#index-Overriding-EDITOR Overriding EDITOR][cvs: Guide to CVS commands#Global-options Global options]
    [cvs: Guide to CVS commands#index-Overriding-RCSBIN Overriding RCSBIN][cvs: Guide to CVS commands#Global-options Global options]
    [cvs: Guide to CVS commands#index-Overriding-TMPDIR Overriding TMPDIR][cvs: Guide to CVS commands#Global-options Global options]
    [cvs: Overview#index-Overview Overview][cvs: Overview#Overview Overview]
    [cvs: Special Files#index-Ownership_002c-saving-in-CVS Ownership, saving in CVS][cvs: Special Files#Special-Files Special Files]

    P
    [cvs: The Repository#index-Parallel-repositories Parallel repositories][cvs: The Repository#Multiple-repositories Multiple repositories]
    [cvs: The Repository#index-passwd-_0028admin-file_0029 passwd (admin file)][cvs: The Repository#Password-authentication-server Setting up the server for password authentication]
    [cvs: The Repository#index-Password-client_002c-using Password client, using][cvs: The Repository#Password-authentication-client Using the client with password authentication]
    [cvs: The Repository#index-Password-server_002c-setting-up Password server, setting up][cvs: The Repository#Password-authentication-server Setting up the server for password authentication]
    [cvs: All environment variables which affect CVS#index-PATH_002c-environment-variable PATH, environment variable][cvs: All environment variables which affect CVS#Environment-variables All environment variables which affect CVS]
    [cvs: The Repository#index-Per_002ddirectory-sticky-tags_002fdates Per-directory sticky tags/dates][cvs: The Repository#Working-directory-storage How data is stored in the working directory]
    [cvs: Reference manual for Administrative files#index-Per_002dmodule-editor Per-module editor][cvs: Reference manual for Administrative files#editinfo Editinfo]
    [cvs: The Repository#index-Permissions_002c-general Permissions, general][cvs: The Repository#File-permissions File permissions]
    [cvs: Special Files#index-Permissions_002c-saving-in-CVS Permissions, saving in CVS][cvs: Special Files#Special-Files Special Files]
    [cvs: The Repository#index-Permissions_002c-Windows_002dspecific Permissions, Windows-specific][cvs: The Repository#Windows-permissions File Permission issues specific to Windows]
    [cvs: Revision management#index-Policy Policy][cvs: Revision management#When-to-commit When to commit?]
    [cvs: The Repository#index-port_002c-specifying-for-remote-repositories port, specifying for remote repositories][cvs: The Repository#Remote-repositories Remote repositories]
    [cvs: The Repository#index-port_002c-specifying-for-remote-repositories-1 port, specifying for remote repositories][cvs: The Repository#Password-authentication-server Setting up the server for password authentication]
    [cvs: Reference manual for Administrative files#index-Precommit-checking Precommit checking][cvs: Reference manual for Administrative files#commitinfo Commitinfo]
    [cvs: The Repository#index-pserver-_0028client_002fserver-connection-method_0029_002c-port-specification pserver (client/server connection method), port specification][cvs: The Repository#Remote-repositories Remote repositories]
    [cvs: The Repository#index-pserver-_0028client_002fserver-connection-method_0029_002c-port-specification-1 pserver (client/server connection method), port specification][cvs: The Repository#Password-authentication-server Setting up the server for password authentication]
    [cvs: The Repository#index-pserver-_0028subcommand_0029 pserver (subcommand)][cvs: The Repository#Password-authentication-server Setting up the server for password authentication]
    [cvs: Starting a project with CVS#index-PVCS_002c-importing-files-from PVCS, importing files from][cvs: Starting a project with CVS#From-other-version-control-systems Creating Files From Other Version Control Systems]

    R
    [cvs: The Repository#index-RCS-history-files RCS history files][cvs: The Repository#Repository-files Where files are stored within the repository]
    [cvs: Revisions#index-RCS-revision-numbers RCS revision numbers][cvs: Revisions#Tags Tags–Symbolic revisions]
    [cvs: Starting a project with CVS#index-RCS_002c-importing-files-from RCS, importing files from][cvs: Starting a project with CVS#From-other-version-control-systems Creating Files From Other Version Control Systems]
    [cvs: Multiple developers#index-RCS_002dstyle-locking RCS-style locking][cvs: Multiple developers#Multiple-developers Multiple developers]
    [cvs: Reference manual for Administrative files#index-RCSBIN_002c-in-CVSROOT_002fconfig RCSBIN, in CVSROOT/config][cvs: Reference manual for Administrative files#config The CVSROOT/config configuration file]
    [cvs: Reference manual for Administrative files#index-RCSBIN_002c-internal-variable RCSBIN, internal variable][cvs: Reference manual for Administrative files#Variables Expansions in administrative files]
    [cvs: Guide to CVS commands#index-RCSBIN_002c-overriding RCSBIN, overriding][cvs: Guide to CVS commands#Global-options Global options]
    [cvs: Keyword substitution#index-RCSfile-keyword RCSfile keyword][cvs: Keyword substitution#Keyword-list Keyword List]
    [cvs: Reference manual for Administrative files#index-rcsinfo-_0028admin-file_0029 rcsinfo (admin file)][cvs: Reference manual for Administrative files#rcsinfo Rcsinfo]
    [cvs: Guide to CVS commands#index-rdiff-_0028subcommand_0029 rdiff (subcommand)][cvs: Guide to CVS commands#rdiff rdiff—’patch’ format diffs between releases]
    [cvs: Guide to CVS commands#index-Read_002donly-files_002c-and-_002dr Read-only files, and -r][cvs: Guide to CVS commands#Global-options Global options]
    [cvs: All environment variables which affect CVS#index-Read_002donly-files_002c-and-CVSREAD Read-only files, and CVSREAD][cvs: All environment variables which affect CVS#Environment-variables All environment variables which affect CVS]
    [cvs: Multiple developers#index-Read_002donly-files_002c-and-watches Read-only files, and watches][cvs: Multiple developers#Setting-a-watch Telling CVS to watch certain files]
    [cvs: The Repository#index-Read_002donly-files_002c-in-repository Read-only files, in repository][cvs: The Repository#File-permissions File permissions]
    [cvs: Guide to CVS commands#index-Read_002donly-mode Read-only mode][cvs: Guide to CVS commands#Global-options Global options]
    [cvs: The Repository#index-Read_002donly-repository-access Read-only repository access][cvs: The Repository#Read_002donly-access Read-only repository access]
    [cvs: Guide to CVS commands#index-Read_002donly-repository-mode Read-only repository mode][cvs: Guide to CVS commands#Global-options Global options]
    [cvs: The Repository#index-readers-_0028admin-file_0029 readers (admin file)][cvs: The Repository#Read_002donly-access Read-only repository access]
    [cvs: Recursive behavior#index-Recursive-_0028directory-descending_0029 Recursive (directory descending)][cvs: Recursive behavior#Recursive-behavior Recursive behavior]
    [cvs: Reference manual for Administrative files#index-Reference-manual-_0028files_0029 Reference manual (files)][cvs: Reference manual for Administrative files#Administrative-files Reference manual for Administrative files]
    [cvs: All environment variables which affect CVS#index-Reference-manual-for-variables Reference manual for variables][cvs: All environment variables which affect CVS#Environment-variables All environment variables which affect CVS]
    [cvs: Quick reference to CVS commands#index-Reference_002c-commands Reference, commands][cvs: Quick reference to CVS commands#Invoking-CVS Quick reference to CVS commands]
    [cvs: Reference manual for Administrative files#index-Regular-expression-syntax Regular expression syntax][cvs: Reference manual for Administrative files#syntax The common syntax]
    [cvs: Reference manual for Administrative files#index-Regular-modules Regular modules][cvs: Reference manual for Administrative files#Regular-modules Regular modules]
    [cvs: Guide to CVS commands#index-release-_0028subcommand_0029 release (subcommand)][cvs: Guide to CVS commands#release release—Indicate that a Module is no longer in use]
    [cvs: Revisions#index-Releases_002c-revisions-and-versions Releases, revisions and versions][cvs: Revisions#Versions-revisions-releases Versions, revisions and releases]
    [cvs: Overview#index-Releasing-your-working-copy Releasing your working copy][cvs: Overview#Cleaning-up Cleaning up]
    [cvs: The Repository#index-Remote-repositories Remote repositories][cvs: The Repository#Remote-repositories Remote repositories]
    [cvs: The Repository#index-Remote-repositories_002c-port-specification Remote repositories, port specification][cvs: The Repository#Remote-repositories Remote repositories]
    [cvs: The Repository#index-Remote-repositories_002c-port-specification-1 Remote repositories, port specification][cvs: The Repository#Password-authentication-server Setting up the server for password authentication]
    [cvs: Adding, removing, and renaming files and directories#index-Remove-_0028subcommand_0029 Remove (subcommand)][cvs: Adding, removing, and renaming files and directories#Removing-files Removing files]
    [cvs: Branching and merging#index-Removing-a-change Removing a change][cvs: Branching and merging#Merging-two-revisions Merging differences between any two revisions]
    [cvs: Revisions#index-Removing-branch-tags Removing branch tags][cvs: Revisions#Modifying-tags Deleting, moving, and renaming tags]
    [cvs: Adding, removing, and renaming files and directories#index-Removing-directories Removing directories][cvs: Adding, removing, and renaming files and directories#Removing-directories Removing directories]
    [cvs: Adding, removing, and renaming files and directories#index-Removing-files Removing files][cvs: Adding, removing, and renaming files and directories#Removing-files Removing files]
    [cvs: Revisions#index-Removing-tags Removing tags][cvs: Revisions#Modifying-tags Deleting, moving, and renaming tags]
    [cvs: Overview#index-Removing-your-working-copy Removing your working copy][cvs: Overview#Cleaning-up Cleaning up]
    [cvs: Adding, removing, and renaming files and directories#index-Renaming-directories Renaming directories][cvs: Adding, removing, and renaming files and directories#Moving-directories Moving and renaming directories]
    [cvs: Adding, removing, and renaming files and directories#index-Renaming-files Renaming files][cvs: Adding, removing, and renaming files and directories#Moving-files Moving and renaming files]
    [cvs: Revisions#index-Renaming-tags Renaming tags][cvs: Revisions#Modifying-tags Deleting, moving, and renaming tags]
    [cvs: Guide to CVS commands#index-Replacing-a-log-message Replacing a log message][cvs: Guide to CVS commands#admin-options admin options]
    [cvs: Dealing with bugs in CVS or this manual#index-Reporting-bugs Reporting bugs][cvs: Dealing with bugs in CVS or this manual#BUGS Dealing with bugs in CVS or this manual]
    [cvs: The Repository#index-Repositories_002c-multiple Repositories, multiple][cvs: The Repository#Multiple-repositories Multiple repositories]
    [cvs: The Repository#index-Repositories_002c-remote Repositories, remote][cvs: The Repository#Remote-repositories Remote repositories]
    [cvs: The Repository#index-Repositories_002c-remote_002c-port-specification Repositories, remote, port specification][cvs: The Repository#Remote-repositories Remote repositories]
    [cvs: The Repository#index-Repositories_002c-remote_002c-port-specification-1 Repositories, remote, port specification][cvs: The Repository#Password-authentication-server Setting up the server for password authentication]
    [cvs: The Repository#index-Repository-_0028intro_0029 Repository (intro)][cvs: The Repository#Repository The Repository]
    [cvs: The Repository#index-Repository-file_002c-in-CVS-directory Repository file, in CVS directory][cvs: The Repository#Working-directory-storage How data is stored in the working directory]
    [cvs: The Repository#index-Repository_002c-backing-up Repository, backing up][cvs: The Repository#Backing-up Backing up a repository]
    [cvs: The Repository#index-Repository_002c-example Repository, example][cvs: The Repository#Repository The Repository]
    [cvs: The Repository#index-Repository_002c-how-data-is-stored Repository, how data is stored][cvs: The Repository#Repository-storage How data is stored in the repository]
    [cvs: The Repository#index-Repository_002c-moving Repository, moving][cvs: The Repository#Moving-a-repository Moving a repository]
    [cvs: The Repository#index-Repository_002c-setting-up Repository, setting up][cvs: The Repository#Creating-a-repository Creating a repository]
    [cvs: Reference manual for Administrative files#index-RereadLogAfterVerify_002c-in-CVSROOT_002fconfig RereadLogAfterVerify, in CVSROOT/config][cvs: Reference manual for Administrative files#config The CVSROOT/config configuration file]
    [cvs: Multiple developers#index-Reserved-checkouts Reserved checkouts][cvs: Multiple developers#Multiple-developers Multiple developers]
    [cvs: Revisions#index-Resetting-sticky-tags Resetting sticky tags][cvs: Revisions#Sticky-tags Sticky tags]
    [cvs: Multiple developers#index-Resolving-a-conflict Resolving a conflict][cvs: Multiple developers#Conflicts-example Conflicts example]
    [cvs: Branching and merging#index-Restoring-old-version-of-removed-file Restoring old version of removed file][cvs: Branching and merging#Merging-two-revisions Merging differences between any two revisions]
    [cvs: Branching and merging#index-Resurrecting-old-version-of-dead-file Resurrecting old version of dead file][cvs: Branching and merging#Merging-two-revisions Merging differences between any two revisions]
    [cvs: Branching and merging#index-Retrieve-a-branch Retrieve a branch][cvs: Branching and merging#Accessing-branches Accessing branches]
    [cvs: Revisions#index-Retrieving-an-old-revision-using-tags Retrieving an old revision using tags][cvs: Revisions#Tags Tags–Symbolic revisions]
    [cvs: Multiple developers#index-Reverting-to-repository-version Reverting to repository version][cvs: Multiple developers#Editing-files How to edit a file which is being watched]
    [cvs: Keyword substitution#index-Revision-keyword Revision keyword][cvs: Keyword substitution#Keyword-list Keyword List]
    [cvs: Revision management#index-Revision-management Revision management][cvs: Revision management#Revision-management Revision management]
    [cvs: Revisions#index-Revision-numbers Revision numbers][cvs: Revisions#Revision-numbers Revision numbers]
    [cvs: Branching and merging#index-Revision-numbers-_0028branches_0029 Revision numbers (branches)][cvs: Branching and merging#Branches-and-revisions Branches and revisions]
    [cvs: Revisions#index-Revision-tree Revision tree][cvs: Revisions#Revision-numbers Revision numbers]
    [cvs: Branching and merging#index-Revision-tree_002c-making-branches Revision tree, making branches][cvs: Branching and merging#Branching-and-merging Branching and merging]
    [cvs: Branching and merging#index-Revisions_002c-merging-differences-between Revisions, merging differences between][cvs: Branching and merging#Merging-two-revisions Merging differences between any two revisions]
    [cvs: Revisions#index-Revisions_002c-versions-and-releases Revisions, versions and releases][cvs: Revisions#Versions-revisions-releases Versions, revisions and releases]
    [cvs: Guide to CVS commands#index-Right_002dhand-options Right-hand options][cvs: Guide to CVS commands#Common-options Common command options]
    [cvs: The Repository#index-Root-file_002c-in-CVS-directory Root file, in CVS directory][cvs: The Repository#Specifying-a-repository Telling CVS where your repository is]
    [cvs: The Repository#index-rsh rsh][cvs: The Repository#Connecting-via-rsh Connecting with rsh]
    [cvs: The Repository#index-rsh-replacements-_0028Kerberized_002c-SSH_002c-_0026c_0029 rsh replacements (Kerberized, SSH, &c)][cvs: The Repository#Connecting-via-rsh Connecting with rsh]
    [cvs: Revisions#index-rtag-_0028subcommand_0029 rtag (subcommand)][cvs: Revisions#Tagging-by-date_002ftag Specifying what to tag by date or revision]
    [cvs: Branching and merging#index-rtag-_0028subcommand_0029_002c-creating-a-branch-using rtag (subcommand), creating a branch using][cvs: Branching and merging#Creating-a-branch Creating a branch]

    S
    [cvs: Guide to CVS commands#index-Saving-space Saving space][cvs: Guide to CVS commands#admin-options admin options]
    [cvs: Starting a project with CVS#index-SCCS_002c-importing-files-from SCCS, importing files from][cvs: Starting a project with CVS#From-other-version-control-systems Creating Files From Other Version Control Systems]
    [cvs: The Repository#index-Security_002c-file-permissions-in-repository Security, file permissions in repository][cvs: The Repository#File-permissions File permissions]
    [cvs: The Repository#index-Security_002c-GSSAPI Security, GSSAPI][cvs: The Repository#GSSAPI-authenticated Direct connection with GSSAPI]
    [cvs: The Repository#index-Security_002c-kerberos Security, kerberos][cvs: The Repository#Kerberos-authenticated Direct connection with kerberos]
    [cvs: The Repository#index-Security_002c-of-pserver Security, of pserver][cvs: The Repository#Password-authentication-security Security considerations with password authentication]
    [cvs: The Repository#index-Security_002c-setuid Security, setuid][cvs: The Repository#File-permissions File permissions]
    [cvs: The Repository#index-Server_002c-CVS Server, CVS][cvs: The Repository#Remote-repositories Remote repositories]
    [cvs: The Repository#index-Server_002c-temporary-directories Server, temporary directories][cvs: The Repository#Server-temporary-directory Temporary directories for the server]
    [cvs: The Repository#index-Setgid Setgid][cvs: The Repository#File-permissions File permissions]
    [cvs: The Repository#index-Setting-up-a-repository Setting up a repository][cvs: The Repository#Creating-a-repository Creating a repository]
    [cvs: The Repository#index-Setuid Setuid][cvs: The Repository#File-permissions File permissions]
    [cvs: Keyword substitution#index-Source-keyword Source keyword][cvs: Keyword substitution#Keyword-list Keyword List]
    [cvs: Overview#index-Source_002c-getting-CVS-source Source, getting CVS source][cvs: Overview#What-is-CVS_003f What is CVS?]
    [cvs: Overview#index-Source_002c-getting-from-CVS Source, getting from CVS][cvs: Overview#Getting-the-source Getting the source]
    [cvs: Special Files#index-Special-files Special files][cvs: Special Files#Special-Files Special Files]
    [cvs: Guide to CVS commands#index-Specifying-dates Specifying dates][cvs: Guide to CVS commands#Common-options Common command options]
    [cvs: Multiple developers#index-Spreading-information Spreading information][cvs: Multiple developers#Informing-others Informing others about commits]
    [cvs: The Repository#index-SSH-_0028rsh-replacement_0029 SSH (rsh replacement)][cvs: The Repository#Connecting-via-rsh Connecting with rsh]
    [cvs: Starting a project with CVS#index-Starting-a-project-with-CVS Starting a project with CVS][cvs: Starting a project with CVS#Starting-a-new-project Starting a project with CVS]
    [cvs: Keyword substitution#index-State-keyword State keyword][cvs: Keyword substitution#Keyword-list Keyword List]
    [cvs: Multiple developers#index-Status-of-a-file Status of a file][cvs: Multiple developers#File-status File status]
    [cvs: Reference manual for Administrative files#index-Status-of-a-module Status of a module][cvs: Reference manual for Administrative files#Module-options Module options]
    [cvs: Revisions#index-Sticky-date Sticky date][cvs: Revisions#Sticky-tags Sticky tags]
    [cvs: Revisions#index-Sticky-tags Sticky tags][cvs: Revisions#Sticky-tags Sticky tags]
    [cvs: Revisions#index-Sticky-tags_002c-resetting Sticky tags, resetting][cvs: Revisions#Sticky-tags Sticky tags]
    [cvs: The Repository#index-Sticky-tags_002fdates_002c-per_002ddirectory Sticky tags/dates, per-directory][cvs: The Repository#Working-directory-storage How data is stored in the working directory]
    [cvs: Reference manual for Administrative files#index-Storing-log-messages Storing log messages][cvs: Reference manual for Administrative files#loginfo Loginfo]
    [cvs: Guide to CVS commands#index-Stream-authentication Stream authentication][cvs: Guide to CVS commands#Global-options Global options]
    [cvs: Guide to CVS commands#index-Structure Structure][cvs: Guide to CVS commands#Structure Overall structure of CVS commands]
    [cvs: Recursive behavior#index-Subdirectories Subdirectories][cvs: Recursive behavior#Recursive-behavior Recursive behavior]
    [cvs: Dealing with bugs in CVS or this manual#index-Support_002c-getting-CVS-support Support, getting CVS support][cvs: Dealing with bugs in CVS or this manual#BUGS Dealing with bugs in CVS or this manual]
    [cvs: Guide to CVS commands#index-Symbolic-link_002c-importing Symbolic link, importing][cvs: Guide to CVS commands#import-output import output]
    [cvs: Special Files#index-Symbolic-links Symbolic links][cvs: Special Files#Special-Files Special Files]
    [cvs: Revisions#index-Symbolic-name-_0028tag_0029 Symbolic name (tag)][cvs: Revisions#Tags Tags–Symbolic revisions]
    [cvs: Reference manual for Administrative files#index-Syntax-of-info-files Syntax of info files][cvs: Reference manual for Administrative files#syntax The common syntax]
    [cvs: Reference manual for Administrative files#index-SystemAuth_002c-in-CVSROOT_002fconfig SystemAuth, in CVSROOT/config][cvs: Reference manual for Administrative files#config The CVSROOT/config configuration file]

    T
    [cvs: Revisions#index-tag-_0028subcommand_0029 tag (subcommand)][cvs: Revisions#Tagging-the-working-directory Specifying what to tag from the working directory]
    [cvs: Branching and merging#index-tag-_0028subcommand_0029_002c-creating-a-branch-using tag (subcommand), creating a branch using][cvs: Branching and merging#Creating-a-branch Creating a branch]
    [cvs: Revisions#index-tag-_0028subcommand_0029_002c-introduction tag (subcommand), introduction][cvs: Revisions#Tags Tags–Symbolic revisions]
    [cvs: The Repository#index-Tag-file_002c-in-CVS-directory Tag file, in CVS directory][cvs: The Repository#Working-directory-storage How data is stored in the working directory]
    [cvs: Reference manual for Administrative files#index-Tag-program Tag program][cvs: Reference manual for Administrative files#Module-options Module options]
    [cvs: History browsing#index-taginfo taginfo][cvs: History browsing#user_002ddefined-logging User-defined logging]
    [cvs: Revisions#index-Tags Tags][cvs: Revisions#Tags Tags–Symbolic revisions]
    [cvs: Revisions#index-Tags_002c-deleting Tags, deleting][cvs: Revisions#Modifying-tags Deleting, moving, and renaming tags]
    [cvs: Revisions#index-Tags_002c-example Tags, example][cvs: Revisions#Tags Tags–Symbolic revisions]
    [cvs: Revisions#index-Tags_002c-moving Tags, moving][cvs: Revisions#Modifying-tags Deleting, moving, and renaming tags]
    [cvs: Revisions#index-Tags_002c-renaming Tags, renaming][cvs: Revisions#Modifying-tags Deleting, moving, and renaming tags]
    [cvs: Revisions#index-Tags_002c-retrieving-old-revisions Tags, retrieving old revisions][cvs: Revisions#Tags Tags–Symbolic revisions]
    [cvs: Revisions#index-Tags_002c-sticky Tags, sticky][cvs: Revisions#Sticky-tags Sticky tags]
    [cvs: Revisions#index-Tags_002c-symbolic-name Tags, symbolic name][cvs: Revisions#Tags Tags–Symbolic revisions]
    [cvs: Overview#index-tc_002c-Trivial-Compiler-_0028example_0029 tc, Trivial Compiler (example)][cvs: Overview#A-sample-session A sample session]
    [cvs: Multiple developers#index-Team-of-developers Team of developers][cvs: Multiple developers#Multiple-developers Multiple developers]
    [cvs: All environment variables which affect CVS#index-TEMP_002c-environment-variable TEMP, environment variable][cvs: All environment variables which affect CVS#Environment-variables All environment variables which affect CVS]
    [cvs: The Repository#index-Template-file_002c-in-CVS-directory Template file, in CVS directory][cvs: The Repository#Working-directory-storage How data is stored in the working directory]
    [cvs: Reference manual for Administrative files#index-Template-for-log-message Template for log message][cvs: Reference manual for Administrative files#rcsinfo Rcsinfo]
    [cvs: The Repository#index-Temporary-directories_002c-and-server Temporary directories, and server][cvs: The Repository#Server-temporary-directory Temporary directories for the server]
    [cvs: All environment variables which affect CVS#index-Temporary-files_002c-location-of Temporary files, location of][cvs: All environment variables which affect CVS#Environment-variables All environment variables which affect CVS]
    [cvs: Tracking third-party sources#index-Third_002dparty-sources Third-party sources][cvs: Tracking third-party sources#Tracking-sources Tracking third-party sources]
    [cvs: Guide to CVS commands#index-Time Time][cvs: Guide to CVS commands#Common-options Common command options]
    [cvs: Guide to CVS commands#index-Timezone_002c-in-input Timezone, in input][cvs: Guide to CVS commands#Common-options Common command options]
    [cvs: Guide to CVS commands#index-Timezone_002c-in-output Timezone, in output][cvs: Guide to CVS commands#log log—Print out log information for files]
    [cvs: All environment variables which affect CVS#index-TMP_002c-environment-variable TMP, environment variable][cvs: All environment variables which affect CVS#Environment-variables All environment variables which affect CVS]
    [cvs: All environment variables which affect CVS#index-TMPDIR_002c-environment-variable TMPDIR, environment variable][cvs: All environment variables which affect CVS#Environment-variables All environment variables which affect CVS]
    [cvs: Guide to CVS commands#index-TMPDIR_002c-overriding TMPDIR, overriding][cvs: Guide to CVS commands#Global-options Global options]
    [cvs: Reference manual for Administrative files#index-TopLevelAdmin_002c-in-CVSROOT_002fconfig TopLevelAdmin, in CVSROOT/config][cvs: Reference manual for Administrative files#config The CVSROOT/config configuration file]
    [cvs: Guide to CVS commands#index-Trace Trace][cvs: Guide to CVS commands#Global-options Global options]
    [cvs: History browsing#index-Traceability Traceability][cvs: History browsing#History-browsing History browsing]
    [cvs: Tracking third-party sources#index-Tracking-sources Tracking sources][cvs: Tracking third-party sources#Tracking-sources Tracking third-party sources]
    [cvs: Multiple developers#index-Transactions_002c-atomic_002c-lack-of Transactions, atomic, lack of][cvs: Multiple developers#Concurrency Several developers simultaneously attempting to run CVS]
    [cvs: Overview#index-Trivial-Compiler-_0028example_0029 Trivial Compiler (example)][cvs: Overview#A-sample-session A sample session]
    [cvs: The Repository#index-Typical-repository Typical repository][cvs: The Repository#Repository The Repository]

    U
    [cvs: The Repository#index-Umask_002c-for-repository-files Umask, for repository files][cvs: The Repository#File-permissions File permissions]
    [cvs: Branching and merging#index-Undoing-a-change Undoing a change][cvs: Branching and merging#Merging-two-revisions Merging differences between any two revisions]
    [cvs: Multiple developers#index-unedit-_0028subcommand_0029 unedit (subcommand)][cvs: Multiple developers#Editing-files How to edit a file which is being watched]
    [cvs: Multiple developers#index-Unknown Unknown][cvs: Multiple developers#File-status File status]
    [cvs: Multiple developers#index-Unreserved-checkouts Unreserved checkouts][cvs: Multiple developers#Multiple-developers Multiple developers]
    [cvs: Multiple developers#index-Unresolved-Conflict Unresolved Conflict][cvs: Multiple developers#File-status File status]
    [cvs: Multiple developers#index-Up_002dto_002ddate Up-to-date][cvs: Multiple developers#File-status File status]
    [cvs: Guide to CVS commands#index-update-_0028subcommand_0029 update (subcommand)][cvs: Guide to CVS commands#update update—Bring work tree in sync with repository]
    [cvs: Multiple developers#index-Update_002c-introduction Update, introduction][cvs: Multiple developers#Updating-a-file Bringing a file up to date]
    [cvs: Multiple developers#index-update_002c-to-display-file-status update, to display file status][cvs: Multiple developers#File-status File status]
    [cvs: Multiple developers#index-Updating-a-file Updating a file][cvs: Multiple developers#Updating-a-file Bringing a file up to date]
    [cvs: The Repository#index-User-aliases User aliases][cvs: The Repository#Password-authentication-server Setting up the server for password authentication]
    [cvs: Reference manual for Administrative files#index-User-variables User variables][cvs: Reference manual for Administrative files#Variables Expansions in administrative files]
    [cvs: Reference manual for Administrative files#index-USER_002c-environment-variable USER, environment variable][cvs: Reference manual for Administrative files#Variables Expansions in administrative files]
    [cvs: Reference manual for Administrative files#index-USER_002c-internal-variable USER, internal variable][cvs: Reference manual for Administrative files#Variables Expansions in administrative files]
    [cvs: Guide to CVS commands#index-UserAdminOptions_002c-in-CVSROOT_002fconfig UserAdminOptions, in CVSROOT/config][cvs: Guide to CVS commands#admin admin—Administration]
    [cvs: Reference manual for Administrative files#index-UserAdminOptions_002c-in-CVSROOT_002fconfig-1 UserAdminOptions, in CVSROOT/config][cvs: Reference manual for Administrative files#config The CVSROOT/config configuration file]
    [cvs: Multiple developers#index-users-_0028admin-file_0029 users (admin file)][cvs: Multiple developers#Getting-Notified Telling CVS to notify you]

    V
    [cvs: Reference manual for Administrative files#index-Variables Variables][cvs: Reference manual for Administrative files#Variables Expansions in administrative files]
    [cvs: Tracking third-party sources#index-Vendor Vendor][cvs: Tracking third-party sources#Tracking-sources Tracking third-party sources]
    [cvs: Tracking third-party sources#index-Vendor-branch Vendor branch][cvs: Tracking third-party sources#Tracking-sources Tracking third-party sources]
    [cvs: Reference manual for Administrative files#index-verifymsg-_0028admin-file_0029 ‘verifymsg’ (admin file)][cvs: Reference manual for Administrative files#verifymsg Verifying log messages]
    [cvs: Reference manual for Administrative files#index-verifymsg_002c-changing-the-log-message ‘verifymsg’, changing the log message][cvs: Reference manual for Administrative files#verifymsg Verifying log messages]
    [cvs: Reference manual for Administrative files#index-verifymsg_002c-changing-the-log-message-1 ‘verifymsg’, changing the log message][cvs: Reference manual for Administrative files#config The CVSROOT/config configuration file]
    [cvs: Quick reference to CVS commands#index-version-_0028subcommand_0029 version (subcommand)][cvs: Quick reference to CVS commands#Invoking-CVS Quick reference to CVS commands]
    [cvs: Compatibility between CVS Versions#index-Versions_002c-of-CVS Versions, of CVS][cvs: Compatibility between CVS Versions#Compatibility Compatibility between CVS Versions]
    [cvs: Revisions#index-Versions_002c-revisions-and-releases Versions, revisions and releases][cvs: Revisions#Versions-revisions-releases Versions, revisions and releases]
    [cvs: Overview#index-Viewing-differences Viewing differences][cvs: Overview#Viewing-differences Viewing differences]
    [cvs: Overview#index-VISUAL_002c-environment-variable VISUAL, environment variable][cvs: Overview#Committing-your-changes Committing your changes]
    [cvs: All environment variables which affect CVS#index-VISUAL_002c-environment-variable-1 VISUAL, environment variable][cvs: All environment variables which affect CVS#Environment-variables All environment variables which affect CVS]
    [cvs: Reference manual for Administrative files#index-VISUAL_002c-internal-variable VISUAL, internal variable][cvs: Reference manual for Administrative files#Variables Expansions in administrative files]

    W
    [cvs: Multiple developers#index-watch-add-_0028subcommand_0029 watch add (subcommand)][cvs: Multiple developers#Getting-Notified Telling CVS to notify you]
    [cvs: Multiple developers#index-watch-off-_0028subcommand_0029 watch off (subcommand)][cvs: Multiple developers#Setting-a-watch Telling CVS to watch certain files]
    [cvs: Multiple developers#index-watch-on-_0028subcommand_0029 watch on (subcommand)][cvs: Multiple developers#Setting-a-watch Telling CVS to watch certain files]
    [cvs: Multiple developers#index-watch-remove-_0028subcommand_0029 watch remove (subcommand)][cvs: Multiple developers#Getting-Notified Telling CVS to notify you]
    [cvs: Multiple developers#index-watchers-_0028subcommand_0029 watchers (subcommand)][cvs: Multiple developers#Watch-information Information about who is watching and editing]
    [cvs: Multiple developers#index-Watches Watches][cvs: Multiple developers#Watches Mechanisms to track who is editing files]
    [cvs: Tracking third-party sources#index-wdiff-_0028import-example_0029 wdiff (import example)][cvs: Tracking third-party sources#First-import Importing for the first time]
    [cvs: Reference manual for Administrative files#index-Web-pages_002c-maintaining-with-CVS Web pages, maintaining with CVS][cvs: Reference manual for Administrative files#Keeping-a-checked-out-copy Keeping a checked out copy]
    [cvs: Keyword substitution#index-What-_0028shell-command_0029 What (shell command)][cvs: Keyword substitution#Using-keywords Using keywords]
    [cvs: Branching and merging#index-What-branches-are-good-for What branches are good for][cvs: Branching and merging#Branches-motivation What branches are good for]
    [cvs: Overview#index-What-is-CVS-not_003f What is CVS not?][cvs: Overview#What-is-CVS-not_003f What is CVS not?]
    [cvs: Overview#index-What-is-CVS_003f What is CVS?][cvs: Overview#What-is-CVS_003f What is CVS?]
    [cvs: Revision management#index-When-to-commit When to commit][cvs: Revision management#When-to-commit When to commit?]
    [cvs: The Repository#index-Windows_002c-and-permissions Windows, and permissions][cvs: The Repository#Windows-permissions File Permission issues specific to Windows]
    [cvs: Overview#index-Work_002dsession_002c-example-of Work-session, example of][cvs: Overview#A-sample-session A sample session]
    [cvs: Multiple developers#index-Working-copy Working copy][cvs: Multiple developers#Multiple-developers Multiple developers]
    [cvs: Overview#index-Working-copy_002c-removing Working copy, removing][cvs: Overview#Cleaning-up Cleaning up]
    [cvs: Reference manual for Administrative files#index-Wrappers Wrappers][cvs: Reference manual for Administrative files#Wrappers The cvswrappers file]
    [cvs: The Repository#index-writers-_0028admin-file_0029 writers (admin file)][cvs: The Repository#Read_002donly-access Read-only repository access]

    X
    [cvs: Dealing with bugs in CVS or this manual#index-Ximbiot Ximbiot][cvs: Dealing with bugs in CVS or this manual#BUGS Dealing with bugs in CVS or this manual]
    [cvs: The Repository#index-xinetd_002c-configuring-for-pserver xinetd, configuring for pserver][cvs: The Repository#Password-authentication-server Setting up the server for password authentication]

    Z
    [cvs: Guide to CVS commands#index-Zone_002c-time_002c-in-input Zone, time, in input][cvs: Guide to CVS commands#Common-options Common command options]
    [cvs: Guide to CVS commands#index-Zone_002c-time_002c-in-output Zone, time, in output][cvs: Guide to CVS commands#log log—Print out log information for files]


    Jump to: [[#Index-1_cp_symbol-1|!]] [[#Index-1_cp_symbol-2|#]] [[#Index-1_cp_symbol-3|&]] [[#Index-1_cp_symbol-4|-]] [[#Index-1_cp_symbol-5|.]] [[#Index-1_cp_symbol-6|/]] [[#Index-1_cp_symbol-7|:]] [[#Index-1_cp_symbol-8|<]] [[#Index-1_cp_symbol-9|=]] [[#Index-1_cp_symbol-10|>]] [[#Index-1_cp_symbol-11|_]] [[#Index-1_cp_letter-A|A]] [[#Index-1_cp_letter-B|B]] [[#Index-1_cp_letter-C|C]] [[#Index-1_cp_letter-D|D]] [[#Index-1_cp_letter-E|E]] [[#Index-1_cp_letter-F|F]] [[#Index-1_cp_letter-G|G]] [[#Index-1_cp_letter-H|H]] [[#Index-1_cp_letter-I|I]] [[#Index-1_cp_letter-J|J]] [[#Index-1_cp_letter-K|K]] [[#Index-1_cp_letter-L|L]] [[#Index-1_cp_letter-M|M]] [[#Index-1_cp_letter-N|N]] [[#Index-1_cp_letter-O|O]] [[#Index-1_cp_letter-P|P]] [[#Index-1_cp_letter-R|R]] [[#Index-1_cp_letter-S|S]] [[#Index-1_cp_letter-T|T]] [[#Index-1_cp_letter-U|U]] [[#Index-1_cp_letter-V|V]] [[#Index-1_cp_letter-W|W]] [[#Index-1_cp_letter-X|X]] [[#Index-1_cp_letter-Z|Z]]
    |[cvs: Dealing with bugs in CVS or this manual#BUGS << ]| [ >> ]           |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[[#Index|Index]]| |[cvs: About this Manual#SEC_About ? ]|
    This document was generated by a tester on a sunny day using [http://www.nongnu.org/texi2html/ texi2html]. texi2html-1.82/test/manuals/res/ccvs_mediawiki/cvs: Revisions0000644000175000017500000011120211264347121026171 0ustar flichtenheldflichtenheld
    |[cvs: Starting a project with CVS#Defining-the-module < ]| |[[#Revision-numbers| > ]]|   |[cvs: Starting a project with CVS#Starting-a-new-project << ]| |[[cvs#Top| Up ]]| |[cvs: Branching and merging#Branching-and-merging >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    == Revisions ==

    For many uses of CVS, one doesn’t need to worry too much about revision numbers; CVS assigns numbers such as 1.1, 1.2, and so on, and that is all one needs to know. However, some people prefer to have more knowledge and control concerning how CVS assigns revision numbers.

    If one wants to keep track of a set of revisions involving more than one file, such as which revisions went into a particular release, one uses a tag, which is a symbolic revision which can be assigned to a numeric revision in each file.


    |[[#Revisions| < ]]| |[[#Versions-revisions-releases| > ]]|   |[[#Revisions| << ]]| |[[#Revisions| Up ]]| |[cvs: Branching and merging#Branching-and-merging >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Revision numbers ===

    Each version of a file has a unique revision number. Revision numbers look like ‘1.1’, ‘1.2’, ‘1.3.2.2’ or even ‘1.3.2.2.4.5’. A revision number always has an even number of period-separated decimal integers. By default revision 1.1 is the first revision of a file. Each successive revision is given a new number by increasing the rightmost number by one. The following figure displays a few revisions, with newer revisions to the right.

     
           +-----+    +-----+    +-----+    +-----+    +-----+
           ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 !
           +-----+    +-----+    +-----+    +-----+    +-----+
    

    It is also possible to end up with numbers containing more than one period, for example ‘1.3.2.2’. Such revisions represent revisions on branches (see section [cvs: Branching and merging#Branching-and-merging Branching and merging]); such revision numbers are explained in detail in [cvs: Branching and merging#Branches-and-revisions Branches and revisions].


    |[[#Revision-numbers| < ]]| |[[#Assigning-revisions| > ]]|   |[[#Revisions| << ]]| |[[#Revisions| Up ]]| |[cvs: Branching and merging#Branching-and-merging >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Versions, revisions and releases ===

    A file can have several versions, as described above. Likewise, a software product can have several versions. A software product is often given a version number such as ‘4.1.1’.

    Versions in the first sense are called revisions in this document, and versions in the second sense are called releases. To avoid confusion, the word version is almost never used in this document.


    |[[#Versions-revisions-releases| < ]]| |[[#Tags| > ]]|   |[[#Revisions| << ]]| |[[#Revisions| Up ]]| |[cvs: Branching and merging#Branching-and-merging >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Assigning revisions ===

    By default, CVS will assign numeric revisions by leaving the first number the same and incrementing the second number. For example, 1.1, 1.2, 1.3, etc.

    When adding a new file, the second number will always be one and the first number will equal the highest first number of any file in that directory. For example, the current directory contains files whose highest numbered revisions are 1.7, 3.1, and 4.12, then an added file will be given the numeric revision 4.1.

    Normally there is no reason to care about the revision numbers—it is easier to treat them as internal numbers that CVS maintains, and tags provide a better way to distinguish between things like release 1 versus release 2 of your product (see section [[#Tags|Tags–Symbolic revisions]]). However, if you want to set the numeric revisions, the ‘-r’ option to cvs commit can do that. The ‘-r’ option implies the ‘-f’ option, in the sense that it causes the files to be committed even if they are not modified.

    For example, to bring all your files up to revision 3.0 (including those that haven’t changed), you might invoke:

     
    $ cvs commit -r 3.0
    

    Note that the number you specify with ‘-r’ must be larger than any existing revision number. That is, if revision 3.0 exists, you cannot ‘cvs commit -r 1.3’. If you want to maintain several releases in parallel, you need to use a branch (see section [cvs: Branching and merging#Branching-and-merging Branching and merging]).


    |[[#Assigning-revisions| < ]]| |[[#Tagging-the-working-directory| > ]]|   |[[#Revisions| << ]]| |[[#Revisions| Up ]]| |[cvs: Branching and merging#Branching-and-merging >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Tags–Symbolic revisions ===

    The revision numbers live a life of their own. They need not have anything at all to do with the release numbers of your software product. Depending on how you use CVS the revision numbers might change several times between two releases. As an example, some of the source files that make up RCS 5.6 have the following revision numbers:

     
    ci.c            5.21
    co.c            5.9
    ident.c         5.3
    rcs.c           5.12
    rcsbase.h       5.11
    rcsdiff.c       5.10
    rcsedit.c       5.11
    rcsfcmp.c       5.9
    rcsgen.c        5.10
    rcslex.c        5.11
    rcsmap.c        5.2
    rcsutil.c       5.10
    

    You can use the tag command to give a symbolic name to a certain revision of a file. You can use the ‘-v’ flag to the status command to see all tags that a file has, and which revision numbers they represent. Tag names must start with an uppercase or lowercase letter and can contain uppercase and lowercase letters, digits, ‘-’, and ‘_’. The two tag names BASE and HEAD are reserved for use by CVS. It is expected that future names which are special to CVS will be specially named, for example by starting with ‘.’, rather than being named analogously to BASE and HEAD, to avoid conflicts with actual tag names.

    You’ll want to choose some convention for naming tags, based on information such as the name of the program and the version number of the release. For example, one might take the name of the program, immediately followed by the version number with ‘.’ changed to ‘-’, so that CVS 1.9 would be tagged with the name cvs1-9. If you choose a consistent convention, then you won’t constantly be guessing whether a tag is cvs-1-9 or cvs1_9 or what. You might even want to consider enforcing your convention in the taginfo file (see section [cvs: History browsing#user_002ddefined-logging User-defined logging]).

    The following example shows how you can add a tag to a file. The commands must be issued inside your working directory. That is, you should issue the command in the directory where ‘backend.c’ resides.

     
    $ cvs tag rel-0-4 backend.c
    T backend.c
    $ cvs status -v backend.c
    ===================================================================
    File: backend.c         Status: Up-to-date
    
        Version:            1.4     Tue Dec  1 14:39:01 1992
        RCS Version:        1.4     /u/cvsroot/yoyodyne/tc/backend.c,v
        Sticky Tag:         (none)
        Sticky Date:        (none)
        Sticky Options:     (none)
    
        Existing Tags:
            rel-0-4                     (revision: 1.4)
    
    

    For a complete summary of the syntax of cvs tag, including the various options, see [cvs: Quick reference to CVS commands#Invoking-CVS Quick reference to CVS commands].

    There is seldom reason to tag a file in isolation. A more common use is to tag all the files that constitute a module with the same tag at strategic points in the development life-cycle, such as when a release is made.

     
    $ cvs tag rel-1-0 .
    cvs tag: Tagging .
    T Makefile
    T backend.c
    T driver.c
    T frontend.c
    T parser.c
    

    (When you give CVS a directory as argument, it generally applies the operation to all the files in that directory, and (recursively), to any subdirectories that it may contain. See section [cvs: Recursive behavior#Recursive-behavior Recursive behavior].)

    The checkout command has a flag, ‘-r’, that lets you check out a certain revision of a module. This flag makes it easy to retrieve the sources that make up release 1.0 of the module ‘tc’ at any time in the future:

     
    $ cvs checkout -r rel-1-0 tc
    

    This is useful, for instance, if someone claims that there is a bug in that release, but you cannot find the bug in the current working copy.

    You can also check out a module as it was at any given date. See section [cvs: Guide to CVS commands#checkout-options checkout options]. When specifying ‘-r’ to any of these commands, you will need beware of sticky tags; see [[#Sticky-tags|Sticky tags]].

    When you tag more than one file with the same tag you can think about the tag as "a curve drawn through a matrix of filename vs. revision number." Say we have 5 files with the following revisions:

     
            file1   file2   file3   file4   file5
    
            1.1     1.1     1.1     1.1  /--1.1*      <-*-  TAG
            1.2*-   1.2     1.2    -1.2*-
            1.3  \- 1.3*-   1.3   / 1.3
            1.4          \  1.4  /  1.4
                          \-1.5*-   1.5
                            1.6
    

    At some time in the past, the * versions were tagged. You can think of the tag as a handle attached to the curve drawn through the tagged revisions. When you pull on the handle, you get all the tagged revisions. Another way to look at it is that you "sight" through a set of revisions that is "flat" along the tagged revisions, like this:

     
            file1   file2   file3   file4   file5
    
                            1.1
                            1.2
                    1.1     1.3                       _
            1.1     1.2     1.4     1.1              /
            1.2*----1.3*----1.5*----1.2*----1.1     (--- <--- Look here
            1.3             1.6     1.3              \_
            1.4                     1.4
                                    1.5
    

    |[[#Tags| < ]]| |[[#Tagging-by-date_002ftag| > ]]|   |[[#Revisions| << ]]| |[[#Revisions| Up ]]| |[cvs: Branching and merging#Branching-and-merging >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Specifying what to tag from the working directory ===

    The example in the previous section demonstrates one of the most common ways to choose which revisions to tag. Namely, running the cvs tag command without arguments causes CVS to select the revisions which are checked out in the current working directory. For example, if the copy of ‘backend.c’ in working directory was checked out from revision 1.4, then CVS will tag revision 1.4. Note that the tag is applied immediately to revision 1.4 in the repository; tagging is not like modifying a file, or other operations in which one first modifies the working directory and then runs cvs commit to transfer that modification to the repository.

    One potentially surprising aspect of the fact that cvs tag operates on the repository is that you are tagging the checked-in revisions, which may differ from locally modified files in your working directory. If you want to avoid doing this by mistake, specify the ‘-c’ option to cvs tag. If there are any locally modified files, CVS will abort with an error before it tags any files:

     
    $ cvs tag -c rel-0-4
    cvs tag: backend.c is locally modified
    cvs [tag aborted]: correct the above errors first!
    

    |[[#Tagging-the-working-directory| < ]]| |[[#Modifying-tags| > ]]|   |[[#Revisions| << ]]| |[[#Revisions| Up ]]| |[cvs: Branching and merging#Branching-and-merging >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Specifying what to tag by date or revision ===

    The cvs rtag command tags the repository as of a certain date or time (or can be used to tag the latest revision). rtag works directly on the repository contents (it requires no prior checkout and does not look for a working directory).

    The following options specify which date or revision to tag. See [cvs: Guide to CVS commands#Common-options Common command options], for a complete description of them.

    -D date

    Tag the most recent revision no later than date.

    -f

    Only useful with the ‘-D date’ or ‘-r tag’ flags. If no matching revision is found, use the most recent revision (instead of ignoring the file).

    -r tag

    Only tag those files that contain existing tag tag.

    The cvs tag command also allows one to specify files by revision or date, using the same ‘-r’, ‘-D’, and ‘-f’ options. However, this feature is probably not what you want. The reason is that cvs tag chooses which files to tag based on the files that exist in the working directory, rather than the files which existed as of the given tag/date. Therefore, you are generally better off using cvs rtag. The exceptions might be cases like:

     
    cvs tag -r 1.4 stable backend.c
    

    |[[#Tagging-by-date_002ftag| < ]]| |[[#Tagging-add_002fremove| > ]]|   |[[#Revisions| << ]]| |[[#Revisions| Up ]]| |[cvs: Branching and merging#Branching-and-merging >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Deleting, moving, and renaming tags ===

    Normally one does not modify tags. They exist in order to record the history of the repository and so deleting them or changing their meaning would, generally, not be what you want.

    However, there might be cases in which one uses a tag temporarily or accidentally puts one in the wrong place. Therefore, one might delete, move, or rename a tag.

    WARNING: the commands in this section are dangerous; they permanently discard historical information and it can be difficult or impossible to recover from errors. If you are a CVS administrator, you may consider restricting these commands with taginfo (see section [cvs: History browsing#user_002ddefined-logging User-defined logging]).

    To delete a tag, specify the ‘-d’ option to either cvs tag or cvs rtag. For example:

     
    cvs rtag -d rel-0-4 tc
    

    deletes the non-branch tag rel-0-4 from the module tc. In the event that branch tags are encountered within the repository with the given name, a warning message will be issued and the branch tag will not be deleted. If you are absolutely certain you know what you are doing, the -B option may be specified to allow deletion of branch tags. In that case, any non-branch tags encountered will trigger warnings and will not be deleted.

    WARNING: Moving branch tags is very dangerous! If you think you need the -B option, think again and ask your CVS administrator about it (if that isn’t you). There is almost certainly another way to accomplish what you want to accomplish.

    When we say move a tag, we mean to make the same name point to different revisions. For example, the stable tag may currently point to revision 1.4 of ‘backend.c’ and perhaps we want to make it point to revision 1.6. To move a non-branch tag, specify the ‘-F’ option to either cvs tag or cvs rtag. For example, the task just mentioned might be accomplished as:

     
    cvs tag -r 1.6 -F stable backend.c
    

    If any branch tags are encountered in the repository with the given name, a warning is issued and the branch tag is not disturbed. If you are absolutely certain you wish to move the branch tag, the -B option may be specified. In that case, non-branch tags encountered with the given name are ignored with a warning message.

    WARNING: Moving branch tags is very dangerous! If you think you need the -B option, think again and ask your CVS administrator about it (if that isn’t you). There is almost certainly another way to accomplish what you want to accomplish.

    When we say rename a tag, we mean to make a different name point to the same revisions as the old tag. For example, one may have misspelled the tag name and want to correct it (hopefully before others are relying on the old spelling). To rename a tag, first create a new tag using the ‘-r’ option to cvs rtag, and then delete the old name. (Caution: this method will not work with branch tags.) This leaves the new tag on exactly the same files as the old tag. For example:

     
    cvs rtag -r old-name-0-4 rel-0-4 tc
    cvs rtag -d old-name-0-4 tc
    

    |[[#Modifying-tags| < ]]| |[[#Sticky-tags| > ]]|   |[[#Revisions| << ]]| |[[#Revisions| Up ]]| |[cvs: Branching and merging#Branching-and-merging >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Tagging and adding and removing files ===

    The subject of exactly how tagging interacts with adding and removing files is somewhat obscure; for the most part CVS will keep track of whether files exist or not without too much fussing. By default, tags are applied to only files which have a revision corresponding to what is being tagged. Files which did not exist yet, or which were already removed, simply omit the tag, and CVS knows to treat the absence of a tag as meaning that the file didn’t exist as of that tag.

    However, this can lose a small amount of information. For example, suppose a file was added and then removed. Then, if the tag is missing for that file, there is no way to know whether the tag refers to the time before the file was added, or the time after it was removed. If you specify the ‘-r’ option to cvs rtag, then CVS tags the files which have been removed, and thereby avoids this problem. For example, one might specify -r HEAD to tag the head.

    On the subject of adding and removing files, the cvs rtag command has a ‘-a’ option which means to clear the tag from removed files that would not otherwise be tagged. For example, one might specify this option in conjunction with ‘-F’ when moving a tag. If one moved a tag without ‘-a’, then the tag in the removed files might still refer to the old revision, rather than reflecting the fact that the file had been removed. I don’t think this is necessary if ‘-r’ is specified, as noted above.


    |[[#Tagging-add_002fremove| < ]]| |[cvs: Branching and merging#Branching-and-merging > ]|   |[[#Revisions| << ]]| |[[#Revisions| Up ]]| |[cvs: Branching and merging#Branching-and-merging >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Sticky tags ===

    Sometimes a working copy’s revision has extra data associated with it, for example it might be on a branch (see section [cvs: Branching and merging#Branching-and-merging Branching and merging]), or restricted to versions prior to a certain date by ‘checkout -D’ or ‘update -D’. Because this data persists – that is, it applies to subsequent commands in the working copy – we refer to it as sticky.

    Most of the time, stickiness is an obscure aspect of CVS that you don’t need to think about. However, even if you don’t want to use the feature, you may need to know something about sticky tags (for example, how to avoid them!).

    You can use the status command to see if any sticky tags or dates are set:

     
    $ cvs status driver.c
    ===================================================================
    File: driver.c          Status: Up-to-date
    
        Version:            1.7.2.1 Sat Dec  5 19:35:03 1992
        RCS Version:        1.7.2.1 /u/cvsroot/yoyodyne/tc/driver.c,v
        Sticky Tag:         rel-1-0-patches (branch: 1.7.2)
        Sticky Date:        (none)
        Sticky Options:     (none)
    
    

    The sticky tags will remain on your working files until you delete them with ‘cvs update -A’. The ‘-A’ option merges local changes into the version of the file from the head of the trunk, removing any sticky tags, dates, or options. See [cvs: Guide to CVS commands#update update—Bring work tree in sync with repository] for more on the operation of cvs update.

    The most common use of sticky tags is to identify which branch one is working on, as described in [cvs: Branching and merging#Accessing-branches Accessing branches]. However, non-branch sticky tags have uses as well. For example, suppose that you want to avoid updating your working directory, to isolate yourself from possibly destabilizing changes other people are making. You can, of course, just refrain from running cvs update. But if you want to avoid updating only a portion of a larger tree, then sticky tags can help. If you check out a certain revision (such as 1.4) it will become sticky. Subsequent cvs update commands will not retrieve the latest revision until you reset the tag with cvs update -A. Likewise, use of the ‘-D’ option to update or checkout sets a sticky date, which, similarly, causes that date to be used for future retrievals.

    People often want to retrieve an old version of a file without setting a sticky tag. This can be done with the ‘-p’ option to checkout or update, which sends the contents of the file to standard output. For example:

     
    $ cvs update -p -r 1.1 file1 >file1
    ===================================================================
    Checking out file1
    RCS:  /tmp/cvs-sanity/cvsroot/first-dir/Attic/file1,v
    VERS: 1.1
    ***************
    $
    

    However, this isn’t the easiest way, if you are asking how to undo a previous checkin (in this example, put ‘file1’ back to the way it was as of revision 1.1). In that case you are better off using the ‘-j’ option to update; for further discussion see [cvs: Branching and merging#Merging-two-revisions Merging differences between any two revisions].


    |[[#Revisions| << ]]| |[cvs: Branching and merging#Branching-and-merging >> ]|           |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    This document was generated by a tester on a sunny day using [http://www.nongnu.org/texi2html/ texi2html]. ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootroottexi2html-1.82/test/manuals/res/ccvs_mediawiki/cvs: Adding, removing, and renaming files and directoriestexi2html-1.82/test/manuals/res/ccvs_mediawiki/cvs: Adding, removing, and renaming files and directo0000644000175000017500000006427711264347121035104 0ustar flichtenheldflichtenheld
    |[cvs: Recursive behavior#Recursive-behavior < ]| |[[#Adding-files| > ]]|   |[cvs: Recursive behavior#Recursive-behavior << ]| |[[cvs#Top| Up ]]| |[cvs: History browsing#History-browsing >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    == Adding, removing, and renaming files and directories ==

    In the course of a project, one will often add new files. Likewise with removing or renaming, or with directories. The general concept to keep in mind in all these cases is that instead of making an irreversible change you want CVS to record the fact that a change has taken place, just as with modifying an existing file. The exact mechanisms to do this in CVS vary depending on the situation.


    |[[#Adding-and-removing| < ]]| |[[#Removing-files| > ]]|   |[[#Adding-and-removing| << ]]| |[[#Adding-and-removing| Up ]]| |[cvs: History browsing#History-browsing >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Adding files to a directory ===

    To add a new file to a directory, follow these steps.

    • You must have a working copy of the directory. See section [cvs: Overview#Getting-the-source Getting the source].
    • Create the new file inside your working copy of the directory.
    • Use ‘cvs add filename’ to tell CVS that you want to version control the file. If the file contains binary data, specify ‘-kb’ (see section [cvs: Handling binary files#Binary-files Handling binary files]).
    • Use ‘cvs commit filename’ to actually check in the file into the repository. Other developers cannot see the file until you perform this step.

    You can also use the add command to add a new directory.

    Unlike most other commands, the add command is not recursive. You cannot even type ‘cvs add foo/bar’! Instead, you have to

     
    $ cd foo
    $ cvs add bar
    
    Command: cvs add [-k kflag] [-m message] files …

    Schedule files to be added to the repository. The files or directories specified with add must already exist in the current directory. To add a whole new directory hierarchy to the source repository (for example, files received from a third-party vendor), use the import command instead. See section [cvs: Guide to CVS commands#import import—Import sources into CVS, using vendor branches].

    The added files are not placed in the source repository until you use commit to make the change permanent. Doing an add on a file that was removed with the remove command will undo the effect of the remove, unless a commit command intervened. See section [[#Removing-files|Removing files]], for an example.

    The ‘-k’ option specifies the default way that this file will be checked out; for more information see [cvs: Keyword substitution#Substitution-modes Substitution modes].

    The ‘-m’ option specifies a description for the file. This description appears in the history log (if it is enabled, see section [cvs: Reference manual for Administrative files#history-file The history file]). It will also be saved in the version history inside the repository when the file is committed. The log command displays this description. The description can be changed using ‘admin -t’. See section [cvs: Guide to CVS commands#admin admin—Administration]. If you omit the ‘-m description’ flag, an empty string will be used. You will not be prompted for a description.

    For example, the following commands add the file ‘backend.c’ to the repository:

     
    $ cvs add backend.c
    $ cvs commit -m "Early version. Not yet compilable." backend.c
    

    When you add a file it is added only on the branch which you are working on (see section [cvs: Branching and merging#Branching-and-merging Branching and merging]). You can later merge the additions to another branch if you want (see section [cvs: Branching and merging#Merging-adds-and-removals Merging can add or remove files]).


    |[[#Adding-files| < ]]| |[[#Removing-directories| > ]]|   |[[#Adding-and-removing| << ]]| |[[#Adding-and-removing| Up ]]| |[cvs: History browsing#History-browsing >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Removing files ===

    Directories change. New files are added, and old files disappear. Still, you want to be able to retrieve an exact copy of old releases.

    Here is what you can do to remove a file, but remain able to retrieve old revisions:

    • Make sure that you have not made any uncommitted modifications to the file. See section [cvs: Overview#Viewing-differences Viewing differences], for one way to do that. You can also use the status or update command. If you remove the file without committing your changes, you will of course not be able to retrieve the file as it was immediately before you deleted it.
    • Remove the file from your working copy of the directory. You can for instance use rm.
    • Use ‘cvs remove filename’ to tell CVS that you really want to delete the file.
    • Use ‘cvs commit filename’ to actually perform the removal of the file from the repository.

    When you commit the removal of the file, CVS records the fact that the file no longer exists. It is possible for a file to exist on only some branches and not on others, or to re-add another file with the same name later. CVS will correctly create or not create the file, based on the ‘-r’ and ‘-D’ options specified to checkout or update.

    Command: cvs remove [options] files …

    Schedule file(s) to be removed from the repository (files which have not already been removed from the working directory are not processed). This command does not actually remove the file from the repository until you commit the removal. For a full list of options, see [cvs: Quick reference to CVS commands#Invoking-CVS Quick reference to CVS commands].

    Here is an example of removing several files:

     
    $ cd test
    $ rm *.c
    $ cvs remove
    cvs remove: Removing .
    cvs remove: scheduling a.c for removal
    cvs remove: scheduling b.c for removal
    cvs remove: use 'cvs commit' to remove these files permanently
    $ cvs ci -m "Removed unneeded files"
    cvs commit: Examining .
    cvs commit: Committing .
    

    As a convenience you can remove the file and cvs remove it in one step, by specifying the ‘-f’ option. For example, the above example could also be done like this:

     
    $ cd test
    $ cvs remove -f *.c
    cvs remove: scheduling a.c for removal
    cvs remove: scheduling b.c for removal
    cvs remove: use 'cvs commit' to remove these files permanently
    $ cvs ci -m "Removed unneeded files"
    cvs commit: Examining .
    cvs commit: Committing .
    

    If you execute remove for a file, and then change your mind before you commit, you can undo the remove with an add command.

     
    $ ls
    CVS   ja.h  oj.c
    $ rm oj.c
    $ cvs remove oj.c
    cvs remove: scheduling oj.c for removal
    cvs remove: use 'cvs commit' to remove this file permanently
    $ cvs add oj.c
    U oj.c
    cvs add: oj.c, version 1.1.1.1, resurrected
    

    If you realize your mistake before you run the remove command you can use update to resurrect the file:

     
    $ rm oj.c
    $ cvs update oj.c
    cvs update: warning: oj.c was lost
    U oj.c
    

    When you remove a file it is removed only on the branch which you are working on (see section [cvs: Branching and merging#Branching-and-merging Branching and merging]). You can later merge the removals to another branch if you want (see section [cvs: Branching and merging#Merging-adds-and-removals Merging can add or remove files]).


    |[[#Removing-files| < ]]| |[[#Moving-files| > ]]|   |[[#Adding-and-removing| << ]]| |[[#Adding-and-removing| Up ]]| |[cvs: History browsing#History-browsing >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Removing directories ===

    In concept removing directories is somewhat similar to removing files—you want the directory to not exist in your current working directories, but you also want to be able to retrieve old releases in which the directory existed.

    The way that you remove a directory is to remove all the files in it. You don’t remove the directory itself; there is no way to do that. Instead you specify the ‘-P’ option to cvs update or cvs checkout, which will cause CVS to remove empty directories from working directories. (Note that cvs export always removes empty directories.) Probably the best way to do this is to always specify ‘-P’; if you want an empty directory then put a dummy file (for example ‘.keepme’) in it to prevent ‘-P’ from removing it.

    Note that ‘-P’ is implied by the ‘-r’ or ‘-D’ options of checkout. This way CVS will be able to correctly create the directory or not depending on whether the particular version you are checking out contains any files in that directory.


    |[[#Removing-directories| < ]]| |[[#Outside| > ]]|   |[[#Adding-and-removing| << ]]| |[[#Adding-and-removing| Up ]]| |[cvs: History browsing#History-browsing >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Moving and renaming files ===

    Moving files to a different directory or renaming them is not difficult, but some of the ways in which this works may be non-obvious. (Moving or renaming a directory is even harder. See section [[#Moving-directories|Moving and renaming directories]].).

    The examples below assume that the file old is renamed to new.


    |[[#Moving-files| < ]]| |[[#Inside| > ]]|   |[[#Adding-and-removing| << ]]| |[[#Moving-files| Up ]]| |[cvs: History browsing#History-browsing >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== The Normal way to Rename ====

    The normal way to move a file is to copy old to new, and then issue the normal CVS commands to remove old from the repository, and add new to it.

     
    $ mv old new
    $ cvs remove old
    $ cvs add new
    $ cvs commit -m "Renamed old to new" old new
    

    This is the simplest way to move a file, it is not error-prone, and it preserves the history of what was done. Note that to access the history of the file you must specify the old or the new name, depending on what portion of the history you are accessing. For example, cvs log old will give the log up until the time of the rename.

    When new is committed its revision numbers will start again, usually at 1.1, so if that bothers you, use the ‘-r rev’ option to commit. For more information see [cvs: Revisions#Assigning-revisions Assigning revisions].


    |[[#Outside| < ]]| |[[#Rename-by-copying| > ]]|   |[[#Adding-and-removing| << ]]| |[[#Moving-files| Up ]]| |[cvs: History browsing#History-browsing >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== Moving the history file ====

    This method is more dangerous, since it involves moving files inside the repository. Read this entire section before trying it out!

     
    $ cd $CVSROOT/dir
    $ mv old,v new,v
    

    Advantages:

    • The log of changes is maintained intact.
    • The revision numbers are not affected.

    Disadvantages:

    • Old releases cannot easily be fetched from the repository. (The file will show up as new even in revisions from the time before it was renamed).
    • There is no log information of when the file was renamed.
    • Nasty things might happen if someone accesses the history file while you are moving it. Make sure no one else runs any of the CVS commands while you move it.

    |[[#Inside| < ]]| |[[#Moving-directories| > ]]|   |[[#Adding-and-removing| << ]]| |[[#Moving-files| Up ]]| |[cvs: History browsing#History-browsing >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== Copying the history file ====

    This way also involves direct modifications to the repository. It is safe, but not without drawbacks.

     
    # Copy the RCS file inside the repository
    $ cd $CVSROOT/dir
    $ cp old,v new,v
    # Remove the old file
    $ cd ~/dir
    $ rm old
    $ cvs remove old
    $ cvs commit old
    # Remove all tags from new
    $ cvs update new
    $ cvs log new             # Remember the non-branch tag names
    $ cvs tag -d tag1 new
    $ cvs tag -d tag2 new

    By removing the tags you will be able to check out old revisions.

    Advantages:

    • Checking out old revisions works correctly, as long as you use ‘-rtag’ and not ‘-Ddate’ to retrieve the revisions.
    • The log of changes is maintained intact.
    • The revision numbers are not affected.

    Disadvantages:

    • You cannot easily see the history of the file across the rename.

    |[[#Rename-by-copying| < ]]| |[cvs: History browsing#History-browsing > ]|   |[[#Adding-and-removing| << ]]| |[[#Adding-and-removing| Up ]]| |[cvs: History browsing#History-browsing >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Moving and renaming directories ===

    The normal way to rename or move a directory is to rename or move each file within it as described in [[#Outside|The Normal way to Rename]]. Then check out with the ‘-P’ option, as described in [[#Removing-directories|Removing directories]].

    If you really want to hack the repository to rename or delete a directory in the repository, you can do it like this:

    1. Inform everyone who has a checked out copy of the directory that the directory will be renamed. They should commit all their changes, and remove their working copies, before you take the steps below.
    2. Rename the directory inside the repository.
       
      $ cd $CVSROOT/parent-dir
      $ mv old-dir new-dir
      
    3. Fix the CVS administrative files, if necessary (for instance if you renamed an entire module).
    4. Tell everyone that they can check out again and continue working.

    If someone had a working copy the CVS commands will cease to work for him, until he removes the directory that disappeared inside the repository.

    It is almost always better to move the files in the directory instead of moving the directory. If you move the directory you are unlikely to be able to retrieve old releases correctly, since they probably depend on the name of the directories.


    |[[#Adding-and-removing| << ]]| |[cvs: History browsing#History-browsing >> ]|           |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    This document was generated by a tester on a sunny day using [http://www.nongnu.org/texi2html/ texi2html]. texi2html-1.82/test/manuals/res/ccvs_mediawiki/cvs: History browsing0000644000175000017500000002752511264347121027502 0ustar flichtenheldflichtenheld
    |[cvs: Adding, removing, and renaming files and directories#Moving-directories < ]| |[[#log-messages| > ]]|   |[cvs: Adding, removing, and renaming files and directories#Adding-and-removing << ]| |[[cvs#Top| Up ]]| |[cvs: Handling binary files#Binary-files >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    == History browsing ==

    Once you have used CVS to store a version control history—what files have changed when, how, and by whom, there are a variety of mechanisms for looking through the history.


    |[[#History-browsing| < ]]| |[[#history-database| > ]]|   |[[#History-browsing| << ]]| |[[#History-browsing| Up ]]| |[cvs: Handling binary files#Binary-files >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Log messages ===

    Whenever you commit a file you specify a log message.

    To look through the log messages which have been specified for every revision which has been committed, use the cvs log command (see section [cvs: Guide to CVS commands#log log—Print out log information for files]).


    |[[#log-messages| < ]]| |[[#user_002ddefined-logging| > ]]|   |[[#History-browsing| << ]]| |[[#History-browsing| Up ]]| |[cvs: Handling binary files#Binary-files >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === The history database ===

    You can use the history file (see section [cvs: Reference manual for Administrative files#history-file The history file]) to log various CVS actions. To retrieve the information from the history file, use the cvs history command (see section [cvs: Guide to CVS commands#history history—Show status of files and users]).

    Note: you can control what is logged to this file by using the ‘LogHistory’ keyword in the ‘CVSROOT/config’ file (see section [cvs: Reference manual for Administrative files#config The CVSROOT/config configuration file]).


    |[[#history-database| < ]]| |[[#annotate| > ]]|   |[[#History-browsing| << ]]| |[[#History-browsing| Up ]]| |[cvs: Handling binary files#Binary-files >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === User-defined logging ===

    You can customize CVS to log various kinds of actions, in whatever manner you choose. These mechanisms operate by executing a script at various times. The script might append a message to a file listing the information and the programmer who created it, or send mail to a group of developers, or, perhaps, post a message to a particular newsgroup. To log commits, use the ‘loginfo’ file (see section [cvs: Reference manual for Administrative files#loginfo Loginfo]). To log commits, checkouts, exports, and tags, respectively, you can also use the ‘-i’, ‘-o’, ‘-e’, and ‘-t’ options in the modules file. For a more flexible way of giving notifications to various users, which requires less in the way of keeping centralized scripts up to date, use the cvs watch add command (see section [cvs: Multiple developers#Getting-Notified Telling CVS to notify you]); this command is useful even if you are not using cvs watch on.

    The ‘taginfo’ file defines programs to execute when someone executes a tag or rtag command. The ‘taginfo’ file has the standard form for administrative files (see section [cvs: Reference manual for Administrative files#Administrative-files Reference manual for Administrative files]), where each line is a regular expression followed by a command to execute. The arguments passed to the command are, in order, the tagname, operation (add for tag, mov for tag -F, and del for tag -d), repository, and any remaining are pairs of filename revision. A non-zero exit of the filter program will cause the tag to be aborted.

    Here is an example of using taginfo to log tag and rtag commands. In the taginfo file put:

     
    ALL /usr/local/cvsroot/CVSROOT/loggit
    

    Where ‘/usr/local/cvsroot/CVSROOT/loggit’ contains the following script:

     
    #!/bin/sh
    echo "$@" >>/home/kingdon/cvsroot/CVSROOT/taglog
    

    |[[#user_002ddefined-logging| < ]]| |[cvs: Handling binary files#Binary-files > ]|   |[[#History-browsing| << ]]| |[[#History-browsing| Up ]]| |[cvs: Handling binary files#Binary-files >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Annotate command ===
    Command: cvs annotate [-FflR] [-r rev|-D date] files …

    For each file in files, print the head revision of the trunk, together with information on the last modification for each line. For example:

     
    $ cvs annotate ssfile
    Annotations for ssfile
    ***************
    1.1          (mary     27-Mar-96): ssfile line 1
    1.2          (joe      28-Mar-96): ssfile line 2
    

    The file ‘ssfile’ currently contains two lines. The ssfile line 1 line was checked in by mary on March 27. Then, on March 28, joe added a line ssfile line 2, without modifying the ssfile line 1 line. This report doesn’t tell you anything about lines which have been deleted or replaced; you need to use cvs diff for that (see section [cvs: Guide to CVS commands#diff diff—Show differences between revisions]).

    The options to cvs annotate are listed in [cvs: Quick reference to CVS commands#Invoking-CVS Quick reference to CVS commands], and can be used to select the files and revisions to annotate. The options are described in more detail there and in [cvs: Guide to CVS commands#Common-options Common command options].


    |[[#History-browsing| << ]]| |[cvs: Handling binary files#Binary-files >> ]|           |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    This document was generated by a tester on a sunny day using [http://www.nongnu.org/texi2html/ texi2html]. texi2html-1.82/test/manuals/res/ccvs_mediawiki/cvs: Overview0000644000175000017500000007036711264347121026036 0ustar flichtenheldflichtenheld
    |[[cvs#Top| < ]]| |[[#What-is-CVS_003f| > ]]|   |[[cvs#Top| << ]]| |[[cvs#Top| Up ]]| |[cvs: The Repository#Repository >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    == Overview ==

    This chapter is for people who have never used CVS, and perhaps have never used version control software before.

    If you are already familiar with CVS and are just trying to learn a particular feature or remember a certain command, you can probably skip everything here.


    |[[#Overview| < ]]| |[[#What-is-CVS-not_003f| > ]]|   |[[#Overview| << ]]| |[[#Overview| Up ]]| |[cvs: The Repository#Repository >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === What is CVS? ===

    CVS is a version control system. Using it, you can record the history of your source files.

    For example, bugs sometimes creep in when software is modified, and you might not detect the bug until a long time after you make the modification. With CVS, you can easily retrieve old versions to see exactly which change caused the bug. This can sometimes be a big help.

    You could of course save every version of every file you have ever created. This would however waste an enormous amount of disk space. CVS stores all the versions of a file in a single file in a clever way that only stores the differences between versions.

    CVS also helps you if you are part of a group of people working on the same project. It is all too easy to overwrite each others’ changes unless you are extremely careful. Some editors, like GNU Emacs, try to make sure that the same file is never modified by two people at the same time. Unfortunately, if someone is using another editor, that safeguard will not work. CVS solves this problem by insulating the different developers from each other. Every developer works in his own directory, and CVS merges the work when each developer is done.

    CVS started out as a bunch of shell scripts written by Dick Grune, posted to the newsgroup comp.sources.unix in the volume 6 release of July, 1986. While no actual code from these shell scripts is present in the current version of CVS much of the CVS conflict resolution algorithms come from them.

    In April, 1989, Brian Berliner designed and coded CVS. Jeff Polk later helped Brian with the design of the CVS module and vendor branch support.

    You can get CVS in a variety of ways, including free download from the internet. For more information on downloading CVS and other CVS topics, see:

     
    http://www.cvshome.org/
    http://www.loria.fr/~molli/cvs-index.html
    

    There is a mailing list, known as info-cvs, devoted to CVS. To subscribe or unsubscribe write to info-cvs-request@gnu.org. If you prefer a usenet group, the right group is comp.software.config-mgmt which is for CVS discussions (along with other configuration management systems). In the future, it might be possible to create a comp.software.config-mgmt.cvs, but probably only if there is sufficient CVS traffic on comp.software.config-mgmt.

    You can also subscribe to the bug-cvs mailing list, described in more detail in [cvs: Dealing with bugs in CVS or this manual#BUGS Dealing with bugs in CVS or this manual]. To subscribe send mail to bug-cvs-request@gnu.org.


    |[[#What-is-CVS_003f| < ]]| |[[#A-sample-session| > ]]|   |[[#Overview| << ]]| |[[#Overview| Up ]]| |[cvs: The Repository#Repository >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === What is CVS not? ===

    CVS can do a lot of things for you, but it does not try to be everything for everyone.

    CVS is not a build system.

    Though the structure of your repository and modules file interact with your build system (e.g. ‘Makefile’s), they are essentially independent.

    CVS does not dictate how you build anything. It merely stores files for retrieval in a tree structure you devise.

    CVS does not dictate how to use disk space in the checked out working directories. If you write your ‘Makefile’s or scripts in every directory so they have to know the relative positions of everything else, you wind up requiring the entire repository to be checked out.

    If you modularize your work, and construct a build system that will share files (via links, mounts, VPATH in ‘Makefile’s, etc.), you can arrange your disk usage however you like.

    But you have to remember that any such system is a lot of work to construct and maintain. CVS does not address the issues involved.

    Of course, you should place the tools created to support such a build system (scripts, ‘Makefile’s, etc) under CVS.

    Figuring out what files need to be rebuilt when something changes is, again, something to be handled outside the scope of CVS. One traditional approach is to use make for building, and use some automated tool for generating the dependencies which make uses.

    See [cvs: How your build system interacts with CVS#Builds How your build system interacts with CVS], for more information on doing builds in conjunction with CVS.

    CVS is not a substitute for management.

    Your managers and project leaders are expected to talk to you frequently enough to make certain you are aware of schedules, merge points, branch names and release dates. If they don’t, CVS can’t help.

    CVS is an instrument for making sources dance to your tune. But you are the piper and the composer. No instrument plays itself or writes its own music.

    CVS is not a substitute for developer communication.

    When faced with conflicts within a single file, most developers manage to resolve them without too much effort. But a more general definition of “conflict” includes problems too difficult to solve without communication between developers.

    CVS cannot determine when simultaneous changes within a single file, or across a whole collection of files, will logically conflict with one another. Its concept of a conflict is purely textual, arising when two changes to the same base file are near enough to spook the merge (i.e. diff3) command.

    CVS does not claim to help at all in figuring out non-textual or distributed conflicts in program logic.

    For example: Say you change the arguments to function X defined in file ‘A’. At the same time, someone edits file ‘B’, adding new calls to function X using the old arguments. You are outside the realm of CVS’s competence.

    Acquire the habit of reading specs and talking to your peers.

    CVS does not have change control

    Change control refers to a number of things. First of all it can mean bug-tracking, that is being able to keep a database of reported bugs and the status of each one (is it fixed? in what release? has the bug submitter agreed that it is fixed?). For interfacing CVS to an external bug-tracking system, see the ‘rcsinfo’ and ‘verifymsg’ files (see section [cvs: Reference manual for Administrative files#Administrative-files Reference manual for Administrative files]).

    Another aspect of change control is keeping track of the fact that changes to several files were in fact changed together as one logical change. If you check in several files in a single cvs commit operation, CVS then forgets that those files were checked in together, and the fact that they have the same log message is the only thing tying them together. Keeping a GNU style ‘ChangeLog’ can help somewhat.

    Another aspect of change control, in some systems, is the ability to keep track of the status of each change. Some changes have been written by a developer, others have been reviewed by a second developer, and so on. Generally, the way to do this with CVS is to generate a diff (using cvs diff or diff) and email it to someone who can then apply it using the patch utility. This is very flexible, but depends on mechanisms outside CVS to make sure nothing falls through the cracks.

    CVS is not an automated testing program

    It should be possible to enforce mandatory use of a testsuite using the commitinfo file. I haven’t heard a lot about projects trying to do that or whether there are subtle gotchas, however.

    CVS does not have a builtin process model

    Some systems provide ways to ensure that changes or releases go through various steps, with various approvals as needed. Generally, one can accomplish this with CVS but it might be a little more work. In some cases you’ll want to use the ‘commitinfo’, ‘loginfo’, ‘rcsinfo’, or ‘verifymsg’ files, to require that certain steps be performed before cvs will allow a checkin. Also consider whether features such as branches and tags can be used to perform tasks such as doing work in a development tree and then merging certain changes over to a stable tree only once they have been proven.


    |[[#What-is-CVS-not_003f| < ]]| |[[#Getting-the-source| > ]]|   |[[#Overview| << ]]| |[[#Overview| Up ]]| |[cvs: The Repository#Repository >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === A sample session ===

    As a way of introducing CVS, we’ll go through a typical work-session using CVS. The first thing to understand is that CVS stores all files in a centralized repository (see section [cvs: The Repository#Repository The Repository]); this section assumes that a repository is set up.

    Suppose you are working on a simple compiler. The source consists of a handful of C files and a ‘Makefile’. The compiler is called ‘tc’ (Trivial Compiler), and the repository is set up so that there is a module called ‘tc’.


    |[[#A-sample-session| < ]]| |[[#Committing-your-changes| > ]]|   |[[#Overview| << ]]| |[[#A-sample-session| Up ]]| |[cvs: The Repository#Repository >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== Getting the source ====

    The first thing you must do is to get your own working copy of the source for ‘tc’. For this, you use the checkout command:

     
    $ cvs checkout tc
    

    This will create a new directory called ‘tc’ and populate it with the source files.

     
    $ cd tc
    $ ls
    CVS         Makefile    backend.c   driver.c    frontend.c  parser.c
    

    The ‘CVS’ directory is used internally by CVS. Normally, you should not modify or remove any of the files in it.

    You start your favorite editor, hack away at ‘backend.c’, and a couple of hours later you have added an optimization pass to the compiler. A note to RCS and SCCS users: There is no need to lock the files that you want to edit. See section [cvs: Multiple developers#Multiple-developers Multiple developers], for an explanation.


    |[[#Getting-the-source| < ]]| |[[#Cleaning-up| > ]]|   |[[#Overview| << ]]| |[[#A-sample-session| Up ]]| |[cvs: The Repository#Repository >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== Committing your changes ====

    When you have checked that the compiler is still compilable you decide to make a new version of ‘backend.c’. This will store your new ‘backend.c’ in the repository and make it available to anyone else who is using that same repository.

     
    $ cvs commit backend.c
    

    CVS starts an editor, to allow you to enter a log message. You type in “Added an optimization pass.”, save the temporary file, and exit the editor.

    The environment variable $CVSEDITOR determines which editor is started. If $CVSEDITOR is not set, then if the environment variable $EDITOR is set, it will be used. If both $CVSEDITOR and $EDITOR are not set then there is a default which will vary with your operating system, for example vi for unix or notepad for Windows NT/95.

    In addition, CVS checks the $VISUAL environment variable. Opinions vary on whether this behavior is desirable and whether future releases of CVS should check $VISUAL or ignore it. You will be OK either way if you make sure that $VISUAL is either unset or set to the same thing as $EDITOR.

    When CVS starts the editor, it includes a list of files which are modified. For the CVS client, this list is based on comparing the modification time of the file against the modification time that the file had when it was last gotten or updated. Therefore, if a file’s modification time has changed but its contents have not, it will show up as modified. The simplest way to handle this is simply not to worry about it—if you proceed with the commit CVS will detect that the contents are not modified and treat it as an unmodified file. The next update will clue CVS in to the fact that the file is unmodified, and it will reset its stored timestamp so that the file will not show up in future editor sessions.

    If you want to avoid starting an editor you can specify the log message on the command line using the ‘-m’ flag instead, like this:

     
    $ cvs commit -m "Added an optimization pass" backend.c
    

    |[[#Committing-your-changes| < ]]| |[[#Viewing-differences| > ]]|   |[[#Overview| << ]]| |[[#A-sample-session| Up ]]| |[cvs: The Repository#Repository >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== Cleaning up ====

    Before you turn to other tasks you decide to remove your working copy of tc. One acceptable way to do that is of course

     
    $ cd ..
    $ rm -r tc
    

    but a better way is to use the release command (see section [cvs: Guide to CVS commands#release release—Indicate that a Module is no longer in use]):

     
    $ cd ..
    $ cvs release -d tc
    M driver.c
    ? tc
    You have [1] altered files in this repository.
    Are you sure you want to release (and delete) directory `tc': n
    ** `release' aborted by user choice.
    

    The release command checks that all your modifications have been committed. If history logging is enabled it also makes a note in the history file. See section [cvs: Reference manual for Administrative files#history-file The history file].

    When you use the ‘-d’ flag with release, it also removes your working copy.

    In the example above, the release command wrote a couple of lines of output. ‘? tc’ means that the file ‘tc’ is unknown to CVS. That is nothing to worry about: ‘tc’ is the executable compiler, and it should not be stored in the repository. See section [cvs: Reference manual for Administrative files#cvsignore Ignoring files via cvsignore], for information about how to make that warning go away. See section [cvs: Guide to CVS commands#release-output release output], for a complete explanation of all possible output from release.

    M driver.c’ is more serious. It means that the file ‘driver.c’ has been modified since it was checked out.

    The release command always finishes by telling you how many modified files you have in your working copy of the sources, and then asks you for confirmation before deleting any files or making any note in the history file.

    You decide to play it safe and answer n <RET> when release asks for confirmation.


    |[[#Cleaning-up| < ]]| |[cvs: The Repository#Repository > ]|   |[[#Overview| << ]]| |[[#A-sample-session| Up ]]| |[cvs: The Repository#Repository >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== Viewing differences ====

    You do not remember modifying ‘driver.c’, so you want to see what has happened to that file.

     
    $ cd tc
    $ cvs diff driver.c
    

    This command runs diff to compare the version of ‘driver.c’ that you checked out with your working copy. When you see the output you remember that you added a command line option that enabled the optimization pass. You check it in, and release the module.

     
    $ cvs commit -m "Added an optimization pass" driver.c
    Checking in driver.c;
    /usr/local/cvsroot/tc/driver.c,v  <--  driver.c
    new revision: 1.2; previous revision: 1.1
    done
    $ cd ..
    $ cvs release -d tc
    ? tc
    You have [0] altered files in this repository.
    Are you sure you want to release (and delete) directory `tc': y
    

    |[[#Overview| << ]]| |[cvs: The Repository#Repository >> ]|           |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    This document was generated by a tester on a sunny day using [http://www.nongnu.org/texi2html/ texi2html]. texi2html-1.82/test/manuals/res/ccvs_mediawiki/cvs: Reference manual for Administrative files0000644000175000017500000025213511264347121034155 0ustar flichtenheldflichtenheld
    |[cvs: Quick reference to CVS commands#Invoking-CVS < ]| |[[#modules| > ]]|   |[cvs: Quick reference to CVS commands#Invoking-CVS << ]| |[[cvs#Top| Up ]]| |[cvs: All environment variables which affect CVS#Environment-variables >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    == Reference manual for Administrative files ==

    Inside the repository, in the directory ‘$CVSROOT/CVSROOT’, there are a number of supportive files for CVS. You can use CVS in a limited fashion without any of them, but if they are set up properly they can help make life easier. For a discussion of how to edit them, see [cvs: The Repository#Intro-administrative-files The administrative files].

    The most important of these files is the ‘modules’ file, which defines the modules inside the repository.


    |[[#Administrative-files| < ]]| |[[#Alias-modules| > ]]|   |[[#Administrative-files| << ]]| |[[#Administrative-files| Up ]]| |[cvs: All environment variables which affect CVS#Environment-variables >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === The modules file ===

    The ‘modules’ file records your definitions of names for collections of source code. CVS will use these definitions if you use CVS to update the modules file (use normal commands like add, commit, etc).

    The ‘modules’ file may contain blank lines and comments (lines beginning with ‘#’) as well as module definitions. Long lines can be continued on the next line by specifying a backslash (‘\’) as the last character on the line.

    There are three basic types of modules: alias modules, regular modules, and ampersand modules. The difference between them is the way that they map files in the repository to files in the working directory. In all of the following examples, the top-level repository contains a directory called ‘first-dir’, which contains two files, ‘file1’ and ‘file2’, and a directory ‘sdir’. ‘first-dir/sdir’ contains a file ‘sfile’.


    |[[#modules| < ]]| |[[#Regular-modules| > ]]|   |[[#Administrative-files| << ]]| |[[#modules| Up ]]| |[cvs: All environment variables which affect CVS#Environment-variables >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== Alias modules ====

    Alias modules are the simplest kind of module:

    mname -a aliases

    This represents the simplest way of defining a module mname. The ‘-a’ flags the definition as a simple alias: CVS will treat any use of mname (as a command argument) as if the list of names aliases had been specified instead. aliases may contain either other module names or paths. When you use paths in aliases, checkout creates all intermediate directories in the working directory, just as if the path had been specified explicitly in the CVS arguments.

    For example, if the modules file contains:

     
    amodule -a first-dir
    

    then the following two commands are equivalent:

     
    $ cvs co amodule
    $ cvs co first-dir
    

    and they each would provide output such as:

     
    cvs checkout: Updating first-dir
    U first-dir/file1
    U first-dir/file2
    cvs checkout: Updating first-dir/sdir
    U first-dir/sdir/sfile
    

    |[[#Alias-modules| < ]]| |[[#Ampersand-modules| > ]]|   |[[#Administrative-files| << ]]| |[[#modules| Up ]]| |[cvs: All environment variables which affect CVS#Environment-variables >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== Regular modules ====
    mname [ options ] dir [ files… ]

    In the simplest case, this form of module definition reduces to ‘mname dir’. This defines all the files in directory dir as module mname. dir is a relative path (from $CVSROOT) to a directory of source in the source repository. In this case, on checkout, a single directory called mname is created as a working directory; no intermediate directory levels are used by default, even if dir was a path involving several directory levels.

    For example, if a module is defined by:

     
    regmodule first-dir
    

    then regmodule will contain the files from first-dir:

     
    $ cvs co regmodule
    cvs checkout: Updating regmodule
    U regmodule/file1
    U regmodule/file2
    cvs checkout: Updating regmodule/sdir
    U regmodule/sdir/sfile
    $
    

    By explicitly specifying files in the module definition after dir, you can select particular files from directory dir. Here is an example:

     
    regfiles first-dir/sdir sfile
    

    With this definition, getting the regfiles module will create a single working directory ‘regfiles’ containing the file listed, which comes from a directory deeper in the CVS source repository:

     
    $ cvs co regfiles
    U regfiles/sfile
    $
    

    |[[#Regular-modules| < ]]| |[[#Excluding-directories| > ]]|   |[[#Administrative-files| << ]]| |[[#modules| Up ]]| |[cvs: All environment variables which affect CVS#Environment-variables >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== Ampersand modules ====

    A module definition can refer to other modules by including ‘&module’ in its definition.

     
    mname [ options ] &module

    Then getting the module creates a subdirectory for each such module, in the directory containing the module. For example, if modules contains

     
    ampermod &first-dir
    

    then a checkout will create an ampermod directory which contains a directory called first-dir, which in turns contains all the directories and files which live there. For example, the command

     
    $ cvs co ampermod
    

    will create the following files:

     
    ampermod/first-dir/file1
    ampermod/first-dir/file2
    ampermod/first-dir/sdir/sfile
    

    There is one quirk/bug: the messages that CVS prints omit the ‘ampermod’, and thus do not correctly display the location to which it is checking out the files:

     
    $ cvs co ampermod
    cvs checkout: Updating first-dir
    U first-dir/file1
    U first-dir/file2
    cvs checkout: Updating first-dir/sdir
    U first-dir/sdir/sfile
    $
    

    Do not rely on this buggy behavior; it may get fixed in a future release of CVS.


    |[[#Ampersand-modules| < ]]| |[[#Module-options| > ]]|   |[[#Administrative-files| << ]]| |[[#modules| Up ]]| |[cvs: All environment variables which affect CVS#Environment-variables >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== Excluding directories ====

    An alias module may exclude particular directories from other modules by using an exclamation mark (‘!’) before the name of each directory to be excluded.

    For example, if the modules file contains:

     
    exmodule -a !first-dir/sdir first-dir
    

    then checking out the module ‘exmodule’ will check out everything in ‘first-dir’ except any files in the subdirectory ‘first-dir/sdir’.


    |[[#Excluding-directories| < ]]| |[[#Module-program-options| > ]]|   |[[#Administrative-files| << ]]| |[[#modules| Up ]]| |[cvs: All environment variables which affect CVS#Environment-variables >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== Module options ====

    Either regular modules or ampersand modules can contain options, which supply additional information concerning the module.

    -d name

    Name the working directory something other than the module name.

    -e prog

    Specify a program prog to run whenever files in a module are exported. prog runs with a single argument, the module name.

    -o prog

    Specify a program prog to run whenever files in a module are checked out. prog runs with a single argument, the module name. See [[#Module-program-options|How the modules file “program options” programs are run]] for information on how prog is called.

    -s status

    Assign a status to the module. When the module file is printed with ‘cvs checkout -s’ the modules are sorted according to primarily module status, and secondarily according to the module name. This option has no other meaning. You can use this option for several things besides status: for instance, list the person that is responsible for this module.

    -t prog

    Specify a program prog to run whenever files in a module are tagged with rtag. prog runs with two arguments: the module name and the symbolic tag specified to rtag. It is not run when tag is executed. Generally you will find that taginfo is a better solution (see section [cvs: History browsing#user_002ddefined-logging User-defined logging]).

    You should also see see section [[#Module-program-options|How the modules file “program options” programs are run]] about how the “program options” programs are run.


    |[[#Module-options| < ]]| |[[#Wrappers| > ]]|   |[[#Administrative-files| << ]]| |[[#modules| Up ]]| |[cvs: All environment variables which affect CVS#Environment-variables >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== How the modules file “program options” programs are run ====

    For checkout, rtag, and export, the program is server-based, and as such the following applies:-

    If using remote access methods (pserver, ext, etc.), CVS will execute this program on the server from a temporary directory. The path is searched for this program.

    If using “local access” (on a local or remote NFS file system, i.e. repository set just to a path), the program will be executed from the newly checked-out tree, if found there, or alternatively searched for in the path if not.

    The programs are all run after the operation has effectively completed.


    |[[#Module-program-options| < ]]| |[[#commit-files| > ]]|   |[[#Administrative-files| << ]]| |[[#Administrative-files| Up ]]| |[cvs: All environment variables which affect CVS#Environment-variables >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === The cvswrappers file ===

    Wrappers refers to a CVS feature which lets you control certain settings based on the name of the file which is being operated on. The settings are ‘-k’ for binary files, and ‘-m’ for nonmergeable text files.

    The ‘-m’ option specifies the merge methodology that should be used when a non-binary file is updated. MERGE means the usual CVS behavior: try to merge the files. COPY means that cvs update will refuse to merge files, as it also does for files specified as binary with ‘-kb’ (but if the file is specified as binary, there is no need to specify ‘-m 'COPY'’). CVS will provide the user with the two versions of the files, and require the user using mechanisms outside CVS, to insert any necessary changes.

    WARNING: do not use COPY with CVS 1.9 or earlier - such versions of CVS will copy one version of your file over the other, wiping out the previous contents. The ‘-m’ wrapper option only affects behavior when merging is done on update; it does not affect how files are stored. See [cvs: Handling binary files#Binary-files Handling binary files], for more on binary files.

    The basic format of the file ‘cvswrappers’ is:

     
    wildcard     [option value][option value]...
    
    where option is one of
    -m           update methodology      value: MERGE or COPY
    -k           keyword expansion       value: expansion mode
    
    and value is a single-quote delimited value.
    

    For example, the following command imports a directory, treating files whose name ends in ‘.exe’ as binary:

     
    cvs import -I ! -W "*.exe -k 'b'" first-dir vendortag reltag
    

    |[[#Wrappers| < ]]| |[[#syntax| > ]]|   |[[#Administrative-files| << ]]| |[[#Administrative-files| Up ]]| |[cvs: All environment variables which affect CVS#Environment-variables >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === The commit support files ===

    The ‘-i’ flag in the ‘modules’ file can be used to run a certain program whenever files are committed (see section [[#modules|The modules file]]). The files described in this section provide other, more flexible, ways to run programs whenever something is committed.

    There are three kind of programs that can be run on commit. They are specified in files in the repository, as described below. The following table summarizes the file names and the purpose of the corresponding programs.

    commitinfo

    The program is responsible for checking that the commit is allowed. If it exits with a non-zero exit status the commit will be aborted.

    verifymsg

    The specified program is used to evaluate the log message, and possibly verify that it contains all required fields. This is most useful in combination with the ‘rcsinfo’ file, which can hold a log message template (see section [[#rcsinfo|Rcsinfo]]).

    editinfo

    The specified program is used to edit the log message, and possibly verify that it contains all required fields. This is most useful in combination with the ‘rcsinfo’ file, which can hold a log message template (see section [[#rcsinfo|Rcsinfo]]). (obsolete)

    loginfo

    The specified program is called when the commit is complete. It receives the log message and some additional information and can store the log message in a file, or mail it to appropriate persons, or maybe post it to a local newsgroup, or… Your imagination is the limit!


    |[[#commit-files| < ]]| |[[#commitinfo| > ]]|   |[[#Administrative-files| << ]]| |[[#commit-files| Up ]]| |[cvs: All environment variables which affect CVS#Environment-variables >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== The common syntax ====

    The administrative files such as ‘commitinfo’, ‘loginfo’, ‘rcsinfo’, ‘verifymsg’, etc., all have a common format. The purpose of the files are described later on. The common syntax is described here.

    Each line contains the following:

    • A regular expression. This is a basic regular expression in the syntax used by GNU emacs.
    • A whitespace separator—one or more spaces and/or tabs.
    • A file name or command-line template.

    Blank lines are ignored. Lines that start with the character ‘#’ are treated as comments. Long lines unfortunately can not be broken in two parts in any way.

    The first regular expression that matches the current directory name in the repository is used. The rest of the line is used as a file name or command-line as appropriate.


    |[[#syntax| < ]]| |[[#verifymsg| > ]]|   |[[#Administrative-files| << ]]| |[[#commit-files| Up ]]| |[cvs: All environment variables which affect CVS#Environment-variables >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== Commitinfo ====

    The ‘commitinfo’ file defines programs to execute whenever ‘cvs commit’ is about to execute. These programs are used for pre-commit checking to verify that the modified, added and removed files are really ready to be committed. This could be used, for instance, to verify that the changed files conform to to your site’s standards for coding practice.

    As mentioned earlier, each line in the ‘commitinfo’ file consists of a regular expression and a command-line template. The template can include a program name and any number of arguments you wish to supply to it. The full path to the current source repository is appended to the template, followed by the file names of any files involved in the commit (added, removed, and modified files).

    The first line with a regular expression matching the directory within the repository will be used. If the command returns a non-zero exit status the commit will be aborted.

    If the repository name does not match any of the regular expressions in this file, the ‘DEFAULT’ line is used, if it is specified.

    All occurrences of the name ‘ALL’ appearing as a regular expression are used in addition to the first matching regular expression or the name ‘DEFAULT’.

    The command will be run in the root of the workspace containing the new versions of any files the user would like to modify (commit), or in a copy of the workspace on the server (see section [cvs: The Repository#Remote-repositories Remote repositories]). If a file is being removed, there will be no copy of the file under the current directory. If a file is being added, there will be no corresponding archive file in the repository unless the file is being resurrected.

    Note that both the repository directory and the corresponding Attic (see section [cvs: The Repository#Attic The attic]) directory may need to be checked to locate the archive file corresponding to any given file being committed. Much of the information about the specific commit request being made, including the destination branch, commit message, and command line options specified, is not available to the command.


    |[[#commitinfo| < ]]| |[[#editinfo| > ]]|   |[[#Administrative-files| << ]]| |[[#commit-files| Up ]]| |[cvs: All environment variables which affect CVS#Environment-variables >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== Verifying log messages ====

    Once you have entered a log message, you can evaluate that message to check for specific content, such as a bug ID. Use the ‘verifymsg’ file to specify a program that is used to verify the log message. This program could be a simple script that checks that the entered message contains the required fields.

    The ‘verifymsg’ file is often most useful together with the ‘rcsinfo’ file, which can be used to specify a log message template.

    Each line in the ‘verifymsg’ file consists of a regular expression and a command-line template. The template must include a program name, and can include any number of arguments. The full path to the current log message template file is appended to the template.

    One thing that should be noted is that the ‘ALL’ keyword is not supported. If more than one matching line is found, the first one is used. This can be useful for specifying a default verification script in a directory, and then overriding it in a subdirectory.

    If the repository name does not match any of the regular expressions in this file, the ‘DEFAULT’ line is used, if it is specified.

    If the verification script exits with a non-zero exit status, the commit is aborted.

    In the default configuration, CVS allows the verification script to change the log message. This is controlled via the RereadLogAfterVerify CVSROOT/config option.

    When ‘RereadLogAfterVerify=always’ or ‘RereadLogAfterVerify=stat’, the log message will either always be reread after the verification script is run or reread only if the log message file status has changed.

    See section [[#config|The CVSROOT/config configuration file]], for more on CVSROOT/config options.

    It is NOT a good idea for a ‘verifymsg’ script to interact directly with the user in the various client/server methods. For the pserver method, there is no protocol support for communicating between ‘verifymsg’ and the client on the remote end. For the ext and server methods, it is possible for CVS to become confused by the characters going along the same channel as the CVS protocol messages. See [cvs: The Repository#Remote-repositories Remote repositories], for more information on client/server setups. In addition, at the time the ‘verifymsg’ script runs, the CVS server has locks in place in the repository. If control is returned to the user here then other users may be stuck waiting for access to the repository.

    This option can be useful if you find yourself using an rcstemplate that needs to be modified to remove empty elements or to fill in default values. It can also be useful if the rcstemplate has changed in the repository and the CVS/Template was not updated, but is able to be adapted to the new format by the verification script that is run by ‘verifymsg’.

    An example of an update might be to change all occurrences of ’BugId:’ to be ’DefectId:’ (which can be useful if the rcstemplate has recently been changed and there are still checked-out user trees with cached copies in the CVS/Template file of the older version).

    Another example of an update might be to delete a line that contains ’BugID: none’ from the log message after validation of that value as being allowed is made.

    The following is a little silly example of a ‘verifymsg’ file, together with the corresponding ‘rcsinfo’ file, the log message template and an verification script. We begin with the log message template. We want to always record a bug-id number on the first line of the log message. The rest of log message is free text. The following template is found in the file ‘/usr/cvssupport/tc.template’.

     
    BugId:
    

    The script ‘/usr/cvssupport/bugid.verify’ is used to evaluate the log message.

     
    #!/bin/sh
    #
    #       bugid.verify filename
    #
    #  Verify that the log message contains a valid bugid
    #  on the first line.
    #
    if head -1 < $1 | grep '^BugId:[ ]*[0-9][0-9]*$' > /dev/null; then
        exit 0
    elif head -1 < $1 | grep '^BugId:[ ]*none$' > /dev/null; then
        # It is okay to allow commits with 'BugId: none',
        # but do not put that text into the real log message.
        grep -v '^BugId:[ ]*none$' > $1.rewrite
        mv $1.rewrite $1
        exit 0
    else
        echo "No BugId found."
        exit 1
    fi
    

    The ‘verifymsg’ file contains this line:

     
    ^tc     /usr/cvssupport/bugid.verify
    

    The ‘rcsinfo’ file contains this line:

     
    ^tc     /usr/cvssupport/tc.template
    

    The ‘config’ file contains this line:

     
    RereadLogAfterVerify=always
    

    |[[#verifymsg| < ]]| |[[#editinfo-example| > ]]|   |[[#Administrative-files| << ]]| |[[#commit-files| Up ]]| |[cvs: All environment variables which affect CVS#Environment-variables >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== Editinfo ====

    Note: The ‘editinfo’ feature has been rendered obsolete. To set a default editor for log messages use the CVSEDITOR, EDITOR environment variables (see section [cvs: All environment variables which affect CVS#Environment-variables All environment variables which affect CVS]) or the ‘-e’ global option (see section [cvs: Guide to CVS commands#Global-options Global options]). See [[#verifymsg|Verifying log messages]], for information on the use of the ‘verifymsg’ feature for evaluating log messages.

    If you want to make sure that all log messages look the same way, you can use the ‘editinfo’ file to specify a program that is used to edit the log message. This program could be a custom-made editor that always enforces a certain style of the log message, or maybe a simple shell script that calls an editor, and checks that the entered message contains the required fields.

    If no matching line is found in the ‘editinfo’ file, the editor specified in the environment variable $CVSEDITOR is used instead. If that variable is not set, then the environment variable $EDITOR is used instead. If that variable is not set a default will be used. See [cvs: Overview#Committing-your-changes Committing your changes].

    The ‘editinfo’ file is often most useful together with the ‘rcsinfo’ file, which can be used to specify a log message template.

    Each line in the ‘editinfo’ file consists of a regular expression and a command-line template. The template must include a program name, and can include any number of arguments. The full path to the current log message template file is appended to the template.

    One thing that should be noted is that the ‘ALL’ keyword is not supported. If more than one matching line is found, the first one is used. This can be useful for specifying a default edit script in a module, and then overriding it in a subdirectory.

    If the repository name does not match any of the regular expressions in this file, the ‘DEFAULT’ line is used, if it is specified.

    If the edit script exits with a non-zero exit status, the commit is aborted.

    Note: when CVS is accessing a remote repository, or when the ‘-m’ or ‘-F’ options to cvs commit are used, ‘editinfo’ will not be consulted. There is no good workaround for this; use ‘verifymsg’ instead.


    |[[#editinfo| < ]]| |[[#loginfo| > ]]|   |[[#Administrative-files| << ]]| |[[#editinfo| Up ]]| |[cvs: All environment variables which affect CVS#Environment-variables >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ===== Editinfo example =====

    The following is a little silly example of a ‘editinfo’ file, together with the corresponding ‘rcsinfo’ file, the log message template and an editor script. We begin with the log message template. We want to always record a bug-id number on the first line of the log message. The rest of log message is free text. The following template is found in the file ‘/usr/cvssupport/tc.template’.

     
    BugId:
    

    The script ‘/usr/cvssupport/bugid.edit’ is used to edit the log message.

     
    #!/bin/sh
    #
    #       bugid.edit filename
    #
    #  Call $EDITOR on FILENAME, and verify that the
    #  resulting file contains a valid bugid on the first
    #  line.
    if [ "x$EDITOR" = "x" ]; then EDITOR=vi; fi
    if [ "x$CVSEDITOR" = "x" ]; then CVSEDITOR=$EDITOR; fi
    $CVSEDITOR $1
    until head -1|grep '^BugId:[ ]*[0-9][0-9]*$' < $1
    do  echo -n  "No BugId found.  Edit again? ([y]/n)"
        read ans
        case ${ans} in
            n*) exit 1;;
        esac
        $CVSEDITOR $1
    done
    

    The ‘editinfo’ file contains this line:

     
    ^tc     /usr/cvssupport/bugid.edit
    

    The ‘rcsinfo’ file contains this line:

     
    ^tc     /usr/cvssupport/tc.template
    

    |[[#editinfo-example| < ]]| |[[#loginfo-example| > ]]|   |[[#Administrative-files| << ]]| |[[#commit-files| Up ]]| |[cvs: All environment variables which affect CVS#Environment-variables >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== Loginfo ====

    The ‘loginfo’ file is used to control where ‘cvs commit’ log information is sent. The first entry on a line is a regular expression which is tested against the directory that the change is being made to, relative to the $CVSROOT. If a match is found, then the remainder of the line is a filter program that should expect log information on its standard input.

    If the repository name does not match any of the regular expressions in this file, the ‘DEFAULT’ line is used, if it is specified.

    All occurrences of the name ‘ALL’ appearing as a regular expression are used in addition to the first matching regular expression or ‘DEFAULT’.

    The first matching regular expression is used.

    See section [[#commit-files|The commit support files]], for a description of the syntax of the ‘loginfo’ file.

    The user may specify a format string as part of the filter. The string is composed of a ‘%’ followed by a space, or followed by a single format character, or followed by a set of format characters surrounded by ‘{’ and ‘}’ as separators. The format characters are:

    s

    file name

    V

    old version number (pre-checkin)

    v

    new version number (post-checkin)

    All other characters that appear in a format string expand to an empty field (commas separating fields are still provided).

    For example, some valid format strings are ‘%’, ‘%s’, ‘%{s}’, and ‘%{sVv}’.

    The output will be a space separated string of tokens enclosed in quotation marks ("). Any embedded dollar signs ($), backticks (), backslashes (\), or quotation marks will be preceded by a backslash (this allows the shell to correctly parse it as a single string, regardless of the characters it contains). For backwards compatibility, the first token will be the repository subdirectory. The rest of the tokens will be comma-delimited lists of the information requested in the format string. For example, if ‘/u/src/master/yoyodyne/tc’ is the repository, ‘%{sVv}’ is the format string, and three files (ChangeLog, Makefile, foo.c) were modified, the output might be:

     
    "yoyodyne/tc ChangeLog,1.1,1.2 Makefile,1.3,1.4 foo.c,1.12,1.13"
    

    As another example, ‘%{}’ means that only the name of the repository will be generated.

    Note: when CVS is accessing a remote repository, ‘loginfo’ will be run on the remote (i.e., server) side, not the client side (see section [cvs: The Repository#Remote-repositories Remote repositories]).


    |[[#loginfo| < ]]| |[[#Keeping-a-checked-out-copy| > ]]|   |[[#Administrative-files| << ]]| |[[#loginfo| Up ]]| |[cvs: All environment variables which affect CVS#Environment-variables >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ===== Loginfo example =====

    The following ‘loginfo’ file, together with the tiny shell-script below, appends all log messages to the file ‘$CVSROOT/CVSROOT/commitlog’, and any commits to the administrative files (inside the ‘CVSROOT’ directory) are also logged in ‘/usr/adm/cvsroot-log’. Commits to the ‘prog1’ directory are mailed to ceder.

     
    ALL             /usr/local/bin/cvs-log $CVSROOT/CVSROOT/commitlog $USER
    ^CVSROOT        /usr/local/bin/cvs-log /usr/adm/cvsroot-log
    ^prog1          Mail -s %s ceder
    

    The shell-script ‘/usr/local/bin/cvs-log’ looks like this:

     
    #!/bin/sh
    (echo "------------------------------------------------------";
     echo -n $2"  ";
     date;
     echo;
     cat) >> $1
    

    |[[#loginfo-example| < ]]| |[[#rcsinfo| > ]]|   |[[#Administrative-files| << ]]| |[[#loginfo| Up ]]| |[cvs: All environment variables which affect CVS#Environment-variables >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ===== Keeping a checked out copy =====

    It is often useful to maintain a directory tree which contains files which correspond to the latest version in the repository. For example, other developers might want to refer to the latest sources without having to check them out, or you might be maintaining a web site with CVS and want every checkin to cause the files used by the web server to be updated.

    The way to do this is by having loginfo invoke cvs update. Doing so in the naive way will cause a problem with locks, so the cvs update must be run in the background. Here is an example for unix (this should all be on one line):

     
    ^cyclic-pages		(date; cat; (sleep 2; cd /u/www/local-docs;
     cvs -q update -d) &) >> $CVSROOT/CVSROOT/updatelog 2>&1
    

    This will cause checkins to repository directories starting with cyclic-pages to update the checked out tree in ‘/u/www/local-docs’.


    |[[#Keeping-a-checked-out-copy| < ]]| |[[#cvsignore| > ]]|   |[[#Administrative-files| << ]]| |[[#Administrative-files| Up ]]| |[cvs: All environment variables which affect CVS#Environment-variables >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Rcsinfo ===

    The ‘rcsinfo’ file can be used to specify a form to edit when filling out the commit log. The ‘rcsinfo’ file has a syntax similar to the ‘verifymsg’, ‘commitinfo’ and ‘loginfo’ files. See section [[#syntax|The common syntax]]. Unlike the other files the second part is not a command-line template. Instead, the part after the regular expression should be a full pathname to a file containing the log message template.

    If the repository name does not match any of the regular expressions in this file, the ‘DEFAULT’ line is used, if it is specified.

    All occurrences of the name ‘ALL’ appearing as a regular expression are used in addition to the first matching regular expression or ‘DEFAULT’.

    The log message template will be used as a default log message. If you specify a log message with ‘cvs commit -m message’ or ‘cvs commit -f file’ that log message will override the template.

    See section [[#verifymsg|Verifying log messages]], for an example ‘rcsinfo’ file.

    When CVS is accessing a remote repository, the contents of ‘rcsinfo’ at the time a directory is first checked out will specify a template. This template will be updated on all ‘cvs update’ commands. It will also be added to new directories added with a ‘cvs add new-directry’ command. In versions of CVS prior to version 1.12, the ‘CVS/Template’ file was not updated. If the CVS server is at version 1.12 or higher an older client may be used and the ‘CVS/Template’ will be updated from the server.


    |[[#rcsinfo| < ]]| |[[#checkoutlist| > ]]|   |[[#Administrative-files| << ]]| |[[#Administrative-files| Up ]]| |[cvs: All environment variables which affect CVS#Environment-variables >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Ignoring files via cvsignore ===

    There are certain file names that frequently occur inside your working copy, but that you don’t want to put under CVS control. Examples are all the object files that you get while you compile your sources. Normally, when you run ‘cvs update’, it prints a line for each file it encounters that it doesn’t know about (see section [cvs: Guide to CVS commands#update-output update output]).

    CVS has a list of files (or sh(1) file name patterns) that it should ignore while running update, import and release. This list is constructed in the following way.

    • The list is initialized to include certain file name patterns: names associated with CVS administration, or with other common source control systems; common names for patch files, object files, archive files, and editor backup files; and other names that are usually artifacts of assorted utilities. Currently, the default list of ignored file name patterns is:
       
          RCS     SCCS    CVS     CVS.adm
          RCSLOG  cvslog.*
          tags    TAGS
          .make.state     .nse_depinfo
          *~      #*      .#*     ,*      _$*     *$
          *.old   *.bak   *.BAK   *.orig  *.rej   .del-*
          *.a     *.olb   *.o     *.obj   *.so    *.exe
          *.Z     *.elc   *.ln
          core
      
    • The per-repository list in ‘$CVSROOT/CVSROOT/cvsignore’ is appended to the list, if that file exists.
    • The per-user list in ‘.cvsignore’ in your home directory is appended to the list, if it exists.
    • Any entries in the environment variable $CVSIGNORE is appended to the list.
    • Any ‘-I’ options given to CVS is appended.
    • As CVS traverses through your directories, the contents of any ‘.cvsignore’ will be appended to the list. The patterns found in ‘.cvsignore’ are only valid for the directory that contains them, not for any sub-directories.

    In any of the 5 places listed above, a single exclamation mark (‘!’) clears the ignore list. This can be used if you want to store any file which normally is ignored by CVS.

    Specifying ‘-I !’ to cvs import will import everything, which is generally what you want to do if you are importing files from a pristine distribution or any other source which is known to not contain any extraneous files. However, looking at the rules above you will see there is a fly in the ointment; if the distribution contains any ‘.cvsignore’ files, then the patterns from those files will be processed even if ‘-I !’ is specified. The only workaround is to remove the ‘.cvsignore’ files in order to do the import. Because this is awkward, in the future ‘-I !’ might be modified to override ‘.cvsignore’ files in each directory.

    Note that the syntax of the ignore files consists of a series of lines, each of which contains a space separated list of filenames. This offers no clean way to specify filenames which contain spaces, but you can use a workaround like ‘foo?bar’ to match a file named ‘foo bar’ (it also matches ‘fooxbar’ and the like). Also note that there is currently no way to specify comments.


    |[[#cvsignore| < ]]| |[[#history-file| > ]]|   |[[#Administrative-files| << ]]| |[[#Administrative-files| Up ]]| |[cvs: All environment variables which affect CVS#Environment-variables >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === The checkoutlist file ===

    It may be helpful to use CVS to maintain your own files in the ‘CVSROOT’ directory. For example, suppose that you have a script ‘logcommit.pl’ which you run by including the following line in the ‘commitinfo’ administrative file:

     
    ALL   $CVSROOT/CVSROOT/logcommit.pl
    

    To maintain ‘logcommit.pl’ with CVS you would add the following line to the ‘checkoutlist’ administrative file:

     
    logcommit.pl
    

    The format of ‘checkoutlist’ is one line for each file that you want to maintain using CVS, giving the name of the file.

    After setting up ‘checkoutlist’ in this fashion, the files listed there will function just like CVS’s built-in administrative files. For example, when checking in one of the files you should get a message such as:

     
    cvs commit: Rebuilding administrative file database
    

    and the checked out copy in the ‘CVSROOT’ directory should be updated.

    Note that listing ‘passwd’ (see section [cvs: The Repository#Password-authentication-server Setting up the server for password authentication]) in ‘checkoutlist’ is not recommended for security reasons.

    For information about keeping a checkout out copy in a more general context than the one provided by ‘checkoutlist’, see [[#Keeping-a-checked-out-copy|Keeping a checked out copy]].


    |[[#checkoutlist| < ]]| |[[#Variables| > ]]|   |[[#Administrative-files| << ]]| |[[#Administrative-files| Up ]]| |[cvs: All environment variables which affect CVS#Environment-variables >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === The history file ===

    The file ‘$CVSROOT/CVSROOT/history’ is used to log information for the history command (see section [cvs: Guide to CVS commands#history history—Show status of files and users]). This file must be created to turn on logging. This is done automatically if the cvs init command is used to set up the repository (see section [cvs: The Repository#Creating-a-repository Creating a repository]).

    The file format of the ‘history’ file is documented only in comments in the CVS source code, but generally programs should use the cvs history command to access it anyway, in case the format changes with future releases of CVS.


    |[[#history-file| < ]]| |[[#config| > ]]|   |[[#Administrative-files| << ]]| |[[#Administrative-files| Up ]]| |[cvs: All environment variables which affect CVS#Environment-variables >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Expansions in administrative files ===

    Sometimes in writing an administrative file, you might want the file to be able to know various things based on environment CVS is running in. There are several mechanisms to do that.

    To find the home directory of the user running CVS (from the HOME environment variable), use ‘~’ followed by ‘/’ or the end of the line. Likewise for the home directory of user, use ‘~user’. These variables are expanded on the server machine, and don’t get any reasonable expansion if pserver (see section [cvs: The Repository#Password-authenticated Direct connection with password authentication]) is in use; therefore user variables (see below) may be a better choice to customize behavior based on the user running CVS.

    One may want to know about various pieces of information internal to CVS. A CVS internal variable has the syntax ${variable}, where variable starts with a letter and consists of alphanumeric characters and ‘_’. If the character following variable is a non-alphanumeric character other than ‘_’, the ‘{’ and ‘}’ can be omitted. The CVS internal variables are:

    CVSROOT

    This is the absolute path to the current CVS root directory. See section [cvs: The Repository#Repository The Repository], for a description of the various ways to specify this, but note that the internal variable contains just the directory and not any of the access method information.

    RCSBIN

    In CVS 1.9.18 and older, this specified the directory where CVS was looking for RCS programs. Because CVS no longer runs RCS programs, specifying this internal variable is now an error.

    CVSEDITOR
    EDITOR
    VISUAL

    These all expand to the same value, which is the editor that CVS is using. See section [cvs: Guide to CVS commands#Global-options Global options], for how to specify this.

    USER

    Username of the user running CVS (on the CVS server machine). When using pserver, this is the user specified in the repository specification which need not be the same as the username the server is running as (see section [cvs: The Repository#Password-authentication-server Setting up the server for password authentication]). Do not confuse this with the environment variable of the same name.

    If you want to pass a value to the administrative files which the user who is running CVS can specify, use a user variable.

    To expand a user variable, the administrative file contains ${=variable}. To set a user variable, specify the global option ‘-s’ to CVS, with argument variable=value. It may be particularly useful to specify this option via ‘.cvsrc’ (see section [cvs: Guide to CVS commands#g_t_007e_002f_002ecvsrc Default options and the ~/.cvsrc file]).

    For example, if you want the administrative file to refer to a test directory you might create a user variable TESTDIR. Then if CVS is invoked as

     
    cvs -s TESTDIR=/work/local/tests
    

    and the administrative file contains sh ${=TESTDIR}/runtests, then that string is expanded to sh /work/local/tests/runtests.

    All other strings containing ‘$’ are reserved; there is no way to quote a ‘$’ character so that ‘$’ represents itself.

    Environment variables passed to administrative files are:

    CVS_USER

    The CVS-specific username provided by the user, if it can be provided (currently just for the pserver access method), and to the empty string otherwise. (CVS_USER and USER may differ when ‘$CVSROOT/CVSROOT/passwd’ is used to map CVS usernames to system usernames.)

    LOGNAME

    The username of the system user.

    USER

    Same as LOGNAME. Do not confuse this with the internal variable of the same name.


    |[[#Variables| < ]]| |[cvs: All environment variables which affect CVS#Environment-variables > ]|   |[[#Administrative-files| << ]]| |[[#Administrative-files| Up ]]| |[cvs: All environment variables which affect CVS#Environment-variables >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === The CVSROOT/config configuration file ===

    The administrative file ‘config’ contains various miscellaneous settings which affect the behavior of CVS. The syntax is slightly different from the other administrative files. Variables are not expanded. Lines which start with ‘#’ are considered comments. Other lines consist of a keyword, ‘=’, and a value. Note that this syntax is very strict. Extraneous spaces or tabs are not permitted.

    Currently defined keywords are:

    RCSBIN=bindir

    For CVS 1.9.12 through 1.9.18, this setting told CVS to look for RCS programs in the bindir directory. Current versions of CVS do not run RCS programs; for compatibility this setting is accepted, but it does nothing.

    SystemAuth=value

    If value is ‘yes’, then pserver should check for users in the system’s user database if not found in ‘CVSROOT/passwd’. If it is ‘no’, then all pserver users must exist in ‘CVSROOT/passwd’. The default is ‘yes’. For more on pserver, see [cvs: The Repository#Password-authenticated Direct connection with password authentication].

    TopLevelAdmin=value

    Modify the ‘checkout’ command to create a ‘CVS’ directory at the top level of the new working directory, in addition to ‘CVS’ directories created within checked-out directories. The default value is ‘no’.

    This option is useful if you find yourself performing many commands at the top level of your working directory, rather than in one of the checked out subdirectories. The ‘CVS’ directory created there will mean you don’t have to specify CVSROOT for each command. It also provides a place for the ‘CVS/Template’ file (see section [cvs: The Repository#Working-directory-storage How data is stored in the working directory]).

    LockDir=directory

    Put CVS lock files in directory rather than directly in the repository. This is useful if you want to let users read from the repository while giving them write access only to directory, not to the repository. It can also be used to put the locks on a very fast in-memory file system to speed up locking and unlocking the repository. You need to create directory, but CVS will create subdirectories of directory as it needs them. For information on CVS locks, see [cvs: Multiple developers#Concurrency Several developers simultaneously attempting to run CVS].

    Before enabling the LockDir option, make sure that you have tracked down and removed any copies of CVS 1.9 or older. Such versions neither support LockDir, nor will give an error indicating that they don’t support it. The result, if this is allowed to happen, is that some CVS users will put the locks one place, and others will put them another place, and therefore the repository could become corrupted. CVS 1.10 does not support LockDir but it will print a warning if run on a repository with LockDir enabled.

    LogHistory=value

    Control what is logged to the ‘CVSROOT/history’ file (see section [cvs: Guide to CVS commands#history history—Show status of files and users]). Default of ‘TOEFWUCGMAR’ (or simply ‘all’) will log all transactions. Any subset of the default is legal. (For example, to only log transactions that modify the ‘*,v’ files, use ‘LogHistory=TMAR’.)

    RereadLogAfterVerify=value

    Modify the ‘commit’ command such that CVS will reread the log message after running the program specified by ‘verifymsg’. value may be one of ‘yes’ or ‘always’, indicating that the log message should always be reread; ‘no’ or ‘never’, indicating that it should never be reread; or value may be ‘stat’, indicating that the file should be checked with the filesystem ‘stat()’ function to see if it has changed (see warning below) before rereading. The default value is ‘always’.

    Note: the ‘stat’ mode can cause CVS to pause for up to one extra second per directory committed. This can be less IO and CPU intensive but is not recommended for use with large repositories

    See section [[#verifymsg|Verifying log messages]], for more information on how verifymsg may be used.

    UserAdminOptions=value

    Control what options will be allowed with the cvs admin command (see section [cvs: Guide to CVS commands#admin admin—Administration]) for users not in the cvsadmin group. The value string is a list of single character options which should be allowed. If a user who is not a member of the cvsadmin group tries to execute any cvs admin option which is not listed they will will receive an error message reporting that the option is restricted.

    If no cvsadmin group exists on the server, CVS will ignore the UserAdminOptions keyword (see section [cvs: Guide to CVS commands#admin admin—Administration]).

    When not specified, UserAdminOptions defaults to ‘k’. In other words, it defaults to allowing users outside of the cvsadmin group to use the cvs admin command only to change the default keyword expansion mode for files.

    As an example, to restrict users not in the cvsadmin group to using cvs admin to change the default keyword substitution mode, lock revisions, unlock revisions, and replace the log message, use ‘UserAdminOptions=klum’.


    |[[#Administrative-files| << ]]| |[cvs: All environment variables which affect CVS#Environment-variables >> ]|           |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    This document was generated by a tester on a sunny day using [http://www.nongnu.org/texi2html/ texi2html]. texi2html-1.82/test/manuals/res/ccvs_mediawiki/cvs: Compatibility between CVS Versions0000644000175000017500000000643711264347121032655 0ustar flichtenheldflichtenheld
    |[cvs: All environment variables which affect CVS#Environment-variables < ]| |[cvs: Troubleshooting#Troubleshooting > ]|   |[cvs: All environment variables which affect CVS#Environment-variables << ]| |[[cvs#Top| Up ]]| |[cvs: Troubleshooting#Troubleshooting >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    == Compatibility between CVS Versions ==

    The repository format is compatible going back to CVS 1.3. But see [cvs: Multiple developers#Watches-Compatibility Using watches with old versions of CVS], if you have copies of CVS 1.6 or older and you want to use the optional developer communication features.

    The working directory format is compatible going back to CVS 1.5. It did change between CVS 1.3 and CVS 1.5. If you run CVS 1.5 or newer on a working directory checked out with CVS 1.3, CVS will convert it, but to go back to CVS 1.3 you need to check out a new working directory with CVS 1.3.

    The remote protocol is interoperable going back to CVS 1.5, but no further (1.5 was the first official release with the remote protocol, but some older versions might still be floating around). In many cases you need to upgrade both the client and the server to take advantage of new features and bugfixes, however.


    |[cvs: All environment variables which affect CVS#Environment-variables << ]| |[cvs: Troubleshooting#Troubleshooting >> ]|           |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    This document was generated by a tester on a sunny day using [http://www.nongnu.org/texi2html/ texi2html]. texi2html-1.82/test/manuals/res/ccvs_mediawiki/cvs: Revision management0000644000175000017500000001155011264347121030110 0ustar flichtenheldflichtenheld
    |[cvs: Multiple developers#Choosing-a-model < ]| |[[#When-to-commit| > ]]|   |[cvs: Multiple developers#Multiple-developers << ]| |[[cvs#Top| Up ]]| |[cvs: Keyword substitution#Keyword-substitution >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    == Revision management ==

    If you have read this far, you probably have a pretty good grasp on what CVS can do for you. This chapter talks a little about things that you still have to decide.

    If you are doing development on your own using CVS you could probably skip this chapter. The questions this chapter takes up become more important when more than one person is working in a repository.


    |[[#Revision-management| < ]]| |[cvs: Keyword substitution#Keyword-substitution > ]|   |[[#Revision-management| << ]]| |[[#Revision-management| Up ]]| |[cvs: Keyword substitution#Keyword-substitution >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === When to commit? ===

    Your group should decide which policy to use regarding commits. Several policies are possible, and as your experience with CVS grows you will probably find out what works for you.

    If you commit files too quickly you might commit files that do not even compile. If your partner updates his working sources to include your buggy file, he will be unable to compile the code. On the other hand, other persons will not be able to benefit from the improvements you make to the code if you commit very seldom, and conflicts will probably be more common.

    It is common to only commit files after making sure that they can be compiled. Some sites require that the files pass a test suite. Policies like this can be enforced using the commitinfo file (see section [cvs: Reference manual for Administrative files#commitinfo Commitinfo]), but you should think twice before you enforce such a convention. By making the development environment too controlled it might become too regimented and thus counter-productive to the real goal, which is to get software written.


    |[[#Revision-management| << ]]| |[cvs: Keyword substitution#Keyword-substitution >> ]|           |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    This document was generated by a tester on a sunny day using [http://www.nongnu.org/texi2html/ texi2html]. texi2html-1.82/test/manuals/res/ccvs_mediawiki/cvs: Keyword substitution0000644000175000017500000006775711264347121030422 0ustar flichtenheldflichtenheld
    |[cvs: Revision management#When-to-commit < ]| |[[#Keyword-list| > ]]|   |[cvs: Revision management#Revision-management << ]| |[[cvs#Top| Up ]]| |[cvs: Tracking third-party sources#Tracking-sources >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    == Keyword substitution ==

    As long as you edit source files inside a working directory you can always find out the state of your files via ‘cvs status’ and ‘cvs log’. But as soon as you export the files from your development environment it becomes harder to identify which revisions they are.

    CVS can use a mechanism known as keyword substitution (or keyword expansion) to help identifying the files. Embedded strings of the form $keyword$ and $keyword:…$ in a file are replaced with strings of the form $keyword:value$ whenever you obtain a new revision of the file.


    |[[#Keyword-substitution| < ]]| |[[#Using-keywords| > ]]|   |[[#Keyword-substitution| << ]]| |[[#Keyword-substitution| Up ]]| |[cvs: Tracking third-party sources#Tracking-sources >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Keyword List ===

    This is a list of the keywords:

    $Author$

    The login name of the user who checked in the revision.

    $CVSHeader

    A standard header (similar to $Header$, but with the CVS root stripped off). It contains the relative pathname of the RCS file to the CVS root, the revision number, the date (UTC), the author, the state, and the locker (if locked). Files will normally never be locked when you use CVS.

    Note that this keyword has only been recently introduced to CVS and may cause problems with existing installations if $CVSHeader$ is already in the files for a different purpose. This keyword may be excluded using the KeywordExpansion=eCVSHeader in the ‘CVSROOT/config’ file. See [[#Configuring-keyword-expansion|Configuring Keyord Expansion]] for more details.

    $Date$

    The date and time (UTC) the revision was checked in.

    $Header$

    A standard header containing the full pathname of the RCS file, the revision number, the date (UTC), the author, the state, and the locker (if locked). Files will normally never be locked when you use CVS.

    $Id$

    Same as $Header$, except that the RCS filename is without a path.

    $Name$

    Tag name used to check out this file. The keyword is expanded only if one checks out with an explicit tag name. For example, when running the command cvs co -r first, the keyword expands to ‘Name: first’.

    $Locker$

    The login name of the user who locked the revision (empty if not locked, which is the normal case unless cvs admin -l is in use).

    $Log$

    The log message supplied during commit, preceded by a header containing the RCS filename, the revision number, the author, and the date (UTC). Existing log messages are not replaced. Instead, the new log message is inserted after $Log:…$. Each new line is prefixed with the same string which precedes the $Log keyword. For example, if the file contains:

     
      /* Here is what people have been up to:
       *
       * $Log: frob.c,v $
       * Revision 1.1  1997/01/03 14:23:51  joe
       * Add the superfrobnicate option
       *
       */
    

    then additional lines which are added when expanding the $Log keyword will be preceded by ‘ * ’. Unlike previous versions of CVS and RCS, the comment leader from the RCS file is not used. The $Log keyword is useful for accumulating a complete change log in a source file, but for several reasons it can be problematic. See section [[#Log-keyword|Problems with the $Log$ keyword.]].

    $RCSfile$

    The name of the RCS file without a path.

    $Revision$

    The revision number assigned to the revision.

    $Source$

    The full pathname of the RCS file.

    $State$

    The state assigned to the revision. States can be assigned with cvs admin -s—see [cvs: Guide to CVS commands#admin-options admin options].

    Local keyword

    The LocalKeyword option in the ‘CVSROOT/config’ file may be used to specify a local keyword which is to be used as an alias for one of the other keywords. For example, if the ‘CVSROOT/config’ file contains a line with LocalKeyword=MYBSD=CVSHeader, then a file with the local keyword $MYBSD$ will be expanded as if it were a $CVSHeader$ keyword. If the src/frob.c file contained this keyword, it might look something like this:

     
      /*
       * $MYBSD: src/frob.c,v 1.1 2003/05/04 09:27:45 john Exp $ 
       */
    

    Many repositories make use of a such a “local keyword” feature. An old patch to CVS provided the LocalKeyword feature using a tag= option and called this the “custom tag” or “local tag” feature. It was used in conjunction with the what they called the tagexpand= option. In CVS this other option is known as the KeywordExpand option. See [[#Configuring-keyword-expansion|Configuring Keyord Expansion]] for more details.

    Examples from popular projects include: $FreeBSD$, $NetBSD$, $OpenBSD$, $XFree86$, $Xorg$.

    The advantage of this is that you can include your local version information in a file using this local keyword without disrupting the upstream version information (which may be a different local keyword or a standard keyword). Allowing bug reports and the like to more properly identify the source of the original bug to the third-party and reducing the number of conflicts that arise during an import of a new version.

    All keyword expansion except the local keyword may be disabled using the KeywordExpansion option in the ‘CVSROOT/config’ file—see [[#Configuring-keyword-expansion|Configuring Keyord Expansion]] for more details.


    |[[#Keyword-list| < ]]| |[[#Avoiding-substitution| > ]]|   |[[#Keyword-substitution| << ]]| |[[#Keyword-substitution| Up ]]| |[cvs: Tracking third-party sources#Tracking-sources >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Using keywords ===

    To include a keyword string you simply include the relevant text string, such as $Id$, inside the file, and commit the file. CVS will automatically expand the string as part of the commit operation.

    It is common to embed the $Id$ string in the source files so that it gets passed through to generated files. For example, if you are managing computer program source code, you might include a variable which is initialized to contain that string. Or some C compilers may provide a #pragma ident directive. Or a document management system might provide a way to pass a string through to generated files.

    The ident command (which is part of the RCS package) can be used to extract keywords and their values from a file. This can be handy for text files, but it is even more useful for extracting keywords from binary files.

     
    $ ident samp.c
    samp.c:
         $Id: samp.c,v 1.5 1993/10/19 14:57:32 ceder Exp $
    $ gcc samp.c
    $ ident a.out
    a.out:
         $Id: samp.c,v 1.5 1993/10/19 14:57:32 ceder Exp $
    

    SCCS is another popular revision control system. It has a command, what, which is very similar to ident and used for the same purpose. Many sites without RCS have SCCS. Since what looks for the character sequence @(#) it is easy to include keywords that are detected by either command. Simply prefix the keyword with the magic SCCS phrase, like this:

     
    static char *id="@(#) $Id: ab.c,v 1.5 1993/10/19 14:57:32 ceder Exp $";
    

    |[[#Using-keywords| < ]]| |[[#Substitution-modes| > ]]|   |[[#Keyword-substitution| << ]]| |[[#Keyword-substitution| Up ]]| |[cvs: Tracking third-party sources#Tracking-sources >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Avoiding substitution ===

    Keyword substitution has its disadvantages. Sometimes you might want the literal text string ‘$Author$’ to appear inside a file without CVS interpreting it as a keyword and expanding it into something like ‘$Author: ceder $’.

    There is unfortunately no way to selectively turn off keyword substitution. You can use ‘-ko’ (see section [[#Substitution-modes|Substitution modes]]) to turn off keyword substitution entirely.

    In many cases you can avoid using keywords in the source, even though they appear in the final product. For example, the source for this manual contains ‘$@asis{}Author$’ whenever the text ‘$Author$’ should appear. In nroff and troff you can embed the null-character \& inside the keyword for a similar effect.

    It is also possible to specify an explicit list of keywords to include or exclude using the KeywordExpand option in the ‘CVSROOT/config’ file–see [[#Configuring-keyword-expansion|Configuring Keyord Expansion]] for more details. This feature is intended primarily for use with the LocalKeyword option–see [[#Keyword-list|Keyword List]].


    |[[#Avoiding-substitution| < ]]| |[[#Configuring-keyword-expansion| > ]]|   |[[#Keyword-substitution| << ]]| |[[#Keyword-substitution| Up ]]| |[cvs: Tracking third-party sources#Tracking-sources >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Substitution modes ===

    Each file has a stored default substitution mode, and each working directory copy of a file also has a substitution mode. The former is set by the ‘-k’ option to cvs add and cvs admin; the latter is set by the ‘-k’ or ‘-A’ options to cvs checkout or cvs update. cvs diff also has a ‘-k’ option. For some examples, see [cvs: Handling binary files#Binary-files Handling binary files], and [cvs: Branching and merging#Merging-and-keywords Merging and keywords].

    The modes available are:

    -kkv

    Generate keyword strings using the default form, e.g. $Revision: 5.7 $ for the Revision keyword.

    -kkvl

    Like ‘-kkv’, except that a locker’s name is always inserted if the given revision is currently locked. The locker’s name is only relevant if cvs admin -l is in use.

    -kk

    Generate only keyword names in keyword strings; omit their values. For example, for the Revision keyword, generate the string $Revision$ instead of $Revision: 5.7 $. This option is useful to ignore differences due to keyword substitution when comparing different revisions of a file (see section [cvs: Branching and merging#Merging-and-keywords Merging and keywords]).

    -ko

    Generate the old keyword string, present in the working file just before it was checked in. For example, for the Revision keyword, generate the string $Revision: 1.1 $ instead of $Revision: 5.7 $ if that is how the string appeared when the file was checked in.

    -kb

    Like ‘-ko’, but also inhibit conversion of line endings between the canonical form in which they are stored in the repository (linefeed only), and the form appropriate to the operating system in use on the client. For systems, like unix, which use linefeed only to terminate lines, this is very similar to ‘-ko’. For more information on binary files, see [cvs: Handling binary files#Binary-files Handling binary files]. In CVS version 1.12.2 and later ‘-kb’, as set by cvs add, cvs admin, or cvs import may not be overridden by a ‘-k’ option specified on the command line.

    -kv

    Generate only keyword values for keyword strings. For example, for the Revision keyword, generate the string 5.7 instead of $Revision: 5.7 $. This can help generate files in programming languages where it is hard to strip keyword delimiters like $Revision: $ from a string. However, further keyword substitution cannot be performed once the keyword names are removed, so this option should be used with care.

    One often would like to use ‘-kv’ with cvs export—see section [cvs: Guide to CVS commands#export export—Export sources from CVS, similar to checkout]. But be aware that doesn’t handle an export containing binary files correctly.


    |[[#Substitution-modes| < ]]| |[[#Log-keyword| > ]]|   |[[#Keyword-substitution| << ]]| |[[#Keyword-substitution| Up ]]| |[cvs: Tracking third-party sources#Tracking-sources >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Configuring Keyord Expansion ===

    In a repository that includes third-party software on vendor branches, it is sometimes helpful to configure CVS to use a local keyword instead of the standard $Id$ or $Header$ keywords. Examples from real projects includ, $Xorg$, $XFree86$, $FreeBSD$, $NetBSD$, $OpenBSD$, and even $dotat$. The advantage of this is that you can include your local version information in a file using this local keyword (sometimes called a “custom tag” or a “local tag”) without disrupting the upstream version information (which may be a different local keyword or a standard keyword). In these cases, it is typically desirable to disable the expansion of all keywords except the configured local keyword.

    The KeywordExpansion option in the ‘CVSROOT/config’ file is intended to allow for the either the explicit exclusion of a keyword or list of keywords, or for the explicit inclusion of a keyword or a list of keywords. This list may include the LocalKeyword that has been configured.

    The KeywordExpansion option is followed by = and the next character may either be i to start an inclusion list or e to start an exclusion list. If the following lines were added to the ‘CVSROOT/config’ file:

     
            # Add a "MyBSD" keyword and restrict keyword
            # expansion
            LocalKeyword=MyBSD=CVSHeader
            KeywordExpand=iMyBSD
    

    then only the $MyBSD$ keyword would be expanded. A list may be used. The this example:

     
            # Add a "MyBSD" keyword and restrict keyword
            # expansion to the MyBSD, Name and Date keywords.
            LocalKeyword=MyBSD=CVSHeader
            KeywordExpand=iMyBSD,Name,Date
    

    would allow $MyBSD$, $Name$, and $Date$ to be expanded.

    It is also possible to configure an exclusion list using the following:

     
            # Do not expand the non-RCS keyword CVSHeader
            KeywordExpand=eCVSHeader
    

    This allows CVS to ignore the recently introduced $CVSHeader$ keyword and retain all of the others. The exclusion entry could also contain the standard RCS keyword list, but this could be confusing to users that expect RCS keywords to be expanded, so ycare should be taken to properly set user expectations for a repository that is configured in that manner.

    If there is a desire to not have any RCS keywords expanded and not use the -ko flags everywhere, an administrator may disable all keyword expansion using the ‘CVSROOT/config’ line:

     
    	# Do not expand any RCS keywords
    	KeywordExpand=i
    

    this could be confusing to users that expect RCS keywords like $Id$ to be expanded properly, so care should be taken to properly set user expectations for a repository so configured.

    It should be noted that a patch to provide both the KeywordExpand and LocalKeyword features has been around a long time. However, that patch implemented these features using tag= and tagexpand= keywords and those keywords are NOT recognized.


    |[[#Configuring-keyword-expansion| < ]]| |[cvs: Tracking third-party sources#Tracking-sources > ]|   |[[#Keyword-substitution| << ]]| |[[#Keyword-substitution| Up ]]| |[cvs: Tracking third-party sources#Tracking-sources >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Problems with the $Log$ keyword. ===

    The $Log$ keyword is somewhat controversial. As long as you are working on your development system the information is easily accessible even if you do not use the $Log$ keyword—just do a cvs log. Once you export the file the history information might be useless anyhow.

    A more serious concern is that CVS is not good at handling $Log$ entries when a branch is merged onto the main trunk. Conflicts often result from the merging operation.

    People also tend to "fix" the log entries in the file (correcting spelling mistakes and maybe even factual errors). If that is done the information from cvs log will not be consistent with the information inside the file. This may or may not be a problem in real life.

    It has been suggested that the $Log$ keyword should be inserted last in the file, and not in the files header, if it is to be used at all. That way the long list of change messages will not interfere with everyday source file browsing.


    |[[#Keyword-substitution| << ]]| |[cvs: Tracking third-party sources#Tracking-sources >> ]|           |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    This document was generated by a tester on a sunny day using [http://www.nongnu.org/texi2html/ texi2html]. texi2html-1.82/test/manuals/res/ccvs_mediawiki/cvs: Special Files0000644000175000017500000000553011264347121026621 0ustar flichtenheldflichtenheld
    |[cvs: How your build system interacts with CVS#Builds < ]| |[cvs: Guide to CVS commands#CVS-commands > ]|   |[cvs: How your build system interacts with CVS#Builds << ]| |[[cvs#Top| Up ]]| |[cvs: Guide to CVS commands#CVS-commands >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    == Special Files ==

    In normal circumstances, CVS works only with regular files. Every file in a project is assumed to be persistent; it must be possible to open, read and close them; and so on. CVS also ignores file permissions and ownerships, leaving such issues to be resolved by the developer at installation time. In other words, it is not possible to "check in" a device into a repository; if the device file cannot be opened, CVS will refuse to handle it. Files also lose their ownerships and permissions during repository transactions.


    |[cvs: How your build system interacts with CVS#Builds << ]| |[cvs: Guide to CVS commands#CVS-commands >> ]|           |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    This document was generated by a tester on a sunny day using [http://www.nongnu.org/texi2html/ texi2html]. texi2html-1.82/test/manuals/res/ccvs_mediawiki/cvs0000644000175000017500000001053611264347121024145 0ustar flichtenheldflichtenheld
    |[[#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    == CVS—Concurrent Versions System v4.2 ==

    This info manual describes how to use and administer CVS version 4.2.


    |[[#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    This document was generated by a tester on a sunny day using [http://www.nongnu.org/texi2html/ texi2html]. texi2html-1.82/test/manuals/res/ccvs_mediawiki/cvs: Recursive behavior0000644000175000017500000001131611264347121027744 0ustar flichtenheldflichtenheld
    |[cvs: Branching and merging#Merging-and-keywords < ]| |[cvs: Adding, removing, and renaming files and directories#Adding-and-removing > ]|   |[cvs: Branching and merging#Branching-and-merging << ]| |[[cvs#Top| Up ]]| |[cvs: Adding, removing, and renaming files and directories#Adding-and-removing >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    == Recursive behavior ==

    Almost all of the subcommands of CVS work recursively when you specify a directory as an argument. For instance, consider this directory structure:

     
          $HOME
            |
            +--tc
            |   |
                +--CVS
                |      (internal CVS files)
                +--Makefile
                +--backend.c
                +--driver.c
                +--frontend.c
                +--parser.c
                +--man
                |    |
                |    +--CVS
                |    |  (internal CVS files)
                |    +--tc.1
                |
                +--testing
                     |
                     +--CVS
                     |  (internal CVS files)
                     +--testpgm.t
                     +--test2.t
    

    If ‘tc’ is the current working directory, the following is true:

    • cvs update testing’ is equivalent to
       
      cvs update testing/testpgm.t testing/test2.t
      
    • cvs update testing man’ updates all files in the subdirectories
    • cvs update .’ or just ‘cvs update’ updates all files in the tc directory

    If no arguments are given to update it will update all files in the current working directory and all its subdirectories. In other words, ‘.’ is a default argument to update. This is also true for most of the CVS subcommands, not only the update command.

    The recursive behavior of the CVS subcommands can be turned off with the ‘-l’ option. Conversely, the ‘-R’ option can be used to force recursion if ‘-l’ is specified in ‘~/.cvsrc’ (see section [cvs: Guide to CVS commands#g_t_007e_002f_002ecvsrc Default options and the ~/.cvsrc file]).

     
    $ cvs update -l         # Don't update files in subdirectories
    

    |[cvs: Branching and merging#Branching-and-merging << ]| |[cvs: Adding, removing, and renaming files and directories#Adding-and-removing >> ]|           |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    This document was generated by a tester on a sunny day using [http://www.nongnu.org/texi2html/ texi2html]. texi2html-1.82/test/manuals/res/ccvs_mediawiki/cvs: Short Table of Contents0000644000175000017500000000764311264347121030477 0ustar flichtenheldflichtenheld
    |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    == Short Table of Contents ==
    • [cvs: Overview#Overview Overview]
    • [cvs: The Repository#Repository The Repository]
    • [cvs: Starting a project with CVS#Starting-a-new-project Starting a project with CVS]
    • [cvs: Revisions#Revisions Revisions]
    • [cvs: Branching and merging#Branching-and-merging Branching and merging]
    • [cvs: Recursive behavior#Recursive-behavior Recursive behavior]
    • [cvs: Adding, removing, and renaming files and directories#Adding-and-removing Adding, removing, and renaming files and directories]
    • [cvs: History browsing#History-browsing History browsing]
    • [cvs: Handling binary files#Binary-files Handling binary files]
    • [cvs: Multiple developers#Multiple-developers Multiple developers]
    • [cvs: Revision management#Revision-management Revision management]
    • [cvs: Keyword substitution#Keyword-substitution Keyword substitution]
    • [cvs: Tracking third-party sources#Tracking-sources Tracking third-party sources]
    • [cvs: How your build system interacts with CVS#Builds How your build system interacts with CVS]
    • [cvs: Special Files#Special-Files Special Files]
    • [cvs: Guide to CVS commands#CVS-commands Guide to CVS commands]
    • [cvs: Quick reference to CVS commands#Invoking-CVS Quick reference to CVS commands]
    • [cvs: Reference manual for Administrative files#Administrative-files Reference manual for Administrative files]
    • [cvs: All environment variables which affect CVS#Environment-variables All environment variables which affect CVS]
    • [cvs: Compatibility between CVS Versions#Compatibility Compatibility between CVS Versions]
    • [cvs: Troubleshooting#Troubleshooting Troubleshooting]
    • [cvs: Credits#Credits Credits]
    • [cvs: Dealing with bugs in CVS or this manual#BUGS Dealing with bugs in CVS or this manual]
    • [cvs: Index#Index Index]

    |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    This document was generated by a tester on a sunny day using [http://www.nongnu.org/texi2html/ texi2html]. texi2html-1.82/test/manuals/res/ccvs_mediawiki/cvs: Quick reference to CVS commands0000644000175000017500000012215111264347121032011 0ustar flichtenheldflichtenheld
    |[cvs: Guide to CVS commands#update-output < ]| |[cvs: Reference manual for Administrative files#Administrative-files > ]|   |[cvs: Guide to CVS commands#CVS-commands << ]| |[[cvs#Top| Up ]]| |[cvs: Reference manual for Administrative files#Administrative-files >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    == Quick reference to CVS commands ==

    This appendix describes how to invoke CVS, with references to where each command or feature is described in detail. For other references run the cvs --help command, or see [cvs: Index#Index Index].

    A CVS command looks like:

     
    cvs [ global_options ] command [ command_options ] [ command_args ]
    

    Global options:

    --allow-root=rootdir

    Specify legal CVSROOT directory (server only) (not in CVS 1.9 and older). See [cvs: The Repository#Password-authentication-server Setting up the server for password authentication].

    -a

    Authenticate all communication (client only) (not in CVS 1.9 and older). See [cvs: Guide to CVS commands#Global-options Global options].

    -b

    Specify RCS location (CVS 1.9 and older). See [cvs: Guide to CVS commands#Global-options Global options].

    -d root

    Specify the CVSROOT. See [cvs: The Repository#Repository The Repository].

    -e editor

    Edit messages with editor. See [cvs: Overview#Committing-your-changes Committing your changes].

    -f

    Do not read the ‘~/.cvsrc’ file. See [cvs: Guide to CVS commands#Global-options Global options].

    -H
    --help

    Print a help message. See [cvs: Guide to CVS commands#Global-options Global options].

    -l

    Do not log in ‘$CVSROOT/CVSROOT/history’ file. See [cvs: Guide to CVS commands#Global-options Global options].

    -n

    Do not change any files. See [cvs: Guide to CVS commands#Global-options Global options].

    -Q

    Be really quiet. See [cvs: Guide to CVS commands#Global-options Global options].

    -q

    Be somewhat quiet. See [cvs: Guide to CVS commands#Global-options Global options].

    -r

    Make new working files read-only. See [cvs: Guide to CVS commands#Global-options Global options].

    -s variable=value

    Set a user variable. See [cvs: Reference manual for Administrative files#Variables Expansions in administrative files].

    -T tempdir

    Put temporary files in tempdir. See [cvs: Guide to CVS commands#Global-options Global options].

    -t

    Trace CVS execution. See [cvs: Guide to CVS commands#Global-options Global options].

    -v
    --version

    Display version and copyright information for CVS.

    -w

    Make new working files read-write. See [cvs: Guide to CVS commands#Global-options Global options].

    -x

    Encrypt all communication (client only). See [cvs: Guide to CVS commands#Global-options Global options].

    -z gzip-level

    Set the compression level (client only). See [cvs: Guide to CVS commands#Global-options Global options].

    Keyword expansion modes (see section [cvs: Keyword substitution#Substitution-modes Substitution modes]):

     
    -kkv  $Id: file1,v 1.1 1993/12/09 03:21:13 joe Exp $
    -kkvl $Id: file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $
    -kk   $Id$
    -kv   file1,v 1.1 1993/12/09 03:21:13 joe Exp
    -ko   no expansion
    -kb   no expansion, file is binary
    

    Keywords (see section [cvs: Keyword substitution#Keyword-list Keyword List]):

     
    $Author: joe $
    $Date: 1993/12/09 03:21:13 $
    $CVSHeader: files/file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $
    $Header: /home/files/file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $
    $Id: file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $
    $Locker: harry $
    $Name: snapshot_1_14 $
    $RCSfile: file1,v $
    $Revision: 1.1 $
    $Source: /home/files/file1,v $
    $State: Exp $
    $Log: file1,v $
    Revision 1.1  1993/12/09 03:30:17  joe
    Initial revision
    
    

    Commands, command options, and command arguments:

    add [options] [files…]

    Add a new file/directory. See [cvs: Adding, removing, and renaming files and directories#Adding-files Adding files to a directory].

    -k kflag

    Set keyword expansion.

    -m msg

    Set file description.

    admin [options] [files…]

    Administration of history files in the repository. See [cvs: Guide to CVS commands#admin admin—Administration].

    -b[rev]

    Set default branch. See [cvs: Tracking third-party sources#Reverting-local-changes Reverting to the latest vendor release].

    -cstring

    Set comment leader.

    -ksubst

    Set keyword substitution. See [cvs: Keyword substitution#Keyword-substitution Keyword substitution].

    -l[rev]

    Lock revision rev, or latest revision.

    -mrev:msg

    Replace the log message of revision rev with msg.

    -orange

    Delete revisions from the repository. See [cvs: Guide to CVS commands#admin-options admin options].

    -q

    Run quietly; do not print diagnostics.

    -sstate[:rev]

    Set the state.

    -t

    Set file description from standard input.

    -tfile

    Set file description from file.

    -t-string

    Set file description to string.

    -u[rev]

    Unlock revision rev, or latest revision.

    annotate [options] [files…]

    Show last revision where each line was modified. See [cvs: History browsing#annotate Annotate command].

    -D date

    Annotate the most recent revision no later than date. See [cvs: Guide to CVS commands#Common-options Common command options].

    -F

    Force annotation of binary files. (Without this option, binary files are skipped with a message.)

    -f

    Use head revision if tag/date not found. See [cvs: Guide to CVS commands#Common-options Common command options].

    -l

    Local; run only in current working directory. See section [cvs: Recursive behavior#Recursive-behavior Recursive behavior].

    -R

    Operate recursively (default). See section [cvs: Recursive behavior#Recursive-behavior Recursive behavior].

    -r tag

    Annotate revision tag. See [cvs: Guide to CVS commands#Common-options Common command options].

    checkout [options] modules

    Get a copy of the sources. See [cvs: Guide to CVS commands#checkout checkout—Check out sources for editing].

    -A

    Reset any sticky tags/date/options. See [cvs: Revisions#Sticky-tags Sticky tags] and [cvs: Keyword substitution#Keyword-substitution Keyword substitution].

    -c

    Output the module database. See [cvs: Guide to CVS commands#checkout-options checkout options].

    -D date

    Check out revisions as of date (is sticky). See [cvs: Guide to CVS commands#Common-options Common command options].

    -d dir

    Check out into dir. See [cvs: Guide to CVS commands#checkout-options checkout options].

    -f

    Use head revision if tag/date not found. See [cvs: Guide to CVS commands#Common-options Common command options].

    -j rev

    Merge in changes. See [cvs: Guide to CVS commands#checkout-options checkout options].

    -k kflag

    Use kflag keyword expansion. See [cvs: Keyword substitution#Substitution-modes Substitution modes].

    -l

    Local; run only in current working directory. See section [cvs: Recursive behavior#Recursive-behavior Recursive behavior].

    -N

    Don’t “shorten” module paths if -d specified. See [cvs: Guide to CVS commands#checkout-options checkout options].

    -n

    Do not run module program (if any). See [cvs: Guide to CVS commands#checkout-options checkout options].

    -P

    Prune empty directories. See [cvs: Adding, removing, and renaming files and directories#Moving-directories Moving and renaming directories].

    -p

    Check out files to standard output (avoids stickiness). See [cvs: Guide to CVS commands#checkout-options checkout options].

    -R

    Operate recursively (default). See section [cvs: Recursive behavior#Recursive-behavior Recursive behavior].

    -r tag

    Checkout revision tag (is sticky). See [cvs: Guide to CVS commands#Common-options Common command options].

    -s

    Like -c, but include module status. See [cvs: Guide to CVS commands#checkout-options checkout options].

    commit [options] [files…]

    Check changes into the repository. See [cvs: Guide to CVS commands#commit commit—Check files into the repository].

    -F file

    Read log message from file. See [cvs: Guide to CVS commands#commit-options commit options].

    -f

    Force the file to be committed; disables recursion. See [cvs: Guide to CVS commands#commit-options commit options].

    -l

    Local; run only in current working directory. See [cvs: Recursive behavior#Recursive-behavior Recursive behavior].

    -m msg

    Use msg as log message. See [cvs: Guide to CVS commands#commit-options commit options].

    -n

    Do not run module program (if any). See [cvs: Guide to CVS commands#commit-options commit options].

    -R

    Operate recursively (default). See section [cvs: Recursive behavior#Recursive-behavior Recursive behavior].

    -r rev

    Commit to rev. See [cvs: Guide to CVS commands#commit-options commit options].

    diff [options] [files…]

    Show differences between revisions. See [cvs: Guide to CVS commands#diff diff—Show differences between revisions]. In addition to the options shown below, accepts a wide variety of options to control output style, for example ‘-c’ for context diffs.

    -D date1

    Diff revision for date against working file. See [cvs: Guide to CVS commands#diff-options diff options].

    -D date2

    Diff rev1/date1 against date2. See [cvs: Guide to CVS commands#diff-options diff options].

    -l

    Local; run only in current working directory. See [cvs: Recursive behavior#Recursive-behavior Recursive behavior].

    -N

    Include diffs for added and removed files. See [cvs: Guide to CVS commands#diff-options diff options].

    -R

    Operate recursively (default). See section [cvs: Recursive behavior#Recursive-behavior Recursive behavior].

    -r rev1

    Diff revision for rev1 against working file. See [cvs: Guide to CVS commands#diff-options diff options].

    -r rev2

    Diff rev1/date1 against rev2. See [cvs: Guide to CVS commands#diff-options diff options].

    edit [options] [files…]

    Get ready to edit a watched file. See [cvs: Multiple developers#Editing-files How to edit a file which is being watched].

    -a actions

    Specify actions for temporary watch, where actions is edit, unedit, commit, all, or none. See [cvs: Multiple developers#Editing-files How to edit a file which is being watched].

    -l

    Local; run only in current working directory. See [cvs: Recursive behavior#Recursive-behavior Recursive behavior].

    -R

    Operate recursively (default). See section [cvs: Recursive behavior#Recursive-behavior Recursive behavior].

    editors [options] [files…]

    See who is editing a watched file. See [cvs: Multiple developers#Watch-information Information about who is watching and editing].

    -l

    Local; run only in current working directory. See [cvs: Recursive behavior#Recursive-behavior Recursive behavior].

    -R

    Operate recursively (default). See section [cvs: Recursive behavior#Recursive-behavior Recursive behavior].

    export [options] modules

    Export files from CVS. See [cvs: Guide to CVS commands#export export—Export sources from CVS, similar to checkout].

    -D date

    Check out revisions as of date. See [cvs: Guide to CVS commands#Common-options Common command options].

    -d dir

    Check out into dir. See [cvs: Guide to CVS commands#export-options export options].

    -f

    Use head revision if tag/date not found. See [cvs: Guide to CVS commands#Common-options Common command options].

    -k kflag

    Use kflag keyword expansion. See [cvs: Keyword substitution#Substitution-modes Substitution modes].

    -l

    Local; run only in current working directory. See section [cvs: Recursive behavior#Recursive-behavior Recursive behavior].

    -N

    Don’t “shorten” module paths if -d specified. See [cvs: Guide to CVS commands#export-options export options].

    -n

    Do not run module program (if any). See [cvs: Guide to CVS commands#export-options export options].

    -R

    Operate recursively (default). See section [cvs: Recursive behavior#Recursive-behavior Recursive behavior].

    -r tag

    Checkout revision tag. See [cvs: Guide to CVS commands#Common-options Common command options].

    history [options] [files…]

    Show repository access history. See [cvs: Guide to CVS commands#history history—Show status of files and users].

    -a

    All users (default is self). See [cvs: Guide to CVS commands#history-options history options].

    -b str

    Back to record with str in module/file/repos field. See [cvs: Guide to CVS commands#history-options history options].

    -c

    Report on committed (modified) files. See [cvs: Guide to CVS commands#history-options history options].

    -D date

    Since date. See [cvs: Guide to CVS commands#history-options history options].

    -e

    Report on all record types. See [cvs: Guide to CVS commands#history-options history options].

    -l

    Last modified (committed or modified report). See [cvs: Guide to CVS commands#history-options history options].

    -m module

    Report on module (repeatable). See [cvs: Guide to CVS commands#history-options history options].

    -n module

    In module. See [cvs: Guide to CVS commands#history-options history options].

    -o

    Report on checked out modules. See [cvs: Guide to CVS commands#history-options history options].

    -p repository

    In repository. See [cvs: Guide to CVS commands#history-options history options].

    -r rev

    Since revision rev. See [cvs: Guide to CVS commands#history-options history options].

    -T

    Produce report on all TAGs. See [cvs: Guide to CVS commands#history-options history options].

    -t tag

    Since tag record placed in history file (by anyone). See [cvs: Guide to CVS commands#history-options history options].

    -u user

    For user user (repeatable). See [cvs: Guide to CVS commands#history-options history options].

    -w

    Working directory must match. See [cvs: Guide to CVS commands#history-options history options].

    -x types

    Report on types, one or more of TOEFWUCGMAR. See [cvs: Guide to CVS commands#history-options history options].

    -z zone

    Output for time zone zone. See [cvs: Guide to CVS commands#history-options history options].

    import [options] repository vendor-tag release-tags

    Import files into CVS, using vendor branches. See [cvs: Guide to CVS commands#import import—Import sources into CVS, using vendor branches].

    -b bra

    Import to vendor branch bra. See [cvs: Tracking third-party sources#Multiple-vendor-branches Multiple vendor branches].

    -d

    Use the file’s modification time as the time of import. See [cvs: Guide to CVS commands#import-options import options].

    -k kflag

    Set default keyword substitution mode. See [cvs: Guide to CVS commands#import-options import options].

    -m msg

    Use msg for log message. See [cvs: Guide to CVS commands#import-options import options].

    -I ign

    More files to ignore (! to reset). See [cvs: Guide to CVS commands#import-options import options].

    -W spec

    More wrappers. See [cvs: Guide to CVS commands#import-options import options].

    init

    Create a CVS repository if it doesn’t exist. See [cvs: The Repository#Creating-a-repository Creating a repository].

    kserver

    Kerberos authenticated server. See [cvs: The Repository#Kerberos-authenticated Direct connection with kerberos].

    log [options] [files…]

    Print out history information for files. See [cvs: Guide to CVS commands#log log—Print out log information for files].

    -b

    Only list revisions on the default branch. See [cvs: Guide to CVS commands#log-options log options].

    -d dates

    Specify dates (d1<d2 for range, d for latest before). See [cvs: Guide to CVS commands#log-options log options].

    -h

    Only print header. See [cvs: Guide to CVS commands#log-options log options].

    -l

    Local; run only in current working directory. See [cvs: Recursive behavior#Recursive-behavior Recursive behavior].

    -N

    Do not list tags. See [cvs: Guide to CVS commands#log-options log options].

    -R

    Only print name of RCS file. See [cvs: Guide to CVS commands#log-options log options].

    -rrevs

    Only list revisions revs. See [cvs: Guide to CVS commands#log-options log options].

    -s states

    Only list revisions with specified states. See [cvs: Guide to CVS commands#log-options log options].

    -t

    Only print header and descriptive text. See [cvs: Guide to CVS commands#log-options log options].

    -wlogins

    Only list revisions checked in by specified logins. See [cvs: Guide to CVS commands#log-options log options].

    login

    Prompt for password for authenticating server. See [cvs: The Repository#Password-authentication-client Using the client with password authentication].

    logout

    Remove stored password for authenticating server. See [cvs: The Repository#Password-authentication-client Using the client with password authentication].

    pserver

    Password authenticated server. See [cvs: The Repository#Password-authentication-server Setting up the server for password authentication].

    rannotate [options] [modules…]

    Show last revision where each line was modified. See [cvs: History browsing#annotate Annotate command].

    -D date

    Annotate the most recent revision no later than date. See [cvs: Guide to CVS commands#Common-options Common command options].

    -F

    Force annotation of binary files. (Without this option, binary files are skipped with a message.)

    -f

    Use head revision if tag/date not found. See [cvs: Guide to CVS commands#Common-options Common command options].

    -l

    Local; run only in current working directory. See section [cvs: Recursive behavior#Recursive-behavior Recursive behavior].

    -R

    Operate recursively (default). See section [cvs: Recursive behavior#Recursive-behavior Recursive behavior].

    -r tag

    Annotate revision tag. See [cvs: Guide to CVS commands#Common-options Common command options].

    rdiff [options] modules

    Show differences between releases. See [cvs: Guide to CVS commands#rdiff rdiff—’patch’ format diffs between releases].

    -c

    Context diff output format (default). See [cvs: Guide to CVS commands#rdiff-options rdiff options].

    -D date

    Select revisions based on date. See [cvs: Guide to CVS commands#Common-options Common command options].

    -f

    Use head revision if tag/date not found. See [cvs: Guide to CVS commands#Common-options Common command options].

    -l

    Local; run only in current working directory. See [cvs: Recursive behavior#Recursive-behavior Recursive behavior].

    -R

    Operate recursively (default). See section [cvs: Recursive behavior#Recursive-behavior Recursive behavior].

    -r rev

    Select revisions based on rev. See [cvs: Guide to CVS commands#Common-options Common command options].

    -s

    Short patch - one liner per file. See [cvs: Guide to CVS commands#rdiff-options rdiff options].

    -t

    Top two diffs - last change made to the file. See [cvs: Guide to CVS commands#diff-options diff options].

    -u

    Unidiff output format. See [cvs: Guide to CVS commands#rdiff-options rdiff options].

    -V vers

    Use RCS Version vers for keyword expansion (obsolete). See [cvs: Guide to CVS commands#rdiff-options rdiff options].

    release [options] directory

    Indicate that a directory is no longer in use. See [cvs: Guide to CVS commands#release release—Indicate that a Module is no longer in use].

    -d

    Delete the given directory. See [cvs: Guide to CVS commands#release-options release options].

    remove [options] [files…]

    Remove an entry from the repository. See [cvs: Adding, removing, and renaming files and directories#Removing-files Removing files].

    -f

    Delete the file before removing it. See [cvs: Adding, removing, and renaming files and directories#Removing-files Removing files].

    -l

    Local; run only in current working directory. See [cvs: Recursive behavior#Recursive-behavior Recursive behavior].

    -R

    Operate recursively (default). See section [cvs: Recursive behavior#Recursive-behavior Recursive behavior].

    rlog [options] [files…]

    Print out history information for modules. See [cvs: Guide to CVS commands#log log—Print out log information for files].

    -b

    Only list revisions on the default branch. See [cvs: Guide to CVS commands#log-options log options].

    -d dates

    Specify dates (d1<d2 for range, d for latest before). See [cvs: Guide to CVS commands#log-options log options].

    -h

    Only print header. See [cvs: Guide to CVS commands#log-options log options].

    -l

    Local; run only in current working directory. See [cvs: Recursive behavior#Recursive-behavior Recursive behavior].

    -N

    Do not list tags. See [cvs: Guide to CVS commands#log-options log options].

    -R

    Only print name of RCS file. See [cvs: Guide to CVS commands#log-options log options].

    -rrevs

    Only list revisions revs. See [cvs: Guide to CVS commands#log-options log options].

    -s states

    Only list revisions with specified states. See [cvs: Guide to CVS commands#log-options log options].

    -t

    Only print header and descriptive text. See [cvs: Guide to CVS commands#log-options log options].

    -wlogins

    Only list revisions checked in by specified logins. See [cvs: Guide to CVS commands#log-options log options].

    rtag [options] tag modules

    Add a symbolic tag to a module. See [cvs: Revisions#Revisions Revisions] and [cvs: Branching and merging#Branching-and-merging Branching and merging].

    -a

    Clear tag from removed files that would not otherwise be tagged. See [cvs: Revisions#Tagging-add_002fremove Tagging and adding and removing files].

    -b

    Create a branch named tag. See [cvs: Branching and merging#Branching-and-merging Branching and merging].

    -B

    Used in conjunction with -F or -d, enables movement and deletion of branch tags. Use with extreme caution.

    -D date

    Tag revisions as of date. See [cvs: Revisions#Tagging-by-date_002ftag Specifying what to tag by date or revision].

    -d

    Delete tag. See [cvs: Revisions#Modifying-tags Deleting, moving, and renaming tags].

    -F

    Move tag if it already exists. See [cvs: Revisions#Modifying-tags Deleting, moving, and renaming tags].

    -f

    Force a head revision match if tag/date not found. See [cvs: Revisions#Tagging-by-date_002ftag Specifying what to tag by date or revision].

    -l

    Local; run only in current working directory. See [cvs: Recursive behavior#Recursive-behavior Recursive behavior].

    -n

    No execution of tag program. See [cvs: Guide to CVS commands#Common-options Common command options].

    -R

    Operate recursively (default). See section [cvs: Recursive behavior#Recursive-behavior Recursive behavior].

    -r rev

    Tag existing tag rev. See [cvs: Revisions#Tagging-by-date_002ftag Specifying what to tag by date or revision].

    server

    Rsh server. See [cvs: The Repository#Connecting-via-rsh Connecting with rsh].

    status [options] files

    Display status information in a working directory. See [cvs: Multiple developers#File-status File status].

    -l

    Local; run only in current working directory. See [cvs: Recursive behavior#Recursive-behavior Recursive behavior].

    -R

    Operate recursively (default). See section [cvs: Recursive behavior#Recursive-behavior Recursive behavior].

    -v

    Include tag information for file. See [cvs: Revisions#Tags Tags–Symbolic revisions].

    tag [options] tag [files…]

    Add a symbolic tag to checked out version of files. See [cvs: Revisions#Revisions Revisions] and [cvs: Branching and merging#Branching-and-merging Branching and merging].

    -b

    Create a branch named tag. See [cvs: Branching and merging#Branching-and-merging Branching and merging].

    -c

    Check that working files are unmodified. See [cvs: Revisions#Tagging-the-working-directory Specifying what to tag from the working directory].

    -D date

    Tag revisions as of date. See [cvs: Revisions#Tagging-by-date_002ftag Specifying what to tag by date or revision].

    -d

    Delete tag. See [cvs: Revisions#Modifying-tags Deleting, moving, and renaming tags].

    -F

    Move tag if it already exists. See [cvs: Revisions#Modifying-tags Deleting, moving, and renaming tags].

    -f

    Force a head revision match if tag/date not found. See [cvs: Revisions#Tagging-by-date_002ftag Specifying what to tag by date or revision].

    -l

    Local; run only in current working directory. See [cvs: Recursive behavior#Recursive-behavior Recursive behavior].

    -R

    Operate recursively (default). See section [cvs: Recursive behavior#Recursive-behavior Recursive behavior].

    -r rev

    Tag existing tag rev. See [cvs: Revisions#Tagging-by-date_002ftag Specifying what to tag by date or revision].

    unedit [options] [files…]

    Undo an edit command. See [cvs: Multiple developers#Editing-files How to edit a file which is being watched].

    -l

    Local; run only in current working directory. See [cvs: Recursive behavior#Recursive-behavior Recursive behavior].

    -R

    Operate recursively (default). See section [cvs: Recursive behavior#Recursive-behavior Recursive behavior].

    update [options] [files…]

    Bring work tree in sync with repository. See [cvs: Guide to CVS commands#update update—Bring work tree in sync with repository].

    -A

    Reset any sticky tags/date/options. See [cvs: Revisions#Sticky-tags Sticky tags] and [cvs: Keyword substitution#Keyword-substitution Keyword substitution].

    -C

    Overwrite locally modified files with clean copies from the repository (the modified file is saved in ‘.#file.revision’, however).

    -D date

    Check out revisions as of date (is sticky). See [cvs: Guide to CVS commands#Common-options Common command options].

    -d

    Create directories. See [cvs: Guide to CVS commands#update-options update options].

    -f

    Use head revision if tag/date not found. See [cvs: Guide to CVS commands#Common-options Common command options].

    -I ign

    More files to ignore (! to reset). See [cvs: Guide to CVS commands#import-options import options].

    -j rev

    Merge in changes. See [cvs: Guide to CVS commands#update-options update options].

    -k kflag

    Use kflag keyword expansion. See [cvs: Keyword substitution#Substitution-modes Substitution modes].

    -l

    Local; run only in current working directory. See section [cvs: Recursive behavior#Recursive-behavior Recursive behavior].

    -P

    Prune empty directories. See [cvs: Adding, removing, and renaming files and directories#Moving-directories Moving and renaming directories].

    -p

    Check out files to standard output (avoids stickiness). See [cvs: Guide to CVS commands#update-options update options].

    -R

    Operate recursively (default). See section [cvs: Recursive behavior#Recursive-behavior Recursive behavior].

    -r tag

    Checkout revision tag (is sticky). See [cvs: Guide to CVS commands#Common-options Common command options].

    -W spec

    More wrappers. See [cvs: Guide to CVS commands#import-options import options].

    version

    Display the version of CVS being used. If the repository is remote, display both the client and server versions.

    watch [on|off|add|remove] [options] [files…]

    on/off: turn on/off read-only checkouts of files. See [cvs: Multiple developers#Setting-a-watch Telling CVS to watch certain files].

    add/remove: add or remove notification on actions. See [cvs: Multiple developers#Getting-Notified Telling CVS to notify you].

    -a actions

    Specify actions for temporary watch, where actions is edit, unedit, commit, all, or none. See [cvs: Multiple developers#Editing-files How to edit a file which is being watched].

    -l

    Local; run only in current working directory. See [cvs: Recursive behavior#Recursive-behavior Recursive behavior].

    -R

    Operate recursively (default). See section [cvs: Recursive behavior#Recursive-behavior Recursive behavior].

    watchers [options] [files…]

    See who is watching a file. See [cvs: Multiple developers#Watch-information Information about who is watching and editing].

    -l

    Local; run only in current working directory. See [cvs: Recursive behavior#Recursive-behavior Recursive behavior].

    -R

    Operate recursively (default). See section [cvs: Recursive behavior#Recursive-behavior Recursive behavior].


    |[cvs: Guide to CVS commands#CVS-commands << ]| |[cvs: Reference manual for Administrative files#Administrative-files >> ]|           |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    This document was generated by a tester on a sunny day using [http://www.nongnu.org/texi2html/ texi2html]. texi2html-1.82/test/manuals/res/ccvs_mediawiki/cvs: All environment variables which affect CVS0000644000175000017500000002701411264347121034115 0ustar flichtenheldflichtenheld
    |[cvs: Reference manual for Administrative files#config < ]| |[cvs: Compatibility between CVS Versions#Compatibility > ]|   |[cvs: Reference manual for Administrative files#Administrative-files << ]| |[[cvs#Top| Up ]]| |[cvs: Compatibility between CVS Versions#Compatibility >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    == All environment variables which affect CVS ==

    This is a complete list of all environment variables that affect CVS.

    $CVSIGNORE

    A whitespace-separated list of file name patterns that CVS should ignore. See section [cvs: Reference manual for Administrative files#cvsignore Ignoring files via cvsignore].

    $CVSWRAPPERS

    A whitespace-separated list of file name patterns that CVS should treat as wrappers. See section [cvs: Reference manual for Administrative files#Wrappers The cvswrappers file].

    $CVSREAD

    If this is set, checkout and update will try hard to make the files in your working directory read-only. When this is not set, the default behavior is to permit modification of your working files.

    $CVSREADONLYFS

    Turns on read-only repository mode. This allows one to check out from a read-only repository, such as within an anoncvs server, or from a CDROM repository.

    It has the same effect as if the ‘-R’ command-line option is used. This can also allow the use of read-only NFS repositories.

    $CVSUMASK

    Controls permissions of files in the repository. See [cvs: The Repository#File-permissions File permissions].

    $CVSROOT

    Should contain the full pathname to the root of the CVS source repository (where the RCS files are kept). This information must be available to CVS for most commands to execute; if $CVSROOT is not set, or if you wish to override it for one invocation, you can supply it on the command line: ‘cvs -d cvsroot cvs_command…’ Once you have checked out a working directory, CVS stores the appropriate root (in the file ‘CVS/Root’), so normally you only need to worry about this when initially checking out a working directory.

    $CVSEDITOR
    $EDITOR
    $VISUAL

    Specifies the program to use for recording log messages during commit. $CVSEDITOR overrides $EDITOR, which overrides $VISUAL. See [cvs: Overview#Committing-your-changes Committing your changes] for more or [cvs: Guide to CVS commands#Global-options Global options] for alternative ways of specifying a log editor.

    $PATH

    If $RCSBIN is not set, and no path is compiled into CVS, it will use $PATH to try to find all programs it uses.

    $HOME
    $HOMEPATH
    $HOMEDRIVE

    Used to locate the directory where the ‘.cvsrc’ file, and other such files, are searched. On Unix, CVS just checks for HOME. On Windows NT, the system will set HOMEDRIVE, for example to ‘d:’ and HOMEPATH, for example to ‘\joe’. On Windows 95, you’ll probably need to set HOMEDRIVE and HOMEPATH yourself.

    $CVS_RSH

    Specifies the external program which CVS connects with, when :ext: access method is specified. see section [cvs: The Repository#Connecting-via-rsh Connecting with rsh].

    $CVS_SERVER

    Used in client-server mode when accessing a remote repository using RSH. It specifies the name of the program to start on the server side (and any necessary arguments) when accessing a remote repository using the :ext:, :fork:, or :server: access methods. The default value for :ext: and :server: is cvs; the default value for :fork: is the name used to run the client. see section [cvs: The Repository#Connecting-via-rsh Connecting with rsh]

    $CVS_PASSFILE

    Used in client-server mode when accessing the cvs login server. Default value is ‘$HOME/.cvspass’. see section [cvs: The Repository#Password-authentication-client Using the client with password authentication]

    $CVS_CLIENT_PORT

    Used in client-server mode to set the port to use when accessing the server via Kerberos, GSSAPI, or CVS’s password authentication protocol if the port is not specified in the CVSROOT. see section [cvs: The Repository#Remote-repositories Remote repositories]

    $CVS_RCMD_PORT

    Used in client-server mode. If set, specifies the port number to be used when accessing the RCMD demon on the server side. (Currently not used for Unix clients).

    $CVS_CLIENT_LOG

    Used for debugging only in client-server mode. If set, everything sent to the server is logged into ‘$CVS_CLIENT_LOG.in’ and everything sent from the server is logged into ‘$CVS_CLIENT_LOG.out’.

    $CVS_SERVER_SLEEP

    Used only for debugging the server side in client-server mode. If set, delays the start of the server child process the specified amount of seconds so that you can attach to it with a debugger.

    $CVS_IGNORE_REMOTE_ROOT

    For CVS 1.10 and older, setting this variable prevents CVS from overwriting the ‘CVS/Root’ file when the ‘-d’ global option is specified. Later versions of CVS do not rewrite ‘CVS/Root’, so CVS_IGNORE_REMOTE_ROOT has no effect.

    $CVS_LOCAL_BRANCH_NUM

    Setting this variable allows some control over the branch number that is assigned. This is specifically to support the local commit feature of CVSup. If one sets CVS_LOCAL_BRANCH_NUM to (say) 1000 then branches the local repository, the revision numbers will look like 1.66.1000.xx. There is almost a dead-set certainty that there will be no conflicts with version numbers.

    $COMSPEC

    Used under OS/2 only. It specifies the name of the command interpreter and defaults to CMD.EXE.

    $TMPDIR
    $TMP
    $TEMP

    Directory in which temporary files are located. The CVS server uses TMPDIR. See section [cvs: Guide to CVS commands#Global-options Global options], for a description of how to specify this. Some parts of CVS will always use ‘/tmp’ (via the tmpnam function provided by the system).

    On Windows NT, TMP is used (via the _tempnam function provided by the system).

    The patch program which is used by the CVS client uses TMPDIR, and if it is not set, uses ‘/tmp’ (at least with GNU patch 2.1). Note that if your server and client are both running CVS 1.9.10 or later, CVS will not invoke an external patch program.

    $CVS_PID

    This is the process identification (aka pid) number of the CVS process. It is often useful in the programs and/or scripts specified by the ‘commitinfo’, ‘verifymsg’, ‘loginfo’ files.


    |[cvs: Reference manual for Administrative files#Administrative-files << ]| |[cvs: Compatibility between CVS Versions#Compatibility >> ]|           |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    This document was generated by a tester on a sunny day using [http://www.nongnu.org/texi2html/ texi2html]. texi2html-1.82/test/manuals/res/ccvs_mediawiki/cvs: About this Manual0000644000175000017500000000640711264347121027422 0ustar flichtenheldflichtenheld
    |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[[#SEC_About| ? ]]|
    == About This Document ==

    This document was generated by a tester on a sunny day using [http://www.nongnu.org/texi2html/ texi2html].

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[[#SEC_About| ? ]]|
    This document was generated by a tester on a sunny day using [http://www.nongnu.org/texi2html/ texi2html]. texi2html-1.82/test/manuals/res/ccvs_mediawiki/cvs: Tracking third-party sources0000644000175000017500000004411611264347121031657 0ustar flichtenheldflichtenheld
    |[cvs: Keyword substitution#Log-keyword < ]| |[[#First-import| > ]]|   |[cvs: Keyword substitution#Keyword-substitution << ]| |[[cvs#Top| Up ]]| |[cvs: How your build system interacts with CVS#Builds >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    == Tracking third-party sources ==

    If you modify a program to better fit your site, you probably want to include your modifications when the next release of the program arrives. CVS can help you with this task.

    In the terminology used in CVS, the supplier of the program is called a vendor. The unmodified distribution from the vendor is checked in on its own branch, the vendor branch. CVS reserves branch 1.1.1 for this use.

    When you modify the source and commit it, your revision will end up on the main trunk. When a new release is made by the vendor, you commit it on the vendor branch and copy the modifications onto the main trunk.

    Use the import command to create and update the vendor branch. When you import a new file, the vendor branch is made the ‘head’ revision, so anyone that checks out a copy of the file gets that revision. When a local modification is committed it is placed on the main trunk, and made the ‘head’ revision.


    |[[#Tracking-sources| < ]]| |[[#Update-imports| > ]]|   |[[#Tracking-sources| << ]]| |[[#Tracking-sources| Up ]]| |[cvs: How your build system interacts with CVS#Builds >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Importing for the first time ===

    Use the import command to check in the sources for the first time. When you use the import command to track third-party sources, the vendor tag and release tags are useful. The vendor tag is a symbolic name for the branch (which is always 1.1.1, unless you use the ‘-b branch’ flag—see [[#Multiple-vendor-branches|Multiple vendor branches]].). The release tags are symbolic names for a particular release, such as ‘FSF_0_04’.

    Note that import does not change the directory in which you invoke it. In particular, it does not set up that directory as a CVS working directory; if you want to work with the sources import them first and then check them out into a different directory (see section [cvs: Overview#Getting-the-source Getting the source]).

    Suppose you have the sources to a program called wdiff in a directory ‘wdiff-0.04’, and are going to make private modifications that you want to be able to use even when new releases are made in the future. You start by importing the source to your repository:

     
    $ cd wdiff-0.04
    $ cvs import -m "Import of FSF v. 0.04" fsf/wdiff FSF_DIST WDIFF_0_04
    

    The vendor tag is named ‘FSF_DIST’ in the above example, and the only release tag assigned is ‘WDIFF_0_04’.


    |[[#First-import| < ]]| |[[#Reverting-local-changes| > ]]|   |[[#Tracking-sources| << ]]| |[[#Tracking-sources| Up ]]| |[cvs: How your build system interacts with CVS#Builds >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Updating with the import command ===

    When a new release of the source arrives, you import it into the repository with the same import command that you used to set up the repository in the first place. The only difference is that you specify a different release tag this time:

     
    $ tar xfz wdiff-0.05.tar.gz
    $ cd wdiff-0.05
    $ cvs import -m "Import of FSF v. 0.05" fsf/wdiff FSF_DIST WDIFF_0_05
    

    For files that have not been modified locally, the newly created revision becomes the head revision. If you have made local changes, import will warn you that you must merge the changes into the main trunk, and tell you to use ‘checkout -j’ to do so:

     
    $ cvs checkout -jFSF_DIST:yesterday -jFSF_DIST wdiff
    

    The above command will check out the latest revision of ‘wdiff’, merging the changes made on the vendor branch ‘FSF_DIST’ since yesterday into the working copy. If any conflicts arise during the merge they should be resolved in the normal way (see section [cvs: Multiple developers#Conflicts-example Conflicts example]). Then, the modified files may be committed.

    However, it is much better to use the two release tags rather than using a date on the branch as suggested above:

     
    $ cvs checkout -jWDIFF_0_04 -jWDIFF_0_05 wdiff
    

    The reason this is better is that using a date, as suggested above, assumes that you do not import more than one release of a product per day. More importantly, using the release tags allows CVS to detect files that were removed between the two vendor releases and mark them for removal. Since import has no way to detect removed files, you should do a merge like this even if import doesn’t tell you to.


    |[[#Update-imports| < ]]| |[[#Binary-files-in-imports| > ]]|   |[[#Tracking-sources| << ]]| |[[#Tracking-sources| Up ]]| |[cvs: How your build system interacts with CVS#Builds >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Reverting to the latest vendor release ===

    You can also revert local changes completely and return to the latest vendor release by changing the ‘head’ revision back to the vendor branch on all files. For example, if you have a checked-out copy of the sources in ‘~/work.d/wdiff’, and you want to revert to the vendor’s version for all the files in that directory, you would type:

     
    $ cd ~/work.d/wdiff
    $ cvs admin -bWDIFF .
    

    You must specify the ‘-bWDIFF’ without any space after the ‘-b’. See section [cvs: Guide to CVS commands#admin-options admin options].


    |[[#Reverting-local-changes| < ]]| |[[#Keywords-in-imports| > ]]|   |[[#Tracking-sources| << ]]| |[[#Tracking-sources| Up ]]| |[cvs: How your build system interacts with CVS#Builds >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === How to handle binary files with cvs import ===

    Use the ‘-k’ wrapper option to tell import which files are binary. See section [cvs: Reference manual for Administrative files#Wrappers The cvswrappers file].


    |[[#Binary-files-in-imports| < ]]| |[[#Multiple-vendor-branches| > ]]|   |[[#Tracking-sources| << ]]| |[[#Tracking-sources| Up ]]| |[cvs: How your build system interacts with CVS#Builds >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === How to handle keyword substitution with cvs import ===

    The sources which you are importing may contain keywords (see section [cvs: Keyword substitution#Keyword-substitution Keyword substitution]). For example, the vendor may use CVS or some other system which uses similar keyword expansion syntax. If you just import the files in the default fashion, then the keyword expansions supplied by the vendor will be replaced by keyword expansions supplied by your own copy of CVS. It may be more convenient to maintain the expansions supplied by the vendor, so that this information can supply information about the sources that you imported from the vendor.

    To maintain the keyword expansions supplied by the vendor, supply the ‘-ko’ option to cvs import the first time you import the file. This will turn off keyword expansion for that file entirely, so if you want to be more selective you’ll have to think about what you want and use the ‘-k’ option to cvs update or cvs admin as appropriate.


    |[[#Keywords-in-imports| < ]]| |[cvs: How your build system interacts with CVS#Builds > ]|   |[[#Tracking-sources| << ]]| |[[#Tracking-sources| Up ]]| |[cvs: How your build system interacts with CVS#Builds >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Multiple vendor branches ===

    All the examples so far assume that there is only one vendor from which you are getting sources. In some situations you might get sources from a variety of places. For example, suppose that you are dealing with a project where many different people and teams are modifying the software. There are a variety of ways to handle this, but in some cases you have a bunch of source trees lying around and what you want to do more than anything else is just to all put them in CVS so that you at least have them in one place.

    For handling situations in which there may be more than one vendor, you may specify the ‘-b’ option to cvs import. It takes as an argument the vendor branch to import to. The default is ‘-b 1.1.1’.

    For example, suppose that there are two teams, the red team and the blue team, that are sending you sources. You want to import the red team’s efforts to branch 1.1.1 and use the vendor tag RED. You want to import the blue team’s efforts to branch 1.1.3 and use the vendor tag BLUE. So the commands you might use are:

     
    $ cvs import dir RED RED_1-0
    $ cvs import -b 1.1.3 dir BLUE BLUE_1-5
    

    Note that if your vendor tag does not match your ‘-b’ option, CVS will not detect this case! For example,

     
    $ cvs import -b 1.1.3 dir RED RED_1-0
    

    Be careful; this kind of mismatch is sure to sow confusion or worse. I can’t think of a useful purpose for the ability to specify a mismatch here, but if you discover such a use, don’t. CVS is likely to make this an error in some future release.


    |[[#Tracking-sources| << ]]| |[cvs: How your build system interacts with CVS#Builds >> ]|           |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    This document was generated by a tester on a sunny day using [http://www.nongnu.org/texi2html/ texi2html]. texi2html-1.82/test/manuals/res/ccvs_mediawiki/cvs: Dealing with bugs in CVS or this manual0000644000175000017500000001356211264347121033234 0ustar flichtenheldflichtenheld
    |[cvs: Credits#Credits < ]| |[cvs: Index#Index > ]|   |[cvs: Credits#Credits << ]| |[[cvs#Top| Up ]]| |[cvs: Index#Index >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    == Dealing with bugs in CVS or this manual ==

    Neither CVS nor this manual is perfect, and they probably never will be. If you are having trouble using CVS, or think you have found a bug, there are a number of things you can do about it. Note that if the manual is unclear, that can be considered a bug in the manual, so these problems are often worth doing something about as well as problems with CVS itself.

    • If you want someone to help you and fix bugs that you report, there are companies which will do that for a fee. One such company is:
       
      Ximbiot
      319 S. River St.
      Harrisburg, PA  17104-1657
      USA
      Email: info@ximbiot.com
      Phone: (717) 579-6168
      Fax:   (717) 234-3125
      http://ximbiot.com/
      
      
    • If you got CVS through a distributor, such as an operating system vendor or a vendor of freeware CD-ROMs, you may wish to see whether the distributor provides support. Often, they will provide no support or minimal support, but this may vary from distributor to distributor.
    • If you have the skills and time to do so, you may wish to fix the bug yourself. If you wish to submit your fix for inclusion in future releases of CVS, see the file HACKING in the CVS source distribution. It contains much more information on the process of submitting fixes.
    • There may be resources on the net which can help. Two good places to start are:
       
      http://www.cvshome.org
      http://www.loria.fr/~molli/cvs-index.html
      

      If you are so inspired, increasing the information available on the net is likely to be appreciated. For example, before the standard CVS distribution worked on Windows 95, there was a web page with some explanation and patches for running CVS on Windows 95, and various people helped out by mentioning this page on mailing lists or newsgroups when the subject came up.

    • It is also possible to report bugs to bug-cvs. Note that someone may or may not want to do anything with your bug report—if you need a solution consider one of the options mentioned above. People probably do want to hear about bugs which are particularly severe in consequences and/or easy to fix, however. You can also increase your odds by being as clear as possible about the exact nature of the bug and any other relevant information. The way to report bugs is to send email to bug-cvs@gnu.org. Note that submissions to bug-cvs may be distributed under the terms of the GNU Public License, so if you don’t like this, don’t submit them. There is usually no justification for sending mail directly to one of the CVS maintainers rather than to bug-cvs; those maintainers who want to hear about such bug reports read bug-cvs. Also note that sending a bug report to other mailing lists or newsgroups is not a substitute for sending it to bug-cvs. It is fine to discuss CVS bugs on whatever forum you prefer, but there are not necessarily any maintainers reading bug reports sent anywhere except bug-cvs.

    People often ask if there is a list of known bugs or whether a particular bug is a known one. The file BUGS in the CVS source distribution is one list of known bugs, but it doesn’t necessarily try to be comprehensive. Perhaps there will never be a comprehensive, detailed list of known bugs.


    |[cvs: Credits#Credits << ]| |[cvs: Index#Index >> ]|           |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    This document was generated by a tester on a sunny day using [http://www.nongnu.org/texi2html/ texi2html]. texi2html-1.82/test/manuals/res/ccvs_mediawiki/cvs.20000644000175000017500000000000011264347121024266 0ustar flichtenheldflichtenheldtexi2html-1.82/test/manuals/res/ccvs_mediawiki/cvs: The Repository0000644000175000017500000037447711264347121027121 0ustar flichtenheldflichtenheld
    |[cvs: Overview#Viewing-differences < ]| |[[#Specifying-a-repository| > ]]|   |[cvs: Overview#Overview << ]| |[[cvs#Top| Up ]]| |[cvs: Starting a project with CVS#Starting-a-new-project >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    == The Repository ==

    The CVS repository stores a complete copy of all the files and directories which are under version control.

    Normally, you never access any of the files in the repository directly. Instead, you use CVS commands to get your own copy of the files into a working directory, and then work on that copy. When you’ve finished a set of changes, you check (or commit) them back into the repository. The repository then contains the changes which you have made, as well as recording exactly what you changed, when you changed it, and other such information. Note that the repository is not a subdirectory of the working directory, or vice versa; they should be in separate locations.

    CVS can access a repository by a variety of means. It might be on the local computer, or it might be on a computer across the room or across the world. To distinguish various ways to access a repository, the repository name can start with an access method. For example, the access method :local: means to access a repository directory, so the repository :local:/usr/local/cvsroot means that the repository is in ‘/usr/local/cvsroot’ on the computer running CVS. For information on other access methods, see [[#Remote-repositories|Remote repositories]].

    If the access method is omitted, then if the repository starts with ‘/’, then :local: is assumed. If it does not start with ‘/’ then either :ext: or :server: is assumed. For example, if you have a local repository in ‘/usr/local/cvsroot’, you can use /usr/local/cvsroot instead of :local:/usr/local/cvsroot. But if (under Windows NT, for example) your local repository is ‘c:\src\cvsroot’, then you must specify the access method, as in :local:c:/src/cvsroot.

    The repository is split in two parts. ‘$CVSROOT/CVSROOT’ contains administrative files for CVS. The other directories contain the actual user-defined modules.


    |[[#Repository| < ]]| |[[#Repository-storage| > ]]|   |[[#Repository| << ]]| |[[#Repository| Up ]]| |[cvs: Starting a project with CVS#Starting-a-new-project >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Telling CVS where your repository is ===

    There are several ways to tell CVS where to find the repository. You can name the repository on the command line explicitly, with the -d (for "directory") option:

     
    cvs -d /usr/local/cvsroot checkout yoyodyne/tc
    

    Or you can set the $CVSROOT environment variable to an absolute path to the root of the repository, ‘/usr/local/cvsroot’ in this example. To set $CVSROOT, csh and tcsh users should have this line in their ‘.cshrc’ or ‘.tcshrc’ files:

     
    setenv CVSROOT /usr/local/cvsroot
    

    sh and bash users should instead have these lines in their ‘.profile’ or ‘.bashrc’:

     
    CVSROOT=/usr/local/cvsroot
    export CVSROOT
    

    A repository specified with -d will override the $CVSROOT environment variable. Once you’ve checked a working copy out from the repository, it will remember where its repository is (the information is recorded in the ‘CVS/Root’ file in the working copy).

    The -d option and the ‘CVS/Root’ file both override the $CVSROOT environment variable. If -d option differs from ‘CVS/Root’, the former is used. Of course, for proper operation they should be two ways of referring to the same repository.


    |[[#Specifying-a-repository| < ]]| |[[#Repository-files| > ]]|   |[[#Repository| << ]]| |[[#Repository| Up ]]| |[cvs: Starting a project with CVS#Starting-a-new-project >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === How data is stored in the repository ===

    For most purposes it isn’t important how CVS stores information in the repository. In fact, the format has changed in the past, and is likely to change in the future. Since in almost all cases one accesses the repository via CVS commands, such changes need not be disruptive.

    However, in some cases it may be necessary to understand how CVS stores data in the repository, for example you might need to track down CVS locks (see section [cvs: Multiple developers#Concurrency Several developers simultaneously attempting to run CVS]) or you might need to deal with the file permissions appropriate for the repository.


    |[[#Repository-storage| < ]]| |[[#File-permissions| > ]]|   |[[#Repository| << ]]| |[[#Repository-storage| Up ]]| |[cvs: Starting a project with CVS#Starting-a-new-project >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== Where files are stored within the repository ====

    The overall structure of the repository is a directory tree corresponding to the directories in the working directory. For example, supposing the repository is in

     
    /usr/local/cvsroot
    

    here is a possible directory tree (showing only the directories):

     
    /usr
     |
     +--local
     |   |
     |   +--cvsroot
     |   |    |
     |   |    +--CVSROOT
              |      (administrative files)
              |
              +--gnu
              |   |
              |   +--diff
              |   |   (source code to GNU diff)
              |   |
              |   +--rcs
              |   |   (source code to RCS)
              |   |
              |   +--cvs
              |       (source code to CVS)
              |
              +--yoyodyne
                  |
                  +--tc
                  |    |
                  |    +--man
                  |    |
                  |    +--testing
                  |
                  +--(other Yoyodyne software)
    

    With the directories are history files for each file under version control. The name of the history file is the name of the corresponding file with ‘,v’ appended to the end. Here is what the repository for the ‘yoyodyne/tc’ directory might look like:

     
      $CVSROOT
        |
        +--yoyodyne
        |   |
        |   +--tc
        |   |   |
                +--Makefile,v
                +--backend.c,v
                +--driver.c,v
                +--frontend.c,v
                +--parser.c,v
                +--man
                |    |
                |    +--tc.1,v
                |
                +--testing
                     |
                     +--testpgm.t,v
                     +--test2.t,v
    

    The history files contain, among other things, enough information to recreate any revision of the file, a log of all commit messages and the user-name of the person who committed the revision. The history files are known as RCS files, because the first program to store files in that format was a version control system known as RCS. For a full description of the file format, see the man page rcsfile(5), distributed with RCS, or the file ‘doc/RCSFILES’ in the CVS source distribution. This file format has become very common—many systems other than CVS or RCS can at least import history files in this format.

    The RCS files used in CVS differ in a few ways from the standard format. The biggest difference is magic branches; for more information see [cvs: Branching and merging#Magic-branch-numbers Magic branch numbers]. Also in CVS the valid tag names are a subset of what RCS accepts; for CVS’s rules see [cvs: Revisions#Tags Tags–Symbolic revisions].


    |[[#Repository-files| < ]]| |[[#Windows-permissions| > ]]|   |[[#Repository| << ]]| |[[#Repository-storage| Up ]]| |[cvs: Starting a project with CVS#Starting-a-new-project >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== File permissions ====

    All ‘,v’ files are created read-only, and you should not change the permission of those files. The directories inside the repository should be writable by the persons that have permission to modify the files in each directory. This normally means that you must create a UNIX group (see group(5)) consisting of the persons that are to edit the files in a project, and set up the repository so that it is that group that owns the directory. (On some systems, you also need to set the set-group-ID-on-execution bit on the repository directories (see chmod(1)) so that newly-created files and directories get the group-ID of the parent directory rather than that of the current process.)

    This means that you can only control access to files on a per-directory basis.

    Note that users must also have write access to check out files, because CVS needs to create lock files (see section [cvs: Multiple developers#Concurrency Several developers simultaneously attempting to run CVS]). You can use LockDir in CVSROOT/config to put the lock files somewhere other than in the repository if you want to allow read-only access to some directories (see section [cvs: Reference manual for Administrative files#config The CVSROOT/config configuration file]).

    Also note that users must have write access to the ‘CVSROOT/val-tags’ file. CVS uses it to keep track of what tags are valid tag names (it is sometimes updated when tags are used, as well as when they are created).

    Each RCS file will be owned by the user who last checked it in. This has little significance; what really matters is who owns the directories.

    CVS tries to set up reasonable file permissions for new directories that are added inside the tree, but you must fix the permissions manually when a new directory should have different permissions than its parent directory. If you set the CVSUMASK environment variable that will control the file permissions which CVS uses in creating directories and/or files in the repository. CVSUMASK does not affect the file permissions in the working directory; such files have the permissions which are typical for newly created files, except that sometimes CVS creates them read-only (see the sections on watches, [cvs: Multiple developers#Setting-a-watch Telling CVS to watch certain files]; -r, [cvs: Guide to CVS commands#Global-options Global options]; or CVSREAD, [cvs: All environment variables which affect CVS#Environment-variables All environment variables which affect CVS]).

    Note that using the client/server CVS (see section [[#Remote-repositories|Remote repositories]]), there is no good way to set CVSUMASK; the setting on the client machine has no effect. If you are connecting with rsh, you can set CVSUMASK in ‘.bashrc’ or ‘.cshrc’, as described in the documentation for your operating system. This behavior might change in future versions of CVS; do not rely on the setting of CVSUMASK on the client having no effect.

    Using pserver, you will generally need stricter permissions on the CVSROOT directory and directories above it in the tree; see [[#Password-authentication-security|Security considerations with password authentication]].

    Some operating systems have features which allow a particular program to run with the ability to perform operations which the caller of the program could not. For example, the set user ID (setuid) or set group ID (setgid) features of unix or the installed image feature of VMS. CVS was not written to use such features and therefore attempting to install CVS in this fashion will provide protection against only accidental lapses; anyone who is trying to circumvent the measure will be able to do so, and depending on how you have set it up may gain access to more than just CVS. You may wish to instead consider pserver. It shares some of the same attributes, in terms of possibly providing a false sense of security or opening security holes wider than the ones you are trying to fix, so read the documentation on pserver security carefully if you are considering this option ([[#Password-authentication-security|Security considerations with password authentication]]).


    |[[#File-permissions| < ]]| |[[#Attic| > ]]|   |[[#Repository| << ]]| |[[#Repository-storage| Up ]]| |[cvs: Starting a project with CVS#Starting-a-new-project >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== File Permission issues specific to Windows ====

    Some file permission issues are specific to Windows operating systems (Windows 95, Windows NT, and presumably future operating systems in this family. Some of the following might apply to OS/2 but I’m not sure).

    If you are using local CVS and the repository is on a networked file system which is served by the Samba SMB server, some people have reported problems with permissions. Enabling WRITE=YES in the samba configuration is said to fix/workaround it. Disclaimer: I haven’t investigated enough to know the implications of enabling that option, nor do I know whether there is something which CVS could be doing differently in order to avoid the problem. If you find something out, please let us know as described in [cvs: Dealing with bugs in CVS or this manual#BUGS Dealing with bugs in CVS or this manual].


    |[[#Windows-permissions| < ]]| |[[#CVS-in-repository| > ]]|   |[[#Repository| << ]]| |[[#Repository-storage| Up ]]| |[cvs: Starting a project with CVS#Starting-a-new-project >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== The attic ====

    You will notice that sometimes CVS stores an RCS file in the Attic. For example, if the CVSROOT is ‘/usr/local/cvsroot’ and we are talking about the file ‘backend.c’ in the directory ‘yoyodyne/tc’, then the file normally would be in

     
    /usr/local/cvsroot/yoyodyne/tc/backend.c,v
    

    but if it goes in the attic, it would be in

     
    /usr/local/cvsroot/yoyodyne/tc/Attic/backend.c,v
    

    instead. It should not matter from a user point of view whether a file is in the attic; CVS keeps track of this and looks in the attic when it needs to. But in case you want to know, the rule is that the RCS file is stored in the attic if and only if the head revision on the trunk has state dead. A dead state means that file has been removed, or never added, for that revision. For example, if you add a file on a branch, it will have a trunk revision in dead state, and a branch revision in a non-dead state.


    |[[#Attic| < ]]| |[[#Locks| > ]]|   |[[#Repository| << ]]| |[[#Repository-storage| Up ]]| |[cvs: Starting a project with CVS#Starting-a-new-project >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== The CVS directory in the repository ====

    The ‘CVS’ directory in each repository directory contains information such as file attributes (in a file called ‘CVS/fileattr’. In the future additional files may be added to this directory, so implementations should silently ignore additional files.

    This behavior is implemented only by CVS 1.7 and later; for details see [cvs: Multiple developers#Watches-Compatibility Using watches with old versions of CVS].

    The format of the fileattr file is a series of entries of the following form (where ‘{’ and ‘}’ means the text between the braces can be repeated zero or more times):

    ent-type filename <tab> attrname = attrval {; attrname = attrval} <linefeed>

    ent-type is ‘F’ for a file, in which case the entry specifies the attributes for that file.

    ent-type is ‘D’, and filename empty, to specify default attributes to be used for newly added files.

    Other ent-type are reserved for future expansion. CVS 1.9 and older will delete them any time it writes file attributes. CVS 1.10 and later will preserve them.

    Note that the order of the lines is not significant; a program writing the fileattr file may rearrange them at its convenience.

    There is currently no way of quoting tabs or linefeeds in the filename, ‘=’ in attrname, ‘;’ in attrval, etc. Note: some implementations also don’t handle a NUL character in any of the fields, but implementations are encouraged to allow it.

    By convention, attrname starting with ‘_’ is for an attribute given special meaning by CVS; other attrnames are for user-defined attributes (or will be, once implementations start supporting user-defined attributes).

    Builtin attributes:

    _watched

    Present means the file is watched and should be checked out read-only.

    _watchers

    Users with watches for this file. Value is watcher > type { , watcher > type } where watcher is a username, and type is zero or more of edit,unedit,commit separated by ‘+’ (that is, nothing if none; there is no "none" or "all" keyword).

    _editors

    Users editing this file. Value is editor > val { , editor > val } where editor is a username, and val is time+hostname+pathname, where time is when the cvs edit command (or equivalent) happened, and hostname and pathname are for the working directory.

    Example:

     
    Ffile1 _watched=;_watchers=joe>edit,mary>commit
    Ffile2 _watched=;_editors=sue>8 Jan 1975+workstn1+/home/sue/cvs
    D _watched=
    

    means that the file ‘file1’ should be checked out read-only. Furthermore, joe is watching for edits and mary is watching for commits. The file ‘file2’ should be checked out read-only; sue started editing it on 8 Jan 1975 in the directory ‘/home/sue/cvs’ on the machine workstn1. Future files which are added should be checked out read-only. To represent this example here, we have shown a space after ‘D’, ‘Ffile1’, and ‘Ffile2’, but in fact there must be a single tab character there and no spaces.


    |[[#CVS-in-repository| < ]]| |[[#CVSROOT-storage| > ]]|   |[[#Repository| << ]]| |[[#Repository-storage| Up ]]| |[cvs: Starting a project with CVS#Starting-a-new-project >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== CVS locks in the repository ====

    For an introduction to CVS locks focusing on user-visible behavior, see [cvs: Multiple developers#Concurrency Several developers simultaneously attempting to run CVS]. The following section is aimed at people who are writing tools which want to access a CVS repository without interfering with other tools accessing the same repository. If you find yourself confused by concepts described here, like read lock, write lock, and deadlock, you might consult the literature on operating systems or databases.

    Any file in the repository with a name starting with ‘#cvs.rfl.’ is a read lock. Any file in the repository with a name starting with ‘#cvs.wfl’ is a write lock. Old versions of CVS (before CVS 1.5) also created files with names starting with ‘#cvs.tfl’, but they are not discussed here. The directory ‘#cvs.lock’ serves as a master lock. That is, one must obtain this lock first before creating any of the other locks.

    To obtain a readlock, first create the ‘#cvs.lock’ directory. This operation must be atomic (which should be true for creating a directory under most operating systems). If it fails because the directory already existed, wait for a while and try again. After obtaining the ‘#cvs.lock’ lock, create a file whose name is ‘#cvs.rfl.’ followed by information of your choice (for example, hostname and process identification number). Then remove the ‘#cvs.lock’ directory to release the master lock. Then proceed with reading the repository. When you are done, remove the ‘#cvs.rfl’ file to release the read lock.

    To obtain a writelock, first create the ‘#cvs.lock’ directory, as with a readlock. Then check that there are no files whose names start with ‘#cvs.rfl.’. If there are, remove ‘#cvs.lock’, wait for a while, and try again. If there are no readers, then create a file whose name is ‘#cvs.wfl’ followed by information of your choice (for example, hostname and process identification number). Hang on to the ‘#cvs.lock’ lock. Proceed with writing the repository. When you are done, first remove the ‘#cvs.wfl’ file and then the ‘#cvs.lock’ directory. Note that unlike the ‘#cvs.rfl’ file, the ‘#cvs.wfl’ file is just informational; it has no effect on the locking operation beyond what is provided by holding on to the ‘#cvs.lock’ lock itself.

    Note that each lock (writelock or readlock) only locks a single directory in the repository, including ‘Attic’ and ‘CVS’ but not including subdirectories which represent other directories under version control. To lock an entire tree, you need to lock each directory (note that if you fail to obtain any lock you need, you must release the whole tree before waiting and trying again, to avoid deadlocks).

    Note also that CVS expects writelocks to control access to individual ‘foo,v’ files. RCS has a scheme where the ‘,foo,’ file serves as a lock, but CVS does not implement it and so taking out a CVS writelock is recommended. See the comments at rcs_internal_lockfile in the CVS source code for further discussion/rationale.


    |[[#Locks| < ]]| |[[#Working-directory-storage| > ]]|   |[[#Repository| << ]]| |[[#Repository-storage| Up ]]| |[cvs: Starting a project with CVS#Starting-a-new-project >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== How files are stored in the CVSROOT directory ====

    The ‘$CVSROOT/CVSROOT’ directory contains the various administrative files. In some ways this directory is just like any other directory in the repository; it contains RCS files whose names end in ‘,v’, and many of the CVS commands operate on it the same way. However, there are a few differences.

    For each administrative file, in addition to the RCS file, there is also a checked out copy of the file. For example, there is an RCS file ‘loginfo,v’ and a file ‘loginfo’ which contains the latest revision contained in ‘loginfo,v’. When you check in an administrative file, CVS should print

     
    cvs commit: Rebuilding administrative file database
    

    and update the checked out copy in ‘$CVSROOT/CVSROOT’. If it does not, there is something wrong (see section [cvs: Dealing with bugs in CVS or this manual#BUGS Dealing with bugs in CVS or this manual]). To add your own files to the files to be updated in this fashion, you can add them to the ‘checkoutlist’ administrative file (see section [cvs: Reference manual for Administrative files#checkoutlist The checkoutlist file]).

    By default, the ‘modules’ file behaves as described above. If the modules file is very large, storing it as a flat text file may make looking up modules slow (I’m not sure whether this is as much of a concern now as when CVS first evolved this feature; I haven’t seen benchmarks). Therefore, by making appropriate edits to the CVS source code one can store the modules file in a database which implements the ndbm interface, such as Berkeley db or GDBM. If this option is in use, then the modules database will be stored in the files ‘modules.db’, ‘modules.pag’, and/or ‘modules.dir’.

    For information on the meaning of the various administrative files, see [cvs: Reference manual for Administrative files#Administrative-files Reference manual for Administrative files].


    |[[#CVSROOT-storage| < ]]| |[[#Intro-administrative-files| > ]]|   |[[#Repository| << ]]| |[[#Repository| Up ]]| |[cvs: Starting a project with CVS#Starting-a-new-project >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === How data is stored in the working directory ===

    While we are discussing CVS internals which may become visible from time to time, we might as well talk about what CVS puts in the ‘CVS’ directories in the working directories. As with the repository, CVS handles this information and one can usually access it via CVS commands. But in some cases it may be useful to look at it, and other programs, such as the jCVS graphical user interface or the VC package for emacs, may need to look at it. Such programs should follow the recommendations in this section if they hope to be able to work with other programs which use those files, including future versions of the programs just mentioned and the command-line CVS client.

    The ‘CVS’ directory contains several files. Programs which are reading this directory should silently ignore files which are in the directory but which are not documented here, to allow for future expansion.

    The files are stored according to the text file convention for the system in question. This means that working directories are not portable between systems with differing conventions for storing text files. This is intentional, on the theory that the files being managed by CVS probably will not be portable between such systems either.

    Root

    This file contains the current CVS root, as described in [[#Specifying-a-repository|Telling CVS where your repository is]].

    Repository

    This file contains the directory within the repository which the current directory corresponds with. It can be either an absolute pathname or a relative pathname; CVS has had the ability to read either format since at least version 1.3 or so. The relative pathname is relative to the root, and is the more sensible approach, but the absolute pathname is quite common and implementations should accept either. For example, after the command

     
    cvs -d :local:/usr/local/cvsroot checkout yoyodyne/tc
    

    Root’ will contain

     
    :local:/usr/local/cvsroot
    

    and ‘Repository’ will contain either

     
    /usr/local/cvsroot/yoyodyne/tc
    

    or

     
    yoyodyne/tc
    

    If the particular working directory does not correspond to a directory in the repository, then ‘Repository’ should contain ‘CVSROOT/Emptydir’.

    Entries

    This file lists the files and directories in the working directory. The first character of each line indicates what sort of line it is. If the character is unrecognized, programs reading the file should silently skip that line, to allow for future expansion.

    If the first character is ‘/’, then the format is:

     
    /name/revision/timestamp[+conflict]/options/tagdate
    

    where ‘[’ and ‘]’ are not part of the entry, but instead indicate that the ‘+’ and conflict marker are optional. name is the name of the file within the directory. revision is the revision that the file in the working derives from, or ‘0’ for an added file, or ‘-’ followed by a revision for a removed file. timestamp is the timestamp of the file at the time that CVS created it; if the timestamp differs with the actual modification time of the file it means the file has been modified. It is stored in the format used by the ISO C asctime() function (for example, ‘Sun Apr 7 01:29:26 1996’). One may write a string which is not in that format, for example, ‘Result of merge’, to indicate that the file should always be considered to be modified. This is not a special case; to see whether a file is modified a program should take the timestamp of the file and simply do a string compare with timestamp. If there was a conflict, conflict can be set to the modification time of the file after the file has been written with conflict markers (see section [cvs: Multiple developers#Conflicts-example Conflicts example]). Thus if conflict is subsequently the same as the actual modification time of the file it means that the user has obviously not resolved the conflict. options contains sticky options (for example ‘-kb’ for a binary file). tagdate contains ‘T’ followed by a tag name, or ‘D’ for a date, followed by a sticky tag or date. Note that if timestamp contains a pair of timestamps separated by a space, rather than a single timestamp, you are dealing with a version of CVS earlier than CVS 1.5 (not documented here).

    The timezone on the timestamp in CVS/Entries (local or universal) should be the same as the operating system stores for the timestamp of the file itself. For example, on Unix the file’s timestamp is in universal time (UT), so the timestamp in CVS/Entries should be too. On VMS, the file’s timestamp is in local time, so CVS on VMS should use local time. This rule is so that files do not appear to be modified merely because the timezone changed (for example, to or from summer time).

    If the first character of a line in ‘Entries’ is ‘D’, then it indicates a subdirectory. ‘D’ on a line all by itself indicates that the program which wrote the ‘Entries’ file does record subdirectories (therefore, if there is such a line and no other lines beginning with ‘D’, one knows there are no subdirectories). Otherwise, the line looks like:

     
    D/name/filler1/filler2/filler3/filler4
    

    where name is the name of the subdirectory, and all the filler fields should be silently ignored, for future expansion. Programs which modify Entries files should preserve these fields.

    The lines in the ‘Entries’ file can be in any order.

    Entries.Log

    This file does not record any information beyond that in ‘Entries’, but it does provide a way to update the information without having to rewrite the entire ‘Entries’ file, including the ability to preserve the information even if the program writing ‘Entries’ and ‘Entries.Log’ abruptly aborts. Programs which are reading the ‘Entries’ file should also check for ‘Entries.Log’. If the latter exists, they should read ‘Entries’ and then apply the changes mentioned in ‘Entries.Log’. After applying the changes, the recommended practice is to rewrite ‘Entries’ and then delete ‘Entries.Log’. The format of a line in ‘Entries.Log’ is a single character command followed by a space followed by a line in the format specified for a line in ‘Entries’. The single character command is ‘A’ to indicate that the entry is being added, ‘R’ to indicate that the entry is being removed, or any other character to indicate that the entire line in ‘Entries.Log’ should be silently ignored (for future expansion). If the second character of the line in ‘Entries.Log’ is not a space, then it was written by an older version of CVS (not documented here).

    Programs which are writing rather than reading can safely ignore ‘Entries.Log’ if they so choose.

    Entries.Backup

    This is a temporary file. Recommended usage is to write a new entries file to ‘Entries.Backup’, and then to rename it (atomically, where possible) to ‘Entries’.

    Entries.Static

    The only relevant thing about this file is whether it exists or not. If it exists, then it means that only part of a directory was gotten and CVS will not create additional files in that directory. To clear it, use the update command with the ‘-d’ option, which will get the additional files and remove ‘Entries.Static’.

    Tag

    This file contains per-directory sticky tags or dates. The first character is ‘T’ for a branch tag, ‘N’ for a non-branch tag, or ‘D’ for a date, or another character to mean the file should be silently ignored, for future expansion. This character is followed by the tag or date. Note that per-directory sticky tags or dates are used for things like applying to files which are newly added; they might not be the same as the sticky tags or dates on individual files. For general information on sticky tags and dates, see [cvs: Revisions#Sticky-tags Sticky tags].

    Notify

    This file stores notifications (for example, for edit or unedit) which have not yet been sent to the server. Its format is not yet documented here.

    Notify.tmp

    This file is to ‘Notify’ as ‘Entries.Backup’ is to ‘Entries’. That is, to write ‘Notify’, first write the new contents to ‘Notify.tmp’ and then (atomically where possible), rename it to ‘Notify’.

    Base

    If watches are in use, then an edit command stores the original copy of the file in the ‘Base’ directory. This allows the unedit command to operate even if it is unable to communicate with the server.

    Baserev

    The file lists the revision for each of the files in the ‘Base’ directory. The format is:

     
    Bname/rev/expansion
    

    where expansion should be ignored, to allow for future expansion.

    Baserev.tmp

    This file is to ‘Baserev’ as ‘Entries.Backup’ is to ‘Entries’. That is, to write ‘Baserev’, first write the new contents to ‘Baserev.tmp’ and then (atomically where possible), rename it to ‘Baserev’.

    Template

    This file contains the template specified by the ‘rcsinfo’ file (see section [cvs: Reference manual for Administrative files#rcsinfo Rcsinfo]). It is only used by the client; the non-client/server CVS consults ‘rcsinfo’ directly.


    |[[#Working-directory-storage| < ]]| |[[#Editing-administrative-files| > ]]|   |[[#Repository| << ]]| |[[#Repository| Up ]]| |[cvs: Starting a project with CVS#Starting-a-new-project >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === The administrative files ===

    The directory ‘$CVSROOT/CVSROOT’ contains some administrative files. See section [cvs: Reference manual for Administrative files#Administrative-files Reference manual for Administrative files], for a complete description. You can use CVS without any of these files, but some commands work better when at least the ‘modules’ file is properly set up.

    The most important of these files is the ‘modules’ file. It defines all modules in the repository. This is a sample ‘modules’ file.

     
    CVSROOT         CVSROOT
    modules         CVSROOT modules
    cvs             gnu/cvs
    rcs             gnu/rcs
    diff            gnu/diff
    tc              yoyodyne/tc
    

    The ‘modules’ file is line oriented. In its simplest form each line contains the name of the module, whitespace, and the directory where the module resides. The directory is a path relative to $CVSROOT. The last four lines in the example above are examples of such lines.

    The line that defines the module called ‘modules’ uses features that are not explained here. See section [cvs: Reference manual for Administrative files#modules The modules file], for a full explanation of all the available features.


    |[[#Intro-administrative-files| < ]]| |[[#Multiple-repositories| > ]]|   |[[#Repository| << ]]| |[[#Intro-administrative-files| Up ]]| |[cvs: Starting a project with CVS#Starting-a-new-project >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== Editing administrative files ====

    You edit the administrative files in the same way that you would edit any other module. Use ‘cvs checkout CVSROOT’ to get a working copy, edit it, and commit your changes in the normal way.

    It is possible to commit an erroneous administrative file. You can often fix the error and check in a new revision, but sometimes a particularly bad error in the administrative file makes it impossible to commit new revisions.


    |[[#Editing-administrative-files| < ]]| |[[#Creating-a-repository| > ]]|   |[[#Repository| << ]]| |[[#Repository| Up ]]| |[cvs: Starting a project with CVS#Starting-a-new-project >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Multiple repositories ===

    In some situations it is a good idea to have more than one repository, for instance if you have two development groups that work on separate projects without sharing any code. All you have to do to have several repositories is to specify the appropriate repository, using the CVSROOT environment variable, the ‘-d’ option to CVS, or (once you have checked out a working directory) by simply allowing CVS to use the repository that was used to check out the working directory (see section [[#Specifying-a-repository|Telling CVS where your repository is]]).

    The big advantage of having multiple repositories is that they can reside on different servers. With CVS version 1.10, a single command cannot recurse into directories from different repositories. With development versions of CVS, you can check out code from multiple servers into your working directory. CVS will recurse and handle all the details of making connections to as many server machines as necessary to perform the requested command. Here is an example of how to set up a working directory:

     
    cvs -d server1:/cvs co dir1
    cd dir1
    cvs -d server2:/root co sdir
    cvs update
    

    The cvs co commands set up the working directory, and then the cvs update command will contact server2, to update the dir1/sdir subdirectory, and server1, to update everything else.


    |[[#Multiple-repositories| < ]]| |[[#Backing-up| > ]]|   |[[#Repository| << ]]| |[[#Repository| Up ]]| |[cvs: Starting a project with CVS#Starting-a-new-project >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Creating a repository ===

    To set up a CVS repository, first choose the machine and disk on which you want to store the revision history of the source files. CPU and memory requirements are modest, so most machines should be adequate. For details see [[#Server-requirements|Server requirements]].

    To estimate disk space requirements, if you are importing RCS files from another system, the size of those files is the approximate initial size of your repository, or if you are starting without any version history, a rule of thumb is to allow for the server approximately three times the size of the code to be under CVS for the repository (you will eventually outgrow this, but not for a while). On the machines on which the developers will be working, you’ll want disk space for approximately one working directory for each developer (either the entire tree or a portion of it, depending on what each developer uses).

    The repository should be accessible (directly or via a networked file system) from all machines which want to use CVS in server or local mode; the client machines need not have any access to it other than via the CVS protocol. It is not possible to use CVS to read from a repository which one only has read access to; CVS needs to be able to create lock files (see section [cvs: Multiple developers#Concurrency Several developers simultaneously attempting to run CVS]).

    To create a repository, run the cvs init command. It will set up an empty repository in the CVS root specified in the usual way (see section [[#Repository|The Repository]]). For example,

     
    cvs -d /usr/local/cvsroot init
    

    cvs init is careful to never overwrite any existing files in the repository, so no harm is done if you run cvs init on an already set-up repository.

    cvs init will enable history logging; if you don’t want that, remove the history file after running cvs init. See section [cvs: Reference manual for Administrative files#history-file The history file].


    |[[#Creating-a-repository| < ]]| |[[#Moving-a-repository| > ]]|   |[[#Repository| << ]]| |[[#Repository| Up ]]| |[cvs: Starting a project with CVS#Starting-a-new-project >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Backing up a repository ===

    There is nothing particularly magical about the files in the repository; for the most part it is possible to back them up just like any other files. However, there are a few issues to consider.

    The first is that to be paranoid, one should either not use CVS during the backup, or have the backup program lock CVS while doing the backup. To not use CVS, you might forbid logins to machines which can access the repository, turn off your CVS server, or similar mechanisms. The details would depend on your operating system and how you have CVS set up. To lock CVS, you would create ‘#cvs.rfl’ locks in each repository directory. See [cvs: Multiple developers#Concurrency Several developers simultaneously attempting to run CVS], for more on CVS locks. Having said all this, if you just back up without any of these precautions, the results are unlikely to be particularly dire. Restoring from backup, the repository might be in an inconsistent state, but this would not be particularly hard to fix manually.

    When you restore a repository from backup, assuming that changes in the repository were made after the time of the backup, working directories which were not affected by the failure may refer to revisions which no longer exist in the repository. Trying to run CVS in such directories will typically produce an error message. One way to get those changes back into the repository is as follows:

    • Get a new working directory.
    • Copy the files from the working directory from before the failure over to the new working directory (do not copy the contents of the ‘CVS’ directories, of course).
    • Working in the new working directory, use commands such as cvs update and cvs diff to figure out what has changed, and then when you are ready, commit the changes into the repository.

    |[[#Backing-up| < ]]| |[[#Remote-repositories| > ]]|   |[[#Repository| << ]]| |[[#Repository| Up ]]| |[cvs: Starting a project with CVS#Starting-a-new-project >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Moving a repository ===

    Just as backing up the files in the repository is pretty much like backing up any other files, if you need to move a repository from one place to another it is also pretty much like just moving any other collection of files.

    The main thing to consider is that working directories point to the repository. The simplest way to deal with a moved repository is to just get a fresh working directory after the move. Of course, you’ll want to make sure that the old working directory had been checked in before the move, or you figured out some other way to make sure that you don’t lose any changes. If you really do want to reuse the existing working directory, it should be possible with manual surgery on the ‘CVS/Repository’ files. You can see [[#Working-directory-storage|How data is stored in the working directory]], for information on the ‘CVS/Repository’ and ‘CVS/Root’ files, but unless you are sure you want to bother, it probably isn’t worth it.


    |[[#Moving-a-repository| < ]]| |[[#Server-requirements| > ]]|   |[[#Repository| << ]]| |[[#Repository| Up ]]| |[cvs: Starting a project with CVS#Starting-a-new-project >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Remote repositories ===

    Your working copy of the sources can be on a different machine than the repository. Using CVS in this manner is known as client/server operation. You run CVS on a machine which can mount your working directory, known as the client, and tell it to communicate to a machine which can mount the repository, known as the server. Generally, using a remote repository is just like using a local one, except that the format of the repository name is:

     
    [:method:][[user][:password]@]hostname[:[port]]/path/to/repository
    

    Specifying a password in the repository name is not recommended during checkout, since this will cause CVS to store a cleartext copy of the password in each created directory. cvs login first instead (see section [[#Password-authentication-client|Using the client with password authentication]]).

    The details of exactly what needs to be set up depend on how you are connecting to the server.

    If method is not specified, and the repository name contains ‘:’, then the default is ext or server, depending on your platform; both are described in [[#Connecting-via-rsh|Connecting with rsh]].


    |[[#Remote-repositories| < ]]| |[[#Connecting-via-rsh| > ]]|   |[[#Repository| << ]]| |[[#Remote-repositories| Up ]]| |[cvs: Starting a project with CVS#Starting-a-new-project >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== Server requirements ====

    The quick answer to what sort of machine is suitable as a server is that requirements are modest—a server with 32M of memory or even less can handle a fairly large source tree with a fair amount of activity.

    The real answer, of course, is more complicated. Estimating the known areas of large memory consumption should be sufficient to estimate memory requirements. There are two such areas documented here; other memory consumption should be small by comparison (if you find that is not the case, let us know, as described in [cvs: Dealing with bugs in CVS or this manual#BUGS Dealing with bugs in CVS or this manual], so we can update this documentation).

    The first area of big memory consumption is large checkouts, when using the CVS server. The server consists of two processes for each client that it is serving. Memory consumption on the child process should remain fairly small. Memory consumption on the parent process, particularly if the network connection to the client is slow, can be expected to grow to slightly more than the size of the sources in a single directory, or two megabytes, whichever is larger.

    Multiplying the size of each CVS server by the number of servers which you expect to have active at one time should give an idea of memory requirements for the server. For the most part, the memory consumed by the parent process probably can be swap space rather than physical memory.

    The second area of large memory consumption is diff, when checking in large files. This is required even for binary files. The rule of thumb is to allow about ten times the size of the largest file you will want to check in, although five times may be adequate. For example, if you want to check in a file which is 10 megabytes, you should have 100 megabytes of memory on the machine doing the checkin (the server machine for client/server, or the machine running CVS for non-client/server). This can be swap space rather than physical memory. Because the memory is only required briefly, there is no particular need to allow memory for more than one such checkin at a time.

    Resource consumption for the client is even more modest—any machine with enough capacity to run the operating system in question should have little trouble.

    For information on disk space requirements, see [[#Creating-a-repository|Creating a repository]].


    |[[#Server-requirements| < ]]| |[[#Password-authenticated| > ]]|   |[[#Repository| << ]]| |[[#Remote-repositories| Up ]]| |[cvs: Starting a project with CVS#Starting-a-new-project >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== Connecting with rsh ====

    CVS uses the ‘rsh’ protocol to perform these operations, so the remote user host needs to have a ‘.rhosts’ file which grants access to the local user. Note that the program that CVS uses for this purpose may be specified using the ‘--with-rsh’ flag to configure.

    For example, suppose you are the user ‘mozart’ on the local machine ‘toe.example.com’, and the server machine is ‘faun.example.org’. On faun, put the following line into the file ‘.rhosts’ in ‘bach’’s home directory:

     
    toe.example.com  mozart
    

    Then test that ‘rsh’ is working with

     
    rsh -l bach faun.example.org 'echo $PATH'
    

    Next you have to make sure that rsh will be able to find the server. Make sure that the path which rsh printed in the above example includes the directory containing a program named cvs which is the server. You need to set the path in ‘.bashrc’, ‘.cshrc’, etc., not ‘.login’ or ‘.profile’. Alternately, you can set the environment variable CVS_SERVER on the client machine to the filename of the server you want to use, for example ‘/usr/local/bin/cvs-1.6’.

    There is no need to edit ‘inetd.conf’ or start a CVS server daemon.

    There are two access methods that you use in CVSROOT for rsh. :server: specifies an internal rsh client, which is supported only by some CVS ports. :ext: specifies an external rsh program. By default this is rsh (unless otherwise specified by the ‘--with-rsh’ flag to configure) but you may set the CVS_RSH environment variable to invoke another program which can access the remote server (for example, remsh on HP-UX 9 because rsh is something different). It must be a program which can transmit data to and from the server without modifying it; for example the Windows NT rsh is not suitable since it by default translates between CRLF and LF. The OS/2 CVS port has a hack to pass ‘-b’ to rsh to get around this, but since this could potentially cause problems for programs other than the standard rsh, it may change in the future. If you set CVS_RSH to SSH or some other rsh replacement, the instructions in the rest of this section concerning ‘.rhosts’ and so on are likely to be inapplicable; consult the documentation for your rsh replacement.

    Continuing our example, supposing you want to access the module ‘foo’ in the repository ‘/usr/local/cvsroot/’, on machine ‘faun.example.org’, you are ready to go:

     
    cvs -d :ext:bach@faun.example.org:/usr/local/cvsroot checkout foo
    

    (The ‘bach@’ can be omitted if the username is the same on both the local and remote hosts.)


    |[[#Connecting-via-rsh| < ]]| |[[#Password-authentication-server| > ]]|   |[[#Repository| << ]]| |[[#Remote-repositories| Up ]]| |[cvs: Starting a project with CVS#Starting-a-new-project >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== Direct connection with password authentication ====

    The CVS client can also connect to the server using a password protocol. This is particularly useful if using rsh is not feasible (for example, the server is behind a firewall), and Kerberos also is not available.

    To use this method, it is necessary to make some adjustments on both the server and client sides.


    |[[#Password-authenticated| < ]]| |[[#Password-authentication-client| > ]]|   |[[#Repository| << ]]| |[[#Password-authenticated| Up ]]| |[cvs: Starting a project with CVS#Starting-a-new-project >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ===== Setting up the server for password authentication =====

    First of all, you probably want to tighten the permissions on the ‘$CVSROOT’ and ‘$CVSROOT/CVSROOT’ directories. See [[#Password-authentication-security|Security considerations with password authentication]], for more details.

    On the server side, the file ‘/etc/inetd.conf’ needs to be edited so inetd knows to run the command cvs pserver when it receives a connection on the right port. By default, the port number is 2401; it would be different if your client were compiled with CVS_AUTH_PORT defined to something else, though. This can also be specified in the CVSROOT variable (see section [[#Remote-repositories|Remote repositories]]) or overridden with the CVS_CLIENT_PORT environment variable (see section [cvs: All environment variables which affect CVS#Environment-variables All environment variables which affect CVS]).

    If your inetd allows raw port numbers in ‘/etc/inetd.conf’, then the following (all on a single line in ‘inetd.conf’) should be sufficient:

     
    2401  stream  tcp  nowait  root  /usr/local/bin/cvs
    cvs -f --allow-root=/usr/cvsroot pserver
    

    (You could also use the ‘-T’ option to specify a temporary directory.)

    The ‘--allow-root’ option specifies the allowable CVSROOT directory. Clients which attempt to use a different CVSROOT directory will not be allowed to connect. If there is more than one CVSROOT directory which you want to allow, repeat the option. (Unfortunately, many versions of inetd have very small limits on the number of arguments and/or the total length of the command. The usual solution to this problem is to have inetd run a shell script which then invokes CVS with the necessary arguments.)

    If your inetd wants a symbolic service name instead of a raw port number, then put this in ‘/etc/services’:

     
    cvspserver      2401/tcp
    

    and put cvspserver instead of 2401 in ‘inetd.conf’.

    If your system uses xinetd instead of inetd, the procedure is slightly different. Create a file called ‘/etc/xinetd.d/cvspserver’ containing the following:

     
    service cvspserver
    {
       port        = 2401
       socket_type = stream
       protocol    = tcp
       wait        = no
       user        = root
       passenv     = PATH
       server      = /usr/local/bin/cvs
       server_args = -f --allow-root=/usr/cvsroot pserver
    }
    

    (If cvspserver is defined in ‘/etc/services’, you can omit the port line.)

    Once the above is taken care of, restart your inetd, or do whatever is necessary to force it to reread its initialization files.

    If you are having trouble setting this up, see [cvs: Troubleshooting#Connection Trouble making a connection to a CVS server].

    Because the client stores and transmits passwords in cleartext (almost—see [[#Password-authentication-security|Security considerations with password authentication]], for details), a separate CVS password file is generally used, so people don’t compromise their regular passwords when they access the repository. This file is ‘$CVSROOT/CVSROOT/passwd’ (see section [[#Intro-administrative-files|The administrative files]]). It uses a colon-separated format, similar to ‘/etc/passwd’ on Unix systems, except that it has fewer fields: CVS username, optional password, and an optional system username for CVS to run as if authentication succeeds. Here is an example ‘passwd’ file with five entries:

     
    anonymous:
    bach:ULtgRLXo7NRxs
    spwang:1sOp854gDF3DY
    melissa:tGX1fS8sun6rY:pubcvs
    qproj:XR4EZcEs0szik:pubcvs
    

    (The passwords are encrypted according to the standard Unix crypt() function, so it is possible to paste in passwords directly from regular Unix ‘/etc/passwd’ files.)

    The first line in the example will grant access to any CVS client attempting to authenticate as user anonymous, no matter what password they use, including an empty password. (This is typical for sites granting anonymous read-only access; for information on how to do the "read-only" part, see [[#Read_002donly-access|Read-only repository access]].)

    The second and third lines will grant access to bach and spwang if they supply their respective plaintext passwords.

    The fourth line will grant access to melissa, if she supplies the correct password, but her CVS operations will actually run on the server side under the system user pubcvs. Thus, there need not be any system user named melissa, but there must be one named pubcvs.

    The fifth line shows that system user identities can be shared: any client who successfully authenticates as qproj will actually run as pubcvs, just as melissa does. That way you could create a single, shared system user for each project in your repository, and give each developer their own line in the ‘$CVSROOT/CVSROOT/passwd’ file. The CVS username on each line would be different, but the system username would be the same. The reason to have different CVS usernames is that CVS will log their actions under those names: when melissa commits a change to a project, the checkin is recorded in the project’s history under the name melissa, not pubcvs. And the reason to have them share a system username is so that you can arrange permissions in the relevant area of the repository such that only that account has write-permission there.

    If the system-user field is present, all password-authenticated CVS commands run as that user; if no system user is specified, CVS simply takes the CVS username as the system username and runs commands as that user. In either case, if there is no such user on the system, then the CVS operation will fail (regardless of whether the client supplied a valid password).

    The password and system-user fields can both be omitted (and if the system-user field is omitted, then also omit the colon that would have separated it from the encrypted password). For example, this would be a valid ‘$CVSROOT/CVSROOT/passwd’ file:

     
    anonymous::pubcvs
    fish:rKa5jzULzmhOo:kfogel
    sussman:1sOp854gDF3DY
    

    When the password field is omitted or empty, then the client’s authentication attempt will succeed with any password, including the empty string. However, the colon after the CVS username is always necessary, even if the password is empty.

    CVS can also fall back to use system authentication. When authenticating a password, the server first checks for the user in the ‘$CVSROOT/CVSROOT/passwd’ file. If it finds the user, it will use that entry for authentication as described above. But if it does not find the user, or if the CVSpasswd’ file does not exist, then the server can try to authenticate the username and password using the operating system’s user-lookup routines (this "fallback" behavior can be disabled by setting SystemAuth=no in the CVSconfig’ file, see section [cvs: Reference manual for Administrative files#config The CVSROOT/config configuration file]).

    The default fallback behaviour is to look in ‘/etc/passwd’ for this system password unless your system has PAM (Pluggable Authentication Modules) and your CVS server executable was configured to use it at compile time (using ./configure --enable-pam - see the INSTALL file for more). In this case, PAM will be consulted instead. This means that CVS can be configured to use any password authentication source PAM can be configured to use (possibilities include a simple UNIX password, NIS, LDAP, and others) in its global configuration file (usually ‘/etc/pam.conf’ or possibly ‘/etc/pam.d/cvs’). See your PAM documentation for more details on PAM configuration.

    Note that PAM is an experimental feature in CVS and feedback is encouraged. Please send a mail to one of the CVS mailing lists (info-cvs@gnu.org or bug-cvs@gnu.org) if you use the CVS PAM support.

    WARNING: Using PAM gives the system administrator much more flexibility about how CVS users are authenticated but no more security than other methods. See below for more.

    CVS needs an "auth" and "account" module in the PAM configuration file. A typical PAM configuration would therefore have the following lines in ‘/etc/pam.conf’ to emulate the standard CVS system ‘/etc/passwd’ authentication:

     
    cvs	auth	    required	pam_unix.so
    cvs	account	    required	pam_unix.so
    

    The the equivalent ‘/etc/pam.d/cvs’ would contain

     
    auth	    required	pam_unix.so
    account	    required	pam_unix.so
    

    Some systems require a full path to the module so that ‘pam_unix.so’ (Linux) would become something like ‘/usr/lib/security/$ISA/pam_unix.so.1’ (Sun Solaris). See the ‘contrib/pam’ subdirectory of the CVS source distribution for further example configurations.

    The PAM service name given above as "cvs" is just the service name in the default configuration amd can be set using ./configure --with-hardcoded-pam-service-name=<pam-service-name> before compiling. CVS can also be configured to use whatever name it is invoked as as its PAM service name using ./configure --without-hardcoded-pam-service-name, but this feature should not be used if you may not have control of the name CVS will be invoked as.

    Be aware, also, that falling back to system authentication might be a security risk: CVS operations would then be authenticated with that user’s regular login password, and the password flies across the network in plaintext. See [[#Password-authentication-security|Security considerations with password authentication]] for more on this. This may be more of a problem with PAM authentication because it is likely that the source of the system password is some central authentication service like LDAP which is also used to authenticate other services.

    On the other hand, PAM makes it very easy to change your password regularly. If they are given the option of a one-password system for all of their activities, users are often more willing to change their password on a regular basis.

    In the non-PAM configuration where the password is stored in the ‘CVSROOT/passwd’ file, it is difficult to change passwords on a regular basis since only administrative users (or in some cases processes that act as an administrative user) are typicaly given access to modify this file. Either there needs to be some hand-crafted web page or set-uid program to update the file, or the update needs to be done by submitting a request to an administrator to perform the duty by hand. In the first case, having to remember to update a separate password on a periodic basis can be difficult. In the second case, the manual nature of the change will typically mean that the password will not be changed unless it is absolutely necessary.

    Note that PAM administrators should probably avoid configuring one-time-passwords (OTP) for CVS authentication/authorization. If OTPs are desired, the administrator may wish to encourage the use of one of the other Client/Server access methods. See the section on see section [[#Remote-repositories|Remote repositories]] for a list of other methods.

    Right now, the only way to put a password in the CVSpasswd’ file is to paste it there from somewhere else. Someday, there may be a cvs passwd command.

    Unlike many of the files in ‘$CVSROOT/CVSROOT’, it is normal to edit the ‘passwd’ file in-place, rather than via CVS. This is because of the possible security risks of having the ‘passwd’ file checked out to people’s working copies. If you do want to include the ‘passwd’ file in checkouts of ‘$CVSROOT/CVSROOT’, see [cvs: Reference manual for Administrative files#checkoutlist The checkoutlist file].


    |[[#Password-authentication-server| < ]]| |[[#Password-authentication-security| > ]]|   |[[#Repository| << ]]| |[[#Password-authenticated| Up ]]| |[cvs: Starting a project with CVS#Starting-a-new-project >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ===== Using the client with password authentication =====

    To run a CVS command on a remote repository via the password-authenticating server, one specifies the pserver protocol, optional username, repository host, an optional port number, and path to the repository. For example:

     
    cvs -d :pserver:faun.example.org:/usr/local/cvsroot checkout someproj
    

    or

     
    CVSROOT=:pserver:bach@faun.example.org:2401/usr/local/cvsroot
    cvs checkout someproj
    

    However, unless you’re connecting to a public-access repository (i.e., one where that username doesn’t require a password), you’ll need to supply a password or log in first. Logging in verifies your password with the repository and stores it in a file. It’s done with the login command, which will prompt you interactively for the password if you didn’t supply one as part of $CVSROOT:

     
    cvs -d :pserver:bach@faun.example.org:/usr/local/cvsroot login
    CVS password:
    

    or

     
    cvs -d :pserver:bach:p4ss30rd@faun.example.org:/usr/local/cvsroot login
    

    After you enter the password, CVS verifies it with the server. If the verification succeeds, then that combination of username, host, repository, and password is permanently recorded, so future transactions with that repository won’t require you to run cvs login. (If verification fails, CVS will exit complaining that the password was incorrect, and nothing will be recorded.)

    The records are stored, by default, in the file ‘$HOME/.cvspass’. That file’s format is human-readable, and to a degree human-editable, but note that the passwords are not stored in cleartext—they are trivially encoded to protect them from "innocent" compromise (i.e., inadvertent viewing by a system administrator or other non-malicious person).

    You can change the default location of this file by setting the CVS_PASSFILE environment variable. If you use this variable, make sure you set it before cvs login is run. If you were to set it after running cvs login, then later CVS commands would be unable to look up the password for transmission to the server.

    Once you have logged in, all CVS commands using that remote repository and username will authenticate with the stored password. So, for example

     
    cvs -d :pserver:bach@faun.example.org:/usr/local/cvsroot checkout foo
    

    should just work (unless the password changes on the server side, in which case you’ll have to re-run cvs login).

    Note that if the ‘:pserver:’ were not present in the repository specification, CVS would assume it should use rsh to connect with the server instead (see section [[#Connecting-via-rsh|Connecting with rsh]]).

    Of course, once you have a working copy checked out and are running CVS commands from within it, there is no longer any need to specify the repository explicitly, because CVS can deduce the repository from the working copy’s ‘CVS’ subdirectory.

    The password for a given remote repository can be removed from the CVS_PASSFILE by using the cvs logout command.


    |[[#Password-authentication-client| < ]]| |[[#GSSAPI-authenticated| > ]]|   |[[#Repository| << ]]| |[[#Password-authenticated| Up ]]| |[cvs: Starting a project with CVS#Starting-a-new-project >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ===== Security considerations with password authentication =====

    The passwords are stored on the client side in a trivial encoding of the cleartext, and transmitted in the same encoding. The encoding is done only to prevent inadvertent password compromises (i.e., a system administrator accidentally looking at the file), and will not prevent even a naive attacker from gaining the password.

    The separate CVS password file (see section [[#Password-authentication-server|Setting up the server for password authentication]]) allows people to use a different password for repository access than for login access. On the other hand, once a user has non-read-only access to the repository, she can execute programs on the server system through a variety of means. Thus, repository access implies fairly broad system access as well. It might be possible to modify CVS to prevent that, but no one has done so as of this writing.

    Note that because the ‘$CVSROOT/CVSROOT’ directory contains ‘passwd’ and other files which are used to check security, you must control the permissions on this directory as tightly as the permissions on ‘/etc’. The same applies to the ‘$CVSROOT’ directory itself and any directory above it in the tree. Anyone who has write access to such a directory will have the ability to become any user on the system. Note that these permissions are typically tighter than you would use if you are not using pserver.

    In summary, anyone who gets the password gets repository access (which may imply some measure of general system access as well). The password is available to anyone who can sniff network packets or read a protected (i.e., user read-only) file. If you want real security, get Kerberos.


    |[[#Password-authentication-security| < ]]| |[[#Kerberos-authenticated| > ]]|   |[[#Repository| << ]]| |[[#Remote-repositories| Up ]]| |[cvs: Starting a project with CVS#Starting-a-new-project >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== Direct connection with GSSAPI ====

    GSSAPI is a generic interface to network security systems such as Kerberos 5. If you have a working GSSAPI library, you can have CVS connect via a direct TCP connection, authenticating with GSSAPI.

    To do this, CVS needs to be compiled with GSSAPI support; when configuring CVS it tries to detect whether GSSAPI libraries using kerberos version 5 are present. You can also use the ‘--with-gssapi’ flag to configure.

    The connection is authenticated using GSSAPI, but the message stream is not authenticated by default. You must use the -a global option to request stream authentication.

    The data transmitted is not encrypted by default. Encryption support must be compiled into both the client and the server; use the ‘--enable-encrypt’ configure option to turn it on. You must then use the -x global option to request encryption.

    GSSAPI connections are handled on the server side by the same server which handles the password authentication server; see [[#Password-authentication-server|Setting up the server for password authentication]]. If you are using a GSSAPI mechanism such as Kerberos which provides for strong authentication, you will probably want to disable the ability to authenticate via cleartext passwords. To do so, create an empty ‘CVSROOT/passwd’ password file, and set SystemAuth=no in the config file (see section [cvs: Reference manual for Administrative files#config The CVSROOT/config configuration file]).

    The GSSAPI server uses a principal name of cvs/hostname, where hostname is the canonical name of the server host. You will have to set this up as required by your GSSAPI mechanism.

    To connect using GSSAPI, use ‘:gserver:’. For example,

     
    cvs -d :gserver:faun.example.org:/usr/local/cvsroot checkout foo
    

    |[[#GSSAPI-authenticated| < ]]| |[[#Connecting-via-fork| > ]]|   |[[#Repository| << ]]| |[[#Remote-repositories| Up ]]| |[cvs: Starting a project with CVS#Starting-a-new-project >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== Direct connection with kerberos ====

    The easiest way to use kerberos is to use the kerberos rsh, as described in [[#Connecting-via-rsh|Connecting with rsh]]. The main disadvantage of using rsh is that all the data needs to pass through additional programs, so it may be slower. So if you have kerberos installed you can connect via a direct TCP connection, authenticating with kerberos.

    This section concerns the kerberos network security system, version 4. Kerberos version 5 is supported via the GSSAPI generic network security interface, as described in the previous section.

    To do this, CVS needs to be compiled with kerberos support; when configuring CVS it tries to detect whether kerberos is present or you can use the ‘--with-krb4’ flag to configure.

    The data transmitted is not encrypted by default. Encryption support must be compiled into both the client and server; use the ‘--enable-encryption’ configure option to turn it on. You must then use the -x global option to request encryption.

    You need to edit ‘inetd.conf’ on the server machine to run cvs kserver. The client uses port 1999 by default; if you want to use another port specify it in the CVSROOT (see section [[#Remote-repositories|Remote repositories]]) or the CVS_CLIENT_PORT environment variable (see section [cvs: All environment variables which affect CVS#Environment-variables All environment variables which affect CVS]) on the client.

    When you want to use CVS, get a ticket in the usual way (generally kinit); it must be a ticket which allows you to log into the server machine. Then you are ready to go:

     
    cvs -d :kserver:faun.example.org:/usr/local/cvsroot checkout foo
    

    Previous versions of CVS would fall back to a connection via rsh; this version will not do so.


    |[[#Kerberos-authenticated| < ]]| |[[#Read_002donly-access| > ]]|   |[[#Repository| << ]]| |[[#Remote-repositories| Up ]]| |[cvs: Starting a project with CVS#Starting-a-new-project >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== Connecting with fork ====

    This access method allows you to connect to a repository on your local disk via the remote protocol. In other words it does pretty much the same thing as :local:, but various quirks, bugs and the like are those of the remote CVS rather than the local CVS.

    For day-to-day operations you might prefer either :local: or :fork:, depending on your preferences. Of course :fork: comes in particularly handy in testing or debugging cvs and the remote protocol. Specifically, we avoid all of the network-related setup/configuration, timeouts, and authentication inherent in the other remote access methods but still create a connection which uses the remote protocol.

    To connect using the fork method, use ‘:fork:’ and the pathname to your local repository. For example:

     
    cvs -d :fork:/usr/local/cvsroot checkout foo
    

    As with :ext:, the server is called ‘cvs’ by default, or the value of the CVS_SERVER environment variable.


    |[[#Connecting-via-fork| < ]]| |[[#Server-temporary-directory| > ]]|   |[[#Repository| << ]]| |[[#Repository| Up ]]| |[cvs: Starting a project with CVS#Starting-a-new-project >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Read-only repository access ===

    It is possible to grant read-only repository access to people using the password-authenticated server (see section [[#Password-authenticated|Direct connection with password authentication]]). (The other access methods do not have explicit support for read-only users because those methods all assume login access to the repository machine anyway, and therefore the user can do whatever local file permissions allow her to do.)

    A user who has read-only access can do only those CVS operations which do not modify the repository, except for certain “administrative” files (such as lock files and the history file). It may be desirable to use this feature in conjunction with user-aliasing (see section [[#Password-authentication-server|Setting up the server for password authentication]]).

    Unlike with previous versions of CVS, read-only users should be able merely to read the repository, and not to execute programs on the server or otherwise gain unexpected levels of access. Or to be more accurate, the known holes have been plugged. Because this feature is new and has not received a comprehensive security audit, you should use whatever level of caution seems warranted given your attitude concerning security.

    There are two ways to specify read-only access for a user: by inclusion, and by exclusion.

    "Inclusion" means listing that user specifically in the ‘$CVSROOT/CVSROOT/readers’ file, which is simply a newline-separated list of users. Here is a sample ‘readers’ file:

     
    melissa
    splotnik
    jrandom
    

    (Don’t forget the newline after the last user.)

    "Exclusion" means explicitly listing everyone who has write access—if the file

     
    $CVSROOT/CVSROOT/writers
    

    exists, then only those users listed in it have write access, and everyone else has read-only access (of course, even the read-only users still need to be listed in the CVSpasswd’ file). The ‘writers’ file has the same format as the ‘readers’ file.

    Note: if your CVSpasswd’ file maps cvs users onto system users (see section [[#Password-authentication-server|Setting up the server for password authentication]]), make sure you deny or grant read-only access using the cvs usernames, not the system usernames. That is, the ‘readers’ and ‘writers’ files contain cvs usernames, which may or may not be the same as system usernames.

    Here is a complete description of the server’s behavior in deciding whether to grant read-only or read-write access:

    If ‘readers’ exists, and this user is listed in it, then she gets read-only access. Or if ‘writers’ exists, and this user is NOT listed in it, then she also gets read-only access (this is true even if ‘readers’ exists but she is not listed there). Otherwise, she gets full read-write access.

    Of course there is a conflict if the user is listed in both files. This is resolved in the more conservative way, it being better to protect the repository too much than too little: such a user gets read-only access.


    |[[#Read_002donly-access| < ]]| |[cvs: Starting a project with CVS#Starting-a-new-project > ]|   |[[#Repository| << ]]| |[[#Repository| Up ]]| |[cvs: Starting a project with CVS#Starting-a-new-project >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Temporary directories for the server ===

    While running, the CVS server creates temporary directories. They are named

     
    cvs-servpid
    

    where pid is the process identification number of the server. They are located in the directory specified by the ‘-T’ global option (see section [cvs: Guide to CVS commands#Global-options Global options]), the TMPDIR environment variable (see section [cvs: All environment variables which affect CVS#Environment-variables All environment variables which affect CVS]), or, failing that, ‘/tmp’.

    In most cases the server will remove the temporary directory when it is done, whether it finishes normally or abnormally. However, there are a few cases in which the server does not or cannot remove the temporary directory, for example:

    • If the server aborts due to an internal server error, it may preserve the directory to aid in debugging
    • If the server is killed in a way that it has no way of cleaning up (most notably, ‘kill -KILL’ on unix).
    • If the system shuts down without an orderly shutdown, which tells the server to clean up.

    In cases such as this, you will need to manually remove the ‘cvs-servpid’ directories. As long as there is no server running with process identification number pid, it is safe to do so.


    |[[#Repository| << ]]| |[cvs: Starting a project with CVS#Starting-a-new-project >> ]|           |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    This document was generated by a tester on a sunny day using [http://www.nongnu.org/texi2html/ texi2html]. texi2html-1.82/test/manuals/res/ccvs_mediawiki/cvs: Branching and merging0000644000175000017500000011705311264347121030251 0ustar flichtenheldflichtenheld
    |[cvs: Revisions#Sticky-tags < ]| |[[#Branches-motivation| > ]]|   |[cvs: Revisions#Revisions << ]| |[[cvs#Top| Up ]]| |[cvs: Recursive behavior#Recursive-behavior >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    == Branching and merging ==

    CVS allows you to isolate changes onto a separate line of development, known as a branch. When you change files on a branch, those changes do not appear on the main trunk or other branches.

    Later you can move changes from one branch to another branch (or the main trunk) by merging. Merging involves first running cvs update -j, to merge the changes into the working directory. You can then commit that revision, and thus effectively copy the changes onto another branch.


    |[[#Branching-and-merging| < ]]| |[[#Creating-a-branch| > ]]|   |[[#Branching-and-merging| << ]]| |[[#Branching-and-merging| Up ]]| |[cvs: Recursive behavior#Recursive-behavior >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === What branches are good for ===

    Suppose that release 1.0 of tc has been made. You are continuing to develop tc, planning to create release 1.1 in a couple of months. After a while your customers start to complain about a fatal bug. You check out release 1.0 (see section [cvs: Revisions#Tags Tags–Symbolic revisions]) and find the bug (which turns out to have a trivial fix). However, the current revision of the sources are in a state of flux and are not expected to be stable for at least another month. There is no way to make a bugfix release based on the newest sources.

    The thing to do in a situation like this is to create a branch on the revision trees for all the files that make up release 1.0 of tc. You can then make modifications to the branch without disturbing the main trunk. When the modifications are finished you can elect to either incorporate them on the main trunk, or leave them on the branch.


    |[[#Branches-motivation| < ]]| |[[#Accessing-branches| > ]]|   |[[#Branching-and-merging| << ]]| |[[#Branching-and-merging| Up ]]| |[cvs: Recursive behavior#Recursive-behavior >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Creating a branch ===

    You can create a branch with tag -b; for example, assuming you’re in a working copy:

     
    $ cvs tag -b rel-1-0-patches
    

    This splits off a branch based on the current revisions in the working copy, assigning that branch the name ‘rel-1-0-patches’.

    It is important to understand that branches get created in the repository, not in the working copy. Creating a branch based on current revisions, as the above example does, will not automatically switch the working copy to be on the new branch. For information on how to do that, see [[#Accessing-branches|Accessing branches]].

    You can also create a branch without reference to any working copy, by using rtag:

     
    $ cvs rtag -b -r rel-1-0 rel-1-0-patches tc
    

    -r rel-1-0’ says that this branch should be rooted at the revision that corresponds to the tag ‘rel-1-0’. It need not be the most recent revision – it’s often useful to split a branch off an old revision (for example, when fixing a bug in a past release otherwise known to be stable).

    As with ‘tag’, the ‘-b’ flag tells rtag to create a branch (rather than just a symbolic revision name). Note that the numeric revision number that matches ‘rel-1-0’ will probably be different from file to file.

    So, the full effect of the command is to create a new branch – named ‘rel-1-0-patches’ – in module ‘tc’, rooted in the revision tree at the point tagged by ‘rel-1-0’.


    |[[#Creating-a-branch| < ]]| |[[#Branches-and-revisions| > ]]|   |[[#Branching-and-merging| << ]]| |[[#Branching-and-merging| Up ]]| |[cvs: Recursive behavior#Recursive-behavior >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Accessing branches ===

    You can retrieve a branch in one of two ways: by checking it out fresh from the repository, or by switching an existing working copy over to the branch.

    To check out a branch from the repository, invoke ‘checkout’ with the ‘-r’ flag, followed by the tag name of the branch (see section [[#Creating-a-branch|Creating a branch]]):

     
    $ cvs checkout -r rel-1-0-patches tc
    

    Or, if you already have a working copy, you can switch it to a given branch with ‘update -r’:

     
    $ cvs update -r rel-1-0-patches tc
    

    or equivalently:

     
    $ cd tc
    $ cvs update -r rel-1-0-patches
    

    It does not matter if the working copy was originally on the main trunk or on some other branch – the above command will switch it to the named branch. And similarly to a regular ‘update’ command, ‘update -r’ merges any changes you have made, notifying you of conflicts where they occur.

    Once you have a working copy tied to a particular branch, it remains there until you tell it otherwise. This means that changes checked in from the working copy will add new revisions on that branch, while leaving the main trunk and other branches unaffected.

    To find out what branch a working copy is on, you can use the ‘status’ command. In its output, look for the field named ‘Sticky tag’ (see section [cvs: Revisions#Sticky-tags Sticky tags]) – that’s CVS’s way of telling you the branch, if any, of the current working files:

     
    $ cvs status -v driver.c backend.c
    ===================================================================
    File: driver.c          Status: Up-to-date
    
        Version:            1.7     Sat Dec  5 18:25:54 1992
        RCS Version:        1.7     /u/cvsroot/yoyodyne/tc/driver.c,v
        Sticky Tag:         rel-1-0-patches (branch: 1.7.2)
        Sticky Date:        (none)
        Sticky Options:     (none)
    
        Existing Tags:
            rel-1-0-patches             (branch: 1.7.2)
            rel-1-0                     (revision: 1.7)
    
    ===================================================================
    File: backend.c         Status: Up-to-date
    
        Version:            1.4     Tue Dec  1 14:39:01 1992
        RCS Version:        1.4     /u/cvsroot/yoyodyne/tc/backend.c,v
        Sticky Tag:         rel-1-0-patches (branch: 1.4.2)
        Sticky Date:        (none)
        Sticky Options:     (none)
    
        Existing Tags:
            rel-1-0-patches             (branch: 1.4.2)
            rel-1-0                     (revision: 1.4)
            rel-0-4                     (revision: 1.4)
    
    

    Don’t be confused by the fact that the branch numbers for each file are different (‘1.7.2’ and ‘1.4.2’ respectively). The branch tag is the same, ‘rel-1-0-patches’, and the files are indeed on the same branch. The numbers simply reflect the point in each file’s revision history at which the branch was made. In the above example, one can deduce that ‘driver.c’ had been through more changes than ‘backend.c’ before this branch was created.

    See [[#Branches-and-revisions|Branches and revisions]] for details about how branch numbers are constructed.


    |[[#Accessing-branches| < ]]| |[[#Magic-branch-numbers| > ]]|   |[[#Branching-and-merging| << ]]| |[[#Branching-and-merging| Up ]]| |[cvs: Recursive behavior#Recursive-behavior >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Branches and revisions ===

    Ordinarily, a file’s revision history is a linear series of increments (see section [cvs: Revisions#Revision-numbers Revision numbers]):

     
           +-----+    +-----+    +-----+    +-----+    +-----+
           ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 !
           +-----+    +-----+    +-----+    +-----+    +-----+
    

    However, CVS is not limited to linear development. The revision tree can be split into branches, where each branch is a self-maintained line of development. Changes made on one branch can easily be moved back to the main trunk.

    Each branch has a branch number, consisting of an odd number of period-separated decimal integers. The branch number is created by appending an integer to the revision number where the corresponding branch forked off. Having branch numbers allows more than one branch to be forked off from a certain revision.

    All revisions on a branch have revision numbers formed by appending an ordinal number to the branch number. The following figure illustrates branching with an example.

     
                                                          +-------------+
                               Branch 1.2.2.3.2 ->        ! 1.2.2.3.2.1 !
                                                        / +-------------+
                                                       /
                                                      /
                     +---------+    +---------+    +---------+
    Branch 1.2.2 -> _! 1.2.2.1 !----! 1.2.2.2 !----! 1.2.2.3 !
                   / +---------+    +---------+    +---------+
                  /
                 /
    +-----+    +-----+    +-----+    +-----+    +-----+
    ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 !  <- The main trunk
    +-----+    +-----+    +-----+    +-----+    +-----+
                    !
                    !
                    !   +---------+    +---------+    +---------+
    Branch 1.2.4 -> +---! 1.2.4.1 !----! 1.2.4.2 !----! 1.2.4.3 !
                        +---------+    +---------+    +---------+
    
    

    The exact details of how the branch number is constructed is not something you normally need to be concerned about, but here is how it works: When CVS creates a branch number it picks the first unused even integer, starting with 2. So when you want to create a branch from revision 6.4 it will be numbered 6.4.2. All branch numbers ending in a zero (such as 6.4.0) are used internally by CVS (see section [[#Magic-branch-numbers|Magic branch numbers]]). The branch 1.1.1 has a special meaning. See section [cvs: Tracking third-party sources#Tracking-sources Tracking third-party sources].


    |[[#Branches-and-revisions| < ]]| |[[#Merging-a-branch| > ]]|   |[[#Branching-and-merging| << ]]| |[[#Branching-and-merging| Up ]]| |[cvs: Recursive behavior#Recursive-behavior >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Magic branch numbers ===

    This section describes a CVS feature called magic branches. For most purposes, you need not worry about magic branches; CVS handles them for you. However, they are visible to you in certain circumstances, so it may be useful to have some idea of how it works.

    Externally, branch numbers consist of an odd number of dot-separated decimal integers. See section [cvs: Revisions#Revision-numbers Revision numbers]. That is not the whole truth, however. For efficiency reasons CVS sometimes inserts an extra 0 in the second rightmost position (1.2.4 becomes 1.2.0.4, 8.9.10.11.12 becomes 8.9.10.11.0.12 and so on).

    CVS does a pretty good job at hiding these so called magic branches, but in a few places the hiding is incomplete:

    • The magic branch number appears in the output from cvs log.
    • You cannot specify a symbolic branch name to cvs admin.

    You can use the admin command to reassign a symbolic name to a branch the way RCS expects it to be. If R4patches is assigned to the branch 1.4.2 (magic branch number 1.4.0.2) in file ‘numbers.c’ you can do this:

     
    $ cvs admin -NR4patches:1.4.2 numbers.c
    

    It only works if at least one revision is already committed on the branch. Be very careful so that you do not assign the tag to the wrong number. (There is no way to see how the tag was assigned yesterday).


    |[[#Magic-branch-numbers| < ]]| |[[#Merging-more-than-once| > ]]|   |[[#Branching-and-merging| << ]]| |[[#Branching-and-merging| Up ]]| |[cvs: Recursive behavior#Recursive-behavior >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Merging an entire branch ===

    You can merge changes made on a branch into your working copy by giving the ‘-j branchname’ flag to the update subcommand. With one ‘-j branchname’ option it merges the changes made between the greatest common ancestor (GCA) of the branch and the destination revision (in the simple case below the GCA is the point where the branch forked) and the newest revision on that branch into your working copy.

    The ‘-j’ stands for “join”.

    Consider this revision tree:

     
    +-----+    +-----+    +-----+    +-----+
    ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !      <- The main trunk
    +-----+    +-----+    +-----+    +-----+
                    !
                    !
                    !   +---------+    +---------+
    Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 !
                        +---------+    +---------+
    

    The branch 1.2.2 has been given the tag (symbolic name) ‘R1fix’. The following example assumes that the module ‘mod’ contains only one file, ‘m.c’.

     
    $ cvs checkout mod               # Retrieve the latest revision, 1.4
    
    $ cvs update -j R1fix m.c        # Merge all changes made on the branch,
                                     # i.e. the changes between revision 1.2
                                     # and 1.2.2.2, into your working copy
                                     # of the file.
    
    $ cvs commit -m "Included R1fix" # Create revision 1.5.
    

    A conflict can result from a merge operation. If that happens, you should resolve it before committing the new revision. See section [cvs: Multiple developers#Conflicts-example Conflicts example].

    If your source files contain keywords (see section [cvs: Keyword substitution#Keyword-substitution Keyword substitution]), you might be getting more conflicts than strictly necessary. See [[#Merging-and-keywords|Merging and keywords]], for information on how to avoid this.

    The checkout command also supports the ‘-j branchname’ flag. The same effect as above could be achieved with this:

     
    $ cvs checkout -j R1fix mod
    $ cvs commit -m "Included R1fix"
    

    It should be noted that update -j tagname will also work but may not produce the desired result. See section [[#Merging-adds-and-removals|Merging can add or remove files]], for more.


    |[[#Merging-a-branch| < ]]| |[[#Merging-two-revisions| > ]]|   |[[#Branching-and-merging| << ]]| |[[#Branching-and-merging| Up ]]| |[cvs: Recursive behavior#Recursive-behavior >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Merging from a branch several times ===

    Continuing our example, the revision tree now looks like this:

     
    +-----+    +-----+    +-----+    +-----+    +-----+
    ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 !   <- The main trunk
    +-----+    +-----+    +-----+    +-----+    +-----+
                    !                           *
                    !                          *
                    !   +---------+    +---------+
    Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 !
                        +---------+    +---------+
    

    where the starred line represents the merge from the ‘R1fix’ branch to the main trunk, as just discussed.

    Now suppose that development continues on the ‘R1fix’ branch:

     
    +-----+    +-----+    +-----+    +-----+    +-----+
    ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 !   <- The main trunk
    +-----+    +-----+    +-----+    +-----+    +-----+
                    !                           *
                    !                          *
                    !   +---------+    +---------+    +---------+
    Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 !----! 1.2.2.3 !
                        +---------+    +---------+    +---------+
    

    and then you want to merge those new changes onto the main trunk. If you just use the cvs update -j R1fix m.c command again, CVS will attempt to merge again the changes which you have already merged, which can have undesirable side effects.

    So instead you need to specify that you only want to merge the changes on the branch which have not yet been merged into the trunk. To do that you specify two ‘-j’ options, and CVS merges the changes from the first revision to the second revision. For example, in this case the simplest way would be

     
    cvs update -j 1.2.2.2 -j R1fix m.c    # Merge changes from 1.2.2.2 to the
                                          # head of the R1fix branch
    

    The problem with this is that you need to specify the 1.2.2.2 revision manually. A slightly better approach might be to use the date the last merge was done:

     
    cvs update -j R1fix:yesterday -j R1fix m.c
    

    Better yet, tag the R1fix branch after every merge into the trunk, and then use that tag for subsequent merges:

     
    cvs update -j merged_from_R1fix_to_trunk -j R1fix m.c
    

    |[[#Merging-more-than-once| < ]]| |[[#Merging-adds-and-removals| > ]]|   |[[#Branching-and-merging| << ]]| |[[#Branching-and-merging| Up ]]| |[cvs: Recursive behavior#Recursive-behavior >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Merging differences between any two revisions ===

    With two ‘-j revision’ flags, the update (and checkout) command can merge the differences between any two revisions into your working file.

     
    $ cvs update -j 1.5 -j 1.3 backend.c
    

    will undo all changes made between revision 1.3 and 1.5. Note the order of the revisions!

    If you try to use this option when operating on multiple files, remember that the numeric revisions will probably be very different between the various files. You almost always use symbolic tags rather than revision numbers when operating on multiple files.

    Specifying two ‘-j’ options can also undo file removals or additions. For example, suppose you have a file named ‘file1’ which existed as revision 1.1, and you then removed it (thus adding a dead revision 1.2). Now suppose you want to add it again, with the same contents it had previously. Here is how to do it:

     
    $ cvs update -j 1.2 -j 1.1 file1
    U file1
    $ cvs commit -m test
    Checking in file1;
    /tmp/cvs-sanity/cvsroot/first-dir/file1,v  <--  file1
    new revision: 1.3; previous revision: 1.2
    done
    $
    

    |[[#Merging-two-revisions| < ]]| |[[#Merging-and-keywords| > ]]|   |[[#Branching-and-merging| << ]]| |[[#Branching-and-merging| Up ]]| |[cvs: Recursive behavior#Recursive-behavior >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Merging can add or remove files ===

    If the changes which you are merging involve removing or adding some files, update -j will reflect such additions or removals.

    For example:

     
    cvs update -A
    touch a b c
    cvs add a b c ; cvs ci -m "added" a b c
    cvs tag -b branchtag
    cvs update -r branchtag
    touch d ; cvs add d
    rm a ; cvs rm a
    cvs ci -m "added d, removed a"
    cvs update -A
    cvs update -jbranchtag
    

    After these commands are executed and a ‘cvs commit’ is done, file ‘a’ will be removed and file ‘d’ added in the main branch.

    Note that using a single static tag (‘-j tagname’) rather than a dynamic tag (‘-j branchname’) to merge changes from a branch will usually not remove files which were removed on the branch since CVS does not automatically add static tags to dead revisions. The exception to this rule occurs when a static tag has been attached to a dead revision manually. Use the branch tag to merge all changes from the branch or use two static tags as merge endpoints to be sure that all intended changes are propagated in the merge.


    |[[#Merging-adds-and-removals| < ]]| |[cvs: Recursive behavior#Recursive-behavior > ]|   |[[#Branching-and-merging| << ]]| |[[#Branching-and-merging| Up ]]| |[cvs: Recursive behavior#Recursive-behavior >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Merging and keywords ===

    If you merge files containing keywords (see section [cvs: Keyword substitution#Keyword-substitution Keyword substitution]), you will normally get numerous conflicts during the merge, because the keywords are expanded differently in the revisions which you are merging.

    Therefore, you will often want to specify the ‘-kk’ (see section [cvs: Keyword substitution#Substitution-modes Substitution modes]) switch to the merge command line. By substituting just the name of the keyword, not the expanded value of that keyword, this option ensures that the revisions which you are merging will be the same as each other, and avoid spurious conflicts.

    For example, suppose you have a file like this:

     
           +---------+
          _! 1.1.2.1 !   <-  br1
         / +---------+
        /
       /
    +-----+    +-----+
    ! 1.1 !----! 1.2 !
    +-----+    +-----+
    

    and your working directory is currently on the trunk (revision 1.2). Then you might get the following results from a merge:

     
    $ cat file1
    key $Revision: 1.2 $
    . . .
    $ cvs update -j br1
    U file1
    RCS file: /cvsroot/first-dir/file1,v
    retrieving revision 1.1
    retrieving revision 1.1.2.1
    Merging differences between 1.1 and 1.1.2.1 into file1
    rcsmerge: warning: conflicts during merge
    $ cat file1
    <<<<<<< file1
    key $Revision: 1.2 $
    =======
    key $Revision: 1.1.2.1 $
    >>>>>>> 1.1.2.1
    . . .
    

    What happened was that the merge tried to merge the differences between 1.1 and 1.1.2.1 into your working directory. So, since the keyword changed from Revision: 1.1 to Revision: 1.1.2.1, CVS tried to merge that change into your working directory, which conflicted with the fact that your working directory had contained Revision: 1.2.

    Here is what happens if you had used ‘-kk’:

     
    $ cat file1
    key $Revision: 1.2 $
    . . .
    $ cvs update -kk -j br1
    U file1
    RCS file: /cvsroot/first-dir/file1,v
    retrieving revision 1.1
    retrieving revision 1.1.2.1
    Merging differences between 1.1 and 1.1.2.1 into file1
    $ cat file1
    key $Revision$
    . . .
    

    What is going on here is that revision 1.1 and 1.1.2.1 both expand as plain Revision, and therefore merging the changes between them into the working directory need not change anything. Therefore, there is no conflict.

    WARNING: In versions of CVS prior to 1.12.2, there was a major problem with using ‘-kk’ on merges. Namely, ‘-kk’ overrode any default keyword expansion mode set in the archive file in the repository. This could, unfortunately for some users, cause data corruption in binary files (with a default keyword expansion mode set to ‘-kb’). Therefore, when a repository contained binary files, conflicts had to be dealt with manually rather than using ‘-kk’ in a merge command.

    In CVS version 1.12.2 and later, the keyword expansion mode provided on the command line to any CVS command no longer overrides the ‘-kb’ keyword expansion mode setting for binary files, though it will still override other default keyword expansion modes. You can now safely merge using ‘-kk’ to avoid spurious conflicts on lines containing RCS keywords, even when your repository contains binary files.


    |[[#Branching-and-merging| << ]]| |[cvs: Recursive behavior#Recursive-behavior >> ]|           |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    This document was generated by a tester on a sunny day using [http://www.nongnu.org/texi2html/ texi2html]. texi2html-1.82/test/manuals/res/ccvs_mediawiki/cvs: Table of Contents0000644000175000017500000006552511264347121027422 0ustar flichtenheldflichtenheld
    |[[cvs#Top|Top]]| |[[#SEC_Contents|Contents]]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    == Table of Contents ==
    • [cvs: Overview#Overview Overview]
      • [cvs: Overview#What-is-CVS_003f What is CVS?]
      • [cvs: Overview#What-is-CVS-not_003f What is CVS not?]
      • [cvs: Overview#A-sample-session A sample session]
        • [cvs: Overview#Getting-the-source Getting the source]
        • [cvs: Overview#Committing-your-changes Committing your changes]
        • [cvs: Overview#Cleaning-up Cleaning up]
        • [cvs: Overview#Viewing-differences Viewing differences]
    • [cvs: The Repository#Repository The Repository]
      • [cvs: The Repository#Specifying-a-repository Telling CVS where your repository is]
      • [cvs: The Repository#Repository-storage How data is stored in the repository]
        • [cvs: The Repository#Repository-files Where files are stored within the repository]
        • [cvs: The Repository#File-permissions File permissions]
        • [cvs: The Repository#Windows-permissions File Permission issues specific to Windows]
        • [cvs: The Repository#Attic The attic]
        • [cvs: The Repository#CVS-in-repository The CVS directory in the repository]
        • [cvs: The Repository#Locks CVS locks in the repository]
        • [cvs: The Repository#CVSROOT-storage How files are stored in the CVSROOT directory]
      • [cvs: The Repository#Working-directory-storage How data is stored in the working directory]
      • [cvs: The Repository#Intro-administrative-files The administrative files]
        • [cvs: The Repository#Editing-administrative-files Editing administrative files]
      • [cvs: The Repository#Multiple-repositories Multiple repositories]
      • [cvs: The Repository#Creating-a-repository Creating a repository]
      • [cvs: The Repository#Backing-up Backing up a repository]
      • [cvs: The Repository#Moving-a-repository Moving a repository]
      • [cvs: The Repository#Remote-repositories Remote repositories]
        • [cvs: The Repository#Server-requirements Server requirements]
        • [cvs: The Repository#Connecting-via-rsh Connecting with rsh]
        • [cvs: The Repository#Password-authenticated Direct connection with password authentication]
          • [cvs: The Repository#Password-authentication-server Setting up the server for password authentication]
          • [cvs: The Repository#Password-authentication-client Using the client with password authentication]
          • [cvs: The Repository#Password-authentication-security Security considerations with password authentication]
        • [cvs: The Repository#GSSAPI-authenticated Direct connection with GSSAPI]
        • [cvs: The Repository#Kerberos-authenticated Direct connection with kerberos]
        • [cvs: The Repository#Connecting-via-fork Connecting with fork]
      • [cvs: The Repository#Read_002donly-access Read-only repository access]
      • [cvs: The Repository#Server-temporary-directory Temporary directories for the server]
    • [cvs: Starting a project with CVS#Starting-a-new-project Starting a project with CVS]
      • [cvs: Starting a project with CVS#Setting-up-the-files Setting up the files]
        • [cvs: Starting a project with CVS#From-files Creating a directory tree from a number of files]
        • [cvs: Starting a project with CVS#From-other-version-control-systems Creating Files From Other Version Control Systems]
        • [cvs: Starting a project with CVS#From-scratch Creating a directory tree from scratch]
      • [cvs: Starting a project with CVS#Defining-the-module Defining the module]
    • [cvs: Revisions#Revisions Revisions]
      • [cvs: Revisions#Revision-numbers Revision numbers]
      • [cvs: Revisions#Versions-revisions-releases Versions, revisions and releases]
      • [cvs: Revisions#Assigning-revisions Assigning revisions]
      • [cvs: Revisions#Tags Tags–Symbolic revisions]
      • [cvs: Revisions#Tagging-the-working-directory Specifying what to tag from the working directory]
      • [cvs: Revisions#Tagging-by-date_002ftag Specifying what to tag by date or revision]
      • [cvs: Revisions#Modifying-tags Deleting, moving, and renaming tags]
      • [cvs: Revisions#Tagging-add_002fremove Tagging and adding and removing files]
      • [cvs: Revisions#Sticky-tags Sticky tags]
    • [cvs: Branching and merging#Branching-and-merging Branching and merging]
      • [cvs: Branching and merging#Branches-motivation What branches are good for]
      • [cvs: Branching and merging#Creating-a-branch Creating a branch]
      • [cvs: Branching and merging#Accessing-branches Accessing branches]
      • [cvs: Branching and merging#Branches-and-revisions Branches and revisions]
      • [cvs: Branching and merging#Magic-branch-numbers Magic branch numbers]
      • [cvs: Branching and merging#Merging-a-branch Merging an entire branch]
      • [cvs: Branching and merging#Merging-more-than-once Merging from a branch several times]
      • [cvs: Branching and merging#Merging-two-revisions Merging differences between any two revisions]
      • [cvs: Branching and merging#Merging-adds-and-removals Merging can add or remove files]
      • [cvs: Branching and merging#Merging-and-keywords Merging and keywords]
    • [cvs: Recursive behavior#Recursive-behavior Recursive behavior]
    • [cvs: Adding, removing, and renaming files and directories#Adding-and-removing Adding, removing, and renaming files and directories]
      • [cvs: Adding, removing, and renaming files and directories#Adding-files Adding files to a directory]
      • [cvs: Adding, removing, and renaming files and directories#Removing-files Removing files]
      • [cvs: Adding, removing, and renaming files and directories#Removing-directories Removing directories]
      • [cvs: Adding, removing, and renaming files and directories#Moving-files Moving and renaming files]
        • [cvs: Adding, removing, and renaming files and directories#Outside The Normal way to Rename]
        • [cvs: Adding, removing, and renaming files and directories#Inside Moving the history file]
        • [cvs: Adding, removing, and renaming files and directories#Rename-by-copying Copying the history file]
      • [cvs: Adding, removing, and renaming files and directories#Moving-directories Moving and renaming directories]
    • [cvs: History browsing#History-browsing History browsing]
      • [cvs: History browsing#log-messages Log messages]
      • [cvs: History browsing#history-database The history database]
      • [cvs: History browsing#user_002ddefined-logging User-defined logging]
      • [cvs: History browsing#annotate Annotate command]
    • [cvs: Handling binary files#Binary-files Handling binary files]
      • [cvs: Handling binary files#Binary-why The issues with binary files]
      • [cvs: Handling binary files#Binary-howto How to store binary files]
    • [cvs: Multiple developers#Multiple-developers Multiple developers]
      • [cvs: Multiple developers#File-status File status]
      • [cvs: Multiple developers#Updating-a-file Bringing a file up to date]
      • [cvs: Multiple developers#Conflicts-example Conflicts example]
      • [cvs: Multiple developers#Informing-others Informing others about commits]
      • [cvs: Multiple developers#Concurrency Several developers simultaneously attempting to run CVS]
      • [cvs: Multiple developers#Watches Mechanisms to track who is editing files]
        • [cvs: Multiple developers#Setting-a-watch Telling CVS to watch certain files]
        • [cvs: Multiple developers#Getting-Notified Telling CVS to notify you]
        • [cvs: Multiple developers#Editing-files How to edit a file which is being watched]
        • [cvs: Multiple developers#Watch-information Information about who is watching and editing]
        • [cvs: Multiple developers#Watches-Compatibility Using watches with old versions of CVS]
      • [cvs: Multiple developers#Choosing-a-model Choosing between reserved or unreserved checkouts]
    • [cvs: Revision management#Revision-management Revision management]
      • [cvs: Revision management#When-to-commit When to commit?]
    • [cvs: Keyword substitution#Keyword-substitution Keyword substitution]
      • [cvs: Keyword substitution#Keyword-list Keyword List]
      • [cvs: Keyword substitution#Using-keywords Using keywords]
      • [cvs: Keyword substitution#Avoiding-substitution Avoiding substitution]
      • [cvs: Keyword substitution#Substitution-modes Substitution modes]
      • [cvs: Keyword substitution#Configuring-keyword-expansion Configuring Keyord Expansion]
      • [cvs: Keyword substitution#Log-keyword Problems with the $Log$ keyword.]
    • [cvs: Tracking third-party sources#Tracking-sources Tracking third-party sources]
      • [cvs: Tracking third-party sources#First-import Importing for the first time]
      • [cvs: Tracking third-party sources#Update-imports Updating with the import command]
      • [cvs: Tracking third-party sources#Reverting-local-changes Reverting to the latest vendor release]
      • [cvs: Tracking third-party sources#Binary-files-in-imports How to handle binary files with cvs import]
      • [cvs: Tracking third-party sources#Keywords-in-imports How to handle keyword substitution with cvs import]
      • [cvs: Tracking third-party sources#Multiple-vendor-branches Multiple vendor branches]
    • [cvs: How your build system interacts with CVS#Builds How your build system interacts with CVS]
    • [cvs: Special Files#Special-Files Special Files]
    • [cvs: Guide to CVS commands#CVS-commands Guide to CVS commands]
      • [cvs: Guide to CVS commands#Structure Overall structure of CVS commands]
      • [cvs: Guide to CVS commands#Exit-status CVS’s exit status]
      • [cvs: Guide to CVS commands#g_t_007e_002f_002ecvsrc Default options and the ~/.cvsrc file]
      • [cvs: Guide to CVS commands#Global-options Global options]
      • [cvs: Guide to CVS commands#Common-options Common command options]
      • [cvs: Guide to CVS commands#admin admin—Administration]
        • [cvs: Guide to CVS commands#admin-options admin options]
      • [cvs: Guide to CVS commands#checkout checkout—Check out sources for editing]
        • [cvs: Guide to CVS commands#checkout-options checkout options]
        • [cvs: Guide to CVS commands#checkout-examples checkout examples]
      • [cvs: Guide to CVS commands#commit commit—Check files into the repository]
        • [cvs: Guide to CVS commands#commit-options commit options]
        • [cvs: Guide to CVS commands#commit-examples commit examples]
          • [cvs: Guide to CVS commands#Committing-to-a-branch Committing to a branch]
          • [cvs: Guide to CVS commands#Creating-the-branch-after-editing Creating the branch after editing]
      • [cvs: Guide to CVS commands#diff diff—Show differences between revisions]
        • [cvs: Guide to CVS commands#diff-options diff options]
          • [cvs: Guide to CVS commands#Line-group-formats Line group formats]
          • [cvs: Guide to CVS commands#Line-formats Line formats]
        • [cvs: Guide to CVS commands#diff-examples diff examples]
      • [cvs: Guide to CVS commands#export export—Export sources from CVS, similar to checkout]
        • [cvs: Guide to CVS commands#export-options export options]
      • [cvs: Guide to CVS commands#history history—Show status of files and users]
        • [cvs: Guide to CVS commands#history-options history options]
      • [cvs: Guide to CVS commands#import import—Import sources into CVS, using vendor branches]
        • [cvs: Guide to CVS commands#import-options import options]
        • [cvs: Guide to CVS commands#import-output import output]
        • [cvs: Guide to CVS commands#import-examples import examples]
      • [cvs: Guide to CVS commands#log log—Print out log information for files]
        • [cvs: Guide to CVS commands#log-options log options]
        • [cvs: Guide to CVS commands#log-examples log examples]
      • [cvs: Guide to CVS commands#rdiff rdiff—’patch’ format diffs between releases]
        • [cvs: Guide to CVS commands#rdiff-options rdiff options]
        • [cvs: Guide to CVS commands#rdiff-examples rdiff examples]
      • [cvs: Guide to CVS commands#release release—Indicate that a Module is no longer in use]
        • [cvs: Guide to CVS commands#release-options release options]
        • [cvs: Guide to CVS commands#release-output release output]
        • [cvs: Guide to CVS commands#release-examples release examples]
      • [cvs: Guide to CVS commands#update update—Bring work tree in sync with repository]
        • [cvs: Guide to CVS commands#update-options update options]
        • [cvs: Guide to CVS commands#update-output update output]
    • [cvs: Quick reference to CVS commands#Invoking-CVS Quick reference to CVS commands]
    • [cvs: Reference manual for Administrative files#Administrative-files Reference manual for Administrative files]
      • [cvs: Reference manual for Administrative files#modules The modules file]
        • [cvs: Reference manual for Administrative files#Alias-modules Alias modules]
        • [cvs: Reference manual for Administrative files#Regular-modules Regular modules]
        • [cvs: Reference manual for Administrative files#Ampersand-modules Ampersand modules]
        • [cvs: Reference manual for Administrative files#Excluding-directories Excluding directories]
        • [cvs: Reference manual for Administrative files#Module-options Module options]
        • [cvs: Reference manual for Administrative files#Module-program-options How the modules file “program options” programs are run]
      • [cvs: Reference manual for Administrative files#Wrappers The cvswrappers file]
      • [cvs: Reference manual for Administrative files#commit-files The commit support files]
        • [cvs: Reference manual for Administrative files#syntax The common syntax]
        • [cvs: Reference manual for Administrative files#commitinfo Commitinfo]
        • [cvs: Reference manual for Administrative files#verifymsg Verifying log messages]
        • [cvs: Reference manual for Administrative files#editinfo Editinfo]
          • [cvs: Reference manual for Administrative files#editinfo-example Editinfo example]
        • [cvs: Reference manual for Administrative files#loginfo Loginfo]
          • [cvs: Reference manual for Administrative files#loginfo-example Loginfo example]
          • [cvs: Reference manual for Administrative files#Keeping-a-checked-out-copy Keeping a checked out copy]
      • [cvs: Reference manual for Administrative files#rcsinfo Rcsinfo]
      • [cvs: Reference manual for Administrative files#cvsignore Ignoring files via cvsignore]
      • [cvs: Reference manual for Administrative files#checkoutlist The checkoutlist file]
      • [cvs: Reference manual for Administrative files#history-file The history file]
      • [cvs: Reference manual for Administrative files#Variables Expansions in administrative files]
      • [cvs: Reference manual for Administrative files#config The CVSROOT/config configuration file]
    • [cvs: All environment variables which affect CVS#Environment-variables All environment variables which affect CVS]
    • [cvs: Compatibility between CVS Versions#Compatibility Compatibility between CVS Versions]
    • [cvs: Troubleshooting#Troubleshooting Troubleshooting]
      • [cvs: Troubleshooting#Error-messages Partial list of error messages]
      • [cvs: Troubleshooting#Connection Trouble making a connection to a CVS server]
      • [cvs: Troubleshooting#Other-problems Other common problems]
    • [cvs: Credits#Credits Credits]
    • [cvs: Dealing with bugs in CVS or this manual#BUGS Dealing with bugs in CVS or this manual]
    • [cvs: Index#Index Index]

    |[[cvs#Top|Top]]| |[[#SEC_Contents|Contents]]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    This document was generated by a tester on a sunny day using [http://www.nongnu.org/texi2html/ texi2html]. texi2html-1.82/test/manuals/res/ccvs_mediawiki/cvs: Handling binary files0000644000175000017500000002520211264347121030270 0ustar flichtenheldflichtenheld
    |[cvs: History browsing#annotate < ]| |[[#Binary-why| > ]]|   |[cvs: History browsing#History-browsing << ]| |[[cvs#Top| Up ]]| |[cvs: Multiple developers#Multiple-developers >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    == Handling binary files ==

    The most common use for CVS is to store text files. With text files, CVS can merge revisions, display the differences between revisions in a human-visible fashion, and other such operations. However, if you are willing to give up a few of these abilities, CVS can store binary files. For example, one might store a web site in CVS including both text files and binary images.


    |[[#Binary-files| < ]]| |[[#Binary-howto| > ]]|   |[[#Binary-files| << ]]| |[[#Binary-files| Up ]]| |[cvs: Multiple developers#Multiple-developers >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === The issues with binary files ===

    While the need to manage binary files may seem obvious if the files that you customarily work with are binary, putting them into version control does present some additional issues.

    One basic function of version control is to show the differences between two revisions. For example, if someone else checked in a new version of a file, you may wish to look at what they changed and determine whether their changes are good. For text files, CVS provides this functionality via the cvs diff command. For binary files, it may be possible to extract the two revisions and then compare them with a tool external to CVS (for example, word processing software often has such a feature). If there is no such tool, one must track changes via other mechanisms, such as urging people to write good log messages, and hoping that the changes they actually made were the changes that they intended to make.

    Another ability of a version control system is the ability to merge two revisions. For CVS this happens in two contexts. The first is when users make changes in separate working directories (see section [cvs: Multiple developers#Multiple-developers Multiple developers]). The second is when one merges explicitly with the ‘update -j’ command (see section [cvs: Branching and merging#Branching-and-merging Branching and merging]).

    In the case of text files, CVS can merge changes made independently, and signal a conflict if the changes conflict. With binary files, the best that CVS can do is present the two different copies of the file, and leave it to the user to resolve the conflict. The user may choose one copy or the other, or may run an external merge tool which knows about that particular file format, if one exists. Note that having the user merge relies primarily on the user to not accidentally omit some changes, and thus is potentially error prone.

    If this process is thought to be undesirable, the best choice may be to avoid merging. To avoid the merges that result from separate working directories, see the discussion of reserved checkouts (file locking) in [cvs: Multiple developers#Multiple-developers Multiple developers]. To avoid the merges resulting from branches, restrict use of branches.


    |[[#Binary-why| < ]]| |[cvs: Multiple developers#Multiple-developers > ]|   |[[#Binary-files| << ]]| |[[#Binary-files| Up ]]| |[cvs: Multiple developers#Multiple-developers >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === How to store binary files ===

    There are two issues with using CVS to store binary files. The first is that CVS by default converts line endings between the canonical form in which they are stored in the repository (linefeed only), and the form appropriate to the operating system in use on the client (for example, carriage return followed by line feed for Windows NT).

    The second is that a binary file might happen to contain data which looks like a keyword (see section [cvs: Keyword substitution#Keyword-substitution Keyword substitution]), so keyword expansion must be turned off.

    The ‘-kb’ option available with some CVS commands insures that neither line ending conversion nor keyword expansion will be done.

    Here is an example of how you can create a new file using the ‘-kb’ flag:

     
    $ echo '$Id$' > kotest
    $ cvs add -kb -m"A test file" kotest
    $ cvs ci -m"First checkin; contains a keyword" kotest
    

    If a file accidentally gets added without ‘-kb’, one can use the cvs admin command to recover. For example:

     
    $ echo '$Id$' > kotest
    $ cvs add -m"A test file" kotest
    $ cvs ci -m"First checkin; contains a keyword" kotest
    $ cvs admin -kb kotest
    $ cvs update -A kotest
    # For non-unix systems:
    # Copy in a good copy of the file from outside CVS
    $ cvs commit -m "make it binary" kotest
    

    When you check in the file ‘kotest’ the file is not preserved as a binary file, because you did not check it in as a binary file. The cvs admin -kb command sets the default keyword substitution method for this file, but it does not alter the working copy of the file that you have. If you need to cope with line endings (that is, you are using CVS on a non-unix system), then you need to check in a new copy of the file, as shown by the cvs commit command above. On unix, the cvs update -A command suffices. (Note that you can use cvs log to determine the default keyword substitution method for a file and cvs status to determine the keyword substitution method for a working copy.)

    However, in using cvs admin -k to change the keyword expansion, be aware that the keyword expansion mode is not version controlled. This means that, for example, that if you have a text file in old releases, and a binary file with the same name in new releases, CVS provides no way to check out the file in text or binary mode depending on what version you are checking out. There is no good workaround for this problem.

    You can also set a default for whether cvs add and cvs import treat a file as binary based on its name; for example you could say that files who names end in ‘.exe’ are binary. See section [cvs: Reference manual for Administrative files#Wrappers The cvswrappers file]. There is currently no way to have CVS detect whether a file is binary based on its contents. The main difficulty with designing such a feature is that it is not clear how to distinguish between binary and non-binary files, and the rules to apply would vary considerably with the operating system.


    |[[#Binary-files| << ]]| |[cvs: Multiple developers#Multiple-developers >> ]|           |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    This document was generated by a tester on a sunny day using [http://www.nongnu.org/texi2html/ texi2html]. texi2html-1.82/test/manuals/res/ccvs_mediawiki/cvs: Credits0000644000175000017500000000730011264347121025610 0ustar flichtenheldflichtenheld
    |[cvs: Troubleshooting#Other-problems < ]| |[cvs: Dealing with bugs in CVS or this manual#BUGS > ]|   |[cvs: Troubleshooting#Troubleshooting << ]| |[[cvs#Top| Up ]]| |[cvs: Dealing with bugs in CVS or this manual#BUGS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    == Credits ==

    Roland Pesch, then of Cygnus Support <roland@wrs.com> wrote the manual pages which were distributed with CVS 1.3. Much of their text was copied into this manual. He also read an early draft of this manual and contributed many ideas and corrections.

    The mailing-list info-cvs is sometimes informative. I have included information from postings made by the following persons: David G. Grubbs <dgg@think.com>.

    Some text has been extracted from the man pages for RCS.

    The CVS FAQ by David G. Grubbs has provided useful material. The FAQ is no longer maintained, however, and this manual is about the closest thing there is to a successor (with respect to documenting how to use CVS, at least).

    In addition, the following persons have helped by telling me about mistakes I’ve made:

     
    Roxanne Brunskill <rbrunski@datap.ca>,
    Kathy Dyer <dyer@phoenix.ocf.llnl.gov>,
    Karl Pingle <pingle@acuson.com>,
    Thomas A Peterson <tap@src.honeywell.com>,
    Inge Wallin <ingwa@signum.se>,
    Dirk Koschuetzki <koschuet@fmi.uni-passau.de>
    and Michael Brown <brown@wi.extrel.com>.
    

    The list of contributors here is not comprehensive; for a more complete list of who has contributed to this manual see the file ‘doc/ChangeLog’ in the CVS source distribution.


    |[cvs: Troubleshooting#Troubleshooting << ]| |[cvs: Dealing with bugs in CVS or this manual#BUGS >> ]|           |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    This document was generated by a tester on a sunny day using [http://www.nongnu.org/texi2html/ texi2html]. texi2html-1.82/test/manuals/res/ccvs_mediawiki/cvs: How your build system interacts with CVS0000644000175000017500000001155011264347121033643 0ustar flichtenheldflichtenheld
    |[cvs: Tracking third-party sources#Multiple-vendor-branches < ]| |[cvs: Special Files#Special-Files > ]|   |[cvs: Tracking third-party sources#Tracking-sources << ]| |[[cvs#Top| Up ]]| |[cvs: Special Files#Special-Files >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    == How your build system interacts with CVS ==

    As mentioned in the introduction, CVS does not contain software for building your software from source code. This section describes how various aspects of your build system might interact with CVS.

    One common question, especially from people who are accustomed to RCS, is how to make their build get an up to date copy of the sources. The answer to this with CVS is two-fold. First of all, since CVS itself can recurse through directories, there is no need to modify your ‘Makefile’ (or whatever configuration file your build tool uses) to make sure each file is up to date. Instead, just use two commands, first cvs -q update and then make or whatever the command is to invoke your build tool. Secondly, you do not necessarily want to get a copy of a change someone else made until you have finished your own work. One suggested approach is to first update your sources, then implement, build and test the change you were thinking of, and then commit your sources (updating first if necessary). By periodically (in between changes, using the approach just described) updating your entire tree, you ensure that your sources are sufficiently up to date.

    One common need is to record which versions of which source files went into a particular build. This kind of functionality is sometimes called bill of materials or something similar. The best way to do this with CVS is to use the tag command to record which versions went into a given build (see section [cvs: Revisions#Tags Tags–Symbolic revisions]).

    Using CVS in the most straightforward manner possible, each developer will have a copy of the entire source tree which is used in a particular build. If the source tree is small, or if developers are geographically dispersed, this is the preferred solution. In fact one approach for larger projects is to break a project down into smaller separately-compiled subsystems, and arrange a way of releasing them internally so that each developer need check out only those subsystems which they are actively working on.

    Another approach is to set up a structure which allows developers to have their own copies of some files, and for other files to access source files from a central location. Many people have come up with some such a system using features such as the symbolic link feature found in many operating systems, or the VPATH feature found in many versions of make. One build tool which is designed to help with this kind of thing is Odin (see ftp://ftp.cs.colorado.edu/pub/distribs/odin).


    |[cvs: Tracking third-party sources#Tracking-sources << ]| |[cvs: Special Files#Special-Files >> ]|           |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    This document was generated by a tester on a sunny day using [http://www.nongnu.org/texi2html/ texi2html]. texi2html-1.82/test/manuals/res/ccvs_mediawiki/cvs: Troubleshooting0000644000175000017500000010223511264347121027405 0ustar flichtenheldflichtenheld
    |[cvs: Compatibility between CVS Versions#Compatibility < ]| |[[#Error-messages| > ]]|   |[cvs: Compatibility between CVS Versions#Compatibility << ]| |[[cvs#Top| Up ]]| |[cvs: Credits#Credits >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    == Troubleshooting ==

    If you are having trouble with CVS, this appendix may help. If there is a particular error message which you are seeing, then you can look up the message alphabetically. If not, you can look through the section on other problems to see if your problem is mentioned there.


    |[[#Troubleshooting| < ]]| |[[#Connection| > ]]|   |[[#Troubleshooting| << ]]| |[[#Troubleshooting| Up ]]| |[cvs: Credits#Credits >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Partial list of error messages ===

    Here is a partial list of error messages that you may see from CVS. It is not a complete list—CVS is capable of printing many, many error messages, often with parts of them supplied by the operating system, but the intention is to list the common and/or potentially confusing error messages.

    The messages are alphabetical, but introductory text such as ‘cvs update: ’ is not considered in ordering them.

    In some cases the list includes messages printed by old versions of CVS (partly because users may not be sure which version of CVS they are using at any particular moment).

    file:line: Assertion 'text' failed

    The exact format of this message may vary depending on your system. It indicates a bug in CVS, which can be handled as described in [cvs: Dealing with bugs in CVS or this manual#BUGS Dealing with bugs in CVS or this manual].

    cvs command: authorization failed: server host rejected access

    This is a generic response when trying to connect to a pserver server which chooses not to provide a specific reason for denying authorization. Check that the username and password specified are correct and that the CVSROOT specified is allowed by ‘--allow-root’ in ‘inetd.conf’. See [cvs: The Repository#Password-authenticated Direct connection with password authentication].

    cvs command: conflict: removed file was modified by second party

    This message indicates that you removed a file, and someone else modified it. To resolve the conflict, first run ‘cvs add file’. If desired, look at the other party’s modification to decide whether you still want to remove it. If you don’t want to remove it, stop here. If you do want to remove it, proceed with ‘cvs remove file’ and commit your removal.

    cannot change permissions on temporary directory
     
    Operation not permitted
    

    This message has been happening in a non-reproducible, occasional way when we run the client/server testsuite, both on Red Hat Linux 3.0.3 and 4.1. We haven’t been able to figure out what causes it, nor is it known whether it is specific to linux (or even to this particular machine!). If the problem does occur on other unices, ‘Operation not permitted’ would be likely to read ‘Not owner’ or whatever the system in question uses for the unix EPERM error. If you have any information to add, please let us know as described in [cvs: Dealing with bugs in CVS or this manual#BUGS Dealing with bugs in CVS or this manual]. If you experience this error while using CVS, retrying the operation which produced it should work fine.

    cvs [server aborted]: Cannot check out files into the repository itself

    The obvious cause for this message (especially for non-client/server CVS) is that the CVS root is, for example, ‘/usr/local/cvsroot’ and you try to check out files when you are in a subdirectory, such as ‘/usr/local/cvsroot/test’. However, there is a more subtle cause, which is that the temporary directory on the server is set to a subdirectory of the root (which is also not allowed). If this is the problem, set the temporary directory to somewhere else, for example ‘/var/tmp’; see TMPDIR in [cvs: All environment variables which affect CVS#Environment-variables All environment variables which affect CVS], for how to set the temporary directory.

    cannot commit files as 'root'

    See ‘'root' is not allowed to commit files’.

    cannot open CVS/Entries for reading: No such file or directory

    This generally indicates a CVS internal error, and can be handled as with other CVS bugs (see section [cvs: Dealing with bugs in CVS or this manual#BUGS Dealing with bugs in CVS or this manual]). Usually there is a workaround—the exact nature of which would depend on the situation but which hopefully could be figured out.

    cvs [init aborted]: cannot open CVS/Root: No such file or directory

    This message is harmless. Provided it is not accompanied by other errors, the operation has completed successfully. This message should not occur with current versions of CVS, but it is documented here for the benefit of CVS 1.9 and older.

    cvs server: cannot open /root/.cvsignore: Permission denied
    cvs [server aborted]: can't chdir(/root): Permission denied

    See [[#Connection|Trouble making a connection to a CVS server]].

    cvs [checkout aborted]: cannot rename file file to CVS/,,file: Invalid argument

    This message has been reported as intermittently happening with CVS 1.9 on Solaris 2.5. The cause is unknown; if you know more about what causes it, let us know as described in [cvs: Dealing with bugs in CVS or this manual#BUGS Dealing with bugs in CVS or this manual].

    cvs [command aborted]: cannot start server via rcmd

    This, unfortunately, is a rather nonspecific error message which CVS 1.9 will print if you are running the CVS client and it is having trouble connecting to the server. Current versions of CVS should print a much more specific error message. If you get this message when you didn’t mean to run the client at all, you probably forgot to specify :local:, as described in [cvs: The Repository#Repository The Repository].

    ci: file,v: bad diff output line: Binary files - and /tmp/T2a22651 differ

    CVS 1.9 and older will print this message when trying to check in a binary file if RCS is not correctly installed. Re-read the instructions that came with your RCS distribution and the INSTALL file in the CVS distribution. Alternately, upgrade to a current version of CVS, which checks in files itself rather than via RCS.

    cvs checkout: could not check out file

    With CVS 1.9, this can mean that the co program (part of RCS) returned a failure. It should be preceded by another error message, however it has been observed without another error message and the cause is not well-understood. With the current version of CVS, which does not run co, if this message occurs without another error message, it is definitely a CVS bug (see section [cvs: Dealing with bugs in CVS or this manual#BUGS Dealing with bugs in CVS or this manual]).

    cvs [login aborted]: could not find out home directory

    This means that you need to set the environment variables that CVS uses to locate your home directory. See the discussion of HOME, HOMEDRIVE, and HOMEPATH in [cvs: All environment variables which affect CVS#Environment-variables All environment variables which affect CVS].

    cvs update: could not merge revision rev of file: No such file or directory

    CVS 1.9 and older will print this message if there was a problem finding the rcsmerge program. Make sure that it is in your PATH, or upgrade to a current version of CVS, which does not require an external rcsmerge program.

    cvs [update aborted]: could not patch file: No such file or directory

    This means that there was a problem finding the patch program. Make sure that it is in your PATH. Note that despite appearances the message is not referring to whether it can find file. If both the client and the server are running a current version of CVS, then there is no need for an external patch program and you should not see this message. But if either client or server is running CVS 1.9, then you need patch.

    cvs update: could not patch file; will refetch

    This means that for whatever reason the client was unable to apply a patch that the server sent. The message is nothing to be concerned about, because inability to apply the patch only slows things down and has no effect on what CVS does.

    dying gasps from server unexpected

    There is a known bug in the server for CVS 1.9.18 and older which can cause this. For me, this was reproducible if I used the ‘-t’ global option. It was fixed by Andy Piper’s 14 Nov 1997 change to src/filesubr.c, if anyone is curious. If you see the message, you probably can just retry the operation which failed, or if you have discovered information concerning its cause, please let us know as described in [cvs: Dealing with bugs in CVS or this manual#BUGS Dealing with bugs in CVS or this manual].

    end of file from server (consult above messages if any)

    The most common cause for this message is if you are using an external rsh program and it exited with an error. In this case the rsh program should have printed a message, which will appear before the above message. For more information on setting up a CVS client and server, see [cvs: The Repository#Remote-repositories Remote repositories].

    cvs [update aborted]: EOF in key in RCS file file,v
    cvs [checkout aborted]: EOF while looking for end of string in RCS file file,v

    This means that there is a syntax error in the given RCS file. Note that this might be true even if RCS can read the file OK; CVS does more error checking of errors in the RCS file. That is why you may see this message when upgrading from CVS 1.9 to CVS 1.10. The likely cause for the original corruption is hardware, the operating system, or the like. Of course, if you find a case in which CVS seems to corrupting the file, by all means report it, (see section [cvs: Dealing with bugs in CVS or this manual#BUGS Dealing with bugs in CVS or this manual]). There are quite a few variations of this error message, depending on exactly where in the RCS file CVS finds the syntax error.

    cvs commit: Executing 'mkmodules'

    This means that your repository is set up for a version of CVS prior to CVS 1.8. When using CVS 1.8 or later, the above message will be preceded by

     
    cvs commit: Rebuilding administrative file database
    

    If you see both messages, the database is being rebuilt twice, which is unnecessary but harmless. If you wish to avoid the duplication, and you have no versions of CVS 1.7 or earlier in use, remove -i mkmodules every place it appears in your modules file. For more information on the modules file, see [cvs: Reference manual for Administrative files#modules The modules file].

    missing author

    Typically this can happen if you created an RCS file with your username set to empty. CVS will, bogusly, create an illegal RCS file with no value for the author field. The solution is to make sure your username is set to a non-empty value and re-create the RCS file.

    cvs [checkout aborted]: no such tag tag

    This message means that CVS isn’t familiar with the tag tag. Usually this means that you have mistyped a tag name; however there are (relatively obscure) cases in which CVS will require you to try a few other CVS commands involving that tag, before you find one which will cause CVS to update the ‘val-tags’ file; see discussion of val-tags in [cvs: The Repository#File-permissions File permissions]. You only need to worry about this once for a given tag; when a tag is listed in ‘val-tags’, it stays there. Note that using ‘-f’ to not require tag matches does not override this check; see [cvs: Guide to CVS commands#Common-options Common command options].

    *PANIC* administration files missing

    This typically means that there is a directory named CVS but it does not contain the administrative files which CVS puts in a CVS directory. If the problem is that you created a CVS directory via some mechanism other than CVS, then the answer is simple, use a name other than CVS. If not, it indicates a CVS bug (see section [cvs: Dealing with bugs in CVS or this manual#BUGS Dealing with bugs in CVS or this manual]).

    rcs error: Unknown option: -x,v/

    This message will be followed by a usage message for RCS. It means that you have an old version of RCS (probably supplied with your operating system), as well as an old version of CVS. CVS 1.9.18 and earlier only work with RCS version 5 and later; current versions of CVS do not run RCS programs.

    cvs [server aborted]: received broken pipe signal

    This message seems to be caused by a hard-to-track-down bug in CVS or the systems it runs on (we don’t know—we haven’t tracked it down yet!). It seems to happen only after a CVS command has completed, and you should be able to just ignore the message. However, if you have discovered information concerning its cause, please let us know as described in [cvs: Dealing with bugs in CVS or this manual#BUGS Dealing with bugs in CVS or this manual].

    'root' is not allowed to commit files

    When committing a permanent change, CVS makes a log entry of who committed the change. If you are committing the change logged in as "root" (not under "su" or other root-priv giving program), CVS cannot determine who is actually making the change. As such, by default, CVS disallows changes to be committed by users logged in as "root". (You can disable this option by passing the --enable-rootcommit option to ‘configure’ and recompiling CVS. On some systems this means editing the appropriate ‘config.h’ file before building CVS.)

    Too many arguments!

    This message is typically printed by the ‘log.pl’ script which is in the ‘contrib’ directory in the CVS source distribution. In some versions of CVS, ‘log.pl’ has been part of the default CVS installation. The ‘log.pl’ script gets called from the ‘loginfo’ administrative file. Check that the arguments passed in ‘loginfo’ match what your version of ‘log.pl’ expects. In particular, the ‘log.pl’ from CVS 1.3 and older expects the logfile as an argument whereas the ‘log.pl’ from CVS 1.5 and newer expects the logfile to be specified with a ‘-f’ option. Of course, if you don’t need ‘log.pl’ you can just comment it out of ‘loginfo’.

    cvs [update aborted]: unexpected EOF reading file,v

    See ‘EOF in key in RCS file’.

    cvs [login aborted]: unrecognized auth response from server

    This message typically means that the server is not set up properly. For example, if ‘inetd.conf’ points to a nonexistent cvs executable. To debug it further, find the log file which inetd writes (‘/var/log/messages’ or whatever inetd uses on your system). For details, see [[#Connection|Trouble making a connection to a CVS server]], and [cvs: The Repository#Password-authentication-server Setting up the server for password authentication].

    cvs commit: Up-to-date check failed for `file'

    This means that someone else has committed a change to that file since the last time that you did a cvs update. So before proceeding with your cvs commit you need to cvs update. CVS will merge the changes that you made and the changes that the other person made. If it does not detect any conflicts it will report ‘M file’ and you are ready to cvs commit. If it detects conflicts it will print a message saying so, will report ‘C file’, and you need to manually resolve the conflict. For more details on this process see [cvs: Multiple developers#Conflicts-example Conflicts example].

    Usage: diff3 [-exEX3 [-i | -m] [-L label1 -L label3]] file1 file2 file3
     
    Only one of [exEX3] allowed
    

    This indicates a problem with the installation of diff3 and rcsmerge. Specifically rcsmerge was compiled to look for GNU diff3, but it is finding unix diff3 instead. The exact text of the message will vary depending on the system. The simplest solution is to upgrade to a current version of CVS, which does not rely on external rcsmerge or diff3 programs.

    warning: unrecognized response `text' from cvs server

    If text contains a valid response (such as ‘ok’) followed by an extra carriage return character (on many systems this will cause the second part of the message to overwrite the first part), then it probably means that you are using the ‘:ext:’ access method with a version of rsh, such as most non-unix rsh versions, which does not by default provide a transparent data stream. In such cases you probably want to try ‘:server:’ instead of ‘:ext:’. If text is something else, this may signify a problem with your CVS server. Double-check your installation against the instructions for setting up the CVS server.

    cvs commit: [time] waiting for user's lock in directory

    This is a normal message, not an error. See [cvs: Multiple developers#Concurrency Several developers simultaneously attempting to run CVS], for more details.

    cvs commit: warning: editor session failed

    This means that the editor which CVS is using exits with a nonzero exit status. Some versions of vi will do this even when there was not a problem editing the file. If so, point the CVSEDITOR environment variable to a small script such as:

     
    #!/bin/sh
    vi $*
    exit 0
    

    |[[#Error-messages| < ]]| |[[#Other-problems| > ]]|   |[[#Troubleshooting| << ]]| |[[#Troubleshooting| Up ]]| |[cvs: Credits#Credits >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Trouble making a connection to a CVS server ===

    This section concerns what to do if you are having trouble making a connection to a CVS server. If you are running the CVS command line client running on Windows, first upgrade the client to CVS 1.9.12 or later. The error reporting in earlier versions provided much less information about what the problem was. If the client is non-Windows, CVS 1.9 should be fine.

    If the error messages are not sufficient to track down the problem, the next steps depend largely on which access method you are using.

    :ext:

    Try running the rsh program from the command line. For example: "rsh servername cvs -v" should print CVS version information. If this doesn’t work, you need to fix it before you can worry about CVS problems.

    :server:

    You don’t need a command line rsh program to use this access method, but if you have an rsh program around, it may be useful as a debugging tool. Follow the directions given for :ext:.

    :pserver:

    Errors along the lines of "connection refused" typically indicate that inetd isn’t even listening for connections on port 2401 whereas errors like "connection reset by peer", "received broken pipe signal", "recv() from server: EOF", or "end of file from server" typically indicate that inetd is listening for connections but is unable to start CVS (this is frequently caused by having an incorrect path in ‘inetd.conf’ or by firewall software rejecting the connection). "unrecognized auth response" errors are caused by a bad command line in ‘inetd.conf’, typically an invalid option or forgetting to put the ‘pserver’ command at the end of the line. Another less common problem is invisible control characters that your editor "helpfully" added without you noticing.

    One good debugging tool is to "telnet servername 2401". After connecting, send any text (for example "foo" followed by return). If CVS is working correctly, it will respond with

     
    cvs [pserver aborted]: bad auth protocol start: foo
    

    If instead you get:

     
    Usage: cvs [cvs-options] command [command-options-and-arguments]
    ...
    

    then you’re missing the ‘pserver’ command at the end of the line in ‘inetd.conf’; check to make sure that the entire command is on one line and that it’s complete.

    Likewise, if you get something like:

     
    Unknown command: `pserved'
    
    CVS commands are:
            add          Add a new file/directory to the repository
    ...
    

    then you’ve misspelled ‘pserver’ in some way. If it isn’t obvious, check for invisible control characters (particularly carriage returns) in ‘inetd.conf’.

    If it fails to work at all, then make sure inetd is working right. Change the invocation in ‘inetd.conf’ to run the echo program instead of cvs. For example:

     
    2401  stream  tcp  nowait  root /bin/echo echo hello
    

    After making that change and instructing inetd to re-read its configuration file, "telnet servername 2401" should show you the text hello and then the server should close the connection. If this doesn’t work, you need to fix it before you can worry about CVS problems.

    On AIX systems, the system will often have its own program trying to use port 2401. This is AIX’s problem in the sense that port 2401 is registered for use with CVS. I hear that there is an AIX patch available to address this problem.

    Another good debugging tool is the ‘-d’ (debugging) option to inetd. Consult your system documentation for more information.

    If you seem to be connecting but get errors like:

     
    cvs server: cannot open /root/.cvsignore: Permission denied
    cvs [server aborted]: can't chdir(/root): Permission denied
    

    then you probably haven’t specified ‘-f’ in ‘inetd.conf’. (In releases prior to CVS 1.11.1, this problem can be caused by your system setting the $HOME environment variable for programs being run by inetd. In this case, you can either have inetd run a shell script that unsets $HOME and then runs CVS, or you can use env to run CVS with a pristine environment.)

    If you can connect successfully for a while but then can’t, you’ve probably hit inetd’s rate limit. (If inetd receives too many requests for the same service in a short period of time, it assumes that something is wrong and temporarily disables the service.) Check your inetd documentation to find out how to adjust the rate limit (some versions of inetd have a single rate limit, others allow you to set the limit for each service separately.)


    |[[#Connection| < ]]| |[cvs: Credits#Credits > ]|   |[[#Troubleshooting| << ]]| |[[#Troubleshooting| Up ]]| |[cvs: Credits#Credits >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Other common problems ===

    Here is a list of problems which do not fit into the above categories. They are in no particular order.

    • On Windows, if there is a 30 second or so delay when you run a CVS command, it may mean that you have your home directory set to ‘C:/’, for example (see HOMEDRIVE and HOMEPATH in [cvs: All environment variables which affect CVS#Environment-variables All environment variables which affect CVS]). CVS expects the home directory to not end in a slash, for example ‘C:’ or ‘C:\cvs’.
    • If you are running CVS 1.9.18 or older, and cvs update finds a conflict and tries to merge, as described in [cvs: Multiple developers#Conflicts-example Conflicts example], but doesn’t tell you there were conflicts, then you may have an old version of RCS. The easiest solution probably is to upgrade to a current version of CVS, which does not rely on external RCS programs.

    |[[#Troubleshooting| << ]]| |[cvs: Credits#Credits >> ]|           |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    This document was generated by a tester on a sunny day using [http://www.nongnu.org/texi2html/ texi2html]. texi2html-1.82/test/manuals/res/ccvs_mediawiki/cvs: Guide to CVS commands0000644000175000017500000052524511264347121030066 0ustar flichtenheldflichtenheld
    |[cvs: Special Files#Special-Files < ]| |[[#Structure| > ]]|   |[cvs: Special Files#Special-Files << ]| |[[cvs#Top| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    == Guide to CVS commands ==

    This appendix describes the overall structure of CVS commands, and describes some commands in detail (others are described elsewhere; for a quick reference to CVS commands, see section [cvs: Quick reference to CVS commands#Invoking-CVS Quick reference to CVS commands]).


    |[[#CVS-commands| < ]]| |[[#Exit-status| > ]]|   |[[#CVS-commands| << ]]| |[[#CVS-commands| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Overall structure of CVS commands ===

    The overall format of all CVS commands is:

     
    cvs [ cvs_options ] cvs_command [ command_options ] [ command_args ]
    
    cvs

    The name of the CVS program.

    cvs_options

    Some options that affect all sub-commands of CVS. These are described below.

    cvs_command

    One of several different sub-commands. Some of the commands have aliases that can be used instead; those aliases are noted in the reference manual for that command. There are only two situations where you may omit ‘cvs_command’: ‘cvs -H’ elicits a list of available commands, and ‘cvs -v’ displays version information on CVS itself.

    command_options

    Options that are specific for the command.

    command_args

    Arguments to the commands.

    There is unfortunately some confusion between cvs_options and command_options. ‘-l’, when given as a cvs_option, only affects some of the commands. When it is given as a command_option is has a different meaning, and is accepted by more commands. In other words, do not take the above categorization too seriously. Look at the documentation instead.


    |[[#Structure| < ]]| |[[#g_t_007e_002f_002ecvsrc| > ]]|   |[[#CVS-commands| << ]]| |[[#CVS-commands| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === CVS’s exit status ===

    CVS can indicate to the calling environment whether it succeeded or failed by setting its exit status. The exact way of testing the exit status will vary from one operating system to another. For example in a unix shell script the ‘$?’ variable will be 0 if the last command returned a successful exit status, or greater than 0 if the exit status indicated failure.

    If CVS is successful, it returns a successful status; if there is an error, it prints an error message and returns a failure status. The one exception to this is the cvs diff command. It will return a successful status if it found no differences, or a failure status if there were differences or if there was an error. Because this behavior provides no good way to detect errors, in the future it is possible that cvs diff will be changed to behave like the other CVS commands.


    |[[#Exit-status| < ]]| |[[#Global-options| > ]]|   |[[#CVS-commands| << ]]| |[[#CVS-commands| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Default options and the ~/.cvsrc file ===

    There are some command_options that are used so often that you might have set up an alias or some other means to make sure you always specify that option. One example (the one that drove the implementation of the ‘.cvsrc’ support, actually) is that many people find the default output of the ‘diff’ command to be very hard to read, and that either context diffs or unidiffs are much easier to understand.

    The ‘~/.cvsrc’ file is a way that you can add default options to cvs_commands within cvs, instead of relying on aliases or other shell scripts.

    The format of the ‘~/.cvsrc’ file is simple. The file is searched for a line that begins with the same name as the cvs_command being executed. If a match is found, then the remainder of the line is split up (at whitespace characters) into separate options and added to the command arguments before any options from the command line.

    If a command has two names (e.g., checkout and co), the official name, not necessarily the one used on the command line, will be used to match against the file. So if this is the contents of the user’s ‘~/.cvsrc’ file:

     
    log -N
    diff -uN
    rdiff -u
    update -Pd
    checkout -P
    release -d
    

    the command ‘cvs checkout foo’ would have the ‘-P’ option added to the arguments, as well as ‘cvs co foo’.

    With the example file above, the output from ‘cvs diff foobar’ will be in unidiff format. ‘cvs diff -c foobar’ will provide context diffs, as usual. Getting "old" format diffs would be slightly more complicated, because diff doesn’t have an option to specify use of the "old" format, so you would need ‘cvs -f diff foobar’.

    In place of the command name you can use cvs to specify global options (see section [[#Global-options|Global options]]). For example the following line in ‘.cvsrc

     
    cvs -z6
    

    causes CVS to use compression level 6.


    |[[#g_t_007e_002f_002ecvsrc| < ]]| |[[#Common-options| > ]]|   |[[#CVS-commands| << ]]| |[[#CVS-commands| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Global options ===

    The available ‘cvs_options’ (that are given to the left of ‘cvs_command’) are:

    --allow-root=rootdir

    Specify legal CVSROOT directory. See [cvs: The Repository#Password-authentication-server Setting up the server for password authentication].

    -a

    Authenticate all communication between the client and the server. Only has an effect on the CVS client. As of this writing, this is only implemented when using a GSSAPI connection (see section [cvs: The Repository#GSSAPI-authenticated Direct connection with GSSAPI]). Authentication prevents certain sorts of attacks involving hijacking the active TCP connection. Enabling authentication does not enable encryption.

    -b bindir

    In CVS 1.9.18 and older, this specified that RCS programs are in the bindir directory. Current versions of CVS do not run RCS programs; for compatibility this option is accepted, but it does nothing.

    -T tempdir

    Use tempdir as the directory where temporary files are located. Overrides the setting of the $TMPDIR environment variable and any precompiled directory. This parameter should be specified as an absolute pathname. (When running client/server, ‘-T’ affects only the local process; specifying ‘-T’ for the client has no effect on the server and vice versa.)

    -d cvs_root_directory

    Use cvs_root_directory as the root directory pathname of the repository. Overrides the setting of the $CVSROOT environment variable. See section [cvs: The Repository#Repository The Repository].

    -e editor

    Use editor to enter revision log information. Overrides the setting of the $CVSEDITOR and $EDITOR environment variables. For more information, see [cvs: Overview#Committing-your-changes Committing your changes].

    -f

    Do not read the ‘~/.cvsrc’ file. This option is most often used because of the non-orthogonality of the CVS option set. For example, the ‘cvs log’ option ‘-N’ (turn off display of tag names) does not have a corresponding option to turn the display on. So if you have ‘-N’ in the ‘~/.cvsrc’ entry for ‘log’, you may need to use ‘-f’ to show the tag names.

    -H
    --help

    Display usage information about the specified ‘cvs_command’ (but do not actually execute the command). If you don’t specify a command name, ‘cvs -H’ displays overall help for CVS, including a list of other help options.

    -l

    Do not log the ‘cvs_command’ in the command history (but execute it anyway). See section [[#history|history—Show status of files and users]], for information on command history.

    -R

    Turns on read-only repository mode. This allows one to check out from a read-only repository, such as within an anoncvs server, or from a CDROM repository.

    Same effect as if the CVSREADONLYFS environment variable is set. Using ‘-R’ can also considerably speed up checkout’s over NFS.

    -n

    Do not change any files. Attempt to execute the ‘cvs_command’, but only to issue reports; do not remove, update, or merge any existing files, or create any new files.

    Note that CVS will not necessarily produce exactly the same output as without ‘-n’. In some cases the output will be the same, but in other cases CVS will skip some of the processing that would have been required to produce the exact same output.

    -Q

    Cause the command to be really quiet; the command will only generate output for serious problems.

    -q

    Cause the command to be somewhat quiet; informational messages, such as reports of recursion through subdirectories, are suppressed.

    -r

    Make new working files read-only. Same effect as if the $CVSREAD environment variable is set (see section [cvs: All environment variables which affect CVS#Environment-variables All environment variables which affect CVS]). The default is to make working files writable, unless watches are on (see section [cvs: Multiple developers#Watches Mechanisms to track who is editing files]).

    -s variable=value

    Set a user variable (see section [cvs: Reference manual for Administrative files#Variables Expansions in administrative files]).

    -t

    Trace program execution; display messages showing the steps of CVS activity. Particularly useful with ‘-n’ to explore the potential impact of an unfamiliar command.

    -v
    --version

    Display version and copyright information for CVS.

    -w

    Make new working files read-write. Overrides the setting of the $CVSREAD environment variable. Files are created read-write by default, unless $CVSREAD is set or ‘-r’ is given.

    -x

    Encrypt all communication between the client and the server. Only has an effect on the CVS client. As of this writing, this is only implemented when using a GSSAPI connection (see section [cvs: The Repository#GSSAPI-authenticated Direct connection with GSSAPI]) or a Kerberos connection (see section [cvs: The Repository#Kerberos-authenticated Direct connection with kerberos]). Enabling encryption implies that message traffic is also authenticated. Encryption support is not available by default; it must be enabled using a special configure option, ‘--enable-encryption’, when you build CVS.

    -z gzip-level

    Set the compression level. Valid levels are 1 (high speed, low compression) to 9 (low speed, high compression), or 0 to disable compression (the default). Only has an effect on the CVS client.


    |[[#Global-options| < ]]| |[[#admin| > ]]|   |[[#CVS-commands| << ]]| |[[#CVS-commands| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Common command options ===

    This section describes the ‘command_options’ that are available across several CVS commands. These options are always given to the right of ‘cvs_command’. Not all commands support all of these options; each option is only supported for commands where it makes sense. However, when a command has one of these options you can almost always count on the same behavior of the option as in other commands. (Other command options, which are listed with the individual commands, may have different behavior from one CVS command to the other).

    Note: the ‘history’ command is an exception; it supports many options that conflict even with these standard options.

    -D date_spec

    Use the most recent revision no later than date_spec. date_spec is a single argument, a date description specifying a date in the past.

    The specification is sticky when you use it to make a private copy of a source file; that is, when you get a working file using ‘-D’, CVS records the date you specified, so that further updates in the same directory will use the same date (for more information on sticky tags/dates, see section [cvs: Revisions#Sticky-tags Sticky tags]).

    -D’ is available with the annotate, checkout, diff, export, history, rdiff, rtag, tag, and update commands. (The history command uses this option in a slightly different way; see section [[#history-options|history options]]).

    A wide variety of date formats are supported by CVS. The most standard ones are ISO8601 (from the International Standards Organization) and the Internet e-mail standard (specified in RFC822 as amended by RFC1123).

    ISO8601 dates have many variants but a few examples are:

     
    1972-09-24
    1972-09-24 20:05
    

    There are a lot more ISO8601 date formats, and CVS accepts many of them, but you probably don’t want to hear the whole long story :-).

    In addition to the dates allowed in Internet e-mail itself, CVS also allows some of the fields to be omitted. For example:

     
    24 Sep 1972 20:05
    24 Sep
    

    The date is interpreted as being in the local timezone, unless a specific timezone is specified.

    These two date formats are preferred. However, CVS currently accepts a wide variety of other date formats. They are intentionally not documented here in any detail, and future versions of CVS might not accept all of them.

    One such format is month/day/year. This may confuse people who are accustomed to having the month and day in the other order; ‘1/4/96’ is January 4, not April 1.

    Remember to quote the argument to the ‘-D’ flag so that your shell doesn’t interpret spaces as argument separators. A command using the ‘-D’ flag can look like this:

     
    $ cvs diff -D "1 hour ago" cvs.texinfo
    
    -f

    When you specify a particular date or tag to CVS commands, they normally ignore files that do not contain the tag (or did not exist prior to the date) that you specified. Use the ‘-f’ option if you want files retrieved even when there is no match for the tag or date. (The most recent revision of the file will be used).

    Note that even with ‘-f’, a tag that you specify must exist (that is, in some file, not necessary in every file). This is so that CVS will continue to give an error if you mistype a tag name.

    -f’ is available with these commands: annotate, checkout, export, rdiff, rtag, and update.

    WARNING: The commit and remove commands also have a ‘-f’ option, but it has a different behavior for those commands. See [[#commit-options|commit options]], and [cvs: Adding, removing, and renaming files and directories#Removing-files Removing files].

    -k kflag

    Override the default processing of RCS keywords other than ‘-kb’. See section [cvs: Keyword substitution#Keyword-substitution Keyword substitution], for the meaning of kflag. Used with the checkout and update commands, your kflag specification is sticky; that is, when you use this option with a checkout or update command, CVS associates your selected kflag with any files it operates on, and continues to use that kflag with future commands on the same files until you specify otherwise.

    The ‘-k’ option is available with the add, checkout, diff, export, import and update commands.

    WARNING: Prior to CVS version 1.12.2, the ‘-k’ flag overrode the ‘-kb’ indication for a binary file. This could sometimes corrupt binary files. See section [cvs: Branching and merging#Merging-and-keywords Merging and keywords], for more.

    -l

    Local; run only in current working directory, rather than recursing through subdirectories.

    Available with the following commands: annotate, checkout, commit, diff, edit, editors, export, log, rdiff, remove, rtag, status, tag, unedit, update, watch, and watchers.

    -m message

    Use message as log information, instead of invoking an editor.

    Available with the following commands: add, commit and import.

    -n

    Do not run any tag program. (A program can be specified to run in the modules database (see section [cvs: Reference manual for Administrative files#modules The modules file]); this option bypasses it).

    Note: this is not the same as the ‘cvs -n’ program option, which you can specify to the left of a cvs command!

    Available with the checkout, commit, export, and rtag commands.

    -P

    Prune empty directories. See [cvs: Adding, removing, and renaming files and directories#Removing-directories Removing directories].

    -p

    Pipe the files retrieved from the repository to standard output, rather than writing them in the current directory. Available with the checkout and update commands.

    -R

    Process directories recursively. This is on by default.

    Available with the following commands: annotate, checkout, commit, diff, edit, editors, export, rdiff, remove, rtag, status, tag, unedit, update, watch, and watchers.

    -r tag

    Use the revision specified by the tag argument instead of the default head revision. As well as arbitrary tags defined with the tag or rtag command, two special tags are always available: ‘HEAD’ refers to the most recent version available in the repository, and ‘BASE’ refers to the revision you last checked out into the current working directory.

    The tag specification is sticky when you use this with checkout or update to make your own copy of a file: CVS remembers the tag and continues to use it on future update commands, until you specify otherwise (for more information on sticky tags/dates, see section [cvs: Revisions#Sticky-tags Sticky tags]).

    The tag can be either a symbolic or numeric tag, as described in [cvs: Revisions#Tags Tags–Symbolic revisions], or the name of a branch, as described in [cvs: Branching and merging#Branching-and-merging Branching and merging].

    Specifying the ‘-q’ global option along with the ‘-r’ command option is often useful, to suppress the warning messages when the RCS file does not contain the specified tag.

    Note: this is not the same as the overall ‘cvs -r’ option, which you can specify to the left of a CVS command!

    -r’ is available with the checkout, commit, diff, history, export, rdiff, rtag, and update commands.

    -W

    Specify file names that should be filtered. You can use this option repeatedly. The spec can be a file name pattern of the same type that you can specify in the ‘.cvswrappers’ file. Available with the following commands: import, and update.


    |[[#Common-options| < ]]| |[[#admin-options| > ]]|   |[[#CVS-commands| << ]]| |[[#CVS-commands| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === admin—Administration ===
    • Requires: repository, working directory.
    • Changes: repository.
    • Synonym: rcs

    This is the CVS interface to assorted administrative facilities. Some of them have questionable usefulness for CVS but exist for historical purposes. Some of the questionable options are likely to disappear in the future. This command does work recursively, so extreme care should be used.

    On unix, if there is a group named cvsadmin, only members of that group can run cvs admin commands, except for those specified using the UserAdminOptions configuration option in the ‘CVSROOT/config’ file. Options specified using UserAdminOptions can be run by any user. See [cvs: Reference manual for Administrative files#config The CVSROOT/config configuration file] for more on UserAdminOptions.

    The cvsadmin group should exist on the server, or any system running the non-client/server CVS. To disallow cvs admin for all users, create a group with no users in it. On NT, the cvsadmin feature does not exist and all users can run cvs admin.


    |[[#admin| < ]]| |[[#checkout| > ]]|   |[[#CVS-commands| << ]]| |[[#admin| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== admin options ====

    Some of these options have questionable usefulness for CVS but exist for historical purposes. Some even make it impossible to use CVS until you undo the effect!

    -Aoldfile

    Might not work together with CVS. Append the access list of oldfile to the access list of the RCS file.

    -alogins

    Might not work together with CVS. Append the login names appearing in the comma-separated list logins to the access list of the RCS file.

    -b[rev]

    Set the default branch to rev. In CVS, you normally do not manipulate default branches; sticky tags (see section [cvs: Revisions#Sticky-tags Sticky tags]) are a better way to decide which branch you want to work on. There is one reason to run cvs admin -b: to revert to the vendor’s version when using vendor branches (see section [cvs: Tracking third-party sources#Reverting-local-changes Reverting to the latest vendor release]). There can be no space between ‘-b’ and its argument.

    -cstring

    Sets the comment leader to string. The comment leader is not used by current versions of CVS or RCS 5.7. Therefore, you can almost surely not worry about it. See section [cvs: Keyword substitution#Keyword-substitution Keyword substitution].

    -e[logins]

    Might not work together with CVS. Erase the login names appearing in the comma-separated list logins from the access list of the RCS file. If logins is omitted, erase the entire access list. There can be no space between ‘-e’ and its argument.

    -I

    Run interactively, even if the standard input is not a terminal. This option does not work with the client/server CVS and is likely to disappear in a future release of CVS.

    -i

    Useless with CVS. This creates and initializes a new RCS file, without depositing a revision. With CVS, add files with the cvs add command (see section [cvs: Adding, removing, and renaming files and directories#Adding-files Adding files to a directory]).

    -ksubst

    Set the default keyword substitution to subst. See section [cvs: Keyword substitution#Keyword-substitution Keyword substitution]. Giving an explicit ‘-k’ option to cvs update, cvs export, or cvs checkout overrides this default.

    -l[rev]

    Lock the revision with number rev. If a branch is given, lock the latest revision on that branch. If rev is omitted, lock the latest revision on the default branch. There can be no space between ‘-l’ and its argument.

    This can be used in conjunction with the ‘rcslock.pl’ script in the ‘contrib’ directory of the CVS source distribution to provide reserved checkouts (where only one user can be editing a given file at a time). See the comments in that file for details (and see the ‘README’ file in that directory for disclaimers about the unsupported nature of contrib). According to comments in that file, locking must set to strict (which is the default).

    -L

    Set locking to strict. Strict locking means that the owner of an RCS file is not exempt from locking for checkin. For use with CVS, strict locking must be set; see the discussion under the ‘-l’ option above.

    -mrev:msg

    Replace the log message of revision rev with msg.

    -Nname[:[rev]]

    Act like ‘-n’, except override any previous assignment of name. For use with magic branches, see [cvs: Branching and merging#Magic-branch-numbers Magic branch numbers].

    -nname[:[rev]]

    Associate the symbolic name name with the branch or revision rev. It is normally better to use ‘cvs tag’ or ‘cvs rtag’ instead. Delete the symbolic name if both ‘:’ and rev are omitted; otherwise, print an error message if name is already associated with another number. If rev is symbolic, it is expanded before association. A rev consisting of a branch number followed by a ‘.’ stands for the current latest revision in the branch. A ‘:’ with an empty rev stands for the current latest revision on the default branch, normally the trunk. For example, ‘cvs admin -nname:’ associates name with the current latest revision of all the RCS files; this contrasts with ‘cvs admin -nname:$’ which associates name with the revision numbers extracted from keyword strings in the corresponding working files.

    -orange

    Deletes (outdates) the revisions given by range.

    Note that this command can be quite dangerous unless you know exactly what you are doing (for example see the warnings below about how the rev1:rev2 syntax is confusing).

    If you are short on disc this option might help you. But think twice before using it—there is no way short of restoring the latest backup to undo this command! If you delete different revisions than you planned, either due to carelessness or (heaven forbid) a CVS bug, there is no opportunity to correct the error before the revisions are deleted. It probably would be a good idea to experiment on a copy of the repository first.

    Specify range in one of the following ways:

    rev1::rev2

    Collapse all revisions between rev1 and rev2, so that CVS only stores the differences associated with going from rev1 to rev2, not intermediate steps. For example, after ‘-o 1.3::1.5’ one can retrieve revision 1.3, revision 1.5, or the differences to get from 1.3 to 1.5, but not the revision 1.4, or the differences between 1.3 and 1.4. Other examples: ‘-o 1.3::1.4’ and ‘-o 1.3::1.3’ have no effect, because there are no intermediate revisions to remove.

    ::rev

    Collapse revisions between the beginning of the branch containing rev and rev itself. The branchpoint and rev are left intact. For example, ‘-o ::1.3.2.6’ deletes revision 1.3.2.1, revision 1.3.2.5, and everything in between, but leaves 1.3 and 1.3.2.6 intact.

    rev::

    Collapse revisions between rev and the end of the branch containing rev. Revision rev is left intact but the head revision is deleted.

    rev

    Delete the revision rev. For example, ‘-o 1.3’ is equivalent to ‘-o 1.2::1.4’.

    rev1:rev2

    Delete the revisions from rev1 to rev2, inclusive, on the same branch. One will not be able to retrieve rev1 or rev2 or any of the revisions in between. For example, the command ‘cvs admin -oR_1_01:R_1_02 .’ is rarely useful. It means to delete revisions up to, and including, the tag R_1_02. But beware! If there are files that have not changed between R_1_02 and R_1_03 the file will have the same numerical revision number assigned to the tags R_1_02 and R_1_03. So not only will it be impossible to retrieve R_1_02; R_1_03 will also have to be restored from the tapes! In most cases you want to specify rev1::rev2 instead.

    :rev

    Delete revisions from the beginning of the branch containing rev up to and including rev.

    rev:

    Delete revisions from revision rev, including rev itself, to the end of the branch containing rev.

    None of the revisions to be deleted may have branches or locks.

    If any of the revisions to be deleted have symbolic names, and one specifies one of the ‘::’ syntaxes, then CVS will give an error and not delete any revisions. If you really want to delete both the symbolic names and the revisions, first delete the symbolic names with cvs tag -d, then run cvs admin -o. If one specifies the non-‘::’ syntaxes, then CVS will delete the revisions but leave the symbolic names pointing to nonexistent revisions. This behavior is preserved for compatibility with previous versions of CVS, but because it isn’t very useful, in the future it may change to be like the ‘::’ case.

    Due to the way CVS handles branches rev cannot be specified symbolically if it is a branch. See section [cvs: Branching and merging#Magic-branch-numbers Magic branch numbers], for an explanation.

    Make sure that no-one has checked out a copy of the revision you outdate. Strange things will happen if he starts to edit it and tries to check it back in. For this reason, this option is not a good way to take back a bogus commit; commit a new revision undoing the bogus change instead (see section [cvs: Branching and merging#Merging-two-revisions Merging differences between any two revisions]).

    -q

    Run quietly; do not print diagnostics.

    -sstate[:rev]

    Useful with CVS. Set the state attribute of the revision rev to state. If rev is a branch number, assume the latest revision on that branch. If rev is omitted, assume the latest revision on the default branch. Any identifier is acceptable for state. A useful set of states is ‘Exp’ (for experimental), ‘Stab’ (for stable), and ‘Rel’ (for released). By default, the state of a new revision is set to ‘Exp’ when it is created. The state is visible in the output from cvs log (see section [[#log|log—Print out log information for files]]), and in the ‘$Log$’ and ‘$State$’ keywords (see section [cvs: Keyword substitution#Keyword-substitution Keyword substitution]). Note that CVS uses the dead state for its own purposes; to take a file to or from the dead state use commands like cvs remove and cvs add, not cvs admin -s.

    -t[file]

    Useful with CVS. Write descriptive text from the contents of the named file into the RCS file, deleting the existing text. The file pathname may not begin with ‘-’. The descriptive text can be seen in the output from ‘cvs log’ (see section [[#log|log—Print out log information for files]]). There can be no space between ‘-t’ and its argument.

    If file is omitted, obtain the text from standard input, terminated by end-of-file or by a line containing ‘.’ by itself. Prompt for the text if interaction is possible; see ‘-I’.

    -t-string

    Similar to ‘-tfile’. Write descriptive text from the string into the RCS file, deleting the existing text. There can be no space between ‘-t’ and its argument.

    -U

    Set locking to non-strict. Non-strict locking means that the owner of a file need not lock a revision for checkin. For use with CVS, strict locking must be set; see the discussion under the ‘-l’ option above.

    -u[rev]

    See the option ‘-l’ above, for a discussion of using this option with CVS. Unlock the revision with number rev. If a branch is given, unlock the latest revision on that branch. If rev is omitted, remove the latest lock held by the caller. Normally, only the locker of a revision may unlock it; somebody else unlocking a revision breaks the lock. This causes the original locker to be sent a commit notification (see section [cvs: Multiple developers#Getting-Notified Telling CVS to notify you]). There can be no space between ‘-u’ and its argument.

    -Vn

    In previous versions of CVS, this option meant to write an RCS file which would be acceptable to RCS version n, but it is now obsolete and specifying it will produce an error.

    -xsuffixes

    In previous versions of CVS, this was documented as a way of specifying the names of the RCS files. However, CVS has always required that the RCS files used by CVS end in ‘,v’, so this option has never done anything useful.


    |[[#admin-options| < ]]| |[[#checkout-options| > ]]|   |[[#CVS-commands| << ]]| |[[#CVS-commands| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === checkout—Check out sources for editing ===
    • Synopsis: checkout [options] modules…
    • Requires: repository.
    • Changes: working directory.
    • Synonyms: co, get

    Create or update a working directory containing copies of the source files specified by modules. You must execute checkout before using most of the other CVS commands, since most of them operate on your working directory.

    The modules are either symbolic names for some collection of source directories and files, or paths to directories or files in the repository. The symbolic names are defined in the ‘modules’ file. See section [cvs: Reference manual for Administrative files#modules The modules file].

    Depending on the modules you specify, checkout may recursively create directories and populate them with the appropriate source files. You can then edit these source files at any time (regardless of whether other software developers are editing their own copies of the sources); update them to include new changes applied by others to the source repository; or commit your work as a permanent change to the source repository.

    Note that checkout is used to create directories. The top-level directory created is always added to the directory where checkout is invoked, and usually has the same name as the specified module. In the case of a module alias, the created sub-directory may have a different name, but you can be sure that it will be a sub-directory, and that checkout will show the relative path leading to each file as it is extracted into your private work area (unless you specify the ‘-Q’ global option).

    The files created by checkout are created read-write, unless the ‘-r’ option to CVS (see section [[#Global-options|Global options]]) is specified, the CVSREAD environment variable is specified (see section [cvs: All environment variables which affect CVS#Environment-variables All environment variables which affect CVS]), or a watch is in effect for that file (see section [cvs: Multiple developers#Watches Mechanisms to track who is editing files]).

    Note that running checkout on a directory that was already built by a prior checkout is also permitted. This is similar to specifying the ‘-d’ option to the update command in the sense that new directories that have been created in the repository will appear in your work area. However, checkout takes a module name whereas update takes a directory name. Also to use checkout this way it must be run from the top level directory (where you originally ran checkout from), so before you run checkout to update an existing directory, don’t forget to change your directory to the top level directory.

    For the output produced by the checkout command see [[#update-output|update output]].


    |[[#checkout| < ]]| |[[#checkout-examples| > ]]|   |[[#CVS-commands| << ]]| |[[#checkout| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== checkout options ====

    These standard options are supported by checkout (see section [[#Common-options|Common command options]], for a complete description of them):

    -D date

    Use the most recent revision no later than date. This option is sticky, and implies ‘-P’. See [cvs: Revisions#Sticky-tags Sticky tags], for more information on sticky tags/dates.

    -f

    Only useful with the ‘-D date’ or ‘-r tag’ flags. If no matching revision is found, retrieve the most recent revision (instead of ignoring the file).

    -k kflag

    Process keywords according to kflag. See [cvs: Keyword substitution#Keyword-substitution Keyword substitution]. This option is sticky; future updates of this file in this working directory will use the same kflag. The status command can be viewed to see the sticky options. See [cvs: Quick reference to CVS commands#Invoking-CVS Quick reference to CVS commands], for more information on the status command.

    -l

    Local; run only in current working directory.

    -n

    Do not run any checkout program (as specified with the ‘-o’ option in the modules file; see section [cvs: Reference manual for Administrative files#modules The modules file]).

    -P

    Prune empty directories. See [cvs: Adding, removing, and renaming files and directories#Moving-directories Moving and renaming directories].

    -p

    Pipe files to the standard output.

    -R

    Checkout directories recursively. This option is on by default.

    -r tag

    Use revision tag. This option is sticky, and implies ‘-P’. See [cvs: Revisions#Sticky-tags Sticky tags], for more information on sticky tags/dates.

    In addition to those, you can use these special command options with checkout:

    -A

    Reset any sticky tags, dates, or ‘-k’ options. See [cvs: Revisions#Sticky-tags Sticky tags], for more information on sticky tags/dates.

    -c

    Copy the module file, sorted, to the standard output, instead of creating or modifying any files or directories in your working directory.

    -d dir

    Create a directory called dir for the working files, instead of using the module name. In general, using this flag is equivalent to using ‘mkdir dir; cd dir’ followed by the checkout command without the ‘-d’ flag.

    There is an important exception, however. It is very convenient when checking out a single item to have the output appear in a directory that doesn’t contain empty intermediate directories. In this case only, CVS tries to “shorten” pathnames to avoid those empty directories.

    For example, given a module ‘foo’ that contains the file ‘bar.c’, the command ‘cvs co -d dir foo’ will create directory ‘dir’ and place ‘bar.c’ inside. Similarly, given a module ‘bar’ which has subdirectory ‘baz’ wherein there is a file ‘quux.c’, the command ‘cvs co -d dir bar/baz’ will create directory ‘dir’ and place ‘quux.c’ inside.

    Using the ‘-N’ flag will defeat this behavior. Given the same module definitions above, ‘cvs co -N -d dir foo’ will create directories ‘dir/foo’ and place ‘bar.c’ inside, while ‘cvs co -N -d dir bar/baz’ will create directories ‘dir/bar/baz’ and place ‘quux.c’ inside.

    -j tag

    With two ‘-j’ options, merge changes from the revision specified with the first ‘-j’ option to the revision specified with the second ‘j’ option, into the working directory.

    With one ‘-j’ option, merge changes from the ancestor revision to the revision specified with the ‘-j’ option, into the working directory. The ancestor revision is the common ancestor of the revision which the working directory is based on, and the revision specified in the ‘-j’ option.

    In addition, each -j option can contain an optional date specification which, when used with branches, can limit the chosen revision to one within a specific date. An optional date is specified by adding a colon (:) to the tag: ‘-jSymbolic_Tag:Date_Specifier’.

    See section [cvs: Branching and merging#Branching-and-merging Branching and merging].

    -N

    Only useful together with ‘-d dir’. With this option, CVS will not “shorten” module paths in your working directory when you check out a single module. See the ‘-d’ flag for examples and a discussion.

    -s

    Like ‘-c’, but include the status of all modules, and sort it by the status string. See section [cvs: Reference manual for Administrative files#modules The modules file], for info about the ‘-s’ option that is used inside the modules file to set the module status.


    |[[#checkout-options| < ]]| |[[#commit| > ]]|   |[[#CVS-commands| << ]]| |[[#checkout| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== checkout examples ====

    Get a copy of the module ‘tc’:

     
    $ cvs checkout tc
    

    Get a copy of the module ‘tc’ as it looked one day ago:

     
    $ cvs checkout -D yesterday tc
    

    |[[#checkout-examples| < ]]| |[[#commit-options| > ]]|   |[[#CVS-commands| << ]]| |[[#CVS-commands| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === commit—Check files into the repository ===
    • Synopsis: commit [-lnRf] [-m ’log_message’ | -F file] [-r revision] [files…]
    • Requires: working directory, repository.
    • Changes: repository.
    • Synonym: ci

    Use commit when you want to incorporate changes from your working source files into the source repository.

    If you don’t specify particular files to commit, all of the files in your working current directory are examined. commit is careful to change in the repository only those files that you have really changed. By default (or if you explicitly specify the ‘-R’ option), files in subdirectories are also examined and committed if they have changed; you can use the ‘-l’ option to limit commit to the current directory only.

    commit verifies that the selected files are up to date with the current revisions in the source repository; it will notify you, and exit without committing, if any of the specified files must be made current first with update (see section [[#update|update—Bring work tree in sync with repository]]). commit does not call the update command for you, but rather leaves that for you to do when the time is right.

    When all is well, an editor is invoked to allow you to enter a log message that will be written to one or more logging programs (see section [cvs: Reference manual for Administrative files#modules The modules file], and see section [cvs: Reference manual for Administrative files#loginfo Loginfo]) and placed in the RCS file inside the repository. This log message can be retrieved with the log command; see [[#log|log—Print out log information for files]]. You can specify the log message on the command line with the ‘-m message’ option, and thus avoid the editor invocation, or use the ‘-F file’ option to specify that the argument file contains the log message.


    |[[#commit| < ]]| |[[#commit-examples| > ]]|   |[[#CVS-commands| << ]]| |[[#commit| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== commit options ====

    These standard options are supported by commit (see section [[#Common-options|Common command options]], for a complete description of them):

    -l

    Local; run only in current working directory.

    -R

    Commit directories recursively. This is on by default.

    -r revision

    Commit to revision. revision must be either a branch, or a revision on the main trunk that is higher than any existing revision number (see section [cvs: Revisions#Assigning-revisions Assigning revisions]). You cannot commit to a specific revision on a branch.

    commit also supports these options:

    -F file

    Read the log message from file, instead of invoking an editor.

    -f

    Note that this is not the standard behavior of the ‘-f’ option as defined in [[#Common-options|Common command options]].

    Force CVS to commit a new revision even if you haven’t made any changes to the file. If the current revision of file is 1.7, then the following two commands are equivalent:

     
    $ cvs commit -f file
    $ cvs commit -r 1.8 file
    

    The ‘-f’ option disables recursion (i.e., it implies ‘-l’). To force CVS to commit a new revision for all files in all subdirectories, you must use ‘-f -R’.

    -m message

    Use message as the log message, instead of invoking an editor.


    |[[#commit-options| < ]]| |[[#Committing-to-a-branch| > ]]|   |[[#CVS-commands| << ]]| |[[#commit| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== commit examples ====
    |[[#commit-examples| < ]]| |[[#Creating-the-branch-after-editing| > ]]|   |[[#CVS-commands| << ]]| |[[#commit-examples| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ===== Committing to a branch =====

    You can commit to a branch revision (one that has an even number of dots) with the ‘-r’ option. To create a branch revision, use the ‘-b’ option of the rtag or tag commands (see section [cvs: Branching and merging#Branching-and-merging Branching and merging]). Then, either checkout or update can be used to base your sources on the newly created branch. From that point on, all commit changes made within these working sources will be automatically added to a branch revision, thereby not disturbing main-line development in any way. For example, if you had to create a patch to the 1.2 version of the product, even though the 2.0 version is already under development, you might do:

     
    $ cvs rtag -b -r FCS1_2 FCS1_2_Patch product_module
    $ cvs checkout -r FCS1_2_Patch product_module
    $ cd product_module
    [[ hack away ]]
    $ cvs commit
    

    This works automatically since the ‘-r’ option is sticky.


    |[[#Committing-to-a-branch| < ]]| |[[#diff| > ]]|   |[[#CVS-commands| << ]]| |[[#commit-examples| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ===== Creating the branch after editing =====

    Say you have been working on some extremely experimental software, based on whatever revision you happened to checkout last week. If others in your group would like to work on this software with you, but without disturbing main-line development, you could commit your change to a new branch. Others can then checkout your experimental stuff and utilize the full benefit of CVS conflict resolution. The scenario might look like:

     
    [[ hacked sources are present ]]
    $ cvs tag -b EXPR1
    $ cvs update -r EXPR1
    $ cvs commit
    

    The update command will make the ‘-r EXPR1’ option sticky on all files. Note that your changes to the files will never be removed by the update command. The commit will automatically commit to the correct branch, because the ‘-r’ is sticky. You could also do like this:

     
    [[ hacked sources are present ]]
    $ cvs tag -b EXPR1
    $ cvs commit -r EXPR1
    

    but then, only those files that were changed by you will have the ‘-r EXPR1’ sticky flag. If you hack away, and commit without specifying the ‘-r EXPR1’ flag, some files may accidentally end up on the main trunk.

    To work with you on the experimental change, others would simply do

     
    $ cvs checkout -r EXPR1 whatever_module
    

    |[[#Creating-the-branch-after-editing| < ]]| |[[#diff-options| > ]]|   |[[#CVS-commands| << ]]| |[[#CVS-commands| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === diff—Show differences between revisions ===
    • Synopsis: diff [-lR] [-k kflag] [format_options] [[-r rev1 | -D date1] [-r rev2 | -D date2]] [files…]
    • Requires: working directory, repository.
    • Changes: nothing.

    The diff command is used to compare different revisions of files. The default action is to compare your working files with the revisions they were based on, and report any differences that are found.

    If any file names are given, only those files are compared. If any directories are given, all files under them will be compared.

    The exit status for diff is different than for other CVS commands; for details [[#Exit-status|CVS’s exit status]].


    |[[#diff| < ]]| |[[#Line-group-formats| > ]]|   |[[#CVS-commands| << ]]| |[[#diff| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== diff options ====

    These standard options are supported by diff (see section [[#Common-options|Common command options]], for a complete description of them):

    -D date

    Use the most recent revision no later than date. See ‘-r’ for how this affects the comparison.

    -k kflag

    Process keywords according to kflag. See [cvs: Keyword substitution#Keyword-substitution Keyword substitution].

    -l

    Local; run only in current working directory.

    -R

    Examine directories recursively. This option is on by default.

    -r tag

    Compare with revision tag. Zero, one or two ‘-r’ options can be present. With no ‘-r’ option, the working file will be compared with the revision it was based on. With one ‘-r’, that revision will be compared to your current working file. With two ‘-r’ options those two revisions will be compared (and your working file will not affect the outcome in any way).

    One or both ‘-r’ options can be replaced by a ‘-D date’ option, described above.

    The following options specify the format of the output. They have the same meaning as in GNU diff. Most options have two equivalent names, one of which is a single letter preceded by ‘-’, and the other of which is a long name preceded by ‘--’.

    -lines

    Show lines (an integer) lines of context. This option does not specify an output format by itself; it has no effect unless it is combined with ‘-c’ or ‘-u’. This option is obsolete. For proper operation, patch typically needs at least two lines of context.

    -a

    Treat all files as text and compare them line-by-line, even if they do not seem to be text.

    -b

    Ignore trailing white space and consider all other sequences of one or more white space characters to be equivalent.

    -B

    Ignore changes that just insert or delete blank lines.

    --binary

    Read and write data in binary mode.

    --brief

    Report only whether the files differ, not the details of the differences.

    -c

    Use the context output format.

    -C lines
    --context[=lines]

    Use the context output format, showing lines (an integer) lines of context, or three if lines is not given. For proper operation, patch typically needs at least two lines of context.

    --changed-group-format=format

    Use format to output a line group containing differing lines from both files in if-then-else format. See section [[#Line-group-formats|Line group formats]].

    -d

    Change the algorithm to perhaps find a smaller set of changes. This makes diff slower (sometimes much slower).

    -e
    --ed

    Make output that is a valid ed script.

    --expand-tabs

    Expand tabs to spaces in the output, to preserve the alignment of tabs in the input files.

    -f

    Make output that looks vaguely like an ed script but has changes in the order they appear in the file.

    -F regexp

    In context and unified format, for each hunk of differences, show some of the last preceding line that matches regexp.

    --forward-ed

    Make output that looks vaguely like an ed script but has changes in the order they appear in the file.

    -H

    Use heuristics to speed handling of large files that have numerous scattered small changes.

    --horizon-lines=lines

    Do not discard the last lines lines of the common prefix and the first lines lines of the common suffix.

    -i

    Ignore changes in case; consider upper- and lower-case letters equivalent.

    -I regexp

    Ignore changes that just insert or delete lines that match regexp.

    --ifdef=name

    Make merged if-then-else output using name.

    --ignore-all-space

    Ignore white space when comparing lines.

    --ignore-blank-lines

    Ignore changes that just insert or delete blank lines.

    --ignore-case

    Ignore changes in case; consider upper- and lower-case to be the same.

    --ignore-matching-lines=regexp

    Ignore changes that just insert or delete lines that match regexp.

    --ignore-space-change

    Ignore trailing white space and consider all other sequences of one or more white space characters to be equivalent.

    --initial-tab

    Output a tab rather than a space before the text of a line in normal or context format. This causes the alignment of tabs in the line to look normal.

    -L label

    Use label instead of the file name in the context format and unified format headers.

    --label=label

    Use label instead of the file name in the context format and unified format headers.

    --left-column

    Print only the left column of two common lines in side by side format.

    --line-format=format

    Use format to output all input lines in if-then-else format. See section [[#Line-formats|Line formats]].

    --minimal

    Change the algorithm to perhaps find a smaller set of changes. This makes diff slower (sometimes much slower).

    -n

    Output RCS-format diffs; like ‘-f’ except that each command specifies the number of lines affected.

    -N
    --new-file

    In directory comparison, if a file is found in only one directory, treat it as present but empty in the other directory.

    --new-group-format=format

    Use format to output a group of lines taken from just the second file in if-then-else format. See section [[#Line-group-formats|Line group formats]].

    --new-line-format=format

    Use format to output a line taken from just the second file in if-then-else format. See section [[#Line-formats|Line formats]].

    --old-group-format=format

    Use format to output a group of lines taken from just the first file in if-then-else format. See section [[#Line-group-formats|Line group formats]].

    --old-line-format=format

    Use format to output a line taken from just the first file in if-then-else format. See section [[#Line-formats|Line formats]].

    -p

    Show which C function each change is in.

    --rcs

    Output RCS-format diffs; like ‘-f’ except that each command specifies the number of lines affected.

    --report-identical-files
    -s

    Report when two files are the same.

    --show-c-function

    Show which C function each change is in.

    --show-function-line=regexp

    In context and unified format, for each hunk of differences, show some of the last preceding line that matches regexp.

    --side-by-side

    Use the side by side output format.

    --speed-large-files

    Use heuristics to speed handling of large files that have numerous scattered small changes.

    --suppress-common-lines

    Do not print common lines in side by side format.

    -t

    Expand tabs to spaces in the output, to preserve the alignment of tabs in the input files.

    -T

    Output a tab rather than a space before the text of a line in normal or context format. This causes the alignment of tabs in the line to look normal.

    --text

    Treat all files as text and compare them line-by-line, even if they do not appear to be text.

    -u

    Use the unified output format.

    --unchanged-group-format=format

    Use format to output a group of common lines taken from both files in if-then-else format. See section [[#Line-group-formats|Line group formats]].

    --unchanged-line-format=format

    Use format to output a line common to both files in if-then-else format. See section [[#Line-formats|Line formats]].

    -U lines
    --unified[=lines]

    Use the unified output format, showing lines (an integer) lines of context, or three if lines is not given. For proper operation, patch typically needs at least two lines of context.

    -w

    Ignore white space when comparing lines.

    -W columns
    --width=columns

    Use an output width of columns in side by side format.

    -y

    Use the side by side output format.


    |[[#diff-options| < ]]| |[[#Line-formats| > ]]|   |[[#CVS-commands| << ]]| |[[#diff-options| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ===== Line group formats =====

    Line group formats let you specify formats suitable for many applications that allow if-then-else input, including programming languages and text formatting languages. A line group format specifies the output format for a contiguous group of similar lines.

    For example, the following command compares the TeX file ‘myfile’ with the original version from the repository, and outputs a merged file in which old regions are surrounded by ‘\begin{em}’-‘\end{em}’ lines, and new regions are surrounded by ‘\begin{bf}’-‘\end{bf}’ lines.

     
    cvs diff \
       --old-group-format='\begin{em}
    %<\end{em}
    ' \
       --new-group-format='\begin{bf}
    %>\end{bf}
    ' \
       myfile
    

    The following command is equivalent to the above example, but it is a little more verbose, because it spells out the default line group formats.

     
    cvs diff \
       --old-group-format='\begin{em}
    %<\end{em}
    ' \
       --new-group-format='\begin{bf}
    %>\end{bf}
    ' \
       --unchanged-group-format='%=' \
       --changed-group-format='\begin{em}
    %<\end{em}
    \begin{bf}
    %>\end{bf}
    ' \
       myfile
    

    Here is a more advanced example, which outputs a diff listing with headers containing line numbers in a “plain English” style.

     
    cvs diff \
       --unchanged-group-format='' \
       --old-group-format='-------- %dn line%(n=1?:s) deleted at %df:
    %<' \
       --new-group-format='-------- %dN line%(N=1?:s) added after %de:
    %>' \
       --changed-group-format='-------- %dn line%(n=1?:s) changed at %df:
    %<-------- to:
    %>' \
       myfile
    

    To specify a line group format, use one of the options listed below. You can specify up to four line group formats, one for each kind of line group. You should quote format, because it typically contains shell metacharacters.

    --old-group-format=format

    These line groups are hunks containing only lines from the first file. The default old group format is the same as the changed group format if it is specified; otherwise it is a format that outputs the line group as-is.

    --new-group-format=format

    These line groups are hunks containing only lines from the second file. The default new group format is same as the changed group format if it is specified; otherwise it is a format that outputs the line group as-is.

    --changed-group-format=format

    These line groups are hunks containing lines from both files. The default changed group format is the concatenation of the old and new group formats.

    --unchanged-group-format=format

    These line groups contain lines common to both files. The default unchanged group format is a format that outputs the line group as-is.

    In a line group format, ordinary characters represent themselves; conversion specifications start with ‘%’ and have one of the following forms.

    %<

    stands for the lines from the first file, including the trailing newline. Each line is formatted according to the old line format (see section [[#Line-formats|Line formats]]).

    %>

    stands for the lines from the second file, including the trailing newline. Each line is formatted according to the new line format.

    %=

    stands for the lines common to both files, including the trailing newline. Each line is formatted according to the unchanged line format.

    %%

    stands for ‘%’.

    %c'C'

    where C is a single character, stands for C. C may not be a backslash or an apostrophe. For example, ‘%c':'’ stands for a colon, even inside the then-part of an if-then-else format, which a colon would normally terminate.

    %c'\O'

    where O is a string of 1, 2, or 3 octal digits, stands for the character with octal code O. For example, ‘%c'\0'’ stands for a null character.

    Fn

    where F is a printf conversion specification and n is one of the following letters, stands for n’s value formatted with F.

    e

    The line number of the line just before the group in the old file.

    f

    The line number of the first line in the group in the old file; equals e + 1.

    l

    The line number of the last line in the group in the old file.

    m

    The line number of the line just after the group in the old file; equals l + 1.

    n

    The number of lines in the group in the old file; equals l - f + 1.

    E, F, L, M, N

    Likewise, for lines in the new file.

    The printf conversion specification can be ‘%d’, ‘%o’, ‘%x’, or ‘%X’, specifying decimal, octal, lower case hexadecimal, or upper case hexadecimal output respectively. After the ‘%’ the following options can appear in sequence: a ‘-’ specifying left-justification; an integer specifying the minimum field width; and a period followed by an optional integer specifying the minimum number of digits. For example, ‘%5dN’ prints the number of new lines in the group in a field of width 5 characters, using the printf format "%5d".

    (A=B?T:E)

    If A equals B then T else E. A and B are each either a decimal constant or a single letter interpreted as above. This format spec is equivalent to T if A’s value equals B’s; otherwise it is equivalent to E.

    For example, ‘%(N=0?no:%dN) line%(N=1?:s)’ is equivalent to ‘no lines’ if N (the number of lines in the group in the new file) is 0, to ‘1 line’ if N is 1, and to ‘%dN lines’ otherwise.


    |[[#Line-group-formats| < ]]| |[[#diff-examples| > ]]|   |[[#CVS-commands| << ]]| |[[#diff-options| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ===== Line formats =====

    Line formats control how each line taken from an input file is output as part of a line group in if-then-else format.

    For example, the following command outputs text with a one-column change indicator to the left of the text. The first column of output is ‘-’ for deleted lines, ‘|’ for added lines, and a space for unchanged lines. The formats contain newline characters where newlines are desired on output.

     
    cvs diff \
       --old-line-format='-%l
    ' \
       --new-line-format='|%l
    ' \
       --unchanged-line-format=' %l
    ' \
       myfile
    

    To specify a line format, use one of the following options. You should quote format, since it often contains shell metacharacters.

    --old-line-format=format

    formats lines just from the first file.

    --new-line-format=format

    formats lines just from the second file.

    --unchanged-line-format=format

    formats lines common to both files.

    --line-format=format

    formats all lines; in effect, it sets all three above options simultaneously.

    In a line format, ordinary characters represent themselves; conversion specifications start with ‘%’ and have one of the following forms.

    %l

    stands for the contents of the line, not counting its trailing newline (if any). This format ignores whether the line is incomplete.

    %L

    stands for the contents of the line, including its trailing newline (if any). If a line is incomplete, this format preserves its incompleteness.

    %%

    stands for ‘%’.

    %c'C'

    where C is a single character, stands for C. C may not be a backslash or an apostrophe. For example, ‘%c':'’ stands for a colon.

    %c'\O'

    where O is a string of 1, 2, or 3 octal digits, stands for the character with octal code O. For example, ‘%c'\0'’ stands for a null character.

    Fn

    where F is a printf conversion specification, stands for the line number formatted with F. For example, ‘%.5dn’ prints the line number using the printf format "%.5d". See section [[#Line-group-formats|Line group formats]], for more about printf conversion specifications.

    The default line format is ‘%l’ followed by a newline character.

    If the input contains tab characters and it is important that they line up on output, you should ensure that ‘%l’ or ‘%L’ in a line format is just after a tab stop (e.g. by preceding ‘%l’ or ‘%L’ with a tab character), or you should use the ‘-t’ or ‘--expand-tabs’ option.

    Taken together, the line and line group formats let you specify many different formats. For example, the following command uses a format similar to diff’s normal format. You can tailor this command to get fine control over diff’s output.

     
    cvs diff \
       --old-line-format='< %l
    ' \
       --new-line-format='> %l
    ' \
       --old-group-format='%df%(f=l?:,%dl)d%dE
    %<' \
       --new-group-format='%dea%dF%(F=L?:,%dL)
    %>' \
       --changed-group-format='%df%(f=l?:,%dl)c%dF%(F=L?:,%dL)
    %<---
    %>' \
       --unchanged-group-format='' \
       myfile
    

    |[[#Line-formats| < ]]| |[[#export| > ]]|   |[[#CVS-commands| << ]]| |[[#diff| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== diff examples ====

    The following line produces a Unidiff (‘-u’ flag) between revision 1.14 and 1.19 of ‘backend.c’. Due to the ‘-kk’ flag no keywords are substituted, so differences that only depend on keyword substitution are ignored.

     
    $ cvs diff -kk -u -r 1.14 -r 1.19 backend.c
    

    Suppose the experimental branch EXPR1 was based on a set of files tagged RELEASE_1_0. To see what has happened on that branch, the following can be used:

     
    $ cvs diff -r RELEASE_1_0 -r EXPR1
    

    A command like this can be used to produce a context diff between two releases:

     
    $ cvs diff -c -r RELEASE_1_0 -r RELEASE_1_1 > diffs
    

    If you are maintaining ChangeLogs, a command like the following just before you commit your changes may help you write the ChangeLog entry. All local modifications that have not yet been committed will be printed.

     
    $ cvs diff -u | less
    

    |[[#diff-examples| < ]]| |[[#export-options| > ]]|   |[[#CVS-commands| << ]]| |[[#CVS-commands| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === export—Export sources from CVS, similar to checkout ===
    • Synopsis: export [-flNnR] [-r rev|-D date] [-k subst] [-d dir] module…
    • Requires: repository.
    • Changes: current directory.

    This command is a variant of checkout; use it when you want a copy of the source for module without the CVS administrative directories. For example, you might use export to prepare source for shipment off-site. This command requires that you specify a date or tag (with ‘-D’ or ‘-r’), so that you can count on reproducing the source you ship to others (and thus it always prunes empty directories).

    One often would like to use ‘-kv’ with cvs export. This causes any keywords to be expanded such that an import done at some other site will not lose the keyword revision information. But be aware that doesn’t handle an export containing binary files correctly. Also be aware that after having used ‘-kv’, one can no longer use the ident command (which is part of the RCS suite—see ident(1)) which looks for keyword strings. If you want to be able to use ident you must not use ‘-kv’.


    |[[#export| < ]]| |[[#history| > ]]|   |[[#CVS-commands| << ]]| |[[#export| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== export options ====

    These standard options are supported by export (see section [[#Common-options|Common command options]], for a complete description of them):

    -D date

    Use the most recent revision no later than date.

    -f

    If no matching revision is found, retrieve the most recent revision (instead of ignoring the file).

    -l

    Local; run only in current working directory.

    -n

    Do not run any checkout program.

    -R

    Export directories recursively. This is on by default.

    -r tag

    Use revision tag.

    In addition, these options (that are common to checkout and export) are also supported:

    -d dir

    Create a directory called dir for the working files, instead of using the module name. See section [[#checkout-options|checkout options]], for complete details on how CVS handles this flag.

    -k subst

    Set keyword expansion mode (see section [cvs: Keyword substitution#Substitution-modes Substitution modes]).

    -N

    Only useful together with ‘-d dir’. See section [[#checkout-options|checkout options]], for complete details on how CVS handles this flag.


    |[[#export-options| < ]]| |[[#history-options| > ]]|   |[[#CVS-commands| << ]]| |[[#CVS-commands| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === history—Show status of files and users ===
    • Synopsis: history [-report] [-flags] [-options args] [files…]
    • Requires: the file ‘$CVSROOT/CVSROOT/history
    • Changes: nothing.

    CVS can keep a history file that tracks each use of the checkout, commit, rtag, update, and release commands. You can use history to display this information in various formats.

    Logging must be enabled by creating the file ‘$CVSROOT/CVSROOT/history’.

    Note: history uses ‘-f’, ‘-l’, ‘-n’, and ‘-p’ in ways that conflict with the normal use inside CVS (see section [[#Common-options|Common command options]]).


    |[[#history| < ]]| |[[#import| > ]]|   |[[#CVS-commands| << ]]| |[[#history| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== history options ====

    Several options (shown above as ‘-report’) control what kind of report is generated:

    -c

    Report on each time commit was used (i.e., each time the repository was modified).

    -e

    Everything (all record types). Equivalent to specifying ‘-x’ with all record types. Of course, ‘-e’ will also include record types which are added in a future version of CVS; if you are writing a script which can only handle certain record types, you’ll want to specify ‘-x’.

    -m module

    Report on a particular module. (You can meaningfully use ‘-m’ more than once on the command line.)

    -o

    Report on checked-out modules. This is the default report type.

    -T

    Report on all tags.

    -x type

    Extract a particular set of record types type from the CVS history. The types are indicated by single letters, which you may specify in combination.

    Certain commands have a single record type:

    F

    release

    O

    checkout

    E

    export

    T

    rtag

    One of four record types may result from an update:

    C

    A merge was necessary but collisions were detected (requiring manual merging).

    G

    A merge was necessary and it succeeded.

    U

    A working file was copied from the repository.

    W

    The working copy of a file was deleted during update (because it was gone from the repository).

    One of three record types results from commit:

    A

    A file was added for the first time.

    M

    A file was modified.

    R

    A file was removed.

    The options shown as ‘-flags’ constrain or expand the report without requiring option arguments:

    -a

    Show data for all users (the default is to show data only for the user executing history).

    -l

    Show last modification only.

    -w

    Show only the records for modifications done from the same working directory where history is executing.

    The options shown as ‘-options args’ constrain the report based on an argument:

    -b str

    Show data back to a record containing the string str in either the module name, the file name, or the repository path.

    -D date

    Show data since date. This is slightly different from the normal use of ‘-D date’, which selects the newest revision older than date.

    -f file

    Show data for a particular file (you can specify several ‘-f’ options on the same command line). This is equivalent to specifying the file on the command line.

    -n module

    Show data for a particular module (you can specify several ‘-n’ options on the same command line).

    -p repository

    Show data for a particular source repository (you can specify several ‘-p’ options on the same command line).

    -r rev

    Show records referring to revisions since the revision or tag named rev appears in individual RCS files. Each RCS file is searched for the revision or tag.

    -t tag

    Show records since tag tag was last added to the history file. This differs from the ‘-r’ flag above in that it reads only the history file, not the RCS files, and is much faster.

    -u name

    Show records for user name.

    -z timezone

    Show times in the selected records using the specified time zone instead of UTC.


    |[[#history-options| < ]]| |[[#import-options| > ]]|   |[[#CVS-commands| << ]]| |[[#CVS-commands| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === import—Import sources into CVS, using vendor branches ===
    • Synopsis: import [-options] repository vendortag releasetag…
    • Requires: Repository, source distribution directory.
    • Changes: repository.

    Use import to incorporate an entire source distribution from an outside source (e.g., a source vendor) into your source repository directory. You can use this command both for initial creation of a repository, and for wholesale updates to the module from the outside source. See section [cvs: Tracking third-party sources#Tracking-sources Tracking third-party sources], for a discussion on this subject.

    The repository argument gives a directory name (or a path to a directory) under the CVS root directory for repositories; if the directory did not exist, import creates it.

    When you use import for updates to source that has been modified in your source repository (since a prior import), it will notify you of any files that conflict in the two branches of development; use ‘checkout -j’ to reconcile the differences, as import instructs you to do.

    If CVS decides a file should be ignored (see section [cvs: Reference manual for Administrative files#cvsignore Ignoring files via cvsignore]), it does not import it and prints ‘I ’ followed by the filename (see section [[#import-output|import output]], for a complete description of the output).

    If the file ‘$CVSROOT/CVSROOT/cvswrappers’ exists, any file whose names match the specifications in that file will be treated as packages and the appropriate filtering will be performed on the file/directory before being imported. See section [cvs: Reference manual for Administrative files#Wrappers The cvswrappers file].

    The outside source is saved in a first-level branch, by default 1.1.1. Updates are leaves of this branch; for example, files from the first imported collection of source will be revision 1.1.1.1, then files from the first imported update will be revision 1.1.1.2, and so on.

    At least three arguments are required. repository is needed to identify the collection of source. vendortag is a tag for the entire branch (e.g., for 1.1.1). You must also specify at least one releasetag to identify the files at the leaves created each time you execute import.

    Note that import does not change the directory in which you invoke it. In particular, it does not set up that directory as a CVS working directory; if you want to work with the sources import them first and then check them out into a different directory (see section [cvs: Overview#Getting-the-source Getting the source]).


    |[[#import| < ]]| |[[#import-output| > ]]|   |[[#CVS-commands| << ]]| |[[#import| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== import options ====

    This standard option is supported by import (see section [[#Common-options|Common command options]], for a complete description):

    -m message

    Use message as log information, instead of invoking an editor.

    There are the following additional special options.

    -b branch

    See [cvs: Tracking third-party sources#Multiple-vendor-branches Multiple vendor branches].

    -k subst

    Indicate the keyword expansion mode desired. This setting will apply to all files created during the import, but not to any files that previously existed in the repository. See [cvs: Keyword substitution#Substitution-modes Substitution modes], for a list of valid ‘-k’ settings.

    -I name

    Specify file names that should be ignored during import. You can use this option repeatedly. To avoid ignoring any files at all (even those ignored by default), specify ‘-I !’.

    name can be a file name pattern of the same type that you can specify in the ‘.cvsignore’ file. See section [cvs: Reference manual for Administrative files#cvsignore Ignoring files via cvsignore].

    -W spec

    Specify file names that should be filtered during import. You can use this option repeatedly.

    spec can be a file name pattern of the same type that you can specify in the ‘.cvswrappers’ file. See section [cvs: Reference manual for Administrative files#Wrappers The cvswrappers file].


    |[[#import-options| < ]]| |[[#import-examples| > ]]|   |[[#CVS-commands| << ]]| |[[#import| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== import output ====

    import keeps you informed of its progress by printing a line for each file, preceded by one character indicating the status of the file:

    U file

    The file already exists in the repository and has not been locally modified; a new revision has been created (if necessary).

    N file

    The file is a new file which has been added to the repository.

    C file

    The file already exists in the repository but has been locally modified; you will have to merge the changes.

    I file

    The file is being ignored (see section [cvs: Reference manual for Administrative files#cvsignore Ignoring files via cvsignore]).

    L file

    The file is a symbolic link; cvs import ignores symbolic links. People periodically suggest that this behavior should be changed, but if there is a consensus on what it should be changed to, it is not apparent. (Various options in the ‘modules’ file can be used to recreate symbolic links on checkout, update, etc.; see section [cvs: Reference manual for Administrative files#modules The modules file].)


    |[[#import-output| < ]]| |[[#log| > ]]|   |[[#CVS-commands| << ]]| |[[#import| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== import examples ====

    See [cvs: Tracking third-party sources#Tracking-sources Tracking third-party sources], and [cvs: Starting a project with CVS#From-files Creating a directory tree from a number of files].


    |[[#import-examples| < ]]| |[[#log-options| > ]]|   |[[#CVS-commands| << ]]| |[[#CVS-commands| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === log—Print out log information for files ===
    • Synopsis: log [options] [files…]
    • Requires: repository, working directory.
    • Changes: nothing.

    Display log information for files. log used to call the RCS utility rlog. Although this is no longer true in the current sources, this history determines the format of the output and the options, which are not quite in the style of the other CVS commands.

    The output includes the location of the RCS file, the head revision (the latest revision on the trunk), all symbolic names (tags) and some other things. For each revision, the revision number, the author, the number of lines added/deleted and the log message are printed. All times are displayed in Coordinated Universal Time (UTC). (Other parts of CVS print times in the local timezone).

    Note: log uses ‘-R’ in a way that conflicts with the normal use inside CVS (see section [[#Common-options|Common command options]]).


    |[[#log| < ]]| |[[#log-examples| > ]]|   |[[#CVS-commands| << ]]| |[[#log| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== log options ====

    By default, log prints all information that is available. All other options restrict the output.

    -b

    Print information about the revisions on the default branch, normally the highest branch on the trunk.

    -d dates

    Print information about revisions with a checkin date/time in the range given by the semicolon-separated list of dates. The date formats accepted are those accepted by the ‘-D’ option to many other CVS commands (see section [[#Common-options|Common command options]]). Dates can be combined into ranges as follows:

    d1<d2
    d2>d1

    Select the revisions that were deposited between d1 and d2.

    <d
    d>

    Select all revisions dated d or earlier.

    d<
    >d

    Select all revisions dated d or later.

    d

    Select the single, latest revision dated d or earlier.

    The ‘>’ or ‘<’ characters may be followed by ‘=’ to indicate an inclusive range rather than an exclusive one.

    Note that the separator is a semicolon (;).

    -h

    Print only the name of the RCS file, name of the file in the working directory, head, default branch, access list, locks, symbolic names, and suffix.

    -l

    Local; run only in current working directory. (Default is to run recursively).

    -N

    Do not print the list of tags for this file. This option can be very useful when your site uses a lot of tags, so rather than "more"’ing over 3 pages of tag information, the log information is presented without tags at all.

    -R

    Print only the name of the RCS file.

    -rrevisions

    Print information about revisions given in the comma-separated list revisions of revisions and ranges. The following table explains the available range formats:

    rev1:rev2

    Revisions rev1 to rev2 (which must be on the same branch).

    rev1::rev2

    The same, but excluding rev1.

    :rev
    ::rev

    Revisions from the beginning of the branch up to and including rev.

    rev:

    Revisions starting with rev to the end of the branch containing rev.

    rev::

    Revisions starting just after rev to the end of the branch containing rev.

    branch

    An argument that is a branch means all revisions on that branch.

    branch1:branch2
    branch1::branch2

    A range of branches means all revisions on the branches in that range.

    branch.

    The latest revision in branch.

    A bare ‘-r’ with no revisions means the latest revision on the default branch, normally the trunk. There can be no space between the ‘-r’ option and its argument.

    -S

    Suppress the header if no revisions are selected.

    -s states

    Print information about revisions whose state attributes match one of the states given in the comma-separated list states.

    -t

    Print the same as ‘-h’, plus the descriptive text.

    -wlogins

    Print information about revisions checked in by users with login names appearing in the comma-separated list logins. If logins is omitted, the user’s login is assumed. There can be no space between the ‘-w’ option and its argument.

    log prints the intersection of the revisions selected with the options ‘-d’, ‘-s’, and ‘-w’, intersected with the union of the revisions selected by ‘-b’ and ‘-r’.


    |[[#log-options| < ]]| |[[#rdiff| > ]]|   |[[#CVS-commands| << ]]| |[[#log| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== log examples ====

    Contributed examples are gratefully accepted.


    |[[#log-examples| < ]]| |[[#rdiff-options| > ]]|   |[[#CVS-commands| << ]]| |[[#CVS-commands| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === rdiff—’patch’ format diffs between releases ===
    • rdiff [-flags] [-V vn] [-r t|-D d [-r t2|-D d2]] modules…
    • Requires: repository.
    • Changes: nothing.
    • Synonym: patch

    Builds a Larry Wall format patch(1) file between two releases, that can be fed directly into the patch program to bring an old release up-to-date with the new release. (This is one of the few CVS commands that operates directly from the repository, and doesn’t require a prior checkout.) The diff output is sent to the standard output device.

    You can specify (using the standard ‘-r’ and ‘-D’ options) any combination of one or two revisions or dates. If only one revision or date is specified, the patch file reflects differences between that revision or date and the current head revisions in the RCS file.

    Note that if the software release affected is contained in more than one directory, then it may be necessary to specify the ‘-p’ option to the patch command when patching the old sources, so that patch is able to find the files that are located in other directories.


    |[[#rdiff| < ]]| |[[#rdiff-examples| > ]]|   |[[#CVS-commands| << ]]| |[[#rdiff| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== rdiff options ====

    These standard options are supported by rdiff (see section [[#Common-options|Common command options]], for a complete description of them):

    -D date

    Use the most recent revision no later than date.

    -f

    If no matching revision is found, retrieve the most recent revision (instead of ignoring the file).

    -l

    Local; don’t descend subdirectories.

    -R

    Examine directories recursively. This option is on by default.

    -r tag

    Use revision tag.

    In addition to the above, these options are available:

    -c

    Use the context diff format. This is the default format.

    -s

    Create a summary change report instead of a patch. The summary includes information about files that were changed or added between the releases. It is sent to the standard output device. This is useful for finding out, for example, which files have changed between two dates or revisions.

    -t

    A diff of the top two revisions is sent to the standard output device. This is most useful for seeing what the last change to a file was.

    -u

    Use the unidiff format for the context diffs. Remember that old versions of the patch program can’t handle the unidiff format, so if you plan to post this patch to the net you should probably not use ‘-u’.

    -V vn

    Expand keywords according to the rules current in RCS version vn (the expansion format changed with RCS version 5). Note that this option is no longer accepted. CVS will always expand keywords the way that RCS version 5 does.


    |[[#rdiff-options| < ]]| |[[#release| > ]]|   |[[#CVS-commands| << ]]| |[[#rdiff| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== rdiff examples ====

    Suppose you receive mail from foo@example.net asking for an update from release 1.2 to 1.4 of the tc compiler. You have no such patches on hand, but with CVS that can easily be fixed with a command such as this:

     
    $ cvs rdiff -c -r FOO1_2 -r FOO1_4 tc | \
    $$ Mail -s 'The patches you asked for' foo@example.net
    

    Suppose you have made release 1.3, and forked a branch called ‘R_1_3fix’ for bugfixes. ‘R_1_3_1’ corresponds to release 1.3.1, which was made some time ago. Now, you want to see how much development has been done on the branch. This command can be used:

     
    $ cvs patch -s -r R_1_3_1 -r R_1_3fix module-name
    cvs rdiff: Diffing module-name
    File ChangeLog,v changed from revision 1.52.2.5 to 1.52.2.6
    File foo.c,v changed from revision 1.52.2.3 to 1.52.2.4
    File bar.h,v changed from revision 1.29.2.1 to 1.2
    

    |[[#rdiff-examples| < ]]| |[[#release-options| > ]]|   |[[#CVS-commands| << ]]| |[[#CVS-commands| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === release—Indicate that a Module is no longer in use ===
    • release [-d] directories…
    • Requires: Working directory.
    • Changes: Working directory, history log.

    This command is meant to safely cancel the effect of ‘cvs checkout’. Since CVS doesn’t lock files, it isn’t strictly necessary to use this command. You can always simply delete your working directory, if you like; but you risk losing changes you may have forgotten, and you leave no trace in the CVS history file (see section [cvs: Reference manual for Administrative files#history-file The history file]) that you’ve abandoned your checkout.

    Use ‘cvs release’ to avoid these problems. This command checks that no uncommitted changes are present; that you are executing it from immediately above a CVS working directory; and that the repository recorded for your files is the same as the repository defined in the module database.

    If all these conditions are true, ‘cvs release’ leaves a record of its execution (attesting to your intentionally abandoning your checkout) in the CVS history log.


    |[[#release| < ]]| |[[#release-output| > ]]|   |[[#CVS-commands| << ]]| |[[#release| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== release options ====

    The release command supports one command option:

    -d

    Delete your working copy of the file if the release succeeds. If this flag is not given your files will remain in your working directory.

    WARNING: The release command deletes all directories and files recursively. This has the very serious side-effect that any directory that you have created inside your checked-out sources, and not added to the repository (using the add command; see section [cvs: Adding, removing, and renaming files and directories#Adding-files Adding files to a directory]) will be silently deleted—even if it is non-empty!


    |[[#release-options| < ]]| |[[#release-examples| > ]]|   |[[#CVS-commands| << ]]| |[[#release| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== release output ====

    Before release releases your sources it will print a one-line message for any file that is not up-to-date.

    U file
    P file

    There exists a newer revision of this file in the repository, and you have not modified your local copy of the file (‘U’ and ‘P’ mean the same thing).

    A file

    The file has been added to your private copy of the sources, but has not yet been committed to the repository. If you delete your copy of the sources this file will be lost.

    R file

    The file has been removed from your private copy of the sources, but has not yet been removed from the repository, since you have not yet committed the removal. See section [[#commit|commit—Check files into the repository]].

    M file

    The file is modified in your working directory. There might also be a newer revision inside the repository.

    ? file

    file is in your working directory, but does not correspond to anything in the source repository, and is not in the list of files for CVS to ignore (see the description of the ‘-I’ option, and see section [cvs: Reference manual for Administrative files#cvsignore Ignoring files via cvsignore]). If you remove your working sources, this file will be lost.


    |[[#release-output| < ]]| |[[#update| > ]]|   |[[#CVS-commands| << ]]| |[[#release| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== release examples ====

    Release the ‘tc’ directory, and delete your local working copy of the files.

     
    $ cd ..         # You must stand immediately above the
                    # sources when you issue ‘cvs release’.
    $ cvs release -d tc
    You have [0] altered files in this repository.
    Are you sure you want to release (and delete) directory `tc': y
    $
    

    |[[#release-examples| < ]]| |[[#update-options| > ]]|   |[[#CVS-commands| << ]]| |[[#CVS-commands| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === update—Bring work tree in sync with repository ===
    • update [-ACdflPpR] [-I name] [-j rev [-j rev]] [-k kflag] [-r tag|-D date] [-W spec] files…
    • Requires: repository, working directory.
    • Changes: working directory.

    After you’ve run checkout to create your private copy of source from the common repository, other developers will continue changing the central source. From time to time, when it is convenient in your development process, you can use the update command from within your working directory to reconcile your work with any revisions applied to the source repository since your last checkout or update. Without the -C option, update will also merge any differences between the local copy of files and their base revisions into any destination revisions specified with -r, -D, or -A.


    |[[#update| < ]]| |[[#update-output| > ]]|   |[[#CVS-commands| << ]]| |[[#update| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== update options ====

    These standard options are available with update (see section [[#Common-options|Common command options]], for a complete description of them):

    -D date

    Use the most recent revision no later than date. This option is sticky, and implies ‘-P’. See [cvs: Revisions#Sticky-tags Sticky tags], for more information on sticky tags/dates.

    -f

    Only useful with the ‘-D date’ or ‘-r tag’ flags. If no matching revision is found, retrieve the most recent revision (instead of ignoring the file).

    -k kflag

    Process keywords according to kflag. See [cvs: Keyword substitution#Keyword-substitution Keyword substitution]. This option is sticky; future updates of this file in this working directory will use the same kflag. The status command can be viewed to see the sticky options. See [cvs: Quick reference to CVS commands#Invoking-CVS Quick reference to CVS commands], for more information on the status command.

    -l

    Local; run only in current working directory. See section [cvs: Recursive behavior#Recursive-behavior Recursive behavior].

    -P

    Prune empty directories. See [cvs: Adding, removing, and renaming files and directories#Moving-directories Moving and renaming directories].

    -p

    Pipe files to the standard output.

    -R

    Update directories recursively (default). See section [cvs: Recursive behavior#Recursive-behavior Recursive behavior].

    -r rev

    Retrieve revision/tag rev. This option is sticky, and implies ‘-P’. See [cvs: Revisions#Sticky-tags Sticky tags], for more information on sticky tags/dates.

    These special options are also available with update.

    -A

    Reset any sticky tags, dates, or ‘-k’ options. See [cvs: Revisions#Sticky-tags Sticky tags], for more information on sticky tags/dates.

    -C

    Overwrite locally modified files with clean copies from the repository (the modified file is saved in ‘.#file.revision’, however).

    -d

    Create any directories that exist in the repository if they’re missing from the working directory. Normally, update acts only on directories and files that were already enrolled in your working directory.

    This is useful for updating directories that were created in the repository since the initial checkout; but it has an unfortunate side effect. If you deliberately avoided certain directories in the repository when you created your working directory (either through use of a module name or by listing explicitly the files and directories you wanted on the command line), then updating with ‘-d’ will create those directories, which may not be what you want.

    -I name

    Ignore files whose names match name (in your working directory) during the update. You can specify ‘-I’ more than once on the command line to specify several files to ignore. Use ‘-I !’ to avoid ignoring any files at all. See section [cvs: Reference manual for Administrative files#cvsignore Ignoring files via cvsignore], for other ways to make CVS ignore some files.

    -Wspec

    Specify file names that should be filtered during update. You can use this option repeatedly.

    spec can be a file name pattern of the same type that you can specify in the ‘.cvswrappers’ file. See section [cvs: Reference manual for Administrative files#Wrappers The cvswrappers file].

    -jrevision

    With two ‘-j’ options, merge changes from the revision specified with the first ‘-j’ option to the revision specified with the second ‘j’ option, into the working directory.

    With one ‘-j’ option, merge changes from the ancestor revision to the revision specified with the ‘-j’ option, into the working directory. The ancestor revision is the common ancestor of the revision which the working directory is based on, and the revision specified in the ‘-j’ option.

    Note that using a single ‘-j tagname’ option rather than ‘-j branchname’ to merge changes from a branch will often not remove files which were removed on the branch. See section [cvs: Branching and merging#Merging-adds-and-removals Merging can add or remove files], for more.

    In addition, each ‘-j’ option can contain an optional date specification which, when used with branches, can limit the chosen revision to one within a specific date. An optional date is specified by adding a colon (:) to the tag: ‘-jSymbolic_Tag:Date_Specifier’.

    See section [cvs: Branching and merging#Branching-and-merging Branching and merging].


    |[[#update-options| < ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS > ]|   |[[#CVS-commands| << ]]| |[[#update| Up ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== update output ====

    update and checkout keep you informed of their progress by printing a line for each file, preceded by one character indicating the status of the file:

    U file

    The file was brought up to date with respect to the repository. This is done for any file that exists in the repository but not in your source, and for files that you haven’t changed but are not the most recent versions available in the repository.

    P file

    Like ‘U’, but the CVS server sends a patch instead of an entire file. This accomplishes the same thing as ‘U’ using less bandwidth.

    A file

    The file has been added to your private copy of the sources, and will be added to the source repository when you run commit on the file. This is a reminder to you that the file needs to be committed.

    R file

    The file has been removed from your private copy of the sources, and will be removed from the source repository when you run commit on the file. This is a reminder to you that the file needs to be committed.

    M file

    The file is modified in your working directory.

    M’ can indicate one of two states for a file you’re working on: either there were no modifications to the same file in the repository, so that your file remains as you last saw it; or there were modifications in the repository as well as in your copy, but they were merged successfully, without conflict, in your working directory.

    CVS will print some messages if it merges your work, and a backup copy of your working file (as it looked before you ran update) will be made. The exact name of that file is printed while update runs.

    C file

    A conflict was detected while trying to merge your changes to file with changes from the source repository. file (the copy in your working directory) is now the result of attempting to merge the two revisions; an unmodified copy of your file is also in your working directory, with the name ‘.#file.revision’ where revision is the revision that your modified file started from. Resolve the conflict as described in [cvs: Multiple developers#Conflicts-example Conflicts example]. (Note that some systems automatically purge files that begin with ‘.#’ if they have not been accessed for a few days. If you intend to keep a copy of your original file, it is a very good idea to rename it.) Under VMS, the file name starts with ‘__’ rather than ‘.#’.

    ? file

    file is in your working directory, but does not correspond to anything in the source repository, and is not in the list of files for CVS to ignore (see the description of the ‘-I’ option, and see section [cvs: Reference manual for Administrative files#cvsignore Ignoring files via cvsignore]).


    |[[#CVS-commands| << ]]| |[cvs: Quick reference to CVS commands#Invoking-CVS >> ]|           |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    This document was generated by a tester on a sunny day using [http://www.nongnu.org/texi2html/ texi2html]. texi2html-1.82/test/manuals/res/ccvs_mediawiki/cvs: Multiple developers0000644000175000017500000013722311264347121030147 0ustar flichtenheldflichtenheld
    |[cvs: Handling binary files#Binary-howto < ]| |[[#File-status| > ]]|   |[cvs: Handling binary files#Binary-files << ]| |[[cvs#Top| Up ]]| |[cvs: Revision management#Revision-management >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    == Multiple developers ==

    When more than one person works on a software project things often get complicated. Often, two people try to edit the same file simultaneously. One solution, known as file locking or reserved checkouts, is to allow only one person to edit each file at a time. This is the only solution with some version control systems, including RCS and SCCS. Currently the usual way to get reserved checkouts with CVS is the cvs admin -l command (see section [cvs: Guide to CVS commands#admin-options admin options]). This is not as nicely integrated into CVS as the watch features, described below, but it seems that most people with a need for reserved checkouts find it adequate. It also may be possible to use the watches features described below, together with suitable procedures (not enforced by software), to avoid having two people edit at the same time.

    The default model with CVS is known as unreserved checkouts. In this model, developers can edit their own working copy of a file simultaneously. The first person that commits his changes has no automatic way of knowing that another has started to edit it. Others will get an error message when they try to commit the file. They must then use CVS commands to bring their working copy up to date with the repository revision. This process is almost automatic.

    CVS also supports mechanisms which facilitate various kinds of communication, without actually enforcing rules like reserved checkouts do.

    The rest of this chapter describes how these various models work, and some of the issues involved in choosing between them.


    |[[#Multiple-developers| < ]]| |[[#Updating-a-file| > ]]|   |[[#Multiple-developers| << ]]| |[[#Multiple-developers| Up ]]| |[cvs: Revision management#Revision-management >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === File status ===

    Based on what operations you have performed on a checked out file, and what operations others have performed to that file in the repository, one can classify a file in a number of states. The states, as reported by the status command, are:

    Up-to-date

    The file is identical with the latest revision in the repository for the branch in use.

    Locally Modified

    You have edited the file, and not yet committed your changes.

    Locally Added

    You have added the file with add, and not yet committed your changes.

    Locally Removed

    You have removed the file with remove, and not yet committed your changes.

    Needs Checkout

    Someone else has committed a newer revision to the repository. The name is slightly misleading; you will ordinarily use update rather than checkout to get that newer revision.

    Needs Patch

    Like Needs Checkout, but the CVS server will send a patch rather than the entire file. Sending a patch or sending an entire file accomplishes the same thing.

    Needs Merge

    Someone else has committed a newer revision to the repository, and you have also made modifications to the file.

    Unresolved Conflict

    A file with the same name as this new file has been added to the repository from a second workspace. This file will need to be moved out of the way to allow an update to complete.

    File had conflicts on merge

    This is like Locally Modified, except that a previous update command gave a conflict. If you have not already done so, you need to resolve the conflict as described in [[#Conflicts-example|Conflicts example]].

    Unknown

    CVS doesn’t know anything about this file. For example, you have created a new file and have not run add.

    To help clarify the file status, status also reports the Working revision which is the revision that the file in the working directory derives from, and the Repository revision which is the latest revision in the repository for the branch in use.

    The options to status are listed in [cvs: Quick reference to CVS commands#Invoking-CVS Quick reference to CVS commands]. For information on its Sticky tag and Sticky date output, see [cvs: Revisions#Sticky-tags Sticky tags]. For information on its Sticky options output, see the ‘-k’ option in [cvs: Guide to CVS commands#update-options update options].

    You can think of the status and update commands as somewhat complementary. You use update to bring your files up to date, and you can use status to give you some idea of what an update would do (of course, the state of the repository might change before you actually run update). In fact, if you want a command to display file status in a more brief format than is displayed by the status command, you can invoke

     
    $ cvs -n -q update
    

    The ‘-n’ option means to not actually do the update, but merely to display statuses; the ‘-q’ option avoids printing the name of each directory. For more information on the update command, and these options, see [cvs: Quick reference to CVS commands#Invoking-CVS Quick reference to CVS commands].


    |[[#File-status| < ]]| |[[#Conflicts-example| > ]]|   |[[#Multiple-developers| << ]]| |[[#Multiple-developers| Up ]]| |[cvs: Revision management#Revision-management >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Bringing a file up to date ===

    When you want to update or merge a file, use the update command. For files that are not up to date this is roughly equivalent to a checkout command: the newest revision of the file is extracted from the repository and put in your working directory.

    Your modifications to a file are never lost when you use update. If no newer revision exists, running update has no effect. If you have edited the file, and a newer revision is available, CVS will merge all changes into your working copy.

    For instance, imagine that you checked out revision 1.4 and started editing it. In the meantime someone else committed revision 1.5, and shortly after that revision 1.6. If you run update on the file now, CVS will incorporate all changes between revision 1.4 and 1.6 into your file.

    If any of the changes between 1.4 and 1.6 were made too close to any of the changes you have made, an overlap occurs. In such cases a warning is printed, and the resulting file includes both versions of the lines that overlap, delimited by special markers. See section [cvs: Guide to CVS commands#update update—Bring work tree in sync with repository], for a complete description of the update command.


    |[[#Updating-a-file| < ]]| |[[#Informing-others| > ]]|   |[[#Multiple-developers| << ]]| |[[#Multiple-developers| Up ]]| |[cvs: Revision management#Revision-management >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Conflicts example ===

    Suppose revision 1.4 of ‘driver.c’ contains this:

     
    #include <stdio.h>
    
    void main()
    {
        parse();
        if (nerr == 0)
            gencode();
        else
            fprintf(stderr, "No code generated.\n");
        exit(nerr == 0 ? 0 : 1);
    }
    

    Revision 1.6 of ‘driver.c’ contains this:

     
    #include <stdio.h>
    
    int main(int argc,
             char **argv)
    {
        parse();
        if (argc != 1)
        {
            fprintf(stderr, "tc: No args expected.\n");
            exit(1);
        }
        if (nerr == 0)
            gencode();
        else
            fprintf(stderr, "No code generated.\n");
        exit(!!nerr);
    }
    

    Your working copy of ‘driver.c’, based on revision 1.4, contains this before you run ‘cvs update’:

     
    #include <stdlib.h>
    #include <stdio.h>
    
    void main()
    {
        init_scanner();
        parse();
        if (nerr == 0)
            gencode();
        else
            fprintf(stderr, "No code generated.\n");
        exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
    }
    

    You run ‘cvs update’:

     
    $ cvs update driver.c
    RCS file: /usr/local/cvsroot/yoyodyne/tc/driver.c,v
    retrieving revision 1.4
    retrieving revision 1.6
    Merging differences between 1.4 and 1.6 into driver.c
    rcsmerge warning: overlaps during merge
    cvs update: conflicts found in driver.c
    C driver.c
    

    CVS tells you that there were some conflicts. Your original working file is saved unmodified in ‘.#driver.c.1.4’. The new version of ‘driver.c’ contains this:

     
    #include <stdlib.h>
    #include <stdio.h>
    
    int main(int argc,
             char **argv)
    {
        init_scanner();
        parse();
        if (argc != 1)
        {
            fprintf(stderr, "tc: No args expected.\n");
            exit(1);
        }
        if (nerr == 0)
            gencode();
        else
            fprintf(stderr, "No code generated.\n");
    <<<<<<< driver.c
        exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
    =======
        exit(!!nerr);
    >>>>>>> 1.6
    }
    

    Note how all non-overlapping modifications are incorporated in your working copy, and that the overlapping section is clearly marked with ‘<<<<<<<’, ‘=======’ and ‘>>>>>>>’.

    You resolve the conflict by editing the file, removing the markers and the erroneous line. Suppose you end up with this file:

     
    #include <stdlib.h>
    #include <stdio.h>
    
    int main(int argc,
             char **argv)
    {
        init_scanner();
        parse();
        if (argc != 1)
        {
            fprintf(stderr, "tc: No args expected.\n");
            exit(1);
        }
        if (nerr == 0)
            gencode();
        else
            fprintf(stderr, "No code generated.\n");
        exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
    }
    

    You can now go ahead and commit this as revision 1.7.

     
    $ cvs commit -m "Initialize scanner. Use symbolic exit values." driver.c
    Checking in driver.c;
    /usr/local/cvsroot/yoyodyne/tc/driver.c,v  <--  driver.c
    new revision: 1.7; previous revision: 1.6
    done
    

    For your protection, CVS will refuse to check in a file if a conflict occurred and you have not resolved the conflict. Currently to resolve a conflict, you must change the timestamp on the file. In previous versions of CVS, you also needed to insure that the file contains no conflict markers. Because your file may legitimately contain conflict markers (that is, occurrences of ‘>>>>>>> ’ at the start of a line that don’t mark a conflict), the current version of CVS will print a warning and proceed to check in the file.

    If you use release 1.04 or later of pcl-cvs (a GNU Emacs front-end for CVS) you can use an Emacs package called emerge to help you resolve conflicts. See the documentation for pcl-cvs.


    |[[#Conflicts-example| < ]]| |[[#Concurrency| > ]]|   |[[#Multiple-developers| << ]]| |[[#Multiple-developers| Up ]]| |[cvs: Revision management#Revision-management >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Informing others about commits ===

    It is often useful to inform others when you commit a new revision of a file. The ‘-i’ option of the ‘modules’ file, or the ‘loginfo’ file, can be used to automate this process. See section [cvs: Reference manual for Administrative files#modules The modules file]. See section [cvs: Reference manual for Administrative files#loginfo Loginfo]. You can use these features of CVS to, for instance, instruct CVS to mail a message to all developers, or post a message to a local newsgroup.


    |[[#Informing-others| < ]]| |[[#Watches| > ]]|   |[[#Multiple-developers| << ]]| |[[#Multiple-developers| Up ]]| |[cvs: Revision management#Revision-management >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Several developers simultaneously attempting to run CVS ===

    If several developers try to run CVS at the same time, one may get the following message:

     
    [11:43:23] waiting for bach's lock in /usr/local/cvsroot/foo
    

    CVS will try again every 30 seconds, and either continue with the operation or print the message again, if it still needs to wait. If a lock seems to stick around for an undue amount of time, find the person holding the lock and ask them about the cvs command they are running. If they aren’t running a cvs command, look in the repository directory mentioned in the message and remove files which they own whose names start with ‘#cvs.rfl’, ‘#cvs.wfl’, or ‘#cvs.lock’.

    Note that these locks are to protect CVS’s internal data structures and have no relationship to the word lock in the sense used by RCS—which refers to reserved checkouts (see section [[#Multiple-developers|Multiple developers]]).

    Any number of people can be reading from a given repository at a time; only when someone is writing do the locks prevent other people from reading or writing.

    One might hope for the following property:

    If someone commits some changes in one cvs command, then an update by someone else will either get all the changes, or none of them.

    but CVS does not have this property. For example, given the files

     
    a/one.c
    a/two.c
    b/three.c
    b/four.c
    

    if someone runs

     
    cvs ci a/two.c b/three.c
    

    and someone else runs cvs update at the same time, the person running update might get only the change to ‘b/three.c’ and not the change to ‘a/two.c’.


    |[[#Concurrency| < ]]| |[[#Setting-a-watch| > ]]|   |[[#Multiple-developers| << ]]| |[[#Multiple-developers| Up ]]| |[cvs: Revision management#Revision-management >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Mechanisms to track who is editing files ===

    For many groups, use of CVS in its default mode is perfectly satisfactory. Users may sometimes go to check in a modification only to find that another modification has intervened, but they deal with it and proceed with their check in. Other groups prefer to be able to know who is editing what files, so that if two people try to edit the same file they can choose to talk about who is doing what when rather than be surprised at check in time. The features in this section allow such coordination, while retaining the ability of two developers to edit the same file at the same time.

    For maximum benefit developers should use cvs edit (not chmod) to make files read-write to edit them, and cvs release (not rm) to discard a working directory which is no longer in use, but CVS is not able to enforce this behavior.


    |[[#Watches| < ]]| |[[#Getting-Notified| > ]]|   |[[#Multiple-developers| << ]]| |[[#Watches| Up ]]| |[cvs: Revision management#Revision-management >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== Telling CVS to watch certain files ====

    To enable the watch features, you first specify that certain files are to be watched.

    Command: cvs watch on [-lR] [files]…

    Specify that developers should run cvs edit before editing files. CVS will create working copies of files read-only, to remind developers to run the cvs edit command before working on them.

    If files includes the name of a directory, CVS arranges to watch all files added to the corresponding repository directory, and sets a default for files added in the future; this allows the user to set notification policies on a per-directory basis. The contents of the directory are processed recursively, unless the -l option is given. The -R option can be used to force recursion if the -l option is set in ‘~/.cvsrc’ (see section [cvs: Guide to CVS commands#g_t_007e_002f_002ecvsrc Default options and the ~/.cvsrc file]).

    If files is omitted, it defaults to the current directory.

    Command: cvs watch off [-lR] [files]…

    Do not create files read-only on checkout; thus, developers will not be reminded to use cvs edit and cvs unedit.

    The files and options are processed as for cvs watch on.


    |[[#Setting-a-watch| < ]]| |[[#Editing-files| > ]]|   |[[#Multiple-developers| << ]]| |[[#Watches| Up ]]| |[cvs: Revision management#Revision-management >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== Telling CVS to notify you ====

    You can tell CVS that you want to receive notifications about various actions taken on a file. You can do this without using cvs watch on for the file, but generally you will want to use cvs watch on, to remind developers to use the cvs edit command.

    Command: cvs watch add [-lR] [-a action]… [files]…

    Add the current user to the list of people to receive notification of work done on files.

    The -a option specifies what kinds of events CVS should notify the user about. action is one of the following:

    edit

    Another user has applied the cvs edit command (described below) to a watched file.

    commit

    Another user has committed changes to one of the named files.

    unedit

    Another user has abandoned editing a file (other than by committing changes). They can do this in several ways, by:

    • applying the cvs unedit command (described below) to the file
    • applying the cvs release command (see section [cvs: Guide to CVS commands#release release—Indicate that a Module is no longer in use]) to the file’s parent directory (or recursively to a directory more than one level up)
    • deleting the file and allowing cvs update to recreate it
    all

    All of the above.

    none

    None of the above. (This is useful with cvs edit, described below.)

    The -a option may appear more than once, or not at all. If omitted, the action defaults to all.

    The files and options are processed as for cvs watch on.

    Command: cvs watch remove [-lR] [-a action]… [files]…

    Remove a notification request established using cvs watch add; the arguments are the same. If the -a option is present, only watches for the specified actions are removed.

    When the conditions exist for notification, CVS calls the ‘notify’ administrative file. Edit ‘notify’ as one edits the other administrative files (see section [cvs: The Repository#Intro-administrative-files The administrative files]). This file follows the usual conventions for administrative files (see section [cvs: Reference manual for Administrative files#syntax The common syntax]), where each line is a regular expression followed by a command to execute. The command should contain a single occurrence of ‘%s’ which will be replaced by the user to notify; the rest of the information regarding the notification will be supplied to the command on standard input. The standard thing to put in the notify file is the single line:

     
    ALL mail %s -s "CVS notification"
    

    This causes users to be notified by electronic mail.

    Note that if you set this up in the straightforward way, users receive notifications on the server machine. One could of course write a ‘notify’ script which directed notifications elsewhere, but to make this easy, CVS allows you to associate a notification address for each user. To do so create a file ‘users’ in ‘CVSROOT’ with a line for each user in the format user:value. Then instead of passing the name of the user to be notified to ‘notify’, CVS will pass the value (normally an email address on some other machine).

    CVS does not notify you for your own changes. Currently this check is done based on whether the user name of the person taking the action which triggers notification matches the user name of the person getting notification. In fact, in general, the watches features only track one edit by each user. It probably would be more useful if watches tracked each working directory separately, so this behavior might be worth changing.


    |[[#Getting-Notified| < ]]| |[[#Watch-information| > ]]|   |[[#Multiple-developers| << ]]| |[[#Watches| Up ]]| |[cvs: Revision management#Revision-management >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== How to edit a file which is being watched ====

    Since a file which is being watched is checked out read-only, you cannot simply edit it. To make it read-write, and inform others that you are planning to edit it, use the cvs edit command. Some systems call this a checkout, but CVS uses that term for obtaining a copy of the sources (see section [cvs: Overview#Getting-the-source Getting the source]), an operation which those systems call a get or a fetch.

    Command: cvs edit [-lR] [-a action]… [files]…

    Prepare to edit the working files files. CVS makes the files read-write, and notifies users who have requested edit notification for any of files.

    The cvs edit command accepts the same options as the cvs watch add command, and establishes a temporary watch for the user on files; CVS will remove the watch when files are unedited or committed. If the user does not wish to receive notifications, she should specify -a none.

    The files and the options are processed as for the cvs watch commands.

    Normally when you are done with a set of changes, you use the cvs commit command, which checks in your changes and returns the watched files to their usual read-only state. But if you instead decide to abandon your changes, or not to make any changes, you can use the cvs unedit command.

    Command: cvs unedit [-lR] [files]…

    Abandon work on the working files files, and revert them to the repository versions on which they are based. CVS makes those files read-only for which users have requested notification using cvs watch on. CVS notifies users who have requested unedit notification for any of files.

    The files and options are processed as for the cvs watch commands.

    If watches are not in use, the unedit command probably does not work, and the way to revert to the repository version is with the command cvs update -C file (see section [cvs: Guide to CVS commands#update update—Bring work tree in sync with repository]). The meaning is not precisely the same; the latter may also bring in some changes which have been made in the repository since the last time you updated.

    When using client/server CVS, you can use the cvs edit and cvs unedit commands even if CVS is unable to successfully communicate with the server; the notifications will be sent upon the next successful CVS command.


    |[[#Editing-files| < ]]| |[[#Watches-Compatibility| > ]]|   |[[#Multiple-developers| << ]]| |[[#Watches| Up ]]| |[cvs: Revision management#Revision-management >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== Information about who is watching and editing ====
    Command: cvs watchers [-lR] [files]…

    List the users currently watching changes to files. The report includes the files being watched, and the mail address of each watcher.

    The files and options are processed as for the cvs watch commands.

    Command: cvs editors [-lR] [files]…

    List the users currently working on files. The report includes the mail address of each user, the time when the user began working with the file, and the host and path of the working directory containing the file.

    The files and options are processed as for the cvs watch commands.


    |[[#Watch-information| < ]]| |[[#Choosing-a-model| > ]]|   |[[#Multiple-developers| << ]]| |[[#Watches| Up ]]| |[cvs: Revision management#Revision-management >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== Using watches with old versions of CVS ====

    If you use the watch features on a repository, it creates ‘CVS’ directories in the repository and stores the information about watches in that directory. If you attempt to use CVS 1.6 or earlier with the repository, you get an error message such as the following (all on one line):

     
    cvs update: cannot open CVS/Entries for reading:
    No such file or directory
    

    and your operation will likely be aborted. To use the watch features, you must upgrade all copies of CVS which use that repository in local or server mode. If you cannot upgrade, use the watch off and watch remove commands to remove all watches, and that will restore the repository to a state which CVS 1.6 can cope with.


    |[[#Watches-Compatibility| < ]]| |[cvs: Revision management#Revision-management > ]|   |[[#Multiple-developers| << ]]| |[[#Multiple-developers| Up ]]| |[cvs: Revision management#Revision-management >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Choosing between reserved or unreserved checkouts ===

    Reserved and unreserved checkouts each have pros and cons. Let it be said that a lot of this is a matter of opinion or what works given different groups’ working styles, but here is a brief description of some of the issues. There are many ways to organize a team of developers. CVS does not try to enforce a certain organization. It is a tool that can be used in several ways.

    Reserved checkouts can be very counter-productive. If two persons want to edit different parts of a file, there may be no reason to prevent either of them from doing so. Also, it is common for someone to take out a lock on a file, because they are planning to edit it, but then forget to release the lock.

    People, especially people who are familiar with reserved checkouts, often wonder how often conflicts occur if unreserved checkouts are used, and how difficult they are to resolve. The experience with many groups is that they occur rarely and usually are relatively straightforward to resolve.

    The rarity of serious conflicts may be surprising, until one realizes that they occur only when two developers disagree on the proper design for a given section of code; such a disagreement suggests that the team has not been communicating properly in the first place. In order to collaborate under any source management regimen, developers must agree on the general design of the system; given this agreement, overlapping changes are usually straightforward to merge.

    In some cases unreserved checkouts are clearly inappropriate. If no merge tool exists for the kind of file you are managing (for example word processor files or files edited by Computer Aided Design programs), and it is not desirable to change to a program which uses a mergeable data format, then resolving conflicts is going to be unpleasant enough that you generally will be better off to simply avoid the conflicts instead, by using reserved checkouts.

    The watches features described above in [[#Watches|Mechanisms to track who is editing files]] can be considered to be an intermediate model between reserved checkouts and unreserved checkouts. When you go to edit a file, it is possible to find out who else is editing it. And rather than having the system simply forbid both people editing the file, it can tell you what the situation is and let you figure out whether it is a problem in that particular case or not. Therefore, for some groups it can be considered the best of both the reserved checkout and unreserved checkout worlds.


    |[[#Multiple-developers| << ]]| |[cvs: Revision management#Revision-management >> ]|           |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    This document was generated by a tester on a sunny day using [http://www.nongnu.org/texi2html/ texi2html]. texi2html-1.82/test/manuals/res/ccvs_mediawiki/cvs: Starting a project with CVS0000644000175000017500000004156011264347121031214 0ustar flichtenheldflichtenheld
    |[cvs: The Repository#Server-temporary-directory < ]| |[[#Setting-up-the-files| > ]]|   |[cvs: The Repository#Repository << ]| |[[cvs#Top| Up ]]| |[cvs: Revisions#Revisions >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    == Starting a project with CVS ==

    Because renaming files and moving them between directories is somewhat inconvenient, the first thing you do when you start a new project should be to think through your file organization. It is not impossible to rename or move files, but it does increase the potential for confusion and CVS does have some quirks particularly in the area of renaming directories. See section [cvs: Adding, removing, and renaming files and directories#Moving-files Moving and renaming files].

    What to do next depends on the situation at hand.


    |[[#Starting-a-new-project| < ]]| |[[#From-files| > ]]|   |[[#Starting-a-new-project| << ]]| |[[#Starting-a-new-project| Up ]]| |[cvs: Revisions#Revisions >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Setting up the files ===

    The first step is to create the files inside the repository. This can be done in a couple of different ways.


    |[[#Setting-up-the-files| < ]]| |[[#From-other-version-control-systems| > ]]|   |[[#Starting-a-new-project| << ]]| |[[#Setting-up-the-files| Up ]]| |[cvs: Revisions#Revisions >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== Creating a directory tree from a number of files ====

    When you begin using CVS, you will probably already have several projects that can be put under CVS control. In these cases the easiest way is to use the import command. An example is probably the easiest way to explain how to use it. If the files you want to install in CVS reside in ‘wdir’, and you want them to appear in the repository as ‘$CVSROOT/yoyodyne/rdir’, you can do this:

     
    $ cd wdir
    $ cvs import -m "Imported sources" yoyodyne/rdir yoyo start
    

    Unless you supply a log message with the ‘-m’ flag, CVS starts an editor and prompts for a message. The string ‘yoyo’ is a vendor tag, and ‘start’ is a release tag. They may fill no purpose in this context, but since CVS requires them they must be present. See section [cvs: Tracking third-party sources#Tracking-sources Tracking third-party sources], for more information about them.

    You can now verify that it worked, and remove your original source directory.

     
    $ cd ..
    $ cvs checkout yoyodyne/rdir       # Explanation below
    $ diff -r wdir yoyodyne/rdir
    $ rm -r wdir
    

    Erasing the original sources is a good idea, to make sure that you do not accidentally edit them in wdir, bypassing CVS. Of course, it would be wise to make sure that you have a backup of the sources before you remove them.

    The checkout command can either take a module name as argument (as it has done in all previous examples) or a path name relative to $CVSROOT, as it did in the example above.

    It is a good idea to check that the permissions CVS sets on the directories inside $CVSROOT are reasonable, and that they belong to the proper groups. See section [cvs: The Repository#File-permissions File permissions].

    If some of the files you want to import are binary, you may want to use the wrappers features to specify which files are binary and which are not. See section [cvs: Reference manual for Administrative files#Wrappers The cvswrappers file].


    |[[#From-files| < ]]| |[[#From-scratch| > ]]|   |[[#Starting-a-new-project| << ]]| |[[#Setting-up-the-files| Up ]]| |[cvs: Revisions#Revisions >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== Creating Files From Other Version Control Systems ====

    If you have a project which you are maintaining with another version control system, such as RCS, you may wish to put the files from that project into CVS, and preserve the revision history of the files.

    From RCS

    If you have been using RCS, find the RCS files—usually a file named ‘foo.c’ will have its RCS file in ‘RCS/foo.c,v’ (but it could be other places; consult the RCS documentation for details). Then create the appropriate directories in CVS if they do not already exist. Then copy the files into the appropriate directories in the CVS repository (the name in the repository must be the name of the source file with ‘,v’ added; the files go directly in the appropriate directory of the repository, not in an ‘RCS’ subdirectory). This is one of the few times when it is a good idea to access the CVS repository directly, rather than using CVS commands. Then you are ready to check out a new working directory.

    The RCS file should not be locked when you move it into CVS; if it is, CVS will have trouble letting you operate on it.

    From another version control system

    Many version control systems have the ability to export RCS files in the standard format. If yours does, export the RCS files and then follow the above instructions.

    Failing that, probably your best bet is to write a script that will check out the files one revision at a time using the command line interface to the other system, and then check the revisions into CVS. The ‘sccs2rcs’ script mentioned below may be a useful example to follow.

    From SCCS

    There is a script in the ‘contrib’ directory of the CVS source distribution called ‘sccs2rcs’ which converts SCCS files to RCS files. Note: you must run it on a machine which has both SCCS and RCS installed, and like everything else in contrib it is unsupported (your mileage may vary).

    From PVCS

    There is a script in the ‘contrib’ directory of the CVS source distribution called ‘pvcs_to_rcs’ which converts PVCS archives to RCS files. You must run it on a machine which has both PVCS and RCS installed, and like everything else in contrib it is unsupported (your mileage may vary). See the comments in the script for details.


    |[[#From-other-version-control-systems| < ]]| |[[#Defining-the-module| > ]]|   |[[#Starting-a-new-project| << ]]| |[[#Setting-up-the-files| Up ]]| |[cvs: Revisions#Revisions >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    ==== Creating a directory tree from scratch ====

    For a new project, the easiest thing to do is probably to create an empty directory structure, like this:

     
    $ mkdir tc
    $ mkdir tc/man
    $ mkdir tc/testing
    

    After that, you use the import command to create the corresponding (empty) directory structure inside the repository:

     
    $ cd tc
    $ cvs import -m "Created directory structure" yoyodyne/dir yoyo start
    

    Then, use add to add files (and new directories) as they appear.

    Check that the permissions CVS sets on the directories inside $CVSROOT are reasonable.


    |[[#From-scratch| < ]]| |[cvs: Revisions#Revisions > ]|   |[[#Starting-a-new-project| << ]]| |[[#Starting-a-new-project| Up ]]| |[cvs: Revisions#Revisions >> ]|         |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    === Defining the module ===

    The next step is to define the module in the ‘modules’ file. This is not strictly necessary, but modules can be convenient in grouping together related files and directories.

    In simple cases these steps are sufficient to define a module.

    1. Get a working copy of the modules file.
       
      $ cvs checkout CVSROOT/modules
      $ cd CVSROOT
      
    2. Edit the file and insert a line that defines the module. See section [cvs: The Repository#Intro-administrative-files The administrative files], for an introduction. See section [cvs: Reference manual for Administrative files#modules The modules file], for a full description of the modules file. You can use the following line to define the module ‘tc’:
       
      tc   yoyodyne/tc
      
    3. Commit your changes to the modules file.
       
      $ cvs commit -m "Added the tc module." modules
      
    4. Release the modules module.
       
      $ cd ..
      $ cvs release -d CVSROOT
      

    |[[#Starting-a-new-project| << ]]| |[cvs: Revisions#Revisions >> ]|           |[[cvs#Top|Top]]| |[cvs: Table of Contents#SEC_Contents Contents]| |[cvs: Index#Index Index]| |[cvs: About this Manual#SEC_About ? ]|
    This document was generated by a tester on a sunny day using [http://www.nongnu.org/texi2html/ texi2html]. texi2html-1.82/test/manuals/res/texi_cvs/0000755000175000017500000000000011264347121022265 5ustar flichtenheldflichtenheldtexi2html-1.82/test/manuals/res/texi_cvs/cvs.passfirst0000644000175000017500000265305111264347121025034 0ustar flichtenheldflichtenheldcvs.texi(,2) @comment Documentation for CVS. cvs.texi(,3) @setfilename cvs.info cvs.texi(,38) cvs.texi(,39) @comment This file is part of the CVS distribution. cvs.texi(,40) cvs.texi(,41) @comment CVS is free software; you can redistribute it and/or modify cvs.texi(,42) @comment it under the terms of the GNU General Public License as published by cvs.texi(,43) @comment the Free Software Foundation; either version 2, or (at your option) cvs.texi(,44) @comment any later version. cvs.texi(,45) cvs.texi(,46) @comment CVS is distributed in the hope that it will be useful, cvs.texi(,47) @comment but WITHOUT ANY WARRANTY; without even the implied warranty of cvs.texi(,48) @comment MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the cvs.texi(,49) @comment GNU General Public License for more details. cvs.texi(,50) cvs.texi(,51) @c See ../README for A4 vs. US letter size. cvs.texi(,52) @c When we provided A4 postscript, and people tried to cvs.texi(,53) @c print it on US letter, the usual complaint was that the cvs.texi(,54) @c page numbers would get cut off. cvs.texi(,55) @c If one prints US letter on A4, reportedly there is cvs.texi(,56) @c some extra space at the top and/or bottom, and the side cvs.texi(,57) @c margins are a bit narrow, but no text is lost. cvs.texi(,58) @c cvs.texi(,59) @c See cvs.texi(,60) @c http://www.ft.uni-erlangen.de/~mskuhn/iso-paper.html cvs.texi(,61) @c for more on paper sizes. Insuring that margins are cvs.texi(,62) @c big enough to print on either A4 or US letter does cvs.texi(,63) @c indeed seem to be the usual approach (RFC2346). cvs.texi(,64) cvs.texi(,65) @c This document seems to get overfull hboxes with some cvs.texi(,66) @c frequency (probably because the tendency is to cvs.texi(,67) @c sanity-check it with "make info" and run TeX less cvs.texi(,68) @c often). The big ugly boxes just seem to add insult cvs.texi(,69) @c to injury, and I'm not aware of them helping to fix cvs.texi(,70) @c the overfull hboxes at all. cvs.texi(,71) @finalout cvs.texi(,72) version.texi(,1) @set UPDATED 28 March 2002 version.texi(,2) @set UPDATED-MONTH March 2002 version.texi(,3) @set EDITION 4.2 version.texi(,4) @set VERSION 4.2 cvs.texi(,74) @settitle CVS---Concurrent Versions System v4.2 cvs.texi(,75) @setchapternewpage odd cvs.texi(,76) cvs.texi(,77) @c -- TODO list: cvs.texi(,78) @c -- Fix all lines that match "^@c -- " cvs.texi(,79) @c -- Also places marked with FIXME should be manual cvs.texi(,80) @c problems (as opposed to FIXCVS for CVS problems). cvs.texi(,81) cvs.texi(,82) @c @splitrcskeyword{} is used to avoid keyword expansion. It is replaced by cvs.texi(,83) @c @asis when generating info and dvi, and by in the generated html, cvs.texi(,84) @c such that keywords are not expanded in the generated html. cvs.texi(,90) cvs.texi(,96) cvs.texi(,97) @dircategory GNU Packages cvs.texi(,101) @dircategory Individual utilities cvs.texi(,105) cvs.texi(,106) @comment The titlepage section does not appear in the Info file. cvs.texi(,127) cvs.texi(,128) @comment ================================================================ cvs.texi(,129) @comment The real text starts here cvs.texi(,130) @comment ================================================================ cvs.texi(,131) cvs.texi(,133) @c --------------------------------------------------------------------- cvs.texi(,134) @node Top cvs.texi(,135) @top cvs.texi(,136) cvs.texi(,137) This info manual describes how to use and administer cvs.texi(,138) @sc{cvs} version 4.2. cvs.texi(,140) cvs.texi(,144) cvs.texi(,145) @c This menu is pretty long. Not sure how easily that cvs.texi(,146) @c can be fixed (no brilliant ideas right away)... cvs.texi(,147) @menu cvs.texi(,148) * Overview:: An introduction to CVS cvs.texi(,149) * Repository:: Where all your sources are stored cvs.texi(,150) * Starting a new project:: Starting a project with CVS cvs.texi(,151) * Revisions:: Numeric and symbolic names for revisions cvs.texi(,152) * Branching and merging:: Diverging/rejoining branches of development cvs.texi(,153) * Recursive behavior:: CVS descends directories cvs.texi(,154) * Adding and removing:: Adding/removing/renaming files/directories cvs.texi(,155) * History browsing:: Viewing the history of files in various ways cvs.texi(,156) cvs.texi(,157) CVS and the Real World. cvs.texi(,158) ----------------------- cvs.texi(,159) * Binary files:: CVS can handle binary files cvs.texi(,160) * Multiple developers:: How CVS helps a group of developers cvs.texi(,161) * Revision management:: Policy questions for revision management cvs.texi(,162) * Keyword substitution:: CVS can include the revision inside the file cvs.texi(,163) * Tracking sources:: Tracking third-party sources cvs.texi(,164) * Builds:: Issues related to CVS and builds cvs.texi(,165) * Special Files:: Devices, links and other non-regular files cvs.texi(,166) cvs.texi(,167) References. cvs.texi(,168) ----------- cvs.texi(,169) * CVS commands:: CVS commands share some things cvs.texi(,170) * Invoking CVS:: Quick reference to CVS commands cvs.texi(,171) * Administrative files:: Reference manual for the Administrative files cvs.texi(,172) * Environment variables:: All environment variables which affect CVS cvs.texi(,173) * Compatibility:: Upgrading CVS versions cvs.texi(,174) * Troubleshooting:: Some tips when nothing works cvs.texi(,175) * Credits:: Some of the contributors to this manual cvs.texi(,176) * BUGS:: Dealing with bugs in CVS or this manual cvs.texi(,177) * Index:: Index cvs.texi(,178) @end menu cvs.texi(,179) cvs.texi(,180) @c --------------------------------------------------------------------- cvs.texi(,181) @node Overview cvs.texi(,182) @chapter Overview cvs.texi(,183) @cindex Overview cvs.texi(,184) cvs.texi(,185) This chapter is for people who have never used cvs.texi(,186) @sc{cvs}, and perhaps have never used version control cvs.texi(,187) software before. cvs.texi(,188) cvs.texi(,189) If you are already familiar with @sc{cvs} and are just cvs.texi(,190) trying to learn a particular feature or remember a cvs.texi(,191) certain command, you can probably skip everything here. cvs.texi(,192) cvs.texi(,193) @menu cvs.texi(,194) * What is CVS?:: What you can do with @sc{cvs} cvs.texi(,195) * What is CVS not?:: Problems @sc{cvs} doesn't try to solve cvs.texi(,196) * A sample session:: A tour of basic @sc{cvs} usage cvs.texi(,197) @end menu cvs.texi(,198) cvs.texi(,199) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,200) @node What is CVS? cvs.texi(,201) @section What is CVS? cvs.texi(,202) @cindex What is CVS? cvs.texi(,203) @cindex Introduction to CVS cvs.texi(,204) @cindex CVS, introduction to cvs.texi(,205) cvs.texi(,206) @sc{cvs} is a version control system. Using it, you can cvs.texi(,207) record the history of your source files. cvs.texi(,208) cvs.texi(,209) @c -- /// cvs.texi(,210) @c -- ///Those who cannot remember the past are condemned to repeat it. cvs.texi(,211) @c -- /// -- George Santayana cvs.texi(,212) @c -- ////// cvs.texi(,213) cvs.texi(,214) @c -- Insert history quote here! cvs.texi(,215) For example, bugs sometimes creep in when cvs.texi(,216) software is modified, and you might not detect the bug cvs.texi(,217) until a long time after you make the modification. cvs.texi(,218) With @sc{cvs}, you can easily retrieve old versions to see cvs.texi(,219) exactly which change caused the bug. This can cvs.texi(,220) sometimes be a big help. cvs.texi(,221) cvs.texi(,222) You could of course save every version of every file cvs.texi(,223) you have ever created. This would cvs.texi(,224) however waste an enormous amount of disk space. @sc{cvs} cvs.texi(,225) stores all the versions of a file in a single file in a cvs.texi(,226) clever way that only stores the differences between cvs.texi(,227) versions. cvs.texi(,228) cvs.texi(,229) @sc{cvs} also helps you if you are part of a group of people working cvs.texi(,230) on the same project. It is all too easy to overwrite cvs.texi(,231) each others' changes unless you are extremely careful. cvs.texi(,232) Some editors, like @sc{gnu} Emacs, try to make sure that cvs.texi(,233) the same file is never modified by two people at the cvs.texi(,234) same time. Unfortunately, if someone is using another cvs.texi(,235) editor, that safeguard will not work. @sc{cvs} solves this problem cvs.texi(,236) by insulating the different developers from each other. Every cvs.texi(,237) developer works in his own directory, and @sc{cvs} merges cvs.texi(,238) the work when each developer is done. cvs.texi(,239) cvs.texi(,240) @cindex History of CVS cvs.texi(,241) @cindex CVS, history of cvs.texi(,242) @cindex Credits (CVS program) cvs.texi(,243) @cindex Contributors (CVS program) cvs.texi(,244) @sc{cvs} started out as a bunch of shell scripts written by cvs.texi(,245) Dick Grune, posted to the newsgroup cvs.texi(,246) @code{comp.sources.unix} in the volume 6 cvs.texi(,247) release of July, 1986. While no actual code from cvs.texi(,248) these shell scripts is present in the current version cvs.texi(,249) of @sc{cvs} much of the @sc{cvs} conflict resolution algorithms cvs.texi(,250) come from them. cvs.texi(,251) cvs.texi(,252) In April, 1989, Brian Berliner designed and coded @sc{cvs}. cvs.texi(,253) Jeff Polk later helped Brian with the design of the @sc{cvs} cvs.texi(,254) module and vendor branch support. cvs.texi(,255) cvs.texi(,256) @cindex Source, getting CVS source cvs.texi(,257) You can get @sc{cvs} in a variety of ways, including cvs.texi(,258) free download from the internet. For more information cvs.texi(,259) on downloading @sc{cvs} and other @sc{cvs} topics, see: cvs.texi(,260) cvs.texi(,261) @example cvs.texi(,262) http://www.cvshome.org/ cvs.texi(,263) http://www.loria.fr/~molli/cvs-index.html cvs.texi(,264) @end example cvs.texi(,265) cvs.texi(,266) @cindex Mailing list cvs.texi(,267) @cindex List, mailing list cvs.texi(,268) @cindex Newsgroups cvs.texi(,269) There is a mailing list, known as @w{@code{info-cvs}}, cvs.texi(,270) devoted to @sc{cvs}. To subscribe or cvs.texi(,271) unsubscribe cvs.texi(,272) write to cvs.texi(,273) @w{@code{info-cvs-request@@gnu.org}}. cvs.texi(,274) If you prefer a usenet group, the right cvs.texi(,275) group is @code{comp.software.config-mgmt} which is for cvs.texi(,276) @sc{cvs} discussions (along with other configuration cvs.texi(,277) management systems). In the future, it might be cvs.texi(,278) possible to create a cvs.texi(,279) @code{comp.software.config-mgmt.cvs}, but probably only cvs.texi(,280) if there is sufficient @sc{cvs} traffic on cvs.texi(,281) @code{comp.software.config-mgmt}. cvs.texi(,282) @c Other random data is that past attempts to create a cvs.texi(,283) @c gnu.* group have failed (the relevant authorities cvs.texi(,284) @c say they'll do it, but don't), and that tale was very cvs.texi(,285) @c skeptical of comp.software.config-mgmt.cvs when the cvs.texi(,286) @c subject came up around 1995 or so (for one cvs.texi(,287) @c thing, because creating it would be a "reorg" which cvs.texi(,288) @c would need to take a more comprehensive look at the cvs.texi(,289) @c whole comp.software.config-mgmt.* hierarchy). cvs.texi(,290) cvs.texi(,291) You can also subscribe to the @code{bug-cvs} mailing list, cvs.texi(,292) described in more detail in @ref{BUGS}. To subscribe cvs.texi(,293) send mail to @code{bug-cvs-request@@gnu.org}. cvs.texi(,294) cvs.texi(,295) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,296) @node What is CVS not? cvs.texi(,297) @section What is CVS not? cvs.texi(,298) @cindex What is CVS not? cvs.texi(,299) cvs.texi(,300) @sc{cvs} can do a lot of things for you, but it does cvs.texi(,301) not try to be everything for everyone. cvs.texi(,302) cvs.texi(,303) @table @asis cvs.texi(,304) @item @sc{cvs} is not a build system. cvs.texi(,305) cvs.texi(,306) Though the structure of your repository and modules cvs.texi(,307) file interact with your build system cvs.texi(,308) (e.g. @file{Makefile}s), they are essentially cvs.texi(,309) independent. cvs.texi(,310) cvs.texi(,311) @sc{cvs} does not dictate how you build anything. It cvs.texi(,312) merely stores files for retrieval in a tree structure cvs.texi(,313) you devise. cvs.texi(,314) cvs.texi(,315) @sc{cvs} does not dictate how to use disk space in the cvs.texi(,316) checked out working directories. If you write your cvs.texi(,317) @file{Makefile}s or scripts in every directory so they cvs.texi(,318) have to know the relative positions of everything else, cvs.texi(,319) you wind up requiring the entire repository to be cvs.texi(,320) checked out. cvs.texi(,321) cvs.texi(,322) If you modularize your work, and construct a build cvs.texi(,323) system that will share files (via links, mounts, cvs.texi(,324) @code{VPATH} in @file{Makefile}s, etc.), you can cvs.texi(,325) arrange your disk usage however you like. cvs.texi(,326) cvs.texi(,327) But you have to remember that @emph{any} such system is cvs.texi(,328) a lot of work to construct and maintain. @sc{cvs} does cvs.texi(,329) not address the issues involved. cvs.texi(,330) cvs.texi(,331) Of course, you should place the tools created to cvs.texi(,332) support such a build system (scripts, @file{Makefile}s, cvs.texi(,333) etc) under @sc{cvs}. cvs.texi(,334) cvs.texi(,335) Figuring out what files need to be rebuilt when cvs.texi(,336) something changes is, again, something to be handled cvs.texi(,337) outside the scope of @sc{cvs}. One traditional cvs.texi(,338) approach is to use @code{make} for building, and use cvs.texi(,339) some automated tool for generating the dependencies which cvs.texi(,340) @code{make} uses. cvs.texi(,341) cvs.texi(,342) See @ref{Builds}, for more information on doing builds cvs.texi(,343) in conjunction with @sc{cvs}. cvs.texi(,344) cvs.texi(,345) @item @sc{cvs} is not a substitute for management. cvs.texi(,346) cvs.texi(,347) Your managers and project leaders are expected to talk cvs.texi(,348) to you frequently enough to make certain you are aware cvs.texi(,349) of schedules, merge points, branch names and release cvs.texi(,350) dates. If they don't, @sc{cvs} can't help. cvs.texi(,351) cvs.texi(,352) @sc{cvs} is an instrument for making sources dance to cvs.texi(,353) your tune. But you are the piper and the composer. No cvs.texi(,354) instrument plays itself or writes its own music. cvs.texi(,355) cvs.texi(,356) @item @sc{cvs} is not a substitute for developer communication. cvs.texi(,357) cvs.texi(,358) When faced with conflicts within a single file, most cvs.texi(,359) developers manage to resolve them without too much cvs.texi(,360) effort. But a more general definition of ``conflict'' cvs.texi(,361) includes problems too difficult to solve without cvs.texi(,362) communication between developers. cvs.texi(,363) cvs.texi(,364) @sc{cvs} cannot determine when simultaneous changes cvs.texi(,365) within a single file, or across a whole collection of cvs.texi(,366) files, will logically conflict with one another. Its cvs.texi(,367) concept of a @dfn{conflict} is purely textual, arising cvs.texi(,368) when two changes to the same base file are near enough cvs.texi(,369) to spook the merge (i.e. @code{diff3}) command. cvs.texi(,370) cvs.texi(,371) @sc{cvs} does not claim to help at all in figuring out cvs.texi(,372) non-textual or distributed conflicts in program logic. cvs.texi(,373) cvs.texi(,374) For example: Say you change the arguments to function cvs.texi(,375) @code{X} defined in file @file{A}. At the same time, cvs.texi(,376) someone edits file @file{B}, adding new calls to cvs.texi(,377) function @code{X} using the old arguments. You are cvs.texi(,378) outside the realm of @sc{cvs}'s competence. cvs.texi(,379) cvs.texi(,380) Acquire the habit of reading specs and talking to your cvs.texi(,381) peers. cvs.texi(,382) cvs.texi(,383) cvs.texi(,384) @item @sc{cvs} does not have change control cvs.texi(,385) cvs.texi(,386) Change control refers to a number of things. First of cvs.texi(,387) all it can mean @dfn{bug-tracking}, that is being able cvs.texi(,388) to keep a database of reported bugs and the status of cvs.texi(,389) each one (is it fixed? in what release? has the bug cvs.texi(,390) submitter agreed that it is fixed?). For interfacing cvs.texi(,391) @sc{cvs} to an external bug-tracking system, see the cvs.texi(,392) @file{rcsinfo} and @file{verifymsg} files cvs.texi(,393) (@pxref{Administrative files}). cvs.texi(,394) cvs.texi(,395) Another aspect of change control is keeping track of cvs.texi(,396) the fact that changes to several files were in fact cvs.texi(,397) changed together as one logical change. If you check cvs.texi(,398) in several files in a single @code{cvs commit} cvs.texi(,399) operation, @sc{cvs} then forgets that those files were cvs.texi(,400) checked in together, and the fact that they have the cvs.texi(,401) same log message is the only thing tying them cvs.texi(,402) together. Keeping a @sc{gnu} style @file{ChangeLog} cvs.texi(,403) can help somewhat. cvs.texi(,404) @c FIXME: should have an xref to a section which talks cvs.texi(,405) @c more about keeping ChangeLog's with CVS, but that cvs.texi(,406) @c section hasn't been written yet. cvs.texi(,407) cvs.texi(,408) Another aspect of change control, in some systems, is cvs.texi(,409) the ability to keep track of the status of each cvs.texi(,410) change. Some changes have been written by a developer, cvs.texi(,411) others have been reviewed by a second developer, and so cvs.texi(,412) on. Generally, the way to do this with @sc{cvs} is to cvs.texi(,413) generate a diff (using @code{cvs diff} or @code{diff}) cvs.texi(,414) and email it to someone who can then apply it using the cvs.texi(,415) @code{patch} utility. This is very flexible, but cvs.texi(,416) depends on mechanisms outside @sc{cvs} to make sure cvs.texi(,417) nothing falls through the cracks. cvs.texi(,418) cvs.texi(,419) @item @sc{cvs} is not an automated testing program cvs.texi(,420) cvs.texi(,421) It should be possible to enforce mandatory use of a cvs.texi(,422) testsuite using the @code{commitinfo} file. I haven't cvs.texi(,423) heard a lot about projects trying to do that or whether cvs.texi(,424) there are subtle gotchas, however. cvs.texi(,425) cvs.texi(,426) @item @sc{cvs} does not have a builtin process model cvs.texi(,427) cvs.texi(,428) Some systems provide ways to ensure that changes or cvs.texi(,429) releases go through various steps, with various cvs.texi(,430) approvals as needed. Generally, one can accomplish cvs.texi(,431) this with @sc{cvs} but it might be a little more work. cvs.texi(,432) In some cases you'll want to use the @file{commitinfo}, cvs.texi(,433) @file{loginfo}, @file{rcsinfo}, or @file{verifymsg} cvs.texi(,434) files, to require that certain steps be performed cvs.texi(,435) before cvs will allow a checkin. Also consider whether cvs.texi(,436) features such as branches and tags can be used to cvs.texi(,437) perform tasks such as doing work in a development tree cvs.texi(,438) and then merging certain changes over to a stable tree cvs.texi(,439) only once they have been proven. cvs.texi(,440) @end table cvs.texi(,441) cvs.texi(,442) @c --------------------------------------------------------------------- cvs.texi(,443) @node A sample session cvs.texi(,444) @section A sample session cvs.texi(,445) @cindex Example of a work-session cvs.texi(,446) @cindex Getting started cvs.texi(,447) @cindex Work-session, example of cvs.texi(,448) @cindex tc, Trivial Compiler (example) cvs.texi(,449) @cindex Trivial Compiler (example) cvs.texi(,450) cvs.texi(,451) @c I think an example is a pretty good way to start. But cvs.texi(,452) @c somewhere in here, maybe after the sample session, cvs.texi(,453) @c we need something which is kind of cvs.texi(,454) @c a "roadmap" which is more directed at sketching out cvs.texi(,455) @c the functionality of CVS and pointing people to cvs.texi(,456) @c various other parts of the manual. As it stands now cvs.texi(,457) @c people who read in order get dumped right into all cvs.texi(,458) @c manner of hair regarding remote repositories, cvs.texi(,459) @c creating a repository, etc. cvs.texi(,460) @c cvs.texi(,461) @c The following was in the old Basic concepts node. I don't cvs.texi(,462) @c know how good a job it does at introducing modules, cvs.texi(,463) @c or whether they need to be introduced so soon, but cvs.texi(,464) @c something of this sort might go into some cvs.texi(,465) @c introductory material somewhere. cvs.texi(,474) cvs.texi(,475) As a way of introducing @sc{cvs}, we'll go through a cvs.texi(,476) typical work-session using @sc{cvs}. The first thing cvs.texi(,477) to understand is that @sc{cvs} stores all files in a cvs.texi(,478) centralized @dfn{repository} (@pxref{Repository}); this cvs.texi(,479) section assumes that a repository is set up. cvs.texi(,480) @c I'm not sure that the sentence concerning the cvs.texi(,481) @c repository quite tells the user what they need to cvs.texi(,482) @c know at this point. Might need to expand on "centralized" cvs.texi(,483) @c slightly (maybe not here, maybe further down in the example?) cvs.texi(,484) cvs.texi(,485) Suppose you are working on a simple compiler. The source cvs.texi(,486) consists of a handful of C files and a @file{Makefile}. cvs.texi(,487) The compiler is called @samp{tc} (Trivial Compiler), cvs.texi(,488) and the repository is set up so that there is a module cvs.texi(,489) called @samp{tc}. cvs.texi(,490) cvs.texi(,491) @menu cvs.texi(,492) * Getting the source:: Creating a workspace cvs.texi(,493) * Committing your changes:: Making your work available to others cvs.texi(,494) * Cleaning up:: Cleaning up cvs.texi(,495) * Viewing differences:: Viewing differences cvs.texi(,496) @end menu cvs.texi(,497) cvs.texi(,498) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,499) @node Getting the source cvs.texi(,500) @subsection Getting the source cvs.texi(,501) @cindex Getting the source cvs.texi(,502) @cindex Checking out source cvs.texi(,503) @cindex Fetching source cvs.texi(,504) @cindex Source, getting from CVS cvs.texi(,505) @cindex Checkout, example cvs.texi(,506) cvs.texi(,507) The first thing you must do is to get your own working copy of the cvs.texi(,508) source for @samp{tc}. For this, you use the @code{checkout} command: cvs.texi(,509) cvs.texi(,510) @example cvs.texi(,511) $ cvs checkout tc cvs.texi(,512) @end example cvs.texi(,513) cvs.texi(,514) @noindent cvs.texi(,515) This will create a new directory called @file{tc} and populate it with cvs.texi(,516) the source files. cvs.texi(,517) cvs.texi(,518) @example cvs.texi(,519) $ cd tc cvs.texi(,520) $ ls cvs.texi(,521) CVS Makefile backend.c driver.c frontend.c parser.c cvs.texi(,522) @end example cvs.texi(,523) cvs.texi(,524) The @file{CVS} directory is used internally by cvs.texi(,525) @sc{cvs}. Normally, you should not modify or remove cvs.texi(,526) any of the files in it. cvs.texi(,527) cvs.texi(,528) You start your favorite editor, hack away at @file{backend.c}, and a couple cvs.texi(,529) of hours later you have added an optimization pass to the compiler. cvs.texi(,530) A note to @sc{rcs} and @sc{sccs} users: There is no need to lock the files that cvs.texi(,531) you want to edit. @xref{Multiple developers}, for an explanation. cvs.texi(,532) cvs.texi(,533) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,534) @node Committing your changes cvs.texi(,535) @subsection Committing your changes cvs.texi(,536) @cindex Committing changes to files cvs.texi(,537) @cindex Log message entry cvs.texi(,538) cvs.texi(,539) When you have checked that the compiler is still compilable you decide cvs.texi(,540) to make a new version of @file{backend.c}. This will cvs.texi(,541) store your new @file{backend.c} in the repository and cvs.texi(,542) make it available to anyone else who is using that same cvs.texi(,543) repository. cvs.texi(,544) cvs.texi(,545) @example cvs.texi(,546) $ cvs commit backend.c cvs.texi(,547) @end example cvs.texi(,548) cvs.texi(,549) @noindent cvs.texi(,550) @sc{cvs} starts an editor, to allow you to enter a log cvs.texi(,551) message. You type in ``Added an optimization pass.'', cvs.texi(,552) save the temporary file, and exit the editor. cvs.texi(,553) cvs.texi(,554) @cindex CVSEDITOR, environment variable cvs.texi(,555) @cindex EDITOR, environment variable cvs.texi(,556) The environment variable @code{$CVSEDITOR} determines cvs.texi(,557) which editor is started. If @code{$CVSEDITOR} is not cvs.texi(,558) set, then if the environment variable @code{$EDITOR} is cvs.texi(,559) set, it will be used. If both @code{$CVSEDITOR} and cvs.texi(,560) @code{$EDITOR} are not set then there is a default cvs.texi(,561) which will vary with your operating system, for example cvs.texi(,562) @code{vi} for unix or @code{notepad} for Windows cvs.texi(,563) NT/95. cvs.texi(,564) cvs.texi(,565) @cindex VISUAL, environment variable cvs.texi(,566) In addition, @sc{cvs} checks the @code{$VISUAL} environment cvs.texi(,567) variable. Opinions vary on whether this behavior is desirable and cvs.texi(,568) whether future releases of @sc{cvs} should check @code{$VISUAL} or cvs.texi(,569) ignore it. You will be OK either way if you make sure that cvs.texi(,570) @code{$VISUAL} is either unset or set to the same thing as cvs.texi(,571) @code{$EDITOR}. cvs.texi(,572) cvs.texi(,573) @c This probably should go into some new node cvs.texi(,574) @c containing detailed info on the editor, rather than cvs.texi(,575) @c the intro. In fact, perhaps some of the stuff with cvs.texi(,576) @c CVSEDITOR and -m and so on should too. cvs.texi(,577) When @sc{cvs} starts the editor, it includes a list of cvs.texi(,578) files which are modified. For the @sc{cvs} client, cvs.texi(,579) this list is based on comparing the modification time cvs.texi(,580) of the file against the modification time that the file cvs.texi(,581) had when it was last gotten or updated. Therefore, if cvs.texi(,582) a file's modification time has changed but its contents cvs.texi(,583) have not, it will show up as modified. The simplest cvs.texi(,584) way to handle this is simply not to worry about it---if cvs.texi(,585) you proceed with the commit @sc{cvs} will detect that cvs.texi(,586) the contents are not modified and treat it as an cvs.texi(,587) unmodified file. The next @code{update} will clue cvs.texi(,588) @sc{cvs} in to the fact that the file is unmodified, cvs.texi(,589) and it will reset its stored timestamp so that the file cvs.texi(,590) will not show up in future editor sessions. cvs.texi(,591) @c FIXCVS: Might be nice if "commit" and other commands cvs.texi(,592) @c would reset that timestamp too, but currently commit cvs.texi(,593) @c doesn't. cvs.texi(,594) @c FIXME: Need to talk more about the process of cvs.texi(,595) @c prompting for the log message. Like show an example cvs.texi(,596) @c of what it pops up in the editor, for example. Also cvs.texi(,597) @c a discussion of how to get the "a)bort, c)ontinue, cvs.texi(,598) @c e)dit" prompt and what to do with it. Might also cvs.texi(,599) @c work in the suggestion that if you want a diff, you cvs.texi(,600) @c should make it before running commit (someone cvs.texi(,601) @c suggested that the diff pop up in the editor. I'm cvs.texi(,602) @c not sure that is better than telling people to run cvs.texi(,603) @c "cvs diff" first if that is what they want, but if cvs.texi(,604) @c we want to tell people that, the manual possibly cvs.texi(,605) @c should say it). cvs.texi(,606) cvs.texi(,607) If you want to avoid cvs.texi(,608) starting an editor you can specify the log message on cvs.texi(,609) the command line using the @samp{-m} flag instead, like cvs.texi(,610) this: cvs.texi(,611) cvs.texi(,612) @example cvs.texi(,613) $ cvs commit -m "Added an optimization pass" backend.c cvs.texi(,614) @end example cvs.texi(,615) cvs.texi(,616) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,617) @node Cleaning up cvs.texi(,618) @subsection Cleaning up cvs.texi(,619) @cindex Cleaning up cvs.texi(,620) @cindex Working copy, removing cvs.texi(,621) @cindex Removing your working copy cvs.texi(,622) @cindex Releasing your working copy cvs.texi(,623) cvs.texi(,624) Before you turn to other tasks you decide to remove your working copy of cvs.texi(,625) tc. One acceptable way to do that is of course cvs.texi(,626) cvs.texi(,627) @example cvs.texi(,628) $ cd .. cvs.texi(,629) $ rm -r tc cvs.texi(,630) @end example cvs.texi(,631) cvs.texi(,632) @noindent cvs.texi(,633) but a better way is to use the @code{release} command (@pxref{release}): cvs.texi(,634) cvs.texi(,635) @example cvs.texi(,636) $ cd .. cvs.texi(,637) $ cvs release -d tc cvs.texi(,638) M driver.c cvs.texi(,639) ? tc cvs.texi(,640) You have [1] altered files in this repository. cvs.texi(,641) Are you sure you want to release (and delete) directory `tc': n cvs.texi(,642) ** `release' aborted by user choice. cvs.texi(,643) @end example cvs.texi(,644) cvs.texi(,645) The @code{release} command checks that all your modifications have been cvs.texi(,646) committed. If history logging is enabled it also makes a note in the cvs.texi(,647) history file. @xref{history file}. cvs.texi(,648) cvs.texi(,649) When you use the @samp{-d} flag with @code{release}, it cvs.texi(,650) also removes your working copy. cvs.texi(,651) cvs.texi(,652) In the example above, the @code{release} command wrote a couple of lines cvs.texi(,653) of output. @samp{? tc} means that the file @file{tc} is unknown to @sc{cvs}. cvs.texi(,654) That is nothing to worry about: @file{tc} is the executable compiler, cvs.texi(,655) and it should not be stored in the repository. @xref{cvsignore}, cvs.texi(,656) for information about how to make that warning go away. cvs.texi(,657) @xref{release output}, for a complete explanation of cvs.texi(,658) all possible output from @code{release}. cvs.texi(,659) cvs.texi(,660) @samp{M driver.c} is more serious. It means that the cvs.texi(,661) file @file{driver.c} has been modified since it was cvs.texi(,662) checked out. cvs.texi(,663) cvs.texi(,664) The @code{release} command always finishes by telling cvs.texi(,665) you how many modified files you have in your working cvs.texi(,666) copy of the sources, and then asks you for confirmation cvs.texi(,667) before deleting any files or making any note in the cvs.texi(,668) history file. cvs.texi(,669) cvs.texi(,670) You decide to play it safe and answer @kbd{n @key{RET}} cvs.texi(,671) when @code{release} asks for confirmation. cvs.texi(,672) cvs.texi(,673) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,674) @node Viewing differences cvs.texi(,675) @subsection Viewing differences cvs.texi(,676) @cindex Viewing differences cvs.texi(,677) @cindex Diff cvs.texi(,678) cvs.texi(,679) You do not remember modifying @file{driver.c}, so you want to see what cvs.texi(,680) has happened to that file. cvs.texi(,681) cvs.texi(,682) @example cvs.texi(,683) $ cd tc cvs.texi(,684) $ cvs diff driver.c cvs.texi(,685) @end example cvs.texi(,686) cvs.texi(,687) This command runs @code{diff} to compare the version of @file{driver.c} cvs.texi(,688) that you checked out with your working copy. When you see the output cvs.texi(,689) you remember that you added a command line option that enabled the cvs.texi(,690) optimization pass. You check it in, and release the module. cvs.texi(,691) @c FIXME: we haven't yet defined the term "check in". cvs.texi(,692) cvs.texi(,693) @example cvs.texi(,694) $ cvs commit -m "Added an optimization pass" driver.c cvs.texi(,695) Checking in driver.c; cvs.texi(,696) /usr/local/cvsroot/tc/driver.c,v <-- driver.c cvs.texi(,697) new revision: 1.2; previous revision: 1.1 cvs.texi(,698) done cvs.texi(,699) $ cd .. cvs.texi(,700) $ cvs release -d tc cvs.texi(,701) ? tc cvs.texi(,702) You have [0] altered files in this repository. cvs.texi(,703) Are you sure you want to release (and delete) directory `tc': y cvs.texi(,704) @end example cvs.texi(,705) cvs.texi(,706) @c --------------------------------------------------------------------- cvs.texi(,707) @node Repository cvs.texi(,708) @chapter The Repository cvs.texi(,709) @cindex Repository (intro) cvs.texi(,710) @cindex Repository, example cvs.texi(,711) @cindex Layout of repository cvs.texi(,712) @cindex Typical repository cvs.texi(,713) @cindex /usr/local/cvsroot, as example repository cvs.texi(,714) @cindex cvsroot cvs.texi(,715) cvs.texi(,716) The @sc{cvs} @dfn{repository} stores a complete copy of cvs.texi(,717) all the files and directories which are under version cvs.texi(,718) control. cvs.texi(,719) cvs.texi(,720) Normally, you never access any of the files in the cvs.texi(,721) repository directly. Instead, you use @sc{cvs} cvs.texi(,722) commands to get your own copy of the files into a cvs.texi(,723) @dfn{working directory}, and then cvs.texi(,724) work on that copy. When you've finished a set of cvs.texi(,725) changes, you check (or @dfn{commit}) them back into the cvs.texi(,726) repository. The repository then contains the changes cvs.texi(,727) which you have made, as well as recording exactly what cvs.texi(,728) you changed, when you changed it, and other such cvs.texi(,729) information. Note that the repository is not a cvs.texi(,730) subdirectory of the working directory, or vice versa; cvs.texi(,731) they should be in separate locations. cvs.texi(,732) @c Need some example, e.g. repository cvs.texi(,733) @c /usr/local/cvsroot; working directory cvs.texi(,734) @c /home/joe/sources. But this node is too long cvs.texi(,735) @c as it is; need a little reorganization... cvs.texi(,736) cvs.texi(,737) @cindex :local:, setting up cvs.texi(,738) @sc{cvs} can access a repository by a variety of cvs.texi(,739) means. It might be on the local computer, or it might cvs.texi(,740) be on a computer across the room or across the world. cvs.texi(,741) To distinguish various ways to access a repository, the cvs.texi(,742) repository name can start with an @dfn{access method}. cvs.texi(,743) For example, the access method @code{:local:} means to cvs.texi(,744) access a repository directory, so the repository cvs.texi(,745) @code{:local:/usr/local/cvsroot} means that the cvs.texi(,746) repository is in @file{/usr/local/cvsroot} on the cvs.texi(,747) computer running @sc{cvs}. For information on other cvs.texi(,748) access methods, see @ref{Remote repositories}. cvs.texi(,749) cvs.texi(,750) @c Can se say this more concisely? Like by passing cvs.texi(,751) @c more of the buck to the Remote repositories node? cvs.texi(,752) If the access method is omitted, then if the repository cvs.texi(,753) starts with @samp{/}, then @code{:local:} is cvs.texi(,754) assumed. If it does not start with @samp{/} then either cvs.texi(,755) @code{:ext:} or @code{:server:} is assumed. For cvs.texi(,756) example, if you have a local repository in cvs.texi(,757) @file{/usr/local/cvsroot}, you can use cvs.texi(,758) @code{/usr/local/cvsroot} instead of cvs.texi(,759) @code{:local:/usr/local/cvsroot}. But if (under cvs.texi(,760) Windows NT, for example) your local repository is cvs.texi(,761) @file{c:\src\cvsroot}, then you must specify the access cvs.texi(,762) method, as in @code{:local:c:/src/cvsroot}. cvs.texi(,763) cvs.texi(,764) @c This might appear to go in Repository storage, but cvs.texi(,765) @c actually it is describing something which is quite cvs.texi(,766) @c user-visible, when you do a "cvs co CVSROOT". This cvs.texi(,767) @c isn't necessary the perfect place for that, though. cvs.texi(,768) The repository is split in two parts. @file{$CVSROOT/CVSROOT} contains cvs.texi(,769) administrative files for @sc{cvs}. The other directories contain the actual cvs.texi(,770) user-defined modules. cvs.texi(,771) cvs.texi(,772) @menu cvs.texi(,773) * Specifying a repository:: Telling CVS where your repository is cvs.texi(,774) * Repository storage:: The structure of the repository cvs.texi(,775) * Working directory storage:: The structure of working directories cvs.texi(,776) * Intro administrative files:: Defining modules cvs.texi(,777) * Multiple repositories:: Multiple repositories cvs.texi(,778) * Creating a repository:: Creating a repository cvs.texi(,779) * Backing up:: Backing up a repository cvs.texi(,780) * Moving a repository:: Moving a repository cvs.texi(,781) * Remote repositories:: Accessing repositories on remote machines cvs.texi(,782) * Read-only access:: Granting read-only access to the repository cvs.texi(,783) * Server temporary directory:: The server creates temporary directories cvs.texi(,784) @end menu cvs.texi(,785) cvs.texi(,786) @node Specifying a repository cvs.texi(,787) @section Telling CVS where your repository is cvs.texi(,788) cvs.texi(,789) There are several ways to tell @sc{cvs} cvs.texi(,790) where to find the repository. You can name the cvs.texi(,791) repository on the command line explicitly, with the cvs.texi(,792) @code{-d} (for "directory") option: cvs.texi(,793) cvs.texi(,794) @example cvs.texi(,795) cvs -d /usr/local/cvsroot checkout yoyodyne/tc cvs.texi(,796) @end example cvs.texi(,797) cvs.texi(,798) @cindex .profile, setting CVSROOT in cvs.texi(,799) @cindex .cshrc, setting CVSROOT in cvs.texi(,800) @cindex .tcshrc, setting CVSROOT in cvs.texi(,801) @cindex .bashrc, setting CVSROOT in cvs.texi(,802) @cindex CVSROOT, environment variable cvs.texi(,803) Or you can set the @code{$CVSROOT} environment cvs.texi(,804) variable to an absolute path to the root of the cvs.texi(,805) repository, @file{/usr/local/cvsroot} in this example. cvs.texi(,806) To set @code{$CVSROOT}, @code{csh} and @code{tcsh} cvs.texi(,807) users should have this line in their @file{.cshrc} or cvs.texi(,808) @file{.tcshrc} files: cvs.texi(,809) cvs.texi(,810) @example cvs.texi(,811) setenv CVSROOT /usr/local/cvsroot cvs.texi(,812) @end example cvs.texi(,813) cvs.texi(,814) @noindent cvs.texi(,815) @code{sh} and @code{bash} users should instead have these lines in their cvs.texi(,816) @file{.profile} or @file{.bashrc}: cvs.texi(,817) cvs.texi(,818) @example cvs.texi(,819) CVSROOT=/usr/local/cvsroot cvs.texi(,820) export CVSROOT cvs.texi(,821) @end example cvs.texi(,822) cvs.texi(,823) @cindex Root file, in CVS directory cvs.texi(,824) @cindex CVS/Root file cvs.texi(,825) A repository specified with @code{-d} will cvs.texi(,826) override the @code{$CVSROOT} environment variable. cvs.texi(,827) Once you've checked a working copy out from the cvs.texi(,828) repository, it will remember where its repository is cvs.texi(,829) (the information is recorded in the cvs.texi(,830) @file{CVS/Root} file in the working copy). cvs.texi(,831) cvs.texi(,832) The @code{-d} option and the @file{CVS/Root} file both cvs.texi(,833) override the @code{$CVSROOT} environment variable. If cvs.texi(,834) @code{-d} option differs from @file{CVS/Root}, the cvs.texi(,835) former is used. Of course, for proper operation they cvs.texi(,836) should be two ways of referring to the same repository. cvs.texi(,837) cvs.texi(,838) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,839) @node Repository storage cvs.texi(,840) @section How data is stored in the repository cvs.texi(,841) @cindex Repository, how data is stored cvs.texi(,842) cvs.texi(,843) For most purposes it isn't important @emph{how} cvs.texi(,844) @sc{cvs} stores information in the repository. In cvs.texi(,845) fact, the format has changed in the past, and is likely cvs.texi(,846) to change in the future. Since in almost all cases one cvs.texi(,847) accesses the repository via @sc{cvs} commands, such cvs.texi(,848) changes need not be disruptive. cvs.texi(,849) cvs.texi(,850) However, in some cases it may be necessary to cvs.texi(,851) understand how @sc{cvs} stores data in the repository, cvs.texi(,852) for example you might need to track down @sc{cvs} locks cvs.texi(,853) (@pxref{Concurrency}) or you might need to deal with cvs.texi(,854) the file permissions appropriate for the repository. cvs.texi(,855) cvs.texi(,856) @menu cvs.texi(,857) * Repository files:: What files are stored in the repository cvs.texi(,858) * File permissions:: File permissions cvs.texi(,859) * Windows permissions:: Issues specific to Windows cvs.texi(,860) * Attic:: Some files are stored in the Attic cvs.texi(,861) * CVS in repository:: Additional information in CVS directory cvs.texi(,862) * Locks:: CVS locks control concurrent accesses cvs.texi(,863) * CVSROOT storage:: A few things about CVSROOT are different cvs.texi(,864) @end menu cvs.texi(,865) cvs.texi(,866) @node Repository files cvs.texi(,867) @subsection Where files are stored within the repository cvs.texi(,868) cvs.texi(,869) @c @cindex Filenames, legal cvs.texi(,870) @c @cindex Legal filenames cvs.texi(,871) @c Somewhere we need to say something about legitimate cvs.texi(,872) @c characters in filenames in working directory and cvs.texi(,873) @c repository. Not "/" (not even on non-unix). And cvs.texi(,874) @c here is a specific set of issues: cvs.texi(,875) @c Files starting with a - are handled inconsistently. They can not cvs.texi(,876) @c be added to a repository with an add command, because it they are cvs.texi(,877) @c interpreted as a switch. They can appear in a repository if they are cvs.texi(,878) @c part of a tree that is imported. They can not be removed from the tree cvs.texi(,879) @c once they are there. cvs.texi(,880) @c Note that "--" *is* supported (as a cvs.texi(,881) @c consequence of using GNU getopt). Should document cvs.texi(,882) @c this somewhere ("Common options"?). The other usual technique, cvs.texi(,883) @c "./-foo", isn't as effective, at least for "cvs add" cvs.texi(,884) @c which doesn't support pathnames containing "/". cvs.texi(,885) cvs.texi(,886) The overall structure of the repository is a directory cvs.texi(,887) tree corresponding to the directories in the working cvs.texi(,888) directory. For example, supposing the repository is in cvs.texi(,889) cvs.texi(,890) @example cvs.texi(,891) /usr/local/cvsroot cvs.texi(,892) @end example cvs.texi(,893) cvs.texi(,894) @noindent cvs.texi(,895) here is a possible directory tree (showing only the cvs.texi(,896) directories): cvs.texi(,897) cvs.texi(,898) @example cvs.texi(,899) @t{/usr} cvs.texi(,900) | cvs.texi(,901) +--@t{local} cvs.texi(,902) | | cvs.texi(,903) | +--@t{cvsroot} cvs.texi(,904) | | | cvs.texi(,905) | | +--@t{CVSROOT} cvs.texi(,906) | (administrative files) cvs.texi(,907) | cvs.texi(,908) +--@t{gnu} cvs.texi(,909) | | cvs.texi(,910) | +--@t{diff} cvs.texi(,911) | | (source code to @sc{gnu} diff) cvs.texi(,912) | | cvs.texi(,913) | +--@t{rcs} cvs.texi(,914) | | (source code to @sc{rcs}) cvs.texi(,915) | | cvs.texi(,916) | +--@t{cvs} cvs.texi(,917) | (source code to @sc{cvs}) cvs.texi(,918) | cvs.texi(,919) +--@t{yoyodyne} cvs.texi(,920) | cvs.texi(,921) +--@t{tc} cvs.texi(,922) | | cvs.texi(,923) | +--@t{man} cvs.texi(,924) | | cvs.texi(,925) | +--@t{testing} cvs.texi(,926) | cvs.texi(,927) +--(other Yoyodyne software) cvs.texi(,928) @end example cvs.texi(,929) cvs.texi(,930) With the directories are @dfn{history files} for each file cvs.texi(,931) under version control. The name of the history file is cvs.texi(,932) the name of the corresponding file with @samp{,v} cvs.texi(,933) appended to the end. Here is what the repository for cvs.texi(,934) the @file{yoyodyne/tc} directory might look like: cvs.texi(,935) @c FIXME: Should also mention CVS (CVSREP) cvs.texi(,936) @c FIXME? Should we introduce Attic with an xref to cvs.texi(,937) @c Attic? Not sure whether that is a good idea or not. cvs.texi(,938) @example cvs.texi(,939) @code{$CVSROOT} cvs.texi(,940) | cvs.texi(,941) +--@t{yoyodyne} cvs.texi(,942) | | cvs.texi(,943) | +--@t{tc} cvs.texi(,944) | | | cvs.texi(,945) +--@t{Makefile,v} cvs.texi(,946) +--@t{backend.c,v} cvs.texi(,947) +--@t{driver.c,v} cvs.texi(,948) +--@t{frontend.c,v} cvs.texi(,949) +--@t{parser.c,v} cvs.texi(,950) +--@t{man} cvs.texi(,951) | | cvs.texi(,952) | +--@t{tc.1,v} cvs.texi(,953) | cvs.texi(,954) +--@t{testing} cvs.texi(,955) | cvs.texi(,956) +--@t{testpgm.t,v} cvs.texi(,957) +--@t{test2.t,v} cvs.texi(,958) @end example cvs.texi(,959) cvs.texi(,960) @cindex History files cvs.texi(,961) @cindex RCS history files cvs.texi(,962) @c The first sentence, about what history files cvs.texi(,963) @c contain, is kind of redundant with our intro to what the cvs.texi(,964) @c repository does in node Repository.... cvs.texi(,965) The history files contain, among other things, enough cvs.texi(,966) information to recreate any revision of the file, a log cvs.texi(,967) of all commit messages and the user-name of the person cvs.texi(,968) who committed the revision. The history files are cvs.texi(,969) known as @dfn{RCS files}, because the first program to cvs.texi(,970) store files in that format was a version control system cvs.texi(,971) known as @sc{rcs}. For a full cvs.texi(,972) description of the file format, see the @code{man} page cvs.texi(,973) @cite{rcsfile(5)}, distributed with @sc{rcs}, or the cvs.texi(,974) file @file{doc/RCSFILES} in the @sc{cvs} source cvs.texi(,975) distribution. This cvs.texi(,976) file format has become very common---many systems other cvs.texi(,977) than @sc{cvs} or @sc{rcs} can at least import history cvs.texi(,978) files in this format. cvs.texi(,979) @c FIXME: Think about including documentation for this cvs.texi(,980) @c rather than citing it? In the long run, getting cvs.texi(,981) @c this to be a standard (not sure if we can cope with cvs.texi(,982) @c a standards process as formal as IEEE/ANSI/ISO/etc, cvs.texi(,983) @c though...) is the way to go, so maybe citing is cvs.texi(,984) @c better. cvs.texi(,985) cvs.texi(,986) The @sc{rcs} files used in @sc{cvs} differ in a few cvs.texi(,987) ways from the standard format. The biggest difference cvs.texi(,988) is magic branches; for more information see @ref{Magic cvs.texi(,989) branch numbers}. Also in @sc{cvs} the valid tag names cvs.texi(,990) are a subset of what @sc{rcs} accepts; for @sc{cvs}'s cvs.texi(,991) rules see @ref{Tags}. cvs.texi(,992) cvs.texi(,993) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,994) @node File permissions cvs.texi(,995) @subsection File permissions cvs.texi(,996) @c -- Move this to @node Creating a repository or similar cvs.texi(,997) @cindex Security, file permissions in repository cvs.texi(,998) @cindex File permissions, general cvs.texi(,999) @cindex Permissions, general cvs.texi(,1000) @c FIXME: we need to somehow reflect "permissions in cvs.texi(,1001) @c repository" versus "permissions in working cvs.texi(,1002) @c directory" in the index entries. cvs.texi(,1003) @cindex Group cvs.texi(,1004) @cindex Read-only files, in repository cvs.texi(,1005) All @samp{,v} files are created read-only, and you cvs.texi(,1006) should not change the permission of those files. The cvs.texi(,1007) directories inside the repository should be writable by cvs.texi(,1008) the persons that have permission to modify the files in cvs.texi(,1009) each directory. This normally means that you must cvs.texi(,1010) create a UNIX group (see group(5)) consisting of the cvs.texi(,1011) persons that are to edit the files in a project, and cvs.texi(,1012) set up the repository so that it is that group that cvs.texi(,1013) owns the directory. cvs.texi(,1014) (On some systems, you also need to set the set-group-ID-on-execution bit cvs.texi(,1015) on the repository directories (see chmod(1)) so that newly-created files cvs.texi(,1016) and directories get the group-ID of the parent directory rather than cvs.texi(,1017) that of the current process.) cvs.texi(,1018) cvs.texi(,1019) @c See also comment in commitinfo node regarding cases cvs.texi(,1020) @c which are really awkward with unix groups. cvs.texi(,1021) cvs.texi(,1022) This means that you can only control access to files on cvs.texi(,1023) a per-directory basis. cvs.texi(,1024) cvs.texi(,1025) Note that users must also have write access to check cvs.texi(,1026) out files, because @sc{cvs} needs to create lock files cvs.texi(,1027) (@pxref{Concurrency}). You can use LockDir in CVSROOT/config cvs.texi(,1028) to put the lock files somewhere other than in the repository cvs.texi(,1029) if you want to allow read-only access to some directories cvs.texi(,1030) (@pxref{config}). cvs.texi(,1031) cvs.texi(,1032) @c CVS seems to use CVSUMASK in picking permissions for cvs.texi(,1033) @c val-tags, but maybe we should say more about this. cvs.texi(,1034) @c Like val-tags gets created by someone who doesn't cvs.texi(,1035) @c have CVSUMASK set right? cvs.texi(,1036) Also note that users must have write access to the cvs.texi(,1037) @file{CVSROOT/val-tags} file. @sc{cvs} uses it to keep cvs.texi(,1038) track of what tags are valid tag names (it is sometimes cvs.texi(,1039) updated when tags are used, as well as when they are cvs.texi(,1040) created). cvs.texi(,1041) cvs.texi(,1042) Each @sc{rcs} file will be owned by the user who last cvs.texi(,1043) checked it in. This has little significance; what cvs.texi(,1044) really matters is who owns the directories. cvs.texi(,1045) cvs.texi(,1046) @cindex CVSUMASK, environment variable cvs.texi(,1047) @cindex Umask, for repository files cvs.texi(,1048) @sc{cvs} tries to set up reasonable file permissions cvs.texi(,1049) for new directories that are added inside the tree, but cvs.texi(,1050) you must fix the permissions manually when a new cvs.texi(,1051) directory should have different permissions than its cvs.texi(,1052) parent directory. If you set the @code{CVSUMASK} cvs.texi(,1053) environment variable that will control the file cvs.texi(,1054) permissions which @sc{cvs} uses in creating directories cvs.texi(,1055) and/or files in the repository. @code{CVSUMASK} does cvs.texi(,1056) not affect the file permissions in the working cvs.texi(,1057) directory; such files have the permissions which are cvs.texi(,1058) typical for newly created files, except that sometimes cvs.texi(,1059) @sc{cvs} creates them read-only (see the sections on cvs.texi(,1060) watches, @ref{Setting a watch}; -r, @ref{Global cvs.texi(,1061) options}; or @code{CVSREAD}, @ref{Environment variables}). cvs.texi(,1062) @c FIXME: Need more discussion of which cvs.texi(,1063) @c group should own the file in the repository. cvs.texi(,1064) @c Include a somewhat detailed example of the usual cvs.texi(,1065) @c case where CVSUMASK is 007, the developers are all cvs.texi(,1066) @c in a group, and that group owns stuff in the cvs.texi(,1067) @c repository. Need to talk about group ownership of cvs.texi(,1068) @c newly-created directories/files (on some unices, cvs.texi(,1069) @c such as SunOS4, setting the setgid bit on the cvs.texi(,1070) @c directories will make files inherit the directory's cvs.texi(,1071) @c group. On other unices, your mileage may vary. I cvs.texi(,1072) @c can't remember what POSIX says about this, if cvs.texi(,1073) @c anything). cvs.texi(,1074) cvs.texi(,1075) Note that using the client/server @sc{cvs} cvs.texi(,1076) (@pxref{Remote repositories}), there is no good way to cvs.texi(,1077) set @code{CVSUMASK}; the setting on the client machine cvs.texi(,1078) has no effect. If you are connecting with @code{rsh}, you cvs.texi(,1079) can set @code{CVSUMASK} in @file{.bashrc} or @file{.cshrc}, as cvs.texi(,1080) described in the documentation for your operating cvs.texi(,1081) system. This behavior might change in future versions cvs.texi(,1082) of @sc{cvs}; do not rely on the setting of cvs.texi(,1083) @code{CVSUMASK} on the client having no effect. cvs.texi(,1084) @c FIXME: need to explain what a umask is or cite cvs.texi(,1085) @c someplace which does. cvs.texi(,1086) @c cvs.texi(,1087) @c There is also a larger (largely separate) issue cvs.texi(,1088) @c about the meaning of CVSUMASK in a non-unix context. cvs.texi(,1089) @c For example, whether there is cvs.texi(,1090) @c an equivalent which fits better into other cvs.texi(,1091) @c protection schemes like POSIX.6, VMS, &c. cvs.texi(,1092) @c cvs.texi(,1093) @c FIXME: Need one place which discusses this cvs.texi(,1094) @c read-only files thing. Why would one use -r or cvs.texi(,1095) @c CVSREAD? Why would one use watches? How do they cvs.texi(,1096) @c interact? cvs.texi(,1097) @c cvs.texi(,1098) @c FIXME: We need to state cvs.texi(,1099) @c whether using CVSUMASK removes the need for manually cvs.texi(,1100) @c fixing permissions (in fact, if we are going to mention cvs.texi(,1101) @c manually fixing permission, we better document a lot cvs.texi(,1102) @c better just what we mean by "fix"). cvs.texi(,1103) cvs.texi(,1104) Using pserver, you will generally need stricter cvs.texi(,1105) permissions on the @sc{cvsroot} directory and cvs.texi(,1106) directories above it in the tree; see @ref{Password cvs.texi(,1107) authentication security}. cvs.texi(,1108) cvs.texi(,1109) @cindex Setuid cvs.texi(,1110) @cindex Setgid cvs.texi(,1111) @cindex Security, setuid cvs.texi(,1112) @cindex Installed images (VMS) cvs.texi(,1113) Some operating systems have features which allow a cvs.texi(,1114) particular program to run with the ability to perform cvs.texi(,1115) operations which the caller of the program could not. cvs.texi(,1116) For example, the set user ID (setuid) or set group ID cvs.texi(,1117) (setgid) features of unix or the installed image cvs.texi(,1118) feature of VMS. @sc{cvs} was not written to use such cvs.texi(,1119) features and therefore attempting to install @sc{cvs} in cvs.texi(,1120) this fashion will provide protection against only cvs.texi(,1121) accidental lapses; anyone who is trying to circumvent cvs.texi(,1122) the measure will be able to do so, and depending on how cvs.texi(,1123) you have set it up may gain access to more than just cvs.texi(,1124) @sc{cvs}. You may wish to instead consider pserver. It cvs.texi(,1125) shares some of the same attributes, in terms of cvs.texi(,1126) possibly providing a false sense of security or opening cvs.texi(,1127) security holes wider than the ones you are trying to cvs.texi(,1128) fix, so read the documentation on pserver security cvs.texi(,1129) carefully if you are considering this option cvs.texi(,1130) (@ref{Password authentication security}). cvs.texi(,1131) cvs.texi(,1132) @node Windows permissions cvs.texi(,1133) @subsection File Permission issues specific to Windows cvs.texi(,1134) @cindex Windows, and permissions cvs.texi(,1135) @cindex File permissions, Windows-specific cvs.texi(,1136) @cindex Permissions, Windows-specific cvs.texi(,1137) cvs.texi(,1138) Some file permission issues are specific to Windows cvs.texi(,1139) operating systems (Windows 95, Windows NT, and cvs.texi(,1140) presumably future operating systems in this family. cvs.texi(,1141) Some of the following might apply to OS/2 but I'm not cvs.texi(,1142) sure). cvs.texi(,1143) cvs.texi(,1144) If you are using local @sc{cvs} and the repository is on a cvs.texi(,1145) networked file system which is served by the Samba SMB cvs.texi(,1146) server, some people have reported problems with cvs.texi(,1147) permissions. Enabling WRITE=YES in the samba cvs.texi(,1148) configuration is said to fix/workaround it. cvs.texi(,1149) Disclaimer: I haven't investigated enough to know the cvs.texi(,1150) implications of enabling that option, nor do I know cvs.texi(,1151) whether there is something which @sc{cvs} could be doing cvs.texi(,1152) differently in order to avoid the problem. If you find cvs.texi(,1153) something out, please let us know as described in cvs.texi(,1154) @ref{BUGS}. cvs.texi(,1155) cvs.texi(,1156) @node Attic cvs.texi(,1157) @subsection The attic cvs.texi(,1158) @cindex Attic cvs.texi(,1159) cvs.texi(,1160) You will notice that sometimes @sc{cvs} stores an cvs.texi(,1161) @sc{rcs} file in the @code{Attic}. For example, if the cvs.texi(,1162) @sc{cvsroot} is @file{/usr/local/cvsroot} and we are cvs.texi(,1163) talking about the file @file{backend.c} in the cvs.texi(,1164) directory @file{yoyodyne/tc}, then the file normally cvs.texi(,1165) would be in cvs.texi(,1166) cvs.texi(,1167) @example cvs.texi(,1168) /usr/local/cvsroot/yoyodyne/tc/backend.c,v cvs.texi(,1169) @end example cvs.texi(,1170) cvs.texi(,1171) @noindent cvs.texi(,1172) but if it goes in the attic, it would be in cvs.texi(,1173) cvs.texi(,1174) @example cvs.texi(,1175) /usr/local/cvsroot/yoyodyne/tc/Attic/backend.c,v cvs.texi(,1176) @end example cvs.texi(,1177) cvs.texi(,1178) @noindent cvs.texi(,1179) @cindex Dead state cvs.texi(,1180) instead. It should not matter from a user point of cvs.texi(,1181) view whether a file is in the attic; @sc{cvs} keeps cvs.texi(,1182) track of this and looks in the attic when it needs to. cvs.texi(,1183) But in case you want to know, the rule is that the RCS cvs.texi(,1184) file is stored in the attic if and only if the head cvs.texi(,1185) revision on the trunk has state @code{dead}. A cvs.texi(,1186) @code{dead} state means that file has been removed, or cvs.texi(,1187) never added, for that revision. For example, if you cvs.texi(,1188) add a file on a branch, it will have a trunk revision cvs.texi(,1189) in @code{dead} state, and a branch revision in a cvs.texi(,1190) non-@code{dead} state. cvs.texi(,1191) @c Probably should have some more concrete examples cvs.texi(,1192) @c here, or somewhere (not sure exactly how we should cvs.texi(,1193) @c arrange the discussion of the dead state, versus cvs.texi(,1194) @c discussion of the attic). cvs.texi(,1195) cvs.texi(,1196) @node CVS in repository cvs.texi(,1197) @subsection The CVS directory in the repository cvs.texi(,1198) @cindex CVS directory, in repository cvs.texi(,1199) cvs.texi(,1200) The @file{CVS} directory in each repository directory cvs.texi(,1201) contains information such as file attributes (in a file cvs.texi(,1202) called @file{CVS/fileattr}. In the cvs.texi(,1203) future additional files may be added to this directory, cvs.texi(,1204) so implementations should silently ignore additional cvs.texi(,1205) files. cvs.texi(,1206) cvs.texi(,1207) This behavior is implemented only by @sc{cvs} 1.7 and cvs.texi(,1208) later; for details see @ref{Watches Compatibility}. cvs.texi(,1209) cvs.texi(,1210) The format of the fileattr file is a series of entries cvs.texi(,1211) of the following form (where @samp{@{} and @samp{@}} cvs.texi(,1212) means the text between the braces can be repeated zero cvs.texi(,1213) or more times): cvs.texi(,1214) cvs.texi(,1215) @var{ent-type} @var{filename} @var{attrname} = @var{attrval} cvs.texi(,1216) @{; @var{attrname} = @var{attrval}@} cvs.texi(,1217) cvs.texi(,1218) @var{ent-type} is @samp{F} for a file, in which case the entry specifies the cvs.texi(,1219) attributes for that file. cvs.texi(,1220) cvs.texi(,1221) @var{ent-type} is @samp{D}, cvs.texi(,1222) and @var{filename} empty, to specify default attributes cvs.texi(,1223) to be used for newly added files. cvs.texi(,1224) cvs.texi(,1225) Other @var{ent-type} are reserved for future expansion. @sc{cvs} 1.9 and older cvs.texi(,1226) will delete them any time it writes file attributes. cvs.texi(,1227) @sc{cvs} 1.10 and later will preserve them. cvs.texi(,1228) cvs.texi(,1229) Note that the order of the lines is not significant; cvs.texi(,1230) a program writing the fileattr file may cvs.texi(,1231) rearrange them at its convenience. cvs.texi(,1232) cvs.texi(,1233) There is currently no way of quoting tabs or linefeeds in the cvs.texi(,1234) filename, @samp{=} in @var{attrname}, cvs.texi(,1235) @samp{;} in @var{attrval}, etc. Note: some implementations also cvs.texi(,1236) don't handle a NUL character in any of the fields, but cvs.texi(,1237) implementations are encouraged to allow it. cvs.texi(,1238) cvs.texi(,1239) By convention, @var{attrname} starting with @samp{_} is for an attribute given cvs.texi(,1240) special meaning by @sc{cvs}; other @var{attrname}s are for user-defined attributes cvs.texi(,1241) (or will be, once implementations start supporting user-defined attributes). cvs.texi(,1242) cvs.texi(,1243) Builtin attributes: cvs.texi(,1244) cvs.texi(,1245) @table @code cvs.texi(,1246) @item _watched cvs.texi(,1247) Present means the file is watched and should be checked out cvs.texi(,1248) read-only. cvs.texi(,1249) cvs.texi(,1250) @item _watchers cvs.texi(,1251) Users with watches for this file. Value is cvs.texi(,1252) @var{watcher} > @var{type} @{ , @var{watcher} > @var{type} @} cvs.texi(,1253) where @var{watcher} is a username, and @var{type} cvs.texi(,1254) is zero or more of edit,unedit,commit separated by cvs.texi(,1255) @samp{+} (that is, nothing if none; there is no "none" or "all" keyword). cvs.texi(,1256) cvs.texi(,1257) @item _editors cvs.texi(,1258) Users editing this file. Value is cvs.texi(,1259) @var{editor} > @var{val} @{ , @var{editor} > @var{val} @} cvs.texi(,1260) where @var{editor} is a username, and @var{val} is cvs.texi(,1261) @var{time}+@var{hostname}+@var{pathname}, where cvs.texi(,1262) @var{time} is when the @code{cvs edit} command (or cvs.texi(,1263) equivalent) happened, cvs.texi(,1264) and @var{hostname} and @var{pathname} are for the working directory. cvs.texi(,1265) @end table cvs.texi(,1266) cvs.texi(,1267) Example: cvs.texi(,1268) cvs.texi(,1269) @c FIXME: sanity.sh should contain a similar test case cvs.texi(,1270) @c so we can compare this example from something from cvs.texi(,1271) @c Real Life(TM). See cvsclient.texi (under Notify) for more cvs.texi(,1272) @c discussion of the date format of _editors. cvs.texi(,1273) @example cvs.texi(,1274) Ffile1 _watched=;_watchers=joe>edit,mary>commit cvs.texi(,1275) Ffile2 _watched=;_editors=sue>8 Jan 1975+workstn1+/home/sue/cvs cvs.texi(,1276) D _watched= cvs.texi(,1277) @end example cvs.texi(,1278) cvs.texi(,1279) @noindent cvs.texi(,1280) means that the file @file{file1} should be checked out cvs.texi(,1281) read-only. Furthermore, joe is watching for edits and cvs.texi(,1282) mary is watching for commits. The file @file{file2} cvs.texi(,1283) should be checked out read-only; sue started editing it cvs.texi(,1284) on 8 Jan 1975 in the directory @file{/home/sue/cvs} on cvs.texi(,1285) the machine @code{workstn1}. Future files which are cvs.texi(,1286) added should be checked out read-only. To represent cvs.texi(,1287) this example here, we have shown a space after cvs.texi(,1288) @samp{D}, @samp{Ffile1}, and @samp{Ffile2}, but in fact cvs.texi(,1289) there must be a single tab character there and no spaces. cvs.texi(,1290) cvs.texi(,1291) @node Locks cvs.texi(,1292) @subsection CVS locks in the repository cvs.texi(,1293) cvs.texi(,1294) @cindex #cvs.rfl, technical details cvs.texi(,1295) @cindex #cvs.wfl, technical details cvs.texi(,1296) @cindex #cvs.lock, technical details cvs.texi(,1297) @cindex Locks, cvs, technical details cvs.texi(,1298) For an introduction to @sc{cvs} locks focusing on cvs.texi(,1299) user-visible behavior, see @ref{Concurrency}. The cvs.texi(,1300) following section is aimed at people who are writing cvs.texi(,1301) tools which want to access a @sc{cvs} repository without cvs.texi(,1302) interfering with other tools accessing the same cvs.texi(,1303) repository. If you find yourself confused by concepts cvs.texi(,1304) described here, like @dfn{read lock}, @dfn{write lock}, cvs.texi(,1305) and @dfn{deadlock}, you might consult the literature on cvs.texi(,1306) operating systems or databases. cvs.texi(,1307) cvs.texi(,1308) @cindex #cvs.tfl cvs.texi(,1309) Any file in the repository with a name starting cvs.texi(,1310) with @file{#cvs.rfl.} is a read lock. Any file in cvs.texi(,1311) the repository with a name starting with cvs.texi(,1312) @file{#cvs.wfl} is a write lock. Old versions of @sc{cvs} cvs.texi(,1313) (before @sc{cvs} 1.5) also created files with names starting cvs.texi(,1314) with @file{#cvs.tfl}, but they are not discussed here. cvs.texi(,1315) The directory @file{#cvs.lock} serves as a master cvs.texi(,1316) lock. That is, one must obtain this lock first before cvs.texi(,1317) creating any of the other locks. cvs.texi(,1318) cvs.texi(,1319) To obtain a readlock, first create the @file{#cvs.lock} cvs.texi(,1320) directory. This operation must be atomic (which should cvs.texi(,1321) be true for creating a directory under most operating cvs.texi(,1322) systems). If it fails because the directory already cvs.texi(,1323) existed, wait for a while and try again. After cvs.texi(,1324) obtaining the @file{#cvs.lock} lock, create a file cvs.texi(,1325) whose name is @file{#cvs.rfl.} followed by information cvs.texi(,1326) of your choice (for example, hostname and process cvs.texi(,1327) identification number). Then remove the cvs.texi(,1328) @file{#cvs.lock} directory to release the master lock. cvs.texi(,1329) Then proceed with reading the repository. When you are cvs.texi(,1330) done, remove the @file{#cvs.rfl} file to release the cvs.texi(,1331) read lock. cvs.texi(,1332) cvs.texi(,1333) To obtain a writelock, first create the cvs.texi(,1334) @file{#cvs.lock} directory, as with a readlock. Then cvs.texi(,1335) check that there are no files whose names start with cvs.texi(,1336) @file{#cvs.rfl.}. If there are, remove cvs.texi(,1337) @file{#cvs.lock}, wait for a while, and try again. If cvs.texi(,1338) there are no readers, then create a file whose name is cvs.texi(,1339) @file{#cvs.wfl} followed by information of your choice cvs.texi(,1340) (for example, hostname and process identification cvs.texi(,1341) number). Hang on to the @file{#cvs.lock} lock. Proceed cvs.texi(,1342) with writing the repository. When you are done, first cvs.texi(,1343) remove the @file{#cvs.wfl} file and then the cvs.texi(,1344) @file{#cvs.lock} directory. Note that unlike the cvs.texi(,1345) @file{#cvs.rfl} file, the @file{#cvs.wfl} file is just cvs.texi(,1346) informational; it has no effect on the locking operation cvs.texi(,1347) beyond what is provided by holding on to the cvs.texi(,1348) @file{#cvs.lock} lock itself. cvs.texi(,1349) cvs.texi(,1350) Note that each lock (writelock or readlock) only locks cvs.texi(,1351) a single directory in the repository, including cvs.texi(,1352) @file{Attic} and @file{CVS} but not including cvs.texi(,1353) subdirectories which represent other directories under cvs.texi(,1354) version control. To lock an entire tree, you need to cvs.texi(,1355) lock each directory (note that if you fail to obtain cvs.texi(,1356) any lock you need, you must release the whole tree cvs.texi(,1357) before waiting and trying again, to avoid deadlocks). cvs.texi(,1358) cvs.texi(,1359) Note also that @sc{cvs} expects writelocks to control cvs.texi(,1360) access to individual @file{foo,v} files. @sc{rcs} has cvs.texi(,1361) a scheme where the @file{,foo,} file serves as a lock, cvs.texi(,1362) but @sc{cvs} does not implement it and so taking out a cvs.texi(,1363) @sc{cvs} writelock is recommended. See the comments at cvs.texi(,1364) rcs_internal_lockfile in the @sc{cvs} source code for cvs.texi(,1365) further discussion/rationale. cvs.texi(,1366) cvs.texi(,1367) @node CVSROOT storage cvs.texi(,1368) @subsection How files are stored in the CVSROOT directory cvs.texi(,1369) @cindex CVSROOT, storage of files cvs.texi(,1370) cvs.texi(,1371) The @file{$CVSROOT/CVSROOT} directory contains the cvs.texi(,1372) various administrative files. In some ways this cvs.texi(,1373) directory is just like any other directory in the cvs.texi(,1374) repository; it contains @sc{rcs} files whose names end cvs.texi(,1375) in @samp{,v}, and many of the @sc{cvs} commands operate cvs.texi(,1376) on it the same way. However, there are a few cvs.texi(,1377) differences. cvs.texi(,1378) cvs.texi(,1379) For each administrative file, in addition to the cvs.texi(,1380) @sc{rcs} file, there is also a checked out copy of the cvs.texi(,1381) file. For example, there is an @sc{rcs} file cvs.texi(,1382) @file{loginfo,v} and a file @file{loginfo} which cvs.texi(,1383) contains the latest revision contained in cvs.texi(,1384) @file{loginfo,v}. When you check in an administrative cvs.texi(,1385) file, @sc{cvs} should print cvs.texi(,1386) cvs.texi(,1387) @example cvs.texi(,1388) cvs commit: Rebuilding administrative file database cvs.texi(,1389) @end example cvs.texi(,1390) cvs.texi(,1391) @noindent cvs.texi(,1392) and update the checked out copy in cvs.texi(,1393) @file{$CVSROOT/CVSROOT}. If it does not, there is cvs.texi(,1394) something wrong (@pxref{BUGS}). To add your own files cvs.texi(,1395) to the files to be updated in this fashion, you can add cvs.texi(,1396) them to the @file{checkoutlist} administrative file cvs.texi(,1397) (@pxref{checkoutlist}). cvs.texi(,1398) cvs.texi(,1399) @cindex modules.db cvs.texi(,1400) @cindex modules.pag cvs.texi(,1401) @cindex modules.dir cvs.texi(,1402) By default, the @file{modules} file behaves as cvs.texi(,1403) described above. If the modules file is very large, cvs.texi(,1404) storing it as a flat text file may make looking up cvs.texi(,1405) modules slow (I'm not sure whether this is as much of a cvs.texi(,1406) concern now as when @sc{cvs} first evolved this cvs.texi(,1407) feature; I haven't seen benchmarks). Therefore, by cvs.texi(,1408) making appropriate edits to the @sc{cvs} source code cvs.texi(,1409) one can store the modules file in a database which cvs.texi(,1410) implements the @code{ndbm} interface, such as Berkeley cvs.texi(,1411) db or GDBM. If this option is in use, then the modules cvs.texi(,1412) database will be stored in the files @file{modules.db}, cvs.texi(,1413) @file{modules.pag}, and/or @file{modules.dir}. cvs.texi(,1414) @c I think fileattr also will use the database stuff. cvs.texi(,1415) @c Anything else? cvs.texi(,1416) cvs.texi(,1417) For information on the meaning of the various cvs.texi(,1418) administrative files, see @ref{Administrative files}. cvs.texi(,1419) cvs.texi(,1420) @node Working directory storage cvs.texi(,1421) @section How data is stored in the working directory cvs.texi(,1422) cvs.texi(,1423) @c FIXME: Somewhere we should discuss timestamps (test cvs.texi(,1424) @c case "stamps" in sanity.sh). But not here. Maybe cvs.texi(,1425) @c in some kind of "working directory" chapter which cvs.texi(,1426) @c would encompass the "Builds" one? But I'm not sure cvs.texi(,1427) @c whether that is a good organization (is it based on cvs.texi(,1428) @c what the user wants to do?). cvs.texi(,1429) cvs.texi(,1430) @cindex CVS directory, in working directory cvs.texi(,1431) While we are discussing @sc{cvs} internals which may cvs.texi(,1432) become visible from time to time, we might as well talk cvs.texi(,1433) about what @sc{cvs} puts in the @file{CVS} directories cvs.texi(,1434) in the working directories. As with the repository, cvs.texi(,1435) @sc{cvs} handles this information and one can usually cvs.texi(,1436) access it via @sc{cvs} commands. But in some cases it cvs.texi(,1437) may be useful to look at it, and other programs, such cvs.texi(,1438) as the @code{jCVS} graphical user interface or the cvs.texi(,1439) @code{VC} package for emacs, may need to look at it. cvs.texi(,1440) Such programs should follow the recommendations in this cvs.texi(,1441) section if they hope to be able to work with other cvs.texi(,1442) programs which use those files, including future cvs.texi(,1443) versions of the programs just mentioned and the cvs.texi(,1444) command-line @sc{cvs} client. cvs.texi(,1445) cvs.texi(,1446) The @file{CVS} directory contains several files. cvs.texi(,1447) Programs which are reading this directory should cvs.texi(,1448) silently ignore files which are in the directory but cvs.texi(,1449) which are not documented here, to allow for future cvs.texi(,1450) expansion. cvs.texi(,1451) cvs.texi(,1452) The files are stored according to the text file cvs.texi(,1453) convention for the system in question. This means that cvs.texi(,1454) working directories are not portable between systems cvs.texi(,1455) with differing conventions for storing text files. cvs.texi(,1456) This is intentional, on the theory that the files being cvs.texi(,1457) managed by @sc{cvs} probably will not be portable between cvs.texi(,1458) such systems either. cvs.texi(,1459) cvs.texi(,1460) @table @file cvs.texi(,1461) @item Root cvs.texi(,1462) This file contains the current @sc{cvs} root, as cvs.texi(,1463) described in @ref{Specifying a repository}. cvs.texi(,1464) cvs.texi(,1465) @cindex Repository file, in CVS directory cvs.texi(,1466) @cindex CVS/Repository file cvs.texi(,1467) @item Repository cvs.texi(,1468) This file contains the directory within the repository cvs.texi(,1469) which the current directory corresponds with. It can cvs.texi(,1470) be either an absolute pathname or a relative pathname; cvs.texi(,1471) @sc{cvs} has had the ability to read either format cvs.texi(,1472) since at least version 1.3 or so. The relative cvs.texi(,1473) pathname is relative to the root, and is the more cvs.texi(,1474) sensible approach, but the absolute pathname is quite cvs.texi(,1475) common and implementations should accept either. For cvs.texi(,1476) example, after the command cvs.texi(,1477) cvs.texi(,1478) @example cvs.texi(,1479) cvs -d :local:/usr/local/cvsroot checkout yoyodyne/tc cvs.texi(,1480) @end example cvs.texi(,1481) cvs.texi(,1482) @noindent cvs.texi(,1483) @file{Root} will contain cvs.texi(,1484) cvs.texi(,1485) @example cvs.texi(,1486) :local:/usr/local/cvsroot cvs.texi(,1487) @end example cvs.texi(,1488) cvs.texi(,1489) @noindent cvs.texi(,1490) and @file{Repository} will contain either cvs.texi(,1491) cvs.texi(,1492) @example cvs.texi(,1493) /usr/local/cvsroot/yoyodyne/tc cvs.texi(,1494) @end example cvs.texi(,1495) cvs.texi(,1496) @noindent cvs.texi(,1497) or cvs.texi(,1498) cvs.texi(,1499) @example cvs.texi(,1500) yoyodyne/tc cvs.texi(,1501) @end example cvs.texi(,1502) cvs.texi(,1503) If the particular working directory does not correspond cvs.texi(,1504) to a directory in the repository, then @file{Repository} cvs.texi(,1505) should contain @file{CVSROOT/Emptydir}. cvs.texi(,1506) @cindex Emptydir, in CVSROOT directory cvs.texi(,1507) @cindex CVSROOT/Emptydir directory cvs.texi(,1508) cvs.texi(,1509) @cindex Entries file, in CVS directory cvs.texi(,1510) @cindex CVS/Entries file cvs.texi(,1511) @item Entries cvs.texi(,1512) This file lists the files and directories in the cvs.texi(,1513) working directory. cvs.texi(,1514) The first character of each line indicates what sort of cvs.texi(,1515) line it is. If the character is unrecognized, programs cvs.texi(,1516) reading the file should silently skip that line, to cvs.texi(,1517) allow for future expansion. cvs.texi(,1518) cvs.texi(,1519) If the first character is @samp{/}, then the format is: cvs.texi(,1520) cvs.texi(,1521) @example cvs.texi(,1522) /@var{name}/@var{revision}/@var{timestamp}[+@var{conflict}]/@var{options}/@var{tagdate} cvs.texi(,1523) @end example cvs.texi(,1524) cvs.texi(,1525) @noindent cvs.texi(,1526) where @samp{[} and @samp{]} are not part of the entry, cvs.texi(,1527) but instead indicate that the @samp{+} and conflict cvs.texi(,1528) marker are optional. @var{name} is the name of the cvs.texi(,1529) file within the directory. @var{revision} is the cvs.texi(,1530) revision that the file in the working derives from, or cvs.texi(,1531) @samp{0} for an added file, or @samp{-} followed by a cvs.texi(,1532) revision for a removed file. @var{timestamp} is the cvs.texi(,1533) timestamp of the file at the time that @sc{cvs} created cvs.texi(,1534) it; if the timestamp differs with the actual cvs.texi(,1535) modification time of the file it means the file has cvs.texi(,1536) been modified. It is stored in cvs.texi(,1537) the format used by the ISO C asctime() function (for cvs.texi(,1538) example, @samp{Sun Apr 7 01:29:26 1996}). One may cvs.texi(,1539) write a string which is not in that format, for cvs.texi(,1540) example, @samp{Result of merge}, to indicate that the cvs.texi(,1541) file should always be considered to be modified. This cvs.texi(,1542) is not a special case; to see whether a file is cvs.texi(,1543) modified a program should take the timestamp of the file cvs.texi(,1544) and simply do a string compare with @var{timestamp}. cvs.texi(,1545) If there was a conflict, @var{conflict} can be set to cvs.texi(,1546) the modification time of the file after the file has been cvs.texi(,1547) written with conflict markers (@pxref{Conflicts example}). cvs.texi(,1548) Thus if @var{conflict} is subsequently the same as the actual cvs.texi(,1549) modification time of the file it means that the user cvs.texi(,1550) has obviously not resolved the conflict. @var{options} cvs.texi(,1551) contains sticky options (for example @samp{-kb} for a cvs.texi(,1552) binary file). @var{tagdate} contains @samp{T} followed cvs.texi(,1553) by a tag name, or @samp{D} for a date, followed by a cvs.texi(,1554) sticky tag or date. Note that if @var{timestamp} cvs.texi(,1555) contains a pair of timestamps separated by a space, cvs.texi(,1556) rather than a single timestamp, you are dealing with a cvs.texi(,1557) version of @sc{cvs} earlier than @sc{cvs} 1.5 (not cvs.texi(,1558) documented here). cvs.texi(,1559) cvs.texi(,1560) The timezone on the timestamp in CVS/Entries (local or cvs.texi(,1561) universal) should be the same as the operating system cvs.texi(,1562) stores for the timestamp of the file itself. For cvs.texi(,1563) example, on Unix the file's timestamp is in universal cvs.texi(,1564) time (UT), so the timestamp in CVS/Entries should be cvs.texi(,1565) too. On @sc{vms}, the file's timestamp is in local cvs.texi(,1566) time, so @sc{cvs} on @sc{vms} should use local time. cvs.texi(,1567) This rule is so that files do not appear to be modified cvs.texi(,1568) merely because the timezone changed (for example, to or cvs.texi(,1569) from summer time). cvs.texi(,1570) @c See comments and calls to gmtime() and friends in cvs.texi(,1571) @c src/vers_ts.c (function time_stamp). cvs.texi(,1572) cvs.texi(,1573) If the first character of a line in @file{Entries} is cvs.texi(,1574) @samp{D}, then it indicates a subdirectory. @samp{D} cvs.texi(,1575) on a line all by itself indicates that the program cvs.texi(,1576) which wrote the @file{Entries} file does record cvs.texi(,1577) subdirectories (therefore, if there is such a line and cvs.texi(,1578) no other lines beginning with @samp{D}, one knows there cvs.texi(,1579) are no subdirectories). Otherwise, the line looks cvs.texi(,1580) like: cvs.texi(,1581) cvs.texi(,1582) @example cvs.texi(,1583) D/@var{name}/@var{filler1}/@var{filler2}/@var{filler3}/@var{filler4} cvs.texi(,1584) @end example cvs.texi(,1585) cvs.texi(,1586) @noindent cvs.texi(,1587) where @var{name} is the name of the subdirectory, and cvs.texi(,1588) all the @var{filler} fields should be silently ignored, cvs.texi(,1589) for future expansion. Programs which modify cvs.texi(,1590) @code{Entries} files should preserve these fields. cvs.texi(,1591) cvs.texi(,1592) The lines in the @file{Entries} file can be in any order. cvs.texi(,1593) cvs.texi(,1594) @cindex Entries.Log file, in CVS directory cvs.texi(,1595) @cindex CVS/Entries.Log file cvs.texi(,1596) @item Entries.Log cvs.texi(,1597) This file does not record any information beyond that cvs.texi(,1598) in @file{Entries}, but it does provide a way to update cvs.texi(,1599) the information without having to rewrite the entire cvs.texi(,1600) @file{Entries} file, including the ability to preserve cvs.texi(,1601) the information even if the program writing cvs.texi(,1602) @file{Entries} and @file{Entries.Log} abruptly aborts. cvs.texi(,1603) Programs which are reading the @file{Entries} file cvs.texi(,1604) should also check for @file{Entries.Log}. If the latter cvs.texi(,1605) exists, they should read @file{Entries} and then apply cvs.texi(,1606) the changes mentioned in @file{Entries.Log}. After cvs.texi(,1607) applying the changes, the recommended practice is to cvs.texi(,1608) rewrite @file{Entries} and then delete @file{Entries.Log}. cvs.texi(,1609) The format of a line in @file{Entries.Log} is a single cvs.texi(,1610) character command followed by a space followed by a cvs.texi(,1611) line in the format specified for a line in cvs.texi(,1612) @file{Entries}. The single character command is cvs.texi(,1613) @samp{A} to indicate that the entry is being added, cvs.texi(,1614) @samp{R} to indicate that the entry is being removed, cvs.texi(,1615) or any other character to indicate that the entire line cvs.texi(,1616) in @file{Entries.Log} should be silently ignored (for cvs.texi(,1617) future expansion). If the second character of the line cvs.texi(,1618) in @file{Entries.Log} is not a space, then it was cvs.texi(,1619) written by an older version of @sc{cvs} (not documented cvs.texi(,1620) here). cvs.texi(,1621) cvs.texi(,1622) Programs which are writing rather than reading can cvs.texi(,1623) safely ignore @file{Entries.Log} if they so choose. cvs.texi(,1624) cvs.texi(,1625) @cindex Entries.Backup file, in CVS directory cvs.texi(,1626) @cindex CVS/Entries.Backup file cvs.texi(,1627) @item Entries.Backup cvs.texi(,1628) This is a temporary file. Recommended usage is to cvs.texi(,1629) write a new entries file to @file{Entries.Backup}, and cvs.texi(,1630) then to rename it (atomically, where possible) to @file{Entries}. cvs.texi(,1631) cvs.texi(,1632) @cindex Entries.Static file, in CVS directory cvs.texi(,1633) @cindex CVS/Entries.Static file cvs.texi(,1634) @item Entries.Static cvs.texi(,1635) The only relevant thing about this file is whether it cvs.texi(,1636) exists or not. If it exists, then it means that only cvs.texi(,1637) part of a directory was gotten and @sc{cvs} will cvs.texi(,1638) not create additional files in that directory. To cvs.texi(,1639) clear it, use the @code{update} command with the cvs.texi(,1640) @samp{-d} option, which will get the additional files cvs.texi(,1641) and remove @file{Entries.Static}. cvs.texi(,1642) @c FIXME: This needs to be better documented, in places cvs.texi(,1643) @c other than Working Directory Storage. cvs.texi(,1644) @c FIXCVS: The fact that this setting exists needs to cvs.texi(,1645) @c be more visible to the user. For example "cvs cvs.texi(,1646) @c status foo", in the case where the file would be cvs.texi(,1647) @c gotten except for Entries.Static, might say cvs.texi(,1648) @c something to distinguish this from other cases. cvs.texi(,1649) @c One thing that periodically gets suggested is to cvs.texi(,1650) @c have "cvs update" print something when it skips cvs.texi(,1651) @c files due to Entries.Static, but IMHO that kind of cvs.texi(,1652) @c noise pretty much makes the Entries.Static feature cvs.texi(,1653) @c useless. cvs.texi(,1654) cvs.texi(,1655) @cindex Tag file, in CVS directory cvs.texi(,1656) @cindex CVS/Tag file cvs.texi(,1657) @cindex Sticky tags/dates, per-directory cvs.texi(,1658) @cindex Per-directory sticky tags/dates cvs.texi(,1659) @item Tag cvs.texi(,1660) This file contains per-directory sticky tags or dates. cvs.texi(,1661) The first character is @samp{T} for a branch tag, cvs.texi(,1662) @samp{N} for a non-branch tag, or @samp{D} for a date, cvs.texi(,1663) or another character to mean the file should be cvs.texi(,1664) silently ignored, for future expansion. This character cvs.texi(,1665) is followed by the tag or date. Note that cvs.texi(,1666) per-directory sticky tags or dates are used for things cvs.texi(,1667) like applying to files which are newly added; they cvs.texi(,1668) might not be the same as the sticky tags or dates on cvs.texi(,1669) individual files. For general information on sticky cvs.texi(,1670) tags and dates, see @ref{Sticky tags}. cvs.texi(,1671) @c FIXME: This needs to be much better documented, cvs.texi(,1672) @c preferably not in the context of "working directory cvs.texi(,1673) @c storage". cvs.texi(,1674) @c FIXME: The Sticky tags node needs to discuss, or xref to cvs.texi(,1675) @c someplace which discusses, per-directory sticky cvs.texi(,1676) @c tags and the distinction with per-file sticky tags. cvs.texi(,1677) cvs.texi(,1678) @cindex Notify file, in CVS directory cvs.texi(,1679) @cindex CVS/Notify file cvs.texi(,1680) @item Notify cvs.texi(,1681) This file stores notifications (for example, for cvs.texi(,1682) @code{edit} or @code{unedit}) which have not yet been cvs.texi(,1683) sent to the server. Its format is not yet documented cvs.texi(,1684) here. cvs.texi(,1685) cvs.texi(,1686) @cindex Notify.tmp file, in CVS directory cvs.texi(,1687) @cindex CVS/Notify.tmp file cvs.texi(,1688) @item Notify.tmp cvs.texi(,1689) This file is to @file{Notify} as @file{Entries.Backup} cvs.texi(,1690) is to @file{Entries}. That is, to write @file{Notify}, cvs.texi(,1691) first write the new contents to @file{Notify.tmp} and cvs.texi(,1692) then (atomically where possible), rename it to cvs.texi(,1693) @file{Notify}. cvs.texi(,1694) cvs.texi(,1695) @cindex Base directory, in CVS directory cvs.texi(,1696) @cindex CVS/Base directory cvs.texi(,1697) @item Base cvs.texi(,1698) If watches are in use, then an @code{edit} command cvs.texi(,1699) stores the original copy of the file in the @file{Base} cvs.texi(,1700) directory. This allows the @code{unedit} command to cvs.texi(,1701) operate even if it is unable to communicate with the cvs.texi(,1702) server. cvs.texi(,1703) cvs.texi(,1704) @cindex Baserev file, in CVS directory cvs.texi(,1705) @cindex CVS/Baserev file cvs.texi(,1706) @item Baserev cvs.texi(,1707) The file lists the revision for each of the files in cvs.texi(,1708) the @file{Base} directory. The format is: cvs.texi(,1709) cvs.texi(,1710) @example cvs.texi(,1711) B@var{name}/@var{rev}/@var{expansion} cvs.texi(,1712) @end example cvs.texi(,1713) cvs.texi(,1714) @noindent cvs.texi(,1715) where @var{expansion} should be ignored, to allow for cvs.texi(,1716) future expansion. cvs.texi(,1717) cvs.texi(,1718) @cindex Baserev.tmp file, in CVS directory cvs.texi(,1719) @cindex CVS/Baserev.tmp file cvs.texi(,1720) @item Baserev.tmp cvs.texi(,1721) This file is to @file{Baserev} as @file{Entries.Backup} cvs.texi(,1722) is to @file{Entries}. That is, to write @file{Baserev}, cvs.texi(,1723) first write the new contents to @file{Baserev.tmp} and cvs.texi(,1724) then (atomically where possible), rename it to cvs.texi(,1725) @file{Baserev}. cvs.texi(,1726) cvs.texi(,1727) @cindex Template file, in CVS directory cvs.texi(,1728) @cindex CVS/Template file cvs.texi(,1729) @item Template cvs.texi(,1730) This file contains the template specified by the cvs.texi(,1731) @file{rcsinfo} file (@pxref{rcsinfo}). It is only used cvs.texi(,1732) by the client; the non-client/server @sc{cvs} consults cvs.texi(,1733) @file{rcsinfo} directly. cvs.texi(,1734) @end table cvs.texi(,1735) cvs.texi(,1736) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,1737) @node Intro administrative files cvs.texi(,1738) @section The administrative files cvs.texi(,1739) @cindex Administrative files (intro) cvs.texi(,1740) @cindex Modules file cvs.texi(,1741) @cindex CVSROOT, module name cvs.texi(,1742) @cindex Defining modules (intro) cvs.texi(,1743) cvs.texi(,1744) @c FIXME: this node should be reorganized into "general cvs.texi(,1745) @c information about admin files" and put the "editing cvs.texi(,1746) @c admin files" stuff up front rather than jumping into cvs.texi(,1747) @c the details of modules right away. Then the cvs.texi(,1748) @c Administrative files node can go away, the information cvs.texi(,1749) @c on each admin file distributed to a place appropriate cvs.texi(,1750) @c to its function, and this node can contain a table cvs.texi(,1751) @c listing each file and a @ref to its detailed description. cvs.texi(,1752) cvs.texi(,1753) The directory @file{$CVSROOT/CVSROOT} contains some @dfn{administrative cvs.texi(,1754) files}. @xref{Administrative files}, for a complete description. cvs.texi(,1755) You can use @sc{cvs} without any of these files, but cvs.texi(,1756) some commands work better when at least the cvs.texi(,1757) @file{modules} file is properly set up. cvs.texi(,1758) cvs.texi(,1759) The most important of these files is the @file{modules} cvs.texi(,1760) file. It defines all modules in the repository. This cvs.texi(,1761) is a sample @file{modules} file. cvs.texi(,1762) cvs.texi(,1763) @c FIXME: The CVSROOT line is a goofy example now that cvs.texi(,1764) @c mkmodules doesn't exist. cvs.texi(,1765) @example cvs.texi(,1766) CVSROOT CVSROOT cvs.texi(,1767) modules CVSROOT modules cvs.texi(,1768) cvs gnu/cvs cvs.texi(,1769) rcs gnu/rcs cvs.texi(,1770) diff gnu/diff cvs.texi(,1771) tc yoyodyne/tc cvs.texi(,1772) @end example cvs.texi(,1773) cvs.texi(,1774) The @file{modules} file is line oriented. In its cvs.texi(,1775) simplest form each line contains the name of the cvs.texi(,1776) module, whitespace, and the directory where the module cvs.texi(,1777) resides. The directory is a path relative to cvs.texi(,1778) @code{$CVSROOT}. The last four lines in the example cvs.texi(,1779) above are examples of such lines. cvs.texi(,1780) cvs.texi(,1781) @c FIXME: might want to introduce the concept of options in modules file cvs.texi(,1782) @c (the old example which was here, -i mkmodules, is obsolete). cvs.texi(,1783) cvs.texi(,1784) The line that defines the module called @samp{modules} cvs.texi(,1785) uses features that are not explained here. cvs.texi(,1786) @xref{modules}, for a full explanation of all the cvs.texi(,1787) available features. cvs.texi(,1788) cvs.texi(,1789) @c FIXME: subsection without node is bogus cvs.texi(,1790) @subsection Editing administrative files cvs.texi(,1791) @cindex Editing administrative files cvs.texi(,1792) @cindex Administrative files, editing them cvs.texi(,1793) cvs.texi(,1794) You edit the administrative files in the same way that you would edit cvs.texi(,1795) any other module. Use @samp{cvs checkout CVSROOT} to get a working cvs.texi(,1796) copy, edit it, and commit your changes in the normal way. cvs.texi(,1797) cvs.texi(,1798) It is possible to commit an erroneous administrative cvs.texi(,1799) file. You can often fix the error and check in a new cvs.texi(,1800) revision, but sometimes a particularly bad error in the cvs.texi(,1801) administrative file makes it impossible to commit new cvs.texi(,1802) revisions. cvs.texi(,1803) @c @xref{Bad administrative files} for a hint cvs.texi(,1804) @c about how to solve such situations. cvs.texi(,1805) @c -- administrative file checking-- cvs.texi(,1806) cvs.texi(,1807) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,1808) @node Multiple repositories cvs.texi(,1809) @section Multiple repositories cvs.texi(,1810) @cindex Multiple repositories cvs.texi(,1811) @cindex Repositories, multiple cvs.texi(,1812) @cindex Many repositories cvs.texi(,1813) @cindex Parallel repositories cvs.texi(,1814) @cindex Disjoint repositories cvs.texi(,1815) @cindex CVSROOT, multiple repositories cvs.texi(,1816) cvs.texi(,1817) In some situations it is a good idea to have more than cvs.texi(,1818) one repository, for instance if you have two cvs.texi(,1819) development groups that work on separate projects cvs.texi(,1820) without sharing any code. All you have to do to have cvs.texi(,1821) several repositories is to specify the appropriate cvs.texi(,1822) repository, using the @code{CVSROOT} environment cvs.texi(,1823) variable, the @samp{-d} option to @sc{cvs}, or (once cvs.texi(,1824) you have checked out a working directory) by simply cvs.texi(,1825) allowing @sc{cvs} to use the repository that was used cvs.texi(,1826) to check out the working directory cvs.texi(,1827) (@pxref{Specifying a repository}). cvs.texi(,1828) cvs.texi(,1829) The big advantage of having multiple repositories is cvs.texi(,1830) that they can reside on different servers. With @sc{cvs} cvs.texi(,1831) version 1.10, a single command cannot recurse into cvs.texi(,1832) directories from different repositories. With development cvs.texi(,1833) versions of @sc{cvs}, you can check out code from multiple cvs.texi(,1834) servers into your working directory. @sc{cvs} will cvs.texi(,1835) recurse and handle all the details of making cvs.texi(,1836) connections to as many server machines as necessary to cvs.texi(,1837) perform the requested command. Here is an example of cvs.texi(,1838) how to set up a working directory: cvs.texi(,1839) cvs.texi(,1840) @example cvs.texi(,1841) cvs -d server1:/cvs co dir1 cvs.texi(,1842) cd dir1 cvs.texi(,1843) cvs -d server2:/root co sdir cvs.texi(,1844) cvs update cvs.texi(,1845) @end example cvs.texi(,1846) cvs.texi(,1847) The @code{cvs co} commands set up the working cvs.texi(,1848) directory, and then the @code{cvs update} command will cvs.texi(,1849) contact server2, to update the dir1/sdir subdirectory, cvs.texi(,1850) and server1, to update everything else. cvs.texi(,1851) cvs.texi(,1852) @c FIXME: Does the FAQ have more about this? I have a cvs.texi(,1853) @c dim recollection, but I'm too lazy to check right now. cvs.texi(,1854) cvs.texi(,1855) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,1856) @node Creating a repository cvs.texi(,1857) @section Creating a repository cvs.texi(,1858) cvs.texi(,1859) @cindex Repository, setting up cvs.texi(,1860) @cindex Creating a repository cvs.texi(,1861) @cindex Setting up a repository cvs.texi(,1862) cvs.texi(,1863) To set up a @sc{cvs} repository, first choose the cvs.texi(,1864) machine and disk on which you want to store the cvs.texi(,1865) revision history of the source files. CPU and memory cvs.texi(,1866) requirements are modest, so most machines should be cvs.texi(,1867) adequate. For details see @ref{Server requirements}. cvs.texi(,1868) @c Possible that we should be providing a quick rule of cvs.texi(,1869) @c thumb, like the 32M memory for the server. That cvs.texi(,1870) @c might increase the number of people who are happy cvs.texi(,1871) @c with the answer, without following the xref. cvs.texi(,1872) cvs.texi(,1873) To estimate disk space cvs.texi(,1874) requirements, if you are importing RCS files from cvs.texi(,1875) another system, the size of those files is the cvs.texi(,1876) approximate initial size of your repository, or if you cvs.texi(,1877) are starting without any version history, a rule of cvs.texi(,1878) thumb is to allow for the server approximately three cvs.texi(,1879) times the size of the code to be under @sc{cvs} for the cvs.texi(,1880) repository (you will eventually outgrow this, but not cvs.texi(,1881) for a while). On the machines on which the developers cvs.texi(,1882) will be working, you'll want disk space for cvs.texi(,1883) approximately one working directory for each developer cvs.texi(,1884) (either the entire tree or a portion of it, depending cvs.texi(,1885) on what each developer uses). cvs.texi(,1886) cvs.texi(,1887) The repository should be accessible cvs.texi(,1888) (directly or via a networked file system) from all cvs.texi(,1889) machines which want to use @sc{cvs} in server or local cvs.texi(,1890) mode; the client machines need not have any access to cvs.texi(,1891) it other than via the @sc{cvs} protocol. It is not cvs.texi(,1892) possible to use @sc{cvs} to read from a repository cvs.texi(,1893) which one only has read access to; @sc{cvs} needs to be cvs.texi(,1894) able to create lock files (@pxref{Concurrency}). cvs.texi(,1895) cvs.texi(,1896) @cindex init (subcommand) cvs.texi(,1897) To create a repository, run the @code{cvs init} cvs.texi(,1898) command. It will set up an empty repository in the cvs.texi(,1899) @sc{cvs} root specified in the usual way cvs.texi(,1900) (@pxref{Repository}). For example, cvs.texi(,1901) cvs.texi(,1902) @example cvs.texi(,1903) cvs -d /usr/local/cvsroot init cvs.texi(,1904) @end example cvs.texi(,1905) cvs.texi(,1906) @code{cvs init} is careful to never overwrite any cvs.texi(,1907) existing files in the repository, so no harm is done if cvs.texi(,1908) you run @code{cvs init} on an already set-up cvs.texi(,1909) repository. cvs.texi(,1910) cvs.texi(,1911) @code{cvs init} will enable history logging; if you cvs.texi(,1912) don't want that, remove the history file after running cvs.texi(,1913) @code{cvs init}. @xref{history file}. cvs.texi(,1914) cvs.texi(,1915) @node Backing up cvs.texi(,1916) @section Backing up a repository cvs.texi(,1917) @cindex Repository, backing up cvs.texi(,1918) @cindex Backing up, repository cvs.texi(,1919) cvs.texi(,1920) There is nothing particularly magical about the files cvs.texi(,1921) in the repository; for the most part it is possible to cvs.texi(,1922) back them up just like any other files. However, there cvs.texi(,1923) are a few issues to consider. cvs.texi(,1924) cvs.texi(,1925) @cindex Locks, cvs, and backups cvs.texi(,1926) @cindex #cvs.rfl, and backups cvs.texi(,1927) The first is that to be paranoid, one should either not cvs.texi(,1928) use @sc{cvs} during the backup, or have the backup cvs.texi(,1929) program lock @sc{cvs} while doing the backup. To not cvs.texi(,1930) use @sc{cvs}, you might forbid logins to machines which cvs.texi(,1931) can access the repository, turn off your @sc{cvs} cvs.texi(,1932) server, or similar mechanisms. The details would cvs.texi(,1933) depend on your operating system and how you have cvs.texi(,1934) @sc{cvs} set up. To lock @sc{cvs}, you would create cvs.texi(,1935) @file{#cvs.rfl} locks in each repository directory. cvs.texi(,1936) See @ref{Concurrency}, for more on @sc{cvs} locks. cvs.texi(,1937) Having said all this, if you just back up without any cvs.texi(,1938) of these precautions, the results are unlikely to be cvs.texi(,1939) particularly dire. Restoring from backup, the cvs.texi(,1940) repository might be in an inconsistent state, but this cvs.texi(,1941) would not be particularly hard to fix manually. cvs.texi(,1942) cvs.texi(,1943) When you restore a repository from backup, assuming cvs.texi(,1944) that changes in the repository were made after the time cvs.texi(,1945) of the backup, working directories which were not cvs.texi(,1946) affected by the failure may refer to revisions which no cvs.texi(,1947) longer exist in the repository. Trying to run @sc{cvs} cvs.texi(,1948) in such directories will typically produce an error cvs.texi(,1949) message. One way to get those changes back into the cvs.texi(,1950) repository is as follows: cvs.texi(,1951) cvs.texi(,1952) @itemize @bullet cvs.texi(,1953) @item cvs.texi(,1954) Get a new working directory. cvs.texi(,1955) cvs.texi(,1956) @item cvs.texi(,1957) Copy the files from the working directory from before cvs.texi(,1958) the failure over to the new working directory (do not cvs.texi(,1959) copy the contents of the @file{CVS} directories, of cvs.texi(,1960) course). cvs.texi(,1961) cvs.texi(,1962) @item cvs.texi(,1963) Working in the new working directory, use commands such cvs.texi(,1964) as @code{cvs update} and @code{cvs diff} to figure out cvs.texi(,1965) what has changed, and then when you are ready, commit cvs.texi(,1966) the changes into the repository. cvs.texi(,1967) @end itemize cvs.texi(,1968) cvs.texi(,1969) @node Moving a repository cvs.texi(,1970) @section Moving a repository cvs.texi(,1971) @cindex Repository, moving cvs.texi(,1972) @cindex Moving a repository cvs.texi(,1973) @cindex Copying a repository cvs.texi(,1974) cvs.texi(,1975) Just as backing up the files in the repository is cvs.texi(,1976) pretty much like backing up any other files, if you cvs.texi(,1977) need to move a repository from one place to another it cvs.texi(,1978) is also pretty much like just moving any other cvs.texi(,1979) collection of files. cvs.texi(,1980) cvs.texi(,1981) The main thing to consider is that working directories cvs.texi(,1982) point to the repository. The simplest way to deal with cvs.texi(,1983) a moved repository is to just get a fresh working cvs.texi(,1984) directory after the move. Of course, you'll want to cvs.texi(,1985) make sure that the old working directory had been cvs.texi(,1986) checked in before the move, or you figured out some cvs.texi(,1987) other way to make sure that you don't lose any cvs.texi(,1988) changes. If you really do want to reuse the existing cvs.texi(,1989) working directory, it should be possible with manual cvs.texi(,1990) surgery on the @file{CVS/Repository} files. You can cvs.texi(,1991) see @ref{Working directory storage}, for information on cvs.texi(,1992) the @file{CVS/Repository} and @file{CVS/Root} files, but cvs.texi(,1993) unless you are sure you want to bother, it probably cvs.texi(,1994) isn't worth it. cvs.texi(,1995) @c FIXME: Surgery on CVS/Repository should be avoided cvs.texi(,1996) @c by making RELATIVE_REPOS the default. cvs.texi(,1997) @c FIXME-maybe: might want some documented way to cvs.texi(,1998) @c change the CVS/Root files in some particular tree. cvs.texi(,1999) @c But then again, I don't know, maybe just having cvs.texi(,2000) @c people do this in perl/shell/&c isn't so bad... cvs.texi(,2001) cvs.texi(,2002) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,2003) @node Remote repositories cvs.texi(,2004) @section Remote repositories cvs.texi(,2005) @cindex Repositories, remote cvs.texi(,2006) @cindex Remote repositories cvs.texi(,2007) @cindex Client/Server Operation cvs.texi(,2008) @cindex Server, CVS cvs.texi(,2009) @cindex Remote repositories, port specification cvs.texi(,2010) @cindex Repositories, remote, port specification cvs.texi(,2011) @cindex Client/Server Operation, port specification cvs.texi(,2012) @cindex pserver (client/server connection method), port specification cvs.texi(,2013) @cindex kserver (client/server connection method), port specification cvs.texi(,2014) @cindex gserver (client/server connection method), port specification cvs.texi(,2015) @cindex port, specifying for remote repositories cvs.texi(,2016) cvs.texi(,2017) Your working copy of the sources can be on a cvs.texi(,2018) different machine than the repository. Using @sc{cvs} cvs.texi(,2019) in this manner is known as @dfn{client/server} cvs.texi(,2020) operation. You run @sc{cvs} on a machine which can cvs.texi(,2021) mount your working directory, known as the cvs.texi(,2022) @dfn{client}, and tell it to communicate to a machine cvs.texi(,2023) which can mount the repository, known as the cvs.texi(,2024) @dfn{server}. Generally, using a remote cvs.texi(,2025) repository is just like using a local one, except that cvs.texi(,2026) the format of the repository name is: cvs.texi(,2027) cvs.texi(,2028) @example cvs.texi(,2029) [:@var{method}:][[@var{user}][:@var{password}]@@]@var{hostname}[:[@var{port}]]/path/to/repository cvs.texi(,2030) @end example cvs.texi(,2031) cvs.texi(,2032) Specifying a password in the repository name is not recommended during cvs.texi(,2033) checkout, since this will cause @sc{cvs} to store a cleartext copy of the cvs.texi(,2034) password in each created directory. @code{cvs login} first instead cvs.texi(,2035) (@pxref{Password authentication client}). cvs.texi(,2036) cvs.texi(,2037) The details of exactly what needs to be set up depend cvs.texi(,2038) on how you are connecting to the server. cvs.texi(,2039) cvs.texi(,2040) If @var{method} is not specified, and the repository cvs.texi(,2041) name contains @samp{:}, then the default is @code{ext} cvs.texi(,2042) or @code{server}, depending on your platform; both are cvs.texi(,2043) described in @ref{Connecting via rsh}. cvs.texi(,2044) @c Should we try to explain which platforms are which? cvs.texi(,2045) @c Platforms like unix and VMS, which only allow cvs.texi(,2046) @c privileged programs to bind to sockets <1024 lose on cvs.texi(,2047) @c :server: cvs.texi(,2048) @c Platforms like Mac and VMS, whose rsh program is cvs.texi(,2049) @c unusable or nonexistent, lose on :ext: cvs.texi(,2050) @c Platforms like OS/2 and NT probably could plausibly cvs.texi(,2051) @c default either way (modulo -b troubles). cvs.texi(,2052) cvs.texi(,2053) @c FIXME: We need to have a better way of explaining cvs.texi(,2054) @c what method to use. This presentation totally cvs.texi(,2055) @c obscures the fact that :ext: and CVS_RSH is the way to cvs.texi(,2056) @c use SSH, for example. Plus it incorrectly implies cvs.texi(,2057) @c that you need an @code{rsh} binary on the client to use cvs.texi(,2058) @c :server:. cvs.texi(,2059) @c Also note that rsh not pserver is the right choice if you want cvs.texi(,2060) @c users to be able to create their own repositories cvs.texi(,2061) @c (because of the --allow-root related issues). cvs.texi(,2062) @menu cvs.texi(,2063) * Server requirements:: Memory and other resources for servers cvs.texi(,2064) * Connecting via rsh:: Using the @code{rsh} program to connect cvs.texi(,2065) * Password authenticated:: Direct connections using passwords cvs.texi(,2066) * GSSAPI authenticated:: Direct connections using GSSAPI cvs.texi(,2067) * Kerberos authenticated:: Direct connections with kerberos cvs.texi(,2068) * Connecting via fork:: Using a forked @code{cvs server} to connect cvs.texi(,2069) @end menu cvs.texi(,2070) cvs.texi(,2071) @node Server requirements cvs.texi(,2072) @subsection Server requirements cvs.texi(,2073) cvs.texi(,2074) The quick answer to what sort of machine is suitable as cvs.texi(,2075) a server is that requirements are modest---a server cvs.texi(,2076) with 32M of memory or even less can handle a fairly cvs.texi(,2077) large source tree with a fair amount of activity. cvs.texi(,2078) @c Say something about CPU speed too? I'm even less sure cvs.texi(,2079) @c what to say on that subject... cvs.texi(,2080) cvs.texi(,2081) The real answer, of course, is more complicated. cvs.texi(,2082) Estimating the known areas of large memory consumption cvs.texi(,2083) should be sufficient to estimate memory requirements. cvs.texi(,2084) There are two such areas documented here; other memory cvs.texi(,2085) consumption should be small by comparison (if you find cvs.texi(,2086) that is not the case, let us know, as described in cvs.texi(,2087) @ref{BUGS}, so we can update this documentation). cvs.texi(,2088) cvs.texi(,2089) The first area of big memory consumption is large cvs.texi(,2090) checkouts, when using the @sc{cvs} server. The server cvs.texi(,2091) consists of two processes for each client that it is cvs.texi(,2092) serving. Memory consumption on the child process cvs.texi(,2093) should remain fairly small. Memory consumption on the cvs.texi(,2094) parent process, particularly if the network connection cvs.texi(,2095) to the client is slow, can be expected to grow to cvs.texi(,2096) slightly more than the size of the sources in a single cvs.texi(,2097) directory, or two megabytes, whichever is larger. cvs.texi(,2098) @c "two megabytes" of course is SERVER_HI_WATER. But cvs.texi(,2099) @c we don't mention that here because we are cvs.texi(,2100) @c documenting the default configuration of CVS. If it cvs.texi(,2101) @c is a "standard" thing to change that value, it cvs.texi(,2102) @c should be some kind of run-time configuration. cvs.texi(,2103) @c cvs.texi(,2104) @c See cvsclient.texi for more on the design decision cvs.texi(,2105) @c to not have locks in place while waiting for the cvs.texi(,2106) @c client, which is what results in memory consumption cvs.texi(,2107) @c as high as this. cvs.texi(,2108) cvs.texi(,2109) Multiplying the size of each @sc{cvs} server by the cvs.texi(,2110) number of servers which you expect to have active at cvs.texi(,2111) one time should give an idea of memory requirements for cvs.texi(,2112) the server. For the most part, the memory consumed by cvs.texi(,2113) the parent process probably can be swap space rather cvs.texi(,2114) than physical memory. cvs.texi(,2115) @c Has anyone verified that notion about swap space? cvs.texi(,2116) @c I say it based pretty much on guessing that the cvs.texi(,2117) @c ->text of the struct buffer_data only gets accessed cvs.texi(,2118) @c in a first in, first out fashion, but I haven't cvs.texi(,2119) @c looked very closely. cvs.texi(,2120) cvs.texi(,2121) @c What about disk usage in /tmp on the server? I think that cvs.texi(,2122) @c it can be substantial, but I haven't looked at this cvs.texi(,2123) @c again and tried to figure it out ("cvs import" is cvs.texi(,2124) @c probably the worst case...). cvs.texi(,2125) cvs.texi(,2126) The second area of large memory consumption is cvs.texi(,2127) @code{diff}, when checking in large files. This is cvs.texi(,2128) required even for binary files. The rule of thumb is cvs.texi(,2129) to allow about ten times the size of the largest file cvs.texi(,2130) you will want to check in, although five times may be cvs.texi(,2131) adequate. For example, if you want to check in a file cvs.texi(,2132) which is 10 megabytes, you should have 100 megabytes of cvs.texi(,2133) memory on the machine doing the checkin (the server cvs.texi(,2134) machine for client/server, or the machine running cvs.texi(,2135) @sc{cvs} for non-client/server). This can be swap cvs.texi(,2136) space rather than physical memory. Because the memory cvs.texi(,2137) is only required briefly, there is no particular need cvs.texi(,2138) to allow memory for more than one such checkin at a cvs.texi(,2139) time. cvs.texi(,2140) @c The 5-10 times rule of thumb is from Paul Eggert for cvs.texi(,2141) @c GNU diff. I don't think it is in the GNU diff cvs.texi(,2142) @c manual or anyplace like that. cvs.texi(,2143) @c cvs.texi(,2144) @c Probably we could be saying more about cvs.texi(,2145) @c non-client/server CVS. cvs.texi(,2146) @c I would guess for non-client/server CVS in an NFS cvs.texi(,2147) @c environment the biggest issues are the network and cvs.texi(,2148) @c the NFS server. cvs.texi(,2149) cvs.texi(,2150) Resource consumption for the client is even more cvs.texi(,2151) modest---any machine with enough capacity to run the cvs.texi(,2152) operating system in question should have little cvs.texi(,2153) trouble. cvs.texi(,2154) @c Is that true? I think the client still wants to cvs.texi(,2155) @c (bogusly) store entire files in memory at times. cvs.texi(,2156) cvs.texi(,2157) For information on disk space requirements, see cvs.texi(,2158) @ref{Creating a repository}. cvs.texi(,2159) cvs.texi(,2160) @node Connecting via rsh cvs.texi(,2161) @subsection Connecting with rsh cvs.texi(,2162) cvs.texi(,2163) @cindex rsh cvs.texi(,2164) @sc{cvs} uses the @samp{rsh} protocol to perform these cvs.texi(,2165) operations, so the remote user host needs to have a cvs.texi(,2166) @file{.rhosts} file which grants access to the local cvs.texi(,2167) user. Note that the program that @sc{cvs} uses for this cvs.texi(,2168) purpose may be specified using the @file{--with-rsh} cvs.texi(,2169) flag to configure. cvs.texi(,2170) cvs.texi(,2171) For example, suppose you are the user @samp{mozart} on cvs.texi(,2172) the local machine @samp{toe.example.com}, and the cvs.texi(,2173) server machine is @samp{faun.example.org}. On cvs.texi(,2174) faun, put the following line into the file cvs.texi(,2175) @file{.rhosts} in @samp{bach}'s home directory: cvs.texi(,2176) cvs.texi(,2177) @example cvs.texi(,2178) toe.example.com mozart cvs.texi(,2179) @end example cvs.texi(,2180) cvs.texi(,2181) @noindent cvs.texi(,2182) Then test that @samp{rsh} is working with cvs.texi(,2183) cvs.texi(,2184) @example cvs.texi(,2185) rsh -l bach faun.example.org 'echo $PATH' cvs.texi(,2186) @end example cvs.texi(,2187) cvs.texi(,2188) @cindex CVS_SERVER, environment variable cvs.texi(,2189) Next you have to make sure that @code{rsh} will be able cvs.texi(,2190) to find the server. Make sure that the path which cvs.texi(,2191) @code{rsh} printed in the above example includes the cvs.texi(,2192) directory containing a program named @code{cvs} which cvs.texi(,2193) is the server. You need to set the path in cvs.texi(,2194) @file{.bashrc}, @file{.cshrc}, etc., not @file{.login} cvs.texi(,2195) or @file{.profile}. Alternately, you can set the cvs.texi(,2196) environment variable @code{CVS_SERVER} on the client cvs.texi(,2197) machine to the filename of the server you want to use, cvs.texi(,2198) for example @file{/usr/local/bin/cvs-1.6}. cvs.texi(,2199) @c FIXME: there should be a way to specify the cvs.texi(,2200) @c program in CVSROOT, not CVS_SERVER, so that one can use cvs.texi(,2201) @c different ones for different roots. e.g. ":server;cvs=cvs-1.6:" cvs.texi(,2202) @c instead of ":server:". cvs.texi(,2203) cvs.texi(,2204) There is no need to edit @file{inetd.conf} or start a cvs.texi(,2205) @sc{cvs} server daemon. cvs.texi(,2206) cvs.texi(,2207) @cindex :server:, setting up cvs.texi(,2208) @cindex :ext:, setting up cvs.texi(,2209) @cindex Kerberos, using kerberized rsh cvs.texi(,2210) @cindex SSH (rsh replacement) cvs.texi(,2211) @cindex rsh replacements (Kerberized, SSH, &c) cvs.texi(,2212) There are two access methods that you use in @code{CVSROOT} cvs.texi(,2213) for rsh. @code{:server:} specifies an internal rsh cvs.texi(,2214) client, which is supported only by some @sc{cvs} ports. cvs.texi(,2215) @code{:ext:} specifies an external rsh program. By cvs.texi(,2216) default this is @code{rsh} (unless otherwise specified cvs.texi(,2217) by the @file{--with-rsh} flag to configure) but you may set the cvs.texi(,2218) @code{CVS_RSH} environment variable to invoke another cvs.texi(,2219) program which can access the remote server (for cvs.texi(,2220) example, @code{remsh} on HP-UX 9 because @code{rsh} is cvs.texi(,2221) something different). It must be a program which can cvs.texi(,2222) transmit data to and from the server without modifying cvs.texi(,2223) it; for example the Windows NT @code{rsh} is not cvs.texi(,2224) suitable since it by default translates between CRLF cvs.texi(,2225) and LF. The OS/2 @sc{cvs} port has a hack to pass @samp{-b} cvs.texi(,2226) to @code{rsh} to get around this, but since this could cvs.texi(,2227) potentially cause problems for programs other than the cvs.texi(,2228) standard @code{rsh}, it may change in the future. If cvs.texi(,2229) you set @code{CVS_RSH} to @code{SSH} or some other rsh cvs.texi(,2230) replacement, the instructions in the rest of this cvs.texi(,2231) section concerning @file{.rhosts} and so on are likely cvs.texi(,2232) to be inapplicable; consult the documentation for your rsh cvs.texi(,2233) replacement. cvs.texi(,2234) @c FIXME: there should be a way to specify the cvs.texi(,2235) @c program in CVSROOT, not CVS_RSH, so that one can use cvs.texi(,2236) @c different ones for different roots. e.g. ":ext;rsh=remsh:" cvs.texi(,2237) @c instead of ":ext:". cvs.texi(,2238) @c See also the comment in src/client.c for rationale cvs.texi(,2239) @c concerning "rsh" being the default and never cvs.texi(,2240) @c "remsh". cvs.texi(,2241) cvs.texi(,2242) Continuing our example, supposing you want to access cvs.texi(,2243) the module @file{foo} in the repository cvs.texi(,2244) @file{/usr/local/cvsroot/}, on machine cvs.texi(,2245) @file{faun.example.org}, you are ready to go: cvs.texi(,2246) cvs.texi(,2247) @example cvs.texi(,2248) cvs -d :ext:bach@@faun.example.org:/usr/local/cvsroot checkout foo cvs.texi(,2249) @end example cvs.texi(,2250) cvs.texi(,2251) @noindent cvs.texi(,2252) (The @file{bach@@} can be omitted if the username is cvs.texi(,2253) the same on both the local and remote hosts.) cvs.texi(,2254) cvs.texi(,2255) @c Should we mention "rsh host echo hi" and "rsh host cvs.texi(,2256) @c cat" (the latter followed by typing text and ^D) cvs.texi(,2257) @c as troubleshooting techniques? Probably yes cvs.texi(,2258) @c (people tend to have trouble setting this up), cvs.texi(,2259) @c but this kind of thing can be hard to spell out. cvs.texi(,2260) cvs.texi(,2261) @node Password authenticated cvs.texi(,2262) @subsection Direct connection with password authentication cvs.texi(,2263) cvs.texi(,2264) The @sc{cvs} client can also connect to the server cvs.texi(,2265) using a password protocol. This is particularly useful cvs.texi(,2266) if using @code{rsh} is not feasible (for example, cvs.texi(,2267) the server is behind a firewall), and Kerberos also is cvs.texi(,2268) not available. cvs.texi(,2269) cvs.texi(,2270) To use this method, it is necessary to make cvs.texi(,2271) some adjustments on both the server and client sides. cvs.texi(,2272) cvs.texi(,2273) @menu cvs.texi(,2274) * Password authentication server:: Setting up the server cvs.texi(,2275) * Password authentication client:: Using the client cvs.texi(,2276) * Password authentication security:: What this method does and does not do cvs.texi(,2277) @end menu cvs.texi(,2278) cvs.texi(,2279) @node Password authentication server cvs.texi(,2280) @subsubsection Setting up the server for password authentication cvs.texi(,2281) cvs.texi(,2282) First of all, you probably want to tighten the cvs.texi(,2283) permissions on the @file{$CVSROOT} and cvs.texi(,2284) @file{$CVSROOT/CVSROOT} directories. See @ref{Password cvs.texi(,2285) authentication security}, for more details. cvs.texi(,2286) cvs.texi(,2287) @cindex pserver (subcommand) cvs.texi(,2288) @cindex Remote repositories, port specification cvs.texi(,2289) @cindex Repositories, remote, port specification cvs.texi(,2290) @cindex Client/Server Operation, port specification cvs.texi(,2291) @cindex pserver (client/server connection method), port specification cvs.texi(,2292) @cindex kserver (client/server connection method), port specification cvs.texi(,2293) @cindex gserver (client/server connection method), port specification cvs.texi(,2294) @cindex port, specifying for remote repositories cvs.texi(,2295) @cindex Password server, setting up cvs.texi(,2296) @cindex Authenticating server, setting up cvs.texi(,2297) @cindex inetd, configuring for pserver cvs.texi(,2298) @cindex xinetd, configuring for pserver cvs.texi(,2299) @c FIXME: this isn't quite right regarding port cvs.texi(,2300) @c numbers; CVS looks up "cvspserver" in cvs.texi(,2301) @c /etc/services (on unix, but what about non-unix?). cvs.texi(,2302) On the server side, the file @file{/etc/inetd.conf} cvs.texi(,2303) needs to be edited so @code{inetd} knows to run the cvs.texi(,2304) command @code{cvs pserver} when it receives a cvs.texi(,2305) connection on the right port. By default, the port cvs.texi(,2306) number is 2401; it would be different if your client cvs.texi(,2307) were compiled with @code{CVS_AUTH_PORT} defined to cvs.texi(,2308) something else, though. This can also be specified in the CVSROOT variable cvs.texi(,2309) (@pxref{Remote repositories}) or overridden with the CVS_CLIENT_PORT cvs.texi(,2310) environment variable (@pxref{Environment variables}). cvs.texi(,2311) cvs.texi(,2312) If your @code{inetd} allows raw port numbers in cvs.texi(,2313) @file{/etc/inetd.conf}, then the following (all on a cvs.texi(,2314) single line in @file{inetd.conf}) should be sufficient: cvs.texi(,2315) cvs.texi(,2316) @example cvs.texi(,2317) 2401 stream tcp nowait root /usr/local/bin/cvs cvs.texi(,2318) cvs -f --allow-root=/usr/cvsroot pserver cvs.texi(,2319) @end example cvs.texi(,2320) cvs.texi(,2321) @noindent cvs.texi(,2322) (You could also use the cvs.texi(,2323) @samp{-T} option to specify a temporary directory.) cvs.texi(,2324) cvs.texi(,2325) The @samp{--allow-root} option specifies the allowable cvs.texi(,2326) @sc{cvsroot} directory. Clients which attempt to use a cvs.texi(,2327) different @sc{cvsroot} directory will not be allowed to cvs.texi(,2328) connect. If there is more than one @sc{cvsroot} cvs.texi(,2329) directory which you want to allow, repeat the option. cvs.texi(,2330) (Unfortunately, many versions of @code{inetd} have very small cvs.texi(,2331) limits on the number of arguments and/or the total length cvs.texi(,2332) of the command. The usual solution to this problem is cvs.texi(,2333) to have @code{inetd} run a shell script which then invokes cvs.texi(,2334) @sc{cvs} with the necessary arguments.) cvs.texi(,2335) cvs.texi(,2336) If your @code{inetd} wants a symbolic service cvs.texi(,2337) name instead of a raw port number, then put this in cvs.texi(,2338) @file{/etc/services}: cvs.texi(,2339) cvs.texi(,2340) @example cvs.texi(,2341) cvspserver 2401/tcp cvs.texi(,2342) @end example cvs.texi(,2343) cvs.texi(,2344) @noindent cvs.texi(,2345) and put @code{cvspserver} instead of @code{2401} in @file{inetd.conf}. cvs.texi(,2346) cvs.texi(,2347) If your system uses @code{xinetd} instead of @code{inetd}, cvs.texi(,2348) the procedure is slightly different. cvs.texi(,2349) Create a file called @file{/etc/xinetd.d/cvspserver} containing the following: cvs.texi(,2350) cvs.texi(,2351) @example cvs.texi(,2352) service cvspserver cvs.texi(,2353) @{ cvs.texi(,2354) port = 2401 cvs.texi(,2355) socket_type = stream cvs.texi(,2356) protocol = tcp cvs.texi(,2357) wait = no cvs.texi(,2358) user = root cvs.texi(,2359) passenv = PATH cvs.texi(,2360) server = /usr/local/bin/cvs cvs.texi(,2361) server_args = -f --allow-root=/usr/cvsroot pserver cvs.texi(,2362) @} cvs.texi(,2363) @end example cvs.texi(,2364) cvs.texi(,2365) @noindent cvs.texi(,2366) (If @code{cvspserver} is defined in @file{/etc/services}, you can omit cvs.texi(,2367) the @code{port} line.) cvs.texi(,2368) cvs.texi(,2369) Once the above is taken care of, restart your cvs.texi(,2370) @code{inetd}, or do whatever is necessary to force it cvs.texi(,2371) to reread its initialization files. cvs.texi(,2372) cvs.texi(,2373) If you are having trouble setting this up, see cvs.texi(,2374) @ref{Connection}. cvs.texi(,2375) cvs.texi(,2376) @cindex CVS passwd file cvs.texi(,2377) @cindex passwd (admin file) cvs.texi(,2378) Because the client stores and transmits passwords in cvs.texi(,2379) cleartext (almost---see @ref{Password authentication cvs.texi(,2380) security}, for details), a separate @sc{cvs} password cvs.texi(,2381) file is generally used, so people don't compromise cvs.texi(,2382) their regular passwords when they access the cvs.texi(,2383) repository. This file is cvs.texi(,2384) @file{$CVSROOT/CVSROOT/passwd} (@pxref{Intro cvs.texi(,2385) administrative files}). It uses a colon-separated cvs.texi(,2386) format, similar to @file{/etc/passwd} on Unix systems, cvs.texi(,2387) except that it has fewer fields: @sc{cvs} username, cvs.texi(,2388) optional password, and an optional system username for cvs.texi(,2389) @sc{cvs} to run as if authentication succeeds. Here is cvs.texi(,2390) an example @file{passwd} file with five entries: cvs.texi(,2391) cvs.texi(,2392) @example cvs.texi(,2393) anonymous: cvs.texi(,2394) bach:ULtgRLXo7NRxs cvs.texi(,2395) spwang:1sOp854gDF3DY cvs.texi(,2396) melissa:tGX1fS8sun6rY:pubcvs cvs.texi(,2397) qproj:XR4EZcEs0szik:pubcvs cvs.texi(,2398) @end example cvs.texi(,2399) cvs.texi(,2400) @noindent cvs.texi(,2401) (The passwords are encrypted according to the standard cvs.texi(,2402) Unix @code{crypt()} function, so it is possible to cvs.texi(,2403) paste in passwords directly from regular Unix cvs.texi(,2404) @file{/etc/passwd} files.) cvs.texi(,2405) cvs.texi(,2406) The first line in the example will grant access to any cvs.texi(,2407) @sc{cvs} client attempting to authenticate as user cvs.texi(,2408) @code{anonymous}, no matter what password they use, cvs.texi(,2409) including an empty password. (This is typical for cvs.texi(,2410) sites granting anonymous read-only access; for cvs.texi(,2411) information on how to do the "read-only" part, see cvs.texi(,2412) @ref{Read-only access}.) cvs.texi(,2413) cvs.texi(,2414) The second and third lines will grant access to cvs.texi(,2415) @code{bach} and @code{spwang} if they supply their cvs.texi(,2416) respective plaintext passwords. cvs.texi(,2417) cvs.texi(,2418) @cindex User aliases cvs.texi(,2419) The fourth line will grant access to @code{melissa}, if cvs.texi(,2420) she supplies the correct password, but her @sc{cvs} cvs.texi(,2421) operations will actually run on the server side under cvs.texi(,2422) the system user @code{pubcvs}. Thus, there need not be cvs.texi(,2423) any system user named @code{melissa}, but there cvs.texi(,2424) @emph{must} be one named @code{pubcvs}. cvs.texi(,2425) cvs.texi(,2426) The fifth line shows that system user identities can be cvs.texi(,2427) shared: any client who successfully authenticates as cvs.texi(,2428) @code{qproj} will actually run as @code{pubcvs}, just cvs.texi(,2429) as @code{melissa} does. That way you could create a cvs.texi(,2430) single, shared system user for each project in your cvs.texi(,2431) repository, and give each developer their own line in cvs.texi(,2432) the @file{$CVSROOT/CVSROOT/passwd} file. The @sc{cvs} cvs.texi(,2433) username on each line would be different, but the cvs.texi(,2434) system username would be the same. The reason to have cvs.texi(,2435) different @sc{cvs} usernames is that @sc{cvs} will log their cvs.texi(,2436) actions under those names: when @code{melissa} commits cvs.texi(,2437) a change to a project, the checkin is recorded in the cvs.texi(,2438) project's history under the name @code{melissa}, not cvs.texi(,2439) @code{pubcvs}. And the reason to have them share a cvs.texi(,2440) system username is so that you can arrange permissions cvs.texi(,2441) in the relevant area of the repository such that only cvs.texi(,2442) that account has write-permission there. cvs.texi(,2443) cvs.texi(,2444) If the system-user field is present, all cvs.texi(,2445) password-authenticated @sc{cvs} commands run as that cvs.texi(,2446) user; if no system user is specified, @sc{cvs} simply cvs.texi(,2447) takes the @sc{cvs} username as the system username and cvs.texi(,2448) runs commands as that user. In either case, if there cvs.texi(,2449) is no such user on the system, then the @sc{cvs} cvs.texi(,2450) operation will fail (regardless of whether the client cvs.texi(,2451) supplied a valid password). cvs.texi(,2452) cvs.texi(,2453) The password and system-user fields can both be omitted cvs.texi(,2454) (and if the system-user field is omitted, then also cvs.texi(,2455) omit the colon that would have separated it from the cvs.texi(,2456) encrypted password). For example, this would be a cvs.texi(,2457) valid @file{$CVSROOT/CVSROOT/passwd} file: cvs.texi(,2458) cvs.texi(,2459) @example cvs.texi(,2460) anonymous::pubcvs cvs.texi(,2461) fish:rKa5jzULzmhOo:kfogel cvs.texi(,2462) sussman:1sOp854gDF3DY cvs.texi(,2463) @end example cvs.texi(,2464) cvs.texi(,2465) @noindent cvs.texi(,2466) When the password field is omitted or empty, then the cvs.texi(,2467) client's authentication attempt will succeed with any cvs.texi(,2468) password, including the empty string. However, the cvs.texi(,2469) colon after the @sc{cvs} username is always necessary, cvs.texi(,2470) even if the password is empty. cvs.texi(,2471) cvs.texi(,2472) @sc{cvs} can also fall back to use system authentication. cvs.texi(,2473) When authenticating a password, the server first checks cvs.texi(,2474) for the user in the @file{$CVSROOT/CVSROOT/passwd} cvs.texi(,2475) file. If it finds the user, it will use that entry for cvs.texi(,2476) authentication as described above. But if it does not cvs.texi(,2477) find the user, or if the @sc{cvs} @file{passwd} file cvs.texi(,2478) does not exist, then the server can try to authenticate cvs.texi(,2479) the username and password using the operating system's cvs.texi(,2480) user-lookup routines (this "fallback" behavior can be cvs.texi(,2481) disabled by setting @code{SystemAuth=no} in the cvs.texi(,2482) @sc{cvs} @file{config} file, @pxref{config}). cvs.texi(,2483) cvs.texi(,2484) The default fallback behaviour is to look in cvs.texi(,2485) @file{/etc/passwd} for this system password unless your cvs.texi(,2486) system has PAM (Pluggable Authentication Modules) cvs.texi(,2487) and your @sc{cvs} server executable was configured to cvs.texi(,2488) use it at compile time (using @code{./configure --enable-pam} - see the cvs.texi(,2489) INSTALL file for more). In this case, PAM will be consulted instead. cvs.texi(,2490) This means that @sc{cvs} can be configured to use any password cvs.texi(,2491) authentication source PAM can be configured to use (possibilities cvs.texi(,2492) include a simple UNIX password, NIS, LDAP, and others) in its cvs.texi(,2493) global configuration file (usually @file{/etc/pam.conf} cvs.texi(,2494) or possibly @file{/etc/pam.d/cvs}). See your PAM documentation cvs.texi(,2495) for more details on PAM configuration. cvs.texi(,2496) cvs.texi(,2497) Note that PAM is an experimental feature in @sc{cvs} and feedback is cvs.texi(,2498) encouraged. Please send a mail to one of the @sc{cvs} mailing lists cvs.texi(,2499) (@code{info-cvs@@gnu.org} or @code{bug-cvs@@gnu.org}) if you use the cvs.texi(,2500) @sc{cvs} PAM support. cvs.texi(,2501) cvs.texi(,2502) @strong{WARNING: Using PAM gives the system administrator much more cvs.texi(,2503) flexibility about how @sc{cvs} users are authenticated but cvs.texi(,2504) no more security than other methods. See below for more.} cvs.texi(,2505) cvs.texi(,2506) CVS needs an "auth" and "account" module in the cvs.texi(,2507) PAM configuration file. A typical PAM configuration cvs.texi(,2508) would therefore have the following lines cvs.texi(,2509) in @file{/etc/pam.conf} to emulate the standard @sc{cvs} cvs.texi(,2510) system @file{/etc/passwd} authentication: cvs.texi(,2511) cvs.texi(,2512) @example cvs.texi(,2513) cvs auth required pam_unix.so cvs.texi(,2514) cvs account required pam_unix.so cvs.texi(,2515) @end example cvs.texi(,2516) cvs.texi(,2517) The the equivalent @file{/etc/pam.d/cvs} would contain cvs.texi(,2518) cvs.texi(,2519) @example cvs.texi(,2520) auth required pam_unix.so cvs.texi(,2521) account required pam_unix.so cvs.texi(,2522) @end example cvs.texi(,2523) cvs.texi(,2524) Some systems require a full path to the module so that cvs.texi(,2525) @file{pam_unix.so} (Linux) would become something like cvs.texi(,2526) @file{/usr/lib/security/$ISA/pam_unix.so.1} (Sun Solaris). cvs.texi(,2527) See the @file{contrib/pam} subdirectory of the @sc{cvs} cvs.texi(,2528) source distribution for further example configurations. cvs.texi(,2529) cvs.texi(,2530) The PAM service name given above as "cvs" is just cvs.texi(,2531) the service name in the default configuration amd can be cvs.texi(,2532) set using cvs.texi(,2533) @code{./configure --with-hardcoded-pam-service-name=} cvs.texi(,2534) before compiling. @sc{cvs} can also be configured to use whatever cvs.texi(,2535) name it is invoked as as its PAM service name using cvs.texi(,2536) @code{./configure --without-hardcoded-pam-service-name}, but this cvs.texi(,2537) feature should not be used if you may not have control of the name cvs.texi(,2538) @sc{cvs} will be invoked as. cvs.texi(,2539) cvs.texi(,2540) Be aware, also, that falling back to system cvs.texi(,2541) authentication might be a security risk: @sc{cvs} cvs.texi(,2542) operations would then be authenticated with that user's cvs.texi(,2543) regular login password, and the password flies across cvs.texi(,2544) the network in plaintext. See @ref{Password cvs.texi(,2545) authentication security} for more on this. cvs.texi(,2546) This may be more of a problem with PAM authentication cvs.texi(,2547) because it is likely that the source of the system cvs.texi(,2548) password is some central authentication service like cvs.texi(,2549) LDAP which is also used to authenticate other services. cvs.texi(,2550) cvs.texi(,2551) On the other hand, PAM makes it very easy to change your password cvs.texi(,2552) regularly. If they are given the option of a one-password system for cvs.texi(,2553) all of their activities, users are often more willing to change their cvs.texi(,2554) password on a regular basis. cvs.texi(,2555) cvs.texi(,2556) In the non-PAM configuration where the password is stored in the cvs.texi(,2557) @file{CVSROOT/passwd} file, it is difficult to change passwords on a cvs.texi(,2558) regular basis since only administrative users (or in some cases cvs.texi(,2559) processes that act as an administrative user) are typicaly given cvs.texi(,2560) access to modify this file. Either there needs to be some cvs.texi(,2561) hand-crafted web page or set-uid program to update the file, or the cvs.texi(,2562) update needs to be done by submitting a request to an administrator to cvs.texi(,2563) perform the duty by hand. In the first case, having to remember to cvs.texi(,2564) update a separate password on a periodic basis can be difficult. In cvs.texi(,2565) the second case, the manual nature of the change will typically mean cvs.texi(,2566) that the password will not be changed unless it is absolutely cvs.texi(,2567) necessary. cvs.texi(,2568) cvs.texi(,2569) Note that PAM administrators should probably avoid configuring cvs.texi(,2570) one-time-passwords (OTP) for @sc{cvs} authentication/authorization. If cvs.texi(,2571) OTPs are desired, the administrator may wish to encourage the use of cvs.texi(,2572) one of the other Client/Server access methods. See the section on cvs.texi(,2573) @pxref{Remote repositories} for a list of other methods. cvs.texi(,2574) cvs.texi(,2575) Right now, the only way to put a password in the cvs.texi(,2576) @sc{cvs} @file{passwd} file is to paste it there from cvs.texi(,2577) somewhere else. Someday, there may be a @code{cvs cvs.texi(,2578) passwd} command. cvs.texi(,2579) cvs.texi(,2580) Unlike many of the files in @file{$CVSROOT/CVSROOT}, it cvs.texi(,2581) is normal to edit the @file{passwd} file in-place, cvs.texi(,2582) rather than via @sc{cvs}. This is because of the cvs.texi(,2583) possible security risks of having the @file{passwd} cvs.texi(,2584) file checked out to people's working copies. If you do cvs.texi(,2585) want to include the @file{passwd} file in checkouts of cvs.texi(,2586) @file{$CVSROOT/CVSROOT}, see @ref{checkoutlist}. cvs.texi(,2587) cvs.texi(,2588) @c We might also suggest using the @code{htpasswd} command cvs.texi(,2589) @c from freely available web servers as well, but that cvs.texi(,2590) @c would open up a can of worms in that the users next cvs.texi(,2591) @c questions are likely to be "where do I get it?" and cvs.texi(,2592) @c "how do I use it?" cvs.texi(,2593) @c Also note that htpasswd, at least the version I had, cvs.texi(,2594) @c likes to clobber the third field. cvs.texi(,2595) cvs.texi(,2596) @node Password authentication client cvs.texi(,2597) @subsubsection Using the client with password authentication cvs.texi(,2598) @cindex Login (subcommand) cvs.texi(,2599) @cindex Password client, using cvs.texi(,2600) @cindex Authenticated client, using cvs.texi(,2601) @cindex :pserver:, setting up cvs.texi(,2602) To run a @sc{cvs} command on a remote repository via cvs.texi(,2603) the password-authenticating server, one specifies the cvs.texi(,2604) @code{pserver} protocol, optional username, repository host, an cvs.texi(,2605) optional port number, and path to the repository. For example: cvs.texi(,2606) cvs.texi(,2607) @example cvs.texi(,2608) cvs -d :pserver:faun.example.org:/usr/local/cvsroot checkout someproj cvs.texi(,2609) @end example cvs.texi(,2610) cvs.texi(,2611) @noindent cvs.texi(,2612) or cvs.texi(,2613) cvs.texi(,2614) @example cvs.texi(,2615) CVSROOT=:pserver:bach@@faun.example.org:2401/usr/local/cvsroot cvs.texi(,2616) cvs checkout someproj cvs.texi(,2617) @end example cvs.texi(,2618) cvs.texi(,2619) However, unless you're connecting to a public-access cvs.texi(,2620) repository (i.e., one where that username doesn't cvs.texi(,2621) require a password), you'll need to supply a password or @dfn{log in} first. cvs.texi(,2622) Logging in verifies your password with the repository and stores it in a file. cvs.texi(,2623) It's done with the @code{login} command, which will cvs.texi(,2624) prompt you interactively for the password if you didn't supply one as part of cvs.texi(,2625) @var{$CVSROOT}: cvs.texi(,2626) cvs.texi(,2627) @example cvs.texi(,2628) cvs -d :pserver:bach@@faun.example.org:/usr/local/cvsroot login cvs.texi(,2629) CVS password: cvs.texi(,2630) @end example cvs.texi(,2631) cvs.texi(,2632) @noindent cvs.texi(,2633) or cvs.texi(,2634) cvs.texi(,2635) @example cvs.texi(,2636) cvs -d :pserver:bach:p4ss30rd@@faun.example.org:/usr/local/cvsroot login cvs.texi(,2637) @end example cvs.texi(,2638) cvs.texi(,2639) After you enter the password, @sc{cvs} verifies it with cvs.texi(,2640) the server. If the verification succeeds, then that cvs.texi(,2641) combination of username, host, repository, and password cvs.texi(,2642) is permanently recorded, so future transactions with cvs.texi(,2643) that repository won't require you to run @code{cvs cvs.texi(,2644) login}. (If verification fails, @sc{cvs} will exit cvs.texi(,2645) complaining that the password was incorrect, and cvs.texi(,2646) nothing will be recorded.) cvs.texi(,2647) cvs.texi(,2648) The records are stored, by default, in the file cvs.texi(,2649) @file{$HOME/.cvspass}. That file's format is cvs.texi(,2650) human-readable, and to a degree human-editable, but cvs.texi(,2651) note that the passwords are not stored in cvs.texi(,2652) cleartext---they are trivially encoded to protect them cvs.texi(,2653) from "innocent" compromise (i.e., inadvertent viewing cvs.texi(,2654) by a system administrator or other non-malicious cvs.texi(,2655) person). cvs.texi(,2656) cvs.texi(,2657) @cindex CVS_PASSFILE, environment variable cvs.texi(,2658) You can change the default location of this file by cvs.texi(,2659) setting the @code{CVS_PASSFILE} environment variable. cvs.texi(,2660) If you use this variable, make sure you set it cvs.texi(,2661) @emph{before} @code{cvs login} is run. If you were to cvs.texi(,2662) set it after running @code{cvs login}, then later cvs.texi(,2663) @sc{cvs} commands would be unable to look up the cvs.texi(,2664) password for transmission to the server. cvs.texi(,2665) cvs.texi(,2666) Once you have logged in, all @sc{cvs} commands using cvs.texi(,2667) that remote repository and username will authenticate cvs.texi(,2668) with the stored password. So, for example cvs.texi(,2669) cvs.texi(,2670) @example cvs.texi(,2671) cvs -d :pserver:bach@@faun.example.org:/usr/local/cvsroot checkout foo cvs.texi(,2672) @end example cvs.texi(,2673) cvs.texi(,2674) @noindent cvs.texi(,2675) should just work (unless the password changes on the cvs.texi(,2676) server side, in which case you'll have to re-run cvs.texi(,2677) @code{cvs login}). cvs.texi(,2678) cvs.texi(,2679) Note that if the @samp{:pserver:} were not present in cvs.texi(,2680) the repository specification, @sc{cvs} would assume it cvs.texi(,2681) should use @code{rsh} to connect with the server cvs.texi(,2682) instead (@pxref{Connecting via rsh}). cvs.texi(,2683) cvs.texi(,2684) Of course, once you have a working copy checked out and cvs.texi(,2685) are running @sc{cvs} commands from within it, there is cvs.texi(,2686) no longer any need to specify the repository cvs.texi(,2687) explicitly, because @sc{cvs} can deduce the repository cvs.texi(,2688) from the working copy's @file{CVS} subdirectory. cvs.texi(,2689) cvs.texi(,2690) @c FIXME: seems to me this needs somewhat more cvs.texi(,2691) @c explanation. cvs.texi(,2692) @cindex Logout (subcommand) cvs.texi(,2693) The password for a given remote repository can be cvs.texi(,2694) removed from the @code{CVS_PASSFILE} by using the cvs.texi(,2695) @code{cvs logout} command. cvs.texi(,2696) cvs.texi(,2697) @node Password authentication security cvs.texi(,2698) @subsubsection Security considerations with password authentication cvs.texi(,2699) cvs.texi(,2700) @cindex Security, of pserver cvs.texi(,2701) The passwords are stored on the client side in a cvs.texi(,2702) trivial encoding of the cleartext, and transmitted in cvs.texi(,2703) the same encoding. The encoding is done only to cvs.texi(,2704) prevent inadvertent password compromises (i.e., a cvs.texi(,2705) system administrator accidentally looking at the file), cvs.texi(,2706) and will not prevent even a naive attacker from gaining cvs.texi(,2707) the password. cvs.texi(,2708) cvs.texi(,2709) @c FIXME: The bit about "access to the repository cvs.texi(,2710) @c implies general access to the system is *not* specific cvs.texi(,2711) @c to pserver; it applies to kerberos and SSH and cvs.texi(,2712) @c everything else too. Should reorganize the cvs.texi(,2713) @c documentation to make this clear. cvs.texi(,2714) The separate @sc{cvs} password file (@pxref{Password cvs.texi(,2715) authentication server}) allows people cvs.texi(,2716) to use a different password for repository access than cvs.texi(,2717) for login access. On the other hand, once a user has cvs.texi(,2718) non-read-only cvs.texi(,2719) access to the repository, she can execute programs on cvs.texi(,2720) the server system through a variety of means. Thus, repository cvs.texi(,2721) access implies fairly broad system access as well. It cvs.texi(,2722) might be possible to modify @sc{cvs} to prevent that, cvs.texi(,2723) but no one has done so as of this writing. cvs.texi(,2724) @c OpenBSD uses chroot() and copies the repository to cvs.texi(,2725) @c provide anonymous read-only access (for details see cvs.texi(,2726) @c http://www.openbsd.org/anoncvs.shar). While this cvs.texi(,2727) @c closes the most obvious holes, I'm not sure it cvs.texi(,2728) @c closes enough holes to recommend it (plus it is cvs.texi(,2729) @c *very* easy to accidentally screw up a setup of this cvs.texi(,2730) @c type). cvs.texi(,2731) cvs.texi(,2732) Note that because the @file{$CVSROOT/CVSROOT} directory cvs.texi(,2733) contains @file{passwd} and other files which are used cvs.texi(,2734) to check security, you must control the permissions on cvs.texi(,2735) this directory as tightly as the permissions on cvs.texi(,2736) @file{/etc}. The same applies to the @file{$CVSROOT} cvs.texi(,2737) directory itself and any directory cvs.texi(,2738) above it in the tree. Anyone who has write access to cvs.texi(,2739) such a directory will have the ability to become any cvs.texi(,2740) user on the system. Note that these permissions are cvs.texi(,2741) typically tighter than you would use if you are not cvs.texi(,2742) using pserver. cvs.texi(,2743) @c TODO: Would be really nice to document/implement a cvs.texi(,2744) @c scheme where the CVS server can run as some non-root cvs.texi(,2745) @c user, e.g. "cvs". CVSROOT/passwd would contain a cvs.texi(,2746) @c bunch of entries of the form foo:xxx:cvs (or the "cvs" cvs.texi(,2747) @c would be implicit). This would greatly reduce cvs.texi(,2748) @c security risks such as those hinted at in the cvs.texi(,2749) @c previous paragraph. I think minor changes to CVS cvs.texi(,2750) @c might be required but mostly this would just need cvs.texi(,2751) @c someone who wants to play with it, document it, &c. cvs.texi(,2752) cvs.texi(,2753) In summary, anyone who gets the password gets cvs.texi(,2754) repository access (which may imply some measure of general system cvs.texi(,2755) access as well). The password is available to anyone cvs.texi(,2756) who can sniff network packets or read a protected cvs.texi(,2757) (i.e., user read-only) file. If you want real cvs.texi(,2758) security, get Kerberos. cvs.texi(,2759) cvs.texi(,2760) @node GSSAPI authenticated cvs.texi(,2761) @subsection Direct connection with GSSAPI cvs.texi(,2762) cvs.texi(,2763) @cindex GSSAPI cvs.texi(,2764) @cindex Security, GSSAPI cvs.texi(,2765) @cindex :gserver:, setting up cvs.texi(,2766) @cindex Kerberos, using :gserver: cvs.texi(,2767) GSSAPI is a generic interface to network security cvs.texi(,2768) systems such as Kerberos 5. cvs.texi(,2769) If you have a working GSSAPI library, you can have cvs.texi(,2770) @sc{cvs} connect via a direct @sc{tcp} connection, cvs.texi(,2771) authenticating with GSSAPI. cvs.texi(,2772) cvs.texi(,2773) To do this, @sc{cvs} needs to be compiled with GSSAPI cvs.texi(,2774) support; when configuring @sc{cvs} it tries to detect cvs.texi(,2775) whether GSSAPI libraries using kerberos version 5 are cvs.texi(,2776) present. You can also use the @file{--with-gssapi} cvs.texi(,2777) flag to configure. cvs.texi(,2778) cvs.texi(,2779) The connection is authenticated using GSSAPI, but the cvs.texi(,2780) message stream is @emph{not} authenticated by default. cvs.texi(,2781) You must use the @code{-a} global option to request cvs.texi(,2782) stream authentication. cvs.texi(,2783) cvs.texi(,2784) The data transmitted is @emph{not} encrypted by cvs.texi(,2785) default. Encryption support must be compiled into both cvs.texi(,2786) the client and the server; use the cvs.texi(,2787) @file{--enable-encrypt} configure option to turn it on. cvs.texi(,2788) You must then use the @code{-x} global option to cvs.texi(,2789) request encryption. cvs.texi(,2790) cvs.texi(,2791) GSSAPI connections are handled on the server side by cvs.texi(,2792) the same server which handles the password cvs.texi(,2793) authentication server; see @ref{Password authentication cvs.texi(,2794) server}. If you are using a GSSAPI mechanism such as cvs.texi(,2795) Kerberos which provides for strong authentication, you cvs.texi(,2796) will probably want to disable the ability to cvs.texi(,2797) authenticate via cleartext passwords. To do so, create cvs.texi(,2798) an empty @file{CVSROOT/passwd} password file, and set cvs.texi(,2799) @code{SystemAuth=no} in the config file cvs.texi(,2800) (@pxref{config}). cvs.texi(,2801) cvs.texi(,2802) The GSSAPI server uses a principal name of cvs.texi(,2803) cvs/@var{hostname}, where @var{hostname} is the cvs.texi(,2804) canonical name of the server host. You will have to cvs.texi(,2805) set this up as required by your GSSAPI mechanism. cvs.texi(,2806) cvs.texi(,2807) To connect using GSSAPI, use @samp{:gserver:}. For cvs.texi(,2808) example, cvs.texi(,2809) cvs.texi(,2810) @example cvs.texi(,2811) cvs -d :gserver:faun.example.org:/usr/local/cvsroot checkout foo cvs.texi(,2812) @end example cvs.texi(,2813) cvs.texi(,2814) @node Kerberos authenticated cvs.texi(,2815) @subsection Direct connection with kerberos cvs.texi(,2816) cvs.texi(,2817) @cindex Kerberos, using :kserver: cvs.texi(,2818) @cindex Security, kerberos cvs.texi(,2819) @cindex :kserver:, setting up cvs.texi(,2820) The easiest way to use kerberos is to use the kerberos cvs.texi(,2821) @code{rsh}, as described in @ref{Connecting via rsh}. cvs.texi(,2822) The main disadvantage of using rsh is that all the data cvs.texi(,2823) needs to pass through additional programs, so it may be cvs.texi(,2824) slower. So if you have kerberos installed you can cvs.texi(,2825) connect via a direct @sc{tcp} connection, cvs.texi(,2826) authenticating with kerberos. cvs.texi(,2827) cvs.texi(,2828) This section concerns the kerberos network security cvs.texi(,2829) system, version 4. Kerberos version 5 is supported via cvs.texi(,2830) the GSSAPI generic network security interface, as cvs.texi(,2831) described in the previous section. cvs.texi(,2832) cvs.texi(,2833) To do this, @sc{cvs} needs to be compiled with kerberos cvs.texi(,2834) support; when configuring @sc{cvs} it tries to detect cvs.texi(,2835) whether kerberos is present or you can use the cvs.texi(,2836) @file{--with-krb4} flag to configure. cvs.texi(,2837) cvs.texi(,2838) The data transmitted is @emph{not} encrypted by cvs.texi(,2839) default. Encryption support must be compiled into both cvs.texi(,2840) the client and server; use the cvs.texi(,2841) @file{--enable-encryption} configure option to turn it cvs.texi(,2842) on. You must then use the @code{-x} global option to cvs.texi(,2843) request encryption. cvs.texi(,2844) cvs.texi(,2845) @cindex CVS_CLIENT_PORT cvs.texi(,2846) You need to edit @file{inetd.conf} on the server cvs.texi(,2847) machine to run @code{cvs kserver}. The client uses cvs.texi(,2848) port 1999 by default; if you want to use another port cvs.texi(,2849) specify it in the @code{CVSROOT} (@pxref{Remote repositories}) cvs.texi(,2850) or the @code{CVS_CLIENT_PORT} environment variable cvs.texi(,2851) (@pxref{Environment variables}) on the client. cvs.texi(,2852) cvs.texi(,2853) @cindex kinit cvs.texi(,2854) When you want to use @sc{cvs}, get a ticket in the cvs.texi(,2855) usual way (generally @code{kinit}); it must be a ticket cvs.texi(,2856) which allows you to log into the server machine. Then cvs.texi(,2857) you are ready to go: cvs.texi(,2858) cvs.texi(,2859) @example cvs.texi(,2860) cvs -d :kserver:faun.example.org:/usr/local/cvsroot checkout foo cvs.texi(,2861) @end example cvs.texi(,2862) cvs.texi(,2863) Previous versions of @sc{cvs} would fall back to a cvs.texi(,2864) connection via rsh; this version will not do so. cvs.texi(,2865) cvs.texi(,2866) @node Connecting via fork cvs.texi(,2867) @subsection Connecting with fork cvs.texi(,2868) cvs.texi(,2869) @cindex fork, access method cvs.texi(,2870) @cindex :fork:, setting up cvs.texi(,2871) This access method allows you to connect to a cvs.texi(,2872) repository on your local disk via the remote protocol. cvs.texi(,2873) In other words it does pretty much the same thing as cvs.texi(,2874) @code{:local:}, but various quirks, bugs and the like are cvs.texi(,2875) those of the remote @sc{cvs} rather than the local cvs.texi(,2876) @sc{cvs}. cvs.texi(,2877) cvs.texi(,2878) For day-to-day operations you might prefer either cvs.texi(,2879) @code{:local:} or @code{:fork:}, depending on your cvs.texi(,2880) preferences. Of course @code{:fork:} comes in cvs.texi(,2881) particularly handy in testing or cvs.texi(,2882) debugging @code{cvs} and the remote protocol. cvs.texi(,2883) Specifically, we avoid all of the network-related cvs.texi(,2884) setup/configuration, timeouts, and authentication cvs.texi(,2885) inherent in the other remote access methods but still cvs.texi(,2886) create a connection which uses the remote protocol. cvs.texi(,2887) cvs.texi(,2888) To connect using the @code{fork} method, use cvs.texi(,2889) @samp{:fork:} and the pathname to your local cvs.texi(,2890) repository. For example: cvs.texi(,2891) cvs.texi(,2892) @example cvs.texi(,2893) cvs -d :fork:/usr/local/cvsroot checkout foo cvs.texi(,2894) @end example cvs.texi(,2895) cvs.texi(,2896) @cindex CVS_SERVER, and :fork: cvs.texi(,2897) As with @code{:ext:}, the server is called @samp{cvs} cvs.texi(,2898) by default, or the value of the @code{CVS_SERVER} cvs.texi(,2899) environment variable. cvs.texi(,2900) cvs.texi(,2901) @c --------------------------------------------------------------------- cvs.texi(,2902) @node Read-only access cvs.texi(,2903) @section Read-only repository access cvs.texi(,2904) @cindex Read-only repository access cvs.texi(,2905) @cindex readers (admin file) cvs.texi(,2906) @cindex writers (admin file) cvs.texi(,2907) cvs.texi(,2908) It is possible to grant read-only repository cvs.texi(,2909) access to people using the password-authenticated cvs.texi(,2910) server (@pxref{Password authenticated}). (The cvs.texi(,2911) other access methods do not have explicit support for cvs.texi(,2912) read-only users because those methods all assume login cvs.texi(,2913) access to the repository machine anyway, and therefore cvs.texi(,2914) the user can do whatever local file permissions allow cvs.texi(,2915) her to do.) cvs.texi(,2916) cvs.texi(,2917) A user who has read-only access can do only cvs.texi(,2918) those @sc{cvs} operations which do not modify the cvs.texi(,2919) repository, except for certain ``administrative'' files cvs.texi(,2920) (such as lock files and the history file). It may be cvs.texi(,2921) desirable to use this feature in conjunction with cvs.texi(,2922) user-aliasing (@pxref{Password authentication server}). cvs.texi(,2923) cvs.texi(,2924) Unlike with previous versions of @sc{cvs}, read-only cvs.texi(,2925) users should be able merely to read the repository, and cvs.texi(,2926) not to execute programs on the server or otherwise gain cvs.texi(,2927) unexpected levels of access. Or to be more accurate, cvs.texi(,2928) the @emph{known} holes have been plugged. Because this cvs.texi(,2929) feature is new and has not received a comprehensive cvs.texi(,2930) security audit, you should use whatever level of cvs.texi(,2931) caution seems warranted given your attitude concerning cvs.texi(,2932) security. cvs.texi(,2933) cvs.texi(,2934) There are two ways to specify read-only access cvs.texi(,2935) for a user: by inclusion, and by exclusion. cvs.texi(,2936) cvs.texi(,2937) "Inclusion" means listing that user cvs.texi(,2938) specifically in the @file{$CVSROOT/CVSROOT/readers} cvs.texi(,2939) file, which is simply a newline-separated list of cvs.texi(,2940) users. Here is a sample @file{readers} file: cvs.texi(,2941) cvs.texi(,2942) @example cvs.texi(,2943) melissa cvs.texi(,2944) splotnik cvs.texi(,2945) jrandom cvs.texi(,2946) @end example cvs.texi(,2947) cvs.texi(,2948) @noindent cvs.texi(,2949) (Don't forget the newline after the last user.) cvs.texi(,2950) cvs.texi(,2951) "Exclusion" means explicitly listing everyone cvs.texi(,2952) who has @emph{write} access---if the file cvs.texi(,2953) cvs.texi(,2954) @example cvs.texi(,2955) $CVSROOT/CVSROOT/writers cvs.texi(,2956) @end example cvs.texi(,2957) cvs.texi(,2958) @noindent cvs.texi(,2959) exists, then only cvs.texi(,2960) those users listed in it have write access, and cvs.texi(,2961) everyone else has read-only access (of course, even the cvs.texi(,2962) read-only users still need to be listed in the cvs.texi(,2963) @sc{cvs} @file{passwd} file). The cvs.texi(,2964) @file{writers} file has the same format as the cvs.texi(,2965) @file{readers} file. cvs.texi(,2966) cvs.texi(,2967) Note: if your @sc{cvs} @file{passwd} cvs.texi(,2968) file maps cvs users onto system users (@pxref{Password cvs.texi(,2969) authentication server}), make sure you deny or grant cvs.texi(,2970) read-only access using the @emph{cvs} usernames, not cvs.texi(,2971) the system usernames. That is, the @file{readers} and cvs.texi(,2972) @file{writers} files contain cvs usernames, which may cvs.texi(,2973) or may not be the same as system usernames. cvs.texi(,2974) cvs.texi(,2975) Here is a complete description of the server's cvs.texi(,2976) behavior in deciding whether to grant read-only or cvs.texi(,2977) read-write access: cvs.texi(,2978) cvs.texi(,2979) If @file{readers} exists, and this user is cvs.texi(,2980) listed in it, then she gets read-only access. Or if cvs.texi(,2981) @file{writers} exists, and this user is NOT listed in cvs.texi(,2982) it, then she also gets read-only access (this is true cvs.texi(,2983) even if @file{readers} exists but she is not listed cvs.texi(,2984) there). Otherwise, she gets full read-write access. cvs.texi(,2985) cvs.texi(,2986) Of course there is a conflict if the user is cvs.texi(,2987) listed in both files. This is resolved in the more cvs.texi(,2988) conservative way, it being better to protect the cvs.texi(,2989) repository too much than too little: such a user gets cvs.texi(,2990) read-only access. cvs.texi(,2991) cvs.texi(,2992) @node Server temporary directory cvs.texi(,2993) @section Temporary directories for the server cvs.texi(,2994) @cindex Temporary directories, and server cvs.texi(,2995) @cindex Server, temporary directories cvs.texi(,2996) cvs.texi(,2997) While running, the @sc{cvs} server creates temporary cvs.texi(,2998) directories. They are named cvs.texi(,2999) cvs.texi(,3000) @example cvs.texi(,3001) cvs-serv@var{pid} cvs.texi(,3002) @end example cvs.texi(,3003) cvs.texi(,3004) @noindent cvs.texi(,3005) where @var{pid} is the process identification number of cvs.texi(,3006) the server. cvs.texi(,3007) They are located in the directory specified by cvs.texi(,3008) the @samp{-T} global option (@pxref{Global options}), cvs.texi(,3009) the @code{TMPDIR} environment variable (@pxref{Environment variables}), cvs.texi(,3010) or, failing that, @file{/tmp}. cvs.texi(,3011) cvs.texi(,3012) In most cases the server will remove the temporary cvs.texi(,3013) directory when it is done, whether it finishes normally cvs.texi(,3014) or abnormally. However, there are a few cases in which cvs.texi(,3015) the server does not or cannot remove the temporary cvs.texi(,3016) directory, for example: cvs.texi(,3017) cvs.texi(,3018) @itemize @bullet cvs.texi(,3019) @item cvs.texi(,3020) If the server aborts due to an internal server error, cvs.texi(,3021) it may preserve the directory to aid in debugging cvs.texi(,3022) cvs.texi(,3023) @item cvs.texi(,3024) If the server is killed in a way that it has no way of cvs.texi(,3025) cleaning up (most notably, @samp{kill -KILL} on unix). cvs.texi(,3026) cvs.texi(,3027) @item cvs.texi(,3028) If the system shuts down without an orderly shutdown, cvs.texi(,3029) which tells the server to clean up. cvs.texi(,3030) @end itemize cvs.texi(,3031) cvs.texi(,3032) In cases such as this, you will need to manually remove cvs.texi(,3033) the @file{cvs-serv@var{pid}} directories. As long as cvs.texi(,3034) there is no server running with process identification cvs.texi(,3035) number @var{pid}, it is safe to do so. cvs.texi(,3036) cvs.texi(,3037) @c --------------------------------------------------------------------- cvs.texi(,3038) @node Starting a new project cvs.texi(,3039) @chapter Starting a project with CVS cvs.texi(,3040) @cindex Starting a project with CVS cvs.texi(,3041) @cindex Creating a project cvs.texi(,3042) cvs.texi(,3043) @comment --moduledb-- cvs.texi(,3044) Because renaming files and moving them between cvs.texi(,3045) directories is somewhat inconvenient, the first thing cvs.texi(,3046) you do when you start a new project should be to think cvs.texi(,3047) through your file organization. It is not impossible cvs.texi(,3048) to rename or move files, but it does increase the cvs.texi(,3049) potential for confusion and @sc{cvs} does have some cvs.texi(,3050) quirks particularly in the area of renaming cvs.texi(,3051) directories. @xref{Moving files}. cvs.texi(,3052) cvs.texi(,3053) What to do next depends on the situation at hand. cvs.texi(,3054) cvs.texi(,3055) @menu cvs.texi(,3056) * Setting up the files:: Getting the files into the repository cvs.texi(,3057) * Defining the module:: How to make a module of the files cvs.texi(,3058) @end menu cvs.texi(,3059) @c -- File permissions! cvs.texi(,3060) cvs.texi(,3061) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,3062) @node Setting up the files cvs.texi(,3063) @section Setting up the files cvs.texi(,3064) cvs.texi(,3065) The first step is to create the files inside the repository. This can cvs.texi(,3066) be done in a couple of different ways. cvs.texi(,3067) cvs.texi(,3068) @c -- The contributed scripts cvs.texi(,3069) @menu cvs.texi(,3070) * From files:: This method is useful with old projects cvs.texi(,3071) where files already exists. cvs.texi(,3072) * From other version control systems:: Old projects where you want to cvs.texi(,3073) preserve history from another system. cvs.texi(,3074) * From scratch:: Creating a directory tree from scratch. cvs.texi(,3075) @end menu cvs.texi(,3076) cvs.texi(,3077) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,3078) @node From files cvs.texi(,3079) @subsection Creating a directory tree from a number of files cvs.texi(,3080) @cindex Importing files cvs.texi(,3081) cvs.texi(,3082) When you begin using @sc{cvs}, you will probably already have several cvs.texi(,3083) projects that can be cvs.texi(,3084) put under @sc{cvs} control. In these cases the easiest way is to use the cvs.texi(,3085) @code{import} command. An example is probably the easiest way to cvs.texi(,3086) explain how to use it. If the files you want to install in cvs.texi(,3087) @sc{cvs} reside in @file{@var{wdir}}, and you want them to appear in the cvs.texi(,3088) repository as @file{$CVSROOT/yoyodyne/@var{rdir}}, you can do this: cvs.texi(,3089) cvs.texi(,3090) @example cvs.texi(,3091) $ cd @var{wdir} cvs.texi(,3092) $ cvs import -m "Imported sources" yoyodyne/@var{rdir} yoyo start cvs.texi(,3093) @end example cvs.texi(,3094) cvs.texi(,3095) Unless you supply a log message with the @samp{-m} cvs.texi(,3096) flag, @sc{cvs} starts an editor and prompts for a cvs.texi(,3097) message. The string @samp{yoyo} is a @dfn{vendor tag}, cvs.texi(,3098) and @samp{start} is a @dfn{release tag}. They may fill cvs.texi(,3099) no purpose in this context, but since @sc{cvs} requires cvs.texi(,3100) them they must be present. @xref{Tracking sources}, for cvs.texi(,3101) more information about them. cvs.texi(,3102) cvs.texi(,3103) You can now verify that it worked, and remove your cvs.texi(,3104) original source directory. cvs.texi(,3105) @c FIXME: Need to say more about "verify that it cvs.texi(,3106) @c worked". What should the user look for in the output cvs.texi(,3107) @c from "diff -r"? cvs.texi(,3108) cvs.texi(,3109) @example cvs.texi(,3110) $ cd .. cvs.texi(,3111) $ cvs checkout yoyodyne/@var{rdir} # @r{Explanation below} cvs.texi(,3112) $ diff -r @var{wdir} yoyodyne/@var{rdir} cvs.texi(,3113) $ rm -r @var{wdir} cvs.texi(,3114) @end example cvs.texi(,3115) cvs.texi(,3116) @noindent cvs.texi(,3117) Erasing the original sources is a good idea, to make sure that you do cvs.texi(,3118) not accidentally edit them in @var{wdir}, bypassing @sc{cvs}. cvs.texi(,3119) Of course, it would be wise to make sure that you have cvs.texi(,3120) a backup of the sources before you remove them. cvs.texi(,3121) cvs.texi(,3122) The @code{checkout} command can either take a module cvs.texi(,3123) name as argument (as it has done in all previous cvs.texi(,3124) examples) or a path name relative to @code{$CVSROOT}, cvs.texi(,3125) as it did in the example above. cvs.texi(,3126) cvs.texi(,3127) It is a good idea to check that the permissions cvs.texi(,3128) @sc{cvs} sets on the directories inside @code{$CVSROOT} cvs.texi(,3129) are reasonable, and that they belong to the proper cvs.texi(,3130) groups. @xref{File permissions}. cvs.texi(,3131) cvs.texi(,3132) If some of the files you want to import are binary, you cvs.texi(,3133) may want to use the wrappers features to specify which cvs.texi(,3134) files are binary and which are not. @xref{Wrappers}. cvs.texi(,3135) cvs.texi(,3136) @c The node name is too long, but I am having trouble cvs.texi(,3137) @c thinking of something more concise. cvs.texi(,3138) @node From other version control systems cvs.texi(,3139) @subsection Creating Files From Other Version Control Systems cvs.texi(,3140) @cindex Importing files, from other version control systems cvs.texi(,3141) cvs.texi(,3142) If you have a project which you are maintaining with cvs.texi(,3143) another version control system, such as @sc{rcs}, you cvs.texi(,3144) may wish to put the files from that project into cvs.texi(,3145) @sc{cvs}, and preserve the revision history of the cvs.texi(,3146) files. cvs.texi(,3147) cvs.texi(,3148) @table @asis cvs.texi(,3149) @cindex RCS, importing files from cvs.texi(,3150) @item From RCS cvs.texi(,3151) If you have been using @sc{rcs}, find the @sc{rcs} cvs.texi(,3152) files---usually a file named @file{foo.c} will have its cvs.texi(,3153) @sc{rcs} file in @file{RCS/foo.c,v} (but it could be cvs.texi(,3154) other places; consult the @sc{rcs} documentation for cvs.texi(,3155) details). Then create the appropriate directories in cvs.texi(,3156) @sc{cvs} if they do not already exist. Then copy the cvs.texi(,3157) files into the appropriate directories in the @sc{cvs} cvs.texi(,3158) repository (the name in the repository must be the name cvs.texi(,3159) of the source file with @samp{,v} added; the files go cvs.texi(,3160) directly in the appropriate directory of the repository, cvs.texi(,3161) not in an @file{RCS} subdirectory). This is one of the cvs.texi(,3162) few times when it is a good idea to access the @sc{cvs} cvs.texi(,3163) repository directly, rather than using @sc{cvs} cvs.texi(,3164) commands. Then you are ready to check out a new cvs.texi(,3165) working directory. cvs.texi(,3166) @c Someday there probably should be a "cvs import -t cvs.texi(,3167) @c rcs" or some such. It could even create magic cvs.texi(,3168) @c branches. It could also do something about the case cvs.texi(,3169) @c where the RCS file had a (non-magic) "0" branch. cvs.texi(,3170) cvs.texi(,3171) The @sc{rcs} file should not be locked when you move it cvs.texi(,3172) into @sc{cvs}; if it is, @sc{cvs} will have trouble cvs.texi(,3173) letting you operate on it. cvs.texi(,3174) @c What is the easiest way to unlock your files if you cvs.texi(,3175) @c have them locked? Especially if you have a lot of them? cvs.texi(,3176) @c This is a CVS bug/misfeature; importing RCS files cvs.texi(,3177) @c should ignore whether they are locked and leave them in cvs.texi(,3178) @c an unlocked state. Yet another reason for a separate cvs.texi(,3179) @c "import RCS file" command. cvs.texi(,3180) cvs.texi(,3181) @c How many is "many"? Or do they just import RCS files? cvs.texi(,3182) @item From another version control system cvs.texi(,3183) Many version control systems have the ability to export cvs.texi(,3184) @sc{rcs} files in the standard format. If yours does, cvs.texi(,3185) export the @sc{rcs} files and then follow the above cvs.texi(,3186) instructions. cvs.texi(,3187) cvs.texi(,3188) Failing that, probably your best bet is to write a cvs.texi(,3189) script that will check out the files one revision at a cvs.texi(,3190) time using the command line interface to the other cvs.texi(,3191) system, and then check the revisions into @sc{cvs}. cvs.texi(,3192) The @file{sccs2rcs} script mentioned below may be a cvs.texi(,3193) useful example to follow. cvs.texi(,3194) cvs.texi(,3195) @cindex SCCS, importing files from cvs.texi(,3196) @item From SCCS cvs.texi(,3197) There is a script in the @file{contrib} directory of cvs.texi(,3198) the @sc{cvs} source distribution called @file{sccs2rcs} cvs.texi(,3199) which converts @sc{sccs} files to @sc{rcs} files. cvs.texi(,3200) Note: you must run it on a machine which has both cvs.texi(,3201) @sc{sccs} and @sc{rcs} installed, and like everything cvs.texi(,3202) else in contrib it is unsupported (your mileage may cvs.texi(,3203) vary). cvs.texi(,3204) cvs.texi(,3205) @cindex PVCS, importing files from cvs.texi(,3206) @item From PVCS cvs.texi(,3207) There is a script in the @file{contrib} directory of cvs.texi(,3208) the @sc{cvs} source distribution called @file{pvcs_to_rcs} cvs.texi(,3209) which converts @sc{pvcs} archives to @sc{rcs} files. cvs.texi(,3210) You must run it on a machine which has both cvs.texi(,3211) @sc{pvcs} and @sc{rcs} installed, and like everything cvs.texi(,3212) else in contrib it is unsupported (your mileage may cvs.texi(,3213) vary). See the comments in the script for details. cvs.texi(,3214) @end table cvs.texi(,3215) @c CMZ and/or PATCHY were systems that were used in the cvs.texi(,3216) @c high energy physics community (especially for cvs.texi(,3217) @c CERNLIB). CERN has replaced them with CVS, but the cvs.texi(,3218) @c CAR format seems to live on as a way to submit cvs.texi(,3219) @c changes. There is a program car2cvs which converts cvs.texi(,3220) @c but I'm not sure where one gets a copy. cvs.texi(,3221) @c Not sure it is worth mentioning here, since it would cvs.texi(,3222) @c appear to affect only one particular community. cvs.texi(,3223) @c Best page for more information is: cvs.texi(,3224) @c http://wwwcn1.cern.ch/asd/cvs/index.html cvs.texi(,3225) @c See also: cvs.texi(,3226) @c http://ecponion.cern.ch/ecpsa/cernlib.html cvs.texi(,3227) cvs.texi(,3228) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,3229) @node From scratch cvs.texi(,3230) @subsection Creating a directory tree from scratch cvs.texi(,3231) cvs.texi(,3232) @c Also/instead should be documenting cvs.texi(,3233) @c $ cvs co -l . cvs.texi(,3234) @c $ mkdir tc cvs.texi(,3235) @c $ cvs add tc cvs.texi(,3236) @c $ cd tc cvs.texi(,3237) @c $ mkdir man cvs.texi(,3238) @c $ cvs add man cvs.texi(,3239) @c etc. cvs.texi(,3240) @c Using import to create the directories only is cvs.texi(,3241) @c probably a somewhat confusing concept. cvs.texi(,3242) For a new project, the easiest thing to do is probably cvs.texi(,3243) to create an empty directory structure, like this: cvs.texi(,3244) cvs.texi(,3245) @example cvs.texi(,3246) $ mkdir tc cvs.texi(,3247) $ mkdir tc/man cvs.texi(,3248) $ mkdir tc/testing cvs.texi(,3249) @end example cvs.texi(,3250) cvs.texi(,3251) After that, you use the @code{import} command to create cvs.texi(,3252) the corresponding (empty) directory structure inside cvs.texi(,3253) the repository: cvs.texi(,3254) cvs.texi(,3255) @example cvs.texi(,3256) $ cd tc cvs.texi(,3257) $ cvs import -m "Created directory structure" yoyodyne/@var{dir} yoyo start cvs.texi(,3258) @end example cvs.texi(,3259) cvs.texi(,3260) Then, use @code{add} to add files (and new directories) cvs.texi(,3261) as they appear. cvs.texi(,3262) cvs.texi(,3263) Check that the permissions @sc{cvs} sets on the cvs.texi(,3264) directories inside @code{$CVSROOT} are reasonable. cvs.texi(,3265) cvs.texi(,3266) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,3267) @node Defining the module cvs.texi(,3268) @section Defining the module cvs.texi(,3269) @cindex Defining a module cvs.texi(,3270) @cindex Editing the modules file cvs.texi(,3271) @cindex Module, defining cvs.texi(,3272) @cindex Modules file, changing cvs.texi(,3273) cvs.texi(,3274) The next step is to define the module in the cvs.texi(,3275) @file{modules} file. This is not strictly necessary, cvs.texi(,3276) but modules can be convenient in grouping together cvs.texi(,3277) related files and directories. cvs.texi(,3278) cvs.texi(,3279) In simple cases these steps are sufficient to define a module. cvs.texi(,3280) cvs.texi(,3281) @enumerate cvs.texi(,3282) @item cvs.texi(,3283) Get a working copy of the modules file. cvs.texi(,3284) cvs.texi(,3285) @example cvs.texi(,3286) $ cvs checkout CVSROOT/modules cvs.texi(,3287) $ cd CVSROOT cvs.texi(,3288) @end example cvs.texi(,3289) cvs.texi(,3290) @item cvs.texi(,3291) Edit the file and insert a line that defines the module. @xref{Intro cvs.texi(,3292) administrative files}, for an introduction. @xref{modules}, for a full cvs.texi(,3293) description of the modules file. You can use the cvs.texi(,3294) following line to define the module @samp{tc}: cvs.texi(,3295) cvs.texi(,3296) @example cvs.texi(,3297) tc yoyodyne/tc cvs.texi(,3298) @end example cvs.texi(,3299) cvs.texi(,3300) @item cvs.texi(,3301) Commit your changes to the modules file. cvs.texi(,3302) cvs.texi(,3303) @example cvs.texi(,3304) $ cvs commit -m "Added the tc module." modules cvs.texi(,3305) @end example cvs.texi(,3306) cvs.texi(,3307) @item cvs.texi(,3308) Release the modules module. cvs.texi(,3309) cvs.texi(,3310) @example cvs.texi(,3311) $ cd .. cvs.texi(,3312) $ cvs release -d CVSROOT cvs.texi(,3313) @end example cvs.texi(,3314) @end enumerate cvs.texi(,3315) cvs.texi(,3316) @c --------------------------------------------------------------------- cvs.texi(,3317) @node Revisions cvs.texi(,3318) @chapter Revisions cvs.texi(,3319) cvs.texi(,3320) For many uses of @sc{cvs}, one doesn't need to worry cvs.texi(,3321) too much about revision numbers; @sc{cvs} assigns cvs.texi(,3322) numbers such as @code{1.1}, @code{1.2}, and so on, and cvs.texi(,3323) that is all one needs to know. However, some people cvs.texi(,3324) prefer to have more knowledge and control concerning cvs.texi(,3325) how @sc{cvs} assigns revision numbers. cvs.texi(,3326) cvs.texi(,3327) If one wants to keep track of a set of revisions cvs.texi(,3328) involving more than one file, such as which revisions cvs.texi(,3329) went into a particular release, one uses a @dfn{tag}, cvs.texi(,3330) which is a symbolic revision which can be assigned to a cvs.texi(,3331) numeric revision in each file. cvs.texi(,3332) cvs.texi(,3333) @menu cvs.texi(,3334) * Revision numbers:: The meaning of a revision number cvs.texi(,3335) * Versions revisions releases:: Terminology used in this manual cvs.texi(,3336) * Assigning revisions:: Assigning revisions cvs.texi(,3337) * Tags:: Tags--Symbolic revisions cvs.texi(,3338) * Tagging the working directory:: The cvs tag command cvs.texi(,3339) * Tagging by date/tag:: The cvs rtag command cvs.texi(,3340) * Modifying tags:: Adding, renaming, and deleting tags cvs.texi(,3341) * Tagging add/remove:: Tags with adding and removing files cvs.texi(,3342) * Sticky tags:: Certain tags are persistent cvs.texi(,3343) @end menu cvs.texi(,3344) cvs.texi(,3345) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,3346) @node Revision numbers cvs.texi(,3347) @section Revision numbers cvs.texi(,3348) @cindex Revision numbers cvs.texi(,3349) @cindex Revision tree cvs.texi(,3350) @cindex Linear development cvs.texi(,3351) @cindex Number, revision- cvs.texi(,3352) @cindex Decimal revision number cvs.texi(,3353) @cindex Branch number cvs.texi(,3354) @cindex Number, branch cvs.texi(,3355) cvs.texi(,3356) Each version of a file has a unique @dfn{revision cvs.texi(,3357) number}. Revision numbers look like @samp{1.1}, cvs.texi(,3358) @samp{1.2}, @samp{1.3.2.2} or even @samp{1.3.2.2.4.5}. cvs.texi(,3359) A revision number always has an even number of cvs.texi(,3360) period-separated decimal integers. By default revision cvs.texi(,3361) 1.1 is the first revision of a file. Each successive cvs.texi(,3362) revision is given a new number by increasing the cvs.texi(,3363) rightmost number by one. The following figure displays cvs.texi(,3364) a few revisions, with newer revisions to the right. cvs.texi(,3365) cvs.texi(,3366) @example cvs.texi(,3367) +-----+ +-----+ +-----+ +-----+ +-----+ cvs.texi(,3368) ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! cvs.texi(,3369) +-----+ +-----+ +-----+ +-----+ +-----+ cvs.texi(,3370) @end example cvs.texi(,3371) cvs.texi(,3372) It is also possible to end up with numbers containing cvs.texi(,3373) more than one period, for example @samp{1.3.2.2}. Such cvs.texi(,3374) revisions represent revisions on branches cvs.texi(,3375) (@pxref{Branching and merging}); such revision numbers cvs.texi(,3376) are explained in detail in @ref{Branches and cvs.texi(,3377) revisions}. cvs.texi(,3378) cvs.texi(,3379) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,3380) @node Versions revisions releases cvs.texi(,3381) @section Versions, revisions and releases cvs.texi(,3382) @cindex Revisions, versions and releases cvs.texi(,3383) @cindex Versions, revisions and releases cvs.texi(,3384) @cindex Releases, revisions and versions cvs.texi(,3385) cvs.texi(,3386) A file can have several versions, as described above. cvs.texi(,3387) Likewise, a software product can have several versions. cvs.texi(,3388) A software product is often given a version number such cvs.texi(,3389) as @samp{4.1.1}. cvs.texi(,3390) cvs.texi(,3391) Versions in the first sense are called @dfn{revisions} cvs.texi(,3392) in this document, and versions in the second sense are cvs.texi(,3393) called @dfn{releases}. To avoid confusion, the word cvs.texi(,3394) @dfn{version} is almost never used in this document. cvs.texi(,3395) cvs.texi(,3396) @node Assigning revisions cvs.texi(,3397) @section Assigning revisions cvs.texi(,3398) cvs.texi(,3399) @c We avoid the "major revision" terminology. It seems cvs.texi(,3400) @c like jargon. Hopefully "first number" is clear enough. cvs.texi(,3401) @c cvs.texi(,3402) @c Well, in the context of software release numbers, cvs.texi(,3403) @c "major" and "minor" release or version numbers are cvs.texi(,3404) @c documented in at least the GNU Coding Standards, but I'm cvs.texi(,3405) @c still not sure I find that a valid reason to apply the cvs.texi(,3406) @c terminology to RCS revision numbers. "First", "Second", cvs.texi(,3407) @c "subsequent", and so on is almost surely clearer, cvs.texi(,3408) @c especially to a novice reader. -DRP cvs.texi(,3409) By default, @sc{cvs} will assign numeric revisions by cvs.texi(,3410) leaving the first number the same and incrementing the cvs.texi(,3411) second number. For example, @code{1.1}, @code{1.2}, cvs.texi(,3412) @code{1.3}, etc. cvs.texi(,3413) cvs.texi(,3414) When adding a new file, the second number will always cvs.texi(,3415) be one and the first number will equal the highest cvs.texi(,3416) first number of any file in that directory. For cvs.texi(,3417) example, the current directory contains files whose cvs.texi(,3418) highest numbered revisions are @code{1.7}, @code{3.1}, cvs.texi(,3419) and @code{4.12}, then an added file will be given the cvs.texi(,3420) numeric revision @code{4.1}. cvs.texi(,3421) cvs.texi(,3422) @c This is sort of redundant with something we said a cvs.texi(,3423) @c while ago. Somewhere we need a better way of cvs.texi(,3424) @c introducing how the first number can be anything cvs.texi(,3425) @c except "1", perhaps. Also I don't think this cvs.texi(,3426) @c presentation is clear on why we are discussing releases cvs.texi(,3427) @c and first numbers of numeric revisions in the same cvs.texi(,3428) @c breath. cvs.texi(,3429) Normally there is no reason to care cvs.texi(,3430) about the revision numbers---it is easier to treat them cvs.texi(,3431) as internal numbers that @sc{cvs} maintains, and tags cvs.texi(,3432) provide a better way to distinguish between things like cvs.texi(,3433) release 1 versus release 2 of your product cvs.texi(,3434) (@pxref{Tags}). However, if you want to set the cvs.texi(,3435) numeric revisions, the @samp{-r} option to @code{cvs cvs.texi(,3436) commit} can do that. The @samp{-r} option implies the cvs.texi(,3437) @samp{-f} option, in the sense that it causes the cvs.texi(,3438) files to be committed even if they are not modified. cvs.texi(,3439) cvs.texi(,3440) For example, to bring all your files up to cvs.texi(,3441) revision 3.0 (including those that haven't changed), cvs.texi(,3442) you might invoke: cvs.texi(,3443) cvs.texi(,3444) @example cvs.texi(,3445) $ cvs commit -r 3.0 cvs.texi(,3446) @end example cvs.texi(,3447) cvs.texi(,3448) Note that the number you specify with @samp{-r} must be cvs.texi(,3449) larger than any existing revision number. That is, if cvs.texi(,3450) revision 3.0 exists, you cannot @samp{cvs commit cvs.texi(,3451) -r 1.3}. If you want to maintain several releases in cvs.texi(,3452) parallel, you need to use a branch (@pxref{Branching and merging}). cvs.texi(,3453) cvs.texi(,3454) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,3455) @node Tags cvs.texi(,3456) @section Tags--Symbolic revisions cvs.texi(,3457) @cindex Tags cvs.texi(,3458) cvs.texi(,3459) The revision numbers live a life of their own. They cvs.texi(,3460) need not have anything at all to do with the release cvs.texi(,3461) numbers of your software product. Depending cvs.texi(,3462) on how you use @sc{cvs} the revision numbers might change several times cvs.texi(,3463) between two releases. As an example, some of the cvs.texi(,3464) source files that make up @sc{rcs} 5.6 have the following cvs.texi(,3465) revision numbers: cvs.texi(,3466) @cindex RCS revision numbers cvs.texi(,3467) cvs.texi(,3468) @example cvs.texi(,3469) ci.c 5.21 cvs.texi(,3470) co.c 5.9 cvs.texi(,3471) ident.c 5.3 cvs.texi(,3472) rcs.c 5.12 cvs.texi(,3473) rcsbase.h 5.11 cvs.texi(,3474) rcsdiff.c 5.10 cvs.texi(,3475) rcsedit.c 5.11 cvs.texi(,3476) rcsfcmp.c 5.9 cvs.texi(,3477) rcsgen.c 5.10 cvs.texi(,3478) rcslex.c 5.11 cvs.texi(,3479) rcsmap.c 5.2 cvs.texi(,3480) rcsutil.c 5.10 cvs.texi(,3481) @end example cvs.texi(,3482) cvs.texi(,3483) @cindex tag (subcommand), introduction cvs.texi(,3484) @cindex Tags, symbolic name cvs.texi(,3485) @cindex Symbolic name (tag) cvs.texi(,3486) @cindex Name, symbolic (tag) cvs.texi(,3487) @cindex HEAD, as reserved tag name cvs.texi(,3488) @cindex BASE, as reserved tag name cvs.texi(,3489) You can use the @code{tag} command to give a symbolic name to a cvs.texi(,3490) certain revision of a file. You can use the @samp{-v} flag to the cvs.texi(,3491) @code{status} command to see all tags that a file has, and cvs.texi(,3492) which revision numbers they represent. Tag names must cvs.texi(,3493) start with an uppercase or lowercase letter and can cvs.texi(,3494) contain uppercase and lowercase letters, digits, cvs.texi(,3495) @samp{-}, and @samp{_}. The two tag names @code{BASE} cvs.texi(,3496) and @code{HEAD} are reserved for use by @sc{cvs}. It cvs.texi(,3497) is expected that future names which are special to cvs.texi(,3498) @sc{cvs} will be specially named, for example by cvs.texi(,3499) starting with @samp{.}, rather than being named analogously to cvs.texi(,3500) @code{BASE} and @code{HEAD}, to avoid conflicts with cvs.texi(,3501) actual tag names. cvs.texi(,3502) @c Including a character such as % or = has also been cvs.texi(,3503) @c suggested as the naming convention for future cvs.texi(,3504) @c special tag names. Starting with . is nice because cvs.texi(,3505) @c that is not a legal tag name as far as RCS is concerned. cvs.texi(,3506) @c FIXME: CVS actually accepts quite a few characters cvs.texi(,3507) @c in tag names, not just the ones documented above cvs.texi(,3508) @c (see RCS_check_tag). RCS cvs.texi(,3509) @c defines legitimate tag names by listing illegal cvs.texi(,3510) @c characters rather than legal ones. CVS is said to lose its cvs.texi(,3511) @c mind if you try to use "/" (try making such a tag sticky cvs.texi(,3512) @c and using "cvs status" client/server--see remote cvs.texi(,3513) @c protocol format for entries line for probable cause). cvs.texi(,3514) @c TODO: The testsuite cvs.texi(,3515) @c should test for whatever are documented above as cvs.texi(,3516) @c officially-OK tag names, and CVS should at least reject cvs.texi(,3517) @c characters that won't work, like "/". cvs.texi(,3518) cvs.texi(,3519) You'll want to choose some convention for naming tags, cvs.texi(,3520) based on information such as the name of the program cvs.texi(,3521) and the version number of the release. For example, cvs.texi(,3522) one might take the name of the program, immediately cvs.texi(,3523) followed by the version number with @samp{.} changed to cvs.texi(,3524) @samp{-}, so that @sc{cvs} 1.9 would be tagged with the name cvs.texi(,3525) @code{cvs1-9}. If you choose a consistent convention, cvs.texi(,3526) then you won't constantly be guessing whether a tag is cvs.texi(,3527) @code{cvs-1-9} or @code{cvs1_9} or what. You might cvs.texi(,3528) even want to consider enforcing your convention in the cvs.texi(,3529) taginfo file (@pxref{user-defined logging}). cvs.texi(,3530) @c Might be nice to say more about using taginfo this cvs.texi(,3531) @c way, like giving an example, or pointing out any particular cvs.texi(,3532) @c issues which arise. cvs.texi(,3533) cvs.texi(,3534) @cindex Adding a tag cvs.texi(,3535) @cindex Tags, example cvs.texi(,3536) The following example shows how you can add a tag to a cvs.texi(,3537) file. The commands must be issued inside your working cvs.texi(,3538) directory. That is, you should issue the cvs.texi(,3539) command in the directory where @file{backend.c} cvs.texi(,3540) resides. cvs.texi(,3541) cvs.texi(,3542) @example cvs.texi(,3543) $ cvs tag rel-0-4 backend.c cvs.texi(,3544) T backend.c cvs.texi(,3545) $ cvs status -v backend.c cvs.texi(,3546) =================================================================== cvs.texi(,3547) File: backend.c Status: Up-to-date cvs.texi(,3548) cvs.texi(,3549) Version: 1.4 Tue Dec 1 14:39:01 1992 cvs.texi(,3550) RCS Version: 1.4 /u/cvsroot/yoyodyne/tc/backend.c,v cvs.texi(,3551) Sticky Tag: (none) cvs.texi(,3552) Sticky Date: (none) cvs.texi(,3553) Sticky Options: (none) cvs.texi(,3554) cvs.texi(,3555) Existing Tags: cvs.texi(,3556) rel-0-4 (revision: 1.4) cvs.texi(,3557) cvs.texi(,3558) @end example cvs.texi(,3559) cvs.texi(,3560) For a complete summary of the syntax of @code{cvs tag}, cvs.texi(,3561) including the various options, see @ref{Invoking CVS}. cvs.texi(,3562) cvs.texi(,3563) There is seldom reason to tag a file in isolation. A more common use is cvs.texi(,3564) to tag all the files that constitute a module with the same tag at cvs.texi(,3565) strategic points in the development life-cycle, such as when a release cvs.texi(,3566) is made. cvs.texi(,3567) cvs.texi(,3568) @example cvs.texi(,3569) $ cvs tag rel-1-0 . cvs.texi(,3570) cvs tag: Tagging . cvs.texi(,3571) T Makefile cvs.texi(,3572) T backend.c cvs.texi(,3573) T driver.c cvs.texi(,3574) T frontend.c cvs.texi(,3575) T parser.c cvs.texi(,3576) @end example cvs.texi(,3577) cvs.texi(,3578) @noindent cvs.texi(,3579) (When you give @sc{cvs} a directory as argument, it generally applies the cvs.texi(,3580) operation to all the files in that directory, and (recursively), to any cvs.texi(,3581) subdirectories that it may contain. @xref{Recursive behavior}.) cvs.texi(,3582) cvs.texi(,3583) @cindex Retrieving an old revision using tags cvs.texi(,3584) @cindex Tags, retrieving old revisions cvs.texi(,3585) The @code{checkout} command has a flag, @samp{-r}, that lets you check out cvs.texi(,3586) a certain revision of a module. This flag makes it easy to cvs.texi(,3587) retrieve the sources that make up release 1.0 of the module @samp{tc} at cvs.texi(,3588) any time in the future: cvs.texi(,3589) cvs.texi(,3590) @example cvs.texi(,3591) $ cvs checkout -r rel-1-0 tc cvs.texi(,3592) @end example cvs.texi(,3593) cvs.texi(,3594) @noindent cvs.texi(,3595) This is useful, for instance, if someone claims that there is a bug in cvs.texi(,3596) that release, but you cannot find the bug in the current working copy. cvs.texi(,3597) cvs.texi(,3598) You can also check out a module as it was at any given date. cvs.texi(,3599) @xref{checkout options}. When specifying @samp{-r} to cvs.texi(,3600) any of these commands, you will need beware of sticky cvs.texi(,3601) tags; see @ref{Sticky tags}. cvs.texi(,3602) cvs.texi(,3603) When you tag more than one file with the same tag you cvs.texi(,3604) can think about the tag as "a curve drawn through a cvs.texi(,3605) matrix of filename vs. revision number." Say we have 5 cvs.texi(,3606) files with the following revisions: cvs.texi(,3607) cvs.texi(,3608) @example cvs.texi(,3609) @group cvs.texi(,3610) file1 file2 file3 file4 file5 cvs.texi(,3611) cvs.texi(,3612) 1.1 1.1 1.1 1.1 /--1.1* <-*- TAG cvs.texi(,3613) 1.2*- 1.2 1.2 -1.2*- cvs.texi(,3614) 1.3 \- 1.3*- 1.3 / 1.3 cvs.texi(,3615) 1.4 \ 1.4 / 1.4 cvs.texi(,3616) \-1.5*- 1.5 cvs.texi(,3617) 1.6 cvs.texi(,3618) @end group cvs.texi(,3619) @end example cvs.texi(,3620) cvs.texi(,3621) At some time in the past, the @code{*} versions were tagged. cvs.texi(,3622) You can think of the tag as a handle attached to the curve cvs.texi(,3623) drawn through the tagged revisions. When you pull on cvs.texi(,3624) the handle, you get all the tagged revisions. Another cvs.texi(,3625) way to look at it is that you "sight" through a set of cvs.texi(,3626) revisions that is "flat" along the tagged revisions, cvs.texi(,3627) like this: cvs.texi(,3628) cvs.texi(,3629) @example cvs.texi(,3630) @group cvs.texi(,3631) file1 file2 file3 file4 file5 cvs.texi(,3632) cvs.texi(,3633) 1.1 cvs.texi(,3634) 1.2 cvs.texi(,3635) 1.1 1.3 _ cvs.texi(,3636) 1.1 1.2 1.4 1.1 / cvs.texi(,3637) 1.2*----1.3*----1.5*----1.2*----1.1 (--- <--- Look here cvs.texi(,3638) 1.3 1.6 1.3 \_ cvs.texi(,3639) 1.4 1.4 cvs.texi(,3640) 1.5 cvs.texi(,3641) @end group cvs.texi(,3642) @end example cvs.texi(,3643) cvs.texi(,3644) @node Tagging the working directory cvs.texi(,3645) @section Specifying what to tag from the working directory cvs.texi(,3646) cvs.texi(,3647) @cindex tag (subcommand) cvs.texi(,3648) The example in the previous section demonstrates one of cvs.texi(,3649) the most common ways to choose which revisions to tag. cvs.texi(,3650) Namely, running the @code{cvs tag} command without cvs.texi(,3651) arguments causes @sc{cvs} to select the revisions which cvs.texi(,3652) are checked out in the current working directory. For cvs.texi(,3653) example, if the copy of @file{backend.c} in working cvs.texi(,3654) directory was checked out from revision 1.4, then cvs.texi(,3655) @sc{cvs} will tag revision 1.4. Note that the tag is cvs.texi(,3656) applied immediately to revision 1.4 in the repository; cvs.texi(,3657) tagging is not like modifying a file, or other cvs.texi(,3658) operations in which one first modifies the working cvs.texi(,3659) directory and then runs @code{cvs commit} to transfer cvs.texi(,3660) that modification to the repository. cvs.texi(,3661) cvs.texi(,3662) One potentially surprising aspect of the fact that cvs.texi(,3663) @code{cvs tag} operates on the repository is that you cvs.texi(,3664) are tagging the checked-in revisions, which may differ cvs.texi(,3665) from locally modified files in your working directory. cvs.texi(,3666) If you want to avoid doing this by mistake, specify the cvs.texi(,3667) @samp{-c} option to @code{cvs tag}. If there are any cvs.texi(,3668) locally modified files, @sc{cvs} will abort with an cvs.texi(,3669) error before it tags any files: cvs.texi(,3670) cvs.texi(,3671) @example cvs.texi(,3672) $ cvs tag -c rel-0-4 cvs.texi(,3673) cvs tag: backend.c is locally modified cvs.texi(,3674) cvs [tag aborted]: correct the above errors first! cvs.texi(,3675) @end example cvs.texi(,3676) cvs.texi(,3677) @node Tagging by date/tag cvs.texi(,3678) @section Specifying what to tag by date or revision cvs.texi(,3679) @cindex rtag (subcommand) cvs.texi(,3680) cvs.texi(,3681) The @code{cvs rtag} command tags the repository as of a cvs.texi(,3682) certain date or time (or can be used to tag the latest cvs.texi(,3683) revision). @code{rtag} works directly on the cvs.texi(,3684) repository contents (it requires no prior checkout and cvs.texi(,3685) does not look for a working directory). cvs.texi(,3686) cvs.texi(,3687) The following options specify which date or revision to cvs.texi(,3688) tag. See @ref{Common options}, for a complete cvs.texi(,3689) description of them. cvs.texi(,3690) cvs.texi(,3691) @table @code cvs.texi(,3692) @item -D @var{date} cvs.texi(,3693) Tag the most recent revision no later than @var{date}. cvs.texi(,3694) cvs.texi(,3695) @item -f cvs.texi(,3696) Only useful with the @samp{-D @var{date}} or @samp{-r @var{tag}} cvs.texi(,3697) flags. If no matching revision is found, use the most cvs.texi(,3698) recent revision (instead of ignoring the file). cvs.texi(,3699) cvs.texi(,3700) @item -r @var{tag} cvs.texi(,3701) Only tag those files that contain existing tag @var{tag}. cvs.texi(,3702) @end table cvs.texi(,3703) cvs.texi(,3704) The @code{cvs tag} command also allows one to specify cvs.texi(,3705) files by revision or date, using the same @samp{-r}, cvs.texi(,3706) @samp{-D}, and @samp{-f} options. However, this cvs.texi(,3707) feature is probably not what you want. The reason is cvs.texi(,3708) that @code{cvs tag} chooses which files to tag based on cvs.texi(,3709) the files that exist in the working directory, rather cvs.texi(,3710) than the files which existed as of the given tag/date. cvs.texi(,3711) Therefore, you are generally better off using @code{cvs cvs.texi(,3712) rtag}. The exceptions might be cases like: cvs.texi(,3713) cvs.texi(,3714) @example cvs.texi(,3715) cvs tag -r 1.4 stable backend.c cvs.texi(,3716) @end example cvs.texi(,3717) cvs.texi(,3718) @node Modifying tags cvs.texi(,3719) @section Deleting, moving, and renaming tags cvs.texi(,3720) cvs.texi(,3721) @c Also see: cvs.texi(,3722) @c "How do I move or rename a magic branch tag?" cvs.texi(,3723) @c in the FAQ (I think the issues it talks about still cvs.texi(,3724) @c apply, but this could use some sanity.sh work). cvs.texi(,3725) cvs.texi(,3726) Normally one does not modify tags. They exist in order cvs.texi(,3727) to record the history of the repository and so deleting cvs.texi(,3728) them or changing their meaning would, generally, not be cvs.texi(,3729) what you want. cvs.texi(,3730) cvs.texi(,3731) However, there might be cases in which one uses a tag cvs.texi(,3732) temporarily or accidentally puts one in the wrong cvs.texi(,3733) place. Therefore, one might delete, move, or rename a cvs.texi(,3734) tag. cvs.texi(,3735) cvs.texi(,3736) @noindent cvs.texi(,3737) @strong{WARNING: the commands in this section are cvs.texi(,3738) dangerous; they permanently discard historical cvs.texi(,3739) information and it can be difficult or impossible to cvs.texi(,3740) recover from errors. If you are a @sc{cvs} cvs.texi(,3741) administrator, you may consider restricting these cvs.texi(,3742) commands with taginfo (@pxref{user-defined logging}).} cvs.texi(,3743) cvs.texi(,3744) @cindex Deleting tags cvs.texi(,3745) @cindex Deleting branch tags cvs.texi(,3746) @cindex Removing tags cvs.texi(,3747) @cindex Removing branch tags cvs.texi(,3748) @cindex Tags, deleting cvs.texi(,3749) @cindex Branch tags, deleting cvs.texi(,3750) To delete a tag, specify the @samp{-d} option to either cvs.texi(,3751) @code{cvs tag} or @code{cvs rtag}. For example: cvs.texi(,3752) cvs.texi(,3753) @example cvs.texi(,3754) cvs rtag -d rel-0-4 tc cvs.texi(,3755) @end example cvs.texi(,3756) cvs.texi(,3757) @noindent cvs.texi(,3758) deletes the non-branch tag @code{rel-0-4} from the module @code{tc}. cvs.texi(,3759) In the event that branch tags are encountered within the repository cvs.texi(,3760) with the given name, a warning message will be issued and the branch cvs.texi(,3761) tag will not be deleted. If you are absolutely certain you know what cvs.texi(,3762) you are doing, the @code{-B} option may be specified to allow deletion cvs.texi(,3763) of branch tags. In that case, any non-branch tags encountered will cvs.texi(,3764) trigger warnings and will not be deleted. cvs.texi(,3765) cvs.texi(,3766) @noindent cvs.texi(,3767) @strong{WARNING: Moving branch tags is very dangerous! If you think cvs.texi(,3768) you need the @code{-B} option, think again and ask your @sc{cvs} cvs.texi(,3769) administrator about it (if that isn't you). There is almost certainly cvs.texi(,3770) another way to accomplish what you want to accomplish.} cvs.texi(,3771) cvs.texi(,3772) @cindex Moving tags cvs.texi(,3773) @cindex Moving branch tags cvs.texi(,3774) @cindex Tags, moving cvs.texi(,3775) @cindex Branch tags, moving cvs.texi(,3776) When we say @dfn{move} a tag, we mean to make the same cvs.texi(,3777) name point to different revisions. For example, the cvs.texi(,3778) @code{stable} tag may currently point to revision 1.4 cvs.texi(,3779) of @file{backend.c} and perhaps we want to make it cvs.texi(,3780) point to revision 1.6. To move a non-branch tag, specify the cvs.texi(,3781) @samp{-F} option to either @code{cvs tag} or @code{cvs cvs.texi(,3782) rtag}. For example, the task just mentioned might be cvs.texi(,3783) accomplished as: cvs.texi(,3784) cvs.texi(,3785) @example cvs.texi(,3786) cvs tag -r 1.6 -F stable backend.c cvs.texi(,3787) @end example cvs.texi(,3788) cvs.texi(,3789) @noindent cvs.texi(,3790) If any branch tags are encountered in the repository cvs.texi(,3791) with the given name, a warning is issued and the branch cvs.texi(,3792) tag is not disturbed. If you are absolutely certain you cvs.texi(,3793) wish to move the branch tag, the @code{-B} option may be specified. cvs.texi(,3794) In that case, non-branch tags encountered with the given cvs.texi(,3795) name are ignored with a warning message. cvs.texi(,3796) cvs.texi(,3797) @noindent cvs.texi(,3798) @strong{WARNING: Moving branch tags is very dangerous! If you think you cvs.texi(,3799) need the @code{-B} option, think again and ask your @sc{cvs} cvs.texi(,3800) administrator about it (if that isn't you). There is almost certainly cvs.texi(,3801) another way to accomplish what you want to accomplish.} cvs.texi(,3802) cvs.texi(,3803) @cindex Renaming tags cvs.texi(,3804) @cindex Tags, renaming cvs.texi(,3805) When we say @dfn{rename} a tag, we mean to make a cvs.texi(,3806) different name point to the same revisions as the old cvs.texi(,3807) tag. For example, one may have misspelled the tag name cvs.texi(,3808) and want to correct it (hopefully before others are cvs.texi(,3809) relying on the old spelling). To rename a tag, first cvs.texi(,3810) create a new tag using the @samp{-r} option to cvs.texi(,3811) @code{cvs rtag}, and then delete the old name. (Caution: cvs.texi(,3812) this method will not work with branch tags.) cvs.texi(,3813) This leaves the new tag on exactly the cvs.texi(,3814) same files as the old tag. For example: cvs.texi(,3815) cvs.texi(,3816) @example cvs.texi(,3817) cvs rtag -r old-name-0-4 rel-0-4 tc cvs.texi(,3818) cvs rtag -d old-name-0-4 tc cvs.texi(,3819) @end example cvs.texi(,3820) cvs.texi(,3821) @node Tagging add/remove cvs.texi(,3822) @section Tagging and adding and removing files cvs.texi(,3823) cvs.texi(,3824) The subject of exactly how tagging interacts with cvs.texi(,3825) adding and removing files is somewhat obscure; for the cvs.texi(,3826) most part @sc{cvs} will keep track of whether files cvs.texi(,3827) exist or not without too much fussing. By default, cvs.texi(,3828) tags are applied to only files which have a revision cvs.texi(,3829) corresponding to what is being tagged. Files which did cvs.texi(,3830) not exist yet, or which were already removed, simply cvs.texi(,3831) omit the tag, and @sc{cvs} knows to treat the absence cvs.texi(,3832) of a tag as meaning that the file didn't exist as of cvs.texi(,3833) that tag. cvs.texi(,3834) cvs.texi(,3835) However, this can lose a small amount of information. cvs.texi(,3836) For example, suppose a file was added and then removed. cvs.texi(,3837) Then, if the tag is missing for that file, there is no cvs.texi(,3838) way to know whether the tag refers to the time before cvs.texi(,3839) the file was added, or the time after it was removed. cvs.texi(,3840) If you specify the @samp{-r} option to @code{cvs rtag}, cvs.texi(,3841) then @sc{cvs} tags the files which have been removed, cvs.texi(,3842) and thereby avoids this problem. For example, one cvs.texi(,3843) might specify @code{-r HEAD} to tag the head. cvs.texi(,3844) cvs.texi(,3845) On the subject of adding and removing files, the cvs.texi(,3846) @code{cvs rtag} command has a @samp{-a} option which cvs.texi(,3847) means to clear the tag from removed files that would cvs.texi(,3848) not otherwise be tagged. For example, one might cvs.texi(,3849) specify this option in conjunction with @samp{-F} when cvs.texi(,3850) moving a tag. If one moved a tag without @samp{-a}, cvs.texi(,3851) then the tag in the removed files might still refer to cvs.texi(,3852) the old revision, rather than reflecting the fact that cvs.texi(,3853) the file had been removed. I don't think this is cvs.texi(,3854) necessary if @samp{-r} is specified, as noted above. cvs.texi(,3855) cvs.texi(,3856) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,3857) @node Sticky tags cvs.texi(,3858) @section Sticky tags cvs.texi(,3859) @cindex Sticky tags cvs.texi(,3860) @cindex Tags, sticky cvs.texi(,3861) cvs.texi(,3862) @c A somewhat related issue is per-directory sticky cvs.texi(,3863) @c tags (see comment at CVS/Tag in node Working cvs.texi(,3864) @c directory storage); we probably want to say cvs.texi(,3865) @c something like "you can set a sticky tag for only cvs.texi(,3866) @c some files, but you don't want to" or some such. cvs.texi(,3867) cvs.texi(,3868) Sometimes a working copy's revision has extra data cvs.texi(,3869) associated with it, for example it might be on a branch cvs.texi(,3870) (@pxref{Branching and merging}), or restricted to cvs.texi(,3871) versions prior to a certain date by @samp{checkout -D} cvs.texi(,3872) or @samp{update -D}. Because this data persists -- cvs.texi(,3873) that is, it applies to subsequent commands in the cvs.texi(,3874) working copy -- we refer to it as @dfn{sticky}. cvs.texi(,3875) cvs.texi(,3876) Most of the time, stickiness is an obscure aspect of cvs.texi(,3877) @sc{cvs} that you don't need to think about. However, cvs.texi(,3878) even if you don't want to use the feature, you may need cvs.texi(,3879) to know @emph{something} about sticky tags (for cvs.texi(,3880) example, how to avoid them!). cvs.texi(,3881) cvs.texi(,3882) You can use the @code{status} command to see if any cvs.texi(,3883) sticky tags or dates are set: cvs.texi(,3884) cvs.texi(,3885) @example cvs.texi(,3886) $ cvs status driver.c cvs.texi(,3887) =================================================================== cvs.texi(,3888) File: driver.c Status: Up-to-date cvs.texi(,3889) cvs.texi(,3890) Version: 1.7.2.1 Sat Dec 5 19:35:03 1992 cvs.texi(,3891) RCS Version: 1.7.2.1 /u/cvsroot/yoyodyne/tc/driver.c,v cvs.texi(,3892) Sticky Tag: rel-1-0-patches (branch: 1.7.2) cvs.texi(,3893) Sticky Date: (none) cvs.texi(,3894) Sticky Options: (none) cvs.texi(,3895) cvs.texi(,3896) @end example cvs.texi(,3897) cvs.texi(,3898) @cindex Resetting sticky tags cvs.texi(,3899) @cindex Sticky tags, resetting cvs.texi(,3900) @cindex Deleting sticky tags cvs.texi(,3901) The sticky tags will remain on your working files until cvs.texi(,3902) you delete them with @samp{cvs update -A}. The cvs.texi(,3903) @samp{-A} option merges local changes into the version of the cvs.texi(,3904) file from the head of the trunk, removing any sticky tags, cvs.texi(,3905) dates, or options. See @ref{update} for more on the operation cvs.texi(,3906) of @code{cvs update}. cvs.texi(,3907) cvs.texi(,3908) @cindex Sticky date cvs.texi(,3909) The most common use of sticky tags is to identify which cvs.texi(,3910) branch one is working on, as described in cvs.texi(,3911) @ref{Accessing branches}. However, non-branch cvs.texi(,3912) sticky tags have uses as well. For example, cvs.texi(,3913) suppose that you want to avoid updating your working cvs.texi(,3914) directory, to isolate yourself from possibly cvs.texi(,3915) destabilizing changes other people are making. You cvs.texi(,3916) can, of course, just refrain from running @code{cvs cvs.texi(,3917) update}. But if you want to avoid updating only a cvs.texi(,3918) portion of a larger tree, then sticky tags can help. cvs.texi(,3919) If you check out a certain revision (such as 1.4) it cvs.texi(,3920) will become sticky. Subsequent @code{cvs update} cvs.texi(,3921) commands will cvs.texi(,3922) not retrieve the latest revision until you reset the cvs.texi(,3923) tag with @code{cvs update -A}. Likewise, use of the cvs.texi(,3924) @samp{-D} option to @code{update} or @code{checkout} cvs.texi(,3925) sets a @dfn{sticky date}, which, similarly, causes that cvs.texi(,3926) date to be used for future retrievals. cvs.texi(,3927) cvs.texi(,3928) People often want to retrieve an old version of cvs.texi(,3929) a file without setting a sticky tag. This can cvs.texi(,3930) be done with the @samp{-p} option to @code{checkout} or cvs.texi(,3931) @code{update}, which sends the contents of the file to cvs.texi(,3932) standard output. For example: cvs.texi(,3933) @example cvs.texi(,3934) $ cvs update -p -r 1.1 file1 >file1 cvs.texi(,3935) =================================================================== cvs.texi(,3936) Checking out file1 cvs.texi(,3937) RCS: /tmp/cvs-sanity/cvsroot/first-dir/Attic/file1,v cvs.texi(,3938) VERS: 1.1 cvs.texi(,3939) *************** cvs.texi(,3940) $ cvs.texi(,3941) @end example cvs.texi(,3942) cvs.texi(,3943) However, this isn't the easiest way, if you are asking cvs.texi(,3944) how to undo a previous checkin (in this example, put cvs.texi(,3945) @file{file1} back to the way it was as of revision cvs.texi(,3946) 1.1). In that case you are better off using the cvs.texi(,3947) @samp{-j} option to @code{update}; for further cvs.texi(,3948) discussion see @ref{Merging two revisions}. cvs.texi(,3949) cvs.texi(,3950) @c --------------------------------------------------------------------- cvs.texi(,3951) @node Branching and merging cvs.texi(,3952) @chapter Branching and merging cvs.texi(,3953) @cindex Branching cvs.texi(,3954) @cindex Merging cvs.texi(,3955) @cindex Copying changes cvs.texi(,3956) @cindex Main trunk and branches cvs.texi(,3957) @cindex Revision tree, making branches cvs.texi(,3958) @cindex Branches, copying changes between cvs.texi(,3959) @cindex Changes, copying between branches cvs.texi(,3960) @cindex Modifications, copying between branches cvs.texi(,3961) cvs.texi(,3962) @sc{cvs} allows you to isolate changes onto a separate cvs.texi(,3963) line of development, known as a @dfn{branch}. When you cvs.texi(,3964) change files on a branch, those changes do not appear cvs.texi(,3965) on the main trunk or other branches. cvs.texi(,3966) cvs.texi(,3967) Later you can move changes from one branch to another cvs.texi(,3968) branch (or the main trunk) by @dfn{merging}. Merging cvs.texi(,3969) involves first running @code{cvs update -j}, to merge cvs.texi(,3970) the changes into the working directory. cvs.texi(,3971) You can then commit that revision, and thus effectively cvs.texi(,3972) copy the changes onto another branch. cvs.texi(,3973) cvs.texi(,3974) @menu cvs.texi(,3975) * Branches motivation:: What branches are good for cvs.texi(,3976) * Creating a branch:: Creating a branch cvs.texi(,3977) * Accessing branches:: Checking out and updating branches cvs.texi(,3978) * Branches and revisions:: Branches are reflected in revision numbers cvs.texi(,3979) * Magic branch numbers:: Magic branch numbers cvs.texi(,3980) * Merging a branch:: Merging an entire branch cvs.texi(,3981) * Merging more than once:: Merging from a branch several times cvs.texi(,3982) * Merging two revisions:: Merging differences between two revisions cvs.texi(,3983) * Merging adds and removals:: What if files are added or removed? cvs.texi(,3984) * Merging and keywords:: Avoiding conflicts due to keyword substitution cvs.texi(,3985) @end menu cvs.texi(,3986) cvs.texi(,3987) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,3988) @node Branches motivation cvs.texi(,3989) @section What branches are good for cvs.texi(,3990) @cindex Branches motivation cvs.texi(,3991) @cindex What branches are good for cvs.texi(,3992) @cindex Motivation for branches cvs.texi(,3993) cvs.texi(,3994) @c FIXME: this node mentions one way to use branches, cvs.texi(,3995) @c but it is by no means the only way. For example, cvs.texi(,3996) @c the technique of committing a new feature on a branch, cvs.texi(,3997) @c until it is ready for the main trunk. The whole cvs.texi(,3998) @c thing is generally speaking more akin to the cvs.texi(,3999) @c "Revision management" node although it isn't clear to cvs.texi(,4000) @c me whether policy matters should be centralized or cvs.texi(,4001) @c distributed throughout the relevant sections. cvs.texi(,4002) Suppose that release 1.0 of tc has been made. You are continuing to cvs.texi(,4003) develop tc, planning to create release 1.1 in a couple of months. After a cvs.texi(,4004) while your customers start to complain about a fatal bug. You check cvs.texi(,4005) out release 1.0 (@pxref{Tags}) and find the bug cvs.texi(,4006) (which turns out to have a trivial fix). However, the current revision cvs.texi(,4007) of the sources are in a state of flux and are not expected to be stable cvs.texi(,4008) for at least another month. There is no way to make a cvs.texi(,4009) bugfix release based on the newest sources. cvs.texi(,4010) cvs.texi(,4011) The thing to do in a situation like this is to create a @dfn{branch} on cvs.texi(,4012) the revision trees for all the files that make up cvs.texi(,4013) release 1.0 of tc. You can then make cvs.texi(,4014) modifications to the branch without disturbing the main trunk. When the cvs.texi(,4015) modifications are finished you can elect to either incorporate them on cvs.texi(,4016) the main trunk, or leave them on the branch. cvs.texi(,4017) cvs.texi(,4018) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,4019) @node Creating a branch cvs.texi(,4020) @section Creating a branch cvs.texi(,4021) @cindex Creating a branch cvs.texi(,4022) @cindex Branch, creating a cvs.texi(,4023) @cindex tag (subcommand), creating a branch using cvs.texi(,4024) @cindex rtag (subcommand), creating a branch using cvs.texi(,4025) cvs.texi(,4026) You can create a branch with @code{tag -b}; for cvs.texi(,4027) example, assuming you're in a working copy: cvs.texi(,4028) cvs.texi(,4029) @example cvs.texi(,4030) $ cvs tag -b rel-1-0-patches cvs.texi(,4031) @end example cvs.texi(,4032) cvs.texi(,4033) @c FIXME: we should be more explicit about the value of cvs.texi(,4034) @c having a tag on the branchpoint. For example cvs.texi(,4035) @c "cvs tag rel-1-0-patches-branchpoint" before cvs.texi(,4036) @c the "cvs tag -b". This points out that cvs.texi(,4037) @c rel-1-0-patches is a pretty awkward name for cvs.texi(,4038) @c this example (more so than for the rtag example cvs.texi(,4039) @c below). cvs.texi(,4040) cvs.texi(,4041) This splits off a branch based on the current revisions cvs.texi(,4042) in the working copy, assigning that branch the name cvs.texi(,4043) @samp{rel-1-0-patches}. cvs.texi(,4044) cvs.texi(,4045) It is important to understand that branches get created cvs.texi(,4046) in the repository, not in the working copy. Creating a cvs.texi(,4047) branch based on current revisions, as the above example cvs.texi(,4048) does, will @emph{not} automatically switch the working cvs.texi(,4049) copy to be on the new branch. For information on how cvs.texi(,4050) to do that, see @ref{Accessing branches}. cvs.texi(,4051) cvs.texi(,4052) You can also create a branch without reference to any cvs.texi(,4053) working copy, by using @code{rtag}: cvs.texi(,4054) cvs.texi(,4055) @example cvs.texi(,4056) $ cvs rtag -b -r rel-1-0 rel-1-0-patches tc cvs.texi(,4057) @end example cvs.texi(,4058) cvs.texi(,4059) @samp{-r rel-1-0} says that this branch should be cvs.texi(,4060) rooted at the revision that cvs.texi(,4061) corresponds to the tag @samp{rel-1-0}. It need not cvs.texi(,4062) be the most recent revision -- it's often useful to cvs.texi(,4063) split a branch off an old revision (for example, when cvs.texi(,4064) fixing a bug in a past release otherwise known to be cvs.texi(,4065) stable). cvs.texi(,4066) cvs.texi(,4067) As with @samp{tag}, the @samp{-b} flag tells cvs.texi(,4068) @code{rtag} to create a branch (rather than just a cvs.texi(,4069) symbolic revision name). Note that the numeric cvs.texi(,4070) revision number that matches @samp{rel-1-0} will cvs.texi(,4071) probably be different from file to file. cvs.texi(,4072) cvs.texi(,4073) So, the full effect of the command is to create a new cvs.texi(,4074) branch -- named @samp{rel-1-0-patches} -- in module cvs.texi(,4075) @samp{tc}, rooted in the revision tree at the point tagged cvs.texi(,4076) by @samp{rel-1-0}. cvs.texi(,4077) cvs.texi(,4078) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,4079) @node Accessing branches cvs.texi(,4080) @section Accessing branches cvs.texi(,4081) @cindex Check out a branch cvs.texi(,4082) @cindex Retrieve a branch cvs.texi(,4083) @cindex Access a branch cvs.texi(,4084) @cindex Identifying a branch cvs.texi(,4085) @cindex Branch, check out cvs.texi(,4086) @cindex Branch, retrieving cvs.texi(,4087) @cindex Branch, accessing cvs.texi(,4088) @cindex Branch, identifying cvs.texi(,4089) cvs.texi(,4090) You can retrieve a branch in one of two ways: by cvs.texi(,4091) checking it out fresh from the repository, or by cvs.texi(,4092) switching an existing working copy over to the branch. cvs.texi(,4093) cvs.texi(,4094) To check out a branch from the repository, invoke cvs.texi(,4095) @samp{checkout} with the @samp{-r} flag, followed by cvs.texi(,4096) the tag name of the branch (@pxref{Creating a branch}): cvs.texi(,4097) cvs.texi(,4098) @example cvs.texi(,4099) $ cvs checkout -r rel-1-0-patches tc cvs.texi(,4100) @end example cvs.texi(,4101) cvs.texi(,4102) Or, if you already have a working copy, you can switch cvs.texi(,4103) it to a given branch with @samp{update -r}: cvs.texi(,4104) cvs.texi(,4105) @example cvs.texi(,4106) $ cvs update -r rel-1-0-patches tc cvs.texi(,4107) @end example cvs.texi(,4108) cvs.texi(,4109) @noindent cvs.texi(,4110) or equivalently: cvs.texi(,4111) cvs.texi(,4112) @example cvs.texi(,4113) $ cd tc cvs.texi(,4114) $ cvs update -r rel-1-0-patches cvs.texi(,4115) @end example cvs.texi(,4116) cvs.texi(,4117) It does not matter if the working copy was originally cvs.texi(,4118) on the main trunk or on some other branch -- the above cvs.texi(,4119) command will switch it to the named branch. And cvs.texi(,4120) similarly to a regular @samp{update} command, cvs.texi(,4121) @samp{update -r} merges any changes you have made, cvs.texi(,4122) notifying you of conflicts where they occur. cvs.texi(,4123) cvs.texi(,4124) Once you have a working copy tied to a particular cvs.texi(,4125) branch, it remains there until you tell it otherwise. cvs.texi(,4126) This means that changes checked in from the working cvs.texi(,4127) copy will add new revisions on that branch, while cvs.texi(,4128) leaving the main trunk and other branches unaffected. cvs.texi(,4129) cvs.texi(,4130) @cindex Branches, sticky cvs.texi(,4131) To find out what branch a working copy is on, you can cvs.texi(,4132) use the @samp{status} command. In its output, look for cvs.texi(,4133) the field named @samp{Sticky tag} (@pxref{Sticky tags}) cvs.texi(,4134) -- that's @sc{cvs}'s way of telling you the branch, if cvs.texi(,4135) any, of the current working files: cvs.texi(,4136) cvs.texi(,4137) @example cvs.texi(,4138) $ cvs status -v driver.c backend.c cvs.texi(,4139) =================================================================== cvs.texi(,4140) File: driver.c Status: Up-to-date cvs.texi(,4141) cvs.texi(,4142) Version: 1.7 Sat Dec 5 18:25:54 1992 cvs.texi(,4143) RCS Version: 1.7 /u/cvsroot/yoyodyne/tc/driver.c,v cvs.texi(,4144) Sticky Tag: rel-1-0-patches (branch: 1.7.2) cvs.texi(,4145) Sticky Date: (none) cvs.texi(,4146) Sticky Options: (none) cvs.texi(,4147) cvs.texi(,4148) Existing Tags: cvs.texi(,4149) rel-1-0-patches (branch: 1.7.2) cvs.texi(,4150) rel-1-0 (revision: 1.7) cvs.texi(,4151) cvs.texi(,4152) =================================================================== cvs.texi(,4153) File: backend.c Status: Up-to-date cvs.texi(,4154) cvs.texi(,4155) Version: 1.4 Tue Dec 1 14:39:01 1992 cvs.texi(,4156) RCS Version: 1.4 /u/cvsroot/yoyodyne/tc/backend.c,v cvs.texi(,4157) Sticky Tag: rel-1-0-patches (branch: 1.4.2) cvs.texi(,4158) Sticky Date: (none) cvs.texi(,4159) Sticky Options: (none) cvs.texi(,4160) cvs.texi(,4161) Existing Tags: cvs.texi(,4162) rel-1-0-patches (branch: 1.4.2) cvs.texi(,4163) rel-1-0 (revision: 1.4) cvs.texi(,4164) rel-0-4 (revision: 1.4) cvs.texi(,4165) cvs.texi(,4166) @end example cvs.texi(,4167) cvs.texi(,4168) Don't be confused by the fact that the branch numbers cvs.texi(,4169) for each file are different (@samp{1.7.2} and cvs.texi(,4170) @samp{1.4.2} respectively). The branch tag is the cvs.texi(,4171) same, @samp{rel-1-0-patches}, and the files are cvs.texi(,4172) indeed on the same branch. The numbers simply reflect cvs.texi(,4173) the point in each file's revision history at which the cvs.texi(,4174) branch was made. In the above example, one can deduce cvs.texi(,4175) that @samp{driver.c} had been through more changes than cvs.texi(,4176) @samp{backend.c} before this branch was created. cvs.texi(,4177) cvs.texi(,4178) See @ref{Branches and revisions} for details about how cvs.texi(,4179) branch numbers are constructed. cvs.texi(,4180) cvs.texi(,4181) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,4182) @node Branches and revisions cvs.texi(,4183) @section Branches and revisions cvs.texi(,4184) @cindex Branch number cvs.texi(,4185) @cindex Number, branch cvs.texi(,4186) @cindex Revision numbers (branches) cvs.texi(,4187) cvs.texi(,4188) Ordinarily, a file's revision history is a linear cvs.texi(,4189) series of increments (@pxref{Revision numbers}): cvs.texi(,4190) cvs.texi(,4191) @example cvs.texi(,4192) +-----+ +-----+ +-----+ +-----+ +-----+ cvs.texi(,4193) ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! cvs.texi(,4194) +-----+ +-----+ +-----+ +-----+ +-----+ cvs.texi(,4195) @end example cvs.texi(,4196) cvs.texi(,4197) However, @sc{cvs} is not limited to linear development. The cvs.texi(,4198) @dfn{revision tree} can be split into @dfn{branches}, cvs.texi(,4199) where each branch is a self-maintained line of cvs.texi(,4200) development. Changes made on one branch can easily be cvs.texi(,4201) moved back to the main trunk. cvs.texi(,4202) cvs.texi(,4203) Each branch has a @dfn{branch number}, consisting of an cvs.texi(,4204) odd number of period-separated decimal integers. The cvs.texi(,4205) branch number is created by appending an integer to the cvs.texi(,4206) revision number where the corresponding branch forked cvs.texi(,4207) off. Having branch numbers allows more than one branch cvs.texi(,4208) to be forked off from a certain revision. cvs.texi(,4209) cvs.texi(,4210) @need 3500 cvs.texi(,4211) All revisions on a branch have revision numbers formed cvs.texi(,4212) by appending an ordinal number to the branch number. cvs.texi(,4213) The following figure illustrates branching with an cvs.texi(,4214) example. cvs.texi(,4215) cvs.texi(,4216) @example cvs.texi(,4217) @c This example used to have a 1.2.2.4 revision, which cvs.texi(,4218) @c might help clarify that development can continue on cvs.texi(,4219) @c 1.2.2. Might be worth reinstating if it can be done cvs.texi(,4220) @c without overfull hboxes. cvs.texi(,4221) @group cvs.texi(,4222) +-------------+ cvs.texi(,4223) Branch 1.2.2.3.2 -> ! 1.2.2.3.2.1 ! cvs.texi(,4224) / +-------------+ cvs.texi(,4225) / cvs.texi(,4226) / cvs.texi(,4227) +---------+ +---------+ +---------+ cvs.texi(,4228) Branch 1.2.2 -> _! 1.2.2.1 !----! 1.2.2.2 !----! 1.2.2.3 ! cvs.texi(,4229) / +---------+ +---------+ +---------+ cvs.texi(,4230) / cvs.texi(,4231) / cvs.texi(,4232) +-----+ +-----+ +-----+ +-----+ +-----+ cvs.texi(,4233) ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! <- The main trunk cvs.texi(,4234) +-----+ +-----+ +-----+ +-----+ +-----+ cvs.texi(,4235) ! cvs.texi(,4236) ! cvs.texi(,4237) ! +---------+ +---------+ +---------+ cvs.texi(,4238) Branch 1.2.4 -> +---! 1.2.4.1 !----! 1.2.4.2 !----! 1.2.4.3 ! cvs.texi(,4239) +---------+ +---------+ +---------+ cvs.texi(,4240) cvs.texi(,4241) @end group cvs.texi(,4242) @end example cvs.texi(,4243) cvs.texi(,4244) @c -- However, at least for me the figure is not enough. I suggest more cvs.texi(,4245) @c -- text to accompany it. "A picture is worth a thousand words", so you cvs.texi(,4246) @c -- have to make sure the reader notices the couple of hundred words cvs.texi(,4247) @c -- *you* had in mind more than the others! cvs.texi(,4248) cvs.texi(,4249) @c -- Why an even number of segments? This section implies that this is cvs.texi(,4250) @c -- how the main trunk is distinguished from branch roots, but you never cvs.texi(,4251) @c -- explicitly say that this is the purpose of the [by itself rather cvs.texi(,4252) @c -- surprising] restriction to an even number of segments. cvs.texi(,4253) cvs.texi(,4254) The exact details of how the branch number is cvs.texi(,4255) constructed is not something you normally need to be cvs.texi(,4256) concerned about, but here is how it works: When cvs.texi(,4257) @sc{cvs} creates a branch number it picks the first cvs.texi(,4258) unused even integer, starting with 2. So when you want cvs.texi(,4259) to create a branch from revision 6.4 it will be cvs.texi(,4260) numbered 6.4.2. All branch numbers ending in a zero cvs.texi(,4261) (such as 6.4.0) are used internally by @sc{cvs} cvs.texi(,4262) (@pxref{Magic branch numbers}). The branch 1.1.1 has a cvs.texi(,4263) special meaning. @xref{Tracking sources}. cvs.texi(,4264) cvs.texi(,4265) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,4266) @node Magic branch numbers cvs.texi(,4267) @section Magic branch numbers cvs.texi(,4268) cvs.texi(,4269) @c Want xref to here from "log"? cvs.texi(,4270) cvs.texi(,4271) This section describes a @sc{cvs} feature called cvs.texi(,4272) @dfn{magic branches}. For most purposes, you need not cvs.texi(,4273) worry about magic branches; @sc{cvs} handles them for cvs.texi(,4274) you. However, they are visible to you in certain cvs.texi(,4275) circumstances, so it may be useful to have some idea of cvs.texi(,4276) how it works. cvs.texi(,4277) cvs.texi(,4278) Externally, branch numbers consist of an odd number of cvs.texi(,4279) dot-separated decimal integers. @xref{Revision cvs.texi(,4280) numbers}. That is not the whole truth, however. For cvs.texi(,4281) efficiency reasons @sc{cvs} sometimes inserts an extra 0 cvs.texi(,4282) in the second rightmost position (1.2.4 becomes cvs.texi(,4283) 1.2.0.4, 8.9.10.11.12 becomes 8.9.10.11.0.12 and so cvs.texi(,4284) on). cvs.texi(,4285) cvs.texi(,4286) @sc{cvs} does a pretty good job at hiding these so cvs.texi(,4287) called magic branches, but in a few places the hiding cvs.texi(,4288) is incomplete: cvs.texi(,4289) cvs.texi(,4290) @itemize @bullet cvs.texi(,4303) @item cvs.texi(,4304) The magic branch number appears in the output from cvs.texi(,4305) @code{cvs log}. cvs.texi(,4306) @c What output should appear instead? cvs.texi(,4307) cvs.texi(,4308) @item cvs.texi(,4309) You cannot specify a symbolic branch name to @code{cvs cvs.texi(,4310) admin}. cvs.texi(,4311) cvs.texi(,4312) @end itemize cvs.texi(,4313) cvs.texi(,4314) @c Can CVS do this automatically the first time cvs.texi(,4315) @c you check something in to that branch? Should cvs.texi(,4316) @c it? cvs.texi(,4317) You can use the @code{admin} command to reassign a cvs.texi(,4318) symbolic name to a branch the way @sc{rcs} expects it cvs.texi(,4319) to be. If @code{R4patches} is assigned to the branch cvs.texi(,4320) 1.4.2 (magic branch number 1.4.0.2) in file cvs.texi(,4321) @file{numbers.c} you can do this: cvs.texi(,4322) cvs.texi(,4323) @example cvs.texi(,4324) $ cvs admin -NR4patches:1.4.2 numbers.c cvs.texi(,4325) @end example cvs.texi(,4326) cvs.texi(,4327) It only works if at least one revision is already cvs.texi(,4328) committed on the branch. Be very careful so that you cvs.texi(,4329) do not assign the tag to the wrong number. (There is cvs.texi(,4330) no way to see how the tag was assigned yesterday). cvs.texi(,4331) cvs.texi(,4332) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,4333) @node Merging a branch cvs.texi(,4334) @section Merging an entire branch cvs.texi(,4335) @cindex Merging a branch cvs.texi(,4336) @cindex -j (merging branches) cvs.texi(,4337) cvs.texi(,4338) You can merge changes made on a branch into your working copy by giving cvs.texi(,4339) the @samp{-j @var{branchname}} flag to the @code{update} subcommand. With one cvs.texi(,4340) @samp{-j @var{branchname}} option it merges the changes made between the cvs.texi(,4341) greatest common ancestor (GCA) of the branch and the destination revision (in cvs.texi(,4342) the simple case below the GCA is the point where the branch forked) and the cvs.texi(,4343) newest revision on that branch into your working copy. cvs.texi(,4344) cvs.texi(,4345) @cindex Join cvs.texi(,4346) The @samp{-j} stands for ``join''. cvs.texi(,4347) cvs.texi(,4348) @cindex Branch merge example cvs.texi(,4349) @cindex Example, branch merge cvs.texi(,4350) @cindex Merge, branch example cvs.texi(,4351) Consider this revision tree: cvs.texi(,4352) cvs.texi(,4353) @example cvs.texi(,4354) +-----+ +-----+ +-----+ +-----+ cvs.texi(,4355) ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 ! <- The main trunk cvs.texi(,4356) +-----+ +-----+ +-----+ +-----+ cvs.texi(,4357) ! cvs.texi(,4358) ! cvs.texi(,4359) ! +---------+ +---------+ cvs.texi(,4360) Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 ! cvs.texi(,4361) +---------+ +---------+ cvs.texi(,4362) @end example cvs.texi(,4363) cvs.texi(,4364) @noindent cvs.texi(,4365) The branch 1.2.2 has been given the tag (symbolic name) @samp{R1fix}. The cvs.texi(,4366) following example assumes that the module @samp{mod} contains only one cvs.texi(,4367) file, @file{m.c}. cvs.texi(,4368) cvs.texi(,4369) @example cvs.texi(,4370) $ cvs checkout mod # @r{Retrieve the latest revision, 1.4} cvs.texi(,4371) cvs.texi(,4372) $ cvs update -j R1fix m.c # @r{Merge all changes made on the branch,} cvs.texi(,4373) # @r{i.e. the changes between revision 1.2} cvs.texi(,4374) # @r{and 1.2.2.2, into your working copy} cvs.texi(,4375) # @r{of the file.} cvs.texi(,4376) cvs.texi(,4377) $ cvs commit -m "Included R1fix" # @r{Create revision 1.5.} cvs.texi(,4378) @end example cvs.texi(,4379) cvs.texi(,4380) A conflict can result from a merge operation. If that cvs.texi(,4381) happens, you should resolve it before committing the cvs.texi(,4382) new revision. @xref{Conflicts example}. cvs.texi(,4383) cvs.texi(,4384) If your source files contain keywords (@pxref{Keyword substitution}), cvs.texi(,4385) you might be getting more conflicts than strictly necessary. See cvs.texi(,4386) @ref{Merging and keywords}, for information on how to avoid this. cvs.texi(,4387) cvs.texi(,4388) The @code{checkout} command also supports the @samp{-j @var{branchname}} flag. The cvs.texi(,4389) same effect as above could be achieved with this: cvs.texi(,4390) cvs.texi(,4391) @example cvs.texi(,4392) $ cvs checkout -j R1fix mod cvs.texi(,4393) $ cvs commit -m "Included R1fix" cvs.texi(,4394) @end example cvs.texi(,4395) cvs.texi(,4396) It should be noted that @code{update -j @var{tagname}} will also work but may cvs.texi(,4397) not produce the desired result. @xref{Merging adds and removals}, for more. cvs.texi(,4398) cvs.texi(,4399) @node Merging more than once cvs.texi(,4400) @section Merging from a branch several times cvs.texi(,4401) cvs.texi(,4402) Continuing our example, the revision tree now looks cvs.texi(,4403) like this: cvs.texi(,4404) cvs.texi(,4405) @example cvs.texi(,4406) +-----+ +-----+ +-----+ +-----+ +-----+ cvs.texi(,4407) ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! <- The main trunk cvs.texi(,4408) +-----+ +-----+ +-----+ +-----+ +-----+ cvs.texi(,4409) ! * cvs.texi(,4410) ! * cvs.texi(,4411) ! +---------+ +---------+ cvs.texi(,4412) Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 ! cvs.texi(,4413) +---------+ +---------+ cvs.texi(,4414) @end example cvs.texi(,4415) cvs.texi(,4416) @noindent cvs.texi(,4417) where the starred line represents the merge from the cvs.texi(,4418) @samp{R1fix} branch to the main trunk, as just cvs.texi(,4419) discussed. cvs.texi(,4420) cvs.texi(,4421) Now suppose that development continues on the cvs.texi(,4422) @samp{R1fix} branch: cvs.texi(,4423) cvs.texi(,4424) @example cvs.texi(,4425) +-----+ +-----+ +-----+ +-----+ +-----+ cvs.texi(,4426) ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! <- The main trunk cvs.texi(,4427) +-----+ +-----+ +-----+ +-----+ +-----+ cvs.texi(,4428) ! * cvs.texi(,4429) ! * cvs.texi(,4430) ! +---------+ +---------+ +---------+ cvs.texi(,4431) Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 !----! 1.2.2.3 ! cvs.texi(,4432) +---------+ +---------+ +---------+ cvs.texi(,4433) @end example cvs.texi(,4434) cvs.texi(,4435) @noindent cvs.texi(,4436) and then you want to merge those new changes onto the cvs.texi(,4437) main trunk. If you just use the @code{cvs update -j cvs.texi(,4438) R1fix m.c} command again, @sc{cvs} will attempt to cvs.texi(,4439) merge again the changes which you have already merged, cvs.texi(,4440) which can have undesirable side effects. cvs.texi(,4441) cvs.texi(,4442) So instead you need to specify that you only want to cvs.texi(,4443) merge the changes on the branch which have not yet been cvs.texi(,4444) merged into the trunk. To do that you specify two cvs.texi(,4445) @samp{-j} options, and @sc{cvs} merges the changes from cvs.texi(,4446) the first revision to the second revision. For cvs.texi(,4447) example, in this case the simplest way would be cvs.texi(,4448) cvs.texi(,4449) @example cvs.texi(,4450) cvs update -j 1.2.2.2 -j R1fix m.c # @r{Merge changes from 1.2.2.2 to the} cvs.texi(,4451) # @r{head of the R1fix branch} cvs.texi(,4452) @end example cvs.texi(,4453) cvs.texi(,4454) The problem with this is that you need to specify the cvs.texi(,4455) 1.2.2.2 revision manually. A slightly better approach cvs.texi(,4456) might be to use the date the last merge was done: cvs.texi(,4457) cvs.texi(,4458) @example cvs.texi(,4459) cvs update -j R1fix:yesterday -j R1fix m.c cvs.texi(,4460) @end example cvs.texi(,4461) cvs.texi(,4462) Better yet, tag the R1fix branch after every merge into cvs.texi(,4463) the trunk, and then use that tag for subsequent merges: cvs.texi(,4464) cvs.texi(,4465) @example cvs.texi(,4466) cvs update -j merged_from_R1fix_to_trunk -j R1fix m.c cvs.texi(,4467) @end example cvs.texi(,4468) cvs.texi(,4469) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,4470) @node Merging two revisions cvs.texi(,4471) @section Merging differences between any two revisions cvs.texi(,4472) @cindex Merging two revisions cvs.texi(,4473) @cindex Revisions, merging differences between cvs.texi(,4474) @cindex Differences, merging cvs.texi(,4475) cvs.texi(,4476) With two @samp{-j @var{revision}} flags, the @code{update} cvs.texi(,4477) (and @code{checkout}) command can merge the differences cvs.texi(,4478) between any two revisions into your working file. cvs.texi(,4479) cvs.texi(,4480) @cindex Undoing a change cvs.texi(,4481) @cindex Removing a change cvs.texi(,4482) @example cvs.texi(,4483) $ cvs update -j 1.5 -j 1.3 backend.c cvs.texi(,4484) @end example cvs.texi(,4485) cvs.texi(,4486) @noindent cvs.texi(,4487) will undo all changes made between revision cvs.texi(,4488) 1.3 and 1.5. Note the order of the revisions! cvs.texi(,4489) cvs.texi(,4490) If you try to use this option when operating on cvs.texi(,4491) multiple files, remember that the numeric revisions will cvs.texi(,4492) probably be very different between the various files. cvs.texi(,4493) You almost always use symbolic cvs.texi(,4494) tags rather than revision numbers when operating on cvs.texi(,4495) multiple files. cvs.texi(,4496) cvs.texi(,4497) @cindex Restoring old version of removed file cvs.texi(,4498) @cindex Resurrecting old version of dead file cvs.texi(,4499) Specifying two @samp{-j} options can also undo file cvs.texi(,4500) removals or additions. For example, suppose you have cvs.texi(,4501) a file cvs.texi(,4502) named @file{file1} which existed as revision 1.1, and cvs.texi(,4503) you then removed it (thus adding a dead revision 1.2). cvs.texi(,4504) Now suppose you want to add it again, with the same cvs.texi(,4505) contents it had previously. Here is how to do it: cvs.texi(,4506) cvs.texi(,4507) @example cvs.texi(,4508) $ cvs update -j 1.2 -j 1.1 file1 cvs.texi(,4509) U file1 cvs.texi(,4510) $ cvs commit -m test cvs.texi(,4511) Checking in file1; cvs.texi(,4512) /tmp/cvs-sanity/cvsroot/first-dir/file1,v <-- file1 cvs.texi(,4513) new revision: 1.3; previous revision: 1.2 cvs.texi(,4514) done cvs.texi(,4515) $ cvs.texi(,4516) @end example cvs.texi(,4517) cvs.texi(,4518) @node Merging adds and removals cvs.texi(,4519) @section Merging can add or remove files cvs.texi(,4520) cvs.texi(,4521) If the changes which you are merging involve removing cvs.texi(,4522) or adding some files, @code{update -j} will reflect cvs.texi(,4523) such additions or removals. cvs.texi(,4524) cvs.texi(,4525) @c FIXME: This example needs a lot more explanation. cvs.texi(,4526) @c We also need other examples for some of the other cvs.texi(,4527) @c cases (not all--there are too many--as long as we present a cvs.texi(,4528) @c coherent general principle). cvs.texi(,4529) For example: cvs.texi(,4530) @example cvs.texi(,4531) cvs update -A cvs.texi(,4532) touch a b c cvs.texi(,4533) cvs add a b c ; cvs ci -m "added" a b c cvs.texi(,4534) cvs tag -b branchtag cvs.texi(,4535) cvs update -r branchtag cvs.texi(,4536) touch d ; cvs add d cvs.texi(,4537) rm a ; cvs rm a cvs.texi(,4538) cvs ci -m "added d, removed a" cvs.texi(,4539) cvs update -A cvs.texi(,4540) cvs update -jbranchtag cvs.texi(,4541) @end example cvs.texi(,4542) cvs.texi(,4543) After these commands are executed and a @samp{cvs commit} is done, cvs.texi(,4544) file @file{a} will be removed and file @file{d} added in the main branch. cvs.texi(,4545) @c (which was determined by trying it) cvs.texi(,4546) cvs.texi(,4547) Note that using a single static tag (@samp{-j @var{tagname}}) cvs.texi(,4548) rather than a dynamic tag (@samp{-j @var{branchname}}) to merge cvs.texi(,4549) changes from a branch will usually not remove files which were removed on the cvs.texi(,4550) branch since @sc{cvs} does not automatically add static tags to dead revisions. cvs.texi(,4551) The exception to this rule occurs when cvs.texi(,4552) a static tag has been attached to a dead revision manually. Use the branch tag cvs.texi(,4553) to merge all changes from the branch or use two static tags as merge endpoints cvs.texi(,4554) to be sure that all intended changes are propagated in the merge. cvs.texi(,4555) cvs.texi(,4556) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,4557) @node Merging and keywords cvs.texi(,4558) @section Merging and keywords cvs.texi(,4559) @cindex Merging, and keyword substitution cvs.texi(,4560) @cindex Keyword substitution, and merging cvs.texi(,4561) @cindex -j (merging branches), and keyword substitution cvs.texi(,4562) @cindex -kk, to avoid conflicts during a merge cvs.texi(,4563) cvs.texi(,4564) If you merge files containing keywords (@pxref{Keyword cvs.texi(,4565) substitution}), you will normally get numerous cvs.texi(,4566) conflicts during the merge, because the keywords are cvs.texi(,4567) expanded differently in the revisions which you are cvs.texi(,4568) merging. cvs.texi(,4569) cvs.texi(,4570) Therefore, you will often want to specify the cvs.texi(,4571) @samp{-kk} (@pxref{Substitution modes}) switch to the cvs.texi(,4572) merge command line. By substituting just the name of cvs.texi(,4573) the keyword, not the expanded value of that keyword, cvs.texi(,4574) this option ensures that the revisions which you are cvs.texi(,4575) merging will be the same as each other, and avoid cvs.texi(,4576) spurious conflicts. cvs.texi(,4577) cvs.texi(,4578) For example, suppose you have a file like this: cvs.texi(,4579) cvs.texi(,4580) @example cvs.texi(,4581) +---------+ cvs.texi(,4582) _! 1.1.2.1 ! <- br1 cvs.texi(,4583) / +---------+ cvs.texi(,4584) / cvs.texi(,4585) / cvs.texi(,4586) +-----+ +-----+ cvs.texi(,4587) ! 1.1 !----! 1.2 ! cvs.texi(,4588) +-----+ +-----+ cvs.texi(,4589) @end example cvs.texi(,4590) cvs.texi(,4591) @noindent cvs.texi(,4592) and your working directory is currently on the trunk cvs.texi(,4593) (revision 1.2). Then you might get the following cvs.texi(,4594) results from a merge: cvs.texi(,4595) cvs.texi(,4596) @example cvs.texi(,4597) $ cat file1 cvs.texi(splitrcskeyword,4598) key $@i{}Revision: 1.2 $ cvs.texi(,4599) . . . cvs.texi(,4600) $ cvs update -j br1 cvs.texi(,4601) U file1 cvs.texi(,4602) RCS file: /cvsroot/first-dir/file1,v cvs.texi(,4603) retrieving revision 1.1 cvs.texi(,4604) retrieving revision 1.1.2.1 cvs.texi(,4605) Merging differences between 1.1 and 1.1.2.1 into file1 cvs.texi(,4606) rcsmerge: warning: conflicts during merge cvs.texi(,4607) $ cat file1 cvs.texi(,4608) @asis{}<<<<<<< file1 cvs.texi(splitrcskeyword,4609) key $@i{}Revision: 1.2 $ cvs.texi(,4610) @asis{}======= cvs.texi(splitrcskeyword,4611) key $@i{}Revision: 1.1.2.1 $ cvs.texi(,4612) @asis{}>>>>>>> 1.1.2.1 cvs.texi(,4613) . . . cvs.texi(,4614) @end example cvs.texi(,4615) cvs.texi(,4616) What happened was that the merge tried to merge the cvs.texi(,4617) differences between 1.1 and 1.1.2.1 into your working cvs.texi(,4618) directory. So, since the keyword changed from cvs.texi(,4619) @code{Revision: 1.1} to @code{Revision: 1.1.2.1}, cvs.texi(,4620) @sc{cvs} tried to merge that change into your working cvs.texi(,4621) directory, which conflicted with the fact that your cvs.texi(,4622) working directory had contained @code{Revision: 1.2}. cvs.texi(,4623) cvs.texi(,4624) Here is what happens if you had used @samp{-kk}: cvs.texi(,4625) cvs.texi(,4626) @example cvs.texi(,4627) $ cat file1 cvs.texi(splitrcskeyword,4628) key $@i{}Revision: 1.2 $ cvs.texi(,4629) . . . cvs.texi(,4630) $ cvs update -kk -j br1 cvs.texi(,4631) U file1 cvs.texi(,4632) RCS file: /cvsroot/first-dir/file1,v cvs.texi(,4633) retrieving revision 1.1 cvs.texi(,4634) retrieving revision 1.1.2.1 cvs.texi(,4635) Merging differences between 1.1 and 1.1.2.1 into file1 cvs.texi(,4636) $ cat file1 cvs.texi(splitrcskeyword,4637) key $@i{}Revision$ cvs.texi(,4638) . . . cvs.texi(,4639) @end example cvs.texi(,4640) cvs.texi(,4641) What is going on here is that revision 1.1 and 1.1.2.1 cvs.texi(,4642) both expand as plain @code{Revision}, and therefore cvs.texi(,4643) merging the changes between them into the working cvs.texi(,4644) directory need not change anything. Therefore, there cvs.texi(,4645) is no conflict. cvs.texi(,4646) cvs.texi(,4647) @strong{WARNING: In versions of @sc{cvs} prior to 1.12.2, there was a cvs.texi(,4648) major problem with using @samp{-kk} on merges. Namely, @samp{-kk} cvs.texi(,4649) overrode any default keyword expansion mode set in the archive file in cvs.texi(,4650) the repository. This could, unfortunately for some users, cause data cvs.texi(,4651) corruption in binary files (with a default keyword expansion mode set cvs.texi(,4652) to @samp{-kb}). Therefore, when a repository contained binary files, cvs.texi(,4653) conflicts had to be dealt with manually rather than using @samp{-kk} in cvs.texi(,4654) a merge command.} cvs.texi(,4655) cvs.texi(,4656) In @sc{cvs} version 1.12.2 and later, the keyword expansion mode cvs.texi(,4657) provided on the command line to any @sc{cvs} command no longer cvs.texi(,4658) overrides the @samp{-kb} keyword expansion mode setting for binary cvs.texi(,4659) files, though it will still override other default keyword expansion cvs.texi(,4660) modes. You can now safely merge using @samp{-kk} to avoid spurious conflicts cvs.texi(,4661) on lines containing RCS keywords, even when your repository contains cvs.texi(,4662) binary files. cvs.texi(,4663) cvs.texi(,4664) @c --------------------------------------------------------------------- cvs.texi(,4665) @node Recursive behavior cvs.texi(,4666) @chapter Recursive behavior cvs.texi(,4667) @cindex Recursive (directory descending) cvs.texi(,4668) @cindex Directory, descending cvs.texi(,4669) @cindex Descending directories cvs.texi(,4670) @cindex Subdirectories cvs.texi(,4671) cvs.texi(,4672) Almost all of the subcommands of @sc{cvs} work cvs.texi(,4673) recursively when you specify a directory as an cvs.texi(,4674) argument. For instance, consider this directory cvs.texi(,4675) structure: cvs.texi(,4676) cvs.texi(,4677) @example cvs.texi(,4678) @code{$HOME} cvs.texi(,4679) | cvs.texi(,4680) +--@t{tc} cvs.texi(,4681) | | cvs.texi(,4682) +--@t{CVS} cvs.texi(,4683) | (internal @sc{cvs} files) cvs.texi(,4684) +--@t{Makefile} cvs.texi(,4685) +--@t{backend.c} cvs.texi(,4686) +--@t{driver.c} cvs.texi(,4687) +--@t{frontend.c} cvs.texi(,4688) +--@t{parser.c} cvs.texi(,4689) +--@t{man} cvs.texi(,4690) | | cvs.texi(,4691) | +--@t{CVS} cvs.texi(,4692) | | (internal @sc{cvs} files) cvs.texi(,4693) | +--@t{tc.1} cvs.texi(,4694) | cvs.texi(,4695) +--@t{testing} cvs.texi(,4696) | cvs.texi(,4697) +--@t{CVS} cvs.texi(,4698) | (internal @sc{cvs} files) cvs.texi(,4699) +--@t{testpgm.t} cvs.texi(,4700) +--@t{test2.t} cvs.texi(,4701) @end example cvs.texi(,4702) cvs.texi(,4703) @noindent cvs.texi(,4704) If @file{tc} is the current working directory, the cvs.texi(,4705) following is true: cvs.texi(,4706) cvs.texi(,4707) @itemize @bullet cvs.texi(,4708) @item cvs.texi(,4709) @samp{cvs update testing} is equivalent to cvs.texi(,4710) cvs.texi(,4711) @example cvs.texi(,4712) cvs update testing/testpgm.t testing/test2.t cvs.texi(,4713) @end example cvs.texi(,4714) cvs.texi(,4715) @item cvs.texi(,4716) @samp{cvs update testing man} updates all files in the cvs.texi(,4717) subdirectories cvs.texi(,4718) cvs.texi(,4719) @item cvs.texi(,4720) @samp{cvs update .} or just @samp{cvs update} updates cvs.texi(,4721) all files in the @code{tc} directory cvs.texi(,4722) @end itemize cvs.texi(,4723) cvs.texi(,4724) If no arguments are given to @code{update} it will cvs.texi(,4725) update all files in the current working directory and cvs.texi(,4726) all its subdirectories. In other words, @file{.} is a cvs.texi(,4727) default argument to @code{update}. This is also true cvs.texi(,4728) for most of the @sc{cvs} subcommands, not only the cvs.texi(,4729) @code{update} command. cvs.texi(,4730) cvs.texi(,4731) The recursive behavior of the @sc{cvs} subcommands can be cvs.texi(,4732) turned off with the @samp{-l} option. cvs.texi(,4733) Conversely, the @samp{-R} option can be used to force recursion if cvs.texi(,4734) @samp{-l} is specified in @file{~/.cvsrc} (@pxref{~/.cvsrc}). cvs.texi(,4735) cvs.texi(,4736) @example cvs.texi(,4737) $ cvs update -l # @r{Don't update files in subdirectories} cvs.texi(,4738) @end example cvs.texi(,4739) cvs.texi(,4740) @c --------------------------------------------------------------------- cvs.texi(,4741) @node Adding and removing cvs.texi(,4742) @chapter Adding, removing, and renaming files and directories cvs.texi(,4743) cvs.texi(,4744) In the course of a project, one will often add new cvs.texi(,4745) files. Likewise with removing or renaming, or with cvs.texi(,4746) directories. The general concept to keep in mind in cvs.texi(,4747) all these cases is that instead of making an cvs.texi(,4748) irreversible change you want @sc{cvs} to record the cvs.texi(,4749) fact that a change has taken place, just as with cvs.texi(,4750) modifying an existing file. The exact mechanisms to do cvs.texi(,4751) this in @sc{cvs} vary depending on the situation. cvs.texi(,4752) cvs.texi(,4753) @menu cvs.texi(,4754) * Adding files:: Adding files cvs.texi(,4755) * Removing files:: Removing files cvs.texi(,4756) * Removing directories:: Removing directories cvs.texi(,4757) * Moving files:: Moving and renaming files cvs.texi(,4758) * Moving directories:: Moving and renaming directories cvs.texi(,4759) @end menu cvs.texi(,4760) cvs.texi(,4761) @node Adding files cvs.texi(,4762) @section Adding files to a directory cvs.texi(,4763) @cindex Adding files cvs.texi(,4764) cvs.texi(,4765) To add a new file to a directory, follow these steps. cvs.texi(,4766) cvs.texi(,4767) @itemize @bullet cvs.texi(,4768) @item cvs.texi(,4769) You must have a working copy of the directory. cvs.texi(,4770) @xref{Getting the source}. cvs.texi(,4771) cvs.texi(,4772) @item cvs.texi(,4773) Create the new file inside your working copy of the directory. cvs.texi(,4774) cvs.texi(,4775) @item cvs.texi(,4776) Use @samp{cvs add @var{filename}} to tell @sc{cvs} that you cvs.texi(,4777) want to version control the file. If the file contains cvs.texi(,4778) binary data, specify @samp{-kb} (@pxref{Binary files}). cvs.texi(,4779) cvs.texi(,4780) @item cvs.texi(,4781) Use @samp{cvs commit @var{filename}} to actually check cvs.texi(,4782) in the file into the repository. Other developers cvs.texi(,4783) cannot see the file until you perform this step. cvs.texi(,4784) @end itemize cvs.texi(,4785) cvs.texi(,4786) You can also use the @code{add} command to add a new cvs.texi(,4787) directory. cvs.texi(,4788) @c FIXCVS and/or FIXME: Adding a directory doesn't cvs.texi(,4789) @c require the commit step. This probably can be cvs.texi(,4790) @c considered a CVS bug, but it is possible we should cvs.texi(,4791) @c warn people since this behavior probably won't be cvs.texi(,4792) @c changing right away. cvs.texi(,4793) cvs.texi(,4794) Unlike most other commands, the @code{add} command is cvs.texi(,4795) not recursive. You cannot even type @samp{cvs add cvs.texi(,4796) foo/bar}! Instead, you have to cvs.texi(,4797) @c FIXCVS: This is, of course, not a feature. It is cvs.texi(,4798) @c just that no one has gotten around to fixing "cvs add cvs.texi(,4799) @c foo/bar". cvs.texi(,4800) cvs.texi(,4801) @example cvs.texi(,4802) $ cd foo cvs.texi(,4803) $ cvs add bar cvs.texi(,4804) @end example cvs.texi(,4805) cvs.texi(,4806) @cindex add (subcommand) cvs.texi(,4807) @deffn Command {cvs add} [@code{-k} kflag] [@code{-m} message] files @dots{} cvs.texi(,4808) cvs.texi(,4809) Schedule @var{files} to be added to the repository. cvs.texi(,4810) The files or directories specified with @code{add} must cvs.texi(,4811) already exist in the current directory. To add a whole cvs.texi(,4812) new directory hierarchy to the source repository (for cvs.texi(,4813) example, files received from a third-party vendor), use cvs.texi(,4814) the @code{import} command instead. @xref{import}. cvs.texi(,4815) cvs.texi(,4816) The added files are not placed in the source repository cvs.texi(,4817) until you use @code{commit} to make the change cvs.texi(,4818) permanent. Doing an @code{add} on a file that was cvs.texi(,4819) removed with the @code{remove} command will undo the cvs.texi(,4820) effect of the @code{remove}, unless a @code{commit} cvs.texi(,4821) command intervened. @xref{Removing files}, for an cvs.texi(,4822) example. cvs.texi(,4823) cvs.texi(,4824) The @samp{-k} option specifies the default way that cvs.texi(,4825) this file will be checked out; for more information see cvs.texi(,4826) @ref{Substitution modes}. cvs.texi(,4827) cvs.texi(,4828) @c As noted in BUGS, -m is broken client/server (Nov cvs.texi(,4829) @c 96). Also see testsuite log2-* tests. cvs.texi(,4830) The @samp{-m} option specifies a description for the cvs.texi(,4831) file. This description appears in the history log (if cvs.texi(,4832) it is enabled, @pxref{history file}). It will also be cvs.texi(,4833) saved in the version history inside the repository when cvs.texi(,4834) the file is committed. The @code{log} command displays cvs.texi(,4835) this description. The description can be changed using cvs.texi(,4836) @samp{admin -t}. @xref{admin}. If you omit the cvs.texi(,4837) @samp{-m @var{description}} flag, an empty string will cvs.texi(,4838) be used. You will not be prompted for a description. cvs.texi(,4839) @end deffn cvs.texi(,4840) cvs.texi(,4841) For example, the following commands add the file cvs.texi(,4842) @file{backend.c} to the repository: cvs.texi(,4843) cvs.texi(,4844) @c This example used to specify cvs.texi(,4845) @c -m "Optimizer and code generation passes." cvs.texi(,4846) @c to the cvs add command, but that doesn't work cvs.texi(,4847) @c client/server (see log2 in sanity.sh). Should fix CVS, cvs.texi(,4848) @c but also seems strange to document things which cvs.texi(,4849) @c don't work... cvs.texi(,4850) @example cvs.texi(,4851) $ cvs add backend.c cvs.texi(,4852) $ cvs commit -m "Early version. Not yet compilable." backend.c cvs.texi(,4853) @end example cvs.texi(,4854) cvs.texi(,4855) When you add a file it is added only on the branch cvs.texi(,4856) which you are working on (@pxref{Branching and merging}). You can cvs.texi(,4857) later merge the additions to another branch if you want cvs.texi(,4858) (@pxref{Merging adds and removals}). cvs.texi(,4859) @c Should we mention that earlier versions of CVS cvs.texi(,4860) @c lacked this feature (1.3) or implemented it in a buggy cvs.texi(,4861) @c way (well, 1.8 had many bugs in cvs update -j)? cvs.texi(,4862) @c Should we mention the bug/limitation regarding a cvs.texi(,4863) @c file being a regular file on one branch and a directory cvs.texi(,4864) @c on another? cvs.texi(,4865) @c FIXME: This needs an example, or several, here or cvs.texi(,4866) @c elsewhere, for it to make much sense. cvs.texi(,4867) @c Somewhere we need to discuss the aspects of death cvs.texi(,4868) @c support which don't involve branching, I guess. cvs.texi(,4869) @c Like the ability to re-create a release from a tag. cvs.texi(,4870) cvs.texi(,4871) @c --------------------------------------------------------------------- cvs.texi(,4872) @node Removing files cvs.texi(,4873) @section Removing files cvs.texi(,4874) @cindex Removing files cvs.texi(,4875) @cindex Deleting files cvs.texi(,4876) cvs.texi(,4877) @c FIXME: this node wants to be split into several cvs.texi(,4878) @c smaller nodes. Could make these children of cvs.texi(,4879) @c "Adding and removing", probably (death support could cvs.texi(,4880) @c be its own section, for example, as could the cvs.texi(,4881) @c various bits about undoing mistakes in adding and cvs.texi(,4882) @c removing). cvs.texi(,4883) Directories change. New files are added, and old files cvs.texi(,4884) disappear. Still, you want to be able to retrieve an cvs.texi(,4885) exact copy of old releases. cvs.texi(,4886) cvs.texi(,4887) Here is what you can do to remove a file, cvs.texi(,4888) but remain able to retrieve old revisions: cvs.texi(,4889) cvs.texi(,4890) @itemize @bullet cvs.texi(,4891) @c FIXME: should probably be saying something about cvs.texi(,4892) @c having a working directory in the first place. cvs.texi(,4893) @item cvs.texi(,4894) Make sure that you have not made any uncommitted cvs.texi(,4895) modifications to the file. @xref{Viewing differences}, cvs.texi(,4896) for one way to do that. You can also use the cvs.texi(,4897) @code{status} or @code{update} command. If you remove cvs.texi(,4898) the file without committing your changes, you will of cvs.texi(,4899) course not be able to retrieve the file as it was cvs.texi(,4900) immediately before you deleted it. cvs.texi(,4901) cvs.texi(,4902) @item cvs.texi(,4903) Remove the file from your working copy of the directory. cvs.texi(,4904) You can for instance use @code{rm}. cvs.texi(,4905) cvs.texi(,4906) @item cvs.texi(,4907) Use @samp{cvs remove @var{filename}} to tell @sc{cvs} that cvs.texi(,4908) you really want to delete the file. cvs.texi(,4909) cvs.texi(,4910) @item cvs.texi(,4911) Use @samp{cvs commit @var{filename}} to actually cvs.texi(,4912) perform the removal of the file from the repository. cvs.texi(,4913) @end itemize cvs.texi(,4914) cvs.texi(,4915) @c FIXME: Somehow this should be linked in with a more cvs.texi(,4916) @c general discussion of death support. I don't know cvs.texi(,4917) @c whether we want to use the term "death support" or cvs.texi(,4918) @c not (we can perhaps get by without it), but we do cvs.texi(,4919) @c need to discuss the "dead" state in "cvs log" and cvs.texi(,4920) @c related subjects. The current discussion is cvs.texi(,4921) @c scattered around, and not xref'd to each other. cvs.texi(,4922) @c FIXME: I think this paragraph wants to be moved cvs.texi(,4923) @c later down, at least after the first example. cvs.texi(,4924) When you commit the removal of the file, @sc{cvs} cvs.texi(,4925) records the fact that the file no longer exists. It is cvs.texi(,4926) possible for a file to exist on only some branches and cvs.texi(,4927) not on others, or to re-add another file with the same cvs.texi(,4928) name later. @sc{cvs} will correctly create or not create cvs.texi(,4929) the file, based on the @samp{-r} and @samp{-D} options cvs.texi(,4930) specified to @code{checkout} or @code{update}. cvs.texi(,4931) cvs.texi(,4932) @c FIXME: This style seems to clash with how we cvs.texi(,4933) @c document things in general. cvs.texi(,4934) @cindex Remove (subcommand) cvs.texi(,4935) @deffn Command {cvs remove} [options] files @dots{} cvs.texi(,4936) cvs.texi(,4937) Schedule file(s) to be removed from the repository cvs.texi(,4938) (files which have not already been removed from the cvs.texi(,4939) working directory are not processed). This command cvs.texi(,4940) does not actually remove the file from the repository cvs.texi(,4941) until you commit the removal. For a full list of cvs.texi(,4942) options, see @ref{Invoking CVS}. cvs.texi(,4943) @end deffn cvs.texi(,4944) cvs.texi(,4945) Here is an example of removing several files: cvs.texi(,4946) cvs.texi(,4947) @example cvs.texi(,4948) $ cd test cvs.texi(,4949) $ rm *.c cvs.texi(,4950) $ cvs remove cvs.texi(,4951) cvs remove: Removing . cvs.texi(,4952) cvs remove: scheduling a.c for removal cvs.texi(,4953) cvs remove: scheduling b.c for removal cvs.texi(,4954) cvs remove: use 'cvs commit' to remove these files permanently cvs.texi(,4955) $ cvs ci -m "Removed unneeded files" cvs.texi(,4956) cvs commit: Examining . cvs.texi(,4957) cvs commit: Committing . cvs.texi(,4958) @end example cvs.texi(,4959) cvs.texi(,4960) As a convenience you can remove the file and @code{cvs cvs.texi(,4961) remove} it in one step, by specifying the @samp{-f} cvs.texi(,4962) option. For example, the above example could also be cvs.texi(,4963) done like this: cvs.texi(,4964) cvs.texi(,4965) @example cvs.texi(,4966) $ cd test cvs.texi(,4967) $ cvs remove -f *.c cvs.texi(,4968) cvs remove: scheduling a.c for removal cvs.texi(,4969) cvs remove: scheduling b.c for removal cvs.texi(,4970) cvs remove: use 'cvs commit' to remove these files permanently cvs.texi(,4971) $ cvs ci -m "Removed unneeded files" cvs.texi(,4972) cvs commit: Examining . cvs.texi(,4973) cvs commit: Committing . cvs.texi(,4974) @end example cvs.texi(,4975) cvs.texi(,4976) If you execute @code{remove} for a file, and then cvs.texi(,4977) change your mind before you commit, you can undo the cvs.texi(,4978) @code{remove} with an @code{add} command. cvs.texi(,4989) cvs.texi(,4990) @c FIXME: what if you change your mind after you commit cvs.texi(,4991) @c it? (answer is also "cvs add" but we don't say that...). cvs.texi(,4992) @c We need some index entries for thinks like "undoing cvs.texi(,4993) @c removal" too. cvs.texi(,4994) cvs.texi(,4995) @example cvs.texi(,4996) $ ls cvs.texi(,4997) CVS ja.h oj.c cvs.texi(,4998) $ rm oj.c cvs.texi(,4999) $ cvs remove oj.c cvs.texi(,5000) cvs remove: scheduling oj.c for removal cvs.texi(,5001) cvs remove: use 'cvs commit' to remove this file permanently cvs.texi(,5002) $ cvs add oj.c cvs.texi(,5003) U oj.c cvs.texi(,5004) cvs add: oj.c, version 1.1.1.1, resurrected cvs.texi(,5005) @end example cvs.texi(,5006) cvs.texi(,5007) If you realize your mistake before you run the cvs.texi(,5008) @code{remove} command you can use @code{update} to cvs.texi(,5009) resurrect the file: cvs.texi(,5010) cvs.texi(,5011) @example cvs.texi(,5012) $ rm oj.c cvs.texi(,5013) $ cvs update oj.c cvs.texi(,5014) cvs update: warning: oj.c was lost cvs.texi(,5015) U oj.c cvs.texi(,5016) @end example cvs.texi(,5017) cvs.texi(,5018) When you remove a file it is removed only on the branch cvs.texi(,5019) which you are working on (@pxref{Branching and merging}). You can cvs.texi(,5020) later merge the removals to another branch if you want cvs.texi(,5021) (@pxref{Merging adds and removals}). cvs.texi(,5022) cvs.texi(,5023) @node Removing directories cvs.texi(,5024) @section Removing directories cvs.texi(,5025) @cindex Removing directories cvs.texi(,5026) @cindex Directories, removing cvs.texi(,5027) cvs.texi(,5028) In concept removing directories is somewhat similar to cvs.texi(,5029) removing files---you want the directory to not exist in cvs.texi(,5030) your current working directories, but you also want to cvs.texi(,5031) be able to retrieve old releases in which the directory cvs.texi(,5032) existed. cvs.texi(,5033) cvs.texi(,5034) The way that you remove a directory is to remove all cvs.texi(,5035) the files in it. You don't remove the directory cvs.texi(,5036) itself; there is no way to do that. cvs.texi(,5037) Instead you specify the @samp{-P} option to cvs.texi(,5038) @code{cvs update} or @code{cvs checkout}, cvs.texi(,5039) which will cause @sc{cvs} to remove empty cvs.texi(,5040) directories from working directories. cvs.texi(,5041) (Note that @code{cvs export} always removes empty directories.) cvs.texi(,5042) Probably the cvs.texi(,5043) best way to do this is to always specify @samp{-P}; if cvs.texi(,5044) you want an empty directory then put a dummy file (for cvs.texi(,5045) example @file{.keepme}) in it to prevent @samp{-P} from cvs.texi(,5046) removing it. cvs.texi(,5047) cvs.texi(,5048) @c I'd try to give a rationale for this, but I'm not cvs.texi(,5049) @c sure there is a particularly convincing one. What cvs.texi(,5050) @c we would _like_ is for CVS to do a better job of version cvs.texi(,5051) @c controlling whether directories exist, to eliminate the cvs.texi(,5052) @c need for -P and so that a file can be a directory in cvs.texi(,5053) @c one revision and a regular file in another. cvs.texi(,5054) Note that @samp{-P} is implied by the @samp{-r} or @samp{-D} cvs.texi(,5055) options of @code{checkout}. This way cvs.texi(,5056) @sc{cvs} will be able to correctly create the directory cvs.texi(,5057) or not depending on whether the particular version you cvs.texi(,5058) are checking out contains any files in that directory. cvs.texi(,5059) cvs.texi(,5060) @c --------------------------------------------------------------------- cvs.texi(,5061) @node Moving files cvs.texi(,5062) @section Moving and renaming files cvs.texi(,5063) @cindex Moving files cvs.texi(,5064) @cindex Renaming files cvs.texi(,5065) @cindex Files, moving cvs.texi(,5066) cvs.texi(,5067) Moving files to a different directory or renaming them cvs.texi(,5068) is not difficult, but some of the ways in which this cvs.texi(,5069) works may be non-obvious. (Moving or renaming a cvs.texi(,5070) directory is even harder. @xref{Moving directories}.). cvs.texi(,5071) cvs.texi(,5072) The examples below assume that the file @var{old} is renamed to cvs.texi(,5073) @var{new}. cvs.texi(,5074) cvs.texi(,5075) @menu cvs.texi(,5076) * Outside:: The normal way to Rename cvs.texi(,5077) * Inside:: A tricky, alternative way cvs.texi(,5078) * Rename by copying:: Another tricky, alternative way cvs.texi(,5079) @end menu cvs.texi(,5080) cvs.texi(,5081) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,5082) @node Outside cvs.texi(,5083) @subsection The Normal way to Rename cvs.texi(,5084) cvs.texi(,5085) @c More rename issues. Not sure whether these are cvs.texi(,5086) @c worth documenting; I'm putting them here because cvs.texi(,5087) @c it seems to be as good a place as any to try to cvs.texi(,5088) @c set down the issues. cvs.texi(,5089) @c * "cvs annotate" will annotate either the new cvs.texi(,5090) @c file or the old file; it cannot annotate _each cvs.texi(,5091) @c line_ based on whether it was last changed in the cvs.texi(,5092) @c new or old file. Unlike "cvs log", where the cvs.texi(,5093) @c consequences of having to select either the new cvs.texi(,5094) @c or old name seem fairly benign, this may be a cvs.texi(,5095) @c real advantage to having CVS know about renames cvs.texi(,5096) @c other than as a deletion and an addition. cvs.texi(,5097) cvs.texi(,5098) The normal way to move a file is to copy @var{old} to cvs.texi(,5099) @var{new}, and then issue the normal @sc{cvs} commands cvs.texi(,5100) to remove @var{old} from the repository, and add cvs.texi(,5101) @var{new} to it. cvs.texi(,5102) @c The following sentence is not true: one must cd into cvs.texi(,5103) @c the directory to run "cvs add". cvs.texi(,5104) @c (Both @var{old} and @var{new} could cvs.texi(,5105) @c contain relative paths, for example @file{foo/bar.c}). cvs.texi(,5106) cvs.texi(,5107) @example cvs.texi(,5108) $ mv @var{old} @var{new} cvs.texi(,5109) $ cvs remove @var{old} cvs.texi(,5110) $ cvs add @var{new} cvs.texi(,5111) $ cvs commit -m "Renamed @var{old} to @var{new}" @var{old} @var{new} cvs.texi(,5112) @end example cvs.texi(,5113) cvs.texi(,5114) This is the simplest way to move a file, it is not cvs.texi(,5115) error-prone, and it preserves the history of what was cvs.texi(,5116) done. Note that to access the history of the file you cvs.texi(,5117) must specify the old or the new name, depending on what cvs.texi(,5118) portion of the history you are accessing. For example, cvs.texi(,5119) @code{cvs log @var{old}} will give the log up until the cvs.texi(,5120) time of the rename. cvs.texi(,5121) cvs.texi(,5122) When @var{new} is committed its revision numbers will cvs.texi(,5123) start again, usually at 1.1, so if that bothers you, cvs.texi(,5124) use the @samp{-r rev} option to commit. For more cvs.texi(,5125) information see @ref{Assigning revisions}. cvs.texi(,5126) cvs.texi(,5127) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,5128) @node Inside cvs.texi(,5129) @subsection Moving the history file cvs.texi(,5130) cvs.texi(,5131) This method is more dangerous, since it involves moving cvs.texi(,5132) files inside the repository. Read this entire section cvs.texi(,5133) before trying it out! cvs.texi(,5134) cvs.texi(,5135) @example cvs.texi(,5136) $ cd $CVSROOT/@var{dir} cvs.texi(,5137) $ mv @var{old},v @var{new},v cvs.texi(,5138) @end example cvs.texi(,5139) cvs.texi(,5140) @noindent cvs.texi(,5141) Advantages: cvs.texi(,5142) cvs.texi(,5143) @itemize @bullet cvs.texi(,5144) @item cvs.texi(,5145) The log of changes is maintained intact. cvs.texi(,5146) cvs.texi(,5147) @item cvs.texi(,5148) The revision numbers are not affected. cvs.texi(,5149) @end itemize cvs.texi(,5150) cvs.texi(,5151) @noindent cvs.texi(,5152) Disadvantages: cvs.texi(,5153) cvs.texi(,5154) @itemize @bullet cvs.texi(,5155) @item cvs.texi(,5156) Old releases cannot easily be fetched from the cvs.texi(,5157) repository. (The file will show up as @var{new} even cvs.texi(,5158) in revisions from the time before it was renamed). cvs.texi(,5159) cvs.texi(,5160) @item cvs.texi(,5161) There is no log information of when the file was renamed. cvs.texi(,5162) cvs.texi(,5163) @item cvs.texi(,5164) Nasty things might happen if someone accesses the history file cvs.texi(,5165) while you are moving it. Make sure no one else runs any of the @sc{cvs} cvs.texi(,5166) commands while you move it. cvs.texi(,5167) @end itemize cvs.texi(,5168) cvs.texi(,5169) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,5170) @node Rename by copying cvs.texi(,5171) @subsection Copying the history file cvs.texi(,5172) cvs.texi(,5173) This way also involves direct modifications to the cvs.texi(,5174) repository. It is safe, but not without drawbacks. cvs.texi(,5175) cvs.texi(,5176) @example cvs.texi(,5177) # @r{Copy the @sc{rcs} file inside the repository} cvs.texi(,5178) $ cd $CVSROOT/@var{dir} cvs.texi(,5179) $ cp @var{old},v @var{new},v cvs.texi(,5180) # @r{Remove the old file} cvs.texi(,5181) $ cd ~/@var{dir} cvs.texi(,5182) $ rm @var{old} cvs.texi(,5183) $ cvs remove @var{old} cvs.texi(,5184) $ cvs commit @var{old} cvs.texi(,5185) # @r{Remove all tags from @var{new}} cvs.texi(,5186) $ cvs update @var{new} cvs.texi(,5187) $ cvs log @var{new} # @r{Remember the non-branch tag names} cvs.texi(,5188) $ cvs tag -d @var{tag1} @var{new} cvs.texi(,5189) $ cvs tag -d @var{tag2} @var{new} cvs.texi(,5190) @dots{} cvs.texi(,5191) @end example cvs.texi(,5192) cvs.texi(,5193) By removing the tags you will be able to check out old cvs.texi(,5194) revisions. cvs.texi(,5195) cvs.texi(,5196) @noindent cvs.texi(,5197) Advantages: cvs.texi(,5198) cvs.texi(,5199) @itemize @bullet cvs.texi(,5200) @item cvs.texi(,5201) @c FIXME: Is this true about -D now that we have death cvs.texi(,5202) @c support? See 5B.3 in the FAQ. cvs.texi(,5203) Checking out old revisions works correctly, as long as cvs.texi(,5204) you use @samp{-r@var{tag}} and not @samp{-D@var{date}} cvs.texi(,5205) to retrieve the revisions. cvs.texi(,5206) cvs.texi(,5207) @item cvs.texi(,5208) The log of changes is maintained intact. cvs.texi(,5209) cvs.texi(,5210) @item cvs.texi(,5211) The revision numbers are not affected. cvs.texi(,5212) @end itemize cvs.texi(,5213) cvs.texi(,5214) @noindent cvs.texi(,5215) Disadvantages: cvs.texi(,5216) cvs.texi(,5217) @itemize @bullet cvs.texi(,5218) @item cvs.texi(,5219) You cannot easily see the history of the file across the rename. cvs.texi(,5220) cvs.texi(,5233) @end itemize cvs.texi(,5234) cvs.texi(,5235) @c --------------------------------------------------------------------- cvs.texi(,5236) @node Moving directories cvs.texi(,5237) @section Moving and renaming directories cvs.texi(,5238) @cindex Moving directories cvs.texi(,5239) @cindex Renaming directories cvs.texi(,5240) @cindex Directories, moving cvs.texi(,5241) cvs.texi(,5242) The normal way to rename or move a directory is to cvs.texi(,5243) rename or move each file within it as described in cvs.texi(,5244) @ref{Outside}. Then check out with the @samp{-P} cvs.texi(,5245) option, as described in @ref{Removing directories}. cvs.texi(,5246) cvs.texi(,5247) If you really want to hack the repository to rename or cvs.texi(,5248) delete a directory in the repository, you can do it cvs.texi(,5249) like this: cvs.texi(,5250) cvs.texi(,5251) @enumerate cvs.texi(,5252) @item cvs.texi(,5253) Inform everyone who has a checked out copy of the directory that the cvs.texi(,5254) directory will be renamed. They should commit all cvs.texi(,5255) their changes, and remove their working copies, cvs.texi(,5256) before you take the steps below. cvs.texi(,5257) cvs.texi(,5258) @item cvs.texi(,5259) Rename the directory inside the repository. cvs.texi(,5260) cvs.texi(,5261) @example cvs.texi(,5262) $ cd $CVSROOT/@var{parent-dir} cvs.texi(,5263) $ mv @var{old-dir} @var{new-dir} cvs.texi(,5264) @end example cvs.texi(,5265) cvs.texi(,5266) @item cvs.texi(,5267) Fix the @sc{cvs} administrative files, if necessary (for cvs.texi(,5268) instance if you renamed an entire module). cvs.texi(,5269) cvs.texi(,5270) @item cvs.texi(,5271) Tell everyone that they can check out again and continue cvs.texi(,5272) working. cvs.texi(,5273) cvs.texi(,5274) @end enumerate cvs.texi(,5275) cvs.texi(,5276) If someone had a working copy the @sc{cvs} commands will cvs.texi(,5277) cease to work for him, until he removes the directory cvs.texi(,5278) that disappeared inside the repository. cvs.texi(,5279) cvs.texi(,5280) It is almost always better to move the files in the cvs.texi(,5281) directory instead of moving the directory. If you move the cvs.texi(,5282) directory you are unlikely to be able to retrieve old cvs.texi(,5283) releases correctly, since they probably depend on the cvs.texi(,5284) name of the directories. cvs.texi(,5285) cvs.texi(,5286) @c --------------------------------------------------------------------- cvs.texi(,5287) @node History browsing cvs.texi(,5288) @chapter History browsing cvs.texi(,5289) @cindex History browsing cvs.texi(,5290) @cindex Traceability cvs.texi(,5291) @cindex Isolation cvs.texi(,5292) cvs.texi(,5344) cvs.texi(,5345) @c kind of lame, in a lot of ways the above text inside cvs.texi(,5346) @c the @ignore motivates this chapter better cvs.texi(,5347) Once you have used @sc{cvs} to store a version control cvs.texi(,5348) history---what files have changed when, how, and by cvs.texi(,5349) whom, there are a variety of mechanisms for looking cvs.texi(,5350) through the history. cvs.texi(,5351) cvs.texi(,5352) @c FIXME: should also be talking about how you look at cvs.texi(,5353) @c old revisions (e.g. "cvs update -p -r 1.2 foo.c"). cvs.texi(,5354) @menu cvs.texi(,5355) * log messages:: Log messages cvs.texi(,5356) * history database:: The history database cvs.texi(,5357) * user-defined logging:: User-defined logging cvs.texi(,5358) * annotate:: What revision modified each line of a file? cvs.texi(,5359) @end menu cvs.texi(,5360) cvs.texi(,5361) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,5362) @node log messages cvs.texi(,5363) @section Log messages cvs.texi(,5364) cvs.texi(,5365) @c FIXME: @xref to place where we talk about how to cvs.texi(,5366) @c specify message to commit. cvs.texi(,5367) Whenever you commit a file you specify a log message. cvs.texi(,5368) cvs.texi(,5369) @c FIXME: bring the information here, and get rid of or cvs.texi(,5370) @c greatly shrink the "log" node. cvs.texi(,5371) To look through the log messages which have been cvs.texi(,5372) specified for every revision which has been committed, cvs.texi(,5373) use the @code{cvs log} command (@pxref{log}). cvs.texi(,5374) cvs.texi(,5375) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,5376) @node history database cvs.texi(,5377) @section The history database cvs.texi(,5378) cvs.texi(,5379) @c FIXME: bring the information from the history file cvs.texi(,5380) @c and history nodes here. Rewrite it to be motivated cvs.texi(,5381) @c better (start out by clearly explaining what gets cvs.texi(,5382) @c logged in history, for example). cvs.texi(,5383) You can use the history file (@pxref{history file}) to cvs.texi(,5384) log various @sc{cvs} actions. To retrieve the cvs.texi(,5385) information from the history file, use the @code{cvs cvs.texi(,5386) history} command (@pxref{history}). cvs.texi(,5387) cvs.texi(,5388) Note: you can control what is logged to this file by using the cvs.texi(,5389) @samp{LogHistory} keyword in the @file{CVSROOT/config} file cvs.texi(,5390) (@pxref{config}). cvs.texi(,5391) cvs.texi(,5392) @c cvs.texi(,5393) @c The history database has many problems: cvs.texi(,5394) @c * It is very unclear what field means what. This cvs.texi(,5395) @c could be improved greatly by better documentation, cvs.texi(,5396) @c but there are still non-orthogonalities (for cvs.texi(,5397) @c example, tag does not record the "repository" cvs.texi(,5398) @c field but most records do). cvs.texi(,5399) @c * Confusion about files, directories, and modules. cvs.texi(,5400) @c Some commands record one, some record others. cvs.texi(,5401) @c * File removal is not logged. There is an 'R' cvs.texi(,5402) @c record type documented, but CVS never uses it. cvs.texi(,5403) @c * Tags are only logged for the "cvs rtag" command, cvs.texi(,5404) @c not "cvs tag". The fix for this is not completely cvs.texi(,5405) @c clear (see above about modules vs. files). cvs.texi(,5406) @c * Are there other cases of operations that are not cvs.texi(,5407) @c logged? One would hope for all changes to the cvs.texi(,5408) @c repository to be logged somehow (particularly cvs.texi(,5409) @c operations like tagging, "cvs admin -k", and other cvs.texi(,5410) @c operations which do not record a history that one cvs.texi(,5411) @c can get with "cvs log"). Operations on the working cvs.texi(,5412) @c directory, like export, get, and release, are a cvs.texi(,5413) @c second category also covered by the current "cvs cvs.texi(,5414) @c history". cvs.texi(,5415) @c * The history file does not record the options given cvs.texi(,5416) @c to a command. The most serious manifestation of cvs.texi(,5417) @c this is perhaps that it doesn't record whether a command cvs.texi(,5418) @c was recursive. It is not clear to me whether one cvs.texi(,5419) @c wants to log at a level very close to the command cvs.texi(,5420) @c line, as a sort of way of logging each command cvs.texi(,5421) @c (more or less), or whether one wants cvs.texi(,5422) @c to log more at the level of what was changed (or cvs.texi(,5423) @c something in between), but either way the current cvs.texi(,5424) @c information has pretty big gaps. cvs.texi(,5425) @c * Further details about a tag--like whether it is a cvs.texi(,5426) @c branch tag or, if a non-branch tag, which branch it cvs.texi(,5427) @c is on. One can find out this information about the cvs.texi(,5428) @c tag as it exists _now_, but if the tag has been cvs.texi(,5429) @c moved, one doesn't know what it was like at the time cvs.texi(,5430) @c the history record was written. cvs.texi(,5431) @c * Whether operating on a particular tag, date, or cvs.texi(,5432) @c options was implicit (sticky) or explicit. cvs.texi(,5433) @c cvs.texi(,5434) @c Another item, only somewhat related to the above, is a cvs.texi(,5435) @c way to control what is logged in the history file. cvs.texi(,5436) @c This is probably the only good way to handle cvs.texi(,5437) @c different people having different ideas about cvs.texi(,5438) @c information/space tradeoffs. cvs.texi(,5439) @c cvs.texi(,5440) @c It isn't really clear that it makes sense to try to cvs.texi(,5441) @c patch up the history file format as it exists now to cvs.texi(,5442) @c include all that stuff. It might be better to cvs.texi(,5443) @c design a whole new CVSROOT/nhistory file and "cvs cvs.texi(,5444) @c nhistory" command, or some such, or in some other cvs.texi(,5445) @c way trying to come up with a clean break from the cvs.texi(,5446) @c past, which can address the above concerns. Another cvs.texi(,5447) @c open question is how/whether this relates to cvs.texi(,5448) @c taginfo/loginfo/etc. cvs.texi(,5449) cvs.texi(,5450) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,5451) @node user-defined logging cvs.texi(,5452) @section User-defined logging cvs.texi(,5453) cvs.texi(,5454) @c FIXME: should probably also mention the fact the -l cvs.texi(,5455) @c global option can disable most of the mechanisms cvs.texi(,5456) @c discussed here (why? What is the -l global option for?). cvs.texi(,5457) @c cvs.texi(,5458) @c FIXME: probably should centralize this information cvs.texi(,5459) @c here, at least to some extent. Maybe by moving the cvs.texi(,5460) @c loginfo, etc., nodes here and replacing cvs.texi(,5461) @c the "user-defined logging" node with one node for cvs.texi(,5462) @c each method. cvs.texi(,5463) You can customize @sc{cvs} to log various kinds of cvs.texi(,5464) actions, in whatever manner you choose. These cvs.texi(,5465) mechanisms operate by executing a script at various cvs.texi(,5466) times. The script might append a message to a file cvs.texi(,5467) listing the information and the programmer who created cvs.texi(,5468) it, or send mail to a group of developers, or, perhaps, cvs.texi(,5469) post a message to a particular newsgroup. To log cvs.texi(,5470) commits, use the @file{loginfo} file (@pxref{loginfo}). cvs.texi(,5471) @c FIXME: What is difference between doing it in the cvs.texi(,5472) @c modules file and using loginfo/taginfo? Why should cvs.texi(,5473) @c user use one or the other? cvs.texi(,5474) To log commits, checkouts, exports, and tags, cvs.texi(,5475) respectively, you can also use the @samp{-i}, cvs.texi(,5476) @samp{-o}, @samp{-e}, and @samp{-t} options in the cvs.texi(,5477) modules file. For a more flexible way of giving cvs.texi(,5478) notifications to various users, which requires less in cvs.texi(,5479) the way of keeping centralized scripts up to date, use cvs.texi(,5480) the @code{cvs watch add} command (@pxref{Getting cvs.texi(,5481) Notified}); this command is useful even if you are not cvs.texi(,5482) using @code{cvs watch on}. cvs.texi(,5483) cvs.texi(,5484) @cindex taginfo cvs.texi(,5485) @cindex Exit status, of taginfo cvs.texi(,5486) The @file{taginfo} file defines programs to execute cvs.texi(,5487) when someone executes a @code{tag} or @code{rtag} cvs.texi(,5488) command. The @file{taginfo} file has the standard form cvs.texi(,5489) for administrative files (@pxref{Administrative cvs.texi(,5490) files}), where each line is a regular expression cvs.texi(,5491) followed by a command to execute. The arguments passed cvs.texi(,5492) to the command are, in order, the @var{tagname}, cvs.texi(,5493) @var{operation} (@code{add} for @code{tag}, cvs.texi(,5494) @code{mov} for @code{tag -F}, and @code{del} for cvs.texi(,5495) @code{tag -d}), @var{repository}, and any remaining are cvs.texi(,5496) pairs of @var{filename} @var{revision}. A non-zero cvs.texi(,5497) exit of the filter program will cause the tag to be cvs.texi(,5498) aborted. cvs.texi(,5499) cvs.texi(,5500) Here is an example of using taginfo to log tag and rtag cvs.texi(,5501) commands. In the taginfo file put: cvs.texi(,5502) cvs.texi(,5503) @example cvs.texi(,5504) ALL /usr/local/cvsroot/CVSROOT/loggit cvs.texi(,5505) @end example cvs.texi(,5506) cvs.texi(,5507) @noindent cvs.texi(,5508) Where @file{/usr/local/cvsroot/CVSROOT/loggit} contains the cvs.texi(,5509) following script: cvs.texi(,5510) cvs.texi(,5511) @example cvs.texi(,5512) #!/bin/sh cvs.texi(,5513) echo "$@@" >>/home/kingdon/cvsroot/CVSROOT/taglog cvs.texi(,5514) @end example cvs.texi(,5515) cvs.texi(,5516) @node annotate cvs.texi(,5517) @section Annotate command cvs.texi(,5518) @cindex annotate (subcommand) cvs.texi(,5519) cvs.texi(,5520) @deffn Command {cvs annotate} [@code{-FflR}] [@code{-r rev}|@code{-D date}] files @dots{} cvs.texi(,5521) cvs.texi(,5522) For each file in @var{files}, print the head revision cvs.texi(,5523) of the trunk, together with information on the last cvs.texi(,5524) modification for each line. For example: cvs.texi(,5525) cvs.texi(,5526) @example cvs.texi(,5527) $ cvs annotate ssfile cvs.texi(,5528) Annotations for ssfile cvs.texi(,5529) *************** cvs.texi(,5530) 1.1 (mary 27-Mar-96): ssfile line 1 cvs.texi(,5531) 1.2 (joe 28-Mar-96): ssfile line 2 cvs.texi(,5532) @end example cvs.texi(,5533) cvs.texi(,5534) The file @file{ssfile} currently contains two lines. cvs.texi(,5535) The @code{ssfile line 1} line was checked in by cvs.texi(,5536) @code{mary} on March 27. Then, on March 28, @code{joe} cvs.texi(,5537) added a line @code{ssfile line 2}, without modifying cvs.texi(,5538) the @code{ssfile line 1} line. This report doesn't cvs.texi(,5539) tell you anything about lines which have been deleted cvs.texi(,5540) or replaced; you need to use @code{cvs diff} for that cvs.texi(,5541) (@pxref{diff}). cvs.texi(,5542) cvs.texi(,5543) @end deffn cvs.texi(,5544) cvs.texi(,5545) The options to @code{cvs annotate} are listed in cvs.texi(,5546) @ref{Invoking CVS}, and can be used to select the files cvs.texi(,5547) and revisions to annotate. The options are described cvs.texi(,5548) in more detail there and in @ref{Common options}. cvs.texi(,5549) cvs.texi(,5550) @c FIXME: maybe an example using the options? Just cvs.texi(,5551) @c what it means to select a revision might be worth a cvs.texi(,5552) @c few words of explanation ("you want to see who cvs.texi(,5553) @c changed this line *before* 1.4"...). cvs.texi(,5554) cvs.texi(,5555) @c --------------------------------------------------------------------- cvs.texi(,5556) @node Binary files cvs.texi(,5557) @chapter Handling binary files cvs.texi(,5558) @cindex Binary files cvs.texi(,5559) cvs.texi(,5560) The most common use for @sc{cvs} is to store text cvs.texi(,5561) files. With text files, @sc{cvs} can merge revisions, cvs.texi(,5562) display the differences between revisions in a cvs.texi(,5563) human-visible fashion, and other such operations. cvs.texi(,5564) However, if you are willing to give up a few of these cvs.texi(,5565) abilities, @sc{cvs} can store binary files. For cvs.texi(,5566) example, one might store a web site in @sc{cvs} cvs.texi(,5567) including both text files and binary images. cvs.texi(,5568) cvs.texi(,5569) @menu cvs.texi(,5570) * Binary why:: More details on issues with binary files cvs.texi(,5571) * Binary howto:: How to store them cvs.texi(,5572) @end menu cvs.texi(,5573) cvs.texi(,5574) @node Binary why cvs.texi(,5575) @section The issues with binary files cvs.texi(,5576) cvs.texi(,5577) While the need to manage binary files may seem obvious cvs.texi(,5578) if the files that you customarily work with are binary, cvs.texi(,5579) putting them into version control does present some cvs.texi(,5580) additional issues. cvs.texi(,5581) cvs.texi(,5582) One basic function of version control is to show the cvs.texi(,5583) differences between two revisions. For example, if cvs.texi(,5584) someone else checked in a new version of a file, you cvs.texi(,5585) may wish to look at what they changed and determine cvs.texi(,5586) whether their changes are good. For text files, cvs.texi(,5587) @sc{cvs} provides this functionality via the @code{cvs cvs.texi(,5588) diff} command. For binary files, it may be possible to cvs.texi(,5589) extract the two revisions and then compare them with a cvs.texi(,5590) tool external to @sc{cvs} (for example, word processing cvs.texi(,5591) software often has such a feature). If there is no cvs.texi(,5592) such tool, one must track changes via other mechanisms, cvs.texi(,5593) such as urging people to write good log messages, and cvs.texi(,5594) hoping that the changes they actually made were the cvs.texi(,5595) changes that they intended to make. cvs.texi(,5596) cvs.texi(,5597) Another ability of a version control system is the cvs.texi(,5598) ability to merge two revisions. For @sc{cvs} this cvs.texi(,5599) happens in two contexts. The first is when users make cvs.texi(,5600) changes in separate working directories cvs.texi(,5601) (@pxref{Multiple developers}). The second is when one cvs.texi(,5602) merges explicitly with the @samp{update -j} command cvs.texi(,5603) (@pxref{Branching and merging}). cvs.texi(,5604) cvs.texi(,5605) In the case of text cvs.texi(,5606) files, @sc{cvs} can merge changes made independently, cvs.texi(,5607) and signal a conflict if the changes conflict. With cvs.texi(,5608) binary files, the best that @sc{cvs} can do is present cvs.texi(,5609) the two different copies of the file, and leave it to cvs.texi(,5610) the user to resolve the conflict. The user may choose cvs.texi(,5611) one copy or the other, or may run an external merge cvs.texi(,5612) tool which knows about that particular file format, if cvs.texi(,5613) one exists. cvs.texi(,5614) Note that having the user merge relies primarily on the cvs.texi(,5615) user to not accidentally omit some changes, and thus is cvs.texi(,5616) potentially error prone. cvs.texi(,5617) cvs.texi(,5618) If this process is thought to be undesirable, the best cvs.texi(,5619) choice may be to avoid merging. To avoid the merges cvs.texi(,5620) that result from separate working directories, see the cvs.texi(,5621) discussion of reserved checkouts (file locking) in cvs.texi(,5622) @ref{Multiple developers}. To avoid the merges cvs.texi(,5623) resulting from branches, restrict use of branches. cvs.texi(,5624) cvs.texi(,5625) @node Binary howto cvs.texi(,5626) @section How to store binary files cvs.texi(,5627) cvs.texi(,5628) There are two issues with using @sc{cvs} to store cvs.texi(,5629) binary files. The first is that @sc{cvs} by default cvs.texi(,5630) converts line endings between the canonical form in cvs.texi(,5631) which they are stored in the repository (linefeed cvs.texi(,5632) only), and the form appropriate to the operating system cvs.texi(,5633) in use on the client (for example, carriage return cvs.texi(,5634) followed by line feed for Windows NT). cvs.texi(,5635) cvs.texi(,5636) The second is that a binary file might happen to cvs.texi(,5637) contain data which looks like a keyword (@pxref{Keyword cvs.texi(,5638) substitution}), so keyword expansion must be turned cvs.texi(,5639) off. cvs.texi(,5640) cvs.texi(,5641) @c FIXME: the third is that one can't do merges with cvs.texi(,5642) @c binary files. xref to Multiple Developers and the cvs.texi(,5643) @c reserved checkout issues. cvs.texi(,5644) cvs.texi(,5645) The @samp{-kb} option available with some @sc{cvs} cvs.texi(,5646) commands insures that neither line ending conversion cvs.texi(,5647) nor keyword expansion will be done. cvs.texi(,5648) cvs.texi(,5649) Here is an example of how you can create a new file cvs.texi(,5650) using the @samp{-kb} flag: cvs.texi(,5651) cvs.texi(,5652) @example cvs.texi(splitrcskeyword,5653) $ echo '$@i{}Id$' > kotest cvs.texi(,5654) $ cvs add -kb -m"A test file" kotest cvs.texi(,5655) $ cvs ci -m"First checkin; contains a keyword" kotest cvs.texi(,5656) @end example cvs.texi(,5657) cvs.texi(,5658) If a file accidentally gets added without @samp{-kb}, cvs.texi(,5659) one can use the @code{cvs admin} command to recover. cvs.texi(,5660) For example: cvs.texi(,5661) cvs.texi(,5662) @example cvs.texi(splitrcskeyword,5663) $ echo '$@i{}Id$' > kotest cvs.texi(,5664) $ cvs add -m"A test file" kotest cvs.texi(,5665) $ cvs ci -m"First checkin; contains a keyword" kotest cvs.texi(,5666) $ cvs admin -kb kotest cvs.texi(,5667) $ cvs update -A kotest cvs.texi(,5668) # @r{For non-unix systems:} cvs.texi(,5669) # @r{Copy in a good copy of the file from outside CVS} cvs.texi(,5670) $ cvs commit -m "make it binary" kotest cvs.texi(,5671) @end example cvs.texi(,5672) cvs.texi(,5673) @c Trying to describe this for both unix and non-unix cvs.texi(,5674) @c in the same description is very confusing. Might cvs.texi(,5675) @c want to split the two, or just ditch the unix "shortcut" cvs.texi(,5676) @c (unixheads don't do much with binary files, anyway). cvs.texi(,5677) @c This used to say "(Try the above example, and do a cvs.texi(,5678) @c @code{cat kotest} after every command)". But that cvs.texi(,5679) @c only really makes sense for the unix case. cvs.texi(,5680) When you check in the file @file{kotest} the file is cvs.texi(,5681) not preserved as a binary file, because you did not cvs.texi(,5682) check it in as a binary file. The @code{cvs cvs.texi(,5683) admin -kb} command sets the default keyword cvs.texi(,5684) substitution method for this file, but it does not cvs.texi(,5685) alter the working copy of the file that you have. If you need to cvs.texi(,5686) cope with line endings (that is, you are using cvs.texi(,5687) @sc{cvs} on a non-unix system), then you need to cvs.texi(,5688) check in a new copy of the file, as shown by the cvs.texi(,5689) @code{cvs commit} command above. cvs.texi(,5690) On unix, the @code{cvs update -A} command suffices. cvs.texi(,5691) @c FIXME: should also describe what the *other users* cvs.texi(,5692) @c need to do, if they have checked out copies which cvs.texi(,5693) @c have been corrupted by lack of -kb. I think maybe cvs.texi(,5694) @c "cvs update -kb" or "cvs cvs.texi(,5695) @c update -A" would suffice, although the user who cvs.texi(,5696) @c reported this suggested removing the file, manually cvs.texi(,5697) @c removing it from CVS/Entries, and then "cvs update" cvs.texi(,5698) (Note that you can use @code{cvs log} to determine the default keyword cvs.texi(,5699) substitution method for a file and @code{cvs status} to determine cvs.texi(,5700) the keyword substitution method for a working copy.) cvs.texi(,5701) cvs.texi(,5702) However, in using @code{cvs admin -k} to change the cvs.texi(,5703) keyword expansion, be aware that the keyword expansion cvs.texi(,5704) mode is not version controlled. This means that, for cvs.texi(,5705) example, that if you have a text file in old releases, cvs.texi(,5706) and a binary file with the same name in new releases, cvs.texi(,5707) @sc{cvs} provides no way to check out the file in text cvs.texi(,5708) or binary mode depending on what version you are cvs.texi(,5709) checking out. There is no good workaround for this cvs.texi(,5710) problem. cvs.texi(,5711) cvs.texi(,5712) You can also set a default for whether @code{cvs add} cvs.texi(,5713) and @code{cvs import} treat a file as binary based on cvs.texi(,5714) its name; for example you could say that files who cvs.texi(,5715) names end in @samp{.exe} are binary. @xref{Wrappers}. cvs.texi(,5716) There is currently no way to have @sc{cvs} detect cvs.texi(,5717) whether a file is binary based on its contents. The cvs.texi(,5718) main difficulty with designing such a feature is that cvs.texi(,5719) it is not clear how to distinguish between binary and cvs.texi(,5720) non-binary files, and the rules to apply would vary cvs.texi(,5721) considerably with the operating system. cvs.texi(,5722) @c For example, it would be good on MS-DOS-family OSes cvs.texi(,5723) @c for anything containing ^Z to be binary. Having cvs.texi(,5724) @c characters with the 8th bit set imply binary is almost cvs.texi(,5725) @c surely a bad idea in the context of ISO-8859-* and cvs.texi(,5726) @c other such character sets. On VMS or the Mac, we cvs.texi(,5727) @c could use the OS's file typing. This is a cvs.texi(,5728) @c commonly-desired feature, and something of this sort cvs.texi(,5729) @c may make sense. But there are a lot of pitfalls here. cvs.texi(,5730) @c cvs.texi(,5731) @c Another, probably better, way to tell is to read the cvs.texi(,5732) @c file in text mode, write it to a temp file in text cvs.texi(,5733) @c mode, and then do a binary mode compare of the two cvs.texi(,5734) @c files. If they differ, it is a binary file. This cvs.texi(,5735) @c might have problems on VMS (or some other system cvs.texi(,5736) @c with several different text modes), but in general cvs.texi(,5737) @c should be relatively portable. The only other cvs.texi(,5738) @c downside I can think of is that it would be fairly cvs.texi(,5739) @c slow, but that is perhaps a small price to pay for cvs.texi(,5740) @c not having your files corrupted. Another issue is cvs.texi(,5741) @c what happens if you import a text file with bare cvs.texi(,5742) @c linefeeds on Windows. Such files will show up on cvs.texi(,5743) @c Windows sometimes (I think some native windows cvs.texi(,5744) @c programs even write them, on occasion). Perhaps it cvs.texi(,5745) @c is reasonable to treat such files as binary; after cvs.texi(,5746) @c all it is something of a presumption to assume that cvs.texi(,5747) @c the user would want the linefeeds converted to CRLF. cvs.texi(,5748) cvs.texi(,5749) @c --------------------------------------------------------------------- cvs.texi(,5750) @node Multiple developers cvs.texi(,5751) @chapter Multiple developers cvs.texi(,5752) @cindex Multiple developers cvs.texi(,5753) @cindex Team of developers cvs.texi(,5754) @cindex File locking cvs.texi(,5755) @cindex Locking files cvs.texi(,5756) @cindex Working copy cvs.texi(,5757) @cindex Reserved checkouts cvs.texi(,5758) @cindex Unreserved checkouts cvs.texi(,5759) @cindex RCS-style locking cvs.texi(,5760) cvs.texi(,5761) When more than one person works on a software project cvs.texi(,5762) things often get complicated. Often, two people try to cvs.texi(,5763) edit the same file simultaneously. One solution, known cvs.texi(,5764) as @dfn{file locking} or @dfn{reserved checkouts}, is cvs.texi(,5765) to allow only one person to edit each file at a time. cvs.texi(,5766) This is the only solution with some version control cvs.texi(,5767) systems, including @sc{rcs} and @sc{sccs}. Currently cvs.texi(,5768) the usual way to get reserved checkouts with @sc{cvs} cvs.texi(,5769) is the @code{cvs admin -l} command (@pxref{admin cvs.texi(,5770) options}). This is not as nicely integrated into cvs.texi(,5771) @sc{cvs} as the watch features, described below, but it cvs.texi(,5772) seems that most people with a need for reserved cvs.texi(,5773) checkouts find it adequate. cvs.texi(,5774) @c Or "find it better than worrying about implementing cvs.texi(,5775) @c nicely integrated reserved checkouts" or ...? cvs.texi(,5776) It also may be possible to use the watches cvs.texi(,5777) features described below, together with suitable cvs.texi(,5778) procedures (not enforced by software), to avoid having cvs.texi(,5779) two people edit at the same time. cvs.texi(,5780) cvs.texi(,5781) @c Our unreserved checkout model might not cvs.texi(,5782) @c be quite the same as others. For example, I cvs.texi(,5783) @c think that some systems will tend to create a branch cvs.texi(,5784) @c in the case where CVS prints "up-to-date check failed". cvs.texi(,5785) @c It isn't clear to me whether we should try to cvs.texi(,5786) @c explore these subtleties; it could easily just cvs.texi(,5787) @c confuse people. cvs.texi(,5788) The default model with @sc{cvs} is known as cvs.texi(,5789) @dfn{unreserved checkouts}. In this model, developers cvs.texi(,5790) can edit their own @dfn{working copy} of a file cvs.texi(,5791) simultaneously. The first person that commits his cvs.texi(,5792) changes has no automatic way of knowing that another cvs.texi(,5793) has started to edit it. Others will get an error cvs.texi(,5794) message when they try to commit the file. They must cvs.texi(,5795) then use @sc{cvs} commands to bring their working copy cvs.texi(,5796) up to date with the repository revision. This process cvs.texi(,5797) is almost automatic. cvs.texi(,5798) cvs.texi(,5799) @c FIXME? should probably use the word "watch" here, to cvs.texi(,5800) @c tie this into the text below and above. cvs.texi(,5801) @sc{cvs} also supports mechanisms which facilitate cvs.texi(,5802) various kinds of communication, without actually cvs.texi(,5803) enforcing rules like reserved checkouts do. cvs.texi(,5804) cvs.texi(,5805) The rest of this chapter describes how these various cvs.texi(,5806) models work, and some of the issues involved in cvs.texi(,5807) choosing between them. cvs.texi(,5808) cvs.texi(,5886) cvs.texi(,5887) @menu cvs.texi(,5888) * File status:: A file can be in several states cvs.texi(,5889) * Updating a file:: Bringing a file up-to-date cvs.texi(,5890) * Conflicts example:: An informative example cvs.texi(,5891) * Informing others:: To cooperate you must inform cvs.texi(,5892) * Concurrency:: Simultaneous repository access cvs.texi(,5893) * Watches:: Mechanisms to track who is editing files cvs.texi(,5894) * Choosing a model:: Reserved or unreserved checkouts? cvs.texi(,5895) @end menu cvs.texi(,5896) cvs.texi(,5897) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,5898) @node File status cvs.texi(,5899) @section File status cvs.texi(,5900) @cindex File status cvs.texi(,5901) @cindex Status of a file cvs.texi(,5902) cvs.texi(,5903) @c Shouldn't this start with an example or something, cvs.texi(,5904) @c introducing the unreserved checkout model? Before we cvs.texi(,5905) @c dive into listing states? cvs.texi(,5906) Based on what operations you have performed on a cvs.texi(,5907) checked out file, and what operations others have cvs.texi(,5908) performed to that file in the repository, one can cvs.texi(,5909) classify a file in a number of states. The states, as cvs.texi(,5910) reported by the @code{status} command, are: cvs.texi(,5911) cvs.texi(,5912) @c The order of items is chosen to group logically cvs.texi(,5913) @c similar outputs together. cvs.texi(,5914) @c People who want alphabetical can use the index... cvs.texi(,5915) @table @asis cvs.texi(,5916) @cindex Up-to-date cvs.texi(,5917) @item Up-to-date cvs.texi(,5918) The file is identical with the latest revision in the cvs.texi(,5919) repository for the branch in use. cvs.texi(,5920) @c FIXME: should we clarify "in use"? The answer is cvs.texi(,5921) @c sticky tags, and trying to distinguish branch sticky cvs.texi(,5922) @c tags from non-branch sticky tags seems rather awkward cvs.texi(,5923) @c here. cvs.texi(,5924) @c FIXME: What happens with non-branch sticky tags? Is cvs.texi(,5925) @c a stuck file "Up-to-date" or "Needs checkout" or what? cvs.texi(,5926) cvs.texi(,5927) @item Locally Modified cvs.texi(,5928) @cindex Locally Modified cvs.texi(,5929) You have edited the file, and not yet committed your changes. cvs.texi(,5930) cvs.texi(,5931) @item Locally Added cvs.texi(,5932) @cindex Locally Added cvs.texi(,5933) You have added the file with @code{add}, and not yet cvs.texi(,5934) committed your changes. cvs.texi(,5935) @c There are many cases involving the file being cvs.texi(,5936) @c added/removed/modified in the working directory, and cvs.texi(,5937) @c added/removed/modified in the repository, which we cvs.texi(,5938) @c don't try to describe here. I'm not sure that "cvs cvs.texi(,5939) @c status" produces a non-confusing output in most of cvs.texi(,5940) @c those cases. cvs.texi(,5941) cvs.texi(,5942) @item Locally Removed cvs.texi(,5943) @cindex Locally Removed cvs.texi(,5944) You have removed the file with @code{remove}, and not yet cvs.texi(,5945) committed your changes. cvs.texi(,5946) cvs.texi(,5947) @item Needs Checkout cvs.texi(,5948) @cindex Needs Checkout cvs.texi(,5949) Someone else has committed a newer revision to the cvs.texi(,5950) repository. The name is slightly misleading; you will cvs.texi(,5951) ordinarily use @code{update} rather than cvs.texi(,5952) @code{checkout} to get that newer revision. cvs.texi(,5953) cvs.texi(,5954) @item Needs Patch cvs.texi(,5955) @cindex Needs Patch cvs.texi(,5956) @c See also newb-123j0 in sanity.sh (although that case cvs.texi(,5957) @c should probably be changed rather than documented). cvs.texi(,5958) Like Needs Checkout, but the @sc{cvs} server will send cvs.texi(,5959) a patch rather than the entire file. Sending a patch or cvs.texi(,5960) sending an entire file accomplishes the same thing. cvs.texi(,5961) cvs.texi(,5962) @item Needs Merge cvs.texi(,5963) @cindex Needs Merge cvs.texi(,5964) Someone else has committed a newer revision to the repository, and you cvs.texi(,5965) have also made modifications to the file. cvs.texi(,5966) cvs.texi(,5967) @item Unresolved Conflict cvs.texi(,5968) @cindex Unresolved Conflict cvs.texi(,5969) @c FIXCVS - This file status needs to be changed to some more informative cvs.texi(,5970) @c text that distinguishes it more clearly from each of the Locally Added, cvs.texi(,5971) @c File had conflicts on merge, and Unknown status types, but an exact and cvs.texi(,5972) @c succinct wording escapes me at the moment. cvs.texi(,5973) A file with the same name as this new file has been added to the repository cvs.texi(,5974) from a second workspace. This file will need to be moved out of the way cvs.texi(,5975) to allow an @code{update} to complete. cvs.texi(,5976) cvs.texi(,5977) @item File had conflicts on merge cvs.texi(,5978) @cindex File had conflicts on merge cvs.texi(,5979) @c is it worth saying that this message was "Unresolved cvs.texi(,5980) @c Conflict" in CVS 1.9 and earlier? I'm inclined to cvs.texi(,5981) @c think that is unnecessarily confusing to new users. cvs.texi(,5982) This is like Locally Modified, except that a previous cvs.texi(,5983) @code{update} command gave a conflict. If you have not cvs.texi(,5984) already done so, you need to cvs.texi(,5985) resolve the conflict as described in @ref{Conflicts example}. cvs.texi(,5986) cvs.texi(,5987) @item Unknown cvs.texi(,5988) @cindex Unknown cvs.texi(,5989) @sc{cvs} doesn't know anything about this file. For cvs.texi(,5990) example, you have created a new file and have not run cvs.texi(,5991) @code{add}. cvs.texi(,5992) @c cvs.texi(,5993) @c "Entry Invalid" and "Classify Error" are also in the cvs.texi(,5994) @c status.c. The latter definitely indicates a CVS bug cvs.texi(,5995) @c (should it be worded more like "internal error" so cvs.texi(,5996) @c people submit bug reports if they see it?). The former cvs.texi(,5997) @c I'm not as sure; I haven't tracked down whether/when it cvs.texi(,5998) @c appears in "cvs status" output. cvs.texi(,5999) cvs.texi(,6000) @end table cvs.texi(,6001) cvs.texi(,6002) To help clarify the file status, @code{status} also cvs.texi(,6003) reports the @code{Working revision} which is the cvs.texi(,6004) revision that the file in the working directory derives cvs.texi(,6005) from, and the @code{Repository revision} which is the cvs.texi(,6006) latest revision in the repository for the branch in cvs.texi(,6007) use. cvs.texi(,6008) @c FIXME: should we clarify "in use"? The answer is cvs.texi(,6009) @c sticky tags, and trying to distinguish branch sticky cvs.texi(,6010) @c tags from non-branch sticky tags seems rather awkward cvs.texi(,6011) @c here. cvs.texi(,6012) @c FIXME: What happens with non-branch sticky tags? cvs.texi(,6013) @c What is the Repository Revision there? See the cvs.texi(,6014) @c comment at vn_rcs in cvs.h, which is kind of cvs.texi(,6015) @c confused--we really need to document better what this cvs.texi(,6016) @c field contains. cvs.texi(,6017) @c Q: Should we document "New file!" and other such cvs.texi(,6018) @c outputs or are they self-explanatory? cvs.texi(,6019) @c FIXME: what about the date to the right of "Working cvs.texi(,6020) @c revision"? It doesn't appear with client/server and cvs.texi(,6021) @c seems unnecessary (redundant with "ls -l") so cvs.texi(,6022) @c perhaps it should be removed for non-client/server too? cvs.texi(,6023) @c FIXME: Need some examples. cvs.texi(,6024) @c FIXME: Working revision can also be something like cvs.texi(,6025) @c "-1.3" for a locally removed file. Not at all cvs.texi(,6026) @c self-explanatory (and it is possible that CVS should cvs.texi(,6027) @c be changed rather than documenting this). cvs.texi(,6028) cvs.texi(,6029) @c Would be nice to have an @example showing output cvs.texi(,6030) @c from cvs status, with comments showing the xref cvs.texi(,6031) @c where each part of the output is described. This cvs.texi(,6032) @c might fit in nicely if it is desirable to split this cvs.texi(,6033) @c node in two; one to introduce "cvs status" and one cvs.texi(,6034) @c to list each of the states. cvs.texi(,6035) The options to @code{status} are listed in cvs.texi(,6036) @ref{Invoking CVS}. For information on its @code{Sticky tag} cvs.texi(,6037) and @code{Sticky date} output, see @ref{Sticky tags}. cvs.texi(,6038) For information on its @code{Sticky options} output, cvs.texi(,6039) see the @samp{-k} option in @ref{update options}. cvs.texi(,6040) cvs.texi(,6041) You can think of the @code{status} and @code{update} cvs.texi(,6042) commands as somewhat complementary. You use cvs.texi(,6043) @code{update} to bring your files up to date, and you cvs.texi(,6044) can use @code{status} to give you some idea of what an cvs.texi(,6045) @code{update} would do (of course, the state of the cvs.texi(,6046) repository might change before you actually run cvs.texi(,6047) @code{update}). In fact, if you want a command to cvs.texi(,6048) display file status in a more brief format than is cvs.texi(,6049) displayed by the @code{status} command, you can invoke cvs.texi(,6050) cvs.texi(,6051) @cindex update, to display file status cvs.texi(,6052) @example cvs.texi(,6053) $ cvs -n -q update cvs.texi(,6054) @end example cvs.texi(,6055) cvs.texi(,6056) The @samp{-n} option means to not actually do the cvs.texi(,6057) update, but merely to display statuses; the @samp{-q} cvs.texi(,6058) option avoids printing the name of each directory. For cvs.texi(,6059) more information on the @code{update} command, and cvs.texi(,6060) these options, see @ref{Invoking CVS}. cvs.texi(,6061) cvs.texi(,6062) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,6063) @node Updating a file cvs.texi(,6064) @section Bringing a file up to date cvs.texi(,6065) @cindex Bringing a file up to date cvs.texi(,6066) @cindex Updating a file cvs.texi(,6067) @cindex Merging a file cvs.texi(,6068) @cindex Update, introduction cvs.texi(,6069) cvs.texi(,6070) When you want to update or merge a file, use the @code{update} cvs.texi(,6071) command. For files that are not up to date this is roughly equivalent cvs.texi(,6072) to a @code{checkout} command: the newest revision of the file is cvs.texi(,6073) extracted from the repository and put in your working directory. cvs.texi(,6074) cvs.texi(,6075) Your modifications to a file are never lost when you cvs.texi(,6076) use @code{update}. If no newer revision exists, cvs.texi(,6077) running @code{update} has no effect. If you have cvs.texi(,6078) edited the file, and a newer revision is available, cvs.texi(,6079) @sc{cvs} will merge all changes into your working copy. cvs.texi(,6080) cvs.texi(,6081) For instance, imagine that you checked out revision 1.4 and started cvs.texi(,6082) editing it. In the meantime someone else committed revision 1.5, and cvs.texi(,6083) shortly after that revision 1.6. If you run @code{update} on the file cvs.texi(,6084) now, @sc{cvs} will incorporate all changes between revision 1.4 and 1.6 into cvs.texi(,6085) your file. cvs.texi(,6086) cvs.texi(,6087) @cindex Overlap cvs.texi(,6088) If any of the changes between 1.4 and 1.6 were made too cvs.texi(,6089) close to any of the changes you have made, an cvs.texi(,6090) @dfn{overlap} occurs. In such cases a warning is cvs.texi(,6091) printed, and the resulting file includes both cvs.texi(,6092) versions of the lines that overlap, delimited by cvs.texi(,6093) special markers. cvs.texi(,6094) @xref{update}, for a complete description of the cvs.texi(,6095) @code{update} command. cvs.texi(,6096) cvs.texi(,6097) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,6098) @node Conflicts example cvs.texi(,6099) @section Conflicts example cvs.texi(,6100) @cindex Merge, an example cvs.texi(,6101) @cindex Example of merge cvs.texi(,6102) @cindex driver.c (merge example) cvs.texi(,6103) cvs.texi(,6104) Suppose revision 1.4 of @file{driver.c} contains this: cvs.texi(,6105) cvs.texi(,6106) @example cvs.texi(,6107) #include cvs.texi(,6108) cvs.texi(,6109) void main() cvs.texi(,6110) @{ cvs.texi(,6111) parse(); cvs.texi(,6112) if (nerr == 0) cvs.texi(,6113) gencode(); cvs.texi(,6114) else cvs.texi(,6115) fprintf(stderr, "No code generated.\n"); cvs.texi(,6116) exit(nerr == 0 ? 0 : 1); cvs.texi(,6117) @} cvs.texi(,6118) @end example cvs.texi(,6119) cvs.texi(,6120) @noindent cvs.texi(,6121) Revision 1.6 of @file{driver.c} contains this: cvs.texi(,6122) cvs.texi(,6123) @example cvs.texi(,6124) #include cvs.texi(,6125) cvs.texi(,6126) int main(int argc, cvs.texi(,6127) char **argv) cvs.texi(,6128) @{ cvs.texi(,6129) parse(); cvs.texi(,6130) if (argc != 1) cvs.texi(,6131) @{ cvs.texi(,6132) fprintf(stderr, "tc: No args expected.\n"); cvs.texi(,6133) exit(1); cvs.texi(,6134) @} cvs.texi(,6135) if (nerr == 0) cvs.texi(,6136) gencode(); cvs.texi(,6137) else cvs.texi(,6138) fprintf(stderr, "No code generated.\n"); cvs.texi(,6139) exit(!!nerr); cvs.texi(,6140) @} cvs.texi(,6141) @end example cvs.texi(,6142) cvs.texi(,6143) @noindent cvs.texi(,6144) Your working copy of @file{driver.c}, based on revision cvs.texi(,6145) 1.4, contains this before you run @samp{cvs update}: cvs.texi(,6146) @c -- Really include "cvs"? cvs.texi(,6147) cvs.texi(,6148) @example cvs.texi(,6149) #include cvs.texi(,6150) #include cvs.texi(,6151) cvs.texi(,6152) void main() cvs.texi(,6153) @{ cvs.texi(,6154) init_scanner(); cvs.texi(,6155) parse(); cvs.texi(,6156) if (nerr == 0) cvs.texi(,6157) gencode(); cvs.texi(,6158) else cvs.texi(,6159) fprintf(stderr, "No code generated.\n"); cvs.texi(,6160) exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE); cvs.texi(,6161) @} cvs.texi(,6162) @end example cvs.texi(,6163) cvs.texi(,6164) @noindent cvs.texi(,6165) You run @samp{cvs update}: cvs.texi(,6166) @c -- Really include "cvs"? cvs.texi(,6167) cvs.texi(,6168) @example cvs.texi(,6169) $ cvs update driver.c cvs.texi(,6170) RCS file: /usr/local/cvsroot/yoyodyne/tc/driver.c,v cvs.texi(,6171) retrieving revision 1.4 cvs.texi(,6172) retrieving revision 1.6 cvs.texi(,6173) Merging differences between 1.4 and 1.6 into driver.c cvs.texi(,6174) rcsmerge warning: overlaps during merge cvs.texi(,6175) cvs update: conflicts found in driver.c cvs.texi(,6176) C driver.c cvs.texi(,6177) @end example cvs.texi(,6178) cvs.texi(,6179) @noindent cvs.texi(,6180) @cindex Conflicts (merge example) cvs.texi(,6181) @sc{cvs} tells you that there were some conflicts. cvs.texi(,6182) Your original working file is saved unmodified in cvs.texi(,6183) @file{.#driver.c.1.4}. The new version of cvs.texi(,6184) @file{driver.c} contains this: cvs.texi(,6185) cvs.texi(,6186) @example cvs.texi(,6187) #include cvs.texi(,6188) #include cvs.texi(,6189) cvs.texi(,6190) int main(int argc, cvs.texi(,6191) char **argv) cvs.texi(,6192) @{ cvs.texi(,6193) init_scanner(); cvs.texi(,6194) parse(); cvs.texi(,6195) if (argc != 1) cvs.texi(,6196) @{ cvs.texi(,6197) fprintf(stderr, "tc: No args expected.\n"); cvs.texi(,6198) exit(1); cvs.texi(,6199) @} cvs.texi(,6200) if (nerr == 0) cvs.texi(,6201) gencode(); cvs.texi(,6202) else cvs.texi(,6203) fprintf(stderr, "No code generated.\n"); cvs.texi(,6204) @asis{}<<<<<<< driver.c cvs.texi(,6205) exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE); cvs.texi(,6206) @asis{}======= cvs.texi(,6207) exit(!!nerr); cvs.texi(,6208) @asis{}>>>>>>> 1.6 cvs.texi(,6209) @} cvs.texi(,6210) @end example cvs.texi(,6211) cvs.texi(,6212) @noindent cvs.texi(,6213) @cindex Markers, conflict cvs.texi(,6214) @cindex Conflict markers cvs.texi(,6215) @cindex <<<<<<< cvs.texi(,6216) @cindex >>>>>>> cvs.texi(,6217) @cindex ======= cvs.texi(,6218) cvs.texi(,6219) Note how all non-overlapping modifications are incorporated in your working cvs.texi(,6220) copy, and that the overlapping section is clearly marked with cvs.texi(,6221) @samp{<<<<<<<}, @samp{=======} and @samp{>>>>>>>}. cvs.texi(,6222) cvs.texi(,6223) @cindex Resolving a conflict cvs.texi(,6224) @cindex Conflict resolution cvs.texi(,6225) You resolve the conflict by editing the file, removing the markers and cvs.texi(,6226) the erroneous line. Suppose you end up with this file: cvs.texi(,6227) @c -- Add xref to the pcl-cvs manual when it talks cvs.texi(,6228) @c -- about this. cvs.texi(,6229) @example cvs.texi(,6230) #include cvs.texi(,6231) #include cvs.texi(,6232) cvs.texi(,6233) int main(int argc, cvs.texi(,6234) char **argv) cvs.texi(,6235) @{ cvs.texi(,6236) init_scanner(); cvs.texi(,6237) parse(); cvs.texi(,6238) if (argc != 1) cvs.texi(,6239) @{ cvs.texi(,6240) fprintf(stderr, "tc: No args expected.\n"); cvs.texi(,6241) exit(1); cvs.texi(,6242) @} cvs.texi(,6243) if (nerr == 0) cvs.texi(,6244) gencode(); cvs.texi(,6245) else cvs.texi(,6246) fprintf(stderr, "No code generated.\n"); cvs.texi(,6247) exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE); cvs.texi(,6248) @} cvs.texi(,6249) @end example cvs.texi(,6250) cvs.texi(,6251) @noindent cvs.texi(,6252) You can now go ahead and commit this as revision 1.7. cvs.texi(,6253) cvs.texi(,6254) @example cvs.texi(,6255) $ cvs commit -m "Initialize scanner. Use symbolic exit values." driver.c cvs.texi(,6256) Checking in driver.c; cvs.texi(,6257) /usr/local/cvsroot/yoyodyne/tc/driver.c,v <-- driver.c cvs.texi(,6258) new revision: 1.7; previous revision: 1.6 cvs.texi(,6259) done cvs.texi(,6260) @end example cvs.texi(,6261) cvs.texi(,6262) For your protection, @sc{cvs} will refuse to check in a cvs.texi(,6263) file if a conflict occurred and you have not resolved cvs.texi(,6264) the conflict. Currently to resolve a conflict, you cvs.texi(,6265) must change the timestamp on the file. In previous cvs.texi(,6266) versions of @sc{cvs}, you also needed to cvs.texi(,6267) insure that the file contains no conflict markers. cvs.texi(,6268) Because cvs.texi(,6269) your file may legitimately contain conflict markers (that cvs.texi(,6270) is, occurrences of @samp{>>>>>>> } at the start of a cvs.texi(,6271) line that don't mark a conflict), the current cvs.texi(,6272) version of @sc{cvs} will print a warning and proceed to cvs.texi(,6273) check in the file. cvs.texi(,6274) @c The old behavior was really icky; the only way out cvs.texi(,6275) @c was to start hacking on cvs.texi(,6276) @c the @code{CVS/Entries} file or other such workarounds. cvs.texi(,6277) @c cvs.texi(,6278) @c If the timestamp thing isn't considered nice enough, cvs.texi(,6279) @c maybe there should be a "cvs resolved" command cvs.texi(,6280) @c which clears the conflict indication. For a nice user cvs.texi(,6281) @c interface, this should be invoked by an interactive cvs.texi(,6282) @c merge tool like emerge rather than by the user cvs.texi(,6283) @c directly--such a tool can verify that the user has cvs.texi(,6284) @c really dealt with each conflict. cvs.texi(,6285) cvs.texi(,6286) @cindex emerge cvs.texi(,6287) If you use release 1.04 or later of pcl-cvs (a @sc{gnu} cvs.texi(,6288) Emacs front-end for @sc{cvs}) you can use an Emacs cvs.texi(,6289) package called emerge to help you resolve conflicts. cvs.texi(,6290) See the documentation for pcl-cvs. cvs.texi(,6291) cvs.texi(,6292) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,6293) @node Informing others cvs.texi(,6294) @section Informing others about commits cvs.texi(,6295) @cindex Informing others cvs.texi(,6296) @cindex Spreading information cvs.texi(,6297) @cindex Mail, automatic mail on commit cvs.texi(,6298) cvs.texi(,6299) It is often useful to inform others when you commit a cvs.texi(,6300) new revision of a file. The @samp{-i} option of the cvs.texi(,6301) @file{modules} file, or the @file{loginfo} file, can be cvs.texi(,6302) used to automate this process. @xref{modules}. cvs.texi(,6303) @xref{loginfo}. You can use these features of @sc{cvs} cvs.texi(,6304) to, for instance, instruct @sc{cvs} to mail a cvs.texi(,6305) message to all developers, or post a message to a local cvs.texi(,6306) newsgroup. cvs.texi(,6307) @c -- More text would be nice here. cvs.texi(,6308) cvs.texi(,6309) @node Concurrency cvs.texi(,6310) @section Several developers simultaneously attempting to run CVS cvs.texi(,6311) cvs.texi(,6312) @cindex Locks, cvs, introduction cvs.texi(,6313) @c For a discussion of *why* CVS creates locks, see cvs.texi(,6314) @c the comment at the start of src/lock.c cvs.texi(,6315) If several developers try to run @sc{cvs} at the same cvs.texi(,6316) time, one may get the following message: cvs.texi(,6317) cvs.texi(,6318) @example cvs.texi(,6319) [11:43:23] waiting for bach's lock in /usr/local/cvsroot/foo cvs.texi(,6320) @end example cvs.texi(,6321) cvs.texi(,6322) @cindex #cvs.rfl, removing cvs.texi(,6323) @cindex #cvs.wfl, removing cvs.texi(,6324) @cindex #cvs.lock, removing cvs.texi(,6325) @sc{cvs} will try again every 30 seconds, and either cvs.texi(,6326) continue with the operation or print the message again, cvs.texi(,6327) if it still needs to wait. If a lock seems to stick cvs.texi(,6328) around for an undue amount of time, find the person cvs.texi(,6329) holding the lock and ask them about the cvs command cvs.texi(,6330) they are running. If they aren't running a cvs cvs.texi(,6331) command, look in the repository directory mentioned in cvs.texi(,6332) the message and remove files which they own whose names cvs.texi(,6333) start with @file{#cvs.rfl}, cvs.texi(,6334) @file{#cvs.wfl}, or @file{#cvs.lock}. cvs.texi(,6335) cvs.texi(,6336) Note that these locks are to protect @sc{cvs}'s cvs.texi(,6337) internal data structures and have no relationship to cvs.texi(,6338) the word @dfn{lock} in the sense used by cvs.texi(,6339) @sc{rcs}---which refers to reserved checkouts cvs.texi(,6340) (@pxref{Multiple developers}). cvs.texi(,6341) cvs.texi(,6342) Any number of people can be reading from a given cvs.texi(,6343) repository at a time; only when someone is writing do cvs.texi(,6344) the locks prevent other people from reading or writing. cvs.texi(,6345) cvs.texi(,6346) @cindex Atomic transactions, lack of cvs.texi(,6347) @cindex Transactions, atomic, lack of cvs.texi(,6348) @c the following talks about what one might call commit/update cvs.texi(,6349) @c atomicity. cvs.texi(,6350) @c Probably also should say something about cvs.texi(,6351) @c commit/commit atomicity, that is, "An update will cvs.texi(,6352) @c not get partial versions of more than one commit". cvs.texi(,6353) @c CVS currently has this property and I guess we can cvs.texi(,6354) @c make it a documented feature. cvs.texi(,6355) @c For example one person commits cvs.texi(,6356) @c a/one.c and b/four.c and another commits a/two.c and cvs.texi(,6357) @c b/three.c. Then an update cannot get the new a/one.c cvs.texi(,6358) @c and a/two.c and the old b/four.c and b/three.c. cvs.texi(,6359) One might hope for the following property: cvs.texi(,6360) cvs.texi(,6361) @quotation cvs.texi(,6362) If someone commits some changes in one cvs command, cvs.texi(,6363) then an update by someone else will either get all the cvs.texi(,6364) changes, or none of them. cvs.texi(,6365) @end quotation cvs.texi(,6366) cvs.texi(,6367) @noindent cvs.texi(,6368) but @sc{cvs} does @emph{not} have this property. For cvs.texi(,6369) example, given the files cvs.texi(,6370) cvs.texi(,6371) @example cvs.texi(,6372) a/one.c cvs.texi(,6373) a/two.c cvs.texi(,6374) b/three.c cvs.texi(,6375) b/four.c cvs.texi(,6376) @end example cvs.texi(,6377) cvs.texi(,6378) @noindent cvs.texi(,6379) if someone runs cvs.texi(,6380) cvs.texi(,6381) @example cvs.texi(,6382) cvs ci a/two.c b/three.c cvs.texi(,6383) @end example cvs.texi(,6384) cvs.texi(,6385) @noindent cvs.texi(,6386) and someone else runs @code{cvs update} at the same cvs.texi(,6387) time, the person running @code{update} might get only cvs.texi(,6388) the change to @file{b/three.c} and not the change to cvs.texi(,6389) @file{a/two.c}. cvs.texi(,6390) cvs.texi(,6391) @node Watches cvs.texi(,6392) @section Mechanisms to track who is editing files cvs.texi(,6393) @cindex Watches cvs.texi(,6394) cvs.texi(,6395) For many groups, use of @sc{cvs} in its default mode is cvs.texi(,6396) perfectly satisfactory. Users may sometimes go to cvs.texi(,6397) check in a modification only to find that another cvs.texi(,6398) modification has intervened, but they deal with it and cvs.texi(,6399) proceed with their check in. Other groups prefer to be cvs.texi(,6400) able to know who is editing what files, so that if two cvs.texi(,6401) people try to edit the same file they can choose to cvs.texi(,6402) talk about who is doing what when rather than be cvs.texi(,6403) surprised at check in time. The features in this cvs.texi(,6404) section allow such coordination, while retaining the cvs.texi(,6405) ability of two developers to edit the same file at the cvs.texi(,6406) same time. cvs.texi(,6407) cvs.texi(,6408) @c Some people might ask why CVS does not enforce the cvs.texi(,6409) @c rule on chmod, by requiring a cvs edit before a cvs cvs.texi(,6410) @c commit. The main reason is that it could always be cvs.texi(,6411) @c circumvented--one could edit the file, and cvs.texi(,6412) @c then when ready to check it in, do the cvs edit and put cvs.texi(,6413) @c in the new contents and do the cvs commit. One cvs.texi(,6414) @c implementation note: if we _do_ want to have cvs commit cvs.texi(,6415) @c require a cvs edit, we should store the state on cvs.texi(,6416) @c whether the cvs edit has occurred in the working cvs.texi(,6417) @c directory, rather than having the server try to keep cvs.texi(,6418) @c track of what working directories exist. cvs.texi(,6419) @c FIXME: should the above discussion be part of the cvs.texi(,6420) @c manual proper, somewhere, not just in a comment? cvs.texi(,6421) For maximum benefit developers should use @code{cvs cvs.texi(,6422) edit} (not @code{chmod}) to make files read-write to cvs.texi(,6423) edit them, and @code{cvs release} (not @code{rm}) to cvs.texi(,6424) discard a working directory which is no longer in use, cvs.texi(,6425) but @sc{cvs} is not able to enforce this behavior. cvs.texi(,6426) cvs.texi(,6427) @c I'm a little dissatisfied with this presentation, cvs.texi(,6428) @c because "watch on"/"edit"/"editors" are one set of cvs.texi(,6429) @c functionality, and "watch add"/"watchers" is another cvs.texi(,6430) @c which is somewhat orthogonal even though they interact in cvs.texi(,6431) @c various ways. But I think it might be cvs.texi(,6432) @c confusing to describe them separately (e.g. "watch cvs.texi(,6433) @c add" with loginfo). I don't know. cvs.texi(,6434) cvs.texi(,6435) @menu cvs.texi(,6436) * Setting a watch:: Telling CVS to watch certain files cvs.texi(,6437) * Getting Notified:: Telling CVS to notify you cvs.texi(,6438) * Editing files:: How to edit a file which is being watched cvs.texi(,6439) * Watch information:: Information about who is watching and editing cvs.texi(,6440) * Watches Compatibility:: Watches interact poorly with CVS 1.6 or earlier cvs.texi(,6441) @end menu cvs.texi(,6442) cvs.texi(,6443) @node Setting a watch cvs.texi(,6444) @subsection Telling CVS to watch certain files cvs.texi(,6445) cvs.texi(,6446) To enable the watch features, you first specify that cvs.texi(,6447) certain files are to be watched. cvs.texi(,6448) cvs.texi(,6449) @cindex watch on (subcommand) cvs.texi(,6450) @deffn Command {cvs watch on} [@code{-lR}] [@var{files}]@dots{} cvs.texi(,6451) cvs.texi(,6452) @cindex Read-only files, and watches cvs.texi(,6453) Specify that developers should run @code{cvs edit} cvs.texi(,6454) before editing @var{files}. @sc{cvs} will create working cvs.texi(,6455) copies of @var{files} read-only, to remind developers cvs.texi(,6456) to run the @code{cvs edit} command before working on cvs.texi(,6457) them. cvs.texi(,6458) cvs.texi(,6459) If @var{files} includes the name of a directory, @sc{cvs} cvs.texi(,6460) arranges to watch all files added to the corresponding cvs.texi(,6461) repository directory, and sets a default for files cvs.texi(,6462) added in the future; this allows the user to set cvs.texi(,6463) notification policies on a per-directory basis. The cvs.texi(,6464) contents of the directory are processed recursively, cvs.texi(,6465) unless the @code{-l} option is given. cvs.texi(,6466) The @code{-R} option can be used to force recursion if the @code{-l} cvs.texi(,6467) option is set in @file{~/.cvsrc} (@pxref{~/.cvsrc}). cvs.texi(,6468) cvs.texi(,6469) If @var{files} is omitted, it defaults to the current directory. cvs.texi(,6470) cvs.texi(,6471) @cindex watch off (subcommand) cvs.texi(,6472) @end deffn cvs.texi(,6473) cvs.texi(,6474) @deffn Command {cvs watch off} [@code{-lR}] [@var{files}]@dots{} cvs.texi(,6475) cvs.texi(,6476) Do not create @var{files} read-only on checkout; thus, cvs.texi(,6477) developers will not be reminded to use @code{cvs edit} cvs.texi(,6478) and @code{cvs unedit}. cvs.texi(,6486) cvs.texi(,6487) The @var{files} and options are processed as for @code{cvs cvs.texi(,6488) watch on}. cvs.texi(,6489) cvs.texi(,6490) @end deffn cvs.texi(,6491) cvs.texi(,6492) @node Getting Notified cvs.texi(,6493) @subsection Telling CVS to notify you cvs.texi(,6494) cvs.texi(,6495) You can tell @sc{cvs} that you want to receive cvs.texi(,6496) notifications about various actions taken on a file. cvs.texi(,6497) You can do this without using @code{cvs watch on} for cvs.texi(,6498) the file, but generally you will want to use @code{cvs cvs.texi(,6499) watch on}, to remind developers to use the @code{cvs edit} cvs.texi(,6500) command. cvs.texi(,6501) cvs.texi(,6502) @cindex watch add (subcommand) cvs.texi(,6503) @deffn Command {cvs watch add} [@code{-lR}] [@code{-a} @var{action}]@dots{} [@var{files}]@dots{} cvs.texi(,6504) cvs.texi(,6505) Add the current user to the list of people to receive notification of cvs.texi(,6506) work done on @var{files}. cvs.texi(,6507) cvs.texi(,6508) The @code{-a} option specifies what kinds of events @sc{cvs} should notify cvs.texi(,6509) the user about. @var{action} is one of the following: cvs.texi(,6510) cvs.texi(,6511) @table @code cvs.texi(,6512) cvs.texi(,6513) @item edit cvs.texi(,6514) Another user has applied the @code{cvs edit} command (described cvs.texi(,6515) below) to a watched file. cvs.texi(,6516) cvs.texi(,6517) @item commit cvs.texi(,6518) Another user has committed changes to one of the named @var{files}. cvs.texi(,6519) cvs.texi(,6520) @item unedit cvs.texi(,6521) Another user has abandoned editing a file (other than by committing changes). cvs.texi(,6522) They can do this in several ways, by: cvs.texi(,6523) cvs.texi(,6524) @itemize @bullet cvs.texi(,6525) cvs.texi(,6526) @item cvs.texi(,6527) applying the @code{cvs unedit} command (described below) to the file cvs.texi(,6528) cvs.texi(,6529) @item cvs.texi(,6530) applying the @code{cvs release} command (@pxref{release}) to the file's parent directory cvs.texi(,6531) (or recursively to a directory more than one level up) cvs.texi(,6532) cvs.texi(,6533) @item cvs.texi(,6534) deleting the file and allowing @code{cvs update} to recreate it cvs.texi(,6535) cvs.texi(,6536) @end itemize cvs.texi(,6537) cvs.texi(,6538) @item all cvs.texi(,6539) All of the above. cvs.texi(,6540) cvs.texi(,6541) @item none cvs.texi(,6542) None of the above. (This is useful with @code{cvs edit}, cvs.texi(,6543) described below.) cvs.texi(,6544) cvs.texi(,6545) @end table cvs.texi(,6546) cvs.texi(,6547) The @code{-a} option may appear more than once, or not at all. If cvs.texi(,6548) omitted, the action defaults to @code{all}. cvs.texi(,6549) cvs.texi(,6550) The @var{files} and options are processed as for cvs.texi(,6551) @code{cvs watch on}. cvs.texi(,6552) cvs.texi(,6553) @end deffn cvs.texi(,6554) cvs.texi(,6555) cvs.texi(,6556) @cindex watch remove (subcommand) cvs.texi(,6557) @deffn Command {cvs watch remove} [@code{-lR}] [@code{-a} @var{action}]@dots{} [@var{files}]@dots{} cvs.texi(,6558) cvs.texi(,6559) Remove a notification request established using @code{cvs watch add}; cvs.texi(,6560) the arguments are the same. If the @code{-a} option is present, only cvs.texi(,6561) watches for the specified actions are removed. cvs.texi(,6562) cvs.texi(,6563) @end deffn cvs.texi(,6564) cvs.texi(,6565) @cindex notify (admin file) cvs.texi(,6566) When the conditions exist for notification, @sc{cvs} cvs.texi(,6567) calls the @file{notify} administrative file. Edit cvs.texi(,6568) @file{notify} as one edits the other administrative cvs.texi(,6569) files (@pxref{Intro administrative files}). This cvs.texi(,6570) file follows the usual conventions for administrative cvs.texi(,6571) files (@pxref{syntax}), where each line is a regular cvs.texi(,6572) expression followed by a command to execute. The cvs.texi(,6573) command should contain a single occurrence of @samp{%s} cvs.texi(,6574) which will be replaced by the user to notify; the rest cvs.texi(,6575) of the information regarding the notification will be cvs.texi(,6576) supplied to the command on standard input. The cvs.texi(,6577) standard thing to put in the @code{notify} file is the cvs.texi(,6578) single line: cvs.texi(,6579) cvs.texi(,6580) @example cvs.texi(,6581) ALL mail %s -s "CVS notification" cvs.texi(,6582) @end example cvs.texi(,6583) cvs.texi(,6584) @noindent cvs.texi(,6585) This causes users to be notified by electronic mail. cvs.texi(,6586) @c FIXME: should it be this hard to set up this cvs.texi(,6587) @c behavior (and the result when one fails to do so, cvs.texi(,6588) @c silent failure to notify, so non-obvious)? Should cvs.texi(,6589) @c CVS give a warning if no line in notify matches (and cvs.texi(,6590) @c document the use of "DEFAULT :" for the case where cvs.texi(,6591) @c skipping the notification is indeed desired)? cvs.texi(,6592) cvs.texi(,6593) @cindex users (admin file) cvs.texi(,6594) Note that if you set this up in the straightforward cvs.texi(,6595) way, users receive notifications on the server machine. cvs.texi(,6596) One could of course write a @file{notify} script which cvs.texi(,6597) directed notifications elsewhere, but to make this cvs.texi(,6598) easy, @sc{cvs} allows you to associate a notification cvs.texi(,6599) address for each user. To do so create a file cvs.texi(,6600) @file{users} in @file{CVSROOT} with a line for each cvs.texi(,6601) user in the format @var{user}:@var{value}. Then cvs.texi(,6602) instead of passing the name of the user to be notified cvs.texi(,6603) to @file{notify}, @sc{cvs} will pass the @var{value} cvs.texi(,6604) (normally an email address on some other machine). cvs.texi(,6605) cvs.texi(,6606) @sc{cvs} does not notify you for your own changes. cvs.texi(,6607) Currently this check is done based on whether the user cvs.texi(,6608) name of the person taking the action which triggers cvs.texi(,6609) notification matches the user name of the person cvs.texi(,6610) getting notification. In fact, in general, the watches cvs.texi(,6611) features only track one edit by each user. It probably cvs.texi(,6612) would be more useful if watches tracked each working cvs.texi(,6613) directory separately, so this behavior might be worth cvs.texi(,6614) changing. cvs.texi(,6615) @c "behavior might be worth changing" is an effort to cvs.texi(,6616) @c point to future directions while also not promising cvs.texi(,6617) @c that "they" (as in "why don't they fix CVS to....") cvs.texi(,6618) @c will do this. cvs.texi(,6619) @c one implementation issue is identifying whether a cvs.texi(,6620) @c working directory is same or different. Comparing cvs.texi(,6621) @c pathnames/hostnames is hopeless, but having the server cvs.texi(,6622) @c supply a serial number which the client stores in the cvs.texi(,6623) @c CVS directory as a magic cookie should work. cvs.texi(,6624) cvs.texi(,6625) @node Editing files cvs.texi(,6626) @subsection How to edit a file which is being watched cvs.texi(,6627) cvs.texi(,6628) @cindex Checkout, as term for getting ready to edit cvs.texi(,6629) Since a file which is being watched is checked out cvs.texi(,6630) read-only, you cannot simply edit it. To make it cvs.texi(,6631) read-write, and inform others that you are planning to cvs.texi(,6632) edit it, use the @code{cvs edit} command. Some systems cvs.texi(,6633) call this a @dfn{checkout}, but @sc{cvs} uses that term cvs.texi(,6634) for obtaining a copy of the sources (@pxref{Getting the cvs.texi(,6635) source}), an operation which those systems call a cvs.texi(,6636) @dfn{get} or a @dfn{fetch}. cvs.texi(,6637) @c Issue to think about: should we transition CVS cvs.texi(,6638) @c towards the "get" terminology? "cvs get" is already a cvs.texi(,6639) @c synonym for "cvs checkout" and that section of the cvs.texi(,6640) @c manual refers to "Getting the source". If this is cvs.texi(,6641) @c done, needs to be done gingerly (for example, we should cvs.texi(,6642) @c still accept "checkout" in .cvsrc files indefinitely cvs.texi(,6643) @c even if the CVS's messages are changed from "cvs checkout: " cvs.texi(,6644) @c to "cvs get: "). cvs.texi(,6645) @c There is a concern about whether "get" is not as cvs.texi(,6646) @c good for novices because it is a more general term cvs.texi(,6647) @c than "checkout" (and thus arguably harder to assign cvs.texi(,6648) @c a technical meaning for). cvs.texi(,6649) cvs.texi(,6650) @cindex edit (subcommand) cvs.texi(,6651) @deffn Command {cvs edit} [@code{-lR}] [@code{-a} @var{action}]@dots{} [@var{files}]@dots{} cvs.texi(,6652) cvs.texi(,6653) Prepare to edit the working files @var{files}. @sc{cvs} makes the cvs.texi(,6654) @var{files} read-write, and notifies users who have requested cvs.texi(,6655) @code{edit} notification for any of @var{files}. cvs.texi(,6656) cvs.texi(,6657) The @code{cvs edit} command accepts the same options as the cvs.texi(,6658) @code{cvs watch add} command, and establishes a temporary watch for the cvs.texi(,6659) user on @var{files}; @sc{cvs} will remove the watch when @var{files} are cvs.texi(,6660) @code{unedit}ed or @code{commit}ted. If the user does not wish to cvs.texi(,6661) receive notifications, she should specify @code{-a none}. cvs.texi(,6662) cvs.texi(,6663) The @var{files} and the options are processed as for the @code{cvs cvs.texi(,6664) watch} commands. cvs.texi(,6665) cvs.texi(,6675) cvs.texi(,6676) @end deffn cvs.texi(,6677) cvs.texi(,6678) Normally when you are done with a set of changes, you cvs.texi(,6679) use the @code{cvs commit} command, which checks in your cvs.texi(,6680) changes and returns the watched files to their usual cvs.texi(,6681) read-only state. But if you instead decide to abandon cvs.texi(,6682) your changes, or not to make any changes, you can use cvs.texi(,6683) the @code{cvs unedit} command. cvs.texi(,6684) cvs.texi(,6685) @cindex unedit (subcommand) cvs.texi(,6686) @cindex Abandoning work cvs.texi(,6687) @cindex Reverting to repository version cvs.texi(,6688) @deffn Command {cvs unedit} [@code{-lR}] [@var{files}]@dots{} cvs.texi(,6689) cvs.texi(,6690) Abandon work on the working files @var{files}, and revert them to the cvs.texi(,6691) repository versions on which they are based. @sc{cvs} makes those cvs.texi(,6692) @var{files} read-only for which users have requested notification using cvs.texi(,6693) @code{cvs watch on}. @sc{cvs} notifies users who have requested @code{unedit} cvs.texi(,6694) notification for any of @var{files}. cvs.texi(,6695) cvs.texi(,6696) The @var{files} and options are processed as for the cvs.texi(,6697) @code{cvs watch} commands. cvs.texi(,6698) cvs.texi(,6699) If watches are not in use, the @code{unedit} command cvs.texi(,6700) probably does not work, and the way to revert to the cvs.texi(,6701) repository version is with the command @code{cvs update -C file} cvs.texi(,6702) (@pxref{update}). cvs.texi(,6703) The meaning is cvs.texi(,6704) not precisely the same; the latter may also cvs.texi(,6705) bring in some changes which have been made in the cvs.texi(,6706) repository since the last time you updated. cvs.texi(,6707) @c It would be a useful enhancement to CVS to make cvs.texi(,6708) @c unedit work in the non-watch case as well. cvs.texi(,6709) @end deffn cvs.texi(,6710) cvs.texi(,6711) When using client/server @sc{cvs}, you can use the cvs.texi(,6712) @code{cvs edit} and @code{cvs unedit} commands even if cvs.texi(,6713) @sc{cvs} is unable to successfully communicate with the cvs.texi(,6714) server; the notifications will be sent upon the next cvs.texi(,6715) successful @sc{cvs} command. cvs.texi(,6716) cvs.texi(,6717) @node Watch information cvs.texi(,6718) @subsection Information about who is watching and editing cvs.texi(,6719) cvs.texi(,6720) @cindex watchers (subcommand) cvs.texi(,6721) @deffn Command {cvs watchers} [@code{-lR}] [@var{files}]@dots{} cvs.texi(,6722) cvs.texi(,6723) List the users currently watching changes to @var{files}. The report cvs.texi(,6724) includes the files being watched, and the mail address of each watcher. cvs.texi(,6725) cvs.texi(,6726) The @var{files} and options are processed as for the cvs.texi(,6727) @code{cvs watch} commands. cvs.texi(,6728) cvs.texi(,6729) @end deffn cvs.texi(,6730) cvs.texi(,6731) cvs.texi(,6732) @cindex editors (subcommand) cvs.texi(,6733) @deffn Command {cvs editors} [@code{-lR}] [@var{files}]@dots{} cvs.texi(,6734) cvs.texi(,6735) List the users currently working on @var{files}. The report cvs.texi(,6736) includes the mail address of each user, the time when the user began cvs.texi(,6737) working with the file, and the host and path of the working directory cvs.texi(,6738) containing the file. cvs.texi(,6739) cvs.texi(,6740) The @var{files} and options are processed as for the cvs.texi(,6741) @code{cvs watch} commands. cvs.texi(,6742) cvs.texi(,6743) @end deffn cvs.texi(,6744) cvs.texi(,6745) @node Watches Compatibility cvs.texi(,6746) @subsection Using watches with old versions of CVS cvs.texi(,6747) cvs.texi(,6748) @cindex CVS 1.6, and watches cvs.texi(,6749) If you use the watch features on a repository, it cvs.texi(,6750) creates @file{CVS} directories in the repository and cvs.texi(,6751) stores the information about watches in that directory. cvs.texi(,6752) If you attempt to use @sc{cvs} 1.6 or earlier with the cvs.texi(,6753) repository, you get an error message such as the cvs.texi(,6754) following (all on one line): cvs.texi(,6755) cvs.texi(,6756) @example cvs.texi(,6757) cvs update: cannot open CVS/Entries for reading: cvs.texi(,6758) No such file or directory cvs.texi(,6759) @end example cvs.texi(,6760) cvs.texi(,6761) @noindent cvs.texi(,6762) and your operation will likely be aborted. To use the cvs.texi(,6763) watch features, you must upgrade all copies of @sc{cvs} cvs.texi(,6764) which use that repository in local or server mode. If cvs.texi(,6765) you cannot upgrade, use the @code{watch off} and cvs.texi(,6766) @code{watch remove} commands to remove all watches, and cvs.texi(,6767) that will restore the repository to a state which cvs.texi(,6768) @sc{cvs} 1.6 can cope with. cvs.texi(,6769) cvs.texi(,6770) @node Choosing a model cvs.texi(,6771) @section Choosing between reserved or unreserved checkouts cvs.texi(,6772) @cindex Choosing, reserved or unreserved checkouts cvs.texi(,6773) cvs.texi(,6774) Reserved and unreserved checkouts each have pros and cvs.texi(,6775) cons. Let it be said that a lot of this is a matter of cvs.texi(,6776) opinion or what works given different groups' working cvs.texi(,6777) styles, but here is a brief description of some of the cvs.texi(,6778) issues. There are many ways to organize a team of cvs.texi(,6779) developers. @sc{cvs} does not try to enforce a certain cvs.texi(,6780) organization. It is a tool that can be used in several cvs.texi(,6781) ways. cvs.texi(,6782) cvs.texi(,6783) Reserved checkouts can be very counter-productive. If cvs.texi(,6784) two persons want to edit different parts of a file, cvs.texi(,6785) there may be no reason to prevent either of them from cvs.texi(,6786) doing so. Also, it is common for someone to take out a cvs.texi(,6787) lock on a file, because they are planning to edit it, cvs.texi(,6788) but then forget to release the lock. cvs.texi(,6789) cvs.texi(,6790) @c "many groups"? specifics? cites to papers on this? cvs.texi(,6791) @c some way to weasel-word it a bit more so we don't cvs.texi(,6792) @c need facts :-)? cvs.texi(,6793) People, especially people who are familiar with cvs.texi(,6794) reserved checkouts, often wonder how often conflicts cvs.texi(,6795) occur if unreserved checkouts are used, and how cvs.texi(,6796) difficult they are to resolve. The experience with cvs.texi(,6797) many groups is that they occur rarely and usually are cvs.texi(,6798) relatively straightforward to resolve. cvs.texi(,6799) cvs.texi(,6800) The rarity of serious conflicts may be surprising, until one realizes cvs.texi(,6801) that they occur only when two developers disagree on the proper design cvs.texi(,6802) for a given section of code; such a disagreement suggests that the cvs.texi(,6803) team has not been communicating properly in the first place. In order cvs.texi(,6804) to collaborate under @emph{any} source management regimen, developers cvs.texi(,6805) must agree on the general design of the system; given this agreement, cvs.texi(,6806) overlapping changes are usually straightforward to merge. cvs.texi(,6807) cvs.texi(,6808) In some cases unreserved checkouts are clearly cvs.texi(,6809) inappropriate. If no merge tool exists for the kind of cvs.texi(,6810) file you are managing (for example word processor files cvs.texi(,6811) or files edited by Computer Aided Design programs), and cvs.texi(,6812) it is not desirable to change to a program which uses a cvs.texi(,6813) mergeable data format, then resolving conflicts is cvs.texi(,6814) going to be unpleasant enough that you generally will cvs.texi(,6815) be better off to simply avoid the conflicts instead, by cvs.texi(,6816) using reserved checkouts. cvs.texi(,6817) cvs.texi(,6818) The watches features described above in @ref{Watches} cvs.texi(,6819) can be considered to be an intermediate model between cvs.texi(,6820) reserved checkouts and unreserved checkouts. When you cvs.texi(,6821) go to edit a file, it is possible to find out who else cvs.texi(,6822) is editing it. And rather than having the system cvs.texi(,6823) simply forbid both people editing the file, it can tell cvs.texi(,6824) you what the situation is and let you figure out cvs.texi(,6825) whether it is a problem in that particular case or not. cvs.texi(,6826) Therefore, for some groups it can be considered the cvs.texi(,6827) best of both the reserved checkout and unreserved cvs.texi(,6828) checkout worlds. cvs.texi(,6829) cvs.texi(,6830) @c --------------------------------------------------------------------- cvs.texi(,6831) @node Revision management cvs.texi(,6832) @chapter Revision management cvs.texi(,6833) @cindex Revision management cvs.texi(,6834) cvs.texi(,6835) @c -- This chapter could be expanded a lot. cvs.texi(,6836) @c -- Experiences are very welcome! cvs.texi(,6837) cvs.texi(,6838) If you have read this far, you probably have a pretty cvs.texi(,6839) good grasp on what @sc{cvs} can do for you. This cvs.texi(,6840) chapter talks a little about things that you still have cvs.texi(,6841) to decide. cvs.texi(,6842) cvs.texi(,6843) If you are doing development on your own using @sc{cvs} cvs.texi(,6844) you could probably skip this chapter. The questions cvs.texi(,6845) this chapter takes up become more important when more cvs.texi(,6846) than one person is working in a repository. cvs.texi(,6847) cvs.texi(,6848) @menu cvs.texi(,6849) * When to commit:: Some discussion on the subject cvs.texi(,6850) @end menu cvs.texi(,6851) cvs.texi(,6852) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,6853) @node When to commit cvs.texi(,6854) @section When to commit? cvs.texi(,6855) @cindex When to commit cvs.texi(,6856) @cindex Committing, when to cvs.texi(,6857) @cindex Policy cvs.texi(,6858) cvs.texi(,6859) Your group should decide which policy to use regarding cvs.texi(,6860) commits. Several policies are possible, and as your cvs.texi(,6861) experience with @sc{cvs} grows you will probably find cvs.texi(,6862) out what works for you. cvs.texi(,6863) cvs.texi(,6864) If you commit files too quickly you might commit files cvs.texi(,6865) that do not even compile. If your partner updates his cvs.texi(,6866) working sources to include your buggy file, he will be cvs.texi(,6867) unable to compile the code. On the other hand, other cvs.texi(,6868) persons will not be able to benefit from the cvs.texi(,6869) improvements you make to the code if you commit very cvs.texi(,6870) seldom, and conflicts will probably be more common. cvs.texi(,6871) cvs.texi(,6872) It is common to only commit files after making sure cvs.texi(,6873) that they can be compiled. Some sites require that the cvs.texi(,6874) files pass a test suite. Policies like this can be cvs.texi(,6875) enforced using the commitinfo file cvs.texi(,6876) (@pxref{commitinfo}), but you should think twice before cvs.texi(,6877) you enforce such a convention. By making the cvs.texi(,6878) development environment too controlled it might become cvs.texi(,6879) too regimented and thus counter-productive to the real cvs.texi(,6880) goal, which is to get software written. cvs.texi(,6881) cvs.texi(,6882) @c --------------------------------------------------------------------- cvs.texi(,6883) @node Keyword substitution cvs.texi(,6884) @chapter Keyword substitution cvs.texi(,6885) @cindex Keyword substitution cvs.texi(,6886) @cindex Keyword expansion cvs.texi(,6887) @cindex Identifying files cvs.texi(,6888) cvs.texi(,6889) @comment Be careful when editing this chapter. cvs.texi(,6890) @comment Remember that this file is kept under cvs.texi(,6891) @comment version control, so we must not accidentally cvs.texi(,6892) @comment include a valid keyword in the running text. cvs.texi(,6893) cvs.texi(,6894) As long as you edit source files inside a working cvs.texi(,6895) directory you can always find out the state of cvs.texi(,6896) your files via @samp{cvs status} and @samp{cvs log}. cvs.texi(,6897) But as soon as you export the files from your cvs.texi(,6898) development environment it becomes harder to identify cvs.texi(,6899) which revisions they are. cvs.texi(,6900) cvs.texi(,6901) @sc{cvs} can use a mechanism known as @dfn{keyword cvs.texi(,6902) substitution} (or @dfn{keyword expansion}) to help cvs.texi(,6903) identifying the files. Embedded strings of the form cvs.texi(,6904) @code{$@var{keyword}$} and cvs.texi(,6905) @code{$@var{keyword}:@dots{}$} in a file are replaced cvs.texi(,6906) with strings of the form cvs.texi(,6907) @code{$@var{keyword}:@var{value}$} whenever you obtain cvs.texi(,6908) a new revision of the file. cvs.texi(,6909) cvs.texi(,6910) @menu cvs.texi(,6911) * Keyword list:: Keywords cvs.texi(,6912) * Using keywords:: Using keywords cvs.texi(,6913) * Avoiding substitution:: Avoiding substitution cvs.texi(,6914) * Substitution modes:: Substitution modes cvs.texi(,6915) * Configuring keyword expansion:: Configuring keyword expansion cvs.texi(splitrcskeyword,6916) * Log keyword:: Problems with the $@i{}Log$ keyword. cvs.texi(,6917) @end menu cvs.texi(,6918) cvs.texi(,6919) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,6920) @node Keyword list cvs.texi(,6921) @section Keyword List cvs.texi(,6922) @cindex Keyword List cvs.texi(,6923) cvs.texi(,6924) @c FIXME: need some kind of example here I think, cvs.texi(,6925) @c perhaps in a cvs.texi(,6926) @c "Keyword intro" node. The intro in the "Keyword cvs.texi(,6927) @c substitution" node itself seems OK, but to launch cvs.texi(,6928) @c into a list of the keywords somehow seems too abrupt. cvs.texi(,6929) cvs.texi(,6930) This is a list of the keywords: cvs.texi(,6931) cvs.texi(,6932) @table @code cvs.texi(,6933) @cindex Author keyword cvs.texi(splitrcskeyword,6934) @item $@i{}Author$ cvs.texi(,6935) The login name of the user who checked in the revision. cvs.texi(,6936) cvs.texi(,6937) @cindex CVSHeader keyword cvs.texi(splitrcskeyword,6938) @item $@i{}CVSHeader cvs.texi(splitrcskeyword,6939) A standard header (similar to $@i{}Header$, but with cvs.texi(,6940) the CVS root stripped off). It contains the relative cvs.texi(,6941) pathname of the @sc{rcs} file to the CVS root, the cvs.texi(,6942) revision number, the date (UTC), the author, the state, cvs.texi(,6943) and the locker (if locked). Files will normally never cvs.texi(,6944) be locked when you use @sc{cvs}. cvs.texi(,6945) cvs.texi(,6946) Note that this keyword has only been recently cvs.texi(,6947) introduced to @sc{cvs} and may cause problems with cvs.texi(splitrcskeyword,6948) existing installations if $@i{}CVSHeader$ is already cvs.texi(,6949) in the files for a different purpose. This keyword may cvs.texi(,6950) be excluded using the @code{KeywordExpansion=eCVSHeader} cvs.texi(,6951) in the @file{CVSROOT/config} file. cvs.texi(,6952) See @ref{Configuring keyword expansion} for more details. cvs.texi(,6953) cvs.texi(,6954) @cindex Date keyword cvs.texi(splitrcskeyword,6955) @item $@i{}Date$ cvs.texi(,6956) The date and time (UTC) the revision was checked in. cvs.texi(,6957) cvs.texi(,6958) @cindex Header keyword cvs.texi(splitrcskeyword,6959) @item $@i{}Header$ cvs.texi(,6960) A standard header containing the full pathname of the cvs.texi(,6961) @sc{rcs} file, the revision number, the date (UTC), the cvs.texi(,6962) author, the state, and the locker (if locked). Files cvs.texi(,6963) will normally never be locked when you use @sc{cvs}. cvs.texi(,6964) cvs.texi(,6965) @cindex Id keyword cvs.texi(splitrcskeyword,6966) @item $@i{}Id$ cvs.texi(splitrcskeyword,6967) Same as @code{$@i{}Header$}, except that the @sc{rcs} cvs.texi(,6968) filename is without a path. cvs.texi(,6969) cvs.texi(,6970) @cindex Name keyword cvs.texi(splitrcskeyword,6971) @item $@i{}Name$ cvs.texi(,6972) Tag name used to check out this file. The keyword is cvs.texi(,6973) expanded only if one checks out with an explicit tag cvs.texi(,6974) name. For example, when running the command @code{cvs cvs.texi(,6975) co -r first}, the keyword expands to @samp{Name: first}. cvs.texi(,6976) cvs.texi(,6977) @cindex Locker keyword cvs.texi(splitrcskeyword,6978) @item $@i{}Locker$ cvs.texi(,6979) The login name of the user who locked the revision cvs.texi(,6980) (empty if not locked, which is the normal case unless cvs.texi(,6981) @code{cvs admin -l} is in use). cvs.texi(,6982) cvs.texi(,6983) @cindex Log keyword cvs.texi(splitrcskeyword,6984) @item $@i{}Log$ cvs.texi(,6985) The log message supplied during commit, preceded by a cvs.texi(,6986) header containing the @sc{rcs} filename, the revision cvs.texi(,6987) number, the author, and the date (UTC). Existing log cvs.texi(,6988) messages are @emph{not} replaced. Instead, the new log cvs.texi(splitrcskeyword,6989) message is inserted after @code{$@i{}Log:@dots{}$}. cvs.texi(,6990) Each new line is prefixed with the same string which cvs.texi(,6991) precedes the @code{$Log} keyword. For example, if the cvs.texi(,6992) file contains: cvs.texi(,6993) cvs.texi(,6994) @example cvs.texi(,6995) /* Here is what people have been up to: cvs.texi(,6996) * cvs.texi(splitrcskeyword,6997) * $@i{}Log: frob.c,v $ cvs.texi(,6998) * Revision 1.1 1997/01/03 14:23:51 joe cvs.texi(,6999) * Add the superfrobnicate option cvs.texi(,7000) * cvs.texi(,7001) */ cvs.texi(,7002) @end example cvs.texi(,7003) cvs.texi(,7004) @noindent cvs.texi(,7005) then additional lines which are added when expanding cvs.texi(,7006) the @code{$Log} keyword will be preceded by @samp{ * }. cvs.texi(,7007) Unlike previous versions of @sc{cvs} and @sc{rcs}, the cvs.texi(,7008) @dfn{comment leader} from the @sc{rcs} file is not used. cvs.texi(,7009) The @code{$Log} keyword is useful for cvs.texi(,7010) accumulating a complete change log in a source file, cvs.texi(,7011) but for several reasons it can be problematic. cvs.texi(,7012) @xref{Log keyword}. cvs.texi(,7013) cvs.texi(,7014) @cindex RCSfile keyword cvs.texi(splitrcskeyword,7015) @item $@i{}RCSfile$ cvs.texi(,7016) The name of the RCS file without a path. cvs.texi(,7017) cvs.texi(,7018) @cindex Revision keyword cvs.texi(splitrcskeyword,7019) @item $@i{}Revision$ cvs.texi(,7020) The revision number assigned to the revision. cvs.texi(,7021) cvs.texi(,7022) @cindex Source keyword cvs.texi(splitrcskeyword,7023) @item $@i{}Source$ cvs.texi(,7024) The full pathname of the RCS file. cvs.texi(,7025) cvs.texi(,7026) @cindex State keyword cvs.texi(splitrcskeyword,7027) @item $@i{}State$ cvs.texi(,7028) The state assigned to the revision. States can be cvs.texi(,7029) assigned with @code{cvs admin -s}---see @ref{admin options}. cvs.texi(,7030) cvs.texi(,7031) @cindex Local keyword cvs.texi(,7032) @item Local keyword cvs.texi(,7033) The @code{LocalKeyword} option in the @file{CVSROOT/config} file cvs.texi(,7034) may be used to specify a local keyword which is to be cvs.texi(,7035) used as an alias for one of the other keywords. For cvs.texi(,7036) example, if the @file{CVSROOT/config} file contains cvs.texi(,7037) a line with @code{LocalKeyword=MYBSD=CVSHeader}, then a cvs.texi(splitrcskeyword,7038) file with the local keyword $@i{}MYBSD$ will be cvs.texi(splitrcskeyword,7039) expanded as if it were a $@i{}CVSHeader$ keyword. If cvs.texi(,7040) the src/frob.c file contained this keyword, it might cvs.texi(,7041) look something like this: cvs.texi(,7042) cvs.texi(,7043) @example cvs.texi(,7044) /* cvs.texi(splitrcskeyword,7045) * $@i{}MYBSD: src/frob.c,v 1.1 2003/05/04 09:27:45 john Exp $ cvs.texi(,7046) */ cvs.texi(,7047) @end example cvs.texi(,7048) cvs.texi(,7049) Many repositories make use of a such a ``local cvs.texi(,7050) keyword'' feature. An old patch to @sc{cvs} provided cvs.texi(,7051) the @code{LocalKeyword} feature using a @code{tag=} cvs.texi(,7052) option and called this the ``custom tag'' or ``local cvs.texi(,7053) tag'' feature. It was used in conjunction with the cvs.texi(,7054) what they called the @code{tagexpand=} option. In cvs.texi(,7055) @sc{cvs} this other option is known as the cvs.texi(,7056) @code{KeywordExpand} option. cvs.texi(,7057) See @ref{Configuring keyword expansion} for more cvs.texi(,7058) details. cvs.texi(,7059) cvs.texi(,7060) Examples from popular projects include: cvs.texi(splitrcskeyword,7061) $@i{}FreeBSD$, $@i{}NetBSD$, cvs.texi(splitrcskeyword,7062) $@i{}OpenBSD$, $@i{}XFree86$, cvs.texi(splitrcskeyword,7063) $@i{}Xorg$. cvs.texi(,7064) cvs.texi(,7065) The advantage of this is that you can include your cvs.texi(,7066) local version information in a file using this local cvs.texi(,7067) keyword without disrupting the upstream version cvs.texi(,7068) information (which may be a different local keyword or cvs.texi(,7069) a standard keyword). Allowing bug reports and the like cvs.texi(,7070) to more properly identify the source of the original cvs.texi(,7071) bug to the third-party and reducing the number of cvs.texi(,7072) conflicts that arise during an import of a new version. cvs.texi(,7073) cvs.texi(,7074) All keyword expansion except the local keyword may be cvs.texi(,7075) disabled using the @code{KeywordExpansion} option in cvs.texi(,7076) the @file{CVSROOT/config} file---see cvs.texi(,7077) @ref{Configuring keyword expansion} for more details. cvs.texi(,7078) cvs.texi(,7079) @end table cvs.texi(,7080) cvs.texi(,7081) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,7082) @node Using keywords cvs.texi(,7083) @section Using keywords cvs.texi(,7084) cvs.texi(,7085) To include a keyword string you simply include the cvs.texi(splitrcskeyword,7086) relevant text string, such as @code{$@i{}Id$}, inside the cvs.texi(,7087) file, and commit the file. @sc{cvs} will automatically cvs.texi(,7088) expand the string as part of the commit operation. cvs.texi(,7089) cvs.texi(splitrcskeyword,7090) It is common to embed the @code{$@i{}Id$} string in cvs.texi(,7091) the source files so that it gets passed through to cvs.texi(,7092) generated files. For example, if you are managing cvs.texi(,7093) computer program source code, you might include a cvs.texi(,7094) variable which is initialized to contain that string. cvs.texi(,7095) Or some C compilers may provide a @code{#pragma ident} cvs.texi(,7096) directive. Or a document management system might cvs.texi(,7097) provide a way to pass a string through to generated cvs.texi(,7098) files. cvs.texi(,7099) cvs.texi(,7100) @c Would be nice to give an example, but doing this in cvs.texi(,7101) @c portable C is not possible and the problem with cvs.texi(,7102) @c picking any one language (VMS HELP files, Ada, cvs.texi(,7103) @c troff, whatever) is that people use CVS for all cvs.texi(,7104) @c kinds of files. cvs.texi(,7105) cvs.texi(,7106) @cindex Ident (shell command) cvs.texi(,7107) The @code{ident} command (which is part of the @sc{rcs} cvs.texi(,7108) package) can be used to extract keywords and their cvs.texi(,7109) values from a file. This can be handy for text files, cvs.texi(,7110) but it is even more useful for extracting keywords from cvs.texi(,7111) binary files. cvs.texi(,7112) cvs.texi(,7113) @example cvs.texi(,7114) $ ident samp.c cvs.texi(,7115) samp.c: cvs.texi(splitrcskeyword,7116) $@i{}Id: samp.c,v 1.5 1993/10/19 14:57:32 ceder Exp $ cvs.texi(,7117) $ gcc samp.c cvs.texi(,7118) $ ident a.out cvs.texi(,7119) a.out: cvs.texi(splitrcskeyword,7120) $@i{}Id: samp.c,v 1.5 1993/10/19 14:57:32 ceder Exp $ cvs.texi(,7121) @end example cvs.texi(,7122) cvs.texi(,7123) @cindex What (shell command) cvs.texi(,7124) S@sc{ccs} is another popular revision control system. cvs.texi(,7125) It has a command, @code{what}, which is very similar to cvs.texi(,7126) @code{ident} and used for the same purpose. Many sites cvs.texi(,7127) without @sc{rcs} have @sc{sccs}. Since @code{what} cvs.texi(,7128) looks for the character sequence @code{@@(#)} it is cvs.texi(,7129) easy to include keywords that are detected by either cvs.texi(,7130) command. Simply prefix the keyword with the cvs.texi(,7131) magic @sc{sccs} phrase, like this: cvs.texi(,7132) cvs.texi(,7133) @example cvs.texi(splitrcskeyword,7134) static char *id="@@(#) $@i{}Id: ab.c,v 1.5 1993/10/19 14:57:32 ceder Exp $"; cvs.texi(,7135) @end example cvs.texi(,7136) cvs.texi(,7137) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,7138) @node Avoiding substitution cvs.texi(,7139) @section Avoiding substitution cvs.texi(,7140) cvs.texi(,7141) Keyword substitution has its disadvantages. Sometimes cvs.texi(,7142) you might want the literal text string cvs.texi(splitrcskeyword,7143) @samp{$@i{}Author$} to appear inside a file without cvs.texi(,7144) @sc{cvs} interpreting it as a keyword and expanding it cvs.texi(splitrcskeyword,7145) into something like @samp{$@i{}Author: ceder $}. cvs.texi(,7146) cvs.texi(,7147) There is unfortunately no way to selectively turn off cvs.texi(,7148) keyword substitution. You can use @samp{-ko} cvs.texi(,7149) (@pxref{Substitution modes}) to turn off keyword cvs.texi(,7150) substitution entirely. cvs.texi(,7151) cvs.texi(,7152) In many cases you can avoid using keywords in cvs.texi(,7153) the source, even though they appear in the final cvs.texi(,7154) product. For example, the source for this manual cvs.texi(,7155) contains @samp{$@@asis@{@}Author$} whenever the text cvs.texi(splitrcskeyword,7156) @samp{$@i{}Author$} should appear. In @code{nroff} cvs.texi(,7157) and @code{troff} you can embed the null-character cvs.texi(,7158) @code{\&} inside the keyword for a similar effect. cvs.texi(,7159) cvs.texi(,7160) It is also possible to specify an explicit list of cvs.texi(,7161) keywords to include or exclude using the cvs.texi(,7162) @code{KeywordExpand} option in the cvs.texi(,7163) @file{CVSROOT/config} file--see @ref{Configuring keyword expansion} cvs.texi(,7164) for more details. This feature is intended primarily cvs.texi(,7165) for use with the @code{LocalKeyword} option--see cvs.texi(,7166) @ref{Keyword list}. cvs.texi(,7167) cvs.texi(,7168) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,7169) @node Substitution modes cvs.texi(,7170) @section Substitution modes cvs.texi(,7171) @cindex Keyword substitution, changing modes cvs.texi(,7172) @cindex -k (keyword substitution) cvs.texi(,7173) @cindex Kflag cvs.texi(,7174) cvs.texi(,7175) @c FIXME: This could be made more coherent, by expanding it cvs.texi(,7176) @c with more examples or something. cvs.texi(,7177) Each file has a stored default substitution mode, and cvs.texi(,7178) each working directory copy of a file also has a cvs.texi(,7179) substitution mode. The former is set by the @samp{-k} cvs.texi(,7180) option to @code{cvs add} and @code{cvs admin}; the cvs.texi(,7181) latter is set by the @samp{-k} or @samp{-A} options to @code{cvs cvs.texi(,7182) checkout} or @code{cvs update}. @code{cvs diff} also cvs.texi(,7183) has a @samp{-k} option. For some examples, cvs.texi(,7184) see @ref{Binary files}, and @ref{Merging and keywords}. cvs.texi(,7185) @c The fact that -A is overloaded to mean both reset cvs.texi(,7186) @c sticky options and reset sticky tags/dates is cvs.texi(,7187) @c somewhat questionable. Perhaps there should be cvs.texi(,7188) @c separate options to reset sticky options (e.g. -k cvs.texi(,7189) @c A") and tags/dates (someone suggested -r HEAD could cvs.texi(,7190) @c do this instead of setting a sticky tag of "HEAD" cvs.texi(,7191) @c as in the status quo but I haven't thought much cvs.texi(,7192) @c about that idea. Of course -r .reset or something cvs.texi(,7193) @c could be coined if this needs to be a new option). cvs.texi(,7194) @c On the other hand, having -A mean "get things back cvs.texi(,7195) @c into the state after a fresh checkout" has a certain cvs.texi(,7196) @c appeal, and maybe there is no sufficient reason for cvs.texi(,7197) @c creeping featurism in this area. cvs.texi(,7198) cvs.texi(,7199) The modes available are: cvs.texi(,7200) cvs.texi(,7201) @table @samp cvs.texi(,7202) @item -kkv cvs.texi(,7203) Generate keyword strings using the default form, e.g. cvs.texi(splitrcskeyword,7204) @code{$@i{}Revision: 5.7 $} for the @code{Revision} cvs.texi(,7205) keyword. cvs.texi(,7206) cvs.texi(,7207) @item -kkvl cvs.texi(,7208) Like @samp{-kkv}, except that a locker's name is always cvs.texi(,7209) inserted if the given revision is currently locked. cvs.texi(,7210) The locker's name is only relevant if @code{cvs admin cvs.texi(,7211) -l} is in use. cvs.texi(,7212) cvs.texi(,7213) @item -kk cvs.texi(,7214) Generate only keyword names in keyword strings; omit cvs.texi(,7215) their values. For example, for the @code{Revision} cvs.texi(splitrcskeyword,7216) keyword, generate the string @code{$@i{}Revision$} cvs.texi(splitrcskeyword,7217) instead of @code{$@i{}Revision: 5.7 $}. This option cvs.texi(,7218) is useful to ignore differences due to keyword cvs.texi(,7219) substitution when comparing different revisions of a cvs.texi(,7220) file (@pxref{Merging and keywords}). cvs.texi(,7221) cvs.texi(,7222) @item -ko cvs.texi(,7223) Generate the old keyword string, present in the working cvs.texi(,7224) file just before it was checked in. For example, for cvs.texi(,7225) the @code{Revision} keyword, generate the string cvs.texi(splitrcskeyword,7226) @code{$@i{}Revision: 1.1 $} instead of cvs.texi(splitrcskeyword,7227) @code{$@i{}Revision: 5.7 $} if that is how the cvs.texi(,7228) string appeared when the file was checked in. cvs.texi(,7229) cvs.texi(,7230) @item -kb cvs.texi(,7231) Like @samp{-ko}, but also inhibit conversion of line cvs.texi(,7232) endings between the canonical form in which they are cvs.texi(,7233) stored in the repository (linefeed only), and the form cvs.texi(,7234) appropriate to the operating system in use on the cvs.texi(,7235) client. For systems, like unix, which use linefeed cvs.texi(,7236) only to terminate lines, this is very similar to cvs.texi(,7237) @samp{-ko}. For more information on binary files, see cvs.texi(,7238) @ref{Binary files}. In @sc{cvs} version 1.12.2 and later cvs.texi(,7239) @samp{-kb}, as set by @code{cvs add}, @code{cvs admin}, or cvs.texi(,7240) @code{cvs import} may not be overridden by a @samp{-k} option cvs.texi(,7241) specified on the command line. cvs.texi(,7242) cvs.texi(,7243) @item -kv cvs.texi(,7244) Generate only keyword values for keyword strings. For cvs.texi(,7245) example, for the @code{Revision} keyword, generate the string cvs.texi(splitrcskeyword,7246) @code{5.7} instead of @code{$@i{}Revision: 5.7 $}. cvs.texi(,7247) This can help generate files in programming languages cvs.texi(,7248) where it is hard to strip keyword delimiters like cvs.texi(splitrcskeyword,7249) @code{$@i{}Revision: $} from a string. However, cvs.texi(,7250) further keyword substitution cannot be performed once cvs.texi(,7251) the keyword names are removed, so this option should be cvs.texi(,7252) used with care. cvs.texi(,7253) cvs.texi(,7254) One often would like to use @samp{-kv} with @code{cvs cvs.texi(,7255) export}---@pxref{export}. But be aware that doesn't cvs.texi(,7256) handle an export containing binary files correctly. cvs.texi(,7257) cvs.texi(,7258) @end table cvs.texi(,7259) cvs.texi(,7260) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,7261) @node Configuring keyword expansion cvs.texi(,7262) @section Configuring Keyord Expansion cvs.texi(,7263) @cindex Configuring keyword expansion cvs.texi(,7264) cvs.texi(,7265) In a repository that includes third-party software on cvs.texi(,7266) vendor branches, it is sometimes helpful to configure cvs.texi(,7267) CVS to use a local keyword instead of the standard cvs.texi(splitrcskeyword,7268) $@i{}Id$ or $@i{}Header$ keywords. Examples from cvs.texi(splitrcskeyword,7269) real projects includ, $@i{}Xorg$, $@i{}XFree86$, cvs.texi(splitrcskeyword,7270) $@i{}FreeBSD$, $@i{}NetBSD$, cvs.texi(splitrcskeyword,7271) $@i{}OpenBSD$, and even $@i{}dotat$. cvs.texi(,7272) The advantage of this is that cvs.texi(,7273) you can include your local version information in a cvs.texi(,7274) file using this local keyword (sometimes called a cvs.texi(,7275) ``custom tag'' or a ``local tag'') without disrupting cvs.texi(,7276) the upstream version information (which may be a cvs.texi(,7277) different local keyword or a standard keyword). In cvs.texi(,7278) these cases, it is typically desirable to disable the cvs.texi(,7279) expansion of all keywords except the configured local cvs.texi(,7280) keyword. cvs.texi(,7281) cvs.texi(,7282) The @code{KeywordExpansion} option in the cvs.texi(,7283) @file{CVSROOT/config} file is intended to allow for the cvs.texi(,7284) either the explicit exclusion of a keyword or list of cvs.texi(,7285) keywords, or for the explicit inclusion of a keyword or cvs.texi(,7286) a list of keywords. This list may include the cvs.texi(,7287) @code{LocalKeyword} that has been configured. cvs.texi(,7288) cvs.texi(,7289) The @code{KeywordExpansion} option is followed by cvs.texi(,7290) @code{=} and the next character may either be @code{i} cvs.texi(,7291) to start an inclusion list or @code{e} to start an cvs.texi(,7292) exclusion list. If the following lines were added to cvs.texi(,7293) the @file{CVSROOT/config} file: cvs.texi(,7294) cvs.texi(,7295) @example cvs.texi(,7296) # Add a "MyBSD" keyword and restrict keyword cvs.texi(,7297) # expansion cvs.texi(,7298) LocalKeyword=MyBSD=CVSHeader cvs.texi(,7299) KeywordExpand=iMyBSD cvs.texi(,7300) @end example cvs.texi(,7301) cvs.texi(splitrcskeyword,7302) then only the $@i{}MyBSD$ keyword would be expanded. cvs.texi(,7303) A list may be used. The this example: cvs.texi(,7304) cvs.texi(,7305) @example cvs.texi(,7306) # Add a "MyBSD" keyword and restrict keyword cvs.texi(,7307) # expansion to the MyBSD, Name and Date keywords. cvs.texi(,7308) LocalKeyword=MyBSD=CVSHeader cvs.texi(,7309) KeywordExpand=iMyBSD,Name,Date cvs.texi(,7310) @end example cvs.texi(,7311) cvs.texi(splitrcskeyword,7312) would allow $@i{}MyBSD$, $@i{}Name$, and cvs.texi(splitrcskeyword,7313) $@i{}Date$ to be expanded. cvs.texi(,7314) cvs.texi(,7315) It is also possible to configure an exclusion list cvs.texi(,7316) using the following: cvs.texi(,7317) cvs.texi(,7318) @example cvs.texi(,7319) # Do not expand the non-RCS keyword CVSHeader cvs.texi(,7320) KeywordExpand=eCVSHeader cvs.texi(,7321) @end example cvs.texi(,7322) cvs.texi(,7323) This allows @sc{cvs} to ignore the recently introduced cvs.texi(splitrcskeyword,7324) $@i{}CVSHeader$ keyword and retain all of the cvs.texi(,7325) others. The exclusion entry could also contain the cvs.texi(,7326) standard RCS keyword list, but this could be confusing cvs.texi(,7327) to users that expect RCS keywords to be expanded, so cvs.texi(,7328) ycare should be taken to properly set user expectations cvs.texi(,7329) for a repository that is configured in that manner. cvs.texi(,7330) cvs.texi(,7331) If there is a desire to not have any RCS keywords cvs.texi(,7332) expanded and not use the @code{-ko} flags everywhere, cvs.texi(,7333) an administrator may disable all keyword expansion cvs.texi(,7334) using the @file{CVSROOT/config} line: cvs.texi(,7335) cvs.texi(,7336) @example cvs.texi(,7337) # Do not expand any RCS keywords cvs.texi(,7338) KeywordExpand=i cvs.texi(,7339) @end example cvs.texi(,7340) cvs.texi(,7341) this could be confusing to users that expect RCS cvs.texi(splitrcskeyword,7342) keywords like $@i{}Id$ to be expanded properly, cvs.texi(,7343) so care should be taken to properly set user cvs.texi(,7344) expectations for a repository so configured. cvs.texi(,7345) cvs.texi(,7346) It should be noted that a patch to provide both the cvs.texi(,7347) @code{KeywordExpand} and @code{LocalKeyword} features cvs.texi(,7348) has been around a long time. However, that patch cvs.texi(,7349) implemented these features using @code{tag=} and cvs.texi(,7350) @code{tagexpand=} keywords and those keywords are NOT cvs.texi(,7351) recognized. cvs.texi(,7352) cvs.texi(,7353) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,7354) @node Log keyword cvs.texi(splitrcskeyword,7355) @section Problems with the $@i{}Log$ keyword. cvs.texi(,7356) cvs.texi(splitrcskeyword,7357) The @code{$@i{}Log$} keyword is somewhat cvs.texi(,7358) controversial. As long as you are working on your cvs.texi(,7359) development system the information is easily accessible cvs.texi(splitrcskeyword,7360) even if you do not use the @code{$@i{}Log$} cvs.texi(,7361) keyword---just do a @code{cvs log}. Once you export cvs.texi(,7362) the file the history information might be useless cvs.texi(,7363) anyhow. cvs.texi(,7364) cvs.texi(,7365) A more serious concern is that @sc{cvs} is not good at cvs.texi(splitrcskeyword,7366) handling @code{$@i{}Log$} entries when a branch is cvs.texi(,7367) merged onto the main trunk. Conflicts often result cvs.texi(,7368) from the merging operation. cvs.texi(,7369) @c Might want to check whether the CVS implementation cvs.texi(,7370) @c of RCS_merge has this problem the same way rcsmerge cvs.texi(,7371) @c does. I would assume so.... cvs.texi(,7372) cvs.texi(,7373) People also tend to "fix" the log entries in the file cvs.texi(,7374) (correcting spelling mistakes and maybe even factual cvs.texi(,7375) errors). If that is done the information from cvs.texi(,7376) @code{cvs log} will not be consistent with the cvs.texi(,7377) information inside the file. This may or may not be a cvs.texi(,7378) problem in real life. cvs.texi(,7379) cvs.texi(splitrcskeyword,7380) It has been suggested that the @code{$@i{}Log$} cvs.texi(,7381) keyword should be inserted @emph{last} in the file, and cvs.texi(,7382) not in the files header, if it is to be used at all. cvs.texi(,7383) That way the long list of change messages will not cvs.texi(,7384) interfere with everyday source file browsing. cvs.texi(,7385) cvs.texi(,7386) @c --------------------------------------------------------------------- cvs.texi(,7387) @node Tracking sources cvs.texi(,7388) @chapter Tracking third-party sources cvs.texi(,7389) @cindex Third-party sources cvs.texi(,7390) @cindex Tracking sources cvs.texi(,7391) cvs.texi(,7392) @c FIXME: Need discussion of added and removed files. cvs.texi(,7393) @c FIXME: This doesn't really adequately introduce the cvs.texi(,7394) @c concepts of "vendor" and "you". They don't *have* cvs.texi(,7395) @c to be separate organizations or separate people. cvs.texi(,7396) @c We want a description which is somewhat more based on cvs.texi(,7397) @c the technical issues of which sources go where, but cvs.texi(,7398) @c also with enough examples of how this relates to cvs.texi(,7399) @c relationships like customer-supplier, developer-QA, cvs.texi(,7400) @c maintainer-contributor, or whatever, to make it cvs.texi(,7401) @c seem concrete. cvs.texi(,7402) If you modify a program to better fit your site, you cvs.texi(,7403) probably want to include your modifications when the next cvs.texi(,7404) release of the program arrives. @sc{cvs} can help you with cvs.texi(,7405) this task. cvs.texi(,7406) cvs.texi(,7407) @cindex Vendor cvs.texi(,7408) @cindex Vendor branch cvs.texi(,7409) @cindex Branch, vendor- cvs.texi(,7410) In the terminology used in @sc{cvs}, the supplier of the cvs.texi(,7411) program is called a @dfn{vendor}. The unmodified cvs.texi(,7412) distribution from the vendor is checked in on its own cvs.texi(,7413) branch, the @dfn{vendor branch}. @sc{cvs} reserves branch cvs.texi(,7414) 1.1.1 for this use. cvs.texi(,7415) cvs.texi(,7416) When you modify the source and commit it, your revision cvs.texi(,7417) will end up on the main trunk. When a new release is cvs.texi(,7418) made by the vendor, you commit it on the vendor branch cvs.texi(,7419) and copy the modifications onto the main trunk. cvs.texi(,7420) cvs.texi(,7421) Use the @code{import} command to create and update cvs.texi(,7422) the vendor branch. When you import a new file, cvs.texi(,7423) the vendor branch is made the `head' revision, so cvs.texi(,7424) anyone that checks out a copy of the file gets that cvs.texi(,7425) revision. When a local modification is committed it is cvs.texi(,7426) placed on the main trunk, and made the `head' cvs.texi(,7427) revision. cvs.texi(,7428) cvs.texi(,7429) @menu cvs.texi(,7430) * First import:: Importing for the first time cvs.texi(,7431) * Update imports:: Updating with the import command cvs.texi(,7432) * Reverting local changes:: Reverting to the latest vendor release cvs.texi(,7433) * Binary files in imports:: Binary files require special handling cvs.texi(,7434) * Keywords in imports:: Keyword substitution might be undesirable cvs.texi(,7435) * Multiple vendor branches:: What if you get sources from several places? cvs.texi(,7436) @end menu cvs.texi(,7437) cvs.texi(,7438) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,7439) @node First import cvs.texi(,7440) @section Importing for the first time cvs.texi(,7441) @cindex Importing modules cvs.texi(,7442) cvs.texi(,7443) @c Should mention naming conventions for vendor tags, cvs.texi(,7444) @c release tags, and perhaps directory names. cvs.texi(,7445) Use the @code{import} command to check in the sources cvs.texi(,7446) for the first time. When you use the @code{import} cvs.texi(,7447) command to track third-party sources, the @dfn{vendor cvs.texi(,7448) tag} and @dfn{release tags} are useful. The cvs.texi(,7449) @dfn{vendor tag} is a symbolic name for the branch cvs.texi(,7450) (which is always 1.1.1, unless you use the @samp{-b cvs.texi(,7451) @var{branch}} flag---see @ref{Multiple vendor branches}.). The cvs.texi(,7452) @dfn{release tags} are symbolic names for a particular cvs.texi(,7453) release, such as @samp{FSF_0_04}. cvs.texi(,7454) cvs.texi(,7455) @c I'm not completely sure this belongs here. But cvs.texi(,7456) @c we need to say it _somewhere_ reasonably obvious; it cvs.texi(,7457) @c is a common misconception among people first learning CVS cvs.texi(,7458) Note that @code{import} does @emph{not} change the cvs.texi(,7459) directory in which you invoke it. In particular, it cvs.texi(,7460) does not set up that directory as a @sc{cvs} working cvs.texi(,7461) directory; if you want to work with the sources import cvs.texi(,7462) them first and then check them out into a different cvs.texi(,7463) directory (@pxref{Getting the source}). cvs.texi(,7464) cvs.texi(,7465) @cindex wdiff (import example) cvs.texi(,7466) Suppose you have the sources to a program called cvs.texi(,7467) @code{wdiff} in a directory @file{wdiff-0.04}, cvs.texi(,7468) and are going to make private modifications that you cvs.texi(,7469) want to be able to use even when new releases are made cvs.texi(,7470) in the future. You start by importing the source to cvs.texi(,7471) your repository: cvs.texi(,7472) cvs.texi(,7473) @example cvs.texi(,7474) $ cd wdiff-0.04 cvs.texi(,7475) $ cvs import -m "Import of FSF v. 0.04" fsf/wdiff FSF_DIST WDIFF_0_04 cvs.texi(,7476) @end example cvs.texi(,7477) cvs.texi(,7478) The vendor tag is named @samp{FSF_DIST} in the above cvs.texi(,7479) example, and the only release tag assigned is cvs.texi(,7480) @samp{WDIFF_0_04}. cvs.texi(,7481) @c FIXME: Need to say where fsf/wdiff comes from. cvs.texi(,7482) cvs.texi(,7483) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,7484) @node Update imports cvs.texi(,7485) @section Updating with the import command cvs.texi(,7486) cvs.texi(,7487) When a new release of the source arrives, you import it into the cvs.texi(,7488) repository with the same @code{import} command that you used to set up cvs.texi(,7489) the repository in the first place. The only difference is that you cvs.texi(,7490) specify a different release tag this time: cvs.texi(,7491) cvs.texi(,7492) @example cvs.texi(,7493) $ tar xfz wdiff-0.05.tar.gz cvs.texi(,7494) $ cd wdiff-0.05 cvs.texi(,7495) $ cvs import -m "Import of FSF v. 0.05" fsf/wdiff FSF_DIST WDIFF_0_05 cvs.texi(,7496) @end example cvs.texi(,7497) cvs.texi(,7498) For files that have not been modified locally, the newly created cvs.texi(,7499) revision becomes the head revision. If you have made local cvs.texi(,7500) changes, @code{import} will warn you that you must merge the changes cvs.texi(,7501) into the main trunk, and tell you to use @samp{checkout -j} to do so: cvs.texi(,7502) cvs.texi(,7503) @c FIXME: why "wdiff" here and "fsf/wdiff" in the cvs.texi(,7504) @c "import"? I think the assumption is that one has cvs.texi(,7505) @c "wdiff fsf/wdiff" or some such in modules, but it cvs.texi(,7506) @c would be better to not use modules in this example. cvs.texi(,7507) @example cvs.texi(,7508) $ cvs checkout -jFSF_DIST:yesterday -jFSF_DIST wdiff cvs.texi(,7509) @end example cvs.texi(,7510) cvs.texi(,7511) @noindent cvs.texi(,7512) The above command will check out the latest revision of cvs.texi(,7513) @samp{wdiff}, merging the changes made on the vendor branch @samp{FSF_DIST} cvs.texi(,7514) since yesterday into the working copy. If any conflicts arise during cvs.texi(,7515) the merge they should be resolved in the normal way (@pxref{Conflicts cvs.texi(,7516) example}). Then, the modified files may be committed. cvs.texi(,7517) cvs.texi(,7518) However, it is much better to use the two release tags rather than using cvs.texi(,7519) a date on the branch as suggested above: cvs.texi(,7520) cvs.texi(,7521) @example cvs.texi(,7522) $ cvs checkout -jWDIFF_0_04 -jWDIFF_0_05 wdiff cvs.texi(,7523) @end example cvs.texi(,7524) cvs.texi(,7525) @noindent cvs.texi(,7526) The reason this is better is that cvs.texi(,7527) using a date, as suggested above, assumes that you do cvs.texi(,7528) not import more than one release of a product per day. cvs.texi(,7529) More importantly, using the release tags allows @sc{cvs} to detect files cvs.texi(,7530) that were removed between the two vendor releases and mark them for cvs.texi(,7531) removal. Since @code{import} has no way to detect removed files, you cvs.texi(,7532) should do a merge like this even if @code{import} doesn't tell you to. cvs.texi(,7533) cvs.texi(,7534) @node Reverting local changes cvs.texi(,7535) @section Reverting to the latest vendor release cvs.texi(,7536) cvs.texi(,7537) You can also revert local changes completely and return cvs.texi(,7538) to the latest vendor release by changing the `head' cvs.texi(,7539) revision back to the vendor branch on all files. For cvs.texi(,7540) example, if you have a checked-out copy of the sources cvs.texi(,7541) in @file{~/work.d/wdiff}, and you want to revert to the cvs.texi(,7542) vendor's version for all the files in that directory, cvs.texi(,7543) you would type: cvs.texi(,7544) cvs.texi(,7545) @example cvs.texi(,7546) $ cd ~/work.d/wdiff cvs.texi(,7547) $ cvs admin -bWDIFF . cvs.texi(,7548) @end example cvs.texi(,7549) cvs.texi(,7550) @noindent cvs.texi(,7551) You must specify the @samp{-bWDIFF} without any space cvs.texi(,7552) after the @samp{-b}. @xref{admin options}. cvs.texi(,7553) cvs.texi(,7554) @node Binary files in imports cvs.texi(,7555) @section How to handle binary files with cvs import cvs.texi(,7556) cvs.texi(,7557) Use the @samp{-k} wrapper option to tell import which cvs.texi(,7558) files are binary. @xref{Wrappers}. cvs.texi(,7559) cvs.texi(,7560) @node Keywords in imports cvs.texi(,7561) @section How to handle keyword substitution with cvs import cvs.texi(,7562) cvs.texi(,7563) The sources which you are importing may contain cvs.texi(,7564) keywords (@pxref{Keyword substitution}). For example, cvs.texi(,7565) the vendor may use @sc{cvs} or some other system cvs.texi(,7566) which uses similar keyword expansion syntax. If you cvs.texi(,7567) just import the files in the default fashion, then cvs.texi(,7568) the keyword expansions supplied by the vendor will cvs.texi(,7569) be replaced by keyword expansions supplied by your cvs.texi(,7570) own copy of @sc{cvs}. It may be more convenient to cvs.texi(,7571) maintain the expansions supplied by the vendor, so cvs.texi(,7572) that this information can supply information about cvs.texi(,7573) the sources that you imported from the vendor. cvs.texi(,7574) cvs.texi(,7575) To maintain the keyword expansions supplied by the cvs.texi(,7576) vendor, supply the @samp{-ko} option to @code{cvs cvs.texi(,7577) import} the first time you import the file. cvs.texi(,7578) This will turn off keyword expansion cvs.texi(,7579) for that file entirely, so if you want to be more cvs.texi(,7580) selective you'll have to think about what you want cvs.texi(,7581) and use the @samp{-k} option to @code{cvs update} or cvs.texi(,7582) @code{cvs admin} as appropriate. cvs.texi(,7583) @c Supplying -ko to import if the file already existed cvs.texi(,7584) @c has no effect. Not clear to me whether it should cvs.texi(,7585) @c or not. cvs.texi(,7586) cvs.texi(,7587) @node Multiple vendor branches cvs.texi(,7588) @section Multiple vendor branches cvs.texi(,7589) cvs.texi(,7590) All the examples so far assume that there is only one cvs.texi(,7591) vendor from which you are getting sources. In some cvs.texi(,7592) situations you might get sources from a variety of cvs.texi(,7593) places. For example, suppose that you are dealing with cvs.texi(,7594) a project where many different people and teams are cvs.texi(,7595) modifying the software. There are a variety of ways to cvs.texi(,7596) handle this, but in some cases you have a bunch of cvs.texi(,7597) source trees lying around and what you want to do more cvs.texi(,7598) than anything else is just to all put them in @sc{cvs} so cvs.texi(,7599) that you at least have them in one place. cvs.texi(,7600) cvs.texi(,7601) For handling situations in which there may be more than cvs.texi(,7602) one vendor, you may specify the @samp{-b} option to cvs.texi(,7603) @code{cvs import}. It takes as an argument the vendor cvs.texi(,7604) branch to import to. The default is @samp{-b 1.1.1}. cvs.texi(,7605) cvs.texi(,7606) For example, suppose that there are two teams, the red cvs.texi(,7607) team and the blue team, that are sending you sources. cvs.texi(,7608) You want to import the red team's efforts to branch cvs.texi(,7609) 1.1.1 and use the vendor tag RED. You want to import cvs.texi(,7610) the blue team's efforts to branch 1.1.3 and use the cvs.texi(,7611) vendor tag BLUE. So the commands you might use are: cvs.texi(,7612) cvs.texi(,7613) @example cvs.texi(,7614) $ cvs import dir RED RED_1-0 cvs.texi(,7615) $ cvs import -b 1.1.3 dir BLUE BLUE_1-5 cvs.texi(,7616) @end example cvs.texi(,7617) cvs.texi(,7618) Note that if your vendor tag does not match your cvs.texi(,7619) @samp{-b} option, @sc{cvs} will not detect this case! For cvs.texi(,7620) example, cvs.texi(,7621) cvs.texi(,7622) @example cvs.texi(,7623) $ cvs import -b 1.1.3 dir RED RED_1-0 cvs.texi(,7624) @end example cvs.texi(,7625) cvs.texi(,7626) @noindent cvs.texi(,7627) Be careful; this kind of mismatch is sure to sow cvs.texi(,7628) confusion or worse. I can't think of a useful purpose cvs.texi(,7629) for the ability to specify a mismatch here, but if you cvs.texi(,7630) discover such a use, don't. @sc{cvs} is likely to make this cvs.texi(,7631) an error in some future release. cvs.texi(,7632) cvs.texi(,7633) @c Probably should say more about the semantics of cvs.texi(,7634) @c multiple branches. What about the default branch? cvs.texi(,7635) @c What about joining (perhaps not as useful with cvs.texi(,7636) @c multiple branches, or perhaps it is. Either way cvs.texi(,7637) @c should be mentioned). cvs.texi(,7638) cvs.texi(,7639) @c I'm not sure about the best location for this. In cvs.texi(,7640) @c one sense, it might belong right after we've introduced cvs.texi(,7641) @c CVS's basic version control model, because people need cvs.texi(,7642) @c to figure out builds right away. The current location cvs.texi(,7643) @c is based on the theory that it kind of akin to the cvs.texi(,7644) @c "Revision management" section. cvs.texi(,7645) @node Builds cvs.texi(,7646) @chapter How your build system interacts with CVS cvs.texi(,7647) @cindex Builds cvs.texi(,7648) @cindex make cvs.texi(,7649) cvs.texi(,7650) As mentioned in the introduction, @sc{cvs} does not cvs.texi(,7651) contain software for building your software from source cvs.texi(,7652) code. This section describes how various aspects of cvs.texi(,7653) your build system might interact with @sc{cvs}. cvs.texi(,7654) cvs.texi(,7655) @c Is there a way to discuss this without reference to cvs.texi(,7656) @c tools other than CVS? I'm not sure there is; I cvs.texi(,7657) @c wouldn't think that people who learn CVS first would cvs.texi(,7658) @c even have this concern. cvs.texi(,7659) One common question, especially from people who are cvs.texi(,7660) accustomed to @sc{rcs}, is how to make their build get cvs.texi(,7661) an up to date copy of the sources. The answer to this cvs.texi(,7662) with @sc{cvs} is two-fold. First of all, since cvs.texi(,7663) @sc{cvs} itself can recurse through directories, there cvs.texi(,7664) is no need to modify your @file{Makefile} (or whatever cvs.texi(,7665) configuration file your build tool uses) to make sure cvs.texi(,7666) each file is up to date. Instead, just use two cvs.texi(,7667) commands, first @code{cvs -q update} and then cvs.texi(,7668) @code{make} or whatever the command is to invoke your cvs.texi(,7669) build tool. Secondly, you do not necessarily cvs.texi(,7670) @emph{want} to get a copy of a change someone else made cvs.texi(,7671) until you have finished your own work. One suggested cvs.texi(,7672) approach is to first update your sources, then cvs.texi(,7673) implement, build and cvs.texi(,7674) test the change you were thinking of, and then commit cvs.texi(,7675) your sources (updating first if necessary). By cvs.texi(,7676) periodically (in between changes, using the approach cvs.texi(,7677) just described) updating your entire tree, you ensure cvs.texi(,7678) that your sources are sufficiently up to date. cvs.texi(,7679) cvs.texi(,7680) @cindex Bill of materials cvs.texi(,7681) One common need is to record which versions of which cvs.texi(,7682) source files went into a particular build. This kind cvs.texi(,7683) of functionality is sometimes called @dfn{bill of cvs.texi(,7684) materials} or something similar. The best way to do cvs.texi(,7685) this with @sc{cvs} is to use the @code{tag} command to cvs.texi(,7686) record which versions went into a given build cvs.texi(,7687) (@pxref{Tags}). cvs.texi(,7688) cvs.texi(,7689) Using @sc{cvs} in the most straightforward manner cvs.texi(,7690) possible, each developer will have a copy of the entire cvs.texi(,7691) source tree which is used in a particular build. If cvs.texi(,7692) the source tree is small, or if developers are cvs.texi(,7693) geographically dispersed, this is the preferred cvs.texi(,7694) solution. In fact one approach for larger projects is cvs.texi(,7695) to break a project down into smaller cvs.texi(,7696) @c I say subsystem instead of module because they may or cvs.texi(,7697) @c may not use the modules file. cvs.texi(,7698) separately-compiled subsystems, and arrange a way of cvs.texi(,7699) releasing them internally so that each developer need cvs.texi(,7700) check out only those subsystems which they are cvs.texi(,7701) actively working on. cvs.texi(,7702) cvs.texi(,7703) Another approach is to set up a structure which allows cvs.texi(,7704) developers to have their own copies of some files, and cvs.texi(,7705) for other files to access source files from a central cvs.texi(,7706) location. Many people have come up with some such a cvs.texi(,7707) @c two such people are paul@sander.cupertino.ca.us (for cvs.texi(,7708) @c a previous employer) cvs.texi(,7709) @c and gtornblo@senet.abb.se (spicm and related tools), cvs.texi(,7710) @c but as far as I know cvs.texi(,7711) @c no one has nicely packaged or released such a system (or cvs.texi(,7712) @c instructions for constructing one). cvs.texi(,7713) system using features such as the symbolic link feature cvs.texi(,7714) found in many operating systems, or the @code{VPATH} cvs.texi(,7715) feature found in many versions of @code{make}. One build cvs.texi(,7716) tool which is designed to help with this kind of thing cvs.texi(,7717) is Odin (see cvs.texi(,7718) @code{ftp://ftp.cs.colorado.edu/pub/distribs/odin}). cvs.texi(,7719) @c Should we be saying more about Odin? Or how you use cvs.texi(,7720) @c it with CVS? Also, the Prime Time Freeware for Unix cvs.texi(,7721) @c disk (see http://www.ptf.com/) has Odin (with a nice cvs.texi(,7722) @c paragraph summarizing it on the web), so that might be a cvs.texi(,7723) @c semi-"official" place to point people. cvs.texi(,7724) @c cvs.texi(,7725) @c Of course, many non-CVS systems have this kind of cvs.texi(,7726) @c functionality, for example OSF's ODE cvs.texi(,7727) @c (http://www.osf.org/ode/) or mk cvs.texi(,7728) @c (http://www.grin.net/~pzi/mk-3.18.4.docs/mk_toc.html cvs.texi(,7729) @c He has changed providers in the past; a search engine search cvs.texi(,7730) @c for "Peter Ziobrzynski" probably won't get too many cvs.texi(,7731) @c spurious hits :-). A more stable URL might be cvs.texi(,7732) @c ftp://ftp.uu.net/pub/cmvc/mk). But I'm not sure cvs.texi(,7733) @c there is any point in mentioning them here unless they cvs.texi(,7734) @c can work with CVS. cvs.texi(,7735) cvs.texi(,7736) @c --------------------------------------------------------------------- cvs.texi(,7737) @node Special Files cvs.texi(,7738) @chapter Special Files cvs.texi(,7739) cvs.texi(,7740) @cindex Special files cvs.texi(,7741) @cindex Device nodes cvs.texi(,7742) @cindex Ownership, saving in CVS cvs.texi(,7743) @cindex Permissions, saving in CVS cvs.texi(,7744) @cindex Hard links cvs.texi(,7745) @cindex Symbolic links cvs.texi(,7746) cvs.texi(,7747) In normal circumstances, @sc{cvs} works only with regular cvs.texi(,7748) files. Every file in a project is assumed to be cvs.texi(,7749) persistent; it must be possible to open, read and close cvs.texi(,7750) them; and so on. @sc{cvs} also ignores file permissions and cvs.texi(,7751) ownerships, leaving such issues to be resolved by the cvs.texi(,7752) developer at installation time. In other words, it is cvs.texi(,7753) not possible to "check in" a device into a repository; cvs.texi(,7754) if the device file cannot be opened, @sc{cvs} will refuse to cvs.texi(,7755) handle it. Files also lose their ownerships and cvs.texi(,7756) permissions during repository transactions. cvs.texi(,7757) cvs.texi(,7838) cvs.texi(,7839) @c --------------------------------------------------------------------- cvs.texi(,7840) @node CVS commands cvs.texi(,7841) @appendix Guide to CVS commands cvs.texi(,7842) cvs.texi(,7843) This appendix describes the overall structure of cvs.texi(,7844) @sc{cvs} commands, and describes some commands in cvs.texi(,7845) detail (others are described elsewhere; for a quick cvs.texi(,7846) reference to @sc{cvs} commands, @pxref{Invoking CVS}). cvs.texi(,7847) @c The idea is that we want to move the commands which cvs.texi(,7848) @c are described here into the main body of the manual, cvs.texi(,7849) @c in the process reorganizing the manual to be cvs.texi(,7850) @c organized around what the user wants to do, not cvs.texi(,7851) @c organized around CVS commands. cvs.texi(,7852) @c cvs.texi(,7853) @c Note that many users do expect a manual which is cvs.texi(,7854) @c organized by command. At least some users do. cvs.texi(,7855) @c One good addition to the "organized by command" cvs.texi(,7856) @c section (if any) would be "see also" links. cvs.texi(,7857) @c The awk manual might be a good example; it has a cvs.texi(,7858) @c reference manual which is more verbose than Invoking cvs.texi(,7859) @c CVS but probably somewhat less verbose than CVS cvs.texi(,7860) @c Commands. cvs.texi(,7861) cvs.texi(,7862) @menu cvs.texi(,7863) * Structure:: Overall structure of CVS commands cvs.texi(,7864) * Exit status:: Indicating CVS's success or failure cvs.texi(,7865) * ~/.cvsrc:: Default options with the ~/.csvrc file cvs.texi(,7866) * Global options:: Options you give to the left of cvs_command cvs.texi(,7867) * Common options:: Options you give to the right of cvs_command cvs.texi(,7868) * admin:: Administration cvs.texi(,7869) * checkout:: Checkout sources for editing cvs.texi(,7870) * commit:: Check files into the repository cvs.texi(,7871) * diff:: Show differences between revisions cvs.texi(,7872) * export:: Export sources from CVS, similar to checkout cvs.texi(,7873) * history:: Show status of files and users cvs.texi(,7874) * import:: Import sources into CVS, using vendor branches cvs.texi(,7875) * log:: Show log messages for files cvs.texi(,7876) * rdiff:: 'patch' format diffs between releases cvs.texi(,7877) * release:: Indicate that a directory is no longer in use cvs.texi(,7878) * update:: Bring work tree in sync with repository cvs.texi(,7879) @end menu cvs.texi(,7880) cvs.texi(,7881) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,7882) @node Structure cvs.texi(,7883) @appendixsec Overall structure of CVS commands cvs.texi(,7884) @cindex Structure cvs.texi(,7885) @cindex CVS command structure cvs.texi(,7886) @cindex Command structure cvs.texi(,7887) @cindex Format of CVS commands cvs.texi(,7888) cvs.texi(,7889) The overall format of all @sc{cvs} commands is: cvs.texi(,7890) cvs.texi(,7891) @example cvs.texi(,7892) cvs [ cvs_options ] cvs_command [ command_options ] [ command_args ] cvs.texi(,7893) @end example cvs.texi(,7894) cvs.texi(,7895) @table @code cvs.texi(,7896) @item cvs cvs.texi(,7897) The name of the @sc{cvs} program. cvs.texi(,7898) cvs.texi(,7899) @item cvs_options cvs.texi(,7900) Some options that affect all sub-commands of @sc{cvs}. These are cvs.texi(,7901) described below. cvs.texi(,7902) cvs.texi(,7903) @item cvs_command cvs.texi(,7904) One of several different sub-commands. Some of the commands have cvs.texi(,7905) aliases that can be used instead; those aliases are noted in the cvs.texi(,7906) reference manual for that command. There are only two situations cvs.texi(,7907) where you may omit @samp{cvs_command}: @samp{cvs -H} elicits a cvs.texi(,7908) list of available commands, and @samp{cvs -v} displays version cvs.texi(,7909) information on @sc{cvs} itself. cvs.texi(,7910) cvs.texi(,7911) @item command_options cvs.texi(,7912) Options that are specific for the command. cvs.texi(,7913) cvs.texi(,7914) @item command_args cvs.texi(,7915) Arguments to the commands. cvs.texi(,7916) @end table cvs.texi(,7917) cvs.texi(,7918) There is unfortunately some confusion between cvs.texi(,7919) @code{cvs_options} and @code{command_options}. cvs.texi(,7920) @samp{-l}, when given as a @code{cvs_option}, only cvs.texi(,7921) affects some of the commands. When it is given as a cvs.texi(,7922) @code{command_option} is has a different meaning, and cvs.texi(,7923) is accepted by more commands. In other words, do not cvs.texi(,7924) take the above categorization too seriously. Look at cvs.texi(,7925) the documentation instead. cvs.texi(,7926) cvs.texi(,7927) @node Exit status cvs.texi(,7928) @appendixsec CVS's exit status cvs.texi(,7929) @cindex Exit status, of CVS cvs.texi(,7930) cvs.texi(,7931) @sc{cvs} can indicate to the calling environment whether it cvs.texi(,7932) succeeded or failed by setting its @dfn{exit status}. cvs.texi(,7933) The exact way of testing the exit status will vary from cvs.texi(,7934) one operating system to another. For example in a unix cvs.texi(,7935) shell script the @samp{$?} variable will be 0 if the cvs.texi(,7936) last command returned a successful exit status, or cvs.texi(,7937) greater than 0 if the exit status indicated failure. cvs.texi(,7938) cvs.texi(,7939) If @sc{cvs} is successful, it returns a successful status; cvs.texi(,7940) if there is an error, it prints an error message and cvs.texi(,7941) returns a failure status. The one exception to this is cvs.texi(,7942) the @code{cvs diff} command. It will return a cvs.texi(,7943) successful status if it found no differences, or a cvs.texi(,7944) failure status if there were differences or if there cvs.texi(,7945) was an error. Because this behavior provides no good cvs.texi(,7946) way to detect errors, in the future it is possible that cvs.texi(,7947) @code{cvs diff} will be changed to behave like the cvs.texi(,7948) other @sc{cvs} commands. cvs.texi(,7949) @c It might seem like checking whether cvs -q diff cvs.texi(,7950) @c produces empty or non-empty output can tell whether cvs.texi(,7951) @c there were differences or not. But it seems like cvs.texi(,7952) @c there are cases with output but no differences cvs.texi(,7953) @c (testsuite basica-8b). It is not clear to me how cvs.texi(,7954) @c useful it is for a script to be able to check cvs.texi(,7955) @c whether there were differences. cvs.texi(,7956) @c FIXCVS? In previous versions of CVS, cvs diff cvs.texi(,7957) @c returned 0 for no differences, 1 for differences, or cvs.texi(,7958) @c 2 for errors. Is this behavior worth trying to cvs.texi(,7959) @c bring back (but what does it mean for VMS?)? cvs.texi(,7960) cvs.texi(,7961) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,7962) @node ~/.cvsrc cvs.texi(,7963) @appendixsec Default options and the ~/.cvsrc file cvs.texi(,7964) @cindex .cvsrc file cvs.texi(,7965) @cindex Option defaults cvs.texi(,7966) cvs.texi(,7967) There are some @code{command_options} that are used so cvs.texi(,7968) often that you might have set up an alias or some other cvs.texi(,7969) means to make sure you always specify that option. One cvs.texi(,7970) example (the one that drove the implementation of the cvs.texi(,7971) @file{.cvsrc} support, actually) is that many people find the cvs.texi(,7972) default output of the @samp{diff} command to be very cvs.texi(,7973) hard to read, and that either context diffs or unidiffs cvs.texi(,7974) are much easier to understand. cvs.texi(,7975) cvs.texi(,7976) The @file{~/.cvsrc} file is a way that you can add cvs.texi(,7977) default options to @code{cvs_commands} within cvs, cvs.texi(,7978) instead of relying on aliases or other shell scripts. cvs.texi(,7979) cvs.texi(,7980) The format of the @file{~/.cvsrc} file is simple. The cvs.texi(,7981) file is searched for a line that begins with the same cvs.texi(,7982) name as the @code{cvs_command} being executed. If a cvs.texi(,7983) match is found, then the remainder of the line is split cvs.texi(,7984) up (at whitespace characters) into separate options and cvs.texi(,7985) added to the command arguments @emph{before} any cvs.texi(,7986) options from the command line. cvs.texi(,7987) cvs.texi(,7988) If a command has two names (e.g., @code{checkout} and cvs.texi(,7989) @code{co}), the official name, not necessarily the one cvs.texi(,7990) used on the command line, will be used to match against cvs.texi(,7991) the file. So if this is the contents of the user's cvs.texi(,7992) @file{~/.cvsrc} file: cvs.texi(,7993) cvs.texi(,7994) @example cvs.texi(,7995) log -N cvs.texi(,7996) diff -uN cvs.texi(,7997) rdiff -u cvs.texi(,7998) update -Pd cvs.texi(,7999) checkout -P cvs.texi(,8000) release -d cvs.texi(,8001) @end example cvs.texi(,8002) cvs.texi(,8003) @noindent cvs.texi(,8004) the command @samp{cvs checkout foo} would have the cvs.texi(,8005) @samp{-P} option added to the arguments, as well as cvs.texi(,8006) @samp{cvs co foo}. cvs.texi(,8007) cvs.texi(,8008) With the example file above, the output from @samp{cvs cvs.texi(,8009) diff foobar} will be in unidiff format. @samp{cvs diff cvs.texi(,8010) -c foobar} will provide context diffs, as usual. cvs.texi(,8011) Getting "old" format diffs would be slightly more cvs.texi(,8012) complicated, because @code{diff} doesn't have an option cvs.texi(,8013) to specify use of the "old" format, so you would need cvs.texi(,8014) @samp{cvs -f diff foobar}. cvs.texi(,8015) cvs.texi(,8016) In place of the command name you can use @code{cvs} to cvs.texi(,8017) specify global options (@pxref{Global options}). For cvs.texi(,8018) example the following line in @file{.cvsrc} cvs.texi(,8019) cvs.texi(,8020) @example cvs.texi(,8021) cvs -z6 cvs.texi(,8022) @end example cvs.texi(,8023) cvs.texi(,8024) @noindent cvs.texi(,8025) causes @sc{cvs} to use compression level 6. cvs.texi(,8026) cvs.texi(,8027) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,8028) @node Global options cvs.texi(,8029) @appendixsec Global options cvs.texi(,8030) @cindex Options, global cvs.texi(,8031) @cindex Global options cvs.texi(,8032) @cindex Left-hand options cvs.texi(,8033) cvs.texi(,8034) The available @samp{cvs_options} (that are given to the cvs.texi(,8035) left of @samp{cvs_command}) are: cvs.texi(,8036) cvs.texi(,8037) @table @code cvs.texi(,8038) @item --allow-root=@var{rootdir} cvs.texi(,8039) Specify legal @sc{cvsroot} directory. See cvs.texi(,8040) @ref{Password authentication server}. cvs.texi(,8041) cvs.texi(,8042) @cindex Authentication, stream cvs.texi(,8043) @cindex Stream authentication cvs.texi(,8044) @item -a cvs.texi(,8045) Authenticate all communication between the client and cvs.texi(,8046) the server. Only has an effect on the @sc{cvs} client. cvs.texi(,8047) As of this writing, this is only implemented when using cvs.texi(,8048) a GSSAPI connection (@pxref{GSSAPI authenticated}). cvs.texi(,8049) Authentication prevents certain sorts of attacks cvs.texi(,8050) involving hijacking the active @sc{tcp} connection. cvs.texi(,8051) Enabling authentication does not enable encryption. cvs.texi(,8052) cvs.texi(,8053) @cindex RCSBIN, overriding cvs.texi(,8054) @cindex Overriding RCSBIN cvs.texi(,8055) @item -b @var{bindir} cvs.texi(,8056) In @sc{cvs} 1.9.18 and older, this specified that cvs.texi(,8057) @sc{rcs} programs are in the @var{bindir} directory. cvs.texi(,8058) Current versions of @sc{cvs} do not run @sc{rcs} cvs.texi(,8059) programs; for compatibility this option is accepted, cvs.texi(,8060) but it does nothing. cvs.texi(,8061) cvs.texi(,8062) @cindex TMPDIR, overriding cvs.texi(,8063) @cindex Overriding TMPDIR cvs.texi(,8064) @item -T @var{tempdir} cvs.texi(,8065) Use @var{tempdir} as the directory where temporary files are cvs.texi(,8066) located. Overrides the setting of the @code{$TMPDIR} environment cvs.texi(,8067) variable and any precompiled directory. This parameter should be cvs.texi(,8068) specified as an absolute pathname. cvs.texi(,8069) (When running client/server, @samp{-T} affects only the local process; cvs.texi(,8070) specifying @samp{-T} for the client has no effect on the server and cvs.texi(,8071) vice versa.) cvs.texi(,8072) cvs.texi(,8073) @cindex CVSROOT, overriding cvs.texi(,8074) @cindex Overriding CVSROOT cvs.texi(,8075) @item -d @var{cvs_root_directory} cvs.texi(,8076) Use @var{cvs_root_directory} as the root directory cvs.texi(,8077) pathname of the repository. Overrides the setting of cvs.texi(,8078) the @code{$CVSROOT} environment variable. @xref{Repository}. cvs.texi(,8079) cvs.texi(,8080) @cindex EDITOR, overriding cvs.texi(,8081) @cindex Overriding EDITOR cvs.texi(,8082) @item -e @var{editor} cvs.texi(,8083) Use @var{editor} to enter revision log information. Overrides the cvs.texi(,8084) setting of the @code{$CVSEDITOR} and @code{$EDITOR} cvs.texi(,8085) environment variables. For more information, see cvs.texi(,8086) @ref{Committing your changes}. cvs.texi(,8087) cvs.texi(,8088) @item -f cvs.texi(,8089) Do not read the @file{~/.cvsrc} file. This cvs.texi(,8090) option is most often used because of the cvs.texi(,8091) non-orthogonality of the @sc{cvs} option set. For cvs.texi(,8092) example, the @samp{cvs log} option @samp{-N} (turn off cvs.texi(,8093) display of tag names) does not have a corresponding cvs.texi(,8094) option to turn the display on. So if you have cvs.texi(,8095) @samp{-N} in the @file{~/.cvsrc} entry for @samp{log}, cvs.texi(,8096) you may need to use @samp{-f} to show the tag names. cvs.texi(,8097) cvs.texi(,8098) @item -H cvs.texi(,8099) @itemx --help cvs.texi(,8100) Display usage information about the specified @samp{cvs_command} cvs.texi(,8101) (but do not actually execute the command). If you don't specify cvs.texi(,8102) a command name, @samp{cvs -H} displays overall help for cvs.texi(,8103) @sc{cvs}, including a list of other help options. cvs.texi(,8104) @c It seems to me it is better to document it this way cvs.texi(,8105) @c rather than trying to update this documentation cvs.texi(,8106) @c every time that we add a --help-foo option. But cvs.texi(,8107) @c perhaps that is confusing... cvs.texi(,8108) cvs.texi(,8109) @item -l cvs.texi(,8110) Do not log the @samp{cvs_command} in the command history (but execute it cvs.texi(,8111) anyway). @xref{history}, for information on command history. cvs.texi(,8112) cvs.texi(,8113) @cindex Read-only repository mode cvs.texi(,8114) @item -R cvs.texi(,8115) Turns on read-only repository mode. This allows one to check out from a cvs.texi(,8116) read-only repository, such as within an anoncvs server, or from a CDROM cvs.texi(,8117) repository. cvs.texi(,8118) cvs.texi(,8119) Same effect as if the @code{CVSREADONLYFS} environment cvs.texi(,8120) variable is set. Using @samp{-R} can also considerably cvs.texi(,8121) speed up checkout's over NFS. cvs.texi(,8122) cvs.texi(,8123) @cindex Read-only mode cvs.texi(,8124) @item -n cvs.texi(,8125) Do not change any files. Attempt to execute the cvs.texi(,8126) @samp{cvs_command}, but only to issue reports; do not remove, cvs.texi(,8127) update, or merge any existing files, or create any new files. cvs.texi(,8128) cvs.texi(,8129) Note that @sc{cvs} will not necessarily produce exactly cvs.texi(,8130) the same output as without @samp{-n}. In some cases cvs.texi(,8131) the output will be the same, but in other cases cvs.texi(,8132) @sc{cvs} will skip some of the processing that would cvs.texi(,8133) have been required to produce the exact same output. cvs.texi(,8134) cvs.texi(,8135) @item -Q cvs.texi(,8136) Cause the command to be really quiet; the command will only cvs.texi(,8137) generate output for serious problems. cvs.texi(,8138) cvs.texi(,8139) @item -q cvs.texi(,8140) Cause the command to be somewhat quiet; informational messages, cvs.texi(,8141) such as reports of recursion through subdirectories, are cvs.texi(,8142) suppressed. cvs.texi(,8143) cvs.texi(,8144) @cindex Read-only files, and -r cvs.texi(,8145) @item -r cvs.texi(,8146) Make new working files read-only. Same effect cvs.texi(,8147) as if the @code{$CVSREAD} environment variable is set cvs.texi(,8148) (@pxref{Environment variables}). The default is to cvs.texi(,8149) make working files writable, unless watches are on cvs.texi(,8150) (@pxref{Watches}). cvs.texi(,8151) cvs.texi(,8152) @item -s @var{variable}=@var{value} cvs.texi(,8153) Set a user variable (@pxref{Variables}). cvs.texi(,8154) cvs.texi(,8155) @cindex Trace cvs.texi(,8156) @item -t cvs.texi(,8157) Trace program execution; display messages showing the steps of cvs.texi(,8158) @sc{cvs} activity. Particularly useful with @samp{-n} to explore the cvs.texi(,8159) potential impact of an unfamiliar command. cvs.texi(,8160) cvs.texi(,8161) @item -v cvs.texi(,8162) @item --version cvs.texi(,8163) Display version and copyright information for @sc{cvs}. cvs.texi(,8164) cvs.texi(,8165) @cindex CVSREAD, overriding cvs.texi(,8166) @cindex Overriding CVSREAD cvs.texi(,8167) @item -w cvs.texi(,8168) Make new working files read-write. Overrides the cvs.texi(,8169) setting of the @code{$CVSREAD} environment variable. cvs.texi(,8170) Files are created read-write by default, unless @code{$CVSREAD} is cvs.texi(,8171) set or @samp{-r} is given. cvs.texi(,8172) @c Note that -w only overrides -r and CVSREAD; it has cvs.texi(,8173) @c no effect on files which are readonly because of cvs.texi(,8174) @c "cvs watch on". My guess is that is the way it cvs.texi(,8175) @c should be (or should "cvs -w get" on a watched file cvs.texi(,8176) @c be the same as a get and a cvs edit?), but I'm not cvs.texi(,8177) @c completely sure whether to document it this way. cvs.texi(,8178) cvs.texi(,8179) @item -x cvs.texi(,8180) @cindex Encryption cvs.texi(,8181) Encrypt all communication between the client and the cvs.texi(,8182) server. Only has an effect on the @sc{cvs} client. As cvs.texi(,8183) of this writing, this is only implemented when using a cvs.texi(,8184) GSSAPI connection (@pxref{GSSAPI authenticated}) or a cvs.texi(,8185) Kerberos connection (@pxref{Kerberos authenticated}). cvs.texi(,8186) Enabling encryption implies that message traffic is cvs.texi(,8187) also authenticated. Encryption support is not cvs.texi(,8188) available by default; it must be enabled using a cvs.texi(,8189) special configure option, @file{--enable-encryption}, cvs.texi(,8190) when you build @sc{cvs}. cvs.texi(,8191) cvs.texi(,8192) @item -z @var{gzip-level} cvs.texi(,8193) @cindex Compression cvs.texi(,8194) @cindex Gzip cvs.texi(,8195) Set the compression level. cvs.texi(,8196) Valid levels are 1 (high speed, low compression) to cvs.texi(,8197) 9 (low speed, high compression), or 0 to disable cvs.texi(,8198) compression (the default). cvs.texi(,8199) Only has an effect on the @sc{cvs} client. cvs.texi(,8200) cvs.texi(,8201) @end table cvs.texi(,8202) cvs.texi(,8203) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,8204) @node Common options cvs.texi(,8205) @appendixsec Common command options cvs.texi(,8206) @cindex Common options cvs.texi(,8207) @cindex Right-hand options cvs.texi(,8208) cvs.texi(,8209) This section describes the @samp{command_options} that cvs.texi(,8210) are available across several @sc{cvs} commands. These cvs.texi(,8211) options are always given to the right of cvs.texi(,8212) @samp{cvs_command}. Not all cvs.texi(,8213) commands support all of these options; each option is cvs.texi(,8214) only supported for commands where it makes sense. cvs.texi(,8215) However, when a command has one of these options you cvs.texi(,8216) can almost always count on the same behavior of the cvs.texi(,8217) option as in other commands. (Other command options, cvs.texi(,8218) which are listed with the individual commands, may have cvs.texi(,8219) different behavior from one @sc{cvs} command to the other). cvs.texi(,8220) cvs.texi(,8221) @strong{Note: the @samp{history} command is an exception; it supports cvs.texi(,8222) many options that conflict even with these standard options.} cvs.texi(,8223) cvs.texi(,8224) @table @code cvs.texi(,8225) @cindex Dates cvs.texi(,8226) @cindex Time cvs.texi(,8227) @cindex Specifying dates cvs.texi(,8228) @item -D @var{date_spec} cvs.texi(,8229) Use the most recent revision no later than @var{date_spec}. cvs.texi(,8230) @var{date_spec} is a single argument, a date description cvs.texi(,8231) specifying a date in the past. cvs.texi(,8232) cvs.texi(,8233) The specification is @dfn{sticky} when you use it to make a cvs.texi(,8234) private copy of a source file; that is, when you get a working cvs.texi(,8235) file using @samp{-D}, @sc{cvs} records the date you specified, so that cvs.texi(,8236) further updates in the same directory will use the same date cvs.texi(,8237) (for more information on sticky tags/dates, @pxref{Sticky tags}). cvs.texi(,8238) cvs.texi(,8239) @samp{-D} is available with the @code{annotate}, @code{checkout}, cvs.texi(,8240) @code{diff}, @code{export}, @code{history}, cvs.texi(,8241) @code{rdiff}, @code{rtag}, @code{tag}, and @code{update} commands. cvs.texi(,8242) (The @code{history} command uses this option in a cvs.texi(,8243) slightly different way; @pxref{history options}). cvs.texi(,8244) cvs.texi(,8245) @c What other formats should we accept? I don't want cvs.texi(,8246) @c to start accepting a whole mess of non-standard cvs.texi(,8247) @c new formats (there are a lot which are in wide use in cvs.texi(,8248) @c one context or another), but practicality does cvs.texi(,8249) @c dictate some level of flexibility. cvs.texi(,8250) @c * POSIX.2 (e.g. touch, ls output, date) and other cvs.texi(,8251) @c POSIX and/or de facto unix standards (e.g. at). The cvs.texi(,8252) @c practice here is too inconsistent to be of any use. cvs.texi(,8253) @c * VMS dates. This is not a formal standard, but cvs.texi(,8254) @c there is a published specification (see SYS$ASCTIM cvs.texi(,8255) @c and SYS$BINTIM in the _VMS System Services Reference cvs.texi(,8256) @c Manual_), it is implemented consistently in VMS cvs.texi(,8257) @c utilities, and VMS users will expect CVS running on cvs.texi(,8258) @c VMS to support this format (and if we're going to do cvs.texi(,8259) @c that, better to make CVS support it on all cvs.texi(,8260) @c platforms. Maybe). cvs.texi(,8261) @c cvs.texi(,8262) @c NOTE: The tar manual has some documentation for cvs.texi(,8263) @c getdate.y (just for our info; we don't want to cvs.texi(,8264) @c attempt to document all the formats accepted by cvs.texi(,8265) @c getdate.y). cvs.texi(,8266) @c cvs.texi(,8267) @c One more note: In output, CVS should consistently cvs.texi(,8268) @c use one date format, and that format should be one that cvs.texi(,8269) @c it accepts in input as well. The former isn't cvs.texi(,8270) @c really true (see survey below), and I'm not cvs.texi(,8271) @c sure that either of those formats is accepted in cvs.texi(,8272) @c input. cvs.texi(,8273) @c cvs.texi(,8274) @c cvs log cvs.texi(,8275) @c current 1996/01/02 13:45:31 cvs.texi(,8276) @c Internet 02 Jan 1996 13:45:31 UT cvs.texi(,8277) @c ISO 1996-01-02 13:45:31 cvs.texi(,8278) @c cvs ann cvs.texi(,8279) @c current 02-Jan-96 cvs.texi(,8280) @c Internet-like 02 Jan 96 cvs.texi(,8281) @c ISO 96-01-02 cvs.texi(,8282) @c cvs status cvs.texi(,8283) @c current Tue Jun 11 02:54:53 1996 cvs.texi(,8284) @c Internet [Tue,] 11 Jun 1996 02:54:53 cvs.texi(,8285) @c ISO 1996-06-11 02:54:53 cvs.texi(,8286) @c note: date possibly should be omitted entirely for cvs.texi(,8287) @c other reasons. cvs.texi(,8288) @c cvs editors cvs.texi(,8289) @c current Tue Jun 11 02:54:53 1996 GMT cvs.texi(,8290) @c cvs history cvs.texi(,8291) @c current 06/11 02:54 +0000 cvs.texi(,8292) @c any others? cvs.texi(,8293) @c There is a good chance the proper solution has to cvs.texi(,8294) @c involve at least some level of letting the user cvs.texi(,8295) @c decide which format (with the default being the cvs.texi(,8296) @c formats CVS has always used; changing these might be cvs.texi(,8297) @c _very_ disruptive since scripts may very well be cvs.texi(,8298) @c parsing them). cvs.texi(,8299) @c cvs.texi(,8300) @c Another random bit of prior art concerning dates is cvs.texi(,8301) @c the strptime function which takes templates such as cvs.texi(,8302) @c "%m/%d/%y", and apparent a variant of getdate() cvs.texi(,8303) @c which also honors them. See cvs.texi(,8304) @c X/Open CAE Specification, System Interfaces and cvs.texi(,8305) @c Headers Issue 4, Version 2 (September 1994), in the cvs.texi(,8306) @c entry for getdate() on page 231 cvs.texi(,8307) cvs.texi(,8308) @cindex Timezone, in input cvs.texi(,8309) @cindex Zone, time, in input cvs.texi(,8310) A wide variety of date formats are supported by cvs.texi(,8311) @sc{cvs}. The most standard ones are ISO8601 (from the cvs.texi(,8312) International Standards Organization) and the Internet cvs.texi(,8313) e-mail standard (specified in RFC822 as amended by cvs.texi(,8314) RFC1123). cvs.texi(,8315) cvs.texi(,8316) @c Probably should be doing more to spell out just what cvs.texi(,8317) @c the rules are, rather than just giving examples. cvs.texi(,8318) @c But I want to keep this simple too. cvs.texi(,8319) @c So I don't know.... cvs.texi(,8320) @c A few specific issues: (1) Maybe should reassure cvs.texi(,8321) @c people that years after 2000 cvs.texi(,8322) @c work (they are in the testsuite, so they do indeed cvs.texi(,8323) @c work). (2) What do two digit years cvs.texi(,8324) @c mean? Where do we accept them? (3) Local times can cvs.texi(,8325) @c be ambiguous or nonexistent if they fall during the cvs.texi(,8326) @c hour when daylight savings time goes into or out of cvs.texi(,8327) @c effect. Pretty obscure, so I'm not at all sure we cvs.texi(,8328) @c should be documenting the behavior in that case. cvs.texi(,8329) ISO8601 dates have many variants but a few examples cvs.texi(,8330) are: cvs.texi(,8331) cvs.texi(,8332) @example cvs.texi(,8333) 1972-09-24 cvs.texi(,8334) 1972-09-24 20:05 cvs.texi(,8335) @end example cvs.texi(,8336) @c I doubt we really accept all ISO8601 format dates cvs.texi(,8337) @c (for example, decimal hours like 1972-09-24 20,2) cvs.texi(,8338) @c I'm not sure we should, many of them are pretty cvs.texi(,8339) @c bizarre and it has lots of gratuitous multiple ways cvs.texi(,8340) @c to specify the same thing. cvs.texi(,8341) cvs.texi(,8342) There are a lot more ISO8601 date formats, and @sc{cvs} cvs.texi(,8343) accepts many of them, but you probably don't want to cvs.texi(,8344) hear the @emph{whole} long story :-). cvs.texi(,8345) cvs.texi(,8346) @c Citing a URL here is kind of problematic given how cvs.texi(,8347) @c much they change and people who have old versions of cvs.texi(,8348) @c this manual, but in case we want to reinstate an cvs.texi(,8349) @c ISO8601 URL, a few are: cvs.texi(,8350) @c http://www.saqqara.demon.co.uk/datefmt.htm cvs.texi(,8351) @c http://www.cl.cam.ac.uk/~mgk25/iso-time.html cvs.texi(,8352) @c Citing some other ISO8601 source is probably even cvs.texi(,8353) @c worse :-). cvs.texi(,8354) cvs.texi(,8355) In addition to the dates allowed in Internet e-mail cvs.texi(,8356) itself, @sc{cvs} also allows some of the fields to be cvs.texi(,8357) omitted. For example: cvs.texi(,8358) @c FIXME: Need to figure out better, and document, cvs.texi(,8359) @c what we want to allow the user to omit. cvs.texi(,8360) @c NOTE: "omit" does not imply "reorder". cvs.texi(,8361) @c FIXME: Need to cite a web page describing how to get cvs.texi(,8362) @c RFC's. cvs.texi(,8363) cvs.texi(,8364) @example cvs.texi(,8365) 24 Sep 1972 20:05 cvs.texi(,8366) 24 Sep cvs.texi(,8367) @end example cvs.texi(,8368) cvs.texi(,8369) The date is interpreted as being in the cvs.texi(,8370) local timezone, unless a specific timezone is cvs.texi(,8371) specified. cvs.texi(,8372) cvs.texi(,8373) These two date formats are preferred. However, cvs.texi(,8374) @sc{cvs} currently accepts a wide variety of other date cvs.texi(,8375) formats. They are intentionally not documented here in cvs.texi(,8376) any detail, and future versions of @sc{cvs} might not cvs.texi(,8377) accept all of them. cvs.texi(,8378) @c We should document and testsuite "now" and cvs.texi(,8379) @c "yesterday". "now" is mentioned in the FAQ and cvs.texi(,8380) @c "yesterday" is mentioned in this document (and the cvs.texi(,8381) @c message from "cvs import" suggesting a merge cvs.texi(,8382) @c command). What else? Probably some/all of the "3 cvs.texi(,8383) @c weeks ago" family. cvs.texi(,8384) @c cvs.texi(,8385) @c Maybe at cvs.texi(,8386) @c some point have CVS start give warnings on "unofficial" cvs.texi(,8387) @c formats (many of which might be typos or user cvs.texi(,8388) @c misunderstandings, and/or formats people never/rarely cvs.texi(,8389) @c use to specify dates)? cvs.texi(,8390) cvs.texi(,8391) One such format is cvs.texi(,8392) @code{@var{month}/@var{day}/@var{year}}. This may cvs.texi(,8393) confuse people who are accustomed to having the month cvs.texi(,8394) and day in the other order; @samp{1/4/96} is January 4, cvs.texi(,8395) not April 1. cvs.texi(,8396) cvs.texi(,8397) Remember to quote the argument to the @samp{-D} cvs.texi(,8398) flag so that your shell doesn't interpret spaces as cvs.texi(,8399) argument separators. A command using the @samp{-D} cvs.texi(,8400) flag can look like this: cvs.texi(,8401) cvs.texi(,8402) @example cvs.texi(,8403) $ cvs diff -D "1 hour ago" cvs.texinfo cvs.texi(,8404) @end example cvs.texi(,8405) cvs.texi(,8406) @cindex Forcing a tag match cvs.texi(,8407) @item -f cvs.texi(,8408) When you specify a particular date or tag to @sc{cvs} commands, they cvs.texi(,8409) normally ignore files that do not contain the tag (or did not cvs.texi(,8410) exist prior to the date) that you specified. Use the @samp{-f} option cvs.texi(,8411) if you want files retrieved even when there is no match for the cvs.texi(,8412) tag or date. (The most recent revision of the file cvs.texi(,8413) will be used). cvs.texi(,8414) cvs.texi(,8415) Note that even with @samp{-f}, a tag that you specify cvs.texi(,8416) must exist (that is, in some file, not necessary in cvs.texi(,8417) every file). This is so that @sc{cvs} will continue to cvs.texi(,8418) give an error if you mistype a tag name. cvs.texi(,8419) cvs.texi(,8420) @need 800 cvs.texi(,8421) @samp{-f} is available with these commands: cvs.texi(,8422) @code{annotate}, @code{checkout}, @code{export}, cvs.texi(,8423) @code{rdiff}, @code{rtag}, and @code{update}. cvs.texi(,8424) cvs.texi(,8425) @strong{WARNING: The @code{commit} and @code{remove} cvs.texi(,8426) commands also have a cvs.texi(,8427) @samp{-f} option, but it has a different behavior for cvs.texi(,8428) those commands. See @ref{commit options}, and cvs.texi(,8429) @ref{Removing files}.} cvs.texi(,8430) cvs.texi(,8431) @item -k @var{kflag} cvs.texi(,8432) Override the default processing of RCS keywords other than cvs.texi(,8433) @samp{-kb}. @xref{Keyword substitution}, for the meaning of cvs.texi(,8434) @var{kflag}. Used with the @code{checkout} and @code{update} cvs.texi(,8435) commands, your @var{kflag} specification is cvs.texi(,8436) @dfn{sticky}; that is, when you use this option cvs.texi(,8437) with a @code{checkout} or @code{update} command, cvs.texi(,8438) @sc{cvs} associates your selected @var{kflag} with any files cvs.texi(,8439) it operates on, and continues to use that @var{kflag} with future cvs.texi(,8440) commands on the same files until you specify otherwise. cvs.texi(,8441) cvs.texi(,8442) The @samp{-k} option is available with the @code{add}, cvs.texi(,8443) @code{checkout}, @code{diff}, @code{export}, @code{import} and cvs.texi(,8444) @code{update} commands. cvs.texi(,8445) cvs.texi(,8446) @strong{WARNING: Prior to CVS version 1.12.2, the @samp{-k} flag cvs.texi(,8447) overrode the @samp{-kb} indication for a binary file. This could cvs.texi(,8448) sometimes corrupt binary files. @xref{Merging and keywords}, for cvs.texi(,8449) more.} cvs.texi(,8450) cvs.texi(,8451) @item -l cvs.texi(,8452) Local; run only in current working directory, rather than cvs.texi(,8453) recursing through subdirectories. cvs.texi(,8454) cvs.texi(,8455) Available with the following commands: @code{annotate}, @code{checkout}, cvs.texi(,8456) @code{commit}, @code{diff}, @code{edit}, @code{editors}, @code{export}, cvs.texi(,8457) @code{log}, @code{rdiff}, @code{remove}, @code{rtag}, cvs.texi(,8458) @code{status}, @code{tag}, @code{unedit}, @code{update}, @code{watch}, cvs.texi(,8459) and @code{watchers}. cvs.texi(,8460) cvs.texi(,8461) @cindex Editor, avoiding invocation of cvs.texi(,8462) @cindex Avoiding editor invocation cvs.texi(,8463) @item -m @var{message} cvs.texi(,8464) Use @var{message} as log information, instead of cvs.texi(,8465) invoking an editor. cvs.texi(,8466) cvs.texi(,8467) Available with the following commands: @code{add}, cvs.texi(,8468) @code{commit} and @code{import}. cvs.texi(,8469) cvs.texi(,8470) @item -n cvs.texi(,8471) Do not run any tag program. (A program can be cvs.texi(,8472) specified to run in the modules cvs.texi(,8473) database (@pxref{modules}); this option bypasses it). cvs.texi(,8474) cvs.texi(,8475) @strong{Note: this is not the same as the @samp{cvs -n} cvs.texi(,8476) program option, which you can specify to the left of a cvs command!} cvs.texi(,8477) cvs.texi(,8478) Available with the @code{checkout}, @code{commit}, @code{export}, cvs.texi(,8479) and @code{rtag} commands. cvs.texi(,8480) cvs.texi(,8481) @item -P cvs.texi(,8482) Prune empty directories. See @ref{Removing directories}. cvs.texi(,8483) cvs.texi(,8484) @item -p cvs.texi(,8485) Pipe the files retrieved from the repository to standard output, cvs.texi(,8486) rather than writing them in the current directory. Available cvs.texi(,8487) with the @code{checkout} and @code{update} commands. cvs.texi(,8488) cvs.texi(,8489) @item -R cvs.texi(,8490) Process directories recursively. This is on by default. cvs.texi(,8491) cvs.texi(,8492) Available with the following commands: @code{annotate}, @code{checkout}, cvs.texi(,8493) @code{commit}, @code{diff}, @code{edit}, @code{editors}, @code{export}, cvs.texi(,8494) @code{rdiff}, @code{remove}, @code{rtag}, cvs.texi(,8495) @code{status}, @code{tag}, @code{unedit}, @code{update}, @code{watch}, cvs.texi(,8496) and @code{watchers}. cvs.texi(,8497) cvs.texi(,8498) @item -r @var{tag} cvs.texi(,8499) @cindex HEAD, special tag cvs.texi(,8500) @cindex BASE, special tag cvs.texi(,8501) Use the revision specified by the @var{tag} argument instead of the cvs.texi(,8502) default @dfn{head} revision. As well as arbitrary tags defined cvs.texi(,8503) with the @code{tag} or @code{rtag} command, two special tags are cvs.texi(,8504) always available: @samp{HEAD} refers to the most recent version cvs.texi(,8505) available in the repository, and @samp{BASE} refers to the cvs.texi(,8506) revision you last checked out into the current working directory. cvs.texi(,8507) cvs.texi(,8508) @c FIXME: What does HEAD really mean? I believe that cvs.texi(,8509) @c the current answer is the head of the default branch cvs.texi(,8510) @c for all cvs commands except diff. For diff, it cvs.texi(,8511) @c seems to be (a) the head of the trunk (or the default cvs.texi(,8512) @c branch?) if there is no sticky tag, (b) the head of the cvs.texi(,8513) @c branch for the sticky tag, if there is a sticky tag. cvs.texi(,8514) @c (b) is ugly as it differs cvs.texi(,8515) @c from what HEAD means for other commands, but people cvs.texi(,8516) @c and/or scripts are quite possibly used to it. cvs.texi(,8517) @c See "head" tests in sanity.sh. cvs.texi(,8518) @c Probably the best fix is to introduce two new cvs.texi(,8519) @c special tags, ".thead" for the head of the trunk, cvs.texi(,8520) @c and ".bhead" for the head of the current branch. cvs.texi(,8521) @c Then deprecate HEAD. This has the advantage of cvs.texi(,8522) @c not surprising people with a change to HEAD, and a cvs.texi(,8523) @c side benefit of also phasing out the poorly-named cvs.texi(,8524) @c HEAD (see discussion of reserved tag names in node cvs.texi(,8525) @c "Tags"). Of course, .thead and .bhead should be cvs.texi(,8526) @c carefully implemented (with the implementation the cvs.texi(,8527) @c same for "diff" as for everyone else), test cases cvs.texi(,8528) @c written (similar to the ones in "head"), new tests cvs.texi(,8529) @c cases written for things like default branches, &c. cvs.texi(,8530) cvs.texi(,8531) The tag specification is sticky when you use this cvs.texi(,8532) @c option cvs.texi(,8533) with @code{checkout} or @code{update} to make your own cvs.texi(,8534) copy of a file: @sc{cvs} remembers the tag and continues to use it on cvs.texi(,8535) future update commands, until you specify otherwise (for more information cvs.texi(,8536) on sticky tags/dates, @pxref{Sticky tags}). cvs.texi(,8537) cvs.texi(,8538) The tag can be either a symbolic or numeric tag, as cvs.texi(,8539) described in @ref{Tags}, or the name of a branch, as cvs.texi(,8540) described in @ref{Branching and merging}. cvs.texi(,8541) cvs.texi(,8542) Specifying the @samp{-q} global option along with the cvs.texi(,8543) @samp{-r} command option is often useful, to suppress cvs.texi(,8544) the warning messages when the @sc{rcs} file cvs.texi(,8545) does not contain the specified tag. cvs.texi(,8546) cvs.texi(,8547) @strong{Note: this is not the same as the overall @samp{cvs -r} option, cvs.texi(,8548) which you can specify to the left of a @sc{cvs} command!} cvs.texi(,8549) cvs.texi(,8550) @samp{-r} is available with the @code{checkout}, @code{commit}, cvs.texi(,8551) @code{diff}, @code{history}, @code{export}, @code{rdiff}, cvs.texi(,8552) @code{rtag}, and @code{update} commands. cvs.texi(,8553) cvs.texi(,8554) @item -W cvs.texi(,8555) Specify file names that should be filtered. You can cvs.texi(,8556) use this option repeatedly. The spec can be a file cvs.texi(,8557) name pattern of the same type that you can specify in cvs.texi(,8558) the @file{.cvswrappers} file. cvs.texi(,8559) Available with the following commands: @code{import}, cvs.texi(,8560) and @code{update}. cvs.texi(,8561) cvs.texi(,8562) @end table cvs.texi(,8563) cvs.texi(,8564) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,8565) @node admin cvs.texi(,8566) @appendixsec admin---Administration cvs.texi(,8567) @cindex Admin (subcommand) cvs.texi(,8568) cvs.texi(,8569) @itemize @bullet cvs.texi(,8570) @item cvs.texi(,8571) Requires: repository, working directory. cvs.texi(,8572) @item cvs.texi(,8573) Changes: repository. cvs.texi(,8574) @item cvs.texi(,8575) Synonym: rcs cvs.texi(,8576) @end itemize cvs.texi(,8577) cvs.texi(,8578) This is the @sc{cvs} interface to assorted cvs.texi(,8579) administrative facilities. Some of them have cvs.texi(,8580) questionable usefulness for @sc{cvs} but exist for cvs.texi(,8581) historical purposes. Some of the questionable options cvs.texi(,8582) are likely to disappear in the future. This command cvs.texi(,8583) @emph{does} work recursively, so extreme care should be cvs.texi(,8584) used. cvs.texi(,8585) cvs.texi(,8586) @cindex cvsadmin cvs.texi(,8587) @cindex UserAdminOptions, in CVSROOT/config cvs.texi(,8588) On unix, if there is a group named @code{cvsadmin}, cvs.texi(,8589) only members of that group can run @code{cvs admin} cvs.texi(,8590) commands, except for those specified using the cvs.texi(,8591) @code{UserAdminOptions} configuration option in the cvs.texi(,8592) @file{CVSROOT/config} file. Options specified using cvs.texi(,8593) @code{UserAdminOptions} can be run by any user. See cvs.texi(,8594) @ref{config} for more on @code{UserAdminOptions}. cvs.texi(,8595) cvs.texi(,8596) The @code{cvsadmin} group should exist on the server, cvs.texi(,8597) or any system running the non-client/server @sc{cvs}. cvs.texi(,8598) To disallow @code{cvs admin} for all users, create a cvs.texi(,8599) group with no users in it. On NT, the @code{cvsadmin} cvs.texi(,8600) feature does not exist and all users cvs.texi(,8601) can run @code{cvs admin}. cvs.texi(,8602) cvs.texi(,8603) @menu cvs.texi(,8604) * admin options:: admin options cvs.texi(,8605) @end menu cvs.texi(,8606) cvs.texi(,8607) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,8608) @node admin options cvs.texi(,8609) @appendixsubsec admin options cvs.texi(,8610) cvs.texi(,8611) Some of these options have questionable usefulness for cvs.texi(,8612) @sc{cvs} but exist for historical purposes. Some even cvs.texi(,8613) make it impossible to use @sc{cvs} until you undo the cvs.texi(,8614) effect! cvs.texi(,8615) cvs.texi(,8616) @table @code cvs.texi(,8617) @item -A@var{oldfile} cvs.texi(,8618) Might not work together with @sc{cvs}. Append the cvs.texi(,8619) access list of @var{oldfile} to the access list of the cvs.texi(,8620) @sc{rcs} file. cvs.texi(,8621) cvs.texi(,8622) @item -a@var{logins} cvs.texi(,8623) Might not work together with @sc{cvs}. Append the cvs.texi(,8624) login names appearing in the comma-separated list cvs.texi(,8625) @var{logins} to the access list of the @sc{rcs} file. cvs.texi(,8626) cvs.texi(,8627) @item -b[@var{rev}] cvs.texi(,8628) Set the default branch to @var{rev}. In @sc{cvs}, you cvs.texi(,8629) normally do not manipulate default branches; sticky cvs.texi(,8630) tags (@pxref{Sticky tags}) are a better way to decide cvs.texi(,8631) which branch you want to work on. There is one reason cvs.texi(,8632) to run @code{cvs admin -b}: to revert to the vendor's cvs.texi(,8633) version when using vendor branches (@pxref{Reverting cvs.texi(,8634) local changes}). cvs.texi(,8635) There can be no space between @samp{-b} and its argument. cvs.texi(,8636) @c Hmm, we don't document the usage where rev is cvs.texi(,8637) @c omitted. Maybe that usage can/should be deprecated cvs.texi(,8638) @c (and replaced with -bHEAD or something?) (so we can toss cvs.texi(,8639) @c the optional argument). Note that -bHEAD does not cvs.texi(,8640) @c work, as of 17 Sep 1997, but probably will once "cvs cvs.texi(,8641) @c admin" is internal to CVS. cvs.texi(,8642) cvs.texi(,8643) @cindex Comment leader cvs.texi(,8644) @item -c@var{string} cvs.texi(,8645) Sets the comment leader to @var{string}. The comment cvs.texi(,8646) leader is not used by current versions of @sc{cvs} or cvs.texi(,8647) @sc{rcs} 5.7. Therefore, you can almost surely not cvs.texi(,8648) worry about it. @xref{Keyword substitution}. cvs.texi(,8649) cvs.texi(,8650) @item -e[@var{logins}] cvs.texi(,8651) Might not work together with @sc{cvs}. Erase the login cvs.texi(,8652) names appearing in the comma-separated list cvs.texi(,8653) @var{logins} from the access list of the RCS file. If cvs.texi(,8654) @var{logins} is omitted, erase the entire access list. cvs.texi(,8655) There can be no space between @samp{-e} and its argument. cvs.texi(,8656) cvs.texi(,8657) @item -I cvs.texi(,8658) Run interactively, even if the standard input is not a cvs.texi(,8659) terminal. This option does not work with the cvs.texi(,8660) client/server @sc{cvs} and is likely to disappear in cvs.texi(,8661) a future release of @sc{cvs}. cvs.texi(,8662) cvs.texi(,8663) @item -i cvs.texi(,8664) Useless with @sc{cvs}. This creates and initializes a cvs.texi(,8665) new @sc{rcs} file, without depositing a revision. With cvs.texi(,8666) @sc{cvs}, add files with the @code{cvs add} command cvs.texi(,8667) (@pxref{Adding files}). cvs.texi(,8668) cvs.texi(,8669) @item -k@var{subst} cvs.texi(,8670) Set the default keyword cvs.texi(,8671) substitution to @var{subst}. @xref{Keyword cvs.texi(,8672) substitution}. Giving an explicit @samp{-k} option to cvs.texi(,8673) @code{cvs update}, @code{cvs export}, or @code{cvs cvs.texi(,8674) checkout} overrides this default. cvs.texi(,8675) cvs.texi(,8676) @item -l[@var{rev}] cvs.texi(,8677) Lock the revision with number @var{rev}. If a branch cvs.texi(,8678) is given, lock the latest revision on that branch. If cvs.texi(,8679) @var{rev} is omitted, lock the latest revision on the cvs.texi(,8680) default branch. There can be no space between cvs.texi(,8681) @samp{-l} and its argument. cvs.texi(,8682) cvs.texi(,8683) This can be used in conjunction with the cvs.texi(,8684) @file{rcslock.pl} script in the @file{contrib} cvs.texi(,8685) directory of the @sc{cvs} source distribution to cvs.texi(,8686) provide reserved checkouts (where only one user can be cvs.texi(,8687) editing a given file at a time). See the comments in cvs.texi(,8688) that file for details (and see the @file{README} file cvs.texi(,8689) in that directory for disclaimers about the unsupported cvs.texi(,8690) nature of contrib). According to comments in that cvs.texi(,8691) file, locking must set to strict (which is the default). cvs.texi(,8692) cvs.texi(,8693) @item -L cvs.texi(,8694) Set locking to strict. Strict locking means that the cvs.texi(,8695) owner of an RCS file is not exempt from locking for cvs.texi(,8696) checkin. For use with @sc{cvs}, strict locking must be cvs.texi(,8697) set; see the discussion under the @samp{-l} option above. cvs.texi(,8698) cvs.texi(,8699) @cindex Changing a log message cvs.texi(,8700) @cindex Replacing a log message cvs.texi(,8701) @cindex Correcting a log message cvs.texi(,8702) @cindex Fixing a log message cvs.texi(,8703) @cindex Log message, correcting cvs.texi(,8704) @item -m@var{rev}:@var{msg} cvs.texi(,8705) Replace the log message of revision @var{rev} with cvs.texi(,8706) @var{msg}. cvs.texi(,8707) cvs.texi(,8708) @c The rcs -M option, to suppress sending mail, has never been cvs.texi(,8709) @c documented as a cvs admin option. cvs.texi(,8710) cvs.texi(,8711) @item -N@var{name}[:[@var{rev}]] cvs.texi(,8712) Act like @samp{-n}, except override any previous cvs.texi(,8713) assignment of @var{name}. For use with magic branches, cvs.texi(,8714) see @ref{Magic branch numbers}. cvs.texi(,8715) cvs.texi(,8716) @item -n@var{name}[:[@var{rev}]] cvs.texi(,8717) Associate the symbolic name @var{name} with the branch cvs.texi(,8718) or revision @var{rev}. It is normally better to use cvs.texi(,8719) @samp{cvs tag} or @samp{cvs rtag} instead. Delete the cvs.texi(,8720) symbolic name if both @samp{:} and @var{rev} are cvs.texi(,8721) omitted; otherwise, print an error message if cvs.texi(,8722) @var{name} is already associated with another number. cvs.texi(,8723) If @var{rev} is symbolic, it is expanded before cvs.texi(,8724) association. A @var{rev} consisting of a branch number cvs.texi(,8725) followed by a @samp{.} stands for the current latest cvs.texi(,8726) revision in the branch. A @samp{:} with an empty cvs.texi(,8727) @var{rev} stands for the current latest revision on the cvs.texi(,8728) default branch, normally the trunk. For example, cvs.texi(,8729) @samp{cvs admin -n@var{name}:} associates @var{name} with the cvs.texi(,8730) current latest revision of all the RCS files; cvs.texi(,8731) this contrasts with @samp{cvs admin -n@var{name}:$} which cvs.texi(,8732) associates @var{name} with the revision numbers cvs.texi(,8733) extracted from keyword strings in the corresponding cvs.texi(,8734) working files. cvs.texi(,8735) cvs.texi(,8736) @cindex Deleting revisions cvs.texi(,8737) @cindex Outdating revisions cvs.texi(,8738) @cindex Saving space cvs.texi(,8739) @item -o@var{range} cvs.texi(,8740) Deletes (@dfn{outdates}) the revisions given by cvs.texi(,8741) @var{range}. cvs.texi(,8742) cvs.texi(,8743) Note that this command can be quite dangerous unless cvs.texi(,8744) you know @emph{exactly} what you are doing (for example cvs.texi(,8745) see the warnings below about how the cvs.texi(,8746) @var{rev1}:@var{rev2} syntax is confusing). cvs.texi(,8747) cvs.texi(,8748) If you are short on disc this option might help you. cvs.texi(,8749) But think twice before using it---there is no way short cvs.texi(,8750) of restoring the latest backup to undo this command! cvs.texi(,8751) If you delete different revisions than you planned, cvs.texi(,8752) either due to carelessness or (heaven forbid) a @sc{cvs} cvs.texi(,8753) bug, there is no opportunity to correct the error cvs.texi(,8754) before the revisions are deleted. It probably would be cvs.texi(,8755) a good idea to experiment on a copy of the repository cvs.texi(,8756) first. cvs.texi(,8757) cvs.texi(,8758) Specify @var{range} in one of the following ways: cvs.texi(,8759) cvs.texi(,8760) @table @code cvs.texi(,8761) @item @var{rev1}::@var{rev2} cvs.texi(,8762) Collapse all revisions between rev1 and rev2, so that cvs.texi(,8763) @sc{cvs} only stores the differences associated with going cvs.texi(,8764) from rev1 to rev2, not intermediate steps. For cvs.texi(,8765) example, after @samp{-o 1.3::1.5} one can retrieve cvs.texi(,8766) revision 1.3, revision 1.5, or the differences to get cvs.texi(,8767) from 1.3 to 1.5, but not the revision 1.4, or the cvs.texi(,8768) differences between 1.3 and 1.4. Other examples: cvs.texi(,8769) @samp{-o 1.3::1.4} and @samp{-o 1.3::1.3} have no cvs.texi(,8770) effect, because there are no intermediate revisions to cvs.texi(,8771) remove. cvs.texi(,8772) cvs.texi(,8773) @item ::@var{rev} cvs.texi(,8774) Collapse revisions between the beginning of the branch cvs.texi(,8775) containing @var{rev} and @var{rev} itself. The cvs.texi(,8776) branchpoint and @var{rev} are left intact. For cvs.texi(,8777) example, @samp{-o ::1.3.2.6} deletes revision 1.3.2.1, cvs.texi(,8778) revision 1.3.2.5, and everything in between, but leaves cvs.texi(,8779) 1.3 and 1.3.2.6 intact. cvs.texi(,8780) cvs.texi(,8781) @item @var{rev}:: cvs.texi(,8782) Collapse revisions between @var{rev} and the end of the cvs.texi(,8783) branch containing @var{rev}. Revision @var{rev} is cvs.texi(,8784) left intact but the head revision is deleted. cvs.texi(,8785) cvs.texi(,8786) @item @var{rev} cvs.texi(,8787) Delete the revision @var{rev}. For example, @samp{-o cvs.texi(,8788) 1.3} is equivalent to @samp{-o 1.2::1.4}. cvs.texi(,8789) cvs.texi(,8790) @item @var{rev1}:@var{rev2} cvs.texi(,8791) Delete the revisions from @var{rev1} to @var{rev2}, cvs.texi(,8792) inclusive, on the same branch. One will not be able to cvs.texi(,8793) retrieve @var{rev1} or @var{rev2} or any of the cvs.texi(,8794) revisions in between. For example, the command cvs.texi(,8795) @samp{cvs admin -oR_1_01:R_1_02 .} is rarely useful. cvs.texi(,8796) It means to delete revisions up to, and including, the cvs.texi(,8797) tag R_1_02. But beware! If there are files that have not cvs.texi(,8798) changed between R_1_02 and R_1_03 the file will have cvs.texi(,8799) @emph{the same} numerical revision number assigned to cvs.texi(,8800) the tags R_1_02 and R_1_03. So not only will it be cvs.texi(,8801) impossible to retrieve R_1_02; R_1_03 will also have to cvs.texi(,8802) be restored from the tapes! In most cases you want to cvs.texi(,8803) specify @var{rev1}::@var{rev2} instead. cvs.texi(,8804) cvs.texi(,8805) @item :@var{rev} cvs.texi(,8806) Delete revisions from the beginning of the cvs.texi(,8807) branch containing @var{rev} up to and including cvs.texi(,8808) @var{rev}. cvs.texi(,8809) cvs.texi(,8810) @item @var{rev}: cvs.texi(,8811) Delete revisions from revision @var{rev}, including cvs.texi(,8812) @var{rev} itself, to the end of the branch containing cvs.texi(,8813) @var{rev}. cvs.texi(,8814) @end table cvs.texi(,8815) cvs.texi(,8816) None of the revisions to be deleted may have cvs.texi(,8817) branches or locks. cvs.texi(,8818) cvs.texi(,8819) If any of the revisions to be deleted have symbolic cvs.texi(,8820) names, and one specifies one of the @samp{::} syntaxes, cvs.texi(,8821) then @sc{cvs} will give an error and not delete any cvs.texi(,8822) revisions. If you really want to delete both the cvs.texi(,8823) symbolic names and the revisions, first delete the cvs.texi(,8824) symbolic names with @code{cvs tag -d}, then run cvs.texi(,8825) @code{cvs admin -o}. If one specifies the cvs.texi(,8826) non-@samp{::} syntaxes, then @sc{cvs} will delete the cvs.texi(,8827) revisions but leave the symbolic names pointing to cvs.texi(,8828) nonexistent revisions. This behavior is preserved for cvs.texi(,8829) compatibility with previous versions of @sc{cvs}, but cvs.texi(,8830) because it isn't very useful, in the future it may cvs.texi(,8831) change to be like the @samp{::} case. cvs.texi(,8832) cvs.texi(,8833) Due to the way @sc{cvs} handles branches @var{rev} cvs.texi(,8834) cannot be specified symbolically if it is a branch. cvs.texi(,8835) @xref{Magic branch numbers}, for an explanation. cvs.texi(,8836) @c FIXME: is this still true? I suspect not. cvs.texi(,8837) cvs.texi(,8838) Make sure that no-one has checked out a copy of the cvs.texi(,8839) revision you outdate. Strange things will happen if he cvs.texi(,8840) starts to edit it and tries to check it back in. For cvs.texi(,8841) this reason, this option is not a good way to take back cvs.texi(,8842) a bogus commit; commit a new revision undoing the bogus cvs.texi(,8843) change instead (@pxref{Merging two revisions}). cvs.texi(,8844) cvs.texi(,8845) @item -q cvs.texi(,8846) Run quietly; do not print diagnostics. cvs.texi(,8847) cvs.texi(,8848) @item -s@var{state}[:@var{rev}] cvs.texi(,8849) Useful with @sc{cvs}. Set the state attribute of the cvs.texi(,8850) revision @var{rev} to @var{state}. If @var{rev} is a cvs.texi(,8851) branch number, assume the latest revision on that cvs.texi(,8852) branch. If @var{rev} is omitted, assume the latest cvs.texi(,8853) revision on the default branch. Any identifier is cvs.texi(,8854) acceptable for @var{state}. A useful set of states is cvs.texi(,8855) @samp{Exp} (for experimental), @samp{Stab} (for cvs.texi(,8856) stable), and @samp{Rel} (for released). By default, cvs.texi(,8857) the state of a new revision is set to @samp{Exp} when cvs.texi(,8858) it is created. The state is visible in the output from cvs.texi(,8859) @var{cvs log} (@pxref{log}), and in the cvs.texi(splitrcskeyword,8860) @samp{$@i{}Log$} and @samp{$@i{}State$} keywords cvs.texi(,8861) (@pxref{Keyword substitution}). Note that @sc{cvs} cvs.texi(,8862) uses the @code{dead} state for its own purposes; to cvs.texi(,8863) take a file to or from the @code{dead} state use cvs.texi(,8864) commands like @code{cvs remove} and @code{cvs add}, not cvs.texi(,8865) @code{cvs admin -s}. cvs.texi(,8866) cvs.texi(,8867) @item -t[@var{file}] cvs.texi(,8868) Useful with @sc{cvs}. Write descriptive text from the cvs.texi(,8869) contents of the named @var{file} into the RCS file, cvs.texi(,8870) deleting the existing text. The @var{file} pathname cvs.texi(,8871) may not begin with @samp{-}. The descriptive text can be seen in the cvs.texi(,8872) output from @samp{cvs log} (@pxref{log}). cvs.texi(,8873) There can be no space between @samp{-t} and its argument. cvs.texi(,8874) cvs.texi(,8875) If @var{file} is omitted, cvs.texi(,8876) obtain the text from standard input, terminated by cvs.texi(,8877) end-of-file or by a line containing @samp{.} by itself. cvs.texi(,8878) Prompt for the text if interaction is possible; see cvs.texi(,8879) @samp{-I}. cvs.texi(,8880) cvs.texi(,8881) @item -t-@var{string} cvs.texi(,8882) Similar to @samp{-t@var{file}}. Write descriptive text cvs.texi(,8883) from the @var{string} into the @sc{rcs} file, deleting cvs.texi(,8884) the existing text. cvs.texi(,8885) There can be no space between @samp{-t} and its argument. cvs.texi(,8886) cvs.texi(,8887) @c The rcs -T option, do not update last-mod time for cvs.texi(,8888) @c minor changes, has never been documented as a cvs.texi(,8889) @c cvs admin option. cvs.texi(,8890) cvs.texi(,8891) @item -U cvs.texi(,8892) Set locking to non-strict. Non-strict locking means cvs.texi(,8893) that the owner of a file need not lock a revision for cvs.texi(,8894) checkin. For use with @sc{cvs}, strict locking must be cvs.texi(,8895) set; see the discussion under the @samp{-l} option cvs.texi(,8896) above. cvs.texi(,8897) cvs.texi(,8898) @item -u[@var{rev}] cvs.texi(,8899) See the option @samp{-l} above, for a discussion of cvs.texi(,8900) using this option with @sc{cvs}. Unlock the revision cvs.texi(,8901) with number @var{rev}. If a branch is given, unlock cvs.texi(,8902) the latest revision on that branch. If @var{rev} is cvs.texi(,8903) omitted, remove the latest lock held by the caller. cvs.texi(,8904) Normally, only the locker of a revision may unlock it; cvs.texi(,8905) somebody else unlocking a revision breaks the lock. cvs.texi(,8906) This causes the original locker to be sent a @code{commit} cvs.texi(,8907) notification (@pxref{Getting Notified}). cvs.texi(,8908) There can be no space between @samp{-u} and its argument. cvs.texi(,8909) cvs.texi(,8910) @item -V@var{n} cvs.texi(,8911) In previous versions of @sc{cvs}, this option meant to cvs.texi(,8912) write an @sc{rcs} file which would be acceptable to cvs.texi(,8913) @sc{rcs} version @var{n}, but it is now obsolete and cvs.texi(,8914) specifying it will produce an error. cvs.texi(,8915) @c Note that -V without an argument has never been cvs.texi(,8916) @c documented as a cvs admin option. cvs.texi(,8917) cvs.texi(,8918) @item -x@var{suffixes} cvs.texi(,8919) In previous versions of @sc{cvs}, this was documented cvs.texi(,8920) as a way of specifying the names of the @sc{rcs} cvs.texi(,8921) files. However, @sc{cvs} has always required that the cvs.texi(,8922) @sc{rcs} files used by @sc{cvs} end in @samp{,v}, so cvs.texi(,8923) this option has never done anything useful. cvs.texi(,8924) cvs.texi(,8925) @c The rcs -z option, to specify the timezone, has cvs.texi(,8926) @c never been documented as a cvs admin option. cvs.texi(,8927) @end table cvs.texi(,8928) cvs.texi(,8929) cvs.texi(,8930) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,8931) @node checkout cvs.texi(,8932) @appendixsec checkout---Check out sources for editing cvs.texi(,8933) @cindex checkout (subcommand) cvs.texi(,8934) @cindex co (subcommand) cvs.texi(,8935) cvs.texi(,8936) @itemize @bullet cvs.texi(,8937) @item cvs.texi(,8938) Synopsis: checkout [options] modules@dots{} cvs.texi(,8939) @item cvs.texi(,8940) Requires: repository. cvs.texi(,8941) @item cvs.texi(,8942) Changes: working directory. cvs.texi(,8943) @item cvs.texi(,8944) Synonyms: co, get cvs.texi(,8945) @end itemize cvs.texi(,8946) cvs.texi(,8947) Create or update a working directory containing copies of the cvs.texi(,8948) source files specified by @var{modules}. You must execute cvs.texi(,8949) @code{checkout} before using most of the other @sc{cvs} cvs.texi(,8950) commands, since most of them operate on your working cvs.texi(,8951) directory. cvs.texi(,8952) cvs.texi(,8953) The @var{modules} are either cvs.texi(,8954) symbolic names for some cvs.texi(,8955) collection of source directories and files, or paths to cvs.texi(,8956) directories or files in the repository. The symbolic cvs.texi(,8957) names are defined in the @samp{modules} file. cvs.texi(,8958) @xref{modules}. cvs.texi(,8959) @c Needs an example, particularly of the non-"modules" cvs.texi(,8960) @c case but probably of both. cvs.texi(,8961) cvs.texi(,8962) @c FIXME: this seems like a very odd place to introduce cvs.texi(,8963) @c people to how CVS works. The bit about unreserved cvs.texi(,8964) @c checkouts is also misleading as it depends on how cvs.texi(,8965) @c things are set up. cvs.texi(,8966) Depending on the modules you specify, @code{checkout} may cvs.texi(,8967) recursively create directories and populate them with cvs.texi(,8968) the appropriate source files. You can then edit these cvs.texi(,8969) source files at any time (regardless of whether other cvs.texi(,8970) software developers are editing their own copies of the cvs.texi(,8971) sources); update them to include new changes applied by cvs.texi(,8972) others to the source repository; or commit your work as cvs.texi(,8973) a permanent change to the source repository. cvs.texi(,8974) cvs.texi(,8975) Note that @code{checkout} is used to create cvs.texi(,8976) directories. The top-level directory created is always cvs.texi(,8977) added to the directory where @code{checkout} is cvs.texi(,8978) invoked, and usually has the same name as the specified cvs.texi(,8979) module. In the case of a module alias, the created cvs.texi(,8980) sub-directory may have a different name, but you can be cvs.texi(,8981) sure that it will be a sub-directory, and that cvs.texi(,8982) @code{checkout} will show the relative path leading to cvs.texi(,8983) each file as it is extracted into your private work cvs.texi(,8984) area (unless you specify the @samp{-Q} global option). cvs.texi(,8985) cvs.texi(,8986) The files created by @code{checkout} are created cvs.texi(,8987) read-write, unless the @samp{-r} option to @sc{cvs} cvs.texi(,8988) (@pxref{Global options}) is specified, the cvs.texi(,8989) @code{CVSREAD} environment variable is specified cvs.texi(,8990) (@pxref{Environment variables}), or a watch is in cvs.texi(,8991) effect for that file (@pxref{Watches}). cvs.texi(,8992) cvs.texi(,8993) Note that running @code{checkout} on a directory that was already cvs.texi(,8994) built by a prior @code{checkout} is also permitted. cvs.texi(,8995) This is similar to specifying the @samp{-d} option cvs.texi(,8996) to the @code{update} command in the sense that new cvs.texi(,8997) directories that have been created in the repository cvs.texi(,8998) will appear in your work area. cvs.texi(,8999) However, @code{checkout} takes a module name whereas cvs.texi(,9000) @code{update} takes a directory name. Also cvs.texi(,9001) to use @code{checkout} this way it must be run from the cvs.texi(,9002) top level directory (where you originally ran cvs.texi(,9003) @code{checkout} from), so before you run cvs.texi(,9004) @code{checkout} to update an existing directory, don't cvs.texi(,9005) forget to change your directory to the top level cvs.texi(,9006) directory. cvs.texi(,9007) cvs.texi(,9008) For the output produced by the @code{checkout} command cvs.texi(,9009) see @ref{update output}. cvs.texi(,9010) cvs.texi(,9011) @menu cvs.texi(,9012) * checkout options:: checkout options cvs.texi(,9013) * checkout examples:: checkout examples cvs.texi(,9014) @end menu cvs.texi(,9015) cvs.texi(,9016) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,9017) @node checkout options cvs.texi(,9018) @appendixsubsec checkout options cvs.texi(,9019) cvs.texi(,9020) These standard options are supported by @code{checkout} cvs.texi(,9021) (@pxref{Common options}, for a complete description of cvs.texi(,9022) them): cvs.texi(,9023) cvs.texi(,9024) @table @code cvs.texi(,9025) @item -D @var{date} cvs.texi(,9026) Use the most recent revision no later than @var{date}. cvs.texi(,9027) This option is sticky, and implies @samp{-P}. See cvs.texi(,9028) @ref{Sticky tags}, for more information on sticky tags/dates. cvs.texi(,9029) cvs.texi(,9030) @item -f cvs.texi(,9031) Only useful with the @samp{-D @var{date}} or @samp{-r cvs.texi(,9032) @var{tag}} flags. If no matching revision is found, cvs.texi(,9033) retrieve the most recent revision (instead of ignoring cvs.texi(,9034) the file). cvs.texi(,9035) cvs.texi(,9036) @item -k @var{kflag} cvs.texi(,9037) Process keywords according to @var{kflag}. See cvs.texi(,9038) @ref{Keyword substitution}. cvs.texi(,9039) This option is sticky; future updates of cvs.texi(,9040) this file in this working directory will use the same cvs.texi(,9041) @var{kflag}. The @code{status} command can be viewed cvs.texi(,9042) to see the sticky options. See @ref{Invoking CVS}, for cvs.texi(,9043) more information on the @code{status} command. cvs.texi(,9044) cvs.texi(,9045) @item -l cvs.texi(,9046) Local; run only in current working directory. cvs.texi(,9047) cvs.texi(,9048) @item -n cvs.texi(,9049) Do not run any checkout program (as specified cvs.texi(,9050) with the @samp{-o} option in the modules file; cvs.texi(,9051) @pxref{modules}). cvs.texi(,9052) cvs.texi(,9053) @item -P cvs.texi(,9054) Prune empty directories. See @ref{Moving directories}. cvs.texi(,9055) cvs.texi(,9056) @item -p cvs.texi(,9057) Pipe files to the standard output. cvs.texi(,9058) cvs.texi(,9059) @item -R cvs.texi(,9060) Checkout directories recursively. This option is on by default. cvs.texi(,9061) cvs.texi(,9062) @item -r @var{tag} cvs.texi(,9063) Use revision @var{tag}. This option is sticky, and implies @samp{-P}. cvs.texi(,9064) See @ref{Sticky tags}, for more information on sticky tags/dates. cvs.texi(,9065) @end table cvs.texi(,9066) cvs.texi(,9067) In addition to those, you can use these special command cvs.texi(,9068) options with @code{checkout}: cvs.texi(,9069) cvs.texi(,9070) @table @code cvs.texi(,9071) @item -A cvs.texi(,9072) Reset any sticky tags, dates, or @samp{-k} options. cvs.texi(,9073) See @ref{Sticky tags}, for more information on sticky tags/dates. cvs.texi(,9074) cvs.texi(,9075) @item -c cvs.texi(,9076) Copy the module file, sorted, to the standard output, cvs.texi(,9077) instead of creating or modifying any files or cvs.texi(,9078) directories in your working directory. cvs.texi(,9079) cvs.texi(,9080) @item -d @var{dir} cvs.texi(,9081) Create a directory called @var{dir} for the working cvs.texi(,9082) files, instead of using the module name. In general, cvs.texi(,9083) using this flag is equivalent to using @samp{mkdir cvs.texi(,9084) @var{dir}; cd @var{dir}} followed by the checkout cvs.texi(,9085) command without the @samp{-d} flag. cvs.texi(,9086) cvs.texi(,9087) There is an important exception, however. It is very cvs.texi(,9088) convenient when checking out a single item to have the cvs.texi(,9089) output appear in a directory that doesn't contain empty cvs.texi(,9090) intermediate directories. In this case @emph{only}, cvs.texi(,9091) @sc{cvs} tries to ``shorten'' pathnames to avoid those empty cvs.texi(,9092) directories. cvs.texi(,9093) cvs.texi(,9094) For example, given a module @samp{foo} that contains cvs.texi(,9095) the file @samp{bar.c}, the command @samp{cvs co -d dir cvs.texi(,9096) foo} will create directory @samp{dir} and place cvs.texi(,9097) @samp{bar.c} inside. Similarly, given a module cvs.texi(,9098) @samp{bar} which has subdirectory @samp{baz} wherein cvs.texi(,9099) there is a file @samp{quux.c}, the command @samp{cvs co cvs.texi(,9100) -d dir bar/baz} will create directory @samp{dir} and cvs.texi(,9101) place @samp{quux.c} inside. cvs.texi(,9102) cvs.texi(,9103) Using the @samp{-N} flag will defeat this behavior. cvs.texi(,9104) Given the same module definitions above, @samp{cvs co cvs.texi(,9105) -N -d dir foo} will create directories @samp{dir/foo} cvs.texi(,9106) and place @samp{bar.c} inside, while @samp{cvs co -N -d cvs.texi(,9107) dir bar/baz} will create directories @samp{dir/bar/baz} cvs.texi(,9108) and place @samp{quux.c} inside. cvs.texi(,9109) cvs.texi(,9110) @item -j @var{tag} cvs.texi(,9111) With two @samp{-j} options, merge changes from the cvs.texi(,9112) revision specified with the first @samp{-j} option to cvs.texi(,9113) the revision specified with the second @samp{j} option, cvs.texi(,9114) into the working directory. cvs.texi(,9115) cvs.texi(,9116) With one @samp{-j} option, merge changes from the cvs.texi(,9117) ancestor revision to the revision specified with the cvs.texi(,9118) @samp{-j} option, into the working directory. The cvs.texi(,9119) ancestor revision is the common ancestor of the cvs.texi(,9120) revision which the working directory is based on, and cvs.texi(,9121) the revision specified in the @samp{-j} option. cvs.texi(,9122) cvs.texi(,9123) In addition, each -j option can contain an optional cvs.texi(,9124) date specification which, when used with branches, can cvs.texi(,9125) limit the chosen revision to one within a specific cvs.texi(,9126) date. An optional date is specified by adding a colon cvs.texi(,9127) (:) to the tag: cvs.texi(,9128) @samp{-j@var{Symbolic_Tag}:@var{Date_Specifier}}. cvs.texi(,9129) cvs.texi(,9130) @xref{Branching and merging}. cvs.texi(,9131) cvs.texi(,9132) @item -N cvs.texi(,9133) Only useful together with @samp{-d @var{dir}}. With cvs.texi(,9134) this option, @sc{cvs} will not ``shorten'' module paths cvs.texi(,9135) in your working directory when you check out a single cvs.texi(,9136) module. See the @samp{-d} flag for examples and a cvs.texi(,9137) discussion. cvs.texi(,9138) cvs.texi(,9139) @item -s cvs.texi(,9140) Like @samp{-c}, but include the status of all modules, cvs.texi(,9141) and sort it by the status string. @xref{modules}, for cvs.texi(,9142) info about the @samp{-s} option that is used inside the cvs.texi(,9143) modules file to set the module status. cvs.texi(,9144) @end table cvs.texi(,9145) cvs.texi(,9146) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,9147) @node checkout examples cvs.texi(,9148) @appendixsubsec checkout examples cvs.texi(,9149) cvs.texi(,9150) Get a copy of the module @samp{tc}: cvs.texi(,9151) cvs.texi(,9152) @example cvs.texi(,9153) $ cvs checkout tc cvs.texi(,9154) @end example cvs.texi(,9155) cvs.texi(,9156) Get a copy of the module @samp{tc} as it looked one day cvs.texi(,9157) ago: cvs.texi(,9158) cvs.texi(,9159) @example cvs.texi(,9160) $ cvs checkout -D yesterday tc cvs.texi(,9161) @end example cvs.texi(,9162) cvs.texi(,9163) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,9164) @node commit cvs.texi(,9165) @appendixsec commit---Check files into the repository cvs.texi(,9166) @cindex commit (subcommand) cvs.texi(,9167) cvs.texi(,9168) @itemize @bullet cvs.texi(,9169) @item cvs.texi(,9170) Synopsis: commit [-lnRf] [-m 'log_message' | cvs.texi(,9171) -F file] [-r revision] [files@dots{}] cvs.texi(,9172) @item cvs.texi(,9173) Requires: working directory, repository. cvs.texi(,9174) @item cvs.texi(,9175) Changes: repository. cvs.texi(,9176) @item cvs.texi(,9177) Synonym: ci cvs.texi(,9178) @end itemize cvs.texi(,9179) cvs.texi(,9180) Use @code{commit} when you want to incorporate changes cvs.texi(,9181) from your working source files into the source cvs.texi(,9182) repository. cvs.texi(,9183) cvs.texi(,9184) If you don't specify particular files to commit, all of cvs.texi(,9185) the files in your working current directory are cvs.texi(,9186) examined. @code{commit} is careful to change in the cvs.texi(,9187) repository only those files that you have really cvs.texi(,9188) changed. By default (or if you explicitly specify the cvs.texi(,9189) @samp{-R} option), files in subdirectories are also cvs.texi(,9190) examined and committed if they have changed; you can cvs.texi(,9191) use the @samp{-l} option to limit @code{commit} to the cvs.texi(,9192) current directory only. cvs.texi(,9193) cvs.texi(,9194) @code{commit} verifies that the selected files are up cvs.texi(,9195) to date with the current revisions in the source cvs.texi(,9196) repository; it will notify you, and exit without cvs.texi(,9197) committing, if any of the specified files must be made cvs.texi(,9198) current first with @code{update} (@pxref{update}). cvs.texi(,9199) @code{commit} does not call the @code{update} command cvs.texi(,9200) for you, but rather leaves that for you to do when the cvs.texi(,9201) time is right. cvs.texi(,9202) cvs.texi(,9203) When all is well, an editor is invoked to allow you to cvs.texi(,9204) enter a log message that will be written to one or more cvs.texi(,9205) logging programs (@pxref{modules}, and @pxref{loginfo}) cvs.texi(,9206) and placed in the @sc{rcs} file inside the cvs.texi(,9207) repository. This log message can be retrieved with the cvs.texi(,9208) @code{log} command; see @ref{log}. You can specify the cvs.texi(,9209) log message on the command line with the @samp{-m cvs.texi(,9210) @var{message}} option, and thus avoid the editor invocation, cvs.texi(,9211) or use the @samp{-F @var{file}} option to specify cvs.texi(,9212) that the argument file contains the log message. cvs.texi(,9213) cvs.texi(,9214) @menu cvs.texi(,9215) * commit options:: commit options cvs.texi(,9216) * commit examples:: commit examples cvs.texi(,9217) @end menu cvs.texi(,9218) cvs.texi(,9219) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,9220) @node commit options cvs.texi(,9221) @appendixsubsec commit options cvs.texi(,9222) cvs.texi(,9223) These standard options are supported by @code{commit} cvs.texi(,9224) (@pxref{Common options}, for a complete description of cvs.texi(,9225) them): cvs.texi(,9226) cvs.texi(,9227) @table @code cvs.texi(,9228) @item -l cvs.texi(,9229) Local; run only in current working directory. cvs.texi(,9230) cvs.texi(,9231) @item -R cvs.texi(,9232) Commit directories recursively. This is on by default. cvs.texi(,9233) cvs.texi(,9234) @item -r @var{revision} cvs.texi(,9235) Commit to @var{revision}. @var{revision} must be cvs.texi(,9236) either a branch, or a revision on the main trunk that cvs.texi(,9237) is higher than any existing revision number cvs.texi(,9238) (@pxref{Assigning revisions}). You cvs.texi(,9239) cannot commit to a specific revision on a branch. cvs.texi(,9240) @c FIXME: Need xref for branch case. cvs.texi(,9241) @end table cvs.texi(,9242) cvs.texi(,9243) @code{commit} also supports these options: cvs.texi(,9244) cvs.texi(,9245) @table @code cvs.texi(,9246) @item -F @var{file} cvs.texi(,9247) Read the log message from @var{file}, instead cvs.texi(,9248) of invoking an editor. cvs.texi(,9249) cvs.texi(,9250) @item -f cvs.texi(,9251) Note that this is not the standard behavior of cvs.texi(,9252) the @samp{-f} option as defined in @ref{Common options}. cvs.texi(,9253) cvs.texi(,9254) Force @sc{cvs} to commit a new revision even if you haven't cvs.texi(,9255) made any changes to the file. If the current revision cvs.texi(,9256) of @var{file} is 1.7, then the following two commands cvs.texi(,9257) are equivalent: cvs.texi(,9258) cvs.texi(,9259) @example cvs.texi(,9260) $ cvs commit -f @var{file} cvs.texi(,9261) $ cvs commit -r 1.8 @var{file} cvs.texi(,9262) @end example cvs.texi(,9263) cvs.texi(,9264) @c This is odd, but it's how CVS has worked for some cvs.texi(,9265) @c time. cvs.texi(,9266) The @samp{-f} option disables recursion (i.e., it cvs.texi(,9267) implies @samp{-l}). To force @sc{cvs} to commit a new cvs.texi(,9268) revision for all files in all subdirectories, you must cvs.texi(,9269) use @samp{-f -R}. cvs.texi(,9270) cvs.texi(,9271) @item -m @var{message} cvs.texi(,9272) Use @var{message} as the log message, instead of cvs.texi(,9273) invoking an editor. cvs.texi(,9274) @end table cvs.texi(,9275) cvs.texi(,9276) @need 2000 cvs.texi(,9277) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,9278) @node commit examples cvs.texi(,9279) @appendixsubsec commit examples cvs.texi(,9280) cvs.texi(,9281) @c FIXME: this material wants to be somewhere cvs.texi(,9282) @c in "Branching and merging". cvs.texi(,9283) cvs.texi(,9284) @appendixsubsubsec Committing to a branch cvs.texi(,9285) cvs.texi(,9286) You can commit to a branch revision (one that has an cvs.texi(,9287) even number of dots) with the @samp{-r} option. To cvs.texi(,9288) create a branch revision, use the @samp{-b} option cvs.texi(,9289) of the @code{rtag} or @code{tag} commands cvs.texi(,9290) (@pxref{Branching and merging}). Then, either @code{checkout} or cvs.texi(,9291) @code{update} can be used to base your sources on the cvs.texi(,9292) newly created branch. From that point on, all cvs.texi(,9293) @code{commit} changes made within these working sources cvs.texi(,9294) will be automatically added to a branch revision, cvs.texi(,9295) thereby not disturbing main-line development in any cvs.texi(,9296) way. For example, if you had to create a patch to the cvs.texi(,9297) 1.2 version of the product, even though the 2.0 version cvs.texi(,9298) is already under development, you might do: cvs.texi(,9299) cvs.texi(,9300) @example cvs.texi(,9301) $ cvs rtag -b -r FCS1_2 FCS1_2_Patch product_module cvs.texi(,9302) $ cvs checkout -r FCS1_2_Patch product_module cvs.texi(,9303) $ cd product_module cvs.texi(,9304) [[ hack away ]] cvs.texi(,9305) $ cvs commit cvs.texi(,9306) @end example cvs.texi(,9307) cvs.texi(,9308) @noindent cvs.texi(,9309) This works automatically since the @samp{-r} option is cvs.texi(,9310) sticky. cvs.texi(,9311) cvs.texi(,9312) @appendixsubsubsec Creating the branch after editing cvs.texi(,9313) cvs.texi(,9314) Say you have been working on some extremely cvs.texi(,9315) experimental software, based on whatever revision you cvs.texi(,9316) happened to checkout last week. If others in your cvs.texi(,9317) group would like to work on this software with you, but cvs.texi(,9318) without disturbing main-line development, you could cvs.texi(,9319) commit your change to a new branch. Others can then cvs.texi(,9320) checkout your experimental stuff and utilize the full cvs.texi(,9321) benefit of @sc{cvs} conflict resolution. The scenario might cvs.texi(,9322) look like: cvs.texi(,9323) cvs.texi(,9324) @c FIXME: Should we be recommending tagging the branchpoint? cvs.texi(,9325) @example cvs.texi(,9326) [[ hacked sources are present ]] cvs.texi(,9327) $ cvs tag -b EXPR1 cvs.texi(,9328) $ cvs update -r EXPR1 cvs.texi(,9329) $ cvs commit cvs.texi(,9330) @end example cvs.texi(,9331) cvs.texi(,9332) The @code{update} command will make the @samp{-r cvs.texi(,9333) EXPR1} option sticky on all files. Note that your cvs.texi(,9334) changes to the files will never be removed by the cvs.texi(,9335) @code{update} command. The @code{commit} will cvs.texi(,9336) automatically commit to the correct branch, because the cvs.texi(,9337) @samp{-r} is sticky. You could also do like this: cvs.texi(,9338) cvs.texi(,9339) @c FIXME: Should we be recommending tagging the branchpoint? cvs.texi(,9340) @example cvs.texi(,9341) [[ hacked sources are present ]] cvs.texi(,9342) $ cvs tag -b EXPR1 cvs.texi(,9343) $ cvs commit -r EXPR1 cvs.texi(,9344) @end example cvs.texi(,9345) cvs.texi(,9346) @noindent cvs.texi(,9347) but then, only those files that were changed by you cvs.texi(,9348) will have the @samp{-r EXPR1} sticky flag. If you hack cvs.texi(,9349) away, and commit without specifying the @samp{-r EXPR1} cvs.texi(,9350) flag, some files may accidentally end up on the main cvs.texi(,9351) trunk. cvs.texi(,9352) cvs.texi(,9353) To work with you on the experimental change, others cvs.texi(,9354) would simply do cvs.texi(,9355) cvs.texi(,9356) @example cvs.texi(,9357) $ cvs checkout -r EXPR1 whatever_module cvs.texi(,9358) @end example cvs.texi(,9359) cvs.texi(,9360) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,9361) @node diff cvs.texi(,9362) @appendixsec diff---Show differences between revisions cvs.texi(,9363) @cindex diff (subcommand) cvs.texi(,9364) cvs.texi(,9365) @itemize @bullet cvs.texi(,9366) @item cvs.texi(,9367) Synopsis: diff [-lR] [-k kflag] [format_options] [[-r rev1 | -D date1] [-r rev2 | -D date2]] [files@dots{}] cvs.texi(,9368) @item cvs.texi(,9369) Requires: working directory, repository. cvs.texi(,9370) @item cvs.texi(,9371) Changes: nothing. cvs.texi(,9372) @end itemize cvs.texi(,9373) cvs.texi(,9374) The @code{diff} command is used to compare different cvs.texi(,9375) revisions of files. The default action is to compare cvs.texi(,9376) your working files with the revisions they were based cvs.texi(,9377) on, and report any differences that are found. cvs.texi(,9378) cvs.texi(,9379) If any file names are given, only those files are cvs.texi(,9380) compared. If any directories are given, all files cvs.texi(,9381) under them will be compared. cvs.texi(,9382) cvs.texi(,9383) The exit status for diff is different than for other cvs.texi(,9384) @sc{cvs} commands; for details @ref{Exit status}. cvs.texi(,9385) cvs.texi(,9386) @menu cvs.texi(,9387) * diff options:: diff options cvs.texi(,9388) * diff examples:: diff examples cvs.texi(,9389) @end menu cvs.texi(,9390) cvs.texi(,9391) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,9392) @node diff options cvs.texi(,9393) @appendixsubsec diff options cvs.texi(,9394) cvs.texi(,9395) These standard options are supported by @code{diff} cvs.texi(,9396) (@pxref{Common options}, for a complete description of cvs.texi(,9397) them): cvs.texi(,9398) cvs.texi(,9399) @table @code cvs.texi(,9400) @item -D @var{date} cvs.texi(,9401) Use the most recent revision no later than @var{date}. cvs.texi(,9402) See @samp{-r} for how this affects the comparison. cvs.texi(,9403) cvs.texi(,9404) @item -k @var{kflag} cvs.texi(,9405) Process keywords according to @var{kflag}. See cvs.texi(,9406) @ref{Keyword substitution}. cvs.texi(,9407) cvs.texi(,9408) @item -l cvs.texi(,9409) Local; run only in current working directory. cvs.texi(,9410) cvs.texi(,9411) @item -R cvs.texi(,9412) Examine directories recursively. This option is on by cvs.texi(,9413) default. cvs.texi(,9414) cvs.texi(,9415) @item -r @var{tag} cvs.texi(,9416) Compare with revision @var{tag}. Zero, one or two cvs.texi(,9417) @samp{-r} options can be present. With no @samp{-r} cvs.texi(,9418) option, the working file will be compared with the cvs.texi(,9419) revision it was based on. With one @samp{-r}, that cvs.texi(,9420) revision will be compared to your current working file. cvs.texi(,9421) With two @samp{-r} options those two revisions will be cvs.texi(,9422) compared (and your working file will not affect the cvs.texi(,9423) outcome in any way). cvs.texi(,9424) @c We should be a lot more explicit, with examples, cvs.texi(,9425) @c about the difference between "cvs diff" and "cvs cvs.texi(,9426) @c diff -r HEAD". This often confuses new users. cvs.texi(,9427) cvs.texi(,9428) One or both @samp{-r} options can be replaced by a cvs.texi(,9429) @samp{-D @var{date}} option, described above. cvs.texi(,9430) @end table cvs.texi(,9431) cvs.texi(,9432) @c Conceptually, this is a disaster. There are 3 cvs.texi(,9433) @c zillion diff formats that we support via the diff cvs.texi(,9434) @c library. It is not obvious to me that we should cvs.texi(,9435) @c document them all. Maybe just the most common ones cvs.texi(,9436) @c like -c and -u, and think about phasing out the cvs.texi(,9437) @c obscure ones. cvs.texi(,9438) @c FIXCVS: also should be a way to specify an external cvs.texi(,9439) @c diff program (which can be different for different cvs.texi(,9440) @c file types) and pass through cvs.texi(,9441) @c arbitrary options, so that the user can do cvs.texi(,9442) @c "--pass=-Z --pass=foo" or something even if CVS cvs.texi(,9443) @c doesn't know about the "-Z foo" option to diff. cvs.texi(,9444) @c This would fit nicely with deprecating/eliminating cvs.texi(,9445) @c the obscure options of the diff library, because it cvs.texi(,9446) @c would let people specify an external GNU diff if cvs.texi(,9447) @c they are into that sort of thing. cvs.texi(,9448) The following options specify the format of the cvs.texi(,9449) output. They have the same meaning as in GNU diff. cvs.texi(,9450) Most options have two equivalent names, one of which is a single letter cvs.texi(,9451) preceded by @samp{-}, and the other of which is a long name preceded by cvs.texi(,9452) @samp{--}. cvs.texi(,9453) cvs.texi(,9454) @table @samp cvs.texi(,9455) @item -@var{lines} cvs.texi(,9456) Show @var{lines} (an integer) lines of context. This option does not cvs.texi(,9457) specify an output format by itself; it has no effect unless it is cvs.texi(,9458) combined with @samp{-c} or @samp{-u}. This option is obsolete. For proper cvs.texi(,9459) operation, @code{patch} typically needs at least two lines of context. cvs.texi(,9460) cvs.texi(,9461) @item -a cvs.texi(,9462) Treat all files as text and compare them line-by-line, even if they cvs.texi(,9463) do not seem to be text. cvs.texi(,9464) cvs.texi(,9465) @item -b cvs.texi(,9466) Ignore trailing white space and consider all other sequences of one or cvs.texi(,9467) more white space characters to be equivalent. cvs.texi(,9468) cvs.texi(,9469) @item -B cvs.texi(,9470) Ignore changes that just insert or delete blank lines. cvs.texi(,9471) cvs.texi(,9472) @item --binary cvs.texi(,9473) Read and write data in binary mode. cvs.texi(,9474) cvs.texi(,9475) @item --brief cvs.texi(,9476) Report only whether the files differ, not the details of the cvs.texi(,9477) differences. cvs.texi(,9478) cvs.texi(,9479) @item -c cvs.texi(,9480) Use the context output format. cvs.texi(,9481) cvs.texi(,9482) @item -C @var{lines} cvs.texi(,9483) @itemx --context@r{[}=@var{lines}@r{]} cvs.texi(,9484) Use the context output format, showing @var{lines} (an integer) lines of cvs.texi(,9485) context, or three if @var{lines} is not given. cvs.texi(,9486) For proper operation, @code{patch} typically needs at least two lines of cvs.texi(,9487) context. cvs.texi(,9488) cvs.texi(,9489) @item --changed-group-format=@var{format} cvs.texi(,9490) Use @var{format} to output a line group containing differing lines from cvs.texi(,9491) both files in if-then-else format. @xref{Line group formats}. cvs.texi(,9492) cvs.texi(,9493) @item -d cvs.texi(,9494) Change the algorithm to perhaps find a smaller set of changes. This makes cvs.texi(,9495) @code{diff} slower (sometimes much slower). cvs.texi(,9496) cvs.texi(,9497) @item -e cvs.texi(,9498) @itemx --ed cvs.texi(,9499) Make output that is a valid @code{ed} script. cvs.texi(,9500) cvs.texi(,9501) @item --expand-tabs cvs.texi(,9502) Expand tabs to spaces in the output, to preserve the alignment of tabs cvs.texi(,9503) in the input files. cvs.texi(,9504) cvs.texi(,9505) @item -f cvs.texi(,9506) Make output that looks vaguely like an @code{ed} script but has changes cvs.texi(,9507) in the order they appear in the file. cvs.texi(,9508) cvs.texi(,9509) @item -F @var{regexp} cvs.texi(,9510) In context and unified format, for each hunk of differences, show some cvs.texi(,9511) of the last preceding line that matches @var{regexp}. cvs.texi(,9512) cvs.texi(,9513) @item --forward-ed cvs.texi(,9514) Make output that looks vaguely like an @code{ed} script but has changes cvs.texi(,9515) in the order they appear in the file. cvs.texi(,9516) cvs.texi(,9517) @item -H cvs.texi(,9518) Use heuristics to speed handling of large files that have numerous cvs.texi(,9519) scattered small changes. cvs.texi(,9520) cvs.texi(,9521) @item --horizon-lines=@var{lines} cvs.texi(,9522) Do not discard the last @var{lines} lines of the common prefix cvs.texi(,9523) and the first @var{lines} lines of the common suffix. cvs.texi(,9524) cvs.texi(,9525) @item -i cvs.texi(,9526) Ignore changes in case; consider upper- and lower-case letters cvs.texi(,9527) equivalent. cvs.texi(,9528) cvs.texi(,9529) @item -I @var{regexp} cvs.texi(,9530) Ignore changes that just insert or delete lines that match @var{regexp}. cvs.texi(,9531) cvs.texi(,9532) @item --ifdef=@var{name} cvs.texi(,9533) Make merged if-then-else output using @var{name}. cvs.texi(,9534) cvs.texi(,9535) @item --ignore-all-space cvs.texi(,9536) Ignore white space when comparing lines. cvs.texi(,9537) cvs.texi(,9538) @item --ignore-blank-lines cvs.texi(,9539) Ignore changes that just insert or delete blank lines. cvs.texi(,9540) cvs.texi(,9541) @item --ignore-case cvs.texi(,9542) Ignore changes in case; consider upper- and lower-case to be the same. cvs.texi(,9543) cvs.texi(,9544) @item --ignore-matching-lines=@var{regexp} cvs.texi(,9545) Ignore changes that just insert or delete lines that match @var{regexp}. cvs.texi(,9546) cvs.texi(,9547) @item --ignore-space-change cvs.texi(,9548) Ignore trailing white space and consider all other sequences of one or cvs.texi(,9549) more white space characters to be equivalent. cvs.texi(,9550) cvs.texi(,9551) @item --initial-tab cvs.texi(,9552) Output a tab rather than a space before the text of a line in normal or cvs.texi(,9553) context format. This causes the alignment of tabs in the line to look cvs.texi(,9554) normal. cvs.texi(,9555) cvs.texi(,9556) @item -L @var{label} cvs.texi(,9557) Use @var{label} instead of the file name in the context format cvs.texi(,9558) and unified format headers. cvs.texi(,9559) cvs.texi(,9560) @item --label=@var{label} cvs.texi(,9561) Use @var{label} instead of the file name in the context format cvs.texi(,9562) and unified format headers. cvs.texi(,9563) cvs.texi(,9564) @item --left-column cvs.texi(,9565) Print only the left column of two common lines in side by side format. cvs.texi(,9566) cvs.texi(,9567) @item --line-format=@var{format} cvs.texi(,9568) Use @var{format} to output all input lines in if-then-else format. cvs.texi(,9569) @xref{Line formats}. cvs.texi(,9570) cvs.texi(,9571) @item --minimal cvs.texi(,9572) Change the algorithm to perhaps find a smaller set of changes. This cvs.texi(,9573) makes @code{diff} slower (sometimes much slower). cvs.texi(,9574) cvs.texi(,9575) @item -n cvs.texi(,9576) Output RCS-format diffs; like @samp{-f} except that each command cvs.texi(,9577) specifies the number of lines affected. cvs.texi(,9578) cvs.texi(,9579) @item -N cvs.texi(,9580) @itemx --new-file cvs.texi(,9581) In directory comparison, if a file is found in only one directory, cvs.texi(,9582) treat it as present but empty in the other directory. cvs.texi(,9583) cvs.texi(,9584) @item --new-group-format=@var{format} cvs.texi(,9585) Use @var{format} to output a group of lines taken from just the second cvs.texi(,9586) file in if-then-else format. @xref{Line group formats}. cvs.texi(,9587) cvs.texi(,9588) @item --new-line-format=@var{format} cvs.texi(,9589) Use @var{format} to output a line taken from just the second file in cvs.texi(,9590) if-then-else format. @xref{Line formats}. cvs.texi(,9591) cvs.texi(,9592) @item --old-group-format=@var{format} cvs.texi(,9593) Use @var{format} to output a group of lines taken from just the first cvs.texi(,9594) file in if-then-else format. @xref{Line group formats}. cvs.texi(,9595) cvs.texi(,9596) @item --old-line-format=@var{format} cvs.texi(,9597) Use @var{format} to output a line taken from just the first file in cvs.texi(,9598) if-then-else format. @xref{Line formats}. cvs.texi(,9599) cvs.texi(,9600) @item -p cvs.texi(,9601) Show which C function each change is in. cvs.texi(,9602) cvs.texi(,9603) @item --rcs cvs.texi(,9604) Output RCS-format diffs; like @samp{-f} except that each command cvs.texi(,9605) specifies the number of lines affected. cvs.texi(,9606) cvs.texi(,9607) @item --report-identical-files cvs.texi(,9608) @itemx -s cvs.texi(,9609) Report when two files are the same. cvs.texi(,9610) cvs.texi(,9611) @item --show-c-function cvs.texi(,9612) Show which C function each change is in. cvs.texi(,9613) cvs.texi(,9614) @item --show-function-line=@var{regexp} cvs.texi(,9615) In context and unified format, for each hunk of differences, show some cvs.texi(,9616) of the last preceding line that matches @var{regexp}. cvs.texi(,9617) cvs.texi(,9618) @item --side-by-side cvs.texi(,9619) Use the side by side output format. cvs.texi(,9620) cvs.texi(,9621) @item --speed-large-files cvs.texi(,9622) Use heuristics to speed handling of large files that have numerous cvs.texi(,9623) scattered small changes. cvs.texi(,9624) cvs.texi(,9625) @item --suppress-common-lines cvs.texi(,9626) Do not print common lines in side by side format. cvs.texi(,9627) cvs.texi(,9628) @item -t cvs.texi(,9629) Expand tabs to spaces in the output, to preserve the alignment of tabs cvs.texi(,9630) in the input files. cvs.texi(,9631) cvs.texi(,9632) @item -T cvs.texi(,9633) Output a tab rather than a space before the text of a line in normal or cvs.texi(,9634) context format. This causes the alignment of tabs in the line to look cvs.texi(,9635) normal. cvs.texi(,9636) cvs.texi(,9637) @item --text cvs.texi(,9638) Treat all files as text and compare them line-by-line, even if they cvs.texi(,9639) do not appear to be text. cvs.texi(,9640) cvs.texi(,9641) @item -u cvs.texi(,9642) Use the unified output format. cvs.texi(,9643) cvs.texi(,9644) @item --unchanged-group-format=@var{format} cvs.texi(,9645) Use @var{format} to output a group of common lines taken from both files cvs.texi(,9646) in if-then-else format. @xref{Line group formats}. cvs.texi(,9647) cvs.texi(,9648) @item --unchanged-line-format=@var{format} cvs.texi(,9649) Use @var{format} to output a line common to both files in if-then-else cvs.texi(,9650) format. @xref{Line formats}. cvs.texi(,9651) cvs.texi(,9652) @item -U @var{lines} cvs.texi(,9653) @itemx --unified@r{[}=@var{lines}@r{]} cvs.texi(,9654) Use the unified output format, showing @var{lines} (an integer) lines of cvs.texi(,9655) context, or three if @var{lines} is not given. cvs.texi(,9656) For proper operation, @code{patch} typically needs at least two lines of cvs.texi(,9657) context. cvs.texi(,9658) cvs.texi(,9659) @item -w cvs.texi(,9660) Ignore white space when comparing lines. cvs.texi(,9661) cvs.texi(,9662) @item -W @var{columns} cvs.texi(,9663) @itemx --width=@var{columns} cvs.texi(,9664) Use an output width of @var{columns} in side by side format. cvs.texi(,9665) cvs.texi(,9666) @item -y cvs.texi(,9667) Use the side by side output format. cvs.texi(,9668) @end table cvs.texi(,9669) cvs.texi(,9670) @menu cvs.texi(,9671) * Line group formats:: Line group formats cvs.texi(,9672) * Line formats:: Line formats cvs.texi(,9673) @end menu cvs.texi(,9674) cvs.texi(,9675) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,9676) @node Line group formats cvs.texi(,9677) @appendixsubsubsec Line group formats cvs.texi(,9678) cvs.texi(,9679) Line group formats let you specify formats suitable for many cvs.texi(,9680) applications that allow if-then-else input, including programming cvs.texi(,9681) languages and text formatting languages. A line group format specifies cvs.texi(,9682) the output format for a contiguous group of similar lines. cvs.texi(,9683) cvs.texi(,9684) For example, the following command compares the TeX file @file{myfile} cvs.texi(,9685) with the original version from the repository, cvs.texi(,9686) and outputs a merged file in which old regions are cvs.texi(,9687) surrounded by @samp{\begin@{em@}}-@samp{\end@{em@}} lines, and new cvs.texi(,9688) regions are surrounded by @samp{\begin@{bf@}}-@samp{\end@{bf@}} lines. cvs.texi(,9689) cvs.texi(,9690) @example cvs.texi(,9691) cvs diff \ cvs.texi(,9692) --old-group-format='\begin@{em@} cvs.texi(,9693) %<\end@{em@} cvs.texi(,9694) ' \ cvs.texi(,9695) --new-group-format='\begin@{bf@} cvs.texi(,9696) %>\end@{bf@} cvs.texi(,9697) ' \ cvs.texi(,9698) myfile cvs.texi(,9699) @end example cvs.texi(,9700) cvs.texi(,9701) The following command is equivalent to the above example, but it is a cvs.texi(,9702) little more verbose, because it spells out the default line group formats. cvs.texi(,9703) cvs.texi(,9704) @example cvs.texi(,9705) cvs diff \ cvs.texi(,9706) --old-group-format='\begin@{em@} cvs.texi(,9707) %<\end@{em@} cvs.texi(,9708) ' \ cvs.texi(,9709) --new-group-format='\begin@{bf@} cvs.texi(,9710) %>\end@{bf@} cvs.texi(,9711) ' \ cvs.texi(,9712) --unchanged-group-format='%=' \ cvs.texi(,9713) --changed-group-format='\begin@{em@} cvs.texi(,9714) %<\end@{em@} cvs.texi(,9715) \begin@{bf@} cvs.texi(,9716) %>\end@{bf@} cvs.texi(,9717) ' \ cvs.texi(,9718) myfile cvs.texi(,9719) @end example cvs.texi(,9720) cvs.texi(,9721) Here is a more advanced example, which outputs a diff listing with cvs.texi(,9722) headers containing line numbers in a ``plain English'' style. cvs.texi(,9723) cvs.texi(,9724) @example cvs.texi(,9725) cvs diff \ cvs.texi(,9726) --unchanged-group-format='' \ cvs.texi(,9727) --old-group-format='-------- %dn line%(n=1?:s) deleted at %df: cvs.texi(,9728) %<' \ cvs.texi(,9729) --new-group-format='-------- %dN line%(N=1?:s) added after %de: cvs.texi(,9730) %>' \ cvs.texi(,9731) --changed-group-format='-------- %dn line%(n=1?:s) changed at %df: cvs.texi(,9732) %<-------- to: cvs.texi(,9733) %>' \ cvs.texi(,9734) myfile cvs.texi(,9735) @end example cvs.texi(,9736) cvs.texi(,9737) To specify a line group format, use one of the options cvs.texi(,9738) listed below. You can specify up to four line group formats, one for cvs.texi(,9739) each kind of line group. You should quote @var{format}, because it cvs.texi(,9740) typically contains shell metacharacters. cvs.texi(,9741) cvs.texi(,9742) @table @samp cvs.texi(,9743) @item --old-group-format=@var{format} cvs.texi(,9744) These line groups are hunks containing only lines from the first file. cvs.texi(,9745) The default old group format is the same as the changed group format if cvs.texi(,9746) it is specified; otherwise it is a format that outputs the line group as-is. cvs.texi(,9747) cvs.texi(,9748) @item --new-group-format=@var{format} cvs.texi(,9749) These line groups are hunks containing only lines from the second cvs.texi(,9750) file. The default new group format is same as the changed group cvs.texi(,9751) format if it is specified; otherwise it is a format that outputs the cvs.texi(,9752) line group as-is. cvs.texi(,9753) cvs.texi(,9754) @item --changed-group-format=@var{format} cvs.texi(,9755) These line groups are hunks containing lines from both files. The cvs.texi(,9756) default changed group format is the concatenation of the old and new cvs.texi(,9757) group formats. cvs.texi(,9758) cvs.texi(,9759) @item --unchanged-group-format=@var{format} cvs.texi(,9760) These line groups contain lines common to both files. The default cvs.texi(,9761) unchanged group format is a format that outputs the line group as-is. cvs.texi(,9762) @end table cvs.texi(,9763) cvs.texi(,9764) In a line group format, ordinary characters represent themselves; cvs.texi(,9765) conversion specifications start with @samp{%} and have one of the cvs.texi(,9766) following forms. cvs.texi(,9767) cvs.texi(,9768) @table @samp cvs.texi(,9769) @item %< cvs.texi(,9770) stands for the lines from the first file, including the trailing newline. cvs.texi(,9771) Each line is formatted according to the old line format (@pxref{Line formats}). cvs.texi(,9772) cvs.texi(,9773) @item %> cvs.texi(,9774) stands for the lines from the second file, including the trailing newline. cvs.texi(,9775) Each line is formatted according to the new line format. cvs.texi(,9776) cvs.texi(,9777) @item %= cvs.texi(,9778) stands for the lines common to both files, including the trailing newline. cvs.texi(,9779) Each line is formatted according to the unchanged line format. cvs.texi(,9780) cvs.texi(,9781) @item %% cvs.texi(,9782) stands for @samp{%}. cvs.texi(,9783) cvs.texi(,9784) @item %c'@var{C}' cvs.texi(,9785) where @var{C} is a single character, stands for @var{C}. cvs.texi(,9786) @var{C} may not be a backslash or an apostrophe. cvs.texi(,9787) For example, @samp{%c':'} stands for a colon, even inside cvs.texi(,9788) the then-part of an if-then-else format, which a colon would cvs.texi(,9789) normally terminate. cvs.texi(,9790) cvs.texi(,9791) @item %c'\@var{O}' cvs.texi(,9792) where @var{O} is a string of 1, 2, or 3 octal digits, cvs.texi(,9793) stands for the character with octal code @var{O}. cvs.texi(,9794) For example, @samp{%c'\0'} stands for a null character. cvs.texi(,9795) cvs.texi(,9796) @item @var{F}@var{n} cvs.texi(,9797) where @var{F} is a @code{printf} conversion specification and @var{n} is one cvs.texi(,9798) of the following letters, stands for @var{n}'s value formatted with @var{F}. cvs.texi(,9799) cvs.texi(,9800) @table @samp cvs.texi(,9801) @item e cvs.texi(,9802) The line number of the line just before the group in the old file. cvs.texi(,9803) cvs.texi(,9804) @item f cvs.texi(,9805) The line number of the first line in the group in the old file; cvs.texi(,9806) equals @var{e} + 1. cvs.texi(,9807) cvs.texi(,9808) @item l cvs.texi(,9809) The line number of the last line in the group in the old file. cvs.texi(,9810) cvs.texi(,9811) @item m cvs.texi(,9812) The line number of the line just after the group in the old file; cvs.texi(,9813) equals @var{l} + 1. cvs.texi(,9814) cvs.texi(,9815) @item n cvs.texi(,9816) The number of lines in the group in the old file; equals @var{l} - @var{f} + 1. cvs.texi(,9817) cvs.texi(,9818) @item E, F, L, M, N cvs.texi(,9819) Likewise, for lines in the new file. cvs.texi(,9820) cvs.texi(,9821) @end table cvs.texi(,9822) cvs.texi(,9823) The @code{printf} conversion specification can be @samp{%d}, cvs.texi(,9824) @samp{%o}, @samp{%x}, or @samp{%X}, specifying decimal, octal, cvs.texi(,9825) lower case hexadecimal, or upper case hexadecimal output cvs.texi(,9826) respectively. After the @samp{%} the following options can appear in cvs.texi(,9827) sequence: a @samp{-} specifying left-justification; an integer cvs.texi(,9828) specifying the minimum field width; and a period followed by an cvs.texi(,9829) optional integer specifying the minimum number of digits. cvs.texi(,9830) For example, @samp{%5dN} prints the number of new lines in the group cvs.texi(,9831) in a field of width 5 characters, using the @code{printf} format @code{"%5d"}. cvs.texi(,9832) cvs.texi(,9833) @item (@var{A}=@var{B}?@var{T}:@var{E}) cvs.texi(,9834) If @var{A} equals @var{B} then @var{T} else @var{E}. cvs.texi(,9835) @var{A} and @var{B} are each either a decimal constant cvs.texi(,9836) or a single letter interpreted as above. cvs.texi(,9837) This format spec is equivalent to @var{T} if cvs.texi(,9838) @var{A}'s value equals @var{B}'s; otherwise it is equivalent to @var{E}. cvs.texi(,9839) cvs.texi(,9840) For example, @samp{%(N=0?no:%dN) line%(N=1?:s)} is equivalent to cvs.texi(,9841) @samp{no lines} if @var{N} (the number of lines in the group in the cvs.texi(,9842) new file) is 0, to @samp{1 line} if @var{N} is 1, and to @samp{%dN lines} cvs.texi(,9843) otherwise. cvs.texi(,9844) @end table cvs.texi(,9845) cvs.texi(,9846) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,9847) @node Line formats cvs.texi(,9848) @appendixsubsubsec Line formats cvs.texi(,9849) cvs.texi(,9850) Line formats control how each line taken from an input file is cvs.texi(,9851) output as part of a line group in if-then-else format. cvs.texi(,9852) cvs.texi(,9853) For example, the following command outputs text with a one-column cvs.texi(,9854) change indicator to the left of the text. The first column of output cvs.texi(,9855) is @samp{-} for deleted lines, @samp{|} for added lines, and a space cvs.texi(,9856) for unchanged lines. The formats contain newline characters where cvs.texi(,9857) newlines are desired on output. cvs.texi(,9858) cvs.texi(,9859) @example cvs.texi(,9860) cvs diff \ cvs.texi(,9861) --old-line-format='-%l cvs.texi(,9862) ' \ cvs.texi(,9863) --new-line-format='|%l cvs.texi(,9864) ' \ cvs.texi(,9865) --unchanged-line-format=' %l cvs.texi(,9866) ' \ cvs.texi(,9867) myfile cvs.texi(,9868) @end example cvs.texi(,9869) cvs.texi(,9870) To specify a line format, use one of the following options. You should cvs.texi(,9871) quote @var{format}, since it often contains shell metacharacters. cvs.texi(,9872) cvs.texi(,9873) @table @samp cvs.texi(,9874) @item --old-line-format=@var{format} cvs.texi(,9875) formats lines just from the first file. cvs.texi(,9876) cvs.texi(,9877) @item --new-line-format=@var{format} cvs.texi(,9878) formats lines just from the second file. cvs.texi(,9879) cvs.texi(,9880) @item --unchanged-line-format=@var{format} cvs.texi(,9881) formats lines common to both files. cvs.texi(,9882) cvs.texi(,9883) @item --line-format=@var{format} cvs.texi(,9884) formats all lines; in effect, it sets all three above options simultaneously. cvs.texi(,9885) @end table cvs.texi(,9886) cvs.texi(,9887) In a line format, ordinary characters represent themselves; cvs.texi(,9888) conversion specifications start with @samp{%} and have one of the cvs.texi(,9889) following forms. cvs.texi(,9890) cvs.texi(,9891) @table @samp cvs.texi(,9892) @item %l cvs.texi(,9893) stands for the contents of the line, not counting its trailing cvs.texi(,9894) newline (if any). This format ignores whether the line is incomplete. cvs.texi(,9895) cvs.texi(,9896) @item %L cvs.texi(,9897) stands for the contents of the line, including its trailing newline cvs.texi(,9898) (if any). If a line is incomplete, this format preserves its cvs.texi(,9899) incompleteness. cvs.texi(,9900) cvs.texi(,9901) @item %% cvs.texi(,9902) stands for @samp{%}. cvs.texi(,9903) cvs.texi(,9904) @item %c'@var{C}' cvs.texi(,9905) where @var{C} is a single character, stands for @var{C}. cvs.texi(,9906) @var{C} may not be a backslash or an apostrophe. cvs.texi(,9907) For example, @samp{%c':'} stands for a colon. cvs.texi(,9908) cvs.texi(,9909) @item %c'\@var{O}' cvs.texi(,9910) where @var{O} is a string of 1, 2, or 3 octal digits, cvs.texi(,9911) stands for the character with octal code @var{O}. cvs.texi(,9912) For example, @samp{%c'\0'} stands for a null character. cvs.texi(,9913) cvs.texi(,9914) @item @var{F}n cvs.texi(,9915) where @var{F} is a @code{printf} conversion specification, cvs.texi(,9916) stands for the line number formatted with @var{F}. cvs.texi(,9917) For example, @samp{%.5dn} prints the line number using the cvs.texi(,9918) @code{printf} format @code{"%.5d"}. @xref{Line group formats}, for cvs.texi(,9919) more about printf conversion specifications. cvs.texi(,9920) cvs.texi(,9921) @end table cvs.texi(,9922) cvs.texi(,9923) The default line format is @samp{%l} followed by a newline character. cvs.texi(,9924) cvs.texi(,9925) If the input contains tab characters and it is important that they line cvs.texi(,9926) up on output, you should ensure that @samp{%l} or @samp{%L} in a line cvs.texi(,9927) format is just after a tab stop (e.g.@: by preceding @samp{%l} or cvs.texi(,9928) @samp{%L} with a tab character), or you should use the @samp{-t} or cvs.texi(,9929) @samp{--expand-tabs} option. cvs.texi(,9930) cvs.texi(,9931) Taken together, the line and line group formats let you specify many cvs.texi(,9932) different formats. For example, the following command uses a format cvs.texi(,9933) similar to @code{diff}'s normal format. You can tailor this command cvs.texi(,9934) to get fine control over @code{diff}'s output. cvs.texi(,9935) cvs.texi(,9936) @example cvs.texi(,9937) cvs diff \ cvs.texi(,9938) --old-line-format='< %l cvs.texi(,9939) ' \ cvs.texi(,9940) --new-line-format='> %l cvs.texi(,9941) ' \ cvs.texi(,9942) --old-group-format='%df%(f=l?:,%dl)d%dE cvs.texi(,9943) %<' \ cvs.texi(,9944) --new-group-format='%dea%dF%(F=L?:,%dL) cvs.texi(,9945) %>' \ cvs.texi(,9946) --changed-group-format='%df%(f=l?:,%dl)c%dF%(F=L?:,%dL) cvs.texi(,9947) %<--- cvs.texi(,9948) %>' \ cvs.texi(,9949) --unchanged-group-format='' \ cvs.texi(,9950) myfile cvs.texi(,9951) @end example cvs.texi(,9952) cvs.texi(,9953) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,9954) @node diff examples cvs.texi(,9955) @appendixsubsec diff examples cvs.texi(,9956) cvs.texi(,9957) The following line produces a Unidiff (@samp{-u} flag) cvs.texi(,9958) between revision 1.14 and 1.19 of cvs.texi(,9959) @file{backend.c}. Due to the @samp{-kk} flag no cvs.texi(,9960) keywords are substituted, so differences that only depend cvs.texi(,9961) on keyword substitution are ignored. cvs.texi(,9962) cvs.texi(,9963) @example cvs.texi(,9964) $ cvs diff -kk -u -r 1.14 -r 1.19 backend.c cvs.texi(,9965) @end example cvs.texi(,9966) cvs.texi(,9967) Suppose the experimental branch EXPR1 was based on a cvs.texi(,9968) set of files tagged RELEASE_1_0. To see what has cvs.texi(,9969) happened on that branch, the following can be used: cvs.texi(,9970) cvs.texi(,9971) @example cvs.texi(,9972) $ cvs diff -r RELEASE_1_0 -r EXPR1 cvs.texi(,9973) @end example cvs.texi(,9974) cvs.texi(,9975) A command like this can be used to produce a context cvs.texi(,9976) diff between two releases: cvs.texi(,9977) cvs.texi(,9978) @example cvs.texi(,9979) $ cvs diff -c -r RELEASE_1_0 -r RELEASE_1_1 > diffs cvs.texi(,9980) @end example cvs.texi(,9981) cvs.texi(,9982) If you are maintaining ChangeLogs, a command like the following cvs.texi(,9983) just before you commit your changes may help you write cvs.texi(,9984) the ChangeLog entry. All local modifications that have cvs.texi(,9985) not yet been committed will be printed. cvs.texi(,9986) cvs.texi(,9987) @example cvs.texi(,9988) $ cvs diff -u | less cvs.texi(,9989) @end example cvs.texi(,9990) cvs.texi(,9991) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,9992) @node export cvs.texi(,9993) @appendixsec export---Export sources from CVS, similar to checkout cvs.texi(,9994) @cindex export (subcommand) cvs.texi(,9995) cvs.texi(,9996) @itemize @bullet cvs.texi(,9997) @item cvs.texi(,9998) Synopsis: export [-flNnR] [-r rev|-D date] [-k subst] [-d dir] module@dots{} cvs.texi(,9999) @item cvs.texi(,10000) Requires: repository. cvs.texi(,10001) @item cvs.texi(,10002) Changes: current directory. cvs.texi(,10003) @end itemize cvs.texi(,10004) cvs.texi(,10005) This command is a variant of @code{checkout}; use it cvs.texi(,10006) when you want a copy of the source for module without cvs.texi(,10007) the @sc{cvs} administrative directories. For example, you cvs.texi(,10008) might use @code{export} to prepare source for shipment cvs.texi(,10009) off-site. This command requires that you specify a cvs.texi(,10010) date or tag (with @samp{-D} or @samp{-r}), so that you cvs.texi(,10011) can count on reproducing the source you ship to others cvs.texi(,10012) (and thus it always prunes empty directories). cvs.texi(,10013) cvs.texi(,10014) One often would like to use @samp{-kv} with @code{cvs cvs.texi(,10015) export}. This causes any keywords to be cvs.texi(,10016) expanded such that an import done at some other site cvs.texi(,10017) will not lose the keyword revision information. But be cvs.texi(,10018) aware that doesn't handle an export containing binary cvs.texi(,10019) files correctly. Also be aware that after having used cvs.texi(,10020) @samp{-kv}, one can no longer use the @code{ident} cvs.texi(,10021) command (which is part of the @sc{rcs} suite---see cvs.texi(,10022) ident(1)) which looks for keyword strings. If cvs.texi(,10023) you want to be able to use @code{ident} you must not cvs.texi(,10024) use @samp{-kv}. cvs.texi(,10025) cvs.texi(,10026) @menu cvs.texi(,10027) * export options:: export options cvs.texi(,10028) @end menu cvs.texi(,10029) cvs.texi(,10030) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,10031) @node export options cvs.texi(,10032) @appendixsubsec export options cvs.texi(,10033) cvs.texi(,10034) These standard options are supported by @code{export} cvs.texi(,10035) (@pxref{Common options}, for a complete description of cvs.texi(,10036) them): cvs.texi(,10037) cvs.texi(,10038) @table @code cvs.texi(,10039) @item -D @var{date} cvs.texi(,10040) Use the most recent revision no later than @var{date}. cvs.texi(,10041) cvs.texi(,10042) @item -f cvs.texi(,10043) If no matching revision is found, retrieve the most cvs.texi(,10044) recent revision (instead of ignoring the file). cvs.texi(,10045) cvs.texi(,10046) @item -l cvs.texi(,10047) Local; run only in current working directory. cvs.texi(,10048) cvs.texi(,10049) @item -n cvs.texi(,10050) Do not run any checkout program. cvs.texi(,10051) cvs.texi(,10052) @item -R cvs.texi(,10053) Export directories recursively. This is on by default. cvs.texi(,10054) cvs.texi(,10055) @item -r @var{tag} cvs.texi(,10056) Use revision @var{tag}. cvs.texi(,10057) @end table cvs.texi(,10058) cvs.texi(,10059) In addition, these options (that are common to cvs.texi(,10060) @code{checkout} and @code{export}) are also supported: cvs.texi(,10061) cvs.texi(,10062) @table @code cvs.texi(,10063) @item -d @var{dir} cvs.texi(,10064) Create a directory called @var{dir} for the working cvs.texi(,10065) files, instead of using the module name. cvs.texi(,10066) @xref{checkout options}, for complete details on how cvs.texi(,10067) @sc{cvs} handles this flag. cvs.texi(,10068) cvs.texi(,10069) @item -k @var{subst} cvs.texi(,10070) Set keyword expansion mode (@pxref{Substitution modes}). cvs.texi(,10071) cvs.texi(,10072) @item -N cvs.texi(,10073) Only useful together with @samp{-d @var{dir}}. cvs.texi(,10074) @xref{checkout options}, for complete details on how cvs.texi(,10075) @sc{cvs} handles this flag. cvs.texi(,10076) @end table cvs.texi(,10077) cvs.texi(,10086) cvs.texi(,10087) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,10088) @node history cvs.texi(,10089) @appendixsec history---Show status of files and users cvs.texi(,10090) @cindex history (subcommand) cvs.texi(,10091) cvs.texi(,10092) @itemize @bullet cvs.texi(,10093) @item cvs.texi(,10094) Synopsis: history [-report] [-flags] [-options args] [files@dots{}] cvs.texi(,10095) @item cvs.texi(,10096) Requires: the file @file{$CVSROOT/CVSROOT/history} cvs.texi(,10097) @item cvs.texi(,10098) Changes: nothing. cvs.texi(,10099) @end itemize cvs.texi(,10100) cvs.texi(,10101) @sc{cvs} can keep a history file that tracks each use of the cvs.texi(,10102) @code{checkout}, @code{commit}, @code{rtag}, cvs.texi(,10103) @code{update}, and @code{release} commands. You can cvs.texi(,10104) use @code{history} to display this information in cvs.texi(,10105) various formats. cvs.texi(,10106) cvs.texi(,10107) Logging must be enabled by creating the file cvs.texi(,10108) @file{$CVSROOT/CVSROOT/history}. cvs.texi(,10109) cvs.texi(,10110) @strong{Note: @code{history} uses @samp{-f}, @samp{-l}, cvs.texi(,10111) @samp{-n}, and @samp{-p} in ways that conflict with the cvs.texi(,10112) normal use inside @sc{cvs} (@pxref{Common options}).} cvs.texi(,10113) cvs.texi(,10114) @menu cvs.texi(,10115) * history options:: history options cvs.texi(,10116) @end menu cvs.texi(,10117) cvs.texi(,10118) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,10119) @node history options cvs.texi(,10120) @appendixsubsec history options cvs.texi(,10121) cvs.texi(,10122) Several options (shown above as @samp{-report}) control what cvs.texi(,10123) kind of report is generated: cvs.texi(,10124) cvs.texi(,10125) @table @code cvs.texi(,10126) @item -c cvs.texi(,10127) Report on each time commit was used (i.e., each time cvs.texi(,10128) the repository was modified). cvs.texi(,10129) cvs.texi(,10130) @item -e cvs.texi(,10131) Everything (all record types). Equivalent to cvs.texi(,10132) specifying @samp{-x} with all record types. Of course, cvs.texi(,10133) @samp{-e} will also include record types which are cvs.texi(,10134) added in a future version of @sc{cvs}; if you are cvs.texi(,10135) writing a script which can only handle certain record cvs.texi(,10136) types, you'll want to specify @samp{-x}. cvs.texi(,10137) cvs.texi(,10138) @item -m @var{module} cvs.texi(,10139) Report on a particular module. (You can meaningfully cvs.texi(,10140) use @samp{-m} more than once on the command line.) cvs.texi(,10141) cvs.texi(,10142) @item -o cvs.texi(,10143) Report on checked-out modules. This is the default report type. cvs.texi(,10144) cvs.texi(,10145) @item -T cvs.texi(,10146) Report on all tags. cvs.texi(,10147) cvs.texi(,10148) @item -x @var{type} cvs.texi(,10149) Extract a particular set of record types @var{type} from the @sc{cvs} cvs.texi(,10150) history. The types are indicated by single letters, cvs.texi(,10151) which you may specify in combination. cvs.texi(,10152) cvs.texi(,10153) Certain commands have a single record type: cvs.texi(,10154) cvs.texi(,10155) @table @code cvs.texi(,10156) @item F cvs.texi(,10157) release cvs.texi(,10158) @item O cvs.texi(,10159) checkout cvs.texi(,10160) @item E cvs.texi(,10161) export cvs.texi(,10162) @item T cvs.texi(,10163) rtag cvs.texi(,10164) @end table cvs.texi(,10165) cvs.texi(,10166) @noindent cvs.texi(,10167) One of four record types may result from an update: cvs.texi(,10168) cvs.texi(,10169) @table @code cvs.texi(,10170) @item C cvs.texi(,10171) A merge was necessary but collisions were cvs.texi(,10172) detected (requiring manual merging). cvs.texi(,10173) @item G cvs.texi(,10174) A merge was necessary and it succeeded. cvs.texi(,10175) @item U cvs.texi(,10176) A working file was copied from the repository. cvs.texi(,10177) @item W cvs.texi(,10178) The working copy of a file was deleted during cvs.texi(,10179) update (because it was gone from the repository). cvs.texi(,10180) @end table cvs.texi(,10181) cvs.texi(,10182) @noindent cvs.texi(,10183) One of three record types results from commit: cvs.texi(,10184) cvs.texi(,10185) @table @code cvs.texi(,10186) @item A cvs.texi(,10187) A file was added for the first time. cvs.texi(,10188) @item M cvs.texi(,10189) A file was modified. cvs.texi(,10190) @item R cvs.texi(,10191) A file was removed. cvs.texi(,10192) @end table cvs.texi(,10193) @end table cvs.texi(,10194) cvs.texi(,10195) The options shown as @samp{-flags} constrain or expand cvs.texi(,10196) the report without requiring option arguments: cvs.texi(,10197) cvs.texi(,10198) @table @code cvs.texi(,10199) @item -a cvs.texi(,10200) Show data for all users (the default is to show data cvs.texi(,10201) only for the user executing @code{history}). cvs.texi(,10202) cvs.texi(,10203) @item -l cvs.texi(,10204) Show last modification only. cvs.texi(,10205) cvs.texi(,10206) @item -w cvs.texi(,10207) Show only the records for modifications done from the cvs.texi(,10208) same working directory where @code{history} is cvs.texi(,10209) executing. cvs.texi(,10210) @end table cvs.texi(,10211) cvs.texi(,10212) The options shown as @samp{-options @var{args}} constrain the report cvs.texi(,10213) based on an argument: cvs.texi(,10214) cvs.texi(,10215) @table @code cvs.texi(,10216) @item -b @var{str} cvs.texi(,10217) Show data back to a record containing the string cvs.texi(,10218) @var{str} in either the module name, the file name, or cvs.texi(,10219) the repository path. cvs.texi(,10220) cvs.texi(,10221) @item -D @var{date} cvs.texi(,10222) Show data since @var{date}. This is slightly different cvs.texi(,10223) from the normal use of @samp{-D @var{date}}, which cvs.texi(,10224) selects the newest revision older than @var{date}. cvs.texi(,10225) cvs.texi(,10226) @item -f @var{file} cvs.texi(,10227) Show data for a particular file cvs.texi(,10228) (you can specify several @samp{-f} options on the same command line). cvs.texi(,10229) This is equivalent to specifying the file on the command line. cvs.texi(,10230) cvs.texi(,10231) @item -n @var{module} cvs.texi(,10232) Show data for a particular module cvs.texi(,10233) (you can specify several @samp{-n} options on the same command line). cvs.texi(,10234) cvs.texi(,10235) @item -p @var{repository} cvs.texi(,10236) Show data for a particular source repository (you cvs.texi(,10237) can specify several @samp{-p} options on the same command cvs.texi(,10238) line). cvs.texi(,10239) cvs.texi(,10240) @item -r @var{rev} cvs.texi(,10241) Show records referring to revisions since the revision cvs.texi(,10242) or tag named @var{rev} appears in individual @sc{rcs} cvs.texi(,10243) files. Each @sc{rcs} file is searched for the revision or cvs.texi(,10244) tag. cvs.texi(,10245) cvs.texi(,10246) @item -t @var{tag} cvs.texi(,10247) Show records since tag @var{tag} was last added to the cvs.texi(,10248) history file. This differs from the @samp{-r} flag cvs.texi(,10249) above in that it reads only the history file, not the cvs.texi(,10250) @sc{rcs} files, and is much faster. cvs.texi(,10251) cvs.texi(,10252) @item -u @var{name} cvs.texi(,10253) Show records for user @var{name}. cvs.texi(,10254) cvs.texi(,10255) @item -z @var{timezone} cvs.texi(,10256) Show times in the selected records using the specified cvs.texi(,10257) time zone instead of UTC. cvs.texi(,10258) @end table cvs.texi(,10259) cvs.texi(,10268) cvs.texi(,10269) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,10270) @node import cvs.texi(,10271) @appendixsec import---Import sources into CVS, using vendor branches cvs.texi(,10272) @cindex import (subcommand) cvs.texi(,10273) cvs.texi(,10274) @c FIXME: This node is way too long for one which has subnodes. cvs.texi(,10275) cvs.texi(,10276) @itemize @bullet cvs.texi(,10277) @item cvs.texi(,10278) Synopsis: import [-options] repository vendortag releasetag@dots{} cvs.texi(,10279) @item cvs.texi(,10280) Requires: Repository, source distribution directory. cvs.texi(,10281) @item cvs.texi(,10282) Changes: repository. cvs.texi(,10283) @end itemize cvs.texi(,10284) cvs.texi(,10285) Use @code{import} to incorporate an entire source cvs.texi(,10286) distribution from an outside source (e.g., a source cvs.texi(,10287) vendor) into your source repository directory. You can cvs.texi(,10288) use this command both for initial creation of a cvs.texi(,10289) repository, and for wholesale updates to the module cvs.texi(,10290) from the outside source. @xref{Tracking sources}, for cvs.texi(,10291) a discussion on this subject. cvs.texi(,10292) cvs.texi(,10293) The @var{repository} argument gives a directory name cvs.texi(,10294) (or a path to a directory) under the @sc{cvs} root directory cvs.texi(,10295) for repositories; if the directory did not exist, cvs.texi(,10296) import creates it. cvs.texi(,10297) cvs.texi(,10298) When you use import for updates to source that has been cvs.texi(,10299) modified in your source repository (since a prior cvs.texi(,10300) import), it will notify you of any files that conflict cvs.texi(,10301) in the two branches of development; use @samp{checkout cvs.texi(,10302) -j} to reconcile the differences, as import instructs cvs.texi(,10303) you to do. cvs.texi(,10304) cvs.texi(,10305) If @sc{cvs} decides a file should be ignored cvs.texi(,10306) (@pxref{cvsignore}), it does not import it and prints cvs.texi(,10307) @samp{I } followed by the filename (@pxref{import output}, for a cvs.texi(,10308) complete description of the output). cvs.texi(,10309) cvs.texi(,10310) If the file @file{$CVSROOT/CVSROOT/cvswrappers} exists, cvs.texi(,10311) any file whose names match the specifications in that cvs.texi(,10312) file will be treated as packages and the appropriate cvs.texi(,10313) filtering will be performed on the file/directory cvs.texi(,10314) before being imported. @xref{Wrappers}. cvs.texi(,10315) cvs.texi(,10316) The outside source is saved in a first-level cvs.texi(,10317) branch, by default 1.1.1. Updates are leaves of this cvs.texi(,10318) branch; for example, files from the first imported cvs.texi(,10319) collection of source will be revision 1.1.1.1, then cvs.texi(,10320) files from the first imported update will be revision cvs.texi(,10321) 1.1.1.2, and so on. cvs.texi(,10322) cvs.texi(,10323) At least three arguments are required. cvs.texi(,10324) @var{repository} is needed to identify the collection cvs.texi(,10325) of source. @var{vendortag} is a tag for the entire cvs.texi(,10326) branch (e.g., for 1.1.1). You must also specify at cvs.texi(,10327) least one @var{releasetag} to identify the files at cvs.texi(,10328) the leaves created each time you execute @code{import}. cvs.texi(,10329) cvs.texi(,10330) @c I'm not completely sure this belongs here. But cvs.texi(,10331) @c we need to say it _somewhere_ reasonably obvious; it cvs.texi(,10332) @c is a common misconception among people first learning CVS cvs.texi(,10333) Note that @code{import} does @emph{not} change the cvs.texi(,10334) directory in which you invoke it. In particular, it cvs.texi(,10335) does not set up that directory as a @sc{cvs} working cvs.texi(,10336) directory; if you want to work with the sources import cvs.texi(,10337) them first and then check them out into a different cvs.texi(,10338) directory (@pxref{Getting the source}). cvs.texi(,10339) cvs.texi(,10340) @menu cvs.texi(,10341) * import options:: import options cvs.texi(,10342) * import output:: import output cvs.texi(,10343) * import examples:: import examples cvs.texi(,10344) @end menu cvs.texi(,10345) cvs.texi(,10346) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,10347) @node import options cvs.texi(,10348) @appendixsubsec import options cvs.texi(,10349) cvs.texi(,10350) This standard option is supported by @code{import} cvs.texi(,10351) (@pxref{Common options}, for a complete description): cvs.texi(,10352) cvs.texi(,10353) @table @code cvs.texi(,10354) @item -m @var{message} cvs.texi(,10355) Use @var{message} as log information, instead of cvs.texi(,10356) invoking an editor. cvs.texi(,10357) @end table cvs.texi(,10358) cvs.texi(,10359) There are the following additional special options. cvs.texi(,10360) cvs.texi(,10361) @table @code cvs.texi(,10362) @item -b @var{branch} cvs.texi(,10363) See @ref{Multiple vendor branches}. cvs.texi(,10364) cvs.texi(,10365) @item -k @var{subst} cvs.texi(,10366) Indicate the keyword expansion mode desired. This cvs.texi(,10367) setting will apply to all files created during the cvs.texi(,10368) import, but not to any files that previously existed in cvs.texi(,10369) the repository. See @ref{Substitution modes}, for a cvs.texi(,10370) list of valid @samp{-k} settings. cvs.texi(,10371) cvs.texi(,10372) @item -I @var{name} cvs.texi(,10373) Specify file names that should be ignored during cvs.texi(,10374) import. You can use this option repeatedly. To avoid cvs.texi(,10375) ignoring any files at all (even those ignored by cvs.texi(,10376) default), specify `-I !'. cvs.texi(,10377) cvs.texi(,10378) @var{name} can be a file name pattern of the same type cvs.texi(,10379) that you can specify in the @file{.cvsignore} file. cvs.texi(,10380) @xref{cvsignore}. cvs.texi(,10381) @c -- Is this really true? cvs.texi(,10382) cvs.texi(,10383) @item -W @var{spec} cvs.texi(,10384) Specify file names that should be filtered during cvs.texi(,10385) import. You can use this option repeatedly. cvs.texi(,10386) cvs.texi(,10387) @var{spec} can be a file name pattern of the same type cvs.texi(,10388) that you can specify in the @file{.cvswrappers} cvs.texi(,10389) file. @xref{Wrappers}. cvs.texi(,10390) @end table cvs.texi(,10391) cvs.texi(,10392) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,10393) @node import output cvs.texi(,10394) @appendixsubsec import output cvs.texi(,10395) cvs.texi(,10396) @code{import} keeps you informed of its progress by printing a line cvs.texi(,10397) for each file, preceded by one character indicating the status of the file: cvs.texi(,10398) cvs.texi(,10399) @table @code cvs.texi(,10400) @item U @var{file} cvs.texi(,10401) The file already exists in the repository and has not been locally cvs.texi(,10402) modified; a new revision has been created (if necessary). cvs.texi(,10403) cvs.texi(,10404) @item N @var{file} cvs.texi(,10405) The file is a new file which has been added to the repository. cvs.texi(,10406) cvs.texi(,10407) @item C @var{file} cvs.texi(,10408) The file already exists in the repository but has been locally modified; cvs.texi(,10409) you will have to merge the changes. cvs.texi(,10410) cvs.texi(,10411) @item I @var{file} cvs.texi(,10412) The file is being ignored (@pxref{cvsignore}). cvs.texi(,10413) cvs.texi(,10414) @cindex Symbolic link, importing cvs.texi(,10415) @cindex Link, symbolic, importing cvs.texi(,10416) @c FIXME: also (somewhere else) probably cvs.texi(,10417) @c should be documenting what happens if you "cvs add" cvs.texi(,10418) @c a symbolic link. Also maybe what happens if cvs.texi(,10419) @c you manually create symbolic links within the cvs.texi(,10420) @c repository (? - not sure why we'd want to suggest cvs.texi(,10421) @c doing that). cvs.texi(,10422) @item L @var{file} cvs.texi(,10423) The file is a symbolic link; @code{cvs import} ignores symbolic links. cvs.texi(,10424) People periodically suggest that this behavior should cvs.texi(,10425) be changed, but if there is a consensus on what it cvs.texi(,10426) should be changed to, it is not apparent. cvs.texi(,10427) (Various options in the @file{modules} file can be used cvs.texi(,10428) to recreate symbolic links on checkout, update, etc.; cvs.texi(,10429) @pxref{modules}.) cvs.texi(,10430) @end table cvs.texi(,10431) cvs.texi(,10432) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,10433) @node import examples cvs.texi(,10434) @appendixsubsec import examples cvs.texi(,10435) cvs.texi(,10436) See @ref{Tracking sources}, and @ref{From files}. cvs.texi(,10437) cvs.texi(,10438) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,10439) @node log cvs.texi(,10440) @appendixsec log---Print out log information for files cvs.texi(,10441) @cindex log (subcommand) cvs.texi(,10442) cvs.texi(,10443) @itemize @bullet cvs.texi(,10444) @item cvs.texi(,10445) Synopsis: log [options] [files@dots{}] cvs.texi(,10446) @item cvs.texi(,10447) Requires: repository, working directory. cvs.texi(,10448) @item cvs.texi(,10449) Changes: nothing. cvs.texi(,10450) @end itemize cvs.texi(,10451) cvs.texi(,10452) Display log information for files. @code{log} used to cvs.texi(,10453) call the @sc{rcs} utility @code{rlog}. Although this cvs.texi(,10454) is no longer true in the current sources, this history cvs.texi(,10455) determines the format of the output and the options, cvs.texi(,10456) which are not quite in the style of the other @sc{cvs} cvs.texi(,10457) commands. cvs.texi(,10458) cvs.texi(,10459) @cindex Timezone, in output cvs.texi(,10460) @cindex Zone, time, in output cvs.texi(,10461) @c Kind of a funny place to document the timezone used cvs.texi(,10462) @c in output from commands other than @code{log}. cvs.texi(,10463) @c There is also more we need to say about this, cvs.texi(,10464) @c including what happens in a client/server environment. cvs.texi(,10465) The output includes the location of the @sc{rcs} file, cvs.texi(,10466) the @dfn{head} revision (the latest revision on the cvs.texi(,10467) trunk), all symbolic names (tags) and some other cvs.texi(,10468) things. For each revision, the revision number, the cvs.texi(,10469) author, the number of lines added/deleted and the log cvs.texi(,10470) message are printed. All times are displayed in cvs.texi(,10471) Coordinated Universal Time (UTC). (Other parts of cvs.texi(,10472) @sc{cvs} print times in the local timezone). cvs.texi(,10473) @c FIXCVS: need a better way to control the timezone cvs.texi(,10474) @c used in output. Previous/current versions of CVS did/do cvs.texi(,10475) @c sometimes support -z in RCSINIT, and/or an cvs.texi(,10476) @c undocumented (except by reference to 'rlog') -z option cvs.texi(,10477) @c to cvs log, but this has not been a consistent, cvs.texi(,10478) @c documented feature. Perhaps a new global option, cvs.texi(,10479) @c where LT means the client's timezone, which the cvs.texi(,10480) @c client then communicates to the server, is the cvs.texi(,10481) @c right solution. cvs.texi(,10482) cvs.texi(,10483) @strong{Note: @code{log} uses @samp{-R} in a way that conflicts cvs.texi(,10484) with the normal use inside @sc{cvs} (@pxref{Common options}).} cvs.texi(,10485) cvs.texi(,10486) @menu cvs.texi(,10487) * log options:: log options cvs.texi(,10488) * log examples:: log examples cvs.texi(,10489) @end menu cvs.texi(,10490) cvs.texi(,10491) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,10492) @node log options cvs.texi(,10493) @appendixsubsec log options cvs.texi(,10494) cvs.texi(,10495) By default, @code{log} prints all information that is cvs.texi(,10496) available. All other options restrict the output. cvs.texi(,10497) cvs.texi(,10498) @table @code cvs.texi(,10499) @item -b cvs.texi(,10500) Print information about the revisions on the default cvs.texi(,10501) branch, normally the highest branch on the trunk. cvs.texi(,10502) cvs.texi(,10503) @item -d @var{dates} cvs.texi(,10504) Print information about revisions with a checkin cvs.texi(,10505) date/time in the range given by the cvs.texi(,10506) semicolon-separated list of dates. The date formats cvs.texi(,10507) accepted are those accepted by the @samp{-D} option to cvs.texi(,10508) many other @sc{cvs} commands (@pxref{Common options}). cvs.texi(,10509) Dates can be combined into ranges as follows: cvs.texi(,10510) cvs.texi(,10511) @c Should we be thinking about accepting ISO8601 cvs.texi(,10512) @c ranges? For example "1972-09-10/1972-09-12". cvs.texi(,10513) @table @code cvs.texi(,10514) @item @var{d1}<@var{d2} cvs.texi(,10515) @itemx @var{d2}>@var{d1} cvs.texi(,10516) Select the revisions that were deposited between cvs.texi(,10517) @var{d1} and @var{d2}. cvs.texi(,10518) cvs.texi(,10519) @item <@var{d} cvs.texi(,10520) @itemx @var{d}> cvs.texi(,10521) Select all revisions dated @var{d} or earlier. cvs.texi(,10522) cvs.texi(,10523) @item @var{d}< cvs.texi(,10524) @itemx >@var{d} cvs.texi(,10525) Select all revisions dated @var{d} or later. cvs.texi(,10526) cvs.texi(,10527) @item @var{d} cvs.texi(,10528) Select the single, latest revision dated @var{d} or cvs.texi(,10529) earlier. cvs.texi(,10530) @end table cvs.texi(,10531) cvs.texi(,10532) The @samp{>} or @samp{<} characters may be followed by cvs.texi(,10533) @samp{=} to indicate an inclusive range rather than an cvs.texi(,10534) exclusive one. cvs.texi(,10535) cvs.texi(,10536) Note that the separator is a semicolon (;). cvs.texi(,10537) cvs.texi(,10538) @item -h cvs.texi(,10539) Print only the name of the @sc{rcs} file, name cvs.texi(,10540) of the file in the working directory, head, cvs.texi(,10541) default branch, access list, locks, symbolic names, and cvs.texi(,10542) suffix. cvs.texi(,10543) cvs.texi(,10544) @item -l cvs.texi(,10545) Local; run only in current working directory. (Default cvs.texi(,10546) is to run recursively). cvs.texi(,10547) cvs.texi(,10548) @item -N cvs.texi(,10549) Do not print the list of tags for this file. This cvs.texi(,10550) option can be very useful when your site uses a lot of cvs.texi(,10551) tags, so rather than "more"'ing over 3 pages of tag cvs.texi(,10552) information, the log information is presented without cvs.texi(,10553) tags at all. cvs.texi(,10554) cvs.texi(,10555) @item -R cvs.texi(,10556) Print only the name of the @sc{rcs} file. cvs.texi(,10557) cvs.texi(,10558) @c Note that using a bare revision (in addition to not cvs.texi(,10559) @c being explicitly documented here) is potentially cvs.texi(,10560) @c confusing; it shows the log message to get from the cvs.texi(,10561) @c previous revision to that revision. "-r1.3 -r1.6" cvs.texi(,10562) @c (equivalent to "-r1.3,1.6") is even worse; it cvs.texi(,10563) @c prints the messages to get from 1.2 to 1.3 and 1.5 cvs.texi(,10564) @c to 1.6. By analogy with "cvs diff", users might cvs.texi(,10565) @c expect that it is more like specifying a range. cvs.texi(,10566) @c It is not 100% clear to me how much of this should cvs.texi(,10567) @c be documented (for example, multiple -r options cvs.texi(,10568) @c perhaps could/should be deprecated given the false cvs.texi(,10569) @c analogy with "cvs diff"). cvs.texi(,10570) @c In general, this section should be rewritten to talk cvs.texi(,10571) @c about messages to get from revision rev1 to rev2, cvs.texi(,10572) @c rather than messages for revision rev2 (that is, the cvs.texi(,10573) @c messages are associated with a change not a static cvs.texi(,10574) @c revision and failing to make this distinction causes cvs.texi(,10575) @c much confusion). cvs.texi(,10576) @item -r@var{revisions} cvs.texi(,10577) Print information about revisions given in the cvs.texi(,10578) comma-separated list @var{revisions} of revisions and cvs.texi(,10579) ranges. The following table explains the available cvs.texi(,10580) range formats: cvs.texi(,10581) cvs.texi(,10582) @table @code cvs.texi(,10583) @item @var{rev1}:@var{rev2} cvs.texi(,10584) Revisions @var{rev1} to @var{rev2} (which must be on cvs.texi(,10585) the same branch). cvs.texi(,10586) cvs.texi(,10587) @item @var{rev1}::@var{rev2} cvs.texi(,10588) The same, but excluding @var{rev1}. cvs.texi(,10589) cvs.texi(,10590) @item :@var{rev} cvs.texi(,10591) @itemx ::@var{rev} cvs.texi(,10592) Revisions from the beginning of the branch up to cvs.texi(,10593) and including @var{rev}. cvs.texi(,10594) cvs.texi(,10595) @item @var{rev}: cvs.texi(,10596) Revisions starting with @var{rev} to the end of the cvs.texi(,10597) branch containing @var{rev}. cvs.texi(,10598) cvs.texi(,10599) @item @var{rev}:: cvs.texi(,10600) Revisions starting just after @var{rev} to the end of the cvs.texi(,10601) branch containing @var{rev}. cvs.texi(,10602) cvs.texi(,10603) @item @var{branch} cvs.texi(,10604) An argument that is a branch means all revisions on cvs.texi(,10605) that branch. cvs.texi(,10606) cvs.texi(,10607) @item @var{branch1}:@var{branch2} cvs.texi(,10608) @itemx @var{branch1}::@var{branch2} cvs.texi(,10609) A range of branches means all revisions cvs.texi(,10610) on the branches in that range. cvs.texi(,10611) cvs.texi(,10612) @item @var{branch}. cvs.texi(,10613) The latest revision in @var{branch}. cvs.texi(,10614) @end table cvs.texi(,10615) cvs.texi(,10616) A bare @samp{-r} with no revisions means the latest cvs.texi(,10617) revision on the default branch, normally the trunk. cvs.texi(,10618) There can be no space between the @samp{-r} option and cvs.texi(,10619) its argument. cvs.texi(,10620) cvs.texi(,10621) @item -S cvs.texi(,10622) Suppress the header if no revisions are selected. cvs.texi(,10623) cvs.texi(,10624) @item -s @var{states} cvs.texi(,10625) Print information about revisions whose state cvs.texi(,10626) attributes match one of the states given in the cvs.texi(,10627) comma-separated list @var{states}. cvs.texi(,10628) cvs.texi(,10629) @item -t cvs.texi(,10630) Print the same as @samp{-h}, plus the descriptive text. cvs.texi(,10631) cvs.texi(,10632) @item -w@var{logins} cvs.texi(,10633) Print information about revisions checked in by users cvs.texi(,10634) with login names appearing in the comma-separated list cvs.texi(,10635) @var{logins}. If @var{logins} is omitted, the user's cvs.texi(,10636) login is assumed. There can be no space between the cvs.texi(,10637) @samp{-w} option and its argument. cvs.texi(,10638) @end table cvs.texi(,10639) cvs.texi(,10640) @code{log} prints the intersection of the revisions cvs.texi(,10641) selected with the options @samp{-d}, @samp{-s}, and cvs.texi(,10642) @samp{-w}, intersected with the union of the revisions cvs.texi(,10643) selected by @samp{-b} and @samp{-r}. cvs.texi(,10644) cvs.texi(,10645) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,10646) @node log examples cvs.texi(,10647) @appendixsubsec log examples cvs.texi(,10648) cvs.texi(,10649) Contributed examples are gratefully accepted. cvs.texi(,10650) cvs.texi(,10651) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,10652) @node rdiff cvs.texi(,10653) @appendixsec rdiff---'patch' format diffs between releases cvs.texi(,10654) @cindex rdiff (subcommand) cvs.texi(,10655) cvs.texi(,10656) @itemize @bullet cvs.texi(,10657) @item cvs.texi(,10658) rdiff [-flags] [-V vn] [-r t|-D d [-r t2|-D d2]] modules@dots{} cvs.texi(,10659) @item cvs.texi(,10660) Requires: repository. cvs.texi(,10661) @item cvs.texi(,10662) Changes: nothing. cvs.texi(,10663) @item cvs.texi(,10664) Synonym: patch cvs.texi(,10665) @end itemize cvs.texi(,10666) cvs.texi(,10667) Builds a Larry Wall format patch(1) file between two cvs.texi(,10668) releases, that can be fed directly into the @code{patch} cvs.texi(,10669) program to bring an old release up-to-date with the new cvs.texi(,10670) release. (This is one of the few @sc{cvs} commands that cvs.texi(,10671) operates directly from the repository, and doesn't cvs.texi(,10672) require a prior checkout.) The diff output is sent to cvs.texi(,10673) the standard output device. cvs.texi(,10674) cvs.texi(,10675) You can specify (using the standard @samp{-r} and cvs.texi(,10676) @samp{-D} options) any combination of one or two cvs.texi(,10677) revisions or dates. If only one revision or date is cvs.texi(,10678) specified, the patch file reflects differences between cvs.texi(,10679) that revision or date and the current head revisions in cvs.texi(,10680) the @sc{rcs} file. cvs.texi(,10681) cvs.texi(,10682) Note that if the software release affected is contained cvs.texi(,10683) in more than one directory, then it may be necessary to cvs.texi(,10684) specify the @samp{-p} option to the @code{patch} command when cvs.texi(,10685) patching the old sources, so that @code{patch} is able to find cvs.texi(,10686) the files that are located in other directories. cvs.texi(,10687) cvs.texi(,10688) @menu cvs.texi(,10689) * rdiff options:: rdiff options cvs.texi(,10690) * rdiff examples:: rdiff examples cvs.texi(,10691) @end menu cvs.texi(,10692) cvs.texi(,10693) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,10694) @node rdiff options cvs.texi(,10695) @appendixsubsec rdiff options cvs.texi(,10696) cvs.texi(,10697) These standard options are supported by @code{rdiff} cvs.texi(,10698) (@pxref{Common options}, for a complete description of cvs.texi(,10699) them): cvs.texi(,10700) cvs.texi(,10701) @table @code cvs.texi(,10702) @item -D @var{date} cvs.texi(,10703) Use the most recent revision no later than @var{date}. cvs.texi(,10704) cvs.texi(,10705) @item -f cvs.texi(,10706) If no matching revision is found, retrieve the most cvs.texi(,10707) recent revision (instead of ignoring the file). cvs.texi(,10708) cvs.texi(,10709) @item -l cvs.texi(,10710) Local; don't descend subdirectories. cvs.texi(,10711) cvs.texi(,10712) @item -R cvs.texi(,10713) Examine directories recursively. This option is on by default. cvs.texi(,10714) cvs.texi(,10715) @item -r @var{tag} cvs.texi(,10716) Use revision @var{tag}. cvs.texi(,10717) @end table cvs.texi(,10718) cvs.texi(,10719) In addition to the above, these options are available: cvs.texi(,10720) cvs.texi(,10721) @table @code cvs.texi(,10722) @item -c cvs.texi(,10723) Use the context diff format. This is the default format. cvs.texi(,10724) cvs.texi(,10725) @item -s cvs.texi(,10726) Create a summary change report instead of a patch. The cvs.texi(,10727) summary includes information about files that were cvs.texi(,10728) changed or added between the releases. It is sent to cvs.texi(,10729) the standard output device. This is useful for finding cvs.texi(,10730) out, for example, which files have changed between two cvs.texi(,10731) dates or revisions. cvs.texi(,10732) cvs.texi(,10733) @item -t cvs.texi(,10734) A diff of the top two revisions is sent to the standard cvs.texi(,10735) output device. This is most useful for seeing what the cvs.texi(,10736) last change to a file was. cvs.texi(,10737) cvs.texi(,10738) @item -u cvs.texi(,10739) Use the unidiff format for the context diffs. cvs.texi(,10740) Remember that old versions cvs.texi(,10741) of the @code{patch} program can't handle the unidiff cvs.texi(,10742) format, so if you plan to post this patch to the net cvs.texi(,10743) you should probably not use @samp{-u}. cvs.texi(,10744) cvs.texi(,10745) @item -V @var{vn} cvs.texi(,10746) Expand keywords according to the rules current in cvs.texi(,10747) @sc{rcs} version @var{vn} (the expansion format changed with cvs.texi(,10748) @sc{rcs} version 5). Note that this option is no cvs.texi(,10749) longer accepted. @sc{cvs} will always expand keywords the cvs.texi(,10750) way that @sc{rcs} version 5 does. cvs.texi(,10751) @end table cvs.texi(,10752) cvs.texi(,10753) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,10754) @node rdiff examples cvs.texi(,10755) @appendixsubsec rdiff examples cvs.texi(,10756) cvs.texi(,10757) Suppose you receive mail from @t{foo@@example.net} asking for an cvs.texi(,10758) update from release 1.2 to 1.4 of the tc compiler. You cvs.texi(,10759) have no such patches on hand, but with @sc{cvs} that can cvs.texi(,10760) easily be fixed with a command such as this: cvs.texi(,10761) cvs.texi(,10762) @example cvs.texi(,10763) $ cvs rdiff -c -r FOO1_2 -r FOO1_4 tc | \ cvs.texi(,10764) $$ Mail -s 'The patches you asked for' foo@@example.net cvs.texi(,10765) @end example cvs.texi(,10766) cvs.texi(,10767) Suppose you have made release 1.3, and forked a branch cvs.texi(,10768) called @samp{R_1_3fix} for bugfixes. @samp{R_1_3_1} cvs.texi(,10769) corresponds to release 1.3.1, which was made some time cvs.texi(,10770) ago. Now, you want to see how much development has been cvs.texi(,10771) done on the branch. This command can be used: cvs.texi(,10772) cvs.texi(,10773) @example cvs.texi(,10774) $ cvs patch -s -r R_1_3_1 -r R_1_3fix module-name cvs.texi(,10775) cvs rdiff: Diffing module-name cvs.texi(,10776) File ChangeLog,v changed from revision 1.52.2.5 to 1.52.2.6 cvs.texi(,10777) File foo.c,v changed from revision 1.52.2.3 to 1.52.2.4 cvs.texi(,10778) File bar.h,v changed from revision 1.29.2.1 to 1.2 cvs.texi(,10779) @end example cvs.texi(,10780) cvs.texi(,10781) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,10782) @node release cvs.texi(,10783) @appendixsec release---Indicate that a Module is no longer in use cvs.texi(,10784) @cindex release (subcommand) cvs.texi(,10785) cvs.texi(,10786) @itemize @bullet cvs.texi(,10787) @item cvs.texi(,10788) release [-d] directories@dots{} cvs.texi(,10789) @item cvs.texi(,10790) Requires: Working directory. cvs.texi(,10791) @item cvs.texi(,10792) Changes: Working directory, history log. cvs.texi(,10793) @end itemize cvs.texi(,10794) cvs.texi(,10795) This command is meant to safely cancel the effect of cvs.texi(,10796) @samp{cvs checkout}. Since @sc{cvs} doesn't lock files, it cvs.texi(,10797) isn't strictly necessary to use this command. You can cvs.texi(,10798) always simply delete your working directory, if you cvs.texi(,10799) like; but you risk losing changes you may have cvs.texi(,10800) forgotten, and you leave no trace in the @sc{cvs} history cvs.texi(,10801) file (@pxref{history file}) that you've abandoned your cvs.texi(,10802) checkout. cvs.texi(,10803) cvs.texi(,10804) Use @samp{cvs release} to avoid these problems. This cvs.texi(,10805) command checks that no uncommitted changes are cvs.texi(,10806) present; that you are executing it from immediately cvs.texi(,10807) above a @sc{cvs} working directory; and that the repository cvs.texi(,10808) recorded for your files is the same as the repository cvs.texi(,10809) defined in the module database. cvs.texi(,10810) cvs.texi(,10811) If all these conditions are true, @samp{cvs release} cvs.texi(,10812) leaves a record of its execution (attesting to your cvs.texi(,10813) intentionally abandoning your checkout) in the @sc{cvs} cvs.texi(,10814) history log. cvs.texi(,10815) cvs.texi(,10816) @menu cvs.texi(,10817) * release options:: release options cvs.texi(,10818) * release output:: release output cvs.texi(,10819) * release examples:: release examples cvs.texi(,10820) @end menu cvs.texi(,10821) cvs.texi(,10822) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,10823) @node release options cvs.texi(,10824) @appendixsubsec release options cvs.texi(,10825) cvs.texi(,10826) The @code{release} command supports one command option: cvs.texi(,10827) cvs.texi(,10828) @table @code cvs.texi(,10829) @item -d cvs.texi(,10830) Delete your working copy of the file if the release cvs.texi(,10831) succeeds. If this flag is not given your files will cvs.texi(,10832) remain in your working directory. cvs.texi(,10833) cvs.texi(,10834) @strong{WARNING: The @code{release} command deletes cvs.texi(,10835) all directories and files recursively. This cvs.texi(,10836) has the very serious side-effect that any directory cvs.texi(,10837) that you have created inside your checked-out sources, cvs.texi(,10838) and not added to the repository (using the @code{add} cvs.texi(,10839) command; @pxref{Adding files}) will be silently deleted---even cvs.texi(,10840) if it is non-empty!} cvs.texi(,10841) @end table cvs.texi(,10842) cvs.texi(,10843) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,10844) @node release output cvs.texi(,10845) @appendixsubsec release output cvs.texi(,10846) cvs.texi(,10847) Before @code{release} releases your sources it will cvs.texi(,10848) print a one-line message for any file that is not cvs.texi(,10849) up-to-date. cvs.texi(,10850) cvs.texi(,10851) @table @code cvs.texi(,10852) @item U @var{file} cvs.texi(,10853) @itemx P @var{file} cvs.texi(,10854) There exists a newer revision of this file in the cvs.texi(,10855) repository, and you have not modified your local copy cvs.texi(,10856) of the file (@samp{U} and @samp{P} mean the same thing). cvs.texi(,10857) cvs.texi(,10858) @item A @var{file} cvs.texi(,10859) The file has been added to your private copy of the cvs.texi(,10860) sources, but has not yet been committed to the cvs.texi(,10861) repository. If you delete your copy of the sources cvs.texi(,10862) this file will be lost. cvs.texi(,10863) cvs.texi(,10864) @item R @var{file} cvs.texi(,10865) The file has been removed from your private copy of the cvs.texi(,10866) sources, but has not yet been removed from the cvs.texi(,10867) repository, since you have not yet committed the cvs.texi(,10868) removal. @xref{commit}. cvs.texi(,10869) cvs.texi(,10870) @item M @var{file} cvs.texi(,10871) The file is modified in your working directory. There cvs.texi(,10872) might also be a newer revision inside the repository. cvs.texi(,10873) cvs.texi(,10874) @item ? @var{file} cvs.texi(,10875) @var{file} is in your working directory, but does not cvs.texi(,10876) correspond to anything in the source repository, and is cvs.texi(,10877) not in the list of files for @sc{cvs} to ignore (see the cvs.texi(,10878) description of the @samp{-I} option, and cvs.texi(,10879) @pxref{cvsignore}). If you remove your working cvs.texi(,10880) sources, this file will be lost. cvs.texi(,10881) @end table cvs.texi(,10882) cvs.texi(,10883) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,10884) @node release examples cvs.texi(,10885) @appendixsubsec release examples cvs.texi(,10886) cvs.texi(,10887) Release the @file{tc} directory, and delete your local working copy cvs.texi(,10888) of the files. cvs.texi(,10889) cvs.texi(,10890) @example cvs.texi(,10891) $ cd .. # @r{You must stand immediately above the} cvs.texi(,10892) # @r{sources when you issue @samp{cvs release}.} cvs.texi(,10893) $ cvs release -d tc cvs.texi(,10894) You have [0] altered files in this repository. cvs.texi(,10895) Are you sure you want to release (and delete) directory `tc': y cvs.texi(,10896) $ cvs.texi(,10897) @end example cvs.texi(,10898) cvs.texi(,10899) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,10900) @node update cvs.texi(,10901) @appendixsec update---Bring work tree in sync with repository cvs.texi(,10902) @cindex update (subcommand) cvs.texi(,10903) cvs.texi(,10904) @itemize @bullet cvs.texi(,10905) @item cvs.texi(,10906) update [-ACdflPpR] [-I name] [-j rev [-j rev]] [-k kflag] [-r tag|-D date] [-W spec] files@dots{} cvs.texi(,10907) @item cvs.texi(,10908) Requires: repository, working directory. cvs.texi(,10909) @item cvs.texi(,10910) Changes: working directory. cvs.texi(,10911) @end itemize cvs.texi(,10912) cvs.texi(,10913) After you've run checkout to create your private copy cvs.texi(,10914) of source from the common repository, other developers cvs.texi(,10915) will continue changing the central source. From time cvs.texi(,10916) to time, when it is convenient in your development cvs.texi(,10917) process, you can use the @code{update} command from cvs.texi(,10918) within your working directory to reconcile your work cvs.texi(,10919) with any revisions applied to the source repository cvs.texi(,10920) since your last checkout or update. Without the @code{-C} cvs.texi(,10921) option, @code{update} will also merge any differences cvs.texi(,10922) between the local copy of files and their base revisions cvs.texi(,10923) into any destination revisions specified with @code{-r}, cvs.texi(,10924) @code{-D}, or @code{-A}. cvs.texi(,10925) cvs.texi(,10926) @menu cvs.texi(,10927) * update options:: update options cvs.texi(,10928) * update output:: update output cvs.texi(,10929) @end menu cvs.texi(,10930) cvs.texi(,10931) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,10932) @node update options cvs.texi(,10933) @appendixsubsec update options cvs.texi(,10934) cvs.texi(,10935) These standard options are available with @code{update} cvs.texi(,10936) (@pxref{Common options}, for a complete description of cvs.texi(,10937) them): cvs.texi(,10938) cvs.texi(,10939) @table @code cvs.texi(,10940) @item -D date cvs.texi(,10941) Use the most recent revision no later than @var{date}. cvs.texi(,10942) This option is sticky, and implies @samp{-P}. cvs.texi(,10943) See @ref{Sticky tags}, for more information on sticky tags/dates. cvs.texi(,10944) cvs.texi(,10945) @item -f cvs.texi(,10946) Only useful with the @samp{-D @var{date}} or @samp{-r cvs.texi(,10947) @var{tag}} flags. If no matching revision is found, cvs.texi(,10948) retrieve the most recent revision (instead of ignoring cvs.texi(,10949) the file). cvs.texi(,10950) cvs.texi(,10951) @item -k @var{kflag} cvs.texi(,10952) Process keywords according to @var{kflag}. See cvs.texi(,10953) @ref{Keyword substitution}. cvs.texi(,10954) This option is sticky; future updates of cvs.texi(,10955) this file in this working directory will use the same cvs.texi(,10956) @var{kflag}. The @code{status} command can be viewed cvs.texi(,10957) to see the sticky options. See @ref{Invoking CVS}, for cvs.texi(,10958) more information on the @code{status} command. cvs.texi(,10959) cvs.texi(,10960) @item -l cvs.texi(,10961) Local; run only in current working directory. @xref{Recursive behavior}. cvs.texi(,10962) cvs.texi(,10963) @item -P cvs.texi(,10964) Prune empty directories. See @ref{Moving directories}. cvs.texi(,10965) cvs.texi(,10966) @item -p cvs.texi(,10967) Pipe files to the standard output. cvs.texi(,10968) cvs.texi(,10969) @item -R cvs.texi(,10970) Update directories recursively (default). @xref{Recursive cvs.texi(,10971) behavior}. cvs.texi(,10972) cvs.texi(,10973) @item -r rev cvs.texi(,10974) Retrieve revision/tag @var{rev}. This option is sticky, cvs.texi(,10975) and implies @samp{-P}. cvs.texi(,10976) See @ref{Sticky tags}, for more information on sticky tags/dates. cvs.texi(,10977) @end table cvs.texi(,10978) cvs.texi(,10979) @need 800 cvs.texi(,10980) These special options are also available with cvs.texi(,10981) @code{update}. cvs.texi(,10982) cvs.texi(,10983) @table @code cvs.texi(,10984) @item -A cvs.texi(,10985) Reset any sticky tags, dates, or @samp{-k} options. cvs.texi(,10986) See @ref{Sticky tags}, for more information on sticky tags/dates. cvs.texi(,10987) cvs.texi(,10988) @item -C cvs.texi(,10989) Overwrite locally modified files with clean copies from cvs.texi(,10990) the repository (the modified file is saved in cvs.texi(,10991) @file{.#@var{file}.@var{revision}}, however). cvs.texi(,10992) cvs.texi(,10993) @item -d cvs.texi(,10994) Create any directories that exist in the repository if cvs.texi(,10995) they're missing from the working directory. Normally, cvs.texi(,10996) @code{update} acts only on directories and files that cvs.texi(,10997) were already enrolled in your working directory. cvs.texi(,10998) cvs.texi(,10999) This is useful for updating directories that were cvs.texi(,11000) created in the repository since the initial checkout; cvs.texi(,11001) but it has an unfortunate side effect. If you cvs.texi(,11002) deliberately avoided certain directories in the cvs.texi(,11003) repository when you created your working directory cvs.texi(,11004) (either through use of a module name or by listing cvs.texi(,11005) explicitly the files and directories you wanted on the cvs.texi(,11006) command line), then updating with @samp{-d} will create cvs.texi(,11007) those directories, which may not be what you want. cvs.texi(,11008) cvs.texi(,11009) @item -I @var{name} cvs.texi(,11010) Ignore files whose names match @var{name} (in your cvs.texi(,11011) working directory) during the update. You can specify cvs.texi(,11012) @samp{-I} more than once on the command line to specify cvs.texi(,11013) several files to ignore. Use @samp{-I !} to avoid cvs.texi(,11014) ignoring any files at all. @xref{cvsignore}, for other cvs.texi(,11015) ways to make @sc{cvs} ignore some files. cvs.texi(,11016) cvs.texi(,11017) @item -W@var{spec} cvs.texi(,11018) Specify file names that should be filtered during cvs.texi(,11019) update. You can use this option repeatedly. cvs.texi(,11020) cvs.texi(,11021) @var{spec} can be a file name pattern of the same type cvs.texi(,11022) that you can specify in the @file{.cvswrappers} cvs.texi(,11023) file. @xref{Wrappers}. cvs.texi(,11024) cvs.texi(,11025) @item -j@var{revision} cvs.texi(,11026) With two @samp{-j} options, merge changes from the cvs.texi(,11027) revision specified with the first @samp{-j} option to cvs.texi(,11028) the revision specified with the second @samp{j} option, cvs.texi(,11029) into the working directory. cvs.texi(,11030) cvs.texi(,11031) With one @samp{-j} option, merge changes from the cvs.texi(,11032) ancestor revision to the revision specified with the cvs.texi(,11033) @samp{-j} option, into the working directory. The cvs.texi(,11034) ancestor revision is the common ancestor of the cvs.texi(,11035) revision which the working directory is based on, and cvs.texi(,11036) the revision specified in the @samp{-j} option. cvs.texi(,11037) cvs.texi(,11038) Note that using a single @samp{-j @var{tagname}} option rather than cvs.texi(,11039) @samp{-j @var{branchname}} to merge changes from a branch will cvs.texi(,11040) often not remove files which were removed on the branch. cvs.texi(,11041) @xref{Merging adds and removals}, for more. cvs.texi(,11042) cvs.texi(,11043) In addition, each @samp{-j} option can contain an optional cvs.texi(,11044) date specification which, when used with branches, can cvs.texi(,11045) limit the chosen revision to one within a specific cvs.texi(,11046) date. An optional date is specified by adding a colon cvs.texi(,11047) (:) to the tag: cvs.texi(,11048) @samp{-j@var{Symbolic_Tag}:@var{Date_Specifier}}. cvs.texi(,11049) cvs.texi(,11050) @xref{Branching and merging}. cvs.texi(,11051) cvs.texi(,11052) @end table cvs.texi(,11053) cvs.texi(,11054) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,11055) @node update output cvs.texi(,11056) @appendixsubsec update output cvs.texi(,11057) cvs.texi(,11058) @code{update} and @code{checkout} keep you informed of cvs.texi(,11059) their progress by printing a line for each file, preceded cvs.texi(,11060) by one character indicating the status of the file: cvs.texi(,11061) cvs.texi(,11062) @table @code cvs.texi(,11063) @item U @var{file} cvs.texi(,11064) The file was brought up to date with respect to the cvs.texi(,11065) repository. This is done for any file that exists in cvs.texi(,11066) the repository but not in your source, and for files cvs.texi(,11067) that you haven't changed but are not the most recent cvs.texi(,11068) versions available in the repository. cvs.texi(,11069) cvs.texi(,11070) @item P @var{file} cvs.texi(,11071) Like @samp{U}, but the @sc{cvs} server sends a patch instead of an entire cvs.texi(,11072) file. This accomplishes the same thing as @samp{U} using less bandwidth. cvs.texi(,11073) cvs.texi(,11074) @item A @var{file} cvs.texi(,11075) The file has been added to your private copy of the cvs.texi(,11076) sources, and will be added to the source repository cvs.texi(,11077) when you run @code{commit} on the file. This is a cvs.texi(,11078) reminder to you that the file needs to be committed. cvs.texi(,11079) cvs.texi(,11080) @item R @var{file} cvs.texi(,11081) The file has been removed from your private copy of the cvs.texi(,11082) sources, and will be removed from the source repository cvs.texi(,11083) when you run @code{commit} on the file. This is a cvs.texi(,11084) reminder to you that the file needs to be committed. cvs.texi(,11085) cvs.texi(,11086) @item M @var{file} cvs.texi(,11087) The file is modified in your working directory. cvs.texi(,11088) cvs.texi(,11089) @samp{M} can indicate one of two states for a file cvs.texi(,11090) you're working on: either there were no modifications cvs.texi(,11091) to the same file in the repository, so that your file cvs.texi(,11092) remains as you last saw it; or there were modifications cvs.texi(,11093) in the repository as well as in your copy, but they cvs.texi(,11094) were merged successfully, without conflict, in your cvs.texi(,11095) working directory. cvs.texi(,11096) cvs.texi(,11097) @sc{cvs} will print some messages if it merges your work, cvs.texi(,11098) and a backup copy of your working file (as it looked cvs.texi(,11099) before you ran @code{update}) will be made. The exact cvs.texi(,11100) name of that file is printed while @code{update} runs. cvs.texi(,11101) cvs.texi(,11102) @item C @var{file} cvs.texi(,11103) @cindex .# files cvs.texi(,11104) @cindex __ files (VMS) cvs.texi(,11105) A conflict was detected while trying to merge your cvs.texi(,11106) changes to @var{file} with changes from the source cvs.texi(,11107) repository. @var{file} (the copy in your working cvs.texi(,11108) directory) is now the result of attempting to merge cvs.texi(,11109) the two revisions; an unmodified copy of your file cvs.texi(,11110) is also in your working directory, with the name cvs.texi(,11111) @file{.#@var{file}.@var{revision}} where @var{revision} cvs.texi(,11112) is the revision that your modified file started cvs.texi(,11113) from. Resolve the conflict as described in cvs.texi(,11114) @ref{Conflicts example}. cvs.texi(,11115) @c "some systems" as in out-of-the-box OSes? Not as cvs.texi(,11116) @c far as I know. We need to advise sysadmins as well cvs.texi(,11117) @c as users how to set up this kind of purge, if that is cvs.texi(,11118) @c what they want. cvs.texi(,11119) @c We also might want to think about cleaner solutions, cvs.texi(,11120) @c like having CVS remove the .# file once the conflict cvs.texi(,11121) @c has been resolved or something like that. cvs.texi(,11122) (Note that some systems automatically purge cvs.texi(,11123) files that begin with @file{.#} if they have not been cvs.texi(,11124) accessed for a few days. If you intend to keep a copy cvs.texi(,11125) of your original file, it is a very good idea to rename cvs.texi(,11126) it.) Under @sc{vms}, the file name starts with cvs.texi(,11127) @file{__} rather than @file{.#}. cvs.texi(,11128) cvs.texi(,11129) @item ? @var{file} cvs.texi(,11130) @var{file} is in your working directory, but does not cvs.texi(,11131) correspond to anything in the source repository, and is cvs.texi(,11132) not in the list of files for @sc{cvs} to ignore (see the cvs.texi(,11133) description of the @samp{-I} option, and cvs.texi(,11134) @pxref{cvsignore}). cvs.texi(,11135) @end table cvs.texi(,11136) cvs.texi(,11137) @node Invoking CVS cvs.texi(,11138) @appendix Quick reference to CVS commands cvs.texi(,11139) @cindex Command reference cvs.texi(,11140) @cindex Reference, commands cvs.texi(,11141) @cindex Invoking CVS cvs.texi(,11142) cvs.texi(,11143) This appendix describes how to invoke @sc{cvs}, with cvs.texi(,11144) references to where each command or feature is cvs.texi(,11145) described in detail. For other references run the cvs.texi(,11146) @code{cvs --help} command, or see @ref{Index}. cvs.texi(,11147) cvs.texi(,11148) A @sc{cvs} command looks like: cvs.texi(,11149) cvs.texi(,11150) @example cvs.texi(,11151) cvs [ @var{global_options} ] @var{command} [ @var{command_options} ] [ @var{command_args} ] cvs.texi(,11152) @end example cvs.texi(,11153) cvs.texi(,11154) Global options: cvs.texi(,11155) cvs.texi(,11156) @table @code cvs.texi(,11157) @item --allow-root=@var{rootdir} cvs.texi(,11158) Specify legal @sc{cvsroot} directory (server only) (not cvs.texi(,11159) in @sc{cvs} 1.9 and older). See @ref{Password cvs.texi(,11160) authentication server}. cvs.texi(,11161) cvs.texi(,11162) @item -a cvs.texi(,11163) Authenticate all communication (client only) (not in @sc{cvs} cvs.texi(,11164) 1.9 and older). See @ref{Global options}. cvs.texi(,11165) cvs.texi(,11166) @item -b cvs.texi(,11167) Specify RCS location (@sc{cvs} 1.9 and older). See cvs.texi(,11168) @ref{Global options}. cvs.texi(,11169) cvs.texi(,11170) @item -d @var{root} cvs.texi(,11171) Specify the @sc{cvsroot}. See @ref{Repository}. cvs.texi(,11172) cvs.texi(,11173) @item -e @var{editor} cvs.texi(,11174) Edit messages with @var{editor}. See @ref{Committing cvs.texi(,11175) your changes}. cvs.texi(,11176) cvs.texi(,11177) @item -f cvs.texi(,11178) Do not read the @file{~/.cvsrc} file. See @ref{Global cvs.texi(,11179) options}. cvs.texi(,11180) cvs.texi(,11181) @item -H cvs.texi(,11182) @itemx --help cvs.texi(,11183) Print a help message. See @ref{Global options}. cvs.texi(,11184) cvs.texi(,11185) @item -l cvs.texi(,11186) Do not log in @file{$CVSROOT/CVSROOT/history} file. See @ref{Global cvs.texi(,11187) options}. cvs.texi(,11188) cvs.texi(,11189) @item -n cvs.texi(,11190) Do not change any files. See @ref{Global options}. cvs.texi(,11191) cvs.texi(,11192) @item -Q cvs.texi(,11193) Be really quiet. See @ref{Global options}. cvs.texi(,11194) cvs.texi(,11195) @item -q cvs.texi(,11196) Be somewhat quiet. See @ref{Global options}. cvs.texi(,11197) cvs.texi(,11198) @item -r cvs.texi(,11199) Make new working files read-only. See @ref{Global options}. cvs.texi(,11200) cvs.texi(,11201) @item -s @var{variable}=@var{value} cvs.texi(,11202) Set a user variable. See @ref{Variables}. cvs.texi(,11203) cvs.texi(,11204) @item -T @var{tempdir} cvs.texi(,11205) Put temporary files in @var{tempdir}. See @ref{Global cvs.texi(,11206) options}. cvs.texi(,11207) cvs.texi(,11208) @item -t cvs.texi(,11209) Trace @sc{cvs} execution. See @ref{Global options}. cvs.texi(,11210) cvs.texi(,11211) @item -v cvs.texi(,11212) @item --version cvs.texi(,11213) Display version and copyright information for @sc{cvs}. cvs.texi(,11214) cvs.texi(,11215) @item -w cvs.texi(,11216) Make new working files read-write. See @ref{Global cvs.texi(,11217) options}. cvs.texi(,11218) cvs.texi(,11219) @item -x cvs.texi(,11220) Encrypt all communication (client only). cvs.texi(,11221) See @ref{Global options}. cvs.texi(,11222) cvs.texi(,11223) @item -z @var{gzip-level} cvs.texi(,11224) @cindex Compression cvs.texi(,11225) @cindex Gzip cvs.texi(,11226) Set the compression level (client only). cvs.texi(,11227) See @ref{Global options}. cvs.texi(,11228) @end table cvs.texi(,11229) cvs.texi(,11230) Keyword expansion modes (@pxref{Substitution modes}): cvs.texi(,11231) cvs.texi(,11232) @example cvs.texi(splitrcskeyword,11233) -kkv $@i{}Id: file1,v 1.1 1993/12/09 03:21:13 joe Exp $ cvs.texi(splitrcskeyword,11234) -kkvl $@i{}Id: file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $ cvs.texi(splitrcskeyword,11235) -kk $@i{}Id$ cvs.texi(,11236) -kv file1,v 1.1 1993/12/09 03:21:13 joe Exp cvs.texi(,11237) -ko @i{no expansion} cvs.texi(,11238) -kb @i{no expansion, file is binary} cvs.texi(,11239) @end example cvs.texi(,11240) cvs.texi(,11241) Keywords (@pxref{Keyword list}): cvs.texi(,11242) cvs.texi(,11243) @example cvs.texi(splitrcskeyword,11244) $@i{}Author: joe $ cvs.texi(splitrcskeyword,11245) $@i{}Date: 1993/12/09 03:21:13 $ cvs.texi(splitrcskeyword,11246) $@i{}CVSHeader: files/file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $ cvs.texi(splitrcskeyword,11247) $@i{}Header: /home/files/file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $ cvs.texi(splitrcskeyword,11248) $@i{}Id: file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $ cvs.texi(splitrcskeyword,11249) $@i{}Locker: harry $ cvs.texi(splitrcskeyword,11250) $@i{}Name: snapshot_1_14 $ cvs.texi(splitrcskeyword,11251) $@i{}RCSfile: file1,v $ cvs.texi(splitrcskeyword,11252) $@i{}Revision: 1.1 $ cvs.texi(splitrcskeyword,11253) $@i{}Source: /home/files/file1,v $ cvs.texi(splitrcskeyword,11254) $@i{}State: Exp $ cvs.texi(splitrcskeyword,11255) $@i{}Log: file1,v $ cvs.texi(,11256) Revision 1.1 1993/12/09 03:30:17 joe cvs.texi(,11257) Initial revision cvs.texi(,11258) cvs.texi(,11259) @end example cvs.texi(,11260) cvs.texi(,11261) @c The idea behind this table is that we want each item cvs.texi(,11262) @c to be a sentence or two at most. Preferably a cvs.texi(,11263) @c single line. cvs.texi(,11264) @c cvs.texi(,11265) @c In some cases refs to "foo options" are just to get cvs.texi(,11266) @c this thing written quickly, not because the "foo cvs.texi(,11267) @c options" node is really the best place to point. cvs.texi(,11268) Commands, command options, and command arguments: cvs.texi(,11269) cvs.texi(,11270) @table @code cvs.texi(,11271) @c ------------------------------------------------------------ cvs.texi(,11272) @item add [@var{options}] [@var{files}@dots{}] cvs.texi(,11273) Add a new file/directory. See @ref{Adding files}. cvs.texi(,11274) cvs.texi(,11275) @table @code cvs.texi(,11276) @item -k @var{kflag} cvs.texi(,11277) Set keyword expansion. cvs.texi(,11278) cvs.texi(,11279) @item -m @var{msg} cvs.texi(,11280) Set file description. cvs.texi(,11281) @end table cvs.texi(,11282) cvs.texi(,11283) @c ------------------------------------------------------------ cvs.texi(,11284) @item admin [@var{options}] [@var{files}@dots{}] cvs.texi(,11285) Administration of history files in the repository. See cvs.texi(,11286) @ref{admin}. cvs.texi(,11287) @c This list omits those options which are not cvs.texi(,11288) @c documented as being useful with CVS. That might be cvs.texi(,11289) @c a mistake... cvs.texi(,11290) cvs.texi(,11291) @table @code cvs.texi(,11292) @item -b[@var{rev}] cvs.texi(,11293) Set default branch. See @ref{Reverting local changes}. cvs.texi(,11294) cvs.texi(,11295) @item -c@var{string} cvs.texi(,11296) Set comment leader. cvs.texi(,11297) cvs.texi(,11298) @item -k@var{subst} cvs.texi(,11299) Set keyword substitution. See @ref{Keyword cvs.texi(,11300) substitution}. cvs.texi(,11301) cvs.texi(,11302) @item -l[@var{rev}] cvs.texi(,11303) Lock revision @var{rev}, or latest revision. cvs.texi(,11304) cvs.texi(,11305) @item -m@var{rev}:@var{msg} cvs.texi(,11306) Replace the log message of revision @var{rev} with cvs.texi(,11307) @var{msg}. cvs.texi(,11308) cvs.texi(,11309) @item -o@var{range} cvs.texi(,11310) Delete revisions from the repository. See cvs.texi(,11311) @ref{admin options}. cvs.texi(,11312) cvs.texi(,11313) @item -q cvs.texi(,11314) Run quietly; do not print diagnostics. cvs.texi(,11315) cvs.texi(,11316) @item -s@var{state}[:@var{rev}] cvs.texi(,11317) Set the state. cvs.texi(,11318) cvs.texi(,11319) @c Does not work for client/server CVS cvs.texi(,11320) @item -t cvs.texi(,11321) Set file description from standard input. cvs.texi(,11322) cvs.texi(,11323) @item -t@var{file} cvs.texi(,11324) Set file description from @var{file}. cvs.texi(,11325) cvs.texi(,11326) @item -t-@var{string} cvs.texi(,11327) Set file description to @var{string}. cvs.texi(,11328) cvs.texi(,11329) @item -u[@var{rev}] cvs.texi(,11330) Unlock revision @var{rev}, or latest revision. cvs.texi(,11331) @end table cvs.texi(,11332) cvs.texi(,11333) @c ------------------------------------------------------------ cvs.texi(,11334) @item annotate [@var{options}] [@var{files}@dots{}] cvs.texi(,11335) Show last revision where each line was modified. See cvs.texi(,11336) @ref{annotate}. cvs.texi(,11337) cvs.texi(,11338) @table @code cvs.texi(,11339) @item -D @var{date} cvs.texi(,11340) Annotate the most recent revision no later than cvs.texi(,11341) @var{date}. See @ref{Common options}. cvs.texi(,11342) cvs.texi(,11343) @item -F cvs.texi(,11344) Force annotation of binary files. (Without this option, cvs.texi(,11345) binary files are skipped with a message.) cvs.texi(,11346) cvs.texi(,11347) @item -f cvs.texi(,11348) Use head revision if tag/date not found. See cvs.texi(,11349) @ref{Common options}. cvs.texi(,11350) cvs.texi(,11351) @item -l cvs.texi(,11352) Local; run only in current working directory. @xref{Recursive behavior}. cvs.texi(,11353) cvs.texi(,11354) @item -R cvs.texi(,11355) Operate recursively (default). @xref{Recursive cvs.texi(,11356) behavior}. cvs.texi(,11357) cvs.texi(,11358) @item -r @var{tag} cvs.texi(,11359) Annotate revision @var{tag}. See @ref{Common options}. cvs.texi(,11360) @end table cvs.texi(,11361) cvs.texi(,11362) @c ------------------------------------------------------------ cvs.texi(,11363) @item checkout [@var{options}] @var{modules}@dots{} cvs.texi(,11364) Get a copy of the sources. See @ref{checkout}. cvs.texi(,11365) cvs.texi(,11366) @table @code cvs.texi(,11367) @item -A cvs.texi(,11368) Reset any sticky tags/date/options. See @ref{Sticky cvs.texi(,11369) tags} and @ref{Keyword substitution}. cvs.texi(,11370) cvs.texi(,11371) @item -c cvs.texi(,11372) Output the module database. See @ref{checkout options}. cvs.texi(,11373) cvs.texi(,11374) @item -D @var{date} cvs.texi(,11375) Check out revisions as of @var{date} (is sticky). See cvs.texi(,11376) @ref{Common options}. cvs.texi(,11377) cvs.texi(,11378) @item -d @var{dir} cvs.texi(,11379) Check out into @var{dir}. See @ref{checkout options}. cvs.texi(,11380) cvs.texi(,11381) @item -f cvs.texi(,11382) Use head revision if tag/date not found. See cvs.texi(,11383) @ref{Common options}. cvs.texi(,11384) cvs.texi(,11385) @c Probably want to use rev1/rev2 style like for diff cvs.texi(,11386) @c -r. Here and in on-line help. cvs.texi(,11387) @item -j @var{rev} cvs.texi(,11388) Merge in changes. See @ref{checkout options}. cvs.texi(,11389) cvs.texi(,11390) @item -k @var{kflag} cvs.texi(,11391) Use @var{kflag} keyword expansion. See cvs.texi(,11392) @ref{Substitution modes}. cvs.texi(,11393) cvs.texi(,11394) @item -l cvs.texi(,11395) Local; run only in current working directory. @xref{Recursive behavior}. cvs.texi(,11396) cvs.texi(,11397) @item -N cvs.texi(,11398) Don't ``shorten'' module paths if -d specified. See cvs.texi(,11399) @ref{checkout options}. cvs.texi(,11400) cvs.texi(,11401) @item -n cvs.texi(,11402) Do not run module program (if any). See @ref{checkout options}. cvs.texi(,11403) cvs.texi(,11404) @item -P cvs.texi(,11405) Prune empty directories. See @ref{Moving directories}. cvs.texi(,11406) cvs.texi(,11407) @item -p cvs.texi(,11408) Check out files to standard output (avoids cvs.texi(,11409) stickiness). See @ref{checkout options}. cvs.texi(,11410) cvs.texi(,11411) @item -R cvs.texi(,11412) Operate recursively (default). @xref{Recursive cvs.texi(,11413) behavior}. cvs.texi(,11414) cvs.texi(,11415) @item -r @var{tag} cvs.texi(,11416) Checkout revision @var{tag} (is sticky). See @ref{Common options}. cvs.texi(,11417) cvs.texi(,11418) @item -s cvs.texi(,11419) Like -c, but include module status. See @ref{checkout options}. cvs.texi(,11420) @end table cvs.texi(,11421) cvs.texi(,11422) @c ------------------------------------------------------------ cvs.texi(,11423) @item commit [@var{options}] [@var{files}@dots{}] cvs.texi(,11424) Check changes into the repository. See @ref{commit}. cvs.texi(,11425) cvs.texi(,11426) @table @code cvs.texi(,11427) @item -F @var{file} cvs.texi(,11428) Read log message from @var{file}. See @ref{commit options}. cvs.texi(,11429) cvs.texi(,11430) @item -f cvs.texi(,11431) @c What is this "disables recursion"? It is from the cvs.texi(,11432) @c on-line help; is it documented in this manual? cvs.texi(,11433) Force the file to be committed; disables recursion. cvs.texi(,11434) See @ref{commit options}. cvs.texi(,11435) cvs.texi(,11436) @item -l cvs.texi(,11437) Local; run only in current working directory. See @ref{Recursive behavior}. cvs.texi(,11438) cvs.texi(,11439) @item -m @var{msg} cvs.texi(,11440) Use @var{msg} as log message. See @ref{commit options}. cvs.texi(,11441) cvs.texi(,11442) @item -n cvs.texi(,11443) Do not run module program (if any). See @ref{commit options}. cvs.texi(,11444) cvs.texi(,11445) @item -R cvs.texi(,11446) Operate recursively (default). @xref{Recursive cvs.texi(,11447) behavior}. cvs.texi(,11448) cvs.texi(,11449) @item -r @var{rev} cvs.texi(,11450) Commit to @var{rev}. See @ref{commit options}. cvs.texi(,11451) @c FIXME: should be dragging over text from cvs.texi(,11452) @c commit options, especially if it can be cleaned up cvs.texi(,11453) @c and made concise enough. cvs.texi(,11454) @end table cvs.texi(,11455) cvs.texi(,11456) @c ------------------------------------------------------------ cvs.texi(,11457) @item diff [@var{options}] [@var{files}@dots{}] cvs.texi(,11458) Show differences between revisions. See @ref{diff}. cvs.texi(,11459) In addition to the options shown below, accepts a wide cvs.texi(,11460) variety of options to control output style, for example cvs.texi(,11461) @samp{-c} for context diffs. cvs.texi(,11462) cvs.texi(,11463) @table @code cvs.texi(,11464) @item -D @var{date1} cvs.texi(,11465) Diff revision for date against working file. See cvs.texi(,11466) @ref{diff options}. cvs.texi(,11467) cvs.texi(,11468) @item -D @var{date2} cvs.texi(,11469) Diff @var{rev1}/@var{date1} against @var{date2}. See cvs.texi(,11470) @ref{diff options}. cvs.texi(,11471) cvs.texi(,11472) @item -l cvs.texi(,11473) Local; run only in current working directory. See @ref{Recursive behavior}. cvs.texi(,11474) cvs.texi(,11475) @item -N cvs.texi(,11476) Include diffs for added and removed files. See cvs.texi(,11477) @ref{diff options}. cvs.texi(,11478) cvs.texi(,11479) @item -R cvs.texi(,11480) Operate recursively (default). @xref{Recursive cvs.texi(,11481) behavior}. cvs.texi(,11482) cvs.texi(,11483) @item -r @var{rev1} cvs.texi(,11484) Diff revision for @var{rev1} against working file. See cvs.texi(,11485) @ref{diff options}. cvs.texi(,11486) cvs.texi(,11487) @item -r @var{rev2} cvs.texi(,11488) Diff @var{rev1}/@var{date1} against @var{rev2}. See @ref{diff options}. cvs.texi(,11489) @end table cvs.texi(,11490) cvs.texi(,11491) @c ------------------------------------------------------------ cvs.texi(,11492) @item edit [@var{options}] [@var{files}@dots{}] cvs.texi(,11493) Get ready to edit a watched file. See @ref{Editing files}. cvs.texi(,11494) cvs.texi(,11495) @table @code cvs.texi(,11496) @item -a @var{actions} cvs.texi(,11497) Specify actions for temporary watch, where cvs.texi(,11498) @var{actions} is @code{edit}, @code{unedit}, cvs.texi(,11499) @code{commit}, @code{all}, or @code{none}. See cvs.texi(,11500) @ref{Editing files}. cvs.texi(,11501) cvs.texi(,11502) @item -l cvs.texi(,11503) Local; run only in current working directory. See @ref{Recursive behavior}. cvs.texi(,11504) cvs.texi(,11505) @item -R cvs.texi(,11506) Operate recursively (default). @xref{Recursive cvs.texi(,11507) behavior}. cvs.texi(,11508) @end table cvs.texi(,11509) cvs.texi(,11510) @c ------------------------------------------------------------ cvs.texi(,11511) @item editors [@var{options}] [@var{files}@dots{}] cvs.texi(,11512) See who is editing a watched file. See @ref{Watch information}. cvs.texi(,11513) cvs.texi(,11514) @table @code cvs.texi(,11515) @item -l cvs.texi(,11516) Local; run only in current working directory. See @ref{Recursive behavior}. cvs.texi(,11517) cvs.texi(,11518) @item -R cvs.texi(,11519) Operate recursively (default). @xref{Recursive cvs.texi(,11520) behavior}. cvs.texi(,11521) @end table cvs.texi(,11522) cvs.texi(,11523) @c ------------------------------------------------------------ cvs.texi(,11524) @item export [@var{options}] @var{modules}@dots{} cvs.texi(,11525) Export files from @sc{cvs}. See @ref{export}. cvs.texi(,11526) cvs.texi(,11527) @table @code cvs.texi(,11528) @item -D @var{date} cvs.texi(,11529) Check out revisions as of @var{date}. See cvs.texi(,11530) @ref{Common options}. cvs.texi(,11531) cvs.texi(,11532) @item -d @var{dir} cvs.texi(,11533) Check out into @var{dir}. See @ref{export options}. cvs.texi(,11534) cvs.texi(,11535) @item -f cvs.texi(,11536) Use head revision if tag/date not found. See cvs.texi(,11537) @ref{Common options}. cvs.texi(,11538) cvs.texi(,11539) @item -k @var{kflag} cvs.texi(,11540) Use @var{kflag} keyword expansion. See cvs.texi(,11541) @ref{Substitution modes}. cvs.texi(,11542) cvs.texi(,11543) @item -l cvs.texi(,11544) Local; run only in current working directory. @xref{Recursive behavior}. cvs.texi(,11545) cvs.texi(,11546) @item -N cvs.texi(,11547) Don't ``shorten'' module paths if -d specified. See cvs.texi(,11548) @ref{export options}. cvs.texi(,11549) cvs.texi(,11550) @item -n cvs.texi(,11551) Do not run module program (if any). See @ref{export options}. cvs.texi(,11552) cvs.texi(,11553) @item -R cvs.texi(,11554) Operate recursively (default). @xref{Recursive cvs.texi(,11555) behavior}. cvs.texi(,11556) cvs.texi(,11557) @item -r @var{tag} cvs.texi(,11558) Checkout revision @var{tag}. See @ref{Common options}. cvs.texi(,11559) @end table cvs.texi(,11560) cvs.texi(,11561) @c ------------------------------------------------------------ cvs.texi(,11562) @item history [@var{options}] [@var{files}@dots{}] cvs.texi(,11563) Show repository access history. See @ref{history}. cvs.texi(,11564) cvs.texi(,11565) @table @code cvs.texi(,11566) @item -a cvs.texi(,11567) All users (default is self). See @ref{history options}. cvs.texi(,11568) cvs.texi(,11569) @item -b @var{str} cvs.texi(,11570) Back to record with @var{str} in module/file/repos cvs.texi(,11571) field. See @ref{history options}. cvs.texi(,11572) cvs.texi(,11573) @item -c cvs.texi(,11574) Report on committed (modified) files. See @ref{history options}. cvs.texi(,11575) cvs.texi(,11576) @item -D @var{date} cvs.texi(,11577) Since @var{date}. See @ref{history options}. cvs.texi(,11578) cvs.texi(,11579) @item -e cvs.texi(,11580) Report on all record types. See @ref{history options}. cvs.texi(,11581) cvs.texi(,11582) @item -l cvs.texi(,11583) Last modified (committed or modified report). See @ref{history options}. cvs.texi(,11584) cvs.texi(,11585) @item -m @var{module} cvs.texi(,11586) Report on @var{module} (repeatable). See @ref{history options}. cvs.texi(,11587) cvs.texi(,11588) @item -n @var{module} cvs.texi(,11589) In @var{module}. See @ref{history options}. cvs.texi(,11590) cvs.texi(,11591) @item -o cvs.texi(,11592) Report on checked out modules. See @ref{history options}. cvs.texi(,11593) cvs.texi(,11594) @item -p @var{repository} cvs.texi(,11595) In @var{repository}. See @ref{history options}. cvs.texi(,11596) cvs.texi(,11597) @item -r @var{rev} cvs.texi(,11598) Since revision @var{rev}. See @ref{history options}. cvs.texi(,11599) cvs.texi(,11600) @item -T cvs.texi(,11601) @c What the @#$@# is a TAG? Same as a tag? This cvs.texi(,11602) @c wording is also in the online-line help. cvs.texi(,11603) Produce report on all TAGs. See @ref{history options}. cvs.texi(,11604) cvs.texi(,11605) @item -t @var{tag} cvs.texi(,11606) Since tag record placed in history file (by anyone). cvs.texi(,11607) See @ref{history options}. cvs.texi(,11608) cvs.texi(,11609) @item -u @var{user} cvs.texi(,11610) For user @var{user} (repeatable). See @ref{history options}. cvs.texi(,11611) cvs.texi(,11612) @item -w cvs.texi(,11613) Working directory must match. See @ref{history options}. cvs.texi(,11614) cvs.texi(,11615) @item -x @var{types} cvs.texi(,11616) Report on @var{types}, one or more of cvs.texi(,11617) @code{TOEFWUCGMAR}. See @ref{history options}. cvs.texi(,11618) cvs.texi(,11619) @item -z @var{zone} cvs.texi(,11620) Output for time zone @var{zone}. See @ref{history options}. cvs.texi(,11621) @end table cvs.texi(,11622) cvs.texi(,11623) @c ------------------------------------------------------------ cvs.texi(,11624) @item import [@var{options}] @var{repository} @var{vendor-tag} @var{release-tags}@dots{} cvs.texi(,11625) Import files into @sc{cvs}, using vendor branches. See cvs.texi(,11626) @ref{import}. cvs.texi(,11627) cvs.texi(,11628) @table @code cvs.texi(,11629) @item -b @var{bra} cvs.texi(,11630) Import to vendor branch @var{bra}. See cvs.texi(,11631) @ref{Multiple vendor branches}. cvs.texi(,11632) cvs.texi(,11633) @item -d cvs.texi(,11634) Use the file's modification time as the time of cvs.texi(,11635) import. See @ref{import options}. cvs.texi(,11636) cvs.texi(,11637) @item -k @var{kflag} cvs.texi(,11638) Set default keyword substitution mode. See cvs.texi(,11639) @ref{import options}. cvs.texi(,11640) cvs.texi(,11641) @item -m @var{msg} cvs.texi(,11642) Use @var{msg} for log message. See cvs.texi(,11643) @ref{import options}. cvs.texi(,11644) cvs.texi(,11645) @item -I @var{ign} cvs.texi(,11646) More files to ignore (! to reset). See cvs.texi(,11647) @ref{import options}. cvs.texi(,11648) cvs.texi(,11649) @item -W @var{spec} cvs.texi(,11650) More wrappers. See @ref{import options}. cvs.texi(,11651) @end table cvs.texi(,11652) cvs.texi(,11653) @c ------------------------------------------------------------ cvs.texi(,11654) @item init cvs.texi(,11655) Create a @sc{cvs} repository if it doesn't exist. See cvs.texi(,11656) @ref{Creating a repository}. cvs.texi(,11657) cvs.texi(,11658) @c ------------------------------------------------------------ cvs.texi(,11659) @item kserver cvs.texi(,11660) Kerberos authenticated server. cvs.texi(,11661) See @ref{Kerberos authenticated}. cvs.texi(,11662) cvs.texi(,11663) @c ------------------------------------------------------------ cvs.texi(,11664) @item log [@var{options}] [@var{files}@dots{}] cvs.texi(,11665) Print out history information for files. See @ref{log}. cvs.texi(,11666) cvs.texi(,11667) @table @code cvs.texi(,11668) @item -b cvs.texi(,11669) Only list revisions on the default branch. See @ref{log options}. cvs.texi(,11670) cvs.texi(,11671) @item -d @var{dates} cvs.texi(,11672) Specify dates (@var{d1}<@var{d2} for range, @var{d} for cvs.texi(,11673) latest before). See @ref{log options}. cvs.texi(,11674) cvs.texi(,11675) @item -h cvs.texi(,11676) Only print header. See @ref{log options}. cvs.texi(,11677) cvs.texi(,11678) @item -l cvs.texi(,11679) Local; run only in current working directory. See @ref{Recursive behavior}. cvs.texi(,11680) cvs.texi(,11681) @item -N cvs.texi(,11682) Do not list tags. See @ref{log options}. cvs.texi(,11683) cvs.texi(,11684) @item -R cvs.texi(,11685) Only print name of RCS file. See @ref{log options}. cvs.texi(,11686) cvs.texi(,11687) @item -r@var{revs} cvs.texi(,11688) Only list revisions @var{revs}. See @ref{log options}. cvs.texi(,11689) cvs.texi(,11690) @item -s @var{states} cvs.texi(,11691) Only list revisions with specified states. See @ref{log options}. cvs.texi(,11692) cvs.texi(,11693) @item -t cvs.texi(,11694) Only print header and descriptive text. See @ref{log cvs.texi(,11695) options}. cvs.texi(,11696) cvs.texi(,11697) @item -w@var{logins} cvs.texi(,11698) Only list revisions checked in by specified logins. See @ref{log options}. cvs.texi(,11699) @end table cvs.texi(,11700) cvs.texi(,11701) @c ------------------------------------------------------------ cvs.texi(,11702) @item login cvs.texi(,11703) Prompt for password for authenticating server. See cvs.texi(,11704) @ref{Password authentication client}. cvs.texi(,11705) cvs.texi(,11706) @c ------------------------------------------------------------ cvs.texi(,11707) @item logout cvs.texi(,11708) Remove stored password for authenticating server. See cvs.texi(,11709) @ref{Password authentication client}. cvs.texi(,11710) cvs.texi(,11711) @c ------------------------------------------------------------ cvs.texi(,11712) @item pserver cvs.texi(,11713) Password authenticated server. cvs.texi(,11714) See @ref{Password authentication server}. cvs.texi(,11715) cvs.texi(,11716) @c ------------------------------------------------------------ cvs.texi(,11717) @item rannotate [@var{options}] [@var{modules}@dots{}] cvs.texi(,11718) Show last revision where each line was modified. See cvs.texi(,11719) @ref{annotate}. cvs.texi(,11720) cvs.texi(,11721) @table @code cvs.texi(,11722) @item -D @var{date} cvs.texi(,11723) Annotate the most recent revision no later than cvs.texi(,11724) @var{date}. See @ref{Common options}. cvs.texi(,11725) cvs.texi(,11726) @item -F cvs.texi(,11727) Force annotation of binary files. (Without this option, cvs.texi(,11728) binary files are skipped with a message.) cvs.texi(,11729) cvs.texi(,11730) @item -f cvs.texi(,11731) Use head revision if tag/date not found. See cvs.texi(,11732) @ref{Common options}. cvs.texi(,11733) cvs.texi(,11734) @item -l cvs.texi(,11735) Local; run only in current working directory. @xref{Recursive behavior}. cvs.texi(,11736) cvs.texi(,11737) @item -R cvs.texi(,11738) Operate recursively (default). @xref{Recursive behavior}. cvs.texi(,11739) cvs.texi(,11740) @item -r @var{tag} cvs.texi(,11741) Annotate revision @var{tag}. See @ref{Common options}. cvs.texi(,11742) @end table cvs.texi(,11743) cvs.texi(,11744) @c ------------------------------------------------------------ cvs.texi(,11745) @item rdiff [@var{options}] @var{modules}@dots{} cvs.texi(,11746) Show differences between releases. See @ref{rdiff}. cvs.texi(,11747) cvs.texi(,11748) @table @code cvs.texi(,11749) @item -c cvs.texi(,11750) Context diff output format (default). See @ref{rdiff options}. cvs.texi(,11751) cvs.texi(,11752) @item -D @var{date} cvs.texi(,11753) Select revisions based on @var{date}. See @ref{Common options}. cvs.texi(,11754) cvs.texi(,11755) @item -f cvs.texi(,11756) Use head revision if tag/date not found. See cvs.texi(,11757) @ref{Common options}. cvs.texi(,11758) cvs.texi(,11759) @item -l cvs.texi(,11760) Local; run only in current working directory. See @ref{Recursive behavior}. cvs.texi(,11761) cvs.texi(,11762) @item -R cvs.texi(,11763) Operate recursively (default). @xref{Recursive cvs.texi(,11764) behavior}. cvs.texi(,11765) cvs.texi(,11766) @item -r @var{rev} cvs.texi(,11767) Select revisions based on @var{rev}. See @ref{Common options}. cvs.texi(,11768) cvs.texi(,11769) @item -s cvs.texi(,11770) Short patch - one liner per file. See @ref{rdiff options}. cvs.texi(,11771) cvs.texi(,11772) @item -t cvs.texi(,11773) Top two diffs - last change made to the file. See cvs.texi(,11774) @ref{diff options}. cvs.texi(,11775) cvs.texi(,11776) @item -u cvs.texi(,11777) Unidiff output format. See @ref{rdiff options}. cvs.texi(,11778) cvs.texi(,11779) @item -V @var{vers} cvs.texi(,11780) Use RCS Version @var{vers} for keyword expansion (obsolete). See cvs.texi(,11781) @ref{rdiff options}. cvs.texi(,11782) @end table cvs.texi(,11783) cvs.texi(,11784) @c ------------------------------------------------------------ cvs.texi(,11785) @item release [@var{options}] @var{directory} cvs.texi(,11786) Indicate that a directory is no longer in use. See cvs.texi(,11787) @ref{release}. cvs.texi(,11788) cvs.texi(,11789) @table @code cvs.texi(,11790) @item -d cvs.texi(,11791) Delete the given directory. See @ref{release options}. cvs.texi(,11792) @end table cvs.texi(,11793) cvs.texi(,11794) @c ------------------------------------------------------------ cvs.texi(,11795) @item remove [@var{options}] [@var{files}@dots{}] cvs.texi(,11796) Remove an entry from the repository. See @ref{Removing files}. cvs.texi(,11797) cvs.texi(,11798) @table @code cvs.texi(,11799) @item -f cvs.texi(,11800) Delete the file before removing it. See @ref{Removing files}. cvs.texi(,11801) cvs.texi(,11802) @item -l cvs.texi(,11803) Local; run only in current working directory. See @ref{Recursive behavior}. cvs.texi(,11804) cvs.texi(,11805) @item -R cvs.texi(,11806) Operate recursively (default). @xref{Recursive cvs.texi(,11807) behavior}. cvs.texi(,11808) @end table cvs.texi(,11809) cvs.texi(,11810) @c ------------------------------------------------------------ cvs.texi(,11811) @item rlog [@var{options}] [@var{files}@dots{}] cvs.texi(,11812) Print out history information for modules. See @ref{log}. cvs.texi(,11813) cvs.texi(,11814) @table @code cvs.texi(,11815) @item -b cvs.texi(,11816) Only list revisions on the default branch. See @ref{log options}. cvs.texi(,11817) cvs.texi(,11818) @item -d @var{dates} cvs.texi(,11819) Specify dates (@var{d1}<@var{d2} for range, @var{d} for cvs.texi(,11820) latest before). See @ref{log options}. cvs.texi(,11821) cvs.texi(,11822) @item -h cvs.texi(,11823) Only print header. See @ref{log options}. cvs.texi(,11824) cvs.texi(,11825) @item -l cvs.texi(,11826) Local; run only in current working directory. See @ref{Recursive behavior}. cvs.texi(,11827) cvs.texi(,11828) @item -N cvs.texi(,11829) Do not list tags. See @ref{log options}. cvs.texi(,11830) cvs.texi(,11831) @item -R cvs.texi(,11832) Only print name of RCS file. See @ref{log options}. cvs.texi(,11833) cvs.texi(,11834) @item -r@var{revs} cvs.texi(,11835) Only list revisions @var{revs}. See @ref{log options}. cvs.texi(,11836) cvs.texi(,11837) @item -s @var{states} cvs.texi(,11838) Only list revisions with specified states. See @ref{log options}. cvs.texi(,11839) cvs.texi(,11840) @item -t cvs.texi(,11841) Only print header and descriptive text. See @ref{log options}. cvs.texi(,11842) cvs.texi(,11843) @item -w@var{logins} cvs.texi(,11844) Only list revisions checked in by specified logins. See @ref{log options}. cvs.texi(,11845) @end table cvs.texi(,11846) cvs.texi(,11847) @c ------------------------------------------------------------ cvs.texi(,11848) @item rtag [@var{options}] @var{tag} @var{modules}@dots{} cvs.texi(,11849) Add a symbolic tag to a module. cvs.texi(,11850) See @ref{Revisions} and @ref{Branching and merging}. cvs.texi(,11851) cvs.texi(,11852) @table @code cvs.texi(,11853) @item -a cvs.texi(,11854) Clear tag from removed files that would not otherwise cvs.texi(,11855) be tagged. See @ref{Tagging add/remove}. cvs.texi(,11856) cvs.texi(,11857) @item -b cvs.texi(,11858) Create a branch named @var{tag}. See @ref{Branching and merging}. cvs.texi(,11859) cvs.texi(,11860) @item -B cvs.texi(,11861) Used in conjunction with -F or -d, enables movement and deletion of cvs.texi(,11862) branch tags. Use with extreme caution. cvs.texi(,11863) cvs.texi(,11864) @item -D @var{date} cvs.texi(,11865) Tag revisions as of @var{date}. See @ref{Tagging by date/tag}. cvs.texi(,11866) cvs.texi(,11867) @item -d cvs.texi(,11868) Delete @var{tag}. See @ref{Modifying tags}. cvs.texi(,11869) cvs.texi(,11870) @item -F cvs.texi(,11871) Move @var{tag} if it already exists. See @ref{Modifying tags}. cvs.texi(,11872) cvs.texi(,11873) @item -f cvs.texi(,11874) Force a head revision match if tag/date not found. cvs.texi(,11875) See @ref{Tagging by date/tag}. cvs.texi(,11876) cvs.texi(,11877) @item -l cvs.texi(,11878) Local; run only in current working directory. See @ref{Recursive behavior}. cvs.texi(,11879) cvs.texi(,11880) @item -n cvs.texi(,11881) No execution of tag program. See @ref{Common options}. cvs.texi(,11882) cvs.texi(,11883) @item -R cvs.texi(,11884) Operate recursively (default). @xref{Recursive cvs.texi(,11885) behavior}. cvs.texi(,11886) cvs.texi(,11887) @item -r @var{rev} cvs.texi(,11888) Tag existing tag @var{rev}. See @ref{Tagging by date/tag}. cvs.texi(,11889) @end table cvs.texi(,11890) cvs.texi(,11891) @c ------------------------------------------------------------ cvs.texi(,11892) @item server cvs.texi(,11893) Rsh server. See @ref{Connecting via rsh}. cvs.texi(,11894) cvs.texi(,11895) @c ------------------------------------------------------------ cvs.texi(,11896) @item status [@var{options}] @var{files}@dots{} cvs.texi(,11897) Display status information in a working directory. See cvs.texi(,11898) @ref{File status}. cvs.texi(,11899) cvs.texi(,11900) @table @code cvs.texi(,11901) @item -l cvs.texi(,11902) Local; run only in current working directory. See @ref{Recursive behavior}. cvs.texi(,11903) cvs.texi(,11904) @item -R cvs.texi(,11905) Operate recursively (default). @xref{Recursive cvs.texi(,11906) behavior}. cvs.texi(,11907) cvs.texi(,11908) @item -v cvs.texi(,11909) Include tag information for file. See @ref{Tags}. cvs.texi(,11910) @end table cvs.texi(,11911) cvs.texi(,11912) @c ------------------------------------------------------------ cvs.texi(,11913) @item tag [@var{options}] @var{tag} [@var{files}@dots{}] cvs.texi(,11914) Add a symbolic tag to checked out version of files. cvs.texi(,11915) See @ref{Revisions} and @ref{Branching and merging}. cvs.texi(,11916) cvs.texi(,11917) @table @code cvs.texi(,11918) @item -b cvs.texi(,11919) Create a branch named @var{tag}. See @ref{Branching and merging}. cvs.texi(,11920) cvs.texi(,11921) @item -c cvs.texi(,11922) Check that working files are unmodified. See cvs.texi(,11923) @ref{Tagging the working directory}. cvs.texi(,11924) cvs.texi(,11925) @item -D @var{date} cvs.texi(,11926) Tag revisions as of @var{date}. See @ref{Tagging by date/tag}. cvs.texi(,11927) cvs.texi(,11928) @item -d cvs.texi(,11929) Delete @var{tag}. See @ref{Modifying tags}. cvs.texi(,11930) cvs.texi(,11931) @item -F cvs.texi(,11932) Move @var{tag} if it already exists. See @ref{Modifying tags}. cvs.texi(,11933) cvs.texi(,11934) @item -f cvs.texi(,11935) Force a head revision match if tag/date not found. cvs.texi(,11936) See @ref{Tagging by date/tag}. cvs.texi(,11937) cvs.texi(,11938) @item -l cvs.texi(,11939) Local; run only in current working directory. See @ref{Recursive behavior}. cvs.texi(,11940) cvs.texi(,11941) @item -R cvs.texi(,11942) Operate recursively (default). @xref{Recursive cvs.texi(,11943) behavior}. cvs.texi(,11944) cvs.texi(,11945) @item -r @var{rev} cvs.texi(,11946) Tag existing tag @var{rev}. See @ref{Tagging by date/tag}. cvs.texi(,11947) @end table cvs.texi(,11948) cvs.texi(,11949) @c ------------------------------------------------------------ cvs.texi(,11950) @item unedit [@var{options}] [@var{files}@dots{}] cvs.texi(,11951) Undo an edit command. See @ref{Editing files}. cvs.texi(,11952) cvs.texi(,11953) @table @code cvs.texi(,11954) @item -l cvs.texi(,11955) Local; run only in current working directory. See @ref{Recursive behavior}. cvs.texi(,11956) cvs.texi(,11957) @item -R cvs.texi(,11958) Operate recursively (default). @xref{Recursive behavior}. cvs.texi(,11959) @end table cvs.texi(,11960) cvs.texi(,11961) @c ------------------------------------------------------------ cvs.texi(,11962) @item update [@var{options}] [@var{files}@dots{}] cvs.texi(,11963) Bring work tree in sync with repository. See cvs.texi(,11964) @ref{update}. cvs.texi(,11965) cvs.texi(,11966) @table @code cvs.texi(,11967) @item -A cvs.texi(,11968) Reset any sticky tags/date/options. See @ref{Sticky cvs.texi(,11969) tags} and @ref{Keyword substitution}. cvs.texi(,11970) cvs.texi(,11971) @item -C cvs.texi(,11972) Overwrite locally modified files with clean copies from cvs.texi(,11973) the repository (the modified file is saved in cvs.texi(,11974) @file{.#@var{file}.@var{revision}}, however). cvs.texi(,11975) cvs.texi(,11976) @item -D @var{date} cvs.texi(,11977) Check out revisions as of @var{date} (is sticky). See cvs.texi(,11978) @ref{Common options}. cvs.texi(,11979) cvs.texi(,11980) @item -d cvs.texi(,11981) Create directories. See @ref{update options}. cvs.texi(,11982) cvs.texi(,11983) @item -f cvs.texi(,11984) Use head revision if tag/date not found. See cvs.texi(,11985) @ref{Common options}. cvs.texi(,11986) cvs.texi(,11987) @item -I @var{ign} cvs.texi(,11988) More files to ignore (! to reset). See cvs.texi(,11989) @ref{import options}. cvs.texi(,11990) cvs.texi(,11991) @c Probably want to use rev1/rev2 style like for diff cvs.texi(,11992) @c -r. Here and in on-line help. cvs.texi(,11993) @item -j @var{rev} cvs.texi(,11994) Merge in changes. See @ref{update options}. cvs.texi(,11995) cvs.texi(,11996) @item -k @var{kflag} cvs.texi(,11997) Use @var{kflag} keyword expansion. See cvs.texi(,11998) @ref{Substitution modes}. cvs.texi(,11999) cvs.texi(,12000) @item -l cvs.texi(,12001) Local; run only in current working directory. @xref{Recursive behavior}. cvs.texi(,12002) cvs.texi(,12003) @item -P cvs.texi(,12004) Prune empty directories. See @ref{Moving directories}. cvs.texi(,12005) cvs.texi(,12006) @item -p cvs.texi(,12007) Check out files to standard output (avoids cvs.texi(,12008) stickiness). See @ref{update options}. cvs.texi(,12009) cvs.texi(,12010) @item -R cvs.texi(,12011) Operate recursively (default). @xref{Recursive cvs.texi(,12012) behavior}. cvs.texi(,12013) cvs.texi(,12014) @item -r @var{tag} cvs.texi(,12015) Checkout revision @var{tag} (is sticky). See @ref{Common options}. cvs.texi(,12016) cvs.texi(,12017) @item -W @var{spec} cvs.texi(,12018) More wrappers. See @ref{import options}. cvs.texi(,12019) @end table cvs.texi(,12020) cvs.texi(,12021) @c ------------------------------------------------------------ cvs.texi(,12022) @item version cvs.texi(,12023) @cindex version (subcommand) cvs.texi(,12024) cvs.texi(,12025) Display the version of @sc{cvs} being used. If the repository cvs.texi(,12026) is remote, display both the client and server versions. cvs.texi(,12027) cvs.texi(,12028) @c ------------------------------------------------------------ cvs.texi(,12029) @item watch [on|off|add|remove] [@var{options}] [@var{files}@dots{}] cvs.texi(,12030) cvs.texi(,12031) on/off: turn on/off read-only checkouts of files. See cvs.texi(,12032) @ref{Setting a watch}. cvs.texi(,12033) cvs.texi(,12034) add/remove: add or remove notification on actions. See cvs.texi(,12035) @ref{Getting Notified}. cvs.texi(,12036) cvs.texi(,12037) @table @code cvs.texi(,12038) @item -a @var{actions} cvs.texi(,12039) Specify actions for temporary watch, where cvs.texi(,12040) @var{actions} is @code{edit}, @code{unedit}, cvs.texi(,12041) @code{commit}, @code{all}, or @code{none}. See cvs.texi(,12042) @ref{Editing files}. cvs.texi(,12043) cvs.texi(,12044) @item -l cvs.texi(,12045) Local; run only in current working directory. See @ref{Recursive behavior}. cvs.texi(,12046) cvs.texi(,12047) @item -R cvs.texi(,12048) Operate recursively (default). @xref{Recursive cvs.texi(,12049) behavior}. cvs.texi(,12050) @end table cvs.texi(,12051) cvs.texi(,12052) @c ------------------------------------------------------------ cvs.texi(,12053) @item watchers [@var{options}] [@var{files}@dots{}] cvs.texi(,12054) See who is watching a file. See @ref{Watch information}. cvs.texi(,12055) cvs.texi(,12056) @table @code cvs.texi(,12057) @item -l cvs.texi(,12058) Local; run only in current working directory. See @ref{Recursive behavior}. cvs.texi(,12059) cvs.texi(,12060) @item -R cvs.texi(,12061) Operate recursively (default). @xref{Recursive cvs.texi(,12062) behavior}. cvs.texi(,12063) @end table cvs.texi(,12064) cvs.texi(,12065) @end table cvs.texi(,12066) cvs.texi(,12067) @c --------------------------------------------------------------------- cvs.texi(,12068) @node Administrative files cvs.texi(,12069) @appendix Reference manual for Administrative files cvs.texi(,12070) @cindex Administrative files (reference) cvs.texi(,12071) @cindex Files, reference manual cvs.texi(,12072) @cindex Reference manual (files) cvs.texi(,12073) @cindex CVSROOT (file) cvs.texi(,12074) cvs.texi(,12075) @c FIXME? Somewhere there needs to be a more "how-to" cvs.texi(,12076) @c guide to writing these. I think the triggers cvs.texi(,12077) @c (commitinfo, loginfo, taginfo, &c) are perhaps a cvs.texi(,12078) @c different case than files like modules. One cvs.texi(,12079) @c particular issue that people sometimes are cvs.texi(,12080) @c (unnecessarily?) worried about is performance, and cvs.texi(,12081) @c the impact of writing in perl or sh or ____. cvs.texi(,12082) Inside the repository, in the directory cvs.texi(,12083) @file{$CVSROOT/CVSROOT}, there are a number of cvs.texi(,12084) supportive files for @sc{cvs}. You can use @sc{cvs} in a limited cvs.texi(,12085) fashion without any of them, but if they are set up cvs.texi(,12086) properly they can help make life easier. For a cvs.texi(,12087) discussion of how to edit them, see @ref{Intro cvs.texi(,12088) administrative files}. cvs.texi(,12089) cvs.texi(,12090) The most important of these files is the @file{modules} cvs.texi(,12091) file, which defines the modules inside the repository. cvs.texi(,12092) cvs.texi(,12093) @menu cvs.texi(,12094) * modules:: Defining modules cvs.texi(,12095) * Wrappers:: Specify binary-ness based on file name cvs.texi(,12096) * commit files:: The commit support files (commitinfo, cvs.texi(,12097) verifymsg, editinfo, loginfo) cvs.texi(,12098) * rcsinfo:: Templates for the log messages cvs.texi(,12099) * cvsignore:: Ignoring files via cvsignore cvs.texi(,12100) * checkoutlist:: Adding your own administrative files cvs.texi(,12101) * history file:: History information cvs.texi(,12102) * Variables:: Various variables are expanded cvs.texi(,12103) * config:: Miscellaneous CVS configuration cvs.texi(,12104) @end menu cvs.texi(,12105) cvs.texi(,12106) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,12107) @node modules cvs.texi(,12108) @appendixsec The modules file cvs.texi(,12109) @cindex Modules (admin file) cvs.texi(,12110) @cindex Defining modules (reference manual) cvs.texi(,12111) cvs.texi(,12112) The @file{modules} file records your definitions of cvs.texi(,12113) names for collections of source code. @sc{cvs} will cvs.texi(,12114) use these definitions if you use @sc{cvs} to update the cvs.texi(,12115) modules file (use normal commands like @code{add}, cvs.texi(,12116) @code{commit}, etc). cvs.texi(,12117) cvs.texi(,12118) The @file{modules} file may contain blank lines and cvs.texi(,12119) comments (lines beginning with @samp{#}) as well as cvs.texi(,12120) module definitions. Long lines can be continued on the cvs.texi(,12121) next line by specifying a backslash (@samp{\}) as the cvs.texi(,12122) last character on the line. cvs.texi(,12123) cvs.texi(,12124) There are three basic types of modules: alias modules, cvs.texi(,12125) regular modules, and ampersand modules. The difference cvs.texi(,12126) between them is the way that they map files in the cvs.texi(,12127) repository to files in the working directory. In all cvs.texi(,12128) of the following examples, the top-level repository cvs.texi(,12129) contains a directory called @file{first-dir}, which cvs.texi(,12130) contains two files, @file{file1} and @file{file2}, and a cvs.texi(,12131) directory @file{sdir}. @file{first-dir/sdir} contains cvs.texi(,12132) a file @file{sfile}. cvs.texi(,12133) cvs.texi(,12134) @c FIXME: should test all the examples in this section. cvs.texi(,12135) cvs.texi(,12136) @menu cvs.texi(,12137) * Alias modules:: The simplest kind of module cvs.texi(,12138) * Regular modules:: cvs.texi(,12139) * Ampersand modules:: cvs.texi(,12140) * Excluding directories:: Excluding directories from a module cvs.texi(,12141) * Module options:: Regular and ampersand modules can take options cvs.texi(,12142) * Module program options:: How the modules ``program options'' programs cvs.texi(,12143) are run. cvs.texi(,12144) @end menu cvs.texi(,12145) cvs.texi(,12146) @node Alias modules cvs.texi(,12147) @appendixsubsec Alias modules cvs.texi(,12148) @cindex Alias modules cvs.texi(,12149) @cindex -a, in modules file cvs.texi(,12150) cvs.texi(,12151) Alias modules are the simplest kind of module: cvs.texi(,12152) cvs.texi(,12153) @table @code cvs.texi(,12154) @item @var{mname} -a @var{aliases}@dots{} cvs.texi(,12155) This represents the simplest way of defining a module cvs.texi(,12156) @var{mname}. The @samp{-a} flags the definition as a cvs.texi(,12157) simple alias: @sc{cvs} will treat any use of @var{mname} (as cvs.texi(,12158) a command argument) as if the list of names cvs.texi(,12159) @var{aliases} had been specified instead. cvs.texi(,12160) @var{aliases} may contain either other module names or cvs.texi(,12161) paths. When you use paths in aliases, @code{checkout} cvs.texi(,12162) creates all intermediate directories in the working cvs.texi(,12163) directory, just as if the path had been specified cvs.texi(,12164) explicitly in the @sc{cvs} arguments. cvs.texi(,12165) @end table cvs.texi(,12166) cvs.texi(,12167) For example, if the modules file contains: cvs.texi(,12168) cvs.texi(,12169) @example cvs.texi(,12170) amodule -a first-dir cvs.texi(,12171) @end example cvs.texi(,12172) cvs.texi(,12173) @noindent cvs.texi(,12174) then the following two commands are equivalent: cvs.texi(,12175) cvs.texi(,12176) @example cvs.texi(,12177) $ cvs co amodule cvs.texi(,12178) $ cvs co first-dir cvs.texi(,12179) @end example cvs.texi(,12180) cvs.texi(,12181) @noindent cvs.texi(,12182) and they each would provide output such as: cvs.texi(,12183) cvs.texi(,12184) @example cvs.texi(,12185) cvs checkout: Updating first-dir cvs.texi(,12186) U first-dir/file1 cvs.texi(,12187) U first-dir/file2 cvs.texi(,12188) cvs checkout: Updating first-dir/sdir cvs.texi(,12189) U first-dir/sdir/sfile cvs.texi(,12190) @end example cvs.texi(,12191) cvs.texi(,12192) @node Regular modules cvs.texi(,12193) @appendixsubsec Regular modules cvs.texi(,12194) @cindex Regular modules cvs.texi(,12195) cvs.texi(,12196) @table @code cvs.texi(,12197) @item @var{mname} [ options ] @var{dir} [ @var{files}@dots{} ] cvs.texi(,12198) In the simplest case, this form of module definition cvs.texi(,12199) reduces to @samp{@var{mname} @var{dir}}. This defines cvs.texi(,12200) all the files in directory @var{dir} as module mname. cvs.texi(,12201) @var{dir} is a relative path (from @code{$CVSROOT}) to a cvs.texi(,12202) directory of source in the source repository. In this cvs.texi(,12203) case, on checkout, a single directory called cvs.texi(,12204) @var{mname} is created as a working directory; no cvs.texi(,12205) intermediate directory levels are used by default, even cvs.texi(,12206) if @var{dir} was a path involving several directory cvs.texi(,12207) levels. cvs.texi(,12208) @end table cvs.texi(,12209) cvs.texi(,12210) For example, if a module is defined by: cvs.texi(,12211) cvs.texi(,12212) @example cvs.texi(,12213) regmodule first-dir cvs.texi(,12214) @end example cvs.texi(,12215) cvs.texi(,12216) @noindent cvs.texi(,12217) then regmodule will contain the files from first-dir: cvs.texi(,12218) cvs.texi(,12219) @example cvs.texi(,12220) $ cvs co regmodule cvs.texi(,12221) cvs checkout: Updating regmodule cvs.texi(,12222) U regmodule/file1 cvs.texi(,12223) U regmodule/file2 cvs.texi(,12224) cvs checkout: Updating regmodule/sdir cvs.texi(,12225) U regmodule/sdir/sfile cvs.texi(,12226) $ cvs.texi(,12227) @end example cvs.texi(,12228) cvs.texi(,12229) By explicitly specifying files in the module definition cvs.texi(,12230) after @var{dir}, you can select particular files from cvs.texi(,12231) directory @var{dir}. Here is cvs.texi(,12232) an example: cvs.texi(,12233) cvs.texi(,12234) @example cvs.texi(,12235) regfiles first-dir/sdir sfile cvs.texi(,12236) @end example cvs.texi(,12237) cvs.texi(,12238) @noindent cvs.texi(,12239) With this definition, getting the regfiles module cvs.texi(,12240) will create a single working directory cvs.texi(,12241) @file{regfiles} containing the file listed, which cvs.texi(,12242) comes from a directory deeper cvs.texi(,12243) in the @sc{cvs} source repository: cvs.texi(,12244) cvs.texi(,12245) @example cvs.texi(,12246) $ cvs co regfiles cvs.texi(,12247) U regfiles/sfile cvs.texi(,12248) $ cvs.texi(,12249) @end example cvs.texi(,12250) cvs.texi(,12251) @node Ampersand modules cvs.texi(,12252) @appendixsubsec Ampersand modules cvs.texi(,12253) @cindex Ampersand modules cvs.texi(,12254) @cindex &, in modules file cvs.texi(,12255) cvs.texi(,12256) A module definition can refer to other modules by cvs.texi(,12257) including @samp{&@var{module}} in its definition. cvs.texi(,12258) @example cvs.texi(,12259) @var{mname} [ options ] @var{&module}@dots{} cvs.texi(,12260) @end example cvs.texi(,12261) cvs.texi(,12262) Then getting the module creates a subdirectory for each such cvs.texi(,12263) module, in the directory containing the module. For cvs.texi(,12264) example, if modules contains cvs.texi(,12265) cvs.texi(,12266) @example cvs.texi(,12267) ampermod &first-dir cvs.texi(,12268) @end example cvs.texi(,12269) cvs.texi(,12270) @noindent cvs.texi(,12271) then a checkout will create an @code{ampermod} directory cvs.texi(,12272) which contains a directory called @code{first-dir}, cvs.texi(,12273) which in turns contains all the directories and files cvs.texi(,12274) which live there. For example, the command cvs.texi(,12275) cvs.texi(,12276) @example cvs.texi(,12277) $ cvs co ampermod cvs.texi(,12278) @end example cvs.texi(,12279) cvs.texi(,12280) @noindent cvs.texi(,12281) will create the following files: cvs.texi(,12282) cvs.texi(,12283) @example cvs.texi(,12284) ampermod/first-dir/file1 cvs.texi(,12285) ampermod/first-dir/file2 cvs.texi(,12286) ampermod/first-dir/sdir/sfile cvs.texi(,12287) @end example cvs.texi(,12288) cvs.texi(,12289) There is one quirk/bug: the messages that @sc{cvs} cvs.texi(,12290) prints omit the @file{ampermod}, and thus do not cvs.texi(,12291) correctly display the location to which it is checking cvs.texi(,12292) out the files: cvs.texi(,12293) cvs.texi(,12294) @example cvs.texi(,12295) $ cvs co ampermod cvs.texi(,12296) cvs checkout: Updating first-dir cvs.texi(,12297) U first-dir/file1 cvs.texi(,12298) U first-dir/file2 cvs.texi(,12299) cvs checkout: Updating first-dir/sdir cvs.texi(,12300) U first-dir/sdir/sfile cvs.texi(,12301) $ cvs.texi(,12302) @end example cvs.texi(,12303) cvs.texi(,12304) Do not rely on this buggy behavior; it may get fixed in cvs.texi(,12305) a future release of @sc{cvs}. cvs.texi(,12306) cvs.texi(,12307) @c FIXCVS: What happens if regular and & modules are cvs.texi(,12308) @c combined, as in "ampermodule first-dir &second-dir"? cvs.texi(,12309) @c When I tried it, it seemed to just ignore the cvs.texi(,12310) @c "first-dir". I think perhaps it should be an error cvs.texi(,12311) @c (but this needs further investigation). cvs.texi(,12312) @c In addition to discussing what each one does, we cvs.texi(,12313) @c should put in a few words about why you would use one or cvs.texi(,12314) @c the other in various situations. cvs.texi(,12315) cvs.texi(,12316) @node Excluding directories cvs.texi(,12317) @appendixsubsec Excluding directories cvs.texi(,12318) @cindex Excluding directories, in modules file cvs.texi(,12319) @cindex !, in modules file cvs.texi(,12320) cvs.texi(,12321) An alias module may exclude particular directories from cvs.texi(,12322) other modules by using an exclamation mark (@samp{!}) cvs.texi(,12323) before the name of each directory to be excluded. cvs.texi(,12324) cvs.texi(,12325) For example, if the modules file contains: cvs.texi(,12326) cvs.texi(,12327) @example cvs.texi(,12328) exmodule -a !first-dir/sdir first-dir cvs.texi(,12329) @end example cvs.texi(,12330) cvs.texi(,12331) @noindent cvs.texi(,12332) then checking out the module @samp{exmodule} will check cvs.texi(,12333) out everything in @samp{first-dir} except any files in cvs.texi(,12334) the subdirectory @samp{first-dir/sdir}. cvs.texi(,12335) @c Note that the "!first-dir/sdir" sometimes must be listed cvs.texi(,12336) @c before "first-dir". That seems like a probable bug, in which cvs.texi(,12337) @c case perhaps it should be fixed (to allow either cvs.texi(,12338) @c order) rather than documented. See modules4 in testsuite. cvs.texi(,12339) cvs.texi(,12340) @node Module options cvs.texi(,12341) @appendixsubsec Module options cvs.texi(,12342) @cindex Options, in modules file cvs.texi(,12343) cvs.texi(,12344) Either regular modules or ampersand modules can contain cvs.texi(,12345) options, which supply additional information concerning cvs.texi(,12346) the module. cvs.texi(,12347) cvs.texi(,12348) @table @code cvs.texi(,12349) @cindex -d, in modules file cvs.texi(,12350) @item -d @var{name} cvs.texi(,12351) Name the working directory something other than the cvs.texi(,12352) module name. cvs.texi(,12353) @c FIXME: Needs a bunch of examples, analogous to the cvs.texi(,12354) @c examples for alias, regular, and ampersand modules cvs.texi(,12355) @c which show where the files go without -d. cvs.texi(,12356) cvs.texi(,12357) @cindex Export program cvs.texi(,12358) @cindex -e, in modules file cvs.texi(,12359) @item -e @var{prog} cvs.texi(,12360) Specify a program @var{prog} to run whenever files in a cvs.texi(,12361) module are exported. @var{prog} runs with a single cvs.texi(,12362) argument, the module name. cvs.texi(,12363) @c FIXME: Is it run on server? client? cvs.texi(,12364) cvs.texi(,12365) @cindex Checkout program cvs.texi(,12366) @cindex -o, in modules file cvs.texi(,12367) @item -o @var{prog} cvs.texi(,12368) Specify a program @var{prog} to run whenever files in a cvs.texi(,12369) module are checked out. @var{prog} runs with a single cvs.texi(,12370) argument, the module name. See @ref{Module program options} for cvs.texi(,12371) information on how @var{prog} is called. cvs.texi(,12372) @c FIXME: Is it run on server? client? cvs.texi(,12373) cvs.texi(,12374) @cindex Status of a module cvs.texi(,12375) @cindex Module status cvs.texi(,12376) @cindex -s, in modules file cvs.texi(,12377) @item -s @var{status} cvs.texi(,12378) Assign a status to the module. When the module file is cvs.texi(,12379) printed with @samp{cvs checkout -s} the modules are cvs.texi(,12380) sorted according to primarily module status, and cvs.texi(,12381) secondarily according to the module name. This option cvs.texi(,12382) has no other meaning. You can use this option for cvs.texi(,12383) several things besides status: for instance, list the cvs.texi(,12384) person that is responsible for this module. cvs.texi(,12385) cvs.texi(,12386) @cindex Tag program cvs.texi(,12387) @cindex -t, in modules file cvs.texi(,12388) @item -t @var{prog} cvs.texi(,12389) Specify a program @var{prog} to run whenever files in a cvs.texi(,12390) module are tagged with @code{rtag}. @var{prog} runs cvs.texi(,12391) with two arguments: the module name and the symbolic cvs.texi(,12392) tag specified to @code{rtag}. It is not run cvs.texi(,12393) when @code{tag} is executed. Generally you will find cvs.texi(,12394) that taginfo is a better solution (@pxref{user-defined logging}). cvs.texi(,12395) @c FIXME: Is it run on server? client? cvs.texi(,12396) @c Problems with -t include: cvs.texi(,12397) @c * It is run after the tag not before cvs.texi(,12398) @c * It doesn't get passed all the information that cvs.texi(,12399) @c taginfo does ("mov", &c). cvs.texi(,12400) @c * It only is run for rtag, not tag. cvs.texi(,12401) @end table cvs.texi(,12402) cvs.texi(,12403) You should also see @pxref{Module program options} about how the cvs.texi(,12404) ``program options'' programs are run. cvs.texi(,12405) cvs.texi(,12406) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,12407) cvs.texi(,12408) @node Module program options cvs.texi(,12409) @appendixsubsec How the modules file ``program options'' programs are run cvs.texi(,12410) @cindex Modules file program options cvs.texi(,12411) @cindex -t, in modules file cvs.texi(,12412) @cindex -o, in modules file cvs.texi(,12413) @cindex -e, in modules file cvs.texi(,12414) cvs.texi(,12415) @noindent cvs.texi(,12416) For checkout, rtag, and export, the program is server-based, and as such the cvs.texi(,12417) following applies:- cvs.texi(,12418) cvs.texi(,12419) If using remote access methods (pserver, ext, etc.), cvs.texi(,12420) @sc{cvs} will execute this program on the server from a temporary cvs.texi(,12421) directory. The path is searched for this program. cvs.texi(,12422) cvs.texi(,12423) If using ``local access'' (on a local or remote NFS file system, i.e. cvs.texi(,12424) repository set just to a path), cvs.texi(,12425) the program will be executed from the newly checked-out tree, if cvs.texi(,12426) found there, or alternatively searched for in the path if not. cvs.texi(,12427) cvs.texi(,12428) The programs are all run after the operation has effectively cvs.texi(,12429) completed. cvs.texi(,12430) cvs.texi(,12431) cvs.texi(,12432) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,12433) @node Wrappers cvs.texi(,12434) @appendixsec The cvswrappers file cvs.texi(,12435) @cindex cvswrappers (admin file) cvs.texi(,12436) @cindex CVSWRAPPERS, environment variable cvs.texi(,12437) @cindex Wrappers cvs.texi(,12438) cvs.texi(,12439) @c FIXME: need some better way of separating this out cvs.texi(,12440) @c by functionality. -m is cvs.texi(,12441) @c one feature, and -k is a another. And this discussion cvs.texi(,12442) @c should be better motivated (e.g. start with the cvs.texi(,12443) @c problems, then explain how the feature solves it). cvs.texi(,12444) cvs.texi(,12445) Wrappers refers to a @sc{cvs} feature which lets you cvs.texi(,12446) control certain settings based on the name of the file cvs.texi(,12447) which is being operated on. The settings are @samp{-k} cvs.texi(,12448) for binary files, and @samp{-m} for nonmergeable text cvs.texi(,12449) files. cvs.texi(,12450) cvs.texi(,12451) The @samp{-m} option cvs.texi(,12452) specifies the merge methodology that should be used when cvs.texi(,12453) a non-binary file is updated. @code{MERGE} means the usual cvs.texi(,12454) @sc{cvs} behavior: try to merge the files. @code{COPY} cvs.texi(,12455) means that @code{cvs update} will refuse to merge cvs.texi(,12456) files, as it also does for files specified as binary cvs.texi(,12457) with @samp{-kb} (but if the file is specified as cvs.texi(,12458) binary, there is no need to specify @samp{-m 'COPY'}). cvs.texi(,12459) @sc{cvs} will provide the user with the cvs.texi(,12460) two versions of the files, and require the user using cvs.texi(,12461) mechanisms outside @sc{cvs}, to insert any necessary cvs.texi(,12462) changes. cvs.texi(,12463) cvs.texi(,12464) @strong{WARNING: do not use @code{COPY} with cvs.texi(,12465) @sc{cvs} 1.9 or earlier - such versions of @sc{cvs} will cvs.texi(,12466) copy one version of your file over the other, wiping cvs.texi(,12467) out the previous contents.} cvs.texi(,12468) @c Ordinarily we don't document the behavior of old cvs.texi(,12469) @c versions. But this one is so dangerous, I think we cvs.texi(,12470) @c must. I almost renamed it to -m 'NOMERGE' so we cvs.texi(,12471) @c could say "never use -m 'COPY'". cvs.texi(,12472) The @samp{-m} wrapper option only affects behavior when cvs.texi(,12473) merging is done on update; it does not affect how files cvs.texi(,12474) are stored. See @ref{Binary files}, for more on cvs.texi(,12475) binary files. cvs.texi(,12476) cvs.texi(,12477) The basic format of the file @file{cvswrappers} is: cvs.texi(,12478) cvs.texi(,12479) @c FIXME: @example is all wrong for this. Use @deffn or cvs.texi(,12480) @c something more sensible. cvs.texi(,12481) @example cvs.texi(,12482) wildcard [option value][option value]... cvs.texi(,12483) cvs.texi(,12484) where option is one of cvs.texi(,12485) -m update methodology value: MERGE or COPY cvs.texi(,12486) -k keyword expansion value: expansion mode cvs.texi(,12487) cvs.texi(,12488) and value is a single-quote delimited value. cvs.texi(,12489) @end example cvs.texi(,12490) cvs.texi(,12552) cvs.texi(,12553) @c FIXME: We don't document -W or point to where it is cvs.texi(,12554) @c documented. Or .cvswrappers. cvs.texi(,12555) For example, the following command imports a cvs.texi(,12556) directory, treating files whose name ends in cvs.texi(,12557) @samp{.exe} as binary: cvs.texi(,12558) cvs.texi(,12559) @example cvs.texi(,12560) cvs import -I ! -W "*.exe -k 'b'" first-dir vendortag reltag cvs.texi(,12561) @end example cvs.texi(,12562) cvs.texi(,12563) @c Another good example, would be storing files cvs.texi(,12564) @c (e.g. binary files) compressed in the repository. cvs.texi(,12565) @c :::::::::::::::::: cvs.texi(,12566) @c cvswrappers cvs.texi(,12567) @c :::::::::::::::::: cvs.texi(,12568) @c *.t12 -m 'COPY' cvs.texi(,12569) @c *.t[0-9][0-9] -f 'gunzipcp %s' -t 'gzipcp %s %s' -m 'COPY' cvs.texi(,12570) @c cvs.texi(,12571) @c :::::::::::::::::: cvs.texi(,12572) @c gunzipcp cvs.texi(,12573) @c :::::::::::::::::: cvs.texi(,12574) @c : cvs.texi(,12575) @c [ -f $1 ] || exit 1 cvs.texi(,12576) @c zcat $1 > /tmp/.#$1.$$ cvs.texi(,12577) @c mv /tmp/.#$1.$$ $1 cvs.texi(,12578) @c cvs.texi(,12579) @c :::::::::::::::::: cvs.texi(,12580) @c gzipcp cvs.texi(,12581) @c :::::::::::::::::: cvs.texi(,12582) @c : cvs.texi(,12583) @c DIRNAME=`echo $1 | sed -e "s|/.*/||g"` cvs.texi(,12584) @c if [ ! -d $DIRNAME ] ; then cvs.texi(,12585) @c DIRNAME=`echo $1 | sed -e "s|.*/||g"` cvs.texi(,12586) @c fi cvs.texi(,12587) @c gzip -c $DIRNAME > $2 cvs.texi(,12588) @c One catch--"cvs diff" will not invoke the wrappers cvs.texi(,12589) @c (probably a CVS bug, although I haven't thought it out). cvs.texi(,12590) cvs.texi(,12591) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,12592) @node commit files cvs.texi(,12593) @appendixsec The commit support files cvs.texi(,12594) @cindex Committing, administrative support files cvs.texi(,12595) cvs.texi(,12596) The @samp{-i} flag in the @file{modules} file can be cvs.texi(,12597) used to run a certain program whenever files are cvs.texi(,12598) committed (@pxref{modules}). The files described in cvs.texi(,12599) this section provide other, more flexible, ways to run cvs.texi(,12600) programs whenever something is committed. cvs.texi(,12601) cvs.texi(,12602) There are three kind of programs that can be run on cvs.texi(,12603) commit. They are specified in files in the repository, cvs.texi(,12604) as described below. The following table summarizes the cvs.texi(,12605) file names and the purpose of the corresponding cvs.texi(,12606) programs. cvs.texi(,12607) cvs.texi(,12608) @table @file cvs.texi(,12609) @item commitinfo cvs.texi(,12610) The program is responsible for checking that the commit cvs.texi(,12611) is allowed. If it exits with a non-zero exit status cvs.texi(,12612) the commit will be aborted. cvs.texi(,12613) cvs.texi(,12614) @item verifymsg cvs.texi(,12615) The specified program is used to evaluate the log message, cvs.texi(,12616) and possibly verify that it contains all required cvs.texi(,12617) fields. This is most useful in combination with the cvs.texi(,12618) @file{rcsinfo} file, which can hold a log message cvs.texi(,12619) template (@pxref{rcsinfo}). cvs.texi(,12620) cvs.texi(,12621) @item editinfo cvs.texi(,12622) The specified program is used to edit the log message, cvs.texi(,12623) and possibly verify that it contains all required cvs.texi(,12624) fields. This is most useful in combination with the cvs.texi(,12625) @file{rcsinfo} file, which can hold a log message cvs.texi(,12626) template (@pxref{rcsinfo}). (obsolete) cvs.texi(,12627) cvs.texi(,12628) @item loginfo cvs.texi(,12629) The specified program is called when the commit is cvs.texi(,12630) complete. It receives the log message and some cvs.texi(,12631) additional information and can store the log message in cvs.texi(,12632) a file, or mail it to appropriate persons, or maybe cvs.texi(,12633) post it to a local newsgroup, or@dots{} Your cvs.texi(,12634) imagination is the limit! cvs.texi(,12635) @end table cvs.texi(,12636) cvs.texi(,12637) @menu cvs.texi(,12638) * syntax:: The common syntax cvs.texi(,12639) * commitinfo:: Pre-commit checking cvs.texi(,12640) * verifymsg:: How are log messages evaluated? cvs.texi(,12641) * editinfo:: Specifying how log messages are created cvs.texi(,12642) (obsolete) cvs.texi(,12643) * loginfo:: Where should log messages be sent? cvs.texi(,12644) @end menu cvs.texi(,12645) cvs.texi(,12646) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,12647) @node syntax cvs.texi(,12648) @appendixsubsec The common syntax cvs.texi(,12649) @cindex Info files (syntax) cvs.texi(,12650) @cindex Syntax of info files cvs.texi(,12651) @cindex Common syntax of info files cvs.texi(,12652) cvs.texi(,12653) @c FIXME: having this so totally separate from the cvs.texi(,12654) @c Variables node is rather bogus. cvs.texi(,12655) cvs.texi(,12656) The administrative files such as @file{commitinfo}, cvs.texi(,12657) @file{loginfo}, @file{rcsinfo}, @file{verifymsg}, etc., cvs.texi(,12658) all have a common format. The purpose of the files are cvs.texi(,12659) described later on. The common syntax is described cvs.texi(,12660) here. cvs.texi(,12661) cvs.texi(,12662) @cindex Regular expression syntax cvs.texi(,12663) Each line contains the following: cvs.texi(,12664) @itemize @bullet cvs.texi(,12665) @item cvs.texi(,12666) @c Say anything about DEFAULT and ALL? Right now we cvs.texi(,12667) @c leave that to the description of each file (and in fact cvs.texi(,12668) @c the practice is inconsistent which is really annoying). cvs.texi(,12669) A regular expression. This is a basic regular cvs.texi(,12670) expression in the syntax used by GNU emacs. cvs.texi(,12671) @c FIXME: What we probably should be saying is "POSIX Basic cvs.texi(,12672) @c Regular Expression with the following extensions (`\(' cvs.texi(,12673) @c `\|' '+' etc)" cvs.texi(,12674) @c rather than define it with reference to emacs. cvs.texi(,12675) @c The reference to emacs is not strictly speaking cvs.texi(,12676) @c true, as we don't support \=, \s, or \S. Also it isn't cvs.texi(,12677) @c clear we should document and/or promise to continue to cvs.texi(,12678) @c support all the obscure emacs extensions like \<. cvs.texi(,12679) @c Also need to better cite (or include) full cvs.texi(,12680) @c documentation for the syntax. cvs.texi(,12681) @c Also see comment in configure.in about what happens to the cvs.texi(,12682) @c syntax if we pick up a system-supplied regexp matcher. cvs.texi(,12683) cvs.texi(,12684) @item cvs.texi(,12685) A whitespace separator---one or more spaces and/or tabs. cvs.texi(,12686) cvs.texi(,12687) @item cvs.texi(,12688) A file name or command-line template. cvs.texi(,12689) @end itemize cvs.texi(,12690) cvs.texi(,12691) @noindent cvs.texi(,12692) Blank lines are ignored. Lines that start with the cvs.texi(,12693) character @samp{#} are treated as comments. Long lines cvs.texi(,12694) unfortunately can @emph{not} be broken in two parts in cvs.texi(,12695) any way. cvs.texi(,12696) cvs.texi(,12697) The first regular expression that matches the current cvs.texi(,12698) directory name in the repository is used. The rest of the line cvs.texi(,12699) is used as a file name or command-line as appropriate. cvs.texi(,12700) cvs.texi(,12701) @c FIXME: need an example. In particular, show what cvs.texi(,12702) @c the regular expression is matched against (one cvs.texi(,12703) @c ordinarily clueful person got confused about whether it cvs.texi(,12704) @c includes the filename--"directory name" above should be cvs.texi(,12705) @c unambiguous but there is nothing like an example to cvs.texi(,12706) @c confirm people's understanding of this sort of thing). cvs.texi(,12707) cvs.texi(,12708) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,12709) @node commitinfo cvs.texi(,12710) @appendixsubsec Commitinfo cvs.texi(,12711) @cindex @file{commitinfo} cvs.texi(,12712) @cindex Commits, precommit verification of cvs.texi(,12713) @cindex Precommit checking cvs.texi(,12714) cvs.texi(,12715) The @file{commitinfo} file defines programs to execute cvs.texi(,12716) whenever @samp{cvs commit} is about to execute. These cvs.texi(,12717) programs are used for pre-commit checking to verify cvs.texi(,12718) that the modified, added and removed files are really cvs.texi(,12719) ready to be committed. This could be used, for cvs.texi(,12720) instance, to verify that the changed files conform to cvs.texi(,12721) to your site's standards for coding practice. cvs.texi(,12722) cvs.texi(,12723) As mentioned earlier, each line in the cvs.texi(,12724) @file{commitinfo} file consists of a regular expression cvs.texi(,12725) and a command-line template. The template can include cvs.texi(,12726) a program name and any number of arguments you wish to cvs.texi(,12727) supply to it. The full path to the current source cvs.texi(,12728) repository is appended to the template, followed by the cvs.texi(,12729) file names of any files involved in the commit (added, cvs.texi(,12730) removed, and modified files). cvs.texi(,12731) cvs.texi(,12732) @cindex Exit status, of commitinfo cvs.texi(,12733) The first line with a regular expression matching the cvs.texi(,12734) directory within the repository will be used. If the cvs.texi(,12735) command returns a non-zero exit status the commit will cvs.texi(,12736) be aborted. cvs.texi(,12737) @c FIXME: need example(s) of what "directory within the cvs.texi(,12738) @c repository" means. cvs.texi(,12739) cvs.texi(,12740) @cindex DEFAULT in commitinfo cvs.texi(,12741) If the repository name does not match any of the cvs.texi(,12742) regular expressions in this file, the @samp{DEFAULT} cvs.texi(,12743) line is used, if it is specified. cvs.texi(,12744) cvs.texi(,12745) @cindex ALL in commitinfo cvs.texi(,12746) All occurrences of the name @samp{ALL} appearing as a cvs.texi(,12747) regular expression are used in addition to the first cvs.texi(,12748) matching regular expression or the name @samp{DEFAULT}. cvs.texi(,12749) cvs.texi(,12750) @cindex @file{commitinfo}, working directory cvs.texi(,12751) @cindex @file{commitinfo}, command environment cvs.texi(,12752) The command will be run in the root of the workspace cvs.texi(,12753) containing the new versions of any files the user would like cvs.texi(,12754) to modify (commit), @emph{or in a copy of the workspace on cvs.texi(,12755) the server (@pxref{Remote repositories})}. If a file is cvs.texi(,12756) being removed, there will be no copy of the file under the cvs.texi(,12757) current directory. If a file is being added, there will be cvs.texi(,12758) no corresponding archive file in the repository unless the cvs.texi(,12759) file is being resurrected. cvs.texi(,12760) cvs.texi(,12761) Note that both the repository directory and the corresponding cvs.texi(,12762) Attic (@pxref{Attic}) directory may need to be checked to cvs.texi(,12763) locate the archive file corresponding to any given file being cvs.texi(,12764) committed. Much of the information about the specific commit cvs.texi(,12765) request being made, including the destination branch, commit cvs.texi(,12766) message, and command line options specified, is not available cvs.texi(,12767) to the command. cvs.texi(,12768) cvs.texi(,12769) @c FIXME: should discuss using commitinfo to control cvs.texi(,12770) @c who has checkin access to what (e.g. Joe can check into cvs.texi(,12771) @c directories a, b, and c, and Mary can check into cvs.texi(,12772) @c directories b, c, and d--note this case cannot be cvs.texi(,12773) @c conveniently handled with unix groups). Of course, cvs.texi(,12774) @c adding a new set of features to CVS might be a more cvs.texi(,12775) @c natural way to fix this problem than telling people to cvs.texi(,12776) @c use commitinfo. cvs.texi(,12777) @c FIXME: Should make some reference, especially in cvs.texi(,12778) @c the context of controlling who has access, to the fact cvs.texi(,12779) @c that commitinfo can be circumvented. Perhaps cvs.texi(,12780) @c mention SETXID (but has it been carefully examined cvs.texi(,12781) @c for holes?). This fits in with the discussion of cvs.texi(,12782) @c general CVS security in "Password authentication cvs.texi(,12783) @c security" (the bit which is not pserver-specific). cvs.texi(,12784) cvs.texi(,12785) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,12786) @node verifymsg cvs.texi(,12787) @appendixsubsec Verifying log messages cvs.texi(,12788) @cindex @file{verifymsg} (admin file) cvs.texi(,12789) @cindex Log message, verifying cvs.texi(,12790) cvs.texi(,12791) Once you have entered a log message, you can evaluate cvs.texi(,12792) that message to check for specific content, such as cvs.texi(,12793) a bug ID. Use the @file{verifymsg} file to cvs.texi(,12794) specify a program that is used to verify the log message. cvs.texi(,12795) This program could be a simple script that checks cvs.texi(,12796) that the entered message contains the required fields. cvs.texi(,12797) cvs.texi(,12798) The @file{verifymsg} file is often most useful together cvs.texi(,12799) with the @file{rcsinfo} file, which can be used to cvs.texi(,12800) specify a log message template. cvs.texi(,12801) cvs.texi(,12802) Each line in the @file{verifymsg} file consists of a cvs.texi(,12803) regular expression and a command-line template. The cvs.texi(,12804) template must include a program name, and can include cvs.texi(,12805) any number of arguments. The full path to the current cvs.texi(,12806) log message template file is appended to the template. cvs.texi(,12807) cvs.texi(,12808) One thing that should be noted is that the @samp{ALL} cvs.texi(,12809) keyword is not supported. If more than one matching cvs.texi(,12810) line is found, the first one is used. This can be cvs.texi(,12811) useful for specifying a default verification script in a cvs.texi(,12812) directory, and then overriding it in a subdirectory. cvs.texi(,12813) cvs.texi(,12814) @cindex DEFAULT in @file{verifymsg} cvs.texi(,12815) If the repository name does not match any of the cvs.texi(,12816) regular expressions in this file, the @samp{DEFAULT} cvs.texi(,12817) line is used, if it is specified. cvs.texi(,12818) cvs.texi(,12819) @cindex Exit status, of @file{verifymsg} cvs.texi(,12820) If the verification script exits with a non-zero exit status, cvs.texi(,12821) the commit is aborted. cvs.texi(,12822) cvs.texi(,12823) @cindex @file{verifymsg}, changing the log message cvs.texi(,12824) In the default configuration, CVS allows the cvs.texi(,12825) verification script to change the log message. This is cvs.texi(,12826) controlled via the RereadLogAfterVerify CVSROOT/config cvs.texi(,12827) option. cvs.texi(,12828) cvs.texi(,12829) When @samp{RereadLogAfterVerify=always} or cvs.texi(,12830) @samp{RereadLogAfterVerify=stat}, the log message will cvs.texi(,12831) either always be reread after the verification script cvs.texi(,12832) is run or reread only if the log message file status cvs.texi(,12833) has changed. cvs.texi(,12834) cvs.texi(,12835) @xref{config}, for more on CVSROOT/config options. cvs.texi(,12836) cvs.texi(,12837) It is NOT a good idea for a @file{verifymsg} script to cvs.texi(,12838) interact directly with the user in the various cvs.texi(,12839) client/server methods. For the @code{pserver} method, cvs.texi(,12840) there is no protocol support for communicating between cvs.texi(,12841) @file{verifymsg} and the client on the remote end. For the cvs.texi(,12842) @code{ext} and @code{server} methods, it is possible cvs.texi(,12843) for CVS to become confused by the characters going cvs.texi(,12844) along the same channel as the CVS protocol cvs.texi(,12845) messages. See @ref{Remote repositories}, for more cvs.texi(,12846) information on client/server setups. In addition, at the time cvs.texi(,12847) the @file{verifymsg} script runs, the CVS cvs.texi(,12848) server has locks in place in the repository. If control is cvs.texi(,12849) returned to the user here then other users may be stuck waiting cvs.texi(,12850) for access to the repository. cvs.texi(,12851) cvs.texi(,12852) This option can be useful if you find yourself using an cvs.texi(,12853) rcstemplate that needs to be modified to remove empty cvs.texi(,12854) elements or to fill in default values. It can also be cvs.texi(,12855) useful if the rcstemplate has changed in the repository cvs.texi(,12856) and the CVS/Template was not updated, but is able to be cvs.texi(,12857) adapted to the new format by the verification script cvs.texi(,12858) that is run by @file{verifymsg}. cvs.texi(,12859) cvs.texi(,12860) An example of an update might be to change all cvs.texi(,12861) occurrences of 'BugId:' to be 'DefectId:' (which can be cvs.texi(,12862) useful if the rcstemplate has recently been changed and cvs.texi(,12863) there are still checked-out user trees with cached cvs.texi(,12864) copies in the CVS/Template file of the older version). cvs.texi(,12865) cvs.texi(,12866) Another example of an update might be to delete a line cvs.texi(,12867) that contains 'BugID: none' from the log message after cvs.texi(,12868) validation of that value as being allowed is made. cvs.texi(,12869) cvs.texi(,12870) The following is a little silly example of a cvs.texi(,12871) @file{verifymsg} file, together with the corresponding cvs.texi(,12872) @file{rcsinfo} file, the log message template and an cvs.texi(,12873) verification script. We begin with the log message template. cvs.texi(,12874) We want to always record a bug-id number on the first cvs.texi(,12875) line of the log message. The rest of log message is cvs.texi(,12876) free text. The following template is found in the file cvs.texi(,12877) @file{/usr/cvssupport/tc.template}. cvs.texi(,12878) cvs.texi(,12879) @example cvs.texi(,12880) BugId: cvs.texi(,12881) @end example cvs.texi(,12882) cvs.texi(,12883) The script @file{/usr/cvssupport/bugid.verify} is used to cvs.texi(,12884) evaluate the log message. cvs.texi(,12885) cvs.texi(,12886) @example cvs.texi(,12887) #!/bin/sh cvs.texi(,12888) # cvs.texi(,12889) # bugid.verify filename cvs.texi(,12890) # cvs.texi(,12891) # Verify that the log message contains a valid bugid cvs.texi(,12892) # on the first line. cvs.texi(,12893) # cvs.texi(,12894) if head -1 < $1 | grep '^BugId:[ ]*[0-9][0-9]*$' > /dev/null; then cvs.texi(,12895) exit 0 cvs.texi(,12896) elif head -1 < $1 | grep '^BugId:[ ]*none$' > /dev/null; then cvs.texi(,12897) # It is okay to allow commits with 'BugId: none', cvs.texi(,12898) # but do not put that text into the real log message. cvs.texi(,12899) grep -v '^BugId:[ ]*none$' > $1.rewrite cvs.texi(,12900) mv $1.rewrite $1 cvs.texi(,12901) exit 0 cvs.texi(,12902) else cvs.texi(,12903) echo "No BugId found." cvs.texi(,12904) exit 1 cvs.texi(,12905) fi cvs.texi(,12906) @end example cvs.texi(,12907) cvs.texi(,12908) The @file{verifymsg} file contains this line: cvs.texi(,12909) cvs.texi(,12910) @example cvs.texi(,12911) ^tc /usr/cvssupport/bugid.verify cvs.texi(,12912) @end example cvs.texi(,12913) cvs.texi(,12914) The @file{rcsinfo} file contains this line: cvs.texi(,12915) cvs.texi(,12916) @example cvs.texi(,12917) ^tc /usr/cvssupport/tc.template cvs.texi(,12918) @end example cvs.texi(,12919) cvs.texi(,12920) The @file{config} file contains this line: cvs.texi(,12921) cvs.texi(,12922) @example cvs.texi(,12923) RereadLogAfterVerify=always cvs.texi(,12924) @end example cvs.texi(,12925) cvs.texi(,12926) cvs.texi(,12927) cvs.texi(,12928) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,12929) @node editinfo cvs.texi(,12930) @appendixsubsec Editinfo cvs.texi(,12931) @cindex editinfo (admin file) cvs.texi(,12932) @cindex Editor, specifying per module cvs.texi(,12933) @cindex Per-module editor cvs.texi(,12934) @cindex Log messages, editing cvs.texi(,12935) cvs.texi(,12936) @strong{Note: The @file{editinfo} feature has been cvs.texi(,12937) rendered obsolete. To set a default editor for log cvs.texi(,12938) messages use the @code{CVSEDITOR}, @code{EDITOR} environment variables cvs.texi(,12939) (@pxref{Environment variables}) or the @samp{-e} global cvs.texi(,12940) option (@pxref{Global options}). See @ref{verifymsg}, cvs.texi(,12941) for information on the use of the @file{verifymsg} cvs.texi(,12942) feature for evaluating log messages.} cvs.texi(,12943) cvs.texi(,12944) If you want to make sure that all log messages look the cvs.texi(,12945) same way, you can use the @file{editinfo} file to cvs.texi(,12946) specify a program that is used to edit the log message. cvs.texi(,12947) This program could be a custom-made editor that always cvs.texi(,12948) enforces a certain style of the log message, or maybe a cvs.texi(,12949) simple shell script that calls an editor, and checks cvs.texi(,12950) that the entered message contains the required fields. cvs.texi(,12951) cvs.texi(,12952) If no matching line is found in the @file{editinfo} cvs.texi(,12953) file, the editor specified in the environment variable cvs.texi(,12954) @code{$CVSEDITOR} is used instead. If that variable is cvs.texi(,12955) not set, then the environment variable @code{$EDITOR} cvs.texi(,12956) is used instead. If that variable is not cvs.texi(,12957) set a default will be used. See @ref{Committing your changes}. cvs.texi(,12958) cvs.texi(,12959) The @file{editinfo} file is often most useful together cvs.texi(,12960) with the @file{rcsinfo} file, which can be used to cvs.texi(,12961) specify a log message template. cvs.texi(,12962) cvs.texi(,12963) Each line in the @file{editinfo} file consists of a cvs.texi(,12964) regular expression and a command-line template. The cvs.texi(,12965) template must include a program name, and can include cvs.texi(,12966) any number of arguments. The full path to the current cvs.texi(,12967) log message template file is appended to the template. cvs.texi(,12968) cvs.texi(,12969) One thing that should be noted is that the @samp{ALL} cvs.texi(,12970) keyword is not supported. If more than one matching cvs.texi(,12971) line is found, the first one is used. This can be cvs.texi(,12972) useful for specifying a default edit script in a cvs.texi(,12973) module, and then overriding it in a subdirectory. cvs.texi(,12974) cvs.texi(,12975) @cindex DEFAULT in editinfo cvs.texi(,12976) If the repository name does not match any of the cvs.texi(,12977) regular expressions in this file, the @samp{DEFAULT} cvs.texi(,12978) line is used, if it is specified. cvs.texi(,12979) cvs.texi(,12980) If the edit script exits with a non-zero exit status, cvs.texi(,12981) the commit is aborted. cvs.texi(,12982) cvs.texi(,12983) Note: when @sc{cvs} is accessing a remote repository, cvs.texi(,12984) or when the @samp{-m} or @samp{-F} options to @code{cvs cvs.texi(,12985) commit} are used, @file{editinfo} will not be consulted. cvs.texi(,12986) There is no good workaround for this; use cvs.texi(,12987) @file{verifymsg} instead. cvs.texi(,12988) cvs.texi(,12989) @menu cvs.texi(,12990) * editinfo example:: Editinfo example cvs.texi(,12991) @end menu cvs.texi(,12992) cvs.texi(,12993) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,12994) @node editinfo example cvs.texi(,12995) @appendixsubsubsec Editinfo example cvs.texi(,12996) cvs.texi(,12997) The following is a little silly example of a cvs.texi(,12998) @file{editinfo} file, together with the corresponding cvs.texi(,12999) @file{rcsinfo} file, the log message template and an cvs.texi(,13000) editor script. We begin with the log message template. cvs.texi(,13001) We want to always record a bug-id number on the first cvs.texi(,13002) line of the log message. The rest of log message is cvs.texi(,13003) free text. The following template is found in the file cvs.texi(,13004) @file{/usr/cvssupport/tc.template}. cvs.texi(,13005) cvs.texi(,13006) @example cvs.texi(,13007) BugId: cvs.texi(,13008) @end example cvs.texi(,13009) cvs.texi(,13010) The script @file{/usr/cvssupport/bugid.edit} is used to cvs.texi(,13011) edit the log message. cvs.texi(,13012) cvs.texi(,13013) @example cvs.texi(,13014) #!/bin/sh cvs.texi(,13015) # cvs.texi(,13016) # bugid.edit filename cvs.texi(,13017) # cvs.texi(,13018) # Call $EDITOR on FILENAME, and verify that the cvs.texi(,13019) # resulting file contains a valid bugid on the first cvs.texi(,13020) # line. cvs.texi(,13021) if [ "x$EDITOR" = "x" ]; then EDITOR=vi; fi cvs.texi(,13022) if [ "x$CVSEDITOR" = "x" ]; then CVSEDITOR=$EDITOR; fi cvs.texi(,13023) $CVSEDITOR $1 cvs.texi(,13024) until head -1|grep '^BugId:[ ]*[0-9][0-9]*$' < $1 cvs.texi(,13025) do echo -n "No BugId found. Edit again? ([y]/n)" cvs.texi(,13026) read ans cvs.texi(,13027) case $@{ans@} in cvs.texi(,13028) n*) exit 1;; cvs.texi(,13029) esac cvs.texi(,13030) $CVSEDITOR $1 cvs.texi(,13031) done cvs.texi(,13032) @end example cvs.texi(,13033) cvs.texi(,13034) The @file{editinfo} file contains this line: cvs.texi(,13035) cvs.texi(,13036) @example cvs.texi(,13037) ^tc /usr/cvssupport/bugid.edit cvs.texi(,13038) @end example cvs.texi(,13039) cvs.texi(,13040) The @file{rcsinfo} file contains this line: cvs.texi(,13041) cvs.texi(,13042) @example cvs.texi(,13043) ^tc /usr/cvssupport/tc.template cvs.texi(,13044) @end example cvs.texi(,13045) cvs.texi(,13046) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,13047) @node loginfo cvs.texi(,13048) @appendixsubsec Loginfo cvs.texi(,13049) @cindex loginfo (admin file) cvs.texi(,13050) @cindex Storing log messages cvs.texi(,13051) @cindex Mailing log messages cvs.texi(,13052) @cindex Distributing log messages cvs.texi(,13053) @cindex Log messages cvs.texi(,13054) cvs.texi(,13055) @c "cvs commit" is not quite right. What we cvs.texi(,13056) @c mean is "when the repository gets changed" which cvs.texi(,13057) @c also includes "cvs import" and "cvs add" on a directory. cvs.texi(,13058) The @file{loginfo} file is used to control where cvs.texi(,13059) @samp{cvs commit} log information is sent. The first cvs.texi(,13060) entry on a line is a regular expression which is tested cvs.texi(,13061) against the directory that the change is being made to, cvs.texi(,13062) relative to the @code{$CVSROOT}. If a match is found, then cvs.texi(,13063) the remainder of the line is a filter program that cvs.texi(,13064) should expect log information on its standard input. cvs.texi(,13065) cvs.texi(,13066) If the repository name does not match any of the cvs.texi(,13067) regular expressions in this file, the @samp{DEFAULT} cvs.texi(,13068) line is used, if it is specified. cvs.texi(,13069) cvs.texi(,13070) All occurrences of the name @samp{ALL} appearing as a cvs.texi(,13071) regular expression are used in addition to the first cvs.texi(,13072) matching regular expression or @samp{DEFAULT}. cvs.texi(,13073) cvs.texi(,13074) The first matching regular expression is used. cvs.texi(,13075) cvs.texi(,13076) @xref{commit files}, for a description of the syntax of cvs.texi(,13077) the @file{loginfo} file. cvs.texi(,13078) cvs.texi(,13079) The user may specify a format string as cvs.texi(,13080) part of the filter. The string is composed of a cvs.texi(,13081) @samp{%} followed by a space, or followed by a single cvs.texi(,13082) format character, or followed by a set of format cvs.texi(,13083) characters surrounded by @samp{@{} and @samp{@}} as cvs.texi(,13084) separators. The format characters are: cvs.texi(,13085) cvs.texi(,13086) @table @t cvs.texi(,13087) @item s cvs.texi(,13088) file name cvs.texi(,13089) @item V cvs.texi(,13090) old version number (pre-checkin) cvs.texi(,13091) @item v cvs.texi(,13092) new version number (post-checkin) cvs.texi(,13093) @end table cvs.texi(,13094) cvs.texi(,13095) All other characters that appear in a format string cvs.texi(,13096) expand to an empty field (commas separating fields are cvs.texi(,13097) still provided). cvs.texi(,13098) cvs.texi(,13099) For example, some valid format strings are @samp{%}, cvs.texi(,13100) @samp{%s}, @samp{%@{s@}}, and @samp{%@{sVv@}}. cvs.texi(,13101) cvs.texi(,13102) The output will be a space separated string of tokens enclosed in cvs.texi(,13103) quotation marks (@t{"}). cvs.texi(,13104) Any embedded dollar signs (@t{$}), backticks (@t{`}), cvs.texi(,13105) backslashes (@t{\}), or quotation marks will be preceded cvs.texi(,13106) by a backslash (this allows the shell to correctly parse it cvs.texi(,13107) as a single string, regardless of the characters it contains). cvs.texi(,13108) For backwards compatibility, the first cvs.texi(,13109) token will be the repository subdirectory. The rest of the cvs.texi(,13110) tokens will be comma-delimited lists of the information cvs.texi(,13111) requested in the format string. For example, if cvs.texi(,13112) @samp{/u/src/master/yoyodyne/tc} is the repository, @samp{%@{sVv@}} cvs.texi(,13113) is the format string, and three files (@t{ChangeLog}, cvs.texi(,13114) @t{Makefile}, @t{foo.c}) were modified, the output cvs.texi(,13115) might be: cvs.texi(,13116) cvs.texi(,13117) @example cvs.texi(,13118) "yoyodyne/tc ChangeLog,1.1,1.2 Makefile,1.3,1.4 foo.c,1.12,1.13" cvs.texi(,13119) @end example cvs.texi(,13120) cvs.texi(,13121) As another example, @samp{%@{@}} means that only the cvs.texi(,13122) name of the repository will be generated. cvs.texi(,13123) cvs.texi(,13124) Note: when @sc{cvs} is accessing a remote repository, cvs.texi(,13125) @file{loginfo} will be run on the @emph{remote} cvs.texi(,13126) (i.e., server) side, not the client side (@pxref{Remote cvs.texi(,13127) repositories}). cvs.texi(,13128) cvs.texi(,13129) @menu cvs.texi(,13130) * loginfo example:: Loginfo example cvs.texi(,13131) * Keeping a checked out copy:: Updating a tree on every checkin cvs.texi(,13132) @end menu cvs.texi(,13133) cvs.texi(,13134) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,13135) @node loginfo example cvs.texi(,13136) @appendixsubsubsec Loginfo example cvs.texi(,13137) cvs.texi(,13138) The following @file{loginfo} file, together with the cvs.texi(,13139) tiny shell-script below, appends all log messages cvs.texi(,13140) to the file @file{$CVSROOT/CVSROOT/commitlog}, cvs.texi(,13141) and any commits to the administrative files (inside cvs.texi(,13142) the @file{CVSROOT} directory) are also logged in cvs.texi(,13143) @file{/usr/adm/cvsroot-log}. cvs.texi(,13144) Commits to the @file{prog1} directory are mailed to @t{ceder}. cvs.texi(,13145) cvs.texi(,13146) @c FIXME: is it a CVS feature or bug that only the cvs.texi(,13147) @c first matching line is used? It is documented cvs.texi(,13148) @c above, but is it useful? For example, if we wanted cvs.texi(,13149) @c to run both "cvs-log" and "Mail" for the CVSROOT cvs.texi(,13150) @c directory, it is kind of awkward if cvs.texi(,13151) @c only the first matching line is used. cvs.texi(,13152) @example cvs.texi(,13153) ALL /usr/local/bin/cvs-log $CVSROOT/CVSROOT/commitlog $USER cvs.texi(,13154) ^CVSROOT /usr/local/bin/cvs-log /usr/adm/cvsroot-log cvs.texi(,13155) ^prog1 Mail -s %s ceder cvs.texi(,13156) @end example cvs.texi(,13157) cvs.texi(,13158) The shell-script @file{/usr/local/bin/cvs-log} looks cvs.texi(,13159) like this: cvs.texi(,13160) cvs.texi(,13161) @example cvs.texi(,13162) #!/bin/sh cvs.texi(,13163) (echo "------------------------------------------------------"; cvs.texi(,13164) echo -n $2" "; cvs.texi(,13165) date; cvs.texi(,13166) echo; cvs.texi(,13167) cat) >> $1 cvs.texi(,13168) @end example cvs.texi(,13169) cvs.texi(,13170) @node Keeping a checked out copy cvs.texi(,13171) @appendixsubsubsec Keeping a checked out copy cvs.texi(,13172) cvs.texi(,13173) @c What other index entries? It seems like cvs.texi(,13174) @c people might want to use a lot of different cvs.texi(,13175) @c words for this functionality. cvs.texi(,13176) @cindex Keeping a checked out copy cvs.texi(,13177) @cindex Checked out copy, keeping cvs.texi(,13178) @cindex Web pages, maintaining with CVS cvs.texi(,13179) cvs.texi(,13180) It is often useful to maintain a directory tree which cvs.texi(,13181) contains files which correspond to the latest version cvs.texi(,13182) in the repository. For example, other developers might cvs.texi(,13183) want to refer to the latest sources without having to cvs.texi(,13184) check them out, or you might be maintaining a web site cvs.texi(,13185) with @sc{cvs} and want every checkin to cause the files cvs.texi(,13186) used by the web server to be updated. cvs.texi(,13187) @c Can we offer more details on the web example? Or cvs.texi(,13188) @c point the user at how to figure it out? This text cvs.texi(,13189) @c strikes me as sufficient for someone who already has cvs.texi(,13190) @c some idea of what we mean but not enough for the naive cvs.texi(,13191) @c user/sysadmin to understand it and set it up. cvs.texi(,13192) cvs.texi(,13193) The way to do this is by having loginfo invoke cvs.texi(,13194) @code{cvs update}. Doing so in the naive way will cvs.texi(,13195) cause a problem with locks, so the @code{cvs update} cvs.texi(,13196) must be run in the background. cvs.texi(,13197) @c Should we try to describe the problem with locks? cvs.texi(,13198) @c It seems like a digression for someone who just cvs.texi(,13199) @c wants to know how to make it work. cvs.texi(,13200) @c Another choice which might work for a single file cvs.texi(,13201) @c is to use "cvs -n update -p" which doesn't take cvs.texi(,13202) @c out locks (I think) but I don't see many advantages cvs.texi(,13203) @c of that and we might as well document something which cvs.texi(,13204) @c works for multiple files. cvs.texi(,13205) Here is an example for unix (this should all be on one line): cvs.texi(,13206) cvs.texi(,13207) @example cvs.texi(,13208) ^cyclic-pages (date; cat; (sleep 2; cd /u/www/local-docs; cvs.texi(,13209) cvs -q update -d) &) >> $CVSROOT/CVSROOT/updatelog 2>&1 cvs.texi(,13210) @end example cvs.texi(,13211) cvs.texi(,13212) This will cause checkins to repository directories cvs.texi(,13213) starting with @code{cyclic-pages} to update the checked cvs.texi(,13214) out tree in @file{/u/www/local-docs}. cvs.texi(,13215) @c More info on some of the details? The "sleep 2" is cvs.texi(,13216) @c so if we are lucky the lock will be gone by the time cvs.texi(,13217) @c we start and we can wait 2 seconds instead of 30. cvs.texi(,13218) cvs.texi(,13219) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,13220) @node rcsinfo cvs.texi(,13221) @appendixsec Rcsinfo cvs.texi(,13222) @cindex rcsinfo (admin file) cvs.texi(,13223) @cindex Form for log message cvs.texi(,13224) @cindex Log message template cvs.texi(,13225) @cindex Template for log message cvs.texi(,13226) cvs.texi(,13227) The @file{rcsinfo} file can be used to specify a form to cvs.texi(,13228) edit when filling out the commit log. The cvs.texi(,13229) @file{rcsinfo} file has a syntax similar to the cvs.texi(,13230) @file{verifymsg}, @file{commitinfo} and @file{loginfo} cvs.texi(,13231) files. @xref{syntax}. Unlike the other files the second cvs.texi(,13232) part is @emph{not} a command-line template. Instead, cvs.texi(,13233) the part after the regular expression should be a full pathname to cvs.texi(,13234) a file containing the log message template. cvs.texi(,13235) cvs.texi(,13236) If the repository name does not match any of the cvs.texi(,13237) regular expressions in this file, the @samp{DEFAULT} cvs.texi(,13238) line is used, if it is specified. cvs.texi(,13239) cvs.texi(,13240) All occurrences of the name @samp{ALL} appearing as a cvs.texi(,13241) regular expression are used in addition to the first cvs.texi(,13242) matching regular expression or @samp{DEFAULT}. cvs.texi(,13243) cvs.texi(,13244) @c FIXME: should be offering advice, somewhere around cvs.texi(,13245) @c here, about where to put the template file. The cvs.texi(,13246) @c verifymsg example uses /usr/cvssupport but doesn't cvs.texi(,13247) @c say anything about what that directory is for or cvs.texi(,13248) @c whether it is hardwired into CVS or who creates cvs.texi(,13249) @c it or anything. In particular we should say cvs.texi(,13250) @c how to version control the template file. A cvs.texi(,13251) @c probably better answer than the /usr/cvssupport cvs.texi(,13252) @c stuff is to use checkoutlist (with xref to the cvs.texi(,13253) @c checkoutlist doc). cvs.texi(,13254) @c Also I am starting to see a connection between cvs.texi(,13255) @c this and the Keeping a checked out copy node. cvs.texi(,13256) @c Probably want to say something about that. cvs.texi(,13257) The log message template will be used as a default log cvs.texi(,13258) message. If you specify a log message with @samp{cvs cvs.texi(,13259) commit -m @var{message}} or @samp{cvs commit -f cvs.texi(,13260) @var{file}} that log message will override the cvs.texi(,13261) template. cvs.texi(,13262) cvs.texi(,13263) @xref{verifymsg}, for an example @file{rcsinfo} cvs.texi(,13264) file. cvs.texi(,13265) cvs.texi(,13266) When @sc{cvs} is accessing a remote repository, cvs.texi(,13267) the contents of @file{rcsinfo} at the time a directory cvs.texi(,13268) is first checked out will specify a template. This cvs.texi(,13269) template will be updated on all @samp{cvs update} cvs.texi(,13270) commands. It will also be added to new directories cvs.texi(,13271) added with a @samp{cvs add new-directry} command. cvs.texi(,13272) In versions of @sc{cvs} prior to version 1.12, the cvs.texi(,13273) @file{CVS/Template} file was not updated. If the cvs.texi(,13274) @sc{cvs} server is at version 1.12 or higher an older cvs.texi(,13275) client may be used and the @file{CVS/Template} will cvs.texi(,13276) be updated from the server. cvs.texi(,13277) cvs.texi(,13278) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,13279) @node cvsignore cvs.texi(,13280) @appendixsec Ignoring files via cvsignore cvs.texi(,13281) @cindex cvsignore (admin file), global cvs.texi(,13282) @cindex Global cvsignore cvs.texi(,13283) @cindex Ignoring files cvs.texi(,13284) @c -- This chapter should maybe be moved to the cvs.texi(,13285) @c tutorial part of the manual? cvs.texi(,13286) cvs.texi(,13287) There are certain file names that frequently occur cvs.texi(,13288) inside your working copy, but that you don't want to cvs.texi(,13289) put under @sc{cvs} control. Examples are all the object cvs.texi(,13290) files that you get while you compile your sources. cvs.texi(,13291) Normally, when you run @samp{cvs update}, it prints a cvs.texi(,13292) line for each file it encounters that it doesn't know cvs.texi(,13293) about (@pxref{update output}). cvs.texi(,13294) cvs.texi(,13295) @sc{cvs} has a list of files (or sh(1) file name patterns) cvs.texi(,13296) that it should ignore while running @code{update}, cvs.texi(,13297) @code{import} and @code{release}. cvs.texi(,13298) @c -- Are those the only three commands affected? cvs.texi(,13299) This list is constructed in the following way. cvs.texi(,13300) cvs.texi(,13301) @itemize @bullet cvs.texi(,13302) @item cvs.texi(,13303) The list is initialized to include certain file name cvs.texi(,13304) patterns: names associated with @sc{cvs} cvs.texi(,13305) administration, or with other common source control cvs.texi(,13306) systems; common names for patch files, object files, cvs.texi(,13307) archive files, and editor backup files; and other names cvs.texi(,13308) that are usually artifacts of assorted utilities. cvs.texi(,13309) Currently, the default list of ignored file name cvs.texi(,13310) patterns is: cvs.texi(,13311) cvs.texi(,13312) @cindex Ignored files cvs.texi(,13313) @cindex Automatically ignored files cvs.texi(,13314) @example cvs.texi(,13315) RCS SCCS CVS CVS.adm cvs.texi(,13316) RCSLOG cvslog.* cvs.texi(,13317) tags TAGS cvs.texi(,13318) .make.state .nse_depinfo cvs.texi(,13319) *~ #* .#* ,* _$* *$ cvs.texi(,13320) *.old *.bak *.BAK *.orig *.rej .del-* cvs.texi(,13321) *.a *.olb *.o *.obj *.so *.exe cvs.texi(,13322) *.Z *.elc *.ln cvs.texi(,13323) core cvs.texi(,13324) @end example cvs.texi(,13325) cvs.texi(,13326) @item cvs.texi(,13327) The per-repository list in cvs.texi(,13328) @file{$CVSROOT/CVSROOT/cvsignore} is appended to cvs.texi(,13329) the list, if that file exists. cvs.texi(,13330) cvs.texi(,13331) @item cvs.texi(,13332) The per-user list in @file{.cvsignore} in your home cvs.texi(,13333) directory is appended to the list, if it exists. cvs.texi(,13334) cvs.texi(,13335) @item cvs.texi(,13336) Any entries in the environment variable cvs.texi(,13337) @code{$CVSIGNORE} is appended to the list. cvs.texi(,13338) cvs.texi(,13339) @item cvs.texi(,13340) Any @samp{-I} options given to @sc{cvs} is appended. cvs.texi(,13341) cvs.texi(,13342) @item cvs.texi(,13343) As @sc{cvs} traverses through your directories, the contents cvs.texi(,13344) of any @file{.cvsignore} will be appended to the list. cvs.texi(,13345) The patterns found in @file{.cvsignore} are only valid cvs.texi(,13346) for the directory that contains them, not for cvs.texi(,13347) any sub-directories. cvs.texi(,13348) @end itemize cvs.texi(,13349) cvs.texi(,13350) In any of the 5 places listed above, a single cvs.texi(,13351) exclamation mark (@samp{!}) clears the ignore list. cvs.texi(,13352) This can be used if you want to store any file which cvs.texi(,13353) normally is ignored by @sc{cvs}. cvs.texi(,13354) cvs.texi(,13355) Specifying @samp{-I !} to @code{cvs import} will import cvs.texi(,13356) everything, which is generally what you want to do if cvs.texi(,13357) you are importing files from a pristine distribution or cvs.texi(,13358) any other source which is known to not contain any cvs.texi(,13359) extraneous files. However, looking at the rules above cvs.texi(,13360) you will see there is a fly in the ointment; if the cvs.texi(,13361) distribution contains any @file{.cvsignore} files, then cvs.texi(,13362) the patterns from those files will be processed even if cvs.texi(,13363) @samp{-I !} is specified. The only workaround is to cvs.texi(,13364) remove the @file{.cvsignore} files in order to do the cvs.texi(,13365) import. Because this is awkward, in the future cvs.texi(,13366) @samp{-I !} might be modified to override cvs.texi(,13367) @file{.cvsignore} files in each directory. cvs.texi(,13368) cvs.texi(,13369) Note that the syntax of the ignore files consists of a cvs.texi(,13370) series of lines, each of which contains a space cvs.texi(,13371) separated list of filenames. This offers no clean way cvs.texi(,13372) to specify filenames which contain spaces, but you can cvs.texi(,13373) use a workaround like @file{foo?bar} to match a file cvs.texi(,13374) named @file{foo bar} (it also matches @file{fooxbar} cvs.texi(,13375) and the like). Also note that there is currently no cvs.texi(,13376) way to specify comments. cvs.texi(,13377) @c FIXCVS? I don't _like_ this syntax at all, but cvs.texi(,13378) @c changing it raises all the usual compatibility cvs.texi(,13379) @c issues and I'm also not sure what to change it to. cvs.texi(,13380) cvs.texi(,13381) @node checkoutlist cvs.texi(,13382) @appendixsec The checkoutlist file cvs.texi(,13383) @cindex checkoutlist cvs.texi(,13384) cvs.texi(,13385) It may be helpful to use @sc{cvs} to maintain your own cvs.texi(,13386) files in the @file{CVSROOT} directory. For example, cvs.texi(,13387) suppose that you have a script @file{logcommit.pl} cvs.texi(,13388) which you run by including the following line in the cvs.texi(,13389) @file{commitinfo} administrative file: cvs.texi(,13390) cvs.texi(,13391) @example cvs.texi(,13392) ALL $CVSROOT/CVSROOT/logcommit.pl cvs.texi(,13393) @end example cvs.texi(,13394) cvs.texi(,13395) To maintain @file{logcommit.pl} with @sc{cvs} you would cvs.texi(,13396) add the following line to the @file{checkoutlist} cvs.texi(,13397) administrative file: cvs.texi(,13398) cvs.texi(,13399) @example cvs.texi(,13400) logcommit.pl cvs.texi(,13401) @end example cvs.texi(,13402) cvs.texi(,13403) The format of @file{checkoutlist} is one line for each cvs.texi(,13404) file that you want to maintain using @sc{cvs}, giving cvs.texi(,13405) the name of the file. cvs.texi(,13406) cvs.texi(,13407) After setting up @file{checkoutlist} in this fashion, cvs.texi(,13408) the files listed there will function just like cvs.texi(,13409) @sc{cvs}'s built-in administrative files. For example, cvs.texi(,13410) when checking in one of the files you should get a cvs.texi(,13411) message such as: cvs.texi(,13412) cvs.texi(,13413) @example cvs.texi(,13414) cvs commit: Rebuilding administrative file database cvs.texi(,13415) @end example cvs.texi(,13416) cvs.texi(,13417) @noindent cvs.texi(,13418) and the checked out copy in the @file{CVSROOT} cvs.texi(,13419) directory should be updated. cvs.texi(,13420) cvs.texi(,13421) Note that listing @file{passwd} (@pxref{Password cvs.texi(,13422) authentication server}) in @file{checkoutlist} is not cvs.texi(,13423) recommended for security reasons. cvs.texi(,13424) cvs.texi(,13425) For information about keeping a checkout out copy in a cvs.texi(,13426) more general context than the one provided by cvs.texi(,13427) @file{checkoutlist}, see @ref{Keeping a checked out cvs.texi(,13428) copy}. cvs.texi(,13429) cvs.texi(,13430) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,13431) @node history file cvs.texi(,13432) @appendixsec The history file cvs.texi(,13433) @cindex History file cvs.texi(,13434) @cindex Log information, saving cvs.texi(,13435) cvs.texi(,13436) The file @file{$CVSROOT/CVSROOT/history} is used cvs.texi(,13437) to log information for the @code{history} command cvs.texi(,13438) (@pxref{history}). This file must be created to turn cvs.texi(,13439) on logging. This is done automatically if the cvs.texi(,13440) @code{cvs init} command is used to set up the cvs.texi(,13441) repository (@pxref{Creating a repository}). cvs.texi(,13442) cvs.texi(,13443) The file format of the @file{history} file is cvs.texi(,13444) documented only in comments in the @sc{cvs} source cvs.texi(,13445) code, but generally programs should use the @code{cvs cvs.texi(,13446) history} command to access it anyway, in case the cvs.texi(,13447) format changes with future releases of @sc{cvs}. cvs.texi(,13448) cvs.texi(,13449) @node Variables cvs.texi(,13450) @appendixsec Expansions in administrative files cvs.texi(,13451) @cindex Internal variables cvs.texi(,13452) @cindex Variables cvs.texi(,13453) cvs.texi(,13454) Sometimes in writing an administrative file, you might cvs.texi(,13455) want the file to be able to know various things based cvs.texi(,13456) on environment @sc{cvs} is running in. There are cvs.texi(,13457) several mechanisms to do that. cvs.texi(,13458) cvs.texi(,13459) To find the home directory of the user running @sc{cvs} cvs.texi(,13460) (from the @code{HOME} environment variable), use cvs.texi(,13461) @samp{~} followed by @samp{/} or the end of the line. cvs.texi(,13462) Likewise for the home directory of @var{user}, use cvs.texi(,13463) @samp{~@var{user}}. These variables are expanded on cvs.texi(,13464) the server machine, and don't get any reasonable cvs.texi(,13465) expansion if pserver (@pxref{Password authenticated}) cvs.texi(,13466) is in use; therefore user variables (see below) may be cvs.texi(,13467) a better choice to customize behavior based on the user cvs.texi(,13468) running @sc{cvs}. cvs.texi(,13469) @c Based on these limitations, should we deprecate ~? cvs.texi(,13470) @c What is it good for? Are people using it? cvs.texi(,13471) cvs.texi(,13472) One may want to know about various pieces of cvs.texi(,13473) information internal to @sc{cvs}. A @sc{cvs} internal cvs.texi(,13474) variable has the syntax @code{$@{@var{variable}@}}, cvs.texi(,13475) where @var{variable} starts with a letter and consists cvs.texi(,13476) of alphanumeric characters and @samp{_}. If the cvs.texi(,13477) character following @var{variable} is a cvs.texi(,13478) non-alphanumeric character other than @samp{_}, the cvs.texi(,13479) @samp{@{} and @samp{@}} can be omitted. The @sc{cvs} cvs.texi(,13480) internal variables are: cvs.texi(,13481) cvs.texi(,13482) @table @code cvs.texi(,13483) @item CVSROOT cvs.texi(,13484) @cindex CVSROOT, internal variable cvs.texi(,13485) This is the absolute path to the current @sc{cvs} root directory. cvs.texi(,13486) @xref{Repository}, for a description of the various cvs.texi(,13487) ways to specify this, but note that the internal cvs.texi(,13488) variable contains just the directory and not any cvs.texi(,13489) of the access method information. cvs.texi(,13490) cvs.texi(,13491) @item RCSBIN cvs.texi(,13492) @cindex RCSBIN, internal variable cvs.texi(,13493) In @sc{cvs} 1.9.18 and older, this specified the cvs.texi(,13494) directory where @sc{cvs} was looking for @sc{rcs} cvs.texi(,13495) programs. Because @sc{cvs} no longer runs @sc{rcs} cvs.texi(,13496) programs, specifying this internal variable is now an cvs.texi(,13497) error. cvs.texi(,13498) cvs.texi(,13499) @item CVSEDITOR cvs.texi(,13500) @cindex CVSEDITOR, internal variable cvs.texi(,13501) @itemx EDITOR cvs.texi(,13502) @cindex EDITOR, internal variable cvs.texi(,13503) @itemx VISUAL cvs.texi(,13504) @cindex VISUAL, internal variable cvs.texi(,13505) These all expand to the same value, which is the editor cvs.texi(,13506) that @sc{cvs} is using. @xref{Global options}, for how cvs.texi(,13507) to specify this. cvs.texi(,13508) cvs.texi(,13509) @item USER cvs.texi(,13510) @cindex USER, internal variable cvs.texi(,13511) Username of the user running @sc{cvs} (on the @sc{cvs} cvs.texi(,13512) server machine). cvs.texi(,13513) When using pserver, this is the user specified in the repository cvs.texi(,13514) specification which need not be the same as the username the cvs.texi(,13515) server is running as (@pxref{Password authentication server}). cvs.texi(,13516) Do not confuse this with the environment variable of the same name. cvs.texi(,13517) @end table cvs.texi(,13518) cvs.texi(,13519) If you want to pass a value to the administrative files cvs.texi(,13520) which the user who is running @sc{cvs} can specify, cvs.texi(,13521) use a user variable. cvs.texi(,13522) @cindex User variables cvs.texi(,13523) To expand a user variable, the cvs.texi(,13524) administrative file contains cvs.texi(,13525) @code{$@{=@var{variable}@}}. To set a user variable, cvs.texi(,13526) specify the global option @samp{-s} to @sc{cvs}, with cvs.texi(,13527) argument @code{@var{variable}=@var{value}}. It may be cvs.texi(,13528) particularly useful to specify this option via cvs.texi(,13529) @file{.cvsrc} (@pxref{~/.cvsrc}). cvs.texi(,13530) cvs.texi(,13531) For example, if you want the administrative file to cvs.texi(,13532) refer to a test directory you might create a user cvs.texi(,13533) variable @code{TESTDIR}. Then if @sc{cvs} is invoked cvs.texi(,13534) as cvs.texi(,13535) cvs.texi(,13536) @example cvs.texi(,13537) cvs -s TESTDIR=/work/local/tests cvs.texi(,13538) @end example cvs.texi(,13539) cvs.texi(,13540) @noindent cvs.texi(,13541) and the cvs.texi(,13542) administrative file contains @code{sh cvs.texi(,13543) $@{=TESTDIR@}/runtests}, then that string is expanded cvs.texi(,13544) to @code{sh /work/local/tests/runtests}. cvs.texi(,13545) cvs.texi(,13546) All other strings containing @samp{$} are reserved; cvs.texi(,13547) there is no way to quote a @samp{$} character so that cvs.texi(,13548) @samp{$} represents itself. cvs.texi(,13549) cvs.texi(,13550) Environment variables passed to administrative files are: cvs.texi(,13551) cvs.texi(,13552) @table @code cvs.texi(,13553) @cindex environment variables, passed to administrative files cvs.texi(,13554) cvs.texi(,13555) @item CVS_USER cvs.texi(,13556) @cindex CVS_USER, environment variable cvs.texi(,13557) The @sc{cvs}-specific username provided by the user, if it cvs.texi(,13558) can be provided (currently just for the pserver access cvs.texi(,13559) method), and to the empty string otherwise. (@code{CVS_USER} cvs.texi(,13560) and @code{USER} may differ when @file{$CVSROOT/CVSROOT/passwd} cvs.texi(,13561) is used to map @sc{cvs} usernames to system usernames.) cvs.texi(,13562) cvs.texi(,13563) @item LOGNAME cvs.texi(,13564) @cindex LOGNAME, environment variable cvs.texi(,13565) The username of the system user. cvs.texi(,13566) cvs.texi(,13567) @item USER cvs.texi(,13568) @cindex USER, environment variable cvs.texi(,13569) Same as @code{LOGNAME}. cvs.texi(,13570) Do not confuse this with the internal variable of the same name. cvs.texi(,13571) @end table cvs.texi(,13572) cvs.texi(,13573) @node config cvs.texi(,13574) @appendixsec The CVSROOT/config configuration file cvs.texi(,13575) cvs.texi(,13576) @cindex config, in CVSROOT cvs.texi(,13577) @cindex CVSROOT/config cvs.texi(,13578) cvs.texi(,13579) The administrative file @file{config} contains various cvs.texi(,13580) miscellaneous settings which affect the behavior of cvs.texi(,13581) @sc{cvs}. The syntax is slightly different from the cvs.texi(,13582) other administrative files. Variables are not cvs.texi(,13583) expanded. Lines which start with @samp{#} are cvs.texi(,13584) considered comments. cvs.texi(,13585) @c FIXME: where do we define comments for the other cvs.texi(,13586) @c administrative files. cvs.texi(,13587) Other lines consist of a keyword, @samp{=}, and a cvs.texi(,13588) value. Note that this syntax is very strict. cvs.texi(,13589) Extraneous spaces or tabs are not permitted. cvs.texi(,13590) @c See comments in parseinfo.c:parse_config for more cvs.texi(,13591) @c discussion of this strictness. cvs.texi(,13592) cvs.texi(,13593) Currently defined keywords are: cvs.texi(,13594) cvs.texi(,13595) @table @code cvs.texi(,13596) @cindex RCSBIN, in CVSROOT/config cvs.texi(,13597) @item RCSBIN=@var{bindir} cvs.texi(,13598) For @sc{cvs} 1.9.12 through 1.9.18, this setting told cvs.texi(,13599) @sc{cvs} to look for @sc{rcs} programs in the cvs.texi(,13600) @var{bindir} directory. Current versions of @sc{cvs} cvs.texi(,13601) do not run @sc{rcs} programs; for compatibility this cvs.texi(,13602) setting is accepted, but it does nothing. cvs.texi(,13603) cvs.texi(,13604) @cindex SystemAuth, in CVSROOT/config cvs.texi(,13605) @item SystemAuth=@var{value} cvs.texi(,13606) If @var{value} is @samp{yes}, then pserver should check cvs.texi(,13607) for users in the system's user database if not found in cvs.texi(,13608) @file{CVSROOT/passwd}. If it is @samp{no}, then all cvs.texi(,13609) pserver users must exist in @file{CVSROOT/passwd}. cvs.texi(,13610) The default is @samp{yes}. For more on pserver, see cvs.texi(,13611) @ref{Password authenticated}. cvs.texi(,13612) cvs.texi(,13622) cvs.texi(,13623) @cindex TopLevelAdmin, in CVSROOT/config cvs.texi(,13624) @item TopLevelAdmin=@var{value} cvs.texi(,13625) Modify the @samp{checkout} command to create a cvs.texi(,13626) @samp{CVS} directory at the top level of the new cvs.texi(,13627) working directory, in addition to @samp{CVS} cvs.texi(,13628) directories created within checked-out directories. cvs.texi(,13629) The default value is @samp{no}. cvs.texi(,13630) cvs.texi(,13631) This option is useful if you find yourself performing cvs.texi(,13632) many commands at the top level of your working cvs.texi(,13633) directory, rather than in one of the checked out cvs.texi(,13634) subdirectories. The @file{CVS} directory created there cvs.texi(,13635) will mean you don't have to specify @code{CVSROOT} for cvs.texi(,13636) each command. It also provides a place for the cvs.texi(,13637) @file{CVS/Template} file (@pxref{Working directory cvs.texi(,13638) storage}). cvs.texi(,13639) cvs.texi(,13640) @cindex LockDir, in CVSROOT/config cvs.texi(,13641) @item LockDir=@var{directory} cvs.texi(,13642) Put @sc{cvs} lock files in @var{directory} rather than cvs.texi(,13643) directly in the repository. This is useful if you want cvs.texi(,13644) to let users read from the repository while giving them cvs.texi(,13645) write access only to @var{directory}, not to the cvs.texi(,13646) repository. cvs.texi(,13647) It can also be used to put the locks on a very fast cvs.texi(,13648) in-memory file system to speed up locking and unlocking cvs.texi(,13649) the repository. cvs.texi(,13650) You need to create @var{directory}, but cvs.texi(,13651) @sc{cvs} will create subdirectories of @var{directory} as it cvs.texi(,13652) needs them. For information on @sc{cvs} locks, see cvs.texi(,13653) @ref{Concurrency}. cvs.texi(,13654) cvs.texi(,13655) @c Mention this in Compatibility section? cvs.texi(,13656) Before enabling the LockDir option, make sure that you cvs.texi(,13657) have tracked down and removed any copies of @sc{cvs} 1.9 or cvs.texi(,13658) older. Such versions neither support LockDir, nor will cvs.texi(,13659) give an error indicating that they don't support it. cvs.texi(,13660) The result, if this is allowed to happen, is that some cvs.texi(,13661) @sc{cvs} users will put the locks one place, and others will cvs.texi(,13662) put them another place, and therefore the repository cvs.texi(,13663) could become corrupted. @sc{cvs} 1.10 does not support cvs.texi(,13664) LockDir but it will print a warning if run on a cvs.texi(,13665) repository with LockDir enabled. cvs.texi(,13666) cvs.texi(,13667) @cindex LogHistory, in CVSROOT/config cvs.texi(,13668) @item LogHistory=@var{value} cvs.texi(,13669) Control what is logged to the @file{CVSROOT/history} file (@pxref{history}). cvs.texi(,13670) Default of @samp{TOEFWUCGMAR} (or simply @samp{all}) will log cvs.texi(,13671) all transactions. Any subset of the default is cvs.texi(,13672) legal. (For example, to only log transactions that modify the cvs.texi(,13673) @file{*,v} files, use @samp{LogHistory=TMAR}.) cvs.texi(,13674) cvs.texi(,13675) @cindex RereadLogAfterVerify, in CVSROOT/config cvs.texi(,13676) @cindex @file{verifymsg}, changing the log message cvs.texi(,13677) @item RereadLogAfterVerify=@var{value} cvs.texi(,13678) Modify the @samp{commit} command such that CVS will reread the cvs.texi(,13679) log message after running the program specified by @file{verifymsg}. cvs.texi(,13680) @var{value} may be one of @samp{yes} or @samp{always}, indicating that cvs.texi(,13681) the log message should always be reread; @samp{no} cvs.texi(,13682) or @samp{never}, indicating that it should never be cvs.texi(,13683) reread; or @var{value} may be @samp{stat}, indicating cvs.texi(,13684) that the file should be checked with the filesystem cvs.texi(,13685) @samp{stat()} function to see if it has changed (see warning below) cvs.texi(,13686) before rereading. The default value is @samp{always}. cvs.texi(,13687) cvs.texi(,13688) @strong{Note: the `stat' mode can cause CVS to pause for up to cvs.texi(,13689) one extra second per directory committed. This can be less IO and cvs.texi(,13690) CPU intensive but is not recommended for use with large repositories} cvs.texi(,13691) cvs.texi(,13692) @xref{verifymsg}, for more information on how verifymsg cvs.texi(,13693) may be used. cvs.texi(,13694) cvs.texi(,13695) @cindex UserAdminOptions, in CVSROOT/config cvs.texi(,13696) @item UserAdminOptions=@var{value} cvs.texi(,13697) Control what options will be allowed with the @code{cvs admin} cvs.texi(,13698) command (@pxref{admin}) for users not in the @code{cvsadmin} group. cvs.texi(,13699) The @var{value} string is a list of single character options cvs.texi(,13700) which should be allowed. If a user who is not a member of the cvs.texi(,13701) @code{cvsadmin} group tries to execute any @code{cvs admin} cvs.texi(,13702) option which is not listed they will will receive an error message cvs.texi(,13703) reporting that the option is restricted. cvs.texi(,13704) cvs.texi(,13705) If no @code{cvsadmin} group exists on the server, @sc{cvs} will cvs.texi(,13706) ignore the @code{UserAdminOptions} keyword (@pxref{admin}). cvs.texi(,13707) cvs.texi(,13708) When not specified, @code{UserAdminOptions} defaults to cvs.texi(,13709) @samp{k}. In other words, it defaults to allowing cvs.texi(,13710) users outside of the @code{cvsadmin} group to use the cvs.texi(,13711) @code{cvs admin} command only to change the default keyword cvs.texi(,13712) expansion mode for files. cvs.texi(,13713) cvs.texi(,13714) As an example, to restrict users not in the @code{cvsadmin} cvs.texi(,13715) group to using @code{cvs admin} to change the default keyword cvs.texi(,13716) substitution mode, lock revisions, unlock revisions, and cvs.texi(,13717) replace the log message, use @samp{UserAdminOptions=klum}. cvs.texi(,13718) @end table cvs.texi(,13719) cvs.texi(,13720) @c --------------------------------------------------------------------- cvs.texi(,13721) @node Environment variables cvs.texi(,13722) @appendix All environment variables which affect CVS cvs.texi(,13723) @cindex Environment variables cvs.texi(,13724) @cindex Reference manual for variables cvs.texi(,13725) cvs.texi(,13726) This is a complete list of all environment variables cvs.texi(,13727) that affect @sc{cvs}. cvs.texi(,13728) cvs.texi(,13729) @table @code cvs.texi(,13730) @cindex CVSIGNORE, environment variable cvs.texi(,13731) @item $CVSIGNORE cvs.texi(,13732) A whitespace-separated list of file name patterns that cvs.texi(,13733) @sc{cvs} should ignore. @xref{cvsignore}. cvs.texi(,13734) cvs.texi(,13735) @cindex CVSWRAPPERS, environment variable cvs.texi(,13736) @item $CVSWRAPPERS cvs.texi(,13737) A whitespace-separated list of file name patterns that cvs.texi(,13738) @sc{cvs} should treat as wrappers. @xref{Wrappers}. cvs.texi(,13739) cvs.texi(,13740) @cindex CVSREAD, environment variable cvs.texi(,13741) @cindex Read-only files, and CVSREAD cvs.texi(,13742) @item $CVSREAD cvs.texi(,13743) If this is set, @code{checkout} and @code{update} will cvs.texi(,13744) try hard to make the files in your working directory cvs.texi(,13745) read-only. When this is not set, the default behavior cvs.texi(,13746) is to permit modification of your working files. cvs.texi(,13747) cvs.texi(,13748) @cindex CVSREADONLYFS, environment variable cvs.texi(,13749) @item $CVSREADONLYFS cvs.texi(,13750) Turns on read-only repository mode. This allows one to cvs.texi(,13751) check out from a read-only repository, such as within cvs.texi(,13752) an anoncvs server, or from a CDROM repository. cvs.texi(,13753) cvs.texi(,13754) It has the same effect as if the @samp{-R} command-line cvs.texi(,13755) option is used. This can also allow the use of cvs.texi(,13756) read-only NFS repositories. cvs.texi(,13757) cvs.texi(,13758) @item $CVSUMASK cvs.texi(,13759) Controls permissions of files in the repository. See cvs.texi(,13760) @ref{File permissions}. cvs.texi(,13761) cvs.texi(,13762) @item $CVSROOT cvs.texi(,13763) Should contain the full pathname to the root of the @sc{cvs} cvs.texi(,13764) source repository (where the @sc{rcs} files are cvs.texi(,13765) kept). This information must be available to @sc{cvs} for cvs.texi(,13766) most commands to execute; if @code{$CVSROOT} is not set, cvs.texi(,13767) or if you wish to override it for one invocation, you cvs.texi(,13768) can supply it on the command line: @samp{cvs -d cvsroot cvs.texi(,13769) cvs_command@dots{}} Once you have checked out a working cvs.texi(,13770) directory, @sc{cvs} stores the appropriate root (in cvs.texi(,13771) the file @file{CVS/Root}), so normally you only need to cvs.texi(,13772) worry about this when initially checking out a working cvs.texi(,13773) directory. cvs.texi(,13774) cvs.texi(,13775) @item $CVSEDITOR cvs.texi(,13776) @cindex CVSEDITOR, environment variable cvs.texi(,13777) @itemx $EDITOR cvs.texi(,13778) @cindex EDITOR, environment variable cvs.texi(,13779) @itemx $VISUAL cvs.texi(,13780) @cindex VISUAL, environment variable cvs.texi(,13781) Specifies the program to use for recording log messages cvs.texi(,13782) during commit. @code{$CVSEDITOR} overrides cvs.texi(,13783) @code{$EDITOR}, which overrides @code{$VISUAL}. cvs.texi(,13784) See @ref{Committing your changes} for more or cvs.texi(,13785) @ref{Global options} for alternative ways of specifying a cvs.texi(,13786) log editor. cvs.texi(,13787) cvs.texi(,13788) @cindex PATH, environment variable cvs.texi(,13789) @item $PATH cvs.texi(,13790) If @code{$RCSBIN} is not set, and no path is compiled cvs.texi(,13791) into @sc{cvs}, it will use @code{$PATH} to try to find all cvs.texi(,13792) programs it uses. cvs.texi(,13793) cvs.texi(,13794) @cindex HOME, environment variable cvs.texi(,13795) @item $HOME cvs.texi(,13796) @cindex HOMEPATH, environment variable cvs.texi(,13797) @item $HOMEPATH cvs.texi(,13798) @cindex HOMEDRIVE, environment variable cvs.texi(,13799) @item $HOMEDRIVE cvs.texi(,13800) Used to locate the directory where the @file{.cvsrc} cvs.texi(,13801) file, and other such files, are searched. On Unix, @sc{cvs} cvs.texi(,13802) just checks for @code{HOME}. On Windows NT, the system will cvs.texi(,13803) set @code{HOMEDRIVE}, for example to @samp{d:} and @code{HOMEPATH}, cvs.texi(,13804) for example to @file{\joe}. On Windows 95, you'll cvs.texi(,13805) probably need to set @code{HOMEDRIVE} and @code{HOMEPATH} yourself. cvs.texi(,13806) @c We are being vague about whether HOME works on cvs.texi(,13807) @c Windows; see long comment in windows-NT/filesubr.c. cvs.texi(,13808) cvs.texi(,13809) @cindex CVS_RSH, environment variable cvs.texi(,13810) @item $CVS_RSH cvs.texi(,13811) Specifies the external program which @sc{cvs} connects with, cvs.texi(,13812) when @code{:ext:} access method is specified. cvs.texi(,13813) @pxref{Connecting via rsh}. cvs.texi(,13814) cvs.texi(,13815) @item $CVS_SERVER cvs.texi(,13816) Used in client-server mode when accessing a remote cvs.texi(,13817) repository using @sc{rsh}. It specifies the name of cvs.texi(,13818) the program to start on the server side (and any cvs.texi(,13819) necessary arguments) when accessing a remote repository cvs.texi(,13820) using the @code{:ext:}, @code{:fork:}, or @code{:server:} access methods. cvs.texi(,13821) The default value for @code{:ext:} and @code{:server:} is @code{cvs}; cvs.texi(,13822) the default value for @code{:fork:} is the name used to run the client. cvs.texi(,13823) @pxref{Connecting via rsh} cvs.texi(,13824) cvs.texi(,13825) @item $CVS_PASSFILE cvs.texi(,13826) Used in client-server mode when accessing the @code{cvs cvs.texi(,13827) login server}. Default value is @file{$HOME/.cvspass}. cvs.texi(,13828) @pxref{Password authentication client} cvs.texi(,13829) cvs.texi(,13830) @item $CVS_CLIENT_PORT cvs.texi(,13831) Used in client-server mode to set the port to use when accessing the server cvs.texi(,13832) via Kerberos, GSSAPI, or @sc{cvs}'s password authentication protocol cvs.texi(,13833) if the port is not specified in the CVSROOT. cvs.texi(,13834) @pxref{Remote repositories} cvs.texi(,13835) cvs.texi(,13836) @cindex CVS_RCMD_PORT, environment variable cvs.texi(,13837) @item $CVS_RCMD_PORT cvs.texi(,13838) Used in client-server mode. If set, specifies the port cvs.texi(,13839) number to be used when accessing the @sc{rcmd} demon on cvs.texi(,13840) the server side. (Currently not used for Unix clients). cvs.texi(,13841) cvs.texi(,13842) @cindex CVS_CLIENT_LOG, environment variable cvs.texi(,13843) @item $CVS_CLIENT_LOG cvs.texi(,13844) Used for debugging only in client-server cvs.texi(,13845) mode. If set, everything sent to the server is logged cvs.texi(,13846) into @file{@code{$CVS_CLIENT_LOG}.in} and everything cvs.texi(,13847) sent from the server is logged into cvs.texi(,13848) @file{@code{$CVS_CLIENT_LOG}.out}. cvs.texi(,13849) cvs.texi(,13850) @cindex CVS_SERVER_SLEEP, environment variable cvs.texi(,13851) @item $CVS_SERVER_SLEEP cvs.texi(,13852) Used only for debugging the server side in cvs.texi(,13853) client-server mode. If set, delays the start of the cvs.texi(,13854) server child process the specified amount of cvs.texi(,13855) seconds so that you can attach to it with a debugger. cvs.texi(,13856) cvs.texi(,13857) @cindex CVS_IGNORE_REMOTE_ROOT, environment variable cvs.texi(,13858) @item $CVS_IGNORE_REMOTE_ROOT cvs.texi(,13859) For @sc{cvs} 1.10 and older, setting this variable cvs.texi(,13860) prevents @sc{cvs} from overwriting the @file{CVS/Root} cvs.texi(,13861) file when the @samp{-d} global option is specified. cvs.texi(,13862) Later versions of @sc{cvs} do not rewrite cvs.texi(,13863) @file{CVS/Root}, so @code{CVS_IGNORE_REMOTE_ROOT} has no cvs.texi(,13864) effect. cvs.texi(,13865) cvs.texi(,13866) @cindex CVS_LOCAL_BRANCH_NUM, environment variable cvs.texi(,13867) @item $CVS_LOCAL_BRANCH_NUM cvs.texi(,13868) Setting this variable allows some control over the cvs.texi(,13869) branch number that is assigned. This is specifically to cvs.texi(,13870) support the local commit feature of CVSup. If one sets cvs.texi(,13871) @code{CVS_LOCAL_BRANCH_NUM} to (say) 1000 then branches cvs.texi(,13872) the local repository, the revision numbers will look cvs.texi(,13873) like 1.66.1000.xx. There is almost a dead-set certainty cvs.texi(,13874) that there will be no conflicts with version numbers. cvs.texi(,13875) cvs.texi(,13876) @cindex COMSPEC, environment variable cvs.texi(,13877) @item $COMSPEC cvs.texi(,13878) Used under OS/2 only. It specifies the name of the cvs.texi(,13879) command interpreter and defaults to @sc{cmd.exe}. cvs.texi(,13880) cvs.texi(,13881) @cindex TMPDIR, environment variable cvs.texi(,13882) @item $TMPDIR cvs.texi(,13883) @cindex TMP, environment variable cvs.texi(,13884) @itemx $TMP cvs.texi(,13885) @cindex TEMP, environment variable cvs.texi(,13886) @itemx $TEMP cvs.texi(,13887) @cindex Temporary files, location of cvs.texi(,13888) @c This is quite nuts. We don't talk about tempnam cvs.texi(,13889) @c or mkstemp which we sometimes use. The discussion cvs.texi(,13890) @c of "Global options" is semi-incoherent. cvs.texi(,13891) @c I'm not even sure those are the only inaccuracies. cvs.texi(,13892) @c Furthermore, the conventions are cvs.texi(,13893) @c pretty crazy and they should be simplified. cvs.texi(,13894) Directory in which temporary files are located. cvs.texi(,13895) The @sc{cvs} server uses cvs.texi(,13896) @code{TMPDIR}. @xref{Global options}, for a cvs.texi(,13897) description of how to specify this. cvs.texi(,13898) Some parts of @sc{cvs} will always use @file{/tmp} (via cvs.texi(,13899) the @code{tmpnam} function provided by the system). cvs.texi(,13900) cvs.texi(,13901) On Windows NT, @code{TMP} is used (via the @code{_tempnam} cvs.texi(,13902) function provided by the system). cvs.texi(,13903) cvs.texi(,13904) The @code{patch} program which is used by the @sc{cvs} cvs.texi(,13905) client uses @code{TMPDIR}, and if it is not set, uses cvs.texi(,13906) @file{/tmp} (at least with GNU patch 2.1). Note that cvs.texi(,13907) if your server and client are both running @sc{cvs} cvs.texi(,13908) 1.9.10 or later, @sc{cvs} will not invoke an external cvs.texi(,13909) @code{patch} program. cvs.texi(,13910) cvs.texi(,13911) @cindex CVS_PID, environment variable cvs.texi(,13912) @item $CVS_PID cvs.texi(,13913) This is the process identification (aka pid) number of cvs.texi(,13914) the @sc{cvs} process. It is often useful in the cvs.texi(,13915) programs and/or scripts specified by the cvs.texi(,13916) @file{commitinfo}, @file{verifymsg}, @file{loginfo} cvs.texi(,13917) files. cvs.texi(,13918) @end table cvs.texi(,13919) cvs.texi(,13920) @node Compatibility cvs.texi(,13921) @appendix Compatibility between CVS Versions cvs.texi(,13922) cvs.texi(,13923) @cindex CVS, versions of cvs.texi(,13924) @cindex Versions, of CVS cvs.texi(,13925) @cindex Compatibility, between CVS versions cvs.texi(,13926) @c We don't mention versions older than CVS 1.3 cvs.texi(,13927) @c on the theory that it would clutter it up for the vast cvs.texi(,13928) @c majority of people, who don't have anything that old. cvs.texi(,13929) @c cvs.texi(,13930) The repository format is compatible going back to cvs.texi(,13931) @sc{cvs} 1.3. But see @ref{Watches Compatibility}, if cvs.texi(,13932) you have copies of @sc{cvs} 1.6 or older and you want cvs.texi(,13933) to use the optional developer communication features. cvs.texi(,13934) @c If you "cvs rm" and commit using 1.3, then you'll cvs.texi(,13935) @c want to run "rcs -sdead " on each of the cvs.texi(,13936) @c files in the Attic if you then want 1.5 and cvs.texi(,13937) @c later to recognize those files as dead (I think the cvs.texi(,13938) @c symptom if this is not done is that files reappear cvs.texi(,13939) @c in joins). (Wait: the above will work but really to cvs.texi(,13940) @c be strictly correct we should suggest checking cvs.texi(,13941) @c in a new revision rather than just changing the cvs.texi(,13942) @c state of the head revision, shouldn't we?). cvs.texi(,13943) @c The old convert.sh script was for this, but it never cvs.texi(,13944) @c did get updated to reflect use of the RCS "dead" cvs.texi(,13945) @c state. cvs.texi(,13946) @c Note: this is tricky to document without confusing cvs.texi(,13947) @c people--need to carefully say what CVS version we cvs.texi(,13948) @c are talking about and keep in mind the distinction cvs.texi(,13949) @c between a cvs.texi(,13950) @c repository created with 1.3 and on which one now cvs.texi(,13951) @c uses 1.5+, and a repository on which one wants to cvs.texi(,13952) @c use both versions side by side (e.g. during a cvs.texi(,13953) @c transition period). cvs.texi(,13954) @c Wait, can't CVS just detect the case in which a file cvs.texi(,13955) @c is in the Attic but the head revision is not dead? cvs.texi(,13956) @c Not sure whether this should produce a warning or cvs.texi(,13957) @c something, and probably needs further thought, but cvs.texi(,13958) @c it would appear that the situation can be detected. cvs.texi(,13959) @c cvs.texi(,13960) @c We might want to separate out the 1.3 compatibility cvs.texi(,13961) @c section (for repository & working directory) from the cvs.texi(,13962) @c rest--that might help avoid confusing people who cvs.texi(,13963) @c are upgrading (for example) from 1.6 to 1.8. cvs.texi(,13964) @c cvs.texi(,13965) @c A minor incompatibility is if a current version of CVS cvs.texi(,13966) @c puts "Nfoo" into CVS/Tag, then CVS 1.9 or older will cvs.texi(,13967) @c see this as if there is no tag. Seems to me this is cvs.texi(,13968) @c too obscure to mention. cvs.texi(,13969) cvs.texi(,13970) The working directory format is compatible going back cvs.texi(,13971) to @sc{cvs} 1.5. It did change between @sc{cvs} 1.3 cvs.texi(,13972) and @sc{cvs} 1.5. If you run @sc{cvs} 1.5 or newer on cvs.texi(,13973) a working directory checked out with @sc{cvs} 1.3, cvs.texi(,13974) @sc{cvs} will convert it, but to go back to @sc{cvs} cvs.texi(,13975) 1.3 you need to check out a new working directory with cvs.texi(,13976) @sc{cvs} 1.3. cvs.texi(,13977) cvs.texi(,13978) The remote protocol is interoperable going back to @sc{cvs} 1.5, but no cvs.texi(,13979) further (1.5 was the first official release with the remote protocol, cvs.texi(,13980) but some older versions might still be floating around). In many cvs.texi(,13981) cases you need to upgrade both the client and the server to take cvs.texi(,13982) advantage of new features and bugfixes, however. cvs.texi(,13983) cvs.texi(,13984) @c Perhaps should be saying something here about the cvs.texi(,13985) @c "D" lines in Entries (written by CVS 1.9; 1.8 and cvs.texi(,13986) @c older don't use them). These are supposed to be cvs.texi(,13987) @c compatible in both directions, but I'm not sure cvs.texi(,13988) @c they quite are 100%. One common gripe is if you cvs.texi(,13989) @c "rm -r" a directory and 1.9 gets confused, as it cvs.texi(,13990) @c still sees it in Entries. That one is fixed in cvs.texi(,13991) @c (say) 1.9.6. Someone else reported problems with cvs.texi(,13992) @c starting with a directory which was checked out with cvs.texi(,13993) @c an old version, and then using a new version, and cvs.texi(,13994) @c some "D" lines appeared, but not for every cvs.texi(,13995) @c directory, causing some directories to be skipped. cvs.texi(,13996) @c They weren't sure how to reproduce this, though. cvs.texi(,13997) cvs.texi(,13998) @c --------------------------------------------------------------------- cvs.texi(,13999) @node Troubleshooting cvs.texi(,14000) @appendix Troubleshooting cvs.texi(,14001) cvs.texi(,14002) If you are having trouble with @sc{cvs}, this appendix cvs.texi(,14003) may help. If there is a particular error message which cvs.texi(,14004) you are seeing, then you can look up the message cvs.texi(,14005) alphabetically. If not, you can look through the cvs.texi(,14006) section on other problems to see if your problem is cvs.texi(,14007) mentioned there. cvs.texi(,14008) cvs.texi(,14009) @menu cvs.texi(,14010) * Error messages:: Partial list of CVS errors cvs.texi(,14011) * Connection:: Trouble making a connection to a CVS server cvs.texi(,14012) * Other problems:: Problems not readily listed by error message cvs.texi(,14013) @end menu cvs.texi(,14014) cvs.texi(,14022) cvs.texi(,14023) @node Error messages cvs.texi(,14024) @appendixsec Partial list of error messages cvs.texi(,14025) cvs.texi(,14026) Here is a partial list of error messages that you may cvs.texi(,14027) see from @sc{cvs}. It is not a complete list---@sc{cvs} cvs.texi(,14028) is capable of printing many, many error messages, often cvs.texi(,14029) with parts of them supplied by the operating system, cvs.texi(,14030) but the intention is to list the common and/or cvs.texi(,14031) potentially confusing error messages. cvs.texi(,14032) cvs.texi(,14033) The messages are alphabetical, but introductory text cvs.texi(,14034) such as @samp{cvs update: } is not considered in cvs.texi(,14035) ordering them. cvs.texi(,14036) cvs.texi(,14037) In some cases the list includes messages printed by old cvs.texi(,14038) versions of @sc{cvs} (partly because users may not be cvs.texi(,14039) sure which version of @sc{cvs} they are using at any cvs.texi(,14040) particular moment). cvs.texi(,14041) @c If we want to start retiring messages, perhaps we cvs.texi(,14042) @c should pick a cutoff version (for example, no more cvs.texi(,14043) @c messages which are specific to versions before 1.9) cvs.texi(,14044) @c and then move the old messages to an "old messages" cvs.texi(,14045) @c node rather than deleting them completely. cvs.texi(,14046) cvs.texi(,14047) @table @code cvs.texi(,14048) @c FIXME: What is the correct way to format a multiline cvs.texi(,14049) @c error message here? Maybe @table is the wrong cvs.texi(,14050) @c choice? Texinfo gurus? cvs.texi(,14051) @item @var{file}:@var{line}: Assertion '@var{text}' failed cvs.texi(,14052) The exact format of this message may vary depending on cvs.texi(,14053) your system. It indicates a bug in @sc{cvs}, which can cvs.texi(,14054) be handled as described in @ref{BUGS}. cvs.texi(,14055) cvs.texi(,14056) @item cvs @var{command}: authorization failed: server @var{host} rejected access cvs.texi(,14057) This is a generic response when trying to connect to a cvs.texi(,14058) pserver server which chooses not to provide a cvs.texi(,14059) specific reason for denying authorization. Check that cvs.texi(,14060) the username and password specified are correct and cvs.texi(,14061) that the @code{CVSROOT} specified is allowed by @samp{--allow-root} cvs.texi(,14062) in @file{inetd.conf}. See @ref{Password authenticated}. cvs.texi(,14063) cvs.texi(,14064) @item cvs @var{command}: conflict: removed @var{file} was modified by second party cvs.texi(,14065) This message indicates that you removed a file, and cvs.texi(,14066) someone else modified it. To resolve the conflict, cvs.texi(,14067) first run @samp{cvs add @var{file}}. If desired, look cvs.texi(,14068) at the other party's modification to decide whether you cvs.texi(,14069) still want to remove it. If you don't want to remove cvs.texi(,14070) it, stop here. If you do want to remove it, proceed cvs.texi(,14071) with @samp{cvs remove @var{file}} and commit your cvs.texi(,14072) removal. cvs.texi(,14073) @c Tests conflicts2-142b* in sanity.sh test for this. cvs.texi(,14074) cvs.texi(,14075) @item cannot change permissions on temporary directory cvs.texi(,14076) @example cvs.texi(,14077) Operation not permitted cvs.texi(,14078) @end example cvs.texi(,14079) This message has been happening in a non-reproducible, cvs.texi(,14080) occasional way when we run the client/server testsuite, cvs.texi(,14081) both on Red Hat Linux 3.0.3 and 4.1. We haven't been cvs.texi(,14082) able to figure out what causes it, nor is it known cvs.texi(,14083) whether it is specific to linux (or even to this cvs.texi(,14084) particular machine!). If the problem does occur on cvs.texi(,14085) other unices, @samp{Operation not permitted} would be cvs.texi(,14086) likely to read @samp{Not owner} or whatever the system cvs.texi(,14087) in question uses for the unix @code{EPERM} error. If cvs.texi(,14088) you have any information to add, please let us know as cvs.texi(,14089) described in @ref{BUGS}. If you experience this error cvs.texi(,14090) while using @sc{cvs}, retrying the operation which cvs.texi(,14091) produced it should work fine. cvs.texi(,14092) @c This has been seen in a variety of tests, including cvs.texi(,14093) @c multibranch-2, multibranch-5, and basic1-24-rm-rm, cvs.texi(,14094) @c so it doesn't seem particularly specific to any one cvs.texi(,14095) @c test. cvs.texi(,14096) cvs.texi(,14097) @item cvs [server aborted]: Cannot check out files into the repository itself cvs.texi(,14098) The obvious cause for this message (especially for cvs.texi(,14099) non-client/server @sc{cvs}) is that the @sc{cvs} root cvs.texi(,14100) is, for example, @file{/usr/local/cvsroot} and you try cvs.texi(,14101) to check out files when you are in a subdirectory, such cvs.texi(,14102) as @file{/usr/local/cvsroot/test}. However, there is a cvs.texi(,14103) more subtle cause, which is that the temporary cvs.texi(,14104) directory on the server is set to a subdirectory of the cvs.texi(,14105) root (which is also not allowed). If this is the cvs.texi(,14106) problem, set the temporary directory to somewhere else, cvs.texi(,14107) for example @file{/var/tmp}; see @code{TMPDIR} in cvs.texi(,14108) @ref{Environment variables}, for how to set the cvs.texi(,14109) temporary directory. cvs.texi(,14110) cvs.texi(,14111) @item cannot commit files as 'root' cvs.texi(,14112) See @samp{'root' is not allowed to commit files}. cvs.texi(,14113) cvs.texi(,14114) @c For one example see basica-1a10 in the testsuite cvs.texi(,14115) @c For another example, "cvs co ." on NT; see comment cvs.texi(,14116) @c at windows-NT/filesubr.c (expand_wild). cvs.texi(,14117) @c For another example, "cvs co foo/bar" where foo exists. cvs.texi(,14118) @item cannot open CVS/Entries for reading: No such file or directory cvs.texi(,14119) This generally indicates a @sc{cvs} internal error, and cvs.texi(,14120) can be handled as with other @sc{cvs} bugs cvs.texi(,14121) (@pxref{BUGS}). Usually there is a workaround---the cvs.texi(,14122) exact nature of which would depend on the situation but cvs.texi(,14123) which hopefully could be figured out. cvs.texi(,14124) cvs.texi(,14125) @c This is more obscure than it might sound; it only cvs.texi(,14126) @c happens if you run "cvs init" from a directory which cvs.texi(,14127) @c contains a CVS/Root file at the start. cvs.texi(,14128) @item cvs [init aborted]: cannot open CVS/Root: No such file or directory cvs.texi(,14129) This message is harmless. Provided it is not cvs.texi(,14130) accompanied by other errors, the operation has cvs.texi(,14131) completed successfully. This message should not occur cvs.texi(,14132) with current versions of @sc{cvs}, but it is documented cvs.texi(,14133) here for the benefit of @sc{cvs} 1.9 and older. cvs.texi(,14134) cvs.texi(,14135) @item cvs server: cannot open /root/.cvsignore: Permission denied cvs.texi(,14136) @itemx cvs [server aborted]: can't chdir(/root): Permission denied cvs.texi(,14137) See @ref{Connection}. cvs.texi(,14138) cvs.texi(,14139) @item cvs [checkout aborted]: cannot rename file @var{file} to CVS/,,@var{file}: Invalid argument cvs.texi(,14140) This message has been reported as intermittently cvs.texi(,14141) happening with @sc{cvs} 1.9 on Solaris 2.5. The cause is cvs.texi(,14142) unknown; if you know more about what causes it, let us cvs.texi(,14143) know as described in @ref{BUGS}. cvs.texi(,14144) cvs.texi(,14145) @item cvs [@var{command} aborted]: cannot start server via rcmd cvs.texi(,14146) This, unfortunately, is a rather nonspecific error cvs.texi(,14147) message which @sc{cvs} 1.9 will print if you are cvs.texi(,14148) running the @sc{cvs} client and it is having trouble cvs.texi(,14149) connecting to the server. Current versions of @sc{cvs} cvs.texi(,14150) should print a much more specific error message. If cvs.texi(,14151) you get this message when you didn't mean to run the cvs.texi(,14152) client at all, you probably forgot to specify cvs.texi(,14153) @code{:local:}, as described in @ref{Repository}. cvs.texi(,14154) cvs.texi(,14155) @item ci: @var{file},v: bad diff output line: Binary files - and /tmp/T2a22651 differ cvs.texi(,14156) @sc{cvs} 1.9 and older will print this message cvs.texi(,14157) when trying to check in a binary file if cvs.texi(,14158) @sc{rcs} is not correctly installed. Re-read the cvs.texi(,14159) instructions that came with your @sc{rcs} distribution cvs.texi(,14160) and the @sc{install} file in the @sc{cvs} cvs.texi(,14161) distribution. Alternately, upgrade to a current cvs.texi(,14162) version of @sc{cvs}, which checks in files itself cvs.texi(,14163) rather than via @sc{rcs}. cvs.texi(,14164) cvs.texi(,14165) @item cvs checkout: could not check out @var{file} cvs.texi(,14166) With @sc{cvs} 1.9, this can mean that the @code{co} program cvs.texi(,14167) (part of @sc{rcs}) returned a failure. It should be cvs.texi(,14168) preceded by another error message, however it has been cvs.texi(,14169) observed without another error message and the cause is cvs.texi(,14170) not well-understood. With the current version of @sc{cvs}, cvs.texi(,14171) which does not run @code{co}, if this message occurs cvs.texi(,14172) without another error message, it is definitely a @sc{cvs} cvs.texi(,14173) bug (@pxref{BUGS}). cvs.texi(,14174) @c My current suspicion is that the RCS in the rcs (not cvs.texi(,14175) @c cvs/winnt/rcs57nt.zip) directory on the _Practical_ cvs.texi(,14176) @c CD is bad (remains to be confirmed). cvs.texi(,14177) @c There is also a report of something which looks cvs.texi(,14178) @c very similar on SGI, Irix 5.2, so I dunno. cvs.texi(,14179) cvs.texi(,14180) @item cvs [login aborted]: could not find out home directory cvs.texi(,14181) This means that you need to set the environment cvs.texi(,14182) variables that @sc{cvs} uses to locate your home directory. cvs.texi(,14183) See the discussion of @code{HOME}, @code{HOMEDRIVE}, and @code{HOMEPATH} in cvs.texi(,14184) @ref{Environment variables}. cvs.texi(,14185) cvs.texi(,14186) @item cvs update: could not merge revision @var{rev} of @var{file}: No such file or directory cvs.texi(,14187) @sc{cvs} 1.9 and older will print this message if there was cvs.texi(,14188) a problem finding the @code{rcsmerge} program. Make cvs.texi(,14189) sure that it is in your @code{PATH}, or upgrade to a cvs.texi(,14190) current version of @sc{cvs}, which does not require cvs.texi(,14191) an external @code{rcsmerge} program. cvs.texi(,14192) cvs.texi(,14193) @item cvs [update aborted]: could not patch @var{file}: No such file or directory cvs.texi(,14194) This means that there was a problem finding the cvs.texi(,14195) @code{patch} program. Make sure that it is in your cvs.texi(,14196) @code{PATH}. Note that despite appearances the message cvs.texi(,14197) is @emph{not} referring to whether it can find @var{file}. cvs.texi(,14198) If both the client and the server are running a current cvs.texi(,14199) version of @sc{cvs}, then there is no need for an cvs.texi(,14200) external patch program and you should not see this cvs.texi(,14201) message. But if either client or server is running cvs.texi(,14202) @sc{cvs} 1.9, then you need @code{patch}. cvs.texi(,14203) cvs.texi(,14204) @item cvs update: could not patch @var{file}; will refetch cvs.texi(,14205) This means that for whatever reason the client was cvs.texi(,14206) unable to apply a patch that the server sent. The cvs.texi(,14207) message is nothing to be concerned about, because cvs.texi(,14208) inability to apply the patch only slows things down and cvs.texi(,14209) has no effect on what @sc{cvs} does. cvs.texi(,14210) @c xref to update output. Or File status? cvs.texi(,14211) @c Or some place else that cvs.texi(,14212) @c explains this whole "patch"/P/Needs Patch thing? cvs.texi(,14213) cvs.texi(,14214) @item dying gasps from @var{server} unexpected cvs.texi(,14215) There is a known bug in the server for @sc{cvs} 1.9.18 cvs.texi(,14216) and older which can cause this. For me, this was cvs.texi(,14217) reproducible if I used the @samp{-t} global option. It cvs.texi(,14218) was fixed by Andy Piper's 14 Nov 1997 change to cvs.texi(,14219) src/filesubr.c, if anyone is curious. cvs.texi(,14220) If you see the message, cvs.texi(,14221) you probably can just retry the operation which failed, cvs.texi(,14222) or if you have discovered information concerning its cvs.texi(,14223) cause, please let us know as described in @ref{BUGS}. cvs.texi(,14224) cvs.texi(,14225) @item end of file from server (consult above messages if any) cvs.texi(,14226) The most common cause for this message is if you are cvs.texi(,14227) using an external @code{rsh} program and it exited with cvs.texi(,14228) an error. In this case the @code{rsh} program should cvs.texi(,14229) have printed a message, which will appear before the cvs.texi(,14230) above message. For more information on setting up a cvs.texi(,14231) @sc{cvs} client and server, see @ref{Remote repositories}. cvs.texi(,14232) cvs.texi(,14233) @item cvs [update aborted]: EOF in key in RCS file @var{file},v cvs.texi(,14234) @itemx cvs [checkout aborted]: EOF while looking for end of string in RCS file @var{file},v cvs.texi(,14235) This means that there is a syntax error in the given cvs.texi(,14236) @sc{rcs} file. Note that this might be true even if @sc{rcs} can cvs.texi(,14237) read the file OK; @sc{cvs} does more error checking of cvs.texi(,14238) errors in the RCS file. That is why you may see this cvs.texi(,14239) message when upgrading from @sc{cvs} 1.9 to @sc{cvs} cvs.texi(,14240) 1.10. The likely cause for the original corruption is cvs.texi(,14241) hardware, the operating system, or the like. Of cvs.texi(,14242) course, if you find a case in which @sc{cvs} seems to cvs.texi(,14243) corrupting the file, by all means report it, cvs.texi(,14244) (@pxref{BUGS}). cvs.texi(,14245) There are quite a few variations of this error message, cvs.texi(,14246) depending on exactly where in the @sc{rcs} file @sc{cvs} cvs.texi(,14247) finds the syntax error. cvs.texi(,14248) cvs.texi(,14249) @cindex mkmodules cvs.texi(,14250) @item cvs commit: Executing 'mkmodules' cvs.texi(,14251) This means that your repository is set up for a version cvs.texi(,14252) of @sc{cvs} prior to @sc{cvs} 1.8. When using @sc{cvs} cvs.texi(,14253) 1.8 or later, the above message will be preceded by cvs.texi(,14254) cvs.texi(,14255) @example cvs.texi(,14256) cvs commit: Rebuilding administrative file database cvs.texi(,14257) @end example cvs.texi(,14258) cvs.texi(,14259) If you see both messages, the database is being rebuilt cvs.texi(,14260) twice, which is unnecessary but harmless. If you wish cvs.texi(,14261) to avoid the duplication, and you have no versions of cvs.texi(,14262) @sc{cvs} 1.7 or earlier in use, remove @code{-i mkmodules} cvs.texi(,14263) every place it appears in your @code{modules} cvs.texi(,14264) file. For more information on the @code{modules} file, cvs.texi(,14265) see @ref{modules}. cvs.texi(,14266) cvs.texi(,14267) @c This message comes from "co", and I believe is cvs.texi(,14268) @c possible only with older versions of CVS which call cvs.texi(,14269) @c co. The problem with being able to create the bogus cvs.texi(,14270) @c RCS file still exists, though (and I think maybe cvs.texi(,14271) @c there is a different symptom(s) now). cvs.texi(,14272) @c FIXME: Would be nice to have a more exact wording cvs.texi(,14273) @c for this message. cvs.texi(,14274) @item missing author cvs.texi(,14275) Typically this can happen if you created an RCS file cvs.texi(,14276) with your username set to empty. @sc{cvs} will, bogusly, cvs.texi(,14277) create an illegal RCS file with no value for the author cvs.texi(,14278) field. The solution is to make sure your username is cvs.texi(,14279) set to a non-empty value and re-create the RCS file. cvs.texi(,14280) @c "make sure your username is set" is complicated in cvs.texi(,14281) @c and of itself, as there are the environment cvs.texi(,14282) @c variables the system login name, &c, and it depends cvs.texi(,14283) @c on the version of CVS. cvs.texi(,14284) cvs.texi(,14285) @item cvs [checkout aborted]: no such tag @var{tag} cvs.texi(,14286) This message means that @sc{cvs} isn't familiar with cvs.texi(,14287) the tag @var{tag}. Usually this means that you have cvs.texi(,14288) mistyped a tag name; however there are (relatively cvs.texi(,14289) obscure) cases in which @sc{cvs} will require you to cvs.texi(,14290) @c Search sanity.sh for "no such tag" to see some of cvs.texi(,14291) @c the relatively obscure cases. cvs.texi(,14292) try a few other @sc{cvs} commands involving that tag, cvs.texi(,14293) before you find one which will cause @sc{cvs} to update cvs.texi(,14294) the @file{val-tags} file; see discussion of val-tags in cvs.texi(,14295) @ref{File permissions}. You only need to worry about cvs.texi(,14296) this once for a given tag; when a tag is listed in cvs.texi(,14297) @file{val-tags}, it stays there. Note that using cvs.texi(,14298) @samp{-f} to not require tag matches does not override cvs.texi(,14299) this check; see @ref{Common options}. cvs.texi(,14300) cvs.texi(,14301) @item *PANIC* administration files missing cvs.texi(,14302) This typically means that there is a directory named cvs.texi(,14303) @sc{cvs} but it does not contain the administrative files cvs.texi(,14304) which @sc{cvs} puts in a CVS directory. If the problem is cvs.texi(,14305) that you created a CVS directory via some mechanism cvs.texi(,14306) other than @sc{cvs}, then the answer is simple, use a name cvs.texi(,14307) other than @sc{cvs}. If not, it indicates a @sc{cvs} bug cvs.texi(,14308) (@pxref{BUGS}). cvs.texi(,14309) cvs.texi(,14310) @item rcs error: Unknown option: -x,v/ cvs.texi(,14311) This message will be followed by a usage message for cvs.texi(,14312) @sc{rcs}. It means that you have an old version of cvs.texi(,14313) @sc{rcs} (probably supplied with your operating cvs.texi(,14314) system), as well as an old version of @sc{cvs}. cvs.texi(,14315) @sc{cvs} 1.9.18 and earlier only work with @sc{rcs} version 5 and cvs.texi(,14316) later; current versions of @sc{cvs} do not run @sc{rcs} programs. cvs.texi(,14317) @c For more information on installing @sc{cvs}, see cvs.texi(,14318) @c (FIXME: where? it depends on whether you are cvs.texi(,14319) @c getting binaries or sources or what). cvs.texi(,14320) @c The message can also say "ci error" or something cvs.texi(,14321) @c instead of "rcs error", I suspect. cvs.texi(,14322) cvs.texi(,14323) @item cvs [server aborted]: received broken pipe signal cvs.texi(,14324) This message seems to be caused by a hard-to-track-down cvs.texi(,14325) bug in @sc{cvs} or the systems it runs on (we don't cvs.texi(,14326) know---we haven't tracked it down yet!). It seems to cvs.texi(,14327) happen only after a @sc{cvs} command has completed, and cvs.texi(,14328) you should be able to just ignore the message. cvs.texi(,14329) However, if you have discovered information concerning its cvs.texi(,14330) cause, please let us know as described in @ref{BUGS}. cvs.texi(,14331) cvs.texi(,14332) @item 'root' is not allowed to commit files cvs.texi(,14333) When committing a permanent change, @sc{cvs} makes a log entry of cvs.texi(,14334) who committed the change. If you are committing the change logged cvs.texi(,14335) in as "root" (not under "su" or other root-priv giving program), cvs.texi(,14336) @sc{cvs} cannot determine who is actually making the change. cvs.texi(,14337) As such, by default, @sc{cvs} disallows changes to be committed by users cvs.texi(,14338) logged in as "root". (You can disable this option by passing the cvs.texi(,14339) @code{--enable-rootcommit} option to @file{configure} and recompiling @sc{cvs}. cvs.texi(,14340) On some systems this means editing the appropriate @file{config.h} file cvs.texi(,14341) before building @sc{cvs}.) cvs.texi(,14342) cvs.texi(,14343) @item Too many arguments! cvs.texi(,14344) This message is typically printed by the @file{log.pl} cvs.texi(,14345) script which is in the @file{contrib} directory in the cvs.texi(,14346) @sc{cvs} source distribution. In some versions of cvs.texi(,14347) @sc{cvs}, @file{log.pl} has been part of the default cvs.texi(,14348) @sc{cvs} installation. The @file{log.pl} script gets cvs.texi(,14349) called from the @file{loginfo} administrative file. cvs.texi(,14350) Check that the arguments passed in @file{loginfo} match cvs.texi(,14351) what your version of @file{log.pl} expects. In cvs.texi(,14352) particular, the @file{log.pl} from @sc{cvs} 1.3 and cvs.texi(,14353) older expects the logfile as an argument whereas the cvs.texi(,14354) @file{log.pl} from @sc{cvs} 1.5 and newer expects the cvs.texi(,14355) logfile to be specified with a @samp{-f} option. Of cvs.texi(,14356) course, if you don't need @file{log.pl} you can just cvs.texi(,14357) comment it out of @file{loginfo}. cvs.texi(,14358) cvs.texi(,14359) @item cvs [update aborted]: unexpected EOF reading @var{file},v cvs.texi(,14360) See @samp{EOF in key in RCS file}. cvs.texi(,14361) cvs.texi(,14362) @item cvs [login aborted]: unrecognized auth response from @var{server} cvs.texi(,14363) This message typically means that the server is not set cvs.texi(,14364) up properly. For example, if @file{inetd.conf} points cvs.texi(,14365) to a nonexistent cvs executable. To debug it further, cvs.texi(,14366) find the log file which inetd writes cvs.texi(,14367) (@file{/var/log/messages} or whatever inetd uses on cvs.texi(,14368) your system). For details, see @ref{Connection}, and cvs.texi(,14369) @ref{Password authentication server}. cvs.texi(,14370) cvs.texi(,14371) @item cvs commit: Up-to-date check failed for `@var{file}' cvs.texi(,14372) This means that someone else has committed a change to cvs.texi(,14373) that file since the last time that you did a @code{cvs cvs.texi(,14374) update}. So before proceeding with your @code{cvs cvs.texi(,14375) commit} you need to @code{cvs update}. @sc{cvs} will merge cvs.texi(,14376) the changes that you made and the changes that the cvs.texi(,14377) other person made. If it does not detect any conflicts cvs.texi(,14378) it will report @samp{M @var{file}} and you are ready cvs.texi(,14379) to @code{cvs commit}. If it detects conflicts it will cvs.texi(,14380) print a message saying so, will report @samp{C @var{file}}, cvs.texi(,14381) and you need to manually resolve the cvs.texi(,14382) conflict. For more details on this process see cvs.texi(,14383) @ref{Conflicts example}. cvs.texi(,14384) cvs.texi(,14385) @item Usage: diff3 [-exEX3 [-i | -m] [-L label1 -L label3]] file1 file2 file3 cvs.texi(,14386) @example cvs.texi(,14387) Only one of [exEX3] allowed cvs.texi(,14388) @end example cvs.texi(,14389) This indicates a problem with the installation of cvs.texi(,14390) @code{diff3} and @code{rcsmerge}. Specifically cvs.texi(,14391) @code{rcsmerge} was compiled to look for GNU diff3, but cvs.texi(,14392) it is finding unix diff3 instead. The exact text of cvs.texi(,14393) the message will vary depending on the system. The cvs.texi(,14394) simplest solution is to upgrade to a current version of cvs.texi(,14395) @sc{cvs}, which does not rely on external cvs.texi(,14396) @code{rcsmerge} or @code{diff3} programs. cvs.texi(,14397) cvs.texi(,14398) @item warning: unrecognized response `@var{text}' from cvs server cvs.texi(,14399) If @var{text} contains a valid response (such as cvs.texi(,14400) @samp{ok}) followed by an extra carriage return cvs.texi(,14401) character (on many systems this will cause the second cvs.texi(,14402) part of the message to overwrite the first part), then cvs.texi(,14403) it probably means that you are using the @samp{:ext:} cvs.texi(,14404) access method with a version of rsh, such as most cvs.texi(,14405) non-unix rsh versions, which does not by default cvs.texi(,14406) provide a transparent data stream. In such cases you cvs.texi(,14407) probably want to try @samp{:server:} instead of cvs.texi(,14408) @samp{:ext:}. If @var{text} is something else, this cvs.texi(,14409) may signify a problem with your @sc{cvs} server. cvs.texi(,14410) Double-check your installation against the instructions cvs.texi(,14411) for setting up the @sc{cvs} server. cvs.texi(,14412) @c FIXCVS: should be printing CR as \r or \015 or some cvs.texi(,14413) @c such, probably. cvs.texi(,14414) cvs.texi(,14415) @item cvs commit: [@var{time}] waiting for @var{user}'s lock in @var{directory} cvs.texi(,14416) This is a normal message, not an error. See cvs.texi(,14417) @ref{Concurrency}, for more details. cvs.texi(,14418) cvs.texi(,14419) @item cvs commit: warning: editor session failed cvs.texi(,14420) @cindex Exit status, of editor cvs.texi(,14421) This means that the editor which @sc{cvs} is using exits with a nonzero cvs.texi(,14422) exit status. Some versions of vi will do this even when there was not cvs.texi(,14423) a problem editing the file. If so, point the cvs.texi(,14424) @code{CVSEDITOR} environment variable to a small script cvs.texi(,14425) such as: cvs.texi(,14426) cvs.texi(,14427) @example cvs.texi(,14428) #!/bin/sh cvs.texi(,14429) vi $* cvs.texi(,14430) exit 0 cvs.texi(,14431) @end example cvs.texi(,14432) cvs.texi(,14433) @c "warning: foo was lost" and "no longer pertinent" (both normal). cvs.texi(,14434) @c Would be nice to write these up--they are cvs.texi(,14435) @c potentially confusing for the new user. cvs.texi(,14436) @end table cvs.texi(,14437) cvs.texi(,14438) @node Connection cvs.texi(,14439) @appendixsec Trouble making a connection to a CVS server cvs.texi(,14440) cvs.texi(,14441) This section concerns what to do if you are having cvs.texi(,14442) trouble making a connection to a @sc{cvs} server. If cvs.texi(,14443) you are running the @sc{cvs} command line client cvs.texi(,14444) running on Windows, first upgrade the client to cvs.texi(,14445) @sc{cvs} 1.9.12 or later. The error reporting in cvs.texi(,14446) earlier versions provided much less information about cvs.texi(,14447) what the problem was. If the client is non-Windows, cvs.texi(,14448) @sc{cvs} 1.9 should be fine. cvs.texi(,14449) cvs.texi(,14450) If the error messages are not sufficient to track down cvs.texi(,14451) the problem, the next steps depend largely on which cvs.texi(,14452) access method you are using. cvs.texi(,14453) cvs.texi(,14454) @table @code cvs.texi(,14455) @cindex :ext:, troubleshooting cvs.texi(,14456) @item :ext: cvs.texi(,14457) Try running the rsh program from the command line. For cvs.texi(,14458) example: "rsh servername cvs -v" should print @sc{cvs} cvs.texi(,14459) version information. If this doesn't work, you need to cvs.texi(,14460) fix it before you can worry about @sc{cvs} problems. cvs.texi(,14461) cvs.texi(,14462) @cindex :server:, troubleshooting cvs.texi(,14463) @item :server: cvs.texi(,14464) You don't need a command line rsh program to use this cvs.texi(,14465) access method, but if you have an rsh program around, cvs.texi(,14466) it may be useful as a debugging tool. Follow the cvs.texi(,14467) directions given for :ext:. cvs.texi(,14468) cvs.texi(,14469) @cindex :pserver:, troubleshooting cvs.texi(,14470) @item :pserver: cvs.texi(,14471) Errors along the lines of "connection refused" typically indicate cvs.texi(,14472) that inetd isn't even listening for connections on port 2401 cvs.texi(,14473) whereas errors like "connection reset by peer", cvs.texi(,14474) "received broken pipe signal", "recv() from server: EOF", cvs.texi(,14475) or "end of file from server" cvs.texi(,14476) typically indicate that inetd is listening for cvs.texi(,14477) connections but is unable to start @sc{cvs} (this is frequently cvs.texi(,14478) caused by having an incorrect path in @file{inetd.conf} cvs.texi(,14479) or by firewall software rejecting the connection). cvs.texi(,14480) "unrecognized auth response" errors are caused by a bad command cvs.texi(,14481) line in @file{inetd.conf}, typically an invalid option or forgetting cvs.texi(,14482) to put the @samp{pserver} command at the end of the line. cvs.texi(,14483) Another less common problem is invisible control characters that cvs.texi(,14484) your editor "helpfully" added without you noticing. cvs.texi(,14485) cvs.texi(,14486) One good debugging tool is to "telnet servername cvs.texi(,14487) 2401". After connecting, send any text (for example cvs.texi(,14488) "foo" followed by return). If @sc{cvs} is working cvs.texi(,14489) correctly, it will respond with cvs.texi(,14490) cvs.texi(,14491) @example cvs.texi(,14492) cvs [pserver aborted]: bad auth protocol start: foo cvs.texi(,14493) @end example cvs.texi(,14494) cvs.texi(,14495) If instead you get: cvs.texi(,14496) cvs.texi(,14497) @example cvs.texi(,14498) Usage: cvs [cvs-options] command [command-options-and-arguments] cvs.texi(,14499) ... cvs.texi(,14500) @end example cvs.texi(,14501) cvs.texi(,14502) @noindent cvs.texi(,14503) then you're missing the @samp{pserver} command at the end of the cvs.texi(,14504) line in @file{inetd.conf}; check to make sure that the entire command cvs.texi(,14505) is on one line and that it's complete. cvs.texi(,14506) cvs.texi(,14507) Likewise, if you get something like: cvs.texi(,14508) cvs.texi(,14509) @example cvs.texi(,14510) Unknown command: `pserved' cvs.texi(,14511) cvs.texi(,14512) CVS commands are: cvs.texi(,14513) add Add a new file/directory to the repository cvs.texi(,14514) ... cvs.texi(,14515) @end example cvs.texi(,14516) cvs.texi(,14517) @noindent cvs.texi(,14518) then you've misspelled @samp{pserver} in some way. If it isn't cvs.texi(,14519) obvious, check for invisible control characters (particularly cvs.texi(,14520) carriage returns) in @file{inetd.conf}. cvs.texi(,14521) cvs.texi(,14522) If it fails to work at all, then make sure inetd is working cvs.texi(,14523) right. Change the invocation in @file{inetd.conf} to run the cvs.texi(,14524) echo program instead of cvs. For example: cvs.texi(,14525) cvs.texi(,14526) @example cvs.texi(,14527) 2401 stream tcp nowait root /bin/echo echo hello cvs.texi(,14528) @end example cvs.texi(,14529) cvs.texi(,14530) After making that change and instructing inetd to cvs.texi(,14531) re-read its configuration file, "telnet servername cvs.texi(,14532) 2401" should show you the text hello and then the cvs.texi(,14533) server should close the connection. If this doesn't cvs.texi(,14534) work, you need to fix it before you can worry about cvs.texi(,14535) @sc{cvs} problems. cvs.texi(,14536) cvs.texi(,14537) On AIX systems, the system will often have its own cvs.texi(,14538) program trying to use port 2401. This is AIX's problem cvs.texi(,14539) in the sense that port 2401 is registered for use with cvs.texi(,14540) @sc{cvs}. I hear that there is an AIX patch available cvs.texi(,14541) to address this problem. cvs.texi(,14542) cvs.texi(,14543) Another good debugging tool is the @samp{-d} cvs.texi(,14544) (debugging) option to inetd. Consult your system cvs.texi(,14545) documentation for more information. cvs.texi(,14546) cvs.texi(,14547) If you seem to be connecting but get errors like: cvs.texi(,14548) cvs.texi(,14549) @example cvs.texi(,14550) cvs server: cannot open /root/.cvsignore: Permission denied cvs.texi(,14551) cvs [server aborted]: can't chdir(/root): Permission denied cvs.texi(,14552) @end example cvs.texi(,14553) cvs.texi(,14554) @noindent cvs.texi(,14555) then you probably haven't specified @samp{-f} in @file{inetd.conf}. cvs.texi(,14556) (In releases prior to @sc{cvs} 1.11.1, this problem can be caused by cvs.texi(,14557) your system setting the @code{$HOME} environment variable cvs.texi(,14558) for programs being run by inetd. In this case, you can either cvs.texi(,14559) have inetd run a shell script that unsets @code{$HOME} and then runs cvs.texi(,14560) @sc{cvs}, or you can use @code{env} to run @sc{cvs} with a pristine cvs.texi(,14561) environment.) cvs.texi(,14562) cvs.texi(,14563) If you can connect successfully for a while but then can't, cvs.texi(,14564) you've probably hit inetd's rate limit. cvs.texi(,14565) (If inetd receives too many requests for the same service cvs.texi(,14566) in a short period of time, it assumes that something is wrong cvs.texi(,14567) and temporarily disables the service.) cvs.texi(,14568) Check your inetd documentation to find out how to adjust the cvs.texi(,14569) rate limit (some versions of inetd have a single rate limit, cvs.texi(,14570) others allow you to set the limit for each service separately.) cvs.texi(,14571) @end table cvs.texi(,14572) cvs.texi(,14573) @node Other problems cvs.texi(,14574) @appendixsec Other common problems cvs.texi(,14575) cvs.texi(,14576) Here is a list of problems which do not fit into the cvs.texi(,14577) above categories. They are in no particular order. cvs.texi(,14578) cvs.texi(,14579) @itemize @bullet cvs.texi(,14580) @item cvs.texi(,14581) On Windows, if there is a 30 second or so delay when cvs.texi(,14582) you run a @sc{cvs} command, it may mean that you have cvs.texi(,14583) your home directory set to @file{C:/}, for example (see cvs.texi(,14584) @code{HOMEDRIVE} and @code{HOMEPATH} in cvs.texi(,14585) @ref{Environment variables}). @sc{cvs} expects the home cvs.texi(,14586) directory to not end in a slash, for example @file{C:} cvs.texi(,14587) or @file{C:\cvs}. cvs.texi(,14588) @c FIXCVS: CVS should at least detect this and print an cvs.texi(,14589) @c error, presumably. cvs.texi(,14590) cvs.texi(,14591) @item cvs.texi(,14592) If you are running @sc{cvs} 1.9.18 or older, and cvs.texi(,14593) @code{cvs update} finds a conflict and tries to cvs.texi(,14594) merge, as described in @ref{Conflicts example}, but cvs.texi(,14595) doesn't tell you there were conflicts, then you may cvs.texi(,14596) have an old version of @sc{rcs}. The easiest solution cvs.texi(,14597) probably is to upgrade to a current version of cvs.texi(,14598) @sc{cvs}, which does not rely on external @sc{rcs} cvs.texi(,14599) programs. cvs.texi(,14600) @end itemize cvs.texi(,14601) cvs.texi(,14602) @c --------------------------------------------------------------------- cvs.texi(,14603) @node Credits cvs.texi(,14604) @appendix Credits cvs.texi(,14605) cvs.texi(,14606) @cindex Contributors (manual) cvs.texi(,14607) @cindex Credits (manual) cvs.texi(,14608) Roland Pesch, then of Cygnus Support <@t{roland@@wrs.com}> cvs.texi(,14609) wrote the manual pages which were distributed with cvs.texi(,14610) @sc{cvs} 1.3. Much of their text was copied into this cvs.texi(,14611) manual. He also read an early draft cvs.texi(,14612) of this manual and contributed many ideas and cvs.texi(,14613) corrections. cvs.texi(,14614) cvs.texi(,14615) The mailing-list @code{info-cvs} is sometimes cvs.texi(,14616) informative. I have included information from postings cvs.texi(,14617) made by the following persons: cvs.texi(,14618) David G. Grubbs <@t{dgg@@think.com}>. cvs.texi(,14619) cvs.texi(,14620) Some text has been extracted from the man pages for cvs.texi(,14621) @sc{rcs}. cvs.texi(,14622) cvs.texi(,14623) The @sc{cvs} @sc{faq} by David G. Grubbs has provided cvs.texi(,14624) useful material. The @sc{faq} is no longer maintained, cvs.texi(,14625) however, and this manual is about the closest thing there cvs.texi(,14626) is to a successor (with respect to documenting how to cvs.texi(,14627) use @sc{cvs}, at least). cvs.texi(,14628) cvs.texi(,14629) In addition, the following persons have helped by cvs.texi(,14630) telling me about mistakes I've made: cvs.texi(,14631) cvs.texi(,14632) @display cvs.texi(,14633) Roxanne Brunskill <@t{rbrunski@@datap.ca}>, cvs.texi(,14634) Kathy Dyer <@t{dyer@@phoenix.ocf.llnl.gov}>, cvs.texi(,14635) Karl Pingle <@t{pingle@@acuson.com}>, cvs.texi(,14636) Thomas A Peterson <@t{tap@@src.honeywell.com}>, cvs.texi(,14637) Inge Wallin <@t{ingwa@@signum.se}>, cvs.texi(,14638) Dirk Koschuetzki <@t{koschuet@@fmi.uni-passau.de}> cvs.texi(,14639) and Michael Brown <@t{brown@@wi.extrel.com}>. cvs.texi(,14640) @end display cvs.texi(,14641) cvs.texi(,14642) The list of contributors here is not comprehensive; for a more cvs.texi(,14643) complete list of who has contributed to this manual see cvs.texi(,14644) the file @file{doc/ChangeLog} in the @sc{cvs} source cvs.texi(,14645) distribution. cvs.texi(,14646) cvs.texi(,14647) @c --------------------------------------------------------------------- cvs.texi(,14648) @node BUGS cvs.texi(,14649) @appendix Dealing with bugs in CVS or this manual cvs.texi(,14650) cvs.texi(,14651) @cindex Bugs in this manual or CVS cvs.texi(,14652) Neither @sc{cvs} nor this manual is perfect, and they cvs.texi(,14653) probably never will be. If you are having trouble cvs.texi(,14654) using @sc{cvs}, or think you have found a bug, there cvs.texi(,14655) are a number of things you can do about it. Note that cvs.texi(,14656) if the manual is unclear, that can be considered a bug cvs.texi(,14657) in the manual, so these problems are often worth doing cvs.texi(,14658) something about as well as problems with @sc{cvs} itself. cvs.texi(,14659) cvs.texi(,14660) @cindex Reporting bugs cvs.texi(,14661) @cindex Bugs, reporting cvs.texi(,14662) @cindex Errors, reporting cvs.texi(,14663) @itemize @bullet cvs.texi(,14664) @item cvs.texi(,14665) If you want someone to help you and fix bugs that you cvs.texi(,14666) report, there are companies which will do that for a cvs.texi(,14667) fee. One such company is: cvs.texi(,14668) cvs.texi(,14669) @cindex Ximbiot cvs.texi(,14670) @cindex Support, getting CVS support cvs.texi(,14671) @example cvs.texi(,14672) Ximbiot cvs.texi(,14673) 319 S. River St. cvs.texi(,14674) Harrisburg, PA 17104-1657 cvs.texi(,14675) USA cvs.texi(,14676) Email: info@@ximbiot.com cvs.texi(,14677) Phone: (717) 579-6168 cvs.texi(,14678) Fax: (717) 234-3125 cvs.texi(,14679) http://ximbiot.com/ cvs.texi(,14680) cvs.texi(,14681) @end example cvs.texi(,14682) cvs.texi(,14683) @item cvs.texi(,14684) If you got @sc{cvs} through a distributor, such as an cvs.texi(,14685) operating system vendor or a vendor of freeware cvs.texi(,14686) @sc{cd-rom}s, you may wish to see whether the cvs.texi(,14687) distributor provides support. Often, they will provide cvs.texi(,14688) no support or minimal support, but this may vary from cvs.texi(,14689) distributor to distributor. cvs.texi(,14690) cvs.texi(,14691) @item cvs.texi(,14692) If you have the skills and time to do so, you may wish cvs.texi(,14693) to fix the bug yourself. If you wish to submit your cvs.texi(,14694) fix for inclusion in future releases of @sc{cvs}, see cvs.texi(,14695) the file @sc{hacking} in the @sc{cvs} source cvs.texi(,14696) distribution. It contains much more information on the cvs.texi(,14697) process of submitting fixes. cvs.texi(,14698) cvs.texi(,14699) @item cvs.texi(,14700) There may be resources on the net which can help. Two cvs.texi(,14701) good places to start are: cvs.texi(,14702) cvs.texi(,14703) @example cvs.texi(,14704) http://www.cvshome.org cvs.texi(,14705) http://www.loria.fr/~molli/cvs-index.html cvs.texi(,14706) @end example cvs.texi(,14707) cvs.texi(,14708) If you are so inspired, increasing the information cvs.texi(,14709) available on the net is likely to be appreciated. For cvs.texi(,14710) example, before the standard @sc{cvs} distribution cvs.texi(,14711) worked on Windows 95, there was a web page with some cvs.texi(,14712) explanation and patches for running @sc{cvs} on Windows cvs.texi(,14713) 95, and various people helped out by mentioning this cvs.texi(,14714) page on mailing lists or newsgroups when the subject cvs.texi(,14715) came up. cvs.texi(,14716) cvs.texi(,14717) @item cvs.texi(,14718) It is also possible to report bugs to @code{bug-cvs}. cvs.texi(,14719) Note that someone may or may not want to do anything cvs.texi(,14720) with your bug report---if you need a solution consider cvs.texi(,14721) one of the options mentioned above. People probably do cvs.texi(,14722) want to hear about bugs which are particularly severe cvs.texi(,14723) in consequences and/or easy to fix, however. You can cvs.texi(,14724) also increase your odds by being as clear as possible cvs.texi(,14725) about the exact nature of the bug and any other cvs.texi(,14726) relevant information. The way to report bugs is to cvs.texi(,14727) send email to @code{bug-cvs@@gnu.org}. Note cvs.texi(,14728) that submissions to @code{bug-cvs} may be distributed cvs.texi(,14729) under the terms of the @sc{gnu} Public License, so if cvs.texi(,14730) you don't like this, don't submit them. There is cvs.texi(,14731) usually no justification for sending mail directly to cvs.texi(,14732) one of the @sc{cvs} maintainers rather than to cvs.texi(,14733) @code{bug-cvs}; those maintainers who want to hear cvs.texi(,14734) about such bug reports read @code{bug-cvs}. Also note cvs.texi(,14735) that sending a bug report to other mailing lists or cvs.texi(,14736) newsgroups is @emph{not} a substitute for sending it to cvs.texi(,14737) @code{bug-cvs}. It is fine to discuss @sc{cvs} bugs on cvs.texi(,14738) whatever forum you prefer, but there are not cvs.texi(,14739) necessarily any maintainers reading bug reports sent cvs.texi(,14740) anywhere except @code{bug-cvs}. cvs.texi(,14741) @end itemize cvs.texi(,14742) cvs.texi(,14743) @cindex Known bugs in this manual or CVS cvs.texi(,14744) People often ask if there is a list of known bugs or cvs.texi(,14745) whether a particular bug is a known one. The file cvs.texi(,14746) @sc{bugs} in the @sc{cvs} source distribution is one cvs.texi(,14747) list of known bugs, but it doesn't necessarily try to cvs.texi(,14748) be comprehensive. Perhaps there will never be a cvs.texi(,14749) comprehensive, detailed list of known bugs. cvs.texi(,14750) cvs.texi(,14751) @c --------------------------------------------------------------------- cvs.texi(,14752) @node Index cvs.texi(,14753) @unnumbered Index cvs.texi(,14754) @cindex Index cvs.texi(,14755) cvs.texi(,14756) @printindex cp cvs.texi(,14757) cvs.texi(,14758) @summarycontents cvs.texi(,14759) cvs.texi(,14760) @contents cvs.texi(,14761) cvs.texi(,14762) @bye texi2html-1.82/test/manuals/res/texi_cvs/cvs.passtexi0000644000175000017500000266403511264347121024662 0ustar flichtenheldflichtenheldcvs.texi(,2) @comment Documentation for CVS. cvs.texi(,3) @setfilename cvs.info cvs.texi(,38) cvs.texi(,39) @comment This file is part of the CVS distribution. cvs.texi(,40) cvs.texi(,41) @comment CVS is free software; you can redistribute it and/or modify cvs.texi(,42) @comment it under the terms of the GNU General Public License as published by cvs.texi(,43) @comment the Free Software Foundation; either version 2, or (at your option) cvs.texi(,44) @comment any later version. cvs.texi(,45) cvs.texi(,46) @comment CVS is distributed in the hope that it will be useful, cvs.texi(,47) @comment but WITHOUT ANY WARRANTY; without even the implied warranty of cvs.texi(,48) @comment MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the cvs.texi(,49) @comment GNU General Public License for more details. cvs.texi(,50) cvs.texi(,51) @c See ../README for A4 vs. US letter size. cvs.texi(,52) @c When we provided A4 postscript, and people tried to cvs.texi(,53) @c print it on US letter, the usual complaint was that the cvs.texi(,54) @c page numbers would get cut off. cvs.texi(,55) @c If one prints US letter on A4, reportedly there is cvs.texi(,56) @c some extra space at the top and/or bottom, and the side cvs.texi(,57) @c margins are a bit narrow, but no text is lost. cvs.texi(,58) @c cvs.texi(,59) @c See cvs.texi(,60) @c http://www.ft.uni-erlangen.de/~mskuhn/iso-paper.html cvs.texi(,61) @c for more on paper sizes. Insuring that margins are cvs.texi(,62) @c big enough to print on either A4 or US letter does cvs.texi(,63) @c indeed seem to be the usual approach (RFC2346). cvs.texi(,64) cvs.texi(,65) @c This document seems to get overfull hboxes with some cvs.texi(,66) @c frequency (probably because the tendency is to cvs.texi(,67) @c sanity-check it with "make info" and run TeX less cvs.texi(,68) @c often). The big ugly boxes just seem to add insult cvs.texi(,69) @c to injury, and I'm not aware of them helping to fix cvs.texi(,70) @c the overfull hboxes at all. cvs.texi(,71) @finalout cvs.texi(,72) version.texi(,1) @set UPDATED 28 March 2002 version.texi(,2) @set UPDATED-MONTH March 2002 version.texi(,3) @set EDITION 4.2 version.texi(,4) @set VERSION 4.2 cvs.texi(,74) @settitle CVS---Concurrent Versions System v4.2 cvs.texi(,75) @setchapternewpage odd cvs.texi(,76) cvs.texi(,77) @c -- TODO list: cvs.texi(,78) @c -- Fix all lines that match "^@c -- " cvs.texi(,79) @c -- Also places marked with FIXME should be manual cvs.texi(,80) @c problems (as opposed to FIXCVS for CVS problems). cvs.texi(,81) cvs.texi(,82) @c @splitrcskeyword{} is used to avoid keyword expansion. It is replaced by cvs.texi(,83) @c @asis when generating info and dvi, and by in the generated html, cvs.texi(,84) @c such that keywords are not expanded in the generated html. cvs.texi(,90) cvs.texi(,96) cvs.texi(,97) @dircategory GNU Packages cvs.texi(,101) @dircategory Individual utilities cvs.texi(,105) cvs.texi(,106) @comment The titlepage section does not appear in the Info file. cvs.texi(,107) @titlepage cvs.texi(,108) @sp 4 cvs.texi(,109) @comment The title is printed in a large font. cvs.texi(,110) @center @titlefont{Version Management} cvs.texi(,111) @sp cvs.texi(,112) @center @titlefont{with} cvs.texi(,113) @sp cvs.texi(,114) @center @titlefont{CVS} cvs.texi(,115) @sp 2 cvs.texi(,116) @center for @sc{cvs} 4.2 cvs.texi(,117) @comment -release- cvs.texi(,118) @sp 3 cvs.texi(,119) @center Per Cederqvist et al cvs.texi(,120) cvs.texi(,121) @comment The following two commands start the copyright page cvs.texi(,122) @comment for the printed manual. This will not appear in the Info file. cvs.texi(,123) @page cvs.texi(,124) @vskip 0pt plus 1filll cvs.texi(copyleftnotice,125) @noindent cvs.texi(copyleftnotice,125) Copyright @copyright{} 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, cvs.texi(copyleftnotice,125) 2001, 2002, 2003 Free Software Foundation, Inc. cvs.texi(copyleftnotice,125) cvs.texi(copyleftnotice,125) @multitable @columnfractions .12 .88 cvs.texi(copyleftnotice,125) @item Portions cvs.texi(copyleftnotice,125) @item @tab Copyright @copyright{} 1999, 2000, 2001, 2002, 2003 Derek R. Price, cvs.texi(copyleftnotice,125) @item @tab Copyright @copyright{} 2002, 2003 Ximbiot , cvs.texi(copyleftnotice,125) @item @tab Copyright @copyright{} 1992, 1993, 1999 Signum Support AB, cvs.texi(copyleftnotice,125) @item @tab and Copyright @copyright{} others. cvs.texi(copyleftnotice,125) @end multitable cvs.texi(copyleftnotice,125) cvs.texi(copyleftnotice,125) Permission is granted to make and distribute verbatim copies of cvs.texi(copyleftnotice,125) this manual provided the copyright notice and this permission notice cvs.texi(copyleftnotice,125) are preserved on all copies. cvs.texi(copyleftnotice,125) cvs.texi(copyleftnotice,125) Permission is granted to copy and distribute modified versions of this cvs.texi(copyleftnotice,125) manual under the conditions for verbatim copying, provided also that the cvs.texi(copyleftnotice,125) entire resulting derived work is distributed under the terms of a cvs.texi(copyleftnotice,125) permission notice identical to this one. cvs.texi(copyleftnotice,125) cvs.texi(copyleftnotice,125) Permission is granted to copy and distribute translations of this manual cvs.texi(copyleftnotice,125) into another language, under the above conditions for modified versions, cvs.texi(copyleftnotice,125) except that this permission notice may be stated in a translation cvs.texi(copyleftnotice,125) approved by the Free Software Foundation. cvs.texi(,126) @end titlepage cvs.texi(,127) cvs.texi(,128) @comment ================================================================ cvs.texi(,129) @comment The real text starts here cvs.texi(,130) @comment ================================================================ cvs.texi(,131) cvs.texi(,133) @c --------------------------------------------------------------------- cvs.texi(,134) @node Top cvs.texi(,135) @top cvs.texi(,136) cvs.texi(,137) This info manual describes how to use and administer cvs.texi(,138) @sc{cvs} version 4.2. cvs.texi(,140) cvs.texi(,144) cvs.texi(,145) @c This menu is pretty long. Not sure how easily that cvs.texi(,146) @c can be fixed (no brilliant ideas right away)... cvs.texi(,147) @menu cvs.texi(,148) * Overview:: An introduction to CVS cvs.texi(,149) * Repository:: Where all your sources are stored cvs.texi(,150) * Starting a new project:: Starting a project with CVS cvs.texi(,151) * Revisions:: Numeric and symbolic names for revisions cvs.texi(,152) * Branching and merging:: Diverging/rejoining branches of development cvs.texi(,153) * Recursive behavior:: CVS descends directories cvs.texi(,154) * Adding and removing:: Adding/removing/renaming files/directories cvs.texi(,155) * History browsing:: Viewing the history of files in various ways cvs.texi(,156) cvs.texi(,157) CVS and the Real World. cvs.texi(,158) ----------------------- cvs.texi(,159) * Binary files:: CVS can handle binary files cvs.texi(,160) * Multiple developers:: How CVS helps a group of developers cvs.texi(,161) * Revision management:: Policy questions for revision management cvs.texi(,162) * Keyword substitution:: CVS can include the revision inside the file cvs.texi(,163) * Tracking sources:: Tracking third-party sources cvs.texi(,164) * Builds:: Issues related to CVS and builds cvs.texi(,165) * Special Files:: Devices, links and other non-regular files cvs.texi(,166) cvs.texi(,167) References. cvs.texi(,168) ----------- cvs.texi(,169) * CVS commands:: CVS commands share some things cvs.texi(,170) * Invoking CVS:: Quick reference to CVS commands cvs.texi(,171) * Administrative files:: Reference manual for the Administrative files cvs.texi(,172) * Environment variables:: All environment variables which affect CVS cvs.texi(,173) * Compatibility:: Upgrading CVS versions cvs.texi(,174) * Troubleshooting:: Some tips when nothing works cvs.texi(,175) * Credits:: Some of the contributors to this manual cvs.texi(,176) * BUGS:: Dealing with bugs in CVS or this manual cvs.texi(,177) * Index:: Index cvs.texi(,178) @end menu cvs.texi(,179) cvs.texi(,180) @c --------------------------------------------------------------------- cvs.texi(,181) @node Overview cvs.texi(,182) @chapter Overview cvs.texi(,183) @cindex Overview cvs.texi(,184) cvs.texi(,185) This chapter is for people who have never used cvs.texi(,186) @sc{cvs}, and perhaps have never used version control cvs.texi(,187) software before. cvs.texi(,188) cvs.texi(,189) If you are already familiar with @sc{cvs} and are just cvs.texi(,190) trying to learn a particular feature or remember a cvs.texi(,191) certain command, you can probably skip everything here. cvs.texi(,192) cvs.texi(,193) @menu cvs.texi(,194) * What is CVS?:: What you can do with @sc{cvs} cvs.texi(,195) * What is CVS not?:: Problems @sc{cvs} doesn't try to solve cvs.texi(,196) * A sample session:: A tour of basic @sc{cvs} usage cvs.texi(,197) @end menu cvs.texi(,198) cvs.texi(,199) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,200) @node What is CVS? cvs.texi(,201) @section What is CVS? cvs.texi(,202) @cindex What is CVS? cvs.texi(,203) @cindex Introduction to CVS cvs.texi(,204) @cindex CVS, introduction to cvs.texi(,205) cvs.texi(,206) @sc{cvs} is a version control system. Using it, you can cvs.texi(,207) record the history of your source files. cvs.texi(,208) cvs.texi(,209) @c -- /// cvs.texi(,210) @c -- ///Those who cannot remember the past are condemned to repeat it. cvs.texi(,211) @c -- /// -- George Santayana cvs.texi(,212) @c -- ////// cvs.texi(,213) cvs.texi(,214) @c -- Insert history quote here! cvs.texi(,215) For example, bugs sometimes creep in when cvs.texi(,216) software is modified, and you might not detect the bug cvs.texi(,217) until a long time after you make the modification. cvs.texi(,218) With @sc{cvs}, you can easily retrieve old versions to see cvs.texi(,219) exactly which change caused the bug. This can cvs.texi(,220) sometimes be a big help. cvs.texi(,221) cvs.texi(,222) You could of course save every version of every file cvs.texi(,223) you have ever created. This would cvs.texi(,224) however waste an enormous amount of disk space. @sc{cvs} cvs.texi(,225) stores all the versions of a file in a single file in a cvs.texi(,226) clever way that only stores the differences between cvs.texi(,227) versions. cvs.texi(,228) cvs.texi(,229) @sc{cvs} also helps you if you are part of a group of people working cvs.texi(,230) on the same project. It is all too easy to overwrite cvs.texi(,231) each others' changes unless you are extremely careful. cvs.texi(,232) Some editors, like @sc{gnu} Emacs, try to make sure that cvs.texi(,233) the same file is never modified by two people at the cvs.texi(,234) same time. Unfortunately, if someone is using another cvs.texi(,235) editor, that safeguard will not work. @sc{cvs} solves this problem cvs.texi(,236) by insulating the different developers from each other. Every cvs.texi(,237) developer works in his own directory, and @sc{cvs} merges cvs.texi(,238) the work when each developer is done. cvs.texi(,239) cvs.texi(,240) @cindex History of CVS cvs.texi(,241) @cindex CVS, history of cvs.texi(,242) @cindex Credits (CVS program) cvs.texi(,243) @cindex Contributors (CVS program) cvs.texi(,244) @sc{cvs} started out as a bunch of shell scripts written by cvs.texi(,245) Dick Grune, posted to the newsgroup cvs.texi(,246) @code{comp.sources.unix} in the volume 6 cvs.texi(,247) release of July, 1986. While no actual code from cvs.texi(,248) these shell scripts is present in the current version cvs.texi(,249) of @sc{cvs} much of the @sc{cvs} conflict resolution algorithms cvs.texi(,250) come from them. cvs.texi(,251) cvs.texi(,252) In April, 1989, Brian Berliner designed and coded @sc{cvs}. cvs.texi(,253) Jeff Polk later helped Brian with the design of the @sc{cvs} cvs.texi(,254) module and vendor branch support. cvs.texi(,255) cvs.texi(,256) @cindex Source, getting CVS source cvs.texi(,257) You can get @sc{cvs} in a variety of ways, including cvs.texi(,258) free download from the internet. For more information cvs.texi(,259) on downloading @sc{cvs} and other @sc{cvs} topics, see: cvs.texi(,260) cvs.texi(,261) @example cvs.texi(,262) http://www.cvshome.org/ cvs.texi(,263) http://www.loria.fr/~molli/cvs-index.html cvs.texi(,264) @end example cvs.texi(,265) cvs.texi(,266) @cindex Mailing list cvs.texi(,267) @cindex List, mailing list cvs.texi(,268) @cindex Newsgroups cvs.texi(,269) There is a mailing list, known as @w{@code{info-cvs}}, cvs.texi(,270) devoted to @sc{cvs}. To subscribe or cvs.texi(,271) unsubscribe cvs.texi(,272) write to cvs.texi(,273) @w{@code{info-cvs-request@@gnu.org}}. cvs.texi(,274) If you prefer a usenet group, the right cvs.texi(,275) group is @code{comp.software.config-mgmt} which is for cvs.texi(,276) @sc{cvs} discussions (along with other configuration cvs.texi(,277) management systems). In the future, it might be cvs.texi(,278) possible to create a cvs.texi(,279) @code{comp.software.config-mgmt.cvs}, but probably only cvs.texi(,280) if there is sufficient @sc{cvs} traffic on cvs.texi(,281) @code{comp.software.config-mgmt}. cvs.texi(,282) @c Other random data is that past attempts to create a cvs.texi(,283) @c gnu.* group have failed (the relevant authorities cvs.texi(,284) @c say they'll do it, but don't), and that tale was very cvs.texi(,285) @c skeptical of comp.software.config-mgmt.cvs when the cvs.texi(,286) @c subject came up around 1995 or so (for one cvs.texi(,287) @c thing, because creating it would be a "reorg" which cvs.texi(,288) @c would need to take a more comprehensive look at the cvs.texi(,289) @c whole comp.software.config-mgmt.* hierarchy). cvs.texi(,290) cvs.texi(,291) You can also subscribe to the @code{bug-cvs} mailing list, cvs.texi(,292) described in more detail in @ref{BUGS}. To subscribe cvs.texi(,293) send mail to @code{bug-cvs-request@@gnu.org}. cvs.texi(,294) cvs.texi(,295) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,296) @node What is CVS not? cvs.texi(,297) @section What is CVS not? cvs.texi(,298) @cindex What is CVS not? cvs.texi(,299) cvs.texi(,300) @sc{cvs} can do a lot of things for you, but it does cvs.texi(,301) not try to be everything for everyone. cvs.texi(,302) cvs.texi(,303) @table @asis cvs.texi(,304) @item @sc{cvs} is not a build system. cvs.texi(,305) cvs.texi(,306) Though the structure of your repository and modules cvs.texi(,307) file interact with your build system cvs.texi(,308) (e.g. @file{Makefile}s), they are essentially cvs.texi(,309) independent. cvs.texi(,310) cvs.texi(,311) @sc{cvs} does not dictate how you build anything. It cvs.texi(,312) merely stores files for retrieval in a tree structure cvs.texi(,313) you devise. cvs.texi(,314) cvs.texi(,315) @sc{cvs} does not dictate how to use disk space in the cvs.texi(,316) checked out working directories. If you write your cvs.texi(,317) @file{Makefile}s or scripts in every directory so they cvs.texi(,318) have to know the relative positions of everything else, cvs.texi(,319) you wind up requiring the entire repository to be cvs.texi(,320) checked out. cvs.texi(,321) cvs.texi(,322) If you modularize your work, and construct a build cvs.texi(,323) system that will share files (via links, mounts, cvs.texi(,324) @code{VPATH} in @file{Makefile}s, etc.), you can cvs.texi(,325) arrange your disk usage however you like. cvs.texi(,326) cvs.texi(,327) But you have to remember that @emph{any} such system is cvs.texi(,328) a lot of work to construct and maintain. @sc{cvs} does cvs.texi(,329) not address the issues involved. cvs.texi(,330) cvs.texi(,331) Of course, you should place the tools created to cvs.texi(,332) support such a build system (scripts, @file{Makefile}s, cvs.texi(,333) etc) under @sc{cvs}. cvs.texi(,334) cvs.texi(,335) Figuring out what files need to be rebuilt when cvs.texi(,336) something changes is, again, something to be handled cvs.texi(,337) outside the scope of @sc{cvs}. One traditional cvs.texi(,338) approach is to use @code{make} for building, and use cvs.texi(,339) some automated tool for generating the dependencies which cvs.texi(,340) @code{make} uses. cvs.texi(,341) cvs.texi(,342) See @ref{Builds}, for more information on doing builds cvs.texi(,343) in conjunction with @sc{cvs}. cvs.texi(,344) cvs.texi(,345) @item @sc{cvs} is not a substitute for management. cvs.texi(,346) cvs.texi(,347) Your managers and project leaders are expected to talk cvs.texi(,348) to you frequently enough to make certain you are aware cvs.texi(,349) of schedules, merge points, branch names and release cvs.texi(,350) dates. If they don't, @sc{cvs} can't help. cvs.texi(,351) cvs.texi(,352) @sc{cvs} is an instrument for making sources dance to cvs.texi(,353) your tune. But you are the piper and the composer. No cvs.texi(,354) instrument plays itself or writes its own music. cvs.texi(,355) cvs.texi(,356) @item @sc{cvs} is not a substitute for developer communication. cvs.texi(,357) cvs.texi(,358) When faced with conflicts within a single file, most cvs.texi(,359) developers manage to resolve them without too much cvs.texi(,360) effort. But a more general definition of ``conflict'' cvs.texi(,361) includes problems too difficult to solve without cvs.texi(,362) communication between developers. cvs.texi(,363) cvs.texi(,364) @sc{cvs} cannot determine when simultaneous changes cvs.texi(,365) within a single file, or across a whole collection of cvs.texi(,366) files, will logically conflict with one another. Its cvs.texi(,367) concept of a @dfn{conflict} is purely textual, arising cvs.texi(,368) when two changes to the same base file are near enough cvs.texi(,369) to spook the merge (i.e. @code{diff3}) command. cvs.texi(,370) cvs.texi(,371) @sc{cvs} does not claim to help at all in figuring out cvs.texi(,372) non-textual or distributed conflicts in program logic. cvs.texi(,373) cvs.texi(,374) For example: Say you change the arguments to function cvs.texi(,375) @code{X} defined in file @file{A}. At the same time, cvs.texi(,376) someone edits file @file{B}, adding new calls to cvs.texi(,377) function @code{X} using the old arguments. You are cvs.texi(,378) outside the realm of @sc{cvs}'s competence. cvs.texi(,379) cvs.texi(,380) Acquire the habit of reading specs and talking to your cvs.texi(,381) peers. cvs.texi(,382) cvs.texi(,383) cvs.texi(,384) @item @sc{cvs} does not have change control cvs.texi(,385) cvs.texi(,386) Change control refers to a number of things. First of cvs.texi(,387) all it can mean @dfn{bug-tracking}, that is being able cvs.texi(,388) to keep a database of reported bugs and the status of cvs.texi(,389) each one (is it fixed? in what release? has the bug cvs.texi(,390) submitter agreed that it is fixed?). For interfacing cvs.texi(,391) @sc{cvs} to an external bug-tracking system, see the cvs.texi(,392) @file{rcsinfo} and @file{verifymsg} files cvs.texi(,393) (@pxref{Administrative files}). cvs.texi(,394) cvs.texi(,395) Another aspect of change control is keeping track of cvs.texi(,396) the fact that changes to several files were in fact cvs.texi(,397) changed together as one logical change. If you check cvs.texi(,398) in several files in a single @code{cvs commit} cvs.texi(,399) operation, @sc{cvs} then forgets that those files were cvs.texi(,400) checked in together, and the fact that they have the cvs.texi(,401) same log message is the only thing tying them cvs.texi(,402) together. Keeping a @sc{gnu} style @file{ChangeLog} cvs.texi(,403) can help somewhat. cvs.texi(,404) @c FIXME: should have an xref to a section which talks cvs.texi(,405) @c more about keeping ChangeLog's with CVS, but that cvs.texi(,406) @c section hasn't been written yet. cvs.texi(,407) cvs.texi(,408) Another aspect of change control, in some systems, is cvs.texi(,409) the ability to keep track of the status of each cvs.texi(,410) change. Some changes have been written by a developer, cvs.texi(,411) others have been reviewed by a second developer, and so cvs.texi(,412) on. Generally, the way to do this with @sc{cvs} is to cvs.texi(,413) generate a diff (using @code{cvs diff} or @code{diff}) cvs.texi(,414) and email it to someone who can then apply it using the cvs.texi(,415) @code{patch} utility. This is very flexible, but cvs.texi(,416) depends on mechanisms outside @sc{cvs} to make sure cvs.texi(,417) nothing falls through the cracks. cvs.texi(,418) cvs.texi(,419) @item @sc{cvs} is not an automated testing program cvs.texi(,420) cvs.texi(,421) It should be possible to enforce mandatory use of a cvs.texi(,422) testsuite using the @code{commitinfo} file. I haven't cvs.texi(,423) heard a lot about projects trying to do that or whether cvs.texi(,424) there are subtle gotchas, however. cvs.texi(,425) cvs.texi(,426) @item @sc{cvs} does not have a builtin process model cvs.texi(,427) cvs.texi(,428) Some systems provide ways to ensure that changes or cvs.texi(,429) releases go through various steps, with various cvs.texi(,430) approvals as needed. Generally, one can accomplish cvs.texi(,431) this with @sc{cvs} but it might be a little more work. cvs.texi(,432) In some cases you'll want to use the @file{commitinfo}, cvs.texi(,433) @file{loginfo}, @file{rcsinfo}, or @file{verifymsg} cvs.texi(,434) files, to require that certain steps be performed cvs.texi(,435) before cvs will allow a checkin. Also consider whether cvs.texi(,436) features such as branches and tags can be used to cvs.texi(,437) perform tasks such as doing work in a development tree cvs.texi(,438) and then merging certain changes over to a stable tree cvs.texi(,439) only once they have been proven. cvs.texi(,440) @end table cvs.texi(,441) cvs.texi(,442) @c --------------------------------------------------------------------- cvs.texi(,443) @node A sample session cvs.texi(,444) @section A sample session cvs.texi(,445) @cindex Example of a work-session cvs.texi(,446) @cindex Getting started cvs.texi(,447) @cindex Work-session, example of cvs.texi(,448) @cindex tc, Trivial Compiler (example) cvs.texi(,449) @cindex Trivial Compiler (example) cvs.texi(,450) cvs.texi(,451) @c I think an example is a pretty good way to start. But cvs.texi(,452) @c somewhere in here, maybe after the sample session, cvs.texi(,453) @c we need something which is kind of cvs.texi(,454) @c a "roadmap" which is more directed at sketching out cvs.texi(,455) @c the functionality of CVS and pointing people to cvs.texi(,456) @c various other parts of the manual. As it stands now cvs.texi(,457) @c people who read in order get dumped right into all cvs.texi(,458) @c manner of hair regarding remote repositories, cvs.texi(,459) @c creating a repository, etc. cvs.texi(,460) @c cvs.texi(,461) @c The following was in the old Basic concepts node. I don't cvs.texi(,462) @c know how good a job it does at introducing modules, cvs.texi(,463) @c or whether they need to be introduced so soon, but cvs.texi(,464) @c something of this sort might go into some cvs.texi(,465) @c introductory material somewhere. cvs.texi(,474) cvs.texi(,475) As a way of introducing @sc{cvs}, we'll go through a cvs.texi(,476) typical work-session using @sc{cvs}. The first thing cvs.texi(,477) to understand is that @sc{cvs} stores all files in a cvs.texi(,478) centralized @dfn{repository} (@pxref{Repository}); this cvs.texi(,479) section assumes that a repository is set up. cvs.texi(,480) @c I'm not sure that the sentence concerning the cvs.texi(,481) @c repository quite tells the user what they need to cvs.texi(,482) @c know at this point. Might need to expand on "centralized" cvs.texi(,483) @c slightly (maybe not here, maybe further down in the example?) cvs.texi(,484) cvs.texi(,485) Suppose you are working on a simple compiler. The source cvs.texi(,486) consists of a handful of C files and a @file{Makefile}. cvs.texi(,487) The compiler is called @samp{tc} (Trivial Compiler), cvs.texi(,488) and the repository is set up so that there is a module cvs.texi(,489) called @samp{tc}. cvs.texi(,490) cvs.texi(,491) @menu cvs.texi(,492) * Getting the source:: Creating a workspace cvs.texi(,493) * Committing your changes:: Making your work available to others cvs.texi(,494) * Cleaning up:: Cleaning up cvs.texi(,495) * Viewing differences:: Viewing differences cvs.texi(,496) @end menu cvs.texi(,497) cvs.texi(,498) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,499) @node Getting the source cvs.texi(,500) @subsection Getting the source cvs.texi(,501) @cindex Getting the source cvs.texi(,502) @cindex Checking out source cvs.texi(,503) @cindex Fetching source cvs.texi(,504) @cindex Source, getting from CVS cvs.texi(,505) @cindex Checkout, example cvs.texi(,506) cvs.texi(,507) The first thing you must do is to get your own working copy of the cvs.texi(,508) source for @samp{tc}. For this, you use the @code{checkout} command: cvs.texi(,509) cvs.texi(,510) @example cvs.texi(,511) $ cvs checkout tc cvs.texi(,512) @end example cvs.texi(,513) cvs.texi(,514) @noindent cvs.texi(,515) This will create a new directory called @file{tc} and populate it with cvs.texi(,516) the source files. cvs.texi(,517) cvs.texi(,518) @example cvs.texi(,519) $ cd tc cvs.texi(,520) $ ls cvs.texi(,521) CVS Makefile backend.c driver.c frontend.c parser.c cvs.texi(,522) @end example cvs.texi(,523) cvs.texi(,524) The @file{CVS} directory is used internally by cvs.texi(,525) @sc{cvs}. Normally, you should not modify or remove cvs.texi(,526) any of the files in it. cvs.texi(,527) cvs.texi(,528) You start your favorite editor, hack away at @file{backend.c}, and a couple cvs.texi(,529) of hours later you have added an optimization pass to the compiler. cvs.texi(,530) A note to @sc{rcs} and @sc{sccs} users: There is no need to lock the files that cvs.texi(,531) you want to edit. @xref{Multiple developers}, for an explanation. cvs.texi(,532) cvs.texi(,533) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,534) @node Committing your changes cvs.texi(,535) @subsection Committing your changes cvs.texi(,536) @cindex Committing changes to files cvs.texi(,537) @cindex Log message entry cvs.texi(,538) cvs.texi(,539) When you have checked that the compiler is still compilable you decide cvs.texi(,540) to make a new version of @file{backend.c}. This will cvs.texi(,541) store your new @file{backend.c} in the repository and cvs.texi(,542) make it available to anyone else who is using that same cvs.texi(,543) repository. cvs.texi(,544) cvs.texi(,545) @example cvs.texi(,546) $ cvs commit backend.c cvs.texi(,547) @end example cvs.texi(,548) cvs.texi(,549) @noindent cvs.texi(,550) @sc{cvs} starts an editor, to allow you to enter a log cvs.texi(,551) message. You type in ``Added an optimization pass.'', cvs.texi(,552) save the temporary file, and exit the editor. cvs.texi(,553) cvs.texi(,554) @cindex CVSEDITOR, environment variable cvs.texi(,555) @cindex EDITOR, environment variable cvs.texi(,556) The environment variable @code{$CVSEDITOR} determines cvs.texi(,557) which editor is started. If @code{$CVSEDITOR} is not cvs.texi(,558) set, then if the environment variable @code{$EDITOR} is cvs.texi(,559) set, it will be used. If both @code{$CVSEDITOR} and cvs.texi(,560) @code{$EDITOR} are not set then there is a default cvs.texi(,561) which will vary with your operating system, for example cvs.texi(,562) @code{vi} for unix or @code{notepad} for Windows cvs.texi(,563) NT/95. cvs.texi(,564) cvs.texi(,565) @cindex VISUAL, environment variable cvs.texi(,566) In addition, @sc{cvs} checks the @code{$VISUAL} environment cvs.texi(,567) variable. Opinions vary on whether this behavior is desirable and cvs.texi(,568) whether future releases of @sc{cvs} should check @code{$VISUAL} or cvs.texi(,569) ignore it. You will be OK either way if you make sure that cvs.texi(,570) @code{$VISUAL} is either unset or set to the same thing as cvs.texi(,571) @code{$EDITOR}. cvs.texi(,572) cvs.texi(,573) @c This probably should go into some new node cvs.texi(,574) @c containing detailed info on the editor, rather than cvs.texi(,575) @c the intro. In fact, perhaps some of the stuff with cvs.texi(,576) @c CVSEDITOR and -m and so on should too. cvs.texi(,577) When @sc{cvs} starts the editor, it includes a list of cvs.texi(,578) files which are modified. For the @sc{cvs} client, cvs.texi(,579) this list is based on comparing the modification time cvs.texi(,580) of the file against the modification time that the file cvs.texi(,581) had when it was last gotten or updated. Therefore, if cvs.texi(,582) a file's modification time has changed but its contents cvs.texi(,583) have not, it will show up as modified. The simplest cvs.texi(,584) way to handle this is simply not to worry about it---if cvs.texi(,585) you proceed with the commit @sc{cvs} will detect that cvs.texi(,586) the contents are not modified and treat it as an cvs.texi(,587) unmodified file. The next @code{update} will clue cvs.texi(,588) @sc{cvs} in to the fact that the file is unmodified, cvs.texi(,589) and it will reset its stored timestamp so that the file cvs.texi(,590) will not show up in future editor sessions. cvs.texi(,591) @c FIXCVS: Might be nice if "commit" and other commands cvs.texi(,592) @c would reset that timestamp too, but currently commit cvs.texi(,593) @c doesn't. cvs.texi(,594) @c FIXME: Need to talk more about the process of cvs.texi(,595) @c prompting for the log message. Like show an example cvs.texi(,596) @c of what it pops up in the editor, for example. Also cvs.texi(,597) @c a discussion of how to get the "a)bort, c)ontinue, cvs.texi(,598) @c e)dit" prompt and what to do with it. Might also cvs.texi(,599) @c work in the suggestion that if you want a diff, you cvs.texi(,600) @c should make it before running commit (someone cvs.texi(,601) @c suggested that the diff pop up in the editor. I'm cvs.texi(,602) @c not sure that is better than telling people to run cvs.texi(,603) @c "cvs diff" first if that is what they want, but if cvs.texi(,604) @c we want to tell people that, the manual possibly cvs.texi(,605) @c should say it). cvs.texi(,606) cvs.texi(,607) If you want to avoid cvs.texi(,608) starting an editor you can specify the log message on cvs.texi(,609) the command line using the @samp{-m} flag instead, like cvs.texi(,610) this: cvs.texi(,611) cvs.texi(,612) @example cvs.texi(,613) $ cvs commit -m "Added an optimization pass" backend.c cvs.texi(,614) @end example cvs.texi(,615) cvs.texi(,616) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,617) @node Cleaning up cvs.texi(,618) @subsection Cleaning up cvs.texi(,619) @cindex Cleaning up cvs.texi(,620) @cindex Working copy, removing cvs.texi(,621) @cindex Removing your working copy cvs.texi(,622) @cindex Releasing your working copy cvs.texi(,623) cvs.texi(,624) Before you turn to other tasks you decide to remove your working copy of cvs.texi(,625) tc. One acceptable way to do that is of course cvs.texi(,626) cvs.texi(,627) @example cvs.texi(,628) $ cd .. cvs.texi(,629) $ rm -r tc cvs.texi(,630) @end example cvs.texi(,631) cvs.texi(,632) @noindent cvs.texi(,633) but a better way is to use the @code{release} command (@pxref{release}): cvs.texi(,634) cvs.texi(,635) @example cvs.texi(,636) $ cd .. cvs.texi(,637) $ cvs release -d tc cvs.texi(,638) M driver.c cvs.texi(,639) ? tc cvs.texi(,640) You have [1] altered files in this repository. cvs.texi(,641) Are you sure you want to release (and delete) directory `tc': n cvs.texi(,642) ** `release' aborted by user choice. cvs.texi(,643) @end example cvs.texi(,644) cvs.texi(,645) The @code{release} command checks that all your modifications have been cvs.texi(,646) committed. If history logging is enabled it also makes a note in the cvs.texi(,647) history file. @xref{history file}. cvs.texi(,648) cvs.texi(,649) When you use the @samp{-d} flag with @code{release}, it cvs.texi(,650) also removes your working copy. cvs.texi(,651) cvs.texi(,652) In the example above, the @code{release} command wrote a couple of lines cvs.texi(,653) of output. @samp{? tc} means that the file @file{tc} is unknown to @sc{cvs}. cvs.texi(,654) That is nothing to worry about: @file{tc} is the executable compiler, cvs.texi(,655) and it should not be stored in the repository. @xref{cvsignore}, cvs.texi(,656) for information about how to make that warning go away. cvs.texi(,657) @xref{release output}, for a complete explanation of cvs.texi(,658) all possible output from @code{release}. cvs.texi(,659) cvs.texi(,660) @samp{M driver.c} is more serious. It means that the cvs.texi(,661) file @file{driver.c} has been modified since it was cvs.texi(,662) checked out. cvs.texi(,663) cvs.texi(,664) The @code{release} command always finishes by telling cvs.texi(,665) you how many modified files you have in your working cvs.texi(,666) copy of the sources, and then asks you for confirmation cvs.texi(,667) before deleting any files or making any note in the cvs.texi(,668) history file. cvs.texi(,669) cvs.texi(,670) You decide to play it safe and answer @kbd{n @key{RET}} cvs.texi(,671) when @code{release} asks for confirmation. cvs.texi(,672) cvs.texi(,673) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,674) @node Viewing differences cvs.texi(,675) @subsection Viewing differences cvs.texi(,676) @cindex Viewing differences cvs.texi(,677) @cindex Diff cvs.texi(,678) cvs.texi(,679) You do not remember modifying @file{driver.c}, so you want to see what cvs.texi(,680) has happened to that file. cvs.texi(,681) cvs.texi(,682) @example cvs.texi(,683) $ cd tc cvs.texi(,684) $ cvs diff driver.c cvs.texi(,685) @end example cvs.texi(,686) cvs.texi(,687) This command runs @code{diff} to compare the version of @file{driver.c} cvs.texi(,688) that you checked out with your working copy. When you see the output cvs.texi(,689) you remember that you added a command line option that enabled the cvs.texi(,690) optimization pass. You check it in, and release the module. cvs.texi(,691) @c FIXME: we haven't yet defined the term "check in". cvs.texi(,692) cvs.texi(,693) @example cvs.texi(,694) $ cvs commit -m "Added an optimization pass" driver.c cvs.texi(,695) Checking in driver.c; cvs.texi(,696) /usr/local/cvsroot/tc/driver.c,v <-- driver.c cvs.texi(,697) new revision: 1.2; previous revision: 1.1 cvs.texi(,698) done cvs.texi(,699) $ cd .. cvs.texi(,700) $ cvs release -d tc cvs.texi(,701) ? tc cvs.texi(,702) You have [0] altered files in this repository. cvs.texi(,703) Are you sure you want to release (and delete) directory `tc': y cvs.texi(,704) @end example cvs.texi(,705) cvs.texi(,706) @c --------------------------------------------------------------------- cvs.texi(,707) @node Repository cvs.texi(,708) @chapter The Repository cvs.texi(,709) @cindex Repository (intro) cvs.texi(,710) @cindex Repository, example cvs.texi(,711) @cindex Layout of repository cvs.texi(,712) @cindex Typical repository cvs.texi(,713) @cindex /usr/local/cvsroot, as example repository cvs.texi(,714) @cindex cvsroot cvs.texi(,715) cvs.texi(,716) The @sc{cvs} @dfn{repository} stores a complete copy of cvs.texi(,717) all the files and directories which are under version cvs.texi(,718) control. cvs.texi(,719) cvs.texi(,720) Normally, you never access any of the files in the cvs.texi(,721) repository directly. Instead, you use @sc{cvs} cvs.texi(,722) commands to get your own copy of the files into a cvs.texi(,723) @dfn{working directory}, and then cvs.texi(,724) work on that copy. When you've finished a set of cvs.texi(,725) changes, you check (or @dfn{commit}) them back into the cvs.texi(,726) repository. The repository then contains the changes cvs.texi(,727) which you have made, as well as recording exactly what cvs.texi(,728) you changed, when you changed it, and other such cvs.texi(,729) information. Note that the repository is not a cvs.texi(,730) subdirectory of the working directory, or vice versa; cvs.texi(,731) they should be in separate locations. cvs.texi(,732) @c Need some example, e.g. repository cvs.texi(,733) @c /usr/local/cvsroot; working directory cvs.texi(,734) @c /home/joe/sources. But this node is too long cvs.texi(,735) @c as it is; need a little reorganization... cvs.texi(,736) cvs.texi(,737) @cindex :local:, setting up cvs.texi(,738) @sc{cvs} can access a repository by a variety of cvs.texi(,739) means. It might be on the local computer, or it might cvs.texi(,740) be on a computer across the room or across the world. cvs.texi(,741) To distinguish various ways to access a repository, the cvs.texi(,742) repository name can start with an @dfn{access method}. cvs.texi(,743) For example, the access method @code{:local:} means to cvs.texi(,744) access a repository directory, so the repository cvs.texi(,745) @code{:local:/usr/local/cvsroot} means that the cvs.texi(,746) repository is in @file{/usr/local/cvsroot} on the cvs.texi(,747) computer running @sc{cvs}. For information on other cvs.texi(,748) access methods, see @ref{Remote repositories}. cvs.texi(,749) cvs.texi(,750) @c Can se say this more concisely? Like by passing cvs.texi(,751) @c more of the buck to the Remote repositories node? cvs.texi(,752) If the access method is omitted, then if the repository cvs.texi(,753) starts with @samp{/}, then @code{:local:} is cvs.texi(,754) assumed. If it does not start with @samp{/} then either cvs.texi(,755) @code{:ext:} or @code{:server:} is assumed. For cvs.texi(,756) example, if you have a local repository in cvs.texi(,757) @file{/usr/local/cvsroot}, you can use cvs.texi(,758) @code{/usr/local/cvsroot} instead of cvs.texi(,759) @code{:local:/usr/local/cvsroot}. But if (under cvs.texi(,760) Windows NT, for example) your local repository is cvs.texi(,761) @file{c:\src\cvsroot}, then you must specify the access cvs.texi(,762) method, as in @code{:local:c:/src/cvsroot}. cvs.texi(,763) cvs.texi(,764) @c This might appear to go in Repository storage, but cvs.texi(,765) @c actually it is describing something which is quite cvs.texi(,766) @c user-visible, when you do a "cvs co CVSROOT". This cvs.texi(,767) @c isn't necessary the perfect place for that, though. cvs.texi(,768) The repository is split in two parts. @file{$CVSROOT/CVSROOT} contains cvs.texi(,769) administrative files for @sc{cvs}. The other directories contain the actual cvs.texi(,770) user-defined modules. cvs.texi(,771) cvs.texi(,772) @menu cvs.texi(,773) * Specifying a repository:: Telling CVS where your repository is cvs.texi(,774) * Repository storage:: The structure of the repository cvs.texi(,775) * Working directory storage:: The structure of working directories cvs.texi(,776) * Intro administrative files:: Defining modules cvs.texi(,777) * Multiple repositories:: Multiple repositories cvs.texi(,778) * Creating a repository:: Creating a repository cvs.texi(,779) * Backing up:: Backing up a repository cvs.texi(,780) * Moving a repository:: Moving a repository cvs.texi(,781) * Remote repositories:: Accessing repositories on remote machines cvs.texi(,782) * Read-only access:: Granting read-only access to the repository cvs.texi(,783) * Server temporary directory:: The server creates temporary directories cvs.texi(,784) @end menu cvs.texi(,785) cvs.texi(,786) @node Specifying a repository cvs.texi(,787) @section Telling CVS where your repository is cvs.texi(,788) cvs.texi(,789) There are several ways to tell @sc{cvs} cvs.texi(,790) where to find the repository. You can name the cvs.texi(,791) repository on the command line explicitly, with the cvs.texi(,792) @code{-d} (for "directory") option: cvs.texi(,793) cvs.texi(,794) @example cvs.texi(,795) cvs -d /usr/local/cvsroot checkout yoyodyne/tc cvs.texi(,796) @end example cvs.texi(,797) cvs.texi(,798) @cindex .profile, setting CVSROOT in cvs.texi(,799) @cindex .cshrc, setting CVSROOT in cvs.texi(,800) @cindex .tcshrc, setting CVSROOT in cvs.texi(,801) @cindex .bashrc, setting CVSROOT in cvs.texi(,802) @cindex CVSROOT, environment variable cvs.texi(,803) Or you can set the @code{$CVSROOT} environment cvs.texi(,804) variable to an absolute path to the root of the cvs.texi(,805) repository, @file{/usr/local/cvsroot} in this example. cvs.texi(,806) To set @code{$CVSROOT}, @code{csh} and @code{tcsh} cvs.texi(,807) users should have this line in their @file{.cshrc} or cvs.texi(,808) @file{.tcshrc} files: cvs.texi(,809) cvs.texi(,810) @example cvs.texi(,811) setenv CVSROOT /usr/local/cvsroot cvs.texi(,812) @end example cvs.texi(,813) cvs.texi(,814) @noindent cvs.texi(,815) @code{sh} and @code{bash} users should instead have these lines in their cvs.texi(,816) @file{.profile} or @file{.bashrc}: cvs.texi(,817) cvs.texi(,818) @example cvs.texi(,819) CVSROOT=/usr/local/cvsroot cvs.texi(,820) export CVSROOT cvs.texi(,821) @end example cvs.texi(,822) cvs.texi(,823) @cindex Root file, in CVS directory cvs.texi(,824) @cindex CVS/Root file cvs.texi(,825) A repository specified with @code{-d} will cvs.texi(,826) override the @code{$CVSROOT} environment variable. cvs.texi(,827) Once you've checked a working copy out from the cvs.texi(,828) repository, it will remember where its repository is cvs.texi(,829) (the information is recorded in the cvs.texi(,830) @file{CVS/Root} file in the working copy). cvs.texi(,831) cvs.texi(,832) The @code{-d} option and the @file{CVS/Root} file both cvs.texi(,833) override the @code{$CVSROOT} environment variable. If cvs.texi(,834) @code{-d} option differs from @file{CVS/Root}, the cvs.texi(,835) former is used. Of course, for proper operation they cvs.texi(,836) should be two ways of referring to the same repository. cvs.texi(,837) cvs.texi(,838) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,839) @node Repository storage cvs.texi(,840) @section How data is stored in the repository cvs.texi(,841) @cindex Repository, how data is stored cvs.texi(,842) cvs.texi(,843) For most purposes it isn't important @emph{how} cvs.texi(,844) @sc{cvs} stores information in the repository. In cvs.texi(,845) fact, the format has changed in the past, and is likely cvs.texi(,846) to change in the future. Since in almost all cases one cvs.texi(,847) accesses the repository via @sc{cvs} commands, such cvs.texi(,848) changes need not be disruptive. cvs.texi(,849) cvs.texi(,850) However, in some cases it may be necessary to cvs.texi(,851) understand how @sc{cvs} stores data in the repository, cvs.texi(,852) for example you might need to track down @sc{cvs} locks cvs.texi(,853) (@pxref{Concurrency}) or you might need to deal with cvs.texi(,854) the file permissions appropriate for the repository. cvs.texi(,855) cvs.texi(,856) @menu cvs.texi(,857) * Repository files:: What files are stored in the repository cvs.texi(,858) * File permissions:: File permissions cvs.texi(,859) * Windows permissions:: Issues specific to Windows cvs.texi(,860) * Attic:: Some files are stored in the Attic cvs.texi(,861) * CVS in repository:: Additional information in CVS directory cvs.texi(,862) * Locks:: CVS locks control concurrent accesses cvs.texi(,863) * CVSROOT storage:: A few things about CVSROOT are different cvs.texi(,864) @end menu cvs.texi(,865) cvs.texi(,866) @node Repository files cvs.texi(,867) @subsection Where files are stored within the repository cvs.texi(,868) cvs.texi(,869) @c @cindex Filenames, legal cvs.texi(,870) @c @cindex Legal filenames cvs.texi(,871) @c Somewhere we need to say something about legitimate cvs.texi(,872) @c characters in filenames in working directory and cvs.texi(,873) @c repository. Not "/" (not even on non-unix). And cvs.texi(,874) @c here is a specific set of issues: cvs.texi(,875) @c Files starting with a - are handled inconsistently. They can not cvs.texi(,876) @c be added to a repository with an add command, because it they are cvs.texi(,877) @c interpreted as a switch. They can appear in a repository if they are cvs.texi(,878) @c part of a tree that is imported. They can not be removed from the tree cvs.texi(,879) @c once they are there. cvs.texi(,880) @c Note that "--" *is* supported (as a cvs.texi(,881) @c consequence of using GNU getopt). Should document cvs.texi(,882) @c this somewhere ("Common options"?). The other usual technique, cvs.texi(,883) @c "./-foo", isn't as effective, at least for "cvs add" cvs.texi(,884) @c which doesn't support pathnames containing "/". cvs.texi(,885) cvs.texi(,886) The overall structure of the repository is a directory cvs.texi(,887) tree corresponding to the directories in the working cvs.texi(,888) directory. For example, supposing the repository is in cvs.texi(,889) cvs.texi(,890) @example cvs.texi(,891) /usr/local/cvsroot cvs.texi(,892) @end example cvs.texi(,893) cvs.texi(,894) @noindent cvs.texi(,895) here is a possible directory tree (showing only the cvs.texi(,896) directories): cvs.texi(,897) cvs.texi(,898) @example cvs.texi(,899) @t{/usr} cvs.texi(,900) | cvs.texi(,901) +--@t{local} cvs.texi(,902) | | cvs.texi(,903) | +--@t{cvsroot} cvs.texi(,904) | | | cvs.texi(,905) | | +--@t{CVSROOT} cvs.texi(,906) | (administrative files) cvs.texi(,907) | cvs.texi(,908) +--@t{gnu} cvs.texi(,909) | | cvs.texi(,910) | +--@t{diff} cvs.texi(,911) | | (source code to @sc{gnu} diff) cvs.texi(,912) | | cvs.texi(,913) | +--@t{rcs} cvs.texi(,914) | | (source code to @sc{rcs}) cvs.texi(,915) | | cvs.texi(,916) | +--@t{cvs} cvs.texi(,917) | (source code to @sc{cvs}) cvs.texi(,918) | cvs.texi(,919) +--@t{yoyodyne} cvs.texi(,920) | cvs.texi(,921) +--@t{tc} cvs.texi(,922) | | cvs.texi(,923) | +--@t{man} cvs.texi(,924) | | cvs.texi(,925) | +--@t{testing} cvs.texi(,926) | cvs.texi(,927) +--(other Yoyodyne software) cvs.texi(,928) @end example cvs.texi(,929) cvs.texi(,930) With the directories are @dfn{history files} for each file cvs.texi(,931) under version control. The name of the history file is cvs.texi(,932) the name of the corresponding file with @samp{,v} cvs.texi(,933) appended to the end. Here is what the repository for cvs.texi(,934) the @file{yoyodyne/tc} directory might look like: cvs.texi(,935) @c FIXME: Should also mention CVS (CVSREP) cvs.texi(,936) @c FIXME? Should we introduce Attic with an xref to cvs.texi(,937) @c Attic? Not sure whether that is a good idea or not. cvs.texi(,938) @example cvs.texi(,939) @code{$CVSROOT} cvs.texi(,940) | cvs.texi(,941) +--@t{yoyodyne} cvs.texi(,942) | | cvs.texi(,943) | +--@t{tc} cvs.texi(,944) | | | cvs.texi(,945) +--@t{Makefile,v} cvs.texi(,946) +--@t{backend.c,v} cvs.texi(,947) +--@t{driver.c,v} cvs.texi(,948) +--@t{frontend.c,v} cvs.texi(,949) +--@t{parser.c,v} cvs.texi(,950) +--@t{man} cvs.texi(,951) | | cvs.texi(,952) | +--@t{tc.1,v} cvs.texi(,953) | cvs.texi(,954) +--@t{testing} cvs.texi(,955) | cvs.texi(,956) +--@t{testpgm.t,v} cvs.texi(,957) +--@t{test2.t,v} cvs.texi(,958) @end example cvs.texi(,959) cvs.texi(,960) @cindex History files cvs.texi(,961) @cindex RCS history files cvs.texi(,962) @c The first sentence, about what history files cvs.texi(,963) @c contain, is kind of redundant with our intro to what the cvs.texi(,964) @c repository does in node Repository.... cvs.texi(,965) The history files contain, among other things, enough cvs.texi(,966) information to recreate any revision of the file, a log cvs.texi(,967) of all commit messages and the user-name of the person cvs.texi(,968) who committed the revision. The history files are cvs.texi(,969) known as @dfn{RCS files}, because the first program to cvs.texi(,970) store files in that format was a version control system cvs.texi(,971) known as @sc{rcs}. For a full cvs.texi(,972) description of the file format, see the @code{man} page cvs.texi(,973) @cite{rcsfile(5)}, distributed with @sc{rcs}, or the cvs.texi(,974) file @file{doc/RCSFILES} in the @sc{cvs} source cvs.texi(,975) distribution. This cvs.texi(,976) file format has become very common---many systems other cvs.texi(,977) than @sc{cvs} or @sc{rcs} can at least import history cvs.texi(,978) files in this format. cvs.texi(,979) @c FIXME: Think about including documentation for this cvs.texi(,980) @c rather than citing it? In the long run, getting cvs.texi(,981) @c this to be a standard (not sure if we can cope with cvs.texi(,982) @c a standards process as formal as IEEE/ANSI/ISO/etc, cvs.texi(,983) @c though...) is the way to go, so maybe citing is cvs.texi(,984) @c better. cvs.texi(,985) cvs.texi(,986) The @sc{rcs} files used in @sc{cvs} differ in a few cvs.texi(,987) ways from the standard format. The biggest difference cvs.texi(,988) is magic branches; for more information see @ref{Magic cvs.texi(,989) branch numbers}. Also in @sc{cvs} the valid tag names cvs.texi(,990) are a subset of what @sc{rcs} accepts; for @sc{cvs}'s cvs.texi(,991) rules see @ref{Tags}. cvs.texi(,992) cvs.texi(,993) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,994) @node File permissions cvs.texi(,995) @subsection File permissions cvs.texi(,996) @c -- Move this to @node Creating a repository or similar cvs.texi(,997) @cindex Security, file permissions in repository cvs.texi(,998) @cindex File permissions, general cvs.texi(,999) @cindex Permissions, general cvs.texi(,1000) @c FIXME: we need to somehow reflect "permissions in cvs.texi(,1001) @c repository" versus "permissions in working cvs.texi(,1002) @c directory" in the index entries. cvs.texi(,1003) @cindex Group cvs.texi(,1004) @cindex Read-only files, in repository cvs.texi(,1005) All @samp{,v} files are created read-only, and you cvs.texi(,1006) should not change the permission of those files. The cvs.texi(,1007) directories inside the repository should be writable by cvs.texi(,1008) the persons that have permission to modify the files in cvs.texi(,1009) each directory. This normally means that you must cvs.texi(,1010) create a UNIX group (see group(5)) consisting of the cvs.texi(,1011) persons that are to edit the files in a project, and cvs.texi(,1012) set up the repository so that it is that group that cvs.texi(,1013) owns the directory. cvs.texi(,1014) (On some systems, you also need to set the set-group-ID-on-execution bit cvs.texi(,1015) on the repository directories (see chmod(1)) so that newly-created files cvs.texi(,1016) and directories get the group-ID of the parent directory rather than cvs.texi(,1017) that of the current process.) cvs.texi(,1018) cvs.texi(,1019) @c See also comment in commitinfo node regarding cases cvs.texi(,1020) @c which are really awkward with unix groups. cvs.texi(,1021) cvs.texi(,1022) This means that you can only control access to files on cvs.texi(,1023) a per-directory basis. cvs.texi(,1024) cvs.texi(,1025) Note that users must also have write access to check cvs.texi(,1026) out files, because @sc{cvs} needs to create lock files cvs.texi(,1027) (@pxref{Concurrency}). You can use LockDir in CVSROOT/config cvs.texi(,1028) to put the lock files somewhere other than in the repository cvs.texi(,1029) if you want to allow read-only access to some directories cvs.texi(,1030) (@pxref{config}). cvs.texi(,1031) cvs.texi(,1032) @c CVS seems to use CVSUMASK in picking permissions for cvs.texi(,1033) @c val-tags, but maybe we should say more about this. cvs.texi(,1034) @c Like val-tags gets created by someone who doesn't cvs.texi(,1035) @c have CVSUMASK set right? cvs.texi(,1036) Also note that users must have write access to the cvs.texi(,1037) @file{CVSROOT/val-tags} file. @sc{cvs} uses it to keep cvs.texi(,1038) track of what tags are valid tag names (it is sometimes cvs.texi(,1039) updated when tags are used, as well as when they are cvs.texi(,1040) created). cvs.texi(,1041) cvs.texi(,1042) Each @sc{rcs} file will be owned by the user who last cvs.texi(,1043) checked it in. This has little significance; what cvs.texi(,1044) really matters is who owns the directories. cvs.texi(,1045) cvs.texi(,1046) @cindex CVSUMASK, environment variable cvs.texi(,1047) @cindex Umask, for repository files cvs.texi(,1048) @sc{cvs} tries to set up reasonable file permissions cvs.texi(,1049) for new directories that are added inside the tree, but cvs.texi(,1050) you must fix the permissions manually when a new cvs.texi(,1051) directory should have different permissions than its cvs.texi(,1052) parent directory. If you set the @code{CVSUMASK} cvs.texi(,1053) environment variable that will control the file cvs.texi(,1054) permissions which @sc{cvs} uses in creating directories cvs.texi(,1055) and/or files in the repository. @code{CVSUMASK} does cvs.texi(,1056) not affect the file permissions in the working cvs.texi(,1057) directory; such files have the permissions which are cvs.texi(,1058) typical for newly created files, except that sometimes cvs.texi(,1059) @sc{cvs} creates them read-only (see the sections on cvs.texi(,1060) watches, @ref{Setting a watch}; -r, @ref{Global cvs.texi(,1061) options}; or @code{CVSREAD}, @ref{Environment variables}). cvs.texi(,1062) @c FIXME: Need more discussion of which cvs.texi(,1063) @c group should own the file in the repository. cvs.texi(,1064) @c Include a somewhat detailed example of the usual cvs.texi(,1065) @c case where CVSUMASK is 007, the developers are all cvs.texi(,1066) @c in a group, and that group owns stuff in the cvs.texi(,1067) @c repository. Need to talk about group ownership of cvs.texi(,1068) @c newly-created directories/files (on some unices, cvs.texi(,1069) @c such as SunOS4, setting the setgid bit on the cvs.texi(,1070) @c directories will make files inherit the directory's cvs.texi(,1071) @c group. On other unices, your mileage may vary. I cvs.texi(,1072) @c can't remember what POSIX says about this, if cvs.texi(,1073) @c anything). cvs.texi(,1074) cvs.texi(,1075) Note that using the client/server @sc{cvs} cvs.texi(,1076) (@pxref{Remote repositories}), there is no good way to cvs.texi(,1077) set @code{CVSUMASK}; the setting on the client machine cvs.texi(,1078) has no effect. If you are connecting with @code{rsh}, you cvs.texi(,1079) can set @code{CVSUMASK} in @file{.bashrc} or @file{.cshrc}, as cvs.texi(,1080) described in the documentation for your operating cvs.texi(,1081) system. This behavior might change in future versions cvs.texi(,1082) of @sc{cvs}; do not rely on the setting of cvs.texi(,1083) @code{CVSUMASK} on the client having no effect. cvs.texi(,1084) @c FIXME: need to explain what a umask is or cite cvs.texi(,1085) @c someplace which does. cvs.texi(,1086) @c cvs.texi(,1087) @c There is also a larger (largely separate) issue cvs.texi(,1088) @c about the meaning of CVSUMASK in a non-unix context. cvs.texi(,1089) @c For example, whether there is cvs.texi(,1090) @c an equivalent which fits better into other cvs.texi(,1091) @c protection schemes like POSIX.6, VMS, &c. cvs.texi(,1092) @c cvs.texi(,1093) @c FIXME: Need one place which discusses this cvs.texi(,1094) @c read-only files thing. Why would one use -r or cvs.texi(,1095) @c CVSREAD? Why would one use watches? How do they cvs.texi(,1096) @c interact? cvs.texi(,1097) @c cvs.texi(,1098) @c FIXME: We need to state cvs.texi(,1099) @c whether using CVSUMASK removes the need for manually cvs.texi(,1100) @c fixing permissions (in fact, if we are going to mention cvs.texi(,1101) @c manually fixing permission, we better document a lot cvs.texi(,1102) @c better just what we mean by "fix"). cvs.texi(,1103) cvs.texi(,1104) Using pserver, you will generally need stricter cvs.texi(,1105) permissions on the @sc{cvsroot} directory and cvs.texi(,1106) directories above it in the tree; see @ref{Password cvs.texi(,1107) authentication security}. cvs.texi(,1108) cvs.texi(,1109) @cindex Setuid cvs.texi(,1110) @cindex Setgid cvs.texi(,1111) @cindex Security, setuid cvs.texi(,1112) @cindex Installed images (VMS) cvs.texi(,1113) Some operating systems have features which allow a cvs.texi(,1114) particular program to run with the ability to perform cvs.texi(,1115) operations which the caller of the program could not. cvs.texi(,1116) For example, the set user ID (setuid) or set group ID cvs.texi(,1117) (setgid) features of unix or the installed image cvs.texi(,1118) feature of VMS. @sc{cvs} was not written to use such cvs.texi(,1119) features and therefore attempting to install @sc{cvs} in cvs.texi(,1120) this fashion will provide protection against only cvs.texi(,1121) accidental lapses; anyone who is trying to circumvent cvs.texi(,1122) the measure will be able to do so, and depending on how cvs.texi(,1123) you have set it up may gain access to more than just cvs.texi(,1124) @sc{cvs}. You may wish to instead consider pserver. It cvs.texi(,1125) shares some of the same attributes, in terms of cvs.texi(,1126) possibly providing a false sense of security or opening cvs.texi(,1127) security holes wider than the ones you are trying to cvs.texi(,1128) fix, so read the documentation on pserver security cvs.texi(,1129) carefully if you are considering this option cvs.texi(,1130) (@ref{Password authentication security}). cvs.texi(,1131) cvs.texi(,1132) @node Windows permissions cvs.texi(,1133) @subsection File Permission issues specific to Windows cvs.texi(,1134) @cindex Windows, and permissions cvs.texi(,1135) @cindex File permissions, Windows-specific cvs.texi(,1136) @cindex Permissions, Windows-specific cvs.texi(,1137) cvs.texi(,1138) Some file permission issues are specific to Windows cvs.texi(,1139) operating systems (Windows 95, Windows NT, and cvs.texi(,1140) presumably future operating systems in this family. cvs.texi(,1141) Some of the following might apply to OS/2 but I'm not cvs.texi(,1142) sure). cvs.texi(,1143) cvs.texi(,1144) If you are using local @sc{cvs} and the repository is on a cvs.texi(,1145) networked file system which is served by the Samba SMB cvs.texi(,1146) server, some people have reported problems with cvs.texi(,1147) permissions. Enabling WRITE=YES in the samba cvs.texi(,1148) configuration is said to fix/workaround it. cvs.texi(,1149) Disclaimer: I haven't investigated enough to know the cvs.texi(,1150) implications of enabling that option, nor do I know cvs.texi(,1151) whether there is something which @sc{cvs} could be doing cvs.texi(,1152) differently in order to avoid the problem. If you find cvs.texi(,1153) something out, please let us know as described in cvs.texi(,1154) @ref{BUGS}. cvs.texi(,1155) cvs.texi(,1156) @node Attic cvs.texi(,1157) @subsection The attic cvs.texi(,1158) @cindex Attic cvs.texi(,1159) cvs.texi(,1160) You will notice that sometimes @sc{cvs} stores an cvs.texi(,1161) @sc{rcs} file in the @code{Attic}. For example, if the cvs.texi(,1162) @sc{cvsroot} is @file{/usr/local/cvsroot} and we are cvs.texi(,1163) talking about the file @file{backend.c} in the cvs.texi(,1164) directory @file{yoyodyne/tc}, then the file normally cvs.texi(,1165) would be in cvs.texi(,1166) cvs.texi(,1167) @example cvs.texi(,1168) /usr/local/cvsroot/yoyodyne/tc/backend.c,v cvs.texi(,1169) @end example cvs.texi(,1170) cvs.texi(,1171) @noindent cvs.texi(,1172) but if it goes in the attic, it would be in cvs.texi(,1173) cvs.texi(,1174) @example cvs.texi(,1175) /usr/local/cvsroot/yoyodyne/tc/Attic/backend.c,v cvs.texi(,1176) @end example cvs.texi(,1177) cvs.texi(,1178) @noindent cvs.texi(,1179) @cindex Dead state cvs.texi(,1180) instead. It should not matter from a user point of cvs.texi(,1181) view whether a file is in the attic; @sc{cvs} keeps cvs.texi(,1182) track of this and looks in the attic when it needs to. cvs.texi(,1183) But in case you want to know, the rule is that the RCS cvs.texi(,1184) file is stored in the attic if and only if the head cvs.texi(,1185) revision on the trunk has state @code{dead}. A cvs.texi(,1186) @code{dead} state means that file has been removed, or cvs.texi(,1187) never added, for that revision. For example, if you cvs.texi(,1188) add a file on a branch, it will have a trunk revision cvs.texi(,1189) in @code{dead} state, and a branch revision in a cvs.texi(,1190) non-@code{dead} state. cvs.texi(,1191) @c Probably should have some more concrete examples cvs.texi(,1192) @c here, or somewhere (not sure exactly how we should cvs.texi(,1193) @c arrange the discussion of the dead state, versus cvs.texi(,1194) @c discussion of the attic). cvs.texi(,1195) cvs.texi(,1196) @node CVS in repository cvs.texi(,1197) @subsection The CVS directory in the repository cvs.texi(,1198) @cindex CVS directory, in repository cvs.texi(,1199) cvs.texi(,1200) The @file{CVS} directory in each repository directory cvs.texi(,1201) contains information such as file attributes (in a file cvs.texi(,1202) called @file{CVS/fileattr}. In the cvs.texi(,1203) future additional files may be added to this directory, cvs.texi(,1204) so implementations should silently ignore additional cvs.texi(,1205) files. cvs.texi(,1206) cvs.texi(,1207) This behavior is implemented only by @sc{cvs} 1.7 and cvs.texi(,1208) later; for details see @ref{Watches Compatibility}. cvs.texi(,1209) cvs.texi(,1210) The format of the fileattr file is a series of entries cvs.texi(,1211) of the following form (where @samp{@{} and @samp{@}} cvs.texi(,1212) means the text between the braces can be repeated zero cvs.texi(,1213) or more times): cvs.texi(,1214) cvs.texi(,1215) @var{ent-type} @var{filename} @var{attrname} = @var{attrval} cvs.texi(,1216) @{; @var{attrname} = @var{attrval}@} cvs.texi(,1217) cvs.texi(,1218) @var{ent-type} is @samp{F} for a file, in which case the entry specifies the cvs.texi(,1219) attributes for that file. cvs.texi(,1220) cvs.texi(,1221) @var{ent-type} is @samp{D}, cvs.texi(,1222) and @var{filename} empty, to specify default attributes cvs.texi(,1223) to be used for newly added files. cvs.texi(,1224) cvs.texi(,1225) Other @var{ent-type} are reserved for future expansion. @sc{cvs} 1.9 and older cvs.texi(,1226) will delete them any time it writes file attributes. cvs.texi(,1227) @sc{cvs} 1.10 and later will preserve them. cvs.texi(,1228) cvs.texi(,1229) Note that the order of the lines is not significant; cvs.texi(,1230) a program writing the fileattr file may cvs.texi(,1231) rearrange them at its convenience. cvs.texi(,1232) cvs.texi(,1233) There is currently no way of quoting tabs or linefeeds in the cvs.texi(,1234) filename, @samp{=} in @var{attrname}, cvs.texi(,1235) @samp{;} in @var{attrval}, etc. Note: some implementations also cvs.texi(,1236) don't handle a NUL character in any of the fields, but cvs.texi(,1237) implementations are encouraged to allow it. cvs.texi(,1238) cvs.texi(,1239) By convention, @var{attrname} starting with @samp{_} is for an attribute given cvs.texi(,1240) special meaning by @sc{cvs}; other @var{attrname}s are for user-defined attributes cvs.texi(,1241) (or will be, once implementations start supporting user-defined attributes). cvs.texi(,1242) cvs.texi(,1243) Builtin attributes: cvs.texi(,1244) cvs.texi(,1245) @table @code cvs.texi(,1246) @item _watched cvs.texi(,1247) Present means the file is watched and should be checked out cvs.texi(,1248) read-only. cvs.texi(,1249) cvs.texi(,1250) @item _watchers cvs.texi(,1251) Users with watches for this file. Value is cvs.texi(,1252) @var{watcher} > @var{type} @{ , @var{watcher} > @var{type} @} cvs.texi(,1253) where @var{watcher} is a username, and @var{type} cvs.texi(,1254) is zero or more of edit,unedit,commit separated by cvs.texi(,1255) @samp{+} (that is, nothing if none; there is no "none" or "all" keyword). cvs.texi(,1256) cvs.texi(,1257) @item _editors cvs.texi(,1258) Users editing this file. Value is cvs.texi(,1259) @var{editor} > @var{val} @{ , @var{editor} > @var{val} @} cvs.texi(,1260) where @var{editor} is a username, and @var{val} is cvs.texi(,1261) @var{time}+@var{hostname}+@var{pathname}, where cvs.texi(,1262) @var{time} is when the @code{cvs edit} command (or cvs.texi(,1263) equivalent) happened, cvs.texi(,1264) and @var{hostname} and @var{pathname} are for the working directory. cvs.texi(,1265) @end table cvs.texi(,1266) cvs.texi(,1267) Example: cvs.texi(,1268) cvs.texi(,1269) @c FIXME: sanity.sh should contain a similar test case cvs.texi(,1270) @c so we can compare this example from something from cvs.texi(,1271) @c Real Life(TM). See cvsclient.texi (under Notify) for more cvs.texi(,1272) @c discussion of the date format of _editors. cvs.texi(,1273) @example cvs.texi(,1274) Ffile1 _watched=;_watchers=joe>edit,mary>commit cvs.texi(,1275) Ffile2 _watched=;_editors=sue>8 Jan 1975+workstn1+/home/sue/cvs cvs.texi(,1276) D _watched= cvs.texi(,1277) @end example cvs.texi(,1278) cvs.texi(,1279) @noindent cvs.texi(,1280) means that the file @file{file1} should be checked out cvs.texi(,1281) read-only. Furthermore, joe is watching for edits and cvs.texi(,1282) mary is watching for commits. The file @file{file2} cvs.texi(,1283) should be checked out read-only; sue started editing it cvs.texi(,1284) on 8 Jan 1975 in the directory @file{/home/sue/cvs} on cvs.texi(,1285) the machine @code{workstn1}. Future files which are cvs.texi(,1286) added should be checked out read-only. To represent cvs.texi(,1287) this example here, we have shown a space after cvs.texi(,1288) @samp{D}, @samp{Ffile1}, and @samp{Ffile2}, but in fact cvs.texi(,1289) there must be a single tab character there and no spaces. cvs.texi(,1290) cvs.texi(,1291) @node Locks cvs.texi(,1292) @subsection CVS locks in the repository cvs.texi(,1293) cvs.texi(,1294) @cindex #cvs.rfl, technical details cvs.texi(,1295) @cindex #cvs.wfl, technical details cvs.texi(,1296) @cindex #cvs.lock, technical details cvs.texi(,1297) @cindex Locks, cvs, technical details cvs.texi(,1298) For an introduction to @sc{cvs} locks focusing on cvs.texi(,1299) user-visible behavior, see @ref{Concurrency}. The cvs.texi(,1300) following section is aimed at people who are writing cvs.texi(,1301) tools which want to access a @sc{cvs} repository without cvs.texi(,1302) interfering with other tools accessing the same cvs.texi(,1303) repository. If you find yourself confused by concepts cvs.texi(,1304) described here, like @dfn{read lock}, @dfn{write lock}, cvs.texi(,1305) and @dfn{deadlock}, you might consult the literature on cvs.texi(,1306) operating systems or databases. cvs.texi(,1307) cvs.texi(,1308) @cindex #cvs.tfl cvs.texi(,1309) Any file in the repository with a name starting cvs.texi(,1310) with @file{#cvs.rfl.} is a read lock. Any file in cvs.texi(,1311) the repository with a name starting with cvs.texi(,1312) @file{#cvs.wfl} is a write lock. Old versions of @sc{cvs} cvs.texi(,1313) (before @sc{cvs} 1.5) also created files with names starting cvs.texi(,1314) with @file{#cvs.tfl}, but they are not discussed here. cvs.texi(,1315) The directory @file{#cvs.lock} serves as a master cvs.texi(,1316) lock. That is, one must obtain this lock first before cvs.texi(,1317) creating any of the other locks. cvs.texi(,1318) cvs.texi(,1319) To obtain a readlock, first create the @file{#cvs.lock} cvs.texi(,1320) directory. This operation must be atomic (which should cvs.texi(,1321) be true for creating a directory under most operating cvs.texi(,1322) systems). If it fails because the directory already cvs.texi(,1323) existed, wait for a while and try again. After cvs.texi(,1324) obtaining the @file{#cvs.lock} lock, create a file cvs.texi(,1325) whose name is @file{#cvs.rfl.} followed by information cvs.texi(,1326) of your choice (for example, hostname and process cvs.texi(,1327) identification number). Then remove the cvs.texi(,1328) @file{#cvs.lock} directory to release the master lock. cvs.texi(,1329) Then proceed with reading the repository. When you are cvs.texi(,1330) done, remove the @file{#cvs.rfl} file to release the cvs.texi(,1331) read lock. cvs.texi(,1332) cvs.texi(,1333) To obtain a writelock, first create the cvs.texi(,1334) @file{#cvs.lock} directory, as with a readlock. Then cvs.texi(,1335) check that there are no files whose names start with cvs.texi(,1336) @file{#cvs.rfl.}. If there are, remove cvs.texi(,1337) @file{#cvs.lock}, wait for a while, and try again. If cvs.texi(,1338) there are no readers, then create a file whose name is cvs.texi(,1339) @file{#cvs.wfl} followed by information of your choice cvs.texi(,1340) (for example, hostname and process identification cvs.texi(,1341) number). Hang on to the @file{#cvs.lock} lock. Proceed cvs.texi(,1342) with writing the repository. When you are done, first cvs.texi(,1343) remove the @file{#cvs.wfl} file and then the cvs.texi(,1344) @file{#cvs.lock} directory. Note that unlike the cvs.texi(,1345) @file{#cvs.rfl} file, the @file{#cvs.wfl} file is just cvs.texi(,1346) informational; it has no effect on the locking operation cvs.texi(,1347) beyond what is provided by holding on to the cvs.texi(,1348) @file{#cvs.lock} lock itself. cvs.texi(,1349) cvs.texi(,1350) Note that each lock (writelock or readlock) only locks cvs.texi(,1351) a single directory in the repository, including cvs.texi(,1352) @file{Attic} and @file{CVS} but not including cvs.texi(,1353) subdirectories which represent other directories under cvs.texi(,1354) version control. To lock an entire tree, you need to cvs.texi(,1355) lock each directory (note that if you fail to obtain cvs.texi(,1356) any lock you need, you must release the whole tree cvs.texi(,1357) before waiting and trying again, to avoid deadlocks). cvs.texi(,1358) cvs.texi(,1359) Note also that @sc{cvs} expects writelocks to control cvs.texi(,1360) access to individual @file{foo,v} files. @sc{rcs} has cvs.texi(,1361) a scheme where the @file{,foo,} file serves as a lock, cvs.texi(,1362) but @sc{cvs} does not implement it and so taking out a cvs.texi(,1363) @sc{cvs} writelock is recommended. See the comments at cvs.texi(,1364) rcs_internal_lockfile in the @sc{cvs} source code for cvs.texi(,1365) further discussion/rationale. cvs.texi(,1366) cvs.texi(,1367) @node CVSROOT storage cvs.texi(,1368) @subsection How files are stored in the CVSROOT directory cvs.texi(,1369) @cindex CVSROOT, storage of files cvs.texi(,1370) cvs.texi(,1371) The @file{$CVSROOT/CVSROOT} directory contains the cvs.texi(,1372) various administrative files. In some ways this cvs.texi(,1373) directory is just like any other directory in the cvs.texi(,1374) repository; it contains @sc{rcs} files whose names end cvs.texi(,1375) in @samp{,v}, and many of the @sc{cvs} commands operate cvs.texi(,1376) on it the same way. However, there are a few cvs.texi(,1377) differences. cvs.texi(,1378) cvs.texi(,1379) For each administrative file, in addition to the cvs.texi(,1380) @sc{rcs} file, there is also a checked out copy of the cvs.texi(,1381) file. For example, there is an @sc{rcs} file cvs.texi(,1382) @file{loginfo,v} and a file @file{loginfo} which cvs.texi(,1383) contains the latest revision contained in cvs.texi(,1384) @file{loginfo,v}. When you check in an administrative cvs.texi(,1385) file, @sc{cvs} should print cvs.texi(,1386) cvs.texi(,1387) @example cvs.texi(,1388) cvs commit: Rebuilding administrative file database cvs.texi(,1389) @end example cvs.texi(,1390) cvs.texi(,1391) @noindent cvs.texi(,1392) and update the checked out copy in cvs.texi(,1393) @file{$CVSROOT/CVSROOT}. If it does not, there is cvs.texi(,1394) something wrong (@pxref{BUGS}). To add your own files cvs.texi(,1395) to the files to be updated in this fashion, you can add cvs.texi(,1396) them to the @file{checkoutlist} administrative file cvs.texi(,1397) (@pxref{checkoutlist}). cvs.texi(,1398) cvs.texi(,1399) @cindex modules.db cvs.texi(,1400) @cindex modules.pag cvs.texi(,1401) @cindex modules.dir cvs.texi(,1402) By default, the @file{modules} file behaves as cvs.texi(,1403) described above. If the modules file is very large, cvs.texi(,1404) storing it as a flat text file may make looking up cvs.texi(,1405) modules slow (I'm not sure whether this is as much of a cvs.texi(,1406) concern now as when @sc{cvs} first evolved this cvs.texi(,1407) feature; I haven't seen benchmarks). Therefore, by cvs.texi(,1408) making appropriate edits to the @sc{cvs} source code cvs.texi(,1409) one can store the modules file in a database which cvs.texi(,1410) implements the @code{ndbm} interface, such as Berkeley cvs.texi(,1411) db or GDBM. If this option is in use, then the modules cvs.texi(,1412) database will be stored in the files @file{modules.db}, cvs.texi(,1413) @file{modules.pag}, and/or @file{modules.dir}. cvs.texi(,1414) @c I think fileattr also will use the database stuff. cvs.texi(,1415) @c Anything else? cvs.texi(,1416) cvs.texi(,1417) For information on the meaning of the various cvs.texi(,1418) administrative files, see @ref{Administrative files}. cvs.texi(,1419) cvs.texi(,1420) @node Working directory storage cvs.texi(,1421) @section How data is stored in the working directory cvs.texi(,1422) cvs.texi(,1423) @c FIXME: Somewhere we should discuss timestamps (test cvs.texi(,1424) @c case "stamps" in sanity.sh). But not here. Maybe cvs.texi(,1425) @c in some kind of "working directory" chapter which cvs.texi(,1426) @c would encompass the "Builds" one? But I'm not sure cvs.texi(,1427) @c whether that is a good organization (is it based on cvs.texi(,1428) @c what the user wants to do?). cvs.texi(,1429) cvs.texi(,1430) @cindex CVS directory, in working directory cvs.texi(,1431) While we are discussing @sc{cvs} internals which may cvs.texi(,1432) become visible from time to time, we might as well talk cvs.texi(,1433) about what @sc{cvs} puts in the @file{CVS} directories cvs.texi(,1434) in the working directories. As with the repository, cvs.texi(,1435) @sc{cvs} handles this information and one can usually cvs.texi(,1436) access it via @sc{cvs} commands. But in some cases it cvs.texi(,1437) may be useful to look at it, and other programs, such cvs.texi(,1438) as the @code{jCVS} graphical user interface or the cvs.texi(,1439) @code{VC} package for emacs, may need to look at it. cvs.texi(,1440) Such programs should follow the recommendations in this cvs.texi(,1441) section if they hope to be able to work with other cvs.texi(,1442) programs which use those files, including future cvs.texi(,1443) versions of the programs just mentioned and the cvs.texi(,1444) command-line @sc{cvs} client. cvs.texi(,1445) cvs.texi(,1446) The @file{CVS} directory contains several files. cvs.texi(,1447) Programs which are reading this directory should cvs.texi(,1448) silently ignore files which are in the directory but cvs.texi(,1449) which are not documented here, to allow for future cvs.texi(,1450) expansion. cvs.texi(,1451) cvs.texi(,1452) The files are stored according to the text file cvs.texi(,1453) convention for the system in question. This means that cvs.texi(,1454) working directories are not portable between systems cvs.texi(,1455) with differing conventions for storing text files. cvs.texi(,1456) This is intentional, on the theory that the files being cvs.texi(,1457) managed by @sc{cvs} probably will not be portable between cvs.texi(,1458) such systems either. cvs.texi(,1459) cvs.texi(,1460) @table @file cvs.texi(,1461) @item Root cvs.texi(,1462) This file contains the current @sc{cvs} root, as cvs.texi(,1463) described in @ref{Specifying a repository}. cvs.texi(,1464) cvs.texi(,1465) @cindex Repository file, in CVS directory cvs.texi(,1466) @cindex CVS/Repository file cvs.texi(,1467) @item Repository cvs.texi(,1468) This file contains the directory within the repository cvs.texi(,1469) which the current directory corresponds with. It can cvs.texi(,1470) be either an absolute pathname or a relative pathname; cvs.texi(,1471) @sc{cvs} has had the ability to read either format cvs.texi(,1472) since at least version 1.3 or so. The relative cvs.texi(,1473) pathname is relative to the root, and is the more cvs.texi(,1474) sensible approach, but the absolute pathname is quite cvs.texi(,1475) common and implementations should accept either. For cvs.texi(,1476) example, after the command cvs.texi(,1477) cvs.texi(,1478) @example cvs.texi(,1479) cvs -d :local:/usr/local/cvsroot checkout yoyodyne/tc cvs.texi(,1480) @end example cvs.texi(,1481) cvs.texi(,1482) @noindent cvs.texi(,1483) @file{Root} will contain cvs.texi(,1484) cvs.texi(,1485) @example cvs.texi(,1486) :local:/usr/local/cvsroot cvs.texi(,1487) @end example cvs.texi(,1488) cvs.texi(,1489) @noindent cvs.texi(,1490) and @file{Repository} will contain either cvs.texi(,1491) cvs.texi(,1492) @example cvs.texi(,1493) /usr/local/cvsroot/yoyodyne/tc cvs.texi(,1494) @end example cvs.texi(,1495) cvs.texi(,1496) @noindent cvs.texi(,1497) or cvs.texi(,1498) cvs.texi(,1499) @example cvs.texi(,1500) yoyodyne/tc cvs.texi(,1501) @end example cvs.texi(,1502) cvs.texi(,1503) If the particular working directory does not correspond cvs.texi(,1504) to a directory in the repository, then @file{Repository} cvs.texi(,1505) should contain @file{CVSROOT/Emptydir}. cvs.texi(,1506) @cindex Emptydir, in CVSROOT directory cvs.texi(,1507) @cindex CVSROOT/Emptydir directory cvs.texi(,1508) cvs.texi(,1509) @cindex Entries file, in CVS directory cvs.texi(,1510) @cindex CVS/Entries file cvs.texi(,1511) @item Entries cvs.texi(,1512) This file lists the files and directories in the cvs.texi(,1513) working directory. cvs.texi(,1514) The first character of each line indicates what sort of cvs.texi(,1515) line it is. If the character is unrecognized, programs cvs.texi(,1516) reading the file should silently skip that line, to cvs.texi(,1517) allow for future expansion. cvs.texi(,1518) cvs.texi(,1519) If the first character is @samp{/}, then the format is: cvs.texi(,1520) cvs.texi(,1521) @example cvs.texi(,1522) /@var{name}/@var{revision}/@var{timestamp}[+@var{conflict}]/@var{options}/@var{tagdate} cvs.texi(,1523) @end example cvs.texi(,1524) cvs.texi(,1525) @noindent cvs.texi(,1526) where @samp{[} and @samp{]} are not part of the entry, cvs.texi(,1527) but instead indicate that the @samp{+} and conflict cvs.texi(,1528) marker are optional. @var{name} is the name of the cvs.texi(,1529) file within the directory. @var{revision} is the cvs.texi(,1530) revision that the file in the working derives from, or cvs.texi(,1531) @samp{0} for an added file, or @samp{-} followed by a cvs.texi(,1532) revision for a removed file. @var{timestamp} is the cvs.texi(,1533) timestamp of the file at the time that @sc{cvs} created cvs.texi(,1534) it; if the timestamp differs with the actual cvs.texi(,1535) modification time of the file it means the file has cvs.texi(,1536) been modified. It is stored in cvs.texi(,1537) the format used by the ISO C asctime() function (for cvs.texi(,1538) example, @samp{Sun Apr 7 01:29:26 1996}). One may cvs.texi(,1539) write a string which is not in that format, for cvs.texi(,1540) example, @samp{Result of merge}, to indicate that the cvs.texi(,1541) file should always be considered to be modified. This cvs.texi(,1542) is not a special case; to see whether a file is cvs.texi(,1543) modified a program should take the timestamp of the file cvs.texi(,1544) and simply do a string compare with @var{timestamp}. cvs.texi(,1545) If there was a conflict, @var{conflict} can be set to cvs.texi(,1546) the modification time of the file after the file has been cvs.texi(,1547) written with conflict markers (@pxref{Conflicts example}). cvs.texi(,1548) Thus if @var{conflict} is subsequently the same as the actual cvs.texi(,1549) modification time of the file it means that the user cvs.texi(,1550) has obviously not resolved the conflict. @var{options} cvs.texi(,1551) contains sticky options (for example @samp{-kb} for a cvs.texi(,1552) binary file). @var{tagdate} contains @samp{T} followed cvs.texi(,1553) by a tag name, or @samp{D} for a date, followed by a cvs.texi(,1554) sticky tag or date. Note that if @var{timestamp} cvs.texi(,1555) contains a pair of timestamps separated by a space, cvs.texi(,1556) rather than a single timestamp, you are dealing with a cvs.texi(,1557) version of @sc{cvs} earlier than @sc{cvs} 1.5 (not cvs.texi(,1558) documented here). cvs.texi(,1559) cvs.texi(,1560) The timezone on the timestamp in CVS/Entries (local or cvs.texi(,1561) universal) should be the same as the operating system cvs.texi(,1562) stores for the timestamp of the file itself. For cvs.texi(,1563) example, on Unix the file's timestamp is in universal cvs.texi(,1564) time (UT), so the timestamp in CVS/Entries should be cvs.texi(,1565) too. On @sc{vms}, the file's timestamp is in local cvs.texi(,1566) time, so @sc{cvs} on @sc{vms} should use local time. cvs.texi(,1567) This rule is so that files do not appear to be modified cvs.texi(,1568) merely because the timezone changed (for example, to or cvs.texi(,1569) from summer time). cvs.texi(,1570) @c See comments and calls to gmtime() and friends in cvs.texi(,1571) @c src/vers_ts.c (function time_stamp). cvs.texi(,1572) cvs.texi(,1573) If the first character of a line in @file{Entries} is cvs.texi(,1574) @samp{D}, then it indicates a subdirectory. @samp{D} cvs.texi(,1575) on a line all by itself indicates that the program cvs.texi(,1576) which wrote the @file{Entries} file does record cvs.texi(,1577) subdirectories (therefore, if there is such a line and cvs.texi(,1578) no other lines beginning with @samp{D}, one knows there cvs.texi(,1579) are no subdirectories). Otherwise, the line looks cvs.texi(,1580) like: cvs.texi(,1581) cvs.texi(,1582) @example cvs.texi(,1583) D/@var{name}/@var{filler1}/@var{filler2}/@var{filler3}/@var{filler4} cvs.texi(,1584) @end example cvs.texi(,1585) cvs.texi(,1586) @noindent cvs.texi(,1587) where @var{name} is the name of the subdirectory, and cvs.texi(,1588) all the @var{filler} fields should be silently ignored, cvs.texi(,1589) for future expansion. Programs which modify cvs.texi(,1590) @code{Entries} files should preserve these fields. cvs.texi(,1591) cvs.texi(,1592) The lines in the @file{Entries} file can be in any order. cvs.texi(,1593) cvs.texi(,1594) @cindex Entries.Log file, in CVS directory cvs.texi(,1595) @cindex CVS/Entries.Log file cvs.texi(,1596) @item Entries.Log cvs.texi(,1597) This file does not record any information beyond that cvs.texi(,1598) in @file{Entries}, but it does provide a way to update cvs.texi(,1599) the information without having to rewrite the entire cvs.texi(,1600) @file{Entries} file, including the ability to preserve cvs.texi(,1601) the information even if the program writing cvs.texi(,1602) @file{Entries} and @file{Entries.Log} abruptly aborts. cvs.texi(,1603) Programs which are reading the @file{Entries} file cvs.texi(,1604) should also check for @file{Entries.Log}. If the latter cvs.texi(,1605) exists, they should read @file{Entries} and then apply cvs.texi(,1606) the changes mentioned in @file{Entries.Log}. After cvs.texi(,1607) applying the changes, the recommended practice is to cvs.texi(,1608) rewrite @file{Entries} and then delete @file{Entries.Log}. cvs.texi(,1609) The format of a line in @file{Entries.Log} is a single cvs.texi(,1610) character command followed by a space followed by a cvs.texi(,1611) line in the format specified for a line in cvs.texi(,1612) @file{Entries}. The single character command is cvs.texi(,1613) @samp{A} to indicate that the entry is being added, cvs.texi(,1614) @samp{R} to indicate that the entry is being removed, cvs.texi(,1615) or any other character to indicate that the entire line cvs.texi(,1616) in @file{Entries.Log} should be silently ignored (for cvs.texi(,1617) future expansion). If the second character of the line cvs.texi(,1618) in @file{Entries.Log} is not a space, then it was cvs.texi(,1619) written by an older version of @sc{cvs} (not documented cvs.texi(,1620) here). cvs.texi(,1621) cvs.texi(,1622) Programs which are writing rather than reading can cvs.texi(,1623) safely ignore @file{Entries.Log} if they so choose. cvs.texi(,1624) cvs.texi(,1625) @cindex Entries.Backup file, in CVS directory cvs.texi(,1626) @cindex CVS/Entries.Backup file cvs.texi(,1627) @item Entries.Backup cvs.texi(,1628) This is a temporary file. Recommended usage is to cvs.texi(,1629) write a new entries file to @file{Entries.Backup}, and cvs.texi(,1630) then to rename it (atomically, where possible) to @file{Entries}. cvs.texi(,1631) cvs.texi(,1632) @cindex Entries.Static file, in CVS directory cvs.texi(,1633) @cindex CVS/Entries.Static file cvs.texi(,1634) @item Entries.Static cvs.texi(,1635) The only relevant thing about this file is whether it cvs.texi(,1636) exists or not. If it exists, then it means that only cvs.texi(,1637) part of a directory was gotten and @sc{cvs} will cvs.texi(,1638) not create additional files in that directory. To cvs.texi(,1639) clear it, use the @code{update} command with the cvs.texi(,1640) @samp{-d} option, which will get the additional files cvs.texi(,1641) and remove @file{Entries.Static}. cvs.texi(,1642) @c FIXME: This needs to be better documented, in places cvs.texi(,1643) @c other than Working Directory Storage. cvs.texi(,1644) @c FIXCVS: The fact that this setting exists needs to cvs.texi(,1645) @c be more visible to the user. For example "cvs cvs.texi(,1646) @c status foo", in the case where the file would be cvs.texi(,1647) @c gotten except for Entries.Static, might say cvs.texi(,1648) @c something to distinguish this from other cases. cvs.texi(,1649) @c One thing that periodically gets suggested is to cvs.texi(,1650) @c have "cvs update" print something when it skips cvs.texi(,1651) @c files due to Entries.Static, but IMHO that kind of cvs.texi(,1652) @c noise pretty much makes the Entries.Static feature cvs.texi(,1653) @c useless. cvs.texi(,1654) cvs.texi(,1655) @cindex Tag file, in CVS directory cvs.texi(,1656) @cindex CVS/Tag file cvs.texi(,1657) @cindex Sticky tags/dates, per-directory cvs.texi(,1658) @cindex Per-directory sticky tags/dates cvs.texi(,1659) @item Tag cvs.texi(,1660) This file contains per-directory sticky tags or dates. cvs.texi(,1661) The first character is @samp{T} for a branch tag, cvs.texi(,1662) @samp{N} for a non-branch tag, or @samp{D} for a date, cvs.texi(,1663) or another character to mean the file should be cvs.texi(,1664) silently ignored, for future expansion. This character cvs.texi(,1665) is followed by the tag or date. Note that cvs.texi(,1666) per-directory sticky tags or dates are used for things cvs.texi(,1667) like applying to files which are newly added; they cvs.texi(,1668) might not be the same as the sticky tags or dates on cvs.texi(,1669) individual files. For general information on sticky cvs.texi(,1670) tags and dates, see @ref{Sticky tags}. cvs.texi(,1671) @c FIXME: This needs to be much better documented, cvs.texi(,1672) @c preferably not in the context of "working directory cvs.texi(,1673) @c storage". cvs.texi(,1674) @c FIXME: The Sticky tags node needs to discuss, or xref to cvs.texi(,1675) @c someplace which discusses, per-directory sticky cvs.texi(,1676) @c tags and the distinction with per-file sticky tags. cvs.texi(,1677) cvs.texi(,1678) @cindex Notify file, in CVS directory cvs.texi(,1679) @cindex CVS/Notify file cvs.texi(,1680) @item Notify cvs.texi(,1681) This file stores notifications (for example, for cvs.texi(,1682) @code{edit} or @code{unedit}) which have not yet been cvs.texi(,1683) sent to the server. Its format is not yet documented cvs.texi(,1684) here. cvs.texi(,1685) cvs.texi(,1686) @cindex Notify.tmp file, in CVS directory cvs.texi(,1687) @cindex CVS/Notify.tmp file cvs.texi(,1688) @item Notify.tmp cvs.texi(,1689) This file is to @file{Notify} as @file{Entries.Backup} cvs.texi(,1690) is to @file{Entries}. That is, to write @file{Notify}, cvs.texi(,1691) first write the new contents to @file{Notify.tmp} and cvs.texi(,1692) then (atomically where possible), rename it to cvs.texi(,1693) @file{Notify}. cvs.texi(,1694) cvs.texi(,1695) @cindex Base directory, in CVS directory cvs.texi(,1696) @cindex CVS/Base directory cvs.texi(,1697) @item Base cvs.texi(,1698) If watches are in use, then an @code{edit} command cvs.texi(,1699) stores the original copy of the file in the @file{Base} cvs.texi(,1700) directory. This allows the @code{unedit} command to cvs.texi(,1701) operate even if it is unable to communicate with the cvs.texi(,1702) server. cvs.texi(,1703) cvs.texi(,1704) @cindex Baserev file, in CVS directory cvs.texi(,1705) @cindex CVS/Baserev file cvs.texi(,1706) @item Baserev cvs.texi(,1707) The file lists the revision for each of the files in cvs.texi(,1708) the @file{Base} directory. The format is: cvs.texi(,1709) cvs.texi(,1710) @example cvs.texi(,1711) B@var{name}/@var{rev}/@var{expansion} cvs.texi(,1712) @end example cvs.texi(,1713) cvs.texi(,1714) @noindent cvs.texi(,1715) where @var{expansion} should be ignored, to allow for cvs.texi(,1716) future expansion. cvs.texi(,1717) cvs.texi(,1718) @cindex Baserev.tmp file, in CVS directory cvs.texi(,1719) @cindex CVS/Baserev.tmp file cvs.texi(,1720) @item Baserev.tmp cvs.texi(,1721) This file is to @file{Baserev} as @file{Entries.Backup} cvs.texi(,1722) is to @file{Entries}. That is, to write @file{Baserev}, cvs.texi(,1723) first write the new contents to @file{Baserev.tmp} and cvs.texi(,1724) then (atomically where possible), rename it to cvs.texi(,1725) @file{Baserev}. cvs.texi(,1726) cvs.texi(,1727) @cindex Template file, in CVS directory cvs.texi(,1728) @cindex CVS/Template file cvs.texi(,1729) @item Template cvs.texi(,1730) This file contains the template specified by the cvs.texi(,1731) @file{rcsinfo} file (@pxref{rcsinfo}). It is only used cvs.texi(,1732) by the client; the non-client/server @sc{cvs} consults cvs.texi(,1733) @file{rcsinfo} directly. cvs.texi(,1734) @end table cvs.texi(,1735) cvs.texi(,1736) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,1737) @node Intro administrative files cvs.texi(,1738) @section The administrative files cvs.texi(,1739) @cindex Administrative files (intro) cvs.texi(,1740) @cindex Modules file cvs.texi(,1741) @cindex CVSROOT, module name cvs.texi(,1742) @cindex Defining modules (intro) cvs.texi(,1743) cvs.texi(,1744) @c FIXME: this node should be reorganized into "general cvs.texi(,1745) @c information about admin files" and put the "editing cvs.texi(,1746) @c admin files" stuff up front rather than jumping into cvs.texi(,1747) @c the details of modules right away. Then the cvs.texi(,1748) @c Administrative files node can go away, the information cvs.texi(,1749) @c on each admin file distributed to a place appropriate cvs.texi(,1750) @c to its function, and this node can contain a table cvs.texi(,1751) @c listing each file and a @ref to its detailed description. cvs.texi(,1752) cvs.texi(,1753) The directory @file{$CVSROOT/CVSROOT} contains some @dfn{administrative cvs.texi(,1754) files}. @xref{Administrative files}, for a complete description. cvs.texi(,1755) You can use @sc{cvs} without any of these files, but cvs.texi(,1756) some commands work better when at least the cvs.texi(,1757) @file{modules} file is properly set up. cvs.texi(,1758) cvs.texi(,1759) The most important of these files is the @file{modules} cvs.texi(,1760) file. It defines all modules in the repository. This cvs.texi(,1761) is a sample @file{modules} file. cvs.texi(,1762) cvs.texi(,1763) @c FIXME: The CVSROOT line is a goofy example now that cvs.texi(,1764) @c mkmodules doesn't exist. cvs.texi(,1765) @example cvs.texi(,1766) CVSROOT CVSROOT cvs.texi(,1767) modules CVSROOT modules cvs.texi(,1768) cvs gnu/cvs cvs.texi(,1769) rcs gnu/rcs cvs.texi(,1770) diff gnu/diff cvs.texi(,1771) tc yoyodyne/tc cvs.texi(,1772) @end example cvs.texi(,1773) cvs.texi(,1774) The @file{modules} file is line oriented. In its cvs.texi(,1775) simplest form each line contains the name of the cvs.texi(,1776) module, whitespace, and the directory where the module cvs.texi(,1777) resides. The directory is a path relative to cvs.texi(,1778) @code{$CVSROOT}. The last four lines in the example cvs.texi(,1779) above are examples of such lines. cvs.texi(,1780) cvs.texi(,1781) @c FIXME: might want to introduce the concept of options in modules file cvs.texi(,1782) @c (the old example which was here, -i mkmodules, is obsolete). cvs.texi(,1783) cvs.texi(,1784) The line that defines the module called @samp{modules} cvs.texi(,1785) uses features that are not explained here. cvs.texi(,1786) @xref{modules}, for a full explanation of all the cvs.texi(,1787) available features. cvs.texi(,1788) cvs.texi(,1789) @c FIXME: subsection without node is bogus cvs.texi(,1790) @subsection Editing administrative files cvs.texi(,1791) @cindex Editing administrative files cvs.texi(,1792) @cindex Administrative files, editing them cvs.texi(,1793) cvs.texi(,1794) You edit the administrative files in the same way that you would edit cvs.texi(,1795) any other module. Use @samp{cvs checkout CVSROOT} to get a working cvs.texi(,1796) copy, edit it, and commit your changes in the normal way. cvs.texi(,1797) cvs.texi(,1798) It is possible to commit an erroneous administrative cvs.texi(,1799) file. You can often fix the error and check in a new cvs.texi(,1800) revision, but sometimes a particularly bad error in the cvs.texi(,1801) administrative file makes it impossible to commit new cvs.texi(,1802) revisions. cvs.texi(,1803) @c @xref{Bad administrative files} for a hint cvs.texi(,1804) @c about how to solve such situations. cvs.texi(,1805) @c -- administrative file checking-- cvs.texi(,1806) cvs.texi(,1807) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,1808) @node Multiple repositories cvs.texi(,1809) @section Multiple repositories cvs.texi(,1810) @cindex Multiple repositories cvs.texi(,1811) @cindex Repositories, multiple cvs.texi(,1812) @cindex Many repositories cvs.texi(,1813) @cindex Parallel repositories cvs.texi(,1814) @cindex Disjoint repositories cvs.texi(,1815) @cindex CVSROOT, multiple repositories cvs.texi(,1816) cvs.texi(,1817) In some situations it is a good idea to have more than cvs.texi(,1818) one repository, for instance if you have two cvs.texi(,1819) development groups that work on separate projects cvs.texi(,1820) without sharing any code. All you have to do to have cvs.texi(,1821) several repositories is to specify the appropriate cvs.texi(,1822) repository, using the @code{CVSROOT} environment cvs.texi(,1823) variable, the @samp{-d} option to @sc{cvs}, or (once cvs.texi(,1824) you have checked out a working directory) by simply cvs.texi(,1825) allowing @sc{cvs} to use the repository that was used cvs.texi(,1826) to check out the working directory cvs.texi(,1827) (@pxref{Specifying a repository}). cvs.texi(,1828) cvs.texi(,1829) The big advantage of having multiple repositories is cvs.texi(,1830) that they can reside on different servers. With @sc{cvs} cvs.texi(,1831) version 1.10, a single command cannot recurse into cvs.texi(,1832) directories from different repositories. With development cvs.texi(,1833) versions of @sc{cvs}, you can check out code from multiple cvs.texi(,1834) servers into your working directory. @sc{cvs} will cvs.texi(,1835) recurse and handle all the details of making cvs.texi(,1836) connections to as many server machines as necessary to cvs.texi(,1837) perform the requested command. Here is an example of cvs.texi(,1838) how to set up a working directory: cvs.texi(,1839) cvs.texi(,1840) @example cvs.texi(,1841) cvs -d server1:/cvs co dir1 cvs.texi(,1842) cd dir1 cvs.texi(,1843) cvs -d server2:/root co sdir cvs.texi(,1844) cvs update cvs.texi(,1845) @end example cvs.texi(,1846) cvs.texi(,1847) The @code{cvs co} commands set up the working cvs.texi(,1848) directory, and then the @code{cvs update} command will cvs.texi(,1849) contact server2, to update the dir1/sdir subdirectory, cvs.texi(,1850) and server1, to update everything else. cvs.texi(,1851) cvs.texi(,1852) @c FIXME: Does the FAQ have more about this? I have a cvs.texi(,1853) @c dim recollection, but I'm too lazy to check right now. cvs.texi(,1854) cvs.texi(,1855) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,1856) @node Creating a repository cvs.texi(,1857) @section Creating a repository cvs.texi(,1858) cvs.texi(,1859) @cindex Repository, setting up cvs.texi(,1860) @cindex Creating a repository cvs.texi(,1861) @cindex Setting up a repository cvs.texi(,1862) cvs.texi(,1863) To set up a @sc{cvs} repository, first choose the cvs.texi(,1864) machine and disk on which you want to store the cvs.texi(,1865) revision history of the source files. CPU and memory cvs.texi(,1866) requirements are modest, so most machines should be cvs.texi(,1867) adequate. For details see @ref{Server requirements}. cvs.texi(,1868) @c Possible that we should be providing a quick rule of cvs.texi(,1869) @c thumb, like the 32M memory for the server. That cvs.texi(,1870) @c might increase the number of people who are happy cvs.texi(,1871) @c with the answer, without following the xref. cvs.texi(,1872) cvs.texi(,1873) To estimate disk space cvs.texi(,1874) requirements, if you are importing RCS files from cvs.texi(,1875) another system, the size of those files is the cvs.texi(,1876) approximate initial size of your repository, or if you cvs.texi(,1877) are starting without any version history, a rule of cvs.texi(,1878) thumb is to allow for the server approximately three cvs.texi(,1879) times the size of the code to be under @sc{cvs} for the cvs.texi(,1880) repository (you will eventually outgrow this, but not cvs.texi(,1881) for a while). On the machines on which the developers cvs.texi(,1882) will be working, you'll want disk space for cvs.texi(,1883) approximately one working directory for each developer cvs.texi(,1884) (either the entire tree or a portion of it, depending cvs.texi(,1885) on what each developer uses). cvs.texi(,1886) cvs.texi(,1887) The repository should be accessible cvs.texi(,1888) (directly or via a networked file system) from all cvs.texi(,1889) machines which want to use @sc{cvs} in server or local cvs.texi(,1890) mode; the client machines need not have any access to cvs.texi(,1891) it other than via the @sc{cvs} protocol. It is not cvs.texi(,1892) possible to use @sc{cvs} to read from a repository cvs.texi(,1893) which one only has read access to; @sc{cvs} needs to be cvs.texi(,1894) able to create lock files (@pxref{Concurrency}). cvs.texi(,1895) cvs.texi(,1896) @cindex init (subcommand) cvs.texi(,1897) To create a repository, run the @code{cvs init} cvs.texi(,1898) command. It will set up an empty repository in the cvs.texi(,1899) @sc{cvs} root specified in the usual way cvs.texi(,1900) (@pxref{Repository}). For example, cvs.texi(,1901) cvs.texi(,1902) @example cvs.texi(,1903) cvs -d /usr/local/cvsroot init cvs.texi(,1904) @end example cvs.texi(,1905) cvs.texi(,1906) @code{cvs init} is careful to never overwrite any cvs.texi(,1907) existing files in the repository, so no harm is done if cvs.texi(,1908) you run @code{cvs init} on an already set-up cvs.texi(,1909) repository. cvs.texi(,1910) cvs.texi(,1911) @code{cvs init} will enable history logging; if you cvs.texi(,1912) don't want that, remove the history file after running cvs.texi(,1913) @code{cvs init}. @xref{history file}. cvs.texi(,1914) cvs.texi(,1915) @node Backing up cvs.texi(,1916) @section Backing up a repository cvs.texi(,1917) @cindex Repository, backing up cvs.texi(,1918) @cindex Backing up, repository cvs.texi(,1919) cvs.texi(,1920) There is nothing particularly magical about the files cvs.texi(,1921) in the repository; for the most part it is possible to cvs.texi(,1922) back them up just like any other files. However, there cvs.texi(,1923) are a few issues to consider. cvs.texi(,1924) cvs.texi(,1925) @cindex Locks, cvs, and backups cvs.texi(,1926) @cindex #cvs.rfl, and backups cvs.texi(,1927) The first is that to be paranoid, one should either not cvs.texi(,1928) use @sc{cvs} during the backup, or have the backup cvs.texi(,1929) program lock @sc{cvs} while doing the backup. To not cvs.texi(,1930) use @sc{cvs}, you might forbid logins to machines which cvs.texi(,1931) can access the repository, turn off your @sc{cvs} cvs.texi(,1932) server, or similar mechanisms. The details would cvs.texi(,1933) depend on your operating system and how you have cvs.texi(,1934) @sc{cvs} set up. To lock @sc{cvs}, you would create cvs.texi(,1935) @file{#cvs.rfl} locks in each repository directory. cvs.texi(,1936) See @ref{Concurrency}, for more on @sc{cvs} locks. cvs.texi(,1937) Having said all this, if you just back up without any cvs.texi(,1938) of these precautions, the results are unlikely to be cvs.texi(,1939) particularly dire. Restoring from backup, the cvs.texi(,1940) repository might be in an inconsistent state, but this cvs.texi(,1941) would not be particularly hard to fix manually. cvs.texi(,1942) cvs.texi(,1943) When you restore a repository from backup, assuming cvs.texi(,1944) that changes in the repository were made after the time cvs.texi(,1945) of the backup, working directories which were not cvs.texi(,1946) affected by the failure may refer to revisions which no cvs.texi(,1947) longer exist in the repository. Trying to run @sc{cvs} cvs.texi(,1948) in such directories will typically produce an error cvs.texi(,1949) message. One way to get those changes back into the cvs.texi(,1950) repository is as follows: cvs.texi(,1951) cvs.texi(,1952) @itemize @bullet cvs.texi(,1953) @item cvs.texi(,1954) Get a new working directory. cvs.texi(,1955) cvs.texi(,1956) @item cvs.texi(,1957) Copy the files from the working directory from before cvs.texi(,1958) the failure over to the new working directory (do not cvs.texi(,1959) copy the contents of the @file{CVS} directories, of cvs.texi(,1960) course). cvs.texi(,1961) cvs.texi(,1962) @item cvs.texi(,1963) Working in the new working directory, use commands such cvs.texi(,1964) as @code{cvs update} and @code{cvs diff} to figure out cvs.texi(,1965) what has changed, and then when you are ready, commit cvs.texi(,1966) the changes into the repository. cvs.texi(,1967) @end itemize cvs.texi(,1968) cvs.texi(,1969) @node Moving a repository cvs.texi(,1970) @section Moving a repository cvs.texi(,1971) @cindex Repository, moving cvs.texi(,1972) @cindex Moving a repository cvs.texi(,1973) @cindex Copying a repository cvs.texi(,1974) cvs.texi(,1975) Just as backing up the files in the repository is cvs.texi(,1976) pretty much like backing up any other files, if you cvs.texi(,1977) need to move a repository from one place to another it cvs.texi(,1978) is also pretty much like just moving any other cvs.texi(,1979) collection of files. cvs.texi(,1980) cvs.texi(,1981) The main thing to consider is that working directories cvs.texi(,1982) point to the repository. The simplest way to deal with cvs.texi(,1983) a moved repository is to just get a fresh working cvs.texi(,1984) directory after the move. Of course, you'll want to cvs.texi(,1985) make sure that the old working directory had been cvs.texi(,1986) checked in before the move, or you figured out some cvs.texi(,1987) other way to make sure that you don't lose any cvs.texi(,1988) changes. If you really do want to reuse the existing cvs.texi(,1989) working directory, it should be possible with manual cvs.texi(,1990) surgery on the @file{CVS/Repository} files. You can cvs.texi(,1991) see @ref{Working directory storage}, for information on cvs.texi(,1992) the @file{CVS/Repository} and @file{CVS/Root} files, but cvs.texi(,1993) unless you are sure you want to bother, it probably cvs.texi(,1994) isn't worth it. cvs.texi(,1995) @c FIXME: Surgery on CVS/Repository should be avoided cvs.texi(,1996) @c by making RELATIVE_REPOS the default. cvs.texi(,1997) @c FIXME-maybe: might want some documented way to cvs.texi(,1998) @c change the CVS/Root files in some particular tree. cvs.texi(,1999) @c But then again, I don't know, maybe just having cvs.texi(,2000) @c people do this in perl/shell/&c isn't so bad... cvs.texi(,2001) cvs.texi(,2002) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,2003) @node Remote repositories cvs.texi(,2004) @section Remote repositories cvs.texi(,2005) @cindex Repositories, remote cvs.texi(,2006) @cindex Remote repositories cvs.texi(,2007) @cindex Client/Server Operation cvs.texi(,2008) @cindex Server, CVS cvs.texi(,2009) @cindex Remote repositories, port specification cvs.texi(,2010) @cindex Repositories, remote, port specification cvs.texi(,2011) @cindex Client/Server Operation, port specification cvs.texi(,2012) @cindex pserver (client/server connection method), port specification cvs.texi(,2013) @cindex kserver (client/server connection method), port specification cvs.texi(,2014) @cindex gserver (client/server connection method), port specification cvs.texi(,2015) @cindex port, specifying for remote repositories cvs.texi(,2016) cvs.texi(,2017) Your working copy of the sources can be on a cvs.texi(,2018) different machine than the repository. Using @sc{cvs} cvs.texi(,2019) in this manner is known as @dfn{client/server} cvs.texi(,2020) operation. You run @sc{cvs} on a machine which can cvs.texi(,2021) mount your working directory, known as the cvs.texi(,2022) @dfn{client}, and tell it to communicate to a machine cvs.texi(,2023) which can mount the repository, known as the cvs.texi(,2024) @dfn{server}. Generally, using a remote cvs.texi(,2025) repository is just like using a local one, except that cvs.texi(,2026) the format of the repository name is: cvs.texi(,2027) cvs.texi(,2028) @example cvs.texi(,2029) [:@var{method}:][[@var{user}][:@var{password}]@@]@var{hostname}[:[@var{port}]]/path/to/repository cvs.texi(,2030) @end example cvs.texi(,2031) cvs.texi(,2032) Specifying a password in the repository name is not recommended during cvs.texi(,2033) checkout, since this will cause @sc{cvs} to store a cleartext copy of the cvs.texi(,2034) password in each created directory. @code{cvs login} first instead cvs.texi(,2035) (@pxref{Password authentication client}). cvs.texi(,2036) cvs.texi(,2037) The details of exactly what needs to be set up depend cvs.texi(,2038) on how you are connecting to the server. cvs.texi(,2039) cvs.texi(,2040) If @var{method} is not specified, and the repository cvs.texi(,2041) name contains @samp{:}, then the default is @code{ext} cvs.texi(,2042) or @code{server}, depending on your platform; both are cvs.texi(,2043) described in @ref{Connecting via rsh}. cvs.texi(,2044) @c Should we try to explain which platforms are which? cvs.texi(,2045) @c Platforms like unix and VMS, which only allow cvs.texi(,2046) @c privileged programs to bind to sockets <1024 lose on cvs.texi(,2047) @c :server: cvs.texi(,2048) @c Platforms like Mac and VMS, whose rsh program is cvs.texi(,2049) @c unusable or nonexistent, lose on :ext: cvs.texi(,2050) @c Platforms like OS/2 and NT probably could plausibly cvs.texi(,2051) @c default either way (modulo -b troubles). cvs.texi(,2052) cvs.texi(,2053) @c FIXME: We need to have a better way of explaining cvs.texi(,2054) @c what method to use. This presentation totally cvs.texi(,2055) @c obscures the fact that :ext: and CVS_RSH is the way to cvs.texi(,2056) @c use SSH, for example. Plus it incorrectly implies cvs.texi(,2057) @c that you need an @code{rsh} binary on the client to use cvs.texi(,2058) @c :server:. cvs.texi(,2059) @c Also note that rsh not pserver is the right choice if you want cvs.texi(,2060) @c users to be able to create their own repositories cvs.texi(,2061) @c (because of the --allow-root related issues). cvs.texi(,2062) @menu cvs.texi(,2063) * Server requirements:: Memory and other resources for servers cvs.texi(,2064) * Connecting via rsh:: Using the @code{rsh} program to connect cvs.texi(,2065) * Password authenticated:: Direct connections using passwords cvs.texi(,2066) * GSSAPI authenticated:: Direct connections using GSSAPI cvs.texi(,2067) * Kerberos authenticated:: Direct connections with kerberos cvs.texi(,2068) * Connecting via fork:: Using a forked @code{cvs server} to connect cvs.texi(,2069) @end menu cvs.texi(,2070) cvs.texi(,2071) @node Server requirements cvs.texi(,2072) @subsection Server requirements cvs.texi(,2073) cvs.texi(,2074) The quick answer to what sort of machine is suitable as cvs.texi(,2075) a server is that requirements are modest---a server cvs.texi(,2076) with 32M of memory or even less can handle a fairly cvs.texi(,2077) large source tree with a fair amount of activity. cvs.texi(,2078) @c Say something about CPU speed too? I'm even less sure cvs.texi(,2079) @c what to say on that subject... cvs.texi(,2080) cvs.texi(,2081) The real answer, of course, is more complicated. cvs.texi(,2082) Estimating the known areas of large memory consumption cvs.texi(,2083) should be sufficient to estimate memory requirements. cvs.texi(,2084) There are two such areas documented here; other memory cvs.texi(,2085) consumption should be small by comparison (if you find cvs.texi(,2086) that is not the case, let us know, as described in cvs.texi(,2087) @ref{BUGS}, so we can update this documentation). cvs.texi(,2088) cvs.texi(,2089) The first area of big memory consumption is large cvs.texi(,2090) checkouts, when using the @sc{cvs} server. The server cvs.texi(,2091) consists of two processes for each client that it is cvs.texi(,2092) serving. Memory consumption on the child process cvs.texi(,2093) should remain fairly small. Memory consumption on the cvs.texi(,2094) parent process, particularly if the network connection cvs.texi(,2095) to the client is slow, can be expected to grow to cvs.texi(,2096) slightly more than the size of the sources in a single cvs.texi(,2097) directory, or two megabytes, whichever is larger. cvs.texi(,2098) @c "two megabytes" of course is SERVER_HI_WATER. But cvs.texi(,2099) @c we don't mention that here because we are cvs.texi(,2100) @c documenting the default configuration of CVS. If it cvs.texi(,2101) @c is a "standard" thing to change that value, it cvs.texi(,2102) @c should be some kind of run-time configuration. cvs.texi(,2103) @c cvs.texi(,2104) @c See cvsclient.texi for more on the design decision cvs.texi(,2105) @c to not have locks in place while waiting for the cvs.texi(,2106) @c client, which is what results in memory consumption cvs.texi(,2107) @c as high as this. cvs.texi(,2108) cvs.texi(,2109) Multiplying the size of each @sc{cvs} server by the cvs.texi(,2110) number of servers which you expect to have active at cvs.texi(,2111) one time should give an idea of memory requirements for cvs.texi(,2112) the server. For the most part, the memory consumed by cvs.texi(,2113) the parent process probably can be swap space rather cvs.texi(,2114) than physical memory. cvs.texi(,2115) @c Has anyone verified that notion about swap space? cvs.texi(,2116) @c I say it based pretty much on guessing that the cvs.texi(,2117) @c ->text of the struct buffer_data only gets accessed cvs.texi(,2118) @c in a first in, first out fashion, but I haven't cvs.texi(,2119) @c looked very closely. cvs.texi(,2120) cvs.texi(,2121) @c What about disk usage in /tmp on the server? I think that cvs.texi(,2122) @c it can be substantial, but I haven't looked at this cvs.texi(,2123) @c again and tried to figure it out ("cvs import" is cvs.texi(,2124) @c probably the worst case...). cvs.texi(,2125) cvs.texi(,2126) The second area of large memory consumption is cvs.texi(,2127) @code{diff}, when checking in large files. This is cvs.texi(,2128) required even for binary files. The rule of thumb is cvs.texi(,2129) to allow about ten times the size of the largest file cvs.texi(,2130) you will want to check in, although five times may be cvs.texi(,2131) adequate. For example, if you want to check in a file cvs.texi(,2132) which is 10 megabytes, you should have 100 megabytes of cvs.texi(,2133) memory on the machine doing the checkin (the server cvs.texi(,2134) machine for client/server, or the machine running cvs.texi(,2135) @sc{cvs} for non-client/server). This can be swap cvs.texi(,2136) space rather than physical memory. Because the memory cvs.texi(,2137) is only required briefly, there is no particular need cvs.texi(,2138) to allow memory for more than one such checkin at a cvs.texi(,2139) time. cvs.texi(,2140) @c The 5-10 times rule of thumb is from Paul Eggert for cvs.texi(,2141) @c GNU diff. I don't think it is in the GNU diff cvs.texi(,2142) @c manual or anyplace like that. cvs.texi(,2143) @c cvs.texi(,2144) @c Probably we could be saying more about cvs.texi(,2145) @c non-client/server CVS. cvs.texi(,2146) @c I would guess for non-client/server CVS in an NFS cvs.texi(,2147) @c environment the biggest issues are the network and cvs.texi(,2148) @c the NFS server. cvs.texi(,2149) cvs.texi(,2150) Resource consumption for the client is even more cvs.texi(,2151) modest---any machine with enough capacity to run the cvs.texi(,2152) operating system in question should have little cvs.texi(,2153) trouble. cvs.texi(,2154) @c Is that true? I think the client still wants to cvs.texi(,2155) @c (bogusly) store entire files in memory at times. cvs.texi(,2156) cvs.texi(,2157) For information on disk space requirements, see cvs.texi(,2158) @ref{Creating a repository}. cvs.texi(,2159) cvs.texi(,2160) @node Connecting via rsh cvs.texi(,2161) @subsection Connecting with rsh cvs.texi(,2162) cvs.texi(,2163) @cindex rsh cvs.texi(,2164) @sc{cvs} uses the @samp{rsh} protocol to perform these cvs.texi(,2165) operations, so the remote user host needs to have a cvs.texi(,2166) @file{.rhosts} file which grants access to the local cvs.texi(,2167) user. Note that the program that @sc{cvs} uses for this cvs.texi(,2168) purpose may be specified using the @file{--with-rsh} cvs.texi(,2169) flag to configure. cvs.texi(,2170) cvs.texi(,2171) For example, suppose you are the user @samp{mozart} on cvs.texi(,2172) the local machine @samp{toe.example.com}, and the cvs.texi(,2173) server machine is @samp{faun.example.org}. On cvs.texi(,2174) faun, put the following line into the file cvs.texi(,2175) @file{.rhosts} in @samp{bach}'s home directory: cvs.texi(,2176) cvs.texi(,2177) @example cvs.texi(,2178) toe.example.com mozart cvs.texi(,2179) @end example cvs.texi(,2180) cvs.texi(,2181) @noindent cvs.texi(,2182) Then test that @samp{rsh} is working with cvs.texi(,2183) cvs.texi(,2184) @example cvs.texi(,2185) rsh -l bach faun.example.org 'echo $PATH' cvs.texi(,2186) @end example cvs.texi(,2187) cvs.texi(,2188) @cindex CVS_SERVER, environment variable cvs.texi(,2189) Next you have to make sure that @code{rsh} will be able cvs.texi(,2190) to find the server. Make sure that the path which cvs.texi(,2191) @code{rsh} printed in the above example includes the cvs.texi(,2192) directory containing a program named @code{cvs} which cvs.texi(,2193) is the server. You need to set the path in cvs.texi(,2194) @file{.bashrc}, @file{.cshrc}, etc., not @file{.login} cvs.texi(,2195) or @file{.profile}. Alternately, you can set the cvs.texi(,2196) environment variable @code{CVS_SERVER} on the client cvs.texi(,2197) machine to the filename of the server you want to use, cvs.texi(,2198) for example @file{/usr/local/bin/cvs-1.6}. cvs.texi(,2199) @c FIXME: there should be a way to specify the cvs.texi(,2200) @c program in CVSROOT, not CVS_SERVER, so that one can use cvs.texi(,2201) @c different ones for different roots. e.g. ":server;cvs=cvs-1.6:" cvs.texi(,2202) @c instead of ":server:". cvs.texi(,2203) cvs.texi(,2204) There is no need to edit @file{inetd.conf} or start a cvs.texi(,2205) @sc{cvs} server daemon. cvs.texi(,2206) cvs.texi(,2207) @cindex :server:, setting up cvs.texi(,2208) @cindex :ext:, setting up cvs.texi(,2209) @cindex Kerberos, using kerberized rsh cvs.texi(,2210) @cindex SSH (rsh replacement) cvs.texi(,2211) @cindex rsh replacements (Kerberized, SSH, &c) cvs.texi(,2212) There are two access methods that you use in @code{CVSROOT} cvs.texi(,2213) for rsh. @code{:server:} specifies an internal rsh cvs.texi(,2214) client, which is supported only by some @sc{cvs} ports. cvs.texi(,2215) @code{:ext:} specifies an external rsh program. By cvs.texi(,2216) default this is @code{rsh} (unless otherwise specified cvs.texi(,2217) by the @file{--with-rsh} flag to configure) but you may set the cvs.texi(,2218) @code{CVS_RSH} environment variable to invoke another cvs.texi(,2219) program which can access the remote server (for cvs.texi(,2220) example, @code{remsh} on HP-UX 9 because @code{rsh} is cvs.texi(,2221) something different). It must be a program which can cvs.texi(,2222) transmit data to and from the server without modifying cvs.texi(,2223) it; for example the Windows NT @code{rsh} is not cvs.texi(,2224) suitable since it by default translates between CRLF cvs.texi(,2225) and LF. The OS/2 @sc{cvs} port has a hack to pass @samp{-b} cvs.texi(,2226) to @code{rsh} to get around this, but since this could cvs.texi(,2227) potentially cause problems for programs other than the cvs.texi(,2228) standard @code{rsh}, it may change in the future. If cvs.texi(,2229) you set @code{CVS_RSH} to @code{SSH} or some other rsh cvs.texi(,2230) replacement, the instructions in the rest of this cvs.texi(,2231) section concerning @file{.rhosts} and so on are likely cvs.texi(,2232) to be inapplicable; consult the documentation for your rsh cvs.texi(,2233) replacement. cvs.texi(,2234) @c FIXME: there should be a way to specify the cvs.texi(,2235) @c program in CVSROOT, not CVS_RSH, so that one can use cvs.texi(,2236) @c different ones for different roots. e.g. ":ext;rsh=remsh:" cvs.texi(,2237) @c instead of ":ext:". cvs.texi(,2238) @c See also the comment in src/client.c for rationale cvs.texi(,2239) @c concerning "rsh" being the default and never cvs.texi(,2240) @c "remsh". cvs.texi(,2241) cvs.texi(,2242) Continuing our example, supposing you want to access cvs.texi(,2243) the module @file{foo} in the repository cvs.texi(,2244) @file{/usr/local/cvsroot/}, on machine cvs.texi(,2245) @file{faun.example.org}, you are ready to go: cvs.texi(,2246) cvs.texi(,2247) @example cvs.texi(,2248) cvs -d :ext:bach@@faun.example.org:/usr/local/cvsroot checkout foo cvs.texi(,2249) @end example cvs.texi(,2250) cvs.texi(,2251) @noindent cvs.texi(,2252) (The @file{bach@@} can be omitted if the username is cvs.texi(,2253) the same on both the local and remote hosts.) cvs.texi(,2254) cvs.texi(,2255) @c Should we mention "rsh host echo hi" and "rsh host cvs.texi(,2256) @c cat" (the latter followed by typing text and ^D) cvs.texi(,2257) @c as troubleshooting techniques? Probably yes cvs.texi(,2258) @c (people tend to have trouble setting this up), cvs.texi(,2259) @c but this kind of thing can be hard to spell out. cvs.texi(,2260) cvs.texi(,2261) @node Password authenticated cvs.texi(,2262) @subsection Direct connection with password authentication cvs.texi(,2263) cvs.texi(,2264) The @sc{cvs} client can also connect to the server cvs.texi(,2265) using a password protocol. This is particularly useful cvs.texi(,2266) if using @code{rsh} is not feasible (for example, cvs.texi(,2267) the server is behind a firewall), and Kerberos also is cvs.texi(,2268) not available. cvs.texi(,2269) cvs.texi(,2270) To use this method, it is necessary to make cvs.texi(,2271) some adjustments on both the server and client sides. cvs.texi(,2272) cvs.texi(,2273) @menu cvs.texi(,2274) * Password authentication server:: Setting up the server cvs.texi(,2275) * Password authentication client:: Using the client cvs.texi(,2276) * Password authentication security:: What this method does and does not do cvs.texi(,2277) @end menu cvs.texi(,2278) cvs.texi(,2279) @node Password authentication server cvs.texi(,2280) @subsubsection Setting up the server for password authentication cvs.texi(,2281) cvs.texi(,2282) First of all, you probably want to tighten the cvs.texi(,2283) permissions on the @file{$CVSROOT} and cvs.texi(,2284) @file{$CVSROOT/CVSROOT} directories. See @ref{Password cvs.texi(,2285) authentication security}, for more details. cvs.texi(,2286) cvs.texi(,2287) @cindex pserver (subcommand) cvs.texi(,2288) @cindex Remote repositories, port specification cvs.texi(,2289) @cindex Repositories, remote, port specification cvs.texi(,2290) @cindex Client/Server Operation, port specification cvs.texi(,2291) @cindex pserver (client/server connection method), port specification cvs.texi(,2292) @cindex kserver (client/server connection method), port specification cvs.texi(,2293) @cindex gserver (client/server connection method), port specification cvs.texi(,2294) @cindex port, specifying for remote repositories cvs.texi(,2295) @cindex Password server, setting up cvs.texi(,2296) @cindex Authenticating server, setting up cvs.texi(,2297) @cindex inetd, configuring for pserver cvs.texi(,2298) @cindex xinetd, configuring for pserver cvs.texi(,2299) @c FIXME: this isn't quite right regarding port cvs.texi(,2300) @c numbers; CVS looks up "cvspserver" in cvs.texi(,2301) @c /etc/services (on unix, but what about non-unix?). cvs.texi(,2302) On the server side, the file @file{/etc/inetd.conf} cvs.texi(,2303) needs to be edited so @code{inetd} knows to run the cvs.texi(,2304) command @code{cvs pserver} when it receives a cvs.texi(,2305) connection on the right port. By default, the port cvs.texi(,2306) number is 2401; it would be different if your client cvs.texi(,2307) were compiled with @code{CVS_AUTH_PORT} defined to cvs.texi(,2308) something else, though. This can also be specified in the CVSROOT variable cvs.texi(,2309) (@pxref{Remote repositories}) or overridden with the CVS_CLIENT_PORT cvs.texi(,2310) environment variable (@pxref{Environment variables}). cvs.texi(,2311) cvs.texi(,2312) If your @code{inetd} allows raw port numbers in cvs.texi(,2313) @file{/etc/inetd.conf}, then the following (all on a cvs.texi(,2314) single line in @file{inetd.conf}) should be sufficient: cvs.texi(,2315) cvs.texi(,2316) @example cvs.texi(,2317) 2401 stream tcp nowait root /usr/local/bin/cvs cvs.texi(,2318) cvs -f --allow-root=/usr/cvsroot pserver cvs.texi(,2319) @end example cvs.texi(,2320) cvs.texi(,2321) @noindent cvs.texi(,2322) (You could also use the cvs.texi(,2323) @samp{-T} option to specify a temporary directory.) cvs.texi(,2324) cvs.texi(,2325) The @samp{--allow-root} option specifies the allowable cvs.texi(,2326) @sc{cvsroot} directory. Clients which attempt to use a cvs.texi(,2327) different @sc{cvsroot} directory will not be allowed to cvs.texi(,2328) connect. If there is more than one @sc{cvsroot} cvs.texi(,2329) directory which you want to allow, repeat the option. cvs.texi(,2330) (Unfortunately, many versions of @code{inetd} have very small cvs.texi(,2331) limits on the number of arguments and/or the total length cvs.texi(,2332) of the command. The usual solution to this problem is cvs.texi(,2333) to have @code{inetd} run a shell script which then invokes cvs.texi(,2334) @sc{cvs} with the necessary arguments.) cvs.texi(,2335) cvs.texi(,2336) If your @code{inetd} wants a symbolic service cvs.texi(,2337) name instead of a raw port number, then put this in cvs.texi(,2338) @file{/etc/services}: cvs.texi(,2339) cvs.texi(,2340) @example cvs.texi(,2341) cvspserver 2401/tcp cvs.texi(,2342) @end example cvs.texi(,2343) cvs.texi(,2344) @noindent cvs.texi(,2345) and put @code{cvspserver} instead of @code{2401} in @file{inetd.conf}. cvs.texi(,2346) cvs.texi(,2347) If your system uses @code{xinetd} instead of @code{inetd}, cvs.texi(,2348) the procedure is slightly different. cvs.texi(,2349) Create a file called @file{/etc/xinetd.d/cvspserver} containing the following: cvs.texi(,2350) cvs.texi(,2351) @example cvs.texi(,2352) service cvspserver cvs.texi(,2353) @{ cvs.texi(,2354) port = 2401 cvs.texi(,2355) socket_type = stream cvs.texi(,2356) protocol = tcp cvs.texi(,2357) wait = no cvs.texi(,2358) user = root cvs.texi(,2359) passenv = PATH cvs.texi(,2360) server = /usr/local/bin/cvs cvs.texi(,2361) server_args = -f --allow-root=/usr/cvsroot pserver cvs.texi(,2362) @} cvs.texi(,2363) @end example cvs.texi(,2364) cvs.texi(,2365) @noindent cvs.texi(,2366) (If @code{cvspserver} is defined in @file{/etc/services}, you can omit cvs.texi(,2367) the @code{port} line.) cvs.texi(,2368) cvs.texi(,2369) Once the above is taken care of, restart your cvs.texi(,2370) @code{inetd}, or do whatever is necessary to force it cvs.texi(,2371) to reread its initialization files. cvs.texi(,2372) cvs.texi(,2373) If you are having trouble setting this up, see cvs.texi(,2374) @ref{Connection}. cvs.texi(,2375) cvs.texi(,2376) @cindex CVS passwd file cvs.texi(,2377) @cindex passwd (admin file) cvs.texi(,2378) Because the client stores and transmits passwords in cvs.texi(,2379) cleartext (almost---see @ref{Password authentication cvs.texi(,2380) security}, for details), a separate @sc{cvs} password cvs.texi(,2381) file is generally used, so people don't compromise cvs.texi(,2382) their regular passwords when they access the cvs.texi(,2383) repository. This file is cvs.texi(,2384) @file{$CVSROOT/CVSROOT/passwd} (@pxref{Intro cvs.texi(,2385) administrative files}). It uses a colon-separated cvs.texi(,2386) format, similar to @file{/etc/passwd} on Unix systems, cvs.texi(,2387) except that it has fewer fields: @sc{cvs} username, cvs.texi(,2388) optional password, and an optional system username for cvs.texi(,2389) @sc{cvs} to run as if authentication succeeds. Here is cvs.texi(,2390) an example @file{passwd} file with five entries: cvs.texi(,2391) cvs.texi(,2392) @example cvs.texi(,2393) anonymous: cvs.texi(,2394) bach:ULtgRLXo7NRxs cvs.texi(,2395) spwang:1sOp854gDF3DY cvs.texi(,2396) melissa:tGX1fS8sun6rY:pubcvs cvs.texi(,2397) qproj:XR4EZcEs0szik:pubcvs cvs.texi(,2398) @end example cvs.texi(,2399) cvs.texi(,2400) @noindent cvs.texi(,2401) (The passwords are encrypted according to the standard cvs.texi(,2402) Unix @code{crypt()} function, so it is possible to cvs.texi(,2403) paste in passwords directly from regular Unix cvs.texi(,2404) @file{/etc/passwd} files.) cvs.texi(,2405) cvs.texi(,2406) The first line in the example will grant access to any cvs.texi(,2407) @sc{cvs} client attempting to authenticate as user cvs.texi(,2408) @code{anonymous}, no matter what password they use, cvs.texi(,2409) including an empty password. (This is typical for cvs.texi(,2410) sites granting anonymous read-only access; for cvs.texi(,2411) information on how to do the "read-only" part, see cvs.texi(,2412) @ref{Read-only access}.) cvs.texi(,2413) cvs.texi(,2414) The second and third lines will grant access to cvs.texi(,2415) @code{bach} and @code{spwang} if they supply their cvs.texi(,2416) respective plaintext passwords. cvs.texi(,2417) cvs.texi(,2418) @cindex User aliases cvs.texi(,2419) The fourth line will grant access to @code{melissa}, if cvs.texi(,2420) she supplies the correct password, but her @sc{cvs} cvs.texi(,2421) operations will actually run on the server side under cvs.texi(,2422) the system user @code{pubcvs}. Thus, there need not be cvs.texi(,2423) any system user named @code{melissa}, but there cvs.texi(,2424) @emph{must} be one named @code{pubcvs}. cvs.texi(,2425) cvs.texi(,2426) The fifth line shows that system user identities can be cvs.texi(,2427) shared: any client who successfully authenticates as cvs.texi(,2428) @code{qproj} will actually run as @code{pubcvs}, just cvs.texi(,2429) as @code{melissa} does. That way you could create a cvs.texi(,2430) single, shared system user for each project in your cvs.texi(,2431) repository, and give each developer their own line in cvs.texi(,2432) the @file{$CVSROOT/CVSROOT/passwd} file. The @sc{cvs} cvs.texi(,2433) username on each line would be different, but the cvs.texi(,2434) system username would be the same. The reason to have cvs.texi(,2435) different @sc{cvs} usernames is that @sc{cvs} will log their cvs.texi(,2436) actions under those names: when @code{melissa} commits cvs.texi(,2437) a change to a project, the checkin is recorded in the cvs.texi(,2438) project's history under the name @code{melissa}, not cvs.texi(,2439) @code{pubcvs}. And the reason to have them share a cvs.texi(,2440) system username is so that you can arrange permissions cvs.texi(,2441) in the relevant area of the repository such that only cvs.texi(,2442) that account has write-permission there. cvs.texi(,2443) cvs.texi(,2444) If the system-user field is present, all cvs.texi(,2445) password-authenticated @sc{cvs} commands run as that cvs.texi(,2446) user; if no system user is specified, @sc{cvs} simply cvs.texi(,2447) takes the @sc{cvs} username as the system username and cvs.texi(,2448) runs commands as that user. In either case, if there cvs.texi(,2449) is no such user on the system, then the @sc{cvs} cvs.texi(,2450) operation will fail (regardless of whether the client cvs.texi(,2451) supplied a valid password). cvs.texi(,2452) cvs.texi(,2453) The password and system-user fields can both be omitted cvs.texi(,2454) (and if the system-user field is omitted, then also cvs.texi(,2455) omit the colon that would have separated it from the cvs.texi(,2456) encrypted password). For example, this would be a cvs.texi(,2457) valid @file{$CVSROOT/CVSROOT/passwd} file: cvs.texi(,2458) cvs.texi(,2459) @example cvs.texi(,2460) anonymous::pubcvs cvs.texi(,2461) fish:rKa5jzULzmhOo:kfogel cvs.texi(,2462) sussman:1sOp854gDF3DY cvs.texi(,2463) @end example cvs.texi(,2464) cvs.texi(,2465) @noindent cvs.texi(,2466) When the password field is omitted or empty, then the cvs.texi(,2467) client's authentication attempt will succeed with any cvs.texi(,2468) password, including the empty string. However, the cvs.texi(,2469) colon after the @sc{cvs} username is always necessary, cvs.texi(,2470) even if the password is empty. cvs.texi(,2471) cvs.texi(,2472) @sc{cvs} can also fall back to use system authentication. cvs.texi(,2473) When authenticating a password, the server first checks cvs.texi(,2474) for the user in the @file{$CVSROOT/CVSROOT/passwd} cvs.texi(,2475) file. If it finds the user, it will use that entry for cvs.texi(,2476) authentication as described above. But if it does not cvs.texi(,2477) find the user, or if the @sc{cvs} @file{passwd} file cvs.texi(,2478) does not exist, then the server can try to authenticate cvs.texi(,2479) the username and password using the operating system's cvs.texi(,2480) user-lookup routines (this "fallback" behavior can be cvs.texi(,2481) disabled by setting @code{SystemAuth=no} in the cvs.texi(,2482) @sc{cvs} @file{config} file, @pxref{config}). cvs.texi(,2483) cvs.texi(,2484) The default fallback behaviour is to look in cvs.texi(,2485) @file{/etc/passwd} for this system password unless your cvs.texi(,2486) system has PAM (Pluggable Authentication Modules) cvs.texi(,2487) and your @sc{cvs} server executable was configured to cvs.texi(,2488) use it at compile time (using @code{./configure --enable-pam} - see the cvs.texi(,2489) INSTALL file for more). In this case, PAM will be consulted instead. cvs.texi(,2490) This means that @sc{cvs} can be configured to use any password cvs.texi(,2491) authentication source PAM can be configured to use (possibilities cvs.texi(,2492) include a simple UNIX password, NIS, LDAP, and others) in its cvs.texi(,2493) global configuration file (usually @file{/etc/pam.conf} cvs.texi(,2494) or possibly @file{/etc/pam.d/cvs}). See your PAM documentation cvs.texi(,2495) for more details on PAM configuration. cvs.texi(,2496) cvs.texi(,2497) Note that PAM is an experimental feature in @sc{cvs} and feedback is cvs.texi(,2498) encouraged. Please send a mail to one of the @sc{cvs} mailing lists cvs.texi(,2499) (@code{info-cvs@@gnu.org} or @code{bug-cvs@@gnu.org}) if you use the cvs.texi(,2500) @sc{cvs} PAM support. cvs.texi(,2501) cvs.texi(,2502) @strong{WARNING: Using PAM gives the system administrator much more cvs.texi(,2503) flexibility about how @sc{cvs} users are authenticated but cvs.texi(,2504) no more security than other methods. See below for more.} cvs.texi(,2505) cvs.texi(,2506) CVS needs an "auth" and "account" module in the cvs.texi(,2507) PAM configuration file. A typical PAM configuration cvs.texi(,2508) would therefore have the following lines cvs.texi(,2509) in @file{/etc/pam.conf} to emulate the standard @sc{cvs} cvs.texi(,2510) system @file{/etc/passwd} authentication: cvs.texi(,2511) cvs.texi(,2512) @example cvs.texi(,2513) cvs auth required pam_unix.so cvs.texi(,2514) cvs account required pam_unix.so cvs.texi(,2515) @end example cvs.texi(,2516) cvs.texi(,2517) The the equivalent @file{/etc/pam.d/cvs} would contain cvs.texi(,2518) cvs.texi(,2519) @example cvs.texi(,2520) auth required pam_unix.so cvs.texi(,2521) account required pam_unix.so cvs.texi(,2522) @end example cvs.texi(,2523) cvs.texi(,2524) Some systems require a full path to the module so that cvs.texi(,2525) @file{pam_unix.so} (Linux) would become something like cvs.texi(,2526) @file{/usr/lib/security/$ISA/pam_unix.so.1} (Sun Solaris). cvs.texi(,2527) See the @file{contrib/pam} subdirectory of the @sc{cvs} cvs.texi(,2528) source distribution for further example configurations. cvs.texi(,2529) cvs.texi(,2530) The PAM service name given above as "cvs" is just cvs.texi(,2531) the service name in the default configuration amd can be cvs.texi(,2532) set using cvs.texi(,2533) @code{./configure --with-hardcoded-pam-service-name=} cvs.texi(,2534) before compiling. @sc{cvs} can also be configured to use whatever cvs.texi(,2535) name it is invoked as as its PAM service name using cvs.texi(,2536) @code{./configure --without-hardcoded-pam-service-name}, but this cvs.texi(,2537) feature should not be used if you may not have control of the name cvs.texi(,2538) @sc{cvs} will be invoked as. cvs.texi(,2539) cvs.texi(,2540) Be aware, also, that falling back to system cvs.texi(,2541) authentication might be a security risk: @sc{cvs} cvs.texi(,2542) operations would then be authenticated with that user's cvs.texi(,2543) regular login password, and the password flies across cvs.texi(,2544) the network in plaintext. See @ref{Password cvs.texi(,2545) authentication security} for more on this. cvs.texi(,2546) This may be more of a problem with PAM authentication cvs.texi(,2547) because it is likely that the source of the system cvs.texi(,2548) password is some central authentication service like cvs.texi(,2549) LDAP which is also used to authenticate other services. cvs.texi(,2550) cvs.texi(,2551) On the other hand, PAM makes it very easy to change your password cvs.texi(,2552) regularly. If they are given the option of a one-password system for cvs.texi(,2553) all of their activities, users are often more willing to change their cvs.texi(,2554) password on a regular basis. cvs.texi(,2555) cvs.texi(,2556) In the non-PAM configuration where the password is stored in the cvs.texi(,2557) @file{CVSROOT/passwd} file, it is difficult to change passwords on a cvs.texi(,2558) regular basis since only administrative users (or in some cases cvs.texi(,2559) processes that act as an administrative user) are typicaly given cvs.texi(,2560) access to modify this file. Either there needs to be some cvs.texi(,2561) hand-crafted web page or set-uid program to update the file, or the cvs.texi(,2562) update needs to be done by submitting a request to an administrator to cvs.texi(,2563) perform the duty by hand. In the first case, having to remember to cvs.texi(,2564) update a separate password on a periodic basis can be difficult. In cvs.texi(,2565) the second case, the manual nature of the change will typically mean cvs.texi(,2566) that the password will not be changed unless it is absolutely cvs.texi(,2567) necessary. cvs.texi(,2568) cvs.texi(,2569) Note that PAM administrators should probably avoid configuring cvs.texi(,2570) one-time-passwords (OTP) for @sc{cvs} authentication/authorization. If cvs.texi(,2571) OTPs are desired, the administrator may wish to encourage the use of cvs.texi(,2572) one of the other Client/Server access methods. See the section on cvs.texi(,2573) @pxref{Remote repositories} for a list of other methods. cvs.texi(,2574) cvs.texi(,2575) Right now, the only way to put a password in the cvs.texi(,2576) @sc{cvs} @file{passwd} file is to paste it there from cvs.texi(,2577) somewhere else. Someday, there may be a @code{cvs cvs.texi(,2578) passwd} command. cvs.texi(,2579) cvs.texi(,2580) Unlike many of the files in @file{$CVSROOT/CVSROOT}, it cvs.texi(,2581) is normal to edit the @file{passwd} file in-place, cvs.texi(,2582) rather than via @sc{cvs}. This is because of the cvs.texi(,2583) possible security risks of having the @file{passwd} cvs.texi(,2584) file checked out to people's working copies. If you do cvs.texi(,2585) want to include the @file{passwd} file in checkouts of cvs.texi(,2586) @file{$CVSROOT/CVSROOT}, see @ref{checkoutlist}. cvs.texi(,2587) cvs.texi(,2588) @c We might also suggest using the @code{htpasswd} command cvs.texi(,2589) @c from freely available web servers as well, but that cvs.texi(,2590) @c would open up a can of worms in that the users next cvs.texi(,2591) @c questions are likely to be "where do I get it?" and cvs.texi(,2592) @c "how do I use it?" cvs.texi(,2593) @c Also note that htpasswd, at least the version I had, cvs.texi(,2594) @c likes to clobber the third field. cvs.texi(,2595) cvs.texi(,2596) @node Password authentication client cvs.texi(,2597) @subsubsection Using the client with password authentication cvs.texi(,2598) @cindex Login (subcommand) cvs.texi(,2599) @cindex Password client, using cvs.texi(,2600) @cindex Authenticated client, using cvs.texi(,2601) @cindex :pserver:, setting up cvs.texi(,2602) To run a @sc{cvs} command on a remote repository via cvs.texi(,2603) the password-authenticating server, one specifies the cvs.texi(,2604) @code{pserver} protocol, optional username, repository host, an cvs.texi(,2605) optional port number, and path to the repository. For example: cvs.texi(,2606) cvs.texi(,2607) @example cvs.texi(,2608) cvs -d :pserver:faun.example.org:/usr/local/cvsroot checkout someproj cvs.texi(,2609) @end example cvs.texi(,2610) cvs.texi(,2611) @noindent cvs.texi(,2612) or cvs.texi(,2613) cvs.texi(,2614) @example cvs.texi(,2615) CVSROOT=:pserver:bach@@faun.example.org:2401/usr/local/cvsroot cvs.texi(,2616) cvs checkout someproj cvs.texi(,2617) @end example cvs.texi(,2618) cvs.texi(,2619) However, unless you're connecting to a public-access cvs.texi(,2620) repository (i.e., one where that username doesn't cvs.texi(,2621) require a password), you'll need to supply a password or @dfn{log in} first. cvs.texi(,2622) Logging in verifies your password with the repository and stores it in a file. cvs.texi(,2623) It's done with the @code{login} command, which will cvs.texi(,2624) prompt you interactively for the password if you didn't supply one as part of cvs.texi(,2625) @var{$CVSROOT}: cvs.texi(,2626) cvs.texi(,2627) @example cvs.texi(,2628) cvs -d :pserver:bach@@faun.example.org:/usr/local/cvsroot login cvs.texi(,2629) CVS password: cvs.texi(,2630) @end example cvs.texi(,2631) cvs.texi(,2632) @noindent cvs.texi(,2633) or cvs.texi(,2634) cvs.texi(,2635) @example cvs.texi(,2636) cvs -d :pserver:bach:p4ss30rd@@faun.example.org:/usr/local/cvsroot login cvs.texi(,2637) @end example cvs.texi(,2638) cvs.texi(,2639) After you enter the password, @sc{cvs} verifies it with cvs.texi(,2640) the server. If the verification succeeds, then that cvs.texi(,2641) combination of username, host, repository, and password cvs.texi(,2642) is permanently recorded, so future transactions with cvs.texi(,2643) that repository won't require you to run @code{cvs cvs.texi(,2644) login}. (If verification fails, @sc{cvs} will exit cvs.texi(,2645) complaining that the password was incorrect, and cvs.texi(,2646) nothing will be recorded.) cvs.texi(,2647) cvs.texi(,2648) The records are stored, by default, in the file cvs.texi(,2649) @file{$HOME/.cvspass}. That file's format is cvs.texi(,2650) human-readable, and to a degree human-editable, but cvs.texi(,2651) note that the passwords are not stored in cvs.texi(,2652) cleartext---they are trivially encoded to protect them cvs.texi(,2653) from "innocent" compromise (i.e., inadvertent viewing cvs.texi(,2654) by a system administrator or other non-malicious cvs.texi(,2655) person). cvs.texi(,2656) cvs.texi(,2657) @cindex CVS_PASSFILE, environment variable cvs.texi(,2658) You can change the default location of this file by cvs.texi(,2659) setting the @code{CVS_PASSFILE} environment variable. cvs.texi(,2660) If you use this variable, make sure you set it cvs.texi(,2661) @emph{before} @code{cvs login} is run. If you were to cvs.texi(,2662) set it after running @code{cvs login}, then later cvs.texi(,2663) @sc{cvs} commands would be unable to look up the cvs.texi(,2664) password for transmission to the server. cvs.texi(,2665) cvs.texi(,2666) Once you have logged in, all @sc{cvs} commands using cvs.texi(,2667) that remote repository and username will authenticate cvs.texi(,2668) with the stored password. So, for example cvs.texi(,2669) cvs.texi(,2670) @example cvs.texi(,2671) cvs -d :pserver:bach@@faun.example.org:/usr/local/cvsroot checkout foo cvs.texi(,2672) @end example cvs.texi(,2673) cvs.texi(,2674) @noindent cvs.texi(,2675) should just work (unless the password changes on the cvs.texi(,2676) server side, in which case you'll have to re-run cvs.texi(,2677) @code{cvs login}). cvs.texi(,2678) cvs.texi(,2679) Note that if the @samp{:pserver:} were not present in cvs.texi(,2680) the repository specification, @sc{cvs} would assume it cvs.texi(,2681) should use @code{rsh} to connect with the server cvs.texi(,2682) instead (@pxref{Connecting via rsh}). cvs.texi(,2683) cvs.texi(,2684) Of course, once you have a working copy checked out and cvs.texi(,2685) are running @sc{cvs} commands from within it, there is cvs.texi(,2686) no longer any need to specify the repository cvs.texi(,2687) explicitly, because @sc{cvs} can deduce the repository cvs.texi(,2688) from the working copy's @file{CVS} subdirectory. cvs.texi(,2689) cvs.texi(,2690) @c FIXME: seems to me this needs somewhat more cvs.texi(,2691) @c explanation. cvs.texi(,2692) @cindex Logout (subcommand) cvs.texi(,2693) The password for a given remote repository can be cvs.texi(,2694) removed from the @code{CVS_PASSFILE} by using the cvs.texi(,2695) @code{cvs logout} command. cvs.texi(,2696) cvs.texi(,2697) @node Password authentication security cvs.texi(,2698) @subsubsection Security considerations with password authentication cvs.texi(,2699) cvs.texi(,2700) @cindex Security, of pserver cvs.texi(,2701) The passwords are stored on the client side in a cvs.texi(,2702) trivial encoding of the cleartext, and transmitted in cvs.texi(,2703) the same encoding. The encoding is done only to cvs.texi(,2704) prevent inadvertent password compromises (i.e., a cvs.texi(,2705) system administrator accidentally looking at the file), cvs.texi(,2706) and will not prevent even a naive attacker from gaining cvs.texi(,2707) the password. cvs.texi(,2708) cvs.texi(,2709) @c FIXME: The bit about "access to the repository cvs.texi(,2710) @c implies general access to the system is *not* specific cvs.texi(,2711) @c to pserver; it applies to kerberos and SSH and cvs.texi(,2712) @c everything else too. Should reorganize the cvs.texi(,2713) @c documentation to make this clear. cvs.texi(,2714) The separate @sc{cvs} password file (@pxref{Password cvs.texi(,2715) authentication server}) allows people cvs.texi(,2716) to use a different password for repository access than cvs.texi(,2717) for login access. On the other hand, once a user has cvs.texi(,2718) non-read-only cvs.texi(,2719) access to the repository, she can execute programs on cvs.texi(,2720) the server system through a variety of means. Thus, repository cvs.texi(,2721) access implies fairly broad system access as well. It cvs.texi(,2722) might be possible to modify @sc{cvs} to prevent that, cvs.texi(,2723) but no one has done so as of this writing. cvs.texi(,2724) @c OpenBSD uses chroot() and copies the repository to cvs.texi(,2725) @c provide anonymous read-only access (for details see cvs.texi(,2726) @c http://www.openbsd.org/anoncvs.shar). While this cvs.texi(,2727) @c closes the most obvious holes, I'm not sure it cvs.texi(,2728) @c closes enough holes to recommend it (plus it is cvs.texi(,2729) @c *very* easy to accidentally screw up a setup of this cvs.texi(,2730) @c type). cvs.texi(,2731) cvs.texi(,2732) Note that because the @file{$CVSROOT/CVSROOT} directory cvs.texi(,2733) contains @file{passwd} and other files which are used cvs.texi(,2734) to check security, you must control the permissions on cvs.texi(,2735) this directory as tightly as the permissions on cvs.texi(,2736) @file{/etc}. The same applies to the @file{$CVSROOT} cvs.texi(,2737) directory itself and any directory cvs.texi(,2738) above it in the tree. Anyone who has write access to cvs.texi(,2739) such a directory will have the ability to become any cvs.texi(,2740) user on the system. Note that these permissions are cvs.texi(,2741) typically tighter than you would use if you are not cvs.texi(,2742) using pserver. cvs.texi(,2743) @c TODO: Would be really nice to document/implement a cvs.texi(,2744) @c scheme where the CVS server can run as some non-root cvs.texi(,2745) @c user, e.g. "cvs". CVSROOT/passwd would contain a cvs.texi(,2746) @c bunch of entries of the form foo:xxx:cvs (or the "cvs" cvs.texi(,2747) @c would be implicit). This would greatly reduce cvs.texi(,2748) @c security risks such as those hinted at in the cvs.texi(,2749) @c previous paragraph. I think minor changes to CVS cvs.texi(,2750) @c might be required but mostly this would just need cvs.texi(,2751) @c someone who wants to play with it, document it, &c. cvs.texi(,2752) cvs.texi(,2753) In summary, anyone who gets the password gets cvs.texi(,2754) repository access (which may imply some measure of general system cvs.texi(,2755) access as well). The password is available to anyone cvs.texi(,2756) who can sniff network packets or read a protected cvs.texi(,2757) (i.e., user read-only) file. If you want real cvs.texi(,2758) security, get Kerberos. cvs.texi(,2759) cvs.texi(,2760) @node GSSAPI authenticated cvs.texi(,2761) @subsection Direct connection with GSSAPI cvs.texi(,2762) cvs.texi(,2763) @cindex GSSAPI cvs.texi(,2764) @cindex Security, GSSAPI cvs.texi(,2765) @cindex :gserver:, setting up cvs.texi(,2766) @cindex Kerberos, using :gserver: cvs.texi(,2767) GSSAPI is a generic interface to network security cvs.texi(,2768) systems such as Kerberos 5. cvs.texi(,2769) If you have a working GSSAPI library, you can have cvs.texi(,2770) @sc{cvs} connect via a direct @sc{tcp} connection, cvs.texi(,2771) authenticating with GSSAPI. cvs.texi(,2772) cvs.texi(,2773) To do this, @sc{cvs} needs to be compiled with GSSAPI cvs.texi(,2774) support; when configuring @sc{cvs} it tries to detect cvs.texi(,2775) whether GSSAPI libraries using kerberos version 5 are cvs.texi(,2776) present. You can also use the @file{--with-gssapi} cvs.texi(,2777) flag to configure. cvs.texi(,2778) cvs.texi(,2779) The connection is authenticated using GSSAPI, but the cvs.texi(,2780) message stream is @emph{not} authenticated by default. cvs.texi(,2781) You must use the @code{-a} global option to request cvs.texi(,2782) stream authentication. cvs.texi(,2783) cvs.texi(,2784) The data transmitted is @emph{not} encrypted by cvs.texi(,2785) default. Encryption support must be compiled into both cvs.texi(,2786) the client and the server; use the cvs.texi(,2787) @file{--enable-encrypt} configure option to turn it on. cvs.texi(,2788) You must then use the @code{-x} global option to cvs.texi(,2789) request encryption. cvs.texi(,2790) cvs.texi(,2791) GSSAPI connections are handled on the server side by cvs.texi(,2792) the same server which handles the password cvs.texi(,2793) authentication server; see @ref{Password authentication cvs.texi(,2794) server}. If you are using a GSSAPI mechanism such as cvs.texi(,2795) Kerberos which provides for strong authentication, you cvs.texi(,2796) will probably want to disable the ability to cvs.texi(,2797) authenticate via cleartext passwords. To do so, create cvs.texi(,2798) an empty @file{CVSROOT/passwd} password file, and set cvs.texi(,2799) @code{SystemAuth=no} in the config file cvs.texi(,2800) (@pxref{config}). cvs.texi(,2801) cvs.texi(,2802) The GSSAPI server uses a principal name of cvs.texi(,2803) cvs/@var{hostname}, where @var{hostname} is the cvs.texi(,2804) canonical name of the server host. You will have to cvs.texi(,2805) set this up as required by your GSSAPI mechanism. cvs.texi(,2806) cvs.texi(,2807) To connect using GSSAPI, use @samp{:gserver:}. For cvs.texi(,2808) example, cvs.texi(,2809) cvs.texi(,2810) @example cvs.texi(,2811) cvs -d :gserver:faun.example.org:/usr/local/cvsroot checkout foo cvs.texi(,2812) @end example cvs.texi(,2813) cvs.texi(,2814) @node Kerberos authenticated cvs.texi(,2815) @subsection Direct connection with kerberos cvs.texi(,2816) cvs.texi(,2817) @cindex Kerberos, using :kserver: cvs.texi(,2818) @cindex Security, kerberos cvs.texi(,2819) @cindex :kserver:, setting up cvs.texi(,2820) The easiest way to use kerberos is to use the kerberos cvs.texi(,2821) @code{rsh}, as described in @ref{Connecting via rsh}. cvs.texi(,2822) The main disadvantage of using rsh is that all the data cvs.texi(,2823) needs to pass through additional programs, so it may be cvs.texi(,2824) slower. So if you have kerberos installed you can cvs.texi(,2825) connect via a direct @sc{tcp} connection, cvs.texi(,2826) authenticating with kerberos. cvs.texi(,2827) cvs.texi(,2828) This section concerns the kerberos network security cvs.texi(,2829) system, version 4. Kerberos version 5 is supported via cvs.texi(,2830) the GSSAPI generic network security interface, as cvs.texi(,2831) described in the previous section. cvs.texi(,2832) cvs.texi(,2833) To do this, @sc{cvs} needs to be compiled with kerberos cvs.texi(,2834) support; when configuring @sc{cvs} it tries to detect cvs.texi(,2835) whether kerberos is present or you can use the cvs.texi(,2836) @file{--with-krb4} flag to configure. cvs.texi(,2837) cvs.texi(,2838) The data transmitted is @emph{not} encrypted by cvs.texi(,2839) default. Encryption support must be compiled into both cvs.texi(,2840) the client and server; use the cvs.texi(,2841) @file{--enable-encryption} configure option to turn it cvs.texi(,2842) on. You must then use the @code{-x} global option to cvs.texi(,2843) request encryption. cvs.texi(,2844) cvs.texi(,2845) @cindex CVS_CLIENT_PORT cvs.texi(,2846) You need to edit @file{inetd.conf} on the server cvs.texi(,2847) machine to run @code{cvs kserver}. The client uses cvs.texi(,2848) port 1999 by default; if you want to use another port cvs.texi(,2849) specify it in the @code{CVSROOT} (@pxref{Remote repositories}) cvs.texi(,2850) or the @code{CVS_CLIENT_PORT} environment variable cvs.texi(,2851) (@pxref{Environment variables}) on the client. cvs.texi(,2852) cvs.texi(,2853) @cindex kinit cvs.texi(,2854) When you want to use @sc{cvs}, get a ticket in the cvs.texi(,2855) usual way (generally @code{kinit}); it must be a ticket cvs.texi(,2856) which allows you to log into the server machine. Then cvs.texi(,2857) you are ready to go: cvs.texi(,2858) cvs.texi(,2859) @example cvs.texi(,2860) cvs -d :kserver:faun.example.org:/usr/local/cvsroot checkout foo cvs.texi(,2861) @end example cvs.texi(,2862) cvs.texi(,2863) Previous versions of @sc{cvs} would fall back to a cvs.texi(,2864) connection via rsh; this version will not do so. cvs.texi(,2865) cvs.texi(,2866) @node Connecting via fork cvs.texi(,2867) @subsection Connecting with fork cvs.texi(,2868) cvs.texi(,2869) @cindex fork, access method cvs.texi(,2870) @cindex :fork:, setting up cvs.texi(,2871) This access method allows you to connect to a cvs.texi(,2872) repository on your local disk via the remote protocol. cvs.texi(,2873) In other words it does pretty much the same thing as cvs.texi(,2874) @code{:local:}, but various quirks, bugs and the like are cvs.texi(,2875) those of the remote @sc{cvs} rather than the local cvs.texi(,2876) @sc{cvs}. cvs.texi(,2877) cvs.texi(,2878) For day-to-day operations you might prefer either cvs.texi(,2879) @code{:local:} or @code{:fork:}, depending on your cvs.texi(,2880) preferences. Of course @code{:fork:} comes in cvs.texi(,2881) particularly handy in testing or cvs.texi(,2882) debugging @code{cvs} and the remote protocol. cvs.texi(,2883) Specifically, we avoid all of the network-related cvs.texi(,2884) setup/configuration, timeouts, and authentication cvs.texi(,2885) inherent in the other remote access methods but still cvs.texi(,2886) create a connection which uses the remote protocol. cvs.texi(,2887) cvs.texi(,2888) To connect using the @code{fork} method, use cvs.texi(,2889) @samp{:fork:} and the pathname to your local cvs.texi(,2890) repository. For example: cvs.texi(,2891) cvs.texi(,2892) @example cvs.texi(,2893) cvs -d :fork:/usr/local/cvsroot checkout foo cvs.texi(,2894) @end example cvs.texi(,2895) cvs.texi(,2896) @cindex CVS_SERVER, and :fork: cvs.texi(,2897) As with @code{:ext:}, the server is called @samp{cvs} cvs.texi(,2898) by default, or the value of the @code{CVS_SERVER} cvs.texi(,2899) environment variable. cvs.texi(,2900) cvs.texi(,2901) @c --------------------------------------------------------------------- cvs.texi(,2902) @node Read-only access cvs.texi(,2903) @section Read-only repository access cvs.texi(,2904) @cindex Read-only repository access cvs.texi(,2905) @cindex readers (admin file) cvs.texi(,2906) @cindex writers (admin file) cvs.texi(,2907) cvs.texi(,2908) It is possible to grant read-only repository cvs.texi(,2909) access to people using the password-authenticated cvs.texi(,2910) server (@pxref{Password authenticated}). (The cvs.texi(,2911) other access methods do not have explicit support for cvs.texi(,2912) read-only users because those methods all assume login cvs.texi(,2913) access to the repository machine anyway, and therefore cvs.texi(,2914) the user can do whatever local file permissions allow cvs.texi(,2915) her to do.) cvs.texi(,2916) cvs.texi(,2917) A user who has read-only access can do only cvs.texi(,2918) those @sc{cvs} operations which do not modify the cvs.texi(,2919) repository, except for certain ``administrative'' files cvs.texi(,2920) (such as lock files and the history file). It may be cvs.texi(,2921) desirable to use this feature in conjunction with cvs.texi(,2922) user-aliasing (@pxref{Password authentication server}). cvs.texi(,2923) cvs.texi(,2924) Unlike with previous versions of @sc{cvs}, read-only cvs.texi(,2925) users should be able merely to read the repository, and cvs.texi(,2926) not to execute programs on the server or otherwise gain cvs.texi(,2927) unexpected levels of access. Or to be more accurate, cvs.texi(,2928) the @emph{known} holes have been plugged. Because this cvs.texi(,2929) feature is new and has not received a comprehensive cvs.texi(,2930) security audit, you should use whatever level of cvs.texi(,2931) caution seems warranted given your attitude concerning cvs.texi(,2932) security. cvs.texi(,2933) cvs.texi(,2934) There are two ways to specify read-only access cvs.texi(,2935) for a user: by inclusion, and by exclusion. cvs.texi(,2936) cvs.texi(,2937) "Inclusion" means listing that user cvs.texi(,2938) specifically in the @file{$CVSROOT/CVSROOT/readers} cvs.texi(,2939) file, which is simply a newline-separated list of cvs.texi(,2940) users. Here is a sample @file{readers} file: cvs.texi(,2941) cvs.texi(,2942) @example cvs.texi(,2943) melissa cvs.texi(,2944) splotnik cvs.texi(,2945) jrandom cvs.texi(,2946) @end example cvs.texi(,2947) cvs.texi(,2948) @noindent cvs.texi(,2949) (Don't forget the newline after the last user.) cvs.texi(,2950) cvs.texi(,2951) "Exclusion" means explicitly listing everyone cvs.texi(,2952) who has @emph{write} access---if the file cvs.texi(,2953) cvs.texi(,2954) @example cvs.texi(,2955) $CVSROOT/CVSROOT/writers cvs.texi(,2956) @end example cvs.texi(,2957) cvs.texi(,2958) @noindent cvs.texi(,2959) exists, then only cvs.texi(,2960) those users listed in it have write access, and cvs.texi(,2961) everyone else has read-only access (of course, even the cvs.texi(,2962) read-only users still need to be listed in the cvs.texi(,2963) @sc{cvs} @file{passwd} file). The cvs.texi(,2964) @file{writers} file has the same format as the cvs.texi(,2965) @file{readers} file. cvs.texi(,2966) cvs.texi(,2967) Note: if your @sc{cvs} @file{passwd} cvs.texi(,2968) file maps cvs users onto system users (@pxref{Password cvs.texi(,2969) authentication server}), make sure you deny or grant cvs.texi(,2970) read-only access using the @emph{cvs} usernames, not cvs.texi(,2971) the system usernames. That is, the @file{readers} and cvs.texi(,2972) @file{writers} files contain cvs usernames, which may cvs.texi(,2973) or may not be the same as system usernames. cvs.texi(,2974) cvs.texi(,2975) Here is a complete description of the server's cvs.texi(,2976) behavior in deciding whether to grant read-only or cvs.texi(,2977) read-write access: cvs.texi(,2978) cvs.texi(,2979) If @file{readers} exists, and this user is cvs.texi(,2980) listed in it, then she gets read-only access. Or if cvs.texi(,2981) @file{writers} exists, and this user is NOT listed in cvs.texi(,2982) it, then she also gets read-only access (this is true cvs.texi(,2983) even if @file{readers} exists but she is not listed cvs.texi(,2984) there). Otherwise, she gets full read-write access. cvs.texi(,2985) cvs.texi(,2986) Of course there is a conflict if the user is cvs.texi(,2987) listed in both files. This is resolved in the more cvs.texi(,2988) conservative way, it being better to protect the cvs.texi(,2989) repository too much than too little: such a user gets cvs.texi(,2990) read-only access. cvs.texi(,2991) cvs.texi(,2992) @node Server temporary directory cvs.texi(,2993) @section Temporary directories for the server cvs.texi(,2994) @cindex Temporary directories, and server cvs.texi(,2995) @cindex Server, temporary directories cvs.texi(,2996) cvs.texi(,2997) While running, the @sc{cvs} server creates temporary cvs.texi(,2998) directories. They are named cvs.texi(,2999) cvs.texi(,3000) @example cvs.texi(,3001) cvs-serv@var{pid} cvs.texi(,3002) @end example cvs.texi(,3003) cvs.texi(,3004) @noindent cvs.texi(,3005) where @var{pid} is the process identification number of cvs.texi(,3006) the server. cvs.texi(,3007) They are located in the directory specified by cvs.texi(,3008) the @samp{-T} global option (@pxref{Global options}), cvs.texi(,3009) the @code{TMPDIR} environment variable (@pxref{Environment variables}), cvs.texi(,3010) or, failing that, @file{/tmp}. cvs.texi(,3011) cvs.texi(,3012) In most cases the server will remove the temporary cvs.texi(,3013) directory when it is done, whether it finishes normally cvs.texi(,3014) or abnormally. However, there are a few cases in which cvs.texi(,3015) the server does not or cannot remove the temporary cvs.texi(,3016) directory, for example: cvs.texi(,3017) cvs.texi(,3018) @itemize @bullet cvs.texi(,3019) @item cvs.texi(,3020) If the server aborts due to an internal server error, cvs.texi(,3021) it may preserve the directory to aid in debugging cvs.texi(,3022) cvs.texi(,3023) @item cvs.texi(,3024) If the server is killed in a way that it has no way of cvs.texi(,3025) cleaning up (most notably, @samp{kill -KILL} on unix). cvs.texi(,3026) cvs.texi(,3027) @item cvs.texi(,3028) If the system shuts down without an orderly shutdown, cvs.texi(,3029) which tells the server to clean up. cvs.texi(,3030) @end itemize cvs.texi(,3031) cvs.texi(,3032) In cases such as this, you will need to manually remove cvs.texi(,3033) the @file{cvs-serv@var{pid}} directories. As long as cvs.texi(,3034) there is no server running with process identification cvs.texi(,3035) number @var{pid}, it is safe to do so. cvs.texi(,3036) cvs.texi(,3037) @c --------------------------------------------------------------------- cvs.texi(,3038) @node Starting a new project cvs.texi(,3039) @chapter Starting a project with CVS cvs.texi(,3040) @cindex Starting a project with CVS cvs.texi(,3041) @cindex Creating a project cvs.texi(,3042) cvs.texi(,3043) @comment --moduledb-- cvs.texi(,3044) Because renaming files and moving them between cvs.texi(,3045) directories is somewhat inconvenient, the first thing cvs.texi(,3046) you do when you start a new project should be to think cvs.texi(,3047) through your file organization. It is not impossible cvs.texi(,3048) to rename or move files, but it does increase the cvs.texi(,3049) potential for confusion and @sc{cvs} does have some cvs.texi(,3050) quirks particularly in the area of renaming cvs.texi(,3051) directories. @xref{Moving files}. cvs.texi(,3052) cvs.texi(,3053) What to do next depends on the situation at hand. cvs.texi(,3054) cvs.texi(,3055) @menu cvs.texi(,3056) * Setting up the files:: Getting the files into the repository cvs.texi(,3057) * Defining the module:: How to make a module of the files cvs.texi(,3058) @end menu cvs.texi(,3059) @c -- File permissions! cvs.texi(,3060) cvs.texi(,3061) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,3062) @node Setting up the files cvs.texi(,3063) @section Setting up the files cvs.texi(,3064) cvs.texi(,3065) The first step is to create the files inside the repository. This can cvs.texi(,3066) be done in a couple of different ways. cvs.texi(,3067) cvs.texi(,3068) @c -- The contributed scripts cvs.texi(,3069) @menu cvs.texi(,3070) * From files:: This method is useful with old projects cvs.texi(,3071) where files already exists. cvs.texi(,3072) * From other version control systems:: Old projects where you want to cvs.texi(,3073) preserve history from another system. cvs.texi(,3074) * From scratch:: Creating a directory tree from scratch. cvs.texi(,3075) @end menu cvs.texi(,3076) cvs.texi(,3077) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,3078) @node From files cvs.texi(,3079) @subsection Creating a directory tree from a number of files cvs.texi(,3080) @cindex Importing files cvs.texi(,3081) cvs.texi(,3082) When you begin using @sc{cvs}, you will probably already have several cvs.texi(,3083) projects that can be cvs.texi(,3084) put under @sc{cvs} control. In these cases the easiest way is to use the cvs.texi(,3085) @code{import} command. An example is probably the easiest way to cvs.texi(,3086) explain how to use it. If the files you want to install in cvs.texi(,3087) @sc{cvs} reside in @file{@var{wdir}}, and you want them to appear in the cvs.texi(,3088) repository as @file{$CVSROOT/yoyodyne/@var{rdir}}, you can do this: cvs.texi(,3089) cvs.texi(,3090) @example cvs.texi(,3091) $ cd @var{wdir} cvs.texi(,3092) $ cvs import -m "Imported sources" yoyodyne/@var{rdir} yoyo start cvs.texi(,3093) @end example cvs.texi(,3094) cvs.texi(,3095) Unless you supply a log message with the @samp{-m} cvs.texi(,3096) flag, @sc{cvs} starts an editor and prompts for a cvs.texi(,3097) message. The string @samp{yoyo} is a @dfn{vendor tag}, cvs.texi(,3098) and @samp{start} is a @dfn{release tag}. They may fill cvs.texi(,3099) no purpose in this context, but since @sc{cvs} requires cvs.texi(,3100) them they must be present. @xref{Tracking sources}, for cvs.texi(,3101) more information about them. cvs.texi(,3102) cvs.texi(,3103) You can now verify that it worked, and remove your cvs.texi(,3104) original source directory. cvs.texi(,3105) @c FIXME: Need to say more about "verify that it cvs.texi(,3106) @c worked". What should the user look for in the output cvs.texi(,3107) @c from "diff -r"? cvs.texi(,3108) cvs.texi(,3109) @example cvs.texi(,3110) $ cd .. cvs.texi(,3111) $ cvs checkout yoyodyne/@var{rdir} # @r{Explanation below} cvs.texi(,3112) $ diff -r @var{wdir} yoyodyne/@var{rdir} cvs.texi(,3113) $ rm -r @var{wdir} cvs.texi(,3114) @end example cvs.texi(,3115) cvs.texi(,3116) @noindent cvs.texi(,3117) Erasing the original sources is a good idea, to make sure that you do cvs.texi(,3118) not accidentally edit them in @var{wdir}, bypassing @sc{cvs}. cvs.texi(,3119) Of course, it would be wise to make sure that you have cvs.texi(,3120) a backup of the sources before you remove them. cvs.texi(,3121) cvs.texi(,3122) The @code{checkout} command can either take a module cvs.texi(,3123) name as argument (as it has done in all previous cvs.texi(,3124) examples) or a path name relative to @code{$CVSROOT}, cvs.texi(,3125) as it did in the example above. cvs.texi(,3126) cvs.texi(,3127) It is a good idea to check that the permissions cvs.texi(,3128) @sc{cvs} sets on the directories inside @code{$CVSROOT} cvs.texi(,3129) are reasonable, and that they belong to the proper cvs.texi(,3130) groups. @xref{File permissions}. cvs.texi(,3131) cvs.texi(,3132) If some of the files you want to import are binary, you cvs.texi(,3133) may want to use the wrappers features to specify which cvs.texi(,3134) files are binary and which are not. @xref{Wrappers}. cvs.texi(,3135) cvs.texi(,3136) @c The node name is too long, but I am having trouble cvs.texi(,3137) @c thinking of something more concise. cvs.texi(,3138) @node From other version control systems cvs.texi(,3139) @subsection Creating Files From Other Version Control Systems cvs.texi(,3140) @cindex Importing files, from other version control systems cvs.texi(,3141) cvs.texi(,3142) If you have a project which you are maintaining with cvs.texi(,3143) another version control system, such as @sc{rcs}, you cvs.texi(,3144) may wish to put the files from that project into cvs.texi(,3145) @sc{cvs}, and preserve the revision history of the cvs.texi(,3146) files. cvs.texi(,3147) cvs.texi(,3148) @table @asis cvs.texi(,3149) @cindex RCS, importing files from cvs.texi(,3150) @item From RCS cvs.texi(,3151) If you have been using @sc{rcs}, find the @sc{rcs} cvs.texi(,3152) files---usually a file named @file{foo.c} will have its cvs.texi(,3153) @sc{rcs} file in @file{RCS/foo.c,v} (but it could be cvs.texi(,3154) other places; consult the @sc{rcs} documentation for cvs.texi(,3155) details). Then create the appropriate directories in cvs.texi(,3156) @sc{cvs} if they do not already exist. Then copy the cvs.texi(,3157) files into the appropriate directories in the @sc{cvs} cvs.texi(,3158) repository (the name in the repository must be the name cvs.texi(,3159) of the source file with @samp{,v} added; the files go cvs.texi(,3160) directly in the appropriate directory of the repository, cvs.texi(,3161) not in an @file{RCS} subdirectory). This is one of the cvs.texi(,3162) few times when it is a good idea to access the @sc{cvs} cvs.texi(,3163) repository directly, rather than using @sc{cvs} cvs.texi(,3164) commands. Then you are ready to check out a new cvs.texi(,3165) working directory. cvs.texi(,3166) @c Someday there probably should be a "cvs import -t cvs.texi(,3167) @c rcs" or some such. It could even create magic cvs.texi(,3168) @c branches. It could also do something about the case cvs.texi(,3169) @c where the RCS file had a (non-magic) "0" branch. cvs.texi(,3170) cvs.texi(,3171) The @sc{rcs} file should not be locked when you move it cvs.texi(,3172) into @sc{cvs}; if it is, @sc{cvs} will have trouble cvs.texi(,3173) letting you operate on it. cvs.texi(,3174) @c What is the easiest way to unlock your files if you cvs.texi(,3175) @c have them locked? Especially if you have a lot of them? cvs.texi(,3176) @c This is a CVS bug/misfeature; importing RCS files cvs.texi(,3177) @c should ignore whether they are locked and leave them in cvs.texi(,3178) @c an unlocked state. Yet another reason for a separate cvs.texi(,3179) @c "import RCS file" command. cvs.texi(,3180) cvs.texi(,3181) @c How many is "many"? Or do they just import RCS files? cvs.texi(,3182) @item From another version control system cvs.texi(,3183) Many version control systems have the ability to export cvs.texi(,3184) @sc{rcs} files in the standard format. If yours does, cvs.texi(,3185) export the @sc{rcs} files and then follow the above cvs.texi(,3186) instructions. cvs.texi(,3187) cvs.texi(,3188) Failing that, probably your best bet is to write a cvs.texi(,3189) script that will check out the files one revision at a cvs.texi(,3190) time using the command line interface to the other cvs.texi(,3191) system, and then check the revisions into @sc{cvs}. cvs.texi(,3192) The @file{sccs2rcs} script mentioned below may be a cvs.texi(,3193) useful example to follow. cvs.texi(,3194) cvs.texi(,3195) @cindex SCCS, importing files from cvs.texi(,3196) @item From SCCS cvs.texi(,3197) There is a script in the @file{contrib} directory of cvs.texi(,3198) the @sc{cvs} source distribution called @file{sccs2rcs} cvs.texi(,3199) which converts @sc{sccs} files to @sc{rcs} files. cvs.texi(,3200) Note: you must run it on a machine which has both cvs.texi(,3201) @sc{sccs} and @sc{rcs} installed, and like everything cvs.texi(,3202) else in contrib it is unsupported (your mileage may cvs.texi(,3203) vary). cvs.texi(,3204) cvs.texi(,3205) @cindex PVCS, importing files from cvs.texi(,3206) @item From PVCS cvs.texi(,3207) There is a script in the @file{contrib} directory of cvs.texi(,3208) the @sc{cvs} source distribution called @file{pvcs_to_rcs} cvs.texi(,3209) which converts @sc{pvcs} archives to @sc{rcs} files. cvs.texi(,3210) You must run it on a machine which has both cvs.texi(,3211) @sc{pvcs} and @sc{rcs} installed, and like everything cvs.texi(,3212) else in contrib it is unsupported (your mileage may cvs.texi(,3213) vary). See the comments in the script for details. cvs.texi(,3214) @end table cvs.texi(,3215) @c CMZ and/or PATCHY were systems that were used in the cvs.texi(,3216) @c high energy physics community (especially for cvs.texi(,3217) @c CERNLIB). CERN has replaced them with CVS, but the cvs.texi(,3218) @c CAR format seems to live on as a way to submit cvs.texi(,3219) @c changes. There is a program car2cvs which converts cvs.texi(,3220) @c but I'm not sure where one gets a copy. cvs.texi(,3221) @c Not sure it is worth mentioning here, since it would cvs.texi(,3222) @c appear to affect only one particular community. cvs.texi(,3223) @c Best page for more information is: cvs.texi(,3224) @c http://wwwcn1.cern.ch/asd/cvs/index.html cvs.texi(,3225) @c See also: cvs.texi(,3226) @c http://ecponion.cern.ch/ecpsa/cernlib.html cvs.texi(,3227) cvs.texi(,3228) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,3229) @node From scratch cvs.texi(,3230) @subsection Creating a directory tree from scratch cvs.texi(,3231) cvs.texi(,3232) @c Also/instead should be documenting cvs.texi(,3233) @c $ cvs co -l . cvs.texi(,3234) @c $ mkdir tc cvs.texi(,3235) @c $ cvs add tc cvs.texi(,3236) @c $ cd tc cvs.texi(,3237) @c $ mkdir man cvs.texi(,3238) @c $ cvs add man cvs.texi(,3239) @c etc. cvs.texi(,3240) @c Using import to create the directories only is cvs.texi(,3241) @c probably a somewhat confusing concept. cvs.texi(,3242) For a new project, the easiest thing to do is probably cvs.texi(,3243) to create an empty directory structure, like this: cvs.texi(,3244) cvs.texi(,3245) @example cvs.texi(,3246) $ mkdir tc cvs.texi(,3247) $ mkdir tc/man cvs.texi(,3248) $ mkdir tc/testing cvs.texi(,3249) @end example cvs.texi(,3250) cvs.texi(,3251) After that, you use the @code{import} command to create cvs.texi(,3252) the corresponding (empty) directory structure inside cvs.texi(,3253) the repository: cvs.texi(,3254) cvs.texi(,3255) @example cvs.texi(,3256) $ cd tc cvs.texi(,3257) $ cvs import -m "Created directory structure" yoyodyne/@var{dir} yoyo start cvs.texi(,3258) @end example cvs.texi(,3259) cvs.texi(,3260) Then, use @code{add} to add files (and new directories) cvs.texi(,3261) as they appear. cvs.texi(,3262) cvs.texi(,3263) Check that the permissions @sc{cvs} sets on the cvs.texi(,3264) directories inside @code{$CVSROOT} are reasonable. cvs.texi(,3265) cvs.texi(,3266) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,3267) @node Defining the module cvs.texi(,3268) @section Defining the module cvs.texi(,3269) @cindex Defining a module cvs.texi(,3270) @cindex Editing the modules file cvs.texi(,3271) @cindex Module, defining cvs.texi(,3272) @cindex Modules file, changing cvs.texi(,3273) cvs.texi(,3274) The next step is to define the module in the cvs.texi(,3275) @file{modules} file. This is not strictly necessary, cvs.texi(,3276) but modules can be convenient in grouping together cvs.texi(,3277) related files and directories. cvs.texi(,3278) cvs.texi(,3279) In simple cases these steps are sufficient to define a module. cvs.texi(,3280) cvs.texi(,3281) @enumerate cvs.texi(,3282) @item cvs.texi(,3283) Get a working copy of the modules file. cvs.texi(,3284) cvs.texi(,3285) @example cvs.texi(,3286) $ cvs checkout CVSROOT/modules cvs.texi(,3287) $ cd CVSROOT cvs.texi(,3288) @end example cvs.texi(,3289) cvs.texi(,3290) @item cvs.texi(,3291) Edit the file and insert a line that defines the module. @xref{Intro cvs.texi(,3292) administrative files}, for an introduction. @xref{modules}, for a full cvs.texi(,3293) description of the modules file. You can use the cvs.texi(,3294) following line to define the module @samp{tc}: cvs.texi(,3295) cvs.texi(,3296) @example cvs.texi(,3297) tc yoyodyne/tc cvs.texi(,3298) @end example cvs.texi(,3299) cvs.texi(,3300) @item cvs.texi(,3301) Commit your changes to the modules file. cvs.texi(,3302) cvs.texi(,3303) @example cvs.texi(,3304) $ cvs commit -m "Added the tc module." modules cvs.texi(,3305) @end example cvs.texi(,3306) cvs.texi(,3307) @item cvs.texi(,3308) Release the modules module. cvs.texi(,3309) cvs.texi(,3310) @example cvs.texi(,3311) $ cd .. cvs.texi(,3312) $ cvs release -d CVSROOT cvs.texi(,3313) @end example cvs.texi(,3314) @end enumerate cvs.texi(,3315) cvs.texi(,3316) @c --------------------------------------------------------------------- cvs.texi(,3317) @node Revisions cvs.texi(,3318) @chapter Revisions cvs.texi(,3319) cvs.texi(,3320) For many uses of @sc{cvs}, one doesn't need to worry cvs.texi(,3321) too much about revision numbers; @sc{cvs} assigns cvs.texi(,3322) numbers such as @code{1.1}, @code{1.2}, and so on, and cvs.texi(,3323) that is all one needs to know. However, some people cvs.texi(,3324) prefer to have more knowledge and control concerning cvs.texi(,3325) how @sc{cvs} assigns revision numbers. cvs.texi(,3326) cvs.texi(,3327) If one wants to keep track of a set of revisions cvs.texi(,3328) involving more than one file, such as which revisions cvs.texi(,3329) went into a particular release, one uses a @dfn{tag}, cvs.texi(,3330) which is a symbolic revision which can be assigned to a cvs.texi(,3331) numeric revision in each file. cvs.texi(,3332) cvs.texi(,3333) @menu cvs.texi(,3334) * Revision numbers:: The meaning of a revision number cvs.texi(,3335) * Versions revisions releases:: Terminology used in this manual cvs.texi(,3336) * Assigning revisions:: Assigning revisions cvs.texi(,3337) * Tags:: Tags--Symbolic revisions cvs.texi(,3338) * Tagging the working directory:: The cvs tag command cvs.texi(,3339) * Tagging by date/tag:: The cvs rtag command cvs.texi(,3340) * Modifying tags:: Adding, renaming, and deleting tags cvs.texi(,3341) * Tagging add/remove:: Tags with adding and removing files cvs.texi(,3342) * Sticky tags:: Certain tags are persistent cvs.texi(,3343) @end menu cvs.texi(,3344) cvs.texi(,3345) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,3346) @node Revision numbers cvs.texi(,3347) @section Revision numbers cvs.texi(,3348) @cindex Revision numbers cvs.texi(,3349) @cindex Revision tree cvs.texi(,3350) @cindex Linear development cvs.texi(,3351) @cindex Number, revision- cvs.texi(,3352) @cindex Decimal revision number cvs.texi(,3353) @cindex Branch number cvs.texi(,3354) @cindex Number, branch cvs.texi(,3355) cvs.texi(,3356) Each version of a file has a unique @dfn{revision cvs.texi(,3357) number}. Revision numbers look like @samp{1.1}, cvs.texi(,3358) @samp{1.2}, @samp{1.3.2.2} or even @samp{1.3.2.2.4.5}. cvs.texi(,3359) A revision number always has an even number of cvs.texi(,3360) period-separated decimal integers. By default revision cvs.texi(,3361) 1.1 is the first revision of a file. Each successive cvs.texi(,3362) revision is given a new number by increasing the cvs.texi(,3363) rightmost number by one. The following figure displays cvs.texi(,3364) a few revisions, with newer revisions to the right. cvs.texi(,3365) cvs.texi(,3366) @example cvs.texi(,3367) +-----+ +-----+ +-----+ +-----+ +-----+ cvs.texi(,3368) ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! cvs.texi(,3369) +-----+ +-----+ +-----+ +-----+ +-----+ cvs.texi(,3370) @end example cvs.texi(,3371) cvs.texi(,3372) It is also possible to end up with numbers containing cvs.texi(,3373) more than one period, for example @samp{1.3.2.2}. Such cvs.texi(,3374) revisions represent revisions on branches cvs.texi(,3375) (@pxref{Branching and merging}); such revision numbers cvs.texi(,3376) are explained in detail in @ref{Branches and cvs.texi(,3377) revisions}. cvs.texi(,3378) cvs.texi(,3379) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,3380) @node Versions revisions releases cvs.texi(,3381) @section Versions, revisions and releases cvs.texi(,3382) @cindex Revisions, versions and releases cvs.texi(,3383) @cindex Versions, revisions and releases cvs.texi(,3384) @cindex Releases, revisions and versions cvs.texi(,3385) cvs.texi(,3386) A file can have several versions, as described above. cvs.texi(,3387) Likewise, a software product can have several versions. cvs.texi(,3388) A software product is often given a version number such cvs.texi(,3389) as @samp{4.1.1}. cvs.texi(,3390) cvs.texi(,3391) Versions in the first sense are called @dfn{revisions} cvs.texi(,3392) in this document, and versions in the second sense are cvs.texi(,3393) called @dfn{releases}. To avoid confusion, the word cvs.texi(,3394) @dfn{version} is almost never used in this document. cvs.texi(,3395) cvs.texi(,3396) @node Assigning revisions cvs.texi(,3397) @section Assigning revisions cvs.texi(,3398) cvs.texi(,3399) @c We avoid the "major revision" terminology. It seems cvs.texi(,3400) @c like jargon. Hopefully "first number" is clear enough. cvs.texi(,3401) @c cvs.texi(,3402) @c Well, in the context of software release numbers, cvs.texi(,3403) @c "major" and "minor" release or version numbers are cvs.texi(,3404) @c documented in at least the GNU Coding Standards, but I'm cvs.texi(,3405) @c still not sure I find that a valid reason to apply the cvs.texi(,3406) @c terminology to RCS revision numbers. "First", "Second", cvs.texi(,3407) @c "subsequent", and so on is almost surely clearer, cvs.texi(,3408) @c especially to a novice reader. -DRP cvs.texi(,3409) By default, @sc{cvs} will assign numeric revisions by cvs.texi(,3410) leaving the first number the same and incrementing the cvs.texi(,3411) second number. For example, @code{1.1}, @code{1.2}, cvs.texi(,3412) @code{1.3}, etc. cvs.texi(,3413) cvs.texi(,3414) When adding a new file, the second number will always cvs.texi(,3415) be one and the first number will equal the highest cvs.texi(,3416) first number of any file in that directory. For cvs.texi(,3417) example, the current directory contains files whose cvs.texi(,3418) highest numbered revisions are @code{1.7}, @code{3.1}, cvs.texi(,3419) and @code{4.12}, then an added file will be given the cvs.texi(,3420) numeric revision @code{4.1}. cvs.texi(,3421) cvs.texi(,3422) @c This is sort of redundant with something we said a cvs.texi(,3423) @c while ago. Somewhere we need a better way of cvs.texi(,3424) @c introducing how the first number can be anything cvs.texi(,3425) @c except "1", perhaps. Also I don't think this cvs.texi(,3426) @c presentation is clear on why we are discussing releases cvs.texi(,3427) @c and first numbers of numeric revisions in the same cvs.texi(,3428) @c breath. cvs.texi(,3429) Normally there is no reason to care cvs.texi(,3430) about the revision numbers---it is easier to treat them cvs.texi(,3431) as internal numbers that @sc{cvs} maintains, and tags cvs.texi(,3432) provide a better way to distinguish between things like cvs.texi(,3433) release 1 versus release 2 of your product cvs.texi(,3434) (@pxref{Tags}). However, if you want to set the cvs.texi(,3435) numeric revisions, the @samp{-r} option to @code{cvs cvs.texi(,3436) commit} can do that. The @samp{-r} option implies the cvs.texi(,3437) @samp{-f} option, in the sense that it causes the cvs.texi(,3438) files to be committed even if they are not modified. cvs.texi(,3439) cvs.texi(,3440) For example, to bring all your files up to cvs.texi(,3441) revision 3.0 (including those that haven't changed), cvs.texi(,3442) you might invoke: cvs.texi(,3443) cvs.texi(,3444) @example cvs.texi(,3445) $ cvs commit -r 3.0 cvs.texi(,3446) @end example cvs.texi(,3447) cvs.texi(,3448) Note that the number you specify with @samp{-r} must be cvs.texi(,3449) larger than any existing revision number. That is, if cvs.texi(,3450) revision 3.0 exists, you cannot @samp{cvs commit cvs.texi(,3451) -r 1.3}. If you want to maintain several releases in cvs.texi(,3452) parallel, you need to use a branch (@pxref{Branching and merging}). cvs.texi(,3453) cvs.texi(,3454) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,3455) @node Tags cvs.texi(,3456) @section Tags--Symbolic revisions cvs.texi(,3457) @cindex Tags cvs.texi(,3458) cvs.texi(,3459) The revision numbers live a life of their own. They cvs.texi(,3460) need not have anything at all to do with the release cvs.texi(,3461) numbers of your software product. Depending cvs.texi(,3462) on how you use @sc{cvs} the revision numbers might change several times cvs.texi(,3463) between two releases. As an example, some of the cvs.texi(,3464) source files that make up @sc{rcs} 5.6 have the following cvs.texi(,3465) revision numbers: cvs.texi(,3466) @cindex RCS revision numbers cvs.texi(,3467) cvs.texi(,3468) @example cvs.texi(,3469) ci.c 5.21 cvs.texi(,3470) co.c 5.9 cvs.texi(,3471) ident.c 5.3 cvs.texi(,3472) rcs.c 5.12 cvs.texi(,3473) rcsbase.h 5.11 cvs.texi(,3474) rcsdiff.c 5.10 cvs.texi(,3475) rcsedit.c 5.11 cvs.texi(,3476) rcsfcmp.c 5.9 cvs.texi(,3477) rcsgen.c 5.10 cvs.texi(,3478) rcslex.c 5.11 cvs.texi(,3479) rcsmap.c 5.2 cvs.texi(,3480) rcsutil.c 5.10 cvs.texi(,3481) @end example cvs.texi(,3482) cvs.texi(,3483) @cindex tag (subcommand), introduction cvs.texi(,3484) @cindex Tags, symbolic name cvs.texi(,3485) @cindex Symbolic name (tag) cvs.texi(,3486) @cindex Name, symbolic (tag) cvs.texi(,3487) @cindex HEAD, as reserved tag name cvs.texi(,3488) @cindex BASE, as reserved tag name cvs.texi(,3489) You can use the @code{tag} command to give a symbolic name to a cvs.texi(,3490) certain revision of a file. You can use the @samp{-v} flag to the cvs.texi(,3491) @code{status} command to see all tags that a file has, and cvs.texi(,3492) which revision numbers they represent. Tag names must cvs.texi(,3493) start with an uppercase or lowercase letter and can cvs.texi(,3494) contain uppercase and lowercase letters, digits, cvs.texi(,3495) @samp{-}, and @samp{_}. The two tag names @code{BASE} cvs.texi(,3496) and @code{HEAD} are reserved for use by @sc{cvs}. It cvs.texi(,3497) is expected that future names which are special to cvs.texi(,3498) @sc{cvs} will be specially named, for example by cvs.texi(,3499) starting with @samp{.}, rather than being named analogously to cvs.texi(,3500) @code{BASE} and @code{HEAD}, to avoid conflicts with cvs.texi(,3501) actual tag names. cvs.texi(,3502) @c Including a character such as % or = has also been cvs.texi(,3503) @c suggested as the naming convention for future cvs.texi(,3504) @c special tag names. Starting with . is nice because cvs.texi(,3505) @c that is not a legal tag name as far as RCS is concerned. cvs.texi(,3506) @c FIXME: CVS actually accepts quite a few characters cvs.texi(,3507) @c in tag names, not just the ones documented above cvs.texi(,3508) @c (see RCS_check_tag). RCS cvs.texi(,3509) @c defines legitimate tag names by listing illegal cvs.texi(,3510) @c characters rather than legal ones. CVS is said to lose its cvs.texi(,3511) @c mind if you try to use "/" (try making such a tag sticky cvs.texi(,3512) @c and using "cvs status" client/server--see remote cvs.texi(,3513) @c protocol format for entries line for probable cause). cvs.texi(,3514) @c TODO: The testsuite cvs.texi(,3515) @c should test for whatever are documented above as cvs.texi(,3516) @c officially-OK tag names, and CVS should at least reject cvs.texi(,3517) @c characters that won't work, like "/". cvs.texi(,3518) cvs.texi(,3519) You'll want to choose some convention for naming tags, cvs.texi(,3520) based on information such as the name of the program cvs.texi(,3521) and the version number of the release. For example, cvs.texi(,3522) one might take the name of the program, immediately cvs.texi(,3523) followed by the version number with @samp{.} changed to cvs.texi(,3524) @samp{-}, so that @sc{cvs} 1.9 would be tagged with the name cvs.texi(,3525) @code{cvs1-9}. If you choose a consistent convention, cvs.texi(,3526) then you won't constantly be guessing whether a tag is cvs.texi(,3527) @code{cvs-1-9} or @code{cvs1_9} or what. You might cvs.texi(,3528) even want to consider enforcing your convention in the cvs.texi(,3529) taginfo file (@pxref{user-defined logging}). cvs.texi(,3530) @c Might be nice to say more about using taginfo this cvs.texi(,3531) @c way, like giving an example, or pointing out any particular cvs.texi(,3532) @c issues which arise. cvs.texi(,3533) cvs.texi(,3534) @cindex Adding a tag cvs.texi(,3535) @cindex Tags, example cvs.texi(,3536) The following example shows how you can add a tag to a cvs.texi(,3537) file. The commands must be issued inside your working cvs.texi(,3538) directory. That is, you should issue the cvs.texi(,3539) command in the directory where @file{backend.c} cvs.texi(,3540) resides. cvs.texi(,3541) cvs.texi(,3542) @example cvs.texi(,3543) $ cvs tag rel-0-4 backend.c cvs.texi(,3544) T backend.c cvs.texi(,3545) $ cvs status -v backend.c cvs.texi(,3546) =================================================================== cvs.texi(,3547) File: backend.c Status: Up-to-date cvs.texi(,3548) cvs.texi(,3549) Version: 1.4 Tue Dec 1 14:39:01 1992 cvs.texi(,3550) RCS Version: 1.4 /u/cvsroot/yoyodyne/tc/backend.c,v cvs.texi(,3551) Sticky Tag: (none) cvs.texi(,3552) Sticky Date: (none) cvs.texi(,3553) Sticky Options: (none) cvs.texi(,3554) cvs.texi(,3555) Existing Tags: cvs.texi(,3556) rel-0-4 (revision: 1.4) cvs.texi(,3557) cvs.texi(,3558) @end example cvs.texi(,3559) cvs.texi(,3560) For a complete summary of the syntax of @code{cvs tag}, cvs.texi(,3561) including the various options, see @ref{Invoking CVS}. cvs.texi(,3562) cvs.texi(,3563) There is seldom reason to tag a file in isolation. A more common use is cvs.texi(,3564) to tag all the files that constitute a module with the same tag at cvs.texi(,3565) strategic points in the development life-cycle, such as when a release cvs.texi(,3566) is made. cvs.texi(,3567) cvs.texi(,3568) @example cvs.texi(,3569) $ cvs tag rel-1-0 . cvs.texi(,3570) cvs tag: Tagging . cvs.texi(,3571) T Makefile cvs.texi(,3572) T backend.c cvs.texi(,3573) T driver.c cvs.texi(,3574) T frontend.c cvs.texi(,3575) T parser.c cvs.texi(,3576) @end example cvs.texi(,3577) cvs.texi(,3578) @noindent cvs.texi(,3579) (When you give @sc{cvs} a directory as argument, it generally applies the cvs.texi(,3580) operation to all the files in that directory, and (recursively), to any cvs.texi(,3581) subdirectories that it may contain. @xref{Recursive behavior}.) cvs.texi(,3582) cvs.texi(,3583) @cindex Retrieving an old revision using tags cvs.texi(,3584) @cindex Tags, retrieving old revisions cvs.texi(,3585) The @code{checkout} command has a flag, @samp{-r}, that lets you check out cvs.texi(,3586) a certain revision of a module. This flag makes it easy to cvs.texi(,3587) retrieve the sources that make up release 1.0 of the module @samp{tc} at cvs.texi(,3588) any time in the future: cvs.texi(,3589) cvs.texi(,3590) @example cvs.texi(,3591) $ cvs checkout -r rel-1-0 tc cvs.texi(,3592) @end example cvs.texi(,3593) cvs.texi(,3594) @noindent cvs.texi(,3595) This is useful, for instance, if someone claims that there is a bug in cvs.texi(,3596) that release, but you cannot find the bug in the current working copy. cvs.texi(,3597) cvs.texi(,3598) You can also check out a module as it was at any given date. cvs.texi(,3599) @xref{checkout options}. When specifying @samp{-r} to cvs.texi(,3600) any of these commands, you will need beware of sticky cvs.texi(,3601) tags; see @ref{Sticky tags}. cvs.texi(,3602) cvs.texi(,3603) When you tag more than one file with the same tag you cvs.texi(,3604) can think about the tag as "a curve drawn through a cvs.texi(,3605) matrix of filename vs. revision number." Say we have 5 cvs.texi(,3606) files with the following revisions: cvs.texi(,3607) cvs.texi(,3608) @example cvs.texi(,3609) @group cvs.texi(,3610) file1 file2 file3 file4 file5 cvs.texi(,3611) cvs.texi(,3612) 1.1 1.1 1.1 1.1 /--1.1* <-*- TAG cvs.texi(,3613) 1.2*- 1.2 1.2 -1.2*- cvs.texi(,3614) 1.3 \- 1.3*- 1.3 / 1.3 cvs.texi(,3615) 1.4 \ 1.4 / 1.4 cvs.texi(,3616) \-1.5*- 1.5 cvs.texi(,3617) 1.6 cvs.texi(,3618) @end group cvs.texi(,3619) @end example cvs.texi(,3620) cvs.texi(,3621) At some time in the past, the @code{*} versions were tagged. cvs.texi(,3622) You can think of the tag as a handle attached to the curve cvs.texi(,3623) drawn through the tagged revisions. When you pull on cvs.texi(,3624) the handle, you get all the tagged revisions. Another cvs.texi(,3625) way to look at it is that you "sight" through a set of cvs.texi(,3626) revisions that is "flat" along the tagged revisions, cvs.texi(,3627) like this: cvs.texi(,3628) cvs.texi(,3629) @example cvs.texi(,3630) @group cvs.texi(,3631) file1 file2 file3 file4 file5 cvs.texi(,3632) cvs.texi(,3633) 1.1 cvs.texi(,3634) 1.2 cvs.texi(,3635) 1.1 1.3 _ cvs.texi(,3636) 1.1 1.2 1.4 1.1 / cvs.texi(,3637) 1.2*----1.3*----1.5*----1.2*----1.1 (--- <--- Look here cvs.texi(,3638) 1.3 1.6 1.3 \_ cvs.texi(,3639) 1.4 1.4 cvs.texi(,3640) 1.5 cvs.texi(,3641) @end group cvs.texi(,3642) @end example cvs.texi(,3643) cvs.texi(,3644) @node Tagging the working directory cvs.texi(,3645) @section Specifying what to tag from the working directory cvs.texi(,3646) cvs.texi(,3647) @cindex tag (subcommand) cvs.texi(,3648) The example in the previous section demonstrates one of cvs.texi(,3649) the most common ways to choose which revisions to tag. cvs.texi(,3650) Namely, running the @code{cvs tag} command without cvs.texi(,3651) arguments causes @sc{cvs} to select the revisions which cvs.texi(,3652) are checked out in the current working directory. For cvs.texi(,3653) example, if the copy of @file{backend.c} in working cvs.texi(,3654) directory was checked out from revision 1.4, then cvs.texi(,3655) @sc{cvs} will tag revision 1.4. Note that the tag is cvs.texi(,3656) applied immediately to revision 1.4 in the repository; cvs.texi(,3657) tagging is not like modifying a file, or other cvs.texi(,3658) operations in which one first modifies the working cvs.texi(,3659) directory and then runs @code{cvs commit} to transfer cvs.texi(,3660) that modification to the repository. cvs.texi(,3661) cvs.texi(,3662) One potentially surprising aspect of the fact that cvs.texi(,3663) @code{cvs tag} operates on the repository is that you cvs.texi(,3664) are tagging the checked-in revisions, which may differ cvs.texi(,3665) from locally modified files in your working directory. cvs.texi(,3666) If you want to avoid doing this by mistake, specify the cvs.texi(,3667) @samp{-c} option to @code{cvs tag}. If there are any cvs.texi(,3668) locally modified files, @sc{cvs} will abort with an cvs.texi(,3669) error before it tags any files: cvs.texi(,3670) cvs.texi(,3671) @example cvs.texi(,3672) $ cvs tag -c rel-0-4 cvs.texi(,3673) cvs tag: backend.c is locally modified cvs.texi(,3674) cvs [tag aborted]: correct the above errors first! cvs.texi(,3675) @end example cvs.texi(,3676) cvs.texi(,3677) @node Tagging by date/tag cvs.texi(,3678) @section Specifying what to tag by date or revision cvs.texi(,3679) @cindex rtag (subcommand) cvs.texi(,3680) cvs.texi(,3681) The @code{cvs rtag} command tags the repository as of a cvs.texi(,3682) certain date or time (or can be used to tag the latest cvs.texi(,3683) revision). @code{rtag} works directly on the cvs.texi(,3684) repository contents (it requires no prior checkout and cvs.texi(,3685) does not look for a working directory). cvs.texi(,3686) cvs.texi(,3687) The following options specify which date or revision to cvs.texi(,3688) tag. See @ref{Common options}, for a complete cvs.texi(,3689) description of them. cvs.texi(,3690) cvs.texi(,3691) @table @code cvs.texi(,3692) @item -D @var{date} cvs.texi(,3693) Tag the most recent revision no later than @var{date}. cvs.texi(,3694) cvs.texi(,3695) @item -f cvs.texi(,3696) Only useful with the @samp{-D @var{date}} or @samp{-r @var{tag}} cvs.texi(,3697) flags. If no matching revision is found, use the most cvs.texi(,3698) recent revision (instead of ignoring the file). cvs.texi(,3699) cvs.texi(,3700) @item -r @var{tag} cvs.texi(,3701) Only tag those files that contain existing tag @var{tag}. cvs.texi(,3702) @end table cvs.texi(,3703) cvs.texi(,3704) The @code{cvs tag} command also allows one to specify cvs.texi(,3705) files by revision or date, using the same @samp{-r}, cvs.texi(,3706) @samp{-D}, and @samp{-f} options. However, this cvs.texi(,3707) feature is probably not what you want. The reason is cvs.texi(,3708) that @code{cvs tag} chooses which files to tag based on cvs.texi(,3709) the files that exist in the working directory, rather cvs.texi(,3710) than the files which existed as of the given tag/date. cvs.texi(,3711) Therefore, you are generally better off using @code{cvs cvs.texi(,3712) rtag}. The exceptions might be cases like: cvs.texi(,3713) cvs.texi(,3714) @example cvs.texi(,3715) cvs tag -r 1.4 stable backend.c cvs.texi(,3716) @end example cvs.texi(,3717) cvs.texi(,3718) @node Modifying tags cvs.texi(,3719) @section Deleting, moving, and renaming tags cvs.texi(,3720) cvs.texi(,3721) @c Also see: cvs.texi(,3722) @c "How do I move or rename a magic branch tag?" cvs.texi(,3723) @c in the FAQ (I think the issues it talks about still cvs.texi(,3724) @c apply, but this could use some sanity.sh work). cvs.texi(,3725) cvs.texi(,3726) Normally one does not modify tags. They exist in order cvs.texi(,3727) to record the history of the repository and so deleting cvs.texi(,3728) them or changing their meaning would, generally, not be cvs.texi(,3729) what you want. cvs.texi(,3730) cvs.texi(,3731) However, there might be cases in which one uses a tag cvs.texi(,3732) temporarily or accidentally puts one in the wrong cvs.texi(,3733) place. Therefore, one might delete, move, or rename a cvs.texi(,3734) tag. cvs.texi(,3735) cvs.texi(,3736) @noindent cvs.texi(,3737) @strong{WARNING: the commands in this section are cvs.texi(,3738) dangerous; they permanently discard historical cvs.texi(,3739) information and it can be difficult or impossible to cvs.texi(,3740) recover from errors. If you are a @sc{cvs} cvs.texi(,3741) administrator, you may consider restricting these cvs.texi(,3742) commands with taginfo (@pxref{user-defined logging}).} cvs.texi(,3743) cvs.texi(,3744) @cindex Deleting tags cvs.texi(,3745) @cindex Deleting branch tags cvs.texi(,3746) @cindex Removing tags cvs.texi(,3747) @cindex Removing branch tags cvs.texi(,3748) @cindex Tags, deleting cvs.texi(,3749) @cindex Branch tags, deleting cvs.texi(,3750) To delete a tag, specify the @samp{-d} option to either cvs.texi(,3751) @code{cvs tag} or @code{cvs rtag}. For example: cvs.texi(,3752) cvs.texi(,3753) @example cvs.texi(,3754) cvs rtag -d rel-0-4 tc cvs.texi(,3755) @end example cvs.texi(,3756) cvs.texi(,3757) @noindent cvs.texi(,3758) deletes the non-branch tag @code{rel-0-4} from the module @code{tc}. cvs.texi(,3759) In the event that branch tags are encountered within the repository cvs.texi(,3760) with the given name, a warning message will be issued and the branch cvs.texi(,3761) tag will not be deleted. If you are absolutely certain you know what cvs.texi(,3762) you are doing, the @code{-B} option may be specified to allow deletion cvs.texi(,3763) of branch tags. In that case, any non-branch tags encountered will cvs.texi(,3764) trigger warnings and will not be deleted. cvs.texi(,3765) cvs.texi(,3766) @noindent cvs.texi(,3767) @strong{WARNING: Moving branch tags is very dangerous! If you think cvs.texi(,3768) you need the @code{-B} option, think again and ask your @sc{cvs} cvs.texi(,3769) administrator about it (if that isn't you). There is almost certainly cvs.texi(,3770) another way to accomplish what you want to accomplish.} cvs.texi(,3771) cvs.texi(,3772) @cindex Moving tags cvs.texi(,3773) @cindex Moving branch tags cvs.texi(,3774) @cindex Tags, moving cvs.texi(,3775) @cindex Branch tags, moving cvs.texi(,3776) When we say @dfn{move} a tag, we mean to make the same cvs.texi(,3777) name point to different revisions. For example, the cvs.texi(,3778) @code{stable} tag may currently point to revision 1.4 cvs.texi(,3779) of @file{backend.c} and perhaps we want to make it cvs.texi(,3780) point to revision 1.6. To move a non-branch tag, specify the cvs.texi(,3781) @samp{-F} option to either @code{cvs tag} or @code{cvs cvs.texi(,3782) rtag}. For example, the task just mentioned might be cvs.texi(,3783) accomplished as: cvs.texi(,3784) cvs.texi(,3785) @example cvs.texi(,3786) cvs tag -r 1.6 -F stable backend.c cvs.texi(,3787) @end example cvs.texi(,3788) cvs.texi(,3789) @noindent cvs.texi(,3790) If any branch tags are encountered in the repository cvs.texi(,3791) with the given name, a warning is issued and the branch cvs.texi(,3792) tag is not disturbed. If you are absolutely certain you cvs.texi(,3793) wish to move the branch tag, the @code{-B} option may be specified. cvs.texi(,3794) In that case, non-branch tags encountered with the given cvs.texi(,3795) name are ignored with a warning message. cvs.texi(,3796) cvs.texi(,3797) @noindent cvs.texi(,3798) @strong{WARNING: Moving branch tags is very dangerous! If you think you cvs.texi(,3799) need the @code{-B} option, think again and ask your @sc{cvs} cvs.texi(,3800) administrator about it (if that isn't you). There is almost certainly cvs.texi(,3801) another way to accomplish what you want to accomplish.} cvs.texi(,3802) cvs.texi(,3803) @cindex Renaming tags cvs.texi(,3804) @cindex Tags, renaming cvs.texi(,3805) When we say @dfn{rename} a tag, we mean to make a cvs.texi(,3806) different name point to the same revisions as the old cvs.texi(,3807) tag. For example, one may have misspelled the tag name cvs.texi(,3808) and want to correct it (hopefully before others are cvs.texi(,3809) relying on the old spelling). To rename a tag, first cvs.texi(,3810) create a new tag using the @samp{-r} option to cvs.texi(,3811) @code{cvs rtag}, and then delete the old name. (Caution: cvs.texi(,3812) this method will not work with branch tags.) cvs.texi(,3813) This leaves the new tag on exactly the cvs.texi(,3814) same files as the old tag. For example: cvs.texi(,3815) cvs.texi(,3816) @example cvs.texi(,3817) cvs rtag -r old-name-0-4 rel-0-4 tc cvs.texi(,3818) cvs rtag -d old-name-0-4 tc cvs.texi(,3819) @end example cvs.texi(,3820) cvs.texi(,3821) @node Tagging add/remove cvs.texi(,3822) @section Tagging and adding and removing files cvs.texi(,3823) cvs.texi(,3824) The subject of exactly how tagging interacts with cvs.texi(,3825) adding and removing files is somewhat obscure; for the cvs.texi(,3826) most part @sc{cvs} will keep track of whether files cvs.texi(,3827) exist or not without too much fussing. By default, cvs.texi(,3828) tags are applied to only files which have a revision cvs.texi(,3829) corresponding to what is being tagged. Files which did cvs.texi(,3830) not exist yet, or which were already removed, simply cvs.texi(,3831) omit the tag, and @sc{cvs} knows to treat the absence cvs.texi(,3832) of a tag as meaning that the file didn't exist as of cvs.texi(,3833) that tag. cvs.texi(,3834) cvs.texi(,3835) However, this can lose a small amount of information. cvs.texi(,3836) For example, suppose a file was added and then removed. cvs.texi(,3837) Then, if the tag is missing for that file, there is no cvs.texi(,3838) way to know whether the tag refers to the time before cvs.texi(,3839) the file was added, or the time after it was removed. cvs.texi(,3840) If you specify the @samp{-r} option to @code{cvs rtag}, cvs.texi(,3841) then @sc{cvs} tags the files which have been removed, cvs.texi(,3842) and thereby avoids this problem. For example, one cvs.texi(,3843) might specify @code{-r HEAD} to tag the head. cvs.texi(,3844) cvs.texi(,3845) On the subject of adding and removing files, the cvs.texi(,3846) @code{cvs rtag} command has a @samp{-a} option which cvs.texi(,3847) means to clear the tag from removed files that would cvs.texi(,3848) not otherwise be tagged. For example, one might cvs.texi(,3849) specify this option in conjunction with @samp{-F} when cvs.texi(,3850) moving a tag. If one moved a tag without @samp{-a}, cvs.texi(,3851) then the tag in the removed files might still refer to cvs.texi(,3852) the old revision, rather than reflecting the fact that cvs.texi(,3853) the file had been removed. I don't think this is cvs.texi(,3854) necessary if @samp{-r} is specified, as noted above. cvs.texi(,3855) cvs.texi(,3856) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,3857) @node Sticky tags cvs.texi(,3858) @section Sticky tags cvs.texi(,3859) @cindex Sticky tags cvs.texi(,3860) @cindex Tags, sticky cvs.texi(,3861) cvs.texi(,3862) @c A somewhat related issue is per-directory sticky cvs.texi(,3863) @c tags (see comment at CVS/Tag in node Working cvs.texi(,3864) @c directory storage); we probably want to say cvs.texi(,3865) @c something like "you can set a sticky tag for only cvs.texi(,3866) @c some files, but you don't want to" or some such. cvs.texi(,3867) cvs.texi(,3868) Sometimes a working copy's revision has extra data cvs.texi(,3869) associated with it, for example it might be on a branch cvs.texi(,3870) (@pxref{Branching and merging}), or restricted to cvs.texi(,3871) versions prior to a certain date by @samp{checkout -D} cvs.texi(,3872) or @samp{update -D}. Because this data persists -- cvs.texi(,3873) that is, it applies to subsequent commands in the cvs.texi(,3874) working copy -- we refer to it as @dfn{sticky}. cvs.texi(,3875) cvs.texi(,3876) Most of the time, stickiness is an obscure aspect of cvs.texi(,3877) @sc{cvs} that you don't need to think about. However, cvs.texi(,3878) even if you don't want to use the feature, you may need cvs.texi(,3879) to know @emph{something} about sticky tags (for cvs.texi(,3880) example, how to avoid them!). cvs.texi(,3881) cvs.texi(,3882) You can use the @code{status} command to see if any cvs.texi(,3883) sticky tags or dates are set: cvs.texi(,3884) cvs.texi(,3885) @example cvs.texi(,3886) $ cvs status driver.c cvs.texi(,3887) =================================================================== cvs.texi(,3888) File: driver.c Status: Up-to-date cvs.texi(,3889) cvs.texi(,3890) Version: 1.7.2.1 Sat Dec 5 19:35:03 1992 cvs.texi(,3891) RCS Version: 1.7.2.1 /u/cvsroot/yoyodyne/tc/driver.c,v cvs.texi(,3892) Sticky Tag: rel-1-0-patches (branch: 1.7.2) cvs.texi(,3893) Sticky Date: (none) cvs.texi(,3894) Sticky Options: (none) cvs.texi(,3895) cvs.texi(,3896) @end example cvs.texi(,3897) cvs.texi(,3898) @cindex Resetting sticky tags cvs.texi(,3899) @cindex Sticky tags, resetting cvs.texi(,3900) @cindex Deleting sticky tags cvs.texi(,3901) The sticky tags will remain on your working files until cvs.texi(,3902) you delete them with @samp{cvs update -A}. The cvs.texi(,3903) @samp{-A} option merges local changes into the version of the cvs.texi(,3904) file from the head of the trunk, removing any sticky tags, cvs.texi(,3905) dates, or options. See @ref{update} for more on the operation cvs.texi(,3906) of @code{cvs update}. cvs.texi(,3907) cvs.texi(,3908) @cindex Sticky date cvs.texi(,3909) The most common use of sticky tags is to identify which cvs.texi(,3910) branch one is working on, as described in cvs.texi(,3911) @ref{Accessing branches}. However, non-branch cvs.texi(,3912) sticky tags have uses as well. For example, cvs.texi(,3913) suppose that you want to avoid updating your working cvs.texi(,3914) directory, to isolate yourself from possibly cvs.texi(,3915) destabilizing changes other people are making. You cvs.texi(,3916) can, of course, just refrain from running @code{cvs cvs.texi(,3917) update}. But if you want to avoid updating only a cvs.texi(,3918) portion of a larger tree, then sticky tags can help. cvs.texi(,3919) If you check out a certain revision (such as 1.4) it cvs.texi(,3920) will become sticky. Subsequent @code{cvs update} cvs.texi(,3921) commands will cvs.texi(,3922) not retrieve the latest revision until you reset the cvs.texi(,3923) tag with @code{cvs update -A}. Likewise, use of the cvs.texi(,3924) @samp{-D} option to @code{update} or @code{checkout} cvs.texi(,3925) sets a @dfn{sticky date}, which, similarly, causes that cvs.texi(,3926) date to be used for future retrievals. cvs.texi(,3927) cvs.texi(,3928) People often want to retrieve an old version of cvs.texi(,3929) a file without setting a sticky tag. This can cvs.texi(,3930) be done with the @samp{-p} option to @code{checkout} or cvs.texi(,3931) @code{update}, which sends the contents of the file to cvs.texi(,3932) standard output. For example: cvs.texi(,3933) @example cvs.texi(,3934) $ cvs update -p -r 1.1 file1 >file1 cvs.texi(,3935) =================================================================== cvs.texi(,3936) Checking out file1 cvs.texi(,3937) RCS: /tmp/cvs-sanity/cvsroot/first-dir/Attic/file1,v cvs.texi(,3938) VERS: 1.1 cvs.texi(,3939) *************** cvs.texi(,3940) $ cvs.texi(,3941) @end example cvs.texi(,3942) cvs.texi(,3943) However, this isn't the easiest way, if you are asking cvs.texi(,3944) how to undo a previous checkin (in this example, put cvs.texi(,3945) @file{file1} back to the way it was as of revision cvs.texi(,3946) 1.1). In that case you are better off using the cvs.texi(,3947) @samp{-j} option to @code{update}; for further cvs.texi(,3948) discussion see @ref{Merging two revisions}. cvs.texi(,3949) cvs.texi(,3950) @c --------------------------------------------------------------------- cvs.texi(,3951) @node Branching and merging cvs.texi(,3952) @chapter Branching and merging cvs.texi(,3953) @cindex Branching cvs.texi(,3954) @cindex Merging cvs.texi(,3955) @cindex Copying changes cvs.texi(,3956) @cindex Main trunk and branches cvs.texi(,3957) @cindex Revision tree, making branches cvs.texi(,3958) @cindex Branches, copying changes between cvs.texi(,3959) @cindex Changes, copying between branches cvs.texi(,3960) @cindex Modifications, copying between branches cvs.texi(,3961) cvs.texi(,3962) @sc{cvs} allows you to isolate changes onto a separate cvs.texi(,3963) line of development, known as a @dfn{branch}. When you cvs.texi(,3964) change files on a branch, those changes do not appear cvs.texi(,3965) on the main trunk or other branches. cvs.texi(,3966) cvs.texi(,3967) Later you can move changes from one branch to another cvs.texi(,3968) branch (or the main trunk) by @dfn{merging}. Merging cvs.texi(,3969) involves first running @code{cvs update -j}, to merge cvs.texi(,3970) the changes into the working directory. cvs.texi(,3971) You can then commit that revision, and thus effectively cvs.texi(,3972) copy the changes onto another branch. cvs.texi(,3973) cvs.texi(,3974) @menu cvs.texi(,3975) * Branches motivation:: What branches are good for cvs.texi(,3976) * Creating a branch:: Creating a branch cvs.texi(,3977) * Accessing branches:: Checking out and updating branches cvs.texi(,3978) * Branches and revisions:: Branches are reflected in revision numbers cvs.texi(,3979) * Magic branch numbers:: Magic branch numbers cvs.texi(,3980) * Merging a branch:: Merging an entire branch cvs.texi(,3981) * Merging more than once:: Merging from a branch several times cvs.texi(,3982) * Merging two revisions:: Merging differences between two revisions cvs.texi(,3983) * Merging adds and removals:: What if files are added or removed? cvs.texi(,3984) * Merging and keywords:: Avoiding conflicts due to keyword substitution cvs.texi(,3985) @end menu cvs.texi(,3986) cvs.texi(,3987) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,3988) @node Branches motivation cvs.texi(,3989) @section What branches are good for cvs.texi(,3990) @cindex Branches motivation cvs.texi(,3991) @cindex What branches are good for cvs.texi(,3992) @cindex Motivation for branches cvs.texi(,3993) cvs.texi(,3994) @c FIXME: this node mentions one way to use branches, cvs.texi(,3995) @c but it is by no means the only way. For example, cvs.texi(,3996) @c the technique of committing a new feature on a branch, cvs.texi(,3997) @c until it is ready for the main trunk. The whole cvs.texi(,3998) @c thing is generally speaking more akin to the cvs.texi(,3999) @c "Revision management" node although it isn't clear to cvs.texi(,4000) @c me whether policy matters should be centralized or cvs.texi(,4001) @c distributed throughout the relevant sections. cvs.texi(,4002) Suppose that release 1.0 of tc has been made. You are continuing to cvs.texi(,4003) develop tc, planning to create release 1.1 in a couple of months. After a cvs.texi(,4004) while your customers start to complain about a fatal bug. You check cvs.texi(,4005) out release 1.0 (@pxref{Tags}) and find the bug cvs.texi(,4006) (which turns out to have a trivial fix). However, the current revision cvs.texi(,4007) of the sources are in a state of flux and are not expected to be stable cvs.texi(,4008) for at least another month. There is no way to make a cvs.texi(,4009) bugfix release based on the newest sources. cvs.texi(,4010) cvs.texi(,4011) The thing to do in a situation like this is to create a @dfn{branch} on cvs.texi(,4012) the revision trees for all the files that make up cvs.texi(,4013) release 1.0 of tc. You can then make cvs.texi(,4014) modifications to the branch without disturbing the main trunk. When the cvs.texi(,4015) modifications are finished you can elect to either incorporate them on cvs.texi(,4016) the main trunk, or leave them on the branch. cvs.texi(,4017) cvs.texi(,4018) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,4019) @node Creating a branch cvs.texi(,4020) @section Creating a branch cvs.texi(,4021) @cindex Creating a branch cvs.texi(,4022) @cindex Branch, creating a cvs.texi(,4023) @cindex tag (subcommand), creating a branch using cvs.texi(,4024) @cindex rtag (subcommand), creating a branch using cvs.texi(,4025) cvs.texi(,4026) You can create a branch with @code{tag -b}; for cvs.texi(,4027) example, assuming you're in a working copy: cvs.texi(,4028) cvs.texi(,4029) @example cvs.texi(,4030) $ cvs tag -b rel-1-0-patches cvs.texi(,4031) @end example cvs.texi(,4032) cvs.texi(,4033) @c FIXME: we should be more explicit about the value of cvs.texi(,4034) @c having a tag on the branchpoint. For example cvs.texi(,4035) @c "cvs tag rel-1-0-patches-branchpoint" before cvs.texi(,4036) @c the "cvs tag -b". This points out that cvs.texi(,4037) @c rel-1-0-patches is a pretty awkward name for cvs.texi(,4038) @c this example (more so than for the rtag example cvs.texi(,4039) @c below). cvs.texi(,4040) cvs.texi(,4041) This splits off a branch based on the current revisions cvs.texi(,4042) in the working copy, assigning that branch the name cvs.texi(,4043) @samp{rel-1-0-patches}. cvs.texi(,4044) cvs.texi(,4045) It is important to understand that branches get created cvs.texi(,4046) in the repository, not in the working copy. Creating a cvs.texi(,4047) branch based on current revisions, as the above example cvs.texi(,4048) does, will @emph{not} automatically switch the working cvs.texi(,4049) copy to be on the new branch. For information on how cvs.texi(,4050) to do that, see @ref{Accessing branches}. cvs.texi(,4051) cvs.texi(,4052) You can also create a branch without reference to any cvs.texi(,4053) working copy, by using @code{rtag}: cvs.texi(,4054) cvs.texi(,4055) @example cvs.texi(,4056) $ cvs rtag -b -r rel-1-0 rel-1-0-patches tc cvs.texi(,4057) @end example cvs.texi(,4058) cvs.texi(,4059) @samp{-r rel-1-0} says that this branch should be cvs.texi(,4060) rooted at the revision that cvs.texi(,4061) corresponds to the tag @samp{rel-1-0}. It need not cvs.texi(,4062) be the most recent revision -- it's often useful to cvs.texi(,4063) split a branch off an old revision (for example, when cvs.texi(,4064) fixing a bug in a past release otherwise known to be cvs.texi(,4065) stable). cvs.texi(,4066) cvs.texi(,4067) As with @samp{tag}, the @samp{-b} flag tells cvs.texi(,4068) @code{rtag} to create a branch (rather than just a cvs.texi(,4069) symbolic revision name). Note that the numeric cvs.texi(,4070) revision number that matches @samp{rel-1-0} will cvs.texi(,4071) probably be different from file to file. cvs.texi(,4072) cvs.texi(,4073) So, the full effect of the command is to create a new cvs.texi(,4074) branch -- named @samp{rel-1-0-patches} -- in module cvs.texi(,4075) @samp{tc}, rooted in the revision tree at the point tagged cvs.texi(,4076) by @samp{rel-1-0}. cvs.texi(,4077) cvs.texi(,4078) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,4079) @node Accessing branches cvs.texi(,4080) @section Accessing branches cvs.texi(,4081) @cindex Check out a branch cvs.texi(,4082) @cindex Retrieve a branch cvs.texi(,4083) @cindex Access a branch cvs.texi(,4084) @cindex Identifying a branch cvs.texi(,4085) @cindex Branch, check out cvs.texi(,4086) @cindex Branch, retrieving cvs.texi(,4087) @cindex Branch, accessing cvs.texi(,4088) @cindex Branch, identifying cvs.texi(,4089) cvs.texi(,4090) You can retrieve a branch in one of two ways: by cvs.texi(,4091) checking it out fresh from the repository, or by cvs.texi(,4092) switching an existing working copy over to the branch. cvs.texi(,4093) cvs.texi(,4094) To check out a branch from the repository, invoke cvs.texi(,4095) @samp{checkout} with the @samp{-r} flag, followed by cvs.texi(,4096) the tag name of the branch (@pxref{Creating a branch}): cvs.texi(,4097) cvs.texi(,4098) @example cvs.texi(,4099) $ cvs checkout -r rel-1-0-patches tc cvs.texi(,4100) @end example cvs.texi(,4101) cvs.texi(,4102) Or, if you already have a working copy, you can switch cvs.texi(,4103) it to a given branch with @samp{update -r}: cvs.texi(,4104) cvs.texi(,4105) @example cvs.texi(,4106) $ cvs update -r rel-1-0-patches tc cvs.texi(,4107) @end example cvs.texi(,4108) cvs.texi(,4109) @noindent cvs.texi(,4110) or equivalently: cvs.texi(,4111) cvs.texi(,4112) @example cvs.texi(,4113) $ cd tc cvs.texi(,4114) $ cvs update -r rel-1-0-patches cvs.texi(,4115) @end example cvs.texi(,4116) cvs.texi(,4117) It does not matter if the working copy was originally cvs.texi(,4118) on the main trunk or on some other branch -- the above cvs.texi(,4119) command will switch it to the named branch. And cvs.texi(,4120) similarly to a regular @samp{update} command, cvs.texi(,4121) @samp{update -r} merges any changes you have made, cvs.texi(,4122) notifying you of conflicts where they occur. cvs.texi(,4123) cvs.texi(,4124) Once you have a working copy tied to a particular cvs.texi(,4125) branch, it remains there until you tell it otherwise. cvs.texi(,4126) This means that changes checked in from the working cvs.texi(,4127) copy will add new revisions on that branch, while cvs.texi(,4128) leaving the main trunk and other branches unaffected. cvs.texi(,4129) cvs.texi(,4130) @cindex Branches, sticky cvs.texi(,4131) To find out what branch a working copy is on, you can cvs.texi(,4132) use the @samp{status} command. In its output, look for cvs.texi(,4133) the field named @samp{Sticky tag} (@pxref{Sticky tags}) cvs.texi(,4134) -- that's @sc{cvs}'s way of telling you the branch, if cvs.texi(,4135) any, of the current working files: cvs.texi(,4136) cvs.texi(,4137) @example cvs.texi(,4138) $ cvs status -v driver.c backend.c cvs.texi(,4139) =================================================================== cvs.texi(,4140) File: driver.c Status: Up-to-date cvs.texi(,4141) cvs.texi(,4142) Version: 1.7 Sat Dec 5 18:25:54 1992 cvs.texi(,4143) RCS Version: 1.7 /u/cvsroot/yoyodyne/tc/driver.c,v cvs.texi(,4144) Sticky Tag: rel-1-0-patches (branch: 1.7.2) cvs.texi(,4145) Sticky Date: (none) cvs.texi(,4146) Sticky Options: (none) cvs.texi(,4147) cvs.texi(,4148) Existing Tags: cvs.texi(,4149) rel-1-0-patches (branch: 1.7.2) cvs.texi(,4150) rel-1-0 (revision: 1.7) cvs.texi(,4151) cvs.texi(,4152) =================================================================== cvs.texi(,4153) File: backend.c Status: Up-to-date cvs.texi(,4154) cvs.texi(,4155) Version: 1.4 Tue Dec 1 14:39:01 1992 cvs.texi(,4156) RCS Version: 1.4 /u/cvsroot/yoyodyne/tc/backend.c,v cvs.texi(,4157) Sticky Tag: rel-1-0-patches (branch: 1.4.2) cvs.texi(,4158) Sticky Date: (none) cvs.texi(,4159) Sticky Options: (none) cvs.texi(,4160) cvs.texi(,4161) Existing Tags: cvs.texi(,4162) rel-1-0-patches (branch: 1.4.2) cvs.texi(,4163) rel-1-0 (revision: 1.4) cvs.texi(,4164) rel-0-4 (revision: 1.4) cvs.texi(,4165) cvs.texi(,4166) @end example cvs.texi(,4167) cvs.texi(,4168) Don't be confused by the fact that the branch numbers cvs.texi(,4169) for each file are different (@samp{1.7.2} and cvs.texi(,4170) @samp{1.4.2} respectively). The branch tag is the cvs.texi(,4171) same, @samp{rel-1-0-patches}, and the files are cvs.texi(,4172) indeed on the same branch. The numbers simply reflect cvs.texi(,4173) the point in each file's revision history at which the cvs.texi(,4174) branch was made. In the above example, one can deduce cvs.texi(,4175) that @samp{driver.c} had been through more changes than cvs.texi(,4176) @samp{backend.c} before this branch was created. cvs.texi(,4177) cvs.texi(,4178) See @ref{Branches and revisions} for details about how cvs.texi(,4179) branch numbers are constructed. cvs.texi(,4180) cvs.texi(,4181) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,4182) @node Branches and revisions cvs.texi(,4183) @section Branches and revisions cvs.texi(,4184) @cindex Branch number cvs.texi(,4185) @cindex Number, branch cvs.texi(,4186) @cindex Revision numbers (branches) cvs.texi(,4187) cvs.texi(,4188) Ordinarily, a file's revision history is a linear cvs.texi(,4189) series of increments (@pxref{Revision numbers}): cvs.texi(,4190) cvs.texi(,4191) @example cvs.texi(,4192) +-----+ +-----+ +-----+ +-----+ +-----+ cvs.texi(,4193) ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! cvs.texi(,4194) +-----+ +-----+ +-----+ +-----+ +-----+ cvs.texi(,4195) @end example cvs.texi(,4196) cvs.texi(,4197) However, @sc{cvs} is not limited to linear development. The cvs.texi(,4198) @dfn{revision tree} can be split into @dfn{branches}, cvs.texi(,4199) where each branch is a self-maintained line of cvs.texi(,4200) development. Changes made on one branch can easily be cvs.texi(,4201) moved back to the main trunk. cvs.texi(,4202) cvs.texi(,4203) Each branch has a @dfn{branch number}, consisting of an cvs.texi(,4204) odd number of period-separated decimal integers. The cvs.texi(,4205) branch number is created by appending an integer to the cvs.texi(,4206) revision number where the corresponding branch forked cvs.texi(,4207) off. Having branch numbers allows more than one branch cvs.texi(,4208) to be forked off from a certain revision. cvs.texi(,4209) cvs.texi(,4210) @need 3500 cvs.texi(,4211) All revisions on a branch have revision numbers formed cvs.texi(,4212) by appending an ordinal number to the branch number. cvs.texi(,4213) The following figure illustrates branching with an cvs.texi(,4214) example. cvs.texi(,4215) cvs.texi(,4216) @example cvs.texi(,4217) @c This example used to have a 1.2.2.4 revision, which cvs.texi(,4218) @c might help clarify that development can continue on cvs.texi(,4219) @c 1.2.2. Might be worth reinstating if it can be done cvs.texi(,4220) @c without overfull hboxes. cvs.texi(,4221) @group cvs.texi(,4222) +-------------+ cvs.texi(,4223) Branch 1.2.2.3.2 -> ! 1.2.2.3.2.1 ! cvs.texi(,4224) / +-------------+ cvs.texi(,4225) / cvs.texi(,4226) / cvs.texi(,4227) +---------+ +---------+ +---------+ cvs.texi(,4228) Branch 1.2.2 -> _! 1.2.2.1 !----! 1.2.2.2 !----! 1.2.2.3 ! cvs.texi(,4229) / +---------+ +---------+ +---------+ cvs.texi(,4230) / cvs.texi(,4231) / cvs.texi(,4232) +-----+ +-----+ +-----+ +-----+ +-----+ cvs.texi(,4233) ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! <- The main trunk cvs.texi(,4234) +-----+ +-----+ +-----+ +-----+ +-----+ cvs.texi(,4235) ! cvs.texi(,4236) ! cvs.texi(,4237) ! +---------+ +---------+ +---------+ cvs.texi(,4238) Branch 1.2.4 -> +---! 1.2.4.1 !----! 1.2.4.2 !----! 1.2.4.3 ! cvs.texi(,4239) +---------+ +---------+ +---------+ cvs.texi(,4240) cvs.texi(,4241) @end group cvs.texi(,4242) @end example cvs.texi(,4243) cvs.texi(,4244) @c -- However, at least for me the figure is not enough. I suggest more cvs.texi(,4245) @c -- text to accompany it. "A picture is worth a thousand words", so you cvs.texi(,4246) @c -- have to make sure the reader notices the couple of hundred words cvs.texi(,4247) @c -- *you* had in mind more than the others! cvs.texi(,4248) cvs.texi(,4249) @c -- Why an even number of segments? This section implies that this is cvs.texi(,4250) @c -- how the main trunk is distinguished from branch roots, but you never cvs.texi(,4251) @c -- explicitly say that this is the purpose of the [by itself rather cvs.texi(,4252) @c -- surprising] restriction to an even number of segments. cvs.texi(,4253) cvs.texi(,4254) The exact details of how the branch number is cvs.texi(,4255) constructed is not something you normally need to be cvs.texi(,4256) concerned about, but here is how it works: When cvs.texi(,4257) @sc{cvs} creates a branch number it picks the first cvs.texi(,4258) unused even integer, starting with 2. So when you want cvs.texi(,4259) to create a branch from revision 6.4 it will be cvs.texi(,4260) numbered 6.4.2. All branch numbers ending in a zero cvs.texi(,4261) (such as 6.4.0) are used internally by @sc{cvs} cvs.texi(,4262) (@pxref{Magic branch numbers}). The branch 1.1.1 has a cvs.texi(,4263) special meaning. @xref{Tracking sources}. cvs.texi(,4264) cvs.texi(,4265) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,4266) @node Magic branch numbers cvs.texi(,4267) @section Magic branch numbers cvs.texi(,4268) cvs.texi(,4269) @c Want xref to here from "log"? cvs.texi(,4270) cvs.texi(,4271) This section describes a @sc{cvs} feature called cvs.texi(,4272) @dfn{magic branches}. For most purposes, you need not cvs.texi(,4273) worry about magic branches; @sc{cvs} handles them for cvs.texi(,4274) you. However, they are visible to you in certain cvs.texi(,4275) circumstances, so it may be useful to have some idea of cvs.texi(,4276) how it works. cvs.texi(,4277) cvs.texi(,4278) Externally, branch numbers consist of an odd number of cvs.texi(,4279) dot-separated decimal integers. @xref{Revision cvs.texi(,4280) numbers}. That is not the whole truth, however. For cvs.texi(,4281) efficiency reasons @sc{cvs} sometimes inserts an extra 0 cvs.texi(,4282) in the second rightmost position (1.2.4 becomes cvs.texi(,4283) 1.2.0.4, 8.9.10.11.12 becomes 8.9.10.11.0.12 and so cvs.texi(,4284) on). cvs.texi(,4285) cvs.texi(,4286) @sc{cvs} does a pretty good job at hiding these so cvs.texi(,4287) called magic branches, but in a few places the hiding cvs.texi(,4288) is incomplete: cvs.texi(,4289) cvs.texi(,4290) @itemize @bullet cvs.texi(,4303) @item cvs.texi(,4304) The magic branch number appears in the output from cvs.texi(,4305) @code{cvs log}. cvs.texi(,4306) @c What output should appear instead? cvs.texi(,4307) cvs.texi(,4308) @item cvs.texi(,4309) You cannot specify a symbolic branch name to @code{cvs cvs.texi(,4310) admin}. cvs.texi(,4311) cvs.texi(,4312) @end itemize cvs.texi(,4313) cvs.texi(,4314) @c Can CVS do this automatically the first time cvs.texi(,4315) @c you check something in to that branch? Should cvs.texi(,4316) @c it? cvs.texi(,4317) You can use the @code{admin} command to reassign a cvs.texi(,4318) symbolic name to a branch the way @sc{rcs} expects it cvs.texi(,4319) to be. If @code{R4patches} is assigned to the branch cvs.texi(,4320) 1.4.2 (magic branch number 1.4.0.2) in file cvs.texi(,4321) @file{numbers.c} you can do this: cvs.texi(,4322) cvs.texi(,4323) @example cvs.texi(,4324) $ cvs admin -NR4patches:1.4.2 numbers.c cvs.texi(,4325) @end example cvs.texi(,4326) cvs.texi(,4327) It only works if at least one revision is already cvs.texi(,4328) committed on the branch. Be very careful so that you cvs.texi(,4329) do not assign the tag to the wrong number. (There is cvs.texi(,4330) no way to see how the tag was assigned yesterday). cvs.texi(,4331) cvs.texi(,4332) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,4333) @node Merging a branch cvs.texi(,4334) @section Merging an entire branch cvs.texi(,4335) @cindex Merging a branch cvs.texi(,4336) @cindex -j (merging branches) cvs.texi(,4337) cvs.texi(,4338) You can merge changes made on a branch into your working copy by giving cvs.texi(,4339) the @samp{-j @var{branchname}} flag to the @code{update} subcommand. With one cvs.texi(,4340) @samp{-j @var{branchname}} option it merges the changes made between the cvs.texi(,4341) greatest common ancestor (GCA) of the branch and the destination revision (in cvs.texi(,4342) the simple case below the GCA is the point where the branch forked) and the cvs.texi(,4343) newest revision on that branch into your working copy. cvs.texi(,4344) cvs.texi(,4345) @cindex Join cvs.texi(,4346) The @samp{-j} stands for ``join''. cvs.texi(,4347) cvs.texi(,4348) @cindex Branch merge example cvs.texi(,4349) @cindex Example, branch merge cvs.texi(,4350) @cindex Merge, branch example cvs.texi(,4351) Consider this revision tree: cvs.texi(,4352) cvs.texi(,4353) @example cvs.texi(,4354) +-----+ +-----+ +-----+ +-----+ cvs.texi(,4355) ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 ! <- The main trunk cvs.texi(,4356) +-----+ +-----+ +-----+ +-----+ cvs.texi(,4357) ! cvs.texi(,4358) ! cvs.texi(,4359) ! +---------+ +---------+ cvs.texi(,4360) Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 ! cvs.texi(,4361) +---------+ +---------+ cvs.texi(,4362) @end example cvs.texi(,4363) cvs.texi(,4364) @noindent cvs.texi(,4365) The branch 1.2.2 has been given the tag (symbolic name) @samp{R1fix}. The cvs.texi(,4366) following example assumes that the module @samp{mod} contains only one cvs.texi(,4367) file, @file{m.c}. cvs.texi(,4368) cvs.texi(,4369) @example cvs.texi(,4370) $ cvs checkout mod # @r{Retrieve the latest revision, 1.4} cvs.texi(,4371) cvs.texi(,4372) $ cvs update -j R1fix m.c # @r{Merge all changes made on the branch,} cvs.texi(,4373) # @r{i.e. the changes between revision 1.2} cvs.texi(,4374) # @r{and 1.2.2.2, into your working copy} cvs.texi(,4375) # @r{of the file.} cvs.texi(,4376) cvs.texi(,4377) $ cvs commit -m "Included R1fix" # @r{Create revision 1.5.} cvs.texi(,4378) @end example cvs.texi(,4379) cvs.texi(,4380) A conflict can result from a merge operation. If that cvs.texi(,4381) happens, you should resolve it before committing the cvs.texi(,4382) new revision. @xref{Conflicts example}. cvs.texi(,4383) cvs.texi(,4384) If your source files contain keywords (@pxref{Keyword substitution}), cvs.texi(,4385) you might be getting more conflicts than strictly necessary. See cvs.texi(,4386) @ref{Merging and keywords}, for information on how to avoid this. cvs.texi(,4387) cvs.texi(,4388) The @code{checkout} command also supports the @samp{-j @var{branchname}} flag. The cvs.texi(,4389) same effect as above could be achieved with this: cvs.texi(,4390) cvs.texi(,4391) @example cvs.texi(,4392) $ cvs checkout -j R1fix mod cvs.texi(,4393) $ cvs commit -m "Included R1fix" cvs.texi(,4394) @end example cvs.texi(,4395) cvs.texi(,4396) It should be noted that @code{update -j @var{tagname}} will also work but may cvs.texi(,4397) not produce the desired result. @xref{Merging adds and removals}, for more. cvs.texi(,4398) cvs.texi(,4399) @node Merging more than once cvs.texi(,4400) @section Merging from a branch several times cvs.texi(,4401) cvs.texi(,4402) Continuing our example, the revision tree now looks cvs.texi(,4403) like this: cvs.texi(,4404) cvs.texi(,4405) @example cvs.texi(,4406) +-----+ +-----+ +-----+ +-----+ +-----+ cvs.texi(,4407) ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! <- The main trunk cvs.texi(,4408) +-----+ +-----+ +-----+ +-----+ +-----+ cvs.texi(,4409) ! * cvs.texi(,4410) ! * cvs.texi(,4411) ! +---------+ +---------+ cvs.texi(,4412) Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 ! cvs.texi(,4413) +---------+ +---------+ cvs.texi(,4414) @end example cvs.texi(,4415) cvs.texi(,4416) @noindent cvs.texi(,4417) where the starred line represents the merge from the cvs.texi(,4418) @samp{R1fix} branch to the main trunk, as just cvs.texi(,4419) discussed. cvs.texi(,4420) cvs.texi(,4421) Now suppose that development continues on the cvs.texi(,4422) @samp{R1fix} branch: cvs.texi(,4423) cvs.texi(,4424) @example cvs.texi(,4425) +-----+ +-----+ +-----+ +-----+ +-----+ cvs.texi(,4426) ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! <- The main trunk cvs.texi(,4427) +-----+ +-----+ +-----+ +-----+ +-----+ cvs.texi(,4428) ! * cvs.texi(,4429) ! * cvs.texi(,4430) ! +---------+ +---------+ +---------+ cvs.texi(,4431) Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 !----! 1.2.2.3 ! cvs.texi(,4432) +---------+ +---------+ +---------+ cvs.texi(,4433) @end example cvs.texi(,4434) cvs.texi(,4435) @noindent cvs.texi(,4436) and then you want to merge those new changes onto the cvs.texi(,4437) main trunk. If you just use the @code{cvs update -j cvs.texi(,4438) R1fix m.c} command again, @sc{cvs} will attempt to cvs.texi(,4439) merge again the changes which you have already merged, cvs.texi(,4440) which can have undesirable side effects. cvs.texi(,4441) cvs.texi(,4442) So instead you need to specify that you only want to cvs.texi(,4443) merge the changes on the branch which have not yet been cvs.texi(,4444) merged into the trunk. To do that you specify two cvs.texi(,4445) @samp{-j} options, and @sc{cvs} merges the changes from cvs.texi(,4446) the first revision to the second revision. For cvs.texi(,4447) example, in this case the simplest way would be cvs.texi(,4448) cvs.texi(,4449) @example cvs.texi(,4450) cvs update -j 1.2.2.2 -j R1fix m.c # @r{Merge changes from 1.2.2.2 to the} cvs.texi(,4451) # @r{head of the R1fix branch} cvs.texi(,4452) @end example cvs.texi(,4453) cvs.texi(,4454) The problem with this is that you need to specify the cvs.texi(,4455) 1.2.2.2 revision manually. A slightly better approach cvs.texi(,4456) might be to use the date the last merge was done: cvs.texi(,4457) cvs.texi(,4458) @example cvs.texi(,4459) cvs update -j R1fix:yesterday -j R1fix m.c cvs.texi(,4460) @end example cvs.texi(,4461) cvs.texi(,4462) Better yet, tag the R1fix branch after every merge into cvs.texi(,4463) the trunk, and then use that tag for subsequent merges: cvs.texi(,4464) cvs.texi(,4465) @example cvs.texi(,4466) cvs update -j merged_from_R1fix_to_trunk -j R1fix m.c cvs.texi(,4467) @end example cvs.texi(,4468) cvs.texi(,4469) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,4470) @node Merging two revisions cvs.texi(,4471) @section Merging differences between any two revisions cvs.texi(,4472) @cindex Merging two revisions cvs.texi(,4473) @cindex Revisions, merging differences between cvs.texi(,4474) @cindex Differences, merging cvs.texi(,4475) cvs.texi(,4476) With two @samp{-j @var{revision}} flags, the @code{update} cvs.texi(,4477) (and @code{checkout}) command can merge the differences cvs.texi(,4478) between any two revisions into your working file. cvs.texi(,4479) cvs.texi(,4480) @cindex Undoing a change cvs.texi(,4481) @cindex Removing a change cvs.texi(,4482) @example cvs.texi(,4483) $ cvs update -j 1.5 -j 1.3 backend.c cvs.texi(,4484) @end example cvs.texi(,4485) cvs.texi(,4486) @noindent cvs.texi(,4487) will undo all changes made between revision cvs.texi(,4488) 1.3 and 1.5. Note the order of the revisions! cvs.texi(,4489) cvs.texi(,4490) If you try to use this option when operating on cvs.texi(,4491) multiple files, remember that the numeric revisions will cvs.texi(,4492) probably be very different between the various files. cvs.texi(,4493) You almost always use symbolic cvs.texi(,4494) tags rather than revision numbers when operating on cvs.texi(,4495) multiple files. cvs.texi(,4496) cvs.texi(,4497) @cindex Restoring old version of removed file cvs.texi(,4498) @cindex Resurrecting old version of dead file cvs.texi(,4499) Specifying two @samp{-j} options can also undo file cvs.texi(,4500) removals or additions. For example, suppose you have cvs.texi(,4501) a file cvs.texi(,4502) named @file{file1} which existed as revision 1.1, and cvs.texi(,4503) you then removed it (thus adding a dead revision 1.2). cvs.texi(,4504) Now suppose you want to add it again, with the same cvs.texi(,4505) contents it had previously. Here is how to do it: cvs.texi(,4506) cvs.texi(,4507) @example cvs.texi(,4508) $ cvs update -j 1.2 -j 1.1 file1 cvs.texi(,4509) U file1 cvs.texi(,4510) $ cvs commit -m test cvs.texi(,4511) Checking in file1; cvs.texi(,4512) /tmp/cvs-sanity/cvsroot/first-dir/file1,v <-- file1 cvs.texi(,4513) new revision: 1.3; previous revision: 1.2 cvs.texi(,4514) done cvs.texi(,4515) $ cvs.texi(,4516) @end example cvs.texi(,4517) cvs.texi(,4518) @node Merging adds and removals cvs.texi(,4519) @section Merging can add or remove files cvs.texi(,4520) cvs.texi(,4521) If the changes which you are merging involve removing cvs.texi(,4522) or adding some files, @code{update -j} will reflect cvs.texi(,4523) such additions or removals. cvs.texi(,4524) cvs.texi(,4525) @c FIXME: This example needs a lot more explanation. cvs.texi(,4526) @c We also need other examples for some of the other cvs.texi(,4527) @c cases (not all--there are too many--as long as we present a cvs.texi(,4528) @c coherent general principle). cvs.texi(,4529) For example: cvs.texi(,4530) @example cvs.texi(,4531) cvs update -A cvs.texi(,4532) touch a b c cvs.texi(,4533) cvs add a b c ; cvs ci -m "added" a b c cvs.texi(,4534) cvs tag -b branchtag cvs.texi(,4535) cvs update -r branchtag cvs.texi(,4536) touch d ; cvs add d cvs.texi(,4537) rm a ; cvs rm a cvs.texi(,4538) cvs ci -m "added d, removed a" cvs.texi(,4539) cvs update -A cvs.texi(,4540) cvs update -jbranchtag cvs.texi(,4541) @end example cvs.texi(,4542) cvs.texi(,4543) After these commands are executed and a @samp{cvs commit} is done, cvs.texi(,4544) file @file{a} will be removed and file @file{d} added in the main branch. cvs.texi(,4545) @c (which was determined by trying it) cvs.texi(,4546) cvs.texi(,4547) Note that using a single static tag (@samp{-j @var{tagname}}) cvs.texi(,4548) rather than a dynamic tag (@samp{-j @var{branchname}}) to merge cvs.texi(,4549) changes from a branch will usually not remove files which were removed on the cvs.texi(,4550) branch since @sc{cvs} does not automatically add static tags to dead revisions. cvs.texi(,4551) The exception to this rule occurs when cvs.texi(,4552) a static tag has been attached to a dead revision manually. Use the branch tag cvs.texi(,4553) to merge all changes from the branch or use two static tags as merge endpoints cvs.texi(,4554) to be sure that all intended changes are propagated in the merge. cvs.texi(,4555) cvs.texi(,4556) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,4557) @node Merging and keywords cvs.texi(,4558) @section Merging and keywords cvs.texi(,4559) @cindex Merging, and keyword substitution cvs.texi(,4560) @cindex Keyword substitution, and merging cvs.texi(,4561) @cindex -j (merging branches), and keyword substitution cvs.texi(,4562) @cindex -kk, to avoid conflicts during a merge cvs.texi(,4563) cvs.texi(,4564) If you merge files containing keywords (@pxref{Keyword cvs.texi(,4565) substitution}), you will normally get numerous cvs.texi(,4566) conflicts during the merge, because the keywords are cvs.texi(,4567) expanded differently in the revisions which you are cvs.texi(,4568) merging. cvs.texi(,4569) cvs.texi(,4570) Therefore, you will often want to specify the cvs.texi(,4571) @samp{-kk} (@pxref{Substitution modes}) switch to the cvs.texi(,4572) merge command line. By substituting just the name of cvs.texi(,4573) the keyword, not the expanded value of that keyword, cvs.texi(,4574) this option ensures that the revisions which you are cvs.texi(,4575) merging will be the same as each other, and avoid cvs.texi(,4576) spurious conflicts. cvs.texi(,4577) cvs.texi(,4578) For example, suppose you have a file like this: cvs.texi(,4579) cvs.texi(,4580) @example cvs.texi(,4581) +---------+ cvs.texi(,4582) _! 1.1.2.1 ! <- br1 cvs.texi(,4583) / +---------+ cvs.texi(,4584) / cvs.texi(,4585) / cvs.texi(,4586) +-----+ +-----+ cvs.texi(,4587) ! 1.1 !----! 1.2 ! cvs.texi(,4588) +-----+ +-----+ cvs.texi(,4589) @end example cvs.texi(,4590) cvs.texi(,4591) @noindent cvs.texi(,4592) and your working directory is currently on the trunk cvs.texi(,4593) (revision 1.2). Then you might get the following cvs.texi(,4594) results from a merge: cvs.texi(,4595) cvs.texi(,4596) @example cvs.texi(,4597) $ cat file1 cvs.texi(splitrcskeyword,4598) key $cvs.texi(splitrcskeyword,4598) @i{}Revision: 1.2 $ cvs.texi(,4599) . . . cvs.texi(,4600) $ cvs update -j br1 cvs.texi(,4601) U file1 cvs.texi(,4602) RCS file: /cvsroot/first-dir/file1,v cvs.texi(,4603) retrieving revision 1.1 cvs.texi(,4604) retrieving revision 1.1.2.1 cvs.texi(,4605) Merging differences between 1.1 and 1.1.2.1 into file1 cvs.texi(,4606) rcsmerge: warning: conflicts during merge cvs.texi(,4607) $ cat file1 cvs.texi(,4608) @asis{}<<<<<<< file1 cvs.texi(splitrcskeyword,4609) key $cvs.texi(splitrcskeyword,4609) @i{}Revision: 1.2 $ cvs.texi(,4610) @asis{}======= cvs.texi(splitrcskeyword,4611) key $cvs.texi(splitrcskeyword,4611) @i{}Revision: 1.1.2.1 $ cvs.texi(,4612) @asis{}>>>>>>> 1.1.2.1 cvs.texi(,4613) . . . cvs.texi(,4614) @end example cvs.texi(,4615) cvs.texi(,4616) What happened was that the merge tried to merge the cvs.texi(,4617) differences between 1.1 and 1.1.2.1 into your working cvs.texi(,4618) directory. So, since the keyword changed from cvs.texi(,4619) @code{Revision: 1.1} to @code{Revision: 1.1.2.1}, cvs.texi(,4620) @sc{cvs} tried to merge that change into your working cvs.texi(,4621) directory, which conflicted with the fact that your cvs.texi(,4622) working directory had contained @code{Revision: 1.2}. cvs.texi(,4623) cvs.texi(,4624) Here is what happens if you had used @samp{-kk}: cvs.texi(,4625) cvs.texi(,4626) @example cvs.texi(,4627) $ cat file1 cvs.texi(splitrcskeyword,4628) key $cvs.texi(splitrcskeyword,4628) @i{}Revision: 1.2 $ cvs.texi(,4629) . . . cvs.texi(,4630) $ cvs update -kk -j br1 cvs.texi(,4631) U file1 cvs.texi(,4632) RCS file: /cvsroot/first-dir/file1,v cvs.texi(,4633) retrieving revision 1.1 cvs.texi(,4634) retrieving revision 1.1.2.1 cvs.texi(,4635) Merging differences between 1.1 and 1.1.2.1 into file1 cvs.texi(,4636) $ cat file1 cvs.texi(splitrcskeyword,4637) key $cvs.texi(splitrcskeyword,4637) @i{}Revision$ cvs.texi(,4638) . . . cvs.texi(,4639) @end example cvs.texi(,4640) cvs.texi(,4641) What is going on here is that revision 1.1 and 1.1.2.1 cvs.texi(,4642) both expand as plain @code{Revision}, and therefore cvs.texi(,4643) merging the changes between them into the working cvs.texi(,4644) directory need not change anything. Therefore, there cvs.texi(,4645) is no conflict. cvs.texi(,4646) cvs.texi(,4647) @strong{WARNING: In versions of @sc{cvs} prior to 1.12.2, there was a cvs.texi(,4648) major problem with using @samp{-kk} on merges. Namely, @samp{-kk} cvs.texi(,4649) overrode any default keyword expansion mode set in the archive file in cvs.texi(,4650) the repository. This could, unfortunately for some users, cause data cvs.texi(,4651) corruption in binary files (with a default keyword expansion mode set cvs.texi(,4652) to @samp{-kb}). Therefore, when a repository contained binary files, cvs.texi(,4653) conflicts had to be dealt with manually rather than using @samp{-kk} in cvs.texi(,4654) a merge command.} cvs.texi(,4655) cvs.texi(,4656) In @sc{cvs} version 1.12.2 and later, the keyword expansion mode cvs.texi(,4657) provided on the command line to any @sc{cvs} command no longer cvs.texi(,4658) overrides the @samp{-kb} keyword expansion mode setting for binary cvs.texi(,4659) files, though it will still override other default keyword expansion cvs.texi(,4660) modes. You can now safely merge using @samp{-kk} to avoid spurious conflicts cvs.texi(,4661) on lines containing RCS keywords, even when your repository contains cvs.texi(,4662) binary files. cvs.texi(,4663) cvs.texi(,4664) @c --------------------------------------------------------------------- cvs.texi(,4665) @node Recursive behavior cvs.texi(,4666) @chapter Recursive behavior cvs.texi(,4667) @cindex Recursive (directory descending) cvs.texi(,4668) @cindex Directory, descending cvs.texi(,4669) @cindex Descending directories cvs.texi(,4670) @cindex Subdirectories cvs.texi(,4671) cvs.texi(,4672) Almost all of the subcommands of @sc{cvs} work cvs.texi(,4673) recursively when you specify a directory as an cvs.texi(,4674) argument. For instance, consider this directory cvs.texi(,4675) structure: cvs.texi(,4676) cvs.texi(,4677) @example cvs.texi(,4678) @code{$HOME} cvs.texi(,4679) | cvs.texi(,4680) +--@t{tc} cvs.texi(,4681) | | cvs.texi(,4682) +--@t{CVS} cvs.texi(,4683) | (internal @sc{cvs} files) cvs.texi(,4684) +--@t{Makefile} cvs.texi(,4685) +--@t{backend.c} cvs.texi(,4686) +--@t{driver.c} cvs.texi(,4687) +--@t{frontend.c} cvs.texi(,4688) +--@t{parser.c} cvs.texi(,4689) +--@t{man} cvs.texi(,4690) | | cvs.texi(,4691) | +--@t{CVS} cvs.texi(,4692) | | (internal @sc{cvs} files) cvs.texi(,4693) | +--@t{tc.1} cvs.texi(,4694) | cvs.texi(,4695) +--@t{testing} cvs.texi(,4696) | cvs.texi(,4697) +--@t{CVS} cvs.texi(,4698) | (internal @sc{cvs} files) cvs.texi(,4699) +--@t{testpgm.t} cvs.texi(,4700) +--@t{test2.t} cvs.texi(,4701) @end example cvs.texi(,4702) cvs.texi(,4703) @noindent cvs.texi(,4704) If @file{tc} is the current working directory, the cvs.texi(,4705) following is true: cvs.texi(,4706) cvs.texi(,4707) @itemize @bullet cvs.texi(,4708) @item cvs.texi(,4709) @samp{cvs update testing} is equivalent to cvs.texi(,4710) cvs.texi(,4711) @example cvs.texi(,4712) cvs update testing/testpgm.t testing/test2.t cvs.texi(,4713) @end example cvs.texi(,4714) cvs.texi(,4715) @item cvs.texi(,4716) @samp{cvs update testing man} updates all files in the cvs.texi(,4717) subdirectories cvs.texi(,4718) cvs.texi(,4719) @item cvs.texi(,4720) @samp{cvs update .} or just @samp{cvs update} updates cvs.texi(,4721) all files in the @code{tc} directory cvs.texi(,4722) @end itemize cvs.texi(,4723) cvs.texi(,4724) If no arguments are given to @code{update} it will cvs.texi(,4725) update all files in the current working directory and cvs.texi(,4726) all its subdirectories. In other words, @file{.} is a cvs.texi(,4727) default argument to @code{update}. This is also true cvs.texi(,4728) for most of the @sc{cvs} subcommands, not only the cvs.texi(,4729) @code{update} command. cvs.texi(,4730) cvs.texi(,4731) The recursive behavior of the @sc{cvs} subcommands can be cvs.texi(,4732) turned off with the @samp{-l} option. cvs.texi(,4733) Conversely, the @samp{-R} option can be used to force recursion if cvs.texi(,4734) @samp{-l} is specified in @file{~/.cvsrc} (@pxref{~/.cvsrc}). cvs.texi(,4735) cvs.texi(,4736) @example cvs.texi(,4737) $ cvs update -l # @r{Don't update files in subdirectories} cvs.texi(,4738) @end example cvs.texi(,4739) cvs.texi(,4740) @c --------------------------------------------------------------------- cvs.texi(,4741) @node Adding and removing cvs.texi(,4742) @chapter Adding, removing, and renaming files and directories cvs.texi(,4743) cvs.texi(,4744) In the course of a project, one will often add new cvs.texi(,4745) files. Likewise with removing or renaming, or with cvs.texi(,4746) directories. The general concept to keep in mind in cvs.texi(,4747) all these cases is that instead of making an cvs.texi(,4748) irreversible change you want @sc{cvs} to record the cvs.texi(,4749) fact that a change has taken place, just as with cvs.texi(,4750) modifying an existing file. The exact mechanisms to do cvs.texi(,4751) this in @sc{cvs} vary depending on the situation. cvs.texi(,4752) cvs.texi(,4753) @menu cvs.texi(,4754) * Adding files:: Adding files cvs.texi(,4755) * Removing files:: Removing files cvs.texi(,4756) * Removing directories:: Removing directories cvs.texi(,4757) * Moving files:: Moving and renaming files cvs.texi(,4758) * Moving directories:: Moving and renaming directories cvs.texi(,4759) @end menu cvs.texi(,4760) cvs.texi(,4761) @node Adding files cvs.texi(,4762) @section Adding files to a directory cvs.texi(,4763) @cindex Adding files cvs.texi(,4764) cvs.texi(,4765) To add a new file to a directory, follow these steps. cvs.texi(,4766) cvs.texi(,4767) @itemize @bullet cvs.texi(,4768) @item cvs.texi(,4769) You must have a working copy of the directory. cvs.texi(,4770) @xref{Getting the source}. cvs.texi(,4771) cvs.texi(,4772) @item cvs.texi(,4773) Create the new file inside your working copy of the directory. cvs.texi(,4774) cvs.texi(,4775) @item cvs.texi(,4776) Use @samp{cvs add @var{filename}} to tell @sc{cvs} that you cvs.texi(,4777) want to version control the file. If the file contains cvs.texi(,4778) binary data, specify @samp{-kb} (@pxref{Binary files}). cvs.texi(,4779) cvs.texi(,4780) @item cvs.texi(,4781) Use @samp{cvs commit @var{filename}} to actually check cvs.texi(,4782) in the file into the repository. Other developers cvs.texi(,4783) cannot see the file until you perform this step. cvs.texi(,4784) @end itemize cvs.texi(,4785) cvs.texi(,4786) You can also use the @code{add} command to add a new cvs.texi(,4787) directory. cvs.texi(,4788) @c FIXCVS and/or FIXME: Adding a directory doesn't cvs.texi(,4789) @c require the commit step. This probably can be cvs.texi(,4790) @c considered a CVS bug, but it is possible we should cvs.texi(,4791) @c warn people since this behavior probably won't be cvs.texi(,4792) @c changing right away. cvs.texi(,4793) cvs.texi(,4794) Unlike most other commands, the @code{add} command is cvs.texi(,4795) not recursive. You cannot even type @samp{cvs add cvs.texi(,4796) foo/bar}! Instead, you have to cvs.texi(,4797) @c FIXCVS: This is, of course, not a feature. It is cvs.texi(,4798) @c just that no one has gotten around to fixing "cvs add cvs.texi(,4799) @c foo/bar". cvs.texi(,4800) cvs.texi(,4801) @example cvs.texi(,4802) $ cd foo cvs.texi(,4803) $ cvs add bar cvs.texi(,4804) @end example cvs.texi(,4805) cvs.texi(,4806) @cindex add (subcommand) cvs.texi(,4807) @deffn Command {cvs add} [@code{-k} kflag] [@code{-m} message] files @dots{} cvs.texi(,4808) cvs.texi(,4809) Schedule @var{files} to be added to the repository. cvs.texi(,4810) The files or directories specified with @code{add} must cvs.texi(,4811) already exist in the current directory. To add a whole cvs.texi(,4812) new directory hierarchy to the source repository (for cvs.texi(,4813) example, files received from a third-party vendor), use cvs.texi(,4814) the @code{import} command instead. @xref{import}. cvs.texi(,4815) cvs.texi(,4816) The added files are not placed in the source repository cvs.texi(,4817) until you use @code{commit} to make the change cvs.texi(,4818) permanent. Doing an @code{add} on a file that was cvs.texi(,4819) removed with the @code{remove} command will undo the cvs.texi(,4820) effect of the @code{remove}, unless a @code{commit} cvs.texi(,4821) command intervened. @xref{Removing files}, for an cvs.texi(,4822) example. cvs.texi(,4823) cvs.texi(,4824) The @samp{-k} option specifies the default way that cvs.texi(,4825) this file will be checked out; for more information see cvs.texi(,4826) @ref{Substitution modes}. cvs.texi(,4827) cvs.texi(,4828) @c As noted in BUGS, -m is broken client/server (Nov cvs.texi(,4829) @c 96). Also see testsuite log2-* tests. cvs.texi(,4830) The @samp{-m} option specifies a description for the cvs.texi(,4831) file. This description appears in the history log (if cvs.texi(,4832) it is enabled, @pxref{history file}). It will also be cvs.texi(,4833) saved in the version history inside the repository when cvs.texi(,4834) the file is committed. The @code{log} command displays cvs.texi(,4835) this description. The description can be changed using cvs.texi(,4836) @samp{admin -t}. @xref{admin}. If you omit the cvs.texi(,4837) @samp{-m @var{description}} flag, an empty string will cvs.texi(,4838) be used. You will not be prompted for a description. cvs.texi(,4839) @end deffn cvs.texi(,4840) cvs.texi(,4841) For example, the following commands add the file cvs.texi(,4842) @file{backend.c} to the repository: cvs.texi(,4843) cvs.texi(,4844) @c This example used to specify cvs.texi(,4845) @c -m "Optimizer and code generation passes." cvs.texi(,4846) @c to the cvs add command, but that doesn't work cvs.texi(,4847) @c client/server (see log2 in sanity.sh). Should fix CVS, cvs.texi(,4848) @c but also seems strange to document things which cvs.texi(,4849) @c don't work... cvs.texi(,4850) @example cvs.texi(,4851) $ cvs add backend.c cvs.texi(,4852) $ cvs commit -m "Early version. Not yet compilable." backend.c cvs.texi(,4853) @end example cvs.texi(,4854) cvs.texi(,4855) When you add a file it is added only on the branch cvs.texi(,4856) which you are working on (@pxref{Branching and merging}). You can cvs.texi(,4857) later merge the additions to another branch if you want cvs.texi(,4858) (@pxref{Merging adds and removals}). cvs.texi(,4859) @c Should we mention that earlier versions of CVS cvs.texi(,4860) @c lacked this feature (1.3) or implemented it in a buggy cvs.texi(,4861) @c way (well, 1.8 had many bugs in cvs update -j)? cvs.texi(,4862) @c Should we mention the bug/limitation regarding a cvs.texi(,4863) @c file being a regular file on one branch and a directory cvs.texi(,4864) @c on another? cvs.texi(,4865) @c FIXME: This needs an example, or several, here or cvs.texi(,4866) @c elsewhere, for it to make much sense. cvs.texi(,4867) @c Somewhere we need to discuss the aspects of death cvs.texi(,4868) @c support which don't involve branching, I guess. cvs.texi(,4869) @c Like the ability to re-create a release from a tag. cvs.texi(,4870) cvs.texi(,4871) @c --------------------------------------------------------------------- cvs.texi(,4872) @node Removing files cvs.texi(,4873) @section Removing files cvs.texi(,4874) @cindex Removing files cvs.texi(,4875) @cindex Deleting files cvs.texi(,4876) cvs.texi(,4877) @c FIXME: this node wants to be split into several cvs.texi(,4878) @c smaller nodes. Could make these children of cvs.texi(,4879) @c "Adding and removing", probably (death support could cvs.texi(,4880) @c be its own section, for example, as could the cvs.texi(,4881) @c various bits about undoing mistakes in adding and cvs.texi(,4882) @c removing). cvs.texi(,4883) Directories change. New files are added, and old files cvs.texi(,4884) disappear. Still, you want to be able to retrieve an cvs.texi(,4885) exact copy of old releases. cvs.texi(,4886) cvs.texi(,4887) Here is what you can do to remove a file, cvs.texi(,4888) but remain able to retrieve old revisions: cvs.texi(,4889) cvs.texi(,4890) @itemize @bullet cvs.texi(,4891) @c FIXME: should probably be saying something about cvs.texi(,4892) @c having a working directory in the first place. cvs.texi(,4893) @item cvs.texi(,4894) Make sure that you have not made any uncommitted cvs.texi(,4895) modifications to the file. @xref{Viewing differences}, cvs.texi(,4896) for one way to do that. You can also use the cvs.texi(,4897) @code{status} or @code{update} command. If you remove cvs.texi(,4898) the file without committing your changes, you will of cvs.texi(,4899) course not be able to retrieve the file as it was cvs.texi(,4900) immediately before you deleted it. cvs.texi(,4901) cvs.texi(,4902) @item cvs.texi(,4903) Remove the file from your working copy of the directory. cvs.texi(,4904) You can for instance use @code{rm}. cvs.texi(,4905) cvs.texi(,4906) @item cvs.texi(,4907) Use @samp{cvs remove @var{filename}} to tell @sc{cvs} that cvs.texi(,4908) you really want to delete the file. cvs.texi(,4909) cvs.texi(,4910) @item cvs.texi(,4911) Use @samp{cvs commit @var{filename}} to actually cvs.texi(,4912) perform the removal of the file from the repository. cvs.texi(,4913) @end itemize cvs.texi(,4914) cvs.texi(,4915) @c FIXME: Somehow this should be linked in with a more cvs.texi(,4916) @c general discussion of death support. I don't know cvs.texi(,4917) @c whether we want to use the term "death support" or cvs.texi(,4918) @c not (we can perhaps get by without it), but we do cvs.texi(,4919) @c need to discuss the "dead" state in "cvs log" and cvs.texi(,4920) @c related subjects. The current discussion is cvs.texi(,4921) @c scattered around, and not xref'd to each other. cvs.texi(,4922) @c FIXME: I think this paragraph wants to be moved cvs.texi(,4923) @c later down, at least after the first example. cvs.texi(,4924) When you commit the removal of the file, @sc{cvs} cvs.texi(,4925) records the fact that the file no longer exists. It is cvs.texi(,4926) possible for a file to exist on only some branches and cvs.texi(,4927) not on others, or to re-add another file with the same cvs.texi(,4928) name later. @sc{cvs} will correctly create or not create cvs.texi(,4929) the file, based on the @samp{-r} and @samp{-D} options cvs.texi(,4930) specified to @code{checkout} or @code{update}. cvs.texi(,4931) cvs.texi(,4932) @c FIXME: This style seems to clash with how we cvs.texi(,4933) @c document things in general. cvs.texi(,4934) @cindex Remove (subcommand) cvs.texi(,4935) @deffn Command {cvs remove} [options] files @dots{} cvs.texi(,4936) cvs.texi(,4937) Schedule file(s) to be removed from the repository cvs.texi(,4938) (files which have not already been removed from the cvs.texi(,4939) working directory are not processed). This command cvs.texi(,4940) does not actually remove the file from the repository cvs.texi(,4941) until you commit the removal. For a full list of cvs.texi(,4942) options, see @ref{Invoking CVS}. cvs.texi(,4943) @end deffn cvs.texi(,4944) cvs.texi(,4945) Here is an example of removing several files: cvs.texi(,4946) cvs.texi(,4947) @example cvs.texi(,4948) $ cd test cvs.texi(,4949) $ rm *.c cvs.texi(,4950) $ cvs remove cvs.texi(,4951) cvs remove: Removing . cvs.texi(,4952) cvs remove: scheduling a.c for removal cvs.texi(,4953) cvs remove: scheduling b.c for removal cvs.texi(,4954) cvs remove: use 'cvs commit' to remove these files permanently cvs.texi(,4955) $ cvs ci -m "Removed unneeded files" cvs.texi(,4956) cvs commit: Examining . cvs.texi(,4957) cvs commit: Committing . cvs.texi(,4958) @end example cvs.texi(,4959) cvs.texi(,4960) As a convenience you can remove the file and @code{cvs cvs.texi(,4961) remove} it in one step, by specifying the @samp{-f} cvs.texi(,4962) option. For example, the above example could also be cvs.texi(,4963) done like this: cvs.texi(,4964) cvs.texi(,4965) @example cvs.texi(,4966) $ cd test cvs.texi(,4967) $ cvs remove -f *.c cvs.texi(,4968) cvs remove: scheduling a.c for removal cvs.texi(,4969) cvs remove: scheduling b.c for removal cvs.texi(,4970) cvs remove: use 'cvs commit' to remove these files permanently cvs.texi(,4971) $ cvs ci -m "Removed unneeded files" cvs.texi(,4972) cvs commit: Examining . cvs.texi(,4973) cvs commit: Committing . cvs.texi(,4974) @end example cvs.texi(,4975) cvs.texi(,4976) If you execute @code{remove} for a file, and then cvs.texi(,4977) change your mind before you commit, you can undo the cvs.texi(,4978) @code{remove} with an @code{add} command. cvs.texi(,4989) cvs.texi(,4990) @c FIXME: what if you change your mind after you commit cvs.texi(,4991) @c it? (answer is also "cvs add" but we don't say that...). cvs.texi(,4992) @c We need some index entries for thinks like "undoing cvs.texi(,4993) @c removal" too. cvs.texi(,4994) cvs.texi(,4995) @example cvs.texi(,4996) $ ls cvs.texi(,4997) CVS ja.h oj.c cvs.texi(,4998) $ rm oj.c cvs.texi(,4999) $ cvs remove oj.c cvs.texi(,5000) cvs remove: scheduling oj.c for removal cvs.texi(,5001) cvs remove: use 'cvs commit' to remove this file permanently cvs.texi(,5002) $ cvs add oj.c cvs.texi(,5003) U oj.c cvs.texi(,5004) cvs add: oj.c, version 1.1.1.1, resurrected cvs.texi(,5005) @end example cvs.texi(,5006) cvs.texi(,5007) If you realize your mistake before you run the cvs.texi(,5008) @code{remove} command you can use @code{update} to cvs.texi(,5009) resurrect the file: cvs.texi(,5010) cvs.texi(,5011) @example cvs.texi(,5012) $ rm oj.c cvs.texi(,5013) $ cvs update oj.c cvs.texi(,5014) cvs update: warning: oj.c was lost cvs.texi(,5015) U oj.c cvs.texi(,5016) @end example cvs.texi(,5017) cvs.texi(,5018) When you remove a file it is removed only on the branch cvs.texi(,5019) which you are working on (@pxref{Branching and merging}). You can cvs.texi(,5020) later merge the removals to another branch if you want cvs.texi(,5021) (@pxref{Merging adds and removals}). cvs.texi(,5022) cvs.texi(,5023) @node Removing directories cvs.texi(,5024) @section Removing directories cvs.texi(,5025) @cindex Removing directories cvs.texi(,5026) @cindex Directories, removing cvs.texi(,5027) cvs.texi(,5028) In concept removing directories is somewhat similar to cvs.texi(,5029) removing files---you want the directory to not exist in cvs.texi(,5030) your current working directories, but you also want to cvs.texi(,5031) be able to retrieve old releases in which the directory cvs.texi(,5032) existed. cvs.texi(,5033) cvs.texi(,5034) The way that you remove a directory is to remove all cvs.texi(,5035) the files in it. You don't remove the directory cvs.texi(,5036) itself; there is no way to do that. cvs.texi(,5037) Instead you specify the @samp{-P} option to cvs.texi(,5038) @code{cvs update} or @code{cvs checkout}, cvs.texi(,5039) which will cause @sc{cvs} to remove empty cvs.texi(,5040) directories from working directories. cvs.texi(,5041) (Note that @code{cvs export} always removes empty directories.) cvs.texi(,5042) Probably the cvs.texi(,5043) best way to do this is to always specify @samp{-P}; if cvs.texi(,5044) you want an empty directory then put a dummy file (for cvs.texi(,5045) example @file{.keepme}) in it to prevent @samp{-P} from cvs.texi(,5046) removing it. cvs.texi(,5047) cvs.texi(,5048) @c I'd try to give a rationale for this, but I'm not cvs.texi(,5049) @c sure there is a particularly convincing one. What cvs.texi(,5050) @c we would _like_ is for CVS to do a better job of version cvs.texi(,5051) @c controlling whether directories exist, to eliminate the cvs.texi(,5052) @c need for -P and so that a file can be a directory in cvs.texi(,5053) @c one revision and a regular file in another. cvs.texi(,5054) Note that @samp{-P} is implied by the @samp{-r} or @samp{-D} cvs.texi(,5055) options of @code{checkout}. This way cvs.texi(,5056) @sc{cvs} will be able to correctly create the directory cvs.texi(,5057) or not depending on whether the particular version you cvs.texi(,5058) are checking out contains any files in that directory. cvs.texi(,5059) cvs.texi(,5060) @c --------------------------------------------------------------------- cvs.texi(,5061) @node Moving files cvs.texi(,5062) @section Moving and renaming files cvs.texi(,5063) @cindex Moving files cvs.texi(,5064) @cindex Renaming files cvs.texi(,5065) @cindex Files, moving cvs.texi(,5066) cvs.texi(,5067) Moving files to a different directory or renaming them cvs.texi(,5068) is not difficult, but some of the ways in which this cvs.texi(,5069) works may be non-obvious. (Moving or renaming a cvs.texi(,5070) directory is even harder. @xref{Moving directories}.). cvs.texi(,5071) cvs.texi(,5072) The examples below assume that the file @var{old} is renamed to cvs.texi(,5073) @var{new}. cvs.texi(,5074) cvs.texi(,5075) @menu cvs.texi(,5076) * Outside:: The normal way to Rename cvs.texi(,5077) * Inside:: A tricky, alternative way cvs.texi(,5078) * Rename by copying:: Another tricky, alternative way cvs.texi(,5079) @end menu cvs.texi(,5080) cvs.texi(,5081) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,5082) @node Outside cvs.texi(,5083) @subsection The Normal way to Rename cvs.texi(,5084) cvs.texi(,5085) @c More rename issues. Not sure whether these are cvs.texi(,5086) @c worth documenting; I'm putting them here because cvs.texi(,5087) @c it seems to be as good a place as any to try to cvs.texi(,5088) @c set down the issues. cvs.texi(,5089) @c * "cvs annotate" will annotate either the new cvs.texi(,5090) @c file or the old file; it cannot annotate _each cvs.texi(,5091) @c line_ based on whether it was last changed in the cvs.texi(,5092) @c new or old file. Unlike "cvs log", where the cvs.texi(,5093) @c consequences of having to select either the new cvs.texi(,5094) @c or old name seem fairly benign, this may be a cvs.texi(,5095) @c real advantage to having CVS know about renames cvs.texi(,5096) @c other than as a deletion and an addition. cvs.texi(,5097) cvs.texi(,5098) The normal way to move a file is to copy @var{old} to cvs.texi(,5099) @var{new}, and then issue the normal @sc{cvs} commands cvs.texi(,5100) to remove @var{old} from the repository, and add cvs.texi(,5101) @var{new} to it. cvs.texi(,5102) @c The following sentence is not true: one must cd into cvs.texi(,5103) @c the directory to run "cvs add". cvs.texi(,5104) @c (Both @var{old} and @var{new} could cvs.texi(,5105) @c contain relative paths, for example @file{foo/bar.c}). cvs.texi(,5106) cvs.texi(,5107) @example cvs.texi(,5108) $ mv @var{old} @var{new} cvs.texi(,5109) $ cvs remove @var{old} cvs.texi(,5110) $ cvs add @var{new} cvs.texi(,5111) $ cvs commit -m "Renamed @var{old} to @var{new}" @var{old} @var{new} cvs.texi(,5112) @end example cvs.texi(,5113) cvs.texi(,5114) This is the simplest way to move a file, it is not cvs.texi(,5115) error-prone, and it preserves the history of what was cvs.texi(,5116) done. Note that to access the history of the file you cvs.texi(,5117) must specify the old or the new name, depending on what cvs.texi(,5118) portion of the history you are accessing. For example, cvs.texi(,5119) @code{cvs log @var{old}} will give the log up until the cvs.texi(,5120) time of the rename. cvs.texi(,5121) cvs.texi(,5122) When @var{new} is committed its revision numbers will cvs.texi(,5123) start again, usually at 1.1, so if that bothers you, cvs.texi(,5124) use the @samp{-r rev} option to commit. For more cvs.texi(,5125) information see @ref{Assigning revisions}. cvs.texi(,5126) cvs.texi(,5127) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,5128) @node Inside cvs.texi(,5129) @subsection Moving the history file cvs.texi(,5130) cvs.texi(,5131) This method is more dangerous, since it involves moving cvs.texi(,5132) files inside the repository. Read this entire section cvs.texi(,5133) before trying it out! cvs.texi(,5134) cvs.texi(,5135) @example cvs.texi(,5136) $ cd $CVSROOT/@var{dir} cvs.texi(,5137) $ mv @var{old},v @var{new},v cvs.texi(,5138) @end example cvs.texi(,5139) cvs.texi(,5140) @noindent cvs.texi(,5141) Advantages: cvs.texi(,5142) cvs.texi(,5143) @itemize @bullet cvs.texi(,5144) @item cvs.texi(,5145) The log of changes is maintained intact. cvs.texi(,5146) cvs.texi(,5147) @item cvs.texi(,5148) The revision numbers are not affected. cvs.texi(,5149) @end itemize cvs.texi(,5150) cvs.texi(,5151) @noindent cvs.texi(,5152) Disadvantages: cvs.texi(,5153) cvs.texi(,5154) @itemize @bullet cvs.texi(,5155) @item cvs.texi(,5156) Old releases cannot easily be fetched from the cvs.texi(,5157) repository. (The file will show up as @var{new} even cvs.texi(,5158) in revisions from the time before it was renamed). cvs.texi(,5159) cvs.texi(,5160) @item cvs.texi(,5161) There is no log information of when the file was renamed. cvs.texi(,5162) cvs.texi(,5163) @item cvs.texi(,5164) Nasty things might happen if someone accesses the history file cvs.texi(,5165) while you are moving it. Make sure no one else runs any of the @sc{cvs} cvs.texi(,5166) commands while you move it. cvs.texi(,5167) @end itemize cvs.texi(,5168) cvs.texi(,5169) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,5170) @node Rename by copying cvs.texi(,5171) @subsection Copying the history file cvs.texi(,5172) cvs.texi(,5173) This way also involves direct modifications to the cvs.texi(,5174) repository. It is safe, but not without drawbacks. cvs.texi(,5175) cvs.texi(,5176) @example cvs.texi(,5177) # @r{Copy the @sc{rcs} file inside the repository} cvs.texi(,5178) $ cd $CVSROOT/@var{dir} cvs.texi(,5179) $ cp @var{old},v @var{new},v cvs.texi(,5180) # @r{Remove the old file} cvs.texi(,5181) $ cd ~/@var{dir} cvs.texi(,5182) $ rm @var{old} cvs.texi(,5183) $ cvs remove @var{old} cvs.texi(,5184) $ cvs commit @var{old} cvs.texi(,5185) # @r{Remove all tags from @var{new}} cvs.texi(,5186) $ cvs update @var{new} cvs.texi(,5187) $ cvs log @var{new} # @r{Remember the non-branch tag names} cvs.texi(,5188) $ cvs tag -d @var{tag1} @var{new} cvs.texi(,5189) $ cvs tag -d @var{tag2} @var{new} cvs.texi(,5190) @dots{} cvs.texi(,5191) @end example cvs.texi(,5192) cvs.texi(,5193) By removing the tags you will be able to check out old cvs.texi(,5194) revisions. cvs.texi(,5195) cvs.texi(,5196) @noindent cvs.texi(,5197) Advantages: cvs.texi(,5198) cvs.texi(,5199) @itemize @bullet cvs.texi(,5200) @item cvs.texi(,5201) @c FIXME: Is this true about -D now that we have death cvs.texi(,5202) @c support? See 5B.3 in the FAQ. cvs.texi(,5203) Checking out old revisions works correctly, as long as cvs.texi(,5204) you use @samp{-r@var{tag}} and not @samp{-D@var{date}} cvs.texi(,5205) to retrieve the revisions. cvs.texi(,5206) cvs.texi(,5207) @item cvs.texi(,5208) The log of changes is maintained intact. cvs.texi(,5209) cvs.texi(,5210) @item cvs.texi(,5211) The revision numbers are not affected. cvs.texi(,5212) @end itemize cvs.texi(,5213) cvs.texi(,5214) @noindent cvs.texi(,5215) Disadvantages: cvs.texi(,5216) cvs.texi(,5217) @itemize @bullet cvs.texi(,5218) @item cvs.texi(,5219) You cannot easily see the history of the file across the rename. cvs.texi(,5220) cvs.texi(,5233) @end itemize cvs.texi(,5234) cvs.texi(,5235) @c --------------------------------------------------------------------- cvs.texi(,5236) @node Moving directories cvs.texi(,5237) @section Moving and renaming directories cvs.texi(,5238) @cindex Moving directories cvs.texi(,5239) @cindex Renaming directories cvs.texi(,5240) @cindex Directories, moving cvs.texi(,5241) cvs.texi(,5242) The normal way to rename or move a directory is to cvs.texi(,5243) rename or move each file within it as described in cvs.texi(,5244) @ref{Outside}. Then check out with the @samp{-P} cvs.texi(,5245) option, as described in @ref{Removing directories}. cvs.texi(,5246) cvs.texi(,5247) If you really want to hack the repository to rename or cvs.texi(,5248) delete a directory in the repository, you can do it cvs.texi(,5249) like this: cvs.texi(,5250) cvs.texi(,5251) @enumerate cvs.texi(,5252) @item cvs.texi(,5253) Inform everyone who has a checked out copy of the directory that the cvs.texi(,5254) directory will be renamed. They should commit all cvs.texi(,5255) their changes, and remove their working copies, cvs.texi(,5256) before you take the steps below. cvs.texi(,5257) cvs.texi(,5258) @item cvs.texi(,5259) Rename the directory inside the repository. cvs.texi(,5260) cvs.texi(,5261) @example cvs.texi(,5262) $ cd $CVSROOT/@var{parent-dir} cvs.texi(,5263) $ mv @var{old-dir} @var{new-dir} cvs.texi(,5264) @end example cvs.texi(,5265) cvs.texi(,5266) @item cvs.texi(,5267) Fix the @sc{cvs} administrative files, if necessary (for cvs.texi(,5268) instance if you renamed an entire module). cvs.texi(,5269) cvs.texi(,5270) @item cvs.texi(,5271) Tell everyone that they can check out again and continue cvs.texi(,5272) working. cvs.texi(,5273) cvs.texi(,5274) @end enumerate cvs.texi(,5275) cvs.texi(,5276) If someone had a working copy the @sc{cvs} commands will cvs.texi(,5277) cease to work for him, until he removes the directory cvs.texi(,5278) that disappeared inside the repository. cvs.texi(,5279) cvs.texi(,5280) It is almost always better to move the files in the cvs.texi(,5281) directory instead of moving the directory. If you move the cvs.texi(,5282) directory you are unlikely to be able to retrieve old cvs.texi(,5283) releases correctly, since they probably depend on the cvs.texi(,5284) name of the directories. cvs.texi(,5285) cvs.texi(,5286) @c --------------------------------------------------------------------- cvs.texi(,5287) @node History browsing cvs.texi(,5288) @chapter History browsing cvs.texi(,5289) @cindex History browsing cvs.texi(,5290) @cindex Traceability cvs.texi(,5291) @cindex Isolation cvs.texi(,5292) cvs.texi(,5344) cvs.texi(,5345) @c kind of lame, in a lot of ways the above text inside cvs.texi(,5346) @c the @ignore motivates this chapter better cvs.texi(,5347) Once you have used @sc{cvs} to store a version control cvs.texi(,5348) history---what files have changed when, how, and by cvs.texi(,5349) whom, there are a variety of mechanisms for looking cvs.texi(,5350) through the history. cvs.texi(,5351) cvs.texi(,5352) @c FIXME: should also be talking about how you look at cvs.texi(,5353) @c old revisions (e.g. "cvs update -p -r 1.2 foo.c"). cvs.texi(,5354) @menu cvs.texi(,5355) * log messages:: Log messages cvs.texi(,5356) * history database:: The history database cvs.texi(,5357) * user-defined logging:: User-defined logging cvs.texi(,5358) * annotate:: What revision modified each line of a file? cvs.texi(,5359) @end menu cvs.texi(,5360) cvs.texi(,5361) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,5362) @node log messages cvs.texi(,5363) @section Log messages cvs.texi(,5364) cvs.texi(,5365) @c FIXME: @xref to place where we talk about how to cvs.texi(,5366) @c specify message to commit. cvs.texi(,5367) Whenever you commit a file you specify a log message. cvs.texi(,5368) cvs.texi(,5369) @c FIXME: bring the information here, and get rid of or cvs.texi(,5370) @c greatly shrink the "log" node. cvs.texi(,5371) To look through the log messages which have been cvs.texi(,5372) specified for every revision which has been committed, cvs.texi(,5373) use the @code{cvs log} command (@pxref{log}). cvs.texi(,5374) cvs.texi(,5375) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,5376) @node history database cvs.texi(,5377) @section The history database cvs.texi(,5378) cvs.texi(,5379) @c FIXME: bring the information from the history file cvs.texi(,5380) @c and history nodes here. Rewrite it to be motivated cvs.texi(,5381) @c better (start out by clearly explaining what gets cvs.texi(,5382) @c logged in history, for example). cvs.texi(,5383) You can use the history file (@pxref{history file}) to cvs.texi(,5384) log various @sc{cvs} actions. To retrieve the cvs.texi(,5385) information from the history file, use the @code{cvs cvs.texi(,5386) history} command (@pxref{history}). cvs.texi(,5387) cvs.texi(,5388) Note: you can control what is logged to this file by using the cvs.texi(,5389) @samp{LogHistory} keyword in the @file{CVSROOT/config} file cvs.texi(,5390) (@pxref{config}). cvs.texi(,5391) cvs.texi(,5392) @c cvs.texi(,5393) @c The history database has many problems: cvs.texi(,5394) @c * It is very unclear what field means what. This cvs.texi(,5395) @c could be improved greatly by better documentation, cvs.texi(,5396) @c but there are still non-orthogonalities (for cvs.texi(,5397) @c example, tag does not record the "repository" cvs.texi(,5398) @c field but most records do). cvs.texi(,5399) @c * Confusion about files, directories, and modules. cvs.texi(,5400) @c Some commands record one, some record others. cvs.texi(,5401) @c * File removal is not logged. There is an 'R' cvs.texi(,5402) @c record type documented, but CVS never uses it. cvs.texi(,5403) @c * Tags are only logged for the "cvs rtag" command, cvs.texi(,5404) @c not "cvs tag". The fix for this is not completely cvs.texi(,5405) @c clear (see above about modules vs. files). cvs.texi(,5406) @c * Are there other cases of operations that are not cvs.texi(,5407) @c logged? One would hope for all changes to the cvs.texi(,5408) @c repository to be logged somehow (particularly cvs.texi(,5409) @c operations like tagging, "cvs admin -k", and other cvs.texi(,5410) @c operations which do not record a history that one cvs.texi(,5411) @c can get with "cvs log"). Operations on the working cvs.texi(,5412) @c directory, like export, get, and release, are a cvs.texi(,5413) @c second category also covered by the current "cvs cvs.texi(,5414) @c history". cvs.texi(,5415) @c * The history file does not record the options given cvs.texi(,5416) @c to a command. The most serious manifestation of cvs.texi(,5417) @c this is perhaps that it doesn't record whether a command cvs.texi(,5418) @c was recursive. It is not clear to me whether one cvs.texi(,5419) @c wants to log at a level very close to the command cvs.texi(,5420) @c line, as a sort of way of logging each command cvs.texi(,5421) @c (more or less), or whether one wants cvs.texi(,5422) @c to log more at the level of what was changed (or cvs.texi(,5423) @c something in between), but either way the current cvs.texi(,5424) @c information has pretty big gaps. cvs.texi(,5425) @c * Further details about a tag--like whether it is a cvs.texi(,5426) @c branch tag or, if a non-branch tag, which branch it cvs.texi(,5427) @c is on. One can find out this information about the cvs.texi(,5428) @c tag as it exists _now_, but if the tag has been cvs.texi(,5429) @c moved, one doesn't know what it was like at the time cvs.texi(,5430) @c the history record was written. cvs.texi(,5431) @c * Whether operating on a particular tag, date, or cvs.texi(,5432) @c options was implicit (sticky) or explicit. cvs.texi(,5433) @c cvs.texi(,5434) @c Another item, only somewhat related to the above, is a cvs.texi(,5435) @c way to control what is logged in the history file. cvs.texi(,5436) @c This is probably the only good way to handle cvs.texi(,5437) @c different people having different ideas about cvs.texi(,5438) @c information/space tradeoffs. cvs.texi(,5439) @c cvs.texi(,5440) @c It isn't really clear that it makes sense to try to cvs.texi(,5441) @c patch up the history file format as it exists now to cvs.texi(,5442) @c include all that stuff. It might be better to cvs.texi(,5443) @c design a whole new CVSROOT/nhistory file and "cvs cvs.texi(,5444) @c nhistory" command, or some such, or in some other cvs.texi(,5445) @c way trying to come up with a clean break from the cvs.texi(,5446) @c past, which can address the above concerns. Another cvs.texi(,5447) @c open question is how/whether this relates to cvs.texi(,5448) @c taginfo/loginfo/etc. cvs.texi(,5449) cvs.texi(,5450) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,5451) @node user-defined logging cvs.texi(,5452) @section User-defined logging cvs.texi(,5453) cvs.texi(,5454) @c FIXME: should probably also mention the fact the -l cvs.texi(,5455) @c global option can disable most of the mechanisms cvs.texi(,5456) @c discussed here (why? What is the -l global option for?). cvs.texi(,5457) @c cvs.texi(,5458) @c FIXME: probably should centralize this information cvs.texi(,5459) @c here, at least to some extent. Maybe by moving the cvs.texi(,5460) @c loginfo, etc., nodes here and replacing cvs.texi(,5461) @c the "user-defined logging" node with one node for cvs.texi(,5462) @c each method. cvs.texi(,5463) You can customize @sc{cvs} to log various kinds of cvs.texi(,5464) actions, in whatever manner you choose. These cvs.texi(,5465) mechanisms operate by executing a script at various cvs.texi(,5466) times. The script might append a message to a file cvs.texi(,5467) listing the information and the programmer who created cvs.texi(,5468) it, or send mail to a group of developers, or, perhaps, cvs.texi(,5469) post a message to a particular newsgroup. To log cvs.texi(,5470) commits, use the @file{loginfo} file (@pxref{loginfo}). cvs.texi(,5471) @c FIXME: What is difference between doing it in the cvs.texi(,5472) @c modules file and using loginfo/taginfo? Why should cvs.texi(,5473) @c user use one or the other? cvs.texi(,5474) To log commits, checkouts, exports, and tags, cvs.texi(,5475) respectively, you can also use the @samp{-i}, cvs.texi(,5476) @samp{-o}, @samp{-e}, and @samp{-t} options in the cvs.texi(,5477) modules file. For a more flexible way of giving cvs.texi(,5478) notifications to various users, which requires less in cvs.texi(,5479) the way of keeping centralized scripts up to date, use cvs.texi(,5480) the @code{cvs watch add} command (@pxref{Getting cvs.texi(,5481) Notified}); this command is useful even if you are not cvs.texi(,5482) using @code{cvs watch on}. cvs.texi(,5483) cvs.texi(,5484) @cindex taginfo cvs.texi(,5485) @cindex Exit status, of taginfo cvs.texi(,5486) The @file{taginfo} file defines programs to execute cvs.texi(,5487) when someone executes a @code{tag} or @code{rtag} cvs.texi(,5488) command. The @file{taginfo} file has the standard form cvs.texi(,5489) for administrative files (@pxref{Administrative cvs.texi(,5490) files}), where each line is a regular expression cvs.texi(,5491) followed by a command to execute. The arguments passed cvs.texi(,5492) to the command are, in order, the @var{tagname}, cvs.texi(,5493) @var{operation} (@code{add} for @code{tag}, cvs.texi(,5494) @code{mov} for @code{tag -F}, and @code{del} for cvs.texi(,5495) @code{tag -d}), @var{repository}, and any remaining are cvs.texi(,5496) pairs of @var{filename} @var{revision}. A non-zero cvs.texi(,5497) exit of the filter program will cause the tag to be cvs.texi(,5498) aborted. cvs.texi(,5499) cvs.texi(,5500) Here is an example of using taginfo to log tag and rtag cvs.texi(,5501) commands. In the taginfo file put: cvs.texi(,5502) cvs.texi(,5503) @example cvs.texi(,5504) ALL /usr/local/cvsroot/CVSROOT/loggit cvs.texi(,5505) @end example cvs.texi(,5506) cvs.texi(,5507) @noindent cvs.texi(,5508) Where @file{/usr/local/cvsroot/CVSROOT/loggit} contains the cvs.texi(,5509) following script: cvs.texi(,5510) cvs.texi(,5511) @example cvs.texi(,5512) #!/bin/sh cvs.texi(,5513) echo "$@@" >>/home/kingdon/cvsroot/CVSROOT/taglog cvs.texi(,5514) @end example cvs.texi(,5515) cvs.texi(,5516) @node annotate cvs.texi(,5517) @section Annotate command cvs.texi(,5518) @cindex annotate (subcommand) cvs.texi(,5519) cvs.texi(,5520) @deffn Command {cvs annotate} [@code{-FflR}] [@code{-r rev}|@code{-D date}] files @dots{} cvs.texi(,5521) cvs.texi(,5522) For each file in @var{files}, print the head revision cvs.texi(,5523) of the trunk, together with information on the last cvs.texi(,5524) modification for each line. For example: cvs.texi(,5525) cvs.texi(,5526) @example cvs.texi(,5527) $ cvs annotate ssfile cvs.texi(,5528) Annotations for ssfile cvs.texi(,5529) *************** cvs.texi(,5530) 1.1 (mary 27-Mar-96): ssfile line 1 cvs.texi(,5531) 1.2 (joe 28-Mar-96): ssfile line 2 cvs.texi(,5532) @end example cvs.texi(,5533) cvs.texi(,5534) The file @file{ssfile} currently contains two lines. cvs.texi(,5535) The @code{ssfile line 1} line was checked in by cvs.texi(,5536) @code{mary} on March 27. Then, on March 28, @code{joe} cvs.texi(,5537) added a line @code{ssfile line 2}, without modifying cvs.texi(,5538) the @code{ssfile line 1} line. This report doesn't cvs.texi(,5539) tell you anything about lines which have been deleted cvs.texi(,5540) or replaced; you need to use @code{cvs diff} for that cvs.texi(,5541) (@pxref{diff}). cvs.texi(,5542) cvs.texi(,5543) @end deffn cvs.texi(,5544) cvs.texi(,5545) The options to @code{cvs annotate} are listed in cvs.texi(,5546) @ref{Invoking CVS}, and can be used to select the files cvs.texi(,5547) and revisions to annotate. The options are described cvs.texi(,5548) in more detail there and in @ref{Common options}. cvs.texi(,5549) cvs.texi(,5550) @c FIXME: maybe an example using the options? Just cvs.texi(,5551) @c what it means to select a revision might be worth a cvs.texi(,5552) @c few words of explanation ("you want to see who cvs.texi(,5553) @c changed this line *before* 1.4"...). cvs.texi(,5554) cvs.texi(,5555) @c --------------------------------------------------------------------- cvs.texi(,5556) @node Binary files cvs.texi(,5557) @chapter Handling binary files cvs.texi(,5558) @cindex Binary files cvs.texi(,5559) cvs.texi(,5560) The most common use for @sc{cvs} is to store text cvs.texi(,5561) files. With text files, @sc{cvs} can merge revisions, cvs.texi(,5562) display the differences between revisions in a cvs.texi(,5563) human-visible fashion, and other such operations. cvs.texi(,5564) However, if you are willing to give up a few of these cvs.texi(,5565) abilities, @sc{cvs} can store binary files. For cvs.texi(,5566) example, one might store a web site in @sc{cvs} cvs.texi(,5567) including both text files and binary images. cvs.texi(,5568) cvs.texi(,5569) @menu cvs.texi(,5570) * Binary why:: More details on issues with binary files cvs.texi(,5571) * Binary howto:: How to store them cvs.texi(,5572) @end menu cvs.texi(,5573) cvs.texi(,5574) @node Binary why cvs.texi(,5575) @section The issues with binary files cvs.texi(,5576) cvs.texi(,5577) While the need to manage binary files may seem obvious cvs.texi(,5578) if the files that you customarily work with are binary, cvs.texi(,5579) putting them into version control does present some cvs.texi(,5580) additional issues. cvs.texi(,5581) cvs.texi(,5582) One basic function of version control is to show the cvs.texi(,5583) differences between two revisions. For example, if cvs.texi(,5584) someone else checked in a new version of a file, you cvs.texi(,5585) may wish to look at what they changed and determine cvs.texi(,5586) whether their changes are good. For text files, cvs.texi(,5587) @sc{cvs} provides this functionality via the @code{cvs cvs.texi(,5588) diff} command. For binary files, it may be possible to cvs.texi(,5589) extract the two revisions and then compare them with a cvs.texi(,5590) tool external to @sc{cvs} (for example, word processing cvs.texi(,5591) software often has such a feature). If there is no cvs.texi(,5592) such tool, one must track changes via other mechanisms, cvs.texi(,5593) such as urging people to write good log messages, and cvs.texi(,5594) hoping that the changes they actually made were the cvs.texi(,5595) changes that they intended to make. cvs.texi(,5596) cvs.texi(,5597) Another ability of a version control system is the cvs.texi(,5598) ability to merge two revisions. For @sc{cvs} this cvs.texi(,5599) happens in two contexts. The first is when users make cvs.texi(,5600) changes in separate working directories cvs.texi(,5601) (@pxref{Multiple developers}). The second is when one cvs.texi(,5602) merges explicitly with the @samp{update -j} command cvs.texi(,5603) (@pxref{Branching and merging}). cvs.texi(,5604) cvs.texi(,5605) In the case of text cvs.texi(,5606) files, @sc{cvs} can merge changes made independently, cvs.texi(,5607) and signal a conflict if the changes conflict. With cvs.texi(,5608) binary files, the best that @sc{cvs} can do is present cvs.texi(,5609) the two different copies of the file, and leave it to cvs.texi(,5610) the user to resolve the conflict. The user may choose cvs.texi(,5611) one copy or the other, or may run an external merge cvs.texi(,5612) tool which knows about that particular file format, if cvs.texi(,5613) one exists. cvs.texi(,5614) Note that having the user merge relies primarily on the cvs.texi(,5615) user to not accidentally omit some changes, and thus is cvs.texi(,5616) potentially error prone. cvs.texi(,5617) cvs.texi(,5618) If this process is thought to be undesirable, the best cvs.texi(,5619) choice may be to avoid merging. To avoid the merges cvs.texi(,5620) that result from separate working directories, see the cvs.texi(,5621) discussion of reserved checkouts (file locking) in cvs.texi(,5622) @ref{Multiple developers}. To avoid the merges cvs.texi(,5623) resulting from branches, restrict use of branches. cvs.texi(,5624) cvs.texi(,5625) @node Binary howto cvs.texi(,5626) @section How to store binary files cvs.texi(,5627) cvs.texi(,5628) There are two issues with using @sc{cvs} to store cvs.texi(,5629) binary files. The first is that @sc{cvs} by default cvs.texi(,5630) converts line endings between the canonical form in cvs.texi(,5631) which they are stored in the repository (linefeed cvs.texi(,5632) only), and the form appropriate to the operating system cvs.texi(,5633) in use on the client (for example, carriage return cvs.texi(,5634) followed by line feed for Windows NT). cvs.texi(,5635) cvs.texi(,5636) The second is that a binary file might happen to cvs.texi(,5637) contain data which looks like a keyword (@pxref{Keyword cvs.texi(,5638) substitution}), so keyword expansion must be turned cvs.texi(,5639) off. cvs.texi(,5640) cvs.texi(,5641) @c FIXME: the third is that one can't do merges with cvs.texi(,5642) @c binary files. xref to Multiple Developers and the cvs.texi(,5643) @c reserved checkout issues. cvs.texi(,5644) cvs.texi(,5645) The @samp{-kb} option available with some @sc{cvs} cvs.texi(,5646) commands insures that neither line ending conversion cvs.texi(,5647) nor keyword expansion will be done. cvs.texi(,5648) cvs.texi(,5649) Here is an example of how you can create a new file cvs.texi(,5650) using the @samp{-kb} flag: cvs.texi(,5651) cvs.texi(,5652) @example cvs.texi(splitrcskeyword,5653) $ echo '$cvs.texi(splitrcskeyword,5653) @i{}Id$' > kotest cvs.texi(,5654) $ cvs add -kb -m"A test file" kotest cvs.texi(,5655) $ cvs ci -m"First checkin; contains a keyword" kotest cvs.texi(,5656) @end example cvs.texi(,5657) cvs.texi(,5658) If a file accidentally gets added without @samp{-kb}, cvs.texi(,5659) one can use the @code{cvs admin} command to recover. cvs.texi(,5660) For example: cvs.texi(,5661) cvs.texi(,5662) @example cvs.texi(splitrcskeyword,5663) $ echo '$cvs.texi(splitrcskeyword,5663) @i{}Id$' > kotest cvs.texi(,5664) $ cvs add -m"A test file" kotest cvs.texi(,5665) $ cvs ci -m"First checkin; contains a keyword" kotest cvs.texi(,5666) $ cvs admin -kb kotest cvs.texi(,5667) $ cvs update -A kotest cvs.texi(,5668) # @r{For non-unix systems:} cvs.texi(,5669) # @r{Copy in a good copy of the file from outside CVS} cvs.texi(,5670) $ cvs commit -m "make it binary" kotest cvs.texi(,5671) @end example cvs.texi(,5672) cvs.texi(,5673) @c Trying to describe this for both unix and non-unix cvs.texi(,5674) @c in the same description is very confusing. Might cvs.texi(,5675) @c want to split the two, or just ditch the unix "shortcut" cvs.texi(,5676) @c (unixheads don't do much with binary files, anyway). cvs.texi(,5677) @c This used to say "(Try the above example, and do a cvs.texi(,5678) @c @code{cat kotest} after every command)". But that cvs.texi(,5679) @c only really makes sense for the unix case. cvs.texi(,5680) When you check in the file @file{kotest} the file is cvs.texi(,5681) not preserved as a binary file, because you did not cvs.texi(,5682) check it in as a binary file. The @code{cvs cvs.texi(,5683) admin -kb} command sets the default keyword cvs.texi(,5684) substitution method for this file, but it does not cvs.texi(,5685) alter the working copy of the file that you have. If you need to cvs.texi(,5686) cope with line endings (that is, you are using cvs.texi(,5687) @sc{cvs} on a non-unix system), then you need to cvs.texi(,5688) check in a new copy of the file, as shown by the cvs.texi(,5689) @code{cvs commit} command above. cvs.texi(,5690) On unix, the @code{cvs update -A} command suffices. cvs.texi(,5691) @c FIXME: should also describe what the *other users* cvs.texi(,5692) @c need to do, if they have checked out copies which cvs.texi(,5693) @c have been corrupted by lack of -kb. I think maybe cvs.texi(,5694) @c "cvs update -kb" or "cvs cvs.texi(,5695) @c update -A" would suffice, although the user who cvs.texi(,5696) @c reported this suggested removing the file, manually cvs.texi(,5697) @c removing it from CVS/Entries, and then "cvs update" cvs.texi(,5698) (Note that you can use @code{cvs log} to determine the default keyword cvs.texi(,5699) substitution method for a file and @code{cvs status} to determine cvs.texi(,5700) the keyword substitution method for a working copy.) cvs.texi(,5701) cvs.texi(,5702) However, in using @code{cvs admin -k} to change the cvs.texi(,5703) keyword expansion, be aware that the keyword expansion cvs.texi(,5704) mode is not version controlled. This means that, for cvs.texi(,5705) example, that if you have a text file in old releases, cvs.texi(,5706) and a binary file with the same name in new releases, cvs.texi(,5707) @sc{cvs} provides no way to check out the file in text cvs.texi(,5708) or binary mode depending on what version you are cvs.texi(,5709) checking out. There is no good workaround for this cvs.texi(,5710) problem. cvs.texi(,5711) cvs.texi(,5712) You can also set a default for whether @code{cvs add} cvs.texi(,5713) and @code{cvs import} treat a file as binary based on cvs.texi(,5714) its name; for example you could say that files who cvs.texi(,5715) names end in @samp{.exe} are binary. @xref{Wrappers}. cvs.texi(,5716) There is currently no way to have @sc{cvs} detect cvs.texi(,5717) whether a file is binary based on its contents. The cvs.texi(,5718) main difficulty with designing such a feature is that cvs.texi(,5719) it is not clear how to distinguish between binary and cvs.texi(,5720) non-binary files, and the rules to apply would vary cvs.texi(,5721) considerably with the operating system. cvs.texi(,5722) @c For example, it would be good on MS-DOS-family OSes cvs.texi(,5723) @c for anything containing ^Z to be binary. Having cvs.texi(,5724) @c characters with the 8th bit set imply binary is almost cvs.texi(,5725) @c surely a bad idea in the context of ISO-8859-* and cvs.texi(,5726) @c other such character sets. On VMS or the Mac, we cvs.texi(,5727) @c could use the OS's file typing. This is a cvs.texi(,5728) @c commonly-desired feature, and something of this sort cvs.texi(,5729) @c may make sense. But there are a lot of pitfalls here. cvs.texi(,5730) @c cvs.texi(,5731) @c Another, probably better, way to tell is to read the cvs.texi(,5732) @c file in text mode, write it to a temp file in text cvs.texi(,5733) @c mode, and then do a binary mode compare of the two cvs.texi(,5734) @c files. If they differ, it is a binary file. This cvs.texi(,5735) @c might have problems on VMS (or some other system cvs.texi(,5736) @c with several different text modes), but in general cvs.texi(,5737) @c should be relatively portable. The only other cvs.texi(,5738) @c downside I can think of is that it would be fairly cvs.texi(,5739) @c slow, but that is perhaps a small price to pay for cvs.texi(,5740) @c not having your files corrupted. Another issue is cvs.texi(,5741) @c what happens if you import a text file with bare cvs.texi(,5742) @c linefeeds on Windows. Such files will show up on cvs.texi(,5743) @c Windows sometimes (I think some native windows cvs.texi(,5744) @c programs even write them, on occasion). Perhaps it cvs.texi(,5745) @c is reasonable to treat such files as binary; after cvs.texi(,5746) @c all it is something of a presumption to assume that cvs.texi(,5747) @c the user would want the linefeeds converted to CRLF. cvs.texi(,5748) cvs.texi(,5749) @c --------------------------------------------------------------------- cvs.texi(,5750) @node Multiple developers cvs.texi(,5751) @chapter Multiple developers cvs.texi(,5752) @cindex Multiple developers cvs.texi(,5753) @cindex Team of developers cvs.texi(,5754) @cindex File locking cvs.texi(,5755) @cindex Locking files cvs.texi(,5756) @cindex Working copy cvs.texi(,5757) @cindex Reserved checkouts cvs.texi(,5758) @cindex Unreserved checkouts cvs.texi(,5759) @cindex RCS-style locking cvs.texi(,5760) cvs.texi(,5761) When more than one person works on a software project cvs.texi(,5762) things often get complicated. Often, two people try to cvs.texi(,5763) edit the same file simultaneously. One solution, known cvs.texi(,5764) as @dfn{file locking} or @dfn{reserved checkouts}, is cvs.texi(,5765) to allow only one person to edit each file at a time. cvs.texi(,5766) This is the only solution with some version control cvs.texi(,5767) systems, including @sc{rcs} and @sc{sccs}. Currently cvs.texi(,5768) the usual way to get reserved checkouts with @sc{cvs} cvs.texi(,5769) is the @code{cvs admin -l} command (@pxref{admin cvs.texi(,5770) options}). This is not as nicely integrated into cvs.texi(,5771) @sc{cvs} as the watch features, described below, but it cvs.texi(,5772) seems that most people with a need for reserved cvs.texi(,5773) checkouts find it adequate. cvs.texi(,5774) @c Or "find it better than worrying about implementing cvs.texi(,5775) @c nicely integrated reserved checkouts" or ...? cvs.texi(,5776) It also may be possible to use the watches cvs.texi(,5777) features described below, together with suitable cvs.texi(,5778) procedures (not enforced by software), to avoid having cvs.texi(,5779) two people edit at the same time. cvs.texi(,5780) cvs.texi(,5781) @c Our unreserved checkout model might not cvs.texi(,5782) @c be quite the same as others. For example, I cvs.texi(,5783) @c think that some systems will tend to create a branch cvs.texi(,5784) @c in the case where CVS prints "up-to-date check failed". cvs.texi(,5785) @c It isn't clear to me whether we should try to cvs.texi(,5786) @c explore these subtleties; it could easily just cvs.texi(,5787) @c confuse people. cvs.texi(,5788) The default model with @sc{cvs} is known as cvs.texi(,5789) @dfn{unreserved checkouts}. In this model, developers cvs.texi(,5790) can edit their own @dfn{working copy} of a file cvs.texi(,5791) simultaneously. The first person that commits his cvs.texi(,5792) changes has no automatic way of knowing that another cvs.texi(,5793) has started to edit it. Others will get an error cvs.texi(,5794) message when they try to commit the file. They must cvs.texi(,5795) then use @sc{cvs} commands to bring their working copy cvs.texi(,5796) up to date with the repository revision. This process cvs.texi(,5797) is almost automatic. cvs.texi(,5798) cvs.texi(,5799) @c FIXME? should probably use the word "watch" here, to cvs.texi(,5800) @c tie this into the text below and above. cvs.texi(,5801) @sc{cvs} also supports mechanisms which facilitate cvs.texi(,5802) various kinds of communication, without actually cvs.texi(,5803) enforcing rules like reserved checkouts do. cvs.texi(,5804) cvs.texi(,5805) The rest of this chapter describes how these various cvs.texi(,5806) models work, and some of the issues involved in cvs.texi(,5807) choosing between them. cvs.texi(,5808) cvs.texi(,5886) cvs.texi(,5887) @menu cvs.texi(,5888) * File status:: A file can be in several states cvs.texi(,5889) * Updating a file:: Bringing a file up-to-date cvs.texi(,5890) * Conflicts example:: An informative example cvs.texi(,5891) * Informing others:: To cooperate you must inform cvs.texi(,5892) * Concurrency:: Simultaneous repository access cvs.texi(,5893) * Watches:: Mechanisms to track who is editing files cvs.texi(,5894) * Choosing a model:: Reserved or unreserved checkouts? cvs.texi(,5895) @end menu cvs.texi(,5896) cvs.texi(,5897) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,5898) @node File status cvs.texi(,5899) @section File status cvs.texi(,5900) @cindex File status cvs.texi(,5901) @cindex Status of a file cvs.texi(,5902) cvs.texi(,5903) @c Shouldn't this start with an example or something, cvs.texi(,5904) @c introducing the unreserved checkout model? Before we cvs.texi(,5905) @c dive into listing states? cvs.texi(,5906) Based on what operations you have performed on a cvs.texi(,5907) checked out file, and what operations others have cvs.texi(,5908) performed to that file in the repository, one can cvs.texi(,5909) classify a file in a number of states. The states, as cvs.texi(,5910) reported by the @code{status} command, are: cvs.texi(,5911) cvs.texi(,5912) @c The order of items is chosen to group logically cvs.texi(,5913) @c similar outputs together. cvs.texi(,5914) @c People who want alphabetical can use the index... cvs.texi(,5915) @table @asis cvs.texi(,5916) @cindex Up-to-date cvs.texi(,5917) @item Up-to-date cvs.texi(,5918) The file is identical with the latest revision in the cvs.texi(,5919) repository for the branch in use. cvs.texi(,5920) @c FIXME: should we clarify "in use"? The answer is cvs.texi(,5921) @c sticky tags, and trying to distinguish branch sticky cvs.texi(,5922) @c tags from non-branch sticky tags seems rather awkward cvs.texi(,5923) @c here. cvs.texi(,5924) @c FIXME: What happens with non-branch sticky tags? Is cvs.texi(,5925) @c a stuck file "Up-to-date" or "Needs checkout" or what? cvs.texi(,5926) cvs.texi(,5927) @item Locally Modified cvs.texi(,5928) @cindex Locally Modified cvs.texi(,5929) You have edited the file, and not yet committed your changes. cvs.texi(,5930) cvs.texi(,5931) @item Locally Added cvs.texi(,5932) @cindex Locally Added cvs.texi(,5933) You have added the file with @code{add}, and not yet cvs.texi(,5934) committed your changes. cvs.texi(,5935) @c There are many cases involving the file being cvs.texi(,5936) @c added/removed/modified in the working directory, and cvs.texi(,5937) @c added/removed/modified in the repository, which we cvs.texi(,5938) @c don't try to describe here. I'm not sure that "cvs cvs.texi(,5939) @c status" produces a non-confusing output in most of cvs.texi(,5940) @c those cases. cvs.texi(,5941) cvs.texi(,5942) @item Locally Removed cvs.texi(,5943) @cindex Locally Removed cvs.texi(,5944) You have removed the file with @code{remove}, and not yet cvs.texi(,5945) committed your changes. cvs.texi(,5946) cvs.texi(,5947) @item Needs Checkout cvs.texi(,5948) @cindex Needs Checkout cvs.texi(,5949) Someone else has committed a newer revision to the cvs.texi(,5950) repository. The name is slightly misleading; you will cvs.texi(,5951) ordinarily use @code{update} rather than cvs.texi(,5952) @code{checkout} to get that newer revision. cvs.texi(,5953) cvs.texi(,5954) @item Needs Patch cvs.texi(,5955) @cindex Needs Patch cvs.texi(,5956) @c See also newb-123j0 in sanity.sh (although that case cvs.texi(,5957) @c should probably be changed rather than documented). cvs.texi(,5958) Like Needs Checkout, but the @sc{cvs} server will send cvs.texi(,5959) a patch rather than the entire file. Sending a patch or cvs.texi(,5960) sending an entire file accomplishes the same thing. cvs.texi(,5961) cvs.texi(,5962) @item Needs Merge cvs.texi(,5963) @cindex Needs Merge cvs.texi(,5964) Someone else has committed a newer revision to the repository, and you cvs.texi(,5965) have also made modifications to the file. cvs.texi(,5966) cvs.texi(,5967) @item Unresolved Conflict cvs.texi(,5968) @cindex Unresolved Conflict cvs.texi(,5969) @c FIXCVS - This file status needs to be changed to some more informative cvs.texi(,5970) @c text that distinguishes it more clearly from each of the Locally Added, cvs.texi(,5971) @c File had conflicts on merge, and Unknown status types, but an exact and cvs.texi(,5972) @c succinct wording escapes me at the moment. cvs.texi(,5973) A file with the same name as this new file has been added to the repository cvs.texi(,5974) from a second workspace. This file will need to be moved out of the way cvs.texi(,5975) to allow an @code{update} to complete. cvs.texi(,5976) cvs.texi(,5977) @item File had conflicts on merge cvs.texi(,5978) @cindex File had conflicts on merge cvs.texi(,5979) @c is it worth saying that this message was "Unresolved cvs.texi(,5980) @c Conflict" in CVS 1.9 and earlier? I'm inclined to cvs.texi(,5981) @c think that is unnecessarily confusing to new users. cvs.texi(,5982) This is like Locally Modified, except that a previous cvs.texi(,5983) @code{update} command gave a conflict. If you have not cvs.texi(,5984) already done so, you need to cvs.texi(,5985) resolve the conflict as described in @ref{Conflicts example}. cvs.texi(,5986) cvs.texi(,5987) @item Unknown cvs.texi(,5988) @cindex Unknown cvs.texi(,5989) @sc{cvs} doesn't know anything about this file. For cvs.texi(,5990) example, you have created a new file and have not run cvs.texi(,5991) @code{add}. cvs.texi(,5992) @c cvs.texi(,5993) @c "Entry Invalid" and "Classify Error" are also in the cvs.texi(,5994) @c status.c. The latter definitely indicates a CVS bug cvs.texi(,5995) @c (should it be worded more like "internal error" so cvs.texi(,5996) @c people submit bug reports if they see it?). The former cvs.texi(,5997) @c I'm not as sure; I haven't tracked down whether/when it cvs.texi(,5998) @c appears in "cvs status" output. cvs.texi(,5999) cvs.texi(,6000) @end table cvs.texi(,6001) cvs.texi(,6002) To help clarify the file status, @code{status} also cvs.texi(,6003) reports the @code{Working revision} which is the cvs.texi(,6004) revision that the file in the working directory derives cvs.texi(,6005) from, and the @code{Repository revision} which is the cvs.texi(,6006) latest revision in the repository for the branch in cvs.texi(,6007) use. cvs.texi(,6008) @c FIXME: should we clarify "in use"? The answer is cvs.texi(,6009) @c sticky tags, and trying to distinguish branch sticky cvs.texi(,6010) @c tags from non-branch sticky tags seems rather awkward cvs.texi(,6011) @c here. cvs.texi(,6012) @c FIXME: What happens with non-branch sticky tags? cvs.texi(,6013) @c What is the Repository Revision there? See the cvs.texi(,6014) @c comment at vn_rcs in cvs.h, which is kind of cvs.texi(,6015) @c confused--we really need to document better what this cvs.texi(,6016) @c field contains. cvs.texi(,6017) @c Q: Should we document "New file!" and other such cvs.texi(,6018) @c outputs or are they self-explanatory? cvs.texi(,6019) @c FIXME: what about the date to the right of "Working cvs.texi(,6020) @c revision"? It doesn't appear with client/server and cvs.texi(,6021) @c seems unnecessary (redundant with "ls -l") so cvs.texi(,6022) @c perhaps it should be removed for non-client/server too? cvs.texi(,6023) @c FIXME: Need some examples. cvs.texi(,6024) @c FIXME: Working revision can also be something like cvs.texi(,6025) @c "-1.3" for a locally removed file. Not at all cvs.texi(,6026) @c self-explanatory (and it is possible that CVS should cvs.texi(,6027) @c be changed rather than documenting this). cvs.texi(,6028) cvs.texi(,6029) @c Would be nice to have an @example showing output cvs.texi(,6030) @c from cvs status, with comments showing the xref cvs.texi(,6031) @c where each part of the output is described. This cvs.texi(,6032) @c might fit in nicely if it is desirable to split this cvs.texi(,6033) @c node in two; one to introduce "cvs status" and one cvs.texi(,6034) @c to list each of the states. cvs.texi(,6035) The options to @code{status} are listed in cvs.texi(,6036) @ref{Invoking CVS}. For information on its @code{Sticky tag} cvs.texi(,6037) and @code{Sticky date} output, see @ref{Sticky tags}. cvs.texi(,6038) For information on its @code{Sticky options} output, cvs.texi(,6039) see the @samp{-k} option in @ref{update options}. cvs.texi(,6040) cvs.texi(,6041) You can think of the @code{status} and @code{update} cvs.texi(,6042) commands as somewhat complementary. You use cvs.texi(,6043) @code{update} to bring your files up to date, and you cvs.texi(,6044) can use @code{status} to give you some idea of what an cvs.texi(,6045) @code{update} would do (of course, the state of the cvs.texi(,6046) repository might change before you actually run cvs.texi(,6047) @code{update}). In fact, if you want a command to cvs.texi(,6048) display file status in a more brief format than is cvs.texi(,6049) displayed by the @code{status} command, you can invoke cvs.texi(,6050) cvs.texi(,6051) @cindex update, to display file status cvs.texi(,6052) @example cvs.texi(,6053) $ cvs -n -q update cvs.texi(,6054) @end example cvs.texi(,6055) cvs.texi(,6056) The @samp{-n} option means to not actually do the cvs.texi(,6057) update, but merely to display statuses; the @samp{-q} cvs.texi(,6058) option avoids printing the name of each directory. For cvs.texi(,6059) more information on the @code{update} command, and cvs.texi(,6060) these options, see @ref{Invoking CVS}. cvs.texi(,6061) cvs.texi(,6062) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,6063) @node Updating a file cvs.texi(,6064) @section Bringing a file up to date cvs.texi(,6065) @cindex Bringing a file up to date cvs.texi(,6066) @cindex Updating a file cvs.texi(,6067) @cindex Merging a file cvs.texi(,6068) @cindex Update, introduction cvs.texi(,6069) cvs.texi(,6070) When you want to update or merge a file, use the @code{update} cvs.texi(,6071) command. For files that are not up to date this is roughly equivalent cvs.texi(,6072) to a @code{checkout} command: the newest revision of the file is cvs.texi(,6073) extracted from the repository and put in your working directory. cvs.texi(,6074) cvs.texi(,6075) Your modifications to a file are never lost when you cvs.texi(,6076) use @code{update}. If no newer revision exists, cvs.texi(,6077) running @code{update} has no effect. If you have cvs.texi(,6078) edited the file, and a newer revision is available, cvs.texi(,6079) @sc{cvs} will merge all changes into your working copy. cvs.texi(,6080) cvs.texi(,6081) For instance, imagine that you checked out revision 1.4 and started cvs.texi(,6082) editing it. In the meantime someone else committed revision 1.5, and cvs.texi(,6083) shortly after that revision 1.6. If you run @code{update} on the file cvs.texi(,6084) now, @sc{cvs} will incorporate all changes between revision 1.4 and 1.6 into cvs.texi(,6085) your file. cvs.texi(,6086) cvs.texi(,6087) @cindex Overlap cvs.texi(,6088) If any of the changes between 1.4 and 1.6 were made too cvs.texi(,6089) close to any of the changes you have made, an cvs.texi(,6090) @dfn{overlap} occurs. In such cases a warning is cvs.texi(,6091) printed, and the resulting file includes both cvs.texi(,6092) versions of the lines that overlap, delimited by cvs.texi(,6093) special markers. cvs.texi(,6094) @xref{update}, for a complete description of the cvs.texi(,6095) @code{update} command. cvs.texi(,6096) cvs.texi(,6097) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,6098) @node Conflicts example cvs.texi(,6099) @section Conflicts example cvs.texi(,6100) @cindex Merge, an example cvs.texi(,6101) @cindex Example of merge cvs.texi(,6102) @cindex driver.c (merge example) cvs.texi(,6103) cvs.texi(,6104) Suppose revision 1.4 of @file{driver.c} contains this: cvs.texi(,6105) cvs.texi(,6106) @example cvs.texi(,6107) #include cvs.texi(,6108) cvs.texi(,6109) void main() cvs.texi(,6110) @{ cvs.texi(,6111) parse(); cvs.texi(,6112) if (nerr == 0) cvs.texi(,6113) gencode(); cvs.texi(,6114) else cvs.texi(,6115) fprintf(stderr, "No code generated.\n"); cvs.texi(,6116) exit(nerr == 0 ? 0 : 1); cvs.texi(,6117) @} cvs.texi(,6118) @end example cvs.texi(,6119) cvs.texi(,6120) @noindent cvs.texi(,6121) Revision 1.6 of @file{driver.c} contains this: cvs.texi(,6122) cvs.texi(,6123) @example cvs.texi(,6124) #include cvs.texi(,6125) cvs.texi(,6126) int main(int argc, cvs.texi(,6127) char **argv) cvs.texi(,6128) @{ cvs.texi(,6129) parse(); cvs.texi(,6130) if (argc != 1) cvs.texi(,6131) @{ cvs.texi(,6132) fprintf(stderr, "tc: No args expected.\n"); cvs.texi(,6133) exit(1); cvs.texi(,6134) @} cvs.texi(,6135) if (nerr == 0) cvs.texi(,6136) gencode(); cvs.texi(,6137) else cvs.texi(,6138) fprintf(stderr, "No code generated.\n"); cvs.texi(,6139) exit(!!nerr); cvs.texi(,6140) @} cvs.texi(,6141) @end example cvs.texi(,6142) cvs.texi(,6143) @noindent cvs.texi(,6144) Your working copy of @file{driver.c}, based on revision cvs.texi(,6145) 1.4, contains this before you run @samp{cvs update}: cvs.texi(,6146) @c -- Really include "cvs"? cvs.texi(,6147) cvs.texi(,6148) @example cvs.texi(,6149) #include cvs.texi(,6150) #include cvs.texi(,6151) cvs.texi(,6152) void main() cvs.texi(,6153) @{ cvs.texi(,6154) init_scanner(); cvs.texi(,6155) parse(); cvs.texi(,6156) if (nerr == 0) cvs.texi(,6157) gencode(); cvs.texi(,6158) else cvs.texi(,6159) fprintf(stderr, "No code generated.\n"); cvs.texi(,6160) exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE); cvs.texi(,6161) @} cvs.texi(,6162) @end example cvs.texi(,6163) cvs.texi(,6164) @noindent cvs.texi(,6165) You run @samp{cvs update}: cvs.texi(,6166) @c -- Really include "cvs"? cvs.texi(,6167) cvs.texi(,6168) @example cvs.texi(,6169) $ cvs update driver.c cvs.texi(,6170) RCS file: /usr/local/cvsroot/yoyodyne/tc/driver.c,v cvs.texi(,6171) retrieving revision 1.4 cvs.texi(,6172) retrieving revision 1.6 cvs.texi(,6173) Merging differences between 1.4 and 1.6 into driver.c cvs.texi(,6174) rcsmerge warning: overlaps during merge cvs.texi(,6175) cvs update: conflicts found in driver.c cvs.texi(,6176) C driver.c cvs.texi(,6177) @end example cvs.texi(,6178) cvs.texi(,6179) @noindent cvs.texi(,6180) @cindex Conflicts (merge example) cvs.texi(,6181) @sc{cvs} tells you that there were some conflicts. cvs.texi(,6182) Your original working file is saved unmodified in cvs.texi(,6183) @file{.#driver.c.1.4}. The new version of cvs.texi(,6184) @file{driver.c} contains this: cvs.texi(,6185) cvs.texi(,6186) @example cvs.texi(,6187) #include cvs.texi(,6188) #include cvs.texi(,6189) cvs.texi(,6190) int main(int argc, cvs.texi(,6191) char **argv) cvs.texi(,6192) @{ cvs.texi(,6193) init_scanner(); cvs.texi(,6194) parse(); cvs.texi(,6195) if (argc != 1) cvs.texi(,6196) @{ cvs.texi(,6197) fprintf(stderr, "tc: No args expected.\n"); cvs.texi(,6198) exit(1); cvs.texi(,6199) @} cvs.texi(,6200) if (nerr == 0) cvs.texi(,6201) gencode(); cvs.texi(,6202) else cvs.texi(,6203) fprintf(stderr, "No code generated.\n"); cvs.texi(,6204) @asis{}<<<<<<< driver.c cvs.texi(,6205) exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE); cvs.texi(,6206) @asis{}======= cvs.texi(,6207) exit(!!nerr); cvs.texi(,6208) @asis{}>>>>>>> 1.6 cvs.texi(,6209) @} cvs.texi(,6210) @end example cvs.texi(,6211) cvs.texi(,6212) @noindent cvs.texi(,6213) @cindex Markers, conflict cvs.texi(,6214) @cindex Conflict markers cvs.texi(,6215) @cindex <<<<<<< cvs.texi(,6216) @cindex >>>>>>> cvs.texi(,6217) @cindex ======= cvs.texi(,6218) cvs.texi(,6219) Note how all non-overlapping modifications are incorporated in your working cvs.texi(,6220) copy, and that the overlapping section is clearly marked with cvs.texi(,6221) @samp{<<<<<<<}, @samp{=======} and @samp{>>>>>>>}. cvs.texi(,6222) cvs.texi(,6223) @cindex Resolving a conflict cvs.texi(,6224) @cindex Conflict resolution cvs.texi(,6225) You resolve the conflict by editing the file, removing the markers and cvs.texi(,6226) the erroneous line. Suppose you end up with this file: cvs.texi(,6227) @c -- Add xref to the pcl-cvs manual when it talks cvs.texi(,6228) @c -- about this. cvs.texi(,6229) @example cvs.texi(,6230) #include cvs.texi(,6231) #include cvs.texi(,6232) cvs.texi(,6233) int main(int argc, cvs.texi(,6234) char **argv) cvs.texi(,6235) @{ cvs.texi(,6236) init_scanner(); cvs.texi(,6237) parse(); cvs.texi(,6238) if (argc != 1) cvs.texi(,6239) @{ cvs.texi(,6240) fprintf(stderr, "tc: No args expected.\n"); cvs.texi(,6241) exit(1); cvs.texi(,6242) @} cvs.texi(,6243) if (nerr == 0) cvs.texi(,6244) gencode(); cvs.texi(,6245) else cvs.texi(,6246) fprintf(stderr, "No code generated.\n"); cvs.texi(,6247) exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE); cvs.texi(,6248) @} cvs.texi(,6249) @end example cvs.texi(,6250) cvs.texi(,6251) @noindent cvs.texi(,6252) You can now go ahead and commit this as revision 1.7. cvs.texi(,6253) cvs.texi(,6254) @example cvs.texi(,6255) $ cvs commit -m "Initialize scanner. Use symbolic exit values." driver.c cvs.texi(,6256) Checking in driver.c; cvs.texi(,6257) /usr/local/cvsroot/yoyodyne/tc/driver.c,v <-- driver.c cvs.texi(,6258) new revision: 1.7; previous revision: 1.6 cvs.texi(,6259) done cvs.texi(,6260) @end example cvs.texi(,6261) cvs.texi(,6262) For your protection, @sc{cvs} will refuse to check in a cvs.texi(,6263) file if a conflict occurred and you have not resolved cvs.texi(,6264) the conflict. Currently to resolve a conflict, you cvs.texi(,6265) must change the timestamp on the file. In previous cvs.texi(,6266) versions of @sc{cvs}, you also needed to cvs.texi(,6267) insure that the file contains no conflict markers. cvs.texi(,6268) Because cvs.texi(,6269) your file may legitimately contain conflict markers (that cvs.texi(,6270) is, occurrences of @samp{>>>>>>> } at the start of a cvs.texi(,6271) line that don't mark a conflict), the current cvs.texi(,6272) version of @sc{cvs} will print a warning and proceed to cvs.texi(,6273) check in the file. cvs.texi(,6274) @c The old behavior was really icky; the only way out cvs.texi(,6275) @c was to start hacking on cvs.texi(,6276) @c the @code{CVS/Entries} file or other such workarounds. cvs.texi(,6277) @c cvs.texi(,6278) @c If the timestamp thing isn't considered nice enough, cvs.texi(,6279) @c maybe there should be a "cvs resolved" command cvs.texi(,6280) @c which clears the conflict indication. For a nice user cvs.texi(,6281) @c interface, this should be invoked by an interactive cvs.texi(,6282) @c merge tool like emerge rather than by the user cvs.texi(,6283) @c directly--such a tool can verify that the user has cvs.texi(,6284) @c really dealt with each conflict. cvs.texi(,6285) cvs.texi(,6286) @cindex emerge cvs.texi(,6287) If you use release 1.04 or later of pcl-cvs (a @sc{gnu} cvs.texi(,6288) Emacs front-end for @sc{cvs}) you can use an Emacs cvs.texi(,6289) package called emerge to help you resolve conflicts. cvs.texi(,6290) See the documentation for pcl-cvs. cvs.texi(,6291) cvs.texi(,6292) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,6293) @node Informing others cvs.texi(,6294) @section Informing others about commits cvs.texi(,6295) @cindex Informing others cvs.texi(,6296) @cindex Spreading information cvs.texi(,6297) @cindex Mail, automatic mail on commit cvs.texi(,6298) cvs.texi(,6299) It is often useful to inform others when you commit a cvs.texi(,6300) new revision of a file. The @samp{-i} option of the cvs.texi(,6301) @file{modules} file, or the @file{loginfo} file, can be cvs.texi(,6302) used to automate this process. @xref{modules}. cvs.texi(,6303) @xref{loginfo}. You can use these features of @sc{cvs} cvs.texi(,6304) to, for instance, instruct @sc{cvs} to mail a cvs.texi(,6305) message to all developers, or post a message to a local cvs.texi(,6306) newsgroup. cvs.texi(,6307) @c -- More text would be nice here. cvs.texi(,6308) cvs.texi(,6309) @node Concurrency cvs.texi(,6310) @section Several developers simultaneously attempting to run CVS cvs.texi(,6311) cvs.texi(,6312) @cindex Locks, cvs, introduction cvs.texi(,6313) @c For a discussion of *why* CVS creates locks, see cvs.texi(,6314) @c the comment at the start of src/lock.c cvs.texi(,6315) If several developers try to run @sc{cvs} at the same cvs.texi(,6316) time, one may get the following message: cvs.texi(,6317) cvs.texi(,6318) @example cvs.texi(,6319) [11:43:23] waiting for bach's lock in /usr/local/cvsroot/foo cvs.texi(,6320) @end example cvs.texi(,6321) cvs.texi(,6322) @cindex #cvs.rfl, removing cvs.texi(,6323) @cindex #cvs.wfl, removing cvs.texi(,6324) @cindex #cvs.lock, removing cvs.texi(,6325) @sc{cvs} will try again every 30 seconds, and either cvs.texi(,6326) continue with the operation or print the message again, cvs.texi(,6327) if it still needs to wait. If a lock seems to stick cvs.texi(,6328) around for an undue amount of time, find the person cvs.texi(,6329) holding the lock and ask them about the cvs command cvs.texi(,6330) they are running. If they aren't running a cvs cvs.texi(,6331) command, look in the repository directory mentioned in cvs.texi(,6332) the message and remove files which they own whose names cvs.texi(,6333) start with @file{#cvs.rfl}, cvs.texi(,6334) @file{#cvs.wfl}, or @file{#cvs.lock}. cvs.texi(,6335) cvs.texi(,6336) Note that these locks are to protect @sc{cvs}'s cvs.texi(,6337) internal data structures and have no relationship to cvs.texi(,6338) the word @dfn{lock} in the sense used by cvs.texi(,6339) @sc{rcs}---which refers to reserved checkouts cvs.texi(,6340) (@pxref{Multiple developers}). cvs.texi(,6341) cvs.texi(,6342) Any number of people can be reading from a given cvs.texi(,6343) repository at a time; only when someone is writing do cvs.texi(,6344) the locks prevent other people from reading or writing. cvs.texi(,6345) cvs.texi(,6346) @cindex Atomic transactions, lack of cvs.texi(,6347) @cindex Transactions, atomic, lack of cvs.texi(,6348) @c the following talks about what one might call commit/update cvs.texi(,6349) @c atomicity. cvs.texi(,6350) @c Probably also should say something about cvs.texi(,6351) @c commit/commit atomicity, that is, "An update will cvs.texi(,6352) @c not get partial versions of more than one commit". cvs.texi(,6353) @c CVS currently has this property and I guess we can cvs.texi(,6354) @c make it a documented feature. cvs.texi(,6355) @c For example one person commits cvs.texi(,6356) @c a/one.c and b/four.c and another commits a/two.c and cvs.texi(,6357) @c b/three.c. Then an update cannot get the new a/one.c cvs.texi(,6358) @c and a/two.c and the old b/four.c and b/three.c. cvs.texi(,6359) One might hope for the following property: cvs.texi(,6360) cvs.texi(,6361) @quotation cvs.texi(,6362) If someone commits some changes in one cvs command, cvs.texi(,6363) then an update by someone else will either get all the cvs.texi(,6364) changes, or none of them. cvs.texi(,6365) @end quotation cvs.texi(,6366) cvs.texi(,6367) @noindent cvs.texi(,6368) but @sc{cvs} does @emph{not} have this property. For cvs.texi(,6369) example, given the files cvs.texi(,6370) cvs.texi(,6371) @example cvs.texi(,6372) a/one.c cvs.texi(,6373) a/two.c cvs.texi(,6374) b/three.c cvs.texi(,6375) b/four.c cvs.texi(,6376) @end example cvs.texi(,6377) cvs.texi(,6378) @noindent cvs.texi(,6379) if someone runs cvs.texi(,6380) cvs.texi(,6381) @example cvs.texi(,6382) cvs ci a/two.c b/three.c cvs.texi(,6383) @end example cvs.texi(,6384) cvs.texi(,6385) @noindent cvs.texi(,6386) and someone else runs @code{cvs update} at the same cvs.texi(,6387) time, the person running @code{update} might get only cvs.texi(,6388) the change to @file{b/three.c} and not the change to cvs.texi(,6389) @file{a/two.c}. cvs.texi(,6390) cvs.texi(,6391) @node Watches cvs.texi(,6392) @section Mechanisms to track who is editing files cvs.texi(,6393) @cindex Watches cvs.texi(,6394) cvs.texi(,6395) For many groups, use of @sc{cvs} in its default mode is cvs.texi(,6396) perfectly satisfactory. Users may sometimes go to cvs.texi(,6397) check in a modification only to find that another cvs.texi(,6398) modification has intervened, but they deal with it and cvs.texi(,6399) proceed with their check in. Other groups prefer to be cvs.texi(,6400) able to know who is editing what files, so that if two cvs.texi(,6401) people try to edit the same file they can choose to cvs.texi(,6402) talk about who is doing what when rather than be cvs.texi(,6403) surprised at check in time. The features in this cvs.texi(,6404) section allow such coordination, while retaining the cvs.texi(,6405) ability of two developers to edit the same file at the cvs.texi(,6406) same time. cvs.texi(,6407) cvs.texi(,6408) @c Some people might ask why CVS does not enforce the cvs.texi(,6409) @c rule on chmod, by requiring a cvs edit before a cvs cvs.texi(,6410) @c commit. The main reason is that it could always be cvs.texi(,6411) @c circumvented--one could edit the file, and cvs.texi(,6412) @c then when ready to check it in, do the cvs edit and put cvs.texi(,6413) @c in the new contents and do the cvs commit. One cvs.texi(,6414) @c implementation note: if we _do_ want to have cvs commit cvs.texi(,6415) @c require a cvs edit, we should store the state on cvs.texi(,6416) @c whether the cvs edit has occurred in the working cvs.texi(,6417) @c directory, rather than having the server try to keep cvs.texi(,6418) @c track of what working directories exist. cvs.texi(,6419) @c FIXME: should the above discussion be part of the cvs.texi(,6420) @c manual proper, somewhere, not just in a comment? cvs.texi(,6421) For maximum benefit developers should use @code{cvs cvs.texi(,6422) edit} (not @code{chmod}) to make files read-write to cvs.texi(,6423) edit them, and @code{cvs release} (not @code{rm}) to cvs.texi(,6424) discard a working directory which is no longer in use, cvs.texi(,6425) but @sc{cvs} is not able to enforce this behavior. cvs.texi(,6426) cvs.texi(,6427) @c I'm a little dissatisfied with this presentation, cvs.texi(,6428) @c because "watch on"/"edit"/"editors" are one set of cvs.texi(,6429) @c functionality, and "watch add"/"watchers" is another cvs.texi(,6430) @c which is somewhat orthogonal even though they interact in cvs.texi(,6431) @c various ways. But I think it might be cvs.texi(,6432) @c confusing to describe them separately (e.g. "watch cvs.texi(,6433) @c add" with loginfo). I don't know. cvs.texi(,6434) cvs.texi(,6435) @menu cvs.texi(,6436) * Setting a watch:: Telling CVS to watch certain files cvs.texi(,6437) * Getting Notified:: Telling CVS to notify you cvs.texi(,6438) * Editing files:: How to edit a file which is being watched cvs.texi(,6439) * Watch information:: Information about who is watching and editing cvs.texi(,6440) * Watches Compatibility:: Watches interact poorly with CVS 1.6 or earlier cvs.texi(,6441) @end menu cvs.texi(,6442) cvs.texi(,6443) @node Setting a watch cvs.texi(,6444) @subsection Telling CVS to watch certain files cvs.texi(,6445) cvs.texi(,6446) To enable the watch features, you first specify that cvs.texi(,6447) certain files are to be watched. cvs.texi(,6448) cvs.texi(,6449) @cindex watch on (subcommand) cvs.texi(,6450) @deffn Command {cvs watch on} [@code{-lR}] [@var{files}]@dots{} cvs.texi(,6451) cvs.texi(,6452) @cindex Read-only files, and watches cvs.texi(,6453) Specify that developers should run @code{cvs edit} cvs.texi(,6454) before editing @var{files}. @sc{cvs} will create working cvs.texi(,6455) copies of @var{files} read-only, to remind developers cvs.texi(,6456) to run the @code{cvs edit} command before working on cvs.texi(,6457) them. cvs.texi(,6458) cvs.texi(,6459) If @var{files} includes the name of a directory, @sc{cvs} cvs.texi(,6460) arranges to watch all files added to the corresponding cvs.texi(,6461) repository directory, and sets a default for files cvs.texi(,6462) added in the future; this allows the user to set cvs.texi(,6463) notification policies on a per-directory basis. The cvs.texi(,6464) contents of the directory are processed recursively, cvs.texi(,6465) unless the @code{-l} option is given. cvs.texi(,6466) The @code{-R} option can be used to force recursion if the @code{-l} cvs.texi(,6467) option is set in @file{~/.cvsrc} (@pxref{~/.cvsrc}). cvs.texi(,6468) cvs.texi(,6469) If @var{files} is omitted, it defaults to the current directory. cvs.texi(,6470) cvs.texi(,6471) @cindex watch off (subcommand) cvs.texi(,6472) @end deffn cvs.texi(,6473) cvs.texi(,6474) @deffn Command {cvs watch off} [@code{-lR}] [@var{files}]@dots{} cvs.texi(,6475) cvs.texi(,6476) Do not create @var{files} read-only on checkout; thus, cvs.texi(,6477) developers will not be reminded to use @code{cvs edit} cvs.texi(,6478) and @code{cvs unedit}. cvs.texi(,6486) cvs.texi(,6487) The @var{files} and options are processed as for @code{cvs cvs.texi(,6488) watch on}. cvs.texi(,6489) cvs.texi(,6490) @end deffn cvs.texi(,6491) cvs.texi(,6492) @node Getting Notified cvs.texi(,6493) @subsection Telling CVS to notify you cvs.texi(,6494) cvs.texi(,6495) You can tell @sc{cvs} that you want to receive cvs.texi(,6496) notifications about various actions taken on a file. cvs.texi(,6497) You can do this without using @code{cvs watch on} for cvs.texi(,6498) the file, but generally you will want to use @code{cvs cvs.texi(,6499) watch on}, to remind developers to use the @code{cvs edit} cvs.texi(,6500) command. cvs.texi(,6501) cvs.texi(,6502) @cindex watch add (subcommand) cvs.texi(,6503) @deffn Command {cvs watch add} [@code{-lR}] [@code{-a} @var{action}]@dots{} [@var{files}]@dots{} cvs.texi(,6504) cvs.texi(,6505) Add the current user to the list of people to receive notification of cvs.texi(,6506) work done on @var{files}. cvs.texi(,6507) cvs.texi(,6508) The @code{-a} option specifies what kinds of events @sc{cvs} should notify cvs.texi(,6509) the user about. @var{action} is one of the following: cvs.texi(,6510) cvs.texi(,6511) @table @code cvs.texi(,6512) cvs.texi(,6513) @item edit cvs.texi(,6514) Another user has applied the @code{cvs edit} command (described cvs.texi(,6515) below) to a watched file. cvs.texi(,6516) cvs.texi(,6517) @item commit cvs.texi(,6518) Another user has committed changes to one of the named @var{files}. cvs.texi(,6519) cvs.texi(,6520) @item unedit cvs.texi(,6521) Another user has abandoned editing a file (other than by committing changes). cvs.texi(,6522) They can do this in several ways, by: cvs.texi(,6523) cvs.texi(,6524) @itemize @bullet cvs.texi(,6525) cvs.texi(,6526) @item cvs.texi(,6527) applying the @code{cvs unedit} command (described below) to the file cvs.texi(,6528) cvs.texi(,6529) @item cvs.texi(,6530) applying the @code{cvs release} command (@pxref{release}) to the file's parent directory cvs.texi(,6531) (or recursively to a directory more than one level up) cvs.texi(,6532) cvs.texi(,6533) @item cvs.texi(,6534) deleting the file and allowing @code{cvs update} to recreate it cvs.texi(,6535) cvs.texi(,6536) @end itemize cvs.texi(,6537) cvs.texi(,6538) @item all cvs.texi(,6539) All of the above. cvs.texi(,6540) cvs.texi(,6541) @item none cvs.texi(,6542) None of the above. (This is useful with @code{cvs edit}, cvs.texi(,6543) described below.) cvs.texi(,6544) cvs.texi(,6545) @end table cvs.texi(,6546) cvs.texi(,6547) The @code{-a} option may appear more than once, or not at all. If cvs.texi(,6548) omitted, the action defaults to @code{all}. cvs.texi(,6549) cvs.texi(,6550) The @var{files} and options are processed as for cvs.texi(,6551) @code{cvs watch on}. cvs.texi(,6552) cvs.texi(,6553) @end deffn cvs.texi(,6554) cvs.texi(,6555) cvs.texi(,6556) @cindex watch remove (subcommand) cvs.texi(,6557) @deffn Command {cvs watch remove} [@code{-lR}] [@code{-a} @var{action}]@dots{} [@var{files}]@dots{} cvs.texi(,6558) cvs.texi(,6559) Remove a notification request established using @code{cvs watch add}; cvs.texi(,6560) the arguments are the same. If the @code{-a} option is present, only cvs.texi(,6561) watches for the specified actions are removed. cvs.texi(,6562) cvs.texi(,6563) @end deffn cvs.texi(,6564) cvs.texi(,6565) @cindex notify (admin file) cvs.texi(,6566) When the conditions exist for notification, @sc{cvs} cvs.texi(,6567) calls the @file{notify} administrative file. Edit cvs.texi(,6568) @file{notify} as one edits the other administrative cvs.texi(,6569) files (@pxref{Intro administrative files}). This cvs.texi(,6570) file follows the usual conventions for administrative cvs.texi(,6571) files (@pxref{syntax}), where each line is a regular cvs.texi(,6572) expression followed by a command to execute. The cvs.texi(,6573) command should contain a single occurrence of @samp{%s} cvs.texi(,6574) which will be replaced by the user to notify; the rest cvs.texi(,6575) of the information regarding the notification will be cvs.texi(,6576) supplied to the command on standard input. The cvs.texi(,6577) standard thing to put in the @code{notify} file is the cvs.texi(,6578) single line: cvs.texi(,6579) cvs.texi(,6580) @example cvs.texi(,6581) ALL mail %s -s "CVS notification" cvs.texi(,6582) @end example cvs.texi(,6583) cvs.texi(,6584) @noindent cvs.texi(,6585) This causes users to be notified by electronic mail. cvs.texi(,6586) @c FIXME: should it be this hard to set up this cvs.texi(,6587) @c behavior (and the result when one fails to do so, cvs.texi(,6588) @c silent failure to notify, so non-obvious)? Should cvs.texi(,6589) @c CVS give a warning if no line in notify matches (and cvs.texi(,6590) @c document the use of "DEFAULT :" for the case where cvs.texi(,6591) @c skipping the notification is indeed desired)? cvs.texi(,6592) cvs.texi(,6593) @cindex users (admin file) cvs.texi(,6594) Note that if you set this up in the straightforward cvs.texi(,6595) way, users receive notifications on the server machine. cvs.texi(,6596) One could of course write a @file{notify} script which cvs.texi(,6597) directed notifications elsewhere, but to make this cvs.texi(,6598) easy, @sc{cvs} allows you to associate a notification cvs.texi(,6599) address for each user. To do so create a file cvs.texi(,6600) @file{users} in @file{CVSROOT} with a line for each cvs.texi(,6601) user in the format @var{user}:@var{value}. Then cvs.texi(,6602) instead of passing the name of the user to be notified cvs.texi(,6603) to @file{notify}, @sc{cvs} will pass the @var{value} cvs.texi(,6604) (normally an email address on some other machine). cvs.texi(,6605) cvs.texi(,6606) @sc{cvs} does not notify you for your own changes. cvs.texi(,6607) Currently this check is done based on whether the user cvs.texi(,6608) name of the person taking the action which triggers cvs.texi(,6609) notification matches the user name of the person cvs.texi(,6610) getting notification. In fact, in general, the watches cvs.texi(,6611) features only track one edit by each user. It probably cvs.texi(,6612) would be more useful if watches tracked each working cvs.texi(,6613) directory separately, so this behavior might be worth cvs.texi(,6614) changing. cvs.texi(,6615) @c "behavior might be worth changing" is an effort to cvs.texi(,6616) @c point to future directions while also not promising cvs.texi(,6617) @c that "they" (as in "why don't they fix CVS to....") cvs.texi(,6618) @c will do this. cvs.texi(,6619) @c one implementation issue is identifying whether a cvs.texi(,6620) @c working directory is same or different. Comparing cvs.texi(,6621) @c pathnames/hostnames is hopeless, but having the server cvs.texi(,6622) @c supply a serial number which the client stores in the cvs.texi(,6623) @c CVS directory as a magic cookie should work. cvs.texi(,6624) cvs.texi(,6625) @node Editing files cvs.texi(,6626) @subsection How to edit a file which is being watched cvs.texi(,6627) cvs.texi(,6628) @cindex Checkout, as term for getting ready to edit cvs.texi(,6629) Since a file which is being watched is checked out cvs.texi(,6630) read-only, you cannot simply edit it. To make it cvs.texi(,6631) read-write, and inform others that you are planning to cvs.texi(,6632) edit it, use the @code{cvs edit} command. Some systems cvs.texi(,6633) call this a @dfn{checkout}, but @sc{cvs} uses that term cvs.texi(,6634) for obtaining a copy of the sources (@pxref{Getting the cvs.texi(,6635) source}), an operation which those systems call a cvs.texi(,6636) @dfn{get} or a @dfn{fetch}. cvs.texi(,6637) @c Issue to think about: should we transition CVS cvs.texi(,6638) @c towards the "get" terminology? "cvs get" is already a cvs.texi(,6639) @c synonym for "cvs checkout" and that section of the cvs.texi(,6640) @c manual refers to "Getting the source". If this is cvs.texi(,6641) @c done, needs to be done gingerly (for example, we should cvs.texi(,6642) @c still accept "checkout" in .cvsrc files indefinitely cvs.texi(,6643) @c even if the CVS's messages are changed from "cvs checkout: " cvs.texi(,6644) @c to "cvs get: "). cvs.texi(,6645) @c There is a concern about whether "get" is not as cvs.texi(,6646) @c good for novices because it is a more general term cvs.texi(,6647) @c than "checkout" (and thus arguably harder to assign cvs.texi(,6648) @c a technical meaning for). cvs.texi(,6649) cvs.texi(,6650) @cindex edit (subcommand) cvs.texi(,6651) @deffn Command {cvs edit} [@code{-lR}] [@code{-a} @var{action}]@dots{} [@var{files}]@dots{} cvs.texi(,6652) cvs.texi(,6653) Prepare to edit the working files @var{files}. @sc{cvs} makes the cvs.texi(,6654) @var{files} read-write, and notifies users who have requested cvs.texi(,6655) @code{edit} notification for any of @var{files}. cvs.texi(,6656) cvs.texi(,6657) The @code{cvs edit} command accepts the same options as the cvs.texi(,6658) @code{cvs watch add} command, and establishes a temporary watch for the cvs.texi(,6659) user on @var{files}; @sc{cvs} will remove the watch when @var{files} are cvs.texi(,6660) @code{unedit}ed or @code{commit}ted. If the user does not wish to cvs.texi(,6661) receive notifications, she should specify @code{-a none}. cvs.texi(,6662) cvs.texi(,6663) The @var{files} and the options are processed as for the @code{cvs cvs.texi(,6664) watch} commands. cvs.texi(,6665) cvs.texi(,6675) cvs.texi(,6676) @end deffn cvs.texi(,6677) cvs.texi(,6678) Normally when you are done with a set of changes, you cvs.texi(,6679) use the @code{cvs commit} command, which checks in your cvs.texi(,6680) changes and returns the watched files to their usual cvs.texi(,6681) read-only state. But if you instead decide to abandon cvs.texi(,6682) your changes, or not to make any changes, you can use cvs.texi(,6683) the @code{cvs unedit} command. cvs.texi(,6684) cvs.texi(,6685) @cindex unedit (subcommand) cvs.texi(,6686) @cindex Abandoning work cvs.texi(,6687) @cindex Reverting to repository version cvs.texi(,6688) @deffn Command {cvs unedit} [@code{-lR}] [@var{files}]@dots{} cvs.texi(,6689) cvs.texi(,6690) Abandon work on the working files @var{files}, and revert them to the cvs.texi(,6691) repository versions on which they are based. @sc{cvs} makes those cvs.texi(,6692) @var{files} read-only for which users have requested notification using cvs.texi(,6693) @code{cvs watch on}. @sc{cvs} notifies users who have requested @code{unedit} cvs.texi(,6694) notification for any of @var{files}. cvs.texi(,6695) cvs.texi(,6696) The @var{files} and options are processed as for the cvs.texi(,6697) @code{cvs watch} commands. cvs.texi(,6698) cvs.texi(,6699) If watches are not in use, the @code{unedit} command cvs.texi(,6700) probably does not work, and the way to revert to the cvs.texi(,6701) repository version is with the command @code{cvs update -C file} cvs.texi(,6702) (@pxref{update}). cvs.texi(,6703) The meaning is cvs.texi(,6704) not precisely the same; the latter may also cvs.texi(,6705) bring in some changes which have been made in the cvs.texi(,6706) repository since the last time you updated. cvs.texi(,6707) @c It would be a useful enhancement to CVS to make cvs.texi(,6708) @c unedit work in the non-watch case as well. cvs.texi(,6709) @end deffn cvs.texi(,6710) cvs.texi(,6711) When using client/server @sc{cvs}, you can use the cvs.texi(,6712) @code{cvs edit} and @code{cvs unedit} commands even if cvs.texi(,6713) @sc{cvs} is unable to successfully communicate with the cvs.texi(,6714) server; the notifications will be sent upon the next cvs.texi(,6715) successful @sc{cvs} command. cvs.texi(,6716) cvs.texi(,6717) @node Watch information cvs.texi(,6718) @subsection Information about who is watching and editing cvs.texi(,6719) cvs.texi(,6720) @cindex watchers (subcommand) cvs.texi(,6721) @deffn Command {cvs watchers} [@code{-lR}] [@var{files}]@dots{} cvs.texi(,6722) cvs.texi(,6723) List the users currently watching changes to @var{files}. The report cvs.texi(,6724) includes the files being watched, and the mail address of each watcher. cvs.texi(,6725) cvs.texi(,6726) The @var{files} and options are processed as for the cvs.texi(,6727) @code{cvs watch} commands. cvs.texi(,6728) cvs.texi(,6729) @end deffn cvs.texi(,6730) cvs.texi(,6731) cvs.texi(,6732) @cindex editors (subcommand) cvs.texi(,6733) @deffn Command {cvs editors} [@code{-lR}] [@var{files}]@dots{} cvs.texi(,6734) cvs.texi(,6735) List the users currently working on @var{files}. The report cvs.texi(,6736) includes the mail address of each user, the time when the user began cvs.texi(,6737) working with the file, and the host and path of the working directory cvs.texi(,6738) containing the file. cvs.texi(,6739) cvs.texi(,6740) The @var{files} and options are processed as for the cvs.texi(,6741) @code{cvs watch} commands. cvs.texi(,6742) cvs.texi(,6743) @end deffn cvs.texi(,6744) cvs.texi(,6745) @node Watches Compatibility cvs.texi(,6746) @subsection Using watches with old versions of CVS cvs.texi(,6747) cvs.texi(,6748) @cindex CVS 1.6, and watches cvs.texi(,6749) If you use the watch features on a repository, it cvs.texi(,6750) creates @file{CVS} directories in the repository and cvs.texi(,6751) stores the information about watches in that directory. cvs.texi(,6752) If you attempt to use @sc{cvs} 1.6 or earlier with the cvs.texi(,6753) repository, you get an error message such as the cvs.texi(,6754) following (all on one line): cvs.texi(,6755) cvs.texi(,6756) @example cvs.texi(,6757) cvs update: cannot open CVS/Entries for reading: cvs.texi(,6758) No such file or directory cvs.texi(,6759) @end example cvs.texi(,6760) cvs.texi(,6761) @noindent cvs.texi(,6762) and your operation will likely be aborted. To use the cvs.texi(,6763) watch features, you must upgrade all copies of @sc{cvs} cvs.texi(,6764) which use that repository in local or server mode. If cvs.texi(,6765) you cannot upgrade, use the @code{watch off} and cvs.texi(,6766) @code{watch remove} commands to remove all watches, and cvs.texi(,6767) that will restore the repository to a state which cvs.texi(,6768) @sc{cvs} 1.6 can cope with. cvs.texi(,6769) cvs.texi(,6770) @node Choosing a model cvs.texi(,6771) @section Choosing between reserved or unreserved checkouts cvs.texi(,6772) @cindex Choosing, reserved or unreserved checkouts cvs.texi(,6773) cvs.texi(,6774) Reserved and unreserved checkouts each have pros and cvs.texi(,6775) cons. Let it be said that a lot of this is a matter of cvs.texi(,6776) opinion or what works given different groups' working cvs.texi(,6777) styles, but here is a brief description of some of the cvs.texi(,6778) issues. There are many ways to organize a team of cvs.texi(,6779) developers. @sc{cvs} does not try to enforce a certain cvs.texi(,6780) organization. It is a tool that can be used in several cvs.texi(,6781) ways. cvs.texi(,6782) cvs.texi(,6783) Reserved checkouts can be very counter-productive. If cvs.texi(,6784) two persons want to edit different parts of a file, cvs.texi(,6785) there may be no reason to prevent either of them from cvs.texi(,6786) doing so. Also, it is common for someone to take out a cvs.texi(,6787) lock on a file, because they are planning to edit it, cvs.texi(,6788) but then forget to release the lock. cvs.texi(,6789) cvs.texi(,6790) @c "many groups"? specifics? cites to papers on this? cvs.texi(,6791) @c some way to weasel-word it a bit more so we don't cvs.texi(,6792) @c need facts :-)? cvs.texi(,6793) People, especially people who are familiar with cvs.texi(,6794) reserved checkouts, often wonder how often conflicts cvs.texi(,6795) occur if unreserved checkouts are used, and how cvs.texi(,6796) difficult they are to resolve. The experience with cvs.texi(,6797) many groups is that they occur rarely and usually are cvs.texi(,6798) relatively straightforward to resolve. cvs.texi(,6799) cvs.texi(,6800) The rarity of serious conflicts may be surprising, until one realizes cvs.texi(,6801) that they occur only when two developers disagree on the proper design cvs.texi(,6802) for a given section of code; such a disagreement suggests that the cvs.texi(,6803) team has not been communicating properly in the first place. In order cvs.texi(,6804) to collaborate under @emph{any} source management regimen, developers cvs.texi(,6805) must agree on the general design of the system; given this agreement, cvs.texi(,6806) overlapping changes are usually straightforward to merge. cvs.texi(,6807) cvs.texi(,6808) In some cases unreserved checkouts are clearly cvs.texi(,6809) inappropriate. If no merge tool exists for the kind of cvs.texi(,6810) file you are managing (for example word processor files cvs.texi(,6811) or files edited by Computer Aided Design programs), and cvs.texi(,6812) it is not desirable to change to a program which uses a cvs.texi(,6813) mergeable data format, then resolving conflicts is cvs.texi(,6814) going to be unpleasant enough that you generally will cvs.texi(,6815) be better off to simply avoid the conflicts instead, by cvs.texi(,6816) using reserved checkouts. cvs.texi(,6817) cvs.texi(,6818) The watches features described above in @ref{Watches} cvs.texi(,6819) can be considered to be an intermediate model between cvs.texi(,6820) reserved checkouts and unreserved checkouts. When you cvs.texi(,6821) go to edit a file, it is possible to find out who else cvs.texi(,6822) is editing it. And rather than having the system cvs.texi(,6823) simply forbid both people editing the file, it can tell cvs.texi(,6824) you what the situation is and let you figure out cvs.texi(,6825) whether it is a problem in that particular case or not. cvs.texi(,6826) Therefore, for some groups it can be considered the cvs.texi(,6827) best of both the reserved checkout and unreserved cvs.texi(,6828) checkout worlds. cvs.texi(,6829) cvs.texi(,6830) @c --------------------------------------------------------------------- cvs.texi(,6831) @node Revision management cvs.texi(,6832) @chapter Revision management cvs.texi(,6833) @cindex Revision management cvs.texi(,6834) cvs.texi(,6835) @c -- This chapter could be expanded a lot. cvs.texi(,6836) @c -- Experiences are very welcome! cvs.texi(,6837) cvs.texi(,6838) If you have read this far, you probably have a pretty cvs.texi(,6839) good grasp on what @sc{cvs} can do for you. This cvs.texi(,6840) chapter talks a little about things that you still have cvs.texi(,6841) to decide. cvs.texi(,6842) cvs.texi(,6843) If you are doing development on your own using @sc{cvs} cvs.texi(,6844) you could probably skip this chapter. The questions cvs.texi(,6845) this chapter takes up become more important when more cvs.texi(,6846) than one person is working in a repository. cvs.texi(,6847) cvs.texi(,6848) @menu cvs.texi(,6849) * When to commit:: Some discussion on the subject cvs.texi(,6850) @end menu cvs.texi(,6851) cvs.texi(,6852) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,6853) @node When to commit cvs.texi(,6854) @section When to commit? cvs.texi(,6855) @cindex When to commit cvs.texi(,6856) @cindex Committing, when to cvs.texi(,6857) @cindex Policy cvs.texi(,6858) cvs.texi(,6859) Your group should decide which policy to use regarding cvs.texi(,6860) commits. Several policies are possible, and as your cvs.texi(,6861) experience with @sc{cvs} grows you will probably find cvs.texi(,6862) out what works for you. cvs.texi(,6863) cvs.texi(,6864) If you commit files too quickly you might commit files cvs.texi(,6865) that do not even compile. If your partner updates his cvs.texi(,6866) working sources to include your buggy file, he will be cvs.texi(,6867) unable to compile the code. On the other hand, other cvs.texi(,6868) persons will not be able to benefit from the cvs.texi(,6869) improvements you make to the code if you commit very cvs.texi(,6870) seldom, and conflicts will probably be more common. cvs.texi(,6871) cvs.texi(,6872) It is common to only commit files after making sure cvs.texi(,6873) that they can be compiled. Some sites require that the cvs.texi(,6874) files pass a test suite. Policies like this can be cvs.texi(,6875) enforced using the commitinfo file cvs.texi(,6876) (@pxref{commitinfo}), but you should think twice before cvs.texi(,6877) you enforce such a convention. By making the cvs.texi(,6878) development environment too controlled it might become cvs.texi(,6879) too regimented and thus counter-productive to the real cvs.texi(,6880) goal, which is to get software written. cvs.texi(,6881) cvs.texi(,6882) @c --------------------------------------------------------------------- cvs.texi(,6883) @node Keyword substitution cvs.texi(,6884) @chapter Keyword substitution cvs.texi(,6885) @cindex Keyword substitution cvs.texi(,6886) @cindex Keyword expansion cvs.texi(,6887) @cindex Identifying files cvs.texi(,6888) cvs.texi(,6889) @comment Be careful when editing this chapter. cvs.texi(,6890) @comment Remember that this file is kept under cvs.texi(,6891) @comment version control, so we must not accidentally cvs.texi(,6892) @comment include a valid keyword in the running text. cvs.texi(,6893) cvs.texi(,6894) As long as you edit source files inside a working cvs.texi(,6895) directory you can always find out the state of cvs.texi(,6896) your files via @samp{cvs status} and @samp{cvs log}. cvs.texi(,6897) But as soon as you export the files from your cvs.texi(,6898) development environment it becomes harder to identify cvs.texi(,6899) which revisions they are. cvs.texi(,6900) cvs.texi(,6901) @sc{cvs} can use a mechanism known as @dfn{keyword cvs.texi(,6902) substitution} (or @dfn{keyword expansion}) to help cvs.texi(,6903) identifying the files. Embedded strings of the form cvs.texi(,6904) @code{$@var{keyword}$} and cvs.texi(,6905) @code{$@var{keyword}:@dots{}$} in a file are replaced cvs.texi(,6906) with strings of the form cvs.texi(,6907) @code{$@var{keyword}:@var{value}$} whenever you obtain cvs.texi(,6908) a new revision of the file. cvs.texi(,6909) cvs.texi(,6910) @menu cvs.texi(,6911) * Keyword list:: Keywords cvs.texi(,6912) * Using keywords:: Using keywords cvs.texi(,6913) * Avoiding substitution:: Avoiding substitution cvs.texi(,6914) * Substitution modes:: Substitution modes cvs.texi(,6915) * Configuring keyword expansion:: Configuring keyword expansion cvs.texi(splitrcskeyword,6916) * Log keyword:: Problems with the $cvs.texi(splitrcskeyword,6916) @i{}Log$ keyword. cvs.texi(,6917) @end menu cvs.texi(,6918) cvs.texi(,6919) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,6920) @node Keyword list cvs.texi(,6921) @section Keyword List cvs.texi(,6922) @cindex Keyword List cvs.texi(,6923) cvs.texi(,6924) @c FIXME: need some kind of example here I think, cvs.texi(,6925) @c perhaps in a cvs.texi(,6926) @c "Keyword intro" node. The intro in the "Keyword cvs.texi(,6927) @c substitution" node itself seems OK, but to launch cvs.texi(,6928) @c into a list of the keywords somehow seems too abrupt. cvs.texi(,6929) cvs.texi(,6930) This is a list of the keywords: cvs.texi(,6931) cvs.texi(,6932) @table @code cvs.texi(,6933) @cindex Author keyword cvs.texi(splitrcskeyword,6934) @item $cvs.texi(splitrcskeyword,6934) @i{}Author$ cvs.texi(,6935) The login name of the user who checked in the revision. cvs.texi(,6936) cvs.texi(,6937) @cindex CVSHeader keyword cvs.texi(splitrcskeyword,6938) @item $cvs.texi(splitrcskeyword,6938) @i{}CVSHeader cvs.texi(splitrcskeyword,6939) A standard header (similar to $cvs.texi(splitrcskeyword,6939) @i{}Header$, but with cvs.texi(,6940) the CVS root stripped off). It contains the relative cvs.texi(,6941) pathname of the @sc{rcs} file to the CVS root, the cvs.texi(,6942) revision number, the date (UTC), the author, the state, cvs.texi(,6943) and the locker (if locked). Files will normally never cvs.texi(,6944) be locked when you use @sc{cvs}. cvs.texi(,6945) cvs.texi(,6946) Note that this keyword has only been recently cvs.texi(,6947) introduced to @sc{cvs} and may cause problems with cvs.texi(splitrcskeyword,6948) existing installations if $cvs.texi(splitrcskeyword,6948) @i{}CVSHeader$ is already cvs.texi(,6949) in the files for a different purpose. This keyword may cvs.texi(,6950) be excluded using the @code{KeywordExpansion=eCVSHeader} cvs.texi(,6951) in the @file{CVSROOT/config} file. cvs.texi(,6952) See @ref{Configuring keyword expansion} for more details. cvs.texi(,6953) cvs.texi(,6954) @cindex Date keyword cvs.texi(splitrcskeyword,6955) @item $cvs.texi(splitrcskeyword,6955) @i{}Date$ cvs.texi(,6956) The date and time (UTC) the revision was checked in. cvs.texi(,6957) cvs.texi(,6958) @cindex Header keyword cvs.texi(splitrcskeyword,6959) @item $cvs.texi(splitrcskeyword,6959) @i{}Header$ cvs.texi(,6960) A standard header containing the full pathname of the cvs.texi(,6961) @sc{rcs} file, the revision number, the date (UTC), the cvs.texi(,6962) author, the state, and the locker (if locked). Files cvs.texi(,6963) will normally never be locked when you use @sc{cvs}. cvs.texi(,6964) cvs.texi(,6965) @cindex Id keyword cvs.texi(splitrcskeyword,6966) @item $cvs.texi(splitrcskeyword,6966) @i{}Id$ cvs.texi(splitrcskeyword,6967) Same as @code{$@i{}Header$}, except that the @sc{rcs} cvs.texi(,6968) filename is without a path. cvs.texi(,6969) cvs.texi(,6970) @cindex Name keyword cvs.texi(splitrcskeyword,6971) @item $cvs.texi(splitrcskeyword,6971) @i{}Name$ cvs.texi(,6972) Tag name used to check out this file. The keyword is cvs.texi(,6973) expanded only if one checks out with an explicit tag cvs.texi(,6974) name. For example, when running the command @code{cvs cvs.texi(,6975) co -r first}, the keyword expands to @samp{Name: first}. cvs.texi(,6976) cvs.texi(,6977) @cindex Locker keyword cvs.texi(splitrcskeyword,6978) @item $cvs.texi(splitrcskeyword,6978) @i{}Locker$ cvs.texi(,6979) The login name of the user who locked the revision cvs.texi(,6980) (empty if not locked, which is the normal case unless cvs.texi(,6981) @code{cvs admin -l} is in use). cvs.texi(,6982) cvs.texi(,6983) @cindex Log keyword cvs.texi(splitrcskeyword,6984) @item $cvs.texi(splitrcskeyword,6984) @i{}Log$ cvs.texi(,6985) The log message supplied during commit, preceded by a cvs.texi(,6986) header containing the @sc{rcs} filename, the revision cvs.texi(,6987) number, the author, and the date (UTC). Existing log cvs.texi(,6988) messages are @emph{not} replaced. Instead, the new log cvs.texi(splitrcskeyword,6989) message is inserted after @code{$@i{}Log:@dots{}$}. cvs.texi(,6990) Each new line is prefixed with the same string which cvs.texi(,6991) precedes the @code{$Log} keyword. For example, if the cvs.texi(,6992) file contains: cvs.texi(,6993) cvs.texi(,6994) @example cvs.texi(,6995) /* Here is what people have been up to: cvs.texi(,6996) * cvs.texi(splitrcskeyword,6997) * $cvs.texi(splitrcskeyword,6997) @i{}Log: frob.c,v $ cvs.texi(,6998) * Revision 1.1 1997/01/03 14:23:51 joe cvs.texi(,6999) * Add the superfrobnicate option cvs.texi(,7000) * cvs.texi(,7001) */ cvs.texi(,7002) @end example cvs.texi(,7003) cvs.texi(,7004) @noindent cvs.texi(,7005) then additional lines which are added when expanding cvs.texi(,7006) the @code{$Log} keyword will be preceded by @samp{ * }. cvs.texi(,7007) Unlike previous versions of @sc{cvs} and @sc{rcs}, the cvs.texi(,7008) @dfn{comment leader} from the @sc{rcs} file is not used. cvs.texi(,7009) The @code{$Log} keyword is useful for cvs.texi(,7010) accumulating a complete change log in a source file, cvs.texi(,7011) but for several reasons it can be problematic. cvs.texi(,7012) @xref{Log keyword}. cvs.texi(,7013) cvs.texi(,7014) @cindex RCSfile keyword cvs.texi(splitrcskeyword,7015) @item $cvs.texi(splitrcskeyword,7015) @i{}RCSfile$ cvs.texi(,7016) The name of the RCS file without a path. cvs.texi(,7017) cvs.texi(,7018) @cindex Revision keyword cvs.texi(splitrcskeyword,7019) @item $cvs.texi(splitrcskeyword,7019) @i{}Revision$ cvs.texi(,7020) The revision number assigned to the revision. cvs.texi(,7021) cvs.texi(,7022) @cindex Source keyword cvs.texi(splitrcskeyword,7023) @item $cvs.texi(splitrcskeyword,7023) @i{}Source$ cvs.texi(,7024) The full pathname of the RCS file. cvs.texi(,7025) cvs.texi(,7026) @cindex State keyword cvs.texi(splitrcskeyword,7027) @item $cvs.texi(splitrcskeyword,7027) @i{}State$ cvs.texi(,7028) The state assigned to the revision. States can be cvs.texi(,7029) assigned with @code{cvs admin -s}---see @ref{admin options}. cvs.texi(,7030) cvs.texi(,7031) @cindex Local keyword cvs.texi(,7032) @item Local keyword cvs.texi(,7033) The @code{LocalKeyword} option in the @file{CVSROOT/config} file cvs.texi(,7034) may be used to specify a local keyword which is to be cvs.texi(,7035) used as an alias for one of the other keywords. For cvs.texi(,7036) example, if the @file{CVSROOT/config} file contains cvs.texi(,7037) a line with @code{LocalKeyword=MYBSD=CVSHeader}, then a cvs.texi(splitrcskeyword,7038) file with the local keyword $cvs.texi(splitrcskeyword,7038) @i{}MYBSD$ will be cvs.texi(splitrcskeyword,7039) expanded as if it were a $cvs.texi(splitrcskeyword,7039) @i{}CVSHeader$ keyword. If cvs.texi(,7040) the src/frob.c file contained this keyword, it might cvs.texi(,7041) look something like this: cvs.texi(,7042) cvs.texi(,7043) @example cvs.texi(,7044) /* cvs.texi(splitrcskeyword,7045) * $cvs.texi(splitrcskeyword,7045) @i{}MYBSD: src/frob.c,v 1.1 2003/05/04 09:27:45 john Exp $ cvs.texi(,7046) */ cvs.texi(,7047) @end example cvs.texi(,7048) cvs.texi(,7049) Many repositories make use of a such a ``local cvs.texi(,7050) keyword'' feature. An old patch to @sc{cvs} provided cvs.texi(,7051) the @code{LocalKeyword} feature using a @code{tag=} cvs.texi(,7052) option and called this the ``custom tag'' or ``local cvs.texi(,7053) tag'' feature. It was used in conjunction with the cvs.texi(,7054) what they called the @code{tagexpand=} option. In cvs.texi(,7055) @sc{cvs} this other option is known as the cvs.texi(,7056) @code{KeywordExpand} option. cvs.texi(,7057) See @ref{Configuring keyword expansion} for more cvs.texi(,7058) details. cvs.texi(,7059) cvs.texi(,7060) Examples from popular projects include: cvs.texi(splitrcskeyword,7061) $cvs.texi(splitrcskeyword,7061) @i{}FreeBSD$, $cvs.texi(splitrcskeyword,7061) @i{}NetBSD$, cvs.texi(splitrcskeyword,7062) $cvs.texi(splitrcskeyword,7062) @i{}OpenBSD$, $cvs.texi(splitrcskeyword,7062) @i{}XFree86$, cvs.texi(splitrcskeyword,7063) $cvs.texi(splitrcskeyword,7063) @i{}Xorg$. cvs.texi(,7064) cvs.texi(,7065) The advantage of this is that you can include your cvs.texi(,7066) local version information in a file using this local cvs.texi(,7067) keyword without disrupting the upstream version cvs.texi(,7068) information (which may be a different local keyword or cvs.texi(,7069) a standard keyword). Allowing bug reports and the like cvs.texi(,7070) to more properly identify the source of the original cvs.texi(,7071) bug to the third-party and reducing the number of cvs.texi(,7072) conflicts that arise during an import of a new version. cvs.texi(,7073) cvs.texi(,7074) All keyword expansion except the local keyword may be cvs.texi(,7075) disabled using the @code{KeywordExpansion} option in cvs.texi(,7076) the @file{CVSROOT/config} file---see cvs.texi(,7077) @ref{Configuring keyword expansion} for more details. cvs.texi(,7078) cvs.texi(,7079) @end table cvs.texi(,7080) cvs.texi(,7081) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,7082) @node Using keywords cvs.texi(,7083) @section Using keywords cvs.texi(,7084) cvs.texi(,7085) To include a keyword string you simply include the cvs.texi(splitrcskeyword,7086) relevant text string, such as @code{$@i{}Id$}, inside the cvs.texi(,7087) file, and commit the file. @sc{cvs} will automatically cvs.texi(,7088) expand the string as part of the commit operation. cvs.texi(,7089) cvs.texi(splitrcskeyword,7090) It is common to embed the @code{$@i{}Id$} string in cvs.texi(,7091) the source files so that it gets passed through to cvs.texi(,7092) generated files. For example, if you are managing cvs.texi(,7093) computer program source code, you might include a cvs.texi(,7094) variable which is initialized to contain that string. cvs.texi(,7095) Or some C compilers may provide a @code{#pragma ident} cvs.texi(,7096) directive. Or a document management system might cvs.texi(,7097) provide a way to pass a string through to generated cvs.texi(,7098) files. cvs.texi(,7099) cvs.texi(,7100) @c Would be nice to give an example, but doing this in cvs.texi(,7101) @c portable C is not possible and the problem with cvs.texi(,7102) @c picking any one language (VMS HELP files, Ada, cvs.texi(,7103) @c troff, whatever) is that people use CVS for all cvs.texi(,7104) @c kinds of files. cvs.texi(,7105) cvs.texi(,7106) @cindex Ident (shell command) cvs.texi(,7107) The @code{ident} command (which is part of the @sc{rcs} cvs.texi(,7108) package) can be used to extract keywords and their cvs.texi(,7109) values from a file. This can be handy for text files, cvs.texi(,7110) but it is even more useful for extracting keywords from cvs.texi(,7111) binary files. cvs.texi(,7112) cvs.texi(,7113) @example cvs.texi(,7114) $ ident samp.c cvs.texi(,7115) samp.c: cvs.texi(splitrcskeyword,7116) $cvs.texi(splitrcskeyword,7116) @i{}Id: samp.c,v 1.5 1993/10/19 14:57:32 ceder Exp $ cvs.texi(,7117) $ gcc samp.c cvs.texi(,7118) $ ident a.out cvs.texi(,7119) a.out: cvs.texi(splitrcskeyword,7120) $cvs.texi(splitrcskeyword,7120) @i{}Id: samp.c,v 1.5 1993/10/19 14:57:32 ceder Exp $ cvs.texi(,7121) @end example cvs.texi(,7122) cvs.texi(,7123) @cindex What (shell command) cvs.texi(,7124) S@sc{ccs} is another popular revision control system. cvs.texi(,7125) It has a command, @code{what}, which is very similar to cvs.texi(,7126) @code{ident} and used for the same purpose. Many sites cvs.texi(,7127) without @sc{rcs} have @sc{sccs}. Since @code{what} cvs.texi(,7128) looks for the character sequence @code{@@(#)} it is cvs.texi(,7129) easy to include keywords that are detected by either cvs.texi(,7130) command. Simply prefix the keyword with the cvs.texi(,7131) magic @sc{sccs} phrase, like this: cvs.texi(,7132) cvs.texi(,7133) @example cvs.texi(splitrcskeyword,7134) static char *id="@@(#) $cvs.texi(splitrcskeyword,7134) @i{}Id: ab.c,v 1.5 1993/10/19 14:57:32 ceder Exp $"; cvs.texi(,7135) @end example cvs.texi(,7136) cvs.texi(,7137) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,7138) @node Avoiding substitution cvs.texi(,7139) @section Avoiding substitution cvs.texi(,7140) cvs.texi(,7141) Keyword substitution has its disadvantages. Sometimes cvs.texi(,7142) you might want the literal text string cvs.texi(splitrcskeyword,7143) @samp{$@i{}Author$} to appear inside a file without cvs.texi(,7144) @sc{cvs} interpreting it as a keyword and expanding it cvs.texi(splitrcskeyword,7145) into something like @samp{$@i{}Author: ceder $}. cvs.texi(,7146) cvs.texi(,7147) There is unfortunately no way to selectively turn off cvs.texi(,7148) keyword substitution. You can use @samp{-ko} cvs.texi(,7149) (@pxref{Substitution modes}) to turn off keyword cvs.texi(,7150) substitution entirely. cvs.texi(,7151) cvs.texi(,7152) In many cases you can avoid using keywords in cvs.texi(,7153) the source, even though they appear in the final cvs.texi(,7154) product. For example, the source for this manual cvs.texi(,7155) contains @samp{$@@asis@{@}Author$} whenever the text cvs.texi(splitrcskeyword,7156) @samp{$@i{}Author$} should appear. In @code{nroff} cvs.texi(,7157) and @code{troff} you can embed the null-character cvs.texi(,7158) @code{\&} inside the keyword for a similar effect. cvs.texi(,7159) cvs.texi(,7160) It is also possible to specify an explicit list of cvs.texi(,7161) keywords to include or exclude using the cvs.texi(,7162) @code{KeywordExpand} option in the cvs.texi(,7163) @file{CVSROOT/config} file--see @ref{Configuring keyword expansion} cvs.texi(,7164) for more details. This feature is intended primarily cvs.texi(,7165) for use with the @code{LocalKeyword} option--see cvs.texi(,7166) @ref{Keyword list}. cvs.texi(,7167) cvs.texi(,7168) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,7169) @node Substitution modes cvs.texi(,7170) @section Substitution modes cvs.texi(,7171) @cindex Keyword substitution, changing modes cvs.texi(,7172) @cindex -k (keyword substitution) cvs.texi(,7173) @cindex Kflag cvs.texi(,7174) cvs.texi(,7175) @c FIXME: This could be made more coherent, by expanding it cvs.texi(,7176) @c with more examples or something. cvs.texi(,7177) Each file has a stored default substitution mode, and cvs.texi(,7178) each working directory copy of a file also has a cvs.texi(,7179) substitution mode. The former is set by the @samp{-k} cvs.texi(,7180) option to @code{cvs add} and @code{cvs admin}; the cvs.texi(,7181) latter is set by the @samp{-k} or @samp{-A} options to @code{cvs cvs.texi(,7182) checkout} or @code{cvs update}. @code{cvs diff} also cvs.texi(,7183) has a @samp{-k} option. For some examples, cvs.texi(,7184) see @ref{Binary files}, and @ref{Merging and keywords}. cvs.texi(,7185) @c The fact that -A is overloaded to mean both reset cvs.texi(,7186) @c sticky options and reset sticky tags/dates is cvs.texi(,7187) @c somewhat questionable. Perhaps there should be cvs.texi(,7188) @c separate options to reset sticky options (e.g. -k cvs.texi(,7189) @c A") and tags/dates (someone suggested -r HEAD could cvs.texi(,7190) @c do this instead of setting a sticky tag of "HEAD" cvs.texi(,7191) @c as in the status quo but I haven't thought much cvs.texi(,7192) @c about that idea. Of course -r .reset or something cvs.texi(,7193) @c could be coined if this needs to be a new option). cvs.texi(,7194) @c On the other hand, having -A mean "get things back cvs.texi(,7195) @c into the state after a fresh checkout" has a certain cvs.texi(,7196) @c appeal, and maybe there is no sufficient reason for cvs.texi(,7197) @c creeping featurism in this area. cvs.texi(,7198) cvs.texi(,7199) The modes available are: cvs.texi(,7200) cvs.texi(,7201) @table @samp cvs.texi(,7202) @item -kkv cvs.texi(,7203) Generate keyword strings using the default form, e.g. cvs.texi(splitrcskeyword,7204) @code{$@i{}Revision: 5.7 $} for the @code{Revision} cvs.texi(,7205) keyword. cvs.texi(,7206) cvs.texi(,7207) @item -kkvl cvs.texi(,7208) Like @samp{-kkv}, except that a locker's name is always cvs.texi(,7209) inserted if the given revision is currently locked. cvs.texi(,7210) The locker's name is only relevant if @code{cvs admin cvs.texi(,7211) -l} is in use. cvs.texi(,7212) cvs.texi(,7213) @item -kk cvs.texi(,7214) Generate only keyword names in keyword strings; omit cvs.texi(,7215) their values. For example, for the @code{Revision} cvs.texi(splitrcskeyword,7216) keyword, generate the string @code{$@i{}Revision$} cvs.texi(splitrcskeyword,7217) instead of @code{$@i{}Revision: 5.7 $}. This option cvs.texi(,7218) is useful to ignore differences due to keyword cvs.texi(,7219) substitution when comparing different revisions of a cvs.texi(,7220) file (@pxref{Merging and keywords}). cvs.texi(,7221) cvs.texi(,7222) @item -ko cvs.texi(,7223) Generate the old keyword string, present in the working cvs.texi(,7224) file just before it was checked in. For example, for cvs.texi(,7225) the @code{Revision} keyword, generate the string cvs.texi(splitrcskeyword,7226) @code{$@i{}Revision: 1.1 $} instead of cvs.texi(splitrcskeyword,7227) @code{$@i{}Revision: 5.7 $} if that is how the cvs.texi(,7228) string appeared when the file was checked in. cvs.texi(,7229) cvs.texi(,7230) @item -kb cvs.texi(,7231) Like @samp{-ko}, but also inhibit conversion of line cvs.texi(,7232) endings between the canonical form in which they are cvs.texi(,7233) stored in the repository (linefeed only), and the form cvs.texi(,7234) appropriate to the operating system in use on the cvs.texi(,7235) client. For systems, like unix, which use linefeed cvs.texi(,7236) only to terminate lines, this is very similar to cvs.texi(,7237) @samp{-ko}. For more information on binary files, see cvs.texi(,7238) @ref{Binary files}. In @sc{cvs} version 1.12.2 and later cvs.texi(,7239) @samp{-kb}, as set by @code{cvs add}, @code{cvs admin}, or cvs.texi(,7240) @code{cvs import} may not be overridden by a @samp{-k} option cvs.texi(,7241) specified on the command line. cvs.texi(,7242) cvs.texi(,7243) @item -kv cvs.texi(,7244) Generate only keyword values for keyword strings. For cvs.texi(,7245) example, for the @code{Revision} keyword, generate the string cvs.texi(splitrcskeyword,7246) @code{5.7} instead of @code{$@i{}Revision: 5.7 $}. cvs.texi(,7247) This can help generate files in programming languages cvs.texi(,7248) where it is hard to strip keyword delimiters like cvs.texi(splitrcskeyword,7249) @code{$@i{}Revision: $} from a string. However, cvs.texi(,7250) further keyword substitution cannot be performed once cvs.texi(,7251) the keyword names are removed, so this option should be cvs.texi(,7252) used with care. cvs.texi(,7253) cvs.texi(,7254) One often would like to use @samp{-kv} with @code{cvs cvs.texi(,7255) export}---@pxref{export}. But be aware that doesn't cvs.texi(,7256) handle an export containing binary files correctly. cvs.texi(,7257) cvs.texi(,7258) @end table cvs.texi(,7259) cvs.texi(,7260) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,7261) @node Configuring keyword expansion cvs.texi(,7262) @section Configuring Keyord Expansion cvs.texi(,7263) @cindex Configuring keyword expansion cvs.texi(,7264) cvs.texi(,7265) In a repository that includes third-party software on cvs.texi(,7266) vendor branches, it is sometimes helpful to configure cvs.texi(,7267) CVS to use a local keyword instead of the standard cvs.texi(splitrcskeyword,7268) $cvs.texi(splitrcskeyword,7268) @i{}Id$ or $cvs.texi(splitrcskeyword,7268) @i{}Header$ keywords. Examples from cvs.texi(splitrcskeyword,7269) real projects includ, $cvs.texi(splitrcskeyword,7269) @i{}Xorg$, $cvs.texi(splitrcskeyword,7269) @i{}XFree86$, cvs.texi(splitrcskeyword,7270) $cvs.texi(splitrcskeyword,7270) @i{}FreeBSD$, $cvs.texi(splitrcskeyword,7270) @i{}NetBSD$, cvs.texi(splitrcskeyword,7271) $cvs.texi(splitrcskeyword,7271) @i{}OpenBSD$, and even $cvs.texi(splitrcskeyword,7271) @i{}dotat$. cvs.texi(,7272) The advantage of this is that cvs.texi(,7273) you can include your local version information in a cvs.texi(,7274) file using this local keyword (sometimes called a cvs.texi(,7275) ``custom tag'' or a ``local tag'') without disrupting cvs.texi(,7276) the upstream version information (which may be a cvs.texi(,7277) different local keyword or a standard keyword). In cvs.texi(,7278) these cases, it is typically desirable to disable the cvs.texi(,7279) expansion of all keywords except the configured local cvs.texi(,7280) keyword. cvs.texi(,7281) cvs.texi(,7282) The @code{KeywordExpansion} option in the cvs.texi(,7283) @file{CVSROOT/config} file is intended to allow for the cvs.texi(,7284) either the explicit exclusion of a keyword or list of cvs.texi(,7285) keywords, or for the explicit inclusion of a keyword or cvs.texi(,7286) a list of keywords. This list may include the cvs.texi(,7287) @code{LocalKeyword} that has been configured. cvs.texi(,7288) cvs.texi(,7289) The @code{KeywordExpansion} option is followed by cvs.texi(,7290) @code{=} and the next character may either be @code{i} cvs.texi(,7291) to start an inclusion list or @code{e} to start an cvs.texi(,7292) exclusion list. If the following lines were added to cvs.texi(,7293) the @file{CVSROOT/config} file: cvs.texi(,7294) cvs.texi(,7295) @example cvs.texi(,7296) # Add a "MyBSD" keyword and restrict keyword cvs.texi(,7297) # expansion cvs.texi(,7298) LocalKeyword=MyBSD=CVSHeader cvs.texi(,7299) KeywordExpand=iMyBSD cvs.texi(,7300) @end example cvs.texi(,7301) cvs.texi(splitrcskeyword,7302) then only the $cvs.texi(splitrcskeyword,7302) @i{}MyBSD$ keyword would be expanded. cvs.texi(,7303) A list may be used. The this example: cvs.texi(,7304) cvs.texi(,7305) @example cvs.texi(,7306) # Add a "MyBSD" keyword and restrict keyword cvs.texi(,7307) # expansion to the MyBSD, Name and Date keywords. cvs.texi(,7308) LocalKeyword=MyBSD=CVSHeader cvs.texi(,7309) KeywordExpand=iMyBSD,Name,Date cvs.texi(,7310) @end example cvs.texi(,7311) cvs.texi(splitrcskeyword,7312) would allow $cvs.texi(splitrcskeyword,7312) @i{}MyBSD$, $cvs.texi(splitrcskeyword,7312) @i{}Name$, and cvs.texi(splitrcskeyword,7313) $cvs.texi(splitrcskeyword,7313) @i{}Date$ to be expanded. cvs.texi(,7314) cvs.texi(,7315) It is also possible to configure an exclusion list cvs.texi(,7316) using the following: cvs.texi(,7317) cvs.texi(,7318) @example cvs.texi(,7319) # Do not expand the non-RCS keyword CVSHeader cvs.texi(,7320) KeywordExpand=eCVSHeader cvs.texi(,7321) @end example cvs.texi(,7322) cvs.texi(,7323) This allows @sc{cvs} to ignore the recently introduced cvs.texi(splitrcskeyword,7324) $cvs.texi(splitrcskeyword,7324) @i{}CVSHeader$ keyword and retain all of the cvs.texi(,7325) others. The exclusion entry could also contain the cvs.texi(,7326) standard RCS keyword list, but this could be confusing cvs.texi(,7327) to users that expect RCS keywords to be expanded, so cvs.texi(,7328) ycare should be taken to properly set user expectations cvs.texi(,7329) for a repository that is configured in that manner. cvs.texi(,7330) cvs.texi(,7331) If there is a desire to not have any RCS keywords cvs.texi(,7332) expanded and not use the @code{-ko} flags everywhere, cvs.texi(,7333) an administrator may disable all keyword expansion cvs.texi(,7334) using the @file{CVSROOT/config} line: cvs.texi(,7335) cvs.texi(,7336) @example cvs.texi(,7337) # Do not expand any RCS keywords cvs.texi(,7338) KeywordExpand=i cvs.texi(,7339) @end example cvs.texi(,7340) cvs.texi(,7341) this could be confusing to users that expect RCS cvs.texi(splitrcskeyword,7342) keywords like $cvs.texi(splitrcskeyword,7342) @i{}Id$ to be expanded properly, cvs.texi(,7343) so care should be taken to properly set user cvs.texi(,7344) expectations for a repository so configured. cvs.texi(,7345) cvs.texi(,7346) It should be noted that a patch to provide both the cvs.texi(,7347) @code{KeywordExpand} and @code{LocalKeyword} features cvs.texi(,7348) has been around a long time. However, that patch cvs.texi(,7349) implemented these features using @code{tag=} and cvs.texi(,7350) @code{tagexpand=} keywords and those keywords are NOT cvs.texi(,7351) recognized. cvs.texi(,7352) cvs.texi(,7353) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,7354) @node Log keyword cvs.texi(splitrcskeyword,7355) @section Problems with the $cvs.texi(splitrcskeyword,7355) @i{}Log$ keyword. cvs.texi(,7356) cvs.texi(splitrcskeyword,7357) The @code{$@i{}Log$} keyword is somewhat cvs.texi(,7358) controversial. As long as you are working on your cvs.texi(,7359) development system the information is easily accessible cvs.texi(splitrcskeyword,7360) even if you do not use the @code{$@i{}Log$} cvs.texi(,7361) keyword---just do a @code{cvs log}. Once you export cvs.texi(,7362) the file the history information might be useless cvs.texi(,7363) anyhow. cvs.texi(,7364) cvs.texi(,7365) A more serious concern is that @sc{cvs} is not good at cvs.texi(splitrcskeyword,7366) handling @code{$@i{}Log$} entries when a branch is cvs.texi(,7367) merged onto the main trunk. Conflicts often result cvs.texi(,7368) from the merging operation. cvs.texi(,7369) @c Might want to check whether the CVS implementation cvs.texi(,7370) @c of RCS_merge has this problem the same way rcsmerge cvs.texi(,7371) @c does. I would assume so.... cvs.texi(,7372) cvs.texi(,7373) People also tend to "fix" the log entries in the file cvs.texi(,7374) (correcting spelling mistakes and maybe even factual cvs.texi(,7375) errors). If that is done the information from cvs.texi(,7376) @code{cvs log} will not be consistent with the cvs.texi(,7377) information inside the file. This may or may not be a cvs.texi(,7378) problem in real life. cvs.texi(,7379) cvs.texi(splitrcskeyword,7380) It has been suggested that the @code{$@i{}Log$} cvs.texi(,7381) keyword should be inserted @emph{last} in the file, and cvs.texi(,7382) not in the files header, if it is to be used at all. cvs.texi(,7383) That way the long list of change messages will not cvs.texi(,7384) interfere with everyday source file browsing. cvs.texi(,7385) cvs.texi(,7386) @c --------------------------------------------------------------------- cvs.texi(,7387) @node Tracking sources cvs.texi(,7388) @chapter Tracking third-party sources cvs.texi(,7389) @cindex Third-party sources cvs.texi(,7390) @cindex Tracking sources cvs.texi(,7391) cvs.texi(,7392) @c FIXME: Need discussion of added and removed files. cvs.texi(,7393) @c FIXME: This doesn't really adequately introduce the cvs.texi(,7394) @c concepts of "vendor" and "you". They don't *have* cvs.texi(,7395) @c to be separate organizations or separate people. cvs.texi(,7396) @c We want a description which is somewhat more based on cvs.texi(,7397) @c the technical issues of which sources go where, but cvs.texi(,7398) @c also with enough examples of how this relates to cvs.texi(,7399) @c relationships like customer-supplier, developer-QA, cvs.texi(,7400) @c maintainer-contributor, or whatever, to make it cvs.texi(,7401) @c seem concrete. cvs.texi(,7402) If you modify a program to better fit your site, you cvs.texi(,7403) probably want to include your modifications when the next cvs.texi(,7404) release of the program arrives. @sc{cvs} can help you with cvs.texi(,7405) this task. cvs.texi(,7406) cvs.texi(,7407) @cindex Vendor cvs.texi(,7408) @cindex Vendor branch cvs.texi(,7409) @cindex Branch, vendor- cvs.texi(,7410) In the terminology used in @sc{cvs}, the supplier of the cvs.texi(,7411) program is called a @dfn{vendor}. The unmodified cvs.texi(,7412) distribution from the vendor is checked in on its own cvs.texi(,7413) branch, the @dfn{vendor branch}. @sc{cvs} reserves branch cvs.texi(,7414) 1.1.1 for this use. cvs.texi(,7415) cvs.texi(,7416) When you modify the source and commit it, your revision cvs.texi(,7417) will end up on the main trunk. When a new release is cvs.texi(,7418) made by the vendor, you commit it on the vendor branch cvs.texi(,7419) and copy the modifications onto the main trunk. cvs.texi(,7420) cvs.texi(,7421) Use the @code{import} command to create and update cvs.texi(,7422) the vendor branch. When you import a new file, cvs.texi(,7423) the vendor branch is made the `head' revision, so cvs.texi(,7424) anyone that checks out a copy of the file gets that cvs.texi(,7425) revision. When a local modification is committed it is cvs.texi(,7426) placed on the main trunk, and made the `head' cvs.texi(,7427) revision. cvs.texi(,7428) cvs.texi(,7429) @menu cvs.texi(,7430) * First import:: Importing for the first time cvs.texi(,7431) * Update imports:: Updating with the import command cvs.texi(,7432) * Reverting local changes:: Reverting to the latest vendor release cvs.texi(,7433) * Binary files in imports:: Binary files require special handling cvs.texi(,7434) * Keywords in imports:: Keyword substitution might be undesirable cvs.texi(,7435) * Multiple vendor branches:: What if you get sources from several places? cvs.texi(,7436) @end menu cvs.texi(,7437) cvs.texi(,7438) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,7439) @node First import cvs.texi(,7440) @section Importing for the first time cvs.texi(,7441) @cindex Importing modules cvs.texi(,7442) cvs.texi(,7443) @c Should mention naming conventions for vendor tags, cvs.texi(,7444) @c release tags, and perhaps directory names. cvs.texi(,7445) Use the @code{import} command to check in the sources cvs.texi(,7446) for the first time. When you use the @code{import} cvs.texi(,7447) command to track third-party sources, the @dfn{vendor cvs.texi(,7448) tag} and @dfn{release tags} are useful. The cvs.texi(,7449) @dfn{vendor tag} is a symbolic name for the branch cvs.texi(,7450) (which is always 1.1.1, unless you use the @samp{-b cvs.texi(,7451) @var{branch}} flag---see @ref{Multiple vendor branches}.). The cvs.texi(,7452) @dfn{release tags} are symbolic names for a particular cvs.texi(,7453) release, such as @samp{FSF_0_04}. cvs.texi(,7454) cvs.texi(,7455) @c I'm not completely sure this belongs here. But cvs.texi(,7456) @c we need to say it _somewhere_ reasonably obvious; it cvs.texi(,7457) @c is a common misconception among people first learning CVS cvs.texi(,7458) Note that @code{import} does @emph{not} change the cvs.texi(,7459) directory in which you invoke it. In particular, it cvs.texi(,7460) does not set up that directory as a @sc{cvs} working cvs.texi(,7461) directory; if you want to work with the sources import cvs.texi(,7462) them first and then check them out into a different cvs.texi(,7463) directory (@pxref{Getting the source}). cvs.texi(,7464) cvs.texi(,7465) @cindex wdiff (import example) cvs.texi(,7466) Suppose you have the sources to a program called cvs.texi(,7467) @code{wdiff} in a directory @file{wdiff-0.04}, cvs.texi(,7468) and are going to make private modifications that you cvs.texi(,7469) want to be able to use even when new releases are made cvs.texi(,7470) in the future. You start by importing the source to cvs.texi(,7471) your repository: cvs.texi(,7472) cvs.texi(,7473) @example cvs.texi(,7474) $ cd wdiff-0.04 cvs.texi(,7475) $ cvs import -m "Import of FSF v. 0.04" fsf/wdiff FSF_DIST WDIFF_0_04 cvs.texi(,7476) @end example cvs.texi(,7477) cvs.texi(,7478) The vendor tag is named @samp{FSF_DIST} in the above cvs.texi(,7479) example, and the only release tag assigned is cvs.texi(,7480) @samp{WDIFF_0_04}. cvs.texi(,7481) @c FIXME: Need to say where fsf/wdiff comes from. cvs.texi(,7482) cvs.texi(,7483) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,7484) @node Update imports cvs.texi(,7485) @section Updating with the import command cvs.texi(,7486) cvs.texi(,7487) When a new release of the source arrives, you import it into the cvs.texi(,7488) repository with the same @code{import} command that you used to set up cvs.texi(,7489) the repository in the first place. The only difference is that you cvs.texi(,7490) specify a different release tag this time: cvs.texi(,7491) cvs.texi(,7492) @example cvs.texi(,7493) $ tar xfz wdiff-0.05.tar.gz cvs.texi(,7494) $ cd wdiff-0.05 cvs.texi(,7495) $ cvs import -m "Import of FSF v. 0.05" fsf/wdiff FSF_DIST WDIFF_0_05 cvs.texi(,7496) @end example cvs.texi(,7497) cvs.texi(,7498) For files that have not been modified locally, the newly created cvs.texi(,7499) revision becomes the head revision. If you have made local cvs.texi(,7500) changes, @code{import} will warn you that you must merge the changes cvs.texi(,7501) into the main trunk, and tell you to use @samp{checkout -j} to do so: cvs.texi(,7502) cvs.texi(,7503) @c FIXME: why "wdiff" here and "fsf/wdiff" in the cvs.texi(,7504) @c "import"? I think the assumption is that one has cvs.texi(,7505) @c "wdiff fsf/wdiff" or some such in modules, but it cvs.texi(,7506) @c would be better to not use modules in this example. cvs.texi(,7507) @example cvs.texi(,7508) $ cvs checkout -jFSF_DIST:yesterday -jFSF_DIST wdiff cvs.texi(,7509) @end example cvs.texi(,7510) cvs.texi(,7511) @noindent cvs.texi(,7512) The above command will check out the latest revision of cvs.texi(,7513) @samp{wdiff}, merging the changes made on the vendor branch @samp{FSF_DIST} cvs.texi(,7514) since yesterday into the working copy. If any conflicts arise during cvs.texi(,7515) the merge they should be resolved in the normal way (@pxref{Conflicts cvs.texi(,7516) example}). Then, the modified files may be committed. cvs.texi(,7517) cvs.texi(,7518) However, it is much better to use the two release tags rather than using cvs.texi(,7519) a date on the branch as suggested above: cvs.texi(,7520) cvs.texi(,7521) @example cvs.texi(,7522) $ cvs checkout -jWDIFF_0_04 -jWDIFF_0_05 wdiff cvs.texi(,7523) @end example cvs.texi(,7524) cvs.texi(,7525) @noindent cvs.texi(,7526) The reason this is better is that cvs.texi(,7527) using a date, as suggested above, assumes that you do cvs.texi(,7528) not import more than one release of a product per day. cvs.texi(,7529) More importantly, using the release tags allows @sc{cvs} to detect files cvs.texi(,7530) that were removed between the two vendor releases and mark them for cvs.texi(,7531) removal. Since @code{import} has no way to detect removed files, you cvs.texi(,7532) should do a merge like this even if @code{import} doesn't tell you to. cvs.texi(,7533) cvs.texi(,7534) @node Reverting local changes cvs.texi(,7535) @section Reverting to the latest vendor release cvs.texi(,7536) cvs.texi(,7537) You can also revert local changes completely and return cvs.texi(,7538) to the latest vendor release by changing the `head' cvs.texi(,7539) revision back to the vendor branch on all files. For cvs.texi(,7540) example, if you have a checked-out copy of the sources cvs.texi(,7541) in @file{~/work.d/wdiff}, and you want to revert to the cvs.texi(,7542) vendor's version for all the files in that directory, cvs.texi(,7543) you would type: cvs.texi(,7544) cvs.texi(,7545) @example cvs.texi(,7546) $ cd ~/work.d/wdiff cvs.texi(,7547) $ cvs admin -bWDIFF . cvs.texi(,7548) @end example cvs.texi(,7549) cvs.texi(,7550) @noindent cvs.texi(,7551) You must specify the @samp{-bWDIFF} without any space cvs.texi(,7552) after the @samp{-b}. @xref{admin options}. cvs.texi(,7553) cvs.texi(,7554) @node Binary files in imports cvs.texi(,7555) @section How to handle binary files with cvs import cvs.texi(,7556) cvs.texi(,7557) Use the @samp{-k} wrapper option to tell import which cvs.texi(,7558) files are binary. @xref{Wrappers}. cvs.texi(,7559) cvs.texi(,7560) @node Keywords in imports cvs.texi(,7561) @section How to handle keyword substitution with cvs import cvs.texi(,7562) cvs.texi(,7563) The sources which you are importing may contain cvs.texi(,7564) keywords (@pxref{Keyword substitution}). For example, cvs.texi(,7565) the vendor may use @sc{cvs} or some other system cvs.texi(,7566) which uses similar keyword expansion syntax. If you cvs.texi(,7567) just import the files in the default fashion, then cvs.texi(,7568) the keyword expansions supplied by the vendor will cvs.texi(,7569) be replaced by keyword expansions supplied by your cvs.texi(,7570) own copy of @sc{cvs}. It may be more convenient to cvs.texi(,7571) maintain the expansions supplied by the vendor, so cvs.texi(,7572) that this information can supply information about cvs.texi(,7573) the sources that you imported from the vendor. cvs.texi(,7574) cvs.texi(,7575) To maintain the keyword expansions supplied by the cvs.texi(,7576) vendor, supply the @samp{-ko} option to @code{cvs cvs.texi(,7577) import} the first time you import the file. cvs.texi(,7578) This will turn off keyword expansion cvs.texi(,7579) for that file entirely, so if you want to be more cvs.texi(,7580) selective you'll have to think about what you want cvs.texi(,7581) and use the @samp{-k} option to @code{cvs update} or cvs.texi(,7582) @code{cvs admin} as appropriate. cvs.texi(,7583) @c Supplying -ko to import if the file already existed cvs.texi(,7584) @c has no effect. Not clear to me whether it should cvs.texi(,7585) @c or not. cvs.texi(,7586) cvs.texi(,7587) @node Multiple vendor branches cvs.texi(,7588) @section Multiple vendor branches cvs.texi(,7589) cvs.texi(,7590) All the examples so far assume that there is only one cvs.texi(,7591) vendor from which you are getting sources. In some cvs.texi(,7592) situations you might get sources from a variety of cvs.texi(,7593) places. For example, suppose that you are dealing with cvs.texi(,7594) a project where many different people and teams are cvs.texi(,7595) modifying the software. There are a variety of ways to cvs.texi(,7596) handle this, but in some cases you have a bunch of cvs.texi(,7597) source trees lying around and what you want to do more cvs.texi(,7598) than anything else is just to all put them in @sc{cvs} so cvs.texi(,7599) that you at least have them in one place. cvs.texi(,7600) cvs.texi(,7601) For handling situations in which there may be more than cvs.texi(,7602) one vendor, you may specify the @samp{-b} option to cvs.texi(,7603) @code{cvs import}. It takes as an argument the vendor cvs.texi(,7604) branch to import to. The default is @samp{-b 1.1.1}. cvs.texi(,7605) cvs.texi(,7606) For example, suppose that there are two teams, the red cvs.texi(,7607) team and the blue team, that are sending you sources. cvs.texi(,7608) You want to import the red team's efforts to branch cvs.texi(,7609) 1.1.1 and use the vendor tag RED. You want to import cvs.texi(,7610) the blue team's efforts to branch 1.1.3 and use the cvs.texi(,7611) vendor tag BLUE. So the commands you might use are: cvs.texi(,7612) cvs.texi(,7613) @example cvs.texi(,7614) $ cvs import dir RED RED_1-0 cvs.texi(,7615) $ cvs import -b 1.1.3 dir BLUE BLUE_1-5 cvs.texi(,7616) @end example cvs.texi(,7617) cvs.texi(,7618) Note that if your vendor tag does not match your cvs.texi(,7619) @samp{-b} option, @sc{cvs} will not detect this case! For cvs.texi(,7620) example, cvs.texi(,7621) cvs.texi(,7622) @example cvs.texi(,7623) $ cvs import -b 1.1.3 dir RED RED_1-0 cvs.texi(,7624) @end example cvs.texi(,7625) cvs.texi(,7626) @noindent cvs.texi(,7627) Be careful; this kind of mismatch is sure to sow cvs.texi(,7628) confusion or worse. I can't think of a useful purpose cvs.texi(,7629) for the ability to specify a mismatch here, but if you cvs.texi(,7630) discover such a use, don't. @sc{cvs} is likely to make this cvs.texi(,7631) an error in some future release. cvs.texi(,7632) cvs.texi(,7633) @c Probably should say more about the semantics of cvs.texi(,7634) @c multiple branches. What about the default branch? cvs.texi(,7635) @c What about joining (perhaps not as useful with cvs.texi(,7636) @c multiple branches, or perhaps it is. Either way cvs.texi(,7637) @c should be mentioned). cvs.texi(,7638) cvs.texi(,7639) @c I'm not sure about the best location for this. In cvs.texi(,7640) @c one sense, it might belong right after we've introduced cvs.texi(,7641) @c CVS's basic version control model, because people need cvs.texi(,7642) @c to figure out builds right away. The current location cvs.texi(,7643) @c is based on the theory that it kind of akin to the cvs.texi(,7644) @c "Revision management" section. cvs.texi(,7645) @node Builds cvs.texi(,7646) @chapter How your build system interacts with CVS cvs.texi(,7647) @cindex Builds cvs.texi(,7648) @cindex make cvs.texi(,7649) cvs.texi(,7650) As mentioned in the introduction, @sc{cvs} does not cvs.texi(,7651) contain software for building your software from source cvs.texi(,7652) code. This section describes how various aspects of cvs.texi(,7653) your build system might interact with @sc{cvs}. cvs.texi(,7654) cvs.texi(,7655) @c Is there a way to discuss this without reference to cvs.texi(,7656) @c tools other than CVS? I'm not sure there is; I cvs.texi(,7657) @c wouldn't think that people who learn CVS first would cvs.texi(,7658) @c even have this concern. cvs.texi(,7659) One common question, especially from people who are cvs.texi(,7660) accustomed to @sc{rcs}, is how to make their build get cvs.texi(,7661) an up to date copy of the sources. The answer to this cvs.texi(,7662) with @sc{cvs} is two-fold. First of all, since cvs.texi(,7663) @sc{cvs} itself can recurse through directories, there cvs.texi(,7664) is no need to modify your @file{Makefile} (or whatever cvs.texi(,7665) configuration file your build tool uses) to make sure cvs.texi(,7666) each file is up to date. Instead, just use two cvs.texi(,7667) commands, first @code{cvs -q update} and then cvs.texi(,7668) @code{make} or whatever the command is to invoke your cvs.texi(,7669) build tool. Secondly, you do not necessarily cvs.texi(,7670) @emph{want} to get a copy of a change someone else made cvs.texi(,7671) until you have finished your own work. One suggested cvs.texi(,7672) approach is to first update your sources, then cvs.texi(,7673) implement, build and cvs.texi(,7674) test the change you were thinking of, and then commit cvs.texi(,7675) your sources (updating first if necessary). By cvs.texi(,7676) periodically (in between changes, using the approach cvs.texi(,7677) just described) updating your entire tree, you ensure cvs.texi(,7678) that your sources are sufficiently up to date. cvs.texi(,7679) cvs.texi(,7680) @cindex Bill of materials cvs.texi(,7681) One common need is to record which versions of which cvs.texi(,7682) source files went into a particular build. This kind cvs.texi(,7683) of functionality is sometimes called @dfn{bill of cvs.texi(,7684) materials} or something similar. The best way to do cvs.texi(,7685) this with @sc{cvs} is to use the @code{tag} command to cvs.texi(,7686) record which versions went into a given build cvs.texi(,7687) (@pxref{Tags}). cvs.texi(,7688) cvs.texi(,7689) Using @sc{cvs} in the most straightforward manner cvs.texi(,7690) possible, each developer will have a copy of the entire cvs.texi(,7691) source tree which is used in a particular build. If cvs.texi(,7692) the source tree is small, or if developers are cvs.texi(,7693) geographically dispersed, this is the preferred cvs.texi(,7694) solution. In fact one approach for larger projects is cvs.texi(,7695) to break a project down into smaller cvs.texi(,7696) @c I say subsystem instead of module because they may or cvs.texi(,7697) @c may not use the modules file. cvs.texi(,7698) separately-compiled subsystems, and arrange a way of cvs.texi(,7699) releasing them internally so that each developer need cvs.texi(,7700) check out only those subsystems which they are cvs.texi(,7701) actively working on. cvs.texi(,7702) cvs.texi(,7703) Another approach is to set up a structure which allows cvs.texi(,7704) developers to have their own copies of some files, and cvs.texi(,7705) for other files to access source files from a central cvs.texi(,7706) location. Many people have come up with some such a cvs.texi(,7707) @c two such people are paul@sander.cupertino.ca.us (for cvs.texi(,7708) @c a previous employer) cvs.texi(,7709) @c and gtornblo@senet.abb.se (spicm and related tools), cvs.texi(,7710) @c but as far as I know cvs.texi(,7711) @c no one has nicely packaged or released such a system (or cvs.texi(,7712) @c instructions for constructing one). cvs.texi(,7713) system using features such as the symbolic link feature cvs.texi(,7714) found in many operating systems, or the @code{VPATH} cvs.texi(,7715) feature found in many versions of @code{make}. One build cvs.texi(,7716) tool which is designed to help with this kind of thing cvs.texi(,7717) is Odin (see cvs.texi(,7718) @code{ftp://ftp.cs.colorado.edu/pub/distribs/odin}). cvs.texi(,7719) @c Should we be saying more about Odin? Or how you use cvs.texi(,7720) @c it with CVS? Also, the Prime Time Freeware for Unix cvs.texi(,7721) @c disk (see http://www.ptf.com/) has Odin (with a nice cvs.texi(,7722) @c paragraph summarizing it on the web), so that might be a cvs.texi(,7723) @c semi-"official" place to point people. cvs.texi(,7724) @c cvs.texi(,7725) @c Of course, many non-CVS systems have this kind of cvs.texi(,7726) @c functionality, for example OSF's ODE cvs.texi(,7727) @c (http://www.osf.org/ode/) or mk cvs.texi(,7728) @c (http://www.grin.net/~pzi/mk-3.18.4.docs/mk_toc.html cvs.texi(,7729) @c He has changed providers in the past; a search engine search cvs.texi(,7730) @c for "Peter Ziobrzynski" probably won't get too many cvs.texi(,7731) @c spurious hits :-). A more stable URL might be cvs.texi(,7732) @c ftp://ftp.uu.net/pub/cmvc/mk). But I'm not sure cvs.texi(,7733) @c there is any point in mentioning them here unless they cvs.texi(,7734) @c can work with CVS. cvs.texi(,7735) cvs.texi(,7736) @c --------------------------------------------------------------------- cvs.texi(,7737) @node Special Files cvs.texi(,7738) @chapter Special Files cvs.texi(,7739) cvs.texi(,7740) @cindex Special files cvs.texi(,7741) @cindex Device nodes cvs.texi(,7742) @cindex Ownership, saving in CVS cvs.texi(,7743) @cindex Permissions, saving in CVS cvs.texi(,7744) @cindex Hard links cvs.texi(,7745) @cindex Symbolic links cvs.texi(,7746) cvs.texi(,7747) In normal circumstances, @sc{cvs} works only with regular cvs.texi(,7748) files. Every file in a project is assumed to be cvs.texi(,7749) persistent; it must be possible to open, read and close cvs.texi(,7750) them; and so on. @sc{cvs} also ignores file permissions and cvs.texi(,7751) ownerships, leaving such issues to be resolved by the cvs.texi(,7752) developer at installation time. In other words, it is cvs.texi(,7753) not possible to "check in" a device into a repository; cvs.texi(,7754) if the device file cannot be opened, @sc{cvs} will refuse to cvs.texi(,7755) handle it. Files also lose their ownerships and cvs.texi(,7756) permissions during repository transactions. cvs.texi(,7757) cvs.texi(,7838) cvs.texi(,7839) @c --------------------------------------------------------------------- cvs.texi(,7840) @node CVS commands cvs.texi(,7841) @appendix Guide to CVS commands cvs.texi(,7842) cvs.texi(,7843) This appendix describes the overall structure of cvs.texi(,7844) @sc{cvs} commands, and describes some commands in cvs.texi(,7845) detail (others are described elsewhere; for a quick cvs.texi(,7846) reference to @sc{cvs} commands, @pxref{Invoking CVS}). cvs.texi(,7847) @c The idea is that we want to move the commands which cvs.texi(,7848) @c are described here into the main body of the manual, cvs.texi(,7849) @c in the process reorganizing the manual to be cvs.texi(,7850) @c organized around what the user wants to do, not cvs.texi(,7851) @c organized around CVS commands. cvs.texi(,7852) @c cvs.texi(,7853) @c Note that many users do expect a manual which is cvs.texi(,7854) @c organized by command. At least some users do. cvs.texi(,7855) @c One good addition to the "organized by command" cvs.texi(,7856) @c section (if any) would be "see also" links. cvs.texi(,7857) @c The awk manual might be a good example; it has a cvs.texi(,7858) @c reference manual which is more verbose than Invoking cvs.texi(,7859) @c CVS but probably somewhat less verbose than CVS cvs.texi(,7860) @c Commands. cvs.texi(,7861) cvs.texi(,7862) @menu cvs.texi(,7863) * Structure:: Overall structure of CVS commands cvs.texi(,7864) * Exit status:: Indicating CVS's success or failure cvs.texi(,7865) * ~/.cvsrc:: Default options with the ~/.csvrc file cvs.texi(,7866) * Global options:: Options you give to the left of cvs_command cvs.texi(,7867) * Common options:: Options you give to the right of cvs_command cvs.texi(,7868) * admin:: Administration cvs.texi(,7869) * checkout:: Checkout sources for editing cvs.texi(,7870) * commit:: Check files into the repository cvs.texi(,7871) * diff:: Show differences between revisions cvs.texi(,7872) * export:: Export sources from CVS, similar to checkout cvs.texi(,7873) * history:: Show status of files and users cvs.texi(,7874) * import:: Import sources into CVS, using vendor branches cvs.texi(,7875) * log:: Show log messages for files cvs.texi(,7876) * rdiff:: 'patch' format diffs between releases cvs.texi(,7877) * release:: Indicate that a directory is no longer in use cvs.texi(,7878) * update:: Bring work tree in sync with repository cvs.texi(,7879) @end menu cvs.texi(,7880) cvs.texi(,7881) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,7882) @node Structure cvs.texi(,7883) @appendixsec Overall structure of CVS commands cvs.texi(,7884) @cindex Structure cvs.texi(,7885) @cindex CVS command structure cvs.texi(,7886) @cindex Command structure cvs.texi(,7887) @cindex Format of CVS commands cvs.texi(,7888) cvs.texi(,7889) The overall format of all @sc{cvs} commands is: cvs.texi(,7890) cvs.texi(,7891) @example cvs.texi(,7892) cvs [ cvs_options ] cvs_command [ command_options ] [ command_args ] cvs.texi(,7893) @end example cvs.texi(,7894) cvs.texi(,7895) @table @code cvs.texi(,7896) @item cvs cvs.texi(,7897) The name of the @sc{cvs} program. cvs.texi(,7898) cvs.texi(,7899) @item cvs_options cvs.texi(,7900) Some options that affect all sub-commands of @sc{cvs}. These are cvs.texi(,7901) described below. cvs.texi(,7902) cvs.texi(,7903) @item cvs_command cvs.texi(,7904) One of several different sub-commands. Some of the commands have cvs.texi(,7905) aliases that can be used instead; those aliases are noted in the cvs.texi(,7906) reference manual for that command. There are only two situations cvs.texi(,7907) where you may omit @samp{cvs_command}: @samp{cvs -H} elicits a cvs.texi(,7908) list of available commands, and @samp{cvs -v} displays version cvs.texi(,7909) information on @sc{cvs} itself. cvs.texi(,7910) cvs.texi(,7911) @item command_options cvs.texi(,7912) Options that are specific for the command. cvs.texi(,7913) cvs.texi(,7914) @item command_args cvs.texi(,7915) Arguments to the commands. cvs.texi(,7916) @end table cvs.texi(,7917) cvs.texi(,7918) There is unfortunately some confusion between cvs.texi(,7919) @code{cvs_options} and @code{command_options}. cvs.texi(,7920) @samp{-l}, when given as a @code{cvs_option}, only cvs.texi(,7921) affects some of the commands. When it is given as a cvs.texi(,7922) @code{command_option} is has a different meaning, and cvs.texi(,7923) is accepted by more commands. In other words, do not cvs.texi(,7924) take the above categorization too seriously. Look at cvs.texi(,7925) the documentation instead. cvs.texi(,7926) cvs.texi(,7927) @node Exit status cvs.texi(,7928) @appendixsec CVS's exit status cvs.texi(,7929) @cindex Exit status, of CVS cvs.texi(,7930) cvs.texi(,7931) @sc{cvs} can indicate to the calling environment whether it cvs.texi(,7932) succeeded or failed by setting its @dfn{exit status}. cvs.texi(,7933) The exact way of testing the exit status will vary from cvs.texi(,7934) one operating system to another. For example in a unix cvs.texi(,7935) shell script the @samp{$?} variable will be 0 if the cvs.texi(,7936) last command returned a successful exit status, or cvs.texi(,7937) greater than 0 if the exit status indicated failure. cvs.texi(,7938) cvs.texi(,7939) If @sc{cvs} is successful, it returns a successful status; cvs.texi(,7940) if there is an error, it prints an error message and cvs.texi(,7941) returns a failure status. The one exception to this is cvs.texi(,7942) the @code{cvs diff} command. It will return a cvs.texi(,7943) successful status if it found no differences, or a cvs.texi(,7944) failure status if there were differences or if there cvs.texi(,7945) was an error. Because this behavior provides no good cvs.texi(,7946) way to detect errors, in the future it is possible that cvs.texi(,7947) @code{cvs diff} will be changed to behave like the cvs.texi(,7948) other @sc{cvs} commands. cvs.texi(,7949) @c It might seem like checking whether cvs -q diff cvs.texi(,7950) @c produces empty or non-empty output can tell whether cvs.texi(,7951) @c there were differences or not. But it seems like cvs.texi(,7952) @c there are cases with output but no differences cvs.texi(,7953) @c (testsuite basica-8b). It is not clear to me how cvs.texi(,7954) @c useful it is for a script to be able to check cvs.texi(,7955) @c whether there were differences. cvs.texi(,7956) @c FIXCVS? In previous versions of CVS, cvs diff cvs.texi(,7957) @c returned 0 for no differences, 1 for differences, or cvs.texi(,7958) @c 2 for errors. Is this behavior worth trying to cvs.texi(,7959) @c bring back (but what does it mean for VMS?)? cvs.texi(,7960) cvs.texi(,7961) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,7962) @node ~/.cvsrc cvs.texi(,7963) @appendixsec Default options and the ~/.cvsrc file cvs.texi(,7964) @cindex .cvsrc file cvs.texi(,7965) @cindex Option defaults cvs.texi(,7966) cvs.texi(,7967) There are some @code{command_options} that are used so cvs.texi(,7968) often that you might have set up an alias or some other cvs.texi(,7969) means to make sure you always specify that option. One cvs.texi(,7970) example (the one that drove the implementation of the cvs.texi(,7971) @file{.cvsrc} support, actually) is that many people find the cvs.texi(,7972) default output of the @samp{diff} command to be very cvs.texi(,7973) hard to read, and that either context diffs or unidiffs cvs.texi(,7974) are much easier to understand. cvs.texi(,7975) cvs.texi(,7976) The @file{~/.cvsrc} file is a way that you can add cvs.texi(,7977) default options to @code{cvs_commands} within cvs, cvs.texi(,7978) instead of relying on aliases or other shell scripts. cvs.texi(,7979) cvs.texi(,7980) The format of the @file{~/.cvsrc} file is simple. The cvs.texi(,7981) file is searched for a line that begins with the same cvs.texi(,7982) name as the @code{cvs_command} being executed. If a cvs.texi(,7983) match is found, then the remainder of the line is split cvs.texi(,7984) up (at whitespace characters) into separate options and cvs.texi(,7985) added to the command arguments @emph{before} any cvs.texi(,7986) options from the command line. cvs.texi(,7987) cvs.texi(,7988) If a command has two names (e.g., @code{checkout} and cvs.texi(,7989) @code{co}), the official name, not necessarily the one cvs.texi(,7990) used on the command line, will be used to match against cvs.texi(,7991) the file. So if this is the contents of the user's cvs.texi(,7992) @file{~/.cvsrc} file: cvs.texi(,7993) cvs.texi(,7994) @example cvs.texi(,7995) log -N cvs.texi(,7996) diff -uN cvs.texi(,7997) rdiff -u cvs.texi(,7998) update -Pd cvs.texi(,7999) checkout -P cvs.texi(,8000) release -d cvs.texi(,8001) @end example cvs.texi(,8002) cvs.texi(,8003) @noindent cvs.texi(,8004) the command @samp{cvs checkout foo} would have the cvs.texi(,8005) @samp{-P} option added to the arguments, as well as cvs.texi(,8006) @samp{cvs co foo}. cvs.texi(,8007) cvs.texi(,8008) With the example file above, the output from @samp{cvs cvs.texi(,8009) diff foobar} will be in unidiff format. @samp{cvs diff cvs.texi(,8010) -c foobar} will provide context diffs, as usual. cvs.texi(,8011) Getting "old" format diffs would be slightly more cvs.texi(,8012) complicated, because @code{diff} doesn't have an option cvs.texi(,8013) to specify use of the "old" format, so you would need cvs.texi(,8014) @samp{cvs -f diff foobar}. cvs.texi(,8015) cvs.texi(,8016) In place of the command name you can use @code{cvs} to cvs.texi(,8017) specify global options (@pxref{Global options}). For cvs.texi(,8018) example the following line in @file{.cvsrc} cvs.texi(,8019) cvs.texi(,8020) @example cvs.texi(,8021) cvs -z6 cvs.texi(,8022) @end example cvs.texi(,8023) cvs.texi(,8024) @noindent cvs.texi(,8025) causes @sc{cvs} to use compression level 6. cvs.texi(,8026) cvs.texi(,8027) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,8028) @node Global options cvs.texi(,8029) @appendixsec Global options cvs.texi(,8030) @cindex Options, global cvs.texi(,8031) @cindex Global options cvs.texi(,8032) @cindex Left-hand options cvs.texi(,8033) cvs.texi(,8034) The available @samp{cvs_options} (that are given to the cvs.texi(,8035) left of @samp{cvs_command}) are: cvs.texi(,8036) cvs.texi(,8037) @table @code cvs.texi(,8038) @item --allow-root=@var{rootdir} cvs.texi(,8039) Specify legal @sc{cvsroot} directory. See cvs.texi(,8040) @ref{Password authentication server}. cvs.texi(,8041) cvs.texi(,8042) @cindex Authentication, stream cvs.texi(,8043) @cindex Stream authentication cvs.texi(,8044) @item -a cvs.texi(,8045) Authenticate all communication between the client and cvs.texi(,8046) the server. Only has an effect on the @sc{cvs} client. cvs.texi(,8047) As of this writing, this is only implemented when using cvs.texi(,8048) a GSSAPI connection (@pxref{GSSAPI authenticated}). cvs.texi(,8049) Authentication prevents certain sorts of attacks cvs.texi(,8050) involving hijacking the active @sc{tcp} connection. cvs.texi(,8051) Enabling authentication does not enable encryption. cvs.texi(,8052) cvs.texi(,8053) @cindex RCSBIN, overriding cvs.texi(,8054) @cindex Overriding RCSBIN cvs.texi(,8055) @item -b @var{bindir} cvs.texi(,8056) In @sc{cvs} 1.9.18 and older, this specified that cvs.texi(,8057) @sc{rcs} programs are in the @var{bindir} directory. cvs.texi(,8058) Current versions of @sc{cvs} do not run @sc{rcs} cvs.texi(,8059) programs; for compatibility this option is accepted, cvs.texi(,8060) but it does nothing. cvs.texi(,8061) cvs.texi(,8062) @cindex TMPDIR, overriding cvs.texi(,8063) @cindex Overriding TMPDIR cvs.texi(,8064) @item -T @var{tempdir} cvs.texi(,8065) Use @var{tempdir} as the directory where temporary files are cvs.texi(,8066) located. Overrides the setting of the @code{$TMPDIR} environment cvs.texi(,8067) variable and any precompiled directory. This parameter should be cvs.texi(,8068) specified as an absolute pathname. cvs.texi(,8069) (When running client/server, @samp{-T} affects only the local process; cvs.texi(,8070) specifying @samp{-T} for the client has no effect on the server and cvs.texi(,8071) vice versa.) cvs.texi(,8072) cvs.texi(,8073) @cindex CVSROOT, overriding cvs.texi(,8074) @cindex Overriding CVSROOT cvs.texi(,8075) @item -d @var{cvs_root_directory} cvs.texi(,8076) Use @var{cvs_root_directory} as the root directory cvs.texi(,8077) pathname of the repository. Overrides the setting of cvs.texi(,8078) the @code{$CVSROOT} environment variable. @xref{Repository}. cvs.texi(,8079) cvs.texi(,8080) @cindex EDITOR, overriding cvs.texi(,8081) @cindex Overriding EDITOR cvs.texi(,8082) @item -e @var{editor} cvs.texi(,8083) Use @var{editor} to enter revision log information. Overrides the cvs.texi(,8084) setting of the @code{$CVSEDITOR} and @code{$EDITOR} cvs.texi(,8085) environment variables. For more information, see cvs.texi(,8086) @ref{Committing your changes}. cvs.texi(,8087) cvs.texi(,8088) @item -f cvs.texi(,8089) Do not read the @file{~/.cvsrc} file. This cvs.texi(,8090) option is most often used because of the cvs.texi(,8091) non-orthogonality of the @sc{cvs} option set. For cvs.texi(,8092) example, the @samp{cvs log} option @samp{-N} (turn off cvs.texi(,8093) display of tag names) does not have a corresponding cvs.texi(,8094) option to turn the display on. So if you have cvs.texi(,8095) @samp{-N} in the @file{~/.cvsrc} entry for @samp{log}, cvs.texi(,8096) you may need to use @samp{-f} to show the tag names. cvs.texi(,8097) cvs.texi(,8098) @item -H cvs.texi(,8099) @itemx --help cvs.texi(,8100) Display usage information about the specified @samp{cvs_command} cvs.texi(,8101) (but do not actually execute the command). If you don't specify cvs.texi(,8102) a command name, @samp{cvs -H} displays overall help for cvs.texi(,8103) @sc{cvs}, including a list of other help options. cvs.texi(,8104) @c It seems to me it is better to document it this way cvs.texi(,8105) @c rather than trying to update this documentation cvs.texi(,8106) @c every time that we add a --help-foo option. But cvs.texi(,8107) @c perhaps that is confusing... cvs.texi(,8108) cvs.texi(,8109) @item -l cvs.texi(,8110) Do not log the @samp{cvs_command} in the command history (but execute it cvs.texi(,8111) anyway). @xref{history}, for information on command history. cvs.texi(,8112) cvs.texi(,8113) @cindex Read-only repository mode cvs.texi(,8114) @item -R cvs.texi(,8115) Turns on read-only repository mode. This allows one to check out from a cvs.texi(,8116) read-only repository, such as within an anoncvs server, or from a CDROM cvs.texi(,8117) repository. cvs.texi(,8118) cvs.texi(,8119) Same effect as if the @code{CVSREADONLYFS} environment cvs.texi(,8120) variable is set. Using @samp{-R} can also considerably cvs.texi(,8121) speed up checkout's over NFS. cvs.texi(,8122) cvs.texi(,8123) @cindex Read-only mode cvs.texi(,8124) @item -n cvs.texi(,8125) Do not change any files. Attempt to execute the cvs.texi(,8126) @samp{cvs_command}, but only to issue reports; do not remove, cvs.texi(,8127) update, or merge any existing files, or create any new files. cvs.texi(,8128) cvs.texi(,8129) Note that @sc{cvs} will not necessarily produce exactly cvs.texi(,8130) the same output as without @samp{-n}. In some cases cvs.texi(,8131) the output will be the same, but in other cases cvs.texi(,8132) @sc{cvs} will skip some of the processing that would cvs.texi(,8133) have been required to produce the exact same output. cvs.texi(,8134) cvs.texi(,8135) @item -Q cvs.texi(,8136) Cause the command to be really quiet; the command will only cvs.texi(,8137) generate output for serious problems. cvs.texi(,8138) cvs.texi(,8139) @item -q cvs.texi(,8140) Cause the command to be somewhat quiet; informational messages, cvs.texi(,8141) such as reports of recursion through subdirectories, are cvs.texi(,8142) suppressed. cvs.texi(,8143) cvs.texi(,8144) @cindex Read-only files, and -r cvs.texi(,8145) @item -r cvs.texi(,8146) Make new working files read-only. Same effect cvs.texi(,8147) as if the @code{$CVSREAD} environment variable is set cvs.texi(,8148) (@pxref{Environment variables}). The default is to cvs.texi(,8149) make working files writable, unless watches are on cvs.texi(,8150) (@pxref{Watches}). cvs.texi(,8151) cvs.texi(,8152) @item -s @var{variable}=@var{value} cvs.texi(,8153) Set a user variable (@pxref{Variables}). cvs.texi(,8154) cvs.texi(,8155) @cindex Trace cvs.texi(,8156) @item -t cvs.texi(,8157) Trace program execution; display messages showing the steps of cvs.texi(,8158) @sc{cvs} activity. Particularly useful with @samp{-n} to explore the cvs.texi(,8159) potential impact of an unfamiliar command. cvs.texi(,8160) cvs.texi(,8161) @item -v cvs.texi(,8162) @item --version cvs.texi(,8163) Display version and copyright information for @sc{cvs}. cvs.texi(,8164) cvs.texi(,8165) @cindex CVSREAD, overriding cvs.texi(,8166) @cindex Overriding CVSREAD cvs.texi(,8167) @item -w cvs.texi(,8168) Make new working files read-write. Overrides the cvs.texi(,8169) setting of the @code{$CVSREAD} environment variable. cvs.texi(,8170) Files are created read-write by default, unless @code{$CVSREAD} is cvs.texi(,8171) set or @samp{-r} is given. cvs.texi(,8172) @c Note that -w only overrides -r and CVSREAD; it has cvs.texi(,8173) @c no effect on files which are readonly because of cvs.texi(,8174) @c "cvs watch on". My guess is that is the way it cvs.texi(,8175) @c should be (or should "cvs -w get" on a watched file cvs.texi(,8176) @c be the same as a get and a cvs edit?), but I'm not cvs.texi(,8177) @c completely sure whether to document it this way. cvs.texi(,8178) cvs.texi(,8179) @item -x cvs.texi(,8180) @cindex Encryption cvs.texi(,8181) Encrypt all communication between the client and the cvs.texi(,8182) server. Only has an effect on the @sc{cvs} client. As cvs.texi(,8183) of this writing, this is only implemented when using a cvs.texi(,8184) GSSAPI connection (@pxref{GSSAPI authenticated}) or a cvs.texi(,8185) Kerberos connection (@pxref{Kerberos authenticated}). cvs.texi(,8186) Enabling encryption implies that message traffic is cvs.texi(,8187) also authenticated. Encryption support is not cvs.texi(,8188) available by default; it must be enabled using a cvs.texi(,8189) special configure option, @file{--enable-encryption}, cvs.texi(,8190) when you build @sc{cvs}. cvs.texi(,8191) cvs.texi(,8192) @item -z @var{gzip-level} cvs.texi(,8193) @cindex Compression cvs.texi(,8194) @cindex Gzip cvs.texi(,8195) Set the compression level. cvs.texi(,8196) Valid levels are 1 (high speed, low compression) to cvs.texi(,8197) 9 (low speed, high compression), or 0 to disable cvs.texi(,8198) compression (the default). cvs.texi(,8199) Only has an effect on the @sc{cvs} client. cvs.texi(,8200) cvs.texi(,8201) @end table cvs.texi(,8202) cvs.texi(,8203) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,8204) @node Common options cvs.texi(,8205) @appendixsec Common command options cvs.texi(,8206) @cindex Common options cvs.texi(,8207) @cindex Right-hand options cvs.texi(,8208) cvs.texi(,8209) This section describes the @samp{command_options} that cvs.texi(,8210) are available across several @sc{cvs} commands. These cvs.texi(,8211) options are always given to the right of cvs.texi(,8212) @samp{cvs_command}. Not all cvs.texi(,8213) commands support all of these options; each option is cvs.texi(,8214) only supported for commands where it makes sense. cvs.texi(,8215) However, when a command has one of these options you cvs.texi(,8216) can almost always count on the same behavior of the cvs.texi(,8217) option as in other commands. (Other command options, cvs.texi(,8218) which are listed with the individual commands, may have cvs.texi(,8219) different behavior from one @sc{cvs} command to the other). cvs.texi(,8220) cvs.texi(,8221) @strong{Note: the @samp{history} command is an exception; it supports cvs.texi(,8222) many options that conflict even with these standard options.} cvs.texi(,8223) cvs.texi(,8224) @table @code cvs.texi(,8225) @cindex Dates cvs.texi(,8226) @cindex Time cvs.texi(,8227) @cindex Specifying dates cvs.texi(,8228) @item -D @var{date_spec} cvs.texi(,8229) Use the most recent revision no later than @var{date_spec}. cvs.texi(,8230) @var{date_spec} is a single argument, a date description cvs.texi(,8231) specifying a date in the past. cvs.texi(,8232) cvs.texi(,8233) The specification is @dfn{sticky} when you use it to make a cvs.texi(,8234) private copy of a source file; that is, when you get a working cvs.texi(,8235) file using @samp{-D}, @sc{cvs} records the date you specified, so that cvs.texi(,8236) further updates in the same directory will use the same date cvs.texi(,8237) (for more information on sticky tags/dates, @pxref{Sticky tags}). cvs.texi(,8238) cvs.texi(,8239) @samp{-D} is available with the @code{annotate}, @code{checkout}, cvs.texi(,8240) @code{diff}, @code{export}, @code{history}, cvs.texi(,8241) @code{rdiff}, @code{rtag}, @code{tag}, and @code{update} commands. cvs.texi(,8242) (The @code{history} command uses this option in a cvs.texi(,8243) slightly different way; @pxref{history options}). cvs.texi(,8244) cvs.texi(,8245) @c What other formats should we accept? I don't want cvs.texi(,8246) @c to start accepting a whole mess of non-standard cvs.texi(,8247) @c new formats (there are a lot which are in wide use in cvs.texi(,8248) @c one context or another), but practicality does cvs.texi(,8249) @c dictate some level of flexibility. cvs.texi(,8250) @c * POSIX.2 (e.g. touch, ls output, date) and other cvs.texi(,8251) @c POSIX and/or de facto unix standards (e.g. at). The cvs.texi(,8252) @c practice here is too inconsistent to be of any use. cvs.texi(,8253) @c * VMS dates. This is not a formal standard, but cvs.texi(,8254) @c there is a published specification (see SYS$ASCTIM cvs.texi(,8255) @c and SYS$BINTIM in the _VMS System Services Reference cvs.texi(,8256) @c Manual_), it is implemented consistently in VMS cvs.texi(,8257) @c utilities, and VMS users will expect CVS running on cvs.texi(,8258) @c VMS to support this format (and if we're going to do cvs.texi(,8259) @c that, better to make CVS support it on all cvs.texi(,8260) @c platforms. Maybe). cvs.texi(,8261) @c cvs.texi(,8262) @c NOTE: The tar manual has some documentation for cvs.texi(,8263) @c getdate.y (just for our info; we don't want to cvs.texi(,8264) @c attempt to document all the formats accepted by cvs.texi(,8265) @c getdate.y). cvs.texi(,8266) @c cvs.texi(,8267) @c One more note: In output, CVS should consistently cvs.texi(,8268) @c use one date format, and that format should be one that cvs.texi(,8269) @c it accepts in input as well. The former isn't cvs.texi(,8270) @c really true (see survey below), and I'm not cvs.texi(,8271) @c sure that either of those formats is accepted in cvs.texi(,8272) @c input. cvs.texi(,8273) @c cvs.texi(,8274) @c cvs log cvs.texi(,8275) @c current 1996/01/02 13:45:31 cvs.texi(,8276) @c Internet 02 Jan 1996 13:45:31 UT cvs.texi(,8277) @c ISO 1996-01-02 13:45:31 cvs.texi(,8278) @c cvs ann cvs.texi(,8279) @c current 02-Jan-96 cvs.texi(,8280) @c Internet-like 02 Jan 96 cvs.texi(,8281) @c ISO 96-01-02 cvs.texi(,8282) @c cvs status cvs.texi(,8283) @c current Tue Jun 11 02:54:53 1996 cvs.texi(,8284) @c Internet [Tue,] 11 Jun 1996 02:54:53 cvs.texi(,8285) @c ISO 1996-06-11 02:54:53 cvs.texi(,8286) @c note: date possibly should be omitted entirely for cvs.texi(,8287) @c other reasons. cvs.texi(,8288) @c cvs editors cvs.texi(,8289) @c current Tue Jun 11 02:54:53 1996 GMT cvs.texi(,8290) @c cvs history cvs.texi(,8291) @c current 06/11 02:54 +0000 cvs.texi(,8292) @c any others? cvs.texi(,8293) @c There is a good chance the proper solution has to cvs.texi(,8294) @c involve at least some level of letting the user cvs.texi(,8295) @c decide which format (with the default being the cvs.texi(,8296) @c formats CVS has always used; changing these might be cvs.texi(,8297) @c _very_ disruptive since scripts may very well be cvs.texi(,8298) @c parsing them). cvs.texi(,8299) @c cvs.texi(,8300) @c Another random bit of prior art concerning dates is cvs.texi(,8301) @c the strptime function which takes templates such as cvs.texi(,8302) @c "%m/%d/%y", and apparent a variant of getdate() cvs.texi(,8303) @c which also honors them. See cvs.texi(,8304) @c X/Open CAE Specification, System Interfaces and cvs.texi(,8305) @c Headers Issue 4, Version 2 (September 1994), in the cvs.texi(,8306) @c entry for getdate() on page 231 cvs.texi(,8307) cvs.texi(,8308) @cindex Timezone, in input cvs.texi(,8309) @cindex Zone, time, in input cvs.texi(,8310) A wide variety of date formats are supported by cvs.texi(,8311) @sc{cvs}. The most standard ones are ISO8601 (from the cvs.texi(,8312) International Standards Organization) and the Internet cvs.texi(,8313) e-mail standard (specified in RFC822 as amended by cvs.texi(,8314) RFC1123). cvs.texi(,8315) cvs.texi(,8316) @c Probably should be doing more to spell out just what cvs.texi(,8317) @c the rules are, rather than just giving examples. cvs.texi(,8318) @c But I want to keep this simple too. cvs.texi(,8319) @c So I don't know.... cvs.texi(,8320) @c A few specific issues: (1) Maybe should reassure cvs.texi(,8321) @c people that years after 2000 cvs.texi(,8322) @c work (they are in the testsuite, so they do indeed cvs.texi(,8323) @c work). (2) What do two digit years cvs.texi(,8324) @c mean? Where do we accept them? (3) Local times can cvs.texi(,8325) @c be ambiguous or nonexistent if they fall during the cvs.texi(,8326) @c hour when daylight savings time goes into or out of cvs.texi(,8327) @c effect. Pretty obscure, so I'm not at all sure we cvs.texi(,8328) @c should be documenting the behavior in that case. cvs.texi(,8329) ISO8601 dates have many variants but a few examples cvs.texi(,8330) are: cvs.texi(,8331) cvs.texi(,8332) @example cvs.texi(,8333) 1972-09-24 cvs.texi(,8334) 1972-09-24 20:05 cvs.texi(,8335) @end example cvs.texi(,8336) @c I doubt we really accept all ISO8601 format dates cvs.texi(,8337) @c (for example, decimal hours like 1972-09-24 20,2) cvs.texi(,8338) @c I'm not sure we should, many of them are pretty cvs.texi(,8339) @c bizarre and it has lots of gratuitous multiple ways cvs.texi(,8340) @c to specify the same thing. cvs.texi(,8341) cvs.texi(,8342) There are a lot more ISO8601 date formats, and @sc{cvs} cvs.texi(,8343) accepts many of them, but you probably don't want to cvs.texi(,8344) hear the @emph{whole} long story :-). cvs.texi(,8345) cvs.texi(,8346) @c Citing a URL here is kind of problematic given how cvs.texi(,8347) @c much they change and people who have old versions of cvs.texi(,8348) @c this manual, but in case we want to reinstate an cvs.texi(,8349) @c ISO8601 URL, a few are: cvs.texi(,8350) @c http://www.saqqara.demon.co.uk/datefmt.htm cvs.texi(,8351) @c http://www.cl.cam.ac.uk/~mgk25/iso-time.html cvs.texi(,8352) @c Citing some other ISO8601 source is probably even cvs.texi(,8353) @c worse :-). cvs.texi(,8354) cvs.texi(,8355) In addition to the dates allowed in Internet e-mail cvs.texi(,8356) itself, @sc{cvs} also allows some of the fields to be cvs.texi(,8357) omitted. For example: cvs.texi(,8358) @c FIXME: Need to figure out better, and document, cvs.texi(,8359) @c what we want to allow the user to omit. cvs.texi(,8360) @c NOTE: "omit" does not imply "reorder". cvs.texi(,8361) @c FIXME: Need to cite a web page describing how to get cvs.texi(,8362) @c RFC's. cvs.texi(,8363) cvs.texi(,8364) @example cvs.texi(,8365) 24 Sep 1972 20:05 cvs.texi(,8366) 24 Sep cvs.texi(,8367) @end example cvs.texi(,8368) cvs.texi(,8369) The date is interpreted as being in the cvs.texi(,8370) local timezone, unless a specific timezone is cvs.texi(,8371) specified. cvs.texi(,8372) cvs.texi(,8373) These two date formats are preferred. However, cvs.texi(,8374) @sc{cvs} currently accepts a wide variety of other date cvs.texi(,8375) formats. They are intentionally not documented here in cvs.texi(,8376) any detail, and future versions of @sc{cvs} might not cvs.texi(,8377) accept all of them. cvs.texi(,8378) @c We should document and testsuite "now" and cvs.texi(,8379) @c "yesterday". "now" is mentioned in the FAQ and cvs.texi(,8380) @c "yesterday" is mentioned in this document (and the cvs.texi(,8381) @c message from "cvs import" suggesting a merge cvs.texi(,8382) @c command). What else? Probably some/all of the "3 cvs.texi(,8383) @c weeks ago" family. cvs.texi(,8384) @c cvs.texi(,8385) @c Maybe at cvs.texi(,8386) @c some point have CVS start give warnings on "unofficial" cvs.texi(,8387) @c formats (many of which might be typos or user cvs.texi(,8388) @c misunderstandings, and/or formats people never/rarely cvs.texi(,8389) @c use to specify dates)? cvs.texi(,8390) cvs.texi(,8391) One such format is cvs.texi(,8392) @code{@var{month}/@var{day}/@var{year}}. This may cvs.texi(,8393) confuse people who are accustomed to having the month cvs.texi(,8394) and day in the other order; @samp{1/4/96} is January 4, cvs.texi(,8395) not April 1. cvs.texi(,8396) cvs.texi(,8397) Remember to quote the argument to the @samp{-D} cvs.texi(,8398) flag so that your shell doesn't interpret spaces as cvs.texi(,8399) argument separators. A command using the @samp{-D} cvs.texi(,8400) flag can look like this: cvs.texi(,8401) cvs.texi(,8402) @example cvs.texi(,8403) $ cvs diff -D "1 hour ago" cvs.texinfo cvs.texi(,8404) @end example cvs.texi(,8405) cvs.texi(,8406) @cindex Forcing a tag match cvs.texi(,8407) @item -f cvs.texi(,8408) When you specify a particular date or tag to @sc{cvs} commands, they cvs.texi(,8409) normally ignore files that do not contain the tag (or did not cvs.texi(,8410) exist prior to the date) that you specified. Use the @samp{-f} option cvs.texi(,8411) if you want files retrieved even when there is no match for the cvs.texi(,8412) tag or date. (The most recent revision of the file cvs.texi(,8413) will be used). cvs.texi(,8414) cvs.texi(,8415) Note that even with @samp{-f}, a tag that you specify cvs.texi(,8416) must exist (that is, in some file, not necessary in cvs.texi(,8417) every file). This is so that @sc{cvs} will continue to cvs.texi(,8418) give an error if you mistype a tag name. cvs.texi(,8419) cvs.texi(,8420) @need 800 cvs.texi(,8421) @samp{-f} is available with these commands: cvs.texi(,8422) @code{annotate}, @code{checkout}, @code{export}, cvs.texi(,8423) @code{rdiff}, @code{rtag}, and @code{update}. cvs.texi(,8424) cvs.texi(,8425) @strong{WARNING: The @code{commit} and @code{remove} cvs.texi(,8426) commands also have a cvs.texi(,8427) @samp{-f} option, but it has a different behavior for cvs.texi(,8428) those commands. See @ref{commit options}, and cvs.texi(,8429) @ref{Removing files}.} cvs.texi(,8430) cvs.texi(,8431) @item -k @var{kflag} cvs.texi(,8432) Override the default processing of RCS keywords other than cvs.texi(,8433) @samp{-kb}. @xref{Keyword substitution}, for the meaning of cvs.texi(,8434) @var{kflag}. Used with the @code{checkout} and @code{update} cvs.texi(,8435) commands, your @var{kflag} specification is cvs.texi(,8436) @dfn{sticky}; that is, when you use this option cvs.texi(,8437) with a @code{checkout} or @code{update} command, cvs.texi(,8438) @sc{cvs} associates your selected @var{kflag} with any files cvs.texi(,8439) it operates on, and continues to use that @var{kflag} with future cvs.texi(,8440) commands on the same files until you specify otherwise. cvs.texi(,8441) cvs.texi(,8442) The @samp{-k} option is available with the @code{add}, cvs.texi(,8443) @code{checkout}, @code{diff}, @code{export}, @code{import} and cvs.texi(,8444) @code{update} commands. cvs.texi(,8445) cvs.texi(,8446) @strong{WARNING: Prior to CVS version 1.12.2, the @samp{-k} flag cvs.texi(,8447) overrode the @samp{-kb} indication for a binary file. This could cvs.texi(,8448) sometimes corrupt binary files. @xref{Merging and keywords}, for cvs.texi(,8449) more.} cvs.texi(,8450) cvs.texi(,8451) @item -l cvs.texi(,8452) Local; run only in current working directory, rather than cvs.texi(,8453) recursing through subdirectories. cvs.texi(,8454) cvs.texi(,8455) Available with the following commands: @code{annotate}, @code{checkout}, cvs.texi(,8456) @code{commit}, @code{diff}, @code{edit}, @code{editors}, @code{export}, cvs.texi(,8457) @code{log}, @code{rdiff}, @code{remove}, @code{rtag}, cvs.texi(,8458) @code{status}, @code{tag}, @code{unedit}, @code{update}, @code{watch}, cvs.texi(,8459) and @code{watchers}. cvs.texi(,8460) cvs.texi(,8461) @cindex Editor, avoiding invocation of cvs.texi(,8462) @cindex Avoiding editor invocation cvs.texi(,8463) @item -m @var{message} cvs.texi(,8464) Use @var{message} as log information, instead of cvs.texi(,8465) invoking an editor. cvs.texi(,8466) cvs.texi(,8467) Available with the following commands: @code{add}, cvs.texi(,8468) @code{commit} and @code{import}. cvs.texi(,8469) cvs.texi(,8470) @item -n cvs.texi(,8471) Do not run any tag program. (A program can be cvs.texi(,8472) specified to run in the modules cvs.texi(,8473) database (@pxref{modules}); this option bypasses it). cvs.texi(,8474) cvs.texi(,8475) @strong{Note: this is not the same as the @samp{cvs -n} cvs.texi(,8476) program option, which you can specify to the left of a cvs command!} cvs.texi(,8477) cvs.texi(,8478) Available with the @code{checkout}, @code{commit}, @code{export}, cvs.texi(,8479) and @code{rtag} commands. cvs.texi(,8480) cvs.texi(,8481) @item -P cvs.texi(,8482) Prune empty directories. See @ref{Removing directories}. cvs.texi(,8483) cvs.texi(,8484) @item -p cvs.texi(,8485) Pipe the files retrieved from the repository to standard output, cvs.texi(,8486) rather than writing them in the current directory. Available cvs.texi(,8487) with the @code{checkout} and @code{update} commands. cvs.texi(,8488) cvs.texi(,8489) @item -R cvs.texi(,8490) Process directories recursively. This is on by default. cvs.texi(,8491) cvs.texi(,8492) Available with the following commands: @code{annotate}, @code{checkout}, cvs.texi(,8493) @code{commit}, @code{diff}, @code{edit}, @code{editors}, @code{export}, cvs.texi(,8494) @code{rdiff}, @code{remove}, @code{rtag}, cvs.texi(,8495) @code{status}, @code{tag}, @code{unedit}, @code{update}, @code{watch}, cvs.texi(,8496) and @code{watchers}. cvs.texi(,8497) cvs.texi(,8498) @item -r @var{tag} cvs.texi(,8499) @cindex HEAD, special tag cvs.texi(,8500) @cindex BASE, special tag cvs.texi(,8501) Use the revision specified by the @var{tag} argument instead of the cvs.texi(,8502) default @dfn{head} revision. As well as arbitrary tags defined cvs.texi(,8503) with the @code{tag} or @code{rtag} command, two special tags are cvs.texi(,8504) always available: @samp{HEAD} refers to the most recent version cvs.texi(,8505) available in the repository, and @samp{BASE} refers to the cvs.texi(,8506) revision you last checked out into the current working directory. cvs.texi(,8507) cvs.texi(,8508) @c FIXME: What does HEAD really mean? I believe that cvs.texi(,8509) @c the current answer is the head of the default branch cvs.texi(,8510) @c for all cvs commands except diff. For diff, it cvs.texi(,8511) @c seems to be (a) the head of the trunk (or the default cvs.texi(,8512) @c branch?) if there is no sticky tag, (b) the head of the cvs.texi(,8513) @c branch for the sticky tag, if there is a sticky tag. cvs.texi(,8514) @c (b) is ugly as it differs cvs.texi(,8515) @c from what HEAD means for other commands, but people cvs.texi(,8516) @c and/or scripts are quite possibly used to it. cvs.texi(,8517) @c See "head" tests in sanity.sh. cvs.texi(,8518) @c Probably the best fix is to introduce two new cvs.texi(,8519) @c special tags, ".thead" for the head of the trunk, cvs.texi(,8520) @c and ".bhead" for the head of the current branch. cvs.texi(,8521) @c Then deprecate HEAD. This has the advantage of cvs.texi(,8522) @c not surprising people with a change to HEAD, and a cvs.texi(,8523) @c side benefit of also phasing out the poorly-named cvs.texi(,8524) @c HEAD (see discussion of reserved tag names in node cvs.texi(,8525) @c "Tags"). Of course, .thead and .bhead should be cvs.texi(,8526) @c carefully implemented (with the implementation the cvs.texi(,8527) @c same for "diff" as for everyone else), test cases cvs.texi(,8528) @c written (similar to the ones in "head"), new tests cvs.texi(,8529) @c cases written for things like default branches, &c. cvs.texi(,8530) cvs.texi(,8531) The tag specification is sticky when you use this cvs.texi(,8532) @c option cvs.texi(,8533) with @code{checkout} or @code{update} to make your own cvs.texi(,8534) copy of a file: @sc{cvs} remembers the tag and continues to use it on cvs.texi(,8535) future update commands, until you specify otherwise (for more information cvs.texi(,8536) on sticky tags/dates, @pxref{Sticky tags}). cvs.texi(,8537) cvs.texi(,8538) The tag can be either a symbolic or numeric tag, as cvs.texi(,8539) described in @ref{Tags}, or the name of a branch, as cvs.texi(,8540) described in @ref{Branching and merging}. cvs.texi(,8541) cvs.texi(,8542) Specifying the @samp{-q} global option along with the cvs.texi(,8543) @samp{-r} command option is often useful, to suppress cvs.texi(,8544) the warning messages when the @sc{rcs} file cvs.texi(,8545) does not contain the specified tag. cvs.texi(,8546) cvs.texi(,8547) @strong{Note: this is not the same as the overall @samp{cvs -r} option, cvs.texi(,8548) which you can specify to the left of a @sc{cvs} command!} cvs.texi(,8549) cvs.texi(,8550) @samp{-r} is available with the @code{checkout}, @code{commit}, cvs.texi(,8551) @code{diff}, @code{history}, @code{export}, @code{rdiff}, cvs.texi(,8552) @code{rtag}, and @code{update} commands. cvs.texi(,8553) cvs.texi(,8554) @item -W cvs.texi(,8555) Specify file names that should be filtered. You can cvs.texi(,8556) use this option repeatedly. The spec can be a file cvs.texi(,8557) name pattern of the same type that you can specify in cvs.texi(,8558) the @file{.cvswrappers} file. cvs.texi(,8559) Available with the following commands: @code{import}, cvs.texi(,8560) and @code{update}. cvs.texi(,8561) cvs.texi(,8562) @end table cvs.texi(,8563) cvs.texi(,8564) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,8565) @node admin cvs.texi(,8566) @appendixsec admin---Administration cvs.texi(,8567) @cindex Admin (subcommand) cvs.texi(,8568) cvs.texi(,8569) @itemize @bullet cvs.texi(,8570) @item cvs.texi(,8571) Requires: repository, working directory. cvs.texi(,8572) @item cvs.texi(,8573) Changes: repository. cvs.texi(,8574) @item cvs.texi(,8575) Synonym: rcs cvs.texi(,8576) @end itemize cvs.texi(,8577) cvs.texi(,8578) This is the @sc{cvs} interface to assorted cvs.texi(,8579) administrative facilities. Some of them have cvs.texi(,8580) questionable usefulness for @sc{cvs} but exist for cvs.texi(,8581) historical purposes. Some of the questionable options cvs.texi(,8582) are likely to disappear in the future. This command cvs.texi(,8583) @emph{does} work recursively, so extreme care should be cvs.texi(,8584) used. cvs.texi(,8585) cvs.texi(,8586) @cindex cvsadmin cvs.texi(,8587) @cindex UserAdminOptions, in CVSROOT/config cvs.texi(,8588) On unix, if there is a group named @code{cvsadmin}, cvs.texi(,8589) only members of that group can run @code{cvs admin} cvs.texi(,8590) commands, except for those specified using the cvs.texi(,8591) @code{UserAdminOptions} configuration option in the cvs.texi(,8592) @file{CVSROOT/config} file. Options specified using cvs.texi(,8593) @code{UserAdminOptions} can be run by any user. See cvs.texi(,8594) @ref{config} for more on @code{UserAdminOptions}. cvs.texi(,8595) cvs.texi(,8596) The @code{cvsadmin} group should exist on the server, cvs.texi(,8597) or any system running the non-client/server @sc{cvs}. cvs.texi(,8598) To disallow @code{cvs admin} for all users, create a cvs.texi(,8599) group with no users in it. On NT, the @code{cvsadmin} cvs.texi(,8600) feature does not exist and all users cvs.texi(,8601) can run @code{cvs admin}. cvs.texi(,8602) cvs.texi(,8603) @menu cvs.texi(,8604) * admin options:: admin options cvs.texi(,8605) @end menu cvs.texi(,8606) cvs.texi(,8607) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,8608) @node admin options cvs.texi(,8609) @appendixsubsec admin options cvs.texi(,8610) cvs.texi(,8611) Some of these options have questionable usefulness for cvs.texi(,8612) @sc{cvs} but exist for historical purposes. Some even cvs.texi(,8613) make it impossible to use @sc{cvs} until you undo the cvs.texi(,8614) effect! cvs.texi(,8615) cvs.texi(,8616) @table @code cvs.texi(,8617) @item -A@var{oldfile} cvs.texi(,8618) Might not work together with @sc{cvs}. Append the cvs.texi(,8619) access list of @var{oldfile} to the access list of the cvs.texi(,8620) @sc{rcs} file. cvs.texi(,8621) cvs.texi(,8622) @item -a@var{logins} cvs.texi(,8623) Might not work together with @sc{cvs}. Append the cvs.texi(,8624) login names appearing in the comma-separated list cvs.texi(,8625) @var{logins} to the access list of the @sc{rcs} file. cvs.texi(,8626) cvs.texi(,8627) @item -b[@var{rev}] cvs.texi(,8628) Set the default branch to @var{rev}. In @sc{cvs}, you cvs.texi(,8629) normally do not manipulate default branches; sticky cvs.texi(,8630) tags (@pxref{Sticky tags}) are a better way to decide cvs.texi(,8631) which branch you want to work on. There is one reason cvs.texi(,8632) to run @code{cvs admin -b}: to revert to the vendor's cvs.texi(,8633) version when using vendor branches (@pxref{Reverting cvs.texi(,8634) local changes}). cvs.texi(,8635) There can be no space between @samp{-b} and its argument. cvs.texi(,8636) @c Hmm, we don't document the usage where rev is cvs.texi(,8637) @c omitted. Maybe that usage can/should be deprecated cvs.texi(,8638) @c (and replaced with -bHEAD or something?) (so we can toss cvs.texi(,8639) @c the optional argument). Note that -bHEAD does not cvs.texi(,8640) @c work, as of 17 Sep 1997, but probably will once "cvs cvs.texi(,8641) @c admin" is internal to CVS. cvs.texi(,8642) cvs.texi(,8643) @cindex Comment leader cvs.texi(,8644) @item -c@var{string} cvs.texi(,8645) Sets the comment leader to @var{string}. The comment cvs.texi(,8646) leader is not used by current versions of @sc{cvs} or cvs.texi(,8647) @sc{rcs} 5.7. Therefore, you can almost surely not cvs.texi(,8648) worry about it. @xref{Keyword substitution}. cvs.texi(,8649) cvs.texi(,8650) @item -e[@var{logins}] cvs.texi(,8651) Might not work together with @sc{cvs}. Erase the login cvs.texi(,8652) names appearing in the comma-separated list cvs.texi(,8653) @var{logins} from the access list of the RCS file. If cvs.texi(,8654) @var{logins} is omitted, erase the entire access list. cvs.texi(,8655) There can be no space between @samp{-e} and its argument. cvs.texi(,8656) cvs.texi(,8657) @item -I cvs.texi(,8658) Run interactively, even if the standard input is not a cvs.texi(,8659) terminal. This option does not work with the cvs.texi(,8660) client/server @sc{cvs} and is likely to disappear in cvs.texi(,8661) a future release of @sc{cvs}. cvs.texi(,8662) cvs.texi(,8663) @item -i cvs.texi(,8664) Useless with @sc{cvs}. This creates and initializes a cvs.texi(,8665) new @sc{rcs} file, without depositing a revision. With cvs.texi(,8666) @sc{cvs}, add files with the @code{cvs add} command cvs.texi(,8667) (@pxref{Adding files}). cvs.texi(,8668) cvs.texi(,8669) @item -k@var{subst} cvs.texi(,8670) Set the default keyword cvs.texi(,8671) substitution to @var{subst}. @xref{Keyword cvs.texi(,8672) substitution}. Giving an explicit @samp{-k} option to cvs.texi(,8673) @code{cvs update}, @code{cvs export}, or @code{cvs cvs.texi(,8674) checkout} overrides this default. cvs.texi(,8675) cvs.texi(,8676) @item -l[@var{rev}] cvs.texi(,8677) Lock the revision with number @var{rev}. If a branch cvs.texi(,8678) is given, lock the latest revision on that branch. If cvs.texi(,8679) @var{rev} is omitted, lock the latest revision on the cvs.texi(,8680) default branch. There can be no space between cvs.texi(,8681) @samp{-l} and its argument. cvs.texi(,8682) cvs.texi(,8683) This can be used in conjunction with the cvs.texi(,8684) @file{rcslock.pl} script in the @file{contrib} cvs.texi(,8685) directory of the @sc{cvs} source distribution to cvs.texi(,8686) provide reserved checkouts (where only one user can be cvs.texi(,8687) editing a given file at a time). See the comments in cvs.texi(,8688) that file for details (and see the @file{README} file cvs.texi(,8689) in that directory for disclaimers about the unsupported cvs.texi(,8690) nature of contrib). According to comments in that cvs.texi(,8691) file, locking must set to strict (which is the default). cvs.texi(,8692) cvs.texi(,8693) @item -L cvs.texi(,8694) Set locking to strict. Strict locking means that the cvs.texi(,8695) owner of an RCS file is not exempt from locking for cvs.texi(,8696) checkin. For use with @sc{cvs}, strict locking must be cvs.texi(,8697) set; see the discussion under the @samp{-l} option above. cvs.texi(,8698) cvs.texi(,8699) @cindex Changing a log message cvs.texi(,8700) @cindex Replacing a log message cvs.texi(,8701) @cindex Correcting a log message cvs.texi(,8702) @cindex Fixing a log message cvs.texi(,8703) @cindex Log message, correcting cvs.texi(,8704) @item -m@var{rev}:@var{msg} cvs.texi(,8705) Replace the log message of revision @var{rev} with cvs.texi(,8706) @var{msg}. cvs.texi(,8707) cvs.texi(,8708) @c The rcs -M option, to suppress sending mail, has never been cvs.texi(,8709) @c documented as a cvs admin option. cvs.texi(,8710) cvs.texi(,8711) @item -N@var{name}[:[@var{rev}]] cvs.texi(,8712) Act like @samp{-n}, except override any previous cvs.texi(,8713) assignment of @var{name}. For use with magic branches, cvs.texi(,8714) see @ref{Magic branch numbers}. cvs.texi(,8715) cvs.texi(,8716) @item -n@var{name}[:[@var{rev}]] cvs.texi(,8717) Associate the symbolic name @var{name} with the branch cvs.texi(,8718) or revision @var{rev}. It is normally better to use cvs.texi(,8719) @samp{cvs tag} or @samp{cvs rtag} instead. Delete the cvs.texi(,8720) symbolic name if both @samp{:} and @var{rev} are cvs.texi(,8721) omitted; otherwise, print an error message if cvs.texi(,8722) @var{name} is already associated with another number. cvs.texi(,8723) If @var{rev} is symbolic, it is expanded before cvs.texi(,8724) association. A @var{rev} consisting of a branch number cvs.texi(,8725) followed by a @samp{.} stands for the current latest cvs.texi(,8726) revision in the branch. A @samp{:} with an empty cvs.texi(,8727) @var{rev} stands for the current latest revision on the cvs.texi(,8728) default branch, normally the trunk. For example, cvs.texi(,8729) @samp{cvs admin -n@var{name}:} associates @var{name} with the cvs.texi(,8730) current latest revision of all the RCS files; cvs.texi(,8731) this contrasts with @samp{cvs admin -n@var{name}:$} which cvs.texi(,8732) associates @var{name} with the revision numbers cvs.texi(,8733) extracted from keyword strings in the corresponding cvs.texi(,8734) working files. cvs.texi(,8735) cvs.texi(,8736) @cindex Deleting revisions cvs.texi(,8737) @cindex Outdating revisions cvs.texi(,8738) @cindex Saving space cvs.texi(,8739) @item -o@var{range} cvs.texi(,8740) Deletes (@dfn{outdates}) the revisions given by cvs.texi(,8741) @var{range}. cvs.texi(,8742) cvs.texi(,8743) Note that this command can be quite dangerous unless cvs.texi(,8744) you know @emph{exactly} what you are doing (for example cvs.texi(,8745) see the warnings below about how the cvs.texi(,8746) @var{rev1}:@var{rev2} syntax is confusing). cvs.texi(,8747) cvs.texi(,8748) If you are short on disc this option might help you. cvs.texi(,8749) But think twice before using it---there is no way short cvs.texi(,8750) of restoring the latest backup to undo this command! cvs.texi(,8751) If you delete different revisions than you planned, cvs.texi(,8752) either due to carelessness or (heaven forbid) a @sc{cvs} cvs.texi(,8753) bug, there is no opportunity to correct the error cvs.texi(,8754) before the revisions are deleted. It probably would be cvs.texi(,8755) a good idea to experiment on a copy of the repository cvs.texi(,8756) first. cvs.texi(,8757) cvs.texi(,8758) Specify @var{range} in one of the following ways: cvs.texi(,8759) cvs.texi(,8760) @table @code cvs.texi(,8761) @item @var{rev1}::@var{rev2} cvs.texi(,8762) Collapse all revisions between rev1 and rev2, so that cvs.texi(,8763) @sc{cvs} only stores the differences associated with going cvs.texi(,8764) from rev1 to rev2, not intermediate steps. For cvs.texi(,8765) example, after @samp{-o 1.3::1.5} one can retrieve cvs.texi(,8766) revision 1.3, revision 1.5, or the differences to get cvs.texi(,8767) from 1.3 to 1.5, but not the revision 1.4, or the cvs.texi(,8768) differences between 1.3 and 1.4. Other examples: cvs.texi(,8769) @samp{-o 1.3::1.4} and @samp{-o 1.3::1.3} have no cvs.texi(,8770) effect, because there are no intermediate revisions to cvs.texi(,8771) remove. cvs.texi(,8772) cvs.texi(,8773) @item ::@var{rev} cvs.texi(,8774) Collapse revisions between the beginning of the branch cvs.texi(,8775) containing @var{rev} and @var{rev} itself. The cvs.texi(,8776) branchpoint and @var{rev} are left intact. For cvs.texi(,8777) example, @samp{-o ::1.3.2.6} deletes revision 1.3.2.1, cvs.texi(,8778) revision 1.3.2.5, and everything in between, but leaves cvs.texi(,8779) 1.3 and 1.3.2.6 intact. cvs.texi(,8780) cvs.texi(,8781) @item @var{rev}:: cvs.texi(,8782) Collapse revisions between @var{rev} and the end of the cvs.texi(,8783) branch containing @var{rev}. Revision @var{rev} is cvs.texi(,8784) left intact but the head revision is deleted. cvs.texi(,8785) cvs.texi(,8786) @item @var{rev} cvs.texi(,8787) Delete the revision @var{rev}. For example, @samp{-o cvs.texi(,8788) 1.3} is equivalent to @samp{-o 1.2::1.4}. cvs.texi(,8789) cvs.texi(,8790) @item @var{rev1}:@var{rev2} cvs.texi(,8791) Delete the revisions from @var{rev1} to @var{rev2}, cvs.texi(,8792) inclusive, on the same branch. One will not be able to cvs.texi(,8793) retrieve @var{rev1} or @var{rev2} or any of the cvs.texi(,8794) revisions in between. For example, the command cvs.texi(,8795) @samp{cvs admin -oR_1_01:R_1_02 .} is rarely useful. cvs.texi(,8796) It means to delete revisions up to, and including, the cvs.texi(,8797) tag R_1_02. But beware! If there are files that have not cvs.texi(,8798) changed between R_1_02 and R_1_03 the file will have cvs.texi(,8799) @emph{the same} numerical revision number assigned to cvs.texi(,8800) the tags R_1_02 and R_1_03. So not only will it be cvs.texi(,8801) impossible to retrieve R_1_02; R_1_03 will also have to cvs.texi(,8802) be restored from the tapes! In most cases you want to cvs.texi(,8803) specify @var{rev1}::@var{rev2} instead. cvs.texi(,8804) cvs.texi(,8805) @item :@var{rev} cvs.texi(,8806) Delete revisions from the beginning of the cvs.texi(,8807) branch containing @var{rev} up to and including cvs.texi(,8808) @var{rev}. cvs.texi(,8809) cvs.texi(,8810) @item @var{rev}: cvs.texi(,8811) Delete revisions from revision @var{rev}, including cvs.texi(,8812) @var{rev} itself, to the end of the branch containing cvs.texi(,8813) @var{rev}. cvs.texi(,8814) @end table cvs.texi(,8815) cvs.texi(,8816) None of the revisions to be deleted may have cvs.texi(,8817) branches or locks. cvs.texi(,8818) cvs.texi(,8819) If any of the revisions to be deleted have symbolic cvs.texi(,8820) names, and one specifies one of the @samp{::} syntaxes, cvs.texi(,8821) then @sc{cvs} will give an error and not delete any cvs.texi(,8822) revisions. If you really want to delete both the cvs.texi(,8823) symbolic names and the revisions, first delete the cvs.texi(,8824) symbolic names with @code{cvs tag -d}, then run cvs.texi(,8825) @code{cvs admin -o}. If one specifies the cvs.texi(,8826) non-@samp{::} syntaxes, then @sc{cvs} will delete the cvs.texi(,8827) revisions but leave the symbolic names pointing to cvs.texi(,8828) nonexistent revisions. This behavior is preserved for cvs.texi(,8829) compatibility with previous versions of @sc{cvs}, but cvs.texi(,8830) because it isn't very useful, in the future it may cvs.texi(,8831) change to be like the @samp{::} case. cvs.texi(,8832) cvs.texi(,8833) Due to the way @sc{cvs} handles branches @var{rev} cvs.texi(,8834) cannot be specified symbolically if it is a branch. cvs.texi(,8835) @xref{Magic branch numbers}, for an explanation. cvs.texi(,8836) @c FIXME: is this still true? I suspect not. cvs.texi(,8837) cvs.texi(,8838) Make sure that no-one has checked out a copy of the cvs.texi(,8839) revision you outdate. Strange things will happen if he cvs.texi(,8840) starts to edit it and tries to check it back in. For cvs.texi(,8841) this reason, this option is not a good way to take back cvs.texi(,8842) a bogus commit; commit a new revision undoing the bogus cvs.texi(,8843) change instead (@pxref{Merging two revisions}). cvs.texi(,8844) cvs.texi(,8845) @item -q cvs.texi(,8846) Run quietly; do not print diagnostics. cvs.texi(,8847) cvs.texi(,8848) @item -s@var{state}[:@var{rev}] cvs.texi(,8849) Useful with @sc{cvs}. Set the state attribute of the cvs.texi(,8850) revision @var{rev} to @var{state}. If @var{rev} is a cvs.texi(,8851) branch number, assume the latest revision on that cvs.texi(,8852) branch. If @var{rev} is omitted, assume the latest cvs.texi(,8853) revision on the default branch. Any identifier is cvs.texi(,8854) acceptable for @var{state}. A useful set of states is cvs.texi(,8855) @samp{Exp} (for experimental), @samp{Stab} (for cvs.texi(,8856) stable), and @samp{Rel} (for released). By default, cvs.texi(,8857) the state of a new revision is set to @samp{Exp} when cvs.texi(,8858) it is created. The state is visible in the output from cvs.texi(,8859) @var{cvs log} (@pxref{log}), and in the cvs.texi(splitrcskeyword,8860) @samp{$@i{}Log$} and @samp{$@i{}State$} keywords cvs.texi(,8861) (@pxref{Keyword substitution}). Note that @sc{cvs} cvs.texi(,8862) uses the @code{dead} state for its own purposes; to cvs.texi(,8863) take a file to or from the @code{dead} state use cvs.texi(,8864) commands like @code{cvs remove} and @code{cvs add}, not cvs.texi(,8865) @code{cvs admin -s}. cvs.texi(,8866) cvs.texi(,8867) @item -t[@var{file}] cvs.texi(,8868) Useful with @sc{cvs}. Write descriptive text from the cvs.texi(,8869) contents of the named @var{file} into the RCS file, cvs.texi(,8870) deleting the existing text. The @var{file} pathname cvs.texi(,8871) may not begin with @samp{-}. The descriptive text can be seen in the cvs.texi(,8872) output from @samp{cvs log} (@pxref{log}). cvs.texi(,8873) There can be no space between @samp{-t} and its argument. cvs.texi(,8874) cvs.texi(,8875) If @var{file} is omitted, cvs.texi(,8876) obtain the text from standard input, terminated by cvs.texi(,8877) end-of-file or by a line containing @samp{.} by itself. cvs.texi(,8878) Prompt for the text if interaction is possible; see cvs.texi(,8879) @samp{-I}. cvs.texi(,8880) cvs.texi(,8881) @item -t-@var{string} cvs.texi(,8882) Similar to @samp{-t@var{file}}. Write descriptive text cvs.texi(,8883) from the @var{string} into the @sc{rcs} file, deleting cvs.texi(,8884) the existing text. cvs.texi(,8885) There can be no space between @samp{-t} and its argument. cvs.texi(,8886) cvs.texi(,8887) @c The rcs -T option, do not update last-mod time for cvs.texi(,8888) @c minor changes, has never been documented as a cvs.texi(,8889) @c cvs admin option. cvs.texi(,8890) cvs.texi(,8891) @item -U cvs.texi(,8892) Set locking to non-strict. Non-strict locking means cvs.texi(,8893) that the owner of a file need not lock a revision for cvs.texi(,8894) checkin. For use with @sc{cvs}, strict locking must be cvs.texi(,8895) set; see the discussion under the @samp{-l} option cvs.texi(,8896) above. cvs.texi(,8897) cvs.texi(,8898) @item -u[@var{rev}] cvs.texi(,8899) See the option @samp{-l} above, for a discussion of cvs.texi(,8900) using this option with @sc{cvs}. Unlock the revision cvs.texi(,8901) with number @var{rev}. If a branch is given, unlock cvs.texi(,8902) the latest revision on that branch. If @var{rev} is cvs.texi(,8903) omitted, remove the latest lock held by the caller. cvs.texi(,8904) Normally, only the locker of a revision may unlock it; cvs.texi(,8905) somebody else unlocking a revision breaks the lock. cvs.texi(,8906) This causes the original locker to be sent a @code{commit} cvs.texi(,8907) notification (@pxref{Getting Notified}). cvs.texi(,8908) There can be no space between @samp{-u} and its argument. cvs.texi(,8909) cvs.texi(,8910) @item -V@var{n} cvs.texi(,8911) In previous versions of @sc{cvs}, this option meant to cvs.texi(,8912) write an @sc{rcs} file which would be acceptable to cvs.texi(,8913) @sc{rcs} version @var{n}, but it is now obsolete and cvs.texi(,8914) specifying it will produce an error. cvs.texi(,8915) @c Note that -V without an argument has never been cvs.texi(,8916) @c documented as a cvs admin option. cvs.texi(,8917) cvs.texi(,8918) @item -x@var{suffixes} cvs.texi(,8919) In previous versions of @sc{cvs}, this was documented cvs.texi(,8920) as a way of specifying the names of the @sc{rcs} cvs.texi(,8921) files. However, @sc{cvs} has always required that the cvs.texi(,8922) @sc{rcs} files used by @sc{cvs} end in @samp{,v}, so cvs.texi(,8923) this option has never done anything useful. cvs.texi(,8924) cvs.texi(,8925) @c The rcs -z option, to specify the timezone, has cvs.texi(,8926) @c never been documented as a cvs admin option. cvs.texi(,8927) @end table cvs.texi(,8928) cvs.texi(,8929) cvs.texi(,8930) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,8931) @node checkout cvs.texi(,8932) @appendixsec checkout---Check out sources for editing cvs.texi(,8933) @cindex checkout (subcommand) cvs.texi(,8934) @cindex co (subcommand) cvs.texi(,8935) cvs.texi(,8936) @itemize @bullet cvs.texi(,8937) @item cvs.texi(,8938) Synopsis: checkout [options] modules@dots{} cvs.texi(,8939) @item cvs.texi(,8940) Requires: repository. cvs.texi(,8941) @item cvs.texi(,8942) Changes: working directory. cvs.texi(,8943) @item cvs.texi(,8944) Synonyms: co, get cvs.texi(,8945) @end itemize cvs.texi(,8946) cvs.texi(,8947) Create or update a working directory containing copies of the cvs.texi(,8948) source files specified by @var{modules}. You must execute cvs.texi(,8949) @code{checkout} before using most of the other @sc{cvs} cvs.texi(,8950) commands, since most of them operate on your working cvs.texi(,8951) directory. cvs.texi(,8952) cvs.texi(,8953) The @var{modules} are either cvs.texi(,8954) symbolic names for some cvs.texi(,8955) collection of source directories and files, or paths to cvs.texi(,8956) directories or files in the repository. The symbolic cvs.texi(,8957) names are defined in the @samp{modules} file. cvs.texi(,8958) @xref{modules}. cvs.texi(,8959) @c Needs an example, particularly of the non-"modules" cvs.texi(,8960) @c case but probably of both. cvs.texi(,8961) cvs.texi(,8962) @c FIXME: this seems like a very odd place to introduce cvs.texi(,8963) @c people to how CVS works. The bit about unreserved cvs.texi(,8964) @c checkouts is also misleading as it depends on how cvs.texi(,8965) @c things are set up. cvs.texi(,8966) Depending on the modules you specify, @code{checkout} may cvs.texi(,8967) recursively create directories and populate them with cvs.texi(,8968) the appropriate source files. You can then edit these cvs.texi(,8969) source files at any time (regardless of whether other cvs.texi(,8970) software developers are editing their own copies of the cvs.texi(,8971) sources); update them to include new changes applied by cvs.texi(,8972) others to the source repository; or commit your work as cvs.texi(,8973) a permanent change to the source repository. cvs.texi(,8974) cvs.texi(,8975) Note that @code{checkout} is used to create cvs.texi(,8976) directories. The top-level directory created is always cvs.texi(,8977) added to the directory where @code{checkout} is cvs.texi(,8978) invoked, and usually has the same name as the specified cvs.texi(,8979) module. In the case of a module alias, the created cvs.texi(,8980) sub-directory may have a different name, but you can be cvs.texi(,8981) sure that it will be a sub-directory, and that cvs.texi(,8982) @code{checkout} will show the relative path leading to cvs.texi(,8983) each file as it is extracted into your private work cvs.texi(,8984) area (unless you specify the @samp{-Q} global option). cvs.texi(,8985) cvs.texi(,8986) The files created by @code{checkout} are created cvs.texi(,8987) read-write, unless the @samp{-r} option to @sc{cvs} cvs.texi(,8988) (@pxref{Global options}) is specified, the cvs.texi(,8989) @code{CVSREAD} environment variable is specified cvs.texi(,8990) (@pxref{Environment variables}), or a watch is in cvs.texi(,8991) effect for that file (@pxref{Watches}). cvs.texi(,8992) cvs.texi(,8993) Note that running @code{checkout} on a directory that was already cvs.texi(,8994) built by a prior @code{checkout} is also permitted. cvs.texi(,8995) This is similar to specifying the @samp{-d} option cvs.texi(,8996) to the @code{update} command in the sense that new cvs.texi(,8997) directories that have been created in the repository cvs.texi(,8998) will appear in your work area. cvs.texi(,8999) However, @code{checkout} takes a module name whereas cvs.texi(,9000) @code{update} takes a directory name. Also cvs.texi(,9001) to use @code{checkout} this way it must be run from the cvs.texi(,9002) top level directory (where you originally ran cvs.texi(,9003) @code{checkout} from), so before you run cvs.texi(,9004) @code{checkout} to update an existing directory, don't cvs.texi(,9005) forget to change your directory to the top level cvs.texi(,9006) directory. cvs.texi(,9007) cvs.texi(,9008) For the output produced by the @code{checkout} command cvs.texi(,9009) see @ref{update output}. cvs.texi(,9010) cvs.texi(,9011) @menu cvs.texi(,9012) * checkout options:: checkout options cvs.texi(,9013) * checkout examples:: checkout examples cvs.texi(,9014) @end menu cvs.texi(,9015) cvs.texi(,9016) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,9017) @node checkout options cvs.texi(,9018) @appendixsubsec checkout options cvs.texi(,9019) cvs.texi(,9020) These standard options are supported by @code{checkout} cvs.texi(,9021) (@pxref{Common options}, for a complete description of cvs.texi(,9022) them): cvs.texi(,9023) cvs.texi(,9024) @table @code cvs.texi(,9025) @item -D @var{date} cvs.texi(,9026) Use the most recent revision no later than @var{date}. cvs.texi(,9027) This option is sticky, and implies @samp{-P}. See cvs.texi(,9028) @ref{Sticky tags}, for more information on sticky tags/dates. cvs.texi(,9029) cvs.texi(,9030) @item -f cvs.texi(,9031) Only useful with the @samp{-D @var{date}} or @samp{-r cvs.texi(,9032) @var{tag}} flags. If no matching revision is found, cvs.texi(,9033) retrieve the most recent revision (instead of ignoring cvs.texi(,9034) the file). cvs.texi(,9035) cvs.texi(,9036) @item -k @var{kflag} cvs.texi(,9037) Process keywords according to @var{kflag}. See cvs.texi(,9038) @ref{Keyword substitution}. cvs.texi(,9039) This option is sticky; future updates of cvs.texi(,9040) this file in this working directory will use the same cvs.texi(,9041) @var{kflag}. The @code{status} command can be viewed cvs.texi(,9042) to see the sticky options. See @ref{Invoking CVS}, for cvs.texi(,9043) more information on the @code{status} command. cvs.texi(,9044) cvs.texi(,9045) @item -l cvs.texi(,9046) Local; run only in current working directory. cvs.texi(,9047) cvs.texi(,9048) @item -n cvs.texi(,9049) Do not run any checkout program (as specified cvs.texi(,9050) with the @samp{-o} option in the modules file; cvs.texi(,9051) @pxref{modules}). cvs.texi(,9052) cvs.texi(,9053) @item -P cvs.texi(,9054) Prune empty directories. See @ref{Moving directories}. cvs.texi(,9055) cvs.texi(,9056) @item -p cvs.texi(,9057) Pipe files to the standard output. cvs.texi(,9058) cvs.texi(,9059) @item -R cvs.texi(,9060) Checkout directories recursively. This option is on by default. cvs.texi(,9061) cvs.texi(,9062) @item -r @var{tag} cvs.texi(,9063) Use revision @var{tag}. This option is sticky, and implies @samp{-P}. cvs.texi(,9064) See @ref{Sticky tags}, for more information on sticky tags/dates. cvs.texi(,9065) @end table cvs.texi(,9066) cvs.texi(,9067) In addition to those, you can use these special command cvs.texi(,9068) options with @code{checkout}: cvs.texi(,9069) cvs.texi(,9070) @table @code cvs.texi(,9071) @item -A cvs.texi(,9072) Reset any sticky tags, dates, or @samp{-k} options. cvs.texi(,9073) See @ref{Sticky tags}, for more information on sticky tags/dates. cvs.texi(,9074) cvs.texi(,9075) @item -c cvs.texi(,9076) Copy the module file, sorted, to the standard output, cvs.texi(,9077) instead of creating or modifying any files or cvs.texi(,9078) directories in your working directory. cvs.texi(,9079) cvs.texi(,9080) @item -d @var{dir} cvs.texi(,9081) Create a directory called @var{dir} for the working cvs.texi(,9082) files, instead of using the module name. In general, cvs.texi(,9083) using this flag is equivalent to using @samp{mkdir cvs.texi(,9084) @var{dir}; cd @var{dir}} followed by the checkout cvs.texi(,9085) command without the @samp{-d} flag. cvs.texi(,9086) cvs.texi(,9087) There is an important exception, however. It is very cvs.texi(,9088) convenient when checking out a single item to have the cvs.texi(,9089) output appear in a directory that doesn't contain empty cvs.texi(,9090) intermediate directories. In this case @emph{only}, cvs.texi(,9091) @sc{cvs} tries to ``shorten'' pathnames to avoid those empty cvs.texi(,9092) directories. cvs.texi(,9093) cvs.texi(,9094) For example, given a module @samp{foo} that contains cvs.texi(,9095) the file @samp{bar.c}, the command @samp{cvs co -d dir cvs.texi(,9096) foo} will create directory @samp{dir} and place cvs.texi(,9097) @samp{bar.c} inside. Similarly, given a module cvs.texi(,9098) @samp{bar} which has subdirectory @samp{baz} wherein cvs.texi(,9099) there is a file @samp{quux.c}, the command @samp{cvs co cvs.texi(,9100) -d dir bar/baz} will create directory @samp{dir} and cvs.texi(,9101) place @samp{quux.c} inside. cvs.texi(,9102) cvs.texi(,9103) Using the @samp{-N} flag will defeat this behavior. cvs.texi(,9104) Given the same module definitions above, @samp{cvs co cvs.texi(,9105) -N -d dir foo} will create directories @samp{dir/foo} cvs.texi(,9106) and place @samp{bar.c} inside, while @samp{cvs co -N -d cvs.texi(,9107) dir bar/baz} will create directories @samp{dir/bar/baz} cvs.texi(,9108) and place @samp{quux.c} inside. cvs.texi(,9109) cvs.texi(,9110) @item -j @var{tag} cvs.texi(,9111) With two @samp{-j} options, merge changes from the cvs.texi(,9112) revision specified with the first @samp{-j} option to cvs.texi(,9113) the revision specified with the second @samp{j} option, cvs.texi(,9114) into the working directory. cvs.texi(,9115) cvs.texi(,9116) With one @samp{-j} option, merge changes from the cvs.texi(,9117) ancestor revision to the revision specified with the cvs.texi(,9118) @samp{-j} option, into the working directory. The cvs.texi(,9119) ancestor revision is the common ancestor of the cvs.texi(,9120) revision which the working directory is based on, and cvs.texi(,9121) the revision specified in the @samp{-j} option. cvs.texi(,9122) cvs.texi(,9123) In addition, each -j option can contain an optional cvs.texi(,9124) date specification which, when used with branches, can cvs.texi(,9125) limit the chosen revision to one within a specific cvs.texi(,9126) date. An optional date is specified by adding a colon cvs.texi(,9127) (:) to the tag: cvs.texi(,9128) @samp{-j@var{Symbolic_Tag}:@var{Date_Specifier}}. cvs.texi(,9129) cvs.texi(,9130) @xref{Branching and merging}. cvs.texi(,9131) cvs.texi(,9132) @item -N cvs.texi(,9133) Only useful together with @samp{-d @var{dir}}. With cvs.texi(,9134) this option, @sc{cvs} will not ``shorten'' module paths cvs.texi(,9135) in your working directory when you check out a single cvs.texi(,9136) module. See the @samp{-d} flag for examples and a cvs.texi(,9137) discussion. cvs.texi(,9138) cvs.texi(,9139) @item -s cvs.texi(,9140) Like @samp{-c}, but include the status of all modules, cvs.texi(,9141) and sort it by the status string. @xref{modules}, for cvs.texi(,9142) info about the @samp{-s} option that is used inside the cvs.texi(,9143) modules file to set the module status. cvs.texi(,9144) @end table cvs.texi(,9145) cvs.texi(,9146) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,9147) @node checkout examples cvs.texi(,9148) @appendixsubsec checkout examples cvs.texi(,9149) cvs.texi(,9150) Get a copy of the module @samp{tc}: cvs.texi(,9151) cvs.texi(,9152) @example cvs.texi(,9153) $ cvs checkout tc cvs.texi(,9154) @end example cvs.texi(,9155) cvs.texi(,9156) Get a copy of the module @samp{tc} as it looked one day cvs.texi(,9157) ago: cvs.texi(,9158) cvs.texi(,9159) @example cvs.texi(,9160) $ cvs checkout -D yesterday tc cvs.texi(,9161) @end example cvs.texi(,9162) cvs.texi(,9163) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,9164) @node commit cvs.texi(,9165) @appendixsec commit---Check files into the repository cvs.texi(,9166) @cindex commit (subcommand) cvs.texi(,9167) cvs.texi(,9168) @itemize @bullet cvs.texi(,9169) @item cvs.texi(,9170) Synopsis: commit [-lnRf] [-m 'log_message' | cvs.texi(,9171) -F file] [-r revision] [files@dots{}] cvs.texi(,9172) @item cvs.texi(,9173) Requires: working directory, repository. cvs.texi(,9174) @item cvs.texi(,9175) Changes: repository. cvs.texi(,9176) @item cvs.texi(,9177) Synonym: ci cvs.texi(,9178) @end itemize cvs.texi(,9179) cvs.texi(,9180) Use @code{commit} when you want to incorporate changes cvs.texi(,9181) from your working source files into the source cvs.texi(,9182) repository. cvs.texi(,9183) cvs.texi(,9184) If you don't specify particular files to commit, all of cvs.texi(,9185) the files in your working current directory are cvs.texi(,9186) examined. @code{commit} is careful to change in the cvs.texi(,9187) repository only those files that you have really cvs.texi(,9188) changed. By default (or if you explicitly specify the cvs.texi(,9189) @samp{-R} option), files in subdirectories are also cvs.texi(,9190) examined and committed if they have changed; you can cvs.texi(,9191) use the @samp{-l} option to limit @code{commit} to the cvs.texi(,9192) current directory only. cvs.texi(,9193) cvs.texi(,9194) @code{commit} verifies that the selected files are up cvs.texi(,9195) to date with the current revisions in the source cvs.texi(,9196) repository; it will notify you, and exit without cvs.texi(,9197) committing, if any of the specified files must be made cvs.texi(,9198) current first with @code{update} (@pxref{update}). cvs.texi(,9199) @code{commit} does not call the @code{update} command cvs.texi(,9200) for you, but rather leaves that for you to do when the cvs.texi(,9201) time is right. cvs.texi(,9202) cvs.texi(,9203) When all is well, an editor is invoked to allow you to cvs.texi(,9204) enter a log message that will be written to one or more cvs.texi(,9205) logging programs (@pxref{modules}, and @pxref{loginfo}) cvs.texi(,9206) and placed in the @sc{rcs} file inside the cvs.texi(,9207) repository. This log message can be retrieved with the cvs.texi(,9208) @code{log} command; see @ref{log}. You can specify the cvs.texi(,9209) log message on the command line with the @samp{-m cvs.texi(,9210) @var{message}} option, and thus avoid the editor invocation, cvs.texi(,9211) or use the @samp{-F @var{file}} option to specify cvs.texi(,9212) that the argument file contains the log message. cvs.texi(,9213) cvs.texi(,9214) @menu cvs.texi(,9215) * commit options:: commit options cvs.texi(,9216) * commit examples:: commit examples cvs.texi(,9217) @end menu cvs.texi(,9218) cvs.texi(,9219) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,9220) @node commit options cvs.texi(,9221) @appendixsubsec commit options cvs.texi(,9222) cvs.texi(,9223) These standard options are supported by @code{commit} cvs.texi(,9224) (@pxref{Common options}, for a complete description of cvs.texi(,9225) them): cvs.texi(,9226) cvs.texi(,9227) @table @code cvs.texi(,9228) @item -l cvs.texi(,9229) Local; run only in current working directory. cvs.texi(,9230) cvs.texi(,9231) @item -R cvs.texi(,9232) Commit directories recursively. This is on by default. cvs.texi(,9233) cvs.texi(,9234) @item -r @var{revision} cvs.texi(,9235) Commit to @var{revision}. @var{revision} must be cvs.texi(,9236) either a branch, or a revision on the main trunk that cvs.texi(,9237) is higher than any existing revision number cvs.texi(,9238) (@pxref{Assigning revisions}). You cvs.texi(,9239) cannot commit to a specific revision on a branch. cvs.texi(,9240) @c FIXME: Need xref for branch case. cvs.texi(,9241) @end table cvs.texi(,9242) cvs.texi(,9243) @code{commit} also supports these options: cvs.texi(,9244) cvs.texi(,9245) @table @code cvs.texi(,9246) @item -F @var{file} cvs.texi(,9247) Read the log message from @var{file}, instead cvs.texi(,9248) of invoking an editor. cvs.texi(,9249) cvs.texi(,9250) @item -f cvs.texi(,9251) Note that this is not the standard behavior of cvs.texi(,9252) the @samp{-f} option as defined in @ref{Common options}. cvs.texi(,9253) cvs.texi(,9254) Force @sc{cvs} to commit a new revision even if you haven't cvs.texi(,9255) made any changes to the file. If the current revision cvs.texi(,9256) of @var{file} is 1.7, then the following two commands cvs.texi(,9257) are equivalent: cvs.texi(,9258) cvs.texi(,9259) @example cvs.texi(,9260) $ cvs commit -f @var{file} cvs.texi(,9261) $ cvs commit -r 1.8 @var{file} cvs.texi(,9262) @end example cvs.texi(,9263) cvs.texi(,9264) @c This is odd, but it's how CVS has worked for some cvs.texi(,9265) @c time. cvs.texi(,9266) The @samp{-f} option disables recursion (i.e., it cvs.texi(,9267) implies @samp{-l}). To force @sc{cvs} to commit a new cvs.texi(,9268) revision for all files in all subdirectories, you must cvs.texi(,9269) use @samp{-f -R}. cvs.texi(,9270) cvs.texi(,9271) @item -m @var{message} cvs.texi(,9272) Use @var{message} as the log message, instead of cvs.texi(,9273) invoking an editor. cvs.texi(,9274) @end table cvs.texi(,9275) cvs.texi(,9276) @need 2000 cvs.texi(,9277) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,9278) @node commit examples cvs.texi(,9279) @appendixsubsec commit examples cvs.texi(,9280) cvs.texi(,9281) @c FIXME: this material wants to be somewhere cvs.texi(,9282) @c in "Branching and merging". cvs.texi(,9283) cvs.texi(,9284) @appendixsubsubsec Committing to a branch cvs.texi(,9285) cvs.texi(,9286) You can commit to a branch revision (one that has an cvs.texi(,9287) even number of dots) with the @samp{-r} option. To cvs.texi(,9288) create a branch revision, use the @samp{-b} option cvs.texi(,9289) of the @code{rtag} or @code{tag} commands cvs.texi(,9290) (@pxref{Branching and merging}). Then, either @code{checkout} or cvs.texi(,9291) @code{update} can be used to base your sources on the cvs.texi(,9292) newly created branch. From that point on, all cvs.texi(,9293) @code{commit} changes made within these working sources cvs.texi(,9294) will be automatically added to a branch revision, cvs.texi(,9295) thereby not disturbing main-line development in any cvs.texi(,9296) way. For example, if you had to create a patch to the cvs.texi(,9297) 1.2 version of the product, even though the 2.0 version cvs.texi(,9298) is already under development, you might do: cvs.texi(,9299) cvs.texi(,9300) @example cvs.texi(,9301) $ cvs rtag -b -r FCS1_2 FCS1_2_Patch product_module cvs.texi(,9302) $ cvs checkout -r FCS1_2_Patch product_module cvs.texi(,9303) $ cd product_module cvs.texi(,9304) [[ hack away ]] cvs.texi(,9305) $ cvs commit cvs.texi(,9306) @end example cvs.texi(,9307) cvs.texi(,9308) @noindent cvs.texi(,9309) This works automatically since the @samp{-r} option is cvs.texi(,9310) sticky. cvs.texi(,9311) cvs.texi(,9312) @appendixsubsubsec Creating the branch after editing cvs.texi(,9313) cvs.texi(,9314) Say you have been working on some extremely cvs.texi(,9315) experimental software, based on whatever revision you cvs.texi(,9316) happened to checkout last week. If others in your cvs.texi(,9317) group would like to work on this software with you, but cvs.texi(,9318) without disturbing main-line development, you could cvs.texi(,9319) commit your change to a new branch. Others can then cvs.texi(,9320) checkout your experimental stuff and utilize the full cvs.texi(,9321) benefit of @sc{cvs} conflict resolution. The scenario might cvs.texi(,9322) look like: cvs.texi(,9323) cvs.texi(,9324) @c FIXME: Should we be recommending tagging the branchpoint? cvs.texi(,9325) @example cvs.texi(,9326) [[ hacked sources are present ]] cvs.texi(,9327) $ cvs tag -b EXPR1 cvs.texi(,9328) $ cvs update -r EXPR1 cvs.texi(,9329) $ cvs commit cvs.texi(,9330) @end example cvs.texi(,9331) cvs.texi(,9332) The @code{update} command will make the @samp{-r cvs.texi(,9333) EXPR1} option sticky on all files. Note that your cvs.texi(,9334) changes to the files will never be removed by the cvs.texi(,9335) @code{update} command. The @code{commit} will cvs.texi(,9336) automatically commit to the correct branch, because the cvs.texi(,9337) @samp{-r} is sticky. You could also do like this: cvs.texi(,9338) cvs.texi(,9339) @c FIXME: Should we be recommending tagging the branchpoint? cvs.texi(,9340) @example cvs.texi(,9341) [[ hacked sources are present ]] cvs.texi(,9342) $ cvs tag -b EXPR1 cvs.texi(,9343) $ cvs commit -r EXPR1 cvs.texi(,9344) @end example cvs.texi(,9345) cvs.texi(,9346) @noindent cvs.texi(,9347) but then, only those files that were changed by you cvs.texi(,9348) will have the @samp{-r EXPR1} sticky flag. If you hack cvs.texi(,9349) away, and commit without specifying the @samp{-r EXPR1} cvs.texi(,9350) flag, some files may accidentally end up on the main cvs.texi(,9351) trunk. cvs.texi(,9352) cvs.texi(,9353) To work with you on the experimental change, others cvs.texi(,9354) would simply do cvs.texi(,9355) cvs.texi(,9356) @example cvs.texi(,9357) $ cvs checkout -r EXPR1 whatever_module cvs.texi(,9358) @end example cvs.texi(,9359) cvs.texi(,9360) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,9361) @node diff cvs.texi(,9362) @appendixsec diff---Show differences between revisions cvs.texi(,9363) @cindex diff (subcommand) cvs.texi(,9364) cvs.texi(,9365) @itemize @bullet cvs.texi(,9366) @item cvs.texi(,9367) Synopsis: diff [-lR] [-k kflag] [format_options] [[-r rev1 | -D date1] [-r rev2 | -D date2]] [files@dots{}] cvs.texi(,9368) @item cvs.texi(,9369) Requires: working directory, repository. cvs.texi(,9370) @item cvs.texi(,9371) Changes: nothing. cvs.texi(,9372) @end itemize cvs.texi(,9373) cvs.texi(,9374) The @code{diff} command is used to compare different cvs.texi(,9375) revisions of files. The default action is to compare cvs.texi(,9376) your working files with the revisions they were based cvs.texi(,9377) on, and report any differences that are found. cvs.texi(,9378) cvs.texi(,9379) If any file names are given, only those files are cvs.texi(,9380) compared. If any directories are given, all files cvs.texi(,9381) under them will be compared. cvs.texi(,9382) cvs.texi(,9383) The exit status for diff is different than for other cvs.texi(,9384) @sc{cvs} commands; for details @ref{Exit status}. cvs.texi(,9385) cvs.texi(,9386) @menu cvs.texi(,9387) * diff options:: diff options cvs.texi(,9388) * diff examples:: diff examples cvs.texi(,9389) @end menu cvs.texi(,9390) cvs.texi(,9391) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,9392) @node diff options cvs.texi(,9393) @appendixsubsec diff options cvs.texi(,9394) cvs.texi(,9395) These standard options are supported by @code{diff} cvs.texi(,9396) (@pxref{Common options}, for a complete description of cvs.texi(,9397) them): cvs.texi(,9398) cvs.texi(,9399) @table @code cvs.texi(,9400) @item -D @var{date} cvs.texi(,9401) Use the most recent revision no later than @var{date}. cvs.texi(,9402) See @samp{-r} for how this affects the comparison. cvs.texi(,9403) cvs.texi(,9404) @item -k @var{kflag} cvs.texi(,9405) Process keywords according to @var{kflag}. See cvs.texi(,9406) @ref{Keyword substitution}. cvs.texi(,9407) cvs.texi(,9408) @item -l cvs.texi(,9409) Local; run only in current working directory. cvs.texi(,9410) cvs.texi(,9411) @item -R cvs.texi(,9412) Examine directories recursively. This option is on by cvs.texi(,9413) default. cvs.texi(,9414) cvs.texi(,9415) @item -r @var{tag} cvs.texi(,9416) Compare with revision @var{tag}. Zero, one or two cvs.texi(,9417) @samp{-r} options can be present. With no @samp{-r} cvs.texi(,9418) option, the working file will be compared with the cvs.texi(,9419) revision it was based on. With one @samp{-r}, that cvs.texi(,9420) revision will be compared to your current working file. cvs.texi(,9421) With two @samp{-r} options those two revisions will be cvs.texi(,9422) compared (and your working file will not affect the cvs.texi(,9423) outcome in any way). cvs.texi(,9424) @c We should be a lot more explicit, with examples, cvs.texi(,9425) @c about the difference between "cvs diff" and "cvs cvs.texi(,9426) @c diff -r HEAD". This often confuses new users. cvs.texi(,9427) cvs.texi(,9428) One or both @samp{-r} options can be replaced by a cvs.texi(,9429) @samp{-D @var{date}} option, described above. cvs.texi(,9430) @end table cvs.texi(,9431) cvs.texi(,9432) @c Conceptually, this is a disaster. There are 3 cvs.texi(,9433) @c zillion diff formats that we support via the diff cvs.texi(,9434) @c library. It is not obvious to me that we should cvs.texi(,9435) @c document them all. Maybe just the most common ones cvs.texi(,9436) @c like -c and -u, and think about phasing out the cvs.texi(,9437) @c obscure ones. cvs.texi(,9438) @c FIXCVS: also should be a way to specify an external cvs.texi(,9439) @c diff program (which can be different for different cvs.texi(,9440) @c file types) and pass through cvs.texi(,9441) @c arbitrary options, so that the user can do cvs.texi(,9442) @c "--pass=-Z --pass=foo" or something even if CVS cvs.texi(,9443) @c doesn't know about the "-Z foo" option to diff. cvs.texi(,9444) @c This would fit nicely with deprecating/eliminating cvs.texi(,9445) @c the obscure options of the diff library, because it cvs.texi(,9446) @c would let people specify an external GNU diff if cvs.texi(,9447) @c they are into that sort of thing. cvs.texi(,9448) The following options specify the format of the cvs.texi(,9449) output. They have the same meaning as in GNU diff. cvs.texi(,9450) Most options have two equivalent names, one of which is a single letter cvs.texi(,9451) preceded by @samp{-}, and the other of which is a long name preceded by cvs.texi(,9452) @samp{--}. cvs.texi(,9453) cvs.texi(,9454) @table @samp cvs.texi(,9455) @item -@var{lines} cvs.texi(,9456) Show @var{lines} (an integer) lines of context. This option does not cvs.texi(,9457) specify an output format by itself; it has no effect unless it is cvs.texi(,9458) combined with @samp{-c} or @samp{-u}. This option is obsolete. For proper cvs.texi(,9459) operation, @code{patch} typically needs at least two lines of context. cvs.texi(,9460) cvs.texi(,9461) @item -a cvs.texi(,9462) Treat all files as text and compare them line-by-line, even if they cvs.texi(,9463) do not seem to be text. cvs.texi(,9464) cvs.texi(,9465) @item -b cvs.texi(,9466) Ignore trailing white space and consider all other sequences of one or cvs.texi(,9467) more white space characters to be equivalent. cvs.texi(,9468) cvs.texi(,9469) @item -B cvs.texi(,9470) Ignore changes that just insert or delete blank lines. cvs.texi(,9471) cvs.texi(,9472) @item --binary cvs.texi(,9473) Read and write data in binary mode. cvs.texi(,9474) cvs.texi(,9475) @item --brief cvs.texi(,9476) Report only whether the files differ, not the details of the cvs.texi(,9477) differences. cvs.texi(,9478) cvs.texi(,9479) @item -c cvs.texi(,9480) Use the context output format. cvs.texi(,9481) cvs.texi(,9482) @item -C @var{lines} cvs.texi(,9483) @itemx --context@r{[}=@var{lines}@r{]} cvs.texi(,9484) Use the context output format, showing @var{lines} (an integer) lines of cvs.texi(,9485) context, or three if @var{lines} is not given. cvs.texi(,9486) For proper operation, @code{patch} typically needs at least two lines of cvs.texi(,9487) context. cvs.texi(,9488) cvs.texi(,9489) @item --changed-group-format=@var{format} cvs.texi(,9490) Use @var{format} to output a line group containing differing lines from cvs.texi(,9491) both files in if-then-else format. @xref{Line group formats}. cvs.texi(,9492) cvs.texi(,9493) @item -d cvs.texi(,9494) Change the algorithm to perhaps find a smaller set of changes. This makes cvs.texi(,9495) @code{diff} slower (sometimes much slower). cvs.texi(,9496) cvs.texi(,9497) @item -e cvs.texi(,9498) @itemx --ed cvs.texi(,9499) Make output that is a valid @code{ed} script. cvs.texi(,9500) cvs.texi(,9501) @item --expand-tabs cvs.texi(,9502) Expand tabs to spaces in the output, to preserve the alignment of tabs cvs.texi(,9503) in the input files. cvs.texi(,9504) cvs.texi(,9505) @item -f cvs.texi(,9506) Make output that looks vaguely like an @code{ed} script but has changes cvs.texi(,9507) in the order they appear in the file. cvs.texi(,9508) cvs.texi(,9509) @item -F @var{regexp} cvs.texi(,9510) In context and unified format, for each hunk of differences, show some cvs.texi(,9511) of the last preceding line that matches @var{regexp}. cvs.texi(,9512) cvs.texi(,9513) @item --forward-ed cvs.texi(,9514) Make output that looks vaguely like an @code{ed} script but has changes cvs.texi(,9515) in the order they appear in the file. cvs.texi(,9516) cvs.texi(,9517) @item -H cvs.texi(,9518) Use heuristics to speed handling of large files that have numerous cvs.texi(,9519) scattered small changes. cvs.texi(,9520) cvs.texi(,9521) @item --horizon-lines=@var{lines} cvs.texi(,9522) Do not discard the last @var{lines} lines of the common prefix cvs.texi(,9523) and the first @var{lines} lines of the common suffix. cvs.texi(,9524) cvs.texi(,9525) @item -i cvs.texi(,9526) Ignore changes in case; consider upper- and lower-case letters cvs.texi(,9527) equivalent. cvs.texi(,9528) cvs.texi(,9529) @item -I @var{regexp} cvs.texi(,9530) Ignore changes that just insert or delete lines that match @var{regexp}. cvs.texi(,9531) cvs.texi(,9532) @item --ifdef=@var{name} cvs.texi(,9533) Make merged if-then-else output using @var{name}. cvs.texi(,9534) cvs.texi(,9535) @item --ignore-all-space cvs.texi(,9536) Ignore white space when comparing lines. cvs.texi(,9537) cvs.texi(,9538) @item --ignore-blank-lines cvs.texi(,9539) Ignore changes that just insert or delete blank lines. cvs.texi(,9540) cvs.texi(,9541) @item --ignore-case cvs.texi(,9542) Ignore changes in case; consider upper- and lower-case to be the same. cvs.texi(,9543) cvs.texi(,9544) @item --ignore-matching-lines=@var{regexp} cvs.texi(,9545) Ignore changes that just insert or delete lines that match @var{regexp}. cvs.texi(,9546) cvs.texi(,9547) @item --ignore-space-change cvs.texi(,9548) Ignore trailing white space and consider all other sequences of one or cvs.texi(,9549) more white space characters to be equivalent. cvs.texi(,9550) cvs.texi(,9551) @item --initial-tab cvs.texi(,9552) Output a tab rather than a space before the text of a line in normal or cvs.texi(,9553) context format. This causes the alignment of tabs in the line to look cvs.texi(,9554) normal. cvs.texi(,9555) cvs.texi(,9556) @item -L @var{label} cvs.texi(,9557) Use @var{label} instead of the file name in the context format cvs.texi(,9558) and unified format headers. cvs.texi(,9559) cvs.texi(,9560) @item --label=@var{label} cvs.texi(,9561) Use @var{label} instead of the file name in the context format cvs.texi(,9562) and unified format headers. cvs.texi(,9563) cvs.texi(,9564) @item --left-column cvs.texi(,9565) Print only the left column of two common lines in side by side format. cvs.texi(,9566) cvs.texi(,9567) @item --line-format=@var{format} cvs.texi(,9568) Use @var{format} to output all input lines in if-then-else format. cvs.texi(,9569) @xref{Line formats}. cvs.texi(,9570) cvs.texi(,9571) @item --minimal cvs.texi(,9572) Change the algorithm to perhaps find a smaller set of changes. This cvs.texi(,9573) makes @code{diff} slower (sometimes much slower). cvs.texi(,9574) cvs.texi(,9575) @item -n cvs.texi(,9576) Output RCS-format diffs; like @samp{-f} except that each command cvs.texi(,9577) specifies the number of lines affected. cvs.texi(,9578) cvs.texi(,9579) @item -N cvs.texi(,9580) @itemx --new-file cvs.texi(,9581) In directory comparison, if a file is found in only one directory, cvs.texi(,9582) treat it as present but empty in the other directory. cvs.texi(,9583) cvs.texi(,9584) @item --new-group-format=@var{format} cvs.texi(,9585) Use @var{format} to output a group of lines taken from just the second cvs.texi(,9586) file in if-then-else format. @xref{Line group formats}. cvs.texi(,9587) cvs.texi(,9588) @item --new-line-format=@var{format} cvs.texi(,9589) Use @var{format} to output a line taken from just the second file in cvs.texi(,9590) if-then-else format. @xref{Line formats}. cvs.texi(,9591) cvs.texi(,9592) @item --old-group-format=@var{format} cvs.texi(,9593) Use @var{format} to output a group of lines taken from just the first cvs.texi(,9594) file in if-then-else format. @xref{Line group formats}. cvs.texi(,9595) cvs.texi(,9596) @item --old-line-format=@var{format} cvs.texi(,9597) Use @var{format} to output a line taken from just the first file in cvs.texi(,9598) if-then-else format. @xref{Line formats}. cvs.texi(,9599) cvs.texi(,9600) @item -p cvs.texi(,9601) Show which C function each change is in. cvs.texi(,9602) cvs.texi(,9603) @item --rcs cvs.texi(,9604) Output RCS-format diffs; like @samp{-f} except that each command cvs.texi(,9605) specifies the number of lines affected. cvs.texi(,9606) cvs.texi(,9607) @item --report-identical-files cvs.texi(,9608) @itemx -s cvs.texi(,9609) Report when two files are the same. cvs.texi(,9610) cvs.texi(,9611) @item --show-c-function cvs.texi(,9612) Show which C function each change is in. cvs.texi(,9613) cvs.texi(,9614) @item --show-function-line=@var{regexp} cvs.texi(,9615) In context and unified format, for each hunk of differences, show some cvs.texi(,9616) of the last preceding line that matches @var{regexp}. cvs.texi(,9617) cvs.texi(,9618) @item --side-by-side cvs.texi(,9619) Use the side by side output format. cvs.texi(,9620) cvs.texi(,9621) @item --speed-large-files cvs.texi(,9622) Use heuristics to speed handling of large files that have numerous cvs.texi(,9623) scattered small changes. cvs.texi(,9624) cvs.texi(,9625) @item --suppress-common-lines cvs.texi(,9626) Do not print common lines in side by side format. cvs.texi(,9627) cvs.texi(,9628) @item -t cvs.texi(,9629) Expand tabs to spaces in the output, to preserve the alignment of tabs cvs.texi(,9630) in the input files. cvs.texi(,9631) cvs.texi(,9632) @item -T cvs.texi(,9633) Output a tab rather than a space before the text of a line in normal or cvs.texi(,9634) context format. This causes the alignment of tabs in the line to look cvs.texi(,9635) normal. cvs.texi(,9636) cvs.texi(,9637) @item --text cvs.texi(,9638) Treat all files as text and compare them line-by-line, even if they cvs.texi(,9639) do not appear to be text. cvs.texi(,9640) cvs.texi(,9641) @item -u cvs.texi(,9642) Use the unified output format. cvs.texi(,9643) cvs.texi(,9644) @item --unchanged-group-format=@var{format} cvs.texi(,9645) Use @var{format} to output a group of common lines taken from both files cvs.texi(,9646) in if-then-else format. @xref{Line group formats}. cvs.texi(,9647) cvs.texi(,9648) @item --unchanged-line-format=@var{format} cvs.texi(,9649) Use @var{format} to output a line common to both files in if-then-else cvs.texi(,9650) format. @xref{Line formats}. cvs.texi(,9651) cvs.texi(,9652) @item -U @var{lines} cvs.texi(,9653) @itemx --unified@r{[}=@var{lines}@r{]} cvs.texi(,9654) Use the unified output format, showing @var{lines} (an integer) lines of cvs.texi(,9655) context, or three if @var{lines} is not given. cvs.texi(,9656) For proper operation, @code{patch} typically needs at least two lines of cvs.texi(,9657) context. cvs.texi(,9658) cvs.texi(,9659) @item -w cvs.texi(,9660) Ignore white space when comparing lines. cvs.texi(,9661) cvs.texi(,9662) @item -W @var{columns} cvs.texi(,9663) @itemx --width=@var{columns} cvs.texi(,9664) Use an output width of @var{columns} in side by side format. cvs.texi(,9665) cvs.texi(,9666) @item -y cvs.texi(,9667) Use the side by side output format. cvs.texi(,9668) @end table cvs.texi(,9669) cvs.texi(,9670) @menu cvs.texi(,9671) * Line group formats:: Line group formats cvs.texi(,9672) * Line formats:: Line formats cvs.texi(,9673) @end menu cvs.texi(,9674) cvs.texi(,9675) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,9676) @node Line group formats cvs.texi(,9677) @appendixsubsubsec Line group formats cvs.texi(,9678) cvs.texi(,9679) Line group formats let you specify formats suitable for many cvs.texi(,9680) applications that allow if-then-else input, including programming cvs.texi(,9681) languages and text formatting languages. A line group format specifies cvs.texi(,9682) the output format for a contiguous group of similar lines. cvs.texi(,9683) cvs.texi(,9684) For example, the following command compares the TeX file @file{myfile} cvs.texi(,9685) with the original version from the repository, cvs.texi(,9686) and outputs a merged file in which old regions are cvs.texi(,9687) surrounded by @samp{\begin@{em@}}-@samp{\end@{em@}} lines, and new cvs.texi(,9688) regions are surrounded by @samp{\begin@{bf@}}-@samp{\end@{bf@}} lines. cvs.texi(,9689) cvs.texi(,9690) @example cvs.texi(,9691) cvs diff \ cvs.texi(,9692) --old-group-format='\begin@{em@} cvs.texi(,9693) %<\end@{em@} cvs.texi(,9694) ' \ cvs.texi(,9695) --new-group-format='\begin@{bf@} cvs.texi(,9696) %>\end@{bf@} cvs.texi(,9697) ' \ cvs.texi(,9698) myfile cvs.texi(,9699) @end example cvs.texi(,9700) cvs.texi(,9701) The following command is equivalent to the above example, but it is a cvs.texi(,9702) little more verbose, because it spells out the default line group formats. cvs.texi(,9703) cvs.texi(,9704) @example cvs.texi(,9705) cvs diff \ cvs.texi(,9706) --old-group-format='\begin@{em@} cvs.texi(,9707) %<\end@{em@} cvs.texi(,9708) ' \ cvs.texi(,9709) --new-group-format='\begin@{bf@} cvs.texi(,9710) %>\end@{bf@} cvs.texi(,9711) ' \ cvs.texi(,9712) --unchanged-group-format='%=' \ cvs.texi(,9713) --changed-group-format='\begin@{em@} cvs.texi(,9714) %<\end@{em@} cvs.texi(,9715) \begin@{bf@} cvs.texi(,9716) %>\end@{bf@} cvs.texi(,9717) ' \ cvs.texi(,9718) myfile cvs.texi(,9719) @end example cvs.texi(,9720) cvs.texi(,9721) Here is a more advanced example, which outputs a diff listing with cvs.texi(,9722) headers containing line numbers in a ``plain English'' style. cvs.texi(,9723) cvs.texi(,9724) @example cvs.texi(,9725) cvs diff \ cvs.texi(,9726) --unchanged-group-format='' \ cvs.texi(,9727) --old-group-format='-------- %dn line%(n=1?:s) deleted at %df: cvs.texi(,9728) %<' \ cvs.texi(,9729) --new-group-format='-------- %dN line%(N=1?:s) added after %de: cvs.texi(,9730) %>' \ cvs.texi(,9731) --changed-group-format='-------- %dn line%(n=1?:s) changed at %df: cvs.texi(,9732) %<-------- to: cvs.texi(,9733) %>' \ cvs.texi(,9734) myfile cvs.texi(,9735) @end example cvs.texi(,9736) cvs.texi(,9737) To specify a line group format, use one of the options cvs.texi(,9738) listed below. You can specify up to four line group formats, one for cvs.texi(,9739) each kind of line group. You should quote @var{format}, because it cvs.texi(,9740) typically contains shell metacharacters. cvs.texi(,9741) cvs.texi(,9742) @table @samp cvs.texi(,9743) @item --old-group-format=@var{format} cvs.texi(,9744) These line groups are hunks containing only lines from the first file. cvs.texi(,9745) The default old group format is the same as the changed group format if cvs.texi(,9746) it is specified; otherwise it is a format that outputs the line group as-is. cvs.texi(,9747) cvs.texi(,9748) @item --new-group-format=@var{format} cvs.texi(,9749) These line groups are hunks containing only lines from the second cvs.texi(,9750) file. The default new group format is same as the changed group cvs.texi(,9751) format if it is specified; otherwise it is a format that outputs the cvs.texi(,9752) line group as-is. cvs.texi(,9753) cvs.texi(,9754) @item --changed-group-format=@var{format} cvs.texi(,9755) These line groups are hunks containing lines from both files. The cvs.texi(,9756) default changed group format is the concatenation of the old and new cvs.texi(,9757) group formats. cvs.texi(,9758) cvs.texi(,9759) @item --unchanged-group-format=@var{format} cvs.texi(,9760) These line groups contain lines common to both files. The default cvs.texi(,9761) unchanged group format is a format that outputs the line group as-is. cvs.texi(,9762) @end table cvs.texi(,9763) cvs.texi(,9764) In a line group format, ordinary characters represent themselves; cvs.texi(,9765) conversion specifications start with @samp{%} and have one of the cvs.texi(,9766) following forms. cvs.texi(,9767) cvs.texi(,9768) @table @samp cvs.texi(,9769) @item %< cvs.texi(,9770) stands for the lines from the first file, including the trailing newline. cvs.texi(,9771) Each line is formatted according to the old line format (@pxref{Line formats}). cvs.texi(,9772) cvs.texi(,9773) @item %> cvs.texi(,9774) stands for the lines from the second file, including the trailing newline. cvs.texi(,9775) Each line is formatted according to the new line format. cvs.texi(,9776) cvs.texi(,9777) @item %= cvs.texi(,9778) stands for the lines common to both files, including the trailing newline. cvs.texi(,9779) Each line is formatted according to the unchanged line format. cvs.texi(,9780) cvs.texi(,9781) @item %% cvs.texi(,9782) stands for @samp{%}. cvs.texi(,9783) cvs.texi(,9784) @item %c'@var{C}' cvs.texi(,9785) where @var{C} is a single character, stands for @var{C}. cvs.texi(,9786) @var{C} may not be a backslash or an apostrophe. cvs.texi(,9787) For example, @samp{%c':'} stands for a colon, even inside cvs.texi(,9788) the then-part of an if-then-else format, which a colon would cvs.texi(,9789) normally terminate. cvs.texi(,9790) cvs.texi(,9791) @item %c'\@var{O}' cvs.texi(,9792) where @var{O} is a string of 1, 2, or 3 octal digits, cvs.texi(,9793) stands for the character with octal code @var{O}. cvs.texi(,9794) For example, @samp{%c'\0'} stands for a null character. cvs.texi(,9795) cvs.texi(,9796) @item @var{F}@var{n} cvs.texi(,9797) where @var{F} is a @code{printf} conversion specification and @var{n} is one cvs.texi(,9798) of the following letters, stands for @var{n}'s value formatted with @var{F}. cvs.texi(,9799) cvs.texi(,9800) @table @samp cvs.texi(,9801) @item e cvs.texi(,9802) The line number of the line just before the group in the old file. cvs.texi(,9803) cvs.texi(,9804) @item f cvs.texi(,9805) The line number of the first line in the group in the old file; cvs.texi(,9806) equals @var{e} + 1. cvs.texi(,9807) cvs.texi(,9808) @item l cvs.texi(,9809) The line number of the last line in the group in the old file. cvs.texi(,9810) cvs.texi(,9811) @item m cvs.texi(,9812) The line number of the line just after the group in the old file; cvs.texi(,9813) equals @var{l} + 1. cvs.texi(,9814) cvs.texi(,9815) @item n cvs.texi(,9816) The number of lines in the group in the old file; equals @var{l} - @var{f} + 1. cvs.texi(,9817) cvs.texi(,9818) @item E, F, L, M, N cvs.texi(,9819) Likewise, for lines in the new file. cvs.texi(,9820) cvs.texi(,9821) @end table cvs.texi(,9822) cvs.texi(,9823) The @code{printf} conversion specification can be @samp{%d}, cvs.texi(,9824) @samp{%o}, @samp{%x}, or @samp{%X}, specifying decimal, octal, cvs.texi(,9825) lower case hexadecimal, or upper case hexadecimal output cvs.texi(,9826) respectively. After the @samp{%} the following options can appear in cvs.texi(,9827) sequence: a @samp{-} specifying left-justification; an integer cvs.texi(,9828) specifying the minimum field width; and a period followed by an cvs.texi(,9829) optional integer specifying the minimum number of digits. cvs.texi(,9830) For example, @samp{%5dN} prints the number of new lines in the group cvs.texi(,9831) in a field of width 5 characters, using the @code{printf} format @code{"%5d"}. cvs.texi(,9832) cvs.texi(,9833) @item (@var{A}=@var{B}?@var{T}:@var{E}) cvs.texi(,9834) If @var{A} equals @var{B} then @var{T} else @var{E}. cvs.texi(,9835) @var{A} and @var{B} are each either a decimal constant cvs.texi(,9836) or a single letter interpreted as above. cvs.texi(,9837) This format spec is equivalent to @var{T} if cvs.texi(,9838) @var{A}'s value equals @var{B}'s; otherwise it is equivalent to @var{E}. cvs.texi(,9839) cvs.texi(,9840) For example, @samp{%(N=0?no:%dN) line%(N=1?:s)} is equivalent to cvs.texi(,9841) @samp{no lines} if @var{N} (the number of lines in the group in the cvs.texi(,9842) new file) is 0, to @samp{1 line} if @var{N} is 1, and to @samp{%dN lines} cvs.texi(,9843) otherwise. cvs.texi(,9844) @end table cvs.texi(,9845) cvs.texi(,9846) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,9847) @node Line formats cvs.texi(,9848) @appendixsubsubsec Line formats cvs.texi(,9849) cvs.texi(,9850) Line formats control how each line taken from an input file is cvs.texi(,9851) output as part of a line group in if-then-else format. cvs.texi(,9852) cvs.texi(,9853) For example, the following command outputs text with a one-column cvs.texi(,9854) change indicator to the left of the text. The first column of output cvs.texi(,9855) is @samp{-} for deleted lines, @samp{|} for added lines, and a space cvs.texi(,9856) for unchanged lines. The formats contain newline characters where cvs.texi(,9857) newlines are desired on output. cvs.texi(,9858) cvs.texi(,9859) @example cvs.texi(,9860) cvs diff \ cvs.texi(,9861) --old-line-format='-%l cvs.texi(,9862) ' \ cvs.texi(,9863) --new-line-format='|%l cvs.texi(,9864) ' \ cvs.texi(,9865) --unchanged-line-format=' %l cvs.texi(,9866) ' \ cvs.texi(,9867) myfile cvs.texi(,9868) @end example cvs.texi(,9869) cvs.texi(,9870) To specify a line format, use one of the following options. You should cvs.texi(,9871) quote @var{format}, since it often contains shell metacharacters. cvs.texi(,9872) cvs.texi(,9873) @table @samp cvs.texi(,9874) @item --old-line-format=@var{format} cvs.texi(,9875) formats lines just from the first file. cvs.texi(,9876) cvs.texi(,9877) @item --new-line-format=@var{format} cvs.texi(,9878) formats lines just from the second file. cvs.texi(,9879) cvs.texi(,9880) @item --unchanged-line-format=@var{format} cvs.texi(,9881) formats lines common to both files. cvs.texi(,9882) cvs.texi(,9883) @item --line-format=@var{format} cvs.texi(,9884) formats all lines; in effect, it sets all three above options simultaneously. cvs.texi(,9885) @end table cvs.texi(,9886) cvs.texi(,9887) In a line format, ordinary characters represent themselves; cvs.texi(,9888) conversion specifications start with @samp{%} and have one of the cvs.texi(,9889) following forms. cvs.texi(,9890) cvs.texi(,9891) @table @samp cvs.texi(,9892) @item %l cvs.texi(,9893) stands for the contents of the line, not counting its trailing cvs.texi(,9894) newline (if any). This format ignores whether the line is incomplete. cvs.texi(,9895) cvs.texi(,9896) @item %L cvs.texi(,9897) stands for the contents of the line, including its trailing newline cvs.texi(,9898) (if any). If a line is incomplete, this format preserves its cvs.texi(,9899) incompleteness. cvs.texi(,9900) cvs.texi(,9901) @item %% cvs.texi(,9902) stands for @samp{%}. cvs.texi(,9903) cvs.texi(,9904) @item %c'@var{C}' cvs.texi(,9905) where @var{C} is a single character, stands for @var{C}. cvs.texi(,9906) @var{C} may not be a backslash or an apostrophe. cvs.texi(,9907) For example, @samp{%c':'} stands for a colon. cvs.texi(,9908) cvs.texi(,9909) @item %c'\@var{O}' cvs.texi(,9910) where @var{O} is a string of 1, 2, or 3 octal digits, cvs.texi(,9911) stands for the character with octal code @var{O}. cvs.texi(,9912) For example, @samp{%c'\0'} stands for a null character. cvs.texi(,9913) cvs.texi(,9914) @item @var{F}n cvs.texi(,9915) where @var{F} is a @code{printf} conversion specification, cvs.texi(,9916) stands for the line number formatted with @var{F}. cvs.texi(,9917) For example, @samp{%.5dn} prints the line number using the cvs.texi(,9918) @code{printf} format @code{"%.5d"}. @xref{Line group formats}, for cvs.texi(,9919) more about printf conversion specifications. cvs.texi(,9920) cvs.texi(,9921) @end table cvs.texi(,9922) cvs.texi(,9923) The default line format is @samp{%l} followed by a newline character. cvs.texi(,9924) cvs.texi(,9925) If the input contains tab characters and it is important that they line cvs.texi(,9926) up on output, you should ensure that @samp{%l} or @samp{%L} in a line cvs.texi(,9927) format is just after a tab stop (e.g.@: by preceding @samp{%l} or cvs.texi(,9928) @samp{%L} with a tab character), or you should use the @samp{-t} or cvs.texi(,9929) @samp{--expand-tabs} option. cvs.texi(,9930) cvs.texi(,9931) Taken together, the line and line group formats let you specify many cvs.texi(,9932) different formats. For example, the following command uses a format cvs.texi(,9933) similar to @code{diff}'s normal format. You can tailor this command cvs.texi(,9934) to get fine control over @code{diff}'s output. cvs.texi(,9935) cvs.texi(,9936) @example cvs.texi(,9937) cvs diff \ cvs.texi(,9938) --old-line-format='< %l cvs.texi(,9939) ' \ cvs.texi(,9940) --new-line-format='> %l cvs.texi(,9941) ' \ cvs.texi(,9942) --old-group-format='%df%(f=l?:,%dl)d%dE cvs.texi(,9943) %<' \ cvs.texi(,9944) --new-group-format='%dea%dF%(F=L?:,%dL) cvs.texi(,9945) %>' \ cvs.texi(,9946) --changed-group-format='%df%(f=l?:,%dl)c%dF%(F=L?:,%dL) cvs.texi(,9947) %<--- cvs.texi(,9948) %>' \ cvs.texi(,9949) --unchanged-group-format='' \ cvs.texi(,9950) myfile cvs.texi(,9951) @end example cvs.texi(,9952) cvs.texi(,9953) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,9954) @node diff examples cvs.texi(,9955) @appendixsubsec diff examples cvs.texi(,9956) cvs.texi(,9957) The following line produces a Unidiff (@samp{-u} flag) cvs.texi(,9958) between revision 1.14 and 1.19 of cvs.texi(,9959) @file{backend.c}. Due to the @samp{-kk} flag no cvs.texi(,9960) keywords are substituted, so differences that only depend cvs.texi(,9961) on keyword substitution are ignored. cvs.texi(,9962) cvs.texi(,9963) @example cvs.texi(,9964) $ cvs diff -kk -u -r 1.14 -r 1.19 backend.c cvs.texi(,9965) @end example cvs.texi(,9966) cvs.texi(,9967) Suppose the experimental branch EXPR1 was based on a cvs.texi(,9968) set of files tagged RELEASE_1_0. To see what has cvs.texi(,9969) happened on that branch, the following can be used: cvs.texi(,9970) cvs.texi(,9971) @example cvs.texi(,9972) $ cvs diff -r RELEASE_1_0 -r EXPR1 cvs.texi(,9973) @end example cvs.texi(,9974) cvs.texi(,9975) A command like this can be used to produce a context cvs.texi(,9976) diff between two releases: cvs.texi(,9977) cvs.texi(,9978) @example cvs.texi(,9979) $ cvs diff -c -r RELEASE_1_0 -r RELEASE_1_1 > diffs cvs.texi(,9980) @end example cvs.texi(,9981) cvs.texi(,9982) If you are maintaining ChangeLogs, a command like the following cvs.texi(,9983) just before you commit your changes may help you write cvs.texi(,9984) the ChangeLog entry. All local modifications that have cvs.texi(,9985) not yet been committed will be printed. cvs.texi(,9986) cvs.texi(,9987) @example cvs.texi(,9988) $ cvs diff -u | less cvs.texi(,9989) @end example cvs.texi(,9990) cvs.texi(,9991) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,9992) @node export cvs.texi(,9993) @appendixsec export---Export sources from CVS, similar to checkout cvs.texi(,9994) @cindex export (subcommand) cvs.texi(,9995) cvs.texi(,9996) @itemize @bullet cvs.texi(,9997) @item cvs.texi(,9998) Synopsis: export [-flNnR] [-r rev|-D date] [-k subst] [-d dir] module@dots{} cvs.texi(,9999) @item cvs.texi(,10000) Requires: repository. cvs.texi(,10001) @item cvs.texi(,10002) Changes: current directory. cvs.texi(,10003) @end itemize cvs.texi(,10004) cvs.texi(,10005) This command is a variant of @code{checkout}; use it cvs.texi(,10006) when you want a copy of the source for module without cvs.texi(,10007) the @sc{cvs} administrative directories. For example, you cvs.texi(,10008) might use @code{export} to prepare source for shipment cvs.texi(,10009) off-site. This command requires that you specify a cvs.texi(,10010) date or tag (with @samp{-D} or @samp{-r}), so that you cvs.texi(,10011) can count on reproducing the source you ship to others cvs.texi(,10012) (and thus it always prunes empty directories). cvs.texi(,10013) cvs.texi(,10014) One often would like to use @samp{-kv} with @code{cvs cvs.texi(,10015) export}. This causes any keywords to be cvs.texi(,10016) expanded such that an import done at some other site cvs.texi(,10017) will not lose the keyword revision information. But be cvs.texi(,10018) aware that doesn't handle an export containing binary cvs.texi(,10019) files correctly. Also be aware that after having used cvs.texi(,10020) @samp{-kv}, one can no longer use the @code{ident} cvs.texi(,10021) command (which is part of the @sc{rcs} suite---see cvs.texi(,10022) ident(1)) which looks for keyword strings. If cvs.texi(,10023) you want to be able to use @code{ident} you must not cvs.texi(,10024) use @samp{-kv}. cvs.texi(,10025) cvs.texi(,10026) @menu cvs.texi(,10027) * export options:: export options cvs.texi(,10028) @end menu cvs.texi(,10029) cvs.texi(,10030) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,10031) @node export options cvs.texi(,10032) @appendixsubsec export options cvs.texi(,10033) cvs.texi(,10034) These standard options are supported by @code{export} cvs.texi(,10035) (@pxref{Common options}, for a complete description of cvs.texi(,10036) them): cvs.texi(,10037) cvs.texi(,10038) @table @code cvs.texi(,10039) @item -D @var{date} cvs.texi(,10040) Use the most recent revision no later than @var{date}. cvs.texi(,10041) cvs.texi(,10042) @item -f cvs.texi(,10043) If no matching revision is found, retrieve the most cvs.texi(,10044) recent revision (instead of ignoring the file). cvs.texi(,10045) cvs.texi(,10046) @item -l cvs.texi(,10047) Local; run only in current working directory. cvs.texi(,10048) cvs.texi(,10049) @item -n cvs.texi(,10050) Do not run any checkout program. cvs.texi(,10051) cvs.texi(,10052) @item -R cvs.texi(,10053) Export directories recursively. This is on by default. cvs.texi(,10054) cvs.texi(,10055) @item -r @var{tag} cvs.texi(,10056) Use revision @var{tag}. cvs.texi(,10057) @end table cvs.texi(,10058) cvs.texi(,10059) In addition, these options (that are common to cvs.texi(,10060) @code{checkout} and @code{export}) are also supported: cvs.texi(,10061) cvs.texi(,10062) @table @code cvs.texi(,10063) @item -d @var{dir} cvs.texi(,10064) Create a directory called @var{dir} for the working cvs.texi(,10065) files, instead of using the module name. cvs.texi(,10066) @xref{checkout options}, for complete details on how cvs.texi(,10067) @sc{cvs} handles this flag. cvs.texi(,10068) cvs.texi(,10069) @item -k @var{subst} cvs.texi(,10070) Set keyword expansion mode (@pxref{Substitution modes}). cvs.texi(,10071) cvs.texi(,10072) @item -N cvs.texi(,10073) Only useful together with @samp{-d @var{dir}}. cvs.texi(,10074) @xref{checkout options}, for complete details on how cvs.texi(,10075) @sc{cvs} handles this flag. cvs.texi(,10076) @end table cvs.texi(,10077) cvs.texi(,10086) cvs.texi(,10087) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,10088) @node history cvs.texi(,10089) @appendixsec history---Show status of files and users cvs.texi(,10090) @cindex history (subcommand) cvs.texi(,10091) cvs.texi(,10092) @itemize @bullet cvs.texi(,10093) @item cvs.texi(,10094) Synopsis: history [-report] [-flags] [-options args] [files@dots{}] cvs.texi(,10095) @item cvs.texi(,10096) Requires: the file @file{$CVSROOT/CVSROOT/history} cvs.texi(,10097) @item cvs.texi(,10098) Changes: nothing. cvs.texi(,10099) @end itemize cvs.texi(,10100) cvs.texi(,10101) @sc{cvs} can keep a history file that tracks each use of the cvs.texi(,10102) @code{checkout}, @code{commit}, @code{rtag}, cvs.texi(,10103) @code{update}, and @code{release} commands. You can cvs.texi(,10104) use @code{history} to display this information in cvs.texi(,10105) various formats. cvs.texi(,10106) cvs.texi(,10107) Logging must be enabled by creating the file cvs.texi(,10108) @file{$CVSROOT/CVSROOT/history}. cvs.texi(,10109) cvs.texi(,10110) @strong{Note: @code{history} uses @samp{-f}, @samp{-l}, cvs.texi(,10111) @samp{-n}, and @samp{-p} in ways that conflict with the cvs.texi(,10112) normal use inside @sc{cvs} (@pxref{Common options}).} cvs.texi(,10113) cvs.texi(,10114) @menu cvs.texi(,10115) * history options:: history options cvs.texi(,10116) @end menu cvs.texi(,10117) cvs.texi(,10118) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,10119) @node history options cvs.texi(,10120) @appendixsubsec history options cvs.texi(,10121) cvs.texi(,10122) Several options (shown above as @samp{-report}) control what cvs.texi(,10123) kind of report is generated: cvs.texi(,10124) cvs.texi(,10125) @table @code cvs.texi(,10126) @item -c cvs.texi(,10127) Report on each time commit was used (i.e., each time cvs.texi(,10128) the repository was modified). cvs.texi(,10129) cvs.texi(,10130) @item -e cvs.texi(,10131) Everything (all record types). Equivalent to cvs.texi(,10132) specifying @samp{-x} with all record types. Of course, cvs.texi(,10133) @samp{-e} will also include record types which are cvs.texi(,10134) added in a future version of @sc{cvs}; if you are cvs.texi(,10135) writing a script which can only handle certain record cvs.texi(,10136) types, you'll want to specify @samp{-x}. cvs.texi(,10137) cvs.texi(,10138) @item -m @var{module} cvs.texi(,10139) Report on a particular module. (You can meaningfully cvs.texi(,10140) use @samp{-m} more than once on the command line.) cvs.texi(,10141) cvs.texi(,10142) @item -o cvs.texi(,10143) Report on checked-out modules. This is the default report type. cvs.texi(,10144) cvs.texi(,10145) @item -T cvs.texi(,10146) Report on all tags. cvs.texi(,10147) cvs.texi(,10148) @item -x @var{type} cvs.texi(,10149) Extract a particular set of record types @var{type} from the @sc{cvs} cvs.texi(,10150) history. The types are indicated by single letters, cvs.texi(,10151) which you may specify in combination. cvs.texi(,10152) cvs.texi(,10153) Certain commands have a single record type: cvs.texi(,10154) cvs.texi(,10155) @table @code cvs.texi(,10156) @item F cvs.texi(,10157) release cvs.texi(,10158) @item O cvs.texi(,10159) checkout cvs.texi(,10160) @item E cvs.texi(,10161) export cvs.texi(,10162) @item T cvs.texi(,10163) rtag cvs.texi(,10164) @end table cvs.texi(,10165) cvs.texi(,10166) @noindent cvs.texi(,10167) One of four record types may result from an update: cvs.texi(,10168) cvs.texi(,10169) @table @code cvs.texi(,10170) @item C cvs.texi(,10171) A merge was necessary but collisions were cvs.texi(,10172) detected (requiring manual merging). cvs.texi(,10173) @item G cvs.texi(,10174) A merge was necessary and it succeeded. cvs.texi(,10175) @item U cvs.texi(,10176) A working file was copied from the repository. cvs.texi(,10177) @item W cvs.texi(,10178) The working copy of a file was deleted during cvs.texi(,10179) update (because it was gone from the repository). cvs.texi(,10180) @end table cvs.texi(,10181) cvs.texi(,10182) @noindent cvs.texi(,10183) One of three record types results from commit: cvs.texi(,10184) cvs.texi(,10185) @table @code cvs.texi(,10186) @item A cvs.texi(,10187) A file was added for the first time. cvs.texi(,10188) @item M cvs.texi(,10189) A file was modified. cvs.texi(,10190) @item R cvs.texi(,10191) A file was removed. cvs.texi(,10192) @end table cvs.texi(,10193) @end table cvs.texi(,10194) cvs.texi(,10195) The options shown as @samp{-flags} constrain or expand cvs.texi(,10196) the report without requiring option arguments: cvs.texi(,10197) cvs.texi(,10198) @table @code cvs.texi(,10199) @item -a cvs.texi(,10200) Show data for all users (the default is to show data cvs.texi(,10201) only for the user executing @code{history}). cvs.texi(,10202) cvs.texi(,10203) @item -l cvs.texi(,10204) Show last modification only. cvs.texi(,10205) cvs.texi(,10206) @item -w cvs.texi(,10207) Show only the records for modifications done from the cvs.texi(,10208) same working directory where @code{history} is cvs.texi(,10209) executing. cvs.texi(,10210) @end table cvs.texi(,10211) cvs.texi(,10212) The options shown as @samp{-options @var{args}} constrain the report cvs.texi(,10213) based on an argument: cvs.texi(,10214) cvs.texi(,10215) @table @code cvs.texi(,10216) @item -b @var{str} cvs.texi(,10217) Show data back to a record containing the string cvs.texi(,10218) @var{str} in either the module name, the file name, or cvs.texi(,10219) the repository path. cvs.texi(,10220) cvs.texi(,10221) @item -D @var{date} cvs.texi(,10222) Show data since @var{date}. This is slightly different cvs.texi(,10223) from the normal use of @samp{-D @var{date}}, which cvs.texi(,10224) selects the newest revision older than @var{date}. cvs.texi(,10225) cvs.texi(,10226) @item -f @var{file} cvs.texi(,10227) Show data for a particular file cvs.texi(,10228) (you can specify several @samp{-f} options on the same command line). cvs.texi(,10229) This is equivalent to specifying the file on the command line. cvs.texi(,10230) cvs.texi(,10231) @item -n @var{module} cvs.texi(,10232) Show data for a particular module cvs.texi(,10233) (you can specify several @samp{-n} options on the same command line). cvs.texi(,10234) cvs.texi(,10235) @item -p @var{repository} cvs.texi(,10236) Show data for a particular source repository (you cvs.texi(,10237) can specify several @samp{-p} options on the same command cvs.texi(,10238) line). cvs.texi(,10239) cvs.texi(,10240) @item -r @var{rev} cvs.texi(,10241) Show records referring to revisions since the revision cvs.texi(,10242) or tag named @var{rev} appears in individual @sc{rcs} cvs.texi(,10243) files. Each @sc{rcs} file is searched for the revision or cvs.texi(,10244) tag. cvs.texi(,10245) cvs.texi(,10246) @item -t @var{tag} cvs.texi(,10247) Show records since tag @var{tag} was last added to the cvs.texi(,10248) history file. This differs from the @samp{-r} flag cvs.texi(,10249) above in that it reads only the history file, not the cvs.texi(,10250) @sc{rcs} files, and is much faster. cvs.texi(,10251) cvs.texi(,10252) @item -u @var{name} cvs.texi(,10253) Show records for user @var{name}. cvs.texi(,10254) cvs.texi(,10255) @item -z @var{timezone} cvs.texi(,10256) Show times in the selected records using the specified cvs.texi(,10257) time zone instead of UTC. cvs.texi(,10258) @end table cvs.texi(,10259) cvs.texi(,10268) cvs.texi(,10269) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,10270) @node import cvs.texi(,10271) @appendixsec import---Import sources into CVS, using vendor branches cvs.texi(,10272) @cindex import (subcommand) cvs.texi(,10273) cvs.texi(,10274) @c FIXME: This node is way too long for one which has subnodes. cvs.texi(,10275) cvs.texi(,10276) @itemize @bullet cvs.texi(,10277) @item cvs.texi(,10278) Synopsis: import [-options] repository vendortag releasetag@dots{} cvs.texi(,10279) @item cvs.texi(,10280) Requires: Repository, source distribution directory. cvs.texi(,10281) @item cvs.texi(,10282) Changes: repository. cvs.texi(,10283) @end itemize cvs.texi(,10284) cvs.texi(,10285) Use @code{import} to incorporate an entire source cvs.texi(,10286) distribution from an outside source (e.g., a source cvs.texi(,10287) vendor) into your source repository directory. You can cvs.texi(,10288) use this command both for initial creation of a cvs.texi(,10289) repository, and for wholesale updates to the module cvs.texi(,10290) from the outside source. @xref{Tracking sources}, for cvs.texi(,10291) a discussion on this subject. cvs.texi(,10292) cvs.texi(,10293) The @var{repository} argument gives a directory name cvs.texi(,10294) (or a path to a directory) under the @sc{cvs} root directory cvs.texi(,10295) for repositories; if the directory did not exist, cvs.texi(,10296) import creates it. cvs.texi(,10297) cvs.texi(,10298) When you use import for updates to source that has been cvs.texi(,10299) modified in your source repository (since a prior cvs.texi(,10300) import), it will notify you of any files that conflict cvs.texi(,10301) in the two branches of development; use @samp{checkout cvs.texi(,10302) -j} to reconcile the differences, as import instructs cvs.texi(,10303) you to do. cvs.texi(,10304) cvs.texi(,10305) If @sc{cvs} decides a file should be ignored cvs.texi(,10306) (@pxref{cvsignore}), it does not import it and prints cvs.texi(,10307) @samp{I } followed by the filename (@pxref{import output}, for a cvs.texi(,10308) complete description of the output). cvs.texi(,10309) cvs.texi(,10310) If the file @file{$CVSROOT/CVSROOT/cvswrappers} exists, cvs.texi(,10311) any file whose names match the specifications in that cvs.texi(,10312) file will be treated as packages and the appropriate cvs.texi(,10313) filtering will be performed on the file/directory cvs.texi(,10314) before being imported. @xref{Wrappers}. cvs.texi(,10315) cvs.texi(,10316) The outside source is saved in a first-level cvs.texi(,10317) branch, by default 1.1.1. Updates are leaves of this cvs.texi(,10318) branch; for example, files from the first imported cvs.texi(,10319) collection of source will be revision 1.1.1.1, then cvs.texi(,10320) files from the first imported update will be revision cvs.texi(,10321) 1.1.1.2, and so on. cvs.texi(,10322) cvs.texi(,10323) At least three arguments are required. cvs.texi(,10324) @var{repository} is needed to identify the collection cvs.texi(,10325) of source. @var{vendortag} is a tag for the entire cvs.texi(,10326) branch (e.g., for 1.1.1). You must also specify at cvs.texi(,10327) least one @var{releasetag} to identify the files at cvs.texi(,10328) the leaves created each time you execute @code{import}. cvs.texi(,10329) cvs.texi(,10330) @c I'm not completely sure this belongs here. But cvs.texi(,10331) @c we need to say it _somewhere_ reasonably obvious; it cvs.texi(,10332) @c is a common misconception among people first learning CVS cvs.texi(,10333) Note that @code{import} does @emph{not} change the cvs.texi(,10334) directory in which you invoke it. In particular, it cvs.texi(,10335) does not set up that directory as a @sc{cvs} working cvs.texi(,10336) directory; if you want to work with the sources import cvs.texi(,10337) them first and then check them out into a different cvs.texi(,10338) directory (@pxref{Getting the source}). cvs.texi(,10339) cvs.texi(,10340) @menu cvs.texi(,10341) * import options:: import options cvs.texi(,10342) * import output:: import output cvs.texi(,10343) * import examples:: import examples cvs.texi(,10344) @end menu cvs.texi(,10345) cvs.texi(,10346) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,10347) @node import options cvs.texi(,10348) @appendixsubsec import options cvs.texi(,10349) cvs.texi(,10350) This standard option is supported by @code{import} cvs.texi(,10351) (@pxref{Common options}, for a complete description): cvs.texi(,10352) cvs.texi(,10353) @table @code cvs.texi(,10354) @item -m @var{message} cvs.texi(,10355) Use @var{message} as log information, instead of cvs.texi(,10356) invoking an editor. cvs.texi(,10357) @end table cvs.texi(,10358) cvs.texi(,10359) There are the following additional special options. cvs.texi(,10360) cvs.texi(,10361) @table @code cvs.texi(,10362) @item -b @var{branch} cvs.texi(,10363) See @ref{Multiple vendor branches}. cvs.texi(,10364) cvs.texi(,10365) @item -k @var{subst} cvs.texi(,10366) Indicate the keyword expansion mode desired. This cvs.texi(,10367) setting will apply to all files created during the cvs.texi(,10368) import, but not to any files that previously existed in cvs.texi(,10369) the repository. See @ref{Substitution modes}, for a cvs.texi(,10370) list of valid @samp{-k} settings. cvs.texi(,10371) cvs.texi(,10372) @item -I @var{name} cvs.texi(,10373) Specify file names that should be ignored during cvs.texi(,10374) import. You can use this option repeatedly. To avoid cvs.texi(,10375) ignoring any files at all (even those ignored by cvs.texi(,10376) default), specify `-I !'. cvs.texi(,10377) cvs.texi(,10378) @var{name} can be a file name pattern of the same type cvs.texi(,10379) that you can specify in the @file{.cvsignore} file. cvs.texi(,10380) @xref{cvsignore}. cvs.texi(,10381) @c -- Is this really true? cvs.texi(,10382) cvs.texi(,10383) @item -W @var{spec} cvs.texi(,10384) Specify file names that should be filtered during cvs.texi(,10385) import. You can use this option repeatedly. cvs.texi(,10386) cvs.texi(,10387) @var{spec} can be a file name pattern of the same type cvs.texi(,10388) that you can specify in the @file{.cvswrappers} cvs.texi(,10389) file. @xref{Wrappers}. cvs.texi(,10390) @end table cvs.texi(,10391) cvs.texi(,10392) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,10393) @node import output cvs.texi(,10394) @appendixsubsec import output cvs.texi(,10395) cvs.texi(,10396) @code{import} keeps you informed of its progress by printing a line cvs.texi(,10397) for each file, preceded by one character indicating the status of the file: cvs.texi(,10398) cvs.texi(,10399) @table @code cvs.texi(,10400) @item U @var{file} cvs.texi(,10401) The file already exists in the repository and has not been locally cvs.texi(,10402) modified; a new revision has been created (if necessary). cvs.texi(,10403) cvs.texi(,10404) @item N @var{file} cvs.texi(,10405) The file is a new file which has been added to the repository. cvs.texi(,10406) cvs.texi(,10407) @item C @var{file} cvs.texi(,10408) The file already exists in the repository but has been locally modified; cvs.texi(,10409) you will have to merge the changes. cvs.texi(,10410) cvs.texi(,10411) @item I @var{file} cvs.texi(,10412) The file is being ignored (@pxref{cvsignore}). cvs.texi(,10413) cvs.texi(,10414) @cindex Symbolic link, importing cvs.texi(,10415) @cindex Link, symbolic, importing cvs.texi(,10416) @c FIXME: also (somewhere else) probably cvs.texi(,10417) @c should be documenting what happens if you "cvs add" cvs.texi(,10418) @c a symbolic link. Also maybe what happens if cvs.texi(,10419) @c you manually create symbolic links within the cvs.texi(,10420) @c repository (? - not sure why we'd want to suggest cvs.texi(,10421) @c doing that). cvs.texi(,10422) @item L @var{file} cvs.texi(,10423) The file is a symbolic link; @code{cvs import} ignores symbolic links. cvs.texi(,10424) People periodically suggest that this behavior should cvs.texi(,10425) be changed, but if there is a consensus on what it cvs.texi(,10426) should be changed to, it is not apparent. cvs.texi(,10427) (Various options in the @file{modules} file can be used cvs.texi(,10428) to recreate symbolic links on checkout, update, etc.; cvs.texi(,10429) @pxref{modules}.) cvs.texi(,10430) @end table cvs.texi(,10431) cvs.texi(,10432) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,10433) @node import examples cvs.texi(,10434) @appendixsubsec import examples cvs.texi(,10435) cvs.texi(,10436) See @ref{Tracking sources}, and @ref{From files}. cvs.texi(,10437) cvs.texi(,10438) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,10439) @node log cvs.texi(,10440) @appendixsec log---Print out log information for files cvs.texi(,10441) @cindex log (subcommand) cvs.texi(,10442) cvs.texi(,10443) @itemize @bullet cvs.texi(,10444) @item cvs.texi(,10445) Synopsis: log [options] [files@dots{}] cvs.texi(,10446) @item cvs.texi(,10447) Requires: repository, working directory. cvs.texi(,10448) @item cvs.texi(,10449) Changes: nothing. cvs.texi(,10450) @end itemize cvs.texi(,10451) cvs.texi(,10452) Display log information for files. @code{log} used to cvs.texi(,10453) call the @sc{rcs} utility @code{rlog}. Although this cvs.texi(,10454) is no longer true in the current sources, this history cvs.texi(,10455) determines the format of the output and the options, cvs.texi(,10456) which are not quite in the style of the other @sc{cvs} cvs.texi(,10457) commands. cvs.texi(,10458) cvs.texi(,10459) @cindex Timezone, in output cvs.texi(,10460) @cindex Zone, time, in output cvs.texi(,10461) @c Kind of a funny place to document the timezone used cvs.texi(,10462) @c in output from commands other than @code{log}. cvs.texi(,10463) @c There is also more we need to say about this, cvs.texi(,10464) @c including what happens in a client/server environment. cvs.texi(,10465) The output includes the location of the @sc{rcs} file, cvs.texi(,10466) the @dfn{head} revision (the latest revision on the cvs.texi(,10467) trunk), all symbolic names (tags) and some other cvs.texi(,10468) things. For each revision, the revision number, the cvs.texi(,10469) author, the number of lines added/deleted and the log cvs.texi(,10470) message are printed. All times are displayed in cvs.texi(,10471) Coordinated Universal Time (UTC). (Other parts of cvs.texi(,10472) @sc{cvs} print times in the local timezone). cvs.texi(,10473) @c FIXCVS: need a better way to control the timezone cvs.texi(,10474) @c used in output. Previous/current versions of CVS did/do cvs.texi(,10475) @c sometimes support -z in RCSINIT, and/or an cvs.texi(,10476) @c undocumented (except by reference to 'rlog') -z option cvs.texi(,10477) @c to cvs log, but this has not been a consistent, cvs.texi(,10478) @c documented feature. Perhaps a new global option, cvs.texi(,10479) @c where LT means the client's timezone, which the cvs.texi(,10480) @c client then communicates to the server, is the cvs.texi(,10481) @c right solution. cvs.texi(,10482) cvs.texi(,10483) @strong{Note: @code{log} uses @samp{-R} in a way that conflicts cvs.texi(,10484) with the normal use inside @sc{cvs} (@pxref{Common options}).} cvs.texi(,10485) cvs.texi(,10486) @menu cvs.texi(,10487) * log options:: log options cvs.texi(,10488) * log examples:: log examples cvs.texi(,10489) @end menu cvs.texi(,10490) cvs.texi(,10491) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,10492) @node log options cvs.texi(,10493) @appendixsubsec log options cvs.texi(,10494) cvs.texi(,10495) By default, @code{log} prints all information that is cvs.texi(,10496) available. All other options restrict the output. cvs.texi(,10497) cvs.texi(,10498) @table @code cvs.texi(,10499) @item -b cvs.texi(,10500) Print information about the revisions on the default cvs.texi(,10501) branch, normally the highest branch on the trunk. cvs.texi(,10502) cvs.texi(,10503) @item -d @var{dates} cvs.texi(,10504) Print information about revisions with a checkin cvs.texi(,10505) date/time in the range given by the cvs.texi(,10506) semicolon-separated list of dates. The date formats cvs.texi(,10507) accepted are those accepted by the @samp{-D} option to cvs.texi(,10508) many other @sc{cvs} commands (@pxref{Common options}). cvs.texi(,10509) Dates can be combined into ranges as follows: cvs.texi(,10510) cvs.texi(,10511) @c Should we be thinking about accepting ISO8601 cvs.texi(,10512) @c ranges? For example "1972-09-10/1972-09-12". cvs.texi(,10513) @table @code cvs.texi(,10514) @item @var{d1}<@var{d2} cvs.texi(,10515) @itemx @var{d2}>@var{d1} cvs.texi(,10516) Select the revisions that were deposited between cvs.texi(,10517) @var{d1} and @var{d2}. cvs.texi(,10518) cvs.texi(,10519) @item <@var{d} cvs.texi(,10520) @itemx @var{d}> cvs.texi(,10521) Select all revisions dated @var{d} or earlier. cvs.texi(,10522) cvs.texi(,10523) @item @var{d}< cvs.texi(,10524) @itemx >@var{d} cvs.texi(,10525) Select all revisions dated @var{d} or later. cvs.texi(,10526) cvs.texi(,10527) @item @var{d} cvs.texi(,10528) Select the single, latest revision dated @var{d} or cvs.texi(,10529) earlier. cvs.texi(,10530) @end table cvs.texi(,10531) cvs.texi(,10532) The @samp{>} or @samp{<} characters may be followed by cvs.texi(,10533) @samp{=} to indicate an inclusive range rather than an cvs.texi(,10534) exclusive one. cvs.texi(,10535) cvs.texi(,10536) Note that the separator is a semicolon (;). cvs.texi(,10537) cvs.texi(,10538) @item -h cvs.texi(,10539) Print only the name of the @sc{rcs} file, name cvs.texi(,10540) of the file in the working directory, head, cvs.texi(,10541) default branch, access list, locks, symbolic names, and cvs.texi(,10542) suffix. cvs.texi(,10543) cvs.texi(,10544) @item -l cvs.texi(,10545) Local; run only in current working directory. (Default cvs.texi(,10546) is to run recursively). cvs.texi(,10547) cvs.texi(,10548) @item -N cvs.texi(,10549) Do not print the list of tags for this file. This cvs.texi(,10550) option can be very useful when your site uses a lot of cvs.texi(,10551) tags, so rather than "more"'ing over 3 pages of tag cvs.texi(,10552) information, the log information is presented without cvs.texi(,10553) tags at all. cvs.texi(,10554) cvs.texi(,10555) @item -R cvs.texi(,10556) Print only the name of the @sc{rcs} file. cvs.texi(,10557) cvs.texi(,10558) @c Note that using a bare revision (in addition to not cvs.texi(,10559) @c being explicitly documented here) is potentially cvs.texi(,10560) @c confusing; it shows the log message to get from the cvs.texi(,10561) @c previous revision to that revision. "-r1.3 -r1.6" cvs.texi(,10562) @c (equivalent to "-r1.3,1.6") is even worse; it cvs.texi(,10563) @c prints the messages to get from 1.2 to 1.3 and 1.5 cvs.texi(,10564) @c to 1.6. By analogy with "cvs diff", users might cvs.texi(,10565) @c expect that it is more like specifying a range. cvs.texi(,10566) @c It is not 100% clear to me how much of this should cvs.texi(,10567) @c be documented (for example, multiple -r options cvs.texi(,10568) @c perhaps could/should be deprecated given the false cvs.texi(,10569) @c analogy with "cvs diff"). cvs.texi(,10570) @c In general, this section should be rewritten to talk cvs.texi(,10571) @c about messages to get from revision rev1 to rev2, cvs.texi(,10572) @c rather than messages for revision rev2 (that is, the cvs.texi(,10573) @c messages are associated with a change not a static cvs.texi(,10574) @c revision and failing to make this distinction causes cvs.texi(,10575) @c much confusion). cvs.texi(,10576) @item -r@var{revisions} cvs.texi(,10577) Print information about revisions given in the cvs.texi(,10578) comma-separated list @var{revisions} of revisions and cvs.texi(,10579) ranges. The following table explains the available cvs.texi(,10580) range formats: cvs.texi(,10581) cvs.texi(,10582) @table @code cvs.texi(,10583) @item @var{rev1}:@var{rev2} cvs.texi(,10584) Revisions @var{rev1} to @var{rev2} (which must be on cvs.texi(,10585) the same branch). cvs.texi(,10586) cvs.texi(,10587) @item @var{rev1}::@var{rev2} cvs.texi(,10588) The same, but excluding @var{rev1}. cvs.texi(,10589) cvs.texi(,10590) @item :@var{rev} cvs.texi(,10591) @itemx ::@var{rev} cvs.texi(,10592) Revisions from the beginning of the branch up to cvs.texi(,10593) and including @var{rev}. cvs.texi(,10594) cvs.texi(,10595) @item @var{rev}: cvs.texi(,10596) Revisions starting with @var{rev} to the end of the cvs.texi(,10597) branch containing @var{rev}. cvs.texi(,10598) cvs.texi(,10599) @item @var{rev}:: cvs.texi(,10600) Revisions starting just after @var{rev} to the end of the cvs.texi(,10601) branch containing @var{rev}. cvs.texi(,10602) cvs.texi(,10603) @item @var{branch} cvs.texi(,10604) An argument that is a branch means all revisions on cvs.texi(,10605) that branch. cvs.texi(,10606) cvs.texi(,10607) @item @var{branch1}:@var{branch2} cvs.texi(,10608) @itemx @var{branch1}::@var{branch2} cvs.texi(,10609) A range of branches means all revisions cvs.texi(,10610) on the branches in that range. cvs.texi(,10611) cvs.texi(,10612) @item @var{branch}. cvs.texi(,10613) The latest revision in @var{branch}. cvs.texi(,10614) @end table cvs.texi(,10615) cvs.texi(,10616) A bare @samp{-r} with no revisions means the latest cvs.texi(,10617) revision on the default branch, normally the trunk. cvs.texi(,10618) There can be no space between the @samp{-r} option and cvs.texi(,10619) its argument. cvs.texi(,10620) cvs.texi(,10621) @item -S cvs.texi(,10622) Suppress the header if no revisions are selected. cvs.texi(,10623) cvs.texi(,10624) @item -s @var{states} cvs.texi(,10625) Print information about revisions whose state cvs.texi(,10626) attributes match one of the states given in the cvs.texi(,10627) comma-separated list @var{states}. cvs.texi(,10628) cvs.texi(,10629) @item -t cvs.texi(,10630) Print the same as @samp{-h}, plus the descriptive text. cvs.texi(,10631) cvs.texi(,10632) @item -w@var{logins} cvs.texi(,10633) Print information about revisions checked in by users cvs.texi(,10634) with login names appearing in the comma-separated list cvs.texi(,10635) @var{logins}. If @var{logins} is omitted, the user's cvs.texi(,10636) login is assumed. There can be no space between the cvs.texi(,10637) @samp{-w} option and its argument. cvs.texi(,10638) @end table cvs.texi(,10639) cvs.texi(,10640) @code{log} prints the intersection of the revisions cvs.texi(,10641) selected with the options @samp{-d}, @samp{-s}, and cvs.texi(,10642) @samp{-w}, intersected with the union of the revisions cvs.texi(,10643) selected by @samp{-b} and @samp{-r}. cvs.texi(,10644) cvs.texi(,10645) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,10646) @node log examples cvs.texi(,10647) @appendixsubsec log examples cvs.texi(,10648) cvs.texi(,10649) Contributed examples are gratefully accepted. cvs.texi(,10650) cvs.texi(,10651) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,10652) @node rdiff cvs.texi(,10653) @appendixsec rdiff---'patch' format diffs between releases cvs.texi(,10654) @cindex rdiff (subcommand) cvs.texi(,10655) cvs.texi(,10656) @itemize @bullet cvs.texi(,10657) @item cvs.texi(,10658) rdiff [-flags] [-V vn] [-r t|-D d [-r t2|-D d2]] modules@dots{} cvs.texi(,10659) @item cvs.texi(,10660) Requires: repository. cvs.texi(,10661) @item cvs.texi(,10662) Changes: nothing. cvs.texi(,10663) @item cvs.texi(,10664) Synonym: patch cvs.texi(,10665) @end itemize cvs.texi(,10666) cvs.texi(,10667) Builds a Larry Wall format patch(1) file between two cvs.texi(,10668) releases, that can be fed directly into the @code{patch} cvs.texi(,10669) program to bring an old release up-to-date with the new cvs.texi(,10670) release. (This is one of the few @sc{cvs} commands that cvs.texi(,10671) operates directly from the repository, and doesn't cvs.texi(,10672) require a prior checkout.) The diff output is sent to cvs.texi(,10673) the standard output device. cvs.texi(,10674) cvs.texi(,10675) You can specify (using the standard @samp{-r} and cvs.texi(,10676) @samp{-D} options) any combination of one or two cvs.texi(,10677) revisions or dates. If only one revision or date is cvs.texi(,10678) specified, the patch file reflects differences between cvs.texi(,10679) that revision or date and the current head revisions in cvs.texi(,10680) the @sc{rcs} file. cvs.texi(,10681) cvs.texi(,10682) Note that if the software release affected is contained cvs.texi(,10683) in more than one directory, then it may be necessary to cvs.texi(,10684) specify the @samp{-p} option to the @code{patch} command when cvs.texi(,10685) patching the old sources, so that @code{patch} is able to find cvs.texi(,10686) the files that are located in other directories. cvs.texi(,10687) cvs.texi(,10688) @menu cvs.texi(,10689) * rdiff options:: rdiff options cvs.texi(,10690) * rdiff examples:: rdiff examples cvs.texi(,10691) @end menu cvs.texi(,10692) cvs.texi(,10693) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,10694) @node rdiff options cvs.texi(,10695) @appendixsubsec rdiff options cvs.texi(,10696) cvs.texi(,10697) These standard options are supported by @code{rdiff} cvs.texi(,10698) (@pxref{Common options}, for a complete description of cvs.texi(,10699) them): cvs.texi(,10700) cvs.texi(,10701) @table @code cvs.texi(,10702) @item -D @var{date} cvs.texi(,10703) Use the most recent revision no later than @var{date}. cvs.texi(,10704) cvs.texi(,10705) @item -f cvs.texi(,10706) If no matching revision is found, retrieve the most cvs.texi(,10707) recent revision (instead of ignoring the file). cvs.texi(,10708) cvs.texi(,10709) @item -l cvs.texi(,10710) Local; don't descend subdirectories. cvs.texi(,10711) cvs.texi(,10712) @item -R cvs.texi(,10713) Examine directories recursively. This option is on by default. cvs.texi(,10714) cvs.texi(,10715) @item -r @var{tag} cvs.texi(,10716) Use revision @var{tag}. cvs.texi(,10717) @end table cvs.texi(,10718) cvs.texi(,10719) In addition to the above, these options are available: cvs.texi(,10720) cvs.texi(,10721) @table @code cvs.texi(,10722) @item -c cvs.texi(,10723) Use the context diff format. This is the default format. cvs.texi(,10724) cvs.texi(,10725) @item -s cvs.texi(,10726) Create a summary change report instead of a patch. The cvs.texi(,10727) summary includes information about files that were cvs.texi(,10728) changed or added between the releases. It is sent to cvs.texi(,10729) the standard output device. This is useful for finding cvs.texi(,10730) out, for example, which files have changed between two cvs.texi(,10731) dates or revisions. cvs.texi(,10732) cvs.texi(,10733) @item -t cvs.texi(,10734) A diff of the top two revisions is sent to the standard cvs.texi(,10735) output device. This is most useful for seeing what the cvs.texi(,10736) last change to a file was. cvs.texi(,10737) cvs.texi(,10738) @item -u cvs.texi(,10739) Use the unidiff format for the context diffs. cvs.texi(,10740) Remember that old versions cvs.texi(,10741) of the @code{patch} program can't handle the unidiff cvs.texi(,10742) format, so if you plan to post this patch to the net cvs.texi(,10743) you should probably not use @samp{-u}. cvs.texi(,10744) cvs.texi(,10745) @item -V @var{vn} cvs.texi(,10746) Expand keywords according to the rules current in cvs.texi(,10747) @sc{rcs} version @var{vn} (the expansion format changed with cvs.texi(,10748) @sc{rcs} version 5). Note that this option is no cvs.texi(,10749) longer accepted. @sc{cvs} will always expand keywords the cvs.texi(,10750) way that @sc{rcs} version 5 does. cvs.texi(,10751) @end table cvs.texi(,10752) cvs.texi(,10753) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,10754) @node rdiff examples cvs.texi(,10755) @appendixsubsec rdiff examples cvs.texi(,10756) cvs.texi(,10757) Suppose you receive mail from @t{foo@@example.net} asking for an cvs.texi(,10758) update from release 1.2 to 1.4 of the tc compiler. You cvs.texi(,10759) have no such patches on hand, but with @sc{cvs} that can cvs.texi(,10760) easily be fixed with a command such as this: cvs.texi(,10761) cvs.texi(,10762) @example cvs.texi(,10763) $ cvs rdiff -c -r FOO1_2 -r FOO1_4 tc | \ cvs.texi(,10764) $$ Mail -s 'The patches you asked for' foo@@example.net cvs.texi(,10765) @end example cvs.texi(,10766) cvs.texi(,10767) Suppose you have made release 1.3, and forked a branch cvs.texi(,10768) called @samp{R_1_3fix} for bugfixes. @samp{R_1_3_1} cvs.texi(,10769) corresponds to release 1.3.1, which was made some time cvs.texi(,10770) ago. Now, you want to see how much development has been cvs.texi(,10771) done on the branch. This command can be used: cvs.texi(,10772) cvs.texi(,10773) @example cvs.texi(,10774) $ cvs patch -s -r R_1_3_1 -r R_1_3fix module-name cvs.texi(,10775) cvs rdiff: Diffing module-name cvs.texi(,10776) File ChangeLog,v changed from revision 1.52.2.5 to 1.52.2.6 cvs.texi(,10777) File foo.c,v changed from revision 1.52.2.3 to 1.52.2.4 cvs.texi(,10778) File bar.h,v changed from revision 1.29.2.1 to 1.2 cvs.texi(,10779) @end example cvs.texi(,10780) cvs.texi(,10781) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,10782) @node release cvs.texi(,10783) @appendixsec release---Indicate that a Module is no longer in use cvs.texi(,10784) @cindex release (subcommand) cvs.texi(,10785) cvs.texi(,10786) @itemize @bullet cvs.texi(,10787) @item cvs.texi(,10788) release [-d] directories@dots{} cvs.texi(,10789) @item cvs.texi(,10790) Requires: Working directory. cvs.texi(,10791) @item cvs.texi(,10792) Changes: Working directory, history log. cvs.texi(,10793) @end itemize cvs.texi(,10794) cvs.texi(,10795) This command is meant to safely cancel the effect of cvs.texi(,10796) @samp{cvs checkout}. Since @sc{cvs} doesn't lock files, it cvs.texi(,10797) isn't strictly necessary to use this command. You can cvs.texi(,10798) always simply delete your working directory, if you cvs.texi(,10799) like; but you risk losing changes you may have cvs.texi(,10800) forgotten, and you leave no trace in the @sc{cvs} history cvs.texi(,10801) file (@pxref{history file}) that you've abandoned your cvs.texi(,10802) checkout. cvs.texi(,10803) cvs.texi(,10804) Use @samp{cvs release} to avoid these problems. This cvs.texi(,10805) command checks that no uncommitted changes are cvs.texi(,10806) present; that you are executing it from immediately cvs.texi(,10807) above a @sc{cvs} working directory; and that the repository cvs.texi(,10808) recorded for your files is the same as the repository cvs.texi(,10809) defined in the module database. cvs.texi(,10810) cvs.texi(,10811) If all these conditions are true, @samp{cvs release} cvs.texi(,10812) leaves a record of its execution (attesting to your cvs.texi(,10813) intentionally abandoning your checkout) in the @sc{cvs} cvs.texi(,10814) history log. cvs.texi(,10815) cvs.texi(,10816) @menu cvs.texi(,10817) * release options:: release options cvs.texi(,10818) * release output:: release output cvs.texi(,10819) * release examples:: release examples cvs.texi(,10820) @end menu cvs.texi(,10821) cvs.texi(,10822) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,10823) @node release options cvs.texi(,10824) @appendixsubsec release options cvs.texi(,10825) cvs.texi(,10826) The @code{release} command supports one command option: cvs.texi(,10827) cvs.texi(,10828) @table @code cvs.texi(,10829) @item -d cvs.texi(,10830) Delete your working copy of the file if the release cvs.texi(,10831) succeeds. If this flag is not given your files will cvs.texi(,10832) remain in your working directory. cvs.texi(,10833) cvs.texi(,10834) @strong{WARNING: The @code{release} command deletes cvs.texi(,10835) all directories and files recursively. This cvs.texi(,10836) has the very serious side-effect that any directory cvs.texi(,10837) that you have created inside your checked-out sources, cvs.texi(,10838) and not added to the repository (using the @code{add} cvs.texi(,10839) command; @pxref{Adding files}) will be silently deleted---even cvs.texi(,10840) if it is non-empty!} cvs.texi(,10841) @end table cvs.texi(,10842) cvs.texi(,10843) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,10844) @node release output cvs.texi(,10845) @appendixsubsec release output cvs.texi(,10846) cvs.texi(,10847) Before @code{release} releases your sources it will cvs.texi(,10848) print a one-line message for any file that is not cvs.texi(,10849) up-to-date. cvs.texi(,10850) cvs.texi(,10851) @table @code cvs.texi(,10852) @item U @var{file} cvs.texi(,10853) @itemx P @var{file} cvs.texi(,10854) There exists a newer revision of this file in the cvs.texi(,10855) repository, and you have not modified your local copy cvs.texi(,10856) of the file (@samp{U} and @samp{P} mean the same thing). cvs.texi(,10857) cvs.texi(,10858) @item A @var{file} cvs.texi(,10859) The file has been added to your private copy of the cvs.texi(,10860) sources, but has not yet been committed to the cvs.texi(,10861) repository. If you delete your copy of the sources cvs.texi(,10862) this file will be lost. cvs.texi(,10863) cvs.texi(,10864) @item R @var{file} cvs.texi(,10865) The file has been removed from your private copy of the cvs.texi(,10866) sources, but has not yet been removed from the cvs.texi(,10867) repository, since you have not yet committed the cvs.texi(,10868) removal. @xref{commit}. cvs.texi(,10869) cvs.texi(,10870) @item M @var{file} cvs.texi(,10871) The file is modified in your working directory. There cvs.texi(,10872) might also be a newer revision inside the repository. cvs.texi(,10873) cvs.texi(,10874) @item ? @var{file} cvs.texi(,10875) @var{file} is in your working directory, but does not cvs.texi(,10876) correspond to anything in the source repository, and is cvs.texi(,10877) not in the list of files for @sc{cvs} to ignore (see the cvs.texi(,10878) description of the @samp{-I} option, and cvs.texi(,10879) @pxref{cvsignore}). If you remove your working cvs.texi(,10880) sources, this file will be lost. cvs.texi(,10881) @end table cvs.texi(,10882) cvs.texi(,10883) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,10884) @node release examples cvs.texi(,10885) @appendixsubsec release examples cvs.texi(,10886) cvs.texi(,10887) Release the @file{tc} directory, and delete your local working copy cvs.texi(,10888) of the files. cvs.texi(,10889) cvs.texi(,10890) @example cvs.texi(,10891) $ cd .. # @r{You must stand immediately above the} cvs.texi(,10892) # @r{sources when you issue @samp{cvs release}.} cvs.texi(,10893) $ cvs release -d tc cvs.texi(,10894) You have [0] altered files in this repository. cvs.texi(,10895) Are you sure you want to release (and delete) directory `tc': y cvs.texi(,10896) $ cvs.texi(,10897) @end example cvs.texi(,10898) cvs.texi(,10899) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,10900) @node update cvs.texi(,10901) @appendixsec update---Bring work tree in sync with repository cvs.texi(,10902) @cindex update (subcommand) cvs.texi(,10903) cvs.texi(,10904) @itemize @bullet cvs.texi(,10905) @item cvs.texi(,10906) update [-ACdflPpR] [-I name] [-j rev [-j rev]] [-k kflag] [-r tag|-D date] [-W spec] files@dots{} cvs.texi(,10907) @item cvs.texi(,10908) Requires: repository, working directory. cvs.texi(,10909) @item cvs.texi(,10910) Changes: working directory. cvs.texi(,10911) @end itemize cvs.texi(,10912) cvs.texi(,10913) After you've run checkout to create your private copy cvs.texi(,10914) of source from the common repository, other developers cvs.texi(,10915) will continue changing the central source. From time cvs.texi(,10916) to time, when it is convenient in your development cvs.texi(,10917) process, you can use the @code{update} command from cvs.texi(,10918) within your working directory to reconcile your work cvs.texi(,10919) with any revisions applied to the source repository cvs.texi(,10920) since your last checkout or update. Without the @code{-C} cvs.texi(,10921) option, @code{update} will also merge any differences cvs.texi(,10922) between the local copy of files and their base revisions cvs.texi(,10923) into any destination revisions specified with @code{-r}, cvs.texi(,10924) @code{-D}, or @code{-A}. cvs.texi(,10925) cvs.texi(,10926) @menu cvs.texi(,10927) * update options:: update options cvs.texi(,10928) * update output:: update output cvs.texi(,10929) @end menu cvs.texi(,10930) cvs.texi(,10931) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,10932) @node update options cvs.texi(,10933) @appendixsubsec update options cvs.texi(,10934) cvs.texi(,10935) These standard options are available with @code{update} cvs.texi(,10936) (@pxref{Common options}, for a complete description of cvs.texi(,10937) them): cvs.texi(,10938) cvs.texi(,10939) @table @code cvs.texi(,10940) @item -D date cvs.texi(,10941) Use the most recent revision no later than @var{date}. cvs.texi(,10942) This option is sticky, and implies @samp{-P}. cvs.texi(,10943) See @ref{Sticky tags}, for more information on sticky tags/dates. cvs.texi(,10944) cvs.texi(,10945) @item -f cvs.texi(,10946) Only useful with the @samp{-D @var{date}} or @samp{-r cvs.texi(,10947) @var{tag}} flags. If no matching revision is found, cvs.texi(,10948) retrieve the most recent revision (instead of ignoring cvs.texi(,10949) the file). cvs.texi(,10950) cvs.texi(,10951) @item -k @var{kflag} cvs.texi(,10952) Process keywords according to @var{kflag}. See cvs.texi(,10953) @ref{Keyword substitution}. cvs.texi(,10954) This option is sticky; future updates of cvs.texi(,10955) this file in this working directory will use the same cvs.texi(,10956) @var{kflag}. The @code{status} command can be viewed cvs.texi(,10957) to see the sticky options. See @ref{Invoking CVS}, for cvs.texi(,10958) more information on the @code{status} command. cvs.texi(,10959) cvs.texi(,10960) @item -l cvs.texi(,10961) Local; run only in current working directory. @xref{Recursive behavior}. cvs.texi(,10962) cvs.texi(,10963) @item -P cvs.texi(,10964) Prune empty directories. See @ref{Moving directories}. cvs.texi(,10965) cvs.texi(,10966) @item -p cvs.texi(,10967) Pipe files to the standard output. cvs.texi(,10968) cvs.texi(,10969) @item -R cvs.texi(,10970) Update directories recursively (default). @xref{Recursive cvs.texi(,10971) behavior}. cvs.texi(,10972) cvs.texi(,10973) @item -r rev cvs.texi(,10974) Retrieve revision/tag @var{rev}. This option is sticky, cvs.texi(,10975) and implies @samp{-P}. cvs.texi(,10976) See @ref{Sticky tags}, for more information on sticky tags/dates. cvs.texi(,10977) @end table cvs.texi(,10978) cvs.texi(,10979) @need 800 cvs.texi(,10980) These special options are also available with cvs.texi(,10981) @code{update}. cvs.texi(,10982) cvs.texi(,10983) @table @code cvs.texi(,10984) @item -A cvs.texi(,10985) Reset any sticky tags, dates, or @samp{-k} options. cvs.texi(,10986) See @ref{Sticky tags}, for more information on sticky tags/dates. cvs.texi(,10987) cvs.texi(,10988) @item -C cvs.texi(,10989) Overwrite locally modified files with clean copies from cvs.texi(,10990) the repository (the modified file is saved in cvs.texi(,10991) @file{.#@var{file}.@var{revision}}, however). cvs.texi(,10992) cvs.texi(,10993) @item -d cvs.texi(,10994) Create any directories that exist in the repository if cvs.texi(,10995) they're missing from the working directory. Normally, cvs.texi(,10996) @code{update} acts only on directories and files that cvs.texi(,10997) were already enrolled in your working directory. cvs.texi(,10998) cvs.texi(,10999) This is useful for updating directories that were cvs.texi(,11000) created in the repository since the initial checkout; cvs.texi(,11001) but it has an unfortunate side effect. If you cvs.texi(,11002) deliberately avoided certain directories in the cvs.texi(,11003) repository when you created your working directory cvs.texi(,11004) (either through use of a module name or by listing cvs.texi(,11005) explicitly the files and directories you wanted on the cvs.texi(,11006) command line), then updating with @samp{-d} will create cvs.texi(,11007) those directories, which may not be what you want. cvs.texi(,11008) cvs.texi(,11009) @item -I @var{name} cvs.texi(,11010) Ignore files whose names match @var{name} (in your cvs.texi(,11011) working directory) during the update. You can specify cvs.texi(,11012) @samp{-I} more than once on the command line to specify cvs.texi(,11013) several files to ignore. Use @samp{-I !} to avoid cvs.texi(,11014) ignoring any files at all. @xref{cvsignore}, for other cvs.texi(,11015) ways to make @sc{cvs} ignore some files. cvs.texi(,11016) cvs.texi(,11017) @item -W@var{spec} cvs.texi(,11018) Specify file names that should be filtered during cvs.texi(,11019) update. You can use this option repeatedly. cvs.texi(,11020) cvs.texi(,11021) @var{spec} can be a file name pattern of the same type cvs.texi(,11022) that you can specify in the @file{.cvswrappers} cvs.texi(,11023) file. @xref{Wrappers}. cvs.texi(,11024) cvs.texi(,11025) @item -j@var{revision} cvs.texi(,11026) With two @samp{-j} options, merge changes from the cvs.texi(,11027) revision specified with the first @samp{-j} option to cvs.texi(,11028) the revision specified with the second @samp{j} option, cvs.texi(,11029) into the working directory. cvs.texi(,11030) cvs.texi(,11031) With one @samp{-j} option, merge changes from the cvs.texi(,11032) ancestor revision to the revision specified with the cvs.texi(,11033) @samp{-j} option, into the working directory. The cvs.texi(,11034) ancestor revision is the common ancestor of the cvs.texi(,11035) revision which the working directory is based on, and cvs.texi(,11036) the revision specified in the @samp{-j} option. cvs.texi(,11037) cvs.texi(,11038) Note that using a single @samp{-j @var{tagname}} option rather than cvs.texi(,11039) @samp{-j @var{branchname}} to merge changes from a branch will cvs.texi(,11040) often not remove files which were removed on the branch. cvs.texi(,11041) @xref{Merging adds and removals}, for more. cvs.texi(,11042) cvs.texi(,11043) In addition, each @samp{-j} option can contain an optional cvs.texi(,11044) date specification which, when used with branches, can cvs.texi(,11045) limit the chosen revision to one within a specific cvs.texi(,11046) date. An optional date is specified by adding a colon cvs.texi(,11047) (:) to the tag: cvs.texi(,11048) @samp{-j@var{Symbolic_Tag}:@var{Date_Specifier}}. cvs.texi(,11049) cvs.texi(,11050) @xref{Branching and merging}. cvs.texi(,11051) cvs.texi(,11052) @end table cvs.texi(,11053) cvs.texi(,11054) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,11055) @node update output cvs.texi(,11056) @appendixsubsec update output cvs.texi(,11057) cvs.texi(,11058) @code{update} and @code{checkout} keep you informed of cvs.texi(,11059) their progress by printing a line for each file, preceded cvs.texi(,11060) by one character indicating the status of the file: cvs.texi(,11061) cvs.texi(,11062) @table @code cvs.texi(,11063) @item U @var{file} cvs.texi(,11064) The file was brought up to date with respect to the cvs.texi(,11065) repository. This is done for any file that exists in cvs.texi(,11066) the repository but not in your source, and for files cvs.texi(,11067) that you haven't changed but are not the most recent cvs.texi(,11068) versions available in the repository. cvs.texi(,11069) cvs.texi(,11070) @item P @var{file} cvs.texi(,11071) Like @samp{U}, but the @sc{cvs} server sends a patch instead of an entire cvs.texi(,11072) file. This accomplishes the same thing as @samp{U} using less bandwidth. cvs.texi(,11073) cvs.texi(,11074) @item A @var{file} cvs.texi(,11075) The file has been added to your private copy of the cvs.texi(,11076) sources, and will be added to the source repository cvs.texi(,11077) when you run @code{commit} on the file. This is a cvs.texi(,11078) reminder to you that the file needs to be committed. cvs.texi(,11079) cvs.texi(,11080) @item R @var{file} cvs.texi(,11081) The file has been removed from your private copy of the cvs.texi(,11082) sources, and will be removed from the source repository cvs.texi(,11083) when you run @code{commit} on the file. This is a cvs.texi(,11084) reminder to you that the file needs to be committed. cvs.texi(,11085) cvs.texi(,11086) @item M @var{file} cvs.texi(,11087) The file is modified in your working directory. cvs.texi(,11088) cvs.texi(,11089) @samp{M} can indicate one of two states for a file cvs.texi(,11090) you're working on: either there were no modifications cvs.texi(,11091) to the same file in the repository, so that your file cvs.texi(,11092) remains as you last saw it; or there were modifications cvs.texi(,11093) in the repository as well as in your copy, but they cvs.texi(,11094) were merged successfully, without conflict, in your cvs.texi(,11095) working directory. cvs.texi(,11096) cvs.texi(,11097) @sc{cvs} will print some messages if it merges your work, cvs.texi(,11098) and a backup copy of your working file (as it looked cvs.texi(,11099) before you ran @code{update}) will be made. The exact cvs.texi(,11100) name of that file is printed while @code{update} runs. cvs.texi(,11101) cvs.texi(,11102) @item C @var{file} cvs.texi(,11103) @cindex .# files cvs.texi(,11104) @cindex __ files (VMS) cvs.texi(,11105) A conflict was detected while trying to merge your cvs.texi(,11106) changes to @var{file} with changes from the source cvs.texi(,11107) repository. @var{file} (the copy in your working cvs.texi(,11108) directory) is now the result of attempting to merge cvs.texi(,11109) the two revisions; an unmodified copy of your file cvs.texi(,11110) is also in your working directory, with the name cvs.texi(,11111) @file{.#@var{file}.@var{revision}} where @var{revision} cvs.texi(,11112) is the revision that your modified file started cvs.texi(,11113) from. Resolve the conflict as described in cvs.texi(,11114) @ref{Conflicts example}. cvs.texi(,11115) @c "some systems" as in out-of-the-box OSes? Not as cvs.texi(,11116) @c far as I know. We need to advise sysadmins as well cvs.texi(,11117) @c as users how to set up this kind of purge, if that is cvs.texi(,11118) @c what they want. cvs.texi(,11119) @c We also might want to think about cleaner solutions, cvs.texi(,11120) @c like having CVS remove the .# file once the conflict cvs.texi(,11121) @c has been resolved or something like that. cvs.texi(,11122) (Note that some systems automatically purge cvs.texi(,11123) files that begin with @file{.#} if they have not been cvs.texi(,11124) accessed for a few days. If you intend to keep a copy cvs.texi(,11125) of your original file, it is a very good idea to rename cvs.texi(,11126) it.) Under @sc{vms}, the file name starts with cvs.texi(,11127) @file{__} rather than @file{.#}. cvs.texi(,11128) cvs.texi(,11129) @item ? @var{file} cvs.texi(,11130) @var{file} is in your working directory, but does not cvs.texi(,11131) correspond to anything in the source repository, and is cvs.texi(,11132) not in the list of files for @sc{cvs} to ignore (see the cvs.texi(,11133) description of the @samp{-I} option, and cvs.texi(,11134) @pxref{cvsignore}). cvs.texi(,11135) @end table cvs.texi(,11136) cvs.texi(,11137) @node Invoking CVS cvs.texi(,11138) @appendix Quick reference to CVS commands cvs.texi(,11139) @cindex Command reference cvs.texi(,11140) @cindex Reference, commands cvs.texi(,11141) @cindex Invoking CVS cvs.texi(,11142) cvs.texi(,11143) This appendix describes how to invoke @sc{cvs}, with cvs.texi(,11144) references to where each command or feature is cvs.texi(,11145) described in detail. For other references run the cvs.texi(,11146) @code{cvs --help} command, or see @ref{Index}. cvs.texi(,11147) cvs.texi(,11148) A @sc{cvs} command looks like: cvs.texi(,11149) cvs.texi(,11150) @example cvs.texi(,11151) cvs [ @var{global_options} ] @var{command} [ @var{command_options} ] [ @var{command_args} ] cvs.texi(,11152) @end example cvs.texi(,11153) cvs.texi(,11154) Global options: cvs.texi(,11155) cvs.texi(,11156) @table @code cvs.texi(,11157) @item --allow-root=@var{rootdir} cvs.texi(,11158) Specify legal @sc{cvsroot} directory (server only) (not cvs.texi(,11159) in @sc{cvs} 1.9 and older). See @ref{Password cvs.texi(,11160) authentication server}. cvs.texi(,11161) cvs.texi(,11162) @item -a cvs.texi(,11163) Authenticate all communication (client only) (not in @sc{cvs} cvs.texi(,11164) 1.9 and older). See @ref{Global options}. cvs.texi(,11165) cvs.texi(,11166) @item -b cvs.texi(,11167) Specify RCS location (@sc{cvs} 1.9 and older). See cvs.texi(,11168) @ref{Global options}. cvs.texi(,11169) cvs.texi(,11170) @item -d @var{root} cvs.texi(,11171) Specify the @sc{cvsroot}. See @ref{Repository}. cvs.texi(,11172) cvs.texi(,11173) @item -e @var{editor} cvs.texi(,11174) Edit messages with @var{editor}. See @ref{Committing cvs.texi(,11175) your changes}. cvs.texi(,11176) cvs.texi(,11177) @item -f cvs.texi(,11178) Do not read the @file{~/.cvsrc} file. See @ref{Global cvs.texi(,11179) options}. cvs.texi(,11180) cvs.texi(,11181) @item -H cvs.texi(,11182) @itemx --help cvs.texi(,11183) Print a help message. See @ref{Global options}. cvs.texi(,11184) cvs.texi(,11185) @item -l cvs.texi(,11186) Do not log in @file{$CVSROOT/CVSROOT/history} file. See @ref{Global cvs.texi(,11187) options}. cvs.texi(,11188) cvs.texi(,11189) @item -n cvs.texi(,11190) Do not change any files. See @ref{Global options}. cvs.texi(,11191) cvs.texi(,11192) @item -Q cvs.texi(,11193) Be really quiet. See @ref{Global options}. cvs.texi(,11194) cvs.texi(,11195) @item -q cvs.texi(,11196) Be somewhat quiet. See @ref{Global options}. cvs.texi(,11197) cvs.texi(,11198) @item -r cvs.texi(,11199) Make new working files read-only. See @ref{Global options}. cvs.texi(,11200) cvs.texi(,11201) @item -s @var{variable}=@var{value} cvs.texi(,11202) Set a user variable. See @ref{Variables}. cvs.texi(,11203) cvs.texi(,11204) @item -T @var{tempdir} cvs.texi(,11205) Put temporary files in @var{tempdir}. See @ref{Global cvs.texi(,11206) options}. cvs.texi(,11207) cvs.texi(,11208) @item -t cvs.texi(,11209) Trace @sc{cvs} execution. See @ref{Global options}. cvs.texi(,11210) cvs.texi(,11211) @item -v cvs.texi(,11212) @item --version cvs.texi(,11213) Display version and copyright information for @sc{cvs}. cvs.texi(,11214) cvs.texi(,11215) @item -w cvs.texi(,11216) Make new working files read-write. See @ref{Global cvs.texi(,11217) options}. cvs.texi(,11218) cvs.texi(,11219) @item -x cvs.texi(,11220) Encrypt all communication (client only). cvs.texi(,11221) See @ref{Global options}. cvs.texi(,11222) cvs.texi(,11223) @item -z @var{gzip-level} cvs.texi(,11224) @cindex Compression cvs.texi(,11225) @cindex Gzip cvs.texi(,11226) Set the compression level (client only). cvs.texi(,11227) See @ref{Global options}. cvs.texi(,11228) @end table cvs.texi(,11229) cvs.texi(,11230) Keyword expansion modes (@pxref{Substitution modes}): cvs.texi(,11231) cvs.texi(,11232) @example cvs.texi(splitrcskeyword,11233) -kkv $cvs.texi(splitrcskeyword,11233) @i{}Id: file1,v 1.1 1993/12/09 03:21:13 joe Exp $ cvs.texi(splitrcskeyword,11234) -kkvl $cvs.texi(splitrcskeyword,11234) @i{}Id: file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $ cvs.texi(splitrcskeyword,11235) -kk $cvs.texi(splitrcskeyword,11235) @i{}Id$ cvs.texi(,11236) -kv file1,v 1.1 1993/12/09 03:21:13 joe Exp cvs.texi(,11237) -ko @i{no expansion} cvs.texi(,11238) -kb @i{no expansion, file is binary} cvs.texi(,11239) @end example cvs.texi(,11240) cvs.texi(,11241) Keywords (@pxref{Keyword list}): cvs.texi(,11242) cvs.texi(,11243) @example cvs.texi(splitrcskeyword,11244) $cvs.texi(splitrcskeyword,11244) @i{}Author: joe $ cvs.texi(splitrcskeyword,11245) $cvs.texi(splitrcskeyword,11245) @i{}Date: 1993/12/09 03:21:13 $ cvs.texi(splitrcskeyword,11246) $cvs.texi(splitrcskeyword,11246) @i{}CVSHeader: files/file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $ cvs.texi(splitrcskeyword,11247) $cvs.texi(splitrcskeyword,11247) @i{}Header: /home/files/file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $ cvs.texi(splitrcskeyword,11248) $cvs.texi(splitrcskeyword,11248) @i{}Id: file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $ cvs.texi(splitrcskeyword,11249) $cvs.texi(splitrcskeyword,11249) @i{}Locker: harry $ cvs.texi(splitrcskeyword,11250) $cvs.texi(splitrcskeyword,11250) @i{}Name: snapshot_1_14 $ cvs.texi(splitrcskeyword,11251) $cvs.texi(splitrcskeyword,11251) @i{}RCSfile: file1,v $ cvs.texi(splitrcskeyword,11252) $cvs.texi(splitrcskeyword,11252) @i{}Revision: 1.1 $ cvs.texi(splitrcskeyword,11253) $cvs.texi(splitrcskeyword,11253) @i{}Source: /home/files/file1,v $ cvs.texi(splitrcskeyword,11254) $cvs.texi(splitrcskeyword,11254) @i{}State: Exp $ cvs.texi(splitrcskeyword,11255) $cvs.texi(splitrcskeyword,11255) @i{}Log: file1,v $ cvs.texi(,11256) Revision 1.1 1993/12/09 03:30:17 joe cvs.texi(,11257) Initial revision cvs.texi(,11258) cvs.texi(,11259) @end example cvs.texi(,11260) cvs.texi(,11261) @c The idea behind this table is that we want each item cvs.texi(,11262) @c to be a sentence or two at most. Preferably a cvs.texi(,11263) @c single line. cvs.texi(,11264) @c cvs.texi(,11265) @c In some cases refs to "foo options" are just to get cvs.texi(,11266) @c this thing written quickly, not because the "foo cvs.texi(,11267) @c options" node is really the best place to point. cvs.texi(,11268) Commands, command options, and command arguments: cvs.texi(,11269) cvs.texi(,11270) @table @code cvs.texi(,11271) @c ------------------------------------------------------------ cvs.texi(,11272) @item add [@var{options}] [@var{files}@dots{}] cvs.texi(,11273) Add a new file/directory. See @ref{Adding files}. cvs.texi(,11274) cvs.texi(,11275) @table @code cvs.texi(,11276) @item -k @var{kflag} cvs.texi(,11277) Set keyword expansion. cvs.texi(,11278) cvs.texi(,11279) @item -m @var{msg} cvs.texi(,11280) Set file description. cvs.texi(,11281) @end table cvs.texi(,11282) cvs.texi(,11283) @c ------------------------------------------------------------ cvs.texi(,11284) @item admin [@var{options}] [@var{files}@dots{}] cvs.texi(,11285) Administration of history files in the repository. See cvs.texi(,11286) @ref{admin}. cvs.texi(,11287) @c This list omits those options which are not cvs.texi(,11288) @c documented as being useful with CVS. That might be cvs.texi(,11289) @c a mistake... cvs.texi(,11290) cvs.texi(,11291) @table @code cvs.texi(,11292) @item -b[@var{rev}] cvs.texi(,11293) Set default branch. See @ref{Reverting local changes}. cvs.texi(,11294) cvs.texi(,11295) @item -c@var{string} cvs.texi(,11296) Set comment leader. cvs.texi(,11297) cvs.texi(,11298) @item -k@var{subst} cvs.texi(,11299) Set keyword substitution. See @ref{Keyword cvs.texi(,11300) substitution}. cvs.texi(,11301) cvs.texi(,11302) @item -l[@var{rev}] cvs.texi(,11303) Lock revision @var{rev}, or latest revision. cvs.texi(,11304) cvs.texi(,11305) @item -m@var{rev}:@var{msg} cvs.texi(,11306) Replace the log message of revision @var{rev} with cvs.texi(,11307) @var{msg}. cvs.texi(,11308) cvs.texi(,11309) @item -o@var{range} cvs.texi(,11310) Delete revisions from the repository. See cvs.texi(,11311) @ref{admin options}. cvs.texi(,11312) cvs.texi(,11313) @item -q cvs.texi(,11314) Run quietly; do not print diagnostics. cvs.texi(,11315) cvs.texi(,11316) @item -s@var{state}[:@var{rev}] cvs.texi(,11317) Set the state. cvs.texi(,11318) cvs.texi(,11319) @c Does not work for client/server CVS cvs.texi(,11320) @item -t cvs.texi(,11321) Set file description from standard input. cvs.texi(,11322) cvs.texi(,11323) @item -t@var{file} cvs.texi(,11324) Set file description from @var{file}. cvs.texi(,11325) cvs.texi(,11326) @item -t-@var{string} cvs.texi(,11327) Set file description to @var{string}. cvs.texi(,11328) cvs.texi(,11329) @item -u[@var{rev}] cvs.texi(,11330) Unlock revision @var{rev}, or latest revision. cvs.texi(,11331) @end table cvs.texi(,11332) cvs.texi(,11333) @c ------------------------------------------------------------ cvs.texi(,11334) @item annotate [@var{options}] [@var{files}@dots{}] cvs.texi(,11335) Show last revision where each line was modified. See cvs.texi(,11336) @ref{annotate}. cvs.texi(,11337) cvs.texi(,11338) @table @code cvs.texi(,11339) @item -D @var{date} cvs.texi(,11340) Annotate the most recent revision no later than cvs.texi(,11341) @var{date}. See @ref{Common options}. cvs.texi(,11342) cvs.texi(,11343) @item -F cvs.texi(,11344) Force annotation of binary files. (Without this option, cvs.texi(,11345) binary files are skipped with a message.) cvs.texi(,11346) cvs.texi(,11347) @item -f cvs.texi(,11348) Use head revision if tag/date not found. See cvs.texi(,11349) @ref{Common options}. cvs.texi(,11350) cvs.texi(,11351) @item -l cvs.texi(,11352) Local; run only in current working directory. @xref{Recursive behavior}. cvs.texi(,11353) cvs.texi(,11354) @item -R cvs.texi(,11355) Operate recursively (default). @xref{Recursive cvs.texi(,11356) behavior}. cvs.texi(,11357) cvs.texi(,11358) @item -r @var{tag} cvs.texi(,11359) Annotate revision @var{tag}. See @ref{Common options}. cvs.texi(,11360) @end table cvs.texi(,11361) cvs.texi(,11362) @c ------------------------------------------------------------ cvs.texi(,11363) @item checkout [@var{options}] @var{modules}@dots{} cvs.texi(,11364) Get a copy of the sources. See @ref{checkout}. cvs.texi(,11365) cvs.texi(,11366) @table @code cvs.texi(,11367) @item -A cvs.texi(,11368) Reset any sticky tags/date/options. See @ref{Sticky cvs.texi(,11369) tags} and @ref{Keyword substitution}. cvs.texi(,11370) cvs.texi(,11371) @item -c cvs.texi(,11372) Output the module database. See @ref{checkout options}. cvs.texi(,11373) cvs.texi(,11374) @item -D @var{date} cvs.texi(,11375) Check out revisions as of @var{date} (is sticky). See cvs.texi(,11376) @ref{Common options}. cvs.texi(,11377) cvs.texi(,11378) @item -d @var{dir} cvs.texi(,11379) Check out into @var{dir}. See @ref{checkout options}. cvs.texi(,11380) cvs.texi(,11381) @item -f cvs.texi(,11382) Use head revision if tag/date not found. See cvs.texi(,11383) @ref{Common options}. cvs.texi(,11384) cvs.texi(,11385) @c Probably want to use rev1/rev2 style like for diff cvs.texi(,11386) @c -r. Here and in on-line help. cvs.texi(,11387) @item -j @var{rev} cvs.texi(,11388) Merge in changes. See @ref{checkout options}. cvs.texi(,11389) cvs.texi(,11390) @item -k @var{kflag} cvs.texi(,11391) Use @var{kflag} keyword expansion. See cvs.texi(,11392) @ref{Substitution modes}. cvs.texi(,11393) cvs.texi(,11394) @item -l cvs.texi(,11395) Local; run only in current working directory. @xref{Recursive behavior}. cvs.texi(,11396) cvs.texi(,11397) @item -N cvs.texi(,11398) Don't ``shorten'' module paths if -d specified. See cvs.texi(,11399) @ref{checkout options}. cvs.texi(,11400) cvs.texi(,11401) @item -n cvs.texi(,11402) Do not run module program (if any). See @ref{checkout options}. cvs.texi(,11403) cvs.texi(,11404) @item -P cvs.texi(,11405) Prune empty directories. See @ref{Moving directories}. cvs.texi(,11406) cvs.texi(,11407) @item -p cvs.texi(,11408) Check out files to standard output (avoids cvs.texi(,11409) stickiness). See @ref{checkout options}. cvs.texi(,11410) cvs.texi(,11411) @item -R cvs.texi(,11412) Operate recursively (default). @xref{Recursive cvs.texi(,11413) behavior}. cvs.texi(,11414) cvs.texi(,11415) @item -r @var{tag} cvs.texi(,11416) Checkout revision @var{tag} (is sticky). See @ref{Common options}. cvs.texi(,11417) cvs.texi(,11418) @item -s cvs.texi(,11419) Like -c, but include module status. See @ref{checkout options}. cvs.texi(,11420) @end table cvs.texi(,11421) cvs.texi(,11422) @c ------------------------------------------------------------ cvs.texi(,11423) @item commit [@var{options}] [@var{files}@dots{}] cvs.texi(,11424) Check changes into the repository. See @ref{commit}. cvs.texi(,11425) cvs.texi(,11426) @table @code cvs.texi(,11427) @item -F @var{file} cvs.texi(,11428) Read log message from @var{file}. See @ref{commit options}. cvs.texi(,11429) cvs.texi(,11430) @item -f cvs.texi(,11431) @c What is this "disables recursion"? It is from the cvs.texi(,11432) @c on-line help; is it documented in this manual? cvs.texi(,11433) Force the file to be committed; disables recursion. cvs.texi(,11434) See @ref{commit options}. cvs.texi(,11435) cvs.texi(,11436) @item -l cvs.texi(,11437) Local; run only in current working directory. See @ref{Recursive behavior}. cvs.texi(,11438) cvs.texi(,11439) @item -m @var{msg} cvs.texi(,11440) Use @var{msg} as log message. See @ref{commit options}. cvs.texi(,11441) cvs.texi(,11442) @item -n cvs.texi(,11443) Do not run module program (if any). See @ref{commit options}. cvs.texi(,11444) cvs.texi(,11445) @item -R cvs.texi(,11446) Operate recursively (default). @xref{Recursive cvs.texi(,11447) behavior}. cvs.texi(,11448) cvs.texi(,11449) @item -r @var{rev} cvs.texi(,11450) Commit to @var{rev}. See @ref{commit options}. cvs.texi(,11451) @c FIXME: should be dragging over text from cvs.texi(,11452) @c commit options, especially if it can be cleaned up cvs.texi(,11453) @c and made concise enough. cvs.texi(,11454) @end table cvs.texi(,11455) cvs.texi(,11456) @c ------------------------------------------------------------ cvs.texi(,11457) @item diff [@var{options}] [@var{files}@dots{}] cvs.texi(,11458) Show differences between revisions. See @ref{diff}. cvs.texi(,11459) In addition to the options shown below, accepts a wide cvs.texi(,11460) variety of options to control output style, for example cvs.texi(,11461) @samp{-c} for context diffs. cvs.texi(,11462) cvs.texi(,11463) @table @code cvs.texi(,11464) @item -D @var{date1} cvs.texi(,11465) Diff revision for date against working file. See cvs.texi(,11466) @ref{diff options}. cvs.texi(,11467) cvs.texi(,11468) @item -D @var{date2} cvs.texi(,11469) Diff @var{rev1}/@var{date1} against @var{date2}. See cvs.texi(,11470) @ref{diff options}. cvs.texi(,11471) cvs.texi(,11472) @item -l cvs.texi(,11473) Local; run only in current working directory. See @ref{Recursive behavior}. cvs.texi(,11474) cvs.texi(,11475) @item -N cvs.texi(,11476) Include diffs for added and removed files. See cvs.texi(,11477) @ref{diff options}. cvs.texi(,11478) cvs.texi(,11479) @item -R cvs.texi(,11480) Operate recursively (default). @xref{Recursive cvs.texi(,11481) behavior}. cvs.texi(,11482) cvs.texi(,11483) @item -r @var{rev1} cvs.texi(,11484) Diff revision for @var{rev1} against working file. See cvs.texi(,11485) @ref{diff options}. cvs.texi(,11486) cvs.texi(,11487) @item -r @var{rev2} cvs.texi(,11488) Diff @var{rev1}/@var{date1} against @var{rev2}. See @ref{diff options}. cvs.texi(,11489) @end table cvs.texi(,11490) cvs.texi(,11491) @c ------------------------------------------------------------ cvs.texi(,11492) @item edit [@var{options}] [@var{files}@dots{}] cvs.texi(,11493) Get ready to edit a watched file. See @ref{Editing files}. cvs.texi(,11494) cvs.texi(,11495) @table @code cvs.texi(,11496) @item -a @var{actions} cvs.texi(,11497) Specify actions for temporary watch, where cvs.texi(,11498) @var{actions} is @code{edit}, @code{unedit}, cvs.texi(,11499) @code{commit}, @code{all}, or @code{none}. See cvs.texi(,11500) @ref{Editing files}. cvs.texi(,11501) cvs.texi(,11502) @item -l cvs.texi(,11503) Local; run only in current working directory. See @ref{Recursive behavior}. cvs.texi(,11504) cvs.texi(,11505) @item -R cvs.texi(,11506) Operate recursively (default). @xref{Recursive cvs.texi(,11507) behavior}. cvs.texi(,11508) @end table cvs.texi(,11509) cvs.texi(,11510) @c ------------------------------------------------------------ cvs.texi(,11511) @item editors [@var{options}] [@var{files}@dots{}] cvs.texi(,11512) See who is editing a watched file. See @ref{Watch information}. cvs.texi(,11513) cvs.texi(,11514) @table @code cvs.texi(,11515) @item -l cvs.texi(,11516) Local; run only in current working directory. See @ref{Recursive behavior}. cvs.texi(,11517) cvs.texi(,11518) @item -R cvs.texi(,11519) Operate recursively (default). @xref{Recursive cvs.texi(,11520) behavior}. cvs.texi(,11521) @end table cvs.texi(,11522) cvs.texi(,11523) @c ------------------------------------------------------------ cvs.texi(,11524) @item export [@var{options}] @var{modules}@dots{} cvs.texi(,11525) Export files from @sc{cvs}. See @ref{export}. cvs.texi(,11526) cvs.texi(,11527) @table @code cvs.texi(,11528) @item -D @var{date} cvs.texi(,11529) Check out revisions as of @var{date}. See cvs.texi(,11530) @ref{Common options}. cvs.texi(,11531) cvs.texi(,11532) @item -d @var{dir} cvs.texi(,11533) Check out into @var{dir}. See @ref{export options}. cvs.texi(,11534) cvs.texi(,11535) @item -f cvs.texi(,11536) Use head revision if tag/date not found. See cvs.texi(,11537) @ref{Common options}. cvs.texi(,11538) cvs.texi(,11539) @item -k @var{kflag} cvs.texi(,11540) Use @var{kflag} keyword expansion. See cvs.texi(,11541) @ref{Substitution modes}. cvs.texi(,11542) cvs.texi(,11543) @item -l cvs.texi(,11544) Local; run only in current working directory. @xref{Recursive behavior}. cvs.texi(,11545) cvs.texi(,11546) @item -N cvs.texi(,11547) Don't ``shorten'' module paths if -d specified. See cvs.texi(,11548) @ref{export options}. cvs.texi(,11549) cvs.texi(,11550) @item -n cvs.texi(,11551) Do not run module program (if any). See @ref{export options}. cvs.texi(,11552) cvs.texi(,11553) @item -R cvs.texi(,11554) Operate recursively (default). @xref{Recursive cvs.texi(,11555) behavior}. cvs.texi(,11556) cvs.texi(,11557) @item -r @var{tag} cvs.texi(,11558) Checkout revision @var{tag}. See @ref{Common options}. cvs.texi(,11559) @end table cvs.texi(,11560) cvs.texi(,11561) @c ------------------------------------------------------------ cvs.texi(,11562) @item history [@var{options}] [@var{files}@dots{}] cvs.texi(,11563) Show repository access history. See @ref{history}. cvs.texi(,11564) cvs.texi(,11565) @table @code cvs.texi(,11566) @item -a cvs.texi(,11567) All users (default is self). See @ref{history options}. cvs.texi(,11568) cvs.texi(,11569) @item -b @var{str} cvs.texi(,11570) Back to record with @var{str} in module/file/repos cvs.texi(,11571) field. See @ref{history options}. cvs.texi(,11572) cvs.texi(,11573) @item -c cvs.texi(,11574) Report on committed (modified) files. See @ref{history options}. cvs.texi(,11575) cvs.texi(,11576) @item -D @var{date} cvs.texi(,11577) Since @var{date}. See @ref{history options}. cvs.texi(,11578) cvs.texi(,11579) @item -e cvs.texi(,11580) Report on all record types. See @ref{history options}. cvs.texi(,11581) cvs.texi(,11582) @item -l cvs.texi(,11583) Last modified (committed or modified report). See @ref{history options}. cvs.texi(,11584) cvs.texi(,11585) @item -m @var{module} cvs.texi(,11586) Report on @var{module} (repeatable). See @ref{history options}. cvs.texi(,11587) cvs.texi(,11588) @item -n @var{module} cvs.texi(,11589) In @var{module}. See @ref{history options}. cvs.texi(,11590) cvs.texi(,11591) @item -o cvs.texi(,11592) Report on checked out modules. See @ref{history options}. cvs.texi(,11593) cvs.texi(,11594) @item -p @var{repository} cvs.texi(,11595) In @var{repository}. See @ref{history options}. cvs.texi(,11596) cvs.texi(,11597) @item -r @var{rev} cvs.texi(,11598) Since revision @var{rev}. See @ref{history options}. cvs.texi(,11599) cvs.texi(,11600) @item -T cvs.texi(,11601) @c What the @#$@# is a TAG? Same as a tag? This cvs.texi(,11602) @c wording is also in the online-line help. cvs.texi(,11603) Produce report on all TAGs. See @ref{history options}. cvs.texi(,11604) cvs.texi(,11605) @item -t @var{tag} cvs.texi(,11606) Since tag record placed in history file (by anyone). cvs.texi(,11607) See @ref{history options}. cvs.texi(,11608) cvs.texi(,11609) @item -u @var{user} cvs.texi(,11610) For user @var{user} (repeatable). See @ref{history options}. cvs.texi(,11611) cvs.texi(,11612) @item -w cvs.texi(,11613) Working directory must match. See @ref{history options}. cvs.texi(,11614) cvs.texi(,11615) @item -x @var{types} cvs.texi(,11616) Report on @var{types}, one or more of cvs.texi(,11617) @code{TOEFWUCGMAR}. See @ref{history options}. cvs.texi(,11618) cvs.texi(,11619) @item -z @var{zone} cvs.texi(,11620) Output for time zone @var{zone}. See @ref{history options}. cvs.texi(,11621) @end table cvs.texi(,11622) cvs.texi(,11623) @c ------------------------------------------------------------ cvs.texi(,11624) @item import [@var{options}] @var{repository} @var{vendor-tag} @var{release-tags}@dots{} cvs.texi(,11625) Import files into @sc{cvs}, using vendor branches. See cvs.texi(,11626) @ref{import}. cvs.texi(,11627) cvs.texi(,11628) @table @code cvs.texi(,11629) @item -b @var{bra} cvs.texi(,11630) Import to vendor branch @var{bra}. See cvs.texi(,11631) @ref{Multiple vendor branches}. cvs.texi(,11632) cvs.texi(,11633) @item -d cvs.texi(,11634) Use the file's modification time as the time of cvs.texi(,11635) import. See @ref{import options}. cvs.texi(,11636) cvs.texi(,11637) @item -k @var{kflag} cvs.texi(,11638) Set default keyword substitution mode. See cvs.texi(,11639) @ref{import options}. cvs.texi(,11640) cvs.texi(,11641) @item -m @var{msg} cvs.texi(,11642) Use @var{msg} for log message. See cvs.texi(,11643) @ref{import options}. cvs.texi(,11644) cvs.texi(,11645) @item -I @var{ign} cvs.texi(,11646) More files to ignore (! to reset). See cvs.texi(,11647) @ref{import options}. cvs.texi(,11648) cvs.texi(,11649) @item -W @var{spec} cvs.texi(,11650) More wrappers. See @ref{import options}. cvs.texi(,11651) @end table cvs.texi(,11652) cvs.texi(,11653) @c ------------------------------------------------------------ cvs.texi(,11654) @item init cvs.texi(,11655) Create a @sc{cvs} repository if it doesn't exist. See cvs.texi(,11656) @ref{Creating a repository}. cvs.texi(,11657) cvs.texi(,11658) @c ------------------------------------------------------------ cvs.texi(,11659) @item kserver cvs.texi(,11660) Kerberos authenticated server. cvs.texi(,11661) See @ref{Kerberos authenticated}. cvs.texi(,11662) cvs.texi(,11663) @c ------------------------------------------------------------ cvs.texi(,11664) @item log [@var{options}] [@var{files}@dots{}] cvs.texi(,11665) Print out history information for files. See @ref{log}. cvs.texi(,11666) cvs.texi(,11667) @table @code cvs.texi(,11668) @item -b cvs.texi(,11669) Only list revisions on the default branch. See @ref{log options}. cvs.texi(,11670) cvs.texi(,11671) @item -d @var{dates} cvs.texi(,11672) Specify dates (@var{d1}<@var{d2} for range, @var{d} for cvs.texi(,11673) latest before). See @ref{log options}. cvs.texi(,11674) cvs.texi(,11675) @item -h cvs.texi(,11676) Only print header. See @ref{log options}. cvs.texi(,11677) cvs.texi(,11678) @item -l cvs.texi(,11679) Local; run only in current working directory. See @ref{Recursive behavior}. cvs.texi(,11680) cvs.texi(,11681) @item -N cvs.texi(,11682) Do not list tags. See @ref{log options}. cvs.texi(,11683) cvs.texi(,11684) @item -R cvs.texi(,11685) Only print name of RCS file. See @ref{log options}. cvs.texi(,11686) cvs.texi(,11687) @item -r@var{revs} cvs.texi(,11688) Only list revisions @var{revs}. See @ref{log options}. cvs.texi(,11689) cvs.texi(,11690) @item -s @var{states} cvs.texi(,11691) Only list revisions with specified states. See @ref{log options}. cvs.texi(,11692) cvs.texi(,11693) @item -t cvs.texi(,11694) Only print header and descriptive text. See @ref{log cvs.texi(,11695) options}. cvs.texi(,11696) cvs.texi(,11697) @item -w@var{logins} cvs.texi(,11698) Only list revisions checked in by specified logins. See @ref{log options}. cvs.texi(,11699) @end table cvs.texi(,11700) cvs.texi(,11701) @c ------------------------------------------------------------ cvs.texi(,11702) @item login cvs.texi(,11703) Prompt for password for authenticating server. See cvs.texi(,11704) @ref{Password authentication client}. cvs.texi(,11705) cvs.texi(,11706) @c ------------------------------------------------------------ cvs.texi(,11707) @item logout cvs.texi(,11708) Remove stored password for authenticating server. See cvs.texi(,11709) @ref{Password authentication client}. cvs.texi(,11710) cvs.texi(,11711) @c ------------------------------------------------------------ cvs.texi(,11712) @item pserver cvs.texi(,11713) Password authenticated server. cvs.texi(,11714) See @ref{Password authentication server}. cvs.texi(,11715) cvs.texi(,11716) @c ------------------------------------------------------------ cvs.texi(,11717) @item rannotate [@var{options}] [@var{modules}@dots{}] cvs.texi(,11718) Show last revision where each line was modified. See cvs.texi(,11719) @ref{annotate}. cvs.texi(,11720) cvs.texi(,11721) @table @code cvs.texi(,11722) @item -D @var{date} cvs.texi(,11723) Annotate the most recent revision no later than cvs.texi(,11724) @var{date}. See @ref{Common options}. cvs.texi(,11725) cvs.texi(,11726) @item -F cvs.texi(,11727) Force annotation of binary files. (Without this option, cvs.texi(,11728) binary files are skipped with a message.) cvs.texi(,11729) cvs.texi(,11730) @item -f cvs.texi(,11731) Use head revision if tag/date not found. See cvs.texi(,11732) @ref{Common options}. cvs.texi(,11733) cvs.texi(,11734) @item -l cvs.texi(,11735) Local; run only in current working directory. @xref{Recursive behavior}. cvs.texi(,11736) cvs.texi(,11737) @item -R cvs.texi(,11738) Operate recursively (default). @xref{Recursive behavior}. cvs.texi(,11739) cvs.texi(,11740) @item -r @var{tag} cvs.texi(,11741) Annotate revision @var{tag}. See @ref{Common options}. cvs.texi(,11742) @end table cvs.texi(,11743) cvs.texi(,11744) @c ------------------------------------------------------------ cvs.texi(,11745) @item rdiff [@var{options}] @var{modules}@dots{} cvs.texi(,11746) Show differences between releases. See @ref{rdiff}. cvs.texi(,11747) cvs.texi(,11748) @table @code cvs.texi(,11749) @item -c cvs.texi(,11750) Context diff output format (default). See @ref{rdiff options}. cvs.texi(,11751) cvs.texi(,11752) @item -D @var{date} cvs.texi(,11753) Select revisions based on @var{date}. See @ref{Common options}. cvs.texi(,11754) cvs.texi(,11755) @item -f cvs.texi(,11756) Use head revision if tag/date not found. See cvs.texi(,11757) @ref{Common options}. cvs.texi(,11758) cvs.texi(,11759) @item -l cvs.texi(,11760) Local; run only in current working directory. See @ref{Recursive behavior}. cvs.texi(,11761) cvs.texi(,11762) @item -R cvs.texi(,11763) Operate recursively (default). @xref{Recursive cvs.texi(,11764) behavior}. cvs.texi(,11765) cvs.texi(,11766) @item -r @var{rev} cvs.texi(,11767) Select revisions based on @var{rev}. See @ref{Common options}. cvs.texi(,11768) cvs.texi(,11769) @item -s cvs.texi(,11770) Short patch - one liner per file. See @ref{rdiff options}. cvs.texi(,11771) cvs.texi(,11772) @item -t cvs.texi(,11773) Top two diffs - last change made to the file. See cvs.texi(,11774) @ref{diff options}. cvs.texi(,11775) cvs.texi(,11776) @item -u cvs.texi(,11777) Unidiff output format. See @ref{rdiff options}. cvs.texi(,11778) cvs.texi(,11779) @item -V @var{vers} cvs.texi(,11780) Use RCS Version @var{vers} for keyword expansion (obsolete). See cvs.texi(,11781) @ref{rdiff options}. cvs.texi(,11782) @end table cvs.texi(,11783) cvs.texi(,11784) @c ------------------------------------------------------------ cvs.texi(,11785) @item release [@var{options}] @var{directory} cvs.texi(,11786) Indicate that a directory is no longer in use. See cvs.texi(,11787) @ref{release}. cvs.texi(,11788) cvs.texi(,11789) @table @code cvs.texi(,11790) @item -d cvs.texi(,11791) Delete the given directory. See @ref{release options}. cvs.texi(,11792) @end table cvs.texi(,11793) cvs.texi(,11794) @c ------------------------------------------------------------ cvs.texi(,11795) @item remove [@var{options}] [@var{files}@dots{}] cvs.texi(,11796) Remove an entry from the repository. See @ref{Removing files}. cvs.texi(,11797) cvs.texi(,11798) @table @code cvs.texi(,11799) @item -f cvs.texi(,11800) Delete the file before removing it. See @ref{Removing files}. cvs.texi(,11801) cvs.texi(,11802) @item -l cvs.texi(,11803) Local; run only in current working directory. See @ref{Recursive behavior}. cvs.texi(,11804) cvs.texi(,11805) @item -R cvs.texi(,11806) Operate recursively (default). @xref{Recursive cvs.texi(,11807) behavior}. cvs.texi(,11808) @end table cvs.texi(,11809) cvs.texi(,11810) @c ------------------------------------------------------------ cvs.texi(,11811) @item rlog [@var{options}] [@var{files}@dots{}] cvs.texi(,11812) Print out history information for modules. See @ref{log}. cvs.texi(,11813) cvs.texi(,11814) @table @code cvs.texi(,11815) @item -b cvs.texi(,11816) Only list revisions on the default branch. See @ref{log options}. cvs.texi(,11817) cvs.texi(,11818) @item -d @var{dates} cvs.texi(,11819) Specify dates (@var{d1}<@var{d2} for range, @var{d} for cvs.texi(,11820) latest before). See @ref{log options}. cvs.texi(,11821) cvs.texi(,11822) @item -h cvs.texi(,11823) Only print header. See @ref{log options}. cvs.texi(,11824) cvs.texi(,11825) @item -l cvs.texi(,11826) Local; run only in current working directory. See @ref{Recursive behavior}. cvs.texi(,11827) cvs.texi(,11828) @item -N cvs.texi(,11829) Do not list tags. See @ref{log options}. cvs.texi(,11830) cvs.texi(,11831) @item -R cvs.texi(,11832) Only print name of RCS file. See @ref{log options}. cvs.texi(,11833) cvs.texi(,11834) @item -r@var{revs} cvs.texi(,11835) Only list revisions @var{revs}. See @ref{log options}. cvs.texi(,11836) cvs.texi(,11837) @item -s @var{states} cvs.texi(,11838) Only list revisions with specified states. See @ref{log options}. cvs.texi(,11839) cvs.texi(,11840) @item -t cvs.texi(,11841) Only print header and descriptive text. See @ref{log options}. cvs.texi(,11842) cvs.texi(,11843) @item -w@var{logins} cvs.texi(,11844) Only list revisions checked in by specified logins. See @ref{log options}. cvs.texi(,11845) @end table cvs.texi(,11846) cvs.texi(,11847) @c ------------------------------------------------------------ cvs.texi(,11848) @item rtag [@var{options}] @var{tag} @var{modules}@dots{} cvs.texi(,11849) Add a symbolic tag to a module. cvs.texi(,11850) See @ref{Revisions} and @ref{Branching and merging}. cvs.texi(,11851) cvs.texi(,11852) @table @code cvs.texi(,11853) @item -a cvs.texi(,11854) Clear tag from removed files that would not otherwise cvs.texi(,11855) be tagged. See @ref{Tagging add/remove}. cvs.texi(,11856) cvs.texi(,11857) @item -b cvs.texi(,11858) Create a branch named @var{tag}. See @ref{Branching and merging}. cvs.texi(,11859) cvs.texi(,11860) @item -B cvs.texi(,11861) Used in conjunction with -F or -d, enables movement and deletion of cvs.texi(,11862) branch tags. Use with extreme caution. cvs.texi(,11863) cvs.texi(,11864) @item -D @var{date} cvs.texi(,11865) Tag revisions as of @var{date}. See @ref{Tagging by date/tag}. cvs.texi(,11866) cvs.texi(,11867) @item -d cvs.texi(,11868) Delete @var{tag}. See @ref{Modifying tags}. cvs.texi(,11869) cvs.texi(,11870) @item -F cvs.texi(,11871) Move @var{tag} if it already exists. See @ref{Modifying tags}. cvs.texi(,11872) cvs.texi(,11873) @item -f cvs.texi(,11874) Force a head revision match if tag/date not found. cvs.texi(,11875) See @ref{Tagging by date/tag}. cvs.texi(,11876) cvs.texi(,11877) @item -l cvs.texi(,11878) Local; run only in current working directory. See @ref{Recursive behavior}. cvs.texi(,11879) cvs.texi(,11880) @item -n cvs.texi(,11881) No execution of tag program. See @ref{Common options}. cvs.texi(,11882) cvs.texi(,11883) @item -R cvs.texi(,11884) Operate recursively (default). @xref{Recursive cvs.texi(,11885) behavior}. cvs.texi(,11886) cvs.texi(,11887) @item -r @var{rev} cvs.texi(,11888) Tag existing tag @var{rev}. See @ref{Tagging by date/tag}. cvs.texi(,11889) @end table cvs.texi(,11890) cvs.texi(,11891) @c ------------------------------------------------------------ cvs.texi(,11892) @item server cvs.texi(,11893) Rsh server. See @ref{Connecting via rsh}. cvs.texi(,11894) cvs.texi(,11895) @c ------------------------------------------------------------ cvs.texi(,11896) @item status [@var{options}] @var{files}@dots{} cvs.texi(,11897) Display status information in a working directory. See cvs.texi(,11898) @ref{File status}. cvs.texi(,11899) cvs.texi(,11900) @table @code cvs.texi(,11901) @item -l cvs.texi(,11902) Local; run only in current working directory. See @ref{Recursive behavior}. cvs.texi(,11903) cvs.texi(,11904) @item -R cvs.texi(,11905) Operate recursively (default). @xref{Recursive cvs.texi(,11906) behavior}. cvs.texi(,11907) cvs.texi(,11908) @item -v cvs.texi(,11909) Include tag information for file. See @ref{Tags}. cvs.texi(,11910) @end table cvs.texi(,11911) cvs.texi(,11912) @c ------------------------------------------------------------ cvs.texi(,11913) @item tag [@var{options}] @var{tag} [@var{files}@dots{}] cvs.texi(,11914) Add a symbolic tag to checked out version of files. cvs.texi(,11915) See @ref{Revisions} and @ref{Branching and merging}. cvs.texi(,11916) cvs.texi(,11917) @table @code cvs.texi(,11918) @item -b cvs.texi(,11919) Create a branch named @var{tag}. See @ref{Branching and merging}. cvs.texi(,11920) cvs.texi(,11921) @item -c cvs.texi(,11922) Check that working files are unmodified. See cvs.texi(,11923) @ref{Tagging the working directory}. cvs.texi(,11924) cvs.texi(,11925) @item -D @var{date} cvs.texi(,11926) Tag revisions as of @var{date}. See @ref{Tagging by date/tag}. cvs.texi(,11927) cvs.texi(,11928) @item -d cvs.texi(,11929) Delete @var{tag}. See @ref{Modifying tags}. cvs.texi(,11930) cvs.texi(,11931) @item -F cvs.texi(,11932) Move @var{tag} if it already exists. See @ref{Modifying tags}. cvs.texi(,11933) cvs.texi(,11934) @item -f cvs.texi(,11935) Force a head revision match if tag/date not found. cvs.texi(,11936) See @ref{Tagging by date/tag}. cvs.texi(,11937) cvs.texi(,11938) @item -l cvs.texi(,11939) Local; run only in current working directory. See @ref{Recursive behavior}. cvs.texi(,11940) cvs.texi(,11941) @item -R cvs.texi(,11942) Operate recursively (default). @xref{Recursive cvs.texi(,11943) behavior}. cvs.texi(,11944) cvs.texi(,11945) @item -r @var{rev} cvs.texi(,11946) Tag existing tag @var{rev}. See @ref{Tagging by date/tag}. cvs.texi(,11947) @end table cvs.texi(,11948) cvs.texi(,11949) @c ------------------------------------------------------------ cvs.texi(,11950) @item unedit [@var{options}] [@var{files}@dots{}] cvs.texi(,11951) Undo an edit command. See @ref{Editing files}. cvs.texi(,11952) cvs.texi(,11953) @table @code cvs.texi(,11954) @item -l cvs.texi(,11955) Local; run only in current working directory. See @ref{Recursive behavior}. cvs.texi(,11956) cvs.texi(,11957) @item -R cvs.texi(,11958) Operate recursively (default). @xref{Recursive behavior}. cvs.texi(,11959) @end table cvs.texi(,11960) cvs.texi(,11961) @c ------------------------------------------------------------ cvs.texi(,11962) @item update [@var{options}] [@var{files}@dots{}] cvs.texi(,11963) Bring work tree in sync with repository. See cvs.texi(,11964) @ref{update}. cvs.texi(,11965) cvs.texi(,11966) @table @code cvs.texi(,11967) @item -A cvs.texi(,11968) Reset any sticky tags/date/options. See @ref{Sticky cvs.texi(,11969) tags} and @ref{Keyword substitution}. cvs.texi(,11970) cvs.texi(,11971) @item -C cvs.texi(,11972) Overwrite locally modified files with clean copies from cvs.texi(,11973) the repository (the modified file is saved in cvs.texi(,11974) @file{.#@var{file}.@var{revision}}, however). cvs.texi(,11975) cvs.texi(,11976) @item -D @var{date} cvs.texi(,11977) Check out revisions as of @var{date} (is sticky). See cvs.texi(,11978) @ref{Common options}. cvs.texi(,11979) cvs.texi(,11980) @item -d cvs.texi(,11981) Create directories. See @ref{update options}. cvs.texi(,11982) cvs.texi(,11983) @item -f cvs.texi(,11984) Use head revision if tag/date not found. See cvs.texi(,11985) @ref{Common options}. cvs.texi(,11986) cvs.texi(,11987) @item -I @var{ign} cvs.texi(,11988) More files to ignore (! to reset). See cvs.texi(,11989) @ref{import options}. cvs.texi(,11990) cvs.texi(,11991) @c Probably want to use rev1/rev2 style like for diff cvs.texi(,11992) @c -r. Here and in on-line help. cvs.texi(,11993) @item -j @var{rev} cvs.texi(,11994) Merge in changes. See @ref{update options}. cvs.texi(,11995) cvs.texi(,11996) @item -k @var{kflag} cvs.texi(,11997) Use @var{kflag} keyword expansion. See cvs.texi(,11998) @ref{Substitution modes}. cvs.texi(,11999) cvs.texi(,12000) @item -l cvs.texi(,12001) Local; run only in current working directory. @xref{Recursive behavior}. cvs.texi(,12002) cvs.texi(,12003) @item -P cvs.texi(,12004) Prune empty directories. See @ref{Moving directories}. cvs.texi(,12005) cvs.texi(,12006) @item -p cvs.texi(,12007) Check out files to standard output (avoids cvs.texi(,12008) stickiness). See @ref{update options}. cvs.texi(,12009) cvs.texi(,12010) @item -R cvs.texi(,12011) Operate recursively (default). @xref{Recursive cvs.texi(,12012) behavior}. cvs.texi(,12013) cvs.texi(,12014) @item -r @var{tag} cvs.texi(,12015) Checkout revision @var{tag} (is sticky). See @ref{Common options}. cvs.texi(,12016) cvs.texi(,12017) @item -W @var{spec} cvs.texi(,12018) More wrappers. See @ref{import options}. cvs.texi(,12019) @end table cvs.texi(,12020) cvs.texi(,12021) @c ------------------------------------------------------------ cvs.texi(,12022) @item version cvs.texi(,12023) @cindex version (subcommand) cvs.texi(,12024) cvs.texi(,12025) Display the version of @sc{cvs} being used. If the repository cvs.texi(,12026) is remote, display both the client and server versions. cvs.texi(,12027) cvs.texi(,12028) @c ------------------------------------------------------------ cvs.texi(,12029) @item watch [on|off|add|remove] [@var{options}] [@var{files}@dots{}] cvs.texi(,12030) cvs.texi(,12031) on/off: turn on/off read-only checkouts of files. See cvs.texi(,12032) @ref{Setting a watch}. cvs.texi(,12033) cvs.texi(,12034) add/remove: add or remove notification on actions. See cvs.texi(,12035) @ref{Getting Notified}. cvs.texi(,12036) cvs.texi(,12037) @table @code cvs.texi(,12038) @item -a @var{actions} cvs.texi(,12039) Specify actions for temporary watch, where cvs.texi(,12040) @var{actions} is @code{edit}, @code{unedit}, cvs.texi(,12041) @code{commit}, @code{all}, or @code{none}. See cvs.texi(,12042) @ref{Editing files}. cvs.texi(,12043) cvs.texi(,12044) @item -l cvs.texi(,12045) Local; run only in current working directory. See @ref{Recursive behavior}. cvs.texi(,12046) cvs.texi(,12047) @item -R cvs.texi(,12048) Operate recursively (default). @xref{Recursive cvs.texi(,12049) behavior}. cvs.texi(,12050) @end table cvs.texi(,12051) cvs.texi(,12052) @c ------------------------------------------------------------ cvs.texi(,12053) @item watchers [@var{options}] [@var{files}@dots{}] cvs.texi(,12054) See who is watching a file. See @ref{Watch information}. cvs.texi(,12055) cvs.texi(,12056) @table @code cvs.texi(,12057) @item -l cvs.texi(,12058) Local; run only in current working directory. See @ref{Recursive behavior}. cvs.texi(,12059) cvs.texi(,12060) @item -R cvs.texi(,12061) Operate recursively (default). @xref{Recursive cvs.texi(,12062) behavior}. cvs.texi(,12063) @end table cvs.texi(,12064) cvs.texi(,12065) @end table cvs.texi(,12066) cvs.texi(,12067) @c --------------------------------------------------------------------- cvs.texi(,12068) @node Administrative files cvs.texi(,12069) @appendix Reference manual for Administrative files cvs.texi(,12070) @cindex Administrative files (reference) cvs.texi(,12071) @cindex Files, reference manual cvs.texi(,12072) @cindex Reference manual (files) cvs.texi(,12073) @cindex CVSROOT (file) cvs.texi(,12074) cvs.texi(,12075) @c FIXME? Somewhere there needs to be a more "how-to" cvs.texi(,12076) @c guide to writing these. I think the triggers cvs.texi(,12077) @c (commitinfo, loginfo, taginfo, &c) are perhaps a cvs.texi(,12078) @c different case than files like modules. One cvs.texi(,12079) @c particular issue that people sometimes are cvs.texi(,12080) @c (unnecessarily?) worried about is performance, and cvs.texi(,12081) @c the impact of writing in perl or sh or ____. cvs.texi(,12082) Inside the repository, in the directory cvs.texi(,12083) @file{$CVSROOT/CVSROOT}, there are a number of cvs.texi(,12084) supportive files for @sc{cvs}. You can use @sc{cvs} in a limited cvs.texi(,12085) fashion without any of them, but if they are set up cvs.texi(,12086) properly they can help make life easier. For a cvs.texi(,12087) discussion of how to edit them, see @ref{Intro cvs.texi(,12088) administrative files}. cvs.texi(,12089) cvs.texi(,12090) The most important of these files is the @file{modules} cvs.texi(,12091) file, which defines the modules inside the repository. cvs.texi(,12092) cvs.texi(,12093) @menu cvs.texi(,12094) * modules:: Defining modules cvs.texi(,12095) * Wrappers:: Specify binary-ness based on file name cvs.texi(,12096) * commit files:: The commit support files (commitinfo, cvs.texi(,12097) verifymsg, editinfo, loginfo) cvs.texi(,12098) * rcsinfo:: Templates for the log messages cvs.texi(,12099) * cvsignore:: Ignoring files via cvsignore cvs.texi(,12100) * checkoutlist:: Adding your own administrative files cvs.texi(,12101) * history file:: History information cvs.texi(,12102) * Variables:: Various variables are expanded cvs.texi(,12103) * config:: Miscellaneous CVS configuration cvs.texi(,12104) @end menu cvs.texi(,12105) cvs.texi(,12106) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,12107) @node modules cvs.texi(,12108) @appendixsec The modules file cvs.texi(,12109) @cindex Modules (admin file) cvs.texi(,12110) @cindex Defining modules (reference manual) cvs.texi(,12111) cvs.texi(,12112) The @file{modules} file records your definitions of cvs.texi(,12113) names for collections of source code. @sc{cvs} will cvs.texi(,12114) use these definitions if you use @sc{cvs} to update the cvs.texi(,12115) modules file (use normal commands like @code{add}, cvs.texi(,12116) @code{commit}, etc). cvs.texi(,12117) cvs.texi(,12118) The @file{modules} file may contain blank lines and cvs.texi(,12119) comments (lines beginning with @samp{#}) as well as cvs.texi(,12120) module definitions. Long lines can be continued on the cvs.texi(,12121) next line by specifying a backslash (@samp{\}) as the cvs.texi(,12122) last character on the line. cvs.texi(,12123) cvs.texi(,12124) There are three basic types of modules: alias modules, cvs.texi(,12125) regular modules, and ampersand modules. The difference cvs.texi(,12126) between them is the way that they map files in the cvs.texi(,12127) repository to files in the working directory. In all cvs.texi(,12128) of the following examples, the top-level repository cvs.texi(,12129) contains a directory called @file{first-dir}, which cvs.texi(,12130) contains two files, @file{file1} and @file{file2}, and a cvs.texi(,12131) directory @file{sdir}. @file{first-dir/sdir} contains cvs.texi(,12132) a file @file{sfile}. cvs.texi(,12133) cvs.texi(,12134) @c FIXME: should test all the examples in this section. cvs.texi(,12135) cvs.texi(,12136) @menu cvs.texi(,12137) * Alias modules:: The simplest kind of module cvs.texi(,12138) * Regular modules:: cvs.texi(,12139) * Ampersand modules:: cvs.texi(,12140) * Excluding directories:: Excluding directories from a module cvs.texi(,12141) * Module options:: Regular and ampersand modules can take options cvs.texi(,12142) * Module program options:: How the modules ``program options'' programs cvs.texi(,12143) are run. cvs.texi(,12144) @end menu cvs.texi(,12145) cvs.texi(,12146) @node Alias modules cvs.texi(,12147) @appendixsubsec Alias modules cvs.texi(,12148) @cindex Alias modules cvs.texi(,12149) @cindex -a, in modules file cvs.texi(,12150) cvs.texi(,12151) Alias modules are the simplest kind of module: cvs.texi(,12152) cvs.texi(,12153) @table @code cvs.texi(,12154) @item @var{mname} -a @var{aliases}@dots{} cvs.texi(,12155) This represents the simplest way of defining a module cvs.texi(,12156) @var{mname}. The @samp{-a} flags the definition as a cvs.texi(,12157) simple alias: @sc{cvs} will treat any use of @var{mname} (as cvs.texi(,12158) a command argument) as if the list of names cvs.texi(,12159) @var{aliases} had been specified instead. cvs.texi(,12160) @var{aliases} may contain either other module names or cvs.texi(,12161) paths. When you use paths in aliases, @code{checkout} cvs.texi(,12162) creates all intermediate directories in the working cvs.texi(,12163) directory, just as if the path had been specified cvs.texi(,12164) explicitly in the @sc{cvs} arguments. cvs.texi(,12165) @end table cvs.texi(,12166) cvs.texi(,12167) For example, if the modules file contains: cvs.texi(,12168) cvs.texi(,12169) @example cvs.texi(,12170) amodule -a first-dir cvs.texi(,12171) @end example cvs.texi(,12172) cvs.texi(,12173) @noindent cvs.texi(,12174) then the following two commands are equivalent: cvs.texi(,12175) cvs.texi(,12176) @example cvs.texi(,12177) $ cvs co amodule cvs.texi(,12178) $ cvs co first-dir cvs.texi(,12179) @end example cvs.texi(,12180) cvs.texi(,12181) @noindent cvs.texi(,12182) and they each would provide output such as: cvs.texi(,12183) cvs.texi(,12184) @example cvs.texi(,12185) cvs checkout: Updating first-dir cvs.texi(,12186) U first-dir/file1 cvs.texi(,12187) U first-dir/file2 cvs.texi(,12188) cvs checkout: Updating first-dir/sdir cvs.texi(,12189) U first-dir/sdir/sfile cvs.texi(,12190) @end example cvs.texi(,12191) cvs.texi(,12192) @node Regular modules cvs.texi(,12193) @appendixsubsec Regular modules cvs.texi(,12194) @cindex Regular modules cvs.texi(,12195) cvs.texi(,12196) @table @code cvs.texi(,12197) @item @var{mname} [ options ] @var{dir} [ @var{files}@dots{} ] cvs.texi(,12198) In the simplest case, this form of module definition cvs.texi(,12199) reduces to @samp{@var{mname} @var{dir}}. This defines cvs.texi(,12200) all the files in directory @var{dir} as module mname. cvs.texi(,12201) @var{dir} is a relative path (from @code{$CVSROOT}) to a cvs.texi(,12202) directory of source in the source repository. In this cvs.texi(,12203) case, on checkout, a single directory called cvs.texi(,12204) @var{mname} is created as a working directory; no cvs.texi(,12205) intermediate directory levels are used by default, even cvs.texi(,12206) if @var{dir} was a path involving several directory cvs.texi(,12207) levels. cvs.texi(,12208) @end table cvs.texi(,12209) cvs.texi(,12210) For example, if a module is defined by: cvs.texi(,12211) cvs.texi(,12212) @example cvs.texi(,12213) regmodule first-dir cvs.texi(,12214) @end example cvs.texi(,12215) cvs.texi(,12216) @noindent cvs.texi(,12217) then regmodule will contain the files from first-dir: cvs.texi(,12218) cvs.texi(,12219) @example cvs.texi(,12220) $ cvs co regmodule cvs.texi(,12221) cvs checkout: Updating regmodule cvs.texi(,12222) U regmodule/file1 cvs.texi(,12223) U regmodule/file2 cvs.texi(,12224) cvs checkout: Updating regmodule/sdir cvs.texi(,12225) U regmodule/sdir/sfile cvs.texi(,12226) $ cvs.texi(,12227) @end example cvs.texi(,12228) cvs.texi(,12229) By explicitly specifying files in the module definition cvs.texi(,12230) after @var{dir}, you can select particular files from cvs.texi(,12231) directory @var{dir}. Here is cvs.texi(,12232) an example: cvs.texi(,12233) cvs.texi(,12234) @example cvs.texi(,12235) regfiles first-dir/sdir sfile cvs.texi(,12236) @end example cvs.texi(,12237) cvs.texi(,12238) @noindent cvs.texi(,12239) With this definition, getting the regfiles module cvs.texi(,12240) will create a single working directory cvs.texi(,12241) @file{regfiles} containing the file listed, which cvs.texi(,12242) comes from a directory deeper cvs.texi(,12243) in the @sc{cvs} source repository: cvs.texi(,12244) cvs.texi(,12245) @example cvs.texi(,12246) $ cvs co regfiles cvs.texi(,12247) U regfiles/sfile cvs.texi(,12248) $ cvs.texi(,12249) @end example cvs.texi(,12250) cvs.texi(,12251) @node Ampersand modules cvs.texi(,12252) @appendixsubsec Ampersand modules cvs.texi(,12253) @cindex Ampersand modules cvs.texi(,12254) @cindex &, in modules file cvs.texi(,12255) cvs.texi(,12256) A module definition can refer to other modules by cvs.texi(,12257) including @samp{&@var{module}} in its definition. cvs.texi(,12258) @example cvs.texi(,12259) @var{mname} [ options ] @var{&module}@dots{} cvs.texi(,12260) @end example cvs.texi(,12261) cvs.texi(,12262) Then getting the module creates a subdirectory for each such cvs.texi(,12263) module, in the directory containing the module. For cvs.texi(,12264) example, if modules contains cvs.texi(,12265) cvs.texi(,12266) @example cvs.texi(,12267) ampermod &first-dir cvs.texi(,12268) @end example cvs.texi(,12269) cvs.texi(,12270) @noindent cvs.texi(,12271) then a checkout will create an @code{ampermod} directory cvs.texi(,12272) which contains a directory called @code{first-dir}, cvs.texi(,12273) which in turns contains all the directories and files cvs.texi(,12274) which live there. For example, the command cvs.texi(,12275) cvs.texi(,12276) @example cvs.texi(,12277) $ cvs co ampermod cvs.texi(,12278) @end example cvs.texi(,12279) cvs.texi(,12280) @noindent cvs.texi(,12281) will create the following files: cvs.texi(,12282) cvs.texi(,12283) @example cvs.texi(,12284) ampermod/first-dir/file1 cvs.texi(,12285) ampermod/first-dir/file2 cvs.texi(,12286) ampermod/first-dir/sdir/sfile cvs.texi(,12287) @end example cvs.texi(,12288) cvs.texi(,12289) There is one quirk/bug: the messages that @sc{cvs} cvs.texi(,12290) prints omit the @file{ampermod}, and thus do not cvs.texi(,12291) correctly display the location to which it is checking cvs.texi(,12292) out the files: cvs.texi(,12293) cvs.texi(,12294) @example cvs.texi(,12295) $ cvs co ampermod cvs.texi(,12296) cvs checkout: Updating first-dir cvs.texi(,12297) U first-dir/file1 cvs.texi(,12298) U first-dir/file2 cvs.texi(,12299) cvs checkout: Updating first-dir/sdir cvs.texi(,12300) U first-dir/sdir/sfile cvs.texi(,12301) $ cvs.texi(,12302) @end example cvs.texi(,12303) cvs.texi(,12304) Do not rely on this buggy behavior; it may get fixed in cvs.texi(,12305) a future release of @sc{cvs}. cvs.texi(,12306) cvs.texi(,12307) @c FIXCVS: What happens if regular and & modules are cvs.texi(,12308) @c combined, as in "ampermodule first-dir &second-dir"? cvs.texi(,12309) @c When I tried it, it seemed to just ignore the cvs.texi(,12310) @c "first-dir". I think perhaps it should be an error cvs.texi(,12311) @c (but this needs further investigation). cvs.texi(,12312) @c In addition to discussing what each one does, we cvs.texi(,12313) @c should put in a few words about why you would use one or cvs.texi(,12314) @c the other in various situations. cvs.texi(,12315) cvs.texi(,12316) @node Excluding directories cvs.texi(,12317) @appendixsubsec Excluding directories cvs.texi(,12318) @cindex Excluding directories, in modules file cvs.texi(,12319) @cindex !, in modules file cvs.texi(,12320) cvs.texi(,12321) An alias module may exclude particular directories from cvs.texi(,12322) other modules by using an exclamation mark (@samp{!}) cvs.texi(,12323) before the name of each directory to be excluded. cvs.texi(,12324) cvs.texi(,12325) For example, if the modules file contains: cvs.texi(,12326) cvs.texi(,12327) @example cvs.texi(,12328) exmodule -a !first-dir/sdir first-dir cvs.texi(,12329) @end example cvs.texi(,12330) cvs.texi(,12331) @noindent cvs.texi(,12332) then checking out the module @samp{exmodule} will check cvs.texi(,12333) out everything in @samp{first-dir} except any files in cvs.texi(,12334) the subdirectory @samp{first-dir/sdir}. cvs.texi(,12335) @c Note that the "!first-dir/sdir" sometimes must be listed cvs.texi(,12336) @c before "first-dir". That seems like a probable bug, in which cvs.texi(,12337) @c case perhaps it should be fixed (to allow either cvs.texi(,12338) @c order) rather than documented. See modules4 in testsuite. cvs.texi(,12339) cvs.texi(,12340) @node Module options cvs.texi(,12341) @appendixsubsec Module options cvs.texi(,12342) @cindex Options, in modules file cvs.texi(,12343) cvs.texi(,12344) Either regular modules or ampersand modules can contain cvs.texi(,12345) options, which supply additional information concerning cvs.texi(,12346) the module. cvs.texi(,12347) cvs.texi(,12348) @table @code cvs.texi(,12349) @cindex -d, in modules file cvs.texi(,12350) @item -d @var{name} cvs.texi(,12351) Name the working directory something other than the cvs.texi(,12352) module name. cvs.texi(,12353) @c FIXME: Needs a bunch of examples, analogous to the cvs.texi(,12354) @c examples for alias, regular, and ampersand modules cvs.texi(,12355) @c which show where the files go without -d. cvs.texi(,12356) cvs.texi(,12357) @cindex Export program cvs.texi(,12358) @cindex -e, in modules file cvs.texi(,12359) @item -e @var{prog} cvs.texi(,12360) Specify a program @var{prog} to run whenever files in a cvs.texi(,12361) module are exported. @var{prog} runs with a single cvs.texi(,12362) argument, the module name. cvs.texi(,12363) @c FIXME: Is it run on server? client? cvs.texi(,12364) cvs.texi(,12365) @cindex Checkout program cvs.texi(,12366) @cindex -o, in modules file cvs.texi(,12367) @item -o @var{prog} cvs.texi(,12368) Specify a program @var{prog} to run whenever files in a cvs.texi(,12369) module are checked out. @var{prog} runs with a single cvs.texi(,12370) argument, the module name. See @ref{Module program options} for cvs.texi(,12371) information on how @var{prog} is called. cvs.texi(,12372) @c FIXME: Is it run on server? client? cvs.texi(,12373) cvs.texi(,12374) @cindex Status of a module cvs.texi(,12375) @cindex Module status cvs.texi(,12376) @cindex -s, in modules file cvs.texi(,12377) @item -s @var{status} cvs.texi(,12378) Assign a status to the module. When the module file is cvs.texi(,12379) printed with @samp{cvs checkout -s} the modules are cvs.texi(,12380) sorted according to primarily module status, and cvs.texi(,12381) secondarily according to the module name. This option cvs.texi(,12382) has no other meaning. You can use this option for cvs.texi(,12383) several things besides status: for instance, list the cvs.texi(,12384) person that is responsible for this module. cvs.texi(,12385) cvs.texi(,12386) @cindex Tag program cvs.texi(,12387) @cindex -t, in modules file cvs.texi(,12388) @item -t @var{prog} cvs.texi(,12389) Specify a program @var{prog} to run whenever files in a cvs.texi(,12390) module are tagged with @code{rtag}. @var{prog} runs cvs.texi(,12391) with two arguments: the module name and the symbolic cvs.texi(,12392) tag specified to @code{rtag}. It is not run cvs.texi(,12393) when @code{tag} is executed. Generally you will find cvs.texi(,12394) that taginfo is a better solution (@pxref{user-defined logging}). cvs.texi(,12395) @c FIXME: Is it run on server? client? cvs.texi(,12396) @c Problems with -t include: cvs.texi(,12397) @c * It is run after the tag not before cvs.texi(,12398) @c * It doesn't get passed all the information that cvs.texi(,12399) @c taginfo does ("mov", &c). cvs.texi(,12400) @c * It only is run for rtag, not tag. cvs.texi(,12401) @end table cvs.texi(,12402) cvs.texi(,12403) You should also see @pxref{Module program options} about how the cvs.texi(,12404) ``program options'' programs are run. cvs.texi(,12405) cvs.texi(,12406) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,12407) cvs.texi(,12408) @node Module program options cvs.texi(,12409) @appendixsubsec How the modules file ``program options'' programs are run cvs.texi(,12410) @cindex Modules file program options cvs.texi(,12411) @cindex -t, in modules file cvs.texi(,12412) @cindex -o, in modules file cvs.texi(,12413) @cindex -e, in modules file cvs.texi(,12414) cvs.texi(,12415) @noindent cvs.texi(,12416) For checkout, rtag, and export, the program is server-based, and as such the cvs.texi(,12417) following applies:- cvs.texi(,12418) cvs.texi(,12419) If using remote access methods (pserver, ext, etc.), cvs.texi(,12420) @sc{cvs} will execute this program on the server from a temporary cvs.texi(,12421) directory. The path is searched for this program. cvs.texi(,12422) cvs.texi(,12423) If using ``local access'' (on a local or remote NFS file system, i.e. cvs.texi(,12424) repository set just to a path), cvs.texi(,12425) the program will be executed from the newly checked-out tree, if cvs.texi(,12426) found there, or alternatively searched for in the path if not. cvs.texi(,12427) cvs.texi(,12428) The programs are all run after the operation has effectively cvs.texi(,12429) completed. cvs.texi(,12430) cvs.texi(,12431) cvs.texi(,12432) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,12433) @node Wrappers cvs.texi(,12434) @appendixsec The cvswrappers file cvs.texi(,12435) @cindex cvswrappers (admin file) cvs.texi(,12436) @cindex CVSWRAPPERS, environment variable cvs.texi(,12437) @cindex Wrappers cvs.texi(,12438) cvs.texi(,12439) @c FIXME: need some better way of separating this out cvs.texi(,12440) @c by functionality. -m is cvs.texi(,12441) @c one feature, and -k is a another. And this discussion cvs.texi(,12442) @c should be better motivated (e.g. start with the cvs.texi(,12443) @c problems, then explain how the feature solves it). cvs.texi(,12444) cvs.texi(,12445) Wrappers refers to a @sc{cvs} feature which lets you cvs.texi(,12446) control certain settings based on the name of the file cvs.texi(,12447) which is being operated on. The settings are @samp{-k} cvs.texi(,12448) for binary files, and @samp{-m} for nonmergeable text cvs.texi(,12449) files. cvs.texi(,12450) cvs.texi(,12451) The @samp{-m} option cvs.texi(,12452) specifies the merge methodology that should be used when cvs.texi(,12453) a non-binary file is updated. @code{MERGE} means the usual cvs.texi(,12454) @sc{cvs} behavior: try to merge the files. @code{COPY} cvs.texi(,12455) means that @code{cvs update} will refuse to merge cvs.texi(,12456) files, as it also does for files specified as binary cvs.texi(,12457) with @samp{-kb} (but if the file is specified as cvs.texi(,12458) binary, there is no need to specify @samp{-m 'COPY'}). cvs.texi(,12459) @sc{cvs} will provide the user with the cvs.texi(,12460) two versions of the files, and require the user using cvs.texi(,12461) mechanisms outside @sc{cvs}, to insert any necessary cvs.texi(,12462) changes. cvs.texi(,12463) cvs.texi(,12464) @strong{WARNING: do not use @code{COPY} with cvs.texi(,12465) @sc{cvs} 1.9 or earlier - such versions of @sc{cvs} will cvs.texi(,12466) copy one version of your file over the other, wiping cvs.texi(,12467) out the previous contents.} cvs.texi(,12468) @c Ordinarily we don't document the behavior of old cvs.texi(,12469) @c versions. But this one is so dangerous, I think we cvs.texi(,12470) @c must. I almost renamed it to -m 'NOMERGE' so we cvs.texi(,12471) @c could say "never use -m 'COPY'". cvs.texi(,12472) The @samp{-m} wrapper option only affects behavior when cvs.texi(,12473) merging is done on update; it does not affect how files cvs.texi(,12474) are stored. See @ref{Binary files}, for more on cvs.texi(,12475) binary files. cvs.texi(,12476) cvs.texi(,12477) The basic format of the file @file{cvswrappers} is: cvs.texi(,12478) cvs.texi(,12479) @c FIXME: @example is all wrong for this. Use @deffn or cvs.texi(,12480) @c something more sensible. cvs.texi(,12481) @example cvs.texi(,12482) wildcard [option value][option value]... cvs.texi(,12483) cvs.texi(,12484) where option is one of cvs.texi(,12485) -m update methodology value: MERGE or COPY cvs.texi(,12486) -k keyword expansion value: expansion mode cvs.texi(,12487) cvs.texi(,12488) and value is a single-quote delimited value. cvs.texi(,12489) @end example cvs.texi(,12490) cvs.texi(,12552) cvs.texi(,12553) @c FIXME: We don't document -W or point to where it is cvs.texi(,12554) @c documented. Or .cvswrappers. cvs.texi(,12555) For example, the following command imports a cvs.texi(,12556) directory, treating files whose name ends in cvs.texi(,12557) @samp{.exe} as binary: cvs.texi(,12558) cvs.texi(,12559) @example cvs.texi(,12560) cvs import -I ! -W "*.exe -k 'b'" first-dir vendortag reltag cvs.texi(,12561) @end example cvs.texi(,12562) cvs.texi(,12563) @c Another good example, would be storing files cvs.texi(,12564) @c (e.g. binary files) compressed in the repository. cvs.texi(,12565) @c :::::::::::::::::: cvs.texi(,12566) @c cvswrappers cvs.texi(,12567) @c :::::::::::::::::: cvs.texi(,12568) @c *.t12 -m 'COPY' cvs.texi(,12569) @c *.t[0-9][0-9] -f 'gunzipcp %s' -t 'gzipcp %s %s' -m 'COPY' cvs.texi(,12570) @c cvs.texi(,12571) @c :::::::::::::::::: cvs.texi(,12572) @c gunzipcp cvs.texi(,12573) @c :::::::::::::::::: cvs.texi(,12574) @c : cvs.texi(,12575) @c [ -f $1 ] || exit 1 cvs.texi(,12576) @c zcat $1 > /tmp/.#$1.$$ cvs.texi(,12577) @c mv /tmp/.#$1.$$ $1 cvs.texi(,12578) @c cvs.texi(,12579) @c :::::::::::::::::: cvs.texi(,12580) @c gzipcp cvs.texi(,12581) @c :::::::::::::::::: cvs.texi(,12582) @c : cvs.texi(,12583) @c DIRNAME=`echo $1 | sed -e "s|/.*/||g"` cvs.texi(,12584) @c if [ ! -d $DIRNAME ] ; then cvs.texi(,12585) @c DIRNAME=`echo $1 | sed -e "s|.*/||g"` cvs.texi(,12586) @c fi cvs.texi(,12587) @c gzip -c $DIRNAME > $2 cvs.texi(,12588) @c One catch--"cvs diff" will not invoke the wrappers cvs.texi(,12589) @c (probably a CVS bug, although I haven't thought it out). cvs.texi(,12590) cvs.texi(,12591) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,12592) @node commit files cvs.texi(,12593) @appendixsec The commit support files cvs.texi(,12594) @cindex Committing, administrative support files cvs.texi(,12595) cvs.texi(,12596) The @samp{-i} flag in the @file{modules} file can be cvs.texi(,12597) used to run a certain program whenever files are cvs.texi(,12598) committed (@pxref{modules}). The files described in cvs.texi(,12599) this section provide other, more flexible, ways to run cvs.texi(,12600) programs whenever something is committed. cvs.texi(,12601) cvs.texi(,12602) There are three kind of programs that can be run on cvs.texi(,12603) commit. They are specified in files in the repository, cvs.texi(,12604) as described below. The following table summarizes the cvs.texi(,12605) file names and the purpose of the corresponding cvs.texi(,12606) programs. cvs.texi(,12607) cvs.texi(,12608) @table @file cvs.texi(,12609) @item commitinfo cvs.texi(,12610) The program is responsible for checking that the commit cvs.texi(,12611) is allowed. If it exits with a non-zero exit status cvs.texi(,12612) the commit will be aborted. cvs.texi(,12613) cvs.texi(,12614) @item verifymsg cvs.texi(,12615) The specified program is used to evaluate the log message, cvs.texi(,12616) and possibly verify that it contains all required cvs.texi(,12617) fields. This is most useful in combination with the cvs.texi(,12618) @file{rcsinfo} file, which can hold a log message cvs.texi(,12619) template (@pxref{rcsinfo}). cvs.texi(,12620) cvs.texi(,12621) @item editinfo cvs.texi(,12622) The specified program is used to edit the log message, cvs.texi(,12623) and possibly verify that it contains all required cvs.texi(,12624) fields. This is most useful in combination with the cvs.texi(,12625) @file{rcsinfo} file, which can hold a log message cvs.texi(,12626) template (@pxref{rcsinfo}). (obsolete) cvs.texi(,12627) cvs.texi(,12628) @item loginfo cvs.texi(,12629) The specified program is called when the commit is cvs.texi(,12630) complete. It receives the log message and some cvs.texi(,12631) additional information and can store the log message in cvs.texi(,12632) a file, or mail it to appropriate persons, or maybe cvs.texi(,12633) post it to a local newsgroup, or@dots{} Your cvs.texi(,12634) imagination is the limit! cvs.texi(,12635) @end table cvs.texi(,12636) cvs.texi(,12637) @menu cvs.texi(,12638) * syntax:: The common syntax cvs.texi(,12639) * commitinfo:: Pre-commit checking cvs.texi(,12640) * verifymsg:: How are log messages evaluated? cvs.texi(,12641) * editinfo:: Specifying how log messages are created cvs.texi(,12642) (obsolete) cvs.texi(,12643) * loginfo:: Where should log messages be sent? cvs.texi(,12644) @end menu cvs.texi(,12645) cvs.texi(,12646) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,12647) @node syntax cvs.texi(,12648) @appendixsubsec The common syntax cvs.texi(,12649) @cindex Info files (syntax) cvs.texi(,12650) @cindex Syntax of info files cvs.texi(,12651) @cindex Common syntax of info files cvs.texi(,12652) cvs.texi(,12653) @c FIXME: having this so totally separate from the cvs.texi(,12654) @c Variables node is rather bogus. cvs.texi(,12655) cvs.texi(,12656) The administrative files such as @file{commitinfo}, cvs.texi(,12657) @file{loginfo}, @file{rcsinfo}, @file{verifymsg}, etc., cvs.texi(,12658) all have a common format. The purpose of the files are cvs.texi(,12659) described later on. The common syntax is described cvs.texi(,12660) here. cvs.texi(,12661) cvs.texi(,12662) @cindex Regular expression syntax cvs.texi(,12663) Each line contains the following: cvs.texi(,12664) @itemize @bullet cvs.texi(,12665) @item cvs.texi(,12666) @c Say anything about DEFAULT and ALL? Right now we cvs.texi(,12667) @c leave that to the description of each file (and in fact cvs.texi(,12668) @c the practice is inconsistent which is really annoying). cvs.texi(,12669) A regular expression. This is a basic regular cvs.texi(,12670) expression in the syntax used by GNU emacs. cvs.texi(,12671) @c FIXME: What we probably should be saying is "POSIX Basic cvs.texi(,12672) @c Regular Expression with the following extensions (`\(' cvs.texi(,12673) @c `\|' '+' etc)" cvs.texi(,12674) @c rather than define it with reference to emacs. cvs.texi(,12675) @c The reference to emacs is not strictly speaking cvs.texi(,12676) @c true, as we don't support \=, \s, or \S. Also it isn't cvs.texi(,12677) @c clear we should document and/or promise to continue to cvs.texi(,12678) @c support all the obscure emacs extensions like \<. cvs.texi(,12679) @c Also need to better cite (or include) full cvs.texi(,12680) @c documentation for the syntax. cvs.texi(,12681) @c Also see comment in configure.in about what happens to the cvs.texi(,12682) @c syntax if we pick up a system-supplied regexp matcher. cvs.texi(,12683) cvs.texi(,12684) @item cvs.texi(,12685) A whitespace separator---one or more spaces and/or tabs. cvs.texi(,12686) cvs.texi(,12687) @item cvs.texi(,12688) A file name or command-line template. cvs.texi(,12689) @end itemize cvs.texi(,12690) cvs.texi(,12691) @noindent cvs.texi(,12692) Blank lines are ignored. Lines that start with the cvs.texi(,12693) character @samp{#} are treated as comments. Long lines cvs.texi(,12694) unfortunately can @emph{not} be broken in two parts in cvs.texi(,12695) any way. cvs.texi(,12696) cvs.texi(,12697) The first regular expression that matches the current cvs.texi(,12698) directory name in the repository is used. The rest of the line cvs.texi(,12699) is used as a file name or command-line as appropriate. cvs.texi(,12700) cvs.texi(,12701) @c FIXME: need an example. In particular, show what cvs.texi(,12702) @c the regular expression is matched against (one cvs.texi(,12703) @c ordinarily clueful person got confused about whether it cvs.texi(,12704) @c includes the filename--"directory name" above should be cvs.texi(,12705) @c unambiguous but there is nothing like an example to cvs.texi(,12706) @c confirm people's understanding of this sort of thing). cvs.texi(,12707) cvs.texi(,12708) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,12709) @node commitinfo cvs.texi(,12710) @appendixsubsec Commitinfo cvs.texi(,12711) @cindex @file{commitinfo} cvs.texi(,12712) @cindex Commits, precommit verification of cvs.texi(,12713) @cindex Precommit checking cvs.texi(,12714) cvs.texi(,12715) The @file{commitinfo} file defines programs to execute cvs.texi(,12716) whenever @samp{cvs commit} is about to execute. These cvs.texi(,12717) programs are used for pre-commit checking to verify cvs.texi(,12718) that the modified, added and removed files are really cvs.texi(,12719) ready to be committed. This could be used, for cvs.texi(,12720) instance, to verify that the changed files conform to cvs.texi(,12721) to your site's standards for coding practice. cvs.texi(,12722) cvs.texi(,12723) As mentioned earlier, each line in the cvs.texi(,12724) @file{commitinfo} file consists of a regular expression cvs.texi(,12725) and a command-line template. The template can include cvs.texi(,12726) a program name and any number of arguments you wish to cvs.texi(,12727) supply to it. The full path to the current source cvs.texi(,12728) repository is appended to the template, followed by the cvs.texi(,12729) file names of any files involved in the commit (added, cvs.texi(,12730) removed, and modified files). cvs.texi(,12731) cvs.texi(,12732) @cindex Exit status, of commitinfo cvs.texi(,12733) The first line with a regular expression matching the cvs.texi(,12734) directory within the repository will be used. If the cvs.texi(,12735) command returns a non-zero exit status the commit will cvs.texi(,12736) be aborted. cvs.texi(,12737) @c FIXME: need example(s) of what "directory within the cvs.texi(,12738) @c repository" means. cvs.texi(,12739) cvs.texi(,12740) @cindex DEFAULT in commitinfo cvs.texi(,12741) If the repository name does not match any of the cvs.texi(,12742) regular expressions in this file, the @samp{DEFAULT} cvs.texi(,12743) line is used, if it is specified. cvs.texi(,12744) cvs.texi(,12745) @cindex ALL in commitinfo cvs.texi(,12746) All occurrences of the name @samp{ALL} appearing as a cvs.texi(,12747) regular expression are used in addition to the first cvs.texi(,12748) matching regular expression or the name @samp{DEFAULT}. cvs.texi(,12749) cvs.texi(,12750) @cindex @file{commitinfo}, working directory cvs.texi(,12751) @cindex @file{commitinfo}, command environment cvs.texi(,12752) The command will be run in the root of the workspace cvs.texi(,12753) containing the new versions of any files the user would like cvs.texi(,12754) to modify (commit), @emph{or in a copy of the workspace on cvs.texi(,12755) the server (@pxref{Remote repositories})}. If a file is cvs.texi(,12756) being removed, there will be no copy of the file under the cvs.texi(,12757) current directory. If a file is being added, there will be cvs.texi(,12758) no corresponding archive file in the repository unless the cvs.texi(,12759) file is being resurrected. cvs.texi(,12760) cvs.texi(,12761) Note that both the repository directory and the corresponding cvs.texi(,12762) Attic (@pxref{Attic}) directory may need to be checked to cvs.texi(,12763) locate the archive file corresponding to any given file being cvs.texi(,12764) committed. Much of the information about the specific commit cvs.texi(,12765) request being made, including the destination branch, commit cvs.texi(,12766) message, and command line options specified, is not available cvs.texi(,12767) to the command. cvs.texi(,12768) cvs.texi(,12769) @c FIXME: should discuss using commitinfo to control cvs.texi(,12770) @c who has checkin access to what (e.g. Joe can check into cvs.texi(,12771) @c directories a, b, and c, and Mary can check into cvs.texi(,12772) @c directories b, c, and d--note this case cannot be cvs.texi(,12773) @c conveniently handled with unix groups). Of course, cvs.texi(,12774) @c adding a new set of features to CVS might be a more cvs.texi(,12775) @c natural way to fix this problem than telling people to cvs.texi(,12776) @c use commitinfo. cvs.texi(,12777) @c FIXME: Should make some reference, especially in cvs.texi(,12778) @c the context of controlling who has access, to the fact cvs.texi(,12779) @c that commitinfo can be circumvented. Perhaps cvs.texi(,12780) @c mention SETXID (but has it been carefully examined cvs.texi(,12781) @c for holes?). This fits in with the discussion of cvs.texi(,12782) @c general CVS security in "Password authentication cvs.texi(,12783) @c security" (the bit which is not pserver-specific). cvs.texi(,12784) cvs.texi(,12785) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,12786) @node verifymsg cvs.texi(,12787) @appendixsubsec Verifying log messages cvs.texi(,12788) @cindex @file{verifymsg} (admin file) cvs.texi(,12789) @cindex Log message, verifying cvs.texi(,12790) cvs.texi(,12791) Once you have entered a log message, you can evaluate cvs.texi(,12792) that message to check for specific content, such as cvs.texi(,12793) a bug ID. Use the @file{verifymsg} file to cvs.texi(,12794) specify a program that is used to verify the log message. cvs.texi(,12795) This program could be a simple script that checks cvs.texi(,12796) that the entered message contains the required fields. cvs.texi(,12797) cvs.texi(,12798) The @file{verifymsg} file is often most useful together cvs.texi(,12799) with the @file{rcsinfo} file, which can be used to cvs.texi(,12800) specify a log message template. cvs.texi(,12801) cvs.texi(,12802) Each line in the @file{verifymsg} file consists of a cvs.texi(,12803) regular expression and a command-line template. The cvs.texi(,12804) template must include a program name, and can include cvs.texi(,12805) any number of arguments. The full path to the current cvs.texi(,12806) log message template file is appended to the template. cvs.texi(,12807) cvs.texi(,12808) One thing that should be noted is that the @samp{ALL} cvs.texi(,12809) keyword is not supported. If more than one matching cvs.texi(,12810) line is found, the first one is used. This can be cvs.texi(,12811) useful for specifying a default verification script in a cvs.texi(,12812) directory, and then overriding it in a subdirectory. cvs.texi(,12813) cvs.texi(,12814) @cindex DEFAULT in @file{verifymsg} cvs.texi(,12815) If the repository name does not match any of the cvs.texi(,12816) regular expressions in this file, the @samp{DEFAULT} cvs.texi(,12817) line is used, if it is specified. cvs.texi(,12818) cvs.texi(,12819) @cindex Exit status, of @file{verifymsg} cvs.texi(,12820) If the verification script exits with a non-zero exit status, cvs.texi(,12821) the commit is aborted. cvs.texi(,12822) cvs.texi(,12823) @cindex @file{verifymsg}, changing the log message cvs.texi(,12824) In the default configuration, CVS allows the cvs.texi(,12825) verification script to change the log message. This is cvs.texi(,12826) controlled via the RereadLogAfterVerify CVSROOT/config cvs.texi(,12827) option. cvs.texi(,12828) cvs.texi(,12829) When @samp{RereadLogAfterVerify=always} or cvs.texi(,12830) @samp{RereadLogAfterVerify=stat}, the log message will cvs.texi(,12831) either always be reread after the verification script cvs.texi(,12832) is run or reread only if the log message file status cvs.texi(,12833) has changed. cvs.texi(,12834) cvs.texi(,12835) @xref{config}, for more on CVSROOT/config options. cvs.texi(,12836) cvs.texi(,12837) It is NOT a good idea for a @file{verifymsg} script to cvs.texi(,12838) interact directly with the user in the various cvs.texi(,12839) client/server methods. For the @code{pserver} method, cvs.texi(,12840) there is no protocol support for communicating between cvs.texi(,12841) @file{verifymsg} and the client on the remote end. For the cvs.texi(,12842) @code{ext} and @code{server} methods, it is possible cvs.texi(,12843) for CVS to become confused by the characters going cvs.texi(,12844) along the same channel as the CVS protocol cvs.texi(,12845) messages. See @ref{Remote repositories}, for more cvs.texi(,12846) information on client/server setups. In addition, at the time cvs.texi(,12847) the @file{verifymsg} script runs, the CVS cvs.texi(,12848) server has locks in place in the repository. If control is cvs.texi(,12849) returned to the user here then other users may be stuck waiting cvs.texi(,12850) for access to the repository. cvs.texi(,12851) cvs.texi(,12852) This option can be useful if you find yourself using an cvs.texi(,12853) rcstemplate that needs to be modified to remove empty cvs.texi(,12854) elements or to fill in default values. It can also be cvs.texi(,12855) useful if the rcstemplate has changed in the repository cvs.texi(,12856) and the CVS/Template was not updated, but is able to be cvs.texi(,12857) adapted to the new format by the verification script cvs.texi(,12858) that is run by @file{verifymsg}. cvs.texi(,12859) cvs.texi(,12860) An example of an update might be to change all cvs.texi(,12861) occurrences of 'BugId:' to be 'DefectId:' (which can be cvs.texi(,12862) useful if the rcstemplate has recently been changed and cvs.texi(,12863) there are still checked-out user trees with cached cvs.texi(,12864) copies in the CVS/Template file of the older version). cvs.texi(,12865) cvs.texi(,12866) Another example of an update might be to delete a line cvs.texi(,12867) that contains 'BugID: none' from the log message after cvs.texi(,12868) validation of that value as being allowed is made. cvs.texi(,12869) cvs.texi(,12870) The following is a little silly example of a cvs.texi(,12871) @file{verifymsg} file, together with the corresponding cvs.texi(,12872) @file{rcsinfo} file, the log message template and an cvs.texi(,12873) verification script. We begin with the log message template. cvs.texi(,12874) We want to always record a bug-id number on the first cvs.texi(,12875) line of the log message. The rest of log message is cvs.texi(,12876) free text. The following template is found in the file cvs.texi(,12877) @file{/usr/cvssupport/tc.template}. cvs.texi(,12878) cvs.texi(,12879) @example cvs.texi(,12880) BugId: cvs.texi(,12881) @end example cvs.texi(,12882) cvs.texi(,12883) The script @file{/usr/cvssupport/bugid.verify} is used to cvs.texi(,12884) evaluate the log message. cvs.texi(,12885) cvs.texi(,12886) @example cvs.texi(,12887) #!/bin/sh cvs.texi(,12888) # cvs.texi(,12889) # bugid.verify filename cvs.texi(,12890) # cvs.texi(,12891) # Verify that the log message contains a valid bugid cvs.texi(,12892) # on the first line. cvs.texi(,12893) # cvs.texi(,12894) if head -1 < $1 | grep '^BugId:[ ]*[0-9][0-9]*$' > /dev/null; then cvs.texi(,12895) exit 0 cvs.texi(,12896) elif head -1 < $1 | grep '^BugId:[ ]*none$' > /dev/null; then cvs.texi(,12897) # It is okay to allow commits with 'BugId: none', cvs.texi(,12898) # but do not put that text into the real log message. cvs.texi(,12899) grep -v '^BugId:[ ]*none$' > $1.rewrite cvs.texi(,12900) mv $1.rewrite $1 cvs.texi(,12901) exit 0 cvs.texi(,12902) else cvs.texi(,12903) echo "No BugId found." cvs.texi(,12904) exit 1 cvs.texi(,12905) fi cvs.texi(,12906) @end example cvs.texi(,12907) cvs.texi(,12908) The @file{verifymsg} file contains this line: cvs.texi(,12909) cvs.texi(,12910) @example cvs.texi(,12911) ^tc /usr/cvssupport/bugid.verify cvs.texi(,12912) @end example cvs.texi(,12913) cvs.texi(,12914) The @file{rcsinfo} file contains this line: cvs.texi(,12915) cvs.texi(,12916) @example cvs.texi(,12917) ^tc /usr/cvssupport/tc.template cvs.texi(,12918) @end example cvs.texi(,12919) cvs.texi(,12920) The @file{config} file contains this line: cvs.texi(,12921) cvs.texi(,12922) @example cvs.texi(,12923) RereadLogAfterVerify=always cvs.texi(,12924) @end example cvs.texi(,12925) cvs.texi(,12926) cvs.texi(,12927) cvs.texi(,12928) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,12929) @node editinfo cvs.texi(,12930) @appendixsubsec Editinfo cvs.texi(,12931) @cindex editinfo (admin file) cvs.texi(,12932) @cindex Editor, specifying per module cvs.texi(,12933) @cindex Per-module editor cvs.texi(,12934) @cindex Log messages, editing cvs.texi(,12935) cvs.texi(,12936) @strong{Note: The @file{editinfo} feature has been cvs.texi(,12937) rendered obsolete. To set a default editor for log cvs.texi(,12938) messages use the @code{CVSEDITOR}, @code{EDITOR} environment variables cvs.texi(,12939) (@pxref{Environment variables}) or the @samp{-e} global cvs.texi(,12940) option (@pxref{Global options}). See @ref{verifymsg}, cvs.texi(,12941) for information on the use of the @file{verifymsg} cvs.texi(,12942) feature for evaluating log messages.} cvs.texi(,12943) cvs.texi(,12944) If you want to make sure that all log messages look the cvs.texi(,12945) same way, you can use the @file{editinfo} file to cvs.texi(,12946) specify a program that is used to edit the log message. cvs.texi(,12947) This program could be a custom-made editor that always cvs.texi(,12948) enforces a certain style of the log message, or maybe a cvs.texi(,12949) simple shell script that calls an editor, and checks cvs.texi(,12950) that the entered message contains the required fields. cvs.texi(,12951) cvs.texi(,12952) If no matching line is found in the @file{editinfo} cvs.texi(,12953) file, the editor specified in the environment variable cvs.texi(,12954) @code{$CVSEDITOR} is used instead. If that variable is cvs.texi(,12955) not set, then the environment variable @code{$EDITOR} cvs.texi(,12956) is used instead. If that variable is not cvs.texi(,12957) set a default will be used. See @ref{Committing your changes}. cvs.texi(,12958) cvs.texi(,12959) The @file{editinfo} file is often most useful together cvs.texi(,12960) with the @file{rcsinfo} file, which can be used to cvs.texi(,12961) specify a log message template. cvs.texi(,12962) cvs.texi(,12963) Each line in the @file{editinfo} file consists of a cvs.texi(,12964) regular expression and a command-line template. The cvs.texi(,12965) template must include a program name, and can include cvs.texi(,12966) any number of arguments. The full path to the current cvs.texi(,12967) log message template file is appended to the template. cvs.texi(,12968) cvs.texi(,12969) One thing that should be noted is that the @samp{ALL} cvs.texi(,12970) keyword is not supported. If more than one matching cvs.texi(,12971) line is found, the first one is used. This can be cvs.texi(,12972) useful for specifying a default edit script in a cvs.texi(,12973) module, and then overriding it in a subdirectory. cvs.texi(,12974) cvs.texi(,12975) @cindex DEFAULT in editinfo cvs.texi(,12976) If the repository name does not match any of the cvs.texi(,12977) regular expressions in this file, the @samp{DEFAULT} cvs.texi(,12978) line is used, if it is specified. cvs.texi(,12979) cvs.texi(,12980) If the edit script exits with a non-zero exit status, cvs.texi(,12981) the commit is aborted. cvs.texi(,12982) cvs.texi(,12983) Note: when @sc{cvs} is accessing a remote repository, cvs.texi(,12984) or when the @samp{-m} or @samp{-F} options to @code{cvs cvs.texi(,12985) commit} are used, @file{editinfo} will not be consulted. cvs.texi(,12986) There is no good workaround for this; use cvs.texi(,12987) @file{verifymsg} instead. cvs.texi(,12988) cvs.texi(,12989) @menu cvs.texi(,12990) * editinfo example:: Editinfo example cvs.texi(,12991) @end menu cvs.texi(,12992) cvs.texi(,12993) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,12994) @node editinfo example cvs.texi(,12995) @appendixsubsubsec Editinfo example cvs.texi(,12996) cvs.texi(,12997) The following is a little silly example of a cvs.texi(,12998) @file{editinfo} file, together with the corresponding cvs.texi(,12999) @file{rcsinfo} file, the log message template and an cvs.texi(,13000) editor script. We begin with the log message template. cvs.texi(,13001) We want to always record a bug-id number on the first cvs.texi(,13002) line of the log message. The rest of log message is cvs.texi(,13003) free text. The following template is found in the file cvs.texi(,13004) @file{/usr/cvssupport/tc.template}. cvs.texi(,13005) cvs.texi(,13006) @example cvs.texi(,13007) BugId: cvs.texi(,13008) @end example cvs.texi(,13009) cvs.texi(,13010) The script @file{/usr/cvssupport/bugid.edit} is used to cvs.texi(,13011) edit the log message. cvs.texi(,13012) cvs.texi(,13013) @example cvs.texi(,13014) #!/bin/sh cvs.texi(,13015) # cvs.texi(,13016) # bugid.edit filename cvs.texi(,13017) # cvs.texi(,13018) # Call $EDITOR on FILENAME, and verify that the cvs.texi(,13019) # resulting file contains a valid bugid on the first cvs.texi(,13020) # line. cvs.texi(,13021) if [ "x$EDITOR" = "x" ]; then EDITOR=vi; fi cvs.texi(,13022) if [ "x$CVSEDITOR" = "x" ]; then CVSEDITOR=$EDITOR; fi cvs.texi(,13023) $CVSEDITOR $1 cvs.texi(,13024) until head -1|grep '^BugId:[ ]*[0-9][0-9]*$' < $1 cvs.texi(,13025) do echo -n "No BugId found. Edit again? ([y]/n)" cvs.texi(,13026) read ans cvs.texi(,13027) case $@{ans@} in cvs.texi(,13028) n*) exit 1;; cvs.texi(,13029) esac cvs.texi(,13030) $CVSEDITOR $1 cvs.texi(,13031) done cvs.texi(,13032) @end example cvs.texi(,13033) cvs.texi(,13034) The @file{editinfo} file contains this line: cvs.texi(,13035) cvs.texi(,13036) @example cvs.texi(,13037) ^tc /usr/cvssupport/bugid.edit cvs.texi(,13038) @end example cvs.texi(,13039) cvs.texi(,13040) The @file{rcsinfo} file contains this line: cvs.texi(,13041) cvs.texi(,13042) @example cvs.texi(,13043) ^tc /usr/cvssupport/tc.template cvs.texi(,13044) @end example cvs.texi(,13045) cvs.texi(,13046) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,13047) @node loginfo cvs.texi(,13048) @appendixsubsec Loginfo cvs.texi(,13049) @cindex loginfo (admin file) cvs.texi(,13050) @cindex Storing log messages cvs.texi(,13051) @cindex Mailing log messages cvs.texi(,13052) @cindex Distributing log messages cvs.texi(,13053) @cindex Log messages cvs.texi(,13054) cvs.texi(,13055) @c "cvs commit" is not quite right. What we cvs.texi(,13056) @c mean is "when the repository gets changed" which cvs.texi(,13057) @c also includes "cvs import" and "cvs add" on a directory. cvs.texi(,13058) The @file{loginfo} file is used to control where cvs.texi(,13059) @samp{cvs commit} log information is sent. The first cvs.texi(,13060) entry on a line is a regular expression which is tested cvs.texi(,13061) against the directory that the change is being made to, cvs.texi(,13062) relative to the @code{$CVSROOT}. If a match is found, then cvs.texi(,13063) the remainder of the line is a filter program that cvs.texi(,13064) should expect log information on its standard input. cvs.texi(,13065) cvs.texi(,13066) If the repository name does not match any of the cvs.texi(,13067) regular expressions in this file, the @samp{DEFAULT} cvs.texi(,13068) line is used, if it is specified. cvs.texi(,13069) cvs.texi(,13070) All occurrences of the name @samp{ALL} appearing as a cvs.texi(,13071) regular expression are used in addition to the first cvs.texi(,13072) matching regular expression or @samp{DEFAULT}. cvs.texi(,13073) cvs.texi(,13074) The first matching regular expression is used. cvs.texi(,13075) cvs.texi(,13076) @xref{commit files}, for a description of the syntax of cvs.texi(,13077) the @file{loginfo} file. cvs.texi(,13078) cvs.texi(,13079) The user may specify a format string as cvs.texi(,13080) part of the filter. The string is composed of a cvs.texi(,13081) @samp{%} followed by a space, or followed by a single cvs.texi(,13082) format character, or followed by a set of format cvs.texi(,13083) characters surrounded by @samp{@{} and @samp{@}} as cvs.texi(,13084) separators. The format characters are: cvs.texi(,13085) cvs.texi(,13086) @table @t cvs.texi(,13087) @item s cvs.texi(,13088) file name cvs.texi(,13089) @item V cvs.texi(,13090) old version number (pre-checkin) cvs.texi(,13091) @item v cvs.texi(,13092) new version number (post-checkin) cvs.texi(,13093) @end table cvs.texi(,13094) cvs.texi(,13095) All other characters that appear in a format string cvs.texi(,13096) expand to an empty field (commas separating fields are cvs.texi(,13097) still provided). cvs.texi(,13098) cvs.texi(,13099) For example, some valid format strings are @samp{%}, cvs.texi(,13100) @samp{%s}, @samp{%@{s@}}, and @samp{%@{sVv@}}. cvs.texi(,13101) cvs.texi(,13102) The output will be a space separated string of tokens enclosed in cvs.texi(,13103) quotation marks (@t{"}). cvs.texi(,13104) Any embedded dollar signs (@t{$}), backticks (@t{`}), cvs.texi(,13105) backslashes (@t{\}), or quotation marks will be preceded cvs.texi(,13106) by a backslash (this allows the shell to correctly parse it cvs.texi(,13107) as a single string, regardless of the characters it contains). cvs.texi(,13108) For backwards compatibility, the first cvs.texi(,13109) token will be the repository subdirectory. The rest of the cvs.texi(,13110) tokens will be comma-delimited lists of the information cvs.texi(,13111) requested in the format string. For example, if cvs.texi(,13112) @samp{/u/src/master/yoyodyne/tc} is the repository, @samp{%@{sVv@}} cvs.texi(,13113) is the format string, and three files (@t{ChangeLog}, cvs.texi(,13114) @t{Makefile}, @t{foo.c}) were modified, the output cvs.texi(,13115) might be: cvs.texi(,13116) cvs.texi(,13117) @example cvs.texi(,13118) "yoyodyne/tc ChangeLog,1.1,1.2 Makefile,1.3,1.4 foo.c,1.12,1.13" cvs.texi(,13119) @end example cvs.texi(,13120) cvs.texi(,13121) As another example, @samp{%@{@}} means that only the cvs.texi(,13122) name of the repository will be generated. cvs.texi(,13123) cvs.texi(,13124) Note: when @sc{cvs} is accessing a remote repository, cvs.texi(,13125) @file{loginfo} will be run on the @emph{remote} cvs.texi(,13126) (i.e., server) side, not the client side (@pxref{Remote cvs.texi(,13127) repositories}). cvs.texi(,13128) cvs.texi(,13129) @menu cvs.texi(,13130) * loginfo example:: Loginfo example cvs.texi(,13131) * Keeping a checked out copy:: Updating a tree on every checkin cvs.texi(,13132) @end menu cvs.texi(,13133) cvs.texi(,13134) @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . cvs.texi(,13135) @node loginfo example cvs.texi(,13136) @appendixsubsubsec Loginfo example cvs.texi(,13137) cvs.texi(,13138) The following @file{loginfo} file, together with the cvs.texi(,13139) tiny shell-script below, appends all log messages cvs.texi(,13140) to the file @file{$CVSROOT/CVSROOT/commitlog}, cvs.texi(,13141) and any commits to the administrative files (inside cvs.texi(,13142) the @file{CVSROOT} directory) are also logged in cvs.texi(,13143) @file{/usr/adm/cvsroot-log}. cvs.texi(,13144) Commits to the @file{prog1} directory are mailed to @t{ceder}. cvs.texi(,13145) cvs.texi(,13146) @c FIXME: is it a CVS feature or bug that only the cvs.texi(,13147) @c first matching line is used? It is documented cvs.texi(,13148) @c above, but is it useful? For example, if we wanted cvs.texi(,13149) @c to run both "cvs-log" and "Mail" for the CVSROOT cvs.texi(,13150) @c directory, it is kind of awkward if cvs.texi(,13151) @c only the first matching line is used. cvs.texi(,13152) @example cvs.texi(,13153) ALL /usr/local/bin/cvs-log $CVSROOT/CVSROOT/commitlog $USER cvs.texi(,13154) ^CVSROOT /usr/local/bin/cvs-log /usr/adm/cvsroot-log cvs.texi(,13155) ^prog1 Mail -s %s ceder cvs.texi(,13156) @end example cvs.texi(,13157) cvs.texi(,13158) The shell-script @file{/usr/local/bin/cvs-log} looks cvs.texi(,13159) like this: cvs.texi(,13160) cvs.texi(,13161) @example cvs.texi(,13162) #!/bin/sh cvs.texi(,13163) (echo "------------------------------------------------------"; cvs.texi(,13164) echo -n $2" "; cvs.texi(,13165) date; cvs.texi(,13166) echo; cvs.texi(,13167) cat) >> $1 cvs.texi(,13168) @end example cvs.texi(,13169) cvs.texi(,13170) @node Keeping a checked out copy cvs.texi(,13171) @appendixsubsubsec Keeping a checked out copy cvs.texi(,13172) cvs.texi(,13173) @c What other index entries? It seems like cvs.texi(,13174) @c people might want to use a lot of different cvs.texi(,13175) @c words for this functionality. cvs.texi(,13176) @cindex Keeping a checked out copy cvs.texi(,13177) @cindex Checked out copy, keeping cvs.texi(,13178) @cindex Web pages, maintaining with CVS cvs.texi(,13179) cvs.texi(,13180) It is often useful to maintain a directory tree which cvs.texi(,13181) contains files which correspond to the latest version cvs.texi(,13182) in the repository. For example, other developers might cvs.texi(,13183) want to refer to the latest sources without having to cvs.texi(,13184) check them out, or you might be maintaining a web site cvs.texi(,13185) with @sc{cvs} and want every checkin to cause the files cvs.texi(,13186) used by the web server to be updated. cvs.texi(,13187) @c Can we offer more details on the web example? Or cvs.texi(,13188) @c point the user at how to figure it out? This text cvs.texi(,13189) @c strikes me as sufficient for someone who already has cvs.texi(,13190) @c some idea of what we mean but not enough for the naive cvs.texi(,13191) @c user/sysadmin to understand it and set it up. cvs.texi(,13192) cvs.texi(,13193) The way to do this is by having loginfo invoke cvs.texi(,13194) @code{cvs update}. Doing so in the naive way will cvs.texi(,13195) cause a problem with locks, so the @code{cvs update} cvs.texi(,13196) must be run in the background. cvs.texi(,13197) @c Should we try to describe the problem with locks? cvs.texi(,13198) @c It seems like a digression for someone who just cvs.texi(,13199) @c wants to know how to make it work. cvs.texi(,13200) @c Another choice which might work for a single file cvs.texi(,13201) @c is to use "cvs -n update -p" which doesn't take cvs.texi(,13202) @c out locks (I think) but I don't see many advantages cvs.texi(,13203) @c of that and we might as well document something which cvs.texi(,13204) @c works for multiple files. cvs.texi(,13205) Here is an example for unix (this should all be on one line): cvs.texi(,13206) cvs.texi(,13207) @example cvs.texi(,13208) ^cyclic-pages (date; cat; (sleep 2; cd /u/www/local-docs; cvs.texi(,13209) cvs -q update -d) &) >> $CVSROOT/CVSROOT/updatelog 2>&1 cvs.texi(,13210) @end example cvs.texi(,13211) cvs.texi(,13212) This will cause checkins to repository directories cvs.texi(,13213) starting with @code{cyclic-pages} to update the checked cvs.texi(,13214) out tree in @file{/u/www/local-docs}. cvs.texi(,13215) @c More info on some of the details? The "sleep 2" is cvs.texi(,13216) @c so if we are lucky the lock will be gone by the time cvs.texi(,13217) @c we start and we can wait 2 seconds instead of 30. cvs.texi(,13218) cvs.texi(,13219) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,13220) @node rcsinfo cvs.texi(,13221) @appendixsec Rcsinfo cvs.texi(,13222) @cindex rcsinfo (admin file) cvs.texi(,13223) @cindex Form for log message cvs.texi(,13224) @cindex Log message template cvs.texi(,13225) @cindex Template for log message cvs.texi(,13226) cvs.texi(,13227) The @file{rcsinfo} file can be used to specify a form to cvs.texi(,13228) edit when filling out the commit log. The cvs.texi(,13229) @file{rcsinfo} file has a syntax similar to the cvs.texi(,13230) @file{verifymsg}, @file{commitinfo} and @file{loginfo} cvs.texi(,13231) files. @xref{syntax}. Unlike the other files the second cvs.texi(,13232) part is @emph{not} a command-line template. Instead, cvs.texi(,13233) the part after the regular expression should be a full pathname to cvs.texi(,13234) a file containing the log message template. cvs.texi(,13235) cvs.texi(,13236) If the repository name does not match any of the cvs.texi(,13237) regular expressions in this file, the @samp{DEFAULT} cvs.texi(,13238) line is used, if it is specified. cvs.texi(,13239) cvs.texi(,13240) All occurrences of the name @samp{ALL} appearing as a cvs.texi(,13241) regular expression are used in addition to the first cvs.texi(,13242) matching regular expression or @samp{DEFAULT}. cvs.texi(,13243) cvs.texi(,13244) @c FIXME: should be offering advice, somewhere around cvs.texi(,13245) @c here, about where to put the template file. The cvs.texi(,13246) @c verifymsg example uses /usr/cvssupport but doesn't cvs.texi(,13247) @c say anything about what that directory is for or cvs.texi(,13248) @c whether it is hardwired into CVS or who creates cvs.texi(,13249) @c it or anything. In particular we should say cvs.texi(,13250) @c how to version control the template file. A cvs.texi(,13251) @c probably better answer than the /usr/cvssupport cvs.texi(,13252) @c stuff is to use checkoutlist (with xref to the cvs.texi(,13253) @c checkoutlist doc). cvs.texi(,13254) @c Also I am starting to see a connection between cvs.texi(,13255) @c this and the Keeping a checked out copy node. cvs.texi(,13256) @c Probably want to say something about that. cvs.texi(,13257) The log message template will be used as a default log cvs.texi(,13258) message. If you specify a log message with @samp{cvs cvs.texi(,13259) commit -m @var{message}} or @samp{cvs commit -f cvs.texi(,13260) @var{file}} that log message will override the cvs.texi(,13261) template. cvs.texi(,13262) cvs.texi(,13263) @xref{verifymsg}, for an example @file{rcsinfo} cvs.texi(,13264) file. cvs.texi(,13265) cvs.texi(,13266) When @sc{cvs} is accessing a remote repository, cvs.texi(,13267) the contents of @file{rcsinfo} at the time a directory cvs.texi(,13268) is first checked out will specify a template. This cvs.texi(,13269) template will be updated on all @samp{cvs update} cvs.texi(,13270) commands. It will also be added to new directories cvs.texi(,13271) added with a @samp{cvs add new-directry} command. cvs.texi(,13272) In versions of @sc{cvs} prior to version 1.12, the cvs.texi(,13273) @file{CVS/Template} file was not updated. If the cvs.texi(,13274) @sc{cvs} server is at version 1.12 or higher an older cvs.texi(,13275) client may be used and the @file{CVS/Template} will cvs.texi(,13276) be updated from the server. cvs.texi(,13277) cvs.texi(,13278) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,13279) @node cvsignore cvs.texi(,13280) @appendixsec Ignoring files via cvsignore cvs.texi(,13281) @cindex cvsignore (admin file), global cvs.texi(,13282) @cindex Global cvsignore cvs.texi(,13283) @cindex Ignoring files cvs.texi(,13284) @c -- This chapter should maybe be moved to the cvs.texi(,13285) @c tutorial part of the manual? cvs.texi(,13286) cvs.texi(,13287) There are certain file names that frequently occur cvs.texi(,13288) inside your working copy, but that you don't want to cvs.texi(,13289) put under @sc{cvs} control. Examples are all the object cvs.texi(,13290) files that you get while you compile your sources. cvs.texi(,13291) Normally, when you run @samp{cvs update}, it prints a cvs.texi(,13292) line for each file it encounters that it doesn't know cvs.texi(,13293) about (@pxref{update output}). cvs.texi(,13294) cvs.texi(,13295) @sc{cvs} has a list of files (or sh(1) file name patterns) cvs.texi(,13296) that it should ignore while running @code{update}, cvs.texi(,13297) @code{import} and @code{release}. cvs.texi(,13298) @c -- Are those the only three commands affected? cvs.texi(,13299) This list is constructed in the following way. cvs.texi(,13300) cvs.texi(,13301) @itemize @bullet cvs.texi(,13302) @item cvs.texi(,13303) The list is initialized to include certain file name cvs.texi(,13304) patterns: names associated with @sc{cvs} cvs.texi(,13305) administration, or with other common source control cvs.texi(,13306) systems; common names for patch files, object files, cvs.texi(,13307) archive files, and editor backup files; and other names cvs.texi(,13308) that are usually artifacts of assorted utilities. cvs.texi(,13309) Currently, the default list of ignored file name cvs.texi(,13310) patterns is: cvs.texi(,13311) cvs.texi(,13312) @cindex Ignored files cvs.texi(,13313) @cindex Automatically ignored files cvs.texi(,13314) @example cvs.texi(,13315) RCS SCCS CVS CVS.adm cvs.texi(,13316) RCSLOG cvslog.* cvs.texi(,13317) tags TAGS cvs.texi(,13318) .make.state .nse_depinfo cvs.texi(,13319) *~ #* .#* ,* _$* *$ cvs.texi(,13320) *.old *.bak *.BAK *.orig *.rej .del-* cvs.texi(,13321) *.a *.olb *.o *.obj *.so *.exe cvs.texi(,13322) *.Z *.elc *.ln cvs.texi(,13323) core cvs.texi(,13324) @end example cvs.texi(,13325) cvs.texi(,13326) @item cvs.texi(,13327) The per-repository list in cvs.texi(,13328) @file{$CVSROOT/CVSROOT/cvsignore} is appended to cvs.texi(,13329) the list, if that file exists. cvs.texi(,13330) cvs.texi(,13331) @item cvs.texi(,13332) The per-user list in @file{.cvsignore} in your home cvs.texi(,13333) directory is appended to the list, if it exists. cvs.texi(,13334) cvs.texi(,13335) @item cvs.texi(,13336) Any entries in the environment variable cvs.texi(,13337) @code{$CVSIGNORE} is appended to the list. cvs.texi(,13338) cvs.texi(,13339) @item cvs.texi(,13340) Any @samp{-I} options given to @sc{cvs} is appended. cvs.texi(,13341) cvs.texi(,13342) @item cvs.texi(,13343) As @sc{cvs} traverses through your directories, the contents cvs.texi(,13344) of any @file{.cvsignore} will be appended to the list. cvs.texi(,13345) The patterns found in @file{.cvsignore} are only valid cvs.texi(,13346) for the directory that contains them, not for cvs.texi(,13347) any sub-directories. cvs.texi(,13348) @end itemize cvs.texi(,13349) cvs.texi(,13350) In any of the 5 places listed above, a single cvs.texi(,13351) exclamation mark (@samp{!}) clears the ignore list. cvs.texi(,13352) This can be used if you want to store any file which cvs.texi(,13353) normally is ignored by @sc{cvs}. cvs.texi(,13354) cvs.texi(,13355) Specifying @samp{-I !} to @code{cvs import} will import cvs.texi(,13356) everything, which is generally what you want to do if cvs.texi(,13357) you are importing files from a pristine distribution or cvs.texi(,13358) any other source which is known to not contain any cvs.texi(,13359) extraneous files. However, looking at the rules above cvs.texi(,13360) you will see there is a fly in the ointment; if the cvs.texi(,13361) distribution contains any @file{.cvsignore} files, then cvs.texi(,13362) the patterns from those files will be processed even if cvs.texi(,13363) @samp{-I !} is specified. The only workaround is to cvs.texi(,13364) remove the @file{.cvsignore} files in order to do the cvs.texi(,13365) import. Because this is awkward, in the future cvs.texi(,13366) @samp{-I !} might be modified to override cvs.texi(,13367) @file{.cvsignore} files in each directory. cvs.texi(,13368) cvs.texi(,13369) Note that the syntax of the ignore files consists of a cvs.texi(,13370) series of lines, each of which contains a space cvs.texi(,13371) separated list of filenames. This offers no clean way cvs.texi(,13372) to specify filenames which contain spaces, but you can cvs.texi(,13373) use a workaround like @file{foo?bar} to match a file cvs.texi(,13374) named @file{foo bar} (it also matches @file{fooxbar} cvs.texi(,13375) and the like). Also note that there is currently no cvs.texi(,13376) way to specify comments. cvs.texi(,13377) @c FIXCVS? I don't _like_ this syntax at all, but cvs.texi(,13378) @c changing it raises all the usual compatibility cvs.texi(,13379) @c issues and I'm also not sure what to change it to. cvs.texi(,13380) cvs.texi(,13381) @node checkoutlist cvs.texi(,13382) @appendixsec The checkoutlist file cvs.texi(,13383) @cindex checkoutlist cvs.texi(,13384) cvs.texi(,13385) It may be helpful to use @sc{cvs} to maintain your own cvs.texi(,13386) files in the @file{CVSROOT} directory. For example, cvs.texi(,13387) suppose that you have a script @file{logcommit.pl} cvs.texi(,13388) which you run by including the following line in the cvs.texi(,13389) @file{commitinfo} administrative file: cvs.texi(,13390) cvs.texi(,13391) @example cvs.texi(,13392) ALL $CVSROOT/CVSROOT/logcommit.pl cvs.texi(,13393) @end example cvs.texi(,13394) cvs.texi(,13395) To maintain @file{logcommit.pl} with @sc{cvs} you would cvs.texi(,13396) add the following line to the @file{checkoutlist} cvs.texi(,13397) administrative file: cvs.texi(,13398) cvs.texi(,13399) @example cvs.texi(,13400) logcommit.pl cvs.texi(,13401) @end example cvs.texi(,13402) cvs.texi(,13403) The format of @file{checkoutlist} is one line for each cvs.texi(,13404) file that you want to maintain using @sc{cvs}, giving cvs.texi(,13405) the name of the file. cvs.texi(,13406) cvs.texi(,13407) After setting up @file{checkoutlist} in this fashion, cvs.texi(,13408) the files listed there will function just like cvs.texi(,13409) @sc{cvs}'s built-in administrative files. For example, cvs.texi(,13410) when checking in one of the files you should get a cvs.texi(,13411) message such as: cvs.texi(,13412) cvs.texi(,13413) @example cvs.texi(,13414) cvs commit: Rebuilding administrative file database cvs.texi(,13415) @end example cvs.texi(,13416) cvs.texi(,13417) @noindent cvs.texi(,13418) and the checked out copy in the @file{CVSROOT} cvs.texi(,13419) directory should be updated. cvs.texi(,13420) cvs.texi(,13421) Note that listing @file{passwd} (@pxref{Password cvs.texi(,13422) authentication server}) in @file{checkoutlist} is not cvs.texi(,13423) recommended for security reasons. cvs.texi(,13424) cvs.texi(,13425) For information about keeping a checkout out copy in a cvs.texi(,13426) more general context than the one provided by cvs.texi(,13427) @file{checkoutlist}, see @ref{Keeping a checked out cvs.texi(,13428) copy}. cvs.texi(,13429) cvs.texi(,13430) @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cvs.texi(,13431) @node history file cvs.texi(,13432) @appendixsec The history file cvs.texi(,13433) @cindex History file cvs.texi(,13434) @cindex Log information, saving cvs.texi(,13435) cvs.texi(,13436) The file @file{$CVSROOT/CVSROOT/history} is used cvs.texi(,13437) to log information for the @code{history} command cvs.texi(,13438) (@pxref{history}). This file must be created to turn cvs.texi(,13439) on logging. This is done automatically if the cvs.texi(,13440) @code{cvs init} command is used to set up the cvs.texi(,13441) repository (@pxref{Creating a repository}). cvs.texi(,13442) cvs.texi(,13443) The file format of the @file{history} file is cvs.texi(,13444) documented only in comments in the @sc{cvs} source cvs.texi(,13445) code, but generally programs should use the @code{cvs cvs.texi(,13446) history} command to access it anyway, in case the cvs.texi(,13447) format changes with future releases of @sc{cvs}. cvs.texi(,13448) cvs.texi(,13449) @node Variables cvs.texi(,13450) @appendixsec Expansions in administrative files cvs.texi(,13451) @cindex Internal variables cvs.texi(,13452) @cindex Variables cvs.texi(,13453) cvs.texi(,13454) Sometimes in writing an administrative file, you might cvs.texi(,13455) want the file to be able to know various things based cvs.texi(,13456) on environment @sc{cvs} is running in. There are cvs.texi(,13457) several mechanisms to do that. cvs.texi(,13458) cvs.texi(,13459) To find the home directory of the user running @sc{cvs} cvs.texi(,13460) (from the @code{HOME} environment variable), use cvs.texi(,13461) @samp{~} followed by @samp{/} or the end of the line. cvs.texi(,13462) Likewise for the home directory of @var{user}, use cvs.texi(,13463) @samp{~@var{user}}. These variables are expanded on cvs.texi(,13464) the server machine, and don't get any reasonable cvs.texi(,13465) expansion if pserver (@pxref{Password authenticated}) cvs.texi(,13466) is in use; therefore user variables (see below) may be cvs.texi(,13467) a better choice to customize behavior based on the user cvs.texi(,13468) running @sc{cvs}. cvs.texi(,13469) @c Based on these limitations, should we deprecate ~? cvs.texi(,13470) @c What is it good for? Are people using it? cvs.texi(,13471) cvs.texi(,13472) One may want to know about various pieces of cvs.texi(,13473) information internal to @sc{cvs}. A @sc{cvs} internal cvs.texi(,13474) variable has the syntax @code{$@{@var{variable}@}}, cvs.texi(,13475) where @var{variable} starts with a letter and consists cvs.texi(,13476) of alphanumeric characters and @samp{_}. If the cvs.texi(,13477) character following @var{variable} is a cvs.texi(,13478) non-alphanumeric character other than @samp{_}, the cvs.texi(,13479) @samp{@{} and @samp{@}} can be omitted. The @sc{cvs} cvs.texi(,13480) internal variables are: cvs.texi(,13481) cvs.texi(,13482) @table @code cvs.texi(,13483) @item CVSROOT cvs.texi(,13484) @cindex CVSROOT, internal variable cvs.texi(,13485) This is the absolute path to the current @sc{cvs} root directory. cvs.texi(,13486) @xref{Repository}, for a description of the various cvs.texi(,13487) ways to specify this, but note that the internal cvs.texi(,13488) variable contains just the directory and not any cvs.texi(,13489) of the access method information. cvs.texi(,13490) cvs.texi(,13491) @item RCSBIN cvs.texi(,13492) @cindex RCSBIN, internal variable cvs.texi(,13493) In @sc{cvs} 1.9.18 and older, this specified the cvs.texi(,13494) directory where @sc{cvs} was looking for @sc{rcs} cvs.texi(,13495) programs. Because @sc{cvs} no longer runs @sc{rcs} cvs.texi(,13496) programs, specifying this internal variable is now an cvs.texi(,13497) error. cvs.texi(,13498) cvs.texi(,13499) @item CVSEDITOR cvs.texi(,13500) @cindex CVSEDITOR, internal variable cvs.texi(,13501) @itemx EDITOR cvs.texi(,13502) @cindex EDITOR, internal variable cvs.texi(,13503) @itemx VISUAL cvs.texi(,13504) @cindex VISUAL, internal variable cvs.texi(,13505) These all expand to the same value, which is the editor cvs.texi(,13506) that @sc{cvs} is using. @xref{Global options}, for how cvs.texi(,13507) to specify this. cvs.texi(,13508) cvs.texi(,13509) @item USER cvs.texi(,13510) @cindex USER, internal variable cvs.texi(,13511) Username of the user running @sc{cvs} (on the @sc{cvs} cvs.texi(,13512) server machine). cvs.texi(,13513) When using pserver, this is the user specified in the repository cvs.texi(,13514) specification which need not be the same as the username the cvs.texi(,13515) server is running as (@pxref{Password authentication server}). cvs.texi(,13516) Do not confuse this with the environment variable of the same name. cvs.texi(,13517) @end table cvs.texi(,13518) cvs.texi(,13519) If you want to pass a value to the administrative files cvs.texi(,13520) which the user who is running @sc{cvs} can specify, cvs.texi(,13521) use a user variable. cvs.texi(,13522) @cindex User variables cvs.texi(,13523) To expand a user variable, the cvs.texi(,13524) administrative file contains cvs.texi(,13525) @code{$@{=@var{variable}@}}. To set a user variable, cvs.texi(,13526) specify the global option @samp{-s} to @sc{cvs}, with cvs.texi(,13527) argument @code{@var{variable}=@var{value}}. It may be cvs.texi(,13528) particularly useful to specify this option via cvs.texi(,13529) @file{.cvsrc} (@pxref{~/.cvsrc}). cvs.texi(,13530) cvs.texi(,13531) For example, if you want the administrative file to cvs.texi(,13532) refer to a test directory you might create a user cvs.texi(,13533) variable @code{TESTDIR}. Then if @sc{cvs} is invoked cvs.texi(,13534) as cvs.texi(,13535) cvs.texi(,13536) @example cvs.texi(,13537) cvs -s TESTDIR=/work/local/tests cvs.texi(,13538) @end example cvs.texi(,13539) cvs.texi(,13540) @noindent cvs.texi(,13541) and the cvs.texi(,13542) administrative file contains @code{sh cvs.texi(,13543) $@{=TESTDIR@}/runtests}, then that string is expanded cvs.texi(,13544) to @code{sh /work/local/tests/runtests}. cvs.texi(,13545) cvs.texi(,13546) All other strings containing @samp{$} are reserved; cvs.texi(,13547) there is no way to quote a @samp{$} character so that cvs.texi(,13548) @samp{$} represents itself. cvs.texi(,13549) cvs.texi(,13550) Environment variables passed to administrative files are: cvs.texi(,13551) cvs.texi(,13552) @table @code cvs.texi(,13553) @cindex environment variables, passed to administrative files cvs.texi(,13554) cvs.texi(,13555) @item CVS_USER cvs.texi(,13556) @cindex CVS_USER, environment variable cvs.texi(,13557) The @sc{cvs}-specific username provided by the user, if it cvs.texi(,13558) can be provided (currently just for the pserver access cvs.texi(,13559) method), and to the empty string otherwise. (@code{CVS_USER} cvs.texi(,13560) and @code{USER} may differ when @file{$CVSROOT/CVSROOT/passwd} cvs.texi(,13561) is used to map @sc{cvs} usernames to system usernames.) cvs.texi(,13562) cvs.texi(,13563) @item LOGNAME cvs.texi(,13564) @cindex LOGNAME, environment variable cvs.texi(,13565) The username of the system user. cvs.texi(,13566) cvs.texi(,13567) @item USER cvs.texi(,13568) @cindex USER, environment variable cvs.texi(,13569) Same as @code{LOGNAME}. cvs.texi(,13570) Do not confuse this with the internal variable of the same name. cvs.texi(,13571) @end table cvs.texi(,13572) cvs.texi(,13573) @node config cvs.texi(,13574) @appendixsec The CVSROOT/config configuration file cvs.texi(,13575) cvs.texi(,13576) @cindex config, in CVSROOT cvs.texi(,13577) @cindex CVSROOT/config cvs.texi(,13578) cvs.texi(,13579) The administrative file @file{config} contains various cvs.texi(,13580) miscellaneous settings which affect the behavior of cvs.texi(,13581) @sc{cvs}. The syntax is slightly different from the cvs.texi(,13582) other administrative files. Variables are not cvs.texi(,13583) expanded. Lines which start with @samp{#} are cvs.texi(,13584) considered comments. cvs.texi(,13585) @c FIXME: where do we define comments for the other cvs.texi(,13586) @c administrative files. cvs.texi(,13587) Other lines consist of a keyword, @samp{=}, and a cvs.texi(,13588) value. Note that this syntax is very strict. cvs.texi(,13589) Extraneous spaces or tabs are not permitted. cvs.texi(,13590) @c See comments in parseinfo.c:parse_config for more cvs.texi(,13591) @c discussion of this strictness. cvs.texi(,13592) cvs.texi(,13593) Currently defined keywords are: cvs.texi(,13594) cvs.texi(,13595) @table @code cvs.texi(,13596) @cindex RCSBIN, in CVSROOT/config cvs.texi(,13597) @item RCSBIN=@var{bindir} cvs.texi(,13598) For @sc{cvs} 1.9.12 through 1.9.18, this setting told cvs.texi(,13599) @sc{cvs} to look for @sc{rcs} programs in the cvs.texi(,13600) @var{bindir} directory. Current versions of @sc{cvs} cvs.texi(,13601) do not run @sc{rcs} programs; for compatibility this cvs.texi(,13602) setting is accepted, but it does nothing. cvs.texi(,13603) cvs.texi(,13604) @cindex SystemAuth, in CVSROOT/config cvs.texi(,13605) @item SystemAuth=@var{value} cvs.texi(,13606) If @var{value} is @samp{yes}, then pserver should check cvs.texi(,13607) for users in the system's user database if not found in cvs.texi(,13608) @file{CVSROOT/passwd}. If it is @samp{no}, then all cvs.texi(,13609) pserver users must exist in @file{CVSROOT/passwd}. cvs.texi(,13610) The default is @samp{yes}. For more on pserver, see cvs.texi(,13611) @ref{Password authenticated}. cvs.texi(,13612) cvs.texi(,13622) cvs.texi(,13623) @cindex TopLevelAdmin, in CVSROOT/config cvs.texi(,13624) @item TopLevelAdmin=@var{value} cvs.texi(,13625) Modify the @samp{checkout} command to create a cvs.texi(,13626) @samp{CVS} directory at the top level of the new cvs.texi(,13627) working directory, in addition to @samp{CVS} cvs.texi(,13628) directories created within checked-out directories. cvs.texi(,13629) The default value is @samp{no}. cvs.texi(,13630) cvs.texi(,13631) This option is useful if you find yourself performing cvs.texi(,13632) many commands at the top level of your working cvs.texi(,13633) directory, rather than in one of the checked out cvs.texi(,13634) subdirectories. The @file{CVS} directory created there cvs.texi(,13635) will mean you don't have to specify @code{CVSROOT} for cvs.texi(,13636) each command. It also provides a place for the cvs.texi(,13637) @file{CVS/Template} file (@pxref{Working directory cvs.texi(,13638) storage}). cvs.texi(,13639) cvs.texi(,13640) @cindex LockDir, in CVSROOT/config cvs.texi(,13641) @item LockDir=@var{directory} cvs.texi(,13642) Put @sc{cvs} lock files in @var{directory} rather than cvs.texi(,13643) directly in the repository. This is useful if you want cvs.texi(,13644) to let users read from the repository while giving them cvs.texi(,13645) write access only to @var{directory}, not to the cvs.texi(,13646) repository. cvs.texi(,13647) It can also be used to put the locks on a very fast cvs.texi(,13648) in-memory file system to speed up locking and unlocking cvs.texi(,13649) the repository. cvs.texi(,13650) You need to create @var{directory}, but cvs.texi(,13651) @sc{cvs} will create subdirectories of @var{directory} as it cvs.texi(,13652) needs them. For information on @sc{cvs} locks, see cvs.texi(,13653) @ref{Concurrency}. cvs.texi(,13654) cvs.texi(,13655) @c Mention this in Compatibility section? cvs.texi(,13656) Before enabling the LockDir option, make sure that you cvs.texi(,13657) have tracked down and removed any copies of @sc{cvs} 1.9 or cvs.texi(,13658) older. Such versions neither support LockDir, nor will cvs.texi(,13659) give an error indicating that they don't support it. cvs.texi(,13660) The result, if this is allowed to happen, is that some cvs.texi(,13661) @sc{cvs} users will put the locks one place, and others will cvs.texi(,13662) put them another place, and therefore the repository cvs.texi(,13663) could become corrupted. @sc{cvs} 1.10 does not support cvs.texi(,13664) LockDir but it will print a warning if run on a cvs.texi(,13665) repository with LockDir enabled. cvs.texi(,13666) cvs.texi(,13667) @cindex LogHistory, in CVSROOT/config cvs.texi(,13668) @item LogHistory=@var{value} cvs.texi(,13669) Control what is logged to the @file{CVSROOT/history} file (@pxref{history}). cvs.texi(,13670) Default of @samp{TOEFWUCGMAR} (or simply @samp{all}) will log cvs.texi(,13671) all transactions. Any subset of the default is cvs.texi(,13672) legal. (For example, to only log transactions that modify the cvs.texi(,13673) @file{*,v} files, use @samp{LogHistory=TMAR}.) cvs.texi(,13674) cvs.texi(,13675) @cindex RereadLogAfterVerify, in CVSROOT/config cvs.texi(,13676) @cindex @file{verifymsg}, changing the log message cvs.texi(,13677) @item RereadLogAfterVerify=@var{value} cvs.texi(,13678) Modify the @samp{commit} command such that CVS will reread the cvs.texi(,13679) log message after running the program specified by @file{verifymsg}. cvs.texi(,13680) @var{value} may be one of @samp{yes} or @samp{always}, indicating that cvs.texi(,13681) the log message should always be reread; @samp{no} cvs.texi(,13682) or @samp{never}, indicating that it should never be cvs.texi(,13683) reread; or @var{value} may be @samp{stat}, indicating cvs.texi(,13684) that the file should be checked with the filesystem cvs.texi(,13685) @samp{stat()} function to see if it has changed (see warning below) cvs.texi(,13686) before rereading. The default value is @samp{always}. cvs.texi(,13687) cvs.texi(,13688) @strong{Note: the `stat' mode can cause CVS to pause for up to cvs.texi(,13689) one extra second per directory committed. This can be less IO and cvs.texi(,13690) CPU intensive but is not recommended for use with large repositories} cvs.texi(,13691) cvs.texi(,13692) @xref{verifymsg}, for more information on how verifymsg cvs.texi(,13693) may be used. cvs.texi(,13694) cvs.texi(,13695) @cindex UserAdminOptions, in CVSROOT/config cvs.texi(,13696) @item UserAdminOptions=@var{value} cvs.texi(,13697) Control what options will be allowed with the @code{cvs admin} cvs.texi(,13698) command (@pxref{admin}) for users not in the @code{cvsadmin} group. cvs.texi(,13699) The @var{value} string is a list of single character options cvs.texi(,13700) which should be allowed. If a user who is not a member of the cvs.texi(,13701) @code{cvsadmin} group tries to execute any @code{cvs admin} cvs.texi(,13702) option which is not listed they will will receive an error message cvs.texi(,13703) reporting that the option is restricted. cvs.texi(,13704) cvs.texi(,13705) If no @code{cvsadmin} group exists on the server, @sc{cvs} will cvs.texi(,13706) ignore the @code{UserAdminOptions} keyword (@pxref{admin}). cvs.texi(,13707) cvs.texi(,13708) When not specified, @code{UserAdminOptions} defaults to cvs.texi(,13709) @samp{k}. In other words, it defaults to allowing cvs.texi(,13710) users outside of the @code{cvsadmin} group to use the cvs.texi(,13711) @code{cvs admin} command only to change the default keyword cvs.texi(,13712) expansion mode for files. cvs.texi(,13713) cvs.texi(,13714) As an example, to restrict users not in the @code{cvsadmin} cvs.texi(,13715) group to using @code{cvs admin} to change the default keyword cvs.texi(,13716) substitution mode, lock revisions, unlock revisions, and cvs.texi(,13717) replace the log message, use @samp{UserAdminOptions=klum}. cvs.texi(,13718) @end table cvs.texi(,13719) cvs.texi(,13720) @c --------------------------------------------------------------------- cvs.texi(,13721) @node Environment variables cvs.texi(,13722) @appendix All environment variables which affect CVS cvs.texi(,13723) @cindex Environment variables cvs.texi(,13724) @cindex Reference manual for variables cvs.texi(,13725) cvs.texi(,13726) This is a complete list of all environment variables cvs.texi(,13727) that affect @sc{cvs}. cvs.texi(,13728) cvs.texi(,13729) @table @code cvs.texi(,13730) @cindex CVSIGNORE, environment variable cvs.texi(,13731) @item $CVSIGNORE cvs.texi(,13732) A whitespace-separated list of file name patterns that cvs.texi(,13733) @sc{cvs} should ignore. @xref{cvsignore}. cvs.texi(,13734) cvs.texi(,13735) @cindex CVSWRAPPERS, environment variable cvs.texi(,13736) @item $CVSWRAPPERS cvs.texi(,13737) A whitespace-separated list of file name patterns that cvs.texi(,13738) @sc{cvs} should treat as wrappers. @xref{Wrappers}. cvs.texi(,13739) cvs.texi(,13740) @cindex CVSREAD, environment variable cvs.texi(,13741) @cindex Read-only files, and CVSREAD cvs.texi(,13742) @item $CVSREAD cvs.texi(,13743) If this is set, @code{checkout} and @code{update} will cvs.texi(,13744) try hard to make the files in your working directory cvs.texi(,13745) read-only. When this is not set, the default behavior cvs.texi(,13746) is to permit modification of your working files. cvs.texi(,13747) cvs.texi(,13748) @cindex CVSREADONLYFS, environment variable cvs.texi(,13749) @item $CVSREADONLYFS cvs.texi(,13750) Turns on read-only repository mode. This allows one to cvs.texi(,13751) check out from a read-only repository, such as within cvs.texi(,13752) an anoncvs server, or from a CDROM repository. cvs.texi(,13753) cvs.texi(,13754) It has the same effect as if the @samp{-R} command-line cvs.texi(,13755) option is used. This can also allow the use of cvs.texi(,13756) read-only NFS repositories. cvs.texi(,13757) cvs.texi(,13758) @item $CVSUMASK cvs.texi(,13759) Controls permissions of files in the repository. See cvs.texi(,13760) @ref{File permissions}. cvs.texi(,13761) cvs.texi(,13762) @item $CVSROOT cvs.texi(,13763) Should contain the full pathname to the root of the @sc{cvs} cvs.texi(,13764) source repository (where the @sc{rcs} files are cvs.texi(,13765) kept). This information must be available to @sc{cvs} for cvs.texi(,13766) most commands to execute; if @code{$CVSROOT} is not set, cvs.texi(,13767) or if you wish to override it for one invocation, you cvs.texi(,13768) can supply it on the command line: @samp{cvs -d cvsroot cvs.texi(,13769) cvs_command@dots{}} Once you have checked out a working cvs.texi(,13770) directory, @sc{cvs} stores the appropriate root (in cvs.texi(,13771) the file @file{CVS/Root}), so normally you only need to cvs.texi(,13772) worry about this when initially checking out a working cvs.texi(,13773) directory. cvs.texi(,13774) cvs.texi(,13775) @item $CVSEDITOR cvs.texi(,13776) @cindex CVSEDITOR, environment variable cvs.texi(,13777) @itemx $EDITOR cvs.texi(,13778) @cindex EDITOR, environment variable cvs.texi(,13779) @itemx $VISUAL cvs.texi(,13780) @cindex VISUAL, environment variable cvs.texi(,13781) Specifies the program to use for recording log messages cvs.texi(,13782) during commit. @code{$CVSEDITOR} overrides cvs.texi(,13783) @code{$EDITOR}, which overrides @code{$VISUAL}. cvs.texi(,13784) See @ref{Committing your changes} for more or cvs.texi(,13785) @ref{Global options} for alternative ways of specifying a cvs.texi(,13786) log editor. cvs.texi(,13787) cvs.texi(,13788) @cindex PATH, environment variable cvs.texi(,13789) @item $PATH cvs.texi(,13790) If @code{$RCSBIN} is not set, and no path is compiled cvs.texi(,13791) into @sc{cvs}, it will use @code{$PATH} to try to find all cvs.texi(,13792) programs it uses. cvs.texi(,13793) cvs.texi(,13794) @cindex HOME, environment variable cvs.texi(,13795) @item $HOME cvs.texi(,13796) @cindex HOMEPATH, environment variable cvs.texi(,13797) @item $HOMEPATH cvs.texi(,13798) @cindex HOMEDRIVE, environment variable cvs.texi(,13799) @item $HOMEDRIVE cvs.texi(,13800) Used to locate the directory where the @file{.cvsrc} cvs.texi(,13801) file, and other such files, are searched. On Unix, @sc{cvs} cvs.texi(,13802) just checks for @code{HOME}. On Windows NT, the system will cvs.texi(,13803) set @code{HOMEDRIVE}, for example to @samp{d:} and @code{HOMEPATH}, cvs.texi(,13804) for example to @file{\joe}. On Windows 95, you'll cvs.texi(,13805) probably need to set @code{HOMEDRIVE} and @code{HOMEPATH} yourself. cvs.texi(,13806) @c We are being vague about whether HOME works on cvs.texi(,13807) @c Windows; see long comment in windows-NT/filesubr.c. cvs.texi(,13808) cvs.texi(,13809) @cindex CVS_RSH, environment variable cvs.texi(,13810) @item $CVS_RSH cvs.texi(,13811) Specifies the external program which @sc{cvs} connects with, cvs.texi(,13812) when @code{:ext:} access method is specified. cvs.texi(,13813) @pxref{Connecting via rsh}. cvs.texi(,13814) cvs.texi(,13815) @item $CVS_SERVER cvs.texi(,13816) Used in client-server mode when accessing a remote cvs.texi(,13817) repository using @sc{rsh}. It specifies the name of cvs.texi(,13818) the program to start on the server side (and any cvs.texi(,13819) necessary arguments) when accessing a remote repository cvs.texi(,13820) using the @code{:ext:}, @code{:fork:}, or @code{:server:} access methods. cvs.texi(,13821) The default value for @code{:ext:} and @code{:server:} is @code{cvs}; cvs.texi(,13822) the default value for @code{:fork:} is the name used to run the client. cvs.texi(,13823) @pxref{Connecting via rsh} cvs.texi(,13824) cvs.texi(,13825) @item $CVS_PASSFILE cvs.texi(,13826) Used in client-server mode when accessing the @code{cvs cvs.texi(,13827) login server}. Default value is @file{$HOME/.cvspass}. cvs.texi(,13828) @pxref{Password authentication client} cvs.texi(,13829) cvs.texi(,13830) @item $CVS_CLIENT_PORT cvs.texi(,13831) Used in client-server mode to set the port to use when accessing the server cvs.texi(,13832) via Kerberos, GSSAPI, or @sc{cvs}'s password authentication protocol cvs.texi(,13833) if the port is not specified in the CVSROOT. cvs.texi(,13834) @pxref{Remote repositories} cvs.texi(,13835) cvs.texi(,13836) @cindex CVS_RCMD_PORT, environment variable cvs.texi(,13837) @item $CVS_RCMD_PORT cvs.texi(,13838) Used in client-server mode. If set, specifies the port cvs.texi(,13839) number to be used when accessing the @sc{rcmd} demon on cvs.texi(,13840) the server side. (Currently not used for Unix clients). cvs.texi(,13841) cvs.texi(,13842) @cindex CVS_CLIENT_LOG, environment variable cvs.texi(,13843) @item $CVS_CLIENT_LOG cvs.texi(,13844) Used for debugging only in client-server cvs.texi(,13845) mode. If set, everything sent to the server is logged cvs.texi(,13846) into @file{@code{$CVS_CLIENT_LOG}.in} and everything cvs.texi(,13847) sent from the server is logged into cvs.texi(,13848) @file{@code{$CVS_CLIENT_LOG}.out}. cvs.texi(,13849) cvs.texi(,13850) @cindex CVS_SERVER_SLEEP, environment variable cvs.texi(,13851) @item $CVS_SERVER_SLEEP cvs.texi(,13852) Used only for debugging the server side in cvs.texi(,13853) client-server mode. If set, delays the start of the cvs.texi(,13854) server child process the specified amount of cvs.texi(,13855) seconds so that you can attach to it with a debugger. cvs.texi(,13856) cvs.texi(,13857) @cindex CVS_IGNORE_REMOTE_ROOT, environment variable cvs.texi(,13858) @item $CVS_IGNORE_REMOTE_ROOT cvs.texi(,13859) For @sc{cvs} 1.10 and older, setting this variable cvs.texi(,13860) prevents @sc{cvs} from overwriting the @file{CVS/Root} cvs.texi(,13861) file when the @samp{-d} global option is specified. cvs.texi(,13862) Later versions of @sc{cvs} do not rewrite cvs.texi(,13863) @file{CVS/Root}, so @code{CVS_IGNORE_REMOTE_ROOT} has no cvs.texi(,13864) effect. cvs.texi(,13865) cvs.texi(,13866) @cindex CVS_LOCAL_BRANCH_NUM, environment variable cvs.texi(,13867) @item $CVS_LOCAL_BRANCH_NUM cvs.texi(,13868) Setting this variable allows some control over the cvs.texi(,13869) branch number that is assigned. This is specifically to cvs.texi(,13870) support the local commit feature of CVSup. If one sets cvs.texi(,13871) @code{CVS_LOCAL_BRANCH_NUM} to (say) 1000 then branches cvs.texi(,13872) the local repository, the revision numbers will look cvs.texi(,13873) like 1.66.1000.xx. There is almost a dead-set certainty cvs.texi(,13874) that there will be no conflicts with version numbers. cvs.texi(,13875) cvs.texi(,13876) @cindex COMSPEC, environment variable cvs.texi(,13877) @item $COMSPEC cvs.texi(,13878) Used under OS/2 only. It specifies the name of the cvs.texi(,13879) command interpreter and defaults to @sc{cmd.exe}. cvs.texi(,13880) cvs.texi(,13881) @cindex TMPDIR, environment variable cvs.texi(,13882) @item $TMPDIR cvs.texi(,13883) @cindex TMP, environment variable cvs.texi(,13884) @itemx $TMP cvs.texi(,13885) @cindex TEMP, environment variable cvs.texi(,13886) @itemx $TEMP cvs.texi(,13887) @cindex Temporary files, location of cvs.texi(,13888) @c This is quite nuts. We don't talk about tempnam cvs.texi(,13889) @c or mkstemp which we sometimes use. The discussion cvs.texi(,13890) @c of "Global options" is semi-incoherent. cvs.texi(,13891) @c I'm not even sure those are the only inaccuracies. cvs.texi(,13892) @c Furthermore, the conventions are cvs.texi(,13893) @c pretty crazy and they should be simplified. cvs.texi(,13894) Directory in which temporary files are located. cvs.texi(,13895) The @sc{cvs} server uses cvs.texi(,13896) @code{TMPDIR}. @xref{Global options}, for a cvs.texi(,13897) description of how to specify this. cvs.texi(,13898) Some parts of @sc{cvs} will always use @file{/tmp} (via cvs.texi(,13899) the @code{tmpnam} function provided by the system). cvs.texi(,13900) cvs.texi(,13901) On Windows NT, @code{TMP} is used (via the @code{_tempnam} cvs.texi(,13902) function provided by the system). cvs.texi(,13903) cvs.texi(,13904) The @code{patch} program which is used by the @sc{cvs} cvs.texi(,13905) client uses @code{TMPDIR}, and if it is not set, uses cvs.texi(,13906) @file{/tmp} (at least with GNU patch 2.1). Note that cvs.texi(,13907) if your server and client are both running @sc{cvs} cvs.texi(,13908) 1.9.10 or later, @sc{cvs} will not invoke an external cvs.texi(,13909) @code{patch} program. cvs.texi(,13910) cvs.texi(,13911) @cindex CVS_PID, environment variable cvs.texi(,13912) @item $CVS_PID cvs.texi(,13913) This is the process identification (aka pid) number of cvs.texi(,13914) the @sc{cvs} process. It is often useful in the cvs.texi(,13915) programs and/or scripts specified by the cvs.texi(,13916) @file{commitinfo}, @file{verifymsg}, @file{loginfo} cvs.texi(,13917) files. cvs.texi(,13918) @end table cvs.texi(,13919) cvs.texi(,13920) @node Compatibility cvs.texi(,13921) @appendix Compatibility between CVS Versions cvs.texi(,13922) cvs.texi(,13923) @cindex CVS, versions of cvs.texi(,13924) @cindex Versions, of CVS cvs.texi(,13925) @cindex Compatibility, between CVS versions cvs.texi(,13926) @c We don't mention versions older than CVS 1.3 cvs.texi(,13927) @c on the theory that it would clutter it up for the vast cvs.texi(,13928) @c majority of people, who don't have anything that old. cvs.texi(,13929) @c cvs.texi(,13930) The repository format is compatible going back to cvs.texi(,13931) @sc{cvs} 1.3. But see @ref{Watches Compatibility}, if cvs.texi(,13932) you have copies of @sc{cvs} 1.6 or older and you want cvs.texi(,13933) to use the optional developer communication features. cvs.texi(,13934) @c If you "cvs rm" and commit using 1.3, then you'll cvs.texi(,13935) @c want to run "rcs -sdead " on each of the cvs.texi(,13936) @c files in the Attic if you then want 1.5 and cvs.texi(,13937) @c later to recognize those files as dead (I think the cvs.texi(,13938) @c symptom if this is not done is that files reappear cvs.texi(,13939) @c in joins). (Wait: the above will work but really to cvs.texi(,13940) @c be strictly correct we should suggest checking cvs.texi(,13941) @c in a new revision rather than just changing the cvs.texi(,13942) @c state of the head revision, shouldn't we?). cvs.texi(,13943) @c The old convert.sh script was for this, but it never cvs.texi(,13944) @c did get updated to reflect use of the RCS "dead" cvs.texi(,13945) @c state. cvs.texi(,13946) @c Note: this is tricky to document without confusing cvs.texi(,13947) @c people--need to carefully say what CVS version we cvs.texi(,13948) @c are talking about and keep in mind the distinction cvs.texi(,13949) @c between a cvs.texi(,13950) @c repository created with 1.3 and on which one now cvs.texi(,13951) @c uses 1.5+, and a repository on which one wants to cvs.texi(,13952) @c use both versions side by side (e.g. during a cvs.texi(,13953) @c transition period). cvs.texi(,13954) @c Wait, can't CVS just detect the case in which a file cvs.texi(,13955) @c is in the Attic but the head revision is not dead? cvs.texi(,13956) @c Not sure whether this should produce a warning or cvs.texi(,13957) @c something, and probably needs further thought, but cvs.texi(,13958) @c it would appear that the situation can be detected. cvs.texi(,13959) @c cvs.texi(,13960) @c We might want to separate out the 1.3 compatibility cvs.texi(,13961) @c section (for repository & working directory) from the cvs.texi(,13962) @c rest--that might help avoid confusing people who cvs.texi(,13963) @c are upgrading (for example) from 1.6 to 1.8. cvs.texi(,13964) @c cvs.texi(,13965) @c A minor incompatibility is if a current version of CVS cvs.texi(,13966) @c puts "Nfoo" into CVS/Tag, then CVS 1.9 or older will cvs.texi(,13967) @c see this as if there is no tag. Seems to me this is cvs.texi(,13968) @c too obscure to mention. cvs.texi(,13969) cvs.texi(,13970) The working directory format is compatible going back cvs.texi(,13971) to @sc{cvs} 1.5. It did change between @sc{cvs} 1.3 cvs.texi(,13972) and @sc{cvs} 1.5. If you run @sc{cvs} 1.5 or newer on cvs.texi(,13973) a working directory checked out with @sc{cvs} 1.3, cvs.texi(,13974) @sc{cvs} will convert it, but to go back to @sc{cvs} cvs.texi(,13975) 1.3 you need to check out a new working directory with cvs.texi(,13976) @sc{cvs} 1.3. cvs.texi(,13977) cvs.texi(,13978) The remote protocol is interoperable going back to @sc{cvs} 1.5, but no cvs.texi(,13979) further (1.5 was the first official release with the remote protocol, cvs.texi(,13980) but some older versions might still be floating around). In many cvs.texi(,13981) cases you need to upgrade both the client and the server to take cvs.texi(,13982) advantage of new features and bugfixes, however. cvs.texi(,13983) cvs.texi(,13984) @c Perhaps should be saying something here about the cvs.texi(,13985) @c "D" lines in Entries (written by CVS 1.9; 1.8 and cvs.texi(,13986) @c older don't use them). These are supposed to be cvs.texi(,13987) @c compatible in both directions, but I'm not sure cvs.texi(,13988) @c they quite are 100%. One common gripe is if you cvs.texi(,13989) @c "rm -r" a directory and 1.9 gets confused, as it cvs.texi(,13990) @c still sees it in Entries. That one is fixed in cvs.texi(,13991) @c (say) 1.9.6. Someone else reported problems with cvs.texi(,13992) @c starting with a directory which was checked out with cvs.texi(,13993) @c an old version, and then using a new version, and cvs.texi(,13994) @c some "D" lines appeared, but not for every cvs.texi(,13995) @c directory, causing some directories to be skipped. cvs.texi(,13996) @c They weren't sure how to reproduce this, though. cvs.texi(,13997) cvs.texi(,13998) @c --------------------------------------------------------------------- cvs.texi(,13999) @node Troubleshooting cvs.texi(,14000) @appendix Troubleshooting cvs.texi(,14001) cvs.texi(,14002) If you are having trouble with @sc{cvs}, this appendix cvs.texi(,14003) may help. If there is a particular error message which cvs.texi(,14004) you are seeing, then you can look up the message cvs.texi(,14005) alphabetically. If not, you can look through the cvs.texi(,14006) section on other problems to see if your problem is cvs.texi(,14007) mentioned there. cvs.texi(,14008) cvs.texi(,14009) @menu cvs.texi(,14010) * Error messages:: Partial list of CVS errors cvs.texi(,14011) * Connection:: Trouble making a connection to a CVS server cvs.texi(,14012) * Other problems:: Problems not readily listed by error message cvs.texi(,14013) @end menu cvs.texi(,14014) cvs.texi(,14022) cvs.texi(,14023) @node Error messages cvs.texi(,14024) @appendixsec Partial list of error messages cvs.texi(,14025) cvs.texi(,14026) Here is a partial list of error messages that you may cvs.texi(,14027) see from @sc{cvs}. It is not a complete list---@sc{cvs} cvs.texi(,14028) is capable of printing many, many error messages, often cvs.texi(,14029) with parts of them supplied by the operating system, cvs.texi(,14030) but the intention is to list the common and/or cvs.texi(,14031) potentially confusing error messages. cvs.texi(,14032) cvs.texi(,14033) The messages are alphabetical, but introductory text cvs.texi(,14034) such as @samp{cvs update: } is not considered in cvs.texi(,14035) ordering them. cvs.texi(,14036) cvs.texi(,14037) In some cases the list includes messages printed by old cvs.texi(,14038) versions of @sc{cvs} (partly because users may not be cvs.texi(,14039) sure which version of @sc{cvs} they are using at any cvs.texi(,14040) particular moment). cvs.texi(,14041) @c If we want to start retiring messages, perhaps we cvs.texi(,14042) @c should pick a cutoff version (for example, no more cvs.texi(,14043) @c messages which are specific to versions before 1.9) cvs.texi(,14044) @c and then move the old messages to an "old messages" cvs.texi(,14045) @c node rather than deleting them completely. cvs.texi(,14046) cvs.texi(,14047) @table @code cvs.texi(,14048) @c FIXME: What is the correct way to format a multiline cvs.texi(,14049) @c error message here? Maybe @table is the wrong cvs.texi(,14050) @c choice? Texinfo gurus? cvs.texi(,14051) @item @var{file}:@var{line}: Assertion '@var{text}' failed cvs.texi(,14052) The exact format of this message may vary depending on cvs.texi(,14053) your system. It indicates a bug in @sc{cvs}, which can cvs.texi(,14054) be handled as described in @ref{BUGS}. cvs.texi(,14055) cvs.texi(,14056) @item cvs @var{command}: authorization failed: server @var{host} rejected access cvs.texi(,14057) This is a generic response when trying to connect to a cvs.texi(,14058) pserver server which chooses not to provide a cvs.texi(,14059) specific reason for denying authorization. Check that cvs.texi(,14060) the username and password specified are correct and cvs.texi(,14061) that the @code{CVSROOT} specified is allowed by @samp{--allow-root} cvs.texi(,14062) in @file{inetd.conf}. See @ref{Password authenticated}. cvs.texi(,14063) cvs.texi(,14064) @item cvs @var{command}: conflict: removed @var{file} was modified by second party cvs.texi(,14065) This message indicates that you removed a file, and cvs.texi(,14066) someone else modified it. To resolve the conflict, cvs.texi(,14067) first run @samp{cvs add @var{file}}. If desired, look cvs.texi(,14068) at the other party's modification to decide whether you cvs.texi(,14069) still want to remove it. If you don't want to remove cvs.texi(,14070) it, stop here. If you do want to remove it, proceed cvs.texi(,14071) with @samp{cvs remove @var{file}} and commit your cvs.texi(,14072) removal. cvs.texi(,14073) @c Tests conflicts2-142b* in sanity.sh test for this. cvs.texi(,14074) cvs.texi(,14075) @item cannot change permissions on temporary directory cvs.texi(,14076) @example cvs.texi(,14077) Operation not permitted cvs.texi(,14078) @end example cvs.texi(,14079) This message has been happening in a non-reproducible, cvs.texi(,14080) occasional way when we run the client/server testsuite, cvs.texi(,14081) both on Red Hat Linux 3.0.3 and 4.1. We haven't been cvs.texi(,14082) able to figure out what causes it, nor is it known cvs.texi(,14083) whether it is specific to linux (or even to this cvs.texi(,14084) particular machine!). If the problem does occur on cvs.texi(,14085) other unices, @samp{Operation not permitted} would be cvs.texi(,14086) likely to read @samp{Not owner} or whatever the system cvs.texi(,14087) in question uses for the unix @code{EPERM} error. If cvs.texi(,14088) you have any information to add, please let us know as cvs.texi(,14089) described in @ref{BUGS}. If you experience this error cvs.texi(,14090) while using @sc{cvs}, retrying the operation which cvs.texi(,14091) produced it should work fine. cvs.texi(,14092) @c This has been seen in a variety of tests, including cvs.texi(,14093) @c multibranch-2, multibranch-5, and basic1-24-rm-rm, cvs.texi(,14094) @c so it doesn't seem particularly specific to any one cvs.texi(,14095) @c test. cvs.texi(,14096) cvs.texi(,14097) @item cvs [server aborted]: Cannot check out files into the repository itself cvs.texi(,14098) The obvious cause for this message (especially for cvs.texi(,14099) non-client/server @sc{cvs}) is that the @sc{cvs} root cvs.texi(,14100) is, for example, @file{/usr/local/cvsroot} and you try cvs.texi(,14101) to check out files when you are in a subdirectory, such cvs.texi(,14102) as @file{/usr/local/cvsroot/test}. However, there is a cvs.texi(,14103) more subtle cause, which is that the temporary cvs.texi(,14104) directory on the server is set to a subdirectory of the cvs.texi(,14105) root (which is also not allowed). If this is the cvs.texi(,14106) problem, set the temporary directory to somewhere else, cvs.texi(,14107) for example @file{/var/tmp}; see @code{TMPDIR} in cvs.texi(,14108) @ref{Environment variables}, for how to set the cvs.texi(,14109) temporary directory. cvs.texi(,14110) cvs.texi(,14111) @item cannot commit files as 'root' cvs.texi(,14112) See @samp{'root' is not allowed to commit files}. cvs.texi(,14113) cvs.texi(,14114) @c For one example see basica-1a10 in the testsuite cvs.texi(,14115) @c For another example, "cvs co ." on NT; see comment cvs.texi(,14116) @c at windows-NT/filesubr.c (expand_wild). cvs.texi(,14117) @c For another example, "cvs co foo/bar" where foo exists. cvs.texi(,14118) @item cannot open CVS/Entries for reading: No such file or directory cvs.texi(,14119) This generally indicates a @sc{cvs} internal error, and cvs.texi(,14120) can be handled as with other @sc{cvs} bugs cvs.texi(,14121) (@pxref{BUGS}). Usually there is a workaround---the cvs.texi(,14122) exact nature of which would depend on the situation but cvs.texi(,14123) which hopefully could be figured out. cvs.texi(,14124) cvs.texi(,14125) @c This is more obscure than it might sound; it only cvs.texi(,14126) @c happens if you run "cvs init" from a directory which cvs.texi(,14127) @c contains a CVS/Root file at the start. cvs.texi(,14128) @item cvs [init aborted]: cannot open CVS/Root: No such file or directory cvs.texi(,14129) This message is harmless. Provided it is not cvs.texi(,14130) accompanied by other errors, the operation has cvs.texi(,14131) completed successfully. This message should not occur cvs.texi(,14132) with current versions of @sc{cvs}, but it is documented cvs.texi(,14133) here for the benefit of @sc{cvs} 1.9 and older. cvs.texi(,14134) cvs.texi(,14135) @item cvs server: cannot open /root/.cvsignore: Permission denied cvs.texi(,14136) @itemx cvs [server aborted]: can't chdir(/root): Permission denied cvs.texi(,14137) See @ref{Connection}. cvs.texi(,14138) cvs.texi(,14139) @item cvs [checkout aborted]: cannot rename file @var{file} to CVS/,,@var{file}: Invalid argument cvs.texi(,14140) This message has been reported as intermittently cvs.texi(,14141) happening with @sc{cvs} 1.9 on Solaris 2.5. The cause is cvs.texi(,14142) unknown; if you know more about what causes it, let us cvs.texi(,14143) know as described in @ref{BUGS}. cvs.texi(,14144) cvs.texi(,14145) @item cvs [@var{command} aborted]: cannot start server via rcmd cvs.texi(,14146) This, unfortunately, is a rather nonspecific error cvs.texi(,14147) message which @sc{cvs} 1.9 will print if you are cvs.texi(,14148) running the @sc{cvs} client and it is having trouble cvs.texi(,14149) connecting to the server. Current versions of @sc{cvs} cvs.texi(,14150) should print a much more specific error message. If cvs.texi(,14151) you get this message when you didn't mean to run the cvs.texi(,14152) client at all, you probably forgot to specify cvs.texi(,14153) @code{:local:}, as described in @ref{Repository}. cvs.texi(,14154) cvs.texi(,14155) @item ci: @var{file},v: bad diff output line: Binary files - and /tmp/T2a22651 differ cvs.texi(,14156) @sc{cvs} 1.9 and older will print this message cvs.texi(,14157) when trying to check in a binary file if cvs.texi(,14158) @sc{rcs} is not correctly installed. Re-read the cvs.texi(,14159) instructions that came with your @sc{rcs} distribution cvs.texi(,14160) and the @sc{install} file in the @sc{cvs} cvs.texi(,14161) distribution. Alternately, upgrade to a current cvs.texi(,14162) version of @sc{cvs}, which checks in files itself cvs.texi(,14163) rather than via @sc{rcs}. cvs.texi(,14164) cvs.texi(,14165) @item cvs checkout: could not check out @var{file} cvs.texi(,14166) With @sc{cvs} 1.9, this can mean that the @code{co} program cvs.texi(,14167) (part of @sc{rcs}) returned a failure. It should be cvs.texi(,14168) preceded by another error message, however it has been cvs.texi(,14169) observed without another error message and the cause is cvs.texi(,14170) not well-understood. With the current version of @sc{cvs}, cvs.texi(,14171) which does not run @code{co}, if this message occurs cvs.texi(,14172) without another error message, it is definitely a @sc{cvs} cvs.texi(,14173) bug (@pxref{BUGS}). cvs.texi(,14174) @c My current suspicion is that the RCS in the rcs (not cvs.texi(,14175) @c cvs/winnt/rcs57nt.zip) directory on the _Practical_ cvs.texi(,14176) @c CD is bad (remains to be confirmed). cvs.texi(,14177) @c There is also a report of something which looks cvs.texi(,14178) @c very similar on SGI, Irix 5.2, so I dunno. cvs.texi(,14179) cvs.texi(,14180) @item cvs [login aborted]: could not find out home directory cvs.texi(,14181) This means that you need to set the environment cvs.texi(,14182) variables that @sc{cvs} uses to locate your home directory. cvs.texi(,14183) See the discussion of @code{HOME}, @code{HOMEDRIVE}, and @code{HOMEPATH} in cvs.texi(,14184) @ref{Environment variables}. cvs.texi(,14185) cvs.texi(,14186) @item cvs update: could not merge revision @var{rev} of @var{file}: No such file or directory cvs.texi(,14187) @sc{cvs} 1.9 and older will print this message if there was cvs.texi(,14188) a problem finding the @code{rcsmerge} program. Make cvs.texi(,14189) sure that it is in your @code{PATH}, or upgrade to a cvs.texi(,14190) current version of @sc{cvs}, which does not require cvs.texi(,14191) an external @code{rcsmerge} program. cvs.texi(,14192) cvs.texi(,14193) @item cvs [update aborted]: could not patch @var{file}: No such file or directory cvs.texi(,14194) This means that there was a problem finding the cvs.texi(,14195) @code{patch} program. Make sure that it is in your cvs.texi(,14196) @code{PATH}. Note that despite appearances the message cvs.texi(,14197) is @emph{not} referring to whether it can find @var{file}. cvs.texi(,14198) If both the client and the server are running a current cvs.texi(,14199) version of @sc{cvs}, then there is no need for an cvs.texi(,14200) external patch program and you should not see this cvs.texi(,14201) message. But if either client or server is running cvs.texi(,14202) @sc{cvs} 1.9, then you need @code{patch}. cvs.texi(,14203) cvs.texi(,14204) @item cvs update: could not patch @var{file}; will refetch cvs.texi(,14205) This means that for whatever reason the client was cvs.texi(,14206) unable to apply a patch that the server sent. The cvs.texi(,14207) message is nothing to be concerned about, because cvs.texi(,14208) inability to apply the patch only slows things down and cvs.texi(,14209) has no effect on what @sc{cvs} does. cvs.texi(,14210) @c xref to update output. Or File status? cvs.texi(,14211) @c Or some place else that cvs.texi(,14212) @c explains this whole "patch"/P/Needs Patch thing? cvs.texi(,14213) cvs.texi(,14214) @item dying gasps from @var{server} unexpected cvs.texi(,14215) There is a known bug in the server for @sc{cvs} 1.9.18 cvs.texi(,14216) and older which can cause this. For me, this was cvs.texi(,14217) reproducible if I used the @samp{-t} global option. It cvs.texi(,14218) was fixed by Andy Piper's 14 Nov 1997 change to cvs.texi(,14219) src/filesubr.c, if anyone is curious. cvs.texi(,14220) If you see the message, cvs.texi(,14221) you probably can just retry the operation which failed, cvs.texi(,14222) or if you have discovered information concerning its cvs.texi(,14223) cause, please let us know as described in @ref{BUGS}. cvs.texi(,14224) cvs.texi(,14225) @item end of file from server (consult above messages if any) cvs.texi(,14226) The most common cause for this message is if you are cvs.texi(,14227) using an external @code{rsh} program and it exited with cvs.texi(,14228) an error. In this case the @code{rsh} program should cvs.texi(,14229) have printed a message, which will appear before the cvs.texi(,14230) above message. For more information on setting up a cvs.texi(,14231) @sc{cvs} client and server, see @ref{Remote repositories}. cvs.texi(,14232) cvs.texi(,14233) @item cvs [update aborted]: EOF in key in RCS file @var{file},v cvs.texi(,14234) @itemx cvs [checkout aborted]: EOF while looking for end of string in RCS file @var{file},v cvs.texi(,14235) This means that there is a syntax error in the given cvs.texi(,14236) @sc{rcs} file. Note that this might be true even if @sc{rcs} can cvs.texi(,14237) read the file OK; @sc{cvs} does more error checking of cvs.texi(,14238) errors in the RCS file. That is why you may see this cvs.texi(,14239) message when upgrading from @sc{cvs} 1.9 to @sc{cvs} cvs.texi(,14240) 1.10. The likely cause for the original corruption is cvs.texi(,14241) hardware, the operating system, or the like. Of cvs.texi(,14242) course, if you find a case in which @sc{cvs} seems to cvs.texi(,14243) corrupting the file, by all means report it, cvs.texi(,14244) (@pxref{BUGS}). cvs.texi(,14245) There are quite a few variations of this error message, cvs.texi(,14246) depending on exactly where in the @sc{rcs} file @sc{cvs} cvs.texi(,14247) finds the syntax error. cvs.texi(,14248) cvs.texi(,14249) @cindex mkmodules cvs.texi(,14250) @item cvs commit: Executing 'mkmodules' cvs.texi(,14251) This means that your repository is set up for a version cvs.texi(,14252) of @sc{cvs} prior to @sc{cvs} 1.8. When using @sc{cvs} cvs.texi(,14253) 1.8 or later, the above message will be preceded by cvs.texi(,14254) cvs.texi(,14255) @example cvs.texi(,14256) cvs commit: Rebuilding administrative file database cvs.texi(,14257) @end example cvs.texi(,14258) cvs.texi(,14259) If you see both messages, the database is being rebuilt cvs.texi(,14260) twice, which is unnecessary but harmless. If you wish cvs.texi(,14261) to avoid the duplication, and you have no versions of cvs.texi(,14262) @sc{cvs} 1.7 or earlier in use, remove @code{-i mkmodules} cvs.texi(,14263) every place it appears in your @code{modules} cvs.texi(,14264) file. For more information on the @code{modules} file, cvs.texi(,14265) see @ref{modules}. cvs.texi(,14266) cvs.texi(,14267) @c This message comes from "co", and I believe is cvs.texi(,14268) @c possible only with older versions of CVS which call cvs.texi(,14269) @c co. The problem with being able to create the bogus cvs.texi(,14270) @c RCS file still exists, though (and I think maybe cvs.texi(,14271) @c there is a different symptom(s) now). cvs.texi(,14272) @c FIXME: Would be nice to have a more exact wording cvs.texi(,14273) @c for this message. cvs.texi(,14274) @item missing author cvs.texi(,14275) Typically this can happen if you created an RCS file cvs.texi(,14276) with your username set to empty. @sc{cvs} will, bogusly, cvs.texi(,14277) create an illegal RCS file with no value for the author cvs.texi(,14278) field. The solution is to make sure your username is cvs.texi(,14279) set to a non-empty value and re-create the RCS file. cvs.texi(,14280) @c "make sure your username is set" is complicated in cvs.texi(,14281) @c and of itself, as there are the environment cvs.texi(,14282) @c variables the system login name, &c, and it depends cvs.texi(,14283) @c on the version of CVS. cvs.texi(,14284) cvs.texi(,14285) @item cvs [checkout aborted]: no such tag @var{tag} cvs.texi(,14286) This message means that @sc{cvs} isn't familiar with cvs.texi(,14287) the tag @var{tag}. Usually this means that you have cvs.texi(,14288) mistyped a tag name; however there are (relatively cvs.texi(,14289) obscure) cases in which @sc{cvs} will require you to cvs.texi(,14290) @c Search sanity.sh for "no such tag" to see some of cvs.texi(,14291) @c the relatively obscure cases. cvs.texi(,14292) try a few other @sc{cvs} commands involving that tag, cvs.texi(,14293) before you find one which will cause @sc{cvs} to update cvs.texi(,14294) the @file{val-tags} file; see discussion of val-tags in cvs.texi(,14295) @ref{File permissions}. You only need to worry about cvs.texi(,14296) this once for a given tag; when a tag is listed in cvs.texi(,14297) @file{val-tags}, it stays there. Note that using cvs.texi(,14298) @samp{-f} to not require tag matches does not override cvs.texi(,14299) this check; see @ref{Common options}. cvs.texi(,14300) cvs.texi(,14301) @item *PANIC* administration files missing cvs.texi(,14302) This typically means that there is a directory named cvs.texi(,14303) @sc{cvs} but it does not contain the administrative files cvs.texi(,14304) which @sc{cvs} puts in a CVS directory. If the problem is cvs.texi(,14305) that you created a CVS directory via some mechanism cvs.texi(,14306) other than @sc{cvs}, then the answer is simple, use a name cvs.texi(,14307) other than @sc{cvs}. If not, it indicates a @sc{cvs} bug cvs.texi(,14308) (@pxref{BUGS}). cvs.texi(,14309) cvs.texi(,14310) @item rcs error: Unknown option: -x,v/ cvs.texi(,14311) This message will be followed by a usage message for cvs.texi(,14312) @sc{rcs}. It means that you have an old version of cvs.texi(,14313) @sc{rcs} (probably supplied with your operating cvs.texi(,14314) system), as well as an old version of @sc{cvs}. cvs.texi(,14315) @sc{cvs} 1.9.18 and earlier only work with @sc{rcs} version 5 and cvs.texi(,14316) later; current versions of @sc{cvs} do not run @sc{rcs} programs. cvs.texi(,14317) @c For more information on installing @sc{cvs}, see cvs.texi(,14318) @c (FIXME: where? it depends on whether you are cvs.texi(,14319) @c getting binaries or sources or what). cvs.texi(,14320) @c The message can also say "ci error" or something cvs.texi(,14321) @c instead of "rcs error", I suspect. cvs.texi(,14322) cvs.texi(,14323) @item cvs [server aborted]: received broken pipe signal cvs.texi(,14324) This message seems to be caused by a hard-to-track-down cvs.texi(,14325) bug in @sc{cvs} or the systems it runs on (we don't cvs.texi(,14326) know---we haven't tracked it down yet!). It seems to cvs.texi(,14327) happen only after a @sc{cvs} command has completed, and cvs.texi(,14328) you should be able to just ignore the message. cvs.texi(,14329) However, if you have discovered information concerning its cvs.texi(,14330) cause, please let us know as described in @ref{BUGS}. cvs.texi(,14331) cvs.texi(,14332) @item 'root' is not allowed to commit files cvs.texi(,14333) When committing a permanent change, @sc{cvs} makes a log entry of cvs.texi(,14334) who committed the change. If you are committing the change logged cvs.texi(,14335) in as "root" (not under "su" or other root-priv giving program), cvs.texi(,14336) @sc{cvs} cannot determine who is actually making the change. cvs.texi(,14337) As such, by default, @sc{cvs} disallows changes to be committed by users cvs.texi(,14338) logged in as "root". (You can disable this option by passing the cvs.texi(,14339) @code{--enable-rootcommit} option to @file{configure} and recompiling @sc{cvs}. cvs.texi(,14340) On some systems this means editing the appropriate @file{config.h} file cvs.texi(,14341) before building @sc{cvs}.) cvs.texi(,14342) cvs.texi(,14343) @item Too many arguments! cvs.texi(,14344) This message is typically printed by the @file{log.pl} cvs.texi(,14345) script which is in the @file{contrib} directory in the cvs.texi(,14346) @sc{cvs} source distribution. In some versions of cvs.texi(,14347) @sc{cvs}, @file{log.pl} has been part of the default cvs.texi(,14348) @sc{cvs} installation. The @file{log.pl} script gets cvs.texi(,14349) called from the @file{loginfo} administrative file. cvs.texi(,14350) Check that the arguments passed in @file{loginfo} match cvs.texi(,14351) what your version of @file{log.pl} expects. In cvs.texi(,14352) particular, the @file{log.pl} from @sc{cvs} 1.3 and cvs.texi(,14353) older expects the logfile as an argument whereas the cvs.texi(,14354) @file{log.pl} from @sc{cvs} 1.5 and newer expects the cvs.texi(,14355) logfile to be specified with a @samp{-f} option. Of cvs.texi(,14356) course, if you don't need @file{log.pl} you can just cvs.texi(,14357) comment it out of @file{loginfo}. cvs.texi(,14358) cvs.texi(,14359) @item cvs [update aborted]: unexpected EOF reading @var{file},v cvs.texi(,14360) See @samp{EOF in key in RCS file}. cvs.texi(,14361) cvs.texi(,14362) @item cvs [login aborted]: unrecognized auth response from @var{server} cvs.texi(,14363) This message typically means that the server is not set cvs.texi(,14364) up properly. For example, if @file{inetd.conf} points cvs.texi(,14365) to a nonexistent cvs executable. To debug it further, cvs.texi(,14366) find the log file which inetd writes cvs.texi(,14367) (@file{/var/log/messages} or whatever inetd uses on cvs.texi(,14368) your system). For details, see @ref{Connection}, and cvs.texi(,14369) @ref{Password authentication server}. cvs.texi(,14370) cvs.texi(,14371) @item cvs commit: Up-to-date check failed for `@var{file}' cvs.texi(,14372) This means that someone else has committed a change to cvs.texi(,14373) that file since the last time that you did a @code{cvs cvs.texi(,14374) update}. So before proceeding with your @code{cvs cvs.texi(,14375) commit} you need to @code{cvs update}. @sc{cvs} will merge cvs.texi(,14376) the changes that you made and the changes that the cvs.texi(,14377) other person made. If it does not detect any conflicts cvs.texi(,14378) it will report @samp{M @var{file}} and you are ready cvs.texi(,14379) to @code{cvs commit}. If it detects conflicts it will cvs.texi(,14380) print a message saying so, will report @samp{C @var{file}}, cvs.texi(,14381) and you need to manually resolve the cvs.texi(,14382) conflict. For more details on this process see cvs.texi(,14383) @ref{Conflicts example}. cvs.texi(,14384) cvs.texi(,14385) @item Usage: diff3 [-exEX3 [-i | -m] [-L label1 -L label3]] file1 file2 file3 cvs.texi(,14386) @example cvs.texi(,14387) Only one of [exEX3] allowed cvs.texi(,14388) @end example cvs.texi(,14389) This indicates a problem with the installation of cvs.texi(,14390) @code{diff3} and @code{rcsmerge}. Specifically cvs.texi(,14391) @code{rcsmerge} was compiled to look for GNU diff3, but cvs.texi(,14392) it is finding unix diff3 instead. The exact text of cvs.texi(,14393) the message will vary depending on the system. The cvs.texi(,14394) simplest solution is to upgrade to a current version of cvs.texi(,14395) @sc{cvs}, which does not rely on external cvs.texi(,14396) @code{rcsmerge} or @code{diff3} programs. cvs.texi(,14397) cvs.texi(,14398) @item warning: unrecognized response `@var{text}' from cvs server cvs.texi(,14399) If @var{text} contains a valid response (such as cvs.texi(,14400) @samp{ok}) followed by an extra carriage return cvs.texi(,14401) character (on many systems this will cause the second cvs.texi(,14402) part of the message to overwrite the first part), then cvs.texi(,14403) it probably means that you are using the @samp{:ext:} cvs.texi(,14404) access method with a version of rsh, such as most cvs.texi(,14405) non-unix rsh versions, which does not by default cvs.texi(,14406) provide a transparent data stream. In such cases you cvs.texi(,14407) probably want to try @samp{:server:} instead of cvs.texi(,14408) @samp{:ext:}. If @var{text} is something else, this cvs.texi(,14409) may signify a problem with your @sc{cvs} server. cvs.texi(,14410) Double-check your installation against the instructions cvs.texi(,14411) for setting up the @sc{cvs} server. cvs.texi(,14412) @c FIXCVS: should be printing CR as \r or \015 or some cvs.texi(,14413) @c such, probably. cvs.texi(,14414) cvs.texi(,14415) @item cvs commit: [@var{time}] waiting for @var{user}'s lock in @var{directory} cvs.texi(,14416) This is a normal message, not an error. See cvs.texi(,14417) @ref{Concurrency}, for more details. cvs.texi(,14418) cvs.texi(,14419) @item cvs commit: warning: editor session failed cvs.texi(,14420) @cindex Exit status, of editor cvs.texi(,14421) This means that the editor which @sc{cvs} is using exits with a nonzero cvs.texi(,14422) exit status. Some versions of vi will do this even when there was not cvs.texi(,14423) a problem editing the file. If so, point the cvs.texi(,14424) @code{CVSEDITOR} environment variable to a small script cvs.texi(,14425) such as: cvs.texi(,14426) cvs.texi(,14427) @example cvs.texi(,14428) #!/bin/sh cvs.texi(,14429) vi $* cvs.texi(,14430) exit 0 cvs.texi(,14431) @end example cvs.texi(,14432) cvs.texi(,14433) @c "warning: foo was lost" and "no longer pertinent" (both normal). cvs.texi(,14434) @c Would be nice to write these up--they are cvs.texi(,14435) @c potentially confusing for the new user. cvs.texi(,14436) @end table cvs.texi(,14437) cvs.texi(,14438) @node Connection cvs.texi(,14439) @appendixsec Trouble making a connection to a CVS server cvs.texi(,14440) cvs.texi(,14441) This section concerns what to do if you are having cvs.texi(,14442) trouble making a connection to a @sc{cvs} server. If cvs.texi(,14443) you are running the @sc{cvs} command line client cvs.texi(,14444) running on Windows, first upgrade the client to cvs.texi(,14445) @sc{cvs} 1.9.12 or later. The error reporting in cvs.texi(,14446) earlier versions provided much less information about cvs.texi(,14447) what the problem was. If the client is non-Windows, cvs.texi(,14448) @sc{cvs} 1.9 should be fine. cvs.texi(,14449) cvs.texi(,14450) If the error messages are not sufficient to track down cvs.texi(,14451) the problem, the next steps depend largely on which cvs.texi(,14452) access method you are using. cvs.texi(,14453) cvs.texi(,14454) @table @code cvs.texi(,14455) @cindex :ext:, troubleshooting cvs.texi(,14456) @item :ext: cvs.texi(,14457) Try running the rsh program from the command line. For cvs.texi(,14458) example: "rsh servername cvs -v" should print @sc{cvs} cvs.texi(,14459) version information. If this doesn't work, you need to cvs.texi(,14460) fix it before you can worry about @sc{cvs} problems. cvs.texi(,14461) cvs.texi(,14462) @cindex :server:, troubleshooting cvs.texi(,14463) @item :server: cvs.texi(,14464) You don't need a command line rsh program to use this cvs.texi(,14465) access method, but if you have an rsh program around, cvs.texi(,14466) it may be useful as a debugging tool. Follow the cvs.texi(,14467) directions given for :ext:. cvs.texi(,14468) cvs.texi(,14469) @cindex :pserver:, troubleshooting cvs.texi(,14470) @item :pserver: cvs.texi(,14471) Errors along the lines of "connection refused" typically indicate cvs.texi(,14472) that inetd isn't even listening for connections on port 2401 cvs.texi(,14473) whereas errors like "connection reset by peer", cvs.texi(,14474) "received broken pipe signal", "recv() from server: EOF", cvs.texi(,14475) or "end of file from server" cvs.texi(,14476) typically indicate that inetd is listening for cvs.texi(,14477) connections but is unable to start @sc{cvs} (this is frequently cvs.texi(,14478) caused by having an incorrect path in @file{inetd.conf} cvs.texi(,14479) or by firewall software rejecting the connection). cvs.texi(,14480) "unrecognized auth response" errors are caused by a bad command cvs.texi(,14481) line in @file{inetd.conf}, typically an invalid option or forgetting cvs.texi(,14482) to put the @samp{pserver} command at the end of the line. cvs.texi(,14483) Another less common problem is invisible control characters that cvs.texi(,14484) your editor "helpfully" added without you noticing. cvs.texi(,14485) cvs.texi(,14486) One good debugging tool is to "telnet servername cvs.texi(,14487) 2401". After connecting, send any text (for example cvs.texi(,14488) "foo" followed by return). If @sc{cvs} is working cvs.texi(,14489) correctly, it will respond with cvs.texi(,14490) cvs.texi(,14491) @example cvs.texi(,14492) cvs [pserver aborted]: bad auth protocol start: foo cvs.texi(,14493) @end example cvs.texi(,14494) cvs.texi(,14495) If instead you get: cvs.texi(,14496) cvs.texi(,14497) @example cvs.texi(,14498) Usage: cvs [cvs-options] command [command-options-and-arguments] cvs.texi(,14499) ... cvs.texi(,14500) @end example cvs.texi(,14501) cvs.texi(,14502) @noindent cvs.texi(,14503) then you're missing the @samp{pserver} command at the end of the cvs.texi(,14504) line in @file{inetd.conf}; check to make sure that the entire command cvs.texi(,14505) is on one line and that it's complete. cvs.texi(,14506) cvs.texi(,14507) Likewise, if you get something like: cvs.texi(,14508) cvs.texi(,14509) @example cvs.texi(,14510) Unknown command: `pserved' cvs.texi(,14511) cvs.texi(,14512) CVS commands are: cvs.texi(,14513) add Add a new file/directory to the repository cvs.texi(,14514) ... cvs.texi(,14515) @end example cvs.texi(,14516) cvs.texi(,14517) @noindent cvs.texi(,14518) then you've misspelled @samp{pserver} in some way. If it isn't cvs.texi(,14519) obvious, check for invisible control characters (particularly cvs.texi(,14520) carriage returns) in @file{inetd.conf}. cvs.texi(,14521) cvs.texi(,14522) If it fails to work at all, then make sure inetd is working cvs.texi(,14523) right. Change the invocation in @file{inetd.conf} to run the cvs.texi(,14524) echo program instead of cvs. For example: cvs.texi(,14525) cvs.texi(,14526) @example cvs.texi(,14527) 2401 stream tcp nowait root /bin/echo echo hello cvs.texi(,14528) @end example cvs.texi(,14529) cvs.texi(,14530) After making that change and instructing inetd to cvs.texi(,14531) re-read its configuration file, "telnet servername cvs.texi(,14532) 2401" should show you the text hello and then the cvs.texi(,14533) server should close the connection. If this doesn't cvs.texi(,14534) work, you need to fix it before you can worry about cvs.texi(,14535) @sc{cvs} problems. cvs.texi(,14536) cvs.texi(,14537) On AIX systems, the system will often have its own cvs.texi(,14538) program trying to use port 2401. This is AIX's problem cvs.texi(,14539) in the sense that port 2401 is registered for use with cvs.texi(,14540) @sc{cvs}. I hear that there is an AIX patch available cvs.texi(,14541) to address this problem. cvs.texi(,14542) cvs.texi(,14543) Another good debugging tool is the @samp{-d} cvs.texi(,14544) (debugging) option to inetd. Consult your system cvs.texi(,14545) documentation for more information. cvs.texi(,14546) cvs.texi(,14547) If you seem to be connecting but get errors like: cvs.texi(,14548) cvs.texi(,14549) @example cvs.texi(,14550) cvs server: cannot open /root/.cvsignore: Permission denied cvs.texi(,14551) cvs [server aborted]: can't chdir(/root): Permission denied cvs.texi(,14552) @end example cvs.texi(,14553) cvs.texi(,14554) @noindent cvs.texi(,14555) then you probably haven't specified @samp{-f} in @file{inetd.conf}. cvs.texi(,14556) (In releases prior to @sc{cvs} 1.11.1, this problem can be caused by cvs.texi(,14557) your system setting the @code{$HOME} environment variable cvs.texi(,14558) for programs being run by inetd. In this case, you can either cvs.texi(,14559) have inetd run a shell script that unsets @code{$HOME} and then runs cvs.texi(,14560) @sc{cvs}, or you can use @code{env} to run @sc{cvs} with a pristine cvs.texi(,14561) environment.) cvs.texi(,14562) cvs.texi(,14563) If you can connect successfully for a while but then can't, cvs.texi(,14564) you've probably hit inetd's rate limit. cvs.texi(,14565) (If inetd receives too many requests for the same service cvs.texi(,14566) in a short period of time, it assumes that something is wrong cvs.texi(,14567) and temporarily disables the service.) cvs.texi(,14568) Check your inetd documentation to find out how to adjust the cvs.texi(,14569) rate limit (some versions of inetd have a single rate limit, cvs.texi(,14570) others allow you to set the limit for each service separately.) cvs.texi(,14571) @end table cvs.texi(,14572) cvs.texi(,14573) @node Other problems cvs.texi(,14574) @appendixsec Other common problems cvs.texi(,14575) cvs.texi(,14576) Here is a list of problems which do not fit into the cvs.texi(,14577) above categories. They are in no particular order. cvs.texi(,14578) cvs.texi(,14579) @itemize @bullet cvs.texi(,14580) @item cvs.texi(,14581) On Windows, if there is a 30 second or so delay when cvs.texi(,14582) you run a @sc{cvs} command, it may mean that you have cvs.texi(,14583) your home directory set to @file{C:/}, for example (see cvs.texi(,14584) @code{HOMEDRIVE} and @code{HOMEPATH} in cvs.texi(,14585) @ref{Environment variables}). @sc{cvs} expects the home cvs.texi(,14586) directory to not end in a slash, for example @file{C:} cvs.texi(,14587) or @file{C:\cvs}. cvs.texi(,14588) @c FIXCVS: CVS should at least detect this and print an cvs.texi(,14589) @c error, presumably. cvs.texi(,14590) cvs.texi(,14591) @item cvs.texi(,14592) If you are running @sc{cvs} 1.9.18 or older, and cvs.texi(,14593) @code{cvs update} finds a conflict and tries to cvs.texi(,14594) merge, as described in @ref{Conflicts example}, but cvs.texi(,14595) doesn't tell you there were conflicts, then you may cvs.texi(,14596) have an old version of @sc{rcs}. The easiest solution cvs.texi(,14597) probably is to upgrade to a current version of cvs.texi(,14598) @sc{cvs}, which does not rely on external @sc{rcs} cvs.texi(,14599) programs. cvs.texi(,14600) @end itemize cvs.texi(,14601) cvs.texi(,14602) @c --------------------------------------------------------------------- cvs.texi(,14603) @node Credits cvs.texi(,14604) @appendix Credits cvs.texi(,14605) cvs.texi(,14606) @cindex Contributors (manual) cvs.texi(,14607) @cindex Credits (manual) cvs.texi(,14608) Roland Pesch, then of Cygnus Support <@t{roland@@wrs.com}> cvs.texi(,14609) wrote the manual pages which were distributed with cvs.texi(,14610) @sc{cvs} 1.3. Much of their text was copied into this cvs.texi(,14611) manual. He also read an early draft cvs.texi(,14612) of this manual and contributed many ideas and cvs.texi(,14613) corrections. cvs.texi(,14614) cvs.texi(,14615) The mailing-list @code{info-cvs} is sometimes cvs.texi(,14616) informative. I have included information from postings cvs.texi(,14617) made by the following persons: cvs.texi(,14618) David G. Grubbs <@t{dgg@@think.com}>. cvs.texi(,14619) cvs.texi(,14620) Some text has been extracted from the man pages for cvs.texi(,14621) @sc{rcs}. cvs.texi(,14622) cvs.texi(,14623) The @sc{cvs} @sc{faq} by David G. Grubbs has provided cvs.texi(,14624) useful material. The @sc{faq} is no longer maintained, cvs.texi(,14625) however, and this manual is about the closest thing there cvs.texi(,14626) is to a successor (with respect to documenting how to cvs.texi(,14627) use @sc{cvs}, at least). cvs.texi(,14628) cvs.texi(,14629) In addition, the following persons have helped by cvs.texi(,14630) telling me about mistakes I've made: cvs.texi(,14631) cvs.texi(,14632) @display cvs.texi(,14633) Roxanne Brunskill <@t{rbrunski@@datap.ca}>, cvs.texi(,14634) Kathy Dyer <@t{dyer@@phoenix.ocf.llnl.gov}>, cvs.texi(,14635) Karl Pingle <@t{pingle@@acuson.com}>, cvs.texi(,14636) Thomas A Peterson <@t{tap@@src.honeywell.com}>, cvs.texi(,14637) Inge Wallin <@t{ingwa@@signum.se}>, cvs.texi(,14638) Dirk Koschuetzki <@t{koschuet@@fmi.uni-passau.de}> cvs.texi(,14639) and Michael Brown <@t{brown@@wi.extrel.com}>. cvs.texi(,14640) @end display cvs.texi(,14641) cvs.texi(,14642) The list of contributors here is not comprehensive; for a more cvs.texi(,14643) complete list of who has contributed to this manual see cvs.texi(,14644) the file @file{doc/ChangeLog} in the @sc{cvs} source cvs.texi(,14645) distribution. cvs.texi(,14646) cvs.texi(,14647) @c --------------------------------------------------------------------- cvs.texi(,14648) @node BUGS cvs.texi(,14649) @appendix Dealing with bugs in CVS or this manual cvs.texi(,14650) cvs.texi(,14651) @cindex Bugs in this manual or CVS cvs.texi(,14652) Neither @sc{cvs} nor this manual is perfect, and they cvs.texi(,14653) probably never will be. If you are having trouble cvs.texi(,14654) using @sc{cvs}, or think you have found a bug, there cvs.texi(,14655) are a number of things you can do about it. Note that cvs.texi(,14656) if the manual is unclear, that can be considered a bug cvs.texi(,14657) in the manual, so these problems are often worth doing cvs.texi(,14658) something about as well as problems with @sc{cvs} itself. cvs.texi(,14659) cvs.texi(,14660) @cindex Reporting bugs cvs.texi(,14661) @cindex Bugs, reporting cvs.texi(,14662) @cindex Errors, reporting cvs.texi(,14663) @itemize @bullet cvs.texi(,14664) @item cvs.texi(,14665) If you want someone to help you and fix bugs that you cvs.texi(,14666) report, there are companies which will do that for a cvs.texi(,14667) fee. One such company is: cvs.texi(,14668) cvs.texi(,14669) @cindex Ximbiot cvs.texi(,14670) @cindex Support, getting CVS support cvs.texi(,14671) @example cvs.texi(,14672) Ximbiot cvs.texi(,14673) 319 S. River St. cvs.texi(,14674) Harrisburg, PA 17104-1657 cvs.texi(,14675) USA cvs.texi(,14676) Email: info@@ximbiot.com cvs.texi(,14677) Phone: (717) 579-6168 cvs.texi(,14678) Fax: (717) 234-3125 cvs.texi(,14679) http://ximbiot.com/ cvs.texi(,14680) cvs.texi(,14681) @end example cvs.texi(,14682) cvs.texi(,14683) @item cvs.texi(,14684) If you got @sc{cvs} through a distributor, such as an cvs.texi(,14685) operating system vendor or a vendor of freeware cvs.texi(,14686) @sc{cd-rom}s, you may wish to see whether the cvs.texi(,14687) distributor provides support. Often, they will provide cvs.texi(,14688) no support or minimal support, but this may vary from cvs.texi(,14689) distributor to distributor. cvs.texi(,14690) cvs.texi(,14691) @item cvs.texi(,14692) If you have the skills and time to do so, you may wish cvs.texi(,14693) to fix the bug yourself. If you wish to submit your cvs.texi(,14694) fix for inclusion in future releases of @sc{cvs}, see cvs.texi(,14695) the file @sc{hacking} in the @sc{cvs} source cvs.texi(,14696) distribution. It contains much more information on the cvs.texi(,14697) process of submitting fixes. cvs.texi(,14698) cvs.texi(,14699) @item cvs.texi(,14700) There may be resources on the net which can help. Two cvs.texi(,14701) good places to start are: cvs.texi(,14702) cvs.texi(,14703) @example cvs.texi(,14704) http://www.cvshome.org cvs.texi(,14705) http://www.loria.fr/~molli/cvs-index.html cvs.texi(,14706) @end example cvs.texi(,14707) cvs.texi(,14708) If you are so inspired, increasing the information cvs.texi(,14709) available on the net is likely to be appreciated. For cvs.texi(,14710) example, before the standard @sc{cvs} distribution cvs.texi(,14711) worked on Windows 95, there was a web page with some cvs.texi(,14712) explanation and patches for running @sc{cvs} on Windows cvs.texi(,14713) 95, and various people helped out by mentioning this cvs.texi(,14714) page on mailing lists or newsgroups when the subject cvs.texi(,14715) came up. cvs.texi(,14716) cvs.texi(,14717) @item cvs.texi(,14718) It is also possible to report bugs to @code{bug-cvs}. cvs.texi(,14719) Note that someone may or may not want to do anything cvs.texi(,14720) with your bug report---if you need a solution consider cvs.texi(,14721) one of the options mentioned above. People probably do cvs.texi(,14722) want to hear about bugs which are particularly severe cvs.texi(,14723) in consequences and/or easy to fix, however. You can cvs.texi(,14724) also increase your odds by being as clear as possible cvs.texi(,14725) about the exact nature of the bug and any other cvs.texi(,14726) relevant information. The way to report bugs is to cvs.texi(,14727) send email to @code{bug-cvs@@gnu.org}. Note cvs.texi(,14728) that submissions to @code{bug-cvs} may be distributed cvs.texi(,14729) under the terms of the @sc{gnu} Public License, so if cvs.texi(,14730) you don't like this, don't submit them. There is cvs.texi(,14731) usually no justification for sending mail directly to cvs.texi(,14732) one of the @sc{cvs} maintainers rather than to cvs.texi(,14733) @code{bug-cvs}; those maintainers who want to hear cvs.texi(,14734) about such bug reports read @code{bug-cvs}. Also note cvs.texi(,14735) that sending a bug report to other mailing lists or cvs.texi(,14736) newsgroups is @emph{not} a substitute for sending it to cvs.texi(,14737) @code{bug-cvs}. It is fine to discuss @sc{cvs} bugs on cvs.texi(,14738) whatever forum you prefer, but there are not cvs.texi(,14739) necessarily any maintainers reading bug reports sent cvs.texi(,14740) anywhere except @code{bug-cvs}. cvs.texi(,14741) @end itemize cvs.texi(,14742) cvs.texi(,14743) @cindex Known bugs in this manual or CVS cvs.texi(,14744) People often ask if there is a list of known bugs or cvs.texi(,14745) whether a particular bug is a known one. The file cvs.texi(,14746) @sc{bugs} in the @sc{cvs} source distribution is one cvs.texi(,14747) list of known bugs, but it doesn't necessarily try to cvs.texi(,14748) be comprehensive. Perhaps there will never be a cvs.texi(,14749) comprehensive, detailed list of known bugs. cvs.texi(,14750) cvs.texi(,14751) @c --------------------------------------------------------------------- cvs.texi(,14752) @node Index cvs.texi(,14753) @unnumbered Index cvs.texi(,14754) @cindex Index cvs.texi(,14755) cvs.texi(,14756) @printindex cp cvs.texi(,14757) cvs.texi(,14758) @summarycontents cvs.texi(,14759) cvs.texi(,14760) @contents cvs.texi(,14761) cvs.texi(,14762) @bye texi2html-1.82/test/manuals/res/texi_cvs/cvs.texi0000644000175000017500000174475611264347121024003 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @comment Documentation for CVS. @setfilename cvs.info @comment This file is part of the CVS distribution. @comment CVS is free software; you can redistribute it and/or modify @comment it under the terms of the GNU General Public License as published by @comment the Free Software Foundation; either version 2, or (at your option) @comment any later version. @comment CVS is distributed in the hope that it will be useful, @comment but WITHOUT ANY WARRANTY; without even the implied warranty of @comment MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @comment GNU General Public License for more details. @c See ../README for A4 vs. US letter size. @c When we provided A4 postscript, and people tried to @c print it on US letter, the usual complaint was that the @c page numbers would get cut off. @c If one prints US letter on A4, reportedly there is @c some extra space at the top and/or bottom, and the side @c margins are a bit narrow, but no text is lost. @c @c See @c http://www.ft.uni-erlangen.de/~mskuhn/iso-paper.html @c for more on paper sizes. Insuring that margins are @c big enough to print on either A4 or US letter does @c indeed seem to be the usual approach (RFC2346). @c This document seems to get overfull hboxes with some @c frequency (probably because the tendency is to @c sanity-check it with "make info" and run TeX less @c often). The big ugly boxes just seem to add insult @c to injury, and I'm not aware of them helping to fix @c the overfull hboxes at all. @finalout @set UPDATED 28 March 2002 @set UPDATED-MONTH March 2002 @set EDITION 4.2 @set VERSION 4.2 @settitle CVS---Concurrent Versions System v4.2 @setchapternewpage odd @c -- TODO list: @c -- Fix all lines that match "^@c -- " @c -- Also places marked with FIXME should be manual @c problems (as opposed to FIXCVS for CVS problems). @c @splitrcskeyword{} is used to avoid keyword expansion. It is replaced by @c @asis when generating info and dvi, and by in the generated html, @c such that keywords are not expanded in the generated html. @dircategory GNU Packages @dircategory Individual utilities @comment The titlepage section does not appear in the Info file. @titlepage @sp 4 @comment The title is printed in a large font. @center @titlefont{Version Management} @sp @center @titlefont{with} @sp @center @titlefont{CVS} @sp 2 @center for @sc{cvs} 4.2 @comment -release- @sp 3 @center Per Cederqvist et al @comment The following two commands start the copyright page @comment for the printed manual. This will not appear in the Info file. @page @vskip 0pt plus 1filll @noindent Copyright @copyright{} 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. @multitable @columnfractions .12 .88 @item Portions @item @tab Copyright @copyright{} 1999, 2000, 2001, 2002, 2003 Derek R. Price, @item @tab Copyright @copyright{} 2002, 2003 Ximbiot , @item @tab Copyright @copyright{} 1992, 1993, 1999 Signum Support AB, @item @tab and Copyright @copyright{} others. @end multitable Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided also that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Free Software Foundation. @end titlepage @comment ================================================================ @comment The real text starts here @comment ================================================================ @c --------------------------------------------------------------------- @node Top @top This info manual describes how to use and administer @sc{cvs} version 4.2. @c This menu is pretty long. Not sure how easily that @c can be fixed (no brilliant ideas right away)... @menu * Overview:: An introduction to CVS * Repository:: Where all your sources are stored * Starting a new project:: Starting a project with CVS * Revisions:: Numeric and symbolic names for revisions * Branching and merging:: Diverging/rejoining branches of development * Recursive behavior:: CVS descends directories * Adding and removing:: Adding/removing/renaming files/directories * History browsing:: Viewing the history of files in various ways CVS and the Real World. ----------------------- * Binary files:: CVS can handle binary files * Multiple developers:: How CVS helps a group of developers * Revision management:: Policy questions for revision management * Keyword substitution:: CVS can include the revision inside the file * Tracking sources:: Tracking third-party sources * Builds:: Issues related to CVS and builds * Special Files:: Devices, links and other non-regular files References. ----------- * CVS commands:: CVS commands share some things * Invoking CVS:: Quick reference to CVS commands * Administrative files:: Reference manual for the Administrative files * Environment variables:: All environment variables which affect CVS * Compatibility:: Upgrading CVS versions * Troubleshooting:: Some tips when nothing works * Credits:: Some of the contributors to this manual * BUGS:: Dealing with bugs in CVS or this manual * Index:: Index @end menu @c --------------------------------------------------------------------- @node Overview @chapter Overview @cindex Overview This chapter is for people who have never used @sc{cvs}, and perhaps have never used version control software before. If you are already familiar with @sc{cvs} and are just trying to learn a particular feature or remember a certain command, you can probably skip everything here. @menu * What is CVS?:: What you can do with @sc{cvs} * What is CVS not?:: Problems @sc{cvs} doesn't try to solve * A sample session:: A tour of basic @sc{cvs} usage @end menu @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node What is CVS? @section What is CVS? @cindex What is CVS? @cindex Introduction to CVS @cindex CVS, introduction to @sc{cvs} is a version control system. Using it, you can record the history of your source files. @c -- /// @c -- ///Those who cannot remember the past are condemned to repeat it. @c -- /// -- George Santayana @c -- ////// @c -- Insert history quote here! For example, bugs sometimes creep in when software is modified, and you might not detect the bug until a long time after you make the modification. With @sc{cvs}, you can easily retrieve old versions to see exactly which change caused the bug. This can sometimes be a big help. You could of course save every version of every file you have ever created. This would however waste an enormous amount of disk space. @sc{cvs} stores all the versions of a file in a single file in a clever way that only stores the differences between versions. @sc{cvs} also helps you if you are part of a group of people working on the same project. It is all too easy to overwrite each others' changes unless you are extremely careful. Some editors, like @sc{gnu} Emacs, try to make sure that the same file is never modified by two people at the same time. Unfortunately, if someone is using another editor, that safeguard will not work. @sc{cvs} solves this problem by insulating the different developers from each other. Every developer works in his own directory, and @sc{cvs} merges the work when each developer is done. @cindex History of CVS @cindex CVS, history of @cindex Credits (CVS program) @cindex Contributors (CVS program) @sc{cvs} started out as a bunch of shell scripts written by Dick Grune, posted to the newsgroup @code{comp.sources.unix} in the volume 6 release of July, 1986. While no actual code from these shell scripts is present in the current version of @sc{cvs} much of the @sc{cvs} conflict resolution algorithms come from them. In April, 1989, Brian Berliner designed and coded @sc{cvs}. Jeff Polk later helped Brian with the design of the @sc{cvs} module and vendor branch support. @cindex Source, getting CVS source You can get @sc{cvs} in a variety of ways, including free download from the internet. For more information on downloading @sc{cvs} and other @sc{cvs} topics, see: @example http://www.cvshome.org/ http://www.loria.fr/~molli/cvs-index.html @end example @cindex Mailing list @cindex List, mailing list @cindex Newsgroups There is a mailing list, known as @w{@code{info-cvs}}, devoted to @sc{cvs}. To subscribe or unsubscribe write to @w{@code{info-cvs-request@@gnu.org}}. If you prefer a usenet group, the right group is @code{comp.software.config-mgmt} which is for @sc{cvs} discussions (along with other configuration management systems). In the future, it might be possible to create a @code{comp.software.config-mgmt.cvs}, but probably only if there is sufficient @sc{cvs} traffic on @code{comp.software.config-mgmt}. @c Other random data is that past attempts to create a @c gnu.* group have failed (the relevant authorities @c say they'll do it, but don't), and that tale was very @c skeptical of comp.software.config-mgmt.cvs when the @c subject came up around 1995 or so (for one @c thing, because creating it would be a "reorg" which @c would need to take a more comprehensive look at the @c whole comp.software.config-mgmt.* hierarchy). You can also subscribe to the @code{bug-cvs} mailing list, described in more detail in @ref{BUGS}. To subscribe send mail to @code{bug-cvs-request@@gnu.org}. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node What is CVS not? @section What is CVS not? @cindex What is CVS not? @sc{cvs} can do a lot of things for you, but it does not try to be everything for everyone. @table @asis @item @sc{cvs} is not a build system. Though the structure of your repository and modules file interact with your build system (e.g. @file{Makefile}s), they are essentially independent. @sc{cvs} does not dictate how you build anything. It merely stores files for retrieval in a tree structure you devise. @sc{cvs} does not dictate how to use disk space in the checked out working directories. If you write your @file{Makefile}s or scripts in every directory so they have to know the relative positions of everything else, you wind up requiring the entire repository to be checked out. If you modularize your work, and construct a build system that will share files (via links, mounts, @code{VPATH} in @file{Makefile}s, etc.), you can arrange your disk usage however you like. But you have to remember that @emph{any} such system is a lot of work to construct and maintain. @sc{cvs} does not address the issues involved. Of course, you should place the tools created to support such a build system (scripts, @file{Makefile}s, etc) under @sc{cvs}. Figuring out what files need to be rebuilt when something changes is, again, something to be handled outside the scope of @sc{cvs}. One traditional approach is to use @code{make} for building, and use some automated tool for generating the dependencies which @code{make} uses. See @ref{Builds}, for more information on doing builds in conjunction with @sc{cvs}. @item @sc{cvs} is not a substitute for management. Your managers and project leaders are expected to talk to you frequently enough to make certain you are aware of schedules, merge points, branch names and release dates. If they don't, @sc{cvs} can't help. @sc{cvs} is an instrument for making sources dance to your tune. But you are the piper and the composer. No instrument plays itself or writes its own music. @item @sc{cvs} is not a substitute for developer communication. When faced with conflicts within a single file, most developers manage to resolve them without too much effort. But a more general definition of ``conflict'' includes problems too difficult to solve without communication between developers. @sc{cvs} cannot determine when simultaneous changes within a single file, or across a whole collection of files, will logically conflict with one another. Its concept of a @dfn{conflict} is purely textual, arising when two changes to the same base file are near enough to spook the merge (i.e. @code{diff3}) command. @sc{cvs} does not claim to help at all in figuring out non-textual or distributed conflicts in program logic. For example: Say you change the arguments to function @code{X} defined in file @file{A}. At the same time, someone edits file @file{B}, adding new calls to function @code{X} using the old arguments. You are outside the realm of @sc{cvs}'s competence. Acquire the habit of reading specs and talking to your peers. @item @sc{cvs} does not have change control Change control refers to a number of things. First of all it can mean @dfn{bug-tracking}, that is being able to keep a database of reported bugs and the status of each one (is it fixed? in what release? has the bug submitter agreed that it is fixed?). For interfacing @sc{cvs} to an external bug-tracking system, see the @file{rcsinfo} and @file{verifymsg} files (@pxref{Administrative files}). Another aspect of change control is keeping track of the fact that changes to several files were in fact changed together as one logical change. If you check in several files in a single @code{cvs commit} operation, @sc{cvs} then forgets that those files were checked in together, and the fact that they have the same log message is the only thing tying them together. Keeping a @sc{gnu} style @file{ChangeLog} can help somewhat. @c FIXME: should have an xref to a section which talks @c more about keeping ChangeLog's with CVS, but that @c section hasn't been written yet. Another aspect of change control, in some systems, is the ability to keep track of the status of each change. Some changes have been written by a developer, others have been reviewed by a second developer, and so on. Generally, the way to do this with @sc{cvs} is to generate a diff (using @code{cvs diff} or @code{diff}) and email it to someone who can then apply it using the @code{patch} utility. This is very flexible, but depends on mechanisms outside @sc{cvs} to make sure nothing falls through the cracks. @item @sc{cvs} is not an automated testing program It should be possible to enforce mandatory use of a testsuite using the @code{commitinfo} file. I haven't heard a lot about projects trying to do that or whether there are subtle gotchas, however. @item @sc{cvs} does not have a builtin process model Some systems provide ways to ensure that changes or releases go through various steps, with various approvals as needed. Generally, one can accomplish this with @sc{cvs} but it might be a little more work. In some cases you'll want to use the @file{commitinfo}, @file{loginfo}, @file{rcsinfo}, or @file{verifymsg} files, to require that certain steps be performed before cvs will allow a checkin. Also consider whether features such as branches and tags can be used to perform tasks such as doing work in a development tree and then merging certain changes over to a stable tree only once they have been proven. @end table @c --------------------------------------------------------------------- @node A sample session @section A sample session @cindex Example of a work-session @cindex Getting started @cindex Work-session, example of @cindex tc, Trivial Compiler (example) @cindex Trivial Compiler (example) @c I think an example is a pretty good way to start. But @c somewhere in here, maybe after the sample session, @c we need something which is kind of @c a "roadmap" which is more directed at sketching out @c the functionality of CVS and pointing people to @c various other parts of the manual. As it stands now @c people who read in order get dumped right into all @c manner of hair regarding remote repositories, @c creating a repository, etc. @c @c The following was in the old Basic concepts node. I don't @c know how good a job it does at introducing modules, @c or whether they need to be introduced so soon, but @c something of this sort might go into some @c introductory material somewhere. As a way of introducing @sc{cvs}, we'll go through a typical work-session using @sc{cvs}. The first thing to understand is that @sc{cvs} stores all files in a centralized @dfn{repository} (@pxref{Repository}); this section assumes that a repository is set up. @c I'm not sure that the sentence concerning the @c repository quite tells the user what they need to @c know at this point. Might need to expand on "centralized" @c slightly (maybe not here, maybe further down in the example?) Suppose you are working on a simple compiler. The source consists of a handful of C files and a @file{Makefile}. The compiler is called @samp{tc} (Trivial Compiler), and the repository is set up so that there is a module called @samp{tc}. @menu * Getting the source:: Creating a workspace * Committing your changes:: Making your work available to others * Cleaning up:: Cleaning up * Viewing differences:: Viewing differences @end menu @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Getting the source @subsection Getting the source @cindex Getting the source @cindex Checking out source @cindex Fetching source @cindex Source, getting from CVS @cindex Checkout, example The first thing you must do is to get your own working copy of the source for @samp{tc}. For this, you use the @code{checkout} command: @example $ cvs checkout tc @end example @noindent This will create a new directory called @file{tc} and populate it with the source files. @example $ cd tc $ ls CVS Makefile backend.c driver.c frontend.c parser.c @end example The @file{CVS} directory is used internally by @sc{cvs}. Normally, you should not modify or remove any of the files in it. You start your favorite editor, hack away at @file{backend.c}, and a couple of hours later you have added an optimization pass to the compiler. A note to @sc{rcs} and @sc{sccs} users: There is no need to lock the files that you want to edit. @xref{Multiple developers}, for an explanation. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Committing your changes @subsection Committing your changes @cindex Committing changes to files @cindex Log message entry When you have checked that the compiler is still compilable you decide to make a new version of @file{backend.c}. This will store your new @file{backend.c} in the repository and make it available to anyone else who is using that same repository. @example $ cvs commit backend.c @end example @noindent @sc{cvs} starts an editor, to allow you to enter a log message. You type in ``Added an optimization pass.'', save the temporary file, and exit the editor. @cindex CVSEDITOR, environment variable @cindex EDITOR, environment variable The environment variable @code{$CVSEDITOR} determines which editor is started. If @code{$CVSEDITOR} is not set, then if the environment variable @code{$EDITOR} is set, it will be used. If both @code{$CVSEDITOR} and @code{$EDITOR} are not set then there is a default which will vary with your operating system, for example @code{vi} for unix or @code{notepad} for Windows NT/95. @cindex VISUAL, environment variable In addition, @sc{cvs} checks the @code{$VISUAL} environment variable. Opinions vary on whether this behavior is desirable and whether future releases of @sc{cvs} should check @code{$VISUAL} or ignore it. You will be OK either way if you make sure that @code{$VISUAL} is either unset or set to the same thing as @code{$EDITOR}. @c This probably should go into some new node @c containing detailed info on the editor, rather than @c the intro. In fact, perhaps some of the stuff with @c CVSEDITOR and -m and so on should too. When @sc{cvs} starts the editor, it includes a list of files which are modified. For the @sc{cvs} client, this list is based on comparing the modification time of the file against the modification time that the file had when it was last gotten or updated. Therefore, if a file's modification time has changed but its contents have not, it will show up as modified. The simplest way to handle this is simply not to worry about it---if you proceed with the commit @sc{cvs} will detect that the contents are not modified and treat it as an unmodified file. The next @code{update} will clue @sc{cvs} in to the fact that the file is unmodified, and it will reset its stored timestamp so that the file will not show up in future editor sessions. @c FIXCVS: Might be nice if "commit" and other commands @c would reset that timestamp too, but currently commit @c doesn't. @c FIXME: Need to talk more about the process of @c prompting for the log message. Like show an example @c of what it pops up in the editor, for example. Also @c a discussion of how to get the "a)bort, c)ontinue, @c e)dit" prompt and what to do with it. Might also @c work in the suggestion that if you want a diff, you @c should make it before running commit (someone @c suggested that the diff pop up in the editor. I'm @c not sure that is better than telling people to run @c "cvs diff" first if that is what they want, but if @c we want to tell people that, the manual possibly @c should say it). If you want to avoid starting an editor you can specify the log message on the command line using the @samp{-m} flag instead, like this: @example $ cvs commit -m "Added an optimization pass" backend.c @end example @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Cleaning up @subsection Cleaning up @cindex Cleaning up @cindex Working copy, removing @cindex Removing your working copy @cindex Releasing your working copy Before you turn to other tasks you decide to remove your working copy of tc. One acceptable way to do that is of course @example $ cd .. $ rm -r tc @end example @noindent but a better way is to use the @code{release} command (@pxref{release}): @example $ cd .. $ cvs release -d tc M driver.c ? tc You have [1] altered files in this repository. Are you sure you want to release (and delete) directory `tc': n ** `release' aborted by user choice. @end example The @code{release} command checks that all your modifications have been committed. If history logging is enabled it also makes a note in the history file. @xref{history file}. When you use the @samp{-d} flag with @code{release}, it also removes your working copy. In the example above, the @code{release} command wrote a couple of lines of output. @samp{? tc} means that the file @file{tc} is unknown to @sc{cvs}. That is nothing to worry about: @file{tc} is the executable compiler, and it should not be stored in the repository. @xref{cvsignore}, for information about how to make that warning go away. @xref{release output}, for a complete explanation of all possible output from @code{release}. @samp{M driver.c} is more serious. It means that the file @file{driver.c} has been modified since it was checked out. The @code{release} command always finishes by telling you how many modified files you have in your working copy of the sources, and then asks you for confirmation before deleting any files or making any note in the history file. You decide to play it safe and answer @kbd{n @key{RET}} when @code{release} asks for confirmation. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Viewing differences @subsection Viewing differences @cindex Viewing differences @cindex Diff You do not remember modifying @file{driver.c}, so you want to see what has happened to that file. @example $ cd tc $ cvs diff driver.c @end example This command runs @code{diff} to compare the version of @file{driver.c} that you checked out with your working copy. When you see the output you remember that you added a command line option that enabled the optimization pass. You check it in, and release the module. @c FIXME: we haven't yet defined the term "check in". @example $ cvs commit -m "Added an optimization pass" driver.c Checking in driver.c; /usr/local/cvsroot/tc/driver.c,v <-- driver.c new revision: 1.2; previous revision: 1.1 done $ cd .. $ cvs release -d tc ? tc You have [0] altered files in this repository. Are you sure you want to release (and delete) directory `tc': y @end example @c --------------------------------------------------------------------- @node Repository @chapter The Repository @cindex Repository (intro) @cindex Repository, example @cindex Layout of repository @cindex Typical repository @cindex /usr/local/cvsroot, as example repository @cindex cvsroot The @sc{cvs} @dfn{repository} stores a complete copy of all the files and directories which are under version control. Normally, you never access any of the files in the repository directly. Instead, you use @sc{cvs} commands to get your own copy of the files into a @dfn{working directory}, and then work on that copy. When you've finished a set of changes, you check (or @dfn{commit}) them back into the repository. The repository then contains the changes which you have made, as well as recording exactly what you changed, when you changed it, and other such information. Note that the repository is not a subdirectory of the working directory, or vice versa; they should be in separate locations. @c Need some example, e.g. repository @c /usr/local/cvsroot; working directory @c /home/joe/sources. But this node is too long @c as it is; need a little reorganization... @cindex :local:, setting up @sc{cvs} can access a repository by a variety of means. It might be on the local computer, or it might be on a computer across the room or across the world. To distinguish various ways to access a repository, the repository name can start with an @dfn{access method}. For example, the access method @code{:local:} means to access a repository directory, so the repository @code{:local:/usr/local/cvsroot} means that the repository is in @file{/usr/local/cvsroot} on the computer running @sc{cvs}. For information on other access methods, see @ref{Remote repositories}. @c Can se say this more concisely? Like by passing @c more of the buck to the Remote repositories node? If the access method is omitted, then if the repository starts with @samp{/}, then @code{:local:} is assumed. If it does not start with @samp{/} then either @code{:ext:} or @code{:server:} is assumed. For example, if you have a local repository in @file{/usr/local/cvsroot}, you can use @code{/usr/local/cvsroot} instead of @code{:local:/usr/local/cvsroot}. But if (under Windows NT, for example) your local repository is @file{c:\src\cvsroot}, then you must specify the access method, as in @code{:local:c:/src/cvsroot}. @c This might appear to go in Repository storage, but @c actually it is describing something which is quite @c user-visible, when you do a "cvs co CVSROOT". This @c isn't necessary the perfect place for that, though. The repository is split in two parts. @file{$CVSROOT/CVSROOT} contains administrative files for @sc{cvs}. The other directories contain the actual user-defined modules. @menu * Specifying a repository:: Telling CVS where your repository is * Repository storage:: The structure of the repository * Working directory storage:: The structure of working directories * Intro administrative files:: Defining modules * Multiple repositories:: Multiple repositories * Creating a repository:: Creating a repository * Backing up:: Backing up a repository * Moving a repository:: Moving a repository * Remote repositories:: Accessing repositories on remote machines * Read-only access:: Granting read-only access to the repository * Server temporary directory:: The server creates temporary directories @end menu @node Specifying a repository @section Telling CVS where your repository is There are several ways to tell @sc{cvs} where to find the repository. You can name the repository on the command line explicitly, with the @code{-d} (for "directory") option: @example cvs -d /usr/local/cvsroot checkout yoyodyne/tc @end example @cindex .profile, setting CVSROOT in @cindex .cshrc, setting CVSROOT in @cindex .tcshrc, setting CVSROOT in @cindex .bashrc, setting CVSROOT in @cindex CVSROOT, environment variable Or you can set the @code{$CVSROOT} environment variable to an absolute path to the root of the repository, @file{/usr/local/cvsroot} in this example. To set @code{$CVSROOT}, @code{csh} and @code{tcsh} users should have this line in their @file{.cshrc} or @file{.tcshrc} files: @example setenv CVSROOT /usr/local/cvsroot @end example @noindent @code{sh} and @code{bash} users should instead have these lines in their @file{.profile} or @file{.bashrc}: @example CVSROOT=/usr/local/cvsroot export CVSROOT @end example @cindex Root file, in CVS directory @cindex CVS/Root file A repository specified with @code{-d} will override the @code{$CVSROOT} environment variable. Once you've checked a working copy out from the repository, it will remember where its repository is (the information is recorded in the @file{CVS/Root} file in the working copy). The @code{-d} option and the @file{CVS/Root} file both override the @code{$CVSROOT} environment variable. If @code{-d} option differs from @file{CVS/Root}, the former is used. Of course, for proper operation they should be two ways of referring to the same repository. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Repository storage @section How data is stored in the repository @cindex Repository, how data is stored For most purposes it isn't important @emph{how} @sc{cvs} stores information in the repository. In fact, the format has changed in the past, and is likely to change in the future. Since in almost all cases one accesses the repository via @sc{cvs} commands, such changes need not be disruptive. However, in some cases it may be necessary to understand how @sc{cvs} stores data in the repository, for example you might need to track down @sc{cvs} locks (@pxref{Concurrency}) or you might need to deal with the file permissions appropriate for the repository. @menu * Repository files:: What files are stored in the repository * File permissions:: File permissions * Windows permissions:: Issues specific to Windows * Attic:: Some files are stored in the Attic * CVS in repository:: Additional information in CVS directory * Locks:: CVS locks control concurrent accesses * CVSROOT storage:: A few things about CVSROOT are different @end menu @node Repository files @subsection Where files are stored within the repository @c @cindex Filenames, legal @c @cindex Legal filenames @c Somewhere we need to say something about legitimate @c characters in filenames in working directory and @c repository. Not "/" (not even on non-unix). And @c here is a specific set of issues: @c Files starting with a - are handled inconsistently. They can not @c be added to a repository with an add command, because it they are @c interpreted as a switch. They can appear in a repository if they are @c part of a tree that is imported. They can not be removed from the tree @c once they are there. @c Note that "--" *is* supported (as a @c consequence of using GNU getopt). Should document @c this somewhere ("Common options"?). The other usual technique, @c "./-foo", isn't as effective, at least for "cvs add" @c which doesn't support pathnames containing "/". The overall structure of the repository is a directory tree corresponding to the directories in the working directory. For example, supposing the repository is in @example /usr/local/cvsroot @end example @noindent here is a possible directory tree (showing only the directories): @example @t{/usr} | +--@t{local} | | | +--@t{cvsroot} | | | | | +--@t{CVSROOT} | (administrative files) | +--@t{gnu} | | | +--@t{diff} | | (source code to @sc{gnu} diff) | | | +--@t{rcs} | | (source code to @sc{rcs}) | | | +--@t{cvs} | (source code to @sc{cvs}) | +--@t{yoyodyne} | +--@t{tc} | | | +--@t{man} | | | +--@t{testing} | +--(other Yoyodyne software) @end example With the directories are @dfn{history files} for each file under version control. The name of the history file is the name of the corresponding file with @samp{,v} appended to the end. Here is what the repository for the @file{yoyodyne/tc} directory might look like: @c FIXME: Should also mention CVS (CVSREP) @c FIXME? Should we introduce Attic with an xref to @c Attic? Not sure whether that is a good idea or not. @example @code{$CVSROOT} | +--@t{yoyodyne} | | | +--@t{tc} | | | +--@t{Makefile,v} +--@t{backend.c,v} +--@t{driver.c,v} +--@t{frontend.c,v} +--@t{parser.c,v} +--@t{man} | | | +--@t{tc.1,v} | +--@t{testing} | +--@t{testpgm.t,v} +--@t{test2.t,v} @end example @cindex History files @cindex RCS history files @c The first sentence, about what history files @c contain, is kind of redundant with our intro to what the @c repository does in node Repository.... The history files contain, among other things, enough information to recreate any revision of the file, a log of all commit messages and the user-name of the person who committed the revision. The history files are known as @dfn{RCS files}, because the first program to store files in that format was a version control system known as @sc{rcs}. For a full description of the file format, see the @code{man} page @cite{rcsfile(5)}, distributed with @sc{rcs}, or the file @file{doc/RCSFILES} in the @sc{cvs} source distribution. This file format has become very common---many systems other than @sc{cvs} or @sc{rcs} can at least import history files in this format. @c FIXME: Think about including documentation for this @c rather than citing it? In the long run, getting @c this to be a standard (not sure if we can cope with @c a standards process as formal as IEEE/ANSI/ISO/etc, @c though...) is the way to go, so maybe citing is @c better. The @sc{rcs} files used in @sc{cvs} differ in a few ways from the standard format. The biggest difference is magic branches; for more information see @ref{Magic branch numbers}. Also in @sc{cvs} the valid tag names are a subset of what @sc{rcs} accepts; for @sc{cvs}'s rules see @ref{Tags}. @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node File permissions @subsection File permissions @c -- Move this to @node Creating a repository or similar @cindex Security, file permissions in repository @cindex File permissions, general @cindex Permissions, general @c FIXME: we need to somehow reflect "permissions in @c repository" versus "permissions in working @c directory" in the index entries. @cindex Group @cindex Read-only files, in repository All @samp{,v} files are created read-only, and you should not change the permission of those files. The directories inside the repository should be writable by the persons that have permission to modify the files in each directory. This normally means that you must create a UNIX group (see group(5)) consisting of the persons that are to edit the files in a project, and set up the repository so that it is that group that owns the directory. (On some systems, you also need to set the set-group-ID-on-execution bit on the repository directories (see chmod(1)) so that newly-created files and directories get the group-ID of the parent directory rather than that of the current process.) @c See also comment in commitinfo node regarding cases @c which are really awkward with unix groups. This means that you can only control access to files on a per-directory basis. Note that users must also have write access to check out files, because @sc{cvs} needs to create lock files (@pxref{Concurrency}). You can use LockDir in CVSROOT/config to put the lock files somewhere other than in the repository if you want to allow read-only access to some directories (@pxref{config}). @c CVS seems to use CVSUMASK in picking permissions for @c val-tags, but maybe we should say more about this. @c Like val-tags gets created by someone who doesn't @c have CVSUMASK set right? Also note that users must have write access to the @file{CVSROOT/val-tags} file. @sc{cvs} uses it to keep track of what tags are valid tag names (it is sometimes updated when tags are used, as well as when they are created). Each @sc{rcs} file will be owned by the user who last checked it in. This has little significance; what really matters is who owns the directories. @cindex CVSUMASK, environment variable @cindex Umask, for repository files @sc{cvs} tries to set up reasonable file permissions for new directories that are added inside the tree, but you must fix the permissions manually when a new directory should have different permissions than its parent directory. If you set the @code{CVSUMASK} environment variable that will control the file permissions which @sc{cvs} uses in creating directories and/or files in the repository. @code{CVSUMASK} does not affect the file permissions in the working directory; such files have the permissions which are typical for newly created files, except that sometimes @sc{cvs} creates them read-only (see the sections on watches, @ref{Setting a watch}; -r, @ref{Global options}; or @code{CVSREAD}, @ref{Environment variables}). @c FIXME: Need more discussion of which @c group should own the file in the repository. @c Include a somewhat detailed example of the usual @c case where CVSUMASK is 007, the developers are all @c in a group, and that group owns stuff in the @c repository. Need to talk about group ownership of @c newly-created directories/files (on some unices, @c such as SunOS4, setting the setgid bit on the @c directories will make files inherit the directory's @c group. On other unices, your mileage may vary. I @c can't remember what POSIX says about this, if @c anything). Note that using the client/server @sc{cvs} (@pxref{Remote repositories}), there is no good way to set @code{CVSUMASK}; the setting on the client machine has no effect. If you are connecting with @code{rsh}, you can set @code{CVSUMASK} in @file{.bashrc} or @file{.cshrc}, as described in the documentation for your operating system. This behavior might change in future versions of @sc{cvs}; do not rely on the setting of @code{CVSUMASK} on the client having no effect. @c FIXME: need to explain what a umask is or cite @c someplace which does. @c @c There is also a larger (largely separate) issue @c about the meaning of CVSUMASK in a non-unix context. @c For example, whether there is @c an equivalent which fits better into other @c protection schemes like POSIX.6, VMS, &c. @c @c FIXME: Need one place which discusses this @c read-only files thing. Why would one use -r or @c CVSREAD? Why would one use watches? How do they @c interact? @c @c FIXME: We need to state @c whether using CVSUMASK removes the need for manually @c fixing permissions (in fact, if we are going to mention @c manually fixing permission, we better document a lot @c better just what we mean by "fix"). Using pserver, you will generally need stricter permissions on the @sc{cvsroot} directory and directories above it in the tree; see @ref{Password authentication security}. @cindex Setuid @cindex Setgid @cindex Security, setuid @cindex Installed images (VMS) Some operating systems have features which allow a particular program to run with the ability to perform operations which the caller of the program could not. For example, the set user ID (setuid) or set group ID (setgid) features of unix or the installed image feature of VMS. @sc{cvs} was not written to use such features and therefore attempting to install @sc{cvs} in this fashion will provide protection against only accidental lapses; anyone who is trying to circumvent the measure will be able to do so, and depending on how you have set it up may gain access to more than just @sc{cvs}. You may wish to instead consider pserver. It shares some of the same attributes, in terms of possibly providing a false sense of security or opening security holes wider than the ones you are trying to fix, so read the documentation on pserver security carefully if you are considering this option (@ref{Password authentication security}). @node Windows permissions @subsection File Permission issues specific to Windows @cindex Windows, and permissions @cindex File permissions, Windows-specific @cindex Permissions, Windows-specific Some file permission issues are specific to Windows operating systems (Windows 95, Windows NT, and presumably future operating systems in this family. Some of the following might apply to OS/2 but I'm not sure). If you are using local @sc{cvs} and the repository is on a networked file system which is served by the Samba SMB server, some people have reported problems with permissions. Enabling WRITE=YES in the samba configuration is said to fix/workaround it. Disclaimer: I haven't investigated enough to know the implications of enabling that option, nor do I know whether there is something which @sc{cvs} could be doing differently in order to avoid the problem. If you find something out, please let us know as described in @ref{BUGS}. @node Attic @subsection The attic @cindex Attic You will notice that sometimes @sc{cvs} stores an @sc{rcs} file in the @code{Attic}. For example, if the @sc{cvsroot} is @file{/usr/local/cvsroot} and we are talking about the file @file{backend.c} in the directory @file{yoyodyne/tc}, then the file normally would be in @example /usr/local/cvsroot/yoyodyne/tc/backend.c,v @end example @noindent but if it goes in the attic, it would be in @example /usr/local/cvsroot/yoyodyne/tc/Attic/backend.c,v @end example @noindent @cindex Dead state instead. It should not matter from a user point of view whether a file is in the attic; @sc{cvs} keeps track of this and looks in the attic when it needs to. But in case you want to know, the rule is that the RCS file is stored in the attic if and only if the head revision on the trunk has state @code{dead}. A @code{dead} state means that file has been removed, or never added, for that revision. For example, if you add a file on a branch, it will have a trunk revision in @code{dead} state, and a branch revision in a non-@code{dead} state. @c Probably should have some more concrete examples @c here, or somewhere (not sure exactly how we should @c arrange the discussion of the dead state, versus @c discussion of the attic). @node CVS in repository @subsection The CVS directory in the repository @cindex CVS directory, in repository The @file{CVS} directory in each repository directory contains information such as file attributes (in a file called @file{CVS/fileattr}. In the future additional files may be added to this directory, so implementations should silently ignore additional files. This behavior is implemented only by @sc{cvs} 1.7 and later; for details see @ref{Watches Compatibility}. The format of the fileattr file is a series of entries of the following form (where @samp{@{} and @samp{@}} means the text between the braces can be repeated zero or more times): @var{ent-type} @var{filename} @var{attrname} = @var{attrval} @{; @var{attrname} = @var{attrval}@} @var{ent-type} is @samp{F} for a file, in which case the entry specifies the attributes for that file. @var{ent-type} is @samp{D}, and @var{filename} empty, to specify default attributes to be used for newly added files. Other @var{ent-type} are reserved for future expansion. @sc{cvs} 1.9 and older will delete them any time it writes file attributes. @sc{cvs} 1.10 and later will preserve them. Note that the order of the lines is not significant; a program writing the fileattr file may rearrange them at its convenience. There is currently no way of quoting tabs or linefeeds in the filename, @samp{=} in @var{attrname}, @samp{;} in @var{attrval}, etc. Note: some implementations also don't handle a NUL character in any of the fields, but implementations are encouraged to allow it. By convention, @var{attrname} starting with @samp{_} is for an attribute given special meaning by @sc{cvs}; other @var{attrname}s are for user-defined attributes (or will be, once implementations start supporting user-defined attributes). Builtin attributes: @table @code @item _watched Present means the file is watched and should be checked out read-only. @item _watchers Users with watches for this file. Value is @var{watcher} > @var{type} @{ , @var{watcher} > @var{type} @} where @var{watcher} is a username, and @var{type} is zero or more of edit,unedit,commit separated by @samp{+} (that is, nothing if none; there is no "none" or "all" keyword). @item _editors Users editing this file. Value is @var{editor} > @var{val} @{ , @var{editor} > @var{val} @} where @var{editor} is a username, and @var{val} is @var{time}+@var{hostname}+@var{pathname}, where @var{time} is when the @code{cvs edit} command (or equivalent) happened, and @var{hostname} and @var{pathname} are for the working directory. @end table Example: @c FIXME: sanity.sh should contain a similar test case @c so we can compare this example from something from @c Real Life(TM). See cvsclient.texi (under Notify) for more @c discussion of the date format of _editors. @example Ffile1 _watched=;_watchers=joe>edit,mary>commit Ffile2 _watched=;_editors=sue>8 Jan 1975+workstn1+/home/sue/cvs D _watched= @end example @noindent means that the file @file{file1} should be checked out read-only. Furthermore, joe is watching for edits and mary is watching for commits. The file @file{file2} should be checked out read-only; sue started editing it on 8 Jan 1975 in the directory @file{/home/sue/cvs} on the machine @code{workstn1}. Future files which are added should be checked out read-only. To represent this example here, we have shown a space after @samp{D}, @samp{Ffile1}, and @samp{Ffile2}, but in fact there must be a single tab character there and no spaces. @node Locks @subsection CVS locks in the repository @cindex #cvs.rfl, technical details @cindex #cvs.wfl, technical details @cindex #cvs.lock, technical details @cindex Locks, cvs, technical details For an introduction to @sc{cvs} locks focusing on user-visible behavior, see @ref{Concurrency}. The following section is aimed at people who are writing tools which want to access a @sc{cvs} repository without interfering with other tools accessing the same repository. If you find yourself confused by concepts described here, like @dfn{read lock}, @dfn{write lock}, and @dfn{deadlock}, you might consult the literature on operating systems or databases. @cindex #cvs.tfl Any file in the repository with a name starting with @file{#cvs.rfl.} is a read lock. Any file in the repository with a name starting with @file{#cvs.wfl} is a write lock. Old versions of @sc{cvs} (before @sc{cvs} 1.5) also created files with names starting with @file{#cvs.tfl}, but they are not discussed here. The directory @file{#cvs.lock} serves as a master lock. That is, one must obtain this lock first before creating any of the other locks. To obtain a readlock, first create the @file{#cvs.lock} directory. This operation must be atomic (which should be true for creating a directory under most operating systems). If it fails because the directory already existed, wait for a while and try again. After obtaining the @file{#cvs.lock} lock, create a file whose name is @file{#cvs.rfl.} followed by information of your choice (for example, hostname and process identification number). Then remove the @file{#cvs.lock} directory to release the master lock. Then proceed with reading the repository. When you are done, remove the @file{#cvs.rfl} file to release the read lock. To obtain a writelock, first create the @file{#cvs.lock} directory, as with a readlock. Then check that there are no files whose names start with @file{#cvs.rfl.}. If there are, remove @file{#cvs.lock}, wait for a while, and try again. If there are no readers, then create a file whose name is @file{#cvs.wfl} followed by information of your choice (for example, hostname and process identification number). Hang on to the @file{#cvs.lock} lock. Proceed with writing the repository. When you are done, first remove the @file{#cvs.wfl} file and then the @file{#cvs.lock} directory. Note that unlike the @file{#cvs.rfl} file, the @file{#cvs.wfl} file is just informational; it has no effect on the locking operation beyond what is provided by holding on to the @file{#cvs.lock} lock itself. Note that each lock (writelock or readlock) only locks a single directory in the repository, including @file{Attic} and @file{CVS} but not including subdirectories which represent other directories under version control. To lock an entire tree, you need to lock each directory (note that if you fail to obtain any lock you need, you must release the whole tree before waiting and trying again, to avoid deadlocks). Note also that @sc{cvs} expects writelocks to control access to individual @file{foo,v} files. @sc{rcs} has a scheme where the @file{,foo,} file serves as a lock, but @sc{cvs} does not implement it and so taking out a @sc{cvs} writelock is recommended. See the comments at rcs_internal_lockfile in the @sc{cvs} source code for further discussion/rationale. @node CVSROOT storage @subsection How files are stored in the CVSROOT directory @cindex CVSROOT, storage of files The @file{$CVSROOT/CVSROOT} directory contains the various administrative files. In some ways this directory is just like any other directory in the repository; it contains @sc{rcs} files whose names end in @samp{,v}, and many of the @sc{cvs} commands operate on it the same way. However, there are a few differences. For each administrative file, in addition to the @sc{rcs} file, there is also a checked out copy of the file. For example, there is an @sc{rcs} file @file{loginfo,v} and a file @file{loginfo} which contains the latest revision contained in @file{loginfo,v}. When you check in an administrative file, @sc{cvs} should print @example cvs commit: Rebuilding administrative file database @end example @noindent and update the checked out copy in @file{$CVSROOT/CVSROOT}. If it does not, there is something wrong (@pxref{BUGS}). To add your own files to the files to be updated in this fashion, you can add them to the @file{checkoutlist} administrative file (@pxref{checkoutlist}). @cindex modules.db @cindex modules.pag @cindex modules.dir By default, the @file{modules} file behaves as described above. If the modules file is very large, storing it as a flat text file may make looking up modules slow (I'm not sure whether this is as much of a concern now as when @sc{cvs} first evolved this feature; I haven't seen benchmarks). Therefore, by making appropriate edits to the @sc{cvs} source code one can store the modules file in a database which implements the @code{ndbm} interface, such as Berkeley db or GDBM. If this option is in use, then the modules database will be stored in the files @file{modules.db}, @file{modules.pag}, and/or @file{modules.dir}. @c I think fileattr also will use the database stuff. @c Anything else? For information on the meaning of the various administrative files, see @ref{Administrative files}. @node Working directory storage @section How data is stored in the working directory @c FIXME: Somewhere we should discuss timestamps (test @c case "stamps" in sanity.sh). But not here. Maybe @c in some kind of "working directory" chapter which @c would encompass the "Builds" one? But I'm not sure @c whether that is a good organization (is it based on @c what the user wants to do?). @cindex CVS directory, in working directory While we are discussing @sc{cvs} internals which may become visible from time to time, we might as well talk about what @sc{cvs} puts in the @file{CVS} directories in the working directories. As with the repository, @sc{cvs} handles this information and one can usually access it via @sc{cvs} commands. But in some cases it may be useful to look at it, and other programs, such as the @code{jCVS} graphical user interface or the @code{VC} package for emacs, may need to look at it. Such programs should follow the recommendations in this section if they hope to be able to work with other programs which use those files, including future versions of the programs just mentioned and the command-line @sc{cvs} client. The @file{CVS} directory contains several files. Programs which are reading this directory should silently ignore files which are in the directory but which are not documented here, to allow for future expansion. The files are stored according to the text file convention for the system in question. This means that working directories are not portable between systems with differing conventions for storing text files. This is intentional, on the theory that the files being managed by @sc{cvs} probably will not be portable between such systems either. @table @file @item Root This file contains the current @sc{cvs} root, as described in @ref{Specifying a repository}. @cindex Repository file, in CVS directory @cindex CVS/Repository file @item Repository This file contains the directory within the repository which the current directory corresponds with. It can be either an absolute pathname or a relative pathname; @sc{cvs} has had the ability to read either format since at least version 1.3 or so. The relative pathname is relative to the root, and is the more sensible approach, but the absolute pathname is quite common and implementations should accept either. For example, after the command @example cvs -d :local:/usr/local/cvsroot checkout yoyodyne/tc @end example @noindent @file{Root} will contain @example :local:/usr/local/cvsroot @end example @noindent and @file{Repository} will contain either @example /usr/local/cvsroot/yoyodyne/tc @end example @noindent or @example yoyodyne/tc @end example If the particular working directory does not correspond to a directory in the repository, then @file{Repository} should contain @file{CVSROOT/Emptydir}. @cindex Emptydir, in CVSROOT directory @cindex CVSROOT/Emptydir directory @cindex Entries file, in CVS directory @cindex CVS/Entries file @item Entries This file lists the files and directories in the working directory. The first character of each line indicates what sort of line it is. If the character is unrecognized, programs reading the file should silently skip that line, to allow for future expansion. If the first character is @samp{/}, then the format is: @example /@var{name}/@var{revision}/@var{timestamp}[+@var{conflict}]/@var{options}/@var{tagdate} @end example @noindent where @samp{[} and @samp{]} are not part of the entry, but instead indicate that the @samp{+} and conflict marker are optional. @var{name} is the name of the file within the directory. @var{revision} is the revision that the file in the working derives from, or @samp{0} for an added file, or @samp{-} followed by a revision for a removed file. @var{timestamp} is the timestamp of the file at the time that @sc{cvs} created it; if the timestamp differs with the actual modification time of the file it means the file has been modified. It is stored in the format used by the ISO C asctime() function (for example, @samp{Sun Apr 7 01:29:26 1996}). One may write a string which is not in that format, for example, @samp{Result of merge}, to indicate that the file should always be considered to be modified. This is not a special case; to see whether a file is modified a program should take the timestamp of the file and simply do a string compare with @var{timestamp}. If there was a conflict, @var{conflict} can be set to the modification time of the file after the file has been written with conflict markers (@pxref{Conflicts example}). Thus if @var{conflict} is subsequently the same as the actual modification time of the file it means that the user has obviously not resolved the conflict. @var{options} contains sticky options (for example @samp{-kb} for a binary file). @var{tagdate} contains @samp{T} followed by a tag name, or @samp{D} for a date, followed by a sticky tag or date. Note that if @var{timestamp} contains a pair of timestamps separated by a space, rather than a single timestamp, you are dealing with a version of @sc{cvs} earlier than @sc{cvs} 1.5 (not documented here). The timezone on the timestamp in CVS/Entries (local or universal) should be the same as the operating system stores for the timestamp of the file itself. For example, on Unix the file's timestamp is in universal time (UT), so the timestamp in CVS/Entries should be too. On @sc{vms}, the file's timestamp is in local time, so @sc{cvs} on @sc{vms} should use local time. This rule is so that files do not appear to be modified merely because the timezone changed (for example, to or from summer time). @c See comments and calls to gmtime() and friends in @c src/vers_ts.c (function time_stamp). If the first character of a line in @file{Entries} is @samp{D}, then it indicates a subdirectory. @samp{D} on a line all by itself indicates that the program which wrote the @file{Entries} file does record subdirectories (therefore, if there is such a line and no other lines beginning with @samp{D}, one knows there are no subdirectories). Otherwise, the line looks like: @example D/@var{name}/@var{filler1}/@var{filler2}/@var{filler3}/@var{filler4} @end example @noindent where @var{name} is the name of the subdirectory, and all the @var{filler} fields should be silently ignored, for future expansion. Programs which modify @code{Entries} files should preserve these fields. The lines in the @file{Entries} file can be in any order. @cindex Entries.Log file, in CVS directory @cindex CVS/Entries.Log file @item Entries.Log This file does not record any information beyond that in @file{Entries}, but it does provide a way to update the information without having to rewrite the entire @file{Entries} file, including the ability to preserve the information even if the program writing @file{Entries} and @file{Entries.Log} abruptly aborts. Programs which are reading the @file{Entries} file should also check for @file{Entries.Log}. If the latter exists, they should read @file{Entries} and then apply the changes mentioned in @file{Entries.Log}. After applying the changes, the recommended practice is to rewrite @file{Entries} and then delete @file{Entries.Log}. The format of a line in @file{Entries.Log} is a single character command followed by a space followed by a line in the format specified for a line in @file{Entries}. The single character command is @samp{A} to indicate that the entry is being added, @samp{R} to indicate that the entry is being removed, or any other character to indicate that the entire line in @file{Entries.Log} should be silently ignored (for future expansion). If the second character of the line in @file{Entries.Log} is not a space, then it was written by an older version of @sc{cvs} (not documented here). Programs which are writing rather than reading can safely ignore @file{Entries.Log} if they so choose. @cindex Entries.Backup file, in CVS directory @cindex CVS/Entries.Backup file @item Entries.Backup This is a temporary file. Recommended usage is to write a new entries file to @file{Entries.Backup}, and then to rename it (atomically, where possible) to @file{Entries}. @cindex Entries.Static file, in CVS directory @cindex CVS/Entries.Static file @item Entries.Static The only relevant thing about this file is whether it exists or not. If it exists, then it means that only part of a directory was gotten and @sc{cvs} will not create additional files in that directory. To clear it, use the @code{update} command with the @samp{-d} option, which will get the additional files and remove @file{Entries.Static}. @c FIXME: This needs to be better documented, in places @c other than Working Directory Storage. @c FIXCVS: The fact that this setting exists needs to @c be more visible to the user. For example "cvs @c status foo", in the case where the file would be @c gotten except for Entries.Static, might say @c something to distinguish this from other cases. @c One thing that periodically gets suggested is to @c have "cvs update" print something when it skips @c files due to Entries.Static, but IMHO that kind of @c noise pretty much makes the Entries.Static feature @c useless. @cindex Tag file, in CVS directory @cindex CVS/Tag file @cindex Sticky tags/dates, per-directory @cindex Per-directory sticky tags/dates @item Tag This file contains per-directory sticky tags or dates. The first character is @samp{T} for a branch tag, @samp{N} for a non-branch tag, or @samp{D} for a date, or another character to mean the file should be silently ignored, for future expansion. This character is followed by the tag or date. Note that per-directory sticky tags or dates are used for things like applying to files which are newly added; they might not be the same as the sticky tags or dates on individual files. For general information on sticky tags and dates, see @ref{Sticky tags}. @c FIXME: This needs to be much better documented, @c preferably not in the context of "working directory @c storage". @c FIXME: The Sticky tags node needs to discuss, or xref to @c someplace which discusses, per-directory sticky @c tags and the distinction with per-file sticky tags. @cindex Notify file, in CVS directory @cindex CVS/Notify file @item Notify This file stores notifications (for example, for @code{edit} or @code{unedit}) which have not yet been sent to the server. Its format is not yet documented here. @cindex Notify.tmp file, in CVS directory @cindex CVS/Notify.tmp file @item Notify.tmp This file is to @file{Notify} as @file{Entries.Backup} is to @file{Entries}. That is, to write @file{Notify}, first write the new contents to @file{Notify.tmp} and then (atomically where possible), rename it to @file{Notify}. @cindex Base directory, in CVS directory @cindex CVS/Base directory @item Base If watches are in use, then an @code{edit} command stores the original copy of the file in the @file{Base} directory. This allows the @code{unedit} command to operate even if it is unable to communicate with the server. @cindex Baserev file, in CVS directory @cindex CVS/Baserev file @item Baserev The file lists the revision for each of the files in the @file{Base} directory. The format is: @example B@var{name}/@var{rev}/@var{expansion} @end example @noindent where @var{expansion} should be ignored, to allow for future expansion. @cindex Baserev.tmp file, in CVS directory @cindex CVS/Baserev.tmp file @item Baserev.tmp This file is to @file{Baserev} as @file{Entries.Backup} is to @file{Entries}. That is, to write @file{Baserev}, first write the new contents to @file{Baserev.tmp} and then (atomically where possible), rename it to @file{Baserev}. @cindex Template file, in CVS directory @cindex CVS/Template file @item Template This file contains the template specified by the @file{rcsinfo} file (@pxref{rcsinfo}). It is only used by the client; the non-client/server @sc{cvs} consults @file{rcsinfo} directly. @end table @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Intro administrative files @section The administrative files @cindex Administrative files (intro) @cindex Modules file @cindex CVSROOT, module name @cindex Defining modules (intro) @c FIXME: this node should be reorganized into "general @c information about admin files" and put the "editing @c admin files" stuff up front rather than jumping into @c the details of modules right away. Then the @c Administrative files node can go away, the information @c on each admin file distributed to a place appropriate @c to its function, and this node can contain a table @c listing each file and a @ref to its detailed description. The directory @file{$CVSROOT/CVSROOT} contains some @dfn{administrative files}. @xref{Administrative files}, for a complete description. You can use @sc{cvs} without any of these files, but some commands work better when at least the @file{modules} file is properly set up. The most important of these files is the @file{modules} file. It defines all modules in the repository. This is a sample @file{modules} file. @c FIXME: The CVSROOT line is a goofy example now that @c mkmodules doesn't exist. @example CVSROOT CVSROOT modules CVSROOT modules cvs gnu/cvs rcs gnu/rcs diff gnu/diff tc yoyodyne/tc @end example The @file{modules} file is line oriented. In its simplest form each line contains the name of the module, whitespace, and the directory where the module resides. The directory is a path relative to @code{$CVSROOT}. The last four lines in the example above are examples of such lines. @c FIXME: might want to introduce the concept of options in modules file @c (the old example which was here, -i mkmodules, is obsolete). The line that defines the module called @samp{modules} uses features that are not explained here. @xref{modules}, for a full explanation of all the available features. @c FIXME: subsection without node is bogus @subsection Editing administrative files @cindex Editing administrative files @cindex Administrative files, editing them You edit the administrative files in the same way that you would edit any other module. Use @samp{cvs checkout CVSROOT} to get a working copy, edit it, and commit your changes in the normal way. It is possible to commit an erroneous administrative file. You can often fix the error and check in a new revision, but sometimes a particularly bad error in the administrative file makes it impossible to commit new revisions. @c @xref{Bad administrative files} for a hint @c about how to solve such situations. @c -- administrative file checking-- @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Multiple repositories @section Multiple repositories @cindex Multiple repositories @cindex Repositories, multiple @cindex Many repositories @cindex Parallel repositories @cindex Disjoint repositories @cindex CVSROOT, multiple repositories In some situations it is a good idea to have more than one repository, for instance if you have two development groups that work on separate projects without sharing any code. All you have to do to have several repositories is to specify the appropriate repository, using the @code{CVSROOT} environment variable, the @samp{-d} option to @sc{cvs}, or (once you have checked out a working directory) by simply allowing @sc{cvs} to use the repository that was used to check out the working directory (@pxref{Specifying a repository}). The big advantage of having multiple repositories is that they can reside on different servers. With @sc{cvs} version 1.10, a single command cannot recurse into directories from different repositories. With development versions of @sc{cvs}, you can check out code from multiple servers into your working directory. @sc{cvs} will recurse and handle all the details of making connections to as many server machines as necessary to perform the requested command. Here is an example of how to set up a working directory: @example cvs -d server1:/cvs co dir1 cd dir1 cvs -d server2:/root co sdir cvs update @end example The @code{cvs co} commands set up the working directory, and then the @code{cvs update} command will contact server2, to update the dir1/sdir subdirectory, and server1, to update everything else. @c FIXME: Does the FAQ have more about this? I have a @c dim recollection, but I'm too lazy to check right now. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Creating a repository @section Creating a repository @cindex Repository, setting up @cindex Creating a repository @cindex Setting up a repository To set up a @sc{cvs} repository, first choose the machine and disk on which you want to store the revision history of the source files. CPU and memory requirements are modest, so most machines should be adequate. For details see @ref{Server requirements}. @c Possible that we should be providing a quick rule of @c thumb, like the 32M memory for the server. That @c might increase the number of people who are happy @c with the answer, without following the xref. To estimate disk space requirements, if you are importing RCS files from another system, the size of those files is the approximate initial size of your repository, or if you are starting without any version history, a rule of thumb is to allow for the server approximately three times the size of the code to be under @sc{cvs} for the repository (you will eventually outgrow this, but not for a while). On the machines on which the developers will be working, you'll want disk space for approximately one working directory for each developer (either the entire tree or a portion of it, depending on what each developer uses). The repository should be accessible (directly or via a networked file system) from all machines which want to use @sc{cvs} in server or local mode; the client machines need not have any access to it other than via the @sc{cvs} protocol. It is not possible to use @sc{cvs} to read from a repository which one only has read access to; @sc{cvs} needs to be able to create lock files (@pxref{Concurrency}). @cindex init (subcommand) To create a repository, run the @code{cvs init} command. It will set up an empty repository in the @sc{cvs} root specified in the usual way (@pxref{Repository}). For example, @example cvs -d /usr/local/cvsroot init @end example @code{cvs init} is careful to never overwrite any existing files in the repository, so no harm is done if you run @code{cvs init} on an already set-up repository. @code{cvs init} will enable history logging; if you don't want that, remove the history file after running @code{cvs init}. @xref{history file}. @node Backing up @section Backing up a repository @cindex Repository, backing up @cindex Backing up, repository There is nothing particularly magical about the files in the repository; for the most part it is possible to back them up just like any other files. However, there are a few issues to consider. @cindex Locks, cvs, and backups @cindex #cvs.rfl, and backups The first is that to be paranoid, one should either not use @sc{cvs} during the backup, or have the backup program lock @sc{cvs} while doing the backup. To not use @sc{cvs}, you might forbid logins to machines which can access the repository, turn off your @sc{cvs} server, or similar mechanisms. The details would depend on your operating system and how you have @sc{cvs} set up. To lock @sc{cvs}, you would create @file{#cvs.rfl} locks in each repository directory. See @ref{Concurrency}, for more on @sc{cvs} locks. Having said all this, if you just back up without any of these precautions, the results are unlikely to be particularly dire. Restoring from backup, the repository might be in an inconsistent state, but this would not be particularly hard to fix manually. When you restore a repository from backup, assuming that changes in the repository were made after the time of the backup, working directories which were not affected by the failure may refer to revisions which no longer exist in the repository. Trying to run @sc{cvs} in such directories will typically produce an error message. One way to get those changes back into the repository is as follows: @itemize @bullet @item Get a new working directory. @item Copy the files from the working directory from before the failure over to the new working directory (do not copy the contents of the @file{CVS} directories, of course). @item Working in the new working directory, use commands such as @code{cvs update} and @code{cvs diff} to figure out what has changed, and then when you are ready, commit the changes into the repository. @end itemize @node Moving a repository @section Moving a repository @cindex Repository, moving @cindex Moving a repository @cindex Copying a repository Just as backing up the files in the repository is pretty much like backing up any other files, if you need to move a repository from one place to another it is also pretty much like just moving any other collection of files. The main thing to consider is that working directories point to the repository. The simplest way to deal with a moved repository is to just get a fresh working directory after the move. Of course, you'll want to make sure that the old working directory had been checked in before the move, or you figured out some other way to make sure that you don't lose any changes. If you really do want to reuse the existing working directory, it should be possible with manual surgery on the @file{CVS/Repository} files. You can see @ref{Working directory storage}, for information on the @file{CVS/Repository} and @file{CVS/Root} files, but unless you are sure you want to bother, it probably isn't worth it. @c FIXME: Surgery on CVS/Repository should be avoided @c by making RELATIVE_REPOS the default. @c FIXME-maybe: might want some documented way to @c change the CVS/Root files in some particular tree. @c But then again, I don't know, maybe just having @c people do this in perl/shell/&c isn't so bad... @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Remote repositories @section Remote repositories @cindex Repositories, remote @cindex Remote repositories @cindex Client/Server Operation @cindex Server, CVS @cindex Remote repositories, port specification @cindex Repositories, remote, port specification @cindex Client/Server Operation, port specification @cindex pserver (client/server connection method), port specification @cindex kserver (client/server connection method), port specification @cindex gserver (client/server connection method), port specification @cindex port, specifying for remote repositories Your working copy of the sources can be on a different machine than the repository. Using @sc{cvs} in this manner is known as @dfn{client/server} operation. You run @sc{cvs} on a machine which can mount your working directory, known as the @dfn{client}, and tell it to communicate to a machine which can mount the repository, known as the @dfn{server}. Generally, using a remote repository is just like using a local one, except that the format of the repository name is: @example [:@var{method}:][[@var{user}][:@var{password}]@@]@var{hostname}[:[@var{port}]]/path/to/repository @end example Specifying a password in the repository name is not recommended during checkout, since this will cause @sc{cvs} to store a cleartext copy of the password in each created directory. @code{cvs login} first instead (@pxref{Password authentication client}). The details of exactly what needs to be set up depend on how you are connecting to the server. If @var{method} is not specified, and the repository name contains @samp{:}, then the default is @code{ext} or @code{server}, depending on your platform; both are described in @ref{Connecting via rsh}. @c Should we try to explain which platforms are which? @c Platforms like unix and VMS, which only allow @c privileged programs to bind to sockets <1024 lose on @c :server: @c Platforms like Mac and VMS, whose rsh program is @c unusable or nonexistent, lose on :ext: @c Platforms like OS/2 and NT probably could plausibly @c default either way (modulo -b troubles). @c FIXME: We need to have a better way of explaining @c what method to use. This presentation totally @c obscures the fact that :ext: and CVS_RSH is the way to @c use SSH, for example. Plus it incorrectly implies @c that you need an @code{rsh} binary on the client to use @c :server:. @c Also note that rsh not pserver is the right choice if you want @c users to be able to create their own repositories @c (because of the --allow-root related issues). @menu * Server requirements:: Memory and other resources for servers * Connecting via rsh:: Using the @code{rsh} program to connect * Password authenticated:: Direct connections using passwords * GSSAPI authenticated:: Direct connections using GSSAPI * Kerberos authenticated:: Direct connections with kerberos * Connecting via fork:: Using a forked @code{cvs server} to connect @end menu @node Server requirements @subsection Server requirements The quick answer to what sort of machine is suitable as a server is that requirements are modest---a server with 32M of memory or even less can handle a fairly large source tree with a fair amount of activity. @c Say something about CPU speed too? I'm even less sure @c what to say on that subject... The real answer, of course, is more complicated. Estimating the known areas of large memory consumption should be sufficient to estimate memory requirements. There are two such areas documented here; other memory consumption should be small by comparison (if you find that is not the case, let us know, as described in @ref{BUGS}, so we can update this documentation). The first area of big memory consumption is large checkouts, when using the @sc{cvs} server. The server consists of two processes for each client that it is serving. Memory consumption on the child process should remain fairly small. Memory consumption on the parent process, particularly if the network connection to the client is slow, can be expected to grow to slightly more than the size of the sources in a single directory, or two megabytes, whichever is larger. @c "two megabytes" of course is SERVER_HI_WATER. But @c we don't mention that here because we are @c documenting the default configuration of CVS. If it @c is a "standard" thing to change that value, it @c should be some kind of run-time configuration. @c @c See cvsclient.texi for more on the design decision @c to not have locks in place while waiting for the @c client, which is what results in memory consumption @c as high as this. Multiplying the size of each @sc{cvs} server by the number of servers which you expect to have active at one time should give an idea of memory requirements for the server. For the most part, the memory consumed by the parent process probably can be swap space rather than physical memory. @c Has anyone verified that notion about swap space? @c I say it based pretty much on guessing that the @c ->text of the struct buffer_data only gets accessed @c in a first in, first out fashion, but I haven't @c looked very closely. @c What about disk usage in /tmp on the server? I think that @c it can be substantial, but I haven't looked at this @c again and tried to figure it out ("cvs import" is @c probably the worst case...). The second area of large memory consumption is @code{diff}, when checking in large files. This is required even for binary files. The rule of thumb is to allow about ten times the size of the largest file you will want to check in, although five times may be adequate. For example, if you want to check in a file which is 10 megabytes, you should have 100 megabytes of memory on the machine doing the checkin (the server machine for client/server, or the machine running @sc{cvs} for non-client/server). This can be swap space rather than physical memory. Because the memory is only required briefly, there is no particular need to allow memory for more than one such checkin at a time. @c The 5-10 times rule of thumb is from Paul Eggert for @c GNU diff. I don't think it is in the GNU diff @c manual or anyplace like that. @c @c Probably we could be saying more about @c non-client/server CVS. @c I would guess for non-client/server CVS in an NFS @c environment the biggest issues are the network and @c the NFS server. Resource consumption for the client is even more modest---any machine with enough capacity to run the operating system in question should have little trouble. @c Is that true? I think the client still wants to @c (bogusly) store entire files in memory at times. For information on disk space requirements, see @ref{Creating a repository}. @node Connecting via rsh @subsection Connecting with rsh @cindex rsh @sc{cvs} uses the @samp{rsh} protocol to perform these operations, so the remote user host needs to have a @file{.rhosts} file which grants access to the local user. Note that the program that @sc{cvs} uses for this purpose may be specified using the @file{--with-rsh} flag to configure. For example, suppose you are the user @samp{mozart} on the local machine @samp{toe.example.com}, and the server machine is @samp{faun.example.org}. On faun, put the following line into the file @file{.rhosts} in @samp{bach}'s home directory: @example toe.example.com mozart @end example @noindent Then test that @samp{rsh} is working with @example rsh -l bach faun.example.org 'echo $PATH' @end example @cindex CVS_SERVER, environment variable Next you have to make sure that @code{rsh} will be able to find the server. Make sure that the path which @code{rsh} printed in the above example includes the directory containing a program named @code{cvs} which is the server. You need to set the path in @file{.bashrc}, @file{.cshrc}, etc., not @file{.login} or @file{.profile}. Alternately, you can set the environment variable @code{CVS_SERVER} on the client machine to the filename of the server you want to use, for example @file{/usr/local/bin/cvs-1.6}. @c FIXME: there should be a way to specify the @c program in CVSROOT, not CVS_SERVER, so that one can use @c different ones for different roots. e.g. ":server;cvs=cvs-1.6:" @c instead of ":server:". There is no need to edit @file{inetd.conf} or start a @sc{cvs} server daemon. @cindex :server:, setting up @cindex :ext:, setting up @cindex Kerberos, using kerberized rsh @cindex SSH (rsh replacement) @cindex rsh replacements (Kerberized, SSH, &c) There are two access methods that you use in @code{CVSROOT} for rsh. @code{:server:} specifies an internal rsh client, which is supported only by some @sc{cvs} ports. @code{:ext:} specifies an external rsh program. By default this is @code{rsh} (unless otherwise specified by the @file{--with-rsh} flag to configure) but you may set the @code{CVS_RSH} environment variable to invoke another program which can access the remote server (for example, @code{remsh} on HP-UX 9 because @code{rsh} is something different). It must be a program which can transmit data to and from the server without modifying it; for example the Windows NT @code{rsh} is not suitable since it by default translates between CRLF and LF. The OS/2 @sc{cvs} port has a hack to pass @samp{-b} to @code{rsh} to get around this, but since this could potentially cause problems for programs other than the standard @code{rsh}, it may change in the future. If you set @code{CVS_RSH} to @code{SSH} or some other rsh replacement, the instructions in the rest of this section concerning @file{.rhosts} and so on are likely to be inapplicable; consult the documentation for your rsh replacement. @c FIXME: there should be a way to specify the @c program in CVSROOT, not CVS_RSH, so that one can use @c different ones for different roots. e.g. ":ext;rsh=remsh:" @c instead of ":ext:". @c See also the comment in src/client.c for rationale @c concerning "rsh" being the default and never @c "remsh". Continuing our example, supposing you want to access the module @file{foo} in the repository @file{/usr/local/cvsroot/}, on machine @file{faun.example.org}, you are ready to go: @example cvs -d :ext:bach@@faun.example.org:/usr/local/cvsroot checkout foo @end example @noindent (The @file{bach@@} can be omitted if the username is the same on both the local and remote hosts.) @c Should we mention "rsh host echo hi" and "rsh host @c cat" (the latter followed by typing text and ^D) @c as troubleshooting techniques? Probably yes @c (people tend to have trouble setting this up), @c but this kind of thing can be hard to spell out. @node Password authenticated @subsection Direct connection with password authentication The @sc{cvs} client can also connect to the server using a password protocol. This is particularly useful if using @code{rsh} is not feasible (for example, the server is behind a firewall), and Kerberos also is not available. To use this method, it is necessary to make some adjustments on both the server and client sides. @menu * Password authentication server:: Setting up the server * Password authentication client:: Using the client * Password authentication security:: What this method does and does not do @end menu @node Password authentication server @subsubsection Setting up the server for password authentication First of all, you probably want to tighten the permissions on the @file{$CVSROOT} and @file{$CVSROOT/CVSROOT} directories. See @ref{Password authentication security}, for more details. @cindex pserver (subcommand) @cindex Remote repositories, port specification @cindex Repositories, remote, port specification @cindex Client/Server Operation, port specification @cindex pserver (client/server connection method), port specification @cindex kserver (client/server connection method), port specification @cindex gserver (client/server connection method), port specification @cindex port, specifying for remote repositories @cindex Password server, setting up @cindex Authenticating server, setting up @cindex inetd, configuring for pserver @cindex xinetd, configuring for pserver @c FIXME: this isn't quite right regarding port @c numbers; CVS looks up "cvspserver" in @c /etc/services (on unix, but what about non-unix?). On the server side, the file @file{/etc/inetd.conf} needs to be edited so @code{inetd} knows to run the command @code{cvs pserver} when it receives a connection on the right port. By default, the port number is 2401; it would be different if your client were compiled with @code{CVS_AUTH_PORT} defined to something else, though. This can also be specified in the CVSROOT variable (@pxref{Remote repositories}) or overridden with the CVS_CLIENT_PORT environment variable (@pxref{Environment variables}). If your @code{inetd} allows raw port numbers in @file{/etc/inetd.conf}, then the following (all on a single line in @file{inetd.conf}) should be sufficient: @example 2401 stream tcp nowait root /usr/local/bin/cvs cvs -f --allow-root=/usr/cvsroot pserver @end example @noindent (You could also use the @samp{-T} option to specify a temporary directory.) The @samp{--allow-root} option specifies the allowable @sc{cvsroot} directory. Clients which attempt to use a different @sc{cvsroot} directory will not be allowed to connect. If there is more than one @sc{cvsroot} directory which you want to allow, repeat the option. (Unfortunately, many versions of @code{inetd} have very small limits on the number of arguments and/or the total length of the command. The usual solution to this problem is to have @code{inetd} run a shell script which then invokes @sc{cvs} with the necessary arguments.) If your @code{inetd} wants a symbolic service name instead of a raw port number, then put this in @file{/etc/services}: @example cvspserver 2401/tcp @end example @noindent and put @code{cvspserver} instead of @code{2401} in @file{inetd.conf}. If your system uses @code{xinetd} instead of @code{inetd}, the procedure is slightly different. Create a file called @file{/etc/xinetd.d/cvspserver} containing the following: @example service cvspserver @{ port = 2401 socket_type = stream protocol = tcp wait = no user = root passenv = PATH server = /usr/local/bin/cvs server_args = -f --allow-root=/usr/cvsroot pserver @} @end example @noindent (If @code{cvspserver} is defined in @file{/etc/services}, you can omit the @code{port} line.) Once the above is taken care of, restart your @code{inetd}, or do whatever is necessary to force it to reread its initialization files. If you are having trouble setting this up, see @ref{Connection}. @cindex CVS passwd file @cindex passwd (admin file) Because the client stores and transmits passwords in cleartext (almost---see @ref{Password authentication security}, for details), a separate @sc{cvs} password file is generally used, so people don't compromise their regular passwords when they access the repository. This file is @file{$CVSROOT/CVSROOT/passwd} (@pxref{Intro administrative files}). It uses a colon-separated format, similar to @file{/etc/passwd} on Unix systems, except that it has fewer fields: @sc{cvs} username, optional password, and an optional system username for @sc{cvs} to run as if authentication succeeds. Here is an example @file{passwd} file with five entries: @example anonymous: bach:ULtgRLXo7NRxs spwang:1sOp854gDF3DY melissa:tGX1fS8sun6rY:pubcvs qproj:XR4EZcEs0szik:pubcvs @end example @noindent (The passwords are encrypted according to the standard Unix @code{crypt()} function, so it is possible to paste in passwords directly from regular Unix @file{/etc/passwd} files.) The first line in the example will grant access to any @sc{cvs} client attempting to authenticate as user @code{anonymous}, no matter what password they use, including an empty password. (This is typical for sites granting anonymous read-only access; for information on how to do the "read-only" part, see @ref{Read-only access}.) The second and third lines will grant access to @code{bach} and @code{spwang} if they supply their respective plaintext passwords. @cindex User aliases The fourth line will grant access to @code{melissa}, if she supplies the correct password, but her @sc{cvs} operations will actually run on the server side under the system user @code{pubcvs}. Thus, there need not be any system user named @code{melissa}, but there @emph{must} be one named @code{pubcvs}. The fifth line shows that system user identities can be shared: any client who successfully authenticates as @code{qproj} will actually run as @code{pubcvs}, just as @code{melissa} does. That way you could create a single, shared system user for each project in your repository, and give each developer their own line in the @file{$CVSROOT/CVSROOT/passwd} file. The @sc{cvs} username on each line would be different, but the system username would be the same. The reason to have different @sc{cvs} usernames is that @sc{cvs} will log their actions under those names: when @code{melissa} commits a change to a project, the checkin is recorded in the project's history under the name @code{melissa}, not @code{pubcvs}. And the reason to have them share a system username is so that you can arrange permissions in the relevant area of the repository such that only that account has write-permission there. If the system-user field is present, all password-authenticated @sc{cvs} commands run as that user; if no system user is specified, @sc{cvs} simply takes the @sc{cvs} username as the system username and runs commands as that user. In either case, if there is no such user on the system, then the @sc{cvs} operation will fail (regardless of whether the client supplied a valid password). The password and system-user fields can both be omitted (and if the system-user field is omitted, then also omit the colon that would have separated it from the encrypted password). For example, this would be a valid @file{$CVSROOT/CVSROOT/passwd} file: @example anonymous::pubcvs fish:rKa5jzULzmhOo:kfogel sussman:1sOp854gDF3DY @end example @noindent When the password field is omitted or empty, then the client's authentication attempt will succeed with any password, including the empty string. However, the colon after the @sc{cvs} username is always necessary, even if the password is empty. @sc{cvs} can also fall back to use system authentication. When authenticating a password, the server first checks for the user in the @file{$CVSROOT/CVSROOT/passwd} file. If it finds the user, it will use that entry for authentication as described above. But if it does not find the user, or if the @sc{cvs} @file{passwd} file does not exist, then the server can try to authenticate the username and password using the operating system's user-lookup routines (this "fallback" behavior can be disabled by setting @code{SystemAuth=no} in the @sc{cvs} @file{config} file, @pxref{config}). The default fallback behaviour is to look in @file{/etc/passwd} for this system password unless your system has PAM (Pluggable Authentication Modules) and your @sc{cvs} server executable was configured to use it at compile time (using @code{./configure --enable-pam} - see the INSTALL file for more). In this case, PAM will be consulted instead. This means that @sc{cvs} can be configured to use any password authentication source PAM can be configured to use (possibilities include a simple UNIX password, NIS, LDAP, and others) in its global configuration file (usually @file{/etc/pam.conf} or possibly @file{/etc/pam.d/cvs}). See your PAM documentation for more details on PAM configuration. Note that PAM is an experimental feature in @sc{cvs} and feedback is encouraged. Please send a mail to one of the @sc{cvs} mailing lists (@code{info-cvs@@gnu.org} or @code{bug-cvs@@gnu.org}) if you use the @sc{cvs} PAM support. @strong{WARNING: Using PAM gives the system administrator much more flexibility about how @sc{cvs} users are authenticated but no more security than other methods. See below for more.} CVS needs an "auth" and "account" module in the PAM configuration file. A typical PAM configuration would therefore have the following lines in @file{/etc/pam.conf} to emulate the standard @sc{cvs} system @file{/etc/passwd} authentication: @example cvs auth required pam_unix.so cvs account required pam_unix.so @end example The the equivalent @file{/etc/pam.d/cvs} would contain @example auth required pam_unix.so account required pam_unix.so @end example Some systems require a full path to the module so that @file{pam_unix.so} (Linux) would become something like @file{/usr/lib/security/$ISA/pam_unix.so.1} (Sun Solaris). See the @file{contrib/pam} subdirectory of the @sc{cvs} source distribution for further example configurations. The PAM service name given above as "cvs" is just the service name in the default configuration amd can be set using @code{./configure --with-hardcoded-pam-service-name=} before compiling. @sc{cvs} can also be configured to use whatever name it is invoked as as its PAM service name using @code{./configure --without-hardcoded-pam-service-name}, but this feature should not be used if you may not have control of the name @sc{cvs} will be invoked as. Be aware, also, that falling back to system authentication might be a security risk: @sc{cvs} operations would then be authenticated with that user's regular login password, and the password flies across the network in plaintext. See @ref{Password authentication security} for more on this. This may be more of a problem with PAM authentication because it is likely that the source of the system password is some central authentication service like LDAP which is also used to authenticate other services. On the other hand, PAM makes it very easy to change your password regularly. If they are given the option of a one-password system for all of their activities, users are often more willing to change their password on a regular basis. In the non-PAM configuration where the password is stored in the @file{CVSROOT/passwd} file, it is difficult to change passwords on a regular basis since only administrative users (or in some cases processes that act as an administrative user) are typicaly given access to modify this file. Either there needs to be some hand-crafted web page or set-uid program to update the file, or the update needs to be done by submitting a request to an administrator to perform the duty by hand. In the first case, having to remember to update a separate password on a periodic basis can be difficult. In the second case, the manual nature of the change will typically mean that the password will not be changed unless it is absolutely necessary. Note that PAM administrators should probably avoid configuring one-time-passwords (OTP) for @sc{cvs} authentication/authorization. If OTPs are desired, the administrator may wish to encourage the use of one of the other Client/Server access methods. See the section on @pxref{Remote repositories} for a list of other methods. Right now, the only way to put a password in the @sc{cvs} @file{passwd} file is to paste it there from somewhere else. Someday, there may be a @code{cvs passwd} command. Unlike many of the files in @file{$CVSROOT/CVSROOT}, it is normal to edit the @file{passwd} file in-place, rather than via @sc{cvs}. This is because of the possible security risks of having the @file{passwd} file checked out to people's working copies. If you do want to include the @file{passwd} file in checkouts of @file{$CVSROOT/CVSROOT}, see @ref{checkoutlist}. @c We might also suggest using the @code{htpasswd} command @c from freely available web servers as well, but that @c would open up a can of worms in that the users next @c questions are likely to be "where do I get it?" and @c "how do I use it?" @c Also note that htpasswd, at least the version I had, @c likes to clobber the third field. @node Password authentication client @subsubsection Using the client with password authentication @cindex Login (subcommand) @cindex Password client, using @cindex Authenticated client, using @cindex :pserver:, setting up To run a @sc{cvs} command on a remote repository via the password-authenticating server, one specifies the @code{pserver} protocol, optional username, repository host, an optional port number, and path to the repository. For example: @example cvs -d :pserver:faun.example.org:/usr/local/cvsroot checkout someproj @end example @noindent or @example CVSROOT=:pserver:bach@@faun.example.org:2401/usr/local/cvsroot cvs checkout someproj @end example However, unless you're connecting to a public-access repository (i.e., one where that username doesn't require a password), you'll need to supply a password or @dfn{log in} first. Logging in verifies your password with the repository and stores it in a file. It's done with the @code{login} command, which will prompt you interactively for the password if you didn't supply one as part of @var{$CVSROOT}: @example cvs -d :pserver:bach@@faun.example.org:/usr/local/cvsroot login CVS password: @end example @noindent or @example cvs -d :pserver:bach:p4ss30rd@@faun.example.org:/usr/local/cvsroot login @end example After you enter the password, @sc{cvs} verifies it with the server. If the verification succeeds, then that combination of username, host, repository, and password is permanently recorded, so future transactions with that repository won't require you to run @code{cvs login}. (If verification fails, @sc{cvs} will exit complaining that the password was incorrect, and nothing will be recorded.) The records are stored, by default, in the file @file{$HOME/.cvspass}. That file's format is human-readable, and to a degree human-editable, but note that the passwords are not stored in cleartext---they are trivially encoded to protect them from "innocent" compromise (i.e., inadvertent viewing by a system administrator or other non-malicious person). @cindex CVS_PASSFILE, environment variable You can change the default location of this file by setting the @code{CVS_PASSFILE} environment variable. If you use this variable, make sure you set it @emph{before} @code{cvs login} is run. If you were to set it after running @code{cvs login}, then later @sc{cvs} commands would be unable to look up the password for transmission to the server. Once you have logged in, all @sc{cvs} commands using that remote repository and username will authenticate with the stored password. So, for example @example cvs -d :pserver:bach@@faun.example.org:/usr/local/cvsroot checkout foo @end example @noindent should just work (unless the password changes on the server side, in which case you'll have to re-run @code{cvs login}). Note that if the @samp{:pserver:} were not present in the repository specification, @sc{cvs} would assume it should use @code{rsh} to connect with the server instead (@pxref{Connecting via rsh}). Of course, once you have a working copy checked out and are running @sc{cvs} commands from within it, there is no longer any need to specify the repository explicitly, because @sc{cvs} can deduce the repository from the working copy's @file{CVS} subdirectory. @c FIXME: seems to me this needs somewhat more @c explanation. @cindex Logout (subcommand) The password for a given remote repository can be removed from the @code{CVS_PASSFILE} by using the @code{cvs logout} command. @node Password authentication security @subsubsection Security considerations with password authentication @cindex Security, of pserver The passwords are stored on the client side in a trivial encoding of the cleartext, and transmitted in the same encoding. The encoding is done only to prevent inadvertent password compromises (i.e., a system administrator accidentally looking at the file), and will not prevent even a naive attacker from gaining the password. @c FIXME: The bit about "access to the repository @c implies general access to the system is *not* specific @c to pserver; it applies to kerberos and SSH and @c everything else too. Should reorganize the @c documentation to make this clear. The separate @sc{cvs} password file (@pxref{Password authentication server}) allows people to use a different password for repository access than for login access. On the other hand, once a user has non-read-only access to the repository, she can execute programs on the server system through a variety of means. Thus, repository access implies fairly broad system access as well. It might be possible to modify @sc{cvs} to prevent that, but no one has done so as of this writing. @c OpenBSD uses chroot() and copies the repository to @c provide anonymous read-only access (for details see @c http://www.openbsd.org/anoncvs.shar). While this @c closes the most obvious holes, I'm not sure it @c closes enough holes to recommend it (plus it is @c *very* easy to accidentally screw up a setup of this @c type). Note that because the @file{$CVSROOT/CVSROOT} directory contains @file{passwd} and other files which are used to check security, you must control the permissions on this directory as tightly as the permissions on @file{/etc}. The same applies to the @file{$CVSROOT} directory itself and any directory above it in the tree. Anyone who has write access to such a directory will have the ability to become any user on the system. Note that these permissions are typically tighter than you would use if you are not using pserver. @c TODO: Would be really nice to document/implement a @c scheme where the CVS server can run as some non-root @c user, e.g. "cvs". CVSROOT/passwd would contain a @c bunch of entries of the form foo:xxx:cvs (or the "cvs" @c would be implicit). This would greatly reduce @c security risks such as those hinted at in the @c previous paragraph. I think minor changes to CVS @c might be required but mostly this would just need @c someone who wants to play with it, document it, &c. In summary, anyone who gets the password gets repository access (which may imply some measure of general system access as well). The password is available to anyone who can sniff network packets or read a protected (i.e., user read-only) file. If you want real security, get Kerberos. @node GSSAPI authenticated @subsection Direct connection with GSSAPI @cindex GSSAPI @cindex Security, GSSAPI @cindex :gserver:, setting up @cindex Kerberos, using :gserver: GSSAPI is a generic interface to network security systems such as Kerberos 5. If you have a working GSSAPI library, you can have @sc{cvs} connect via a direct @sc{tcp} connection, authenticating with GSSAPI. To do this, @sc{cvs} needs to be compiled with GSSAPI support; when configuring @sc{cvs} it tries to detect whether GSSAPI libraries using kerberos version 5 are present. You can also use the @file{--with-gssapi} flag to configure. The connection is authenticated using GSSAPI, but the message stream is @emph{not} authenticated by default. You must use the @code{-a} global option to request stream authentication. The data transmitted is @emph{not} encrypted by default. Encryption support must be compiled into both the client and the server; use the @file{--enable-encrypt} configure option to turn it on. You must then use the @code{-x} global option to request encryption. GSSAPI connections are handled on the server side by the same server which handles the password authentication server; see @ref{Password authentication server}. If you are using a GSSAPI mechanism such as Kerberos which provides for strong authentication, you will probably want to disable the ability to authenticate via cleartext passwords. To do so, create an empty @file{CVSROOT/passwd} password file, and set @code{SystemAuth=no} in the config file (@pxref{config}). The GSSAPI server uses a principal name of cvs/@var{hostname}, where @var{hostname} is the canonical name of the server host. You will have to set this up as required by your GSSAPI mechanism. To connect using GSSAPI, use @samp{:gserver:}. For example, @example cvs -d :gserver:faun.example.org:/usr/local/cvsroot checkout foo @end example @node Kerberos authenticated @subsection Direct connection with kerberos @cindex Kerberos, using :kserver: @cindex Security, kerberos @cindex :kserver:, setting up The easiest way to use kerberos is to use the kerberos @code{rsh}, as described in @ref{Connecting via rsh}. The main disadvantage of using rsh is that all the data needs to pass through additional programs, so it may be slower. So if you have kerberos installed you can connect via a direct @sc{tcp} connection, authenticating with kerberos. This section concerns the kerberos network security system, version 4. Kerberos version 5 is supported via the GSSAPI generic network security interface, as described in the previous section. To do this, @sc{cvs} needs to be compiled with kerberos support; when configuring @sc{cvs} it tries to detect whether kerberos is present or you can use the @file{--with-krb4} flag to configure. The data transmitted is @emph{not} encrypted by default. Encryption support must be compiled into both the client and server; use the @file{--enable-encryption} configure option to turn it on. You must then use the @code{-x} global option to request encryption. @cindex CVS_CLIENT_PORT You need to edit @file{inetd.conf} on the server machine to run @code{cvs kserver}. The client uses port 1999 by default; if you want to use another port specify it in the @code{CVSROOT} (@pxref{Remote repositories}) or the @code{CVS_CLIENT_PORT} environment variable (@pxref{Environment variables}) on the client. @cindex kinit When you want to use @sc{cvs}, get a ticket in the usual way (generally @code{kinit}); it must be a ticket which allows you to log into the server machine. Then you are ready to go: @example cvs -d :kserver:faun.example.org:/usr/local/cvsroot checkout foo @end example Previous versions of @sc{cvs} would fall back to a connection via rsh; this version will not do so. @node Connecting via fork @subsection Connecting with fork @cindex fork, access method @cindex :fork:, setting up This access method allows you to connect to a repository on your local disk via the remote protocol. In other words it does pretty much the same thing as @code{:local:}, but various quirks, bugs and the like are those of the remote @sc{cvs} rather than the local @sc{cvs}. For day-to-day operations you might prefer either @code{:local:} or @code{:fork:}, depending on your preferences. Of course @code{:fork:} comes in particularly handy in testing or debugging @code{cvs} and the remote protocol. Specifically, we avoid all of the network-related setup/configuration, timeouts, and authentication inherent in the other remote access methods but still create a connection which uses the remote protocol. To connect using the @code{fork} method, use @samp{:fork:} and the pathname to your local repository. For example: @example cvs -d :fork:/usr/local/cvsroot checkout foo @end example @cindex CVS_SERVER, and :fork: As with @code{:ext:}, the server is called @samp{cvs} by default, or the value of the @code{CVS_SERVER} environment variable. @c --------------------------------------------------------------------- @node Read-only access @section Read-only repository access @cindex Read-only repository access @cindex readers (admin file) @cindex writers (admin file) It is possible to grant read-only repository access to people using the password-authenticated server (@pxref{Password authenticated}). (The other access methods do not have explicit support for read-only users because those methods all assume login access to the repository machine anyway, and therefore the user can do whatever local file permissions allow her to do.) A user who has read-only access can do only those @sc{cvs} operations which do not modify the repository, except for certain ``administrative'' files (such as lock files and the history file). It may be desirable to use this feature in conjunction with user-aliasing (@pxref{Password authentication server}). Unlike with previous versions of @sc{cvs}, read-only users should be able merely to read the repository, and not to execute programs on the server or otherwise gain unexpected levels of access. Or to be more accurate, the @emph{known} holes have been plugged. Because this feature is new and has not received a comprehensive security audit, you should use whatever level of caution seems warranted given your attitude concerning security. There are two ways to specify read-only access for a user: by inclusion, and by exclusion. "Inclusion" means listing that user specifically in the @file{$CVSROOT/CVSROOT/readers} file, which is simply a newline-separated list of users. Here is a sample @file{readers} file: @example melissa splotnik jrandom @end example @noindent (Don't forget the newline after the last user.) "Exclusion" means explicitly listing everyone who has @emph{write} access---if the file @example $CVSROOT/CVSROOT/writers @end example @noindent exists, then only those users listed in it have write access, and everyone else has read-only access (of course, even the read-only users still need to be listed in the @sc{cvs} @file{passwd} file). The @file{writers} file has the same format as the @file{readers} file. Note: if your @sc{cvs} @file{passwd} file maps cvs users onto system users (@pxref{Password authentication server}), make sure you deny or grant read-only access using the @emph{cvs} usernames, not the system usernames. That is, the @file{readers} and @file{writers} files contain cvs usernames, which may or may not be the same as system usernames. Here is a complete description of the server's behavior in deciding whether to grant read-only or read-write access: If @file{readers} exists, and this user is listed in it, then she gets read-only access. Or if @file{writers} exists, and this user is NOT listed in it, then she also gets read-only access (this is true even if @file{readers} exists but she is not listed there). Otherwise, she gets full read-write access. Of course there is a conflict if the user is listed in both files. This is resolved in the more conservative way, it being better to protect the repository too much than too little: such a user gets read-only access. @node Server temporary directory @section Temporary directories for the server @cindex Temporary directories, and server @cindex Server, temporary directories While running, the @sc{cvs} server creates temporary directories. They are named @example cvs-serv@var{pid} @end example @noindent where @var{pid} is the process identification number of the server. They are located in the directory specified by the @samp{-T} global option (@pxref{Global options}), the @code{TMPDIR} environment variable (@pxref{Environment variables}), or, failing that, @file{/tmp}. In most cases the server will remove the temporary directory when it is done, whether it finishes normally or abnormally. However, there are a few cases in which the server does not or cannot remove the temporary directory, for example: @itemize @bullet @item If the server aborts due to an internal server error, it may preserve the directory to aid in debugging @item If the server is killed in a way that it has no way of cleaning up (most notably, @samp{kill -KILL} on unix). @item If the system shuts down without an orderly shutdown, which tells the server to clean up. @end itemize In cases such as this, you will need to manually remove the @file{cvs-serv@var{pid}} directories. As long as there is no server running with process identification number @var{pid}, it is safe to do so. @c --------------------------------------------------------------------- @node Starting a new project @chapter Starting a project with CVS @cindex Starting a project with CVS @cindex Creating a project @comment --moduledb-- Because renaming files and moving them between directories is somewhat inconvenient, the first thing you do when you start a new project should be to think through your file organization. It is not impossible to rename or move files, but it does increase the potential for confusion and @sc{cvs} does have some quirks particularly in the area of renaming directories. @xref{Moving files}. What to do next depends on the situation at hand. @menu * Setting up the files:: Getting the files into the repository * Defining the module:: How to make a module of the files @end menu @c -- File permissions! @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Setting up the files @section Setting up the files The first step is to create the files inside the repository. This can be done in a couple of different ways. @c -- The contributed scripts @menu * From files:: This method is useful with old projects where files already exists. * From other version control systems:: Old projects where you want to preserve history from another system. * From scratch:: Creating a directory tree from scratch. @end menu @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node From files @subsection Creating a directory tree from a number of files @cindex Importing files When you begin using @sc{cvs}, you will probably already have several projects that can be put under @sc{cvs} control. In these cases the easiest way is to use the @code{import} command. An example is probably the easiest way to explain how to use it. If the files you want to install in @sc{cvs} reside in @file{@var{wdir}}, and you want them to appear in the repository as @file{$CVSROOT/yoyodyne/@var{rdir}}, you can do this: @example $ cd @var{wdir} $ cvs import -m "Imported sources" yoyodyne/@var{rdir} yoyo start @end example Unless you supply a log message with the @samp{-m} flag, @sc{cvs} starts an editor and prompts for a message. The string @samp{yoyo} is a @dfn{vendor tag}, and @samp{start} is a @dfn{release tag}. They may fill no purpose in this context, but since @sc{cvs} requires them they must be present. @xref{Tracking sources}, for more information about them. You can now verify that it worked, and remove your original source directory. @c FIXME: Need to say more about "verify that it @c worked". What should the user look for in the output @c from "diff -r"? @example $ cd .. $ cvs checkout yoyodyne/@var{rdir} # @r{Explanation below} $ diff -r @var{wdir} yoyodyne/@var{rdir} $ rm -r @var{wdir} @end example @noindent Erasing the original sources is a good idea, to make sure that you do not accidentally edit them in @var{wdir}, bypassing @sc{cvs}. Of course, it would be wise to make sure that you have a backup of the sources before you remove them. The @code{checkout} command can either take a module name as argument (as it has done in all previous examples) or a path name relative to @code{$CVSROOT}, as it did in the example above. It is a good idea to check that the permissions @sc{cvs} sets on the directories inside @code{$CVSROOT} are reasonable, and that they belong to the proper groups. @xref{File permissions}. If some of the files you want to import are binary, you may want to use the wrappers features to specify which files are binary and which are not. @xref{Wrappers}. @c The node name is too long, but I am having trouble @c thinking of something more concise. @node From other version control systems @subsection Creating Files From Other Version Control Systems @cindex Importing files, from other version control systems If you have a project which you are maintaining with another version control system, such as @sc{rcs}, you may wish to put the files from that project into @sc{cvs}, and preserve the revision history of the files. @table @asis @cindex RCS, importing files from @item From RCS If you have been using @sc{rcs}, find the @sc{rcs} files---usually a file named @file{foo.c} will have its @sc{rcs} file in @file{RCS/foo.c,v} (but it could be other places; consult the @sc{rcs} documentation for details). Then create the appropriate directories in @sc{cvs} if they do not already exist. Then copy the files into the appropriate directories in the @sc{cvs} repository (the name in the repository must be the name of the source file with @samp{,v} added; the files go directly in the appropriate directory of the repository, not in an @file{RCS} subdirectory). This is one of the few times when it is a good idea to access the @sc{cvs} repository directly, rather than using @sc{cvs} commands. Then you are ready to check out a new working directory. @c Someday there probably should be a "cvs import -t @c rcs" or some such. It could even create magic @c branches. It could also do something about the case @c where the RCS file had a (non-magic) "0" branch. The @sc{rcs} file should not be locked when you move it into @sc{cvs}; if it is, @sc{cvs} will have trouble letting you operate on it. @c What is the easiest way to unlock your files if you @c have them locked? Especially if you have a lot of them? @c This is a CVS bug/misfeature; importing RCS files @c should ignore whether they are locked and leave them in @c an unlocked state. Yet another reason for a separate @c "import RCS file" command. @c How many is "many"? Or do they just import RCS files? @item From another version control system Many version control systems have the ability to export @sc{rcs} files in the standard format. If yours does, export the @sc{rcs} files and then follow the above instructions. Failing that, probably your best bet is to write a script that will check out the files one revision at a time using the command line interface to the other system, and then check the revisions into @sc{cvs}. The @file{sccs2rcs} script mentioned below may be a useful example to follow. @cindex SCCS, importing files from @item From SCCS There is a script in the @file{contrib} directory of the @sc{cvs} source distribution called @file{sccs2rcs} which converts @sc{sccs} files to @sc{rcs} files. Note: you must run it on a machine which has both @sc{sccs} and @sc{rcs} installed, and like everything else in contrib it is unsupported (your mileage may vary). @cindex PVCS, importing files from @item From PVCS There is a script in the @file{contrib} directory of the @sc{cvs} source distribution called @file{pvcs_to_rcs} which converts @sc{pvcs} archives to @sc{rcs} files. You must run it on a machine which has both @sc{pvcs} and @sc{rcs} installed, and like everything else in contrib it is unsupported (your mileage may vary). See the comments in the script for details. @end table @c CMZ and/or PATCHY were systems that were used in the @c high energy physics community (especially for @c CERNLIB). CERN has replaced them with CVS, but the @c CAR format seems to live on as a way to submit @c changes. There is a program car2cvs which converts @c but I'm not sure where one gets a copy. @c Not sure it is worth mentioning here, since it would @c appear to affect only one particular community. @c Best page for more information is: @c http://wwwcn1.cern.ch/asd/cvs/index.html @c See also: @c http://ecponion.cern.ch/ecpsa/cernlib.html @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node From scratch @subsection Creating a directory tree from scratch @c Also/instead should be documenting @c $ cvs co -l . @c $ mkdir tc @c $ cvs add tc @c $ cd tc @c $ mkdir man @c $ cvs add man @c etc. @c Using import to create the directories only is @c probably a somewhat confusing concept. For a new project, the easiest thing to do is probably to create an empty directory structure, like this: @example $ mkdir tc $ mkdir tc/man $ mkdir tc/testing @end example After that, you use the @code{import} command to create the corresponding (empty) directory structure inside the repository: @example $ cd tc $ cvs import -m "Created directory structure" yoyodyne/@var{dir} yoyo start @end example Then, use @code{add} to add files (and new directories) as they appear. Check that the permissions @sc{cvs} sets on the directories inside @code{$CVSROOT} are reasonable. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Defining the module @section Defining the module @cindex Defining a module @cindex Editing the modules file @cindex Module, defining @cindex Modules file, changing The next step is to define the module in the @file{modules} file. This is not strictly necessary, but modules can be convenient in grouping together related files and directories. In simple cases these steps are sufficient to define a module. @enumerate @item Get a working copy of the modules file. @example $ cvs checkout CVSROOT/modules $ cd CVSROOT @end example @item Edit the file and insert a line that defines the module. @xref{Intro administrative files}, for an introduction. @xref{modules}, for a full description of the modules file. You can use the following line to define the module @samp{tc}: @example tc yoyodyne/tc @end example @item Commit your changes to the modules file. @example $ cvs commit -m "Added the tc module." modules @end example @item Release the modules module. @example $ cd .. $ cvs release -d CVSROOT @end example @end enumerate @c --------------------------------------------------------------------- @node Revisions @chapter Revisions For many uses of @sc{cvs}, one doesn't need to worry too much about revision numbers; @sc{cvs} assigns numbers such as @code{1.1}, @code{1.2}, and so on, and that is all one needs to know. However, some people prefer to have more knowledge and control concerning how @sc{cvs} assigns revision numbers. If one wants to keep track of a set of revisions involving more than one file, such as which revisions went into a particular release, one uses a @dfn{tag}, which is a symbolic revision which can be assigned to a numeric revision in each file. @menu * Revision numbers:: The meaning of a revision number * Versions revisions releases:: Terminology used in this manual * Assigning revisions:: Assigning revisions * Tags:: Tags--Symbolic revisions * Tagging the working directory:: The cvs tag command * Tagging by date/tag:: The cvs rtag command * Modifying tags:: Adding, renaming, and deleting tags * Tagging add/remove:: Tags with adding and removing files * Sticky tags:: Certain tags are persistent @end menu @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Revision numbers @section Revision numbers @cindex Revision numbers @cindex Revision tree @cindex Linear development @cindex Number, revision- @cindex Decimal revision number @cindex Branch number @cindex Number, branch Each version of a file has a unique @dfn{revision number}. Revision numbers look like @samp{1.1}, @samp{1.2}, @samp{1.3.2.2} or even @samp{1.3.2.2.4.5}. A revision number always has an even number of period-separated decimal integers. By default revision 1.1 is the first revision of a file. Each successive revision is given a new number by increasing the rightmost number by one. The following figure displays a few revisions, with newer revisions to the right. @example +-----+ +-----+ +-----+ +-----+ +-----+ ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! +-----+ +-----+ +-----+ +-----+ +-----+ @end example It is also possible to end up with numbers containing more than one period, for example @samp{1.3.2.2}. Such revisions represent revisions on branches (@pxref{Branching and merging}); such revision numbers are explained in detail in @ref{Branches and revisions}. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Versions revisions releases @section Versions, revisions and releases @cindex Revisions, versions and releases @cindex Versions, revisions and releases @cindex Releases, revisions and versions A file can have several versions, as described above. Likewise, a software product can have several versions. A software product is often given a version number such as @samp{4.1.1}. Versions in the first sense are called @dfn{revisions} in this document, and versions in the second sense are called @dfn{releases}. To avoid confusion, the word @dfn{version} is almost never used in this document. @node Assigning revisions @section Assigning revisions @c We avoid the "major revision" terminology. It seems @c like jargon. Hopefully "first number" is clear enough. @c @c Well, in the context of software release numbers, @c "major" and "minor" release or version numbers are @c documented in at least the GNU Coding Standards, but I'm @c still not sure I find that a valid reason to apply the @c terminology to RCS revision numbers. "First", "Second", @c "subsequent", and so on is almost surely clearer, @c especially to a novice reader. -DRP By default, @sc{cvs} will assign numeric revisions by leaving the first number the same and incrementing the second number. For example, @code{1.1}, @code{1.2}, @code{1.3}, etc. When adding a new file, the second number will always be one and the first number will equal the highest first number of any file in that directory. For example, the current directory contains files whose highest numbered revisions are @code{1.7}, @code{3.1}, and @code{4.12}, then an added file will be given the numeric revision @code{4.1}. @c This is sort of redundant with something we said a @c while ago. Somewhere we need a better way of @c introducing how the first number can be anything @c except "1", perhaps. Also I don't think this @c presentation is clear on why we are discussing releases @c and first numbers of numeric revisions in the same @c breath. Normally there is no reason to care about the revision numbers---it is easier to treat them as internal numbers that @sc{cvs} maintains, and tags provide a better way to distinguish between things like release 1 versus release 2 of your product (@pxref{Tags}). However, if you want to set the numeric revisions, the @samp{-r} option to @code{cvs commit} can do that. The @samp{-r} option implies the @samp{-f} option, in the sense that it causes the files to be committed even if they are not modified. For example, to bring all your files up to revision 3.0 (including those that haven't changed), you might invoke: @example $ cvs commit -r 3.0 @end example Note that the number you specify with @samp{-r} must be larger than any existing revision number. That is, if revision 3.0 exists, you cannot @samp{cvs commit -r 1.3}. If you want to maintain several releases in parallel, you need to use a branch (@pxref{Branching and merging}). @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Tags @section Tags--Symbolic revisions @cindex Tags The revision numbers live a life of their own. They need not have anything at all to do with the release numbers of your software product. Depending on how you use @sc{cvs} the revision numbers might change several times between two releases. As an example, some of the source files that make up @sc{rcs} 5.6 have the following revision numbers: @cindex RCS revision numbers @example ci.c 5.21 co.c 5.9 ident.c 5.3 rcs.c 5.12 rcsbase.h 5.11 rcsdiff.c 5.10 rcsedit.c 5.11 rcsfcmp.c 5.9 rcsgen.c 5.10 rcslex.c 5.11 rcsmap.c 5.2 rcsutil.c 5.10 @end example @cindex tag (subcommand), introduction @cindex Tags, symbolic name @cindex Symbolic name (tag) @cindex Name, symbolic (tag) @cindex HEAD, as reserved tag name @cindex BASE, as reserved tag name You can use the @code{tag} command to give a symbolic name to a certain revision of a file. You can use the @samp{-v} flag to the @code{status} command to see all tags that a file has, and which revision numbers they represent. Tag names must start with an uppercase or lowercase letter and can contain uppercase and lowercase letters, digits, @samp{-}, and @samp{_}. The two tag names @code{BASE} and @code{HEAD} are reserved for use by @sc{cvs}. It is expected that future names which are special to @sc{cvs} will be specially named, for example by starting with @samp{.}, rather than being named analogously to @code{BASE} and @code{HEAD}, to avoid conflicts with actual tag names. @c Including a character such as % or = has also been @c suggested as the naming convention for future @c special tag names. Starting with . is nice because @c that is not a legal tag name as far as RCS is concerned. @c FIXME: CVS actually accepts quite a few characters @c in tag names, not just the ones documented above @c (see RCS_check_tag). RCS @c defines legitimate tag names by listing illegal @c characters rather than legal ones. CVS is said to lose its @c mind if you try to use "/" (try making such a tag sticky @c and using "cvs status" client/server--see remote @c protocol format for entries line for probable cause). @c TODO: The testsuite @c should test for whatever are documented above as @c officially-OK tag names, and CVS should at least reject @c characters that won't work, like "/". You'll want to choose some convention for naming tags, based on information such as the name of the program and the version number of the release. For example, one might take the name of the program, immediately followed by the version number with @samp{.} changed to @samp{-}, so that @sc{cvs} 1.9 would be tagged with the name @code{cvs1-9}. If you choose a consistent convention, then you won't constantly be guessing whether a tag is @code{cvs-1-9} or @code{cvs1_9} or what. You might even want to consider enforcing your convention in the taginfo file (@pxref{user-defined logging}). @c Might be nice to say more about using taginfo this @c way, like giving an example, or pointing out any particular @c issues which arise. @cindex Adding a tag @cindex Tags, example The following example shows how you can add a tag to a file. The commands must be issued inside your working directory. That is, you should issue the command in the directory where @file{backend.c} resides. @example $ cvs tag rel-0-4 backend.c T backend.c $ cvs status -v backend.c =================================================================== File: backend.c Status: Up-to-date Version: 1.4 Tue Dec 1 14:39:01 1992 RCS Version: 1.4 /u/cvsroot/yoyodyne/tc/backend.c,v Sticky Tag: (none) Sticky Date: (none) Sticky Options: (none) Existing Tags: rel-0-4 (revision: 1.4) @end example For a complete summary of the syntax of @code{cvs tag}, including the various options, see @ref{Invoking CVS}. There is seldom reason to tag a file in isolation. A more common use is to tag all the files that constitute a module with the same tag at strategic points in the development life-cycle, such as when a release is made. @example $ cvs tag rel-1-0 . cvs tag: Tagging . T Makefile T backend.c T driver.c T frontend.c T parser.c @end example @noindent (When you give @sc{cvs} a directory as argument, it generally applies the operation to all the files in that directory, and (recursively), to any subdirectories that it may contain. @xref{Recursive behavior}.) @cindex Retrieving an old revision using tags @cindex Tags, retrieving old revisions The @code{checkout} command has a flag, @samp{-r}, that lets you check out a certain revision of a module. This flag makes it easy to retrieve the sources that make up release 1.0 of the module @samp{tc} at any time in the future: @example $ cvs checkout -r rel-1-0 tc @end example @noindent This is useful, for instance, if someone claims that there is a bug in that release, but you cannot find the bug in the current working copy. You can also check out a module as it was at any given date. @xref{checkout options}. When specifying @samp{-r} to any of these commands, you will need beware of sticky tags; see @ref{Sticky tags}. When you tag more than one file with the same tag you can think about the tag as "a curve drawn through a matrix of filename vs. revision number." Say we have 5 files with the following revisions: @example @group file1 file2 file3 file4 file5 1.1 1.1 1.1 1.1 /--1.1* <-*- TAG 1.2*- 1.2 1.2 -1.2*- 1.3 \- 1.3*- 1.3 / 1.3 1.4 \ 1.4 / 1.4 \-1.5*- 1.5 1.6 @end group @end example At some time in the past, the @code{*} versions were tagged. You can think of the tag as a handle attached to the curve drawn through the tagged revisions. When you pull on the handle, you get all the tagged revisions. Another way to look at it is that you "sight" through a set of revisions that is "flat" along the tagged revisions, like this: @example @group file1 file2 file3 file4 file5 1.1 1.2 1.1 1.3 _ 1.1 1.2 1.4 1.1 / 1.2*----1.3*----1.5*----1.2*----1.1 (--- <--- Look here 1.3 1.6 1.3 \_ 1.4 1.4 1.5 @end group @end example @node Tagging the working directory @section Specifying what to tag from the working directory @cindex tag (subcommand) The example in the previous section demonstrates one of the most common ways to choose which revisions to tag. Namely, running the @code{cvs tag} command without arguments causes @sc{cvs} to select the revisions which are checked out in the current working directory. For example, if the copy of @file{backend.c} in working directory was checked out from revision 1.4, then @sc{cvs} will tag revision 1.4. Note that the tag is applied immediately to revision 1.4 in the repository; tagging is not like modifying a file, or other operations in which one first modifies the working directory and then runs @code{cvs commit} to transfer that modification to the repository. One potentially surprising aspect of the fact that @code{cvs tag} operates on the repository is that you are tagging the checked-in revisions, which may differ from locally modified files in your working directory. If you want to avoid doing this by mistake, specify the @samp{-c} option to @code{cvs tag}. If there are any locally modified files, @sc{cvs} will abort with an error before it tags any files: @example $ cvs tag -c rel-0-4 cvs tag: backend.c is locally modified cvs [tag aborted]: correct the above errors first! @end example @node Tagging by date/tag @section Specifying what to tag by date or revision @cindex rtag (subcommand) The @code{cvs rtag} command tags the repository as of a certain date or time (or can be used to tag the latest revision). @code{rtag} works directly on the repository contents (it requires no prior checkout and does not look for a working directory). The following options specify which date or revision to tag. See @ref{Common options}, for a complete description of them. @table @code @item -D @var{date} Tag the most recent revision no later than @var{date}. @item -f Only useful with the @samp{-D @var{date}} or @samp{-r @var{tag}} flags. If no matching revision is found, use the most recent revision (instead of ignoring the file). @item -r @var{tag} Only tag those files that contain existing tag @var{tag}. @end table The @code{cvs tag} command also allows one to specify files by revision or date, using the same @samp{-r}, @samp{-D}, and @samp{-f} options. However, this feature is probably not what you want. The reason is that @code{cvs tag} chooses which files to tag based on the files that exist in the working directory, rather than the files which existed as of the given tag/date. Therefore, you are generally better off using @code{cvs rtag}. The exceptions might be cases like: @example cvs tag -r 1.4 stable backend.c @end example @node Modifying tags @section Deleting, moving, and renaming tags @c Also see: @c "How do I move or rename a magic branch tag?" @c in the FAQ (I think the issues it talks about still @c apply, but this could use some sanity.sh work). Normally one does not modify tags. They exist in order to record the history of the repository and so deleting them or changing their meaning would, generally, not be what you want. However, there might be cases in which one uses a tag temporarily or accidentally puts one in the wrong place. Therefore, one might delete, move, or rename a tag. @noindent @strong{WARNING: the commands in this section are dangerous; they permanently discard historical information and it can be difficult or impossible to recover from errors. If you are a @sc{cvs} administrator, you may consider restricting these commands with taginfo (@pxref{user-defined logging}).} @cindex Deleting tags @cindex Deleting branch tags @cindex Removing tags @cindex Removing branch tags @cindex Tags, deleting @cindex Branch tags, deleting To delete a tag, specify the @samp{-d} option to either @code{cvs tag} or @code{cvs rtag}. For example: @example cvs rtag -d rel-0-4 tc @end example @noindent deletes the non-branch tag @code{rel-0-4} from the module @code{tc}. In the event that branch tags are encountered within the repository with the given name, a warning message will be issued and the branch tag will not be deleted. If you are absolutely certain you know what you are doing, the @code{-B} option may be specified to allow deletion of branch tags. In that case, any non-branch tags encountered will trigger warnings and will not be deleted. @noindent @strong{WARNING: Moving branch tags is very dangerous! If you think you need the @code{-B} option, think again and ask your @sc{cvs} administrator about it (if that isn't you). There is almost certainly another way to accomplish what you want to accomplish.} @cindex Moving tags @cindex Moving branch tags @cindex Tags, moving @cindex Branch tags, moving When we say @dfn{move} a tag, we mean to make the same name point to different revisions. For example, the @code{stable} tag may currently point to revision 1.4 of @file{backend.c} and perhaps we want to make it point to revision 1.6. To move a non-branch tag, specify the @samp{-F} option to either @code{cvs tag} or @code{cvs rtag}. For example, the task just mentioned might be accomplished as: @example cvs tag -r 1.6 -F stable backend.c @end example @noindent If any branch tags are encountered in the repository with the given name, a warning is issued and the branch tag is not disturbed. If you are absolutely certain you wish to move the branch tag, the @code{-B} option may be specified. In that case, non-branch tags encountered with the given name are ignored with a warning message. @noindent @strong{WARNING: Moving branch tags is very dangerous! If you think you need the @code{-B} option, think again and ask your @sc{cvs} administrator about it (if that isn't you). There is almost certainly another way to accomplish what you want to accomplish.} @cindex Renaming tags @cindex Tags, renaming When we say @dfn{rename} a tag, we mean to make a different name point to the same revisions as the old tag. For example, one may have misspelled the tag name and want to correct it (hopefully before others are relying on the old spelling). To rename a tag, first create a new tag using the @samp{-r} option to @code{cvs rtag}, and then delete the old name. (Caution: this method will not work with branch tags.) This leaves the new tag on exactly the same files as the old tag. For example: @example cvs rtag -r old-name-0-4 rel-0-4 tc cvs rtag -d old-name-0-4 tc @end example @node Tagging add/remove @section Tagging and adding and removing files The subject of exactly how tagging interacts with adding and removing files is somewhat obscure; for the most part @sc{cvs} will keep track of whether files exist or not without too much fussing. By default, tags are applied to only files which have a revision corresponding to what is being tagged. Files which did not exist yet, or which were already removed, simply omit the tag, and @sc{cvs} knows to treat the absence of a tag as meaning that the file didn't exist as of that tag. However, this can lose a small amount of information. For example, suppose a file was added and then removed. Then, if the tag is missing for that file, there is no way to know whether the tag refers to the time before the file was added, or the time after it was removed. If you specify the @samp{-r} option to @code{cvs rtag}, then @sc{cvs} tags the files which have been removed, and thereby avoids this problem. For example, one might specify @code{-r HEAD} to tag the head. On the subject of adding and removing files, the @code{cvs rtag} command has a @samp{-a} option which means to clear the tag from removed files that would not otherwise be tagged. For example, one might specify this option in conjunction with @samp{-F} when moving a tag. If one moved a tag without @samp{-a}, then the tag in the removed files might still refer to the old revision, rather than reflecting the fact that the file had been removed. I don't think this is necessary if @samp{-r} is specified, as noted above. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Sticky tags @section Sticky tags @cindex Sticky tags @cindex Tags, sticky @c A somewhat related issue is per-directory sticky @c tags (see comment at CVS/Tag in node Working @c directory storage); we probably want to say @c something like "you can set a sticky tag for only @c some files, but you don't want to" or some such. Sometimes a working copy's revision has extra data associated with it, for example it might be on a branch (@pxref{Branching and merging}), or restricted to versions prior to a certain date by @samp{checkout -D} or @samp{update -D}. Because this data persists -- that is, it applies to subsequent commands in the working copy -- we refer to it as @dfn{sticky}. Most of the time, stickiness is an obscure aspect of @sc{cvs} that you don't need to think about. However, even if you don't want to use the feature, you may need to know @emph{something} about sticky tags (for example, how to avoid them!). You can use the @code{status} command to see if any sticky tags or dates are set: @example $ cvs status driver.c =================================================================== File: driver.c Status: Up-to-date Version: 1.7.2.1 Sat Dec 5 19:35:03 1992 RCS Version: 1.7.2.1 /u/cvsroot/yoyodyne/tc/driver.c,v Sticky Tag: rel-1-0-patches (branch: 1.7.2) Sticky Date: (none) Sticky Options: (none) @end example @cindex Resetting sticky tags @cindex Sticky tags, resetting @cindex Deleting sticky tags The sticky tags will remain on your working files until you delete them with @samp{cvs update -A}. The @samp{-A} option merges local changes into the version of the file from the head of the trunk, removing any sticky tags, dates, or options. See @ref{update} for more on the operation of @code{cvs update}. @cindex Sticky date The most common use of sticky tags is to identify which branch one is working on, as described in @ref{Accessing branches}. However, non-branch sticky tags have uses as well. For example, suppose that you want to avoid updating your working directory, to isolate yourself from possibly destabilizing changes other people are making. You can, of course, just refrain from running @code{cvs update}. But if you want to avoid updating only a portion of a larger tree, then sticky tags can help. If you check out a certain revision (such as 1.4) it will become sticky. Subsequent @code{cvs update} commands will not retrieve the latest revision until you reset the tag with @code{cvs update -A}. Likewise, use of the @samp{-D} option to @code{update} or @code{checkout} sets a @dfn{sticky date}, which, similarly, causes that date to be used for future retrievals. People often want to retrieve an old version of a file without setting a sticky tag. This can be done with the @samp{-p} option to @code{checkout} or @code{update}, which sends the contents of the file to standard output. For example: @example $ cvs update -p -r 1.1 file1 >file1 =================================================================== Checking out file1 RCS: /tmp/cvs-sanity/cvsroot/first-dir/Attic/file1,v VERS: 1.1 *************** $ @end example However, this isn't the easiest way, if you are asking how to undo a previous checkin (in this example, put @file{file1} back to the way it was as of revision 1.1). In that case you are better off using the @samp{-j} option to @code{update}; for further discussion see @ref{Merging two revisions}. @c --------------------------------------------------------------------- @node Branching and merging @chapter Branching and merging @cindex Branching @cindex Merging @cindex Copying changes @cindex Main trunk and branches @cindex Revision tree, making branches @cindex Branches, copying changes between @cindex Changes, copying between branches @cindex Modifications, copying between branches @sc{cvs} allows you to isolate changes onto a separate line of development, known as a @dfn{branch}. When you change files on a branch, those changes do not appear on the main trunk or other branches. Later you can move changes from one branch to another branch (or the main trunk) by @dfn{merging}. Merging involves first running @code{cvs update -j}, to merge the changes into the working directory. You can then commit that revision, and thus effectively copy the changes onto another branch. @menu * Branches motivation:: What branches are good for * Creating a branch:: Creating a branch * Accessing branches:: Checking out and updating branches * Branches and revisions:: Branches are reflected in revision numbers * Magic branch numbers:: Magic branch numbers * Merging a branch:: Merging an entire branch * Merging more than once:: Merging from a branch several times * Merging two revisions:: Merging differences between two revisions * Merging adds and removals:: What if files are added or removed? * Merging and keywords:: Avoiding conflicts due to keyword substitution @end menu @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Branches motivation @section What branches are good for @cindex Branches motivation @cindex What branches are good for @cindex Motivation for branches @c FIXME: this node mentions one way to use branches, @c but it is by no means the only way. For example, @c the technique of committing a new feature on a branch, @c until it is ready for the main trunk. The whole @c thing is generally speaking more akin to the @c "Revision management" node although it isn't clear to @c me whether policy matters should be centralized or @c distributed throughout the relevant sections. Suppose that release 1.0 of tc has been made. You are continuing to develop tc, planning to create release 1.1 in a couple of months. After a while your customers start to complain about a fatal bug. You check out release 1.0 (@pxref{Tags}) and find the bug (which turns out to have a trivial fix). However, the current revision of the sources are in a state of flux and are not expected to be stable for at least another month. There is no way to make a bugfix release based on the newest sources. The thing to do in a situation like this is to create a @dfn{branch} on the revision trees for all the files that make up release 1.0 of tc. You can then make modifications to the branch without disturbing the main trunk. When the modifications are finished you can elect to either incorporate them on the main trunk, or leave them on the branch. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Creating a branch @section Creating a branch @cindex Creating a branch @cindex Branch, creating a @cindex tag (subcommand), creating a branch using @cindex rtag (subcommand), creating a branch using You can create a branch with @code{tag -b}; for example, assuming you're in a working copy: @example $ cvs tag -b rel-1-0-patches @end example @c FIXME: we should be more explicit about the value of @c having a tag on the branchpoint. For example @c "cvs tag rel-1-0-patches-branchpoint" before @c the "cvs tag -b". This points out that @c rel-1-0-patches is a pretty awkward name for @c this example (more so than for the rtag example @c below). This splits off a branch based on the current revisions in the working copy, assigning that branch the name @samp{rel-1-0-patches}. It is important to understand that branches get created in the repository, not in the working copy. Creating a branch based on current revisions, as the above example does, will @emph{not} automatically switch the working copy to be on the new branch. For information on how to do that, see @ref{Accessing branches}. You can also create a branch without reference to any working copy, by using @code{rtag}: @example $ cvs rtag -b -r rel-1-0 rel-1-0-patches tc @end example @samp{-r rel-1-0} says that this branch should be rooted at the revision that corresponds to the tag @samp{rel-1-0}. It need not be the most recent revision -- it's often useful to split a branch off an old revision (for example, when fixing a bug in a past release otherwise known to be stable). As with @samp{tag}, the @samp{-b} flag tells @code{rtag} to create a branch (rather than just a symbolic revision name). Note that the numeric revision number that matches @samp{rel-1-0} will probably be different from file to file. So, the full effect of the command is to create a new branch -- named @samp{rel-1-0-patches} -- in module @samp{tc}, rooted in the revision tree at the point tagged by @samp{rel-1-0}. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Accessing branches @section Accessing branches @cindex Check out a branch @cindex Retrieve a branch @cindex Access a branch @cindex Identifying a branch @cindex Branch, check out @cindex Branch, retrieving @cindex Branch, accessing @cindex Branch, identifying You can retrieve a branch in one of two ways: by checking it out fresh from the repository, or by switching an existing working copy over to the branch. To check out a branch from the repository, invoke @samp{checkout} with the @samp{-r} flag, followed by the tag name of the branch (@pxref{Creating a branch}): @example $ cvs checkout -r rel-1-0-patches tc @end example Or, if you already have a working copy, you can switch it to a given branch with @samp{update -r}: @example $ cvs update -r rel-1-0-patches tc @end example @noindent or equivalently: @example $ cd tc $ cvs update -r rel-1-0-patches @end example It does not matter if the working copy was originally on the main trunk or on some other branch -- the above command will switch it to the named branch. And similarly to a regular @samp{update} command, @samp{update -r} merges any changes you have made, notifying you of conflicts where they occur. Once you have a working copy tied to a particular branch, it remains there until you tell it otherwise. This means that changes checked in from the working copy will add new revisions on that branch, while leaving the main trunk and other branches unaffected. @cindex Branches, sticky To find out what branch a working copy is on, you can use the @samp{status} command. In its output, look for the field named @samp{Sticky tag} (@pxref{Sticky tags}) -- that's @sc{cvs}'s way of telling you the branch, if any, of the current working files: @example $ cvs status -v driver.c backend.c =================================================================== File: driver.c Status: Up-to-date Version: 1.7 Sat Dec 5 18:25:54 1992 RCS Version: 1.7 /u/cvsroot/yoyodyne/tc/driver.c,v Sticky Tag: rel-1-0-patches (branch: 1.7.2) Sticky Date: (none) Sticky Options: (none) Existing Tags: rel-1-0-patches (branch: 1.7.2) rel-1-0 (revision: 1.7) =================================================================== File: backend.c Status: Up-to-date Version: 1.4 Tue Dec 1 14:39:01 1992 RCS Version: 1.4 /u/cvsroot/yoyodyne/tc/backend.c,v Sticky Tag: rel-1-0-patches (branch: 1.4.2) Sticky Date: (none) Sticky Options: (none) Existing Tags: rel-1-0-patches (branch: 1.4.2) rel-1-0 (revision: 1.4) rel-0-4 (revision: 1.4) @end example Don't be confused by the fact that the branch numbers for each file are different (@samp{1.7.2} and @samp{1.4.2} respectively). The branch tag is the same, @samp{rel-1-0-patches}, and the files are indeed on the same branch. The numbers simply reflect the point in each file's revision history at which the branch was made. In the above example, one can deduce that @samp{driver.c} had been through more changes than @samp{backend.c} before this branch was created. See @ref{Branches and revisions} for details about how branch numbers are constructed. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Branches and revisions @section Branches and revisions @cindex Branch number @cindex Number, branch @cindex Revision numbers (branches) Ordinarily, a file's revision history is a linear series of increments (@pxref{Revision numbers}): @example +-----+ +-----+ +-----+ +-----+ +-----+ ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! +-----+ +-----+ +-----+ +-----+ +-----+ @end example However, @sc{cvs} is not limited to linear development. The @dfn{revision tree} can be split into @dfn{branches}, where each branch is a self-maintained line of development. Changes made on one branch can easily be moved back to the main trunk. Each branch has a @dfn{branch number}, consisting of an odd number of period-separated decimal integers. The branch number is created by appending an integer to the revision number where the corresponding branch forked off. Having branch numbers allows more than one branch to be forked off from a certain revision. @need 3500 All revisions on a branch have revision numbers formed by appending an ordinal number to the branch number. The following figure illustrates branching with an example. @example @c This example used to have a 1.2.2.4 revision, which @c might help clarify that development can continue on @c 1.2.2. Might be worth reinstating if it can be done @c without overfull hboxes. @group +-------------+ Branch 1.2.2.3.2 -> ! 1.2.2.3.2.1 ! / +-------------+ / / +---------+ +---------+ +---------+ Branch 1.2.2 -> _! 1.2.2.1 !----! 1.2.2.2 !----! 1.2.2.3 ! / +---------+ +---------+ +---------+ / / +-----+ +-----+ +-----+ +-----+ +-----+ ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! <- The main trunk +-----+ +-----+ +-----+ +-----+ +-----+ ! ! ! +---------+ +---------+ +---------+ Branch 1.2.4 -> +---! 1.2.4.1 !----! 1.2.4.2 !----! 1.2.4.3 ! +---------+ +---------+ +---------+ @end group @end example @c -- However, at least for me the figure is not enough. I suggest more @c -- text to accompany it. "A picture is worth a thousand words", so you @c -- have to make sure the reader notices the couple of hundred words @c -- *you* had in mind more than the others! @c -- Why an even number of segments? This section implies that this is @c -- how the main trunk is distinguished from branch roots, but you never @c -- explicitly say that this is the purpose of the [by itself rather @c -- surprising] restriction to an even number of segments. The exact details of how the branch number is constructed is not something you normally need to be concerned about, but here is how it works: When @sc{cvs} creates a branch number it picks the first unused even integer, starting with 2. So when you want to create a branch from revision 6.4 it will be numbered 6.4.2. All branch numbers ending in a zero (such as 6.4.0) are used internally by @sc{cvs} (@pxref{Magic branch numbers}). The branch 1.1.1 has a special meaning. @xref{Tracking sources}. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Magic branch numbers @section Magic branch numbers @c Want xref to here from "log"? This section describes a @sc{cvs} feature called @dfn{magic branches}. For most purposes, you need not worry about magic branches; @sc{cvs} handles them for you. However, they are visible to you in certain circumstances, so it may be useful to have some idea of how it works. Externally, branch numbers consist of an odd number of dot-separated decimal integers. @xref{Revision numbers}. That is not the whole truth, however. For efficiency reasons @sc{cvs} sometimes inserts an extra 0 in the second rightmost position (1.2.4 becomes 1.2.0.4, 8.9.10.11.12 becomes 8.9.10.11.0.12 and so on). @sc{cvs} does a pretty good job at hiding these so called magic branches, but in a few places the hiding is incomplete: @itemize @bullet @item The magic branch number appears in the output from @code{cvs log}. @c What output should appear instead? @item You cannot specify a symbolic branch name to @code{cvs admin}. @end itemize @c Can CVS do this automatically the first time @c you check something in to that branch? Should @c it? You can use the @code{admin} command to reassign a symbolic name to a branch the way @sc{rcs} expects it to be. If @code{R4patches} is assigned to the branch 1.4.2 (magic branch number 1.4.0.2) in file @file{numbers.c} you can do this: @example $ cvs admin -NR4patches:1.4.2 numbers.c @end example It only works if at least one revision is already committed on the branch. Be very careful so that you do not assign the tag to the wrong number. (There is no way to see how the tag was assigned yesterday). @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Merging a branch @section Merging an entire branch @cindex Merging a branch @cindex -j (merging branches) You can merge changes made on a branch into your working copy by giving the @samp{-j @var{branchname}} flag to the @code{update} subcommand. With one @samp{-j @var{branchname}} option it merges the changes made between the greatest common ancestor (GCA) of the branch and the destination revision (in the simple case below the GCA is the point where the branch forked) and the newest revision on that branch into your working copy. @cindex Join The @samp{-j} stands for ``join''. @cindex Branch merge example @cindex Example, branch merge @cindex Merge, branch example Consider this revision tree: @example +-----+ +-----+ +-----+ +-----+ ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 ! <- The main trunk +-----+ +-----+ +-----+ +-----+ ! ! ! +---------+ +---------+ Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 ! +---------+ +---------+ @end example @noindent The branch 1.2.2 has been given the tag (symbolic name) @samp{R1fix}. The following example assumes that the module @samp{mod} contains only one file, @file{m.c}. @example $ cvs checkout mod # @r{Retrieve the latest revision, 1.4} $ cvs update -j R1fix m.c # @r{Merge all changes made on the branch,} # @r{i.e. the changes between revision 1.2} # @r{and 1.2.2.2, into your working copy} # @r{of the file.} $ cvs commit -m "Included R1fix" # @r{Create revision 1.5.} @end example A conflict can result from a merge operation. If that happens, you should resolve it before committing the new revision. @xref{Conflicts example}. If your source files contain keywords (@pxref{Keyword substitution}), you might be getting more conflicts than strictly necessary. See @ref{Merging and keywords}, for information on how to avoid this. The @code{checkout} command also supports the @samp{-j @var{branchname}} flag. The same effect as above could be achieved with this: @example $ cvs checkout -j R1fix mod $ cvs commit -m "Included R1fix" @end example It should be noted that @code{update -j @var{tagname}} will also work but may not produce the desired result. @xref{Merging adds and removals}, for more. @node Merging more than once @section Merging from a branch several times Continuing our example, the revision tree now looks like this: @example +-----+ +-----+ +-----+ +-----+ +-----+ ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! <- The main trunk +-----+ +-----+ +-----+ +-----+ +-----+ ! * ! * ! +---------+ +---------+ Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 ! +---------+ +---------+ @end example @noindent where the starred line represents the merge from the @samp{R1fix} branch to the main trunk, as just discussed. Now suppose that development continues on the @samp{R1fix} branch: @example +-----+ +-----+ +-----+ +-----+ +-----+ ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! <- The main trunk +-----+ +-----+ +-----+ +-----+ +-----+ ! * ! * ! +---------+ +---------+ +---------+ Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 !----! 1.2.2.3 ! +---------+ +---------+ +---------+ @end example @noindent and then you want to merge those new changes onto the main trunk. If you just use the @code{cvs update -j R1fix m.c} command again, @sc{cvs} will attempt to merge again the changes which you have already merged, which can have undesirable side effects. So instead you need to specify that you only want to merge the changes on the branch which have not yet been merged into the trunk. To do that you specify two @samp{-j} options, and @sc{cvs} merges the changes from the first revision to the second revision. For example, in this case the simplest way would be @example cvs update -j 1.2.2.2 -j R1fix m.c # @r{Merge changes from 1.2.2.2 to the} # @r{head of the R1fix branch} @end example The problem with this is that you need to specify the 1.2.2.2 revision manually. A slightly better approach might be to use the date the last merge was done: @example cvs update -j R1fix:yesterday -j R1fix m.c @end example Better yet, tag the R1fix branch after every merge into the trunk, and then use that tag for subsequent merges: @example cvs update -j merged_from_R1fix_to_trunk -j R1fix m.c @end example @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Merging two revisions @section Merging differences between any two revisions @cindex Merging two revisions @cindex Revisions, merging differences between @cindex Differences, merging With two @samp{-j @var{revision}} flags, the @code{update} (and @code{checkout}) command can merge the differences between any two revisions into your working file. @cindex Undoing a change @cindex Removing a change @example $ cvs update -j 1.5 -j 1.3 backend.c @end example @noindent will undo all changes made between revision 1.3 and 1.5. Note the order of the revisions! If you try to use this option when operating on multiple files, remember that the numeric revisions will probably be very different between the various files. You almost always use symbolic tags rather than revision numbers when operating on multiple files. @cindex Restoring old version of removed file @cindex Resurrecting old version of dead file Specifying two @samp{-j} options can also undo file removals or additions. For example, suppose you have a file named @file{file1} which existed as revision 1.1, and you then removed it (thus adding a dead revision 1.2). Now suppose you want to add it again, with the same contents it had previously. Here is how to do it: @example $ cvs update -j 1.2 -j 1.1 file1 U file1 $ cvs commit -m test Checking in file1; /tmp/cvs-sanity/cvsroot/first-dir/file1,v <-- file1 new revision: 1.3; previous revision: 1.2 done $ @end example @node Merging adds and removals @section Merging can add or remove files If the changes which you are merging involve removing or adding some files, @code{update -j} will reflect such additions or removals. @c FIXME: This example needs a lot more explanation. @c We also need other examples for some of the other @c cases (not all--there are too many--as long as we present a @c coherent general principle). For example: @example cvs update -A touch a b c cvs add a b c ; cvs ci -m "added" a b c cvs tag -b branchtag cvs update -r branchtag touch d ; cvs add d rm a ; cvs rm a cvs ci -m "added d, removed a" cvs update -A cvs update -jbranchtag @end example After these commands are executed and a @samp{cvs commit} is done, file @file{a} will be removed and file @file{d} added in the main branch. @c (which was determined by trying it) Note that using a single static tag (@samp{-j @var{tagname}}) rather than a dynamic tag (@samp{-j @var{branchname}}) to merge changes from a branch will usually not remove files which were removed on the branch since @sc{cvs} does not automatically add static tags to dead revisions. The exception to this rule occurs when a static tag has been attached to a dead revision manually. Use the branch tag to merge all changes from the branch or use two static tags as merge endpoints to be sure that all intended changes are propagated in the merge. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Merging and keywords @section Merging and keywords @cindex Merging, and keyword substitution @cindex Keyword substitution, and merging @cindex -j (merging branches), and keyword substitution @cindex -kk, to avoid conflicts during a merge If you merge files containing keywords (@pxref{Keyword substitution}), you will normally get numerous conflicts during the merge, because the keywords are expanded differently in the revisions which you are merging. Therefore, you will often want to specify the @samp{-kk} (@pxref{Substitution modes}) switch to the merge command line. By substituting just the name of the keyword, not the expanded value of that keyword, this option ensures that the revisions which you are merging will be the same as each other, and avoid spurious conflicts. For example, suppose you have a file like this: @example +---------+ _! 1.1.2.1 ! <- br1 / +---------+ / / +-----+ +-----+ ! 1.1 !----! 1.2 ! +-----+ +-----+ @end example @noindent and your working directory is currently on the trunk (revision 1.2). Then you might get the following results from a merge: @example $ cat file1 key $@i{}Revision: 1.2 $ . . . $ cvs update -j br1 U file1 RCS file: /cvsroot/first-dir/file1,v retrieving revision 1.1 retrieving revision 1.1.2.1 Merging differences between 1.1 and 1.1.2.1 into file1 rcsmerge: warning: conflicts during merge $ cat file1 @asis{}<<<<<<< file1 key $@i{}Revision: 1.2 $ @asis{}======= key $@i{}Revision: 1.1.2.1 $ @asis{}>>>>>>> 1.1.2.1 . . . @end example What happened was that the merge tried to merge the differences between 1.1 and 1.1.2.1 into your working directory. So, since the keyword changed from @code{Revision: 1.1} to @code{Revision: 1.1.2.1}, @sc{cvs} tried to merge that change into your working directory, which conflicted with the fact that your working directory had contained @code{Revision: 1.2}. Here is what happens if you had used @samp{-kk}: @example $ cat file1 key $@i{}Revision: 1.2 $ . . . $ cvs update -kk -j br1 U file1 RCS file: /cvsroot/first-dir/file1,v retrieving revision 1.1 retrieving revision 1.1.2.1 Merging differences between 1.1 and 1.1.2.1 into file1 $ cat file1 key $@i{}Revision$ . . . @end example What is going on here is that revision 1.1 and 1.1.2.1 both expand as plain @code{Revision}, and therefore merging the changes between them into the working directory need not change anything. Therefore, there is no conflict. @strong{WARNING: In versions of @sc{cvs} prior to 1.12.2, there was a major problem with using @samp{-kk} on merges. Namely, @samp{-kk} overrode any default keyword expansion mode set in the archive file in the repository. This could, unfortunately for some users, cause data corruption in binary files (with a default keyword expansion mode set to @samp{-kb}). Therefore, when a repository contained binary files, conflicts had to be dealt with manually rather than using @samp{-kk} in a merge command.} In @sc{cvs} version 1.12.2 and later, the keyword expansion mode provided on the command line to any @sc{cvs} command no longer overrides the @samp{-kb} keyword expansion mode setting for binary files, though it will still override other default keyword expansion modes. You can now safely merge using @samp{-kk} to avoid spurious conflicts on lines containing RCS keywords, even when your repository contains binary files. @c --------------------------------------------------------------------- @node Recursive behavior @chapter Recursive behavior @cindex Recursive (directory descending) @cindex Directory, descending @cindex Descending directories @cindex Subdirectories Almost all of the subcommands of @sc{cvs} work recursively when you specify a directory as an argument. For instance, consider this directory structure: @example @code{$HOME} | +--@t{tc} | | +--@t{CVS} | (internal @sc{cvs} files) +--@t{Makefile} +--@t{backend.c} +--@t{driver.c} +--@t{frontend.c} +--@t{parser.c} +--@t{man} | | | +--@t{CVS} | | (internal @sc{cvs} files) | +--@t{tc.1} | +--@t{testing} | +--@t{CVS} | (internal @sc{cvs} files) +--@t{testpgm.t} +--@t{test2.t} @end example @noindent If @file{tc} is the current working directory, the following is true: @itemize @bullet @item @samp{cvs update testing} is equivalent to @example cvs update testing/testpgm.t testing/test2.t @end example @item @samp{cvs update testing man} updates all files in the subdirectories @item @samp{cvs update .} or just @samp{cvs update} updates all files in the @code{tc} directory @end itemize If no arguments are given to @code{update} it will update all files in the current working directory and all its subdirectories. In other words, @file{.} is a default argument to @code{update}. This is also true for most of the @sc{cvs} subcommands, not only the @code{update} command. The recursive behavior of the @sc{cvs} subcommands can be turned off with the @samp{-l} option. Conversely, the @samp{-R} option can be used to force recursion if @samp{-l} is specified in @file{~/.cvsrc} (@pxref{~/.cvsrc}). @example $ cvs update -l # @r{Don't update files in subdirectories} @end example @c --------------------------------------------------------------------- @node Adding and removing @chapter Adding, removing, and renaming files and directories In the course of a project, one will often add new files. Likewise with removing or renaming, or with directories. The general concept to keep in mind in all these cases is that instead of making an irreversible change you want @sc{cvs} to record the fact that a change has taken place, just as with modifying an existing file. The exact mechanisms to do this in @sc{cvs} vary depending on the situation. @menu * Adding files:: Adding files * Removing files:: Removing files * Removing directories:: Removing directories * Moving files:: Moving and renaming files * Moving directories:: Moving and renaming directories @end menu @node Adding files @section Adding files to a directory @cindex Adding files To add a new file to a directory, follow these steps. @itemize @bullet @item You must have a working copy of the directory. @xref{Getting the source}. @item Create the new file inside your working copy of the directory. @item Use @samp{cvs add @var{filename}} to tell @sc{cvs} that you want to version control the file. If the file contains binary data, specify @samp{-kb} (@pxref{Binary files}). @item Use @samp{cvs commit @var{filename}} to actually check in the file into the repository. Other developers cannot see the file until you perform this step. @end itemize You can also use the @code{add} command to add a new directory. @c FIXCVS and/or FIXME: Adding a directory doesn't @c require the commit step. This probably can be @c considered a CVS bug, but it is possible we should @c warn people since this behavior probably won't be @c changing right away. Unlike most other commands, the @code{add} command is not recursive. You cannot even type @samp{cvs add foo/bar}! Instead, you have to @c FIXCVS: This is, of course, not a feature. It is @c just that no one has gotten around to fixing "cvs add @c foo/bar". @example $ cd foo $ cvs add bar @end example @cindex add (subcommand) @deffn Command {cvs add} [@code{-k} kflag] [@code{-m} message] files @dots{} Schedule @var{files} to be added to the repository. The files or directories specified with @code{add} must already exist in the current directory. To add a whole new directory hierarchy to the source repository (for example, files received from a third-party vendor), use the @code{import} command instead. @xref{import}. The added files are not placed in the source repository until you use @code{commit} to make the change permanent. Doing an @code{add} on a file that was removed with the @code{remove} command will undo the effect of the @code{remove}, unless a @code{commit} command intervened. @xref{Removing files}, for an example. The @samp{-k} option specifies the default way that this file will be checked out; for more information see @ref{Substitution modes}. @c As noted in BUGS, -m is broken client/server (Nov @c 96). Also see testsuite log2-* tests. The @samp{-m} option specifies a description for the file. This description appears in the history log (if it is enabled, @pxref{history file}). It will also be saved in the version history inside the repository when the file is committed. The @code{log} command displays this description. The description can be changed using @samp{admin -t}. @xref{admin}. If you omit the @samp{-m @var{description}} flag, an empty string will be used. You will not be prompted for a description. @end deffn For example, the following commands add the file @file{backend.c} to the repository: @c This example used to specify @c -m "Optimizer and code generation passes." @c to the cvs add command, but that doesn't work @c client/server (see log2 in sanity.sh). Should fix CVS, @c but also seems strange to document things which @c don't work... @example $ cvs add backend.c $ cvs commit -m "Early version. Not yet compilable." backend.c @end example When you add a file it is added only on the branch which you are working on (@pxref{Branching and merging}). You can later merge the additions to another branch if you want (@pxref{Merging adds and removals}). @c Should we mention that earlier versions of CVS @c lacked this feature (1.3) or implemented it in a buggy @c way (well, 1.8 had many bugs in cvs update -j)? @c Should we mention the bug/limitation regarding a @c file being a regular file on one branch and a directory @c on another? @c FIXME: This needs an example, or several, here or @c elsewhere, for it to make much sense. @c Somewhere we need to discuss the aspects of death @c support which don't involve branching, I guess. @c Like the ability to re-create a release from a tag. @c --------------------------------------------------------------------- @node Removing files @section Removing files @cindex Removing files @cindex Deleting files @c FIXME: this node wants to be split into several @c smaller nodes. Could make these children of @c "Adding and removing", probably (death support could @c be its own section, for example, as could the @c various bits about undoing mistakes in adding and @c removing). Directories change. New files are added, and old files disappear. Still, you want to be able to retrieve an exact copy of old releases. Here is what you can do to remove a file, but remain able to retrieve old revisions: @itemize @bullet @c FIXME: should probably be saying something about @c having a working directory in the first place. @item Make sure that you have not made any uncommitted modifications to the file. @xref{Viewing differences}, for one way to do that. You can also use the @code{status} or @code{update} command. If you remove the file without committing your changes, you will of course not be able to retrieve the file as it was immediately before you deleted it. @item Remove the file from your working copy of the directory. You can for instance use @code{rm}. @item Use @samp{cvs remove @var{filename}} to tell @sc{cvs} that you really want to delete the file. @item Use @samp{cvs commit @var{filename}} to actually perform the removal of the file from the repository. @end itemize @c FIXME: Somehow this should be linked in with a more @c general discussion of death support. I don't know @c whether we want to use the term "death support" or @c not (we can perhaps get by without it), but we do @c need to discuss the "dead" state in "cvs log" and @c related subjects. The current discussion is @c scattered around, and not xref'd to each other. @c FIXME: I think this paragraph wants to be moved @c later down, at least after the first example. When you commit the removal of the file, @sc{cvs} records the fact that the file no longer exists. It is possible for a file to exist on only some branches and not on others, or to re-add another file with the same name later. @sc{cvs} will correctly create or not create the file, based on the @samp{-r} and @samp{-D} options specified to @code{checkout} or @code{update}. @c FIXME: This style seems to clash with how we @c document things in general. @cindex Remove (subcommand) @deffn Command {cvs remove} [options] files @dots{} Schedule file(s) to be removed from the repository (files which have not already been removed from the working directory are not processed). This command does not actually remove the file from the repository until you commit the removal. For a full list of options, see @ref{Invoking CVS}. @end deffn Here is an example of removing several files: @example $ cd test $ rm *.c $ cvs remove cvs remove: Removing . cvs remove: scheduling a.c for removal cvs remove: scheduling b.c for removal cvs remove: use 'cvs commit' to remove these files permanently $ cvs ci -m "Removed unneeded files" cvs commit: Examining . cvs commit: Committing . @end example As a convenience you can remove the file and @code{cvs remove} it in one step, by specifying the @samp{-f} option. For example, the above example could also be done like this: @example $ cd test $ cvs remove -f *.c cvs remove: scheduling a.c for removal cvs remove: scheduling b.c for removal cvs remove: use 'cvs commit' to remove these files permanently $ cvs ci -m "Removed unneeded files" cvs commit: Examining . cvs commit: Committing . @end example If you execute @code{remove} for a file, and then change your mind before you commit, you can undo the @code{remove} with an @code{add} command. @c FIXME: what if you change your mind after you commit @c it? (answer is also "cvs add" but we don't say that...). @c We need some index entries for thinks like "undoing @c removal" too. @example $ ls CVS ja.h oj.c $ rm oj.c $ cvs remove oj.c cvs remove: scheduling oj.c for removal cvs remove: use 'cvs commit' to remove this file permanently $ cvs add oj.c U oj.c cvs add: oj.c, version 1.1.1.1, resurrected @end example If you realize your mistake before you run the @code{remove} command you can use @code{update} to resurrect the file: @example $ rm oj.c $ cvs update oj.c cvs update: warning: oj.c was lost U oj.c @end example When you remove a file it is removed only on the branch which you are working on (@pxref{Branching and merging}). You can later merge the removals to another branch if you want (@pxref{Merging adds and removals}). @node Removing directories @section Removing directories @cindex Removing directories @cindex Directories, removing In concept removing directories is somewhat similar to removing files---you want the directory to not exist in your current working directories, but you also want to be able to retrieve old releases in which the directory existed. The way that you remove a directory is to remove all the files in it. You don't remove the directory itself; there is no way to do that. Instead you specify the @samp{-P} option to @code{cvs update} or @code{cvs checkout}, which will cause @sc{cvs} to remove empty directories from working directories. (Note that @code{cvs export} always removes empty directories.) Probably the best way to do this is to always specify @samp{-P}; if you want an empty directory then put a dummy file (for example @file{.keepme}) in it to prevent @samp{-P} from removing it. @c I'd try to give a rationale for this, but I'm not @c sure there is a particularly convincing one. What @c we would _like_ is for CVS to do a better job of version @c controlling whether directories exist, to eliminate the @c need for -P and so that a file can be a directory in @c one revision and a regular file in another. Note that @samp{-P} is implied by the @samp{-r} or @samp{-D} options of @code{checkout}. This way @sc{cvs} will be able to correctly create the directory or not depending on whether the particular version you are checking out contains any files in that directory. @c --------------------------------------------------------------------- @node Moving files @section Moving and renaming files @cindex Moving files @cindex Renaming files @cindex Files, moving Moving files to a different directory or renaming them is not difficult, but some of the ways in which this works may be non-obvious. (Moving or renaming a directory is even harder. @xref{Moving directories}.). The examples below assume that the file @var{old} is renamed to @var{new}. @menu * Outside:: The normal way to Rename * Inside:: A tricky, alternative way * Rename by copying:: Another tricky, alternative way @end menu @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Outside @subsection The Normal way to Rename @c More rename issues. Not sure whether these are @c worth documenting; I'm putting them here because @c it seems to be as good a place as any to try to @c set down the issues. @c * "cvs annotate" will annotate either the new @c file or the old file; it cannot annotate _each @c line_ based on whether it was last changed in the @c new or old file. Unlike "cvs log", where the @c consequences of having to select either the new @c or old name seem fairly benign, this may be a @c real advantage to having CVS know about renames @c other than as a deletion and an addition. The normal way to move a file is to copy @var{old} to @var{new}, and then issue the normal @sc{cvs} commands to remove @var{old} from the repository, and add @var{new} to it. @c The following sentence is not true: one must cd into @c the directory to run "cvs add". @c (Both @var{old} and @var{new} could @c contain relative paths, for example @file{foo/bar.c}). @example $ mv @var{old} @var{new} $ cvs remove @var{old} $ cvs add @var{new} $ cvs commit -m "Renamed @var{old} to @var{new}" @var{old} @var{new} @end example This is the simplest way to move a file, it is not error-prone, and it preserves the history of what was done. Note that to access the history of the file you must specify the old or the new name, depending on what portion of the history you are accessing. For example, @code{cvs log @var{old}} will give the log up until the time of the rename. When @var{new} is committed its revision numbers will start again, usually at 1.1, so if that bothers you, use the @samp{-r rev} option to commit. For more information see @ref{Assigning revisions}. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Inside @subsection Moving the history file This method is more dangerous, since it involves moving files inside the repository. Read this entire section before trying it out! @example $ cd $CVSROOT/@var{dir} $ mv @var{old},v @var{new},v @end example @noindent Advantages: @itemize @bullet @item The log of changes is maintained intact. @item The revision numbers are not affected. @end itemize @noindent Disadvantages: @itemize @bullet @item Old releases cannot easily be fetched from the repository. (The file will show up as @var{new} even in revisions from the time before it was renamed). @item There is no log information of when the file was renamed. @item Nasty things might happen if someone accesses the history file while you are moving it. Make sure no one else runs any of the @sc{cvs} commands while you move it. @end itemize @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Rename by copying @subsection Copying the history file This way also involves direct modifications to the repository. It is safe, but not without drawbacks. @example # @r{Copy the @sc{rcs} file inside the repository} $ cd $CVSROOT/@var{dir} $ cp @var{old},v @var{new},v # @r{Remove the old file} $ cd ~/@var{dir} $ rm @var{old} $ cvs remove @var{old} $ cvs commit @var{old} # @r{Remove all tags from @var{new}} $ cvs update @var{new} $ cvs log @var{new} # @r{Remember the non-branch tag names} $ cvs tag -d @var{tag1} @var{new} $ cvs tag -d @var{tag2} @var{new} @dots{} @end example By removing the tags you will be able to check out old revisions. @noindent Advantages: @itemize @bullet @item @c FIXME: Is this true about -D now that we have death @c support? See 5B.3 in the FAQ. Checking out old revisions works correctly, as long as you use @samp{-r@var{tag}} and not @samp{-D@var{date}} to retrieve the revisions. @item The log of changes is maintained intact. @item The revision numbers are not affected. @end itemize @noindent Disadvantages: @itemize @bullet @item You cannot easily see the history of the file across the rename. @end itemize @c --------------------------------------------------------------------- @node Moving directories @section Moving and renaming directories @cindex Moving directories @cindex Renaming directories @cindex Directories, moving The normal way to rename or move a directory is to rename or move each file within it as described in @ref{Outside}. Then check out with the @samp{-P} option, as described in @ref{Removing directories}. If you really want to hack the repository to rename or delete a directory in the repository, you can do it like this: @enumerate @item Inform everyone who has a checked out copy of the directory that the directory will be renamed. They should commit all their changes, and remove their working copies, before you take the steps below. @item Rename the directory inside the repository. @example $ cd $CVSROOT/@var{parent-dir} $ mv @var{old-dir} @var{new-dir} @end example @item Fix the @sc{cvs} administrative files, if necessary (for instance if you renamed an entire module). @item Tell everyone that they can check out again and continue working. @end enumerate If someone had a working copy the @sc{cvs} commands will cease to work for him, until he removes the directory that disappeared inside the repository. It is almost always better to move the files in the directory instead of moving the directory. If you move the directory you are unlikely to be able to retrieve old releases correctly, since they probably depend on the name of the directories. @c --------------------------------------------------------------------- @node History browsing @chapter History browsing @cindex History browsing @cindex Traceability @cindex Isolation @c kind of lame, in a lot of ways the above text inside @c the @ignore motivates this chapter better Once you have used @sc{cvs} to store a version control history---what files have changed when, how, and by whom, there are a variety of mechanisms for looking through the history. @c FIXME: should also be talking about how you look at @c old revisions (e.g. "cvs update -p -r 1.2 foo.c"). @menu * log messages:: Log messages * history database:: The history database * user-defined logging:: User-defined logging * annotate:: What revision modified each line of a file? @end menu @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node log messages @section Log messages @c FIXME: @xref to place where we talk about how to @c specify message to commit. Whenever you commit a file you specify a log message. @c FIXME: bring the information here, and get rid of or @c greatly shrink the "log" node. To look through the log messages which have been specified for every revision which has been committed, use the @code{cvs log} command (@pxref{log}). @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node history database @section The history database @c FIXME: bring the information from the history file @c and history nodes here. Rewrite it to be motivated @c better (start out by clearly explaining what gets @c logged in history, for example). You can use the history file (@pxref{history file}) to log various @sc{cvs} actions. To retrieve the information from the history file, use the @code{cvs history} command (@pxref{history}). Note: you can control what is logged to this file by using the @samp{LogHistory} keyword in the @file{CVSROOT/config} file (@pxref{config}). @c @c The history database has many problems: @c * It is very unclear what field means what. This @c could be improved greatly by better documentation, @c but there are still non-orthogonalities (for @c example, tag does not record the "repository" @c field but most records do). @c * Confusion about files, directories, and modules. @c Some commands record one, some record others. @c * File removal is not logged. There is an 'R' @c record type documented, but CVS never uses it. @c * Tags are only logged for the "cvs rtag" command, @c not "cvs tag". The fix for this is not completely @c clear (see above about modules vs. files). @c * Are there other cases of operations that are not @c logged? One would hope for all changes to the @c repository to be logged somehow (particularly @c operations like tagging, "cvs admin -k", and other @c operations which do not record a history that one @c can get with "cvs log"). Operations on the working @c directory, like export, get, and release, are a @c second category also covered by the current "cvs @c history". @c * The history file does not record the options given @c to a command. The most serious manifestation of @c this is perhaps that it doesn't record whether a command @c was recursive. It is not clear to me whether one @c wants to log at a level very close to the command @c line, as a sort of way of logging each command @c (more or less), or whether one wants @c to log more at the level of what was changed (or @c something in between), but either way the current @c information has pretty big gaps. @c * Further details about a tag--like whether it is a @c branch tag or, if a non-branch tag, which branch it @c is on. One can find out this information about the @c tag as it exists _now_, but if the tag has been @c moved, one doesn't know what it was like at the time @c the history record was written. @c * Whether operating on a particular tag, date, or @c options was implicit (sticky) or explicit. @c @c Another item, only somewhat related to the above, is a @c way to control what is logged in the history file. @c This is probably the only good way to handle @c different people having different ideas about @c information/space tradeoffs. @c @c It isn't really clear that it makes sense to try to @c patch up the history file format as it exists now to @c include all that stuff. It might be better to @c design a whole new CVSROOT/nhistory file and "cvs @c nhistory" command, or some such, or in some other @c way trying to come up with a clean break from the @c past, which can address the above concerns. Another @c open question is how/whether this relates to @c taginfo/loginfo/etc. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node user-defined logging @section User-defined logging @c FIXME: should probably also mention the fact the -l @c global option can disable most of the mechanisms @c discussed here (why? What is the -l global option for?). @c @c FIXME: probably should centralize this information @c here, at least to some extent. Maybe by moving the @c loginfo, etc., nodes here and replacing @c the "user-defined logging" node with one node for @c each method. You can customize @sc{cvs} to log various kinds of actions, in whatever manner you choose. These mechanisms operate by executing a script at various times. The script might append a message to a file listing the information and the programmer who created it, or send mail to a group of developers, or, perhaps, post a message to a particular newsgroup. To log commits, use the @file{loginfo} file (@pxref{loginfo}). @c FIXME: What is difference between doing it in the @c modules file and using loginfo/taginfo? Why should @c user use one or the other? To log commits, checkouts, exports, and tags, respectively, you can also use the @samp{-i}, @samp{-o}, @samp{-e}, and @samp{-t} options in the modules file. For a more flexible way of giving notifications to various users, which requires less in the way of keeping centralized scripts up to date, use the @code{cvs watch add} command (@pxref{Getting Notified}); this command is useful even if you are not using @code{cvs watch on}. @cindex taginfo @cindex Exit status, of taginfo The @file{taginfo} file defines programs to execute when someone executes a @code{tag} or @code{rtag} command. The @file{taginfo} file has the standard form for administrative files (@pxref{Administrative files}), where each line is a regular expression followed by a command to execute. The arguments passed to the command are, in order, the @var{tagname}, @var{operation} (@code{add} for @code{tag}, @code{mov} for @code{tag -F}, and @code{del} for @code{tag -d}), @var{repository}, and any remaining are pairs of @var{filename} @var{revision}. A non-zero exit of the filter program will cause the tag to be aborted. Here is an example of using taginfo to log tag and rtag commands. In the taginfo file put: @example ALL /usr/local/cvsroot/CVSROOT/loggit @end example @noindent Where @file{/usr/local/cvsroot/CVSROOT/loggit} contains the following script: @example #!/bin/sh echo "$@@" >>/home/kingdon/cvsroot/CVSROOT/taglog @end example @node annotate @section Annotate command @cindex annotate (subcommand) @deffn Command {cvs annotate} [@code{-FflR}] [@code{-r rev}|@code{-D date}] files @dots{} For each file in @var{files}, print the head revision of the trunk, together with information on the last modification for each line. For example: @example $ cvs annotate ssfile Annotations for ssfile *************** 1.1 (mary 27-Mar-96): ssfile line 1 1.2 (joe 28-Mar-96): ssfile line 2 @end example The file @file{ssfile} currently contains two lines. The @code{ssfile line 1} line was checked in by @code{mary} on March 27. Then, on March 28, @code{joe} added a line @code{ssfile line 2}, without modifying the @code{ssfile line 1} line. This report doesn't tell you anything about lines which have been deleted or replaced; you need to use @code{cvs diff} for that (@pxref{diff}). @end deffn The options to @code{cvs annotate} are listed in @ref{Invoking CVS}, and can be used to select the files and revisions to annotate. The options are described in more detail there and in @ref{Common options}. @c FIXME: maybe an example using the options? Just @c what it means to select a revision might be worth a @c few words of explanation ("you want to see who @c changed this line *before* 1.4"...). @c --------------------------------------------------------------------- @node Binary files @chapter Handling binary files @cindex Binary files The most common use for @sc{cvs} is to store text files. With text files, @sc{cvs} can merge revisions, display the differences between revisions in a human-visible fashion, and other such operations. However, if you are willing to give up a few of these abilities, @sc{cvs} can store binary files. For example, one might store a web site in @sc{cvs} including both text files and binary images. @menu * Binary why:: More details on issues with binary files * Binary howto:: How to store them @end menu @node Binary why @section The issues with binary files While the need to manage binary files may seem obvious if the files that you customarily work with are binary, putting them into version control does present some additional issues. One basic function of version control is to show the differences between two revisions. For example, if someone else checked in a new version of a file, you may wish to look at what they changed and determine whether their changes are good. For text files, @sc{cvs} provides this functionality via the @code{cvs diff} command. For binary files, it may be possible to extract the two revisions and then compare them with a tool external to @sc{cvs} (for example, word processing software often has such a feature). If there is no such tool, one must track changes via other mechanisms, such as urging people to write good log messages, and hoping that the changes they actually made were the changes that they intended to make. Another ability of a version control system is the ability to merge two revisions. For @sc{cvs} this happens in two contexts. The first is when users make changes in separate working directories (@pxref{Multiple developers}). The second is when one merges explicitly with the @samp{update -j} command (@pxref{Branching and merging}). In the case of text files, @sc{cvs} can merge changes made independently, and signal a conflict if the changes conflict. With binary files, the best that @sc{cvs} can do is present the two different copies of the file, and leave it to the user to resolve the conflict. The user may choose one copy or the other, or may run an external merge tool which knows about that particular file format, if one exists. Note that having the user merge relies primarily on the user to not accidentally omit some changes, and thus is potentially error prone. If this process is thought to be undesirable, the best choice may be to avoid merging. To avoid the merges that result from separate working directories, see the discussion of reserved checkouts (file locking) in @ref{Multiple developers}. To avoid the merges resulting from branches, restrict use of branches. @node Binary howto @section How to store binary files There are two issues with using @sc{cvs} to store binary files. The first is that @sc{cvs} by default converts line endings between the canonical form in which they are stored in the repository (linefeed only), and the form appropriate to the operating system in use on the client (for example, carriage return followed by line feed for Windows NT). The second is that a binary file might happen to contain data which looks like a keyword (@pxref{Keyword substitution}), so keyword expansion must be turned off. @c FIXME: the third is that one can't do merges with @c binary files. xref to Multiple Developers and the @c reserved checkout issues. The @samp{-kb} option available with some @sc{cvs} commands insures that neither line ending conversion nor keyword expansion will be done. Here is an example of how you can create a new file using the @samp{-kb} flag: @example $ echo '$@i{}Id$' > kotest $ cvs add -kb -m"A test file" kotest $ cvs ci -m"First checkin; contains a keyword" kotest @end example If a file accidentally gets added without @samp{-kb}, one can use the @code{cvs admin} command to recover. For example: @example $ echo '$@i{}Id$' > kotest $ cvs add -m"A test file" kotest $ cvs ci -m"First checkin; contains a keyword" kotest $ cvs admin -kb kotest $ cvs update -A kotest # @r{For non-unix systems:} # @r{Copy in a good copy of the file from outside CVS} $ cvs commit -m "make it binary" kotest @end example @c Trying to describe this for both unix and non-unix @c in the same description is very confusing. Might @c want to split the two, or just ditch the unix "shortcut" @c (unixheads don't do much with binary files, anyway). @c This used to say "(Try the above example, and do a @c @code{cat kotest} after every command)". But that @c only really makes sense for the unix case. When you check in the file @file{kotest} the file is not preserved as a binary file, because you did not check it in as a binary file. The @code{cvs admin -kb} command sets the default keyword substitution method for this file, but it does not alter the working copy of the file that you have. If you need to cope with line endings (that is, you are using @sc{cvs} on a non-unix system), then you need to check in a new copy of the file, as shown by the @code{cvs commit} command above. On unix, the @code{cvs update -A} command suffices. @c FIXME: should also describe what the *other users* @c need to do, if they have checked out copies which @c have been corrupted by lack of -kb. I think maybe @c "cvs update -kb" or "cvs @c update -A" would suffice, although the user who @c reported this suggested removing the file, manually @c removing it from CVS/Entries, and then "cvs update" (Note that you can use @code{cvs log} to determine the default keyword substitution method for a file and @code{cvs status} to determine the keyword substitution method for a working copy.) However, in using @code{cvs admin -k} to change the keyword expansion, be aware that the keyword expansion mode is not version controlled. This means that, for example, that if you have a text file in old releases, and a binary file with the same name in new releases, @sc{cvs} provides no way to check out the file in text or binary mode depending on what version you are checking out. There is no good workaround for this problem. You can also set a default for whether @code{cvs add} and @code{cvs import} treat a file as binary based on its name; for example you could say that files who names end in @samp{.exe} are binary. @xref{Wrappers}. There is currently no way to have @sc{cvs} detect whether a file is binary based on its contents. The main difficulty with designing such a feature is that it is not clear how to distinguish between binary and non-binary files, and the rules to apply would vary considerably with the operating system. @c For example, it would be good on MS-DOS-family OSes @c for anything containing ^Z to be binary. Having @c characters with the 8th bit set imply binary is almost @c surely a bad idea in the context of ISO-8859-* and @c other such character sets. On VMS or the Mac, we @c could use the OS's file typing. This is a @c commonly-desired feature, and something of this sort @c may make sense. But there are a lot of pitfalls here. @c @c Another, probably better, way to tell is to read the @c file in text mode, write it to a temp file in text @c mode, and then do a binary mode compare of the two @c files. If they differ, it is a binary file. This @c might have problems on VMS (or some other system @c with several different text modes), but in general @c should be relatively portable. The only other @c downside I can think of is that it would be fairly @c slow, but that is perhaps a small price to pay for @c not having your files corrupted. Another issue is @c what happens if you import a text file with bare @c linefeeds on Windows. Such files will show up on @c Windows sometimes (I think some native windows @c programs even write them, on occasion). Perhaps it @c is reasonable to treat such files as binary; after @c all it is something of a presumption to assume that @c the user would want the linefeeds converted to CRLF. @c --------------------------------------------------------------------- @node Multiple developers @chapter Multiple developers @cindex Multiple developers @cindex Team of developers @cindex File locking @cindex Locking files @cindex Working copy @cindex Reserved checkouts @cindex Unreserved checkouts @cindex RCS-style locking When more than one person works on a software project things often get complicated. Often, two people try to edit the same file simultaneously. One solution, known as @dfn{file locking} or @dfn{reserved checkouts}, is to allow only one person to edit each file at a time. This is the only solution with some version control systems, including @sc{rcs} and @sc{sccs}. Currently the usual way to get reserved checkouts with @sc{cvs} is the @code{cvs admin -l} command (@pxref{admin options}). This is not as nicely integrated into @sc{cvs} as the watch features, described below, but it seems that most people with a need for reserved checkouts find it adequate. @c Or "find it better than worrying about implementing @c nicely integrated reserved checkouts" or ...? It also may be possible to use the watches features described below, together with suitable procedures (not enforced by software), to avoid having two people edit at the same time. @c Our unreserved checkout model might not @c be quite the same as others. For example, I @c think that some systems will tend to create a branch @c in the case where CVS prints "up-to-date check failed". @c It isn't clear to me whether we should try to @c explore these subtleties; it could easily just @c confuse people. The default model with @sc{cvs} is known as @dfn{unreserved checkouts}. In this model, developers can edit their own @dfn{working copy} of a file simultaneously. The first person that commits his changes has no automatic way of knowing that another has started to edit it. Others will get an error message when they try to commit the file. They must then use @sc{cvs} commands to bring their working copy up to date with the repository revision. This process is almost automatic. @c FIXME? should probably use the word "watch" here, to @c tie this into the text below and above. @sc{cvs} also supports mechanisms which facilitate various kinds of communication, without actually enforcing rules like reserved checkouts do. The rest of this chapter describes how these various models work, and some of the issues involved in choosing between them. @menu * File status:: A file can be in several states * Updating a file:: Bringing a file up-to-date * Conflicts example:: An informative example * Informing others:: To cooperate you must inform * Concurrency:: Simultaneous repository access * Watches:: Mechanisms to track who is editing files * Choosing a model:: Reserved or unreserved checkouts? @end menu @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node File status @section File status @cindex File status @cindex Status of a file @c Shouldn't this start with an example or something, @c introducing the unreserved checkout model? Before we @c dive into listing states? Based on what operations you have performed on a checked out file, and what operations others have performed to that file in the repository, one can classify a file in a number of states. The states, as reported by the @code{status} command, are: @c The order of items is chosen to group logically @c similar outputs together. @c People who want alphabetical can use the index... @table @asis @cindex Up-to-date @item Up-to-date The file is identical with the latest revision in the repository for the branch in use. @c FIXME: should we clarify "in use"? The answer is @c sticky tags, and trying to distinguish branch sticky @c tags from non-branch sticky tags seems rather awkward @c here. @c FIXME: What happens with non-branch sticky tags? Is @c a stuck file "Up-to-date" or "Needs checkout" or what? @item Locally Modified @cindex Locally Modified You have edited the file, and not yet committed your changes. @item Locally Added @cindex Locally Added You have added the file with @code{add}, and not yet committed your changes. @c There are many cases involving the file being @c added/removed/modified in the working directory, and @c added/removed/modified in the repository, which we @c don't try to describe here. I'm not sure that "cvs @c status" produces a non-confusing output in most of @c those cases. @item Locally Removed @cindex Locally Removed You have removed the file with @code{remove}, and not yet committed your changes. @item Needs Checkout @cindex Needs Checkout Someone else has committed a newer revision to the repository. The name is slightly misleading; you will ordinarily use @code{update} rather than @code{checkout} to get that newer revision. @item Needs Patch @cindex Needs Patch @c See also newb-123j0 in sanity.sh (although that case @c should probably be changed rather than documented). Like Needs Checkout, but the @sc{cvs} server will send a patch rather than the entire file. Sending a patch or sending an entire file accomplishes the same thing. @item Needs Merge @cindex Needs Merge Someone else has committed a newer revision to the repository, and you have also made modifications to the file. @item Unresolved Conflict @cindex Unresolved Conflict @c FIXCVS - This file status needs to be changed to some more informative @c text that distinguishes it more clearly from each of the Locally Added, @c File had conflicts on merge, and Unknown status types, but an exact and @c succinct wording escapes me at the moment. A file with the same name as this new file has been added to the repository from a second workspace. This file will need to be moved out of the way to allow an @code{update} to complete. @item File had conflicts on merge @cindex File had conflicts on merge @c is it worth saying that this message was "Unresolved @c Conflict" in CVS 1.9 and earlier? I'm inclined to @c think that is unnecessarily confusing to new users. This is like Locally Modified, except that a previous @code{update} command gave a conflict. If you have not already done so, you need to resolve the conflict as described in @ref{Conflicts example}. @item Unknown @cindex Unknown @sc{cvs} doesn't know anything about this file. For example, you have created a new file and have not run @code{add}. @c @c "Entry Invalid" and "Classify Error" are also in the @c status.c. The latter definitely indicates a CVS bug @c (should it be worded more like "internal error" so @c people submit bug reports if they see it?). The former @c I'm not as sure; I haven't tracked down whether/when it @c appears in "cvs status" output. @end table To help clarify the file status, @code{status} also reports the @code{Working revision} which is the revision that the file in the working directory derives from, and the @code{Repository revision} which is the latest revision in the repository for the branch in use. @c FIXME: should we clarify "in use"? The answer is @c sticky tags, and trying to distinguish branch sticky @c tags from non-branch sticky tags seems rather awkward @c here. @c FIXME: What happens with non-branch sticky tags? @c What is the Repository Revision there? See the @c comment at vn_rcs in cvs.h, which is kind of @c confused--we really need to document better what this @c field contains. @c Q: Should we document "New file!" and other such @c outputs or are they self-explanatory? @c FIXME: what about the date to the right of "Working @c revision"? It doesn't appear with client/server and @c seems unnecessary (redundant with "ls -l") so @c perhaps it should be removed for non-client/server too? @c FIXME: Need some examples. @c FIXME: Working revision can also be something like @c "-1.3" for a locally removed file. Not at all @c self-explanatory (and it is possible that CVS should @c be changed rather than documenting this). @c Would be nice to have an @example showing output @c from cvs status, with comments showing the xref @c where each part of the output is described. This @c might fit in nicely if it is desirable to split this @c node in two; one to introduce "cvs status" and one @c to list each of the states. The options to @code{status} are listed in @ref{Invoking CVS}. For information on its @code{Sticky tag} and @code{Sticky date} output, see @ref{Sticky tags}. For information on its @code{Sticky options} output, see the @samp{-k} option in @ref{update options}. You can think of the @code{status} and @code{update} commands as somewhat complementary. You use @code{update} to bring your files up to date, and you can use @code{status} to give you some idea of what an @code{update} would do (of course, the state of the repository might change before you actually run @code{update}). In fact, if you want a command to display file status in a more brief format than is displayed by the @code{status} command, you can invoke @cindex update, to display file status @example $ cvs -n -q update @end example The @samp{-n} option means to not actually do the update, but merely to display statuses; the @samp{-q} option avoids printing the name of each directory. For more information on the @code{update} command, and these options, see @ref{Invoking CVS}. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Updating a file @section Bringing a file up to date @cindex Bringing a file up to date @cindex Updating a file @cindex Merging a file @cindex Update, introduction When you want to update or merge a file, use the @code{update} command. For files that are not up to date this is roughly equivalent to a @code{checkout} command: the newest revision of the file is extracted from the repository and put in your working directory. Your modifications to a file are never lost when you use @code{update}. If no newer revision exists, running @code{update} has no effect. If you have edited the file, and a newer revision is available, @sc{cvs} will merge all changes into your working copy. For instance, imagine that you checked out revision 1.4 and started editing it. In the meantime someone else committed revision 1.5, and shortly after that revision 1.6. If you run @code{update} on the file now, @sc{cvs} will incorporate all changes between revision 1.4 and 1.6 into your file. @cindex Overlap If any of the changes between 1.4 and 1.6 were made too close to any of the changes you have made, an @dfn{overlap} occurs. In such cases a warning is printed, and the resulting file includes both versions of the lines that overlap, delimited by special markers. @xref{update}, for a complete description of the @code{update} command. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Conflicts example @section Conflicts example @cindex Merge, an example @cindex Example of merge @cindex driver.c (merge example) Suppose revision 1.4 of @file{driver.c} contains this: @example #include void main() @{ parse(); if (nerr == 0) gencode(); else fprintf(stderr, "No code generated.\n"); exit(nerr == 0 ? 0 : 1); @} @end example @noindent Revision 1.6 of @file{driver.c} contains this: @example #include int main(int argc, char **argv) @{ parse(); if (argc != 1) @{ fprintf(stderr, "tc: No args expected.\n"); exit(1); @} if (nerr == 0) gencode(); else fprintf(stderr, "No code generated.\n"); exit(!!nerr); @} @end example @noindent Your working copy of @file{driver.c}, based on revision 1.4, contains this before you run @samp{cvs update}: @c -- Really include "cvs"? @example #include #include void main() @{ init_scanner(); parse(); if (nerr == 0) gencode(); else fprintf(stderr, "No code generated.\n"); exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE); @} @end example @noindent You run @samp{cvs update}: @c -- Really include "cvs"? @example $ cvs update driver.c RCS file: /usr/local/cvsroot/yoyodyne/tc/driver.c,v retrieving revision 1.4 retrieving revision 1.6 Merging differences between 1.4 and 1.6 into driver.c rcsmerge warning: overlaps during merge cvs update: conflicts found in driver.c C driver.c @end example @noindent @cindex Conflicts (merge example) @sc{cvs} tells you that there were some conflicts. Your original working file is saved unmodified in @file{.#driver.c.1.4}. The new version of @file{driver.c} contains this: @example #include #include int main(int argc, char **argv) @{ init_scanner(); parse(); if (argc != 1) @{ fprintf(stderr, "tc: No args expected.\n"); exit(1); @} if (nerr == 0) gencode(); else fprintf(stderr, "No code generated.\n"); @asis{}<<<<<<< driver.c exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE); @asis{}======= exit(!!nerr); @asis{}>>>>>>> 1.6 @} @end example @noindent @cindex Markers, conflict @cindex Conflict markers @cindex <<<<<<< @cindex >>>>>>> @cindex ======= Note how all non-overlapping modifications are incorporated in your working copy, and that the overlapping section is clearly marked with @samp{<<<<<<<}, @samp{=======} and @samp{>>>>>>>}. @cindex Resolving a conflict @cindex Conflict resolution You resolve the conflict by editing the file, removing the markers and the erroneous line. Suppose you end up with this file: @c -- Add xref to the pcl-cvs manual when it talks @c -- about this. @example #include #include int main(int argc, char **argv) @{ init_scanner(); parse(); if (argc != 1) @{ fprintf(stderr, "tc: No args expected.\n"); exit(1); @} if (nerr == 0) gencode(); else fprintf(stderr, "No code generated.\n"); exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE); @} @end example @noindent You can now go ahead and commit this as revision 1.7. @example $ cvs commit -m "Initialize scanner. Use symbolic exit values." driver.c Checking in driver.c; /usr/local/cvsroot/yoyodyne/tc/driver.c,v <-- driver.c new revision: 1.7; previous revision: 1.6 done @end example For your protection, @sc{cvs} will refuse to check in a file if a conflict occurred and you have not resolved the conflict. Currently to resolve a conflict, you must change the timestamp on the file. In previous versions of @sc{cvs}, you also needed to insure that the file contains no conflict markers. Because your file may legitimately contain conflict markers (that is, occurrences of @samp{>>>>>>> } at the start of a line that don't mark a conflict), the current version of @sc{cvs} will print a warning and proceed to check in the file. @c The old behavior was really icky; the only way out @c was to start hacking on @c the @code{CVS/Entries} file or other such workarounds. @c @c If the timestamp thing isn't considered nice enough, @c maybe there should be a "cvs resolved" command @c which clears the conflict indication. For a nice user @c interface, this should be invoked by an interactive @c merge tool like emerge rather than by the user @c directly--such a tool can verify that the user has @c really dealt with each conflict. @cindex emerge If you use release 1.04 or later of pcl-cvs (a @sc{gnu} Emacs front-end for @sc{cvs}) you can use an Emacs package called emerge to help you resolve conflicts. See the documentation for pcl-cvs. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Informing others @section Informing others about commits @cindex Informing others @cindex Spreading information @cindex Mail, automatic mail on commit It is often useful to inform others when you commit a new revision of a file. The @samp{-i} option of the @file{modules} file, or the @file{loginfo} file, can be used to automate this process. @xref{modules}. @xref{loginfo}. You can use these features of @sc{cvs} to, for instance, instruct @sc{cvs} to mail a message to all developers, or post a message to a local newsgroup. @c -- More text would be nice here. @node Concurrency @section Several developers simultaneously attempting to run CVS @cindex Locks, cvs, introduction @c For a discussion of *why* CVS creates locks, see @c the comment at the start of src/lock.c If several developers try to run @sc{cvs} at the same time, one may get the following message: @example [11:43:23] waiting for bach's lock in /usr/local/cvsroot/foo @end example @cindex #cvs.rfl, removing @cindex #cvs.wfl, removing @cindex #cvs.lock, removing @sc{cvs} will try again every 30 seconds, and either continue with the operation or print the message again, if it still needs to wait. If a lock seems to stick around for an undue amount of time, find the person holding the lock and ask them about the cvs command they are running. If they aren't running a cvs command, look in the repository directory mentioned in the message and remove files which they own whose names start with @file{#cvs.rfl}, @file{#cvs.wfl}, or @file{#cvs.lock}. Note that these locks are to protect @sc{cvs}'s internal data structures and have no relationship to the word @dfn{lock} in the sense used by @sc{rcs}---which refers to reserved checkouts (@pxref{Multiple developers}). Any number of people can be reading from a given repository at a time; only when someone is writing do the locks prevent other people from reading or writing. @cindex Atomic transactions, lack of @cindex Transactions, atomic, lack of @c the following talks about what one might call commit/update @c atomicity. @c Probably also should say something about @c commit/commit atomicity, that is, "An update will @c not get partial versions of more than one commit". @c CVS currently has this property and I guess we can @c make it a documented feature. @c For example one person commits @c a/one.c and b/four.c and another commits a/two.c and @c b/three.c. Then an update cannot get the new a/one.c @c and a/two.c and the old b/four.c and b/three.c. One might hope for the following property: @quotation If someone commits some changes in one cvs command, then an update by someone else will either get all the changes, or none of them. @end quotation @noindent but @sc{cvs} does @emph{not} have this property. For example, given the files @example a/one.c a/two.c b/three.c b/four.c @end example @noindent if someone runs @example cvs ci a/two.c b/three.c @end example @noindent and someone else runs @code{cvs update} at the same time, the person running @code{update} might get only the change to @file{b/three.c} and not the change to @file{a/two.c}. @node Watches @section Mechanisms to track who is editing files @cindex Watches For many groups, use of @sc{cvs} in its default mode is perfectly satisfactory. Users may sometimes go to check in a modification only to find that another modification has intervened, but they deal with it and proceed with their check in. Other groups prefer to be able to know who is editing what files, so that if two people try to edit the same file they can choose to talk about who is doing what when rather than be surprised at check in time. The features in this section allow such coordination, while retaining the ability of two developers to edit the same file at the same time. @c Some people might ask why CVS does not enforce the @c rule on chmod, by requiring a cvs edit before a cvs @c commit. The main reason is that it could always be @c circumvented--one could edit the file, and @c then when ready to check it in, do the cvs edit and put @c in the new contents and do the cvs commit. One @c implementation note: if we _do_ want to have cvs commit @c require a cvs edit, we should store the state on @c whether the cvs edit has occurred in the working @c directory, rather than having the server try to keep @c track of what working directories exist. @c FIXME: should the above discussion be part of the @c manual proper, somewhere, not just in a comment? For maximum benefit developers should use @code{cvs edit} (not @code{chmod}) to make files read-write to edit them, and @code{cvs release} (not @code{rm}) to discard a working directory which is no longer in use, but @sc{cvs} is not able to enforce this behavior. @c I'm a little dissatisfied with this presentation, @c because "watch on"/"edit"/"editors" are one set of @c functionality, and "watch add"/"watchers" is another @c which is somewhat orthogonal even though they interact in @c various ways. But I think it might be @c confusing to describe them separately (e.g. "watch @c add" with loginfo). I don't know. @menu * Setting a watch:: Telling CVS to watch certain files * Getting Notified:: Telling CVS to notify you * Editing files:: How to edit a file which is being watched * Watch information:: Information about who is watching and editing * Watches Compatibility:: Watches interact poorly with CVS 1.6 or earlier @end menu @node Setting a watch @subsection Telling CVS to watch certain files To enable the watch features, you first specify that certain files are to be watched. @cindex watch on (subcommand) @deffn Command {cvs watch on} [@code{-lR}] [@var{files}]@dots{} @cindex Read-only files, and watches Specify that developers should run @code{cvs edit} before editing @var{files}. @sc{cvs} will create working copies of @var{files} read-only, to remind developers to run the @code{cvs edit} command before working on them. If @var{files} includes the name of a directory, @sc{cvs} arranges to watch all files added to the corresponding repository directory, and sets a default for files added in the future; this allows the user to set notification policies on a per-directory basis. The contents of the directory are processed recursively, unless the @code{-l} option is given. The @code{-R} option can be used to force recursion if the @code{-l} option is set in @file{~/.cvsrc} (@pxref{~/.cvsrc}). If @var{files} is omitted, it defaults to the current directory. @cindex watch off (subcommand) @end deffn @deffn Command {cvs watch off} [@code{-lR}] [@var{files}]@dots{} Do not create @var{files} read-only on checkout; thus, developers will not be reminded to use @code{cvs edit} and @code{cvs unedit}. The @var{files} and options are processed as for @code{cvs watch on}. @end deffn @node Getting Notified @subsection Telling CVS to notify you You can tell @sc{cvs} that you want to receive notifications about various actions taken on a file. You can do this without using @code{cvs watch on} for the file, but generally you will want to use @code{cvs watch on}, to remind developers to use the @code{cvs edit} command. @cindex watch add (subcommand) @deffn Command {cvs watch add} [@code{-lR}] [@code{-a} @var{action}]@dots{} [@var{files}]@dots{} Add the current user to the list of people to receive notification of work done on @var{files}. The @code{-a} option specifies what kinds of events @sc{cvs} should notify the user about. @var{action} is one of the following: @table @code @item edit Another user has applied the @code{cvs edit} command (described below) to a watched file. @item commit Another user has committed changes to one of the named @var{files}. @item unedit Another user has abandoned editing a file (other than by committing changes). They can do this in several ways, by: @itemize @bullet @item applying the @code{cvs unedit} command (described below) to the file @item applying the @code{cvs release} command (@pxref{release}) to the file's parent directory (or recursively to a directory more than one level up) @item deleting the file and allowing @code{cvs update} to recreate it @end itemize @item all All of the above. @item none None of the above. (This is useful with @code{cvs edit}, described below.) @end table The @code{-a} option may appear more than once, or not at all. If omitted, the action defaults to @code{all}. The @var{files} and options are processed as for @code{cvs watch on}. @end deffn @cindex watch remove (subcommand) @deffn Command {cvs watch remove} [@code{-lR}] [@code{-a} @var{action}]@dots{} [@var{files}]@dots{} Remove a notification request established using @code{cvs watch add}; the arguments are the same. If the @code{-a} option is present, only watches for the specified actions are removed. @end deffn @cindex notify (admin file) When the conditions exist for notification, @sc{cvs} calls the @file{notify} administrative file. Edit @file{notify} as one edits the other administrative files (@pxref{Intro administrative files}). This file follows the usual conventions for administrative files (@pxref{syntax}), where each line is a regular expression followed by a command to execute. The command should contain a single occurrence of @samp{%s} which will be replaced by the user to notify; the rest of the information regarding the notification will be supplied to the command on standard input. The standard thing to put in the @code{notify} file is the single line: @example ALL mail %s -s "CVS notification" @end example @noindent This causes users to be notified by electronic mail. @c FIXME: should it be this hard to set up this @c behavior (and the result when one fails to do so, @c silent failure to notify, so non-obvious)? Should @c CVS give a warning if no line in notify matches (and @c document the use of "DEFAULT :" for the case where @c skipping the notification is indeed desired)? @cindex users (admin file) Note that if you set this up in the straightforward way, users receive notifications on the server machine. One could of course write a @file{notify} script which directed notifications elsewhere, but to make this easy, @sc{cvs} allows you to associate a notification address for each user. To do so create a file @file{users} in @file{CVSROOT} with a line for each user in the format @var{user}:@var{value}. Then instead of passing the name of the user to be notified to @file{notify}, @sc{cvs} will pass the @var{value} (normally an email address on some other machine). @sc{cvs} does not notify you for your own changes. Currently this check is done based on whether the user name of the person taking the action which triggers notification matches the user name of the person getting notification. In fact, in general, the watches features only track one edit by each user. It probably would be more useful if watches tracked each working directory separately, so this behavior might be worth changing. @c "behavior might be worth changing" is an effort to @c point to future directions while also not promising @c that "they" (as in "why don't they fix CVS to....") @c will do this. @c one implementation issue is identifying whether a @c working directory is same or different. Comparing @c pathnames/hostnames is hopeless, but having the server @c supply a serial number which the client stores in the @c CVS directory as a magic cookie should work. @node Editing files @subsection How to edit a file which is being watched @cindex Checkout, as term for getting ready to edit Since a file which is being watched is checked out read-only, you cannot simply edit it. To make it read-write, and inform others that you are planning to edit it, use the @code{cvs edit} command. Some systems call this a @dfn{checkout}, but @sc{cvs} uses that term for obtaining a copy of the sources (@pxref{Getting the source}), an operation which those systems call a @dfn{get} or a @dfn{fetch}. @c Issue to think about: should we transition CVS @c towards the "get" terminology? "cvs get" is already a @c synonym for "cvs checkout" and that section of the @c manual refers to "Getting the source". If this is @c done, needs to be done gingerly (for example, we should @c still accept "checkout" in .cvsrc files indefinitely @c even if the CVS's messages are changed from "cvs checkout: " @c to "cvs get: "). @c There is a concern about whether "get" is not as @c good for novices because it is a more general term @c than "checkout" (and thus arguably harder to assign @c a technical meaning for). @cindex edit (subcommand) @deffn Command {cvs edit} [@code{-lR}] [@code{-a} @var{action}]@dots{} [@var{files}]@dots{} Prepare to edit the working files @var{files}. @sc{cvs} makes the @var{files} read-write, and notifies users who have requested @code{edit} notification for any of @var{files}. The @code{cvs edit} command accepts the same options as the @code{cvs watch add} command, and establishes a temporary watch for the user on @var{files}; @sc{cvs} will remove the watch when @var{files} are @code{unedit}ed or @code{commit}ted. If the user does not wish to receive notifications, she should specify @code{-a none}. The @var{files} and the options are processed as for the @code{cvs watch} commands. @end deffn Normally when you are done with a set of changes, you use the @code{cvs commit} command, which checks in your changes and returns the watched files to their usual read-only state. But if you instead decide to abandon your changes, or not to make any changes, you can use the @code{cvs unedit} command. @cindex unedit (subcommand) @cindex Abandoning work @cindex Reverting to repository version @deffn Command {cvs unedit} [@code{-lR}] [@var{files}]@dots{} Abandon work on the working files @var{files}, and revert them to the repository versions on which they are based. @sc{cvs} makes those @var{files} read-only for which users have requested notification using @code{cvs watch on}. @sc{cvs} notifies users who have requested @code{unedit} notification for any of @var{files}. The @var{files} and options are processed as for the @code{cvs watch} commands. If watches are not in use, the @code{unedit} command probably does not work, and the way to revert to the repository version is with the command @code{cvs update -C file} (@pxref{update}). The meaning is not precisely the same; the latter may also bring in some changes which have been made in the repository since the last time you updated. @c It would be a useful enhancement to CVS to make @c unedit work in the non-watch case as well. @end deffn When using client/server @sc{cvs}, you can use the @code{cvs edit} and @code{cvs unedit} commands even if @sc{cvs} is unable to successfully communicate with the server; the notifications will be sent upon the next successful @sc{cvs} command. @node Watch information @subsection Information about who is watching and editing @cindex watchers (subcommand) @deffn Command {cvs watchers} [@code{-lR}] [@var{files}]@dots{} List the users currently watching changes to @var{files}. The report includes the files being watched, and the mail address of each watcher. The @var{files} and options are processed as for the @code{cvs watch} commands. @end deffn @cindex editors (subcommand) @deffn Command {cvs editors} [@code{-lR}] [@var{files}]@dots{} List the users currently working on @var{files}. The report includes the mail address of each user, the time when the user began working with the file, and the host and path of the working directory containing the file. The @var{files} and options are processed as for the @code{cvs watch} commands. @end deffn @node Watches Compatibility @subsection Using watches with old versions of CVS @cindex CVS 1.6, and watches If you use the watch features on a repository, it creates @file{CVS} directories in the repository and stores the information about watches in that directory. If you attempt to use @sc{cvs} 1.6 or earlier with the repository, you get an error message such as the following (all on one line): @example cvs update: cannot open CVS/Entries for reading: No such file or directory @end example @noindent and your operation will likely be aborted. To use the watch features, you must upgrade all copies of @sc{cvs} which use that repository in local or server mode. If you cannot upgrade, use the @code{watch off} and @code{watch remove} commands to remove all watches, and that will restore the repository to a state which @sc{cvs} 1.6 can cope with. @node Choosing a model @section Choosing between reserved or unreserved checkouts @cindex Choosing, reserved or unreserved checkouts Reserved and unreserved checkouts each have pros and cons. Let it be said that a lot of this is a matter of opinion or what works given different groups' working styles, but here is a brief description of some of the issues. There are many ways to organize a team of developers. @sc{cvs} does not try to enforce a certain organization. It is a tool that can be used in several ways. Reserved checkouts can be very counter-productive. If two persons want to edit different parts of a file, there may be no reason to prevent either of them from doing so. Also, it is common for someone to take out a lock on a file, because they are planning to edit it, but then forget to release the lock. @c "many groups"? specifics? cites to papers on this? @c some way to weasel-word it a bit more so we don't @c need facts :-)? People, especially people who are familiar with reserved checkouts, often wonder how often conflicts occur if unreserved checkouts are used, and how difficult they are to resolve. The experience with many groups is that they occur rarely and usually are relatively straightforward to resolve. The rarity of serious conflicts may be surprising, until one realizes that they occur only when two developers disagree on the proper design for a given section of code; such a disagreement suggests that the team has not been communicating properly in the first place. In order to collaborate under @emph{any} source management regimen, developers must agree on the general design of the system; given this agreement, overlapping changes are usually straightforward to merge. In some cases unreserved checkouts are clearly inappropriate. If no merge tool exists for the kind of file you are managing (for example word processor files or files edited by Computer Aided Design programs), and it is not desirable to change to a program which uses a mergeable data format, then resolving conflicts is going to be unpleasant enough that you generally will be better off to simply avoid the conflicts instead, by using reserved checkouts. The watches features described above in @ref{Watches} can be considered to be an intermediate model between reserved checkouts and unreserved checkouts. When you go to edit a file, it is possible to find out who else is editing it. And rather than having the system simply forbid both people editing the file, it can tell you what the situation is and let you figure out whether it is a problem in that particular case or not. Therefore, for some groups it can be considered the best of both the reserved checkout and unreserved checkout worlds. @c --------------------------------------------------------------------- @node Revision management @chapter Revision management @cindex Revision management @c -- This chapter could be expanded a lot. @c -- Experiences are very welcome! If you have read this far, you probably have a pretty good grasp on what @sc{cvs} can do for you. This chapter talks a little about things that you still have to decide. If you are doing development on your own using @sc{cvs} you could probably skip this chapter. The questions this chapter takes up become more important when more than one person is working in a repository. @menu * When to commit:: Some discussion on the subject @end menu @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node When to commit @section When to commit? @cindex When to commit @cindex Committing, when to @cindex Policy Your group should decide which policy to use regarding commits. Several policies are possible, and as your experience with @sc{cvs} grows you will probably find out what works for you. If you commit files too quickly you might commit files that do not even compile. If your partner updates his working sources to include your buggy file, he will be unable to compile the code. On the other hand, other persons will not be able to benefit from the improvements you make to the code if you commit very seldom, and conflicts will probably be more common. It is common to only commit files after making sure that they can be compiled. Some sites require that the files pass a test suite. Policies like this can be enforced using the commitinfo file (@pxref{commitinfo}), but you should think twice before you enforce such a convention. By making the development environment too controlled it might become too regimented and thus counter-productive to the real goal, which is to get software written. @c --------------------------------------------------------------------- @node Keyword substitution @chapter Keyword substitution @cindex Keyword substitution @cindex Keyword expansion @cindex Identifying files @comment Be careful when editing this chapter. @comment Remember that this file is kept under @comment version control, so we must not accidentally @comment include a valid keyword in the running text. As long as you edit source files inside a working directory you can always find out the state of your files via @samp{cvs status} and @samp{cvs log}. But as soon as you export the files from your development environment it becomes harder to identify which revisions they are. @sc{cvs} can use a mechanism known as @dfn{keyword substitution} (or @dfn{keyword expansion}) to help identifying the files. Embedded strings of the form @code{$@var{keyword}$} and @code{$@var{keyword}:@dots{}$} in a file are replaced with strings of the form @code{$@var{keyword}:@var{value}$} whenever you obtain a new revision of the file. @menu * Keyword list:: Keywords * Using keywords:: Using keywords * Avoiding substitution:: Avoiding substitution * Substitution modes:: Substitution modes * Configuring keyword expansion:: Configuring keyword expansion * Log keyword:: Problems with the $@i{}Log$ keyword. @end menu @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Keyword list @section Keyword List @cindex Keyword List @c FIXME: need some kind of example here I think, @c perhaps in a @c "Keyword intro" node. The intro in the "Keyword @c substitution" node itself seems OK, but to launch @c into a list of the keywords somehow seems too abrupt. This is a list of the keywords: @table @code @cindex Author keyword @item $@i{}Author$ The login name of the user who checked in the revision. @cindex CVSHeader keyword @item $@i{}CVSHeader A standard header (similar to $@i{}Header$, but with the CVS root stripped off). It contains the relative pathname of the @sc{rcs} file to the CVS root, the revision number, the date (UTC), the author, the state, and the locker (if locked). Files will normally never be locked when you use @sc{cvs}. Note that this keyword has only been recently introduced to @sc{cvs} and may cause problems with existing installations if $@i{}CVSHeader$ is already in the files for a different purpose. This keyword may be excluded using the @code{KeywordExpansion=eCVSHeader} in the @file{CVSROOT/config} file. See @ref{Configuring keyword expansion} for more details. @cindex Date keyword @item $@i{}Date$ The date and time (UTC) the revision was checked in. @cindex Header keyword @item $@i{}Header$ A standard header containing the full pathname of the @sc{rcs} file, the revision number, the date (UTC), the author, the state, and the locker (if locked). Files will normally never be locked when you use @sc{cvs}. @cindex Id keyword @item $@i{}Id$ Same as @code{$@i{}Header$}, except that the @sc{rcs} filename is without a path. @cindex Name keyword @item $@i{}Name$ Tag name used to check out this file. The keyword is expanded only if one checks out with an explicit tag name. For example, when running the command @code{cvs co -r first}, the keyword expands to @samp{Name: first}. @cindex Locker keyword @item $@i{}Locker$ The login name of the user who locked the revision (empty if not locked, which is the normal case unless @code{cvs admin -l} is in use). @cindex Log keyword @item $@i{}Log$ The log message supplied during commit, preceded by a header containing the @sc{rcs} filename, the revision number, the author, and the date (UTC). Existing log messages are @emph{not} replaced. Instead, the new log message is inserted after @code{$@i{}Log:@dots{}$}. Each new line is prefixed with the same string which precedes the @code{$Log} keyword. For example, if the file contains: @example /* Here is what people have been up to: * * $@i{}Log: frob.c,v $ * Revision 1.1 1997/01/03 14:23:51 joe * Add the superfrobnicate option * */ @end example @noindent then additional lines which are added when expanding the @code{$Log} keyword will be preceded by @samp{ * }. Unlike previous versions of @sc{cvs} and @sc{rcs}, the @dfn{comment leader} from the @sc{rcs} file is not used. The @code{$Log} keyword is useful for accumulating a complete change log in a source file, but for several reasons it can be problematic. @xref{Log keyword}. @cindex RCSfile keyword @item $@i{}RCSfile$ The name of the RCS file without a path. @cindex Revision keyword @item $@i{}Revision$ The revision number assigned to the revision. @cindex Source keyword @item $@i{}Source$ The full pathname of the RCS file. @cindex State keyword @item $@i{}State$ The state assigned to the revision. States can be assigned with @code{cvs admin -s}---see @ref{admin options}. @cindex Local keyword @item Local keyword The @code{LocalKeyword} option in the @file{CVSROOT/config} file may be used to specify a local keyword which is to be used as an alias for one of the other keywords. For example, if the @file{CVSROOT/config} file contains a line with @code{LocalKeyword=MYBSD=CVSHeader}, then a file with the local keyword $@i{}MYBSD$ will be expanded as if it were a $@i{}CVSHeader$ keyword. If the src/frob.c file contained this keyword, it might look something like this: @example /* * $@i{}MYBSD: src/frob.c,v 1.1 2003/05/04 09:27:45 john Exp $ */ @end example Many repositories make use of a such a ``local keyword'' feature. An old patch to @sc{cvs} provided the @code{LocalKeyword} feature using a @code{tag=} option and called this the ``custom tag'' or ``local tag'' feature. It was used in conjunction with the what they called the @code{tagexpand=} option. In @sc{cvs} this other option is known as the @code{KeywordExpand} option. See @ref{Configuring keyword expansion} for more details. Examples from popular projects include: $@i{}FreeBSD$, $@i{}NetBSD$, $@i{}OpenBSD$, $@i{}XFree86$, $@i{}Xorg$. The advantage of this is that you can include your local version information in a file using this local keyword without disrupting the upstream version information (which may be a different local keyword or a standard keyword). Allowing bug reports and the like to more properly identify the source of the original bug to the third-party and reducing the number of conflicts that arise during an import of a new version. All keyword expansion except the local keyword may be disabled using the @code{KeywordExpansion} option in the @file{CVSROOT/config} file---see @ref{Configuring keyword expansion} for more details. @end table @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Using keywords @section Using keywords To include a keyword string you simply include the relevant text string, such as @code{$@i{}Id$}, inside the file, and commit the file. @sc{cvs} will automatically expand the string as part of the commit operation. It is common to embed the @code{$@i{}Id$} string in the source files so that it gets passed through to generated files. For example, if you are managing computer program source code, you might include a variable which is initialized to contain that string. Or some C compilers may provide a @code{#pragma ident} directive. Or a document management system might provide a way to pass a string through to generated files. @c Would be nice to give an example, but doing this in @c portable C is not possible and the problem with @c picking any one language (VMS HELP files, Ada, @c troff, whatever) is that people use CVS for all @c kinds of files. @cindex Ident (shell command) The @code{ident} command (which is part of the @sc{rcs} package) can be used to extract keywords and their values from a file. This can be handy for text files, but it is even more useful for extracting keywords from binary files. @example $ ident samp.c samp.c: $@i{}Id: samp.c,v 1.5 1993/10/19 14:57:32 ceder Exp $ $ gcc samp.c $ ident a.out a.out: $@i{}Id: samp.c,v 1.5 1993/10/19 14:57:32 ceder Exp $ @end example @cindex What (shell command) S@sc{ccs} is another popular revision control system. It has a command, @code{what}, which is very similar to @code{ident} and used for the same purpose. Many sites without @sc{rcs} have @sc{sccs}. Since @code{what} looks for the character sequence @code{@@(#)} it is easy to include keywords that are detected by either command. Simply prefix the keyword with the magic @sc{sccs} phrase, like this: @example static char *id="@@(#) $@i{}Id: ab.c,v 1.5 1993/10/19 14:57:32 ceder Exp $"; @end example @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Avoiding substitution @section Avoiding substitution Keyword substitution has its disadvantages. Sometimes you might want the literal text string @samp{$@i{}Author$} to appear inside a file without @sc{cvs} interpreting it as a keyword and expanding it into something like @samp{$@i{}Author: ceder $}. There is unfortunately no way to selectively turn off keyword substitution. You can use @samp{-ko} (@pxref{Substitution modes}) to turn off keyword substitution entirely. In many cases you can avoid using keywords in the source, even though they appear in the final product. For example, the source for this manual contains @samp{$@@asis@{@}Author$} whenever the text @samp{$@i{}Author$} should appear. In @code{nroff} and @code{troff} you can embed the null-character @code{\&} inside the keyword for a similar effect. It is also possible to specify an explicit list of keywords to include or exclude using the @code{KeywordExpand} option in the @file{CVSROOT/config} file--see @ref{Configuring keyword expansion} for more details. This feature is intended primarily for use with the @code{LocalKeyword} option--see @ref{Keyword list}. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Substitution modes @section Substitution modes @cindex Keyword substitution, changing modes @cindex -k (keyword substitution) @cindex Kflag @c FIXME: This could be made more coherent, by expanding it @c with more examples or something. Each file has a stored default substitution mode, and each working directory copy of a file also has a substitution mode. The former is set by the @samp{-k} option to @code{cvs add} and @code{cvs admin}; the latter is set by the @samp{-k} or @samp{-A} options to @code{cvs checkout} or @code{cvs update}. @code{cvs diff} also has a @samp{-k} option. For some examples, see @ref{Binary files}, and @ref{Merging and keywords}. @c The fact that -A is overloaded to mean both reset @c sticky options and reset sticky tags/dates is @c somewhat questionable. Perhaps there should be @c separate options to reset sticky options (e.g. -k @c A") and tags/dates (someone suggested -r HEAD could @c do this instead of setting a sticky tag of "HEAD" @c as in the status quo but I haven't thought much @c about that idea. Of course -r .reset or something @c could be coined if this needs to be a new option). @c On the other hand, having -A mean "get things back @c into the state after a fresh checkout" has a certain @c appeal, and maybe there is no sufficient reason for @c creeping featurism in this area. The modes available are: @table @samp @item -kkv Generate keyword strings using the default form, e.g. @code{$@i{}Revision: 5.7 $} for the @code{Revision} keyword. @item -kkvl Like @samp{-kkv}, except that a locker's name is always inserted if the given revision is currently locked. The locker's name is only relevant if @code{cvs admin -l} is in use. @item -kk Generate only keyword names in keyword strings; omit their values. For example, for the @code{Revision} keyword, generate the string @code{$@i{}Revision$} instead of @code{$@i{}Revision: 5.7 $}. This option is useful to ignore differences due to keyword substitution when comparing different revisions of a file (@pxref{Merging and keywords}). @item -ko Generate the old keyword string, present in the working file just before it was checked in. For example, for the @code{Revision} keyword, generate the string @code{$@i{}Revision: 1.1 $} instead of @code{$@i{}Revision: 5.7 $} if that is how the string appeared when the file was checked in. @item -kb Like @samp{-ko}, but also inhibit conversion of line endings between the canonical form in which they are stored in the repository (linefeed only), and the form appropriate to the operating system in use on the client. For systems, like unix, which use linefeed only to terminate lines, this is very similar to @samp{-ko}. For more information on binary files, see @ref{Binary files}. In @sc{cvs} version 1.12.2 and later @samp{-kb}, as set by @code{cvs add}, @code{cvs admin}, or @code{cvs import} may not be overridden by a @samp{-k} option specified on the command line. @item -kv Generate only keyword values for keyword strings. For example, for the @code{Revision} keyword, generate the string @code{5.7} instead of @code{$@i{}Revision: 5.7 $}. This can help generate files in programming languages where it is hard to strip keyword delimiters like @code{$@i{}Revision: $} from a string. However, further keyword substitution cannot be performed once the keyword names are removed, so this option should be used with care. One often would like to use @samp{-kv} with @code{cvs export}---@pxref{export}. But be aware that doesn't handle an export containing binary files correctly. @end table @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Configuring keyword expansion @section Configuring Keyord Expansion @cindex Configuring keyword expansion In a repository that includes third-party software on vendor branches, it is sometimes helpful to configure CVS to use a local keyword instead of the standard $@i{}Id$ or $@i{}Header$ keywords. Examples from real projects includ, $@i{}Xorg$, $@i{}XFree86$, $@i{}FreeBSD$, $@i{}NetBSD$, $@i{}OpenBSD$, and even $@i{}dotat$. The advantage of this is that you can include your local version information in a file using this local keyword (sometimes called a ``custom tag'' or a ``local tag'') without disrupting the upstream version information (which may be a different local keyword or a standard keyword). In these cases, it is typically desirable to disable the expansion of all keywords except the configured local keyword. The @code{KeywordExpansion} option in the @file{CVSROOT/config} file is intended to allow for the either the explicit exclusion of a keyword or list of keywords, or for the explicit inclusion of a keyword or a list of keywords. This list may include the @code{LocalKeyword} that has been configured. The @code{KeywordExpansion} option is followed by @code{=} and the next character may either be @code{i} to start an inclusion list or @code{e} to start an exclusion list. If the following lines were added to the @file{CVSROOT/config} file: @example # Add a "MyBSD" keyword and restrict keyword # expansion LocalKeyword=MyBSD=CVSHeader KeywordExpand=iMyBSD @end example then only the $@i{}MyBSD$ keyword would be expanded. A list may be used. The this example: @example # Add a "MyBSD" keyword and restrict keyword # expansion to the MyBSD, Name and Date keywords. LocalKeyword=MyBSD=CVSHeader KeywordExpand=iMyBSD,Name,Date @end example would allow $@i{}MyBSD$, $@i{}Name$, and $@i{}Date$ to be expanded. It is also possible to configure an exclusion list using the following: @example # Do not expand the non-RCS keyword CVSHeader KeywordExpand=eCVSHeader @end example This allows @sc{cvs} to ignore the recently introduced $@i{}CVSHeader$ keyword and retain all of the others. The exclusion entry could also contain the standard RCS keyword list, but this could be confusing to users that expect RCS keywords to be expanded, so ycare should be taken to properly set user expectations for a repository that is configured in that manner. If there is a desire to not have any RCS keywords expanded and not use the @code{-ko} flags everywhere, an administrator may disable all keyword expansion using the @file{CVSROOT/config} line: @example # Do not expand any RCS keywords KeywordExpand=i @end example this could be confusing to users that expect RCS keywords like $@i{}Id$ to be expanded properly, so care should be taken to properly set user expectations for a repository so configured. It should be noted that a patch to provide both the @code{KeywordExpand} and @code{LocalKeyword} features has been around a long time. However, that patch implemented these features using @code{tag=} and @code{tagexpand=} keywords and those keywords are NOT recognized. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Log keyword @section Problems with the $@i{}Log$ keyword. The @code{$@i{}Log$} keyword is somewhat controversial. As long as you are working on your development system the information is easily accessible even if you do not use the @code{$@i{}Log$} keyword---just do a @code{cvs log}. Once you export the file the history information might be useless anyhow. A more serious concern is that @sc{cvs} is not good at handling @code{$@i{}Log$} entries when a branch is merged onto the main trunk. Conflicts often result from the merging operation. @c Might want to check whether the CVS implementation @c of RCS_merge has this problem the same way rcsmerge @c does. I would assume so.... People also tend to "fix" the log entries in the file (correcting spelling mistakes and maybe even factual errors). If that is done the information from @code{cvs log} will not be consistent with the information inside the file. This may or may not be a problem in real life. It has been suggested that the @code{$@i{}Log$} keyword should be inserted @emph{last} in the file, and not in the files header, if it is to be used at all. That way the long list of change messages will not interfere with everyday source file browsing. @c --------------------------------------------------------------------- @node Tracking sources @chapter Tracking third-party sources @cindex Third-party sources @cindex Tracking sources @c FIXME: Need discussion of added and removed files. @c FIXME: This doesn't really adequately introduce the @c concepts of "vendor" and "you". They don't *have* @c to be separate organizations or separate people. @c We want a description which is somewhat more based on @c the technical issues of which sources go where, but @c also with enough examples of how this relates to @c relationships like customer-supplier, developer-QA, @c maintainer-contributor, or whatever, to make it @c seem concrete. If you modify a program to better fit your site, you probably want to include your modifications when the next release of the program arrives. @sc{cvs} can help you with this task. @cindex Vendor @cindex Vendor branch @cindex Branch, vendor- In the terminology used in @sc{cvs}, the supplier of the program is called a @dfn{vendor}. The unmodified distribution from the vendor is checked in on its own branch, the @dfn{vendor branch}. @sc{cvs} reserves branch 1.1.1 for this use. When you modify the source and commit it, your revision will end up on the main trunk. When a new release is made by the vendor, you commit it on the vendor branch and copy the modifications onto the main trunk. Use the @code{import} command to create and update the vendor branch. When you import a new file, the vendor branch is made the `head' revision, so anyone that checks out a copy of the file gets that revision. When a local modification is committed it is placed on the main trunk, and made the `head' revision. @menu * First import:: Importing for the first time * Update imports:: Updating with the import command * Reverting local changes:: Reverting to the latest vendor release * Binary files in imports:: Binary files require special handling * Keywords in imports:: Keyword substitution might be undesirable * Multiple vendor branches:: What if you get sources from several places? @end menu @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node First import @section Importing for the first time @cindex Importing modules @c Should mention naming conventions for vendor tags, @c release tags, and perhaps directory names. Use the @code{import} command to check in the sources for the first time. When you use the @code{import} command to track third-party sources, the @dfn{vendor tag} and @dfn{release tags} are useful. The @dfn{vendor tag} is a symbolic name for the branch (which is always 1.1.1, unless you use the @samp{-b @var{branch}} flag---see @ref{Multiple vendor branches}.). The @dfn{release tags} are symbolic names for a particular release, such as @samp{FSF_0_04}. @c I'm not completely sure this belongs here. But @c we need to say it _somewhere_ reasonably obvious; it @c is a common misconception among people first learning CVS Note that @code{import} does @emph{not} change the directory in which you invoke it. In particular, it does not set up that directory as a @sc{cvs} working directory; if you want to work with the sources import them first and then check them out into a different directory (@pxref{Getting the source}). @cindex wdiff (import example) Suppose you have the sources to a program called @code{wdiff} in a directory @file{wdiff-0.04}, and are going to make private modifications that you want to be able to use even when new releases are made in the future. You start by importing the source to your repository: @example $ cd wdiff-0.04 $ cvs import -m "Import of FSF v. 0.04" fsf/wdiff FSF_DIST WDIFF_0_04 @end example The vendor tag is named @samp{FSF_DIST} in the above example, and the only release tag assigned is @samp{WDIFF_0_04}. @c FIXME: Need to say where fsf/wdiff comes from. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Update imports @section Updating with the import command When a new release of the source arrives, you import it into the repository with the same @code{import} command that you used to set up the repository in the first place. The only difference is that you specify a different release tag this time: @example $ tar xfz wdiff-0.05.tar.gz $ cd wdiff-0.05 $ cvs import -m "Import of FSF v. 0.05" fsf/wdiff FSF_DIST WDIFF_0_05 @end example For files that have not been modified locally, the newly created revision becomes the head revision. If you have made local changes, @code{import} will warn you that you must merge the changes into the main trunk, and tell you to use @samp{checkout -j} to do so: @c FIXME: why "wdiff" here and "fsf/wdiff" in the @c "import"? I think the assumption is that one has @c "wdiff fsf/wdiff" or some such in modules, but it @c would be better to not use modules in this example. @example $ cvs checkout -jFSF_DIST:yesterday -jFSF_DIST wdiff @end example @noindent The above command will check out the latest revision of @samp{wdiff}, merging the changes made on the vendor branch @samp{FSF_DIST} since yesterday into the working copy. If any conflicts arise during the merge they should be resolved in the normal way (@pxref{Conflicts example}). Then, the modified files may be committed. However, it is much better to use the two release tags rather than using a date on the branch as suggested above: @example $ cvs checkout -jWDIFF_0_04 -jWDIFF_0_05 wdiff @end example @noindent The reason this is better is that using a date, as suggested above, assumes that you do not import more than one release of a product per day. More importantly, using the release tags allows @sc{cvs} to detect files that were removed between the two vendor releases and mark them for removal. Since @code{import} has no way to detect removed files, you should do a merge like this even if @code{import} doesn't tell you to. @node Reverting local changes @section Reverting to the latest vendor release You can also revert local changes completely and return to the latest vendor release by changing the `head' revision back to the vendor branch on all files. For example, if you have a checked-out copy of the sources in @file{~/work.d/wdiff}, and you want to revert to the vendor's version for all the files in that directory, you would type: @example $ cd ~/work.d/wdiff $ cvs admin -bWDIFF . @end example @noindent You must specify the @samp{-bWDIFF} without any space after the @samp{-b}. @xref{admin options}. @node Binary files in imports @section How to handle binary files with cvs import Use the @samp{-k} wrapper option to tell import which files are binary. @xref{Wrappers}. @node Keywords in imports @section How to handle keyword substitution with cvs import The sources which you are importing may contain keywords (@pxref{Keyword substitution}). For example, the vendor may use @sc{cvs} or some other system which uses similar keyword expansion syntax. If you just import the files in the default fashion, then the keyword expansions supplied by the vendor will be replaced by keyword expansions supplied by your own copy of @sc{cvs}. It may be more convenient to maintain the expansions supplied by the vendor, so that this information can supply information about the sources that you imported from the vendor. To maintain the keyword expansions supplied by the vendor, supply the @samp{-ko} option to @code{cvs import} the first time you import the file. This will turn off keyword expansion for that file entirely, so if you want to be more selective you'll have to think about what you want and use the @samp{-k} option to @code{cvs update} or @code{cvs admin} as appropriate. @c Supplying -ko to import if the file already existed @c has no effect. Not clear to me whether it should @c or not. @node Multiple vendor branches @section Multiple vendor branches All the examples so far assume that there is only one vendor from which you are getting sources. In some situations you might get sources from a variety of places. For example, suppose that you are dealing with a project where many different people and teams are modifying the software. There are a variety of ways to handle this, but in some cases you have a bunch of source trees lying around and what you want to do more than anything else is just to all put them in @sc{cvs} so that you at least have them in one place. For handling situations in which there may be more than one vendor, you may specify the @samp{-b} option to @code{cvs import}. It takes as an argument the vendor branch to import to. The default is @samp{-b 1.1.1}. For example, suppose that there are two teams, the red team and the blue team, that are sending you sources. You want to import the red team's efforts to branch 1.1.1 and use the vendor tag RED. You want to import the blue team's efforts to branch 1.1.3 and use the vendor tag BLUE. So the commands you might use are: @example $ cvs import dir RED RED_1-0 $ cvs import -b 1.1.3 dir BLUE BLUE_1-5 @end example Note that if your vendor tag does not match your @samp{-b} option, @sc{cvs} will not detect this case! For example, @example $ cvs import -b 1.1.3 dir RED RED_1-0 @end example @noindent Be careful; this kind of mismatch is sure to sow confusion or worse. I can't think of a useful purpose for the ability to specify a mismatch here, but if you discover such a use, don't. @sc{cvs} is likely to make this an error in some future release. @c Probably should say more about the semantics of @c multiple branches. What about the default branch? @c What about joining (perhaps not as useful with @c multiple branches, or perhaps it is. Either way @c should be mentioned). @c I'm not sure about the best location for this. In @c one sense, it might belong right after we've introduced @c CVS's basic version control model, because people need @c to figure out builds right away. The current location @c is based on the theory that it kind of akin to the @c "Revision management" section. @node Builds @chapter How your build system interacts with CVS @cindex Builds @cindex make As mentioned in the introduction, @sc{cvs} does not contain software for building your software from source code. This section describes how various aspects of your build system might interact with @sc{cvs}. @c Is there a way to discuss this without reference to @c tools other than CVS? I'm not sure there is; I @c wouldn't think that people who learn CVS first would @c even have this concern. One common question, especially from people who are accustomed to @sc{rcs}, is how to make their build get an up to date copy of the sources. The answer to this with @sc{cvs} is two-fold. First of all, since @sc{cvs} itself can recurse through directories, there is no need to modify your @file{Makefile} (or whatever configuration file your build tool uses) to make sure each file is up to date. Instead, just use two commands, first @code{cvs -q update} and then @code{make} or whatever the command is to invoke your build tool. Secondly, you do not necessarily @emph{want} to get a copy of a change someone else made until you have finished your own work. One suggested approach is to first update your sources, then implement, build and test the change you were thinking of, and then commit your sources (updating first if necessary). By periodically (in between changes, using the approach just described) updating your entire tree, you ensure that your sources are sufficiently up to date. @cindex Bill of materials One common need is to record which versions of which source files went into a particular build. This kind of functionality is sometimes called @dfn{bill of materials} or something similar. The best way to do this with @sc{cvs} is to use the @code{tag} command to record which versions went into a given build (@pxref{Tags}). Using @sc{cvs} in the most straightforward manner possible, each developer will have a copy of the entire source tree which is used in a particular build. If the source tree is small, or if developers are geographically dispersed, this is the preferred solution. In fact one approach for larger projects is to break a project down into smaller @c I say subsystem instead of module because they may or @c may not use the modules file. separately-compiled subsystems, and arrange a way of releasing them internally so that each developer need check out only those subsystems which they are actively working on. Another approach is to set up a structure which allows developers to have their own copies of some files, and for other files to access source files from a central location. Many people have come up with some such a @c two such people are paul@sander.cupertino.ca.us (for @c a previous employer) @c and gtornblo@senet.abb.se (spicm and related tools), @c but as far as I know @c no one has nicely packaged or released such a system (or @c instructions for constructing one). system using features such as the symbolic link feature found in many operating systems, or the @code{VPATH} feature found in many versions of @code{make}. One build tool which is designed to help with this kind of thing is Odin (see @code{ftp://ftp.cs.colorado.edu/pub/distribs/odin}). @c Should we be saying more about Odin? Or how you use @c it with CVS? Also, the Prime Time Freeware for Unix @c disk (see http://www.ptf.com/) has Odin (with a nice @c paragraph summarizing it on the web), so that might be a @c semi-"official" place to point people. @c @c Of course, many non-CVS systems have this kind of @c functionality, for example OSF's ODE @c (http://www.osf.org/ode/) or mk @c (http://www.grin.net/~pzi/mk-3.18.4.docs/mk_toc.html @c He has changed providers in the past; a search engine search @c for "Peter Ziobrzynski" probably won't get too many @c spurious hits :-). A more stable URL might be @c ftp://ftp.uu.net/pub/cmvc/mk). But I'm not sure @c there is any point in mentioning them here unless they @c can work with CVS. @c --------------------------------------------------------------------- @node Special Files @chapter Special Files @cindex Special files @cindex Device nodes @cindex Ownership, saving in CVS @cindex Permissions, saving in CVS @cindex Hard links @cindex Symbolic links In normal circumstances, @sc{cvs} works only with regular files. Every file in a project is assumed to be persistent; it must be possible to open, read and close them; and so on. @sc{cvs} also ignores file permissions and ownerships, leaving such issues to be resolved by the developer at installation time. In other words, it is not possible to "check in" a device into a repository; if the device file cannot be opened, @sc{cvs} will refuse to handle it. Files also lose their ownerships and permissions during repository transactions. @c --------------------------------------------------------------------- @node CVS commands @appendix Guide to CVS commands This appendix describes the overall structure of @sc{cvs} commands, and describes some commands in detail (others are described elsewhere; for a quick reference to @sc{cvs} commands, @pxref{Invoking CVS}). @c The idea is that we want to move the commands which @c are described here into the main body of the manual, @c in the process reorganizing the manual to be @c organized around what the user wants to do, not @c organized around CVS commands. @c @c Note that many users do expect a manual which is @c organized by command. At least some users do. @c One good addition to the "organized by command" @c section (if any) would be "see also" links. @c The awk manual might be a good example; it has a @c reference manual which is more verbose than Invoking @c CVS but probably somewhat less verbose than CVS @c Commands. @menu * Structure:: Overall structure of CVS commands * Exit status:: Indicating CVS's success or failure * ~/.cvsrc:: Default options with the ~/.csvrc file * Global options:: Options you give to the left of cvs_command * Common options:: Options you give to the right of cvs_command * admin:: Administration * checkout:: Checkout sources for editing * commit:: Check files into the repository * diff:: Show differences between revisions * export:: Export sources from CVS, similar to checkout * history:: Show status of files and users * import:: Import sources into CVS, using vendor branches * log:: Show log messages for files * rdiff:: 'patch' format diffs between releases * release:: Indicate that a directory is no longer in use * update:: Bring work tree in sync with repository @end menu @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Structure @appendixsec Overall structure of CVS commands @cindex Structure @cindex CVS command structure @cindex Command structure @cindex Format of CVS commands The overall format of all @sc{cvs} commands is: @example cvs [ cvs_options ] cvs_command [ command_options ] [ command_args ] @end example @table @code @item cvs The name of the @sc{cvs} program. @item cvs_options Some options that affect all sub-commands of @sc{cvs}. These are described below. @item cvs_command One of several different sub-commands. Some of the commands have aliases that can be used instead; those aliases are noted in the reference manual for that command. There are only two situations where you may omit @samp{cvs_command}: @samp{cvs -H} elicits a list of available commands, and @samp{cvs -v} displays version information on @sc{cvs} itself. @item command_options Options that are specific for the command. @item command_args Arguments to the commands. @end table There is unfortunately some confusion between @code{cvs_options} and @code{command_options}. @samp{-l}, when given as a @code{cvs_option}, only affects some of the commands. When it is given as a @code{command_option} is has a different meaning, and is accepted by more commands. In other words, do not take the above categorization too seriously. Look at the documentation instead. @node Exit status @appendixsec CVS's exit status @cindex Exit status, of CVS @sc{cvs} can indicate to the calling environment whether it succeeded or failed by setting its @dfn{exit status}. The exact way of testing the exit status will vary from one operating system to another. For example in a unix shell script the @samp{$?} variable will be 0 if the last command returned a successful exit status, or greater than 0 if the exit status indicated failure. If @sc{cvs} is successful, it returns a successful status; if there is an error, it prints an error message and returns a failure status. The one exception to this is the @code{cvs diff} command. It will return a successful status if it found no differences, or a failure status if there were differences or if there was an error. Because this behavior provides no good way to detect errors, in the future it is possible that @code{cvs diff} will be changed to behave like the other @sc{cvs} commands. @c It might seem like checking whether cvs -q diff @c produces empty or non-empty output can tell whether @c there were differences or not. But it seems like @c there are cases with output but no differences @c (testsuite basica-8b). It is not clear to me how @c useful it is for a script to be able to check @c whether there were differences. @c FIXCVS? In previous versions of CVS, cvs diff @c returned 0 for no differences, 1 for differences, or @c 2 for errors. Is this behavior worth trying to @c bring back (but what does it mean for VMS?)? @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node ~/.cvsrc @appendixsec Default options and the ~/.cvsrc file @cindex .cvsrc file @cindex Option defaults There are some @code{command_options} that are used so often that you might have set up an alias or some other means to make sure you always specify that option. One example (the one that drove the implementation of the @file{.cvsrc} support, actually) is that many people find the default output of the @samp{diff} command to be very hard to read, and that either context diffs or unidiffs are much easier to understand. The @file{~/.cvsrc} file is a way that you can add default options to @code{cvs_commands} within cvs, instead of relying on aliases or other shell scripts. The format of the @file{~/.cvsrc} file is simple. The file is searched for a line that begins with the same name as the @code{cvs_command} being executed. If a match is found, then the remainder of the line is split up (at whitespace characters) into separate options and added to the command arguments @emph{before} any options from the command line. If a command has two names (e.g., @code{checkout} and @code{co}), the official name, not necessarily the one used on the command line, will be used to match against the file. So if this is the contents of the user's @file{~/.cvsrc} file: @example log -N diff -uN rdiff -u update -Pd checkout -P release -d @end example @noindent the command @samp{cvs checkout foo} would have the @samp{-P} option added to the arguments, as well as @samp{cvs co foo}. With the example file above, the output from @samp{cvs diff foobar} will be in unidiff format. @samp{cvs diff -c foobar} will provide context diffs, as usual. Getting "old" format diffs would be slightly more complicated, because @code{diff} doesn't have an option to specify use of the "old" format, so you would need @samp{cvs -f diff foobar}. In place of the command name you can use @code{cvs} to specify global options (@pxref{Global options}). For example the following line in @file{.cvsrc} @example cvs -z6 @end example @noindent causes @sc{cvs} to use compression level 6. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Global options @appendixsec Global options @cindex Options, global @cindex Global options @cindex Left-hand options The available @samp{cvs_options} (that are given to the left of @samp{cvs_command}) are: @table @code @item --allow-root=@var{rootdir} Specify legal @sc{cvsroot} directory. See @ref{Password authentication server}. @cindex Authentication, stream @cindex Stream authentication @item -a Authenticate all communication between the client and the server. Only has an effect on the @sc{cvs} client. As of this writing, this is only implemented when using a GSSAPI connection (@pxref{GSSAPI authenticated}). Authentication prevents certain sorts of attacks involving hijacking the active @sc{tcp} connection. Enabling authentication does not enable encryption. @cindex RCSBIN, overriding @cindex Overriding RCSBIN @item -b @var{bindir} In @sc{cvs} 1.9.18 and older, this specified that @sc{rcs} programs are in the @var{bindir} directory. Current versions of @sc{cvs} do not run @sc{rcs} programs; for compatibility this option is accepted, but it does nothing. @cindex TMPDIR, overriding @cindex Overriding TMPDIR @item -T @var{tempdir} Use @var{tempdir} as the directory where temporary files are located. Overrides the setting of the @code{$TMPDIR} environment variable and any precompiled directory. This parameter should be specified as an absolute pathname. (When running client/server, @samp{-T} affects only the local process; specifying @samp{-T} for the client has no effect on the server and vice versa.) @cindex CVSROOT, overriding @cindex Overriding CVSROOT @item -d @var{cvs_root_directory} Use @var{cvs_root_directory} as the root directory pathname of the repository. Overrides the setting of the @code{$CVSROOT} environment variable. @xref{Repository}. @cindex EDITOR, overriding @cindex Overriding EDITOR @item -e @var{editor} Use @var{editor} to enter revision log information. Overrides the setting of the @code{$CVSEDITOR} and @code{$EDITOR} environment variables. For more information, see @ref{Committing your changes}. @item -f Do not read the @file{~/.cvsrc} file. This option is most often used because of the non-orthogonality of the @sc{cvs} option set. For example, the @samp{cvs log} option @samp{-N} (turn off display of tag names) does not have a corresponding option to turn the display on. So if you have @samp{-N} in the @file{~/.cvsrc} entry for @samp{log}, you may need to use @samp{-f} to show the tag names. @item -H @itemx --help Display usage information about the specified @samp{cvs_command} (but do not actually execute the command). If you don't specify a command name, @samp{cvs -H} displays overall help for @sc{cvs}, including a list of other help options. @c It seems to me it is better to document it this way @c rather than trying to update this documentation @c every time that we add a --help-foo option. But @c perhaps that is confusing... @item -l Do not log the @samp{cvs_command} in the command history (but execute it anyway). @xref{history}, for information on command history. @cindex Read-only repository mode @item -R Turns on read-only repository mode. This allows one to check out from a read-only repository, such as within an anoncvs server, or from a CDROM repository. Same effect as if the @code{CVSREADONLYFS} environment variable is set. Using @samp{-R} can also considerably speed up checkout's over NFS. @cindex Read-only mode @item -n Do not change any files. Attempt to execute the @samp{cvs_command}, but only to issue reports; do not remove, update, or merge any existing files, or create any new files. Note that @sc{cvs} will not necessarily produce exactly the same output as without @samp{-n}. In some cases the output will be the same, but in other cases @sc{cvs} will skip some of the processing that would have been required to produce the exact same output. @item -Q Cause the command to be really quiet; the command will only generate output for serious problems. @item -q Cause the command to be somewhat quiet; informational messages, such as reports of recursion through subdirectories, are suppressed. @cindex Read-only files, and -r @item -r Make new working files read-only. Same effect as if the @code{$CVSREAD} environment variable is set (@pxref{Environment variables}). The default is to make working files writable, unless watches are on (@pxref{Watches}). @item -s @var{variable}=@var{value} Set a user variable (@pxref{Variables}). @cindex Trace @item -t Trace program execution; display messages showing the steps of @sc{cvs} activity. Particularly useful with @samp{-n} to explore the potential impact of an unfamiliar command. @item -v @item --version Display version and copyright information for @sc{cvs}. @cindex CVSREAD, overriding @cindex Overriding CVSREAD @item -w Make new working files read-write. Overrides the setting of the @code{$CVSREAD} environment variable. Files are created read-write by default, unless @code{$CVSREAD} is set or @samp{-r} is given. @c Note that -w only overrides -r and CVSREAD; it has @c no effect on files which are readonly because of @c "cvs watch on". My guess is that is the way it @c should be (or should "cvs -w get" on a watched file @c be the same as a get and a cvs edit?), but I'm not @c completely sure whether to document it this way. @item -x @cindex Encryption Encrypt all communication between the client and the server. Only has an effect on the @sc{cvs} client. As of this writing, this is only implemented when using a GSSAPI connection (@pxref{GSSAPI authenticated}) or a Kerberos connection (@pxref{Kerberos authenticated}). Enabling encryption implies that message traffic is also authenticated. Encryption support is not available by default; it must be enabled using a special configure option, @file{--enable-encryption}, when you build @sc{cvs}. @item -z @var{gzip-level} @cindex Compression @cindex Gzip Set the compression level. Valid levels are 1 (high speed, low compression) to 9 (low speed, high compression), or 0 to disable compression (the default). Only has an effect on the @sc{cvs} client. @end table @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Common options @appendixsec Common command options @cindex Common options @cindex Right-hand options This section describes the @samp{command_options} that are available across several @sc{cvs} commands. These options are always given to the right of @samp{cvs_command}. Not all commands support all of these options; each option is only supported for commands where it makes sense. However, when a command has one of these options you can almost always count on the same behavior of the option as in other commands. (Other command options, which are listed with the individual commands, may have different behavior from one @sc{cvs} command to the other). @strong{Note: the @samp{history} command is an exception; it supports many options that conflict even with these standard options.} @table @code @cindex Dates @cindex Time @cindex Specifying dates @item -D @var{date_spec} Use the most recent revision no later than @var{date_spec}. @var{date_spec} is a single argument, a date description specifying a date in the past. The specification is @dfn{sticky} when you use it to make a private copy of a source file; that is, when you get a working file using @samp{-D}, @sc{cvs} records the date you specified, so that further updates in the same directory will use the same date (for more information on sticky tags/dates, @pxref{Sticky tags}). @samp{-D} is available with the @code{annotate}, @code{checkout}, @code{diff}, @code{export}, @code{history}, @code{rdiff}, @code{rtag}, @code{tag}, and @code{update} commands. (The @code{history} command uses this option in a slightly different way; @pxref{history options}). @c What other formats should we accept? I don't want @c to start accepting a whole mess of non-standard @c new formats (there are a lot which are in wide use in @c one context or another), but practicality does @c dictate some level of flexibility. @c * POSIX.2 (e.g. touch, ls output, date) and other @c POSIX and/or de facto unix standards (e.g. at). The @c practice here is too inconsistent to be of any use. @c * VMS dates. This is not a formal standard, but @c there is a published specification (see SYS$ASCTIM @c and SYS$BINTIM in the _VMS System Services Reference @c Manual_), it is implemented consistently in VMS @c utilities, and VMS users will expect CVS running on @c VMS to support this format (and if we're going to do @c that, better to make CVS support it on all @c platforms. Maybe). @c @c NOTE: The tar manual has some documentation for @c getdate.y (just for our info; we don't want to @c attempt to document all the formats accepted by @c getdate.y). @c @c One more note: In output, CVS should consistently @c use one date format, and that format should be one that @c it accepts in input as well. The former isn't @c really true (see survey below), and I'm not @c sure that either of those formats is accepted in @c input. @c @c cvs log @c current 1996/01/02 13:45:31 @c Internet 02 Jan 1996 13:45:31 UT @c ISO 1996-01-02 13:45:31 @c cvs ann @c current 02-Jan-96 @c Internet-like 02 Jan 96 @c ISO 96-01-02 @c cvs status @c current Tue Jun 11 02:54:53 1996 @c Internet [Tue,] 11 Jun 1996 02:54:53 @c ISO 1996-06-11 02:54:53 @c note: date possibly should be omitted entirely for @c other reasons. @c cvs editors @c current Tue Jun 11 02:54:53 1996 GMT @c cvs history @c current 06/11 02:54 +0000 @c any others? @c There is a good chance the proper solution has to @c involve at least some level of letting the user @c decide which format (with the default being the @c formats CVS has always used; changing these might be @c _very_ disruptive since scripts may very well be @c parsing them). @c @c Another random bit of prior art concerning dates is @c the strptime function which takes templates such as @c "%m/%d/%y", and apparent a variant of getdate() @c which also honors them. See @c X/Open CAE Specification, System Interfaces and @c Headers Issue 4, Version 2 (September 1994), in the @c entry for getdate() on page 231 @cindex Timezone, in input @cindex Zone, time, in input A wide variety of date formats are supported by @sc{cvs}. The most standard ones are ISO8601 (from the International Standards Organization) and the Internet e-mail standard (specified in RFC822 as amended by RFC1123). @c Probably should be doing more to spell out just what @c the rules are, rather than just giving examples. @c But I want to keep this simple too. @c So I don't know.... @c A few specific issues: (1) Maybe should reassure @c people that years after 2000 @c work (they are in the testsuite, so they do indeed @c work). (2) What do two digit years @c mean? Where do we accept them? (3) Local times can @c be ambiguous or nonexistent if they fall during the @c hour when daylight savings time goes into or out of @c effect. Pretty obscure, so I'm not at all sure we @c should be documenting the behavior in that case. ISO8601 dates have many variants but a few examples are: @example 1972-09-24 1972-09-24 20:05 @end example @c I doubt we really accept all ISO8601 format dates @c (for example, decimal hours like 1972-09-24 20,2) @c I'm not sure we should, many of them are pretty @c bizarre and it has lots of gratuitous multiple ways @c to specify the same thing. There are a lot more ISO8601 date formats, and @sc{cvs} accepts many of them, but you probably don't want to hear the @emph{whole} long story :-). @c Citing a URL here is kind of problematic given how @c much they change and people who have old versions of @c this manual, but in case we want to reinstate an @c ISO8601 URL, a few are: @c http://www.saqqara.demon.co.uk/datefmt.htm @c http://www.cl.cam.ac.uk/~mgk25/iso-time.html @c Citing some other ISO8601 source is probably even @c worse :-). In addition to the dates allowed in Internet e-mail itself, @sc{cvs} also allows some of the fields to be omitted. For example: @c FIXME: Need to figure out better, and document, @c what we want to allow the user to omit. @c NOTE: "omit" does not imply "reorder". @c FIXME: Need to cite a web page describing how to get @c RFC's. @example 24 Sep 1972 20:05 24 Sep @end example The date is interpreted as being in the local timezone, unless a specific timezone is specified. These two date formats are preferred. However, @sc{cvs} currently accepts a wide variety of other date formats. They are intentionally not documented here in any detail, and future versions of @sc{cvs} might not accept all of them. @c We should document and testsuite "now" and @c "yesterday". "now" is mentioned in the FAQ and @c "yesterday" is mentioned in this document (and the @c message from "cvs import" suggesting a merge @c command). What else? Probably some/all of the "3 @c weeks ago" family. @c @c Maybe at @c some point have CVS start give warnings on "unofficial" @c formats (many of which might be typos or user @c misunderstandings, and/or formats people never/rarely @c use to specify dates)? One such format is @code{@var{month}/@var{day}/@var{year}}. This may confuse people who are accustomed to having the month and day in the other order; @samp{1/4/96} is January 4, not April 1. Remember to quote the argument to the @samp{-D} flag so that your shell doesn't interpret spaces as argument separators. A command using the @samp{-D} flag can look like this: @example $ cvs diff -D "1 hour ago" cvs.texinfo @end example @cindex Forcing a tag match @item -f When you specify a particular date or tag to @sc{cvs} commands, they normally ignore files that do not contain the tag (or did not exist prior to the date) that you specified. Use the @samp{-f} option if you want files retrieved even when there is no match for the tag or date. (The most recent revision of the file will be used). Note that even with @samp{-f}, a tag that you specify must exist (that is, in some file, not necessary in every file). This is so that @sc{cvs} will continue to give an error if you mistype a tag name. @need 800 @samp{-f} is available with these commands: @code{annotate}, @code{checkout}, @code{export}, @code{rdiff}, @code{rtag}, and @code{update}. @strong{WARNING: The @code{commit} and @code{remove} commands also have a @samp{-f} option, but it has a different behavior for those commands. See @ref{commit options}, and @ref{Removing files}.} @item -k @var{kflag} Override the default processing of RCS keywords other than @samp{-kb}. @xref{Keyword substitution}, for the meaning of @var{kflag}. Used with the @code{checkout} and @code{update} commands, your @var{kflag} specification is @dfn{sticky}; that is, when you use this option with a @code{checkout} or @code{update} command, @sc{cvs} associates your selected @var{kflag} with any files it operates on, and continues to use that @var{kflag} with future commands on the same files until you specify otherwise. The @samp{-k} option is available with the @code{add}, @code{checkout}, @code{diff}, @code{export}, @code{import} and @code{update} commands. @strong{WARNING: Prior to CVS version 1.12.2, the @samp{-k} flag overrode the @samp{-kb} indication for a binary file. This could sometimes corrupt binary files. @xref{Merging and keywords}, for more.} @item -l Local; run only in current working directory, rather than recursing through subdirectories. Available with the following commands: @code{annotate}, @code{checkout}, @code{commit}, @code{diff}, @code{edit}, @code{editors}, @code{export}, @code{log}, @code{rdiff}, @code{remove}, @code{rtag}, @code{status}, @code{tag}, @code{unedit}, @code{update}, @code{watch}, and @code{watchers}. @cindex Editor, avoiding invocation of @cindex Avoiding editor invocation @item -m @var{message} Use @var{message} as log information, instead of invoking an editor. Available with the following commands: @code{add}, @code{commit} and @code{import}. @item -n Do not run any tag program. (A program can be specified to run in the modules database (@pxref{modules}); this option bypasses it). @strong{Note: this is not the same as the @samp{cvs -n} program option, which you can specify to the left of a cvs command!} Available with the @code{checkout}, @code{commit}, @code{export}, and @code{rtag} commands. @item -P Prune empty directories. See @ref{Removing directories}. @item -p Pipe the files retrieved from the repository to standard output, rather than writing them in the current directory. Available with the @code{checkout} and @code{update} commands. @item -R Process directories recursively. This is on by default. Available with the following commands: @code{annotate}, @code{checkout}, @code{commit}, @code{diff}, @code{edit}, @code{editors}, @code{export}, @code{rdiff}, @code{remove}, @code{rtag}, @code{status}, @code{tag}, @code{unedit}, @code{update}, @code{watch}, and @code{watchers}. @item -r @var{tag} @cindex HEAD, special tag @cindex BASE, special tag Use the revision specified by the @var{tag} argument instead of the default @dfn{head} revision. As well as arbitrary tags defined with the @code{tag} or @code{rtag} command, two special tags are always available: @samp{HEAD} refers to the most recent version available in the repository, and @samp{BASE} refers to the revision you last checked out into the current working directory. @c FIXME: What does HEAD really mean? I believe that @c the current answer is the head of the default branch @c for all cvs commands except diff. For diff, it @c seems to be (a) the head of the trunk (or the default @c branch?) if there is no sticky tag, (b) the head of the @c branch for the sticky tag, if there is a sticky tag. @c (b) is ugly as it differs @c from what HEAD means for other commands, but people @c and/or scripts are quite possibly used to it. @c See "head" tests in sanity.sh. @c Probably the best fix is to introduce two new @c special tags, ".thead" for the head of the trunk, @c and ".bhead" for the head of the current branch. @c Then deprecate HEAD. This has the advantage of @c not surprising people with a change to HEAD, and a @c side benefit of also phasing out the poorly-named @c HEAD (see discussion of reserved tag names in node @c "Tags"). Of course, .thead and .bhead should be @c carefully implemented (with the implementation the @c same for "diff" as for everyone else), test cases @c written (similar to the ones in "head"), new tests @c cases written for things like default branches, &c. The tag specification is sticky when you use this @c option with @code{checkout} or @code{update} to make your own copy of a file: @sc{cvs} remembers the tag and continues to use it on future update commands, until you specify otherwise (for more information on sticky tags/dates, @pxref{Sticky tags}). The tag can be either a symbolic or numeric tag, as described in @ref{Tags}, or the name of a branch, as described in @ref{Branching and merging}. Specifying the @samp{-q} global option along with the @samp{-r} command option is often useful, to suppress the warning messages when the @sc{rcs} file does not contain the specified tag. @strong{Note: this is not the same as the overall @samp{cvs -r} option, which you can specify to the left of a @sc{cvs} command!} @samp{-r} is available with the @code{checkout}, @code{commit}, @code{diff}, @code{history}, @code{export}, @code{rdiff}, @code{rtag}, and @code{update} commands. @item -W Specify file names that should be filtered. You can use this option repeatedly. The spec can be a file name pattern of the same type that you can specify in the @file{.cvswrappers} file. Available with the following commands: @code{import}, and @code{update}. @end table @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node admin @appendixsec admin---Administration @cindex Admin (subcommand) @itemize @bullet @item Requires: repository, working directory. @item Changes: repository. @item Synonym: rcs @end itemize This is the @sc{cvs} interface to assorted administrative facilities. Some of them have questionable usefulness for @sc{cvs} but exist for historical purposes. Some of the questionable options are likely to disappear in the future. This command @emph{does} work recursively, so extreme care should be used. @cindex cvsadmin @cindex UserAdminOptions, in CVSROOT/config On unix, if there is a group named @code{cvsadmin}, only members of that group can run @code{cvs admin} commands, except for those specified using the @code{UserAdminOptions} configuration option in the @file{CVSROOT/config} file. Options specified using @code{UserAdminOptions} can be run by any user. See @ref{config} for more on @code{UserAdminOptions}. The @code{cvsadmin} group should exist on the server, or any system running the non-client/server @sc{cvs}. To disallow @code{cvs admin} for all users, create a group with no users in it. On NT, the @code{cvsadmin} feature does not exist and all users can run @code{cvs admin}. @menu * admin options:: admin options @end menu @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node admin options @appendixsubsec admin options Some of these options have questionable usefulness for @sc{cvs} but exist for historical purposes. Some even make it impossible to use @sc{cvs} until you undo the effect! @table @code @item -A@var{oldfile} Might not work together with @sc{cvs}. Append the access list of @var{oldfile} to the access list of the @sc{rcs} file. @item -a@var{logins} Might not work together with @sc{cvs}. Append the login names appearing in the comma-separated list @var{logins} to the access list of the @sc{rcs} file. @item -b[@var{rev}] Set the default branch to @var{rev}. In @sc{cvs}, you normally do not manipulate default branches; sticky tags (@pxref{Sticky tags}) are a better way to decide which branch you want to work on. There is one reason to run @code{cvs admin -b}: to revert to the vendor's version when using vendor branches (@pxref{Reverting local changes}). There can be no space between @samp{-b} and its argument. @c Hmm, we don't document the usage where rev is @c omitted. Maybe that usage can/should be deprecated @c (and replaced with -bHEAD or something?) (so we can toss @c the optional argument). Note that -bHEAD does not @c work, as of 17 Sep 1997, but probably will once "cvs @c admin" is internal to CVS. @cindex Comment leader @item -c@var{string} Sets the comment leader to @var{string}. The comment leader is not used by current versions of @sc{cvs} or @sc{rcs} 5.7. Therefore, you can almost surely not worry about it. @xref{Keyword substitution}. @item -e[@var{logins}] Might not work together with @sc{cvs}. Erase the login names appearing in the comma-separated list @var{logins} from the access list of the RCS file. If @var{logins} is omitted, erase the entire access list. There can be no space between @samp{-e} and its argument. @item -I Run interactively, even if the standard input is not a terminal. This option does not work with the client/server @sc{cvs} and is likely to disappear in a future release of @sc{cvs}. @item -i Useless with @sc{cvs}. This creates and initializes a new @sc{rcs} file, without depositing a revision. With @sc{cvs}, add files with the @code{cvs add} command (@pxref{Adding files}). @item -k@var{subst} Set the default keyword substitution to @var{subst}. @xref{Keyword substitution}. Giving an explicit @samp{-k} option to @code{cvs update}, @code{cvs export}, or @code{cvs checkout} overrides this default. @item -l[@var{rev}] Lock the revision with number @var{rev}. If a branch is given, lock the latest revision on that branch. If @var{rev} is omitted, lock the latest revision on the default branch. There can be no space between @samp{-l} and its argument. This can be used in conjunction with the @file{rcslock.pl} script in the @file{contrib} directory of the @sc{cvs} source distribution to provide reserved checkouts (where only one user can be editing a given file at a time). See the comments in that file for details (and see the @file{README} file in that directory for disclaimers about the unsupported nature of contrib). According to comments in that file, locking must set to strict (which is the default). @item -L Set locking to strict. Strict locking means that the owner of an RCS file is not exempt from locking for checkin. For use with @sc{cvs}, strict locking must be set; see the discussion under the @samp{-l} option above. @cindex Changing a log message @cindex Replacing a log message @cindex Correcting a log message @cindex Fixing a log message @cindex Log message, correcting @item -m@var{rev}:@var{msg} Replace the log message of revision @var{rev} with @var{msg}. @c The rcs -M option, to suppress sending mail, has never been @c documented as a cvs admin option. @item -N@var{name}[:[@var{rev}]] Act like @samp{-n}, except override any previous assignment of @var{name}. For use with magic branches, see @ref{Magic branch numbers}. @item -n@var{name}[:[@var{rev}]] Associate the symbolic name @var{name} with the branch or revision @var{rev}. It is normally better to use @samp{cvs tag} or @samp{cvs rtag} instead. Delete the symbolic name if both @samp{:} and @var{rev} are omitted; otherwise, print an error message if @var{name} is already associated with another number. If @var{rev} is symbolic, it is expanded before association. A @var{rev} consisting of a branch number followed by a @samp{.} stands for the current latest revision in the branch. A @samp{:} with an empty @var{rev} stands for the current latest revision on the default branch, normally the trunk. For example, @samp{cvs admin -n@var{name}:} associates @var{name} with the current latest revision of all the RCS files; this contrasts with @samp{cvs admin -n@var{name}:$} which associates @var{name} with the revision numbers extracted from keyword strings in the corresponding working files. @cindex Deleting revisions @cindex Outdating revisions @cindex Saving space @item -o@var{range} Deletes (@dfn{outdates}) the revisions given by @var{range}. Note that this command can be quite dangerous unless you know @emph{exactly} what you are doing (for example see the warnings below about how the @var{rev1}:@var{rev2} syntax is confusing). If you are short on disc this option might help you. But think twice before using it---there is no way short of restoring the latest backup to undo this command! If you delete different revisions than you planned, either due to carelessness or (heaven forbid) a @sc{cvs} bug, there is no opportunity to correct the error before the revisions are deleted. It probably would be a good idea to experiment on a copy of the repository first. Specify @var{range} in one of the following ways: @table @code @item @var{rev1}::@var{rev2} Collapse all revisions between rev1 and rev2, so that @sc{cvs} only stores the differences associated with going from rev1 to rev2, not intermediate steps. For example, after @samp{-o 1.3::1.5} one can retrieve revision 1.3, revision 1.5, or the differences to get from 1.3 to 1.5, but not the revision 1.4, or the differences between 1.3 and 1.4. Other examples: @samp{-o 1.3::1.4} and @samp{-o 1.3::1.3} have no effect, because there are no intermediate revisions to remove. @item ::@var{rev} Collapse revisions between the beginning of the branch containing @var{rev} and @var{rev} itself. The branchpoint and @var{rev} are left intact. For example, @samp{-o ::1.3.2.6} deletes revision 1.3.2.1, revision 1.3.2.5, and everything in between, but leaves 1.3 and 1.3.2.6 intact. @item @var{rev}:: Collapse revisions between @var{rev} and the end of the branch containing @var{rev}. Revision @var{rev} is left intact but the head revision is deleted. @item @var{rev} Delete the revision @var{rev}. For example, @samp{-o 1.3} is equivalent to @samp{-o 1.2::1.4}. @item @var{rev1}:@var{rev2} Delete the revisions from @var{rev1} to @var{rev2}, inclusive, on the same branch. One will not be able to retrieve @var{rev1} or @var{rev2} or any of the revisions in between. For example, the command @samp{cvs admin -oR_1_01:R_1_02 .} is rarely useful. It means to delete revisions up to, and including, the tag R_1_02. But beware! If there are files that have not changed between R_1_02 and R_1_03 the file will have @emph{the same} numerical revision number assigned to the tags R_1_02 and R_1_03. So not only will it be impossible to retrieve R_1_02; R_1_03 will also have to be restored from the tapes! In most cases you want to specify @var{rev1}::@var{rev2} instead. @item :@var{rev} Delete revisions from the beginning of the branch containing @var{rev} up to and including @var{rev}. @item @var{rev}: Delete revisions from revision @var{rev}, including @var{rev} itself, to the end of the branch containing @var{rev}. @end table None of the revisions to be deleted may have branches or locks. If any of the revisions to be deleted have symbolic names, and one specifies one of the @samp{::} syntaxes, then @sc{cvs} will give an error and not delete any revisions. If you really want to delete both the symbolic names and the revisions, first delete the symbolic names with @code{cvs tag -d}, then run @code{cvs admin -o}. If one specifies the non-@samp{::} syntaxes, then @sc{cvs} will delete the revisions but leave the symbolic names pointing to nonexistent revisions. This behavior is preserved for compatibility with previous versions of @sc{cvs}, but because it isn't very useful, in the future it may change to be like the @samp{::} case. Due to the way @sc{cvs} handles branches @var{rev} cannot be specified symbolically if it is a branch. @xref{Magic branch numbers}, for an explanation. @c FIXME: is this still true? I suspect not. Make sure that no-one has checked out a copy of the revision you outdate. Strange things will happen if he starts to edit it and tries to check it back in. For this reason, this option is not a good way to take back a bogus commit; commit a new revision undoing the bogus change instead (@pxref{Merging two revisions}). @item -q Run quietly; do not print diagnostics. @item -s@var{state}[:@var{rev}] Useful with @sc{cvs}. Set the state attribute of the revision @var{rev} to @var{state}. If @var{rev} is a branch number, assume the latest revision on that branch. If @var{rev} is omitted, assume the latest revision on the default branch. Any identifier is acceptable for @var{state}. A useful set of states is @samp{Exp} (for experimental), @samp{Stab} (for stable), and @samp{Rel} (for released). By default, the state of a new revision is set to @samp{Exp} when it is created. The state is visible in the output from @var{cvs log} (@pxref{log}), and in the @samp{$@i{}Log$} and @samp{$@i{}State$} keywords (@pxref{Keyword substitution}). Note that @sc{cvs} uses the @code{dead} state for its own purposes; to take a file to or from the @code{dead} state use commands like @code{cvs remove} and @code{cvs add}, not @code{cvs admin -s}. @item -t[@var{file}] Useful with @sc{cvs}. Write descriptive text from the contents of the named @var{file} into the RCS file, deleting the existing text. The @var{file} pathname may not begin with @samp{-}. The descriptive text can be seen in the output from @samp{cvs log} (@pxref{log}). There can be no space between @samp{-t} and its argument. If @var{file} is omitted, obtain the text from standard input, terminated by end-of-file or by a line containing @samp{.} by itself. Prompt for the text if interaction is possible; see @samp{-I}. @item -t-@var{string} Similar to @samp{-t@var{file}}. Write descriptive text from the @var{string} into the @sc{rcs} file, deleting the existing text. There can be no space between @samp{-t} and its argument. @c The rcs -T option, do not update last-mod time for @c minor changes, has never been documented as a @c cvs admin option. @item -U Set locking to non-strict. Non-strict locking means that the owner of a file need not lock a revision for checkin. For use with @sc{cvs}, strict locking must be set; see the discussion under the @samp{-l} option above. @item -u[@var{rev}] See the option @samp{-l} above, for a discussion of using this option with @sc{cvs}. Unlock the revision with number @var{rev}. If a branch is given, unlock the latest revision on that branch. If @var{rev} is omitted, remove the latest lock held by the caller. Normally, only the locker of a revision may unlock it; somebody else unlocking a revision breaks the lock. This causes the original locker to be sent a @code{commit} notification (@pxref{Getting Notified}). There can be no space between @samp{-u} and its argument. @item -V@var{n} In previous versions of @sc{cvs}, this option meant to write an @sc{rcs} file which would be acceptable to @sc{rcs} version @var{n}, but it is now obsolete and specifying it will produce an error. @c Note that -V without an argument has never been @c documented as a cvs admin option. @item -x@var{suffixes} In previous versions of @sc{cvs}, this was documented as a way of specifying the names of the @sc{rcs} files. However, @sc{cvs} has always required that the @sc{rcs} files used by @sc{cvs} end in @samp{,v}, so this option has never done anything useful. @c The rcs -z option, to specify the timezone, has @c never been documented as a cvs admin option. @end table @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node checkout @appendixsec checkout---Check out sources for editing @cindex checkout (subcommand) @cindex co (subcommand) @itemize @bullet @item Synopsis: checkout [options] modules@dots{} @item Requires: repository. @item Changes: working directory. @item Synonyms: co, get @end itemize Create or update a working directory containing copies of the source files specified by @var{modules}. You must execute @code{checkout} before using most of the other @sc{cvs} commands, since most of them operate on your working directory. The @var{modules} are either symbolic names for some collection of source directories and files, or paths to directories or files in the repository. The symbolic names are defined in the @samp{modules} file. @xref{modules}. @c Needs an example, particularly of the non-"modules" @c case but probably of both. @c FIXME: this seems like a very odd place to introduce @c people to how CVS works. The bit about unreserved @c checkouts is also misleading as it depends on how @c things are set up. Depending on the modules you specify, @code{checkout} may recursively create directories and populate them with the appropriate source files. You can then edit these source files at any time (regardless of whether other software developers are editing their own copies of the sources); update them to include new changes applied by others to the source repository; or commit your work as a permanent change to the source repository. Note that @code{checkout} is used to create directories. The top-level directory created is always added to the directory where @code{checkout} is invoked, and usually has the same name as the specified module. In the case of a module alias, the created sub-directory may have a different name, but you can be sure that it will be a sub-directory, and that @code{checkout} will show the relative path leading to each file as it is extracted into your private work area (unless you specify the @samp{-Q} global option). The files created by @code{checkout} are created read-write, unless the @samp{-r} option to @sc{cvs} (@pxref{Global options}) is specified, the @code{CVSREAD} environment variable is specified (@pxref{Environment variables}), or a watch is in effect for that file (@pxref{Watches}). Note that running @code{checkout} on a directory that was already built by a prior @code{checkout} is also permitted. This is similar to specifying the @samp{-d} option to the @code{update} command in the sense that new directories that have been created in the repository will appear in your work area. However, @code{checkout} takes a module name whereas @code{update} takes a directory name. Also to use @code{checkout} this way it must be run from the top level directory (where you originally ran @code{checkout} from), so before you run @code{checkout} to update an existing directory, don't forget to change your directory to the top level directory. For the output produced by the @code{checkout} command see @ref{update output}. @menu * checkout options:: checkout options * checkout examples:: checkout examples @end menu @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node checkout options @appendixsubsec checkout options These standard options are supported by @code{checkout} (@pxref{Common options}, for a complete description of them): @table @code @item -D @var{date} Use the most recent revision no later than @var{date}. This option is sticky, and implies @samp{-P}. See @ref{Sticky tags}, for more information on sticky tags/dates. @item -f Only useful with the @samp{-D @var{date}} or @samp{-r @var{tag}} flags. If no matching revision is found, retrieve the most recent revision (instead of ignoring the file). @item -k @var{kflag} Process keywords according to @var{kflag}. See @ref{Keyword substitution}. This option is sticky; future updates of this file in this working directory will use the same @var{kflag}. The @code{status} command can be viewed to see the sticky options. See @ref{Invoking CVS}, for more information on the @code{status} command. @item -l Local; run only in current working directory. @item -n Do not run any checkout program (as specified with the @samp{-o} option in the modules file; @pxref{modules}). @item -P Prune empty directories. See @ref{Moving directories}. @item -p Pipe files to the standard output. @item -R Checkout directories recursively. This option is on by default. @item -r @var{tag} Use revision @var{tag}. This option is sticky, and implies @samp{-P}. See @ref{Sticky tags}, for more information on sticky tags/dates. @end table In addition to those, you can use these special command options with @code{checkout}: @table @code @item -A Reset any sticky tags, dates, or @samp{-k} options. See @ref{Sticky tags}, for more information on sticky tags/dates. @item -c Copy the module file, sorted, to the standard output, instead of creating or modifying any files or directories in your working directory. @item -d @var{dir} Create a directory called @var{dir} for the working files, instead of using the module name. In general, using this flag is equivalent to using @samp{mkdir @var{dir}; cd @var{dir}} followed by the checkout command without the @samp{-d} flag. There is an important exception, however. It is very convenient when checking out a single item to have the output appear in a directory that doesn't contain empty intermediate directories. In this case @emph{only}, @sc{cvs} tries to ``shorten'' pathnames to avoid those empty directories. For example, given a module @samp{foo} that contains the file @samp{bar.c}, the command @samp{cvs co -d dir foo} will create directory @samp{dir} and place @samp{bar.c} inside. Similarly, given a module @samp{bar} which has subdirectory @samp{baz} wherein there is a file @samp{quux.c}, the command @samp{cvs co -d dir bar/baz} will create directory @samp{dir} and place @samp{quux.c} inside. Using the @samp{-N} flag will defeat this behavior. Given the same module definitions above, @samp{cvs co -N -d dir foo} will create directories @samp{dir/foo} and place @samp{bar.c} inside, while @samp{cvs co -N -d dir bar/baz} will create directories @samp{dir/bar/baz} and place @samp{quux.c} inside. @item -j @var{tag} With two @samp{-j} options, merge changes from the revision specified with the first @samp{-j} option to the revision specified with the second @samp{j} option, into the working directory. With one @samp{-j} option, merge changes from the ancestor revision to the revision specified with the @samp{-j} option, into the working directory. The ancestor revision is the common ancestor of the revision which the working directory is based on, and the revision specified in the @samp{-j} option. In addition, each -j option can contain an optional date specification which, when used with branches, can limit the chosen revision to one within a specific date. An optional date is specified by adding a colon (:) to the tag: @samp{-j@var{Symbolic_Tag}:@var{Date_Specifier}}. @xref{Branching and merging}. @item -N Only useful together with @samp{-d @var{dir}}. With this option, @sc{cvs} will not ``shorten'' module paths in your working directory when you check out a single module. See the @samp{-d} flag for examples and a discussion. @item -s Like @samp{-c}, but include the status of all modules, and sort it by the status string. @xref{modules}, for info about the @samp{-s} option that is used inside the modules file to set the module status. @end table @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node checkout examples @appendixsubsec checkout examples Get a copy of the module @samp{tc}: @example $ cvs checkout tc @end example Get a copy of the module @samp{tc} as it looked one day ago: @example $ cvs checkout -D yesterday tc @end example @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node commit @appendixsec commit---Check files into the repository @cindex commit (subcommand) @itemize @bullet @item Synopsis: commit [-lnRf] [-m 'log_message' | -F file] [-r revision] [files@dots{}] @item Requires: working directory, repository. @item Changes: repository. @item Synonym: ci @end itemize Use @code{commit} when you want to incorporate changes from your working source files into the source repository. If you don't specify particular files to commit, all of the files in your working current directory are examined. @code{commit} is careful to change in the repository only those files that you have really changed. By default (or if you explicitly specify the @samp{-R} option), files in subdirectories are also examined and committed if they have changed; you can use the @samp{-l} option to limit @code{commit} to the current directory only. @code{commit} verifies that the selected files are up to date with the current revisions in the source repository; it will notify you, and exit without committing, if any of the specified files must be made current first with @code{update} (@pxref{update}). @code{commit} does not call the @code{update} command for you, but rather leaves that for you to do when the time is right. When all is well, an editor is invoked to allow you to enter a log message that will be written to one or more logging programs (@pxref{modules}, and @pxref{loginfo}) and placed in the @sc{rcs} file inside the repository. This log message can be retrieved with the @code{log} command; see @ref{log}. You can specify the log message on the command line with the @samp{-m @var{message}} option, and thus avoid the editor invocation, or use the @samp{-F @var{file}} option to specify that the argument file contains the log message. @menu * commit options:: commit options * commit examples:: commit examples @end menu @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node commit options @appendixsubsec commit options These standard options are supported by @code{commit} (@pxref{Common options}, for a complete description of them): @table @code @item -l Local; run only in current working directory. @item -R Commit directories recursively. This is on by default. @item -r @var{revision} Commit to @var{revision}. @var{revision} must be either a branch, or a revision on the main trunk that is higher than any existing revision number (@pxref{Assigning revisions}). You cannot commit to a specific revision on a branch. @c FIXME: Need xref for branch case. @end table @code{commit} also supports these options: @table @code @item -F @var{file} Read the log message from @var{file}, instead of invoking an editor. @item -f Note that this is not the standard behavior of the @samp{-f} option as defined in @ref{Common options}. Force @sc{cvs} to commit a new revision even if you haven't made any changes to the file. If the current revision of @var{file} is 1.7, then the following two commands are equivalent: @example $ cvs commit -f @var{file} $ cvs commit -r 1.8 @var{file} @end example @c This is odd, but it's how CVS has worked for some @c time. The @samp{-f} option disables recursion (i.e., it implies @samp{-l}). To force @sc{cvs} to commit a new revision for all files in all subdirectories, you must use @samp{-f -R}. @item -m @var{message} Use @var{message} as the log message, instead of invoking an editor. @end table @need 2000 @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node commit examples @appendixsubsec commit examples @c FIXME: this material wants to be somewhere @c in "Branching and merging". @appendixsubsubsec Committing to a branch You can commit to a branch revision (one that has an even number of dots) with the @samp{-r} option. To create a branch revision, use the @samp{-b} option of the @code{rtag} or @code{tag} commands (@pxref{Branching and merging}). Then, either @code{checkout} or @code{update} can be used to base your sources on the newly created branch. From that point on, all @code{commit} changes made within these working sources will be automatically added to a branch revision, thereby not disturbing main-line development in any way. For example, if you had to create a patch to the 1.2 version of the product, even though the 2.0 version is already under development, you might do: @example $ cvs rtag -b -r FCS1_2 FCS1_2_Patch product_module $ cvs checkout -r FCS1_2_Patch product_module $ cd product_module [[ hack away ]] $ cvs commit @end example @noindent This works automatically since the @samp{-r} option is sticky. @appendixsubsubsec Creating the branch after editing Say you have been working on some extremely experimental software, based on whatever revision you happened to checkout last week. If others in your group would like to work on this software with you, but without disturbing main-line development, you could commit your change to a new branch. Others can then checkout your experimental stuff and utilize the full benefit of @sc{cvs} conflict resolution. The scenario might look like: @c FIXME: Should we be recommending tagging the branchpoint? @example [[ hacked sources are present ]] $ cvs tag -b EXPR1 $ cvs update -r EXPR1 $ cvs commit @end example The @code{update} command will make the @samp{-r EXPR1} option sticky on all files. Note that your changes to the files will never be removed by the @code{update} command. The @code{commit} will automatically commit to the correct branch, because the @samp{-r} is sticky. You could also do like this: @c FIXME: Should we be recommending tagging the branchpoint? @example [[ hacked sources are present ]] $ cvs tag -b EXPR1 $ cvs commit -r EXPR1 @end example @noindent but then, only those files that were changed by you will have the @samp{-r EXPR1} sticky flag. If you hack away, and commit without specifying the @samp{-r EXPR1} flag, some files may accidentally end up on the main trunk. To work with you on the experimental change, others would simply do @example $ cvs checkout -r EXPR1 whatever_module @end example @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node diff @appendixsec diff---Show differences between revisions @cindex diff (subcommand) @itemize @bullet @item Synopsis: diff [-lR] [-k kflag] [format_options] [[-r rev1 | -D date1] [-r rev2 | -D date2]] [files@dots{}] @item Requires: working directory, repository. @item Changes: nothing. @end itemize The @code{diff} command is used to compare different revisions of files. The default action is to compare your working files with the revisions they were based on, and report any differences that are found. If any file names are given, only those files are compared. If any directories are given, all files under them will be compared. The exit status for diff is different than for other @sc{cvs} commands; for details @ref{Exit status}. @menu * diff options:: diff options * diff examples:: diff examples @end menu @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node diff options @appendixsubsec diff options These standard options are supported by @code{diff} (@pxref{Common options}, for a complete description of them): @table @code @item -D @var{date} Use the most recent revision no later than @var{date}. See @samp{-r} for how this affects the comparison. @item -k @var{kflag} Process keywords according to @var{kflag}. See @ref{Keyword substitution}. @item -l Local; run only in current working directory. @item -R Examine directories recursively. This option is on by default. @item -r @var{tag} Compare with revision @var{tag}. Zero, one or two @samp{-r} options can be present. With no @samp{-r} option, the working file will be compared with the revision it was based on. With one @samp{-r}, that revision will be compared to your current working file. With two @samp{-r} options those two revisions will be compared (and your working file will not affect the outcome in any way). @c We should be a lot more explicit, with examples, @c about the difference between "cvs diff" and "cvs @c diff -r HEAD". This often confuses new users. One or both @samp{-r} options can be replaced by a @samp{-D @var{date}} option, described above. @end table @c Conceptually, this is a disaster. There are 3 @c zillion diff formats that we support via the diff @c library. It is not obvious to me that we should @c document them all. Maybe just the most common ones @c like -c and -u, and think about phasing out the @c obscure ones. @c FIXCVS: also should be a way to specify an external @c diff program (which can be different for different @c file types) and pass through @c arbitrary options, so that the user can do @c "--pass=-Z --pass=foo" or something even if CVS @c doesn't know about the "-Z foo" option to diff. @c This would fit nicely with deprecating/eliminating @c the obscure options of the diff library, because it @c would let people specify an external GNU diff if @c they are into that sort of thing. The following options specify the format of the output. They have the same meaning as in GNU diff. Most options have two equivalent names, one of which is a single letter preceded by @samp{-}, and the other of which is a long name preceded by @samp{--}. @table @samp @item -@var{lines} Show @var{lines} (an integer) lines of context. This option does not specify an output format by itself; it has no effect unless it is combined with @samp{-c} or @samp{-u}. This option is obsolete. For proper operation, @code{patch} typically needs at least two lines of context. @item -a Treat all files as text and compare them line-by-line, even if they do not seem to be text. @item -b Ignore trailing white space and consider all other sequences of one or more white space characters to be equivalent. @item -B Ignore changes that just insert or delete blank lines. @item --binary Read and write data in binary mode. @item --brief Report only whether the files differ, not the details of the differences. @item -c Use the context output format. @item -C @var{lines} @itemx --context@r{[}=@var{lines}@r{]} Use the context output format, showing @var{lines} (an integer) lines of context, or three if @var{lines} is not given. For proper operation, @code{patch} typically needs at least two lines of context. @item --changed-group-format=@var{format} Use @var{format} to output a line group containing differing lines from both files in if-then-else format. @xref{Line group formats}. @item -d Change the algorithm to perhaps find a smaller set of changes. This makes @code{diff} slower (sometimes much slower). @item -e @itemx --ed Make output that is a valid @code{ed} script. @item --expand-tabs Expand tabs to spaces in the output, to preserve the alignment of tabs in the input files. @item -f Make output that looks vaguely like an @code{ed} script but has changes in the order they appear in the file. @item -F @var{regexp} In context and unified format, for each hunk of differences, show some of the last preceding line that matches @var{regexp}. @item --forward-ed Make output that looks vaguely like an @code{ed} script but has changes in the order they appear in the file. @item -H Use heuristics to speed handling of large files that have numerous scattered small changes. @item --horizon-lines=@var{lines} Do not discard the last @var{lines} lines of the common prefix and the first @var{lines} lines of the common suffix. @item -i Ignore changes in case; consider upper- and lower-case letters equivalent. @item -I @var{regexp} Ignore changes that just insert or delete lines that match @var{regexp}. @item --ifdef=@var{name} Make merged if-then-else output using @var{name}. @item --ignore-all-space Ignore white space when comparing lines. @item --ignore-blank-lines Ignore changes that just insert or delete blank lines. @item --ignore-case Ignore changes in case; consider upper- and lower-case to be the same. @item --ignore-matching-lines=@var{regexp} Ignore changes that just insert or delete lines that match @var{regexp}. @item --ignore-space-change Ignore trailing white space and consider all other sequences of one or more white space characters to be equivalent. @item --initial-tab Output a tab rather than a space before the text of a line in normal or context format. This causes the alignment of tabs in the line to look normal. @item -L @var{label} Use @var{label} instead of the file name in the context format and unified format headers. @item --label=@var{label} Use @var{label} instead of the file name in the context format and unified format headers. @item --left-column Print only the left column of two common lines in side by side format. @item --line-format=@var{format} Use @var{format} to output all input lines in if-then-else format. @xref{Line formats}. @item --minimal Change the algorithm to perhaps find a smaller set of changes. This makes @code{diff} slower (sometimes much slower). @item -n Output RCS-format diffs; like @samp{-f} except that each command specifies the number of lines affected. @item -N @itemx --new-file In directory comparison, if a file is found in only one directory, treat it as present but empty in the other directory. @item --new-group-format=@var{format} Use @var{format} to output a group of lines taken from just the second file in if-then-else format. @xref{Line group formats}. @item --new-line-format=@var{format} Use @var{format} to output a line taken from just the second file in if-then-else format. @xref{Line formats}. @item --old-group-format=@var{format} Use @var{format} to output a group of lines taken from just the first file in if-then-else format. @xref{Line group formats}. @item --old-line-format=@var{format} Use @var{format} to output a line taken from just the first file in if-then-else format. @xref{Line formats}. @item -p Show which C function each change is in. @item --rcs Output RCS-format diffs; like @samp{-f} except that each command specifies the number of lines affected. @item --report-identical-files @itemx -s Report when two files are the same. @item --show-c-function Show which C function each change is in. @item --show-function-line=@var{regexp} In context and unified format, for each hunk of differences, show some of the last preceding line that matches @var{regexp}. @item --side-by-side Use the side by side output format. @item --speed-large-files Use heuristics to speed handling of large files that have numerous scattered small changes. @item --suppress-common-lines Do not print common lines in side by side format. @item -t Expand tabs to spaces in the output, to preserve the alignment of tabs in the input files. @item -T Output a tab rather than a space before the text of a line in normal or context format. This causes the alignment of tabs in the line to look normal. @item --text Treat all files as text and compare them line-by-line, even if they do not appear to be text. @item -u Use the unified output format. @item --unchanged-group-format=@var{format} Use @var{format} to output a group of common lines taken from both files in if-then-else format. @xref{Line group formats}. @item --unchanged-line-format=@var{format} Use @var{format} to output a line common to both files in if-then-else format. @xref{Line formats}. @item -U @var{lines} @itemx --unified@r{[}=@var{lines}@r{]} Use the unified output format, showing @var{lines} (an integer) lines of context, or three if @var{lines} is not given. For proper operation, @code{patch} typically needs at least two lines of context. @item -w Ignore white space when comparing lines. @item -W @var{columns} @itemx --width=@var{columns} Use an output width of @var{columns} in side by side format. @item -y Use the side by side output format. @end table @menu * Line group formats:: Line group formats * Line formats:: Line formats @end menu @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node Line group formats @appendixsubsubsec Line group formats Line group formats let you specify formats suitable for many applications that allow if-then-else input, including programming languages and text formatting languages. A line group format specifies the output format for a contiguous group of similar lines. For example, the following command compares the TeX file @file{myfile} with the original version from the repository, and outputs a merged file in which old regions are surrounded by @samp{\begin@{em@}}-@samp{\end@{em@}} lines, and new regions are surrounded by @samp{\begin@{bf@}}-@samp{\end@{bf@}} lines. @example cvs diff \ --old-group-format='\begin@{em@} %<\end@{em@} ' \ --new-group-format='\begin@{bf@} %>\end@{bf@} ' \ myfile @end example The following command is equivalent to the above example, but it is a little more verbose, because it spells out the default line group formats. @example cvs diff \ --old-group-format='\begin@{em@} %<\end@{em@} ' \ --new-group-format='\begin@{bf@} %>\end@{bf@} ' \ --unchanged-group-format='%=' \ --changed-group-format='\begin@{em@} %<\end@{em@} \begin@{bf@} %>\end@{bf@} ' \ myfile @end example Here is a more advanced example, which outputs a diff listing with headers containing line numbers in a ``plain English'' style. @example cvs diff \ --unchanged-group-format='' \ --old-group-format='-------- %dn line%(n=1?:s) deleted at %df: %<' \ --new-group-format='-------- %dN line%(N=1?:s) added after %de: %>' \ --changed-group-format='-------- %dn line%(n=1?:s) changed at %df: %<-------- to: %>' \ myfile @end example To specify a line group format, use one of the options listed below. You can specify up to four line group formats, one for each kind of line group. You should quote @var{format}, because it typically contains shell metacharacters. @table @samp @item --old-group-format=@var{format} These line groups are hunks containing only lines from the first file. The default old group format is the same as the changed group format if it is specified; otherwise it is a format that outputs the line group as-is. @item --new-group-format=@var{format} These line groups are hunks containing only lines from the second file. The default new group format is same as the changed group format if it is specified; otherwise it is a format that outputs the line group as-is. @item --changed-group-format=@var{format} These line groups are hunks containing lines from both files. The default changed group format is the concatenation of the old and new group formats. @item --unchanged-group-format=@var{format} These line groups contain lines common to both files. The default unchanged group format is a format that outputs the line group as-is. @end table In a line group format, ordinary characters represent themselves; conversion specifications start with @samp{%} and have one of the following forms. @table @samp @item %< stands for the lines from the first file, including the trailing newline. Each line is formatted according to the old line format (@pxref{Line formats}). @item %> stands for the lines from the second file, including the trailing newline. Each line is formatted according to the new line format. @item %= stands for the lines common to both files, including the trailing newline. Each line is formatted according to the unchanged line format. @item %% stands for @samp{%}. @item %c'@var{C}' where @var{C} is a single character, stands for @var{C}. @var{C} may not be a backslash or an apostrophe. For example, @samp{%c':'} stands for a colon, even inside the then-part of an if-then-else format, which a colon would normally terminate. @item %c'\@var{O}' where @var{O} is a string of 1, 2, or 3 octal digits, stands for the character with octal code @var{O}. For example, @samp{%c'\0'} stands for a null character. @item @var{F}@var{n} where @var{F} is a @code{printf} conversion specification and @var{n} is one of the following letters, stands for @var{n}'s value formatted with @var{F}. @table @samp @item e The line number of the line just before the group in the old file. @item f The line number of the first line in the group in the old file; equals @var{e} + 1. @item l The line number of the last line in the group in the old file. @item m The line number of the line just after the group in the old file; equals @var{l} + 1. @item n The number of lines in the group in the old file; equals @var{l} - @var{f} + 1. @item E, F, L, M, N Likewise, for lines in the new file. @end table The @code{printf} conversion specification can be @samp{%d}, @samp{%o}, @samp{%x}, or @samp{%X}, specifying decimal, octal, lower case hexadecimal, or upper case hexadecimal output respectively. After the @samp{%} the following options can appear in sequence: a @samp{-} specifying left-justification; an integer specifying the minimum field width; and a period followed by an optional integer specifying the minimum number of digits. For example, @samp{%5dN} prints the number of new lines in the group in a field of width 5 characters, using the @code{printf} format @code{"%5d"}. @item (@var{A}=@var{B}?@var{T}:@var{E}) If @var{A} equals @var{B} then @var{T} else @var{E}. @var{A} and @var{B} are each either a decimal constant or a single letter interpreted as above. This format spec is equivalent to @var{T} if @var{A}'s value equals @var{B}'s; otherwise it is equivalent to @var{E}. For example, @samp{%(N=0?no:%dN) line%(N=1?:s)} is equivalent to @samp{no lines} if @var{N} (the number of lines in the group in the new file) is 0, to @samp{1 line} if @var{N} is 1, and to @samp{%dN lines} otherwise. @end table @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node Line formats @appendixsubsubsec Line formats Line formats control how each line taken from an input file is output as part of a line group in if-then-else format. For example, the following command outputs text with a one-column change indicator to the left of the text. The first column of output is @samp{-} for deleted lines, @samp{|} for added lines, and a space for unchanged lines. The formats contain newline characters where newlines are desired on output. @example cvs diff \ --old-line-format='-%l ' \ --new-line-format='|%l ' \ --unchanged-line-format=' %l ' \ myfile @end example To specify a line format, use one of the following options. You should quote @var{format}, since it often contains shell metacharacters. @table @samp @item --old-line-format=@var{format} formats lines just from the first file. @item --new-line-format=@var{format} formats lines just from the second file. @item --unchanged-line-format=@var{format} formats lines common to both files. @item --line-format=@var{format} formats all lines; in effect, it sets all three above options simultaneously. @end table In a line format, ordinary characters represent themselves; conversion specifications start with @samp{%} and have one of the following forms. @table @samp @item %l stands for the contents of the line, not counting its trailing newline (if any). This format ignores whether the line is incomplete. @item %L stands for the contents of the line, including its trailing newline (if any). If a line is incomplete, this format preserves its incompleteness. @item %% stands for @samp{%}. @item %c'@var{C}' where @var{C} is a single character, stands for @var{C}. @var{C} may not be a backslash or an apostrophe. For example, @samp{%c':'} stands for a colon. @item %c'\@var{O}' where @var{O} is a string of 1, 2, or 3 octal digits, stands for the character with octal code @var{O}. For example, @samp{%c'\0'} stands for a null character. @item @var{F}n where @var{F} is a @code{printf} conversion specification, stands for the line number formatted with @var{F}. For example, @samp{%.5dn} prints the line number using the @code{printf} format @code{"%.5d"}. @xref{Line group formats}, for more about printf conversion specifications. @end table The default line format is @samp{%l} followed by a newline character. If the input contains tab characters and it is important that they line up on output, you should ensure that @samp{%l} or @samp{%L} in a line format is just after a tab stop (e.g.@: by preceding @samp{%l} or @samp{%L} with a tab character), or you should use the @samp{-t} or @samp{--expand-tabs} option. Taken together, the line and line group formats let you specify many different formats. For example, the following command uses a format similar to @code{diff}'s normal format. You can tailor this command to get fine control over @code{diff}'s output. @example cvs diff \ --old-line-format='< %l ' \ --new-line-format='> %l ' \ --old-group-format='%df%(f=l?:,%dl)d%dE %<' \ --new-group-format='%dea%dF%(F=L?:,%dL) %>' \ --changed-group-format='%df%(f=l?:,%dl)c%dF%(F=L?:,%dL) %<--- %>' \ --unchanged-group-format='' \ myfile @end example @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node diff examples @appendixsubsec diff examples The following line produces a Unidiff (@samp{-u} flag) between revision 1.14 and 1.19 of @file{backend.c}. Due to the @samp{-kk} flag no keywords are substituted, so differences that only depend on keyword substitution are ignored. @example $ cvs diff -kk -u -r 1.14 -r 1.19 backend.c @end example Suppose the experimental branch EXPR1 was based on a set of files tagged RELEASE_1_0. To see what has happened on that branch, the following can be used: @example $ cvs diff -r RELEASE_1_0 -r EXPR1 @end example A command like this can be used to produce a context diff between two releases: @example $ cvs diff -c -r RELEASE_1_0 -r RELEASE_1_1 > diffs @end example If you are maintaining ChangeLogs, a command like the following just before you commit your changes may help you write the ChangeLog entry. All local modifications that have not yet been committed will be printed. @example $ cvs diff -u | less @end example @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node export @appendixsec export---Export sources from CVS, similar to checkout @cindex export (subcommand) @itemize @bullet @item Synopsis: export [-flNnR] [-r rev|-D date] [-k subst] [-d dir] module@dots{} @item Requires: repository. @item Changes: current directory. @end itemize This command is a variant of @code{checkout}; use it when you want a copy of the source for module without the @sc{cvs} administrative directories. For example, you might use @code{export} to prepare source for shipment off-site. This command requires that you specify a date or tag (with @samp{-D} or @samp{-r}), so that you can count on reproducing the source you ship to others (and thus it always prunes empty directories). One often would like to use @samp{-kv} with @code{cvs export}. This causes any keywords to be expanded such that an import done at some other site will not lose the keyword revision information. But be aware that doesn't handle an export containing binary files correctly. Also be aware that after having used @samp{-kv}, one can no longer use the @code{ident} command (which is part of the @sc{rcs} suite---see ident(1)) which looks for keyword strings. If you want to be able to use @code{ident} you must not use @samp{-kv}. @menu * export options:: export options @end menu @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node export options @appendixsubsec export options These standard options are supported by @code{export} (@pxref{Common options}, for a complete description of them): @table @code @item -D @var{date} Use the most recent revision no later than @var{date}. @item -f If no matching revision is found, retrieve the most recent revision (instead of ignoring the file). @item -l Local; run only in current working directory. @item -n Do not run any checkout program. @item -R Export directories recursively. This is on by default. @item -r @var{tag} Use revision @var{tag}. @end table In addition, these options (that are common to @code{checkout} and @code{export}) are also supported: @table @code @item -d @var{dir} Create a directory called @var{dir} for the working files, instead of using the module name. @xref{checkout options}, for complete details on how @sc{cvs} handles this flag. @item -k @var{subst} Set keyword expansion mode (@pxref{Substitution modes}). @item -N Only useful together with @samp{-d @var{dir}}. @xref{checkout options}, for complete details on how @sc{cvs} handles this flag. @end table @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node history @appendixsec history---Show status of files and users @cindex history (subcommand) @itemize @bullet @item Synopsis: history [-report] [-flags] [-options args] [files@dots{}] @item Requires: the file @file{$CVSROOT/CVSROOT/history} @item Changes: nothing. @end itemize @sc{cvs} can keep a history file that tracks each use of the @code{checkout}, @code{commit}, @code{rtag}, @code{update}, and @code{release} commands. You can use @code{history} to display this information in various formats. Logging must be enabled by creating the file @file{$CVSROOT/CVSROOT/history}. @strong{Note: @code{history} uses @samp{-f}, @samp{-l}, @samp{-n}, and @samp{-p} in ways that conflict with the normal use inside @sc{cvs} (@pxref{Common options}).} @menu * history options:: history options @end menu @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node history options @appendixsubsec history options Several options (shown above as @samp{-report}) control what kind of report is generated: @table @code @item -c Report on each time commit was used (i.e., each time the repository was modified). @item -e Everything (all record types). Equivalent to specifying @samp{-x} with all record types. Of course, @samp{-e} will also include record types which are added in a future version of @sc{cvs}; if you are writing a script which can only handle certain record types, you'll want to specify @samp{-x}. @item -m @var{module} Report on a particular module. (You can meaningfully use @samp{-m} more than once on the command line.) @item -o Report on checked-out modules. This is the default report type. @item -T Report on all tags. @item -x @var{type} Extract a particular set of record types @var{type} from the @sc{cvs} history. The types are indicated by single letters, which you may specify in combination. Certain commands have a single record type: @table @code @item F release @item O checkout @item E export @item T rtag @end table @noindent One of four record types may result from an update: @table @code @item C A merge was necessary but collisions were detected (requiring manual merging). @item G A merge was necessary and it succeeded. @item U A working file was copied from the repository. @item W The working copy of a file was deleted during update (because it was gone from the repository). @end table @noindent One of three record types results from commit: @table @code @item A A file was added for the first time. @item M A file was modified. @item R A file was removed. @end table @end table The options shown as @samp{-flags} constrain or expand the report without requiring option arguments: @table @code @item -a Show data for all users (the default is to show data only for the user executing @code{history}). @item -l Show last modification only. @item -w Show only the records for modifications done from the same working directory where @code{history} is executing. @end table The options shown as @samp{-options @var{args}} constrain the report based on an argument: @table @code @item -b @var{str} Show data back to a record containing the string @var{str} in either the module name, the file name, or the repository path. @item -D @var{date} Show data since @var{date}. This is slightly different from the normal use of @samp{-D @var{date}}, which selects the newest revision older than @var{date}. @item -f @var{file} Show data for a particular file (you can specify several @samp{-f} options on the same command line). This is equivalent to specifying the file on the command line. @item -n @var{module} Show data for a particular module (you can specify several @samp{-n} options on the same command line). @item -p @var{repository} Show data for a particular source repository (you can specify several @samp{-p} options on the same command line). @item -r @var{rev} Show records referring to revisions since the revision or tag named @var{rev} appears in individual @sc{rcs} files. Each @sc{rcs} file is searched for the revision or tag. @item -t @var{tag} Show records since tag @var{tag} was last added to the history file. This differs from the @samp{-r} flag above in that it reads only the history file, not the @sc{rcs} files, and is much faster. @item -u @var{name} Show records for user @var{name}. @item -z @var{timezone} Show times in the selected records using the specified time zone instead of UTC. @end table @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node import @appendixsec import---Import sources into CVS, using vendor branches @cindex import (subcommand) @c FIXME: This node is way too long for one which has subnodes. @itemize @bullet @item Synopsis: import [-options] repository vendortag releasetag@dots{} @item Requires: Repository, source distribution directory. @item Changes: repository. @end itemize Use @code{import} to incorporate an entire source distribution from an outside source (e.g., a source vendor) into your source repository directory. You can use this command both for initial creation of a repository, and for wholesale updates to the module from the outside source. @xref{Tracking sources}, for a discussion on this subject. The @var{repository} argument gives a directory name (or a path to a directory) under the @sc{cvs} root directory for repositories; if the directory did not exist, import creates it. When you use import for updates to source that has been modified in your source repository (since a prior import), it will notify you of any files that conflict in the two branches of development; use @samp{checkout -j} to reconcile the differences, as import instructs you to do. If @sc{cvs} decides a file should be ignored (@pxref{cvsignore}), it does not import it and prints @samp{I } followed by the filename (@pxref{import output}, for a complete description of the output). If the file @file{$CVSROOT/CVSROOT/cvswrappers} exists, any file whose names match the specifications in that file will be treated as packages and the appropriate filtering will be performed on the file/directory before being imported. @xref{Wrappers}. The outside source is saved in a first-level branch, by default 1.1.1. Updates are leaves of this branch; for example, files from the first imported collection of source will be revision 1.1.1.1, then files from the first imported update will be revision 1.1.1.2, and so on. At least three arguments are required. @var{repository} is needed to identify the collection of source. @var{vendortag} is a tag for the entire branch (e.g., for 1.1.1). You must also specify at least one @var{releasetag} to identify the files at the leaves created each time you execute @code{import}. @c I'm not completely sure this belongs here. But @c we need to say it _somewhere_ reasonably obvious; it @c is a common misconception among people first learning CVS Note that @code{import} does @emph{not} change the directory in which you invoke it. In particular, it does not set up that directory as a @sc{cvs} working directory; if you want to work with the sources import them first and then check them out into a different directory (@pxref{Getting the source}). @menu * import options:: import options * import output:: import output * import examples:: import examples @end menu @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node import options @appendixsubsec import options This standard option is supported by @code{import} (@pxref{Common options}, for a complete description): @table @code @item -m @var{message} Use @var{message} as log information, instead of invoking an editor. @end table There are the following additional special options. @table @code @item -b @var{branch} See @ref{Multiple vendor branches}. @item -k @var{subst} Indicate the keyword expansion mode desired. This setting will apply to all files created during the import, but not to any files that previously existed in the repository. See @ref{Substitution modes}, for a list of valid @samp{-k} settings. @item -I @var{name} Specify file names that should be ignored during import. You can use this option repeatedly. To avoid ignoring any files at all (even those ignored by default), specify `-I !'. @var{name} can be a file name pattern of the same type that you can specify in the @file{.cvsignore} file. @xref{cvsignore}. @c -- Is this really true? @item -W @var{spec} Specify file names that should be filtered during import. You can use this option repeatedly. @var{spec} can be a file name pattern of the same type that you can specify in the @file{.cvswrappers} file. @xref{Wrappers}. @end table @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node import output @appendixsubsec import output @code{import} keeps you informed of its progress by printing a line for each file, preceded by one character indicating the status of the file: @table @code @item U @var{file} The file already exists in the repository and has not been locally modified; a new revision has been created (if necessary). @item N @var{file} The file is a new file which has been added to the repository. @item C @var{file} The file already exists in the repository but has been locally modified; you will have to merge the changes. @item I @var{file} The file is being ignored (@pxref{cvsignore}). @cindex Symbolic link, importing @cindex Link, symbolic, importing @c FIXME: also (somewhere else) probably @c should be documenting what happens if you "cvs add" @c a symbolic link. Also maybe what happens if @c you manually create symbolic links within the @c repository (? - not sure why we'd want to suggest @c doing that). @item L @var{file} The file is a symbolic link; @code{cvs import} ignores symbolic links. People periodically suggest that this behavior should be changed, but if there is a consensus on what it should be changed to, it is not apparent. (Various options in the @file{modules} file can be used to recreate symbolic links on checkout, update, etc.; @pxref{modules}.) @end table @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node import examples @appendixsubsec import examples See @ref{Tracking sources}, and @ref{From files}. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node log @appendixsec log---Print out log information for files @cindex log (subcommand) @itemize @bullet @item Synopsis: log [options] [files@dots{}] @item Requires: repository, working directory. @item Changes: nothing. @end itemize Display log information for files. @code{log} used to call the @sc{rcs} utility @code{rlog}. Although this is no longer true in the current sources, this history determines the format of the output and the options, which are not quite in the style of the other @sc{cvs} commands. @cindex Timezone, in output @cindex Zone, time, in output @c Kind of a funny place to document the timezone used @c in output from commands other than @code{log}. @c There is also more we need to say about this, @c including what happens in a client/server environment. The output includes the location of the @sc{rcs} file, the @dfn{head} revision (the latest revision on the trunk), all symbolic names (tags) and some other things. For each revision, the revision number, the author, the number of lines added/deleted and the log message are printed. All times are displayed in Coordinated Universal Time (UTC). (Other parts of @sc{cvs} print times in the local timezone). @c FIXCVS: need a better way to control the timezone @c used in output. Previous/current versions of CVS did/do @c sometimes support -z in RCSINIT, and/or an @c undocumented (except by reference to 'rlog') -z option @c to cvs log, but this has not been a consistent, @c documented feature. Perhaps a new global option, @c where LT means the client's timezone, which the @c client then communicates to the server, is the @c right solution. @strong{Note: @code{log} uses @samp{-R} in a way that conflicts with the normal use inside @sc{cvs} (@pxref{Common options}).} @menu * log options:: log options * log examples:: log examples @end menu @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node log options @appendixsubsec log options By default, @code{log} prints all information that is available. All other options restrict the output. @table @code @item -b Print information about the revisions on the default branch, normally the highest branch on the trunk. @item -d @var{dates} Print information about revisions with a checkin date/time in the range given by the semicolon-separated list of dates. The date formats accepted are those accepted by the @samp{-D} option to many other @sc{cvs} commands (@pxref{Common options}). Dates can be combined into ranges as follows: @c Should we be thinking about accepting ISO8601 @c ranges? For example "1972-09-10/1972-09-12". @table @code @item @var{d1}<@var{d2} @itemx @var{d2}>@var{d1} Select the revisions that were deposited between @var{d1} and @var{d2}. @item <@var{d} @itemx @var{d}> Select all revisions dated @var{d} or earlier. @item @var{d}< @itemx >@var{d} Select all revisions dated @var{d} or later. @item @var{d} Select the single, latest revision dated @var{d} or earlier. @end table The @samp{>} or @samp{<} characters may be followed by @samp{=} to indicate an inclusive range rather than an exclusive one. Note that the separator is a semicolon (;). @item -h Print only the name of the @sc{rcs} file, name of the file in the working directory, head, default branch, access list, locks, symbolic names, and suffix. @item -l Local; run only in current working directory. (Default is to run recursively). @item -N Do not print the list of tags for this file. This option can be very useful when your site uses a lot of tags, so rather than "more"'ing over 3 pages of tag information, the log information is presented without tags at all. @item -R Print only the name of the @sc{rcs} file. @c Note that using a bare revision (in addition to not @c being explicitly documented here) is potentially @c confusing; it shows the log message to get from the @c previous revision to that revision. "-r1.3 -r1.6" @c (equivalent to "-r1.3,1.6") is even worse; it @c prints the messages to get from 1.2 to 1.3 and 1.5 @c to 1.6. By analogy with "cvs diff", users might @c expect that it is more like specifying a range. @c It is not 100% clear to me how much of this should @c be documented (for example, multiple -r options @c perhaps could/should be deprecated given the false @c analogy with "cvs diff"). @c In general, this section should be rewritten to talk @c about messages to get from revision rev1 to rev2, @c rather than messages for revision rev2 (that is, the @c messages are associated with a change not a static @c revision and failing to make this distinction causes @c much confusion). @item -r@var{revisions} Print information about revisions given in the comma-separated list @var{revisions} of revisions and ranges. The following table explains the available range formats: @table @code @item @var{rev1}:@var{rev2} Revisions @var{rev1} to @var{rev2} (which must be on the same branch). @item @var{rev1}::@var{rev2} The same, but excluding @var{rev1}. @item :@var{rev} @itemx ::@var{rev} Revisions from the beginning of the branch up to and including @var{rev}. @item @var{rev}: Revisions starting with @var{rev} to the end of the branch containing @var{rev}. @item @var{rev}:: Revisions starting just after @var{rev} to the end of the branch containing @var{rev}. @item @var{branch} An argument that is a branch means all revisions on that branch. @item @var{branch1}:@var{branch2} @itemx @var{branch1}::@var{branch2} A range of branches means all revisions on the branches in that range. @item @var{branch}. The latest revision in @var{branch}. @end table A bare @samp{-r} with no revisions means the latest revision on the default branch, normally the trunk. There can be no space between the @samp{-r} option and its argument. @item -S Suppress the header if no revisions are selected. @item -s @var{states} Print information about revisions whose state attributes match one of the states given in the comma-separated list @var{states}. @item -t Print the same as @samp{-h}, plus the descriptive text. @item -w@var{logins} Print information about revisions checked in by users with login names appearing in the comma-separated list @var{logins}. If @var{logins} is omitted, the user's login is assumed. There can be no space between the @samp{-w} option and its argument. @end table @code{log} prints the intersection of the revisions selected with the options @samp{-d}, @samp{-s}, and @samp{-w}, intersected with the union of the revisions selected by @samp{-b} and @samp{-r}. @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node log examples @appendixsubsec log examples Contributed examples are gratefully accepted. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node rdiff @appendixsec rdiff---'patch' format diffs between releases @cindex rdiff (subcommand) @itemize @bullet @item rdiff [-flags] [-V vn] [-r t|-D d [-r t2|-D d2]] modules@dots{} @item Requires: repository. @item Changes: nothing. @item Synonym: patch @end itemize Builds a Larry Wall format patch(1) file between two releases, that can be fed directly into the @code{patch} program to bring an old release up-to-date with the new release. (This is one of the few @sc{cvs} commands that operates directly from the repository, and doesn't require a prior checkout.) The diff output is sent to the standard output device. You can specify (using the standard @samp{-r} and @samp{-D} options) any combination of one or two revisions or dates. If only one revision or date is specified, the patch file reflects differences between that revision or date and the current head revisions in the @sc{rcs} file. Note that if the software release affected is contained in more than one directory, then it may be necessary to specify the @samp{-p} option to the @code{patch} command when patching the old sources, so that @code{patch} is able to find the files that are located in other directories. @menu * rdiff options:: rdiff options * rdiff examples:: rdiff examples @end menu @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node rdiff options @appendixsubsec rdiff options These standard options are supported by @code{rdiff} (@pxref{Common options}, for a complete description of them): @table @code @item -D @var{date} Use the most recent revision no later than @var{date}. @item -f If no matching revision is found, retrieve the most recent revision (instead of ignoring the file). @item -l Local; don't descend subdirectories. @item -R Examine directories recursively. This option is on by default. @item -r @var{tag} Use revision @var{tag}. @end table In addition to the above, these options are available: @table @code @item -c Use the context diff format. This is the default format. @item -s Create a summary change report instead of a patch. The summary includes information about files that were changed or added between the releases. It is sent to the standard output device. This is useful for finding out, for example, which files have changed between two dates or revisions. @item -t A diff of the top two revisions is sent to the standard output device. This is most useful for seeing what the last change to a file was. @item -u Use the unidiff format for the context diffs. Remember that old versions of the @code{patch} program can't handle the unidiff format, so if you plan to post this patch to the net you should probably not use @samp{-u}. @item -V @var{vn} Expand keywords according to the rules current in @sc{rcs} version @var{vn} (the expansion format changed with @sc{rcs} version 5). Note that this option is no longer accepted. @sc{cvs} will always expand keywords the way that @sc{rcs} version 5 does. @end table @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node rdiff examples @appendixsubsec rdiff examples Suppose you receive mail from @t{foo@@example.net} asking for an update from release 1.2 to 1.4 of the tc compiler. You have no such patches on hand, but with @sc{cvs} that can easily be fixed with a command such as this: @example $ cvs rdiff -c -r FOO1_2 -r FOO1_4 tc | \ $$ Mail -s 'The patches you asked for' foo@@example.net @end example Suppose you have made release 1.3, and forked a branch called @samp{R_1_3fix} for bugfixes. @samp{R_1_3_1} corresponds to release 1.3.1, which was made some time ago. Now, you want to see how much development has been done on the branch. This command can be used: @example $ cvs patch -s -r R_1_3_1 -r R_1_3fix module-name cvs rdiff: Diffing module-name File ChangeLog,v changed from revision 1.52.2.5 to 1.52.2.6 File foo.c,v changed from revision 1.52.2.3 to 1.52.2.4 File bar.h,v changed from revision 1.29.2.1 to 1.2 @end example @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node release @appendixsec release---Indicate that a Module is no longer in use @cindex release (subcommand) @itemize @bullet @item release [-d] directories@dots{} @item Requires: Working directory. @item Changes: Working directory, history log. @end itemize This command is meant to safely cancel the effect of @samp{cvs checkout}. Since @sc{cvs} doesn't lock files, it isn't strictly necessary to use this command. You can always simply delete your working directory, if you like; but you risk losing changes you may have forgotten, and you leave no trace in the @sc{cvs} history file (@pxref{history file}) that you've abandoned your checkout. Use @samp{cvs release} to avoid these problems. This command checks that no uncommitted changes are present; that you are executing it from immediately above a @sc{cvs} working directory; and that the repository recorded for your files is the same as the repository defined in the module database. If all these conditions are true, @samp{cvs release} leaves a record of its execution (attesting to your intentionally abandoning your checkout) in the @sc{cvs} history log. @menu * release options:: release options * release output:: release output * release examples:: release examples @end menu @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node release options @appendixsubsec release options The @code{release} command supports one command option: @table @code @item -d Delete your working copy of the file if the release succeeds. If this flag is not given your files will remain in your working directory. @strong{WARNING: The @code{release} command deletes all directories and files recursively. This has the very serious side-effect that any directory that you have created inside your checked-out sources, and not added to the repository (using the @code{add} command; @pxref{Adding files}) will be silently deleted---even if it is non-empty!} @end table @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node release output @appendixsubsec release output Before @code{release} releases your sources it will print a one-line message for any file that is not up-to-date. @table @code @item U @var{file} @itemx P @var{file} There exists a newer revision of this file in the repository, and you have not modified your local copy of the file (@samp{U} and @samp{P} mean the same thing). @item A @var{file} The file has been added to your private copy of the sources, but has not yet been committed to the repository. If you delete your copy of the sources this file will be lost. @item R @var{file} The file has been removed from your private copy of the sources, but has not yet been removed from the repository, since you have not yet committed the removal. @xref{commit}. @item M @var{file} The file is modified in your working directory. There might also be a newer revision inside the repository. @item ? @var{file} @var{file} is in your working directory, but does not correspond to anything in the source repository, and is not in the list of files for @sc{cvs} to ignore (see the description of the @samp{-I} option, and @pxref{cvsignore}). If you remove your working sources, this file will be lost. @end table @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node release examples @appendixsubsec release examples Release the @file{tc} directory, and delete your local working copy of the files. @example $ cd .. # @r{You must stand immediately above the} # @r{sources when you issue @samp{cvs release}.} $ cvs release -d tc You have [0] altered files in this repository. Are you sure you want to release (and delete) directory `tc': y $ @end example @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node update @appendixsec update---Bring work tree in sync with repository @cindex update (subcommand) @itemize @bullet @item update [-ACdflPpR] [-I name] [-j rev [-j rev]] [-k kflag] [-r tag|-D date] [-W spec] files@dots{} @item Requires: repository, working directory. @item Changes: working directory. @end itemize After you've run checkout to create your private copy of source from the common repository, other developers will continue changing the central source. From time to time, when it is convenient in your development process, you can use the @code{update} command from within your working directory to reconcile your work with any revisions applied to the source repository since your last checkout or update. Without the @code{-C} option, @code{update} will also merge any differences between the local copy of files and their base revisions into any destination revisions specified with @code{-r}, @code{-D}, or @code{-A}. @menu * update options:: update options * update output:: update output @end menu @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node update options @appendixsubsec update options These standard options are available with @code{update} (@pxref{Common options}, for a complete description of them): @table @code @item -D date Use the most recent revision no later than @var{date}. This option is sticky, and implies @samp{-P}. See @ref{Sticky tags}, for more information on sticky tags/dates. @item -f Only useful with the @samp{-D @var{date}} or @samp{-r @var{tag}} flags. If no matching revision is found, retrieve the most recent revision (instead of ignoring the file). @item -k @var{kflag} Process keywords according to @var{kflag}. See @ref{Keyword substitution}. This option is sticky; future updates of this file in this working directory will use the same @var{kflag}. The @code{status} command can be viewed to see the sticky options. See @ref{Invoking CVS}, for more information on the @code{status} command. @item -l Local; run only in current working directory. @xref{Recursive behavior}. @item -P Prune empty directories. See @ref{Moving directories}. @item -p Pipe files to the standard output. @item -R Update directories recursively (default). @xref{Recursive behavior}. @item -r rev Retrieve revision/tag @var{rev}. This option is sticky, and implies @samp{-P}. See @ref{Sticky tags}, for more information on sticky tags/dates. @end table @need 800 These special options are also available with @code{update}. @table @code @item -A Reset any sticky tags, dates, or @samp{-k} options. See @ref{Sticky tags}, for more information on sticky tags/dates. @item -C Overwrite locally modified files with clean copies from the repository (the modified file is saved in @file{.#@var{file}.@var{revision}}, however). @item -d Create any directories that exist in the repository if they're missing from the working directory. Normally, @code{update} acts only on directories and files that were already enrolled in your working directory. This is useful for updating directories that were created in the repository since the initial checkout; but it has an unfortunate side effect. If you deliberately avoided certain directories in the repository when you created your working directory (either through use of a module name or by listing explicitly the files and directories you wanted on the command line), then updating with @samp{-d} will create those directories, which may not be what you want. @item -I @var{name} Ignore files whose names match @var{name} (in your working directory) during the update. You can specify @samp{-I} more than once on the command line to specify several files to ignore. Use @samp{-I !} to avoid ignoring any files at all. @xref{cvsignore}, for other ways to make @sc{cvs} ignore some files. @item -W@var{spec} Specify file names that should be filtered during update. You can use this option repeatedly. @var{spec} can be a file name pattern of the same type that you can specify in the @file{.cvswrappers} file. @xref{Wrappers}. @item -j@var{revision} With two @samp{-j} options, merge changes from the revision specified with the first @samp{-j} option to the revision specified with the second @samp{j} option, into the working directory. With one @samp{-j} option, merge changes from the ancestor revision to the revision specified with the @samp{-j} option, into the working directory. The ancestor revision is the common ancestor of the revision which the working directory is based on, and the revision specified in the @samp{-j} option. Note that using a single @samp{-j @var{tagname}} option rather than @samp{-j @var{branchname}} to merge changes from a branch will often not remove files which were removed on the branch. @xref{Merging adds and removals}, for more. In addition, each @samp{-j} option can contain an optional date specification which, when used with branches, can limit the chosen revision to one within a specific date. An optional date is specified by adding a colon (:) to the tag: @samp{-j@var{Symbolic_Tag}:@var{Date_Specifier}}. @xref{Branching and merging}. @end table @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node update output @appendixsubsec update output @code{update} and @code{checkout} keep you informed of their progress by printing a line for each file, preceded by one character indicating the status of the file: @table @code @item U @var{file} The file was brought up to date with respect to the repository. This is done for any file that exists in the repository but not in your source, and for files that you haven't changed but are not the most recent versions available in the repository. @item P @var{file} Like @samp{U}, but the @sc{cvs} server sends a patch instead of an entire file. This accomplishes the same thing as @samp{U} using less bandwidth. @item A @var{file} The file has been added to your private copy of the sources, and will be added to the source repository when you run @code{commit} on the file. This is a reminder to you that the file needs to be committed. @item R @var{file} The file has been removed from your private copy of the sources, and will be removed from the source repository when you run @code{commit} on the file. This is a reminder to you that the file needs to be committed. @item M @var{file} The file is modified in your working directory. @samp{M} can indicate one of two states for a file you're working on: either there were no modifications to the same file in the repository, so that your file remains as you last saw it; or there were modifications in the repository as well as in your copy, but they were merged successfully, without conflict, in your working directory. @sc{cvs} will print some messages if it merges your work, and a backup copy of your working file (as it looked before you ran @code{update}) will be made. The exact name of that file is printed while @code{update} runs. @item C @var{file} @cindex .# files @cindex __ files (VMS) A conflict was detected while trying to merge your changes to @var{file} with changes from the source repository. @var{file} (the copy in your working directory) is now the result of attempting to merge the two revisions; an unmodified copy of your file is also in your working directory, with the name @file{.#@var{file}.@var{revision}} where @var{revision} is the revision that your modified file started from. Resolve the conflict as described in @ref{Conflicts example}. @c "some systems" as in out-of-the-box OSes? Not as @c far as I know. We need to advise sysadmins as well @c as users how to set up this kind of purge, if that is @c what they want. @c We also might want to think about cleaner solutions, @c like having CVS remove the .# file once the conflict @c has been resolved or something like that. (Note that some systems automatically purge files that begin with @file{.#} if they have not been accessed for a few days. If you intend to keep a copy of your original file, it is a very good idea to rename it.) Under @sc{vms}, the file name starts with @file{__} rather than @file{.#}. @item ? @var{file} @var{file} is in your working directory, but does not correspond to anything in the source repository, and is not in the list of files for @sc{cvs} to ignore (see the description of the @samp{-I} option, and @pxref{cvsignore}). @end table @node Invoking CVS @appendix Quick reference to CVS commands @cindex Command reference @cindex Reference, commands @cindex Invoking CVS This appendix describes how to invoke @sc{cvs}, with references to where each command or feature is described in detail. For other references run the @code{cvs --help} command, or see @ref{Index}. A @sc{cvs} command looks like: @example cvs [ @var{global_options} ] @var{command} [ @var{command_options} ] [ @var{command_args} ] @end example Global options: @table @code @item --allow-root=@var{rootdir} Specify legal @sc{cvsroot} directory (server only) (not in @sc{cvs} 1.9 and older). See @ref{Password authentication server}. @item -a Authenticate all communication (client only) (not in @sc{cvs} 1.9 and older). See @ref{Global options}. @item -b Specify RCS location (@sc{cvs} 1.9 and older). See @ref{Global options}. @item -d @var{root} Specify the @sc{cvsroot}. See @ref{Repository}. @item -e @var{editor} Edit messages with @var{editor}. See @ref{Committing your changes}. @item -f Do not read the @file{~/.cvsrc} file. See @ref{Global options}. @item -H @itemx --help Print a help message. See @ref{Global options}. @item -l Do not log in @file{$CVSROOT/CVSROOT/history} file. See @ref{Global options}. @item -n Do not change any files. See @ref{Global options}. @item -Q Be really quiet. See @ref{Global options}. @item -q Be somewhat quiet. See @ref{Global options}. @item -r Make new working files read-only. See @ref{Global options}. @item -s @var{variable}=@var{value} Set a user variable. See @ref{Variables}. @item -T @var{tempdir} Put temporary files in @var{tempdir}. See @ref{Global options}. @item -t Trace @sc{cvs} execution. See @ref{Global options}. @item -v @item --version Display version and copyright information for @sc{cvs}. @item -w Make new working files read-write. See @ref{Global options}. @item -x Encrypt all communication (client only). See @ref{Global options}. @item -z @var{gzip-level} @cindex Compression @cindex Gzip Set the compression level (client only). See @ref{Global options}. @end table Keyword expansion modes (@pxref{Substitution modes}): @example -kkv $@i{}Id: file1,v 1.1 1993/12/09 03:21:13 joe Exp $ -kkvl $@i{}Id: file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $ -kk $@i{}Id$ -kv file1,v 1.1 1993/12/09 03:21:13 joe Exp -ko @i{no expansion} -kb @i{no expansion, file is binary} @end example Keywords (@pxref{Keyword list}): @example $@i{}Author: joe $ $@i{}Date: 1993/12/09 03:21:13 $ $@i{}CVSHeader: files/file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $ $@i{}Header: /home/files/file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $ $@i{}Id: file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $ $@i{}Locker: harry $ $@i{}Name: snapshot_1_14 $ $@i{}RCSfile: file1,v $ $@i{}Revision: 1.1 $ $@i{}Source: /home/files/file1,v $ $@i{}State: Exp $ $@i{}Log: file1,v $ Revision 1.1 1993/12/09 03:30:17 joe Initial revision @end example @c The idea behind this table is that we want each item @c to be a sentence or two at most. Preferably a @c single line. @c @c In some cases refs to "foo options" are just to get @c this thing written quickly, not because the "foo @c options" node is really the best place to point. Commands, command options, and command arguments: @table @code @c ------------------------------------------------------------ @item add [@var{options}] [@var{files}@dots{}] Add a new file/directory. See @ref{Adding files}. @table @code @item -k @var{kflag} Set keyword expansion. @item -m @var{msg} Set file description. @end table @c ------------------------------------------------------------ @item admin [@var{options}] [@var{files}@dots{}] Administration of history files in the repository. See @ref{admin}. @c This list omits those options which are not @c documented as being useful with CVS. That might be @c a mistake... @table @code @item -b[@var{rev}] Set default branch. See @ref{Reverting local changes}. @item -c@var{string} Set comment leader. @item -k@var{subst} Set keyword substitution. See @ref{Keyword substitution}. @item -l[@var{rev}] Lock revision @var{rev}, or latest revision. @item -m@var{rev}:@var{msg} Replace the log message of revision @var{rev} with @var{msg}. @item -o@var{range} Delete revisions from the repository. See @ref{admin options}. @item -q Run quietly; do not print diagnostics. @item -s@var{state}[:@var{rev}] Set the state. @c Does not work for client/server CVS @item -t Set file description from standard input. @item -t@var{file} Set file description from @var{file}. @item -t-@var{string} Set file description to @var{string}. @item -u[@var{rev}] Unlock revision @var{rev}, or latest revision. @end table @c ------------------------------------------------------------ @item annotate [@var{options}] [@var{files}@dots{}] Show last revision where each line was modified. See @ref{annotate}. @table @code @item -D @var{date} Annotate the most recent revision no later than @var{date}. See @ref{Common options}. @item -F Force annotation of binary files. (Without this option, binary files are skipped with a message.) @item -f Use head revision if tag/date not found. See @ref{Common options}. @item -l Local; run only in current working directory. @xref{Recursive behavior}. @item -R Operate recursively (default). @xref{Recursive behavior}. @item -r @var{tag} Annotate revision @var{tag}. See @ref{Common options}. @end table @c ------------------------------------------------------------ @item checkout [@var{options}] @var{modules}@dots{} Get a copy of the sources. See @ref{checkout}. @table @code @item -A Reset any sticky tags/date/options. See @ref{Sticky tags} and @ref{Keyword substitution}. @item -c Output the module database. See @ref{checkout options}. @item -D @var{date} Check out revisions as of @var{date} (is sticky). See @ref{Common options}. @item -d @var{dir} Check out into @var{dir}. See @ref{checkout options}. @item -f Use head revision if tag/date not found. See @ref{Common options}. @c Probably want to use rev1/rev2 style like for diff @c -r. Here and in on-line help. @item -j @var{rev} Merge in changes. See @ref{checkout options}. @item -k @var{kflag} Use @var{kflag} keyword expansion. See @ref{Substitution modes}. @item -l Local; run only in current working directory. @xref{Recursive behavior}. @item -N Don't ``shorten'' module paths if -d specified. See @ref{checkout options}. @item -n Do not run module program (if any). See @ref{checkout options}. @item -P Prune empty directories. See @ref{Moving directories}. @item -p Check out files to standard output (avoids stickiness). See @ref{checkout options}. @item -R Operate recursively (default). @xref{Recursive behavior}. @item -r @var{tag} Checkout revision @var{tag} (is sticky). See @ref{Common options}. @item -s Like -c, but include module status. See @ref{checkout options}. @end table @c ------------------------------------------------------------ @item commit [@var{options}] [@var{files}@dots{}] Check changes into the repository. See @ref{commit}. @table @code @item -F @var{file} Read log message from @var{file}. See @ref{commit options}. @item -f @c What is this "disables recursion"? It is from the @c on-line help; is it documented in this manual? Force the file to be committed; disables recursion. See @ref{commit options}. @item -l Local; run only in current working directory. See @ref{Recursive behavior}. @item -m @var{msg} Use @var{msg} as log message. See @ref{commit options}. @item -n Do not run module program (if any). See @ref{commit options}. @item -R Operate recursively (default). @xref{Recursive behavior}. @item -r @var{rev} Commit to @var{rev}. See @ref{commit options}. @c FIXME: should be dragging over text from @c commit options, especially if it can be cleaned up @c and made concise enough. @end table @c ------------------------------------------------------------ @item diff [@var{options}] [@var{files}@dots{}] Show differences between revisions. See @ref{diff}. In addition to the options shown below, accepts a wide variety of options to control output style, for example @samp{-c} for context diffs. @table @code @item -D @var{date1} Diff revision for date against working file. See @ref{diff options}. @item -D @var{date2} Diff @var{rev1}/@var{date1} against @var{date2}. See @ref{diff options}. @item -l Local; run only in current working directory. See @ref{Recursive behavior}. @item -N Include diffs for added and removed files. See @ref{diff options}. @item -R Operate recursively (default). @xref{Recursive behavior}. @item -r @var{rev1} Diff revision for @var{rev1} against working file. See @ref{diff options}. @item -r @var{rev2} Diff @var{rev1}/@var{date1} against @var{rev2}. See @ref{diff options}. @end table @c ------------------------------------------------------------ @item edit [@var{options}] [@var{files}@dots{}] Get ready to edit a watched file. See @ref{Editing files}. @table @code @item -a @var{actions} Specify actions for temporary watch, where @var{actions} is @code{edit}, @code{unedit}, @code{commit}, @code{all}, or @code{none}. See @ref{Editing files}. @item -l Local; run only in current working directory. See @ref{Recursive behavior}. @item -R Operate recursively (default). @xref{Recursive behavior}. @end table @c ------------------------------------------------------------ @item editors [@var{options}] [@var{files}@dots{}] See who is editing a watched file. See @ref{Watch information}. @table @code @item -l Local; run only in current working directory. See @ref{Recursive behavior}. @item -R Operate recursively (default). @xref{Recursive behavior}. @end table @c ------------------------------------------------------------ @item export [@var{options}] @var{modules}@dots{} Export files from @sc{cvs}. See @ref{export}. @table @code @item -D @var{date} Check out revisions as of @var{date}. See @ref{Common options}. @item -d @var{dir} Check out into @var{dir}. See @ref{export options}. @item -f Use head revision if tag/date not found. See @ref{Common options}. @item -k @var{kflag} Use @var{kflag} keyword expansion. See @ref{Substitution modes}. @item -l Local; run only in current working directory. @xref{Recursive behavior}. @item -N Don't ``shorten'' module paths if -d specified. See @ref{export options}. @item -n Do not run module program (if any). See @ref{export options}. @item -R Operate recursively (default). @xref{Recursive behavior}. @item -r @var{tag} Checkout revision @var{tag}. See @ref{Common options}. @end table @c ------------------------------------------------------------ @item history [@var{options}] [@var{files}@dots{}] Show repository access history. See @ref{history}. @table @code @item -a All users (default is self). See @ref{history options}. @item -b @var{str} Back to record with @var{str} in module/file/repos field. See @ref{history options}. @item -c Report on committed (modified) files. See @ref{history options}. @item -D @var{date} Since @var{date}. See @ref{history options}. @item -e Report on all record types. See @ref{history options}. @item -l Last modified (committed or modified report). See @ref{history options}. @item -m @var{module} Report on @var{module} (repeatable). See @ref{history options}. @item -n @var{module} In @var{module}. See @ref{history options}. @item -o Report on checked out modules. See @ref{history options}. @item -p @var{repository} In @var{repository}. See @ref{history options}. @item -r @var{rev} Since revision @var{rev}. See @ref{history options}. @item -T @c What the @#$@# is a TAG? Same as a tag? This @c wording is also in the online-line help. Produce report on all TAGs. See @ref{history options}. @item -t @var{tag} Since tag record placed in history file (by anyone). See @ref{history options}. @item -u @var{user} For user @var{user} (repeatable). See @ref{history options}. @item -w Working directory must match. See @ref{history options}. @item -x @var{types} Report on @var{types}, one or more of @code{TOEFWUCGMAR}. See @ref{history options}. @item -z @var{zone} Output for time zone @var{zone}. See @ref{history options}. @end table @c ------------------------------------------------------------ @item import [@var{options}] @var{repository} @var{vendor-tag} @var{release-tags}@dots{} Import files into @sc{cvs}, using vendor branches. See @ref{import}. @table @code @item -b @var{bra} Import to vendor branch @var{bra}. See @ref{Multiple vendor branches}. @item -d Use the file's modification time as the time of import. See @ref{import options}. @item -k @var{kflag} Set default keyword substitution mode. See @ref{import options}. @item -m @var{msg} Use @var{msg} for log message. See @ref{import options}. @item -I @var{ign} More files to ignore (! to reset). See @ref{import options}. @item -W @var{spec} More wrappers. See @ref{import options}. @end table @c ------------------------------------------------------------ @item init Create a @sc{cvs} repository if it doesn't exist. See @ref{Creating a repository}. @c ------------------------------------------------------------ @item kserver Kerberos authenticated server. See @ref{Kerberos authenticated}. @c ------------------------------------------------------------ @item log [@var{options}] [@var{files}@dots{}] Print out history information for files. See @ref{log}. @table @code @item -b Only list revisions on the default branch. See @ref{log options}. @item -d @var{dates} Specify dates (@var{d1}<@var{d2} for range, @var{d} for latest before). See @ref{log options}. @item -h Only print header. See @ref{log options}. @item -l Local; run only in current working directory. See @ref{Recursive behavior}. @item -N Do not list tags. See @ref{log options}. @item -R Only print name of RCS file. See @ref{log options}. @item -r@var{revs} Only list revisions @var{revs}. See @ref{log options}. @item -s @var{states} Only list revisions with specified states. See @ref{log options}. @item -t Only print header and descriptive text. See @ref{log options}. @item -w@var{logins} Only list revisions checked in by specified logins. See @ref{log options}. @end table @c ------------------------------------------------------------ @item login Prompt for password for authenticating server. See @ref{Password authentication client}. @c ------------------------------------------------------------ @item logout Remove stored password for authenticating server. See @ref{Password authentication client}. @c ------------------------------------------------------------ @item pserver Password authenticated server. See @ref{Password authentication server}. @c ------------------------------------------------------------ @item rannotate [@var{options}] [@var{modules}@dots{}] Show last revision where each line was modified. See @ref{annotate}. @table @code @item -D @var{date} Annotate the most recent revision no later than @var{date}. See @ref{Common options}. @item -F Force annotation of binary files. (Without this option, binary files are skipped with a message.) @item -f Use head revision if tag/date not found. See @ref{Common options}. @item -l Local; run only in current working directory. @xref{Recursive behavior}. @item -R Operate recursively (default). @xref{Recursive behavior}. @item -r @var{tag} Annotate revision @var{tag}. See @ref{Common options}. @end table @c ------------------------------------------------------------ @item rdiff [@var{options}] @var{modules}@dots{} Show differences between releases. See @ref{rdiff}. @table @code @item -c Context diff output format (default). See @ref{rdiff options}. @item -D @var{date} Select revisions based on @var{date}. See @ref{Common options}. @item -f Use head revision if tag/date not found. See @ref{Common options}. @item -l Local; run only in current working directory. See @ref{Recursive behavior}. @item -R Operate recursively (default). @xref{Recursive behavior}. @item -r @var{rev} Select revisions based on @var{rev}. See @ref{Common options}. @item -s Short patch - one liner per file. See @ref{rdiff options}. @item -t Top two diffs - last change made to the file. See @ref{diff options}. @item -u Unidiff output format. See @ref{rdiff options}. @item -V @var{vers} Use RCS Version @var{vers} for keyword expansion (obsolete). See @ref{rdiff options}. @end table @c ------------------------------------------------------------ @item release [@var{options}] @var{directory} Indicate that a directory is no longer in use. See @ref{release}. @table @code @item -d Delete the given directory. See @ref{release options}. @end table @c ------------------------------------------------------------ @item remove [@var{options}] [@var{files}@dots{}] Remove an entry from the repository. See @ref{Removing files}. @table @code @item -f Delete the file before removing it. See @ref{Removing files}. @item -l Local; run only in current working directory. See @ref{Recursive behavior}. @item -R Operate recursively (default). @xref{Recursive behavior}. @end table @c ------------------------------------------------------------ @item rlog [@var{options}] [@var{files}@dots{}] Print out history information for modules. See @ref{log}. @table @code @item -b Only list revisions on the default branch. See @ref{log options}. @item -d @var{dates} Specify dates (@var{d1}<@var{d2} for range, @var{d} for latest before). See @ref{log options}. @item -h Only print header. See @ref{log options}. @item -l Local; run only in current working directory. See @ref{Recursive behavior}. @item -N Do not list tags. See @ref{log options}. @item -R Only print name of RCS file. See @ref{log options}. @item -r@var{revs} Only list revisions @var{revs}. See @ref{log options}. @item -s @var{states} Only list revisions with specified states. See @ref{log options}. @item -t Only print header and descriptive text. See @ref{log options}. @item -w@var{logins} Only list revisions checked in by specified logins. See @ref{log options}. @end table @c ------------------------------------------------------------ @item rtag [@var{options}] @var{tag} @var{modules}@dots{} Add a symbolic tag to a module. See @ref{Revisions} and @ref{Branching and merging}. @table @code @item -a Clear tag from removed files that would not otherwise be tagged. See @ref{Tagging add/remove}. @item -b Create a branch named @var{tag}. See @ref{Branching and merging}. @item -B Used in conjunction with -F or -d, enables movement and deletion of branch tags. Use with extreme caution. @item -D @var{date} Tag revisions as of @var{date}. See @ref{Tagging by date/tag}. @item -d Delete @var{tag}. See @ref{Modifying tags}. @item -F Move @var{tag} if it already exists. See @ref{Modifying tags}. @item -f Force a head revision match if tag/date not found. See @ref{Tagging by date/tag}. @item -l Local; run only in current working directory. See @ref{Recursive behavior}. @item -n No execution of tag program. See @ref{Common options}. @item -R Operate recursively (default). @xref{Recursive behavior}. @item -r @var{rev} Tag existing tag @var{rev}. See @ref{Tagging by date/tag}. @end table @c ------------------------------------------------------------ @item server Rsh server. See @ref{Connecting via rsh}. @c ------------------------------------------------------------ @item status [@var{options}] @var{files}@dots{} Display status information in a working directory. See @ref{File status}. @table @code @item -l Local; run only in current working directory. See @ref{Recursive behavior}. @item -R Operate recursively (default). @xref{Recursive behavior}. @item -v Include tag information for file. See @ref{Tags}. @end table @c ------------------------------------------------------------ @item tag [@var{options}] @var{tag} [@var{files}@dots{}] Add a symbolic tag to checked out version of files. See @ref{Revisions} and @ref{Branching and merging}. @table @code @item -b Create a branch named @var{tag}. See @ref{Branching and merging}. @item -c Check that working files are unmodified. See @ref{Tagging the working directory}. @item -D @var{date} Tag revisions as of @var{date}. See @ref{Tagging by date/tag}. @item -d Delete @var{tag}. See @ref{Modifying tags}. @item -F Move @var{tag} if it already exists. See @ref{Modifying tags}. @item -f Force a head revision match if tag/date not found. See @ref{Tagging by date/tag}. @item -l Local; run only in current working directory. See @ref{Recursive behavior}. @item -R Operate recursively (default). @xref{Recursive behavior}. @item -r @var{rev} Tag existing tag @var{rev}. See @ref{Tagging by date/tag}. @end table @c ------------------------------------------------------------ @item unedit [@var{options}] [@var{files}@dots{}] Undo an edit command. See @ref{Editing files}. @table @code @item -l Local; run only in current working directory. See @ref{Recursive behavior}. @item -R Operate recursively (default). @xref{Recursive behavior}. @end table @c ------------------------------------------------------------ @item update [@var{options}] [@var{files}@dots{}] Bring work tree in sync with repository. See @ref{update}. @table @code @item -A Reset any sticky tags/date/options. See @ref{Sticky tags} and @ref{Keyword substitution}. @item -C Overwrite locally modified files with clean copies from the repository (the modified file is saved in @file{.#@var{file}.@var{revision}}, however). @item -D @var{date} Check out revisions as of @var{date} (is sticky). See @ref{Common options}. @item -d Create directories. See @ref{update options}. @item -f Use head revision if tag/date not found. See @ref{Common options}. @item -I @var{ign} More files to ignore (! to reset). See @ref{import options}. @c Probably want to use rev1/rev2 style like for diff @c -r. Here and in on-line help. @item -j @var{rev} Merge in changes. See @ref{update options}. @item -k @var{kflag} Use @var{kflag} keyword expansion. See @ref{Substitution modes}. @item -l Local; run only in current working directory. @xref{Recursive behavior}. @item -P Prune empty directories. See @ref{Moving directories}. @item -p Check out files to standard output (avoids stickiness). See @ref{update options}. @item -R Operate recursively (default). @xref{Recursive behavior}. @item -r @var{tag} Checkout revision @var{tag} (is sticky). See @ref{Common options}. @item -W @var{spec} More wrappers. See @ref{import options}. @end table @c ------------------------------------------------------------ @item version @cindex version (subcommand) Display the version of @sc{cvs} being used. If the repository is remote, display both the client and server versions. @c ------------------------------------------------------------ @item watch [on|off|add|remove] [@var{options}] [@var{files}@dots{}] on/off: turn on/off read-only checkouts of files. See @ref{Setting a watch}. add/remove: add or remove notification on actions. See @ref{Getting Notified}. @table @code @item -a @var{actions} Specify actions for temporary watch, where @var{actions} is @code{edit}, @code{unedit}, @code{commit}, @code{all}, or @code{none}. See @ref{Editing files}. @item -l Local; run only in current working directory. See @ref{Recursive behavior}. @item -R Operate recursively (default). @xref{Recursive behavior}. @end table @c ------------------------------------------------------------ @item watchers [@var{options}] [@var{files}@dots{}] See who is watching a file. See @ref{Watch information}. @table @code @item -l Local; run only in current working directory. See @ref{Recursive behavior}. @item -R Operate recursively (default). @xref{Recursive behavior}. @end table @end table @c --------------------------------------------------------------------- @node Administrative files @appendix Reference manual for Administrative files @cindex Administrative files (reference) @cindex Files, reference manual @cindex Reference manual (files) @cindex CVSROOT (file) @c FIXME? Somewhere there needs to be a more "how-to" @c guide to writing these. I think the triggers @c (commitinfo, loginfo, taginfo, &c) are perhaps a @c different case than files like modules. One @c particular issue that people sometimes are @c (unnecessarily?) worried about is performance, and @c the impact of writing in perl or sh or ____. Inside the repository, in the directory @file{$CVSROOT/CVSROOT}, there are a number of supportive files for @sc{cvs}. You can use @sc{cvs} in a limited fashion without any of them, but if they are set up properly they can help make life easier. For a discussion of how to edit them, see @ref{Intro administrative files}. The most important of these files is the @file{modules} file, which defines the modules inside the repository. @menu * modules:: Defining modules * Wrappers:: Specify binary-ness based on file name * commit files:: The commit support files (commitinfo, verifymsg, editinfo, loginfo) * rcsinfo:: Templates for the log messages * cvsignore:: Ignoring files via cvsignore * checkoutlist:: Adding your own administrative files * history file:: History information * Variables:: Various variables are expanded * config:: Miscellaneous CVS configuration @end menu @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node modules @appendixsec The modules file @cindex Modules (admin file) @cindex Defining modules (reference manual) The @file{modules} file records your definitions of names for collections of source code. @sc{cvs} will use these definitions if you use @sc{cvs} to update the modules file (use normal commands like @code{add}, @code{commit}, etc). The @file{modules} file may contain blank lines and comments (lines beginning with @samp{#}) as well as module definitions. Long lines can be continued on the next line by specifying a backslash (@samp{\}) as the last character on the line. There are three basic types of modules: alias modules, regular modules, and ampersand modules. The difference between them is the way that they map files in the repository to files in the working directory. In all of the following examples, the top-level repository contains a directory called @file{first-dir}, which contains two files, @file{file1} and @file{file2}, and a directory @file{sdir}. @file{first-dir/sdir} contains a file @file{sfile}. @c FIXME: should test all the examples in this section. @menu * Alias modules:: The simplest kind of module * Regular modules:: * Ampersand modules:: * Excluding directories:: Excluding directories from a module * Module options:: Regular and ampersand modules can take options * Module program options:: How the modules ``program options'' programs are run. @end menu @node Alias modules @appendixsubsec Alias modules @cindex Alias modules @cindex -a, in modules file Alias modules are the simplest kind of module: @table @code @item @var{mname} -a @var{aliases}@dots{} This represents the simplest way of defining a module @var{mname}. The @samp{-a} flags the definition as a simple alias: @sc{cvs} will treat any use of @var{mname} (as a command argument) as if the list of names @var{aliases} had been specified instead. @var{aliases} may contain either other module names or paths. When you use paths in aliases, @code{checkout} creates all intermediate directories in the working directory, just as if the path had been specified explicitly in the @sc{cvs} arguments. @end table For example, if the modules file contains: @example amodule -a first-dir @end example @noindent then the following two commands are equivalent: @example $ cvs co amodule $ cvs co first-dir @end example @noindent and they each would provide output such as: @example cvs checkout: Updating first-dir U first-dir/file1 U first-dir/file2 cvs checkout: Updating first-dir/sdir U first-dir/sdir/sfile @end example @node Regular modules @appendixsubsec Regular modules @cindex Regular modules @table @code @item @var{mname} [ options ] @var{dir} [ @var{files}@dots{} ] In the simplest case, this form of module definition reduces to @samp{@var{mname} @var{dir}}. This defines all the files in directory @var{dir} as module mname. @var{dir} is a relative path (from @code{$CVSROOT}) to a directory of source in the source repository. In this case, on checkout, a single directory called @var{mname} is created as a working directory; no intermediate directory levels are used by default, even if @var{dir} was a path involving several directory levels. @end table For example, if a module is defined by: @example regmodule first-dir @end example @noindent then regmodule will contain the files from first-dir: @example $ cvs co regmodule cvs checkout: Updating regmodule U regmodule/file1 U regmodule/file2 cvs checkout: Updating regmodule/sdir U regmodule/sdir/sfile $ @end example By explicitly specifying files in the module definition after @var{dir}, you can select particular files from directory @var{dir}. Here is an example: @example regfiles first-dir/sdir sfile @end example @noindent With this definition, getting the regfiles module will create a single working directory @file{regfiles} containing the file listed, which comes from a directory deeper in the @sc{cvs} source repository: @example $ cvs co regfiles U regfiles/sfile $ @end example @node Ampersand modules @appendixsubsec Ampersand modules @cindex Ampersand modules @cindex &, in modules file A module definition can refer to other modules by including @samp{&@var{module}} in its definition. @example @var{mname} [ options ] @var{&module}@dots{} @end example Then getting the module creates a subdirectory for each such module, in the directory containing the module. For example, if modules contains @example ampermod &first-dir @end example @noindent then a checkout will create an @code{ampermod} directory which contains a directory called @code{first-dir}, which in turns contains all the directories and files which live there. For example, the command @example $ cvs co ampermod @end example @noindent will create the following files: @example ampermod/first-dir/file1 ampermod/first-dir/file2 ampermod/first-dir/sdir/sfile @end example There is one quirk/bug: the messages that @sc{cvs} prints omit the @file{ampermod}, and thus do not correctly display the location to which it is checking out the files: @example $ cvs co ampermod cvs checkout: Updating first-dir U first-dir/file1 U first-dir/file2 cvs checkout: Updating first-dir/sdir U first-dir/sdir/sfile $ @end example Do not rely on this buggy behavior; it may get fixed in a future release of @sc{cvs}. @c FIXCVS: What happens if regular and & modules are @c combined, as in "ampermodule first-dir &second-dir"? @c When I tried it, it seemed to just ignore the @c "first-dir". I think perhaps it should be an error @c (but this needs further investigation). @c In addition to discussing what each one does, we @c should put in a few words about why you would use one or @c the other in various situations. @node Excluding directories @appendixsubsec Excluding directories @cindex Excluding directories, in modules file @cindex !, in modules file An alias module may exclude particular directories from other modules by using an exclamation mark (@samp{!}) before the name of each directory to be excluded. For example, if the modules file contains: @example exmodule -a !first-dir/sdir first-dir @end example @noindent then checking out the module @samp{exmodule} will check out everything in @samp{first-dir} except any files in the subdirectory @samp{first-dir/sdir}. @c Note that the "!first-dir/sdir" sometimes must be listed @c before "first-dir". That seems like a probable bug, in which @c case perhaps it should be fixed (to allow either @c order) rather than documented. See modules4 in testsuite. @node Module options @appendixsubsec Module options @cindex Options, in modules file Either regular modules or ampersand modules can contain options, which supply additional information concerning the module. @table @code @cindex -d, in modules file @item -d @var{name} Name the working directory something other than the module name. @c FIXME: Needs a bunch of examples, analogous to the @c examples for alias, regular, and ampersand modules @c which show where the files go without -d. @cindex Export program @cindex -e, in modules file @item -e @var{prog} Specify a program @var{prog} to run whenever files in a module are exported. @var{prog} runs with a single argument, the module name. @c FIXME: Is it run on server? client? @cindex Checkout program @cindex -o, in modules file @item -o @var{prog} Specify a program @var{prog} to run whenever files in a module are checked out. @var{prog} runs with a single argument, the module name. See @ref{Module program options} for information on how @var{prog} is called. @c FIXME: Is it run on server? client? @cindex Status of a module @cindex Module status @cindex -s, in modules file @item -s @var{status} Assign a status to the module. When the module file is printed with @samp{cvs checkout -s} the modules are sorted according to primarily module status, and secondarily according to the module name. This option has no other meaning. You can use this option for several things besides status: for instance, list the person that is responsible for this module. @cindex Tag program @cindex -t, in modules file @item -t @var{prog} Specify a program @var{prog} to run whenever files in a module are tagged with @code{rtag}. @var{prog} runs with two arguments: the module name and the symbolic tag specified to @code{rtag}. It is not run when @code{tag} is executed. Generally you will find that taginfo is a better solution (@pxref{user-defined logging}). @c FIXME: Is it run on server? client? @c Problems with -t include: @c * It is run after the tag not before @c * It doesn't get passed all the information that @c taginfo does ("mov", &c). @c * It only is run for rtag, not tag. @end table You should also see @pxref{Module program options} about how the ``program options'' programs are run. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Module program options @appendixsubsec How the modules file ``program options'' programs are run @cindex Modules file program options @cindex -t, in modules file @cindex -o, in modules file @cindex -e, in modules file @noindent For checkout, rtag, and export, the program is server-based, and as such the following applies:- If using remote access methods (pserver, ext, etc.), @sc{cvs} will execute this program on the server from a temporary directory. The path is searched for this program. If using ``local access'' (on a local or remote NFS file system, i.e. repository set just to a path), the program will be executed from the newly checked-out tree, if found there, or alternatively searched for in the path if not. The programs are all run after the operation has effectively completed. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Wrappers @appendixsec The cvswrappers file @cindex cvswrappers (admin file) @cindex CVSWRAPPERS, environment variable @cindex Wrappers @c FIXME: need some better way of separating this out @c by functionality. -m is @c one feature, and -k is a another. And this discussion @c should be better motivated (e.g. start with the @c problems, then explain how the feature solves it). Wrappers refers to a @sc{cvs} feature which lets you control certain settings based on the name of the file which is being operated on. The settings are @samp{-k} for binary files, and @samp{-m} for nonmergeable text files. The @samp{-m} option specifies the merge methodology that should be used when a non-binary file is updated. @code{MERGE} means the usual @sc{cvs} behavior: try to merge the files. @code{COPY} means that @code{cvs update} will refuse to merge files, as it also does for files specified as binary with @samp{-kb} (but if the file is specified as binary, there is no need to specify @samp{-m 'COPY'}). @sc{cvs} will provide the user with the two versions of the files, and require the user using mechanisms outside @sc{cvs}, to insert any necessary changes. @strong{WARNING: do not use @code{COPY} with @sc{cvs} 1.9 or earlier - such versions of @sc{cvs} will copy one version of your file over the other, wiping out the previous contents.} @c Ordinarily we don't document the behavior of old @c versions. But this one is so dangerous, I think we @c must. I almost renamed it to -m 'NOMERGE' so we @c could say "never use -m 'COPY'". The @samp{-m} wrapper option only affects behavior when merging is done on update; it does not affect how files are stored. See @ref{Binary files}, for more on binary files. The basic format of the file @file{cvswrappers} is: @c FIXME: @example is all wrong for this. Use @deffn or @c something more sensible. @example wildcard [option value][option value]... where option is one of -m update methodology value: MERGE or COPY -k keyword expansion value: expansion mode and value is a single-quote delimited value. @end example @c FIXME: We don't document -W or point to where it is @c documented. Or .cvswrappers. For example, the following command imports a directory, treating files whose name ends in @samp{.exe} as binary: @example cvs import -I ! -W "*.exe -k 'b'" first-dir vendortag reltag @end example @c Another good example, would be storing files @c (e.g. binary files) compressed in the repository. @c :::::::::::::::::: @c cvswrappers @c :::::::::::::::::: @c *.t12 -m 'COPY' @c *.t[0-9][0-9] -f 'gunzipcp %s' -t 'gzipcp %s %s' -m 'COPY' @c @c :::::::::::::::::: @c gunzipcp @c :::::::::::::::::: @c : @c [ -f $1 ] || exit 1 @c zcat $1 > /tmp/.#$1.$$ @c mv /tmp/.#$1.$$ $1 @c @c :::::::::::::::::: @c gzipcp @c :::::::::::::::::: @c : @c DIRNAME=`echo $1 | sed -e "s|/.*/||g"` @c if [ ! -d $DIRNAME ] ; then @c DIRNAME=`echo $1 | sed -e "s|.*/||g"` @c fi @c gzip -c $DIRNAME > $2 @c One catch--"cvs diff" will not invoke the wrappers @c (probably a CVS bug, although I haven't thought it out). @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node commit files @appendixsec The commit support files @cindex Committing, administrative support files The @samp{-i} flag in the @file{modules} file can be used to run a certain program whenever files are committed (@pxref{modules}). The files described in this section provide other, more flexible, ways to run programs whenever something is committed. There are three kind of programs that can be run on commit. They are specified in files in the repository, as described below. The following table summarizes the file names and the purpose of the corresponding programs. @table @file @item commitinfo The program is responsible for checking that the commit is allowed. If it exits with a non-zero exit status the commit will be aborted. @item verifymsg The specified program is used to evaluate the log message, and possibly verify that it contains all required fields. This is most useful in combination with the @file{rcsinfo} file, which can hold a log message template (@pxref{rcsinfo}). @item editinfo The specified program is used to edit the log message, and possibly verify that it contains all required fields. This is most useful in combination with the @file{rcsinfo} file, which can hold a log message template (@pxref{rcsinfo}). (obsolete) @item loginfo The specified program is called when the commit is complete. It receives the log message and some additional information and can store the log message in a file, or mail it to appropriate persons, or maybe post it to a local newsgroup, or@dots{} Your imagination is the limit! @end table @menu * syntax:: The common syntax * commitinfo:: Pre-commit checking * verifymsg:: How are log messages evaluated? * editinfo:: Specifying how log messages are created (obsolete) * loginfo:: Where should log messages be sent? @end menu @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node syntax @appendixsubsec The common syntax @cindex Info files (syntax) @cindex Syntax of info files @cindex Common syntax of info files @c FIXME: having this so totally separate from the @c Variables node is rather bogus. The administrative files such as @file{commitinfo}, @file{loginfo}, @file{rcsinfo}, @file{verifymsg}, etc., all have a common format. The purpose of the files are described later on. The common syntax is described here. @cindex Regular expression syntax Each line contains the following: @itemize @bullet @item @c Say anything about DEFAULT and ALL? Right now we @c leave that to the description of each file (and in fact @c the practice is inconsistent which is really annoying). A regular expression. This is a basic regular expression in the syntax used by GNU emacs. @c FIXME: What we probably should be saying is "POSIX Basic @c Regular Expression with the following extensions (`\(' @c `\|' '+' etc)" @c rather than define it with reference to emacs. @c The reference to emacs is not strictly speaking @c true, as we don't support \=, \s, or \S. Also it isn't @c clear we should document and/or promise to continue to @c support all the obscure emacs extensions like \<. @c Also need to better cite (or include) full @c documentation for the syntax. @c Also see comment in configure.in about what happens to the @c syntax if we pick up a system-supplied regexp matcher. @item A whitespace separator---one or more spaces and/or tabs. @item A file name or command-line template. @end itemize @noindent Blank lines are ignored. Lines that start with the character @samp{#} are treated as comments. Long lines unfortunately can @emph{not} be broken in two parts in any way. The first regular expression that matches the current directory name in the repository is used. The rest of the line is used as a file name or command-line as appropriate. @c FIXME: need an example. In particular, show what @c the regular expression is matched against (one @c ordinarily clueful person got confused about whether it @c includes the filename--"directory name" above should be @c unambiguous but there is nothing like an example to @c confirm people's understanding of this sort of thing). @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node commitinfo @appendixsubsec Commitinfo @cindex @file{commitinfo} @cindex Commits, precommit verification of @cindex Precommit checking The @file{commitinfo} file defines programs to execute whenever @samp{cvs commit} is about to execute. These programs are used for pre-commit checking to verify that the modified, added and removed files are really ready to be committed. This could be used, for instance, to verify that the changed files conform to to your site's standards for coding practice. As mentioned earlier, each line in the @file{commitinfo} file consists of a regular expression and a command-line template. The template can include a program name and any number of arguments you wish to supply to it. The full path to the current source repository is appended to the template, followed by the file names of any files involved in the commit (added, removed, and modified files). @cindex Exit status, of commitinfo The first line with a regular expression matching the directory within the repository will be used. If the command returns a non-zero exit status the commit will be aborted. @c FIXME: need example(s) of what "directory within the @c repository" means. @cindex DEFAULT in commitinfo If the repository name does not match any of the regular expressions in this file, the @samp{DEFAULT} line is used, if it is specified. @cindex ALL in commitinfo All occurrences of the name @samp{ALL} appearing as a regular expression are used in addition to the first matching regular expression or the name @samp{DEFAULT}. @cindex @file{commitinfo}, working directory @cindex @file{commitinfo}, command environment The command will be run in the root of the workspace containing the new versions of any files the user would like to modify (commit), @emph{or in a copy of the workspace on the server (@pxref{Remote repositories})}. If a file is being removed, there will be no copy of the file under the current directory. If a file is being added, there will be no corresponding archive file in the repository unless the file is being resurrected. Note that both the repository directory and the corresponding Attic (@pxref{Attic}) directory may need to be checked to locate the archive file corresponding to any given file being committed. Much of the information about the specific commit request being made, including the destination branch, commit message, and command line options specified, is not available to the command. @c FIXME: should discuss using commitinfo to control @c who has checkin access to what (e.g. Joe can check into @c directories a, b, and c, and Mary can check into @c directories b, c, and d--note this case cannot be @c conveniently handled with unix groups). Of course, @c adding a new set of features to CVS might be a more @c natural way to fix this problem than telling people to @c use commitinfo. @c FIXME: Should make some reference, especially in @c the context of controlling who has access, to the fact @c that commitinfo can be circumvented. Perhaps @c mention SETXID (but has it been carefully examined @c for holes?). This fits in with the discussion of @c general CVS security in "Password authentication @c security" (the bit which is not pserver-specific). @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node verifymsg @appendixsubsec Verifying log messages @cindex @file{verifymsg} (admin file) @cindex Log message, verifying Once you have entered a log message, you can evaluate that message to check for specific content, such as a bug ID. Use the @file{verifymsg} file to specify a program that is used to verify the log message. This program could be a simple script that checks that the entered message contains the required fields. The @file{verifymsg} file is often most useful together with the @file{rcsinfo} file, which can be used to specify a log message template. Each line in the @file{verifymsg} file consists of a regular expression and a command-line template. The template must include a program name, and can include any number of arguments. The full path to the current log message template file is appended to the template. One thing that should be noted is that the @samp{ALL} keyword is not supported. If more than one matching line is found, the first one is used. This can be useful for specifying a default verification script in a directory, and then overriding it in a subdirectory. @cindex DEFAULT in @file{verifymsg} If the repository name does not match any of the regular expressions in this file, the @samp{DEFAULT} line is used, if it is specified. @cindex Exit status, of @file{verifymsg} If the verification script exits with a non-zero exit status, the commit is aborted. @cindex @file{verifymsg}, changing the log message In the default configuration, CVS allows the verification script to change the log message. This is controlled via the RereadLogAfterVerify CVSROOT/config option. When @samp{RereadLogAfterVerify=always} or @samp{RereadLogAfterVerify=stat}, the log message will either always be reread after the verification script is run or reread only if the log message file status has changed. @xref{config}, for more on CVSROOT/config options. It is NOT a good idea for a @file{verifymsg} script to interact directly with the user in the various client/server methods. For the @code{pserver} method, there is no protocol support for communicating between @file{verifymsg} and the client on the remote end. For the @code{ext} and @code{server} methods, it is possible for CVS to become confused by the characters going along the same channel as the CVS protocol messages. See @ref{Remote repositories}, for more information on client/server setups. In addition, at the time the @file{verifymsg} script runs, the CVS server has locks in place in the repository. If control is returned to the user here then other users may be stuck waiting for access to the repository. This option can be useful if you find yourself using an rcstemplate that needs to be modified to remove empty elements or to fill in default values. It can also be useful if the rcstemplate has changed in the repository and the CVS/Template was not updated, but is able to be adapted to the new format by the verification script that is run by @file{verifymsg}. An example of an update might be to change all occurrences of 'BugId:' to be 'DefectId:' (which can be useful if the rcstemplate has recently been changed and there are still checked-out user trees with cached copies in the CVS/Template file of the older version). Another example of an update might be to delete a line that contains 'BugID: none' from the log message after validation of that value as being allowed is made. The following is a little silly example of a @file{verifymsg} file, together with the corresponding @file{rcsinfo} file, the log message template and an verification script. We begin with the log message template. We want to always record a bug-id number on the first line of the log message. The rest of log message is free text. The following template is found in the file @file{/usr/cvssupport/tc.template}. @example BugId: @end example The script @file{/usr/cvssupport/bugid.verify} is used to evaluate the log message. @example #!/bin/sh # # bugid.verify filename # # Verify that the log message contains a valid bugid # on the first line. # if head -1 < $1 | grep '^BugId:[ ]*[0-9][0-9]*$' > /dev/null; then exit 0 elif head -1 < $1 | grep '^BugId:[ ]*none$' > /dev/null; then # It is okay to allow commits with 'BugId: none', # but do not put that text into the real log message. grep -v '^BugId:[ ]*none$' > $1.rewrite mv $1.rewrite $1 exit 0 else echo "No BugId found." exit 1 fi @end example The @file{verifymsg} file contains this line: @example ^tc /usr/cvssupport/bugid.verify @end example The @file{rcsinfo} file contains this line: @example ^tc /usr/cvssupport/tc.template @end example The @file{config} file contains this line: @example RereadLogAfterVerify=always @end example @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node editinfo @appendixsubsec Editinfo @cindex editinfo (admin file) @cindex Editor, specifying per module @cindex Per-module editor @cindex Log messages, editing @strong{Note: The @file{editinfo} feature has been rendered obsolete. To set a default editor for log messages use the @code{CVSEDITOR}, @code{EDITOR} environment variables (@pxref{Environment variables}) or the @samp{-e} global option (@pxref{Global options}). See @ref{verifymsg}, for information on the use of the @file{verifymsg} feature for evaluating log messages.} If you want to make sure that all log messages look the same way, you can use the @file{editinfo} file to specify a program that is used to edit the log message. This program could be a custom-made editor that always enforces a certain style of the log message, or maybe a simple shell script that calls an editor, and checks that the entered message contains the required fields. If no matching line is found in the @file{editinfo} file, the editor specified in the environment variable @code{$CVSEDITOR} is used instead. If that variable is not set, then the environment variable @code{$EDITOR} is used instead. If that variable is not set a default will be used. See @ref{Committing your changes}. The @file{editinfo} file is often most useful together with the @file{rcsinfo} file, which can be used to specify a log message template. Each line in the @file{editinfo} file consists of a regular expression and a command-line template. The template must include a program name, and can include any number of arguments. The full path to the current log message template file is appended to the template. One thing that should be noted is that the @samp{ALL} keyword is not supported. If more than one matching line is found, the first one is used. This can be useful for specifying a default edit script in a module, and then overriding it in a subdirectory. @cindex DEFAULT in editinfo If the repository name does not match any of the regular expressions in this file, the @samp{DEFAULT} line is used, if it is specified. If the edit script exits with a non-zero exit status, the commit is aborted. Note: when @sc{cvs} is accessing a remote repository, or when the @samp{-m} or @samp{-F} options to @code{cvs commit} are used, @file{editinfo} will not be consulted. There is no good workaround for this; use @file{verifymsg} instead. @menu * editinfo example:: Editinfo example @end menu @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node editinfo example @appendixsubsubsec Editinfo example The following is a little silly example of a @file{editinfo} file, together with the corresponding @file{rcsinfo} file, the log message template and an editor script. We begin with the log message template. We want to always record a bug-id number on the first line of the log message. The rest of log message is free text. The following template is found in the file @file{/usr/cvssupport/tc.template}. @example BugId: @end example The script @file{/usr/cvssupport/bugid.edit} is used to edit the log message. @example #!/bin/sh # # bugid.edit filename # # Call $EDITOR on FILENAME, and verify that the # resulting file contains a valid bugid on the first # line. if [ "x$EDITOR" = "x" ]; then EDITOR=vi; fi if [ "x$CVSEDITOR" = "x" ]; then CVSEDITOR=$EDITOR; fi $CVSEDITOR $1 until head -1|grep '^BugId:[ ]*[0-9][0-9]*$' < $1 do echo -n "No BugId found. Edit again? ([y]/n)" read ans case $@{ans@} in n*) exit 1;; esac $CVSEDITOR $1 done @end example The @file{editinfo} file contains this line: @example ^tc /usr/cvssupport/bugid.edit @end example The @file{rcsinfo} file contains this line: @example ^tc /usr/cvssupport/tc.template @end example @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node loginfo @appendixsubsec Loginfo @cindex loginfo (admin file) @cindex Storing log messages @cindex Mailing log messages @cindex Distributing log messages @cindex Log messages @c "cvs commit" is not quite right. What we @c mean is "when the repository gets changed" which @c also includes "cvs import" and "cvs add" on a directory. The @file{loginfo} file is used to control where @samp{cvs commit} log information is sent. The first entry on a line is a regular expression which is tested against the directory that the change is being made to, relative to the @code{$CVSROOT}. If a match is found, then the remainder of the line is a filter program that should expect log information on its standard input. If the repository name does not match any of the regular expressions in this file, the @samp{DEFAULT} line is used, if it is specified. All occurrences of the name @samp{ALL} appearing as a regular expression are used in addition to the first matching regular expression or @samp{DEFAULT}. The first matching regular expression is used. @xref{commit files}, for a description of the syntax of the @file{loginfo} file. The user may specify a format string as part of the filter. The string is composed of a @samp{%} followed by a space, or followed by a single format character, or followed by a set of format characters surrounded by @samp{@{} and @samp{@}} as separators. The format characters are: @table @t @item s file name @item V old version number (pre-checkin) @item v new version number (post-checkin) @end table All other characters that appear in a format string expand to an empty field (commas separating fields are still provided). For example, some valid format strings are @samp{%}, @samp{%s}, @samp{%@{s@}}, and @samp{%@{sVv@}}. The output will be a space separated string of tokens enclosed in quotation marks (@t{"}). Any embedded dollar signs (@t{$}), backticks (@t{`}), backslashes (@t{\}), or quotation marks will be preceded by a backslash (this allows the shell to correctly parse it as a single string, regardless of the characters it contains). For backwards compatibility, the first token will be the repository subdirectory. The rest of the tokens will be comma-delimited lists of the information requested in the format string. For example, if @samp{/u/src/master/yoyodyne/tc} is the repository, @samp{%@{sVv@}} is the format string, and three files (@t{ChangeLog}, @t{Makefile}, @t{foo.c}) were modified, the output might be: @example "yoyodyne/tc ChangeLog,1.1,1.2 Makefile,1.3,1.4 foo.c,1.12,1.13" @end example As another example, @samp{%@{@}} means that only the name of the repository will be generated. Note: when @sc{cvs} is accessing a remote repository, @file{loginfo} will be run on the @emph{remote} (i.e., server) side, not the client side (@pxref{Remote repositories}). @menu * loginfo example:: Loginfo example * Keeping a checked out copy:: Updating a tree on every checkin @end menu @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node loginfo example @appendixsubsubsec Loginfo example The following @file{loginfo} file, together with the tiny shell-script below, appends all log messages to the file @file{$CVSROOT/CVSROOT/commitlog}, and any commits to the administrative files (inside the @file{CVSROOT} directory) are also logged in @file{/usr/adm/cvsroot-log}. Commits to the @file{prog1} directory are mailed to @t{ceder}. @c FIXME: is it a CVS feature or bug that only the @c first matching line is used? It is documented @c above, but is it useful? For example, if we wanted @c to run both "cvs-log" and "Mail" for the CVSROOT @c directory, it is kind of awkward if @c only the first matching line is used. @example ALL /usr/local/bin/cvs-log $CVSROOT/CVSROOT/commitlog $USER ^CVSROOT /usr/local/bin/cvs-log /usr/adm/cvsroot-log ^prog1 Mail -s %s ceder @end example The shell-script @file{/usr/local/bin/cvs-log} looks like this: @example #!/bin/sh (echo "------------------------------------------------------"; echo -n $2" "; date; echo; cat) >> $1 @end example @node Keeping a checked out copy @appendixsubsubsec Keeping a checked out copy @c What other index entries? It seems like @c people might want to use a lot of different @c words for this functionality. @cindex Keeping a checked out copy @cindex Checked out copy, keeping @cindex Web pages, maintaining with CVS It is often useful to maintain a directory tree which contains files which correspond to the latest version in the repository. For example, other developers might want to refer to the latest sources without having to check them out, or you might be maintaining a web site with @sc{cvs} and want every checkin to cause the files used by the web server to be updated. @c Can we offer more details on the web example? Or @c point the user at how to figure it out? This text @c strikes me as sufficient for someone who already has @c some idea of what we mean but not enough for the naive @c user/sysadmin to understand it and set it up. The way to do this is by having loginfo invoke @code{cvs update}. Doing so in the naive way will cause a problem with locks, so the @code{cvs update} must be run in the background. @c Should we try to describe the problem with locks? @c It seems like a digression for someone who just @c wants to know how to make it work. @c Another choice which might work for a single file @c is to use "cvs -n update -p" which doesn't take @c out locks (I think) but I don't see many advantages @c of that and we might as well document something which @c works for multiple files. Here is an example for unix (this should all be on one line): @example ^cyclic-pages (date; cat; (sleep 2; cd /u/www/local-docs; cvs -q update -d) &) >> $CVSROOT/CVSROOT/updatelog 2>&1 @end example This will cause checkins to repository directories starting with @code{cyclic-pages} to update the checked out tree in @file{/u/www/local-docs}. @c More info on some of the details? The "sleep 2" is @c so if we are lucky the lock will be gone by the time @c we start and we can wait 2 seconds instead of 30. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node rcsinfo @appendixsec Rcsinfo @cindex rcsinfo (admin file) @cindex Form for log message @cindex Log message template @cindex Template for log message The @file{rcsinfo} file can be used to specify a form to edit when filling out the commit log. The @file{rcsinfo} file has a syntax similar to the @file{verifymsg}, @file{commitinfo} and @file{loginfo} files. @xref{syntax}. Unlike the other files the second part is @emph{not} a command-line template. Instead, the part after the regular expression should be a full pathname to a file containing the log message template. If the repository name does not match any of the regular expressions in this file, the @samp{DEFAULT} line is used, if it is specified. All occurrences of the name @samp{ALL} appearing as a regular expression are used in addition to the first matching regular expression or @samp{DEFAULT}. @c FIXME: should be offering advice, somewhere around @c here, about where to put the template file. The @c verifymsg example uses /usr/cvssupport but doesn't @c say anything about what that directory is for or @c whether it is hardwired into CVS or who creates @c it or anything. In particular we should say @c how to version control the template file. A @c probably better answer than the /usr/cvssupport @c stuff is to use checkoutlist (with xref to the @c checkoutlist doc). @c Also I am starting to see a connection between @c this and the Keeping a checked out copy node. @c Probably want to say something about that. The log message template will be used as a default log message. If you specify a log message with @samp{cvs commit -m @var{message}} or @samp{cvs commit -f @var{file}} that log message will override the template. @xref{verifymsg}, for an example @file{rcsinfo} file. When @sc{cvs} is accessing a remote repository, the contents of @file{rcsinfo} at the time a directory is first checked out will specify a template. This template will be updated on all @samp{cvs update} commands. It will also be added to new directories added with a @samp{cvs add new-directry} command. In versions of @sc{cvs} prior to version 1.12, the @file{CVS/Template} file was not updated. If the @sc{cvs} server is at version 1.12 or higher an older client may be used and the @file{CVS/Template} will be updated from the server. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node cvsignore @appendixsec Ignoring files via cvsignore @cindex cvsignore (admin file), global @cindex Global cvsignore @cindex Ignoring files @c -- This chapter should maybe be moved to the @c tutorial part of the manual? There are certain file names that frequently occur inside your working copy, but that you don't want to put under @sc{cvs} control. Examples are all the object files that you get while you compile your sources. Normally, when you run @samp{cvs update}, it prints a line for each file it encounters that it doesn't know about (@pxref{update output}). @sc{cvs} has a list of files (or sh(1) file name patterns) that it should ignore while running @code{update}, @code{import} and @code{release}. @c -- Are those the only three commands affected? This list is constructed in the following way. @itemize @bullet @item The list is initialized to include certain file name patterns: names associated with @sc{cvs} administration, or with other common source control systems; common names for patch files, object files, archive files, and editor backup files; and other names that are usually artifacts of assorted utilities. Currently, the default list of ignored file name patterns is: @cindex Ignored files @cindex Automatically ignored files @example RCS SCCS CVS CVS.adm RCSLOG cvslog.* tags TAGS .make.state .nse_depinfo *~ #* .#* ,* _$* *$ *.old *.bak *.BAK *.orig *.rej .del-* *.a *.olb *.o *.obj *.so *.exe *.Z *.elc *.ln core @end example @item The per-repository list in @file{$CVSROOT/CVSROOT/cvsignore} is appended to the list, if that file exists. @item The per-user list in @file{.cvsignore} in your home directory is appended to the list, if it exists. @item Any entries in the environment variable @code{$CVSIGNORE} is appended to the list. @item Any @samp{-I} options given to @sc{cvs} is appended. @item As @sc{cvs} traverses through your directories, the contents of any @file{.cvsignore} will be appended to the list. The patterns found in @file{.cvsignore} are only valid for the directory that contains them, not for any sub-directories. @end itemize In any of the 5 places listed above, a single exclamation mark (@samp{!}) clears the ignore list. This can be used if you want to store any file which normally is ignored by @sc{cvs}. Specifying @samp{-I !} to @code{cvs import} will import everything, which is generally what you want to do if you are importing files from a pristine distribution or any other source which is known to not contain any extraneous files. However, looking at the rules above you will see there is a fly in the ointment; if the distribution contains any @file{.cvsignore} files, then the patterns from those files will be processed even if @samp{-I !} is specified. The only workaround is to remove the @file{.cvsignore} files in order to do the import. Because this is awkward, in the future @samp{-I !} might be modified to override @file{.cvsignore} files in each directory. Note that the syntax of the ignore files consists of a series of lines, each of which contains a space separated list of filenames. This offers no clean way to specify filenames which contain spaces, but you can use a workaround like @file{foo?bar} to match a file named @file{foo bar} (it also matches @file{fooxbar} and the like). Also note that there is currently no way to specify comments. @c FIXCVS? I don't _like_ this syntax at all, but @c changing it raises all the usual compatibility @c issues and I'm also not sure what to change it to. @node checkoutlist @appendixsec The checkoutlist file @cindex checkoutlist It may be helpful to use @sc{cvs} to maintain your own files in the @file{CVSROOT} directory. For example, suppose that you have a script @file{logcommit.pl} which you run by including the following line in the @file{commitinfo} administrative file: @example ALL $CVSROOT/CVSROOT/logcommit.pl @end example To maintain @file{logcommit.pl} with @sc{cvs} you would add the following line to the @file{checkoutlist} administrative file: @example logcommit.pl @end example The format of @file{checkoutlist} is one line for each file that you want to maintain using @sc{cvs}, giving the name of the file. After setting up @file{checkoutlist} in this fashion, the files listed there will function just like @sc{cvs}'s built-in administrative files. For example, when checking in one of the files you should get a message such as: @example cvs commit: Rebuilding administrative file database @end example @noindent and the checked out copy in the @file{CVSROOT} directory should be updated. Note that listing @file{passwd} (@pxref{Password authentication server}) in @file{checkoutlist} is not recommended for security reasons. For information about keeping a checkout out copy in a more general context than the one provided by @file{checkoutlist}, see @ref{Keeping a checked out copy}. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node history file @appendixsec The history file @cindex History file @cindex Log information, saving The file @file{$CVSROOT/CVSROOT/history} is used to log information for the @code{history} command (@pxref{history}). This file must be created to turn on logging. This is done automatically if the @code{cvs init} command is used to set up the repository (@pxref{Creating a repository}). The file format of the @file{history} file is documented only in comments in the @sc{cvs} source code, but generally programs should use the @code{cvs history} command to access it anyway, in case the format changes with future releases of @sc{cvs}. @node Variables @appendixsec Expansions in administrative files @cindex Internal variables @cindex Variables Sometimes in writing an administrative file, you might want the file to be able to know various things based on environment @sc{cvs} is running in. There are several mechanisms to do that. To find the home directory of the user running @sc{cvs} (from the @code{HOME} environment variable), use @samp{~} followed by @samp{/} or the end of the line. Likewise for the home directory of @var{user}, use @samp{~@var{user}}. These variables are expanded on the server machine, and don't get any reasonable expansion if pserver (@pxref{Password authenticated}) is in use; therefore user variables (see below) may be a better choice to customize behavior based on the user running @sc{cvs}. @c Based on these limitations, should we deprecate ~? @c What is it good for? Are people using it? One may want to know about various pieces of information internal to @sc{cvs}. A @sc{cvs} internal variable has the syntax @code{$@{@var{variable}@}}, where @var{variable} starts with a letter and consists of alphanumeric characters and @samp{_}. If the character following @var{variable} is a non-alphanumeric character other than @samp{_}, the @samp{@{} and @samp{@}} can be omitted. The @sc{cvs} internal variables are: @table @code @item CVSROOT @cindex CVSROOT, internal variable This is the absolute path to the current @sc{cvs} root directory. @xref{Repository}, for a description of the various ways to specify this, but note that the internal variable contains just the directory and not any of the access method information. @item RCSBIN @cindex RCSBIN, internal variable In @sc{cvs} 1.9.18 and older, this specified the directory where @sc{cvs} was looking for @sc{rcs} programs. Because @sc{cvs} no longer runs @sc{rcs} programs, specifying this internal variable is now an error. @item CVSEDITOR @cindex CVSEDITOR, internal variable @itemx EDITOR @cindex EDITOR, internal variable @itemx VISUAL @cindex VISUAL, internal variable These all expand to the same value, which is the editor that @sc{cvs} is using. @xref{Global options}, for how to specify this. @item USER @cindex USER, internal variable Username of the user running @sc{cvs} (on the @sc{cvs} server machine). When using pserver, this is the user specified in the repository specification which need not be the same as the username the server is running as (@pxref{Password authentication server}). Do not confuse this with the environment variable of the same name. @end table If you want to pass a value to the administrative files which the user who is running @sc{cvs} can specify, use a user variable. @cindex User variables To expand a user variable, the administrative file contains @code{$@{=@var{variable}@}}. To set a user variable, specify the global option @samp{-s} to @sc{cvs}, with argument @code{@var{variable}=@var{value}}. It may be particularly useful to specify this option via @file{.cvsrc} (@pxref{~/.cvsrc}). For example, if you want the administrative file to refer to a test directory you might create a user variable @code{TESTDIR}. Then if @sc{cvs} is invoked as @example cvs -s TESTDIR=/work/local/tests @end example @noindent and the administrative file contains @code{sh $@{=TESTDIR@}/runtests}, then that string is expanded to @code{sh /work/local/tests/runtests}. All other strings containing @samp{$} are reserved; there is no way to quote a @samp{$} character so that @samp{$} represents itself. Environment variables passed to administrative files are: @table @code @cindex environment variables, passed to administrative files @item CVS_USER @cindex CVS_USER, environment variable The @sc{cvs}-specific username provided by the user, if it can be provided (currently just for the pserver access method), and to the empty string otherwise. (@code{CVS_USER} and @code{USER} may differ when @file{$CVSROOT/CVSROOT/passwd} is used to map @sc{cvs} usernames to system usernames.) @item LOGNAME @cindex LOGNAME, environment variable The username of the system user. @item USER @cindex USER, environment variable Same as @code{LOGNAME}. Do not confuse this with the internal variable of the same name. @end table @node config @appendixsec The CVSROOT/config configuration file @cindex config, in CVSROOT @cindex CVSROOT/config The administrative file @file{config} contains various miscellaneous settings which affect the behavior of @sc{cvs}. The syntax is slightly different from the other administrative files. Variables are not expanded. Lines which start with @samp{#} are considered comments. @c FIXME: where do we define comments for the other @c administrative files. Other lines consist of a keyword, @samp{=}, and a value. Note that this syntax is very strict. Extraneous spaces or tabs are not permitted. @c See comments in parseinfo.c:parse_config for more @c discussion of this strictness. Currently defined keywords are: @table @code @cindex RCSBIN, in CVSROOT/config @item RCSBIN=@var{bindir} For @sc{cvs} 1.9.12 through 1.9.18, this setting told @sc{cvs} to look for @sc{rcs} programs in the @var{bindir} directory. Current versions of @sc{cvs} do not run @sc{rcs} programs; for compatibility this setting is accepted, but it does nothing. @cindex SystemAuth, in CVSROOT/config @item SystemAuth=@var{value} If @var{value} is @samp{yes}, then pserver should check for users in the system's user database if not found in @file{CVSROOT/passwd}. If it is @samp{no}, then all pserver users must exist in @file{CVSROOT/passwd}. The default is @samp{yes}. For more on pserver, see @ref{Password authenticated}. @cindex TopLevelAdmin, in CVSROOT/config @item TopLevelAdmin=@var{value} Modify the @samp{checkout} command to create a @samp{CVS} directory at the top level of the new working directory, in addition to @samp{CVS} directories created within checked-out directories. The default value is @samp{no}. This option is useful if you find yourself performing many commands at the top level of your working directory, rather than in one of the checked out subdirectories. The @file{CVS} directory created there will mean you don't have to specify @code{CVSROOT} for each command. It also provides a place for the @file{CVS/Template} file (@pxref{Working directory storage}). @cindex LockDir, in CVSROOT/config @item LockDir=@var{directory} Put @sc{cvs} lock files in @var{directory} rather than directly in the repository. This is useful if you want to let users read from the repository while giving them write access only to @var{directory}, not to the repository. It can also be used to put the locks on a very fast in-memory file system to speed up locking and unlocking the repository. You need to create @var{directory}, but @sc{cvs} will create subdirectories of @var{directory} as it needs them. For information on @sc{cvs} locks, see @ref{Concurrency}. @c Mention this in Compatibility section? Before enabling the LockDir option, make sure that you have tracked down and removed any copies of @sc{cvs} 1.9 or older. Such versions neither support LockDir, nor will give an error indicating that they don't support it. The result, if this is allowed to happen, is that some @sc{cvs} users will put the locks one place, and others will put them another place, and therefore the repository could become corrupted. @sc{cvs} 1.10 does not support LockDir but it will print a warning if run on a repository with LockDir enabled. @cindex LogHistory, in CVSROOT/config @item LogHistory=@var{value} Control what is logged to the @file{CVSROOT/history} file (@pxref{history}). Default of @samp{TOEFWUCGMAR} (or simply @samp{all}) will log all transactions. Any subset of the default is legal. (For example, to only log transactions that modify the @file{*,v} files, use @samp{LogHistory=TMAR}.) @cindex RereadLogAfterVerify, in CVSROOT/config @cindex @file{verifymsg}, changing the log message @item RereadLogAfterVerify=@var{value} Modify the @samp{commit} command such that CVS will reread the log message after running the program specified by @file{verifymsg}. @var{value} may be one of @samp{yes} or @samp{always}, indicating that the log message should always be reread; @samp{no} or @samp{never}, indicating that it should never be reread; or @var{value} may be @samp{stat}, indicating that the file should be checked with the filesystem @samp{stat()} function to see if it has changed (see warning below) before rereading. The default value is @samp{always}. @strong{Note: the `stat' mode can cause CVS to pause for up to one extra second per directory committed. This can be less IO and CPU intensive but is not recommended for use with large repositories} @xref{verifymsg}, for more information on how verifymsg may be used. @cindex UserAdminOptions, in CVSROOT/config @item UserAdminOptions=@var{value} Control what options will be allowed with the @code{cvs admin} command (@pxref{admin}) for users not in the @code{cvsadmin} group. The @var{value} string is a list of single character options which should be allowed. If a user who is not a member of the @code{cvsadmin} group tries to execute any @code{cvs admin} option which is not listed they will will receive an error message reporting that the option is restricted. If no @code{cvsadmin} group exists on the server, @sc{cvs} will ignore the @code{UserAdminOptions} keyword (@pxref{admin}). When not specified, @code{UserAdminOptions} defaults to @samp{k}. In other words, it defaults to allowing users outside of the @code{cvsadmin} group to use the @code{cvs admin} command only to change the default keyword expansion mode for files. As an example, to restrict users not in the @code{cvsadmin} group to using @code{cvs admin} to change the default keyword substitution mode, lock revisions, unlock revisions, and replace the log message, use @samp{UserAdminOptions=klum}. @end table @c --------------------------------------------------------------------- @node Environment variables @appendix All environment variables which affect CVS @cindex Environment variables @cindex Reference manual for variables This is a complete list of all environment variables that affect @sc{cvs}. @table @code @cindex CVSIGNORE, environment variable @item $CVSIGNORE A whitespace-separated list of file name patterns that @sc{cvs} should ignore. @xref{cvsignore}. @cindex CVSWRAPPERS, environment variable @item $CVSWRAPPERS A whitespace-separated list of file name patterns that @sc{cvs} should treat as wrappers. @xref{Wrappers}. @cindex CVSREAD, environment variable @cindex Read-only files, and CVSREAD @item $CVSREAD If this is set, @code{checkout} and @code{update} will try hard to make the files in your working directory read-only. When this is not set, the default behavior is to permit modification of your working files. @cindex CVSREADONLYFS, environment variable @item $CVSREADONLYFS Turns on read-only repository mode. This allows one to check out from a read-only repository, such as within an anoncvs server, or from a CDROM repository. It has the same effect as if the @samp{-R} command-line option is used. This can also allow the use of read-only NFS repositories. @item $CVSUMASK Controls permissions of files in the repository. See @ref{File permissions}. @item $CVSROOT Should contain the full pathname to the root of the @sc{cvs} source repository (where the @sc{rcs} files are kept). This information must be available to @sc{cvs} for most commands to execute; if @code{$CVSROOT} is not set, or if you wish to override it for one invocation, you can supply it on the command line: @samp{cvs -d cvsroot cvs_command@dots{}} Once you have checked out a working directory, @sc{cvs} stores the appropriate root (in the file @file{CVS/Root}), so normally you only need to worry about this when initially checking out a working directory. @item $CVSEDITOR @cindex CVSEDITOR, environment variable @itemx $EDITOR @cindex EDITOR, environment variable @itemx $VISUAL @cindex VISUAL, environment variable Specifies the program to use for recording log messages during commit. @code{$CVSEDITOR} overrides @code{$EDITOR}, which overrides @code{$VISUAL}. See @ref{Committing your changes} for more or @ref{Global options} for alternative ways of specifying a log editor. @cindex PATH, environment variable @item $PATH If @code{$RCSBIN} is not set, and no path is compiled into @sc{cvs}, it will use @code{$PATH} to try to find all programs it uses. @cindex HOME, environment variable @item $HOME @cindex HOMEPATH, environment variable @item $HOMEPATH @cindex HOMEDRIVE, environment variable @item $HOMEDRIVE Used to locate the directory where the @file{.cvsrc} file, and other such files, are searched. On Unix, @sc{cvs} just checks for @code{HOME}. On Windows NT, the system will set @code{HOMEDRIVE}, for example to @samp{d:} and @code{HOMEPATH}, for example to @file{\joe}. On Windows 95, you'll probably need to set @code{HOMEDRIVE} and @code{HOMEPATH} yourself. @c We are being vague about whether HOME works on @c Windows; see long comment in windows-NT/filesubr.c. @cindex CVS_RSH, environment variable @item $CVS_RSH Specifies the external program which @sc{cvs} connects with, when @code{:ext:} access method is specified. @pxref{Connecting via rsh}. @item $CVS_SERVER Used in client-server mode when accessing a remote repository using @sc{rsh}. It specifies the name of the program to start on the server side (and any necessary arguments) when accessing a remote repository using the @code{:ext:}, @code{:fork:}, or @code{:server:} access methods. The default value for @code{:ext:} and @code{:server:} is @code{cvs}; the default value for @code{:fork:} is the name used to run the client. @pxref{Connecting via rsh} @item $CVS_PASSFILE Used in client-server mode when accessing the @code{cvs login server}. Default value is @file{$HOME/.cvspass}. @pxref{Password authentication client} @item $CVS_CLIENT_PORT Used in client-server mode to set the port to use when accessing the server via Kerberos, GSSAPI, or @sc{cvs}'s password authentication protocol if the port is not specified in the CVSROOT. @pxref{Remote repositories} @cindex CVS_RCMD_PORT, environment variable @item $CVS_RCMD_PORT Used in client-server mode. If set, specifies the port number to be used when accessing the @sc{rcmd} demon on the server side. (Currently not used for Unix clients). @cindex CVS_CLIENT_LOG, environment variable @item $CVS_CLIENT_LOG Used for debugging only in client-server mode. If set, everything sent to the server is logged into @file{@code{$CVS_CLIENT_LOG}.in} and everything sent from the server is logged into @file{@code{$CVS_CLIENT_LOG}.out}. @cindex CVS_SERVER_SLEEP, environment variable @item $CVS_SERVER_SLEEP Used only for debugging the server side in client-server mode. If set, delays the start of the server child process the specified amount of seconds so that you can attach to it with a debugger. @cindex CVS_IGNORE_REMOTE_ROOT, environment variable @item $CVS_IGNORE_REMOTE_ROOT For @sc{cvs} 1.10 and older, setting this variable prevents @sc{cvs} from overwriting the @file{CVS/Root} file when the @samp{-d} global option is specified. Later versions of @sc{cvs} do not rewrite @file{CVS/Root}, so @code{CVS_IGNORE_REMOTE_ROOT} has no effect. @cindex CVS_LOCAL_BRANCH_NUM, environment variable @item $CVS_LOCAL_BRANCH_NUM Setting this variable allows some control over the branch number that is assigned. This is specifically to support the local commit feature of CVSup. If one sets @code{CVS_LOCAL_BRANCH_NUM} to (say) 1000 then branches the local repository, the revision numbers will look like 1.66.1000.xx. There is almost a dead-set certainty that there will be no conflicts with version numbers. @cindex COMSPEC, environment variable @item $COMSPEC Used under OS/2 only. It specifies the name of the command interpreter and defaults to @sc{cmd.exe}. @cindex TMPDIR, environment variable @item $TMPDIR @cindex TMP, environment variable @itemx $TMP @cindex TEMP, environment variable @itemx $TEMP @cindex Temporary files, location of @c This is quite nuts. We don't talk about tempnam @c or mkstemp which we sometimes use. The discussion @c of "Global options" is semi-incoherent. @c I'm not even sure those are the only inaccuracies. @c Furthermore, the conventions are @c pretty crazy and they should be simplified. Directory in which temporary files are located. The @sc{cvs} server uses @code{TMPDIR}. @xref{Global options}, for a description of how to specify this. Some parts of @sc{cvs} will always use @file{/tmp} (via the @code{tmpnam} function provided by the system). On Windows NT, @code{TMP} is used (via the @code{_tempnam} function provided by the system). The @code{patch} program which is used by the @sc{cvs} client uses @code{TMPDIR}, and if it is not set, uses @file{/tmp} (at least with GNU patch 2.1). Note that if your server and client are both running @sc{cvs} 1.9.10 or later, @sc{cvs} will not invoke an external @code{patch} program. @cindex CVS_PID, environment variable @item $CVS_PID This is the process identification (aka pid) number of the @sc{cvs} process. It is often useful in the programs and/or scripts specified by the @file{commitinfo}, @file{verifymsg}, @file{loginfo} files. @end table @node Compatibility @appendix Compatibility between CVS Versions @cindex CVS, versions of @cindex Versions, of CVS @cindex Compatibility, between CVS versions @c We don't mention versions older than CVS 1.3 @c on the theory that it would clutter it up for the vast @c majority of people, who don't have anything that old. @c The repository format is compatible going back to @sc{cvs} 1.3. But see @ref{Watches Compatibility}, if you have copies of @sc{cvs} 1.6 or older and you want to use the optional developer communication features. @c If you "cvs rm" and commit using 1.3, then you'll @c want to run "rcs -sdead " on each of the @c files in the Attic if you then want 1.5 and @c later to recognize those files as dead (I think the @c symptom if this is not done is that files reappear @c in joins). (Wait: the above will work but really to @c be strictly correct we should suggest checking @c in a new revision rather than just changing the @c state of the head revision, shouldn't we?). @c The old convert.sh script was for this, but it never @c did get updated to reflect use of the RCS "dead" @c state. @c Note: this is tricky to document without confusing @c people--need to carefully say what CVS version we @c are talking about and keep in mind the distinction @c between a @c repository created with 1.3 and on which one now @c uses 1.5+, and a repository on which one wants to @c use both versions side by side (e.g. during a @c transition period). @c Wait, can't CVS just detect the case in which a file @c is in the Attic but the head revision is not dead? @c Not sure whether this should produce a warning or @c something, and probably needs further thought, but @c it would appear that the situation can be detected. @c @c We might want to separate out the 1.3 compatibility @c section (for repository & working directory) from the @c rest--that might help avoid confusing people who @c are upgrading (for example) from 1.6 to 1.8. @c @c A minor incompatibility is if a current version of CVS @c puts "Nfoo" into CVS/Tag, then CVS 1.9 or older will @c see this as if there is no tag. Seems to me this is @c too obscure to mention. The working directory format is compatible going back to @sc{cvs} 1.5. It did change between @sc{cvs} 1.3 and @sc{cvs} 1.5. If you run @sc{cvs} 1.5 or newer on a working directory checked out with @sc{cvs} 1.3, @sc{cvs} will convert it, but to go back to @sc{cvs} 1.3 you need to check out a new working directory with @sc{cvs} 1.3. The remote protocol is interoperable going back to @sc{cvs} 1.5, but no further (1.5 was the first official release with the remote protocol, but some older versions might still be floating around). In many cases you need to upgrade both the client and the server to take advantage of new features and bugfixes, however. @c Perhaps should be saying something here about the @c "D" lines in Entries (written by CVS 1.9; 1.8 and @c older don't use them). These are supposed to be @c compatible in both directions, but I'm not sure @c they quite are 100%. One common gripe is if you @c "rm -r" a directory and 1.9 gets confused, as it @c still sees it in Entries. That one is fixed in @c (say) 1.9.6. Someone else reported problems with @c starting with a directory which was checked out with @c an old version, and then using a new version, and @c some "D" lines appeared, but not for every @c directory, causing some directories to be skipped. @c They weren't sure how to reproduce this, though. @c --------------------------------------------------------------------- @node Troubleshooting @appendix Troubleshooting If you are having trouble with @sc{cvs}, this appendix may help. If there is a particular error message which you are seeing, then you can look up the message alphabetically. If not, you can look through the section on other problems to see if your problem is mentioned there. @menu * Error messages:: Partial list of CVS errors * Connection:: Trouble making a connection to a CVS server * Other problems:: Problems not readily listed by error message @end menu @node Error messages @appendixsec Partial list of error messages Here is a partial list of error messages that you may see from @sc{cvs}. It is not a complete list---@sc{cvs} is capable of printing many, many error messages, often with parts of them supplied by the operating system, but the intention is to list the common and/or potentially confusing error messages. The messages are alphabetical, but introductory text such as @samp{cvs update: } is not considered in ordering them. In some cases the list includes messages printed by old versions of @sc{cvs} (partly because users may not be sure which version of @sc{cvs} they are using at any particular moment). @c If we want to start retiring messages, perhaps we @c should pick a cutoff version (for example, no more @c messages which are specific to versions before 1.9) @c and then move the old messages to an "old messages" @c node rather than deleting them completely. @table @code @c FIXME: What is the correct way to format a multiline @c error message here? Maybe @table is the wrong @c choice? Texinfo gurus? @item @var{file}:@var{line}: Assertion '@var{text}' failed The exact format of this message may vary depending on your system. It indicates a bug in @sc{cvs}, which can be handled as described in @ref{BUGS}. @item cvs @var{command}: authorization failed: server @var{host} rejected access This is a generic response when trying to connect to a pserver server which chooses not to provide a specific reason for denying authorization. Check that the username and password specified are correct and that the @code{CVSROOT} specified is allowed by @samp{--allow-root} in @file{inetd.conf}. See @ref{Password authenticated}. @item cvs @var{command}: conflict: removed @var{file} was modified by second party This message indicates that you removed a file, and someone else modified it. To resolve the conflict, first run @samp{cvs add @var{file}}. If desired, look at the other party's modification to decide whether you still want to remove it. If you don't want to remove it, stop here. If you do want to remove it, proceed with @samp{cvs remove @var{file}} and commit your removal. @c Tests conflicts2-142b* in sanity.sh test for this. @item cannot change permissions on temporary directory @example Operation not permitted @end example This message has been happening in a non-reproducible, occasional way when we run the client/server testsuite, both on Red Hat Linux 3.0.3 and 4.1. We haven't been able to figure out what causes it, nor is it known whether it is specific to linux (or even to this particular machine!). If the problem does occur on other unices, @samp{Operation not permitted} would be likely to read @samp{Not owner} or whatever the system in question uses for the unix @code{EPERM} error. If you have any information to add, please let us know as described in @ref{BUGS}. If you experience this error while using @sc{cvs}, retrying the operation which produced it should work fine. @c This has been seen in a variety of tests, including @c multibranch-2, multibranch-5, and basic1-24-rm-rm, @c so it doesn't seem particularly specific to any one @c test. @item cvs [server aborted]: Cannot check out files into the repository itself The obvious cause for this message (especially for non-client/server @sc{cvs}) is that the @sc{cvs} root is, for example, @file{/usr/local/cvsroot} and you try to check out files when you are in a subdirectory, such as @file{/usr/local/cvsroot/test}. However, there is a more subtle cause, which is that the temporary directory on the server is set to a subdirectory of the root (which is also not allowed). If this is the problem, set the temporary directory to somewhere else, for example @file{/var/tmp}; see @code{TMPDIR} in @ref{Environment variables}, for how to set the temporary directory. @item cannot commit files as 'root' See @samp{'root' is not allowed to commit files}. @c For one example see basica-1a10 in the testsuite @c For another example, "cvs co ." on NT; see comment @c at windows-NT/filesubr.c (expand_wild). @c For another example, "cvs co foo/bar" where foo exists. @item cannot open CVS/Entries for reading: No such file or directory This generally indicates a @sc{cvs} internal error, and can be handled as with other @sc{cvs} bugs (@pxref{BUGS}). Usually there is a workaround---the exact nature of which would depend on the situation but which hopefully could be figured out. @c This is more obscure than it might sound; it only @c happens if you run "cvs init" from a directory which @c contains a CVS/Root file at the start. @item cvs [init aborted]: cannot open CVS/Root: No such file or directory This message is harmless. Provided it is not accompanied by other errors, the operation has completed successfully. This message should not occur with current versions of @sc{cvs}, but it is documented here for the benefit of @sc{cvs} 1.9 and older. @item cvs server: cannot open /root/.cvsignore: Permission denied @itemx cvs [server aborted]: can't chdir(/root): Permission denied See @ref{Connection}. @item cvs [checkout aborted]: cannot rename file @var{file} to CVS/,,@var{file}: Invalid argument This message has been reported as intermittently happening with @sc{cvs} 1.9 on Solaris 2.5. The cause is unknown; if you know more about what causes it, let us know as described in @ref{BUGS}. @item cvs [@var{command} aborted]: cannot start server via rcmd This, unfortunately, is a rather nonspecific error message which @sc{cvs} 1.9 will print if you are running the @sc{cvs} client and it is having trouble connecting to the server. Current versions of @sc{cvs} should print a much more specific error message. If you get this message when you didn't mean to run the client at all, you probably forgot to specify @code{:local:}, as described in @ref{Repository}. @item ci: @var{file},v: bad diff output line: Binary files - and /tmp/T2a22651 differ @sc{cvs} 1.9 and older will print this message when trying to check in a binary file if @sc{rcs} is not correctly installed. Re-read the instructions that came with your @sc{rcs} distribution and the @sc{install} file in the @sc{cvs} distribution. Alternately, upgrade to a current version of @sc{cvs}, which checks in files itself rather than via @sc{rcs}. @item cvs checkout: could not check out @var{file} With @sc{cvs} 1.9, this can mean that the @code{co} program (part of @sc{rcs}) returned a failure. It should be preceded by another error message, however it has been observed without another error message and the cause is not well-understood. With the current version of @sc{cvs}, which does not run @code{co}, if this message occurs without another error message, it is definitely a @sc{cvs} bug (@pxref{BUGS}). @c My current suspicion is that the RCS in the rcs (not @c cvs/winnt/rcs57nt.zip) directory on the _Practical_ @c CD is bad (remains to be confirmed). @c There is also a report of something which looks @c very similar on SGI, Irix 5.2, so I dunno. @item cvs [login aborted]: could not find out home directory This means that you need to set the environment variables that @sc{cvs} uses to locate your home directory. See the discussion of @code{HOME}, @code{HOMEDRIVE}, and @code{HOMEPATH} in @ref{Environment variables}. @item cvs update: could not merge revision @var{rev} of @var{file}: No such file or directory @sc{cvs} 1.9 and older will print this message if there was a problem finding the @code{rcsmerge} program. Make sure that it is in your @code{PATH}, or upgrade to a current version of @sc{cvs}, which does not require an external @code{rcsmerge} program. @item cvs [update aborted]: could not patch @var{file}: No such file or directory This means that there was a problem finding the @code{patch} program. Make sure that it is in your @code{PATH}. Note that despite appearances the message is @emph{not} referring to whether it can find @var{file}. If both the client and the server are running a current version of @sc{cvs}, then there is no need for an external patch program and you should not see this message. But if either client or server is running @sc{cvs} 1.9, then you need @code{patch}. @item cvs update: could not patch @var{file}; will refetch This means that for whatever reason the client was unable to apply a patch that the server sent. The message is nothing to be concerned about, because inability to apply the patch only slows things down and has no effect on what @sc{cvs} does. @c xref to update output. Or File status? @c Or some place else that @c explains this whole "patch"/P/Needs Patch thing? @item dying gasps from @var{server} unexpected There is a known bug in the server for @sc{cvs} 1.9.18 and older which can cause this. For me, this was reproducible if I used the @samp{-t} global option. It was fixed by Andy Piper's 14 Nov 1997 change to src/filesubr.c, if anyone is curious. If you see the message, you probably can just retry the operation which failed, or if you have discovered information concerning its cause, please let us know as described in @ref{BUGS}. @item end of file from server (consult above messages if any) The most common cause for this message is if you are using an external @code{rsh} program and it exited with an error. In this case the @code{rsh} program should have printed a message, which will appear before the above message. For more information on setting up a @sc{cvs} client and server, see @ref{Remote repositories}. @item cvs [update aborted]: EOF in key in RCS file @var{file},v @itemx cvs [checkout aborted]: EOF while looking for end of string in RCS file @var{file},v This means that there is a syntax error in the given @sc{rcs} file. Note that this might be true even if @sc{rcs} can read the file OK; @sc{cvs} does more error checking of errors in the RCS file. That is why you may see this message when upgrading from @sc{cvs} 1.9 to @sc{cvs} 1.10. The likely cause for the original corruption is hardware, the operating system, or the like. Of course, if you find a case in which @sc{cvs} seems to corrupting the file, by all means report it, (@pxref{BUGS}). There are quite a few variations of this error message, depending on exactly where in the @sc{rcs} file @sc{cvs} finds the syntax error. @cindex mkmodules @item cvs commit: Executing 'mkmodules' This means that your repository is set up for a version of @sc{cvs} prior to @sc{cvs} 1.8. When using @sc{cvs} 1.8 or later, the above message will be preceded by @example cvs commit: Rebuilding administrative file database @end example If you see both messages, the database is being rebuilt twice, which is unnecessary but harmless. If you wish to avoid the duplication, and you have no versions of @sc{cvs} 1.7 or earlier in use, remove @code{-i mkmodules} every place it appears in your @code{modules} file. For more information on the @code{modules} file, see @ref{modules}. @c This message comes from "co", and I believe is @c possible only with older versions of CVS which call @c co. The problem with being able to create the bogus @c RCS file still exists, though (and I think maybe @c there is a different symptom(s) now). @c FIXME: Would be nice to have a more exact wording @c for this message. @item missing author Typically this can happen if you created an RCS file with your username set to empty. @sc{cvs} will, bogusly, create an illegal RCS file with no value for the author field. The solution is to make sure your username is set to a non-empty value and re-create the RCS file. @c "make sure your username is set" is complicated in @c and of itself, as there are the environment @c variables the system login name, &c, and it depends @c on the version of CVS. @item cvs [checkout aborted]: no such tag @var{tag} This message means that @sc{cvs} isn't familiar with the tag @var{tag}. Usually this means that you have mistyped a tag name; however there are (relatively obscure) cases in which @sc{cvs} will require you to @c Search sanity.sh for "no such tag" to see some of @c the relatively obscure cases. try a few other @sc{cvs} commands involving that tag, before you find one which will cause @sc{cvs} to update the @file{val-tags} file; see discussion of val-tags in @ref{File permissions}. You only need to worry about this once for a given tag; when a tag is listed in @file{val-tags}, it stays there. Note that using @samp{-f} to not require tag matches does not override this check; see @ref{Common options}. @item *PANIC* administration files missing This typically means that there is a directory named @sc{cvs} but it does not contain the administrative files which @sc{cvs} puts in a CVS directory. If the problem is that you created a CVS directory via some mechanism other than @sc{cvs}, then the answer is simple, use a name other than @sc{cvs}. If not, it indicates a @sc{cvs} bug (@pxref{BUGS}). @item rcs error: Unknown option: -x,v/ This message will be followed by a usage message for @sc{rcs}. It means that you have an old version of @sc{rcs} (probably supplied with your operating system), as well as an old version of @sc{cvs}. @sc{cvs} 1.9.18 and earlier only work with @sc{rcs} version 5 and later; current versions of @sc{cvs} do not run @sc{rcs} programs. @c For more information on installing @sc{cvs}, see @c (FIXME: where? it depends on whether you are @c getting binaries or sources or what). @c The message can also say "ci error" or something @c instead of "rcs error", I suspect. @item cvs [server aborted]: received broken pipe signal This message seems to be caused by a hard-to-track-down bug in @sc{cvs} or the systems it runs on (we don't know---we haven't tracked it down yet!). It seems to happen only after a @sc{cvs} command has completed, and you should be able to just ignore the message. However, if you have discovered information concerning its cause, please let us know as described in @ref{BUGS}. @item 'root' is not allowed to commit files When committing a permanent change, @sc{cvs} makes a log entry of who committed the change. If you are committing the change logged in as "root" (not under "su" or other root-priv giving program), @sc{cvs} cannot determine who is actually making the change. As such, by default, @sc{cvs} disallows changes to be committed by users logged in as "root". (You can disable this option by passing the @code{--enable-rootcommit} option to @file{configure} and recompiling @sc{cvs}. On some systems this means editing the appropriate @file{config.h} file before building @sc{cvs}.) @item Too many arguments! This message is typically printed by the @file{log.pl} script which is in the @file{contrib} directory in the @sc{cvs} source distribution. In some versions of @sc{cvs}, @file{log.pl} has been part of the default @sc{cvs} installation. The @file{log.pl} script gets called from the @file{loginfo} administrative file. Check that the arguments passed in @file{loginfo} match what your version of @file{log.pl} expects. In particular, the @file{log.pl} from @sc{cvs} 1.3 and older expects the logfile as an argument whereas the @file{log.pl} from @sc{cvs} 1.5 and newer expects the logfile to be specified with a @samp{-f} option. Of course, if you don't need @file{log.pl} you can just comment it out of @file{loginfo}. @item cvs [update aborted]: unexpected EOF reading @var{file},v See @samp{EOF in key in RCS file}. @item cvs [login aborted]: unrecognized auth response from @var{server} This message typically means that the server is not set up properly. For example, if @file{inetd.conf} points to a nonexistent cvs executable. To debug it further, find the log file which inetd writes (@file{/var/log/messages} or whatever inetd uses on your system). For details, see @ref{Connection}, and @ref{Password authentication server}. @item cvs commit: Up-to-date check failed for `@var{file}' This means that someone else has committed a change to that file since the last time that you did a @code{cvs update}. So before proceeding with your @code{cvs commit} you need to @code{cvs update}. @sc{cvs} will merge the changes that you made and the changes that the other person made. If it does not detect any conflicts it will report @samp{M @var{file}} and you are ready to @code{cvs commit}. If it detects conflicts it will print a message saying so, will report @samp{C @var{file}}, and you need to manually resolve the conflict. For more details on this process see @ref{Conflicts example}. @item Usage: diff3 [-exEX3 [-i | -m] [-L label1 -L label3]] file1 file2 file3 @example Only one of [exEX3] allowed @end example This indicates a problem with the installation of @code{diff3} and @code{rcsmerge}. Specifically @code{rcsmerge} was compiled to look for GNU diff3, but it is finding unix diff3 instead. The exact text of the message will vary depending on the system. The simplest solution is to upgrade to a current version of @sc{cvs}, which does not rely on external @code{rcsmerge} or @code{diff3} programs. @item warning: unrecognized response `@var{text}' from cvs server If @var{text} contains a valid response (such as @samp{ok}) followed by an extra carriage return character (on many systems this will cause the second part of the message to overwrite the first part), then it probably means that you are using the @samp{:ext:} access method with a version of rsh, such as most non-unix rsh versions, which does not by default provide a transparent data stream. In such cases you probably want to try @samp{:server:} instead of @samp{:ext:}. If @var{text} is something else, this may signify a problem with your @sc{cvs} server. Double-check your installation against the instructions for setting up the @sc{cvs} server. @c FIXCVS: should be printing CR as \r or \015 or some @c such, probably. @item cvs commit: [@var{time}] waiting for @var{user}'s lock in @var{directory} This is a normal message, not an error. See @ref{Concurrency}, for more details. @item cvs commit: warning: editor session failed @cindex Exit status, of editor This means that the editor which @sc{cvs} is using exits with a nonzero exit status. Some versions of vi will do this even when there was not a problem editing the file. If so, point the @code{CVSEDITOR} environment variable to a small script such as: @example #!/bin/sh vi $* exit 0 @end example @c "warning: foo was lost" and "no longer pertinent" (both normal). @c Would be nice to write these up--they are @c potentially confusing for the new user. @end table @node Connection @appendixsec Trouble making a connection to a CVS server This section concerns what to do if you are having trouble making a connection to a @sc{cvs} server. If you are running the @sc{cvs} command line client running on Windows, first upgrade the client to @sc{cvs} 1.9.12 or later. The error reporting in earlier versions provided much less information about what the problem was. If the client is non-Windows, @sc{cvs} 1.9 should be fine. If the error messages are not sufficient to track down the problem, the next steps depend largely on which access method you are using. @table @code @cindex :ext:, troubleshooting @item :ext: Try running the rsh program from the command line. For example: "rsh servername cvs -v" should print @sc{cvs} version information. If this doesn't work, you need to fix it before you can worry about @sc{cvs} problems. @cindex :server:, troubleshooting @item :server: You don't need a command line rsh program to use this access method, but if you have an rsh program around, it may be useful as a debugging tool. Follow the directions given for :ext:. @cindex :pserver:, troubleshooting @item :pserver: Errors along the lines of "connection refused" typically indicate that inetd isn't even listening for connections on port 2401 whereas errors like "connection reset by peer", "received broken pipe signal", "recv() from server: EOF", or "end of file from server" typically indicate that inetd is listening for connections but is unable to start @sc{cvs} (this is frequently caused by having an incorrect path in @file{inetd.conf} or by firewall software rejecting the connection). "unrecognized auth response" errors are caused by a bad command line in @file{inetd.conf}, typically an invalid option or forgetting to put the @samp{pserver} command at the end of the line. Another less common problem is invisible control characters that your editor "helpfully" added without you noticing. One good debugging tool is to "telnet servername 2401". After connecting, send any text (for example "foo" followed by return). If @sc{cvs} is working correctly, it will respond with @example cvs [pserver aborted]: bad auth protocol start: foo @end example If instead you get: @example Usage: cvs [cvs-options] command [command-options-and-arguments] ... @end example @noindent then you're missing the @samp{pserver} command at the end of the line in @file{inetd.conf}; check to make sure that the entire command is on one line and that it's complete. Likewise, if you get something like: @example Unknown command: `pserved' CVS commands are: add Add a new file/directory to the repository ... @end example @noindent then you've misspelled @samp{pserver} in some way. If it isn't obvious, check for invisible control characters (particularly carriage returns) in @file{inetd.conf}. If it fails to work at all, then make sure inetd is working right. Change the invocation in @file{inetd.conf} to run the echo program instead of cvs. For example: @example 2401 stream tcp nowait root /bin/echo echo hello @end example After making that change and instructing inetd to re-read its configuration file, "telnet servername 2401" should show you the text hello and then the server should close the connection. If this doesn't work, you need to fix it before you can worry about @sc{cvs} problems. On AIX systems, the system will often have its own program trying to use port 2401. This is AIX's problem in the sense that port 2401 is registered for use with @sc{cvs}. I hear that there is an AIX patch available to address this problem. Another good debugging tool is the @samp{-d} (debugging) option to inetd. Consult your system documentation for more information. If you seem to be connecting but get errors like: @example cvs server: cannot open /root/.cvsignore: Permission denied cvs [server aborted]: can't chdir(/root): Permission denied @end example @noindent then you probably haven't specified @samp{-f} in @file{inetd.conf}. (In releases prior to @sc{cvs} 1.11.1, this problem can be caused by your system setting the @code{$HOME} environment variable for programs being run by inetd. In this case, you can either have inetd run a shell script that unsets @code{$HOME} and then runs @sc{cvs}, or you can use @code{env} to run @sc{cvs} with a pristine environment.) If you can connect successfully for a while but then can't, you've probably hit inetd's rate limit. (If inetd receives too many requests for the same service in a short period of time, it assumes that something is wrong and temporarily disables the service.) Check your inetd documentation to find out how to adjust the rate limit (some versions of inetd have a single rate limit, others allow you to set the limit for each service separately.) @end table @node Other problems @appendixsec Other common problems Here is a list of problems which do not fit into the above categories. They are in no particular order. @itemize @bullet @item On Windows, if there is a 30 second or so delay when you run a @sc{cvs} command, it may mean that you have your home directory set to @file{C:/}, for example (see @code{HOMEDRIVE} and @code{HOMEPATH} in @ref{Environment variables}). @sc{cvs} expects the home directory to not end in a slash, for example @file{C:} or @file{C:\cvs}. @c FIXCVS: CVS should at least detect this and print an @c error, presumably. @item If you are running @sc{cvs} 1.9.18 or older, and @code{cvs update} finds a conflict and tries to merge, as described in @ref{Conflicts example}, but doesn't tell you there were conflicts, then you may have an old version of @sc{rcs}. The easiest solution probably is to upgrade to a current version of @sc{cvs}, which does not rely on external @sc{rcs} programs. @end itemize @c --------------------------------------------------------------------- @node Credits @appendix Credits @cindex Contributors (manual) @cindex Credits (manual) Roland Pesch, then of Cygnus Support <@t{roland@@wrs.com}> wrote the manual pages which were distributed with @sc{cvs} 1.3. Much of their text was copied into this manual. He also read an early draft of this manual and contributed many ideas and corrections. The mailing-list @code{info-cvs} is sometimes informative. I have included information from postings made by the following persons: David G. Grubbs <@t{dgg@@think.com}>. Some text has been extracted from the man pages for @sc{rcs}. The @sc{cvs} @sc{faq} by David G. Grubbs has provided useful material. The @sc{faq} is no longer maintained, however, and this manual is about the closest thing there is to a successor (with respect to documenting how to use @sc{cvs}, at least). In addition, the following persons have helped by telling me about mistakes I've made: @display Roxanne Brunskill <@t{rbrunski@@datap.ca}>, Kathy Dyer <@t{dyer@@phoenix.ocf.llnl.gov}>, Karl Pingle <@t{pingle@@acuson.com}>, Thomas A Peterson <@t{tap@@src.honeywell.com}>, Inge Wallin <@t{ingwa@@signum.se}>, Dirk Koschuetzki <@t{koschuet@@fmi.uni-passau.de}> and Michael Brown <@t{brown@@wi.extrel.com}>. @end display The list of contributors here is not comprehensive; for a more complete list of who has contributed to this manual see the file @file{doc/ChangeLog} in the @sc{cvs} source distribution. @c --------------------------------------------------------------------- @node BUGS @appendix Dealing with bugs in CVS or this manual @cindex Bugs in this manual or CVS Neither @sc{cvs} nor this manual is perfect, and they probably never will be. If you are having trouble using @sc{cvs}, or think you have found a bug, there are a number of things you can do about it. Note that if the manual is unclear, that can be considered a bug in the manual, so these problems are often worth doing something about as well as problems with @sc{cvs} itself. @cindex Reporting bugs @cindex Bugs, reporting @cindex Errors, reporting @itemize @bullet @item If you want someone to help you and fix bugs that you report, there are companies which will do that for a fee. One such company is: @cindex Ximbiot @cindex Support, getting CVS support @example Ximbiot 319 S. River St. Harrisburg, PA 17104-1657 USA Email: info@@ximbiot.com Phone: (717) 579-6168 Fax: (717) 234-3125 http://ximbiot.com/ @end example @item If you got @sc{cvs} through a distributor, such as an operating system vendor or a vendor of freeware @sc{cd-rom}s, you may wish to see whether the distributor provides support. Often, they will provide no support or minimal support, but this may vary from distributor to distributor. @item If you have the skills and time to do so, you may wish to fix the bug yourself. If you wish to submit your fix for inclusion in future releases of @sc{cvs}, see the file @sc{hacking} in the @sc{cvs} source distribution. It contains much more information on the process of submitting fixes. @item There may be resources on the net which can help. Two good places to start are: @example http://www.cvshome.org http://www.loria.fr/~molli/cvs-index.html @end example If you are so inspired, increasing the information available on the net is likely to be appreciated. For example, before the standard @sc{cvs} distribution worked on Windows 95, there was a web page with some explanation and patches for running @sc{cvs} on Windows 95, and various people helped out by mentioning this page on mailing lists or newsgroups when the subject came up. @item It is also possible to report bugs to @code{bug-cvs}. Note that someone may or may not want to do anything with your bug report---if you need a solution consider one of the options mentioned above. People probably do want to hear about bugs which are particularly severe in consequences and/or easy to fix, however. You can also increase your odds by being as clear as possible about the exact nature of the bug and any other relevant information. The way to report bugs is to send email to @code{bug-cvs@@gnu.org}. Note that submissions to @code{bug-cvs} may be distributed under the terms of the @sc{gnu} Public License, so if you don't like this, don't submit them. There is usually no justification for sending mail directly to one of the @sc{cvs} maintainers rather than to @code{bug-cvs}; those maintainers who want to hear about such bug reports read @code{bug-cvs}. Also note that sending a bug report to other mailing lists or newsgroups is @emph{not} a substitute for sending it to @code{bug-cvs}. It is fine to discuss @sc{cvs} bugs on whatever forum you prefer, but there are not necessarily any maintainers reading bug reports sent anywhere except @code{bug-cvs}. @end itemize @cindex Known bugs in this manual or CVS People often ask if there is a list of known bugs or whether a particular bug is a known one. The file @sc{bugs} in the @sc{cvs} source distribution is one list of known bugs, but it doesn't necessarily try to be comprehensive. Perhaps there will never be a comprehensive, detailed list of known bugs. @c --------------------------------------------------------------------- @node Index @unnumbered Index @cindex Index @printindex cp @summarycontents @contents @bye texi2html-1.82/test/manuals/res/texi_cvs/cvs.20000644000175000017500000000000011264347121023131 0ustar flichtenheldflichtenheldtexi2html-1.82/test/manuals/mini_ker_t2h.init0000644000175000017500000000140411264347121023106 0ustar flichtenheldflichtenheld$DO_SCONTENTS = 1; $print_Top = \&mini_ker_print_Top; sub mini_ker_print_Top { my $fh = shift; my $has_top_heading = shift; # for redefining navigation buttons use: # my $buttons = [...]; # as it is, 'Top', 'Contents', 'Index', 'About' are printed my $buttons = \@MISC_BUTTONS; &$print_head_navigation($fh, $buttons); my $nw; # top-level node is fully enclosed in @ifnothtml # print fulltitle, subtitle, author, Overview print $fh $Texi2HTML::TITLEPAGE; if (@{$Texi2HTML::OVERVIEW}) { print $fh '

    ' . &$I('Overview:') . "

    \n" . "
    \n"; my $nw = main::print_lines($fh, $Texi2HTML::OVERVIEW); print $fh "
    \n"; } } texi2html-1.82/test/manuals/mini_ker.texi0000644000175000017500000043201711264347121022347 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @ignore verifier si on a bien les nouveautes de la 1.02 1/ sensy_to_var 2/ Borel et Boreleig OK 3/ v.p. param OK 4/ Helps et listing divers OK 5/ Revoir Probes avec Pat => et code ! 6/ data doivent-elles etre specifique de kalman? 7/ symbolic en premier dans Borel a faire @end ignore @setfilename mini_ker.info @include version.texi @c @set myversion @value{VERSION} @set myversion 102 @set myurl @url{http://www.environnement.ens.fr/@/perso/@/dumas/@/mini_ker/@/software.html} @macro Minik{} Miniker @end macro @settitle @Minik{} @value{myversion} manual @syncodeindex fn vr @dircategory Miscellaneous @direntry * Miniker: (mini_ker). The mini_ker modeling tool. @end direntry @copying @noindent Copyright (C) 2004, 2005, 2006, 2007 Alain Lahellec@* Copyright (C) 2004, 2005, 2006, 2007 Patrice Dumas@* Copyright (C) 2004, St@'ephane Hallegatte @quotation Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover text and with no Back-Cover Text. A copy of the license is included in the section entitled ``GNU Free Documentation License.'' @end quotation @end copying @titlepage @title @Minik{} manual @subtitle for @Minik{} version @value{myversion}, @value{UPDATED} @author The TEF Collaboration @c @author Alain Lahellec @c @author Patrice Dumas @c @author St@'ephane Hallegatte @page @vskip 0pt plus 1filll @insertcopying @end titlepage @ifset texi2html @node Top @top @Minik{} @value{myversion} manual @c @insertcopying @end ifset @ifnottex @node Top @top @Minik{} @value{myversion} manual @strong{By: The TEF Collaboration} @insertcopying @end ifnottex @menu * Introduction:: * TEF overview:: * A model with @Minik{}:: * Advanced programming:: * Dynamic system analysis:: * Advanced use of @Minik{} with make:: Indices * Concepts index:: * Variables macros and functions index:: Appendices * Installation:: * Cmz directives reference:: @ignore * Resolution method:: * @Minik{} macros:: @end ignore * Copying This Manual:: The GNU Free Documentation License. @end menu @contents @node Introduction @unnumbered Introduction @cindex TEF @cindex cells @cindex transfers @cindex ZOOM @cindex mortran @Minik{} is a modeling tool, built especially in order to implement models written following the @acronym{TEF,Transfer Evolution Formalism} formalism, a mathematical framework for system analysis and simulation. @Minik{} allows for timewise simulation, system analysis, adjoint computation, Kalman filtering and more. @Minik{} uses a fortran preprocessor, @command{mortran}, designed in the 1970's, to ease model writing using dedicated specific languages. For example partial derivatives are symbolicaly determined by @command{mortran} macros in @Minik{}. For the selection of another compile-time features, another set of preprocessor directives, the @dfn{cmz directives}, are used. In most cases the user does not need to know anything about that preprocessing that occurs behind the scene, he simply writes down the equations of his model and he is done. @c All partial derivatives needed to solve the TEF system are automatically @c determined during the pre-compilation stage. @c Once all models written down and initial conditions @c given using a pseudo-Fortran type of language, the model is ready to run. @c The language developed to get automatic symbolic partial derivatives @c uses the Fortran pre-compiler @command{mortran}, designed in the 1970's. A comprehensive description of the @acronym{TEF} formalism in available on @url{http://www.lmd.jussieu.fr/ZOOM/doc/tef-GB-partA5.pdf}). The @Minik{} software is a reduced version of @uref{http://www.lmd.jussieu.fr@//zoom,@strong{ZOOM}}, that can only handle a hundreds of variables, but is much easier to use. @menu * Intended audience:: * Reading guide:: * Other Manuals and documentation:: @end menu @node Intended audience @unnumberedsec Intended audience The reader should have notions in system dynamics. @c and understand the basis of the TEF. Moreover a minimal knowledge of programmation and fortran is required. What is required is a basic understanding of variable types, affectation and fortran expressions. @node Reading guide @unnumberedsec Reading guide The first chapter is a brief overview of the @acronym{TEF}. The following describes how to write, compile and run a model in @Minik{} in its basic and comprehensive syntax. @c Reading the sections of this chapter up to the section @c @emph{Symbolic model description} is required to know the @c syntax of model description in @Minik{}. Reading up to the section @emph{Controlling the run} is required to be able to use @Minik{}. In this section it is assumed that @Minik{} is properly setup. The installation instructions are in the appendix at @ref{Installation}. @c 2 programming environment to compile the model are available, with cmz @c and make, you can skip the method description you are not interested in. @c A reference for the usefull cmz directives is also in the appendix @c (@pxref{Cmz directives reference}). @c You should also @c read the following section, @emph{Symbolic model description} which presents an @c alternate syntax for model description, such that you can choose what you @c prefer. The next chapter describes advanced features, first a general introduction to features settings and then a description of other model description related features. The next chapter describes system analysis tools available with @Minik{}. The sections are independant and each describes how to use a specific feature. If you plan on using these features, you should also read @ref{Selecting features, , Overview of feature setting}. A final chapter describes advanced features in a development environment using make, In the appendix the instructions for the installation are described (@pxref{Installation}). @node Other Manuals and documentation @unnumberedsec Other Manuals and documentation A programmers'Manual is available (in French), and can be asked for to any member of the collabration. See additional documents in @url{http://www.lmd.jussieu.fr/Zoom/doc} or ask for Research texts and articles to members. @node TEF overview @chapter An overview of the @acronym{TEF} formalism The @acronym{TEF, Transfer Evolution Formalism} is based on partitionning and recoupling of model subsystems. It allows the study of the coupling between subsystems by the means of linearization and time discretization. @menu * Cell and Transfer:: * Linearization and discretization:: @end menu @node Cell and Transfer @section Cell and Transfer equations In the @acronym{TEF}, a model is mathematically represented by a set of equations corresponding to two kinds objects: @enumerate @item Cells which are elementary models and correspond to evolution equations such as: @ifset latex @tex \begin{eqnarray} \partial_t \eta (t) &=& g(\eta(t),\varphi(t)) \label{cells} \end{eqnarray} @end tex @end ifset @ifclear latex @tex $$\partial_t \eta (t) = g(\eta(t),\varphi(t))$$ @end tex @ifnottex @noindent @math{d eta(t)/d t = g(eta(t),phi(t))} @end ifnottex @end ifclear Vector @math{\eta} represent the state variables of cells and the vector @math{\varphi} represent the dependent boundary conditions, @i{i.e.} the variables considered as boundary conditions by a cell, but depending upon the complete model state. This dependent boundary conditions are required to make the cells correspond to well-posed problems. @c FIXME acceptable? These variables are often called state variables, and prognostic variables in meteorology. @item Transfers which are determined by constraint equations such as: @ifset latex @tex \begin{eqnarray} \varphi(t) &=& f(\eta(t),\varphi(t)) \label{transfer} \end{eqnarray} @end tex @end ifset @ifclear latex @tex $$ \varphi(t) = f(\eta(t),\varphi(t)) $$ @end tex @ifnottex @noindent @math{phi(t) = f(eta(t),phi(t))} @end ifnottex @end ifclear These equations are often called algebraic equations, and in meteorology diagnostic equations. @end enumerate @node Linearization and discretization @section Linearization and discretization in the @acronym{TEF} The relations between sub-systems is excessively difficult to exhibit when having to cope with non-linear system. In the @acronym{TEF}, the @acronym{TLS, Tangent Linear System} is constructed along the trajectory. One considers the system over a small portion along the trajectory, say between @math{t} and @math{t + \delta t}. The variation @math{\delta \eta} of @math{\eta} and @math{\delta \varphi} of @math{\varphi} is obtained through a Pad@'e approximation of the state-transition matrix. The final form of the algebraic system is closed to the classical Crank-Nicolson scheme: @c FIXME PAd'e? od Taylor? @c through a Taylor expansion followed by time integration. @c A time scheme is then applied to the @acronym{TLS} (a Crank-Nicholson scheme), @c to obtain an algebraic system describing the relationships between @c variations of transfers and cells variables: @ifset latex @tex $$\left(\begin{array}{cc} A & B\\ -C^+ & I-D \end{array}\right) \left(\begin{array}{c} \delta \eta\\ \delta \varphi \end{array}\right) = \left(\begin{array}{c} \Gamma\\ \Omega \end{array}\right)$$ @end tex @end ifset @ifclear latex @tex $$\pmatrix{A & B\cr -C^+ & I-D\cr} \pmatrix{\delta \eta\cr \delta \varphi\cr} = \pmatrix{\Gamma\cr \Omega\cr}$$ @end tex @end ifclear The blocks appearing in the Jacobian matrix are constructed with partial derivative of @math{f} and @math{g}, and with @math{\delta t}. From this system the elimination of @math{\delta \eta} leads to another formulation giving the coupling between transfers, and allows for the @math{\delta \varphi} computation. The @math{\delta \varphi} value is then substitued in @math{\delta \eta} to complete the time-step solving process. @node A model with @Minik{} @chapter @Minik{} model programming @cindex sequences @Minik{} works by combining the model specification code given by the user and other source files provided in the package. The code is assembled, preprocessed, compiled, linked and the resulting program can be run to produce the model trajectory and dynamic analysis. The code provided in the package contains a principal program, some usefull subroutines and pieces of code called @dfn{sequences} combined with the different codes. Among these sequences some hold the code describing the model and are to be written by the user (sequences are similar to Fortran include files). @menu * Structure of the code:: * A model description:: * Setting and running a model:: * Controlling the run:: @end menu @node Structure of the code @section General structure of the code @cindex sequence @cindex zinit, general The sequences used to enter model description hold the @c vector dimensions, mathematical formulae for each cell and transfer component, dedicated derived computations, and time-step steering. During the code generation stage, cmz directives are preprocessed, then the user pseudo-Fortran instructions are translated by @command{mortran} using macros designed to generate in particular all Fortran instructions that compute the Jacobian matrices used in @acronym{TEF} modelling. @c A first users' sequence to program is: @file{dimetaphi} where the model @c dimensions are given, for the two vector-array @code{eta(.)} for cells @c and @code{ff(.)} for transfers (@pxref{Model size,,Entering model size}). The sequence @file{zinit} contains the mathematical formulation of the model (@pxref{Model equation and parameters, Entering model equation and parameters}). Another sequence, @file{zsteer}, is merged at the end of the time step advance of the simulation, where the user can monitor the time step values and printing levels, and perform particular computations etc. (@pxref{End of time step, ,Executing code at the end of each time step}). @node A model description @section @Minik{} programming illustrated @cindex TEF The general @acronym{TEF} system writes: @ifset latex @tex \begin{eqnarray} \partial_t \eta (t) &=& g(\eta(t),\varphi(t)) \nonumber\\ \varphi(t) &=& f(\eta(t),\varphi(t)) \label{tef} \end{eqnarray} @end tex @end ifset @ifclear latex @tex $$\eqalign{\partial_t \eta (t) &= g(\eta(t),\varphi(t))\cr \varphi(t) &= f(\eta(t),\varphi(t))\cr }$$ @end tex @ifnottex @noindent @math{d eta(t)/d t = g(eta(t),phi(t))@* phi(t) = f(eta(t),phi(t))} @end ifnottex @end ifclear To illustrate the model description in @Minik{} a simple predator-prey model of Lotka-Volterra is used. This model can be written in the following @acronym{TEF} form: @ifset latex @tex \begin{equation} \left\{ \begin{array}{cc} \partial_t \eta _{prey} =& a \eta _{prey} - a \varphi _{meet} \\ \partial_t \eta _{pred} =& -c \eta _{pred} + c \varphi _{meet} \nonumber\\ \end{array} \right. \end{equation} \begin{equation} \varphi _{meet} = \eta _{prey}\eta _{pred} \label{pred} \end{equation} @end tex @end ifset @ifclear latex @tex $$\left\{\eqalign{\partial_t \eta _{prey} &= a \eta _{prey} - a \varphi _{meet} \cr \partial_t \eta _{pred} &= -c \eta _{pred} + c \varphi _{meet}\cr}\right.$$ @end tex @tex $$\varphi _{meet} = \eta _{prey}\eta _{pred}$$ @end tex @ifnottex @noindent @math{d eta_prey(t)/d t = a * eta_prey - a * phi_meet@* d eta_pred(t)/d t = -c * eta_pred +c * phi_meet} @noindent @math{phi_meet = eta_prey * eta_pred} @end ifnottex @end ifclear with two cell equations, @i{i.e}. state evolution of the prey and predator groups, and one transfer accounting for the meeting of individuals of different group. @menu * A note about mortran and cmz directives:: * Model equation and parameters:: @end menu @node A note about mortran and cmz directives @subsection All you need to know about mortran and cmz directives @cindex mortran The first stage of code generation consists in cmz directives preprocessing. Cmz directives are used for conditional selection of features, and sequence inclusion. At that point you don't need to know anything about these directives. They are only usefull if you want to take advantage of advanced features (@pxref{Programming with cmz directives}). The code in sequences is written in Mortran and the second stage of code generation consists in mortran macro expansion. The mortran language is described in its own manual, here we only explain the very basics which is all you need to know to use @Minik{}. Mortran basic instructions are almost Fortran, the differences are the following: @itemize @bullet @item The code is free-form, and each statement should end with a semi-colon @code{;}. @item Comments may be introduced by an exclamation mark @code{!} at the beginning of a line, or appear within double quotes @code{"} in a single line. @item It is possible to use blocs, for @code{do} or @code{if} statement for example, and they are enclosed within brackets @samp{<} and @samp{>}. To be in the safe side, a semi-colon @code{;} should be added after a closng bracket @code{>}. @end itemize The following fictious code is legal mortran: @example real param; param = 3.; ff(1) = ff(3)**eta(1); "a comment" ! a line comment do inode=1,n_node ; @end example Thanks to mortran the model code is very simply specified, as you'll see next. @node Model equation and parameters @subsection Entering model equation and parameters @cindex @file{zinit} @vindex dt @vindex time @vindex nstep @vindex modzprint The model equation and parameters and some @Minik{} parameters are entered in the @file{zinit} sequence. The whole layout of the model is given before detailing the keywords. @example !%%%%%%%%%%%%%%%%%%%%%% ! Parameters !%%%%%%%%%%%%%%%%%%%%%% real apar,bpar; "optional Fortran type declaration" ! required parameters dt=.01; "initial time-step" nstep=10 000; "number of iterations along the trajectory" time=0.; "time initialisation " ! model parameters apar = 1.5; cpar = 0.7; ! misceallaneous parameters modzprint = 1000; "printouts frequency" print*,'***************************************'; print*,'Lotka-Volterra model with parameters as:'; z_pr: apar,bpar; print*,'***************************************'; !%%%%%%%%%%%%%%%%%%%%%% ! Transfer definition !%%%%%%%%%%%%%%%%%%%%%% ! rencontre (meeting) set_Phi < var: ff_interact, fun: f_interact = eta_prey*eta_pred; >; !%%%%%%%%%%%%%%%%%%%%%% ! Cell definition !%%%%%%%%%%%%%%%%%%%%%% set_eta < var: eta_prey, fun: deta_prey = apar*eta_prey - apar*ff_interact; var: eta_pred, fun: deta_pred = - cpar*eta_pred + cpar*ff_interact; >; !%%%%%%%%%%%%%%%%%%%%%% ! Initial states !%%%%%%%%%%%%%%%%%%%%%% eta_prey = 1.; eta_pred = 1.; ; OPEN(50,FILE='title.tex',STATUS='UNKNOWN'); "title file" write(50,5000) apar,cpar; 5000;format('Lotka-Volterra par:',2F4.1); @end example @subsubheading Variables and model parameters The following variables are mandatory: @table @code @item dt The time step. @item time Model time initialisation. @item nstep Number of iterations along the trajectory. @end table There are no other mandatory variables. Some optional variables are used to monitor the printout and ouput of results of the code. As an example, the variable @code{modzprint} is used to set the frequency of the printout of the model matrix and vectors during the run (@pxref{Controlling the printout and data output}). User's defined variable and Fortran or Mortran instructions can always be added for intermediate calculus. To avoid conflict with the variables of the @Minik{} code, the rule is that a users symbol must not have characters @samp{o} in the first two symbol characters. In the predator-prey example there are two model parameters. The fortran variables are called here @code{apar} for @math{a} and @code{cpar} for @math{c}. If a Fortan type definition is needed, it should be set at the very beginning of @file{zinit}. The predator-prey code variable initializations finally reads @example @group !%%%%%%%%%%%%%%%%%%%%%% ! Parameters !%%%%%%%%%%%%%%%%%%%%%% real apar,bpar; "optional Fortran type declaration" dt=.01; nstep=10 000; time=0.; ! model parameters apar = 1.5; cpar = 0.7; modzprint = 1000; @end group @end example @subsubheading Model equations @anchor{Model equations} @findex set_Phi @findex set_eta @vindex var: @vindex fun: @vindex eqn: The model equations for cells and model equations for transferts are entered in two mortran blocks, one for the transferts, the other for the cell components. The model equations for cells are entered into a @code{set_eta} block, and the transfer equations are entered into a @code{set_phi} block. In each block the couples variable-function are specified. For transfers the function defines the transfer itself while for cells the function describes the cell evolution. The variable is specified with @code{var:}, the function is defined with @code{fun:}. In the case of the predator-prey model, the transfer variable associated with @math{\varphi_{meet}} could be called @code{ff_interact} and the transfer definition would be given by: @example set_Phi < var: ff_interact, fun: f_interact = eta_prey*eta_pred; >; @end example The two cell equations of the predator-prey model, with name @code{eta_prey} for the prey (@math{\eta_{prey}}) and @code{eta_pred} for the predator (@math{\eta_{pred}}) are: @example set_eta < var: eta_prey, fun: deta_prey = apar*eta_prey - apar*ff_interact; var: eta_pred, fun: deta_pred = - cpar*eta_pred + cpar*ff_interact; >; @end example The @samp{;} at the end of the mortran block is important. @page The whole model equations are setup with: @example @group !%%%%%%%%%%%%%%%%%%%%%% ! Transfer definition !%%%%%%%%%%%%%%%%%%%%%% ! rencontre (meeting) set_Phi < var: ff_interact, fun: f_interact = eta_prey*eta_pred; >; !%%%%%%%%%%%%%%%%%%%%%% ! Cell definition !%%%%%%%%%%%%%%%%%%%%%% set_eta < var: eta_prey, fun: deta_prey = apar*eta_prey - apar*ff_interact; var: eta_pred, fun: deta_pred = - cpar*eta_pred + cpar*ff_interact; >; @end group @end example Whenever the user is not concerned with giving a specific name to a function, it is possible to specify the equation only with @code{eqn:}. Therefore the user may replace an instruction as: @example var: ff_dump, fun: f_dump = - rd*(eta_speed - eta_speed_limiting); @end example with: @example eqn: ff_dump = - rd*(eta_speed - eta_speed_limiting); @end example In that case, the unnamed function will take the name of the defined variable preceded by the @samp{$} sign: @code{$ff_dump}. @subsubheading Starting points @cindex starting point The cells equations require state initial conditions. In some case, the transfers may also need starting points although they are determined from the cell values. In the predator-prey model the starting points for cells are: @example ! initial state ! ------------- eta_prey = 1.; eta_pred = 1.; @end example When there is a non trivial implicit relationship between the transfers in the model, it may be usefull or even necessary to set some transfers to non-zero values. This difficulty is only relevant for the very first step of the simulation and will be used as a first guess of @math{\varphi}. The uninitialized transfers having a default compiler-dependant (often zero) value, an initialization to another value may help avoiding singular functions or matrix and ensure convergence in the Newton algorithm used to solve the transfer implicit equation. @ignore Indeed a good starting point for the transfers may help finding their value at the first time step (to help avoiding a singular matrix during the research of the first transfers and ensure convergence), when the implicit equation defining transfers is solved: @ifset latex @tex \begin{eqnarray} \varphi(t) &=& f(\eta(t),\varphi(t)) \label{transfer} \end{eqnarray} @end tex @end ifset @ifclear latex @tex $$ \varphi(t) = f(\eta(t),\varphi(t)) $$ @end tex @ifnottex @noindent @math{phi(t) = f(eta(t),phi(t))} @end ifnottex @end ifclear @end ignore @subsubheading The cell and transfer arrays @vindex eta(.) @vindex ff(.) @vindex mp @vindex np Sometime it is easier to iterate over an array than to use the cell or transfer variable name. This is possible because there is a correspondence between the variable names and the fortran array @code{eta(.)} for the cell variables and the fortran array @code{ff(.)} for the transfer variables@footnote{In fact the variables names are transformed into fortran array elements by mortran generated macros, so the symbolic names defined in the mortran blocks never appears in the generated fortran code, they are replaced by the fortran arrays.}. The index of the variable is determined by the order of appearance in the variable definition blocks. It is reminded in the output, as explained later (@pxref{Simulation and output}). The number of cells is in the integer @code{np} variable, and the number of transfer is in the integer @code{mp} variable. @subsubheading title file @anchor{Title file} @cindex title file @cindex @file{title.tex} For some graphics generation, a file with name @file{title.tex} is required which sets the title. The following instructions take care of that: @example OPEN(50,FILE='title.tex',STATUS='UNKNOWN'); write(50,5000) apar,cpar; 5000;format('Lotka-Volterra par:',2F4.1); close(50); @end example In that case the parameter values are written down, to differenciate between different runs. This step is in general not needed. @c The correspondence with basic components are printed out at execution @c time as explained in @ref{Simulation and output,, @c Running a simulation and using the output}. Also, a @file{Model.hlp} is @c generated that recalls the basic names and equations of the model. @c It may be noted that whenever @c the order of variable-functions is the same between indexed declaration and @c symbolic, the two generated Fortran code are almost identical. @node Setting and running a model @section Setting and running a model In this section it is assumed that a programming environment has been properly setup. This environment may use either cmz or make to drive the preprocessing and compilation. You can skip the part related with the environment you don't intend to use. For instructions regarding the installation, see @ref{Installation}. @menu * Setting up a model with cmz:: * Setting up a model with make:: * Simulation and output:: * Graphics:: @end menu @node Setting up a model with cmz @subsection Setup a model and compile with cmz @cindex @command{mod} @cindex @file{$zinit} @cindex @file{$dimetaphi} The user defined sequences are @samp{KEEP} in the cmz world. The most common organization is to have a cmz file in a subdirectory of the directory containing the @file{mini_ker.cmz} cmz file. In this cmz file there should be a @samp{PATCH} called @samp{zinproc} with the KEEPs within the patch. The KEEP must be called @file{$zinit}. @c and @file{$dimetaphi}. From within cmz in the directory of your model the source extraction, compilation and linking will be triggered by a @command{mod} command. This macro uses the @file{selseq.kumac} information to find the @file{mini_ker.cmz} cmz file. @command{mod} shall create a directory with the same name than the cmz file, @file{mymodel/} in our example. In this directory there is another directory @file{cfs/} containing the sources extracted from the cmz file. The file @file{mymodel_o.tmp} contains all the mortran code generated by cmz with the sequences substituted, including the @file{$zinit}. @c and @c @file{$dimetaphi} sequences (assembled code). The fortran produced by the preprocessing and splitting of this file is in files with the traditional @samp{.f} suffix. The principal program is in @file{principal.f}. An efficient way of getting familiar with mini_ker methods is looking at the @file{mymodel_o.tmp} where all sequences and main Mortran instructions are gathered. Symbolic derivation @c FIXME pas ici la symbolic derivation is noted as @code{F_D(expression)(/variable)}, and the resulting Fortran code is in @file{principal.f}. @command{mod} also triggers compilation and linking. The object files are in the same @file{cfs/} directory and the executable is in the @file{mymodel/} directory, with name @file{mymodel.exe}. @node Setting up a model with make @subsection Setup a model and compile with make @cindex compilation @c @cindex @file{dimetaphi.mti} @cindex @file{zinit.mti} @vindex model_file_name With make, the sequences are files ending with @samp{.mti} (for mortran include files), called, for example, @file{zinit.mti}. @c and @file{dimetaphi.mti}. They are included by @command{mortran} in other source files. You also need a @file{Makefile} to drive the compilation of the model. If you don't need additional code or libraries to be linked with your model you have two alternatives. @enumerate @item The simplest alternative is to run the @command{start_miniker} script with the model file name as argument. It should copy a @file{zinit.mti} file ready to be edited and a Makefile ready to compile the model. For the predator prey model, for example, you could run @example $ start_miniker predator @end example @item Otherwise you can copy the Makefile from @file{template/Makefile} in the directory containing the sequences. You should then change the compiled model file name, by changing the value of the @code{model_file_name} variable to the name of your choice in the Makefile. It is set to @file{mymodel} in the template. For the predator-prey model, it could be set like @example model_file_name = predator @end example If you want the executable model file to be built in another directory, you could set @example model_file_name = some_dir/predator @end example The other items set in the default Makefile should be right. @end enumerate The preprocessing and the compilation are launched with @example make all @end example The mortran files are generated by the cmz directive preprocessor from files found in the package source directories. The mortran files end with @samp{.mtn} for the main files and @samp{.mti} for include files. They are output in the current directory. The mortran preprocessor then preprocess these mortran files and includes the sequences. The resulting fortran code is also in the current directory, in files with a @samp{.f} suffix. Some fortran files ending with @samp{.F} may also be created by the cmz directive preprocessor. The object files resulting from the compilation of all the fortran files (generated from mortran or directly from fortran files) are there too. In case you want to override the default sequences or a subroutine file you just have to create it in your working directory along with the @file{zinit.mti}. @c and @file{dimetaphi.mti}. For example you could want to create or modify a @file{zsteer.mti} file (@pxref{End of time step,, Executing code at the end of each time step}), a @file{zcmd_law.mti} file (@pxref{Control laws}), a @file{monitor.f} file (@pxref{Turning the model into a subroutine}) to take advantage of features presented later in this manual. More in-depth discussion of using make to run @Minik{} is covered in @ref{Advanced use of @Minik{} with make}. For example it is also possible to create files that are to be preprocessed by the cmz directive preprocessor and separate source files and generated files. This advanced use is more precisely covered in @ref{Programming with cmz directives}. @page @node Simulation and output @subsection Running a simulation and using the output @cindex running model Once compiled the model is ready to run, it only has to be executed. On standard output informations about the states, transfers, tangent linear system and other jacobian matrices are printed. For example the predator-prey model could be executed with: @example ./predator > result.lis @end example @cindex output file @vindex dEta(.) @cindex @file{res.data} @cindex @file{dres.data} @cindex @file{tr.data} @cindex @file{aspha.data} @cindex @file{Model.hlp} @c In case of a model entered symbolically @c (@pxref{Symbolic model description}) The correspondance between the symbolic variables and the basic vectors and functions are printed at run time: @example ---------------- Informing on Phi definition ----------------- Var-name, Function-name, index in ff vector ff_interact f_interact 1 ---------------------------------------------------- --------------- Informing on Eta definition ------------------ Var-name, Function-name, index in eta vector eta_prey deta_prey 1 eta_pred deta_pred 2 @end example A summary of the model equations are in @file{Model.hlp} file. For the same example: @example ======================= set_Phi 1 ff_interact f_interact eta_pray*eta_pred ======================= set_Eta 1 eta_pray deta_pray apar*eta_pray-apar*ff_interact 2 eta_pred deta_pred -cpar*eta_pred+cpar*ff_interact @end example @c FIXME never talked about that. Certainly not here when other general functions are specified with @code{f_set}, it can appear also in the same help file when replaced by @code{fun_set}. As far as possible, all data printed in the listing are associated with a name related to a variable. Here is an extract: @example Gamma :-8.19100E-02-1.42151E-01 3.87150E-02 eta_courant eta_T_czcx eta_T_sz ------------------------------------------------ Omega : 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 courant_L T_czcx Psi_Tczc Psi_Tsz ------------------------------------------------ @end example for the two known vectors of the system, and: @example >ker : Matrice de couplage 4 4 4 4 courant_L Raw(1,j=1,4): 1.000 -9.9010E-03 0.000 0.000 T_czcx Raw(2,j=1,4): -2.7972E-02 1.000 0.000 9.9900E-04 Psi_Tczcx Raw(3,j=1,4): 0.1605 9.7359E-02 1.000 -5.7321E-03 Psi_Tsz Raw(4,j=1,4): 0.000 -0.1376 5.7225E-03 1.000 Var-Name courant_L T_czcx Psi_Tczc Psi_Tsz ---------------------------------------------------------- @end example where the @code{couplage} (coupling matrix) is given that corresponds to the matrix coupling the four transfer components after @math{\delta\eta} has been eliminated from system. It is computed in the subprogram @file{oker} (for kernel) which solves the system. Basic results are output in a set of @samp{.data} files. The first line (or two lines) describes the column with a @samp{#} character used to mark the lines as comments (for @command{gnuplot} for example). In the @samp{.data} files, the data are simply separated with spaces. Each data file has the @code{time} variable values as first column. @footnote{@file{dres.data} has another time related variable as second column: @cindex @file{dres.data} @vindex dt @code{dt}, the time step that can vary in the course of a simulation.}. Following columns give the values of @code{eta(.)} in @file{res.data}, @code{dEta(.)} in @file{dres.data} -- the step by step variation of @code{eta(.)} -- and @code{ff(.)} in @file{tr.data}. Along the simulation the @acronym{TEF} Jacobian matrices are computed. A transfer variables elimination process also leads to the definition of the classical state advance matrix of the system (the corresponding array is @code{aspha(.,.)} in the code). This matrix is output in the file @file{aspha.data} that is used to post-run dynamics analyses. The matrix columns are written column wise on each record. @xref{Stability of fastest modes,,Stability analysis of fastest modes}. @xref{Generalized TLS,,Generalized tangent linear system analysis}. It is not used in the solving process. Other @samp{.data} files will be described later. @c FIXME already said @c At the begining of a run, the help file @file{Model.hlp} is generated for @c global checkiing of the model. In the example, it is: @c @example @c ======================= set_Phi @c 1 ff_interact f_interact eta_pray*eta_pred @c ======================= set_Eta @c 1 eta_pray deta_pray apar*eta_pray-apar*ff_interact @c 2 eta_pred deta_pred -cpar*eta_pred+cpar*ff_interact @c @end example @node Graphics @subsection Doing graphics @cindex graphics @cindex graphics with @command{gnuplot} @cindex graphics with @command{PAW} @c The format of the @samp{.data} files are coherent with GNU graphics, that is @c the data are simply separated with spaces. Since the data are simply separated with spaces, and comment lines begin with @samp{#}, the files can be vizualised with many programs. With @command{gnuplot}, for example, to plot @code{eta(@var{n})}, the @command{gnuplot} statement could be: @example plot "res.data" using 1:(@var{n}+1) @end example The similar one for @code{ff(@var{n})}: @example plot "tr.data" using 1:(@var{n}+1) @end example For people using @command{PAW}, the CERN graphical computer code, @Minik{} prepares kumacs that allow to read process the @samp{.data} files in the form of @emph{n-tuples} (see the @cite{PAW manual} for more information). In that cas, the flag @code{sel paw} has to be gievn in the @file{selsequ.kumac}. The generated n-tuples are ready to use only for vector dimension of at most 10 (including the variable @code{time}). These kumacs are overwritten each time the model is run. Usaually, gnuplot has to be preferred, but when using surfaces and histograms, PAW is better. The @file{gains.f} (and @file{go.xqt} is provided as an example in the @Minik{} files. @node Controlling the run @section Controlling the run @cindex controlling the run It is possible to add code that will be executed at the end of each time step. It is also possible to specify which time step leads to a printout on standard output. For maximal control, the code running te model may be turned into a subroutine to be called from another fortran (or C) program, this possibility is covered in @ref{Calling the model code}. @menu * End of time step:: * Controlling the printout and data output:: @end menu @node End of time step @subsection Executing code at the end of each time step @cindex @file{zsteer} @cindex @file{zsteer.inc} The code in the sequence @file{zsteer} is executed at the end of each time step. It is possible to change the time step length (variable @code{dt}) verify that the non linearity are not too big, or perform discontinuous modifications of the states. One available variable @code{res} might be usefull for time step monitoring. At the end of the time step, as soon as @math{\varphi} has been computed, a numerical test is applied on a pseudo relative quadratic residual between @math{\varphi=f(\eta(t-dt)+d\varphi} (@code{ ffl}), where @math{d\varphi} is given by the system resolution in @code{ker},and @math{\varphi=f(\eta),\varphi)}, Fortran variable (@code{ff}): @verbatim ! ======================================================== ! test linearite ffl - ff ! ======================================================== if (istep.gt.1) < res=0.; ; if (res .gt. TOL_FFL) < print*,'*** pb linearite : res > TOL_FFL a istep',istep,res,' > ',TOL_FFL; do io=1,m < z_pr: io,ff(io),ff(io)-ffl(io); >; >; >; @end verbatim This test hence applies only for non linearities in tranfer models. Nevertheless, @code{res} might be usefull to monitor the time step @code{dt} in @code{ZSTEER} and eventually go backward one step (@code{goto :ReDoStep:}). This can more appropriatly be coded in the (empty in default case) sequence @code{zstep}, inserted just before time-advancing states and @code{time} variables in @file{principal}. @vindex ffl(.) @cindex @code{ffl} (linearity test) @cindex linearity test It is also possible to fix the value of the criterium @code{TOL_FFL} in @file{zinit} different from its default value of @math{10^{-3}} -- independent of the Fortran precision. Many other variables are available, including @vtable @code @item istep The step number; @item couplage(.) The @acronym{TEF} coupling matrix between transfers; @item H The Jacobian matrix corresponding with: @c \varphi(t) &= f(\eta(t),\varphi(t))\cr @c \frac{\partial g(\eta(t),\varphi(t))}{\partial \eta(t)} @tex $$\partial_{\eta} g(\eta(t),\varphi(t)); $$ @end tex @ifnottex g_1(eta,phi); @end ifnottex @item Bb The Jacobian matrix corresponding with: @tex $$\partial_{\varphi} g(\eta(t),\varphi(t)); $$ @end tex @ifnottex g_2(eta,phi); @end ifnottex @item Bt The Jacobian matrix corresponding with: @tex $$\partial_{\eta} f(\eta(t),\varphi(t)); $$ @end tex @ifnottex f_1(eta,phi); @end ifnottex @item D The Jacobian matrix corresponding with: @tex $$\partial_{\varphi} f(\eta(t),\varphi(t)); $$ @end tex @ifnottex f_2(eta,phi); @end ifnottex @item aspha The state advance matrix; @item dneta @itemx dphi the variable increments; @end vtable One should be aware of that the linearity test concerns the preceding step. We have yet no example of managing the time-step. @page @node Controlling the printout and data output @subsection Controlling the printout and data output @cindex printing @vindex zprint @vindex modzprint The printout on standard output is performed if the variable @code{zprint} of type @code{logical} is true. Therefore it is possible to control this printout by setting @code{zprint} false or true. For example the following code, in sequence @file{zsteer}, triggers printing for every @code{modzprint} time step and the two following time steps: @example ZPRINT = mod(istep+1,modzprint).eq.0; Zprint = zprint .or. mod(istep+1,modzprint).eq.1; Zprint = zprint .or. mod(istep+1,modzprint).eq.2; @end example The data output to @file{.data} files described in @ref{Simulation and output,, Running a simulation and using the output} is performed if the @code{logical} variable @code{zout} is true. For example the following code, in @file{zsteer}, triggers output to @file{.data} files every @code{modzout} step. @example Zout = mod(istep,modzout).eq.0; @end example @node Advanced programming @chapter Advanced @Minik{} programming @menu * Selecting features:: * Calling the model code:: * 1D gridded model:: * Double precision:: * Partial Derivatives:: * Rule of programming non continuous models:: * Parameters:: * Observations and data:: * Explicit model size:: * Programming with cmz directives:: @end menu @node Selecting features @section Overview of additional features setting @cindex feature setting @cindex select flag @cindex logical flags @cindex @file{selseq.kumac} It is possible to enable some features by selecting which code should be part of the principal program. Each of these optionnal features are associated with a @dfn{select flag}. For example @c the optimisation with minuit is associated with the select @c flag @samp{minuik}, double precision is used instead of simple precision with the @samp{double} select flag, the model is a subroutine with the select flag @samp{monitor}, the Kalman filter code is set with @samp{kalman} and the 1D gridded model capabilities are associated with @samp{grid1d}. @c Currently it is only possible @c to select features in cmz. To select a given feature the cmz statement @code{sel @var{select_flag}} should be written down in the @file{selseq.kumac} found in the model directory. With make either the corresponding variable should be set to 1 or it should be added to the @code{SEL} make variable, depending on the feature. Other features don't need different or additional code to be used. Most of the features are enabled by setting specific logical variables to @samp{.true.}. This is the case for @code{zback} for the adjoint model, @code{zcommand} if the command is in a file and @code{zlaw} if it is a function and @code{zkalman} for the Kalman filter. These select and logical flags are described in the corresponding sections. In cmz an alternative of writing select flags to @file{selseq.kumac} is to drive the compilation with @code{smod @var{sel_flag}}. In that case the @var{sel_flag} is selected and the files and executable goes to a directory named @file{sel_flag}. The select flags are taken into account during cmz directives preprocessing. Therefore you have the possibility to use these flags to conditionnaly include pieces of code. In most cases you don't need to include code conditionally yourself though, but if you want to, this is covered in @ref{Programming with cmz directives}. @node Calling the model code @section Calling the model code When the model code is a subroutine, it can be called from another fortran program unit (or another program), and the model will be run each time the subroutine is called. This technique could be used, for example to perform optimization (@pxref{Adjoint model and optimisation,,Adjoint model and optimisation with @Minik{}}), or to run the model with different parameters. @menu * Turning the model into a subroutine:: * The model subroutine:: @end menu @node Turning the model into a subroutine @subsection Turning the model into a subroutine @c This feature is allready enabled with @command{make}, and to @c override the default program a file called @file{monitor.f} has to be created @c in the working directory. The default program simple calls the model @c subroutine. With cmz, one has to do a @example sel monitor @end example in the @file{selseq.kumac} file and create the KEEP that call the model code. @xref{Selecting features, Overview of additional features setting}. With make @samp{monitor} should be added to the @code{SEL} variable in the @file{Makefile}, for example: @example SEL = monitor @end example A file that call the principal subroutine should also be written, using the prefered language of the user. The additional object files should then be linked with the @Minik{} objects. To that aim they may be added to the @code{miniker_user_objects} variable. @node The model subroutine @subsection Calling the model subroutine The model subroutine is called @samp{principal} and is called with the following arguments: @deffn Subroutine principal (Cost, ncall, integer_flag, file_suffix, info, idxerror) Where @var{Cost} is a real number, @code{real} or @code{double precision}, and is set by the @code{principal} subroutine. It holds the value of the cost function if such function has been defined (the use and setting of a cost function is covered later, see @ref{Cost function coding and adjoint modeling}). @var{ncall} is an integer which corresponds with the number of call to @code{principal} done so far, it should be initialized to 0 and its value should not be changed, as it is changed in the @code{principal} subroutine. @var{integer_flag} is an integer that can be set by the user to be accessed in the @code{principal} subroutine. For example its value could be used to set some flags in the @file{zinit} sequence. @var{file_suffix} is a character string, that is suffixed to the output files names instead of @samp{.data}. If the first character is the null character @samp{char(0)}, the default suffix, @samp{.data} is appended. @var{info} and @var{idxerror} are integer used for error reporting. @var{idxerror} value is 0 if there was no error. It is negative for an alert, positive for a very serious error. The precise value determines where the error occured. @var{info} is an integer holding more precise information about the error. It is usually the information value from lapack. The precise meaning of these error codes is in @ref{tab:error_codes}. @end deffn @float table, tab:error_codes @multitable {kalman analysis state matrix advance in phase space, @math{(I-D)} inversion} {inversion} {@code{idxerror}} @headitem Source of error or warning @tab @code{info} @tab @code{idxerror} @c @item @code{} @tab @file{.data} @tab @tab @item state matrix inversion in ker @tab inversion @tab 1 @item time advance system resolution in ker @tab system @tab 2 @item transfer propagator, @math{(I-D)} inversion @tab inversion @tab 3 @item kalman analysis state matrix advance in phase space, @math{(I-D)} inversion @tab inversion @tab 21 @item kalman analysis variance covariance matrix non positive @tab Choleski @tab 22 @item kalman analysis error matrix inversion @tab inversion @tab 23 @item kalman error matrix advance @tab system @tab 24 @item transfers determination linearity problem for transfers @tab @tab -1 @item transerts determination Newton D_loop does not converge @tab @tab -2 @end multitable @caption{Meaning of error codes returned by principal.} @end float In general more information than the provided arguments has to be passed to the @code{principal} subroutine, in that case a @code{common} block, to be written in the @file{zinit} sequence can be used. @page @node 1D gridded model @section Describing 1D gridded model Specific macros have been built that allow generic description of 1D gridded models. Because of the necessity of defining left and right limiting conditions, the models are partitionned in three groups for cell and transfer components. In the following example, a chain of masselottes linked by springs and dumps is bounded to a wall on the left, and open at right. The @acronym{TEF} formulation of the problem is written in the phase space (position-shift, velocity) for node @math{k}, with bounding conditions: @ifset latex @tex \begin{equation} \left\{ \begin{array}{cc} \partial_t \eta _{k} ^{pos} = \eta _{k} ^{vel}\qquad& \\ \partial_t \eta _{k} ^{vel} = ( \varphi_k ^{spr} -\varphi _{k+1} ^{spr}&+\,\,\varphi _{k} ^{dmp}-\varphi _{k+1} ^{dmp})\,/m_k \nonumber\\ \end{array} \right. \end{equation} \begin{equation} \left\{ \begin{array}{cc} \varphi_k ^{spr} = -k_k (\eta _{k} ^{pos}- \eta _{k-1} ^{pos})\\ \varphi_k ^{spr} = -d_k (\eta _{k} ^{vel}- \eta _{k-1} ^{vel}) \end{array} \right. \label{mass} \end{equation} \begin{equation} \left\{ \begin{array}{cc} \eta ^{pos}_{0} =& 0\\ \eta ^{vel}_{0} =& 0\\ \varphi ^{spr}_{N+1} =& 0\\ \varphi ^{dmp}_{N+1} =& 0 \end{array} \right. \end{equation} @end tex @end ifset @ifclear latex @tex $$\left\{\eqalign{\partial_t \eta _{k} ^{pos} &= \eta _{k} ^{vel} \cr \partial_t \eta _{k} ^{vel} &= ( \varphi_k ^{spr} -\varphi _{k+1} ^{spr} + \varphi _{k} ^{dmp}-\varphi _{k+1} ^{dmp})\,/m_k \cr}\right.$$ $$\left\{\eqalign{ \varphi_k ^{spr} &= -k_k (\eta _{k} ^{pos}- \eta _{k-1} ^{pos})\cr \varphi_k ^{spr} &= -d_k (\eta _{k} ^{vel}- \eta _{k-1} ^{vel}) \cr}\right.$$ $$\left\{\eqalign{\eta ^{pos}_{0} &= 0\cr \eta ^{vel}_{0} &= 0\cr \varphi ^{spr}_{N+1} &= 0\cr \varphi ^{dmp}_{N+1} &= 0\cr}\right.$$ @end tex @ifnottex States:@* @noindent @math{d position(t,k)/d t = velocity(t,k)@* d velocity (t,k)/d t =(spring(t,k) - spring(t,k+1)+ dump(t,k)- dump(t,k+1))/m_k} Transfers:@* @noindent @math{spring(t,k) = -k_k (position(t,k)- position(t,k-1))@* dump(k,t) &= -d_k (velocity(t,k)- velocity(t,k-1))} Bounding conditions:@* @noindent @math{position(t,0) = 0@* velocity(t,0) = 0@* spring(t,N+1) = 0@* dump(t,N+1) =0} @end ifnottex @end ifclear @cindex down node @cindex up node where @math{m_k} is the mass of node @math{k}, @math{r_k} and @math{d_k} the rigidity of springs and dumping coefficients. There are @math{N} nodes in the grid, from 1 to @math{N}, and two nodes outside of the grid, a limiting node 0, and a limiting node @math{N+1}. The limiting node corresponding with node 0 is called the @dfn{down} node, while the limiting node corresponding with node @math{N+1} is called the @dfn{up} node. Other models not part of the 1D grid may be added if any. To enable 1D gridded models, one should set the select flag @samp{grid1d}. In cmz it is achieved setting the select flag in @file{selseq.kumac}, like @example sel grid1d @end example With make, the @code{SEL} variable should contain @code{grid1d}. For example to select @code{grid1d} and @code{monitor}, it could be @example SEL = grid1d,monitor @end example @menu * 1D gridded Model size:: * 1D gridded model code:: @end menu @node 1D gridded Model size @subsection Setting dimensions for 1D gridded model @c FIXME grid1d sans dimetaphi? In that case the number of nodes, the number of states and tranferts per node, and the number of limiting transfers and states are required. These dimensions has to be entered in the @file{DimEtaPhi} sequence. The parameters for cells are @vtable @code @item n_node Number of cell nodes in the 1D grid. @item n_dwn Number of limiting cells with index -1, @i{i.e.} number of cells in the limiting down node. @item n_up Number of limiting cells with index +1, @i{i.e.} number of cells in the limiting up node. @item n_mult Number of cells in each node (multiplicity). @end vtable @vindex m_node @vindex m_dwn @vindex m_up @vindex m_mult The parameters for transfers, are similarly @code{m_node}, @code{m_dwn}, @code{m_up}, @code{m_mult}. The layout of their declaration should be respected as the precompiler matches the line. Also this procedure is tedious, it should be selected for debuging processes (use the flag @code{sel dimetaphi} in ``selsequ.kumac''. Otherwise, the dimensioning sequence will be automaticaly generated, which is smart but can lead to diffculty in interpreting syntax errors. Once a model is correctly entred, turn off the sel flag and further modifications will automatically generate the proper dimensions. The correctness of dimensionning should nevertheless always be checked in @code{principal.f}, where you can also check that null valued parameters as @code{lp, mobs, nxp} will suppress parts of the code - this is signaled as Fortran comment cards. In our example, there are three grids of cell and transfer variables (@code{n_node=m_node=3}). There are two cells and two transfers in each node (@code{n_mult=2} and @code{m_mult=2}). There is no limiting condition for the states in the down node therefore @code{n_up=0}. There is no transfer for the first limiting node, and therefore @code{m_dwn=0}. There are two states in the limiting node 0, the down node, @code{n_dwn=2}, and two transfers in the limiting last node the node up, and @code{m_up=2}: @example ! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ! nodes parameters, and Limiting Conditions (Low and High) ! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ parameter (n_node=3,n_dwn=2,n_up=0,n_mult=2); parameter (m_node=3,m_dwn=0,m_up=2,m_mult=2); ! ________________________________________________________ @end example @ignore @c FIXME enleve par al1 The dimension of the parameter arrays should also be declared in the @file{dimetaphi} sequence. Here we have 3 parameters, for @math{m_k}, @math{r_k} and @math{d_k}: @example dimension rk(n_node),rd(n_node),rmassm1(n_node); @end example @end ignore @node 1D gridded model code @subsection 1D gridded Model coding The model code and parameters go in the @file{zinit} sequence. @subsubheading Parameters A value for the @Minik{} parameters and the model parameters should be given in @file{zinit}, in our example we have @example !%%%%%%%%%%%%%%%%%%%%%% ! Parameters !%%%%%%%%%%%%%%%%%%%%%% real rk(n_node),rd(n_node),rmassm1(n_node); data rk/n_node*1./; data rd/n_node*0.1/; data rmassm1/n_node*1./; dt=.01; nstep=5 000; modzprint = 1000; time=0.; @end example @subsubheading Limiting conditions @cindex limiting conditions @c The limiting states and transfer variables and the corresponding equations are @c declared using @c the symbolic model description @c (@pxref{Symbolic model description}). There are four mortran blocks for @code{node} and @code{up} and @code{down}, both for states and transfers: @findex set_dwn_eta @findex set_dwn_phi @findex set_up_eta @findex set_up_phi @table @code @item set_dwn_eta down node cells @item set_up_eta up node cells @item set_dwn_phi down node transfers @item set_up_phi up node transfers @end table The following scheme illustrates the example: @smallexample !%%%%%%%%%%%%%%%%%%%%%%%%%%================================================ ! Maillage convention inode !%%%%%%%%%%%%%%%%%%%%%%%%%% Open ended !(2 Down Phi Eta (n_node) ! Eta) \| .-----. .-----. .-----. / ! wall \|-\/\/\-| |-\/\/\-| | . . . -| |-\/\/\- |dummy ! pos \|--***--| 1 |--***--| 2 | . . . -| n |--***-- |Phis ! speed \| 1 |_____| 2 |_____| n |_____| n+1 \(2 Up Phi) ! @end smallexample Two states are associated with the down node, they correspond to the position and speed of the wall. As the wall don't move these states are initialized to be 0, and the cells are stationnary cells, therefore these values remain 0. @example ! Down cells (wall) ! ----------------- eta_pos_wall = 0; eta_speed_wall = 0.; set_dwn_eta < var: eta_pos_wall, fun: deta_pos_wall = 0.; var: eta_speed_wall, fun: deta_speed_wall= 0.; >; @end example There are 2 limiting transfers in the up node. They correspond with an open end and are therefore set to 0. @example ! limiting Transfers : dummy ones ! ------------------------------- set_Up_Phi < var:ff_dummy_1, fun: f_dummy_1=0.; var:ff_dummy_2, fun: f_dummy_2=0.; >; @end example @subsubheading Starting points The cell node state values are initialized. They are in an array indexed by the @code{inode} variable. In the example the variable corresponding with position is @code{eta_move} and the variable corresponding with speed is @code{eta_speed}. Their initial values are set with the following mortran code @example !--------------- ! Initialisation !--------------- ; do inode=1,n_node ; @end example If any transfer needs to be given a first-guess value, this is also done using @code{inode} as the node index. @subsubheading Grid node equations @findex set_node_Phi @findex set_node_eta @cindex equations, grid Each node is associated with an index @code{inode}. It allows to refer to the preceding node, with @code{inode-1} and the following node @code{inode+1}. The node states are declared in @code{set_node_Eta} block and the transfers are in @code{set_node_Phi} blocks. In the example, the cells are declared with @example ! node cells ! ---------- ; set_node_Eta < var: eta_move(inode), fun: deta_move(inode) = eta_speed(inode); var: eta_speed(inode), fun: deta_speed(inode) = rmassm1(inode) *( - ff_spring(inode+1) + ff_spring(inode) - ff_dump(inode+1) + ff_dump(inode) ); >; @end example Note that the @code{inode} is dummy in the @code{var:} definition and can as well be written as: @code{var: eta_move(.)}. The transfers are (@code{ff_spring} corresponds with springs and @code{ff_dump} with dumps): @example !%%%%%%%%%%%%%%%%%%%%%% ! Transfer definition !%%%%%%%%%%%%%%%%%%%%%% ! node transfers ! -------------- ! convention de signe spring : comprime:= + set_node_Phi < var: ff_spring(.), fun: f_spring(inode)= -rk(inode)*(eta_move(inode) - eta_move(inode-1)); var: ff_dump(.), fun: f_dump(inode) = -rd(inode)*(eta_speed(inode) - eta_speed(inode-1)); >; @end example The limiting states and transfers are associated with the states or transfers with index @code{inode+1} or @code{inode-1} appearing in node cell and transfer equations (@code{inode-1} for down limiting conditions and @code{inode+1} for up limiting conditions) in their order of appearance. In our example, in the @code{eta_speed} state node equation @code{ff_spring(inode+1)} appears before @code{ff_dump(inode+1)} and is therefore associated with @code{ff_dummy_1} while @code{ff_dump(inode+1)} is associated with the @code{ff_dummy_2} limiting transfer, as @code{ff_dummy_1} appears before @code{ff_dummy_2} in the limiting up transfers definitions. Verification of the grid index coherence should be eased with the following help printed in the listing header: @example --------------- Informing on Dwn Eta definition --------------- Var-name, Function-name, index in eta vector eta_pos_wall deta_pos_wall 1 [ eta_speed_wall deta_speed_wall 2 [ -------------- Informing on Eta Nodes definition -------------- Var-name, Function, k2index of (inode: 0 [ 1,...n_node ] n_node+1) eta_move deta_move 1 [ 3 ... 7 ] 9 eta_speed deta_speed 2 [ 4 ... 8 ] 10 ---------------- Informing on Up Phi definition ------------- Var-name, Function-name, index in ff vector ff_dummy_1 f_dummy_1 ] 7 ff_dummy_2 f_dummy_2 ] 8 ff_move_sum f_move_sum ] 9 ff_speed_sum f_speed_sum ] 10 ---------------------------------------------------- -------------- Informing on Phi Nodes definition --------------- Var-name, Function, k2index of (inode: 0 [ 1,...m_node ] m_node+1) ff_spring f_spring -1 [ 1 ... 5 ] 7 ff_dump f_dump 0 [ 2 ... 6 ] 8 ---------------------------------------------------- @end example All variable names and functions are free but has to be different. Any particular node-attached variable @math{k} is referred to as: @samp{(inode:k)}, where @math{k} has to be a Fortran expression allowed in arguments. The symbol @samp{inode} is reserved. As usual other Fortran instructions can be written within the Mortran block @samp{< >} of each @code{set_} block. @node Double precision @section Double precision The default for real variables is the @code{real} Fortran type. It is possible to use double precision instead. In that case all the occurences of @samp{real@ } in mortran code is substituted with @samp{double precision@ } at precompilation stage, and the Lapack subroutine names are replaced by the double precision names. Eventual users'declaration of @code{complex@ } Fortran variables is also changed to @code{double complex@ }. This feature is turned on by @code{sel double} in @file{selseq.kumac} with cmz and @code{double = 1} in the @file{Makefile} with make. In order for the model to run as well in double as in simple precision, some care should be taken to use the generic intrinsic functions, like @code{sin} and not @code{dsin}. No numerical constant should be passed directly to subroutines or functions, but instead a variable with the right type should be used to hold the constant value, taking advantage of the implicit casts to the variable type. @node Partial Derivatives @section Partial Derivatives The partial derivative rules are included in a @code{Mortran} macro series in @file{Derive_mac} of @Minik{} files. When using an anusual function, one should verify that the corersponding rules are in that file. It is easy to understand and add new rules in analogy with the already existing ones. For instance, suppose one wants to use the intrinsic Fortran function @code{ abs()}. Its derivatives uses the other function @code{sign()} this way: @example &'(ABS(#))(/#)' = '((#1)(/#2)*SIGN(1.,#1))' @end example In such cases when one is adding a new rule, it is important to use the generic function names only (i.e. @code{sin} not @code{dsin}), because when compilating @Minik{} in the double precision version, or complex version, the generic names will correctly handle the different variable types - which is not the case when coding with specific function names. @menu * Derivating a power function:: @end menu @node Derivating a power function @subsection Derivating a power function Partial derivative of a function in exponent is not secure in its Fortran form @code{g(x,y)**(f(y))}. It should be replaced by @code{power(g,f)} of the @Minik{} @file{mathlib}, or by the explicit form @code{exp(f(y)*log(g(x,y)))}. Its derivative will have the following form: @ifset latex @c ***PBAl1 @tex \begin{equation} \partial_x f^g=g f^{g-1}\partial_x f + f^g \log f\partial_x g = f^{g-1}(g\partial_x f + f\partial_x g) \end{equation} @end tex @end ifset @ifclear latex @tex $$\eqalign{\partial_x f^g &= g f^{g-1}\partial_x f + f^g \log f\partial_x g\cr &= f^{g-1}(g\partial_x f + f\partial_x g)\cr}$$ @end tex @end ifclear and is in the macros list already defined in: @file{DERIVE_MAC}. @node Rule of programming non continuous models @section Rule of programming non continuous models Some models may originally be non continuous, as the ones using a Fortran instruction @code{IF}. Some may use implicitly a step function on a variable. In such cases, the model has to be set in a derivable form, and use a ``smooth step'' instead. One should be aware of that this apparently mathematical treatment currently indeed leads to a physical question about the macroscopic form of a physical law. At a macroscipic level, a step function is usually a nonsense. @cindex Heaviside function Taking the example of phase-change, a fluid volume does not change phase at once, and a ``smooth change of state'' is a correct macroscopic model. @Minik{} provides with the smooth step function @emph{Heavyside}@footnote{This naming is a joke for ``Inert'' Heaviside function.} in the @Minik{} @file{mathlib}: @example Delta = -1."K"; A_Ice = heavyside("in:" (T_K-Tf), Delta, "out:" dAIce_dT); @end example in this example, @code{Tf} is the ice fusion-temperature, @code{A_ice} gives the ice-fraction of the mesh-volume of water at temperature @code{T_k}. The smooth-step function is a quasi hyperbolic tangent function of @math{x/\Delta}, normalised from 0 to 1, with a maximum slope of 2.5, see figure @ref{heavy}. @float Figure, heavy @image{heavyside} @caption{Heaviside function and derivative} @end float @ignore @tex PBAl1 \begin{figure}[h] \psfig{figure=heavyside.ps,% bbllx=60pt,bblly=180pt,bburx=526pt,bbury=650pt,width=10cm,clip=} \caption{La fonction ``dompte'' de Heaviside et sa drive pour une variable adimensionne} \label{heavy} \end{figure} @end tex @end ignore For @code{Mortran} to be able to symbolicaly compute the partial derivarives, the rule is in the table of macros as: @example &'(HEAVYSIDE(#,#,#))(/#)' = '((#1)(/#4)*HEAVYDELTA(#1,#2,#3))' @end example which uses the Foratn entry point @code{HeavyDelta} in the Fortrsan function @code{heavyside}. Another type of problem arises when coding a @code{var=min(f(x),g(x))} Fortran instruction. In such a case one does not want a derivative and one will code: @example var = HeavySide(f(x)-g(x),Delta,dum)*g(x) + (1.-HeavySide(f(x)-g(x),Delta,dum)*f(x); @end example or equivalently: @example var = HeavySide(f(x)-g(x),Delta,dum)*g(x) + HeavySide(g(x)-f(x),-Delta,dum)*f(x); @end example @strong{Warning}: the value of the argument @var{Delta} is important because it will fix the maximum slope of the function that will appear as a coefficient in the Jacbian matrices. @node Parameters @section Parameters It is possible to specify some Fortran variables as specific model parameters. Model parameters may be used in sensitivity studies (@pxref{Sensitivity to a parameter}) and in the adjoint model (@pxref{Sensitivity of cost function to parameters}). Nothing special is done with parameters with Kalman filtering. @findex Free_parameter The parameters are fortran variables that should be initialized somewhere in @file{zinit}. For a variable to be considered as a parameter, it should be passed as an argument to the @code{Free_parameters} macro. For example if @code{apar} and @code{cpar} (from the predator example) are to be considered as parameters, @code{Free_parameters} should be called with: @example Free_parameter: apar, cpar; @end example @c Forward sensitivities are explained later (@pxref{Sensitivity to a parameter}), @c the syntax only is described here. When used with grid1d models (@pxref{1D gridded model,, Describing 1D gridded model}) the @code{inode} number may appear in parenthesis: @example Free_parameter: rd(1), rk(2); @end example @node Observations and data @section Observations and data Some support for observations and interactions with data is available. The observations are functions of the model variables. They don't have any action on the model result, but they may (in theory) be observed and measured. The natural use of these observations is to be compared with data that correspond with the values from real measurements. They are used in the Kalman filter (@pxref{Kalman filter}). The (model) observation vector is noted @math{\omega} @c FIXME is seems untrue? @c in this section ($\mu$ elsewhere, and the observation function is noted @math{h}: @tex $$ \omega = h ( \eta , \varphi) $$ @end tex @ifnottex @noindent @math{omega(t) = h(eta(t), phi(t))} @end ifnottex @menu * Observations:: * Data:: @end menu @node Observations @subsection Observations @vindex mobs The observation functions are set in a @code{set_probe} block in the @file{zinit} sequence. @cindex observation function @c FIXME doesn't exist anymore @c @defmac eqn: Obs_tef(@var{i}) = f(eta(.),ff(.)) @c This macro defines the observation equation as usual in a @code{set_block<}. @c @code{f} is a fortran @c expression which may be function of cell state variables, @c @samp{eta(1)}@dots{}@samp{eta(np)} and transfers @c @samp{ff(1)}@dots{}@samp{ff(mp)}, or of course their symbolic names. @c @end defmac For example suppose that, in the predator-prey model, we only have access to the total population of preys and predators, we would have: @example set_probe < eqn: pop = eta_pred + eta_pray; >; @end example @c it is always turned on, now @c The corresponding code is used with @code{sel obs} in @file{selseq.kumac} @c with cmz and @code{obs = 1} in @file{Makefile} with make. And the feature @c is turned on and off at run time with the logical flag @code{zobs} corresponding @c to an available data from measurement @c @vindex etaobs(.) @cindex @file{obs.data} The number of observations is put in the integer variable @code{mobs}. The observation vector corresponds with the part of the @code{ff(.)} array situated past the regular transferts, @code{ff(mp+.)}, and is output in the file @file{obs.data}. @c @vindex obetad(.,.) @c @vindex obephid(.,.) @c @vindex obspha(.,.) @node Data @subsection Data @vindex zgetobs @vindex vobs(.) @cindex @file{data.data} Currently this code is only used if the Kalman code is activated. This may be changed in the future. The convention for data is that whenever some data are available, the logical variable @code{zgetobs} should be set to @samp{.true.}. And the @code{vobs(.)} vector should be filled with the data values. This vector has the same dimension than the observation vector and each coordinate is meant to correspond with one coordinate of the observation vector. This feature is turned on by setting the logical variable @code{zdata} to @samp{.true.}, and the @code{zgetobs} flag is typically set in the @file{zsteer} sequence (@pxref{End of time step,,Executing code at the end of each time step}). Every instant data are available (@code{zgetobs} is true) the observations are written to the file @file{data.data}. With the Kalman filter more informations are output to the @file{data.data} file, see @ref{Kalman filter results}. @node Explicit model size @section Entering model size explicitely It is possible to enter the model dimensions explicitely, instead of generating them automatically, as it was done previously. This feature is turned on by @code{sel dimetaphi} in @file{selseq.kumac} with cmz and @code{dimetaphi} added to the @code{SEL} variable in the @file{Makefile} with make. @menu * Size sequence:: * Model with explicit size:: @end menu @node Size sequence @subsection The explicit size sequence @cindex dimetaphi @cindex model size @vindex np @vindex mp @vindex maxstep @cindex @file{dimetaphi} The dimension of the model is entered in the sequence @file{dimetaphi}, using the fortran @code{parameter np} for @code{eta(.)} and @code{mp} for @code{ff(.)}. For the Lotka-Volterra model, we have two cell components and only one transfer. @example parameter (np=2,mp=1); @end example You should not change the layout of the parameter statement as the mortran preprocessor matches the line. You also have to provide other parameters even if you don't have any use for them. If you don't it will trigger fortran errors. It includes the @code{maxstep} parameter that can have any value but 0, @code{lp} and @code{mobs} that should be 0 in the example, and @code{nxp}, @code{nyp} and @code{nzp} that should also be 0. The layout is the following: @example parameter (np=2,mp=1); parameter (mobs=0); parameter (nxp=0,nyp=0,nzp=0); parameter (lp=0); parameter (maxstep=1); @end example If there are observations, (@pxref{Observations}), the size of the observation vector is set in the @file{dimetaphi} sequence by the @code{mobs} parameter. For example if there is one observation: @example parameter (mobs=1); @end example To specify parameters (@pxref{Parameters}), the number of such parameters has to be declared in @file{dimetaphi} with the parameter @code{lp}. Then, if there are two parameters, they are first declared with @example parameter (lp=2); @end example @node Model with explicit size @subsection Entering the model equations, with explicit sizes @cindex model equations @findex Phi_tef(.) @findex deta_tef(.) @vindex eta(.), explicit sizes @vindex ff(.), explicit sizes When sizes are explicit, another possibility exists for entering the model equations. The use of symbolic names, as described in @ref{Model equations} is still possible, and it also becomes possible to set directly the equations associated with the @code{eta(.)} and @code{ff(.)} vectors. In case the symbolic names are not used, the model equations for cells and transfers are entered using a mortran macro, @code{f_set}@footnote{@code{fun_set}, or equivalently @code{f_set}, is a general mortran macro associating a symbol with a fortran expression. Here, it is the name of the symbol (@code{eta}) that has a particular meaning for the building of the model.}, setting the @code{eta(.)} evolution with @code{deta_tef(.)} and the transfer definitions @code{ff(.)} with @code{Phi_tef(.)}. @defmac f_set Phi_tef(@var{i}) = f(eta(.),ff(.)) This macro defines the transfer @var{i} static equation. @code{f} is a fortran expression which may be function of cell state variables, @samp{eta(1)}@dots{}@samp{eta(np)} and transfers @samp{ff(1)}@dots{}@samp{ff(mp)}. @end defmac In the case of the predator-prey model, the transfer definition for @math{\varphi_{meet}} is: @example f_set Phi_tef(1) = eta(1)*eta(2); @end example @defmac f_set deta_tef(@var{i}) = g(eta(@var{i}),ff(.)) This macro defines the cell state component @var{i} time evolution model. @code{g} is a expression which may be function of cell state variables, @samp{eta(1)}@dots{}@samp{eta(np)} and transfers @samp{ff(1)}@dots{}@samp{ff(mp)}. @end defmac The two cell equations of the predator-prey model are, with index 1 for the prey (@math{\eta_{prey}}) and index 2 for the predator (@math{\eta_{pred}}): @example f_set deta_tef(1) = apar*eta(1)-apar*ff(1); f_set deta_tef(2) = - cpar*eta(2) + cpar*ff(1); @end example The whole model is: @example !%%%%%%%%%%%%%%%%%%%%%% ! Transfer definition !%%%%%%%%%%%%%%%%%%%%%% ! rencontres (meeting) f_set Phi_tef(1) = eta(1)*eta(2); !%%%%%%%%%%%%%%%%%%%%%% ! Cell definition !%%%%%%%%%%%%%%%%%%%%%% ! eta(1) : prey ! eta(2) : predator f_set deta_tef(1) = apar*eta(1)-apar*ff(1); f_set deta_tef(2) = - cpar*eta(2) + cpar*ff(1); @end example The starting points for cells are entered like: @example ! initial state ! ------------- eta(1) = 1.; eta(2) = 1.; @end example If there are observations, they are entered as special transferts with index above @code{mp}, for example: @example f_set Phi_tef(mp+1) = ff(1) ; @end example @node Programming with cmz directives @section Programming with cmz directives @menu * Cmz directives used with @Minik{}:: * Using cmz directives in @Minik{}:: @end menu @node Cmz directives used with @Minik{} @subsection Cmz directives used with @Minik{} The main feature of cmz directive is to use code conditionnaly for a given select flag. For example when the double precision is selected (@pxref{Double precision}) the use of the conditionnal @code{double} flag may be required in case there is a different subroutine name for different types. If, for example, the user use the subroutine @code{smysub} for simple precision and @code{dmysub} for double precision the following code is an example of what could appear in the user code: @verbatim +IF,double call dmysub(eta); +ELSE call smysub(eta); +ENDIF @end verbatim For a complete reference on cmz directives see the appendix @ref{Cmz directives reference}. @node Using cmz directives in @Minik{} @subsection Using cmz directives in @Minik{} In cmz the KEEP and DECK have their cmz directives preprocessed as part of the source files extraction. And the +KEEP and +DECK directives are automatically set when creating the KEEP or DECK. With make, files with these directives has to be created within the files that are to be preprocessed by the cmz directives preprocessor. To be processed by make, a file that contains cmz directives should have a file suffix corresponding with the language of the resulting file and with the normal file suffix of that language. More precisely @samp{cm} should be added before the normal file suffix and after the @samp{.}. Therefore if the resulting file language is associated with a suffix @samp{.@var{suf}}, the file with cmz directives should have a @samp{.cm@var{suf}} suffix. The tradition is to have a different suffix for main files and include files. To add directories searched for @dfn{cmfiles} (files with cmz directives) they should be added to the @code{CMFDIRS} makefile variable, separated by @samp{:}. Rules for preprocessing of the files are defined in the file @file{Makefile.miniker} for the file types described in @ref{tab:cmfile_suffix}: @float table, tab:cmfile_suffix @multitable {fortran preprocessed} {include/keep} {cmfile suffix} {suffix} {language} @headitem language @tab file type @tab cmfile suffix @tab suffix @tab language @item fortran @tab main/deck @tab .cmf @tab .f @tab ftn @item fortran preprocessed @tab main/deck @tab .cmF @tab .F @tab f77 @item fortran preprocessed @tab include/keep @tab .cminc @tab .inc @tab f77 @item mortran @tab main/deck @tab .cmmtn @tab .mtn @tab mtn @item mortran @tab include/keep @tab .cmmti @tab .mti @tab mtn @end multitable @caption{Association between file language, file type, file suffixes and language identifier in cmz directives. A main file is called a @dfn{deck} in cmz and an include file is called a @dfn{keep}.} @end float @node Dynamic system analysis @chapter Dynamic analysis of systems in @Minik{} @menu * Sensitivities:: * Adjoint model and optimisation:: * Kalman filter:: * Feedback gain:: * Stability of fastest modes:: * Generalized TLS:: @end menu @node Sensitivities @section Automatic sensitivity computation @cindex sensitivities An obvious advantage of having acces to the Jacobian matrices along the system trajectory concerns automatic sensitivity analyses, as either: @itemize @bullet @item the sensitivity of all variables to perturbation in the initial condition of one state variable; @item the same sensitivities to an initial pulse (or step) on a transfer; @item the same sensitivities to a series of pulses (or steps) on a transfer; @item the same for a change in a parameter, eventually during the run; @item the sensitivity of the matrix of advance in state space to a change in a parameter. @end itemize This is declared in Zinit as: @example ! ------------- ! Sensitivities ! ------------- Sensy_to_var < var: eta_pray, pert: INIT; var: eta_pred, pert: INIT; >; @end example Each variable at origin of a perturbation is declared as @code{var:}, and the type of perturbation in @code{pert:}. Here, INIT conditions are only allowed because the two variables are states variables. For transfers, @code{pert: pulse} corresponds to an initial pulse, @code{pert: step_resp} and @code{pert: step_eff} to initial steps, the difference between @code{_resp} (response form) and @code{_eff} (effect form) concerns the diagonal only of the sensitivity matrix (see Feedback gains in non-linear models). Non initial perturbation can also be asked for: @example Sensy_to_var < !* var: eta_courant_L, pert: init at 100; !* var: ff_T_czcx, pert: pulse at 100 every 20; !* var: ff_Psi_Tczcx, pert: step_eff; !* var: ff_Psi_Tczcx, pert: step_Resp at 10 every 100; ! *** premiers tests identiques a lorhcl.ref var: ff_courant_L , pert: step_eff; var: ff_T_czcx , pert: step_eff; var: ff_Psi_Tczcx , pert: step_eff; var: ff_Psi_Tsz , pert: pulse at 100 every 50; >; @end example In this example taken from @file{lorhcl}, a sensitivity can increase so as to trespass the Fortran capacity, so that each sensitivity vector (matrix column) can be reset at some time-increment @code{at III every JJJ;} It is noteworthy that these sensitivity analyses are not based on difference between two runs with different initial states or parameter values, but on the formal derivatives of the model. This method is not only numerically robust, but is also rigorously funded as based on the TLS of the model@footnote{For a short introduction to automatic sensitivity analysis, see the document:@* @url{http://lmd.jussieu.fr/zoom/doc/sensibilite.ps}, in French, or ask for the more complete research document to a member of the TEF-ZOOM collaboration}. If the @code{dimetaphi} sequence is built by the users, he should declare the number of perturbing variables as @code{nxp=}: @example parameter (nxp=np,nyp=0,nzp=0); @end example here, all state variables are considered as perturbing variables. @cindex sensitivity, output @cindex output, sensitivity @cindex @file{sens.data} @cindex @file{sigma.data} The sensitivity vectors are output in the result files @file{sens.data} for cells and @file{sigma.data} for transfers. In those files the first column corresponds again with time, and the other columns are relative sensitivities of the cell states (in @file{sens.data}) and transfers (in @file{sigma.data}) with respect to the initial value of the perturbed state. In our predator-prey example, the second column of @file{sens.data} will contain the derivative of @math{\eta_1(t)} with respect to @math{\eta_1(t=0)}. Drawing the second column of @file{sens.data} against the first one gives the time evolution of the sensitivity of @code{eta-pred} to a change in the initial value of @code{eta-pray}. One can check in that it is set to 1 at @math{t=0}: @example # Sensy_to: eta_pray 3 eta_pred 5 # time \\ of: eta_pray eta_pred eta_pray eta_pred 0.00000E+00 1.00000E+00 0.00000E+00 0.00000E+00 1.00000E+00 1.00000E-02 9.90868E-01 1.11905E-02 -1.26414E-02 9.98859E-01 @end example The two last columns are the state sensitivity to a change in initial conditions of the number of predators. In the same way, the @var{j+1}th column of @file{sigma.data} will be the derivative of @math{\phi_{j}(t)} with respect to @math{\eta_i(t=0)}. Here: @example # Sensy_to: eta_pray eta_pred # time \\ of: ff_interact ff_interact 0.00000E+00 1.60683E+00 8.47076E-01 1.00000E-02 1.59980E+00 8.18164E-01 @end example the unique transfer variable gives rise to two sensitivity columns. Sensitivity studies are usefull to assess the predictability properties of the corresponding system. @menu @c * Initial state sensitivity:: @c * Sensitivity to a pulse or a step on transfer:: @c * Extended Sensitivity studies:: * Sensitivity to a parameter:: * Advance matrix sensitivity:: @end menu @node Sensitivity to a parameter @subsection Sensitivity to a parameter A forward sensitivity to a parameter will be computed when specified as described in @ref{Parameters}. For example, suppose that the sensitivity to an initial change in the @code{apar} parameter of the predator model is of interest. @c In that case the number of @c parameters should be set to 1 in @file{dimetaphi}: @c @c @example @c parameter (lp=2); @c @end example The sensitivity calculs is turned on as a forward parameter specified on the @code{Free_parameter} list: @example Free_parameter: [fwd: apar, cpar]; @end example The result are in @file{sensp.data} for cells and @file{sigmap.data} for transfers. @example # Sensy_to: pi_prandtl 3 4 pi_rayleigh_ 6 # time \\ of: eta_courant_ eta_T_czcx eta_T_sz eta_courant_ eta_T 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.000 2.00000E-03 -4.77172E-03 -3.99170E-05 3.55971E-05 -9.94770E-05 -1.004 @end example In the above example from @file{lorhcl} sensitivity of the three states with respect to an initial change in two parameters are independantly given (first line also numbers the column to easy gnuplot using). @node Advance matrix sensitivity @subsection Advance matrix sensitivity It is possible to look at the sensitivity of the matrix of advance in states space (the matrix @code{aspha}) with regard to a parameter. The parameter must be accounted for in the parameter number and be in the parameter list, flagged as the matrix @code{mx} parameter, like in @example Free_parameter: [mx: apar], cpar; @end example @vindex d_pi_aspha(.,.) This feature is associated with a selecting flag, @samp{dPi_aspha}. One gets the result in the matrix @code{d_pi_aspha(.,.)} of dimension (@code{np},@code{np}). This matrix may be used to compute other quantities, for example it may be used to compute the sensitivity of the eigenvalues of the state-advance matrix with regard to the @code{[fwd]} parameter. These additional computations have to be programmed by the user in @file{zsteer} with matrices declared and initialized in @file{zinit}. An example is given in the example @file{lorhcl} provided with the @Minik{} installation files, following a method proposed by Stephane Blanco. @node Adjoint model and optimisation @section Adjoint model and optimisation with @Minik{} In the following a possible use of @Minik{} for optimisation is discussed. More precisely the use of adjoint and control laws in @Minik{} are presented. Optimisation isn't the only application of these tools, but it is the most common one. In that case the adjoint may be used to determine the gradient of a functional to perturbations in the control laws, and an optimisation process can use this information to search for the optimum. Another application of the adjoint is to compute the sensitivity of a cost function to parameters (the ones declared in the @code{free_parameters:}' list. Note that the cost function can be sensitive to probe's variables, even if these are uncoupled with standard variables in the forward calculations; this is the case when minimizing a quadratic distance function between probes (from the model) and the corresponding measurements. The code is close transcription of the mathematical calculus described in@* @url{http://www.lmd.jussieu.fr/ZOOM/doc/Adjoint.pdf} . It essentialy reverse time and transpose the four Jacobian matrices: states and transfers are saved in array dimensionned with @code{maxstep} Fortran parameter. @menu * Overview of optimisation with @Minik{}:: * Control laws:: * Cost function coding and adjoint modeling:: * Sensitivity of cost function to parameters:: @end menu @node Overview of optimisation with @Minik{} @subsection Overview of optimisation with @Minik{} @cindex adjoint @cindex optimisation In the proposed method, @Minik{} is run twice, one time forward and then backward to determine the trajectory and the adjoint model. After that the control laws are modified by a program external to @Minik{}. The same steps are repeated until convergence. More pecisely, @table @strong @item forward The command law @math{h(t)} is given (by an explicit law or taken from a file). The trajectory is computed in a classical way, with the additionnal computation of the functional to be optimised, @math{J}, prescribed with specific @code{f_set} macros. The states, transfers and control laws are stored. @item backward The adjoint variable is computed from the last time @math{T} backward. The time increment is re-read as it could have changed during the forward simulation. The system is solved by using the same technics as in the forward simulation, but with a negative time step. @item external phase Now the command should be corrected. This step isn't covered here, but, for example, minuit the optimisation tool from the CERN could be used. In order to ease such a use of @Minik{}, the principal program has to be compiled as a subroutine to be driven by an external program (@pxref{Calling the model code}). @end table The functionnal @math{J} to be optimised is defined as @ifset latex @tex \begin{equation} J = \psi[\eta(T),\varphi(T) ,h(T)] + \int_0 ^T {l[\eta(\tau),\varphi(\tau),h(\tau)]}\, d\tau \end{equation} @end tex @end ifset @ifclear latex @tex $$ J = \psi[\eta(T),\varphi(T) ,h(T)] + \int_0 ^T {l[\eta(\tau),\varphi(\tau),h(\tau)]}\, d\tau $$ @end tex @ifnottex @noindent @math{J = psi(eta(T),phi(T),h(T)) + int_0^T l(eta(tau),phi(tau),h(tau)) d tau} @end ifnottex @end ifclear @cindex final cost @cindex integrand cost Where @math{\psi} is the final cost function, @math{l} is the integrand cost function and @math{h} represents the control laws variations. The general use of the adjoint model of a system is the determination of the gradient of this @math{J} functional to be optimised, with respect to perturbations of the original conditions of the reference trajectory, that is, along its GTLS@footnote{General Tangent Linear System, i.e. the TLS circulating along a trajectory. See the explanation in the document @url{http://www.lmd.jussieu.fr/Zoom/doc/Adjoint.pdf} (in French).}. @node Control laws @subsection Control laws @vindex zcommand @cindex command law Each control law is associated with one cell or transfer equation, meaning that a command associated with an equation does not appear in any other equation. It is still possible to add commands acting anywhere by defining a transfer equal to that command. The control laws associated with states are in the @code{ux_com(.)} array, control laws associated with transfers are in the @code{uy_com(.)} array. The control laws may be prescribed even when there is no adjoint computed, nor any optimisation, and they are used during simulation, in which case they will act as external sources. To enable the use of commands, the logical flag @code{Zcommand} should be @code{.true.}. @cindex @file{uxcom.data} @cindex @file{uycom.data} The command can be given either as: @enumerate @item a table of numerical values in the files @file{uxcom.data} and @file{uycom.data}. @item a function @vindex zlaw @cindex @file{zcmd_law} @cindex @file{zcmd_law.inc} of the problem variables. To turn that feature on the logical flag @code{Zlaw} should be set to @code{.true.} in @file{zinit}. The sequence @file{zcmd_law} should hold the code filling the @code{ux_com(.)} and @code{uy_com(.)} arrays, as the code from that sequence is used whenever the control laws are needed. In that case the files @file{uxcom.data} and @file{uycom.data} will be filled by the command values generated by the function along the trajectory. @end enumerate For example in the Lotka-Volterra model, the parameter @code{apar} could be a control variable. In that case, @code{apar} would be defined as the variable @code{ux_com(1)}, and either entered as a law in the sequence @file{zcmd_law} , either written in the file @file{uxcom.data} step by step. In that case, there must be a perfect corresponodence between time of the commands and time of the run. @node Cost function coding and adjoint modeling @subsection Cost function coding and adjoint modeling @vindex zback @findex cout_Psi @findex cout_l First of all the flag @code{zback} should be set to @code{.true.} in order to allow adjoint model computation: @example Zback=.true.; @end example The two functions @code{cout_Psi} corresponding with the final cost and @code{cout_l} corresponding with the integrand cost are set up with the @code{f_set} macros. @defmac f_set cout_Psi = f(eta(.),ff(.),ux_com(.),uy_com(.)) This macro defines the final cost function. @code{f} is a fortran expression which may be function of cell state variables, @samp{eta(1)}@dots{}@samp{eta(np)}, transfers @samp{ff(1)}@dots{}@samp{ff(mp)}, state control laws @samp{ux_com(1)}@dots{}@samp{ux_com(np)}, and transfer control laws @samp{uy_com(1)}@dots{}@samp{uy_com(mp)}. @end defmac @defmac f_set cout_l = f(eta(.),ff(.),ux_com(.),uy_com(.)) This macro defines the integrand cost function. @code{f} is a fortran expression which may be function of cell state variables, @samp{eta(1)}@dots{}@samp{eta(np)}, transfers @samp{ff(1)}@dots{}@samp{ff(mp)}, state control laws @samp{ux_com(1)}@dots{}@samp{ux_com(np)}, and transfer control laws @samp{uy_com(1)}@dots{}@samp{uy_com(mp)}. @end defmac For example, the following code sets a cost function for the masselottes model: @example ! Initialisation F_set cout_Psi = eta_move(inode:1); !and f_set cout_l integrand in the functionnal F_set cout_l = 0.; @end example In that example the functional is reduced to the final value of the first state component. Here, the adjoint vector will correspond to the final sensitivity (at @math{t=0}) of that component (here the first masselotte position) to a perturbation in all initial conditions@footnote{For detailed explanation of the adjoint model, see the document in @uref{http://www.lmd.jussieu.fr/@/ZOOM/doc/Adjoint.pdf,pdf} or @uref{http://www.lmd.jussieu.fr/@/ZOOM/doc/Adjoint.pdf,.ps.gz}}. @c In the code, the variables @code{v_adj(.)} and @code{w_adj(.)} @c are respectively adjoint to @code{eta(.)} and @code{ff(.)}. They are written in the @c two files: @file{vadj.data} and @file{wadj.data}. The following variables are set during the backward phase, and output in the associated files: @multitable {@code{gradufj(.)}} {@file{hamilton.data}} {time increment, hamiltonian, cost function increment} @headitem var @tab file @tab explanation @c @item @code{} @tab @file{.data} @tab @tab @item @code{v_adj(.)} @tab @file{vadj.data} @tab adjoint to @code{eta(.)} @item @code{w_adj(.)} @tab @file{wadj.data} @tab adjoint to @code{ff(.)} @item @code{wadj(mp+.)} @tab @file{gradmuj.data} @tab adjoint to @code{ff(mp+.)} @item @code{graduej(.)} @tab @file{gradxj.data} @tab adjoint to @code{ux_com(.)} @item @code{gradufj(.)} @tab @file{gradyj.data} @tab adjoint to @code{uy_com(.)} @item @code{hamilton} @tab @file{hamilton.data} @tab time increment, hamiltonian, cost function increment @end multitable @node Sensitivity of cost function to parameters @subsection Sensitivity of cost function to parameters @cindex @file{gradpj.data} The sensitivity of the cost function to all the parameters given as arguments of @code{Free_parameters} is computed. For the predator model the sensitivity of a cost function consisting in the integral of the predator population with respect with @code{apar} an @code{cpar} is obtained with a number of parameters set to 2 in @file{dimetaphi}: @example parameter (lp=2); @end example And the cost function and @code{Free_parameters} list in @file{zinit}: @example f_set cout_Psi = eta(2); f_set cout_l = eta(2); Free_parameters: apar,cpar; @end example @code{apar} and @code{cpar} also have to be given a value. The result is output in @file{gradpj.data}. @node Kalman filter @section Kalman filter @cindex Kalman filter @cindex variance-covariance matrices, general @cindex observations, general The Kalman filter allows for data assimilation along the model run. In that case it is assumed that there is a real-world model with stochastic perturbations on the states, and that noisy observations are available. The situation implemented in @Minik{} corresponds to a continuous stochastic perturbation on the state, and discrete noisy observations. In the @acronym{TEF} this leads to: @ifset latex @tex \begin{eqnarray} \partial_t \eta (t) &=& g(\eta(t),\varphi(t)) + W(t) \mu\\ \varphi(t) &=& f(\eta(t),\varphi(t))\\ \omega(t) &=& h ( \eta(t) , \varphi(t)) + \nu \end{eqnarray} @end tex @end ifset @ifclear latex @tex $$\eqalign{ \partial_t \eta (t) &= g(\eta(t),\varphi(t)) + W(t) \mu\cr \varphi(t) &= f(\eta(t),\varphi(t))\cr \omega(t) &= h ( \eta(t) , \varphi(t)) + \nu\cr }$$ @end tex @ifnottex @noindent @math{d eta(t)/d t = g(eta(t),phi(t)) + W(t) mu@* phi(i) = f(eta(t),phi(t))@* omega(t) = h(eta(t), phi(t)) + nu } @end ifnottex @end ifclear @c FIXME partout omega @c (notice that in this paragraph, $\omega$ stands for the probe vector $\mu$ elsewhere, @c and $\mu$ is here a noise source. The observations @math{\omega} are available at discrete time steps @math{t=s_i}. The stochastic perturbation on state, @math{\mu} is characterized by a variance-covariance matrix @math{Q} and the noise on the observation, @math{\nu} has a variance-covariance matrix @math{R}. @math{W} relates states with stochastic perturbations. At each time step the Kalman filter recomputes an estimation of the state and the variance-covariance matrix of the state. In the following we use the example of a linear model with perturbation on state and observation of state. The model has 3 states and 3 corresponding transfers (equal to the states), but the error on the state is of dimension 2. The 3 states are observed. The corresponding equations read: @ifset latex @tex \begin{equation} \left\{ \begin{array}{cc} \partial_t \eta_1 =& a_{11} \eta_1 + a_{12} \varphi_2 + a_{13} \varphi_3 + W_{11} \mu_1 + W_{12} \mu_2\\ \partial_t \eta_2 =& a_{21} \varphi_1 + a_{22} \eta_2 + a_{23} \varphi_3 + W_{21} \mu_1 + W_{22} \mu_2\\ \partial_t \eta_3 =& a_{31} \varphi_1 + a_{32} \varphi_2 + a_{33} \eta_3 + W_{31} \mu_1 + W_{32} \mu_2 \end{array} \right. \end{equation} \begin{equation} \left\{ \begin{array}{cc} \varphi _1 =& \eta _1\\ \varphi _2 =& \eta _2\\ \varphi _3 =& \eta _3 \end{array} \right. \end{equation} \begin{equation} \left\{ \begin{array}{cc} \omega _1 =& \varphi _1 + \nu_1\\ \omega _2 =& \eta _2 + \nu_2 \\ \omega _3 =& \eta _3 + \nu_3 \end{array} \right. \end{equation} @end tex @end ifset @ifclear latex @tex $$\left\{\eqalign{ \partial_t \eta_1 &= a_{11} \eta_1 + a_{12} \varphi_2 + a_{13} \varphi_3 + W_{11} \mu_1 + W_{12} \mu_2\cr \partial_t \eta_2 &= a_{21} \varphi_1 + a_{22} \eta_2 + a_{23} \varphi_3 + W_{21} \mu_1 + W_{22} \mu_2\cr \partial_t \eta_3 &= a_{31} \varphi_1 + a_{32} \varphi_2 + a_{33} \eta_3 + W_{31} \mu_1 + W_{32} \mu_2 }\right.$$ $$\left\{\eqalign{ \varphi _1 &= \eta _1\cr \varphi _2 &= \eta _2\cr \varphi _3 &= \eta _3 }\right.$$ $$\left\{\eqalign{ \omega _1 &= \varphi _1 + \nu_1\cr \omega _2 &= \eta _2 + \nu_2 \cr \omega _3 &= \eta _3 + \nu_3 }\right.$$ @end tex @ifnottex Cells:@* @noindent @math{d eta_1/dt = a_11 eta_1 + a_12 phi_2 + a_13 phi_3 + W_11 mu_1 + W_12 mu_2@* d eta_2/dt = a_21 phi_1 + a_22 eta_2 + a_23 phi_3 + W_21 mu_1 + W_22 mu_2@* d eta_3/dt = a_31 phi_1 + a_32 phi_2 + a_33 eta_3 + W_31 mu_1 + W_32 mu_2} Transfers:@* @noindent @math{phi_1 = eta_1@* phi_2 = eta_2@* phi_3 = eta_3} Observations:@* @noindent @math{omega_1 = phi_1 + nu_1@* omega_2 = eta_2 + nu_2@* omega_3 = eta_3 + nu_3} @end ifnottex @end ifclear @menu * Coding the Kalman filter:: * Kalman filter run and output:: * Executing code after the analysis:: @end menu @node Coding the Kalman filter @subsection Coding the Kalman filter @vindex zkalman First of all the Kalman filter code should be activated. The observations code is also required (@pxref{Observations}). If cmz is used the code should be selected with the select flag kalman in the @file{selseq.kumac}: @example sel kalman @end example With make the @code{kalman} variable should be set to 1: @example kalman = 1 @end example The kalman code is actually used by setting the flag @code{zkalman} to @code{.true.}, for example in the @file{zinit}: @example zkalman = .True.; @end example @c This will set the @code{zobs} and @code{zdata} flags to @code{.true.} @c (@pxref{Observations and data}). With the Kalman filter the dimension of estimated states, of the error on the state and of the observation, the @math{W} matrix, the observation function, the initial variance-covariance matrices on the state and the variance-covariance matrices of errors have to be given. @menu * Kalman filter vectors dimensions:: * Error and observation matrices:: @end menu @node Kalman filter vectors dimensions @subsubsection Kalman filter vectors dimensions @cindex error vector dimension @cindex @file{dimetaphi}, Kalman filter These dimensions should be set in the @file{zinit} sequence. The size of the estimated states is given by the parameter @code{nkp}. You can set this to @code{np} if all the states are estimated, but in case there are some deterministic state variables, @code{nkp} may be less than @code{np}. In that case the first @code{nkp} elements of @code{eta(.)} will be estimated using the Kalman filter. The error on state dimension is associated with the parameter @code{nerrp} and the size of the observations vector is @code{mobs} (@pxref{Observations}). In our example the dimensions are set with: @example parameter (nkp=np); parameter (mobs=3); parameter (nerrp=2); @end example All the states are estimated, there are 3 observation functions and the error on the state vector is of dimension 2. If the sizes are set explicitely, the parameters should be set in @file{dimetaphi}. @node Error and observation matrices @subsubsection Error and observation matrices @cindex variance-covariance matrices @cindex observations @cindex @file{zinit}, Kalman filter @subsubheading Initial variance-covariance matrix on the state @cindex initial variance-covariance on states @vindex covfor(.,.) The variance-covariance on the state matrix is @code{covfor(.,.)}. The initial values have to be given for this matrix, as in our example: @example covfor(1,1) = 1000.; covfor(1,2) = 10.; covfor(1,3) = 10.; covfor(2,1) = 10.; covfor(2,2) = 5000.; covfor(2,3) = 5.; covfor(3,1) = 10.; covfor(3,2) = 5.; covfor(3,3) = 2000.; @end example This matrix is updated by the filter at each time step because the states are pertubated by some noise, and when assimilation takes place as new information reduce the error. @subsubheading Observations and error on state matrix @cindex variance-covariance matrix on state @vindex mereta(.,.) The matrix that relates errors on states vector components to states, corresponding with @math{W} is @code{mereta(.,.)}. In our example it is set by: @example mereta(1,1) = 1.; mereta(1,2) = 0.; mereta(2,1) = 0.; mereta(2,2) = 1.; mereta(3,1) = 0.5; mereta(3,2) = 0.5; @end example The observation functions are set by a @code{f_set} macro with @code{Obs_tef(.)} as described in @ref{Observations}. In our example the observation functions are set by: @example f_set Obs_tef(1) = ff(1) ; f_set Obs_tef(2) = eta(2); f_set Obs_tef(3) = eta(3); @end example @subsubheading Error variance-covariance matrices @cindex variance-covariance error @vindex covobs(.,.) The variance-covariance matrix on observation noise is @code{covobs(.,.)} set, in our example, by: @example covobs(1,1) = 0.3; covobs(1,2) = 0.; covobs(1,3) = 0.; covobs(2,1) = 0.; covobs(2,2) = 0.1; covobs(2,3) = 0.; covobs(3,1) = 0.; covobs(3,2) = 0.; covobs(3,3) = 0.2; @end example @vindex coveta(.,.) The variance-covariance matrix on state noise is @code{coveta(.,.)} set, in our example, by: @example coveta(1,1) = 0.2; coveta(1,2) = 0.001; coveta(2,1) = 0.001; coveta(2,2) = 0.1; @end example These matrices are not changed during the run of the model as part of the filtering process. They may be changed by the user in @file{zsteer}. @node Kalman filter run and output @subsection Kalman filter run and output @menu * Feeding the observations:: * Kalman filter results:: @end menu @node Feeding the observations @subsubsection Feeding the observations to the model @vindex vobs(.) @vindex zgetobs @cindex @file{zsteer}, Kalman filter The observations must be made available to the model during the run. These observations are set in the @code{vobs(.)} array, and the assimilation (also called the analysis step of the filter) takes place if the logical variable @code{zgetobs} is @code{.true.} (@pxref{Data}). These steps are typically performed in the @file{zsteer} sequence. In this sequence there should be some code such that when there are data ready to be assimilated, @code{zgetobs} is set to @code{.true.} and the data is stored in @code{vobs(.)}, ready for the next step processing. @node Kalman filter results @subsubsection Kalman filter results @cindex results, Kalman filter @cindex Kalman filter results @cindex output, Kalman filter @cindex Kalman filter output @cindex @file{data.data} The estimated states and transfers are still in the same @samp{.data} files, @file{res.data} and @file{tr.data} and there is the additional file with observations, called @file{obs.data} (@pxref{Observations}). Each time @code{zgetobs} is @code{.true.} the data, and the optimally weighted innovations are output in the file associated with data, @file{data.data} (@pxref{Data}). @node Executing code after the analysis @subsection Executing code after the analysis The analysis takes place before the time step advance when @code{zgetobs} is @code{.true.}. It may be usefull to add some code after the analysis and before the time step advance. For example the analysis may lead to absurd values for some states or parameters, it could be usefull to correct them in that case. The sequence included after the analysis is called @file{kalsteer}. At this point, in addition to the usual variables the following variables could be usefull: @vtable @code @item etafor(.) The state before the analysis. @item kgain(.) The Kalman gain. @item innobs(.) The innovation vector (observations coherent with the states minus data values). @item covana(.,.) The variance-covariance error matrix after the analysis. @end vtable At each time step the derivative of the observation function with respect to transfer and cells variables are recomputed. The elimination of transfers is also performed to get the partial derivative of the observation function of the equivalent model, with states only, with respect to the states. In other words, the Kalman filter does not follow the TEF formalism, because the advance of the var-covar matrix could not yet be set in the TEF form. @c There is a corresponding additional matrix: @vtable @code @c @item obetad(.,.) @c derivative of observation function with respect to transfers. @c @item obphid(.,.) @c derivative of observation function with respect to cell variables. @item obspha(.,.) derivative of observation function in state space with respect to cell variables. @end vtable @node Feedback gain @section Feedback gain @cindex Borel sweep @cindex Feedback gain The feedback dynamic gain associated with a feedback loop can be expressed as the inverse Borel transform of the coefficient of the reduced scalar coupling matrix, @math{g(\tau)}, associated with a transfer. A Borel sweep provides this @math{g(\tau)}. Therefore it is an interesting tool for the characterization of the feedback loop@footnote{ More generally, the Borel sweep allows the numerical study of the dependency in @math{\tau} of the Borel transform of various coefficients in the system coupling matrix.}. As explained in the ZOOM web page document @url{http://www.lmd.jussieu.fr/@/ZOOM/doc/@/Feedback_Gain.pdf}, this allows for the calculation of the dynamic gain and factor of any feedback that goes through a unique transfer variable. An example of the conclusions that can be drawn from such an analysis is provided in the same document. @ignore The Borel sweep allows the numerical study of the dependency in @math{\tau} of the Borel transform of various coefficients in the system coupling matrix. For example, the coefficient @math{g(\tau)} of the reduced scalar coupling matrix associated with a transfer defines a feedback gain. @end ignore For linear systems -- whose GTLS are autonomous along the whole trajectory -- the @math{\tau} function of the feedback gain is independent of the position on the system trajectory. But in general it is dependant, and one can analyse the function @math{g(\tau;t)} defined on a segment @math{t} of the trajectory. The document introducing the TEF-ZOOM technique explains how a Crank-Nicolson scheme for the time discretisation symbolically gives the solution of the Borel transform of the system. One can identify the @code{dt} variable with the Borel @math{\tau} within a factor @math{2}. Hence, to numerically study the @math{\tau} dependency of the transform of various coefficients in the system coupling matrix at one point in time, one can calculate the Borel transform of the TLS solutions by making a time-step sweep. The function @math{g(\tau;t)} is simply output for the feedback gain attached to a unique @code{ff(k)} transfer variable. All the relevant informations should be entered in the @file{zinit} sequence. @menu * Specifying the Borel sweep:: * Borel sweep results:: @end menu @node Specifying the Borel sweep @subsection Specifying the Borel sweep @vindex ZBorel First of all the logical flag @code{ZBorel} should be raised: @example ZBorel=.true.; @end example @vindex index_ff_gain The index of the studied transfer is given in the @code{index_ff_gain} variable @example index_ff_gain=7; @end example At each time step a Borel sweep may be performed. The time steps of interest are specified with three variables, one for the first step, one for the last step and one for the number of steps between two Borel sweeps: @vtable @code @item istep_B_deb First time step for the Borel sweep. @item istep_B_fin Last time step for the Borel sweep. @item istep_B_inc Number of time steps between Borel sweeps. @end vtable In the following examples Borel sweeps are performed from the time step 1000 up to the time step 1200, with a sweep at each time step: @example istep_B_deb=1000; istep_B_fin=1200; istep_B_inc=1; @end example For each Borel sweep, the range of the @math{\tau} variable should be set. As this is a multiplicative variable the initial value, a multiplicative factor and the number of values are to be given. @vtable @code @item tau_B_ini Initial value for @math{\tau}. @item tau_B_mult Multiplicative factor for sweep in @math{tau}. @item itau_max Number of @math{\tau} values. @end vtable For example, in the following, at each time step, the Borel transform will be computed for @math{\tau} values starting at @math{0.2} and then multiplied a hundred times by @math{\sqrt{\sqrt{2}}} @example tau_B_ini=0.2; tau_B_mult=sqrt(sqrt(2.)); itau_max=100; @end example When the initial value of @math{\tau} is set to a negative value (@i{i.e.} @code{tau_B_ini=-0.2;}), the Borel sweep will first be applied with @code{itau_max} negative values for @code{-0.2}, @code{tau_B_mult*(-0.2)},..., then for the zero value, and finally for the symetric positive values, resulting in @code{2*itau_max+1} values for @math{\tau}. The whole example reads @example ! ------------------- ! Feedback gain ! Borel ! ------------------- ZBorel=.true.; if ZBorel < istep_B_deb=1000; istep_B_fin=1200; istep_B_inc=1; ; index_ff_gain=7; tau_B_ini=0.2; tau_B_mult=sqrt(sqrt(2.)); itau_max=100; z_pr/Borel/:tau_B_mult,tau_B_ini*(tau_B_mult)**itau_max; >; @end example @findex zborel for Instead of using the index of the transfer in @code{index_ff_gain} it is possible to specify the name of the transfer.@c , whenever @c the symbolic model description is used (@pxref{Symbolic model description}). In that case the transfer is specified by the @code{zborel for} macro. For example if the transfer selected for the feedback gain computation is @var{b_transfer}, it can be selected with: @example zborel for: @var{b_transfer}; @end example @node Borel sweep results @subsection Borel sweep results @cindex Borel sweep results @cindex results, Borel sweep @cindex Borel sweep graphics @cindex graphics, Borel sweep The file @file{tau_Borel.data} gives the @math{\tau} values of the @var{tau} sweep, and the file @file{gains.data} records the feedback gain function values of @math{g(\tau)}, with one line for each sweep along the trajectory. In the 1.01 version, a new feature is also provided giving the poles and residuals of the Borel transform in the file @file{vpgains.data}. Consult the subroutine @code{Boreleig} for (not definitive) output description. One can easily obtain the surface contours of @math{g(t,\tau)} using the Fortran program provided as @file{gains.f} and its compilation shell @file{gains.xqt}, that builds 2D histograms for PAW, in which one uses the @file{borels.kumac} provided kumac. @node Stability of fastest modes @section Stability analysis of fastest modes @cindex SVD @cindex Singular Value Decomposition @cindex state matrix @cindex @file{sltc.exe} The preceding analyses are done along with a simulation. One has also the possibility of using in a more classical fashion the state advance matrix @math{A_{st}}, after the end of the simulation. Code to perform the @acronym{SVD, Singular Value Decomposition} of the state matrix @math{A_{st}} and also of @math{A_{st} + A_{st}^\dagger} is provided with @Minik{}. The singular elements of these two matrices correspond to the most rapid modes of instability of the perturbed system. The Singular value decomposition of a matrix is noted @tex $$ U w V^\dagger $$ @end tex @ifnottex @noindent @math{U w V^t} @end ifnottex An executable file, @file{sltc.exe} is generated and running this file will produce the corresponding results. @menu * SVD with cmz:: * SVD with make:: * SVD run and output:: @end menu @node SVD with cmz @subsection Singular Value Decomposition with cmz @cindex @command{smod} The cmz macro @code{smod SLTC} prepares a main program (@file{circul} of +PATCH SLTC), provided as a base for user's own analysis, in the directory @file{sltc/}. @node SVD with make @subsection Singular Value Decomposition with make @cindex @file{Makefile.sltc} To compile the singular value decomposition executable with @command{make} you can do @example make sltc.exe @end example If you want to have a separate directory for the SVD, you should copy the sequence @file{dimetaphi.inc} (or make a link to that file) to the directory. You should also copy the file @file{Makefile.sltc} from the @file{template/} directory in this directory, rename it @file{Makefile} and set the @Minik{} directory path in the @code{miniker_dir} variable. For example, if the @Minik{} directory is in @file{/u/src/mini_ker}: @example miniker_dir = /u/src/mini_ker @end example @node SVD run and output @subsection Singular Value Decomposition run and output @cindex SVD run @cindex run, SVD @cindex SVD output @cindex output, SVD @cindex @file{sltc.exe} @cindex @file{title.tex}, SVD @cindex @file{aspha.data}, SVD As it is, the @file{sltc.exe} executable generated by the compilation determines the SVD. This program requires @file{title.tex} (@pxref{Title file}) to transmit a title for output and graphics, and @file{aspha.data} (@pxref{Simulation and output,,Running a simulation and using the output}) to access the state matrix. To get access to these files (in case they are not in the current directory) it is possible to make a link to the corresponding files in the model directory. Once it is done the program may be run: @example ./sltc.exe @end example The files @file{u.data}, @file{w.data}, and @file{v.data} holds the singular elements for @math{A_{st}} (@math{U}, @math{w} and @math{V}), and @file{us.data}, @file{ws.data}, and @file{vs.data} holds the singular elements of @math{A_{st} + A_{st}^\dagger}. The corresponding macros @samp{.kumac} for PAW@footnote{Explanation in the research paper about SLTC (Al1 2003) available on request.} are also generated. @node Generalized TLS @section Generalized linear tangent system analysis @cindex Generalized linear tangent system @cindex GTLS @cindex propagator @cindex Lyapunov exponents @cindex @file{sltcirc.exe} The state matrix @math{A_{st}} may also be used to compute the GTLS propagator (or state transition matrix applied to perturbation), after the simulation. The algorithm is a finite product of 5th order development of @math{\Phi(t+\delta t,t)=\exp{A_{st} \delta t}}. Numerous element of analysis are given, in particular the determination of the Lyapunov exponents of the system. An executable file, @file{sltcirc.exe} is generated and running this file will produce the corresponding results. @menu * GTLS with cmz:: * GTLS with make:: * GTLS run and output:: @end menu @node GTLS with cmz @subsection Generalized tangent linear system with cmz @cindex @command{smod} The cmz macro @code{smod SLTCIRC} prepares a main program (@file{circule} of +PATCH SLTCIRC), in the directory @file{sltcirc/}. @node GTLS with make @subsection Generalized tangent linear system with make @cindex @file{Makefile.sltcirc} To compile the GTLS analysis executable with @command{make} you can do @example make sltcirc.exe @end example If you want to have a separate directory for the GTLS analysis, you should copy the sequence @file{dimetaphi.inc} (or make a link to that file) to the directory. You should also copy the file @file{Makefile.sltcirc} from the @file{template/} directory in this directory and rename it @file{Makefile} and set the @Minik{} directory path in the @code{miniker_dir} variable. @node GTLS run and output @subsection Generalized tangent linear system analysis run and output @cindex GTLS run @cindex run, GTLS @cindex GTLS output @cindex output, GTLS @cindex @file{sltcirc.exe} @cindex @file{title.tex}, GTLS @cindex @file{dres.data}, GTLS @cindex @file{aspha.data}, GTLS The @file{sltcirc.exe} executable generated by the compilation computes the elements of analysis of the system. This program requires @file{title.tex} to transmit a title for output and graphics (@pxref{Title file}), @file{aspha.data} to access the state matrix and @file{dres.data}, because time-step can be changed along the simulation (@pxref{Simulation and output,,Running a simulation and using the output}) @footnote{cf our research texts about propagator analyses in SLTC, and ``les Gains sur champs (Al1 2003-2004)''}. To get access to these files (in case they are not in the current directory) it is possible to make a link to the corresponding files in the model directory. Once it is done the program may be run: @example ./sltcirc.exe @end example The following table gives the correspondence between variable name, result file and ntuple number, with a short explanation: @multitable {@code{lwr(.,.)}} {@file{wlphit.data}} {ntuple} {eigen factors of @math{w} in the SVD of @math{\Phi}} @headitem var @tab file @tab ntuple @tab explanation @item @code{p(.,.)} @tab @file{phit.data} @tab 55 @tab propagator from 0 to @math{t}, @math{\Phi(t,0)} @item @code{up(.,.)} @tab @file{uphit.data} @tab 50 @tab Left singular vectors @math{U} in the SVD of @math{\Phi} @item @code{wp(.)} @tab @file{wphit.data} @tab 51 @tab singulat values @math{w} in the SVD of @math{\Phi} @item @code{vp(.,.)} @tab @file{vphit.data} @tab 52 @tab Right Singular Vectors @math{V} in the SVD of @math{\Phi} @item @code{wr(.)} @tab @file{wr.data} @tab 53 @tab real part of eigen values of @math{\Phi(t,0)} @item @code{wi(.)} @tab @file{wi.data} @tab 54 @tab imaginary part of eigen values of @math{\Phi(t,0)} @item @code{lwp(.)} @tab @file{lwphit.data} @tab 67 @tab Lyapunov exponents @c @item @code{lwr(.,.)} @tab @file{lwr.data} @tab 68 @tab @c @item @code{lwi(.,.)} @tab @file{lwi.data} @tab 69 @tab @c @item @code{} @tab @file{.data} @tab @tab @end multitable @ignore ntuple # var name --------------------------------------------------------------------- uphit.data 50 up SVD of Phit wphit.data 51 wp = U[w_diag]V' vphit.data 52 vp wr.data 53 wr[i] eigen factors wi.data 54 wi real and imaginary parts --------------------------------------------------------------------- lphit.data 65 lp[ij] 1/t Ln Phit + 1/LnDetPhit, ulphit.data 60 ulp SVD of 1/t LnPhit wlphit.data 61 wlp vlphit.data 62 vlp wrl.data 63 wrl[i] VP of 1/t LnPhit wil.data 64 wil --------------------------------------------------------------------- lwphit.data 67 lwp[i] 1/t Ln w : Phit=UwV' lwr.data 68 lwr 1/t VP de UV' lwi.data 69 lwi --------------------------------------------------------------------- The bloc 60-65 contains the elements of analysis of the propagator when it is assimilated to the autonomous system such that @math{\Phi(t,0)=\exp{At}}, where @math{A} is a state matrix of an autonomous system giving the same sensitivity to perturbation at time @math{t}. Last bloc 67-69 gives the Lyapunov exponents along with their corresponding eigen vectors. @end ignore @node Advanced use of @Minik{} with make @chapter Advanced use of @Minik{} with make @menu * Make variables:: * Rules:: * Linking rule:: @end menu @node Make variables @section Make variables @cindex @file{Makefile.miniker} The @file{Makefile.miniker} Makefile provided in the distribution should be included as it defines a lot of important variables and rules. The following make variables can be set by the user: @table @code @item miniker_dir that variable should hold the @Minik{} sources directory. If you installed @Minik{} that variable should be set to @file{$(includedir)/mini_ker}. If you use the sources right from the sources directory it should be set to the sources package directory. @item MTNDIRS This variable can hold a @samp{:} delimited list of directories that will be searched for mortran include files. @item CMFDIRS This variable can hold a @samp{:} delimited list of directories that will be searched for cmz directive include files. @item SEL This variable holds a @samp{,} delimited list of select flags, for example @code{monitor}, @code{grid1d}, @code{debug}. @item LDADD This variable can be used to add libraries flags and files. It is used in the default linking command/rule. @item miniker_user_objects This variable should hold a space separated list of additional object files to be linked with the model and helper object files. @item CAR2TXTFLAGS cmz directives preprocessor flag. @item kalman This variable should be set to 1 if you want to use the kalman filter (@pxref{Kalman filter}). @item double This variable should be set to 1 if you want to have a double precision code (@pxref{Double precision}). @end table The following variables are allready set and may be used (some are set by ./configure see @ref{Configuration}): @table @code @item miniker_principal_objects The list of object files needed for the model build, together with some helper object files often used but not strictly required for the linking. @item DEPDIR The name of a hidden directory containing the dependencies computed for the main mortran files. @itemx F77 @itemx FC @itemx FFLAGS @item LDFLAGS Compiler and linker related variables set by ./configure. @item LIBS This variable should hold the link flags and files required to build @Minik{}, set by ./configure. @item CAR2TXT @itemx MORTRAN @itemx MTNFLAGS @itemx MTNDEPEND Preprocessor and preprocessor flags, set by ./configure. @end table @node Rules @section Rules The following rules are defined in the @file{Makefile.miniker} file. @table @code @item miniker-clean remove the fortran files generated from the mortran files. Remove the object files. @item miniker-mtn-clean remove the mortran files generated from the files with cmz directives. @item Various rules to preprocess files with cmz directives and mortran files and to compile fortran files. @end table If the user needs a mortran main file, he may take advantage of the rule used to compute the dependencies of a mortran file. If the file is called, say, @file{mtnfile.mtn} leading to @file{mtnfile.f}, the following include should lead to the automatic creation, updating and inclusion of a file describing the dependencies of @file{mtnfile.mtn} in the @file{Makefile}: @example include $(DEPDIR)/mtnfile.Pf @end example @node Linking rule @section Linking rule The rule used for the linking of the model file is not in the @file{Makefile.miniker} file but should be provided in the user @file{Makefile} for more flexibility. The default rule uses the variables @code{miniker_user_objects} for additional object files and @code{LDADD} for additionnal linking flags and files, those variables are there to be changed by the user. The object files required by the @Minik{} code are in the make variable @code{miniker_principal_objects}, this variable is also used. The value of the variables @code{FC} for the Fortran compiler, @code{FFLAGS} for the Fortran compiler flags and @code{LDFLAGS} for the linker flags should be set to right values; @code{LIBS} should also be right and hold the link flags and link files required to compile the @Minik{} model. These variables are set by by @command{./configure} during configuration (@pxref{Configuration}) and used in the default rule: @verbatim $(model_file): $(miniker_user_objects) $(miniker_principal_objects) $(FC) $(FFLAGS) $(LDFLAGS) $^ $(LDADD) $(LIBS) -o $@ @end verbatim In case this isn't right it may be freely changed. You should certainly refer to the @ref{Top,,Top,make,GNU Make Manual} manual to understand what that rule exactly means and make your own. @node Concepts index @unnumbered Concepts index @printindex cp @node Variables macros and functions index @unnumbered Variables, macros and functions index @printindex vr @node Installation @appendix Installation @menu * Programming environments:: * Common requisites:: * @Minik{} with cmz:: * @Minik{} with make:: @end menu @node Programming environments @appendixsec Programming environments @cindex Programming environments @Minik{} is not a traditionnal software in that it isn't a library or an interpreter but rather a set of source and macro file that combines with the user model code and enable to build a binary program corresponding with the model. It requires a build environment with a preprocessor, a compiler and facilities that automate these steps. Two different environment are proposed. One use @command{cmz} (@url{http://wwwcmz.web.cern.ch/@/wwwcmz/index.html}), while the other is based on @command{make}. Other libraries are needed, the CERN Program Library (cernlib) and lapack. @node Common requisites @appendixsec Common requisites @cindex cernlib @cindex lapack Whatever method is used a fortran 77 compiler is required. The compilers that have been used so far are g77, gfortran and the sun solaris compiler. When usng CMZ, the CERN Program Library, available at @url{http://wwwasd.web.cern.ch/@/wwwasd/cernlib/}, has to be installed. With make, internal source files copied from the cernlib may be used instead but then some examples won't be available, since they rely on some mathematical functions provided by the CERN library. On windows, in case you want to use the compiler from the GNU compiler collection with cygwin or MINGW/MSYS you can use the binaries provided at @url{http://zyao.home.cern.ch/@/zyao/cernlib.html}. On Mac OS X, the cernlib provided by fink (package @code{cernlib-devel}) can be used. You should also have LAPACK, available at @url{http://www.netlib.org/@/lapack/}. LAPACK can also be installed as part of the CERN Library or as part of the @uref{ATLAS,http://math-atlas.sourceforge.net/} implementation. On most linux distributions a lapack package is available. On Mac OS X, the ATLAS implementation provided by fink or the frameworks from Xcode can be used. @node @Minik{} with cmz @appendixsec @Minik{} with cmz @cindex @file{mini_ker.cmz} @cindex @file{selseq.kumac} First of all you have to get the cmz file @file{mini_ker.cmz} and put it in a directory. In that same directory you should create a directory for each of your models. In the model directory you should copy the file @file{selseq.kumac} available with @Minik{}, and create your own cmz file for your model, called for example @file{mymodel.cmz}. You should also have installed the kumac macro files handling mortan compilation, the associated shell scripts and the mortran preprocessor. @node @Minik{} with make @appendixsec @Minik{} with make @menu * Additional requirements:: * Configuration:: * Installation with make:: @end menu @node Additional requirements @appendixsubsec Additional requirements for @Minik{} with make @cindex @command{mortran}, with make @cindex requirements, with make The package has been tested with GNU @command{make} and solaris @command{make}. Suitable preprocessors should also be installed. Two preprocessors are required, one that preprocess the cmz directives, and a mortran preprocessor. A cmz directives processor written in @command{perl}, is distributed in the @command{car2txt} package available at @value{myurl}. A @command{mortran} package with a command able to preprocess a mortran file given on the command line with a syntax similar with the @command{cpp} command line syntax is also required. Such a mortran is available at @value{myurl}. @c All the @command{make} commands are not suitable, for example the distribution @c doesn't work with solaris @command{make}. GNU @command{make} works, however, @c and should be available on most platforms, often called @command{gmake}. @node Configuration @appendixsubsec Configuration @cindex configuration of source The package is available at @value{myurl}. It is available as a compresssed tar archive. On UNIX, with GNU @command{tar} it may be unpacked using @example $ tar xzvf mini_ker-@value{VERSION}.tar.gz @end example The detection of the compiler, the preprocessors (car2txt and mortran), and the libraries are performed by the configure script. This script sets the apropriate variables in makefiles. It can be run with: @example $ cd mini_ker-@value{VERSION} $ ./configure @end example If the output of @command{./configure} doesn't show any error it means that all the components are here. It is possible to give @command{./configure} switches and also specify environment variables (see also @command{./configure --help}): @table @code @item --disable-cernlib Use the internal cernlib source files, even if a cernlib is detected. @item --with-static-cernlib This command line switch forces a static linking with the cernlib (or a dynamic linking if set to no). @item --with-cernlib This command line switch can be used to specify the cernlib location (if not detected or you want to use a specific cernlib). @item --with-blas @itemx --with-lapack With this command switch, you can specify the location of the blas and lapack libraries. For example, on mac OS X this can be used to specify the blas and lapack from the Apple frameworks: @example ./configure \ --with-blas=/System/Library/Frameworks/vecLib.framework/versions/A/vecLib \ --with-lapack=/System/Library/Frameworks/vecLib.framework/versions/A/vecLib @end example @item F77 @itemx FC @itemx FFLAGS @itemx LDFLAGS Classical compiler, compiler flags and linker flags. @item MORTRAN This environment variable holds the mortran preprocessor command (default is @command{mortran}). @item MTNFLAGS This environment variable holds command line arguments for the mortran preprocessor. It is empty in the default case. @item MTN This environment variable may be used to specify the mortran executable name and/or path, it should be used by the @command{mortran} commmand. (default is empty, which leads to a mortran executable called @command{mtn}). @item MTNDEPEND This environment variable may be used to specify the mortran dependencies checker executable. It should be used by the @command{mortran} commmand. (default is empty, which leads to a mortran dependencies checker called @command{mtndepend}). @end table After a proper configuration, if @command{make} is run then the example models should be build. You have to perform the configuration only once. @node Installation with make @appendixsubsec Installation with make @cindex installation with make @Minik{} can be installed by running @example make install @end example It should copy the sources and the @file{Makefile.miniker} file in a @file{mini_ker} directory in the @code{$(includedir)} directory, and copy the templates in @file{$(datadir)/mini_ker}. The default for @code{$(includedir)} is @file{/usr/local/include} and the default for @code{$(datadir)} is @file{/usr/local/share}, these defaults may be changed by @command{./configure} switches @samp{--prefix}, @samp{--includedir} and @samp{--datadir}. See @command{./configure --help} and the @file{INSTALL} file for more informations. The helper script @file{start_miniker} should also be installed. The installation is not required to use comfortably @Minik{}. Indeed the only thing that changes with the sources and the @file{Makefile.miniker} directory location is the @code{miniker_dir} variable in a project @code{Makefile}. @node Cmz directives reference @appendix Cmz directives reference The cmz directives are described together with the other features of cmz in the cmz manual at @url{http://wwwcmz.web.cern.ch/wwwcmz/}, the important ones are nevertheless recalled here, especially for those that use make and don't need the whole features of cmz. After the description of the generic features, we turn to the cmz directive of interest. There are three kinds of cmz directives that are of use within @Minik{}: one kind that introduce files, the other for conditionnal compilation and the third for sequence inclusion. @menu * Cmz directives general syntax:: * Conditional expressions:: * File introduction directives:: * Conditional directives:: * File inclusion directive:: * The self directive:: @end menu @node Cmz directives general syntax @appendixsec Cmz directives general syntax The cmz directives always begin with a @samp{+} in the first column, optionnaly followed by any number of @samp{_} that may be used for indentation, then the directive label, case insensitive, followed by the directive arguments separated by @samp{,}. The arguments are also case insensitive. Optional spaces may be around directive arguments. An optionnal @samp{.} ends the directive arguments and begin a comment, everything that follows that @samp{.} is ignored. @node Conditional expressions @appendixsec Conditional expressions A directive argument common to all the directives is the conditionnal expression. A conditionnal expression may be true or false, it is a combination of select flags. the select flags are combined with logical operators. A select flag itself is true if it was selected. A select flag @var{selflag} is selected by using the @code{sel @var{selflag}} instruction in cmz. It is selected by passing the @code{-D @var{selflag}} command line switch to the call of the cmz directives preprocessor when using make. A @samp{-} negates the expression that follows. Parenthesis @samp{(} and @samp{)} are used for the grouping of subexpressions. @samp{|} and @samp{,} are for the boolean or: an expression with a or is true if the expression on the left or the expression on the right of the or is true. @samp{&} is for the boolean and: an expression with an and is true if the expression on the left and the expression on the right are true. The grouping is left to right when there is no parenthesis, with or and @samp{&} having the same precedence. Therefore @example a&b|c @equiv{} (a&b)|c a|b&c @equiv{} (a|b)&c a|b&c is not a|(b&c) a&b|c is not a&(b|c) @end example @node File introduction directives @appendixsec File introduction directives A file (or sequence) introduction directive appears at the beginning of the file. There are two different directives, one is @code{DECK} for normal files, the other is @code{KEEP} for include files (sequences). The first argument is the name of the file. The file name may not be larger than 32 characters and is converted to lower case in the general case. The optionnal following arguments may be of 2 type (and may be mixed, separated by @samp{,}): @table @asis @item conditional A conditionnal is introduced by @code{IF=} followed by a conditionnal expression described in @ref{Conditional expressions}. The file is preprocessed if the conditionnal expression is true. @item language specification A language specification is introduced by a @code{T=}. The most common languages are @samp{mtn} for the mortran, @samp{ftn} for fortran not preprocessed, @samp{f77} for preprocessed fortran, @samp{c} for the c language and @samp{txt} for text files. In general the language of the file determines the name of files the preprocessed file is extracted to, the comment style and the command for inclusions. @end table It is a common practice to have wrong language type in @code{KEEP} as the language may be determined from the @code{DECK} that include them with cmz, or from their file name with make. This is not recommended and considered a bad practice. Such a directive will always appear in cmz, as it is built-in. It is recommended to have one when using make too, even though it is not required in most cases. Indeed make uses the file name directly and finds the language and file type by looking at the file extension. make should then pass the language type with a @code{--lang @var{lang}} command line switch when calling the cmz directives preprocessor. With make, the convention is to have @samp{cm} added before the normal file suffix and after the @samp{.}. The table @ref{tab:cmfile_suffix} shows the matching between suffixes, file type and file language. For example, a file beginning with @verbatim +Deck, subroutine_foo, If=monitor&-simple, T=f77. @end verbatim is a main preprocessed fortran file that will only be generated if @samp{monitor} is selected and @samp{simple} is not selected. The file to be preprocessed by make should have the @samp{.cmF} suffix, and be called @file{subroutine_foo.cmF}. A file beginning with @verbatim +KEEP,inc_common,If=monitor|interface,T=mtn @end verbatim is an mortran include file that should be processed only if @samp{monitor} or @samp{interface} is selected. The file to be preprocessed by make should have the @samp{cmmti} suffix and be called @file{inc_common.cmmti}. The resulting file when make is used will be called @file{inc_common.mti}. @node Conditional directives @appendixsec Conditional directives Conditional directives may be used to conditionnaly skip blocks of code. There are 4 conditional directives: @code{if}, @code{elseif}, @code{else} and @code{endif}. @code{+if} begins a conditional directives sequence, with argument a conditional expression. If the expression is true the block of code following the @code{+if} is output in the resulting file, up to another conditional directive, if it is false the code block is skipped. If the expression is false and the following conditional directive is @code{+elseif}, the same procedure is followed with the argument of @code{+elseif} which is also a conditionnal expression. More than one @code{+elseif} may follow a @code{+if}. If a @code{+if} or @code{+elseif} expression is true the following code block is output and all the following @code{+elseif} code blocks are skipped. If all the @code{+if} and @code{+elseif} expressions are false and the following coditionnal directive is @code{+else} then the block following the @code{+else} is output. If a previous expression was true the code block following the @code{+else} is skipped. The last code block is closed by @code{+endif}. Conditionnal directives may be nested, a @code{+if} begins a deeper conditionnal sequences directives that is ended by the corresponding @code{+endif}. The simplest example is: @verbatim some code; +IF,monitor code output only if monitor is true; +ENDIF @end verbatim If @samp{monitor} is selected, the @code{+if} block is output, it leads to @verbatim some code; code output only if monitor is true; @end verbatim If @samp{monitor} isn't selected the @code{+if} block is skipped, it leads to @verbatim some code; @end verbatim An example with @code{+else} may be: @verbatim +IF,double call dmysub(eta); +ELSE call smysub(eta); +ENDIF @end verbatim If @samp{double} is selected the code output is @code{call dmysub(eta);}, if @samp{double} isn't selected the code output is @code{call dmysub(eta);}. Here is a self explanatory example of use of @code{+elseif}: @verbatim +IF,monitor code used if monitor is selected; +ELSEIF,kalman code used if kalman is selected and monitor is not; +ELSE code used if kalman and monitor are not selected; +ENDIF @end verbatim And last an example of nested conditional directives: @verbatim +IF,monitor code used if monitor is selected; +_IF,kalman. deep if code used if monitor and kalman are selected; +_ELSE. deep else code used if monitor is selected and kalman is not; +_ENDIF. end the deep conditionnals sequence +ELSE code used if monitor is not selected; +_IF,kalman code used if monitor is not selected but kalman is; +_ELSE code used if monitor and kalman are not selected; +_ENDIF other code used if monitor is not selected; +ENDIF @end verbatim @node File inclusion directive @appendixsec File inclusion directive The file (sequence) inclusion directive is @code{seq}. The argument of @code{seq} is an include files @samp{,} separated list. The include files are @code{Keep} in cmz. The following optional arguments may be mixed: @table @asis @item conditional A conditionnal is introduced by @code{IF=} followed by a conditionnal expression described in @ref{Conditional expressions}. The directive is ignored if the conditionnal expression is false. @item T=noinclude When this argument is present the text of the sequence will always be included in the file where the @code{+seq} appears. @end table When there is no @code{T=noinclude} argument, the @code{+seq} directive may be replaced with an inclusion command suitable for the language of the file being processed, if such command has been specified. For example if we have the following sequence @verbatim +KEEP,inc,lang=C typedef struct incstr {char* msg}; @end verbatim And the following code in the file being processed: @verbatim +DECK,mainf,lang=C +SEQ,inc int main (int argc, char* argv) { exit(0); } @end verbatim the processing of @file{mainf} should lead to the file @file{mainf.c}, containing an include command for @file{inc}: @verbatim #include "inc.h" int main (int argc, char* argv) { exit(0); } @end verbatim In case the @code{+seq} has the @code{T=noinclude}: @verbatim +DECK,mainf,lang=C +SEQ,inc,T=noinclude int main (int argc, char* argv) { exit(0); } @end verbatim The processing of @file{mainf} should lead to the file @file{mainf.c} containing the text of @file{inc}: @verbatim typedef struct incstr {char* msg}; int main (int argc, char* argv) { exit(0); } @end verbatim @node The self directive @appendixsec The @samp{self} directive The @code{self} directive is an obsolete directive that may be used for conditionnal skipping of code. For a better approach see @ref{Conditional directives}. The optionnal argument of @code{+SELF} is @code{If=} followed by a conditionnal expression. If the conditionnal expression is true the code following the directive is output, if it is false the code is skipped up to any directive (including another @code{+SELF}) except @code{+seq}. @ignore @node Resolution method @appendix Overview of resolution method @node @Minik{} macros @appendix @Minik{} macros @end ignore @node Copying This Manual @appendix Copying This Manual @menu * GNU Free Documentation License:: License for copying this manual. @end menu @include fdl.texi @bye texi2html-1.82/test/manuals/fdl.texi0000644000175000017500000004422311264347121021315 0ustar flichtenheldflichtenheld @node GNU Free Documentation License @appendixsec GNU Free Documentation License @cindex FDL, GNU Free Documentation License @center Version 1.1, March 2000 @display Copyright @copyright{} 2000 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @end display @enumerate 0 @item PREAMBLE The purpose of this License is to make a manual, textbook, or other written document @dfn{free} in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of ``copyleft'', which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. @item APPLICABILITY AND DEFINITIONS This License applies to any manual or other work that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. The ``Document'', below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as ``you''. A ``Modified Version'' of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A ``Secondary Section'' is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (For example, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The ``Invariant Sections'' are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. The ``Cover Texts'' are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A ``Transparent'' copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, whose contents can be viewed and edited directly and straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup has been designed to thwart or discourage subsequent modification by readers is not Transparent. A copy that is not ``Transparent'' is called ``Opaque''. Examples of suitable formats for Transparent copies include plain @sc{ascii} without markup, Texinfo input format, La@TeX{} input format, @acronym{SGML} or @acronym{XML} using a publicly available @acronym{DTD}, and standard-conforming simple @acronym{HTML} designed for human modification. Opaque formats include PostScript, @acronym{PDF}, proprietary formats that can be read and edited only by proprietary word processors, @acronym{SGML} or @acronym{XML} for which the @acronym{DTD} and/or processing tools are not generally available, and the machine-generated @acronym{HTML} produced by some word processors for output purposes only. The ``Title Page'' means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, ``Title Page'' means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. @item VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. @item COPYING IN QUANTITY If you publish printed copies of the Document numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access to download anonymously at no charge using public-standard network protocols. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. @item MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: @enumerate A @item Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. @item List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has less than five). @item State on the Title page the name of the publisher of the Modified Version, as the publisher. @item Preserve all the copyright notices of the Document. @item Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. @item Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. @item Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. @item Include an unaltered copy of this License. @item Preserve the section entitled ``History'', and its title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section entitled ``History'' in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. @item Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the ``History'' section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. @item In any section entitled ``Acknowledgments'' or ``Dedications'', preserve the section's title, and preserve in the section all the substance and tone of each of the contributor acknowledgments and/or dedications given therein. @item Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. @item Delete any section entitled ``Endorsements''. Such a section may not be included in the Modified Version. @item Do not retitle any existing section as ``Endorsements'' or to conflict in title with any Invariant Section. @end enumerate If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section entitled ``Endorsements'', provided it contains nothing but endorsements of your Modified Version by various parties---for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. @item COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections entitled ``History'' in the various original documents, forming one section entitled ``History''; likewise combine any sections entitled ``Acknowledgments'', and any sections entitled ``Dedications''. You must delete all sections entitled ``Endorsements.'' @item COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. @item AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, does not as a whole count as a Modified Version of the Document, provided no compilation copyright is claimed for the compilation. Such a compilation is called an ``aggregate'', and this License does not apply to the other self-contained works thus compiled with the Document, on account of their being thus compiled, if they are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one quarter of the entire aggregate, the Document's Cover Texts may be placed on covers that surround only the Document within the aggregate. Otherwise they must appear on covers around the whole aggregate. @item TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English version will prevail. @item TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. @item FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See @uref{http://www.gnu.org/copyleft/}. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License ``or any later version'' applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. @end enumerate @page @appendixsubsec ADDENDUM: How to use this License for your documents To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: @smallexample @group Copyright (C) @var{year} @var{your name}. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being @var{list their titles}, with the Front-Cover Texts being @var{list}, and with the Back-Cover Texts being @var{list}. A copy of the license is included in the section entitled ``GNU Free Documentation License''. @end group @end smallexample If you have no Invariant Sections, write ``with no Invariant Sections'' instead of saying which ones are invariant. If you have no Front-Cover Texts, write ``no Front-Cover Texts'' instead of ``Front-Cover Texts being @var{list}''; likewise for Back-Cover Texts. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. @c Local Variables: @c ispell-local-pdict: "ispell-dict" @c End: texi2html-1.82/test/manuals/cvs.init0000644000175000017500000000104711264347121021332 0ustar flichtenheldflichtenheld $complex_format_map->{'menu_comment'} = { 'begin' => q{""}, 'end' => q{""}, 'pre_style' => "$MENU_PRE_STYLE", 'class' => 'menu-comment', 'style' => 'code' }; if ($SIMPLE_MENU) { foreach my $format ('menu', 'detailmenu') { $complex_format_map->{$format} = { 'begin' => q{''} , 'end' => q{''}, 'pre_style' => "$MENU_PRE_STYLE", 'class' => 'menu-preformatted', 'style' => 'code' }; } } 1; texi2html-1.82/test/manuals/tests.txt0000644000175000017500000000103511264347121021552 0ustar flichtenheldflichtenheldtexi info-stnd.texi texi texinfo.texi -ifinfo texi cvs.texi texi mini_ker.texi info-stnd info-stnd.texi -split chapter -node-files texinfo texinfo.texi -split chapter -ifinfo texinfo_nodes texinfo.texi -split node -node-files -ifinfo ccvs cvs.texi -split chapter -init cvs.init ccvs_mediawiki cvs.texi -init mediawiki.init -split chapter ccvs_mediawiki_nosplit cvs.texi -init mediawiki.init -init cvs.init mini_ker mini_ker.texi --split section --node-files --use-nodes --iftex --init book.init --init mini_ker_t2h.init --init tex4ht.init texi2html-1.82/test/manuals/cvs.texi0000644000175000017500000200277711264347121021355 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @comment Documentation for CVS. @setfilename cvs.info @macro copyleftnotice @noindent Copyright @copyright{} 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. @multitable @columnfractions .12 .88 @item Portions @item @tab Copyright @copyright{} 1999, 2000, 2001, 2002, 2003 Derek R. Price, @item @tab Copyright @copyright{} 2002, 2003 Ximbiot , @item @tab Copyright @copyright{} 1992, 1993, 1999 Signum Support AB, @item @tab and Copyright @copyright{} others. @end multitable @ignore Permission is granted to process this file through Tex and print the results, provided the printed document carries copying permission notice identical to this one except for the removal of this paragraph (this paragraph not being relevant to the printed manual). @end ignore Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided also that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Free Software Foundation. @end macro @comment This file is part of the CVS distribution. @comment CVS is free software; you can redistribute it and/or modify @comment it under the terms of the GNU General Public License as published by @comment the Free Software Foundation; either version 2, or (at your option) @comment any later version. @comment CVS is distributed in the hope that it will be useful, @comment but WITHOUT ANY WARRANTY; without even the implied warranty of @comment MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @comment GNU General Public License for more details. @c See ../README for A4 vs. US letter size. @c When we provided A4 postscript, and people tried to @c print it on US letter, the usual complaint was that the @c page numbers would get cut off. @c If one prints US letter on A4, reportedly there is @c some extra space at the top and/or bottom, and the side @c margins are a bit narrow, but no text is lost. @c @c See @c http://www.ft.uni-erlangen.de/~mskuhn/iso-paper.html @c for more on paper sizes. Insuring that margins are @c big enough to print on either A4 or US letter does @c indeed seem to be the usual approach (RFC2346). @c This document seems to get overfull hboxes with some @c frequency (probably because the tendency is to @c sanity-check it with "make info" and run TeX less @c often). The big ugly boxes just seem to add insult @c to injury, and I'm not aware of them helping to fix @c the overfull hboxes at all. @finalout @include version.texi @settitle CVS---Concurrent Versions System v@value{VERSION} @setchapternewpage odd @c -- TODO list: @c -- Fix all lines that match "^@c -- " @c -- Also places marked with FIXME should be manual @c problems (as opposed to FIXCVS for CVS problems). @c @splitrcskeyword{} is used to avoid keyword expansion. It is replaced by @c @asis when generating info and dvi, and by in the generated html, @c such that keywords are not expanded in the generated html. @ifnothtml @macro splitrcskeyword {arg} @asis{}\arg\ @end macro @end ifnothtml @ifhtml @macro splitrcskeyword {arg} @i{}\arg\ @end macro @end ifhtml @dircategory GNU Packages @direntry * CVS: (cvs). Concurrent Versions System @end direntry @dircategory Individual utilities @direntry * cvs: (cvs)CVS commands. Concurrent Versions System @end direntry @comment The titlepage section does not appear in the Info file. @titlepage @sp 4 @comment The title is printed in a large font. @center @titlefont{Version Management} @sp @center @titlefont{with} @sp @center @titlefont{CVS} @sp 2 @center for @sc{cvs} @value{VERSION} @comment -release- @sp 3 @center Per Cederqvist et al @comment The following two commands start the copyright page @comment for the printed manual. This will not appear in the Info file. @page @vskip 0pt plus 1filll @copyleftnotice @end titlepage @comment ================================================================ @comment The real text starts here @comment ================================================================ @ifnottex @c --------------------------------------------------------------------- @node Top @top This info manual describes how to use and administer @sc{cvs} version @value{VERSION}. @end ifnottex @ifinfo @copyleftnotice @end ifinfo @c This menu is pretty long. Not sure how easily that @c can be fixed (no brilliant ideas right away)... @menu * Overview:: An introduction to CVS * Repository:: Where all your sources are stored * Starting a new project:: Starting a project with CVS * Revisions:: Numeric and symbolic names for revisions * Branching and merging:: Diverging/rejoining branches of development * Recursive behavior:: CVS descends directories * Adding and removing:: Adding/removing/renaming files/directories * History browsing:: Viewing the history of files in various ways CVS and the Real World. ----------------------- * Binary files:: CVS can handle binary files * Multiple developers:: How CVS helps a group of developers * Revision management:: Policy questions for revision management * Keyword substitution:: CVS can include the revision inside the file * Tracking sources:: Tracking third-party sources * Builds:: Issues related to CVS and builds * Special Files:: Devices, links and other non-regular files References. ----------- * CVS commands:: CVS commands share some things * Invoking CVS:: Quick reference to CVS commands * Administrative files:: Reference manual for the Administrative files * Environment variables:: All environment variables which affect CVS * Compatibility:: Upgrading CVS versions * Troubleshooting:: Some tips when nothing works * Credits:: Some of the contributors to this manual * BUGS:: Dealing with bugs in CVS or this manual * Index:: Index @end menu @c --------------------------------------------------------------------- @node Overview @chapter Overview @cindex Overview This chapter is for people who have never used @sc{cvs}, and perhaps have never used version control software before. If you are already familiar with @sc{cvs} and are just trying to learn a particular feature or remember a certain command, you can probably skip everything here. @menu * What is CVS?:: What you can do with @sc{cvs} * What is CVS not?:: Problems @sc{cvs} doesn't try to solve * A sample session:: A tour of basic @sc{cvs} usage @end menu @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node What is CVS? @section What is CVS? @cindex What is CVS? @cindex Introduction to CVS @cindex CVS, introduction to @sc{cvs} is a version control system. Using it, you can record the history of your source files. @c -- /// @c -- ///Those who cannot remember the past are condemned to repeat it. @c -- /// -- George Santayana @c -- ////// @c -- Insert history quote here! For example, bugs sometimes creep in when software is modified, and you might not detect the bug until a long time after you make the modification. With @sc{cvs}, you can easily retrieve old versions to see exactly which change caused the bug. This can sometimes be a big help. You could of course save every version of every file you have ever created. This would however waste an enormous amount of disk space. @sc{cvs} stores all the versions of a file in a single file in a clever way that only stores the differences between versions. @sc{cvs} also helps you if you are part of a group of people working on the same project. It is all too easy to overwrite each others' changes unless you are extremely careful. Some editors, like @sc{gnu} Emacs, try to make sure that the same file is never modified by two people at the same time. Unfortunately, if someone is using another editor, that safeguard will not work. @sc{cvs} solves this problem by insulating the different developers from each other. Every developer works in his own directory, and @sc{cvs} merges the work when each developer is done. @cindex History of CVS @cindex CVS, history of @cindex Credits (CVS program) @cindex Contributors (CVS program) @sc{cvs} started out as a bunch of shell scripts written by Dick Grune, posted to the newsgroup @code{comp.sources.unix} in the volume 6 release of July, 1986. While no actual code from these shell scripts is present in the current version of @sc{cvs} much of the @sc{cvs} conflict resolution algorithms come from them. In April, 1989, Brian Berliner designed and coded @sc{cvs}. Jeff Polk later helped Brian with the design of the @sc{cvs} module and vendor branch support. @cindex Source, getting CVS source You can get @sc{cvs} in a variety of ways, including free download from the internet. For more information on downloading @sc{cvs} and other @sc{cvs} topics, see: @example http://www.cvshome.org/ http://www.loria.fr/~molli/cvs-index.html @end example @cindex Mailing list @cindex List, mailing list @cindex Newsgroups There is a mailing list, known as @w{@code{info-cvs}}, devoted to @sc{cvs}. To subscribe or unsubscribe write to @w{@code{info-cvs-request@@gnu.org}}. If you prefer a usenet group, the right group is @code{comp.software.config-mgmt} which is for @sc{cvs} discussions (along with other configuration management systems). In the future, it might be possible to create a @code{comp.software.config-mgmt.cvs}, but probably only if there is sufficient @sc{cvs} traffic on @code{comp.software.config-mgmt}. @c Other random data is that past attempts to create a @c gnu.* group have failed (the relevant authorities @c say they'll do it, but don't), and that tale was very @c skeptical of comp.software.config-mgmt.cvs when the @c subject came up around 1995 or so (for one @c thing, because creating it would be a "reorg" which @c would need to take a more comprehensive look at the @c whole comp.software.config-mgmt.* hierarchy). You can also subscribe to the @code{bug-cvs} mailing list, described in more detail in @ref{BUGS}. To subscribe send mail to @code{bug-cvs-request@@gnu.org}. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node What is CVS not? @section What is CVS not? @cindex What is CVS not? @sc{cvs} can do a lot of things for you, but it does not try to be everything for everyone. @table @asis @item @sc{cvs} is not a build system. Though the structure of your repository and modules file interact with your build system (e.g. @file{Makefile}s), they are essentially independent. @sc{cvs} does not dictate how you build anything. It merely stores files for retrieval in a tree structure you devise. @sc{cvs} does not dictate how to use disk space in the checked out working directories. If you write your @file{Makefile}s or scripts in every directory so they have to know the relative positions of everything else, you wind up requiring the entire repository to be checked out. If you modularize your work, and construct a build system that will share files (via links, mounts, @code{VPATH} in @file{Makefile}s, etc.), you can arrange your disk usage however you like. But you have to remember that @emph{any} such system is a lot of work to construct and maintain. @sc{cvs} does not address the issues involved. Of course, you should place the tools created to support such a build system (scripts, @file{Makefile}s, etc) under @sc{cvs}. Figuring out what files need to be rebuilt when something changes is, again, something to be handled outside the scope of @sc{cvs}. One traditional approach is to use @code{make} for building, and use some automated tool for generating the dependencies which @code{make} uses. See @ref{Builds}, for more information on doing builds in conjunction with @sc{cvs}. @item @sc{cvs} is not a substitute for management. Your managers and project leaders are expected to talk to you frequently enough to make certain you are aware of schedules, merge points, branch names and release dates. If they don't, @sc{cvs} can't help. @sc{cvs} is an instrument for making sources dance to your tune. But you are the piper and the composer. No instrument plays itself or writes its own music. @item @sc{cvs} is not a substitute for developer communication. When faced with conflicts within a single file, most developers manage to resolve them without too much effort. But a more general definition of ``conflict'' includes problems too difficult to solve without communication between developers. @sc{cvs} cannot determine when simultaneous changes within a single file, or across a whole collection of files, will logically conflict with one another. Its concept of a @dfn{conflict} is purely textual, arising when two changes to the same base file are near enough to spook the merge (i.e. @code{diff3}) command. @sc{cvs} does not claim to help at all in figuring out non-textual or distributed conflicts in program logic. For example: Say you change the arguments to function @code{X} defined in file @file{A}. At the same time, someone edits file @file{B}, adding new calls to function @code{X} using the old arguments. You are outside the realm of @sc{cvs}'s competence. Acquire the habit of reading specs and talking to your peers. @item @sc{cvs} does not have change control Change control refers to a number of things. First of all it can mean @dfn{bug-tracking}, that is being able to keep a database of reported bugs and the status of each one (is it fixed? in what release? has the bug submitter agreed that it is fixed?). For interfacing @sc{cvs} to an external bug-tracking system, see the @file{rcsinfo} and @file{verifymsg} files (@pxref{Administrative files}). Another aspect of change control is keeping track of the fact that changes to several files were in fact changed together as one logical change. If you check in several files in a single @code{cvs commit} operation, @sc{cvs} then forgets that those files were checked in together, and the fact that they have the same log message is the only thing tying them together. Keeping a @sc{gnu} style @file{ChangeLog} can help somewhat. @c FIXME: should have an xref to a section which talks @c more about keeping ChangeLog's with CVS, but that @c section hasn't been written yet. Another aspect of change control, in some systems, is the ability to keep track of the status of each change. Some changes have been written by a developer, others have been reviewed by a second developer, and so on. Generally, the way to do this with @sc{cvs} is to generate a diff (using @code{cvs diff} or @code{diff}) and email it to someone who can then apply it using the @code{patch} utility. This is very flexible, but depends on mechanisms outside @sc{cvs} to make sure nothing falls through the cracks. @item @sc{cvs} is not an automated testing program It should be possible to enforce mandatory use of a testsuite using the @code{commitinfo} file. I haven't heard a lot about projects trying to do that or whether there are subtle gotchas, however. @item @sc{cvs} does not have a builtin process model Some systems provide ways to ensure that changes or releases go through various steps, with various approvals as needed. Generally, one can accomplish this with @sc{cvs} but it might be a little more work. In some cases you'll want to use the @file{commitinfo}, @file{loginfo}, @file{rcsinfo}, or @file{verifymsg} files, to require that certain steps be performed before cvs will allow a checkin. Also consider whether features such as branches and tags can be used to perform tasks such as doing work in a development tree and then merging certain changes over to a stable tree only once they have been proven. @end table @c --------------------------------------------------------------------- @node A sample session @section A sample session @cindex Example of a work-session @cindex Getting started @cindex Work-session, example of @cindex tc, Trivial Compiler (example) @cindex Trivial Compiler (example) @c I think an example is a pretty good way to start. But @c somewhere in here, maybe after the sample session, @c we need something which is kind of @c a "roadmap" which is more directed at sketching out @c the functionality of CVS and pointing people to @c various other parts of the manual. As it stands now @c people who read in order get dumped right into all @c manner of hair regarding remote repositories, @c creating a repository, etc. @c @c The following was in the old Basic concepts node. I don't @c know how good a job it does at introducing modules, @c or whether they need to be introduced so soon, but @c something of this sort might go into some @c introductory material somewhere. @ignore @cindex Modules (intro) The repository contains directories and files, in an arbitrary tree. The @dfn{modules} feature can be used to group together a set of directories or files into a single entity (@pxref{modules}). A typical usage is to define one module per project. @end ignore As a way of introducing @sc{cvs}, we'll go through a typical work-session using @sc{cvs}. The first thing to understand is that @sc{cvs} stores all files in a centralized @dfn{repository} (@pxref{Repository}); this section assumes that a repository is set up. @c I'm not sure that the sentence concerning the @c repository quite tells the user what they need to @c know at this point. Might need to expand on "centralized" @c slightly (maybe not here, maybe further down in the example?) Suppose you are working on a simple compiler. The source consists of a handful of C files and a @file{Makefile}. The compiler is called @samp{tc} (Trivial Compiler), and the repository is set up so that there is a module called @samp{tc}. @menu * Getting the source:: Creating a workspace * Committing your changes:: Making your work available to others * Cleaning up:: Cleaning up * Viewing differences:: Viewing differences @end menu @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Getting the source @subsection Getting the source @cindex Getting the source @cindex Checking out source @cindex Fetching source @cindex Source, getting from CVS @cindex Checkout, example The first thing you must do is to get your own working copy of the source for @samp{tc}. For this, you use the @code{checkout} command: @example $ cvs checkout tc @end example @noindent This will create a new directory called @file{tc} and populate it with the source files. @example $ cd tc $ ls CVS Makefile backend.c driver.c frontend.c parser.c @end example The @file{CVS} directory is used internally by @sc{cvs}. Normally, you should not modify or remove any of the files in it. You start your favorite editor, hack away at @file{backend.c}, and a couple of hours later you have added an optimization pass to the compiler. A note to @sc{rcs} and @sc{sccs} users: There is no need to lock the files that you want to edit. @xref{Multiple developers}, for an explanation. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Committing your changes @subsection Committing your changes @cindex Committing changes to files @cindex Log message entry When you have checked that the compiler is still compilable you decide to make a new version of @file{backend.c}. This will store your new @file{backend.c} in the repository and make it available to anyone else who is using that same repository. @example $ cvs commit backend.c @end example @noindent @sc{cvs} starts an editor, to allow you to enter a log message. You type in ``Added an optimization pass.'', save the temporary file, and exit the editor. @cindex CVSEDITOR, environment variable @cindex EDITOR, environment variable The environment variable @code{$CVSEDITOR} determines which editor is started. If @code{$CVSEDITOR} is not set, then if the environment variable @code{$EDITOR} is set, it will be used. If both @code{$CVSEDITOR} and @code{$EDITOR} are not set then there is a default which will vary with your operating system, for example @code{vi} for unix or @code{notepad} for Windows NT/95. @cindex VISUAL, environment variable In addition, @sc{cvs} checks the @code{$VISUAL} environment variable. Opinions vary on whether this behavior is desirable and whether future releases of @sc{cvs} should check @code{$VISUAL} or ignore it. You will be OK either way if you make sure that @code{$VISUAL} is either unset or set to the same thing as @code{$EDITOR}. @c This probably should go into some new node @c containing detailed info on the editor, rather than @c the intro. In fact, perhaps some of the stuff with @c CVSEDITOR and -m and so on should too. When @sc{cvs} starts the editor, it includes a list of files which are modified. For the @sc{cvs} client, this list is based on comparing the modification time of the file against the modification time that the file had when it was last gotten or updated. Therefore, if a file's modification time has changed but its contents have not, it will show up as modified. The simplest way to handle this is simply not to worry about it---if you proceed with the commit @sc{cvs} will detect that the contents are not modified and treat it as an unmodified file. The next @code{update} will clue @sc{cvs} in to the fact that the file is unmodified, and it will reset its stored timestamp so that the file will not show up in future editor sessions. @c FIXCVS: Might be nice if "commit" and other commands @c would reset that timestamp too, but currently commit @c doesn't. @c FIXME: Need to talk more about the process of @c prompting for the log message. Like show an example @c of what it pops up in the editor, for example. Also @c a discussion of how to get the "a)bort, c)ontinue, @c e)dit" prompt and what to do with it. Might also @c work in the suggestion that if you want a diff, you @c should make it before running commit (someone @c suggested that the diff pop up in the editor. I'm @c not sure that is better than telling people to run @c "cvs diff" first if that is what they want, but if @c we want to tell people that, the manual possibly @c should say it). If you want to avoid starting an editor you can specify the log message on the command line using the @samp{-m} flag instead, like this: @example $ cvs commit -m "Added an optimization pass" backend.c @end example @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Cleaning up @subsection Cleaning up @cindex Cleaning up @cindex Working copy, removing @cindex Removing your working copy @cindex Releasing your working copy Before you turn to other tasks you decide to remove your working copy of tc. One acceptable way to do that is of course @example $ cd .. $ rm -r tc @end example @noindent but a better way is to use the @code{release} command (@pxref{release}): @example $ cd .. $ cvs release -d tc M driver.c ? tc You have [1] altered files in this repository. Are you sure you want to release (and delete) directory `tc': n ** `release' aborted by user choice. @end example The @code{release} command checks that all your modifications have been committed. If history logging is enabled it also makes a note in the history file. @xref{history file}. When you use the @samp{-d} flag with @code{release}, it also removes your working copy. In the example above, the @code{release} command wrote a couple of lines of output. @samp{? tc} means that the file @file{tc} is unknown to @sc{cvs}. That is nothing to worry about: @file{tc} is the executable compiler, and it should not be stored in the repository. @xref{cvsignore}, for information about how to make that warning go away. @xref{release output}, for a complete explanation of all possible output from @code{release}. @samp{M driver.c} is more serious. It means that the file @file{driver.c} has been modified since it was checked out. The @code{release} command always finishes by telling you how many modified files you have in your working copy of the sources, and then asks you for confirmation before deleting any files or making any note in the history file. You decide to play it safe and answer @kbd{n @key{RET}} when @code{release} asks for confirmation. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Viewing differences @subsection Viewing differences @cindex Viewing differences @cindex Diff You do not remember modifying @file{driver.c}, so you want to see what has happened to that file. @example $ cd tc $ cvs diff driver.c @end example This command runs @code{diff} to compare the version of @file{driver.c} that you checked out with your working copy. When you see the output you remember that you added a command line option that enabled the optimization pass. You check it in, and release the module. @c FIXME: we haven't yet defined the term "check in". @example $ cvs commit -m "Added an optimization pass" driver.c Checking in driver.c; /usr/local/cvsroot/tc/driver.c,v <-- driver.c new revision: 1.2; previous revision: 1.1 done $ cd .. $ cvs release -d tc ? tc You have [0] altered files in this repository. Are you sure you want to release (and delete) directory `tc': y @end example @c --------------------------------------------------------------------- @node Repository @chapter The Repository @cindex Repository (intro) @cindex Repository, example @cindex Layout of repository @cindex Typical repository @cindex /usr/local/cvsroot, as example repository @cindex cvsroot The @sc{cvs} @dfn{repository} stores a complete copy of all the files and directories which are under version control. Normally, you never access any of the files in the repository directly. Instead, you use @sc{cvs} commands to get your own copy of the files into a @dfn{working directory}, and then work on that copy. When you've finished a set of changes, you check (or @dfn{commit}) them back into the repository. The repository then contains the changes which you have made, as well as recording exactly what you changed, when you changed it, and other such information. Note that the repository is not a subdirectory of the working directory, or vice versa; they should be in separate locations. @c Need some example, e.g. repository @c /usr/local/cvsroot; working directory @c /home/joe/sources. But this node is too long @c as it is; need a little reorganization... @cindex :local:, setting up @sc{cvs} can access a repository by a variety of means. It might be on the local computer, or it might be on a computer across the room or across the world. To distinguish various ways to access a repository, the repository name can start with an @dfn{access method}. For example, the access method @code{:local:} means to access a repository directory, so the repository @code{:local:/usr/local/cvsroot} means that the repository is in @file{/usr/local/cvsroot} on the computer running @sc{cvs}. For information on other access methods, see @ref{Remote repositories}. @c Can se say this more concisely? Like by passing @c more of the buck to the Remote repositories node? If the access method is omitted, then if the repository starts with @samp{/}, then @code{:local:} is assumed. If it does not start with @samp{/} then either @code{:ext:} or @code{:server:} is assumed. For example, if you have a local repository in @file{/usr/local/cvsroot}, you can use @code{/usr/local/cvsroot} instead of @code{:local:/usr/local/cvsroot}. But if (under Windows NT, for example) your local repository is @file{c:\src\cvsroot}, then you must specify the access method, as in @code{:local:c:/src/cvsroot}. @c This might appear to go in Repository storage, but @c actually it is describing something which is quite @c user-visible, when you do a "cvs co CVSROOT". This @c isn't necessary the perfect place for that, though. The repository is split in two parts. @file{$CVSROOT/CVSROOT} contains administrative files for @sc{cvs}. The other directories contain the actual user-defined modules. @menu * Specifying a repository:: Telling CVS where your repository is * Repository storage:: The structure of the repository * Working directory storage:: The structure of working directories * Intro administrative files:: Defining modules * Multiple repositories:: Multiple repositories * Creating a repository:: Creating a repository * Backing up:: Backing up a repository * Moving a repository:: Moving a repository * Remote repositories:: Accessing repositories on remote machines * Read-only access:: Granting read-only access to the repository * Server temporary directory:: The server creates temporary directories @end menu @node Specifying a repository @section Telling CVS where your repository is There are several ways to tell @sc{cvs} where to find the repository. You can name the repository on the command line explicitly, with the @code{-d} (for "directory") option: @example cvs -d /usr/local/cvsroot checkout yoyodyne/tc @end example @cindex .profile, setting CVSROOT in @cindex .cshrc, setting CVSROOT in @cindex .tcshrc, setting CVSROOT in @cindex .bashrc, setting CVSROOT in @cindex CVSROOT, environment variable Or you can set the @code{$CVSROOT} environment variable to an absolute path to the root of the repository, @file{/usr/local/cvsroot} in this example. To set @code{$CVSROOT}, @code{csh} and @code{tcsh} users should have this line in their @file{.cshrc} or @file{.tcshrc} files: @example setenv CVSROOT /usr/local/cvsroot @end example @noindent @code{sh} and @code{bash} users should instead have these lines in their @file{.profile} or @file{.bashrc}: @example CVSROOT=/usr/local/cvsroot export CVSROOT @end example @cindex Root file, in CVS directory @cindex CVS/Root file A repository specified with @code{-d} will override the @code{$CVSROOT} environment variable. Once you've checked a working copy out from the repository, it will remember where its repository is (the information is recorded in the @file{CVS/Root} file in the working copy). The @code{-d} option and the @file{CVS/Root} file both override the @code{$CVSROOT} environment variable. If @code{-d} option differs from @file{CVS/Root}, the former is used. Of course, for proper operation they should be two ways of referring to the same repository. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Repository storage @section How data is stored in the repository @cindex Repository, how data is stored For most purposes it isn't important @emph{how} @sc{cvs} stores information in the repository. In fact, the format has changed in the past, and is likely to change in the future. Since in almost all cases one accesses the repository via @sc{cvs} commands, such changes need not be disruptive. However, in some cases it may be necessary to understand how @sc{cvs} stores data in the repository, for example you might need to track down @sc{cvs} locks (@pxref{Concurrency}) or you might need to deal with the file permissions appropriate for the repository. @menu * Repository files:: What files are stored in the repository * File permissions:: File permissions * Windows permissions:: Issues specific to Windows * Attic:: Some files are stored in the Attic * CVS in repository:: Additional information in CVS directory * Locks:: CVS locks control concurrent accesses * CVSROOT storage:: A few things about CVSROOT are different @end menu @node Repository files @subsection Where files are stored within the repository @c @cindex Filenames, legal @c @cindex Legal filenames @c Somewhere we need to say something about legitimate @c characters in filenames in working directory and @c repository. Not "/" (not even on non-unix). And @c here is a specific set of issues: @c Files starting with a - are handled inconsistently. They can not @c be added to a repository with an add command, because it they are @c interpreted as a switch. They can appear in a repository if they are @c part of a tree that is imported. They can not be removed from the tree @c once they are there. @c Note that "--" *is* supported (as a @c consequence of using GNU getopt). Should document @c this somewhere ("Common options"?). The other usual technique, @c "./-foo", isn't as effective, at least for "cvs add" @c which doesn't support pathnames containing "/". The overall structure of the repository is a directory tree corresponding to the directories in the working directory. For example, supposing the repository is in @example /usr/local/cvsroot @end example @noindent here is a possible directory tree (showing only the directories): @example @t{/usr} | +--@t{local} | | | +--@t{cvsroot} | | | | | +--@t{CVSROOT} | (administrative files) | +--@t{gnu} | | | +--@t{diff} | | (source code to @sc{gnu} diff) | | | +--@t{rcs} | | (source code to @sc{rcs}) | | | +--@t{cvs} | (source code to @sc{cvs}) | +--@t{yoyodyne} | +--@t{tc} | | | +--@t{man} | | | +--@t{testing} | +--(other Yoyodyne software) @end example With the directories are @dfn{history files} for each file under version control. The name of the history file is the name of the corresponding file with @samp{,v} appended to the end. Here is what the repository for the @file{yoyodyne/tc} directory might look like: @c FIXME: Should also mention CVS (CVSREP) @c FIXME? Should we introduce Attic with an xref to @c Attic? Not sure whether that is a good idea or not. @example @code{$CVSROOT} | +--@t{yoyodyne} | | | +--@t{tc} | | | +--@t{Makefile,v} +--@t{backend.c,v} +--@t{driver.c,v} +--@t{frontend.c,v} +--@t{parser.c,v} +--@t{man} | | | +--@t{tc.1,v} | +--@t{testing} | +--@t{testpgm.t,v} +--@t{test2.t,v} @end example @cindex History files @cindex RCS history files @c The first sentence, about what history files @c contain, is kind of redundant with our intro to what the @c repository does in node Repository.... The history files contain, among other things, enough information to recreate any revision of the file, a log of all commit messages and the user-name of the person who committed the revision. The history files are known as @dfn{RCS files}, because the first program to store files in that format was a version control system known as @sc{rcs}. For a full description of the file format, see the @code{man} page @cite{rcsfile(5)}, distributed with @sc{rcs}, or the file @file{doc/RCSFILES} in the @sc{cvs} source distribution. This file format has become very common---many systems other than @sc{cvs} or @sc{rcs} can at least import history files in this format. @c FIXME: Think about including documentation for this @c rather than citing it? In the long run, getting @c this to be a standard (not sure if we can cope with @c a standards process as formal as IEEE/ANSI/ISO/etc, @c though...) is the way to go, so maybe citing is @c better. The @sc{rcs} files used in @sc{cvs} differ in a few ways from the standard format. The biggest difference is magic branches; for more information see @ref{Magic branch numbers}. Also in @sc{cvs} the valid tag names are a subset of what @sc{rcs} accepts; for @sc{cvs}'s rules see @ref{Tags}. @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node File permissions @subsection File permissions @c -- Move this to @node Creating a repository or similar @cindex Security, file permissions in repository @cindex File permissions, general @cindex Permissions, general @c FIXME: we need to somehow reflect "permissions in @c repository" versus "permissions in working @c directory" in the index entries. @cindex Group @cindex Read-only files, in repository All @samp{,v} files are created read-only, and you should not change the permission of those files. The directories inside the repository should be writable by the persons that have permission to modify the files in each directory. This normally means that you must create a UNIX group (see group(5)) consisting of the persons that are to edit the files in a project, and set up the repository so that it is that group that owns the directory. (On some systems, you also need to set the set-group-ID-on-execution bit on the repository directories (see chmod(1)) so that newly-created files and directories get the group-ID of the parent directory rather than that of the current process.) @c See also comment in commitinfo node regarding cases @c which are really awkward with unix groups. This means that you can only control access to files on a per-directory basis. Note that users must also have write access to check out files, because @sc{cvs} needs to create lock files (@pxref{Concurrency}). You can use LockDir in CVSROOT/config to put the lock files somewhere other than in the repository if you want to allow read-only access to some directories (@pxref{config}). @c CVS seems to use CVSUMASK in picking permissions for @c val-tags, but maybe we should say more about this. @c Like val-tags gets created by someone who doesn't @c have CVSUMASK set right? Also note that users must have write access to the @file{CVSROOT/val-tags} file. @sc{cvs} uses it to keep track of what tags are valid tag names (it is sometimes updated when tags are used, as well as when they are created). Each @sc{rcs} file will be owned by the user who last checked it in. This has little significance; what really matters is who owns the directories. @cindex CVSUMASK, environment variable @cindex Umask, for repository files @sc{cvs} tries to set up reasonable file permissions for new directories that are added inside the tree, but you must fix the permissions manually when a new directory should have different permissions than its parent directory. If you set the @code{CVSUMASK} environment variable that will control the file permissions which @sc{cvs} uses in creating directories and/or files in the repository. @code{CVSUMASK} does not affect the file permissions in the working directory; such files have the permissions which are typical for newly created files, except that sometimes @sc{cvs} creates them read-only (see the sections on watches, @ref{Setting a watch}; -r, @ref{Global options}; or @code{CVSREAD}, @ref{Environment variables}). @c FIXME: Need more discussion of which @c group should own the file in the repository. @c Include a somewhat detailed example of the usual @c case where CVSUMASK is 007, the developers are all @c in a group, and that group owns stuff in the @c repository. Need to talk about group ownership of @c newly-created directories/files (on some unices, @c such as SunOS4, setting the setgid bit on the @c directories will make files inherit the directory's @c group. On other unices, your mileage may vary. I @c can't remember what POSIX says about this, if @c anything). Note that using the client/server @sc{cvs} (@pxref{Remote repositories}), there is no good way to set @code{CVSUMASK}; the setting on the client machine has no effect. If you are connecting with @code{rsh}, you can set @code{CVSUMASK} in @file{.bashrc} or @file{.cshrc}, as described in the documentation for your operating system. This behavior might change in future versions of @sc{cvs}; do not rely on the setting of @code{CVSUMASK} on the client having no effect. @c FIXME: need to explain what a umask is or cite @c someplace which does. @c @c There is also a larger (largely separate) issue @c about the meaning of CVSUMASK in a non-unix context. @c For example, whether there is @c an equivalent which fits better into other @c protection schemes like POSIX.6, VMS, &c. @c @c FIXME: Need one place which discusses this @c read-only files thing. Why would one use -r or @c CVSREAD? Why would one use watches? How do they @c interact? @c @c FIXME: We need to state @c whether using CVSUMASK removes the need for manually @c fixing permissions (in fact, if we are going to mention @c manually fixing permission, we better document a lot @c better just what we mean by "fix"). Using pserver, you will generally need stricter permissions on the @sc{cvsroot} directory and directories above it in the tree; see @ref{Password authentication security}. @cindex Setuid @cindex Setgid @cindex Security, setuid @cindex Installed images (VMS) Some operating systems have features which allow a particular program to run with the ability to perform operations which the caller of the program could not. For example, the set user ID (setuid) or set group ID (setgid) features of unix or the installed image feature of VMS. @sc{cvs} was not written to use such features and therefore attempting to install @sc{cvs} in this fashion will provide protection against only accidental lapses; anyone who is trying to circumvent the measure will be able to do so, and depending on how you have set it up may gain access to more than just @sc{cvs}. You may wish to instead consider pserver. It shares some of the same attributes, in terms of possibly providing a false sense of security or opening security holes wider than the ones you are trying to fix, so read the documentation on pserver security carefully if you are considering this option (@ref{Password authentication security}). @node Windows permissions @subsection File Permission issues specific to Windows @cindex Windows, and permissions @cindex File permissions, Windows-specific @cindex Permissions, Windows-specific Some file permission issues are specific to Windows operating systems (Windows 95, Windows NT, and presumably future operating systems in this family. Some of the following might apply to OS/2 but I'm not sure). If you are using local @sc{cvs} and the repository is on a networked file system which is served by the Samba SMB server, some people have reported problems with permissions. Enabling WRITE=YES in the samba configuration is said to fix/workaround it. Disclaimer: I haven't investigated enough to know the implications of enabling that option, nor do I know whether there is something which @sc{cvs} could be doing differently in order to avoid the problem. If you find something out, please let us know as described in @ref{BUGS}. @node Attic @subsection The attic @cindex Attic You will notice that sometimes @sc{cvs} stores an @sc{rcs} file in the @code{Attic}. For example, if the @sc{cvsroot} is @file{/usr/local/cvsroot} and we are talking about the file @file{backend.c} in the directory @file{yoyodyne/tc}, then the file normally would be in @example /usr/local/cvsroot/yoyodyne/tc/backend.c,v @end example @noindent but if it goes in the attic, it would be in @example /usr/local/cvsroot/yoyodyne/tc/Attic/backend.c,v @end example @noindent @cindex Dead state instead. It should not matter from a user point of view whether a file is in the attic; @sc{cvs} keeps track of this and looks in the attic when it needs to. But in case you want to know, the rule is that the RCS file is stored in the attic if and only if the head revision on the trunk has state @code{dead}. A @code{dead} state means that file has been removed, or never added, for that revision. For example, if you add a file on a branch, it will have a trunk revision in @code{dead} state, and a branch revision in a non-@code{dead} state. @c Probably should have some more concrete examples @c here, or somewhere (not sure exactly how we should @c arrange the discussion of the dead state, versus @c discussion of the attic). @node CVS in repository @subsection The CVS directory in the repository @cindex CVS directory, in repository The @file{CVS} directory in each repository directory contains information such as file attributes (in a file called @file{CVS/fileattr}. In the future additional files may be added to this directory, so implementations should silently ignore additional files. This behavior is implemented only by @sc{cvs} 1.7 and later; for details see @ref{Watches Compatibility}. The format of the fileattr file is a series of entries of the following form (where @samp{@{} and @samp{@}} means the text between the braces can be repeated zero or more times): @var{ent-type} @var{filename} @var{attrname} = @var{attrval} @{; @var{attrname} = @var{attrval}@} @var{ent-type} is @samp{F} for a file, in which case the entry specifies the attributes for that file. @var{ent-type} is @samp{D}, and @var{filename} empty, to specify default attributes to be used for newly added files. Other @var{ent-type} are reserved for future expansion. @sc{cvs} 1.9 and older will delete them any time it writes file attributes. @sc{cvs} 1.10 and later will preserve them. Note that the order of the lines is not significant; a program writing the fileattr file may rearrange them at its convenience. There is currently no way of quoting tabs or linefeeds in the filename, @samp{=} in @var{attrname}, @samp{;} in @var{attrval}, etc. Note: some implementations also don't handle a NUL character in any of the fields, but implementations are encouraged to allow it. By convention, @var{attrname} starting with @samp{_} is for an attribute given special meaning by @sc{cvs}; other @var{attrname}s are for user-defined attributes (or will be, once implementations start supporting user-defined attributes). Builtin attributes: @table @code @item _watched Present means the file is watched and should be checked out read-only. @item _watchers Users with watches for this file. Value is @var{watcher} > @var{type} @{ , @var{watcher} > @var{type} @} where @var{watcher} is a username, and @var{type} is zero or more of edit,unedit,commit separated by @samp{+} (that is, nothing if none; there is no "none" or "all" keyword). @item _editors Users editing this file. Value is @var{editor} > @var{val} @{ , @var{editor} > @var{val} @} where @var{editor} is a username, and @var{val} is @var{time}+@var{hostname}+@var{pathname}, where @var{time} is when the @code{cvs edit} command (or equivalent) happened, and @var{hostname} and @var{pathname} are for the working directory. @end table Example: @c FIXME: sanity.sh should contain a similar test case @c so we can compare this example from something from @c Real Life(TM). See cvsclient.texi (under Notify) for more @c discussion of the date format of _editors. @example Ffile1 _watched=;_watchers=joe>edit,mary>commit Ffile2 _watched=;_editors=sue>8 Jan 1975+workstn1+/home/sue/cvs D _watched= @end example @noindent means that the file @file{file1} should be checked out read-only. Furthermore, joe is watching for edits and mary is watching for commits. The file @file{file2} should be checked out read-only; sue started editing it on 8 Jan 1975 in the directory @file{/home/sue/cvs} on the machine @code{workstn1}. Future files which are added should be checked out read-only. To represent this example here, we have shown a space after @samp{D}, @samp{Ffile1}, and @samp{Ffile2}, but in fact there must be a single tab character there and no spaces. @node Locks @subsection CVS locks in the repository @cindex #cvs.rfl, technical details @cindex #cvs.wfl, technical details @cindex #cvs.lock, technical details @cindex Locks, cvs, technical details For an introduction to @sc{cvs} locks focusing on user-visible behavior, see @ref{Concurrency}. The following section is aimed at people who are writing tools which want to access a @sc{cvs} repository without interfering with other tools accessing the same repository. If you find yourself confused by concepts described here, like @dfn{read lock}, @dfn{write lock}, and @dfn{deadlock}, you might consult the literature on operating systems or databases. @cindex #cvs.tfl Any file in the repository with a name starting with @file{#cvs.rfl.} is a read lock. Any file in the repository with a name starting with @file{#cvs.wfl} is a write lock. Old versions of @sc{cvs} (before @sc{cvs} 1.5) also created files with names starting with @file{#cvs.tfl}, but they are not discussed here. The directory @file{#cvs.lock} serves as a master lock. That is, one must obtain this lock first before creating any of the other locks. To obtain a readlock, first create the @file{#cvs.lock} directory. This operation must be atomic (which should be true for creating a directory under most operating systems). If it fails because the directory already existed, wait for a while and try again. After obtaining the @file{#cvs.lock} lock, create a file whose name is @file{#cvs.rfl.} followed by information of your choice (for example, hostname and process identification number). Then remove the @file{#cvs.lock} directory to release the master lock. Then proceed with reading the repository. When you are done, remove the @file{#cvs.rfl} file to release the read lock. To obtain a writelock, first create the @file{#cvs.lock} directory, as with a readlock. Then check that there are no files whose names start with @file{#cvs.rfl.}. If there are, remove @file{#cvs.lock}, wait for a while, and try again. If there are no readers, then create a file whose name is @file{#cvs.wfl} followed by information of your choice (for example, hostname and process identification number). Hang on to the @file{#cvs.lock} lock. Proceed with writing the repository. When you are done, first remove the @file{#cvs.wfl} file and then the @file{#cvs.lock} directory. Note that unlike the @file{#cvs.rfl} file, the @file{#cvs.wfl} file is just informational; it has no effect on the locking operation beyond what is provided by holding on to the @file{#cvs.lock} lock itself. Note that each lock (writelock or readlock) only locks a single directory in the repository, including @file{Attic} and @file{CVS} but not including subdirectories which represent other directories under version control. To lock an entire tree, you need to lock each directory (note that if you fail to obtain any lock you need, you must release the whole tree before waiting and trying again, to avoid deadlocks). Note also that @sc{cvs} expects writelocks to control access to individual @file{foo,v} files. @sc{rcs} has a scheme where the @file{,foo,} file serves as a lock, but @sc{cvs} does not implement it and so taking out a @sc{cvs} writelock is recommended. See the comments at rcs_internal_lockfile in the @sc{cvs} source code for further discussion/rationale. @node CVSROOT storage @subsection How files are stored in the CVSROOT directory @cindex CVSROOT, storage of files The @file{$CVSROOT/CVSROOT} directory contains the various administrative files. In some ways this directory is just like any other directory in the repository; it contains @sc{rcs} files whose names end in @samp{,v}, and many of the @sc{cvs} commands operate on it the same way. However, there are a few differences. For each administrative file, in addition to the @sc{rcs} file, there is also a checked out copy of the file. For example, there is an @sc{rcs} file @file{loginfo,v} and a file @file{loginfo} which contains the latest revision contained in @file{loginfo,v}. When you check in an administrative file, @sc{cvs} should print @example cvs commit: Rebuilding administrative file database @end example @noindent and update the checked out copy in @file{$CVSROOT/CVSROOT}. If it does not, there is something wrong (@pxref{BUGS}). To add your own files to the files to be updated in this fashion, you can add them to the @file{checkoutlist} administrative file (@pxref{checkoutlist}). @cindex modules.db @cindex modules.pag @cindex modules.dir By default, the @file{modules} file behaves as described above. If the modules file is very large, storing it as a flat text file may make looking up modules slow (I'm not sure whether this is as much of a concern now as when @sc{cvs} first evolved this feature; I haven't seen benchmarks). Therefore, by making appropriate edits to the @sc{cvs} source code one can store the modules file in a database which implements the @code{ndbm} interface, such as Berkeley db or GDBM. If this option is in use, then the modules database will be stored in the files @file{modules.db}, @file{modules.pag}, and/or @file{modules.dir}. @c I think fileattr also will use the database stuff. @c Anything else? For information on the meaning of the various administrative files, see @ref{Administrative files}. @node Working directory storage @section How data is stored in the working directory @c FIXME: Somewhere we should discuss timestamps (test @c case "stamps" in sanity.sh). But not here. Maybe @c in some kind of "working directory" chapter which @c would encompass the "Builds" one? But I'm not sure @c whether that is a good organization (is it based on @c what the user wants to do?). @cindex CVS directory, in working directory While we are discussing @sc{cvs} internals which may become visible from time to time, we might as well talk about what @sc{cvs} puts in the @file{CVS} directories in the working directories. As with the repository, @sc{cvs} handles this information and one can usually access it via @sc{cvs} commands. But in some cases it may be useful to look at it, and other programs, such as the @code{jCVS} graphical user interface or the @code{VC} package for emacs, may need to look at it. Such programs should follow the recommendations in this section if they hope to be able to work with other programs which use those files, including future versions of the programs just mentioned and the command-line @sc{cvs} client. The @file{CVS} directory contains several files. Programs which are reading this directory should silently ignore files which are in the directory but which are not documented here, to allow for future expansion. The files are stored according to the text file convention for the system in question. This means that working directories are not portable between systems with differing conventions for storing text files. This is intentional, on the theory that the files being managed by @sc{cvs} probably will not be portable between such systems either. @table @file @item Root This file contains the current @sc{cvs} root, as described in @ref{Specifying a repository}. @cindex Repository file, in CVS directory @cindex CVS/Repository file @item Repository This file contains the directory within the repository which the current directory corresponds with. It can be either an absolute pathname or a relative pathname; @sc{cvs} has had the ability to read either format since at least version 1.3 or so. The relative pathname is relative to the root, and is the more sensible approach, but the absolute pathname is quite common and implementations should accept either. For example, after the command @example cvs -d :local:/usr/local/cvsroot checkout yoyodyne/tc @end example @noindent @file{Root} will contain @example :local:/usr/local/cvsroot @end example @noindent and @file{Repository} will contain either @example /usr/local/cvsroot/yoyodyne/tc @end example @noindent or @example yoyodyne/tc @end example If the particular working directory does not correspond to a directory in the repository, then @file{Repository} should contain @file{CVSROOT/Emptydir}. @cindex Emptydir, in CVSROOT directory @cindex CVSROOT/Emptydir directory @cindex Entries file, in CVS directory @cindex CVS/Entries file @item Entries This file lists the files and directories in the working directory. The first character of each line indicates what sort of line it is. If the character is unrecognized, programs reading the file should silently skip that line, to allow for future expansion. If the first character is @samp{/}, then the format is: @example /@var{name}/@var{revision}/@var{timestamp}[+@var{conflict}]/@var{options}/@var{tagdate} @end example @noindent where @samp{[} and @samp{]} are not part of the entry, but instead indicate that the @samp{+} and conflict marker are optional. @var{name} is the name of the file within the directory. @var{revision} is the revision that the file in the working derives from, or @samp{0} for an added file, or @samp{-} followed by a revision for a removed file. @var{timestamp} is the timestamp of the file at the time that @sc{cvs} created it; if the timestamp differs with the actual modification time of the file it means the file has been modified. It is stored in the format used by the ISO C asctime() function (for example, @samp{Sun Apr 7 01:29:26 1996}). One may write a string which is not in that format, for example, @samp{Result of merge}, to indicate that the file should always be considered to be modified. This is not a special case; to see whether a file is modified a program should take the timestamp of the file and simply do a string compare with @var{timestamp}. If there was a conflict, @var{conflict} can be set to the modification time of the file after the file has been written with conflict markers (@pxref{Conflicts example}). Thus if @var{conflict} is subsequently the same as the actual modification time of the file it means that the user has obviously not resolved the conflict. @var{options} contains sticky options (for example @samp{-kb} for a binary file). @var{tagdate} contains @samp{T} followed by a tag name, or @samp{D} for a date, followed by a sticky tag or date. Note that if @var{timestamp} contains a pair of timestamps separated by a space, rather than a single timestamp, you are dealing with a version of @sc{cvs} earlier than @sc{cvs} 1.5 (not documented here). The timezone on the timestamp in CVS/Entries (local or universal) should be the same as the operating system stores for the timestamp of the file itself. For example, on Unix the file's timestamp is in universal time (UT), so the timestamp in CVS/Entries should be too. On @sc{vms}, the file's timestamp is in local time, so @sc{cvs} on @sc{vms} should use local time. This rule is so that files do not appear to be modified merely because the timezone changed (for example, to or from summer time). @c See comments and calls to gmtime() and friends in @c src/vers_ts.c (function time_stamp). If the first character of a line in @file{Entries} is @samp{D}, then it indicates a subdirectory. @samp{D} on a line all by itself indicates that the program which wrote the @file{Entries} file does record subdirectories (therefore, if there is such a line and no other lines beginning with @samp{D}, one knows there are no subdirectories). Otherwise, the line looks like: @example D/@var{name}/@var{filler1}/@var{filler2}/@var{filler3}/@var{filler4} @end example @noindent where @var{name} is the name of the subdirectory, and all the @var{filler} fields should be silently ignored, for future expansion. Programs which modify @code{Entries} files should preserve these fields. The lines in the @file{Entries} file can be in any order. @cindex Entries.Log file, in CVS directory @cindex CVS/Entries.Log file @item Entries.Log This file does not record any information beyond that in @file{Entries}, but it does provide a way to update the information without having to rewrite the entire @file{Entries} file, including the ability to preserve the information even if the program writing @file{Entries} and @file{Entries.Log} abruptly aborts. Programs which are reading the @file{Entries} file should also check for @file{Entries.Log}. If the latter exists, they should read @file{Entries} and then apply the changes mentioned in @file{Entries.Log}. After applying the changes, the recommended practice is to rewrite @file{Entries} and then delete @file{Entries.Log}. The format of a line in @file{Entries.Log} is a single character command followed by a space followed by a line in the format specified for a line in @file{Entries}. The single character command is @samp{A} to indicate that the entry is being added, @samp{R} to indicate that the entry is being removed, or any other character to indicate that the entire line in @file{Entries.Log} should be silently ignored (for future expansion). If the second character of the line in @file{Entries.Log} is not a space, then it was written by an older version of @sc{cvs} (not documented here). Programs which are writing rather than reading can safely ignore @file{Entries.Log} if they so choose. @cindex Entries.Backup file, in CVS directory @cindex CVS/Entries.Backup file @item Entries.Backup This is a temporary file. Recommended usage is to write a new entries file to @file{Entries.Backup}, and then to rename it (atomically, where possible) to @file{Entries}. @cindex Entries.Static file, in CVS directory @cindex CVS/Entries.Static file @item Entries.Static The only relevant thing about this file is whether it exists or not. If it exists, then it means that only part of a directory was gotten and @sc{cvs} will not create additional files in that directory. To clear it, use the @code{update} command with the @samp{-d} option, which will get the additional files and remove @file{Entries.Static}. @c FIXME: This needs to be better documented, in places @c other than Working Directory Storage. @c FIXCVS: The fact that this setting exists needs to @c be more visible to the user. For example "cvs @c status foo", in the case where the file would be @c gotten except for Entries.Static, might say @c something to distinguish this from other cases. @c One thing that periodically gets suggested is to @c have "cvs update" print something when it skips @c files due to Entries.Static, but IMHO that kind of @c noise pretty much makes the Entries.Static feature @c useless. @cindex Tag file, in CVS directory @cindex CVS/Tag file @cindex Sticky tags/dates, per-directory @cindex Per-directory sticky tags/dates @item Tag This file contains per-directory sticky tags or dates. The first character is @samp{T} for a branch tag, @samp{N} for a non-branch tag, or @samp{D} for a date, or another character to mean the file should be silently ignored, for future expansion. This character is followed by the tag or date. Note that per-directory sticky tags or dates are used for things like applying to files which are newly added; they might not be the same as the sticky tags or dates on individual files. For general information on sticky tags and dates, see @ref{Sticky tags}. @c FIXME: This needs to be much better documented, @c preferably not in the context of "working directory @c storage". @c FIXME: The Sticky tags node needs to discuss, or xref to @c someplace which discusses, per-directory sticky @c tags and the distinction with per-file sticky tags. @cindex Notify file, in CVS directory @cindex CVS/Notify file @item Notify This file stores notifications (for example, for @code{edit} or @code{unedit}) which have not yet been sent to the server. Its format is not yet documented here. @cindex Notify.tmp file, in CVS directory @cindex CVS/Notify.tmp file @item Notify.tmp This file is to @file{Notify} as @file{Entries.Backup} is to @file{Entries}. That is, to write @file{Notify}, first write the new contents to @file{Notify.tmp} and then (atomically where possible), rename it to @file{Notify}. @cindex Base directory, in CVS directory @cindex CVS/Base directory @item Base If watches are in use, then an @code{edit} command stores the original copy of the file in the @file{Base} directory. This allows the @code{unedit} command to operate even if it is unable to communicate with the server. @cindex Baserev file, in CVS directory @cindex CVS/Baserev file @item Baserev The file lists the revision for each of the files in the @file{Base} directory. The format is: @example B@var{name}/@var{rev}/@var{expansion} @end example @noindent where @var{expansion} should be ignored, to allow for future expansion. @cindex Baserev.tmp file, in CVS directory @cindex CVS/Baserev.tmp file @item Baserev.tmp This file is to @file{Baserev} as @file{Entries.Backup} is to @file{Entries}. That is, to write @file{Baserev}, first write the new contents to @file{Baserev.tmp} and then (atomically where possible), rename it to @file{Baserev}. @cindex Template file, in CVS directory @cindex CVS/Template file @item Template This file contains the template specified by the @file{rcsinfo} file (@pxref{rcsinfo}). It is only used by the client; the non-client/server @sc{cvs} consults @file{rcsinfo} directly. @end table @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Intro administrative files @section The administrative files @cindex Administrative files (intro) @cindex Modules file @cindex CVSROOT, module name @cindex Defining modules (intro) @c FIXME: this node should be reorganized into "general @c information about admin files" and put the "editing @c admin files" stuff up front rather than jumping into @c the details of modules right away. Then the @c Administrative files node can go away, the information @c on each admin file distributed to a place appropriate @c to its function, and this node can contain a table @c listing each file and a @ref to its detailed description. The directory @file{$CVSROOT/CVSROOT} contains some @dfn{administrative files}. @xref{Administrative files}, for a complete description. You can use @sc{cvs} without any of these files, but some commands work better when at least the @file{modules} file is properly set up. The most important of these files is the @file{modules} file. It defines all modules in the repository. This is a sample @file{modules} file. @c FIXME: The CVSROOT line is a goofy example now that @c mkmodules doesn't exist. @example CVSROOT CVSROOT modules CVSROOT modules cvs gnu/cvs rcs gnu/rcs diff gnu/diff tc yoyodyne/tc @end example The @file{modules} file is line oriented. In its simplest form each line contains the name of the module, whitespace, and the directory where the module resides. The directory is a path relative to @code{$CVSROOT}. The last four lines in the example above are examples of such lines. @c FIXME: might want to introduce the concept of options in modules file @c (the old example which was here, -i mkmodules, is obsolete). The line that defines the module called @samp{modules} uses features that are not explained here. @xref{modules}, for a full explanation of all the available features. @c FIXME: subsection without node is bogus @subsection Editing administrative files @cindex Editing administrative files @cindex Administrative files, editing them You edit the administrative files in the same way that you would edit any other module. Use @samp{cvs checkout CVSROOT} to get a working copy, edit it, and commit your changes in the normal way. It is possible to commit an erroneous administrative file. You can often fix the error and check in a new revision, but sometimes a particularly bad error in the administrative file makes it impossible to commit new revisions. @c @xref{Bad administrative files} for a hint @c about how to solve such situations. @c -- administrative file checking-- @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Multiple repositories @section Multiple repositories @cindex Multiple repositories @cindex Repositories, multiple @cindex Many repositories @cindex Parallel repositories @cindex Disjoint repositories @cindex CVSROOT, multiple repositories In some situations it is a good idea to have more than one repository, for instance if you have two development groups that work on separate projects without sharing any code. All you have to do to have several repositories is to specify the appropriate repository, using the @code{CVSROOT} environment variable, the @samp{-d} option to @sc{cvs}, or (once you have checked out a working directory) by simply allowing @sc{cvs} to use the repository that was used to check out the working directory (@pxref{Specifying a repository}). The big advantage of having multiple repositories is that they can reside on different servers. With @sc{cvs} version 1.10, a single command cannot recurse into directories from different repositories. With development versions of @sc{cvs}, you can check out code from multiple servers into your working directory. @sc{cvs} will recurse and handle all the details of making connections to as many server machines as necessary to perform the requested command. Here is an example of how to set up a working directory: @example cvs -d server1:/cvs co dir1 cd dir1 cvs -d server2:/root co sdir cvs update @end example The @code{cvs co} commands set up the working directory, and then the @code{cvs update} command will contact server2, to update the dir1/sdir subdirectory, and server1, to update everything else. @c FIXME: Does the FAQ have more about this? I have a @c dim recollection, but I'm too lazy to check right now. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Creating a repository @section Creating a repository @cindex Repository, setting up @cindex Creating a repository @cindex Setting up a repository To set up a @sc{cvs} repository, first choose the machine and disk on which you want to store the revision history of the source files. CPU and memory requirements are modest, so most machines should be adequate. For details see @ref{Server requirements}. @c Possible that we should be providing a quick rule of @c thumb, like the 32M memory for the server. That @c might increase the number of people who are happy @c with the answer, without following the xref. To estimate disk space requirements, if you are importing RCS files from another system, the size of those files is the approximate initial size of your repository, or if you are starting without any version history, a rule of thumb is to allow for the server approximately three times the size of the code to be under @sc{cvs} for the repository (you will eventually outgrow this, but not for a while). On the machines on which the developers will be working, you'll want disk space for approximately one working directory for each developer (either the entire tree or a portion of it, depending on what each developer uses). The repository should be accessible (directly or via a networked file system) from all machines which want to use @sc{cvs} in server or local mode; the client machines need not have any access to it other than via the @sc{cvs} protocol. It is not possible to use @sc{cvs} to read from a repository which one only has read access to; @sc{cvs} needs to be able to create lock files (@pxref{Concurrency}). @cindex init (subcommand) To create a repository, run the @code{cvs init} command. It will set up an empty repository in the @sc{cvs} root specified in the usual way (@pxref{Repository}). For example, @example cvs -d /usr/local/cvsroot init @end example @code{cvs init} is careful to never overwrite any existing files in the repository, so no harm is done if you run @code{cvs init} on an already set-up repository. @code{cvs init} will enable history logging; if you don't want that, remove the history file after running @code{cvs init}. @xref{history file}. @node Backing up @section Backing up a repository @cindex Repository, backing up @cindex Backing up, repository There is nothing particularly magical about the files in the repository; for the most part it is possible to back them up just like any other files. However, there are a few issues to consider. @cindex Locks, cvs, and backups @cindex #cvs.rfl, and backups The first is that to be paranoid, one should either not use @sc{cvs} during the backup, or have the backup program lock @sc{cvs} while doing the backup. To not use @sc{cvs}, you might forbid logins to machines which can access the repository, turn off your @sc{cvs} server, or similar mechanisms. The details would depend on your operating system and how you have @sc{cvs} set up. To lock @sc{cvs}, you would create @file{#cvs.rfl} locks in each repository directory. See @ref{Concurrency}, for more on @sc{cvs} locks. Having said all this, if you just back up without any of these precautions, the results are unlikely to be particularly dire. Restoring from backup, the repository might be in an inconsistent state, but this would not be particularly hard to fix manually. When you restore a repository from backup, assuming that changes in the repository were made after the time of the backup, working directories which were not affected by the failure may refer to revisions which no longer exist in the repository. Trying to run @sc{cvs} in such directories will typically produce an error message. One way to get those changes back into the repository is as follows: @itemize @bullet @item Get a new working directory. @item Copy the files from the working directory from before the failure over to the new working directory (do not copy the contents of the @file{CVS} directories, of course). @item Working in the new working directory, use commands such as @code{cvs update} and @code{cvs diff} to figure out what has changed, and then when you are ready, commit the changes into the repository. @end itemize @node Moving a repository @section Moving a repository @cindex Repository, moving @cindex Moving a repository @cindex Copying a repository Just as backing up the files in the repository is pretty much like backing up any other files, if you need to move a repository from one place to another it is also pretty much like just moving any other collection of files. The main thing to consider is that working directories point to the repository. The simplest way to deal with a moved repository is to just get a fresh working directory after the move. Of course, you'll want to make sure that the old working directory had been checked in before the move, or you figured out some other way to make sure that you don't lose any changes. If you really do want to reuse the existing working directory, it should be possible with manual surgery on the @file{CVS/Repository} files. You can see @ref{Working directory storage}, for information on the @file{CVS/Repository} and @file{CVS/Root} files, but unless you are sure you want to bother, it probably isn't worth it. @c FIXME: Surgery on CVS/Repository should be avoided @c by making RELATIVE_REPOS the default. @c FIXME-maybe: might want some documented way to @c change the CVS/Root files in some particular tree. @c But then again, I don't know, maybe just having @c people do this in perl/shell/&c isn't so bad... @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Remote repositories @section Remote repositories @cindex Repositories, remote @cindex Remote repositories @cindex Client/Server Operation @cindex Server, CVS @cindex Remote repositories, port specification @cindex Repositories, remote, port specification @cindex Client/Server Operation, port specification @cindex pserver (client/server connection method), port specification @cindex kserver (client/server connection method), port specification @cindex gserver (client/server connection method), port specification @cindex port, specifying for remote repositories Your working copy of the sources can be on a different machine than the repository. Using @sc{cvs} in this manner is known as @dfn{client/server} operation. You run @sc{cvs} on a machine which can mount your working directory, known as the @dfn{client}, and tell it to communicate to a machine which can mount the repository, known as the @dfn{server}. Generally, using a remote repository is just like using a local one, except that the format of the repository name is: @example [:@var{method}:][[@var{user}][:@var{password}]@@]@var{hostname}[:[@var{port}]]/path/to/repository @end example Specifying a password in the repository name is not recommended during checkout, since this will cause @sc{cvs} to store a cleartext copy of the password in each created directory. @code{cvs login} first instead (@pxref{Password authentication client}). The details of exactly what needs to be set up depend on how you are connecting to the server. If @var{method} is not specified, and the repository name contains @samp{:}, then the default is @code{ext} or @code{server}, depending on your platform; both are described in @ref{Connecting via rsh}. @c Should we try to explain which platforms are which? @c Platforms like unix and VMS, which only allow @c privileged programs to bind to sockets <1024 lose on @c :server: @c Platforms like Mac and VMS, whose rsh program is @c unusable or nonexistent, lose on :ext: @c Platforms like OS/2 and NT probably could plausibly @c default either way (modulo -b troubles). @c FIXME: We need to have a better way of explaining @c what method to use. This presentation totally @c obscures the fact that :ext: and CVS_RSH is the way to @c use SSH, for example. Plus it incorrectly implies @c that you need an @code{rsh} binary on the client to use @c :server:. @c Also note that rsh not pserver is the right choice if you want @c users to be able to create their own repositories @c (because of the --allow-root related issues). @menu * Server requirements:: Memory and other resources for servers * Connecting via rsh:: Using the @code{rsh} program to connect * Password authenticated:: Direct connections using passwords * GSSAPI authenticated:: Direct connections using GSSAPI * Kerberos authenticated:: Direct connections with kerberos * Connecting via fork:: Using a forked @code{cvs server} to connect @end menu @node Server requirements @subsection Server requirements The quick answer to what sort of machine is suitable as a server is that requirements are modest---a server with 32M of memory or even less can handle a fairly large source tree with a fair amount of activity. @c Say something about CPU speed too? I'm even less sure @c what to say on that subject... The real answer, of course, is more complicated. Estimating the known areas of large memory consumption should be sufficient to estimate memory requirements. There are two such areas documented here; other memory consumption should be small by comparison (if you find that is not the case, let us know, as described in @ref{BUGS}, so we can update this documentation). The first area of big memory consumption is large checkouts, when using the @sc{cvs} server. The server consists of two processes for each client that it is serving. Memory consumption on the child process should remain fairly small. Memory consumption on the parent process, particularly if the network connection to the client is slow, can be expected to grow to slightly more than the size of the sources in a single directory, or two megabytes, whichever is larger. @c "two megabytes" of course is SERVER_HI_WATER. But @c we don't mention that here because we are @c documenting the default configuration of CVS. If it @c is a "standard" thing to change that value, it @c should be some kind of run-time configuration. @c @c See cvsclient.texi for more on the design decision @c to not have locks in place while waiting for the @c client, which is what results in memory consumption @c as high as this. Multiplying the size of each @sc{cvs} server by the number of servers which you expect to have active at one time should give an idea of memory requirements for the server. For the most part, the memory consumed by the parent process probably can be swap space rather than physical memory. @c Has anyone verified that notion about swap space? @c I say it based pretty much on guessing that the @c ->text of the struct buffer_data only gets accessed @c in a first in, first out fashion, but I haven't @c looked very closely. @c What about disk usage in /tmp on the server? I think that @c it can be substantial, but I haven't looked at this @c again and tried to figure it out ("cvs import" is @c probably the worst case...). The second area of large memory consumption is @code{diff}, when checking in large files. This is required even for binary files. The rule of thumb is to allow about ten times the size of the largest file you will want to check in, although five times may be adequate. For example, if you want to check in a file which is 10 megabytes, you should have 100 megabytes of memory on the machine doing the checkin (the server machine for client/server, or the machine running @sc{cvs} for non-client/server). This can be swap space rather than physical memory. Because the memory is only required briefly, there is no particular need to allow memory for more than one such checkin at a time. @c The 5-10 times rule of thumb is from Paul Eggert for @c GNU diff. I don't think it is in the GNU diff @c manual or anyplace like that. @c @c Probably we could be saying more about @c non-client/server CVS. @c I would guess for non-client/server CVS in an NFS @c environment the biggest issues are the network and @c the NFS server. Resource consumption for the client is even more modest---any machine with enough capacity to run the operating system in question should have little trouble. @c Is that true? I think the client still wants to @c (bogusly) store entire files in memory at times. For information on disk space requirements, see @ref{Creating a repository}. @node Connecting via rsh @subsection Connecting with rsh @cindex rsh @sc{cvs} uses the @samp{rsh} protocol to perform these operations, so the remote user host needs to have a @file{.rhosts} file which grants access to the local user. Note that the program that @sc{cvs} uses for this purpose may be specified using the @file{--with-rsh} flag to configure. For example, suppose you are the user @samp{mozart} on the local machine @samp{toe.example.com}, and the server machine is @samp{faun.example.org}. On faun, put the following line into the file @file{.rhosts} in @samp{bach}'s home directory: @example toe.example.com mozart @end example @noindent Then test that @samp{rsh} is working with @example rsh -l bach faun.example.org 'echo $PATH' @end example @cindex CVS_SERVER, environment variable Next you have to make sure that @code{rsh} will be able to find the server. Make sure that the path which @code{rsh} printed in the above example includes the directory containing a program named @code{cvs} which is the server. You need to set the path in @file{.bashrc}, @file{.cshrc}, etc., not @file{.login} or @file{.profile}. Alternately, you can set the environment variable @code{CVS_SERVER} on the client machine to the filename of the server you want to use, for example @file{/usr/local/bin/cvs-1.6}. @c FIXME: there should be a way to specify the @c program in CVSROOT, not CVS_SERVER, so that one can use @c different ones for different roots. e.g. ":server;cvs=cvs-1.6:" @c instead of ":server:". There is no need to edit @file{inetd.conf} or start a @sc{cvs} server daemon. @cindex :server:, setting up @cindex :ext:, setting up @cindex Kerberos, using kerberized rsh @cindex SSH (rsh replacement) @cindex rsh replacements (Kerberized, SSH, &c) There are two access methods that you use in @code{CVSROOT} for rsh. @code{:server:} specifies an internal rsh client, which is supported only by some @sc{cvs} ports. @code{:ext:} specifies an external rsh program. By default this is @code{rsh} (unless otherwise specified by the @file{--with-rsh} flag to configure) but you may set the @code{CVS_RSH} environment variable to invoke another program which can access the remote server (for example, @code{remsh} on HP-UX 9 because @code{rsh} is something different). It must be a program which can transmit data to and from the server without modifying it; for example the Windows NT @code{rsh} is not suitable since it by default translates between CRLF and LF. The OS/2 @sc{cvs} port has a hack to pass @samp{-b} to @code{rsh} to get around this, but since this could potentially cause problems for programs other than the standard @code{rsh}, it may change in the future. If you set @code{CVS_RSH} to @code{SSH} or some other rsh replacement, the instructions in the rest of this section concerning @file{.rhosts} and so on are likely to be inapplicable; consult the documentation for your rsh replacement. @c FIXME: there should be a way to specify the @c program in CVSROOT, not CVS_RSH, so that one can use @c different ones for different roots. e.g. ":ext;rsh=remsh:" @c instead of ":ext:". @c See also the comment in src/client.c for rationale @c concerning "rsh" being the default and never @c "remsh". Continuing our example, supposing you want to access the module @file{foo} in the repository @file{/usr/local/cvsroot/}, on machine @file{faun.example.org}, you are ready to go: @example cvs -d :ext:bach@@faun.example.org:/usr/local/cvsroot checkout foo @end example @noindent (The @file{bach@@} can be omitted if the username is the same on both the local and remote hosts.) @c Should we mention "rsh host echo hi" and "rsh host @c cat" (the latter followed by typing text and ^D) @c as troubleshooting techniques? Probably yes @c (people tend to have trouble setting this up), @c but this kind of thing can be hard to spell out. @node Password authenticated @subsection Direct connection with password authentication The @sc{cvs} client can also connect to the server using a password protocol. This is particularly useful if using @code{rsh} is not feasible (for example, the server is behind a firewall), and Kerberos also is not available. To use this method, it is necessary to make some adjustments on both the server and client sides. @menu * Password authentication server:: Setting up the server * Password authentication client:: Using the client * Password authentication security:: What this method does and does not do @end menu @node Password authentication server @subsubsection Setting up the server for password authentication First of all, you probably want to tighten the permissions on the @file{$CVSROOT} and @file{$CVSROOT/CVSROOT} directories. See @ref{Password authentication security}, for more details. @cindex pserver (subcommand) @cindex Remote repositories, port specification @cindex Repositories, remote, port specification @cindex Client/Server Operation, port specification @cindex pserver (client/server connection method), port specification @cindex kserver (client/server connection method), port specification @cindex gserver (client/server connection method), port specification @cindex port, specifying for remote repositories @cindex Password server, setting up @cindex Authenticating server, setting up @cindex inetd, configuring for pserver @cindex xinetd, configuring for pserver @c FIXME: this isn't quite right regarding port @c numbers; CVS looks up "cvspserver" in @c /etc/services (on unix, but what about non-unix?). On the server side, the file @file{/etc/inetd.conf} needs to be edited so @code{inetd} knows to run the command @code{cvs pserver} when it receives a connection on the right port. By default, the port number is 2401; it would be different if your client were compiled with @code{CVS_AUTH_PORT} defined to something else, though. This can also be specified in the CVSROOT variable (@pxref{Remote repositories}) or overridden with the CVS_CLIENT_PORT environment variable (@pxref{Environment variables}). If your @code{inetd} allows raw port numbers in @file{/etc/inetd.conf}, then the following (all on a single line in @file{inetd.conf}) should be sufficient: @example 2401 stream tcp nowait root /usr/local/bin/cvs cvs -f --allow-root=/usr/cvsroot pserver @end example @noindent (You could also use the @samp{-T} option to specify a temporary directory.) The @samp{--allow-root} option specifies the allowable @sc{cvsroot} directory. Clients which attempt to use a different @sc{cvsroot} directory will not be allowed to connect. If there is more than one @sc{cvsroot} directory which you want to allow, repeat the option. (Unfortunately, many versions of @code{inetd} have very small limits on the number of arguments and/or the total length of the command. The usual solution to this problem is to have @code{inetd} run a shell script which then invokes @sc{cvs} with the necessary arguments.) If your @code{inetd} wants a symbolic service name instead of a raw port number, then put this in @file{/etc/services}: @example cvspserver 2401/tcp @end example @noindent and put @code{cvspserver} instead of @code{2401} in @file{inetd.conf}. If your system uses @code{xinetd} instead of @code{inetd}, the procedure is slightly different. Create a file called @file{/etc/xinetd.d/cvspserver} containing the following: @example service cvspserver @{ port = 2401 socket_type = stream protocol = tcp wait = no user = root passenv = PATH server = /usr/local/bin/cvs server_args = -f --allow-root=/usr/cvsroot pserver @} @end example @noindent (If @code{cvspserver} is defined in @file{/etc/services}, you can omit the @code{port} line.) Once the above is taken care of, restart your @code{inetd}, or do whatever is necessary to force it to reread its initialization files. If you are having trouble setting this up, see @ref{Connection}. @cindex CVS passwd file @cindex passwd (admin file) Because the client stores and transmits passwords in cleartext (almost---see @ref{Password authentication security}, for details), a separate @sc{cvs} password file is generally used, so people don't compromise their regular passwords when they access the repository. This file is @file{$CVSROOT/CVSROOT/passwd} (@pxref{Intro administrative files}). It uses a colon-separated format, similar to @file{/etc/passwd} on Unix systems, except that it has fewer fields: @sc{cvs} username, optional password, and an optional system username for @sc{cvs} to run as if authentication succeeds. Here is an example @file{passwd} file with five entries: @example anonymous: bach:ULtgRLXo7NRxs spwang:1sOp854gDF3DY melissa:tGX1fS8sun6rY:pubcvs qproj:XR4EZcEs0szik:pubcvs @end example @noindent (The passwords are encrypted according to the standard Unix @code{crypt()} function, so it is possible to paste in passwords directly from regular Unix @file{/etc/passwd} files.) The first line in the example will grant access to any @sc{cvs} client attempting to authenticate as user @code{anonymous}, no matter what password they use, including an empty password. (This is typical for sites granting anonymous read-only access; for information on how to do the "read-only" part, see @ref{Read-only access}.) The second and third lines will grant access to @code{bach} and @code{spwang} if they supply their respective plaintext passwords. @cindex User aliases The fourth line will grant access to @code{melissa}, if she supplies the correct password, but her @sc{cvs} operations will actually run on the server side under the system user @code{pubcvs}. Thus, there need not be any system user named @code{melissa}, but there @emph{must} be one named @code{pubcvs}. The fifth line shows that system user identities can be shared: any client who successfully authenticates as @code{qproj} will actually run as @code{pubcvs}, just as @code{melissa} does. That way you could create a single, shared system user for each project in your repository, and give each developer their own line in the @file{$CVSROOT/CVSROOT/passwd} file. The @sc{cvs} username on each line would be different, but the system username would be the same. The reason to have different @sc{cvs} usernames is that @sc{cvs} will log their actions under those names: when @code{melissa} commits a change to a project, the checkin is recorded in the project's history under the name @code{melissa}, not @code{pubcvs}. And the reason to have them share a system username is so that you can arrange permissions in the relevant area of the repository such that only that account has write-permission there. If the system-user field is present, all password-authenticated @sc{cvs} commands run as that user; if no system user is specified, @sc{cvs} simply takes the @sc{cvs} username as the system username and runs commands as that user. In either case, if there is no such user on the system, then the @sc{cvs} operation will fail (regardless of whether the client supplied a valid password). The password and system-user fields can both be omitted (and if the system-user field is omitted, then also omit the colon that would have separated it from the encrypted password). For example, this would be a valid @file{$CVSROOT/CVSROOT/passwd} file: @example anonymous::pubcvs fish:rKa5jzULzmhOo:kfogel sussman:1sOp854gDF3DY @end example @noindent When the password field is omitted or empty, then the client's authentication attempt will succeed with any password, including the empty string. However, the colon after the @sc{cvs} username is always necessary, even if the password is empty. @sc{cvs} can also fall back to use system authentication. When authenticating a password, the server first checks for the user in the @file{$CVSROOT/CVSROOT/passwd} file. If it finds the user, it will use that entry for authentication as described above. But if it does not find the user, or if the @sc{cvs} @file{passwd} file does not exist, then the server can try to authenticate the username and password using the operating system's user-lookup routines (this "fallback" behavior can be disabled by setting @code{SystemAuth=no} in the @sc{cvs} @file{config} file, @pxref{config}). The default fallback behaviour is to look in @file{/etc/passwd} for this system password unless your system has PAM (Pluggable Authentication Modules) and your @sc{cvs} server executable was configured to use it at compile time (using @code{./configure --enable-pam} - see the INSTALL file for more). In this case, PAM will be consulted instead. This means that @sc{cvs} can be configured to use any password authentication source PAM can be configured to use (possibilities include a simple UNIX password, NIS, LDAP, and others) in its global configuration file (usually @file{/etc/pam.conf} or possibly @file{/etc/pam.d/cvs}). See your PAM documentation for more details on PAM configuration. Note that PAM is an experimental feature in @sc{cvs} and feedback is encouraged. Please send a mail to one of the @sc{cvs} mailing lists (@code{info-cvs@@gnu.org} or @code{bug-cvs@@gnu.org}) if you use the @sc{cvs} PAM support. @strong{WARNING: Using PAM gives the system administrator much more flexibility about how @sc{cvs} users are authenticated but no more security than other methods. See below for more.} CVS needs an "auth" and "account" module in the PAM configuration file. A typical PAM configuration would therefore have the following lines in @file{/etc/pam.conf} to emulate the standard @sc{cvs} system @file{/etc/passwd} authentication: @example cvs auth required pam_unix.so cvs account required pam_unix.so @end example The the equivalent @file{/etc/pam.d/cvs} would contain @example auth required pam_unix.so account required pam_unix.so @end example Some systems require a full path to the module so that @file{pam_unix.so} (Linux) would become something like @file{/usr/lib/security/$ISA/pam_unix.so.1} (Sun Solaris). See the @file{contrib/pam} subdirectory of the @sc{cvs} source distribution for further example configurations. The PAM service name given above as "cvs" is just the service name in the default configuration amd can be set using @code{./configure --with-hardcoded-pam-service-name=} before compiling. @sc{cvs} can also be configured to use whatever name it is invoked as as its PAM service name using @code{./configure --without-hardcoded-pam-service-name}, but this feature should not be used if you may not have control of the name @sc{cvs} will be invoked as. Be aware, also, that falling back to system authentication might be a security risk: @sc{cvs} operations would then be authenticated with that user's regular login password, and the password flies across the network in plaintext. See @ref{Password authentication security} for more on this. This may be more of a problem with PAM authentication because it is likely that the source of the system password is some central authentication service like LDAP which is also used to authenticate other services. On the other hand, PAM makes it very easy to change your password regularly. If they are given the option of a one-password system for all of their activities, users are often more willing to change their password on a regular basis. In the non-PAM configuration where the password is stored in the @file{CVSROOT/passwd} file, it is difficult to change passwords on a regular basis since only administrative users (or in some cases processes that act as an administrative user) are typicaly given access to modify this file. Either there needs to be some hand-crafted web page or set-uid program to update the file, or the update needs to be done by submitting a request to an administrator to perform the duty by hand. In the first case, having to remember to update a separate password on a periodic basis can be difficult. In the second case, the manual nature of the change will typically mean that the password will not be changed unless it is absolutely necessary. Note that PAM administrators should probably avoid configuring one-time-passwords (OTP) for @sc{cvs} authentication/authorization. If OTPs are desired, the administrator may wish to encourage the use of one of the other Client/Server access methods. See the section on @pxref{Remote repositories} for a list of other methods. Right now, the only way to put a password in the @sc{cvs} @file{passwd} file is to paste it there from somewhere else. Someday, there may be a @code{cvs passwd} command. Unlike many of the files in @file{$CVSROOT/CVSROOT}, it is normal to edit the @file{passwd} file in-place, rather than via @sc{cvs}. This is because of the possible security risks of having the @file{passwd} file checked out to people's working copies. If you do want to include the @file{passwd} file in checkouts of @file{$CVSROOT/CVSROOT}, see @ref{checkoutlist}. @c We might also suggest using the @code{htpasswd} command @c from freely available web servers as well, but that @c would open up a can of worms in that the users next @c questions are likely to be "where do I get it?" and @c "how do I use it?" @c Also note that htpasswd, at least the version I had, @c likes to clobber the third field. @node Password authentication client @subsubsection Using the client with password authentication @cindex Login (subcommand) @cindex Password client, using @cindex Authenticated client, using @cindex :pserver:, setting up To run a @sc{cvs} command on a remote repository via the password-authenticating server, one specifies the @code{pserver} protocol, optional username, repository host, an optional port number, and path to the repository. For example: @example cvs -d :pserver:faun.example.org:/usr/local/cvsroot checkout someproj @end example @noindent or @example CVSROOT=:pserver:bach@@faun.example.org:2401/usr/local/cvsroot cvs checkout someproj @end example However, unless you're connecting to a public-access repository (i.e., one where that username doesn't require a password), you'll need to supply a password or @dfn{log in} first. Logging in verifies your password with the repository and stores it in a file. It's done with the @code{login} command, which will prompt you interactively for the password if you didn't supply one as part of @var{$CVSROOT}: @example cvs -d :pserver:bach@@faun.example.org:/usr/local/cvsroot login CVS password: @end example @noindent or @example cvs -d :pserver:bach:p4ss30rd@@faun.example.org:/usr/local/cvsroot login @end example After you enter the password, @sc{cvs} verifies it with the server. If the verification succeeds, then that combination of username, host, repository, and password is permanently recorded, so future transactions with that repository won't require you to run @code{cvs login}. (If verification fails, @sc{cvs} will exit complaining that the password was incorrect, and nothing will be recorded.) The records are stored, by default, in the file @file{$HOME/.cvspass}. That file's format is human-readable, and to a degree human-editable, but note that the passwords are not stored in cleartext---they are trivially encoded to protect them from "innocent" compromise (i.e., inadvertent viewing by a system administrator or other non-malicious person). @cindex CVS_PASSFILE, environment variable You can change the default location of this file by setting the @code{CVS_PASSFILE} environment variable. If you use this variable, make sure you set it @emph{before} @code{cvs login} is run. If you were to set it after running @code{cvs login}, then later @sc{cvs} commands would be unable to look up the password for transmission to the server. Once you have logged in, all @sc{cvs} commands using that remote repository and username will authenticate with the stored password. So, for example @example cvs -d :pserver:bach@@faun.example.org:/usr/local/cvsroot checkout foo @end example @noindent should just work (unless the password changes on the server side, in which case you'll have to re-run @code{cvs login}). Note that if the @samp{:pserver:} were not present in the repository specification, @sc{cvs} would assume it should use @code{rsh} to connect with the server instead (@pxref{Connecting via rsh}). Of course, once you have a working copy checked out and are running @sc{cvs} commands from within it, there is no longer any need to specify the repository explicitly, because @sc{cvs} can deduce the repository from the working copy's @file{CVS} subdirectory. @c FIXME: seems to me this needs somewhat more @c explanation. @cindex Logout (subcommand) The password for a given remote repository can be removed from the @code{CVS_PASSFILE} by using the @code{cvs logout} command. @node Password authentication security @subsubsection Security considerations with password authentication @cindex Security, of pserver The passwords are stored on the client side in a trivial encoding of the cleartext, and transmitted in the same encoding. The encoding is done only to prevent inadvertent password compromises (i.e., a system administrator accidentally looking at the file), and will not prevent even a naive attacker from gaining the password. @c FIXME: The bit about "access to the repository @c implies general access to the system is *not* specific @c to pserver; it applies to kerberos and SSH and @c everything else too. Should reorganize the @c documentation to make this clear. The separate @sc{cvs} password file (@pxref{Password authentication server}) allows people to use a different password for repository access than for login access. On the other hand, once a user has non-read-only access to the repository, she can execute programs on the server system through a variety of means. Thus, repository access implies fairly broad system access as well. It might be possible to modify @sc{cvs} to prevent that, but no one has done so as of this writing. @c OpenBSD uses chroot() and copies the repository to @c provide anonymous read-only access (for details see @c http://www.openbsd.org/anoncvs.shar). While this @c closes the most obvious holes, I'm not sure it @c closes enough holes to recommend it (plus it is @c *very* easy to accidentally screw up a setup of this @c type). Note that because the @file{$CVSROOT/CVSROOT} directory contains @file{passwd} and other files which are used to check security, you must control the permissions on this directory as tightly as the permissions on @file{/etc}. The same applies to the @file{$CVSROOT} directory itself and any directory above it in the tree. Anyone who has write access to such a directory will have the ability to become any user on the system. Note that these permissions are typically tighter than you would use if you are not using pserver. @c TODO: Would be really nice to document/implement a @c scheme where the CVS server can run as some non-root @c user, e.g. "cvs". CVSROOT/passwd would contain a @c bunch of entries of the form foo:xxx:cvs (or the "cvs" @c would be implicit). This would greatly reduce @c security risks such as those hinted at in the @c previous paragraph. I think minor changes to CVS @c might be required but mostly this would just need @c someone who wants to play with it, document it, &c. In summary, anyone who gets the password gets repository access (which may imply some measure of general system access as well). The password is available to anyone who can sniff network packets or read a protected (i.e., user read-only) file. If you want real security, get Kerberos. @node GSSAPI authenticated @subsection Direct connection with GSSAPI @cindex GSSAPI @cindex Security, GSSAPI @cindex :gserver:, setting up @cindex Kerberos, using :gserver: GSSAPI is a generic interface to network security systems such as Kerberos 5. If you have a working GSSAPI library, you can have @sc{cvs} connect via a direct @sc{tcp} connection, authenticating with GSSAPI. To do this, @sc{cvs} needs to be compiled with GSSAPI support; when configuring @sc{cvs} it tries to detect whether GSSAPI libraries using kerberos version 5 are present. You can also use the @file{--with-gssapi} flag to configure. The connection is authenticated using GSSAPI, but the message stream is @emph{not} authenticated by default. You must use the @code{-a} global option to request stream authentication. The data transmitted is @emph{not} encrypted by default. Encryption support must be compiled into both the client and the server; use the @file{--enable-encrypt} configure option to turn it on. You must then use the @code{-x} global option to request encryption. GSSAPI connections are handled on the server side by the same server which handles the password authentication server; see @ref{Password authentication server}. If you are using a GSSAPI mechanism such as Kerberos which provides for strong authentication, you will probably want to disable the ability to authenticate via cleartext passwords. To do so, create an empty @file{CVSROOT/passwd} password file, and set @code{SystemAuth=no} in the config file (@pxref{config}). The GSSAPI server uses a principal name of cvs/@var{hostname}, where @var{hostname} is the canonical name of the server host. You will have to set this up as required by your GSSAPI mechanism. To connect using GSSAPI, use @samp{:gserver:}. For example, @example cvs -d :gserver:faun.example.org:/usr/local/cvsroot checkout foo @end example @node Kerberos authenticated @subsection Direct connection with kerberos @cindex Kerberos, using :kserver: @cindex Security, kerberos @cindex :kserver:, setting up The easiest way to use kerberos is to use the kerberos @code{rsh}, as described in @ref{Connecting via rsh}. The main disadvantage of using rsh is that all the data needs to pass through additional programs, so it may be slower. So if you have kerberos installed you can connect via a direct @sc{tcp} connection, authenticating with kerberos. This section concerns the kerberos network security system, version 4. Kerberos version 5 is supported via the GSSAPI generic network security interface, as described in the previous section. To do this, @sc{cvs} needs to be compiled with kerberos support; when configuring @sc{cvs} it tries to detect whether kerberos is present or you can use the @file{--with-krb4} flag to configure. The data transmitted is @emph{not} encrypted by default. Encryption support must be compiled into both the client and server; use the @file{--enable-encryption} configure option to turn it on. You must then use the @code{-x} global option to request encryption. @cindex CVS_CLIENT_PORT You need to edit @file{inetd.conf} on the server machine to run @code{cvs kserver}. The client uses port 1999 by default; if you want to use another port specify it in the @code{CVSROOT} (@pxref{Remote repositories}) or the @code{CVS_CLIENT_PORT} environment variable (@pxref{Environment variables}) on the client. @cindex kinit When you want to use @sc{cvs}, get a ticket in the usual way (generally @code{kinit}); it must be a ticket which allows you to log into the server machine. Then you are ready to go: @example cvs -d :kserver:faun.example.org:/usr/local/cvsroot checkout foo @end example Previous versions of @sc{cvs} would fall back to a connection via rsh; this version will not do so. @node Connecting via fork @subsection Connecting with fork @cindex fork, access method @cindex :fork:, setting up This access method allows you to connect to a repository on your local disk via the remote protocol. In other words it does pretty much the same thing as @code{:local:}, but various quirks, bugs and the like are those of the remote @sc{cvs} rather than the local @sc{cvs}. For day-to-day operations you might prefer either @code{:local:} or @code{:fork:}, depending on your preferences. Of course @code{:fork:} comes in particularly handy in testing or debugging @code{cvs} and the remote protocol. Specifically, we avoid all of the network-related setup/configuration, timeouts, and authentication inherent in the other remote access methods but still create a connection which uses the remote protocol. To connect using the @code{fork} method, use @samp{:fork:} and the pathname to your local repository. For example: @example cvs -d :fork:/usr/local/cvsroot checkout foo @end example @cindex CVS_SERVER, and :fork: As with @code{:ext:}, the server is called @samp{cvs} by default, or the value of the @code{CVS_SERVER} environment variable. @c --------------------------------------------------------------------- @node Read-only access @section Read-only repository access @cindex Read-only repository access @cindex readers (admin file) @cindex writers (admin file) It is possible to grant read-only repository access to people using the password-authenticated server (@pxref{Password authenticated}). (The other access methods do not have explicit support for read-only users because those methods all assume login access to the repository machine anyway, and therefore the user can do whatever local file permissions allow her to do.) A user who has read-only access can do only those @sc{cvs} operations which do not modify the repository, except for certain ``administrative'' files (such as lock files and the history file). It may be desirable to use this feature in conjunction with user-aliasing (@pxref{Password authentication server}). Unlike with previous versions of @sc{cvs}, read-only users should be able merely to read the repository, and not to execute programs on the server or otherwise gain unexpected levels of access. Or to be more accurate, the @emph{known} holes have been plugged. Because this feature is new and has not received a comprehensive security audit, you should use whatever level of caution seems warranted given your attitude concerning security. There are two ways to specify read-only access for a user: by inclusion, and by exclusion. "Inclusion" means listing that user specifically in the @file{$CVSROOT/CVSROOT/readers} file, which is simply a newline-separated list of users. Here is a sample @file{readers} file: @example melissa splotnik jrandom @end example @noindent (Don't forget the newline after the last user.) "Exclusion" means explicitly listing everyone who has @emph{write} access---if the file @example $CVSROOT/CVSROOT/writers @end example @noindent exists, then only those users listed in it have write access, and everyone else has read-only access (of course, even the read-only users still need to be listed in the @sc{cvs} @file{passwd} file). The @file{writers} file has the same format as the @file{readers} file. Note: if your @sc{cvs} @file{passwd} file maps cvs users onto system users (@pxref{Password authentication server}), make sure you deny or grant read-only access using the @emph{cvs} usernames, not the system usernames. That is, the @file{readers} and @file{writers} files contain cvs usernames, which may or may not be the same as system usernames. Here is a complete description of the server's behavior in deciding whether to grant read-only or read-write access: If @file{readers} exists, and this user is listed in it, then she gets read-only access. Or if @file{writers} exists, and this user is NOT listed in it, then she also gets read-only access (this is true even if @file{readers} exists but she is not listed there). Otherwise, she gets full read-write access. Of course there is a conflict if the user is listed in both files. This is resolved in the more conservative way, it being better to protect the repository too much than too little: such a user gets read-only access. @node Server temporary directory @section Temporary directories for the server @cindex Temporary directories, and server @cindex Server, temporary directories While running, the @sc{cvs} server creates temporary directories. They are named @example cvs-serv@var{pid} @end example @noindent where @var{pid} is the process identification number of the server. They are located in the directory specified by the @samp{-T} global option (@pxref{Global options}), the @code{TMPDIR} environment variable (@pxref{Environment variables}), or, failing that, @file{/tmp}. In most cases the server will remove the temporary directory when it is done, whether it finishes normally or abnormally. However, there are a few cases in which the server does not or cannot remove the temporary directory, for example: @itemize @bullet @item If the server aborts due to an internal server error, it may preserve the directory to aid in debugging @item If the server is killed in a way that it has no way of cleaning up (most notably, @samp{kill -KILL} on unix). @item If the system shuts down without an orderly shutdown, which tells the server to clean up. @end itemize In cases such as this, you will need to manually remove the @file{cvs-serv@var{pid}} directories. As long as there is no server running with process identification number @var{pid}, it is safe to do so. @c --------------------------------------------------------------------- @node Starting a new project @chapter Starting a project with CVS @cindex Starting a project with CVS @cindex Creating a project @comment --moduledb-- Because renaming files and moving them between directories is somewhat inconvenient, the first thing you do when you start a new project should be to think through your file organization. It is not impossible to rename or move files, but it does increase the potential for confusion and @sc{cvs} does have some quirks particularly in the area of renaming directories. @xref{Moving files}. What to do next depends on the situation at hand. @menu * Setting up the files:: Getting the files into the repository * Defining the module:: How to make a module of the files @end menu @c -- File permissions! @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Setting up the files @section Setting up the files The first step is to create the files inside the repository. This can be done in a couple of different ways. @c -- The contributed scripts @menu * From files:: This method is useful with old projects where files already exists. * From other version control systems:: Old projects where you want to preserve history from another system. * From scratch:: Creating a directory tree from scratch. @end menu @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node From files @subsection Creating a directory tree from a number of files @cindex Importing files When you begin using @sc{cvs}, you will probably already have several projects that can be put under @sc{cvs} control. In these cases the easiest way is to use the @code{import} command. An example is probably the easiest way to explain how to use it. If the files you want to install in @sc{cvs} reside in @file{@var{wdir}}, and you want them to appear in the repository as @file{$CVSROOT/yoyodyne/@var{rdir}}, you can do this: @example $ cd @var{wdir} $ cvs import -m "Imported sources" yoyodyne/@var{rdir} yoyo start @end example Unless you supply a log message with the @samp{-m} flag, @sc{cvs} starts an editor and prompts for a message. The string @samp{yoyo} is a @dfn{vendor tag}, and @samp{start} is a @dfn{release tag}. They may fill no purpose in this context, but since @sc{cvs} requires them they must be present. @xref{Tracking sources}, for more information about them. You can now verify that it worked, and remove your original source directory. @c FIXME: Need to say more about "verify that it @c worked". What should the user look for in the output @c from "diff -r"? @example $ cd .. $ cvs checkout yoyodyne/@var{rdir} # @r{Explanation below} $ diff -r @var{wdir} yoyodyne/@var{rdir} $ rm -r @var{wdir} @end example @noindent Erasing the original sources is a good idea, to make sure that you do not accidentally edit them in @var{wdir}, bypassing @sc{cvs}. Of course, it would be wise to make sure that you have a backup of the sources before you remove them. The @code{checkout} command can either take a module name as argument (as it has done in all previous examples) or a path name relative to @code{$CVSROOT}, as it did in the example above. It is a good idea to check that the permissions @sc{cvs} sets on the directories inside @code{$CVSROOT} are reasonable, and that they belong to the proper groups. @xref{File permissions}. If some of the files you want to import are binary, you may want to use the wrappers features to specify which files are binary and which are not. @xref{Wrappers}. @c The node name is too long, but I am having trouble @c thinking of something more concise. @node From other version control systems @subsection Creating Files From Other Version Control Systems @cindex Importing files, from other version control systems If you have a project which you are maintaining with another version control system, such as @sc{rcs}, you may wish to put the files from that project into @sc{cvs}, and preserve the revision history of the files. @table @asis @cindex RCS, importing files from @item From RCS If you have been using @sc{rcs}, find the @sc{rcs} files---usually a file named @file{foo.c} will have its @sc{rcs} file in @file{RCS/foo.c,v} (but it could be other places; consult the @sc{rcs} documentation for details). Then create the appropriate directories in @sc{cvs} if they do not already exist. Then copy the files into the appropriate directories in the @sc{cvs} repository (the name in the repository must be the name of the source file with @samp{,v} added; the files go directly in the appropriate directory of the repository, not in an @file{RCS} subdirectory). This is one of the few times when it is a good idea to access the @sc{cvs} repository directly, rather than using @sc{cvs} commands. Then you are ready to check out a new working directory. @c Someday there probably should be a "cvs import -t @c rcs" or some such. It could even create magic @c branches. It could also do something about the case @c where the RCS file had a (non-magic) "0" branch. The @sc{rcs} file should not be locked when you move it into @sc{cvs}; if it is, @sc{cvs} will have trouble letting you operate on it. @c What is the easiest way to unlock your files if you @c have them locked? Especially if you have a lot of them? @c This is a CVS bug/misfeature; importing RCS files @c should ignore whether they are locked and leave them in @c an unlocked state. Yet another reason for a separate @c "import RCS file" command. @c How many is "many"? Or do they just import RCS files? @item From another version control system Many version control systems have the ability to export @sc{rcs} files in the standard format. If yours does, export the @sc{rcs} files and then follow the above instructions. Failing that, probably your best bet is to write a script that will check out the files one revision at a time using the command line interface to the other system, and then check the revisions into @sc{cvs}. The @file{sccs2rcs} script mentioned below may be a useful example to follow. @cindex SCCS, importing files from @item From SCCS There is a script in the @file{contrib} directory of the @sc{cvs} source distribution called @file{sccs2rcs} which converts @sc{sccs} files to @sc{rcs} files. Note: you must run it on a machine which has both @sc{sccs} and @sc{rcs} installed, and like everything else in contrib it is unsupported (your mileage may vary). @cindex PVCS, importing files from @item From PVCS There is a script in the @file{contrib} directory of the @sc{cvs} source distribution called @file{pvcs_to_rcs} which converts @sc{pvcs} archives to @sc{rcs} files. You must run it on a machine which has both @sc{pvcs} and @sc{rcs} installed, and like everything else in contrib it is unsupported (your mileage may vary). See the comments in the script for details. @end table @c CMZ and/or PATCHY were systems that were used in the @c high energy physics community (especially for @c CERNLIB). CERN has replaced them with CVS, but the @c CAR format seems to live on as a way to submit @c changes. There is a program car2cvs which converts @c but I'm not sure where one gets a copy. @c Not sure it is worth mentioning here, since it would @c appear to affect only one particular community. @c Best page for more information is: @c http://wwwcn1.cern.ch/asd/cvs/index.html @c See also: @c http://ecponion.cern.ch/ecpsa/cernlib.html @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node From scratch @subsection Creating a directory tree from scratch @c Also/instead should be documenting @c $ cvs co -l . @c $ mkdir tc @c $ cvs add tc @c $ cd tc @c $ mkdir man @c $ cvs add man @c etc. @c Using import to create the directories only is @c probably a somewhat confusing concept. For a new project, the easiest thing to do is probably to create an empty directory structure, like this: @example $ mkdir tc $ mkdir tc/man $ mkdir tc/testing @end example After that, you use the @code{import} command to create the corresponding (empty) directory structure inside the repository: @example $ cd tc $ cvs import -m "Created directory structure" yoyodyne/@var{dir} yoyo start @end example Then, use @code{add} to add files (and new directories) as they appear. Check that the permissions @sc{cvs} sets on the directories inside @code{$CVSROOT} are reasonable. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Defining the module @section Defining the module @cindex Defining a module @cindex Editing the modules file @cindex Module, defining @cindex Modules file, changing The next step is to define the module in the @file{modules} file. This is not strictly necessary, but modules can be convenient in grouping together related files and directories. In simple cases these steps are sufficient to define a module. @enumerate @item Get a working copy of the modules file. @example $ cvs checkout CVSROOT/modules $ cd CVSROOT @end example @item Edit the file and insert a line that defines the module. @xref{Intro administrative files}, for an introduction. @xref{modules}, for a full description of the modules file. You can use the following line to define the module @samp{tc}: @example tc yoyodyne/tc @end example @item Commit your changes to the modules file. @example $ cvs commit -m "Added the tc module." modules @end example @item Release the modules module. @example $ cd .. $ cvs release -d CVSROOT @end example @end enumerate @c --------------------------------------------------------------------- @node Revisions @chapter Revisions For many uses of @sc{cvs}, one doesn't need to worry too much about revision numbers; @sc{cvs} assigns numbers such as @code{1.1}, @code{1.2}, and so on, and that is all one needs to know. However, some people prefer to have more knowledge and control concerning how @sc{cvs} assigns revision numbers. If one wants to keep track of a set of revisions involving more than one file, such as which revisions went into a particular release, one uses a @dfn{tag}, which is a symbolic revision which can be assigned to a numeric revision in each file. @menu * Revision numbers:: The meaning of a revision number * Versions revisions releases:: Terminology used in this manual * Assigning revisions:: Assigning revisions * Tags:: Tags--Symbolic revisions * Tagging the working directory:: The cvs tag command * Tagging by date/tag:: The cvs rtag command * Modifying tags:: Adding, renaming, and deleting tags * Tagging add/remove:: Tags with adding and removing files * Sticky tags:: Certain tags are persistent @end menu @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Revision numbers @section Revision numbers @cindex Revision numbers @cindex Revision tree @cindex Linear development @cindex Number, revision- @cindex Decimal revision number @cindex Branch number @cindex Number, branch Each version of a file has a unique @dfn{revision number}. Revision numbers look like @samp{1.1}, @samp{1.2}, @samp{1.3.2.2} or even @samp{1.3.2.2.4.5}. A revision number always has an even number of period-separated decimal integers. By default revision 1.1 is the first revision of a file. Each successive revision is given a new number by increasing the rightmost number by one. The following figure displays a few revisions, with newer revisions to the right. @example +-----+ +-----+ +-----+ +-----+ +-----+ ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! +-----+ +-----+ +-----+ +-----+ +-----+ @end example It is also possible to end up with numbers containing more than one period, for example @samp{1.3.2.2}. Such revisions represent revisions on branches (@pxref{Branching and merging}); such revision numbers are explained in detail in @ref{Branches and revisions}. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Versions revisions releases @section Versions, revisions and releases @cindex Revisions, versions and releases @cindex Versions, revisions and releases @cindex Releases, revisions and versions A file can have several versions, as described above. Likewise, a software product can have several versions. A software product is often given a version number such as @samp{4.1.1}. Versions in the first sense are called @dfn{revisions} in this document, and versions in the second sense are called @dfn{releases}. To avoid confusion, the word @dfn{version} is almost never used in this document. @node Assigning revisions @section Assigning revisions @c We avoid the "major revision" terminology. It seems @c like jargon. Hopefully "first number" is clear enough. @c @c Well, in the context of software release numbers, @c "major" and "minor" release or version numbers are @c documented in at least the GNU Coding Standards, but I'm @c still not sure I find that a valid reason to apply the @c terminology to RCS revision numbers. "First", "Second", @c "subsequent", and so on is almost surely clearer, @c especially to a novice reader. -DRP By default, @sc{cvs} will assign numeric revisions by leaving the first number the same and incrementing the second number. For example, @code{1.1}, @code{1.2}, @code{1.3}, etc. When adding a new file, the second number will always be one and the first number will equal the highest first number of any file in that directory. For example, the current directory contains files whose highest numbered revisions are @code{1.7}, @code{3.1}, and @code{4.12}, then an added file will be given the numeric revision @code{4.1}. @c This is sort of redundant with something we said a @c while ago. Somewhere we need a better way of @c introducing how the first number can be anything @c except "1", perhaps. Also I don't think this @c presentation is clear on why we are discussing releases @c and first numbers of numeric revisions in the same @c breath. Normally there is no reason to care about the revision numbers---it is easier to treat them as internal numbers that @sc{cvs} maintains, and tags provide a better way to distinguish between things like release 1 versus release 2 of your product (@pxref{Tags}). However, if you want to set the numeric revisions, the @samp{-r} option to @code{cvs commit} can do that. The @samp{-r} option implies the @samp{-f} option, in the sense that it causes the files to be committed even if they are not modified. For example, to bring all your files up to revision 3.0 (including those that haven't changed), you might invoke: @example $ cvs commit -r 3.0 @end example Note that the number you specify with @samp{-r} must be larger than any existing revision number. That is, if revision 3.0 exists, you cannot @samp{cvs commit -r 1.3}. If you want to maintain several releases in parallel, you need to use a branch (@pxref{Branching and merging}). @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Tags @section Tags--Symbolic revisions @cindex Tags The revision numbers live a life of their own. They need not have anything at all to do with the release numbers of your software product. Depending on how you use @sc{cvs} the revision numbers might change several times between two releases. As an example, some of the source files that make up @sc{rcs} 5.6 have the following revision numbers: @cindex RCS revision numbers @example ci.c 5.21 co.c 5.9 ident.c 5.3 rcs.c 5.12 rcsbase.h 5.11 rcsdiff.c 5.10 rcsedit.c 5.11 rcsfcmp.c 5.9 rcsgen.c 5.10 rcslex.c 5.11 rcsmap.c 5.2 rcsutil.c 5.10 @end example @cindex tag (subcommand), introduction @cindex Tags, symbolic name @cindex Symbolic name (tag) @cindex Name, symbolic (tag) @cindex HEAD, as reserved tag name @cindex BASE, as reserved tag name You can use the @code{tag} command to give a symbolic name to a certain revision of a file. You can use the @samp{-v} flag to the @code{status} command to see all tags that a file has, and which revision numbers they represent. Tag names must start with an uppercase or lowercase letter and can contain uppercase and lowercase letters, digits, @samp{-}, and @samp{_}. The two tag names @code{BASE} and @code{HEAD} are reserved for use by @sc{cvs}. It is expected that future names which are special to @sc{cvs} will be specially named, for example by starting with @samp{.}, rather than being named analogously to @code{BASE} and @code{HEAD}, to avoid conflicts with actual tag names. @c Including a character such as % or = has also been @c suggested as the naming convention for future @c special tag names. Starting with . is nice because @c that is not a legal tag name as far as RCS is concerned. @c FIXME: CVS actually accepts quite a few characters @c in tag names, not just the ones documented above @c (see RCS_check_tag). RCS @c defines legitimate tag names by listing illegal @c characters rather than legal ones. CVS is said to lose its @c mind if you try to use "/" (try making such a tag sticky @c and using "cvs status" client/server--see remote @c protocol format for entries line for probable cause). @c TODO: The testsuite @c should test for whatever are documented above as @c officially-OK tag names, and CVS should at least reject @c characters that won't work, like "/". You'll want to choose some convention for naming tags, based on information such as the name of the program and the version number of the release. For example, one might take the name of the program, immediately followed by the version number with @samp{.} changed to @samp{-}, so that @sc{cvs} 1.9 would be tagged with the name @code{cvs1-9}. If you choose a consistent convention, then you won't constantly be guessing whether a tag is @code{cvs-1-9} or @code{cvs1_9} or what. You might even want to consider enforcing your convention in the taginfo file (@pxref{user-defined logging}). @c Might be nice to say more about using taginfo this @c way, like giving an example, or pointing out any particular @c issues which arise. @cindex Adding a tag @cindex Tags, example The following example shows how you can add a tag to a file. The commands must be issued inside your working directory. That is, you should issue the command in the directory where @file{backend.c} resides. @example $ cvs tag rel-0-4 backend.c T backend.c $ cvs status -v backend.c =================================================================== File: backend.c Status: Up-to-date Version: 1.4 Tue Dec 1 14:39:01 1992 RCS Version: 1.4 /u/cvsroot/yoyodyne/tc/backend.c,v Sticky Tag: (none) Sticky Date: (none) Sticky Options: (none) Existing Tags: rel-0-4 (revision: 1.4) @end example For a complete summary of the syntax of @code{cvs tag}, including the various options, see @ref{Invoking CVS}. There is seldom reason to tag a file in isolation. A more common use is to tag all the files that constitute a module with the same tag at strategic points in the development life-cycle, such as when a release is made. @example $ cvs tag rel-1-0 . cvs tag: Tagging . T Makefile T backend.c T driver.c T frontend.c T parser.c @end example @noindent (When you give @sc{cvs} a directory as argument, it generally applies the operation to all the files in that directory, and (recursively), to any subdirectories that it may contain. @xref{Recursive behavior}.) @cindex Retrieving an old revision using tags @cindex Tags, retrieving old revisions The @code{checkout} command has a flag, @samp{-r}, that lets you check out a certain revision of a module. This flag makes it easy to retrieve the sources that make up release 1.0 of the module @samp{tc} at any time in the future: @example $ cvs checkout -r rel-1-0 tc @end example @noindent This is useful, for instance, if someone claims that there is a bug in that release, but you cannot find the bug in the current working copy. You can also check out a module as it was at any given date. @xref{checkout options}. When specifying @samp{-r} to any of these commands, you will need beware of sticky tags; see @ref{Sticky tags}. When you tag more than one file with the same tag you can think about the tag as "a curve drawn through a matrix of filename vs. revision number." Say we have 5 files with the following revisions: @example @group file1 file2 file3 file4 file5 1.1 1.1 1.1 1.1 /--1.1* <-*- TAG 1.2*- 1.2 1.2 -1.2*- 1.3 \- 1.3*- 1.3 / 1.3 1.4 \ 1.4 / 1.4 \-1.5*- 1.5 1.6 @end group @end example At some time in the past, the @code{*} versions were tagged. You can think of the tag as a handle attached to the curve drawn through the tagged revisions. When you pull on the handle, you get all the tagged revisions. Another way to look at it is that you "sight" through a set of revisions that is "flat" along the tagged revisions, like this: @example @group file1 file2 file3 file4 file5 1.1 1.2 1.1 1.3 _ 1.1 1.2 1.4 1.1 / 1.2*----1.3*----1.5*----1.2*----1.1 (--- <--- Look here 1.3 1.6 1.3 \_ 1.4 1.4 1.5 @end group @end example @node Tagging the working directory @section Specifying what to tag from the working directory @cindex tag (subcommand) The example in the previous section demonstrates one of the most common ways to choose which revisions to tag. Namely, running the @code{cvs tag} command without arguments causes @sc{cvs} to select the revisions which are checked out in the current working directory. For example, if the copy of @file{backend.c} in working directory was checked out from revision 1.4, then @sc{cvs} will tag revision 1.4. Note that the tag is applied immediately to revision 1.4 in the repository; tagging is not like modifying a file, or other operations in which one first modifies the working directory and then runs @code{cvs commit} to transfer that modification to the repository. One potentially surprising aspect of the fact that @code{cvs tag} operates on the repository is that you are tagging the checked-in revisions, which may differ from locally modified files in your working directory. If you want to avoid doing this by mistake, specify the @samp{-c} option to @code{cvs tag}. If there are any locally modified files, @sc{cvs} will abort with an error before it tags any files: @example $ cvs tag -c rel-0-4 cvs tag: backend.c is locally modified cvs [tag aborted]: correct the above errors first! @end example @node Tagging by date/tag @section Specifying what to tag by date or revision @cindex rtag (subcommand) The @code{cvs rtag} command tags the repository as of a certain date or time (or can be used to tag the latest revision). @code{rtag} works directly on the repository contents (it requires no prior checkout and does not look for a working directory). The following options specify which date or revision to tag. See @ref{Common options}, for a complete description of them. @table @code @item -D @var{date} Tag the most recent revision no later than @var{date}. @item -f Only useful with the @samp{-D @var{date}} or @samp{-r @var{tag}} flags. If no matching revision is found, use the most recent revision (instead of ignoring the file). @item -r @var{tag} Only tag those files that contain existing tag @var{tag}. @end table The @code{cvs tag} command also allows one to specify files by revision or date, using the same @samp{-r}, @samp{-D}, and @samp{-f} options. However, this feature is probably not what you want. The reason is that @code{cvs tag} chooses which files to tag based on the files that exist in the working directory, rather than the files which existed as of the given tag/date. Therefore, you are generally better off using @code{cvs rtag}. The exceptions might be cases like: @example cvs tag -r 1.4 stable backend.c @end example @node Modifying tags @section Deleting, moving, and renaming tags @c Also see: @c "How do I move or rename a magic branch tag?" @c in the FAQ (I think the issues it talks about still @c apply, but this could use some sanity.sh work). Normally one does not modify tags. They exist in order to record the history of the repository and so deleting them or changing their meaning would, generally, not be what you want. However, there might be cases in which one uses a tag temporarily or accidentally puts one in the wrong place. Therefore, one might delete, move, or rename a tag. @noindent @strong{WARNING: the commands in this section are dangerous; they permanently discard historical information and it can be difficult or impossible to recover from errors. If you are a @sc{cvs} administrator, you may consider restricting these commands with taginfo (@pxref{user-defined logging}).} @cindex Deleting tags @cindex Deleting branch tags @cindex Removing tags @cindex Removing branch tags @cindex Tags, deleting @cindex Branch tags, deleting To delete a tag, specify the @samp{-d} option to either @code{cvs tag} or @code{cvs rtag}. For example: @example cvs rtag -d rel-0-4 tc @end example @noindent deletes the non-branch tag @code{rel-0-4} from the module @code{tc}. In the event that branch tags are encountered within the repository with the given name, a warning message will be issued and the branch tag will not be deleted. If you are absolutely certain you know what you are doing, the @code{-B} option may be specified to allow deletion of branch tags. In that case, any non-branch tags encountered will trigger warnings and will not be deleted. @noindent @strong{WARNING: Moving branch tags is very dangerous! If you think you need the @code{-B} option, think again and ask your @sc{cvs} administrator about it (if that isn't you). There is almost certainly another way to accomplish what you want to accomplish.} @cindex Moving tags @cindex Moving branch tags @cindex Tags, moving @cindex Branch tags, moving When we say @dfn{move} a tag, we mean to make the same name point to different revisions. For example, the @code{stable} tag may currently point to revision 1.4 of @file{backend.c} and perhaps we want to make it point to revision 1.6. To move a non-branch tag, specify the @samp{-F} option to either @code{cvs tag} or @code{cvs rtag}. For example, the task just mentioned might be accomplished as: @example cvs tag -r 1.6 -F stable backend.c @end example @noindent If any branch tags are encountered in the repository with the given name, a warning is issued and the branch tag is not disturbed. If you are absolutely certain you wish to move the branch tag, the @code{-B} option may be specified. In that case, non-branch tags encountered with the given name are ignored with a warning message. @noindent @strong{WARNING: Moving branch tags is very dangerous! If you think you need the @code{-B} option, think again and ask your @sc{cvs} administrator about it (if that isn't you). There is almost certainly another way to accomplish what you want to accomplish.} @cindex Renaming tags @cindex Tags, renaming When we say @dfn{rename} a tag, we mean to make a different name point to the same revisions as the old tag. For example, one may have misspelled the tag name and want to correct it (hopefully before others are relying on the old spelling). To rename a tag, first create a new tag using the @samp{-r} option to @code{cvs rtag}, and then delete the old name. (Caution: this method will not work with branch tags.) This leaves the new tag on exactly the same files as the old tag. For example: @example cvs rtag -r old-name-0-4 rel-0-4 tc cvs rtag -d old-name-0-4 tc @end example @node Tagging add/remove @section Tagging and adding and removing files The subject of exactly how tagging interacts with adding and removing files is somewhat obscure; for the most part @sc{cvs} will keep track of whether files exist or not without too much fussing. By default, tags are applied to only files which have a revision corresponding to what is being tagged. Files which did not exist yet, or which were already removed, simply omit the tag, and @sc{cvs} knows to treat the absence of a tag as meaning that the file didn't exist as of that tag. However, this can lose a small amount of information. For example, suppose a file was added and then removed. Then, if the tag is missing for that file, there is no way to know whether the tag refers to the time before the file was added, or the time after it was removed. If you specify the @samp{-r} option to @code{cvs rtag}, then @sc{cvs} tags the files which have been removed, and thereby avoids this problem. For example, one might specify @code{-r HEAD} to tag the head. On the subject of adding and removing files, the @code{cvs rtag} command has a @samp{-a} option which means to clear the tag from removed files that would not otherwise be tagged. For example, one might specify this option in conjunction with @samp{-F} when moving a tag. If one moved a tag without @samp{-a}, then the tag in the removed files might still refer to the old revision, rather than reflecting the fact that the file had been removed. I don't think this is necessary if @samp{-r} is specified, as noted above. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Sticky tags @section Sticky tags @cindex Sticky tags @cindex Tags, sticky @c A somewhat related issue is per-directory sticky @c tags (see comment at CVS/Tag in node Working @c directory storage); we probably want to say @c something like "you can set a sticky tag for only @c some files, but you don't want to" or some such. Sometimes a working copy's revision has extra data associated with it, for example it might be on a branch (@pxref{Branching and merging}), or restricted to versions prior to a certain date by @samp{checkout -D} or @samp{update -D}. Because this data persists -- that is, it applies to subsequent commands in the working copy -- we refer to it as @dfn{sticky}. Most of the time, stickiness is an obscure aspect of @sc{cvs} that you don't need to think about. However, even if you don't want to use the feature, you may need to know @emph{something} about sticky tags (for example, how to avoid them!). You can use the @code{status} command to see if any sticky tags or dates are set: @example $ cvs status driver.c =================================================================== File: driver.c Status: Up-to-date Version: 1.7.2.1 Sat Dec 5 19:35:03 1992 RCS Version: 1.7.2.1 /u/cvsroot/yoyodyne/tc/driver.c,v Sticky Tag: rel-1-0-patches (branch: 1.7.2) Sticky Date: (none) Sticky Options: (none) @end example @cindex Resetting sticky tags @cindex Sticky tags, resetting @cindex Deleting sticky tags The sticky tags will remain on your working files until you delete them with @samp{cvs update -A}. The @samp{-A} option merges local changes into the version of the file from the head of the trunk, removing any sticky tags, dates, or options. See @ref{update} for more on the operation of @code{cvs update}. @cindex Sticky date The most common use of sticky tags is to identify which branch one is working on, as described in @ref{Accessing branches}. However, non-branch sticky tags have uses as well. For example, suppose that you want to avoid updating your working directory, to isolate yourself from possibly destabilizing changes other people are making. You can, of course, just refrain from running @code{cvs update}. But if you want to avoid updating only a portion of a larger tree, then sticky tags can help. If you check out a certain revision (such as 1.4) it will become sticky. Subsequent @code{cvs update} commands will not retrieve the latest revision until you reset the tag with @code{cvs update -A}. Likewise, use of the @samp{-D} option to @code{update} or @code{checkout} sets a @dfn{sticky date}, which, similarly, causes that date to be used for future retrievals. People often want to retrieve an old version of a file without setting a sticky tag. This can be done with the @samp{-p} option to @code{checkout} or @code{update}, which sends the contents of the file to standard output. For example: @example $ cvs update -p -r 1.1 file1 >file1 =================================================================== Checking out file1 RCS: /tmp/cvs-sanity/cvsroot/first-dir/Attic/file1,v VERS: 1.1 *************** $ @end example However, this isn't the easiest way, if you are asking how to undo a previous checkin (in this example, put @file{file1} back to the way it was as of revision 1.1). In that case you are better off using the @samp{-j} option to @code{update}; for further discussion see @ref{Merging two revisions}. @c --------------------------------------------------------------------- @node Branching and merging @chapter Branching and merging @cindex Branching @cindex Merging @cindex Copying changes @cindex Main trunk and branches @cindex Revision tree, making branches @cindex Branches, copying changes between @cindex Changes, copying between branches @cindex Modifications, copying between branches @sc{cvs} allows you to isolate changes onto a separate line of development, known as a @dfn{branch}. When you change files on a branch, those changes do not appear on the main trunk or other branches. Later you can move changes from one branch to another branch (or the main trunk) by @dfn{merging}. Merging involves first running @code{cvs update -j}, to merge the changes into the working directory. You can then commit that revision, and thus effectively copy the changes onto another branch. @menu * Branches motivation:: What branches are good for * Creating a branch:: Creating a branch * Accessing branches:: Checking out and updating branches * Branches and revisions:: Branches are reflected in revision numbers * Magic branch numbers:: Magic branch numbers * Merging a branch:: Merging an entire branch * Merging more than once:: Merging from a branch several times * Merging two revisions:: Merging differences between two revisions * Merging adds and removals:: What if files are added or removed? * Merging and keywords:: Avoiding conflicts due to keyword substitution @end menu @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Branches motivation @section What branches are good for @cindex Branches motivation @cindex What branches are good for @cindex Motivation for branches @c FIXME: this node mentions one way to use branches, @c but it is by no means the only way. For example, @c the technique of committing a new feature on a branch, @c until it is ready for the main trunk. The whole @c thing is generally speaking more akin to the @c "Revision management" node although it isn't clear to @c me whether policy matters should be centralized or @c distributed throughout the relevant sections. Suppose that release 1.0 of tc has been made. You are continuing to develop tc, planning to create release 1.1 in a couple of months. After a while your customers start to complain about a fatal bug. You check out release 1.0 (@pxref{Tags}) and find the bug (which turns out to have a trivial fix). However, the current revision of the sources are in a state of flux and are not expected to be stable for at least another month. There is no way to make a bugfix release based on the newest sources. The thing to do in a situation like this is to create a @dfn{branch} on the revision trees for all the files that make up release 1.0 of tc. You can then make modifications to the branch without disturbing the main trunk. When the modifications are finished you can elect to either incorporate them on the main trunk, or leave them on the branch. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Creating a branch @section Creating a branch @cindex Creating a branch @cindex Branch, creating a @cindex tag (subcommand), creating a branch using @cindex rtag (subcommand), creating a branch using You can create a branch with @code{tag -b}; for example, assuming you're in a working copy: @example $ cvs tag -b rel-1-0-patches @end example @c FIXME: we should be more explicit about the value of @c having a tag on the branchpoint. For example @c "cvs tag rel-1-0-patches-branchpoint" before @c the "cvs tag -b". This points out that @c rel-1-0-patches is a pretty awkward name for @c this example (more so than for the rtag example @c below). This splits off a branch based on the current revisions in the working copy, assigning that branch the name @samp{rel-1-0-patches}. It is important to understand that branches get created in the repository, not in the working copy. Creating a branch based on current revisions, as the above example does, will @emph{not} automatically switch the working copy to be on the new branch. For information on how to do that, see @ref{Accessing branches}. You can also create a branch without reference to any working copy, by using @code{rtag}: @example $ cvs rtag -b -r rel-1-0 rel-1-0-patches tc @end example @samp{-r rel-1-0} says that this branch should be rooted at the revision that corresponds to the tag @samp{rel-1-0}. It need not be the most recent revision -- it's often useful to split a branch off an old revision (for example, when fixing a bug in a past release otherwise known to be stable). As with @samp{tag}, the @samp{-b} flag tells @code{rtag} to create a branch (rather than just a symbolic revision name). Note that the numeric revision number that matches @samp{rel-1-0} will probably be different from file to file. So, the full effect of the command is to create a new branch -- named @samp{rel-1-0-patches} -- in module @samp{tc}, rooted in the revision tree at the point tagged by @samp{rel-1-0}. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Accessing branches @section Accessing branches @cindex Check out a branch @cindex Retrieve a branch @cindex Access a branch @cindex Identifying a branch @cindex Branch, check out @cindex Branch, retrieving @cindex Branch, accessing @cindex Branch, identifying You can retrieve a branch in one of two ways: by checking it out fresh from the repository, or by switching an existing working copy over to the branch. To check out a branch from the repository, invoke @samp{checkout} with the @samp{-r} flag, followed by the tag name of the branch (@pxref{Creating a branch}): @example $ cvs checkout -r rel-1-0-patches tc @end example Or, if you already have a working copy, you can switch it to a given branch with @samp{update -r}: @example $ cvs update -r rel-1-0-patches tc @end example @noindent or equivalently: @example $ cd tc $ cvs update -r rel-1-0-patches @end example It does not matter if the working copy was originally on the main trunk or on some other branch -- the above command will switch it to the named branch. And similarly to a regular @samp{update} command, @samp{update -r} merges any changes you have made, notifying you of conflicts where they occur. Once you have a working copy tied to a particular branch, it remains there until you tell it otherwise. This means that changes checked in from the working copy will add new revisions on that branch, while leaving the main trunk and other branches unaffected. @cindex Branches, sticky To find out what branch a working copy is on, you can use the @samp{status} command. In its output, look for the field named @samp{Sticky tag} (@pxref{Sticky tags}) -- that's @sc{cvs}'s way of telling you the branch, if any, of the current working files: @example $ cvs status -v driver.c backend.c =================================================================== File: driver.c Status: Up-to-date Version: 1.7 Sat Dec 5 18:25:54 1992 RCS Version: 1.7 /u/cvsroot/yoyodyne/tc/driver.c,v Sticky Tag: rel-1-0-patches (branch: 1.7.2) Sticky Date: (none) Sticky Options: (none) Existing Tags: rel-1-0-patches (branch: 1.7.2) rel-1-0 (revision: 1.7) =================================================================== File: backend.c Status: Up-to-date Version: 1.4 Tue Dec 1 14:39:01 1992 RCS Version: 1.4 /u/cvsroot/yoyodyne/tc/backend.c,v Sticky Tag: rel-1-0-patches (branch: 1.4.2) Sticky Date: (none) Sticky Options: (none) Existing Tags: rel-1-0-patches (branch: 1.4.2) rel-1-0 (revision: 1.4) rel-0-4 (revision: 1.4) @end example Don't be confused by the fact that the branch numbers for each file are different (@samp{1.7.2} and @samp{1.4.2} respectively). The branch tag is the same, @samp{rel-1-0-patches}, and the files are indeed on the same branch. The numbers simply reflect the point in each file's revision history at which the branch was made. In the above example, one can deduce that @samp{driver.c} had been through more changes than @samp{backend.c} before this branch was created. See @ref{Branches and revisions} for details about how branch numbers are constructed. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Branches and revisions @section Branches and revisions @cindex Branch number @cindex Number, branch @cindex Revision numbers (branches) Ordinarily, a file's revision history is a linear series of increments (@pxref{Revision numbers}): @example +-----+ +-----+ +-----+ +-----+ +-----+ ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! +-----+ +-----+ +-----+ +-----+ +-----+ @end example However, @sc{cvs} is not limited to linear development. The @dfn{revision tree} can be split into @dfn{branches}, where each branch is a self-maintained line of development. Changes made on one branch can easily be moved back to the main trunk. Each branch has a @dfn{branch number}, consisting of an odd number of period-separated decimal integers. The branch number is created by appending an integer to the revision number where the corresponding branch forked off. Having branch numbers allows more than one branch to be forked off from a certain revision. @need 3500 All revisions on a branch have revision numbers formed by appending an ordinal number to the branch number. The following figure illustrates branching with an example. @example @c This example used to have a 1.2.2.4 revision, which @c might help clarify that development can continue on @c 1.2.2. Might be worth reinstating if it can be done @c without overfull hboxes. @group +-------------+ Branch 1.2.2.3.2 -> ! 1.2.2.3.2.1 ! / +-------------+ / / +---------+ +---------+ +---------+ Branch 1.2.2 -> _! 1.2.2.1 !----! 1.2.2.2 !----! 1.2.2.3 ! / +---------+ +---------+ +---------+ / / +-----+ +-----+ +-----+ +-----+ +-----+ ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! <- The main trunk +-----+ +-----+ +-----+ +-----+ +-----+ ! ! ! +---------+ +---------+ +---------+ Branch 1.2.4 -> +---! 1.2.4.1 !----! 1.2.4.2 !----! 1.2.4.3 ! +---------+ +---------+ +---------+ @end group @end example @c -- However, at least for me the figure is not enough. I suggest more @c -- text to accompany it. "A picture is worth a thousand words", so you @c -- have to make sure the reader notices the couple of hundred words @c -- *you* had in mind more than the others! @c -- Why an even number of segments? This section implies that this is @c -- how the main trunk is distinguished from branch roots, but you never @c -- explicitly say that this is the purpose of the [by itself rather @c -- surprising] restriction to an even number of segments. The exact details of how the branch number is constructed is not something you normally need to be concerned about, but here is how it works: When @sc{cvs} creates a branch number it picks the first unused even integer, starting with 2. So when you want to create a branch from revision 6.4 it will be numbered 6.4.2. All branch numbers ending in a zero (such as 6.4.0) are used internally by @sc{cvs} (@pxref{Magic branch numbers}). The branch 1.1.1 has a special meaning. @xref{Tracking sources}. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Magic branch numbers @section Magic branch numbers @c Want xref to here from "log"? This section describes a @sc{cvs} feature called @dfn{magic branches}. For most purposes, you need not worry about magic branches; @sc{cvs} handles them for you. However, they are visible to you in certain circumstances, so it may be useful to have some idea of how it works. Externally, branch numbers consist of an odd number of dot-separated decimal integers. @xref{Revision numbers}. That is not the whole truth, however. For efficiency reasons @sc{cvs} sometimes inserts an extra 0 in the second rightmost position (1.2.4 becomes 1.2.0.4, 8.9.10.11.12 becomes 8.9.10.11.0.12 and so on). @sc{cvs} does a pretty good job at hiding these so called magic branches, but in a few places the hiding is incomplete: @itemize @bullet @ignore @c This is in ignore as I'm taking their word for it, @c that this was fixed @c a long time ago. But before deleting this @c entirely, I'd rather verify it (and add a test @c case to the testsuite). @item The magic branch can appear in the output from @code{cvs status} in vanilla @sc{cvs} 1.3. This is fixed in @sc{cvs} 1.3-s2. @end ignore @item The magic branch number appears in the output from @code{cvs log}. @c What output should appear instead? @item You cannot specify a symbolic branch name to @code{cvs admin}. @end itemize @c Can CVS do this automatically the first time @c you check something in to that branch? Should @c it? You can use the @code{admin} command to reassign a symbolic name to a branch the way @sc{rcs} expects it to be. If @code{R4patches} is assigned to the branch 1.4.2 (magic branch number 1.4.0.2) in file @file{numbers.c} you can do this: @example $ cvs admin -NR4patches:1.4.2 numbers.c @end example It only works if at least one revision is already committed on the branch. Be very careful so that you do not assign the tag to the wrong number. (There is no way to see how the tag was assigned yesterday). @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Merging a branch @section Merging an entire branch @cindex Merging a branch @cindex -j (merging branches) You can merge changes made on a branch into your working copy by giving the @samp{-j @var{branchname}} flag to the @code{update} subcommand. With one @samp{-j @var{branchname}} option it merges the changes made between the greatest common ancestor (GCA) of the branch and the destination revision (in the simple case below the GCA is the point where the branch forked) and the newest revision on that branch into your working copy. @cindex Join The @samp{-j} stands for ``join''. @cindex Branch merge example @cindex Example, branch merge @cindex Merge, branch example Consider this revision tree: @example +-----+ +-----+ +-----+ +-----+ ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 ! <- The main trunk +-----+ +-----+ +-----+ +-----+ ! ! ! +---------+ +---------+ Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 ! +---------+ +---------+ @end example @noindent The branch 1.2.2 has been given the tag (symbolic name) @samp{R1fix}. The following example assumes that the module @samp{mod} contains only one file, @file{m.c}. @example $ cvs checkout mod # @r{Retrieve the latest revision, 1.4} $ cvs update -j R1fix m.c # @r{Merge all changes made on the branch,} # @r{i.e. the changes between revision 1.2} # @r{and 1.2.2.2, into your working copy} # @r{of the file.} $ cvs commit -m "Included R1fix" # @r{Create revision 1.5.} @end example A conflict can result from a merge operation. If that happens, you should resolve it before committing the new revision. @xref{Conflicts example}. If your source files contain keywords (@pxref{Keyword substitution}), you might be getting more conflicts than strictly necessary. See @ref{Merging and keywords}, for information on how to avoid this. The @code{checkout} command also supports the @samp{-j @var{branchname}} flag. The same effect as above could be achieved with this: @example $ cvs checkout -j R1fix mod $ cvs commit -m "Included R1fix" @end example It should be noted that @code{update -j @var{tagname}} will also work but may not produce the desired result. @xref{Merging adds and removals}, for more. @node Merging more than once @section Merging from a branch several times Continuing our example, the revision tree now looks like this: @example +-----+ +-----+ +-----+ +-----+ +-----+ ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! <- The main trunk +-----+ +-----+ +-----+ +-----+ +-----+ ! * ! * ! +---------+ +---------+ Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 ! +---------+ +---------+ @end example @noindent where the starred line represents the merge from the @samp{R1fix} branch to the main trunk, as just discussed. Now suppose that development continues on the @samp{R1fix} branch: @example +-----+ +-----+ +-----+ +-----+ +-----+ ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! <- The main trunk +-----+ +-----+ +-----+ +-----+ +-----+ ! * ! * ! +---------+ +---------+ +---------+ Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 !----! 1.2.2.3 ! +---------+ +---------+ +---------+ @end example @noindent and then you want to merge those new changes onto the main trunk. If you just use the @code{cvs update -j R1fix m.c} command again, @sc{cvs} will attempt to merge again the changes which you have already merged, which can have undesirable side effects. So instead you need to specify that you only want to merge the changes on the branch which have not yet been merged into the trunk. To do that you specify two @samp{-j} options, and @sc{cvs} merges the changes from the first revision to the second revision. For example, in this case the simplest way would be @example cvs update -j 1.2.2.2 -j R1fix m.c # @r{Merge changes from 1.2.2.2 to the} # @r{head of the R1fix branch} @end example The problem with this is that you need to specify the 1.2.2.2 revision manually. A slightly better approach might be to use the date the last merge was done: @example cvs update -j R1fix:yesterday -j R1fix m.c @end example Better yet, tag the R1fix branch after every merge into the trunk, and then use that tag for subsequent merges: @example cvs update -j merged_from_R1fix_to_trunk -j R1fix m.c @end example @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Merging two revisions @section Merging differences between any two revisions @cindex Merging two revisions @cindex Revisions, merging differences between @cindex Differences, merging With two @samp{-j @var{revision}} flags, the @code{update} (and @code{checkout}) command can merge the differences between any two revisions into your working file. @cindex Undoing a change @cindex Removing a change @example $ cvs update -j 1.5 -j 1.3 backend.c @end example @noindent will undo all changes made between revision 1.3 and 1.5. Note the order of the revisions! If you try to use this option when operating on multiple files, remember that the numeric revisions will probably be very different between the various files. You almost always use symbolic tags rather than revision numbers when operating on multiple files. @cindex Restoring old version of removed file @cindex Resurrecting old version of dead file Specifying two @samp{-j} options can also undo file removals or additions. For example, suppose you have a file named @file{file1} which existed as revision 1.1, and you then removed it (thus adding a dead revision 1.2). Now suppose you want to add it again, with the same contents it had previously. Here is how to do it: @example $ cvs update -j 1.2 -j 1.1 file1 U file1 $ cvs commit -m test Checking in file1; /tmp/cvs-sanity/cvsroot/first-dir/file1,v <-- file1 new revision: 1.3; previous revision: 1.2 done $ @end example @node Merging adds and removals @section Merging can add or remove files If the changes which you are merging involve removing or adding some files, @code{update -j} will reflect such additions or removals. @c FIXME: This example needs a lot more explanation. @c We also need other examples for some of the other @c cases (not all--there are too many--as long as we present a @c coherent general principle). For example: @example cvs update -A touch a b c cvs add a b c ; cvs ci -m "added" a b c cvs tag -b branchtag cvs update -r branchtag touch d ; cvs add d rm a ; cvs rm a cvs ci -m "added d, removed a" cvs update -A cvs update -jbranchtag @end example After these commands are executed and a @samp{cvs commit} is done, file @file{a} will be removed and file @file{d} added in the main branch. @c (which was determined by trying it) Note that using a single static tag (@samp{-j @var{tagname}}) rather than a dynamic tag (@samp{-j @var{branchname}}) to merge changes from a branch will usually not remove files which were removed on the branch since @sc{cvs} does not automatically add static tags to dead revisions. The exception to this rule occurs when a static tag has been attached to a dead revision manually. Use the branch tag to merge all changes from the branch or use two static tags as merge endpoints to be sure that all intended changes are propagated in the merge. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Merging and keywords @section Merging and keywords @cindex Merging, and keyword substitution @cindex Keyword substitution, and merging @cindex -j (merging branches), and keyword substitution @cindex -kk, to avoid conflicts during a merge If you merge files containing keywords (@pxref{Keyword substitution}), you will normally get numerous conflicts during the merge, because the keywords are expanded differently in the revisions which you are merging. Therefore, you will often want to specify the @samp{-kk} (@pxref{Substitution modes}) switch to the merge command line. By substituting just the name of the keyword, not the expanded value of that keyword, this option ensures that the revisions which you are merging will be the same as each other, and avoid spurious conflicts. For example, suppose you have a file like this: @example +---------+ _! 1.1.2.1 ! <- br1 / +---------+ / / +-----+ +-----+ ! 1.1 !----! 1.2 ! +-----+ +-----+ @end example @noindent and your working directory is currently on the trunk (revision 1.2). Then you might get the following results from a merge: @example $ cat file1 key $@splitrcskeyword{}Revision: 1.2 $ . . . $ cvs update -j br1 U file1 RCS file: /cvsroot/first-dir/file1,v retrieving revision 1.1 retrieving revision 1.1.2.1 Merging differences between 1.1 and 1.1.2.1 into file1 rcsmerge: warning: conflicts during merge $ cat file1 @asis{}<<<<<<< file1 key $@splitrcskeyword{}Revision: 1.2 $ @asis{}======= key $@splitrcskeyword{}Revision: 1.1.2.1 $ @asis{}>>>>>>> 1.1.2.1 . . . @end example What happened was that the merge tried to merge the differences between 1.1 and 1.1.2.1 into your working directory. So, since the keyword changed from @code{Revision: 1.1} to @code{Revision: 1.1.2.1}, @sc{cvs} tried to merge that change into your working directory, which conflicted with the fact that your working directory had contained @code{Revision: 1.2}. Here is what happens if you had used @samp{-kk}: @example $ cat file1 key $@splitrcskeyword{}Revision: 1.2 $ . . . $ cvs update -kk -j br1 U file1 RCS file: /cvsroot/first-dir/file1,v retrieving revision 1.1 retrieving revision 1.1.2.1 Merging differences between 1.1 and 1.1.2.1 into file1 $ cat file1 key $@splitrcskeyword{}Revision$ . . . @end example What is going on here is that revision 1.1 and 1.1.2.1 both expand as plain @code{Revision}, and therefore merging the changes between them into the working directory need not change anything. Therefore, there is no conflict. @strong{WARNING: In versions of @sc{cvs} prior to 1.12.2, there was a major problem with using @samp{-kk} on merges. Namely, @samp{-kk} overrode any default keyword expansion mode set in the archive file in the repository. This could, unfortunately for some users, cause data corruption in binary files (with a default keyword expansion mode set to @samp{-kb}). Therefore, when a repository contained binary files, conflicts had to be dealt with manually rather than using @samp{-kk} in a merge command.} In @sc{cvs} version 1.12.2 and later, the keyword expansion mode provided on the command line to any @sc{cvs} command no longer overrides the @samp{-kb} keyword expansion mode setting for binary files, though it will still override other default keyword expansion modes. You can now safely merge using @samp{-kk} to avoid spurious conflicts on lines containing RCS keywords, even when your repository contains binary files. @c --------------------------------------------------------------------- @node Recursive behavior @chapter Recursive behavior @cindex Recursive (directory descending) @cindex Directory, descending @cindex Descending directories @cindex Subdirectories Almost all of the subcommands of @sc{cvs} work recursively when you specify a directory as an argument. For instance, consider this directory structure: @example @code{$HOME} | +--@t{tc} | | +--@t{CVS} | (internal @sc{cvs} files) +--@t{Makefile} +--@t{backend.c} +--@t{driver.c} +--@t{frontend.c} +--@t{parser.c} +--@t{man} | | | +--@t{CVS} | | (internal @sc{cvs} files) | +--@t{tc.1} | +--@t{testing} | +--@t{CVS} | (internal @sc{cvs} files) +--@t{testpgm.t} +--@t{test2.t} @end example @noindent If @file{tc} is the current working directory, the following is true: @itemize @bullet @item @samp{cvs update testing} is equivalent to @example cvs update testing/testpgm.t testing/test2.t @end example @item @samp{cvs update testing man} updates all files in the subdirectories @item @samp{cvs update .} or just @samp{cvs update} updates all files in the @code{tc} directory @end itemize If no arguments are given to @code{update} it will update all files in the current working directory and all its subdirectories. In other words, @file{.} is a default argument to @code{update}. This is also true for most of the @sc{cvs} subcommands, not only the @code{update} command. The recursive behavior of the @sc{cvs} subcommands can be turned off with the @samp{-l} option. Conversely, the @samp{-R} option can be used to force recursion if @samp{-l} is specified in @file{~/.cvsrc} (@pxref{~/.cvsrc}). @example $ cvs update -l # @r{Don't update files in subdirectories} @end example @c --------------------------------------------------------------------- @node Adding and removing @chapter Adding, removing, and renaming files and directories In the course of a project, one will often add new files. Likewise with removing or renaming, or with directories. The general concept to keep in mind in all these cases is that instead of making an irreversible change you want @sc{cvs} to record the fact that a change has taken place, just as with modifying an existing file. The exact mechanisms to do this in @sc{cvs} vary depending on the situation. @menu * Adding files:: Adding files * Removing files:: Removing files * Removing directories:: Removing directories * Moving files:: Moving and renaming files * Moving directories:: Moving and renaming directories @end menu @node Adding files @section Adding files to a directory @cindex Adding files To add a new file to a directory, follow these steps. @itemize @bullet @item You must have a working copy of the directory. @xref{Getting the source}. @item Create the new file inside your working copy of the directory. @item Use @samp{cvs add @var{filename}} to tell @sc{cvs} that you want to version control the file. If the file contains binary data, specify @samp{-kb} (@pxref{Binary files}). @item Use @samp{cvs commit @var{filename}} to actually check in the file into the repository. Other developers cannot see the file until you perform this step. @end itemize You can also use the @code{add} command to add a new directory. @c FIXCVS and/or FIXME: Adding a directory doesn't @c require the commit step. This probably can be @c considered a CVS bug, but it is possible we should @c warn people since this behavior probably won't be @c changing right away. Unlike most other commands, the @code{add} command is not recursive. You cannot even type @samp{cvs add foo/bar}! Instead, you have to @c FIXCVS: This is, of course, not a feature. It is @c just that no one has gotten around to fixing "cvs add @c foo/bar". @example $ cd foo $ cvs add bar @end example @cindex add (subcommand) @deffn Command {cvs add} [@code{-k} kflag] [@code{-m} message] files @dots{} Schedule @var{files} to be added to the repository. The files or directories specified with @code{add} must already exist in the current directory. To add a whole new directory hierarchy to the source repository (for example, files received from a third-party vendor), use the @code{import} command instead. @xref{import}. The added files are not placed in the source repository until you use @code{commit} to make the change permanent. Doing an @code{add} on a file that was removed with the @code{remove} command will undo the effect of the @code{remove}, unless a @code{commit} command intervened. @xref{Removing files}, for an example. The @samp{-k} option specifies the default way that this file will be checked out; for more information see @ref{Substitution modes}. @c As noted in BUGS, -m is broken client/server (Nov @c 96). Also see testsuite log2-* tests. The @samp{-m} option specifies a description for the file. This description appears in the history log (if it is enabled, @pxref{history file}). It will also be saved in the version history inside the repository when the file is committed. The @code{log} command displays this description. The description can be changed using @samp{admin -t}. @xref{admin}. If you omit the @samp{-m @var{description}} flag, an empty string will be used. You will not be prompted for a description. @end deffn For example, the following commands add the file @file{backend.c} to the repository: @c This example used to specify @c -m "Optimizer and code generation passes." @c to the cvs add command, but that doesn't work @c client/server (see log2 in sanity.sh). Should fix CVS, @c but also seems strange to document things which @c don't work... @example $ cvs add backend.c $ cvs commit -m "Early version. Not yet compilable." backend.c @end example When you add a file it is added only on the branch which you are working on (@pxref{Branching and merging}). You can later merge the additions to another branch if you want (@pxref{Merging adds and removals}). @c Should we mention that earlier versions of CVS @c lacked this feature (1.3) or implemented it in a buggy @c way (well, 1.8 had many bugs in cvs update -j)? @c Should we mention the bug/limitation regarding a @c file being a regular file on one branch and a directory @c on another? @c FIXME: This needs an example, or several, here or @c elsewhere, for it to make much sense. @c Somewhere we need to discuss the aspects of death @c support which don't involve branching, I guess. @c Like the ability to re-create a release from a tag. @c --------------------------------------------------------------------- @node Removing files @section Removing files @cindex Removing files @cindex Deleting files @c FIXME: this node wants to be split into several @c smaller nodes. Could make these children of @c "Adding and removing", probably (death support could @c be its own section, for example, as could the @c various bits about undoing mistakes in adding and @c removing). Directories change. New files are added, and old files disappear. Still, you want to be able to retrieve an exact copy of old releases. Here is what you can do to remove a file, but remain able to retrieve old revisions: @itemize @bullet @c FIXME: should probably be saying something about @c having a working directory in the first place. @item Make sure that you have not made any uncommitted modifications to the file. @xref{Viewing differences}, for one way to do that. You can also use the @code{status} or @code{update} command. If you remove the file without committing your changes, you will of course not be able to retrieve the file as it was immediately before you deleted it. @item Remove the file from your working copy of the directory. You can for instance use @code{rm}. @item Use @samp{cvs remove @var{filename}} to tell @sc{cvs} that you really want to delete the file. @item Use @samp{cvs commit @var{filename}} to actually perform the removal of the file from the repository. @end itemize @c FIXME: Somehow this should be linked in with a more @c general discussion of death support. I don't know @c whether we want to use the term "death support" or @c not (we can perhaps get by without it), but we do @c need to discuss the "dead" state in "cvs log" and @c related subjects. The current discussion is @c scattered around, and not xref'd to each other. @c FIXME: I think this paragraph wants to be moved @c later down, at least after the first example. When you commit the removal of the file, @sc{cvs} records the fact that the file no longer exists. It is possible for a file to exist on only some branches and not on others, or to re-add another file with the same name later. @sc{cvs} will correctly create or not create the file, based on the @samp{-r} and @samp{-D} options specified to @code{checkout} or @code{update}. @c FIXME: This style seems to clash with how we @c document things in general. @cindex Remove (subcommand) @deffn Command {cvs remove} [options] files @dots{} Schedule file(s) to be removed from the repository (files which have not already been removed from the working directory are not processed). This command does not actually remove the file from the repository until you commit the removal. For a full list of options, see @ref{Invoking CVS}. @end deffn Here is an example of removing several files: @example $ cd test $ rm *.c $ cvs remove cvs remove: Removing . cvs remove: scheduling a.c for removal cvs remove: scheduling b.c for removal cvs remove: use 'cvs commit' to remove these files permanently $ cvs ci -m "Removed unneeded files" cvs commit: Examining . cvs commit: Committing . @end example As a convenience you can remove the file and @code{cvs remove} it in one step, by specifying the @samp{-f} option. For example, the above example could also be done like this: @example $ cd test $ cvs remove -f *.c cvs remove: scheduling a.c for removal cvs remove: scheduling b.c for removal cvs remove: use 'cvs commit' to remove these files permanently $ cvs ci -m "Removed unneeded files" cvs commit: Examining . cvs commit: Committing . @end example If you execute @code{remove} for a file, and then change your mind before you commit, you can undo the @code{remove} with an @code{add} command. @ignore @c is this worth saying or not? Somehow it seems @c confusing to me. Of course, since you have removed your copy of file in the working directory, @sc{cvs} does not necessarily bring back the contents of the file from right before you executed @code{remove}; instead it gets the file from the repository again. @end ignore @c FIXME: what if you change your mind after you commit @c it? (answer is also "cvs add" but we don't say that...). @c We need some index entries for thinks like "undoing @c removal" too. @example $ ls CVS ja.h oj.c $ rm oj.c $ cvs remove oj.c cvs remove: scheduling oj.c for removal cvs remove: use 'cvs commit' to remove this file permanently $ cvs add oj.c U oj.c cvs add: oj.c, version 1.1.1.1, resurrected @end example If you realize your mistake before you run the @code{remove} command you can use @code{update} to resurrect the file: @example $ rm oj.c $ cvs update oj.c cvs update: warning: oj.c was lost U oj.c @end example When you remove a file it is removed only on the branch which you are working on (@pxref{Branching and merging}). You can later merge the removals to another branch if you want (@pxref{Merging adds and removals}). @node Removing directories @section Removing directories @cindex Removing directories @cindex Directories, removing In concept removing directories is somewhat similar to removing files---you want the directory to not exist in your current working directories, but you also want to be able to retrieve old releases in which the directory existed. The way that you remove a directory is to remove all the files in it. You don't remove the directory itself; there is no way to do that. Instead you specify the @samp{-P} option to @code{cvs update} or @code{cvs checkout}, which will cause @sc{cvs} to remove empty directories from working directories. (Note that @code{cvs export} always removes empty directories.) Probably the best way to do this is to always specify @samp{-P}; if you want an empty directory then put a dummy file (for example @file{.keepme}) in it to prevent @samp{-P} from removing it. @c I'd try to give a rationale for this, but I'm not @c sure there is a particularly convincing one. What @c we would _like_ is for CVS to do a better job of version @c controlling whether directories exist, to eliminate the @c need for -P and so that a file can be a directory in @c one revision and a regular file in another. Note that @samp{-P} is implied by the @samp{-r} or @samp{-D} options of @code{checkout}. This way @sc{cvs} will be able to correctly create the directory or not depending on whether the particular version you are checking out contains any files in that directory. @c --------------------------------------------------------------------- @node Moving files @section Moving and renaming files @cindex Moving files @cindex Renaming files @cindex Files, moving Moving files to a different directory or renaming them is not difficult, but some of the ways in which this works may be non-obvious. (Moving or renaming a directory is even harder. @xref{Moving directories}.). The examples below assume that the file @var{old} is renamed to @var{new}. @menu * Outside:: The normal way to Rename * Inside:: A tricky, alternative way * Rename by copying:: Another tricky, alternative way @end menu @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Outside @subsection The Normal way to Rename @c More rename issues. Not sure whether these are @c worth documenting; I'm putting them here because @c it seems to be as good a place as any to try to @c set down the issues. @c * "cvs annotate" will annotate either the new @c file or the old file; it cannot annotate _each @c line_ based on whether it was last changed in the @c new or old file. Unlike "cvs log", where the @c consequences of having to select either the new @c or old name seem fairly benign, this may be a @c real advantage to having CVS know about renames @c other than as a deletion and an addition. The normal way to move a file is to copy @var{old} to @var{new}, and then issue the normal @sc{cvs} commands to remove @var{old} from the repository, and add @var{new} to it. @c The following sentence is not true: one must cd into @c the directory to run "cvs add". @c (Both @var{old} and @var{new} could @c contain relative paths, for example @file{foo/bar.c}). @example $ mv @var{old} @var{new} $ cvs remove @var{old} $ cvs add @var{new} $ cvs commit -m "Renamed @var{old} to @var{new}" @var{old} @var{new} @end example This is the simplest way to move a file, it is not error-prone, and it preserves the history of what was done. Note that to access the history of the file you must specify the old or the new name, depending on what portion of the history you are accessing. For example, @code{cvs log @var{old}} will give the log up until the time of the rename. When @var{new} is committed its revision numbers will start again, usually at 1.1, so if that bothers you, use the @samp{-r rev} option to commit. For more information see @ref{Assigning revisions}. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Inside @subsection Moving the history file This method is more dangerous, since it involves moving files inside the repository. Read this entire section before trying it out! @example $ cd $CVSROOT/@var{dir} $ mv @var{old},v @var{new},v @end example @noindent Advantages: @itemize @bullet @item The log of changes is maintained intact. @item The revision numbers are not affected. @end itemize @noindent Disadvantages: @itemize @bullet @item Old releases cannot easily be fetched from the repository. (The file will show up as @var{new} even in revisions from the time before it was renamed). @item There is no log information of when the file was renamed. @item Nasty things might happen if someone accesses the history file while you are moving it. Make sure no one else runs any of the @sc{cvs} commands while you move it. @end itemize @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Rename by copying @subsection Copying the history file This way also involves direct modifications to the repository. It is safe, but not without drawbacks. @example # @r{Copy the @sc{rcs} file inside the repository} $ cd $CVSROOT/@var{dir} $ cp @var{old},v @var{new},v # @r{Remove the old file} $ cd ~/@var{dir} $ rm @var{old} $ cvs remove @var{old} $ cvs commit @var{old} # @r{Remove all tags from @var{new}} $ cvs update @var{new} $ cvs log @var{new} # @r{Remember the non-branch tag names} $ cvs tag -d @var{tag1} @var{new} $ cvs tag -d @var{tag2} @var{new} @dots{} @end example By removing the tags you will be able to check out old revisions. @noindent Advantages: @itemize @bullet @item @c FIXME: Is this true about -D now that we have death @c support? See 5B.3 in the FAQ. Checking out old revisions works correctly, as long as you use @samp{-r@var{tag}} and not @samp{-D@var{date}} to retrieve the revisions. @item The log of changes is maintained intact. @item The revision numbers are not affected. @end itemize @noindent Disadvantages: @itemize @bullet @item You cannot easily see the history of the file across the rename. @ignore @c Is this true? I don't see how the revision numbers @c _could_ start over, when new,v is just old,v with @c the tags deleted. @c If there is some need to reinstate this text, @c it is "usually 1.1", not "1.0" and it needs an @c xref to Assigning revisions @item Unless you use the @samp{-r rev} (@pxref{commit options}) flag when @var{new} is committed its revision numbers will start at 1.0 again. @end ignore @end itemize @c --------------------------------------------------------------------- @node Moving directories @section Moving and renaming directories @cindex Moving directories @cindex Renaming directories @cindex Directories, moving The normal way to rename or move a directory is to rename or move each file within it as described in @ref{Outside}. Then check out with the @samp{-P} option, as described in @ref{Removing directories}. If you really want to hack the repository to rename or delete a directory in the repository, you can do it like this: @enumerate @item Inform everyone who has a checked out copy of the directory that the directory will be renamed. They should commit all their changes, and remove their working copies, before you take the steps below. @item Rename the directory inside the repository. @example $ cd $CVSROOT/@var{parent-dir} $ mv @var{old-dir} @var{new-dir} @end example @item Fix the @sc{cvs} administrative files, if necessary (for instance if you renamed an entire module). @item Tell everyone that they can check out again and continue working. @end enumerate If someone had a working copy the @sc{cvs} commands will cease to work for him, until he removes the directory that disappeared inside the repository. It is almost always better to move the files in the directory instead of moving the directory. If you move the directory you are unlikely to be able to retrieve old releases correctly, since they probably depend on the name of the directories. @c --------------------------------------------------------------------- @node History browsing @chapter History browsing @cindex History browsing @cindex Traceability @cindex Isolation @ignore @c This is too long for an introduction (goal is @c one 20x80 character screen), and also mixes up a @c variety of issues (parallel development, history, @c maybe even touches on process control). @c -- @quote{To lose ones history is to lose ones soul.} @c -- /// @c -- ///Those who cannot remember the past are condemned to repeat it. @c -- /// -- George Santayana @c -- /// @sc{cvs} tries to make it easy for a group of people to work together. This is done in two ways: @itemize @bullet @item Isolation---You have your own working copy of the source. You are not affected by modifications made by others until you decide to incorporate those changes (via the @code{update} command---@pxref{update}). @item Traceability---When something has changed, you can always see @emph{exactly} what changed. @end itemize There are several features of @sc{cvs} that together lead to traceability: @itemize @bullet @item Each revision of a file has an accompanying log message. @item All commits are optionally logged to a central history database. @item Logging information can be sent to a user-defined program (@pxref{loginfo}). @end itemize @c -- More text here. This chapter should talk about the history file, the @code{log} command, the usefulness of ChangeLogs even when you run @sc{cvs}, and things like that. @end ignore @c kind of lame, in a lot of ways the above text inside @c the @ignore motivates this chapter better Once you have used @sc{cvs} to store a version control history---what files have changed when, how, and by whom, there are a variety of mechanisms for looking through the history. @c FIXME: should also be talking about how you look at @c old revisions (e.g. "cvs update -p -r 1.2 foo.c"). @menu * log messages:: Log messages * history database:: The history database * user-defined logging:: User-defined logging * annotate:: What revision modified each line of a file? @end menu @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node log messages @section Log messages @c FIXME: @xref to place where we talk about how to @c specify message to commit. Whenever you commit a file you specify a log message. @c FIXME: bring the information here, and get rid of or @c greatly shrink the "log" node. To look through the log messages which have been specified for every revision which has been committed, use the @code{cvs log} command (@pxref{log}). @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node history database @section The history database @c FIXME: bring the information from the history file @c and history nodes here. Rewrite it to be motivated @c better (start out by clearly explaining what gets @c logged in history, for example). You can use the history file (@pxref{history file}) to log various @sc{cvs} actions. To retrieve the information from the history file, use the @code{cvs history} command (@pxref{history}). Note: you can control what is logged to this file by using the @samp{LogHistory} keyword in the @file{CVSROOT/config} file (@pxref{config}). @c @c The history database has many problems: @c * It is very unclear what field means what. This @c could be improved greatly by better documentation, @c but there are still non-orthogonalities (for @c example, tag does not record the "repository" @c field but most records do). @c * Confusion about files, directories, and modules. @c Some commands record one, some record others. @c * File removal is not logged. There is an 'R' @c record type documented, but CVS never uses it. @c * Tags are only logged for the "cvs rtag" command, @c not "cvs tag". The fix for this is not completely @c clear (see above about modules vs. files). @c * Are there other cases of operations that are not @c logged? One would hope for all changes to the @c repository to be logged somehow (particularly @c operations like tagging, "cvs admin -k", and other @c operations which do not record a history that one @c can get with "cvs log"). Operations on the working @c directory, like export, get, and release, are a @c second category also covered by the current "cvs @c history". @c * The history file does not record the options given @c to a command. The most serious manifestation of @c this is perhaps that it doesn't record whether a command @c was recursive. It is not clear to me whether one @c wants to log at a level very close to the command @c line, as a sort of way of logging each command @c (more or less), or whether one wants @c to log more at the level of what was changed (or @c something in between), but either way the current @c information has pretty big gaps. @c * Further details about a tag--like whether it is a @c branch tag or, if a non-branch tag, which branch it @c is on. One can find out this information about the @c tag as it exists _now_, but if the tag has been @c moved, one doesn't know what it was like at the time @c the history record was written. @c * Whether operating on a particular tag, date, or @c options was implicit (sticky) or explicit. @c @c Another item, only somewhat related to the above, is a @c way to control what is logged in the history file. @c This is probably the only good way to handle @c different people having different ideas about @c information/space tradeoffs. @c @c It isn't really clear that it makes sense to try to @c patch up the history file format as it exists now to @c include all that stuff. It might be better to @c design a whole new CVSROOT/nhistory file and "cvs @c nhistory" command, or some such, or in some other @c way trying to come up with a clean break from the @c past, which can address the above concerns. Another @c open question is how/whether this relates to @c taginfo/loginfo/etc. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node user-defined logging @section User-defined logging @c FIXME: should probably also mention the fact the -l @c global option can disable most of the mechanisms @c discussed here (why? What is the -l global option for?). @c @c FIXME: probably should centralize this information @c here, at least to some extent. Maybe by moving the @c loginfo, etc., nodes here and replacing @c the "user-defined logging" node with one node for @c each method. You can customize @sc{cvs} to log various kinds of actions, in whatever manner you choose. These mechanisms operate by executing a script at various times. The script might append a message to a file listing the information and the programmer who created it, or send mail to a group of developers, or, perhaps, post a message to a particular newsgroup. To log commits, use the @file{loginfo} file (@pxref{loginfo}). @c FIXME: What is difference between doing it in the @c modules file and using loginfo/taginfo? Why should @c user use one or the other? To log commits, checkouts, exports, and tags, respectively, you can also use the @samp{-i}, @samp{-o}, @samp{-e}, and @samp{-t} options in the modules file. For a more flexible way of giving notifications to various users, which requires less in the way of keeping centralized scripts up to date, use the @code{cvs watch add} command (@pxref{Getting Notified}); this command is useful even if you are not using @code{cvs watch on}. @cindex taginfo @cindex Exit status, of taginfo The @file{taginfo} file defines programs to execute when someone executes a @code{tag} or @code{rtag} command. The @file{taginfo} file has the standard form for administrative files (@pxref{Administrative files}), where each line is a regular expression followed by a command to execute. The arguments passed to the command are, in order, the @var{tagname}, @var{operation} (@code{add} for @code{tag}, @code{mov} for @code{tag -F}, and @code{del} for @code{tag -d}), @var{repository}, and any remaining are pairs of @var{filename} @var{revision}. A non-zero exit of the filter program will cause the tag to be aborted. Here is an example of using taginfo to log tag and rtag commands. In the taginfo file put: @example ALL /usr/local/cvsroot/CVSROOT/loggit @end example @noindent Where @file{/usr/local/cvsroot/CVSROOT/loggit} contains the following script: @example #!/bin/sh echo "$@@" >>/home/kingdon/cvsroot/CVSROOT/taglog @end example @node annotate @section Annotate command @cindex annotate (subcommand) @deffn Command {cvs annotate} [@code{-FflR}] [@code{-r rev}|@code{-D date}] files @dots{} For each file in @var{files}, print the head revision of the trunk, together with information on the last modification for each line. For example: @example $ cvs annotate ssfile Annotations for ssfile *************** 1.1 (mary 27-Mar-96): ssfile line 1 1.2 (joe 28-Mar-96): ssfile line 2 @end example The file @file{ssfile} currently contains two lines. The @code{ssfile line 1} line was checked in by @code{mary} on March 27. Then, on March 28, @code{joe} added a line @code{ssfile line 2}, without modifying the @code{ssfile line 1} line. This report doesn't tell you anything about lines which have been deleted or replaced; you need to use @code{cvs diff} for that (@pxref{diff}). @end deffn The options to @code{cvs annotate} are listed in @ref{Invoking CVS}, and can be used to select the files and revisions to annotate. The options are described in more detail there and in @ref{Common options}. @c FIXME: maybe an example using the options? Just @c what it means to select a revision might be worth a @c few words of explanation ("you want to see who @c changed this line *before* 1.4"...). @c --------------------------------------------------------------------- @node Binary files @chapter Handling binary files @cindex Binary files The most common use for @sc{cvs} is to store text files. With text files, @sc{cvs} can merge revisions, display the differences between revisions in a human-visible fashion, and other such operations. However, if you are willing to give up a few of these abilities, @sc{cvs} can store binary files. For example, one might store a web site in @sc{cvs} including both text files and binary images. @menu * Binary why:: More details on issues with binary files * Binary howto:: How to store them @end menu @node Binary why @section The issues with binary files While the need to manage binary files may seem obvious if the files that you customarily work with are binary, putting them into version control does present some additional issues. One basic function of version control is to show the differences between two revisions. For example, if someone else checked in a new version of a file, you may wish to look at what they changed and determine whether their changes are good. For text files, @sc{cvs} provides this functionality via the @code{cvs diff} command. For binary files, it may be possible to extract the two revisions and then compare them with a tool external to @sc{cvs} (for example, word processing software often has such a feature). If there is no such tool, one must track changes via other mechanisms, such as urging people to write good log messages, and hoping that the changes they actually made were the changes that they intended to make. Another ability of a version control system is the ability to merge two revisions. For @sc{cvs} this happens in two contexts. The first is when users make changes in separate working directories (@pxref{Multiple developers}). The second is when one merges explicitly with the @samp{update -j} command (@pxref{Branching and merging}). In the case of text files, @sc{cvs} can merge changes made independently, and signal a conflict if the changes conflict. With binary files, the best that @sc{cvs} can do is present the two different copies of the file, and leave it to the user to resolve the conflict. The user may choose one copy or the other, or may run an external merge tool which knows about that particular file format, if one exists. Note that having the user merge relies primarily on the user to not accidentally omit some changes, and thus is potentially error prone. If this process is thought to be undesirable, the best choice may be to avoid merging. To avoid the merges that result from separate working directories, see the discussion of reserved checkouts (file locking) in @ref{Multiple developers}. To avoid the merges resulting from branches, restrict use of branches. @node Binary howto @section How to store binary files There are two issues with using @sc{cvs} to store binary files. The first is that @sc{cvs} by default converts line endings between the canonical form in which they are stored in the repository (linefeed only), and the form appropriate to the operating system in use on the client (for example, carriage return followed by line feed for Windows NT). The second is that a binary file might happen to contain data which looks like a keyword (@pxref{Keyword substitution}), so keyword expansion must be turned off. @c FIXME: the third is that one can't do merges with @c binary files. xref to Multiple Developers and the @c reserved checkout issues. The @samp{-kb} option available with some @sc{cvs} commands insures that neither line ending conversion nor keyword expansion will be done. Here is an example of how you can create a new file using the @samp{-kb} flag: @example $ echo '$@splitrcskeyword{}Id$' > kotest $ cvs add -kb -m"A test file" kotest $ cvs ci -m"First checkin; contains a keyword" kotest @end example If a file accidentally gets added without @samp{-kb}, one can use the @code{cvs admin} command to recover. For example: @example $ echo '$@splitrcskeyword{}Id$' > kotest $ cvs add -m"A test file" kotest $ cvs ci -m"First checkin; contains a keyword" kotest $ cvs admin -kb kotest $ cvs update -A kotest # @r{For non-unix systems:} # @r{Copy in a good copy of the file from outside CVS} $ cvs commit -m "make it binary" kotest @end example @c Trying to describe this for both unix and non-unix @c in the same description is very confusing. Might @c want to split the two, or just ditch the unix "shortcut" @c (unixheads don't do much with binary files, anyway). @c This used to say "(Try the above example, and do a @c @code{cat kotest} after every command)". But that @c only really makes sense for the unix case. When you check in the file @file{kotest} the file is not preserved as a binary file, because you did not check it in as a binary file. The @code{cvs admin -kb} command sets the default keyword substitution method for this file, but it does not alter the working copy of the file that you have. If you need to cope with line endings (that is, you are using @sc{cvs} on a non-unix system), then you need to check in a new copy of the file, as shown by the @code{cvs commit} command above. On unix, the @code{cvs update -A} command suffices. @c FIXME: should also describe what the *other users* @c need to do, if they have checked out copies which @c have been corrupted by lack of -kb. I think maybe @c "cvs update -kb" or "cvs @c update -A" would suffice, although the user who @c reported this suggested removing the file, manually @c removing it from CVS/Entries, and then "cvs update" (Note that you can use @code{cvs log} to determine the default keyword substitution method for a file and @code{cvs status} to determine the keyword substitution method for a working copy.) However, in using @code{cvs admin -k} to change the keyword expansion, be aware that the keyword expansion mode is not version controlled. This means that, for example, that if you have a text file in old releases, and a binary file with the same name in new releases, @sc{cvs} provides no way to check out the file in text or binary mode depending on what version you are checking out. There is no good workaround for this problem. You can also set a default for whether @code{cvs add} and @code{cvs import} treat a file as binary based on its name; for example you could say that files who names end in @samp{.exe} are binary. @xref{Wrappers}. There is currently no way to have @sc{cvs} detect whether a file is binary based on its contents. The main difficulty with designing such a feature is that it is not clear how to distinguish between binary and non-binary files, and the rules to apply would vary considerably with the operating system. @c For example, it would be good on MS-DOS-family OSes @c for anything containing ^Z to be binary. Having @c characters with the 8th bit set imply binary is almost @c surely a bad idea in the context of ISO-8859-* and @c other such character sets. On VMS or the Mac, we @c could use the OS's file typing. This is a @c commonly-desired feature, and something of this sort @c may make sense. But there are a lot of pitfalls here. @c @c Another, probably better, way to tell is to read the @c file in text mode, write it to a temp file in text @c mode, and then do a binary mode compare of the two @c files. If they differ, it is a binary file. This @c might have problems on VMS (or some other system @c with several different text modes), but in general @c should be relatively portable. The only other @c downside I can think of is that it would be fairly @c slow, but that is perhaps a small price to pay for @c not having your files corrupted. Another issue is @c what happens if you import a text file with bare @c linefeeds on Windows. Such files will show up on @c Windows sometimes (I think some native windows @c programs even write them, on occasion). Perhaps it @c is reasonable to treat such files as binary; after @c all it is something of a presumption to assume that @c the user would want the linefeeds converted to CRLF. @c --------------------------------------------------------------------- @node Multiple developers @chapter Multiple developers @cindex Multiple developers @cindex Team of developers @cindex File locking @cindex Locking files @cindex Working copy @cindex Reserved checkouts @cindex Unreserved checkouts @cindex RCS-style locking When more than one person works on a software project things often get complicated. Often, two people try to edit the same file simultaneously. One solution, known as @dfn{file locking} or @dfn{reserved checkouts}, is to allow only one person to edit each file at a time. This is the only solution with some version control systems, including @sc{rcs} and @sc{sccs}. Currently the usual way to get reserved checkouts with @sc{cvs} is the @code{cvs admin -l} command (@pxref{admin options}). This is not as nicely integrated into @sc{cvs} as the watch features, described below, but it seems that most people with a need for reserved checkouts find it adequate. @c Or "find it better than worrying about implementing @c nicely integrated reserved checkouts" or ...? It also may be possible to use the watches features described below, together with suitable procedures (not enforced by software), to avoid having two people edit at the same time. @c Our unreserved checkout model might not @c be quite the same as others. For example, I @c think that some systems will tend to create a branch @c in the case where CVS prints "up-to-date check failed". @c It isn't clear to me whether we should try to @c explore these subtleties; it could easily just @c confuse people. The default model with @sc{cvs} is known as @dfn{unreserved checkouts}. In this model, developers can edit their own @dfn{working copy} of a file simultaneously. The first person that commits his changes has no automatic way of knowing that another has started to edit it. Others will get an error message when they try to commit the file. They must then use @sc{cvs} commands to bring their working copy up to date with the repository revision. This process is almost automatic. @c FIXME? should probably use the word "watch" here, to @c tie this into the text below and above. @sc{cvs} also supports mechanisms which facilitate various kinds of communication, without actually enforcing rules like reserved checkouts do. The rest of this chapter describes how these various models work, and some of the issues involved in choosing between them. @ignore Here is a draft reserved checkout design or discussion of the issues. This seems like as good a place as any for this. Might want a cvs lock/cvs unlock--in which the names differ from edit/unedit because the network must be up for these to work. unedit gives an error if there is a reserved checkout in place (so that people don't accidentally leave locks around); unlock gives an error if one is not in place (this is more arguable; perhaps it should act like unedit in that case). On the other hand, might want it so that emacs, scripts, etc., can get ready to edit a file without having to know which model is in use. In that case we would have a "cvs watch lock" (or .cvsrc?) (that is, three settings, "on", "off", and "lock"). Having cvs watch lock set would cause a get to record in the CVS directory which model is in use, and cause "cvs edit" to change behaviors. We'd want a way to query which setting is in effect (this would be handy even if it is only "on" or "off" as presently). If lock is in effect, then commit would require a lock before allowing a checkin; chmod wouldn't suffice (might be debatable--see chmod comment below, in watches--but it is the way people expect RCS to work and I can't think of any significant downside. On the other hand, maybe it isn't worth bothering, because people who are used to RCS wouldn't think to use chmod anyway). Implementation: use file attributes or use RCS locking. The former avoids more dependence on RCS behaviors we will need to reimplement as we librarify RCS, and makes it easier to import/export RCS files (in that context, want to ignore the locker field). But note that RCS locks are per-branch, which is the correct behavior (this is also an issue for the "watch on" features; they should be per-branch too). Here are a few more random notes about implementation details, assuming "cvs watch lock" and CVS/Watched file? Or try to fit this into CVS/Entries somehow? Cases: (1) file is checked out (unreserved or with watch on) by old version of @sc{cvs}, now we do something with new one, (2) file is checked out by new version, now we do something with old one. Remote protocol would have a "Watched" analogous to "Mode". Of course it would apply to all Updated-like requests. How do we keep this setting up to date? I guess that there wants to be a Watched request, and the server would send a new one if it isn't up to date? (Ugh--hard to implement and slows down "cvs -q update"--is there an easier way?) "cvs edit"--checks CVS/Watched, and if watch lock, then sends "edit-lock" request. Which comes back with a Checked-in with appropriate Watched (off, on, lock, locked, or some such?), or error message if already locked. "cvs commit"--only will commit if off/on/locked. lock is not OK. Doc: note that "cvs edit" must be connected to network if watch lock is in effect. Talk about what to do if someone has locked a file and you want to edit that file. (breaking locks, or lack thereof). One other idea (which could work along with the existing "cvs admin -l" reserved checkouts, as well as the above): "cvs editors" could show who has the file locked, if someone does. @end ignore @menu * File status:: A file can be in several states * Updating a file:: Bringing a file up-to-date * Conflicts example:: An informative example * Informing others:: To cooperate you must inform * Concurrency:: Simultaneous repository access * Watches:: Mechanisms to track who is editing files * Choosing a model:: Reserved or unreserved checkouts? @end menu @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node File status @section File status @cindex File status @cindex Status of a file @c Shouldn't this start with an example or something, @c introducing the unreserved checkout model? Before we @c dive into listing states? Based on what operations you have performed on a checked out file, and what operations others have performed to that file in the repository, one can classify a file in a number of states. The states, as reported by the @code{status} command, are: @c The order of items is chosen to group logically @c similar outputs together. @c People who want alphabetical can use the index... @table @asis @cindex Up-to-date @item Up-to-date The file is identical with the latest revision in the repository for the branch in use. @c FIXME: should we clarify "in use"? The answer is @c sticky tags, and trying to distinguish branch sticky @c tags from non-branch sticky tags seems rather awkward @c here. @c FIXME: What happens with non-branch sticky tags? Is @c a stuck file "Up-to-date" or "Needs checkout" or what? @item Locally Modified @cindex Locally Modified You have edited the file, and not yet committed your changes. @item Locally Added @cindex Locally Added You have added the file with @code{add}, and not yet committed your changes. @c There are many cases involving the file being @c added/removed/modified in the working directory, and @c added/removed/modified in the repository, which we @c don't try to describe here. I'm not sure that "cvs @c status" produces a non-confusing output in most of @c those cases. @item Locally Removed @cindex Locally Removed You have removed the file with @code{remove}, and not yet committed your changes. @item Needs Checkout @cindex Needs Checkout Someone else has committed a newer revision to the repository. The name is slightly misleading; you will ordinarily use @code{update} rather than @code{checkout} to get that newer revision. @item Needs Patch @cindex Needs Patch @c See also newb-123j0 in sanity.sh (although that case @c should probably be changed rather than documented). Like Needs Checkout, but the @sc{cvs} server will send a patch rather than the entire file. Sending a patch or sending an entire file accomplishes the same thing. @item Needs Merge @cindex Needs Merge Someone else has committed a newer revision to the repository, and you have also made modifications to the file. @item Unresolved Conflict @cindex Unresolved Conflict @c FIXCVS - This file status needs to be changed to some more informative @c text that distinguishes it more clearly from each of the Locally Added, @c File had conflicts on merge, and Unknown status types, but an exact and @c succinct wording escapes me at the moment. A file with the same name as this new file has been added to the repository from a second workspace. This file will need to be moved out of the way to allow an @code{update} to complete. @item File had conflicts on merge @cindex File had conflicts on merge @c is it worth saying that this message was "Unresolved @c Conflict" in CVS 1.9 and earlier? I'm inclined to @c think that is unnecessarily confusing to new users. This is like Locally Modified, except that a previous @code{update} command gave a conflict. If you have not already done so, you need to resolve the conflict as described in @ref{Conflicts example}. @item Unknown @cindex Unknown @sc{cvs} doesn't know anything about this file. For example, you have created a new file and have not run @code{add}. @c @c "Entry Invalid" and "Classify Error" are also in the @c status.c. The latter definitely indicates a CVS bug @c (should it be worded more like "internal error" so @c people submit bug reports if they see it?). The former @c I'm not as sure; I haven't tracked down whether/when it @c appears in "cvs status" output. @end table To help clarify the file status, @code{status} also reports the @code{Working revision} which is the revision that the file in the working directory derives from, and the @code{Repository revision} which is the latest revision in the repository for the branch in use. @c FIXME: should we clarify "in use"? The answer is @c sticky tags, and trying to distinguish branch sticky @c tags from non-branch sticky tags seems rather awkward @c here. @c FIXME: What happens with non-branch sticky tags? @c What is the Repository Revision there? See the @c comment at vn_rcs in cvs.h, which is kind of @c confused--we really need to document better what this @c field contains. @c Q: Should we document "New file!" and other such @c outputs or are they self-explanatory? @c FIXME: what about the date to the right of "Working @c revision"? It doesn't appear with client/server and @c seems unnecessary (redundant with "ls -l") so @c perhaps it should be removed for non-client/server too? @c FIXME: Need some examples. @c FIXME: Working revision can also be something like @c "-1.3" for a locally removed file. Not at all @c self-explanatory (and it is possible that CVS should @c be changed rather than documenting this). @c Would be nice to have an @example showing output @c from cvs status, with comments showing the xref @c where each part of the output is described. This @c might fit in nicely if it is desirable to split this @c node in two; one to introduce "cvs status" and one @c to list each of the states. The options to @code{status} are listed in @ref{Invoking CVS}. For information on its @code{Sticky tag} and @code{Sticky date} output, see @ref{Sticky tags}. For information on its @code{Sticky options} output, see the @samp{-k} option in @ref{update options}. You can think of the @code{status} and @code{update} commands as somewhat complementary. You use @code{update} to bring your files up to date, and you can use @code{status} to give you some idea of what an @code{update} would do (of course, the state of the repository might change before you actually run @code{update}). In fact, if you want a command to display file status in a more brief format than is displayed by the @code{status} command, you can invoke @cindex update, to display file status @example $ cvs -n -q update @end example The @samp{-n} option means to not actually do the update, but merely to display statuses; the @samp{-q} option avoids printing the name of each directory. For more information on the @code{update} command, and these options, see @ref{Invoking CVS}. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Updating a file @section Bringing a file up to date @cindex Bringing a file up to date @cindex Updating a file @cindex Merging a file @cindex Update, introduction When you want to update or merge a file, use the @code{update} command. For files that are not up to date this is roughly equivalent to a @code{checkout} command: the newest revision of the file is extracted from the repository and put in your working directory. Your modifications to a file are never lost when you use @code{update}. If no newer revision exists, running @code{update} has no effect. If you have edited the file, and a newer revision is available, @sc{cvs} will merge all changes into your working copy. For instance, imagine that you checked out revision 1.4 and started editing it. In the meantime someone else committed revision 1.5, and shortly after that revision 1.6. If you run @code{update} on the file now, @sc{cvs} will incorporate all changes between revision 1.4 and 1.6 into your file. @cindex Overlap If any of the changes between 1.4 and 1.6 were made too close to any of the changes you have made, an @dfn{overlap} occurs. In such cases a warning is printed, and the resulting file includes both versions of the lines that overlap, delimited by special markers. @xref{update}, for a complete description of the @code{update} command. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Conflicts example @section Conflicts example @cindex Merge, an example @cindex Example of merge @cindex driver.c (merge example) Suppose revision 1.4 of @file{driver.c} contains this: @example #include void main() @{ parse(); if (nerr == 0) gencode(); else fprintf(stderr, "No code generated.\n"); exit(nerr == 0 ? 0 : 1); @} @end example @noindent Revision 1.6 of @file{driver.c} contains this: @example #include int main(int argc, char **argv) @{ parse(); if (argc != 1) @{ fprintf(stderr, "tc: No args expected.\n"); exit(1); @} if (nerr == 0) gencode(); else fprintf(stderr, "No code generated.\n"); exit(!!nerr); @} @end example @noindent Your working copy of @file{driver.c}, based on revision 1.4, contains this before you run @samp{cvs update}: @c -- Really include "cvs"? @example #include #include void main() @{ init_scanner(); parse(); if (nerr == 0) gencode(); else fprintf(stderr, "No code generated.\n"); exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE); @} @end example @noindent You run @samp{cvs update}: @c -- Really include "cvs"? @example $ cvs update driver.c RCS file: /usr/local/cvsroot/yoyodyne/tc/driver.c,v retrieving revision 1.4 retrieving revision 1.6 Merging differences between 1.4 and 1.6 into driver.c rcsmerge warning: overlaps during merge cvs update: conflicts found in driver.c C driver.c @end example @noindent @cindex Conflicts (merge example) @sc{cvs} tells you that there were some conflicts. Your original working file is saved unmodified in @file{.#driver.c.1.4}. The new version of @file{driver.c} contains this: @example #include #include int main(int argc, char **argv) @{ init_scanner(); parse(); if (argc != 1) @{ fprintf(stderr, "tc: No args expected.\n"); exit(1); @} if (nerr == 0) gencode(); else fprintf(stderr, "No code generated.\n"); @asis{}<<<<<<< driver.c exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE); @asis{}======= exit(!!nerr); @asis{}>>>>>>> 1.6 @} @end example @noindent @cindex Markers, conflict @cindex Conflict markers @cindex <<<<<<< @cindex >>>>>>> @cindex ======= Note how all non-overlapping modifications are incorporated in your working copy, and that the overlapping section is clearly marked with @samp{<<<<<<<}, @samp{=======} and @samp{>>>>>>>}. @cindex Resolving a conflict @cindex Conflict resolution You resolve the conflict by editing the file, removing the markers and the erroneous line. Suppose you end up with this file: @c -- Add xref to the pcl-cvs manual when it talks @c -- about this. @example #include #include int main(int argc, char **argv) @{ init_scanner(); parse(); if (argc != 1) @{ fprintf(stderr, "tc: No args expected.\n"); exit(1); @} if (nerr == 0) gencode(); else fprintf(stderr, "No code generated.\n"); exit(nerr == 0 ? EXIT_SUCCESS : EXIT_FAILURE); @} @end example @noindent You can now go ahead and commit this as revision 1.7. @example $ cvs commit -m "Initialize scanner. Use symbolic exit values." driver.c Checking in driver.c; /usr/local/cvsroot/yoyodyne/tc/driver.c,v <-- driver.c new revision: 1.7; previous revision: 1.6 done @end example For your protection, @sc{cvs} will refuse to check in a file if a conflict occurred and you have not resolved the conflict. Currently to resolve a conflict, you must change the timestamp on the file. In previous versions of @sc{cvs}, you also needed to insure that the file contains no conflict markers. Because your file may legitimately contain conflict markers (that is, occurrences of @samp{>>>>>>> } at the start of a line that don't mark a conflict), the current version of @sc{cvs} will print a warning and proceed to check in the file. @c The old behavior was really icky; the only way out @c was to start hacking on @c the @code{CVS/Entries} file or other such workarounds. @c @c If the timestamp thing isn't considered nice enough, @c maybe there should be a "cvs resolved" command @c which clears the conflict indication. For a nice user @c interface, this should be invoked by an interactive @c merge tool like emerge rather than by the user @c directly--such a tool can verify that the user has @c really dealt with each conflict. @cindex emerge If you use release 1.04 or later of pcl-cvs (a @sc{gnu} Emacs front-end for @sc{cvs}) you can use an Emacs package called emerge to help you resolve conflicts. See the documentation for pcl-cvs. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Informing others @section Informing others about commits @cindex Informing others @cindex Spreading information @cindex Mail, automatic mail on commit It is often useful to inform others when you commit a new revision of a file. The @samp{-i} option of the @file{modules} file, or the @file{loginfo} file, can be used to automate this process. @xref{modules}. @xref{loginfo}. You can use these features of @sc{cvs} to, for instance, instruct @sc{cvs} to mail a message to all developers, or post a message to a local newsgroup. @c -- More text would be nice here. @node Concurrency @section Several developers simultaneously attempting to run CVS @cindex Locks, cvs, introduction @c For a discussion of *why* CVS creates locks, see @c the comment at the start of src/lock.c If several developers try to run @sc{cvs} at the same time, one may get the following message: @example [11:43:23] waiting for bach's lock in /usr/local/cvsroot/foo @end example @cindex #cvs.rfl, removing @cindex #cvs.wfl, removing @cindex #cvs.lock, removing @sc{cvs} will try again every 30 seconds, and either continue with the operation or print the message again, if it still needs to wait. If a lock seems to stick around for an undue amount of time, find the person holding the lock and ask them about the cvs command they are running. If they aren't running a cvs command, look in the repository directory mentioned in the message and remove files which they own whose names start with @file{#cvs.rfl}, @file{#cvs.wfl}, or @file{#cvs.lock}. Note that these locks are to protect @sc{cvs}'s internal data structures and have no relationship to the word @dfn{lock} in the sense used by @sc{rcs}---which refers to reserved checkouts (@pxref{Multiple developers}). Any number of people can be reading from a given repository at a time; only when someone is writing do the locks prevent other people from reading or writing. @cindex Atomic transactions, lack of @cindex Transactions, atomic, lack of @c the following talks about what one might call commit/update @c atomicity. @c Probably also should say something about @c commit/commit atomicity, that is, "An update will @c not get partial versions of more than one commit". @c CVS currently has this property and I guess we can @c make it a documented feature. @c For example one person commits @c a/one.c and b/four.c and another commits a/two.c and @c b/three.c. Then an update cannot get the new a/one.c @c and a/two.c and the old b/four.c and b/three.c. One might hope for the following property: @quotation If someone commits some changes in one cvs command, then an update by someone else will either get all the changes, or none of them. @end quotation @noindent but @sc{cvs} does @emph{not} have this property. For example, given the files @example a/one.c a/two.c b/three.c b/four.c @end example @noindent if someone runs @example cvs ci a/two.c b/three.c @end example @noindent and someone else runs @code{cvs update} at the same time, the person running @code{update} might get only the change to @file{b/three.c} and not the change to @file{a/two.c}. @node Watches @section Mechanisms to track who is editing files @cindex Watches For many groups, use of @sc{cvs} in its default mode is perfectly satisfactory. Users may sometimes go to check in a modification only to find that another modification has intervened, but they deal with it and proceed with their check in. Other groups prefer to be able to know who is editing what files, so that if two people try to edit the same file they can choose to talk about who is doing what when rather than be surprised at check in time. The features in this section allow such coordination, while retaining the ability of two developers to edit the same file at the same time. @c Some people might ask why CVS does not enforce the @c rule on chmod, by requiring a cvs edit before a cvs @c commit. The main reason is that it could always be @c circumvented--one could edit the file, and @c then when ready to check it in, do the cvs edit and put @c in the new contents and do the cvs commit. One @c implementation note: if we _do_ want to have cvs commit @c require a cvs edit, we should store the state on @c whether the cvs edit has occurred in the working @c directory, rather than having the server try to keep @c track of what working directories exist. @c FIXME: should the above discussion be part of the @c manual proper, somewhere, not just in a comment? For maximum benefit developers should use @code{cvs edit} (not @code{chmod}) to make files read-write to edit them, and @code{cvs release} (not @code{rm}) to discard a working directory which is no longer in use, but @sc{cvs} is not able to enforce this behavior. @c I'm a little dissatisfied with this presentation, @c because "watch on"/"edit"/"editors" are one set of @c functionality, and "watch add"/"watchers" is another @c which is somewhat orthogonal even though they interact in @c various ways. But I think it might be @c confusing to describe them separately (e.g. "watch @c add" with loginfo). I don't know. @menu * Setting a watch:: Telling CVS to watch certain files * Getting Notified:: Telling CVS to notify you * Editing files:: How to edit a file which is being watched * Watch information:: Information about who is watching and editing * Watches Compatibility:: Watches interact poorly with CVS 1.6 or earlier @end menu @node Setting a watch @subsection Telling CVS to watch certain files To enable the watch features, you first specify that certain files are to be watched. @cindex watch on (subcommand) @deffn Command {cvs watch on} [@code{-lR}] [@var{files}]@dots{} @cindex Read-only files, and watches Specify that developers should run @code{cvs edit} before editing @var{files}. @sc{cvs} will create working copies of @var{files} read-only, to remind developers to run the @code{cvs edit} command before working on them. If @var{files} includes the name of a directory, @sc{cvs} arranges to watch all files added to the corresponding repository directory, and sets a default for files added in the future; this allows the user to set notification policies on a per-directory basis. The contents of the directory are processed recursively, unless the @code{-l} option is given. The @code{-R} option can be used to force recursion if the @code{-l} option is set in @file{~/.cvsrc} (@pxref{~/.cvsrc}). If @var{files} is omitted, it defaults to the current directory. @cindex watch off (subcommand) @end deffn @deffn Command {cvs watch off} [@code{-lR}] [@var{files}]@dots{} Do not create @var{files} read-only on checkout; thus, developers will not be reminded to use @code{cvs edit} and @code{cvs unedit}. @ignore @sc{cvs} will check out @var{files} read-write as usual, unless other permissions override due to the @code{PreservePermissions} option being enabled in the @file{config} administrative file (@pxref{Special Files}, @pxref{config}) @end ignore The @var{files} and options are processed as for @code{cvs watch on}. @end deffn @node Getting Notified @subsection Telling CVS to notify you You can tell @sc{cvs} that you want to receive notifications about various actions taken on a file. You can do this without using @code{cvs watch on} for the file, but generally you will want to use @code{cvs watch on}, to remind developers to use the @code{cvs edit} command. @cindex watch add (subcommand) @deffn Command {cvs watch add} [@code{-lR}] [@code{-a} @var{action}]@dots{} [@var{files}]@dots{} Add the current user to the list of people to receive notification of work done on @var{files}. The @code{-a} option specifies what kinds of events @sc{cvs} should notify the user about. @var{action} is one of the following: @table @code @item edit Another user has applied the @code{cvs edit} command (described below) to a watched file. @item commit Another user has committed changes to one of the named @var{files}. @item unedit Another user has abandoned editing a file (other than by committing changes). They can do this in several ways, by: @itemize @bullet @item applying the @code{cvs unedit} command (described below) to the file @item applying the @code{cvs release} command (@pxref{release}) to the file's parent directory (or recursively to a directory more than one level up) @item deleting the file and allowing @code{cvs update} to recreate it @end itemize @item all All of the above. @item none None of the above. (This is useful with @code{cvs edit}, described below.) @end table The @code{-a} option may appear more than once, or not at all. If omitted, the action defaults to @code{all}. The @var{files} and options are processed as for @code{cvs watch on}. @end deffn @cindex watch remove (subcommand) @deffn Command {cvs watch remove} [@code{-lR}] [@code{-a} @var{action}]@dots{} [@var{files}]@dots{} Remove a notification request established using @code{cvs watch add}; the arguments are the same. If the @code{-a} option is present, only watches for the specified actions are removed. @end deffn @cindex notify (admin file) When the conditions exist for notification, @sc{cvs} calls the @file{notify} administrative file. Edit @file{notify} as one edits the other administrative files (@pxref{Intro administrative files}). This file follows the usual conventions for administrative files (@pxref{syntax}), where each line is a regular expression followed by a command to execute. The command should contain a single occurrence of @samp{%s} which will be replaced by the user to notify; the rest of the information regarding the notification will be supplied to the command on standard input. The standard thing to put in the @code{notify} file is the single line: @example ALL mail %s -s "CVS notification" @end example @noindent This causes users to be notified by electronic mail. @c FIXME: should it be this hard to set up this @c behavior (and the result when one fails to do so, @c silent failure to notify, so non-obvious)? Should @c CVS give a warning if no line in notify matches (and @c document the use of "DEFAULT :" for the case where @c skipping the notification is indeed desired)? @cindex users (admin file) Note that if you set this up in the straightforward way, users receive notifications on the server machine. One could of course write a @file{notify} script which directed notifications elsewhere, but to make this easy, @sc{cvs} allows you to associate a notification address for each user. To do so create a file @file{users} in @file{CVSROOT} with a line for each user in the format @var{user}:@var{value}. Then instead of passing the name of the user to be notified to @file{notify}, @sc{cvs} will pass the @var{value} (normally an email address on some other machine). @sc{cvs} does not notify you for your own changes. Currently this check is done based on whether the user name of the person taking the action which triggers notification matches the user name of the person getting notification. In fact, in general, the watches features only track one edit by each user. It probably would be more useful if watches tracked each working directory separately, so this behavior might be worth changing. @c "behavior might be worth changing" is an effort to @c point to future directions while also not promising @c that "they" (as in "why don't they fix CVS to....") @c will do this. @c one implementation issue is identifying whether a @c working directory is same or different. Comparing @c pathnames/hostnames is hopeless, but having the server @c supply a serial number which the client stores in the @c CVS directory as a magic cookie should work. @node Editing files @subsection How to edit a file which is being watched @cindex Checkout, as term for getting ready to edit Since a file which is being watched is checked out read-only, you cannot simply edit it. To make it read-write, and inform others that you are planning to edit it, use the @code{cvs edit} command. Some systems call this a @dfn{checkout}, but @sc{cvs} uses that term for obtaining a copy of the sources (@pxref{Getting the source}), an operation which those systems call a @dfn{get} or a @dfn{fetch}. @c Issue to think about: should we transition CVS @c towards the "get" terminology? "cvs get" is already a @c synonym for "cvs checkout" and that section of the @c manual refers to "Getting the source". If this is @c done, needs to be done gingerly (for example, we should @c still accept "checkout" in .cvsrc files indefinitely @c even if the CVS's messages are changed from "cvs checkout: " @c to "cvs get: "). @c There is a concern about whether "get" is not as @c good for novices because it is a more general term @c than "checkout" (and thus arguably harder to assign @c a technical meaning for). @cindex edit (subcommand) @deffn Command {cvs edit} [@code{-lR}] [@code{-a} @var{action}]@dots{} [@var{files}]@dots{} Prepare to edit the working files @var{files}. @sc{cvs} makes the @var{files} read-write, and notifies users who have requested @code{edit} notification for any of @var{files}. The @code{cvs edit} command accepts the same options as the @code{cvs watch add} command, and establishes a temporary watch for the user on @var{files}; @sc{cvs} will remove the watch when @var{files} are @code{unedit}ed or @code{commit}ted. If the user does not wish to receive notifications, she should specify @code{-a none}. The @var{files} and the options are processed as for the @code{cvs watch} commands. @ignore @strong{Caution: If the @code{PreservePermissions} option is enabled in the repository (@pxref{config}), @sc{cvs} will not change the permissions on any of the @var{files}. The reason for this change is to ensure that using @samp{cvs edit} does not interfere with the ability to store file permissions in the @sc{cvs} repository.} @end ignore @end deffn Normally when you are done with a set of changes, you use the @code{cvs commit} command, which checks in your changes and returns the watched files to their usual read-only state. But if you instead decide to abandon your changes, or not to make any changes, you can use the @code{cvs unedit} command. @cindex unedit (subcommand) @cindex Abandoning work @cindex Reverting to repository version @deffn Command {cvs unedit} [@code{-lR}] [@var{files}]@dots{} Abandon work on the working files @var{files}, and revert them to the repository versions on which they are based. @sc{cvs} makes those @var{files} read-only for which users have requested notification using @code{cvs watch on}. @sc{cvs} notifies users who have requested @code{unedit} notification for any of @var{files}. The @var{files} and options are processed as for the @code{cvs watch} commands. If watches are not in use, the @code{unedit} command probably does not work, and the way to revert to the repository version is with the command @code{cvs update -C file} (@pxref{update}). The meaning is not precisely the same; the latter may also bring in some changes which have been made in the repository since the last time you updated. @c It would be a useful enhancement to CVS to make @c unedit work in the non-watch case as well. @end deffn When using client/server @sc{cvs}, you can use the @code{cvs edit} and @code{cvs unedit} commands even if @sc{cvs} is unable to successfully communicate with the server; the notifications will be sent upon the next successful @sc{cvs} command. @node Watch information @subsection Information about who is watching and editing @cindex watchers (subcommand) @deffn Command {cvs watchers} [@code{-lR}] [@var{files}]@dots{} List the users currently watching changes to @var{files}. The report includes the files being watched, and the mail address of each watcher. The @var{files} and options are processed as for the @code{cvs watch} commands. @end deffn @cindex editors (subcommand) @deffn Command {cvs editors} [@code{-lR}] [@var{files}]@dots{} List the users currently working on @var{files}. The report includes the mail address of each user, the time when the user began working with the file, and the host and path of the working directory containing the file. The @var{files} and options are processed as for the @code{cvs watch} commands. @end deffn @node Watches Compatibility @subsection Using watches with old versions of CVS @cindex CVS 1.6, and watches If you use the watch features on a repository, it creates @file{CVS} directories in the repository and stores the information about watches in that directory. If you attempt to use @sc{cvs} 1.6 or earlier with the repository, you get an error message such as the following (all on one line): @example cvs update: cannot open CVS/Entries for reading: No such file or directory @end example @noindent and your operation will likely be aborted. To use the watch features, you must upgrade all copies of @sc{cvs} which use that repository in local or server mode. If you cannot upgrade, use the @code{watch off} and @code{watch remove} commands to remove all watches, and that will restore the repository to a state which @sc{cvs} 1.6 can cope with. @node Choosing a model @section Choosing between reserved or unreserved checkouts @cindex Choosing, reserved or unreserved checkouts Reserved and unreserved checkouts each have pros and cons. Let it be said that a lot of this is a matter of opinion or what works given different groups' working styles, but here is a brief description of some of the issues. There are many ways to organize a team of developers. @sc{cvs} does not try to enforce a certain organization. It is a tool that can be used in several ways. Reserved checkouts can be very counter-productive. If two persons want to edit different parts of a file, there may be no reason to prevent either of them from doing so. Also, it is common for someone to take out a lock on a file, because they are planning to edit it, but then forget to release the lock. @c "many groups"? specifics? cites to papers on this? @c some way to weasel-word it a bit more so we don't @c need facts :-)? People, especially people who are familiar with reserved checkouts, often wonder how often conflicts occur if unreserved checkouts are used, and how difficult they are to resolve. The experience with many groups is that they occur rarely and usually are relatively straightforward to resolve. The rarity of serious conflicts may be surprising, until one realizes that they occur only when two developers disagree on the proper design for a given section of code; such a disagreement suggests that the team has not been communicating properly in the first place. In order to collaborate under @emph{any} source management regimen, developers must agree on the general design of the system; given this agreement, overlapping changes are usually straightforward to merge. In some cases unreserved checkouts are clearly inappropriate. If no merge tool exists for the kind of file you are managing (for example word processor files or files edited by Computer Aided Design programs), and it is not desirable to change to a program which uses a mergeable data format, then resolving conflicts is going to be unpleasant enough that you generally will be better off to simply avoid the conflicts instead, by using reserved checkouts. The watches features described above in @ref{Watches} can be considered to be an intermediate model between reserved checkouts and unreserved checkouts. When you go to edit a file, it is possible to find out who else is editing it. And rather than having the system simply forbid both people editing the file, it can tell you what the situation is and let you figure out whether it is a problem in that particular case or not. Therefore, for some groups it can be considered the best of both the reserved checkout and unreserved checkout worlds. @c --------------------------------------------------------------------- @node Revision management @chapter Revision management @cindex Revision management @c -- This chapter could be expanded a lot. @c -- Experiences are very welcome! If you have read this far, you probably have a pretty good grasp on what @sc{cvs} can do for you. This chapter talks a little about things that you still have to decide. If you are doing development on your own using @sc{cvs} you could probably skip this chapter. The questions this chapter takes up become more important when more than one person is working in a repository. @menu * When to commit:: Some discussion on the subject @end menu @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node When to commit @section When to commit? @cindex When to commit @cindex Committing, when to @cindex Policy Your group should decide which policy to use regarding commits. Several policies are possible, and as your experience with @sc{cvs} grows you will probably find out what works for you. If you commit files too quickly you might commit files that do not even compile. If your partner updates his working sources to include your buggy file, he will be unable to compile the code. On the other hand, other persons will not be able to benefit from the improvements you make to the code if you commit very seldom, and conflicts will probably be more common. It is common to only commit files after making sure that they can be compiled. Some sites require that the files pass a test suite. Policies like this can be enforced using the commitinfo file (@pxref{commitinfo}), but you should think twice before you enforce such a convention. By making the development environment too controlled it might become too regimented and thus counter-productive to the real goal, which is to get software written. @c --------------------------------------------------------------------- @node Keyword substitution @chapter Keyword substitution @cindex Keyword substitution @cindex Keyword expansion @cindex Identifying files @comment Be careful when editing this chapter. @comment Remember that this file is kept under @comment version control, so we must not accidentally @comment include a valid keyword in the running text. As long as you edit source files inside a working directory you can always find out the state of your files via @samp{cvs status} and @samp{cvs log}. But as soon as you export the files from your development environment it becomes harder to identify which revisions they are. @sc{cvs} can use a mechanism known as @dfn{keyword substitution} (or @dfn{keyword expansion}) to help identifying the files. Embedded strings of the form @code{$@var{keyword}$} and @code{$@var{keyword}:@dots{}$} in a file are replaced with strings of the form @code{$@var{keyword}:@var{value}$} whenever you obtain a new revision of the file. @menu * Keyword list:: Keywords * Using keywords:: Using keywords * Avoiding substitution:: Avoiding substitution * Substitution modes:: Substitution modes * Configuring keyword expansion:: Configuring keyword expansion * Log keyword:: Problems with the $@splitrcskeyword{}Log$ keyword. @end menu @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Keyword list @section Keyword List @cindex Keyword List @c FIXME: need some kind of example here I think, @c perhaps in a @c "Keyword intro" node. The intro in the "Keyword @c substitution" node itself seems OK, but to launch @c into a list of the keywords somehow seems too abrupt. This is a list of the keywords: @table @code @cindex Author keyword @item $@splitrcskeyword{Author}$ The login name of the user who checked in the revision. @cindex CVSHeader keyword @item $@splitrcskeyword{CVSHeader} A standard header (similar to $@splitrcskeyword{Header}$, but with the CVS root stripped off). It contains the relative pathname of the @sc{rcs} file to the CVS root, the revision number, the date (UTC), the author, the state, and the locker (if locked). Files will normally never be locked when you use @sc{cvs}. Note that this keyword has only been recently introduced to @sc{cvs} and may cause problems with existing installations if $@splitrcskeyword{CVSHeader}$ is already in the files for a different purpose. This keyword may be excluded using the @code{KeywordExpansion=eCVSHeader} in the @file{CVSROOT/config} file. See @ref{Configuring keyword expansion} for more details. @cindex Date keyword @item $@splitrcskeyword{Date}$ The date and time (UTC) the revision was checked in. @cindex Header keyword @item $@splitrcskeyword{Header}$ A standard header containing the full pathname of the @sc{rcs} file, the revision number, the date (UTC), the author, the state, and the locker (if locked). Files will normally never be locked when you use @sc{cvs}. @cindex Id keyword @item $@splitrcskeyword{Id}$ Same as @code{$@splitrcskeyword{Header}$}, except that the @sc{rcs} filename is without a path. @cindex Name keyword @item $@splitrcskeyword{Name}$ Tag name used to check out this file. The keyword is expanded only if one checks out with an explicit tag name. For example, when running the command @code{cvs co -r first}, the keyword expands to @samp{Name: first}. @cindex Locker keyword @item $@splitrcskeyword{Locker}$ The login name of the user who locked the revision (empty if not locked, which is the normal case unless @code{cvs admin -l} is in use). @cindex Log keyword @item $@splitrcskeyword{Log}$ The log message supplied during commit, preceded by a header containing the @sc{rcs} filename, the revision number, the author, and the date (UTC). Existing log messages are @emph{not} replaced. Instead, the new log message is inserted after @code{$@splitrcskeyword{Log:@dots{}}$}. Each new line is prefixed with the same string which precedes the @code{$Log} keyword. For example, if the file contains: @example /* Here is what people have been up to: * * $@splitrcskeyword{}Log: frob.c,v $ * Revision 1.1 1997/01/03 14:23:51 joe * Add the superfrobnicate option * */ @end example @noindent then additional lines which are added when expanding the @code{$Log} keyword will be preceded by @samp{ * }. Unlike previous versions of @sc{cvs} and @sc{rcs}, the @dfn{comment leader} from the @sc{rcs} file is not used. The @code{$Log} keyword is useful for accumulating a complete change log in a source file, but for several reasons it can be problematic. @xref{Log keyword}. @cindex RCSfile keyword @item $@splitrcskeyword{RCSfile}$ The name of the RCS file without a path. @cindex Revision keyword @item $@splitrcskeyword{Revision}$ The revision number assigned to the revision. @cindex Source keyword @item $@splitrcskeyword{Source}$ The full pathname of the RCS file. @cindex State keyword @item $@splitrcskeyword{State}$ The state assigned to the revision. States can be assigned with @code{cvs admin -s}---see @ref{admin options}. @cindex Local keyword @item Local keyword The @code{LocalKeyword} option in the @file{CVSROOT/config} file may be used to specify a local keyword which is to be used as an alias for one of the other keywords. For example, if the @file{CVSROOT/config} file contains a line with @code{LocalKeyword=MYBSD=CVSHeader}, then a file with the local keyword $@splitrcskeyword{MYBSD}$ will be expanded as if it were a $@splitrcskeyword{CVSHeader}$ keyword. If the src/frob.c file contained this keyword, it might look something like this: @example /* * $@splitrcskeyword{}MYBSD: src/frob.c,v 1.1 2003/05/04 09:27:45 john Exp $ */ @end example Many repositories make use of a such a ``local keyword'' feature. An old patch to @sc{cvs} provided the @code{LocalKeyword} feature using a @code{tag=} option and called this the ``custom tag'' or ``local tag'' feature. It was used in conjunction with the what they called the @code{tagexpand=} option. In @sc{cvs} this other option is known as the @code{KeywordExpand} option. See @ref{Configuring keyword expansion} for more details. Examples from popular projects include: $@splitrcskeyword{FreeBSD}$, $@splitrcskeyword{NetBSD}$, $@splitrcskeyword{OpenBSD}$, $@splitrcskeyword{XFree86}$, $@splitrcskeyword{Xorg}$. The advantage of this is that you can include your local version information in a file using this local keyword without disrupting the upstream version information (which may be a different local keyword or a standard keyword). Allowing bug reports and the like to more properly identify the source of the original bug to the third-party and reducing the number of conflicts that arise during an import of a new version. All keyword expansion except the local keyword may be disabled using the @code{KeywordExpansion} option in the @file{CVSROOT/config} file---see @ref{Configuring keyword expansion} for more details. @end table @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Using keywords @section Using keywords To include a keyword string you simply include the relevant text string, such as @code{$@splitrcskeyword{Id}$}, inside the file, and commit the file. @sc{cvs} will automatically expand the string as part of the commit operation. It is common to embed the @code{$@splitrcskeyword{}Id$} string in the source files so that it gets passed through to generated files. For example, if you are managing computer program source code, you might include a variable which is initialized to contain that string. Or some C compilers may provide a @code{#pragma ident} directive. Or a document management system might provide a way to pass a string through to generated files. @c Would be nice to give an example, but doing this in @c portable C is not possible and the problem with @c picking any one language (VMS HELP files, Ada, @c troff, whatever) is that people use CVS for all @c kinds of files. @cindex Ident (shell command) The @code{ident} command (which is part of the @sc{rcs} package) can be used to extract keywords and their values from a file. This can be handy for text files, but it is even more useful for extracting keywords from binary files. @example $ ident samp.c samp.c: $@splitrcskeyword{}Id: samp.c,v 1.5 1993/10/19 14:57:32 ceder Exp $ $ gcc samp.c $ ident a.out a.out: $@splitrcskeyword{}Id: samp.c,v 1.5 1993/10/19 14:57:32 ceder Exp $ @end example @cindex What (shell command) S@sc{ccs} is another popular revision control system. It has a command, @code{what}, which is very similar to @code{ident} and used for the same purpose. Many sites without @sc{rcs} have @sc{sccs}. Since @code{what} looks for the character sequence @code{@@(#)} it is easy to include keywords that are detected by either command. Simply prefix the keyword with the magic @sc{sccs} phrase, like this: @example static char *id="@@(#) $@splitrcskeyword{}Id: ab.c,v 1.5 1993/10/19 14:57:32 ceder Exp $"; @end example @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Avoiding substitution @section Avoiding substitution Keyword substitution has its disadvantages. Sometimes you might want the literal text string @samp{$@splitrcskeyword{}Author$} to appear inside a file without @sc{cvs} interpreting it as a keyword and expanding it into something like @samp{$@splitrcskeyword{}Author: ceder $}. There is unfortunately no way to selectively turn off keyword substitution. You can use @samp{-ko} (@pxref{Substitution modes}) to turn off keyword substitution entirely. In many cases you can avoid using keywords in the source, even though they appear in the final product. For example, the source for this manual contains @samp{$@@asis@{@}Author$} whenever the text @samp{$@splitrcskeyword{}Author$} should appear. In @code{nroff} and @code{troff} you can embed the null-character @code{\&} inside the keyword for a similar effect. It is also possible to specify an explicit list of keywords to include or exclude using the @code{KeywordExpand} option in the @file{CVSROOT/config} file--see @ref{Configuring keyword expansion} for more details. This feature is intended primarily for use with the @code{LocalKeyword} option--see @ref{Keyword list}. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Substitution modes @section Substitution modes @cindex Keyword substitution, changing modes @cindex -k (keyword substitution) @cindex Kflag @c FIXME: This could be made more coherent, by expanding it @c with more examples or something. Each file has a stored default substitution mode, and each working directory copy of a file also has a substitution mode. The former is set by the @samp{-k} option to @code{cvs add} and @code{cvs admin}; the latter is set by the @samp{-k} or @samp{-A} options to @code{cvs checkout} or @code{cvs update}. @code{cvs diff} also has a @samp{-k} option. For some examples, see @ref{Binary files}, and @ref{Merging and keywords}. @c The fact that -A is overloaded to mean both reset @c sticky options and reset sticky tags/dates is @c somewhat questionable. Perhaps there should be @c separate options to reset sticky options (e.g. -k @c A") and tags/dates (someone suggested -r HEAD could @c do this instead of setting a sticky tag of "HEAD" @c as in the status quo but I haven't thought much @c about that idea. Of course -r .reset or something @c could be coined if this needs to be a new option). @c On the other hand, having -A mean "get things back @c into the state after a fresh checkout" has a certain @c appeal, and maybe there is no sufficient reason for @c creeping featurism in this area. The modes available are: @table @samp @item -kkv Generate keyword strings using the default form, e.g. @code{$@splitrcskeyword{}Revision: 5.7 $} for the @code{Revision} keyword. @item -kkvl Like @samp{-kkv}, except that a locker's name is always inserted if the given revision is currently locked. The locker's name is only relevant if @code{cvs admin -l} is in use. @item -kk Generate only keyword names in keyword strings; omit their values. For example, for the @code{Revision} keyword, generate the string @code{$@splitrcskeyword{}Revision$} instead of @code{$@splitrcskeyword{}Revision: 5.7 $}. This option is useful to ignore differences due to keyword substitution when comparing different revisions of a file (@pxref{Merging and keywords}). @item -ko Generate the old keyword string, present in the working file just before it was checked in. For example, for the @code{Revision} keyword, generate the string @code{$@splitrcskeyword{}Revision: 1.1 $} instead of @code{$@splitrcskeyword{}Revision: 5.7 $} if that is how the string appeared when the file was checked in. @item -kb Like @samp{-ko}, but also inhibit conversion of line endings between the canonical form in which they are stored in the repository (linefeed only), and the form appropriate to the operating system in use on the client. For systems, like unix, which use linefeed only to terminate lines, this is very similar to @samp{-ko}. For more information on binary files, see @ref{Binary files}. In @sc{cvs} version 1.12.2 and later @samp{-kb}, as set by @code{cvs add}, @code{cvs admin}, or @code{cvs import} may not be overridden by a @samp{-k} option specified on the command line. @item -kv Generate only keyword values for keyword strings. For example, for the @code{Revision} keyword, generate the string @code{5.7} instead of @code{$@splitrcskeyword{}Revision: 5.7 $}. This can help generate files in programming languages where it is hard to strip keyword delimiters like @code{$@splitrcskeyword{}Revision: $} from a string. However, further keyword substitution cannot be performed once the keyword names are removed, so this option should be used with care. One often would like to use @samp{-kv} with @code{cvs export}---@pxref{export}. But be aware that doesn't handle an export containing binary files correctly. @end table @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Configuring keyword expansion @section Configuring Keyord Expansion @cindex Configuring keyword expansion In a repository that includes third-party software on vendor branches, it is sometimes helpful to configure CVS to use a local keyword instead of the standard $@splitrcskeyword{Id}$ or $@splitrcskeyword{Header}$ keywords. Examples from real projects includ, $@splitrcskeyword{Xorg}$, $@splitrcskeyword{XFree86}$, $@splitrcskeyword{FreeBSD}$, $@splitrcskeyword{NetBSD}$, $@splitrcskeyword{OpenBSD}$, and even $@splitrcskeyword{dotat}$. The advantage of this is that you can include your local version information in a file using this local keyword (sometimes called a ``custom tag'' or a ``local tag'') without disrupting the upstream version information (which may be a different local keyword or a standard keyword). In these cases, it is typically desirable to disable the expansion of all keywords except the configured local keyword. The @code{KeywordExpansion} option in the @file{CVSROOT/config} file is intended to allow for the either the explicit exclusion of a keyword or list of keywords, or for the explicit inclusion of a keyword or a list of keywords. This list may include the @code{LocalKeyword} that has been configured. The @code{KeywordExpansion} option is followed by @code{=} and the next character may either be @code{i} to start an inclusion list or @code{e} to start an exclusion list. If the following lines were added to the @file{CVSROOT/config} file: @example # Add a "MyBSD" keyword and restrict keyword # expansion LocalKeyword=MyBSD=CVSHeader KeywordExpand=iMyBSD @end example then only the $@splitrcskeyword{MyBSD}$ keyword would be expanded. A list may be used. The this example: @example # Add a "MyBSD" keyword and restrict keyword # expansion to the MyBSD, Name and Date keywords. LocalKeyword=MyBSD=CVSHeader KeywordExpand=iMyBSD,Name,Date @end example would allow $@splitrcskeyword{MyBSD}$, $@splitrcskeyword{Name}$, and $@splitrcskeyword{Date}$ to be expanded. It is also possible to configure an exclusion list using the following: @example # Do not expand the non-RCS keyword CVSHeader KeywordExpand=eCVSHeader @end example This allows @sc{cvs} to ignore the recently introduced $@splitrcskeyword{CVSHeader}$ keyword and retain all of the others. The exclusion entry could also contain the standard RCS keyword list, but this could be confusing to users that expect RCS keywords to be expanded, so ycare should be taken to properly set user expectations for a repository that is configured in that manner. If there is a desire to not have any RCS keywords expanded and not use the @code{-ko} flags everywhere, an administrator may disable all keyword expansion using the @file{CVSROOT/config} line: @example # Do not expand any RCS keywords KeywordExpand=i @end example this could be confusing to users that expect RCS keywords like $@splitrcskeyword{Id}$ to be expanded properly, so care should be taken to properly set user expectations for a repository so configured. It should be noted that a patch to provide both the @code{KeywordExpand} and @code{LocalKeyword} features has been around a long time. However, that patch implemented these features using @code{tag=} and @code{tagexpand=} keywords and those keywords are NOT recognized. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Log keyword @section Problems with the $@splitrcskeyword{}Log$ keyword. The @code{$@splitrcskeyword{}Log$} keyword is somewhat controversial. As long as you are working on your development system the information is easily accessible even if you do not use the @code{$@splitrcskeyword{}Log$} keyword---just do a @code{cvs log}. Once you export the file the history information might be useless anyhow. A more serious concern is that @sc{cvs} is not good at handling @code{$@splitrcskeyword{}Log$} entries when a branch is merged onto the main trunk. Conflicts often result from the merging operation. @c Might want to check whether the CVS implementation @c of RCS_merge has this problem the same way rcsmerge @c does. I would assume so.... People also tend to "fix" the log entries in the file (correcting spelling mistakes and maybe even factual errors). If that is done the information from @code{cvs log} will not be consistent with the information inside the file. This may or may not be a problem in real life. It has been suggested that the @code{$@splitrcskeyword{}Log$} keyword should be inserted @emph{last} in the file, and not in the files header, if it is to be used at all. That way the long list of change messages will not interfere with everyday source file browsing. @c --------------------------------------------------------------------- @node Tracking sources @chapter Tracking third-party sources @cindex Third-party sources @cindex Tracking sources @c FIXME: Need discussion of added and removed files. @c FIXME: This doesn't really adequately introduce the @c concepts of "vendor" and "you". They don't *have* @c to be separate organizations or separate people. @c We want a description which is somewhat more based on @c the technical issues of which sources go where, but @c also with enough examples of how this relates to @c relationships like customer-supplier, developer-QA, @c maintainer-contributor, or whatever, to make it @c seem concrete. If you modify a program to better fit your site, you probably want to include your modifications when the next release of the program arrives. @sc{cvs} can help you with this task. @cindex Vendor @cindex Vendor branch @cindex Branch, vendor- In the terminology used in @sc{cvs}, the supplier of the program is called a @dfn{vendor}. The unmodified distribution from the vendor is checked in on its own branch, the @dfn{vendor branch}. @sc{cvs} reserves branch 1.1.1 for this use. When you modify the source and commit it, your revision will end up on the main trunk. When a new release is made by the vendor, you commit it on the vendor branch and copy the modifications onto the main trunk. Use the @code{import} command to create and update the vendor branch. When you import a new file, the vendor branch is made the `head' revision, so anyone that checks out a copy of the file gets that revision. When a local modification is committed it is placed on the main trunk, and made the `head' revision. @menu * First import:: Importing for the first time * Update imports:: Updating with the import command * Reverting local changes:: Reverting to the latest vendor release * Binary files in imports:: Binary files require special handling * Keywords in imports:: Keyword substitution might be undesirable * Multiple vendor branches:: What if you get sources from several places? @end menu @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node First import @section Importing for the first time @cindex Importing modules @c Should mention naming conventions for vendor tags, @c release tags, and perhaps directory names. Use the @code{import} command to check in the sources for the first time. When you use the @code{import} command to track third-party sources, the @dfn{vendor tag} and @dfn{release tags} are useful. The @dfn{vendor tag} is a symbolic name for the branch (which is always 1.1.1, unless you use the @samp{-b @var{branch}} flag---see @ref{Multiple vendor branches}.). The @dfn{release tags} are symbolic names for a particular release, such as @samp{FSF_0_04}. @c I'm not completely sure this belongs here. But @c we need to say it _somewhere_ reasonably obvious; it @c is a common misconception among people first learning CVS Note that @code{import} does @emph{not} change the directory in which you invoke it. In particular, it does not set up that directory as a @sc{cvs} working directory; if you want to work with the sources import them first and then check them out into a different directory (@pxref{Getting the source}). @cindex wdiff (import example) Suppose you have the sources to a program called @code{wdiff} in a directory @file{wdiff-0.04}, and are going to make private modifications that you want to be able to use even when new releases are made in the future. You start by importing the source to your repository: @example $ cd wdiff-0.04 $ cvs import -m "Import of FSF v. 0.04" fsf/wdiff FSF_DIST WDIFF_0_04 @end example The vendor tag is named @samp{FSF_DIST} in the above example, and the only release tag assigned is @samp{WDIFF_0_04}. @c FIXME: Need to say where fsf/wdiff comes from. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Update imports @section Updating with the import command When a new release of the source arrives, you import it into the repository with the same @code{import} command that you used to set up the repository in the first place. The only difference is that you specify a different release tag this time: @example $ tar xfz wdiff-0.05.tar.gz $ cd wdiff-0.05 $ cvs import -m "Import of FSF v. 0.05" fsf/wdiff FSF_DIST WDIFF_0_05 @end example For files that have not been modified locally, the newly created revision becomes the head revision. If you have made local changes, @code{import} will warn you that you must merge the changes into the main trunk, and tell you to use @samp{checkout -j} to do so: @c FIXME: why "wdiff" here and "fsf/wdiff" in the @c "import"? I think the assumption is that one has @c "wdiff fsf/wdiff" or some such in modules, but it @c would be better to not use modules in this example. @example $ cvs checkout -jFSF_DIST:yesterday -jFSF_DIST wdiff @end example @noindent The above command will check out the latest revision of @samp{wdiff}, merging the changes made on the vendor branch @samp{FSF_DIST} since yesterday into the working copy. If any conflicts arise during the merge they should be resolved in the normal way (@pxref{Conflicts example}). Then, the modified files may be committed. However, it is much better to use the two release tags rather than using a date on the branch as suggested above: @example $ cvs checkout -jWDIFF_0_04 -jWDIFF_0_05 wdiff @end example @noindent The reason this is better is that using a date, as suggested above, assumes that you do not import more than one release of a product per day. More importantly, using the release tags allows @sc{cvs} to detect files that were removed between the two vendor releases and mark them for removal. Since @code{import} has no way to detect removed files, you should do a merge like this even if @code{import} doesn't tell you to. @node Reverting local changes @section Reverting to the latest vendor release You can also revert local changes completely and return to the latest vendor release by changing the `head' revision back to the vendor branch on all files. For example, if you have a checked-out copy of the sources in @file{~/work.d/wdiff}, and you want to revert to the vendor's version for all the files in that directory, you would type: @example $ cd ~/work.d/wdiff $ cvs admin -bWDIFF . @end example @noindent You must specify the @samp{-bWDIFF} without any space after the @samp{-b}. @xref{admin options}. @node Binary files in imports @section How to handle binary files with cvs import Use the @samp{-k} wrapper option to tell import which files are binary. @xref{Wrappers}. @node Keywords in imports @section How to handle keyword substitution with cvs import The sources which you are importing may contain keywords (@pxref{Keyword substitution}). For example, the vendor may use @sc{cvs} or some other system which uses similar keyword expansion syntax. If you just import the files in the default fashion, then the keyword expansions supplied by the vendor will be replaced by keyword expansions supplied by your own copy of @sc{cvs}. It may be more convenient to maintain the expansions supplied by the vendor, so that this information can supply information about the sources that you imported from the vendor. To maintain the keyword expansions supplied by the vendor, supply the @samp{-ko} option to @code{cvs import} the first time you import the file. This will turn off keyword expansion for that file entirely, so if you want to be more selective you'll have to think about what you want and use the @samp{-k} option to @code{cvs update} or @code{cvs admin} as appropriate. @c Supplying -ko to import if the file already existed @c has no effect. Not clear to me whether it should @c or not. @node Multiple vendor branches @section Multiple vendor branches All the examples so far assume that there is only one vendor from which you are getting sources. In some situations you might get sources from a variety of places. For example, suppose that you are dealing with a project where many different people and teams are modifying the software. There are a variety of ways to handle this, but in some cases you have a bunch of source trees lying around and what you want to do more than anything else is just to all put them in @sc{cvs} so that you at least have them in one place. For handling situations in which there may be more than one vendor, you may specify the @samp{-b} option to @code{cvs import}. It takes as an argument the vendor branch to import to. The default is @samp{-b 1.1.1}. For example, suppose that there are two teams, the red team and the blue team, that are sending you sources. You want to import the red team's efforts to branch 1.1.1 and use the vendor tag RED. You want to import the blue team's efforts to branch 1.1.3 and use the vendor tag BLUE. So the commands you might use are: @example $ cvs import dir RED RED_1-0 $ cvs import -b 1.1.3 dir BLUE BLUE_1-5 @end example Note that if your vendor tag does not match your @samp{-b} option, @sc{cvs} will not detect this case! For example, @example $ cvs import -b 1.1.3 dir RED RED_1-0 @end example @noindent Be careful; this kind of mismatch is sure to sow confusion or worse. I can't think of a useful purpose for the ability to specify a mismatch here, but if you discover such a use, don't. @sc{cvs} is likely to make this an error in some future release. @c Probably should say more about the semantics of @c multiple branches. What about the default branch? @c What about joining (perhaps not as useful with @c multiple branches, or perhaps it is. Either way @c should be mentioned). @c I'm not sure about the best location for this. In @c one sense, it might belong right after we've introduced @c CVS's basic version control model, because people need @c to figure out builds right away. The current location @c is based on the theory that it kind of akin to the @c "Revision management" section. @node Builds @chapter How your build system interacts with CVS @cindex Builds @cindex make As mentioned in the introduction, @sc{cvs} does not contain software for building your software from source code. This section describes how various aspects of your build system might interact with @sc{cvs}. @c Is there a way to discuss this without reference to @c tools other than CVS? I'm not sure there is; I @c wouldn't think that people who learn CVS first would @c even have this concern. One common question, especially from people who are accustomed to @sc{rcs}, is how to make their build get an up to date copy of the sources. The answer to this with @sc{cvs} is two-fold. First of all, since @sc{cvs} itself can recurse through directories, there is no need to modify your @file{Makefile} (or whatever configuration file your build tool uses) to make sure each file is up to date. Instead, just use two commands, first @code{cvs -q update} and then @code{make} or whatever the command is to invoke your build tool. Secondly, you do not necessarily @emph{want} to get a copy of a change someone else made until you have finished your own work. One suggested approach is to first update your sources, then implement, build and test the change you were thinking of, and then commit your sources (updating first if necessary). By periodically (in between changes, using the approach just described) updating your entire tree, you ensure that your sources are sufficiently up to date. @cindex Bill of materials One common need is to record which versions of which source files went into a particular build. This kind of functionality is sometimes called @dfn{bill of materials} or something similar. The best way to do this with @sc{cvs} is to use the @code{tag} command to record which versions went into a given build (@pxref{Tags}). Using @sc{cvs} in the most straightforward manner possible, each developer will have a copy of the entire source tree which is used in a particular build. If the source tree is small, or if developers are geographically dispersed, this is the preferred solution. In fact one approach for larger projects is to break a project down into smaller @c I say subsystem instead of module because they may or @c may not use the modules file. separately-compiled subsystems, and arrange a way of releasing them internally so that each developer need check out only those subsystems which they are actively working on. Another approach is to set up a structure which allows developers to have their own copies of some files, and for other files to access source files from a central location. Many people have come up with some such a @c two such people are paul@sander.cupertino.ca.us (for @c a previous employer) @c and gtornblo@senet.abb.se (spicm and related tools), @c but as far as I know @c no one has nicely packaged or released such a system (or @c instructions for constructing one). system using features such as the symbolic link feature found in many operating systems, or the @code{VPATH} feature found in many versions of @code{make}. One build tool which is designed to help with this kind of thing is Odin (see @code{ftp://ftp.cs.colorado.edu/pub/distribs/odin}). @c Should we be saying more about Odin? Or how you use @c it with CVS? Also, the Prime Time Freeware for Unix @c disk (see http://www.ptf.com/) has Odin (with a nice @c paragraph summarizing it on the web), so that might be a @c semi-"official" place to point people. @c @c Of course, many non-CVS systems have this kind of @c functionality, for example OSF's ODE @c (http://www.osf.org/ode/) or mk @c (http://www.grin.net/~pzi/mk-3.18.4.docs/mk_toc.html @c He has changed providers in the past; a search engine search @c for "Peter Ziobrzynski" probably won't get too many @c spurious hits :-). A more stable URL might be @c ftp://ftp.uu.net/pub/cmvc/mk). But I'm not sure @c there is any point in mentioning them here unless they @c can work with CVS. @c --------------------------------------------------------------------- @node Special Files @chapter Special Files @cindex Special files @cindex Device nodes @cindex Ownership, saving in CVS @cindex Permissions, saving in CVS @cindex Hard links @cindex Symbolic links In normal circumstances, @sc{cvs} works only with regular files. Every file in a project is assumed to be persistent; it must be possible to open, read and close them; and so on. @sc{cvs} also ignores file permissions and ownerships, leaving such issues to be resolved by the developer at installation time. In other words, it is not possible to "check in" a device into a repository; if the device file cannot be opened, @sc{cvs} will refuse to handle it. Files also lose their ownerships and permissions during repository transactions. @ignore If the configuration variable @code{PreservePermissions} (@pxref{config}) is set in the repository, @sc{cvs} will save the following file characteristics in the repository: @itemize @bullet @item user and group ownership @item permissions @item major and minor device numbers @item symbolic links @item hard link structure @end itemize Using the @code{PreservePermissions} option affects the behavior of @sc{cvs} in several ways. First, some of the new operations supported by @sc{cvs} are not accessible to all users. In particular, file ownership and special file characteristics may only be changed by the superuser. When the @code{PreservePermissions} configuration variable is set, therefore, users will have to be `root' in order to perform @sc{cvs} operations. When @code{PreservePermissions} is in use, some @sc{cvs} operations (such as @samp{cvs status}) will not recognize a file's hard link structure, and so will emit spurious warnings about mismatching hard links. The reason is that @sc{cvs}'s internal structure does not make it easy for these operations to collect all the necessary data about hard links, so they check for file conflicts with inaccurate data. A more subtle difference is that @sc{cvs} considers a file to have changed only if its contents have changed (specifically, if the modification time of the working file does not match that of the repository's file). Therefore, if only the permissions, ownership or hard linkage have changed, or if a device's major or minor numbers have changed, @sc{cvs} will not notice. In order to commit such a change to the repository, you must force the commit with @samp{cvs commit -f}. This also means that if a file's permissions have changed and the repository file is newer than the working copy, performing @samp{cvs update} will silently change the permissions on the working copy. Changing hard links in a @sc{cvs} repository is particularly delicate. Suppose that file @file{foo} is linked to file @file{old}, but is later relinked to file @file{new}. You can wind up in the unusual situation where, although @file{foo}, @file{old} and @file{new} have all had their underlying link patterns changed, only @file{foo} and @file{new} have been modified, so @file{old} is not considered a candidate for checking in. It can be very easy to produce inconsistent results this way. Therefore, we recommend that when it is important to save hard links in a repository, the prudent course of action is to @code{touch} any file whose linkage or status has changed since the last checkin. Indeed, it may be wise to @code{touch *} before each commit in a directory with complex hard link structures. It is worth noting that only regular files may be merged, for reasons that hopefully are obvious. If @samp{cvs update} or @samp{cvs checkout -j} attempts to merge a symbolic link with a regular file, or two device files for different kinds of devices, @sc{cvs} will report a conflict and refuse to perform the merge. At the same time, @samp{cvs diff} will not report any differences between these files, since no meaningful textual comparisons can be made on files which contain no text. The @code{PreservePermissions} features do not work with client/server @sc{cvs}. Another limitation is that hard links must be to other files within the same directory; hard links across directories are not supported. @end ignore @c --------------------------------------------------------------------- @node CVS commands @appendix Guide to CVS commands This appendix describes the overall structure of @sc{cvs} commands, and describes some commands in detail (others are described elsewhere; for a quick reference to @sc{cvs} commands, @pxref{Invoking CVS}). @c The idea is that we want to move the commands which @c are described here into the main body of the manual, @c in the process reorganizing the manual to be @c organized around what the user wants to do, not @c organized around CVS commands. @c @c Note that many users do expect a manual which is @c organized by command. At least some users do. @c One good addition to the "organized by command" @c section (if any) would be "see also" links. @c The awk manual might be a good example; it has a @c reference manual which is more verbose than Invoking @c CVS but probably somewhat less verbose than CVS @c Commands. @menu * Structure:: Overall structure of CVS commands * Exit status:: Indicating CVS's success or failure * ~/.cvsrc:: Default options with the ~/.csvrc file * Global options:: Options you give to the left of cvs_command * Common options:: Options you give to the right of cvs_command * admin:: Administration * checkout:: Checkout sources for editing * commit:: Check files into the repository * diff:: Show differences between revisions * export:: Export sources from CVS, similar to checkout * history:: Show status of files and users * import:: Import sources into CVS, using vendor branches * log:: Show log messages for files * rdiff:: 'patch' format diffs between releases * release:: Indicate that a directory is no longer in use * update:: Bring work tree in sync with repository @end menu @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Structure @appendixsec Overall structure of CVS commands @cindex Structure @cindex CVS command structure @cindex Command structure @cindex Format of CVS commands The overall format of all @sc{cvs} commands is: @example cvs [ cvs_options ] cvs_command [ command_options ] [ command_args ] @end example @table @code @item cvs The name of the @sc{cvs} program. @item cvs_options Some options that affect all sub-commands of @sc{cvs}. These are described below. @item cvs_command One of several different sub-commands. Some of the commands have aliases that can be used instead; those aliases are noted in the reference manual for that command. There are only two situations where you may omit @samp{cvs_command}: @samp{cvs -H} elicits a list of available commands, and @samp{cvs -v} displays version information on @sc{cvs} itself. @item command_options Options that are specific for the command. @item command_args Arguments to the commands. @end table There is unfortunately some confusion between @code{cvs_options} and @code{command_options}. @samp{-l}, when given as a @code{cvs_option}, only affects some of the commands. When it is given as a @code{command_option} is has a different meaning, and is accepted by more commands. In other words, do not take the above categorization too seriously. Look at the documentation instead. @node Exit status @appendixsec CVS's exit status @cindex Exit status, of CVS @sc{cvs} can indicate to the calling environment whether it succeeded or failed by setting its @dfn{exit status}. The exact way of testing the exit status will vary from one operating system to another. For example in a unix shell script the @samp{$?} variable will be 0 if the last command returned a successful exit status, or greater than 0 if the exit status indicated failure. If @sc{cvs} is successful, it returns a successful status; if there is an error, it prints an error message and returns a failure status. The one exception to this is the @code{cvs diff} command. It will return a successful status if it found no differences, or a failure status if there were differences or if there was an error. Because this behavior provides no good way to detect errors, in the future it is possible that @code{cvs diff} will be changed to behave like the other @sc{cvs} commands. @c It might seem like checking whether cvs -q diff @c produces empty or non-empty output can tell whether @c there were differences or not. But it seems like @c there are cases with output but no differences @c (testsuite basica-8b). It is not clear to me how @c useful it is for a script to be able to check @c whether there were differences. @c FIXCVS? In previous versions of CVS, cvs diff @c returned 0 for no differences, 1 for differences, or @c 2 for errors. Is this behavior worth trying to @c bring back (but what does it mean for VMS?)? @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node ~/.cvsrc @appendixsec Default options and the ~/.cvsrc file @cindex .cvsrc file @cindex Option defaults There are some @code{command_options} that are used so often that you might have set up an alias or some other means to make sure you always specify that option. One example (the one that drove the implementation of the @file{.cvsrc} support, actually) is that many people find the default output of the @samp{diff} command to be very hard to read, and that either context diffs or unidiffs are much easier to understand. The @file{~/.cvsrc} file is a way that you can add default options to @code{cvs_commands} within cvs, instead of relying on aliases or other shell scripts. The format of the @file{~/.cvsrc} file is simple. The file is searched for a line that begins with the same name as the @code{cvs_command} being executed. If a match is found, then the remainder of the line is split up (at whitespace characters) into separate options and added to the command arguments @emph{before} any options from the command line. If a command has two names (e.g., @code{checkout} and @code{co}), the official name, not necessarily the one used on the command line, will be used to match against the file. So if this is the contents of the user's @file{~/.cvsrc} file: @example log -N diff -uN rdiff -u update -Pd checkout -P release -d @end example @noindent the command @samp{cvs checkout foo} would have the @samp{-P} option added to the arguments, as well as @samp{cvs co foo}. With the example file above, the output from @samp{cvs diff foobar} will be in unidiff format. @samp{cvs diff -c foobar} will provide context diffs, as usual. Getting "old" format diffs would be slightly more complicated, because @code{diff} doesn't have an option to specify use of the "old" format, so you would need @samp{cvs -f diff foobar}. In place of the command name you can use @code{cvs} to specify global options (@pxref{Global options}). For example the following line in @file{.cvsrc} @example cvs -z6 @end example @noindent causes @sc{cvs} to use compression level 6. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Global options @appendixsec Global options @cindex Options, global @cindex Global options @cindex Left-hand options The available @samp{cvs_options} (that are given to the left of @samp{cvs_command}) are: @table @code @item --allow-root=@var{rootdir} Specify legal @sc{cvsroot} directory. See @ref{Password authentication server}. @cindex Authentication, stream @cindex Stream authentication @item -a Authenticate all communication between the client and the server. Only has an effect on the @sc{cvs} client. As of this writing, this is only implemented when using a GSSAPI connection (@pxref{GSSAPI authenticated}). Authentication prevents certain sorts of attacks involving hijacking the active @sc{tcp} connection. Enabling authentication does not enable encryption. @cindex RCSBIN, overriding @cindex Overriding RCSBIN @item -b @var{bindir} In @sc{cvs} 1.9.18 and older, this specified that @sc{rcs} programs are in the @var{bindir} directory. Current versions of @sc{cvs} do not run @sc{rcs} programs; for compatibility this option is accepted, but it does nothing. @cindex TMPDIR, overriding @cindex Overriding TMPDIR @item -T @var{tempdir} Use @var{tempdir} as the directory where temporary files are located. Overrides the setting of the @code{$TMPDIR} environment variable and any precompiled directory. This parameter should be specified as an absolute pathname. (When running client/server, @samp{-T} affects only the local process; specifying @samp{-T} for the client has no effect on the server and vice versa.) @cindex CVSROOT, overriding @cindex Overriding CVSROOT @item -d @var{cvs_root_directory} Use @var{cvs_root_directory} as the root directory pathname of the repository. Overrides the setting of the @code{$CVSROOT} environment variable. @xref{Repository}. @cindex EDITOR, overriding @cindex Overriding EDITOR @item -e @var{editor} Use @var{editor} to enter revision log information. Overrides the setting of the @code{$CVSEDITOR} and @code{$EDITOR} environment variables. For more information, see @ref{Committing your changes}. @item -f Do not read the @file{~/.cvsrc} file. This option is most often used because of the non-orthogonality of the @sc{cvs} option set. For example, the @samp{cvs log} option @samp{-N} (turn off display of tag names) does not have a corresponding option to turn the display on. So if you have @samp{-N} in the @file{~/.cvsrc} entry for @samp{log}, you may need to use @samp{-f} to show the tag names. @item -H @itemx --help Display usage information about the specified @samp{cvs_command} (but do not actually execute the command). If you don't specify a command name, @samp{cvs -H} displays overall help for @sc{cvs}, including a list of other help options. @c It seems to me it is better to document it this way @c rather than trying to update this documentation @c every time that we add a --help-foo option. But @c perhaps that is confusing... @item -l Do not log the @samp{cvs_command} in the command history (but execute it anyway). @xref{history}, for information on command history. @cindex Read-only repository mode @item -R Turns on read-only repository mode. This allows one to check out from a read-only repository, such as within an anoncvs server, or from a CDROM repository. Same effect as if the @code{CVSREADONLYFS} environment variable is set. Using @samp{-R} can also considerably speed up checkout's over NFS. @cindex Read-only mode @item -n Do not change any files. Attempt to execute the @samp{cvs_command}, but only to issue reports; do not remove, update, or merge any existing files, or create any new files. Note that @sc{cvs} will not necessarily produce exactly the same output as without @samp{-n}. In some cases the output will be the same, but in other cases @sc{cvs} will skip some of the processing that would have been required to produce the exact same output. @item -Q Cause the command to be really quiet; the command will only generate output for serious problems. @item -q Cause the command to be somewhat quiet; informational messages, such as reports of recursion through subdirectories, are suppressed. @cindex Read-only files, and -r @item -r Make new working files read-only. Same effect as if the @code{$CVSREAD} environment variable is set (@pxref{Environment variables}). The default is to make working files writable, unless watches are on (@pxref{Watches}). @item -s @var{variable}=@var{value} Set a user variable (@pxref{Variables}). @cindex Trace @item -t Trace program execution; display messages showing the steps of @sc{cvs} activity. Particularly useful with @samp{-n} to explore the potential impact of an unfamiliar command. @item -v @item --version Display version and copyright information for @sc{cvs}. @cindex CVSREAD, overriding @cindex Overriding CVSREAD @item -w Make new working files read-write. Overrides the setting of the @code{$CVSREAD} environment variable. Files are created read-write by default, unless @code{$CVSREAD} is set or @samp{-r} is given. @c Note that -w only overrides -r and CVSREAD; it has @c no effect on files which are readonly because of @c "cvs watch on". My guess is that is the way it @c should be (or should "cvs -w get" on a watched file @c be the same as a get and a cvs edit?), but I'm not @c completely sure whether to document it this way. @item -x @cindex Encryption Encrypt all communication between the client and the server. Only has an effect on the @sc{cvs} client. As of this writing, this is only implemented when using a GSSAPI connection (@pxref{GSSAPI authenticated}) or a Kerberos connection (@pxref{Kerberos authenticated}). Enabling encryption implies that message traffic is also authenticated. Encryption support is not available by default; it must be enabled using a special configure option, @file{--enable-encryption}, when you build @sc{cvs}. @item -z @var{gzip-level} @cindex Compression @cindex Gzip Set the compression level. Valid levels are 1 (high speed, low compression) to 9 (low speed, high compression), or 0 to disable compression (the default). Only has an effect on the @sc{cvs} client. @end table @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Common options @appendixsec Common command options @cindex Common options @cindex Right-hand options This section describes the @samp{command_options} that are available across several @sc{cvs} commands. These options are always given to the right of @samp{cvs_command}. Not all commands support all of these options; each option is only supported for commands where it makes sense. However, when a command has one of these options you can almost always count on the same behavior of the option as in other commands. (Other command options, which are listed with the individual commands, may have different behavior from one @sc{cvs} command to the other). @strong{Note: the @samp{history} command is an exception; it supports many options that conflict even with these standard options.} @table @code @cindex Dates @cindex Time @cindex Specifying dates @item -D @var{date_spec} Use the most recent revision no later than @var{date_spec}. @var{date_spec} is a single argument, a date description specifying a date in the past. The specification is @dfn{sticky} when you use it to make a private copy of a source file; that is, when you get a working file using @samp{-D}, @sc{cvs} records the date you specified, so that further updates in the same directory will use the same date (for more information on sticky tags/dates, @pxref{Sticky tags}). @samp{-D} is available with the @code{annotate}, @code{checkout}, @code{diff}, @code{export}, @code{history}, @code{rdiff}, @code{rtag}, @code{tag}, and @code{update} commands. (The @code{history} command uses this option in a slightly different way; @pxref{history options}). @c What other formats should we accept? I don't want @c to start accepting a whole mess of non-standard @c new formats (there are a lot which are in wide use in @c one context or another), but practicality does @c dictate some level of flexibility. @c * POSIX.2 (e.g. touch, ls output, date) and other @c POSIX and/or de facto unix standards (e.g. at). The @c practice here is too inconsistent to be of any use. @c * VMS dates. This is not a formal standard, but @c there is a published specification (see SYS$ASCTIM @c and SYS$BINTIM in the _VMS System Services Reference @c Manual_), it is implemented consistently in VMS @c utilities, and VMS users will expect CVS running on @c VMS to support this format (and if we're going to do @c that, better to make CVS support it on all @c platforms. Maybe). @c @c NOTE: The tar manual has some documentation for @c getdate.y (just for our info; we don't want to @c attempt to document all the formats accepted by @c getdate.y). @c @c One more note: In output, CVS should consistently @c use one date format, and that format should be one that @c it accepts in input as well. The former isn't @c really true (see survey below), and I'm not @c sure that either of those formats is accepted in @c input. @c @c cvs log @c current 1996/01/02 13:45:31 @c Internet 02 Jan 1996 13:45:31 UT @c ISO 1996-01-02 13:45:31 @c cvs ann @c current 02-Jan-96 @c Internet-like 02 Jan 96 @c ISO 96-01-02 @c cvs status @c current Tue Jun 11 02:54:53 1996 @c Internet [Tue,] 11 Jun 1996 02:54:53 @c ISO 1996-06-11 02:54:53 @c note: date possibly should be omitted entirely for @c other reasons. @c cvs editors @c current Tue Jun 11 02:54:53 1996 GMT @c cvs history @c current 06/11 02:54 +0000 @c any others? @c There is a good chance the proper solution has to @c involve at least some level of letting the user @c decide which format (with the default being the @c formats CVS has always used; changing these might be @c _very_ disruptive since scripts may very well be @c parsing them). @c @c Another random bit of prior art concerning dates is @c the strptime function which takes templates such as @c "%m/%d/%y", and apparent a variant of getdate() @c which also honors them. See @c X/Open CAE Specification, System Interfaces and @c Headers Issue 4, Version 2 (September 1994), in the @c entry for getdate() on page 231 @cindex Timezone, in input @cindex Zone, time, in input A wide variety of date formats are supported by @sc{cvs}. The most standard ones are ISO8601 (from the International Standards Organization) and the Internet e-mail standard (specified in RFC822 as amended by RFC1123). @c Probably should be doing more to spell out just what @c the rules are, rather than just giving examples. @c But I want to keep this simple too. @c So I don't know.... @c A few specific issues: (1) Maybe should reassure @c people that years after 2000 @c work (they are in the testsuite, so they do indeed @c work). (2) What do two digit years @c mean? Where do we accept them? (3) Local times can @c be ambiguous or nonexistent if they fall during the @c hour when daylight savings time goes into or out of @c effect. Pretty obscure, so I'm not at all sure we @c should be documenting the behavior in that case. ISO8601 dates have many variants but a few examples are: @example 1972-09-24 1972-09-24 20:05 @end example @c I doubt we really accept all ISO8601 format dates @c (for example, decimal hours like 1972-09-24 20,2) @c I'm not sure we should, many of them are pretty @c bizarre and it has lots of gratuitous multiple ways @c to specify the same thing. There are a lot more ISO8601 date formats, and @sc{cvs} accepts many of them, but you probably don't want to hear the @emph{whole} long story :-). @c Citing a URL here is kind of problematic given how @c much they change and people who have old versions of @c this manual, but in case we want to reinstate an @c ISO8601 URL, a few are: @c http://www.saqqara.demon.co.uk/datefmt.htm @c http://www.cl.cam.ac.uk/~mgk25/iso-time.html @c Citing some other ISO8601 source is probably even @c worse :-). In addition to the dates allowed in Internet e-mail itself, @sc{cvs} also allows some of the fields to be omitted. For example: @c FIXME: Need to figure out better, and document, @c what we want to allow the user to omit. @c NOTE: "omit" does not imply "reorder". @c FIXME: Need to cite a web page describing how to get @c RFC's. @example 24 Sep 1972 20:05 24 Sep @end example The date is interpreted as being in the local timezone, unless a specific timezone is specified. These two date formats are preferred. However, @sc{cvs} currently accepts a wide variety of other date formats. They are intentionally not documented here in any detail, and future versions of @sc{cvs} might not accept all of them. @c We should document and testsuite "now" and @c "yesterday". "now" is mentioned in the FAQ and @c "yesterday" is mentioned in this document (and the @c message from "cvs import" suggesting a merge @c command). What else? Probably some/all of the "3 @c weeks ago" family. @c @c Maybe at @c some point have CVS start give warnings on "unofficial" @c formats (many of which might be typos or user @c misunderstandings, and/or formats people never/rarely @c use to specify dates)? One such format is @code{@var{month}/@var{day}/@var{year}}. This may confuse people who are accustomed to having the month and day in the other order; @samp{1/4/96} is January 4, not April 1. Remember to quote the argument to the @samp{-D} flag so that your shell doesn't interpret spaces as argument separators. A command using the @samp{-D} flag can look like this: @example $ cvs diff -D "1 hour ago" cvs.texinfo @end example @cindex Forcing a tag match @item -f When you specify a particular date or tag to @sc{cvs} commands, they normally ignore files that do not contain the tag (or did not exist prior to the date) that you specified. Use the @samp{-f} option if you want files retrieved even when there is no match for the tag or date. (The most recent revision of the file will be used). Note that even with @samp{-f}, a tag that you specify must exist (that is, in some file, not necessary in every file). This is so that @sc{cvs} will continue to give an error if you mistype a tag name. @need 800 @samp{-f} is available with these commands: @code{annotate}, @code{checkout}, @code{export}, @code{rdiff}, @code{rtag}, and @code{update}. @strong{WARNING: The @code{commit} and @code{remove} commands also have a @samp{-f} option, but it has a different behavior for those commands. See @ref{commit options}, and @ref{Removing files}.} @item -k @var{kflag} Override the default processing of RCS keywords other than @samp{-kb}. @xref{Keyword substitution}, for the meaning of @var{kflag}. Used with the @code{checkout} and @code{update} commands, your @var{kflag} specification is @dfn{sticky}; that is, when you use this option with a @code{checkout} or @code{update} command, @sc{cvs} associates your selected @var{kflag} with any files it operates on, and continues to use that @var{kflag} with future commands on the same files until you specify otherwise. The @samp{-k} option is available with the @code{add}, @code{checkout}, @code{diff}, @code{export}, @code{import} and @code{update} commands. @strong{WARNING: Prior to CVS version 1.12.2, the @samp{-k} flag overrode the @samp{-kb} indication for a binary file. This could sometimes corrupt binary files. @xref{Merging and keywords}, for more.} @item -l Local; run only in current working directory, rather than recursing through subdirectories. Available with the following commands: @code{annotate}, @code{checkout}, @code{commit}, @code{diff}, @code{edit}, @code{editors}, @code{export}, @code{log}, @code{rdiff}, @code{remove}, @code{rtag}, @code{status}, @code{tag}, @code{unedit}, @code{update}, @code{watch}, and @code{watchers}. @cindex Editor, avoiding invocation of @cindex Avoiding editor invocation @item -m @var{message} Use @var{message} as log information, instead of invoking an editor. Available with the following commands: @code{add}, @code{commit} and @code{import}. @item -n Do not run any tag program. (A program can be specified to run in the modules database (@pxref{modules}); this option bypasses it). @strong{Note: this is not the same as the @samp{cvs -n} program option, which you can specify to the left of a cvs command!} Available with the @code{checkout}, @code{commit}, @code{export}, and @code{rtag} commands. @item -P Prune empty directories. See @ref{Removing directories}. @item -p Pipe the files retrieved from the repository to standard output, rather than writing them in the current directory. Available with the @code{checkout} and @code{update} commands. @item -R Process directories recursively. This is on by default. Available with the following commands: @code{annotate}, @code{checkout}, @code{commit}, @code{diff}, @code{edit}, @code{editors}, @code{export}, @code{rdiff}, @code{remove}, @code{rtag}, @code{status}, @code{tag}, @code{unedit}, @code{update}, @code{watch}, and @code{watchers}. @item -r @var{tag} @cindex HEAD, special tag @cindex BASE, special tag Use the revision specified by the @var{tag} argument instead of the default @dfn{head} revision. As well as arbitrary tags defined with the @code{tag} or @code{rtag} command, two special tags are always available: @samp{HEAD} refers to the most recent version available in the repository, and @samp{BASE} refers to the revision you last checked out into the current working directory. @c FIXME: What does HEAD really mean? I believe that @c the current answer is the head of the default branch @c for all cvs commands except diff. For diff, it @c seems to be (a) the head of the trunk (or the default @c branch?) if there is no sticky tag, (b) the head of the @c branch for the sticky tag, if there is a sticky tag. @c (b) is ugly as it differs @c from what HEAD means for other commands, but people @c and/or scripts are quite possibly used to it. @c See "head" tests in sanity.sh. @c Probably the best fix is to introduce two new @c special tags, ".thead" for the head of the trunk, @c and ".bhead" for the head of the current branch. @c Then deprecate HEAD. This has the advantage of @c not surprising people with a change to HEAD, and a @c side benefit of also phasing out the poorly-named @c HEAD (see discussion of reserved tag names in node @c "Tags"). Of course, .thead and .bhead should be @c carefully implemented (with the implementation the @c same for "diff" as for everyone else), test cases @c written (similar to the ones in "head"), new tests @c cases written for things like default branches, &c. The tag specification is sticky when you use this @c option with @code{checkout} or @code{update} to make your own copy of a file: @sc{cvs} remembers the tag and continues to use it on future update commands, until you specify otherwise (for more information on sticky tags/dates, @pxref{Sticky tags}). The tag can be either a symbolic or numeric tag, as described in @ref{Tags}, or the name of a branch, as described in @ref{Branching and merging}. Specifying the @samp{-q} global option along with the @samp{-r} command option is often useful, to suppress the warning messages when the @sc{rcs} file does not contain the specified tag. @strong{Note: this is not the same as the overall @samp{cvs -r} option, which you can specify to the left of a @sc{cvs} command!} @samp{-r} is available with the @code{checkout}, @code{commit}, @code{diff}, @code{history}, @code{export}, @code{rdiff}, @code{rtag}, and @code{update} commands. @item -W Specify file names that should be filtered. You can use this option repeatedly. The spec can be a file name pattern of the same type that you can specify in the @file{.cvswrappers} file. Available with the following commands: @code{import}, and @code{update}. @end table @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node admin @appendixsec admin---Administration @cindex Admin (subcommand) @itemize @bullet @item Requires: repository, working directory. @item Changes: repository. @item Synonym: rcs @end itemize This is the @sc{cvs} interface to assorted administrative facilities. Some of them have questionable usefulness for @sc{cvs} but exist for historical purposes. Some of the questionable options are likely to disappear in the future. This command @emph{does} work recursively, so extreme care should be used. @cindex cvsadmin @cindex UserAdminOptions, in CVSROOT/config On unix, if there is a group named @code{cvsadmin}, only members of that group can run @code{cvs admin} commands, except for those specified using the @code{UserAdminOptions} configuration option in the @file{CVSROOT/config} file. Options specified using @code{UserAdminOptions} can be run by any user. See @ref{config} for more on @code{UserAdminOptions}. The @code{cvsadmin} group should exist on the server, or any system running the non-client/server @sc{cvs}. To disallow @code{cvs admin} for all users, create a group with no users in it. On NT, the @code{cvsadmin} feature does not exist and all users can run @code{cvs admin}. @menu * admin options:: admin options @end menu @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node admin options @appendixsubsec admin options Some of these options have questionable usefulness for @sc{cvs} but exist for historical purposes. Some even make it impossible to use @sc{cvs} until you undo the effect! @table @code @item -A@var{oldfile} Might not work together with @sc{cvs}. Append the access list of @var{oldfile} to the access list of the @sc{rcs} file. @item -a@var{logins} Might not work together with @sc{cvs}. Append the login names appearing in the comma-separated list @var{logins} to the access list of the @sc{rcs} file. @item -b[@var{rev}] Set the default branch to @var{rev}. In @sc{cvs}, you normally do not manipulate default branches; sticky tags (@pxref{Sticky tags}) are a better way to decide which branch you want to work on. There is one reason to run @code{cvs admin -b}: to revert to the vendor's version when using vendor branches (@pxref{Reverting local changes}). There can be no space between @samp{-b} and its argument. @c Hmm, we don't document the usage where rev is @c omitted. Maybe that usage can/should be deprecated @c (and replaced with -bHEAD or something?) (so we can toss @c the optional argument). Note that -bHEAD does not @c work, as of 17 Sep 1997, but probably will once "cvs @c admin" is internal to CVS. @cindex Comment leader @item -c@var{string} Sets the comment leader to @var{string}. The comment leader is not used by current versions of @sc{cvs} or @sc{rcs} 5.7. Therefore, you can almost surely not worry about it. @xref{Keyword substitution}. @item -e[@var{logins}] Might not work together with @sc{cvs}. Erase the login names appearing in the comma-separated list @var{logins} from the access list of the RCS file. If @var{logins} is omitted, erase the entire access list. There can be no space between @samp{-e} and its argument. @item -I Run interactively, even if the standard input is not a terminal. This option does not work with the client/server @sc{cvs} and is likely to disappear in a future release of @sc{cvs}. @item -i Useless with @sc{cvs}. This creates and initializes a new @sc{rcs} file, without depositing a revision. With @sc{cvs}, add files with the @code{cvs add} command (@pxref{Adding files}). @item -k@var{subst} Set the default keyword substitution to @var{subst}. @xref{Keyword substitution}. Giving an explicit @samp{-k} option to @code{cvs update}, @code{cvs export}, or @code{cvs checkout} overrides this default. @item -l[@var{rev}] Lock the revision with number @var{rev}. If a branch is given, lock the latest revision on that branch. If @var{rev} is omitted, lock the latest revision on the default branch. There can be no space between @samp{-l} and its argument. This can be used in conjunction with the @file{rcslock.pl} script in the @file{contrib} directory of the @sc{cvs} source distribution to provide reserved checkouts (where only one user can be editing a given file at a time). See the comments in that file for details (and see the @file{README} file in that directory for disclaimers about the unsupported nature of contrib). According to comments in that file, locking must set to strict (which is the default). @item -L Set locking to strict. Strict locking means that the owner of an RCS file is not exempt from locking for checkin. For use with @sc{cvs}, strict locking must be set; see the discussion under the @samp{-l} option above. @cindex Changing a log message @cindex Replacing a log message @cindex Correcting a log message @cindex Fixing a log message @cindex Log message, correcting @item -m@var{rev}:@var{msg} Replace the log message of revision @var{rev} with @var{msg}. @c The rcs -M option, to suppress sending mail, has never been @c documented as a cvs admin option. @item -N@var{name}[:[@var{rev}]] Act like @samp{-n}, except override any previous assignment of @var{name}. For use with magic branches, see @ref{Magic branch numbers}. @item -n@var{name}[:[@var{rev}]] Associate the symbolic name @var{name} with the branch or revision @var{rev}. It is normally better to use @samp{cvs tag} or @samp{cvs rtag} instead. Delete the symbolic name if both @samp{:} and @var{rev} are omitted; otherwise, print an error message if @var{name} is already associated with another number. If @var{rev} is symbolic, it is expanded before association. A @var{rev} consisting of a branch number followed by a @samp{.} stands for the current latest revision in the branch. A @samp{:} with an empty @var{rev} stands for the current latest revision on the default branch, normally the trunk. For example, @samp{cvs admin -n@var{name}:} associates @var{name} with the current latest revision of all the RCS files; this contrasts with @samp{cvs admin -n@var{name}:$} which associates @var{name} with the revision numbers extracted from keyword strings in the corresponding working files. @cindex Deleting revisions @cindex Outdating revisions @cindex Saving space @item -o@var{range} Deletes (@dfn{outdates}) the revisions given by @var{range}. Note that this command can be quite dangerous unless you know @emph{exactly} what you are doing (for example see the warnings below about how the @var{rev1}:@var{rev2} syntax is confusing). If you are short on disc this option might help you. But think twice before using it---there is no way short of restoring the latest backup to undo this command! If you delete different revisions than you planned, either due to carelessness or (heaven forbid) a @sc{cvs} bug, there is no opportunity to correct the error before the revisions are deleted. It probably would be a good idea to experiment on a copy of the repository first. Specify @var{range} in one of the following ways: @table @code @item @var{rev1}::@var{rev2} Collapse all revisions between rev1 and rev2, so that @sc{cvs} only stores the differences associated with going from rev1 to rev2, not intermediate steps. For example, after @samp{-o 1.3::1.5} one can retrieve revision 1.3, revision 1.5, or the differences to get from 1.3 to 1.5, but not the revision 1.4, or the differences between 1.3 and 1.4. Other examples: @samp{-o 1.3::1.4} and @samp{-o 1.3::1.3} have no effect, because there are no intermediate revisions to remove. @item ::@var{rev} Collapse revisions between the beginning of the branch containing @var{rev} and @var{rev} itself. The branchpoint and @var{rev} are left intact. For example, @samp{-o ::1.3.2.6} deletes revision 1.3.2.1, revision 1.3.2.5, and everything in between, but leaves 1.3 and 1.3.2.6 intact. @item @var{rev}:: Collapse revisions between @var{rev} and the end of the branch containing @var{rev}. Revision @var{rev} is left intact but the head revision is deleted. @item @var{rev} Delete the revision @var{rev}. For example, @samp{-o 1.3} is equivalent to @samp{-o 1.2::1.4}. @item @var{rev1}:@var{rev2} Delete the revisions from @var{rev1} to @var{rev2}, inclusive, on the same branch. One will not be able to retrieve @var{rev1} or @var{rev2} or any of the revisions in between. For example, the command @samp{cvs admin -oR_1_01:R_1_02 .} is rarely useful. It means to delete revisions up to, and including, the tag R_1_02. But beware! If there are files that have not changed between R_1_02 and R_1_03 the file will have @emph{the same} numerical revision number assigned to the tags R_1_02 and R_1_03. So not only will it be impossible to retrieve R_1_02; R_1_03 will also have to be restored from the tapes! In most cases you want to specify @var{rev1}::@var{rev2} instead. @item :@var{rev} Delete revisions from the beginning of the branch containing @var{rev} up to and including @var{rev}. @item @var{rev}: Delete revisions from revision @var{rev}, including @var{rev} itself, to the end of the branch containing @var{rev}. @end table None of the revisions to be deleted may have branches or locks. If any of the revisions to be deleted have symbolic names, and one specifies one of the @samp{::} syntaxes, then @sc{cvs} will give an error and not delete any revisions. If you really want to delete both the symbolic names and the revisions, first delete the symbolic names with @code{cvs tag -d}, then run @code{cvs admin -o}. If one specifies the non-@samp{::} syntaxes, then @sc{cvs} will delete the revisions but leave the symbolic names pointing to nonexistent revisions. This behavior is preserved for compatibility with previous versions of @sc{cvs}, but because it isn't very useful, in the future it may change to be like the @samp{::} case. Due to the way @sc{cvs} handles branches @var{rev} cannot be specified symbolically if it is a branch. @xref{Magic branch numbers}, for an explanation. @c FIXME: is this still true? I suspect not. Make sure that no-one has checked out a copy of the revision you outdate. Strange things will happen if he starts to edit it and tries to check it back in. For this reason, this option is not a good way to take back a bogus commit; commit a new revision undoing the bogus change instead (@pxref{Merging two revisions}). @item -q Run quietly; do not print diagnostics. @item -s@var{state}[:@var{rev}] Useful with @sc{cvs}. Set the state attribute of the revision @var{rev} to @var{state}. If @var{rev} is a branch number, assume the latest revision on that branch. If @var{rev} is omitted, assume the latest revision on the default branch. Any identifier is acceptable for @var{state}. A useful set of states is @samp{Exp} (for experimental), @samp{Stab} (for stable), and @samp{Rel} (for released). By default, the state of a new revision is set to @samp{Exp} when it is created. The state is visible in the output from @var{cvs log} (@pxref{log}), and in the @samp{$@splitrcskeyword{}Log$} and @samp{$@splitrcskeyword{}State$} keywords (@pxref{Keyword substitution}). Note that @sc{cvs} uses the @code{dead} state for its own purposes; to take a file to or from the @code{dead} state use commands like @code{cvs remove} and @code{cvs add}, not @code{cvs admin -s}. @item -t[@var{file}] Useful with @sc{cvs}. Write descriptive text from the contents of the named @var{file} into the RCS file, deleting the existing text. The @var{file} pathname may not begin with @samp{-}. The descriptive text can be seen in the output from @samp{cvs log} (@pxref{log}). There can be no space between @samp{-t} and its argument. If @var{file} is omitted, obtain the text from standard input, terminated by end-of-file or by a line containing @samp{.} by itself. Prompt for the text if interaction is possible; see @samp{-I}. @item -t-@var{string} Similar to @samp{-t@var{file}}. Write descriptive text from the @var{string} into the @sc{rcs} file, deleting the existing text. There can be no space between @samp{-t} and its argument. @c The rcs -T option, do not update last-mod time for @c minor changes, has never been documented as a @c cvs admin option. @item -U Set locking to non-strict. Non-strict locking means that the owner of a file need not lock a revision for checkin. For use with @sc{cvs}, strict locking must be set; see the discussion under the @samp{-l} option above. @item -u[@var{rev}] See the option @samp{-l} above, for a discussion of using this option with @sc{cvs}. Unlock the revision with number @var{rev}. If a branch is given, unlock the latest revision on that branch. If @var{rev} is omitted, remove the latest lock held by the caller. Normally, only the locker of a revision may unlock it; somebody else unlocking a revision breaks the lock. This causes the original locker to be sent a @code{commit} notification (@pxref{Getting Notified}). There can be no space between @samp{-u} and its argument. @item -V@var{n} In previous versions of @sc{cvs}, this option meant to write an @sc{rcs} file which would be acceptable to @sc{rcs} version @var{n}, but it is now obsolete and specifying it will produce an error. @c Note that -V without an argument has never been @c documented as a cvs admin option. @item -x@var{suffixes} In previous versions of @sc{cvs}, this was documented as a way of specifying the names of the @sc{rcs} files. However, @sc{cvs} has always required that the @sc{rcs} files used by @sc{cvs} end in @samp{,v}, so this option has never done anything useful. @c The rcs -z option, to specify the timezone, has @c never been documented as a cvs admin option. @end table @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node checkout @appendixsec checkout---Check out sources for editing @cindex checkout (subcommand) @cindex co (subcommand) @itemize @bullet @item Synopsis: checkout [options] modules@dots{} @item Requires: repository. @item Changes: working directory. @item Synonyms: co, get @end itemize Create or update a working directory containing copies of the source files specified by @var{modules}. You must execute @code{checkout} before using most of the other @sc{cvs} commands, since most of them operate on your working directory. The @var{modules} are either symbolic names for some collection of source directories and files, or paths to directories or files in the repository. The symbolic names are defined in the @samp{modules} file. @xref{modules}. @c Needs an example, particularly of the non-"modules" @c case but probably of both. @c FIXME: this seems like a very odd place to introduce @c people to how CVS works. The bit about unreserved @c checkouts is also misleading as it depends on how @c things are set up. Depending on the modules you specify, @code{checkout} may recursively create directories and populate them with the appropriate source files. You can then edit these source files at any time (regardless of whether other software developers are editing their own copies of the sources); update them to include new changes applied by others to the source repository; or commit your work as a permanent change to the source repository. Note that @code{checkout} is used to create directories. The top-level directory created is always added to the directory where @code{checkout} is invoked, and usually has the same name as the specified module. In the case of a module alias, the created sub-directory may have a different name, but you can be sure that it will be a sub-directory, and that @code{checkout} will show the relative path leading to each file as it is extracted into your private work area (unless you specify the @samp{-Q} global option). The files created by @code{checkout} are created read-write, unless the @samp{-r} option to @sc{cvs} (@pxref{Global options}) is specified, the @code{CVSREAD} environment variable is specified (@pxref{Environment variables}), or a watch is in effect for that file (@pxref{Watches}). Note that running @code{checkout} on a directory that was already built by a prior @code{checkout} is also permitted. This is similar to specifying the @samp{-d} option to the @code{update} command in the sense that new directories that have been created in the repository will appear in your work area. However, @code{checkout} takes a module name whereas @code{update} takes a directory name. Also to use @code{checkout} this way it must be run from the top level directory (where you originally ran @code{checkout} from), so before you run @code{checkout} to update an existing directory, don't forget to change your directory to the top level directory. For the output produced by the @code{checkout} command see @ref{update output}. @menu * checkout options:: checkout options * checkout examples:: checkout examples @end menu @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node checkout options @appendixsubsec checkout options These standard options are supported by @code{checkout} (@pxref{Common options}, for a complete description of them): @table @code @item -D @var{date} Use the most recent revision no later than @var{date}. This option is sticky, and implies @samp{-P}. See @ref{Sticky tags}, for more information on sticky tags/dates. @item -f Only useful with the @samp{-D @var{date}} or @samp{-r @var{tag}} flags. If no matching revision is found, retrieve the most recent revision (instead of ignoring the file). @item -k @var{kflag} Process keywords according to @var{kflag}. See @ref{Keyword substitution}. This option is sticky; future updates of this file in this working directory will use the same @var{kflag}. The @code{status} command can be viewed to see the sticky options. See @ref{Invoking CVS}, for more information on the @code{status} command. @item -l Local; run only in current working directory. @item -n Do not run any checkout program (as specified with the @samp{-o} option in the modules file; @pxref{modules}). @item -P Prune empty directories. See @ref{Moving directories}. @item -p Pipe files to the standard output. @item -R Checkout directories recursively. This option is on by default. @item -r @var{tag} Use revision @var{tag}. This option is sticky, and implies @samp{-P}. See @ref{Sticky tags}, for more information on sticky tags/dates. @end table In addition to those, you can use these special command options with @code{checkout}: @table @code @item -A Reset any sticky tags, dates, or @samp{-k} options. See @ref{Sticky tags}, for more information on sticky tags/dates. @item -c Copy the module file, sorted, to the standard output, instead of creating or modifying any files or directories in your working directory. @item -d @var{dir} Create a directory called @var{dir} for the working files, instead of using the module name. In general, using this flag is equivalent to using @samp{mkdir @var{dir}; cd @var{dir}} followed by the checkout command without the @samp{-d} flag. There is an important exception, however. It is very convenient when checking out a single item to have the output appear in a directory that doesn't contain empty intermediate directories. In this case @emph{only}, @sc{cvs} tries to ``shorten'' pathnames to avoid those empty directories. For example, given a module @samp{foo} that contains the file @samp{bar.c}, the command @samp{cvs co -d dir foo} will create directory @samp{dir} and place @samp{bar.c} inside. Similarly, given a module @samp{bar} which has subdirectory @samp{baz} wherein there is a file @samp{quux.c}, the command @samp{cvs co -d dir bar/baz} will create directory @samp{dir} and place @samp{quux.c} inside. Using the @samp{-N} flag will defeat this behavior. Given the same module definitions above, @samp{cvs co -N -d dir foo} will create directories @samp{dir/foo} and place @samp{bar.c} inside, while @samp{cvs co -N -d dir bar/baz} will create directories @samp{dir/bar/baz} and place @samp{quux.c} inside. @item -j @var{tag} With two @samp{-j} options, merge changes from the revision specified with the first @samp{-j} option to the revision specified with the second @samp{j} option, into the working directory. With one @samp{-j} option, merge changes from the ancestor revision to the revision specified with the @samp{-j} option, into the working directory. The ancestor revision is the common ancestor of the revision which the working directory is based on, and the revision specified in the @samp{-j} option. In addition, each -j option can contain an optional date specification which, when used with branches, can limit the chosen revision to one within a specific date. An optional date is specified by adding a colon (:) to the tag: @samp{-j@var{Symbolic_Tag}:@var{Date_Specifier}}. @xref{Branching and merging}. @item -N Only useful together with @samp{-d @var{dir}}. With this option, @sc{cvs} will not ``shorten'' module paths in your working directory when you check out a single module. See the @samp{-d} flag for examples and a discussion. @item -s Like @samp{-c}, but include the status of all modules, and sort it by the status string. @xref{modules}, for info about the @samp{-s} option that is used inside the modules file to set the module status. @end table @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node checkout examples @appendixsubsec checkout examples Get a copy of the module @samp{tc}: @example $ cvs checkout tc @end example Get a copy of the module @samp{tc} as it looked one day ago: @example $ cvs checkout -D yesterday tc @end example @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node commit @appendixsec commit---Check files into the repository @cindex commit (subcommand) @itemize @bullet @item Synopsis: commit [-lnRf] [-m 'log_message' | -F file] [-r revision] [files@dots{}] @item Requires: working directory, repository. @item Changes: repository. @item Synonym: ci @end itemize Use @code{commit} when you want to incorporate changes from your working source files into the source repository. If you don't specify particular files to commit, all of the files in your working current directory are examined. @code{commit} is careful to change in the repository only those files that you have really changed. By default (or if you explicitly specify the @samp{-R} option), files in subdirectories are also examined and committed if they have changed; you can use the @samp{-l} option to limit @code{commit} to the current directory only. @code{commit} verifies that the selected files are up to date with the current revisions in the source repository; it will notify you, and exit without committing, if any of the specified files must be made current first with @code{update} (@pxref{update}). @code{commit} does not call the @code{update} command for you, but rather leaves that for you to do when the time is right. When all is well, an editor is invoked to allow you to enter a log message that will be written to one or more logging programs (@pxref{modules}, and @pxref{loginfo}) and placed in the @sc{rcs} file inside the repository. This log message can be retrieved with the @code{log} command; see @ref{log}. You can specify the log message on the command line with the @samp{-m @var{message}} option, and thus avoid the editor invocation, or use the @samp{-F @var{file}} option to specify that the argument file contains the log message. @menu * commit options:: commit options * commit examples:: commit examples @end menu @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node commit options @appendixsubsec commit options These standard options are supported by @code{commit} (@pxref{Common options}, for a complete description of them): @table @code @item -l Local; run only in current working directory. @item -R Commit directories recursively. This is on by default. @item -r @var{revision} Commit to @var{revision}. @var{revision} must be either a branch, or a revision on the main trunk that is higher than any existing revision number (@pxref{Assigning revisions}). You cannot commit to a specific revision on a branch. @c FIXME: Need xref for branch case. @end table @code{commit} also supports these options: @table @code @item -F @var{file} Read the log message from @var{file}, instead of invoking an editor. @item -f Note that this is not the standard behavior of the @samp{-f} option as defined in @ref{Common options}. Force @sc{cvs} to commit a new revision even if you haven't made any changes to the file. If the current revision of @var{file} is 1.7, then the following two commands are equivalent: @example $ cvs commit -f @var{file} $ cvs commit -r 1.8 @var{file} @end example @c This is odd, but it's how CVS has worked for some @c time. The @samp{-f} option disables recursion (i.e., it implies @samp{-l}). To force @sc{cvs} to commit a new revision for all files in all subdirectories, you must use @samp{-f -R}. @item -m @var{message} Use @var{message} as the log message, instead of invoking an editor. @end table @need 2000 @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node commit examples @appendixsubsec commit examples @c FIXME: this material wants to be somewhere @c in "Branching and merging". @appendixsubsubsec Committing to a branch You can commit to a branch revision (one that has an even number of dots) with the @samp{-r} option. To create a branch revision, use the @samp{-b} option of the @code{rtag} or @code{tag} commands (@pxref{Branching and merging}). Then, either @code{checkout} or @code{update} can be used to base your sources on the newly created branch. From that point on, all @code{commit} changes made within these working sources will be automatically added to a branch revision, thereby not disturbing main-line development in any way. For example, if you had to create a patch to the 1.2 version of the product, even though the 2.0 version is already under development, you might do: @example $ cvs rtag -b -r FCS1_2 FCS1_2_Patch product_module $ cvs checkout -r FCS1_2_Patch product_module $ cd product_module [[ hack away ]] $ cvs commit @end example @noindent This works automatically since the @samp{-r} option is sticky. @appendixsubsubsec Creating the branch after editing Say you have been working on some extremely experimental software, based on whatever revision you happened to checkout last week. If others in your group would like to work on this software with you, but without disturbing main-line development, you could commit your change to a new branch. Others can then checkout your experimental stuff and utilize the full benefit of @sc{cvs} conflict resolution. The scenario might look like: @c FIXME: Should we be recommending tagging the branchpoint? @example [[ hacked sources are present ]] $ cvs tag -b EXPR1 $ cvs update -r EXPR1 $ cvs commit @end example The @code{update} command will make the @samp{-r EXPR1} option sticky on all files. Note that your changes to the files will never be removed by the @code{update} command. The @code{commit} will automatically commit to the correct branch, because the @samp{-r} is sticky. You could also do like this: @c FIXME: Should we be recommending tagging the branchpoint? @example [[ hacked sources are present ]] $ cvs tag -b EXPR1 $ cvs commit -r EXPR1 @end example @noindent but then, only those files that were changed by you will have the @samp{-r EXPR1} sticky flag. If you hack away, and commit without specifying the @samp{-r EXPR1} flag, some files may accidentally end up on the main trunk. To work with you on the experimental change, others would simply do @example $ cvs checkout -r EXPR1 whatever_module @end example @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node diff @appendixsec diff---Show differences between revisions @cindex diff (subcommand) @itemize @bullet @item Synopsis: diff [-lR] [-k kflag] [format_options] [[-r rev1 | -D date1] [-r rev2 | -D date2]] [files@dots{}] @item Requires: working directory, repository. @item Changes: nothing. @end itemize The @code{diff} command is used to compare different revisions of files. The default action is to compare your working files with the revisions they were based on, and report any differences that are found. If any file names are given, only those files are compared. If any directories are given, all files under them will be compared. The exit status for diff is different than for other @sc{cvs} commands; for details @ref{Exit status}. @menu * diff options:: diff options * diff examples:: diff examples @end menu @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node diff options @appendixsubsec diff options These standard options are supported by @code{diff} (@pxref{Common options}, for a complete description of them): @table @code @item -D @var{date} Use the most recent revision no later than @var{date}. See @samp{-r} for how this affects the comparison. @item -k @var{kflag} Process keywords according to @var{kflag}. See @ref{Keyword substitution}. @item -l Local; run only in current working directory. @item -R Examine directories recursively. This option is on by default. @item -r @var{tag} Compare with revision @var{tag}. Zero, one or two @samp{-r} options can be present. With no @samp{-r} option, the working file will be compared with the revision it was based on. With one @samp{-r}, that revision will be compared to your current working file. With two @samp{-r} options those two revisions will be compared (and your working file will not affect the outcome in any way). @c We should be a lot more explicit, with examples, @c about the difference between "cvs diff" and "cvs @c diff -r HEAD". This often confuses new users. One or both @samp{-r} options can be replaced by a @samp{-D @var{date}} option, described above. @end table @c Conceptually, this is a disaster. There are 3 @c zillion diff formats that we support via the diff @c library. It is not obvious to me that we should @c document them all. Maybe just the most common ones @c like -c and -u, and think about phasing out the @c obscure ones. @c FIXCVS: also should be a way to specify an external @c diff program (which can be different for different @c file types) and pass through @c arbitrary options, so that the user can do @c "--pass=-Z --pass=foo" or something even if CVS @c doesn't know about the "-Z foo" option to diff. @c This would fit nicely with deprecating/eliminating @c the obscure options of the diff library, because it @c would let people specify an external GNU diff if @c they are into that sort of thing. The following options specify the format of the output. They have the same meaning as in GNU diff. Most options have two equivalent names, one of which is a single letter preceded by @samp{-}, and the other of which is a long name preceded by @samp{--}. @table @samp @item -@var{lines} Show @var{lines} (an integer) lines of context. This option does not specify an output format by itself; it has no effect unless it is combined with @samp{-c} or @samp{-u}. This option is obsolete. For proper operation, @code{patch} typically needs at least two lines of context. @item -a Treat all files as text and compare them line-by-line, even if they do not seem to be text. @item -b Ignore trailing white space and consider all other sequences of one or more white space characters to be equivalent. @item -B Ignore changes that just insert or delete blank lines. @item --binary Read and write data in binary mode. @item --brief Report only whether the files differ, not the details of the differences. @item -c Use the context output format. @item -C @var{lines} @itemx --context@r{[}=@var{lines}@r{]} Use the context output format, showing @var{lines} (an integer) lines of context, or three if @var{lines} is not given. For proper operation, @code{patch} typically needs at least two lines of context. @item --changed-group-format=@var{format} Use @var{format} to output a line group containing differing lines from both files in if-then-else format. @xref{Line group formats}. @item -d Change the algorithm to perhaps find a smaller set of changes. This makes @code{diff} slower (sometimes much slower). @item -e @itemx --ed Make output that is a valid @code{ed} script. @item --expand-tabs Expand tabs to spaces in the output, to preserve the alignment of tabs in the input files. @item -f Make output that looks vaguely like an @code{ed} script but has changes in the order they appear in the file. @item -F @var{regexp} In context and unified format, for each hunk of differences, show some of the last preceding line that matches @var{regexp}. @item --forward-ed Make output that looks vaguely like an @code{ed} script but has changes in the order they appear in the file. @item -H Use heuristics to speed handling of large files that have numerous scattered small changes. @item --horizon-lines=@var{lines} Do not discard the last @var{lines} lines of the common prefix and the first @var{lines} lines of the common suffix. @item -i Ignore changes in case; consider upper- and lower-case letters equivalent. @item -I @var{regexp} Ignore changes that just insert or delete lines that match @var{regexp}. @item --ifdef=@var{name} Make merged if-then-else output using @var{name}. @item --ignore-all-space Ignore white space when comparing lines. @item --ignore-blank-lines Ignore changes that just insert or delete blank lines. @item --ignore-case Ignore changes in case; consider upper- and lower-case to be the same. @item --ignore-matching-lines=@var{regexp} Ignore changes that just insert or delete lines that match @var{regexp}. @item --ignore-space-change Ignore trailing white space and consider all other sequences of one or more white space characters to be equivalent. @item --initial-tab Output a tab rather than a space before the text of a line in normal or context format. This causes the alignment of tabs in the line to look normal. @item -L @var{label} Use @var{label} instead of the file name in the context format and unified format headers. @item --label=@var{label} Use @var{label} instead of the file name in the context format and unified format headers. @item --left-column Print only the left column of two common lines in side by side format. @item --line-format=@var{format} Use @var{format} to output all input lines in if-then-else format. @xref{Line formats}. @item --minimal Change the algorithm to perhaps find a smaller set of changes. This makes @code{diff} slower (sometimes much slower). @item -n Output RCS-format diffs; like @samp{-f} except that each command specifies the number of lines affected. @item -N @itemx --new-file In directory comparison, if a file is found in only one directory, treat it as present but empty in the other directory. @item --new-group-format=@var{format} Use @var{format} to output a group of lines taken from just the second file in if-then-else format. @xref{Line group formats}. @item --new-line-format=@var{format} Use @var{format} to output a line taken from just the second file in if-then-else format. @xref{Line formats}. @item --old-group-format=@var{format} Use @var{format} to output a group of lines taken from just the first file in if-then-else format. @xref{Line group formats}. @item --old-line-format=@var{format} Use @var{format} to output a line taken from just the first file in if-then-else format. @xref{Line formats}. @item -p Show which C function each change is in. @item --rcs Output RCS-format diffs; like @samp{-f} except that each command specifies the number of lines affected. @item --report-identical-files @itemx -s Report when two files are the same. @item --show-c-function Show which C function each change is in. @item --show-function-line=@var{regexp} In context and unified format, for each hunk of differences, show some of the last preceding line that matches @var{regexp}. @item --side-by-side Use the side by side output format. @item --speed-large-files Use heuristics to speed handling of large files that have numerous scattered small changes. @item --suppress-common-lines Do not print common lines in side by side format. @item -t Expand tabs to spaces in the output, to preserve the alignment of tabs in the input files. @item -T Output a tab rather than a space before the text of a line in normal or context format. This causes the alignment of tabs in the line to look normal. @item --text Treat all files as text and compare them line-by-line, even if they do not appear to be text. @item -u Use the unified output format. @item --unchanged-group-format=@var{format} Use @var{format} to output a group of common lines taken from both files in if-then-else format. @xref{Line group formats}. @item --unchanged-line-format=@var{format} Use @var{format} to output a line common to both files in if-then-else format. @xref{Line formats}. @item -U @var{lines} @itemx --unified@r{[}=@var{lines}@r{]} Use the unified output format, showing @var{lines} (an integer) lines of context, or three if @var{lines} is not given. For proper operation, @code{patch} typically needs at least two lines of context. @item -w Ignore white space when comparing lines. @item -W @var{columns} @itemx --width=@var{columns} Use an output width of @var{columns} in side by side format. @item -y Use the side by side output format. @end table @menu * Line group formats:: Line group formats * Line formats:: Line formats @end menu @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node Line group formats @appendixsubsubsec Line group formats Line group formats let you specify formats suitable for many applications that allow if-then-else input, including programming languages and text formatting languages. A line group format specifies the output format for a contiguous group of similar lines. For example, the following command compares the TeX file @file{myfile} with the original version from the repository, and outputs a merged file in which old regions are surrounded by @samp{\begin@{em@}}-@samp{\end@{em@}} lines, and new regions are surrounded by @samp{\begin@{bf@}}-@samp{\end@{bf@}} lines. @example cvs diff \ --old-group-format='\begin@{em@} %<\end@{em@} ' \ --new-group-format='\begin@{bf@} %>\end@{bf@} ' \ myfile @end example The following command is equivalent to the above example, but it is a little more verbose, because it spells out the default line group formats. @example cvs diff \ --old-group-format='\begin@{em@} %<\end@{em@} ' \ --new-group-format='\begin@{bf@} %>\end@{bf@} ' \ --unchanged-group-format='%=' \ --changed-group-format='\begin@{em@} %<\end@{em@} \begin@{bf@} %>\end@{bf@} ' \ myfile @end example Here is a more advanced example, which outputs a diff listing with headers containing line numbers in a ``plain English'' style. @example cvs diff \ --unchanged-group-format='' \ --old-group-format='-------- %dn line%(n=1?:s) deleted at %df: %<' \ --new-group-format='-------- %dN line%(N=1?:s) added after %de: %>' \ --changed-group-format='-------- %dn line%(n=1?:s) changed at %df: %<-------- to: %>' \ myfile @end example To specify a line group format, use one of the options listed below. You can specify up to four line group formats, one for each kind of line group. You should quote @var{format}, because it typically contains shell metacharacters. @table @samp @item --old-group-format=@var{format} These line groups are hunks containing only lines from the first file. The default old group format is the same as the changed group format if it is specified; otherwise it is a format that outputs the line group as-is. @item --new-group-format=@var{format} These line groups are hunks containing only lines from the second file. The default new group format is same as the changed group format if it is specified; otherwise it is a format that outputs the line group as-is. @item --changed-group-format=@var{format} These line groups are hunks containing lines from both files. The default changed group format is the concatenation of the old and new group formats. @item --unchanged-group-format=@var{format} These line groups contain lines common to both files. The default unchanged group format is a format that outputs the line group as-is. @end table In a line group format, ordinary characters represent themselves; conversion specifications start with @samp{%} and have one of the following forms. @table @samp @item %< stands for the lines from the first file, including the trailing newline. Each line is formatted according to the old line format (@pxref{Line formats}). @item %> stands for the lines from the second file, including the trailing newline. Each line is formatted according to the new line format. @item %= stands for the lines common to both files, including the trailing newline. Each line is formatted according to the unchanged line format. @item %% stands for @samp{%}. @item %c'@var{C}' where @var{C} is a single character, stands for @var{C}. @var{C} may not be a backslash or an apostrophe. For example, @samp{%c':'} stands for a colon, even inside the then-part of an if-then-else format, which a colon would normally terminate. @item %c'\@var{O}' where @var{O} is a string of 1, 2, or 3 octal digits, stands for the character with octal code @var{O}. For example, @samp{%c'\0'} stands for a null character. @item @var{F}@var{n} where @var{F} is a @code{printf} conversion specification and @var{n} is one of the following letters, stands for @var{n}'s value formatted with @var{F}. @table @samp @item e The line number of the line just before the group in the old file. @item f The line number of the first line in the group in the old file; equals @var{e} + 1. @item l The line number of the last line in the group in the old file. @item m The line number of the line just after the group in the old file; equals @var{l} + 1. @item n The number of lines in the group in the old file; equals @var{l} - @var{f} + 1. @item E, F, L, M, N Likewise, for lines in the new file. @end table The @code{printf} conversion specification can be @samp{%d}, @samp{%o}, @samp{%x}, or @samp{%X}, specifying decimal, octal, lower case hexadecimal, or upper case hexadecimal output respectively. After the @samp{%} the following options can appear in sequence: a @samp{-} specifying left-justification; an integer specifying the minimum field width; and a period followed by an optional integer specifying the minimum number of digits. For example, @samp{%5dN} prints the number of new lines in the group in a field of width 5 characters, using the @code{printf} format @code{"%5d"}. @item (@var{A}=@var{B}?@var{T}:@var{E}) If @var{A} equals @var{B} then @var{T} else @var{E}. @var{A} and @var{B} are each either a decimal constant or a single letter interpreted as above. This format spec is equivalent to @var{T} if @var{A}'s value equals @var{B}'s; otherwise it is equivalent to @var{E}. For example, @samp{%(N=0?no:%dN) line%(N=1?:s)} is equivalent to @samp{no lines} if @var{N} (the number of lines in the group in the new file) is 0, to @samp{1 line} if @var{N} is 1, and to @samp{%dN lines} otherwise. @end table @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node Line formats @appendixsubsubsec Line formats Line formats control how each line taken from an input file is output as part of a line group in if-then-else format. For example, the following command outputs text with a one-column change indicator to the left of the text. The first column of output is @samp{-} for deleted lines, @samp{|} for added lines, and a space for unchanged lines. The formats contain newline characters where newlines are desired on output. @example cvs diff \ --old-line-format='-%l ' \ --new-line-format='|%l ' \ --unchanged-line-format=' %l ' \ myfile @end example To specify a line format, use one of the following options. You should quote @var{format}, since it often contains shell metacharacters. @table @samp @item --old-line-format=@var{format} formats lines just from the first file. @item --new-line-format=@var{format} formats lines just from the second file. @item --unchanged-line-format=@var{format} formats lines common to both files. @item --line-format=@var{format} formats all lines; in effect, it sets all three above options simultaneously. @end table In a line format, ordinary characters represent themselves; conversion specifications start with @samp{%} and have one of the following forms. @table @samp @item %l stands for the contents of the line, not counting its trailing newline (if any). This format ignores whether the line is incomplete. @item %L stands for the contents of the line, including its trailing newline (if any). If a line is incomplete, this format preserves its incompleteness. @item %% stands for @samp{%}. @item %c'@var{C}' where @var{C} is a single character, stands for @var{C}. @var{C} may not be a backslash or an apostrophe. For example, @samp{%c':'} stands for a colon. @item %c'\@var{O}' where @var{O} is a string of 1, 2, or 3 octal digits, stands for the character with octal code @var{O}. For example, @samp{%c'\0'} stands for a null character. @item @var{F}n where @var{F} is a @code{printf} conversion specification, stands for the line number formatted with @var{F}. For example, @samp{%.5dn} prints the line number using the @code{printf} format @code{"%.5d"}. @xref{Line group formats}, for more about printf conversion specifications. @end table The default line format is @samp{%l} followed by a newline character. If the input contains tab characters and it is important that they line up on output, you should ensure that @samp{%l} or @samp{%L} in a line format is just after a tab stop (e.g.@: by preceding @samp{%l} or @samp{%L} with a tab character), or you should use the @samp{-t} or @samp{--expand-tabs} option. Taken together, the line and line group formats let you specify many different formats. For example, the following command uses a format similar to @code{diff}'s normal format. You can tailor this command to get fine control over @code{diff}'s output. @example cvs diff \ --old-line-format='< %l ' \ --new-line-format='> %l ' \ --old-group-format='%df%(f=l?:,%dl)d%dE %<' \ --new-group-format='%dea%dF%(F=L?:,%dL) %>' \ --changed-group-format='%df%(f=l?:,%dl)c%dF%(F=L?:,%dL) %<--- %>' \ --unchanged-group-format='' \ myfile @end example @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node diff examples @appendixsubsec diff examples The following line produces a Unidiff (@samp{-u} flag) between revision 1.14 and 1.19 of @file{backend.c}. Due to the @samp{-kk} flag no keywords are substituted, so differences that only depend on keyword substitution are ignored. @example $ cvs diff -kk -u -r 1.14 -r 1.19 backend.c @end example Suppose the experimental branch EXPR1 was based on a set of files tagged RELEASE_1_0. To see what has happened on that branch, the following can be used: @example $ cvs diff -r RELEASE_1_0 -r EXPR1 @end example A command like this can be used to produce a context diff between two releases: @example $ cvs diff -c -r RELEASE_1_0 -r RELEASE_1_1 > diffs @end example If you are maintaining ChangeLogs, a command like the following just before you commit your changes may help you write the ChangeLog entry. All local modifications that have not yet been committed will be printed. @example $ cvs diff -u | less @end example @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node export @appendixsec export---Export sources from CVS, similar to checkout @cindex export (subcommand) @itemize @bullet @item Synopsis: export [-flNnR] [-r rev|-D date] [-k subst] [-d dir] module@dots{} @item Requires: repository. @item Changes: current directory. @end itemize This command is a variant of @code{checkout}; use it when you want a copy of the source for module without the @sc{cvs} administrative directories. For example, you might use @code{export} to prepare source for shipment off-site. This command requires that you specify a date or tag (with @samp{-D} or @samp{-r}), so that you can count on reproducing the source you ship to others (and thus it always prunes empty directories). One often would like to use @samp{-kv} with @code{cvs export}. This causes any keywords to be expanded such that an import done at some other site will not lose the keyword revision information. But be aware that doesn't handle an export containing binary files correctly. Also be aware that after having used @samp{-kv}, one can no longer use the @code{ident} command (which is part of the @sc{rcs} suite---see ident(1)) which looks for keyword strings. If you want to be able to use @code{ident} you must not use @samp{-kv}. @menu * export options:: export options @end menu @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node export options @appendixsubsec export options These standard options are supported by @code{export} (@pxref{Common options}, for a complete description of them): @table @code @item -D @var{date} Use the most recent revision no later than @var{date}. @item -f If no matching revision is found, retrieve the most recent revision (instead of ignoring the file). @item -l Local; run only in current working directory. @item -n Do not run any checkout program. @item -R Export directories recursively. This is on by default. @item -r @var{tag} Use revision @var{tag}. @end table In addition, these options (that are common to @code{checkout} and @code{export}) are also supported: @table @code @item -d @var{dir} Create a directory called @var{dir} for the working files, instead of using the module name. @xref{checkout options}, for complete details on how @sc{cvs} handles this flag. @item -k @var{subst} Set keyword expansion mode (@pxref{Substitution modes}). @item -N Only useful together with @samp{-d @var{dir}}. @xref{checkout options}, for complete details on how @sc{cvs} handles this flag. @end table @ignore @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @c @node export examples @appendixsubsec export examples Contributed examples are gratefully accepted. @c -- Examples here!! @end ignore @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node history @appendixsec history---Show status of files and users @cindex history (subcommand) @itemize @bullet @item Synopsis: history [-report] [-flags] [-options args] [files@dots{}] @item Requires: the file @file{$CVSROOT/CVSROOT/history} @item Changes: nothing. @end itemize @sc{cvs} can keep a history file that tracks each use of the @code{checkout}, @code{commit}, @code{rtag}, @code{update}, and @code{release} commands. You can use @code{history} to display this information in various formats. Logging must be enabled by creating the file @file{$CVSROOT/CVSROOT/history}. @strong{Note: @code{history} uses @samp{-f}, @samp{-l}, @samp{-n}, and @samp{-p} in ways that conflict with the normal use inside @sc{cvs} (@pxref{Common options}).} @menu * history options:: history options @end menu @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node history options @appendixsubsec history options Several options (shown above as @samp{-report}) control what kind of report is generated: @table @code @item -c Report on each time commit was used (i.e., each time the repository was modified). @item -e Everything (all record types). Equivalent to specifying @samp{-x} with all record types. Of course, @samp{-e} will also include record types which are added in a future version of @sc{cvs}; if you are writing a script which can only handle certain record types, you'll want to specify @samp{-x}. @item -m @var{module} Report on a particular module. (You can meaningfully use @samp{-m} more than once on the command line.) @item -o Report on checked-out modules. This is the default report type. @item -T Report on all tags. @item -x @var{type} Extract a particular set of record types @var{type} from the @sc{cvs} history. The types are indicated by single letters, which you may specify in combination. Certain commands have a single record type: @table @code @item F release @item O checkout @item E export @item T rtag @end table @noindent One of four record types may result from an update: @table @code @item C A merge was necessary but collisions were detected (requiring manual merging). @item G A merge was necessary and it succeeded. @item U A working file was copied from the repository. @item W The working copy of a file was deleted during update (because it was gone from the repository). @end table @noindent One of three record types results from commit: @table @code @item A A file was added for the first time. @item M A file was modified. @item R A file was removed. @end table @end table The options shown as @samp{-flags} constrain or expand the report without requiring option arguments: @table @code @item -a Show data for all users (the default is to show data only for the user executing @code{history}). @item -l Show last modification only. @item -w Show only the records for modifications done from the same working directory where @code{history} is executing. @end table The options shown as @samp{-options @var{args}} constrain the report based on an argument: @table @code @item -b @var{str} Show data back to a record containing the string @var{str} in either the module name, the file name, or the repository path. @item -D @var{date} Show data since @var{date}. This is slightly different from the normal use of @samp{-D @var{date}}, which selects the newest revision older than @var{date}. @item -f @var{file} Show data for a particular file (you can specify several @samp{-f} options on the same command line). This is equivalent to specifying the file on the command line. @item -n @var{module} Show data for a particular module (you can specify several @samp{-n} options on the same command line). @item -p @var{repository} Show data for a particular source repository (you can specify several @samp{-p} options on the same command line). @item -r @var{rev} Show records referring to revisions since the revision or tag named @var{rev} appears in individual @sc{rcs} files. Each @sc{rcs} file is searched for the revision or tag. @item -t @var{tag} Show records since tag @var{tag} was last added to the history file. This differs from the @samp{-r} flag above in that it reads only the history file, not the @sc{rcs} files, and is much faster. @item -u @var{name} Show records for user @var{name}. @item -z @var{timezone} Show times in the selected records using the specified time zone instead of UTC. @end table @ignore @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @c @node history examples @appendixsubsec history examples Contributed examples will gratefully be accepted. @c -- Examples here! @end ignore @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node import @appendixsec import---Import sources into CVS, using vendor branches @cindex import (subcommand) @c FIXME: This node is way too long for one which has subnodes. @itemize @bullet @item Synopsis: import [-options] repository vendortag releasetag@dots{} @item Requires: Repository, source distribution directory. @item Changes: repository. @end itemize Use @code{import} to incorporate an entire source distribution from an outside source (e.g., a source vendor) into your source repository directory. You can use this command both for initial creation of a repository, and for wholesale updates to the module from the outside source. @xref{Tracking sources}, for a discussion on this subject. The @var{repository} argument gives a directory name (or a path to a directory) under the @sc{cvs} root directory for repositories; if the directory did not exist, import creates it. When you use import for updates to source that has been modified in your source repository (since a prior import), it will notify you of any files that conflict in the two branches of development; use @samp{checkout -j} to reconcile the differences, as import instructs you to do. If @sc{cvs} decides a file should be ignored (@pxref{cvsignore}), it does not import it and prints @samp{I } followed by the filename (@pxref{import output}, for a complete description of the output). If the file @file{$CVSROOT/CVSROOT/cvswrappers} exists, any file whose names match the specifications in that file will be treated as packages and the appropriate filtering will be performed on the file/directory before being imported. @xref{Wrappers}. The outside source is saved in a first-level branch, by default 1.1.1. Updates are leaves of this branch; for example, files from the first imported collection of source will be revision 1.1.1.1, then files from the first imported update will be revision 1.1.1.2, and so on. At least three arguments are required. @var{repository} is needed to identify the collection of source. @var{vendortag} is a tag for the entire branch (e.g., for 1.1.1). You must also specify at least one @var{releasetag} to identify the files at the leaves created each time you execute @code{import}. @c I'm not completely sure this belongs here. But @c we need to say it _somewhere_ reasonably obvious; it @c is a common misconception among people first learning CVS Note that @code{import} does @emph{not} change the directory in which you invoke it. In particular, it does not set up that directory as a @sc{cvs} working directory; if you want to work with the sources import them first and then check them out into a different directory (@pxref{Getting the source}). @menu * import options:: import options * import output:: import output * import examples:: import examples @end menu @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node import options @appendixsubsec import options This standard option is supported by @code{import} (@pxref{Common options}, for a complete description): @table @code @item -m @var{message} Use @var{message} as log information, instead of invoking an editor. @end table There are the following additional special options. @table @code @item -b @var{branch} See @ref{Multiple vendor branches}. @item -k @var{subst} Indicate the keyword expansion mode desired. This setting will apply to all files created during the import, but not to any files that previously existed in the repository. See @ref{Substitution modes}, for a list of valid @samp{-k} settings. @item -I @var{name} Specify file names that should be ignored during import. You can use this option repeatedly. To avoid ignoring any files at all (even those ignored by default), specify `-I !'. @var{name} can be a file name pattern of the same type that you can specify in the @file{.cvsignore} file. @xref{cvsignore}. @c -- Is this really true? @item -W @var{spec} Specify file names that should be filtered during import. You can use this option repeatedly. @var{spec} can be a file name pattern of the same type that you can specify in the @file{.cvswrappers} file. @xref{Wrappers}. @end table @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node import output @appendixsubsec import output @code{import} keeps you informed of its progress by printing a line for each file, preceded by one character indicating the status of the file: @table @code @item U @var{file} The file already exists in the repository and has not been locally modified; a new revision has been created (if necessary). @item N @var{file} The file is a new file which has been added to the repository. @item C @var{file} The file already exists in the repository but has been locally modified; you will have to merge the changes. @item I @var{file} The file is being ignored (@pxref{cvsignore}). @cindex Symbolic link, importing @cindex Link, symbolic, importing @c FIXME: also (somewhere else) probably @c should be documenting what happens if you "cvs add" @c a symbolic link. Also maybe what happens if @c you manually create symbolic links within the @c repository (? - not sure why we'd want to suggest @c doing that). @item L @var{file} The file is a symbolic link; @code{cvs import} ignores symbolic links. People periodically suggest that this behavior should be changed, but if there is a consensus on what it should be changed to, it is not apparent. (Various options in the @file{modules} file can be used to recreate symbolic links on checkout, update, etc.; @pxref{modules}.) @end table @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node import examples @appendixsubsec import examples See @ref{Tracking sources}, and @ref{From files}. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node log @appendixsec log---Print out log information for files @cindex log (subcommand) @itemize @bullet @item Synopsis: log [options] [files@dots{}] @item Requires: repository, working directory. @item Changes: nothing. @end itemize Display log information for files. @code{log} used to call the @sc{rcs} utility @code{rlog}. Although this is no longer true in the current sources, this history determines the format of the output and the options, which are not quite in the style of the other @sc{cvs} commands. @cindex Timezone, in output @cindex Zone, time, in output @c Kind of a funny place to document the timezone used @c in output from commands other than @code{log}. @c There is also more we need to say about this, @c including what happens in a client/server environment. The output includes the location of the @sc{rcs} file, the @dfn{head} revision (the latest revision on the trunk), all symbolic names (tags) and some other things. For each revision, the revision number, the author, the number of lines added/deleted and the log message are printed. All times are displayed in Coordinated Universal Time (UTC). (Other parts of @sc{cvs} print times in the local timezone). @c FIXCVS: need a better way to control the timezone @c used in output. Previous/current versions of CVS did/do @c sometimes support -z in RCSINIT, and/or an @c undocumented (except by reference to 'rlog') -z option @c to cvs log, but this has not been a consistent, @c documented feature. Perhaps a new global option, @c where LT means the client's timezone, which the @c client then communicates to the server, is the @c right solution. @strong{Note: @code{log} uses @samp{-R} in a way that conflicts with the normal use inside @sc{cvs} (@pxref{Common options}).} @menu * log options:: log options * log examples:: log examples @end menu @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node log options @appendixsubsec log options By default, @code{log} prints all information that is available. All other options restrict the output. @table @code @item -b Print information about the revisions on the default branch, normally the highest branch on the trunk. @item -d @var{dates} Print information about revisions with a checkin date/time in the range given by the semicolon-separated list of dates. The date formats accepted are those accepted by the @samp{-D} option to many other @sc{cvs} commands (@pxref{Common options}). Dates can be combined into ranges as follows: @c Should we be thinking about accepting ISO8601 @c ranges? For example "1972-09-10/1972-09-12". @table @code @item @var{d1}<@var{d2} @itemx @var{d2}>@var{d1} Select the revisions that were deposited between @var{d1} and @var{d2}. @item <@var{d} @itemx @var{d}> Select all revisions dated @var{d} or earlier. @item @var{d}< @itemx >@var{d} Select all revisions dated @var{d} or later. @item @var{d} Select the single, latest revision dated @var{d} or earlier. @end table The @samp{>} or @samp{<} characters may be followed by @samp{=} to indicate an inclusive range rather than an exclusive one. Note that the separator is a semicolon (;). @item -h Print only the name of the @sc{rcs} file, name of the file in the working directory, head, default branch, access list, locks, symbolic names, and suffix. @item -l Local; run only in current working directory. (Default is to run recursively). @item -N Do not print the list of tags for this file. This option can be very useful when your site uses a lot of tags, so rather than "more"'ing over 3 pages of tag information, the log information is presented without tags at all. @item -R Print only the name of the @sc{rcs} file. @c Note that using a bare revision (in addition to not @c being explicitly documented here) is potentially @c confusing; it shows the log message to get from the @c previous revision to that revision. "-r1.3 -r1.6" @c (equivalent to "-r1.3,1.6") is even worse; it @c prints the messages to get from 1.2 to 1.3 and 1.5 @c to 1.6. By analogy with "cvs diff", users might @c expect that it is more like specifying a range. @c It is not 100% clear to me how much of this should @c be documented (for example, multiple -r options @c perhaps could/should be deprecated given the false @c analogy with "cvs diff"). @c In general, this section should be rewritten to talk @c about messages to get from revision rev1 to rev2, @c rather than messages for revision rev2 (that is, the @c messages are associated with a change not a static @c revision and failing to make this distinction causes @c much confusion). @item -r@var{revisions} Print information about revisions given in the comma-separated list @var{revisions} of revisions and ranges. The following table explains the available range formats: @table @code @item @var{rev1}:@var{rev2} Revisions @var{rev1} to @var{rev2} (which must be on the same branch). @item @var{rev1}::@var{rev2} The same, but excluding @var{rev1}. @item :@var{rev} @itemx ::@var{rev} Revisions from the beginning of the branch up to and including @var{rev}. @item @var{rev}: Revisions starting with @var{rev} to the end of the branch containing @var{rev}. @item @var{rev}:: Revisions starting just after @var{rev} to the end of the branch containing @var{rev}. @item @var{branch} An argument that is a branch means all revisions on that branch. @item @var{branch1}:@var{branch2} @itemx @var{branch1}::@var{branch2} A range of branches means all revisions on the branches in that range. @item @var{branch}. The latest revision in @var{branch}. @end table A bare @samp{-r} with no revisions means the latest revision on the default branch, normally the trunk. There can be no space between the @samp{-r} option and its argument. @item -S Suppress the header if no revisions are selected. @item -s @var{states} Print information about revisions whose state attributes match one of the states given in the comma-separated list @var{states}. @item -t Print the same as @samp{-h}, plus the descriptive text. @item -w@var{logins} Print information about revisions checked in by users with login names appearing in the comma-separated list @var{logins}. If @var{logins} is omitted, the user's login is assumed. There can be no space between the @samp{-w} option and its argument. @end table @code{log} prints the intersection of the revisions selected with the options @samp{-d}, @samp{-s}, and @samp{-w}, intersected with the union of the revisions selected by @samp{-b} and @samp{-r}. @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node log examples @appendixsubsec log examples Contributed examples are gratefully accepted. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node rdiff @appendixsec rdiff---'patch' format diffs between releases @cindex rdiff (subcommand) @itemize @bullet @item rdiff [-flags] [-V vn] [-r t|-D d [-r t2|-D d2]] modules@dots{} @item Requires: repository. @item Changes: nothing. @item Synonym: patch @end itemize Builds a Larry Wall format patch(1) file between two releases, that can be fed directly into the @code{patch} program to bring an old release up-to-date with the new release. (This is one of the few @sc{cvs} commands that operates directly from the repository, and doesn't require a prior checkout.) The diff output is sent to the standard output device. You can specify (using the standard @samp{-r} and @samp{-D} options) any combination of one or two revisions or dates. If only one revision or date is specified, the patch file reflects differences between that revision or date and the current head revisions in the @sc{rcs} file. Note that if the software release affected is contained in more than one directory, then it may be necessary to specify the @samp{-p} option to the @code{patch} command when patching the old sources, so that @code{patch} is able to find the files that are located in other directories. @menu * rdiff options:: rdiff options * rdiff examples:: rdiff examples @end menu @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node rdiff options @appendixsubsec rdiff options These standard options are supported by @code{rdiff} (@pxref{Common options}, for a complete description of them): @table @code @item -D @var{date} Use the most recent revision no later than @var{date}. @item -f If no matching revision is found, retrieve the most recent revision (instead of ignoring the file). @item -l Local; don't descend subdirectories. @item -R Examine directories recursively. This option is on by default. @item -r @var{tag} Use revision @var{tag}. @end table In addition to the above, these options are available: @table @code @item -c Use the context diff format. This is the default format. @item -s Create a summary change report instead of a patch. The summary includes information about files that were changed or added between the releases. It is sent to the standard output device. This is useful for finding out, for example, which files have changed between two dates or revisions. @item -t A diff of the top two revisions is sent to the standard output device. This is most useful for seeing what the last change to a file was. @item -u Use the unidiff format for the context diffs. Remember that old versions of the @code{patch} program can't handle the unidiff format, so if you plan to post this patch to the net you should probably not use @samp{-u}. @item -V @var{vn} Expand keywords according to the rules current in @sc{rcs} version @var{vn} (the expansion format changed with @sc{rcs} version 5). Note that this option is no longer accepted. @sc{cvs} will always expand keywords the way that @sc{rcs} version 5 does. @end table @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node rdiff examples @appendixsubsec rdiff examples Suppose you receive mail from @t{foo@@example.net} asking for an update from release 1.2 to 1.4 of the tc compiler. You have no such patches on hand, but with @sc{cvs} that can easily be fixed with a command such as this: @example $ cvs rdiff -c -r FOO1_2 -r FOO1_4 tc | \ $$ Mail -s 'The patches you asked for' foo@@example.net @end example Suppose you have made release 1.3, and forked a branch called @samp{R_1_3fix} for bugfixes. @samp{R_1_3_1} corresponds to release 1.3.1, which was made some time ago. Now, you want to see how much development has been done on the branch. This command can be used: @example $ cvs patch -s -r R_1_3_1 -r R_1_3fix module-name cvs rdiff: Diffing module-name File ChangeLog,v changed from revision 1.52.2.5 to 1.52.2.6 File foo.c,v changed from revision 1.52.2.3 to 1.52.2.4 File bar.h,v changed from revision 1.29.2.1 to 1.2 @end example @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node release @appendixsec release---Indicate that a Module is no longer in use @cindex release (subcommand) @itemize @bullet @item release [-d] directories@dots{} @item Requires: Working directory. @item Changes: Working directory, history log. @end itemize This command is meant to safely cancel the effect of @samp{cvs checkout}. Since @sc{cvs} doesn't lock files, it isn't strictly necessary to use this command. You can always simply delete your working directory, if you like; but you risk losing changes you may have forgotten, and you leave no trace in the @sc{cvs} history file (@pxref{history file}) that you've abandoned your checkout. Use @samp{cvs release} to avoid these problems. This command checks that no uncommitted changes are present; that you are executing it from immediately above a @sc{cvs} working directory; and that the repository recorded for your files is the same as the repository defined in the module database. If all these conditions are true, @samp{cvs release} leaves a record of its execution (attesting to your intentionally abandoning your checkout) in the @sc{cvs} history log. @menu * release options:: release options * release output:: release output * release examples:: release examples @end menu @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node release options @appendixsubsec release options The @code{release} command supports one command option: @table @code @item -d Delete your working copy of the file if the release succeeds. If this flag is not given your files will remain in your working directory. @strong{WARNING: The @code{release} command deletes all directories and files recursively. This has the very serious side-effect that any directory that you have created inside your checked-out sources, and not added to the repository (using the @code{add} command; @pxref{Adding files}) will be silently deleted---even if it is non-empty!} @end table @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node release output @appendixsubsec release output Before @code{release} releases your sources it will print a one-line message for any file that is not up-to-date. @table @code @item U @var{file} @itemx P @var{file} There exists a newer revision of this file in the repository, and you have not modified your local copy of the file (@samp{U} and @samp{P} mean the same thing). @item A @var{file} The file has been added to your private copy of the sources, but has not yet been committed to the repository. If you delete your copy of the sources this file will be lost. @item R @var{file} The file has been removed from your private copy of the sources, but has not yet been removed from the repository, since you have not yet committed the removal. @xref{commit}. @item M @var{file} The file is modified in your working directory. There might also be a newer revision inside the repository. @item ? @var{file} @var{file} is in your working directory, but does not correspond to anything in the source repository, and is not in the list of files for @sc{cvs} to ignore (see the description of the @samp{-I} option, and @pxref{cvsignore}). If you remove your working sources, this file will be lost. @end table @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node release examples @appendixsubsec release examples Release the @file{tc} directory, and delete your local working copy of the files. @example $ cd .. # @r{You must stand immediately above the} # @r{sources when you issue @samp{cvs release}.} $ cvs release -d tc You have [0] altered files in this repository. Are you sure you want to release (and delete) directory `tc': y $ @end example @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node update @appendixsec update---Bring work tree in sync with repository @cindex update (subcommand) @itemize @bullet @item update [-ACdflPpR] [-I name] [-j rev [-j rev]] [-k kflag] [-r tag|-D date] [-W spec] files@dots{} @item Requires: repository, working directory. @item Changes: working directory. @end itemize After you've run checkout to create your private copy of source from the common repository, other developers will continue changing the central source. From time to time, when it is convenient in your development process, you can use the @code{update} command from within your working directory to reconcile your work with any revisions applied to the source repository since your last checkout or update. Without the @code{-C} option, @code{update} will also merge any differences between the local copy of files and their base revisions into any destination revisions specified with @code{-r}, @code{-D}, or @code{-A}. @menu * update options:: update options * update output:: update output @end menu @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node update options @appendixsubsec update options These standard options are available with @code{update} (@pxref{Common options}, for a complete description of them): @table @code @item -D date Use the most recent revision no later than @var{date}. This option is sticky, and implies @samp{-P}. See @ref{Sticky tags}, for more information on sticky tags/dates. @item -f Only useful with the @samp{-D @var{date}} or @samp{-r @var{tag}} flags. If no matching revision is found, retrieve the most recent revision (instead of ignoring the file). @item -k @var{kflag} Process keywords according to @var{kflag}. See @ref{Keyword substitution}. This option is sticky; future updates of this file in this working directory will use the same @var{kflag}. The @code{status} command can be viewed to see the sticky options. See @ref{Invoking CVS}, for more information on the @code{status} command. @item -l Local; run only in current working directory. @xref{Recursive behavior}. @item -P Prune empty directories. See @ref{Moving directories}. @item -p Pipe files to the standard output. @item -R Update directories recursively (default). @xref{Recursive behavior}. @item -r rev Retrieve revision/tag @var{rev}. This option is sticky, and implies @samp{-P}. See @ref{Sticky tags}, for more information on sticky tags/dates. @end table @need 800 These special options are also available with @code{update}. @table @code @item -A Reset any sticky tags, dates, or @samp{-k} options. See @ref{Sticky tags}, for more information on sticky tags/dates. @item -C Overwrite locally modified files with clean copies from the repository (the modified file is saved in @file{.#@var{file}.@var{revision}}, however). @item -d Create any directories that exist in the repository if they're missing from the working directory. Normally, @code{update} acts only on directories and files that were already enrolled in your working directory. This is useful for updating directories that were created in the repository since the initial checkout; but it has an unfortunate side effect. If you deliberately avoided certain directories in the repository when you created your working directory (either through use of a module name or by listing explicitly the files and directories you wanted on the command line), then updating with @samp{-d} will create those directories, which may not be what you want. @item -I @var{name} Ignore files whose names match @var{name} (in your working directory) during the update. You can specify @samp{-I} more than once on the command line to specify several files to ignore. Use @samp{-I !} to avoid ignoring any files at all. @xref{cvsignore}, for other ways to make @sc{cvs} ignore some files. @item -W@var{spec} Specify file names that should be filtered during update. You can use this option repeatedly. @var{spec} can be a file name pattern of the same type that you can specify in the @file{.cvswrappers} file. @xref{Wrappers}. @item -j@var{revision} With two @samp{-j} options, merge changes from the revision specified with the first @samp{-j} option to the revision specified with the second @samp{j} option, into the working directory. With one @samp{-j} option, merge changes from the ancestor revision to the revision specified with the @samp{-j} option, into the working directory. The ancestor revision is the common ancestor of the revision which the working directory is based on, and the revision specified in the @samp{-j} option. Note that using a single @samp{-j @var{tagname}} option rather than @samp{-j @var{branchname}} to merge changes from a branch will often not remove files which were removed on the branch. @xref{Merging adds and removals}, for more. In addition, each @samp{-j} option can contain an optional date specification which, when used with branches, can limit the chosen revision to one within a specific date. An optional date is specified by adding a colon (:) to the tag: @samp{-j@var{Symbolic_Tag}:@var{Date_Specifier}}. @xref{Branching and merging}. @end table @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node update output @appendixsubsec update output @code{update} and @code{checkout} keep you informed of their progress by printing a line for each file, preceded by one character indicating the status of the file: @table @code @item U @var{file} The file was brought up to date with respect to the repository. This is done for any file that exists in the repository but not in your source, and for files that you haven't changed but are not the most recent versions available in the repository. @item P @var{file} Like @samp{U}, but the @sc{cvs} server sends a patch instead of an entire file. This accomplishes the same thing as @samp{U} using less bandwidth. @item A @var{file} The file has been added to your private copy of the sources, and will be added to the source repository when you run @code{commit} on the file. This is a reminder to you that the file needs to be committed. @item R @var{file} The file has been removed from your private copy of the sources, and will be removed from the source repository when you run @code{commit} on the file. This is a reminder to you that the file needs to be committed. @item M @var{file} The file is modified in your working directory. @samp{M} can indicate one of two states for a file you're working on: either there were no modifications to the same file in the repository, so that your file remains as you last saw it; or there were modifications in the repository as well as in your copy, but they were merged successfully, without conflict, in your working directory. @sc{cvs} will print some messages if it merges your work, and a backup copy of your working file (as it looked before you ran @code{update}) will be made. The exact name of that file is printed while @code{update} runs. @item C @var{file} @cindex .# files @cindex __ files (VMS) A conflict was detected while trying to merge your changes to @var{file} with changes from the source repository. @var{file} (the copy in your working directory) is now the result of attempting to merge the two revisions; an unmodified copy of your file is also in your working directory, with the name @file{.#@var{file}.@var{revision}} where @var{revision} is the revision that your modified file started from. Resolve the conflict as described in @ref{Conflicts example}. @c "some systems" as in out-of-the-box OSes? Not as @c far as I know. We need to advise sysadmins as well @c as users how to set up this kind of purge, if that is @c what they want. @c We also might want to think about cleaner solutions, @c like having CVS remove the .# file once the conflict @c has been resolved or something like that. (Note that some systems automatically purge files that begin with @file{.#} if they have not been accessed for a few days. If you intend to keep a copy of your original file, it is a very good idea to rename it.) Under @sc{vms}, the file name starts with @file{__} rather than @file{.#}. @item ? @var{file} @var{file} is in your working directory, but does not correspond to anything in the source repository, and is not in the list of files for @sc{cvs} to ignore (see the description of the @samp{-I} option, and @pxref{cvsignore}). @end table @node Invoking CVS @appendix Quick reference to CVS commands @cindex Command reference @cindex Reference, commands @cindex Invoking CVS This appendix describes how to invoke @sc{cvs}, with references to where each command or feature is described in detail. For other references run the @code{cvs --help} command, or see @ref{Index}. A @sc{cvs} command looks like: @example cvs [ @var{global_options} ] @var{command} [ @var{command_options} ] [ @var{command_args} ] @end example Global options: @table @code @item --allow-root=@var{rootdir} Specify legal @sc{cvsroot} directory (server only) (not in @sc{cvs} 1.9 and older). See @ref{Password authentication server}. @item -a Authenticate all communication (client only) (not in @sc{cvs} 1.9 and older). See @ref{Global options}. @item -b Specify RCS location (@sc{cvs} 1.9 and older). See @ref{Global options}. @item -d @var{root} Specify the @sc{cvsroot}. See @ref{Repository}. @item -e @var{editor} Edit messages with @var{editor}. See @ref{Committing your changes}. @item -f Do not read the @file{~/.cvsrc} file. See @ref{Global options}. @item -H @itemx --help Print a help message. See @ref{Global options}. @item -l Do not log in @file{$CVSROOT/CVSROOT/history} file. See @ref{Global options}. @item -n Do not change any files. See @ref{Global options}. @item -Q Be really quiet. See @ref{Global options}. @item -q Be somewhat quiet. See @ref{Global options}. @item -r Make new working files read-only. See @ref{Global options}. @item -s @var{variable}=@var{value} Set a user variable. See @ref{Variables}. @item -T @var{tempdir} Put temporary files in @var{tempdir}. See @ref{Global options}. @item -t Trace @sc{cvs} execution. See @ref{Global options}. @item -v @item --version Display version and copyright information for @sc{cvs}. @item -w Make new working files read-write. See @ref{Global options}. @item -x Encrypt all communication (client only). See @ref{Global options}. @item -z @var{gzip-level} @cindex Compression @cindex Gzip Set the compression level (client only). See @ref{Global options}. @end table Keyword expansion modes (@pxref{Substitution modes}): @example -kkv $@splitrcskeyword{}Id: file1,v 1.1 1993/12/09 03:21:13 joe Exp $ -kkvl $@splitrcskeyword{}Id: file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $ -kk $@splitrcskeyword{}Id$ -kv file1,v 1.1 1993/12/09 03:21:13 joe Exp -ko @i{no expansion} -kb @i{no expansion, file is binary} @end example Keywords (@pxref{Keyword list}): @example $@splitrcskeyword{}Author: joe $ $@splitrcskeyword{}Date: 1993/12/09 03:21:13 $ $@splitrcskeyword{}CVSHeader: files/file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $ $@splitrcskeyword{}Header: /home/files/file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $ $@splitrcskeyword{}Id: file1,v 1.1 1993/12/09 03:21:13 joe Exp harry $ $@splitrcskeyword{}Locker: harry $ $@splitrcskeyword{}Name: snapshot_1_14 $ $@splitrcskeyword{}RCSfile: file1,v $ $@splitrcskeyword{}Revision: 1.1 $ $@splitrcskeyword{}Source: /home/files/file1,v $ $@splitrcskeyword{}State: Exp $ $@splitrcskeyword{}Log: file1,v $ Revision 1.1 1993/12/09 03:30:17 joe Initial revision @end example @c The idea behind this table is that we want each item @c to be a sentence or two at most. Preferably a @c single line. @c @c In some cases refs to "foo options" are just to get @c this thing written quickly, not because the "foo @c options" node is really the best place to point. Commands, command options, and command arguments: @table @code @c ------------------------------------------------------------ @item add [@var{options}] [@var{files}@dots{}] Add a new file/directory. See @ref{Adding files}. @table @code @item -k @var{kflag} Set keyword expansion. @item -m @var{msg} Set file description. @end table @c ------------------------------------------------------------ @item admin [@var{options}] [@var{files}@dots{}] Administration of history files in the repository. See @ref{admin}. @c This list omits those options which are not @c documented as being useful with CVS. That might be @c a mistake... @table @code @item -b[@var{rev}] Set default branch. See @ref{Reverting local changes}. @item -c@var{string} Set comment leader. @item -k@var{subst} Set keyword substitution. See @ref{Keyword substitution}. @item -l[@var{rev}] Lock revision @var{rev}, or latest revision. @item -m@var{rev}:@var{msg} Replace the log message of revision @var{rev} with @var{msg}. @item -o@var{range} Delete revisions from the repository. See @ref{admin options}. @item -q Run quietly; do not print diagnostics. @item -s@var{state}[:@var{rev}] Set the state. @c Does not work for client/server CVS @item -t Set file description from standard input. @item -t@var{file} Set file description from @var{file}. @item -t-@var{string} Set file description to @var{string}. @item -u[@var{rev}] Unlock revision @var{rev}, or latest revision. @end table @c ------------------------------------------------------------ @item annotate [@var{options}] [@var{files}@dots{}] Show last revision where each line was modified. See @ref{annotate}. @table @code @item -D @var{date} Annotate the most recent revision no later than @var{date}. See @ref{Common options}. @item -F Force annotation of binary files. (Without this option, binary files are skipped with a message.) @item -f Use head revision if tag/date not found. See @ref{Common options}. @item -l Local; run only in current working directory. @xref{Recursive behavior}. @item -R Operate recursively (default). @xref{Recursive behavior}. @item -r @var{tag} Annotate revision @var{tag}. See @ref{Common options}. @end table @c ------------------------------------------------------------ @item checkout [@var{options}] @var{modules}@dots{} Get a copy of the sources. See @ref{checkout}. @table @code @item -A Reset any sticky tags/date/options. See @ref{Sticky tags} and @ref{Keyword substitution}. @item -c Output the module database. See @ref{checkout options}. @item -D @var{date} Check out revisions as of @var{date} (is sticky). See @ref{Common options}. @item -d @var{dir} Check out into @var{dir}. See @ref{checkout options}. @item -f Use head revision if tag/date not found. See @ref{Common options}. @c Probably want to use rev1/rev2 style like for diff @c -r. Here and in on-line help. @item -j @var{rev} Merge in changes. See @ref{checkout options}. @item -k @var{kflag} Use @var{kflag} keyword expansion. See @ref{Substitution modes}. @item -l Local; run only in current working directory. @xref{Recursive behavior}. @item -N Don't ``shorten'' module paths if -d specified. See @ref{checkout options}. @item -n Do not run module program (if any). See @ref{checkout options}. @item -P Prune empty directories. See @ref{Moving directories}. @item -p Check out files to standard output (avoids stickiness). See @ref{checkout options}. @item -R Operate recursively (default). @xref{Recursive behavior}. @item -r @var{tag} Checkout revision @var{tag} (is sticky). See @ref{Common options}. @item -s Like -c, but include module status. See @ref{checkout options}. @end table @c ------------------------------------------------------------ @item commit [@var{options}] [@var{files}@dots{}] Check changes into the repository. See @ref{commit}. @table @code @item -F @var{file} Read log message from @var{file}. See @ref{commit options}. @item -f @c What is this "disables recursion"? It is from the @c on-line help; is it documented in this manual? Force the file to be committed; disables recursion. See @ref{commit options}. @item -l Local; run only in current working directory. See @ref{Recursive behavior}. @item -m @var{msg} Use @var{msg} as log message. See @ref{commit options}. @item -n Do not run module program (if any). See @ref{commit options}. @item -R Operate recursively (default). @xref{Recursive behavior}. @item -r @var{rev} Commit to @var{rev}. See @ref{commit options}. @c FIXME: should be dragging over text from @c commit options, especially if it can be cleaned up @c and made concise enough. @end table @c ------------------------------------------------------------ @item diff [@var{options}] [@var{files}@dots{}] Show differences between revisions. See @ref{diff}. In addition to the options shown below, accepts a wide variety of options to control output style, for example @samp{-c} for context diffs. @table @code @item -D @var{date1} Diff revision for date against working file. See @ref{diff options}. @item -D @var{date2} Diff @var{rev1}/@var{date1} against @var{date2}. See @ref{diff options}. @item -l Local; run only in current working directory. See @ref{Recursive behavior}. @item -N Include diffs for added and removed files. See @ref{diff options}. @item -R Operate recursively (default). @xref{Recursive behavior}. @item -r @var{rev1} Diff revision for @var{rev1} against working file. See @ref{diff options}. @item -r @var{rev2} Diff @var{rev1}/@var{date1} against @var{rev2}. See @ref{diff options}. @end table @c ------------------------------------------------------------ @item edit [@var{options}] [@var{files}@dots{}] Get ready to edit a watched file. See @ref{Editing files}. @table @code @item -a @var{actions} Specify actions for temporary watch, where @var{actions} is @code{edit}, @code{unedit}, @code{commit}, @code{all}, or @code{none}. See @ref{Editing files}. @item -l Local; run only in current working directory. See @ref{Recursive behavior}. @item -R Operate recursively (default). @xref{Recursive behavior}. @end table @c ------------------------------------------------------------ @item editors [@var{options}] [@var{files}@dots{}] See who is editing a watched file. See @ref{Watch information}. @table @code @item -l Local; run only in current working directory. See @ref{Recursive behavior}. @item -R Operate recursively (default). @xref{Recursive behavior}. @end table @c ------------------------------------------------------------ @item export [@var{options}] @var{modules}@dots{} Export files from @sc{cvs}. See @ref{export}. @table @code @item -D @var{date} Check out revisions as of @var{date}. See @ref{Common options}. @item -d @var{dir} Check out into @var{dir}. See @ref{export options}. @item -f Use head revision if tag/date not found. See @ref{Common options}. @item -k @var{kflag} Use @var{kflag} keyword expansion. See @ref{Substitution modes}. @item -l Local; run only in current working directory. @xref{Recursive behavior}. @item -N Don't ``shorten'' module paths if -d specified. See @ref{export options}. @item -n Do not run module program (if any). See @ref{export options}. @item -R Operate recursively (default). @xref{Recursive behavior}. @item -r @var{tag} Checkout revision @var{tag}. See @ref{Common options}. @end table @c ------------------------------------------------------------ @item history [@var{options}] [@var{files}@dots{}] Show repository access history. See @ref{history}. @table @code @item -a All users (default is self). See @ref{history options}. @item -b @var{str} Back to record with @var{str} in module/file/repos field. See @ref{history options}. @item -c Report on committed (modified) files. See @ref{history options}. @item -D @var{date} Since @var{date}. See @ref{history options}. @item -e Report on all record types. See @ref{history options}. @item -l Last modified (committed or modified report). See @ref{history options}. @item -m @var{module} Report on @var{module} (repeatable). See @ref{history options}. @item -n @var{module} In @var{module}. See @ref{history options}. @item -o Report on checked out modules. See @ref{history options}. @item -p @var{repository} In @var{repository}. See @ref{history options}. @item -r @var{rev} Since revision @var{rev}. See @ref{history options}. @item -T @c What the @#$@# is a TAG? Same as a tag? This @c wording is also in the online-line help. Produce report on all TAGs. See @ref{history options}. @item -t @var{tag} Since tag record placed in history file (by anyone). See @ref{history options}. @item -u @var{user} For user @var{user} (repeatable). See @ref{history options}. @item -w Working directory must match. See @ref{history options}. @item -x @var{types} Report on @var{types}, one or more of @code{TOEFWUCGMAR}. See @ref{history options}. @item -z @var{zone} Output for time zone @var{zone}. See @ref{history options}. @end table @c ------------------------------------------------------------ @item import [@var{options}] @var{repository} @var{vendor-tag} @var{release-tags}@dots{} Import files into @sc{cvs}, using vendor branches. See @ref{import}. @table @code @item -b @var{bra} Import to vendor branch @var{bra}. See @ref{Multiple vendor branches}. @item -d Use the file's modification time as the time of import. See @ref{import options}. @item -k @var{kflag} Set default keyword substitution mode. See @ref{import options}. @item -m @var{msg} Use @var{msg} for log message. See @ref{import options}. @item -I @var{ign} More files to ignore (! to reset). See @ref{import options}. @item -W @var{spec} More wrappers. See @ref{import options}. @end table @c ------------------------------------------------------------ @item init Create a @sc{cvs} repository if it doesn't exist. See @ref{Creating a repository}. @c ------------------------------------------------------------ @item kserver Kerberos authenticated server. See @ref{Kerberos authenticated}. @c ------------------------------------------------------------ @item log [@var{options}] [@var{files}@dots{}] Print out history information for files. See @ref{log}. @table @code @item -b Only list revisions on the default branch. See @ref{log options}. @item -d @var{dates} Specify dates (@var{d1}<@var{d2} for range, @var{d} for latest before). See @ref{log options}. @item -h Only print header. See @ref{log options}. @item -l Local; run only in current working directory. See @ref{Recursive behavior}. @item -N Do not list tags. See @ref{log options}. @item -R Only print name of RCS file. See @ref{log options}. @item -r@var{revs} Only list revisions @var{revs}. See @ref{log options}. @item -s @var{states} Only list revisions with specified states. See @ref{log options}. @item -t Only print header and descriptive text. See @ref{log options}. @item -w@var{logins} Only list revisions checked in by specified logins. See @ref{log options}. @end table @c ------------------------------------------------------------ @item login Prompt for password for authenticating server. See @ref{Password authentication client}. @c ------------------------------------------------------------ @item logout Remove stored password for authenticating server. See @ref{Password authentication client}. @c ------------------------------------------------------------ @item pserver Password authenticated server. See @ref{Password authentication server}. @c ------------------------------------------------------------ @item rannotate [@var{options}] [@var{modules}@dots{}] Show last revision where each line was modified. See @ref{annotate}. @table @code @item -D @var{date} Annotate the most recent revision no later than @var{date}. See @ref{Common options}. @item -F Force annotation of binary files. (Without this option, binary files are skipped with a message.) @item -f Use head revision if tag/date not found. See @ref{Common options}. @item -l Local; run only in current working directory. @xref{Recursive behavior}. @item -R Operate recursively (default). @xref{Recursive behavior}. @item -r @var{tag} Annotate revision @var{tag}. See @ref{Common options}. @end table @c ------------------------------------------------------------ @item rdiff [@var{options}] @var{modules}@dots{} Show differences between releases. See @ref{rdiff}. @table @code @item -c Context diff output format (default). See @ref{rdiff options}. @item -D @var{date} Select revisions based on @var{date}. See @ref{Common options}. @item -f Use head revision if tag/date not found. See @ref{Common options}. @item -l Local; run only in current working directory. See @ref{Recursive behavior}. @item -R Operate recursively (default). @xref{Recursive behavior}. @item -r @var{rev} Select revisions based on @var{rev}. See @ref{Common options}. @item -s Short patch - one liner per file. See @ref{rdiff options}. @item -t Top two diffs - last change made to the file. See @ref{diff options}. @item -u Unidiff output format. See @ref{rdiff options}. @item -V @var{vers} Use RCS Version @var{vers} for keyword expansion (obsolete). See @ref{rdiff options}. @end table @c ------------------------------------------------------------ @item release [@var{options}] @var{directory} Indicate that a directory is no longer in use. See @ref{release}. @table @code @item -d Delete the given directory. See @ref{release options}. @end table @c ------------------------------------------------------------ @item remove [@var{options}] [@var{files}@dots{}] Remove an entry from the repository. See @ref{Removing files}. @table @code @item -f Delete the file before removing it. See @ref{Removing files}. @item -l Local; run only in current working directory. See @ref{Recursive behavior}. @item -R Operate recursively (default). @xref{Recursive behavior}. @end table @c ------------------------------------------------------------ @item rlog [@var{options}] [@var{files}@dots{}] Print out history information for modules. See @ref{log}. @table @code @item -b Only list revisions on the default branch. See @ref{log options}. @item -d @var{dates} Specify dates (@var{d1}<@var{d2} for range, @var{d} for latest before). See @ref{log options}. @item -h Only print header. See @ref{log options}. @item -l Local; run only in current working directory. See @ref{Recursive behavior}. @item -N Do not list tags. See @ref{log options}. @item -R Only print name of RCS file. See @ref{log options}. @item -r@var{revs} Only list revisions @var{revs}. See @ref{log options}. @item -s @var{states} Only list revisions with specified states. See @ref{log options}. @item -t Only print header and descriptive text. See @ref{log options}. @item -w@var{logins} Only list revisions checked in by specified logins. See @ref{log options}. @end table @c ------------------------------------------------------------ @item rtag [@var{options}] @var{tag} @var{modules}@dots{} Add a symbolic tag to a module. See @ref{Revisions} and @ref{Branching and merging}. @table @code @item -a Clear tag from removed files that would not otherwise be tagged. See @ref{Tagging add/remove}. @item -b Create a branch named @var{tag}. See @ref{Branching and merging}. @item -B Used in conjunction with -F or -d, enables movement and deletion of branch tags. Use with extreme caution. @item -D @var{date} Tag revisions as of @var{date}. See @ref{Tagging by date/tag}. @item -d Delete @var{tag}. See @ref{Modifying tags}. @item -F Move @var{tag} if it already exists. See @ref{Modifying tags}. @item -f Force a head revision match if tag/date not found. See @ref{Tagging by date/tag}. @item -l Local; run only in current working directory. See @ref{Recursive behavior}. @item -n No execution of tag program. See @ref{Common options}. @item -R Operate recursively (default). @xref{Recursive behavior}. @item -r @var{rev} Tag existing tag @var{rev}. See @ref{Tagging by date/tag}. @end table @c ------------------------------------------------------------ @item server Rsh server. See @ref{Connecting via rsh}. @c ------------------------------------------------------------ @item status [@var{options}] @var{files}@dots{} Display status information in a working directory. See @ref{File status}. @table @code @item -l Local; run only in current working directory. See @ref{Recursive behavior}. @item -R Operate recursively (default). @xref{Recursive behavior}. @item -v Include tag information for file. See @ref{Tags}. @end table @c ------------------------------------------------------------ @item tag [@var{options}] @var{tag} [@var{files}@dots{}] Add a symbolic tag to checked out version of files. See @ref{Revisions} and @ref{Branching and merging}. @table @code @item -b Create a branch named @var{tag}. See @ref{Branching and merging}. @item -c Check that working files are unmodified. See @ref{Tagging the working directory}. @item -D @var{date} Tag revisions as of @var{date}. See @ref{Tagging by date/tag}. @item -d Delete @var{tag}. See @ref{Modifying tags}. @item -F Move @var{tag} if it already exists. See @ref{Modifying tags}. @item -f Force a head revision match if tag/date not found. See @ref{Tagging by date/tag}. @item -l Local; run only in current working directory. See @ref{Recursive behavior}. @item -R Operate recursively (default). @xref{Recursive behavior}. @item -r @var{rev} Tag existing tag @var{rev}. See @ref{Tagging by date/tag}. @end table @c ------------------------------------------------------------ @item unedit [@var{options}] [@var{files}@dots{}] Undo an edit command. See @ref{Editing files}. @table @code @item -l Local; run only in current working directory. See @ref{Recursive behavior}. @item -R Operate recursively (default). @xref{Recursive behavior}. @end table @c ------------------------------------------------------------ @item update [@var{options}] [@var{files}@dots{}] Bring work tree in sync with repository. See @ref{update}. @table @code @item -A Reset any sticky tags/date/options. See @ref{Sticky tags} and @ref{Keyword substitution}. @item -C Overwrite locally modified files with clean copies from the repository (the modified file is saved in @file{.#@var{file}.@var{revision}}, however). @item -D @var{date} Check out revisions as of @var{date} (is sticky). See @ref{Common options}. @item -d Create directories. See @ref{update options}. @item -f Use head revision if tag/date not found. See @ref{Common options}. @item -I @var{ign} More files to ignore (! to reset). See @ref{import options}. @c Probably want to use rev1/rev2 style like for diff @c -r. Here and in on-line help. @item -j @var{rev} Merge in changes. See @ref{update options}. @item -k @var{kflag} Use @var{kflag} keyword expansion. See @ref{Substitution modes}. @item -l Local; run only in current working directory. @xref{Recursive behavior}. @item -P Prune empty directories. See @ref{Moving directories}. @item -p Check out files to standard output (avoids stickiness). See @ref{update options}. @item -R Operate recursively (default). @xref{Recursive behavior}. @item -r @var{tag} Checkout revision @var{tag} (is sticky). See @ref{Common options}. @item -W @var{spec} More wrappers. See @ref{import options}. @end table @c ------------------------------------------------------------ @item version @cindex version (subcommand) Display the version of @sc{cvs} being used. If the repository is remote, display both the client and server versions. @c ------------------------------------------------------------ @item watch [on|off|add|remove] [@var{options}] [@var{files}@dots{}] on/off: turn on/off read-only checkouts of files. See @ref{Setting a watch}. add/remove: add or remove notification on actions. See @ref{Getting Notified}. @table @code @item -a @var{actions} Specify actions for temporary watch, where @var{actions} is @code{edit}, @code{unedit}, @code{commit}, @code{all}, or @code{none}. See @ref{Editing files}. @item -l Local; run only in current working directory. See @ref{Recursive behavior}. @item -R Operate recursively (default). @xref{Recursive behavior}. @end table @c ------------------------------------------------------------ @item watchers [@var{options}] [@var{files}@dots{}] See who is watching a file. See @ref{Watch information}. @table @code @item -l Local; run only in current working directory. See @ref{Recursive behavior}. @item -R Operate recursively (default). @xref{Recursive behavior}. @end table @end table @c --------------------------------------------------------------------- @node Administrative files @appendix Reference manual for Administrative files @cindex Administrative files (reference) @cindex Files, reference manual @cindex Reference manual (files) @cindex CVSROOT (file) @c FIXME? Somewhere there needs to be a more "how-to" @c guide to writing these. I think the triggers @c (commitinfo, loginfo, taginfo, &c) are perhaps a @c different case than files like modules. One @c particular issue that people sometimes are @c (unnecessarily?) worried about is performance, and @c the impact of writing in perl or sh or ____. Inside the repository, in the directory @file{$CVSROOT/CVSROOT}, there are a number of supportive files for @sc{cvs}. You can use @sc{cvs} in a limited fashion without any of them, but if they are set up properly they can help make life easier. For a discussion of how to edit them, see @ref{Intro administrative files}. The most important of these files is the @file{modules} file, which defines the modules inside the repository. @menu * modules:: Defining modules * Wrappers:: Specify binary-ness based on file name * commit files:: The commit support files (commitinfo, verifymsg, editinfo, loginfo) * rcsinfo:: Templates for the log messages * cvsignore:: Ignoring files via cvsignore * checkoutlist:: Adding your own administrative files * history file:: History information * Variables:: Various variables are expanded * config:: Miscellaneous CVS configuration @end menu @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node modules @appendixsec The modules file @cindex Modules (admin file) @cindex Defining modules (reference manual) The @file{modules} file records your definitions of names for collections of source code. @sc{cvs} will use these definitions if you use @sc{cvs} to update the modules file (use normal commands like @code{add}, @code{commit}, etc). The @file{modules} file may contain blank lines and comments (lines beginning with @samp{#}) as well as module definitions. Long lines can be continued on the next line by specifying a backslash (@samp{\}) as the last character on the line. There are three basic types of modules: alias modules, regular modules, and ampersand modules. The difference between them is the way that they map files in the repository to files in the working directory. In all of the following examples, the top-level repository contains a directory called @file{first-dir}, which contains two files, @file{file1} and @file{file2}, and a directory @file{sdir}. @file{first-dir/sdir} contains a file @file{sfile}. @c FIXME: should test all the examples in this section. @menu * Alias modules:: The simplest kind of module * Regular modules:: * Ampersand modules:: * Excluding directories:: Excluding directories from a module * Module options:: Regular and ampersand modules can take options * Module program options:: How the modules ``program options'' programs are run. @end menu @node Alias modules @appendixsubsec Alias modules @cindex Alias modules @cindex -a, in modules file Alias modules are the simplest kind of module: @table @code @item @var{mname} -a @var{aliases}@dots{} This represents the simplest way of defining a module @var{mname}. The @samp{-a} flags the definition as a simple alias: @sc{cvs} will treat any use of @var{mname} (as a command argument) as if the list of names @var{aliases} had been specified instead. @var{aliases} may contain either other module names or paths. When you use paths in aliases, @code{checkout} creates all intermediate directories in the working directory, just as if the path had been specified explicitly in the @sc{cvs} arguments. @end table For example, if the modules file contains: @example amodule -a first-dir @end example @noindent then the following two commands are equivalent: @example $ cvs co amodule $ cvs co first-dir @end example @noindent and they each would provide output such as: @example cvs checkout: Updating first-dir U first-dir/file1 U first-dir/file2 cvs checkout: Updating first-dir/sdir U first-dir/sdir/sfile @end example @node Regular modules @appendixsubsec Regular modules @cindex Regular modules @table @code @item @var{mname} [ options ] @var{dir} [ @var{files}@dots{} ] In the simplest case, this form of module definition reduces to @samp{@var{mname} @var{dir}}. This defines all the files in directory @var{dir} as module mname. @var{dir} is a relative path (from @code{$CVSROOT}) to a directory of source in the source repository. In this case, on checkout, a single directory called @var{mname} is created as a working directory; no intermediate directory levels are used by default, even if @var{dir} was a path involving several directory levels. @end table For example, if a module is defined by: @example regmodule first-dir @end example @noindent then regmodule will contain the files from first-dir: @example $ cvs co regmodule cvs checkout: Updating regmodule U regmodule/file1 U regmodule/file2 cvs checkout: Updating regmodule/sdir U regmodule/sdir/sfile $ @end example By explicitly specifying files in the module definition after @var{dir}, you can select particular files from directory @var{dir}. Here is an example: @example regfiles first-dir/sdir sfile @end example @noindent With this definition, getting the regfiles module will create a single working directory @file{regfiles} containing the file listed, which comes from a directory deeper in the @sc{cvs} source repository: @example $ cvs co regfiles U regfiles/sfile $ @end example @node Ampersand modules @appendixsubsec Ampersand modules @cindex Ampersand modules @cindex &, in modules file A module definition can refer to other modules by including @samp{&@var{module}} in its definition. @example @var{mname} [ options ] @var{&module}@dots{} @end example Then getting the module creates a subdirectory for each such module, in the directory containing the module. For example, if modules contains @example ampermod &first-dir @end example @noindent then a checkout will create an @code{ampermod} directory which contains a directory called @code{first-dir}, which in turns contains all the directories and files which live there. For example, the command @example $ cvs co ampermod @end example @noindent will create the following files: @example ampermod/first-dir/file1 ampermod/first-dir/file2 ampermod/first-dir/sdir/sfile @end example There is one quirk/bug: the messages that @sc{cvs} prints omit the @file{ampermod}, and thus do not correctly display the location to which it is checking out the files: @example $ cvs co ampermod cvs checkout: Updating first-dir U first-dir/file1 U first-dir/file2 cvs checkout: Updating first-dir/sdir U first-dir/sdir/sfile $ @end example Do not rely on this buggy behavior; it may get fixed in a future release of @sc{cvs}. @c FIXCVS: What happens if regular and & modules are @c combined, as in "ampermodule first-dir &second-dir"? @c When I tried it, it seemed to just ignore the @c "first-dir". I think perhaps it should be an error @c (but this needs further investigation). @c In addition to discussing what each one does, we @c should put in a few words about why you would use one or @c the other in various situations. @node Excluding directories @appendixsubsec Excluding directories @cindex Excluding directories, in modules file @cindex !, in modules file An alias module may exclude particular directories from other modules by using an exclamation mark (@samp{!}) before the name of each directory to be excluded. For example, if the modules file contains: @example exmodule -a !first-dir/sdir first-dir @end example @noindent then checking out the module @samp{exmodule} will check out everything in @samp{first-dir} except any files in the subdirectory @samp{first-dir/sdir}. @c Note that the "!first-dir/sdir" sometimes must be listed @c before "first-dir". That seems like a probable bug, in which @c case perhaps it should be fixed (to allow either @c order) rather than documented. See modules4 in testsuite. @node Module options @appendixsubsec Module options @cindex Options, in modules file Either regular modules or ampersand modules can contain options, which supply additional information concerning the module. @table @code @cindex -d, in modules file @item -d @var{name} Name the working directory something other than the module name. @c FIXME: Needs a bunch of examples, analogous to the @c examples for alias, regular, and ampersand modules @c which show where the files go without -d. @cindex Export program @cindex -e, in modules file @item -e @var{prog} Specify a program @var{prog} to run whenever files in a module are exported. @var{prog} runs with a single argument, the module name. @c FIXME: Is it run on server? client? @cindex Checkout program @cindex -o, in modules file @item -o @var{prog} Specify a program @var{prog} to run whenever files in a module are checked out. @var{prog} runs with a single argument, the module name. See @ref{Module program options} for information on how @var{prog} is called. @c FIXME: Is it run on server? client? @cindex Status of a module @cindex Module status @cindex -s, in modules file @item -s @var{status} Assign a status to the module. When the module file is printed with @samp{cvs checkout -s} the modules are sorted according to primarily module status, and secondarily according to the module name. This option has no other meaning. You can use this option for several things besides status: for instance, list the person that is responsible for this module. @cindex Tag program @cindex -t, in modules file @item -t @var{prog} Specify a program @var{prog} to run whenever files in a module are tagged with @code{rtag}. @var{prog} runs with two arguments: the module name and the symbolic tag specified to @code{rtag}. It is not run when @code{tag} is executed. Generally you will find that taginfo is a better solution (@pxref{user-defined logging}). @c FIXME: Is it run on server? client? @c Problems with -t include: @c * It is run after the tag not before @c * It doesn't get passed all the information that @c taginfo does ("mov", &c). @c * It only is run for rtag, not tag. @end table You should also see @pxref{Module program options} about how the ``program options'' programs are run. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Module program options @appendixsubsec How the modules file ``program options'' programs are run @cindex Modules file program options @cindex -t, in modules file @cindex -o, in modules file @cindex -e, in modules file @noindent For checkout, rtag, and export, the program is server-based, and as such the following applies:- If using remote access methods (pserver, ext, etc.), @sc{cvs} will execute this program on the server from a temporary directory. The path is searched for this program. If using ``local access'' (on a local or remote NFS file system, i.e. repository set just to a path), the program will be executed from the newly checked-out tree, if found there, or alternatively searched for in the path if not. The programs are all run after the operation has effectively completed. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node Wrappers @appendixsec The cvswrappers file @cindex cvswrappers (admin file) @cindex CVSWRAPPERS, environment variable @cindex Wrappers @c FIXME: need some better way of separating this out @c by functionality. -m is @c one feature, and -k is a another. And this discussion @c should be better motivated (e.g. start with the @c problems, then explain how the feature solves it). Wrappers refers to a @sc{cvs} feature which lets you control certain settings based on the name of the file which is being operated on. The settings are @samp{-k} for binary files, and @samp{-m} for nonmergeable text files. The @samp{-m} option specifies the merge methodology that should be used when a non-binary file is updated. @code{MERGE} means the usual @sc{cvs} behavior: try to merge the files. @code{COPY} means that @code{cvs update} will refuse to merge files, as it also does for files specified as binary with @samp{-kb} (but if the file is specified as binary, there is no need to specify @samp{-m 'COPY'}). @sc{cvs} will provide the user with the two versions of the files, and require the user using mechanisms outside @sc{cvs}, to insert any necessary changes. @strong{WARNING: do not use @code{COPY} with @sc{cvs} 1.9 or earlier - such versions of @sc{cvs} will copy one version of your file over the other, wiping out the previous contents.} @c Ordinarily we don't document the behavior of old @c versions. But this one is so dangerous, I think we @c must. I almost renamed it to -m 'NOMERGE' so we @c could say "never use -m 'COPY'". The @samp{-m} wrapper option only affects behavior when merging is done on update; it does not affect how files are stored. See @ref{Binary files}, for more on binary files. The basic format of the file @file{cvswrappers} is: @c FIXME: @example is all wrong for this. Use @deffn or @c something more sensible. @example wildcard [option value][option value]... where option is one of -m update methodology value: MERGE or COPY -k keyword expansion value: expansion mode and value is a single-quote delimited value. @end example @ignore @example *.nib -f 'unwrap %s' -t 'wrap %s %s' -m 'COPY' *.c -t 'indent %s %s' @end example @c When does the filter need to be an absolute pathname @c and when will something like the above work? I @c suspect it relates to the PATH of the server (which @c in turn depends on all kinds of stuff, e.g. inetd @c for pserver). I'm not sure whether/where to discuss @c this. @c FIXME: What do the %s's stand for? @noindent The above example of a @file{cvswrappers} file states that all files/directories that end with a @code{.nib} should be filtered with the @file{wrap} program before checking the file into the repository. The file should be filtered though the @file{unwrap} program when the file is checked out of the repository. The @file{cvswrappers} file also states that a @code{COPY} methodology should be used when updating the files in the repository (that is, no merging should be performed). @c What pitfalls arise when using indent this way? Is @c it a winning thing to do? Would be nice to at least @c hint at those issues; we want our examples to tell @c how to solve problems, not just to say that cvs can @c do certain things. The last example line says that all files that end with @code{.c} should be filtered with @file{indent} before being checked into the repository. Unlike the previous example, no filtering of the @code{.c} file is done when it is checked out of the repository. @noindent The @code{-t} filter is called with two arguments, the first is the name of the file/directory to filter and the second is the pathname to where the resulting filtered file should be placed. @noindent The @code{-f} filter is called with one argument, which is the name of the file to filter from. The end result of this filter will be a file in the users directory that they can work on as they normally would. Note that the @samp{-t}/@samp{-f} features do not conveniently handle one portion of @sc{cvs}'s operation: determining when files are modified. @sc{cvs} will still want a file (or directory) to exist, and it will use its modification time to determine whether a file is modified. If @sc{cvs} erroneously thinks a file is unmodified (for example, a directory is unchanged but one of the files within it is changed), you can force it to check in the file anyway by specifying the @samp{-f} option to @code{cvs commit} (@pxref{commit options}). @c This is, of course, a serious design flaw in -t/-f. @c Probably the whole functionality needs to be @c redesigned (starting from requirements) to fix this. @end ignore @c FIXME: We don't document -W or point to where it is @c documented. Or .cvswrappers. For example, the following command imports a directory, treating files whose name ends in @samp{.exe} as binary: @example cvs import -I ! -W "*.exe -k 'b'" first-dir vendortag reltag @end example @c Another good example, would be storing files @c (e.g. binary files) compressed in the repository. @c :::::::::::::::::: @c cvswrappers @c :::::::::::::::::: @c *.t12 -m 'COPY' @c *.t[0-9][0-9] -f 'gunzipcp %s' -t 'gzipcp %s %s' -m 'COPY' @c @c :::::::::::::::::: @c gunzipcp @c :::::::::::::::::: @c : @c [ -f $1 ] || exit 1 @c zcat $1 > /tmp/.#$1.$$ @c mv /tmp/.#$1.$$ $1 @c @c :::::::::::::::::: @c gzipcp @c :::::::::::::::::: @c : @c DIRNAME=`echo $1 | sed -e "s|/.*/||g"` @c if [ ! -d $DIRNAME ] ; then @c DIRNAME=`echo $1 | sed -e "s|.*/||g"` @c fi @c gzip -c $DIRNAME > $2 @c One catch--"cvs diff" will not invoke the wrappers @c (probably a CVS bug, although I haven't thought it out). @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node commit files @appendixsec The commit support files @cindex Committing, administrative support files The @samp{-i} flag in the @file{modules} file can be used to run a certain program whenever files are committed (@pxref{modules}). The files described in this section provide other, more flexible, ways to run programs whenever something is committed. There are three kind of programs that can be run on commit. They are specified in files in the repository, as described below. The following table summarizes the file names and the purpose of the corresponding programs. @table @file @item commitinfo The program is responsible for checking that the commit is allowed. If it exits with a non-zero exit status the commit will be aborted. @item verifymsg The specified program is used to evaluate the log message, and possibly verify that it contains all required fields. This is most useful in combination with the @file{rcsinfo} file, which can hold a log message template (@pxref{rcsinfo}). @item editinfo The specified program is used to edit the log message, and possibly verify that it contains all required fields. This is most useful in combination with the @file{rcsinfo} file, which can hold a log message template (@pxref{rcsinfo}). (obsolete) @item loginfo The specified program is called when the commit is complete. It receives the log message and some additional information and can store the log message in a file, or mail it to appropriate persons, or maybe post it to a local newsgroup, or@dots{} Your imagination is the limit! @end table @menu * syntax:: The common syntax * commitinfo:: Pre-commit checking * verifymsg:: How are log messages evaluated? * editinfo:: Specifying how log messages are created (obsolete) * loginfo:: Where should log messages be sent? @end menu @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node syntax @appendixsubsec The common syntax @cindex Info files (syntax) @cindex Syntax of info files @cindex Common syntax of info files @c FIXME: having this so totally separate from the @c Variables node is rather bogus. The administrative files such as @file{commitinfo}, @file{loginfo}, @file{rcsinfo}, @file{verifymsg}, etc., all have a common format. The purpose of the files are described later on. The common syntax is described here. @cindex Regular expression syntax Each line contains the following: @itemize @bullet @item @c Say anything about DEFAULT and ALL? Right now we @c leave that to the description of each file (and in fact @c the practice is inconsistent which is really annoying). A regular expression. This is a basic regular expression in the syntax used by GNU emacs. @c FIXME: What we probably should be saying is "POSIX Basic @c Regular Expression with the following extensions (`\(' @c `\|' '+' etc)" @c rather than define it with reference to emacs. @c The reference to emacs is not strictly speaking @c true, as we don't support \=, \s, or \S. Also it isn't @c clear we should document and/or promise to continue to @c support all the obscure emacs extensions like \<. @c Also need to better cite (or include) full @c documentation for the syntax. @c Also see comment in configure.in about what happens to the @c syntax if we pick up a system-supplied regexp matcher. @item A whitespace separator---one or more spaces and/or tabs. @item A file name or command-line template. @end itemize @noindent Blank lines are ignored. Lines that start with the character @samp{#} are treated as comments. Long lines unfortunately can @emph{not} be broken in two parts in any way. The first regular expression that matches the current directory name in the repository is used. The rest of the line is used as a file name or command-line as appropriate. @c FIXME: need an example. In particular, show what @c the regular expression is matched against (one @c ordinarily clueful person got confused about whether it @c includes the filename--"directory name" above should be @c unambiguous but there is nothing like an example to @c confirm people's understanding of this sort of thing). @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node commitinfo @appendixsubsec Commitinfo @cindex @file{commitinfo} @cindex Commits, precommit verification of @cindex Precommit checking The @file{commitinfo} file defines programs to execute whenever @samp{cvs commit} is about to execute. These programs are used for pre-commit checking to verify that the modified, added and removed files are really ready to be committed. This could be used, for instance, to verify that the changed files conform to to your site's standards for coding practice. As mentioned earlier, each line in the @file{commitinfo} file consists of a regular expression and a command-line template. The template can include a program name and any number of arguments you wish to supply to it. The full path to the current source repository is appended to the template, followed by the file names of any files involved in the commit (added, removed, and modified files). @cindex Exit status, of commitinfo The first line with a regular expression matching the directory within the repository will be used. If the command returns a non-zero exit status the commit will be aborted. @c FIXME: need example(s) of what "directory within the @c repository" means. @cindex DEFAULT in commitinfo If the repository name does not match any of the regular expressions in this file, the @samp{DEFAULT} line is used, if it is specified. @cindex ALL in commitinfo All occurrences of the name @samp{ALL} appearing as a regular expression are used in addition to the first matching regular expression or the name @samp{DEFAULT}. @cindex @file{commitinfo}, working directory @cindex @file{commitinfo}, command environment The command will be run in the root of the workspace containing the new versions of any files the user would like to modify (commit), @emph{or in a copy of the workspace on the server (@pxref{Remote repositories})}. If a file is being removed, there will be no copy of the file under the current directory. If a file is being added, there will be no corresponding archive file in the repository unless the file is being resurrected. Note that both the repository directory and the corresponding Attic (@pxref{Attic}) directory may need to be checked to locate the archive file corresponding to any given file being committed. Much of the information about the specific commit request being made, including the destination branch, commit message, and command line options specified, is not available to the command. @c FIXME: should discuss using commitinfo to control @c who has checkin access to what (e.g. Joe can check into @c directories a, b, and c, and Mary can check into @c directories b, c, and d--note this case cannot be @c conveniently handled with unix groups). Of course, @c adding a new set of features to CVS might be a more @c natural way to fix this problem than telling people to @c use commitinfo. @c FIXME: Should make some reference, especially in @c the context of controlling who has access, to the fact @c that commitinfo can be circumvented. Perhaps @c mention SETXID (but has it been carefully examined @c for holes?). This fits in with the discussion of @c general CVS security in "Password authentication @c security" (the bit which is not pserver-specific). @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node verifymsg @appendixsubsec Verifying log messages @cindex @file{verifymsg} (admin file) @cindex Log message, verifying Once you have entered a log message, you can evaluate that message to check for specific content, such as a bug ID. Use the @file{verifymsg} file to specify a program that is used to verify the log message. This program could be a simple script that checks that the entered message contains the required fields. The @file{verifymsg} file is often most useful together with the @file{rcsinfo} file, which can be used to specify a log message template. Each line in the @file{verifymsg} file consists of a regular expression and a command-line template. The template must include a program name, and can include any number of arguments. The full path to the current log message template file is appended to the template. One thing that should be noted is that the @samp{ALL} keyword is not supported. If more than one matching line is found, the first one is used. This can be useful for specifying a default verification script in a directory, and then overriding it in a subdirectory. @cindex DEFAULT in @file{verifymsg} If the repository name does not match any of the regular expressions in this file, the @samp{DEFAULT} line is used, if it is specified. @cindex Exit status, of @file{verifymsg} If the verification script exits with a non-zero exit status, the commit is aborted. @cindex @file{verifymsg}, changing the log message In the default configuration, CVS allows the verification script to change the log message. This is controlled via the RereadLogAfterVerify CVSROOT/config option. When @samp{RereadLogAfterVerify=always} or @samp{RereadLogAfterVerify=stat}, the log message will either always be reread after the verification script is run or reread only if the log message file status has changed. @xref{config}, for more on CVSROOT/config options. It is NOT a good idea for a @file{verifymsg} script to interact directly with the user in the various client/server methods. For the @code{pserver} method, there is no protocol support for communicating between @file{verifymsg} and the client on the remote end. For the @code{ext} and @code{server} methods, it is possible for CVS to become confused by the characters going along the same channel as the CVS protocol messages. See @ref{Remote repositories}, for more information on client/server setups. In addition, at the time the @file{verifymsg} script runs, the CVS server has locks in place in the repository. If control is returned to the user here then other users may be stuck waiting for access to the repository. This option can be useful if you find yourself using an rcstemplate that needs to be modified to remove empty elements or to fill in default values. It can also be useful if the rcstemplate has changed in the repository and the CVS/Template was not updated, but is able to be adapted to the new format by the verification script that is run by @file{verifymsg}. An example of an update might be to change all occurrences of 'BugId:' to be 'DefectId:' (which can be useful if the rcstemplate has recently been changed and there are still checked-out user trees with cached copies in the CVS/Template file of the older version). Another example of an update might be to delete a line that contains 'BugID: none' from the log message after validation of that value as being allowed is made. The following is a little silly example of a @file{verifymsg} file, together with the corresponding @file{rcsinfo} file, the log message template and an verification script. We begin with the log message template. We want to always record a bug-id number on the first line of the log message. The rest of log message is free text. The following template is found in the file @file{/usr/cvssupport/tc.template}. @example BugId: @end example The script @file{/usr/cvssupport/bugid.verify} is used to evaluate the log message. @example #!/bin/sh # # bugid.verify filename # # Verify that the log message contains a valid bugid # on the first line. # if head -1 < $1 | grep '^BugId:[ ]*[0-9][0-9]*$' > /dev/null; then exit 0 elif head -1 < $1 | grep '^BugId:[ ]*none$' > /dev/null; then # It is okay to allow commits with 'BugId: none', # but do not put that text into the real log message. grep -v '^BugId:[ ]*none$' > $1.rewrite mv $1.rewrite $1 exit 0 else echo "No BugId found." exit 1 fi @end example The @file{verifymsg} file contains this line: @example ^tc /usr/cvssupport/bugid.verify @end example The @file{rcsinfo} file contains this line: @example ^tc /usr/cvssupport/tc.template @end example The @file{config} file contains this line: @example RereadLogAfterVerify=always @end example @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node editinfo @appendixsubsec Editinfo @cindex editinfo (admin file) @cindex Editor, specifying per module @cindex Per-module editor @cindex Log messages, editing @strong{Note: The @file{editinfo} feature has been rendered obsolete. To set a default editor for log messages use the @code{CVSEDITOR}, @code{EDITOR} environment variables (@pxref{Environment variables}) or the @samp{-e} global option (@pxref{Global options}). See @ref{verifymsg}, for information on the use of the @file{verifymsg} feature for evaluating log messages.} If you want to make sure that all log messages look the same way, you can use the @file{editinfo} file to specify a program that is used to edit the log message. This program could be a custom-made editor that always enforces a certain style of the log message, or maybe a simple shell script that calls an editor, and checks that the entered message contains the required fields. If no matching line is found in the @file{editinfo} file, the editor specified in the environment variable @code{$CVSEDITOR} is used instead. If that variable is not set, then the environment variable @code{$EDITOR} is used instead. If that variable is not set a default will be used. See @ref{Committing your changes}. The @file{editinfo} file is often most useful together with the @file{rcsinfo} file, which can be used to specify a log message template. Each line in the @file{editinfo} file consists of a regular expression and a command-line template. The template must include a program name, and can include any number of arguments. The full path to the current log message template file is appended to the template. One thing that should be noted is that the @samp{ALL} keyword is not supported. If more than one matching line is found, the first one is used. This can be useful for specifying a default edit script in a module, and then overriding it in a subdirectory. @cindex DEFAULT in editinfo If the repository name does not match any of the regular expressions in this file, the @samp{DEFAULT} line is used, if it is specified. If the edit script exits with a non-zero exit status, the commit is aborted. Note: when @sc{cvs} is accessing a remote repository, or when the @samp{-m} or @samp{-F} options to @code{cvs commit} are used, @file{editinfo} will not be consulted. There is no good workaround for this; use @file{verifymsg} instead. @menu * editinfo example:: Editinfo example @end menu @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node editinfo example @appendixsubsubsec Editinfo example The following is a little silly example of a @file{editinfo} file, together with the corresponding @file{rcsinfo} file, the log message template and an editor script. We begin with the log message template. We want to always record a bug-id number on the first line of the log message. The rest of log message is free text. The following template is found in the file @file{/usr/cvssupport/tc.template}. @example BugId: @end example The script @file{/usr/cvssupport/bugid.edit} is used to edit the log message. @example #!/bin/sh # # bugid.edit filename # # Call $EDITOR on FILENAME, and verify that the # resulting file contains a valid bugid on the first # line. if [ "x$EDITOR" = "x" ]; then EDITOR=vi; fi if [ "x$CVSEDITOR" = "x" ]; then CVSEDITOR=$EDITOR; fi $CVSEDITOR $1 until head -1|grep '^BugId:[ ]*[0-9][0-9]*$' < $1 do echo -n "No BugId found. Edit again? ([y]/n)" read ans case $@{ans@} in n*) exit 1;; esac $CVSEDITOR $1 done @end example The @file{editinfo} file contains this line: @example ^tc /usr/cvssupport/bugid.edit @end example The @file{rcsinfo} file contains this line: @example ^tc /usr/cvssupport/tc.template @end example @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node loginfo @appendixsubsec Loginfo @cindex loginfo (admin file) @cindex Storing log messages @cindex Mailing log messages @cindex Distributing log messages @cindex Log messages @c "cvs commit" is not quite right. What we @c mean is "when the repository gets changed" which @c also includes "cvs import" and "cvs add" on a directory. The @file{loginfo} file is used to control where @samp{cvs commit} log information is sent. The first entry on a line is a regular expression which is tested against the directory that the change is being made to, relative to the @code{$CVSROOT}. If a match is found, then the remainder of the line is a filter program that should expect log information on its standard input. If the repository name does not match any of the regular expressions in this file, the @samp{DEFAULT} line is used, if it is specified. All occurrences of the name @samp{ALL} appearing as a regular expression are used in addition to the first matching regular expression or @samp{DEFAULT}. The first matching regular expression is used. @xref{commit files}, for a description of the syntax of the @file{loginfo} file. The user may specify a format string as part of the filter. The string is composed of a @samp{%} followed by a space, or followed by a single format character, or followed by a set of format characters surrounded by @samp{@{} and @samp{@}} as separators. The format characters are: @table @t @item s file name @item V old version number (pre-checkin) @item v new version number (post-checkin) @end table All other characters that appear in a format string expand to an empty field (commas separating fields are still provided). For example, some valid format strings are @samp{%}, @samp{%s}, @samp{%@{s@}}, and @samp{%@{sVv@}}. The output will be a space separated string of tokens enclosed in quotation marks (@t{"}). Any embedded dollar signs (@t{$}), backticks (@t{`}), backslashes (@t{\}), or quotation marks will be preceded by a backslash (this allows the shell to correctly parse it as a single string, regardless of the characters it contains). For backwards compatibility, the first token will be the repository subdirectory. The rest of the tokens will be comma-delimited lists of the information requested in the format string. For example, if @samp{/u/src/master/yoyodyne/tc} is the repository, @samp{%@{sVv@}} is the format string, and three files (@t{ChangeLog}, @t{Makefile}, @t{foo.c}) were modified, the output might be: @example "yoyodyne/tc ChangeLog,1.1,1.2 Makefile,1.3,1.4 foo.c,1.12,1.13" @end example As another example, @samp{%@{@}} means that only the name of the repository will be generated. Note: when @sc{cvs} is accessing a remote repository, @file{loginfo} will be run on the @emph{remote} (i.e., server) side, not the client side (@pxref{Remote repositories}). @menu * loginfo example:: Loginfo example * Keeping a checked out copy:: Updating a tree on every checkin @end menu @c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @node loginfo example @appendixsubsubsec Loginfo example The following @file{loginfo} file, together with the tiny shell-script below, appends all log messages to the file @file{$CVSROOT/CVSROOT/commitlog}, and any commits to the administrative files (inside the @file{CVSROOT} directory) are also logged in @file{/usr/adm/cvsroot-log}. Commits to the @file{prog1} directory are mailed to @t{ceder}. @c FIXME: is it a CVS feature or bug that only the @c first matching line is used? It is documented @c above, but is it useful? For example, if we wanted @c to run both "cvs-log" and "Mail" for the CVSROOT @c directory, it is kind of awkward if @c only the first matching line is used. @example ALL /usr/local/bin/cvs-log $CVSROOT/CVSROOT/commitlog $USER ^CVSROOT /usr/local/bin/cvs-log /usr/adm/cvsroot-log ^prog1 Mail -s %s ceder @end example The shell-script @file{/usr/local/bin/cvs-log} looks like this: @example #!/bin/sh (echo "------------------------------------------------------"; echo -n $2" "; date; echo; cat) >> $1 @end example @node Keeping a checked out copy @appendixsubsubsec Keeping a checked out copy @c What other index entries? It seems like @c people might want to use a lot of different @c words for this functionality. @cindex Keeping a checked out copy @cindex Checked out copy, keeping @cindex Web pages, maintaining with CVS It is often useful to maintain a directory tree which contains files which correspond to the latest version in the repository. For example, other developers might want to refer to the latest sources without having to check them out, or you might be maintaining a web site with @sc{cvs} and want every checkin to cause the files used by the web server to be updated. @c Can we offer more details on the web example? Or @c point the user at how to figure it out? This text @c strikes me as sufficient for someone who already has @c some idea of what we mean but not enough for the naive @c user/sysadmin to understand it and set it up. The way to do this is by having loginfo invoke @code{cvs update}. Doing so in the naive way will cause a problem with locks, so the @code{cvs update} must be run in the background. @c Should we try to describe the problem with locks? @c It seems like a digression for someone who just @c wants to know how to make it work. @c Another choice which might work for a single file @c is to use "cvs -n update -p" which doesn't take @c out locks (I think) but I don't see many advantages @c of that and we might as well document something which @c works for multiple files. Here is an example for unix (this should all be on one line): @example ^cyclic-pages (date; cat; (sleep 2; cd /u/www/local-docs; cvs -q update -d) &) >> $CVSROOT/CVSROOT/updatelog 2>&1 @end example This will cause checkins to repository directories starting with @code{cyclic-pages} to update the checked out tree in @file{/u/www/local-docs}. @c More info on some of the details? The "sleep 2" is @c so if we are lucky the lock will be gone by the time @c we start and we can wait 2 seconds instead of 30. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node rcsinfo @appendixsec Rcsinfo @cindex rcsinfo (admin file) @cindex Form for log message @cindex Log message template @cindex Template for log message The @file{rcsinfo} file can be used to specify a form to edit when filling out the commit log. The @file{rcsinfo} file has a syntax similar to the @file{verifymsg}, @file{commitinfo} and @file{loginfo} files. @xref{syntax}. Unlike the other files the second part is @emph{not} a command-line template. Instead, the part after the regular expression should be a full pathname to a file containing the log message template. If the repository name does not match any of the regular expressions in this file, the @samp{DEFAULT} line is used, if it is specified. All occurrences of the name @samp{ALL} appearing as a regular expression are used in addition to the first matching regular expression or @samp{DEFAULT}. @c FIXME: should be offering advice, somewhere around @c here, about where to put the template file. The @c verifymsg example uses /usr/cvssupport but doesn't @c say anything about what that directory is for or @c whether it is hardwired into CVS or who creates @c it or anything. In particular we should say @c how to version control the template file. A @c probably better answer than the /usr/cvssupport @c stuff is to use checkoutlist (with xref to the @c checkoutlist doc). @c Also I am starting to see a connection between @c this and the Keeping a checked out copy node. @c Probably want to say something about that. The log message template will be used as a default log message. If you specify a log message with @samp{cvs commit -m @var{message}} or @samp{cvs commit -f @var{file}} that log message will override the template. @xref{verifymsg}, for an example @file{rcsinfo} file. When @sc{cvs} is accessing a remote repository, the contents of @file{rcsinfo} at the time a directory is first checked out will specify a template. This template will be updated on all @samp{cvs update} commands. It will also be added to new directories added with a @samp{cvs add new-directry} command. In versions of @sc{cvs} prior to version 1.12, the @file{CVS/Template} file was not updated. If the @sc{cvs} server is at version 1.12 or higher an older client may be used and the @file{CVS/Template} will be updated from the server. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node cvsignore @appendixsec Ignoring files via cvsignore @cindex cvsignore (admin file), global @cindex Global cvsignore @cindex Ignoring files @c -- This chapter should maybe be moved to the @c tutorial part of the manual? There are certain file names that frequently occur inside your working copy, but that you don't want to put under @sc{cvs} control. Examples are all the object files that you get while you compile your sources. Normally, when you run @samp{cvs update}, it prints a line for each file it encounters that it doesn't know about (@pxref{update output}). @sc{cvs} has a list of files (or sh(1) file name patterns) that it should ignore while running @code{update}, @code{import} and @code{release}. @c -- Are those the only three commands affected? This list is constructed in the following way. @itemize @bullet @item The list is initialized to include certain file name patterns: names associated with @sc{cvs} administration, or with other common source control systems; common names for patch files, object files, archive files, and editor backup files; and other names that are usually artifacts of assorted utilities. Currently, the default list of ignored file name patterns is: @cindex Ignored files @cindex Automatically ignored files @example RCS SCCS CVS CVS.adm RCSLOG cvslog.* tags TAGS .make.state .nse_depinfo *~ #* .#* ,* _$* *$ *.old *.bak *.BAK *.orig *.rej .del-* *.a *.olb *.o *.obj *.so *.exe *.Z *.elc *.ln core @end example @item The per-repository list in @file{$CVSROOT/CVSROOT/cvsignore} is appended to the list, if that file exists. @item The per-user list in @file{.cvsignore} in your home directory is appended to the list, if it exists. @item Any entries in the environment variable @code{$CVSIGNORE} is appended to the list. @item Any @samp{-I} options given to @sc{cvs} is appended. @item As @sc{cvs} traverses through your directories, the contents of any @file{.cvsignore} will be appended to the list. The patterns found in @file{.cvsignore} are only valid for the directory that contains them, not for any sub-directories. @end itemize In any of the 5 places listed above, a single exclamation mark (@samp{!}) clears the ignore list. This can be used if you want to store any file which normally is ignored by @sc{cvs}. Specifying @samp{-I !} to @code{cvs import} will import everything, which is generally what you want to do if you are importing files from a pristine distribution or any other source which is known to not contain any extraneous files. However, looking at the rules above you will see there is a fly in the ointment; if the distribution contains any @file{.cvsignore} files, then the patterns from those files will be processed even if @samp{-I !} is specified. The only workaround is to remove the @file{.cvsignore} files in order to do the import. Because this is awkward, in the future @samp{-I !} might be modified to override @file{.cvsignore} files in each directory. Note that the syntax of the ignore files consists of a series of lines, each of which contains a space separated list of filenames. This offers no clean way to specify filenames which contain spaces, but you can use a workaround like @file{foo?bar} to match a file named @file{foo bar} (it also matches @file{fooxbar} and the like). Also note that there is currently no way to specify comments. @c FIXCVS? I don't _like_ this syntax at all, but @c changing it raises all the usual compatibility @c issues and I'm also not sure what to change it to. @node checkoutlist @appendixsec The checkoutlist file @cindex checkoutlist It may be helpful to use @sc{cvs} to maintain your own files in the @file{CVSROOT} directory. For example, suppose that you have a script @file{logcommit.pl} which you run by including the following line in the @file{commitinfo} administrative file: @example ALL $CVSROOT/CVSROOT/logcommit.pl @end example To maintain @file{logcommit.pl} with @sc{cvs} you would add the following line to the @file{checkoutlist} administrative file: @example logcommit.pl @end example The format of @file{checkoutlist} is one line for each file that you want to maintain using @sc{cvs}, giving the name of the file. After setting up @file{checkoutlist} in this fashion, the files listed there will function just like @sc{cvs}'s built-in administrative files. For example, when checking in one of the files you should get a message such as: @example cvs commit: Rebuilding administrative file database @end example @noindent and the checked out copy in the @file{CVSROOT} directory should be updated. Note that listing @file{passwd} (@pxref{Password authentication server}) in @file{checkoutlist} is not recommended for security reasons. For information about keeping a checkout out copy in a more general context than the one provided by @file{checkoutlist}, see @ref{Keeping a checked out copy}. @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @node history file @appendixsec The history file @cindex History file @cindex Log information, saving The file @file{$CVSROOT/CVSROOT/history} is used to log information for the @code{history} command (@pxref{history}). This file must be created to turn on logging. This is done automatically if the @code{cvs init} command is used to set up the repository (@pxref{Creating a repository}). The file format of the @file{history} file is documented only in comments in the @sc{cvs} source code, but generally programs should use the @code{cvs history} command to access it anyway, in case the format changes with future releases of @sc{cvs}. @node Variables @appendixsec Expansions in administrative files @cindex Internal variables @cindex Variables Sometimes in writing an administrative file, you might want the file to be able to know various things based on environment @sc{cvs} is running in. There are several mechanisms to do that. To find the home directory of the user running @sc{cvs} (from the @code{HOME} environment variable), use @samp{~} followed by @samp{/} or the end of the line. Likewise for the home directory of @var{user}, use @samp{~@var{user}}. These variables are expanded on the server machine, and don't get any reasonable expansion if pserver (@pxref{Password authenticated}) is in use; therefore user variables (see below) may be a better choice to customize behavior based on the user running @sc{cvs}. @c Based on these limitations, should we deprecate ~? @c What is it good for? Are people using it? One may want to know about various pieces of information internal to @sc{cvs}. A @sc{cvs} internal variable has the syntax @code{$@{@var{variable}@}}, where @var{variable} starts with a letter and consists of alphanumeric characters and @samp{_}. If the character following @var{variable} is a non-alphanumeric character other than @samp{_}, the @samp{@{} and @samp{@}} can be omitted. The @sc{cvs} internal variables are: @table @code @item CVSROOT @cindex CVSROOT, internal variable This is the absolute path to the current @sc{cvs} root directory. @xref{Repository}, for a description of the various ways to specify this, but note that the internal variable contains just the directory and not any of the access method information. @item RCSBIN @cindex RCSBIN, internal variable In @sc{cvs} 1.9.18 and older, this specified the directory where @sc{cvs} was looking for @sc{rcs} programs. Because @sc{cvs} no longer runs @sc{rcs} programs, specifying this internal variable is now an error. @item CVSEDITOR @cindex CVSEDITOR, internal variable @itemx EDITOR @cindex EDITOR, internal variable @itemx VISUAL @cindex VISUAL, internal variable These all expand to the same value, which is the editor that @sc{cvs} is using. @xref{Global options}, for how to specify this. @item USER @cindex USER, internal variable Username of the user running @sc{cvs} (on the @sc{cvs} server machine). When using pserver, this is the user specified in the repository specification which need not be the same as the username the server is running as (@pxref{Password authentication server}). Do not confuse this with the environment variable of the same name. @end table If you want to pass a value to the administrative files which the user who is running @sc{cvs} can specify, use a user variable. @cindex User variables To expand a user variable, the administrative file contains @code{$@{=@var{variable}@}}. To set a user variable, specify the global option @samp{-s} to @sc{cvs}, with argument @code{@var{variable}=@var{value}}. It may be particularly useful to specify this option via @file{.cvsrc} (@pxref{~/.cvsrc}). For example, if you want the administrative file to refer to a test directory you might create a user variable @code{TESTDIR}. Then if @sc{cvs} is invoked as @example cvs -s TESTDIR=/work/local/tests @end example @noindent and the administrative file contains @code{sh $@{=TESTDIR@}/runtests}, then that string is expanded to @code{sh /work/local/tests/runtests}. All other strings containing @samp{$} are reserved; there is no way to quote a @samp{$} character so that @samp{$} represents itself. Environment variables passed to administrative files are: @table @code @cindex environment variables, passed to administrative files @item CVS_USER @cindex CVS_USER, environment variable The @sc{cvs}-specific username provided by the user, if it can be provided (currently just for the pserver access method), and to the empty string otherwise. (@code{CVS_USER} and @code{USER} may differ when @file{$CVSROOT/CVSROOT/passwd} is used to map @sc{cvs} usernames to system usernames.) @item LOGNAME @cindex LOGNAME, environment variable The username of the system user. @item USER @cindex USER, environment variable Same as @code{LOGNAME}. Do not confuse this with the internal variable of the same name. @end table @node config @appendixsec The CVSROOT/config configuration file @cindex config, in CVSROOT @cindex CVSROOT/config The administrative file @file{config} contains various miscellaneous settings which affect the behavior of @sc{cvs}. The syntax is slightly different from the other administrative files. Variables are not expanded. Lines which start with @samp{#} are considered comments. @c FIXME: where do we define comments for the other @c administrative files. Other lines consist of a keyword, @samp{=}, and a value. Note that this syntax is very strict. Extraneous spaces or tabs are not permitted. @c See comments in parseinfo.c:parse_config for more @c discussion of this strictness. Currently defined keywords are: @table @code @cindex RCSBIN, in CVSROOT/config @item RCSBIN=@var{bindir} For @sc{cvs} 1.9.12 through 1.9.18, this setting told @sc{cvs} to look for @sc{rcs} programs in the @var{bindir} directory. Current versions of @sc{cvs} do not run @sc{rcs} programs; for compatibility this setting is accepted, but it does nothing. @cindex SystemAuth, in CVSROOT/config @item SystemAuth=@var{value} If @var{value} is @samp{yes}, then pserver should check for users in the system's user database if not found in @file{CVSROOT/passwd}. If it is @samp{no}, then all pserver users must exist in @file{CVSROOT/passwd}. The default is @samp{yes}. For more on pserver, see @ref{Password authenticated}. @ignore @cindex PreservePermissions, in CVSROOT/config @item PreservePermissions=@var{value} Enable support for saving special device files, symbolic links, file permissions and ownerships in the repository. The default value is @samp{no}. @xref{Special Files}, for the full implications of using this keyword. @end ignore @cindex TopLevelAdmin, in CVSROOT/config @item TopLevelAdmin=@var{value} Modify the @samp{checkout} command to create a @samp{CVS} directory at the top level of the new working directory, in addition to @samp{CVS} directories created within checked-out directories. The default value is @samp{no}. This option is useful if you find yourself performing many commands at the top level of your working directory, rather than in one of the checked out subdirectories. The @file{CVS} directory created there will mean you don't have to specify @code{CVSROOT} for each command. It also provides a place for the @file{CVS/Template} file (@pxref{Working directory storage}). @cindex LockDir, in CVSROOT/config @item LockDir=@var{directory} Put @sc{cvs} lock files in @var{directory} rather than directly in the repository. This is useful if you want to let users read from the repository while giving them write access only to @var{directory}, not to the repository. It can also be used to put the locks on a very fast in-memory file system to speed up locking and unlocking the repository. You need to create @var{directory}, but @sc{cvs} will create subdirectories of @var{directory} as it needs them. For information on @sc{cvs} locks, see @ref{Concurrency}. @c Mention this in Compatibility section? Before enabling the LockDir option, make sure that you have tracked down and removed any copies of @sc{cvs} 1.9 or older. Such versions neither support LockDir, nor will give an error indicating that they don't support it. The result, if this is allowed to happen, is that some @sc{cvs} users will put the locks one place, and others will put them another place, and therefore the repository could become corrupted. @sc{cvs} 1.10 does not support LockDir but it will print a warning if run on a repository with LockDir enabled. @cindex LogHistory, in CVSROOT/config @item LogHistory=@var{value} Control what is logged to the @file{CVSROOT/history} file (@pxref{history}). Default of @samp{TOEFWUCGMAR} (or simply @samp{all}) will log all transactions. Any subset of the default is legal. (For example, to only log transactions that modify the @file{*,v} files, use @samp{LogHistory=TMAR}.) @cindex RereadLogAfterVerify, in CVSROOT/config @cindex @file{verifymsg}, changing the log message @item RereadLogAfterVerify=@var{value} Modify the @samp{commit} command such that CVS will reread the log message after running the program specified by @file{verifymsg}. @var{value} may be one of @samp{yes} or @samp{always}, indicating that the log message should always be reread; @samp{no} or @samp{never}, indicating that it should never be reread; or @var{value} may be @samp{stat}, indicating that the file should be checked with the filesystem @samp{stat()} function to see if it has changed (see warning below) before rereading. The default value is @samp{always}. @strong{Note: the `stat' mode can cause CVS to pause for up to one extra second per directory committed. This can be less IO and CPU intensive but is not recommended for use with large repositories} @xref{verifymsg}, for more information on how verifymsg may be used. @cindex UserAdminOptions, in CVSROOT/config @item UserAdminOptions=@var{value} Control what options will be allowed with the @code{cvs admin} command (@pxref{admin}) for users not in the @code{cvsadmin} group. The @var{value} string is a list of single character options which should be allowed. If a user who is not a member of the @code{cvsadmin} group tries to execute any @code{cvs admin} option which is not listed they will will receive an error message reporting that the option is restricted. If no @code{cvsadmin} group exists on the server, @sc{cvs} will ignore the @code{UserAdminOptions} keyword (@pxref{admin}). When not specified, @code{UserAdminOptions} defaults to @samp{k}. In other words, it defaults to allowing users outside of the @code{cvsadmin} group to use the @code{cvs admin} command only to change the default keyword expansion mode for files. As an example, to restrict users not in the @code{cvsadmin} group to using @code{cvs admin} to change the default keyword substitution mode, lock revisions, unlock revisions, and replace the log message, use @samp{UserAdminOptions=klum}. @end table @c --------------------------------------------------------------------- @node Environment variables @appendix All environment variables which affect CVS @cindex Environment variables @cindex Reference manual for variables This is a complete list of all environment variables that affect @sc{cvs}. @table @code @cindex CVSIGNORE, environment variable @item $CVSIGNORE A whitespace-separated list of file name patterns that @sc{cvs} should ignore. @xref{cvsignore}. @cindex CVSWRAPPERS, environment variable @item $CVSWRAPPERS A whitespace-separated list of file name patterns that @sc{cvs} should treat as wrappers. @xref{Wrappers}. @cindex CVSREAD, environment variable @cindex Read-only files, and CVSREAD @item $CVSREAD If this is set, @code{checkout} and @code{update} will try hard to make the files in your working directory read-only. When this is not set, the default behavior is to permit modification of your working files. @cindex CVSREADONLYFS, environment variable @item $CVSREADONLYFS Turns on read-only repository mode. This allows one to check out from a read-only repository, such as within an anoncvs server, or from a CDROM repository. It has the same effect as if the @samp{-R} command-line option is used. This can also allow the use of read-only NFS repositories. @item $CVSUMASK Controls permissions of files in the repository. See @ref{File permissions}. @item $CVSROOT Should contain the full pathname to the root of the @sc{cvs} source repository (where the @sc{rcs} files are kept). This information must be available to @sc{cvs} for most commands to execute; if @code{$CVSROOT} is not set, or if you wish to override it for one invocation, you can supply it on the command line: @samp{cvs -d cvsroot cvs_command@dots{}} Once you have checked out a working directory, @sc{cvs} stores the appropriate root (in the file @file{CVS/Root}), so normally you only need to worry about this when initially checking out a working directory. @item $CVSEDITOR @cindex CVSEDITOR, environment variable @itemx $EDITOR @cindex EDITOR, environment variable @itemx $VISUAL @cindex VISUAL, environment variable Specifies the program to use for recording log messages during commit. @code{$CVSEDITOR} overrides @code{$EDITOR}, which overrides @code{$VISUAL}. See @ref{Committing your changes} for more or @ref{Global options} for alternative ways of specifying a log editor. @cindex PATH, environment variable @item $PATH If @code{$RCSBIN} is not set, and no path is compiled into @sc{cvs}, it will use @code{$PATH} to try to find all programs it uses. @cindex HOME, environment variable @item $HOME @cindex HOMEPATH, environment variable @item $HOMEPATH @cindex HOMEDRIVE, environment variable @item $HOMEDRIVE Used to locate the directory where the @file{.cvsrc} file, and other such files, are searched. On Unix, @sc{cvs} just checks for @code{HOME}. On Windows NT, the system will set @code{HOMEDRIVE}, for example to @samp{d:} and @code{HOMEPATH}, for example to @file{\joe}. On Windows 95, you'll probably need to set @code{HOMEDRIVE} and @code{HOMEPATH} yourself. @c We are being vague about whether HOME works on @c Windows; see long comment in windows-NT/filesubr.c. @cindex CVS_RSH, environment variable @item $CVS_RSH Specifies the external program which @sc{cvs} connects with, when @code{:ext:} access method is specified. @pxref{Connecting via rsh}. @item $CVS_SERVER Used in client-server mode when accessing a remote repository using @sc{rsh}. It specifies the name of the program to start on the server side (and any necessary arguments) when accessing a remote repository using the @code{:ext:}, @code{:fork:}, or @code{:server:} access methods. The default value for @code{:ext:} and @code{:server:} is @code{cvs}; the default value for @code{:fork:} is the name used to run the client. @pxref{Connecting via rsh} @item $CVS_PASSFILE Used in client-server mode when accessing the @code{cvs login server}. Default value is @file{$HOME/.cvspass}. @pxref{Password authentication client} @item $CVS_CLIENT_PORT Used in client-server mode to set the port to use when accessing the server via Kerberos, GSSAPI, or @sc{cvs}'s password authentication protocol if the port is not specified in the CVSROOT. @pxref{Remote repositories} @cindex CVS_RCMD_PORT, environment variable @item $CVS_RCMD_PORT Used in client-server mode. If set, specifies the port number to be used when accessing the @sc{rcmd} demon on the server side. (Currently not used for Unix clients). @cindex CVS_CLIENT_LOG, environment variable @item $CVS_CLIENT_LOG Used for debugging only in client-server mode. If set, everything sent to the server is logged into @file{@code{$CVS_CLIENT_LOG}.in} and everything sent from the server is logged into @file{@code{$CVS_CLIENT_LOG}.out}. @cindex CVS_SERVER_SLEEP, environment variable @item $CVS_SERVER_SLEEP Used only for debugging the server side in client-server mode. If set, delays the start of the server child process the specified amount of seconds so that you can attach to it with a debugger. @cindex CVS_IGNORE_REMOTE_ROOT, environment variable @item $CVS_IGNORE_REMOTE_ROOT For @sc{cvs} 1.10 and older, setting this variable prevents @sc{cvs} from overwriting the @file{CVS/Root} file when the @samp{-d} global option is specified. Later versions of @sc{cvs} do not rewrite @file{CVS/Root}, so @code{CVS_IGNORE_REMOTE_ROOT} has no effect. @cindex CVS_LOCAL_BRANCH_NUM, environment variable @item $CVS_LOCAL_BRANCH_NUM Setting this variable allows some control over the branch number that is assigned. This is specifically to support the local commit feature of CVSup. If one sets @code{CVS_LOCAL_BRANCH_NUM} to (say) 1000 then branches the local repository, the revision numbers will look like 1.66.1000.xx. There is almost a dead-set certainty that there will be no conflicts with version numbers. @cindex COMSPEC, environment variable @item $COMSPEC Used under OS/2 only. It specifies the name of the command interpreter and defaults to @sc{cmd.exe}. @cindex TMPDIR, environment variable @item $TMPDIR @cindex TMP, environment variable @itemx $TMP @cindex TEMP, environment variable @itemx $TEMP @cindex Temporary files, location of @c This is quite nuts. We don't talk about tempnam @c or mkstemp which we sometimes use. The discussion @c of "Global options" is semi-incoherent. @c I'm not even sure those are the only inaccuracies. @c Furthermore, the conventions are @c pretty crazy and they should be simplified. Directory in which temporary files are located. The @sc{cvs} server uses @code{TMPDIR}. @xref{Global options}, for a description of how to specify this. Some parts of @sc{cvs} will always use @file{/tmp} (via the @code{tmpnam} function provided by the system). On Windows NT, @code{TMP} is used (via the @code{_tempnam} function provided by the system). The @code{patch} program which is used by the @sc{cvs} client uses @code{TMPDIR}, and if it is not set, uses @file{/tmp} (at least with GNU patch 2.1). Note that if your server and client are both running @sc{cvs} 1.9.10 or later, @sc{cvs} will not invoke an external @code{patch} program. @cindex CVS_PID, environment variable @item $CVS_PID This is the process identification (aka pid) number of the @sc{cvs} process. It is often useful in the programs and/or scripts specified by the @file{commitinfo}, @file{verifymsg}, @file{loginfo} files. @end table @node Compatibility @appendix Compatibility between CVS Versions @cindex CVS, versions of @cindex Versions, of CVS @cindex Compatibility, between CVS versions @c We don't mention versions older than CVS 1.3 @c on the theory that it would clutter it up for the vast @c majority of people, who don't have anything that old. @c The repository format is compatible going back to @sc{cvs} 1.3. But see @ref{Watches Compatibility}, if you have copies of @sc{cvs} 1.6 or older and you want to use the optional developer communication features. @c If you "cvs rm" and commit using 1.3, then you'll @c want to run "rcs -sdead " on each of the @c files in the Attic if you then want 1.5 and @c later to recognize those files as dead (I think the @c symptom if this is not done is that files reappear @c in joins). (Wait: the above will work but really to @c be strictly correct we should suggest checking @c in a new revision rather than just changing the @c state of the head revision, shouldn't we?). @c The old convert.sh script was for this, but it never @c did get updated to reflect use of the RCS "dead" @c state. @c Note: this is tricky to document without confusing @c people--need to carefully say what CVS version we @c are talking about and keep in mind the distinction @c between a @c repository created with 1.3 and on which one now @c uses 1.5+, and a repository on which one wants to @c use both versions side by side (e.g. during a @c transition period). @c Wait, can't CVS just detect the case in which a file @c is in the Attic but the head revision is not dead? @c Not sure whether this should produce a warning or @c something, and probably needs further thought, but @c it would appear that the situation can be detected. @c @c We might want to separate out the 1.3 compatibility @c section (for repository & working directory) from the @c rest--that might help avoid confusing people who @c are upgrading (for example) from 1.6 to 1.8. @c @c A minor incompatibility is if a current version of CVS @c puts "Nfoo" into CVS/Tag, then CVS 1.9 or older will @c see this as if there is no tag. Seems to me this is @c too obscure to mention. The working directory format is compatible going back to @sc{cvs} 1.5. It did change between @sc{cvs} 1.3 and @sc{cvs} 1.5. If you run @sc{cvs} 1.5 or newer on a working directory checked out with @sc{cvs} 1.3, @sc{cvs} will convert it, but to go back to @sc{cvs} 1.3 you need to check out a new working directory with @sc{cvs} 1.3. The remote protocol is interoperable going back to @sc{cvs} 1.5, but no further (1.5 was the first official release with the remote protocol, but some older versions might still be floating around). In many cases you need to upgrade both the client and the server to take advantage of new features and bugfixes, however. @c Perhaps should be saying something here about the @c "D" lines in Entries (written by CVS 1.9; 1.8 and @c older don't use them). These are supposed to be @c compatible in both directions, but I'm not sure @c they quite are 100%. One common gripe is if you @c "rm -r" a directory and 1.9 gets confused, as it @c still sees it in Entries. That one is fixed in @c (say) 1.9.6. Someone else reported problems with @c starting with a directory which was checked out with @c an old version, and then using a new version, and @c some "D" lines appeared, but not for every @c directory, causing some directories to be skipped. @c They weren't sure how to reproduce this, though. @c --------------------------------------------------------------------- @node Troubleshooting @appendix Troubleshooting If you are having trouble with @sc{cvs}, this appendix may help. If there is a particular error message which you are seeing, then you can look up the message alphabetically. If not, you can look through the section on other problems to see if your problem is mentioned there. @menu * Error messages:: Partial list of CVS errors * Connection:: Trouble making a connection to a CVS server * Other problems:: Problems not readily listed by error message @end menu @ignore @c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @c @node Bad administrative files @appendixsec Bad administrative files @c -- Give hints on how to fix them @end ignore @node Error messages @appendixsec Partial list of error messages Here is a partial list of error messages that you may see from @sc{cvs}. It is not a complete list---@sc{cvs} is capable of printing many, many error messages, often with parts of them supplied by the operating system, but the intention is to list the common and/or potentially confusing error messages. The messages are alphabetical, but introductory text such as @samp{cvs update: } is not considered in ordering them. In some cases the list includes messages printed by old versions of @sc{cvs} (partly because users may not be sure which version of @sc{cvs} they are using at any particular moment). @c If we want to start retiring messages, perhaps we @c should pick a cutoff version (for example, no more @c messages which are specific to versions before 1.9) @c and then move the old messages to an "old messages" @c node rather than deleting them completely. @table @code @c FIXME: What is the correct way to format a multiline @c error message here? Maybe @table is the wrong @c choice? Texinfo gurus? @item @var{file}:@var{line}: Assertion '@var{text}' failed The exact format of this message may vary depending on your system. It indicates a bug in @sc{cvs}, which can be handled as described in @ref{BUGS}. @item cvs @var{command}: authorization failed: server @var{host} rejected access This is a generic response when trying to connect to a pserver server which chooses not to provide a specific reason for denying authorization. Check that the username and password specified are correct and that the @code{CVSROOT} specified is allowed by @samp{--allow-root} in @file{inetd.conf}. See @ref{Password authenticated}. @item cvs @var{command}: conflict: removed @var{file} was modified by second party This message indicates that you removed a file, and someone else modified it. To resolve the conflict, first run @samp{cvs add @var{file}}. If desired, look at the other party's modification to decide whether you still want to remove it. If you don't want to remove it, stop here. If you do want to remove it, proceed with @samp{cvs remove @var{file}} and commit your removal. @c Tests conflicts2-142b* in sanity.sh test for this. @item cannot change permissions on temporary directory @example Operation not permitted @end example This message has been happening in a non-reproducible, occasional way when we run the client/server testsuite, both on Red Hat Linux 3.0.3 and 4.1. We haven't been able to figure out what causes it, nor is it known whether it is specific to linux (or even to this particular machine!). If the problem does occur on other unices, @samp{Operation not permitted} would be likely to read @samp{Not owner} or whatever the system in question uses for the unix @code{EPERM} error. If you have any information to add, please let us know as described in @ref{BUGS}. If you experience this error while using @sc{cvs}, retrying the operation which produced it should work fine. @c This has been seen in a variety of tests, including @c multibranch-2, multibranch-5, and basic1-24-rm-rm, @c so it doesn't seem particularly specific to any one @c test. @item cvs [server aborted]: Cannot check out files into the repository itself The obvious cause for this message (especially for non-client/server @sc{cvs}) is that the @sc{cvs} root is, for example, @file{/usr/local/cvsroot} and you try to check out files when you are in a subdirectory, such as @file{/usr/local/cvsroot/test}. However, there is a more subtle cause, which is that the temporary directory on the server is set to a subdirectory of the root (which is also not allowed). If this is the problem, set the temporary directory to somewhere else, for example @file{/var/tmp}; see @code{TMPDIR} in @ref{Environment variables}, for how to set the temporary directory. @item cannot commit files as 'root' See @samp{'root' is not allowed to commit files}. @c For one example see basica-1a10 in the testsuite @c For another example, "cvs co ." on NT; see comment @c at windows-NT/filesubr.c (expand_wild). @c For another example, "cvs co foo/bar" where foo exists. @item cannot open CVS/Entries for reading: No such file or directory This generally indicates a @sc{cvs} internal error, and can be handled as with other @sc{cvs} bugs (@pxref{BUGS}). Usually there is a workaround---the exact nature of which would depend on the situation but which hopefully could be figured out. @c This is more obscure than it might sound; it only @c happens if you run "cvs init" from a directory which @c contains a CVS/Root file at the start. @item cvs [init aborted]: cannot open CVS/Root: No such file or directory This message is harmless. Provided it is not accompanied by other errors, the operation has completed successfully. This message should not occur with current versions of @sc{cvs}, but it is documented here for the benefit of @sc{cvs} 1.9 and older. @item cvs server: cannot open /root/.cvsignore: Permission denied @itemx cvs [server aborted]: can't chdir(/root): Permission denied See @ref{Connection}. @item cvs [checkout aborted]: cannot rename file @var{file} to CVS/,,@var{file}: Invalid argument This message has been reported as intermittently happening with @sc{cvs} 1.9 on Solaris 2.5. The cause is unknown; if you know more about what causes it, let us know as described in @ref{BUGS}. @item cvs [@var{command} aborted]: cannot start server via rcmd This, unfortunately, is a rather nonspecific error message which @sc{cvs} 1.9 will print if you are running the @sc{cvs} client and it is having trouble connecting to the server. Current versions of @sc{cvs} should print a much more specific error message. If you get this message when you didn't mean to run the client at all, you probably forgot to specify @code{:local:}, as described in @ref{Repository}. @item ci: @var{file},v: bad diff output line: Binary files - and /tmp/T2a22651 differ @sc{cvs} 1.9 and older will print this message when trying to check in a binary file if @sc{rcs} is not correctly installed. Re-read the instructions that came with your @sc{rcs} distribution and the @sc{install} file in the @sc{cvs} distribution. Alternately, upgrade to a current version of @sc{cvs}, which checks in files itself rather than via @sc{rcs}. @item cvs checkout: could not check out @var{file} With @sc{cvs} 1.9, this can mean that the @code{co} program (part of @sc{rcs}) returned a failure. It should be preceded by another error message, however it has been observed without another error message and the cause is not well-understood. With the current version of @sc{cvs}, which does not run @code{co}, if this message occurs without another error message, it is definitely a @sc{cvs} bug (@pxref{BUGS}). @c My current suspicion is that the RCS in the rcs (not @c cvs/winnt/rcs57nt.zip) directory on the _Practical_ @c CD is bad (remains to be confirmed). @c There is also a report of something which looks @c very similar on SGI, Irix 5.2, so I dunno. @item cvs [login aborted]: could not find out home directory This means that you need to set the environment variables that @sc{cvs} uses to locate your home directory. See the discussion of @code{HOME}, @code{HOMEDRIVE}, and @code{HOMEPATH} in @ref{Environment variables}. @item cvs update: could not merge revision @var{rev} of @var{file}: No such file or directory @sc{cvs} 1.9 and older will print this message if there was a problem finding the @code{rcsmerge} program. Make sure that it is in your @code{PATH}, or upgrade to a current version of @sc{cvs}, which does not require an external @code{rcsmerge} program. @item cvs [update aborted]: could not patch @var{file}: No such file or directory This means that there was a problem finding the @code{patch} program. Make sure that it is in your @code{PATH}. Note that despite appearances the message is @emph{not} referring to whether it can find @var{file}. If both the client and the server are running a current version of @sc{cvs}, then there is no need for an external patch program and you should not see this message. But if either client or server is running @sc{cvs} 1.9, then you need @code{patch}. @item cvs update: could not patch @var{file}; will refetch This means that for whatever reason the client was unable to apply a patch that the server sent. The message is nothing to be concerned about, because inability to apply the patch only slows things down and has no effect on what @sc{cvs} does. @c xref to update output. Or File status? @c Or some place else that @c explains this whole "patch"/P/Needs Patch thing? @item dying gasps from @var{server} unexpected There is a known bug in the server for @sc{cvs} 1.9.18 and older which can cause this. For me, this was reproducible if I used the @samp{-t} global option. It was fixed by Andy Piper's 14 Nov 1997 change to src/filesubr.c, if anyone is curious. If you see the message, you probably can just retry the operation which failed, or if you have discovered information concerning its cause, please let us know as described in @ref{BUGS}. @item end of file from server (consult above messages if any) The most common cause for this message is if you are using an external @code{rsh} program and it exited with an error. In this case the @code{rsh} program should have printed a message, which will appear before the above message. For more information on setting up a @sc{cvs} client and server, see @ref{Remote repositories}. @item cvs [update aborted]: EOF in key in RCS file @var{file},v @itemx cvs [checkout aborted]: EOF while looking for end of string in RCS file @var{file},v This means that there is a syntax error in the given @sc{rcs} file. Note that this might be true even if @sc{rcs} can read the file OK; @sc{cvs} does more error checking of errors in the RCS file. That is why you may see this message when upgrading from @sc{cvs} 1.9 to @sc{cvs} 1.10. The likely cause for the original corruption is hardware, the operating system, or the like. Of course, if you find a case in which @sc{cvs} seems to corrupting the file, by all means report it, (@pxref{BUGS}). There are quite a few variations of this error message, depending on exactly where in the @sc{rcs} file @sc{cvs} finds the syntax error. @cindex mkmodules @item cvs commit: Executing 'mkmodules' This means that your repository is set up for a version of @sc{cvs} prior to @sc{cvs} 1.8. When using @sc{cvs} 1.8 or later, the above message will be preceded by @example cvs commit: Rebuilding administrative file database @end example If you see both messages, the database is being rebuilt twice, which is unnecessary but harmless. If you wish to avoid the duplication, and you have no versions of @sc{cvs} 1.7 or earlier in use, remove @code{-i mkmodules} every place it appears in your @code{modules} file. For more information on the @code{modules} file, see @ref{modules}. @c This message comes from "co", and I believe is @c possible only with older versions of CVS which call @c co. The problem with being able to create the bogus @c RCS file still exists, though (and I think maybe @c there is a different symptom(s) now). @c FIXME: Would be nice to have a more exact wording @c for this message. @item missing author Typically this can happen if you created an RCS file with your username set to empty. @sc{cvs} will, bogusly, create an illegal RCS file with no value for the author field. The solution is to make sure your username is set to a non-empty value and re-create the RCS file. @c "make sure your username is set" is complicated in @c and of itself, as there are the environment @c variables the system login name, &c, and it depends @c on the version of CVS. @item cvs [checkout aborted]: no such tag @var{tag} This message means that @sc{cvs} isn't familiar with the tag @var{tag}. Usually this means that you have mistyped a tag name; however there are (relatively obscure) cases in which @sc{cvs} will require you to @c Search sanity.sh for "no such tag" to see some of @c the relatively obscure cases. try a few other @sc{cvs} commands involving that tag, before you find one which will cause @sc{cvs} to update the @file{val-tags} file; see discussion of val-tags in @ref{File permissions}. You only need to worry about this once for a given tag; when a tag is listed in @file{val-tags}, it stays there. Note that using @samp{-f} to not require tag matches does not override this check; see @ref{Common options}. @item *PANIC* administration files missing This typically means that there is a directory named @sc{cvs} but it does not contain the administrative files which @sc{cvs} puts in a CVS directory. If the problem is that you created a CVS directory via some mechanism other than @sc{cvs}, then the answer is simple, use a name other than @sc{cvs}. If not, it indicates a @sc{cvs} bug (@pxref{BUGS}). @item rcs error: Unknown option: -x,v/ This message will be followed by a usage message for @sc{rcs}. It means that you have an old version of @sc{rcs} (probably supplied with your operating system), as well as an old version of @sc{cvs}. @sc{cvs} 1.9.18 and earlier only work with @sc{rcs} version 5 and later; current versions of @sc{cvs} do not run @sc{rcs} programs. @c For more information on installing @sc{cvs}, see @c (FIXME: where? it depends on whether you are @c getting binaries or sources or what). @c The message can also say "ci error" or something @c instead of "rcs error", I suspect. @item cvs [server aborted]: received broken pipe signal This message seems to be caused by a hard-to-track-down bug in @sc{cvs} or the systems it runs on (we don't know---we haven't tracked it down yet!). It seems to happen only after a @sc{cvs} command has completed, and you should be able to just ignore the message. However, if you have discovered information concerning its cause, please let us know as described in @ref{BUGS}. @item 'root' is not allowed to commit files When committing a permanent change, @sc{cvs} makes a log entry of who committed the change. If you are committing the change logged in as "root" (not under "su" or other root-priv giving program), @sc{cvs} cannot determine who is actually making the change. As such, by default, @sc{cvs} disallows changes to be committed by users logged in as "root". (You can disable this option by passing the @code{--enable-rootcommit} option to @file{configure} and recompiling @sc{cvs}. On some systems this means editing the appropriate @file{config.h} file before building @sc{cvs}.) @item Too many arguments! This message is typically printed by the @file{log.pl} script which is in the @file{contrib} directory in the @sc{cvs} source distribution. In some versions of @sc{cvs}, @file{log.pl} has been part of the default @sc{cvs} installation. The @file{log.pl} script gets called from the @file{loginfo} administrative file. Check that the arguments passed in @file{loginfo} match what your version of @file{log.pl} expects. In particular, the @file{log.pl} from @sc{cvs} 1.3 and older expects the logfile as an argument whereas the @file{log.pl} from @sc{cvs} 1.5 and newer expects the logfile to be specified with a @samp{-f} option. Of course, if you don't need @file{log.pl} you can just comment it out of @file{loginfo}. @item cvs [update aborted]: unexpected EOF reading @var{file},v See @samp{EOF in key in RCS file}. @item cvs [login aborted]: unrecognized auth response from @var{server} This message typically means that the server is not set up properly. For example, if @file{inetd.conf} points to a nonexistent cvs executable. To debug it further, find the log file which inetd writes (@file{/var/log/messages} or whatever inetd uses on your system). For details, see @ref{Connection}, and @ref{Password authentication server}. @item cvs commit: Up-to-date check failed for `@var{file}' This means that someone else has committed a change to that file since the last time that you did a @code{cvs update}. So before proceeding with your @code{cvs commit} you need to @code{cvs update}. @sc{cvs} will merge the changes that you made and the changes that the other person made. If it does not detect any conflicts it will report @samp{M @var{file}} and you are ready to @code{cvs commit}. If it detects conflicts it will print a message saying so, will report @samp{C @var{file}}, and you need to manually resolve the conflict. For more details on this process see @ref{Conflicts example}. @item Usage: diff3 [-exEX3 [-i | -m] [-L label1 -L label3]] file1 file2 file3 @example Only one of [exEX3] allowed @end example This indicates a problem with the installation of @code{diff3} and @code{rcsmerge}. Specifically @code{rcsmerge} was compiled to look for GNU diff3, but it is finding unix diff3 instead. The exact text of the message will vary depending on the system. The simplest solution is to upgrade to a current version of @sc{cvs}, which does not rely on external @code{rcsmerge} or @code{diff3} programs. @item warning: unrecognized response `@var{text}' from cvs server If @var{text} contains a valid response (such as @samp{ok}) followed by an extra carriage return character (on many systems this will cause the second part of the message to overwrite the first part), then it probably means that you are using the @samp{:ext:} access method with a version of rsh, such as most non-unix rsh versions, which does not by default provide a transparent data stream. In such cases you probably want to try @samp{:server:} instead of @samp{:ext:}. If @var{text} is something else, this may signify a problem with your @sc{cvs} server. Double-check your installation against the instructions for setting up the @sc{cvs} server. @c FIXCVS: should be printing CR as \r or \015 or some @c such, probably. @item cvs commit: [@var{time}] waiting for @var{user}'s lock in @var{directory} This is a normal message, not an error. See @ref{Concurrency}, for more details. @item cvs commit: warning: editor session failed @cindex Exit status, of editor This means that the editor which @sc{cvs} is using exits with a nonzero exit status. Some versions of vi will do this even when there was not a problem editing the file. If so, point the @code{CVSEDITOR} environment variable to a small script such as: @example #!/bin/sh vi $* exit 0 @end example @c "warning: foo was lost" and "no longer pertinent" (both normal). @c Would be nice to write these up--they are @c potentially confusing for the new user. @end table @node Connection @appendixsec Trouble making a connection to a CVS server This section concerns what to do if you are having trouble making a connection to a @sc{cvs} server. If you are running the @sc{cvs} command line client running on Windows, first upgrade the client to @sc{cvs} 1.9.12 or later. The error reporting in earlier versions provided much less information about what the problem was. If the client is non-Windows, @sc{cvs} 1.9 should be fine. If the error messages are not sufficient to track down the problem, the next steps depend largely on which access method you are using. @table @code @cindex :ext:, troubleshooting @item :ext: Try running the rsh program from the command line. For example: "rsh servername cvs -v" should print @sc{cvs} version information. If this doesn't work, you need to fix it before you can worry about @sc{cvs} problems. @cindex :server:, troubleshooting @item :server: You don't need a command line rsh program to use this access method, but if you have an rsh program around, it may be useful as a debugging tool. Follow the directions given for :ext:. @cindex :pserver:, troubleshooting @item :pserver: Errors along the lines of "connection refused" typically indicate that inetd isn't even listening for connections on port 2401 whereas errors like "connection reset by peer", "received broken pipe signal", "recv() from server: EOF", or "end of file from server" typically indicate that inetd is listening for connections but is unable to start @sc{cvs} (this is frequently caused by having an incorrect path in @file{inetd.conf} or by firewall software rejecting the connection). "unrecognized auth response" errors are caused by a bad command line in @file{inetd.conf}, typically an invalid option or forgetting to put the @samp{pserver} command at the end of the line. Another less common problem is invisible control characters that your editor "helpfully" added without you noticing. One good debugging tool is to "telnet servername 2401". After connecting, send any text (for example "foo" followed by return). If @sc{cvs} is working correctly, it will respond with @example cvs [pserver aborted]: bad auth protocol start: foo @end example If instead you get: @example Usage: cvs [cvs-options] command [command-options-and-arguments] ... @end example @noindent then you're missing the @samp{pserver} command at the end of the line in @file{inetd.conf}; check to make sure that the entire command is on one line and that it's complete. Likewise, if you get something like: @example Unknown command: `pserved' CVS commands are: add Add a new file/directory to the repository ... @end example @noindent then you've misspelled @samp{pserver} in some way. If it isn't obvious, check for invisible control characters (particularly carriage returns) in @file{inetd.conf}. If it fails to work at all, then make sure inetd is working right. Change the invocation in @file{inetd.conf} to run the echo program instead of cvs. For example: @example 2401 stream tcp nowait root /bin/echo echo hello @end example After making that change and instructing inetd to re-read its configuration file, "telnet servername 2401" should show you the text hello and then the server should close the connection. If this doesn't work, you need to fix it before you can worry about @sc{cvs} problems. On AIX systems, the system will often have its own program trying to use port 2401. This is AIX's problem in the sense that port 2401 is registered for use with @sc{cvs}. I hear that there is an AIX patch available to address this problem. Another good debugging tool is the @samp{-d} (debugging) option to inetd. Consult your system documentation for more information. If you seem to be connecting but get errors like: @example cvs server: cannot open /root/.cvsignore: Permission denied cvs [server aborted]: can't chdir(/root): Permission denied @end example @noindent then you probably haven't specified @samp{-f} in @file{inetd.conf}. (In releases prior to @sc{cvs} 1.11.1, this problem can be caused by your system setting the @code{$HOME} environment variable for programs being run by inetd. In this case, you can either have inetd run a shell script that unsets @code{$HOME} and then runs @sc{cvs}, or you can use @code{env} to run @sc{cvs} with a pristine environment.) If you can connect successfully for a while but then can't, you've probably hit inetd's rate limit. (If inetd receives too many requests for the same service in a short period of time, it assumes that something is wrong and temporarily disables the service.) Check your inetd documentation to find out how to adjust the rate limit (some versions of inetd have a single rate limit, others allow you to set the limit for each service separately.) @end table @node Other problems @appendixsec Other common problems Here is a list of problems which do not fit into the above categories. They are in no particular order. @itemize @bullet @item On Windows, if there is a 30 second or so delay when you run a @sc{cvs} command, it may mean that you have your home directory set to @file{C:/}, for example (see @code{HOMEDRIVE} and @code{HOMEPATH} in @ref{Environment variables}). @sc{cvs} expects the home directory to not end in a slash, for example @file{C:} or @file{C:\cvs}. @c FIXCVS: CVS should at least detect this and print an @c error, presumably. @item If you are running @sc{cvs} 1.9.18 or older, and @code{cvs update} finds a conflict and tries to merge, as described in @ref{Conflicts example}, but doesn't tell you there were conflicts, then you may have an old version of @sc{rcs}. The easiest solution probably is to upgrade to a current version of @sc{cvs}, which does not rely on external @sc{rcs} programs. @end itemize @c --------------------------------------------------------------------- @node Credits @appendix Credits @cindex Contributors (manual) @cindex Credits (manual) Roland Pesch, then of Cygnus Support <@t{roland@@wrs.com}> wrote the manual pages which were distributed with @sc{cvs} 1.3. Much of their text was copied into this manual. He also read an early draft of this manual and contributed many ideas and corrections. The mailing-list @code{info-cvs} is sometimes informative. I have included information from postings made by the following persons: David G. Grubbs <@t{dgg@@think.com}>. Some text has been extracted from the man pages for @sc{rcs}. The @sc{cvs} @sc{faq} by David G. Grubbs has provided useful material. The @sc{faq} is no longer maintained, however, and this manual is about the closest thing there is to a successor (with respect to documenting how to use @sc{cvs}, at least). In addition, the following persons have helped by telling me about mistakes I've made: @display Roxanne Brunskill <@t{rbrunski@@datap.ca}>, Kathy Dyer <@t{dyer@@phoenix.ocf.llnl.gov}>, Karl Pingle <@t{pingle@@acuson.com}>, Thomas A Peterson <@t{tap@@src.honeywell.com}>, Inge Wallin <@t{ingwa@@signum.se}>, Dirk Koschuetzki <@t{koschuet@@fmi.uni-passau.de}> and Michael Brown <@t{brown@@wi.extrel.com}>. @end display The list of contributors here is not comprehensive; for a more complete list of who has contributed to this manual see the file @file{doc/ChangeLog} in the @sc{cvs} source distribution. @c --------------------------------------------------------------------- @node BUGS @appendix Dealing with bugs in CVS or this manual @cindex Bugs in this manual or CVS Neither @sc{cvs} nor this manual is perfect, and they probably never will be. If you are having trouble using @sc{cvs}, or think you have found a bug, there are a number of things you can do about it. Note that if the manual is unclear, that can be considered a bug in the manual, so these problems are often worth doing something about as well as problems with @sc{cvs} itself. @cindex Reporting bugs @cindex Bugs, reporting @cindex Errors, reporting @itemize @bullet @item If you want someone to help you and fix bugs that you report, there are companies which will do that for a fee. One such company is: @cindex Ximbiot @cindex Support, getting CVS support @example Ximbiot 319 S. River St. Harrisburg, PA 17104-1657 USA Email: info@@ximbiot.com Phone: (717) 579-6168 Fax: (717) 234-3125 http://ximbiot.com/ @end example @item If you got @sc{cvs} through a distributor, such as an operating system vendor or a vendor of freeware @sc{cd-rom}s, you may wish to see whether the distributor provides support. Often, they will provide no support or minimal support, but this may vary from distributor to distributor. @item If you have the skills and time to do so, you may wish to fix the bug yourself. If you wish to submit your fix for inclusion in future releases of @sc{cvs}, see the file @sc{hacking} in the @sc{cvs} source distribution. It contains much more information on the process of submitting fixes. @item There may be resources on the net which can help. Two good places to start are: @example http://www.cvshome.org http://www.loria.fr/~molli/cvs-index.html @end example If you are so inspired, increasing the information available on the net is likely to be appreciated. For example, before the standard @sc{cvs} distribution worked on Windows 95, there was a web page with some explanation and patches for running @sc{cvs} on Windows 95, and various people helped out by mentioning this page on mailing lists or newsgroups when the subject came up. @item It is also possible to report bugs to @code{bug-cvs}. Note that someone may or may not want to do anything with your bug report---if you need a solution consider one of the options mentioned above. People probably do want to hear about bugs which are particularly severe in consequences and/or easy to fix, however. You can also increase your odds by being as clear as possible about the exact nature of the bug and any other relevant information. The way to report bugs is to send email to @code{bug-cvs@@gnu.org}. Note that submissions to @code{bug-cvs} may be distributed under the terms of the @sc{gnu} Public License, so if you don't like this, don't submit them. There is usually no justification for sending mail directly to one of the @sc{cvs} maintainers rather than to @code{bug-cvs}; those maintainers who want to hear about such bug reports read @code{bug-cvs}. Also note that sending a bug report to other mailing lists or newsgroups is @emph{not} a substitute for sending it to @code{bug-cvs}. It is fine to discuss @sc{cvs} bugs on whatever forum you prefer, but there are not necessarily any maintainers reading bug reports sent anywhere except @code{bug-cvs}. @end itemize @cindex Known bugs in this manual or CVS People often ask if there is a list of known bugs or whether a particular bug is a known one. The file @sc{bugs} in the @sc{cvs} source distribution is one list of known bugs, but it doesn't necessarily try to be comprehensive. Perhaps there will never be a comprehensive, detailed list of known bugs. @c --------------------------------------------------------------------- @node Index @unnumbered Index @cindex Index @printindex cp @summarycontents @contents @bye Local Variables: fill-column: 55 End: texi2html-1.82/test/manuals/version.texi0000644000175000017500000000013311264347121022225 0ustar flichtenheldflichtenheld@set UPDATED 28 March 2002 @set UPDATED-MONTH March 2002 @set EDITION 4.2 @set VERSION 4.2 texi2html-1.82/test/manuals/Makefile.am0000644000175000017500000000044611264347121021710 0ustar flichtenheldflichtenheldEXTRA_DIST = cvs.texi info-stnd.texi texinfo.texi mini_ker.texi \ version-stnd.texi version.texi fdl.texi \ mini_ker_t2h.init cvs.init tests.txt res DISTCLEANFILES = l2h_tmp_dir.init tests.log tests.out distclean-local: rm -rf out diffs dist-hook: rm -rf `find $(distdir)/res -name CVS` texi2html-1.82/test/sectionning/0000755000175000017500000000000011264347115020533 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/sectionning.texi0000644000175000017500000000272111264347115023750 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top,First node,(dir) @top @menu * First node:: node 1 explaination no heading ? * and here ? With command @^{@dotless{i}} and a @cite{me}. heading * between node:: node in between heading or not ? * Second node:: node 2 heading with spaces around * Third node unnumbered:: unnumbered in Top menu * Last node no description:: description here @end menu @node First node,,Top,Top @chapter first node chapter first node chapter text @menu * unnumbered:: un * unnumbered2:: un2 * numbered:: nu @end menu @node unnumbered @unnumberedsec unnumbered section @menu * unnumbered sub:: un * numbered sub:: nu * unnumbered sub2:: un2 * numbered sub2:: nu2 @end menu @node unnumbered sub @unnumberedsubsec unnumbered subsection @node numbered sub @subsection numbered subsection @node unnumbered sub2 @unnumberedsubsec unnumbered subsection2 @node numbered sub2 @subsection numbered subsection2 @node unnumbered2 @unnumberedsec unnumbered section2 @menu * numbered sub3:: @end menu @node numbered sub3 @subsection numbered subsection3 @node numbered @section numbered section @node between node,,,Top between node, node without sectionning node @node Second node,Third node unnumbered,,Top Second node text @chapter second node chapter second node chapter text. @node Third node unnumbered @unnumbered unnumbered chapter unnumbered chapter text. @node Last node no description,,Third node unnumbered,Top @contents @bye texi2html-1.82/test/sectionning/top_without_node.texi0000644000175000017500000000052011264347115025015 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename top_without_node Garbage @node a node,,,(dir) @unnumbered unnumbered in unnumbered @top top section Top section @titlefont{The top section, no top node} @node second,,,(dir) @section second second node @chapter Chapter Text of chapter @chapter Chapter 2 Text of chapter 2 @bye texi2html-1.82/test/sectionning/before_node_and_section.texi0000644000175000017500000000066111264347115026246 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename before_node_and_section Garbage ref to Top @ref{Top}. @cindex index entry before anything Hey@footnote{a footnote}. An anchor @anchor{anchor1}. @menu * node1:: @end menu @node Top @top top @@top section Node top ref to anchor1@footnote{another footnote}, which is before @@node Top: @ref{anchor1}. @menu * node1:: @end menu @node node1 @chapter node1 chapter @printindex cp @bye texi2html-1.82/test/sectionning/section_before_chapter.texi0000644000175000017500000000012311264347115026116 0ustar flichtenheldflichtenheld\input texinfo.tex @c -*-texinfo-*- @section section @chapter chapter @bye texi2html-1.82/test/sectionning/equivalent_nodes.texi0000644000175000017500000000053711264347115025000 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename equivalent_nodes.info @node before top, @asis{node},,(dir) @node Top Equivalent nodes in node line and in menu. @menu * @strong{node}:: @end menu @node node @float Figure, @samp{node} A figure @end float @listoffloats Figure Ref to node @ref{node}. Ref to @@samp@{node@} @ref{@samp{node}}. @bye texi2html-1.82/test/sectionning/menu-whitespace.texi0000644000175000017500000000024011264347115024520 0ustar flichtenheldflichtenheld@setfilename top.info @node Top @top Top @menu * first:: @end menu @node first @chapter first @menu @c * second:: @end menu @node second @section second texi2html-1.82/test/sectionning/nodes_after_top_before_section.texi0000644000175000017500000000041311264347115027645 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename nodes_after_top_before_section.info @node Top Top node @menu * second node:: * third node:: @end menu @node second node, third node,Top,Top second node @node third node,,second node,Top @subsection subsection @bye texi2html-1.82/test/sectionning/menutextorder.texi0000644000175000017500000000054211264347115024334 0ustar flichtenheldflichtenheld\input texinfo @setfilename menutextorder.texi @menu * foo:: * bar:: @end menu @node bar @chapter bar @menu * onesub2:: @end menu @node onesub1 @section One sub 1 @node onesub2 @section One sub 2 @node foo @chapter foo @menu * sub1:: * sub3:: * sub2:: @end menu @node sub1 @section Sub1 @node sub2 @section Sub2 @node sub3 @section Sub3 @bye texi2html-1.82/test/sectionning/semi_auto.texi0000644000175000017500000000045711264347115023421 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename semi_auto.info @node Top @top Top @menu * Chap1:: * Section non auto:: @end menu @node Chap1 @chapter Chapter 1 @menu * Sec in chapter:: @end menu @node Sec in chapter @section Sec in chapter @node Section non auto,, Chap1, Top @section Section @bye texi2html-1.82/test/sectionning/at_commands_in_refs.texi0000644000175000017500000000102211264347115025413 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @comment %**start of header @setfilename at_commands_in_refs.info @node Top @top Top @menu * A @sc{sc} node @"i @"{@dotless{i}} @`{@=E} @l{} @,{@'C} @exclamdown{}:: @end menu @node A @sc{sc} node @"i @"{@dotless{i}} @`{@=E} @l{} @,{@'C} @exclamdown{} @chapter A @sc{sc} node @"i @"{@dotless{i}} @`{@=E} @l{} @,{@'C} @exclamdown{} see @ref{a @strong{strong} ref with @sc{sc}@comma{} a i trema @"i@comma{} a dotless i trema @"{@dotless{i}} @`{@=E} and exclamdown @exclamdown{},,,manual}. @bye texi2html-1.82/test/sectionning/section_in_unnumbered.texi0000644000175000017500000000523711264347115026013 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename section_in_unnumbered.info @setcontentsaftertitlepage @node Top @top Test section in unnumbered @contents Menu: @menu * chapter:: * unnumbered:: * chapter 2:: * chapter 3:: * unnumbered 4:: @end menu @node chapter @chapter chapter @menu * section in chapter:: @end menu @node section in chapter @section section in chapter @node unnumbered @unnumbered unnumbered @menu * section in unnumbered:: @end menu @node section in unnumbered @section section in unnumbered @node chapter 2 @chapter chapter 2 @menu * unnumberedsec 2:: * unnumberedsec 2-1:: @end menu @node unnumberedsec 2 @unnumberedsec unnumbered section 2 @menu * unnumbered sub 2:: * numbered sub 2:: * unnumbered sub2 2:: * numbered sub2 2:: @end menu @node unnumbered sub 2 @unnumberedsubsec unnumbered subsection 2 @node numbered sub 2 @subsection numbered subsection 2 @node unnumbered sub2 2 @unnumberedsubsec unnumbered subsection2 2 @node numbered sub2 2 @subsection numbered subsection2 2 @node unnumberedsec 2-1 @unnumberedsec unnumberedsec 2-1 @menu * numbered sub 2-1:: @end menu @node numbered sub 2-1 @subsection numbered subsection 2-1 @node chapter 3 @chapter chapter 3 @menu * unnumberedsec 3:: * section 3-1:: * unnumberedsec 3-2:: * section 3-3:: * unnumberedsec 3-4:: @end menu @node unnumberedsec 3 @unnumberedsec unnumbered section 3 @menu * unnumbered sub 3:: * numbered sub 3:: * unnumbered sub2 3:: * numbered sub2 3:: @end menu @node unnumbered sub 3 @unnumberedsubsec unnumbered subsection 3 @node numbered sub 3 @subsection numbered subsection 3 @node unnumbered sub2 3 @unnumberedsubsec unnumbered subsection2 3 @node numbered sub2 3 @subsection numbered subsection2 3 @node section 3-1 @section section 3-1 @node unnumberedsec 3-2 @unnumberedsec unnumberedsec 3-2 @menu * numbered sub 3-2:: @end menu @node numbered sub 3-2 @subsection numbered subsection 3-2 @node section 3-3 @section section 3-3 @menu * subsection 3-3:: @end menu @node subsection 3-3 @subsection subsection 3-3 @node unnumberedsec 3-4 @unnumberedsec unnumberedsec 3-4 @menu * numbered sub 3-4:: @end menu @node numbered sub 3-4 @subsection numbered subsection 3-4 @node unnumbered 4 @unnumbered unnumbered 4 @menu * unnumberedsec 4:: @end menu @node unnumberedsec 4 @unnumberedsec unnumbered section 4 @menu * unnumbered sub 4:: * numbered sub 4:: * unnumbered sub2 4:: * numbered sub2 4:: @end menu @node unnumbered sub 4 @unnumberedsubsec unnumbered subsection 4 @node numbered sub 4 @subsection numbered subsection 4 @node unnumbered sub2 4 @unnumberedsubsec unnumbered subsection2 4 @node numbered sub2 4 @subsection numbered subsection2 4 @c @contents @bye texi2html-1.82/test/sectionning/nodename_parentheses.texi0000644000175000017500000000074011264347115025616 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top @top The top node @menu * Node (with parentheses):: * Other node:: * (manual)node:: @end menu @node Node (with parentheses) @chapter Section (nodename with parentheses) Dummy section @node Other node @chapter Section (nodename without parentheses) Dummy link to @ref{Node (with parentheses)}. Dummy link to @ref{(manual)node}. @node (manual)node @chapter (manual)node Dummy section with (manual)node node syntax. @contents @bye texi2html-1.82/test/sectionning/novalidate.texi0000644000175000017500000000100211264347115023545 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename novalidate.info @novalidate @node first, Top, ,(dir) @xref{it doesn't exists} in first node @menu * node in menu before top:: * other node in menu before top:: @end menu @node node in menu before top,,,first node in menu before top text @node other node in menu before top, node not existing,,,first @node Top,,first @top top section Top node @menu * second node:: * other node not existing:: @end menu @node second node @chapter a chapter second node @bye texi2html-1.82/test/sectionning/two_footnotes_in_nodes.texi0000644000175000017500000000051011264347115026211 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename two_footnotes_in_nodes.info @node Top @top 2 footnotes in 2 nodes A@footnote{Footnote Top/1 para2} B@footnote{Footnote Top/2 para2} @menu * chapter:: @end menu @node chapter @chapter chapter C@footnote{Footnote chapter/1 para2} D@footnote{Footnote chapter/2 para2} @bye texi2html-1.82/test/sectionning/placed_things_before_element.texi0000644000175000017500000000111211264347115027260 0ustar flichtenheldflichtenheld\input texinfo @setfilename placed_things_before_element.info @settitle before element test @anchor{An anchor} Ref to the anchor: @ref{An anchor} Ref to the anchor in footnote: @ref{Anchor in footnote}. @footnote{In footnote. @anchor{Anchor in footnote} Ref to main text anchor @ref{An anchor} } @float , float anchor In float @end float Ref to float @ref{float anchor}. @menu * An anchor:: menu entry pointing to the anchor. @end menu @cindex index entry @section section Ref to anchor @ref{An anchor} Ref to footnote anchor @ref{Anchor in footnote} @bye texi2html-1.82/test/sectionning/raiselowersections.texi0000644000175000017500000000062011264347115025350 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top @top @menu * Chapter:: * Second chapter:: @end menu @node Chapter @chapter Chapter @menu @ifclear include * Chapter in included file:: @end ifclear @end menu @set do-top @lowersections @ifclear include @include section_file.texi @end ifclear @raisesections @clear do-top @node Second chapter @chapter Second chapter Second chapter @contents @bye texi2html-1.82/test/sectionning/Makefile.in0000644000175000017500000002233711264347115022607 0ustar flichtenheldflichtenheld# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = test/sectionning DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DATE = @PACKAGE_DATE@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ REQUIRE_DATA_DUMPER = @REQUIRE_DATA_DUMPER@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_DATA_DUMPER = @USE_DATA_DUMPER@ USE_UNICODE = @USE_UNICODE@ USE_UNIDECODE = @USE_UNIDECODE@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ am__leading_dot = @am__leading_dot@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = sectionning.texi novalidate.texi first_section_no_node.texi \ nodes_before_top.texi nodes_after_top.texi section_nodes_before_top.texi \ nodes_after_top_before_section.texi nodes_test.texi no_section.texi \ no_node.texi no_section_no_top.texi one_section.texi one_node.texi \ one_node_and_section.texi first_section_and_nodes.texi double_top.texi \ rec_nodes.texi lower_subsub.texi raiselowersections.texi \ top_without_node.texi before_node_and_section.texi \ section_before_chapter.texi node_footnote.texi at_commands_in_refs.texi \ test_refs.texi equivalent_nodes.texi nodename_parentheses.texi \ section_file.texi html-top.texi menu-whitespace.texi nodes_id.texi \ node-whitespace.texi two_footnotes_in_nodes.texi section_in_unnumbered.texi \ top.texi more_nodes_than_sections.texi \ placed_things_before_element.texi menutextorder.texi semi_auto.texi \ no_element.texi \ test_directions.init tests.txt res DISTCLEANFILES = l2h_tmp_dir.init tests.log tests.out all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/sectionning/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu test/sectionning/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-exec-am: install-html: install-html-am install-info: install-info-am install-man: install-pdf: install-pdf-am install-ps: install-ps-am installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic dist-hook \ distclean distclean-generic distclean-local distdir dvi dvi-am \ html html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am distclean-local: rm -rf out diffs dist-hook: rm -rf `find $(distdir)/res -name CVS` # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: texi2html-1.82/test/sectionning/first_section_no_node.texi0000644000175000017500000000033211264347115026000 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename first_section_no_node Garbage @unnumbered before nodes in unnumbered @node Top @top top section Top node @node second node,,,(dir) @section second second node @bye texi2html-1.82/test/sectionning/top.texi0000644000175000017500000000055311264347115022233 0ustar flichtenheldflichtenheld\input texinfo @setfilename top.info @settitle top test @c This traditional top node uses @ifinfo for testing. @c Therefore there will be warnings when processing with --html. @c The solution is to use @ifnottex instead. @ifinfo @node Top @top Top test Typical top node. @end ifinfo @menu * Subnode:: @end menu @node Subnode @chapter Subnode Subnode. @bye texi2html-1.82/test/sectionning/html-top.texi0000644000175000017500000000007511264347115023174 0ustar flichtenheldflichtenheld\input texinfo @setfilename top.info @node start @top @bye texi2html-1.82/test/sectionning/node-whitespace.texi0000644000175000017500000000062211264347115024505 0ustar flichtenheldflichtenheld\input texinfo.tex @c -*-texinfo-*- @setfilename node-whitespace.info @c Makeinfo should collapse whitespace in node names. @ifnottex @node Top @top Whitespace in Node Names @end ifnottex @menu * Chap 1.3 :: * Chap 1.4 :Chap 1.4. @end menu @node Chap 1.3 @chapter Chap 1.3 Can I reach here? @node Chap 1.4 @chapter Another space test How about here? @xref{Chap 1.3}. @bye texi2html-1.82/test/sectionning/nodes_id.texi0000644000175000017500000000230511264347115023212 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename nodes_id.info @node Top @top Test nodes before constructs for docbook id construction @menu * node1:: * node2:: * node3:: * node4:: * node5:: * node6:: * node7:: * node8:: * node9:: * node10:: * node11:: * node12:: * node13:: * node14:: @end menu @node node1,,Top,Top Text. @node node2,,,Top @table @asis @item table descr @end table @node node3,,,Top @multitable @columnfractions 6 7 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @item mu--ltitable item 2 @tab multitable tab 2 @item lone mu--ltitable item @end multitable @node node4,,,Top @inforef{chapter, cross ref name, file name} @node node5,,,Top @xref{node4, cross ref name, title, file name, manual}. @node node6,,,Top @xref{node5}. @node node7,,,Top @cartouche cartouche @end cartouche @node node8,,,Top @itemize @item item @end itemize @node node9,,,Top @code{some code}. @node node10,,,Top @group @example example @end example @end group @node node11,,,Top @footnote{@cite{footnote}}. @node node12,,,Top @float Text float @caption{Caption} @end float @node node13,,,Top @subheading subheading @node node14,,,Top @image{image}. @bye texi2html-1.82/test/sectionning/nodes_before_top.texi0000644000175000017500000000060411264347115024742 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename nodes_before_top @node first, Top, ,(dir) in first node @menu * node in menu before top:: @end menu @titlefont{A titlefont in a node} @node node in menu before top,,,first node in menu before top text @node Top,,first @top top section Top node @menu * second node:: @end menu @node second node @chapter a chapter second node @bye texi2html-1.82/test/sectionning/one_section.texi0000644000175000017500000000031111264347115023726 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename one_section Garbage @subsection The subsection anchor ref @anchor{ref}. @menu * (gcc):: ref to gcc @end menu ref to ref @ref{ref}. Some text. @bye texi2html-1.82/test/sectionning/double_top.texi0000644000175000017500000000035211264347115023562 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename double_top @node ToP, top Top node @menu * top:: * TOP:: myself @end menu @node top,,ToP,Top second node (@@node top,,ToP,Top). anchor@{TOP@} @anchor{TOP}. ref to TOP: @ref{TOP}. @bye texi2html-1.82/test/sectionning/one_node.texi0000644000175000017500000000031311264347115023211 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename one_node Garbage @node one node,,,(dir) Top node anchor ref @anchor{ref}. @menu * (gcc):: ref to gcc @end menu ref to ref @ref{ref}. Some text. @bye texi2html-1.82/test/sectionning/node_footnote.texi0000644000175000017500000000054511264347115024274 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename node_footnote.info @node Top @menu * @'a:: * @^a:: * chapter:: * @`a:: @end menu @node @'a node @'a, Footnote 1@footnote{foot 1 @'a}. @node @^a node @^a, Footnote 2@footnote{foot 2 @^a}. @node chapter @chapter chapter @menu * @`a:: @end menu @node @`a node @`a, Footnote 3@footnote{foot 3 @`a}. @bye texi2html-1.82/test/sectionning/res/0000755000175000017500000000000011264347115021324 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/equivalent_nodes_no_node/0000755000175000017500000000000011264347115026372 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/equivalent_nodes_no_node/equivalent_nodes.20000644000175000017500000000052311264347115032022 0ustar flichtenheldflichtenheld*** Node equivalent with `@samp{node}' already used `@strong{node}' *** Node equivalent with `node' already used `@samp{node}' ** node_next `@asis{node}' for `before top' not found ** ---> but equivalent node `@samp{node}' found *** Unknown node in menu entry `@strong{node}' (l. 12) ** ---> but equivalent node `@samp{node}' found texi2html-1.82/test/sectionning/res/equivalent_nodes_no_node/equivalent_nodes.html0000644000175000017500000000455611264347115032637 0ustar flichtenheldflichtenheld Untitled Document

    Top

    Equivalent nodes in node line and in menu.

    A figure

    Figure 1

    Figure 1

    Ref to node node.

    Ref to @samp{node} node.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/double_top/0000755000175000017500000000000011264347115023460 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/double_top/double_top.20000644000175000017500000000012711264347115025677 0ustar flichtenheldflichtenheld*** Duplicate node found: Top (l. 13) *** Duplicate node for anchor found: Top (l. 15) texi2html-1.82/test/sectionning/res/double_top/double_top.html0000644000175000017500000000427611264347115026513 0ustar flichtenheldflichtenheld Untitled Document

    Top

    Top node

    second node (@node top,,ToP,Top). anchor{TOP} . ref to TOP: Top.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/one_node_and_section/0000755000175000017500000000000011264347115025460 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/one_node_and_section/one_node_and_section.20000644000175000017500000000000011264347115031665 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/one_node_and_section/one_node_and_section.html0000644000175000017500000000446111264347115032507 0ustar flichtenheldflichtenheld Untitled Document

    Garbage

    Top node

    anchor ref .

    1. One section

    ref to ref ref.

    Some text(1).


    Footnotes

    (1)

    A footnote


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/raiselowersections/0000755000175000017500000000000011264347115025250 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/raiselowersections/raiselowersections.html0000644000175000017500000003253111264347115032066 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Top


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter

    \input texinfo


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 Chapter in included file


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.1 Section


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.1.1 Subsection


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. Second chapter

    Second chapter


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/raiselowersections/raiselowersections.20000644000175000017500000000000011264347115031245 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/menu-whitespace_xml/0000755000175000017500000000000011264347115025302 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/menu-whitespace_xml/menu-whitespace.20000644000175000017500000000000011264347115030451 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/menu-whitespace_xml/top.xml0000644000175000017500000000172611264347115026634 0ustar flichtenheldflichtenheld top.xml Top first (dir) Top first first first Top Top first second second second first
    second
    texi2html-1.82/test/sectionning/res/rec_nodes_no_node/0000755000175000017500000000000011264347115024766 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/rec_nodes_no_node/rec_nodes.html0000644000175000017500000000661611264347115027626 0ustar flichtenheldflichtenheld Untitled Document

    Top

    Top node

    second node (@node second node,,top,TOP).

    in node up node following second

    in node following second


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/rec_nodes_no_node/rec_nodes.20000644000175000017500000000000011264347115027000 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/no_node_chapter_split/0000755000175000017500000000000011264347115025666 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/no_node_chapter_split/no_node.html0000644000175000017500000000510111264347115030172 0ustar flichtenheldflichtenheld Untitled Document: top section
    [Top] [Contents] [Index] [ ? ]

    top section

    Top node


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/no_node_chapter_split/no_node.20000644000175000017500000000000011264347115027360 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/no_node_chapter_split/no_node_abt.html0000644000175000017500000001173611264347115031033 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/no_node_chapter_split/no_node_3.html0000644000175000017500000001716511264347115030431 0ustar flichtenheldflichtenheld Untitled Document: 1. Chapter
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter

    Text of chapter


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 Section of chapter


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.1 subsection 1


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.2 subsection 2


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/no_node_chapter_split/no_node_0.html0000644000175000017500000000722711264347115030424 0ustar flichtenheldflichtenheld Untitled Document: unnumbered

    Garbage

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    unnumbered

    in unnumbered


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/no_node_chapter_split/no_node_4.html0000644000175000017500000000732511264347115030427 0ustar flichtenheldflichtenheld Untitled Document: 2. Chapter 2
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. Chapter 2

    Text of chapter 2


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/no_node_chapter_split/no_node_2.html0000644000175000017500000000761211264347115030424 0ustar flichtenheldflichtenheld Untitled Document: 0.1 second
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    0.1 second

    second node


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/sectionning/0000755000175000017500000000000011264347115023644 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/sectionning/sectionning.20000644000175000017500000000000011264347115026235 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/sectionning/sectionning.html0000644000175000017500000005746211264347115027070 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Top


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. first node chapter

    first node chapter text


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    unnumbered section


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    unnumbered subsection


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.0.1 numbered subsection


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    unnumbered subsection2


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.0.2 numbered subsection2


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    unnumbered section2


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.0.3 numbered subsection3


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 numbered section

    between node, node without sectionning node


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Second node text

    2. second node chapter

    second node chapter text.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    unnumbered chapter

    unnumbered chapter text.


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/no_section_no_top_no_node/0000755000175000017500000000000011264347115026543 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/no_section_no_top_no_node/no_section_no_top.20000644000175000017500000000000011264347115032332 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/no_section_no_top_no_node/no_section_no_top.html0000644000175000017500000000402211264347115033145 0ustar flichtenheldflichtenheld Untitled Document

    Garbage

    first node

    second node


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/nodes_before_top/0000755000175000017500000000000011264347115024640 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/nodes_before_top/nodes_before_top.html0000644000175000017500000001524311264347115031047 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    in first node

    A titlefont in a node

    node in menu before top text

    top section

    Top node


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. a chapter

    second node


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/nodes_before_top/nodes_before_top.20000644000175000017500000000000011264347115030225 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/nodes_after_top_no_node/0000755000175000017500000000000011264347115026200 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/nodes_after_top_no_node/nodes_after_top.20000644000175000017500000000000011264347115031424 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/nodes_after_top_no_node/nodes_after_top.html0000644000175000017500000000430411264347115032242 0ustar flichtenheldflichtenheld Untitled Document

    Top

    Top node

    second node


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/section_before_chapter/0000755000175000017500000000000011264347115026020 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/section_before_chapter/section_before_chapter.20000644000175000017500000000000011264347115032565 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/section_before_chapter/section_before_chapter.html0000644000175000017500000001472511264347115033413 0ustar flichtenheldflichtenheld Untitled Document
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    0.1 section


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. chapter


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/node_footnote_use_node/0000755000175000017500000000000011264347115026047 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/node_footnote_use_node/chapter.html0000644000175000017500000000612611264347115030370 0ustar flichtenheldflichtenheld Untitled Document: 1. chapter
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. chapter


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/node_footnote_use_node/node_footnote_abt.html0000644000175000017500000001175011264347115032431 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/node_footnote_use_node/index.html0000644000175000017500000000327111264347115030047 0ustar flichtenheldflichtenheld Untitled Document: Top

    The node you are looking for is at Top.

    texi2html-1.82/test/sectionning/res/node_footnote_use_node/node_footnote.html0000644000175000017500000000623311264347115031603 0ustar flichtenheldflichtenheld Untitled Document: Top
    [Top] [Contents] [Index] [ ? ]

    Top


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/node_footnote_use_node/a.html0000644000175000017500000001337711264347115027170 0ustar flichtenheldflichtenheld Untitled Document: á
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    á

    node á, Footnote 1(1).



    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    â

    node â, Footnote 2(2).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    à

    node à, Footnote 3(3).


    Footnotes

    (1)

    foot 1 á

    (2)

    foot 2 â

    (3)

    foot 3 à


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/node_footnote_use_node/node_footnote.20000644000175000017500000000000011264347115030762 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/texi_html-top/0000755000175000017500000000000011264347115024121 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/texi_html-top/html-top.20000644000175000017500000000000011264347115025736 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/texi_html-top/html-top.texi0000644000175000017500000000007511264347115026562 0ustar flichtenheldflichtenheld\input texinfo @setfilename top.info @node start @top @bye texi2html-1.82/test/sectionning/res/texi_html-top/html-top.passtexi0000644000175000017500000000023211264347115027444 0ustar flichtenheldflichtenheldhtml-top.texi(,2) @setfilename top.info html-top.texi(,3) html-top.texi(,4) @node start html-top.texi(,5) @top html-top.texi(,6) html-top.texi(,7) @bye texi2html-1.82/test/sectionning/res/texi_html-top/html-top.passfirst0000644000175000017500000000023211264347115027622 0ustar flichtenheldflichtenheldhtml-top.texi(,2) @setfilename top.info html-top.texi(,3) html-top.texi(,4) @node start html-top.texi(,5) @top html-top.texi(,6) html-top.texi(,7) @bye texi2html-1.82/test/sectionning/res/no_section_directions/0000755000175000017500000000000011264347115025707 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/no_section_directions/no_section.html0000644000175000017500000005164011264347115030743 0ustar flichtenheldflichtenheld Titlefont before top node

    Garbage

    Titlefont before top node

    | node-Up href-Up name-Up | | node-Forward second node href-Forward #second-node name-Forward second node | | node-Back href-Back name-Back | | node-Next href-Next name-Next | | node-Prev href-Prev name-Prev | | node-FastForward href-FastForward name-FastForward | | node-FastBack href-FastBack name-FastBack | | node-This Top href-This #Top name-This Top | | node-NodeUp (dir) href-NodeUp dir.html#Top name-NodeUp (dir) | | node-NodePrev second node href-NodePrev #second-node name-NodePrev second node | | node-NodeNext second node href-NodeNext #second-node name-NodeNext second node | | node-Following second node href-Following #second-node name-Following second node |

    Top node


    | node-Up Top href-Up #Top name-Up Top | | node-Forward other node href-Forward #other-node name-Forward other node | | node-Back Top href-Back #Top name-Back Top | | node-Next href-Next name-Next | | node-Prev href-Prev name-Prev | | node-FastForward href-FastForward name-FastForward | | node-FastBack href-FastBack name-FastBack | | node-This second node href-This #second-node name-This second node | | node-NodeUp Top href-NodeUp #Top name-NodeUp Top | | node-NodePrev Top href-NodePrev #Top name-NodePrev Top | | node-NodeNext Top href-NodeNext #Top name-NodeNext Top | | node-Following other node href-Following #other-node name-Following other node |

    second node

    second node (@node second node,,top,TOP).


    | node-Up second node href-Up #second-node name-Up second node | | node-Forward href-Forward name-Forward | | node-Back second node href-Back #second-node name-Back second node | | node-Next href-Next name-Next | | node-Prev href-Prev name-Prev | | node-FastForward href-FastForward name-FastForward | | node-FastBack href-FastBack name-FastBack | | node-This other node href-This #other-node name-This other node | | node-NodeUp second node href-NodeUp #second-node name-NodeUp second node | | node-NodePrev second node href-NodePrev #second-node name-NodePrev second node | | node-NodeNext href-NodeNext name-NodeNext | | node-Following Top href-Following #Top name-Following Top |

    other node

    ref to TOP Top.


    | node-Up href-Up name-Up | | node-Forward href-Forward name-Forward | | node-Back href-Back name-Back | | node-Next href-Next name-Next | | node-Prev href-Prev name-Prev | | node-FastForward href-FastForward name-FastForward | | node-FastBack href-FastBack name-FastBack | | node-This href-This name-This About This Document | | node-NodeUp href-NodeUp name-NodeUp | | node-NodePrev href-NodePrev name-NodePrev | | node-NodeNext href-NodeNext name-NodeNext | | node-Following href-Following name-Following |

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/no_section_directions/no_section.20000644000175000017500000000000011264347115030120 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/two_footnotes_in_nodes/0000755000175000017500000000000011264347115026113 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/two_footnotes_in_nodes/chapter.html0000644000175000017500000000615711264347115030440 0ustar flichtenheldflichtenheld Untitled Document: 1. chapter
    node: chapter , Top , Top [ > ]

    1. chapter

    C1

    D2


    Footnotes

    [1] Footnote chapter/1

    para2

    [2] Footnote chapter/2

    para2


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/two_footnotes_in_nodes/index.html0000644000175000017500000000742011264347115030113 0ustar flichtenheldflichtenheld Untitled Document: 2 footnotes in 2 nodes
    node: Top , , (dir) [ > ]

    2 footnotes in 2 nodes

    A1

    B2


    Footnotes

    [1] Footnote Top/1

    para2

    [2] Footnote Top/2

    para2


    node: Top , , (dir) [ > ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/two_footnotes_in_nodes/two_footnotes_in_nodes.20000644000175000017500000000000011264347115032753 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/two_footnotes_in_nodes/two_footnotes_in_nodes_abt.html0000644000175000017500000001010711264347115034415 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    node: , , [ > ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ > ] Following Node following in node reading order 1.2.4

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    node: , , [ > ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/no_section_no_node/0000755000175000017500000000000011264347115025165 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/no_section_no_node/no_section.html0000644000175000017500000000502311264347115030213 0ustar flichtenheldflichtenheld Titlefont before top node

    Garbage

    Titlefont before top node

    Top node

    second node (@node second node,,top,TOP).

    ref to TOP Top.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/no_section_no_node/no_section.20000644000175000017500000000000011264347115027376 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/equivalent_nodes/0000755000175000017500000000000011264347115024671 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/equivalent_nodes/equivalent_nodes.20000644000175000017500000000052311264347115030321 0ustar flichtenheldflichtenheld*** Node equivalent with `@samp{node}' already used `@strong{node}' *** Node equivalent with `node' already used `@samp{node}' ** node_next `@asis{node}' for `before top' not found ** ---> but equivalent node `@samp{node}' found *** Unknown node in menu entry `@strong{node}' (l. 12) ** ---> but equivalent node `@samp{node}' found texi2html-1.82/test/sectionning/res/equivalent_nodes/equivalent_nodes.html0000644000175000017500000001661011264347115031130 0ustar flichtenheldflichtenheld Untitled Document
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    before top


    [Top] [Contents] [Index] [ ? ]

    Top

    Equivalent nodes in node line and in menu.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    node

    A figure

    Figure 1

    Figure 1

    Ref to node node.

    Ref to @samp{node} node.


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/first_section_no_node/0000755000175000017500000000000011264347115025700 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/first_section_no_node/first_section_no_node.html0000644000175000017500000001627411264347115033154 0ustar flichtenheldflichtenheld Untitled Document

    Garbage

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    before nodes

    in unnumbered


    [Top] [Contents] [Index] [ ? ]

    top section

    Top node


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    0.1 second

    second node


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/first_section_no_node/first_section_no_node.20000644000175000017500000000005111264347115032333 0ustar flichtenheldflichtenheld** `second node' doesn't appear in menus texi2html-1.82/test/sectionning/res/html-top_no_Top_node/0000755000175000017500000000000011264347115025413 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/html-top_no_Top_node/html-top.20000644000175000017500000000000011264347115027230 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/html-top_no_Top_node/html-top.html0000644000175000017500000000345211264347115030051 0ustar flichtenheldflichtenheld Untitled Document

    Top


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/rec_nodes/0000755000175000017500000000000011264347115023265 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/rec_nodes/rec_nodes.html0000644000175000017500000002530011264347115026114 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Top

    Top node


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    second node

    second node (@node second node,,top,TOP).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    other node


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    node up node following second

    in node up node following second


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    node following second

    in node following second


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/rec_nodes/rec_nodes.20000644000175000017500000000000011264347115025277 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/top_without_node/0000755000175000017500000000000011264347115024716 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/top_without_node/top_without_node.20000644000175000017500000000004411264347115030371 0ustar flichtenheldflichtenheld** `second' doesn't appear in menus texi2html-1.82/test/sectionning/res/top_without_node/top_without_node.html0000644000175000017500000002323411264347115031202 0ustar flichtenheldflichtenheld The top section, no top node

    Garbage

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    unnumbered

    in unnumbered


    [Top] [Contents] [Index] [ ? ]

    Top section

    The top section, no top node


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    0.1 second

    second node


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter

    Text of chapter


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. Chapter 2

    Text of chapter 2


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/sectionning_directions/0000755000175000017500000000000011264347115026067 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/sectionning_directions/sectionning.20000644000175000017500000000000011264347115030460 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/sectionning_directions/sectionning.html0000644000175000017500000021672011264347115031305 0ustar flichtenheldflichtenheld Untitled Document
    | node-Up href-Up name-Up | | node-Forward First node href-Forward #First-node name-Forward 1. first node chapter | | node-Back href-Back name-Back | | node-Next href-Next name-Next | | node-Prev href-Prev name-Prev | | node-FastForward First node href-FastForward #First-node name-FastForward 1. first node chapter | | node-FastBack href-FastBack name-FastBack | | node-This Top href-This #Top name-This | | node-NodeUp (dir) href-NodeUp dir.html#Top name-NodeUp (dir) | | node-NodePrev (dir) href-NodePrev dir.html#Top name-NodePrev (dir) | | node-NodeNext First node href-NodeNext #First-node name-NodeNext First node | | node-Following First node href-Following #First-node name-Following First node |

    Top


    | node-Up Top href-Up #Top name-Up | | node-Forward unnumbered href-Forward #unnumbered name-Forward unnumbered section | | node-Back Top href-Back #Top name-Back | | node-Next href-Next name-Next | | node-Prev href-Prev name-Prev | | node-FastForward Second node href-FastForward #Second-node name-FastForward 2. second node chapter | | node-FastBack Top href-FastBack #Top name-FastBack | | node-This First node href-This #First-node name-This 1. first node chapter | | node-NodeUp Top href-NodeUp #Top name-NodeUp Top | | node-NodePrev Top href-NodePrev #Top name-NodePrev Top | | node-NodeNext between node href-NodeNext #between-node name-NodeNext between node | | node-Following unnumbered href-Following #unnumbered name-Following unnumbered |

    1. first node chapter

    first node chapter text


    | node-Up First node href-Up #First-node name-Up 1. first node chapter | | node-Forward unnumbered sub href-Forward #unnumbered-sub name-Forward unnumbered subsection | | node-Back First node href-Back #First-node name-Back 1. first node chapter | | node-Next href-Next name-Next | | node-Prev href-Prev name-Prev | | node-FastForward Second node href-FastForward #Second-node name-FastForward 2. second node chapter | | node-FastBack First node href-FastBack #First-node name-FastBack 1. first node chapter | | node-This unnumbered href-This #unnumbered name-This unnumbered section | | node-NodeUp First node href-NodeUp #First-node name-NodeUp First node | | node-NodePrev First node href-NodePrev #First-node name-NodePrev First node | | node-NodeNext unnumbered2 href-NodeNext #unnumbered2 name-NodeNext unnumbered2 | | node-Following unnumbered sub href-Following #unnumbered-sub name-Following unnumbered sub |

    unnumbered section


    | node-Up unnumbered href-Up #unnumbered name-Up unnumbered section | | node-Forward numbered sub href-Forward #numbered-sub name-Forward 1.0.1 numbered subsection | | node-Back unnumbered href-Back #unnumbered name-Back unnumbered section | | node-Next href-Next name-Next | | node-Prev href-Prev name-Prev | | node-FastForward Second node href-FastForward #Second-node name-FastForward 2. second node chapter | | node-FastBack First node href-FastBack #First-node name-FastBack 1. first node chapter | | node-This unnumbered sub href-This #unnumbered-sub name-This unnumbered subsection | | node-NodeUp unnumbered href-NodeUp #unnumbered name-NodeUp unnumbered | | node-NodePrev unnumbered href-NodePrev #unnumbered name-NodePrev unnumbered | | node-NodeNext numbered sub href-NodeNext #numbered-sub name-NodeNext numbered sub | | node-Following numbered sub href-Following #numbered-sub name-Following numbered sub |

    unnumbered subsection


    | node-Up unnumbered href-Up #unnumbered name-Up unnumbered section | | node-Forward unnumbered sub2 href-Forward #unnumbered-sub2 name-Forward unnumbered subsection2 | | node-Back unnumbered sub href-Back #unnumbered-sub name-Back unnumbered subsection | | node-Next href-Next name-Next | | node-Prev unnumbered sub href-Prev #unnumbered-sub name-Prev unnumbered subsection | | node-FastForward Second node href-FastForward #Second-node name-FastForward 2. second node chapter | | node-FastBack First node href-FastBack #First-node name-FastBack 1. first node chapter | | node-This numbered sub href-This #numbered-sub name-This 1.0.1 numbered subsection | | node-NodeUp unnumbered href-NodeUp #unnumbered name-NodeUp unnumbered | | node-NodePrev unnumbered sub href-NodePrev #unnumbered-sub name-NodePrev unnumbered sub | | node-NodeNext unnumbered sub2 href-NodeNext #unnumbered-sub2 name-NodeNext unnumbered sub2 | | node-Following unnumbered sub2 href-Following #unnumbered-sub2 name-Following unnumbered sub2 |

    1.0.1 numbered subsection


    | node-Up unnumbered href-Up #unnumbered name-Up unnumbered section | | node-Forward numbered sub2 href-Forward #numbered-sub2 name-Forward 1.0.2 numbered subsection2 | | node-Back numbered sub href-Back #numbered-sub name-Back 1.0.1 numbered subsection | | node-Next href-Next name-Next | | node-Prev numbered sub href-Prev #numbered-sub name-Prev 1.0.1 numbered subsection | | node-FastForward Second node href-FastForward #Second-node name-FastForward 2. second node chapter | | node-FastBack First node href-FastBack #First-node name-FastBack 1. first node chapter | | node-This unnumbered sub2 href-This #unnumbered-sub2 name-This unnumbered subsection2 | | node-NodeUp unnumbered href-NodeUp #unnumbered name-NodeUp unnumbered | | node-NodePrev numbered sub href-NodePrev #numbered-sub name-NodePrev numbered sub | | node-NodeNext numbered sub2 href-NodeNext #numbered-sub2 name-NodeNext numbered sub2 | | node-Following numbered sub2 href-Following #numbered-sub2 name-Following numbered sub2 |

    unnumbered subsection2


    | node-Up unnumbered href-Up #unnumbered name-Up unnumbered section | | node-Forward unnumbered2 href-Forward #unnumbered2 name-Forward unnumbered section2 | | node-Back unnumbered sub2 href-Back #unnumbered-sub2 name-Back unnumbered subsection2 | | node-Next href-Next name-Next | | node-Prev unnumbered sub2 href-Prev #unnumbered-sub2 name-Prev unnumbered subsection2 | | node-FastForward Second node href-FastForward #Second-node name-FastForward 2. second node chapter | | node-FastBack First node href-FastBack #First-node name-FastBack 1. first node chapter | | node-This numbered sub2 href-This #numbered-sub2 name-This 1.0.2 numbered subsection2 | | node-NodeUp unnumbered href-NodeUp #unnumbered name-NodeUp unnumbered | | node-NodePrev unnumbered sub2 href-NodePrev #unnumbered-sub2 name-NodePrev unnumbered sub2 | | node-NodeNext unnumbered2 href-NodeNext #unnumbered2 name-NodeNext unnumbered2 | | node-Following unnumbered2 href-Following #unnumbered2 name-Following unnumbered2 |

    1.0.2 numbered subsection2


    | node-Up First node href-Up #First-node name-Up 1. first node chapter | | node-Forward numbered sub3 href-Forward #numbered-sub3 name-Forward 1.0.3 numbered subsection3 | | node-Back numbered sub2 href-Back #numbered-sub2 name-Back 1.0.2 numbered subsection2 | | node-Next href-Next name-Next | | node-Prev unnumbered href-Prev #unnumbered name-Prev unnumbered section | | node-FastForward Second node href-FastForward #Second-node name-FastForward 2. second node chapter | | node-FastBack First node href-FastBack #First-node name-FastBack 1. first node chapter | | node-This unnumbered2 href-This #unnumbered2 name-This unnumbered section2 | | node-NodeUp First node href-NodeUp #First-node name-NodeUp First node | | node-NodePrev unnumbered href-NodePrev #unnumbered name-NodePrev unnumbered | | node-NodeNext numbered href-NodeNext #numbered name-NodeNext numbered | | node-Following numbered sub3 href-Following #numbered-sub3 name-Following numbered sub3 |

    unnumbered section2


    | node-Up unnumbered2 href-Up #unnumbered2 name-Up unnumbered section2 | | node-Forward numbered href-Forward #numbered name-Forward 1.1 numbered section | | node-Back unnumbered2 href-Back #unnumbered2 name-Back unnumbered section2 | | node-Next href-Next name-Next | | node-Prev href-Prev name-Prev | | node-FastForward Second node href-FastForward #Second-node name-FastForward 2. second node chapter | | node-FastBack First node href-FastBack #First-node name-FastBack 1. first node chapter | | node-This numbered sub3 href-This #numbered-sub3 name-This 1.0.3 numbered subsection3 | | node-NodeUp unnumbered2 href-NodeUp #unnumbered2 name-NodeUp unnumbered2 | | node-NodePrev unnumbered2 href-NodePrev #unnumbered2 name-NodePrev unnumbered2 | | node-NodeNext numbered href-NodeNext #numbered name-NodeNext numbered | | node-Following numbered href-Following #numbered name-Following numbered |

    1.0.3 numbered subsection3


    | node-Up First node href-Up #First-node name-Up 1. first node chapter | | node-Forward Second node href-Forward #Second-node name-Forward 2. second node chapter | | node-Back numbered sub3 href-Back #numbered-sub3 name-Back 1.0.3 numbered subsection3 | | node-Next href-Next name-Next | | node-Prev unnumbered2 href-Prev #unnumbered2 name-Prev unnumbered section2 | | node-FastForward Second node href-FastForward #Second-node name-FastForward 2. second node chapter | | node-FastBack First node href-FastBack #First-node name-FastBack 1. first node chapter | | node-This numbered href-This #numbered name-This 1.1 numbered section | | node-NodeUp First node href-NodeUp #First-node name-NodeUp First node | | node-NodePrev unnumbered2 href-NodePrev #unnumbered2 name-NodePrev unnumbered2 | | node-NodeNext Second node href-NodeNext #Second-node name-NodeNext Second node | | node-Following Second node href-Following #Second-node name-Following Second node |

    1.1 numbered section

    between node, node without sectionning node


    | node-Up Top href-Up #Top name-Up | | node-Forward Third node unnumbered href-Forward #Third-node-unnumbered name-Forward unnumbered chapter | | node-Back numbered href-Back #numbered name-Back 1.1 numbered section | | node-Next href-Next name-Next | | node-Prev First node href-Prev #First-node name-Prev 1. first node chapter | | node-FastForward Third node unnumbered href-FastForward #Third-node-unnumbered name-FastForward unnumbered chapter | | node-FastBack First node href-FastBack #First-node name-FastBack 1. first node chapter | | node-This Second node href-This #Second-node name-This 2. second node chapter | | node-NodeUp Top href-NodeUp #Top name-NodeUp Top | | node-NodePrev between node href-NodePrev #between-node name-NodePrev between node | | node-NodeNext Third node unnumbered href-NodeNext #Third-node-unnumbered name-NodeNext Third node unnumbered | | node-Following Third node unnumbered href-Following #Third-node-unnumbered name-Following Third node unnumbered |

    Second node text

    2. second node chapter

    second node chapter text.


    | node-Up Top href-Up #Top name-Up | | node-Forward href-Forward name-Forward | | node-Back Second node href-Back #Second-node name-Back 2. second node chapter | | node-Next href-Next name-Next | | node-Prev Second node href-Prev #Second-node name-Prev 2. second node chapter | | node-FastForward href-FastForward name-FastForward | | node-FastBack Second node href-FastBack #Second-node name-FastBack 2. second node chapter | | node-This Third node unnumbered href-This #Third-node-unnumbered name-This unnumbered chapter | | node-NodeUp Top href-NodeUp #Top name-NodeUp Top | | node-NodePrev Second node href-NodePrev #Second-node name-NodePrev Second node | | node-NodeNext Last node no description href-NodeNext #Last-node-no-description name-NodeNext Last node no description | | node-Following Last node no description href-Following #Last-node-no-description name-Following Last node no description |

    unnumbered chapter

    unnumbered chapter text.


    | node-Up href-Up name-Up | | node-Forward href-Forward name-Forward | | node-Back href-Back name-Back | | node-Next href-Next name-Next | | node-Prev href-Prev name-Prev | | node-FastForward href-FastForward name-FastForward | | node-FastBack href-FastBack name-FastBack | | node-This href-This name-This Table of Contents | | node-NodeUp href-NodeUp name-NodeUp | | node-NodePrev href-NodePrev name-NodePrev | | node-NodeNext href-NodeNext name-NodeNext | | node-Following href-Following name-Following |

    Table of Contents


    | node-Up href-Up name-Up | | node-Forward href-Forward name-Forward | | node-Back href-Back name-Back | | node-Next href-Next name-Next | | node-Prev href-Prev name-Prev | | node-FastForward href-FastForward name-FastForward | | node-FastBack href-FastBack name-FastBack | | node-This href-This name-This About This Document | | node-NodeUp href-NodeUp name-NodeUp | | node-NodePrev href-NodePrev name-NodePrev | | node-NodeNext href-NodeNext name-NodeNext | | node-Following href-Following name-Following |

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/makeinfo_rec_nodes/0000755000175000017500000000000011264347115025136 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/makeinfo_rec_nodes/rec_nodes_2.html0000644000175000017500000000571411264347115030215 0ustar flichtenheldflichtenheld Untitled Document: other node
    node: other node , other node , second node [ > ]

    other node


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/makeinfo_rec_nodes/rec_nodes_3.html0000644000175000017500000000624411264347115030215 0ustar flichtenheldflichtenheld Untitled Document: node up node following second
    node: node up node following second , node following second , node following second [ > ]

    node up node following second

    in node up node following second


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/makeinfo_rec_nodes/index.html0000644000175000017500000000670711264347115027145 0ustar flichtenheldflichtenheld Untitled Document: Top
    node: Top , , (dir) [ > ]

    Top

    Top node


    node: Top , , (dir) [ > ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/makeinfo_rec_nodes/rec_nodes.20000644000175000017500000000000011264347115027150 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/makeinfo_rec_nodes/rec_nodes_4.html0000644000175000017500000000613011264347115030210 0ustar flichtenheldflichtenheld Untitled Document: node following second
    node: node following second , second node , node up node following second [ > ]

    node following second

    in node following second


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/makeinfo_rec_nodes/rec_nodes_1.html0000644000175000017500000000606211264347115030211 0ustar flichtenheldflichtenheld Untitled Document: second node
    node: second node , Top , Top [ > ]

    second node

    second node (@node second node,,top,TOP).


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/makeinfo_rec_nodes/rec_nodes_abt.html0000644000175000017500000001006411264347115030614 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    node: , , [ > ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ > ] Following Node following in node reading order 1.2.4

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    node: , , [ > ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/menu-whitespace/0000755000175000017500000000000011264347115024422 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/menu-whitespace/menu-whitespace.20000644000175000017500000000000011264347115027571 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/menu-whitespace/index.html0000644000175000017500000000636411264347115026430 0ustar flichtenheldflichtenheld Untitled Document: Top
    node: Top , , (dir) [ > ]

    Top


    node: Top , , (dir) [ > ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/menu-whitespace/second.html0000644000175000017500000000526311264347115026571 0ustar flichtenheldflichtenheld Untitled Document: 1.1 second
    node: second , first , first [ > ]

    1.1 second


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/menu-whitespace/top_abt.html0000644000175000017500000001006411264347115026741 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    node: , , [ > ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ > ] Following Node following in node reading order 1.2.4

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    node: , , [ > ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/menu-whitespace/first.html0000644000175000017500000000544411264347115026446 0ustar flichtenheldflichtenheld Untitled Document: 1. first
    node: first , Top , Top [ > ]

    1. first


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/nodes_test/0000755000175000017500000000000011264347115023473 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/nodes_test/nodes_test.html0000644000175000017500000001636111264347115026537 0ustar flichtenheldflichtenheld Untitled Document

    Garbage

    A title font in the text before a node

    [Top] [Contents] [Index] [ ? ]

    node in first but not the first...

    Top

    This is the top node...


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    node1 text

    Should be a warning for not being in menus and not having a menu entry in node1


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/nodes_test/nodes_test.20000644000175000017500000000053311264347115025726 0ustar flichtenheldflichtenheld** unnumbered without name (l. 32) ** node_prev `nonexistant node in prev for @@top' for `lop' not found ** `node below node1' doesn't appear in menus ** `node1' is up for `node below node1', but has no menu entry for this node *** Unknown node in menu entry `node inexistant in menu' (l. 19) *** Unknown node in menu entry `description' (l. 20) texi2html-1.82/test/sectionning/res/one_node_no_node/0000755000175000017500000000000011264347115024613 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/one_node_no_node/one_node.20000644000175000017500000000000011264347115026452 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/one_node_no_node/one_node.html0000644000175000017500000000411711264347115027272 0ustar flichtenheldflichtenheld Untitled Document

    Garbage

    Top node

    anchor ref .

    ref to ref ref.

    Some text.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/menutextorder/0000755000175000017500000000000011264347115024231 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/menutextorder/menutextorder.html0000644000175000017500000003232611264347115030032 0ustar flichtenheldflichtenheld Untitled Document
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. bar


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 One sub 1


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2 One sub 2


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. foo


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.1 Sub1


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2 Sub2


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3 Sub3


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/menutextorder/menutextorder.20000644000175000017500000000101611264347115027217 0ustar flichtenheldflichtenheld** menu entry without previous node: foo (l. 5) ** menu entry without previous node: bar (l. 6) ** No node following `bar' in menu, but `foo' follows in sectionning ** `onesub1' doesn't appear in menus ** `bar' is up for `onesub1', but has no menu entry for this node ** No node following `onesub1' in menu, but `onesub2' follows in sectionning ** `foo' doesn't appear in menus ** Node following `sub1' in menu `sub3' and in sectionning `sub2' differ ** No node following `sub2' in menu, but `sub3' follows in sectionning texi2html-1.82/test/sectionning/res/no_section_directions_no_node/0000755000175000017500000000000011264347115027410 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/no_section_directions_no_node/no_section.html0000644000175000017500000000502311264347115032436 0ustar flichtenheldflichtenheld Titlefont before top node

    Garbage

    Titlefont before top node

    Top node

    second node (@node second node,,top,TOP).

    ref to TOP Top.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/no_section_directions_no_node/no_section.20000644000175000017500000000000011264347115031621 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/test_refs/0000755000175000017500000000000011264347115023322 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/test_refs/test_refs.20000644000175000017500000000000011264347115025371 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/test_refs/test_refs.html0000644000175000017500000002250211264347115026207 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Test refs

    Testing distant nodes

    a node (manual)a node

     
    mono : manual.html#a-node
    split: ../manual/a-node.html#a-node
    

    : (manual):

     
    mono : manual.html#_003a
    split: ../manual/_003a.html#_003a
    

    Top (manual)Top

     
    mono : manual.html#Top
    split: ../manual/index.html#Top
    

    Testing manual name

    ../manual/doc.texi (../manual/doc.texi)node

     
    mono : doc.html#node
    split: ../doc/node.html#node
    

    Testing local nodes

    !_"#$%&'()*+-./;<=>?[\]^_`|~ !_"#$%&'()*+-./;<=>?[\]^_`|~

     
    target: #_0021_005f_0022_0023_0024_0025_0026_0027_0028_0029_002a_002b_002d_002e_002f_003b_003c_003d_003e_003f_005b_005c_005d_005e_005f_0060_007c_007e
    

    Top Test refs

     
    target: #Top
    

    local node local node

     
    target: #local-node
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter with nodes

     
    id: other-nodes
    

    Top Test refs

     
    target: #Top
    
     
    id: _0021_005f_0022_0023_0024_0025_0026_0027_0028_0029_002a_002b_002d_002e_002f_003b_003c_003d_003e_003f_005b_005c_005d_005e_005f_0060_007c_007e
    
     
    id: local-node
    

    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/first_section_and_nodes/0000755000175000017500000000000011264347115026211 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/first_section_and_nodes/first_section_and_nodes.20000644000175000017500000000005111264347115033155 0ustar flichtenheldflichtenheld** `second node' doesn't appear in menus texi2html-1.82/test/sectionning/res/first_section_and_nodes/first_section_and_nodes.html0000644000175000017500000001620311264347115033766 0ustar flichtenheldflichtenheld This is the top node

    Garbage

    Example with a section before the top node and another node

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    before nodes

    in unnumbered


    [Top] [Contents] [Index] [ ? ]

    Top node

    This is the top node

    second titlefont


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    This is the second node

    second node


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/nodes_after_top/0000755000175000017500000000000011264347115024477 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/nodes_after_top/nodes_after_top.20000644000175000017500000000000011264347115027723 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/nodes_after_top/nodes_after_top.html0000644000175000017500000001651711264347115030552 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Top

    Top node


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    second node

    second node


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    third node


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/no_element/0000755000175000017500000000000011264347115023451 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/no_element/no_element.html0000644000175000017500000000513611264347115026471 0ustar flichtenheldflichtenheld no_element test

    Ref to the anchor: An anchor

    Ref to the anchor in footnote: Anchor in footnote.

    (1)

    In float

    1

    Ref to float float anchor.


    Footnotes

    (1)

    In footnote.

    Ref to main text anchor An anchor


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/no_element/no_element.20000644000175000017500000000016311264347115025661 0ustar flichtenheldflichtenheld** menu entry without previous node: An anchor (l. 30) ** Index entry before document: @cindex index entry (l. 33) texi2html-1.82/test/sectionning/res/section_in_unnumbered/0000755000175000017500000000000011264347115025702 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/section_in_unnumbered/section_in_unnumbered.20000644000175000017500000000000011264347115032331 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/section_in_unnumbered/section_in_unnumbered.html0000644000175000017500000015456411264347115033165 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Test section in unnumbered

    Menu:


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. chapter


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 section in chapter


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    unnumbered


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2 section in unnumbered


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. chapter 2


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    unnumbered section 2


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    unnumbered subsection 2


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.0.1 numbered subsection 2


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    unnumbered subsection2 2


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.0.2 numbered subsection2 2


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    unnumberedsec 2-1


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.0.3 numbered subsection 2-1


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3. chapter 3


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    unnumbered section 3


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    unnumbered subsection 3


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.0.1 numbered subsection 3


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    unnumbered subsection2 3


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.0.2 numbered subsection2 3


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.1 section 3-1


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    unnumberedsec 3-2


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.1.1 numbered subsection 3-2


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.2 section 3-3


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.2.1 subsection 3-3


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    unnumberedsec 3-4


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.2.2 numbered subsection 3-4


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    unnumbered 4


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    unnumbered section 4


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    unnumbered subsection 4


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.2.3 numbered subsection 4


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    unnumbered subsection2 4


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    3.2.4 numbered subsection2 4


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/nodes_id_docbook/0000755000175000017500000000000011264347115024610 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/nodes_id_docbook/nodes_id.20000644000175000017500000000023511264347115026457 0ustar flichtenheldflichtenheldi18n: missing string See section `@asis{}`%{section_name}'@asis{}' in @cite{%{book}} i18n: missing string See %{ref} ** Cannot find @image file `image.txt' texi2html-1.82/test/sectionning/res/nodes_id_docbook/nodes_id.xml0000644000175000017500000000356711264347115027131 0ustar flichtenheldflichtenheld ]> Test nodes before constructs for docbook id construction Text. table descr mu–ltitable headitem another tab mu–ltitable item multitable tab mu–ltitable item 2 multitable tab 2 lone mu–ltitable item *note cross ref name: (file name)chapter See section ``title'' in manual. See . cartouche item some code. example footnote . float subheading . texi2html-1.82/test/sectionning/res/more_nodes_than_sections/0000755000175000017500000000000011264347115026377 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/more_nodes_than_sections/more_nodes_than_sections.20000644000175000017500000000000011264347115033523 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/more_nodes_than_sections/section-node.html0000644000175000017500000000626511264347115031665 0ustar flichtenheldflichtenheld Untitled Document: 1.1 section
    node: section node , Top , (dir) [ > ]

    1.1 section

    section.

    Table of Contents


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/more_nodes_than_sections/more_nodes_than_sections_abt.html0000644000175000017500000001022211264347115035163 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    node: , , [ > ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ > ] Following Node following in node reading order 1.2.4

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    node: , , [ > ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/more_nodes_than_sections/index.html0000644000175000017500000000714011264347115030376 0ustar flichtenheldflichtenheld Untitled Document: top section
    node: Top , , (dir) [ > ]

    top section

    Top node


    node: Top , , (dir) [ > ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/more_nodes_than_sections/more_nodes_than_sections_2.html0000644000175000017500000000556311264347115034572 0ustar flichtenheldflichtenheld Untitled Document: 1. Chapter
    node: , Top , Top [ > ]

    1. Chapter

    In chapter


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/more_nodes_than_sections/more_nodes_than_sections_0.html0000644000175000017500000000546111264347115034565 0ustar flichtenheldflichtenheld Untitled Document: Unnumbered
    node: , , Top [ > ]

    Unnumbered

    Unnumbered before top.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/placed_things_before_element/0000755000175000017500000000000011264347115027163 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/placed_things_before_element/placed_things_before_element.20000644000175000017500000000016311264347115035105 0ustar flichtenheldflichtenheld** menu entry without previous node: An anchor (l. 30) ** Index entry before document: @cindex index entry (l. 33) texi2html-1.82/test/sectionning/res/placed_things_before_element/placed_things_before_element.html0000644000175000017500000000546311264347115035720 0ustar flichtenheldflichtenheld before element test

    Ref to the anchor: An anchor

    Ref to the anchor in footnote: Anchor in footnote.

    (1)

    In float

    1.1

    Ref to float float anchor.

    1. section

    Ref to anchor An anchor

    Ref to footnote anchor Anchor in footnote


    Footnotes

    (1)

    In footnote.

    Ref to main text anchor An anchor


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/one_section/0000755000175000017500000000000011264347115023631 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/one_section/one_section.html0000644000175000017500000000416211264347115027027 0ustar flichtenheldflichtenheld Untitled Document

    Garbage

    1. The subsection

    anchor ref .

    ref to ref ref.

    Some text.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/one_section/one_section.20000644000175000017500000000000011264347115026207 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/top/0000755000175000017500000000000011264347115022126 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/top/top.20000644000175000017500000000006511264347115023014 0ustar flichtenheldflichtenheld** menu entry without previous node: Subnode (l. 17) texi2html-1.82/test/sectionning/res/top/top.html0000644000175000017500000000375111264347115023624 0ustar flichtenheldflichtenheld top test

    1. Subnode

    Subnode.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/makeinfo_novalidate_unsplit/0000755000175000017500000000000011264347115027101 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/makeinfo_novalidate_unsplit/novalidate.20000644000175000017500000000000011264347115031300 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/makeinfo_novalidate_unsplit/novalidate.html0000644000175000017500000001757611264347115032135 0ustar flichtenheldflichtenheld Untitled Document
    node: first , , (dir) [ > ]

    first

    See it doesn't exists in first node


    node: node in menu before top , first , first [ > ]

    node in menu before top

    node in menu before top text


    node: other node in menu before top , node in menu before top , first [ > ]

    other node in menu before top


    node: Top , first , (dir) [ > ]

    top section

    Top node


    node: second node , Top , Top [ > ]

    1. a chapter

    second node


    node: , , [ > ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ > ] Following Node following in node reading order 1.2.4

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/lower_subsub/0000755000175000017500000000000011264347115024037 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/lower_subsub/lower_subsub.html0000644000175000017500000003515611264347115027452 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Top


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 Section


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.1 Subsection


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.1.1 Subsubsection


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.1.2 Lowered subsec


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.1.3 Lowered subsubsection


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/lower_subsub/lower_subsub.20000644000175000017500000000027211264347115026636 0ustar flichtenheldflichtenheld** No node following `Lowered subsec' in menu, but `Lowered subsubsection' follows in sectionning ** `Subsection' is up for `Lowered subsubsection', but has no menu entry for this node texi2html-1.82/test/sectionning/res/test_refs_nodes/0000755000175000017500000000000011264347115024512 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/test_refs_nodes/other-nodes.html0000644000175000017500000001026411264347115027632 0ustar flichtenheldflichtenheld Untitled Document: 1. Chapter with nodes
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter with nodes

     
    id: other-nodes
    

    Top Top

     
    target: #Top
    

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/test_refs_nodes/test_refs_abt.html0000644000175000017500000001174011264347115030227 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/test_refs_nodes/index.html0000644000175000017500000000326111264347115026511 0ustar flichtenheldflichtenheld Untitled Document: Top

    The node you are looking for is at Top.

    texi2html-1.82/test/sectionning/res/test_refs_nodes/local-node.html0000644000175000017500000000637011264347115027423 0ustar flichtenheldflichtenheld Untitled Document: local node
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    local node

     
    id: local-node
    

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/test_refs_nodes/test_refs.20000644000175000017500000000000011264347115026561 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/test_refs_nodes/test_refs.html0000644000175000017500000001146511264347115027405 0ustar flichtenheldflichtenheld Untitled Document: Test refs
    [Top] [Contents] [Index] [ ? ]

    Test refs

    Testing distant nodes

    a node (manual)a node

     
    mono : manual.html#a-node
    split: ../manual/a-node.html#a-node
    

    : (manual):

     
    mono : manual.html#_003a
    split: ../manual/_003a.html#_003a
    

    Top (manual)Top

     
    mono : manual.html#Top
    split: ../manual/index.html#Top
    

    Testing manual name

    ../manual/doc.texi (../manual/doc.texi)node

     
    mono : doc.html#node
    split: ../doc/node.html#node
    

    Testing local nodes

    !_"#$%&'()*+-./;<=>?[\]^_`|~ !_"#$%&'()*+-./;<=>?[\]^_`|~

     
    target: #_0021_005f_0022_0023_0024_0025_0026_0027_0028_0029_002a_002b_002d_002e_002f_003b_003c_003d_003e_003f_005b_005c_005d_005e_005f_0060_007c_007e
    

    Top Top

     
    target: #Top
    

    local node local node

     
    target: #local-node
    

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    ././@LongLink0000000000000000000000000000030600000000000011564 Lustar rootroottexi2html-1.82/test/sectionning/res/test_refs_nodes/_0021_005f_0022_0023_0024_0025_0026_0027_0028_0029_002a_002b_002d_002e_002f_003b_003c_003d_003e_003f_005b_005c_005d_005e_005f_0060_007c_007e.htmltexi2html-1.82/test/sectionning/res/test_refs_nodes/_0021_005f_0022_0023_0024_0025_0026_0027_0028_000000644000175000017500000000671511264347115032232 0ustar flichtenheldflichtenheld Untitled Document: !_"#$%&'()*+-./;<=>?[\]^_`|~
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    !_"#$%&'()*+-./;<=>?[\]^_`|~

     
    id: _0021_005f_0022_0023_0024_0025_0026_0027_0028_0029_002a_002b_002d_002e_002f_003b_003c_003d_003e_003f_005b_005c_005d_005e_005f_0060_007c_007e
    

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/one_node/0000755000175000017500000000000011264347115023112 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/one_node/one_node.20000644000175000017500000000000011264347115024751 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/one_node/one_node.html0000644000175000017500000000415511264347115025573 0ustar flichtenheldflichtenheld Untitled Document

    Garbage

    one node

    Top node

    anchor ref .

    ref to ref ref.

    Some text.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/no_section_no_top/0000755000175000017500000000000011264347115025042 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/no_section_no_top/no_section_no_top.20000644000175000017500000000000011264347115030631 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/no_section_no_top/no_section_no_top.html0000644000175000017500000001425711264347115031457 0ustar flichtenheldflichtenheld Untitled Document

    Garbage

    [Top] [Contents] [Index] [ ? ]

    first

    first node


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    second node

    second node


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/node_footnote_end/0000755000175000017500000000000011264347115025014 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/node_footnote_end/node_footnote.html0000644000175000017500000001715511264347115030555 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Top


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    node á, Footnote 1(1).

    node â, Footnote 2(2).

    1. chapter

    node à, Footnote 3(3).


    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)

    foot 1 á

    (2)

    foot 2 â

    (3)

    foot 3 à


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/node_footnote_end/node_footnote.20000644000175000017500000000000011264347115027727 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/at_commands_in_refs/0000755000175000017500000000000011264347115025316 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/at_commands_in_refs/at_commands_in_refs.html0000644000175000017500000001527511264347115032210 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Top


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. A SC node ï ï Ē` ł Ć, ¡

    see (manual)a strong ref with SC, a i trema ï, a dotless i trema ï Ē` and exclamdown ¡.


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/at_commands_in_refs/at_commands_in_refs.20000644000175000017500000000000011264347115031361 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/before_node_and_section/0000755000175000017500000000000011264347115026141 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/before_node_and_section/before_node_and_section.20000644000175000017500000000017711264347115033046 0ustar flichtenheldflichtenheld** Index entry before document: @cindex index entry before anything (l. 7) ** menu entry without previous node: node1 (l. 12) texi2html-1.82/test/sectionning/res/before_node_and_section/before_node_and_section.html0000644000175000017500000002025011264347115033643 0ustar flichtenheldflichtenheld Untitled Document

    Garbage ref to Top top @top section. Hey(1). An anchor .

    [Top] [Contents] [Index] [ ? ]

    top @top section

    Node top

    ref to anchor1(2), which is before @node Top: anchor1.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. node1 chapter

    Jump to:   I  
    Index Entry Section

    I
    index entry before anythingtop @top section

    Jump to:   I  

    [Top] [Contents] [Index] [ ? ]

    Footnotes

    (1)

    a footnote

    (2)

    another footnote


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/no_node/0000755000175000017500000000000011264347115022745 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/no_node/no_node.html0000644000175000017500000003230111264347115025253 0ustar flichtenheldflichtenheld Untitled Document

    Garbage

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    unnumbered

    in unnumbered


    [Top] [Contents] [Index] [ ? ]

    top section

    Top node


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    0.1 second

    second node


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter

    Text of chapter


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 Section of chapter


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.1 subsection 1


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.2 subsection 2


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. Chapter 2

    Text of chapter 2


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/no_node/no_node.20000644000175000017500000000000011264347115024437 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/test_refs_chapter/0000755000175000017500000000000011264347115025030 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/test_refs_chapter/test_refs_1.html0000644000175000017500000001171611264347115030142 0ustar flichtenheldflichtenheld Untitled Document: 1. Chapter with nodes
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter with nodes

     
    id: other-nodes
    

    Top Test refs

     
    target: #Top
    
     
    id: _0021_005f_0022_0023_0024_0025_0026_0027_0028_0029_002a_002b_002d_002e_002f_003b_003c_003d_003e_003f_005b_005c_005d_005e_005f_0060_007c_007e
    
     
    id: local-node
    

    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/test_refs_chapter/test_refs_abt.html0000644000175000017500000001172211264347115030545 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/test_refs_chapter/test_refs.20000644000175000017500000000000011264347115027077 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/test_refs_chapter/test_refs.html0000644000175000017500000001126011264347115027714 0ustar flichtenheldflichtenheld Untitled Document: Test refs
    [Top] [Contents] [Index] [ ? ]

    Test refs

    Testing distant nodes

    a node (manual)a node

     
    mono : manual.html#a-node
    split: ../manual/a-node.html#a-node
    

    : (manual):

     
    mono : manual.html#_003a
    split: ../manual/_003a.html#_003a
    

    Top (manual)Top

     
    mono : manual.html#Top
    split: ../manual/index.html#Top
    

    Testing manual name

    ../manual/doc.texi (../manual/doc.texi)node

     
    mono : doc.html#node
    split: ../doc/node.html#node
    

    Testing local nodes

    !_"#$%&'()*+-./;<=>?[\]^_`|~ !_"#$%&'()*+-./;<=>?[\]^_`|~

     
    target: #_0021_005f_0022_0023_0024_0025_0026_0027_0028_0029_002a_002b_002d_002e_002f_003b_003c_003d_003e_003f_005b_005c_005d_005e_005f_0060_007c_007e
    

    Top Test refs

     
    target: #Top
    

    local node local node

     
    target: #local-node
    

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/no_node_directions/0000755000175000017500000000000011264347115025170 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/no_node_directions/no_node.html0000644000175000017500000012521111264347115027501 0ustar flichtenheldflichtenheld Untitled Document

    Garbage

    | node-Up href-Up #top-section name-Up top section | | node-Forward href-Forward #top-section name-Forward top section | | node-Back href-Back name-Back | | node-Next href-Next name-Next | | node-Prev href-Prev name-Prev | | node-FastForward href-FastForward #top-section name-FastForward top section | | node-FastBack href-FastBack name-FastBack | | node-This href-This #unnumbered name-This unnumbered | | node-NodeUp href-NodeUp #top-section name-NodeUp top section | | node-NodePrev href-NodePrev name-NodePrev | | node-NodeNext href-NodeNext #top-section name-NodeNext top section | | node-Following href-Following #second name-Following 0.1 second |

    unnumbered

    in unnumbered


    | node-Up href-Up name-Up | | node-Forward href-Forward #second name-Forward 0.1 second | | node-Back href-Back #unnumbered name-Back unnumbered | | node-Next href-Next name-Next | | node-Prev href-Prev name-Prev | | node-FastForward href-FastForward #Chapter name-FastForward 1. Chapter | | node-FastBack href-FastBack #unnumbered name-FastBack unnumbered | | node-This href-This #top-section name-This top section | | node-NodeUp href-NodeUp name-NodeUp | | node-NodePrev href-NodePrev #unnumbered name-NodePrev unnumbered | | node-NodeNext href-NodeNext #Chapter name-NodeNext 1. Chapter | | node-Following href-Following #Chapter name-Following 1. Chapter |

    top section

    Top node


    | node-Up href-Up #unnumbered name-Up unnumbered | | node-Forward href-Forward #Chapter name-Forward 1. Chapter | | node-Back href-Back #top-section name-Back top section | | node-Next href-Next name-Next | | node-Prev href-Prev name-Prev | | node-FastForward href-FastForward #top-section name-FastForward top section | | node-FastBack href-FastBack #unnumbered name-FastBack unnumbered | | node-This href-This #second name-This 0.1 second | | node-NodeUp href-NodeUp #unnumbered name-NodeUp unnumbered | | node-NodePrev href-NodePrev name-NodePrev | | node-NodeNext href-NodeNext name-NodeNext | | node-Following href-Following #Chapter name-Following 1. Chapter |

    0.1 second

    second node


    | node-Up href-Up #top-section name-Up top section | | node-Forward href-Forward #Section-of-chapter name-Forward 1.1 Section of chapter | | node-Back href-Back #second name-Back 0.1 second | | node-Next href-Next name-Next | | node-Prev href-Prev #unnumbered name-Prev unnumbered | | node-FastForward href-FastForward #Chapter-2 name-FastForward 2. Chapter 2 | | node-FastBack href-FastBack #top-section name-FastBack top section | | node-This href-This #Chapter name-This 1. Chapter | | node-NodeUp href-NodeUp #top-section name-NodeUp top section | | node-NodePrev href-NodePrev #top-section name-NodePrev top section | | node-NodeNext href-NodeNext #Chapter-2 name-NodeNext 2. Chapter 2 | | node-Following href-Following #Section-of-chapter name-Following 1.1 Section of chapter |

    1. Chapter

    Text of chapter


    | node-Up href-Up #Chapter name-Up 1. Chapter | | node-Forward href-Forward #subsection-1 name-Forward 1.1.1 subsection 1 | | node-Back href-Back #Chapter name-Back 1. Chapter | | node-Next href-Next name-Next | | node-Prev href-Prev name-Prev | | node-FastForward href-FastForward #Chapter-2 name-FastForward 2. Chapter 2 | | node-FastBack href-FastBack #Chapter name-FastBack 1. Chapter | | node-This href-This #Section-of-chapter name-This 1.1 Section of chapter | | node-NodeUp href-NodeUp #Chapter name-NodeUp 1. Chapter | | node-NodePrev href-NodePrev name-NodePrev | | node-NodeNext href-NodeNext name-NodeNext | | node-Following href-Following #subsection-1 name-Following 1.1.1 subsection 1 |

    1.1 Section of chapter


    | node-Up href-Up #Section-of-chapter name-Up 1.1 Section of chapter | | node-Forward href-Forward #subsection-2 name-Forward 1.1.2 subsection 2 | | node-Back href-Back #Section-of-chapter name-Back 1.1 Section of chapter | | node-Next href-Next name-Next | | node-Prev href-Prev name-Prev | | node-FastForward href-FastForward #Chapter-2 name-FastForward 2. Chapter 2 | | node-FastBack href-FastBack #Chapter name-FastBack 1. Chapter | | node-This href-This #subsection-1 name-This 1.1.1 subsection 1 | | node-NodeUp href-NodeUp #Section-of-chapter name-NodeUp 1.1 Section of chapter | | node-NodePrev href-NodePrev name-NodePrev | | node-NodeNext href-NodeNext #subsection-2 name-NodeNext 1.1.2 subsection 2 | | node-Following href-Following #subsection-2 name-Following 1.1.2 subsection 2 |

    1.1.1 subsection 1


    | node-Up href-Up #Section-of-chapter name-Up 1.1 Section of chapter | | node-Forward href-Forward #Chapter-2 name-Forward 2. Chapter 2 | | node-Back href-Back #subsection-1 name-Back 1.1.1 subsection 1 | | node-Next href-Next name-Next | | node-Prev href-Prev #subsection-1 name-Prev 1.1.1 subsection 1 | | node-FastForward href-FastForward #Chapter-2 name-FastForward 2. Chapter 2 | | node-FastBack href-FastBack #Chapter name-FastBack 1. Chapter | | node-This href-This #subsection-2 name-This 1.1.2 subsection 2 | | node-NodeUp href-NodeUp #Section-of-chapter name-NodeUp 1.1 Section of chapter | | node-NodePrev href-NodePrev #subsection-1 name-NodePrev 1.1.1 subsection 1 | | node-NodeNext href-NodeNext name-NodeNext | | node-Following href-Following #Chapter-2 name-Following 2. Chapter 2 |

    1.1.2 subsection 2


    | node-Up href-Up #top-section name-Up top section | | node-Forward href-Forward name-Forward | | node-Back href-Back #subsection-2 name-Back 1.1.2 subsection 2 | | node-Next href-Next name-Next | | node-Prev href-Prev #Chapter name-Prev 1. Chapter | | node-FastForward href-FastForward name-FastForward | | node-FastBack href-FastBack #Chapter name-FastBack 1. Chapter | | node-This href-This #Chapter-2 name-This 2. Chapter 2 | | node-NodeUp href-NodeUp #top-section name-NodeUp top section | | node-NodePrev href-NodePrev #Chapter name-NodePrev 1. Chapter | | node-NodeNext href-NodeNext name-NodeNext | | node-Following href-Following name-Following |

    2. Chapter 2

    Text of chapter 2


    | node-Up href-Up name-Up | | node-Forward href-Forward name-Forward | | node-Back href-Back name-Back | | node-Next href-Next name-Next | | node-Prev href-Prev name-Prev | | node-FastForward href-FastForward name-FastForward | | node-FastBack href-FastBack name-FastBack | | node-This href-This name-This About This Document | | node-NodeUp href-NodeUp name-NodeUp | | node-NodePrev href-NodePrev name-NodePrev | | node-NodeNext href-NodeNext name-NodeNext | | node-Following href-Following name-Following |

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/no_node_directions/no_node.20000644000175000017500000000000011264347115026662 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/node-whitespace/0000755000175000017500000000000011264347115024403 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/node-whitespace/node-whitespace.20000644000175000017500000000000011264347115027533 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/node-whitespace/index.html0000644000175000017500000000710311264347115026401 0ustar flichtenheldflichtenheld Untitled Document: Whitespace in Node Names
    node: Top , , (dir) [ > ]

    Whitespace in Node Names


    node: Top , , (dir) [ > ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/node-whitespace/Chap-1_002e3.html0000644000175000017500000000571111264347115027117 0ustar flichtenheldflichtenheld Untitled Document: 1. Chap 1.3
    node: Chap 1.3 , Top , Top [ > ]

    1. Chap 1.3

    Can I reach here?


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/node-whitespace/Chap-1_002e4.html0000644000175000017500000000562211264347115027121 0ustar flichtenheldflichtenheld Untitled Document: 2. Another space test
    node: Chap 1.4 , Chap 1.3 , Top [ > ]

    2. Another space test

    How about here? See Chap 1.3.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/node-whitespace/node-whitespace_abt.html0000644000175000017500000001011111264347115031170 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    node: , , [ > ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ > ] Following Node following in node reading order 1.2.4

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    node: , , [ > ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/no_section/0000755000175000017500000000000011264347115023464 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/no_section/no_section.html0000644000175000017500000001724211264347115026520 0ustar flichtenheldflichtenheld Titlefont before top node

    Garbage

    Titlefont before top node

    [Top] [Contents] [Index] [ ? ]

    Top node


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    second node

    second node (@node second node,,top,TOP).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    other node

    ref to TOP Top.


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/no_section/no_section.20000644000175000017500000000000011264347115025675 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/makeinfo_novalidate_split/0000755000175000017500000000000011264347115026536 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/makeinfo_novalidate_split/novalidate_2.html0000644000175000017500000000610711264347115031777 0ustar flichtenheldflichtenheld Untitled Document: other node in menu before top
    node: other node in menu before top , node in menu before top , first [ > ]

    other node in menu before top


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/makeinfo_novalidate_split/novalidate_1.html0000644000175000017500000000603211264347115031773 0ustar flichtenheldflichtenheld Untitled Document: node in menu before top
    node: node in menu before top , first , first [ > ]

    node in menu before top

    node in menu before top text


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/makeinfo_novalidate_split/index.html0000644000175000017500000000742011264347115030536 0ustar flichtenheldflichtenheld Untitled Document: top section
    node: Top , first , (dir) [ > ]

    top section

    Top node


    node: Top , first , (dir) [ > ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/makeinfo_novalidate_split/novalidate_abt.html0000644000175000017500000001007411264347115032402 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    node: , , [ > ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ > ] Following Node following in node reading order 1.2.4

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    node: , , [ > ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/makeinfo_novalidate_split/novalidate_0.html0000644000175000017500000000601711264347115031775 0ustar flichtenheldflichtenheld Untitled Document: first
    node: first , , (dir) [ > ]

    first

    See it doesn't exists in first node


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/makeinfo_novalidate_split/novalidate_4.html0000644000175000017500000000557511264347115032011 0ustar flichtenheldflichtenheld Untitled Document: 1. a chapter
    node: second node , Top , Top [ > ]

    1. a chapter

    second node


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/makeinfo_novalidate_split/novalidate.20000644000175000017500000000000011264347115030735 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/section_nodes_before_top/0000755000175000017500000000000011264347115026364 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/section_nodes_before_top/section_nodes_before_top.html0000644000175000017500000002541011264347115034314 0ustar flichtenheldflichtenheld Untitled Document
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Unnumbered before top


    [Top] [Contents] [Index] [ ? ]

    Top


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A. Concept index

    Jump to:   A   F  
    Index Entry Section

    A
    after indexB. second appendix
    after index nodeB. second appendix

    F
    first before topUnnumbered before top

    Jump to:   A   F  

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    B. second appendix


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/section_nodes_before_top/section_nodes_before_top.20000644000175000017500000000000011264347115033475 0ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/nodes_after_top_before_section/0000755000175000017500000000000011264347115027545 5ustar flichtenheldflichtenheld././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootroottexi2html-1.82/test/sectionning/res/nodes_after_top_before_section/nodes_after_top_before_section.htmltexi2html-1.82/test/sectionning/res/nodes_after_top_before_section/nodes_after_top_before_section.ht0000644000175000017500000000573111264347115036331 0ustar flichtenheldflichtenheld Untitled Document: Top
    [Top] [Contents] [Index] [ ? ]

    Top

    Top node


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    ././@LongLink0000000000000000000000000000015100000000000011562 Lustar rootroottexi2html-1.82/test/sectionning/res/nodes_after_top_before_section/nodes_after_top_before_section_1.htmltexi2html-1.82/test/sectionning/res/nodes_after_top_before_section/nodes_after_top_before_section_1.0000644000175000017500000000727611264347115036223 0ustar flichtenheldflichtenheld Untitled Document: 1. subsection
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    second node

    1. subsection


    [ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/nodes_after_top_before_section/nodes_after_top_before_section.20000644000175000017500000000000011264347115036037 0ustar flichtenheldflichtenheld././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootroottexi2html-1.82/test/sectionning/res/nodes_after_top_before_section/nodes_after_top_before_section_abt.htmltexi2html-1.82/test/sectionning/res/nodes_after_top_before_section/nodes_after_top_before_section_ab0000644000175000017500000001177411264347115036365 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/semi_auto/0000755000175000017500000000000011264347115023311 5ustar flichtenheldflichtenheldtexi2html-1.82/test/sectionning/res/semi_auto/semi_auto.html0000644000175000017500000002160311264347115026166 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Top


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter 1


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 Sec in chapter


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2 Section


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/sectionning/res/semi_auto/semi_auto.20000644000175000017500000000013611264347115025361 0ustar flichtenheldflichtenheld** No node following `Sec in chapter' in menu, but `Section non auto' follows in sectionning texi2html-1.82/test/sectionning/first_section_and_nodes.texi0000644000175000017500000000057311264347115026320 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename first_section_and_nodes.info Garbage @titlefont{Example with a section before the top node and another node} @unnumbered before nodes in unnumbered @node Top Top node @titlefont{ } @titlefont{This is the top node} @titlefont{second titlefont} @node second node,,,(dir) @titlefont{This is the second node} second node @bye texi2html-1.82/test/sectionning/nodes_test.texi0000644000175000017500000000124311264347115023575 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename nodes_test.info Garbage @titlefont{A title font in the text before a node} @node first,node1,lop,lop @c @subsection s1 node in first but not the first... @node lop, first,nonexistant node in prev for @@top,(texinfo) Copying @top @menu * first:: * node1:: * node inexistant in menu:: non existing * node1:description. Description and node reversed * description:node1. Right description and node * (info):: @end menu @node Top This is the top node... @node node1 @c Some text @unnumbered node1 text @node node below node1,,,node1 Should be a warning for not being in menus and not having a menu entry in node1 @bye texi2html-1.82/test/sectionning/lower_subsub.texi0000644000175000017500000000104711264347115024143 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @node Top @top @menu * Chapter:: @end menu @node Chapter @chapter Chapter @menu * Section:: @end menu @node Section @section Section @menu * Subsection:: @end menu @node Subsection @subsection Subsection @menu * Subsubsection:: * Lowered subsec:: @end menu @node Subsubsection @subsubsection Subsubsection @lowersections @node Lowered subsec @subsection Lowered subsec @menu * Lowered subsubsection:: @end menu @node Lowered subsubsection @subsubsection Lowered subsubsection @raisesections @contents @bye texi2html-1.82/test/sectionning/more_nodes_than_sections.texi0000644000175000017500000000045411264347115026504 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename more_nodes_than_sections.info @unnumbered Unnumbered Unnumbered before top. @node Top @top top section Top node @menu * section node:: @end menu @chapter Chapter In chapter @node section node,,Top,(dir) @section section section. @contents @bye texi2html-1.82/test/sectionning/tests.txt0000644000175000017500000000530411264347115022440 0ustar flichtenheldflichtenheldtexi html-top.texi top top.texi sectionning sectionning.texi sectionning_directions sectionning.texi -init test_directions.init makeinfo_novalidate_split novalidate.texi -init makeinfo.init -no-node-file makeinfo_novalidate_unsplit novalidate.texi -init makeinfo.init -split no -no-node-file first_section_no_node first_section_no_node.texi nodes_before_top nodes_before_top.texi nodes_after_top nodes_after_top.texi --use-nodes nodes_after_top_no_node nodes_after_top.texi section_nodes_before_top section_nodes_before_top.texi nodes_after_top_before_section nodes_after_top_before_section.texi -split chapter nodes_test nodes_test.texi no_section_no_node no_section.texi no_section no_section.texi --use-nodes no_section_directions no_section.texi -init test_directions.init --use-nodes no_section_directions_no_node no_section.texi -init test_directions.init no_node no_node.texi no_node_directions no_node.texi -init test_directions.init no_node_chapter_split no_node.texi -split chapter no_section_no_top no_section_no_top.texi --use-nodes no_section_no_top_no_node no_section_no_top.texi one_section one_section.texi one_node_no_node one_node.texi one_node one_node.texi --use-nodes one_node_and_section one_node_and_section.texi first_section_and_nodes first_section_and_nodes.texi double_top double_top.texi rec_nodes rec_nodes.texi --use-nodes rec_nodes_no_node rec_nodes.texi makeinfo_rec_nodes rec_nodes.texi -init makeinfo.init -no-node-files lower_subsub lower_subsub.texi raiselowersections raiselowersections.texi top_without_node top_without_node.texi before_node_and_section before_node_and_section.texi section_before_chapter section_before_chapter.texi node_footnote_end node_footnote.texi --footnote-style=end node_footnote_use_node node_footnote.texi -use-node -node-files --footnote-style=end -split node test_refs test_refs.texi test_refs_chapter test_refs.texi -split chapter test_refs_nodes test_refs.texi -split node -node-files -use-nodes at_commands_in_refs at_commands_in_refs.texi equivalent_nodes equivalent_nodes.texi --use-nodes equivalent_nodes_no_node equivalent_nodes.texi html-top_no_Top_node html-top.texi menu-whitespace menu-whitespace.texi -init makeinfo.init menu-whitespace_xml menu-whitespace.texi -init xml.init node-whitespace node-whitespace.texi -init makeinfo.init #nodename_parentheses nodename_parentheses.texi nodes_id_docbook nodes_id.texi --init docbook.init two_footnotes_in_nodes two_footnotes_in_nodes.texi -init makeinfo.init section_in_unnumbered section_in_unnumbered.texi more_nodes_than_sections more_nodes_than_sections.texi -init makeinfo.init no_element no_element.texi placed_things_before_element placed_things_before_element.texi menutextorder menutextorder.texi semi_auto semi_auto.texi texi2html-1.82/test/sectionning/no_section_no_top.texi0000644000175000017500000000027411264347115025147 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename no_section_no_top Garbage @node first,,,(dir) first node @menu * second node:: @end menu @node second node,,first,first second node @bye texi2html-1.82/test/sectionning/section_nodes_before_top.texi0000644000175000017500000000120111264347115026460 0ustar flichtenheldflichtenheld\input texinfo.tex @c -*-texinfo-*- @setfilename section_nodes_before_top.info @node first before top, second before top,,Top @cindex first before top @node second before top, Top, first before top,Top @unnumbered Unnumbered before top @node Top,,second before top,(dir) @top Top @menu * first before top:: * second before top:: * index:: * after index:: * after index node:: @end menu @node index, after index, Top,Top @appendix Concept index @printindex cp @node after index, after index node, index, Top @appendix second appendix @cindex after index @node after index node,, after index, Top @cindex after index node @bye texi2html-1.82/test/sectionning/no_element.texi0000644000175000017500000000072211264347115023554 0ustar flichtenheldflichtenheld\input texinfo @setfilename no_element.info @settitle no_element test @anchor{An anchor} Ref to the anchor: @ref{An anchor} Ref to the anchor in footnote: @ref{Anchor in footnote}. @footnote{In footnote. @anchor{Anchor in footnote} Ref to main text anchor @ref{An anchor} } @float , float anchor In float @end float Ref to float @ref{float anchor}. @menu * An anchor:: menu entry pointing to the anchor. @end menu @cindex index entry @bye texi2html-1.82/test/sectionning/section_file.texi0000644000175000017500000000073611264347115024077 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @ifclear do-top @node Top @top @menu * Chapter in included file:: @end menu @end ifclear @node Chapter in included file @chapter Chapter in included file @menu * Section:: @end menu @node Section @section Section @menu * Subsection:: @end menu @node Subsection @subsection Subsection @ifset subsub @menu * Subsubsection:: @end menu @node Subsubsection @subsubsection Subsubsection @end ifset @ifclear do-top @contents @bye @end ifclear texi2html-1.82/test/sectionning/rec_nodes.texi0000644000175000017500000000125211264347115023367 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename rec_nodes @node ToP Top node @menu * second node:: * node following second:: @end menu @node second node,,Top,Top second node (@@node second node,,top,TOP). @c anchor TOP: @anchor{TOP}. @menu * other node:: * second node:: @end menu @node other node,,,second node @c anchor top @anchor{top}. @c ref to TOP @ref{TOP}. @menu * other node:: @end menu @node node up node following second,,,node following second @menu * node following second:: @end menu in node up node following second @node node following second,,,node up node following second in node following second @menu * node up node following second:: @end menu @bye texi2html-1.82/test/sectionning/one_node_and_section.texi0000644000175000017500000000037511264347115025567 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename one_node_and_section Garbage @node one node Top node anchor ref @anchor{ref}. @subsection One section @menu * (gcc):: ref to gcc @end menu ref to ref @ref{ref}. Some text@footnote{A footnote}. @bye texi2html-1.82/test/sectionning/no_section.texi0000644000175000017500000000061111264347115023564 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename no_section Garbage @titlefont{Titlefont before top node} @node ToP Top node @menu * second node:: * TOP:: myself @end menu @node second node,,top,TOP second node (@@node second node,,top,TOP). @c anchor TOP: @anchor{TOP}. @menu * other node:: @end menu @node other node,,,second node @c anchor top @anchor{top}. ref to TOP @ref{TOP}. @bye texi2html-1.82/test/sectionning/Makefile.am0000644000175000017500000000207111264347115022567 0ustar flichtenheldflichtenheldEXTRA_DIST = sectionning.texi novalidate.texi first_section_no_node.texi \ nodes_before_top.texi nodes_after_top.texi section_nodes_before_top.texi \ nodes_after_top_before_section.texi nodes_test.texi no_section.texi \ no_node.texi no_section_no_top.texi one_section.texi one_node.texi \ one_node_and_section.texi first_section_and_nodes.texi double_top.texi \ rec_nodes.texi lower_subsub.texi raiselowersections.texi \ top_without_node.texi before_node_and_section.texi \ section_before_chapter.texi node_footnote.texi at_commands_in_refs.texi \ test_refs.texi equivalent_nodes.texi nodename_parentheses.texi \ section_file.texi html-top.texi menu-whitespace.texi nodes_id.texi \ node-whitespace.texi two_footnotes_in_nodes.texi section_in_unnumbered.texi \ top.texi more_nodes_than_sections.texi \ placed_things_before_element.texi menutextorder.texi semi_auto.texi \ no_element.texi \ test_directions.init tests.txt res DISTCLEANFILES = l2h_tmp_dir.init tests.log tests.out distclean-local: rm -rf out diffs dist-hook: rm -rf `find $(distdir)/res -name CVS` texi2html-1.82/test/sectionning/test_directions.init0000644000175000017500000000125411264347115024624 0ustar flichtenheldflichtenheld @SECTION_BUTTONS = (); foreach my $direction (('Up', 'Forward', 'Back', 'Next', 'Prev', 'FastForward', 'FastBack', 'This', 'NodeUp', 'NodePrev', 'NodeNext', 'Following' )) # 'NodePrev', 'NodeNext', 'ToplevelPrev', 'ToplevelNext', 'Following' )) { my $direction_node = "node-".$direction; my $direction_href = "href-".$direction; my $direction_name = "name-".$direction; push @SECTION_BUTTONS, \"|", \$direction_node, \$Texi2HTML::NODE{$direction}, \$direction_href, \$Texi2HTML::HREF{$direction}, \$direction_name, \$Texi2HTML::NAME{$direction}, \"|"; } @MISC_BUTTONS = @SECTION_BUTTONS; 1; texi2html-1.82/test/sectionning/no_node.texi0000644000175000017500000000050211264347115023044 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename no_node Garbage @unnumbered unnumbered in unnumbered @top top section Top node @section second second node @chapter Chapter Text of chapter @section Section of chapter @subsection subsection 1 @subsection subsection 2 @chapter Chapter 2 Text of chapter 2 @bye texi2html-1.82/test/sectionning/test_refs.texi0000644000175000017500000000325311264347115023427 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename test_refs.info @node Top @top Test refs @menu * other nodes:: @end menu @subheading Testing distant nodes @verb{: a node :} @ref{ a node ,,, manual}@* @example mono : manual.html#a-node split: ../manual/a-node.html#a-node @end example @verb{;:;} @ref{:,,,manual} @example mono : manual.html#_003a split: ../manual/_003a.html#_003a @end example @verb{:Top:} @ref{ top ,,, manual}@* @example mono : manual.html#Top split: ../manual/index.html#Top @end example @subheading Testing manual name @verb{:../manual/doc.texi:} @ref{node,,, ../manual/doc.texi}@* @example mono : doc.html#node split: ../doc/node.html#node @end example @subheading Testing local nodes @verb{:!_"#$%&'()*+-./;<=>?[\]^_`|~:} @ref{!_"#$%&'()*+-./;<=>?[\]^_`|~}@* @example target: #_0021_005f_0022_0023_0024_0025_0026_0027_0028_0029_002a_002b_002d_002e_002f_003b_003c_003d_003e_003f_005b_005c_005d_005e_005f_0060_007c_007e @end example @verb{:Top:} @ref{ Top} @example target: #Top @end example @verb{: local node:} @ref{ local node} @example target: #local-node @end example @node other nodes, !_"#$%&'()*+-./;<=>?[\]^_`|~, Top, Top @chapter Chapter with nodes @example id: other-nodes @end example @verb{:Top:} @ref{ Top} @example target: #Top @end example @menu * !_"#$%&'()*+-./;<=>?[\]^_`|~:: * local node:: @end menu @node !_"#$%&'()*+-./;<=>?[\]^_`|~,local node,other nodes, other nodes @example id: _0021_005f_0022_0023_0024_0025_0026_0027_0028_0029_002a_002b_002d_002e_002f_003b_003c_003d_003e_003f_005b_005c_005d_005e_005f_0060_007c_007e @end example @node local node,,!_"#$%&'()*+-./;<=>?[\]^_`|~,other nodes @example id: local-node @end example @bye texi2html-1.82/test/sectionning/nodes_after_top.texi0000644000175000017500000000034511264347115024603 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename nodes_after_top.info @node Top Top node @menu * second node:: * third node:: @end menu @node second node, third node,Top,Top second node @node third node,,second node,Top @bye texi2html-1.82/test/long_tests0000755000175000017500000000022611264347123020321 0ustar flichtenheldflichtenheld#! /bin/sh if [ z"$srcdir" = 'z' ]; then srcdir=. fi "$srcdir"/tests.sh \ misc manuals xemacs_manual texi2html_manual tar_manual singular_manual texi2html-1.82/test/Makefile.in0000644000175000017500000004303111264347122020257 0ustar flichtenheldflichtenheld# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = test DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DATE = @PACKAGE_DATE@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ REQUIRE_DATA_DUMPER = @REQUIRE_DATA_DUMPER@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_DATA_DUMPER = @USE_DATA_DUMPER@ USE_UNICODE = @USE_UNICODE@ USE_UNIDECODE = @USE_UNIDECODE@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ am__leading_dot = @am__leading_dot@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = run_test.sh tests.sh $(TESTS) long_tests \ coverage_macro.texi base_tests = \ macros sectionning formatting coverage encodings indices layout \ nested_formats contents \ $(htmlxref_cnf_tests) invalid long_tests = \ misc manuals xemacs_manual texi2html_manual tar_manual singular_manual htmlxref_cnf_tests = htmlxref htmlxref-only_mono htmlxref-only_split DIST_SUBDIRS = $(base_tests) $(long_tests) many_input_files SUBDIRS = . many_input_files TESTS = base_tests all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu test/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; ws='[ ]'; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ elif test -f $$tst; then dir=; \ else dir="$(srcdir)/"; fi; \ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *$$ws$$tst$$ws*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ echo "XPASS: $$tst"; \ ;; \ *) \ echo "PASS: $$tst"; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *$$ws$$tst$$ws*) \ xfail=`expr $$xfail + 1`; \ echo "XFAIL: $$tst"; \ ;; \ *) \ failed=`expr $$failed + 1`; \ echo "FAIL: $$tst"; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ echo "SKIP: $$tst"; \ fi; \ done; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="All $$all tests passed"; \ else \ banner="All $$all tests behaved as expected ($$xfail expected failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ banner="$$failed of $$all tests failed"; \ else \ banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ skipped="($$skip tests were not run)"; \ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$skipped"; \ fi; \ report=""; \ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ report="Please report to $(PACKAGE_BUGREPORT)"; \ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$report"; \ fi; \ dashes=`echo "$$dashes" | sed s/./=/g`; \ echo "$$dashes"; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ (cd $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ am__remove_distdir=: \ am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-recursive all-am: Makefile all-local installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-exec-am: install-html: install-html-recursive install-info: install-info-recursive install-man: install-pdf: install-pdf-recursive install-ps: install-ps-recursive installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ install-strip .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am all-local check check-TESTS check-am clean \ clean-generic clean-local ctags ctags-recursive distclean \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-recursive uninstall uninstall-am copy-tests: copy-base copy-long cd many_input_files && $(MAKE) copy-tests copy-base: $(srcdir)/tests.sh -copy $(base_tests) cp $(srcdir)/formatting/res/texi_formatting/formatting.texi $(srcdir)/formatting/formatting_for_makeinfo.texi copy-long: $(srcdir)/tests.sh -copy $(long_tests) clean-tests: $(srcdir)/tests.sh -clean $(base_tests) $(long_tests) # mimic automake check for an optional long-check: @srcdir=$(srcdir); export srcdir; \ tst=long_tests; failed=0; \ if test -f ./$$tst; then dir=./; \ elif test -f $$tst; then dir=; \ else dir="$(srcdir)/"; fi; \ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then :; \ else failed="1"; fi ; \ if test "$$failed" -ne 0; then \ echo "FAIL: long_test"; \ echo "========================================="; \ echo "Failure of long_tests"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "Please report to $(PACKAGE_BUGREPORT)"; \ fi; \ echo "========================================="; \ else \ echo "PASS: long_test"; \ echo "================"; \ echo "long_test passed"; \ echo "================"; \ fi ;\ test "$$failed" -eq 0; all-checks: check long-check # this is in order to have the files in .texinfo in the build dir all-local: for dir in $(htmlxref_cnf_tests); do \ $(MKDIR_P) $$dir/.texinfo/ ; \ if [ -f $$dir/.texinfo/htmlxref.cnf ]; then : ; \ else cp $(srcdir)/$$dir/htmlxref.cnf $$dir/.texinfo/ ; \ fi ; \ done clean-local: for dir in $(htmlxref_cnf_tests); do \ rm -rf $$dir/.texinfo/ ; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: texi2html-1.82/test/htmlxref-only_mono/0000755000175000017500000000000011264347123022052 5ustar flichtenheldflichtenheldtexi2html-1.82/test/htmlxref-only_mono/Makefile.in0000644000175000017500000002056511264347123024127 0ustar flichtenheldflichtenheld# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = test/htmlxref-only_mono DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DATE = @PACKAGE_DATE@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ REQUIRE_DATA_DUMPER = @REQUIRE_DATA_DUMPER@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_DATA_DUMPER = @USE_DATA_DUMPER@ USE_UNICODE = @USE_UNICODE@ USE_UNIDECODE = @USE_UNIDECODE@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ am__leading_dot = @am__leading_dot@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = htmlxref.cnf \ tests.txt res DISTCLEANFILES = l2h_tmp_dir.init tests.log tests.out all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/htmlxref-only_mono/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu test/htmlxref-only_mono/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-exec-am: install-html: install-html-am install-info: install-info-am install-man: install-pdf: install-pdf-am install-ps: install-ps-am installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic dist-hook \ distclean distclean-generic distclean-local distdir dvi dvi-am \ html html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am distclean-local: rm -rf out diffs dist-hook: rm -rf `find $(distdir)/res -name CVS` # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: texi2html-1.82/test/htmlxref-only_mono/res/0000755000175000017500000000000011264347123022643 5ustar flichtenheldflichtenheldtexi2html-1.82/test/htmlxref-only_mono/res/htmlxref_nodes/0000755000175000017500000000000011264347123025664 5ustar flichtenheldflichtenheldtexi2html-1.82/test/htmlxref-only_mono/res/htmlxref_nodes/other-nodes.html0000644000175000017500000001026411264347123031004 0ustar flichtenheldflichtenheld Untitled Document: 1. Chapter with nodes
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter with nodes

     
    id: other-nodes
    

    Top Top

     
    target: #Top
    

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/htmlxref-only_mono/res/htmlxref_nodes/test_refs_abt.html0000644000175000017500000001174011264347123031401 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/htmlxref-only_mono/res/htmlxref_nodes/index.html0000644000175000017500000000326111264347123027663 0ustar flichtenheldflichtenheld Untitled Document: Top

    The node you are looking for is at Top.

    texi2html-1.82/test/htmlxref-only_mono/res/htmlxref_nodes/local-node.html0000644000175000017500000000637011264347123030575 0ustar flichtenheldflichtenheld Untitled Document: local node
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    local node

     
    id: local-node
    

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/htmlxref-only_mono/res/htmlxref_nodes/test_refs.20000644000175000017500000000000011264347123027733 0ustar flichtenheldflichtenheldtexi2html-1.82/test/htmlxref-only_mono/res/htmlxref_nodes/test_refs.html0000644000175000017500000001145011264347123030551 0ustar flichtenheldflichtenheld Untitled Document: Test refs
    [Top] [Contents] [Index] [ ? ]

    Test refs

    Testing distant nodes

    a node (manual)a node

     
    mono : manual.html#a-node
    split: ../manual/a-node.html#a-node
    

    : (manual):

     
    mono : manual.html#_003a
    split: ../manual/_003a.html#_003a
    

    Top (manual)Top

     
    mono : manual.html#Top
    split: ../manual/index.html#Top
    

    Testing manual name

    ../manual/doc.texi (../manual/doc.texi)node

     
    mono : doc.html#node
    split: ../doc/node.html#node
    

    Testing local nodes

    !_"#$%&'()*+-./;<=>?[\]^_`|~ !_"#$%&'()*+-./;<=>?[\]^_`|~

     
    target: #_0021_005f_0022_0023_0024_0025_0026_0027_0028_0029_002a_002b_002d_002e_002f_003b_003c_003d_003e_003f_005b_005c_005d_005e_005f_0060_007c_007e
    

    Top Top

     
    target: #Top
    

    local node local node

     
    target: #local-node
    

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    ././@LongLink0000000000000000000000000000031400000000000011563 Lustar rootroottexi2html-1.82/test/htmlxref-only_mono/res/htmlxref_nodes/_0021_005f_0022_0023_0024_0025_0026_0027_0028_0029_002a_002b_002d_002e_002f_003b_003c_003d_003e_003f_005b_005c_005d_005e_005f_0060_007c_007e.htmltexi2html-1.82/test/htmlxref-only_mono/res/htmlxref_nodes/_0021_005f_0022_0023_0024_0025_0026_0027_00000644000175000017500000000671511264347123032653 0ustar flichtenheldflichtenheld Untitled Document: !_"#$%&'()*+-./;<=>?[\]^_`|~
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    !_"#$%&'()*+-./;<=>?[\]^_`|~

     
    id: _0021_005f_0022_0023_0024_0025_0026_0027_0028_0029_002a_002b_002d_002e_002f_003b_003c_003d_003e_003f_005b_005c_005d_005e_005f_0060_007c_007e
    

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/htmlxref-only_mono/res/htmlxref/0000755000175000017500000000000011264347123024474 5ustar flichtenheldflichtenheldtexi2html-1.82/test/htmlxref-only_mono/res/htmlxref/test_refs.20000644000175000017500000000000011264347123026543 0ustar flichtenheldflichtenheldtexi2html-1.82/test/htmlxref-only_mono/res/htmlxref/test_refs.html0000644000175000017500000002252111264347123027362 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    Test refs

    Testing distant nodes

    a node (manual)a node

     
    mono : manual.html#a-node
    split: ../manual/a-node.html#a-node
    

    : (manual):

     
    mono : manual.html#_003a
    split: ../manual/_003a.html#_003a
    

    Top (manual)Top

     
    mono : manual.html#Top
    split: ../manual/index.html#Top
    

    Testing manual name

    ../manual/doc.texi (../manual/doc.texi)node

     
    mono : doc.html#node
    split: ../doc/node.html#node
    

    Testing local nodes

    !_"#$%&'()*+-./;<=>?[\]^_`|~ !_"#$%&'()*+-./;<=>?[\]^_`|~

     
    target: #_0021_005f_0022_0023_0024_0025_0026_0027_0028_0029_002a_002b_002d_002e_002f_003b_003c_003d_003e_003f_005b_005c_005d_005e_005f_0060_007c_007e
    

    Top Test refs

     
    target: #Top
    

    local node local node

     
    target: #local-node
    

    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Chapter with nodes

     
    id: other-nodes
    

    Top Test refs

     
    target: #Top
    
     
    id: _0021_005f_0022_0023_0024_0025_0026_0027_0028_0029_002a_002b_002d_002e_002f_003b_003c_003d_003e_003f_005b_005c_005d_005e_005f_0060_007c_007e
    
     
    id: local-node
    

    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/htmlxref-only_mono/tests.txt0000644000175000017500000000017211264347123023755 0ustar flichtenheldflichtenheldhtmlxref ../sectionning/test_refs.texi htmlxref_nodes ../sectionning/test_refs.texi --split node --use-nodes --node-files texi2html-1.82/test/htmlxref-only_mono/htmlxref.cnf0000644000175000017500000000003711264347123024373 0ustar flichtenheldflichtenheldmanual mono mono-manual.html texi2html-1.82/test/htmlxref-only_mono/Makefile.am0000644000175000017500000000027211264347123024107 0ustar flichtenheldflichtenheldEXTRA_DIST = htmlxref.cnf \ tests.txt res DISTCLEANFILES = l2h_tmp_dir.init tests.log tests.out distclean-local: rm -rf out diffs dist-hook: rm -rf `find $(distdir)/res -name CVS` texi2html-1.82/test/layout/0000755000175000017500000000000011264347122017526 5ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/vertical_nav.init0000644000175000017500000000003711264347122023070 0ustar flichtenheldflichtenheld$VERTICAL_HEAD_NAVIGATION = 1; texi2html-1.82/test/layout/formatting_regions.texi0000644000175000017500000000274511264347122024331 0ustar flichtenheldflichtenheld\input texinfo @c -*-texinfo-*- @setfilename formatting-regions.info @documentdescription This is the explicit d--ocument @code{d@'escription}. @end documentdescription @node Top @top Top section @ifnothtml @menu * constructs:: * chapter:: chapter Menu comment * chapter2:description. Chapter 2 @end menu @end ifnothtml @node constructs @chapter constructs @include coverage_macro.texi @copying @mymacro{} @end copying @titlepage @title title --a @subtitle formatting subtitle --a @subtitle subtitle 2 --a @author author1 --a with accents in name T@'e@,ca @author author2 --a Titlepage @mymacro insertcopying in titlepage @insertcopying end titlepage @end titlepage @mymacro{} @example @mymacro{} @end example insertcopying @insertcopying @cindex t--ruc @cindex T--ruc @cindex . @cindex ? @cindex a @findex t--ruc @findex T--ruc @findex . @findex ? @findex a cp @printindex cp fn @printindex fn vr @printindex vr ky @printindex ky pg @printindex pg tp @printindex tp @node chapter @chapter chapter @footnote{in footnote} @format @menu * s--ect@comma{}ion:: s--ect@comma{}ion Menu comment ``simple-double--three---four----''@* @end menu @end format @node s--ect@comma{}ion @section A section @menu * subsection:: @end menu @node subsection @subsection subsection @menu * subsubsection:: @end menu @anchor{anchor} @node subsubsection @subsubsection subsubsection @node chapter2 @centerchap chapter 2 @printindex cp @printindex fn @contents @shortcontents texi2html-1.82/test/layout/only_toc_out.init0000644000175000017500000000047011264347122023131 0ustar flichtenheldflichtenheld$element_file_name = \&toc_out_element_file_name; sub toc_out_element_file_name($$$) { my $element = shift; my $type = shift; my $prefix = shift; if ($type and ($type ne 'top') and ($type ne 'toc')) { return "$prefix.$Texi2HTML::THISDOC{'extension'}"; } return undef; } 1; texi2html-1.82/test/layout/Makefile.in0000644000175000017500000002064311264347122021600 0ustar flichtenheldflichtenheld# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = test/layout DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_DATE = @PACKAGE_DATE@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ REQUIRE_DATA_DUMPER = @REQUIRE_DATA_DUMPER@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_DATA_DUMPER = @USE_DATA_DUMPER@ USE_UNICODE = @USE_UNICODE@ USE_UNIDECODE = @USE_UNIDECODE@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ am__leading_dot = @am__leading_dot@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = no_monolithic.texi navigation.texi formatting_regions.texi \ only_toc_out.init vertical_nav.init tests.txt res DISTCLEANFILES = l2h_tmp_dir.init tests.log tests.out all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/layout/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu test/layout/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-exec-am: install-html: install-html-am install-info: install-info-am install-man: install-pdf: install-pdf-am install-ps: install-ps-am installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic dist-hook \ distclean distclean-generic distclean-local distdir dvi dvi-am \ html html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am distclean-local: rm -rf out diffs dist-hook: rm -rf `find $(distdir)/res -name CVS` # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: texi2html-1.82/test/layout/res/0000755000175000017500000000000011264347122020317 5ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation_node/0000755000175000017500000000000011264347122023463 5ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation_node/navigation.html0000644000175000017500000000603211264347122026511 0ustar flichtenheldflichtenheld Untitled Document: File used for navigation testing
    [Top] [Contents] [Index] [ ? ]

    File used for navigation testing


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_node/navigation_1.html0000644000175000017500000000645111264347122026736 0ustar flichtenheldflichtenheld Untitled Document: 1. First chapter
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. First chapter


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_node/navigation.20000644000175000017500000000000011264347122025673 0ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation_node/navigation_3.html0000644000175000017500000000611711264347122026737 0ustar flichtenheldflichtenheld Untitled Document: 1.1.1 Sub section in section
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.1 Sub section in section


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_node/navigation_2.html0000644000175000017500000000722411264347122026736 0ustar flichtenheldflichtenheld Untitled Document: 1.1 Section in chapter
    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 Section in chapter

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b bb b b b b b b bb b bb.


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_node/navigation_abt.html0000644000175000017500000001216411264347122027342 0ustar flichtenheldflichtenheld Untitled Document: About This Document
    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_node/navigation_toc.html0000644000175000017500000000616711264347122027367 0ustar flichtenheldflichtenheld Untitled Document: Table of Contents
    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation/0000755000175000017500000000000011264347122022456 5ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation/navigation.html0000644000175000017500000002466511264347122025520 0ustar flichtenheldflichtenheld Untitled Document
    [Top] [Contents] [Index] [ ? ]

    File used for navigation testing


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. First chapter


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 Section in chapter

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b bb b b b b b b bb b bb.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.1 Sub section in section


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    About This Document

    This document was generated by a tester on a sunny day using texi2html.

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back Previous section in reading order 1.2.2
    [ > ] Forward Next section in reading order 1.2.4
    [ << ] FastBack Beginning of this chapter or previous chapter 1
    [ Up ] Up Up section 1.2
    [ >> ] FastForward Next chapter 2
    [Top] Top Cover (top) of document  
    [Contents] Contents Table of contents  
    [Index] Index Index  
    [ ? ] About About (help)  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation/navigation.20000644000175000017500000000000011264347122024666 0ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation_node_noheaders_init/0000755000175000017500000000000011264347122026536 5ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation_node_noheaders_init/navigation.html0000644000175000017500000000371311264347122031567 0ustar flichtenheldflichtenheld Untitled Document: File used for navigation testing

    File used for navigation testing


    texi2html-1.82/test/layout/res/navigation_node_noheaders_init/navigation_1.html0000644000175000017500000000410211264347122032000 0ustar flichtenheldflichtenheld Untitled Document: 1. First chapter

    1. First chapter

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_node_noheaders_init/navigation.20000644000175000017500000000000011264347122030746 0ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/navigation_node_noheaders_init/navigation_3.html0000644000175000017500000000364411264347122032014 0ustar flichtenheldflichtenheld Untitled Document: 1.1.1 Sub section in section

    1.1.1 Sub section in section

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_node_noheaders_init/navigation_2.html0000644000175000017500000000463011264347122032007 0ustar flichtenheldflichtenheld Untitled Document: 1.1 Section in chapter

    1.1 Section in chapter

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    AAAA

    b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b bb b b b b b b bb b bb.

    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/navigation_node_noheaders_init/navigation_toc.html0000644000175000017500000000437711264347122032443 0ustar flichtenheldflichtenheld Untitled Document: Table of Contents

    Table of Contents


    This document was generated by a tester on a sunny day using texi2html.

    texi2html-1.82/test/layout/res/formatting_regions/0000755000175000017500000000000011264347122024217 5ustar flichtenheldflichtenheldtexi2html-1.82/test/layout/res/formatting_regions/formatting_regions.html0000644000175000017500000070765111264347122031025 0ustar flichtenheldflichtenheld title –a
    [Top] [Contents] [Index] [ ? ]

    title –a

    formatting subtitle –a

    subtitle 2 –a

    author1 –a with accents in name Téça
    author2 –a

    Titlepage

    < > " & ’ ‘

    “simple-double–three—four—-”
    code: ``simple-double--three---four----''
    asis: “simple-double–three—four—-”
    strong: “simple-double–three—four—-”
    kbd: ``simple-double--three---four----''

    ‘‘simple-double--three—four—-’’

    @"u ü @"{U} Ü @~n ñ @^a â @’e é @=o ō @‘i ì @’{e} é @’{@dotless{i}} í @dotless{i} i @dotless{j} j @‘{@=E} Ē` @l{} ł @,{@’C} Ć, @,c ç @,c@"u çü

    @*
    @ followed by a space   @ followed by a tab   @ followed by a new line  @- @| @: @! ! @? ? @. . @@ @ @} } @{ { @/

    foo vs. bar. colon :And something else. semi colon ;. And ? ?. Now ! !@ but , ,

    @TeX TeX @LaTeX LaTeX @bullet • @copyright © @dots … @enddots ... @equiv ≡ @error error--> @expansion → @minus - @point ∗ @print -| @result ⇒ @today a sunny day @aa å @AA Å @ae æ @oe œ @AE Æ @OE Œ @o ø @O Ø @ss ß @l ł @L Ł @exclamdown ¡ @questiondown ¿ @pounds £ @registeredsymbol ® @ordf ª @ordm º @comma , @quotedblleft “ @quotedblright ” @quoteleft ‘ @quoteright ’ @quotedblbase „ @quotesinglbase ‚ @guillemetleft « @guillemetright » @guillemotleft « @guillemotright » @guilsinglleft ‹ @guilsinglright › @textdegree ° @euro € @arrow → @leq ≤ @geq ≥

    @acronym{--a,an accronym} –a (an accronym) @acronym{--a} –a @abbr{@'E--. @comma{}A., @'Etude Autonome } É–. ,A. (Étude Autonome) @abbr{@'E--. @comma{}A.} É–. ,A. @asis{--a} –a @b{--a} –a @cite{--a} –a @code{--a} --a @command{--a} --a @ctrl{--a} –a @dfn{--a} –a @dmn{--a} –a @email{--a,--b} –b @email{,--b} –b @email{--a} --a @emph{--a} –a @env{--a} --a @file{--a}--a@i{--a} –a @kbd{--a} --a @key{--a} <--a> @math{--a {\frac{1}{2}} @minus{}} –a \frac12 - @option{--a}--a@r{--a} –a @samp{--a}--a@sc{--a} –A @strong{--a} –a @t{--a} –a @sansserif{--a} –a @titlefont{--a}

    –a

    @indicateurl{--a} <--a> @uref{--a,--b} –b @uref{--a} --a @uref{,--b} –b @uref{--a,--b,--c} –c @uref{,--b,--c} –c @uref{--a,,--c} –c @uref{,,--c} –c @url{--a,--b} –b @url{--a,} --a @url{,--b} –b @var{--a} –a @verb{:--a:} --a @verb{:a < & @ % " -- b:} a < & @ % " -- b @w{} @H{a} a'' @H{--a} –a'' @dotaccent{a} ȧ @dotaccent{--a} –a. @ringaccent{a} å @ringaccent{--a} –a* @tieaccent{a} a[ @tieaccent{--a} –a[ @u{a} ă @u{--a} –a( @ubaraccent{a} a_ @ubaraccent{--a} –a_ @udotaccent{a}@udotaccent{--a} .–a @v{a} a< @v{--a} –a< @,{c} ç @,{--c} –c, @ogonek{a} ą @ogonek{--a} –a; @footnote{in footnote} (1) @footnote{in footnote2} (2)

    @image{f--ile} f--ile @image{f--ile,l--i} f--ile @image{f--ile,,l--e} f--ile @image{f--ile,,,alt} alt @image{f--ile,,,,e-d-xt} f--ile @image{f--ile,aze,az,alt,e--xt} alt @image{f-ile,aze,,a--lt} a–lt @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} alt



    @clicksequence{click @click{} A} click → A After clickstyle ⇒ @clicksequence{click @click{} A} click ⇒ A

    A quot—ation

    Note: A Note

    note: A note

    Caution: Caution

    Important: Important

    Tip: a Tip

    Warning: a Warning.

    something é TeX: The something é TeX is here.

    @ at the end of line A @ at the end of the @quotation line.

    something, other thing: something, other thing

    Note, the note: Note, the note

    Empty:

    :


    :

    A small quot—ation

    Note: A small Note

    something, other thing: something, other thing

    • i–temize
    • + i–tem +
    • b–ullet
    • - minu–s
    • e–mph item
    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
    trucbidule
     
    e--xample  some
       text
    
     
    s--mallexample
    
     
    d–isplay
    
     
    s–malldisplay
    
     
    l--isp
    
     
    s--malllisp
    
     
    f–ormat
    
     
    s–mallformat
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    cate--gory: de--ffn_name ar--guments more args
    even more so

    def–fn

    fset: i a g
    cmde: truc
    Command: log trap
    Command: log trap1
    Command: log trap2
    cmde: id ule truc
    cmde2: id ‘i’ ule truc
    id ‘i’ ule:
    :
    aaa:
    :
    :
    : machin
    : bidule machin
    truc: machin
    truc:
    truc: followed by a comment
    truc:
    :
    truc: a b c d e f g h i
    truc: deffnx before end deffn
    empty: deffn
    empty: deffn with deffnx
    empty: deffnx
    fset: i a g
    cmde: truc

    text in def item for second def item

    c--ategory: d--efvr_name

    d–efvr

    c--ategory: t--ype d--eftypefn_name a--rguments...

    d–eftypefn

    c--ategory on c--lass: t--ype d--eftypeop_name a--rguments...

    d–eftypeop

    c--ategory: t--ype d--eftypevr_name

    d–eftypevr

    c--ategory of c--lass: d--efcv_name

    d–efcv

    c--ategory on c--lass: d--efop_name a--rguments...

    d–efop

    c--ategory: d--eftp_name a--ttributes...

    d–eftp

    Function: d--efun_name a--rguments...

    d–efun

    Macro: d--efmac_name a--rguments...

    d–efmac

    Special Form: d--efspec_name a--rguments...

    d–efspec

    Variable: d--efvar_name argvar argvar1

    d–efvar

    User Option: d--efopt_name

    d–efopt

    Function: t--ype d--eftypefun_name a--rguments...

    d–eftypefun

    Variable: t--ype d--eftypevar_name

    d–eftypevar

    Instance Variable of c--lass: d--efivar_name

    d–efivar

    Instance Variable of c--lass: t--ype d--eftypeivar_name

    d–eftypeivar

    Method on c--lass: d--efmethod_name a--rguments...

    d–efmethod

    Method on c--lass: t--ype d--eftypemethod_name a--rguments...

    d–eftypemethod

    @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} See cross r—ef name@: (file n—ame@)c—hapter@ section ‘t—itle@’ in ma—nual@. @ref{chapter, cross ref name, title, file name, manual} cross ref name: (file name)chapter section ‘title’ in manual @pxref{chapter, cross ref name, title, file name, manual} see cross ref name: (file name)chapter section ‘title’ in manual @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter

    @ref{chapter} chapter @xref{chapter} See section chapter. @pxref{chapter} see section chapter @ref{s--ect@comma{}ion} A section

    @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } a , in cross ref: (a comma, in file)s–ect,ion section ‘a comma, in title’ in a , in manual name

    @ref{chapter,cross ref name} cross ref name @ref{chapter,,title} title @ref{chapter,,,file name} (file name)chapter @ref{chapter,,,,manual} section ‘chapter’ in manual @ref{chapter,cross ref name,title,} title @ref{chapter,cross ref name,,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,,,manual} section ‘chapter’ in manual @ref{chapter,cross ref name,title,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,title,,manual} section ‘title’ in manual @ref{chapter,cross ref name,title, file name, manual} cross ref name: (file name)chapter section ‘title’ in manual @ref{chapter,,title,file name} (file name)chapter @ref{chapter,,title,,manual} section ‘title’ in manual @ref{chapter,,title, file name, manual} (file name)chapter section ‘title’ in manual @ref{chapter,,,file name,manual} (file name)chapter section ‘chapter’ in manual

    @ref{(pman)anode,cross ref name} cross ref name: (pman)anode @ref{(pman)anode,,title} (pman)anode @ref{(pman)anode,,,file name} (file name)anode @ref{(pman)anode,,,,manual} (pman)anode section ‘anode’ in manual @ref{(pman)anode,cross ref name,title,} cross ref name: (pman)anode @ref{(pman)anode,cross ref name,,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,,,manual} cross ref name: (pman)anode section ‘anode’ in manual @ref{(pman)anode,cross ref name,title,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,title,,manual} cross ref name: (pman)anode section ‘title’ in manual @ref{(pman)anode,cross ref name,title, file name, manual} cross ref name: (file name)anode section ‘title’ in manual @ref{(pman)anode,,title,file name} (file name)anode @ref{(pman)anode,,title,,manual} (pman)anode section ‘title’ in manual @ref{(pman)anode,,title, file name, manual} (file name)anode section ‘title’ in manual @ref{(pman)anode,,,file name,manual} (file name)anode section ‘anode’ in manual

    @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter @inforef{chapter} @inforef{chapter, cross ref name} @inforef{chapter,,file name} See (file name)chapter @inforef{node, cross ref name, file name} See cross ref name: (file name)node @inforef{node} @inforef{node, cross ref name} @inforef{node,,file name} See (file name)node @inforef{chapter, cross ref name, file name, spurious arg} See cross ref name: (file name, spurious arg)chapter

    @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} See a , in cross ref: (a comma, in file)s–ect,ion

    • a

    l–ine

    a
    b

    l–ine

    - a
    - b

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in verbatim ''
    
    html ''

    majorheading

    chapheading

    heading

    subheading

    subsubheading

    @acronym{--a,an accronym @comma{} @enddots{}} –a (an accronym , ...) @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } É–. ,A. (Étude–, Autonome) @abbr{@'E--. @comma{}A.} É–. ,A.

    @math{--a@minus{} {\frac{1}{2}}} –a- \frac12

    @image{f-ile,,,alt@verb{:jk _" %}} altjk _" %@ @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} jk _" %@ in b " @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} altjk _" %@

    Somehow invalid use of @,:
    @, ,
    @,@"u @,"u

    Invalid use of @’:
    @’ ’
    @’@"u @'"u

    @dotless{truc} truc @dotless{ij} ij @dotless{--a} –a @dotless{a} a

    @TeX, but without brace TeX

    @# @#

    @w{--a} –a

    @image{,1--xt} @image{,,2--xt} @image{,,,3--xt}


    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    fun:
    truc: machin bidule chose and
    truc: machin bidule chose and after
    truc: machin bidule chose and {
    truc: machin bidule chose and { and after
    truc: followed by a comment

    Various deff lines

    truc: after a deff item

    @ref{node} @ref{node}

    @ref{,cross ref name} @ref{,cross ref name} @ref{,,title} @ref{,,title} @ref{,,,file name} (file name) @ref{,,,,manual} manual @ref{node,cross ref name} @ref{node,cross ref name} @ref{node,,title} @ref{node,,title} @ref{node,,,file name} (file name)node @ref{node,,,,manual} section ‘node’ in manual @ref{node,cross ref name,title,} @ref{node,cross ref name,title,} @ref{node,cross ref name,,file name} cross ref name: (file name)node @ref{node,cross ref name,,,manual} section ‘node’ in manual @ref{node,cross ref name,title,file name} cross ref name: (file name)node @ref{node,cross ref name,title,,manual} section ‘title’ in manual @ref{node,cross ref name,title, file name, manual} cross ref name: (file name)node section ‘title’ in manual @ref{node,,title,file name} (file name)node @ref{node,,title,,manual} section ‘title’ in manual @ref{chapter,,title, file name, manual} (file name)chapter section ‘title’ in manual @ref{node,,title, file name, manual} (file name)node section ‘title’ in manual @ref{node,,,file name,manual} (file name)node section ‘node’ in manual @ref{,cross ref name,title,} @ref{,cross ref name,title,} @ref{,cross ref name,,file name} cross ref name: (file name) @ref{,cross ref name,,,manual} manual @ref{,cross ref name,title,file name} cross ref name: (file name) @ref{,cross ref name,title,,manual} section ‘title’ in manual @ref{,cross ref name,title, file name, manual} cross ref name: (file name) section ‘title’ in manual @ref{,,title,file name} (file name) @ref{,,title,,manual} section ‘title’ in manual @ref{,,title, file name, manual} (file name) section ‘title’ in manual @ref{,,,file name,manual} (file name) manual

    @inforef{,cross ref name } @inforef{,,file name} @inforef{,cross ref name, file name} @inforef{}

    insertcopying in titlepage

    < > " & ’ ‘

    “simple-double–three—four—-”
    code: ``simple-double--three---four----''
    asis: “simple-double–three—four—-”
    strong: “simple-double–three—four—-”
    kbd: ``simple-double--three---four----''

    ‘‘simple-double--three—four—-’’

    @"u ü @"{U} Ü @~n ñ @^a â @’e é @=o ō @‘i ì @’{e} é @’{@dotless{i}} í @dotless{i} i @dotless{j} j @‘{@=E} Ē` @l{} ł @,{@’C} Ć, @,c ç @,c@"u çü

    @*
    @ followed by a space   @ followed by a tab   @ followed by a new line  @- @| @: @! ! @? ? @. . @@ @ @} } @{ { @/

    foo vs. bar. colon :And something else. semi colon ;. And ? ?. Now ! !@ but , ,

    @TeX TeX @LaTeX LaTeX @bullet • @copyright © @dots … @enddots ... @equiv ≡ @error error--> @expansion → @minus - @point ∗ @print -| @result ⇒ @today a sunny day @aa å @AA Å @ae æ @oe œ @AE Æ @OE Œ @o ø @O Ø @ss ß @l ł @L Ł @exclamdown ¡ @questiondown ¿ @pounds £ @registeredsymbol ® @ordf ª @ordm º @comma , @quotedblleft “ @quotedblright ” @quoteleft ‘ @quoteright ’ @quotedblbase „ @quotesinglbase ‚ @guillemetleft « @guillemetright » @guillemotleft « @guillemotright » @guilsinglleft ‹ @guilsinglright › @textdegree ° @euro € @arrow → @leq ≤ @geq ≥

    @acronym{--a,an accronym} –a (an accronym) @acronym{--a} –a @abbr{@'E--. @comma{}A., @'Etude Autonome } É–. ,A. (Étude Autonome) @abbr{@'E--. @comma{}A.} É–. ,A. @asis{--a} –a @b{--a} –a @cite{--a} –a @code{--a} --a @command{--a} --a @ctrl{--a} –a @dfn{--a} –a @dmn{--a} –a @email{--a,--b} –b @email{,--b} –b @email{--a} --a @emph{--a} –a @env{--a} --a @file{--a}--a@i{--a} –a @kbd{--a} --a @key{--a} <--a> @math{--a {\frac{1}{2}} @minus{}} –a \frac12 - @option{--a}--a@r{--a} –a @samp{--a}--a@sc{--a} –A @strong{--a} –a @t{--a} –a @sansserif{--a} –a @titlefont{--a}

    –a

    @indicateurl{--a} <--a> @uref{--a,--b} –b @uref{--a} --a @uref{,--b} –b @uref{--a,--b,--c} –c @uref{,--b,--c} –c @uref{--a,,--c} –c @uref{,,--c} –c @url{--a,--b} –b @url{--a,} --a @url{,--b} –b @var{--a} –a @verb{:--a:} --a @verb{:a < & @ % " -- b:} a < & @ % " -- b @w{} @H{a} a'' @H{--a} –a'' @dotaccent{a} ȧ @dotaccent{--a} –a. @ringaccent{a} å @ringaccent{--a} –a* @tieaccent{a} a[ @tieaccent{--a} –a[ @u{a} ă @u{--a} –a( @ubaraccent{a} a_ @ubaraccent{--a} –a_ @udotaccent{a}@udotaccent{--a} .–a @v{a} a< @v{--a} –a< @,{c} ç @,{--c} –c, @ogonek{a} ą @ogonek{--a} –a; @footnote{in footnote} (1) @footnote{in footnote2} (2)

    @image{f--ile} f--ile @image{f--ile,l--i} f--ile @image{f--ile,,l--e} f--ile @image{f--ile,,,alt} alt @image{f--ile,,,,e-d-xt} f--ile @image{f--ile,aze,az,alt,e--xt} alt @image{f-ile,aze,,a--lt} a–lt @image{@file{f--ile}@@@.,aze,az,alt,@file{file ext} e--xt@} alt



    @clicksequence{click @click{} A} click → A After clickstyle ⇒ @clicksequence{click @click{} A} click ⇒ A

    A quot—ation

    Note: A Note

    note: A note

    Caution: Caution

    Important: Important

    Tip: a Tip

    Warning: a Warning.

    something é TeX: The something é TeX is here.

    @ at the end of line A @ at the end of the @quotation line.

    something, other thing: something, other thing

    Note, the note: Note, the note

    Empty:

    :


    :

    A small quot—ation

    Note: A small Note

    something, other thing: something, other thing

    • i–temize
    • + i–tem +
    • b–ullet
    • - minu–s
    • e–mph item
    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    1. e–numerate
    mu–ltitable headitemanother tab
    mu–ltitable itemmultitable tab
    mu–ltitable item 2multitable tab 2
    lone mu–ltitable item
    trucbidule
     
    e--xample  some
       text
    
     
    s--mallexample
    
     
    d–isplay
    
     
    s–malldisplay
    
     
    l--isp
    
     
    s--malllisp
    
     
    f–ormat
    
     
    s–mallformat
    
    c--ategory: d--effn_name a--rguments...

    d–effn

    cate--gory: de--ffn_name ar--guments more args
    even more so

    def–fn

    fset: i a g
    cmde: truc
    Command: log trap
    Command: log trap1
    Command: log trap2
    cmde: id ule truc
    cmde2: id ‘i’ ule truc
    id ‘i’ ule:
    :
    aaa:
    :
    :
    : machin
    : bidule machin
    truc: machin
    truc:
    truc: followed by a comment
    truc:
    :
    truc: a b c d e f g h i
    truc: deffnx before end deffn
    empty: deffn
    empty: deffn with deffnx
    empty: deffnx
    fset: i a g
    cmde: truc

    text in def item for second def item

    c--ategory: d--efvr_name

    d–efvr

    c--ategory: t--ype d--eftypefn_name a--rguments...

    d–eftypefn

    c--ategory on c--lass: t--ype d--eftypeop_name a--rguments...

    d–eftypeop

    c--ategory: t--ype d--eftypevr_name

    d–eftypevr

    c--ategory of c--lass: d--efcv_name

    d–efcv

    c--ategory on c--lass: d--efop_name a--rguments...

    d–efop

    c--ategory: d--eftp_name a--ttributes...

    d–eftp

    Function: d--efun_name a--rguments...

    d–efun

    Macro: d--efmac_name a--rguments...

    d–efmac

    Special Form: d--efspec_name a--rguments...

    d–efspec

    Variable: d--efvar_name argvar argvar1

    d–efvar

    User Option: d--efopt_name

    d–efopt

    Function: t--ype d--eftypefun_name a--rguments...

    d–eftypefun

    Variable: t--ype d--eftypevar_name

    d–eftypevar

    Instance Variable of c--lass: d--efivar_name

    d–efivar

    Instance Variable of c--lass: t--ype d--eftypeivar_name

    d–eftypeivar

    Method on c--lass: d--efmethod_name a--rguments...

    d–efmethod

    Method on c--lass: t--ype d--eftypemethod_name a--rguments...

    d–eftypemethod

    @xref{c---hapter@@, cross r---ef name@@, t---itle@@, file n---ame@@, ma---nual@@} See cross r—ef name@: (file n—ame@)c—hapter@ section ‘t—itle@’ in ma—nual@. @ref{chapter, cross ref name, title, file name, manual} cross ref name: (file name)chapter section ‘title’ in manual @pxref{chapter, cross ref name, title, file name, manual} see cross ref name: (file name)chapter section ‘title’ in manual @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter

    @ref{chapter} chapter @xref{chapter} See section chapter. @pxref{chapter} see section chapter @ref{s--ect@comma{}ion} A section

    @ref{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in title, a comma@comma{} in file, a @comma{} in manual name } a , in cross ref: (a comma, in file)s–ect,ion section ‘a comma, in title’ in a , in manual name

    @ref{chapter,cross ref name} cross ref name @ref{chapter,,title} title @ref{chapter,,,file name} (file name)chapter @ref{chapter,,,,manual} section ‘chapter’ in manual @ref{chapter,cross ref name,title,} title @ref{chapter,cross ref name,,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,,,manual} section ‘chapter’ in manual @ref{chapter,cross ref name,title,file name} cross ref name: (file name)chapter @ref{chapter,cross ref name,title,,manual} section ‘title’ in manual @ref{chapter,cross ref name,title, file name, manual} cross ref name: (file name)chapter section ‘title’ in manual @ref{chapter,,title,file name} (file name)chapter @ref{chapter,,title,,manual} section ‘title’ in manual @ref{chapter,,title, file name, manual} (file name)chapter section ‘title’ in manual @ref{chapter,,,file name,manual} (file name)chapter section ‘chapter’ in manual

    @ref{(pman)anode,cross ref name} cross ref name: (pman)anode @ref{(pman)anode,,title} (pman)anode @ref{(pman)anode,,,file name} (file name)anode @ref{(pman)anode,,,,manual} (pman)anode section ‘anode’ in manual @ref{(pman)anode,cross ref name,title,} cross ref name: (pman)anode @ref{(pman)anode,cross ref name,,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,,,manual} cross ref name: (pman)anode section ‘anode’ in manual @ref{(pman)anode,cross ref name,title,file name} cross ref name: (file name)anode @ref{(pman)anode,cross ref name,title,,manual} cross ref name: (pman)anode section ‘title’ in manual @ref{(pman)anode,cross ref name,title, file name, manual} cross ref name: (file name)anode section ‘title’ in manual @ref{(pman)anode,,title,file name} (file name)anode @ref{(pman)anode,,title,,manual} (pman)anode section ‘title’ in manual @ref{(pman)anode,,title, file name, manual} (file name)anode section ‘title’ in manual @ref{(pman)anode,,,file name,manual} (file name)anode section ‘anode’ in manual

    @inforef{chapter, cross ref name, file name} See cross ref name: (file name)chapter @inforef{chapter} @inforef{chapter, cross ref name} @inforef{chapter,,file name} See (file name)chapter @inforef{node, cross ref name, file name} See cross ref name: (file name)node @inforef{node} @inforef{node, cross ref name} @inforef{node,,file name} See (file name)node @inforef{chapter, cross ref name, file name, spurious arg} See cross ref name: (file name, spurious arg)chapter

    @inforef{s--ect@comma{}ion, a @comma{} in cross ref, a comma@comma{} in file} See a , in cross ref: (a comma, in file)s–ect,ion

    • a

    l–ine

    a
    b

    l–ine

    - a
    - b

    l–ine

    c–artouche

    f–lushleft

    f–lushright

    ce–ntered line

    in verbatim ''
    
    html ''

    majorheading

    chapheading

    heading

    subheading

    subsubheading

    @acronym{--a,an accronym @comma{} @enddots{}} –a (an accronym , ...) @abbr{@'E--. @comma{}A., @'Etude--@comma{} @b{Autonome} } É–. ,A. (Étude–, Autonome) @abbr{@'E--. @comma{}A.} É–. ,A.

    @math{--a@minus{} {\frac{1}{2}}} –a- \frac12

    @image{f-ile,,,alt@verb{:jk _" %}} altjk _" %@ @image{f--ile,aze,az,@verb{:jk _" %@:} @b{in b "},e--xt} jk _" %@ in b " @image{file@verb{:jk _" %@:},,,alt@verb{:jk _" %@:}} altjk _" %@

    Somehow invalid use of @,:
    @, ,
    @,@"u @,"u

    Invalid use of @’:
    @’ ’
    @’@"u @'"u

    @dotless{truc} truc @dotless{ij} ij @dotless{--a} –a @dotless{a} a

    @TeX, but without brace TeX

    @# @#

    @w{--a} –a

    @image{,1--xt} @image{,,2--xt} @image{,,,3--xt}


    • after emph e–mph item
    • a–n itemize line i–tem 1
    • a–n itemize line i–tem 2
    fun:
    truc: machin bidule chose and
    truc: machin bidule chose and after
    truc: machin bidule chose and {
    truc: machin bidule chose and { and after
    truc: followed by a comment

    Various deff lines

    truc: after a deff item

    @ref{node} @ref{node}

    @ref{,cross ref name} @ref{,cross ref name} @ref{,,title} @ref{,,title} @ref{,,,file name} (file name) @ref{,,,,manual} manual @ref{node,cross ref name} @ref{node,cross ref name} @ref{node,,title} @ref{node,,title} @ref{node,,,file name} (file name)node @ref{node,,,,manual} section ‘node’ in manual @ref{node,cross ref name,title,} @ref{node,cross ref name,title,} @ref{node,cross ref name,,file name} cross ref name: (file name)node @ref{node,cross ref name,,,manual} section ‘node’ in manual @ref{node,cross ref name,title,file name} cross ref name: (file name)node @ref{node,cross ref name,title,,manual} section ‘title’ in manual @ref{node,cross ref name,title, file name, manual} cross ref name: (file name)node section ‘title’ in manual @ref{node,,title,file name} (file name)node @ref{node,,title,,manual} section ‘title’ in manual @ref{chapter,,title, file name, manual} (file name)chapter section ‘title’ in manual @ref{node,,title, file name, manual} (file name)node section ‘title’ in manual @ref{node,,,file name,manual} (file name)node section ‘node’ in manual @ref{,cross ref name,title,} @ref{,cross ref name,title,} @ref{,cross ref name,,file name} cross ref name: (file name) @ref{,cross ref name,,,manual} manual @ref{,cross ref name,title,file name} cross ref name: (file name) @ref{,cross ref name,title,,manual} section ‘title’ in manual @ref{,cross ref name,title, file name, manual} cross ref name: (file name) section ‘title’ in manual @ref{,,title,file name} (file name) @ref{,,title,,manual} section ‘title’ in manual @ref{,,title, file name, manual} (file name) section ‘title’ in manual @ref{,,,file name,manual} (file name) manual

    @inforef{,cross ref name } @inforef{,,file name} @inforef{,cross ref name, file name} @inforef{}

    end titlepage

    Short Table of Contents